From 0e135adbe2b68d4ca7edfe5a36a4ad2f8de3bcc6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 17 Nov 2025 21:27:33 +0000 Subject: [PATCH] Update dependency mermaid to v11.9.0 (#13708) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Laurent Cozic --- packages/app-mobile/pluginAssets/index.js | 4 +- packages/app-mobile/pluginAssets/index.web.js | 2 +- .../mermaid/mermaid.min.js.base64.js | 2 +- .../renderer/assets/mermaid/mermaid.min.js | 623 +++++++++--------- packages/renderer/package.json | 2 +- yarn.lock | 34 +- 6 files changed, 346 insertions(+), 321 deletions(-) diff --git a/packages/app-mobile/pluginAssets/index.js b/packages/app-mobile/pluginAssets/index.js index e0c621a3cf..250bf2e588 100644 --- a/packages/app-mobile/pluginAssets/index.js +++ b/packages/app-mobile/pluginAssets/index.js @@ -1,5 +1,7 @@ module.exports = { -hash:"987efee92a78bb62fe4f889c5b38aceb", files: { +hash:"ae606ff7fac0daba38235dc8e1c205ba", files: { +'abc/abc_render.js': { data: require('./abc/abc_render.js.base64.js'), mime: 'application/javascript', encoding: 'base64' }, +'abc/abcjs-basic-min.js': { data: require('./abc/abcjs-basic-min.js.base64.js'), mime: 'application/javascript', encoding: 'base64' }, '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/index.web.js b/packages/app-mobile/pluginAssets/index.web.js index 70ab36ab92..50370f577e 100644 --- a/packages/app-mobile/pluginAssets/index.web.js +++ b/packages/app-mobile/pluginAssets/index.web.js @@ -1 +1 @@ -module.exports = {"hash":"987efee92a78bb62fe4f889c5b38aceb","files":["highlight.js/atom-one-dark-reasonable.css","highlight.js/atom-one-light.css","katex/fonts/KaTeX_AMS-Regular.woff2","katex/fonts/KaTeX_Caligraphic-Bold.woff2","katex/fonts/KaTeX_Caligraphic-Regular.woff2","katex/fonts/KaTeX_Fraktur-Bold.woff2","katex/fonts/KaTeX_Fraktur-Regular.woff2","katex/fonts/KaTeX_Main-Bold.woff2","katex/fonts/KaTeX_Main-BoldItalic.woff2","katex/fonts/KaTeX_Main-Italic.woff2","katex/fonts/KaTeX_Main-Regular.woff2","katex/fonts/KaTeX_Math-BoldItalic.woff2","katex/fonts/KaTeX_Math-Italic.woff2","katex/fonts/KaTeX_SansSerif-Bold.woff2","katex/fonts/KaTeX_SansSerif-Italic.woff2","katex/fonts/KaTeX_SansSerif-Regular.woff2","katex/fonts/KaTeX_Script-Regular.woff2","katex/fonts/KaTeX_Size1-Regular.woff2","katex/fonts/KaTeX_Size2-Regular.woff2","katex/fonts/KaTeX_Size3-Regular.woff2","katex/fonts/KaTeX_Size4-Regular.woff2","katex/fonts/KaTeX_Typewriter-Regular.woff2","katex/katex.css","mermaid/mermaid.min.js","mermaid/mermaid_render.js"]} \ No newline at end of file +module.exports = {"hash":"ae606ff7fac0daba38235dc8e1c205ba","files":["abc/abc_render.js","abc/abcjs-basic-min.js","highlight.js/atom-one-dark-reasonable.css","highlight.js/atom-one-light.css","katex/fonts/KaTeX_AMS-Regular.woff2","katex/fonts/KaTeX_Caligraphic-Bold.woff2","katex/fonts/KaTeX_Caligraphic-Regular.woff2","katex/fonts/KaTeX_Fraktur-Bold.woff2","katex/fonts/KaTeX_Fraktur-Regular.woff2","katex/fonts/KaTeX_Main-Bold.woff2","katex/fonts/KaTeX_Main-BoldItalic.woff2","katex/fonts/KaTeX_Main-Italic.woff2","katex/fonts/KaTeX_Main-Regular.woff2","katex/fonts/KaTeX_Math-BoldItalic.woff2","katex/fonts/KaTeX_Math-Italic.woff2","katex/fonts/KaTeX_SansSerif-Bold.woff2","katex/fonts/KaTeX_SansSerif-Italic.woff2","katex/fonts/KaTeX_SansSerif-Regular.woff2","katex/fonts/KaTeX_Script-Regular.woff2","katex/fonts/KaTeX_Size1-Regular.woff2","katex/fonts/KaTeX_Size2-Regular.woff2","katex/fonts/KaTeX_Size3-Regular.woff2","katex/fonts/KaTeX_Size4-Regular.woff2","katex/fonts/KaTeX_Typewriter-Regular.woff2","katex/katex.css","mermaid/mermaid.min.js","mermaid/mermaid_render.js"]} \ No newline at end of file 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 eaeeb045f0..90c26be582 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 = `InVzZSBzdHJpY3QiO3ZhciBfX2VzYnVpbGRfZXNtX21lcm1haWQ9KCgpPT57dmFyIEIyZT1PYmplY3QuY3JlYXRlO3ZhciBieT1PYmplY3QuZGVmaW5lUHJvcGVydHk7dmFyIEYyZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO3ZhciAkMmU9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7dmFyIHoyZT1PYmplY3QuZ2V0UHJvdG90eXBlT2YsRzJlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dmFyIG89KHQsZSk9PmJ5KHQsIm5hbWUiLHt2YWx1ZTplLGNvbmZpZ3VyYWJsZTohMH0pO3ZhciBOPSh0LGUpPT4oKT0+KHQmJihlPXQodD0wKSksZSk7dmFyIE1pPSh0LGUpPT4oKT0+KGV8fHQoKGU9e2V4cG9ydHM6e319KS5leHBvcnRzLGUpLGUuZXhwb3J0cyksaHI9KHQsZSk9Pntmb3IodmFyIHIgaW4gZSlieSh0LHIse2dldDplW3JdLGVudW1lcmFibGU6ITB9KX0sTDQ9KHQsZSxyLG4pPT57aWYoZSYmdHlwZW9mIGU9PSJvYmplY3QifHx0eXBlb2YgZT09ImZ1bmN0aW9uIilmb3IobGV0IGkgb2YgJDJlKGUpKSFHMmUuY2FsbCh0LGkpJiZpIT09ciYmYnkodCxpLHtnZXQ6KCk9PmVbaV0sZW51bWVyYWJsZTohKG49RjJlKGUsaSkpfHxuLmVudW1lcmFibGV9KTtyZXR1cm4gdH0sU3I9KHQsZSxyKT0+KEw0KHQsZSwiZGVmYXVsdCIpLHImJkw0KHIsZSwiZGVmYXVsdCIpKSxTYT0odCxlLHIpPT4ocj10IT1udWxsP0IyZSh6MmUodCkpOnt9LEw0KGV8fCF0fHwhdC5fX2VzTW9kdWxlP2J5KHIsImRlZmF1bHQiLHt2YWx1ZTp0LGVudW1lcmFibGU6ITB9KTpyLHQpKSxWMmU9dD0+TDQoYnkoe30sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQpO3ZhciBSND1NaSgoRUMsU0MpPT57InVzZSBzdHJpY3QiOyhmdW5jdGlvbih0LGUpe3R5cGVvZiBFQz09Im9iamVjdCImJnR5cGVvZiBTQzwidSI/U0MuZXhwb3J0cz1lKCk6dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZD9kZWZpbmUoZSk6KHQ9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHx8c2VsZikuZGF5anM9ZSgpfSkoRUMsZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIHQ9MWUzLGU9NmU0LHI9MzZlNSxuPSJtaWxsaXNlY29uZCIsaT0ic2Vjb25kIixhPSJtaW51dGUiLHM9ImhvdXIiLGw9ImRheSIsdT0id2VlayIsaD0ibW9udGgiLGY9InF1YXJ0ZXIiLGQ9InllYXIiLHA9ImRhdGUiLG09IkludmFsaWQgRGF0ZSIsZz0vXihcZHs0fSlbLS9dPyhcZHsxLDJ9KT9bLS9dPyhcZHswLDJ9KVtUdFxzXSooXGR7MSwyfSk/Oj8oXGR7MSwyfSk/Oj8oXGR7MSwyfSk/Wy46XT8oXGQrKT8kLyx5PS9cWyhbXlxdXSspXXxZezEsNH18TXsxLDR9fER7MSwyfXxkezEsNH18SHsxLDJ9fGh7MSwyfXxhfEF8bXsxLDJ9fHN7MSwyfXxaezEsMn18U1NTL2csdj17bmFtZToiZW4iLHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSxtb250aHM6IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksb3JkaW5hbDpvKGZ1bmN0aW9uKGspe3ZhciBMPVsidGgiLCJzdCIsIm5kIiwicmQiXSxSPWslMTAwO3JldHVybiJbIitrKyhMWyhSLTIwKSUxMF18fExbUl18fExbMF0pKyJdIn0sIm9yZGluYWwiKX0seD1vKGZ1bmN0aW9uKGssTCxSKXt2YXIgTz1TdHJpbmcoayk7cmV0dXJuIU98fE8ubGVuZ3RoPj1MP2s6IiIrQXJyYXkoTCsxLU8ubGVuZ3RoKS5qb2luKFIpK2t9LCJtIiksYj17czp4LHo6byhmdW5jdGlvbihrKXt2YXIgTD0tay51dGNPZmZzZXQoKSxSPU1hdGguYWJzKEwpLE89TWF0aC5mbG9vcihSLzYwKSxNPVIlNjA7cmV0dXJuKEw8PTA/IisiOiItIikreChPLDIsIjAiKSsiOiIreChNLDIsIjAiKX0sInoiKSxtOm8oZnVuY3Rpb24gayhMLFIpe2lmKEwuZGF0ZSgpPFIuZGF0ZSgpKXJldHVybi1rKFIsTCk7dmFyIE89MTIqKFIueWVhcigpLUwueWVhcigpKSsoUi5tb250aCgpLUwubW9udGgoKSksTT1MLmNsb25lKCkuYWRkKE8saCksQj1SLU08MCxGPUwuY2xvbmUoKS5hZGQoTysoQj8tMToxKSxoKTtyZXR1cm4rKC0oTysoUi1NKS8oQj9NLUY6Ri1NKSl8fDApfSwidCIpLGE6byhmdW5jdGlvbihrKXtyZXR1cm4gazwwP01hdGguY2VpbChrKXx8MDpNYXRoLmZsb29yKGspfSwiYSIpLHA6byhmdW5jdGlvbihrKXtyZXR1cm57TTpoLHk6ZCx3OnUsZDpsLEQ6cCxoOnMsbTphLHM6aSxtczpuLFE6Zn1ba118fFN0cmluZyhrfHwiIikudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9zJC8sIiIpfSwicCIpLHU6byhmdW5jdGlvbihrKXtyZXR1cm4gaz09PXZvaWQgMH0sInUiKX0sdz0iZW4iLEM9e307Q1t3XT12O3ZhciBUPSIkaXNEYXlqc09iamVjdCIsRT1vKGZ1bmN0aW9uKGspe3JldHVybiBrIGluc3RhbmNlb2YgSXx8ISgha3x8IWtbVF0pfSwiUyIpLEE9byhmdW5jdGlvbiBrKEwsUixPKXt2YXIgTTtpZighTClyZXR1cm4gdztpZih0eXBlb2YgTD09InN0cmluZyIpe3ZhciBCPUwudG9Mb3dlckNhc2UoKTtDW0JdJiYoTT1CKSxSJiYoQ1tCXT1SLE09Qik7dmFyIEY9TC5zcGxpdCgiLSIpO2lmKCFNJiZGLmxlbmd0aD4xKXJldHVybiBrKEZbMF0pfWVsc2V7dmFyIFA9TC5uYW1lO0NbUF09TCxNPVB9cmV0dXJuIU8mJk0mJih3PU0pLE18fCFPJiZ3fSwidCIpLFM9byhmdW5jdGlvbihrLEwpe2lmKEUoaykpcmV0dXJuIGsuY2xvbmUoKTt2YXIgUj10eXBlb2YgTD09Im9iamVjdCI/TDp7fTtyZXR1cm4gUi5kYXRlPWssUi5hcmdzPWFyZ3VtZW50cyxuZXcgSShSKX0sIk8iKSxfPWI7Xy5sPUEsXy5pPUUsXy53PWZ1bmN0aW9uKGssTCl7cmV0dXJuIFMoayx7bG9jYWxlOkwuJEwsdXRjOkwuJHUseDpMLiR4LCRvZmZzZXQ6TC4kb2Zmc2V0fSl9O3ZhciBJPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gayhSKXt0aGlzLiRMPUEoUi5sb2NhbGUsbnVsbCwhMCksdGhpcy5wYXJzZShSKSx0aGlzLiR4PXRoaXMuJHh8fFIueHx8e30sdGhpc1tUXT0hMH1vKGssIk0iKTt2YXIgTD1rLnByb3RvdHlwZTtyZXR1cm4gTC5wYXJzZT1mdW5jdGlvbihSKXt0aGlzLiRkPWZ1bmN0aW9uKE8pe3ZhciBNPU8uZGF0ZSxCPU8udXRjO2lmKE09PT1udWxsKXJldHVybiBuZXcgRGF0ZShOYU4pO2lmKF8udShNKSlyZXR1cm4gbmV3IERhdGU7aWYoTSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIG5ldyBEYXRlKE0pO2lmKHR5cGVvZiBNPT0ic3RyaW5nIiYmIS9aJC9pLnRlc3QoTSkpe3ZhciBGPU0ubWF0Y2goZyk7aWYoRil7dmFyIFA9RlsyXS0xfHwwLHo9KEZbN118fCIwIikuc3Vic3RyaW5nKDAsMyk7cmV0dXJuIEI/bmV3IERhdGUoRGF0ZS5VVEMoRlsxXSxQLEZbM118fDEsRls0XXx8MCxGWzVdfHwwLEZbNl18fDAseikpOm5ldyBEYXRlKEZbMV0sUCxGWzNdfHwxLEZbNF18fDAsRls1XXx8MCxGWzZdfHwwLHopfX1yZXR1cm4gbmV3IERhdGUoTSl9KFIpLHRoaXMuaW5pdCgpfSxMLmluaXQ9ZnVuY3Rpb24oKXt2YXIgUj10aGlzLiRkO3RoaXMuJHk9Ui5nZXRGdWxsWWVhcigpLHRoaXMuJE09Ui5nZXRNb250aCgpLHRoaXMuJEQ9Ui5nZXREYXRlKCksdGhpcy4kVz1SLmdldERheSgpLHRoaXMuJEg9Ui5nZXRIb3VycygpLHRoaXMuJG09Ui5nZXRNaW51dGVzKCksdGhpcy4kcz1SLmdldFNlY29uZHMoKSx0aGlzLiRtcz1SLmdldE1pbGxpc2Vjb25kcygpfSxMLiR1dGlscz1mdW5jdGlvbigpe3JldHVybiBffSxMLmlzVmFsaWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZC50b1N0cmluZygpIT09bX0sTC5pc1NhbWU9ZnVuY3Rpb24oUixPKXt2YXIgTT1TKFIpO3JldHVybiB0aGlzLnN0YXJ0T2YoTyk8PU0mJk08PXRoaXMuZW5kT2YoTyl9LEwuaXNBZnRlcj1mdW5jdGlvbihSLE8pe3JldHVybiBTKFIpPHRoaXMuc3RhcnRPZihPKX0sTC5pc0JlZm9yZT1mdW5jdGlvbihSLE8pe3JldHVybiB0aGlzLmVuZE9mKE8pPFMoUil9LEwuJGc9ZnVuY3Rpb24oUixPLE0pe3JldHVybiBfLnUoUik/dGhpc1tPXTp0aGlzLnNldChNLFIpfSxMLnVuaXg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5mbG9vcih0aGlzLnZhbHVlT2YoKS8xZTMpfSxMLnZhbHVlT2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZC5nZXRUaW1lKCl9LEwuc3RhcnRPZj1mdW5jdGlvbihSLE8pe3ZhciBNPXRoaXMsQj0hIV8udShPKXx8TyxGPV8ucChSKSxQPW8oZnVuY3Rpb24obGUsaGUpe3ZhciBLPV8udyhNLiR1P0RhdGUuVVRDKE0uJHksaGUsbGUpOm5ldyBEYXRlKE0uJHksaGUsbGUpLE0pO3JldHVybiBCP0s6Sy5lbmRPZihsKX0sImwiKSx6PW8oZnVuY3Rpb24obGUsaGUpe3JldHVybiBfLncoTS50b0RhdGUoKVtsZV0uYXBwbHkoTS50b0RhdGUoInMiKSwoQj9bMCwwLDAsMF06WzIzLDU5LDU5LDk5OV0pLnNsaWNlKGhlKSksTSl9LCIkIiksJD10aGlzLiRXLEg9dGhpcy4kTSxRPXRoaXMuJEQsaj0ic2V0IisodGhpcy4kdT8iVVRDIjoiIik7c3dpdGNoKEYpe2Nhc2UgZDpyZXR1cm4gQj9QKDEsMCk6UCgzMSwxMSk7Y2FzZSBoOnJldHVybiBCP1AoMSxIKTpQKDAsSCsxKTtjYXNlIHU6dmFyIGllPXRoaXMuJGxvY2FsZSgpLndlZWtTdGFydHx8MCxuZT0oJDxpZT8kKzc6JCktaWU7cmV0dXJuIFAoQj9RLW5lOlErKDYtbmUpLEgpO2Nhc2UgbDpjYXNlIHA6cmV0dXJuIHooaisiSG91cnMiLDApO2Nhc2UgczpyZXR1cm4geihqKyJNaW51dGVzIiwxKTtjYXNlIGE6cmV0dXJuIHooaisiU2Vjb25kcyIsMik7Y2FzZSBpOnJldHVybiB6KGorIk1pbGxpc2Vjb25kcyIsMyk7ZGVmYXVsdDpyZXR1cm4gdGhpcy5jbG9uZSgpfX0sTC5lbmRPZj1mdW5jdGlvbihSKXtyZXR1cm4gdGhpcy5zdGFydE9mKFIsITEpfSxMLiRzZXQ9ZnVuY3Rpb24oUixPKXt2YXIgTSxCPV8ucChSKSxGPSJzZXQiKyh0aGlzLiR1PyJVVEMiOiIiKSxQPShNPXt9LE1bbF09RisiRGF0ZSIsTVtwXT1GKyJEYXRlIixNW2hdPUYrIk1vbnRoIixNW2RdPUYrIkZ1bGxZZWFyIixNW3NdPUYrIkhvdXJzIixNW2FdPUYrIk1pbnV0ZXMiLE1baV09RisiU2Vjb25kcyIsTVtuXT1GKyJNaWxsaXNlY29uZHMiLE0pW0JdLHo9Qj09PWw/dGhpcy4kRCsoTy10aGlzLiRXKTpPO2lmKEI9PT1ofHxCPT09ZCl7dmFyICQ9dGhpcy5jbG9uZSgpLnNldChwLDEpOyQuJGRbUF0oeiksJC5pbml0KCksdGhpcy4kZD0kLnNldChwLE1hdGgubWluKHRoaXMuJEQsJC5kYXlzSW5Nb250aCgpKSkuJGR9ZWxzZSBQJiZ0aGlzLiRkW1BdKHopO3JldHVybiB0aGlzLmluaXQoKSx0aGlzfSxMLnNldD1mdW5jdGlvbihSLE8pe3JldHVybiB0aGlzLmNsb25lKCkuJHNldChSLE8pfSxMLmdldD1mdW5jdGlvbihSKXtyZXR1cm4gdGhpc1tfLnAoUildKCl9LEwuYWRkPWZ1bmN0aW9uKFIsTyl7dmFyIE0sQj10aGlzO1I9TnVtYmVyKFIpO3ZhciBGPV8ucChPKSxQPW8oZnVuY3Rpb24oSCl7dmFyIFE9UyhCKTtyZXR1cm4gXy53KFEuZGF0ZShRLmRhdGUoKStNYXRoLnJvdW5kKEgqUikpLEIpfSwieSIpO2lmKEY9PT1oKXJldHVybiB0aGlzLnNldChoLHRoaXMuJE0rUik7aWYoRj09PWQpcmV0dXJuIHRoaXMuc2V0KGQsdGhpcy4keStSKTtpZihGPT09bClyZXR1cm4gUCgxKTtpZihGPT09dSlyZXR1cm4gUCg3KTt2YXIgej0oTT17fSxNW2FdPWUsTVtzXT1yLE1baV09dCxNKVtGXXx8MSwkPXRoaXMuJGQuZ2V0VGltZSgpK1IqejtyZXR1cm4gXy53KCQsdGhpcyl9LEwuc3VidHJhY3Q9ZnVuY3Rpb24oUixPKXtyZXR1cm4gdGhpcy5hZGQoLTEqUixPKX0sTC5mb3JtYXQ9ZnVuY3Rpb24oUil7dmFyIE89dGhpcyxNPXRoaXMuJGxvY2FsZSgpO2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gTS5pbnZhbGlkRGF0ZXx8bTt2YXIgQj1SfHwiWVlZWS1NTS1ERFRISDptbTpzc1oiLEY9Xy56KHRoaXMpLFA9dGhpcy4kSCx6PXRoaXMuJG0sJD10aGlzLiRNLEg9TS53ZWVrZGF5cyxRPU0ubW9udGhzLGo9TS5tZXJpZGllbSxpZT1vKGZ1bmN0aW9uKGhlLEssWCx0ZSl7cmV0dXJuIGhlJiYoaGVbS118fGhlKE8sQikpfHxYW0tdLnNsaWNlKDAsdGUpfSwiaCIpLG5lPW8oZnVuY3Rpb24oaGUpe3JldHVybiBfLnMoUCUxMnx8MTIsaGUsIjAiKX0sImQiKSxsZT1qfHxmdW5jdGlvbihoZSxLLFgpe3ZhciB0ZT1oZTwxMj8iQU0iOiJQTSI7cmV0dXJuIFg/dGUudG9Mb3dlckNhc2UoKTp0ZX07cmV0dXJuIEIucmVwbGFjZSh5LGZ1bmN0aW9uKGhlLEspe3JldHVybiBLfHxmdW5jdGlvbihYKXtzd2l0Y2goWCl7Y2FzZSJZWSI6cmV0dXJuIFN0cmluZyhPLiR5KS5zbGljZSgtMik7Y2FzZSJZWVlZIjpyZXR1cm4gXy5zKE8uJHksNCwiMCIpO2Nhc2UiTSI6cmV0dXJuICQrMTtjYXNlIk1NIjpyZXR1cm4gXy5zKCQrMSwyLCIwIik7Y2FzZSJNTU0iOnJldHVybiBpZShNLm1vbnRoc1Nob3J0LCQsUSwzKTtjYXNlIk1NTU0iOnJldHVybiBpZShRLCQpO2Nhc2UiRCI6cmV0dXJuIE8uJEQ7Y2FzZSJERCI6cmV0dXJuIF8ucyhPLiRELDIsIjAiKTtjYXNlImQiOnJldHVybiBTdHJpbmcoTy4kVyk7Y2FzZSJkZCI6cmV0dXJuIGllKE0ud2Vla2RheXNNaW4sTy4kVyxILDIpO2Nhc2UiZGRkIjpyZXR1cm4gaWUoTS53ZWVrZGF5c1Nob3J0LE8uJFcsSCwzKTtjYXNlImRkZGQiOnJldHVybiBIW08uJFddO2Nhc2UiSCI6cmV0dXJuIFN0cmluZyhQKTtjYXNlIkhIIjpyZXR1cm4gXy5zKFAsMiwiMCIpO2Nhc2UiaCI6cmV0dXJuIG5lKDEpO2Nhc2UiaGgiOnJldHVybiBuZSgyKTtjYXNlImEiOnJldHVybiBsZShQLHosITApO2Nhc2UiQSI6cmV0dXJuIGxlKFAseiwhMSk7Y2FzZSJtIjpyZXR1cm4gU3RyaW5nKHopO2Nhc2UibW0iOnJldHVybiBfLnMoeiwyLCIwIik7Y2FzZSJzIjpyZXR1cm4gU3RyaW5nKE8uJHMpO2Nhc2Uic3MiOnJldHVybiBfLnMoTy4kcywyLCIwIik7Y2FzZSJTU1MiOnJldHVybiBfLnMoTy4kbXMsMywiMCIpO2Nhc2UiWiI6cmV0dXJuIEZ9cmV0dXJuIG51bGx9KGhlKXx8Ri5yZXBsYWNlKCI6IiwiIil9KX0sTC51dGNPZmZzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gMTUqLU1hdGgucm91bmQodGhpcy4kZC5nZXRUaW1lem9uZU9mZnNldCgpLzE1KX0sTC5kaWZmPWZ1bmN0aW9uKFIsTyxNKXt2YXIgQixGPXRoaXMsUD1fLnAoTyksej1TKFIpLCQ9KHoudXRjT2Zmc2V0KCktdGhpcy51dGNPZmZzZXQoKSkqZSxIPXRoaXMteixRPW8oZnVuY3Rpb24oKXtyZXR1cm4gXy5tKEYseil9LCJEIik7c3dpdGNoKFApe2Nhc2UgZDpCPVEoKS8xMjticmVhaztjYXNlIGg6Qj1RKCk7YnJlYWs7Y2FzZSBmOkI9USgpLzM7YnJlYWs7Y2FzZSB1OkI9KEgtJCkvNjA0OGU1O2JyZWFrO2Nhc2UgbDpCPShILSQpLzg2NGU1O2JyZWFrO2Nhc2UgczpCPUgvcjticmVhaztjYXNlIGE6Qj1IL2U7YnJlYWs7Y2FzZSBpOkI9SC90O2JyZWFrO2RlZmF1bHQ6Qj1IfXJldHVybiBNP0I6Xy5hKEIpfSxMLmRheXNJbk1vbnRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5kT2YoaCkuJER9LEwuJGxvY2FsZT1mdW5jdGlvbigpe3JldHVybiBDW3RoaXMuJExdfSxMLmxvY2FsZT1mdW5jdGlvbihSLE8pe2lmKCFSKXJldHVybiB0aGlzLiRMO3ZhciBNPXRoaXMuY2xvbmUoKSxCPUEoUixPLCEwKTtyZXR1cm4gQiYmKE0uJEw9QiksTX0sTC5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBfLncodGhpcy4kZCx0aGlzKX0sTC50b0RhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkpfSxMLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzVmFsaWQoKT90aGlzLnRvSVNPU3RyaW5nKCk6bnVsbH0sTC50b0lTT1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRkLnRvSVNPU3RyaW5nKCl9LEwudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZC50b1VUQ1N0cmluZygpfSxrfSgpLEQ9SS5wcm90b3R5cGU7cmV0dXJuIFMucHJvdG90eXBlPUQsW1siJG1zIixuXSxbIiRzIixpXSxbIiRtIixhXSxbIiRIIixzXSxbIiRXIixsXSxbIiRNIixoXSxbIiR5IixkXSxbIiREIixwXV0uZm9yRWFjaChmdW5jdGlvbihrKXtEW2tbMV1dPWZ1bmN0aW9uKEwpe3JldHVybiB0aGlzLiRnKEwsa1swXSxrWzFdKX19KSxTLmV4dGVuZD1mdW5jdGlvbihrLEwpe3JldHVybiBrLiRpfHwoayhMLEksUyksay4kaT0hMCksU30sUy5sb2NhbGU9QSxTLmlzRGF5anM9RSxTLnVuaXg9ZnVuY3Rpb24oayl7cmV0dXJuIFMoMWUzKmspfSxTLmVuPUNbd10sUy5Mcz1DLFMucD17fSxTfSl9KTt2YXIgQ0YsZXUsWSx3eSxibyx2dD1OKCgpPT57InVzZSBzdHJpY3QiO0NGPVNhKFI0KCksMSksZXU9e3RyYWNlOjAsZGVidWc6MSxpbmZvOjIsd2FybjozLGVycm9yOjQsZmF0YWw6NX0sWT17dHJhY2U6bygoLi4udCk9Pnt9LCJ0cmFjZSIpLGRlYnVnOm8oKC4uLnQpPT57fSwiZGVidWciKSxpbmZvOm8oKC4uLnQpPT57fSwiaW5mbyIpLHdhcm46bygoLi4udCk9Pnt9LCJ3YXJuIiksZXJyb3I6bygoLi4udCk9Pnt9LCJlcnJvciIpLGZhdGFsOm8oKC4uLnQpPT57fSwiZmF0YWwiKX0sd3k9byhmdW5jdGlvbih0PSJmYXRhbCIpe2xldCBlPWV1LmZhdGFsO3R5cGVvZiB0PT0ic3RyaW5nIj90LnRvTG93ZXJDYXNlKClpbiBldSYmKGU9ZXVbdF0pOnR5cGVvZiB0PT0ibnVtYmVyIiYmKGU9dCksWS50cmFjZT0oKT0+e30sWS5kZWJ1Zz0oKT0+e30sWS5pbmZvPSgpPT57fSxZLndhcm49KCk9Pnt9LFkuZXJyb3I9KCk9Pnt9LFkuZmF0YWw9KCk9Pnt9LGU8PWV1LmZhdGFsJiYoWS5mYXRhbD1jb25zb2xlLmVycm9yP2NvbnNvbGUuZXJyb3IuYmluZChjb25zb2xlLGJvKCJGQVRBTCIpLCJjb2xvcjogb3JhbmdlIik6Y29uc29sZS5sb2cuYmluZChjb25zb2xlLCJceDFCWzM1bSIsYm8oIkZBVEFMIikpKSxlPD1ldS5lcnJvciYmKFkuZXJyb3I9Y29uc29sZS5lcnJvcj9jb25zb2xlLmVycm9yLmJpbmQoY29uc29sZSxibygiRVJST1IiKSwiY29sb3I6IG9yYW5nZSIpOmNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwiXHgxQlszMW0iLGJvKCJFUlJPUiIpKSksZTw9ZXUud2FybiYmKFkud2Fybj1jb25zb2xlLndhcm4/Y29uc29sZS53YXJuLmJpbmQoY29uc29sZSxibygiV0FSTiIpLCJjb2xvcjogb3JhbmdlIik6Y29uc29sZS5sb2cuYmluZChjb25zb2xlLCJceDFCWzMzbSIsYm8oIldBUk4iKSkpLGU8PWV1LmluZm8mJihZLmluZm89Y29uc29sZS5pbmZvP2NvbnNvbGUuaW5mby5iaW5kKGNvbnNvbGUsYm8oIklORk8iKSwiY29sb3I6IGxpZ2h0Ymx1ZSIpOmNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwiXHgxQlszNG0iLGJvKCJJTkZPIikpKSxlPD1ldS5kZWJ1ZyYmKFkuZGVidWc9Y29uc29sZS5kZWJ1Zz9jb25zb2xlLmRlYnVnLmJpbmQoY29uc29sZSxibygiREVCVUciKSwiY29sb3I6IGxpZ2h0Z3JlZW4iKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIlx4MUJbMzJtIixibygiREVCVUciKSkpLGU8PWV1LnRyYWNlJiYoWS50cmFjZT1jb25zb2xlLmRlYnVnP2NvbnNvbGUuZGVidWcuYmluZChjb25zb2xlLGJvKCJUUkFDRSIpLCJjb2xvcjogbGlnaHRncmVlbiIpOmNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwiXHgxQlszMm0iLGJvKCJUUkFDRSIpKSl9LCJzZXRMb2dMZXZlbCIpLGJvPW8odD0+YCVjJHsoMCxDRi5kZWZhdWx0KSgpLmZvcm1hdCgic3MuU1NTIil9IDogJHt0fSA6IGAsImZvcm1hdCIpfSk7dmFyIFUyZSxlMCxDQyxBRixOND1OKCgpPT57InVzZSBzdHJpY3QiO1UyZT1PYmplY3QuZnJlZXplKHtsZWZ0OjAsdG9wOjAsd2lkdGg6MTYsaGVpZ2h0OjE2fSksZTA9T2JqZWN0LmZyZWV6ZSh7cm90YXRlOjAsdkZsaXA6ITEsaEZsaXA6ITF9KSxDQz1PYmplY3QuZnJlZXplKHsuLi5VMmUsLi4uZTB9KSxBRj1PYmplY3QuZnJlZXplKHsuLi5DQyxib2R5OiIiLGhpZGRlbjohMX0pfSk7dmFyIEgyZSxfRixERj1OKCgpPT57InVzZSBzdHJpY3QiO040KCk7SDJlPU9iamVjdC5mcmVlemUoe3dpZHRoOm51bGwsaGVpZ2h0Om51bGx9KSxfRj1PYmplY3QuZnJlZXplKHsuLi5IMmUsLi4uZTB9KX0pO3ZhciBBQyxNNCxMRj1OKCgpPT57InVzZSBzdHJpY3QiO0FDPW8oKHQsZSxyLG49IiIpPT57bGV0IGk9dC5zcGxpdCgiOiIpO2lmKHQuc2xpY2UoMCwxKT09PSJAIil7aWYoaS5sZW5ndGg8Mnx8aS5sZW5ndGg+MylyZXR1cm4gbnVsbDtuPWkuc2hpZnQoKS5zbGljZSgxKX1pZihpLmxlbmd0aD4zfHwhaS5sZW5ndGgpcmV0dXJuIG51bGw7aWYoaS5sZW5ndGg+MSl7bGV0IGw9aS5wb3AoKSx1PWkucG9wKCksaD17cHJvdmlkZXI6aS5sZW5ndGg+MD9pWzBdOm4scHJlZml4OnUsbmFtZTpsfTtyZXR1cm4gZSYmIU00KGgpP251bGw6aH1sZXQgYT1pWzBdLHM9YS5zcGxpdCgiLSIpO2lmKHMubGVuZ3RoPjEpe2xldCBsPXtwcm92aWRlcjpuLHByZWZpeDpzLnNoaWZ0KCksbmFtZTpzLmpvaW4oIi0iKX07cmV0dXJuIGUmJiFNNChsKT9udWxsOmx9aWYociYmbj09PSIiKXtsZXQgbD17cHJvdmlkZXI6bixwcmVmaXg6IiIsbmFtZTphfTtyZXR1cm4gZSYmIU00KGwscik/bnVsbDpsfXJldHVybiBudWxsfSwic3RyaW5nVG9JY29uIiksTTQ9bygodCxlKT0+dD8hISgoZSYmdC5wcmVmaXg9PT0iInx8dC5wcmVmaXgpJiZ0Lm5hbWUpOiExLCJ2YWxpZGF0ZUljb25OYW1lIil9KTtmdW5jdGlvbiBSRih0LGUpe2xldCByPXt9OyF0LmhGbGlwIT0hZS5oRmxpcCYmKHIuaEZsaXA9ITApLCF0LnZGbGlwIT0hZS52RmxpcCYmKHIudkZsaXA9ITApO2xldCBuPSgodC5yb3RhdGV8fDApKyhlLnJvdGF0ZXx8MCkpJTQ7cmV0dXJuIG4mJihyLnJvdGF0ZT1uKSxyfXZhciBORj1OKCgpPT57InVzZSBzdHJpY3QiO28oUkYsIm1lcmdlSWNvblRyYW5zZm9ybWF0aW9ucyIpfSk7ZnVuY3Rpb24gX0ModCxlKXtsZXQgcj1SRih0LGUpO2ZvcihsZXQgbiBpbiBBRiluIGluIGUwP24gaW4gdCYmIShuIGluIHIpJiYocltuXT1lMFtuXSk6biBpbiBlP3Jbbl09ZVtuXTpuIGluIHQmJihyW25dPXRbbl0pO3JldHVybiByfXZhciBNRj1OKCgpPT57InVzZSBzdHJpY3QiO040KCk7TkYoKTtvKF9DLCJtZXJnZUljb25EYXRhIil9KTtmdW5jdGlvbiBJRih0LGUpe2xldCByPXQuaWNvbnMsbj10LmFsaWFzZXN8fE9iamVjdC5jcmVhdGUobnVsbCksaT1PYmplY3QuY3JlYXRlKG51bGwpO2Z1bmN0aW9uIGEocyl7aWYocltzXSlyZXR1cm4gaVtzXT1bXTtpZighKHMgaW4gaSkpe2lbc109bnVsbDtsZXQgbD1uW3NdJiZuW3NdLnBhcmVudCx1PWwmJmEobCk7dSYmKGlbc109W2xdLmNvbmNhdCh1KSl9cmV0dXJuIGlbc119cmV0dXJuIG8oYSwicmVzb2x2ZSIpLChlfHxPYmplY3Qua2V5cyhyKS5jb25jYXQoT2JqZWN0LmtleXMobikpKS5mb3JFYWNoKGEpLGl9dmFyIE9GPU4oKCk9PnsidXNlIHN0cmljdCI7byhJRiwiZ2V0SWNvbnNUcmVlIil9KTtmdW5jdGlvbiBQRih0LGUscil7bGV0IG49dC5pY29ucyxpPXQuYWxpYXNlc3x8T2JqZWN0LmNyZWF0ZShudWxsKSxhPXt9O2Z1bmN0aW9uIHMobCl7YT1fQyhuW2xdfHxpW2xdLGEpfXJldHVybiBvKHMsInBhcnNlIikscyhlKSxyLmZvckVhY2gocyksX0ModCxhKX1mdW5jdGlvbiBEQyh0LGUpe2lmKHQuaWNvbnNbZV0pcmV0dXJuIFBGKHQsZSxbXSk7bGV0IHI9SUYodCxbZV0pW2VdO3JldHVybiByP1BGKHQsZSxyKTpudWxsfXZhciBCRj1OKCgpPT57InVzZSBzdHJpY3QiO01GKCk7T0YoKTtvKFBGLCJpbnRlcm5hbEdldEljb25EYXRhIik7byhEQywiZ2V0SWNvbkRhdGEiKX0pO2Z1bmN0aW9uIExDKHQsZSxyKXtpZihlPT09MSlyZXR1cm4gdDtpZihyPXJ8fDEwMCx0eXBlb2YgdD09Im51bWJlciIpcmV0dXJuIE1hdGguY2VpbCh0KmUqcikvcjtpZih0eXBlb2YgdCE9InN0cmluZyIpcmV0dXJuIHQ7bGV0IG49dC5zcGxpdChXMmUpO2lmKG49PT1udWxsfHwhbi5sZW5ndGgpcmV0dXJuIHQ7bGV0IGk9W10sYT1uLnNoaWZ0KCkscz1xMmUudGVzdChhKTtmb3IoOzspe2lmKHMpe2xldCBsPXBhcnNlRmxvYXQoYSk7aXNOYU4obCk/aS5wdXNoKGEpOmkucHVzaChNYXRoLmNlaWwobCplKnIpL3IpfWVsc2UgaS5wdXNoKGEpO2lmKGE9bi5zaGlmdCgpLGE9PT12b2lkIDApcmV0dXJuIGkuam9pbigiIik7cz0hc319dmFyIFcyZSxxMmUsRkY9TigoKT0+eyJ1c2Ugc3RyaWN0IjtXMmU9LygtP1swLTkuXSpbMC05XStbMC05Ll0qKS9nLHEyZT0vXi0/WzAtOS5dKlswLTldK1swLTkuXSokL2c7byhMQywiY2FsY3VsYXRlU2l6ZSIpfSk7ZnVuY3Rpb24gWTJlKHQsZT0iZGVmcyIpe2xldCByPSIiLG49dC5pbmRleE9mKCI8IitlKTtmb3IoO24+PTA7KXtsZXQgaT10LmluZGV4T2YoIj4iLG4pLGE9dC5pbmRleE9mKCI8LyIrZSk7aWYoaT09PS0xfHxhPT09LTEpYnJlYWs7bGV0IHM9dC5pbmRleE9mKCI+IixhKTtpZihzPT09LTEpYnJlYWs7cis9dC5zbGljZShpKzEsYSkudHJpbSgpLHQ9dC5zbGljZSgwLG4pLnRyaW0oKSt0LnNsaWNlKHMrMSl9cmV0dXJue2RlZnM6cixjb250ZW50OnR9fWZ1bmN0aW9uIFgyZSh0LGUpe3JldHVybiB0PyI8ZGVmcz4iK3QrIjwvZGVmcz4iK2U6ZX1mdW5jdGlvbiAkRih0LGUscil7bGV0IG49WTJlKHQpO3JldHVybiBYMmUobi5kZWZzLGUrbi5jb250ZW50K3IpfXZhciB6Rj1OKCgpPT57InVzZSBzdHJpY3QiO28oWTJlLCJzcGxpdFNWR0RlZnMiKTtvKFgyZSwibWVyZ2VEZWZzQW5kQ29udGVudCIpO28oJEYsIndyYXBTVkdDb250ZW50Iil9KTtmdW5jdGlvbiBSQyh0LGUpe2xldCByPXsuLi5DQywuLi50fSxuPXsuLi5fRiwuLi5lfSxpPXtsZWZ0OnIubGVmdCx0b3A6ci50b3Asd2lkdGg6ci53aWR0aCxoZWlnaHQ6ci5oZWlnaHR9LGE9ci5ib2R5O1tyLG5dLmZvckVhY2goeT0+e2xldCB2PVtdLHg9eS5oRmxpcCxiPXkudkZsaXAsdz15LnJvdGF0ZTt4P2I/dys9Mjoodi5wdXNoKCJ0cmFuc2xhdGUoIisoaS53aWR0aCtpLmxlZnQpLnRvU3RyaW5nKCkrIiAiKygwLWkudG9wKS50b1N0cmluZygpKyIpIiksdi5wdXNoKCJzY2FsZSgtMSAxKSIpLGkudG9wPWkubGVmdD0wKTpiJiYodi5wdXNoKCJ0cmFuc2xhdGUoIisoMC1pLmxlZnQpLnRvU3RyaW5nKCkrIiAiKyhpLmhlaWdodCtpLnRvcCkudG9TdHJpbmcoKSsiKSIpLHYucHVzaCgic2NhbGUoMSAtMSkiKSxpLnRvcD1pLmxlZnQ9MCk7bGV0IEM7c3dpdGNoKHc8MCYmKHctPU1hdGguZmxvb3Iody80KSo0KSx3PXclNCx3KXtjYXNlIDE6Qz1pLmhlaWdodC8yK2kudG9wLHYudW5zaGlmdCgicm90YXRlKDkwICIrQy50b1N0cmluZygpKyIgIitDLnRvU3RyaW5nKCkrIikiKTticmVhaztjYXNlIDI6di51bnNoaWZ0KCJyb3RhdGUoMTgwICIrKGkud2lkdGgvMitpLmxlZnQpLnRvU3RyaW5nKCkrIiAiKyhpLmhlaWdodC8yK2kudG9wKS50b1N0cmluZygpKyIpIik7YnJlYWs7Y2FzZSAzOkM9aS53aWR0aC8yK2kubGVmdCx2LnVuc2hpZnQoInJvdGF0ZSgtOTAgIitDLnRvU3RyaW5nKCkrIiAiK0MudG9TdHJpbmcoKSsiKSIpO2JyZWFrfXclMj09PTEmJihpLmxlZnQhPT1pLnRvcCYmKEM9aS5sZWZ0LGkubGVmdD1pLnRvcCxpLnRvcD1DKSxpLndpZHRoIT09aS5oZWlnaHQmJihDPWkud2lkdGgsaS53aWR0aD1pLmhlaWdodCxpLmhlaWdodD1DKSksdi5sZW5ndGgmJihhPSRGKGEsJzxnIHRyYW5zZm9ybT0iJyt2LmpvaW4oIiAiKSsnIj4nLCI8L2c+IikpfSk7bGV0IHM9bi53aWR0aCxsPW4uaGVpZ2h0LHU9aS53aWR0aCxoPWkuaGVpZ2h0LGYsZDtzPT09bnVsbD8oZD1sPT09bnVsbD8iMWVtIjpsPT09ImF1dG8iP2g6bCxmPUxDKGQsdS9oKSk6KGY9cz09PSJhdXRvIj91OnMsZD1sPT09bnVsbD9MQyhmLGgvdSk6bD09PSJhdXRvIj9oOmwpO2xldCBwPXt9LG09bygoeSx2KT0+e2oyZSh2KXx8KHBbeV09di50b1N0cmluZygpKX0sInNldEF0dHIiKTttKCJ3aWR0aCIsZiksbSgiaGVpZ2h0IixkKTtsZXQgZz1baS5sZWZ0LGkudG9wLHUsaF07cmV0dXJuIHAudmlld0JveD1nLmpvaW4oIiAiKSx7YXR0cmlidXRlczpwLHZpZXdCb3g6Zyxib2R5OmF9fXZhciBqMmUsR0Y9TigoKT0+eyJ1c2Ugc3RyaWN0IjtONCgpO0RGKCk7RkYoKTt6RigpO2oyZT1vKHQ9PnQ9PT0idW5zZXQifHx0PT09InVuZGVmaW5lZCJ8fHQ9PT0ibm9uZSIsImlzVW5zZXRLZXl3b3JkIik7byhSQywiaWNvblRvU1ZHIil9KTtmdW5jdGlvbiBOQyh0LGU9UTJlKXtsZXQgcj1bXSxuO2Zvcig7bj1LMmUuZXhlYyh0KTspci5wdXNoKG5bMV0pO2lmKCFyLmxlbmd0aClyZXR1cm4gdDtsZXQgaT0ic3VmZml4IisoTWF0aC5yYW5kb20oKSoxNjc3NzIxNnxEYXRlLm5vdygpKS50b1N0cmluZygxNik7cmV0dXJuIHIuZm9yRWFjaChhPT57bGV0IHM9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZShhKTplKyhaMmUrKykudG9TdHJpbmcoKSxsPWEucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xdXFxdL2csIlxcJCYiKTt0PXQucmVwbGFjZShuZXcgUmVnRXhwKCcoWyM7Il0pKCcrbCsnKShbIildfFxcLlthLXpdKScsImciKSwiJDEiK3MraSsiJDMiKX0pLHQ9dC5yZXBsYWNlKG5ldyBSZWdFeHAoaSwiZyIpLCIiKSx0fXZhciBLMmUsUTJlLFoyZSxWRj1OKCgpPT57InVzZSBzdHJpY3QiO0syZT0vXHNpZD0iKFxTKykiL2csUTJlPSJJY29uaWZ5SWQiK0RhdGUubm93KCkudG9TdHJpbmcoMTYpKyhNYXRoLnJhbmRvbSgpKjE2Nzc3MjE2fDApLnRvU3RyaW5nKDE2KSxaMmU9MDtvKE5DLCJyZXBsYWNlSURzIil9KTtmdW5jdGlvbiBNQyh0LGUpe2xldCByPXQuaW5kZXhPZigieGxpbms6Iik9PT0tMT8iIjonIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIic7Zm9yKGxldCBuIGluIGUpcis9IiAiK24rJz0iJytlW25dKyciJztyZXR1cm4nPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciJytyKyI+Iit0KyI8L3N2Zz4ifXZhciBVRj1OKCgpPT57InVzZSBzdHJpY3QiO28oTUMsImljb25Ub0hUTUwiKX0pO3ZhciBXRj1NaSgoaWl0LEhGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgdDA9MWUzLHIwPXQwKjYwLG4wPXIwKjYwLFdmPW4wKjI0LEoyZT1XZio3LGV4ZT1XZiozNjUuMjU7SEYuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2U9ZXx8e307dmFyIHI9dHlwZW9mIHQ7aWYocj09PSJzdHJpbmciJiZ0Lmxlbmd0aD4wKXJldHVybiB0eGUodCk7aWYocj09PSJudW1iZXIiJiZpc0Zpbml0ZSh0KSlyZXR1cm4gZS5sb25nP254ZSh0KTpyeGUodCk7dGhyb3cgbmV3IEVycm9yKCJ2YWwgaXMgbm90IGEgbm9uLWVtcHR5IHN0cmluZyBvciBhIHZhbGlkIG51bWJlci4gdmFsPSIrSlNPTi5zdHJpbmdpZnkodCkpfTtmdW5jdGlvbiB0eGUodCl7aWYodD1TdHJpbmcodCksISh0Lmxlbmd0aD4xMDApKXt2YXIgZT0vXigtPyg/OlxkKyk/XC4/XGQrKSAqKG1pbGxpc2Vjb25kcz98bXNlY3M/fG1zfHNlY29uZHM/fHNlY3M/fHN8bWludXRlcz98bWlucz98bXxob3Vycz98aHJzP3xofGRheXM/fGR8d2Vla3M/fHd8eWVhcnM/fHlycz98eSk/JC9pLmV4ZWModCk7aWYoZSl7dmFyIHI9cGFyc2VGbG9hdChlWzFdKSxuPShlWzJdfHwibXMiKS50b0xvd2VyQ2FzZSgpO3N3aXRjaChuKXtjYXNlInllYXJzIjpjYXNlInllYXIiOmNhc2UieXJzIjpjYXNlInlyIjpjYXNlInkiOnJldHVybiByKmV4ZTtjYXNlIndlZWtzIjpjYXNlIndlZWsiOmNhc2UidyI6cmV0dXJuIHIqSjJlO2Nhc2UiZGF5cyI6Y2FzZSJkYXkiOmNhc2UiZCI6cmV0dXJuIHIqV2Y7Y2FzZSJob3VycyI6Y2FzZSJob3VyIjpjYXNlImhycyI6Y2FzZSJociI6Y2FzZSJoIjpyZXR1cm4gcipuMDtjYXNlIm1pbnV0ZXMiOmNhc2UibWludXRlIjpjYXNlIm1pbnMiOmNhc2UibWluIjpjYXNlIm0iOnJldHVybiByKnIwO2Nhc2Uic2Vjb25kcyI6Y2FzZSJzZWNvbmQiOmNhc2Uic2VjcyI6Y2FzZSJzZWMiOmNhc2UicyI6cmV0dXJuIHIqdDA7Y2FzZSJtaWxsaXNlY29uZHMiOmNhc2UibWlsbGlzZWNvbmQiOmNhc2UibXNlY3MiOmNhc2UibXNlYyI6Y2FzZSJtcyI6cmV0dXJuIHI7ZGVmYXVsdDpyZXR1cm59fX19byh0eGUsInBhcnNlIik7ZnVuY3Rpb24gcnhlKHQpe3ZhciBlPU1hdGguYWJzKHQpO3JldHVybiBlPj1XZj9NYXRoLnJvdW5kKHQvV2YpKyJkIjplPj1uMD9NYXRoLnJvdW5kKHQvbjApKyJoIjplPj1yMD9NYXRoLnJvdW5kKHQvcjApKyJtIjplPj10MD9NYXRoLnJvdW5kKHQvdDApKyJzIjp0KyJtcyJ9byhyeGUsImZtdFNob3J0Iik7ZnVuY3Rpb24gbnhlKHQpe3ZhciBlPU1hdGguYWJzKHQpO3JldHVybiBlPj1XZj9JNCh0LGUsV2YsImRheSIpOmU+PW4wP0k0KHQsZSxuMCwiaG91ciIpOmU+PXIwP0k0KHQsZSxyMCwibWludXRlIik6ZT49dDA/STQodCxlLHQwLCJzZWNvbmQiKTp0KyIgbXMifW8obnhlLCJmbXRMb25nIik7ZnVuY3Rpb24gSTQodCxlLHIsbil7dmFyIGk9ZT49cioxLjU7cmV0dXJuIE1hdGgucm91bmQodC9yKSsiICIrbisoaT8icyI6IiIpfW8oSTQsInBsdXJhbCIpfSk7dmFyIFlGPU1pKChzaXQscUYpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGl4ZSh0KXtyLmRlYnVnPXIsci5kZWZhdWx0PXIsci5jb2VyY2U9dSxyLmRpc2FibGU9cyxyLmVuYWJsZT1pLHIuZW5hYmxlZD1sLHIuaHVtYW5pemU9V0YoKSxyLmRlc3Ryb3k9aCxPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGY9PntyW2ZdPXRbZl19KSxyLm5hbWVzPVtdLHIuc2tpcHM9W10sci5mb3JtYXR0ZXJzPXt9O2Z1bmN0aW9uIGUoZil7bGV0IGQ9MDtmb3IobGV0IHA9MDtwPGYubGVuZ3RoO3ArKylkPShkPDw1KS1kK2YuY2hhckNvZGVBdChwKSxkfD0wO3JldHVybiByLmNvbG9yc1tNYXRoLmFicyhkKSVyLmNvbG9ycy5sZW5ndGhdfW8oZSwic2VsZWN0Q29sb3IiKSxyLnNlbGVjdENvbG9yPWU7ZnVuY3Rpb24gcihmKXtsZXQgZCxwPW51bGwsbSxnO2Z1bmN0aW9uIHkoLi4udil7aWYoIXkuZW5hYmxlZClyZXR1cm47bGV0IHg9eSxiPU51bWJlcihuZXcgRGF0ZSksdz1iLShkfHxiKTt4LmRpZmY9dyx4LnByZXY9ZCx4LmN1cnI9YixkPWIsdlswXT1yLmNvZXJjZSh2WzBdKSx0eXBlb2YgdlswXSE9InN0cmluZyImJnYudW5zaGlmdCgiJU8iKTtsZXQgQz0wO3ZbMF09dlswXS5yZXBsYWNlKC8lKFthLXpBLVolXSkvZywoRSxBKT0+e2lmKEU9PT0iJSUiKXJldHVybiIlIjtDKys7bGV0IFM9ci5mb3JtYXR0ZXJzW0FdO2lmKHR5cGVvZiBTPT0iZnVuY3Rpb24iKXtsZXQgXz12W0NdO0U9Uy5jYWxsKHgsXyksdi5zcGxpY2UoQywxKSxDLS19cmV0dXJuIEV9KSxyLmZvcm1hdEFyZ3MuY2FsbCh4LHYpLCh4LmxvZ3x8ci5sb2cpLmFwcGx5KHgsdil9cmV0dXJuIG8oeSwiZGVidWciKSx5Lm5hbWVzcGFjZT1mLHkudXNlQ29sb3JzPXIudXNlQ29sb3JzKCkseS5jb2xvcj1yLnNlbGVjdENvbG9yKGYpLHkuZXh0ZW5kPW4seS5kZXN0cm95PXIuZGVzdHJveSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeSwiZW5hYmxlZCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiExLGdldDpvKCgpPT5wIT09bnVsbD9wOihtIT09ci5uYW1lc3BhY2VzJiYobT1yLm5hbWVzcGFjZXMsZz1yLmVuYWJsZWQoZikpLGcpLCJnZXQiKSxzZXQ6byh2PT57cD12fSwic2V0Iil9KSx0eXBlb2Ygci5pbml0PT0iZnVuY3Rpb24iJiZyLmluaXQoeSkseX1vKHIsImNyZWF0ZURlYnVnIik7ZnVuY3Rpb24gbihmLGQpe2xldCBwPXIodGhpcy5uYW1lc3BhY2UrKHR5cGVvZiBkPiJ1Ij8iOiI6ZCkrZik7cmV0dXJuIHAubG9nPXRoaXMubG9nLHB9byhuLCJleHRlbmQiKTtmdW5jdGlvbiBpKGYpe3Iuc2F2ZShmKSxyLm5hbWVzcGFjZXM9ZixyLm5hbWVzPVtdLHIuc2tpcHM9W107bGV0IGQ9KHR5cGVvZiBmPT0ic3RyaW5nIj9mOiIiKS50cmltKCkucmVwbGFjZSgiICIsIiwiKS5zcGxpdCgiLCIpLmZpbHRlcihCb29sZWFuKTtmb3IobGV0IHAgb2YgZClwWzBdPT09Ii0iP3Iuc2tpcHMucHVzaChwLnNsaWNlKDEpKTpyLm5hbWVzLnB1c2gocCl9byhpLCJlbmFibGUiKTtmdW5jdGlvbiBhKGYsZCl7bGV0IHA9MCxtPTAsZz0tMSx5PTA7Zm9yKDtwPGYubGVuZ3RoOylpZihtPGQubGVuZ3RoJiYoZFttXT09PWZbcF18fGRbbV09PT0iKiIpKWRbbV09PT0iKiI/KGc9bSx5PXAsbSsrKToocCsrLG0rKyk7ZWxzZSBpZihnIT09LTEpbT1nKzEseSsrLHA9eTtlbHNlIHJldHVybiExO2Zvcig7bTxkLmxlbmd0aCYmZFttXT09PSIqIjspbSsrO3JldHVybiBtPT09ZC5sZW5ndGh9byhhLCJtYXRjaGVzVGVtcGxhdGUiKTtmdW5jdGlvbiBzKCl7bGV0IGY9Wy4uLnIubmFtZXMsLi4uci5za2lwcy5tYXAoZD0+Ii0iK2QpXS5qb2luKCIsIik7cmV0dXJuIHIuZW5hYmxlKCIiKSxmfW8ocywiZGlzYWJsZSIpO2Z1bmN0aW9uIGwoZil7Zm9yKGxldCBkIG9mIHIuc2tpcHMpaWYoYShmLGQpKXJldHVybiExO2ZvcihsZXQgZCBvZiByLm5hbWVzKWlmKGEoZixkKSlyZXR1cm4hMDtyZXR1cm4hMX1vKGwsImVuYWJsZWQiKTtmdW5jdGlvbiB1KGYpe3JldHVybiBmIGluc3RhbmNlb2YgRXJyb3I/Zi5zdGFja3x8Zi5tZXNzYWdlOmZ9byh1LCJjb2VyY2UiKTtmdW5jdGlvbiBoKCl7Y29uc29sZS53YXJuKCJJbnN0YW5jZSBtZXRob2QgYGRlYnVnLmRlc3Ryb3koKWAgaXMgZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGRvZXMgYW55dGhpbmcuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIGBkZWJ1Z2AuIil9cmV0dXJuIG8oaCwiZGVzdHJveSIpLHIuZW5hYmxlKHIubG9hZCgpKSxyfW8oaXhlLCJzZXR1cCIpO3FGLmV4cG9ydHM9aXhlfSk7dmFyIFhGPU1pKChxcyxPNCk9PnsidXNlIHN0cmljdCI7cXMuZm9ybWF0QXJncz1zeGU7cXMuc2F2ZT1veGU7cXMubG9hZD1seGU7cXMudXNlQ29sb3JzPWF4ZTtxcy5zdG9yYWdlPWN4ZSgpO3FzLmRlc3Ryb3k9KCgpPT57bGV0IHQ9ITE7cmV0dXJuKCk9Pnt0fHwodD0hMCxjb25zb2xlLndhcm4oIkluc3RhbmNlIG1ldGhvZCBgZGVidWcuZGVzdHJveSgpYCBpcyBkZXByZWNhdGVkIGFuZCBubyBsb25nZXIgZG9lcyBhbnl0aGluZy4gSXQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gb2YgYGRlYnVnYC4iKSl9fSkoKTtxcy5jb2xvcnM9WyIjMDAwMENDIiwiIzAwMDBGRiIsIiMwMDMzQ0MiLCIjMDAzM0ZGIiwiIzAwNjZDQyIsIiMwMDY2RkYiLCIjMDA5OUNDIiwiIzAwOTlGRiIsIiMwMENDMDAiLCIjMDBDQzMzIiwiIzAwQ0M2NiIsIiMwMENDOTkiLCIjMDBDQ0NDIiwiIzAwQ0NGRiIsIiMzMzAwQ0MiLCIjMzMwMEZGIiwiIzMzMzNDQyIsIiMzMzMzRkYiLCIjMzM2NkNDIiwiIzMzNjZGRiIsIiMzMzk5Q0MiLCIjMzM5OUZGIiwiIzMzQ0MwMCIsIiMzM0NDMzMiLCIjMzNDQzY2IiwiIzMzQ0M5OSIsIiMzM0NDQ0MiLCIjMzNDQ0ZGIiwiIzY2MDBDQyIsIiM2NjAwRkYiLCIjNjYzM0NDIiwiIzY2MzNGRiIsIiM2NkNDMDAiLCIjNjZDQzMzIiwiIzk5MDBDQyIsIiM5OTAwRkYiLCIjOTkzM0NDIiwiIzk5MzNGRiIsIiM5OUNDMDAiLCIjOTlDQzMzIiwiI0NDMDAwMCIsIiNDQzAwMzMiLCIjQ0MwMDY2IiwiI0NDMDA5OSIsIiNDQzAwQ0MiLCIjQ0MwMEZGIiwiI0NDMzMwMCIsIiNDQzMzMzMiLCIjQ0MzMzY2IiwiI0NDMzM5OSIsIiNDQzMzQ0MiLCIjQ0MzM0ZGIiwiI0NDNjYwMCIsIiNDQzY2MzMiLCIjQ0M5OTAwIiwiI0NDOTkzMyIsIiNDQ0NDMDAiLCIjQ0NDQzMzIiwiI0ZGMDAwMCIsIiNGRjAwMzMiLCIjRkYwMDY2IiwiI0ZGMDA5OSIsIiNGRjAwQ0MiLCIjRkYwMEZGIiwiI0ZGMzMwMCIsIiNGRjMzMzMiLCIjRkYzMzY2IiwiI0ZGMzM5OSIsIiNGRjMzQ0MiLCIjRkYzM0ZGIiwiI0ZGNjYwMCIsIiNGRjY2MzMiLCIjRkY5OTAwIiwiI0ZGOTkzMyIsIiNGRkNDMDAiLCIjRkZDQzMzIl07ZnVuY3Rpb24gYXhlKCl7aWYodHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5wcm9jZXNzJiYod2luZG93LnByb2Nlc3MudHlwZT09PSJyZW5kZXJlciJ8fHdpbmRvdy5wcm9jZXNzLl9fbndqcykpcmV0dXJuITA7aWYodHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci51c2VyQWdlbnQmJm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvKGVkZ2V8dHJpZGVudClcLyhcZCspLykpcmV0dXJuITE7bGV0IHQ7cmV0dXJuIHR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCYmZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlJiZkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuV2Via2l0QXBwZWFyYW5jZXx8dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5jb25zb2xlJiYod2luZG93LmNvbnNvbGUuZmlyZWJ1Z3x8d2luZG93LmNvbnNvbGUuZXhjZXB0aW9uJiZ3aW5kb3cuY29uc29sZS50YWJsZSl8fHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3IudXNlckFnZW50JiYodD1uYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goL2ZpcmVmb3hcLyhcZCspLykpJiZwYXJzZUludCh0WzFdLDEwKT49MzF8fHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3IudXNlckFnZW50JiZuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goL2FwcGxld2Via2l0XC8oXGQrKS8pfW8oYXhlLCJ1c2VDb2xvcnMiKTtmdW5jdGlvbiBzeGUodCl7aWYodFswXT0odGhpcy51c2VDb2xvcnM/IiVjIjoiIikrdGhpcy5uYW1lc3BhY2UrKHRoaXMudXNlQ29sb3JzPyIgJWMiOiIgIikrdFswXSsodGhpcy51c2VDb2xvcnM/IiVjICI6IiAiKSsiKyIrTzQuZXhwb3J0cy5odW1hbml6ZSh0aGlzLmRpZmYpLCF0aGlzLnVzZUNvbG9ycylyZXR1cm47bGV0IGU9ImNvbG9yOiAiK3RoaXMuY29sb3I7dC5zcGxpY2UoMSwwLGUsImNvbG9yOiBpbmhlcml0Iik7bGV0IHI9MCxuPTA7dFswXS5yZXBsYWNlKC8lW2EtekEtWiVdL2csaT0+e2khPT0iJSUiJiYocisrLGk9PT0iJWMiJiYobj1yKSl9KSx0LnNwbGljZShuLDAsZSl9byhzeGUsImZvcm1hdEFyZ3MiKTtxcy5sb2c9Y29uc29sZS5kZWJ1Z3x8Y29uc29sZS5sb2d8fCgoKT0+e30pO2Z1bmN0aW9uIG94ZSh0KXt0cnl7dD9xcy5zdG9yYWdlLnNldEl0ZW0oImRlYnVnIix0KTpxcy5zdG9yYWdlLnJlbW92ZUl0ZW0oImRlYnVnIil9Y2F0Y2h7fX1vKG94ZSwic2F2ZSIpO2Z1bmN0aW9uIGx4ZSgpe2xldCB0O3RyeXt0PXFzLnN0b3JhZ2UuZ2V0SXRlbSgiZGVidWciKX1jYXRjaHt9cmV0dXJuIXQmJnR5cGVvZiBwcm9jZXNzPCJ1IiYmImVudiJpbiBwcm9jZXNzJiYodD1wcm9jZXNzLmVudi5ERUJVRyksdH1vKGx4ZSwibG9hZCIpO2Z1bmN0aW9uIGN4ZSgpe3RyeXtyZXR1cm4gbG9jYWxTdG9yYWdlfWNhdGNoe319byhjeGUsImxvY2Fsc3RvcmFnZSIpO080LmV4cG9ydHM9WUYoKShxcyk7dmFye2Zvcm1hdHRlcnM6dXhlfT1PNC5leHBvcnRzO3V4ZS5qPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCl9Y2F0Y2goZSl7cmV0dXJuIltVbmV4cGVjdGVkSlNPTlBhcnNlRXJyb3JdOiAiK2UubWVzc2FnZX19fSk7dmFyIHVpdCxqRj1OKCgpPT57InVzZSBzdHJpY3QiO0xGKCk7QkYoKTtHRigpO1ZGKCk7VUYoKTt1aXQ9U2EoWEYoKSwxKX0pO3ZhciBPQyxJQyxLRixQNCxoeGUsd28sdHU9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt2dCgpO2pGKCk7T0M9e2JvZHk6JzxnPjxyZWN0IHdpZHRoPSI4MCIgaGVpZ2h0PSI4MCIgc3R5bGU9ImZpbGw6ICMwODdlYmY7IHN0cm9rZS13aWR0aDogMHB4OyIvPjx0ZXh0IHRyYW5zZm9ybT0idHJhbnNsYXRlKDIxLjE2IDY0LjY3KSIgc3R5bGU9ImZpbGw6ICNmZmY7IGZvbnQtZmFtaWx5OiBBcmlhbE1ULCBBcmlhbDsgZm9udC1zaXplOiA2Ny43NXB4OyI+PHRzcGFuIHg9IjAiIHk9IjAiPj88L3RzcGFuPjwvdGV4dD48L2c+JyxoZWlnaHQ6ODAsd2lkdGg6ODB9LElDPW5ldyBNYXAsS0Y9bmV3IE1hcCxQND1vKHQ9Pntmb3IobGV0IGUgb2YgdCl7aWYoIWUubmFtZSl0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaWNvbiBsb2FkZXIuIE11c3QgaGF2ZSBhICJuYW1lIiBwcm9wZXJ0eSB3aXRoIG5vbi1lbXB0eSBzdHJpbmcgdmFsdWUuJyk7aWYoWS5kZWJ1ZygiUmVnaXN0ZXJpbmcgaWNvbiBwYWNrOiIsZS5uYW1lKSwibG9hZGVyImluIGUpS0Yuc2V0KGUubmFtZSxlLmxvYWRlcik7ZWxzZSBpZigiaWNvbnMiaW4gZSlJQy5zZXQoZS5uYW1lLGUuaWNvbnMpO2Vsc2UgdGhyb3cgWS5lcnJvcigiSW52YWxpZCBpY29uIGxvYWRlcjoiLGUpLG5ldyBFcnJvcignSW52YWxpZCBpY29uIGxvYWRlci4gTXVzdCBoYXZlIGVpdGhlciAiaWNvbnMiIG9yICJsb2FkZXIiIHByb3BlcnR5LicpfX0sInJlZ2lzdGVySWNvblBhY2tzIiksaHhlPW8oYXN5bmModCxlKT0+e2xldCByPUFDKHQsITAsZSE9PXZvaWQgMCk7aWYoIXIpdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGljb24gbmFtZTogJHt0fWApO2xldCBuPXIucHJlZml4fHxlO2lmKCFuKXRocm93IG5ldyBFcnJvcihgSWNvbiBuYW1lIG11c3QgY29udGFpbiBhIHByZWZpeDogJHt0fWApO2xldCBpPUlDLmdldChuKTtpZighaSl7bGV0IHM9S0YuZ2V0KG4pO2lmKCFzKXRocm93IG5ldyBFcnJvcihgSWNvbiBzZXQgbm90IGZvdW5kOiAke3IucHJlZml4fWApO3RyeXtpPXsuLi5hd2FpdCBzKCkscHJlZml4Om59LElDLnNldChuLGkpfWNhdGNoKGwpe3Rocm93IFkuZXJyb3IobCksbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCBpY29uIHNldDogJHtyLnByZWZpeH1gKX19bGV0IGE9REMoaSxyLm5hbWUpO2lmKCFhKXRocm93IG5ldyBFcnJvcihgSWNvbiBub3QgZm91bmQ6ICR7dH1gKTtyZXR1cm4gYX0sImdldFJlZ2lzdGVyZWRJY29uRGF0YSIpLHdvPW8oYXN5bmModCxlKT0+e2xldCByO3RyeXtyPWF3YWl0IGh4ZSh0LGU/LmZhbGxiYWNrUHJlZml4KX1jYXRjaChhKXtZLmVycm9yKGEpLHI9T0N9bGV0IG49UkMocixlKTtyZXR1cm4gTUMoTkMobi5ib2R5KSxuLmF0dHJpYnV0ZXMpfSwiZ2V0SWNvblNWRyIpfSk7ZnVuY3Rpb24gQjQodCl7Zm9yKHZhciBlPVtdLHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKWVbci0xXT1hcmd1bWVudHNbcl07dmFyIG49QXJyYXkuZnJvbSh0eXBlb2YgdD09InN0cmluZyI/W3RdOnQpO25bbi5sZW5ndGgtMV09bltuLmxlbmd0aC0xXS5yZXBsYWNlKC9ccj9cbihbXHQgXSopJC8sIiIpO3ZhciBpPW4ucmVkdWNlKGZ1bmN0aW9uKGwsdSl7dmFyIGg9dS5tYXRjaCgvXG4oW1x0IF0rfCg/IVxzKS4pL2cpO3JldHVybiBoP2wuY29uY2F0KGgubWFwKGZ1bmN0aW9uKGYpe3ZhciBkLHA7cmV0dXJuKHA9KGQ9Zi5tYXRjaCgvW1x0IF0vZykpPT09bnVsbHx8ZD09PXZvaWQgMD92b2lkIDA6ZC5sZW5ndGgpIT09bnVsbCYmcCE9PXZvaWQgMD9wOjB9KSk6bH0sW10pO2lmKGkubGVuZ3RoKXt2YXIgYT1uZXcgUmVnRXhwKGAKWwkgXXtgK01hdGgubWluLmFwcGx5KE1hdGgsaSkrIn0iLCJnIik7bj1uLm1hcChmdW5jdGlvbihsKXtyZXR1cm4gbC5yZXBsYWNlKGEsYApgKX0pfW5bMF09blswXS5yZXBsYWNlKC9eXHI/XG4vLCIiKTt2YXIgcz1uWzBdO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24obCx1KXt2YXIgaD1zLm1hdGNoKC8oPzpefFxuKSggKikkLyksZj1oP2hbMV06IiIsZD1sO3R5cGVvZiBsPT0ic3RyaW5nIiYmbC5pbmNsdWRlcyhgCmApJiYoZD1TdHJpbmcobCkuc3BsaXQoYApgKS5tYXAoZnVuY3Rpb24ocCxtKXtyZXR1cm4gbT09PTA/cDoiIitmK3B9KS5qb2luKGAKYCkpLHMrPWQrblt1KzFdfSksc312YXIgUEM9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKEI0LCJkZWRlbnQiKX0pO3ZhciBGNCxxZixRRiwkND1OKCgpPT57InVzZSBzdHJpY3QiO0Y0PS9eLXszfVxzKltcblxyXSguKj8pW1xuXHJdLXszfVxzKltcblxyXSsvcyxxZj0vJXsyfXtccyooPzooXHcrKVxzKjp8KFx3KykpXHMqKD86KFx3Kyl8KCg/Oig/IX0lezJ9KS58XHI/XG4pKikpP1xzKig/On0lezJ9KT8vZ2ksUUY9L1xzKiUlLipcbi9nbX0pO3ZhciBpMCxCQz1OKCgpPT57InVzZSBzdHJpY3QiO2kwPWNsYXNzIGV4dGVuZHMgRXJyb3J7c3RhdGlje28odGhpcywiVW5rbm93bkRpYWdyYW1FcnJvciIpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKGUpLHRoaXMubmFtZT0iVW5rbm93bkRpYWdyYW1FcnJvciJ9fX0pO3ZhciBZZixhMCx6NCxGQyxaRixYZj1OKCgpPT57InVzZSBzdHJpY3QiO3Z0KCk7JDQoKTtCQygpO1lmPXt9LGEwPW8oZnVuY3Rpb24odCxlKXt0PXQucmVwbGFjZShGNCwiIikucmVwbGFjZShxZiwiIikucmVwbGFjZShRRixgCmApO2ZvcihsZXRbcix7ZGV0ZWN0b3I6bn1db2YgT2JqZWN0LmVudHJpZXMoWWYpKWlmKG4odCxlKSlyZXR1cm4gcjt0aHJvdyBuZXcgaTAoYE5vIGRpYWdyYW0gdHlwZSBkZXRlY3RlZCBtYXRjaGluZyBnaXZlbiBjb25maWd1cmF0aW9uIGZvciB0ZXh0OiAke3R9YCl9LCJkZXRlY3RUeXBlIiksejQ9bygoLi4udCk9Pntmb3IobGV0e2lkOmUsZGV0ZWN0b3I6cixsb2FkZXI6bn1vZiB0KUZDKGUscixuKX0sInJlZ2lzdGVyTGF6eUxvYWRlZERpYWdyYW1zIiksRkM9bygodCxlLHIpPT57WWZbdF0mJlkud2FybihgRGV0ZWN0b3Igd2l0aCBrZXkgJHt0fSBhbHJlYWR5IGV4aXN0cy4gT3ZlcndyaXRpbmcuYCksWWZbdF09e2RldGVjdG9yOmUsbG9hZGVyOnJ9LFkuZGVidWcoYERldGVjdG9yIHdpdGgga2V5ICR7dH0gYWRkZWQke3I/IiB3aXRoIGxvYWRlciI6IiJ9YCl9LCJhZGREZXRlY3RvciIpLFpGPW8odD0+WWZbdF0ubG9hZGVyLCJnZXREaWFncmFtTG9hZGVyIil9KTt2YXIgVHksSkYsJEM9TigoKT0+eyJ1c2Ugc3RyaWN0IjtUeT1mdW5jdGlvbigpe3ZhciB0PW8oZnVuY3Rpb24oJGUsUmUsSWUsYmUpe2ZvcihJZT1JZXx8e30sYmU9JGUubGVuZ3RoO2JlLS07SWVbJGVbYmVdXT1SZSk7cmV0dXJuIEllfSwibyIpLGU9WzEsMjRdLHI9WzEsMjVdLG49WzEsMjZdLGk9WzEsMjddLGE9WzEsMjhdLHM9WzEsNjNdLGw9WzEsNjRdLHU9WzEsNjVdLGg9WzEsNjZdLGY9WzEsNjddLGQ9WzEsNjhdLHA9WzEsNjldLG09WzEsMjldLGc9WzEsMzBdLHk9WzEsMzFdLHY9WzEsMzJdLHg9WzEsMzNdLGI9WzEsMzRdLHc9WzEsMzVdLEM9WzEsMzZdLFQ9WzEsMzddLEU9WzEsMzhdLEE9WzEsMzldLFM9WzEsNDBdLF89WzEsNDFdLEk9WzEsNDJdLEQ9WzEsNDNdLGs9WzEsNDRdLEw9WzEsNDVdLFI9WzEsNDZdLE89WzEsNDddLE09WzEsNDhdLEI9WzEsNTBdLEY9WzEsNTFdLFA9WzEsNTJdLHo9WzEsNTNdLCQ9WzEsNTRdLEg9WzEsNTVdLFE9WzEsNTZdLGo9WzEsNTddLGllPVsxLDU4XSxuZT1bMSw1OV0sbGU9WzEsNjBdLGhlPVsxNCw0Ml0sSz1bMTQsMzQsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzRdLFg9WzEyLDE0LDM0LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0XSx0ZT1bMSw4Ml0sSj1bMSw4M10sc2U9WzEsODRdLHVlPVsxLDg1XSxaPVsxMiwxNCw0Ml0sU2U9WzEyLDE0LDMzLDQyXSxjZT1bMTIsMTQsMzMsNDIsNzYsNzcsNzksODBdLGFlPVsxMiwzM10sT2U9WzM0LDM2LDM3LDM4LDM5LDQwLDQxLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0XSxnZT17dHJhY2U6byhmdW5jdGlvbigpe30sInRyYWNlIikseXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxtZXJtYWlkRG9jOjQsZGlyZWN0aW9uOjUsZGlyZWN0aW9uX3RiOjYsZGlyZWN0aW9uX2J0OjcsZGlyZWN0aW9uX3JsOjgsZGlyZWN0aW9uX2xyOjksZ3JhcGhDb25maWc6MTAsQzRfQ09OVEVYVDoxMSxORVdMSU5FOjEyLHN0YXRlbWVudHM6MTMsRU9GOjE0LEM0X0NPTlRBSU5FUjoxNSxDNF9DT01QT05FTlQ6MTYsQzRfRFlOQU1JQzoxNyxDNF9ERVBMT1lNRU5UOjE4LG90aGVyU3RhdGVtZW50czoxOSxkaWFncmFtU3RhdGVtZW50czoyMCxvdGhlclN0YXRlbWVudDoyMSx0aXRsZToyMixhY2NEZXNjcmlwdGlvbjoyMyxhY2NfdGl0bGU6MjQsYWNjX3RpdGxlX3ZhbHVlOjI1LGFjY19kZXNjcjoyNixhY2NfZGVzY3JfdmFsdWU6MjcsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZToyOCxib3VuZGFyeVN0YXRlbWVudDoyOSxib3VuZGFyeVN0YXJ0U3RhdGVtZW50OjMwLGJvdW5kYXJ5U3RvcFN0YXRlbWVudDozMSxib3VuZGFyeVN0YXJ0OjMyLExCUkFDRTozMyxFTlRFUlBSSVNFX0JPVU5EQVJZOjM0LGF0dHJpYnV0ZXM6MzUsU1lTVEVNX0JPVU5EQVJZOjM2LEJPVU5EQVJZOjM3LENPTlRBSU5FUl9CT1VOREFSWTozOCxOT0RFOjM5LE5PREVfTDo0MCxOT0RFX1I6NDEsUkJSQUNFOjQyLGRpYWdyYW1TdGF0ZW1lbnQ6NDMsUEVSU09OOjQ0LFBFUlNPTl9FWFQ6NDUsU1lTVEVNOjQ2LFNZU1RFTV9EQjo0NyxTWVNURU1fUVVFVUU6NDgsU1lTVEVNX0VYVDo0OSxTWVNURU1fRVhUX0RCOjUwLFNZU1RFTV9FWFRfUVVFVUU6NTEsQ09OVEFJTkVSOjUyLENPTlRBSU5FUl9EQjo1MyxDT05UQUlORVJfUVVFVUU6NTQsQ09OVEFJTkVSX0VYVDo1NSxDT05UQUlORVJfRVhUX0RCOjU2LENPTlRBSU5FUl9FWFRfUVVFVUU6NTcsQ09NUE9ORU5UOjU4LENPTVBPTkVOVF9EQjo1OSxDT01QT05FTlRfUVVFVUU6NjAsQ09NUE9ORU5UX0VYVDo2MSxDT01QT05FTlRfRVhUX0RCOjYyLENPTVBPTkVOVF9FWFRfUVVFVUU6NjMsUkVMOjY0LEJJUkVMOjY1LFJFTF9VOjY2LFJFTF9EOjY3LFJFTF9MOjY4LFJFTF9SOjY5LFJFTF9COjcwLFJFTF9JTkRFWDo3MSxVUERBVEVfRUxfU1RZTEU6NzIsVVBEQVRFX1JFTF9TVFlMRTo3MyxVUERBVEVfTEFZT1VUX0NPTkZJRzo3NCxhdHRyaWJ1dGU6NzUsU1RSOjc2LFNUUl9LRVk6NzcsU1RSX1ZBTFVFOjc4LEFUVFJJQlVURTo3OSxBVFRSSUJVVEVfRU1QVFk6ODAsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDY6ImRpcmVjdGlvbl90YiIsNzoiZGlyZWN0aW9uX2J0Iiw4OiJkaXJlY3Rpb25fcmwiLDk6ImRpcmVjdGlvbl9sciIsMTE6IkM0X0NPTlRFWFQiLDEyOiJORVdMSU5FIiwxNDoiRU9GIiwxNToiQzRfQ09OVEFJTkVSIiwxNjoiQzRfQ09NUE9ORU5UIiwxNzoiQzRfRFlOQU1JQyIsMTg6IkM0X0RFUExPWU1FTlQiLDIyOiJ0aXRsZSIsMjM6ImFjY0Rlc2NyaXB0aW9uIiwyNDoiYWNjX3RpdGxlIiwyNToiYWNjX3RpdGxlX3ZhbHVlIiwyNjoiYWNjX2Rlc2NyIiwyNzoiYWNjX2Rlc2NyX3ZhbHVlIiwyODoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMzM6IkxCUkFDRSIsMzQ6IkVOVEVSUFJJU0VfQk9VTkRBUlkiLDM2OiJTWVNURU1fQk9VTkRBUlkiLDM3OiJCT1VOREFSWSIsMzg6IkNPTlRBSU5FUl9CT1VOREFSWSIsMzk6Ik5PREUiLDQwOiJOT0RFX0wiLDQxOiJOT0RFX1IiLDQyOiJSQlJBQ0UiLDQ0OiJQRVJTT04iLDQ1OiJQRVJTT05fRVhUIiw0NjoiU1lTVEVNIiw0NzoiU1lTVEVNX0RCIiw0ODoiU1lTVEVNX1FVRVVFIiw0OToiU1lTVEVNX0VYVCIsNTA6IlNZU1RFTV9FWFRfREIiLDUxOiJTWVNURU1fRVhUX1FVRVVFIiw1MjoiQ09OVEFJTkVSIiw1MzoiQ09OVEFJTkVSX0RCIiw1NDoiQ09OVEFJTkVSX1FVRVVFIiw1NToiQ09OVEFJTkVSX0VYVCIsNTY6IkNPTlRBSU5FUl9FWFRfREIiLDU3OiJDT05UQUlORVJfRVhUX1FVRVVFIiw1ODoiQ09NUE9ORU5UIiw1OToiQ09NUE9ORU5UX0RCIiw2MDoiQ09NUE9ORU5UX1FVRVVFIiw2MToiQ09NUE9ORU5UX0VYVCIsNjI6IkNPTVBPTkVOVF9FWFRfREIiLDYzOiJDT01QT05FTlRfRVhUX1FVRVVFIiw2NDoiUkVMIiw2NToiQklSRUwiLDY2OiJSRUxfVSIsNjc6IlJFTF9EIiw2ODoiUkVMX0wiLDY5OiJSRUxfUiIsNzA6IlJFTF9CIiw3MToiUkVMX0lOREVYIiw3MjoiVVBEQVRFX0VMX1NUWUxFIiw3MzoiVVBEQVRFX1JFTF9TVFlMRSIsNzQ6IlVQREFURV9MQVlPVVRfQ09ORklHIiw3NjoiU1RSIiw3NzoiU1RSX0tFWSIsNzg6IlNUUl9WQUxVRSIsNzk6IkFUVFJJQlVURSIsODA6IkFUVFJJQlVURV9FTVBUWSJ9LHByb2R1Y3Rpb25zXzpbMCxbMywxXSxbMywxXSxbNSwxXSxbNSwxXSxbNSwxXSxbNSwxXSxbNCwxXSxbMTAsNF0sWzEwLDRdLFsxMCw0XSxbMTAsNF0sWzEwLDRdLFsxMywxXSxbMTMsMV0sWzEzLDJdLFsxOSwxXSxbMTksMl0sWzE5LDNdLFsyMSwxXSxbMjEsMV0sWzIxLDJdLFsyMSwyXSxbMjEsMV0sWzI5LDNdLFszMCwzXSxbMzAsM10sWzMwLDRdLFszMiwyXSxbMzIsMl0sWzMyLDJdLFszMiwyXSxbMzIsMl0sWzMyLDJdLFszMiwyXSxbMzEsMV0sWzIwLDFdLFsyMCwyXSxbMjAsM10sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMV0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbMzUsMV0sWzM1LDJdLFs3NSwxXSxbNzUsMl0sWzc1LDFdLFs3NSwxXV0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKFJlLEllLGJlLFcsZGUscmUsb2Upe3ZhciBWPXJlLmxlbmd0aC0xO3N3aXRjaChkZSl7Y2FzZSAzOlcuc2V0RGlyZWN0aW9uKCJUQiIpO2JyZWFrO2Nhc2UgNDpXLnNldERpcmVjdGlvbigiQlQiKTticmVhaztjYXNlIDU6Vy5zZXREaXJlY3Rpb24oIlJMIik7YnJlYWs7Y2FzZSA2Olcuc2V0RGlyZWN0aW9uKCJMUiIpO2JyZWFrO2Nhc2UgODpjYXNlIDk6Y2FzZSAxMDpjYXNlIDExOmNhc2UgMTI6Vy5zZXRDNFR5cGUocmVbVi0zXSk7YnJlYWs7Y2FzZSAxOTpXLnNldFRpdGxlKHJlW1ZdLnN1YnN0cmluZyg2KSksdGhpcy4kPXJlW1ZdLnN1YnN0cmluZyg2KTticmVhaztjYXNlIDIwOlcuc2V0QWNjRGVzY3JpcHRpb24ocmVbVl0uc3Vic3RyaW5nKDE1KSksdGhpcy4kPXJlW1ZdLnN1YnN0cmluZygxNSk7YnJlYWs7Y2FzZSAyMTp0aGlzLiQ9cmVbVl0udHJpbSgpLFcuc2V0VGl0bGUodGhpcy4kKTticmVhaztjYXNlIDIyOmNhc2UgMjM6dGhpcy4kPXJlW1ZdLnRyaW0oKSxXLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAyODpyZVtWXS5zcGxpY2UoMiwwLCJFTlRFUlBSSVNFIiksVy5hZGRQZXJzb25PclN5c3RlbUJvdW5kYXJ5KC4uLnJlW1ZdKSx0aGlzLiQ9cmVbVl07YnJlYWs7Y2FzZSAyOTpyZVtWXS5zcGxpY2UoMiwwLCJTWVNURU0iKSxXLmFkZFBlcnNvbk9yU3lzdGVtQm91bmRhcnkoLi4ucmVbVl0pLHRoaXMuJD1yZVtWXTticmVhaztjYXNlIDMwOlcuYWRkUGVyc29uT3JTeXN0ZW1Cb3VuZGFyeSguLi5yZVtWXSksdGhpcy4kPXJlW1ZdO2JyZWFrO2Nhc2UgMzE6cmVbVl0uc3BsaWNlKDIsMCwiQ09OVEFJTkVSIiksVy5hZGRDb250YWluZXJCb3VuZGFyeSguLi5yZVtWXSksdGhpcy4kPXJlW1ZdO2JyZWFrO2Nhc2UgMzI6Vy5hZGREZXBsb3ltZW50Tm9kZSgibm9kZSIsLi4ucmVbVl0pLHRoaXMuJD1yZVtWXTticmVhaztjYXNlIDMzOlcuYWRkRGVwbG95bWVudE5vZGUoIm5vZGVMIiwuLi5yZVtWXSksdGhpcy4kPXJlW1ZdO2JyZWFrO2Nhc2UgMzQ6Vy5hZGREZXBsb3ltZW50Tm9kZSgibm9kZVIiLC4uLnJlW1ZdKSx0aGlzLiQ9cmVbVl07YnJlYWs7Y2FzZSAzNTpXLnBvcEJvdW5kYXJ5UGFyc2VTdGFjaygpO2JyZWFrO2Nhc2UgMzk6Vy5hZGRQZXJzb25PclN5c3RlbSgicGVyc29uIiwuLi5yZVtWXSksdGhpcy4kPXJlW1ZdO2JyZWFrO2Nhc2UgNDA6Vy5hZGRQZXJzb25PclN5c3RlbSgiZXh0ZXJuYWxfcGVyc29uIiwuLi5yZVtWXSksdGhpcy4kPXJlW1ZdO2JyZWFrO2Nhc2UgNDE6Vy5hZGRQZXJzb25PclN5c3RlbSgic3lzdGVtIiwuLi5yZVtWXSksdGhpcy4kPXJlW1ZdO2JyZWFrO2Nhc2UgNDI6Vy5hZGRQZXJzb25PclN5c3RlbSgic3lzdGVtX2RiIiwuLi5yZVtWXSksdGhpcy4kPXJlW1ZdO2JyZWFrO2Nhc2UgNDM6Vy5hZGRQZXJzb25PclN5c3RlbSgic3lzdGVtX3F1ZXVlIiwuLi5yZVtWXSksdGhpcy4kPXJlW1ZdO2JyZWFrO2Nhc2UgNDQ6Vy5hZGRQZXJzb25PclN5c3RlbSgiZXh0ZXJuYWxfc3lzdGVtIiwuLi5yZVtWXSksdGhpcy4kPXJlW1ZdO2JyZWFrO2Nhc2UgNDU6Vy5hZGRQZXJzb25PclN5c3RlbSgiZXh0ZXJuYWxfc3lzdGVtX2RiIiwuLi5yZVtWXSksdGhpcy4kPXJlW1ZdO2JyZWFrO2Nhc2UgNDY6Vy5hZGRQZXJzb25PclN5c3RlbSgiZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlIiwuLi5yZVtWXSksdGhpcy4kPXJlW1ZdO2JyZWFrO2Nhc2UgNDc6Vy5hZGRDb250YWluZXIoImNvbnRhaW5lciIsLi4ucmVbVl0pLHRoaXMuJD1yZVtWXTticmVhaztjYXNlIDQ4OlcuYWRkQ29udGFpbmVyKCJjb250YWluZXJfZGIiLC4uLnJlW1ZdKSx0aGlzLiQ9cmVbVl07YnJlYWs7Y2FzZSA0OTpXLmFkZENvbnRhaW5lcigiY29udGFpbmVyX3F1ZXVlIiwuLi5yZVtWXSksdGhpcy4kPXJlW1ZdO2JyZWFrO2Nhc2UgNTA6Vy5hZGRDb250YWluZXIoImV4dGVybmFsX2NvbnRhaW5lciIsLi4ucmVbVl0pLHRoaXMuJD1yZVtWXTticmVhaztjYXNlIDUxOlcuYWRkQ29udGFpbmVyKCJleHRlcm5hbF9jb250YWluZXJfZGIiLC4uLnJlW1ZdKSx0aGlzLiQ9cmVbVl07YnJlYWs7Y2FzZSA1MjpXLmFkZENvbnRhaW5lcigiZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlIiwuLi5yZVtWXSksdGhpcy4kPXJlW1ZdO2JyZWFrO2Nhc2UgNTM6Vy5hZGRDb21wb25lbnQoImNvbXBvbmVudCIsLi4ucmVbVl0pLHRoaXMuJD1yZVtWXTticmVhaztjYXNlIDU0OlcuYWRkQ29tcG9uZW50KCJjb21wb25lbnRfZGIiLC4uLnJlW1ZdKSx0aGlzLiQ9cmVbVl07YnJlYWs7Y2FzZSA1NTpXLmFkZENvbXBvbmVudCgiY29tcG9uZW50X3F1ZXVlIiwuLi5yZVtWXSksdGhpcy4kPXJlW1ZdO2JyZWFrO2Nhc2UgNTY6Vy5hZGRDb21wb25lbnQoImV4dGVybmFsX2NvbXBvbmVudCIsLi4ucmVbVl0pLHRoaXMuJD1yZVtWXTticmVhaztjYXNlIDU3OlcuYWRkQ29tcG9uZW50KCJleHRlcm5hbF9jb21wb25lbnRfZGIiLC4uLnJlW1ZdKSx0aGlzLiQ9cmVbVl07YnJlYWs7Y2FzZSA1ODpXLmFkZENvbXBvbmVudCgiZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlIiwuLi5yZVtWXSksdGhpcy4kPXJlW1ZdO2JyZWFrO2Nhc2UgNjA6Vy5hZGRSZWwoInJlbCIsLi4ucmVbVl0pLHRoaXMuJD1yZVtWXTticmVhaztjYXNlIDYxOlcuYWRkUmVsKCJiaXJlbCIsLi4ucmVbVl0pLHRoaXMuJD1yZVtWXTticmVhaztjYXNlIDYyOlcuYWRkUmVsKCJyZWxfdSIsLi4ucmVbVl0pLHRoaXMuJD1yZVtWXTticmVhaztjYXNlIDYzOlcuYWRkUmVsKCJyZWxfZCIsLi4ucmVbVl0pLHRoaXMuJD1yZVtWXTticmVhaztjYXNlIDY0OlcuYWRkUmVsKCJyZWxfbCIsLi4ucmVbVl0pLHRoaXMuJD1yZVtWXTticmVhaztjYXNlIDY1OlcuYWRkUmVsKCJyZWxfciIsLi4ucmVbVl0pLHRoaXMuJD1yZVtWXTticmVhaztjYXNlIDY2OlcuYWRkUmVsKCJyZWxfYiIsLi4ucmVbVl0pLHRoaXMuJD1yZVtWXTticmVhaztjYXNlIDY3OnJlW1ZdLnNwbGljZSgwLDEpLFcuYWRkUmVsKCJyZWwiLC4uLnJlW1ZdKSx0aGlzLiQ9cmVbVl07YnJlYWs7Y2FzZSA2ODpXLnVwZGF0ZUVsU3R5bGUoInVwZGF0ZV9lbF9zdHlsZSIsLi4ucmVbVl0pLHRoaXMuJD1yZVtWXTticmVhaztjYXNlIDY5OlcudXBkYXRlUmVsU3R5bGUoInVwZGF0ZV9yZWxfc3R5bGUiLC4uLnJlW1ZdKSx0aGlzLiQ9cmVbVl07YnJlYWs7Y2FzZSA3MDpXLnVwZGF0ZUxheW91dENvbmZpZygidXBkYXRlX2xheW91dF9jb25maWciLC4uLnJlW1ZdKSx0aGlzLiQ9cmVbVl07YnJlYWs7Y2FzZSA3MTp0aGlzLiQ9W3JlW1ZdXTticmVhaztjYXNlIDcyOnJlW1ZdLnVuc2hpZnQocmVbVi0xXSksdGhpcy4kPXJlW1ZdO2JyZWFrO2Nhc2UgNzM6Y2FzZSA3NTp0aGlzLiQ9cmVbVl0udHJpbSgpO2JyZWFrO2Nhc2UgNzQ6bGV0IHhlPXt9O3hlW3JlW1YtMV0udHJpbSgpXT1yZVtWXS50cmltKCksdGhpcy4kPXhlO2JyZWFrO2Nhc2UgNzY6dGhpcy4kPSIiO2JyZWFrfX0sImFub255bW91cyIpLHRhYmxlOlt7MzoxLDQ6Miw1OjMsNjpbMSw1XSw3OlsxLDZdLDg6WzEsN10sOTpbMSw4XSwxMDo0LDExOlsxLDldLDE1OlsxLDEwXSwxNjpbMSwxMV0sMTc6WzEsMTJdLDE4OlsxLDEzXX0sezE6WzNdfSx7MTpbMiwxXX0sezE6WzIsMl19LHsxOlsyLDddfSx7MTpbMiwzXX0sezE6WzIsNF19LHsxOlsyLDVdfSx7MTpbMiw2XX0sezEyOlsxLDE0XX0sezEyOlsxLDE1XX0sezEyOlsxLDE2XX0sezEyOlsxLDE3XX0sezEyOlsxLDE4XX0sezEzOjE5LDE5OjIwLDIwOjIxLDIxOjIyLDIyOmUsMjM6ciwyNDpuLDI2OmksMjg6YSwyOTo0OSwzMDo2MSwzMjo2MiwzNDpzLDM2OmwsMzc6dSwzODpoLDM5OmYsNDA6ZCw0MTpwLDQzOjIzLDQ0Om0sNDU6Zyw0Njp5LDQ3OnYsNDg6eCw0OTpiLDUwOncsNTE6Qyw1MjpULDUzOkUsNTQ6QSw1NTpTLDU2Ol8sNTc6SSw1ODpELDU5OmssNjA6TCw2MTpSLDYyOk8sNjM6TSw2NDpCLDY1OkYsNjY6UCw2Nzp6LDY4OiQsNjk6SCw3MDpRLDcxOmosNzI6aWUsNzM6bmUsNzQ6bGV9LHsxMzo3MCwxOToyMCwyMDoyMSwyMToyMiwyMjplLDIzOnIsMjQ6biwyNjppLDI4OmEsMjk6NDksMzA6NjEsMzI6NjIsMzQ6cywzNjpsLDM3OnUsMzg6aCwzOTpmLDQwOmQsNDE6cCw0MzoyMyw0NDptLDQ1OmcsNDY6eSw0Nzp2LDQ4OngsNDk6Yiw1MDp3LDUxOkMsNTI6VCw1MzpFLDU0OkEsNTU6Uyw1NjpfLDU3OkksNTg6RCw1OTprLDYwOkwsNjE6Uiw2MjpPLDYzOk0sNjQ6Qiw2NTpGLDY2OlAsNjc6eiw2ODokLDY5OkgsNzA6USw3MTpqLDcyOmllLDczOm5lLDc0OmxlfSx7MTM6NzEsMTk6MjAsMjA6MjEsMjE6MjIsMjI6ZSwyMzpyLDI0Om4sMjY6aSwyODphLDI5OjQ5LDMwOjYxLDMyOjYyLDM0OnMsMzY6bCwzNzp1LDM4OmgsMzk6Ziw0MDpkLDQxOnAsNDM6MjMsNDQ6bSw0NTpnLDQ2OnksNDc6diw0ODp4LDQ5OmIsNTA6dyw1MTpDLDUyOlQsNTM6RSw1NDpBLDU1OlMsNTY6Xyw1NzpJLDU4OkQsNTk6ayw2MDpMLDYxOlIsNjI6Tyw2MzpNLDY0OkIsNjU6Riw2NjpQLDY3OnosNjg6JCw2OTpILDcwOlEsNzE6aiw3MjppZSw3MzpuZSw3NDpsZX0sezEzOjcyLDE5OjIwLDIwOjIxLDIxOjIyLDIyOmUsMjM6ciwyNDpuLDI2OmksMjg6YSwyOTo0OSwzMDo2MSwzMjo2MiwzNDpzLDM2OmwsMzc6dSwzODpoLDM5OmYsNDA6ZCw0MTpwLDQzOjIzLDQ0Om0sNDU6Zyw0Njp5LDQ3OnYsNDg6eCw0OTpiLDUwOncsNTE6Qyw1MjpULDUzOkUsNTQ6QSw1NTpTLDU2Ol8sNTc6SSw1ODpELDU5OmssNjA6TCw2MTpSLDYyOk8sNjM6TSw2NDpCLDY1OkYsNjY6UCw2Nzp6LDY4OiQsNjk6SCw3MDpRLDcxOmosNzI6aWUsNzM6bmUsNzQ6bGV9LHsxMzo3MywxOToyMCwyMDoyMSwyMToyMiwyMjplLDIzOnIsMjQ6biwyNjppLDI4OmEsMjk6NDksMzA6NjEsMzI6NjIsMzQ6cywzNjpsLDM3OnUsMzg6aCwzOTpmLDQwOmQsNDE6cCw0MzoyMyw0NDptLDQ1OmcsNDY6eSw0Nzp2LDQ4OngsNDk6Yiw1MDp3LDUxOkMsNTI6VCw1MzpFLDU0OkEsNTU6Uyw1NjpfLDU3OkksNTg6RCw1OTprLDYwOkwsNjE6Uiw2MjpPLDYzOk0sNjQ6Qiw2NTpGLDY2OlAsNjc6eiw2ODokLDY5OkgsNzA6USw3MTpqLDcyOmllLDczOm5lLDc0OmxlfSx7MTQ6WzEsNzRdfSx0KGhlLFsyLDEzXSx7NDM6MjMsMjk6NDksMzA6NjEsMzI6NjIsMjA6NzUsMzQ6cywzNjpsLDM3OnUsMzg6aCwzOTpmLDQwOmQsNDE6cCw0NDptLDQ1OmcsNDY6eSw0Nzp2LDQ4OngsNDk6Yiw1MDp3LDUxOkMsNTI6VCw1MzpFLDU0OkEsNTU6Uyw1NjpfLDU3OkksNTg6RCw1OTprLDYwOkwsNjE6Uiw2MjpPLDYzOk0sNjQ6Qiw2NTpGLDY2OlAsNjc6eiw2ODokLDY5OkgsNzA6USw3MTpqLDcyOmllLDczOm5lLDc0OmxlfSksdChoZSxbMiwxNF0pLHQoSyxbMiwxNl0sezEyOlsxLDc2XX0pLHQoaGUsWzIsMzZdLHsxMjpbMSw3N119KSx0KFgsWzIsMTldKSx0KFgsWzIsMjBdKSx7MjU6WzEsNzhdfSx7Mjc6WzEsNzldfSx0KFgsWzIsMjNdKSx7MzU6ODAsNzU6ODEsNzY6dGUsNzc6Siw3OTpzZSw4MDp1ZX0sezM1Ojg2LDc1OjgxLDc2OnRlLDc3OkosNzk6c2UsODA6dWV9LHszNTo4Nyw3NTo4MSw3Njp0ZSw3NzpKLDc5OnNlLDgwOnVlfSx7MzU6ODgsNzU6ODEsNzY6dGUsNzc6Siw3OTpzZSw4MDp1ZX0sezM1Ojg5LDc1OjgxLDc2OnRlLDc3OkosNzk6c2UsODA6dWV9LHszNTo5MCw3NTo4MSw3Njp0ZSw3NzpKLDc5OnNlLDgwOnVlfSx7MzU6OTEsNzU6ODEsNzY6dGUsNzc6Siw3OTpzZSw4MDp1ZX0sezM1OjkyLDc1OjgxLDc2OnRlLDc3OkosNzk6c2UsODA6dWV9LHszNTo5Myw3NTo4MSw3Njp0ZSw3NzpKLDc5OnNlLDgwOnVlfSx7MzU6OTQsNzU6ODEsNzY6dGUsNzc6Siw3OTpzZSw4MDp1ZX0sezM1Ojk1LDc1OjgxLDc2OnRlLDc3OkosNzk6c2UsODA6dWV9LHszNTo5Niw3NTo4MSw3Njp0ZSw3NzpKLDc5OnNlLDgwOnVlfSx7MzU6OTcsNzU6ODEsNzY6dGUsNzc6Siw3OTpzZSw4MDp1ZX0sezM1Ojk4LDc1OjgxLDc2OnRlLDc3OkosNzk6c2UsODA6dWV9LHszNTo5OSw3NTo4MSw3Njp0ZSw3NzpKLDc5OnNlLDgwOnVlfSx7MzU6MTAwLDc1OjgxLDc2OnRlLDc3OkosNzk6c2UsODA6dWV9LHszNToxMDEsNzU6ODEsNzY6dGUsNzc6Siw3OTpzZSw4MDp1ZX0sezM1OjEwMiw3NTo4MSw3Njp0ZSw3NzpKLDc5OnNlLDgwOnVlfSx7MzU6MTAzLDc1OjgxLDc2OnRlLDc3OkosNzk6c2UsODA6dWV9LHszNToxMDQsNzU6ODEsNzY6dGUsNzc6Siw3OTpzZSw4MDp1ZX0sdChaLFsyLDU5XSksezM1OjEwNSw3NTo4MSw3Njp0ZSw3NzpKLDc5OnNlLDgwOnVlfSx7MzU6MTA2LDc1OjgxLDc2OnRlLDc3OkosNzk6c2UsODA6dWV9LHszNToxMDcsNzU6ODEsNzY6dGUsNzc6Siw3OTpzZSw4MDp1ZX0sezM1OjEwOCw3NTo4MSw3Njp0ZSw3NzpKLDc5OnNlLDgwOnVlfSx7MzU6MTA5LDc1OjgxLDc2OnRlLDc3OkosNzk6c2UsODA6dWV9LHszNToxMTAsNzU6ODEsNzY6dGUsNzc6Siw3OTpzZSw4MDp1ZX0sezM1OjExMSw3NTo4MSw3Njp0ZSw3NzpKLDc5OnNlLDgwOnVlfSx7MzU6MTEyLDc1OjgxLDc2OnRlLDc3OkosNzk6c2UsODA6dWV9LHszNToxMTMsNzU6ODEsNzY6dGUsNzc6Siw3OTpzZSw4MDp1ZX0sezM1OjExNCw3NTo4MSw3Njp0ZSw3NzpKLDc5OnNlLDgwOnVlfSx7MzU6MTE1LDc1OjgxLDc2OnRlLDc3OkosNzk6c2UsODA6dWV9LHsyMDoxMTYsMjk6NDksMzA6NjEsMzI6NjIsMzQ6cywzNjpsLDM3OnUsMzg6aCwzOTpmLDQwOmQsNDE6cCw0MzoyMyw0NDptLDQ1OmcsNDY6eSw0Nzp2LDQ4OngsNDk6Yiw1MDp3LDUxOkMsNTI6VCw1MzpFLDU0OkEsNTU6Uyw1NjpfLDU3OkksNTg6RCw1OTprLDYwOkwsNjE6Uiw2MjpPLDYzOk0sNjQ6Qiw2NTpGLDY2OlAsNjc6eiw2ODokLDY5OkgsNzA6USw3MTpqLDcyOmllLDczOm5lLDc0OmxlfSx7MTI6WzEsMTE4XSwzMzpbMSwxMTddfSx7MzU6MTE5LDc1OjgxLDc2OnRlLDc3OkosNzk6c2UsODA6dWV9LHszNToxMjAsNzU6ODEsNzY6dGUsNzc6Siw3OTpzZSw4MDp1ZX0sezM1OjEyMSw3NTo4MSw3Njp0ZSw3NzpKLDc5OnNlLDgwOnVlfSx7MzU6MTIyLDc1OjgxLDc2OnRlLDc3OkosNzk6c2UsODA6dWV9LHszNToxMjMsNzU6ODEsNzY6dGUsNzc6Siw3OTpzZSw4MDp1ZX0sezM1OjEyNCw3NTo4MSw3Njp0ZSw3NzpKLDc5OnNlLDgwOnVlfSx7MzU6MTI1LDc1OjgxLDc2OnRlLDc3OkosNzk6c2UsODA6dWV9LHsxNDpbMSwxMjZdfSx7MTQ6WzEsMTI3XX0sezE0OlsxLDEyOF19LHsxNDpbMSwxMjldfSx7MTpbMiw4XX0sdChoZSxbMiwxNV0pLHQoSyxbMiwxN10sezIxOjIyLDE5OjEzMCwyMjplLDIzOnIsMjQ6biwyNjppLDI4OmF9KSx0KGhlLFsyLDM3XSx7MTk6MjAsMjA6MjEsMjE6MjIsNDM6MjMsMjk6NDksMzA6NjEsMzI6NjIsMTM6MTMxLDIyOmUsMjM6ciwyNDpuLDI2OmksMjg6YSwzNDpzLDM2OmwsMzc6dSwzODpoLDM5OmYsNDA6ZCw0MTpwLDQ0Om0sNDU6Zyw0Njp5LDQ3OnYsNDg6eCw0OTpiLDUwOncsNTE6Qyw1MjpULDUzOkUsNTQ6QSw1NTpTLDU2Ol8sNTc6SSw1ODpELDU5OmssNjA6TCw2MTpSLDYyOk8sNjM6TSw2NDpCLDY1OkYsNjY6UCw2Nzp6LDY4OiQsNjk6SCw3MDpRLDcxOmosNzI6aWUsNzM6bmUsNzQ6bGV9KSx0KFgsWzIsMjFdKSx0KFgsWzIsMjJdKSx0KFosWzIsMzldKSx0KFNlLFsyLDcxXSx7NzU6ODEsMzU6MTMyLDc2OnRlLDc3OkosNzk6c2UsODA6dWV9KSx0KGNlLFsyLDczXSksezc4OlsxLDEzM119LHQoY2UsWzIsNzVdKSx0KGNlLFsyLDc2XSksdChaLFsyLDQwXSksdChaLFsyLDQxXSksdChaLFsyLDQyXSksdChaLFsyLDQzXSksdChaLFsyLDQ0XSksdChaLFsyLDQ1XSksdChaLFsyLDQ2XSksdChaLFsyLDQ3XSksdChaLFsyLDQ4XSksdChaLFsyLDQ5XSksdChaLFsyLDUwXSksdChaLFsyLDUxXSksdChaLFsyLDUyXSksdChaLFsyLDUzXSksdChaLFsyLDU0XSksdChaLFsyLDU1XSksdChaLFsyLDU2XSksdChaLFsyLDU3XSksdChaLFsyLDU4XSksdChaLFsyLDYwXSksdChaLFsyLDYxXSksdChaLFsyLDYyXSksdChaLFsyLDYzXSksdChaLFsyLDY0XSksdChaLFsyLDY1XSksdChaLFsyLDY2XSksdChaLFsyLDY3XSksdChaLFsyLDY4XSksdChaLFsyLDY5XSksdChaLFsyLDcwXSksezMxOjEzNCw0MjpbMSwxMzVdfSx7MTI6WzEsMTM2XX0sezMzOlsxLDEzN119LHQoYWUsWzIsMjhdKSx0KGFlLFsyLDI5XSksdChhZSxbMiwzMF0pLHQoYWUsWzIsMzFdKSx0KGFlLFsyLDMyXSksdChhZSxbMiwzM10pLHQoYWUsWzIsMzRdKSx7MTpbMiw5XX0sezE6WzIsMTBdfSx7MTpbMiwxMV19LHsxOlsyLDEyXX0sdChLLFsyLDE4XSksdChoZSxbMiwzOF0pLHQoU2UsWzIsNzJdKSx0KGNlLFsyLDc0XSksdChaLFsyLDI0XSksdChaLFsyLDM1XSksdChPZSxbMiwyNV0pLHQoT2UsWzIsMjZdLHsxMjpbMSwxMzhdfSksdChPZSxbMiwyN10pXSxkZWZhdWx0QWN0aW9uczp7MjpbMiwxXSwzOlsyLDJdLDQ6WzIsN10sNTpbMiwzXSw2OlsyLDRdLDc6WzIsNV0sODpbMiw2XSw3NDpbMiw4XSwxMjY6WzIsOV0sMTI3OlsyLDEwXSwxMjg6WzIsMTFdLDEyOTpbMiwxMl19LHBhcnNlRXJyb3I6byhmdW5jdGlvbihSZSxJZSl7aWYoSWUucmVjb3ZlcmFibGUpdGhpcy50cmFjZShSZSk7ZWxzZXt2YXIgYmU9bmV3IEVycm9yKFJlKTt0aHJvdyBiZS5oYXNoPUllLGJlfX0sInBhcnNlRXJyb3IiKSxwYXJzZTpvKGZ1bmN0aW9uKFJlKXt2YXIgSWU9dGhpcyxiZT1bMF0sVz1bXSxkZT1bbnVsbF0scmU9W10sb2U9dGhpcy50YWJsZSxWPSIiLHhlPTAscT0wLHBlPTAsdmU9MixQZT0xLF9lPXJlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHdlPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksVmU9e3l5Ont9fTtmb3IodmFyIERlIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksRGUpJiYoVmUueXlbRGVdPXRoaXMueXlbRGVdKTt3ZS5zZXRJbnB1dChSZSxWZS55eSksVmUueXkubGV4ZXI9d2UsVmUueXkucGFyc2VyPXRoaXMsdHlwZW9mIHdlLnl5bGxvYz4idSImJih3ZS55eWxsb2M9e30pO3ZhciBxZT13ZS55eWxsb2M7cmUucHVzaChxZSk7dmFyIGF0PXdlLm9wdGlvbnMmJndlLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBWZS55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1WZS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBSdChudCl7YmUubGVuZ3RoPWJlLmxlbmd0aC0yKm50LGRlLmxlbmd0aD1kZS5sZW5ndGgtbnQscmUubGVuZ3RoPXJlLmxlbmd0aC1udH1vKFJ0LCJwb3BTdGFjayIpO2Z1bmN0aW9uIHN0KCl7dmFyIG50O3JldHVybiBudD1XLnBvcCgpfHx3ZS5sZXgoKXx8UGUsdHlwZW9mIG50IT0ibnVtYmVyIiYmKG50IGluc3RhbmNlb2YgQXJyYXkmJihXPW50LG50PVcucG9wKCkpLG50PUllLnN5bWJvbHNfW250XXx8bnQpLG50fW8oc3QsImxleCIpO2Zvcih2YXIgVWUsY3QsV2Usb3QsWXQsYnQsTXQ9e30seHQsdXQsRXQsZnQ7Oyl7aWYoV2U9YmVbYmUubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbV2VdP290PXRoaXMuZGVmYXVsdEFjdGlvbnNbV2VdOigoVWU9PT1udWxsfHx0eXBlb2YgVWU+InUiKSYmKFVlPXN0KCkpLG90PW9lW1dlXSYmb2VbV2VdW1VlXSksdHlwZW9mIG90PiJ1Inx8IW90Lmxlbmd0aHx8IW90WzBdKXt2YXIgeXQ9IiI7ZnQ9W107Zm9yKHh0IGluIG9lW1dlXSl0aGlzLnRlcm1pbmFsc19beHRdJiZ4dD52ZSYmZnQucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW3h0XSsiJyIpO3dlLnNob3dQb3NpdGlvbj95dD0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyh4ZSsxKStgOgpgK3dlLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArZnQuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tVZV18fFVlKSsiJyI6eXQ9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoeGUrMSkrIjogVW5leHBlY3RlZCAiKyhVZT09UGU/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bVWVdfHxVZSkrIiciKSx0aGlzLnBhcnNlRXJyb3IoeXQse3RleHQ6d2UubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW1VlXXx8VWUsbGluZTp3ZS55eWxpbmVubyxsb2M6cWUsZXhwZWN0ZWQ6ZnR9KX1pZihvdFswXWluc3RhbmNlb2YgQXJyYXkmJm90Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrV2UrIiwgdG9rZW46ICIrVWUpO3N3aXRjaChvdFswXSl7Y2FzZSAxOmJlLnB1c2goVWUpLGRlLnB1c2god2UueXl0ZXh0KSxyZS5wdXNoKHdlLnl5bGxvYyksYmUucHVzaChvdFsxXSksVWU9bnVsbCxjdD8oVWU9Y3QsY3Q9bnVsbCk6KHE9d2UueXlsZW5nLFY9d2UueXl0ZXh0LHhlPXdlLnl5bGluZW5vLHFlPXdlLnl5bGxvYyxwZT4wJiZwZS0tKTticmVhaztjYXNlIDI6aWYodXQ9dGhpcy5wcm9kdWN0aW9uc19bb3RbMV1dWzFdLE10LiQ9ZGVbZGUubGVuZ3RoLXV0XSxNdC5fJD17Zmlyc3RfbGluZTpyZVtyZS5sZW5ndGgtKHV0fHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6cmVbcmUubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46cmVbcmUubGVuZ3RoLSh1dHx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpyZVtyZS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LGF0JiYoTXQuXyQucmFuZ2U9W3JlW3JlLmxlbmd0aC0odXR8fDEpXS5yYW5nZVswXSxyZVtyZS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxidD10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoTXQsW1YscSx4ZSxWZS55eSxvdFsxXSxkZSxyZV0uY29uY2F0KF9lKSksdHlwZW9mIGJ0PCJ1IilyZXR1cm4gYnQ7dXQmJihiZT1iZS5zbGljZSgwLC0xKnV0KjIpLGRlPWRlLnNsaWNlKDAsLTEqdXQpLHJlPXJlLnNsaWNlKDAsLTEqdXQpKSxiZS5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW290WzFdXVswXSksZGUucHVzaChNdC4kKSxyZS5wdXNoKE10Ll8kKSxFdD1vZVtiZVtiZS5sZW5ndGgtMl1dW2JlW2JlLmxlbmd0aC0xXV0sYmUucHVzaChFdCk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH0sInBhcnNlIil9LHplPWZ1bmN0aW9uKCl7dmFyICRlPXtFT0Y6MSxwYXJzZUVycm9yOm8oZnVuY3Rpb24oSWUsYmUpe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoSWUsYmUpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKEllKX0sInBhcnNlRXJyb3IiKSxzZXRJbnB1dDpvKGZ1bmN0aW9uKFJlLEllKXtyZXR1cm4gdGhpcy55eT1JZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9UmUsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LCJzZXRJbnB1dCIpLGlucHV0Om8oZnVuY3Rpb24oKXt2YXIgUmU9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPVJlLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1SZSx0aGlzLm1hdGNoZWQrPVJlO3ZhciBJZT1SZS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIEllPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxSZX0sImlucHV0IiksdW5wdXQ6byhmdW5jdGlvbihSZSl7dmFyIEllPVJlLmxlbmd0aCxiZT1SZS5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PVJlK3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1JZSksdGhpcy5vZmZzZXQtPUllO3ZhciBXPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLGJlLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09YmUubGVuZ3RoLTEpO3ZhciBkZT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46YmU/KGJlLmxlbmd0aD09PVcubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStXW1cubGVuZ3RoLWJlLmxlbmd0aF0ubGVuZ3RoLWJlWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tSWV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bZGVbMF0sZGVbMF0rdGhpcy55eWxlbmctSWVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sInVucHV0IiksbW9yZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30sIm1vcmUiKSxyZWplY3Q6byhmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sInJlamVjdCIpLGxlc3M6byhmdW5jdGlvbihSZSl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKFJlKSl9LCJsZXNzIikscGFzdElucHV0Om8oZnVuY3Rpb24oKXt2YXIgUmU9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihSZS5sZW5ndGg+MjA/Ii4uLiI6IiIpK1JlLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSwicGFzdElucHV0IiksdXBjb21pbmdJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIFJlPXRoaXMubWF0Y2g7cmV0dXJuIFJlLmxlbmd0aDwyMCYmKFJlKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1SZS5sZW5ndGgpKSwoUmUuc3Vic3RyKDAsMjApKyhSZS5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sInVwY29taW5nSW5wdXQiKSxzaG93UG9zaXRpb246byhmdW5jdGlvbigpe3ZhciBSZT10aGlzLnBhc3RJbnB1dCgpLEllPW5ldyBBcnJheShSZS5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBSZSt0aGlzLnVwY29taW5nSW5wdXQoKStgCmArSWUrIl4ifSwic2hvd1Bvc2l0aW9uIiksdGVzdF9tYXRjaDpvKGZ1bmN0aW9uKFJlLEllKXt2YXIgYmUsVyxkZTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoZGU9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoZGUueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksVz1SZVswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksVyYmKHRoaXMueXlsaW5lbm8rPVcubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46Vz9XW1cubGVuZ3RoLTFdLmxlbmd0aC1XW1cubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rUmVbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9UmVbMF0sdGhpcy5tYXRjaCs9UmVbMF0sdGhpcy5tYXRjaGVzPVJlLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKFJlWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1SZVswXSxiZT10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxJZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxiZSlyZXR1cm4gYmU7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIHJlIGluIGRlKXRoaXNbcmVdPWRlW3JlXTtyZXR1cm4hMX1yZXR1cm4hMX0sInRlc3RfbWF0Y2giKSxuZXh0Om8oZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgUmUsSWUsYmUsVzt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBkZT10aGlzLl9jdXJyZW50UnVsZXMoKSxyZT0wO3JlPGRlLmxlbmd0aDtyZSsrKWlmKGJlPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbZGVbcmVdXSksYmUmJighSWV8fGJlWzBdLmxlbmd0aD5JZVswXS5sZW5ndGgpKXtpZihJZT1iZSxXPXJlLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKFJlPXRoaXMudGVzdF9tYXRjaChiZSxkZVtyZV0pLFJlIT09ITEpcmV0dXJuIFJlO2lmKHRoaXMuX2JhY2t0cmFjayl7SWU9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gSWU/KFJlPXRoaXMudGVzdF9tYXRjaChJZSxkZVtXXSksUmUhPT0hMT9SZTohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sIm5leHQiKSxsZXg6byhmdW5jdGlvbigpe3ZhciBJZT10aGlzLm5leHQoKTtyZXR1cm4gSWV8fHRoaXMubGV4KCl9LCJsZXgiKSxiZWdpbjpvKGZ1bmN0aW9uKEllKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goSWUpfSwiYmVnaW4iKSxwb3BTdGF0ZTpvKGZ1bmN0aW9uKCl7dmFyIEllPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIEllPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSwicG9wU3RhdGUiKSxfY3VycmVudFJ1bGVzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSwiX2N1cnJlbnRSdWxlcyIpLHRvcFN0YXRlOm8oZnVuY3Rpb24oSWUpe3JldHVybiBJZT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKEllfHwwKSxJZT49MD90aGlzLmNvbmRpdGlvblN0YWNrW0llXToiSU5JVElBTCJ9LCJ0b3BTdGF0ZSIpLHB1c2hTdGF0ZTpvKGZ1bmN0aW9uKEllKXt0aGlzLmJlZ2luKEllKX0sInB1c2hTdGF0ZSIpLHN0YXRlU3RhY2tTaXplOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LCJzdGF0ZVN0YWNrU2l6ZSIpLG9wdGlvbnM6e30scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKEllLGJlLFcsZGUpe3ZhciByZT1kZTtzd2l0Y2goVyl7Y2FzZSAwOnJldHVybiA2O2Nhc2UgMTpyZXR1cm4gNztjYXNlIDI6cmV0dXJuIDg7Y2FzZSAzOnJldHVybiA5O2Nhc2UgNDpyZXR1cm4gMjI7Y2FzZSA1OnJldHVybiAyMztjYXNlIDY6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDI0O2JyZWFrO2Nhc2UgNzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2JyZWFrO2Nhc2UgODpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX2Rlc2NyIiksMjY7YnJlYWs7Y2FzZSA5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7YnJlYWs7Y2FzZSAxMDp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSAxMTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxMjpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSAxMzpicmVhaztjYXNlIDE0OmM7YnJlYWs7Y2FzZSAxNTpyZXR1cm4gMTI7Y2FzZSAxNjpicmVhaztjYXNlIDE3OnJldHVybiAxMTtjYXNlIDE4OnJldHVybiAxNTtjYXNlIDE5OnJldHVybiAxNjtjYXNlIDIwOnJldHVybiAxNztjYXNlIDIxOnJldHVybiAxODtjYXNlIDIyOnJldHVybiB0aGlzLmJlZ2luKCJwZXJzb25fZXh0IiksNDU7YnJlYWs7Y2FzZSAyMzpyZXR1cm4gdGhpcy5iZWdpbigicGVyc29uIiksNDQ7YnJlYWs7Y2FzZSAyNDpyZXR1cm4gdGhpcy5iZWdpbigic3lzdGVtX2V4dF9xdWV1ZSIpLDUxO2JyZWFrO2Nhc2UgMjU6cmV0dXJuIHRoaXMuYmVnaW4oInN5c3RlbV9leHRfZGIiKSw1MDticmVhaztjYXNlIDI2OnJldHVybiB0aGlzLmJlZ2luKCJzeXN0ZW1fZXh0IiksNDk7YnJlYWs7Y2FzZSAyNzpyZXR1cm4gdGhpcy5iZWdpbigic3lzdGVtX3F1ZXVlIiksNDg7YnJlYWs7Y2FzZSAyODpyZXR1cm4gdGhpcy5iZWdpbigic3lzdGVtX2RiIiksNDc7YnJlYWs7Y2FzZSAyOTpyZXR1cm4gdGhpcy5iZWdpbigic3lzdGVtIiksNDY7YnJlYWs7Y2FzZSAzMDpyZXR1cm4gdGhpcy5iZWdpbigiYm91bmRhcnkiKSwzNzticmVhaztjYXNlIDMxOnJldHVybiB0aGlzLmJlZ2luKCJlbnRlcnByaXNlX2JvdW5kYXJ5IiksMzQ7YnJlYWs7Y2FzZSAzMjpyZXR1cm4gdGhpcy5iZWdpbigic3lzdGVtX2JvdW5kYXJ5IiksMzY7YnJlYWs7Y2FzZSAzMzpyZXR1cm4gdGhpcy5iZWdpbigiY29udGFpbmVyX2V4dF9xdWV1ZSIpLDU3O2JyZWFrO2Nhc2UgMzQ6cmV0dXJuIHRoaXMuYmVnaW4oImNvbnRhaW5lcl9leHRfZGIiKSw1NjticmVhaztjYXNlIDM1OnJldHVybiB0aGlzLmJlZ2luKCJjb250YWluZXJfZXh0IiksNTU7YnJlYWs7Y2FzZSAzNjpyZXR1cm4gdGhpcy5iZWdpbigiY29udGFpbmVyX3F1ZXVlIiksNTQ7YnJlYWs7Y2FzZSAzNzpyZXR1cm4gdGhpcy5iZWdpbigiY29udGFpbmVyX2RiIiksNTM7YnJlYWs7Y2FzZSAzODpyZXR1cm4gdGhpcy5iZWdpbigiY29udGFpbmVyIiksNTI7YnJlYWs7Y2FzZSAzOTpyZXR1cm4gdGhpcy5iZWdpbigiY29udGFpbmVyX2JvdW5kYXJ5IiksMzg7YnJlYWs7Y2FzZSA0MDpyZXR1cm4gdGhpcy5iZWdpbigiY29tcG9uZW50X2V4dF9xdWV1ZSIpLDYzO2JyZWFrO2Nhc2UgNDE6cmV0dXJuIHRoaXMuYmVnaW4oImNvbXBvbmVudF9leHRfZGIiKSw2MjticmVhaztjYXNlIDQyOnJldHVybiB0aGlzLmJlZ2luKCJjb21wb25lbnRfZXh0IiksNjE7YnJlYWs7Y2FzZSA0MzpyZXR1cm4gdGhpcy5iZWdpbigiY29tcG9uZW50X3F1ZXVlIiksNjA7YnJlYWs7Y2FzZSA0NDpyZXR1cm4gdGhpcy5iZWdpbigiY29tcG9uZW50X2RiIiksNTk7YnJlYWs7Y2FzZSA0NTpyZXR1cm4gdGhpcy5iZWdpbigiY29tcG9uZW50IiksNTg7YnJlYWs7Y2FzZSA0NjpyZXR1cm4gdGhpcy5iZWdpbigibm9kZSIpLDM5O2JyZWFrO2Nhc2UgNDc6cmV0dXJuIHRoaXMuYmVnaW4oIm5vZGUiKSwzOTticmVhaztjYXNlIDQ4OnJldHVybiB0aGlzLmJlZ2luKCJub2RlX2wiKSw0MDticmVhaztjYXNlIDQ5OnJldHVybiB0aGlzLmJlZ2luKCJub2RlX3IiKSw0MTticmVhaztjYXNlIDUwOnJldHVybiB0aGlzLmJlZ2luKCJyZWwiKSw2NDticmVhaztjYXNlIDUxOnJldHVybiB0aGlzLmJlZ2luKCJiaXJlbCIpLDY1O2JyZWFrO2Nhc2UgNTI6cmV0dXJuIHRoaXMuYmVnaW4oInJlbF91IiksNjY7YnJlYWs7Y2FzZSA1MzpyZXR1cm4gdGhpcy5iZWdpbigicmVsX3UiKSw2NjticmVhaztjYXNlIDU0OnJldHVybiB0aGlzLmJlZ2luKCJyZWxfZCIpLDY3O2JyZWFrO2Nhc2UgNTU6cmV0dXJuIHRoaXMuYmVnaW4oInJlbF9kIiksNjc7YnJlYWs7Y2FzZSA1NjpyZXR1cm4gdGhpcy5iZWdpbigicmVsX2wiKSw2ODticmVhaztjYXNlIDU3OnJldHVybiB0aGlzLmJlZ2luKCJyZWxfbCIpLDY4O2JyZWFrO2Nhc2UgNTg6cmV0dXJuIHRoaXMuYmVnaW4oInJlbF9yIiksNjk7YnJlYWs7Y2FzZSA1OTpyZXR1cm4gdGhpcy5iZWdpbigicmVsX3IiKSw2OTticmVhaztjYXNlIDYwOnJldHVybiB0aGlzLmJlZ2luKCJyZWxfYiIpLDcwO2JyZWFrO2Nhc2UgNjE6cmV0dXJuIHRoaXMuYmVnaW4oInJlbF9pbmRleCIpLDcxO2JyZWFrO2Nhc2UgNjI6cmV0dXJuIHRoaXMuYmVnaW4oInVwZGF0ZV9lbF9zdHlsZSIpLDcyO2JyZWFrO2Nhc2UgNjM6cmV0dXJuIHRoaXMuYmVnaW4oInVwZGF0ZV9yZWxfc3R5bGUiKSw3MzticmVhaztjYXNlIDY0OnJldHVybiB0aGlzLmJlZ2luKCJ1cGRhdGVfbGF5b3V0X2NvbmZpZyIpLDc0O2JyZWFrO2Nhc2UgNjU6cmV0dXJuIkVPRl9JTl9TVFJVQ1QiO2Nhc2UgNjY6cmV0dXJuIHRoaXMuYmVnaW4oImF0dHJpYnV0ZSIpLCJBVFRSSUJVVEVfRU1QVFkiO2JyZWFrO2Nhc2UgNjc6dGhpcy5iZWdpbigiYXR0cmlidXRlIik7YnJlYWs7Y2FzZSA2ODp0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNjk6cmV0dXJuIDgwO2Nhc2UgNzA6YnJlYWs7Y2FzZSA3MTpyZXR1cm4gODA7Y2FzZSA3Mjp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDczOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDc0OnJldHVybiJTVFIiO2Nhc2UgNzU6dGhpcy5iZWdpbigic3RyaW5nX2t2Iik7YnJlYWs7Y2FzZSA3NjpyZXR1cm4gdGhpcy5iZWdpbigic3RyaW5nX2t2X2tleSIpLCJTVFJfS0VZIjticmVhaztjYXNlIDc3OnRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJzdHJpbmdfa3ZfdmFsdWUiKTticmVhaztjYXNlIDc4OnJldHVybiJTVFJfVkFMVUUiO2Nhc2UgNzk6dGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDgwOnJldHVybiJTVFIiO2Nhc2UgODE6cmV0dXJuIkxCUkFDRSI7Y2FzZSA4MjpyZXR1cm4iUkJSQUNFIjtjYXNlIDgzOnJldHVybiJTUEFDRSI7Y2FzZSA4NDpyZXR1cm4iRU9MIjtjYXNlIDg1OnJldHVybiAxNH19LCJhbm9ueW1vdXMiKSxydWxlczpbL14oPzouKmRpcmVjdGlvblxzK1RCW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK0JUW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK1JMW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK0xSW15cbl0qKS8sL14oPzp0aXRsZVxzW14jXG47XSspLywvXig/OmFjY0Rlc2NyaXB0aW9uXHNbXiNcbjtdKykvLC9eKD86YWNjVGl0bGVccyo6XHMqKS8sL14oPzooPyFcbnx8KSpbXlxuXSopLywvXig/OmFjY0Rlc2NyXHMqOlxzKikvLC9eKD86KD8hXG58fCkqW15cbl0qKS8sL14oPzphY2NEZXNjclxzKlx7XHMqKS8sL14oPzpbXH1dKS8sL14oPzpbXlx9XSopLywvXig/OiUlKD8hXHspKlteXG5dKihccj9cbj8pKykvLC9eKD86JSVbXlxuXSooXHI/XG4pKikvLC9eKD86XHMqKFxyP1xuKSspLywvXig/OlxzKykvLC9eKD86QzRDb250ZXh0XGIpLywvXig/OkM0Q29udGFpbmVyXGIpLywvXig/OkM0Q29tcG9uZW50XGIpLywvXig/OkM0RHluYW1pY1xiKS8sL14oPzpDNERlcGxveW1lbnRcYikvLC9eKD86UGVyc29uX0V4dFxiKS8sL14oPzpQZXJzb25cYikvLC9eKD86U3lzdGVtUXVldWVfRXh0XGIpLywvXig/OlN5c3RlbURiX0V4dFxiKS8sL14oPzpTeXN0ZW1fRXh0XGIpLywvXig/OlN5c3RlbVF1ZXVlXGIpLywvXig/OlN5c3RlbURiXGIpLywvXig/OlN5c3RlbVxiKS8sL14oPzpCb3VuZGFyeVxiKS8sL14oPzpFbnRlcnByaXNlX0JvdW5kYXJ5XGIpLywvXig/OlN5c3RlbV9Cb3VuZGFyeVxiKS8sL14oPzpDb250YWluZXJRdWV1ZV9FeHRcYikvLC9eKD86Q29udGFpbmVyRGJfRXh0XGIpLywvXig/OkNvbnRhaW5lcl9FeHRcYikvLC9eKD86Q29udGFpbmVyUXVldWVcYikvLC9eKD86Q29udGFpbmVyRGJcYikvLC9eKD86Q29udGFpbmVyXGIpLywvXig/OkNvbnRhaW5lcl9Cb3VuZGFyeVxiKS8sL14oPzpDb21wb25lbnRRdWV1ZV9FeHRcYikvLC9eKD86Q29tcG9uZW50RGJfRXh0XGIpLywvXig/OkNvbXBvbmVudF9FeHRcYikvLC9eKD86Q29tcG9uZW50UXVldWVcYikvLC9eKD86Q29tcG9uZW50RGJcYikvLC9eKD86Q29tcG9uZW50XGIpLywvXig/OkRlcGxveW1lbnRfTm9kZVxiKS8sL14oPzpOb2RlXGIpLywvXig/Ok5vZGVfTFxiKS8sL14oPzpOb2RlX1JcYikvLC9eKD86UmVsXGIpLywvXig/OkJpUmVsXGIpLywvXig/OlJlbF9VcFxiKS8sL14oPzpSZWxfVVxiKS8sL14oPzpSZWxfRG93blxiKS8sL14oPzpSZWxfRFxiKS8sL14oPzpSZWxfTGVmdFxiKS8sL14oPzpSZWxfTFxiKS8sL14oPzpSZWxfUmlnaHRcYikvLC9eKD86UmVsX1JcYikvLC9eKD86UmVsX0JhY2tcYikvLC9eKD86UmVsSW5kZXhcYikvLC9eKD86VXBkYXRlRWxlbWVudFN0eWxlXGIpLywvXig/OlVwZGF0ZVJlbFN0eWxlXGIpLywvXig/OlVwZGF0ZUxheW91dENvbmZpZ1xiKS8sL14oPzokKS8sL14oPzpbKF1bIF0qWyxdKS8sL14oPzpbKF0pLywvXig/OlspXSkvLC9eKD86LCwpLywvXig/OiwpLywvXig/OlsgXSpbIl1bIl0pLywvXig/OlsgXSpbIl0pLywvXig/OlsiXSkvLC9eKD86W14iXSopLywvXig/OlsgXSpbXCRdKS8sL14oPzpbXj1dKikvLC9eKD86Wz1dWyBdKlsiXSkvLC9eKD86W14iXSspLywvXig/OlsiXSkvLC9eKD86W14sXSspLywvXig/Olx7KS8sL14oPzpcfSkvLC9eKD86W1xzXSspLywvXig/OltcblxyXSspLywvXig/OiQpL10sY29uZGl0aW9uczp7YWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzExLDEyXSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzldLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbN10saW5jbHVzaXZlOiExfSxzdHJpbmdfa3ZfdmFsdWU6e3J1bGVzOls3OCw3OV0saW5jbHVzaXZlOiExfSxzdHJpbmdfa3Zfa2V5OntydWxlczpbNzddLGluY2x1c2l2ZTohMX0sc3RyaW5nX2t2OntydWxlczpbNzZdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbNzMsNzRdLGluY2x1c2l2ZTohMX0sYXR0cmlidXRlOntydWxlczpbNjgsNjksNzAsNzEsNzIsNzUsODBdLGluY2x1c2l2ZTohMX0sdXBkYXRlX2xheW91dF9jb25maWc6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSx1cGRhdGVfcmVsX3N0eWxlOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sdXBkYXRlX2VsX3N0eWxlOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0scmVsX2I6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxyZWxfcjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHJlbF9sOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0scmVsX2Q6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxyZWxfdTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHJlbF9iaTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxyZWw6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxub2RlX3I6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxub2RlX2w6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxub2RlOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0saW5kZXg6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0scmVsX2luZGV4OntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sY29tcG9uZW50X2V4dF9xdWV1ZTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxjb21wb25lbnRfZXh0X2RiOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sY29tcG9uZW50X2V4dDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbXBvbmVudF9xdWV1ZTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbXBvbmVudF9kYjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbXBvbmVudDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcl9ib3VuZGFyeTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcl9leHRfcXVldWU6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxjb250YWluZXJfZXh0X2RiOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sY29udGFpbmVyX2V4dDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcl9xdWV1ZTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcl9kYjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGJpcmVsOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sc3lzdGVtX2JvdW5kYXJ5OntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sZW50ZXJwcmlzZV9ib3VuZGFyeTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGJvdW5kYXJ5OntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sc3lzdGVtX2V4dF9xdWV1ZTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHN5c3RlbV9leHRfZGI6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxzeXN0ZW1fZXh0OntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sc3lzdGVtX3F1ZXVlOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sc3lzdGVtX2RiOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sc3lzdGVtOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0scGVyc29uX2V4dDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHBlcnNvbjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMiwzLDQsNSw2LDgsMTAsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsODEsODIsODMsODQsODVdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gJGV9KCk7Z2UubGV4ZXI9emU7ZnVuY3Rpb24gSGUoKXt0aGlzLnl5PXt9fXJldHVybiBvKEhlLCJQYXJzZXIiKSxIZS5wcm90b3R5cGU9Z2UsZ2UuUGFyc2VyPUhlLG5ldyBIZX0oKTtUeS5wYXJzZXI9VHk7SkY9VHl9KTt2YXIgekMsR24sczA9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt6Qz1vKCh0LGUse2RlcHRoOnI9MixjbG9iYmVyOm49ITF9PXt9KT0+e2xldCBpPXtkZXB0aDpyLGNsb2JiZXI6bn07cmV0dXJuIEFycmF5LmlzQXJyYXkoZSkmJiFBcnJheS5pc0FycmF5KHQpPyhlLmZvckVhY2goYT0+ekModCxhLGkpKSx0KTpBcnJheS5pc0FycmF5KGUpJiZBcnJheS5pc0FycmF5KHQpPyhlLmZvckVhY2goYT0+e3QuaW5jbHVkZXMoYSl8fHQucHVzaChhKX0pLHQpOnQ9PT12b2lkIDB8fHI8PTA/dCE9bnVsbCYmdHlwZW9mIHQ9PSJvYmplY3QiJiZ0eXBlb2YgZT09Im9iamVjdCI/T2JqZWN0LmFzc2lnbih0LGUpOmU6KGUhPT12b2lkIDAmJnR5cGVvZiB0PT0ib2JqZWN0IiYmdHlwZW9mIGU9PSJvYmplY3QiJiZPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGE9Pnt0eXBlb2YgZVthXT09Im9iamVjdCImJih0W2FdPT09dm9pZCAwfHx0eXBlb2YgdFthXT09Im9iamVjdCIpPyh0W2FdPT09dm9pZCAwJiYodFthXT1BcnJheS5pc0FycmF5KGVbYV0pP1tdOnt9KSx0W2FdPXpDKHRbYV0sZVthXSx7ZGVwdGg6ci0xLGNsb2JiZXI6bn0pKToobnx8dHlwZW9mIHRbYV0hPSJvYmplY3QiJiZ0eXBlb2YgZVthXSE9Im9iamVjdCIpJiYodFthXT1lW2FdKX0pLHQpfSwiYXNzaWduV2l0aERlcHRoIiksR249ekN9KTt2YXIgRzQsZSQsdCQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtHND17bWluOntyOjAsZzowLGI6MCxzOjAsbDowLGE6MH0sbWF4OntyOjI1NSxnOjI1NSxiOjI1NSxoOjM2MCxzOjEwMCxsOjEwMCxhOjF9LGNsYW1wOntyOm8odD0+dD49MjU1PzI1NTp0PDA/MDp0LCJyIiksZzpvKHQ9PnQ+PTI1NT8yNTU6dDwwPzA6dCwiZyIpLGI6byh0PT50Pj0yNTU/MjU1OnQ8MD8wOnQsImIiKSxoOm8odD0+dCUzNjAsImgiKSxzOm8odD0+dD49MTAwPzEwMDp0PDA/MDp0LCJzIiksbDpvKHQ9PnQ+PTEwMD8xMDA6dDwwPzA6dCwibCIpLGE6byh0PT50Pj0xPzE6dDwwPzA6dCwiYSIpfSx0b0xpbmVhcjpvKHQ9PntsZXQgZT10LzI1NTtyZXR1cm4gdD4uMDM5Mjg/TWF0aC5wb3coKGUrLjA1NSkvMS4wNTUsMi40KTplLzEyLjkyfSwidG9MaW5lYXIiKSxodWUycmdiOm8oKHQsZSxyKT0+KHI8MCYmKHIrPTEpLHI+MSYmKHItPTEpLHI8LjE2NjY2NjY2NjY2NjY2NjY2P3QrKGUtdCkqNipyOnI8LjU/ZTpyPC42NjY2NjY2NjY2NjY2NjY2P3QrKGUtdCkqKC42NjY2NjY2NjY2NjY2NjY2LXIpKjY6dCksImh1ZTJyZ2IiKSxoc2wycmdiOm8oKHtoOnQsczplLGw6cn0sbik9PntpZighZSlyZXR1cm4gcioyLjU1O3QvPTM2MCxlLz0xMDAsci89MTAwO2xldCBpPXI8LjU/ciooMStlKTpyK2UtciplLGE9MipyLWk7c3dpdGNoKG4pe2Nhc2UiciI6cmV0dXJuIEc0Lmh1ZTJyZ2IoYSxpLHQrLjMzMzMzMzMzMzMzMzMzMzMpKjI1NTtjYXNlImciOnJldHVybiBHNC5odWUycmdiKGEsaSx0KSoyNTU7Y2FzZSJiIjpyZXR1cm4gRzQuaHVlMnJnYihhLGksdC0uMzMzMzMzMzMzMzMzMzMzMykqMjU1fX0sImhzbDJyZ2IiKSxyZ2IyaHNsOm8oKHtyOnQsZzplLGI6cn0sbik9Pnt0Lz0yNTUsZS89MjU1LHIvPTI1NTtsZXQgaT1NYXRoLm1heCh0LGUsciksYT1NYXRoLm1pbih0LGUscikscz0oaSthKS8yO2lmKG49PT0ibCIpcmV0dXJuIHMqMTAwO2lmKGk9PT1hKXJldHVybiAwO2xldCBsPWktYSx1PXM+LjU/bC8oMi1pLWEpOmwvKGkrYSk7aWYobj09PSJzIilyZXR1cm4gdSoxMDA7c3dpdGNoKGkpe2Nhc2UgdDpyZXR1cm4oKGUtcikvbCsoZTxyPzY6MCkpKjYwO2Nhc2UgZTpyZXR1cm4oKHItdCkvbCsyKSo2MDtjYXNlIHI6cmV0dXJuKCh0LWUpL2wrNCkqNjA7ZGVmYXVsdDpyZXR1cm4tMX19LCJyZ2IyaHNsIil9LGUkPUc0fSk7dmFyIGZ4ZSxyJCxuJD1OKCgpPT57InVzZSBzdHJpY3QiO2Z4ZT17Y2xhbXA6bygodCxlLHIpPT5lPnI/TWF0aC5taW4oZSxNYXRoLm1heChyLHQpKTpNYXRoLm1pbihyLE1hdGgubWF4KGUsdCkpLCJjbGFtcCIpLHJvdW5kOm8odD0+TWF0aC5yb3VuZCh0KjFlMTApLzFlMTAsInJvdW5kIil9LHIkPWZ4ZX0pO3ZhciBkeGUsaSQsYSQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtkeGU9e2RlYzJoZXg6byh0PT57bGV0IGU9TWF0aC5yb3VuZCh0KS50b1N0cmluZygxNik7cmV0dXJuIGUubGVuZ3RoPjE/ZTpgMCR7ZX1gfSwiZGVjMmhleCIpfSxpJD1keGV9KTt2YXIgcHhlLGp0LFdsPU4oKCk9PnsidXNlIHN0cmljdCI7dCQoKTtuJCgpO2EkKCk7cHhlPXtjaGFubmVsOmUkLGxhbmc6ciQsdW5pdDppJH0sanQ9cHhlfSk7dmFyIHJ1LElpLGt5PU4oKCk9PnsidXNlIHN0cmljdCI7V2woKTtydT17fTtmb3IobGV0IHQ9MDt0PD0yNTU7dCsrKXJ1W3RdPWp0LnVuaXQuZGVjMmhleCh0KTtJaT17QUxMOjAsUkdCOjEsSFNMOjJ9fSk7dmFyIEdDLHMkLG8kPU4oKCk9PnsidXNlIHN0cmljdCI7a3koKTtHQz1jbGFzc3tzdGF0aWN7byh0aGlzLCJUeXBlIil9Y29uc3RydWN0b3IoKXt0aGlzLnR5cGU9SWkuQUxMfWdldCgpe3JldHVybiB0aGlzLnR5cGV9c2V0KGUpe2lmKHRoaXMudHlwZSYmdGhpcy50eXBlIT09ZSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjaGFuZ2UgYm90aCBSR0IgYW5kIEhTTCBjaGFubmVscyBhdCB0aGUgc2FtZSB0aW1lIik7dGhpcy50eXBlPWV9cmVzZXQoKXt0aGlzLnR5cGU9SWkuQUxMfWlzKGUpe3JldHVybiB0aGlzLnR5cGU9PT1lfX0scyQ9R0N9KTt2YXIgVkMsbCQsYyQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtXbCgpO28kKCk7a3koKTtWQz1jbGFzc3tzdGF0aWN7byh0aGlzLCJDaGFubmVscyIpfWNvbnN0cnVjdG9yKGUscil7dGhpcy5jb2xvcj1yLHRoaXMuY2hhbmdlZD0hMSx0aGlzLmRhdGE9ZSx0aGlzLnR5cGU9bmV3IHMkfXNldChlLHIpe3JldHVybiB0aGlzLmNvbG9yPXIsdGhpcy5jaGFuZ2VkPSExLHRoaXMuZGF0YT1lLHRoaXMudHlwZS50eXBlPUlpLkFMTCx0aGlzfV9lbnN1cmVIU0woKXtsZXQgZT10aGlzLmRhdGEse2g6cixzOm4sbDppfT1lO3I9PT12b2lkIDAmJihlLmg9anQuY2hhbm5lbC5yZ2IyaHNsKGUsImgiKSksbj09PXZvaWQgMCYmKGUucz1qdC5jaGFubmVsLnJnYjJoc2woZSwicyIpKSxpPT09dm9pZCAwJiYoZS5sPWp0LmNoYW5uZWwucmdiMmhzbChlLCJsIikpfV9lbnN1cmVSR0IoKXtsZXQgZT10aGlzLmRhdGEse3IsZzpuLGI6aX09ZTtyPT09dm9pZCAwJiYoZS5yPWp0LmNoYW5uZWwuaHNsMnJnYihlLCJyIikpLG49PT12b2lkIDAmJihlLmc9anQuY2hhbm5lbC5oc2wycmdiKGUsImciKSksaT09PXZvaWQgMCYmKGUuYj1qdC5jaGFubmVsLmhzbDJyZ2IoZSwiYiIpKX1nZXQgcigpe2xldCBlPXRoaXMuZGF0YSxyPWUucjtyZXR1cm4hdGhpcy50eXBlLmlzKElpLkhTTCkmJnIhPT12b2lkIDA/cjoodGhpcy5fZW5zdXJlSFNMKCksanQuY2hhbm5lbC5oc2wycmdiKGUsInIiKSl9Z2V0IGcoKXtsZXQgZT10aGlzLmRhdGEscj1lLmc7cmV0dXJuIXRoaXMudHlwZS5pcyhJaS5IU0wpJiZyIT09dm9pZCAwP3I6KHRoaXMuX2Vuc3VyZUhTTCgpLGp0LmNoYW5uZWwuaHNsMnJnYihlLCJnIikpfWdldCBiKCl7bGV0IGU9dGhpcy5kYXRhLHI9ZS5iO3JldHVybiF0aGlzLnR5cGUuaXMoSWkuSFNMKSYmciE9PXZvaWQgMD9yOih0aGlzLl9lbnN1cmVIU0woKSxqdC5jaGFubmVsLmhzbDJyZ2IoZSwiYiIpKX1nZXQgaCgpe2xldCBlPXRoaXMuZGF0YSxyPWUuaDtyZXR1cm4hdGhpcy50eXBlLmlzKElpLlJHQikmJnIhPT12b2lkIDA/cjoodGhpcy5fZW5zdXJlUkdCKCksanQuY2hhbm5lbC5yZ2IyaHNsKGUsImgiKSl9Z2V0IHMoKXtsZXQgZT10aGlzLmRhdGEscj1lLnM7cmV0dXJuIXRoaXMudHlwZS5pcyhJaS5SR0IpJiZyIT09dm9pZCAwP3I6KHRoaXMuX2Vuc3VyZVJHQigpLGp0LmNoYW5uZWwucmdiMmhzbChlLCJzIikpfWdldCBsKCl7bGV0IGU9dGhpcy5kYXRhLHI9ZS5sO3JldHVybiF0aGlzLnR5cGUuaXMoSWkuUkdCKSYmciE9PXZvaWQgMD9yOih0aGlzLl9lbnN1cmVSR0IoKSxqdC5jaGFubmVsLnJnYjJoc2woZSwibCIpKX1nZXQgYSgpe3JldHVybiB0aGlzLmRhdGEuYX1zZXQgcihlKXt0aGlzLnR5cGUuc2V0KElpLlJHQiksdGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5yPWV9c2V0IGcoZSl7dGhpcy50eXBlLnNldChJaS5SR0IpLHRoaXMuY2hhbmdlZD0hMCx0aGlzLmRhdGEuZz1lfXNldCBiKGUpe3RoaXMudHlwZS5zZXQoSWkuUkdCKSx0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmI9ZX1zZXQgaChlKXt0aGlzLnR5cGUuc2V0KElpLkhTTCksdGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5oPWV9c2V0IHMoZSl7dGhpcy50eXBlLnNldChJaS5IU0wpLHRoaXMuY2hhbmdlZD0hMCx0aGlzLmRhdGEucz1lfXNldCBsKGUpe3RoaXMudHlwZS5zZXQoSWkuSFNMKSx0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmw9ZX1zZXQgYShlKXt0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmE9ZX19LGwkPVZDfSk7dmFyIG14ZSxpaCxFeT1OKCgpPT57InVzZSBzdHJpY3QiO2MkKCk7bXhlPW5ldyBsJCh7cjowLGc6MCxiOjAsYTowfSwidHJhbnNwYXJlbnQiKSxpaD1teGV9KTt2YXIgdSQsamYsVUM9TigoKT0+eyJ1c2Ugc3RyaWN0IjtFeSgpO2t5KCk7dSQ9e3JlOi9eIygoPzpbYS1mMC05XXsyfSl7Miw0fXxbYS1mMC05XXszfSkkL2kscGFyc2U6byh0PT57aWYodC5jaGFyQ29kZUF0KDApIT09MzUpcmV0dXJuO2xldCBlPXQubWF0Y2godSQucmUpO2lmKCFlKXJldHVybjtsZXQgcj1lWzFdLG49cGFyc2VJbnQociwxNiksaT1yLmxlbmd0aCxhPWklND09PTAscz1pPjQsbD1zPzE6MTcsdT1zPzg6NCxoPWE/MDotMSxmPXM/MjU1OjE1O3JldHVybiBpaC5zZXQoe3I6KG4+PnUqKGgrMykmZikqbCxnOihuPj51KihoKzIpJmYpKmwsYjoobj4+dSooaCsxKSZmKSpsLGE6YT8obiZmKSpsLzI1NToxfSx0KX0sInBhcnNlIiksc3RyaW5naWZ5Om8odD0+e2xldHtyOmUsZzpyLGI6bixhOml9PXQ7cmV0dXJuIGk8MT9gIyR7cnVbTWF0aC5yb3VuZChlKV19JHtydVtNYXRoLnJvdW5kKHIpXX0ke3J1W01hdGgucm91bmQobildfSR7cnVbTWF0aC5yb3VuZChpKjI1NSldfWA6YCMke3J1W01hdGgucm91bmQoZSldfSR7cnVbTWF0aC5yb3VuZChyKV19JHtydVtNYXRoLnJvdW5kKG4pXX1gfSwic3RyaW5naWZ5Iil9LGpmPXUkfSk7dmFyIFY0LFN5LGgkPU4oKCk9PnsidXNlIHN0cmljdCI7V2woKTtFeSgpO1Y0PXtyZTovXmhzbGE/XChccyo/KC0/KD86XGQrKD86XC5cZCspP3woPzpcLlxkKykpKD86ZS0/XGQrKT8oPzpkZWd8Z3JhZHxyYWR8dHVybik/KVxzKj8oPzosfFxzKVxzKj8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplLT9cZCspPyUpXHMqPyg/Oix8XHMpXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmUtP1xkKyk/JSkoPzpccyo/KD86LHxcLylccyo/XCs/KC0/KD86XGQrKD86XC5cZCspP3woPzpcLlxkKykpKD86ZS0/XGQrKT8oJSk/KSk/XHMqP1wpJC9pLGh1ZVJlOi9eKC4rPykoZGVnfGdyYWR8cmFkfHR1cm4pJC9pLF9odWUyZGVnOm8odD0+e2xldCBlPXQubWF0Y2goVjQuaHVlUmUpO2lmKGUpe2xldFsscixuXT1lO3N3aXRjaChuKXtjYXNlImdyYWQiOnJldHVybiBqdC5jaGFubmVsLmNsYW1wLmgocGFyc2VGbG9hdChyKSouOSk7Y2FzZSJyYWQiOnJldHVybiBqdC5jaGFubmVsLmNsYW1wLmgocGFyc2VGbG9hdChyKSoxODAvTWF0aC5QSSk7Y2FzZSJ0dXJuIjpyZXR1cm4ganQuY2hhbm5lbC5jbGFtcC5oKHBhcnNlRmxvYXQocikqMzYwKX19cmV0dXJuIGp0LmNoYW5uZWwuY2xhbXAuaChwYXJzZUZsb2F0KHQpKX0sIl9odWUyZGVnIikscGFyc2U6byh0PT57bGV0IGU9dC5jaGFyQ29kZUF0KDApO2lmKGUhPT0xMDQmJmUhPT03MilyZXR1cm47bGV0IHI9dC5tYXRjaChWNC5yZSk7aWYoIXIpcmV0dXJuO2xldFssbixpLGEscyxsXT1yO3JldHVybiBpaC5zZXQoe2g6VjQuX2h1ZTJkZWcobiksczpqdC5jaGFubmVsLmNsYW1wLnMocGFyc2VGbG9hdChpKSksbDpqdC5jaGFubmVsLmNsYW1wLmwocGFyc2VGbG9hdChhKSksYTpzP2p0LmNoYW5uZWwuY2xhbXAuYShsP3BhcnNlRmxvYXQocykvMTAwOnBhcnNlRmxvYXQocykpOjF9LHQpfSwicGFyc2UiKSxzdHJpbmdpZnk6byh0PT57bGV0e2g6ZSxzOnIsbDpuLGE6aX09dDtyZXR1cm4gaTwxP2Boc2xhKCR7anQubGFuZy5yb3VuZChlKX0sICR7anQubGFuZy5yb3VuZChyKX0lLCAke2p0Lmxhbmcucm91bmQobil9JSwgJHtpfSlgOmBoc2woJHtqdC5sYW5nLnJvdW5kKGUpfSwgJHtqdC5sYW5nLnJvdW5kKHIpfSUsICR7anQubGFuZy5yb3VuZChuKX0lKWB9LCJzdHJpbmdpZnkiKX0sU3k9VjR9KTt2YXIgVTQsSEMsZiQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtVQygpO1U0PXtjb2xvcnM6e2FsaWNlYmx1ZToiI2YwZjhmZiIsYW50aXF1ZXdoaXRlOiIjZmFlYmQ3IixhcXVhOiIjMDBmZmZmIixhcXVhbWFyaW5lOiIjN2ZmZmQ0IixhenVyZToiI2YwZmZmZiIsYmVpZ2U6IiNmNWY1ZGMiLGJpc3F1ZToiI2ZmZTRjNCIsYmxhY2s6IiMwMDAwMDAiLGJsYW5jaGVkYWxtb25kOiIjZmZlYmNkIixibHVlOiIjMDAwMGZmIixibHVldmlvbGV0OiIjOGEyYmUyIixicm93bjoiI2E1MmEyYSIsYnVybHl3b29kOiIjZGViODg3IixjYWRldGJsdWU6IiM1ZjllYTAiLGNoYXJ0cmV1c2U6IiM3ZmZmMDAiLGNob2NvbGF0ZToiI2QyNjkxZSIsY29yYWw6IiNmZjdmNTAiLGNvcm5mbG93ZXJibHVlOiIjNjQ5NWVkIixjb3Juc2lsazoiI2ZmZjhkYyIsY3JpbXNvbjoiI2RjMTQzYyIsY3lhbmFxdWE6IiMwMGZmZmYiLGRhcmtibHVlOiIjMDAwMDhiIixkYXJrY3lhbjoiIzAwOGI4YiIsZGFya2dvbGRlbnJvZDoiI2I4ODYwYiIsZGFya2dyYXk6IiNhOWE5YTkiLGRhcmtncmVlbjoiIzAwNjQwMCIsZGFya2dyZXk6IiNhOWE5YTkiLGRhcmtraGFraToiI2JkYjc2YiIsZGFya21hZ2VudGE6IiM4YjAwOGIiLGRhcmtvbGl2ZWdyZWVuOiIjNTU2YjJmIixkYXJrb3JhbmdlOiIjZmY4YzAwIixkYXJrb3JjaGlkOiIjOTkzMmNjIixkYXJrcmVkOiIjOGIwMDAwIixkYXJrc2FsbW9uOiIjZTk5NjdhIixkYXJrc2VhZ3JlZW46IiM4ZmJjOGYiLGRhcmtzbGF0ZWJsdWU6IiM0ODNkOGIiLGRhcmtzbGF0ZWdyYXk6IiMyZjRmNGYiLGRhcmtzbGF0ZWdyZXk6IiMyZjRmNGYiLGRhcmt0dXJxdW9pc2U6IiMwMGNlZDEiLGRhcmt2aW9sZXQ6IiM5NDAwZDMiLGRlZXBwaW5rOiIjZmYxNDkzIixkZWVwc2t5Ymx1ZToiIzAwYmZmZiIsZGltZ3JheToiIzY5Njk2OSIsZGltZ3JleToiIzY5Njk2OSIsZG9kZ2VyYmx1ZToiIzFlOTBmZiIsZmlyZWJyaWNrOiIjYjIyMjIyIixmbG9yYWx3aGl0ZToiI2ZmZmFmMCIsZm9yZXN0Z3JlZW46IiMyMjhiMjIiLGZ1Y2hzaWE6IiNmZjAwZmYiLGdhaW5zYm9ybzoiI2RjZGNkYyIsZ2hvc3R3aGl0ZToiI2Y4ZjhmZiIsZ29sZDoiI2ZmZDcwMCIsZ29sZGVucm9kOiIjZGFhNTIwIixncmF5OiIjODA4MDgwIixncmVlbjoiIzAwODAwMCIsZ3JlZW55ZWxsb3c6IiNhZGZmMmYiLGdyZXk6IiM4MDgwODAiLGhvbmV5ZGV3OiIjZjBmZmYwIixob3RwaW5rOiIjZmY2OWI0IixpbmRpYW5yZWQ6IiNjZDVjNWMiLGluZGlnbzoiIzRiMDA4MiIsaXZvcnk6IiNmZmZmZjAiLGtoYWtpOiIjZjBlNjhjIixsYXZlbmRlcjoiI2U2ZTZmYSIsbGF2ZW5kZXJibHVzaDoiI2ZmZjBmNSIsbGF3bmdyZWVuOiIjN2NmYzAwIixsZW1vbmNoaWZmb246IiNmZmZhY2QiLGxpZ2h0Ymx1ZToiI2FkZDhlNiIsbGlnaHRjb3JhbDoiI2YwODA4MCIsbGlnaHRjeWFuOiIjZTBmZmZmIixsaWdodGdvbGRlbnJvZHllbGxvdzoiI2ZhZmFkMiIsbGlnaHRncmF5OiIjZDNkM2QzIixsaWdodGdyZWVuOiIjOTBlZTkwIixsaWdodGdyZXk6IiNkM2QzZDMiLGxpZ2h0cGluazoiI2ZmYjZjMSIsbGlnaHRzYWxtb246IiNmZmEwN2EiLGxpZ2h0c2VhZ3JlZW46IiMyMGIyYWEiLGxpZ2h0c2t5Ymx1ZToiIzg3Y2VmYSIsbGlnaHRzbGF0ZWdyYXk6IiM3Nzg4OTkiLGxpZ2h0c2xhdGVncmV5OiIjNzc4ODk5IixsaWdodHN0ZWVsYmx1ZToiI2IwYzRkZSIsbGlnaHR5ZWxsb3c6IiNmZmZmZTAiLGxpbWU6IiMwMGZmMDAiLGxpbWVncmVlbjoiIzMyY2QzMiIsbGluZW46IiNmYWYwZTYiLG1hZ2VudGE6IiNmZjAwZmYiLG1hcm9vbjoiIzgwMDAwMCIsbWVkaXVtYXF1YW1hcmluZToiIzY2Y2RhYSIsbWVkaXVtYmx1ZToiIzAwMDBjZCIsbWVkaXVtb3JjaGlkOiIjYmE1NWQzIixtZWRpdW1wdXJwbGU6IiM5MzcwZGIiLG1lZGl1bXNlYWdyZWVuOiIjM2NiMzcxIixtZWRpdW1zbGF0ZWJsdWU6IiM3YjY4ZWUiLG1lZGl1bXNwcmluZ2dyZWVuOiIjMDBmYTlhIixtZWRpdW10dXJxdW9pc2U6IiM0OGQxY2MiLG1lZGl1bXZpb2xldHJlZDoiI2M3MTU4NSIsbWlkbmlnaHRibHVlOiIjMTkxOTcwIixtaW50Y3JlYW06IiNmNWZmZmEiLG1pc3R5cm9zZToiI2ZmZTRlMSIsbW9jY2FzaW46IiNmZmU0YjUiLG5hdmFqb3doaXRlOiIjZmZkZWFkIixuYXZ5OiIjMDAwMDgwIixvbGRsYWNlOiIjZmRmNWU2IixvbGl2ZToiIzgwODAwMCIsb2xpdmVkcmFiOiIjNmI4ZTIzIixvcmFuZ2U6IiNmZmE1MDAiLG9yYW5nZXJlZDoiI2ZmNDUwMCIsb3JjaGlkOiIjZGE3MGQ2IixwYWxlZ29sZGVucm9kOiIjZWVlOGFhIixwYWxlZ3JlZW46IiM5OGZiOTgiLHBhbGV0dXJxdW9pc2U6IiNhZmVlZWUiLHBhbGV2aW9sZXRyZWQ6IiNkYjcwOTMiLHBhcGF5YXdoaXA6IiNmZmVmZDUiLHBlYWNocHVmZjoiI2ZmZGFiOSIscGVydToiI2NkODUzZiIscGluazoiI2ZmYzBjYiIscGx1bToiI2RkYTBkZCIscG93ZGVyYmx1ZToiI2IwZTBlNiIscHVycGxlOiIjODAwMDgwIixyZWJlY2NhcHVycGxlOiIjNjYzMzk5IixyZWQ6IiNmZjAwMDAiLHJvc3licm93bjoiI2JjOGY4ZiIscm95YWxibHVlOiIjNDE2OWUxIixzYWRkbGVicm93bjoiIzhiNDUxMyIsc2FsbW9uOiIjZmE4MDcyIixzYW5keWJyb3duOiIjZjRhNDYwIixzZWFncmVlbjoiIzJlOGI1NyIsc2Vhc2hlbGw6IiNmZmY1ZWUiLHNpZW5uYToiI2EwNTIyZCIsc2lsdmVyOiIjYzBjMGMwIixza3libHVlOiIjODdjZWViIixzbGF0ZWJsdWU6IiM2YTVhY2QiLHNsYXRlZ3JheToiIzcwODA5MCIsc2xhdGVncmV5OiIjNzA4MDkwIixzbm93OiIjZmZmYWZhIixzcHJpbmdncmVlbjoiIzAwZmY3ZiIsdGFuOiIjZDJiNDhjIix0ZWFsOiIjMDA4MDgwIix0aGlzdGxlOiIjZDhiZmQ4Iix0cmFuc3BhcmVudDoiIzAwMDAwMDAwIix0dXJxdW9pc2U6IiM0MGUwZDAiLHZpb2xldDoiI2VlODJlZSIsd2hlYXQ6IiNmNWRlYjMiLHdoaXRlOiIjZmZmZmZmIix3aGl0ZXNtb2tlOiIjZjVmNWY1Iix5ZWxsb3c6IiNmZmZmMDAiLHllbGxvd2dyZWVuOiIjOWFjZDMyIn0scGFyc2U6byh0PT57dD10LnRvTG93ZXJDYXNlKCk7bGV0IGU9VTQuY29sb3JzW3RdO2lmKGUpcmV0dXJuIGpmLnBhcnNlKGUpfSwicGFyc2UiKSxzdHJpbmdpZnk6byh0PT57bGV0IGU9amYuc3RyaW5naWZ5KHQpO2ZvcihsZXQgciBpbiBVNC5jb2xvcnMpaWYoVTQuY29sb3JzW3JdPT09ZSlyZXR1cm4gcn0sInN0cmluZ2lmeSIpfSxIQz1VNH0pO3ZhciBkJCxDeSxwJD1OKCgpPT57InVzZSBzdHJpY3QiO1dsKCk7RXkoKTtkJD17cmU6L15yZ2JhP1woXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpXHMqPyg/Oix8XHMpXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpXHMqPyg/Oix8XHMpXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpKD86XHMqPyg/Oix8XC8pXHMqP1wrPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmVcZCspPyglPykpKT9ccyo/XCkkL2kscGFyc2U6byh0PT57bGV0IGU9dC5jaGFyQ29kZUF0KDApO2lmKGUhPT0xMTQmJmUhPT04MilyZXR1cm47bGV0IHI9dC5tYXRjaChkJC5yZSk7aWYoIXIpcmV0dXJuO2xldFssbixpLGEscyxsLHUsaCxmXT1yO3JldHVybiBpaC5zZXQoe3I6anQuY2hhbm5lbC5jbGFtcC5yKGk/cGFyc2VGbG9hdChuKSoyLjU1OnBhcnNlRmxvYXQobikpLGc6anQuY2hhbm5lbC5jbGFtcC5nKHM/cGFyc2VGbG9hdChhKSoyLjU1OnBhcnNlRmxvYXQoYSkpLGI6anQuY2hhbm5lbC5jbGFtcC5iKHU/cGFyc2VGbG9hdChsKSoyLjU1OnBhcnNlRmxvYXQobCkpLGE6aD9qdC5jaGFubmVsLmNsYW1wLmEoZj9wYXJzZUZsb2F0KGgpLzEwMDpwYXJzZUZsb2F0KGgpKToxfSx0KX0sInBhcnNlIiksc3RyaW5naWZ5Om8odD0+e2xldHtyOmUsZzpyLGI6bixhOml9PXQ7cmV0dXJuIGk8MT9gcmdiYSgke2p0Lmxhbmcucm91bmQoZSl9LCAke2p0Lmxhbmcucm91bmQocil9LCAke2p0Lmxhbmcucm91bmQobil9LCAke2p0Lmxhbmcucm91bmQoaSl9KWA6YHJnYigke2p0Lmxhbmcucm91bmQoZSl9LCAke2p0Lmxhbmcucm91bmQocil9LCAke2p0Lmxhbmcucm91bmQobil9KWB9LCJzdHJpbmdpZnkiKX0sQ3k9ZCR9KTt2YXIgZ3hlLE9pLG51PU4oKCk9PnsidXNlIHN0cmljdCI7VUMoKTtoJCgpO2YkKCk7cCQoKTtreSgpO2d4ZT17Zm9ybWF0OntrZXl3b3JkOkhDLGhleDpqZixyZ2I6Q3kscmdiYTpDeSxoc2w6U3ksaHNsYTpTeX0scGFyc2U6byh0PT57aWYodHlwZW9mIHQhPSJzdHJpbmciKXJldHVybiB0O2xldCBlPWpmLnBhcnNlKHQpfHxDeS5wYXJzZSh0KXx8U3kucGFyc2UodCl8fEhDLnBhcnNlKHQpO2lmKGUpcmV0dXJuIGU7dGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBjb2xvciBmb3JtYXQ6ICIke3R9ImApfSwicGFyc2UiKSxzdHJpbmdpZnk6byh0PT4hdC5jaGFuZ2VkJiZ0LmNvbG9yP3QuY29sb3I6dC50eXBlLmlzKElpLkhTTCl8fHQuZGF0YS5yPT09dm9pZCAwP1N5LnN0cmluZ2lmeSh0KTp0LmE8MXx8IU51bWJlci5pc0ludGVnZXIodC5yKXx8IU51bWJlci5pc0ludGVnZXIodC5nKXx8IU51bWJlci5pc0ludGVnZXIodC5iKT9DeS5zdHJpbmdpZnkodCk6amYuc3RyaW5naWZ5KHQpLCJzdHJpbmdpZnkiKX0sT2k9Z3hlfSk7dmFyIHl4ZSxINCxXQz1OKCgpPT57InVzZSBzdHJpY3QiO1dsKCk7bnUoKTt5eGU9bygodCxlKT0+e2xldCByPU9pLnBhcnNlKHQpO2ZvcihsZXQgbiBpbiBlKXJbbl09anQuY2hhbm5lbC5jbGFtcFtuXShlW25dKTtyZXR1cm4gT2kuc3RyaW5naWZ5KHIpfSwiY2hhbmdlIiksSDQ9eXhlfSk7dmFyIHZ4ZSxxYSxxQz1OKCgpPT57InVzZSBzdHJpY3QiO1dsKCk7RXkoKTtudSgpO1dDKCk7dnhlPW8oKHQsZSxyPTAsbj0xKT0+e2lmKHR5cGVvZiB0IT0ibnVtYmVyIilyZXR1cm4gSDQodCx7YTplfSk7bGV0IGk9aWguc2V0KHtyOmp0LmNoYW5uZWwuY2xhbXAucih0KSxnOmp0LmNoYW5uZWwuY2xhbXAuZyhlKSxiOmp0LmNoYW5uZWwuY2xhbXAuYihyKSxhOmp0LmNoYW5uZWwuY2xhbXAuYShuKX0pO3JldHVybiBPaS5zdHJpbmdpZnkoaSl9LCJyZ2JhIikscWE9dnhlfSk7dmFyIHh4ZSxLZixtJD1OKCgpPT57InVzZSBzdHJpY3QiO1dsKCk7bnUoKTt4eGU9bygodCxlKT0+anQubGFuZy5yb3VuZChPaS5wYXJzZSh0KVtlXSksImNoYW5uZWwiKSxLZj14eGV9KTt2YXIgYnhlLGckLHkkPU4oKCk9PnsidXNlIHN0cmljdCI7V2woKTtudSgpO2J4ZT1vKHQ9PntsZXR7cjplLGc6cixiOm59PU9pLnBhcnNlKHQpLGk9LjIxMjYqanQuY2hhbm5lbC50b0xpbmVhcihlKSsuNzE1MipqdC5jaGFubmVsLnRvTGluZWFyKHIpKy4wNzIyKmp0LmNoYW5uZWwudG9MaW5lYXIobik7cmV0dXJuIGp0Lmxhbmcucm91bmQoaSl9LCJsdW1pbmFuY2UiKSxnJD1ieGV9KTt2YXIgd3hlLHYkLHgkPU4oKCk9PnsidXNlIHN0cmljdCI7eSQoKTt3eGU9byh0PT5nJCh0KT49LjUsImlzTGlnaHQiKSx2JD13eGV9KTt2YXIgVHhlLGNhLGIkPU4oKCk9PnsidXNlIHN0cmljdCI7eCQoKTtUeGU9byh0PT4hdiQodCksImlzRGFyayIpLGNhPVR4ZX0pO3ZhciBreGUsVzQsWUM9TigoKT0+eyJ1c2Ugc3RyaWN0IjtXbCgpO251KCk7a3hlPW8oKHQsZSxyKT0+e2xldCBuPU9pLnBhcnNlKHQpLGk9bltlXSxhPWp0LmNoYW5uZWwuY2xhbXBbZV0oaStyKTtyZXR1cm4gaSE9PWEmJihuW2VdPWEpLE9pLnN0cmluZ2lmeShuKX0sImFkanVzdENoYW5uZWwiKSxXND1reGV9KTt2YXIgRXhlLER0LHckPU4oKCk9PnsidXNlIHN0cmljdCI7WUMoKTtFeGU9bygodCxlKT0+VzQodCwibCIsZSksImxpZ2h0ZW4iKSxEdD1FeGV9KTt2YXIgU3hlLE90LFQkPU4oKCk9PnsidXNlIHN0cmljdCI7WUMoKTtTeGU9bygodCxlKT0+VzQodCwibCIsLWUpLCJkYXJrZW4iKSxPdD1TeGV9KTt2YXIgQ3hlLE1lLGskPU4oKCk9PnsidXNlIHN0cmljdCI7bnUoKTtXQygpO0N4ZT1vKCh0LGUpPT57bGV0IHI9T2kucGFyc2UodCksbj17fTtmb3IobGV0IGkgaW4gZSllW2ldJiYobltpXT1yW2ldK2VbaV0pO3JldHVybiBINCh0LG4pfSwiYWRqdXN0IiksTWU9Q3hlfSk7dmFyIEF4ZSxFJCxTJD1OKCgpPT57InVzZSBzdHJpY3QiO251KCk7cUMoKTtBeGU9bygodCxlLHI9NTApPT57bGV0e3I6bixnOmksYjphLGE6c309T2kucGFyc2UodCkse3I6bCxnOnUsYjpoLGE6Zn09T2kucGFyc2UoZSksZD1yLzEwMCxwPWQqMi0xLG09cy1mLHk9KChwKm09PT0tMT9wOihwK20pLygxK3AqbSkpKzEpLzIsdj0xLXkseD1uKnkrbCp2LGI9aSp5K3Uqdix3PWEqeStoKnYsQz1zKmQrZiooMS1kKTtyZXR1cm4gcWEoeCxiLHcsQyl9LCJtaXgiKSxFJD1BeGV9KTt2YXIgX3hlLHd0LEMkPU4oKCk9PnsidXNlIHN0cmljdCI7bnUoKTtTJCgpO194ZT1vKCh0LGU9MTAwKT0+e2xldCByPU9pLnBhcnNlKHQpO3JldHVybiByLnI9MjU1LXIucixyLmc9MjU1LXIuZyxyLmI9MjU1LXIuYixFJChyLHQsZSl9LCJpbnZlcnQiKSx3dD1feGV9KTt2YXIgQSQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtxQygpO20kKCk7YiQoKTt3JCgpO1QkKCk7ayQoKTtDJCgpfSk7dmFyIFlzPU4oKCk9PnsidXNlIHN0cmljdCI7QSQoKX0pO3ZhciBhaCxzaCxBeT1OKCgpPT57InVzZSBzdHJpY3QiO2FoPSIjZmZmZmZmIixzaD0iI2YyZjJmMiJ9KTt2YXIgVGksbzA9TigoKT0+eyJ1c2Ugc3RyaWN0IjtZcygpO1RpPW8oKHQsZSk9PmU/TWUodCx7czotNDAsbDoxMH0pOk1lKHQse3M6LTQwLGw6LTEwfSksIm1rQm9yZGVyIil9KTt2YXIgakMsXyQsRCQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtZcygpO0F5KCk7bzAoKTtqQz1jbGFzc3tzdGF0aWN7byh0aGlzLCJUaGVtZSIpfWNvbnN0cnVjdG9yKCl7dGhpcy5iYWNrZ3JvdW5kPSIjZjRmNGY0Iix0aGlzLnByaW1hcnlDb2xvcj0iI2ZmZjRkZCIsdGhpcy5ub3RlQmtnQ29sb3I9IiNmZmY1YWQiLHRoaXMubm90ZVRleHRDb2xvcj0iIzMzMyIsdGhpcy5USEVNRV9DT0xPUl9MSU1JVD0xMix0aGlzLmZvbnRGYW1pbHk9JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsdGhpcy5mb250U2l6ZT0iMTZweCJ9dXBkYXRlQ29sb3JzKCl7aWYodGhpcy5wcmltYXJ5VGV4dENvbG9yPXRoaXMucHJpbWFyeVRleHRDb2xvcnx8KHRoaXMuZGFya01vZGU/IiNlZWUiOiIjMzMzIiksdGhpcy5zZWNvbmRhcnlDb2xvcj10aGlzLnNlY29uZGFyeUNvbG9yfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDotMTIwfSksdGhpcy50ZXJ0aWFyeUNvbG9yPXRoaXMudGVydGlhcnlDb2xvcnx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTgwLGw6NX0pLHRoaXMucHJpbWFyeUJvcmRlckNvbG9yPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yfHxUaSh0aGlzLnByaW1hcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yPXRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3J8fFRpKHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yPXRoaXMudGVydGlhcnlCb3JkZXJDb2xvcnx8VGkodGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMubm90ZUJvcmRlckNvbG9yPXRoaXMubm90ZUJvcmRlckNvbG9yfHxUaSh0aGlzLm5vdGVCa2dDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLm5vdGVCa2dDb2xvcj10aGlzLm5vdGVCa2dDb2xvcnx8IiNmZmY1YWQiLHRoaXMubm90ZVRleHRDb2xvcj10aGlzLm5vdGVUZXh0Q29sb3J8fCIjMzMzIix0aGlzLnNlY29uZGFyeVRleHRDb2xvcj10aGlzLnNlY29uZGFyeVRleHRDb2xvcnx8d3QodGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy50ZXJ0aWFyeVRleHRDb2xvcj10aGlzLnRlcnRpYXJ5VGV4dENvbG9yfHx3dCh0aGlzLnRlcnRpYXJ5Q29sb3IpLHRoaXMubGluZUNvbG9yPXRoaXMubGluZUNvbG9yfHx3dCh0aGlzLmJhY2tncm91bmQpLHRoaXMuYXJyb3doZWFkQ29sb3I9dGhpcy5hcnJvd2hlYWRDb2xvcnx8d3QodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnRleHRDb2xvcj10aGlzLnRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuYm9yZGVyMj10aGlzLmJvcmRlcjJ8fHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcix0aGlzLm5vZGVCa2c9dGhpcy5ub2RlQmtnfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLm1haW5Ca2c9dGhpcy5tYWluQmtnfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLm5vZGVCb3JkZXI9dGhpcy5ub2RlQm9yZGVyfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLmNsdXN0ZXJCa2c9dGhpcy5jbHVzdGVyQmtnfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5jbHVzdGVyQm9yZGVyPXRoaXMuY2x1c3RlckJvcmRlcnx8dGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yLHRoaXMuZGVmYXVsdExpbmtDb2xvcj10aGlzLmRlZmF1bHRMaW5rQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMudGl0bGVDb2xvcj10aGlzLnRpdGxlQ29sb3J8fHRoaXMudGVydGlhcnlUZXh0Q29sb3IsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPXRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZHx8KHRoaXMuZGFya01vZGU/T3QodGhpcy5zZWNvbmRhcnlDb2xvciwzMCk6dGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy5ub2RlVGV4dENvbG9yPXRoaXMubm9kZVRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuYWN0b3JCb3JkZXI9dGhpcy5hY3RvckJvcmRlcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5hY3RvckJrZz10aGlzLmFjdG9yQmtnfHx0aGlzLm1haW5Ca2csdGhpcy5hY3RvclRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5hY3RvckxpbmVDb2xvcj10aGlzLmFjdG9yTGluZUNvbG9yfHx0aGlzLmFjdG9yQm9yZGVyLHRoaXMubGFiZWxCb3hCa2dDb2xvcj10aGlzLmxhYmVsQm94QmtnQ29sb3J8fHRoaXMuYWN0b3JCa2csdGhpcy5zaWduYWxDb2xvcj10aGlzLnNpZ25hbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnNpZ25hbFRleHRDb2xvcj10aGlzLnNpZ25hbFRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPXRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcnx8dGhpcy5hY3RvckJvcmRlcix0aGlzLmxhYmVsVGV4dENvbG9yPXRoaXMubGFiZWxUZXh0Q29sb3J8fHRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5sb29wVGV4dENvbG9yPXRoaXMubG9vcFRleHRDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj10aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcnx8T3QodGhpcy5zZWNvbmRhcnlDb2xvciwxMCksdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9dGhpcy5hY3RpdmF0aW9uQmtnQ29sb3J8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPXRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvcnx8d3QodGhpcy5saW5lQ29sb3IpLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPXRoaXMuc2VjdGlvbkJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3I9dGhpcy5hbHRTZWN0aW9uQmtnQ29sb3J8fCJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9dGhpcy5zZWN0aW9uQmtnQ29sb3J8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5zZWN0aW9uQmtnQ29sb3IyPXRoaXMuc2VjdGlvbkJrZ0NvbG9yMnx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5leGNsdWRlQmtnQ29sb3I9dGhpcy5leGNsdWRlQmtnQ29sb3J8fCIjZWVlZWVlIix0aGlzLnRhc2tCb3JkZXJDb2xvcj10aGlzLnRhc2tCb3JkZXJDb2xvcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy50YXNrQmtnQ29sb3I9dGhpcy50YXNrQmtnQ29sb3J8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPXRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj10aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcnx8RHQodGhpcy5wcmltYXJ5Q29sb3IsMjMpLHRoaXMuZ3JpZENvbG9yPXRoaXMuZ3JpZENvbG9yfHwibGlnaHRncmV5Iix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9dGhpcy5kb25lVGFza0JrZ0NvbG9yfHwibGlnaHRncmV5Iix0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9dGhpcy5kb25lVGFza0JvcmRlckNvbG9yfHwiZ3JleSIsdGhpcy5jcml0Qm9yZGVyQ29sb3I9dGhpcy5jcml0Qm9yZGVyQ29sb3J8fCIjZmY4ODg4Iix0aGlzLmNyaXRCa2dDb2xvcj10aGlzLmNyaXRCa2dDb2xvcnx8InJlZCIsdGhpcy50b2RheUxpbmVDb2xvcj10aGlzLnRvZGF5TGluZUNvbG9yfHwicmVkIix0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPXRoaXMudGFza1RleHRPdXRzaWRlQ29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMudGFza1RleHRMaWdodENvbG9yPXRoaXMudGFza1RleHRMaWdodENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy50YXNrVGV4dERhcmtDb2xvcj10aGlzLnRhc2tUZXh0RGFya0NvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3I9dGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yfHwiIzAwMzE2MyIsdGhpcy5wZXJzb25Cb3JkZXI9dGhpcy5wZXJzb25Cb3JkZXJ8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucGVyc29uQmtnPXRoaXMucGVyc29uQmtnfHx0aGlzLm1haW5Ca2csdGhpcy5kYXJrTW9kZT8odGhpcy5yb3dPZGQ9dGhpcy5yb3dPZGR8fE90KHRoaXMubWFpbkJrZyw1KXx8IiNmZmZmZmYiLHRoaXMucm93RXZlbj10aGlzLnJvd0V2ZW58fE90KHRoaXMubWFpbkJrZywxMCkpOih0aGlzLnJvd09kZD10aGlzLnJvd09kZHx8RHQodGhpcy5tYWluQmtnLDc1KXx8IiNmZmZmZmYiLHRoaXMucm93RXZlbj10aGlzLnJvd0V2ZW58fER0KHRoaXMubWFpbkJrZyw1KSksdGhpcy50cmFuc2l0aW9uQ29sb3I9dGhpcy50cmFuc2l0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3I9dGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5zdGF0ZUxhYmVsQ29sb3I9dGhpcy5zdGF0ZUxhYmVsQ29sb3J8fHRoaXMuc3RhdGVCa2d8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnN0YXRlQmtnPXRoaXMuc3RhdGVCa2d8fHRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yPXRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3J8fHRoaXMuc3RhdGVCa2csdGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlQmFja2dyb3VuZHx8dGhpcy5iYWNrZ3JvdW5kfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5hbHRCYWNrZ3JvdW5kPXRoaXMuYWx0QmFja2dyb3VuZHx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kfHx0aGlzLm1haW5Ca2csdGhpcy5jb21wb3NpdGVCb3JkZXI9dGhpcy5jb21wb3NpdGVCb3JkZXJ8fHRoaXMubm9kZUJvcmRlcix0aGlzLmlubmVyRW5kQmFja2dyb3VuZD10aGlzLm5vZGVCb3JkZXIsdGhpcy5lcnJvckJrZ0NvbG9yPXRoaXMuZXJyb3JCa2dDb2xvcnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZXJyb3JUZXh0Q29sb3I9dGhpcy5lcnJvclRleHRDb2xvcnx8dGhpcy50ZXJ0aWFyeVRleHRDb2xvcix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5zcGVjaWFsU3RhdGVDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLmNTY2FsZTA9dGhpcy5jU2NhbGUwfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmNTY2FsZTE9dGhpcy5jU2NhbGUxfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuY1NjYWxlMj10aGlzLmNTY2FsZTJ8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmNTY2FsZTM9dGhpcy5jU2NhbGUzfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDozMH0pLHRoaXMuY1NjYWxlND10aGlzLmNTY2FsZTR8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwfSksdGhpcy5jU2NhbGU1PXRoaXMuY1NjYWxlNXx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6OTB9KSx0aGlzLmNTY2FsZTY9dGhpcy5jU2NhbGU2fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjB9KSx0aGlzLmNTY2FsZTc9dGhpcy5jU2NhbGU3fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDoxNTB9KSx0aGlzLmNTY2FsZTg9dGhpcy5jU2NhbGU4fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDoyMTAsbDoxNTB9KSx0aGlzLmNTY2FsZTk9dGhpcy5jU2NhbGU5fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDoyNzB9KSx0aGlzLmNTY2FsZTEwPXRoaXMuY1NjYWxlMTB8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMwMH0pLHRoaXMuY1NjYWxlMTE9dGhpcy5jU2NhbGUxMXx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MzMwfSksdGhpcy5kYXJrTW9kZSlmb3IobGV0IHI9MDtyPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7cisrKXRoaXNbImNTY2FsZSIrcl09T3QodGhpc1siY1NjYWxlIityXSw3NSk7ZWxzZSBmb3IobGV0IHI9MDtyPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7cisrKXRoaXNbImNTY2FsZSIrcl09T3QodGhpc1siY1NjYWxlIityXSwyNSk7Zm9yKGxldCByPTA7cjx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO3IrKyl0aGlzWyJjU2NhbGVJbnYiK3JdPXRoaXNbImNTY2FsZUludiIrcl18fHd0KHRoaXNbImNTY2FsZSIrcl0pO2ZvcihsZXQgcj0wO3I8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtyKyspdGhpcy5kYXJrTW9kZT90aGlzWyJjU2NhbGVQZWVyIityXT10aGlzWyJjU2NhbGVQZWVyIityXXx8RHQodGhpc1siY1NjYWxlIityXSwxMCk6dGhpc1siY1NjYWxlUGVlciIrcl09dGhpc1siY1NjYWxlUGVlciIrcl18fE90KHRoaXNbImNTY2FsZSIrcl0sMTApO3RoaXMuc2NhbGVMYWJlbENvbG9yPXRoaXMuc2NhbGVMYWJlbENvbG9yfHx0aGlzLmxhYmVsVGV4dENvbG9yO2ZvcihsZXQgcj0wO3I8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtyKyspdGhpc1siY1NjYWxlTGFiZWwiK3JdPXRoaXNbImNTY2FsZUxhYmVsIityXXx8dGhpcy5zY2FsZUxhYmVsQ29sb3I7bGV0IGU9dGhpcy5kYXJrTW9kZT8tNDotMTtmb3IobGV0IHI9MDtyPDU7cisrKXRoaXNbInN1cmZhY2UiK3JdPXRoaXNbInN1cmZhY2UiK3JdfHxNZSh0aGlzLm1haW5Ca2cse2g6MTgwLHM6LTE1LGw6ZSooNStyKjMpfSksdGhpc1sic3VyZmFjZVBlZXIiK3JdPXRoaXNbInN1cmZhY2VQZWVyIityXXx8TWUodGhpcy5tYWluQmtnLHtoOjE4MCxzOi0xNSxsOmUqKDgrciozKX0pO3RoaXMuY2xhc3NUZXh0PXRoaXMuY2xhc3NUZXh0fHx0aGlzLnRleHRDb2xvcix0aGlzLmZpbGxUeXBlMD10aGlzLmZpbGxUeXBlMHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTE9dGhpcy5maWxsVHlwZTF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTI9dGhpcy5maWxsVHlwZTJ8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTM9dGhpcy5maWxsVHlwZTN8fE1lKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlND10aGlzLmZpbGxUeXBlNHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTU9dGhpcy5maWxsVHlwZTV8fE1lKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTY9dGhpcy5maWxsVHlwZTZ8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyOH0pLHRoaXMuZmlsbFR5cGU3PXRoaXMuZmlsbFR5cGU3fHxNZSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjEyOH0pLHRoaXMucGllMT10aGlzLnBpZTF8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucGllMj10aGlzLnBpZTJ8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5waWUzPXRoaXMucGllM3x8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMucGllND10aGlzLnBpZTR8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtsOi0xMH0pLHRoaXMucGllNT10aGlzLnBpZTV8fE1lKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2w6LTEwfSksdGhpcy5waWU2PXRoaXMucGllNnx8TWUodGhpcy50ZXJ0aWFyeUNvbG9yLHtsOi0xMH0pLHRoaXMucGllNz10aGlzLnBpZTd8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwLGw6LTEwfSksdGhpcy5waWU4PXRoaXMucGllOHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwLGw6LTEwfSksdGhpcy5waWU5PXRoaXMucGllOXx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwLGw6MH0pLHRoaXMucGllMTA9dGhpcy5waWUxMHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjAsbDotMjB9KSx0aGlzLnBpZTExPXRoaXMucGllMTF8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MCxsOi0yMH0pLHRoaXMucGllMTI9dGhpcy5waWUxMnx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwLGw6LTEwfSksdGhpcy5waWVUaXRsZVRleHRTaXplPXRoaXMucGllVGl0bGVUZXh0U2l6ZXx8IjI1cHgiLHRoaXMucGllVGl0bGVUZXh0Q29sb3I9dGhpcy5waWVUaXRsZVRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZT10aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllU2VjdGlvblRleHRDb2xvcj10aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMucGllTGVnZW5kVGV4dFNpemU9dGhpcy5waWVMZWdlbmRUZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllTGVnZW5kVGV4dENvbG9yPXRoaXMucGllTGVnZW5kVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU3Ryb2tlQ29sb3I9dGhpcy5waWVTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZVN0cm9rZVdpZHRoPXRoaXMucGllU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3V0ZXJTdHJva2VXaWR0aD10aGlzLnBpZU91dGVyU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3V0ZXJTdHJva2VDb2xvcj10aGlzLnBpZU91dGVyU3Ryb2tlQ29sb3J8fCJibGFjayIsdGhpcy5waWVPcGFjaXR5PXRoaXMucGllT3BhY2l0eXx8IjAuNyIsdGhpcy5yYWRhcj17YXhpc0NvbG9yOnRoaXMucmFkYXI/LmF4aXNDb2xvcnx8dGhpcy5saW5lQ29sb3IsYXhpc1N0cm9rZVdpZHRoOnRoaXMucmFkYXI/LmF4aXNTdHJva2VXaWR0aHx8MixheGlzTGFiZWxGb250U2l6ZTp0aGlzLnJhZGFyPy5heGlzTGFiZWxGb250U2l6ZXx8MTIsY3VydmVPcGFjaXR5OnRoaXMucmFkYXI/LmN1cnZlT3BhY2l0eXx8LjUsY3VydmVTdHJva2VXaWR0aDp0aGlzLnJhZGFyPy5jdXJ2ZVN0cm9rZVdpZHRofHwyLGdyYXRpY3VsZUNvbG9yOnRoaXMucmFkYXI/LmdyYXRpY3VsZUNvbG9yfHwiI0RFREVERSIsZ3JhdGljdWxlU3Ryb2tlV2lkdGg6dGhpcy5yYWRhcj8uZ3JhdGljdWxlU3Ryb2tlV2lkdGh8fDEsZ3JhdGljdWxlT3BhY2l0eTp0aGlzLnJhZGFyPy5ncmF0aWN1bGVPcGFjaXR5fHwuMyxsZWdlbmRCb3hTaXplOnRoaXMucmFkYXI/LmxlZ2VuZEJveFNpemV8fDEyLGxlZ2VuZEZvbnRTaXplOnRoaXMucmFkYXI/LmxlZ2VuZEZvbnRTaXplfHwxMn0sdGhpcy5hcmNoRWRnZUNvbG9yPXRoaXMuYXJjaEVkZ2VDb2xvcnx8IiM3NzciLHRoaXMuYXJjaEVkZ2VBcnJvd0NvbG9yPXRoaXMuYXJjaEVkZ2VBcnJvd0NvbG9yfHwiIzc3NyIsdGhpcy5hcmNoRWRnZVdpZHRoPXRoaXMuYXJjaEVkZ2VXaWR0aHx8IjMiLHRoaXMuYXJjaEdyb3VwQm9yZGVyQ29sb3I9dGhpcy5hcmNoR3JvdXBCb3JkZXJDb2xvcnx8IiMwMDAiLHRoaXMuYXJjaEdyb3VwQm9yZGVyV2lkdGg9dGhpcy5hcmNoR3JvdXBCb3JkZXJXaWR0aHx8IjJweCIsdGhpcy5xdWFkcmFudDFGaWxsPXRoaXMucXVhZHJhbnQxRmlsbHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5xdWFkcmFudDJGaWxsPXRoaXMucXVhZHJhbnQyRmlsbHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise3I6NSxnOjUsYjo1fSksdGhpcy5xdWFkcmFudDNGaWxsPXRoaXMucXVhZHJhbnQzRmlsbHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise3I6MTAsZzoxMCxiOjEwfSksdGhpcy5xdWFkcmFudDRGaWxsPXRoaXMucXVhZHJhbnQ0RmlsbHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise3I6MTUsZzoxNSxiOjE1fSksdGhpcy5xdWFkcmFudDFUZXh0RmlsbD10aGlzLnF1YWRyYW50MVRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudDJUZXh0RmlsbD10aGlzLnF1YWRyYW50MlRleHRGaWxsfHxNZSh0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTUsZzotNSxiOi01fSksdGhpcy5xdWFkcmFudDNUZXh0RmlsbD10aGlzLnF1YWRyYW50M1RleHRGaWxsfHxNZSh0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTEwLGc6LTEwLGI6LTEwfSksdGhpcy5xdWFkcmFudDRUZXh0RmlsbD10aGlzLnF1YWRyYW50NFRleHRGaWxsfHxNZSh0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTE1LGc6LTE1LGI6LTE1fSksdGhpcy5xdWFkcmFudFBvaW50RmlsbD10aGlzLnF1YWRyYW50UG9pbnRGaWxsfHxjYSh0aGlzLnF1YWRyYW50MUZpbGwpP0R0KHRoaXMucXVhZHJhbnQxRmlsbCk6T3QodGhpcy5xdWFkcmFudDFGaWxsKSx0aGlzLnF1YWRyYW50UG9pbnRUZXh0RmlsbD10aGlzLnF1YWRyYW50UG9pbnRUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRYQXhpc1RleHRGaWxsPXRoaXMucXVhZHJhbnRYQXhpc1RleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFlBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFlBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsPXRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGx8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudFRpdGxlRmlsbD10aGlzLnF1YWRyYW50VGl0bGVGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy54eUNoYXJ0PXtiYWNrZ3JvdW5kQ29sb3I6dGhpcy54eUNoYXJ0Py5iYWNrZ3JvdW5kQ29sb3J8fHRoaXMuYmFja2dyb3VuZCx0aXRsZUNvbG9yOnRoaXMueHlDaGFydD8udGl0bGVDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzVGl0bGVDb2xvcjp0aGlzLnh5Q2hhcnQ/LnhBeGlzVGl0bGVDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzTGFiZWxDb2xvcjp0aGlzLnh5Q2hhcnQ/LnhBeGlzTGFiZWxDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzVGlja0NvbG9yOnRoaXMueHlDaGFydD8ueEF4aXNUaWNrQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc0xpbmVDb2xvcjp0aGlzLnh5Q2hhcnQ/LnhBeGlzTGluZUNvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNUaXRsZUNvbG9yOnRoaXMueHlDaGFydD8ueUF4aXNUaXRsZUNvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNMYWJlbENvbG9yOnRoaXMueHlDaGFydD8ueUF4aXNMYWJlbENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNUaWNrQ29sb3I6dGhpcy54eUNoYXJ0Py55QXhpc1RpY2tDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzTGluZUNvbG9yOnRoaXMueHlDaGFydD8ueUF4aXNMaW5lQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcixwbG90Q29sb3JQYWxldHRlOnRoaXMueHlDaGFydD8ucGxvdENvbG9yUGFsZXR0ZXx8IiNGRkY0REQsI0ZGRDhCMSwjRkZBMDdBLCNFQ0VGRjEsI0Q2REJERiwjQzNFMEE4LCNGRkI2QTQsI0ZGRDc0RCwjNzM4RkE3LCNGRkZGRjAifSx0aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZD10aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemU9dGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemV8fCIxIix0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yPXRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlbGF0aW9uQ29sb3I9dGhpcy5yZWxhdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kPXRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmR8fCh0aGlzLmRhcmtNb2RlP090KHRoaXMuc2Vjb25kYXJ5Q29sb3IsMzApOnRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMucmVsYXRpb25MYWJlbENvbG9yPXRoaXMucmVsYXRpb25MYWJlbENvbG9yfHx0aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMuZ2l0MD10aGlzLmdpdDB8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZ2l0MT10aGlzLmdpdDF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5naXQyPXRoaXMuZ2l0Mnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZ2l0Mz10aGlzLmdpdDN8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOi0zMH0pLHRoaXMuZ2l0ND10aGlzLmdpdDR8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MH0pLHRoaXMuZ2l0NT10aGlzLmdpdDV8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOi05MH0pLHRoaXMuZ2l0Nj10aGlzLmdpdDZ8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwfSksdGhpcy5naXQ3PXRoaXMuZ2l0N3x8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwfSksdGhpcy5kYXJrTW9kZT8odGhpcy5naXQwPUR0KHRoaXMuZ2l0MCwyNSksdGhpcy5naXQxPUR0KHRoaXMuZ2l0MSwyNSksdGhpcy5naXQyPUR0KHRoaXMuZ2l0MiwyNSksdGhpcy5naXQzPUR0KHRoaXMuZ2l0MywyNSksdGhpcy5naXQ0PUR0KHRoaXMuZ2l0NCwyNSksdGhpcy5naXQ1PUR0KHRoaXMuZ2l0NSwyNSksdGhpcy5naXQ2PUR0KHRoaXMuZ2l0NiwyNSksdGhpcy5naXQ3PUR0KHRoaXMuZ2l0NywyNSkpOih0aGlzLmdpdDA9T3QodGhpcy5naXQwLDI1KSx0aGlzLmdpdDE9T3QodGhpcy5naXQxLDI1KSx0aGlzLmdpdDI9T3QodGhpcy5naXQyLDI1KSx0aGlzLmdpdDM9T3QodGhpcy5naXQzLDI1KSx0aGlzLmdpdDQ9T3QodGhpcy5naXQ0LDI1KSx0aGlzLmdpdDU9T3QodGhpcy5naXQ1LDI1KSx0aGlzLmdpdDY9T3QodGhpcy5naXQ2LDI1KSx0aGlzLmdpdDc9T3QodGhpcy5naXQ3LDI1KSksdGhpcy5naXRJbnYwPXRoaXMuZ2l0SW52MHx8d3QodGhpcy5naXQwKSx0aGlzLmdpdEludjE9dGhpcy5naXRJbnYxfHx3dCh0aGlzLmdpdDEpLHRoaXMuZ2l0SW52Mj10aGlzLmdpdEludjJ8fHd0KHRoaXMuZ2l0MiksdGhpcy5naXRJbnYzPXRoaXMuZ2l0SW52M3x8d3QodGhpcy5naXQzKSx0aGlzLmdpdEludjQ9dGhpcy5naXRJbnY0fHx3dCh0aGlzLmdpdDQpLHRoaXMuZ2l0SW52NT10aGlzLmdpdEludjV8fHd0KHRoaXMuZ2l0NSksdGhpcy5naXRJbnY2PXRoaXMuZ2l0SW52Nnx8d3QodGhpcy5naXQ2KSx0aGlzLmdpdEludjc9dGhpcy5naXRJbnY3fHx3dCh0aGlzLmdpdDcpLHRoaXMuYnJhbmNoTGFiZWxDb2xvcj10aGlzLmJyYW5jaExhYmVsQ29sb3J8fCh0aGlzLmRhcmtNb2RlPyJibGFjayI6dGhpcy5sYWJlbFRleHRDb2xvciksdGhpcy5naXRCcmFuY2hMYWJlbDA9dGhpcy5naXRCcmFuY2hMYWJlbDB8fHRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMT10aGlzLmdpdEJyYW5jaExhYmVsMXx8dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWwyPXRoaXMuZ2l0QnJhbmNoTGFiZWwyfHx0aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDM9dGhpcy5naXRCcmFuY2hMYWJlbDN8fHRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsND10aGlzLmdpdEJyYW5jaExhYmVsNHx8dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw1PXRoaXMuZ2l0QnJhbmNoTGFiZWw1fHx0aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDY9dGhpcy5naXRCcmFuY2hMYWJlbDZ8fHRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNz10aGlzLmdpdEJyYW5jaExhYmVsN3x8dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMudGFnTGFiZWxDb2xvcj10aGlzLnRhZ0xhYmVsQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnRhZ0xhYmVsQmFja2dyb3VuZD10aGlzLnRhZ0xhYmVsQmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy50YWdMYWJlbEJvcmRlcj10aGlzLnRhZ0JvcmRlcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy50YWdMYWJlbEZvbnRTaXplPXRoaXMudGFnTGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuY29tbWl0TGFiZWxDb2xvcj10aGlzLmNvbW1pdExhYmVsQ29sb3J8fHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yLHRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kPXRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuY29tbWl0TGFiZWxGb250U2l6ZT10aGlzLmNvbW1pdExhYmVsRm9udFNpemV8fCIxMHB4Iix0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZD10aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZHx8YWgsdGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVuPXRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbnx8c2h9Y2FsY3VsYXRlKGUpe2lmKHR5cGVvZiBlIT0ib2JqZWN0Iil7dGhpcy51cGRhdGVDb2xvcnMoKTtyZXR1cm59bGV0IHI9T2JqZWN0LmtleXMoZSk7ci5mb3JFYWNoKG49Pnt0aGlzW25dPWVbbl19KSx0aGlzLnVwZGF0ZUNvbG9ycygpLHIuZm9yRWFjaChuPT57dGhpc1tuXT1lW25dfSl9fSxfJD1vKHQ9PntsZXQgZT1uZXcgakM7cmV0dXJuIGUuY2FsY3VsYXRlKHQpLGV9LCJnZXRUaGVtZVZhcmlhYmxlcyIpfSk7dmFyIEtDLEwkLFIkPU4oKCk9PnsidXNlIHN0cmljdCI7WXMoKTtvMCgpO0tDPWNsYXNze3N0YXRpY3tvKHRoaXMsIlRoZW1lIil9Y29uc3RydWN0b3IoKXt0aGlzLmJhY2tncm91bmQ9IiMzMzMiLHRoaXMucHJpbWFyeUNvbG9yPSIjMWYyMDIwIix0aGlzLnNlY29uZGFyeUNvbG9yPUR0KHRoaXMucHJpbWFyeUNvbG9yLDE2KSx0aGlzLnRlcnRpYXJ5Q29sb3I9TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTE2MH0pLHRoaXMucHJpbWFyeUJvcmRlckNvbG9yPXd0KHRoaXMuYmFja2dyb3VuZCksdGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcj1UaSh0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcj1UaSh0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5wcmltYXJ5VGV4dENvbG9yPXd0KHRoaXMucHJpbWFyeUNvbG9yKSx0aGlzLnNlY29uZGFyeVRleHRDb2xvcj13dCh0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yPXd0KHRoaXMudGVydGlhcnlDb2xvciksdGhpcy5saW5lQ29sb3I9d3QodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnRleHRDb2xvcj13dCh0aGlzLmJhY2tncm91bmQpLHRoaXMubWFpbkJrZz0iIzFmMjAyMCIsdGhpcy5zZWNvbmRCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubWFpbkNvbnRyYXN0Q29sb3I9ImxpZ2h0Z3JleSIsdGhpcy5kYXJrVGV4dENvbG9yPUR0KHd0KCIjMzIzRDQ3IiksMTApLHRoaXMubGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmJvcmRlcjE9IiNjY2MiLHRoaXMuYm9yZGVyMj1xYSgyNTUsMjU1LDI1NSwuMjUpLHRoaXMuYXJyb3doZWFkQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZm9udEZhbWlseT0nInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyx0aGlzLmZvbnRTaXplPSIxNnB4Iix0aGlzLmxhYmVsQmFja2dyb3VuZD0iIzE4MTgxOCIsdGhpcy50ZXh0Q29sb3I9IiNjY2MiLHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ9MTIsdGhpcy5ub2RlQmtnPSJjYWxjdWxhdGVkIix0aGlzLm5vZGVCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGl0bGVDb2xvcj0iI0Y5RkZGRSIsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQmtnPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yTGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubG9vcFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJrZ0NvbG9yPSIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPSJibGFjayIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9T3QoIiNFQUU4RDkiLDMwKSx0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zZWN0aW9uQmtnQ29sb3IyPSIjRUFFOEQ5Iix0aGlzLmV4Y2x1ZGVCa2dDb2xvcj1PdCh0aGlzLnNlY3Rpb25Ca2dDb2xvciwxMCksdGhpcy50YXNrQm9yZGVyQ29sb3I9cWEoMjU1LDI1NSwyNTUsNzApLHRoaXMudGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRMaWdodENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3I9IiMwMDMxNjMiLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPXFhKDI1NSwyNTUsMjU1LDUwKSx0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj0iIzgxQjFEQiIsdGhpcy5ncmlkQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPSJncmV5Iix0aGlzLmNyaXRCb3JkZXJDb2xvcj0iI0U4MzczNyIsdGhpcy5jcml0QmtnQ29sb3I9IiNFODM3MzciLHRoaXMudGFza1RleHREYXJrQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudG9kYXlMaW5lQ29sb3I9IiNEQjU3NTciLHRoaXMucGVyc29uQm9yZGVyPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucGVyc29uQmtnPXRoaXMubWFpbkJrZyx0aGlzLmFyY2hFZGdlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYXJjaEVkZ2VBcnJvd0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFyY2hFZGdlV2lkdGg9IjMiLHRoaXMuYXJjaEdyb3VwQm9yZGVyQ29sb3I9dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5hcmNoR3JvdXBCb3JkZXJXaWR0aD0iMnB4Iix0aGlzLnJvd09kZD10aGlzLnJvd09kZHx8RHQodGhpcy5tYWluQmtnLDUpfHwiI2ZmZmZmZiIsdGhpcy5yb3dFdmVuPXRoaXMucm93RXZlbnx8T3QodGhpcy5tYWluQmtnLDEwKSx0aGlzLmxhYmVsQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZXJyb3JCa2dDb2xvcj0iI2E0NDE0MSIsdGhpcy5lcnJvclRleHRDb2xvcj0iI2RkZCJ9dXBkYXRlQ29sb3JzKCl7dGhpcy5zZWNvbmRCa2c9RHQodGhpcy5tYWluQmtnLDE2KSx0aGlzLmxpbmVDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMuYXJyb3doZWFkQ29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLm5vZGVCa2c9dGhpcy5tYWluQmtnLHRoaXMubm9kZUJvcmRlcj10aGlzLmJvcmRlcjEsdGhpcy5jbHVzdGVyQmtnPXRoaXMuc2Vjb25kQmtnLHRoaXMuY2x1c3RlckJvcmRlcj10aGlzLmJvcmRlcjIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZD1EdCh0aGlzLmxhYmVsQmFja2dyb3VuZCwyNSksdGhpcy5hY3RvckJvcmRlcj10aGlzLmJvcmRlcjEsdGhpcy5hY3RvckJrZz10aGlzLm1haW5Ca2csdGhpcy5hY3RvclRleHRDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMuYWN0b3JMaW5lQ29sb3I9dGhpcy5hY3RvckJvcmRlcix0aGlzLnNpZ25hbENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5zaWduYWxUZXh0Q29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLmxhYmVsQm94QmtnQ29sb3I9dGhpcy5hY3RvckJrZyx0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9dGhpcy5hY3RvckJvcmRlcix0aGlzLmxhYmVsVGV4dENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5sb29wVGV4dENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5ub3RlQm9yZGVyQ29sb3I9dGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcix0aGlzLm5vdGVCa2dDb2xvcj10aGlzLnNlY29uZEJrZyx0aGlzLm5vdGVUZXh0Q29sb3I9dGhpcy5zZWNvbmRhcnlUZXh0Q29sb3IsdGhpcy5hY3RpdmF0aW9uQm9yZGVyQ29sb3I9dGhpcy5ib3JkZXIxLHRoaXMuYWN0aXZhdGlvbkJrZ0NvbG9yPXRoaXMuc2Vjb25kQmtnLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPXRoaXMuYmFja2dyb3VuZCx0aGlzLnRhc2tCa2dDb2xvcj1EdCh0aGlzLm1haW5Ca2csMjMpLHRoaXMudGFza1RleHRDb2xvcj10aGlzLmRhcmtUZXh0Q29sb3IsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPXRoaXMudGFza1RleHRMaWdodENvbG9yLHRoaXMuZ3JpZENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5kb25lVGFza0JrZ0NvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy50YXNrVGV4dERhcmtDb2xvcj10aGlzLmRhcmtUZXh0Q29sb3IsdGhpcy5hcmNoRWRnZUNvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuYXJjaEVkZ2VBcnJvd0NvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yPXRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMuc3RhdGVMYWJlbENvbG9yPXRoaXMuc3RhdGVMYWJlbENvbG9yfHx0aGlzLnN0YXRlQmtnfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5zdGF0ZUJrZz10aGlzLnN0YXRlQmtnfHx0aGlzLm1haW5Ca2csdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcj10aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yfHx0aGlzLnN0YXRlQmtnLHRoaXMuY29tcG9zaXRlQmFja2dyb3VuZD10aGlzLmNvbXBvc2l0ZUJhY2tncm91bmR8fHRoaXMuYmFja2dyb3VuZHx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuYWx0QmFja2dyb3VuZD10aGlzLmFsdEJhY2tncm91bmR8fCIjNTU1Iix0aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZD10aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZHx8dGhpcy5tYWluQmtnLHRoaXMuY29tcG9zaXRlQm9yZGVyPXRoaXMuY29tcG9zaXRlQm9yZGVyfHx0aGlzLm5vZGVCb3JkZXIsdGhpcy5pbm5lckVuZEJhY2tncm91bmQ9dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5zcGVjaWFsU3RhdGVDb2xvcj0iI2Y0ZjRmNCIsdGhpcy5lcnJvckJrZ0NvbG9yPXRoaXMuZXJyb3JCa2dDb2xvcnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZXJyb3JUZXh0Q29sb3I9dGhpcy5lcnJvclRleHRDb2xvcnx8dGhpcy50ZXJ0aWFyeVRleHRDb2xvcix0aGlzLmZpbGxUeXBlMD10aGlzLnByaW1hcnlDb2xvcix0aGlzLmZpbGxUeXBlMT10aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZmlsbFR5cGUyPU1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTM9TWUodGhpcy5zZWNvbmRhcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGU0PU1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU1PU1lKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTY9TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5maWxsVHlwZTc9TWUodGhpcy5zZWNvbmRhcnlDb2xvcix7aDoxMjh9KSx0aGlzLmNTY2FsZTE9dGhpcy5jU2NhbGUxfHwiIzBiMDAwMCIsdGhpcy5jU2NhbGUyPXRoaXMuY1NjYWxlMnx8IiM0ZDEwMzciLHRoaXMuY1NjYWxlMz10aGlzLmNTY2FsZTN8fCIjM2Y1MjU4Iix0aGlzLmNTY2FsZTQ9dGhpcy5jU2NhbGU0fHwiIzRmMmYxYiIsdGhpcy5jU2NhbGU1PXRoaXMuY1NjYWxlNXx8IiM2ZTBhMGEiLHRoaXMuY1NjYWxlNj10aGlzLmNTY2FsZTZ8fCIjM2IwMDQ4Iix0aGlzLmNTY2FsZTc9dGhpcy5jU2NhbGU3fHwiIzk5NWEwMSIsdGhpcy5jU2NhbGU4PXRoaXMuY1NjYWxlOHx8IiMxNTQ3MDYiLHRoaXMuY1NjYWxlOT10aGlzLmNTY2FsZTl8fCIjMTYxNzIyIix0aGlzLmNTY2FsZTEwPXRoaXMuY1NjYWxlMTB8fCIjMDAyOTZmIix0aGlzLmNTY2FsZTExPXRoaXMuY1NjYWxlMTF8fCIjMDE2MjljIix0aGlzLmNTY2FsZTEyPXRoaXMuY1NjYWxlMTJ8fCIjMDEwMDI5Iix0aGlzLmNTY2FsZTA9dGhpcy5jU2NhbGUwfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmNTY2FsZTE9dGhpcy5jU2NhbGUxfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuY1NjYWxlMj10aGlzLmNTY2FsZTJ8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmNTY2FsZTM9dGhpcy5jU2NhbGUzfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDozMH0pLHRoaXMuY1NjYWxlND10aGlzLmNTY2FsZTR8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwfSksdGhpcy5jU2NhbGU1PXRoaXMuY1NjYWxlNXx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6OTB9KSx0aGlzLmNTY2FsZTY9dGhpcy5jU2NhbGU2fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjB9KSx0aGlzLmNTY2FsZTc9dGhpcy5jU2NhbGU3fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDoxNTB9KSx0aGlzLmNTY2FsZTg9dGhpcy5jU2NhbGU4fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDoyMTB9KSx0aGlzLmNTY2FsZTk9dGhpcy5jU2NhbGU5fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDoyNzB9KSx0aGlzLmNTY2FsZTEwPXRoaXMuY1NjYWxlMTB8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMwMH0pLHRoaXMuY1NjYWxlMTE9dGhpcy5jU2NhbGUxMXx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MzMwfSk7Zm9yKGxldCBlPTA7ZTx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO2UrKyl0aGlzWyJjU2NhbGVJbnYiK2VdPXRoaXNbImNTY2FsZUludiIrZV18fHd0KHRoaXNbImNTY2FsZSIrZV0pO2ZvcihsZXQgZT0wO2U8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtlKyspdGhpc1siY1NjYWxlUGVlciIrZV09dGhpc1siY1NjYWxlUGVlciIrZV18fER0KHRoaXNbImNTY2FsZSIrZV0sMTApO2ZvcihsZXQgZT0wO2U8NTtlKyspdGhpc1sic3VyZmFjZSIrZV09dGhpc1sic3VyZmFjZSIrZV18fE1lKHRoaXMubWFpbkJrZyx7aDozMCxzOi0zMCxsOi0oLTEwK2UqNCl9KSx0aGlzWyJzdXJmYWNlUGVlciIrZV09dGhpc1sic3VyZmFjZVBlZXIiK2VdfHxNZSh0aGlzLm1haW5Ca2cse2g6MzAsczotMzAsbDotKC03K2UqNCl9KTt0aGlzLnNjYWxlTGFiZWxDb2xvcj10aGlzLnNjYWxlTGFiZWxDb2xvcnx8KHRoaXMuZGFya01vZGU/ImJsYWNrIjp0aGlzLmxhYmVsVGV4dENvbG9yKTtmb3IobGV0IGU9MDtlPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7ZSsrKXRoaXNbImNTY2FsZUxhYmVsIitlXT10aGlzWyJjU2NhbGVMYWJlbCIrZV18fHRoaXMuc2NhbGVMYWJlbENvbG9yO2ZvcihsZXQgZT0wO2U8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtlKyspdGhpc1sicGllIitlXT10aGlzWyJjU2NhbGUiK2VdO3RoaXMucGllVGl0bGVUZXh0U2l6ZT10aGlzLnBpZVRpdGxlVGV4dFNpemV8fCIyNXB4Iix0aGlzLnBpZVRpdGxlVGV4dENvbG9yPXRoaXMucGllVGl0bGVUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTZWN0aW9uVGV4dFNpemU9dGhpcy5waWVTZWN0aW9uVGV4dFNpemV8fCIxN3B4Iix0aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3I9dGhpcy5waWVTZWN0aW9uVGV4dENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnBpZUxlZ2VuZFRleHRTaXplPXRoaXMucGllTGVnZW5kVGV4dFNpemV8fCIxN3B4Iix0aGlzLnBpZUxlZ2VuZFRleHRDb2xvcj10aGlzLnBpZUxlZ2VuZFRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVN0cm9rZUNvbG9yPXRoaXMucGllU3Ryb2tlQ29sb3J8fCJibGFjayIsdGhpcy5waWVTdHJva2VXaWR0aD10aGlzLnBpZVN0cm9rZVdpZHRofHwiMnB4Iix0aGlzLnBpZU91dGVyU3Ryb2tlV2lkdGg9dGhpcy5waWVPdXRlclN0cm9rZVdpZHRofHwiMnB4Iix0aGlzLnBpZU91dGVyU3Ryb2tlQ29sb3I9dGhpcy5waWVPdXRlclN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllT3BhY2l0eT10aGlzLnBpZU9wYWNpdHl8fCIwLjciLHRoaXMucXVhZHJhbnQxRmlsbD10aGlzLnF1YWRyYW50MUZpbGx8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucXVhZHJhbnQyRmlsbD10aGlzLnF1YWRyYW50MkZpbGx8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtyOjUsZzo1LGI6NX0pLHRoaXMucXVhZHJhbnQzRmlsbD10aGlzLnF1YWRyYW50M0ZpbGx8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtyOjEwLGc6MTAsYjoxMH0pLHRoaXMucXVhZHJhbnQ0RmlsbD10aGlzLnF1YWRyYW50NEZpbGx8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtyOjE1LGc6MTUsYjoxNX0pLHRoaXMucXVhZHJhbnQxVGV4dEZpbGw9dGhpcy5xdWFkcmFudDFUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnQyVGV4dEZpbGw9dGhpcy5xdWFkcmFudDJUZXh0RmlsbHx8TWUodGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi01LGc6LTUsYjotNX0pLHRoaXMucXVhZHJhbnQzVGV4dEZpbGw9dGhpcy5xdWFkcmFudDNUZXh0RmlsbHx8TWUodGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi0xMCxnOi0xMCxiOi0xMH0pLHRoaXMucXVhZHJhbnQ0VGV4dEZpbGw9dGhpcy5xdWFkcmFudDRUZXh0RmlsbHx8TWUodGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi0xNSxnOi0xNSxiOi0xNX0pLHRoaXMucXVhZHJhbnRQb2ludEZpbGw9dGhpcy5xdWFkcmFudFBvaW50RmlsbHx8Y2EodGhpcy5xdWFkcmFudDFGaWxsKT9EdCh0aGlzLnF1YWRyYW50MUZpbGwpOk90KHRoaXMucXVhZHJhbnQxRmlsbCksdGhpcy5xdWFkcmFudFBvaW50VGV4dEZpbGw9dGhpcy5xdWFkcmFudFBvaW50VGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50WEF4aXNUZXh0RmlsbD10aGlzLnF1YWRyYW50WEF4aXNUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRZQXhpc1RleHRGaWxsPXRoaXMucXVhZHJhbnRZQXhpc1RleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbD10aGlzLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsPXRoaXMucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGx8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucXVhZHJhbnRUaXRsZUZpbGw9dGhpcy5xdWFkcmFudFRpdGxlRmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMueHlDaGFydD17YmFja2dyb3VuZENvbG9yOnRoaXMueHlDaGFydD8uYmFja2dyb3VuZENvbG9yfHx0aGlzLmJhY2tncm91bmQsdGl0bGVDb2xvcjp0aGlzLnh5Q2hhcnQ/LnRpdGxlQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc1RpdGxlQ29sb3I6dGhpcy54eUNoYXJ0Py54QXhpc1RpdGxlQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc0xhYmVsQ29sb3I6dGhpcy54eUNoYXJ0Py54QXhpc0xhYmVsQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc1RpY2tDb2xvcjp0aGlzLnh5Q2hhcnQ/LnhBeGlzVGlja0NvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNMaW5lQ29sb3I6dGhpcy54eUNoYXJ0Py54QXhpc0xpbmVDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzVGl0bGVDb2xvcjp0aGlzLnh5Q2hhcnQ/LnlBeGlzVGl0bGVDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzTGFiZWxDb2xvcjp0aGlzLnh5Q2hhcnQ/LnlBeGlzTGFiZWxDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzVGlja0NvbG9yOnRoaXMueHlDaGFydD8ueUF4aXNUaWNrQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc0xpbmVDb2xvcjp0aGlzLnh5Q2hhcnQ/LnlBeGlzTGluZUNvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IscGxvdENvbG9yUGFsZXR0ZTp0aGlzLnh5Q2hhcnQ/LnBsb3RDb2xvclBhbGV0dGV8fCIjMzQ5OGRiLCMyZWNjNzEsI2U3NGMzYywjZjFjNDBmLCNiZGMzYzcsI2ZmZmZmZiwjMzQ0OTVlLCM5YjU5YjYsIzFhYmM5YywjZTY3ZTIyIn0sdGhpcy5wYWNrZXQ9e3N0YXJ0Qnl0ZUNvbG9yOnRoaXMucHJpbWFyeVRleHRDb2xvcixlbmRCeXRlQ29sb3I6dGhpcy5wcmltYXJ5VGV4dENvbG9yLGxhYmVsQ29sb3I6dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRpdGxlQ29sb3I6dGhpcy5wcmltYXJ5VGV4dENvbG9yLGJsb2NrU3Ryb2tlQ29sb3I6dGhpcy5wcmltYXJ5VGV4dENvbG9yLGJsb2NrRmlsbENvbG9yOnRoaXMuYmFja2dyb3VuZH0sdGhpcy5yYWRhcj17YXhpc0NvbG9yOnRoaXMucmFkYXI/LmF4aXNDb2xvcnx8dGhpcy5saW5lQ29sb3IsYXhpc1N0cm9rZVdpZHRoOnRoaXMucmFkYXI/LmF4aXNTdHJva2VXaWR0aHx8MixheGlzTGFiZWxGb250U2l6ZTp0aGlzLnJhZGFyPy5heGlzTGFiZWxGb250U2l6ZXx8MTIsY3VydmVPcGFjaXR5OnRoaXMucmFkYXI/LmN1cnZlT3BhY2l0eXx8LjUsY3VydmVTdHJva2VXaWR0aDp0aGlzLnJhZGFyPy5jdXJ2ZVN0cm9rZVdpZHRofHwyLGdyYXRpY3VsZUNvbG9yOnRoaXMucmFkYXI/LmdyYXRpY3VsZUNvbG9yfHwiI0RFREVERSIsZ3JhdGljdWxlU3Ryb2tlV2lkdGg6dGhpcy5yYWRhcj8uZ3JhdGljdWxlU3Ryb2tlV2lkdGh8fDEsZ3JhdGljdWxlT3BhY2l0eTp0aGlzLnJhZGFyPy5ncmF0aWN1bGVPcGFjaXR5fHwuMyxsZWdlbmRCb3hTaXplOnRoaXMucmFkYXI/LmxlZ2VuZEJveFNpemV8fDEyLGxlZ2VuZEZvbnRTaXplOnRoaXMucmFkYXI/LmxlZ2VuZEZvbnRTaXplfHwxMn0sdGhpcy5jbGFzc1RleHQ9dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kPXRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3I9dGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZT10aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZXx8IjEiLHRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3I9dGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucmVsYXRpb25Db2xvcj10aGlzLnJlbGF0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmQ9dGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZHx8KHRoaXMuZGFya01vZGU/T3QodGhpcy5zZWNvbmRhcnlDb2xvciwzMCk6dGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy5yZWxhdGlvbkxhYmVsQ29sb3I9dGhpcy5yZWxhdGlvbkxhYmVsQ29sb3J8fHRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5naXQwPUR0KHRoaXMuc2Vjb25kYXJ5Q29sb3IsMjApLHRoaXMuZ2l0MT1EdCh0aGlzLnBpZTJ8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsMjApLHRoaXMuZ2l0Mj1EdCh0aGlzLnBpZTN8fHRoaXMudGVydGlhcnlDb2xvciwyMCksdGhpcy5naXQzPUR0KHRoaXMucGllNHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTMwfSksMjApLHRoaXMuZ2l0ND1EdCh0aGlzLnBpZTV8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MH0pLDIwKSx0aGlzLmdpdDU9RHQodGhpcy5waWU2fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDotOTB9KSwxMCksdGhpcy5naXQ2PUR0KHRoaXMucGllN3x8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSwxMCksdGhpcy5naXQ3PUR0KHRoaXMucGllOHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwfSksMjApLHRoaXMuZ2l0SW52MD10aGlzLmdpdEludjB8fHd0KHRoaXMuZ2l0MCksdGhpcy5naXRJbnYxPXRoaXMuZ2l0SW52MXx8d3QodGhpcy5naXQxKSx0aGlzLmdpdEludjI9dGhpcy5naXRJbnYyfHx3dCh0aGlzLmdpdDIpLHRoaXMuZ2l0SW52Mz10aGlzLmdpdEludjN8fHd0KHRoaXMuZ2l0MyksdGhpcy5naXRJbnY0PXRoaXMuZ2l0SW52NHx8d3QodGhpcy5naXQ0KSx0aGlzLmdpdEludjU9dGhpcy5naXRJbnY1fHx3dCh0aGlzLmdpdDUpLHRoaXMuZ2l0SW52Nj10aGlzLmdpdEludjZ8fHd0KHRoaXMuZ2l0NiksdGhpcy5naXRJbnY3PXRoaXMuZ2l0SW52N3x8d3QodGhpcy5naXQ3KSx0aGlzLmdpdEJyYW5jaExhYmVsMD10aGlzLmdpdEJyYW5jaExhYmVsMHx8d3QodGhpcy5sYWJlbFRleHRDb2xvciksdGhpcy5naXRCcmFuY2hMYWJlbDE9dGhpcy5naXRCcmFuY2hMYWJlbDF8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDI9dGhpcy5naXRCcmFuY2hMYWJlbDJ8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDM9dGhpcy5naXRCcmFuY2hMYWJlbDN8fHd0KHRoaXMubGFiZWxUZXh0Q29sb3IpLHRoaXMuZ2l0QnJhbmNoTGFiZWw0PXRoaXMuZ2l0QnJhbmNoTGFiZWw0fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw1PXRoaXMuZ2l0QnJhbmNoTGFiZWw1fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw2PXRoaXMuZ2l0QnJhbmNoTGFiZWw2fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw3PXRoaXMuZ2l0QnJhbmNoTGFiZWw3fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMudGFnTGFiZWxDb2xvcj10aGlzLnRhZ0xhYmVsQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnRhZ0xhYmVsQmFja2dyb3VuZD10aGlzLnRhZ0xhYmVsQmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy50YWdMYWJlbEJvcmRlcj10aGlzLnRhZ0JvcmRlcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy50YWdMYWJlbEZvbnRTaXplPXRoaXMudGFnTGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuY29tbWl0TGFiZWxDb2xvcj10aGlzLmNvbW1pdExhYmVsQ29sb3J8fHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yLHRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kPXRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuY29tbWl0TGFiZWxGb250U2l6ZT10aGlzLmNvbW1pdExhYmVsRm9udFNpemV8fCIxMHB4Iix0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZD10aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZHx8RHQodGhpcy5iYWNrZ3JvdW5kLDEyKSx0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW49dGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVufHxEdCh0aGlzLmJhY2tncm91bmQsMiksdGhpcy5ub2RlQm9yZGVyPXRoaXMubm9kZUJvcmRlcnx8IiM5OTkifWNhbGN1bGF0ZShlKXtpZih0eXBlb2YgZSE9Im9iamVjdCIpe3RoaXMudXBkYXRlQ29sb3JzKCk7cmV0dXJufWxldCByPU9iamVjdC5rZXlzKGUpO3IuZm9yRWFjaChuPT57dGhpc1tuXT1lW25dfSksdGhpcy51cGRhdGVDb2xvcnMoKSxyLmZvckVhY2gobj0+e3RoaXNbbl09ZVtuXX0pfX0sTCQ9byh0PT57bGV0IGU9bmV3IEtDO3JldHVybiBlLmNhbGN1bGF0ZSh0KSxlfSwiZ2V0VGhlbWVWYXJpYWJsZXMiKX0pO3ZhciBRQyxvaCxfeT1OKCgpPT57InVzZSBzdHJpY3QiO1lzKCk7bzAoKTtBeSgpO1FDPWNsYXNze3N0YXRpY3tvKHRoaXMsIlRoZW1lIil9Y29uc3RydWN0b3IoKXt0aGlzLmJhY2tncm91bmQ9IiNmNGY0ZjQiLHRoaXMucHJpbWFyeUNvbG9yPSIjRUNFQ0ZGIix0aGlzLnNlY29uZGFyeUNvbG9yPU1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuc2Vjb25kYXJ5Q29sb3I9IiNmZmZmZGUiLHRoaXMudGVydGlhcnlDb2xvcj1NZSh0aGlzLnByaW1hcnlDb2xvcix7aDotMTYwfSksdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I9VGkodGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcj1UaSh0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcj1UaSh0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5wcmltYXJ5VGV4dENvbG9yPXd0KHRoaXMucHJpbWFyeUNvbG9yKSx0aGlzLnNlY29uZGFyeVRleHRDb2xvcj13dCh0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yPXd0KHRoaXMudGVydGlhcnlDb2xvciksdGhpcy5saW5lQ29sb3I9d3QodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnRleHRDb2xvcj13dCh0aGlzLmJhY2tncm91bmQpLHRoaXMuYmFja2dyb3VuZD0id2hpdGUiLHRoaXMubWFpbkJrZz0iI0VDRUNGRiIsdGhpcy5zZWNvbmRCa2c9IiNmZmZmZGUiLHRoaXMubGluZUNvbG9yPSIjMzMzMzMzIix0aGlzLmJvcmRlcjE9IiM5MzcwREIiLHRoaXMuYm9yZGVyMj0iI2FhYWEzMyIsdGhpcy5hcnJvd2hlYWRDb2xvcj0iIzMzMzMzMyIsdGhpcy5mb250RmFtaWx5PScidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLHRoaXMuZm9udFNpemU9IjE2cHgiLHRoaXMubGFiZWxCYWNrZ3JvdW5kPSJyZ2JhKDIzMiwyMzIsMjMyLCAwLjgpIix0aGlzLnRleHRDb2xvcj0iIzMzMyIsdGhpcy5USEVNRV9DT0xPUl9MSU1JVD0xMix0aGlzLm5vZGVCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubm9kZUJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQmtnPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuZGVmYXVsdExpbmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50aXRsZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JUZXh0Q29sb3I9ImJsYWNrIix0aGlzLmFjdG9yTGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubG9vcFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJrZ0NvbG9yPSIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPSIjNjY2Iix0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj0iI2Y0ZjRmNCIsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9ImNhbGN1bGF0ZWQiLHRoaXMuZXhjbHVkZUJrZ0NvbG9yPSIjZWVlZWVlIix0aGlzLnRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRMaWdodENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3IsdGhpcy50YXNrVGV4dERhcmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj10aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmdyaWRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5kb25lVGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuY3JpdEJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmNyaXRCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50b2RheUxpbmVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9cWEoMTAyLDEwMiwyNTUsLjQ5KSx0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj0iI2ZmZjQwMCIsdGhpcy50YXNrQm9yZGVyQ29sb3I9IiM1MzRmYmMiLHRoaXMudGFza0JrZ0NvbG9yPSIjOGE5MGRkIix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj0id2hpdGUiLHRoaXMudGFza1RleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dERhcmtDb2xvcj0iYmxhY2siLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcj0iIzAwMzE2MyIsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9IiM1MzRmYmMiLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPSIjYmZjN2ZmIix0aGlzLmdyaWRDb2xvcj0ibGlnaHRncmV5Iix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPSJncmV5Iix0aGlzLmNyaXRCb3JkZXJDb2xvcj0iI2ZmODg4OCIsdGhpcy5jcml0QmtnQ29sb3I9InJlZCIsdGhpcy50b2RheUxpbmVDb2xvcj0icmVkIix0aGlzLnBlcnNvbkJvcmRlcj10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnBlcnNvbkJrZz10aGlzLm1haW5Ca2csdGhpcy5hcmNoRWRnZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFyY2hFZGdlQXJyb3dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hcmNoRWRnZVdpZHRoPSIzIix0aGlzLmFyY2hHcm91cEJvcmRlckNvbG9yPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuYXJjaEdyb3VwQm9yZGVyV2lkdGg9IjJweCIsdGhpcy5yb3dPZGQ9ImNhbGN1bGF0ZWQiLHRoaXMucm93RXZlbj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbENvbG9yPSJibGFjayIsdGhpcy5lcnJvckJrZ0NvbG9yPSIjNTUyMjIyIix0aGlzLmVycm9yVGV4dENvbG9yPSIjNTUyMjIyIix0aGlzLnVwZGF0ZUNvbG9ycygpfXVwZGF0ZUNvbG9ycygpe3RoaXMuY1NjYWxlMD10aGlzLmNTY2FsZTB8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuY1NjYWxlMT10aGlzLmNTY2FsZTF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jU2NhbGUyPXRoaXMuY1NjYWxlMnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuY1NjYWxlMz10aGlzLmNTY2FsZTN8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMwfSksdGhpcy5jU2NhbGU0PXRoaXMuY1NjYWxlNHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSx0aGlzLmNTY2FsZTU9dGhpcy5jU2NhbGU1fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDo5MH0pLHRoaXMuY1NjYWxlNj10aGlzLmNTY2FsZTZ8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuY1NjYWxlNz10aGlzLmNTY2FsZTd8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjE1MH0pLHRoaXMuY1NjYWxlOD10aGlzLmNTY2FsZTh8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjIxMH0pLHRoaXMuY1NjYWxlOT10aGlzLmNTY2FsZTl8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjI3MH0pLHRoaXMuY1NjYWxlMTA9dGhpcy5jU2NhbGUxMHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MzAwfSksdGhpcy5jU2NhbGUxMT10aGlzLmNTY2FsZTExfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDozMzB9KSx0aGlzLmNTY2FsZVBlZXIxPXRoaXMuY1NjYWxlUGVlcjF8fE90KHRoaXMuc2Vjb25kYXJ5Q29sb3IsNDUpLHRoaXMuY1NjYWxlUGVlcjI9dGhpcy5jU2NhbGVQZWVyMnx8T3QodGhpcy50ZXJ0aWFyeUNvbG9yLDQwKTtmb3IobGV0IGU9MDtlPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7ZSsrKXRoaXNbImNTY2FsZSIrZV09T3QodGhpc1siY1NjYWxlIitlXSwxMCksdGhpc1siY1NjYWxlUGVlciIrZV09dGhpc1siY1NjYWxlUGVlciIrZV18fE90KHRoaXNbImNTY2FsZSIrZV0sMjUpO2ZvcihsZXQgZT0wO2U8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtlKyspdGhpc1siY1NjYWxlSW52IitlXT10aGlzWyJjU2NhbGVJbnYiK2VdfHxNZSh0aGlzWyJjU2NhbGUiK2VdLHtoOjE4MH0pO2ZvcihsZXQgZT0wO2U8NTtlKyspdGhpc1sic3VyZmFjZSIrZV09dGhpc1sic3VyZmFjZSIrZV18fE1lKHRoaXMubWFpbkJrZyx7aDozMCxsOi0oNStlKjUpfSksdGhpc1sic3VyZmFjZVBlZXIiK2VdPXRoaXNbInN1cmZhY2VQZWVyIitlXXx8TWUodGhpcy5tYWluQmtnLHtoOjMwLGw6LSg3K2UqNSl9KTtpZih0aGlzLnNjYWxlTGFiZWxDb2xvcj10aGlzLnNjYWxlTGFiZWxDb2xvciE9PSJjYWxjdWxhdGVkIiYmdGhpcy5zY2FsZUxhYmVsQ29sb3I/dGhpcy5zY2FsZUxhYmVsQ29sb3I6dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmxhYmVsVGV4dENvbG9yIT09ImNhbGN1bGF0ZWQiKXt0aGlzLmNTY2FsZUxhYmVsMD10aGlzLmNTY2FsZUxhYmVsMHx8d3QodGhpcy5sYWJlbFRleHRDb2xvciksdGhpcy5jU2NhbGVMYWJlbDM9dGhpcy5jU2NhbGVMYWJlbDN8fHd0KHRoaXMubGFiZWxUZXh0Q29sb3IpO2ZvcihsZXQgZT0wO2U8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtlKyspdGhpc1siY1NjYWxlTGFiZWwiK2VdPXRoaXNbImNTY2FsZUxhYmVsIitlXXx8dGhpcy5sYWJlbFRleHRDb2xvcn10aGlzLm5vZGVCa2c9dGhpcy5tYWluQmtnLHRoaXMubm9kZUJvcmRlcj10aGlzLmJvcmRlcjEsdGhpcy5jbHVzdGVyQmtnPXRoaXMuc2Vjb25kQmtnLHRoaXMuY2x1c3RlckJvcmRlcj10aGlzLmJvcmRlcjIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMudGl0bGVDb2xvcj10aGlzLnRleHRDb2xvcix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9dGhpcy5sYWJlbEJhY2tncm91bmQsdGhpcy5hY3RvckJvcmRlcj1EdCh0aGlzLmJvcmRlcjEsMjMpLHRoaXMuYWN0b3JCa2c9dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCb3hCa2dDb2xvcj10aGlzLmFjdG9yQmtnLHRoaXMuc2lnbmFsQ29sb3I9dGhpcy50ZXh0Q29sb3IsdGhpcy5zaWduYWxUZXh0Q29sb3I9dGhpcy50ZXh0Q29sb3IsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPXRoaXMuYWN0b3JCb3JkZXIsdGhpcy5sYWJlbFRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMubG9vcFRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMubm90ZUJvcmRlckNvbG9yPXRoaXMuYm9yZGVyMix0aGlzLm5vdGVUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmFjdG9yTGluZUNvbG9yPXRoaXMuYWN0b3JCb3JkZXIsdGhpcy50YXNrVGV4dENvbG9yPXRoaXMudGFza1RleHRMaWdodENvbG9yLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLmFyY2hFZGdlQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy5hcmNoRWRnZUFycm93Q29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy5yb3dPZGQ9dGhpcy5yb3dPZGR8fER0KHRoaXMucHJpbWFyeUNvbG9yLDc1KXx8IiNmZmZmZmYiLHRoaXMucm93RXZlbj10aGlzLnJvd0V2ZW58fER0KHRoaXMucHJpbWFyeUNvbG9yLDEpLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yPXRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMuc3RhdGVMYWJlbENvbG9yPXRoaXMuc3RhdGVMYWJlbENvbG9yfHx0aGlzLnN0YXRlQmtnfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5zdGF0ZUJrZz10aGlzLnN0YXRlQmtnfHx0aGlzLm1haW5Ca2csdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcj10aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yfHx0aGlzLnN0YXRlQmtnLHRoaXMuY29tcG9zaXRlQmFja2dyb3VuZD10aGlzLmNvbXBvc2l0ZUJhY2tncm91bmR8fHRoaXMuYmFja2dyb3VuZHx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuYWx0QmFja2dyb3VuZD10aGlzLmFsdEJhY2tncm91bmR8fCIjZjBmMGYwIix0aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZD10aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZHx8dGhpcy5tYWluQmtnLHRoaXMuY29tcG9zaXRlQm9yZGVyPXRoaXMuY29tcG9zaXRlQm9yZGVyfHx0aGlzLm5vZGVCb3JkZXIsdGhpcy5pbm5lckVuZEJhY2tncm91bmQ9dGhpcy5ub2RlQm9yZGVyLHRoaXMuc3BlY2lhbFN0YXRlQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy5lcnJvckJrZ0NvbG9yPXRoaXMuZXJyb3JCa2dDb2xvcnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZXJyb3JUZXh0Q29sb3I9dGhpcy5lcnJvclRleHRDb2xvcnx8dGhpcy50ZXJ0aWFyeVRleHRDb2xvcix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5jbGFzc1RleHQ9dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuZmlsbFR5cGUwPXRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZmlsbFR5cGUxPXRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTI9TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlMz1NZSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTQ9TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTU9TWUodGhpcy5zZWNvbmRhcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNj1NZSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjh9KSx0aGlzLmZpbGxUeXBlNz1NZSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjEyOH0pLHRoaXMucGllMT10aGlzLnBpZTF8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucGllMj10aGlzLnBpZTJ8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5waWUzPXRoaXMucGllM3x8TWUodGhpcy50ZXJ0aWFyeUNvbG9yLHtsOi00MH0pLHRoaXMucGllND10aGlzLnBpZTR8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtsOi0xMH0pLHRoaXMucGllNT10aGlzLnBpZTV8fE1lKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2w6LTMwfSksdGhpcy5waWU2PXRoaXMucGllNnx8TWUodGhpcy50ZXJ0aWFyeUNvbG9yLHtsOi0yMH0pLHRoaXMucGllNz10aGlzLnBpZTd8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwLGw6LTIwfSksdGhpcy5waWU4PXRoaXMucGllOHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwLGw6LTQwfSksdGhpcy5waWU5PXRoaXMucGllOXx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwLGw6LTQwfSksdGhpcy5waWUxMD10aGlzLnBpZTEwfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDo2MCxsOi00MH0pLHRoaXMucGllMTE9dGhpcy5waWUxMXx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTkwLGw6LTQwfSksdGhpcy5waWUxMj10aGlzLnBpZTEyfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDotMzB9KSx0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZVdpZHRoPXRoaXMucGllT3V0ZXJTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZUNvbG9yPXRoaXMucGllT3V0ZXJTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZU9wYWNpdHk9dGhpcy5waWVPcGFjaXR5fHwiMC43Iix0aGlzLnF1YWRyYW50MUZpbGw9dGhpcy5xdWFkcmFudDFGaWxsfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnF1YWRyYW50MkZpbGw9dGhpcy5xdWFkcmFudDJGaWxsfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7cjo1LGc6NSxiOjV9KSx0aGlzLnF1YWRyYW50M0ZpbGw9dGhpcy5xdWFkcmFudDNGaWxsfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7cjoxMCxnOjEwLGI6MTB9KSx0aGlzLnF1YWRyYW50NEZpbGw9dGhpcy5xdWFkcmFudDRGaWxsfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7cjoxNSxnOjE1LGI6MTV9KSx0aGlzLnF1YWRyYW50MVRleHRGaWxsPXRoaXMucXVhZHJhbnQxVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50MlRleHRGaWxsPXRoaXMucXVhZHJhbnQyVGV4dEZpbGx8fE1lKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotNSxnOi01LGI6LTV9KSx0aGlzLnF1YWRyYW50M1RleHRGaWxsPXRoaXMucXVhZHJhbnQzVGV4dEZpbGx8fE1lKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTAsZzotMTAsYjotMTB9KSx0aGlzLnF1YWRyYW50NFRleHRGaWxsPXRoaXMucXVhZHJhbnQ0VGV4dEZpbGx8fE1lKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTUsZzotMTUsYjotMTV9KSx0aGlzLnF1YWRyYW50UG9pbnRGaWxsPXRoaXMucXVhZHJhbnRQb2ludEZpbGx8fGNhKHRoaXMucXVhZHJhbnQxRmlsbCk/RHQodGhpcy5xdWFkcmFudDFGaWxsKTpPdCh0aGlzLnF1YWRyYW50MUZpbGwpLHRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsPXRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbD10aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbD10aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnF1YWRyYW50VGl0bGVGaWxsPXRoaXMucXVhZHJhbnRUaXRsZUZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJhZGFyPXtheGlzQ29sb3I6dGhpcy5yYWRhcj8uYXhpc0NvbG9yfHx0aGlzLmxpbmVDb2xvcixheGlzU3Ryb2tlV2lkdGg6dGhpcy5yYWRhcj8uYXhpc1N0cm9rZVdpZHRofHwyLGF4aXNMYWJlbEZvbnRTaXplOnRoaXMucmFkYXI/LmF4aXNMYWJlbEZvbnRTaXplfHwxMixjdXJ2ZU9wYWNpdHk6dGhpcy5yYWRhcj8uY3VydmVPcGFjaXR5fHwuNSxjdXJ2ZVN0cm9rZVdpZHRoOnRoaXMucmFkYXI/LmN1cnZlU3Ryb2tlV2lkdGh8fDIsZ3JhdGljdWxlQ29sb3I6dGhpcy5yYWRhcj8uZ3JhdGljdWxlQ29sb3J8fCIjREVERURFIixncmF0aWN1bGVTdHJva2VXaWR0aDp0aGlzLnJhZGFyPy5ncmF0aWN1bGVTdHJva2VXaWR0aHx8MSxncmF0aWN1bGVPcGFjaXR5OnRoaXMucmFkYXI/LmdyYXRpY3VsZU9wYWNpdHl8fC4zLGxlZ2VuZEJveFNpemU6dGhpcy5yYWRhcj8ubGVnZW5kQm94U2l6ZXx8MTIsbGVnZW5kRm9udFNpemU6dGhpcy5yYWRhcj8ubGVnZW5kRm9udFNpemV8fDEyfSx0aGlzLnh5Q2hhcnQ9e2JhY2tncm91bmRDb2xvcjp0aGlzLnh5Q2hhcnQ/LmJhY2tncm91bmRDb2xvcnx8dGhpcy5iYWNrZ3JvdW5kLHRpdGxlQ29sb3I6dGhpcy54eUNoYXJ0Py50aXRsZUNvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNUaXRsZUNvbG9yOnRoaXMueHlDaGFydD8ueEF4aXNUaXRsZUNvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNMYWJlbENvbG9yOnRoaXMueHlDaGFydD8ueEF4aXNMYWJlbENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNUaWNrQ29sb3I6dGhpcy54eUNoYXJ0Py54QXhpc1RpY2tDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzTGluZUNvbG9yOnRoaXMueHlDaGFydD8ueEF4aXNMaW5lQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc1RpdGxlQ29sb3I6dGhpcy54eUNoYXJ0Py55QXhpc1RpdGxlQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc0xhYmVsQ29sb3I6dGhpcy54eUNoYXJ0Py55QXhpc0xhYmVsQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc1RpY2tDb2xvcjp0aGlzLnh5Q2hhcnQ/LnlBeGlzVGlja0NvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNMaW5lQ29sb3I6dGhpcy54eUNoYXJ0Py55QXhpc0xpbmVDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHBsb3RDb2xvclBhbGV0dGU6dGhpcy54eUNoYXJ0Py5wbG90Q29sb3JQYWxldHRlfHwiI0VDRUNGRiwjODQ5M0E2LCNGRkMzQTAsI0RDRERFMSwjQjhFOTk0LCNEMUEzNkYsI0MzQ0RFNiwjRkZCNkMxLCM0OTYwNzgsI0Y4RjNFMyJ9LHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kPXRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3I9dGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZT10aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZXx8IjEiLHRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3I9dGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucmVsYXRpb25Db2xvcj10aGlzLnJlbGF0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmQ9dGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZHx8dGhpcy5sYWJlbEJhY2tncm91bmQsdGhpcy5yZWxhdGlvbkxhYmVsQ29sb3I9dGhpcy5yZWxhdGlvbkxhYmVsQ29sb3J8fHRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5naXQwPXRoaXMuZ2l0MHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5naXQxPXRoaXMuZ2l0MXx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmdpdDI9dGhpcy5naXQyfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5naXQzPXRoaXMuZ2l0M3x8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTMwfSksdGhpcy5naXQ0PXRoaXMuZ2l0NHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwfSksdGhpcy5naXQ1PXRoaXMuZ2l0NXx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTkwfSksdGhpcy5naXQ2PXRoaXMuZ2l0Nnx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSx0aGlzLmdpdDc9dGhpcy5naXQ3fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjB9KSx0aGlzLmRhcmtNb2RlPyh0aGlzLmdpdDA9RHQodGhpcy5naXQwLDI1KSx0aGlzLmdpdDE9RHQodGhpcy5naXQxLDI1KSx0aGlzLmdpdDI9RHQodGhpcy5naXQyLDI1KSx0aGlzLmdpdDM9RHQodGhpcy5naXQzLDI1KSx0aGlzLmdpdDQ9RHQodGhpcy5naXQ0LDI1KSx0aGlzLmdpdDU9RHQodGhpcy5naXQ1LDI1KSx0aGlzLmdpdDY9RHQodGhpcy5naXQ2LDI1KSx0aGlzLmdpdDc9RHQodGhpcy5naXQ3LDI1KSk6KHRoaXMuZ2l0MD1PdCh0aGlzLmdpdDAsMjUpLHRoaXMuZ2l0MT1PdCh0aGlzLmdpdDEsMjUpLHRoaXMuZ2l0Mj1PdCh0aGlzLmdpdDIsMjUpLHRoaXMuZ2l0Mz1PdCh0aGlzLmdpdDMsMjUpLHRoaXMuZ2l0ND1PdCh0aGlzLmdpdDQsMjUpLHRoaXMuZ2l0NT1PdCh0aGlzLmdpdDUsMjUpLHRoaXMuZ2l0Nj1PdCh0aGlzLmdpdDYsMjUpLHRoaXMuZ2l0Nz1PdCh0aGlzLmdpdDcsMjUpKSx0aGlzLmdpdEludjA9dGhpcy5naXRJbnYwfHxPdCh3dCh0aGlzLmdpdDApLDI1KSx0aGlzLmdpdEludjE9dGhpcy5naXRJbnYxfHx3dCh0aGlzLmdpdDEpLHRoaXMuZ2l0SW52Mj10aGlzLmdpdEludjJ8fHd0KHRoaXMuZ2l0MiksdGhpcy5naXRJbnYzPXRoaXMuZ2l0SW52M3x8d3QodGhpcy5naXQzKSx0aGlzLmdpdEludjQ9dGhpcy5naXRJbnY0fHx3dCh0aGlzLmdpdDQpLHRoaXMuZ2l0SW52NT10aGlzLmdpdEludjV8fHd0KHRoaXMuZ2l0NSksdGhpcy5naXRJbnY2PXRoaXMuZ2l0SW52Nnx8d3QodGhpcy5naXQ2KSx0aGlzLmdpdEludjc9dGhpcy5naXRJbnY3fHx3dCh0aGlzLmdpdDcpLHRoaXMuZ2l0QnJhbmNoTGFiZWwwPXRoaXMuZ2l0QnJhbmNoTGFiZWwwfHx3dCh0aGlzLmxhYmVsVGV4dENvbG9yKSx0aGlzLmdpdEJyYW5jaExhYmVsMT10aGlzLmdpdEJyYW5jaExhYmVsMXx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMj10aGlzLmdpdEJyYW5jaExhYmVsMnx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMz10aGlzLmdpdEJyYW5jaExhYmVsM3x8d3QodGhpcy5sYWJlbFRleHRDb2xvciksdGhpcy5naXRCcmFuY2hMYWJlbDQ9dGhpcy5naXRCcmFuY2hMYWJlbDR8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDU9dGhpcy5naXRCcmFuY2hMYWJlbDV8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDY9dGhpcy5naXRCcmFuY2hMYWJlbDZ8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDc9dGhpcy5naXRCcmFuY2hMYWJlbDd8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy50YWdMYWJlbENvbG9yPXRoaXMudGFnTGFiZWxDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kPXRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnRhZ0xhYmVsQm9yZGVyPXRoaXMudGFnQm9yZGVyfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnRhZ0xhYmVsRm9udFNpemU9dGhpcy50YWdMYWJlbEZvbnRTaXplfHwiMTBweCIsdGhpcy5jb21taXRMYWJlbENvbG9yPXRoaXMuY29tbWl0TGFiZWxDb2xvcnx8dGhpcy5zZWNvbmRhcnlUZXh0Q29sb3IsdGhpcy5jb21taXRMYWJlbEJhY2tncm91bmQ9dGhpcy5jb21taXRMYWJlbEJhY2tncm91bmR8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jb21taXRMYWJlbEZvbnRTaXplPXRoaXMuY29tbWl0TGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkPXRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkfHxhaCx0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW49dGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVufHxzaH1jYWxjdWxhdGUoZSl7aWYoT2JqZWN0LmtleXModGhpcykuZm9yRWFjaChuPT57dGhpc1tuXT09PSJjYWxjdWxhdGVkIiYmKHRoaXNbbl09dm9pZCAwKX0pLHR5cGVvZiBlIT0ib2JqZWN0Iil7dGhpcy51cGRhdGVDb2xvcnMoKTtyZXR1cm59bGV0IHI9T2JqZWN0LmtleXMoZSk7ci5mb3JFYWNoKG49Pnt0aGlzW25dPWVbbl19KSx0aGlzLnVwZGF0ZUNvbG9ycygpLHIuZm9yRWFjaChuPT57dGhpc1tuXT1lW25dfSl9fSxvaD1vKHQ9PntsZXQgZT1uZXcgUUM7cmV0dXJuIGUuY2FsY3VsYXRlKHQpLGV9LCJnZXRUaGVtZVZhcmlhYmxlcyIpfSk7dmFyIFpDLE4kLE0kPU4oKCk9PnsidXNlIHN0cmljdCI7WXMoKTtBeSgpO28wKCk7WkM9Y2xhc3N7c3RhdGlje28odGhpcywiVGhlbWUiKX1jb25zdHJ1Y3Rvcigpe3RoaXMuYmFja2dyb3VuZD0iI2Y0ZjRmNCIsdGhpcy5wcmltYXJ5Q29sb3I9IiNjZGU0OTgiLHRoaXMuc2Vjb25kYXJ5Q29sb3I9IiNjZGZmYjIiLHRoaXMuYmFja2dyb3VuZD0id2hpdGUiLHRoaXMubWFpbkJrZz0iI2NkZTQ5OCIsdGhpcy5zZWNvbmRCa2c9IiNjZGZmYjIiLHRoaXMubGluZUNvbG9yPSJncmVlbiIsdGhpcy5ib3JkZXIxPSIjMTM1NDBjIix0aGlzLmJvcmRlcjI9IiM2ZWFhNDkiLHRoaXMuYXJyb3doZWFkQ29sb3I9ImdyZWVuIix0aGlzLmZvbnRGYW1pbHk9JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsdGhpcy5mb250U2l6ZT0iMTZweCIsdGhpcy50ZXJ0aWFyeUNvbG9yPUR0KCIjY2RlNDk4IiwxMCksdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I9VGkodGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcj1UaSh0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcj1UaSh0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5wcmltYXJ5VGV4dENvbG9yPXd0KHRoaXMucHJpbWFyeUNvbG9yKSx0aGlzLnNlY29uZGFyeVRleHRDb2xvcj13dCh0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yPXd0KHRoaXMucHJpbWFyeUNvbG9yKSx0aGlzLmxpbmVDb2xvcj13dCh0aGlzLmJhY2tncm91bmQpLHRoaXMudGV4dENvbG9yPXd0KHRoaXMuYmFja2dyb3VuZCksdGhpcy5USEVNRV9DT0xPUl9MSU1JVD0xMix0aGlzLm5vZGVCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubm9kZUJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQmtnPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuZGVmYXVsdExpbmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50aXRsZUNvbG9yPSIjMzMzIix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9IiNlOGU4ZTgiLHRoaXMuYWN0b3JCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JUZXh0Q29sb3I9ImJsYWNrIix0aGlzLmFjdG9yTGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbENvbG9yPSIjMzMzIix0aGlzLnNpZ25hbFRleHRDb2xvcj0iIzMzMyIsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9IiMzMjY5MzIiLHRoaXMubGFiZWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubG9vcFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJrZ0NvbG9yPSIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPSIjNjY2Iix0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj0iI2Y0ZjRmNCIsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9IiM2ZWFhNDkiLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3IyPSIjNmVhYTQ5Iix0aGlzLmV4Y2x1ZGVCa2dDb2xvcj0iI2VlZWVlZSIsdGhpcy50YXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza0JrZ0NvbG9yPSIjNDg3ZTNhIix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj0id2hpdGUiLHRoaXMudGFza1RleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dERhcmtDb2xvcj0iYmxhY2siLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcj0iIzAwMzE2MyIsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmdyaWRDb2xvcj0ibGlnaHRncmV5Iix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPSJncmV5Iix0aGlzLmNyaXRCb3JkZXJDb2xvcj0iI2ZmODg4OCIsdGhpcy5jcml0QmtnQ29sb3I9InJlZCIsdGhpcy50b2RheUxpbmVDb2xvcj0icmVkIix0aGlzLnBlcnNvbkJvcmRlcj10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnBlcnNvbkJrZz10aGlzLm1haW5Ca2csdGhpcy5hcmNoRWRnZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFyY2hFZGdlQXJyb3dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hcmNoRWRnZVdpZHRoPSIzIix0aGlzLmFyY2hHcm91cEJvcmRlckNvbG9yPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuYXJjaEdyb3VwQm9yZGVyV2lkdGg9IjJweCIsdGhpcy5sYWJlbENvbG9yPSJibGFjayIsdGhpcy5lcnJvckJrZ0NvbG9yPSIjNTUyMjIyIix0aGlzLmVycm9yVGV4dENvbG9yPSIjNTUyMjIyIn11cGRhdGVDb2xvcnMoKXt0aGlzLmFjdG9yQm9yZGVyPU90KHRoaXMubWFpbkJrZywyMCksdGhpcy5hY3RvckJrZz10aGlzLm1haW5Ca2csdGhpcy5sYWJlbEJveEJrZ0NvbG9yPXRoaXMuYWN0b3JCa2csdGhpcy5sYWJlbFRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMubG9vcFRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMubm90ZUJvcmRlckNvbG9yPXRoaXMuYm9yZGVyMix0aGlzLm5vdGVUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmFjdG9yTGluZUNvbG9yPXRoaXMuYWN0b3JCb3JkZXIsdGhpcy5jU2NhbGUwPXRoaXMuY1NjYWxlMHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5jU2NhbGUxPXRoaXMuY1NjYWxlMXx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmNTY2FsZTI9dGhpcy5jU2NhbGUyfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5jU2NhbGUzPXRoaXMuY1NjYWxlM3x8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MzB9KSx0aGlzLmNTY2FsZTQ9dGhpcy5jU2NhbGU0fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDo2MH0pLHRoaXMuY1NjYWxlNT10aGlzLmNTY2FsZTV8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjkwfSksdGhpcy5jU2NhbGU2PXRoaXMuY1NjYWxlNnx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwfSksdGhpcy5jU2NhbGU3PXRoaXMuY1NjYWxlN3x8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTUwfSksdGhpcy5jU2NhbGU4PXRoaXMuY1NjYWxlOHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MjEwfSksdGhpcy5jU2NhbGU5PXRoaXMuY1NjYWxlOXx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MjcwfSksdGhpcy5jU2NhbGUxMD10aGlzLmNTY2FsZTEwfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDozMDB9KSx0aGlzLmNTY2FsZTExPXRoaXMuY1NjYWxlMTF8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMzMH0pLHRoaXMuY1NjYWxlUGVlcjE9dGhpcy5jU2NhbGVQZWVyMXx8T3QodGhpcy5zZWNvbmRhcnlDb2xvciw0NSksdGhpcy5jU2NhbGVQZWVyMj10aGlzLmNTY2FsZVBlZXIyfHxPdCh0aGlzLnRlcnRpYXJ5Q29sb3IsNDApO2ZvcihsZXQgZT0wO2U8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtlKyspdGhpc1siY1NjYWxlIitlXT1PdCh0aGlzWyJjU2NhbGUiK2VdLDEwKSx0aGlzWyJjU2NhbGVQZWVyIitlXT10aGlzWyJjU2NhbGVQZWVyIitlXXx8T3QodGhpc1siY1NjYWxlIitlXSwyNSk7Zm9yKGxldCBlPTA7ZTx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO2UrKyl0aGlzWyJjU2NhbGVJbnYiK2VdPXRoaXNbImNTY2FsZUludiIrZV18fE1lKHRoaXNbImNTY2FsZSIrZV0se2g6MTgwfSk7dGhpcy5zY2FsZUxhYmVsQ29sb3I9dGhpcy5zY2FsZUxhYmVsQ29sb3IhPT0iY2FsY3VsYXRlZCImJnRoaXMuc2NhbGVMYWJlbENvbG9yP3RoaXMuc2NhbGVMYWJlbENvbG9yOnRoaXMubGFiZWxUZXh0Q29sb3I7Zm9yKGxldCBlPTA7ZTx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO2UrKyl0aGlzWyJjU2NhbGVMYWJlbCIrZV09dGhpc1siY1NjYWxlTGFiZWwiK2VdfHx0aGlzLnNjYWxlTGFiZWxDb2xvcjtmb3IobGV0IGU9MDtlPDU7ZSsrKXRoaXNbInN1cmZhY2UiK2VdPXRoaXNbInN1cmZhY2UiK2VdfHxNZSh0aGlzLm1haW5Ca2cse2g6MzAsczotMzAsbDotKDUrZSo1KX0pLHRoaXNbInN1cmZhY2VQZWVyIitlXT10aGlzWyJzdXJmYWNlUGVlciIrZV18fE1lKHRoaXMubWFpbkJrZyx7aDozMCxzOi0zMCxsOi0oOCtlKjUpfSk7dGhpcy5ub2RlQmtnPXRoaXMubWFpbkJrZyx0aGlzLm5vZGVCb3JkZXI9dGhpcy5ib3JkZXIxLHRoaXMuY2x1c3RlckJrZz10aGlzLnNlY29uZEJrZyx0aGlzLmNsdXN0ZXJCb3JkZXI9dGhpcy5ib3JkZXIyLHRoaXMuZGVmYXVsdExpbmtDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLnRhc2tCb3JkZXJDb2xvcj10aGlzLmJvcmRlcjEsdGhpcy50YXNrVGV4dENvbG9yPXRoaXMudGFza1RleHRMaWdodENvbG9yLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj10aGlzLnRhc2tCb3JkZXJDb2xvcix0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj10aGlzLm1haW5Ca2csdGhpcy5hcmNoRWRnZUNvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuYXJjaEVkZ2VBcnJvd0NvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMucm93T2RkPXRoaXMucm93T2RkfHxEdCh0aGlzLm1haW5Ca2csNzUpfHwiI2ZmZmZmZiIsdGhpcy5yb3dFdmVuPXRoaXMucm93RXZlbnx8RHQodGhpcy5tYWluQmtnLDIwKSx0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHwiI2YwZjBmMCIsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLmNvbXBvc2l0ZUJvcmRlcj10aGlzLmNvbXBvc2l0ZUJvcmRlcnx8dGhpcy5ub2RlQm9yZGVyLHRoaXMuaW5uZXJFbmRCYWNrZ3JvdW5kPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuc3BlY2lhbFN0YXRlQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy5lcnJvckJrZ0NvbG9yPXRoaXMuZXJyb3JCa2dDb2xvcnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZXJyb3JUZXh0Q29sb3I9dGhpcy5lcnJvclRleHRDb2xvcnx8dGhpcy50ZXJ0aWFyeVRleHRDb2xvcix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5jbGFzc1RleHQ9dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuZmlsbFR5cGUwPXRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZmlsbFR5cGUxPXRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTI9TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlMz1NZSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTQ9TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTU9TWUodGhpcy5zZWNvbmRhcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNj1NZSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjh9KSx0aGlzLmZpbGxUeXBlNz1NZSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjEyOH0pLHRoaXMucGllMT10aGlzLnBpZTF8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucGllMj10aGlzLnBpZTJ8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5waWUzPXRoaXMucGllM3x8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMucGllND10aGlzLnBpZTR8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtsOi0zMH0pLHRoaXMucGllNT10aGlzLnBpZTV8fE1lKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2w6LTMwfSksdGhpcy5waWU2PXRoaXMucGllNnx8TWUodGhpcy50ZXJ0aWFyeUNvbG9yLHtoOjQwLGw6LTQwfSksdGhpcy5waWU3PXRoaXMucGllN3x8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjAsbDotMTB9KSx0aGlzLnBpZTg9dGhpcy5waWU4fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjAsbDotMTB9KSx0aGlzLnBpZTk9dGhpcy5waWU5fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDowfSksdGhpcy5waWUxMD10aGlzLnBpZTEwfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDo2MCxsOi01MH0pLHRoaXMucGllMTE9dGhpcy5waWUxMXx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwLGw6LTUwfSksdGhpcy5waWUxMj10aGlzLnBpZTEyfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDotNTB9KSx0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZVdpZHRoPXRoaXMucGllT3V0ZXJTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZUNvbG9yPXRoaXMucGllT3V0ZXJTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZU9wYWNpdHk9dGhpcy5waWVPcGFjaXR5fHwiMC43Iix0aGlzLnF1YWRyYW50MUZpbGw9dGhpcy5xdWFkcmFudDFGaWxsfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnF1YWRyYW50MkZpbGw9dGhpcy5xdWFkcmFudDJGaWxsfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7cjo1LGc6NSxiOjV9KSx0aGlzLnF1YWRyYW50M0ZpbGw9dGhpcy5xdWFkcmFudDNGaWxsfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7cjoxMCxnOjEwLGI6MTB9KSx0aGlzLnF1YWRyYW50NEZpbGw9dGhpcy5xdWFkcmFudDRGaWxsfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7cjoxNSxnOjE1LGI6MTV9KSx0aGlzLnF1YWRyYW50MVRleHRGaWxsPXRoaXMucXVhZHJhbnQxVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50MlRleHRGaWxsPXRoaXMucXVhZHJhbnQyVGV4dEZpbGx8fE1lKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotNSxnOi01LGI6LTV9KSx0aGlzLnF1YWRyYW50M1RleHRGaWxsPXRoaXMucXVhZHJhbnQzVGV4dEZpbGx8fE1lKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTAsZzotMTAsYjotMTB9KSx0aGlzLnF1YWRyYW50NFRleHRGaWxsPXRoaXMucXVhZHJhbnQ0VGV4dEZpbGx8fE1lKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTUsZzotMTUsYjotMTV9KSx0aGlzLnF1YWRyYW50UG9pbnRGaWxsPXRoaXMucXVhZHJhbnRQb2ludEZpbGx8fGNhKHRoaXMucXVhZHJhbnQxRmlsbCk/RHQodGhpcy5xdWFkcmFudDFGaWxsKTpPdCh0aGlzLnF1YWRyYW50MUZpbGwpLHRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsPXRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbD10aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbD10aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnF1YWRyYW50VGl0bGVGaWxsPXRoaXMucXVhZHJhbnRUaXRsZUZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnBhY2tldD17c3RhcnRCeXRlQ29sb3I6dGhpcy5wcmltYXJ5VGV4dENvbG9yLGVuZEJ5dGVDb2xvcjp0aGlzLnByaW1hcnlUZXh0Q29sb3IsbGFiZWxDb2xvcjp0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGl0bGVDb2xvcjp0aGlzLnByaW1hcnlUZXh0Q29sb3IsYmxvY2tTdHJva2VDb2xvcjp0aGlzLnByaW1hcnlUZXh0Q29sb3IsYmxvY2tGaWxsQ29sb3I6dGhpcy5tYWluQmtnfSx0aGlzLnJhZGFyPXtheGlzQ29sb3I6dGhpcy5yYWRhcj8uYXhpc0NvbG9yfHx0aGlzLmxpbmVDb2xvcixheGlzU3Ryb2tlV2lkdGg6dGhpcy5yYWRhcj8uYXhpc1N0cm9rZVdpZHRofHwyLGF4aXNMYWJlbEZvbnRTaXplOnRoaXMucmFkYXI/LmF4aXNMYWJlbEZvbnRTaXplfHwxMixjdXJ2ZU9wYWNpdHk6dGhpcy5yYWRhcj8uY3VydmVPcGFjaXR5fHwuNSxjdXJ2ZVN0cm9rZVdpZHRoOnRoaXMucmFkYXI/LmN1cnZlU3Ryb2tlV2lkdGh8fDIsZ3JhdGljdWxlQ29sb3I6dGhpcy5yYWRhcj8uZ3JhdGljdWxlQ29sb3J8fCIjREVERURFIixncmF0aWN1bGVTdHJva2VXaWR0aDp0aGlzLnJhZGFyPy5ncmF0aWN1bGVTdHJva2VXaWR0aHx8MSxncmF0aWN1bGVPcGFjaXR5OnRoaXMucmFkYXI/LmdyYXRpY3VsZU9wYWNpdHl8fC4zLGxlZ2VuZEJveFNpemU6dGhpcy5yYWRhcj8ubGVnZW5kQm94U2l6ZXx8MTIsbGVnZW5kRm9udFNpemU6dGhpcy5yYWRhcj8ubGVnZW5kRm9udFNpemV8fDEyfSx0aGlzLnh5Q2hhcnQ9e2JhY2tncm91bmRDb2xvcjp0aGlzLnh5Q2hhcnQ/LmJhY2tncm91bmRDb2xvcnx8dGhpcy5iYWNrZ3JvdW5kLHRpdGxlQ29sb3I6dGhpcy54eUNoYXJ0Py50aXRsZUNvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNUaXRsZUNvbG9yOnRoaXMueHlDaGFydD8ueEF4aXNUaXRsZUNvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNMYWJlbENvbG9yOnRoaXMueHlDaGFydD8ueEF4aXNMYWJlbENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNUaWNrQ29sb3I6dGhpcy54eUNoYXJ0Py54QXhpc1RpY2tDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzTGluZUNvbG9yOnRoaXMueHlDaGFydD8ueEF4aXNMaW5lQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc1RpdGxlQ29sb3I6dGhpcy54eUNoYXJ0Py55QXhpc1RpdGxlQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc0xhYmVsQ29sb3I6dGhpcy54eUNoYXJ0Py55QXhpc0xhYmVsQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc1RpY2tDb2xvcjp0aGlzLnh5Q2hhcnQ/LnlBeGlzVGlja0NvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNMaW5lQ29sb3I6dGhpcy54eUNoYXJ0Py55QXhpc0xpbmVDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHBsb3RDb2xvclBhbGV0dGU6dGhpcy54eUNoYXJ0Py5wbG90Q29sb3JQYWxldHRlfHwiI0NERTQ5OCwjRkY2QjZCLCNBMEQyREIsI0Q3QkRFMiwjRjBGMEYwLCNGRkMzQTAsIzdGRDhCRSwjRkY5QThCLCNGQUYzRTAsI0ZGRjE3NiJ9LHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kPXRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3I9dGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZT10aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZXx8IjEiLHRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3I9dGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucmVsYXRpb25Db2xvcj10aGlzLnJlbGF0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmQ9dGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZHx8dGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kLHRoaXMucmVsYXRpb25MYWJlbENvbG9yPXRoaXMucmVsYXRpb25MYWJlbENvbG9yfHx0aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMuZ2l0MD10aGlzLmdpdDB8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZ2l0MT10aGlzLmdpdDF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5naXQyPXRoaXMuZ2l0Mnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZ2l0Mz10aGlzLmdpdDN8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOi0zMH0pLHRoaXMuZ2l0ND10aGlzLmdpdDR8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MH0pLHRoaXMuZ2l0NT10aGlzLmdpdDV8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOi05MH0pLHRoaXMuZ2l0Nj10aGlzLmdpdDZ8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwfSksdGhpcy5naXQ3PXRoaXMuZ2l0N3x8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwfSksdGhpcy5kYXJrTW9kZT8odGhpcy5naXQwPUR0KHRoaXMuZ2l0MCwyNSksdGhpcy5naXQxPUR0KHRoaXMuZ2l0MSwyNSksdGhpcy5naXQyPUR0KHRoaXMuZ2l0MiwyNSksdGhpcy5naXQzPUR0KHRoaXMuZ2l0MywyNSksdGhpcy5naXQ0PUR0KHRoaXMuZ2l0NCwyNSksdGhpcy5naXQ1PUR0KHRoaXMuZ2l0NSwyNSksdGhpcy5naXQ2PUR0KHRoaXMuZ2l0NiwyNSksdGhpcy5naXQ3PUR0KHRoaXMuZ2l0NywyNSkpOih0aGlzLmdpdDA9T3QodGhpcy5naXQwLDI1KSx0aGlzLmdpdDE9T3QodGhpcy5naXQxLDI1KSx0aGlzLmdpdDI9T3QodGhpcy5naXQyLDI1KSx0aGlzLmdpdDM9T3QodGhpcy5naXQzLDI1KSx0aGlzLmdpdDQ9T3QodGhpcy5naXQ0LDI1KSx0aGlzLmdpdDU9T3QodGhpcy5naXQ1LDI1KSx0aGlzLmdpdDY9T3QodGhpcy5naXQ2LDI1KSx0aGlzLmdpdDc9T3QodGhpcy5naXQ3LDI1KSksdGhpcy5naXRJbnYwPXRoaXMuZ2l0SW52MHx8d3QodGhpcy5naXQwKSx0aGlzLmdpdEludjE9dGhpcy5naXRJbnYxfHx3dCh0aGlzLmdpdDEpLHRoaXMuZ2l0SW52Mj10aGlzLmdpdEludjJ8fHd0KHRoaXMuZ2l0MiksdGhpcy5naXRJbnYzPXRoaXMuZ2l0SW52M3x8d3QodGhpcy5naXQzKSx0aGlzLmdpdEludjQ9dGhpcy5naXRJbnY0fHx3dCh0aGlzLmdpdDQpLHRoaXMuZ2l0SW52NT10aGlzLmdpdEludjV8fHd0KHRoaXMuZ2l0NSksdGhpcy5naXRJbnY2PXRoaXMuZ2l0SW52Nnx8d3QodGhpcy5naXQ2KSx0aGlzLmdpdEludjc9dGhpcy5naXRJbnY3fHx3dCh0aGlzLmdpdDcpLHRoaXMuZ2l0QnJhbmNoTGFiZWwwPXRoaXMuZ2l0QnJhbmNoTGFiZWwwfHx3dCh0aGlzLmxhYmVsVGV4dENvbG9yKSx0aGlzLmdpdEJyYW5jaExhYmVsMT10aGlzLmdpdEJyYW5jaExhYmVsMXx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMj10aGlzLmdpdEJyYW5jaExhYmVsMnx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMz10aGlzLmdpdEJyYW5jaExhYmVsM3x8d3QodGhpcy5sYWJlbFRleHRDb2xvciksdGhpcy5naXRCcmFuY2hMYWJlbDQ9dGhpcy5naXRCcmFuY2hMYWJlbDR8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDU9dGhpcy5naXRCcmFuY2hMYWJlbDV8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDY9dGhpcy5naXRCcmFuY2hMYWJlbDZ8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDc9dGhpcy5naXRCcmFuY2hMYWJlbDd8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy50YWdMYWJlbENvbG9yPXRoaXMudGFnTGFiZWxDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kPXRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnRhZ0xhYmVsQm9yZGVyPXRoaXMudGFnQm9yZGVyfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnRhZ0xhYmVsRm9udFNpemU9dGhpcy50YWdMYWJlbEZvbnRTaXplfHwiMTBweCIsdGhpcy5jb21taXRMYWJlbENvbG9yPXRoaXMuY29tbWl0TGFiZWxDb2xvcnx8dGhpcy5zZWNvbmRhcnlUZXh0Q29sb3IsdGhpcy5jb21taXRMYWJlbEJhY2tncm91bmQ9dGhpcy5jb21taXRMYWJlbEJhY2tncm91bmR8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jb21taXRMYWJlbEZvbnRTaXplPXRoaXMuY29tbWl0TGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkPXRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkfHxhaCx0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW49dGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVufHxzaH1jYWxjdWxhdGUoZSl7aWYodHlwZW9mIGUhPSJvYmplY3QiKXt0aGlzLnVwZGF0ZUNvbG9ycygpO3JldHVybn1sZXQgcj1PYmplY3Qua2V5cyhlKTtyLmZvckVhY2gobj0+e3RoaXNbbl09ZVtuXX0pLHRoaXMudXBkYXRlQ29sb3JzKCksci5mb3JFYWNoKG49Pnt0aGlzW25dPWVbbl19KX19LE4kPW8odD0+e2xldCBlPW5ldyBaQztyZXR1cm4gZS5jYWxjdWxhdGUodCksZX0sImdldFRoZW1lVmFyaWFibGVzIil9KTt2YXIgSkMsSSQsTyQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtZcygpO28wKCk7QXkoKTtKQz1jbGFzc3tzdGF0aWN7byh0aGlzLCJUaGVtZSIpfWNvbnN0cnVjdG9yKCl7dGhpcy5wcmltYXJ5Q29sb3I9IiNlZWUiLHRoaXMuY29udHJhc3Q9IiM3MDcwNzAiLHRoaXMuc2Vjb25kYXJ5Q29sb3I9RHQodGhpcy5jb250cmFzdCw1NSksdGhpcy5iYWNrZ3JvdW5kPSIjZmZmZmZmIix0aGlzLnRlcnRpYXJ5Q29sb3I9TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTE2MH0pLHRoaXMucHJpbWFyeUJvcmRlckNvbG9yPVRpKHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3I9VGkodGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3I9VGkodGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMucHJpbWFyeVRleHRDb2xvcj13dCh0aGlzLnByaW1hcnlDb2xvciksdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I9d3QodGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy50ZXJ0aWFyeVRleHRDb2xvcj13dCh0aGlzLnRlcnRpYXJ5Q29sb3IpLHRoaXMubGluZUNvbG9yPXd0KHRoaXMuYmFja2dyb3VuZCksdGhpcy50ZXh0Q29sb3I9d3QodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLm1haW5Ca2c9IiNlZWUiLHRoaXMuc2Vjb25kQmtnPSJjYWxjdWxhdGVkIix0aGlzLmxpbmVDb2xvcj0iIzY2NiIsdGhpcy5ib3JkZXIxPSIjOTk5Iix0aGlzLmJvcmRlcjI9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZT0iI2ZmYSIsdGhpcy50ZXh0PSIjMzMzIix0aGlzLmNyaXRpY2FsPSIjZDQyIix0aGlzLmRvbmU9IiNiYmIiLHRoaXMuYXJyb3doZWFkQ29sb3I9IiMzMzMzMzMiLHRoaXMuZm9udEZhbWlseT0nInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyx0aGlzLmZvbnRTaXplPSIxNnB4Iix0aGlzLlRIRU1FX0NPTE9SX0xJTUlUPTEyLHRoaXMubm9kZUJrZz0iY2FsY3VsYXRlZCIsdGhpcy5ub2RlQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRpdGxlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZD0id2hpdGUiLHRoaXMuYWN0b3JCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JMaW5lQ29sb3I9dGhpcy5hY3RvckJvcmRlcix0aGlzLnNpZ25hbENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubG9vcFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPSIjNjY2Iix0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj0iI2Y0ZjRmNCIsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3IyPSJjYWxjdWxhdGVkIix0aGlzLmV4Y2x1ZGVCa2dDb2xvcj0iI2VlZWVlZSIsdGhpcy50YXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj0id2hpdGUiLHRoaXMudGFza1RleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dERhcmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yPSIjMDAzMTYzIix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZ3JpZENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5jcml0QmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuY3JpdEJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRvZGF5TGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnBlcnNvbkJvcmRlcj10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnBlcnNvbkJrZz10aGlzLm1haW5Ca2csdGhpcy5hcmNoRWRnZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFyY2hFZGdlQXJyb3dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hcmNoRWRnZVdpZHRoPSIzIix0aGlzLmFyY2hHcm91cEJvcmRlckNvbG9yPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuYXJjaEdyb3VwQm9yZGVyV2lkdGg9IjJweCIsdGhpcy5yb3dPZGQ9dGhpcy5yb3dPZGR8fER0KHRoaXMubWFpbkJrZyw3NSl8fCIjZmZmZmZmIix0aGlzLnJvd0V2ZW49dGhpcy5yb3dFdmVufHwiI2Y0ZjRmNCIsdGhpcy5sYWJlbENvbG9yPSJibGFjayIsdGhpcy5lcnJvckJrZ0NvbG9yPSIjNTUyMjIyIix0aGlzLmVycm9yVGV4dENvbG9yPSIjNTUyMjIyIn11cGRhdGVDb2xvcnMoKXt0aGlzLnNlY29uZEJrZz1EdCh0aGlzLmNvbnRyYXN0LDU1KSx0aGlzLmJvcmRlcjI9dGhpcy5jb250cmFzdCx0aGlzLmFjdG9yQm9yZGVyPUR0KHRoaXMuYm9yZGVyMSwyMyksdGhpcy5hY3RvckJrZz10aGlzLm1haW5Ca2csdGhpcy5hY3RvclRleHRDb2xvcj10aGlzLnRleHQsdGhpcy5hY3RvckxpbmVDb2xvcj10aGlzLmFjdG9yQm9yZGVyLHRoaXMuc2lnbmFsQ29sb3I9dGhpcy50ZXh0LHRoaXMuc2lnbmFsVGV4dENvbG9yPXRoaXMudGV4dCx0aGlzLmxhYmVsQm94QmtnQ29sb3I9dGhpcy5hY3RvckJrZyx0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9dGhpcy5hY3RvckJvcmRlcix0aGlzLmxhYmVsVGV4dENvbG9yPXRoaXMudGV4dCx0aGlzLmxvb3BUZXh0Q29sb3I9dGhpcy50ZXh0LHRoaXMubm90ZUJvcmRlckNvbG9yPSIjOTk5Iix0aGlzLm5vdGVCa2dDb2xvcj0iIzY2NiIsdGhpcy5ub3RlVGV4dENvbG9yPSIjZmZmIix0aGlzLmNTY2FsZTA9dGhpcy5jU2NhbGUwfHwiIzU1NSIsdGhpcy5jU2NhbGUxPXRoaXMuY1NjYWxlMXx8IiNGNEY0RjQiLHRoaXMuY1NjYWxlMj10aGlzLmNTY2FsZTJ8fCIjNTU1Iix0aGlzLmNTY2FsZTM9dGhpcy5jU2NhbGUzfHwiI0JCQiIsdGhpcy5jU2NhbGU0PXRoaXMuY1NjYWxlNHx8IiM3NzciLHRoaXMuY1NjYWxlNT10aGlzLmNTY2FsZTV8fCIjOTk5Iix0aGlzLmNTY2FsZTY9dGhpcy5jU2NhbGU2fHwiI0RERCIsdGhpcy5jU2NhbGU3PXRoaXMuY1NjYWxlN3x8IiNGRkYiLHRoaXMuY1NjYWxlOD10aGlzLmNTY2FsZTh8fCIjREREIix0aGlzLmNTY2FsZTk9dGhpcy5jU2NhbGU5fHwiI0JCQiIsdGhpcy5jU2NhbGUxMD10aGlzLmNTY2FsZTEwfHwiIzk5OSIsdGhpcy5jU2NhbGUxMT10aGlzLmNTY2FsZTExfHwiIzc3NyI7Zm9yKGxldCBlPTA7ZTx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO2UrKyl0aGlzWyJjU2NhbGVJbnYiK2VdPXRoaXNbImNTY2FsZUludiIrZV18fHd0KHRoaXNbImNTY2FsZSIrZV0pO2ZvcihsZXQgZT0wO2U8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtlKyspdGhpcy5kYXJrTW9kZT90aGlzWyJjU2NhbGVQZWVyIitlXT10aGlzWyJjU2NhbGVQZWVyIitlXXx8RHQodGhpc1siY1NjYWxlIitlXSwxMCk6dGhpc1siY1NjYWxlUGVlciIrZV09dGhpc1siY1NjYWxlUGVlciIrZV18fE90KHRoaXNbImNTY2FsZSIrZV0sMTApO3RoaXMuc2NhbGVMYWJlbENvbG9yPXRoaXMuc2NhbGVMYWJlbENvbG9yfHwodGhpcy5kYXJrTW9kZT8iYmxhY2siOnRoaXMubGFiZWxUZXh0Q29sb3IpLHRoaXMuY1NjYWxlTGFiZWwwPXRoaXMuY1NjYWxlTGFiZWwwfHx0aGlzLmNTY2FsZTEsdGhpcy5jU2NhbGVMYWJlbDI9dGhpcy5jU2NhbGVMYWJlbDJ8fHRoaXMuY1NjYWxlMTtmb3IobGV0IGU9MDtlPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7ZSsrKXRoaXNbImNTY2FsZUxhYmVsIitlXT10aGlzWyJjU2NhbGVMYWJlbCIrZV18fHRoaXMuc2NhbGVMYWJlbENvbG9yO2ZvcihsZXQgZT0wO2U8NTtlKyspdGhpc1sic3VyZmFjZSIrZV09dGhpc1sic3VyZmFjZSIrZV18fE1lKHRoaXMubWFpbkJrZyx7bDotKDUrZSo1KX0pLHRoaXNbInN1cmZhY2VQZWVyIitlXT10aGlzWyJzdXJmYWNlUGVlciIrZV18fE1lKHRoaXMubWFpbkJrZyx7bDotKDgrZSo1KX0pO3RoaXMubm9kZUJrZz10aGlzLm1haW5Ca2csdGhpcy5ub2RlQm9yZGVyPXRoaXMuYm9yZGVyMSx0aGlzLmNsdXN0ZXJCa2c9dGhpcy5zZWNvbmRCa2csdGhpcy5jbHVzdGVyQm9yZGVyPXRoaXMuYm9yZGVyMix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy50aXRsZUNvbG9yPXRoaXMudGV4dCx0aGlzLnNlY3Rpb25Ca2dDb2xvcj1EdCh0aGlzLmNvbnRyYXN0LDMwKSx0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9RHQodGhpcy5jb250cmFzdCwzMCksdGhpcy50YXNrQm9yZGVyQ29sb3I9T3QodGhpcy5jb250cmFzdCwxMCksdGhpcy50YXNrQmtnQ29sb3I9dGhpcy5jb250cmFzdCx0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3IsdGhpcy50YXNrVGV4dERhcmtDb2xvcj10aGlzLnRleHQsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj10aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPXRoaXMudGFza0JvcmRlckNvbG9yLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPXRoaXMubWFpbkJrZyx0aGlzLmdyaWRDb2xvcj1EdCh0aGlzLmJvcmRlcjEsMzApLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj10aGlzLmRvbmUsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuY3JpdEJrZ0NvbG9yPXRoaXMuY3JpdGljYWwsdGhpcy5jcml0Qm9yZGVyQ29sb3I9T3QodGhpcy5jcml0QmtnQ29sb3IsMTApLHRoaXMudG9kYXlMaW5lQ29sb3I9dGhpcy5jcml0QmtnQ29sb3IsdGhpcy5hcmNoRWRnZUNvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuYXJjaEVkZ2VBcnJvd0NvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHwiIzAwMCIsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHwiI2Y0ZjRmNCIsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLnN0YXRlQm9yZGVyPXRoaXMuc3RhdGVCb3JkZXJ8fCIjMDAwIix0aGlzLmlubmVyRW5kQmFja2dyb3VuZD10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yPSIjMjIyIix0aGlzLmVycm9yQmtnQ29sb3I9dGhpcy5lcnJvckJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5lcnJvclRleHRDb2xvcj10aGlzLmVycm9yVGV4dENvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMuY2xhc3NUZXh0PXRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLmZpbGxUeXBlMD10aGlzLnByaW1hcnlDb2xvcix0aGlzLmZpbGxUeXBlMT10aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZmlsbFR5cGUyPU1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTM9TWUodGhpcy5zZWNvbmRhcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGU0PU1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU1PU1lKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTY9TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5maWxsVHlwZTc9TWUodGhpcy5zZWNvbmRhcnlDb2xvcix7aDoxMjh9KTtmb3IobGV0IGU9MDtlPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7ZSsrKXRoaXNbInBpZSIrZV09dGhpc1siY1NjYWxlIitlXTt0aGlzLnBpZTEyPXRoaXMucGllMCx0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZVdpZHRoPXRoaXMucGllT3V0ZXJTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZUNvbG9yPXRoaXMucGllT3V0ZXJTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZU9wYWNpdHk9dGhpcy5waWVPcGFjaXR5fHwiMC43Iix0aGlzLnF1YWRyYW50MUZpbGw9dGhpcy5xdWFkcmFudDFGaWxsfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnF1YWRyYW50MkZpbGw9dGhpcy5xdWFkcmFudDJGaWxsfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7cjo1LGc6NSxiOjV9KSx0aGlzLnF1YWRyYW50M0ZpbGw9dGhpcy5xdWFkcmFudDNGaWxsfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7cjoxMCxnOjEwLGI6MTB9KSx0aGlzLnF1YWRyYW50NEZpbGw9dGhpcy5xdWFkcmFudDRGaWxsfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7cjoxNSxnOjE1LGI6MTV9KSx0aGlzLnF1YWRyYW50MVRleHRGaWxsPXRoaXMucXVhZHJhbnQxVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50MlRleHRGaWxsPXRoaXMucXVhZHJhbnQyVGV4dEZpbGx8fE1lKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotNSxnOi01LGI6LTV9KSx0aGlzLnF1YWRyYW50M1RleHRGaWxsPXRoaXMucXVhZHJhbnQzVGV4dEZpbGx8fE1lKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTAsZzotMTAsYjotMTB9KSx0aGlzLnF1YWRyYW50NFRleHRGaWxsPXRoaXMucXVhZHJhbnQ0VGV4dEZpbGx8fE1lKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTUsZzotMTUsYjotMTV9KSx0aGlzLnF1YWRyYW50UG9pbnRGaWxsPXRoaXMucXVhZHJhbnRQb2ludEZpbGx8fGNhKHRoaXMucXVhZHJhbnQxRmlsbCk/RHQodGhpcy5xdWFkcmFudDFGaWxsKTpPdCh0aGlzLnF1YWRyYW50MUZpbGwpLHRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsPXRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbD10aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbD10aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnF1YWRyYW50VGl0bGVGaWxsPXRoaXMucXVhZHJhbnRUaXRsZUZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnh5Q2hhcnQ9e2JhY2tncm91bmRDb2xvcjp0aGlzLnh5Q2hhcnQ/LmJhY2tncm91bmRDb2xvcnx8dGhpcy5iYWNrZ3JvdW5kLHRpdGxlQ29sb3I6dGhpcy54eUNoYXJ0Py50aXRsZUNvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNUaXRsZUNvbG9yOnRoaXMueHlDaGFydD8ueEF4aXNUaXRsZUNvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNMYWJlbENvbG9yOnRoaXMueHlDaGFydD8ueEF4aXNMYWJlbENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNUaWNrQ29sb3I6dGhpcy54eUNoYXJ0Py54QXhpc1RpY2tDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzTGluZUNvbG9yOnRoaXMueHlDaGFydD8ueEF4aXNMaW5lQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc1RpdGxlQ29sb3I6dGhpcy54eUNoYXJ0Py55QXhpc1RpdGxlQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc0xhYmVsQ29sb3I6dGhpcy54eUNoYXJ0Py55QXhpc0xhYmVsQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc1RpY2tDb2xvcjp0aGlzLnh5Q2hhcnQ/LnlBeGlzVGlja0NvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNMaW5lQ29sb3I6dGhpcy54eUNoYXJ0Py55QXhpc0xpbmVDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHBsb3RDb2xvclBhbGV0dGU6dGhpcy54eUNoYXJ0Py5wbG90Q29sb3JQYWxldHRlfHwiI0VFRSwjNkJCOEU0LCM4QUNCODgsI0M3QUNENiwjRThEQ0MyLCNGRkIyQTgsI0ZGRjM4MCwjN0U4RDkxLCNGRkQ4QjEsI0ZBRjNFMCJ9LHRoaXMucmFkYXI9e2F4aXNDb2xvcjp0aGlzLnJhZGFyPy5heGlzQ29sb3J8fHRoaXMubGluZUNvbG9yLGF4aXNTdHJva2VXaWR0aDp0aGlzLnJhZGFyPy5heGlzU3Ryb2tlV2lkdGh8fDIsYXhpc0xhYmVsRm9udFNpemU6dGhpcy5yYWRhcj8uYXhpc0xhYmVsRm9udFNpemV8fDEyLGN1cnZlT3BhY2l0eTp0aGlzLnJhZGFyPy5jdXJ2ZU9wYWNpdHl8fC41LGN1cnZlU3Ryb2tlV2lkdGg6dGhpcy5yYWRhcj8uY3VydmVTdHJva2VXaWR0aHx8MixncmF0aWN1bGVDb2xvcjp0aGlzLnJhZGFyPy5ncmF0aWN1bGVDb2xvcnx8IiNERURFREUiLGdyYXRpY3VsZVN0cm9rZVdpZHRoOnRoaXMucmFkYXI/LmdyYXRpY3VsZVN0cm9rZVdpZHRofHwxLGdyYXRpY3VsZU9wYWNpdHk6dGhpcy5yYWRhcj8uZ3JhdGljdWxlT3BhY2l0eXx8LjMsbGVnZW5kQm94U2l6ZTp0aGlzLnJhZGFyPy5sZWdlbmRCb3hTaXplfHwxMixsZWdlbmRGb250U2l6ZTp0aGlzLnJhZGFyPy5sZWdlbmRGb250U2l6ZXx8MTJ9LHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kPXRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3I9dGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZT10aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZXx8IjEiLHRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3I9dGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucmVsYXRpb25Db2xvcj10aGlzLnJlbGF0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmQ9dGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZHx8dGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kLHRoaXMucmVsYXRpb25MYWJlbENvbG9yPXRoaXMucmVsYXRpb25MYWJlbENvbG9yfHx0aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMuZ2l0MD1PdCh0aGlzLnBpZTEsMjUpfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmdpdDE9dGhpcy5waWUyfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZ2l0Mj10aGlzLnBpZTN8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmdpdDM9dGhpcy5waWU0fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDotMzB9KSx0aGlzLmdpdDQ9dGhpcy5waWU1fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjB9KSx0aGlzLmdpdDU9dGhpcy5waWU2fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDotOTB9KSx0aGlzLmdpdDY9dGhpcy5waWU3fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDo2MH0pLHRoaXMuZ2l0Nz10aGlzLnBpZTh8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuZ2l0SW52MD10aGlzLmdpdEludjB8fHd0KHRoaXMuZ2l0MCksdGhpcy5naXRJbnYxPXRoaXMuZ2l0SW52MXx8d3QodGhpcy5naXQxKSx0aGlzLmdpdEludjI9dGhpcy5naXRJbnYyfHx3dCh0aGlzLmdpdDIpLHRoaXMuZ2l0SW52Mz10aGlzLmdpdEludjN8fHd0KHRoaXMuZ2l0MyksdGhpcy5naXRJbnY0PXRoaXMuZ2l0SW52NHx8d3QodGhpcy5naXQ0KSx0aGlzLmdpdEludjU9dGhpcy5naXRJbnY1fHx3dCh0aGlzLmdpdDUpLHRoaXMuZ2l0SW52Nj10aGlzLmdpdEludjZ8fHd0KHRoaXMuZ2l0NiksdGhpcy5naXRJbnY3PXRoaXMuZ2l0SW52N3x8d3QodGhpcy5naXQ3KSx0aGlzLmJyYW5jaExhYmVsQ29sb3I9dGhpcy5icmFuY2hMYWJlbENvbG9yfHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWwwPXRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMT0id2hpdGUiLHRoaXMuZ2l0QnJhbmNoTGFiZWwyPXRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMz0id2hpdGUiLHRoaXMuZ2l0QnJhbmNoTGFiZWw0PXRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNT10aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDY9dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw3PXRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLnRhZ0xhYmVsQ29sb3I9dGhpcy50YWdMYWJlbENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy50YWdMYWJlbEJhY2tncm91bmQ9dGhpcy50YWdMYWJlbEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMudGFnTGFiZWxCb3JkZXI9dGhpcy50YWdCb3JkZXJ8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMudGFnTGFiZWxGb250U2l6ZT10aGlzLnRhZ0xhYmVsRm9udFNpemV8fCIxMHB4Iix0aGlzLmNvbW1pdExhYmVsQ29sb3I9dGhpcy5jb21taXRMYWJlbENvbG9yfHx0aGlzLnNlY29uZGFyeVRleHRDb2xvcix0aGlzLmNvbW1pdExhYmVsQmFja2dyb3VuZD10aGlzLmNvbW1pdExhYmVsQmFja2dyb3VuZHx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmNvbW1pdExhYmVsRm9udFNpemU9dGhpcy5jb21taXRMYWJlbEZvbnRTaXplfHwiMTBweCIsdGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JPZGQ9dGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JPZGR8fGFoLHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbj10aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW58fHNofWNhbGN1bGF0ZShlKXtpZih0eXBlb2YgZSE9Im9iamVjdCIpe3RoaXMudXBkYXRlQ29sb3JzKCk7cmV0dXJufWxldCByPU9iamVjdC5rZXlzKGUpO3IuZm9yRWFjaChuPT57dGhpc1tuXT1lW25dfSksdGhpcy51cGRhdGVDb2xvcnMoKSxyLmZvckVhY2gobj0+e3RoaXNbbl09ZVtuXX0pfX0sSSQ9byh0PT57bGV0IGU9bmV3IEpDO3JldHVybiBlLmNhbGN1bGF0ZSh0KSxlfSwiZ2V0VGhlbWVWYXJpYWJsZXMiKX0pO3ZhciBUbyxxND1OKCgpPT57InVzZSBzdHJpY3QiO0QkKCk7UiQoKTtfeSgpO00kKCk7TyQoKTtUbz17YmFzZTp7Z2V0VGhlbWVWYXJpYWJsZXM6XyR9LGRhcms6e2dldFRoZW1lVmFyaWFibGVzOkwkfSxkZWZhdWx0OntnZXRUaGVtZVZhcmlhYmxlczpvaH0sZm9yZXN0OntnZXRUaGVtZVZhcmlhYmxlczpOJH0sbmV1dHJhbDp7Z2V0VGhlbWVWYXJpYWJsZXM6SSR9fX0pO3ZhciBxbCxQJD1OKCgpPT57InVzZSBzdHJpY3QiO3FsPXtmbG93Y2hhcnQ6e3VzZU1heFdpZHRoOiEwLHRpdGxlVG9wTWFyZ2luOjI1LHN1YkdyYXBoVGl0bGVNYXJnaW46e3RvcDowLGJvdHRvbTowfSxkaWFncmFtUGFkZGluZzo4LGh0bWxMYWJlbHM6ITAsbm9kZVNwYWNpbmc6NTAscmFua1NwYWNpbmc6NTAsY3VydmU6ImJhc2lzIixwYWRkaW5nOjE1LGRlZmF1bHRSZW5kZXJlcjoiZGFncmUtd3JhcHBlciIsd3JhcHBpbmdXaWR0aDoyMDB9LHNlcXVlbmNlOnt1c2VNYXhXaWR0aDohMCxoaWRlVW51c2VkUGFydGljaXBhbnRzOiExLGFjdGl2YXRpb25XaWR0aDoxMCxkaWFncmFtTWFyZ2luWDo1MCxkaWFncmFtTWFyZ2luWToxMCxhY3Rvck1hcmdpbjo1MCx3aWR0aDoxNTAsaGVpZ2h0OjY1LGJveE1hcmdpbjoxMCxib3hUZXh0TWFyZ2luOjUsbm90ZU1hcmdpbjoxMCxtZXNzYWdlTWFyZ2luOjM1LG1lc3NhZ2VBbGlnbjoiY2VudGVyIixtaXJyb3JBY3RvcnM6ITAsZm9yY2VNZW51czohMSxib3R0b21NYXJnaW5BZGo6MSxyaWdodEFuZ2xlczohMSxzaG93U2VxdWVuY2VOdW1iZXJzOiExLGFjdG9yRm9udFNpemU6MTQsYWN0b3JGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsYWN0b3JGb250V2VpZ2h0OjQwMCxub3RlRm9udFNpemU6MTQsbm90ZUZvbnRGYW1pbHk6JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsbm90ZUZvbnRXZWlnaHQ6NDAwLG5vdGVBbGlnbjoiY2VudGVyIixtZXNzYWdlRm9udFNpemU6MTYsbWVzc2FnZUZvbnRGYW1pbHk6JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsbWVzc2FnZUZvbnRXZWlnaHQ6NDAwLHdyYXA6ITEsd3JhcFBhZGRpbmc6MTAsbGFiZWxCb3hXaWR0aDo1MCxsYWJlbEJveEhlaWdodDoyMH0sZ2FudHQ6e3VzZU1heFdpZHRoOiEwLHRpdGxlVG9wTWFyZ2luOjI1LGJhckhlaWdodDoyMCxiYXJHYXA6NCx0b3BQYWRkaW5nOjUwLHJpZ2h0UGFkZGluZzo3NSxsZWZ0UGFkZGluZzo3NSxncmlkTGluZVN0YXJ0UGFkZGluZzozNSxmb250U2l6ZToxMSxzZWN0aW9uRm9udFNpemU6MTEsbnVtYmVyU2VjdGlvblN0eWxlczo0LGF4aXNGb3JtYXQ6IiVZLSVtLSVkIix0b3BBeGlzOiExLGRpc3BsYXlNb2RlOiIiLHdlZWtkYXk6InN1bmRheSJ9LGpvdXJuZXk6e3VzZU1heFdpZHRoOiEwLGRpYWdyYW1NYXJnaW5YOjUwLGRpYWdyYW1NYXJnaW5ZOjEwLGxlZnRNYXJnaW46MTUwLHdpZHRoOjE1MCxoZWlnaHQ6NTAsYm94TWFyZ2luOjEwLGJveFRleHRNYXJnaW46NSxub3RlTWFyZ2luOjEwLG1lc3NhZ2VNYXJnaW46MzUsbWVzc2FnZUFsaWduOiJjZW50ZXIiLGJvdHRvbU1hcmdpbkFkajoxLHJpZ2h0QW5nbGVzOiExLHRhc2tGb250U2l6ZToxNCx0YXNrRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLHRhc2tNYXJnaW46NTAsYWN0aXZhdGlvbldpZHRoOjEwLHRleHRQbGFjZW1lbnQ6ImZvIixhY3RvckNvbG91cnM6WyIjOEZCQzhGIiwiIzdDRkMwMCIsIiMwMEZGRkYiLCIjMjBCMkFBIiwiI0IwRTBFNiIsIiNGRkZGRTAiXSxzZWN0aW9uRmlsbHM6WyIjMTkxOTcwIiwiIzhCMDA4QiIsIiM0QjAwODIiLCIjMkY0RjRGIiwiIzgwMDAwMCIsIiM4QjQ1MTMiLCIjMDAwMDhCIl0sc2VjdGlvbkNvbG91cnM6WyIjZmZmIl19LGNsYXNzOnt1c2VNYXhXaWR0aDohMCx0aXRsZVRvcE1hcmdpbjoyNSxhcnJvd01hcmtlckFic29sdXRlOiExLGRpdmlkZXJNYXJnaW46MTAscGFkZGluZzo1LHRleHRIZWlnaHQ6MTAsZGVmYXVsdFJlbmRlcmVyOiJkYWdyZS13cmFwcGVyIixodG1sTGFiZWxzOiExLGhpZGVFbXB0eU1lbWJlcnNCb3g6ITF9LHN0YXRlOnt1c2VNYXhXaWR0aDohMCx0aXRsZVRvcE1hcmdpbjoyNSxkaXZpZGVyTWFyZ2luOjEwLHNpemVVbml0OjUscGFkZGluZzo4LHRleHRIZWlnaHQ6MTAsdGl0bGVTaGlmdDotMTUsbm90ZU1hcmdpbjoxMCxmb3JrV2lkdGg6NzAsZm9ya0hlaWdodDo3LG1pbmlQYWRkaW5nOjIsZm9udFNpemVGYWN0b3I6NS4wMixmb250U2l6ZToyNCxsYWJlbEhlaWdodDoxNixlZGdlTGVuZ3RoRmFjdG9yOiIyMCIsY29tcG9zaXRUaXRsZVNpemU6MzUscmFkaXVzOjUsZGVmYXVsdFJlbmRlcmVyOiJkYWdyZS13cmFwcGVyIn0sZXI6e3VzZU1heFdpZHRoOiEwLHRpdGxlVG9wTWFyZ2luOjI1LGRpYWdyYW1QYWRkaW5nOjIwLGxheW91dERpcmVjdGlvbjoiVEIiLG1pbkVudGl0eVdpZHRoOjEwMCxtaW5FbnRpdHlIZWlnaHQ6NzUsZW50aXR5UGFkZGluZzoxNSxub2RlU3BhY2luZzoxNDAscmFua1NwYWNpbmc6ODAsc3Ryb2tlOiJncmF5IixmaWxsOiJob25leWRldyIsZm9udFNpemU6MTJ9LHBpZTp7dXNlTWF4V2lkdGg6ITAsdGV4dFBvc2l0aW9uOi43NX0scXVhZHJhbnRDaGFydDp7dXNlTWF4V2lkdGg6ITAsY2hhcnRXaWR0aDo1MDAsY2hhcnRIZWlnaHQ6NTAwLHRpdGxlRm9udFNpemU6MjAsdGl0bGVQYWRkaW5nOjEwLHF1YWRyYW50UGFkZGluZzo1LHhBeGlzTGFiZWxQYWRkaW5nOjUseUF4aXNMYWJlbFBhZGRpbmc6NSx4QXhpc0xhYmVsRm9udFNpemU6MTYseUF4aXNMYWJlbEZvbnRTaXplOjE2LHF1YWRyYW50TGFiZWxGb250U2l6ZToxNixxdWFkcmFudFRleHRUb3BQYWRkaW5nOjUscG9pbnRUZXh0UGFkZGluZzo1LHBvaW50TGFiZWxGb250U2l6ZToxMixwb2ludFJhZGl1czo1LHhBeGlzUG9zaXRpb246InRvcCIseUF4aXNQb3NpdGlvbjoibGVmdCIscXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZVdpZHRoOjEscXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZVdpZHRoOjJ9LHh5Q2hhcnQ6e3VzZU1heFdpZHRoOiEwLHdpZHRoOjcwMCxoZWlnaHQ6NTAwLHRpdGxlRm9udFNpemU6MjAsdGl0bGVQYWRkaW5nOjEwLHNob3dUaXRsZTohMCx4QXhpczp7JHJlZjoiIy8kZGVmcy9YWUNoYXJ0QXhpc0NvbmZpZyIsc2hvd0xhYmVsOiEwLGxhYmVsRm9udFNpemU6MTQsbGFiZWxQYWRkaW5nOjUsc2hvd1RpdGxlOiEwLHRpdGxlRm9udFNpemU6MTYsdGl0bGVQYWRkaW5nOjUsc2hvd1RpY2s6ITAsdGlja0xlbmd0aDo1LHRpY2tXaWR0aDoyLHNob3dBeGlzTGluZTohMCxheGlzTGluZVdpZHRoOjJ9LHlBeGlzOnskcmVmOiIjLyRkZWZzL1hZQ2hhcnRBeGlzQ29uZmlnIixzaG93TGFiZWw6ITAsbGFiZWxGb250U2l6ZToxNCxsYWJlbFBhZGRpbmc6NSxzaG93VGl0bGU6ITAsdGl0bGVGb250U2l6ZToxNix0aXRsZVBhZGRpbmc6NSxzaG93VGljazohMCx0aWNrTGVuZ3RoOjUsdGlja1dpZHRoOjIsc2hvd0F4aXNMaW5lOiEwLGF4aXNMaW5lV2lkdGg6Mn0sY2hhcnRPcmllbnRhdGlvbjoidmVydGljYWwiLHBsb3RSZXNlcnZlZFNwYWNlUGVyY2VudDo1MH0scmVxdWlyZW1lbnQ6e3VzZU1heFdpZHRoOiEwLHJlY3RfZmlsbDoiI2Y5ZjlmOSIsdGV4dF9jb2xvcjoiIzMzMyIscmVjdF9ib3JkZXJfc2l6ZToiMC41cHgiLHJlY3RfYm9yZGVyX2NvbG9yOiIjYmJiIixyZWN0X21pbl93aWR0aDoyMDAscmVjdF9taW5faGVpZ2h0OjIwMCxmb250U2l6ZToxNCxyZWN0X3BhZGRpbmc6MTAsbGluZV9oZWlnaHQ6MjB9LG1pbmRtYXA6e3VzZU1heFdpZHRoOiEwLHBhZGRpbmc6MTAsbWF4Tm9kZVdpZHRoOjIwMH0sa2FuYmFuOnt1c2VNYXhXaWR0aDohMCxwYWRkaW5nOjgsc2VjdGlvbldpZHRoOjIwMCx0aWNrZXRCYXNlVXJsOiIifSx0aW1lbGluZTp7dXNlTWF4V2lkdGg6ITAsZGlhZ3JhbU1hcmdpblg6NTAsZGlhZ3JhbU1hcmdpblk6MTAsbGVmdE1hcmdpbjoxNTAsd2lkdGg6MTUwLGhlaWdodDo1MCxib3hNYXJnaW46MTAsYm94VGV4dE1hcmdpbjo1LG5vdGVNYXJnaW46MTAsbWVzc2FnZU1hcmdpbjozNSxtZXNzYWdlQWxpZ246ImNlbnRlciIsYm90dG9tTWFyZ2luQWRqOjEscmlnaHRBbmdsZXM6ITEsdGFza0ZvbnRTaXplOjE0LHRhc2tGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsdGFza01hcmdpbjo1MCxhY3RpdmF0aW9uV2lkdGg6MTAsdGV4dFBsYWNlbWVudDoiZm8iLGFjdG9yQ29sb3VyczpbIiM4RkJDOEYiLCIjN0NGQzAwIiwiIzAwRkZGRiIsIiMyMEIyQUEiLCIjQjBFMEU2IiwiI0ZGRkZFMCJdLHNlY3Rpb25GaWxsczpbIiMxOTE5NzAiLCIjOEIwMDhCIiwiIzRCMDA4MiIsIiMyRjRGNEYiLCIjODAwMDAwIiwiIzhCNDUxMyIsIiMwMDAwOEIiXSxzZWN0aW9uQ29sb3VyczpbIiNmZmYiXSxkaXNhYmxlTXVsdGljb2xvcjohMX0sZ2l0R3JhcGg6e3VzZU1heFdpZHRoOiEwLHRpdGxlVG9wTWFyZ2luOjI1LGRpYWdyYW1QYWRkaW5nOjgsbm9kZUxhYmVsOnt3aWR0aDo3NSxoZWlnaHQ6MTAwLHg6LTI1LHk6MH0sbWFpbkJyYW5jaE5hbWU6Im1haW4iLG1haW5CcmFuY2hPcmRlcjowLHNob3dDb21taXRMYWJlbDohMCxzaG93QnJhbmNoZXM6ITAscm90YXRlQ29tbWl0TGFiZWw6ITAscGFyYWxsZWxDb21taXRzOiExLGFycm93TWFya2VyQWJzb2x1dGU6ITF9LGM0Ont1c2VNYXhXaWR0aDohMCxkaWFncmFtTWFyZ2luWDo1MCxkaWFncmFtTWFyZ2luWToxMCxjNFNoYXBlTWFyZ2luOjUwLGM0U2hhcGVQYWRkaW5nOjIwLHdpZHRoOjIxNixoZWlnaHQ6NjAsYm94TWFyZ2luOjEwLGM0U2hhcGVJblJvdzo0LG5leHRMaW5lUGFkZGluZ1g6MCxjNEJvdW5kYXJ5SW5Sb3c6MixwZXJzb25Gb250U2l6ZToxNCxwZXJzb25Gb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicscGVyc29uRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9wZXJzb25Gb250U2l6ZToxNCxleHRlcm5hbF9wZXJzb25Gb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfcGVyc29uRm9udFdlaWdodDoibm9ybWFsIixzeXN0ZW1Gb250U2l6ZToxNCxzeXN0ZW1Gb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsc3lzdGVtRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9zeXN0ZW1Gb250U2l6ZToxNCxleHRlcm5hbF9zeXN0ZW1Gb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfc3lzdGVtRm9udFdlaWdodDoibm9ybWFsIixzeXN0ZW1fZGJGb250U2l6ZToxNCxzeXN0ZW1fZGJGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsc3lzdGVtX2RiRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9zeXN0ZW1fZGJGb250U2l6ZToxNCxleHRlcm5hbF9zeXN0ZW1fZGJGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfc3lzdGVtX2RiRm9udFdlaWdodDoibm9ybWFsIixzeXN0ZW1fcXVldWVGb250U2l6ZToxNCxzeXN0ZW1fcXVldWVGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsc3lzdGVtX3F1ZXVlRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9zeXN0ZW1fcXVldWVGb250U2l6ZToxNCxleHRlcm5hbF9zeXN0ZW1fcXVldWVGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlRm9udFdlaWdodDoibm9ybWFsIixib3VuZGFyeUZvbnRTaXplOjE0LGJvdW5kYXJ5Rm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLGJvdW5kYXJ5Rm9udFdlaWdodDoibm9ybWFsIixtZXNzYWdlRm9udFNpemU6MTIsbWVzc2FnZUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxtZXNzYWdlRm9udFdlaWdodDoibm9ybWFsIixjb250YWluZXJGb250U2l6ZToxNCxjb250YWluZXJGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsY29udGFpbmVyRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9jb250YWluZXJGb250U2l6ZToxNCxleHRlcm5hbF9jb250YWluZXJGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfY29udGFpbmVyRm9udFdlaWdodDoibm9ybWFsIixjb250YWluZXJfZGJGb250U2l6ZToxNCxjb250YWluZXJfZGJGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsY29udGFpbmVyX2RiRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9jb250YWluZXJfZGJGb250U2l6ZToxNCxleHRlcm5hbF9jb250YWluZXJfZGJGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfY29udGFpbmVyX2RiRm9udFdlaWdodDoibm9ybWFsIixjb250YWluZXJfcXVldWVGb250U2l6ZToxNCxjb250YWluZXJfcXVldWVGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsY29udGFpbmVyX3F1ZXVlRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9jb250YWluZXJfcXVldWVGb250U2l6ZToxNCxleHRlcm5hbF9jb250YWluZXJfcXVldWVGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlRm9udFdlaWdodDoibm9ybWFsIixjb21wb25lbnRGb250U2l6ZToxNCxjb21wb25lbnRGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsY29tcG9uZW50Rm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9jb21wb25lbnRGb250U2l6ZToxNCxleHRlcm5hbF9jb21wb25lbnRGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfY29tcG9uZW50Rm9udFdlaWdodDoibm9ybWFsIixjb21wb25lbnRfZGJGb250U2l6ZToxNCxjb21wb25lbnRfZGJGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsY29tcG9uZW50X2RiRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9jb21wb25lbnRfZGJGb250U2l6ZToxNCxleHRlcm5hbF9jb21wb25lbnRfZGJGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfY29tcG9uZW50X2RiRm9udFdlaWdodDoibm9ybWFsIixjb21wb25lbnRfcXVldWVGb250U2l6ZToxNCxjb21wb25lbnRfcXVldWVGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsY29tcG9uZW50X3F1ZXVlRm9udFdlaWdodDoibm9ybWFsIixleHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250U2l6ZToxNCxleHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlRm9udFdlaWdodDoibm9ybWFsIix3cmFwOiEwLHdyYXBQYWRkaW5nOjEwLHBlcnNvbl9iZ19jb2xvcjoiIzA4NDI3QiIscGVyc29uX2JvcmRlcl9jb2xvcjoiIzA3M0I2RiIsZXh0ZXJuYWxfcGVyc29uX2JnX2NvbG9yOiIjNjg2ODY4IixleHRlcm5hbF9wZXJzb25fYm9yZGVyX2NvbG9yOiIjOEE4QThBIixzeXN0ZW1fYmdfY29sb3I6IiMxMTY4QkQiLHN5c3RlbV9ib3JkZXJfY29sb3I6IiMzQzdGQzAiLHN5c3RlbV9kYl9iZ19jb2xvcjoiIzExNjhCRCIsc3lzdGVtX2RiX2JvcmRlcl9jb2xvcjoiIzNDN0ZDMCIsc3lzdGVtX3F1ZXVlX2JnX2NvbG9yOiIjMTE2OEJEIixzeXN0ZW1fcXVldWVfYm9yZGVyX2NvbG9yOiIjM0M3RkMwIixleHRlcm5hbF9zeXN0ZW1fYmdfY29sb3I6IiM5OTk5OTkiLGV4dGVybmFsX3N5c3RlbV9ib3JkZXJfY29sb3I6IiM4QThBOEEiLGV4dGVybmFsX3N5c3RlbV9kYl9iZ19jb2xvcjoiIzk5OTk5OSIsZXh0ZXJuYWxfc3lzdGVtX2RiX2JvcmRlcl9jb2xvcjoiIzhBOEE4QSIsZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlX2JnX2NvbG9yOiIjOTk5OTk5IixleHRlcm5hbF9zeXN0ZW1fcXVldWVfYm9yZGVyX2NvbG9yOiIjOEE4QThBIixjb250YWluZXJfYmdfY29sb3I6IiM0MzhERDUiLGNvbnRhaW5lcl9ib3JkZXJfY29sb3I6IiMzQzdGQzAiLGNvbnRhaW5lcl9kYl9iZ19jb2xvcjoiIzQzOERENSIsY29udGFpbmVyX2RiX2JvcmRlcl9jb2xvcjoiIzNDN0ZDMCIsY29udGFpbmVyX3F1ZXVlX2JnX2NvbG9yOiIjNDM4REQ1Iixjb250YWluZXJfcXVldWVfYm9yZGVyX2NvbG9yOiIjM0M3RkMwIixleHRlcm5hbF9jb250YWluZXJfYmdfY29sb3I6IiNCM0IzQjMiLGV4dGVybmFsX2NvbnRhaW5lcl9ib3JkZXJfY29sb3I6IiNBNkE2QTYiLGV4dGVybmFsX2NvbnRhaW5lcl9kYl9iZ19jb2xvcjoiI0IzQjNCMyIsZXh0ZXJuYWxfY29udGFpbmVyX2RiX2JvcmRlcl9jb2xvcjoiI0E2QTZBNiIsZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlX2JnX2NvbG9yOiIjQjNCM0IzIixleHRlcm5hbF9jb250YWluZXJfcXVldWVfYm9yZGVyX2NvbG9yOiIjQTZBNkE2Iixjb21wb25lbnRfYmdfY29sb3I6IiM4NUJCRjAiLGNvbXBvbmVudF9ib3JkZXJfY29sb3I6IiM3OEE4RDgiLGNvbXBvbmVudF9kYl9iZ19jb2xvcjoiIzg1QkJGMCIsY29tcG9uZW50X2RiX2JvcmRlcl9jb2xvcjoiIzc4QThEOCIsY29tcG9uZW50X3F1ZXVlX2JnX2NvbG9yOiIjODVCQkYwIixjb21wb25lbnRfcXVldWVfYm9yZGVyX2NvbG9yOiIjNzhBOEQ4IixleHRlcm5hbF9jb21wb25lbnRfYmdfY29sb3I6IiNDQ0NDQ0MiLGV4dGVybmFsX2NvbXBvbmVudF9ib3JkZXJfY29sb3I6IiNCRkJGQkYiLGV4dGVybmFsX2NvbXBvbmVudF9kYl9iZ19jb2xvcjoiI0NDQ0NDQyIsZXh0ZXJuYWxfY29tcG9uZW50X2RiX2JvcmRlcl9jb2xvcjoiI0JGQkZCRiIsZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlX2JnX2NvbG9yOiIjQ0NDQ0NDIixleHRlcm5hbF9jb21wb25lbnRfcXVldWVfYm9yZGVyX2NvbG9yOiIjQkZCRkJGIn0sc2Fua2V5Ont1c2VNYXhXaWR0aDohMCx3aWR0aDo2MDAsaGVpZ2h0OjQwMCxsaW5rQ29sb3I6ImdyYWRpZW50Iixub2RlQWxpZ25tZW50OiJqdXN0aWZ5IixzaG93VmFsdWVzOiEwLHByZWZpeDoiIixzdWZmaXg6IiJ9LGJsb2NrOnt1c2VNYXhXaWR0aDohMCxwYWRkaW5nOjh9LHBhY2tldDp7dXNlTWF4V2lkdGg6ITAscm93SGVpZ2h0OjMyLGJpdFdpZHRoOjMyLGJpdHNQZXJSb3c6MzIsc2hvd0JpdHM6ITAscGFkZGluZ1g6NSxwYWRkaW5nWTo1fSxhcmNoaXRlY3R1cmU6e3VzZU1heFdpZHRoOiEwLHBhZGRpbmc6NDAsaWNvblNpemU6ODAsZm9udFNpemU6MTZ9LHJhZGFyOnt1c2VNYXhXaWR0aDohMCx3aWR0aDo2MDAsaGVpZ2h0OjYwMCxtYXJnaW5Ub3A6NTAsbWFyZ2luUmlnaHQ6NTAsbWFyZ2luQm90dG9tOjUwLG1hcmdpbkxlZnQ6NTAsYXhpc1NjYWxlRmFjdG9yOjEsYXhpc0xhYmVsRmFjdG9yOjEuMDUsY3VydmVUZW5zaW9uOi4xN30sdGhlbWU6ImRlZmF1bHQiLGxvb2s6ImNsYXNzaWMiLGhhbmREcmF3blNlZWQ6MCxsYXlvdXQ6ImRhZ3JlIixtYXhUZXh0U2l6ZTo1ZTQsbWF4RWRnZXM6NTAwLGRhcmtNb2RlOiExLGZvbnRGYW1pbHk6JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjsnLGxvZ0xldmVsOjUsc2VjdXJpdHlMZXZlbDoic3RyaWN0IixzdGFydE9uTG9hZDohMCxhcnJvd01hcmtlckFic29sdXRlOiExLHNlY3VyZTpbInNlY3VyZSIsInNlY3VyaXR5TGV2ZWwiLCJzdGFydE9uTG9hZCIsIm1heFRleHRTaXplIiwic3VwcHJlc3NFcnJvclJlbmRlcmluZyIsIm1heEVkZ2VzIl0sbGVnYWN5TWF0aE1MOiExLGZvcmNlTGVnYWN5TWF0aE1MOiExLGRldGVybWluaXN0aWNJZHM6ITEsZm9udFNpemU6MTYsbWFya2Rvd25BdXRvV3JhcDohMCxzdXBwcmVzc0Vycm9yUmVuZGVyaW5nOiExfX0pO3ZhciBCJCxGJCwkJCxvcixZYT1OKCgpPT57InVzZSBzdHJpY3QiO3E0KCk7UCQoKTtCJD17Li4ucWwsZGV0ZXJtaW5pc3RpY0lEU2VlZDp2b2lkIDAsZWxrOnttZXJnZUVkZ2VzOiExLG5vZGVQbGFjZW1lbnRTdHJhdGVneToiQlJBTkRFU19LT0VQRiJ9LHRoZW1lQ1NTOnZvaWQgMCx0aGVtZVZhcmlhYmxlczpUby5kZWZhdWx0LmdldFRoZW1lVmFyaWFibGVzKCksc2VxdWVuY2U6ey4uLnFsLnNlcXVlbmNlLG1lc3NhZ2VGb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLm1lc3NhZ2VGb250RmFtaWx5LGZvbnRTaXplOnRoaXMubWVzc2FnZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5tZXNzYWdlRm9udFdlaWdodH19LCJtZXNzYWdlRm9udCIpLG5vdGVGb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLm5vdGVGb250RmFtaWx5LGZvbnRTaXplOnRoaXMubm90ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5ub3RlRm9udFdlaWdodH19LCJub3RlRm9udCIpLGFjdG9yRm9udDpvKGZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5hY3RvckZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5hY3RvckZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5hY3RvckZvbnRXZWlnaHR9fSwiYWN0b3JGb250Iil9LGNsYXNzOntoaWRlRW1wdHlNZW1iZXJzQm94OiExfSxnYW50dDp7Li4ucWwuZ2FudHQsdGlja0ludGVydmFsOnZvaWQgMCx1c2VXaWR0aDp2b2lkIDB9LGM0OnsuLi5xbC5jNCx1c2VXaWR0aDp2b2lkIDAscGVyc29uRm9udDpvKGZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5wZXJzb25Gb250RmFtaWx5LGZvbnRTaXplOnRoaXMucGVyc29uRm9udFNpemUsZm9udFdlaWdodDp0aGlzLnBlcnNvbkZvbnRXZWlnaHR9fSwicGVyc29uRm9udCIpLGV4dGVybmFsX3BlcnNvbkZvbnQ6byhmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfcGVyc29uRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX3BlcnNvbkZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9wZXJzb25Gb250V2VpZ2h0fX0sImV4dGVybmFsX3BlcnNvbkZvbnQiKSxzeXN0ZW1Gb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLnN5c3RlbUZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5zeXN0ZW1Gb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuc3lzdGVtRm9udFdlaWdodH19LCJzeXN0ZW1Gb250IiksZXh0ZXJuYWxfc3lzdGVtRm9udDpvKGZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5leHRlcm5hbF9zeXN0ZW1Gb250RmFtaWx5LGZvbnRTaXplOnRoaXMuZXh0ZXJuYWxfc3lzdGVtRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmV4dGVybmFsX3N5c3RlbUZvbnRXZWlnaHR9fSwiZXh0ZXJuYWxfc3lzdGVtRm9udCIpLHN5c3RlbV9kYkZvbnQ6byhmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuc3lzdGVtX2RiRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLnN5c3RlbV9kYkZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5zeXN0ZW1fZGJGb250V2VpZ2h0fX0sInN5c3RlbV9kYkZvbnQiKSxleHRlcm5hbF9zeXN0ZW1fZGJGb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmV4dGVybmFsX3N5c3RlbV9kYkZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5leHRlcm5hbF9zeXN0ZW1fZGJGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuZXh0ZXJuYWxfc3lzdGVtX2RiRm9udFdlaWdodH19LCJleHRlcm5hbF9zeXN0ZW1fZGJGb250Iiksc3lzdGVtX3F1ZXVlRm9udDpvKGZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5zeXN0ZW1fcXVldWVGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuc3lzdGVtX3F1ZXVlRm9udFNpemUsZm9udFdlaWdodDp0aGlzLnN5c3RlbV9xdWV1ZUZvbnRXZWlnaHR9fSwic3lzdGVtX3F1ZXVlRm9udCIpLGV4dGVybmFsX3N5c3RlbV9xdWV1ZUZvbnQ6byhmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX3N5c3RlbV9xdWV1ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9zeXN0ZW1fcXVldWVGb250V2VpZ2h0fX0sImV4dGVybmFsX3N5c3RlbV9xdWV1ZUZvbnQiKSxjb250YWluZXJGb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmNvbnRhaW5lckZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5jb250YWluZXJGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuY29udGFpbmVyRm9udFdlaWdodH19LCJjb250YWluZXJGb250IiksZXh0ZXJuYWxfY29udGFpbmVyRm9udDpvKGZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5leHRlcm5hbF9jb250YWluZXJGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuZXh0ZXJuYWxfY29udGFpbmVyRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmV4dGVybmFsX2NvbnRhaW5lckZvbnRXZWlnaHR9fSwiZXh0ZXJuYWxfY29udGFpbmVyRm9udCIpLGNvbnRhaW5lcl9kYkZvbnQ6byhmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuY29udGFpbmVyX2RiRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmNvbnRhaW5lcl9kYkZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5jb250YWluZXJfZGJGb250V2VpZ2h0fX0sImNvbnRhaW5lcl9kYkZvbnQiKSxleHRlcm5hbF9jb250YWluZXJfZGJGb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmV4dGVybmFsX2NvbnRhaW5lcl9kYkZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5leHRlcm5hbF9jb250YWluZXJfZGJGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuZXh0ZXJuYWxfY29udGFpbmVyX2RiRm9udFdlaWdodH19LCJleHRlcm5hbF9jb250YWluZXJfZGJGb250IiksY29udGFpbmVyX3F1ZXVlRm9udDpvKGZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5jb250YWluZXJfcXVldWVGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuY29udGFpbmVyX3F1ZXVlRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmNvbnRhaW5lcl9xdWV1ZUZvbnRXZWlnaHR9fSwiY29udGFpbmVyX3F1ZXVlRm9udCIpLGV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZUZvbnQ6byhmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9jb250YWluZXJfcXVldWVGb250V2VpZ2h0fX0sImV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZUZvbnQiKSxjb21wb25lbnRGb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmNvbXBvbmVudEZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5jb21wb25lbnRGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuY29tcG9uZW50Rm9udFdlaWdodH19LCJjb21wb25lbnRGb250IiksZXh0ZXJuYWxfY29tcG9uZW50Rm9udDpvKGZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5leHRlcm5hbF9jb21wb25lbnRGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuZXh0ZXJuYWxfY29tcG9uZW50Rm9udFNpemUsZm9udFdlaWdodDp0aGlzLmV4dGVybmFsX2NvbXBvbmVudEZvbnRXZWlnaHR9fSwiZXh0ZXJuYWxfY29tcG9uZW50Rm9udCIpLGNvbXBvbmVudF9kYkZvbnQ6byhmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuY29tcG9uZW50X2RiRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmNvbXBvbmVudF9kYkZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5jb21wb25lbnRfZGJGb250V2VpZ2h0fX0sImNvbXBvbmVudF9kYkZvbnQiKSxleHRlcm5hbF9jb21wb25lbnRfZGJGb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmV4dGVybmFsX2NvbXBvbmVudF9kYkZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5leHRlcm5hbF9jb21wb25lbnRfZGJGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuZXh0ZXJuYWxfY29tcG9uZW50X2RiRm9udFdlaWdodH19LCJleHRlcm5hbF9jb21wb25lbnRfZGJGb250IiksY29tcG9uZW50X3F1ZXVlRm9udDpvKGZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5jb21wb25lbnRfcXVldWVGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuY29tcG9uZW50X3F1ZXVlRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmNvbXBvbmVudF9xdWV1ZUZvbnRXZWlnaHR9fSwiY29tcG9uZW50X3F1ZXVlRm9udCIpLGV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZUZvbnQ6byhmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250V2VpZ2h0fX0sImV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZUZvbnQiKSxib3VuZGFyeUZvbnQ6byhmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuYm91bmRhcnlGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuYm91bmRhcnlGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuYm91bmRhcnlGb250V2VpZ2h0fX0sImJvdW5kYXJ5Rm9udCIpLG1lc3NhZ2VGb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLm1lc3NhZ2VGb250RmFtaWx5LGZvbnRTaXplOnRoaXMubWVzc2FnZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5tZXNzYWdlRm9udFdlaWdodH19LCJtZXNzYWdlRm9udCIpfSxwaWU6ey4uLnFsLnBpZSx1c2VXaWR0aDo5ODR9LHh5Q2hhcnQ6ey4uLnFsLnh5Q2hhcnQsdXNlV2lkdGg6dm9pZCAwfSxyZXF1aXJlbWVudDp7Li4ucWwucmVxdWlyZW1lbnQsdXNlV2lkdGg6dm9pZCAwfSxwYWNrZXQ6ey4uLnFsLnBhY2tldH0scmFkYXI6ey4uLnFsLnJhZGFyfX0sRiQ9bygodCxlPSIiKT0+T2JqZWN0LmtleXModCkucmVkdWNlKChyLG4pPT5BcnJheS5pc0FycmF5KHRbbl0pP3I6dHlwZW9mIHRbbl09PSJvYmplY3QiJiZ0W25dIT09bnVsbD9bLi4ucixlK24sLi4uRiQodFtuXSwiIildOlsuLi5yLGUrbl0sW10pLCJrZXlpZnkiKSwkJD1uZXcgU2V0KEYkKEIkLCIiKSksb3I9QiR9KTt2YXIgbDAsRHhlLGU3PU4oKCk9PnsidXNlIHN0cmljdCI7WWEoKTt2dCgpO2wwPW8odD0+e2lmKFkuZGVidWcoInNhbml0aXplRGlyZWN0aXZlIGNhbGxlZCB3aXRoIix0KSwhKHR5cGVvZiB0IT0ib2JqZWN0Inx8dD09bnVsbCkpe2lmKEFycmF5LmlzQXJyYXkodCkpe3QuZm9yRWFjaChlPT5sMChlKSk7cmV0dXJufWZvcihsZXQgZSBvZiBPYmplY3Qua2V5cyh0KSl7aWYoWS5kZWJ1ZygiQ2hlY2tpbmcga2V5IixlKSxlLnN0YXJ0c1dpdGgoIl9fIil8fGUuaW5jbHVkZXMoInByb3RvIil8fGUuaW5jbHVkZXMoImNvbnN0ciIpfHwhJCQuaGFzKGUpfHx0W2VdPT1udWxsKXtZLmRlYnVnKCJzYW5pdGl6ZSBkZWxldGluZyBrZXk6ICIsZSksZGVsZXRlIHRbZV07Y29udGludWV9aWYodHlwZW9mIHRbZV09PSJvYmplY3QiKXtZLmRlYnVnKCJzYW5pdGl6aW5nIG9iamVjdCIsZSksbDAodFtlXSk7Y29udGludWV9bGV0IHI9WyJ0aGVtZUNTUyIsImZvbnRGYW1pbHkiLCJhbHRGb250RmFtaWx5Il07Zm9yKGxldCBuIG9mIHIpZS5pbmNsdWRlcyhuKSYmKFkuZGVidWcoInNhbml0aXppbmcgY3NzIG9wdGlvbiIsZSksdFtlXT1EeGUodFtlXSkpfWlmKHQudGhlbWVWYXJpYWJsZXMpZm9yKGxldCBlIG9mIE9iamVjdC5rZXlzKHQudGhlbWVWYXJpYWJsZXMpKXtsZXQgcj10LnRoZW1lVmFyaWFibGVzW2VdO3I/Lm1hdGNoJiYhci5tYXRjaCgvXltcZCAiIyUoKSwuO0EtWmEtel0rJC8pJiYodC50aGVtZVZhcmlhYmxlc1tlXT0iIil9WS5kZWJ1ZygiQWZ0ZXIgc2FuaXRpemF0aW9uIix0KX19LCJzYW5pdGl6ZURpcmVjdGl2ZSIpLER4ZT1vKHQ9PntsZXQgZT0wLHI9MDtmb3IobGV0IG4gb2YgdCl7aWYoZTxyKXJldHVybiJ7IC8qIEVSUk9SOiBVbmJhbGFuY2VkIENTUyAqLyB9IjtuPT09InsiP2UrKzpuPT09In0iJiZyKyt9cmV0dXJuIGUhPT1yPyJ7IC8qIEVSUk9SOiBVbmJhbGFuY2VkIENTUyAqLyB9Ijp0fSwic2FuaXRpemVDc3MiKX0pO3ZhciBsaCx4cyxHJCxjMCxEeSxZNCx0NyxWJCxVJCxyNyxYNCxjcixIJCxXJCxMeSxMeGUseiQsUnhlLHEkLGppPU4oKCk9PnsidXNlIHN0cmljdCI7czAoKTt2dCgpO3E0KCk7WWEoKTtlNygpO2xoPU9iamVjdC5mcmVlemUob3IpLHhzPUduKHt9LGxoKSxjMD1bXSxEeT1Hbih7fSxsaCksWTQ9bygodCxlKT0+e2xldCByPUduKHt9LHQpLG49e307Zm9yKGxldCBpIG9mIGUpSCQoaSksbj1HbihuLGkpO2lmKHI9R24ocixuKSxuLnRoZW1lJiZuLnRoZW1lIGluIFRvKXtsZXQgaT1Hbih7fSxHJCksYT1HbihpLnRoZW1lVmFyaWFibGVzfHx7fSxuLnRoZW1lVmFyaWFibGVzKTtyLnRoZW1lJiZyLnRoZW1lIGluIFRvJiYoci50aGVtZVZhcmlhYmxlcz1Ub1tyLnRoZW1lXS5nZXRUaGVtZVZhcmlhYmxlcyhhKSl9cmV0dXJuIER5PXIscSQoRHkpLER5fSwidXBkYXRlQ3VycmVudENvbmZpZyIpLHQ3PW8odD0+KHhzPUduKHt9LGxoKSx4cz1Hbih4cyx0KSx0LnRoZW1lJiZUb1t0LnRoZW1lXSYmKHhzLnRoZW1lVmFyaWFibGVzPVRvW3QudGhlbWVdLmdldFRoZW1lVmFyaWFibGVzKHQudGhlbWVWYXJpYWJsZXMpKSxZNCh4cyxjMCkseHMpLCJzZXRTaXRlQ29uZmlnIiksViQ9byh0PT57RyQ9R24oe30sdCl9LCJzYXZlQ29uZmlnRnJvbUluaXRpYWxpemUiKSxVJD1vKHQ9Pih4cz1Hbih4cyx0KSxZNCh4cyxjMCkseHMpLCJ1cGRhdGVTaXRlQ29uZmlnIikscjc9bygoKT0+R24oe30seHMpLCJnZXRTaXRlQ29uZmlnIiksWDQ9byh0PT4ocSQodCksR24oRHksdCksY3IoKSksInNldENvbmZpZyIpLGNyPW8oKCk9PkduKHt9LER5KSwiZ2V0Q29uZmlnIiksSCQ9byh0PT57dCYmKFsic2VjdXJlIiwuLi54cy5zZWN1cmU/P1tdXS5mb3JFYWNoKGU9PntPYmplY3QuaGFzT3duKHQsZSkmJihZLmRlYnVnKGBEZW5pZWQgYXR0ZW1wdCB0byBtb2RpZnkgYSBzZWN1cmUga2V5ICR7ZX1gLHRbZV0pLGRlbGV0ZSB0W2VdKX0pLE9iamVjdC5rZXlzKHQpLmZvckVhY2goZT0+e2Uuc3RhcnRzV2l0aCgiX18iKSYmZGVsZXRlIHRbZV19KSxPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGU9Pnt0eXBlb2YgdFtlXT09InN0cmluZyImJih0W2VdLmluY2x1ZGVzKCI8Iil8fHRbZV0uaW5jbHVkZXMoIj4iKXx8dFtlXS5pbmNsdWRlcygidXJsKGRhdGE6IikpJiZkZWxldGUgdFtlXSx0eXBlb2YgdFtlXT09Im9iamVjdCImJkgkKHRbZV0pfSkpfSwic2FuaXRpemUiKSxXJD1vKHQ9PntsMCh0KSx0LmZvbnRGYW1pbHkmJiF0LnRoZW1lVmFyaWFibGVzPy5mb250RmFtaWx5JiYodC50aGVtZVZhcmlhYmxlcz17Li4udC50aGVtZVZhcmlhYmxlcyxmb250RmFtaWx5OnQuZm9udEZhbWlseX0pLGMwLnB1c2godCksWTQoeHMsYzApfSwiYWRkRGlyZWN0aXZlIiksTHk9bygodD14cyk9PntjMD1bXSxZNCh0LGMwKX0sInJlc2V0IiksTHhlPXtMQVpZX0xPQURfREVQUkVDQVRFRDoiVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBsYXp5TG9hZGVkRGlhZ3JhbXMgYW5kIGxvYWRFeHRlcm5hbERpYWdyYW1zQXRTdGFydHVwIGFyZSBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHJlZ2lzdGVyRXh0ZXJuYWxEaWFncmFtcyBpbnN0ZWFkLiJ9LHokPXt9LFJ4ZT1vKHQ9Pnt6JFt0XXx8KFkud2FybihMeGVbdF0pLHokW3RdPSEwKX0sImlzc3VlV2FybmluZyIpLHEkPW8odD0+e3QmJih0LmxhenlMb2FkZWREaWFncmFtc3x8dC5sb2FkRXh0ZXJuYWxEaWFncmFtc0F0U3RhcnR1cCkmJlJ4ZSgiTEFaWV9MT0FEX0RFUFJFQ0FURUQiKX0sImNoZWNrQ29uZmlnIil9KTtmdW5jdGlvbiBLYSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkocj4xP3ItMTowKSxpPTE7aTxyO2krKyluW2ktMV09YXJndW1lbnRzW2ldO3JldHVybiBsNyh0LGUsbil9fWZ1bmN0aW9uICR4ZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShlKSxuPTA7bjxlO24rKylyW25dPWFyZ3VtZW50c1tuXTtyZXR1cm4gYzcodCxyKX19ZnVuY3Rpb24gQ3IodCxlKXtsZXQgcj1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06UTQ7WSQmJlkkKHQsbnVsbCk7bGV0IG49ZS5sZW5ndGg7Zm9yKDtuLS07KXtsZXQgaT1lW25dO2lmKHR5cGVvZiBpPT0ic3RyaW5nIil7bGV0IGE9cihpKTthIT09aSYmKE54ZShlKXx8KGVbbl09YSksaT1hKX10W2ldPSEwfXJldHVybiB0fWZ1bmN0aW9uIHp4ZSh0KXtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKylzbCh0LGUpfHwodFtlXT1udWxsKTtyZXR1cm4gdH1mdW5jdGlvbiBRZih0KXtsZXQgZT1ueihudWxsKTtmb3IobGV0W3Isbl1vZiByeih0KSlzbCh0LHIpJiYoQXJyYXkuaXNBcnJheShuKT9lW3JdPXp4ZShuKTpuJiZ0eXBlb2Ygbj09Im9iamVjdCImJm4uY29uc3RydWN0b3I9PT1PYmplY3Q/ZVtyXT1RZihuKTplW3JdPW4pO3JldHVybiBlfWZ1bmN0aW9uIEl5KHQsZSl7Zm9yKDt0IT09bnVsbDspe2xldCBuPUl4ZSh0LGUpO2lmKG4pe2lmKG4uZ2V0KXJldHVybiBLYShuLmdldCk7aWYodHlwZW9mIG4udmFsdWU9PSJmdW5jdGlvbiIpcmV0dXJuIEthKG4udmFsdWUpfXQ9TXhlKHQpfWZ1bmN0aW9uIHIoKXtyZXR1cm4gbnVsbH1yZXR1cm4gbyhyLCJmYWxsYmFja1ZhbHVlIikscn1mdW5jdGlvbiBzeigpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTpReGUoKSxlPW8oQXQ9PnN6KEF0KSwiRE9NUHVyaWZ5Iik7aWYoZS52ZXJzaW9uPSIzLjIuNCIsZS5yZW1vdmVkPVtdLCF0fHwhdC5kb2N1bWVudHx8dC5kb2N1bWVudC5ub2RlVHlwZSE9PU95LmRvY3VtZW50fHwhdC5FbGVtZW50KXJldHVybiBlLmlzU3VwcG9ydGVkPSExLGU7bGV0e2RvY3VtZW50OnJ9PXQsbj1yLGk9bi5jdXJyZW50U2NyaXB0LHtEb2N1bWVudEZyYWdtZW50OmEsSFRNTFRlbXBsYXRlRWxlbWVudDpzLE5vZGU6bCxFbGVtZW50OnUsTm9kZUZpbHRlcjpoLE5hbWVkTm9kZU1hcDpmPXQuTmFtZWROb2RlTWFwfHx0Lk1vek5hbWVkQXR0ck1hcCxIVE1MRm9ybUVsZW1lbnQ6ZCxET01QYXJzZXI6cCx0cnVzdGVkVHlwZXM6bX09dCxnPXUucHJvdG90eXBlLHk9SXkoZywiY2xvbmVOb2RlIiksdj1JeShnLCJyZW1vdmUiKSx4PUl5KGcsIm5leHRTaWJsaW5nIiksYj1JeShnLCJjaGlsZE5vZGVzIiksdz1JeShnLCJwYXJlbnROb2RlIik7aWYodHlwZW9mIHM9PSJmdW5jdGlvbiIpe2xldCBBdD1yLmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7QXQuY29udGVudCYmQXQuY29udGVudC5vd25lckRvY3VtZW50JiYocj1BdC5jb250ZW50Lm93bmVyRG9jdW1lbnQpfWxldCBDLFQ9IiIse2ltcGxlbWVudGF0aW9uOkUsY3JlYXRlTm9kZUl0ZXJhdG9yOkEsY3JlYXRlRG9jdW1lbnRGcmFnbWVudDpTLGdldEVsZW1lbnRzQnlUYWdOYW1lOl99PXIse2ltcG9ydE5vZGU6SX09bixEPXR6KCk7ZS5pc1N1cHBvcnRlZD10eXBlb2Ygcno9PSJmdW5jdGlvbiImJnR5cGVvZiB3PT0iZnVuY3Rpb24iJiZFJiZFLmNyZWF0ZUhUTUxEb2N1bWVudCE9PXZvaWQgMDtsZXR7TVVTVEFDSEVfRVhQUjprLEVSQl9FWFBSOkwsVE1QTElUX0VYUFI6UixEQVRBX0FUVFI6TyxBUklBX0FUVFI6TSxJU19TQ1JJUFRfT1JfREFUQTpCLEFUVFJfV0hJVEVTUEFDRTpGLENVU1RPTV9FTEVNRU5UOlB9PWV6LHtJU19BTExPV0VEX1VSSTp6fT1leiwkPW51bGwsSD1Dcih7fSxbLi4uSyQsLi4uaTcsLi4uYTcsLi4uczcsLi4uUSRdKSxRPW51bGwsaj1Dcih7fSxbLi4uWiQsLi4ubzcsLi4uSiQsLi4uSzRdKSxpZT1PYmplY3Quc2VhbChueihudWxsLHt0YWdOYW1lQ2hlY2s6e3dyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLHZhbHVlOm51bGx9LGF0dHJpYnV0ZU5hbWVDaGVjazp7d3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsdmFsdWU6bnVsbH0sYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzOnt3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCx2YWx1ZTohMX19KSksbmU9bnVsbCxsZT1udWxsLGhlPSEwLEs9ITAsWD0hMSx0ZT0hMCxKPSExLHNlPSEwLHVlPSExLFo9ITEsU2U9ITEsY2U9ITEsYWU9ITEsT2U9ITEsZ2U9ITAsemU9ITEsSGU9InVzZXItY29udGVudC0iLCRlPSEwLFJlPSExLEllPXt9LGJlPW51bGwsVz1Dcih7fSxbImFubm90YXRpb24teG1sIiwiYXVkaW8iLCJjb2xncm91cCIsImRlc2MiLCJmb3JlaWdub2JqZWN0IiwiaGVhZCIsImlmcmFtZSIsIm1hdGgiLCJtaSIsIm1uIiwibW8iLCJtcyIsIm10ZXh0Iiwibm9lbWJlZCIsIm5vZnJhbWVzIiwibm9zY3JpcHQiLCJwbGFpbnRleHQiLCJzY3JpcHQiLCJzdHlsZSIsInN2ZyIsInRlbXBsYXRlIiwidGhlYWQiLCJ0aXRsZSIsInZpZGVvIiwieG1wIl0pLGRlPW51bGwscmU9Q3Ioe30sWyJhdWRpbyIsInZpZGVvIiwiaW1nIiwic291cmNlIiwiaW1hZ2UiLCJ0cmFjayJdKSxvZT1udWxsLFY9Q3Ioe30sWyJhbHQiLCJjbGFzcyIsImZvciIsImlkIiwibGFiZWwiLCJuYW1lIiwicGF0dGVybiIsInBsYWNlaG9sZGVyIiwicm9sZSIsInN1bW1hcnkiLCJ0aXRsZSIsInZhbHVlIiwic3R5bGUiLCJ4bWxucyJdKSx4ZT0iaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCIscT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHBlPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIix2ZT1wZSxQZT0hMSxfZT1udWxsLHdlPUNyKHt9LFt4ZSxxLHBlXSxuNyksVmU9Q3Ioe30sWyJtaSIsIm1vIiwibW4iLCJtcyIsIm10ZXh0Il0pLERlPUNyKHt9LFsiYW5ub3RhdGlvbi14bWwiXSkscWU9Q3Ioe30sWyJ0aXRsZSIsInN0eWxlIiwiZm9udCIsImEiLCJzY3JpcHQiXSksYXQ9bnVsbCxSdD1bImFwcGxpY2F0aW9uL3hodG1sK3htbCIsInRleHQvaHRtbCJdLHN0PSJ0ZXh0L2h0bWwiLFVlPW51bGwsY3Q9bnVsbCxXZT1yLmNyZWF0ZUVsZW1lbnQoImZvcm0iKSxvdD1vKGZ1bmN0aW9uKENlKXtyZXR1cm4gQ2UgaW5zdGFuY2VvZiBSZWdFeHB8fENlIGluc3RhbmNlb2YgRnVuY3Rpb259LCJpc1JlZ2V4T3JGdW5jdGlvbiIpLFl0PW8oZnVuY3Rpb24oKXtsZXQgQ2U9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOnt9O2lmKCEoY3QmJmN0PT09Q2UpKXtpZigoIUNlfHx0eXBlb2YgQ2UhPSJvYmplY3QiKSYmKENlPXt9KSxDZT1RZihDZSksYXQ9UnQuaW5kZXhPZihDZS5QQVJTRVJfTUVESUFfVFlQRSk9PT0tMT9zdDpDZS5QQVJTRVJfTUVESUFfVFlQRSxVZT1hdD09PSJhcHBsaWNhdGlvbi94aHRtbCt4bWwiP243OlE0LCQ9c2woQ2UsIkFMTE9XRURfVEFHUyIpP0NyKHt9LENlLkFMTE9XRURfVEFHUyxVZSk6SCxRPXNsKENlLCJBTExPV0VEX0FUVFIiKT9Dcih7fSxDZS5BTExPV0VEX0FUVFIsVWUpOmosX2U9c2woQ2UsIkFMTE9XRURfTkFNRVNQQUNFUyIpP0NyKHt9LENlLkFMTE9XRURfTkFNRVNQQUNFUyxuNyk6d2Usb2U9c2woQ2UsIkFERF9VUklfU0FGRV9BVFRSIik/Q3IoUWYoViksQ2UuQUREX1VSSV9TQUZFX0FUVFIsVWUpOlYsZGU9c2woQ2UsIkFERF9EQVRBX1VSSV9UQUdTIik/Q3IoUWYocmUpLENlLkFERF9EQVRBX1VSSV9UQUdTLFVlKTpyZSxiZT1zbChDZSwiRk9SQklEX0NPTlRFTlRTIik/Q3Ioe30sQ2UuRk9SQklEX0NPTlRFTlRTLFVlKTpXLG5lPXNsKENlLCJGT1JCSURfVEFHUyIpP0NyKHt9LENlLkZPUkJJRF9UQUdTLFVlKTp7fSxsZT1zbChDZSwiRk9SQklEX0FUVFIiKT9Dcih7fSxDZS5GT1JCSURfQVRUUixVZSk6e30sSWU9c2woQ2UsIlVTRV9QUk9GSUxFUyIpP0NlLlVTRV9QUk9GSUxFUzohMSxoZT1DZS5BTExPV19BUklBX0FUVFIhPT0hMSxLPUNlLkFMTE9XX0RBVEFfQVRUUiE9PSExLFg9Q2UuQUxMT1dfVU5LTk9XTl9QUk9UT0NPTFN8fCExLHRlPUNlLkFMTE9XX1NFTEZfQ0xPU0VfSU5fQVRUUiE9PSExLEo9Q2UuU0FGRV9GT1JfVEVNUExBVEVTfHwhMSxzZT1DZS5TQUZFX0ZPUl9YTUwhPT0hMSx1ZT1DZS5XSE9MRV9ET0NVTUVOVHx8ITEsY2U9Q2UuUkVUVVJOX0RPTXx8ITEsYWU9Q2UuUkVUVVJOX0RPTV9GUkFHTUVOVHx8ITEsT2U9Q2UuUkVUVVJOX1RSVVNURURfVFlQRXx8ITEsU2U9Q2UuRk9SQ0VfQk9EWXx8ITEsZ2U9Q2UuU0FOSVRJWkVfRE9NIT09ITEsemU9Q2UuU0FOSVRJWkVfTkFNRURfUFJPUFN8fCExLCRlPUNlLktFRVBfQ09OVEVOVCE9PSExLFJlPUNlLklOX1BMQUNFfHwhMSx6PUNlLkFMTE9XRURfVVJJX1JFR0VYUHx8aXosdmU9Q2UuTkFNRVNQQUNFfHxwZSxWZT1DZS5NQVRITUxfVEVYVF9JTlRFR1JBVElPTl9QT0lOVFN8fFZlLERlPUNlLkhUTUxfSU5URUdSQVRJT05fUE9JTlRTfHxEZSxpZT1DZS5DVVNUT01fRUxFTUVOVF9IQU5ETElOR3x8e30sQ2UuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcmJm90KENlLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjaykmJihpZS50YWdOYW1lQ2hlY2s9Q2UuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrKSxDZS5DVVNUT01fRUxFTUVOVF9IQU5ETElORyYmb3QoQ2UuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrKSYmKGllLmF0dHJpYnV0ZU5hbWVDaGVjaz1DZS5DVVNUT01fRUxFTUVOVF9IQU5ETElORy5hdHRyaWJ1dGVOYW1lQ2hlY2spLENlLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HJiZ0eXBlb2YgQ2UuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzPT0iYm9vbGVhbiImJihpZS5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHM9Q2UuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzKSxKJiYoSz0hMSksYWUmJihjZT0hMCksSWUmJigkPUNyKHt9LFEkKSxRPVtdLEllLmh0bWw9PT0hMCYmKENyKCQsSyQpLENyKFEsWiQpKSxJZS5zdmc9PT0hMCYmKENyKCQsaTcpLENyKFEsbzcpLENyKFEsSzQpKSxJZS5zdmdGaWx0ZXJzPT09ITAmJihDcigkLGE3KSxDcihRLG83KSxDcihRLEs0KSksSWUubWF0aE1sPT09ITAmJihDcigkLHM3KSxDcihRLEokKSxDcihRLEs0KSkpLENlLkFERF9UQUdTJiYoJD09PUgmJigkPVFmKCQpKSxDcigkLENlLkFERF9UQUdTLFVlKSksQ2UuQUREX0FUVFImJihRPT09aiYmKFE9UWYoUSkpLENyKFEsQ2UuQUREX0FUVFIsVWUpKSxDZS5BRERfVVJJX1NBRkVfQVRUUiYmQ3Iob2UsQ2UuQUREX1VSSV9TQUZFX0FUVFIsVWUpLENlLkZPUkJJRF9DT05URU5UUyYmKGJlPT09VyYmKGJlPVFmKGJlKSksQ3IoYmUsQ2UuRk9SQklEX0NPTlRFTlRTLFVlKSksJGUmJigkWyIjdGV4dCJdPSEwKSx1ZSYmQ3IoJCxbImh0bWwiLCJoZWFkIiwiYm9keSJdKSwkLnRhYmxlJiYoQ3IoJCxbInRib2R5Il0pLGRlbGV0ZSBuZS50Ym9keSksQ2UuVFJVU1RFRF9UWVBFU19QT0xJQ1kpe2lmKHR5cGVvZiBDZS5UUlVTVEVEX1RZUEVTX1BPTElDWS5jcmVhdGVIVE1MIT0iZnVuY3Rpb24iKXRocm93IE15KCdUUlVTVEVEX1RZUEVTX1BPTElDWSBjb25maWd1cmF0aW9uIG9wdGlvbiBtdXN0IHByb3ZpZGUgYSAiY3JlYXRlSFRNTCIgaG9vay4nKTtpZih0eXBlb2YgQ2UuVFJVU1RFRF9UWVBFU19QT0xJQ1kuY3JlYXRlU2NyaXB0VVJMIT0iZnVuY3Rpb24iKXRocm93IE15KCdUUlVTVEVEX1RZUEVTX1BPTElDWSBjb25maWd1cmF0aW9uIG9wdGlvbiBtdXN0IHByb3ZpZGUgYSAiY3JlYXRlU2NyaXB0VVJMIiBob29rLicpO0M9Q2UuVFJVU1RFRF9UWVBFU19QT0xJQ1ksVD1DLmNyZWF0ZUhUTUwoIiIpfWVsc2UgQz09PXZvaWQgMCYmKEM9WnhlKG0saSkpLEMhPT1udWxsJiZ0eXBlb2YgVD09InN0cmluZyImJihUPUMuY3JlYXRlSFRNTCgiIikpO2phJiZqYShDZSksY3Q9Q2V9fSwiX3BhcnNlQ29uZmlnIiksYnQ9Q3Ioe30sWy4uLmk3LC4uLmE3LC4uLkd4ZV0pLE10PUNyKHt9LFsuLi5zNywuLi5WeGVdKSx4dD1vKGZ1bmN0aW9uKENlKXtsZXQgdHQ9dyhDZSk7KCF0dHx8IXR0LnRhZ05hbWUpJiYodHQ9e25hbWVzcGFjZVVSSTp2ZSx0YWdOYW1lOiJ0ZW1wbGF0ZSJ9KTtsZXQgU3Q9UTQoQ2UudGFnTmFtZSksbXI9UTQodHQudGFnTmFtZSk7cmV0dXJuIF9lW0NlLm5hbWVzcGFjZVVSSV0/Q2UubmFtZXNwYWNlVVJJPT09cT90dC5uYW1lc3BhY2VVUkk9PT1wZT9TdD09PSJzdmciOnR0Lm5hbWVzcGFjZVVSST09PXhlP1N0PT09InN2ZyImJihtcj09PSJhbm5vdGF0aW9uLXhtbCJ8fFZlW21yXSk6ISFidFtTdF06Q2UubmFtZXNwYWNlVVJJPT09eGU/dHQubmFtZXNwYWNlVVJJPT09cGU/U3Q9PT0ibWF0aCI6dHQubmFtZXNwYWNlVVJJPT09cT9TdD09PSJtYXRoIiYmRGVbbXJdOiEhTXRbU3RdOkNlLm5hbWVzcGFjZVVSST09PXBlP3R0Lm5hbWVzcGFjZVVSST09PXEmJiFEZVttcl18fHR0Lm5hbWVzcGFjZVVSST09PXhlJiYhVmVbbXJdPyExOiFNdFtTdF0mJihxZVtTdF18fCFidFtTdF0pOiEhKGF0PT09ImFwcGxpY2F0aW9uL3hodG1sK3htbCImJl9lW0NlLm5hbWVzcGFjZVVSSV0pOiExfSwiX2NoZWNrVmFsaWROYW1lc3BhY2UiKSx1dD1vKGZ1bmN0aW9uKENlKXtSeShlLnJlbW92ZWQse2VsZW1lbnQ6Q2V9KTt0cnl7dyhDZSkucmVtb3ZlQ2hpbGQoQ2UpfWNhdGNoe3YoQ2UpfX0sIl9mb3JjZVJlbW92ZSIpLEV0PW8oZnVuY3Rpb24oQ2UsdHQpe3RyeXtSeShlLnJlbW92ZWQse2F0dHJpYnV0ZTp0dC5nZXRBdHRyaWJ1dGVOb2RlKENlKSxmcm9tOnR0fSl9Y2F0Y2h7UnkoZS5yZW1vdmVkLHthdHRyaWJ1dGU6bnVsbCxmcm9tOnR0fSl9aWYodHQucmVtb3ZlQXR0cmlidXRlKENlKSxDZT09PSJpcyIpaWYoY2V8fGFlKXRyeXt1dCh0dCl9Y2F0Y2h7fWVsc2UgdHJ5e3R0LnNldEF0dHJpYnV0ZShDZSwiIil9Y2F0Y2h7fX0sIl9yZW1vdmVBdHRyaWJ1dGUiKSxmdD1vKGZ1bmN0aW9uKENlKXtsZXQgdHQ9bnVsbCxTdD1udWxsO2lmKFNlKUNlPSI8cmVtb3ZlPjwvcmVtb3ZlPiIrQ2U7ZWxzZXtsZXQgZ249aiQoQ2UsL15bXHJcblx0IF0rLyk7U3Q9Z24mJmduWzBdfWF0PT09ImFwcGxpY2F0aW9uL3hodG1sK3htbCImJnZlPT09cGUmJihDZT0nPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPjxoZWFkPjwvaGVhZD48Ym9keT4nK0NlKyI8L2JvZHk+PC9odG1sPiIpO2xldCBtcj1DP0MuY3JlYXRlSFRNTChDZSk6Q2U7aWYodmU9PT1wZSl0cnl7dHQ9bmV3IHAoKS5wYXJzZUZyb21TdHJpbmcobXIsYXQpfWNhdGNoe31pZighdHR8fCF0dC5kb2N1bWVudEVsZW1lbnQpe3R0PUUuY3JlYXRlRG9jdW1lbnQodmUsInRlbXBsYXRlIixudWxsKTt0cnl7dHQuZG9jdW1lbnRFbGVtZW50LmlubmVySFRNTD1QZT9UOm1yfWNhdGNoe319bGV0IHJuPXR0LmJvZHl8fHR0LmRvY3VtZW50RWxlbWVudDtyZXR1cm4gQ2UmJlN0JiZybi5pbnNlcnRCZWZvcmUoci5jcmVhdGVUZXh0Tm9kZShTdCkscm4uY2hpbGROb2Rlc1swXXx8bnVsbCksdmU9PT1wZT9fLmNhbGwodHQsdWU/Imh0bWwiOiJib2R5IilbMF06dWU/dHQuZG9jdW1lbnRFbGVtZW50OnJufSwiX2luaXREb2N1bWVudCIpLHl0PW8oZnVuY3Rpb24oQ2Upe3JldHVybiBBLmNhbGwoQ2Uub3duZXJEb2N1bWVudHx8Q2UsQ2UsaC5TSE9XX0VMRU1FTlR8aC5TSE9XX0NPTU1FTlR8aC5TSE9XX1RFWFR8aC5TSE9XX1BST0NFU1NJTkdfSU5TVFJVQ1RJT058aC5TSE9XX0NEQVRBX1NFQ1RJT04sbnVsbCl9LCJfY3JlYXRlTm9kZUl0ZXJhdG9yIiksbnQ9byhmdW5jdGlvbihDZSl7cmV0dXJuIENlIGluc3RhbmNlb2YgZCYmKHR5cGVvZiBDZS5ub2RlTmFtZSE9InN0cmluZyJ8fHR5cGVvZiBDZS50ZXh0Q29udGVudCE9InN0cmluZyJ8fHR5cGVvZiBDZS5yZW1vdmVDaGlsZCE9ImZ1bmN0aW9uInx8IShDZS5hdHRyaWJ1dGVzIGluc3RhbmNlb2YgZil8fHR5cGVvZiBDZS5yZW1vdmVBdHRyaWJ1dGUhPSJmdW5jdGlvbiJ8fHR5cGVvZiBDZS5zZXRBdHRyaWJ1dGUhPSJmdW5jdGlvbiJ8fHR5cGVvZiBDZS5uYW1lc3BhY2VVUkkhPSJzdHJpbmcifHx0eXBlb2YgQ2UuaW5zZXJ0QmVmb3JlIT0iZnVuY3Rpb24ifHx0eXBlb2YgQ2UuaGFzQ2hpbGROb2RlcyE9ImZ1bmN0aW9uIil9LCJfaXNDbG9iYmVyZWQiKSxkbj1vKGZ1bmN0aW9uKENlKXtyZXR1cm4gdHlwZW9mIGw9PSJmdW5jdGlvbiImJkNlIGluc3RhbmNlb2YgbH0sIl9pc05vZGUiKTtmdW5jdGlvbiBUdChBdCxDZSx0dCl7ajQoQXQsU3Q9PntTdC5jYWxsKGUsQ2UsdHQsY3QpfSl9byhUdCwiX2V4ZWN1dGVIb29rcyIpO2xldCBPbj1vKGZ1bmN0aW9uKENlKXtsZXQgdHQ9bnVsbDtpZihUdChELmJlZm9yZVNhbml0aXplRWxlbWVudHMsQ2UsbnVsbCksbnQoQ2UpKXJldHVybiB1dChDZSksITA7bGV0IFN0PVVlKENlLm5vZGVOYW1lKTtpZihUdChELnVwb25TYW5pdGl6ZUVsZW1lbnQsQ2Use3RhZ05hbWU6U3QsYWxsb3dlZFRhZ3M6JH0pLENlLmhhc0NoaWxkTm9kZXMoKSYmIWRuKENlLmZpcnN0RWxlbWVudENoaWxkKSYmWGEoLzxbL1x3XS9nLENlLmlubmVySFRNTCkmJlhhKC88Wy9cd10vZyxDZS50ZXh0Q29udGVudCl8fENlLm5vZGVUeXBlPT09T3kucHJvZ3Jlc3NpbmdJbnN0cnVjdGlvbnx8c2UmJkNlLm5vZGVUeXBlPT09T3kuY29tbWVudCYmWGEoLzxbL1x3XS9nLENlLmRhdGEpKXJldHVybiB1dChDZSksITA7aWYoISRbU3RdfHxuZVtTdF0pe2lmKCFuZVtTdF0mJl9yKFN0KSYmKGllLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCYmWGEoaWUudGFnTmFtZUNoZWNrLFN0KXx8aWUudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24mJmllLnRhZ05hbWVDaGVjayhTdCkpKXJldHVybiExO2lmKCRlJiYhYmVbU3RdKXtsZXQgbXI9dyhDZSl8fENlLnBhcmVudE5vZGUscm49YihDZSl8fENlLmNoaWxkTm9kZXM7aWYocm4mJm1yKXtsZXQgZ249cm4ubGVuZ3RoO2ZvcihsZXQgWnI9Z24tMTtacj49MDstLVpyKXtsZXQgTmk9eShybltacl0sITApO05pLl9fcmVtb3ZhbENvdW50PShDZS5fX3JlbW92YWxDb3VudHx8MCkrMSxtci5pbnNlcnRCZWZvcmUoTmkseChDZSkpfX19cmV0dXJuIHV0KENlKSwhMH1yZXR1cm4gQ2UgaW5zdGFuY2VvZiB1JiYheHQoQ2UpfHwoU3Q9PT0ibm9zY3JpcHQifHxTdD09PSJub2VtYmVkInx8U3Q9PT0ibm9mcmFtZXMiKSYmWGEoLzxcL25vKHNjcmlwdHxlbWJlZHxmcmFtZXMpL2ksQ2UuaW5uZXJIVE1MKT8odXQoQ2UpLCEwKTooSiYmQ2Uubm9kZVR5cGU9PT1PeS50ZXh0JiYodHQ9Q2UudGV4dENvbnRlbnQsajQoW2ssTCxSXSxtcj0+e3R0PU55KHR0LG1yLCIgIil9KSxDZS50ZXh0Q29udGVudCE9PXR0JiYoUnkoZS5yZW1vdmVkLHtlbGVtZW50OkNlLmNsb25lTm9kZSgpfSksQ2UudGV4dENvbnRlbnQ9dHQpKSxUdChELmFmdGVyU2FuaXRpemVFbGVtZW50cyxDZSxudWxsKSwhMSl9LCJfc2FuaXRpemVFbGVtZW50cyIpLHRuPW8oZnVuY3Rpb24oQ2UsdHQsU3Qpe2lmKGdlJiYodHQ9PT0iaWQifHx0dD09PSJuYW1lIikmJihTdCBpbiByfHxTdCBpbiBXZSkpcmV0dXJuITE7aWYoIShLJiYhbGVbdHRdJiZYYShPLHR0KSkpe2lmKCEoaGUmJlhhKE0sdHQpKSl7aWYoIVFbdHRdfHxsZVt0dF0pe2lmKCEoX3IoQ2UpJiYoaWUudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiZYYShpZS50YWdOYW1lQ2hlY2ssQ2UpfHxpZS50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYmaWUudGFnTmFtZUNoZWNrKENlKSkmJihpZS5hdHRyaWJ1dGVOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAmJlhhKGllLmF0dHJpYnV0ZU5hbWVDaGVjayx0dCl8fGllLmF0dHJpYnV0ZU5hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZpZS5hdHRyaWJ1dGVOYW1lQ2hlY2sodHQpKXx8dHQ9PT0iaXMiJiZpZS5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHMmJihpZS50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAmJlhhKGllLnRhZ05hbWVDaGVjayxTdCl8fGllLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZpZS50YWdOYW1lQ2hlY2soU3QpKSkpcmV0dXJuITF9ZWxzZSBpZighb2VbdHRdKXtpZighWGEoeixOeShTdCxGLCIiKSkpe2lmKCEoKHR0PT09InNyYyJ8fHR0PT09InhsaW5rOmhyZWYifHx0dD09PSJocmVmIikmJkNlIT09InNjcmlwdCImJkJ4ZShTdCwiZGF0YToiKT09PTAmJmRlW0NlXSkpe2lmKCEoWCYmIVhhKEIsTnkoU3QsRiwiIikpKSl7aWYoU3QpcmV0dXJuITF9fX19fX1yZXR1cm4hMH0sIl9pc1ZhbGlkQXR0cmlidXRlIiksX3I9byhmdW5jdGlvbihDZSl7cmV0dXJuIENlIT09ImFubm90YXRpb24teG1sIiYmaiQoQ2UsUCl9LCJfaXNCYXNpY0N1c3RvbUVsZW1lbnQiKSxEcj1vKGZ1bmN0aW9uKENlKXtUdChELmJlZm9yZVNhbml0aXplQXR0cmlidXRlcyxDZSxudWxsKTtsZXR7YXR0cmlidXRlczp0dH09Q2U7aWYoIXR0fHxudChDZSkpcmV0dXJuO2xldCBTdD17YXR0ck5hbWU6IiIsYXR0clZhbHVlOiIiLGtlZXBBdHRyOiEwLGFsbG93ZWRBdHRyaWJ1dGVzOlEsZm9yY2VLZWVwQXR0cjp2b2lkIDB9LG1yPXR0Lmxlbmd0aDtmb3IoO21yLS07KXtsZXQgcm49dHRbbXJdLHtuYW1lOmduLG5hbWVzcGFjZVVSSTpacix2YWx1ZTpOaX09cm4sWm49VWUoZ24pLFNuPWduPT09InZhbHVlIj9OaTpGeGUoTmkpO2lmKFN0LmF0dHJOYW1lPVpuLFN0LmF0dHJWYWx1ZT1TbixTdC5rZWVwQXR0cj0hMCxTdC5mb3JjZUtlZXBBdHRyPXZvaWQgMCxUdChELnVwb25TYW5pdGl6ZUF0dHJpYnV0ZSxDZSxTdCksU249U3QuYXR0clZhbHVlLHplJiYoWm49PT0iaWQifHxabj09PSJuYW1lIikmJihFdChnbixDZSksU249SGUrU24pLHNlJiZYYSgvKCgtLSE/fF0pPil8PFwvKHN0eWxlfHRpdGxlKS9pLFNuKSl7RXQoZ24sQ2UpO2NvbnRpbnVlfWlmKFN0LmZvcmNlS2VlcEF0dHJ8fChFdChnbixDZSksIVN0LmtlZXBBdHRyKSljb250aW51ZTtpZighdGUmJlhhKC9cLz4vaSxTbikpe0V0KGduLENlKTtjb250aW51ZX1KJiZqNChbayxMLFJdLGV0PT57U249TnkoU24sZXQsIiAiKX0pO2xldCBIcj1VZShDZS5ub2RlTmFtZSk7aWYodG4oSHIsWm4sU24pKXtpZihDJiZ0eXBlb2YgbT09Im9iamVjdCImJnR5cGVvZiBtLmdldEF0dHJpYnV0ZVR5cGU9PSJmdW5jdGlvbiImJiFacilzd2l0Y2gobS5nZXRBdHRyaWJ1dGVUeXBlKEhyLFpuKSl7Y2FzZSJUcnVzdGVkSFRNTCI6e1NuPUMuY3JlYXRlSFRNTChTbik7YnJlYWt9Y2FzZSJUcnVzdGVkU2NyaXB0VVJMIjp7U249Qy5jcmVhdGVTY3JpcHRVUkwoU24pO2JyZWFrfX10cnl7WnI/Q2Uuc2V0QXR0cmlidXRlTlMoWnIsZ24sU24pOkNlLnNldEF0dHJpYnV0ZShnbixTbiksbnQoQ2UpP3V0KENlKTpYJChlLnJlbW92ZWQpfWNhdGNoe319fVR0KEQuYWZ0ZXJTYW5pdGl6ZUF0dHJpYnV0ZXMsQ2UsbnVsbCl9LCJfc2FuaXRpemVBdHRyaWJ1dGVzIiksUG49byhmdW5jdGlvbiBBdChDZSl7bGV0IHR0PW51bGwsU3Q9eXQoQ2UpO2ZvcihUdChELmJlZm9yZVNhbml0aXplU2hhZG93RE9NLENlLG51bGwpO3R0PVN0Lm5leHROb2RlKCk7KVR0KEQudXBvblNhbml0aXplU2hhZG93Tm9kZSx0dCxudWxsKSxPbih0dCksRHIodHQpLHR0LmNvbnRlbnQgaW5zdGFuY2VvZiBhJiZBdCh0dC5jb250ZW50KTtUdChELmFmdGVyU2FuaXRpemVTaGFkb3dET00sQ2UsbnVsbCl9LCJfc2FuaXRpemVTaGFkb3dET00iKTtyZXR1cm4gZS5zYW5pdGl6ZT1mdW5jdGlvbihBdCl7bGV0IENlPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fSx0dD1udWxsLFN0PW51bGwsbXI9bnVsbCxybj1udWxsO2lmKFBlPSFBdCxQZSYmKEF0PSI8IS0tPiIpLHR5cGVvZiBBdCE9InN0cmluZyImJiFkbihBdCkpaWYodHlwZW9mIEF0LnRvU3RyaW5nPT0iZnVuY3Rpb24iKXtpZihBdD1BdC50b1N0cmluZygpLHR5cGVvZiBBdCE9InN0cmluZyIpdGhyb3cgTXkoImRpcnR5IGlzIG5vdCBhIHN0cmluZywgYWJvcnRpbmciKX1lbHNlIHRocm93IE15KCJ0b1N0cmluZyBpcyBub3QgYSBmdW5jdGlvbiIpO2lmKCFlLmlzU3VwcG9ydGVkKXJldHVybiBBdDtpZihafHxZdChDZSksZS5yZW1vdmVkPVtdLHR5cGVvZiBBdD09InN0cmluZyImJihSZT0hMSksUmUpe2lmKEF0Lm5vZGVOYW1lKXtsZXQgTmk9VWUoQXQubm9kZU5hbWUpO2lmKCEkW05pXXx8bmVbTmldKXRocm93IE15KCJyb290IG5vZGUgaXMgZm9yYmlkZGVuIGFuZCBjYW5ub3QgYmUgc2FuaXRpemVkIGluLXBsYWNlIil9fWVsc2UgaWYoQXQgaW5zdGFuY2VvZiBsKXR0PWZ0KCI8IS0tLS0+IiksU3Q9dHQub3duZXJEb2N1bWVudC5pbXBvcnROb2RlKEF0LCEwKSxTdC5ub2RlVHlwZT09PU95LmVsZW1lbnQmJlN0Lm5vZGVOYW1lPT09IkJPRFkifHxTdC5ub2RlTmFtZT09PSJIVE1MIj90dD1TdDp0dC5hcHBlbmRDaGlsZChTdCk7ZWxzZXtpZighY2UmJiFKJiYhdWUmJkF0LmluZGV4T2YoIjwiKT09PS0xKXJldHVybiBDJiZPZT9DLmNyZWF0ZUhUTUwoQXQpOkF0O2lmKHR0PWZ0KEF0KSwhdHQpcmV0dXJuIGNlP251bGw6T2U/VDoiIn10dCYmU2UmJnV0KHR0LmZpcnN0Q2hpbGQpO2xldCBnbj15dChSZT9BdDp0dCk7Zm9yKDttcj1nbi5uZXh0Tm9kZSgpOylPbihtciksRHIobXIpLG1yLmNvbnRlbnQgaW5zdGFuY2VvZiBhJiZQbihtci5jb250ZW50KTtpZihSZSlyZXR1cm4gQXQ7aWYoY2Upe2lmKGFlKWZvcihybj1TLmNhbGwodHQub3duZXJEb2N1bWVudCk7dHQuZmlyc3RDaGlsZDspcm4uYXBwZW5kQ2hpbGQodHQuZmlyc3RDaGlsZCk7ZWxzZSBybj10dDtyZXR1cm4oUS5zaGFkb3dyb290fHxRLnNoYWRvd3Jvb3Rtb2RlKSYmKHJuPUkuY2FsbChuLHJuLCEwKSkscm59bGV0IFpyPXVlP3R0Lm91dGVySFRNTDp0dC5pbm5lckhUTUw7cmV0dXJuIHVlJiYkWyIhZG9jdHlwZSJdJiZ0dC5vd25lckRvY3VtZW50JiZ0dC5vd25lckRvY3VtZW50LmRvY3R5cGUmJnR0Lm93bmVyRG9jdW1lbnQuZG9jdHlwZS5uYW1lJiZYYShheix0dC5vd25lckRvY3VtZW50LmRvY3R5cGUubmFtZSkmJihacj0iPCFET0NUWVBFICIrdHQub3duZXJEb2N1bWVudC5kb2N0eXBlLm5hbWUrYD4KYCtaciksSiYmajQoW2ssTCxSXSxOaT0+e1pyPU55KFpyLE5pLCIgIil9KSxDJiZPZT9DLmNyZWF0ZUhUTUwoWnIpOlpyfSxlLnNldENvbmZpZz1mdW5jdGlvbigpe2xldCBBdD1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06e307WXQoQXQpLFo9ITB9LGUuY2xlYXJDb25maWc9ZnVuY3Rpb24oKXtjdD1udWxsLFo9ITF9LGUuaXNWYWxpZEF0dHJpYnV0ZT1mdW5jdGlvbihBdCxDZSx0dCl7Y3R8fFl0KHt9KTtsZXQgU3Q9VWUoQXQpLG1yPVVlKENlKTtyZXR1cm4gdG4oU3QsbXIsdHQpfSxlLmFkZEhvb2s9ZnVuY3Rpb24oQXQsQ2Upe3R5cGVvZiBDZT09ImZ1bmN0aW9uIiYmUnkoRFtBdF0sQ2UpfSxlLnJlbW92ZUhvb2s9ZnVuY3Rpb24oQXQsQ2Upe2lmKENlIT09dm9pZCAwKXtsZXQgdHQ9T3hlKERbQXRdLENlKTtyZXR1cm4gdHQ9PT0tMT92b2lkIDA6UHhlKERbQXRdLHR0LDEpWzBdfXJldHVybiBYJChEW0F0XSl9LGUucmVtb3ZlSG9va3M9ZnVuY3Rpb24oQXQpe0RbQXRdPVtdfSxlLnJlbW92ZUFsbEhvb2tzPWZ1bmN0aW9uKCl7RD10eigpfSxlfXZhciByeixZJCxOeGUsTXhlLEl4ZSxqYSxrbyxueixsNyxjNyxqNCxPeGUsWCQsUnksUHhlLFE0LG43LGokLE55LEJ4ZSxGeGUsc2wsWGEsTXksSyQsaTcsYTcsR3hlLHM3LFZ4ZSxRJCxaJCxvNyxKJCxLNCxVeGUsSHhlLFd4ZSxxeGUsWXhlLGl6LFh4ZSxqeGUsYXosS3hlLGV6LE95LFF4ZSxaeGUsdHosY2gsdTc9TigoKT0+eyJ1c2Ugc3RyaWN0Ijsoe2VudHJpZXM6cnosc2V0UHJvdG90eXBlT2Y6WSQsaXNGcm96ZW46TnhlLGdldFByb3RvdHlwZU9mOk14ZSxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6SXhlfT1PYmplY3QpLHtmcmVlemU6amEsc2VhbDprbyxjcmVhdGU6bnp9PU9iamVjdCx7YXBwbHk6bDcsY29uc3RydWN0OmM3fT10eXBlb2YgUmVmbGVjdDwidSImJlJlZmxlY3Q7amF8fChqYT1vKGZ1bmN0aW9uKGUpe3JldHVybiBlfSwiZnJlZXplIikpO2tvfHwoa289byhmdW5jdGlvbihlKXtyZXR1cm4gZX0sInNlYWwiKSk7bDd8fChsNz1vKGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gZS5hcHBseShyLG4pfSwiYXBwbHkiKSk7Yzd8fChjNz1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIG5ldyBlKC4uLnIpfSwiY29uc3RydWN0IikpO2o0PUthKEFycmF5LnByb3RvdHlwZS5mb3JFYWNoKSxPeGU9S2EoQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mKSxYJD1LYShBcnJheS5wcm90b3R5cGUucG9wKSxSeT1LYShBcnJheS5wcm90b3R5cGUucHVzaCksUHhlPUthKEFycmF5LnByb3RvdHlwZS5zcGxpY2UpLFE0PUthKFN0cmluZy5wcm90b3R5cGUudG9Mb3dlckNhc2UpLG43PUthKFN0cmluZy5wcm90b3R5cGUudG9TdHJpbmcpLGokPUthKFN0cmluZy5wcm90b3R5cGUubWF0Y2gpLE55PUthKFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSksQnhlPUthKFN0cmluZy5wcm90b3R5cGUuaW5kZXhPZiksRnhlPUthKFN0cmluZy5wcm90b3R5cGUudHJpbSksc2w9S2EoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSksWGE9S2EoUmVnRXhwLnByb3RvdHlwZS50ZXN0KSxNeT0keGUoVHlwZUVycm9yKTtvKEthLCJ1bmFwcGx5Iik7bygkeGUsInVuY29uc3RydWN0Iik7byhDciwiYWRkVG9TZXQiKTtvKHp4ZSwiY2xlYW5BcnJheSIpO28oUWYsImNsb25lIik7byhJeSwibG9va3VwR2V0dGVyIik7SyQ9amEoWyJhIiwiYWJiciIsImFjcm9ueW0iLCJhZGRyZXNzIiwiYXJlYSIsImFydGljbGUiLCJhc2lkZSIsImF1ZGlvIiwiYiIsImJkaSIsImJkbyIsImJpZyIsImJsaW5rIiwiYmxvY2txdW90ZSIsImJvZHkiLCJiciIsImJ1dHRvbiIsImNhbnZhcyIsImNhcHRpb24iLCJjZW50ZXIiLCJjaXRlIiwiY29kZSIsImNvbCIsImNvbGdyb3VwIiwiY29udGVudCIsImRhdGEiLCJkYXRhbGlzdCIsImRkIiwiZGVjb3JhdG9yIiwiZGVsIiwiZGV0YWlscyIsImRmbiIsImRpYWxvZyIsImRpciIsImRpdiIsImRsIiwiZHQiLCJlbGVtZW50IiwiZW0iLCJmaWVsZHNldCIsImZpZ2NhcHRpb24iLCJmaWd1cmUiLCJmb250IiwiZm9vdGVyIiwiZm9ybSIsImgxIiwiaDIiLCJoMyIsImg0IiwiaDUiLCJoNiIsImhlYWQiLCJoZWFkZXIiLCJoZ3JvdXAiLCJociIsImh0bWwiLCJpIiwiaW1nIiwiaW5wdXQiLCJpbnMiLCJrYmQiLCJsYWJlbCIsImxlZ2VuZCIsImxpIiwibWFpbiIsIm1hcCIsIm1hcmsiLCJtYXJxdWVlIiwibWVudSIsIm1lbnVpdGVtIiwibWV0ZXIiLCJuYXYiLCJub2JyIiwib2wiLCJvcHRncm91cCIsIm9wdGlvbiIsIm91dHB1dCIsInAiLCJwaWN0dXJlIiwicHJlIiwicHJvZ3Jlc3MiLCJxIiwicnAiLCJydCIsInJ1YnkiLCJzIiwic2FtcCIsInNlY3Rpb24iLCJzZWxlY3QiLCJzaGFkb3ciLCJzbWFsbCIsInNvdXJjZSIsInNwYWNlciIsInNwYW4iLCJzdHJpa2UiLCJzdHJvbmciLCJzdHlsZSIsInN1YiIsInN1bW1hcnkiLCJzdXAiLCJ0YWJsZSIsInRib2R5IiwidGQiLCJ0ZW1wbGF0ZSIsInRleHRhcmVhIiwidGZvb3QiLCJ0aCIsInRoZWFkIiwidGltZSIsInRyIiwidHJhY2siLCJ0dCIsInUiLCJ1bCIsInZhciIsInZpZGVvIiwid2JyIl0pLGk3PWphKFsic3ZnIiwiYSIsImFsdGdseXBoIiwiYWx0Z2x5cGhkZWYiLCJhbHRnbHlwaGl0ZW0iLCJhbmltYXRlY29sb3IiLCJhbmltYXRlbW90aW9uIiwiYW5pbWF0ZXRyYW5zZm9ybSIsImNpcmNsZSIsImNsaXBwYXRoIiwiZGVmcyIsImRlc2MiLCJlbGxpcHNlIiwiZmlsdGVyIiwiZm9udCIsImciLCJnbHlwaCIsImdseXBocmVmIiwiaGtlcm4iLCJpbWFnZSIsImxpbmUiLCJsaW5lYXJncmFkaWVudCIsIm1hcmtlciIsIm1hc2siLCJtZXRhZGF0YSIsIm1wYXRoIiwicGF0aCIsInBhdHRlcm4iLCJwb2x5Z29uIiwicG9seWxpbmUiLCJyYWRpYWxncmFkaWVudCIsInJlY3QiLCJzdG9wIiwic3R5bGUiLCJzd2l0Y2giLCJzeW1ib2wiLCJ0ZXh0IiwidGV4dHBhdGgiLCJ0aXRsZSIsInRyZWYiLCJ0c3BhbiIsInZpZXciLCJ2a2VybiJdKSxhNz1qYShbImZlQmxlbmQiLCJmZUNvbG9yTWF0cml4IiwiZmVDb21wb25lbnRUcmFuc2ZlciIsImZlQ29tcG9zaXRlIiwiZmVDb252b2x2ZU1hdHJpeCIsImZlRGlmZnVzZUxpZ2h0aW5nIiwiZmVEaXNwbGFjZW1lbnRNYXAiLCJmZURpc3RhbnRMaWdodCIsImZlRHJvcFNoYWRvdyIsImZlRmxvb2QiLCJmZUZ1bmNBIiwiZmVGdW5jQiIsImZlRnVuY0ciLCJmZUZ1bmNSIiwiZmVHYXVzc2lhbkJsdXIiLCJmZUltYWdlIiwiZmVNZXJnZSIsImZlTWVyZ2VOb2RlIiwiZmVNb3JwaG9sb2d5IiwiZmVPZmZzZXQiLCJmZVBvaW50TGlnaHQiLCJmZVNwZWN1bGFyTGlnaHRpbmciLCJmZVNwb3RMaWdodCIsImZlVGlsZSIsImZlVHVyYnVsZW5jZSJdKSxHeGU9amEoWyJhbmltYXRlIiwiY29sb3ItcHJvZmlsZSIsImN1cnNvciIsImRpc2NhcmQiLCJmb250LWZhY2UiLCJmb250LWZhY2UtZm9ybWF0IiwiZm9udC1mYWNlLW5hbWUiLCJmb250LWZhY2Utc3JjIiwiZm9udC1mYWNlLXVyaSIsImZvcmVpZ25vYmplY3QiLCJoYXRjaCIsImhhdGNocGF0aCIsIm1lc2giLCJtZXNoZ3JhZGllbnQiLCJtZXNocGF0Y2giLCJtZXNocm93IiwibWlzc2luZy1nbHlwaCIsInNjcmlwdCIsInNldCIsInNvbGlkY29sb3IiLCJ1bmtub3duIiwidXNlIl0pLHM3PWphKFsibWF0aCIsIm1lbmNsb3NlIiwibWVycm9yIiwibWZlbmNlZCIsIm1mcmFjIiwibWdseXBoIiwibWkiLCJtbGFiZWxlZHRyIiwibW11bHRpc2NyaXB0cyIsIm1uIiwibW8iLCJtb3ZlciIsIm1wYWRkZWQiLCJtcGhhbnRvbSIsIm1yb290IiwibXJvdyIsIm1zIiwibXNwYWNlIiwibXNxcnQiLCJtc3R5bGUiLCJtc3ViIiwibXN1cCIsIm1zdWJzdXAiLCJtdGFibGUiLCJtdGQiLCJtdGV4dCIsIm10ciIsIm11bmRlciIsIm11bmRlcm92ZXIiLCJtcHJlc2NyaXB0cyJdKSxWeGU9amEoWyJtYWN0aW9uIiwibWFsaWduZ3JvdXAiLCJtYWxpZ25tYXJrIiwibWxvbmdkaXYiLCJtc2NhcnJpZXMiLCJtc2NhcnJ5IiwibXNncm91cCIsIm1zdGFjayIsIm1zbGluZSIsIm1zcm93Iiwic2VtYW50aWNzIiwiYW5ub3RhdGlvbiIsImFubm90YXRpb24teG1sIiwibXByZXNjcmlwdHMiLCJub25lIl0pLFEkPWphKFsiI3RleHQiXSksWiQ9amEoWyJhY2NlcHQiLCJhY3Rpb24iLCJhbGlnbiIsImFsdCIsImF1dG9jYXBpdGFsaXplIiwiYXV0b2NvbXBsZXRlIiwiYXV0b3BpY3R1cmVpbnBpY3R1cmUiLCJhdXRvcGxheSIsImJhY2tncm91bmQiLCJiZ2NvbG9yIiwiYm9yZGVyIiwiY2FwdHVyZSIsImNlbGxwYWRkaW5nIiwiY2VsbHNwYWNpbmciLCJjaGVja2VkIiwiY2l0ZSIsImNsYXNzIiwiY2xlYXIiLCJjb2xvciIsImNvbHMiLCJjb2xzcGFuIiwiY29udHJvbHMiLCJjb250cm9sc2xpc3QiLCJjb29yZHMiLCJjcm9zc29yaWdpbiIsImRhdGV0aW1lIiwiZGVjb2RpbmciLCJkZWZhdWx0IiwiZGlyIiwiZGlzYWJsZWQiLCJkaXNhYmxlcGljdHVyZWlucGljdHVyZSIsImRpc2FibGVyZW1vdGVwbGF5YmFjayIsImRvd25sb2FkIiwiZHJhZ2dhYmxlIiwiZW5jdHlwZSIsImVudGVya2V5aGludCIsImZhY2UiLCJmb3IiLCJoZWFkZXJzIiwiaGVpZ2h0IiwiaGlkZGVuIiwiaGlnaCIsImhyZWYiLCJocmVmbGFuZyIsImlkIiwiaW5wdXRtb2RlIiwiaW50ZWdyaXR5IiwiaXNtYXAiLCJraW5kIiwibGFiZWwiLCJsYW5nIiwibGlzdCIsImxvYWRpbmciLCJsb29wIiwibG93IiwibWF4IiwibWF4bGVuZ3RoIiwibWVkaWEiLCJtZXRob2QiLCJtaW4iLCJtaW5sZW5ndGgiLCJtdWx0aXBsZSIsIm11dGVkIiwibmFtZSIsIm5vbmNlIiwibm9zaGFkZSIsIm5vdmFsaWRhdGUiLCJub3dyYXAiLCJvcGVuIiwib3B0aW11bSIsInBhdHRlcm4iLCJwbGFjZWhvbGRlciIsInBsYXlzaW5saW5lIiwicG9wb3ZlciIsInBvcG92ZXJ0YXJnZXQiLCJwb3BvdmVydGFyZ2V0YWN0aW9uIiwicG9zdGVyIiwicHJlbG9hZCIsInB1YmRhdGUiLCJyYWRpb2dyb3VwIiwicmVhZG9ubHkiLCJyZWwiLCJyZXF1aXJlZCIsInJldiIsInJldmVyc2VkIiwicm9sZSIsInJvd3MiLCJyb3dzcGFuIiwic3BlbGxjaGVjayIsInNjb3BlIiwic2VsZWN0ZWQiLCJzaGFwZSIsInNpemUiLCJzaXplcyIsInNwYW4iLCJzcmNsYW5nIiwic3RhcnQiLCJzcmMiLCJzcmNzZXQiLCJzdGVwIiwic3R5bGUiLCJzdW1tYXJ5IiwidGFiaW5kZXgiLCJ0aXRsZSIsInRyYW5zbGF0ZSIsInR5cGUiLCJ1c2VtYXAiLCJ2YWxpZ24iLCJ2YWx1ZSIsIndpZHRoIiwid3JhcCIsInhtbG5zIiwic2xvdCJdKSxvNz1qYShbImFjY2VudC1oZWlnaHQiLCJhY2N1bXVsYXRlIiwiYWRkaXRpdmUiLCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJhbXBsaXR1ZGUiLCJhc2NlbnQiLCJhdHRyaWJ1dGVuYW1lIiwiYXR0cmlidXRldHlwZSIsImF6aW11dGgiLCJiYXNlZnJlcXVlbmN5IiwiYmFzZWxpbmUtc2hpZnQiLCJiZWdpbiIsImJpYXMiLCJieSIsImNsYXNzIiwiY2xpcCIsImNsaXBwYXRodW5pdHMiLCJjbGlwLXBhdGgiLCJjbGlwLXJ1bGUiLCJjb2xvciIsImNvbG9yLWludGVycG9sYXRpb24iLCJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMiLCJjb2xvci1wcm9maWxlIiwiY29sb3ItcmVuZGVyaW5nIiwiY3giLCJjeSIsImQiLCJkeCIsImR5IiwiZGlmZnVzZWNvbnN0YW50IiwiZGlyZWN0aW9uIiwiZGlzcGxheSIsImRpdmlzb3IiLCJkdXIiLCJlZGdlbW9kZSIsImVsZXZhdGlvbiIsImVuZCIsImV4cG9uZW50IiwiZmlsbCIsImZpbGwtb3BhY2l0eSIsImZpbGwtcnVsZSIsImZpbHRlciIsImZpbHRlcnVuaXRzIiwiZmxvb2QtY29sb3IiLCJmbG9vZC1vcGFjaXR5IiwiZm9udC1mYW1pbHkiLCJmb250LXNpemUiLCJmb250LXNpemUtYWRqdXN0IiwiZm9udC1zdHJldGNoIiwiZm9udC1zdHlsZSIsImZvbnQtdmFyaWFudCIsImZvbnQtd2VpZ2h0IiwiZngiLCJmeSIsImcxIiwiZzIiLCJnbHlwaC1uYW1lIiwiZ2x5cGhyZWYiLCJncmFkaWVudHVuaXRzIiwiZ3JhZGllbnR0cmFuc2Zvcm0iLCJoZWlnaHQiLCJocmVmIiwiaWQiLCJpbWFnZS1yZW5kZXJpbmciLCJpbiIsImluMiIsImludGVyY2VwdCIsImsiLCJrMSIsImsyIiwiazMiLCJrNCIsImtlcm5pbmciLCJrZXlwb2ludHMiLCJrZXlzcGxpbmVzIiwia2V5dGltZXMiLCJsYW5nIiwibGVuZ3RoYWRqdXN0IiwibGV0dGVyLXNwYWNpbmciLCJrZXJuZWxtYXRyaXgiLCJrZXJuZWx1bml0bGVuZ3RoIiwibGlnaHRpbmctY29sb3IiLCJsb2NhbCIsIm1hcmtlci1lbmQiLCJtYXJrZXItbWlkIiwibWFya2VyLXN0YXJ0IiwibWFya2VyaGVpZ2h0IiwibWFya2VydW5pdHMiLCJtYXJrZXJ3aWR0aCIsIm1hc2tjb250ZW50dW5pdHMiLCJtYXNrdW5pdHMiLCJtYXgiLCJtYXNrIiwibWVkaWEiLCJtZXRob2QiLCJtb2RlIiwibWluIiwibmFtZSIsIm51bW9jdGF2ZXMiLCJvZmZzZXQiLCJvcGVyYXRvciIsIm9wYWNpdHkiLCJvcmRlciIsIm9yaWVudCIsIm9yaWVudGF0aW9uIiwib3JpZ2luIiwib3ZlcmZsb3ciLCJwYWludC1vcmRlciIsInBhdGgiLCJwYXRobGVuZ3RoIiwicGF0dGVybmNvbnRlbnR1bml0cyIsInBhdHRlcm50cmFuc2Zvcm0iLCJwYXR0ZXJudW5pdHMiLCJwb2ludHMiLCJwcmVzZXJ2ZWFscGhhIiwicHJlc2VydmVhc3BlY3RyYXRpbyIsInByaW1pdGl2ZXVuaXRzIiwiciIsInJ4IiwicnkiLCJyYWRpdXMiLCJyZWZ4IiwicmVmeSIsInJlcGVhdGNvdW50IiwicmVwZWF0ZHVyIiwicmVzdGFydCIsInJlc3VsdCIsInJvdGF0ZSIsInNjYWxlIiwic2VlZCIsInNoYXBlLXJlbmRlcmluZyIsInNsb3BlIiwic3BlY3VsYXJjb25zdGFudCIsInNwZWN1bGFyZXhwb25lbnQiLCJzcHJlYWRtZXRob2QiLCJzdGFydG9mZnNldCIsInN0ZGRldmlhdGlvbiIsInN0aXRjaHRpbGVzIiwic3RvcC1jb2xvciIsInN0b3Atb3BhY2l0eSIsInN0cm9rZS1kYXNoYXJyYXkiLCJzdHJva2UtZGFzaG9mZnNldCIsInN0cm9rZS1saW5lY2FwIiwic3Ryb2tlLWxpbmVqb2luIiwic3Ryb2tlLW1pdGVybGltaXQiLCJzdHJva2Utb3BhY2l0eSIsInN0cm9rZSIsInN0cm9rZS13aWR0aCIsInN0eWxlIiwic3VyZmFjZXNjYWxlIiwic3lzdGVtbGFuZ3VhZ2UiLCJ0YWJpbmRleCIsInRhYmxldmFsdWVzIiwidGFyZ2V0eCIsInRhcmdldHkiLCJ0cmFuc2Zvcm0iLCJ0cmFuc2Zvcm0tb3JpZ2luIiwidGV4dC1hbmNob3IiLCJ0ZXh0LWRlY29yYXRpb24iLCJ0ZXh0LXJlbmRlcmluZyIsInRleHRsZW5ndGgiLCJ0eXBlIiwidTEiLCJ1MiIsInVuaWNvZGUiLCJ2YWx1ZXMiLCJ2aWV3Ym94IiwidmlzaWJpbGl0eSIsInZlcnNpb24iLCJ2ZXJ0LWFkdi15IiwidmVydC1vcmlnaW4teCIsInZlcnQtb3JpZ2luLXkiLCJ3aWR0aCIsIndvcmQtc3BhY2luZyIsIndyYXAiLCJ3cml0aW5nLW1vZGUiLCJ4Y2hhbm5lbHNlbGVjdG9yIiwieWNoYW5uZWxzZWxlY3RvciIsIngiLCJ4MSIsIngyIiwieG1sbnMiLCJ5IiwieTEiLCJ5MiIsInoiLCJ6b29tYW5kcGFuIl0pLEokPWphKFsiYWNjZW50IiwiYWNjZW50dW5kZXIiLCJhbGlnbiIsImJldmVsbGVkIiwiY2xvc2UiLCJjb2x1bW5zYWxpZ24iLCJjb2x1bW5saW5lcyIsImNvbHVtbnNwYW4iLCJkZW5vbWFsaWduIiwiZGVwdGgiLCJkaXIiLCJkaXNwbGF5IiwiZGlzcGxheXN0eWxlIiwiZW5jb2RpbmciLCJmZW5jZSIsImZyYW1lIiwiaGVpZ2h0IiwiaHJlZiIsImlkIiwibGFyZ2VvcCIsImxlbmd0aCIsImxpbmV0aGlja25lc3MiLCJsc3BhY2UiLCJscXVvdGUiLCJtYXRoYmFja2dyb3VuZCIsIm1hdGhjb2xvciIsIm1hdGhzaXplIiwibWF0aHZhcmlhbnQiLCJtYXhzaXplIiwibWluc2l6ZSIsIm1vdmFibGVsaW1pdHMiLCJub3RhdGlvbiIsIm51bWFsaWduIiwib3BlbiIsInJvd2FsaWduIiwicm93bGluZXMiLCJyb3dzcGFjaW5nIiwicm93c3BhbiIsInJzcGFjZSIsInJxdW90ZSIsInNjcmlwdGxldmVsIiwic2NyaXB0bWluc2l6ZSIsInNjcmlwdHNpemVtdWx0aXBsaWVyIiwic2VsZWN0aW9uIiwic2VwYXJhdG9yIiwic2VwYXJhdG9ycyIsInN0cmV0Y2h5Iiwic3Vic2NyaXB0c2hpZnQiLCJzdXBzY3JpcHRzaGlmdCIsInN5bW1ldHJpYyIsInZvZmZzZXQiLCJ3aWR0aCIsInhtbG5zIl0pLEs0PWphKFsieGxpbms6aHJlZiIsInhtbDppZCIsInhsaW5rOnRpdGxlIiwieG1sOnNwYWNlIiwieG1sbnM6eGxpbmsiXSksVXhlPWtvKC9ce1x7W1x3XFddKnxbXHdcV10qXH1cfS9nbSksSHhlPWtvKC88JVtcd1xXXSp8W1x3XFddKiU+L2dtKSxXeGU9a28oL1wkXHtbXHdcV10qL2dtKSxxeGU9a28oL15kYXRhLVtcLVx3Llx1MDBCNy1cdUZGRkZdKyQvKSxZeGU9a28oL15hcmlhLVtcLVx3XSskLyksaXo9a28oL14oPzooPzooPzpmfGh0KXRwcz98bWFpbHRvfHRlbHxjYWxsdG98c21zfGNpZHx4bXBwKTp8W15hLXpdfFthLXorLlwtXSsoPzpbXmEteisuXC06XXwkKSkvaSksWHhlPWtvKC9eKD86XHcrc2NyaXB0fGRhdGEpOi9pKSxqeGU9a28oL1tcdTAwMDAtXHUwMDIwXHUwMEEwXHUxNjgwXHUxODBFXHUyMDAwLVx1MjAyOVx1MjA1Rlx1MzAwMF0vZyksYXo9a28oL15odG1sJC9pKSxLeGU9a28oL15bYS16XVsuXHddKigtWy5cd10rKSskL2kpLGV6PU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLEFSSUFfQVRUUjpZeGUsQVRUUl9XSElURVNQQUNFOmp4ZSxDVVNUT01fRUxFTUVOVDpLeGUsREFUQV9BVFRSOnF4ZSxET0NUWVBFX05BTUU6YXosRVJCX0VYUFI6SHhlLElTX0FMTE9XRURfVVJJOml6LElTX1NDUklQVF9PUl9EQVRBOlh4ZSxNVVNUQUNIRV9FWFBSOlV4ZSxUTVBMSVRfRVhQUjpXeGV9KSxPeT17ZWxlbWVudDoxLGF0dHJpYnV0ZToyLHRleHQ6MyxjZGF0YVNlY3Rpb246NCxlbnRpdHlSZWZlcmVuY2U6NSxlbnRpdHlOb2RlOjYscHJvZ3Jlc3NpbmdJbnN0cnVjdGlvbjo3LGNvbW1lbnQ6OCxkb2N1bWVudDo5LGRvY3VtZW50VHlwZToxMCxkb2N1bWVudEZyYWdtZW50OjExLG5vdGF0aW9uOjEyfSxReGU9byhmdW5jdGlvbigpe3JldHVybiB0eXBlb2Ygd2luZG93PiJ1Ij9udWxsOndpbmRvd30sImdldEdsb2JhbCIpLFp4ZT1vKGZ1bmN0aW9uKGUscil7aWYodHlwZW9mIGUhPSJvYmplY3QifHx0eXBlb2YgZS5jcmVhdGVQb2xpY3khPSJmdW5jdGlvbiIpcmV0dXJuIG51bGw7bGV0IG49bnVsbCxpPSJkYXRhLXR0LXBvbGljeS1zdWZmaXgiO3ImJnIuaGFzQXR0cmlidXRlKGkpJiYobj1yLmdldEF0dHJpYnV0ZShpKSk7bGV0IGE9ImRvbXB1cmlmeSIrKG4/IiMiK246IiIpO3RyeXtyZXR1cm4gZS5jcmVhdGVQb2xpY3koYSx7Y3JlYXRlSFRNTChzKXtyZXR1cm4gc30sY3JlYXRlU2NyaXB0VVJMKHMpe3JldHVybiBzfX0pfWNhdGNoe3JldHVybiBjb25zb2xlLndhcm4oIlRydXN0ZWRUeXBlcyBwb2xpY3kgIithKyIgY291bGQgbm90IGJlIGNyZWF0ZWQuIiksbnVsbH19LCJfY3JlYXRlVHJ1c3RlZFR5cGVzUG9saWN5IiksdHo9byhmdW5jdGlvbigpe3JldHVybnthZnRlclNhbml0aXplQXR0cmlidXRlczpbXSxhZnRlclNhbml0aXplRWxlbWVudHM6W10sYWZ0ZXJTYW5pdGl6ZVNoYWRvd0RPTTpbXSxiZWZvcmVTYW5pdGl6ZUF0dHJpYnV0ZXM6W10sYmVmb3JlU2FuaXRpemVFbGVtZW50czpbXSxiZWZvcmVTYW5pdGl6ZVNoYWRvd0RPTTpbXSx1cG9uU2FuaXRpemVBdHRyaWJ1dGU6W10sdXBvblNhbml0aXplRWxlbWVudDpbXSx1cG9uU2FuaXRpemVTaGFkb3dOb2RlOltdfX0sIl9jcmVhdGVIb29rc01hcCIpO28oc3osImNyZWF0ZURPTVB1cmlmeSIpO2NoPXN6KCl9KTt2YXIgTUc9e307aHIoTUcse2RlZmF1bHQ6KCk9PnE0ZX0pO2Z1bmN0aW9uIGFiZSh0KXtyZXR1cm4gU3RyaW5nKHQpLnJlcGxhY2UoaWJlLGU9Pm5iZVtlXSl9ZnVuY3Rpb24gY2JlKHQpe2lmKHQuZGVmYXVsdClyZXR1cm4gdC5kZWZhdWx0O3ZhciBlPXQudHlwZSxyPUFycmF5LmlzQXJyYXkoZSk/ZVswXTplO2lmKHR5cGVvZiByIT0ic3RyaW5nIilyZXR1cm4gci5lbnVtWzBdO3N3aXRjaChyKXtjYXNlImJvb2xlYW4iOnJldHVybiExO2Nhc2Uic3RyaW5nIjpyZXR1cm4iIjtjYXNlIm51bWJlciI6cmV0dXJuIDA7Y2FzZSJvYmplY3QiOnJldHVybnt9fX1mdW5jdGlvbiBnYmUodCl7Zm9yKHZhciBlPTA7ZTxrNy5sZW5ndGg7ZSsrKWZvcih2YXIgcj1rN1tlXSxuPTA7bjxyLmJsb2Nrcy5sZW5ndGg7bisrKXt2YXIgaT1yLmJsb2Nrc1tuXTtpZih0Pj1pWzBdJiZ0PD1pWzFdKXJldHVybiByLm5hbWV9cmV0dXJuIG51bGx9ZnVuY3Rpb24gJHoodCl7Zm9yKHZhciBlPTA7ZTx1My5sZW5ndGg7ZSs9MilpZih0Pj11M1tlXSYmdDw9dTNbZSsxXSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBBYmUodCxlKXtqbFt0XT1lfWZ1bmN0aW9uIFA3KHQsZSxyKXtpZighamxbZV0pdGhyb3cgbmV3IEVycm9yKCJGb250IG1ldHJpY3Mgbm90IGZvdW5kIGZvciBmb250OiAiK2UrIi4iKTt2YXIgbj10LmNoYXJDb2RlQXQoMCksaT1qbFtlXVtuXTtpZighaSYmdFswXWluIGx6JiYobj1selt0WzBdXS5jaGFyQ29kZUF0KDApLGk9amxbZV1bbl0pLCFpJiZyPT09InRleHQiJiYkeihuKSYmKGk9amxbZV1bNzddKSxpKXJldHVybntkZXB0aDppWzBdLGhlaWdodDppWzFdLGl0YWxpYzppWzJdLHNrZXc6aVszXSx3aWR0aDppWzRdfX1mdW5jdGlvbiBfYmUodCl7dmFyIGU7aWYodD49NT9lPTA6dD49Mz9lPTE6ZT0yLCFoN1tlXSl7dmFyIHI9aDdbZV09e2Nzc0VtUGVyTXU6WjQucXVhZFtlXS8xOH07Zm9yKHZhciBuIGluIFo0KVo0Lmhhc093blByb3BlcnR5KG4pJiYocltuXT1aNFtuXVtlXSl9cmV0dXJuIGg3W2VdfWZ1bmN0aW9uIGh6KHQpe2lmKHQgaW5zdGFuY2VvZiBUcylyZXR1cm4gdDt0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIHN5bWJvbE5vZGUgYnV0IGdvdCAiK1N0cmluZyh0KSsiLiIpfWZ1bmN0aW9uIE5iZSh0KXtpZih0IGluc3RhbmNlb2YgdGQpcmV0dXJuIHQ7dGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBzcGFuPEh0bWxEb21Ob2RlPiBidXQgZ290ICIrU3RyaW5nKHQpKyIuIil9ZnVuY3Rpb24gRyh0LGUscixuLGksYSl7QW5bdF1baV09e2ZvbnQ6ZSxncm91cDpyLHJlcGxhY2U6bn0sYSYmbiYmKEFuW3RdW25dPUFuW3RdW2ldKX1mdW5jdGlvbiBOdCh0KXtmb3IodmFye3R5cGU6ZSxuYW1lczpyLHByb3BzOm4saGFuZGxlcjppLGh0bWxCdWlsZGVyOmEsbWF0aG1sQnVpbGRlcjpzfT10LGw9e3R5cGU6ZSxudW1BcmdzOm4ubnVtQXJncyxhcmdUeXBlczpuLmFyZ1R5cGVzLGFsbG93ZWRJbkFyZ3VtZW50OiEhbi5hbGxvd2VkSW5Bcmd1bWVudCxhbGxvd2VkSW5UZXh0OiEhbi5hbGxvd2VkSW5UZXh0LGFsbG93ZWRJbk1hdGg6bi5hbGxvd2VkSW5NYXRoPT09dm9pZCAwPyEwOm4uYWxsb3dlZEluTWF0aCxudW1PcHRpb25hbEFyZ3M6bi5udW1PcHRpb25hbEFyZ3N8fDAsaW5maXg6ISFuLmluZml4LHByaW1pdGl2ZTohIW4ucHJpbWl0aXZlLGhhbmRsZXI6aX0sdT0wO3U8ci5sZW5ndGg7Kyt1KWp6W3JbdV1dPWw7ZSYmKGEmJihwM1tlXT1hKSxzJiYobTNbZV09cykpfWZ1bmN0aW9uIHJkKHQpe3Zhcnt0eXBlOmUsaHRtbEJ1aWxkZXI6cixtYXRobWxCdWlsZGVyOm59PXQ7TnQoe3R5cGU6ZSxuYW1lczpbXSxwcm9wczp7bnVtQXJnczowfSxoYW5kbGVyKCl7dGhyb3cgbmV3IEVycm9yKCJTaG91bGQgbmV2ZXIgYmUgY2FsbGVkLiIpfSxodG1sQnVpbGRlcjpyLG1hdGhtbEJ1aWxkZXI6bn0pfWZ1bmN0aW9uIGEzKHQsZSl7dmFyIHI9bHUoWyJiYXNlIl0sdCxlKSxuPWx1KFsic3RydXQiXSk7cmV0dXJuIG4uc3R5bGUuaGVpZ2h0PWt0KHIuaGVpZ2h0K3IuZGVwdGgpLHIuZGVwdGgmJihuLnN0eWxlLnZlcnRpY2FsQWxpZ249a3QoLXIuZGVwdGgpKSxyLmNoaWxkcmVuLnVuc2hpZnQobikscn1mdW5jdGlvbiBfNyh0LGUpe3ZhciByPW51bGw7dC5sZW5ndGg9PT0xJiZ0WzBdLnR5cGU9PT0idGFnIiYmKHI9dFswXS50YWcsdD10WzBdLmJvZHkpO3ZhciBuPVBpKHQsZSwicm9vdCIpLGk7bi5sZW5ndGg9PT0yJiZuWzFdLmhhc0NsYXNzKCJ0YWciKSYmKGk9bi5wb3AoKSk7Zm9yKHZhciBhPVtdLHM9W10sbD0wO2w8bi5sZW5ndGg7bCsrKWlmKHMucHVzaChuW2xdKSxuW2xdLmhhc0NsYXNzKCJtYmluIil8fG5bbF0uaGFzQ2xhc3MoIm1yZWwiKXx8bltsXS5oYXNDbGFzcygiYWxsb3dicmVhayIpKXtmb3IodmFyIHU9ITE7bDxuLmxlbmd0aC0xJiZuW2wrMV0uaGFzQ2xhc3MoIm1zcGFjZSIpJiYhbltsKzFdLmhhc0NsYXNzKCJuZXdsaW5lIik7KWwrKyxzLnB1c2gobltsXSksbltsXS5oYXNDbGFzcygibm9icmVhayIpJiYodT0hMCk7dXx8KGEucHVzaChhMyhzLGUpKSxzPVtdKX1lbHNlIG5bbF0uaGFzQ2xhc3MoIm5ld2xpbmUiKSYmKHMucG9wKCkscy5sZW5ndGg+MCYmKGEucHVzaChhMyhzLGUpKSxzPVtdKSxhLnB1c2gobltsXSkpO3MubGVuZ3RoPjAmJmEucHVzaChhMyhzLGUpKTt2YXIgaDtyPyhoPWEzKFBpKHIsZSwhMCkpLGguY2xhc3Nlcz1bInRhZyJdLGEucHVzaChoKSk6aSYmYS5wdXNoKGkpO3ZhciBmPWx1KFsia2F0ZXgtaHRtbCJdLGEpO2lmKGYuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsInRydWUiKSxoKXt2YXIgZD1oLmNoaWxkcmVuWzBdO2Quc3R5bGUuaGVpZ2h0PWt0KGYuaGVpZ2h0K2YuZGVwdGgpLGYuZGVwdGgmJihkLnN0eWxlLnZlcnRpY2FsQWxpZ249a3QoLWYuZGVwdGgpKX1yZXR1cm4gZn1mdW5jdGlvbiBReih0KXtyZXR1cm4gbmV3IGVkKHQpfWZ1bmN0aW9uIGd6KHQsZSxyLG4saSl7dmFyIGE9a3ModCxyKSxzO2EubGVuZ3RoPT09MSYmYVswXWluc3RhbmNlb2Ygd3MmJkp0LmNvbnRhaW5zKFsibXJvdyIsIm10YWJsZSJdLGFbMF0udHlwZSk/cz1hWzBdOnM9bmV3IGR0Lk1hdGhOb2RlKCJtcm93IixhKTt2YXIgbD1uZXcgZHQuTWF0aE5vZGUoImFubm90YXRpb24iLFtuZXcgZHQuVGV4dE5vZGUoZSldKTtsLnNldEF0dHJpYnV0ZSgiZW5jb2RpbmciLCJhcHBsaWNhdGlvbi94LXRleCIpO3ZhciB1PW5ldyBkdC5NYXRoTm9kZSgic2VtYW50aWNzIixbcyxsXSksaD1uZXcgZHQuTWF0aE5vZGUoIm1hdGgiLFt1XSk7aC5zZXRBdHRyaWJ1dGUoInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCIpLG4mJmguc2V0QXR0cmlidXRlKCJkaXNwbGF5IiwiYmxvY2siKTt2YXIgZj1pPyJrYXRleCI6ImthdGV4LW1hdGhtbCI7cmV0dXJuIEJlLm1ha2VTcGFuKFtmXSxbaF0pfWZ1bmN0aW9uIHhyKHQsZSl7aWYoIXR8fHQudHlwZSE9PWUpdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBub2RlIG9mIHR5cGUgIitlKyIsIGJ1dCBnb3QgIisodD8ibm9kZSBvZiB0eXBlICIrdC50eXBlOlN0cmluZyh0KSkpO3JldHVybiB0fWZ1bmN0aW9uIHo3KHQpe3ZhciBlPXczKHQpO2lmKCFlKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgbm9kZSBvZiBzeW1ib2wgZ3JvdXAgdHlwZSwgYnV0IGdvdCAiKyh0PyJub2RlIG9mIHR5cGUgIit0LnR5cGU6U3RyaW5nKHQpKSk7cmV0dXJuIGV9ZnVuY3Rpb24gdzModCl7cmV0dXJuIHQmJih0LnR5cGU9PT0iYXRvbSJ8fEliZS5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpKT90Om51bGx9ZnVuY3Rpb24gdEcodCxlKXt2YXIgcj1QaSh0LmJvZHksZSwhMCk7cmV0dXJuIHU0ZShbdC5tY2xhc3NdLHIsZSl9ZnVuY3Rpb24gckcodCxlKXt2YXIgcixuPWtzKHQuYm9keSxlKTtyZXR1cm4gdC5tY2xhc3M9PT0ibWlubmVyIj9yPW5ldyBkdC5NYXRoTm9kZSgibXBhZGRlZCIsbik6dC5tY2xhc3M9PT0ibW9yZCI/dC5pc0NoYXJhY3RlckJveD8ocj1uWzBdLHIudHlwZT0ibWkiKTpyPW5ldyBkdC5NYXRoTm9kZSgibWkiLG4pOih0LmlzQ2hhcmFjdGVyQm94PyhyPW5bMF0sci50eXBlPSJtbyIpOnI9bmV3IGR0Lk1hdGhOb2RlKCJtbyIsbiksdC5tY2xhc3M9PT0ibWJpbiI/KHIuYXR0cmlidXRlcy5sc3BhY2U9IjAuMjJlbSIsci5hdHRyaWJ1dGVzLnJzcGFjZT0iMC4yMmVtIik6dC5tY2xhc3M9PT0ibXB1bmN0Ij8oci5hdHRyaWJ1dGVzLmxzcGFjZT0iMGVtIixyLmF0dHJpYnV0ZXMucnNwYWNlPSIwLjE3ZW0iKTp0Lm1jbGFzcz09PSJtb3BlbiJ8fHQubWNsYXNzPT09Im1jbG9zZSI/KHIuYXR0cmlidXRlcy5sc3BhY2U9IjBlbSIsci5hdHRyaWJ1dGVzLnJzcGFjZT0iMGVtIik6dC5tY2xhc3M9PT0ibWlubmVyIiYmKHIuYXR0cmlidXRlcy5sc3BhY2U9IjAuMDU1NmVtIixyLmF0dHJpYnV0ZXMud2lkdGg9IiswLjExMTFlbSIpKSxyfWZ1bmN0aW9uIGQ0ZSh0LGUscil7dmFyIG49aDRlW3RdO3N3aXRjaChuKXtjYXNlIlxcXFxjZHJpZ2h0YXJyb3ciOmNhc2UiXFxcXGNkbGVmdGFycm93IjpyZXR1cm4gci5jYWxsRnVuY3Rpb24obixbZVswXV0sW2VbMV1dKTtjYXNlIlxcdXBhcnJvdyI6Y2FzZSJcXGRvd25hcnJvdyI6e3ZhciBpPXIuY2FsbEZ1bmN0aW9uKCJcXFxcY2RsZWZ0IixbZVswXV0sW10pLGE9e3R5cGU6ImF0b20iLHRleHQ6bixtb2RlOiJtYXRoIixmYW1pbHk6InJlbCJ9LHM9ci5jYWxsRnVuY3Rpb24oIlxcQmlnIixbYV0sW10pLGw9ci5jYWxsRnVuY3Rpb24oIlxcXFxjZHJpZ2h0IixbZVsxXV0sW10pLHU9e3R5cGU6Im9yZGdyb3VwIixtb2RlOiJtYXRoIixib2R5OltpLHMsbF19O3JldHVybiByLmNhbGxGdW5jdGlvbigiXFxcXGNkcGFyZW50IixbdV0sW10pfWNhc2UiXFxcXGNkbG9uZ2VxdWFsIjpyZXR1cm4gci5jYWxsRnVuY3Rpb24oIlxcXFxjZGxvbmdlcXVhbCIsW10sW10pO2Nhc2UiXFxWZXJ0Ijp7dmFyIGg9e3R5cGU6InRleHRvcmQiLHRleHQ6IlxcVmVydCIsbW9kZToibWF0aCJ9O3JldHVybiByLmNhbGxGdW5jdGlvbigiXFxCaWciLFtoXSxbXSl9ZGVmYXVsdDpyZXR1cm57dHlwZToidGV4dG9yZCIsdGV4dDoiICIsbW9kZToibWF0aCJ9fX1mdW5jdGlvbiBwNGUodCl7dmFyIGU9W107Zm9yKHQuZ3VsbGV0LmJlZ2luR3JvdXAoKSx0Lmd1bGxldC5tYWNyb3Muc2V0KCJcXGNyIiwiXFxcXFxccmVsYXgiKSx0Lmd1bGxldC5iZWdpbkdyb3VwKCk7Oyl7ZS5wdXNoKHQucGFyc2VFeHByZXNzaW9uKCExLCJcXFxcIikpLHQuZ3VsbGV0LmVuZEdyb3VwKCksdC5ndWxsZXQuYmVnaW5Hcm91cCgpO3ZhciByPXQuZmV0Y2goKS50ZXh0O2lmKHI9PT0iJiJ8fHI9PT0iXFxcXCIpdC5jb25zdW1lKCk7ZWxzZSBpZihyPT09IlxcZW5kIil7ZVtlLmxlbmd0aC0xXS5sZW5ndGg9PT0wJiZlLnBvcCgpO2JyZWFrfWVsc2UgdGhyb3cgbmV3IGd0KCJFeHBlY3RlZCBcXFxcIG9yIFxcY3Igb3IgXFxlbmQiLHQubmV4dFRva2VuKX1mb3IodmFyIG49W10saT1bbl0sYT0wO2E8ZS5sZW5ndGg7YSsrKXtmb3IodmFyIHM9ZVthXSxsPXl6KCksdT0wO3U8cy5sZW5ndGg7dSsrKWlmKCF2eihzW3VdKSlsLmJvZHkucHVzaChzW3VdKTtlbHNle24ucHVzaChsKSx1Kz0xO3ZhciBoPXo3KHNbdV0pLnRleHQsZj1uZXcgQXJyYXkoMik7aWYoZlswXT17dHlwZToib3JkZ3JvdXAiLG1vZGU6Im1hdGgiLGJvZHk6W119LGZbMV09e3R5cGU6Im9yZGdyb3VwIixtb2RlOiJtYXRoIixib2R5OltdfSwhKCI9fC4iLmluZGV4T2YoaCk+LTEpKWlmKCI8PkFWIi5pbmRleE9mKGgpPi0xKWZvcih2YXIgZD0wO2Q8MjtkKyspe2Zvcih2YXIgcD0hMCxtPXUrMTttPHMubGVuZ3RoO20rKyl7aWYoZjRlKHNbbV0saCkpe3A9ITEsdT1tO2JyZWFrfWlmKHZ6KHNbbV0pKXRocm93IG5ldyBndCgiTWlzc2luZyBhICIraCsiIGNoYXJhY3RlciB0byBjb21wbGV0ZSBhIENEIGFycm93LiIsc1ttXSk7ZltkXS5ib2R5LnB1c2goc1ttXSl9aWYocCl0aHJvdyBuZXcgZ3QoIk1pc3NpbmcgYSAiK2grIiBjaGFyYWN0ZXIgdG8gY29tcGxldGUgYSBDRCBhcnJvdy4iLHNbdV0pfWVsc2UgdGhyb3cgbmV3IGd0KCdFeHBlY3RlZCBvbmUgb2YgIjw+QVY9fC4iIGFmdGVyIEAnLHNbdV0pO3ZhciBnPWQ0ZShoLGYsdCkseT17dHlwZToic3R5bGluZyIsYm9keTpbZ10sbW9kZToibWF0aCIsc3R5bGU6ImRpc3BsYXkifTtuLnB1c2goeSksbD15eigpfWElMj09PTA/bi5wdXNoKGwpOm4uc2hpZnQoKSxuPVtdLGkucHVzaChuKX10Lmd1bGxldC5lbmRHcm91cCgpLHQuZ3VsbGV0LmVuZEdyb3VwKCk7dmFyIHY9bmV3IEFycmF5KGlbMF0ubGVuZ3RoKS5maWxsKHt0eXBlOiJhbGlnbiIsYWxpZ246ImMiLHByZWdhcDouMjUscG9zdGdhcDouMjV9KTtyZXR1cm57dHlwZToiYXJyYXkiLG1vZGU6Im1hdGgiLGJvZHk6aSxhcnJheXN0cmV0Y2g6MSxhZGRKb3Q6ITAscm93R2FwczpbbnVsbF0sY29sczp2LGNvbFNlcGFyYXRpb25UeXBlOiJDRCIsaExpbmVzQmVmb3JlUm93Om5ldyBBcnJheShpLmxlbmd0aCsxKS5maWxsKFtdKX19ZnVuY3Rpb24gazModCxlKXt2YXIgcj13Myh0KTtpZihyJiZKdC5jb250YWlucyhBNGUsci50ZXh0KSlyZXR1cm4gcjt0aHJvdyByP25ldyBndCgiSW52YWxpZCBkZWxpbWl0ZXIgJyIrci50ZXh0KyInIGFmdGVyICciK2UuZnVuY05hbWUrIiciLHQpOm5ldyBndCgiSW52YWxpZCBkZWxpbWl0ZXIgdHlwZSAnIit0LnR5cGUrIiciLHQpfWZ1bmN0aW9uIGJ6KHQpe2lmKCF0LmJvZHkpdGhyb3cgbmV3IEVycm9yKCJCdWc6IFRoZSBsZWZ0cmlnaHQgUGFyc2VOb2RlIHdhc24ndCBmdWxseSBwYXJzZWQuIil9ZnVuY3Rpb24gUWwodCl7Zm9yKHZhcnt0eXBlOmUsbmFtZXM6cixwcm9wczpuLGhhbmRsZXI6aSxodG1sQnVpbGRlcjphLG1hdGhtbEJ1aWxkZXI6c309dCxsPXt0eXBlOmUsbnVtQXJnczpuLm51bUFyZ3N8fDAsYWxsb3dlZEluVGV4dDohMSxudW1PcHRpb25hbEFyZ3M6MCxoYW5kbGVyOml9LHU9MDt1PHIubGVuZ3RoOysrdSltR1tyW3VdXT1sO2EmJihwM1tlXT1hKSxzJiYobTNbZV09cyl9ZnVuY3Rpb24gZmUodCxlKXtnR1t0XT1lfWZ1bmN0aW9uIHd6KHQpe3ZhciBlPVtdO3QuY29uc3VtZVNwYWNlcygpO3ZhciByPXQuZmV0Y2goKS50ZXh0O2ZvcihyPT09IlxccmVsYXgiJiYodC5jb25zdW1lKCksdC5jb25zdW1lU3BhY2VzKCkscj10LmZldGNoKCkudGV4dCk7cj09PSJcXGhsaW5lInx8cj09PSJcXGhkYXNobGluZSI7KXQuY29uc3VtZSgpLGUucHVzaChyPT09IlxcaGRhc2hsaW5lIiksdC5jb25zdW1lU3BhY2VzKCkscj10LmZldGNoKCkudGV4dDtyZXR1cm4gZX1mdW5jdGlvbiBXNyh0KXtpZih0LmluZGV4T2YoImVkIik9PT0tMSlyZXR1cm4gdC5pbmRleE9mKCIqIik9PT0tMX1mdW5jdGlvbiBwaCh0LGUscil7dmFye2hza2lwQmVmb3JlQW5kQWZ0ZXI6bixhZGRKb3Q6aSxjb2xzOmEsYXJyYXlzdHJldGNoOnMsY29sU2VwYXJhdGlvblR5cGU6bCxhdXRvVGFnOnUsc2luZ2xlUm93OmgsZW1wdHlTaW5nbGVSb3c6ZixtYXhOdW1Db2xzOmQsbGVxbm86cH09ZTtpZih0Lmd1bGxldC5iZWdpbkdyb3VwKCksaHx8dC5ndWxsZXQubWFjcm9zLnNldCgiXFxjciIsIlxcXFxcXHJlbGF4IiksIXMpe3ZhciBtPXQuZ3VsbGV0LmV4cGFuZE1hY3JvQXNUZXh0KCJcXGFycmF5c3RyZXRjaCIpO2lmKG09PW51bGwpcz0xO2Vsc2UgaWYocz1wYXJzZUZsb2F0KG0pLCFzfHxzPDApdGhyb3cgbmV3IGd0KCJJbnZhbGlkIFxcYXJyYXlzdHJldGNoOiAiK20pfXQuZ3VsbGV0LmJlZ2luR3JvdXAoKTt2YXIgZz1bXSx5PVtnXSx2PVtdLHg9W10sYj11IT1udWxsP1tdOnZvaWQgMDtmdW5jdGlvbiB3KCl7dSYmdC5ndWxsZXQubWFjcm9zLnNldCgiXFxAZXFuc3ciLCIxIiwhMCl9byh3LCJiZWdpblJvdyIpO2Z1bmN0aW9uIEMoKXtiJiYodC5ndWxsZXQubWFjcm9zLmdldCgiXFxkZkB0YWciKT8oYi5wdXNoKHQuc3VicGFyc2UoW25ldyBTbygiXFxkZkB0YWciKV0pKSx0Lmd1bGxldC5tYWNyb3Muc2V0KCJcXGRmQHRhZyIsdm9pZCAwLCEwKSk6Yi5wdXNoKCEhdSYmdC5ndWxsZXQubWFjcm9zLmdldCgiXFxAZXFuc3ciKT09PSIxIikpfWZvcihvKEMsImVuZFJvdyIpLHcoKSx4LnB1c2god3oodCkpOzspe3ZhciBUPXQucGFyc2VFeHByZXNzaW9uKCExLGg/IlxcZW5kIjoiXFxcXCIpO3QuZ3VsbGV0LmVuZEdyb3VwKCksdC5ndWxsZXQuYmVnaW5Hcm91cCgpLFQ9e3R5cGU6Im9yZGdyb3VwIixtb2RlOnQubW9kZSxib2R5OlR9LHImJihUPXt0eXBlOiJzdHlsaW5nIixtb2RlOnQubW9kZSxzdHlsZTpyLGJvZHk6W1RdfSksZy5wdXNoKFQpO3ZhciBFPXQuZmV0Y2goKS50ZXh0O2lmKEU9PT0iJiIpe2lmKGQmJmcubGVuZ3RoPT09ZCl7aWYoaHx8bCl0aHJvdyBuZXcgZ3QoIlRvbyBtYW55IHRhYiBjaGFyYWN0ZXJzOiAmIix0Lm5leHRUb2tlbik7dC5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoInRleHRFbnYiLCJUb28gZmV3IGNvbHVtbnMgc3BlY2lmaWVkIGluIHRoZSB7YXJyYXl9IGNvbHVtbiBhcmd1bWVudC4iKX10LmNvbnN1bWUoKX1lbHNlIGlmKEU9PT0iXFxlbmQiKXtDKCksZy5sZW5ndGg9PT0xJiZULnR5cGU9PT0ic3R5bGluZyImJlQuYm9keVswXS5ib2R5Lmxlbmd0aD09PTAmJih5Lmxlbmd0aD4xfHwhZikmJnkucG9wKCkseC5sZW5ndGg8eS5sZW5ndGgrMSYmeC5wdXNoKFtdKTticmVha31lbHNlIGlmKEU9PT0iXFxcXCIpe3QuY29uc3VtZSgpO3ZhciBBPXZvaWQgMDt0Lmd1bGxldC5mdXR1cmUoKS50ZXh0IT09IiAiJiYoQT10LnBhcnNlU2l6ZUdyb3VwKCEwKSksdi5wdXNoKEE/QS52YWx1ZTpudWxsKSxDKCkseC5wdXNoKHd6KHQpKSxnPVtdLHkucHVzaChnKSx3KCl9ZWxzZSB0aHJvdyBuZXcgZ3QoIkV4cGVjdGVkICYgb3IgXFxcXCBvciBcXGNyIG9yIFxcZW5kIix0Lm5leHRUb2tlbil9cmV0dXJuIHQuZ3VsbGV0LmVuZEdyb3VwKCksdC5ndWxsZXQuZW5kR3JvdXAoKSx7dHlwZToiYXJyYXkiLG1vZGU6dC5tb2RlLGFkZEpvdDppLGFycmF5c3RyZXRjaDpzLGJvZHk6eSxjb2xzOmEscm93R2Fwczp2LGhza2lwQmVmb3JlQW5kQWZ0ZXI6bixoTGluZXNCZWZvcmVSb3c6eCxjb2xTZXBhcmF0aW9uVHlwZTpsLHRhZ3M6YixsZXFubzpwfX1mdW5jdGlvbiBxNyh0KXtyZXR1cm4gdC5zbGljZSgwLDEpPT09ImQiPyJkaXNwbGF5IjoidGV4dCJ9ZnVuY3Rpb24gU0codCxlLHIpe2Zvcih2YXIgbj1QaSh0LGUsITEpLGk9ZS5zaXplTXVsdGlwbGllci9yLnNpemVNdWx0aXBsaWVyLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIHM9blthXS5jbGFzc2VzLmluZGV4T2YoInNpemluZyIpO3M8MD9BcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShuW2FdLmNsYXNzZXMsZS5zaXppbmdDbGFzc2VzKHIpKTpuW2FdLmNsYXNzZXNbcysxXT09PSJyZXNldC1zaXplIitlLnNpemUmJihuW2FdLmNsYXNzZXNbcysxXT0icmVzZXQtc2l6ZSIrci5zaXplKSxuW2FdLmhlaWdodCo9aSxuW2FdLmRlcHRoKj1pfXJldHVybiBCZS5tYWtlRnJhZ21lbnQobil9dmFyIFhzLFNvLGd0LEp4ZSxlYmUsdGJlLHJiZSxuYmUsaWJlLEZ6LHNiZSxvYmUsbGJlLEp0LGMzLHp5LFlsLE83LGgzLGYwLHN1LEd5LEVvLGQwLFFhLFhsLHViZSxoYmUsZmJlLGRiZSxwYmUsbWJlLHRyLGs3LHUzLGgwLHliZSx2YmUseGJlLGJiZSx3YmUsVGJlLGtiZSxFYmUsU2JlLG96LENiZSxlZCxqbCxaNCxseixoNyxEYmUsY3osdXosZjMsRTcsTGJlLHp6LHRpLGt0LGZoLEd6LFZ6LFV6LHRkLFZ5LFM3LFJiZSxUcyxsbCxLbCxVeSxNYmUsSWJlLEFuLFUsaXQsZWUsa2UsVm4sSXQsWmEscDAsZXIsa2ksanMseDMsRWUsdXUsTGUsSHosZnosZjcsSjQsZHosZDcsZTMsZDMsUHksdDMsc3IsSm4sQ2EsaXUsdWgsQzcsQnkscjMsbjMscHosT2JlLGIzLG9sLFBiZSxCYmUsRmJlLCRiZSx6YmUsQjcsYnMsV3osR2JlLFZiZSxxeixVYmUsSGJlLFdiZSxxYmUsaTMsWXosWHosWWJlLEJlLGVpLFpmLGF1LFhiZSxqYmUsanoscDMsbTMsZzMsZGksbHUsS2JlLFFiZSxaYmUsSmJlLFBpLG16LEt6LGU0ZSxBNyxIeSxGcix3cyxKZixENyxkdCxDbyxGNywkNyxrcyxkaCx5bixaeixKeix0NGUscjRlLG40ZSxpNGUsYTRlLHM0ZSxvNGUsbDRlLGN1LEc3LGVHLGM0ZSxzMyx1NGUsVDMsaDRlLHl6LHZ6LGY0ZSxuRyxpRyxMNyxhRyxtNGUsc0csRnksVjcsb0csZzRlLHk0ZSxsRyxwNyxtNyxSNyxvMyx2NGUseDRlLGNHLGc3LHk3LHY3LGI0ZSx1Ryx3NGUsaEcsJHksVDRlLGs0ZSxFNGUsZkcsUzRlLGRHLHBHLEM0ZSxvdSx4eixBNGUsVTcsSDcsbUcsZ0csRTMsWmwsXzRlLEpsLHlHLFR6LHZHLHhHLGt6LGJHLFk3LFg3LEV6LFN6LHdHLEQ0ZSx4NyxDeixURyxrRyxtMCxXeSxMNGUsUjRlLEVHLE40ZSxBeixNNGUsX3osSTRlLENHLGI3LHc3LER6LEx6LFJ6LE80ZSxOeixNeixoaCxBRyxQNGUsQjRlLEY0ZSwkNGUsTjcsejRlLEc0ZSx5MyxNNyxWNGUsSXosajcsT3osSzcsX0csREcsTEcsSTcsUHosbDMsVDcsQnosdjMsUTcsUkcsVTRlLEg0ZSxORyxaNyxXNGUscTRlLElHPU4oKCk9PnsidXNlIHN0cmljdCI7WHM9Y2xhc3MgdHtzdGF0aWN7byh0aGlzLCJTb3VyY2VMb2NhdGlvbiIpfWNvbnN0cnVjdG9yKGUscixuKXt0aGlzLmxleGVyPXZvaWQgMCx0aGlzLnN0YXJ0PXZvaWQgMCx0aGlzLmVuZD12b2lkIDAsdGhpcy5sZXhlcj1lLHRoaXMuc3RhcnQ9cix0aGlzLmVuZD1ufXN0YXRpYyByYW5nZShlLHIpe3JldHVybiByPyFlfHwhZS5sb2N8fCFyLmxvY3x8ZS5sb2MubGV4ZXIhPT1yLmxvYy5sZXhlcj9udWxsOm5ldyB0KGUubG9jLmxleGVyLGUubG9jLnN0YXJ0LHIubG9jLmVuZCk6ZSYmZS5sb2N9fSxTbz1jbGFzcyB0e3N0YXRpY3tvKHRoaXMsIlRva2VuIil9Y29uc3RydWN0b3IoZSxyKXt0aGlzLnRleHQ9dm9pZCAwLHRoaXMubG9jPXZvaWQgMCx0aGlzLm5vZXhwYW5kPXZvaWQgMCx0aGlzLnRyZWF0QXNSZWxheD12b2lkIDAsdGhpcy50ZXh0PWUsdGhpcy5sb2M9cn1yYW5nZShlLHIpe3JldHVybiBuZXcgdChyLFhzLnJhbmdlKHRoaXMsZSkpfX0sZ3Q9Y2xhc3MgdHtzdGF0aWN7byh0aGlzLCJQYXJzZUVycm9yIil9Y29uc3RydWN0b3IoZSxyKXt0aGlzLm5hbWU9dm9pZCAwLHRoaXMucG9zaXRpb249dm9pZCAwLHRoaXMubGVuZ3RoPXZvaWQgMCx0aGlzLnJhd01lc3NhZ2U9dm9pZCAwO3ZhciBuPSJLYVRlWCBwYXJzZSBlcnJvcjogIitlLGksYSxzPXImJnIubG9jO2lmKHMmJnMuc3RhcnQ8PXMuZW5kKXt2YXIgbD1zLmxleGVyLmlucHV0O2k9cy5zdGFydCxhPXMuZW5kLGk9PT1sLmxlbmd0aD9uKz0iIGF0IGVuZCBvZiBpbnB1dDogIjpuKz0iIGF0IHBvc2l0aW9uICIrKGkrMSkrIjogIjt2YXIgdT1sLnNsaWNlKGksYSkucmVwbGFjZSgvW15dL2csIiQmXHUwMzMyIiksaDtpPjE1P2g9Ilx1MjAyNiIrbC5zbGljZShpLTE1LGkpOmg9bC5zbGljZSgwLGkpO3ZhciBmO2ErMTU8bC5sZW5ndGg/Zj1sLnNsaWNlKGEsYSsxNSkrIlx1MjAyNiI6Zj1sLnNsaWNlKGEpLG4rPWgrdStmfXZhciBkPW5ldyBFcnJvcihuKTtyZXR1cm4gZC5uYW1lPSJQYXJzZUVycm9yIixkLl9fcHJvdG9fXz10LnByb3RvdHlwZSxkLnBvc2l0aW9uPWksaSE9bnVsbCYmYSE9bnVsbCYmKGQubGVuZ3RoPWEtaSksZC5yYXdNZXNzYWdlPWUsZH19O2d0LnByb3RvdHlwZS5fX3Byb3RvX189RXJyb3IucHJvdG90eXBlO0p4ZT1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIGUuaW5kZXhPZihyKSE9PS0xfSwiY29udGFpbnMiKSxlYmU9byhmdW5jdGlvbihlLHIpe3JldHVybiBlPT09dm9pZCAwP3I6ZX0sImRlZmx0IiksdGJlPS8oW0EtWl0pL2cscmJlPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSh0YmUsIi0kMSIpLnRvTG93ZXJDYXNlKCl9LCJoeXBoZW5hdGUiKSxuYmU9eyImIjoiJmFtcDsiLCI+IjoiJmd0OyIsIjwiOiImbHQ7IiwnIic6IiZxdW90OyIsIiciOiImI3gyNzsifSxpYmU9L1smPjwiJ10vZztvKGFiZSwiZXNjYXBlIik7Rno9byhmdW5jdGlvbiB0KGUpe3JldHVybiBlLnR5cGU9PT0ib3JkZ3JvdXAifHxlLnR5cGU9PT0iY29sb3IiP2UuYm9keS5sZW5ndGg9PT0xP3QoZS5ib2R5WzBdKTplOmUudHlwZT09PSJmb250Ij90KGUuYm9keSk6ZX0sImdldEJhc2VFbGVtIiksc2JlPW8oZnVuY3Rpb24oZSl7dmFyIHI9RnooZSk7cmV0dXJuIHIudHlwZT09PSJtYXRob3JkInx8ci50eXBlPT09InRleHRvcmQifHxyLnR5cGU9PT0iYXRvbSJ9LCJpc0NoYXJhY3RlckJveCIpLG9iZT1vKGZ1bmN0aW9uKGUpe2lmKCFlKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgbm9uLW51bGwsIGJ1dCBnb3QgIitTdHJpbmcoZSkpO3JldHVybiBlfSwiYXNzZXJ0IiksbGJlPW8oZnVuY3Rpb24oZSl7dmFyIHI9L15bXHgwMC1ceDIwXSooW15cXC8jP10qPykoOnwmIzAqNTh8JiN4MCozYXwmY29sb24pL2kuZXhlYyhlKTtyZXR1cm4gcj9yWzJdIT09IjoifHwhL15bYS16QS1aXVthLXpBLVowLTkrXC0uXSokLy50ZXN0KHJbMV0pP251bGw6clsxXS50b0xvd2VyQ2FzZSgpOiJfcmVsYXRpdmUifSwicHJvdG9jb2xGcm9tVXJsIiksSnQ9e2NvbnRhaW5zOkp4ZSxkZWZsdDplYmUsZXNjYXBlOmFiZSxoeXBoZW5hdGU6cmJlLGdldEJhc2VFbGVtOkZ6LGlzQ2hhcmFjdGVyQm94OnNiZSxwcm90b2NvbEZyb21Vcmw6bGJlfSxjMz17ZGlzcGxheU1vZGU6e3R5cGU6ImJvb2xlYW4iLGRlc2NyaXB0aW9uOiJSZW5kZXIgbWF0aCBpbiBkaXNwbGF5IG1vZGUsIHdoaWNoIHB1dHMgdGhlIG1hdGggaW4gZGlzcGxheSBzdHlsZSAoc28gXFxpbnQgYW5kIFxcc3VtIGFyZSBsYXJnZSwgZm9yIGV4YW1wbGUpLCBhbmQgY2VudGVycyB0aGUgbWF0aCBvbiB0aGUgcGFnZSBvbiBpdHMgb3duIGxpbmUuIixjbGk6Ii1kLCAtLWRpc3BsYXktbW9kZSJ9LG91dHB1dDp7dHlwZTp7ZW51bTpbImh0bWxBbmRNYXRobWwiLCJodG1sIiwibWF0aG1sIl19LGRlc2NyaXB0aW9uOiJEZXRlcm1pbmVzIHRoZSBtYXJrdXAgbGFuZ3VhZ2Ugb2YgdGhlIG91dHB1dC4iLGNsaToiLUYsIC0tZm9ybWF0IDx0eXBlPiJ9LGxlcW5vOnt0eXBlOiJib29sZWFuIixkZXNjcmlwdGlvbjoiUmVuZGVyIGRpc3BsYXkgbWF0aCBpbiBsZXFubyBzdHlsZSAobGVmdC1qdXN0aWZpZWQgdGFncykuIn0sZmxlcW46e3R5cGU6ImJvb2xlYW4iLGRlc2NyaXB0aW9uOiJSZW5kZXIgZGlzcGxheSBtYXRoIGZsdXNoIGxlZnQuIn0sdGhyb3dPbkVycm9yOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiEwLGNsaToiLXQsIC0tbm8tdGhyb3ctb24tZXJyb3IiLGNsaURlc2NyaXB0aW9uOiJSZW5kZXIgZXJyb3JzIChpbiB0aGUgY29sb3IgZ2l2ZW4gYnkgLS1lcnJvci1jb2xvcikgaW5zdGVhZCBvZiB0aHJvd2luZyBhIFBhcnNlRXJyb3IgZXhjZXB0aW9uIHdoZW4gZW5jb3VudGVyaW5nIGFuIGVycm9yLiJ9LGVycm9yQ29sb3I6e3R5cGU6InN0cmluZyIsZGVmYXVsdDoiI2NjMDAwMCIsY2xpOiItYywgLS1lcnJvci1jb2xvciA8Y29sb3I+IixjbGlEZXNjcmlwdGlvbjoiQSBjb2xvciBzdHJpbmcgZ2l2ZW4gaW4gdGhlIGZvcm1hdCAncmdiJyBvciAncnJnZ2JiJyAobm8gIykuIFRoaXMgb3B0aW9uIGRldGVybWluZXMgdGhlIGNvbG9yIG9mIGVycm9ycyByZW5kZXJlZCBieSB0aGUgLXQgb3B0aW9uLiIsY2xpUHJvY2Vzc29yOm8odD0+IiMiK3QsImNsaVByb2Nlc3NvciIpfSxtYWNyb3M6e3R5cGU6Im9iamVjdCIsY2xpOiItbSwgLS1tYWNybyA8ZGVmPiIsY2xpRGVzY3JpcHRpb246IkRlZmluZSBjdXN0b20gbWFjcm8gb2YgdGhlIGZvcm0gJ1xcZm9vOmV4cGFuc2lvbicgKHVzZSBtdWx0aXBsZSAtbSBhcmd1bWVudHMgZm9yIG11bHRpcGxlIG1hY3JvcykuIixjbGlEZWZhdWx0OltdLGNsaVByb2Nlc3NvcjpvKCh0LGUpPT4oZS5wdXNoKHQpLGUpLCJjbGlQcm9jZXNzb3IiKX0sbWluUnVsZVRoaWNrbmVzczp7dHlwZToibnVtYmVyIixkZXNjcmlwdGlvbjoiU3BlY2lmaWVzIGEgbWluaW11bSB0aGlja25lc3MsIGluIGVtcywgZm9yIGZyYWN0aW9uIGxpbmVzLCBgXFxzcXJ0YCB0b3AgbGluZXMsIGB7YXJyYXl9YCB2ZXJ0aWNhbCBsaW5lcywgYFxcaGxpbmVgLCBgXFxoZGFzaGxpbmVgLCBgXFx1bmRlcmxpbmVgLCBgXFxvdmVybGluZWAsIGFuZCB0aGUgYm9yZGVycyBvZiBgXFxmYm94YCwgYFxcYm94ZWRgLCBhbmQgYFxcZmNvbG9yYm94YC4iLHByb2Nlc3NvcjpvKHQ9Pk1hdGgubWF4KDAsdCksInByb2Nlc3NvciIpLGNsaToiLS1taW4tcnVsZS10aGlja25lc3MgPHNpemU+IixjbGlQcm9jZXNzb3I6cGFyc2VGbG9hdH0sY29sb3JJc1RleHRDb2xvcjp7dHlwZToiYm9vbGVhbiIsZGVzY3JpcHRpb246Ik1ha2VzIFxcY29sb3IgYmVoYXZlIGxpa2UgTGFUZVgncyAyLWFyZ3VtZW50IFxcdGV4dGNvbG9yLCBpbnN0ZWFkIG9mIExhVGVYJ3Mgb25lLWFyZ3VtZW50IFxcY29sb3IgbW9kZSBjaGFuZ2UuIixjbGk6Ii1iLCAtLWNvbG9yLWlzLXRleHQtY29sb3IifSxzdHJpY3Q6e3R5cGU6W3tlbnVtOlsid2FybiIsImlnbm9yZSIsImVycm9yIl19LCJib29sZWFuIiwiZnVuY3Rpb24iXSxkZXNjcmlwdGlvbjoiVHVybiBvbiBzdHJpY3QgLyBMYVRlWCBmYWl0aGZ1bG5lc3MgbW9kZSwgd2hpY2ggdGhyb3dzIGFuIGVycm9yIGlmIHRoZSBpbnB1dCB1c2VzIGZlYXR1cmVzIHRoYXQgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgTGFUZVguIixjbGk6Ii1TLCAtLXN0cmljdCIsY2xpRGVmYXVsdDohMX0sdHJ1c3Q6e3R5cGU6WyJib29sZWFuIiwiZnVuY3Rpb24iXSxkZXNjcmlwdGlvbjoiVHJ1c3QgdGhlIGlucHV0LCBlbmFibGluZyBhbGwgSFRNTCBmZWF0dXJlcyBzdWNoIGFzIFxcdXJsLiIsY2xpOiItVCwgLS10cnVzdCJ9LG1heFNpemU6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLzAsZGVzY3JpcHRpb246IklmIG5vbi16ZXJvLCBhbGwgdXNlci1zcGVjaWZpZWQgc2l6ZXMsIGUuZy4gaW4gXFxydWxlezUwMGVtfXs1MDBlbX0sIHdpbGwgYmUgY2FwcGVkIHRvIG1heFNpemUgZW1zLiBPdGhlcndpc2UsIGVsZW1lbnRzIGFuZCBzcGFjZXMgY2FuIGJlIGFyYml0cmFyaWx5IGxhcmdlIixwcm9jZXNzb3I6byh0PT5NYXRoLm1heCgwLHQpLCJwcm9jZXNzb3IiKSxjbGk6Ii1zLCAtLW1heC1zaXplIDxuPiIsY2xpUHJvY2Vzc29yOnBhcnNlSW50fSxtYXhFeHBhbmQ6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxZTMsZGVzY3JpcHRpb246IkxpbWl0IHRoZSBudW1iZXIgb2YgbWFjcm8gZXhwYW5zaW9ucyB0byB0aGUgc3BlY2lmaWVkIG51bWJlciwgdG8gcHJldmVudCBlLmcuIGluZmluaXRlIG1hY3JvIGxvb3BzLiBJZiBzZXQgdG8gSW5maW5pdHksIHRoZSBtYWNybyBleHBhbmRlciB3aWxsIHRyeSB0byBmdWxseSBleHBhbmQgYXMgaW4gTGFUZVguIixwcm9jZXNzb3I6byh0PT5NYXRoLm1heCgwLHQpLCJwcm9jZXNzb3IiKSxjbGk6Ii1lLCAtLW1heC1leHBhbmQgPG4+IixjbGlQcm9jZXNzb3I6byh0PT50PT09IkluZmluaXR5Ij8xLzA6cGFyc2VJbnQodCksImNsaVByb2Nlc3NvciIpfSxnbG9iYWxHcm91cDp7dHlwZToiYm9vbGVhbiIsY2xpOiExfX07byhjYmUsImdldERlZmF1bHRWYWx1ZSIpO3p5PWNsYXNze3N0YXRpY3tvKHRoaXMsIlNldHRpbmdzIil9Y29uc3RydWN0b3IoZSl7dGhpcy5kaXNwbGF5TW9kZT12b2lkIDAsdGhpcy5vdXRwdXQ9dm9pZCAwLHRoaXMubGVxbm89dm9pZCAwLHRoaXMuZmxlcW49dm9pZCAwLHRoaXMudGhyb3dPbkVycm9yPXZvaWQgMCx0aGlzLmVycm9yQ29sb3I9dm9pZCAwLHRoaXMubWFjcm9zPXZvaWQgMCx0aGlzLm1pblJ1bGVUaGlja25lc3M9dm9pZCAwLHRoaXMuY29sb3JJc1RleHRDb2xvcj12b2lkIDAsdGhpcy5zdHJpY3Q9dm9pZCAwLHRoaXMudHJ1c3Q9dm9pZCAwLHRoaXMubWF4U2l6ZT12b2lkIDAsdGhpcy5tYXhFeHBhbmQ9dm9pZCAwLHRoaXMuZ2xvYmFsR3JvdXA9dm9pZCAwLGU9ZXx8e307Zm9yKHZhciByIGluIGMzKWlmKGMzLmhhc093blByb3BlcnR5KHIpKXt2YXIgbj1jM1tyXTt0aGlzW3JdPWVbcl0hPT12b2lkIDA/bi5wcm9jZXNzb3I/bi5wcm9jZXNzb3IoZVtyXSk6ZVtyXTpjYmUobil9fXJlcG9ydE5vbnN0cmljdChlLHIsbil7dmFyIGk9dGhpcy5zdHJpY3Q7aWYodHlwZW9mIGk9PSJmdW5jdGlvbiImJihpPWkoZSxyLG4pKSwhKCFpfHxpPT09Imlnbm9yZSIpKXtpZihpPT09ITB8fGk9PT0iZXJyb3IiKXRocm93IG5ldyBndCgiTGFUZVgtaW5jb21wYXRpYmxlIGlucHV0IGFuZCBzdHJpY3QgbW9kZSBpcyBzZXQgdG8gJ2Vycm9yJzogIisocisiIFsiK2UrIl0iKSxuKTtpPT09Indhcm4iP3R5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS53YXJuKCJMYVRlWC1pbmNvbXBhdGlibGUgaW5wdXQgYW5kIHN0cmljdCBtb2RlIGlzIHNldCB0byAnd2Fybic6ICIrKHIrIiBbIitlKyJdIikpOnR5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS53YXJuKCJMYVRlWC1pbmNvbXBhdGlibGUgaW5wdXQgYW5kIHN0cmljdCBtb2RlIGlzIHNldCB0byAiKygidW5yZWNvZ25pemVkICciK2krIic6ICIrcisiIFsiK2UrIl0iKSl9fXVzZVN0cmljdEJlaGF2aW9yKGUscixuKXt2YXIgaT10aGlzLnN0cmljdDtpZih0eXBlb2YgaT09ImZ1bmN0aW9uIil0cnl7aT1pKGUscixuKX1jYXRjaHtpPSJlcnJvciJ9cmV0dXJuIWl8fGk9PT0iaWdub3JlIj8hMTppPT09ITB8fGk9PT0iZXJyb3IiPyEwOmk9PT0id2FybiI/KHR5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS53YXJuKCJMYVRlWC1pbmNvbXBhdGlibGUgaW5wdXQgYW5kIHN0cmljdCBtb2RlIGlzIHNldCB0byAnd2Fybic6ICIrKHIrIiBbIitlKyJdIikpLCExKToodHlwZW9mIGNvbnNvbGU8InUiJiZjb25zb2xlLndhcm4oIkxhVGVYLWluY29tcGF0aWJsZSBpbnB1dCBhbmQgc3RyaWN0IG1vZGUgaXMgc2V0IHRvICIrKCJ1bnJlY29nbml6ZWQgJyIraSsiJzogIityKyIgWyIrZSsiXSIpKSwhMSl9aXNUcnVzdGVkKGUpe2lmKGUudXJsJiYhZS5wcm90b2NvbCl7dmFyIHI9SnQucHJvdG9jb2xGcm9tVXJsKGUudXJsKTtpZihyPT1udWxsKXJldHVybiExO2UucHJvdG9jb2w9cn12YXIgbj10eXBlb2YgdGhpcy50cnVzdD09ImZ1bmN0aW9uIj90aGlzLnRydXN0KGUpOnRoaXMudHJ1c3Q7cmV0dXJuISFufX0sWWw9Y2xhc3N7c3RhdGlje28odGhpcywiU3R5bGUiKX1jb25zdHJ1Y3RvcihlLHIsbil7dGhpcy5pZD12b2lkIDAsdGhpcy5zaXplPXZvaWQgMCx0aGlzLmNyYW1wZWQ9dm9pZCAwLHRoaXMuaWQ9ZSx0aGlzLnNpemU9cix0aGlzLmNyYW1wZWQ9bn1zdXAoKXtyZXR1cm4gWGxbdWJlW3RoaXMuaWRdXX1zdWIoKXtyZXR1cm4gWGxbaGJlW3RoaXMuaWRdXX1mcmFjTnVtKCl7cmV0dXJuIFhsW2ZiZVt0aGlzLmlkXV19ZnJhY0Rlbigpe3JldHVybiBYbFtkYmVbdGhpcy5pZF1dfWNyYW1wKCl7cmV0dXJuIFhsW3BiZVt0aGlzLmlkXV19dGV4dCgpe3JldHVybiBYbFttYmVbdGhpcy5pZF1dfWlzVGlnaHQoKXtyZXR1cm4gdGhpcy5zaXplPj0yfX0sTzc9MCxoMz0xLGYwPTIsc3U9MyxHeT00LEVvPTUsZDA9NixRYT03LFhsPVtuZXcgWWwoTzcsMCwhMSksbmV3IFlsKGgzLDAsITApLG5ldyBZbChmMCwxLCExKSxuZXcgWWwoc3UsMSwhMCksbmV3IFlsKEd5LDIsITEpLG5ldyBZbChFbywyLCEwKSxuZXcgWWwoZDAsMywhMSksbmV3IFlsKFFhLDMsITApXSx1YmU9W0d5LEVvLEd5LEVvLGQwLFFhLGQwLFFhXSxoYmU9W0VvLEVvLEVvLEVvLFFhLFFhLFFhLFFhXSxmYmU9W2YwLHN1LEd5LEVvLGQwLFFhLGQwLFFhXSxkYmU9W3N1LHN1LEVvLEVvLFFhLFFhLFFhLFFhXSxwYmU9W2gzLGgzLHN1LHN1LEVvLEVvLFFhLFFhXSxtYmU9W083LGgzLGYwLHN1LGYwLHN1LGYwLHN1XSx0cj17RElTUExBWTpYbFtPN10sVEVYVDpYbFtmMF0sU0NSSVBUOlhsW0d5XSxTQ1JJUFRTQ1JJUFQ6WGxbZDBdfSxrNz1be25hbWU6ImxhdGluIixibG9ja3M6W1syNTYsNTkxXSxbNzY4LDg3OV1dfSx7bmFtZToiY3lyaWxsaWMiLGJsb2NrczpbWzEwMjQsMTI3OV1dfSx7bmFtZToiYXJtZW5pYW4iLGJsb2NrczpbWzEzMjgsMTQyM11dfSx7bmFtZToiYnJhaG1pYyIsYmxvY2tzOltbMjMwNCw0MjU1XV19LHtuYW1lOiJnZW9yZ2lhbiIsYmxvY2tzOltbNDI1Niw0MzUxXV19LHtuYW1lOiJjamsiLGJsb2NrczpbWzEyMjg4LDEyNTQzXSxbMTk5NjgsNDA4NzldLFs2NTI4MCw2NTM3Nl1dfSx7bmFtZToiaGFuZ3VsIixibG9ja3M6W1s0NDAzMiw1NTIxNV1dfV07byhnYmUsInNjcmlwdEZyb21Db2RlcG9pbnQiKTt1Mz1bXTtrNy5mb3JFYWNoKHQ9PnQuYmxvY2tzLmZvckVhY2goZT0+dTMucHVzaCguLi5lKSkpO28oJHosInN1cHBvcnRlZENvZGVwb2ludCIpO2gwPTgwLHliZT1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIk05NSwiKyg2MjIrZStyKStgCmMtMi43LDAsLTcuMTcsLTIuNywtMTMuNSwtOGMtNS44LC01LjMsLTkuNSwtMTAsLTkuNSwtMTQKYzAsLTIsMC4zLC0zLjMsMSwtNGMxLjMsLTIuNywyMy44MywtMjAuNyw2Ny41LC01NApjNDQuMiwtMzMuMyw2NS44LC01MC4zLDY2LjUsLTUxYzEuMywtMS4zLDMsLTIsNSwtMmM0LjcsMCw4LjcsMy4zLDEyLDEwCnMxNzMsMzc4LDE3MywzNzhjMC43LDAsMzUuMywtNzEsMTA0LC0yMTNjNjguNywtMTQyLDEzNy41LC0yODUsMjA2LjUsLTQyOQpjNjksLTE0NCwxMDQuNSwtMjE3LjcsMTA2LjUsLTIyMQpsYCtlLzIuMDc1KyIgLSIrZStgCmM1LjMsLTkuMywxMiwtMTQsMjAsLTE0Ckg0MDAwMDB2YCsoNDArZSkrYEg4NDUuMjcyNApzLTIyNS4yNzIsNDY3LC0yMjUuMjcyLDQ2N3MtMjM1LDQ4NiwtMjM1LDQ4NmMtMi43LDQuNywtOSw3LC0xOSw3CmMtNiwwLC0xMCwtMSwtMTIsLTNzLTE5NCwtNDIyLC0xOTQsLTQyMnMtNjUsNDcsLTY1LDQ3egpNYCsoODM0K2UpKyIgIityKyJoNDAwMDAwdiIrKDQwK2UpKyJoLTQwMDAwMHoifSwic3FydE1haW4iKSx2YmU9byhmdW5jdGlvbihlLHIpe3JldHVybiJNMjYzLCIrKDYwMStlK3IpK2BjMC43LDAsMTgsMzkuNyw1MiwxMTkKYzM0LDc5LjMsNjguMTY3LDE1OC43LDEwMi41LDIzOGMzNC4zLDc5LjMsNTEuOCwxMTkuMyw1Mi41LDEyMApjMzQwLC03MDQuNyw1MTAuNywtMTA2MC4zLDUxMiwtMTA2NwpsYCtlLzIuMDg0KyIgLSIrZStgCmM0LjcsLTcuMywxMSwtMTEsMTksLTExCkg0MDAwMHZgKyg0MCtlKStgSDEwMTIuMwpzLTI3MS4zLDU2NywtMjcxLjMsNTY3Yy0zOC43LDgwLjcsLTg0LDE3NSwtMTM2LDI4M2MtNTIsMTA4LC04OS4xNjcsMTg1LjMsLTExMS41LDIzMgpjLTIyLjMsNDYuNywtMzMuOCw3MC4zLC0zNC41LDcxYy00LjcsNC43LC0xMi4zLDcsLTIzLDdzLTEyLC0xLC0xMiwtMQpzLTEwOSwtMjUzLC0xMDksLTI1M2MtNzIuNywtMTY4LC0xMDkuMywtMjUyLC0xMTAsLTI1MmMtMTAuNyw4LC0yMiwxNi43LC0zNCwyNgpjLTIyLDE3LjMsLTMzLjMsMjYsLTM0LDI2cy0yNiwtMjYsLTI2LC0yNnM3NiwtNTksNzYsLTU5czc2LC02MCw3NiwtNjB6Ck1gKygxMDAxK2UpKyIgIityKyJoNDAwMDAwdiIrKDQwK2UpKyJoLTQwMDAwMHoifSwic3FydFNpemUxIikseGJlPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4iTTk4MyAiKygxMCtlK3IpK2AKbGArZS8zLjEzKyIgLSIrZStgCmM0LC02LjcsMTAsLTEwLDE4LC0xMCBINDAwMDAwdmArKDQwK2UpK2AKSDEwMTMuMXMtODMuNCwyNjgsLTI2NC4xLDg0MGMtMTgwLjcsNTcyLC0yNzcsODc2LjMsLTI4OSw5MTNjLTQuNyw0LjcsLTEyLjcsNywtMjQsNwpzLTEyLDAsLTEyLDBjLTEuMywtMy4zLC0zLjcsLTExLjcsLTcsLTI1Yy0zNS4zLC0xMjUuMywtMTA2LjcsLTM3My4zLC0yMTQsLTc0NApjLTEwLDEyLC0yMSwyNSwtMzMsMzlzLTMyLDM5LC0zMiwzOWMtNiwtNS4zLC0xNSwtMTQsLTI3LC0yNnMyNSwtMzAsMjUsLTMwCmMyNi43LC0zMi43LDUyLC02Myw3NiwtOTFzNTIsLTYwLDUyLC02MHMyMDgsNzIyLDIwOCw3MjIKYzU2LC0xNzUuMywxMjYuMywtMzk3LjMsMjExLC02NjZjODQuNywtMjY4LjcsMTUzLjgsLTQ4OC4yLDIwNy41LC02NTguNQpjNTMuNywtMTcwLjMsODQuNSwtMjY2LjgsOTIuNSwtMjg5LjV6Ck1gKygxMDAxK2UpKyIgIityKyJoNDAwMDAwdiIrKDQwK2UpKyJoLTQwMDAwMHoifSwic3FydFNpemUyIiksYmJlPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4iTTQyNCwiKygyMzk4K2UrcikrYApjLTEuMywtMC43LC0zOC41LC0xNzIsLTExMS41LC01MTRjLTczLC0zNDIsLTEwOS44LC01MTMuMywtMTEwLjUsLTUxNApjMCwtMiwtMTAuNywxNC4zLC0zMiw0OWMtNC43LDcuMywtOS44LDE1LjcsLTE1LjUsMjVjLTUuNyw5LjMsLTkuOCwxNiwtMTIuNSwyMApzLTUsNywtNSw3Yy00LC0zLjMsLTguMywtNy43LC0xMywtMTNzLTEzLC0xMywtMTMsLTEzczc2LC0xMjIsNzYsLTEyMnM3NywtMTIxLDc3LC0xMjEKczIwOSw5NjgsMjA5LDk2OGMwLC0yLDg0LjcsLTM2MS43LDI1NCwtMTA3OWMxNjkuMywtNzE3LjMsMjU0LjcsLTEwNzcuNywyNTYsLTEwODEKbGArZS80LjIyMysiIC0iK2UrYGM0LC02LjcsMTAsLTEwLDE4LC0xMCBINDAwMDAwCnZgKyg0MCtlKStgSDEwMTQuNgpzLTg3LjMsMzc4LjcsLTI3Mi42LDExNjZjLTE4NS4zLDc4Ny4zLC0yNzkuMywxMTgyLjMsLTI4MiwxMTg1CmMtMiw2LC0xMCw5LC0yNCw5CmMtOCwwLC0xMiwtMC43LC0xMiwtMnogTWArKDEwMDErZSkrIiAiK3IrYApoNDAwMDAwdmArKDQwK2UpKyJoLTQwMDAwMHoifSwic3FydFNpemUzIiksd2JlPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4iTTQ3MywiKygyNzEzK2UrcikrYApjMzM5LjMsLTE3OTkuMyw1MDkuMywtMjcwMCw1MTAsLTI3MDIgbGArZS81LjI5OCsiIC0iK2UrYApjMy4zLC03LjMsOS4zLC0xMSwxOCwtMTEgSDQwMDAwMHZgKyg0MCtlKStgSDEwMTcuNwpzLTkwLjUsNDc4LC0yNzYuMiwxNDY2Yy0xODUuNyw5ODgsLTI3OS41LDE0ODMsLTI4MS41LDE0ODVjLTIsNiwtMTAsOSwtMjQsOQpjLTgsMCwtMTIsLTAuNywtMTIsLTJjMCwtMS4zLC01LjMsLTMyLC0xNiwtOTJjLTUwLjcsLTI5My4zLC0xMTkuNywtNjkzLjMsLTIwNywtMTIwMApjMCwtMS4zLC01LjMsOC43LC0xNiwzMGMtMTAuNywyMS4zLC0yMS4zLDQyLjcsLTMyLDY0cy0xNiwzMywtMTYsMzNzLTI2LC0yNiwtMjYsLTI2CnM3NiwtMTUzLDc2LC0xNTNzNzcsLTE1MSw3NywtMTUxYzAuNywwLjcsMzUuNywyMDIsMTA1LDYwNGM2Ny4zLDQwMC43LDEwMiw2MDIuNywxMDQsCjYwNnpNYCsoMTAwMStlKSsiICIrcisiaDQwMDAwMHYiKyg0MCtlKSsiSDEwMTcuN3oifSwic3FydFNpemU0IiksVGJlPW8oZnVuY3Rpb24oZSl7dmFyIHI9ZS8yO3JldHVybiJNNDAwMDAwICIrZSsiIEgwIEwiK3IrIiAwIGw2NSA0NSBMMTQ1ICIrKGUtODApKyIgSDQwMDAwMHoifSwicGhhc2VQYXRoIiksa2JlPW8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPW4tNTQtci1lO3JldHVybiJNNzAyICIrKGUrcikrIkg0MDAwMDAiKyg0MCtlKStgCkg3NDJ2YCtpK2BsLTQgNC00IDRjLS42NjcuNyAtMiAxLjUtNCAyLjVzLTQuMTY3IDEuODMzLTYuNSAyLjUtNS41IDEtOS41IDEKaC0xMmwtMjgtODRjLTE2LjY2Ny01Mi05Ni42NjcgLTI5NC4zMzMtMjQwLTcyN2wtMjEyIC02NDMgLTg1IDE3MApjLTQtMy4zMzMtOC4zMzMtNy42NjctMTMgLTEzbC0xMy0xM2w3Ny0xNTUgNzctMTU2YzY2IDE5OS4zMzMgMTM5IDQxOS42NjcKMjE5IDY2MSBsMjE4IDY2MXpNNzAyIGArcisiSDQwMDAwMHYiKyg0MCtlKSsiSDc0MnoifSwic3FydFRhbGwiKSxFYmU9byhmdW5jdGlvbihlLHIsbil7cj0xZTMqcjt2YXIgaT0iIjtzd2l0Y2goZSl7Y2FzZSJzcXJ0TWFpbiI6aT15YmUocixoMCk7YnJlYWs7Y2FzZSJzcXJ0U2l6ZTEiOmk9dmJlKHIsaDApO2JyZWFrO2Nhc2Uic3FydFNpemUyIjppPXhiZShyLGgwKTticmVhaztjYXNlInNxcnRTaXplMyI6aT1iYmUocixoMCk7YnJlYWs7Y2FzZSJzcXJ0U2l6ZTQiOmk9d2JlKHIsaDApO2JyZWFrO2Nhc2Uic3FydFRhbGwiOmk9a2JlKHIsaDAsbil9cmV0dXJuIGl9LCJzcXJ0UGF0aCIpLFNiZT1vKGZ1bmN0aW9uKGUscil7c3dpdGNoKGUpe2Nhc2UiXHUyMzlDIjpyZXR1cm4iTTI5MSAwIEg0MTcgViIrcisiIEgyOTF6IE0yOTEgMCBINDE3IFYiK3IrIiBIMjkxeiI7Y2FzZSJcdTIyMjMiOnJldHVybiJNMTQ1IDAgSDE4OCBWIityKyIgSDE0NXogTTE0NSAwIEgxODggViIrcisiIEgxNDV6IjtjYXNlIlx1MjIyNSI6cmV0dXJuIk0xNDUgMCBIMTg4IFYiK3IrIiBIMTQ1eiBNMTQ1IDAgSDE4OCBWIityKyIgSDE0NXoiKygiTTM2NyAwIEg0MTAgViIrcisiIEgzNjd6IE0zNjcgMCBINDEwIFYiK3IrIiBIMzY3eiIpO2Nhc2UiXHUyMzlGIjpyZXR1cm4iTTQ1NyAwIEg1ODMgViIrcisiIEg0NTd6IE00NTcgMCBINTgzIFYiK3IrIiBINDU3eiI7Y2FzZSJcdTIzQTIiOnJldHVybiJNMzE5IDAgSDQwMyBWIityKyIgSDMxOXogTTMxOSAwIEg0MDMgViIrcisiIEgzMTl6IjtjYXNlIlx1MjNBNSI6cmV0dXJuIk0yNjMgMCBIMzQ3IFYiK3IrIiBIMjYzeiBNMjYzIDAgSDM0NyBWIityKyIgSDI2M3oiO2Nhc2UiXHUyM0FBIjpyZXR1cm4iTTM4NCAwIEg1MDQgViIrcisiIEgzODR6IE0zODQgMCBINTA0IFYiK3IrIiBIMzg0eiI7Y2FzZSJcdTIzRDAiOnJldHVybiJNMzEyIDAgSDM1NSBWIityKyIgSDMxMnogTTMxMiAwIEgzNTUgViIrcisiIEgzMTJ6IjtjYXNlIlx1MjAxNiI6cmV0dXJuIk0yNTcgMCBIMzAwIFYiK3IrIiBIMjU3eiBNMjU3IDAgSDMwMCBWIityKyIgSDI1N3oiKygiTTQ3OCAwIEg1MjEgViIrcisiIEg0Nzh6IE00NzggMCBINTIxIFYiK3IrIiBINDc4eiIpO2RlZmF1bHQ6cmV0dXJuIiJ9fSwiaW5uZXJQYXRoIiksb3o9e2RvdWJsZWxlZnRhcnJvdzpgTTI2MiAxNTcKbDEwLTEwYzM0LTM2IDYyLjctNzcgODYtMTIzIDMuMy04IDUtMTMuMyA1LTE2IDAtNS4zLTYuNy04LTIwLTgtNy4zCiAwLTEyLjIuNS0xNC41IDEuNS0yLjMgMS00LjggNC41LTcuNSAxMC41LTQ5LjMgOTcuMy0xMjEuNyAxNjkuMy0yMTcgMjE2LTI4CiAxNC01Ny4zIDI1LTg4IDMzLTYuNyAyLTExIDMuOC0xMyA1LjUtMiAxLjctMyA0LjItMyA3LjVzMSA1LjggMyA3LjUKYzIgMS43IDYuMyAzLjUgMTMgNS41IDY4IDE3LjMgMTI4LjIgNDcuOCAxODAuNSA5MS41IDUyLjMgNDMuNyA5My44IDk2LjIgMTI0LjUKIDE1Ny41IDkuMyA4IDE1LjMgMTIuMyAxOCAxM2g2YzEyLS43IDE4LTQgMTgtMTAgMC0yLTEuNy03LTUtMTUtMjMuMy00Ni01Mi04NwotODYtMTIzbC0xMC0xMGgzOTk3Mzh2LTQwSDIxOGMzMjggMCAwIDAgMCAwbC0xMC04Yy0yNi43LTIwLTY1LjctNDMtMTE3LTY5IDIuNwotMiA2LTMuNyAxMC01IDM2LjctMTYgNzIuMy0zNy4zIDEwNy02NGwxMC04aDM5OTc4MnYtNDB6Cm04IDB2NDBoMzk5NzMwdi00MHptMCAxOTR2NDBoMzk5NzMwdi00MHpgLGRvdWJsZXJpZ2h0YXJyb3c6YE0zOTk3MzggMzkybAotMTAgMTBjLTM0IDM2LTYyLjcgNzctODYgMTIzLTMuMyA4LTUgMTMuMy01IDE2IDAgNS4zIDYuNyA4IDIwIDggNy4zIDAgMTIuMi0uNQogMTQuNS0xLjUgMi4zLTEgNC44LTQuNSA3LjUtMTAuNSA0OS4zLTk3LjMgMTIxLjctMTY5LjMgMjE3LTIxNiAyOC0xNCA1Ny4zLTI1IDg4Ci0zMyA2LjctMiAxMS0zLjggMTMtNS41IDItMS43IDMtNC4yIDMtNy41cy0xLTUuOC0zLTcuNWMtMi0xLjctNi4zLTMuNS0xMy01LjUtNjgKLTE3LjMtMTI4LjItNDcuOC0xODAuNS05MS41LTUyLjMtNDMuNy05My44LTk2LjItMTI0LjUtMTU3LjUtOS4zLTgtMTUuMy0xMi4zLTE4Ci0xM2gtNmMtMTIgLjctMTggNC0xOCAxMCAwIDIgMS43IDcgNSAxNSAyMy4zIDQ2IDUyIDg3IDg2IDEyM2wxMCAxMEgwdjQwaDM5OTc4MgpjLTMyOCAwIDAgMCAwIDBsMTAgOGMyNi43IDIwIDY1LjcgNDMgMTE3IDY5LTIuNyAyLTYgMy43LTEwIDUtMzYuNyAxNi03Mi4zIDM3LjMKLTEwNyA2NGwtMTAgOEgwdjQwek0wIDE1N3Y0MGgzOTk3MzB2LTQwem0wIDE5NHY0MGgzOTk3MzB2LTQwemAsbGVmdGFycm93OmBNNDAwMDAwIDI0MUgxMTBsMy0zYzY4LjctNTIuNyAxMTMuNy0xMjAKIDEzNS0yMDIgNC0xNC43IDYtMjMgNi0yNSAwLTcuMy03LTExLTIxLTExLTggMC0xMy4yLjgtMTUuNSAyLjUtMi4zIDEuNy00LjIgNS44Ci01LjUgMTIuNS0xLjMgNC43LTIuNyAxMC4zLTQgMTctMTIgNDguNy0zNC44IDkyLTY4LjUgMTMwUzY1LjMgMjI4LjMgMTggMjQ3CmMtMTAgNC0xNiA3LjctMTggMTEgMCA4LjcgNiAxNC4zIDE4IDE3IDQ3LjMgMTguNyA4Ny44IDQ3IDEyMS41IDg1UzE5NiA0NDEuMyAyMDgKIDQ5MGMuNyAyIDEuMyA1IDIgOXMxLjIgNi43IDEuNSA4Yy4zIDEuMyAxIDMuMyAyIDZzMi4yIDQuNSAzLjUgNS41YzEuMyAxIDMuMwogMS44IDYgMi41czYgMSAxMCAxYzE0IDAgMjEtMy43IDIxLTExIDAtMi0yLTEwLjMtNi0yNS0yMC03OS4zLTY1LTE0Ni43LTEzNS0yMDIKIGwtMy0zaDM5OTg5MHpNMTAwIDI0MXY0MGgzOTk5MDB2LTQwemAsbGVmdGJyYWNlOmBNNiA1NDhsLTYtNnYtMzVsNi0xMWM1Ni0xMDQgMTM1LjMtMTgxLjMgMjM4LTIzMiA1Ny4zLTI4LjcgMTE3Ci00NSAxNzktNTBoMzk5NTc3djEyMEg0MDNjLTQzLjMgNy04MSAxNS0xMTMgMjYtMTAwLjcgMzMtMTc5LjcgOTEtMjM3IDE3NC0yLjcKIDUtNiA5LTEwIDEzLS43IDEtNy4zIDEtMjAgMUg2emAsbGVmdGJyYWNldW5kZXI6YE0wIDZsNi02aDE3YzEyLjY4OCAwIDE5LjMxMy4zIDIwIDEgNCA0IDcuMzEzIDguMyAxMCAxMwogMzUuMzEzIDUxLjMgODAuODEzIDkzLjggMTM2LjUgMTI3LjUgNTUuNjg4IDMzLjcgMTE3LjE4OCA1NS44IDE4NC41IDY2LjUuNjg4CiAwIDIgLjMgNCAxIDE4LjY4OCAyLjcgNzYgNC4zIDE3MiA1aDM5OTQ1MHYxMjBINDI5bC02LTFjLTEyNC42ODgtOC0yMzUtNjEuNwotMzMxLTE2MUM2MC42ODcgMTM4LjcgMzIuMzEyIDk5LjMgNyA1NEwwIDQxVjZ6YCxsZWZ0Z3JvdXA6YE00MDAwMDAgODAKSDQzNUM2NCA4MCAxNjguMyAyMjkuNCAyMSAyNjBjLTUuOSAxLjItMTggMC0xOCAwLTIgMC0zLTEtMy0zdi0zOEM3NiA2MSAyNTcgMAogNDM1IDBoMzk5NTY1emAsbGVmdGdyb3VwdW5kZXI6YE00MDAwMDAgMjYyCkg0MzVDNjQgMjYyIDE2OC4zIDExMi42IDIxIDgyYy01LjktMS4yLTE4IDAtMTggMC0yIDAtMyAxLTMgM3YzOGM3NiAxNTggMjU3IDIxOQogNDM1IDIxOWgzOTk1NjV6YCxsZWZ0aGFycG9vbjpgTTAgMjY3Yy43IDUuMyAzIDEwIDcgMTRoMzk5OTkzdi00MEg5M2MzLjMKLTMuMyAxMC4yLTkuNSAyMC41LTE4LjVzMTcuOC0xNS44IDIyLjUtMjAuNWM1MC43LTUyIDg4LTExMC4zIDExMi0xNzUgNC0xMS4zIDUKLTE4LjMgMy0yMS0xLjMtNC03LjMtNi0xOC02LTggMC0xMyAuNy0xNSAycy00LjcgNi43LTggMTZjLTQyIDk4LjctMTA3LjMgMTc0LjcKLTE5NiAyMjgtNi43IDQuNy0xMC43IDgtMTIgMTAtMS4zIDItMiA1LjctMiAxMXptMTAwLTI2djQwaDM5OTkwMHYtNDB6YCxsZWZ0aGFycG9vbnBsdXM6YE0wIDI2N2MuNyA1LjMgMyAxMCA3IDE0aDM5OTk5M3YtNDBIOTNjMy4zLTMuMyAxMC4yLTkuNQogMjAuNS0xOC41czE3LjgtMTUuOCAyMi41LTIwLjVjNTAuNy01MiA4OC0xMTAuMyAxMTItMTc1IDQtMTEuMyA1LTE4LjMgMy0yMS0xLjMKLTQtNy4zLTYtMTgtNi04IDAtMTMgLjctMTUgMnMtNC43IDYuNy04IDE2Yy00MiA5OC43LTEwNy4zIDE3NC43LTE5NiAyMjgtNi43IDQuNwotMTAuNyA4LTEyIDEwLTEuMyAyLTIgNS43LTIgMTF6bTEwMC0yNnY0MGgzOTk5MDB2LTQwek0wIDQzNXY0MGg0MDAwMDB2LTQwegptMCAwdjQwaDQwMDAwMHYtNDB6YCxsZWZ0aGFycG9vbmRvd246YE03IDI0MWMtNCA0LTYuMzMzIDguNjY3LTcgMTQgMCA1LjMzMy42NjcgOSAyIDExczUuMzMzCiA1LjMzMyAxMiAxMGM5MC42NjcgNTQgMTU2IDEzMCAxOTYgMjI4IDMuMzMzIDEwLjY2NyA2LjMzMyAxNi4zMzMgOSAxNyAyIC42NjcgNQogMSA5IDFoNWMxMC42NjcgMCAxNi42NjctMiAxOC02IDItMi42NjcgMS05LjY2Ny0zLTIxLTMyLTg3LjMzMy04Mi42NjctMTU3LjY2NwotMTUyLTIxMWwtMy0zaDM5OTkwN3YtNDB6TTkzIDI4MSBINDAwMDAwIHYtNDBMNyAyNDF6YCxsZWZ0aGFycG9vbmRvd25wbHVzOmBNNyA0MzVjLTQgNC02LjMgOC43LTcgMTQgMCA1LjMuNyA5IDIgMTFzNS4zIDUuMyAxMgogMTBjOTAuNyA1NCAxNTYgMTMwIDE5NiAyMjggMy4zIDEwLjcgNi4zIDE2LjMgOSAxNyAyIC43IDUgMSA5IDFoNWMxMC43IDAgMTYuNwotMiAxOC02IDItMi43IDEtOS43LTMtMjEtMzItODcuMy04Mi43LTE1Ny43LTE1Mi0yMTFsLTMtM2gzOTk5MDd2LTQwSDd6bTkzIDAKdjQwaDM5OTkwMHYtNDB6TTAgMjQxdjQwaDM5OTkwMHYtNDB6bTAgMHY0MGgzOTk5MDB2LTQwemAsbGVmdGhvb2s6YE00MDAwMDAgMjgxIEgxMDNzLTMzLTExLjItNjEtMzMuNVMwIDE5Ny4zIDAgMTY0czE0LjItNjEuMiA0Mi41Ci04My41QzcwLjggNTguMiAxMDQgNDcgMTQyIDQ3IGMxNi43IDAgMjUgNi43IDI1IDIwIDAgMTItOC43IDE4LjctMjYgMjAtNDAgMy4zCi02OC43IDE1LjctODYgMzctMTAgMTItMTUgMjUuMy0xNSA0MCAwIDIyLjcgOS44IDQwLjcgMjkuNSA1NCAxOS43IDEzLjMgNDMuNSAyMQogNzEuNSAyM2gzOTk4NTl6TTEwMyAyODF2LTQwaDM5OTg5N3Y0MHpgLGxlZnRsaW5lc2VnbWVudDpgTTQwIDI4MSBWNDI4IEgwIFY5NCBINDAgVjI0MSBINDAwMDAwIHY0MHoKTTQwIDI4MSBWNDI4IEgwIFY5NCBINDAgVjI0MSBINDAwMDAwIHY0MHpgLGxlZnRtYXBzdG86YE00MCAyODEgVjQ0OEgwVjc0SDQwVjI0MUg0MDAwMDB2NDB6Ck00MCAyODEgVjQ0OEgwVjc0SDQwVjI0MUg0MDAwMDB2NDB6YCxsZWZ0VG9Gcm9tOmBNMCAxNDdoNDAwMDAwdjQwSDB6bTAgMjE0YzY4IDQwIDExNS43IDk1LjcgMTQzIDE2N2gyMmMxNS4zIDAgMjMKLS4zIDIzLTEgMC0xLjMtNS4zLTEzLjctMTYtMzctMTgtMzUuMy00MS4zLTY5LTcwLTEwMWwtNy04aDM5OTkwNXYtNDBIOTVsNy04CmMyOC43LTMyIDUyLTY1LjcgNzAtMTAxIDEwLjctMjMuMyAxNi0zNS43IDE2LTM3IDAtLjctNy43LTEtMjMtMWgtMjJDMTE1LjcgMjY1LjMKIDY4IDMyMSAwIDM2MXptMC0xNzR2LTQwaDM5OTkwMHY0MHptMTAwIDE1NHY0MGgzOTk5MDB2LTQwemAsbG9uZ2VxdWFsOmBNMCA1MCBoNDAwMDAwIHY0MEgweiBtMCAxOTRoNDAwMDB2NDBIMHoKTTAgNTAgaDQwMDAwMCB2NDBIMHogbTAgMTk0aDQwMDAwdjQwSDB6YCxtaWRicmFjZTpgTTIwMDQyOCAzMzQKYy0xMDAuNy04LjMtMTk1LjMtNDQtMjgwLTEwOC01NS4zLTQyLTEwMS43LTkzLTEzOS0xNTNsLTktMTRjLTIuNyA0LTUuNyA4LjctOSAxNAotNTMuMyA4Ni43LTEyMy43IDE1My0yMTEgMTk5LTY2LjcgMzYtMTM3LjMgNTYuMy0yMTIgNjJIMFYyMTRoMTk5NTY4YzE3OC4zLTExLjcKIDMxMS43LTc4LjMgNDAzLTIwMSA2LTggOS43LTEyIDExLTEyIC43LS43IDYuNy0xIDE4LTFzMTcuMy4zIDE4IDFjMS4zIDAgNSA0IDExCiAxMiA0NC43IDU5LjMgMTAxLjMgMTA2LjMgMTcwIDE0MXMxNDUuMyA1NC4zIDIyOSA2MGgxOTk1NzJ2MTIwemAsbWlkYnJhY2V1bmRlcjpgTTE5OTU3MiAyMTQKYzEwMC43IDguMyAxOTUuMyA0NCAyODAgMTA4IDU1LjMgNDIgMTAxLjcgOTMgMTM5IDE1M2w5IDE0YzIuNy00IDUuNy04LjcgOS0xNAogNTMuMy04Ni43IDEyMy43LTE1MyAyMTEtMTk5IDY2LjctMzYgMTM3LjMtNTYuMyAyMTItNjJoMTk5NTY4djEyMEgyMDA0MzJjLTE3OC4zCiAxMS43LTMxMS43IDc4LjMtNDAzIDIwMS02IDgtOS43IDEyLTExIDEyLS43LjctNi43IDEtMTggMXMtMTcuMy0uMy0xOC0xYy0xLjMgMAotNS00LTExLTEyLTQ0LjctNTkuMy0xMDEuMy0xMDYuMy0xNzAtMTQxcy0xNDUuMy01NC4zLTIyOS02MEgwVjIxNHpgLG9paW50U2l6ZTE6YE01MTIuNiA3MS42YzI3Mi42IDAgMzIwLjMgMTA2LjggMzIwLjMgMTc4LjIgMCA3MC44LTQ3LjcgMTc3LjYKLTMyMC4zIDE3Ny42UzE5My4xIDMyMC42IDE5My4xIDI0OS44YzAtNzEuNCA0Ni45LTE3OC4yIDMxOS41LTE3OC4yegptMzY4LjEgMTc4LjJjMC04Ni40LTYwLjktMjE1LjQtMzY4LjEtMjE1LjQtMzA2LjQgMC0zNjcuMyAxMjktMzY3LjMgMjE1LjQgMCA4NS44CjYwLjkgMjE0LjggMzY3LjMgMjE0LjggMzA3LjIgMCAzNjguMS0xMjkgMzY4LjEtMjE0Ljh6YCxvaWludFNpemUyOmBNNzU3LjggMTAwLjFjMzg0LjcgMCA0NTEuMSAxMzcuNiA0NTEuMSAyMzAgMCA5MS4zLTY2LjQgMjI4LjgKLTQ1MS4xIDIyOC44LTM4Ni4zIDAtNDUyLjctMTM3LjUtNDUyLjctMjI4LjggMC05Mi40IDY2LjQtMjMwIDQ1Mi43LTIzMHoKbTUwMi40IDIzMGMwLTExMS4yLTgyLjQtMjc3LjItNTAyLjQtMjc3LjJzLTUwNCAxNjYtNTA0IDI3Ny4yCmMwIDExMCA4NCAyNzYgNTA0IDI3NnM1MDIuNC0xNjYgNTAyLjQtMjc2emAsb2lpaW50U2l6ZTE6YE02ODEuNCA3MS42YzQwOC45IDAgNDgwLjUgMTA2LjggNDgwLjUgMTc4LjIgMCA3MC44LTcxLjYgMTc3LjYKLTQ4MC41IDE3Ny42UzIwMi4xIDMyMC42IDIwMi4xIDI0OS44YzAtNzEuNCA3MC41LTE3OC4yIDQ3OS4zLTE3OC4yegptNTI1LjggMTc4LjJjMC04Ni40LTg2LjgtMjE1LjQtNTI1LjctMjE1LjQtNDM3LjkgMC01MjQuNyAxMjktNTI0LjcgMjE1LjQgMAo4NS44IDg2LjggMjE0LjggNTI0LjcgMjE0LjggNDM4LjkgMCA1MjUuNy0xMjkgNTI1LjctMjE0Ljh6YCxvaWlpbnRTaXplMjpgTTEwMjEuMiA1M2M2MDMuNiAwIDcwNy44IDE2NS44IDcwNy44IDI3Ny4yIDAgMTEwLTEwNC4yIDI3NS44Ci03MDcuOCAyNzUuOC02MDYgMC03MTAuMi0xNjUuOC03MTAuMi0yNzUuOEMzMTEgMjE4LjggNDE1LjIgNTMgMTAyMS4yIDUzegptNzcwLjQgMjc3LjFjMC0xMzEuMi0xMjYuNC0zMjcuNi03NzAuNS0zMjcuNlMyNDguNCAxOTguOSAyNDguNCAzMzAuMQpjMCAxMzAgMTI4LjggMzI2LjQgNzcyLjcgMzI2LjRzNzcwLjUtMTk2LjQgNzcwLjUtMzI2LjR6YCxyaWdodGFycm93OmBNMCAyNDF2NDBoMzk5ODkxYy00Ny4zIDM1LjMtODQgNzgtMTEwIDEyOAotMTYuNyAzMi0yNy43IDYzLjctMzMgOTUgMCAxLjMtLjIgMi43LS41IDQtLjMgMS4zLS41IDIuMy0uNSAzIDAgNy4zIDYuNyAxMSAyMAogMTEgOCAwIDEzLjItLjggMTUuNS0yLjUgMi4zLTEuNyA0LjItNS41IDUuNS0xMS41IDItMTMuMyA1LjctMjcgMTEtNDEgMTQuNy00NC43CiAzOS04NC41IDczLTExOS41czczLjctNjAuMiAxMTktNzUuNWM2LTIgOS01LjcgOS0xMXMtMy05LTktMTFjLTQ1LjMtMTUuMy04NQotNDAuNS0xMTktNzUuNXMtNTguMy03NC44LTczLTExOS41Yy00LjctMTQtOC4zLTI3LjMtMTEtNDAtMS4zLTYuNy0zLjItMTAuOC01LjUKLTEyLjUtMi4zLTEuNy03LjUtMi41LTE1LjUtMi41LTE0IDAtMjEgMy43LTIxIDExIDAgMiAyIDEwLjMgNiAyNSAyMC43IDgzLjMgNjcKIDE1MS43IDEzOSAyMDV6bTAgMHY0MGgzOTk5MDB2LTQwemAscmlnaHRicmFjZTpgTTQwMDAwMCA1NDJsCi02IDZoLTE3Yy0xMi43IDAtMTkuMy0uMy0yMC0xLTQtNC03LjMtOC4zLTEwLTEzLTM1LjMtNTEuMy04MC44LTkzLjgtMTM2LjUtMTI3LjUKcy0xMTcuMi01NS44LTE4NC41LTY2LjVjLS43IDAtMi0uMy00LTEtMTguNy0yLjctNzYtNC4zLTE3Mi01SDBWMjE0aDM5OTU3MWw2IDEKYzEyNC43IDggMjM1IDYxLjcgMzMxIDE2MSAzMS4zIDMzLjMgNTkuNyA3Mi43IDg1IDExOGw3IDEzdjM1emAscmlnaHRicmFjZXVuZGVyOmBNMzk5OTk0IDBsNiA2djM1bC02IDExYy01NiAxMDQtMTM1LjMgMTgxLjMtMjM4IDIzMi01Ny4zCiAyOC43LTExNyA0NS0xNzkgNTBILTMwMFYyMTRoMzk5ODk3YzQzLjMtNyA4MS0xNSAxMTMtMjYgMTAwLjctMzMgMTc5LjctOTEgMjM3Ci0xNzQgMi43LTUgNi05IDEwLTEzIC43LTEgNy4zLTEgMjAtMWgxN3pgLHJpZ2h0Z3JvdXA6YE0wIDgwaDM5OTU2NWMzNzEgMCAyNjYuNyAxNDkuNCA0MTQgMTgwIDUuOSAxLjIgMTggMCAxOCAwIDIgMAogMy0xIDMtM3YtMzhjLTc2LTE1OC0yNTctMjE5LTQzNS0yMTlIMHpgLHJpZ2h0Z3JvdXB1bmRlcjpgTTAgMjYyaDM5OTU2NWMzNzEgMCAyNjYuNy0xNDkuNCA0MTQtMTgwIDUuOS0xLjIgMTggMCAxOAogMCAyIDAgMyAxIDMgM3YzOGMtNzYgMTU4LTI1NyAyMTktNDM1IDIxOUgwemAscmlnaHRoYXJwb29uOmBNMCAyNDF2NDBoMzk5OTkzYzQuNy00LjcgNy05LjMgNy0xNCAwLTkuMwotMy43LTE1LjMtMTEtMTgtOTIuNy01Ni43LTE1OS0xMzMuNy0xOTktMjMxLTMuMy05LjMtNi0xNC43LTgtMTYtMi0xLjMtNy0yLTE1LTIKLTEwLjcgMC0xNi43IDItMTggNi0yIDIuNy0xIDkuNyAzIDIxIDE1LjMgNDIgMzYuNyA4MS44IDY0IDExOS41IDI3LjMgMzcuNyA1OAogNjkuMiA5MiA5NC41em0wIDB2NDBoMzk5OTAwdi00MHpgLHJpZ2h0aGFycG9vbnBsdXM6YE0wIDI0MXY0MGgzOTk5OTNjNC43LTQuNyA3LTkuMyA3LTE0IDAtOS4zLTMuNy0xNS4zLTExCi0xOC05Mi43LTU2LjctMTU5LTEzMy43LTE5OS0yMzEtMy4zLTkuMy02LTE0LjctOC0xNi0yLTEuMy03LTItMTUtMi0xMC43IDAtMTYuNwogMi0xOCA2LTIgMi43LTEgOS43IDMgMjEgMTUuMyA0MiAzNi43IDgxLjggNjQgMTE5LjUgMjcuMyAzNy43IDU4IDY5LjIgOTIgOTQuNXoKbTAgMHY0MGgzOTk5MDB2LTQweiBtMTAwIDE5NHY0MGgzOTk5MDB2LTQwem0wIDB2NDBoMzk5OTAwdi00MHpgLHJpZ2h0aGFycG9vbmRvd246YE0zOTk3NDcgNTExYzAgNy4zIDYuNyAxMSAyMCAxMSA4IDAgMTMtLjggMTUtMi41czQuNy02LjgKIDgtMTUuNWM0MC05NCA5OS4zLTE2Ni4zIDE3OC0yMTcgMTMuMy04IDIwLjMtMTIuMyAyMS0xMyA1LjMtMy4zIDguNS01LjggOS41Ci03LjUgMS0xLjcgMS41LTUuMiAxLjUtMTAuNXMtMi4zLTEwLjMtNy0xNUgwdjQwaDM5OTkwOGMtMzQgMjUuMy02NC43IDU3LTkyIDk1Ci0yNy4zIDM4LTQ4LjcgNzcuNy02NCAxMTktMy4zIDguNy01IDE0LTUgMTZ6TTAgMjQxdjQwaDM5OTkwMHYtNDB6YCxyaWdodGhhcnBvb25kb3ducGx1czpgTTM5OTc0NyA3MDVjMCA3LjMgNi43IDExIDIwIDExIDggMCAxMy0uOAogMTUtMi41czQuNy02LjggOC0xNS41YzQwLTk0IDk5LjMtMTY2LjMgMTc4LTIxNyAxMy4zLTggMjAuMy0xMi4zIDIxLTEzIDUuMy0zLjMKIDguNS01LjggOS41LTcuNSAxLTEuNyAxLjUtNS4yIDEuNS0xMC41cy0yLjMtMTAuMy03LTE1SDB2NDBoMzk5OTA4Yy0zNCAyNS4zCi02NC43IDU3LTkyIDk1LTI3LjMgMzgtNDguNyA3Ny43LTY0IDExOS0zLjMgOC43LTUgMTQtNSAxNnpNMCA0MzV2NDBoMzk5OTAwdi00MHoKbTAtMTk0djQwaDQwMDAwMHYtNDB6bTAgMHY0MGg0MDAwMDB2LTQwemAscmlnaHRob29rOmBNMzk5ODU5IDI0MWMtNzY0IDAgMCAwIDAgMCA0MC0zLjMgNjguNy0xNS43IDg2LTM3IDEwLTEyIDE1LTI1LjMKIDE1LTQwIDAtMjIuNy05LjgtNDAuNy0yOS41LTU0LTE5LjctMTMuMy00My41LTIxLTcxLjUtMjMtMTcuMy0xLjMtMjYtOC0yNi0yMCAwCi0xMy4zIDguNy0yMCAyNi0yMCAzOCAwIDcxIDExLjIgOTkgMzMuNSAwIDAgNyA1LjYgMjEgMTYuNyAxNCAxMS4yIDIxIDMzLjUgMjEKIDY2LjhzLTE0IDYxLjItNDIgODMuNWMtMjggMjIuMy02MSAzMy41LTk5IDMzLjVMMCAyNDF6IE0wIDI4MXYtNDBoMzk5ODU5djQwemAscmlnaHRsaW5lc2VnbWVudDpgTTM5OTk2MCAyNDEgVjk0IGg0MCBWNDI4IGgtNDAgVjI4MSBIMCB2LTQwegpNMzk5OTYwIDI0MSBWOTQgaDQwIFY0MjggaC00MCBWMjgxIEgwIHYtNDB6YCxyaWdodFRvRnJvbTpgTTQwMDAwMCAxNjdjLTcwLjctNDItMTE4LTk3LjctMTQyLTE2N2gtMjNjLTE1LjMgMC0yMyAuMy0yMwogMSAwIDEuMyA1LjMgMTMuNyAxNiAzNyAxOCAzNS4zIDQxLjMgNjkgNzAgMTAxbDcgOEgwdjQwaDM5OTkwNWwtNyA4Yy0yOC43IDMyCi01MiA2NS43LTcwIDEwMS0xMC43IDIzLjMtMTYgMzUuNy0xNiAzNyAwIC43IDcuNyAxIDIzIDFoMjNjMjQtNjkuMyA3MS4zLTEyNSAxNDIKLTE2N3ogTTEwMCAxNDd2NDBoMzk5OTAwdi00MHpNMCAzNDF2NDBoMzk5OTAwdi00MHpgLHR3b2hlYWRsZWZ0YXJyb3c6YE0wIDE2N2M2OCA0MAogMTE1LjcgOTUuNyAxNDMgMTY3aDIyYzE1LjMgMCAyMy0uMyAyMy0xIDAtMS4zLTUuMy0xMy43LTE2LTM3LTE4LTM1LjMtNDEuMy02OQotNzAtMTAxbC03LThoMTI1bDkgN2M1MC43IDM5LjMgODUgODYgMTAzIDE0MGg0NmMwLTQuNy02LjMtMTguNy0xOS00Mi0xOC0zNS4zCi00MC02Ny4zLTY2LTk2bC05LTloMzk5NzE2di00MEgyODRsOS05YzI2LTI4LjcgNDgtNjAuNyA2Ni05NiAxMi43LTIzLjMzMyAxOQotMzcuMzMzIDE5LTQyaC00NmMtMTggNTQtNTIuMyAxMDAuNy0xMDMgMTQwbC05IDdIOTVsNy04YzI4LjctMzIgNTItNjUuNyA3MC0xMDEKIDEwLjctMjMuMzMzIDE2LTM1LjcgMTYtMzcgMC0uNy03LjctMS0yMy0xaC0yMkMxMTUuNyA3MS4zIDY4IDEyNyAwIDE2N3pgLHR3b2hlYWRyaWdodGFycm93OmBNNDAwMDAwIDE2NwpjLTY4LTQwLTExNS43LTk1LjctMTQzLTE2N2gtMjJjLTE1LjMgMC0yMyAuMy0yMyAxIDAgMS4zIDUuMyAxMy43IDE2IDM3IDE4IDM1LjMKIDQxLjMgNjkgNzAgMTAxbDcgOGgtMTI1bC05LTdjLTUwLjctMzkuMy04NS04Ni0xMDMtMTQwaC00NmMwIDQuNyA2LjMgMTguNyAxOSA0MgogMTggMzUuMyA0MCA2Ny4zIDY2IDk2bDkgOUgwdjQwaDM5OTcxNmwtOSA5Yy0yNiAyOC43LTQ4IDYwLjctNjYgOTYtMTIuNyAyMy4zMzMKLTE5IDM3LjMzMy0xOSA0Mmg0NmMxOC01NCA1Mi4zLTEwMC43IDEwMy0xNDBsOS03aDEyNWwtNyA4Yy0yOC43IDMyLTUyIDY1LjctNzAKIDEwMS0xMC43IDIzLjMzMy0xNiAzNS43LTE2IDM3IDAgLjcgNy43IDEgMjMgMWgyMmMyNy4zLTcxLjMgNzUtMTI3IDE0My0xNjd6YCx0aWxkZTE6YE0yMDAgNTUuNTM4Yy03NyAwLTE2OCA3My45NTMtMTc3IDczLjk1My0zIDAtNwotMi4xNzUtOS01LjQzN0wyIDk3Yy0xLTItMi00LTItNiAwLTQgMi03IDUtOWwyMC0xMkMxMTYgMTIgMTcxIDAgMjA3IDBjODYgMAogMTE0IDY4IDE5MSA2OCA3OCAwIDE2OC02OCAxNzctNjggNCAwIDcgMiA5IDVsMTIgMTljMSAyLjE3NSAyIDQuMzUgMiA2LjUyNSAwCiA0LjM1LTIgNy42MTMtNSA5Ljc4OGwtMTkgMTMuMDVjLTkyIDYzLjA3Ny0xMTYuOTM3IDc1LjMwOC0xODMgNzYuMTI4Ci02OC4yNjcuODQ3LTExMy03My45NTItMTkxLTczLjk1MnpgLHRpbGRlMjpgTTM0NCA1NS4yNjZjLTE0MiAwLTMwMC42MzggODEuMzE2LTMxMS41IDg2LjQxOAotOC4wMSAzLjc2Mi0yMi41IDEwLjkxLTIzLjUgNS41NjJMMSAxMjBjLTEtMi0xLTMtMS00IDAtNSAzLTkgOC0xMGwxOC40LTlDMTYwLjkKIDMxLjkgMjgzIDAgMzU4IDBjMTQ4IDAgMTg4IDEyMiAzMzEgMTIyczMxNC05NyAzMjYtOTdjNCAwIDggMiAxMCA3bDcgMjEuMTE0CmMxIDIuMTQgMSAzLjIxIDEgNC4yOCAwIDUuMzQ3LTMgOS42MjYtNyAxMC42OTZsLTIyLjMgMTIuNjIyQzg1Mi42IDE1OC4zNzIgNzUxCiAxODEuNDc2IDY3NiAxODEuNDc2Yy0xNDkgMC0xODktMTI2LjIxLTMzMi0xMjYuMjF6YCx0aWxkZTM6YE03ODYgNTlDNDU3IDU5IDMyIDE3NS4yNDIgMTMgMTc1LjI0MmMtNiAwLTEwLTMuNDU3Ci0xMS0xMC4zN0wuMTUgMTM4Yy0xLTcgMy0xMiAxMC0xM2wxOS4yLTYuNEMzNzguNCA0MC43IDYzNC4zIDAgODA0LjMgMGMzMzcgMAogNDExLjggMTU3IDc0Ni44IDE1NyAzMjggMCA3NTQtMTEyIDc3My0xMTIgNSAwIDEwIDMgMTEgOWwxIDE0LjA3NWMxIDguMDY2LS42OTcKIDE2LjU5NS02LjY5NyAxNy40OTJsLTIxLjA1MiA3LjMxYy0zNjcuOSA5OC4xNDYtNjA5LjE1IDEyMi42OTYtNzc4LjE1IDEyMi42OTYKIC0zMzggMC00MDktMTU2LjU3My03NDQtMTU2LjU3M3pgLHRpbGRlNDpgTTc4NiA1OEM0NTcgNTggMzIgMTc3LjQ4NyAxMyAxNzcuNDg3Yy02IDAtMTAtMy4zNDUKLTExLTEwLjAzNUwuMTUgMTQzYy0xLTcgMy0xMiAxMC0xM2wyMi02LjdDMzgxLjIgMzUgNjM3LjE1IDAgODA3LjE1IDBjMzM3IDAgNDA5CiAxNzcgNzQ0IDE3NyAzMjggMCA3NTQtMTI3IDc3My0xMjcgNSAwIDEwIDMgMTEgOWwxIDE0Ljc5NGMxIDcuODA1LTMgMTMuMzgtOQogMTQuNDk1bC0yMC43IDUuNTc0Yy0zNjYuODUgOTkuNzktNjA3LjMgMTM5LjM3Mi03NzYuMyAxMzkuMzcyLTMzOCAwLTQwOQogLTE3NS4yMzYtNzQ0LTE3NS4yMzZ6YCx2ZWM6YE0zNzcgMjBjMC01LjMzMyAxLjgzMy0xMCA1LjUtMTRTMzkxIDAgMzk3IDBjNC42NjcgMCA4LjY2NyAxLjY2NyAxMiA1CjMuMzMzIDIuNjY3IDYuNjY3IDkgMTAgMTkgNi42NjcgMjQuNjY3IDIwLjMzMyA0My42NjcgNDEgNTcgNy4zMzMgNC42NjcgMTEKMTAuNjY3IDExIDE4IDAgNi0xIDEwLTMgMTJzLTYuNjY3IDUtMTQgOWMtMjguNjY3IDE0LjY2Ny01My42NjcgMzUuNjY3LTc1IDYzCi0xLjMzMyAxLjMzMy0zLjE2NyAzLjUtNS41IDYuNXMtNCA0LjgzMy01IDUuNWMtMSAuNjY3LTIuNSAxLjMzMy00LjUgMnMtNC4zMzMgMQotNyAxYy00LjY2NyAwLTkuMTY3LTEuODMzLTEzLjUtNS41UzMzNyAxODQgMzM3IDE3OGMwLTEyLjY2NyAxNS42NjctMzIuMzMzIDQ3LTU5CkgyMTNsLTE3MS0xYy04LjY2Ny02LTEzLTEyLjMzMy0xMy0xOSAwLTQuNjY3IDQuMzMzLTExLjMzMyAxMy0yMGgzNTkKYy0xNi0yNS4zMzMtMjQtNDUtMjQtNTl6YCx3aWRlaGF0MTpgTTUyOSAwaDVsNTE5IDExNWM1IDEgOSA1IDkgMTAgMCAxLTEgMi0xIDNsLTQgMjIKYy0xIDUtNSA5LTExIDloLTJMNTMyIDY3IDE5IDE1OWgtMmMtNSAwLTktNC0xMS05bC01LTIyYy0xLTYgMi0xMiA4LTEzemAsd2lkZWhhdDI6YE0xMTgxIDBoMmwxMTcxIDE3NmM2IDAgMTAgNSAxMCAxMWwtMiAyM2MtMSA2LTUgMTAKLTExIDEwaC0xTDExODIgNjcgMTUgMjIwaC0xYy02IDAtMTAtNC0xMS0xMGwtMi0yM2MtMS02IDQtMTEgMTAtMTF6YCx3aWRlaGF0MzpgTTExODEgMGgybDExNzEgMjM2YzYgMCAxMCA1IDEwIDExbC0yIDIzYy0xIDYtNSAxMAotMTEgMTBoLTFMMTE4MiA2NyAxNSAyODBoLTFjLTYgMC0xMC00LTExLTEwbC0yLTIzYy0xLTYgNC0xMSAxMC0xMXpgLHdpZGVoYXQ0OmBNMTE4MSAwaDJsMTE3MSAyOTZjNiAwIDEwIDUgMTAgMTFsLTIgMjNjLTEgNi01IDEwCi0xMSAxMGgtMUwxMTgyIDY3IDE1IDM0MGgtMWMtNiAwLTEwLTQtMTEtMTBsLTItMjNjLTEtNiA0LTExIDEwLTExemAsd2lkZWNoZWNrMTpgTTUyOSwxNTloNWw1MTksLTExNWM1LC0xLDksLTUsOSwtMTBjMCwtMSwtMSwtMiwtMSwtM2wtNCwtMjJjLTEsCi01LC01LC05LC0xMSwtOWgtMmwtNTEyLDkybC01MTMsLTkyaC0yYy01LDAsLTksNCwtMTEsOWwtNSwyMmMtMSw2LDIsMTIsOCwxM3pgLHdpZGVjaGVjazI6YE0xMTgxLDIyMGgybDExNzEsLTE3NmM2LDAsMTAsLTUsMTAsLTExbC0yLC0yM2MtMSwtNiwtNSwtMTAsCi0xMSwtMTBoLTFsLTExNjgsMTUzbC0xMTY3LC0xNTNoLTFjLTYsMCwtMTAsNCwtMTEsMTBsLTIsMjNjLTEsNiw0LDExLDEwLDExemAsd2lkZWNoZWNrMzpgTTExODEsMjgwaDJsMTE3MSwtMjM2YzYsMCwxMCwtNSwxMCwtMTFsLTIsLTIzYy0xLC02LC01LC0xMCwKLTExLC0xMGgtMWwtMTE2OCwyMTNsLTExNjcsLTIxM2gtMWMtNiwwLC0xMCw0LC0xMSwxMGwtMiwyM2MtMSw2LDQsMTEsMTAsMTF6YCx3aWRlY2hlY2s0OmBNMTE4MSwzNDBoMmwxMTcxLC0yOTZjNiwwLDEwLC01LDEwLC0xMWwtMiwtMjNjLTEsLTYsLTUsLTEwLAotMTEsLTEwaC0xbC0xMTY4LDI3M2wtMTE2NywtMjczaC0xYy02LDAsLTEwLDQsLTExLDEwbC0yLDIzYy0xLDYsNCwxMSwxMCwxMXpgLGJhcmFib3ZlbGVmdGFycm93OmBNNDAwMDAwIDYyMGgtMzk5ODkwbDMgLTNjNjguNyAtNTIuNyAxMTMuNyAtMTIwIDEzNSAtMjAyCmM0IC0xNC43IDYgLTIzIDYgLTI1YzAgLTcuMyAtNyAtMTEgLTIxIC0xMWMtOCAwIC0xMy4yIDAuOCAtMTUuNSAyLjUKYy0yLjMgMS43IC00LjIgNS44IC01LjUgMTIuNWMtMS4zIDQuNyAtMi43IDEwLjMgLTQgMTdjLTEyIDQ4LjcgLTM0LjggOTIgLTY4LjUgMTMwCnMtNzQuMiA2Ni4zIC0xMjEuNSA4NWMtMTAgNCAtMTYgNy43IC0xOCAxMWMwIDguNyA2IDE0LjMgMTggMTdjNDcuMyAxOC43IDg3LjggNDcKMTIxLjUgODVzNTYuNSA4MS4zIDY4LjUgMTMwYzAuNyAyIDEuMyA1IDIgOXMxLjIgNi43IDEuNSA4YzAuMyAxLjMgMSAzLjMgMiA2CnMyLjIgNC41IDMuNSA1LjVjMS4zIDEgMy4zIDEuOCA2IDIuNXM2IDEgMTAgMWMxNCAwIDIxIC0zLjcgMjEgLTExCmMwIC0yIC0yIC0xMC4zIC02IC0yNWMtMjAgLTc5LjMgLTY1IC0xNDYuNyAtMTM1IC0yMDJsLTMgLTNoMzk5ODkwegpNMTAwIDYyMHY0MGgzOTk5MDB2LTQweiBNMCAyNDF2NDBoMzk5OTAwdi00MHpNMCAyNDF2NDBoMzk5OTAwdi00MHpgLHJpZ2h0YXJyb3dhYm92ZWJhcjpgTTAgMjQxdjQwaDM5OTg5MWMtNDcuMyAzNS4zLTg0IDc4LTExMCAxMjgtMTYuNyAzMgotMjcuNyA2My43LTMzIDk1IDAgMS4zLS4yIDIuNy0uNSA0LS4zIDEuMy0uNSAyLjMtLjUgMyAwIDcuMyA2LjcgMTEgMjAgMTEgOCAwCjEzLjItLjggMTUuNS0yLjUgMi4zLTEuNyA0LjItNS41IDUuNS0xMS41IDItMTMuMyA1LjctMjcgMTEtNDEgMTQuNy00NC43IDM5Ci04NC41IDczLTExOS41czczLjctNjAuMiAxMTktNzUuNWM2LTIgOS01LjcgOS0xMXMtMy05LTktMTFjLTQ1LjMtMTUuMy04NS00MC41Ci0xMTktNzUuNXMtNTguMy03NC44LTczLTExOS41Yy00LjctMTQtOC4zLTI3LjMtMTEtNDAtMS4zLTYuNy0zLjItMTAuOC01LjUKLTEyLjUtMi4zLTEuNy03LjUtMi41LTE1LjUtMi41LTE0IDAtMjEgMy43LTIxIDExIDAgMiAyIDEwLjMgNiAyNSAyMC43IDgzLjMgNjcKMTUxLjcgMTM5IDIwNXptOTYgMzc5aDM5OTg5NHY0MEgwem0wIDBoMzk5OTA0djQwSDB6YCxiYXJhYm92ZXNob3J0bGVmdGhhcnBvb246YE01MDcsNDM1Yy00LDQsLTYuMyw4LjcsLTcsMTRjMCw1LjMsMC43LDksMiwxMQpjMS4zLDIsNS4zLDUuMywxMiwxMGM5MC43LDU0LDE1NiwxMzAsMTk2LDIyOGMzLjMsMTAuNyw2LjMsMTYuMyw5LDE3CmMyLDAuNyw1LDEsOSwxYzAsMCw1LDAsNSwwYzEwLjcsMCwxNi43LC0yLDE4LC02YzIsLTIuNywxLC05LjcsLTMsLTIxCmMtMzIsLTg3LjMsLTgyLjcsLTE1Ny43LC0xNTIsLTIxMWMwLDAsLTMsLTMsLTMsLTNsMzk5MzUxLDBsMCwtNDAKYy0zOTg1NzAsMCwtMzk5NDM3LDAsLTM5OTQzNywweiBNNTkzIDQzNSB2NDAgSDM5OTUwMCB2LTQwegpNMCAyODEgdi00MCBIMzk5OTA4IHY0MHogTTAgMjgxIHYtNDAgSDM5OTkwOCB2NDB6YCxyaWdodGhhcnBvb25hYm92ZXNob3J0YmFyOmBNMCwyNDEgbDAsNDBjMzk5MTI2LDAsMzk5OTkzLDAsMzk5OTkzLDAKYzQuNywtNC43LDcsLTkuMyw3LC0xNGMwLC05LjMsLTMuNywtMTUuMywtMTEsLTE4Yy05Mi43LC01Ni43LC0xNTksLTEzMy43LC0xOTksCi0yMzFjLTMuMywtOS4zLC02LC0xNC43LC04LC0xNmMtMiwtMS4zLC03LC0yLC0xNSwtMmMtMTAuNywwLC0xNi43LDIsLTE4LDYKYy0yLDIuNywtMSw5LjcsMywyMWMxNS4zLDQyLDM2LjcsODEuOCw2NCwxMTkuNWMyNy4zLDM3LjcsNTgsNjkuMiw5Miw5NC41egpNMCAyNDEgdjQwIEgzOTk5MDggdi00MHogTTAgNDc1IHYtNDAgSDM5OTUwMCB2NDB6IE0wIDQ3NSB2LTQwIEgzOTk1MDAgdjQwemAsc2hvcnRiYXJhYm92ZWxlZnRoYXJwb29uOmBNNyw0MzVjLTQsNCwtNi4zLDguNywtNywxNGMwLDUuMywwLjcsOSwyLDExCmMxLjMsMiw1LjMsNS4zLDEyLDEwYzkwLjcsNTQsMTU2LDEzMCwxOTYsMjI4YzMuMywxMC43LDYuMywxNi4zLDksMTdjMiwwLjcsNSwxLDksCjFjMCwwLDUsMCw1LDBjMTAuNywwLDE2LjcsLTIsMTgsLTZjMiwtMi43LDEsLTkuNywtMywtMjFjLTMyLC04Ny4zLC04Mi43LC0xNTcuNywKLTE1MiwtMjExYzAsMCwtMywtMywtMywtM2wzOTk5MDcsMGwwLC00MGMtMzk5MTI2LDAsLTM5OTk5MywwLC0zOTk5OTMsMHoKTTkzIDQzNSB2NDAgSDQwMDAwMCB2LTQweiBNNTAwIDI0MSB2NDAgSDQwMDAwMCB2LTQweiBNNTAwIDI0MSB2NDAgSDQwMDAwMCB2LTQwemAsc2hvcnRyaWdodGhhcnBvb25hYm92ZWJhcjpgTTUzLDI0MWwwLDQwYzM5ODU3MCwwLDM5OTQzNywwLDM5OTQzNywwCmM0LjcsLTQuNyw3LC05LjMsNywtMTRjMCwtOS4zLC0zLjcsLTE1LjMsLTExLC0xOGMtOTIuNywtNTYuNywtMTU5LC0xMzMuNywtMTk5LAotMjMxYy0zLjMsLTkuMywtNiwtMTQuNywtOCwtMTZjLTIsLTEuMywtNywtMiwtMTUsLTJjLTEwLjcsMCwtMTYuNywyLC0xOCw2CmMtMiwyLjcsLTEsOS43LDMsMjFjMTUuMyw0MiwzNi43LDgxLjgsNjQsMTE5LjVjMjcuMywzNy43LDU4LDY5LjIsOTIsOTQuNXoKTTUwMCAyNDEgdjQwIEgzOTk0MDggdi00MHogTTUwMCA0MzUgdjQwIEg0MDAwMDAgdi00MHpgfSxDYmU9byhmdW5jdGlvbihlLHIpe3N3aXRjaChlKXtjYXNlImxicmFjayI6cmV0dXJuIk00MDMgMTc1OSBWODQgSDY2NiBWMCBIMzE5IFYxNzU5IHYiK3IrYCB2MTc1OSBoMzQ3IHYtODQKSDQwM3ogTTQwMyAxNzU5IFYwIEgzMTkgVjE3NTkgdmArcisiIHYxNzU5IGg4NHoiO2Nhc2UicmJyYWNrIjpyZXR1cm4iTTM0NyAxNzU5IFYwIEgwIFY4NCBIMjYzIFYxNzU5IHYiK3IrYCB2MTc1OSBIMCB2ODQgSDM0N3oKTTM0NyAxNzU5IFYwIEgyNjMgVjE3NTkgdmArcisiIHYxNzU5IGg4NHoiO2Nhc2UidmVydCI6cmV0dXJuIk0xNDUgMTUgdjU4NSB2IityK2AgdjU4NSBjMi42NjcsMTAsOS42NjcsMTUsMjEsMTUKYzEwLDAsMTYuNjY3LC01LDIwLC0xNSB2LTU4NSB2YCstcitgIHYtNTg1IGMtMi42NjcsLTEwLC05LjY2NywtMTUsLTIxLC0xNQpjLTEwLDAsLTE2LjY2Nyw1LC0yMCwxNXogTTE4OCAxNSBIMTQ1IHY1ODUgdmArcisiIHY1ODUgaDQzeiI7Y2FzZSJkb3VibGV2ZXJ0IjpyZXR1cm4iTTE0NSAxNSB2NTg1IHYiK3IrYCB2NTg1IGMyLjY2NywxMCw5LjY2NywxNSwyMSwxNQpjMTAsMCwxNi42NjcsLTUsMjAsLTE1IHYtNTg1IHZgKy1yK2Agdi01ODUgYy0yLjY2NywtMTAsLTkuNjY3LC0xNSwtMjEsLTE1CmMtMTAsMCwtMTYuNjY3LDUsLTIwLDE1eiBNMTg4IDE1IEgxNDUgdjU4NSB2YCtyK2AgdjU4NSBoNDN6Ck0zNjcgMTUgdjU4NSB2YCtyK2AgdjU4NSBjMi42NjcsMTAsOS42NjcsMTUsMjEsMTUKYzEwLDAsMTYuNjY3LC01LDIwLC0xNSB2LTU4NSB2YCstcitgIHYtNTg1IGMtMi42NjcsLTEwLC05LjY2NywtMTUsLTIxLC0xNQpjLTEwLDAsLTE2LjY2Nyw1LC0yMCwxNXogTTQxMCAxNSBIMzY3IHY1ODUgdmArcisiIHY1ODUgaDQzeiI7Y2FzZSJsZmxvb3IiOnJldHVybiJNMzE5IDYwMiBWMCBINDAzIFY2MDIgdiIrcitgIHYxNzE1IGgyNjMgdjg0IEgzMTl6Ck1NMzE5IDYwMiBWMCBINDAzIFY2MDIgdmArcisiIHYxNzE1IEgzMTl6IjtjYXNlInJmbG9vciI6cmV0dXJuIk0zMTkgNjAyIFYwIEg0MDMgVjYwMiB2IityK2AgdjE3OTkgSDAgdi04NCBIMzE5egpNTTMxOSA2MDIgVjAgSDQwMyBWNjAyIHZgK3IrIiB2MTcxNSBIMzE5eiI7Y2FzZSJsY2VpbCI6cmV0dXJuIk00MDMgMTc1OSBWODQgSDY2NiBWMCBIMzE5IFYxNzU5IHYiK3IrYCB2NjAyIGg4NHoKTTQwMyAxNzU5IFYwIEgzMTkgVjE3NTkgdmArcisiIHY2MDIgaDg0eiI7Y2FzZSJyY2VpbCI6cmV0dXJuIk0zNDcgMTc1OSBWMCBIMCBWODQgSDI2MyBWMTc1OSB2IityK2AgdjYwMiBoODR6Ck0zNDcgMTc1OSBWMCBoLTg0IFYxNzU5IHZgK3IrIiB2NjAyIGg4NHoiO2Nhc2UibHBhcmVuIjpyZXR1cm5gTTg2Myw5YzAsLTIsLTIsLTUsLTYsLTljMCwwLC0xNywwLC0xNywwYy0xMi43LDAsLTE5LjMsMC4zLC0yMCwxCmMtNS4zLDUuMywtMTAuMywxMSwtMTUsMTdjLTI0Mi43LDI5NC43LC0zOTUuMyw2ODIsLTQ1OCwxMTYyYy0yMS4zLDE2My4zLC0zMy4zLDM0OSwKLTM2LDU1NyBsMCxgKyhyKzg0KStgYzAuMiw2LDAsMjYsMCw2MGMyLDE1OS4zLDEwLDMxMC43LDI0LDQ1NGM1My4zLDUyOCwyMTAsCjk0OS43LDQ3MCwxMjY1YzQuNyw2LDkuNywxMS43LDE1LDE3YzAuNywwLjcsNywxLDE5LDFjMCwwLDE4LDAsMTgsMGM0LC00LDYsLTcsNiwtOQpjMCwtMi43LC0zLjMsLTguNywtMTAsLTE4Yy0xMzUuMywtMTkyLjcsLTIzNS41LC00MTQuMywtMzAwLjUsLTY2NWMtNjUsLTI1MC43LC0xMDIuNSwKLTU0NC43LC0xMTIuNSwtODgyYy0yLC0xMDQsLTMsLTE2NywtMywtMTg5CmwwLC1gKyhyKzkyKStgYzAsLTE2Mi43LDUuNywtMzE0LDE3LC00NTRjMjAuNywtMjcyLDYzLjcsLTUxMywxMjksLTcyM2M2NS4zLAotMjEwLDE1NS4zLC0zOTYuMywyNzAsLTU1OWM2LjcsLTkuMywxMCwtMTUuMywxMCwtMTh6YDtjYXNlInJwYXJlbiI6cmV0dXJuYE03NiwwYy0xNi43LDAsLTI1LDMsLTI1LDljMCwyLDIsNi4zLDYsMTNjMjEuMywyOC43LDQyLjMsNjAuMywKNjMsOTVjOTYuNywxNTYuNywxNzIuOCwzMzIuNSwyMjguNSw1MjcuNWM1NS43LDE5NSw5Mi44LDQxNi41LDExMS41LDY2NC41CmMxMS4zLDEzOS4zLDE3LDI5MC43LDE3LDQ1NGMwLDI4LDEuNyw0MywzLjMsNDVsMCxgKyhyKzkpK2AKYy0zLDQsLTMuMywxNi43LC0zLjMsMzhjMCwxNjIsLTUuNywzMTMuNywtMTcsNDU1Yy0xOC43LDI0OCwtNTUuOCw0NjkuMywtMTExLjUsNjY0CmMtNTUuNywxOTQuNywtMTMxLjgsMzcwLjMsLTIyOC41LDUyN2MtMjAuNywzNC43LC00MS43LDY2LjMsLTYzLDk1Yy0yLDMuMywtNCw3LC02LDExCmMwLDcuMyw1LjcsMTEsMTcsMTFjMCwwLDExLDAsMTEsMGM5LjMsMCwxNC4zLC0wLjMsMTUsLTFjNS4zLC01LjMsMTAuMywtMTEsMTUsLTE3CmMyNDIuNywtMjk0LjcsMzk1LjMsLTY4MS43LDQ1OCwtMTE2MWMyMS4zLC0xNjQuNywzMy4zLC0zNTAuNywzNiwtNTU4CmwwLC1gKyhyKzE0NCkrYGMtMiwtMTU5LjMsLTEwLC0zMTAuNywtMjQsLTQ1NGMtNTMuMywtNTI4LC0yMTAsLTk0OS43LAotNDcwLC0xMjY1Yy00LjcsLTYsLTkuNywtMTEuNywtMTUsLTE3Yy0wLjcsLTAuNywtNi43LC0xLC0xOCwtMXpgO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHN0cmV0Y2h5IGRlbGltaXRlci4iKX19LCJ0YWxsRGVsaW0iKSxlZD1jbGFzc3tzdGF0aWN7byh0aGlzLCJEb2N1bWVudEZyYWdtZW50Iil9Y29uc3RydWN0b3IoZSl7dGhpcy5jaGlsZHJlbj12b2lkIDAsdGhpcy5jbGFzc2VzPXZvaWQgMCx0aGlzLmhlaWdodD12b2lkIDAsdGhpcy5kZXB0aD12b2lkIDAsdGhpcy5tYXhGb250U2l6ZT12b2lkIDAsdGhpcy5zdHlsZT12b2lkIDAsdGhpcy5jaGlsZHJlbj1lLHRoaXMuY2xhc3Nlcz1bXSx0aGlzLmhlaWdodD0wLHRoaXMuZGVwdGg9MCx0aGlzLm1heEZvbnRTaXplPTAsdGhpcy5zdHlsZT17fX1oYXNDbGFzcyhlKXtyZXR1cm4gSnQuY29udGFpbnModGhpcy5jbGFzc2VzLGUpfXRvTm9kZSgpe2Zvcih2YXIgZT1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkscj0wO3I8dGhpcy5jaGlsZHJlbi5sZW5ndGg7cisrKWUuYXBwZW5kQ2hpbGQodGhpcy5jaGlsZHJlbltyXS50b05vZGUoKSk7cmV0dXJuIGV9dG9NYXJrdXAoKXtmb3IodmFyIGU9IiIscj0wO3I8dGhpcy5jaGlsZHJlbi5sZW5ndGg7cisrKWUrPXRoaXMuY2hpbGRyZW5bcl0udG9NYXJrdXAoKTtyZXR1cm4gZX10b1RleHQoKXt2YXIgZT1vKHI9PnIudG9UZXh0KCksInRvVGV4dCIpO3JldHVybiB0aGlzLmNoaWxkcmVuLm1hcChlKS5qb2luKCIiKX19LGpsPXsiQU1TLVJlZ3VsYXIiOnszMjpbMCwwLDAsMCwuMjVdLDY1OlswLC42ODg4OSwwLDAsLjcyMjIyXSw2NjpbMCwuNjg4ODksMCwwLC42NjY2N10sNjc6WzAsLjY4ODg5LDAsMCwuNzIyMjJdLDY4OlswLC42ODg4OSwwLDAsLjcyMjIyXSw2OTpbMCwuNjg4ODksMCwwLC42NjY2N10sNzA6WzAsLjY4ODg5LDAsMCwuNjExMTFdLDcxOlswLC42ODg4OSwwLDAsLjc3Nzc4XSw3MjpbMCwuNjg4ODksMCwwLC43Nzc3OF0sNzM6WzAsLjY4ODg5LDAsMCwuMzg4ODldLDc0OlsuMTY2NjcsLjY4ODg5LDAsMCwuNV0sNzU6WzAsLjY4ODg5LDAsMCwuNzc3NzhdLDc2OlswLC42ODg4OSwwLDAsLjY2NjY3XSw3NzpbMCwuNjg4ODksMCwwLC45NDQ0NV0sNzg6WzAsLjY4ODg5LDAsMCwuNzIyMjJdLDc5OlsuMTY2NjcsLjY4ODg5LDAsMCwuNzc3NzhdLDgwOlswLC42ODg4OSwwLDAsLjYxMTExXSw4MTpbLjE2NjY3LC42ODg4OSwwLDAsLjc3Nzc4XSw4MjpbMCwuNjg4ODksMCwwLC43MjIyMl0sODM6WzAsLjY4ODg5LDAsMCwuNTU1NTZdLDg0OlswLC42ODg4OSwwLDAsLjY2NjY3XSw4NTpbMCwuNjg4ODksMCwwLC43MjIyMl0sODY6WzAsLjY4ODg5LDAsMCwuNzIyMjJdLDg3OlswLC42ODg4OSwwLDAsMV0sODg6WzAsLjY4ODg5LDAsMCwuNzIyMjJdLDg5OlswLC42ODg4OSwwLDAsLjcyMjIyXSw5MDpbMCwuNjg4ODksMCwwLC42NjY2N10sMTA3OlswLC42ODg4OSwwLDAsLjU1NTU2XSwxNjA6WzAsMCwwLDAsLjI1XSwxNjU6WzAsLjY3NSwuMDI1LDAsLjc1XSwxNzQ6Wy4xNTU1OSwuNjkyMjQsMCwwLC45NDY2Nl0sMjQwOlswLC42ODg4OSwwLDAsLjU1NTU2XSwyOTU6WzAsLjY4ODg5LDAsMCwuNTQwMjhdLDcxMDpbMCwuODI1LDAsMCwyLjMzMzM0XSw3MzI6WzAsLjksMCwwLDIuMzMzMzRdLDc3MDpbMCwuODI1LDAsMCwyLjMzMzM0XSw3NzE6WzAsLjksMCwwLDIuMzMzMzRdLDk4OTpbLjA4MTY3LC41ODE2NywwLDAsLjc3Nzc4XSwxMDA4OlswLC40MzA1NiwuMDQwMjgsMCwuNjY2NjddLDgyNDU6WzAsLjU0OTg2LDAsMCwuMjc1XSw4NDYzOlswLC42ODg4OSwwLDAsLjU0MDI4XSw4NDg3OlswLC42ODg4OSwwLDAsLjcyMjIyXSw4NDk4OlswLC42ODg4OSwwLDAsLjU1NTU2XSw4NTAyOlswLC42ODg4OSwwLDAsLjY2NjY3XSw4NTAzOlswLC42ODg4OSwwLDAsLjQ0NDQ1XSw4NTA0OlswLC42ODg4OSwwLDAsLjY2NjY3XSw4NTEzOlswLC42ODg4OSwwLDAsLjYzODg5XSw4NTkyOlstLjAzNTk4LC40NjQwMiwwLDAsLjVdLDg1OTQ6Wy0uMDM1OTgsLjQ2NDAyLDAsMCwuNV0sODYwMjpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2MDM6Wy0uMTMzMTMsLjM2Njg3LDAsMCwxXSw4NjA2OlsuMDEzNTQsLjUyMjM5LDAsMCwxXSw4NjA4OlsuMDEzNTQsLjUyMjM5LDAsMCwxXSw4NjEwOlsuMDEzNTQsLjUyMjM5LDAsMCwxLjExMTExXSw4NjExOlsuMDEzNTQsLjUyMjM5LDAsMCwxLjExMTExXSw4NjE5OlswLC41NDk4NiwwLDAsMV0sODYyMDpbMCwuNTQ5ODYsMCwwLDFdLDg2MjE6Wy0uMTMzMTMsLjM3Nzg4LDAsMCwxLjM4ODg5XSw4NjIyOlstLjEzMzEzLC4zNjY4NywwLDAsMV0sODYyNDpbMCwuNjkyMjQsMCwwLC41XSw4NjI1OlswLC42OTIyNCwwLDAsLjVdLDg2MzA6WzAsLjQzMDU2LDAsMCwxXSw4NjMxOlswLC40MzA1NiwwLDAsMV0sODYzNDpbLjA4MTk4LC41ODE5OCwwLDAsLjc3Nzc4XSw4NjM1OlsuMDgxOTgsLjU4MTk4LDAsMCwuNzc3NzhdLDg2Mzg6Wy4xOTQ0NCwuNjkyMjQsMCwwLC40MTY2N10sODYzOTpbLjE5NDQ0LC42OTIyNCwwLDAsLjQxNjY3XSw4NjQyOlsuMTk0NDQsLjY5MjI0LDAsMCwuNDE2NjddLDg2NDM6Wy4xOTQ0NCwuNjkyMjQsMCwwLC40MTY2N10sODY0NDpbLjE4MDgsLjY3NSwwLDAsMV0sODY0NjpbLjE4MDgsLjY3NSwwLDAsMV0sODY0NzpbLjE4MDgsLjY3NSwwLDAsMV0sODY0ODpbLjE5NDQ0LC42OTIyNCwwLDAsLjgzMzM0XSw4NjQ5OlsuMTgwOCwuNjc1LDAsMCwxXSw4NjUwOlsuMTk0NDQsLjY5MjI0LDAsMCwuODMzMzRdLDg2NTE6Wy4wMTM1NCwuNTIyMzksMCwwLDFdLDg2NTI6Wy4wMTM1NCwuNTIyMzksMCwwLDFdLDg2NTM6Wy0uMTMzMTMsLjM2Njg3LDAsMCwxXSw4NjU0OlstLjEzMzEzLC4zNjY4NywwLDAsMV0sODY1NTpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2NjY6Wy4xMzY2NywuNjM2NjcsMCwwLDFdLDg2Njc6Wy4xMzY2NywuNjM2NjcsMCwwLDFdLDg2Njk6Wy0uMTMzMTMsLjM3Nzg4LDAsMCwxXSw4NjcyOlstLjA2NCwuNDM3LDAsMCwxLjMzNF0sODY3NDpbLS4wNjQsLjQzNywwLDAsMS4zMzRdLDg3MDU6WzAsLjgyNSwwLDAsLjVdLDg3MDg6WzAsLjY4ODg5LDAsMCwuNTU1NTZdLDg3MDk6Wy4wODE2NywuNTgxNjcsMCwwLC43Nzc3OF0sODcxNzpbMCwuNDMwNTYsMCwwLC40MjkxN10sODcyMjpbLS4wMzU5OCwuNDY0MDIsMCwwLC41XSw4NzI0OlsuMDgxOTgsLjY5MjI0LDAsMCwuNzc3NzhdLDg3MjY6Wy4wODE2NywuNTgxNjcsMCwwLC43Nzc3OF0sODczMzpbMCwuNjkyMjQsMCwwLC43Nzc3OF0sODczNjpbMCwuNjkyMjQsMCwwLC43MjIyMl0sODczNzpbMCwuNjkyMjQsMCwwLC43MjIyMl0sODczODpbLjAzNTE3LC41MjIzOSwwLDAsLjcyMjIyXSw4NzM5OlsuMDgxNjcsLjU4MTY3LDAsMCwuMjIyMjJdLDg3NDA6Wy4yNTE0MiwuNzQxMTEsMCwwLC4yNzc3OF0sODc0MTpbLjA4MTY3LC41ODE2NywwLDAsLjM4ODg5XSw4NzQyOlsuMjUxNDIsLjc0MTExLDAsMCwuNV0sODc1NjpbMCwuNjkyMjQsMCwwLC42NjY2N10sODc1NzpbMCwuNjkyMjQsMCwwLC42NjY2N10sODc2NDpbLS4xMzMxMywuMzY2ODcsMCwwLC43Nzc3OF0sODc2NTpbLS4xMzMxMywuMzc3ODgsMCwwLC43Nzc3OF0sODc2OTpbLS4xMzMxMywuMzY2ODcsMCwwLC43Nzc3OF0sODc3MDpbLS4wMzYyNSwuNDYzNzUsMCwwLC43Nzc3OF0sODc3NDpbLjMwMjc0LC43OTM4MywwLDAsLjc3Nzc4XSw4Nzc2OlstLjAxNjg4LC40ODMxMiwwLDAsLjc3Nzc4XSw4Nzc4OlsuMDgxNjcsLjU4MTY3LDAsMCwuNzc3NzhdLDg3ODI6Wy4wNjA2MiwuNTQ5ODYsMCwwLC43Nzc3OF0sODc4MzpbLjA2MDYyLC41NDk4NiwwLDAsLjc3Nzc4XSw4Nzg1OlsuMDgxOTgsLjU4MTk4LDAsMCwuNzc3NzhdLDg3ODY6Wy4wODE5OCwuNTgxOTgsMCwwLC43Nzc3OF0sODc4NzpbLjA4MTk4LC41ODE5OCwwLDAsLjc3Nzc4XSw4NzkwOlswLC42OTIyNCwwLDAsLjc3Nzc4XSw4NzkxOlsuMjI5NTgsLjcyOTU4LDAsMCwuNzc3NzhdLDg3OTY6Wy4wODE5OCwuOTE2NjcsMCwwLC43Nzc3OF0sODgwNjpbLjI1NTgzLC43NTU4MywwLDAsLjc3Nzc4XSw4ODA3OlsuMjU1ODMsLjc1NTgzLDAsMCwuNzc3NzhdLDg4MDg6Wy4yNTE0MiwuNzU3MjYsMCwwLC43Nzc3OF0sODgwOTpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSw4ODEyOlsuMjU1ODMsLjc1NTgzLDAsMCwuNV0sODgxNDpbLjIwNTc2LC43MDU3NiwwLDAsLjc3Nzc4XSw4ODE1OlsuMjA1NzYsLjcwNTc2LDAsMCwuNzc3NzhdLDg4MTY6Wy4zMDI3NCwuNzkzODMsMCwwLC43Nzc3OF0sODgxNzpbLjMwMjc0LC43OTM4MywwLDAsLjc3Nzc4XSw4ODE4OlsuMjI5NTgsLjcyOTU4LDAsMCwuNzc3NzhdLDg4MTk6Wy4yMjk1OCwuNzI5NTgsMCwwLC43Nzc3OF0sODgyMjpbLjE4MDgsLjY3NSwwLDAsLjc3Nzc4XSw4ODIzOlsuMTgwOCwuNjc1LDAsMCwuNzc3NzhdLDg4Mjg6Wy4xMzY2NywuNjM2NjcsMCwwLC43Nzc3OF0sODgyOTpbLjEzNjY3LC42MzY2NywwLDAsLjc3Nzc4XSw4ODMwOlsuMjI5NTgsLjcyOTU4LDAsMCwuNzc3NzhdLDg4MzE6Wy4yMjk1OCwuNzI5NTgsMCwwLC43Nzc3OF0sODgzMjpbLjIwNTc2LC43MDU3NiwwLDAsLjc3Nzc4XSw4ODMzOlsuMjA1NzYsLjcwNTc2LDAsMCwuNzc3NzhdLDg4NDA6Wy4zMDI3NCwuNzkzODMsMCwwLC43Nzc3OF0sODg0MTpbLjMwMjc0LC43OTM4MywwLDAsLjc3Nzc4XSw4ODQyOlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDg4NDM6Wy4xMzU5NywuNjM1OTcsMCwwLC43Nzc3OF0sODg0NzpbLjAzNTE3LC41NDk4NiwwLDAsLjc3Nzc4XSw4ODQ4OlsuMDM1MTcsLjU0OTg2LDAsMCwuNzc3NzhdLDg4NTg6Wy4wODE5OCwuNTgxOTgsMCwwLC43Nzc3OF0sODg1OTpbLjA4MTk4LC41ODE5OCwwLDAsLjc3Nzc4XSw4ODYxOlsuMDgxOTgsLjU4MTk4LDAsMCwuNzc3NzhdLDg4NjI6WzAsLjY3NSwwLDAsLjc3Nzc4XSw4ODYzOlswLC42NzUsMCwwLC43Nzc3OF0sODg2NDpbMCwuNjc1LDAsMCwuNzc3NzhdLDg4NjU6WzAsLjY3NSwwLDAsLjc3Nzc4XSw4ODcyOlswLC42OTIyNCwwLDAsLjYxMTExXSw4ODczOlswLC42OTIyNCwwLDAsLjcyMjIyXSw4ODc0OlswLC42OTIyNCwwLDAsLjg4ODg5XSw4ODc2OlswLC42ODg4OSwwLDAsLjYxMTExXSw4ODc3OlswLC42ODg4OSwwLDAsLjYxMTExXSw4ODc4OlswLC42ODg4OSwwLDAsLjcyMjIyXSw4ODc5OlswLC42ODg4OSwwLDAsLjcyMjIyXSw4ODgyOlsuMDM1MTcsLjU0OTg2LDAsMCwuNzc3NzhdLDg4ODM6Wy4wMzUxNywuNTQ5ODYsMCwwLC43Nzc3OF0sODg4NDpbLjEzNjY3LC42MzY2NywwLDAsLjc3Nzc4XSw4ODg1OlsuMTM2NjcsLjYzNjY3LDAsMCwuNzc3NzhdLDg4ODg6WzAsLjU0OTg2LDAsMCwxLjExMTExXSw4ODkwOlsuMTk0NDQsLjQzMDU2LDAsMCwuNTU1NTZdLDg4OTE6Wy4xOTQ0NCwuNjkyMjQsMCwwLC42MTExMV0sODg5MjpbLjE5NDQ0LC42OTIyNCwwLDAsLjYxMTExXSw4OTAxOlswLC41NDk4NiwwLDAsLjI3Nzc4XSw4OTAzOlsuMDgxNjcsLjU4MTY3LDAsMCwuNzc3NzhdLDg5MDU6Wy4wODE2NywuNTgxNjcsMCwwLC43Nzc3OF0sODkwNjpbLjA4MTY3LC41ODE2NywwLDAsLjc3Nzc4XSw4OTA3OlswLC42OTIyNCwwLDAsLjc3Nzc4XSw4OTA4OlswLC42OTIyNCwwLDAsLjc3Nzc4XSw4OTA5OlstLjAzNTk4LC40NjQwMiwwLDAsLjc3Nzc4XSw4OTEwOlswLC41NDk4NiwwLDAsLjc2MDQyXSw4OTExOlswLC41NDk4NiwwLDAsLjc2MDQyXSw4OTEyOlsuMDM1MTcsLjU0OTg2LDAsMCwuNzc3NzhdLDg5MTM6Wy4wMzUxNywuNTQ5ODYsMCwwLC43Nzc3OF0sODkxNDpbMCwuNTQ5ODYsMCwwLC42NjY2N10sODkxNTpbMCwuNTQ5ODYsMCwwLC42NjY2N10sODkxNjpbMCwuNjkyMjQsMCwwLC42NjY2N10sODkxODpbLjAzOTEsLjUzOTEsMCwwLC43Nzc3OF0sODkxOTpbLjAzOTEsLjUzOTEsMCwwLC43Nzc3OF0sODkyMDpbLjAzNTE3LC41NDk4NiwwLDAsMS4zMzMzNF0sODkyMTpbLjAzNTE3LC41NDk4NiwwLDAsMS4zMzMzNF0sODkyMjpbLjM4NTY5LC44ODU2OSwwLDAsLjc3Nzc4XSw4OTIzOlsuMzg1NjksLjg4NTY5LDAsMCwuNzc3NzhdLDg5MjY6Wy4xMzY2NywuNjM2NjcsMCwwLC43Nzc3OF0sODkyNzpbLjEzNjY3LC42MzY2NywwLDAsLjc3Nzc4XSw4OTI4OlsuMzAyNzQsLjc5MzgzLDAsMCwuNzc3NzhdLDg5Mjk6Wy4zMDI3NCwuNzkzODMsMCwwLC43Nzc3OF0sODkzNDpbLjIzMjIyLC43NDExMSwwLDAsLjc3Nzc4XSw4OTM1OlsuMjMyMjIsLjc0MTExLDAsMCwuNzc3NzhdLDg5MzY6Wy4yMzIyMiwuNzQxMTEsMCwwLC43Nzc3OF0sODkzNzpbLjIzMjIyLC43NDExMSwwLDAsLjc3Nzc4XSw4OTM4OlsuMjA1NzYsLjcwNTc2LDAsMCwuNzc3NzhdLDg5Mzk6Wy4yMDU3NiwuNzA1NzYsMCwwLC43Nzc3OF0sODk0MDpbLjMwMjc0LC43OTM4MywwLDAsLjc3Nzc4XSw4OTQxOlsuMzAyNzQsLjc5MzgzLDAsMCwuNzc3NzhdLDg5OTQ6Wy4xOTQ0NCwuNjkyMjQsMCwwLC43Nzc3OF0sODk5NTpbLjE5NDQ0LC42OTIyNCwwLDAsLjc3Nzc4XSw5NDE2OlsuMTU1NTksLjY5MjI0LDAsMCwuOTAyMjJdLDk0ODQ6WzAsLjY5MjI0LDAsMCwuNV0sOTQ4ODpbMCwuNjkyMjQsMCwwLC41XSw5NDkyOlswLC4zNzc4OCwwLDAsLjVdLDk0OTY6WzAsLjM3Nzg4LDAsMCwuNV0sOTU4NTpbLjE5NDQ0LC42ODg4OSwwLDAsLjg4ODg5XSw5NTg2OlsuMTk0NDQsLjc0MTExLDAsMCwuODg4ODldLDk2MzI6WzAsLjY3NSwwLDAsLjc3Nzc4XSw5NjMzOlswLC42NzUsMCwwLC43Nzc3OF0sOTY1MDpbMCwuNTQ5ODYsMCwwLC43MjIyMl0sOTY1MTpbMCwuNTQ5ODYsMCwwLC43MjIyMl0sOTY1NDpbLjAzNTE3LC41NDk4NiwwLDAsLjc3Nzc4XSw5NjYwOlswLC41NDk4NiwwLDAsLjcyMjIyXSw5NjYxOlswLC41NDk4NiwwLDAsLjcyMjIyXSw5NjY0OlsuMDM1MTcsLjU0OTg2LDAsMCwuNzc3NzhdLDk2NzQ6Wy4xMTExMSwuNjkyMjQsMCwwLC42NjY2N10sOTczMzpbLjE5NDQ0LC42OTIyNCwwLDAsLjk0NDQ1XSwxMDAwMzpbMCwuNjkyMjQsMCwwLC44MzMzNF0sMTAwMTY6WzAsLjY5MjI0LDAsMCwuODMzMzRdLDEwNzMxOlsuMTExMTEsLjY5MjI0LDAsMCwuNjY2NjddLDEwODQ2OlsuMTk0NDQsLjc1NTgzLDAsMCwuNjExMTFdLDEwODc3OlsuMTM2NjcsLjYzNjY3LDAsMCwuNzc3NzhdLDEwODc4OlsuMTM2NjcsLjYzNjY3LDAsMCwuNzc3NzhdLDEwODg1OlsuMjU1ODMsLjc1NTgzLDAsMCwuNzc3NzhdLDEwODg2OlsuMjU1ODMsLjc1NTgzLDAsMCwuNzc3NzhdLDEwODg3OlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDEwODg4OlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDEwODg5OlsuMjYxNjcsLjc1NzI2LDAsMCwuNzc3NzhdLDEwODkwOlsuMjYxNjcsLjc1NzI2LDAsMCwuNzc3NzhdLDEwODkxOlsuNDgyNTYsLjk4MjU2LDAsMCwuNzc3NzhdLDEwODkyOlsuNDgyNTYsLjk4MjU2LDAsMCwuNzc3NzhdLDEwOTAxOlsuMTM2NjcsLjYzNjY3LDAsMCwuNzc3NzhdLDEwOTAyOlsuMTM2NjcsLjYzNjY3LDAsMCwuNzc3NzhdLDEwOTMzOlsuMjUxNDIsLjc1NzI2LDAsMCwuNzc3NzhdLDEwOTM0OlsuMjUxNDIsLjc1NzI2LDAsMCwuNzc3NzhdLDEwOTM1OlsuMjYxNjcsLjc1NzI2LDAsMCwuNzc3NzhdLDEwOTM2OlsuMjYxNjcsLjc1NzI2LDAsMCwuNzc3NzhdLDEwOTM3OlsuMjYxNjcsLjc1NzI2LDAsMCwuNzc3NzhdLDEwOTM4OlsuMjYxNjcsLjc1NzI2LDAsMCwuNzc3NzhdLDEwOTQ5OlsuMjU1ODMsLjc1NTgzLDAsMCwuNzc3NzhdLDEwOTUwOlsuMjU1ODMsLjc1NTgzLDAsMCwuNzc3NzhdLDEwOTU1OlsuMjg0ODEsLjc5MzgzLDAsMCwuNzc3NzhdLDEwOTU2OlsuMjg0ODEsLjc5MzgzLDAsMCwuNzc3NzhdLDU3MzUwOlsuMDgxNjcsLjU4MTY3LDAsMCwuMjIyMjJdLDU3MzUxOlsuMDgxNjcsLjU4MTY3LDAsMCwuMzg4ODldLDU3MzUyOlsuMDgxNjcsLjU4MTY3LDAsMCwuNzc3NzhdLDU3MzUzOlswLC40MzA1NiwuMDQwMjgsMCwuNjY2NjddLDU3MzU2OlsuMjUxNDIsLjc1NzI2LDAsMCwuNzc3NzhdLDU3MzU3OlsuMjUxNDIsLjc1NzI2LDAsMCwuNzc3NzhdLDU3MzU4OlsuNDE5NTEsLjkxOTUxLDAsMCwuNzc3NzhdLDU3MzU5OlsuMzAyNzQsLjc5MzgzLDAsMCwuNzc3NzhdLDU3MzYwOlsuMzAyNzQsLjc5MzgzLDAsMCwuNzc3NzhdLDU3MzYxOlsuNDE5NTEsLjkxOTUxLDAsMCwuNzc3NzhdLDU3MzY2OlsuMjUxNDIsLjc1NzI2LDAsMCwuNzc3NzhdLDU3MzY3OlsuMjUxNDIsLjc1NzI2LDAsMCwuNzc3NzhdLDU3MzY4OlsuMjUxNDIsLjc1NzI2LDAsMCwuNzc3NzhdLDU3MzY5OlsuMjUxNDIsLjc1NzI2LDAsMCwuNzc3NzhdLDU3MzcwOlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDU3MzcxOlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdfSwiQ2FsaWdyYXBoaWMtUmVndWxhciI6ezMyOlswLDAsMCwwLC4yNV0sNjU6WzAsLjY4MzMzLDAsLjE5NDQ1LC43OTg0N10sNjY6WzAsLjY4MzMzLC4wMzA0MSwuMTM4ODksLjY1NjgxXSw2NzpbMCwuNjgzMzMsLjA1ODM0LC4xMzg4OSwuNTI2NTNdLDY4OlswLC42ODMzMywuMDI3NzgsLjA4MzM0LC43NzEzOV0sNjk6WzAsLjY4MzMzLC4wODk0NCwuMTExMTEsLjUyNzc4XSw3MDpbMCwuNjgzMzMsLjA5OTMxLC4xMTExMSwuNzE4NzVdLDcxOlsuMDk3MjIsLjY4MzMzLC4wNTkzLC4xMTExMSwuNTk0ODddLDcyOlswLC42ODMzMywuMDA5NjUsLjExMTExLC44NDQ1Ml0sNzM6WzAsLjY4MzMzLC4wNzM4MiwwLC41NDQ1Ml0sNzQ6Wy4wOTcyMiwuNjgzMzMsLjE4NDcyLC4xNjY2NywuNjc3NzhdLDc1OlswLC42ODMzMywuMDE0NDUsLjA1NTU2LC43NjE5NV0sNzY6WzAsLjY4MzMzLDAsLjEzODg5LC42ODk3Ml0sNzc6WzAsLjY4MzMzLDAsLjEzODg5LDEuMjAwOV0sNzg6WzAsLjY4MzMzLC4xNDczNiwuMDgzMzQsLjgyMDQ5XSw3OTpbMCwuNjgzMzMsLjAyNzc4LC4xMTExMSwuNzk2MTFdLDgwOlswLC42ODMzMywuMDgyMjIsLjA4MzM0LC42OTU1Nl0sODE6Wy4wOTcyMiwuNjgzMzMsMCwuMTExMTEsLjgxNjY3XSw4MjpbMCwuNjgzMzMsMCwuMDgzMzQsLjg0NzVdLDgzOlswLC42ODMzMywuMDc1LC4xMzg4OSwuNjA1NTZdLDg0OlswLC42ODMzMywuMjU0MTcsMCwuNTQ0NjRdLDg1OlswLC42ODMzMywuMDk5MzEsLjA4MzM0LC42MjU4M10sODY6WzAsLjY4MzMzLC4wODIyMiwwLC42MTI3OF0sODc6WzAsLjY4MzMzLC4wODIyMiwuMDgzMzQsLjk4Nzc4XSw4ODpbMCwuNjgzMzMsLjE0NjQzLC4xMzg4OSwuNzEzM10sODk6Wy4wOTcyMiwuNjgzMzMsLjA4MjIyLC4wODMzNCwuNjY4MzRdLDkwOlswLC42ODMzMywuMDc5NDQsLjEzODg5LC43MjQ3M10sMTYwOlswLDAsMCwwLC4yNV19LCJGcmFrdHVyLVJlZ3VsYXIiOnszMjpbMCwwLDAsMCwuMjVdLDMzOlswLC42OTE0MSwwLDAsLjI5NTc0XSwzNDpbMCwuNjkxNDEsMCwwLC4yMTQ3MV0sMzg6WzAsLjY5MTQxLDAsMCwuNzM3ODZdLDM5OlswLC42OTE0MSwwLDAsLjIxMjAxXSw0MDpbLjI0OTgyLC43NDk0NywwLDAsLjM4ODY1XSw0MTpbLjI0OTgyLC43NDk0NywwLDAsLjM4ODY1XSw0MjpbMCwuNjIxMTksMCwwLC4yNzc2NF0sNDM6Wy4wODMxOSwuNTgyODMsMCwwLC43NTYyM10sNDQ6WzAsLjEwODAzLDAsMCwuMjc3NjRdLDQ1OlsuMDgzMTksLjU4MjgzLDAsMCwuNzU2MjNdLDQ2OlswLC4xMDgwMywwLDAsLjI3NzY0XSw0NzpbLjI0OTgyLC43NDk0NywwLDAsLjUwMTgxXSw0ODpbMCwuNDc1MzQsMCwwLC41MDE4MV0sNDk6WzAsLjQ3NTM0LDAsMCwuNTAxODFdLDUwOlswLC40NzUzNCwwLDAsLjUwMTgxXSw1MTpbLjE4OTA2LC40NzUzNCwwLDAsLjUwMTgxXSw1MjpbLjE4OTA2LC40NzUzNCwwLDAsLjUwMTgxXSw1MzpbLjE4OTA2LC40NzUzNCwwLDAsLjUwMTgxXSw1NDpbMCwuNjkxNDEsMCwwLC41MDE4MV0sNTU6Wy4xODkwNiwuNDc1MzQsMCwwLC41MDE4MV0sNTY6WzAsLjY5MTQxLDAsMCwuNTAxODFdLDU3OlsuMTg5MDYsLjQ3NTM0LDAsMCwuNTAxODFdLDU4OlswLC40NzUzNCwwLDAsLjIxNjA2XSw1OTpbLjEyNjA0LC40NzUzNCwwLDAsLjIxNjA2XSw2MTpbLS4xMzA5OSwuMzY4NjYsMCwwLC43NTYyM10sNjM6WzAsLjY5MTQxLDAsMCwuMzYyNDVdLDY1OlswLC42OTE0MSwwLDAsLjcxNzZdLDY2OlswLC42OTE0MSwwLDAsLjg4Mzk3XSw2NzpbMCwuNjkxNDEsMCwwLC42MTI1NF0sNjg6WzAsLjY5MTQxLDAsMCwuODMxNThdLDY5OlswLC42OTE0MSwwLDAsLjY2Mjc4XSw3MDpbLjEyNjA0LC42OTE0MSwwLDAsLjYxMTE5XSw3MTpbMCwuNjkxNDEsMCwwLC43ODUzOV0sNzI6Wy4wNjMwMiwuNjkxNDEsMCwwLC43MjAzXSw3MzpbMCwuNjkxNDEsMCwwLC41NTQ0OF0sNzQ6Wy4xMjYwNCwuNjkxNDEsMCwwLC41NTIzMV0sNzU6WzAsLjY5MTQxLDAsMCwuNjY4NDVdLDc2OlswLC42OTE0MSwwLDAsLjY2NjAyXSw3NzpbMCwuNjkxNDEsMCwwLDEuMDQ5NTNdLDc4OlswLC42OTE0MSwwLDAsLjgzMjEyXSw3OTpbMCwuNjkxNDEsMCwwLC44MjY5OV0sODA6Wy4xODkwNiwuNjkxNDEsMCwwLC44Mjc1M10sODE6Wy4wMzc4MSwuNjkxNDEsMCwwLC44MjY5OV0sODI6WzAsLjY5MTQxLDAsMCwuODI4MDddLDgzOlswLC42OTE0MSwwLDAsLjgyODYxXSw4NDpbMCwuNjkxNDEsMCwwLC42Njg5OV0sODU6WzAsLjY5MTQxLDAsMCwuNjQ1NzZdLDg2OlswLC42OTE0MSwwLDAsLjgzMTMxXSw4NzpbMCwuNjkxNDEsMCwwLDEuMDQ2MDJdLDg4OlswLC42OTE0MSwwLDAsLjcxOTIyXSw4OTpbLjE4OTA2LC42OTE0MSwwLDAsLjgzMjkzXSw5MDpbLjEyNjA0LC42OTE0MSwwLDAsLjYwMjAxXSw5MTpbLjI0OTgyLC43NDk0NywwLDAsLjI3NzY0XSw5MzpbLjI0OTgyLC43NDk0NywwLDAsLjI3NzY0XSw5NDpbMCwuNjkxNDEsMCwwLC40OTk2NV0sOTc6WzAsLjQ3NTM0LDAsMCwuNTAwNDZdLDk4OlswLC42OTE0MSwwLDAsLjUxMzE1XSw5OTpbMCwuNDc1MzQsMCwwLC4zODk0Nl0sMTAwOlswLC42MjExOSwwLDAsLjQ5ODU3XSwxMDE6WzAsLjQ3NTM0LDAsMCwuNDAwNTNdLDEwMjpbLjE4OTA2LC42OTE0MSwwLDAsLjMyNjI2XSwxMDM6Wy4xODkwNiwuNDc1MzQsMCwwLC41MDM3XSwxMDQ6Wy4xODkwNiwuNjkxNDEsMCwwLC41MjEyNl0sMTA1OlswLC42OTE0MSwwLDAsLjI3ODk5XSwxMDY6WzAsLjY5MTQxLDAsMCwuMjgwODhdLDEwNzpbMCwuNjkxNDEsMCwwLC4zODk0Nl0sMTA4OlswLC42OTE0MSwwLDAsLjI3OTUzXSwxMDk6WzAsLjQ3NTM0LDAsMCwuNzY2NzZdLDExMDpbMCwuNDc1MzQsMCwwLC41MjY2Nl0sMTExOlswLC40NzUzNCwwLDAsLjQ4ODg1XSwxMTI6Wy4xODkwNiwuNTIzOTYsMCwwLC41MDA0Nl0sMTEzOlsuMTg5MDYsLjQ3NTM0LDAsMCwuNDg5MTJdLDExNDpbMCwuNDc1MzQsMCwwLC4zODkxOV0sMTE1OlswLC40NzUzNCwwLDAsLjQ0MjY2XSwxMTY6WzAsLjYyMTE5LDAsMCwuMzMzMDFdLDExNzpbMCwuNDc1MzQsMCwwLC41MTcyXSwxMTg6WzAsLjUyMzk2LDAsMCwuNTExOF0sMTE5OlswLC41MjM5NiwwLDAsLjc3MzUxXSwxMjA6Wy4xODkwNiwuNDc1MzQsMCwwLC4zODg2NV0sMTIxOlsuMTg5MDYsLjQ3NTM0LDAsMCwuNDk4ODRdLDEyMjpbLjE4OTA2LC40NzUzNCwwLDAsLjM5MDU0XSwxNjA6WzAsMCwwLDAsLjI1XSw4MjE2OlswLC42OTE0MSwwLDAsLjIxNDcxXSw4MjE3OlswLC42OTE0MSwwLDAsLjIxNDcxXSw1ODExMjpbMCwuNjIxMTksMCwwLC40OTc0OV0sNTgxMTM6WzAsLjYyMTE5LDAsMCwuNDk4M10sNTgxMTQ6Wy4xODkwNiwuNjkxNDEsMCwwLC4zMzMyOF0sNTgxMTU6Wy4xODkwNiwuNjkxNDEsMCwwLC4zMjkyM10sNTgxMTY6Wy4xODkwNiwuNDc1MzQsMCwwLC41MDM0M10sNTgxMTc6WzAsLjY5MTQxLDAsMCwuMzMzMDFdLDU4MTE4OlswLC42MjExOSwwLDAsLjMzNDA5XSw1ODExOTpbMCwuNDc1MzQsMCwwLC41MDA3M119LCJNYWluLUJvbGQiOnszMjpbMCwwLDAsMCwuMjVdLDMzOlswLC42OTQ0NCwwLDAsLjM1XSwzNDpbMCwuNjk0NDQsMCwwLC42MDI3OF0sMzU6Wy4xOTQ0NCwuNjk0NDQsMCwwLC45NTgzM10sMzY6Wy4wNTU1NiwuNzUsMCwwLC41NzVdLDM3OlsuMDU1NTYsLjc1LDAsMCwuOTU4MzNdLDM4OlswLC42OTQ0NCwwLDAsLjg5NDQ0XSwzOTpbMCwuNjk0NDQsMCwwLC4zMTk0NF0sNDA6Wy4yNSwuNzUsMCwwLC40NDcyMl0sNDE6Wy4yNSwuNzUsMCwwLC40NDcyMl0sNDI6WzAsLjc1LDAsMCwuNTc1XSw0MzpbLjEzMzMzLC42MzMzMywwLDAsLjg5NDQ0XSw0NDpbLjE5NDQ0LC4xNTU1NiwwLDAsLjMxOTQ0XSw0NTpbMCwuNDQ0NDQsMCwwLC4zODMzM10sNDY6WzAsLjE1NTU2LDAsMCwuMzE5NDRdLDQ3OlsuMjUsLjc1LDAsMCwuNTc1XSw0ODpbMCwuNjQ0NDQsMCwwLC41NzVdLDQ5OlswLC42NDQ0NCwwLDAsLjU3NV0sNTA6WzAsLjY0NDQ0LDAsMCwuNTc1XSw1MTpbMCwuNjQ0NDQsMCwwLC41NzVdLDUyOlswLC42NDQ0NCwwLDAsLjU3NV0sNTM6WzAsLjY0NDQ0LDAsMCwuNTc1XSw1NDpbMCwuNjQ0NDQsMCwwLC41NzVdLDU1OlswLC42NDQ0NCwwLDAsLjU3NV0sNTY6WzAsLjY0NDQ0LDAsMCwuNTc1XSw1NzpbMCwuNjQ0NDQsMCwwLC41NzVdLDU4OlswLC40NDQ0NCwwLDAsLjMxOTQ0XSw1OTpbLjE5NDQ0LC40NDQ0NCwwLDAsLjMxOTQ0XSw2MDpbLjA4NTU2LC41ODU1NiwwLDAsLjg5NDQ0XSw2MTpbLS4xMDg4OSwuMzkxMTEsMCwwLC44OTQ0NF0sNjI6Wy4wODU1NiwuNTg1NTYsMCwwLC44OTQ0NF0sNjM6WzAsLjY5NDQ0LDAsMCwuNTQzMDVdLDY0OlswLC42OTQ0NCwwLDAsLjg5NDQ0XSw2NTpbMCwuNjg2MTEsMCwwLC44Njk0NF0sNjY6WzAsLjY4NjExLDAsMCwuODE4MDVdLDY3OlswLC42ODYxMSwwLDAsLjgzMDU1XSw2ODpbMCwuNjg2MTEsMCwwLC44ODE5NF0sNjk6WzAsLjY4NjExLDAsMCwuNzU1NTVdLDcwOlswLC42ODYxMSwwLDAsLjcyMzYxXSw3MTpbMCwuNjg2MTEsMCwwLC45MDQxNl0sNzI6WzAsLjY4NjExLDAsMCwuOV0sNzM6WzAsLjY4NjExLDAsMCwuNDM2MTFdLDc0OlswLC42ODYxMSwwLDAsLjU5NDQ0XSw3NTpbMCwuNjg2MTEsMCwwLC45MDEzOF0sNzY6WzAsLjY4NjExLDAsMCwuNjkxNjZdLDc3OlswLC42ODYxMSwwLDAsMS4wOTE2Nl0sNzg6WzAsLjY4NjExLDAsMCwuOV0sNzk6WzAsLjY4NjExLDAsMCwuODYzODhdLDgwOlswLC42ODYxMSwwLDAsLjc4NjExXSw4MTpbLjE5NDQ0LC42ODYxMSwwLDAsLjg2Mzg4XSw4MjpbMCwuNjg2MTEsMCwwLC44NjI1XSw4MzpbMCwuNjg2MTEsMCwwLC42Mzg4OV0sODQ6WzAsLjY4NjExLDAsMCwuOF0sODU6WzAsLjY4NjExLDAsMCwuODg0NzJdLDg2OlswLC42ODYxMSwuMDE1OTcsMCwuODY5NDRdLDg3OlswLC42ODYxMSwuMDE1OTcsMCwxLjE4ODg4XSw4ODpbMCwuNjg2MTEsMCwwLC44Njk0NF0sODk6WzAsLjY4NjExLC4wMjg3NSwwLC44Njk0NF0sOTA6WzAsLjY4NjExLDAsMCwuNzAyNzddLDkxOlsuMjUsLjc1LDAsMCwuMzE5NDRdLDkyOlsuMjUsLjc1LDAsMCwuNTc1XSw5MzpbLjI1LC43NSwwLDAsLjMxOTQ0XSw5NDpbMCwuNjk0NDQsMCwwLC41NzVdLDk1OlsuMzEsLjEzNDQ0LC4wMzE5NCwwLC41NzVdLDk3OlswLC40NDQ0NCwwLDAsLjU1OTAyXSw5ODpbMCwuNjk0NDQsMCwwLC42Mzg4OV0sOTk6WzAsLjQ0NDQ0LDAsMCwuNTExMTFdLDEwMDpbMCwuNjk0NDQsMCwwLC42Mzg4OV0sMTAxOlswLC40NDQ0NCwwLDAsLjUyNzA4XSwxMDI6WzAsLjY5NDQ0LC4xMDkwMywwLC4zNTEzOV0sMTAzOlsuMTk0NDQsLjQ0NDQ0LC4wMTU5NywwLC41NzVdLDEwNDpbMCwuNjk0NDQsMCwwLC42Mzg4OV0sMTA1OlswLC42OTQ0NCwwLDAsLjMxOTQ0XSwxMDY6Wy4xOTQ0NCwuNjk0NDQsMCwwLC4zNTEzOV0sMTA3OlswLC42OTQ0NCwwLDAsLjYwNjk0XSwxMDg6WzAsLjY5NDQ0LDAsMCwuMzE5NDRdLDEwOTpbMCwuNDQ0NDQsMCwwLC45NTgzM10sMTEwOlswLC40NDQ0NCwwLDAsLjYzODg5XSwxMTE6WzAsLjQ0NDQ0LDAsMCwuNTc1XSwxMTI6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC42Mzg4OV0sMTEzOlsuMTk0NDQsLjQ0NDQ0LDAsMCwuNjA2OTRdLDExNDpbMCwuNDQ0NDQsMCwwLC40NzM2MV0sMTE1OlswLC40NDQ0NCwwLDAsLjQ1MzYxXSwxMTY6WzAsLjYzNDkyLDAsMCwuNDQ3MjJdLDExNzpbMCwuNDQ0NDQsMCwwLC42Mzg4OV0sMTE4OlswLC40NDQ0NCwuMDE1OTcsMCwuNjA2OTRdLDExOTpbMCwuNDQ0NDQsLjAxNTk3LDAsLjgzMDU1XSwxMjA6WzAsLjQ0NDQ0LDAsMCwuNjA2OTRdLDEyMTpbLjE5NDQ0LC40NDQ0NCwuMDE1OTcsMCwuNjA2OTRdLDEyMjpbMCwuNDQ0NDQsMCwwLC41MTExMV0sMTIzOlsuMjUsLjc1LDAsMCwuNTc1XSwxMjQ6Wy4yNSwuNzUsMCwwLC4zMTk0NF0sMTI1OlsuMjUsLjc1LDAsMCwuNTc1XSwxMjY6Wy4zNSwuMzQ0NDQsMCwwLC41NzVdLDE2MDpbMCwwLDAsMCwuMjVdLDE2MzpbMCwuNjk0NDQsMCwwLC44Njg1M10sMTY4OlswLC42OTQ0NCwwLDAsLjU3NV0sMTcyOlswLC40NDQ0NCwwLDAsLjc2NjY2XSwxNzY6WzAsLjY5NDQ0LDAsMCwuODY5NDRdLDE3NzpbLjEzMzMzLC42MzMzMywwLDAsLjg5NDQ0XSwxODQ6Wy4xNzAxNCwwLDAsMCwuNTExMTFdLDE5ODpbMCwuNjg2MTEsMCwwLDEuMDQxNjZdLDIxNTpbLjEzMzMzLC42MzMzMywwLDAsLjg5NDQ0XSwyMTY6Wy4wNDg2MSwuNzM0NzIsMCwwLC44OTQ0NF0sMjIzOlswLC42OTQ0NCwwLDAsLjU5NzIyXSwyMzA6WzAsLjQ0NDQ0LDAsMCwuODMwNTVdLDI0NzpbLjEzMzMzLC42MzMzMywwLDAsLjg5NDQ0XSwyNDg6Wy4wOTcyMiwuNTQxNjcsMCwwLC41NzVdLDMwNTpbMCwuNDQ0NDQsMCwwLC4zMTk0NF0sMzM4OlswLC42ODYxMSwwLDAsMS4xNjk0NF0sMzM5OlswLC40NDQ0NCwwLDAsLjg5NDQ0XSw1Njc6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC4zNTEzOV0sNzEwOlswLC42OTQ0NCwwLDAsLjU3NV0sNzExOlswLC42MzE5NCwwLDAsLjU3NV0sNzEzOlswLC41OTYxMSwwLDAsLjU3NV0sNzE0OlswLC42OTQ0NCwwLDAsLjU3NV0sNzE1OlswLC42OTQ0NCwwLDAsLjU3NV0sNzI4OlswLC42OTQ0NCwwLDAsLjU3NV0sNzI5OlswLC42OTQ0NCwwLDAsLjMxOTQ0XSw3MzA6WzAsLjY5NDQ0LDAsMCwuODY5NDRdLDczMjpbMCwuNjk0NDQsMCwwLC41NzVdLDczMzpbMCwuNjk0NDQsMCwwLC41NzVdLDkxNTpbMCwuNjg2MTEsMCwwLC42OTE2Nl0sOTE2OlswLC42ODYxMSwwLDAsLjk1ODMzXSw5MjA6WzAsLjY4NjExLDAsMCwuODk0NDRdLDkyMzpbMCwuNjg2MTEsMCwwLC44MDU1NV0sOTI2OlswLC42ODYxMSwwLDAsLjc2NjY2XSw5Mjg6WzAsLjY4NjExLDAsMCwuOV0sOTMxOlswLC42ODYxMSwwLDAsLjgzMDU1XSw5MzM6WzAsLjY4NjExLDAsMCwuODk0NDRdLDkzNDpbMCwuNjg2MTEsMCwwLC44MzA1NV0sOTM2OlswLC42ODYxMSwwLDAsLjg5NDQ0XSw5Mzc6WzAsLjY4NjExLDAsMCwuODMwNTVdLDgyMTE6WzAsLjQ0NDQ0LC4wMzE5NCwwLC41NzVdLDgyMTI6WzAsLjQ0NDQ0LC4wMzE5NCwwLDEuMTQ5OTldLDgyMTY6WzAsLjY5NDQ0LDAsMCwuMzE5NDRdLDgyMTc6WzAsLjY5NDQ0LDAsMCwuMzE5NDRdLDgyMjA6WzAsLjY5NDQ0LDAsMCwuNjAyNzhdLDgyMjE6WzAsLjY5NDQ0LDAsMCwuNjAyNzhdLDgyMjQ6Wy4xOTQ0NCwuNjk0NDQsMCwwLC41MTExMV0sODIyNTpbLjE5NDQ0LC42OTQ0NCwwLDAsLjUxMTExXSw4MjQyOlswLC41NTU1NiwwLDAsLjM0NDQ0XSw4NDA3OlswLC43MjQ0NCwuMTU0ODYsMCwuNTc1XSw4NDYzOlswLC42OTQ0NCwwLDAsLjY2NzU5XSw4NDY1OlswLC42OTQ0NCwwLDAsLjgzMDU1XSw4NDY3OlswLC42OTQ0NCwwLDAsLjQ3MzYxXSw4NDcyOlsuMTk0NDQsLjQ0NDQ0LDAsMCwuNzQwMjddLDg0NzY6WzAsLjY5NDQ0LDAsMCwuODMwNTVdLDg1MDE6WzAsLjY5NDQ0LDAsMCwuNzAyNzddLDg1OTI6Wy0uMTA4ODksLjM5MTExLDAsMCwxLjE0OTk5XSw4NTkzOlsuMTk0NDQsLjY5NDQ0LDAsMCwuNTc1XSw4NTk0OlstLjEwODg5LC4zOTExMSwwLDAsMS4xNDk5OV0sODU5NTpbLjE5NDQ0LC42OTQ0NCwwLDAsLjU3NV0sODU5NjpbLS4xMDg4OSwuMzkxMTEsMCwwLDEuMTQ5OTldLDg1OTc6Wy4yNSwuNzUsMCwwLC41NzVdLDg1OTg6Wy4xOTQ0NCwuNjk0NDQsMCwwLDEuMTQ5OTldLDg1OTk6Wy4xOTQ0NCwuNjk0NDQsMCwwLDEuMTQ5OTldLDg2MDA6Wy4xOTQ0NCwuNjk0NDQsMCwwLDEuMTQ5OTldLDg2MDE6Wy4xOTQ0NCwuNjk0NDQsMCwwLDEuMTQ5OTldLDg2MzY6Wy0uMTA4ODksLjM5MTExLDAsMCwxLjE0OTk5XSw4NjM3OlstLjEwODg5LC4zOTExMSwwLDAsMS4xNDk5OV0sODY0MDpbLS4xMDg4OSwuMzkxMTEsMCwwLDEuMTQ5OTldLDg2NDE6Wy0uMTA4ODksLjM5MTExLDAsMCwxLjE0OTk5XSw4NjU2OlstLjEwODg5LC4zOTExMSwwLDAsMS4xNDk5OV0sODY1NzpbLjE5NDQ0LC42OTQ0NCwwLDAsLjcwMjc3XSw4NjU4OlstLjEwODg5LC4zOTExMSwwLDAsMS4xNDk5OV0sODY1OTpbLjE5NDQ0LC42OTQ0NCwwLDAsLjcwMjc3XSw4NjYwOlstLjEwODg5LC4zOTExMSwwLDAsMS4xNDk5OV0sODY2MTpbLjI1LC43NSwwLDAsLjcwMjc3XSw4NzA0OlswLC42OTQ0NCwwLDAsLjYzODg5XSw4NzA2OlswLC42OTQ0NCwuMDYzODksMCwuNjI4NDddLDg3MDc6WzAsLjY5NDQ0LDAsMCwuNjM4ODldLDg3MDk6Wy4wNTU1NiwuNzUsMCwwLC41NzVdLDg3MTE6WzAsLjY4NjExLDAsMCwuOTU4MzNdLDg3MTI6Wy4wODU1NiwuNTg1NTYsMCwwLC43NjY2Nl0sODcxNTpbLjA4NTU2LC41ODU1NiwwLDAsLjc2NjY2XSw4NzIyOlsuMTMzMzMsLjYzMzMzLDAsMCwuODk0NDRdLDg3MjM6Wy4xMzMzMywuNjMzMzMsMCwwLC44OTQ0NF0sODcyNTpbLjI1LC43NSwwLDAsLjU3NV0sODcyNjpbLjI1LC43NSwwLDAsLjU3NV0sODcyNzpbLS4wMjc3OCwuNDcyMjIsMCwwLC41NzVdLDg3Mjg6Wy0uMDI2MzksLjQ3MzYxLDAsMCwuNTc1XSw4NzI5OlstLjAyNjM5LC40NzM2MSwwLDAsLjU3NV0sODczMDpbLjE4LC44MiwwLDAsLjk1ODMzXSw4NzMzOlswLC40NDQ0NCwwLDAsLjg5NDQ0XSw4NzM0OlswLC40NDQ0NCwwLDAsMS4xNDk5OV0sODczNjpbMCwuNjkyMjQsMCwwLC43MjIyMl0sODczOTpbLjI1LC43NSwwLDAsLjMxOTQ0XSw4NzQxOlsuMjUsLjc1LDAsMCwuNTc1XSw4NzQzOlswLC41NTU1NiwwLDAsLjc2NjY2XSw4NzQ0OlswLC41NTU1NiwwLDAsLjc2NjY2XSw4NzQ1OlswLC41NTU1NiwwLDAsLjc2NjY2XSw4NzQ2OlswLC41NTU1NiwwLDAsLjc2NjY2XSw4NzQ3OlsuMTk0NDQsLjY5NDQ0LC4xMjc3OCwwLC41Njg3NV0sODc2NDpbLS4xMDg4OSwuMzkxMTEsMCwwLC44OTQ0NF0sODc2ODpbLjE5NDQ0LC42OTQ0NCwwLDAsLjMxOTQ0XSw4NzcxOlsuMDAyMjIsLjUwMjIyLDAsMCwuODk0NDRdLDg3NzM6Wy4wMjcsLjYzOCwwLDAsLjg5NF0sODc3NjpbLjAyNDQ0LC41MjQ0NCwwLDAsLjg5NDQ0XSw4NzgxOlsuMDAyMjIsLjUwMjIyLDAsMCwuODk0NDRdLDg4MDE6Wy4wMDIyMiwuNTAyMjIsMCwwLC44OTQ0NF0sODgwNDpbLjE5NjY3LC42OTY2NywwLDAsLjg5NDQ0XSw4ODA1OlsuMTk2NjcsLjY5NjY3LDAsMCwuODk0NDRdLDg4MTA6Wy4wODU1NiwuNTg1NTYsMCwwLDEuMTQ5OTldLDg4MTE6Wy4wODU1NiwuNTg1NTYsMCwwLDEuMTQ5OTldLDg4MjY6Wy4wODU1NiwuNTg1NTYsMCwwLC44OTQ0NF0sODgyNzpbLjA4NTU2LC41ODU1NiwwLDAsLjg5NDQ0XSw4ODM0OlsuMDg1NTYsLjU4NTU2LDAsMCwuODk0NDRdLDg4MzU6Wy4wODU1NiwuNTg1NTYsMCwwLC44OTQ0NF0sODgzODpbLjE5NjY3LC42OTY2NywwLDAsLjg5NDQ0XSw4ODM5OlsuMTk2NjcsLjY5NjY3LDAsMCwuODk0NDRdLDg4NDY6WzAsLjU1NTU2LDAsMCwuNzY2NjZdLDg4NDk6Wy4xOTY2NywuNjk2NjcsMCwwLC44OTQ0NF0sODg1MDpbLjE5NjY3LC42OTY2NywwLDAsLjg5NDQ0XSw4ODUxOlswLC41NTU1NiwwLDAsLjc2NjY2XSw4ODUyOlswLC41NTU1NiwwLDAsLjc2NjY2XSw4ODUzOlsuMTMzMzMsLjYzMzMzLDAsMCwuODk0NDRdLDg4NTQ6Wy4xMzMzMywuNjMzMzMsMCwwLC44OTQ0NF0sODg1NTpbLjEzMzMzLC42MzMzMywwLDAsLjg5NDQ0XSw4ODU2OlsuMTMzMzMsLjYzMzMzLDAsMCwuODk0NDRdLDg4NTc6Wy4xMzMzMywuNjMzMzMsMCwwLC44OTQ0NF0sODg2NjpbMCwuNjk0NDQsMCwwLC43MDI3N10sODg2NzpbMCwuNjk0NDQsMCwwLC43MDI3N10sODg2ODpbMCwuNjk0NDQsMCwwLC44OTQ0NF0sODg2OTpbMCwuNjk0NDQsMCwwLC44OTQ0NF0sODkwMDpbLS4wMjYzOSwuNDczNjEsMCwwLC41NzVdLDg5MDE6Wy0uMDI2MzksLjQ3MzYxLDAsMCwuMzE5NDRdLDg5MDI6Wy0uMDI3NzgsLjQ3MjIyLDAsMCwuNTc1XSw4OTY4OlsuMjUsLjc1LDAsMCwuNTExMTFdLDg5Njk6Wy4yNSwuNzUsMCwwLC41MTExMV0sODk3MDpbLjI1LC43NSwwLDAsLjUxMTExXSw4OTcxOlsuMjUsLjc1LDAsMCwuNTExMTFdLDg5OTQ6Wy0uMTM4ODksLjM2MTExLDAsMCwxLjE0OTk5XSw4OTk1OlstLjEzODg5LC4zNjExMSwwLDAsMS4xNDk5OV0sOTY1MTpbLjE5NDQ0LC42OTQ0NCwwLDAsMS4wMjIyMl0sOTY1NzpbLS4wMjc3OCwuNDcyMjIsMCwwLC41NzVdLDk2NjE6Wy4xOTQ0NCwuNjk0NDQsMCwwLDEuMDIyMjJdLDk2Njc6Wy0uMDI3NzgsLjQ3MjIyLDAsMCwuNTc1XSw5NzExOlsuMTk0NDQsLjY5NDQ0LDAsMCwxLjE0OTk5XSw5ODI0OlsuMTI5NjMsLjY5NDQ0LDAsMCwuODk0NDRdLDk4MjU6Wy4xMjk2MywuNjk0NDQsMCwwLC44OTQ0NF0sOTgyNjpbLjEyOTYzLC42OTQ0NCwwLDAsLjg5NDQ0XSw5ODI3OlsuMTI5NjMsLjY5NDQ0LDAsMCwuODk0NDRdLDk4Mzc6WzAsLjc1LDAsMCwuNDQ3MjJdLDk4Mzg6Wy4xOTQ0NCwuNjk0NDQsMCwwLC40NDcyMl0sOTgzOTpbLjE5NDQ0LC42OTQ0NCwwLDAsLjQ0NzIyXSwxMDIxNjpbLjI1LC43NSwwLDAsLjQ0NzIyXSwxMDIxNzpbLjI1LC43NSwwLDAsLjQ0NzIyXSwxMDgxNTpbMCwuNjg2MTEsMCwwLC45XSwxMDkyNzpbLjE5NjY3LC42OTY2NywwLDAsLjg5NDQ0XSwxMDkyODpbLjE5NjY3LC42OTY2NywwLDAsLjg5NDQ0XSw1NzM3NjpbLjE5NDQ0LC42OTQ0NCwwLDAsMF19LCJNYWluLUJvbGRJdGFsaWMiOnszMjpbMCwwLDAsMCwuMjVdLDMzOlswLC42OTQ0NCwuMTE0MTcsMCwuMzg2MTFdLDM0OlswLC42OTQ0NCwuMDc5MzksMCwuNjIwNTVdLDM1OlsuMTk0NDQsLjY5NDQ0LC4wNjgzMywwLC45NDQ0NF0sMzc6Wy4wNTU1NiwuNzUsLjEyODYxLDAsLjk0NDQ0XSwzODpbMCwuNjk0NDQsLjA4NTI4LDAsLjg4NTU1XSwzOTpbMCwuNjk0NDQsLjEyOTQ1LDAsLjM1NTU1XSw0MDpbLjI1LC43NSwuMTU4MDYsMCwuNDczMzNdLDQxOlsuMjUsLjc1LC4wMzMwNiwwLC40NzMzM10sNDI6WzAsLjc1LC4xNDMzMywwLC41OTExMV0sNDM6Wy4xMDMzMywuNjAzMzMsLjAzMzA2LDAsLjg4NTU1XSw0NDpbLjE5NDQ0LC4xNDcyMiwwLDAsLjM1NTU1XSw0NTpbMCwuNDQ0NDQsLjAyNjExLDAsLjQxNDQ0XSw0NjpbMCwuMTQ3MjIsMCwwLC4zNTU1NV0sNDc6Wy4yNSwuNzUsLjE1ODA2LDAsLjU5MTExXSw0ODpbMCwuNjQ0NDQsLjEzMTY3LDAsLjU5MTExXSw0OTpbMCwuNjQ0NDQsLjEzMTY3LDAsLjU5MTExXSw1MDpbMCwuNjQ0NDQsLjEzMTY3LDAsLjU5MTExXSw1MTpbMCwuNjQ0NDQsLjEzMTY3LDAsLjU5MTExXSw1MjpbLjE5NDQ0LC42NDQ0NCwuMTMxNjcsMCwuNTkxMTFdLDUzOlswLC42NDQ0NCwuMTMxNjcsMCwuNTkxMTFdLDU0OlswLC42NDQ0NCwuMTMxNjcsMCwuNTkxMTFdLDU1OlsuMTk0NDQsLjY0NDQ0LC4xMzE2NywwLC41OTExMV0sNTY6WzAsLjY0NDQ0LC4xMzE2NywwLC41OTExMV0sNTc6WzAsLjY0NDQ0LC4xMzE2NywwLC41OTExMV0sNTg6WzAsLjQ0NDQ0LC4wNjY5NSwwLC4zNTU1NV0sNTk6Wy4xOTQ0NCwuNDQ0NDQsLjA2Njk1LDAsLjM1NTU1XSw2MTpbLS4xMDg4OSwuMzkxMTEsLjA2ODMzLDAsLjg4NTU1XSw2MzpbMCwuNjk0NDQsLjExNDcyLDAsLjU5MTExXSw2NDpbMCwuNjk0NDQsLjA5MjA4LDAsLjg4NTU1XSw2NTpbMCwuNjg2MTEsMCwwLC44NjU1NV0sNjY6WzAsLjY4NjExLC4wOTkyLDAsLjgxNjY2XSw2NzpbMCwuNjg2MTEsLjE0MjA4LDAsLjgyNjY2XSw2ODpbMCwuNjg2MTEsLjA5MDYyLDAsLjg3NTU1XSw2OTpbMCwuNjg2MTEsLjExNDMxLDAsLjc1NjY2XSw3MDpbMCwuNjg2MTEsLjEyOTAzLDAsLjcyNzIyXSw3MTpbMCwuNjg2MTEsLjA3MzQ3LDAsLjg5NTI3XSw3MjpbMCwuNjg2MTEsLjE3MjA4LDAsLjg5NjFdLDczOlswLC42ODYxMSwuMTU2ODEsMCwuNDcxNjZdLDc0OlswLC42ODYxMSwuMTQ1LDAsLjYxMDU1XSw3NTpbMCwuNjg2MTEsLjE0MjA4LDAsLjg5NDk5XSw3NjpbMCwuNjg2MTEsMCwwLC42OTc3N10sNzc6WzAsLjY4NjExLC4xNzIwOCwwLDEuMDcyNzddLDc4OlswLC42ODYxMSwuMTcyMDgsMCwuODk2MV0sNzk6WzAsLjY4NjExLC4wOTA2MiwwLC44NTQ5OV0sODA6WzAsLjY4NjExLC4wOTkyLDAsLjc4NzIxXSw4MTpbLjE5NDQ0LC42ODYxMSwuMDkwNjIsMCwuODU0OTldLDgyOlswLC42ODYxMSwuMDI1NTksMCwuODU5NDRdLDgzOlswLC42ODYxMSwuMTEyNjQsMCwuNjQ5OTldLDg0OlswLC42ODYxMSwuMTI5MDMsMCwuNzk2MV0sODU6WzAsLjY4NjExLC4xNzIwOCwwLC44ODA4M10sODY6WzAsLjY4NjExLC4xODYyNSwwLC44NjU1NV0sODc6WzAsLjY4NjExLC4xODYyNSwwLDEuMTU5OTldLDg4OlswLC42ODYxMSwuMTU2ODEsMCwuODY1NTVdLDg5OlswLC42ODYxMSwuMTk4MDMsMCwuODY1NTVdLDkwOlswLC42ODYxMSwuMTQyMDgsMCwuNzA4ODhdLDkxOlsuMjUsLjc1LC4xODc1LDAsLjM1NjExXSw5MzpbLjI1LC43NSwuMDk5NzIsMCwuMzU2MTFdLDk0OlswLC42OTQ0NCwuMDY3MDksMCwuNTkxMTFdLDk1OlsuMzEsLjEzNDQ0LC4wOTgxMSwwLC41OTExMV0sOTc6WzAsLjQ0NDQ0LC4wOTQyNiwwLC41OTExMV0sOTg6WzAsLjY5NDQ0LC4wNzg2MSwwLC41MzIyMl0sOTk6WzAsLjQ0NDQ0LC4wNTIyMiwwLC41MzIyMl0sMTAwOlswLC42OTQ0NCwuMTA4NjEsMCwuNTkxMTFdLDEwMTpbMCwuNDQ0NDQsLjA4NSwwLC41MzIyMl0sMTAyOlsuMTk0NDQsLjY5NDQ0LC4yMTc3OCwwLC40XSwxMDM6Wy4xOTQ0NCwuNDQ0NDQsLjEwNSwwLC41MzIyMl0sMTA0OlswLC42OTQ0NCwuMDk0MjYsMCwuNTkxMTFdLDEwNTpbMCwuNjkzMjYsLjExMzg3LDAsLjM1NTU1XSwxMDY6Wy4xOTQ0NCwuNjkzMjYsLjE2NzIsMCwuMzU1NTVdLDEwNzpbMCwuNjk0NDQsLjExMTExLDAsLjUzMjIyXSwxMDg6WzAsLjY5NDQ0LC4xMDg2MSwwLC4yOTY2Nl0sMTA5OlswLC40NDQ0NCwuMDk0MjYsMCwuOTQ0NDRdLDExMDpbMCwuNDQ0NDQsLjA5NDI2LDAsLjY0OTk5XSwxMTE6WzAsLjQ0NDQ0LC4wNzg2MSwwLC41OTExMV0sMTEyOlsuMTk0NDQsLjQ0NDQ0LC4wNzg2MSwwLC41OTExMV0sMTEzOlsuMTk0NDQsLjQ0NDQ0LC4xMDUsMCwuNTMyMjJdLDExNDpbMCwuNDQ0NDQsLjExMTExLDAsLjUwMTY3XSwxMTU6WzAsLjQ0NDQ0LC4wODE2NywwLC40ODY5NF0sMTE2OlswLC42MzQ5MiwuMDk2MzksMCwuMzg1XSwxMTc6WzAsLjQ0NDQ0LC4wOTQyNiwwLC42MjA1NV0sMTE4OlswLC40NDQ0NCwuMTExMTEsMCwuNTMyMjJdLDExOTpbMCwuNDQ0NDQsLjExMTExLDAsLjc2Nzc3XSwxMjA6WzAsLjQ0NDQ0LC4xMjU4MywwLC41NjA1NV0sMTIxOlsuMTk0NDQsLjQ0NDQ0LC4xMDUsMCwuNTYxNjZdLDEyMjpbMCwuNDQ0NDQsLjEzODg5LDAsLjQ5MDU1XSwxMjY6Wy4zNSwuMzQ0NDQsLjExNDcyLDAsLjU5MTExXSwxNjA6WzAsMCwwLDAsLjI1XSwxNjg6WzAsLjY5NDQ0LC4xMTQ3MywwLC41OTExMV0sMTc2OlswLC42OTQ0NCwwLDAsLjk0ODg4XSwxODQ6Wy4xNzAxNCwwLDAsMCwuNTMyMjJdLDE5ODpbMCwuNjg2MTEsLjExNDMxLDAsMS4wMjI3N10sMjE2OlsuMDQ4NjEsLjczNDcyLC4wOTA2MiwwLC44ODU1NV0sMjIzOlsuMTk0NDQsLjY5NDQ0LC4wOTczNiwwLC42NjVdLDIzMDpbMCwuNDQ0NDQsLjA4NSwwLC44MjY2Nl0sMjQ4OlsuMDk3MjIsLjU0MTY3LC4wOTQ1OCwwLC41OTExMV0sMzA1OlswLC40NDQ0NCwuMDk0MjYsMCwuMzU1NTVdLDMzODpbMCwuNjg2MTEsLjExNDMxLDAsMS4xNDA1NF0sMzM5OlswLC40NDQ0NCwuMDg1LDAsLjgyNjY2XSw1Njc6Wy4xOTQ0NCwuNDQ0NDQsLjA0NjExLDAsLjM4NV0sNzEwOlswLC42OTQ0NCwuMDY3MDksMCwuNTkxMTFdLDcxMTpbMCwuNjMxOTQsLjA4MjcxLDAsLjU5MTExXSw3MTM6WzAsLjU5NDQ0LC4xMDQ0NCwwLC41OTExMV0sNzE0OlswLC42OTQ0NCwuMDg1MjgsMCwuNTkxMTFdLDcxNTpbMCwuNjk0NDQsMCwwLC41OTExMV0sNzI4OlswLC42OTQ0NCwuMTAzMzMsMCwuNTkxMTFdLDcyOTpbMCwuNjk0NDQsLjEyOTQ1LDAsLjM1NTU1XSw3MzA6WzAsLjY5NDQ0LDAsMCwuOTQ4ODhdLDczMjpbMCwuNjk0NDQsLjExNDcyLDAsLjU5MTExXSw3MzM6WzAsLjY5NDQ0LC4xMTQ3MiwwLC41OTExMV0sOTE1OlswLC42ODYxMSwuMTI5MDMsMCwuNjk3NzddLDkxNjpbMCwuNjg2MTEsMCwwLC45NDQ0NF0sOTIwOlswLC42ODYxMSwuMDkwNjIsMCwuODg1NTVdLDkyMzpbMCwuNjg2MTEsMCwwLC44MDY2Nl0sOTI2OlswLC42ODYxMSwuMTUwOTIsMCwuNzY3NzddLDkyODpbMCwuNjg2MTEsLjE3MjA4LDAsLjg5NjFdLDkzMTpbMCwuNjg2MTEsLjExNDMxLDAsLjgyNjY2XSw5MzM6WzAsLjY4NjExLC4xMDc3OCwwLC44ODU1NV0sOTM0OlswLC42ODYxMSwuMDU2MzIsMCwuODI2NjZdLDkzNjpbMCwuNjg2MTEsLjEwNzc4LDAsLjg4NTU1XSw5Mzc6WzAsLjY4NjExLC4wOTkyLDAsLjgyNjY2XSw4MjExOlswLC40NDQ0NCwuMDk4MTEsMCwuNTkxMTFdLDgyMTI6WzAsLjQ0NDQ0LC4wOTgxMSwwLDEuMTgyMjFdLDgyMTY6WzAsLjY5NDQ0LC4xMjk0NSwwLC4zNTU1NV0sODIxNzpbMCwuNjk0NDQsLjEyOTQ1LDAsLjM1NTU1XSw4MjIwOlswLC42OTQ0NCwuMTY3NzIsMCwuNjIwNTVdLDgyMjE6WzAsLjY5NDQ0LC4wNzkzOSwwLC42MjA1NV19LCJNYWluLUl0YWxpYyI6ezMyOlswLDAsMCwwLC4yNV0sMzM6WzAsLjY5NDQ0LC4xMjQxNywwLC4zMDY2N10sMzQ6WzAsLjY5NDQ0LC4wNjk2MSwwLC41MTQ0NF0sMzU6Wy4xOTQ0NCwuNjk0NDQsLjA2NjE2LDAsLjgxNzc3XSwzNzpbLjA1NTU2LC43NSwuMTM2MzksMCwuODE3NzddLDM4OlswLC42OTQ0NCwuMDk2OTQsMCwuNzY2NjZdLDM5OlswLC42OTQ0NCwuMTI0MTcsMCwuMzA2NjddLDQwOlsuMjUsLjc1LC4xNjE5NCwwLC40MDg4OV0sNDE6Wy4yNSwuNzUsLjAzNjk0LDAsLjQwODg5XSw0MjpbMCwuNzUsLjE0OTE3LDAsLjUxMTExXSw0MzpbLjA1NjY3LC41NjE2NywuMDM2OTQsMCwuNzY2NjZdLDQ0OlsuMTk0NDQsLjEwNTU2LDAsMCwuMzA2NjddLDQ1OlswLC40MzA1NiwuMDI4MjYsMCwuMzU3NzhdLDQ2OlswLC4xMDU1NiwwLDAsLjMwNjY3XSw0NzpbLjI1LC43NSwuMTYxOTQsMCwuNTExMTFdLDQ4OlswLC42NDQ0NCwuMTM1NTYsMCwuNTExMTFdLDQ5OlswLC42NDQ0NCwuMTM1NTYsMCwuNTExMTFdLDUwOlswLC42NDQ0NCwuMTM1NTYsMCwuNTExMTFdLDUxOlswLC42NDQ0NCwuMTM1NTYsMCwuNTExMTFdLDUyOlsuMTk0NDQsLjY0NDQ0LC4xMzU1NiwwLC41MTExMV0sNTM6WzAsLjY0NDQ0LC4xMzU1NiwwLC41MTExMV0sNTQ6WzAsLjY0NDQ0LC4xMzU1NiwwLC41MTExMV0sNTU6Wy4xOTQ0NCwuNjQ0NDQsLjEzNTU2LDAsLjUxMTExXSw1NjpbMCwuNjQ0NDQsLjEzNTU2LDAsLjUxMTExXSw1NzpbMCwuNjQ0NDQsLjEzNTU2LDAsLjUxMTExXSw1ODpbMCwuNDMwNTYsLjA1ODIsMCwuMzA2NjddLDU5OlsuMTk0NDQsLjQzMDU2LC4wNTgyLDAsLjMwNjY3XSw2MTpbLS4xMzMxMywuMzY2ODcsLjA2NjE2LDAsLjc2NjY2XSw2MzpbMCwuNjk0NDQsLjEyMjUsMCwuNTExMTFdLDY0OlswLC42OTQ0NCwuMDk1OTcsMCwuNzY2NjZdLDY1OlswLC42ODMzMywwLDAsLjc0MzMzXSw2NjpbMCwuNjgzMzMsLjEwMjU3LDAsLjcwMzg5XSw2NzpbMCwuNjgzMzMsLjE0NTI4LDAsLjcxNTU1XSw2ODpbMCwuNjgzMzMsLjA5NDAzLDAsLjc1NV0sNjk6WzAsLjY4MzMzLC4xMjAyOCwwLC42NzgzM10sNzA6WzAsLjY4MzMzLC4xMzMwNSwwLC42NTI3N10sNzE6WzAsLjY4MzMzLC4wODcyMiwwLC43NzM2MV0sNzI6WzAsLjY4MzMzLC4xNjM4OSwwLC43NDMzM10sNzM6WzAsLjY4MzMzLC4xNTgwNiwwLC4zODU1NV0sNzQ6WzAsLjY4MzMzLC4xNDAyOCwwLC41MjVdLDc1OlswLC42ODMzMywuMTQ1MjgsMCwuNzY4ODhdLDc2OlswLC42ODMzMywwLDAsLjYyNzIyXSw3NzpbMCwuNjgzMzMsLjE2Mzg5LDAsLjg5NjY2XSw3ODpbMCwuNjgzMzMsLjE2Mzg5LDAsLjc0MzMzXSw3OTpbMCwuNjgzMzMsLjA5NDAzLDAsLjc2NjY2XSw4MDpbMCwuNjgzMzMsLjEwMjU3LDAsLjY3ODMzXSw4MTpbLjE5NDQ0LC42ODMzMywuMDk0MDMsMCwuNzY2NjZdLDgyOlswLC42ODMzMywuMDM4NjgsMCwuNzI5NDRdLDgzOlswLC42ODMzMywuMTE5NzIsMCwuNTYyMjJdLDg0OlswLC42ODMzMywuMTMzMDUsMCwuNzE1NTVdLDg1OlswLC42ODMzMywuMTYzODksMCwuNzQzMzNdLDg2OlswLC42ODMzMywuMTgzNjEsMCwuNzQzMzNdLDg3OlswLC42ODMzMywuMTgzNjEsMCwuOTk4ODhdLDg4OlswLC42ODMzMywuMTU4MDYsMCwuNzQzMzNdLDg5OlswLC42ODMzMywuMTkzODMsMCwuNzQzMzNdLDkwOlswLC42ODMzMywuMTQ1MjgsMCwuNjEzMzNdLDkxOlsuMjUsLjc1LC4xODc1LDAsLjMwNjY3XSw5MzpbLjI1LC43NSwuMTA1MjgsMCwuMzA2NjddLDk0OlswLC42OTQ0NCwuMDY2NDYsMCwuNTExMTFdLDk1OlsuMzEsLjEyMDU2LC4wOTIwOCwwLC41MTExMV0sOTc6WzAsLjQzMDU2LC4wNzY3MSwwLC41MTExMV0sOTg6WzAsLjY5NDQ0LC4wNjMxMiwwLC40Nl0sOTk6WzAsLjQzMDU2LC4wNTY1MywwLC40Nl0sMTAwOlswLC42OTQ0NCwuMTAzMzMsMCwuNTExMTFdLDEwMTpbMCwuNDMwNTYsLjA3NTE0LDAsLjQ2XSwxMDI6Wy4xOTQ0NCwuNjk0NDQsLjIxMTk0LDAsLjMwNjY3XSwxMDM6Wy4xOTQ0NCwuNDMwNTYsLjA4ODQ3LDAsLjQ2XSwxMDQ6WzAsLjY5NDQ0LC4wNzY3MSwwLC41MTExMV0sMTA1OlswLC42NTUzNiwuMTAxOSwwLC4zMDY2N10sMTA2OlsuMTk0NDQsLjY1NTM2LC4xNDQ2NywwLC4zMDY2N10sMTA3OlswLC42OTQ0NCwuMTA3NjQsMCwuNDZdLDEwODpbMCwuNjk0NDQsLjEwMzMzLDAsLjI1NTU1XSwxMDk6WzAsLjQzMDU2LC4wNzY3MSwwLC44MTc3N10sMTEwOlswLC40MzA1NiwuMDc2NzEsMCwuNTYyMjJdLDExMTpbMCwuNDMwNTYsLjA2MzEyLDAsLjUxMTExXSwxMTI6Wy4xOTQ0NCwuNDMwNTYsLjA2MzEyLDAsLjUxMTExXSwxMTM6Wy4xOTQ0NCwuNDMwNTYsLjA4ODQ3LDAsLjQ2XSwxMTQ6WzAsLjQzMDU2LC4xMDc2NCwwLC40MjE2Nl0sMTE1OlswLC40MzA1NiwuMDgyMDgsMCwuNDA4ODldLDExNjpbMCwuNjE1MDgsLjA5NDg2LDAsLjMzMjIyXSwxMTc6WzAsLjQzMDU2LC4wNzY3MSwwLC41MzY2Nl0sMTE4OlswLC40MzA1NiwuMTA3NjQsMCwuNDZdLDExOTpbMCwuNDMwNTYsLjEwNzY0LDAsLjY2NDQ0XSwxMjA6WzAsLjQzMDU2LC4xMjA0MiwwLC40NjM4OV0sMTIxOlsuMTk0NDQsLjQzMDU2LC4wODg0NywwLC40ODU1NV0sMTIyOlswLC40MzA1NiwuMTIyOTIsMCwuNDA4ODldLDEyNjpbLjM1LC4zMTc4NiwuMTE1ODUsMCwuNTExMTFdLDE2MDpbMCwwLDAsMCwuMjVdLDE2ODpbMCwuNjY3ODYsLjEwNDc0LDAsLjUxMTExXSwxNzY6WzAsLjY5NDQ0LDAsMCwuODMxMjldLDE4NDpbLjE3MDE0LDAsMCwwLC40Nl0sMTk4OlswLC42ODMzMywuMTIwMjgsMCwuODgyNzddLDIxNjpbLjA0ODYxLC43MzE5NCwuMDk0MDMsMCwuNzY2NjZdLDIyMzpbLjE5NDQ0LC42OTQ0NCwuMTA1MTQsMCwuNTM2NjZdLDIzMDpbMCwuNDMwNTYsLjA3NTE0LDAsLjcxNTU1XSwyNDg6Wy4wOTcyMiwuNTI3NzgsLjA5MTk0LDAsLjUxMTExXSwzMzg6WzAsLjY4MzMzLC4xMjAyOCwwLC45ODQ5OV0sMzM5OlswLC40MzA1NiwuMDc1MTQsMCwuNzE1NTVdLDcxMDpbMCwuNjk0NDQsLjA2NjQ2LDAsLjUxMTExXSw3MTE6WzAsLjYyODQ3LC4wODI5NSwwLC41MTExMV0sNzEzOlswLC41NjE2NywuMTAzMzMsMCwuNTExMTFdLDcxNDpbMCwuNjk0NDQsLjA5Njk0LDAsLjUxMTExXSw3MTU6WzAsLjY5NDQ0LDAsMCwuNTExMTFdLDcyODpbMCwuNjk0NDQsLjEwODA2LDAsLjUxMTExXSw3Mjk6WzAsLjY2Nzg2LC4xMTc1MiwwLC4zMDY2N10sNzMwOlswLC42OTQ0NCwwLDAsLjgzMTI5XSw3MzI6WzAsLjY2Nzg2LC4xMTU4NSwwLC41MTExMV0sNzMzOlswLC42OTQ0NCwuMTIyNSwwLC41MTExMV0sOTE1OlswLC42ODMzMywuMTMzMDUsMCwuNjI3MjJdLDkxNjpbMCwuNjgzMzMsMCwwLC44MTc3N10sOTIwOlswLC42ODMzMywuMDk0MDMsMCwuNzY2NjZdLDkyMzpbMCwuNjgzMzMsMCwwLC42OTIyMl0sOTI2OlswLC42ODMzMywuMTUyOTQsMCwuNjY0NDRdLDkyODpbMCwuNjgzMzMsLjE2Mzg5LDAsLjc0MzMzXSw5MzE6WzAsLjY4MzMzLC4xMjAyOCwwLC43MTU1NV0sOTMzOlswLC42ODMzMywuMTExMTEsMCwuNzY2NjZdLDkzNDpbMCwuNjgzMzMsLjA1OTg2LDAsLjcxNTU1XSw5MzY6WzAsLjY4MzMzLC4xMTExMSwwLC43NjY2Nl0sOTM3OlswLC42ODMzMywuMTAyNTcsMCwuNzE1NTVdLDgyMTE6WzAsLjQzMDU2LC4wOTIwOCwwLC41MTExMV0sODIxMjpbMCwuNDMwNTYsLjA5MjA4LDAsMS4wMjIyMl0sODIxNjpbMCwuNjk0NDQsLjEyNDE3LDAsLjMwNjY3XSw4MjE3OlswLC42OTQ0NCwuMTI0MTcsMCwuMzA2NjddLDgyMjA6WzAsLjY5NDQ0LC4xNjg1LDAsLjUxNDQ0XSw4MjIxOlswLC42OTQ0NCwuMDY5NjEsMCwuNTE0NDRdLDg0NjM6WzAsLjY4ODg5LDAsMCwuNTQwMjhdfSwiTWFpbi1SZWd1bGFyIjp7MzI6WzAsMCwwLDAsLjI1XSwzMzpbMCwuNjk0NDQsMCwwLC4yNzc3OF0sMzQ6WzAsLjY5NDQ0LDAsMCwuNV0sMzU6Wy4xOTQ0NCwuNjk0NDQsMCwwLC44MzMzNF0sMzY6Wy4wNTU1NiwuNzUsMCwwLC41XSwzNzpbLjA1NTU2LC43NSwwLDAsLjgzMzM0XSwzODpbMCwuNjk0NDQsMCwwLC43Nzc3OF0sMzk6WzAsLjY5NDQ0LDAsMCwuMjc3NzhdLDQwOlsuMjUsLjc1LDAsMCwuMzg4ODldLDQxOlsuMjUsLjc1LDAsMCwuMzg4ODldLDQyOlswLC43NSwwLDAsLjVdLDQzOlsuMDgzMzMsLjU4MzMzLDAsMCwuNzc3NzhdLDQ0OlsuMTk0NDQsLjEwNTU2LDAsMCwuMjc3NzhdLDQ1OlswLC40MzA1NiwwLDAsLjMzMzMzXSw0NjpbMCwuMTA1NTYsMCwwLC4yNzc3OF0sNDc6Wy4yNSwuNzUsMCwwLC41XSw0ODpbMCwuNjQ0NDQsMCwwLC41XSw0OTpbMCwuNjQ0NDQsMCwwLC41XSw1MDpbMCwuNjQ0NDQsMCwwLC41XSw1MTpbMCwuNjQ0NDQsMCwwLC41XSw1MjpbMCwuNjQ0NDQsMCwwLC41XSw1MzpbMCwuNjQ0NDQsMCwwLC41XSw1NDpbMCwuNjQ0NDQsMCwwLC41XSw1NTpbMCwuNjQ0NDQsMCwwLC41XSw1NjpbMCwuNjQ0NDQsMCwwLC41XSw1NzpbMCwuNjQ0NDQsMCwwLC41XSw1ODpbMCwuNDMwNTYsMCwwLC4yNzc3OF0sNTk6Wy4xOTQ0NCwuNDMwNTYsMCwwLC4yNzc3OF0sNjA6Wy4wMzkxLC41MzkxLDAsMCwuNzc3NzhdLDYxOlstLjEzMzEzLC4zNjY4NywwLDAsLjc3Nzc4XSw2MjpbLjAzOTEsLjUzOTEsMCwwLC43Nzc3OF0sNjM6WzAsLjY5NDQ0LDAsMCwuNDcyMjJdLDY0OlswLC42OTQ0NCwwLDAsLjc3Nzc4XSw2NTpbMCwuNjgzMzMsMCwwLC43NV0sNjY6WzAsLjY4MzMzLDAsMCwuNzA4MzRdLDY3OlswLC42ODMzMywwLDAsLjcyMjIyXSw2ODpbMCwuNjgzMzMsMCwwLC43NjM4OV0sNjk6WzAsLjY4MzMzLDAsMCwuNjgwNTZdLDcwOlswLC42ODMzMywwLDAsLjY1Mjc4XSw3MTpbMCwuNjgzMzMsMCwwLC43ODQ3Ml0sNzI6WzAsLjY4MzMzLDAsMCwuNzVdLDczOlswLC42ODMzMywwLDAsLjM2MTExXSw3NDpbMCwuNjgzMzMsMCwwLC41MTM4OV0sNzU6WzAsLjY4MzMzLDAsMCwuNzc3NzhdLDc2OlswLC42ODMzMywwLDAsLjYyNV0sNzc6WzAsLjY4MzMzLDAsMCwuOTE2NjddLDc4OlswLC42ODMzMywwLDAsLjc1XSw3OTpbMCwuNjgzMzMsMCwwLC43Nzc3OF0sODA6WzAsLjY4MzMzLDAsMCwuNjgwNTZdLDgxOlsuMTk0NDQsLjY4MzMzLDAsMCwuNzc3NzhdLDgyOlswLC42ODMzMywwLDAsLjczNjExXSw4MzpbMCwuNjgzMzMsMCwwLC41NTU1Nl0sODQ6WzAsLjY4MzMzLDAsMCwuNzIyMjJdLDg1OlswLC42ODMzMywwLDAsLjc1XSw4NjpbMCwuNjgzMzMsLjAxMzg5LDAsLjc1XSw4NzpbMCwuNjgzMzMsLjAxMzg5LDAsMS4wMjc3OF0sODg6WzAsLjY4MzMzLDAsMCwuNzVdLDg5OlswLC42ODMzMywuMDI1LDAsLjc1XSw5MDpbMCwuNjgzMzMsMCwwLC42MTExMV0sOTE6Wy4yNSwuNzUsMCwwLC4yNzc3OF0sOTI6Wy4yNSwuNzUsMCwwLC41XSw5MzpbLjI1LC43NSwwLDAsLjI3Nzc4XSw5NDpbMCwuNjk0NDQsMCwwLC41XSw5NTpbLjMxLC4xMjA1NiwuMDI3NzgsMCwuNV0sOTc6WzAsLjQzMDU2LDAsMCwuNV0sOTg6WzAsLjY5NDQ0LDAsMCwuNTU1NTZdLDk5OlswLC40MzA1NiwwLDAsLjQ0NDQ1XSwxMDA6WzAsLjY5NDQ0LDAsMCwuNTU1NTZdLDEwMTpbMCwuNDMwNTYsMCwwLC40NDQ0NV0sMTAyOlswLC42OTQ0NCwuMDc3NzgsMCwuMzA1NTZdLDEwMzpbLjE5NDQ0LC40MzA1NiwuMDEzODksMCwuNV0sMTA0OlswLC42OTQ0NCwwLDAsLjU1NTU2XSwxMDU6WzAsLjY2Nzg2LDAsMCwuMjc3NzhdLDEwNjpbLjE5NDQ0LC42Njc4NiwwLDAsLjMwNTU2XSwxMDc6WzAsLjY5NDQ0LDAsMCwuNTI3NzhdLDEwODpbMCwuNjk0NDQsMCwwLC4yNzc3OF0sMTA5OlswLC40MzA1NiwwLDAsLjgzMzM0XSwxMTA6WzAsLjQzMDU2LDAsMCwuNTU1NTZdLDExMTpbMCwuNDMwNTYsMCwwLC41XSwxMTI6Wy4xOTQ0NCwuNDMwNTYsMCwwLC41NTU1Nl0sMTEzOlsuMTk0NDQsLjQzMDU2LDAsMCwuNTI3NzhdLDExNDpbMCwuNDMwNTYsMCwwLC4zOTE2N10sMTE1OlswLC40MzA1NiwwLDAsLjM5NDQ1XSwxMTY6WzAsLjYxNTA4LDAsMCwuMzg4ODldLDExNzpbMCwuNDMwNTYsMCwwLC41NTU1Nl0sMTE4OlswLC40MzA1NiwuMDEzODksMCwuNTI3NzhdLDExOTpbMCwuNDMwNTYsLjAxMzg5LDAsLjcyMjIyXSwxMjA6WzAsLjQzMDU2LDAsMCwuNTI3NzhdLDEyMTpbLjE5NDQ0LC40MzA1NiwuMDEzODksMCwuNTI3NzhdLDEyMjpbMCwuNDMwNTYsMCwwLC40NDQ0NV0sMTIzOlsuMjUsLjc1LDAsMCwuNV0sMTI0OlsuMjUsLjc1LDAsMCwuMjc3NzhdLDEyNTpbLjI1LC43NSwwLDAsLjVdLDEyNjpbLjM1LC4zMTc4NiwwLDAsLjVdLDE2MDpbMCwwLDAsMCwuMjVdLDE2MzpbMCwuNjk0NDQsMCwwLC43NjkwOV0sMTY3OlsuMTk0NDQsLjY5NDQ0LDAsMCwuNDQ0NDVdLDE2ODpbMCwuNjY3ODYsMCwwLC41XSwxNzI6WzAsLjQzMDU2LDAsMCwuNjY2NjddLDE3NjpbMCwuNjk0NDQsMCwwLC43NV0sMTc3OlsuMDgzMzMsLjU4MzMzLDAsMCwuNzc3NzhdLDE4MjpbLjE5NDQ0LC42OTQ0NCwwLDAsLjYxMTExXSwxODQ6Wy4xNzAxNCwwLDAsMCwuNDQ0NDVdLDE5ODpbMCwuNjgzMzMsMCwwLC45MDI3OF0sMjE1OlsuMDgzMzMsLjU4MzMzLDAsMCwuNzc3NzhdLDIxNjpbLjA0ODYxLC43MzE5NCwwLDAsLjc3Nzc4XSwyMjM6WzAsLjY5NDQ0LDAsMCwuNV0sMjMwOlswLC40MzA1NiwwLDAsLjcyMjIyXSwyNDc6Wy4wODMzMywuNTgzMzMsMCwwLC43Nzc3OF0sMjQ4OlsuMDk3MjIsLjUyNzc4LDAsMCwuNV0sMzA1OlswLC40MzA1NiwwLDAsLjI3Nzc4XSwzMzg6WzAsLjY4MzMzLDAsMCwxLjAxMzg5XSwzMzk6WzAsLjQzMDU2LDAsMCwuNzc3NzhdLDU2NzpbLjE5NDQ0LC40MzA1NiwwLDAsLjMwNTU2XSw3MTA6WzAsLjY5NDQ0LDAsMCwuNV0sNzExOlswLC42Mjg0NywwLDAsLjVdLDcxMzpbMCwuNTY3NzgsMCwwLC41XSw3MTQ6WzAsLjY5NDQ0LDAsMCwuNV0sNzE1OlswLC42OTQ0NCwwLDAsLjVdLDcyODpbMCwuNjk0NDQsMCwwLC41XSw3Mjk6WzAsLjY2Nzg2LDAsMCwuMjc3NzhdLDczMDpbMCwuNjk0NDQsMCwwLC43NV0sNzMyOlswLC42Njc4NiwwLDAsLjVdLDczMzpbMCwuNjk0NDQsMCwwLC41XSw5MTU6WzAsLjY4MzMzLDAsMCwuNjI1XSw5MTY6WzAsLjY4MzMzLDAsMCwuODMzMzRdLDkyMDpbMCwuNjgzMzMsMCwwLC43Nzc3OF0sOTIzOlswLC42ODMzMywwLDAsLjY5NDQ1XSw5MjY6WzAsLjY4MzMzLDAsMCwuNjY2NjddLDkyODpbMCwuNjgzMzMsMCwwLC43NV0sOTMxOlswLC42ODMzMywwLDAsLjcyMjIyXSw5MzM6WzAsLjY4MzMzLDAsMCwuNzc3NzhdLDkzNDpbMCwuNjgzMzMsMCwwLC43MjIyMl0sOTM2OlswLC42ODMzMywwLDAsLjc3Nzc4XSw5Mzc6WzAsLjY4MzMzLDAsMCwuNzIyMjJdLDgyMTE6WzAsLjQzMDU2LC4wMjc3OCwwLC41XSw4MjEyOlswLC40MzA1NiwuMDI3NzgsMCwxXSw4MjE2OlswLC42OTQ0NCwwLDAsLjI3Nzc4XSw4MjE3OlswLC42OTQ0NCwwLDAsLjI3Nzc4XSw4MjIwOlswLC42OTQ0NCwwLDAsLjVdLDgyMjE6WzAsLjY5NDQ0LDAsMCwuNV0sODIyNDpbLjE5NDQ0LC42OTQ0NCwwLDAsLjQ0NDQ1XSw4MjI1OlsuMTk0NDQsLjY5NDQ0LDAsMCwuNDQ0NDVdLDgyMzA6WzAsLjEyMywwLDAsMS4xNzJdLDgyNDI6WzAsLjU1NTU2LDAsMCwuMjc1XSw4NDA3OlswLC43MTQ0NCwuMTUzODIsMCwuNV0sODQ2MzpbMCwuNjg4ODksMCwwLC41NDAyOF0sODQ2NTpbMCwuNjk0NDQsMCwwLC43MjIyMl0sODQ2NzpbMCwuNjk0NDQsMCwuMTExMTEsLjQxNjY3XSw4NDcyOlsuMTk0NDQsLjQzMDU2LDAsLjExMTExLC42MzY0Nl0sODQ3NjpbMCwuNjk0NDQsMCwwLC43MjIyMl0sODUwMTpbMCwuNjk0NDQsMCwwLC42MTExMV0sODU5MjpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg1OTM6Wy4xOTQ0NCwuNjk0NDQsMCwwLC41XSw4NTk0OlstLjEzMzEzLC4zNjY4NywwLDAsMV0sODU5NTpbLjE5NDQ0LC42OTQ0NCwwLDAsLjVdLDg1OTY6Wy0uMTMzMTMsLjM2Njg3LDAsMCwxXSw4NTk3OlsuMjUsLjc1LDAsMCwuNV0sODU5ODpbLjE5NDQ0LC42OTQ0NCwwLDAsMV0sODU5OTpbLjE5NDQ0LC42OTQ0NCwwLDAsMV0sODYwMDpbLjE5NDQ0LC42OTQ0NCwwLDAsMV0sODYwMTpbLjE5NDQ0LC42OTQ0NCwwLDAsMV0sODYxNDpbLjAxMSwuNTExLDAsMCwxXSw4NjE3OlsuMDExLC41MTEsMCwwLDEuMTI2XSw4NjE4OlsuMDExLC41MTEsMCwwLDEuMTI2XSw4NjM2OlstLjEzMzEzLC4zNjY4NywwLDAsMV0sODYzNzpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2NDA6Wy0uMTMzMTMsLjM2Njg3LDAsMCwxXSw4NjQxOlstLjEzMzEzLC4zNjY4NywwLDAsMV0sODY1MjpbLjAxMSwuNjcxLDAsMCwxXSw4NjU2OlstLjEzMzEzLC4zNjY4NywwLDAsMV0sODY1NzpbLjE5NDQ0LC42OTQ0NCwwLDAsLjYxMTExXSw4NjU4OlstLjEzMzEzLC4zNjY4NywwLDAsMV0sODY1OTpbLjE5NDQ0LC42OTQ0NCwwLDAsLjYxMTExXSw4NjYwOlstLjEzMzEzLC4zNjY4NywwLDAsMV0sODY2MTpbLjI1LC43NSwwLDAsLjYxMTExXSw4NzA0OlswLC42OTQ0NCwwLDAsLjU1NTU2XSw4NzA2OlswLC42OTQ0NCwuMDU1NTYsLjA4MzM0LC41MzA5XSw4NzA3OlswLC42OTQ0NCwwLDAsLjU1NTU2XSw4NzA5OlsuMDU1NTYsLjc1LDAsMCwuNV0sODcxMTpbMCwuNjgzMzMsMCwwLC44MzMzNF0sODcxMjpbLjAzOTEsLjUzOTEsMCwwLC42NjY2N10sODcxNTpbLjAzOTEsLjUzOTEsMCwwLC42NjY2N10sODcyMjpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSw4NzIzOlsuMDgzMzMsLjU4MzMzLDAsMCwuNzc3NzhdLDg3MjU6Wy4yNSwuNzUsMCwwLC41XSw4NzI2OlsuMjUsLjc1LDAsMCwuNV0sODcyNzpbLS4wMzQ3MiwuNDY1MjgsMCwwLC41XSw4NzI4OlstLjA1NTU1LC40NDQ0NSwwLDAsLjVdLDg3Mjk6Wy0uMDU1NTUsLjQ0NDQ1LDAsMCwuNV0sODczMDpbLjIsLjgsMCwwLC44MzMzNF0sODczMzpbMCwuNDMwNTYsMCwwLC43Nzc3OF0sODczNDpbMCwuNDMwNTYsMCwwLDFdLDg3MzY6WzAsLjY5MjI0LDAsMCwuNzIyMjJdLDg3Mzk6Wy4yNSwuNzUsMCwwLC4yNzc3OF0sODc0MTpbLjI1LC43NSwwLDAsLjVdLDg3NDM6WzAsLjU1NTU2LDAsMCwuNjY2NjddLDg3NDQ6WzAsLjU1NTU2LDAsMCwuNjY2NjddLDg3NDU6WzAsLjU1NTU2LDAsMCwuNjY2NjddLDg3NDY6WzAsLjU1NTU2LDAsMCwuNjY2NjddLDg3NDc6Wy4xOTQ0NCwuNjk0NDQsLjExMTExLDAsLjQxNjY3XSw4NzY0OlstLjEzMzEzLC4zNjY4NywwLDAsLjc3Nzc4XSw4NzY4OlsuMTk0NDQsLjY5NDQ0LDAsMCwuMjc3NzhdLDg3NzE6Wy0uMDM2MjUsLjQ2Mzc1LDAsMCwuNzc3NzhdLDg3NzM6Wy0uMDIyLC41ODksMCwwLC43NzhdLDg3NzY6Wy0uMDE2ODgsLjQ4MzEyLDAsMCwuNzc3NzhdLDg3ODE6Wy0uMDM2MjUsLjQ2Mzc1LDAsMCwuNzc3NzhdLDg3ODQ6Wy0uMTMzLC42NzMsMCwwLC43NzhdLDg4MDE6Wy0uMDM2MjUsLjQ2Mzc1LDAsMCwuNzc3NzhdLDg4MDQ6Wy4xMzU5NywuNjM1OTcsMCwwLC43Nzc3OF0sODgwNTpbLjEzNTk3LC42MzU5NywwLDAsLjc3Nzc4XSw4ODEwOlsuMDM5MSwuNTM5MSwwLDAsMV0sODgxMTpbLjAzOTEsLjUzOTEsMCwwLDFdLDg4MjY6Wy4wMzkxLC41MzkxLDAsMCwuNzc3NzhdLDg4Mjc6Wy4wMzkxLC41MzkxLDAsMCwuNzc3NzhdLDg4MzQ6Wy4wMzkxLC41MzkxLDAsMCwuNzc3NzhdLDg4MzU6Wy4wMzkxLC41MzkxLDAsMCwuNzc3NzhdLDg4Mzg6Wy4xMzU5NywuNjM1OTcsMCwwLC43Nzc3OF0sODgzOTpbLjEzNTk3LC42MzU5NywwLDAsLjc3Nzc4XSw4ODQ2OlswLC41NTU1NiwwLDAsLjY2NjY3XSw4ODQ5OlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDg4NTA6Wy4xMzU5NywuNjM1OTcsMCwwLC43Nzc3OF0sODg1MTpbMCwuNTU1NTYsMCwwLC42NjY2N10sODg1MjpbMCwuNTU1NTYsMCwwLC42NjY2N10sODg1MzpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSw4ODU0OlsuMDgzMzMsLjU4MzMzLDAsMCwuNzc3NzhdLDg4NTU6Wy4wODMzMywuNTgzMzMsMCwwLC43Nzc3OF0sODg1NjpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSw4ODU3OlsuMDgzMzMsLjU4MzMzLDAsMCwuNzc3NzhdLDg4NjY6WzAsLjY5NDQ0LDAsMCwuNjExMTFdLDg4Njc6WzAsLjY5NDQ0LDAsMCwuNjExMTFdLDg4Njg6WzAsLjY5NDQ0LDAsMCwuNzc3NzhdLDg4Njk6WzAsLjY5NDQ0LDAsMCwuNzc3NzhdLDg4NzI6Wy4yNDksLjc1LDAsMCwuODY3XSw4OTAwOlstLjA1NTU1LC40NDQ0NSwwLDAsLjVdLDg5MDE6Wy0uMDU1NTUsLjQ0NDQ1LDAsMCwuMjc3NzhdLDg5MDI6Wy0uMDM0NzIsLjQ2NTI4LDAsMCwuNV0sODkwNDpbLjAwNSwuNTA1LDAsMCwuOV0sODk0MjpbLjAzLC45MDMsMCwwLC4yNzhdLDg5NDM6Wy0uMTksLjMxMywwLDAsMS4xNzJdLDg5NDU6Wy0uMSwuODIzLDAsMCwxLjI4Ml0sODk2ODpbLjI1LC43NSwwLDAsLjQ0NDQ1XSw4OTY5OlsuMjUsLjc1LDAsMCwuNDQ0NDVdLDg5NzA6Wy4yNSwuNzUsMCwwLC40NDQ0NV0sODk3MTpbLjI1LC43NSwwLDAsLjQ0NDQ1XSw4OTk0OlstLjE0MjM2LC4zNTc2NCwwLDAsMV0sODk5NTpbLS4xNDIzNiwuMzU3NjQsMCwwLDFdLDkxMzY6Wy4yNDQsLjc0NCwwLDAsLjQxMl0sOTEzNzpbLjI0NCwuNzQ1LDAsMCwuNDEyXSw5NjUxOlsuMTk0NDQsLjY5NDQ0LDAsMCwuODg4ODldLDk2NTc6Wy0uMDM0NzIsLjQ2NTI4LDAsMCwuNV0sOTY2MTpbLjE5NDQ0LC42OTQ0NCwwLDAsLjg4ODg5XSw5NjY3OlstLjAzNDcyLC40NjUyOCwwLDAsLjVdLDk3MTE6Wy4xOTQ0NCwuNjk0NDQsMCwwLDFdLDk4MjQ6Wy4xMjk2MywuNjk0NDQsMCwwLC43Nzc3OF0sOTgyNTpbLjEyOTYzLC42OTQ0NCwwLDAsLjc3Nzc4XSw5ODI2OlsuMTI5NjMsLjY5NDQ0LDAsMCwuNzc3NzhdLDk4Mjc6Wy4xMjk2MywuNjk0NDQsMCwwLC43Nzc3OF0sOTgzNzpbMCwuNzUsMCwwLC4zODg4OV0sOTgzODpbLjE5NDQ0LC42OTQ0NCwwLDAsLjM4ODg5XSw5ODM5OlsuMTk0NDQsLjY5NDQ0LDAsMCwuMzg4ODldLDEwMjE2OlsuMjUsLjc1LDAsMCwuMzg4ODldLDEwMjE3OlsuMjUsLjc1LDAsMCwuMzg4ODldLDEwMjIyOlsuMjQ0LC43NDQsMCwwLC40MTJdLDEwMjIzOlsuMjQ0LC43NDUsMCwwLC40MTJdLDEwMjI5OlsuMDExLC41MTEsMCwwLDEuNjA5XSwxMDIzMDpbLjAxMSwuNTExLDAsMCwxLjYzOF0sMTAyMzE6Wy4wMTEsLjUxMSwwLDAsMS44NTldLDEwMjMyOlsuMDI0LC41MjUsMCwwLDEuNjA5XSwxMDIzMzpbLjAyNCwuNTI1LDAsMCwxLjYzOF0sMTAyMzQ6Wy4wMjQsLjUyNSwwLDAsMS44NThdLDEwMjM2OlsuMDExLC41MTEsMCwwLDEuNjM4XSwxMDgxNTpbMCwuNjgzMzMsMCwwLC43NV0sMTA5Mjc6Wy4xMzU5NywuNjM1OTcsMCwwLC43Nzc3OF0sMTA5Mjg6Wy4xMzU5NywuNjM1OTcsMCwwLC43Nzc3OF0sNTczNzY6Wy4xOTQ0NCwuNjk0NDQsMCwwLDBdfSwiTWF0aC1Cb2xkSXRhbGljIjp7MzI6WzAsMCwwLDAsLjI1XSw0ODpbMCwuNDQ0NDQsMCwwLC41NzVdLDQ5OlswLC40NDQ0NCwwLDAsLjU3NV0sNTA6WzAsLjQ0NDQ0LDAsMCwuNTc1XSw1MTpbLjE5NDQ0LC40NDQ0NCwwLDAsLjU3NV0sNTI6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC41NzVdLDUzOlsuMTk0NDQsLjQ0NDQ0LDAsMCwuNTc1XSw1NDpbMCwuNjQ0NDQsMCwwLC41NzVdLDU1OlsuMTk0NDQsLjQ0NDQ0LDAsMCwuNTc1XSw1NjpbMCwuNjQ0NDQsMCwwLC41NzVdLDU3OlsuMTk0NDQsLjQ0NDQ0LDAsMCwuNTc1XSw2NTpbMCwuNjg2MTEsMCwwLC44Njk0NF0sNjY6WzAsLjY4NjExLC4wNDgzNSwwLC44NjY0XSw2NzpbMCwuNjg2MTEsLjA2OTc5LDAsLjgxNjk0XSw2ODpbMCwuNjg2MTEsLjAzMTk0LDAsLjkzODEyXSw2OTpbMCwuNjg2MTEsLjA1NDUxLDAsLjgxMDA3XSw3MDpbMCwuNjg2MTEsLjE1OTcyLDAsLjY4ODg5XSw3MTpbMCwuNjg2MTEsMCwwLC44ODY3M10sNzI6WzAsLjY4NjExLC4wODIyOSwwLC45ODIyOV0sNzM6WzAsLjY4NjExLC4wNzc3OCwwLC41MTExMV0sNzQ6WzAsLjY4NjExLC4xMDA2OSwwLC42MzEyNV0sNzU6WzAsLjY4NjExLC4wNjk3OSwwLC45NzExOF0sNzY6WzAsLjY4NjExLDAsMCwuNzU1NTVdLDc3OlswLC42ODYxMSwuMTE0MjQsMCwxLjE0MjAxXSw3ODpbMCwuNjg2MTEsLjExNDI0LDAsLjk1MDM0XSw3OTpbMCwuNjg2MTEsLjAzMTk0LDAsLjgzNjY2XSw4MDpbMCwuNjg2MTEsLjE1OTcyLDAsLjcyMzA5XSw4MTpbLjE5NDQ0LC42ODYxMSwwLDAsLjg2ODYxXSw4MjpbMCwuNjg2MTEsLjAwNDIxLDAsLjg3MjM1XSw4MzpbMCwuNjg2MTEsLjA1MzgyLDAsLjY5MjcxXSw4NDpbMCwuNjg2MTEsLjE1OTcyLDAsLjYzNjYzXSw4NTpbMCwuNjg2MTEsLjExNDI0LDAsLjgwMDI3XSw4NjpbMCwuNjg2MTEsLjI1NTU1LDAsLjY3Nzc4XSw4NzpbMCwuNjg2MTEsLjE1OTcyLDAsMS4wOTMwNV0sODg6WzAsLjY4NjExLC4wNzc3OCwwLC45NDcyMl0sODk6WzAsLjY4NjExLC4yNTU1NSwwLC42NzQ1OF0sOTA6WzAsLjY4NjExLC4wNjk3OSwwLC43NzI1N10sOTc6WzAsLjQ0NDQ0LDAsMCwuNjMyODddLDk4OlswLC42OTQ0NCwwLDAsLjUyMDgzXSw5OTpbMCwuNDQ0NDQsMCwwLC41MTM0Ml0sMTAwOlswLC42OTQ0NCwwLDAsLjYwOTcyXSwxMDE6WzAsLjQ0NDQ0LDAsMCwuNTUzNjFdLDEwMjpbLjE5NDQ0LC42OTQ0NCwuMTEwNDIsMCwuNTY4MDZdLDEwMzpbLjE5NDQ0LC40NDQ0NCwuMDM3MDQsMCwuNTQ0OV0sMTA0OlswLC42OTQ0NCwwLDAsLjY2NzU5XSwxMDU6WzAsLjY5MzI2LDAsMCwuNDA0OF0sMTA2OlsuMTk0NDQsLjY5MzI2LC4wNjIyLDAsLjQ3MDgzXSwxMDc6WzAsLjY5NDQ0LC4wMTg1MiwwLC42MDM3XSwxMDg6WzAsLjY5NDQ0LC4wMDg4LDAsLjM0ODE1XSwxMDk6WzAsLjQ0NDQ0LDAsMCwxLjAzMjRdLDExMDpbMCwuNDQ0NDQsMCwwLC43MTI5Nl0sMTExOlswLC40NDQ0NCwwLDAsLjU4NDcyXSwxMTI6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC42MDA5Ml0sMTEzOlsuMTk0NDQsLjQ0NDQ0LC4wMzcwNCwwLC41NDIxM10sMTE0OlswLC40NDQ0NCwuMDMxOTQsMCwuNTI4N10sMTE1OlswLC40NDQ0NCwwLDAsLjUzMTI1XSwxMTY6WzAsLjYzNDkyLDAsMCwuNDE1MjhdLDExNzpbMCwuNDQ0NDQsMCwwLC42ODEwMl0sMTE4OlswLC40NDQ0NCwuMDM3MDQsMCwuNTY2NjZdLDExOTpbMCwuNDQ0NDQsLjAyNzc4LDAsLjgzMTQ4XSwxMjA6WzAsLjQ0NDQ0LDAsMCwuNjU5MDNdLDEyMTpbLjE5NDQ0LC40NDQ0NCwuMDM3MDQsMCwuNTkwMjhdLDEyMjpbMCwuNDQ0NDQsLjA0MjEzLDAsLjU1NTA5XSwxNjA6WzAsMCwwLDAsLjI1XSw5MTU6WzAsLjY4NjExLC4xNTk3MiwwLC42NTY5NF0sOTE2OlswLC42ODYxMSwwLDAsLjk1ODMzXSw5MjA6WzAsLjY4NjExLC4wMzE5NCwwLC44NjcyMl0sOTIzOlswLC42ODYxMSwwLDAsLjgwNTU1XSw5MjY6WzAsLjY4NjExLC4wNzQ1OCwwLC44NDEyNV0sOTI4OlswLC42ODYxMSwuMDgyMjksMCwuOTgyMjldLDkzMTpbMCwuNjg2MTEsLjA1NDUxLDAsLjg4NTA3XSw5MzM6WzAsLjY4NjExLC4xNTk3MiwwLC42NzA4M10sOTM0OlswLC42ODYxMSwwLDAsLjc2NjY2XSw5MzY6WzAsLjY4NjExLC4xMTY1MywwLC43MTQwMl0sOTM3OlswLC42ODYxMSwuMDQ4MzUsMCwuODc4OV0sOTQ1OlswLC40NDQ0NCwwLDAsLjc2MDY0XSw5NDY6Wy4xOTQ0NCwuNjk0NDQsLjAzNDAzLDAsLjY1OTcyXSw5NDc6Wy4xOTQ0NCwuNDQ0NDQsLjA2Mzg5LDAsLjU5MDAzXSw5NDg6WzAsLjY5NDQ0LC4wMzgxOSwwLC41MjIyMl0sOTQ5OlswLC40NDQ0NCwwLDAsLjUyODgyXSw5NTA6Wy4xOTQ0NCwuNjk0NDQsLjA2MjE1LDAsLjUwODMzXSw5NTE6Wy4xOTQ0NCwuNDQ0NDQsLjAzNzA0LDAsLjZdLDk1MjpbMCwuNjk0NDQsLjAzMTk0LDAsLjU2MThdLDk1MzpbMCwuNDQ0NDQsMCwwLC40MTIwNF0sOTU0OlswLC40NDQ0NCwwLDAsLjY2NzU5XSw5NTU6WzAsLjY5NDQ0LDAsMCwuNjcwODNdLDk1NjpbLjE5NDQ0LC40NDQ0NCwwLDAsLjcwNzg3XSw5NTc6WzAsLjQ0NDQ0LC4wNjg5OCwwLC41NzY4NV0sOTU4OlsuMTk0NDQsLjY5NDQ0LC4wMzAyMSwwLC41MDgzM10sOTU5OlswLC40NDQ0NCwwLDAsLjU4NDcyXSw5NjA6WzAsLjQ0NDQ0LC4wMzcwNCwwLC42ODI0MV0sOTYxOlsuMTk0NDQsLjQ0NDQ0LDAsMCwuNjExOF0sOTYyOlsuMDk3MjIsLjQ0NDQ0LC4wNzkxNywwLC40MjM2MV0sOTYzOlswLC40NDQ0NCwuMDM3MDQsMCwuNjg1ODhdLDk2NDpbMCwuNDQ0NDQsLjEzNDcyLDAsLjUyMDgzXSw5NjU6WzAsLjQ0NDQ0LC4wMzcwNCwwLC42MzA1NV0sOTY2OlsuMTk0NDQsLjQ0NDQ0LDAsMCwuNzQ3MjJdLDk2NzpbLjE5NDQ0LC40NDQ0NCwwLDAsLjcxODA1XSw5Njg6Wy4xOTQ0NCwuNjk0NDQsLjAzNzA0LDAsLjc1ODMzXSw5Njk6WzAsLjQ0NDQ0LC4wMzcwNCwwLC43MTc4Ml0sOTc3OlswLC42OTQ0NCwwLDAsLjY5MTU1XSw5ODE6Wy4xOTQ0NCwuNjk0NDQsMCwwLC43MTI1XSw5ODI6WzAsLjQ0NDQ0LC4wMzE5NCwwLC45NzVdLDEwMDk6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC42MTE4XSwxMDEzOlswLC40NDQ0NCwwLDAsLjQ4MzMzXSw1NzY0OTpbMCwuNDQ0NDQsMCwwLC4zOTM1Ml0sNTc5MTE6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC40Mzg4OV19LCJNYXRoLUl0YWxpYyI6ezMyOlswLDAsMCwwLC4yNV0sNDg6WzAsLjQzMDU2LDAsMCwuNV0sNDk6WzAsLjQzMDU2LDAsMCwuNV0sNTA6WzAsLjQzMDU2LDAsMCwuNV0sNTE6Wy4xOTQ0NCwuNDMwNTYsMCwwLC41XSw1MjpbLjE5NDQ0LC40MzA1NiwwLDAsLjVdLDUzOlsuMTk0NDQsLjQzMDU2LDAsMCwuNV0sNTQ6WzAsLjY0NDQ0LDAsMCwuNV0sNTU6Wy4xOTQ0NCwuNDMwNTYsMCwwLC41XSw1NjpbMCwuNjQ0NDQsMCwwLC41XSw1NzpbLjE5NDQ0LC40MzA1NiwwLDAsLjVdLDY1OlswLC42ODMzMywwLC4xMzg4OSwuNzVdLDY2OlswLC42ODMzMywuMDUwMTcsLjA4MzM0LC43NTg1MV0sNjc6WzAsLjY4MzMzLC4wNzE1MywuMDgzMzQsLjcxNDcyXSw2ODpbMCwuNjgzMzMsLjAyNzc4LC4wNTU1NiwuODI3OTJdLDY5OlswLC42ODMzMywuMDU3NjQsLjA4MzM0LC43MzgyXSw3MDpbMCwuNjgzMzMsLjEzODg5LC4wODMzNCwuNjQzMDZdLDcxOlswLC42ODMzMywwLC4wODMzNCwuNzg2MjVdLDcyOlswLC42ODMzMywuMDgxMjUsLjA1NTU2LC44MzEyNV0sNzM6WzAsLjY4MzMzLC4wNzg0NywuMTExMTEsLjQzOTU4XSw3NDpbMCwuNjgzMzMsLjA5NjE4LC4xNjY2NywuNTU0NTFdLDc1OlswLC42ODMzMywuMDcxNTMsLjA1NTU2LC44NDkzMV0sNzY6WzAsLjY4MzMzLDAsLjAyNzc4LC42ODA1Nl0sNzc6WzAsLjY4MzMzLC4xMDkwMywuMDgzMzQsLjk3MDE0XSw3ODpbMCwuNjgzMzMsLjEwOTAzLC4wODMzNCwuODAzNDddLDc5OlswLC42ODMzMywuMDI3NzgsLjA4MzM0LC43NjI3OF0sODA6WzAsLjY4MzMzLC4xMzg4OSwuMDgzMzQsLjY0MjAxXSw4MTpbLjE5NDQ0LC42ODMzMywwLC4wODMzNCwuNzkwNTZdLDgyOlswLC42ODMzMywuMDA3NzMsLjA4MzM0LC43NTkyOV0sODM6WzAsLjY4MzMzLC4wNTc2NCwuMDgzMzQsLjYxMzJdLDg0OlswLC42ODMzMywuMTM4ODksLjA4MzM0LC41ODQzOF0sODU6WzAsLjY4MzMzLC4xMDkwMywuMDI3NzgsLjY4Mjc4XSw4NjpbMCwuNjgzMzMsLjIyMjIyLDAsLjU4MzMzXSw4NzpbMCwuNjgzMzMsLjEzODg5LDAsLjk0NDQ1XSw4ODpbMCwuNjgzMzMsLjA3ODQ3LC4wODMzNCwuODI4NDddLDg5OlswLC42ODMzMywuMjIyMjIsMCwuNTgwNTZdLDkwOlswLC42ODMzMywuMDcxNTMsLjA4MzM0LC42ODI2NF0sOTc6WzAsLjQzMDU2LDAsMCwuNTI4NTldLDk4OlswLC42OTQ0NCwwLDAsLjQyOTE3XSw5OTpbMCwuNDMwNTYsMCwuMDU1NTYsLjQzMjc2XSwxMDA6WzAsLjY5NDQ0LDAsLjE2NjY3LC41MjA0OV0sMTAxOlswLC40MzA1NiwwLC4wNTU1NiwuNDY1NjNdLDEwMjpbLjE5NDQ0LC42OTQ0NCwuMTA3NjQsLjE2NjY3LC40ODk1OV0sMTAzOlsuMTk0NDQsLjQzMDU2LC4wMzU4OCwuMDI3NzgsLjQ3Njk3XSwxMDQ6WzAsLjY5NDQ0LDAsMCwuNTc2MTZdLDEwNTpbMCwuNjU5NTIsMCwwLC4zNDQ1MV0sMTA2OlsuMTk0NDQsLjY1OTUyLC4wNTcyNCwwLC40MTE4MV0sMTA3OlswLC42OTQ0NCwuMDMxNDgsMCwuNTIwNl0sMTA4OlswLC42OTQ0NCwuMDE5NjgsLjA4MzM0LC4yOTgzOF0sMTA5OlswLC40MzA1NiwwLDAsLjg3ODAxXSwxMTA6WzAsLjQzMDU2LDAsMCwuNjAwMjNdLDExMTpbMCwuNDMwNTYsMCwuMDU1NTYsLjQ4NDcyXSwxMTI6Wy4xOTQ0NCwuNDMwNTYsMCwuMDgzMzQsLjUwMzEzXSwxMTM6Wy4xOTQ0NCwuNDMwNTYsLjAzNTg4LC4wODMzNCwuNDQ2NDFdLDExNDpbMCwuNDMwNTYsLjAyNzc4LC4wNTU1NiwuNDUxMTZdLDExNTpbMCwuNDMwNTYsMCwuMDU1NTYsLjQ2ODc1XSwxMTY6WzAsLjYxNTA4LDAsLjA4MzM0LC4zNjExMV0sMTE3OlswLC40MzA1NiwwLC4wMjc3OCwuNTcyNDZdLDExODpbMCwuNDMwNTYsLjAzNTg4LC4wMjc3OCwuNDg0NzJdLDExOTpbMCwuNDMwNTYsLjAyNjkxLC4wODMzNCwuNzE1OTJdLDEyMDpbMCwuNDMwNTYsMCwuMDI3NzgsLjU3MTUzXSwxMjE6Wy4xOTQ0NCwuNDMwNTYsLjAzNTg4LC4wNTU1NiwuNDkwMjhdLDEyMjpbMCwuNDMwNTYsLjA0Mzk4LC4wNTU1NiwuNDY1MDVdLDE2MDpbMCwwLDAsMCwuMjVdLDkxNTpbMCwuNjgzMzMsLjEzODg5LC4wODMzNCwuNjE1MjhdLDkxNjpbMCwuNjgzMzMsMCwuMTY2NjcsLjgzMzM0XSw5MjA6WzAsLjY4MzMzLC4wMjc3OCwuMDgzMzQsLjc2Mjc4XSw5MjM6WzAsLjY4MzMzLDAsLjE2NjY3LC42OTQ0NV0sOTI2OlswLC42ODMzMywuMDc1NjksLjA4MzM0LC43NDIzNl0sOTI4OlswLC42ODMzMywuMDgxMjUsLjA1NTU2LC44MzEyNV0sOTMxOlswLC42ODMzMywuMDU3NjQsLjA4MzM0LC43Nzk4Nl0sOTMzOlswLC42ODMzMywuMTM4ODksLjA1NTU2LC41ODMzM10sOTM0OlswLC42ODMzMywwLC4wODMzNCwuNjY2NjddLDkzNjpbMCwuNjgzMzMsLjExLC4wNTU1NiwuNjEyMjJdLDkzNzpbMCwuNjgzMzMsLjA1MDE3LC4wODMzNCwuNzcyNF0sOTQ1OlswLC40MzA1NiwuMDAzNywuMDI3NzgsLjYzOTddLDk0NjpbLjE5NDQ0LC42OTQ0NCwuMDUyNzgsLjA4MzM0LC41NjU2M10sOTQ3OlsuMTk0NDQsLjQzMDU2LC4wNTU1NiwwLC41MTc3M10sOTQ4OlswLC42OTQ0NCwuMDM3ODUsLjA1NTU2LC40NDQ0NF0sOTQ5OlswLC40MzA1NiwwLC4wODMzNCwuNDY2MzJdLDk1MDpbLjE5NDQ0LC42OTQ0NCwuMDczNzgsLjA4MzM0LC40Mzc1XSw5NTE6Wy4xOTQ0NCwuNDMwNTYsLjAzNTg4LC4wNTU1NiwuNDk2NTNdLDk1MjpbMCwuNjk0NDQsLjAyNzc4LC4wODMzNCwuNDY5NDRdLDk1MzpbMCwuNDMwNTYsMCwuMDU1NTYsLjM1Mzk0XSw5NTQ6WzAsLjQzMDU2LDAsMCwuNTc2MTZdLDk1NTpbMCwuNjk0NDQsMCwwLC41ODMzNF0sOTU2OlsuMTk0NDQsLjQzMDU2LDAsLjAyNzc4LC42MDI1NV0sOTU3OlswLC40MzA1NiwuMDYzNjYsLjAyNzc4LC40OTM5OF0sOTU4OlsuMTk0NDQsLjY5NDQ0LC4wNDYwMSwuMTExMTEsLjQzNzVdLDk1OTpbMCwuNDMwNTYsMCwuMDU1NTYsLjQ4NDcyXSw5NjA6WzAsLjQzMDU2LC4wMzU4OCwwLC41NzAwM10sOTYxOlsuMTk0NDQsLjQzMDU2LDAsLjA4MzM0LC41MTcwMl0sOTYyOlsuMDk3MjIsLjQzMDU2LC4wNzk4NiwuMDgzMzQsLjM2Mjg1XSw5NjM6WzAsLjQzMDU2LC4wMzU4OCwwLC41NzE0MV0sOTY0OlswLC40MzA1NiwuMTEzMiwuMDI3NzgsLjQzNzE1XSw5NjU6WzAsLjQzMDU2LC4wMzU4OCwuMDI3NzgsLjU0MDI4XSw5NjY6Wy4xOTQ0NCwuNDMwNTYsMCwuMDgzMzQsLjY1NDE3XSw5Njc6Wy4xOTQ0NCwuNDMwNTYsMCwuMDU1NTYsLjYyNTY5XSw5Njg6Wy4xOTQ0NCwuNjk0NDQsLjAzNTg4LC4xMTExMSwuNjUxMzldLDk2OTpbMCwuNDMwNTYsLjAzNTg4LDAsLjYyMjQ1XSw5Nzc6WzAsLjY5NDQ0LDAsLjA4MzM0LC41OTE0NF0sOTgxOlsuMTk0NDQsLjY5NDQ0LDAsLjA4MzM0LC41OTU4M10sOTgyOlswLC40MzA1NiwuMDI3NzgsMCwuODI4MTNdLDEwMDk6Wy4xOTQ0NCwuNDMwNTYsMCwuMDgzMzQsLjUxNzAyXSwxMDEzOlswLC40MzA1NiwwLC4wNTU1NiwuNDA1OV0sNTc2NDk6WzAsLjQzMDU2LDAsLjAyNzc4LC4zMjI0Nl0sNTc5MTE6Wy4xOTQ0NCwuNDMwNTYsMCwuMDgzMzQsLjM4NDAzXX0sIlNhbnNTZXJpZi1Cb2xkIjp7MzI6WzAsMCwwLDAsLjI1XSwzMzpbMCwuNjk0NDQsMCwwLC4zNjY2N10sMzQ6WzAsLjY5NDQ0LDAsMCwuNTU4MzRdLDM1OlsuMTk0NDQsLjY5NDQ0LDAsMCwuOTE2NjddLDM2OlsuMDU1NTYsLjc1LDAsMCwuNTVdLDM3OlsuMDU1NTYsLjc1LDAsMCwxLjAyOTEyXSwzODpbMCwuNjk0NDQsMCwwLC44MzA1Nl0sMzk6WzAsLjY5NDQ0LDAsMCwuMzA1NTZdLDQwOlsuMjUsLjc1LDAsMCwuNDI3NzhdLDQxOlsuMjUsLjc1LDAsMCwuNDI3NzhdLDQyOlswLC43NSwwLDAsLjU1XSw0MzpbLjExNjY3LC42MTY2NywwLDAsLjg1NTU2XSw0NDpbLjEwNTU2LC4xMzA1NiwwLDAsLjMwNTU2XSw0NTpbMCwuNDU4MzMsMCwwLC4zNjY2N10sNDY6WzAsLjEzMDU2LDAsMCwuMzA1NTZdLDQ3OlsuMjUsLjc1LDAsMCwuNTVdLDQ4OlswLC42OTQ0NCwwLDAsLjU1XSw0OTpbMCwuNjk0NDQsMCwwLC41NV0sNTA6WzAsLjY5NDQ0LDAsMCwuNTVdLDUxOlswLC42OTQ0NCwwLDAsLjU1XSw1MjpbMCwuNjk0NDQsMCwwLC41NV0sNTM6WzAsLjY5NDQ0LDAsMCwuNTVdLDU0OlswLC42OTQ0NCwwLDAsLjU1XSw1NTpbMCwuNjk0NDQsMCwwLC41NV0sNTY6WzAsLjY5NDQ0LDAsMCwuNTVdLDU3OlswLC42OTQ0NCwwLDAsLjU1XSw1ODpbMCwuNDU4MzMsMCwwLC4zMDU1Nl0sNTk6Wy4xMDU1NiwuNDU4MzMsMCwwLC4zMDU1Nl0sNjE6Wy0uMDkzNzUsLjQwNjI1LDAsMCwuODU1NTZdLDYzOlswLC42OTQ0NCwwLDAsLjUxOTQ1XSw2NDpbMCwuNjk0NDQsMCwwLC43MzMzNF0sNjU6WzAsLjY5NDQ0LDAsMCwuNzMzMzRdLDY2OlswLC42OTQ0NCwwLDAsLjczMzM0XSw2NzpbMCwuNjk0NDQsMCwwLC43MDI3OF0sNjg6WzAsLjY5NDQ0LDAsMCwuNzk0NDVdLDY5OlswLC42OTQ0NCwwLDAsLjY0MTY3XSw3MDpbMCwuNjk0NDQsMCwwLC42MTExMV0sNzE6WzAsLjY5NDQ0LDAsMCwuNzMzMzRdLDcyOlswLC42OTQ0NCwwLDAsLjc5NDQ1XSw3MzpbMCwuNjk0NDQsMCwwLC4zMzA1Nl0sNzQ6WzAsLjY5NDQ0LDAsMCwuNTE5NDVdLDc1OlswLC42OTQ0NCwwLDAsLjc2Mzg5XSw3NjpbMCwuNjk0NDQsMCwwLC41ODA1Nl0sNzc6WzAsLjY5NDQ0LDAsMCwuOTc3NzhdLDc4OlswLC42OTQ0NCwwLDAsLjc5NDQ1XSw3OTpbMCwuNjk0NDQsMCwwLC43OTQ0NV0sODA6WzAsLjY5NDQ0LDAsMCwuNzAyNzhdLDgxOlsuMTA1NTYsLjY5NDQ0LDAsMCwuNzk0NDVdLDgyOlswLC42OTQ0NCwwLDAsLjcwMjc4XSw4MzpbMCwuNjk0NDQsMCwwLC42MTExMV0sODQ6WzAsLjY5NDQ0LDAsMCwuNzMzMzRdLDg1OlswLC42OTQ0NCwwLDAsLjc2Mzg5XSw4NjpbMCwuNjk0NDQsLjAxNTI4LDAsLjczMzM0XSw4NzpbMCwuNjk0NDQsLjAxNTI4LDAsMS4wMzg4OV0sODg6WzAsLjY5NDQ0LDAsMCwuNzMzMzRdLDg5OlswLC42OTQ0NCwuMDI3NSwwLC43MzMzNF0sOTA6WzAsLjY5NDQ0LDAsMCwuNjcyMjNdLDkxOlsuMjUsLjc1LDAsMCwuMzQzMDZdLDkzOlsuMjUsLjc1LDAsMCwuMzQzMDZdLDk0OlswLC42OTQ0NCwwLDAsLjU1XSw5NTpbLjM1LC4xMDgzMywuMDMwNTYsMCwuNTVdLDk3OlswLC40NTgzMywwLDAsLjUyNV0sOTg6WzAsLjY5NDQ0LDAsMCwuNTYxMTFdLDk5OlswLC40NTgzMywwLDAsLjQ4ODg5XSwxMDA6WzAsLjY5NDQ0LDAsMCwuNTYxMTFdLDEwMTpbMCwuNDU4MzMsMCwwLC41MTExMV0sMTAyOlswLC42OTQ0NCwuMDc2MzksMCwuMzM2MTFdLDEwMzpbLjE5NDQ0LC40NTgzMywuMDE1MjgsMCwuNTVdLDEwNDpbMCwuNjk0NDQsMCwwLC41NjExMV0sMTA1OlswLC42OTQ0NCwwLDAsLjI1NTU2XSwxMDY6Wy4xOTQ0NCwuNjk0NDQsMCwwLC4yODYxMV0sMTA3OlswLC42OTQ0NCwwLDAsLjUzMDU2XSwxMDg6WzAsLjY5NDQ0LDAsMCwuMjU1NTZdLDEwOTpbMCwuNDU4MzMsMCwwLC44NjY2N10sMTEwOlswLC40NTgzMywwLDAsLjU2MTExXSwxMTE6WzAsLjQ1ODMzLDAsMCwuNTVdLDExMjpbLjE5NDQ0LC40NTgzMywwLDAsLjU2MTExXSwxMTM6Wy4xOTQ0NCwuNDU4MzMsMCwwLC41NjExMV0sMTE0OlswLC40NTgzMywuMDE1MjgsMCwuMzcyMjJdLDExNTpbMCwuNDU4MzMsMCwwLC40MjE2N10sMTE2OlswLC41ODkyOSwwLDAsLjQwNDE3XSwxMTc6WzAsLjQ1ODMzLDAsMCwuNTYxMTFdLDExODpbMCwuNDU4MzMsLjAxNTI4LDAsLjVdLDExOTpbMCwuNDU4MzMsLjAxNTI4LDAsLjc0NDQ1XSwxMjA6WzAsLjQ1ODMzLDAsMCwuNV0sMTIxOlsuMTk0NDQsLjQ1ODMzLC4wMTUyOCwwLC41XSwxMjI6WzAsLjQ1ODMzLDAsMCwuNDc2MzldLDEyNjpbLjM1LC4zNDQ0NCwwLDAsLjU1XSwxNjA6WzAsMCwwLDAsLjI1XSwxNjg6WzAsLjY5NDQ0LDAsMCwuNTVdLDE3NjpbMCwuNjk0NDQsMCwwLC43MzMzNF0sMTgwOlswLC42OTQ0NCwwLDAsLjU1XSwxODQ6Wy4xNzAxNCwwLDAsMCwuNDg4ODldLDMwNTpbMCwuNDU4MzMsMCwwLC4yNTU1Nl0sNTY3OlsuMTk0NDQsLjQ1ODMzLDAsMCwuMjg2MTFdLDcxMDpbMCwuNjk0NDQsMCwwLC41NV0sNzExOlswLC42MzU0MiwwLDAsLjU1XSw3MTM6WzAsLjYzNzc4LDAsMCwuNTVdLDcyODpbMCwuNjk0NDQsMCwwLC41NV0sNzI5OlswLC42OTQ0NCwwLDAsLjMwNTU2XSw3MzA6WzAsLjY5NDQ0LDAsMCwuNzMzMzRdLDczMjpbMCwuNjk0NDQsMCwwLC41NV0sNzMzOlswLC42OTQ0NCwwLDAsLjU1XSw5MTU6WzAsLjY5NDQ0LDAsMCwuNTgwNTZdLDkxNjpbMCwuNjk0NDQsMCwwLC45MTY2N10sOTIwOlswLC42OTQ0NCwwLDAsLjg1NTU2XSw5MjM6WzAsLjY5NDQ0LDAsMCwuNjcyMjNdLDkyNjpbMCwuNjk0NDQsMCwwLC43MzMzNF0sOTI4OlswLC42OTQ0NCwwLDAsLjc5NDQ1XSw5MzE6WzAsLjY5NDQ0LDAsMCwuNzk0NDVdLDkzMzpbMCwuNjk0NDQsMCwwLC44NTU1Nl0sOTM0OlswLC42OTQ0NCwwLDAsLjc5NDQ1XSw5MzY6WzAsLjY5NDQ0LDAsMCwuODU1NTZdLDkzNzpbMCwuNjk0NDQsMCwwLC43OTQ0NV0sODIxMTpbMCwuNDU4MzMsLjAzMDU2LDAsLjU1XSw4MjEyOlswLC40NTgzMywuMDMwNTYsMCwxLjEwMDAxXSw4MjE2OlswLC42OTQ0NCwwLDAsLjMwNTU2XSw4MjE3OlswLC42OTQ0NCwwLDAsLjMwNTU2XSw4MjIwOlswLC42OTQ0NCwwLDAsLjU1ODM0XSw4MjIxOlswLC42OTQ0NCwwLDAsLjU1ODM0XX0sIlNhbnNTZXJpZi1JdGFsaWMiOnszMjpbMCwwLDAsMCwuMjVdLDMzOlswLC42OTQ0NCwuMDU3MzMsMCwuMzE5NDVdLDM0OlswLC42OTQ0NCwuMDAzMTYsMCwuNV0sMzU6Wy4xOTQ0NCwuNjk0NDQsLjA1MDg3LDAsLjgzMzM0XSwzNjpbLjA1NTU2LC43NSwuMTExNTYsMCwuNV0sMzc6Wy4wNTU1NiwuNzUsLjAzMTI2LDAsLjgzMzM0XSwzODpbMCwuNjk0NDQsLjAzMDU4LDAsLjc1ODM0XSwzOTpbMCwuNjk0NDQsLjA3ODE2LDAsLjI3Nzc4XSw0MDpbLjI1LC43NSwuMTMxNjQsMCwuMzg4ODldLDQxOlsuMjUsLjc1LC4wMjUzNiwwLC4zODg4OV0sNDI6WzAsLjc1LC4xMTc3NSwwLC41XSw0MzpbLjA4MzMzLC41ODMzMywuMDI1MzYsMCwuNzc3NzhdLDQ0OlsuMTI1LC4wODMzMywwLDAsLjI3Nzc4XSw0NTpbMCwuNDQ0NDQsLjAxOTQ2LDAsLjMzMzMzXSw0NjpbMCwuMDgzMzMsMCwwLC4yNzc3OF0sNDc6Wy4yNSwuNzUsLjEzMTY0LDAsLjVdLDQ4OlswLC42NTU1NiwuMTExNTYsMCwuNV0sNDk6WzAsLjY1NTU2LC4xMTE1NiwwLC41XSw1MDpbMCwuNjU1NTYsLjExMTU2LDAsLjVdLDUxOlswLC42NTU1NiwuMTExNTYsMCwuNV0sNTI6WzAsLjY1NTU2LC4xMTE1NiwwLC41XSw1MzpbMCwuNjU1NTYsLjExMTU2LDAsLjVdLDU0OlswLC42NTU1NiwuMTExNTYsMCwuNV0sNTU6WzAsLjY1NTU2LC4xMTE1NiwwLC41XSw1NjpbMCwuNjU1NTYsLjExMTU2LDAsLjVdLDU3OlswLC42NTU1NiwuMTExNTYsMCwuNV0sNTg6WzAsLjQ0NDQ0LC4wMjUwMiwwLC4yNzc3OF0sNTk6Wy4xMjUsLjQ0NDQ0LC4wMjUwMiwwLC4yNzc3OF0sNjE6Wy0uMTMsLjM3LC4wNTA4NywwLC43Nzc3OF0sNjM6WzAsLjY5NDQ0LC4xMTgwOSwwLC40NzIyMl0sNjQ6WzAsLjY5NDQ0LC4wNzU1NSwwLC42NjY2N10sNjU6WzAsLjY5NDQ0LDAsMCwuNjY2NjddLDY2OlswLC42OTQ0NCwuMDgyOTMsMCwuNjY2NjddLDY3OlswLC42OTQ0NCwuMTE5ODMsMCwuNjM4ODldLDY4OlswLC42OTQ0NCwuMDc1NTUsMCwuNzIyMjNdLDY5OlswLC42OTQ0NCwuMTE5ODMsMCwuNTk3MjJdLDcwOlswLC42OTQ0NCwuMTMzNzIsMCwuNTY5NDVdLDcxOlswLC42OTQ0NCwuMTE5ODMsMCwuNjY2NjddLDcyOlswLC42OTQ0NCwuMDgwOTQsMCwuNzA4MzRdLDczOlswLC42OTQ0NCwuMTMzNzIsMCwuMjc3NzhdLDc0OlswLC42OTQ0NCwuMDgwOTQsMCwuNDcyMjJdLDc1OlswLC42OTQ0NCwuMTE5ODMsMCwuNjk0NDVdLDc2OlswLC42OTQ0NCwwLDAsLjU0MTY3XSw3NzpbMCwuNjk0NDQsLjA4MDk0LDAsLjg3NV0sNzg6WzAsLjY5NDQ0LC4wODA5NCwwLC43MDgzNF0sNzk6WzAsLjY5NDQ0LC4wNzU1NSwwLC43MzYxMV0sODA6WzAsLjY5NDQ0LC4wODI5MywwLC42Mzg4OV0sODE6Wy4xMjUsLjY5NDQ0LC4wNzU1NSwwLC43MzYxMV0sODI6WzAsLjY5NDQ0LC4wODI5MywwLC42NDU4NF0sODM6WzAsLjY5NDQ0LC4wOTIwNSwwLC41NTU1Nl0sODQ6WzAsLjY5NDQ0LC4xMzM3MiwwLC42ODA1Nl0sODU6WzAsLjY5NDQ0LC4wODA5NCwwLC42ODc1XSw4NjpbMCwuNjk0NDQsLjE2MTUsMCwuNjY2NjddLDg3OlswLC42OTQ0NCwuMTYxNSwwLC45NDQ0NV0sODg6WzAsLjY5NDQ0LC4xMzM3MiwwLC42NjY2N10sODk6WzAsLjY5NDQ0LC4xNzI2MSwwLC42NjY2N10sOTA6WzAsLjY5NDQ0LC4xMTk4MywwLC42MTExMV0sOTE6Wy4yNSwuNzUsLjE1OTQyLDAsLjI4ODg5XSw5MzpbLjI1LC43NSwuMDg3MTksMCwuMjg4ODldLDk0OlswLC42OTQ0NCwuMDc5OSwwLC41XSw5NTpbLjM1LC4wOTQ0NCwuMDg2MTYsMCwuNV0sOTc6WzAsLjQ0NDQ0LC4wMDk4MSwwLC40ODA1Nl0sOTg6WzAsLjY5NDQ0LC4wMzA1NywwLC41MTY2N10sOTk6WzAsLjQ0NDQ0LC4wODMzNiwwLC40NDQ0NV0sMTAwOlswLC42OTQ0NCwuMDk0ODMsMCwuNTE2NjddLDEwMTpbMCwuNDQ0NDQsLjA2Nzc4LDAsLjQ0NDQ1XSwxMDI6WzAsLjY5NDQ0LC4yMTcwNSwwLC4zMDU1Nl0sMTAzOlsuMTk0NDQsLjQ0NDQ0LC4xMDgzNiwwLC41XSwxMDQ6WzAsLjY5NDQ0LC4wMTc3OCwwLC41MTY2N10sMTA1OlswLC42NzkzNywuMDk3MTgsMCwuMjM4ODldLDEwNjpbLjE5NDQ0LC42NzkzNywuMDkxNjIsMCwuMjY2NjddLDEwNzpbMCwuNjk0NDQsLjA4MzM2LDAsLjQ4ODg5XSwxMDg6WzAsLjY5NDQ0LC4wOTQ4MywwLC4yMzg4OV0sMTA5OlswLC40NDQ0NCwuMDE3NzgsMCwuNzk0NDVdLDExMDpbMCwuNDQ0NDQsLjAxNzc4LDAsLjUxNjY3XSwxMTE6WzAsLjQ0NDQ0LC4wNjYxMywwLC41XSwxMTI6Wy4xOTQ0NCwuNDQ0NDQsLjAzODksMCwuNTE2NjddLDExMzpbLjE5NDQ0LC40NDQ0NCwuMDQxNjksMCwuNTE2NjddLDExNDpbMCwuNDQ0NDQsLjEwODM2LDAsLjM0MTY3XSwxMTU6WzAsLjQ0NDQ0LC4wNzc4LDAsLjM4MzMzXSwxMTY6WzAsLjU3MTQzLC4wNzIyNSwwLC4zNjExMV0sMTE3OlswLC40NDQ0NCwuMDQxNjksMCwuNTE2NjddLDExODpbMCwuNDQ0NDQsLjEwODM2LDAsLjQ2MTExXSwxMTk6WzAsLjQ0NDQ0LC4xMDgzNiwwLC42ODMzNF0sMTIwOlswLC40NDQ0NCwuMDkxNjksMCwuNDYxMTFdLDEyMTpbLjE5NDQ0LC40NDQ0NCwuMTA4MzYsMCwuNDYxMTFdLDEyMjpbMCwuNDQ0NDQsLjA4NzUyLDAsLjQzNDcyXSwxMjY6Wy4zNSwuMzI2NTksLjA4ODI2LDAsLjVdLDE2MDpbMCwwLDAsMCwuMjVdLDE2ODpbMCwuNjc5MzcsLjA2Mzg1LDAsLjVdLDE3NjpbMCwuNjk0NDQsMCwwLC43Mzc1Ml0sMTg0OlsuMTcwMTQsMCwwLDAsLjQ0NDQ1XSwzMDU6WzAsLjQ0NDQ0LC4wNDE2OSwwLC4yMzg4OV0sNTY3OlsuMTk0NDQsLjQ0NDQ0LC4wNDE2OSwwLC4yNjY2N10sNzEwOlswLC42OTQ0NCwuMDc5OSwwLC41XSw3MTE6WzAsLjYzMTk0LC4wODQzMiwwLC41XSw3MTM6WzAsLjYwODg5LC4wODc3NiwwLC41XSw3MTQ6WzAsLjY5NDQ0LC4wOTIwNSwwLC41XSw3MTU6WzAsLjY5NDQ0LDAsMCwuNV0sNzI4OlswLC42OTQ0NCwuMDk0ODMsMCwuNV0sNzI5OlswLC42NzkzNywuMDc3NzQsMCwuMjc3NzhdLDczMDpbMCwuNjk0NDQsMCwwLC43Mzc1Ml0sNzMyOlswLC42NzY1OSwuMDg4MjYsMCwuNV0sNzMzOlswLC42OTQ0NCwuMDkyMDUsMCwuNV0sOTE1OlswLC42OTQ0NCwuMTMzNzIsMCwuNTQxNjddLDkxNjpbMCwuNjk0NDQsMCwwLC44MzMzNF0sOTIwOlswLC42OTQ0NCwuMDc1NTUsMCwuNzc3NzhdLDkyMzpbMCwuNjk0NDQsMCwwLC42MTExMV0sOTI2OlswLC42OTQ0NCwuMTI4MTYsMCwuNjY2NjddLDkyODpbMCwuNjk0NDQsLjA4MDk0LDAsLjcwODM0XSw5MzE6WzAsLjY5NDQ0LC4xMTk4MywwLC43MjIyMl0sOTMzOlswLC42OTQ0NCwuMDkwMzEsMCwuNzc3NzhdLDkzNDpbMCwuNjk0NDQsLjA0NjAzLDAsLjcyMjIyXSw5MzY6WzAsLjY5NDQ0LC4wOTAzMSwwLC43Nzc3OF0sOTM3OlswLC42OTQ0NCwuMDgyOTMsMCwuNzIyMjJdLDgyMTE6WzAsLjQ0NDQ0LC4wODYxNiwwLC41XSw4MjEyOlswLC40NDQ0NCwuMDg2MTYsMCwxXSw4MjE2OlswLC42OTQ0NCwuMDc4MTYsMCwuMjc3NzhdLDgyMTc6WzAsLjY5NDQ0LC4wNzgxNiwwLC4yNzc3OF0sODIyMDpbMCwuNjk0NDQsLjE0MjA1LDAsLjVdLDgyMjE6WzAsLjY5NDQ0LC4wMDMxNiwwLC41XX0sIlNhbnNTZXJpZi1SZWd1bGFyIjp7MzI6WzAsMCwwLDAsLjI1XSwzMzpbMCwuNjk0NDQsMCwwLC4zMTk0NV0sMzQ6WzAsLjY5NDQ0LDAsMCwuNV0sMzU6Wy4xOTQ0NCwuNjk0NDQsMCwwLC44MzMzNF0sMzY6Wy4wNTU1NiwuNzUsMCwwLC41XSwzNzpbLjA1NTU2LC43NSwwLDAsLjgzMzM0XSwzODpbMCwuNjk0NDQsMCwwLC43NTgzNF0sMzk6WzAsLjY5NDQ0LDAsMCwuMjc3NzhdLDQwOlsuMjUsLjc1LDAsMCwuMzg4ODldLDQxOlsuMjUsLjc1LDAsMCwuMzg4ODldLDQyOlswLC43NSwwLDAsLjVdLDQzOlsuMDgzMzMsLjU4MzMzLDAsMCwuNzc3NzhdLDQ0OlsuMTI1LC4wODMzMywwLDAsLjI3Nzc4XSw0NTpbMCwuNDQ0NDQsMCwwLC4zMzMzM10sNDY6WzAsLjA4MzMzLDAsMCwuMjc3NzhdLDQ3OlsuMjUsLjc1LDAsMCwuNV0sNDg6WzAsLjY1NTU2LDAsMCwuNV0sNDk6WzAsLjY1NTU2LDAsMCwuNV0sNTA6WzAsLjY1NTU2LDAsMCwuNV0sNTE6WzAsLjY1NTU2LDAsMCwuNV0sNTI6WzAsLjY1NTU2LDAsMCwuNV0sNTM6WzAsLjY1NTU2LDAsMCwuNV0sNTQ6WzAsLjY1NTU2LDAsMCwuNV0sNTU6WzAsLjY1NTU2LDAsMCwuNV0sNTY6WzAsLjY1NTU2LDAsMCwuNV0sNTc6WzAsLjY1NTU2LDAsMCwuNV0sNTg6WzAsLjQ0NDQ0LDAsMCwuMjc3NzhdLDU5OlsuMTI1LC40NDQ0NCwwLDAsLjI3Nzc4XSw2MTpbLS4xMywuMzcsMCwwLC43Nzc3OF0sNjM6WzAsLjY5NDQ0LDAsMCwuNDcyMjJdLDY0OlswLC42OTQ0NCwwLDAsLjY2NjY3XSw2NTpbMCwuNjk0NDQsMCwwLC42NjY2N10sNjY6WzAsLjY5NDQ0LDAsMCwuNjY2NjddLDY3OlswLC42OTQ0NCwwLDAsLjYzODg5XSw2ODpbMCwuNjk0NDQsMCwwLC43MjIyM10sNjk6WzAsLjY5NDQ0LDAsMCwuNTk3MjJdLDcwOlswLC42OTQ0NCwwLDAsLjU2OTQ1XSw3MTpbMCwuNjk0NDQsMCwwLC42NjY2N10sNzI6WzAsLjY5NDQ0LDAsMCwuNzA4MzRdLDczOlswLC42OTQ0NCwwLDAsLjI3Nzc4XSw3NDpbMCwuNjk0NDQsMCwwLC40NzIyMl0sNzU6WzAsLjY5NDQ0LDAsMCwuNjk0NDVdLDc2OlswLC42OTQ0NCwwLDAsLjU0MTY3XSw3NzpbMCwuNjk0NDQsMCwwLC44NzVdLDc4OlswLC42OTQ0NCwwLDAsLjcwODM0XSw3OTpbMCwuNjk0NDQsMCwwLC43MzYxMV0sODA6WzAsLjY5NDQ0LDAsMCwuNjM4ODldLDgxOlsuMTI1LC42OTQ0NCwwLDAsLjczNjExXSw4MjpbMCwuNjk0NDQsMCwwLC42NDU4NF0sODM6WzAsLjY5NDQ0LDAsMCwuNTU1NTZdLDg0OlswLC42OTQ0NCwwLDAsLjY4MDU2XSw4NTpbMCwuNjk0NDQsMCwwLC42ODc1XSw4NjpbMCwuNjk0NDQsLjAxMzg5LDAsLjY2NjY3XSw4NzpbMCwuNjk0NDQsLjAxMzg5LDAsLjk0NDQ1XSw4ODpbMCwuNjk0NDQsMCwwLC42NjY2N10sODk6WzAsLjY5NDQ0LC4wMjUsMCwuNjY2NjddLDkwOlswLC42OTQ0NCwwLDAsLjYxMTExXSw5MTpbLjI1LC43NSwwLDAsLjI4ODg5XSw5MzpbLjI1LC43NSwwLDAsLjI4ODg5XSw5NDpbMCwuNjk0NDQsMCwwLC41XSw5NTpbLjM1LC4wOTQ0NCwuMDI3NzgsMCwuNV0sOTc6WzAsLjQ0NDQ0LDAsMCwuNDgwNTZdLDk4OlswLC42OTQ0NCwwLDAsLjUxNjY3XSw5OTpbMCwuNDQ0NDQsMCwwLC40NDQ0NV0sMTAwOlswLC42OTQ0NCwwLDAsLjUxNjY3XSwxMDE6WzAsLjQ0NDQ0LDAsMCwuNDQ0NDVdLDEwMjpbMCwuNjk0NDQsLjA2OTQ0LDAsLjMwNTU2XSwxMDM6Wy4xOTQ0NCwuNDQ0NDQsLjAxMzg5LDAsLjVdLDEwNDpbMCwuNjk0NDQsMCwwLC41MTY2N10sMTA1OlswLC42NzkzNywwLDAsLjIzODg5XSwxMDY6Wy4xOTQ0NCwuNjc5MzcsMCwwLC4yNjY2N10sMTA3OlswLC42OTQ0NCwwLDAsLjQ4ODg5XSwxMDg6WzAsLjY5NDQ0LDAsMCwuMjM4ODldLDEwOTpbMCwuNDQ0NDQsMCwwLC43OTQ0NV0sMTEwOlswLC40NDQ0NCwwLDAsLjUxNjY3XSwxMTE6WzAsLjQ0NDQ0LDAsMCwuNV0sMTEyOlsuMTk0NDQsLjQ0NDQ0LDAsMCwuNTE2NjddLDExMzpbLjE5NDQ0LC40NDQ0NCwwLDAsLjUxNjY3XSwxMTQ6WzAsLjQ0NDQ0LC4wMTM4OSwwLC4zNDE2N10sMTE1OlswLC40NDQ0NCwwLDAsLjM4MzMzXSwxMTY6WzAsLjU3MTQzLDAsMCwuMzYxMTFdLDExNzpbMCwuNDQ0NDQsMCwwLC41MTY2N10sMTE4OlswLC40NDQ0NCwuMDEzODksMCwuNDYxMTFdLDExOTpbMCwuNDQ0NDQsLjAxMzg5LDAsLjY4MzM0XSwxMjA6WzAsLjQ0NDQ0LDAsMCwuNDYxMTFdLDEyMTpbLjE5NDQ0LC40NDQ0NCwuMDEzODksMCwuNDYxMTFdLDEyMjpbMCwuNDQ0NDQsMCwwLC40MzQ3Ml0sMTI2OlsuMzUsLjMyNjU5LDAsMCwuNV0sMTYwOlswLDAsMCwwLC4yNV0sMTY4OlswLC42NzkzNywwLDAsLjVdLDE3NjpbMCwuNjk0NDQsMCwwLC42NjY2N10sMTg0OlsuMTcwMTQsMCwwLDAsLjQ0NDQ1XSwzMDU6WzAsLjQ0NDQ0LDAsMCwuMjM4ODldLDU2NzpbLjE5NDQ0LC40NDQ0NCwwLDAsLjI2NjY3XSw3MTA6WzAsLjY5NDQ0LDAsMCwuNV0sNzExOlswLC42MzE5NCwwLDAsLjVdLDcxMzpbMCwuNjA4ODksMCwwLC41XSw3MTQ6WzAsLjY5NDQ0LDAsMCwuNV0sNzE1OlswLC42OTQ0NCwwLDAsLjVdLDcyODpbMCwuNjk0NDQsMCwwLC41XSw3Mjk6WzAsLjY3OTM3LDAsMCwuMjc3NzhdLDczMDpbMCwuNjk0NDQsMCwwLC42NjY2N10sNzMyOlswLC42NzY1OSwwLDAsLjVdLDczMzpbMCwuNjk0NDQsMCwwLC41XSw5MTU6WzAsLjY5NDQ0LDAsMCwuNTQxNjddLDkxNjpbMCwuNjk0NDQsMCwwLC44MzMzNF0sOTIwOlswLC42OTQ0NCwwLDAsLjc3Nzc4XSw5MjM6WzAsLjY5NDQ0LDAsMCwuNjExMTFdLDkyNjpbMCwuNjk0NDQsMCwwLC42NjY2N10sOTI4OlswLC42OTQ0NCwwLDAsLjcwODM0XSw5MzE6WzAsLjY5NDQ0LDAsMCwuNzIyMjJdLDkzMzpbMCwuNjk0NDQsMCwwLC43Nzc3OF0sOTM0OlswLC42OTQ0NCwwLDAsLjcyMjIyXSw5MzY6WzAsLjY5NDQ0LDAsMCwuNzc3NzhdLDkzNzpbMCwuNjk0NDQsMCwwLC43MjIyMl0sODIxMTpbMCwuNDQ0NDQsLjAyNzc4LDAsLjVdLDgyMTI6WzAsLjQ0NDQ0LC4wMjc3OCwwLDFdLDgyMTY6WzAsLjY5NDQ0LDAsMCwuMjc3NzhdLDgyMTc6WzAsLjY5NDQ0LDAsMCwuMjc3NzhdLDgyMjA6WzAsLjY5NDQ0LDAsMCwuNV0sODIyMTpbMCwuNjk0NDQsMCwwLC41XX0sIlNjcmlwdC1SZWd1bGFyIjp7MzI6WzAsMCwwLDAsLjI1XSw2NTpbMCwuNywuMjI5MjUsMCwuODAyNTNdLDY2OlswLC43LC4wNDA4NywwLC45MDc1N10sNjc6WzAsLjcsLjE2ODksMCwuNjY2MTldLDY4OlswLC43LC4wOTM3MSwwLC43NzQ0M10sNjk6WzAsLjcsLjE4NTgzLDAsLjU2MTYyXSw3MDpbMCwuNywuMTM2MzQsMCwuODk1NDRdLDcxOlswLC43LC4xNzMyMiwwLC42MDk2MV0sNzI6WzAsLjcsLjI5Njk0LDAsLjk2OTE5XSw3MzpbMCwuNywuMTkxODksMCwuODA5MDddLDc0OlsuMjc3NzgsLjcsLjE5MTg5LDAsMS4wNTE1OV0sNzU6WzAsLjcsLjMxMjU5LDAsLjkxMzY0XSw3NjpbMCwuNywuMTkxODksMCwuODczNzNdLDc3OlswLC43LC4xNTk4MSwwLDEuMDgwMzFdLDc4OlswLC43LC4zNTI1LDAsLjkwMTVdLDc5OlswLC43LC4wODA3OCwwLC43Mzc4N10sODA6WzAsLjcsLjA4MDc4LDAsMS4wMTI2Ml0sODE6WzAsLjcsLjAzMzA1LDAsLjg4MjgyXSw4MjpbMCwuNywuMDYyNTksMCwuODVdLDgzOlswLC43LC4xOTE4OSwwLC44Njc2N10sODQ6WzAsLjcsLjI5MDg3LDAsLjc0Njk3XSw4NTpbMCwuNywuMjU4MTUsMCwuNzk5OTZdLDg2OlswLC43LC4yNzUyMywwLC42MjIwNF0sODc6WzAsLjcsLjI3NTIzLDAsLjgwNTMyXSw4ODpbMCwuNywuMjYwMDYsMCwuOTQ0NDVdLDg5OlswLC43LC4yOTM5LDAsLjcwOTYxXSw5MDpbMCwuNywuMjQwMzcsMCwuODIxMl0sMTYwOlswLDAsMCwwLC4yNV19LCJTaXplMS1SZWd1bGFyIjp7MzI6WzAsMCwwLDAsLjI1XSw0MDpbLjM1MDAxLC44NSwwLDAsLjQ1ODM0XSw0MTpbLjM1MDAxLC44NSwwLDAsLjQ1ODM0XSw0NzpbLjM1MDAxLC44NSwwLDAsLjU3Nzc4XSw5MTpbLjM1MDAxLC44NSwwLDAsLjQxNjY3XSw5MjpbLjM1MDAxLC44NSwwLDAsLjU3Nzc4XSw5MzpbLjM1MDAxLC44NSwwLDAsLjQxNjY3XSwxMjM6Wy4zNTAwMSwuODUsMCwwLC41ODMzNF0sMTI1OlsuMzUwMDEsLjg1LDAsMCwuNTgzMzRdLDE2MDpbMCwwLDAsMCwuMjVdLDcxMDpbMCwuNzIyMjIsMCwwLC41NTU1Nl0sNzMyOlswLC43MjIyMiwwLDAsLjU1NTU2XSw3NzA6WzAsLjcyMjIyLDAsMCwuNTU1NTZdLDc3MTpbMCwuNzIyMjIsMCwwLC41NTU1Nl0sODIxNDpbLTk5ZS01LC42MDEsMCwwLC43Nzc3OF0sODU5MzpbMWUtNSwuNiwwLDAsLjY2NjY3XSw4NTk1OlsxZS01LC42LDAsMCwuNjY2NjddLDg2NTc6WzFlLTUsLjYsMCwwLC43Nzc3OF0sODY1OTpbMWUtNSwuNiwwLDAsLjc3Nzc4XSw4NzE5OlsuMjUwMDEsLjc1LDAsMCwuOTQ0NDVdLDg3MjA6Wy4yNTAwMSwuNzUsMCwwLC45NDQ0NV0sODcyMTpbLjI1MDAxLC43NSwwLDAsMS4wNTU1Nl0sODczMDpbLjM1MDAxLC44NSwwLDAsMV0sODczOTpbLS4wMDU5OSwuNjA2LDAsMCwuMzMzMzNdLDg3NDE6Wy0uMDA1OTksLjYwNiwwLDAsLjU1NTU2XSw4NzQ3OlsuMzA2MTIsLjgwNSwuMTk0NDUsMCwuNDcyMjJdLDg3NDg6Wy4zMDYsLjgwNSwuMTk0NDUsMCwuNDcyMjJdLDg3NDk6Wy4zMDYsLjgwNSwuMTk0NDUsMCwuNDcyMjJdLDg3NTA6Wy4zMDYxMiwuODA1LC4xOTQ0NSwwLC40NzIyMl0sODg5NjpbLjI1MDAxLC43NSwwLDAsLjgzMzM0XSw4ODk3OlsuMjUwMDEsLjc1LDAsMCwuODMzMzRdLDg4OTg6Wy4yNTAwMSwuNzUsMCwwLC44MzMzNF0sODg5OTpbLjI1MDAxLC43NSwwLDAsLjgzMzM0XSw4OTY4OlsuMzUwMDEsLjg1LDAsMCwuNDcyMjJdLDg5Njk6Wy4zNTAwMSwuODUsMCwwLC40NzIyMl0sODk3MDpbLjM1MDAxLC44NSwwLDAsLjQ3MjIyXSw4OTcxOlsuMzUwMDEsLjg1LDAsMCwuNDcyMjJdLDkxNjg6Wy05OWUtNSwuNjAxLDAsMCwuNjY2NjddLDEwMjE2OlsuMzUwMDEsLjg1LDAsMCwuNDcyMjJdLDEwMjE3OlsuMzUwMDEsLjg1LDAsMCwuNDcyMjJdLDEwNzUyOlsuMjUwMDEsLjc1LDAsMCwxLjExMTExXSwxMDc1MzpbLjI1MDAxLC43NSwwLDAsMS4xMTExMV0sMTA3NTQ6Wy4yNTAwMSwuNzUsMCwwLDEuMTExMTFdLDEwNzU2OlsuMjUwMDEsLjc1LDAsMCwuODMzMzRdLDEwNzU4OlsuMjUwMDEsLjc1LDAsMCwuODMzMzRdfSwiU2l6ZTItUmVndWxhciI6ezMyOlswLDAsMCwwLC4yNV0sNDA6Wy42NTAwMiwxLjE1LDAsMCwuNTk3MjJdLDQxOlsuNjUwMDIsMS4xNSwwLDAsLjU5NzIyXSw0NzpbLjY1MDAyLDEuMTUsMCwwLC44MTExMV0sOTE6Wy42NTAwMiwxLjE1LDAsMCwuNDcyMjJdLDkyOlsuNjUwMDIsMS4xNSwwLDAsLjgxMTExXSw5MzpbLjY1MDAyLDEuMTUsMCwwLC40NzIyMl0sMTIzOlsuNjUwMDIsMS4xNSwwLDAsLjY2NjY3XSwxMjU6Wy42NTAwMiwxLjE1LDAsMCwuNjY2NjddLDE2MDpbMCwwLDAsMCwuMjVdLDcxMDpbMCwuNzUsMCwwLDFdLDczMjpbMCwuNzUsMCwwLDFdLDc3MDpbMCwuNzUsMCwwLDFdLDc3MTpbMCwuNzUsMCwwLDFdLDg3MTk6Wy41NTAwMSwxLjA1LDAsMCwxLjI3Nzc4XSw4NzIwOlsuNTUwMDEsMS4wNSwwLDAsMS4yNzc3OF0sODcyMTpbLjU1MDAxLDEuMDUsMCwwLDEuNDQ0NDVdLDg3MzA6Wy42NTAwMiwxLjE1LDAsMCwxXSw4NzQ3OlsuODYyMjUsMS4zNiwuNDQ0NDUsMCwuNTU1NTZdLDg3NDg6Wy44NjIsMS4zNiwuNDQ0NDUsMCwuNTU1NTZdLDg3NDk6Wy44NjIsMS4zNiwuNDQ0NDUsMCwuNTU1NTZdLDg3NTA6Wy44NjIyNSwxLjM2LC40NDQ0NSwwLC41NTU1Nl0sODg5NjpbLjU1MDAxLDEuMDUsMCwwLDEuMTExMTFdLDg4OTc6Wy41NTAwMSwxLjA1LDAsMCwxLjExMTExXSw4ODk4OlsuNTUwMDEsMS4wNSwwLDAsMS4xMTExMV0sODg5OTpbLjU1MDAxLDEuMDUsMCwwLDEuMTExMTFdLDg5Njg6Wy42NTAwMiwxLjE1LDAsMCwuNTI3NzhdLDg5Njk6Wy42NTAwMiwxLjE1LDAsMCwuNTI3NzhdLDg5NzA6Wy42NTAwMiwxLjE1LDAsMCwuNTI3NzhdLDg5NzE6Wy42NTAwMiwxLjE1LDAsMCwuNTI3NzhdLDEwMjE2OlsuNjUwMDIsMS4xNSwwLDAsLjYxMTExXSwxMDIxNzpbLjY1MDAyLDEuMTUsMCwwLC42MTExMV0sMTA3NTI6Wy41NTAwMSwxLjA1LDAsMCwxLjUxMTEyXSwxMDc1MzpbLjU1MDAxLDEuMDUsMCwwLDEuNTExMTJdLDEwNzU0OlsuNTUwMDEsMS4wNSwwLDAsMS41MTExMl0sMTA3NTY6Wy41NTAwMSwxLjA1LDAsMCwxLjExMTExXSwxMDc1ODpbLjU1MDAxLDEuMDUsMCwwLDEuMTExMTFdfSwiU2l6ZTMtUmVndWxhciI6ezMyOlswLDAsMCwwLC4yNV0sNDA6Wy45NTAwMywxLjQ1LDAsMCwuNzM2MTFdLDQxOlsuOTUwMDMsMS40NSwwLDAsLjczNjExXSw0NzpbLjk1MDAzLDEuNDUsMCwwLDEuMDQ0NDVdLDkxOlsuOTUwMDMsMS40NSwwLDAsLjUyNzc4XSw5MjpbLjk1MDAzLDEuNDUsMCwwLDEuMDQ0NDVdLDkzOlsuOTUwMDMsMS40NSwwLDAsLjUyNzc4XSwxMjM6Wy45NTAwMywxLjQ1LDAsMCwuNzVdLDEyNTpbLjk1MDAzLDEuNDUsMCwwLC43NV0sMTYwOlswLDAsMCwwLC4yNV0sNzEwOlswLC43NSwwLDAsMS40NDQ0NV0sNzMyOlswLC43NSwwLDAsMS40NDQ0NV0sNzcwOlswLC43NSwwLDAsMS40NDQ0NV0sNzcxOlswLC43NSwwLDAsMS40NDQ0NV0sODczMDpbLjk1MDAzLDEuNDUsMCwwLDFdLDg5Njg6Wy45NTAwMywxLjQ1LDAsMCwuNTgzMzRdLDg5Njk6Wy45NTAwMywxLjQ1LDAsMCwuNTgzMzRdLDg5NzA6Wy45NTAwMywxLjQ1LDAsMCwuNTgzMzRdLDg5NzE6Wy45NTAwMywxLjQ1LDAsMCwuNTgzMzRdLDEwMjE2OlsuOTUwMDMsMS40NSwwLDAsLjc1XSwxMDIxNzpbLjk1MDAzLDEuNDUsMCwwLC43NV19LCJTaXplNC1SZWd1bGFyIjp7MzI6WzAsMCwwLDAsLjI1XSw0MDpbMS4yNTAwMywxLjc1LDAsMCwuNzkxNjddLDQxOlsxLjI1MDAzLDEuNzUsMCwwLC43OTE2N10sNDc6WzEuMjUwMDMsMS43NSwwLDAsMS4yNzc3OF0sOTE6WzEuMjUwMDMsMS43NSwwLDAsLjU4MzM0XSw5MjpbMS4yNTAwMywxLjc1LDAsMCwxLjI3Nzc4XSw5MzpbMS4yNTAwMywxLjc1LDAsMCwuNTgzMzRdLDEyMzpbMS4yNTAwMywxLjc1LDAsMCwuODA1NTZdLDEyNTpbMS4yNTAwMywxLjc1LDAsMCwuODA1NTZdLDE2MDpbMCwwLDAsMCwuMjVdLDcxMDpbMCwuODI1LDAsMCwxLjg4ODldLDczMjpbMCwuODI1LDAsMCwxLjg4ODldLDc3MDpbMCwuODI1LDAsMCwxLjg4ODldLDc3MTpbMCwuODI1LDAsMCwxLjg4ODldLDg3MzA6WzEuMjUwMDMsMS43NSwwLDAsMV0sODk2ODpbMS4yNTAwMywxLjc1LDAsMCwuNjM4ODldLDg5Njk6WzEuMjUwMDMsMS43NSwwLDAsLjYzODg5XSw4OTcwOlsxLjI1MDAzLDEuNzUsMCwwLC42Mzg4OV0sODk3MTpbMS4yNTAwMywxLjc1LDAsMCwuNjM4ODldLDkxMTU6Wy42NDUwMiwxLjE1NSwwLDAsLjg3NV0sOTExNjpbMWUtNSwuNiwwLDAsLjg3NV0sOTExNzpbLjY0NTAyLDEuMTU1LDAsMCwuODc1XSw5MTE4OlsuNjQ1MDIsMS4xNTUsMCwwLC44NzVdLDkxMTk6WzFlLTUsLjYsMCwwLC44NzVdLDkxMjA6Wy42NDUwMiwxLjE1NSwwLDAsLjg3NV0sOTEyMTpbLjY0NTAyLDEuMTU1LDAsMCwuNjY2NjddLDkxMjI6Wy05OWUtNSwuNjAxLDAsMCwuNjY2NjddLDkxMjM6Wy42NDUwMiwxLjE1NSwwLDAsLjY2NjY3XSw5MTI0OlsuNjQ1MDIsMS4xNTUsMCwwLC42NjY2N10sOTEyNTpbLTk5ZS01LC42MDEsMCwwLC42NjY2N10sOTEyNjpbLjY0NTAyLDEuMTU1LDAsMCwuNjY2NjddLDkxMjc6WzFlLTUsLjksMCwwLC44ODg4OV0sOTEyODpbLjY1MDAyLDEuMTUsMCwwLC44ODg4OV0sOTEyOTpbLjkwMDAxLDAsMCwwLC44ODg4OV0sOTEzMDpbMCwuMywwLDAsLjg4ODg5XSw5MTMxOlsxZS01LC45LDAsMCwuODg4ODldLDkxMzI6Wy42NTAwMiwxLjE1LDAsMCwuODg4ODldLDkxMzM6Wy45MDAwMSwwLDAsMCwuODg4ODldLDkxNDM6Wy44ODUwMiwuOTE1LDAsMCwxLjA1NTU2XSwxMDIxNjpbMS4yNTAwMywxLjc1LDAsMCwuODA1NTZdLDEwMjE3OlsxLjI1MDAzLDEuNzUsMCwwLC44MDU1Nl0sNTczNDQ6Wy0uMDA0OTksLjYwNSwwLDAsMS4wNTU1Nl0sNTczNDU6Wy0uMDA0OTksLjYwNSwwLDAsMS4wNTU1Nl0sNTc2ODA6WzAsLjEyLDAsMCwuNDVdLDU3NjgxOlswLC4xMiwwLDAsLjQ1XSw1NzY4MjpbMCwuMTIsMCwwLC40NV0sNTc2ODM6WzAsLjEyLDAsMCwuNDVdfSwiVHlwZXdyaXRlci1SZWd1bGFyIjp7MzI6WzAsMCwwLDAsLjUyNV0sMzM6WzAsLjYxMTExLDAsMCwuNTI1XSwzNDpbMCwuNjExMTEsMCwwLC41MjVdLDM1OlswLC42MTExMSwwLDAsLjUyNV0sMzY6Wy4wODMzMywuNjk0NDQsMCwwLC41MjVdLDM3OlsuMDgzMzMsLjY5NDQ0LDAsMCwuNTI1XSwzODpbMCwuNjExMTEsMCwwLC41MjVdLDM5OlswLC42MTExMSwwLDAsLjUyNV0sNDA6Wy4wODMzMywuNjk0NDQsMCwwLC41MjVdLDQxOlsuMDgzMzMsLjY5NDQ0LDAsMCwuNTI1XSw0MjpbMCwuNTIwODMsMCwwLC41MjVdLDQzOlstLjA4MDU2LC41MzA1NSwwLDAsLjUyNV0sNDQ6Wy4xMzg4OSwuMTI1LDAsMCwuNTI1XSw0NTpbLS4wODA1NiwuNTMwNTUsMCwwLC41MjVdLDQ2OlswLC4xMjUsMCwwLC41MjVdLDQ3OlsuMDgzMzMsLjY5NDQ0LDAsMCwuNTI1XSw0ODpbMCwuNjExMTEsMCwwLC41MjVdLDQ5OlswLC42MTExMSwwLDAsLjUyNV0sNTA6WzAsLjYxMTExLDAsMCwuNTI1XSw1MTpbMCwuNjExMTEsMCwwLC41MjVdLDUyOlswLC42MTExMSwwLDAsLjUyNV0sNTM6WzAsLjYxMTExLDAsMCwuNTI1XSw1NDpbMCwuNjExMTEsMCwwLC41MjVdLDU1OlswLC42MTExMSwwLDAsLjUyNV0sNTY6WzAsLjYxMTExLDAsMCwuNTI1XSw1NzpbMCwuNjExMTEsMCwwLC41MjVdLDU4OlswLC40MzA1NiwwLDAsLjUyNV0sNTk6Wy4xMzg4OSwuNDMwNTYsMCwwLC41MjVdLDYwOlstLjA1NTU2LC41NTU1NiwwLDAsLjUyNV0sNjE6Wy0uMTk1NDksLjQxNTYyLDAsMCwuNTI1XSw2MjpbLS4wNTU1NiwuNTU1NTYsMCwwLC41MjVdLDYzOlswLC42MTExMSwwLDAsLjUyNV0sNjQ6WzAsLjYxMTExLDAsMCwuNTI1XSw2NTpbMCwuNjExMTEsMCwwLC41MjVdLDY2OlswLC42MTExMSwwLDAsLjUyNV0sNjc6WzAsLjYxMTExLDAsMCwuNTI1XSw2ODpbMCwuNjExMTEsMCwwLC41MjVdLDY5OlswLC42MTExMSwwLDAsLjUyNV0sNzA6WzAsLjYxMTExLDAsMCwuNTI1XSw3MTpbMCwuNjExMTEsMCwwLC41MjVdLDcyOlswLC42MTExMSwwLDAsLjUyNV0sNzM6WzAsLjYxMTExLDAsMCwuNTI1XSw3NDpbMCwuNjExMTEsMCwwLC41MjVdLDc1OlswLC42MTExMSwwLDAsLjUyNV0sNzY6WzAsLjYxMTExLDAsMCwuNTI1XSw3NzpbMCwuNjExMTEsMCwwLC41MjVdLDc4OlswLC42MTExMSwwLDAsLjUyNV0sNzk6WzAsLjYxMTExLDAsMCwuNTI1XSw4MDpbMCwuNjExMTEsMCwwLC41MjVdLDgxOlsuMTM4ODksLjYxMTExLDAsMCwuNTI1XSw4MjpbMCwuNjExMTEsMCwwLC41MjVdLDgzOlswLC42MTExMSwwLDAsLjUyNV0sODQ6WzAsLjYxMTExLDAsMCwuNTI1XSw4NTpbMCwuNjExMTEsMCwwLC41MjVdLDg2OlswLC42MTExMSwwLDAsLjUyNV0sODc6WzAsLjYxMTExLDAsMCwuNTI1XSw4ODpbMCwuNjExMTEsMCwwLC41MjVdLDg5OlswLC42MTExMSwwLDAsLjUyNV0sOTA6WzAsLjYxMTExLDAsMCwuNTI1XSw5MTpbLjA4MzMzLC42OTQ0NCwwLDAsLjUyNV0sOTI6Wy4wODMzMywuNjk0NDQsMCwwLC41MjVdLDkzOlsuMDgzMzMsLjY5NDQ0LDAsMCwuNTI1XSw5NDpbMCwuNjExMTEsMCwwLC41MjVdLDk1OlsuMDk1MTQsMCwwLDAsLjUyNV0sOTY6WzAsLjYxMTExLDAsMCwuNTI1XSw5NzpbMCwuNDMwNTYsMCwwLC41MjVdLDk4OlswLC42MTExMSwwLDAsLjUyNV0sOTk6WzAsLjQzMDU2LDAsMCwuNTI1XSwxMDA6WzAsLjYxMTExLDAsMCwuNTI1XSwxMDE6WzAsLjQzMDU2LDAsMCwuNTI1XSwxMDI6WzAsLjYxMTExLDAsMCwuNTI1XSwxMDM6Wy4yMjIyMiwuNDMwNTYsMCwwLC41MjVdLDEwNDpbMCwuNjExMTEsMCwwLC41MjVdLDEwNTpbMCwuNjExMTEsMCwwLC41MjVdLDEwNjpbLjIyMjIyLC42MTExMSwwLDAsLjUyNV0sMTA3OlswLC42MTExMSwwLDAsLjUyNV0sMTA4OlswLC42MTExMSwwLDAsLjUyNV0sMTA5OlswLC40MzA1NiwwLDAsLjUyNV0sMTEwOlswLC40MzA1NiwwLDAsLjUyNV0sMTExOlswLC40MzA1NiwwLDAsLjUyNV0sMTEyOlsuMjIyMjIsLjQzMDU2LDAsMCwuNTI1XSwxMTM6Wy4yMjIyMiwuNDMwNTYsMCwwLC41MjVdLDExNDpbMCwuNDMwNTYsMCwwLC41MjVdLDExNTpbMCwuNDMwNTYsMCwwLC41MjVdLDExNjpbMCwuNTUzNTgsMCwwLC41MjVdLDExNzpbMCwuNDMwNTYsMCwwLC41MjVdLDExODpbMCwuNDMwNTYsMCwwLC41MjVdLDExOTpbMCwuNDMwNTYsMCwwLC41MjVdLDEyMDpbMCwuNDMwNTYsMCwwLC41MjVdLDEyMTpbLjIyMjIyLC40MzA1NiwwLDAsLjUyNV0sMTIyOlswLC40MzA1NiwwLDAsLjUyNV0sMTIzOlsuMDgzMzMsLjY5NDQ0LDAsMCwuNTI1XSwxMjQ6Wy4wODMzMywuNjk0NDQsMCwwLC41MjVdLDEyNTpbLjA4MzMzLC42OTQ0NCwwLDAsLjUyNV0sMTI2OlswLC42MTExMSwwLDAsLjUyNV0sMTI3OlswLC42MTExMSwwLDAsLjUyNV0sMTYwOlswLDAsMCwwLC41MjVdLDE3NjpbMCwuNjExMTEsMCwwLC41MjVdLDE4NDpbLjE5NDQ1LDAsMCwwLC41MjVdLDMwNTpbMCwuNDMwNTYsMCwwLC41MjVdLDU2NzpbLjIyMjIyLC40MzA1NiwwLDAsLjUyNV0sNzExOlswLC41NjU5NywwLDAsLjUyNV0sNzEzOlswLC41NjU1NSwwLDAsLjUyNV0sNzE0OlswLC42MTExMSwwLDAsLjUyNV0sNzE1OlswLC42MTExMSwwLDAsLjUyNV0sNzI4OlswLC42MTExMSwwLDAsLjUyNV0sNzMwOlswLC42MTExMSwwLDAsLjUyNV0sNzcwOlswLC42MTExMSwwLDAsLjUyNV0sNzcxOlswLC42MTExMSwwLDAsLjUyNV0sNzc2OlswLC42MTExMSwwLDAsLjUyNV0sOTE1OlswLC42MTExMSwwLDAsLjUyNV0sOTE2OlswLC42MTExMSwwLDAsLjUyNV0sOTIwOlswLC42MTExMSwwLDAsLjUyNV0sOTIzOlswLC42MTExMSwwLDAsLjUyNV0sOTI2OlswLC42MTExMSwwLDAsLjUyNV0sOTI4OlswLC42MTExMSwwLDAsLjUyNV0sOTMxOlswLC42MTExMSwwLDAsLjUyNV0sOTMzOlswLC42MTExMSwwLDAsLjUyNV0sOTM0OlswLC42MTExMSwwLDAsLjUyNV0sOTM2OlswLC42MTExMSwwLDAsLjUyNV0sOTM3OlswLC42MTExMSwwLDAsLjUyNV0sODIxNjpbMCwuNjExMTEsMCwwLC41MjVdLDgyMTc6WzAsLjYxMTExLDAsMCwuNTI1XSw4MjQyOlswLC42MTExMSwwLDAsLjUyNV0sOTI1MTpbLjExMTExLC4yMTk0NCwwLDAsLjUyNV19fSxaND17c2xhbnQ6Wy4yNSwuMjUsLjI1XSxzcGFjZTpbMCwwLDBdLHN0cmV0Y2g6WzAsMCwwXSxzaHJpbms6WzAsMCwwXSx4SGVpZ2h0OlsuNDMxLC40MzEsLjQzMV0scXVhZDpbMSwxLjE3MSwxLjQ3Ml0sZXh0cmFTcGFjZTpbMCwwLDBdLG51bTE6Wy42NzcsLjczMiwuOTI1XSxudW0yOlsuMzk0LC4zODQsLjM4N10sbnVtMzpbLjQ0NCwuNDcxLC41MDRdLGRlbm9tMTpbLjY4NiwuNzUyLDEuMDI1XSxkZW5vbTI6Wy4zNDUsLjM0NCwuNTMyXSxzdXAxOlsuNDEzLC41MDMsLjUwNF0sc3VwMjpbLjM2MywuNDMxLC40MDRdLHN1cDM6Wy4yODksLjI4NiwuMjk0XSxzdWIxOlsuMTUsLjE0MywuMl0sc3ViMjpbLjI0NywuMjg2LC40XSxzdXBEcm9wOlsuMzg2LC4zNTMsLjQ5NF0sc3ViRHJvcDpbLjA1LC4wNzEsLjFdLGRlbGltMTpbMi4zOSwxLjcsMS45OF0sZGVsaW0yOlsxLjAxLDEuMTU3LDEuNDJdLGF4aXNIZWlnaHQ6Wy4yNSwuMjUsLjI1XSxkZWZhdWx0UnVsZVRoaWNrbmVzczpbLjA0LC4wNDksLjA0OV0sYmlnT3BTcGFjaW5nMTpbLjExMSwuMTExLC4xMTFdLGJpZ09wU3BhY2luZzI6Wy4xNjYsLjE2NiwuMTY2XSxiaWdPcFNwYWNpbmczOlsuMiwuMiwuMl0sYmlnT3BTcGFjaW5nNDpbLjYsLjYxMSwuNjExXSxiaWdPcFNwYWNpbmc1OlsuMSwuMTQzLC4xNDNdLHNxcnRSdWxlVGhpY2tuZXNzOlsuMDQsLjA0LC4wNF0scHRQZXJFbTpbMTAsMTAsMTBdLGRvdWJsZVJ1bGVTZXA6Wy4yLC4yLC4yXSxhcnJheVJ1bGVXaWR0aDpbLjA0LC4wNCwuMDRdLGZib3hzZXA6Wy4zLC4zLC4zXSxmYm94cnVsZTpbLjA0LC4wNCwuMDRdfSxsej17XHUwMEM1OiJBIixcdTAwRDA6IkQiLFx1MDBERToibyIsXHUwMEU1OiJhIixcdTAwRjA6ImQiLFx1MDBGRToibyIsXHUwNDEwOiJBIixcdTA0MTE6IkIiLFx1MDQxMjoiQiIsXHUwNDEzOiJGIixcdTA0MTQ6IkEiLFx1MDQxNToiRSIsXHUwNDE2OiJLIixcdTA0MTc6IjMiLFx1MDQxODoiTiIsXHUwNDE5OiJOIixcdTA0MUE6IksiLFx1MDQxQjoiTiIsXHUwNDFDOiJNIixcdTA0MUQ6IkgiLFx1MDQxRToiTyIsXHUwNDFGOiJOIixcdTA0MjA6IlAiLFx1MDQyMToiQyIsXHUwNDIyOiJUIixcdTA0MjM6InkiLFx1MDQyNDoiTyIsXHUwNDI1OiJYIixcdTA0MjY6IlUiLFx1MDQyNzoiaCIsXHUwNDI4OiJXIixcdTA0Mjk6IlciLFx1MDQyQToiQiIsXHUwNDJCOiJYIixcdTA0MkM6IkIiLFx1MDQyRDoiMyIsXHUwNDJFOiJYIixcdTA0MkY6IlIiLFx1MDQzMDoiYSIsXHUwNDMxOiJiIixcdTA0MzI6ImEiLFx1MDQzMzoiciIsXHUwNDM0OiJ5IixcdTA0MzU6ImUiLFx1MDQzNjoibSIsXHUwNDM3OiJlIixcdTA0Mzg6Im4iLFx1MDQzOToibiIsXHUwNDNBOiJuIixcdTA0M0I6Im4iLFx1MDQzQzoibSIsXHUwNDNEOiJuIixcdTA0M0U6Im8iLFx1MDQzRjoibiIsXHUwNDQwOiJwIixcdTA0NDE6ImMiLFx1MDQ0MjoibyIsXHUwNDQzOiJ5IixcdTA0NDQ6ImIiLFx1MDQ0NToieCIsXHUwNDQ2OiJuIixcdTA0NDc6Im4iLFx1MDQ0ODoidyIsXHUwNDQ5OiJ3IixcdTA0NEE6ImEiLFx1MDQ0QjoibSIsXHUwNDRDOiJhIixcdTA0NEQ6ImUiLFx1MDQ0RToibSIsXHUwNDRGOiJyIn07byhBYmUsInNldEZvbnRNZXRyaWNzIik7byhQNywiZ2V0Q2hhcmFjdGVyTWV0cmljcyIpO2g3PXt9O28oX2JlLCJnZXRHbG9iYWxNZXRyaWNzIik7RGJlPVtbMSwxLDFdLFsyLDEsMV0sWzMsMSwxXSxbNCwyLDFdLFs1LDIsMV0sWzYsMywxXSxbNyw0LDJdLFs4LDYsM10sWzksNyw2XSxbMTAsOCw3XSxbMTEsMTAsOV1dLGN6PVsuNSwuNiwuNywuOCwuOSwxLDEuMiwxLjQ0LDEuNzI4LDIuMDc0LDIuNDg4XSx1ej1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIHIuc2l6ZTwyP2U6RGJlW2UtMV1bci5zaXplLTFdfSwic2l6ZUF0U3R5bGUiKSxmMz1jbGFzcyB0e3N0YXRpY3tvKHRoaXMsIk9wdGlvbnMiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLnN0eWxlPXZvaWQgMCx0aGlzLmNvbG9yPXZvaWQgMCx0aGlzLnNpemU9dm9pZCAwLHRoaXMudGV4dFNpemU9dm9pZCAwLHRoaXMucGhhbnRvbT12b2lkIDAsdGhpcy5mb250PXZvaWQgMCx0aGlzLmZvbnRGYW1pbHk9dm9pZCAwLHRoaXMuZm9udFdlaWdodD12b2lkIDAsdGhpcy5mb250U2hhcGU9dm9pZCAwLHRoaXMuc2l6ZU11bHRpcGxpZXI9dm9pZCAwLHRoaXMubWF4U2l6ZT12b2lkIDAsdGhpcy5taW5SdWxlVGhpY2tuZXNzPXZvaWQgMCx0aGlzLl9mb250TWV0cmljcz12b2lkIDAsdGhpcy5zdHlsZT1lLnN0eWxlLHRoaXMuY29sb3I9ZS5jb2xvcix0aGlzLnNpemU9ZS5zaXplfHx0LkJBU0VTSVpFLHRoaXMudGV4dFNpemU9ZS50ZXh0U2l6ZXx8dGhpcy5zaXplLHRoaXMucGhhbnRvbT0hIWUucGhhbnRvbSx0aGlzLmZvbnQ9ZS5mb250fHwiIix0aGlzLmZvbnRGYW1pbHk9ZS5mb250RmFtaWx5fHwiIix0aGlzLmZvbnRXZWlnaHQ9ZS5mb250V2VpZ2h0fHwiIix0aGlzLmZvbnRTaGFwZT1lLmZvbnRTaGFwZXx8IiIsdGhpcy5zaXplTXVsdGlwbGllcj1jelt0aGlzLnNpemUtMV0sdGhpcy5tYXhTaXplPWUubWF4U2l6ZSx0aGlzLm1pblJ1bGVUaGlja25lc3M9ZS5taW5SdWxlVGhpY2tuZXNzLHRoaXMuX2ZvbnRNZXRyaWNzPXZvaWQgMH1leHRlbmQoZSl7dmFyIHI9e3N0eWxlOnRoaXMuc3R5bGUsc2l6ZTp0aGlzLnNpemUsdGV4dFNpemU6dGhpcy50ZXh0U2l6ZSxjb2xvcjp0aGlzLmNvbG9yLHBoYW50b206dGhpcy5waGFudG9tLGZvbnQ6dGhpcy5mb250LGZvbnRGYW1pbHk6dGhpcy5mb250RmFtaWx5LGZvbnRXZWlnaHQ6dGhpcy5mb250V2VpZ2h0LGZvbnRTaGFwZTp0aGlzLmZvbnRTaGFwZSxtYXhTaXplOnRoaXMubWF4U2l6ZSxtaW5SdWxlVGhpY2tuZXNzOnRoaXMubWluUnVsZVRoaWNrbmVzc307Zm9yKHZhciBuIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShuKSYmKHJbbl09ZVtuXSk7cmV0dXJuIG5ldyB0KHIpfWhhdmluZ1N0eWxlKGUpe3JldHVybiB0aGlzLnN0eWxlPT09ZT90aGlzOnRoaXMuZXh0ZW5kKHtzdHlsZTplLHNpemU6dXoodGhpcy50ZXh0U2l6ZSxlKX0pfWhhdmluZ0NyYW1wZWRTdHlsZSgpe3JldHVybiB0aGlzLmhhdmluZ1N0eWxlKHRoaXMuc3R5bGUuY3JhbXAoKSl9aGF2aW5nU2l6ZShlKXtyZXR1cm4gdGhpcy5zaXplPT09ZSYmdGhpcy50ZXh0U2l6ZT09PWU/dGhpczp0aGlzLmV4dGVuZCh7c3R5bGU6dGhpcy5zdHlsZS50ZXh0KCksc2l6ZTplLHRleHRTaXplOmUsc2l6ZU11bHRpcGxpZXI6Y3pbZS0xXX0pfWhhdmluZ0Jhc2VTdHlsZShlKXtlPWV8fHRoaXMuc3R5bGUudGV4dCgpO3ZhciByPXV6KHQuQkFTRVNJWkUsZSk7cmV0dXJuIHRoaXMuc2l6ZT09PXImJnRoaXMudGV4dFNpemU9PT10LkJBU0VTSVpFJiZ0aGlzLnN0eWxlPT09ZT90aGlzOnRoaXMuZXh0ZW5kKHtzdHlsZTplLHNpemU6cn0pfWhhdmluZ0Jhc2VTaXppbmcoKXt2YXIgZTtzd2l0Y2godGhpcy5zdHlsZS5pZCl7Y2FzZSA0OmNhc2UgNTplPTM7YnJlYWs7Y2FzZSA2OmNhc2UgNzplPTE7YnJlYWs7ZGVmYXVsdDplPTZ9cmV0dXJuIHRoaXMuZXh0ZW5kKHtzdHlsZTp0aGlzLnN0eWxlLnRleHQoKSxzaXplOmV9KX13aXRoQ29sb3IoZSl7cmV0dXJuIHRoaXMuZXh0ZW5kKHtjb2xvcjplfSl9d2l0aFBoYW50b20oKXtyZXR1cm4gdGhpcy5leHRlbmQoe3BoYW50b206ITB9KX13aXRoRm9udChlKXtyZXR1cm4gdGhpcy5leHRlbmQoe2ZvbnQ6ZX0pfXdpdGhUZXh0Rm9udEZhbWlseShlKXtyZXR1cm4gdGhpcy5leHRlbmQoe2ZvbnRGYW1pbHk6ZSxmb250OiIifSl9d2l0aFRleHRGb250V2VpZ2h0KGUpe3JldHVybiB0aGlzLmV4dGVuZCh7Zm9udFdlaWdodDplLGZvbnQ6IiJ9KX13aXRoVGV4dEZvbnRTaGFwZShlKXtyZXR1cm4gdGhpcy5leHRlbmQoe2ZvbnRTaGFwZTplLGZvbnQ6IiJ9KX1zaXppbmdDbGFzc2VzKGUpe3JldHVybiBlLnNpemUhPT10aGlzLnNpemU/WyJzaXppbmciLCJyZXNldC1zaXplIitlLnNpemUsInNpemUiK3RoaXMuc2l6ZV06W119YmFzZVNpemluZ0NsYXNzZXMoKXtyZXR1cm4gdGhpcy5zaXplIT09dC5CQVNFU0laRT9bInNpemluZyIsInJlc2V0LXNpemUiK3RoaXMuc2l6ZSwic2l6ZSIrdC5CQVNFU0laRV06W119Zm9udE1ldHJpY3MoKXtyZXR1cm4gdGhpcy5fZm9udE1ldHJpY3N8fCh0aGlzLl9mb250TWV0cmljcz1fYmUodGhpcy5zaXplKSksdGhpcy5fZm9udE1ldHJpY3N9Z2V0Q29sb3IoKXtyZXR1cm4gdGhpcy5waGFudG9tPyJ0cmFuc3BhcmVudCI6dGhpcy5jb2xvcn19O2YzLkJBU0VTSVpFPTY7RTc9e3B0OjEsbW06NzIyNy8yNTQwLGNtOjcyMjcvMjU0LGluOjcyLjI3LGJwOjgwMy84MDAscGM6MTIsZGQ6MTIzOC8xMTU3LGNjOjE0ODU2LzExNTcsbmQ6Njg1LzY0MixuYzoxMzcwLzEwNyxzcDoxLzY1NTM2LHB4OjgwMy84MDB9LExiZT17ZXg6ITAsZW06ITAsbXU6ITB9LHp6PW8oZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlIT0ic3RyaW5nIiYmKGU9ZS51bml0KSxlIGluIEU3fHxlIGluIExiZXx8ZT09PSJleCJ9LCJ2YWxpZFVuaXQiKSx0aT1vKGZ1bmN0aW9uKGUscil7dmFyIG47aWYoZS51bml0IGluIEU3KW49RTdbZS51bml0XS9yLmZvbnRNZXRyaWNzKCkucHRQZXJFbS9yLnNpemVNdWx0aXBsaWVyO2Vsc2UgaWYoZS51bml0PT09Im11IiluPXIuZm9udE1ldHJpY3MoKS5jc3NFbVBlck11O2Vsc2V7dmFyIGk7aWYoci5zdHlsZS5pc1RpZ2h0KCk/aT1yLmhhdmluZ1N0eWxlKHIuc3R5bGUudGV4dCgpKTppPXIsZS51bml0PT09ImV4IiluPWkuZm9udE1ldHJpY3MoKS54SGVpZ2h0O2Vsc2UgaWYoZS51bml0PT09ImVtIiluPWkuZm9udE1ldHJpY3MoKS5xdWFkO2Vsc2UgdGhyb3cgbmV3IGd0KCJJbnZhbGlkIHVuaXQ6ICciK2UudW5pdCsiJyIpO2khPT1yJiYobio9aS5zaXplTXVsdGlwbGllci9yLnNpemVNdWx0aXBsaWVyKX1yZXR1cm4gTWF0aC5taW4oZS5udW1iZXIqbixyLm1heFNpemUpfSwiY2FsY3VsYXRlU2l6ZSIpLGt0PW8oZnVuY3Rpb24oZSl7cmV0dXJuK2UudG9GaXhlZCg0KSsiZW0ifSwibWFrZUVtIiksZmg9byhmdW5jdGlvbihlKXtyZXR1cm4gZS5maWx0ZXIocj0+cikuam9pbigiICIpfSwiY3JlYXRlQ2xhc3MiKSxHej1vKGZ1bmN0aW9uKGUscixuKXtpZih0aGlzLmNsYXNzZXM9ZXx8W10sdGhpcy5hdHRyaWJ1dGVzPXt9LHRoaXMuaGVpZ2h0PTAsdGhpcy5kZXB0aD0wLHRoaXMubWF4Rm9udFNpemU9MCx0aGlzLnN0eWxlPW58fHt9LHIpe3Iuc3R5bGUuaXNUaWdodCgpJiZ0aGlzLmNsYXNzZXMucHVzaCgibXRpZ2h0Iik7dmFyIGk9ci5nZXRDb2xvcigpO2kmJih0aGlzLnN0eWxlLmNvbG9yPWkpfX0sImluaXROb2RlIiksVno9byhmdW5jdGlvbihlKXt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGUpO3IuY2xhc3NOYW1lPWZoKHRoaXMuY2xhc3Nlcyk7Zm9yKHZhciBuIGluIHRoaXMuc3R5bGUpdGhpcy5zdHlsZS5oYXNPd25Qcm9wZXJ0eShuKSYmKHIuc3R5bGVbbl09dGhpcy5zdHlsZVtuXSk7Zm9yKHZhciBpIGluIHRoaXMuYXR0cmlidXRlcyl0aGlzLmF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkoaSkmJnIuc2V0QXR0cmlidXRlKGksdGhpcy5hdHRyaWJ1dGVzW2ldKTtmb3IodmFyIGE9MDthPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO2ErKylyLmFwcGVuZENoaWxkKHRoaXMuY2hpbGRyZW5bYV0udG9Ob2RlKCkpO3JldHVybiByfSwidG9Ob2RlIiksVXo9byhmdW5jdGlvbihlKXt2YXIgcj0iPCIrZTt0aGlzLmNsYXNzZXMubGVuZ3RoJiYocis9JyBjbGFzcz0iJytKdC5lc2NhcGUoZmgodGhpcy5jbGFzc2VzKSkrJyInKTt2YXIgbj0iIjtmb3IodmFyIGkgaW4gdGhpcy5zdHlsZSl0aGlzLnN0eWxlLmhhc093blByb3BlcnR5KGkpJiYobis9SnQuaHlwaGVuYXRlKGkpKyI6Iit0aGlzLnN0eWxlW2ldKyI7Iik7biYmKHIrPScgc3R5bGU9IicrSnQuZXNjYXBlKG4pKyciJyk7Zm9yKHZhciBhIGluIHRoaXMuYXR0cmlidXRlcyl0aGlzLmF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkoYSkmJihyKz0iICIrYSsnPSInK0p0LmVzY2FwZSh0aGlzLmF0dHJpYnV0ZXNbYV0pKyciJyk7cis9Ij4iO2Zvcih2YXIgcz0wO3M8dGhpcy5jaGlsZHJlbi5sZW5ndGg7cysrKXIrPXRoaXMuY2hpbGRyZW5bc10udG9NYXJrdXAoKTtyZXR1cm4gcis9IjwvIitlKyI+IixyfSwidG9NYXJrdXAiKSx0ZD1jbGFzc3tzdGF0aWN7byh0aGlzLCJTcGFuIil9Y29uc3RydWN0b3IoZSxyLG4saSl7dGhpcy5jaGlsZHJlbj12b2lkIDAsdGhpcy5hdHRyaWJ1dGVzPXZvaWQgMCx0aGlzLmNsYXNzZXM9dm9pZCAwLHRoaXMuaGVpZ2h0PXZvaWQgMCx0aGlzLmRlcHRoPXZvaWQgMCx0aGlzLndpZHRoPXZvaWQgMCx0aGlzLm1heEZvbnRTaXplPXZvaWQgMCx0aGlzLnN0eWxlPXZvaWQgMCxHei5jYWxsKHRoaXMsZSxuLGkpLHRoaXMuY2hpbGRyZW49cnx8W119c2V0QXR0cmlidXRlKGUscil7dGhpcy5hdHRyaWJ1dGVzW2VdPXJ9aGFzQ2xhc3MoZSl7cmV0dXJuIEp0LmNvbnRhaW5zKHRoaXMuY2xhc3NlcyxlKX10b05vZGUoKXtyZXR1cm4gVnouY2FsbCh0aGlzLCJzcGFuIil9dG9NYXJrdXAoKXtyZXR1cm4gVXouY2FsbCh0aGlzLCJzcGFuIil9fSxWeT1jbGFzc3tzdGF0aWN7byh0aGlzLCJBbmNob3IiKX1jb25zdHJ1Y3RvcihlLHIsbixpKXt0aGlzLmNoaWxkcmVuPXZvaWQgMCx0aGlzLmF0dHJpYnV0ZXM9dm9pZCAwLHRoaXMuY2xhc3Nlcz12b2lkIDAsdGhpcy5oZWlnaHQ9dm9pZCAwLHRoaXMuZGVwdGg9dm9pZCAwLHRoaXMubWF4Rm9udFNpemU9dm9pZCAwLHRoaXMuc3R5bGU9dm9pZCAwLEd6LmNhbGwodGhpcyxyLGkpLHRoaXMuY2hpbGRyZW49bnx8W10sdGhpcy5zZXRBdHRyaWJ1dGUoImhyZWYiLGUpfXNldEF0dHJpYnV0ZShlLHIpe3RoaXMuYXR0cmlidXRlc1tlXT1yfWhhc0NsYXNzKGUpe3JldHVybiBKdC5jb250YWlucyh0aGlzLmNsYXNzZXMsZSl9dG9Ob2RlKCl7cmV0dXJuIFZ6LmNhbGwodGhpcywiYSIpfXRvTWFya3VwKCl7cmV0dXJuIFV6LmNhbGwodGhpcywiYSIpfX0sUzc9Y2xhc3N7c3RhdGlje28odGhpcywiSW1nIil9Y29uc3RydWN0b3IoZSxyLG4pe3RoaXMuc3JjPXZvaWQgMCx0aGlzLmFsdD12b2lkIDAsdGhpcy5jbGFzc2VzPXZvaWQgMCx0aGlzLmhlaWdodD12b2lkIDAsdGhpcy5kZXB0aD12b2lkIDAsdGhpcy5tYXhGb250U2l6ZT12b2lkIDAsdGhpcy5zdHlsZT12b2lkIDAsdGhpcy5hbHQ9cix0aGlzLnNyYz1lLHRoaXMuY2xhc3Nlcz1bIm1vcmQiXSx0aGlzLnN0eWxlPW59aGFzQ2xhc3MoZSl7cmV0dXJuIEp0LmNvbnRhaW5zKHRoaXMuY2xhc3NlcyxlKX10b05vZGUoKXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbWciKTtlLnNyYz10aGlzLnNyYyxlLmFsdD10aGlzLmFsdCxlLmNsYXNzTmFtZT0ibW9yZCI7Zm9yKHZhciByIGluIHRoaXMuc3R5bGUpdGhpcy5zdHlsZS5oYXNPd25Qcm9wZXJ0eShyKSYmKGUuc3R5bGVbcl09dGhpcy5zdHlsZVtyXSk7cmV0dXJuIGV9dG9NYXJrdXAoKXt2YXIgZT0nPGltZyBzcmM9IicrSnQuZXNjYXBlKHRoaXMuc3JjKSsnIicrKCcgYWx0PSInK0p0LmVzY2FwZSh0aGlzLmFsdCkrJyInKSxyPSIiO2Zvcih2YXIgbiBpbiB0aGlzLnN0eWxlKXRoaXMuc3R5bGUuaGFzT3duUHJvcGVydHkobikmJihyKz1KdC5oeXBoZW5hdGUobikrIjoiK3RoaXMuc3R5bGVbbl0rIjsiKTtyZXR1cm4gciYmKGUrPScgc3R5bGU9IicrSnQuZXNjYXBlKHIpKyciJyksZSs9IicvPiIsZX19LFJiZT17XHUwMEVFOiJcdTAxMzFcdTAzMDIiLFx1MDBFRjoiXHUwMTMxXHUwMzA4IixcdTAwRUQ6Ilx1MDEzMVx1MDMwMSIsXHUwMEVDOiJcdTAxMzFcdTAzMDAifSxUcz1jbGFzc3tzdGF0aWN7byh0aGlzLCJTeW1ib2xOb2RlIil9Y29uc3RydWN0b3IoZSxyLG4saSxhLHMsbCx1KXt0aGlzLnRleHQ9dm9pZCAwLHRoaXMuaGVpZ2h0PXZvaWQgMCx0aGlzLmRlcHRoPXZvaWQgMCx0aGlzLml0YWxpYz12b2lkIDAsdGhpcy5za2V3PXZvaWQgMCx0aGlzLndpZHRoPXZvaWQgMCx0aGlzLm1heEZvbnRTaXplPXZvaWQgMCx0aGlzLmNsYXNzZXM9dm9pZCAwLHRoaXMuc3R5bGU9dm9pZCAwLHRoaXMudGV4dD1lLHRoaXMuaGVpZ2h0PXJ8fDAsdGhpcy5kZXB0aD1ufHwwLHRoaXMuaXRhbGljPWl8fDAsdGhpcy5za2V3PWF8fDAsdGhpcy53aWR0aD1zfHwwLHRoaXMuY2xhc3Nlcz1sfHxbXSx0aGlzLnN0eWxlPXV8fHt9LHRoaXMubWF4Rm9udFNpemU9MDt2YXIgaD1nYmUodGhpcy50ZXh0LmNoYXJDb2RlQXQoMCkpO2gmJnRoaXMuY2xhc3Nlcy5wdXNoKGgrIl9mYWxsYmFjayIpLC9bw67Dr8Otw6xdLy50ZXN0KHRoaXMudGV4dCkmJih0aGlzLnRleHQ9UmJlW3RoaXMudGV4dF0pfWhhc0NsYXNzKGUpe3JldHVybiBKdC5jb250YWlucyh0aGlzLmNsYXNzZXMsZSl9dG9Ob2RlKCl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGhpcy50ZXh0KSxyPW51bGw7dGhpcy5pdGFsaWM+MCYmKHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpLHIuc3R5bGUubWFyZ2luUmlnaHQ9a3QodGhpcy5pdGFsaWMpKSx0aGlzLmNsYXNzZXMubGVuZ3RoPjAmJihyPXJ8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKSxyLmNsYXNzTmFtZT1maCh0aGlzLmNsYXNzZXMpKTtmb3IodmFyIG4gaW4gdGhpcy5zdHlsZSl0aGlzLnN0eWxlLmhhc093blByb3BlcnR5KG4pJiYocj1yfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIiksci5zdHlsZVtuXT10aGlzLnN0eWxlW25dKTtyZXR1cm4gcj8oci5hcHBlbmRDaGlsZChlKSxyKTplfXRvTWFya3VwKCl7dmFyIGU9ITEscj0iPHNwYW4iO3RoaXMuY2xhc3Nlcy5sZW5ndGgmJihlPSEwLHIrPScgY2xhc3M9Iicscis9SnQuZXNjYXBlKGZoKHRoaXMuY2xhc3NlcykpLHIrPSciJyk7dmFyIG49IiI7dGhpcy5pdGFsaWM+MCYmKG4rPSJtYXJnaW4tcmlnaHQ6Iit0aGlzLml0YWxpYysiZW07Iik7Zm9yKHZhciBpIGluIHRoaXMuc3R5bGUpdGhpcy5zdHlsZS5oYXNPd25Qcm9wZXJ0eShpKSYmKG4rPUp0Lmh5cGhlbmF0ZShpKSsiOiIrdGhpcy5zdHlsZVtpXSsiOyIpO24mJihlPSEwLHIrPScgc3R5bGU9IicrSnQuZXNjYXBlKG4pKyciJyk7dmFyIGE9SnQuZXNjYXBlKHRoaXMudGV4dCk7cmV0dXJuIGU/KHIrPSI+IixyKz1hLHIrPSI8L3NwYW4+IixyKTphfX0sbGw9Y2xhc3N7c3RhdGlje28odGhpcywiU3ZnTm9kZSIpfWNvbnN0cnVjdG9yKGUscil7dGhpcy5jaGlsZHJlbj12b2lkIDAsdGhpcy5hdHRyaWJ1dGVzPXZvaWQgMCx0aGlzLmNoaWxkcmVuPWV8fFtdLHRoaXMuYXR0cmlidXRlcz1yfHx7fX10b05vZGUoKXt2YXIgZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGUsInN2ZyIpO2Zvcih2YXIgbiBpbiB0aGlzLmF0dHJpYnV0ZXMpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYXR0cmlidXRlcyxuKSYmci5zZXRBdHRyaWJ1dGUobix0aGlzLmF0dHJpYnV0ZXNbbl0pO2Zvcih2YXIgaT0wO2k8dGhpcy5jaGlsZHJlbi5sZW5ndGg7aSsrKXIuYXBwZW5kQ2hpbGQodGhpcy5jaGlsZHJlbltpXS50b05vZGUoKSk7cmV0dXJuIHJ9dG9NYXJrdXAoKXt2YXIgZT0nPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciJztmb3IodmFyIHIgaW4gdGhpcy5hdHRyaWJ1dGVzKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmF0dHJpYnV0ZXMscikmJihlKz0iICIrcisnPSInK0p0LmVzY2FwZSh0aGlzLmF0dHJpYnV0ZXNbcl0pKyciJyk7ZSs9Ij4iO2Zvcih2YXIgbj0wO248dGhpcy5jaGlsZHJlbi5sZW5ndGg7bisrKWUrPXRoaXMuY2hpbGRyZW5bbl0udG9NYXJrdXAoKTtyZXR1cm4gZSs9Ijwvc3ZnPiIsZX19LEtsPWNsYXNze3N0YXRpY3tvKHRoaXMsIlBhdGhOb2RlIil9Y29uc3RydWN0b3IoZSxyKXt0aGlzLnBhdGhOYW1lPXZvaWQgMCx0aGlzLmFsdGVybmF0ZT12b2lkIDAsdGhpcy5wYXRoTmFtZT1lLHRoaXMuYWx0ZXJuYXRlPXJ9dG9Ob2RlKCl7dmFyIGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhlLCJwYXRoIik7cmV0dXJuIHRoaXMuYWx0ZXJuYXRlP3Iuc2V0QXR0cmlidXRlKCJkIix0aGlzLmFsdGVybmF0ZSk6ci5zZXRBdHRyaWJ1dGUoImQiLG96W3RoaXMucGF0aE5hbWVdKSxyfXRvTWFya3VwKCl7cmV0dXJuIHRoaXMuYWx0ZXJuYXRlPyc8cGF0aCBkPSInK0p0LmVzY2FwZSh0aGlzLmFsdGVybmF0ZSkrJyIvPic6JzxwYXRoIGQ9IicrSnQuZXNjYXBlKG96W3RoaXMucGF0aE5hbWVdKSsnIi8+J319LFV5PWNsYXNze3N0YXRpY3tvKHRoaXMsIkxpbmVOb2RlIil9Y29uc3RydWN0b3IoZSl7dGhpcy5hdHRyaWJ1dGVzPXZvaWQgMCx0aGlzLmF0dHJpYnV0ZXM9ZXx8e319dG9Ob2RlKCl7dmFyIGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhlLCJsaW5lIik7Zm9yKHZhciBuIGluIHRoaXMuYXR0cmlidXRlcylPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJ1dGVzLG4pJiZyLnNldEF0dHJpYnV0ZShuLHRoaXMuYXR0cmlidXRlc1tuXSk7cmV0dXJuIHJ9dG9NYXJrdXAoKXt2YXIgZT0iPGxpbmUiO2Zvcih2YXIgciBpbiB0aGlzLmF0dHJpYnV0ZXMpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYXR0cmlidXRlcyxyKSYmKGUrPSIgIityKyc9IicrSnQuZXNjYXBlKHRoaXMuYXR0cmlidXRlc1tyXSkrJyInKTtyZXR1cm4gZSs9Ii8+IixlfX07byhoeiwiYXNzZXJ0U3ltYm9sRG9tTm9kZSIpO28oTmJlLCJhc3NlcnRTcGFuIik7TWJlPXtiaW46MSxjbG9zZToxLGlubmVyOjEsb3BlbjoxLHB1bmN0OjEscmVsOjF9LEliZT17ImFjY2VudC10b2tlbiI6MSxtYXRob3JkOjEsIm9wLXRva2VuIjoxLHNwYWNpbmc6MSx0ZXh0b3JkOjF9LEFuPXttYXRoOnt9LHRleHQ6e319O28oRywiZGVmaW5lU3ltYm9sIik7VT0ibWF0aCIsaXQ9InRleHQiLGVlPSJtYWluIixrZT0iYW1zIixWbj0iYWNjZW50LXRva2VuIixJdD0iYmluIixaYT0iY2xvc2UiLHAwPSJpbm5lciIsZXI9Im1hdGhvcmQiLGtpPSJvcC10b2tlbiIsanM9Im9wZW4iLHgzPSJwdW5jdCIsRWU9InJlbCIsdXU9InNwYWNpbmciLExlPSJ0ZXh0b3JkIjtHKFUsZWUsRWUsIlx1MjI2MSIsIlxcZXF1aXYiLCEwKTtHKFUsZWUsRWUsIlx1MjI3QSIsIlxccHJlYyIsITApO0coVSxlZSxFZSwiXHUyMjdCIiwiXFxzdWNjIiwhMCk7RyhVLGVlLEVlLCJcdTIyM0MiLCJcXHNpbSIsITApO0coVSxlZSxFZSwiXHUyMkE1IiwiXFxwZXJwIik7RyhVLGVlLEVlLCJcdTJBQUYiLCJcXHByZWNlcSIsITApO0coVSxlZSxFZSwiXHUyQUIwIiwiXFxzdWNjZXEiLCEwKTtHKFUsZWUsRWUsIlx1MjI0MyIsIlxcc2ltZXEiLCEwKTtHKFUsZWUsRWUsIlx1MjIyMyIsIlxcbWlkIiwhMCk7RyhVLGVlLEVlLCJcdTIyNkEiLCJcXGxsIiwhMCk7RyhVLGVlLEVlLCJcdTIyNkIiLCJcXGdnIiwhMCk7RyhVLGVlLEVlLCJcdTIyNEQiLCJcXGFzeW1wIiwhMCk7RyhVLGVlLEVlLCJcdTIyMjUiLCJcXHBhcmFsbGVsIik7RyhVLGVlLEVlLCJcdTIyQzgiLCJcXGJvd3RpZSIsITApO0coVSxlZSxFZSwiXHUyMzIzIiwiXFxzbWlsZSIsITApO0coVSxlZSxFZSwiXHUyMjkxIiwiXFxzcXN1YnNldGVxIiwhMCk7RyhVLGVlLEVlLCJcdTIyOTIiLCJcXHNxc3Vwc2V0ZXEiLCEwKTtHKFUsZWUsRWUsIlx1MjI1MCIsIlxcZG90ZXEiLCEwKTtHKFUsZWUsRWUsIlx1MjMyMiIsIlxcZnJvd24iLCEwKTtHKFUsZWUsRWUsIlx1MjIwQiIsIlxcbmkiLCEwKTtHKFUsZWUsRWUsIlx1MjIxRCIsIlxccHJvcHRvIiwhMCk7RyhVLGVlLEVlLCJcdTIyQTIiLCJcXHZkYXNoIiwhMCk7RyhVLGVlLEVlLCJcdTIyQTMiLCJcXGRhc2h2IiwhMCk7RyhVLGVlLEVlLCJcdTIyMEIiLCJcXG93bnMiKTtHKFUsZWUseDMsIi4iLCJcXGxkb3RwIik7RyhVLGVlLHgzLCJcdTIyQzUiLCJcXGNkb3RwIik7RyhVLGVlLExlLCIjIiwiXFwjIik7RyhpdCxlZSxMZSwiIyIsIlxcIyIpO0coVSxlZSxMZSwiJiIsIlxcJiIpO0coaXQsZWUsTGUsIiYiLCJcXCYiKTtHKFUsZWUsTGUsIlx1MjEzNSIsIlxcYWxlcGgiLCEwKTtHKFUsZWUsTGUsIlx1MjIwMCIsIlxcZm9yYWxsIiwhMCk7RyhVLGVlLExlLCJcdTIxMEYiLCJcXGhiYXIiLCEwKTtHKFUsZWUsTGUsIlx1MjIwMyIsIlxcZXhpc3RzIiwhMCk7RyhVLGVlLExlLCJcdTIyMDciLCJcXG5hYmxhIiwhMCk7RyhVLGVlLExlLCJcdTI2NkQiLCJcXGZsYXQiLCEwKTtHKFUsZWUsTGUsIlx1MjExMyIsIlxcZWxsIiwhMCk7RyhVLGVlLExlLCJcdTI2NkUiLCJcXG5hdHVyYWwiLCEwKTtHKFUsZWUsTGUsIlx1MjY2MyIsIlxcY2x1YnN1aXQiLCEwKTtHKFUsZWUsTGUsIlx1MjExOCIsIlxcd3AiLCEwKTtHKFUsZWUsTGUsIlx1MjY2RiIsIlxcc2hhcnAiLCEwKTtHKFUsZWUsTGUsIlx1MjY2MiIsIlxcZGlhbW9uZHN1aXQiLCEwKTtHKFUsZWUsTGUsIlx1MjExQyIsIlxcUmUiLCEwKTtHKFUsZWUsTGUsIlx1MjY2MSIsIlxcaGVhcnRzdWl0IiwhMCk7RyhVLGVlLExlLCJcdTIxMTEiLCJcXEltIiwhMCk7RyhVLGVlLExlLCJcdTI2NjAiLCJcXHNwYWRlc3VpdCIsITApO0coVSxlZSxMZSwiXHhBNyIsIlxcUyIsITApO0coaXQsZWUsTGUsIlx4QTciLCJcXFMiKTtHKFUsZWUsTGUsIlx4QjYiLCJcXFAiLCEwKTtHKGl0LGVlLExlLCJceEI2IiwiXFxQIik7RyhVLGVlLExlLCJcdTIwMjAiLCJcXGRhZyIpO0coaXQsZWUsTGUsIlx1MjAyMCIsIlxcZGFnIik7RyhpdCxlZSxMZSwiXHUyMDIwIiwiXFx0ZXh0ZGFnZ2VyIik7RyhVLGVlLExlLCJcdTIwMjEiLCJcXGRkYWciKTtHKGl0LGVlLExlLCJcdTIwMjEiLCJcXGRkYWciKTtHKGl0LGVlLExlLCJcdTIwMjEiLCJcXHRleHRkYWdnZXJkYmwiKTtHKFUsZWUsWmEsIlx1MjNCMSIsIlxccm1vdXN0YWNoZSIsITApO0coVSxlZSxqcywiXHUyM0IwIiwiXFxsbW91c3RhY2hlIiwhMCk7RyhVLGVlLFphLCJcdTI3RUYiLCJcXHJncm91cCIsITApO0coVSxlZSxqcywiXHUyN0VFIiwiXFxsZ3JvdXAiLCEwKTtHKFUsZWUsSXQsIlx1MjIxMyIsIlxcbXAiLCEwKTtHKFUsZWUsSXQsIlx1MjI5NiIsIlxcb21pbnVzIiwhMCk7RyhVLGVlLEl0LCJcdTIyOEUiLCJcXHVwbHVzIiwhMCk7RyhVLGVlLEl0LCJcdTIyOTMiLCJcXHNxY2FwIiwhMCk7RyhVLGVlLEl0LCJcdTIyMTciLCJcXGFzdCIpO0coVSxlZSxJdCwiXHUyMjk0IiwiXFxzcWN1cCIsITApO0coVSxlZSxJdCwiXHUyNUVGIiwiXFxiaWdjaXJjIiwhMCk7RyhVLGVlLEl0LCJcdTIyMTkiLCJcXGJ1bGxldCIsITApO0coVSxlZSxJdCwiXHUyMDIxIiwiXFxkZGFnZ2VyIik7RyhVLGVlLEl0LCJcdTIyNDAiLCJcXHdyIiwhMCk7RyhVLGVlLEl0LCJcdTJBM0YiLCJcXGFtYWxnIik7RyhVLGVlLEl0LCImIiwiXFxBbmQiKTtHKFUsZWUsRWUsIlx1MjdGNSIsIlxcbG9uZ2xlZnRhcnJvdyIsITApO0coVSxlZSxFZSwiXHUyMUQwIiwiXFxMZWZ0YXJyb3ciLCEwKTtHKFUsZWUsRWUsIlx1MjdGOCIsIlxcTG9uZ2xlZnRhcnJvdyIsITApO0coVSxlZSxFZSwiXHUyN0Y2IiwiXFxsb25ncmlnaHRhcnJvdyIsITApO0coVSxlZSxFZSwiXHUyMUQyIiwiXFxSaWdodGFycm93IiwhMCk7RyhVLGVlLEVlLCJcdTI3RjkiLCJcXExvbmdyaWdodGFycm93IiwhMCk7RyhVLGVlLEVlLCJcdTIxOTQiLCJcXGxlZnRyaWdodGFycm93IiwhMCk7RyhVLGVlLEVlLCJcdTI3RjciLCJcXGxvbmdsZWZ0cmlnaHRhcnJvdyIsITApO0coVSxlZSxFZSwiXHUyMUQ0IiwiXFxMZWZ0cmlnaHRhcnJvdyIsITApO0coVSxlZSxFZSwiXHUyN0ZBIiwiXFxMb25nbGVmdHJpZ2h0YXJyb3ciLCEwKTtHKFUsZWUsRWUsIlx1MjFBNiIsIlxcbWFwc3RvIiwhMCk7RyhVLGVlLEVlLCJcdTI3RkMiLCJcXGxvbmdtYXBzdG8iLCEwKTtHKFUsZWUsRWUsIlx1MjE5NyIsIlxcbmVhcnJvdyIsITApO0coVSxlZSxFZSwiXHUyMUE5IiwiXFxob29rbGVmdGFycm93IiwhMCk7RyhVLGVlLEVlLCJcdTIxQUEiLCJcXGhvb2tyaWdodGFycm93IiwhMCk7RyhVLGVlLEVlLCJcdTIxOTgiLCJcXHNlYXJyb3ciLCEwKTtHKFUsZWUsRWUsIlx1MjFCQyIsIlxcbGVmdGhhcnBvb251cCIsITApO0coVSxlZSxFZSwiXHUyMUMwIiwiXFxyaWdodGhhcnBvb251cCIsITApO0coVSxlZSxFZSwiXHUyMTk5IiwiXFxzd2Fycm93IiwhMCk7RyhVLGVlLEVlLCJcdTIxQkQiLCJcXGxlZnRoYXJwb29uZG93biIsITApO0coVSxlZSxFZSwiXHUyMUMxIiwiXFxyaWdodGhhcnBvb25kb3duIiwhMCk7RyhVLGVlLEVlLCJcdTIxOTYiLCJcXG53YXJyb3ciLCEwKTtHKFUsZWUsRWUsIlx1MjFDQyIsIlxccmlnaHRsZWZ0aGFycG9vbnMiLCEwKTtHKFUsa2UsRWUsIlx1MjI2RSIsIlxcbmxlc3MiLCEwKTtHKFUsa2UsRWUsIlx1RTAxMCIsIlxcQG5sZXFzbGFudCIpO0coVSxrZSxFZSwiXHVFMDExIiwiXFxAbmxlcXEiKTtHKFUsa2UsRWUsIlx1MkE4NyIsIlxcbG5lcSIsITApO0coVSxrZSxFZSwiXHUyMjY4IiwiXFxsbmVxcSIsITApO0coVSxrZSxFZSwiXHVFMDBDIiwiXFxAbHZlcnRuZXFxIik7RyhVLGtlLEVlLCJcdTIyRTYiLCJcXGxuc2ltIiwhMCk7RyhVLGtlLEVlLCJcdTJBODkiLCJcXGxuYXBwcm94IiwhMCk7RyhVLGtlLEVlLCJcdTIyODAiLCJcXG5wcmVjIiwhMCk7RyhVLGtlLEVlLCJcdTIyRTAiLCJcXG5wcmVjZXEiLCEwKTtHKFUsa2UsRWUsIlx1MjJFOCIsIlxccHJlY25zaW0iLCEwKTtHKFUsa2UsRWUsIlx1MkFCOSIsIlxccHJlY25hcHByb3giLCEwKTtHKFUsa2UsRWUsIlx1MjI0MSIsIlxcbnNpbSIsITApO0coVSxrZSxFZSwiXHVFMDA2IiwiXFxAbnNob3J0bWlkIik7RyhVLGtlLEVlLCJcdTIyMjQiLCJcXG5taWQiLCEwKTtHKFUsa2UsRWUsIlx1MjJBQyIsIlxcbnZkYXNoIiwhMCk7RyhVLGtlLEVlLCJcdTIyQUQiLCJcXG52RGFzaCIsITApO0coVSxrZSxFZSwiXHUyMkVBIiwiXFxudHJpYW5nbGVsZWZ0Iik7RyhVLGtlLEVlLCJcdTIyRUMiLCJcXG50cmlhbmdsZWxlZnRlcSIsITApO0coVSxrZSxFZSwiXHUyMjhBIiwiXFxzdWJzZXRuZXEiLCEwKTtHKFUsa2UsRWUsIlx1RTAxQSIsIlxcQHZhcnN1YnNldG5lcSIpO0coVSxrZSxFZSwiXHUyQUNCIiwiXFxzdWJzZXRuZXFxIiwhMCk7RyhVLGtlLEVlLCJcdUUwMTciLCJcXEB2YXJzdWJzZXRuZXFxIik7RyhVLGtlLEVlLCJcdTIyNkYiLCJcXG5ndHIiLCEwKTtHKFUsa2UsRWUsIlx1RTAwRiIsIlxcQG5nZXFzbGFudCIpO0coVSxrZSxFZSwiXHVFMDBFIiwiXFxAbmdlcXEiKTtHKFUsa2UsRWUsIlx1MkE4OCIsIlxcZ25lcSIsITApO0coVSxrZSxFZSwiXHUyMjY5IiwiXFxnbmVxcSIsITApO0coVSxrZSxFZSwiXHVFMDBEIiwiXFxAZ3ZlcnRuZXFxIik7RyhVLGtlLEVlLCJcdTIyRTciLCJcXGduc2ltIiwhMCk7RyhVLGtlLEVlLCJcdTJBOEEiLCJcXGduYXBwcm94IiwhMCk7RyhVLGtlLEVlLCJcdTIyODEiLCJcXG5zdWNjIiwhMCk7RyhVLGtlLEVlLCJcdTIyRTEiLCJcXG5zdWNjZXEiLCEwKTtHKFUsa2UsRWUsIlx1MjJFOSIsIlxcc3VjY25zaW0iLCEwKTtHKFUsa2UsRWUsIlx1MkFCQSIsIlxcc3VjY25hcHByb3giLCEwKTtHKFUsa2UsRWUsIlx1MjI0NiIsIlxcbmNvbmciLCEwKTtHKFUsa2UsRWUsIlx1RTAwNyIsIlxcQG5zaG9ydHBhcmFsbGVsIik7RyhVLGtlLEVlLCJcdTIyMjYiLCJcXG5wYXJhbGxlbCIsITApO0coVSxrZSxFZSwiXHUyMkFGIiwiXFxuVkRhc2giLCEwKTtHKFUsa2UsRWUsIlx1MjJFQiIsIlxcbnRyaWFuZ2xlcmlnaHQiKTtHKFUsa2UsRWUsIlx1MjJFRCIsIlxcbnRyaWFuZ2xlcmlnaHRlcSIsITApO0coVSxrZSxFZSwiXHVFMDE4IiwiXFxAbnN1cHNldGVxcSIpO0coVSxrZSxFZSwiXHUyMjhCIiwiXFxzdXBzZXRuZXEiLCEwKTtHKFUsa2UsRWUsIlx1RTAxQiIsIlxcQHZhcnN1cHNldG5lcSIpO0coVSxrZSxFZSwiXHUyQUNDIiwiXFxzdXBzZXRuZXFxIiwhMCk7RyhVLGtlLEVlLCJcdUUwMTkiLCJcXEB2YXJzdXBzZXRuZXFxIik7RyhVLGtlLEVlLCJcdTIyQUUiLCJcXG5WZGFzaCIsITApO0coVSxrZSxFZSwiXHUyQUI1IiwiXFxwcmVjbmVxcSIsITApO0coVSxrZSxFZSwiXHUyQUI2IiwiXFxzdWNjbmVxcSIsITApO0coVSxrZSxFZSwiXHVFMDE2IiwiXFxAbnN1YnNldGVxcSIpO0coVSxrZSxJdCwiXHUyMkI0IiwiXFx1bmxoZCIpO0coVSxrZSxJdCwiXHUyMkI1IiwiXFx1bnJoZCIpO0coVSxrZSxFZSwiXHUyMTlBIiwiXFxubGVmdGFycm93IiwhMCk7RyhVLGtlLEVlLCJcdTIxOUIiLCJcXG5yaWdodGFycm93IiwhMCk7RyhVLGtlLEVlLCJcdTIxQ0QiLCJcXG5MZWZ0YXJyb3ciLCEwKTtHKFUsa2UsRWUsIlx1MjFDRiIsIlxcblJpZ2h0YXJyb3ciLCEwKTtHKFUsa2UsRWUsIlx1MjFBRSIsIlxcbmxlZnRyaWdodGFycm93IiwhMCk7RyhVLGtlLEVlLCJcdTIxQ0UiLCJcXG5MZWZ0cmlnaHRhcnJvdyIsITApO0coVSxrZSxFZSwiXHUyNUIzIiwiXFx2YXJ0cmlhbmdsZSIpO0coVSxrZSxMZSwiXHUyMTBGIiwiXFxoc2xhc2giKTtHKFUsa2UsTGUsIlx1MjVCRCIsIlxcdHJpYW5nbGVkb3duIik7RyhVLGtlLExlLCJcdTI1Q0EiLCJcXGxvemVuZ2UiKTtHKFUsa2UsTGUsIlx1MjRDOCIsIlxcY2lyY2xlZFMiKTtHKFUsa2UsTGUsIlx4QUUiLCJcXGNpcmNsZWRSIik7RyhpdCxrZSxMZSwiXHhBRSIsIlxcY2lyY2xlZFIiKTtHKFUsa2UsTGUsIlx1MjIyMSIsIlxcbWVhc3VyZWRhbmdsZSIsITApO0coVSxrZSxMZSwiXHUyMjA0IiwiXFxuZXhpc3RzIik7RyhVLGtlLExlLCJcdTIxMjciLCJcXG1obyIpO0coVSxrZSxMZSwiXHUyMTMyIiwiXFxGaW52IiwhMCk7RyhVLGtlLExlLCJcdTIxNDEiLCJcXEdhbWUiLCEwKTtHKFUsa2UsTGUsIlx1MjAzNSIsIlxcYmFja3ByaW1lIik7RyhVLGtlLExlLCJcdTI1QjIiLCJcXGJsYWNrdHJpYW5nbGUiKTtHKFUsa2UsTGUsIlx1MjVCQyIsIlxcYmxhY2t0cmlhbmdsZWRvd24iKTtHKFUsa2UsTGUsIlx1MjVBMCIsIlxcYmxhY2tzcXVhcmUiKTtHKFUsa2UsTGUsIlx1MjlFQiIsIlxcYmxhY2tsb3plbmdlIik7RyhVLGtlLExlLCJcdTI2MDUiLCJcXGJpZ3N0YXIiKTtHKFUsa2UsTGUsIlx1MjIyMiIsIlxcc3BoZXJpY2FsYW5nbGUiLCEwKTtHKFUsa2UsTGUsIlx1MjIwMSIsIlxcY29tcGxlbWVudCIsITApO0coVSxrZSxMZSwiXHhGMCIsIlxcZXRoIiwhMCk7RyhpdCxlZSxMZSwiXHhGMCIsIlx4RjAiKTtHKFUsa2UsTGUsIlx1MjU3MSIsIlxcZGlhZ3VwIik7RyhVLGtlLExlLCJcdTI1NzIiLCJcXGRpYWdkb3duIik7RyhVLGtlLExlLCJcdTI1QTEiLCJcXHNxdWFyZSIpO0coVSxrZSxMZSwiXHUyNUExIiwiXFxCb3giKTtHKFUsa2UsTGUsIlx1MjVDQSIsIlxcRGlhbW9uZCIpO0coVSxrZSxMZSwiXHhBNSIsIlxceWVuIiwhMCk7RyhpdCxrZSxMZSwiXHhBNSIsIlxceWVuIiwhMCk7RyhVLGtlLExlLCJcdTI3MTMiLCJcXGNoZWNrbWFyayIsITApO0coaXQsa2UsTGUsIlx1MjcxMyIsIlxcY2hlY2ttYXJrIik7RyhVLGtlLExlLCJcdTIxMzYiLCJcXGJldGgiLCEwKTtHKFUsa2UsTGUsIlx1MjEzOCIsIlxcZGFsZXRoIiwhMCk7RyhVLGtlLExlLCJcdTIxMzciLCJcXGdpbWVsIiwhMCk7RyhVLGtlLExlLCJcdTAzREQiLCJcXGRpZ2FtbWEiLCEwKTtHKFUsa2UsTGUsIlx1MDNGMCIsIlxcdmFya2FwcGEiKTtHKFUsa2UsanMsIlx1MjUwQyIsIlxcQHVsY29ybmVyIiwhMCk7RyhVLGtlLFphLCJcdTI1MTAiLCJcXEB1cmNvcm5lciIsITApO0coVSxrZSxqcywiXHUyNTE0IiwiXFxAbGxjb3JuZXIiLCEwKTtHKFUsa2UsWmEsIlx1MjUxOCIsIlxcQGxyY29ybmVyIiwhMCk7RyhVLGtlLEVlLCJcdTIyNjYiLCJcXGxlcXEiLCEwKTtHKFUsa2UsRWUsIlx1MkE3RCIsIlxcbGVxc2xhbnQiLCEwKTtHKFUsa2UsRWUsIlx1MkE5NSIsIlxcZXFzbGFudGxlc3MiLCEwKTtHKFUsa2UsRWUsIlx1MjI3MiIsIlxcbGVzc3NpbSIsITApO0coVSxrZSxFZSwiXHUyQTg1IiwiXFxsZXNzYXBwcm94IiwhMCk7RyhVLGtlLEVlLCJcdTIyNEEiLCJcXGFwcHJveGVxIiwhMCk7RyhVLGtlLEl0LCJcdTIyRDYiLCJcXGxlc3Nkb3QiKTtHKFUsa2UsRWUsIlx1MjJEOCIsIlxcbGxsIiwhMCk7RyhVLGtlLEVlLCJcdTIyNzYiLCJcXGxlc3NndHIiLCEwKTtHKFUsa2UsRWUsIlx1MjJEQSIsIlxcbGVzc2VxZ3RyIiwhMCk7RyhVLGtlLEVlLCJcdTJBOEIiLCJcXGxlc3NlcXFndHIiLCEwKTtHKFUsa2UsRWUsIlx1MjI1MSIsIlxcZG90ZXFkb3QiKTtHKFUsa2UsRWUsIlx1MjI1MyIsIlxccmlzaW5nZG90c2VxIiwhMCk7RyhVLGtlLEVlLCJcdTIyNTIiLCJcXGZhbGxpbmdkb3RzZXEiLCEwKTtHKFUsa2UsRWUsIlx1MjIzRCIsIlxcYmFja3NpbSIsITApO0coVSxrZSxFZSwiXHUyMkNEIiwiXFxiYWNrc2ltZXEiLCEwKTtHKFUsa2UsRWUsIlx1MkFDNSIsIlxcc3Vic2V0ZXFxIiwhMCk7RyhVLGtlLEVlLCJcdTIyRDAiLCJcXFN1YnNldCIsITApO0coVSxrZSxFZSwiXHUyMjhGIiwiXFxzcXN1YnNldCIsITApO0coVSxrZSxFZSwiXHUyMjdDIiwiXFxwcmVjY3VybHllcSIsITApO0coVSxrZSxFZSwiXHUyMkRFIiwiXFxjdXJseWVxcHJlYyIsITApO0coVSxrZSxFZSwiXHUyMjdFIiwiXFxwcmVjc2ltIiwhMCk7RyhVLGtlLEVlLCJcdTJBQjciLCJcXHByZWNhcHByb3giLCEwKTtHKFUsa2UsRWUsIlx1MjJCMiIsIlxcdmFydHJpYW5nbGVsZWZ0Iik7RyhVLGtlLEVlLCJcdTIyQjQiLCJcXHRyaWFuZ2xlbGVmdGVxIik7RyhVLGtlLEVlLCJcdTIyQTgiLCJcXHZEYXNoIiwhMCk7RyhVLGtlLEVlLCJcdTIyQUEiLCJcXFZ2ZGFzaCIsITApO0coVSxrZSxFZSwiXHUyMzIzIiwiXFxzbWFsbHNtaWxlIik7RyhVLGtlLEVlLCJcdTIzMjIiLCJcXHNtYWxsZnJvd24iKTtHKFUsa2UsRWUsIlx1MjI0RiIsIlxcYnVtcGVxIiwhMCk7RyhVLGtlLEVlLCJcdTIyNEUiLCJcXEJ1bXBlcSIsITApO0coVSxrZSxFZSwiXHUyMjY3IiwiXFxnZXFxIiwhMCk7RyhVLGtlLEVlLCJcdTJBN0UiLCJcXGdlcXNsYW50IiwhMCk7RyhVLGtlLEVlLCJcdTJBOTYiLCJcXGVxc2xhbnRndHIiLCEwKTtHKFUsa2UsRWUsIlx1MjI3MyIsIlxcZ3Ryc2ltIiwhMCk7RyhVLGtlLEVlLCJcdTJBODYiLCJcXGd0cmFwcHJveCIsITApO0coVSxrZSxJdCwiXHUyMkQ3IiwiXFxndHJkb3QiKTtHKFUsa2UsRWUsIlx1MjJEOSIsIlxcZ2dnIiwhMCk7RyhVLGtlLEVlLCJcdTIyNzciLCJcXGd0cmxlc3MiLCEwKTtHKFUsa2UsRWUsIlx1MjJEQiIsIlxcZ3RyZXFsZXNzIiwhMCk7RyhVLGtlLEVlLCJcdTJBOEMiLCJcXGd0cmVxcWxlc3MiLCEwKTtHKFUsa2UsRWUsIlx1MjI1NiIsIlxcZXFjaXJjIiwhMCk7RyhVLGtlLEVlLCJcdTIyNTciLCJcXGNpcmNlcSIsITApO0coVSxrZSxFZSwiXHUyMjVDIiwiXFx0cmlhbmdsZXEiLCEwKTtHKFUsa2UsRWUsIlx1MjIzQyIsIlxcdGhpY2tzaW0iKTtHKFUsa2UsRWUsIlx1MjI0OCIsIlxcdGhpY2thcHByb3giKTtHKFUsa2UsRWUsIlx1MkFDNiIsIlxcc3Vwc2V0ZXFxIiwhMCk7RyhVLGtlLEVlLCJcdTIyRDEiLCJcXFN1cHNldCIsITApO0coVSxrZSxFZSwiXHUyMjkwIiwiXFxzcXN1cHNldCIsITApO0coVSxrZSxFZSwiXHUyMjdEIiwiXFxzdWNjY3VybHllcSIsITApO0coVSxrZSxFZSwiXHUyMkRGIiwiXFxjdXJseWVxc3VjYyIsITApO0coVSxrZSxFZSwiXHUyMjdGIiwiXFxzdWNjc2ltIiwhMCk7RyhVLGtlLEVlLCJcdTJBQjgiLCJcXHN1Y2NhcHByb3giLCEwKTtHKFUsa2UsRWUsIlx1MjJCMyIsIlxcdmFydHJpYW5nbGVyaWdodCIpO0coVSxrZSxFZSwiXHUyMkI1IiwiXFx0cmlhbmdsZXJpZ2h0ZXEiKTtHKFUsa2UsRWUsIlx1MjJBOSIsIlxcVmRhc2giLCEwKTtHKFUsa2UsRWUsIlx1MjIyMyIsIlxcc2hvcnRtaWQiKTtHKFUsa2UsRWUsIlx1MjIyNSIsIlxcc2hvcnRwYXJhbGxlbCIpO0coVSxrZSxFZSwiXHUyMjZDIiwiXFxiZXR3ZWVuIiwhMCk7RyhVLGtlLEVlLCJcdTIyRDQiLCJcXHBpdGNoZm9yayIsITApO0coVSxrZSxFZSwiXHUyMjFEIiwiXFx2YXJwcm9wdG8iKTtHKFUsa2UsRWUsIlx1MjVDMCIsIlxcYmxhY2t0cmlhbmdsZWxlZnQiKTtHKFUsa2UsRWUsIlx1MjIzNCIsIlxcdGhlcmVmb3JlIiwhMCk7RyhVLGtlLEVlLCJcdTIyMEQiLCJcXGJhY2tlcHNpbG9uIik7RyhVLGtlLEVlLCJcdTI1QjYiLCJcXGJsYWNrdHJpYW5nbGVyaWdodCIpO0coVSxrZSxFZSwiXHUyMjM1IiwiXFxiZWNhdXNlIiwhMCk7RyhVLGtlLEVlLCJcdTIyRDgiLCJcXGxsbGVzcyIpO0coVSxrZSxFZSwiXHUyMkQ5IiwiXFxnZ2d0ciIpO0coVSxrZSxJdCwiXHUyMkIyIiwiXFxsaGQiKTtHKFUsa2UsSXQsIlx1MjJCMyIsIlxccmhkIik7RyhVLGtlLEVlLCJcdTIyNDIiLCJcXGVxc2ltIiwhMCk7RyhVLGVlLEVlLCJcdTIyQzgiLCJcXEpvaW4iKTtHKFUsa2UsRWUsIlx1MjI1MSIsIlxcRG90ZXEiLCEwKTtHKFUsa2UsSXQsIlx1MjIxNCIsIlxcZG90cGx1cyIsITApO0coVSxrZSxJdCwiXHUyMjE2IiwiXFxzbWFsbHNldG1pbnVzIik7RyhVLGtlLEl0LCJcdTIyRDIiLCJcXENhcCIsITApO0coVSxrZSxJdCwiXHUyMkQzIiwiXFxDdXAiLCEwKTtHKFUsa2UsSXQsIlx1MkE1RSIsIlxcZG91YmxlYmFyd2VkZ2UiLCEwKTtHKFUsa2UsSXQsIlx1MjI5RiIsIlxcYm94bWludXMiLCEwKTtHKFUsa2UsSXQsIlx1MjI5RSIsIlxcYm94cGx1cyIsITApO0coVSxrZSxJdCwiXHUyMkM3IiwiXFxkaXZpZGVvbnRpbWVzIiwhMCk7RyhVLGtlLEl0LCJcdTIyQzkiLCJcXGx0aW1lcyIsITApO0coVSxrZSxJdCwiXHUyMkNBIiwiXFxydGltZXMiLCEwKTtHKFUsa2UsSXQsIlx1MjJDQiIsIlxcbGVmdHRocmVldGltZXMiLCEwKTtHKFUsa2UsSXQsIlx1MjJDQyIsIlxccmlnaHR0aHJlZXRpbWVzIiwhMCk7RyhVLGtlLEl0LCJcdTIyQ0YiLCJcXGN1cmx5d2VkZ2UiLCEwKTtHKFUsa2UsSXQsIlx1MjJDRSIsIlxcY3VybHl2ZWUiLCEwKTtHKFUsa2UsSXQsIlx1MjI5RCIsIlxcY2lyY2xlZGRhc2giLCEwKTtHKFUsa2UsSXQsIlx1MjI5QiIsIlxcY2lyY2xlZGFzdCIsITApO0coVSxrZSxJdCwiXHUyMkM1IiwiXFxjZW50ZXJkb3QiKTtHKFUsa2UsSXQsIlx1MjJCQSIsIlxcaW50ZXJjYWwiLCEwKTtHKFUsa2UsSXQsIlx1MjJEMiIsIlxcZG91YmxlY2FwIik7RyhVLGtlLEl0LCJcdTIyRDMiLCJcXGRvdWJsZWN1cCIpO0coVSxrZSxJdCwiXHUyMkEwIiwiXFxib3h0aW1lcyIsITApO0coVSxrZSxFZSwiXHUyMUUyIiwiXFxkYXNocmlnaHRhcnJvdyIsITApO0coVSxrZSxFZSwiXHUyMUUwIiwiXFxkYXNobGVmdGFycm93IiwhMCk7RyhVLGtlLEVlLCJcdTIxQzciLCJcXGxlZnRsZWZ0YXJyb3dzIiwhMCk7RyhVLGtlLEVlLCJcdTIxQzYiLCJcXGxlZnRyaWdodGFycm93cyIsITApO0coVSxrZSxFZSwiXHUyMURBIiwiXFxMbGVmdGFycm93IiwhMCk7RyhVLGtlLEVlLCJcdTIxOUUiLCJcXHR3b2hlYWRsZWZ0YXJyb3ciLCEwKTtHKFUsa2UsRWUsIlx1MjFBMiIsIlxcbGVmdGFycm93dGFpbCIsITApO0coVSxrZSxFZSwiXHUyMUFCIiwiXFxsb29wYXJyb3dsZWZ0IiwhMCk7RyhVLGtlLEVlLCJcdTIxQ0IiLCJcXGxlZnRyaWdodGhhcnBvb25zIiwhMCk7RyhVLGtlLEVlLCJcdTIxQjYiLCJcXGN1cnZlYXJyb3dsZWZ0IiwhMCk7RyhVLGtlLEVlLCJcdTIxQkEiLCJcXGNpcmNsZWFycm93bGVmdCIsITApO0coVSxrZSxFZSwiXHUyMUIwIiwiXFxMc2giLCEwKTtHKFUsa2UsRWUsIlx1MjFDOCIsIlxcdXB1cGFycm93cyIsITApO0coVSxrZSxFZSwiXHUyMUJGIiwiXFx1cGhhcnBvb25sZWZ0IiwhMCk7RyhVLGtlLEVlLCJcdTIxQzMiLCJcXGRvd25oYXJwb29ubGVmdCIsITApO0coVSxlZSxFZSwiXHUyMkI2IiwiXFxvcmlnb2YiLCEwKTtHKFUsZWUsRWUsIlx1MjJCNyIsIlxcaW1hZ2VvZiIsITApO0coVSxrZSxFZSwiXHUyMkI4IiwiXFxtdWx0aW1hcCIsITApO0coVSxrZSxFZSwiXHUyMUFEIiwiXFxsZWZ0cmlnaHRzcXVpZ2Fycm93IiwhMCk7RyhVLGtlLEVlLCJcdTIxQzkiLCJcXHJpZ2h0cmlnaHRhcnJvd3MiLCEwKTtHKFUsa2UsRWUsIlx1MjFDNCIsIlxccmlnaHRsZWZ0YXJyb3dzIiwhMCk7RyhVLGtlLEVlLCJcdTIxQTAiLCJcXHR3b2hlYWRyaWdodGFycm93IiwhMCk7RyhVLGtlLEVlLCJcdTIxQTMiLCJcXHJpZ2h0YXJyb3d0YWlsIiwhMCk7RyhVLGtlLEVlLCJcdTIxQUMiLCJcXGxvb3BhcnJvd3JpZ2h0IiwhMCk7RyhVLGtlLEVlLCJcdTIxQjciLCJcXGN1cnZlYXJyb3dyaWdodCIsITApO0coVSxrZSxFZSwiXHUyMUJCIiwiXFxjaXJjbGVhcnJvd3JpZ2h0IiwhMCk7RyhVLGtlLEVlLCJcdTIxQjEiLCJcXFJzaCIsITApO0coVSxrZSxFZSwiXHUyMUNBIiwiXFxkb3duZG93bmFycm93cyIsITApO0coVSxrZSxFZSwiXHUyMUJFIiwiXFx1cGhhcnBvb25yaWdodCIsITApO0coVSxrZSxFZSwiXHUyMUMyIiwiXFxkb3duaGFycG9vbnJpZ2h0IiwhMCk7RyhVLGtlLEVlLCJcdTIxREQiLCJcXHJpZ2h0c3F1aWdhcnJvdyIsITApO0coVSxrZSxFZSwiXHUyMUREIiwiXFxsZWFkc3RvIik7RyhVLGtlLEVlLCJcdTIxREIiLCJcXFJyaWdodGFycm93IiwhMCk7RyhVLGtlLEVlLCJcdTIxQkUiLCJcXHJlc3RyaWN0aW9uIik7RyhVLGVlLExlLCJcdTIwMTgiLCJgIik7RyhVLGVlLExlLCIkIiwiXFwkIik7RyhpdCxlZSxMZSwiJCIsIlxcJCIpO0coaXQsZWUsTGUsIiQiLCJcXHRleHRkb2xsYXIiKTtHKFUsZWUsTGUsIiUiLCJcXCUiKTtHKGl0LGVlLExlLCIlIiwiXFwlIik7RyhVLGVlLExlLCJfIiwiXFxfIik7RyhpdCxlZSxMZSwiXyIsIlxcXyIpO0coaXQsZWUsTGUsIl8iLCJcXHRleHR1bmRlcnNjb3JlIik7RyhVLGVlLExlLCJcdTIyMjAiLCJcXGFuZ2xlIiwhMCk7RyhVLGVlLExlLCJcdTIyMUUiLCJcXGluZnR5IiwhMCk7RyhVLGVlLExlLCJcdTIwMzIiLCJcXHByaW1lIik7RyhVLGVlLExlLCJcdTI1QjMiLCJcXHRyaWFuZ2xlIik7RyhVLGVlLExlLCJcdTAzOTMiLCJcXEdhbW1hIiwhMCk7RyhVLGVlLExlLCJcdTAzOTQiLCJcXERlbHRhIiwhMCk7RyhVLGVlLExlLCJcdTAzOTgiLCJcXFRoZXRhIiwhMCk7RyhVLGVlLExlLCJcdTAzOUIiLCJcXExhbWJkYSIsITApO0coVSxlZSxMZSwiXHUwMzlFIiwiXFxYaSIsITApO0coVSxlZSxMZSwiXHUwM0EwIiwiXFxQaSIsITApO0coVSxlZSxMZSwiXHUwM0EzIiwiXFxTaWdtYSIsITApO0coVSxlZSxMZSwiXHUwM0E1IiwiXFxVcHNpbG9uIiwhMCk7RyhVLGVlLExlLCJcdTAzQTYiLCJcXFBoaSIsITApO0coVSxlZSxMZSwiXHUwM0E4IiwiXFxQc2kiLCEwKTtHKFUsZWUsTGUsIlx1MDNBOSIsIlxcT21lZ2EiLCEwKTtHKFUsZWUsTGUsIkEiLCJcdTAzOTEiKTtHKFUsZWUsTGUsIkIiLCJcdTAzOTIiKTtHKFUsZWUsTGUsIkUiLCJcdTAzOTUiKTtHKFUsZWUsTGUsIloiLCJcdTAzOTYiKTtHKFUsZWUsTGUsIkgiLCJcdTAzOTciKTtHKFUsZWUsTGUsIkkiLCJcdTAzOTkiKTtHKFUsZWUsTGUsIksiLCJcdTAzOUEiKTtHKFUsZWUsTGUsIk0iLCJcdTAzOUMiKTtHKFUsZWUsTGUsIk4iLCJcdTAzOUQiKTtHKFUsZWUsTGUsIk8iLCJcdTAzOUYiKTtHKFUsZWUsTGUsIlAiLCJcdTAzQTEiKTtHKFUsZWUsTGUsIlQiLCJcdTAzQTQiKTtHKFUsZWUsTGUsIlgiLCJcdTAzQTciKTtHKFUsZWUsTGUsIlx4QUMiLCJcXG5lZyIsITApO0coVSxlZSxMZSwiXHhBQyIsIlxcbG5vdCIpO0coVSxlZSxMZSwiXHUyMkE0IiwiXFx0b3AiKTtHKFUsZWUsTGUsIlx1MjJBNSIsIlxcYm90Iik7RyhVLGVlLExlLCJcdTIyMDUiLCJcXGVtcHR5c2V0Iik7RyhVLGtlLExlLCJcdTIyMDUiLCJcXHZhcm5vdGhpbmciKTtHKFUsZWUsZXIsIlx1MDNCMSIsIlxcYWxwaGEiLCEwKTtHKFUsZWUsZXIsIlx1MDNCMiIsIlxcYmV0YSIsITApO0coVSxlZSxlciwiXHUwM0IzIiwiXFxnYW1tYSIsITApO0coVSxlZSxlciwiXHUwM0I0IiwiXFxkZWx0YSIsITApO0coVSxlZSxlciwiXHUwM0Y1IiwiXFxlcHNpbG9uIiwhMCk7RyhVLGVlLGVyLCJcdTAzQjYiLCJcXHpldGEiLCEwKTtHKFUsZWUsZXIsIlx1MDNCNyIsIlxcZXRhIiwhMCk7RyhVLGVlLGVyLCJcdTAzQjgiLCJcXHRoZXRhIiwhMCk7RyhVLGVlLGVyLCJcdTAzQjkiLCJcXGlvdGEiLCEwKTtHKFUsZWUsZXIsIlx1MDNCQSIsIlxca2FwcGEiLCEwKTtHKFUsZWUsZXIsIlx1MDNCQiIsIlxcbGFtYmRhIiwhMCk7RyhVLGVlLGVyLCJcdTAzQkMiLCJcXG11IiwhMCk7RyhVLGVlLGVyLCJcdTAzQkQiLCJcXG51IiwhMCk7RyhVLGVlLGVyLCJcdTAzQkUiLCJcXHhpIiwhMCk7RyhVLGVlLGVyLCJcdTAzQkYiLCJcXG9taWNyb24iLCEwKTtHKFUsZWUsZXIsIlx1MDNDMCIsIlxccGkiLCEwKTtHKFUsZWUsZXIsIlx1MDNDMSIsIlxccmhvIiwhMCk7RyhVLGVlLGVyLCJcdTAzQzMiLCJcXHNpZ21hIiwhMCk7RyhVLGVlLGVyLCJcdTAzQzQiLCJcXHRhdSIsITApO0coVSxlZSxlciwiXHUwM0M1IiwiXFx1cHNpbG9uIiwhMCk7RyhVLGVlLGVyLCJcdTAzRDUiLCJcXHBoaSIsITApO0coVSxlZSxlciwiXHUwM0M3IiwiXFxjaGkiLCEwKTtHKFUsZWUsZXIsIlx1MDNDOCIsIlxccHNpIiwhMCk7RyhVLGVlLGVyLCJcdTAzQzkiLCJcXG9tZWdhIiwhMCk7RyhVLGVlLGVyLCJcdTAzQjUiLCJcXHZhcmVwc2lsb24iLCEwKTtHKFUsZWUsZXIsIlx1MDNEMSIsIlxcdmFydGhldGEiLCEwKTtHKFUsZWUsZXIsIlx1MDNENiIsIlxcdmFycGkiLCEwKTtHKFUsZWUsZXIsIlx1MDNGMSIsIlxcdmFycmhvIiwhMCk7RyhVLGVlLGVyLCJcdTAzQzIiLCJcXHZhcnNpZ21hIiwhMCk7RyhVLGVlLGVyLCJcdTAzQzYiLCJcXHZhcnBoaSIsITApO0coVSxlZSxJdCwiXHUyMjE3IiwiKiIsITApO0coVSxlZSxJdCwiKyIsIisiKTtHKFUsZWUsSXQsIlx1MjIxMiIsIi0iLCEwKTtHKFUsZWUsSXQsIlx1MjJDNSIsIlxcY2RvdCIsITApO0coVSxlZSxJdCwiXHUyMjE4IiwiXFxjaXJjIiwhMCk7RyhVLGVlLEl0LCJceEY3IiwiXFxkaXYiLCEwKTtHKFUsZWUsSXQsIlx4QjEiLCJcXHBtIiwhMCk7RyhVLGVlLEl0LCJceEQ3IiwiXFx0aW1lcyIsITApO0coVSxlZSxJdCwiXHUyMjI5IiwiXFxjYXAiLCEwKTtHKFUsZWUsSXQsIlx1MjIyQSIsIlxcY3VwIiwhMCk7RyhVLGVlLEl0LCJcdTIyMTYiLCJcXHNldG1pbnVzIiwhMCk7RyhVLGVlLEl0LCJcdTIyMjciLCJcXGxhbmQiKTtHKFUsZWUsSXQsIlx1MjIyOCIsIlxcbG9yIik7RyhVLGVlLEl0LCJcdTIyMjciLCJcXHdlZGdlIiwhMCk7RyhVLGVlLEl0LCJcdTIyMjgiLCJcXHZlZSIsITApO0coVSxlZSxMZSwiXHUyMjFBIiwiXFxzdXJkIik7RyhVLGVlLGpzLCJcdTI3RTgiLCJcXGxhbmdsZSIsITApO0coVSxlZSxqcywiXHUyMjIzIiwiXFxsdmVydCIpO0coVSxlZSxqcywiXHUyMjI1IiwiXFxsVmVydCIpO0coVSxlZSxaYSwiPyIsIj8iKTtHKFUsZWUsWmEsIiEiLCIhIik7RyhVLGVlLFphLCJcdTI3RTkiLCJcXHJhbmdsZSIsITApO0coVSxlZSxaYSwiXHUyMjIzIiwiXFxydmVydCIpO0coVSxlZSxaYSwiXHUyMjI1IiwiXFxyVmVydCIpO0coVSxlZSxFZSwiPSIsIj0iKTtHKFUsZWUsRWUsIjoiLCI6Iik7RyhVLGVlLEVlLCJcdTIyNDgiLCJcXGFwcHJveCIsITApO0coVSxlZSxFZSwiXHUyMjQ1IiwiXFxjb25nIiwhMCk7RyhVLGVlLEVlLCJcdTIyNjUiLCJcXGdlIik7RyhVLGVlLEVlLCJcdTIyNjUiLCJcXGdlcSIsITApO0coVSxlZSxFZSwiXHUyMTkwIiwiXFxnZXRzIik7RyhVLGVlLEVlLCI+IiwiXFxndCIsITApO0coVSxlZSxFZSwiXHUyMjA4IiwiXFxpbiIsITApO0coVSxlZSxFZSwiXHVFMDIwIiwiXFxAbm90Iik7RyhVLGVlLEVlLCJcdTIyODIiLCJcXHN1YnNldCIsITApO0coVSxlZSxFZSwiXHUyMjgzIiwiXFxzdXBzZXQiLCEwKTtHKFUsZWUsRWUsIlx1MjI4NiIsIlxcc3Vic2V0ZXEiLCEwKTtHKFUsZWUsRWUsIlx1MjI4NyIsIlxcc3Vwc2V0ZXEiLCEwKTtHKFUsa2UsRWUsIlx1MjI4OCIsIlxcbnN1YnNldGVxIiwhMCk7RyhVLGtlLEVlLCJcdTIyODkiLCJcXG5zdXBzZXRlcSIsITApO0coVSxlZSxFZSwiXHUyMkE4IiwiXFxtb2RlbHMiKTtHKFUsZWUsRWUsIlx1MjE5MCIsIlxcbGVmdGFycm93IiwhMCk7RyhVLGVlLEVlLCJcdTIyNjQiLCJcXGxlIik7RyhVLGVlLEVlLCJcdTIyNjQiLCJcXGxlcSIsITApO0coVSxlZSxFZSwiPCIsIlxcbHQiLCEwKTtHKFUsZWUsRWUsIlx1MjE5MiIsIlxccmlnaHRhcnJvdyIsITApO0coVSxlZSxFZSwiXHUyMTkyIiwiXFx0byIpO0coVSxrZSxFZSwiXHUyMjcxIiwiXFxuZ2VxIiwhMCk7RyhVLGtlLEVlLCJcdTIyNzAiLCJcXG5sZXEiLCEwKTtHKFUsZWUsdXUsIlx4QTAiLCJcXCAiKTtHKFUsZWUsdXUsIlx4QTAiLCJcXHNwYWNlIik7RyhVLGVlLHV1LCJceEEwIiwiXFxub2JyZWFrc3BhY2UiKTtHKGl0LGVlLHV1LCJceEEwIiwiXFwgIik7RyhpdCxlZSx1dSwiXHhBMCIsIiAiKTtHKGl0LGVlLHV1LCJceEEwIiwiXFxzcGFjZSIpO0coaXQsZWUsdXUsIlx4QTAiLCJcXG5vYnJlYWtzcGFjZSIpO0coVSxlZSx1dSxudWxsLCJcXG5vYnJlYWsiKTtHKFUsZWUsdXUsbnVsbCwiXFxhbGxvd2JyZWFrIik7RyhVLGVlLHgzLCIsIiwiLCIpO0coVSxlZSx4MywiOyIsIjsiKTtHKFUsa2UsSXQsIlx1MjJCQyIsIlxcYmFyd2VkZ2UiLCEwKTtHKFUsa2UsSXQsIlx1MjJCQiIsIlxcdmVlYmFyIiwhMCk7RyhVLGVlLEl0LCJcdTIyOTkiLCJcXG9kb3QiLCEwKTtHKFUsZWUsSXQsIlx1MjI5NSIsIlxcb3BsdXMiLCEwKTtHKFUsZWUsSXQsIlx1MjI5NyIsIlxcb3RpbWVzIiwhMCk7RyhVLGVlLExlLCJcdTIyMDIiLCJcXHBhcnRpYWwiLCEwKTtHKFUsZWUsSXQsIlx1MjI5OCIsIlxcb3NsYXNoIiwhMCk7RyhVLGtlLEl0LCJcdTIyOUEiLCJcXGNpcmNsZWRjaXJjIiwhMCk7RyhVLGtlLEl0LCJcdTIyQTEiLCJcXGJveGRvdCIsITApO0coVSxlZSxJdCwiXHUyNUIzIiwiXFxiaWd0cmlhbmdsZXVwIik7RyhVLGVlLEl0LCJcdTI1QkQiLCJcXGJpZ3RyaWFuZ2xlZG93biIpO0coVSxlZSxJdCwiXHUyMDIwIiwiXFxkYWdnZXIiKTtHKFUsZWUsSXQsIlx1MjJDNCIsIlxcZGlhbW9uZCIpO0coVSxlZSxJdCwiXHUyMkM2IiwiXFxzdGFyIik7RyhVLGVlLEl0LCJcdTI1QzMiLCJcXHRyaWFuZ2xlbGVmdCIpO0coVSxlZSxJdCwiXHUyNUI5IiwiXFx0cmlhbmdsZXJpZ2h0Iik7RyhVLGVlLGpzLCJ7IiwiXFx7Iik7RyhpdCxlZSxMZSwieyIsIlxceyIpO0coaXQsZWUsTGUsInsiLCJcXHRleHRicmFjZWxlZnQiKTtHKFUsZWUsWmEsIn0iLCJcXH0iKTtHKGl0LGVlLExlLCJ9IiwiXFx9Iik7RyhpdCxlZSxMZSwifSIsIlxcdGV4dGJyYWNlcmlnaHQiKTtHKFUsZWUsanMsInsiLCJcXGxicmFjZSIpO0coVSxlZSxaYSwifSIsIlxccmJyYWNlIik7RyhVLGVlLGpzLCJbIiwiXFxsYnJhY2siLCEwKTtHKGl0LGVlLExlLCJbIiwiXFxsYnJhY2siLCEwKTtHKFUsZWUsWmEsIl0iLCJcXHJicmFjayIsITApO0coaXQsZWUsTGUsIl0iLCJcXHJicmFjayIsITApO0coVSxlZSxqcywiKCIsIlxcbHBhcmVuIiwhMCk7RyhVLGVlLFphLCIpIiwiXFxycGFyZW4iLCEwKTtHKGl0LGVlLExlLCI8IiwiXFx0ZXh0bGVzcyIsITApO0coaXQsZWUsTGUsIj4iLCJcXHRleHRncmVhdGVyIiwhMCk7RyhVLGVlLGpzLCJcdTIzMEEiLCJcXGxmbG9vciIsITApO0coVSxlZSxaYSwiXHUyMzBCIiwiXFxyZmxvb3IiLCEwKTtHKFUsZWUsanMsIlx1MjMwOCIsIlxcbGNlaWwiLCEwKTtHKFUsZWUsWmEsIlx1MjMwOSIsIlxccmNlaWwiLCEwKTtHKFUsZWUsTGUsIlxcIiwiXFxiYWNrc2xhc2giKTtHKFUsZWUsTGUsIlx1MjIyMyIsInwiKTtHKFUsZWUsTGUsIlx1MjIyMyIsIlxcdmVydCIpO0coaXQsZWUsTGUsInwiLCJcXHRleHRiYXIiLCEwKTtHKFUsZWUsTGUsIlx1MjIyNSIsIlxcfCIpO0coVSxlZSxMZSwiXHUyMjI1IiwiXFxWZXJ0Iik7RyhpdCxlZSxMZSwiXHUyMjI1IiwiXFx0ZXh0YmFyZGJsIik7RyhpdCxlZSxMZSwifiIsIlxcdGV4dGFzY2lpdGlsZGUiKTtHKGl0LGVlLExlLCJcXCIsIlxcdGV4dGJhY2tzbGFzaCIpO0coaXQsZWUsTGUsIl4iLCJcXHRleHRhc2NpaWNpcmN1bSIpO0coVSxlZSxFZSwiXHUyMTkxIiwiXFx1cGFycm93IiwhMCk7RyhVLGVlLEVlLCJcdTIxRDEiLCJcXFVwYXJyb3ciLCEwKTtHKFUsZWUsRWUsIlx1MjE5MyIsIlxcZG93bmFycm93IiwhMCk7RyhVLGVlLEVlLCJcdTIxRDMiLCJcXERvd25hcnJvdyIsITApO0coVSxlZSxFZSwiXHUyMTk1IiwiXFx1cGRvd25hcnJvdyIsITApO0coVSxlZSxFZSwiXHUyMUQ1IiwiXFxVcGRvd25hcnJvdyIsITApO0coVSxlZSxraSwiXHUyMjEwIiwiXFxjb3Byb2QiKTtHKFUsZWUsa2ksIlx1MjJDMSIsIlxcYmlndmVlIik7RyhVLGVlLGtpLCJcdTIyQzAiLCJcXGJpZ3dlZGdlIik7RyhVLGVlLGtpLCJcdTJBMDQiLCJcXGJpZ3VwbHVzIik7RyhVLGVlLGtpLCJcdTIyQzIiLCJcXGJpZ2NhcCIpO0coVSxlZSxraSwiXHUyMkMzIiwiXFxiaWdjdXAiKTtHKFUsZWUsa2ksIlx1MjIyQiIsIlxcaW50Iik7RyhVLGVlLGtpLCJcdTIyMkIiLCJcXGludG9wIik7RyhVLGVlLGtpLCJcdTIyMkMiLCJcXGlpbnQiKTtHKFUsZWUsa2ksIlx1MjIyRCIsIlxcaWlpbnQiKTtHKFUsZWUsa2ksIlx1MjIwRiIsIlxccHJvZCIpO0coVSxlZSxraSwiXHUyMjExIiwiXFxzdW0iKTtHKFUsZWUsa2ksIlx1MkEwMiIsIlxcYmlnb3RpbWVzIik7RyhVLGVlLGtpLCJcdTJBMDEiLCJcXGJpZ29wbHVzIik7RyhVLGVlLGtpLCJcdTJBMDAiLCJcXGJpZ29kb3QiKTtHKFUsZWUsa2ksIlx1MjIyRSIsIlxcb2ludCIpO0coVSxlZSxraSwiXHUyMjJGIiwiXFxvaWludCIpO0coVSxlZSxraSwiXHUyMjMwIiwiXFxvaWlpbnQiKTtHKFUsZWUsa2ksIlx1MkEwNiIsIlxcYmlnc3FjdXAiKTtHKFUsZWUsa2ksIlx1MjIyQiIsIlxcc21hbGxpbnQiKTtHKGl0LGVlLHAwLCJcdTIwMjYiLCJcXHRleHRlbGxpcHNpcyIpO0coVSxlZSxwMCwiXHUyMDI2IiwiXFxtYXRoZWxsaXBzaXMiKTtHKGl0LGVlLHAwLCJcdTIwMjYiLCJcXGxkb3RzIiwhMCk7RyhVLGVlLHAwLCJcdTIwMjYiLCJcXGxkb3RzIiwhMCk7RyhVLGVlLHAwLCJcdTIyRUYiLCJcXEBjZG90cyIsITApO0coVSxlZSxwMCwiXHUyMkYxIiwiXFxkZG90cyIsITApO0coVSxlZSxMZSwiXHUyMkVFIiwiXFx2YXJ2ZG90cyIpO0coVSxlZSxWbiwiXHUwMkNBIiwiXFxhY3V0ZSIpO0coVSxlZSxWbiwiXHUwMkNCIiwiXFxncmF2ZSIpO0coVSxlZSxWbiwiXHhBOCIsIlxcZGRvdCIpO0coVSxlZSxWbiwifiIsIlxcdGlsZGUiKTtHKFUsZWUsVm4sIlx1MDJDOSIsIlxcYmFyIik7RyhVLGVlLFZuLCJcdTAyRDgiLCJcXGJyZXZlIik7RyhVLGVlLFZuLCJcdTAyQzciLCJcXGNoZWNrIik7RyhVLGVlLFZuLCJeIiwiXFxoYXQiKTtHKFUsZWUsVm4sIlx1MjBENyIsIlxcdmVjIik7RyhVLGVlLFZuLCJcdTAyRDkiLCJcXGRvdCIpO0coVSxlZSxWbiwiXHUwMkRBIiwiXFxtYXRocmluZyIpO0coVSxlZSxlciwiXHVFMTMxIiwiXFxAaW1hdGgiKTtHKFUsZWUsZXIsIlx1RTIzNyIsIlxcQGptYXRoIik7RyhVLGVlLExlLCJcdTAxMzEiLCJcdTAxMzEiKTtHKFUsZWUsTGUsIlx1MDIzNyIsIlx1MDIzNyIpO0coaXQsZWUsTGUsIlx1MDEzMSIsIlxcaSIsITApO0coaXQsZWUsTGUsIlx1MDIzNyIsIlxcaiIsITApO0coaXQsZWUsTGUsIlx4REYiLCJcXHNzIiwhMCk7RyhpdCxlZSxMZSwiXHhFNiIsIlxcYWUiLCEwKTtHKGl0LGVlLExlLCJcdTAxNTMiLCJcXG9lIiwhMCk7RyhpdCxlZSxMZSwiXHhGOCIsIlxcbyIsITApO0coaXQsZWUsTGUsIlx4QzYiLCJcXEFFIiwhMCk7RyhpdCxlZSxMZSwiXHUwMTUyIiwiXFxPRSIsITApO0coaXQsZWUsTGUsIlx4RDgiLCJcXE8iLCEwKTtHKGl0LGVlLFZuLCJcdTAyQ0EiLCJcXCciKTtHKGl0LGVlLFZuLCJcdTAyQ0IiLCJcXGAiKTtHKGl0LGVlLFZuLCJcdTAyQzYiLCJcXF4iKTtHKGl0LGVlLFZuLCJcdTAyREMiLCJcXH4iKTtHKGl0LGVlLFZuLCJcdTAyQzkiLCJcXD0iKTtHKGl0LGVlLFZuLCJcdTAyRDgiLCJcXHUiKTtHKGl0LGVlLFZuLCJcdTAyRDkiLCJcXC4iKTtHKGl0LGVlLFZuLCJceEI4IiwiXFxjIik7RyhpdCxlZSxWbiwiXHUwMkRBIiwiXFxyIik7RyhpdCxlZSxWbiwiXHUwMkM3IiwiXFx2Iik7RyhpdCxlZSxWbiwiXHhBOCIsJ1xcIicpO0coaXQsZWUsVm4sIlx1MDJERCIsIlxcSCIpO0coaXQsZWUsVm4sIlx1MjVFRiIsIlxcdGV4dGNpcmNsZWQiKTtIej17Ii0tIjohMCwiLS0tIjohMCwiYGAiOiEwLCInJyI6ITB9O0coaXQsZWUsTGUsIlx1MjAxMyIsIi0tIiwhMCk7RyhpdCxlZSxMZSwiXHUyMDEzIiwiXFx0ZXh0ZW5kYXNoIik7RyhpdCxlZSxMZSwiXHUyMDE0IiwiLS0tIiwhMCk7RyhpdCxlZSxMZSwiXHUyMDE0IiwiXFx0ZXh0ZW1kYXNoIik7RyhpdCxlZSxMZSwiXHUyMDE4IiwiYCIsITApO0coaXQsZWUsTGUsIlx1MjAxOCIsIlxcdGV4dHF1b3RlbGVmdCIpO0coaXQsZWUsTGUsIlx1MjAxOSIsIiciLCEwKTtHKGl0LGVlLExlLCJcdTIwMTkiLCJcXHRleHRxdW90ZXJpZ2h0Iik7RyhpdCxlZSxMZSwiXHUyMDFDIiwiYGAiLCEwKTtHKGl0LGVlLExlLCJcdTIwMUMiLCJcXHRleHRxdW90ZWRibGxlZnQiKTtHKGl0LGVlLExlLCJcdTIwMUQiLCInJyIsITApO0coaXQsZWUsTGUsIlx1MjAxRCIsIlxcdGV4dHF1b3RlZGJscmlnaHQiKTtHKFUsZWUsTGUsIlx4QjAiLCJcXGRlZ3JlZSIsITApO0coaXQsZWUsTGUsIlx4QjAiLCJcXGRlZ3JlZSIpO0coaXQsZWUsTGUsIlx4QjAiLCJcXHRleHRkZWdyZWUiLCEwKTtHKFUsZWUsTGUsIlx4QTMiLCJcXHBvdW5kcyIpO0coVSxlZSxMZSwiXHhBMyIsIlxcbWF0aHN0ZXJsaW5nIiwhMCk7RyhpdCxlZSxMZSwiXHhBMyIsIlxccG91bmRzIik7RyhpdCxlZSxMZSwiXHhBMyIsIlxcdGV4dHN0ZXJsaW5nIiwhMCk7RyhVLGtlLExlLCJcdTI3MjAiLCJcXG1hbHRlc2UiKTtHKGl0LGtlLExlLCJcdTI3MjAiLCJcXG1hbHRlc2UiKTtmej0nMDEyMzQ1Njc4OS9ALiInO2ZvcihKND0wO0o0PGZ6Lmxlbmd0aDtKNCsrKWY3PWZ6LmNoYXJBdChKNCksRyhVLGVlLExlLGY3LGY3KTtkej0nMDEyMzQ1Njc4OSFAKigpLT0rIjs6Py8uLCc7Zm9yKGUzPTA7ZTM8ZHoubGVuZ3RoO2UzKyspZDc9ZHouY2hhckF0KGUzKSxHKGl0LGVlLExlLGQ3LGQ3KTtkMz0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiI7Zm9yKHQzPTA7dDM8ZDMubGVuZ3RoO3QzKyspUHk9ZDMuY2hhckF0KHQzKSxHKFUsZWUsZXIsUHksUHkpLEcoaXQsZWUsTGUsUHksUHkpO0coVSxrZSxMZSwiQyIsIlx1MjEwMiIpO0coaXQsa2UsTGUsIkMiLCJcdTIxMDIiKTtHKFUsa2UsTGUsIkgiLCJcdTIxMEQiKTtHKGl0LGtlLExlLCJIIiwiXHUyMTBEIik7RyhVLGtlLExlLCJOIiwiXHUyMTE1Iik7RyhpdCxrZSxMZSwiTiIsIlx1MjExNSIpO0coVSxrZSxMZSwiUCIsIlx1MjExOSIpO0coaXQsa2UsTGUsIlAiLCJcdTIxMTkiKTtHKFUsa2UsTGUsIlEiLCJcdTIxMUEiKTtHKGl0LGtlLExlLCJRIiwiXHUyMTFBIik7RyhVLGtlLExlLCJSIiwiXHUyMTFEIik7RyhpdCxrZSxMZSwiUiIsIlx1MjExRCIpO0coVSxrZSxMZSwiWiIsIlx1MjEyNCIpO0coaXQsa2UsTGUsIloiLCJcdTIxMjQiKTtHKFUsZWUsZXIsImgiLCJcdTIxMEUiKTtHKGl0LGVlLGVyLCJoIiwiXHUyMTBFIik7c3I9IiI7Zm9yKENhPTA7Q2E8ZDMubGVuZ3RoO0NhKyspSm49ZDMuY2hhckF0KENhKSxzcj1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1MzQ5LDU2MzIwK0NhKSxHKFUsZWUsZXIsSm4sc3IpLEcoaXQsZWUsTGUsSm4sc3IpLHNyPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUzNDksNTYzNzIrQ2EpLEcoVSxlZSxlcixKbixzciksRyhpdCxlZSxMZSxKbixzciksc3I9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTM0OSw1NjQyNCtDYSksRyhVLGVlLGVyLEpuLHNyKSxHKGl0LGVlLExlLEpuLHNyKSxzcj1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1MzQ5LDU2NTgwK0NhKSxHKFUsZWUsZXIsSm4sc3IpLEcoaXQsZWUsTGUsSm4sc3IpLHNyPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUzNDksNTY2ODQrQ2EpLEcoVSxlZSxlcixKbixzciksRyhpdCxlZSxMZSxKbixzciksc3I9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTM0OSw1NjczNitDYSksRyhVLGVlLGVyLEpuLHNyKSxHKGl0LGVlLExlLEpuLHNyKSxzcj1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1MzQ5LDU2Nzg4K0NhKSxHKFUsZWUsZXIsSm4sc3IpLEcoaXQsZWUsTGUsSm4sc3IpLHNyPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUzNDksNTY4NDArQ2EpLEcoVSxlZSxlcixKbixzciksRyhpdCxlZSxMZSxKbixzciksc3I9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTM0OSw1Njk0NCtDYSksRyhVLGVlLGVyLEpuLHNyKSxHKGl0LGVlLExlLEpuLHNyKSxDYTwyNiYmKHNyPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUzNDksNTY2MzIrQ2EpLEcoVSxlZSxlcixKbixzciksRyhpdCxlZSxMZSxKbixzciksc3I9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTM0OSw1NjQ3NitDYSksRyhVLGVlLGVyLEpuLHNyKSxHKGl0LGVlLExlLEpuLHNyKSk7c3I9Ilx1ezFENTVDfSI7RyhVLGVlLGVyLCJrIixzcik7RyhpdCxlZSxMZSwiayIsc3IpO2Zvcih1aD0wO3VoPDEwO3VoKyspaXU9dWgudG9TdHJpbmcoKSxzcj1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1MzQ5LDU3Mjk0K3VoKSxHKFUsZWUsZXIsaXUsc3IpLEcoaXQsZWUsTGUsaXUsc3IpLHNyPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUzNDksNTczMTQrdWgpLEcoVSxlZSxlcixpdSxzciksRyhpdCxlZSxMZSxpdSxzciksc3I9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTM0OSw1NzMyNCt1aCksRyhVLGVlLGVyLGl1LHNyKSxHKGl0LGVlLExlLGl1LHNyKSxzcj1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1MzQ5LDU3MzM0K3VoKSxHKFUsZWUsZXIsaXUsc3IpLEcoaXQsZWUsTGUsaXUsc3IpO0M3PSJceEQwXHhERVx4RkUiO2ZvcihyMz0wO3IzPEM3Lmxlbmd0aDtyMysrKUJ5PUM3LmNoYXJBdChyMyksRyhVLGVlLGVyLEJ5LEJ5KSxHKGl0LGVlLExlLEJ5LEJ5KTtuMz1bWyJtYXRoYmYiLCJ0ZXh0YmYiLCJNYWluLUJvbGQiXSxbIm1hdGhiZiIsInRleHRiZiIsIk1haW4tQm9sZCJdLFsibWF0aG5vcm1hbCIsInRleHRpdCIsIk1hdGgtSXRhbGljIl0sWyJtYXRobm9ybWFsIiwidGV4dGl0IiwiTWF0aC1JdGFsaWMiXSxbImJvbGRzeW1ib2wiLCJib2xkc3ltYm9sIiwiTWFpbi1Cb2xkSXRhbGljIl0sWyJib2xkc3ltYm9sIiwiYm9sZHN5bWJvbCIsIk1haW4tQm9sZEl0YWxpYyJdLFsibWF0aHNjciIsInRleHRzY3IiLCJTY3JpcHQtUmVndWxhciJdLFsiIiwiIiwiIl0sWyIiLCIiLCIiXSxbIiIsIiIsIiJdLFsibWF0aGZyYWsiLCJ0ZXh0ZnJhayIsIkZyYWt0dXItUmVndWxhciJdLFsibWF0aGZyYWsiLCJ0ZXh0ZnJhayIsIkZyYWt0dXItUmVndWxhciJdLFsibWF0aGJiIiwidGV4dGJiIiwiQU1TLVJlZ3VsYXIiXSxbIm1hdGhiYiIsInRleHRiYiIsIkFNUy1SZWd1bGFyIl0sWyJtYXRoYm9sZGZyYWsiLCJ0ZXh0Ym9sZGZyYWsiLCJGcmFrdHVyLVJlZ3VsYXIiXSxbIm1hdGhib2xkZnJhayIsInRleHRib2xkZnJhayIsIkZyYWt0dXItUmVndWxhciJdLFsibWF0aHNmIiwidGV4dHNmIiwiU2Fuc1NlcmlmLVJlZ3VsYXIiXSxbIm1hdGhzZiIsInRleHRzZiIsIlNhbnNTZXJpZi1SZWd1bGFyIl0sWyJtYXRoYm9sZHNmIiwidGV4dGJvbGRzZiIsIlNhbnNTZXJpZi1Cb2xkIl0sWyJtYXRoYm9sZHNmIiwidGV4dGJvbGRzZiIsIlNhbnNTZXJpZi1Cb2xkIl0sWyJtYXRoaXRzZiIsInRleHRpdHNmIiwiU2Fuc1NlcmlmLUl0YWxpYyJdLFsibWF0aGl0c2YiLCJ0ZXh0aXRzZiIsIlNhbnNTZXJpZi1JdGFsaWMiXSxbIiIsIiIsIiJdLFsiIiwiIiwiIl0sWyJtYXRodHQiLCJ0ZXh0dHQiLCJUeXBld3JpdGVyLVJlZ3VsYXIiXSxbIm1hdGh0dCIsInRleHR0dCIsIlR5cGV3cml0ZXItUmVndWxhciJdXSxwej1bWyJtYXRoYmYiLCJ0ZXh0YmYiLCJNYWluLUJvbGQiXSxbIiIsIiIsIiJdLFsibWF0aHNmIiwidGV4dHNmIiwiU2Fuc1NlcmlmLVJlZ3VsYXIiXSxbIm1hdGhib2xkc2YiLCJ0ZXh0Ym9sZHNmIiwiU2Fuc1NlcmlmLUJvbGQiXSxbIm1hdGh0dCIsInRleHR0dCIsIlR5cGV3cml0ZXItUmVndWxhciJdXSxPYmU9byhmdW5jdGlvbihlLHIpe3ZhciBuPWUuY2hhckNvZGVBdCgwKSxpPWUuY2hhckNvZGVBdCgxKSxhPShuLTU1Mjk2KSoxMDI0KyhpLTU2MzIwKSs2NTUzNixzPXI9PT0ibWF0aCI/MDoxO2lmKDExOTgwODw9YSYmYTwxMjA0ODQpe3ZhciBsPU1hdGguZmxvb3IoKGEtMTE5ODA4KS8yNik7cmV0dXJuW24zW2xdWzJdLG4zW2xdW3NdXX1lbHNlIGlmKDEyMDc4Mjw9YSYmYTw9MTIwODMxKXt2YXIgdT1NYXRoLmZsb29yKChhLTEyMDc4MikvMTApO3JldHVybltwelt1XVsyXSxwelt1XVtzXV19ZWxzZXtpZihhPT09MTIwNDg1fHxhPT09MTIwNDg2KXJldHVybltuM1swXVsyXSxuM1swXVtzXV07aWYoMTIwNDg2PGEmJmE8MTIwNzgyKXJldHVyblsiIiwiIl07dGhyb3cgbmV3IGd0KCJVbnN1cHBvcnRlZCBjaGFyYWN0ZXI6ICIrZSl9fSwid2lkZUNoYXJhY3RlckZvbnQiKSxiMz1vKGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gQW5bbl1bZV0mJkFuW25dW2VdLnJlcGxhY2UmJihlPUFuW25dW2VdLnJlcGxhY2UpLHt2YWx1ZTplLG1ldHJpY3M6UDcoZSxyLG4pfX0sImxvb2t1cFN5bWJvbCIpLG9sPW8oZnVuY3Rpb24oZSxyLG4saSxhKXt2YXIgcz1iMyhlLHIsbiksbD1zLm1ldHJpY3M7ZT1zLnZhbHVlO3ZhciB1O2lmKGwpe3ZhciBoPWwuaXRhbGljOyhuPT09InRleHQifHxpJiZpLmZvbnQ9PT0ibWF0aGl0IikmJihoPTApLHU9bmV3IFRzKGUsbC5oZWlnaHQsbC5kZXB0aCxoLGwuc2tldyxsLndpZHRoLGEpfWVsc2UgdHlwZW9mIGNvbnNvbGU8InUiJiZjb25zb2xlLndhcm4oIk5vIGNoYXJhY3RlciBtZXRyaWNzICIrKCJmb3IgJyIrZSsiJyBpbiBzdHlsZSAnIityKyInIGFuZCBtb2RlICciK24rIiciKSksdT1uZXcgVHMoZSwwLDAsMCwwLDAsYSk7aWYoaSl7dS5tYXhGb250U2l6ZT1pLnNpemVNdWx0aXBsaWVyLGkuc3R5bGUuaXNUaWdodCgpJiZ1LmNsYXNzZXMucHVzaCgibXRpZ2h0Iik7dmFyIGY9aS5nZXRDb2xvcigpO2YmJih1LnN0eWxlLmNvbG9yPWYpfXJldHVybiB1fSwibWFrZVN5bWJvbCIpLFBiZT1vKGZ1bmN0aW9uKGUscixuLGkpe3JldHVybiBpPT09dm9pZCAwJiYoaT1bXSksbi5mb250PT09ImJvbGRzeW1ib2wiJiZiMyhlLCJNYWluLUJvbGQiLHIpLm1ldHJpY3M/b2woZSwiTWFpbi1Cb2xkIixyLG4saS5jb25jYXQoWyJtYXRoYmYiXSkpOmU9PT0iXFwifHxBbltyXVtlXS5mb250PT09Im1haW4iP29sKGUsIk1haW4tUmVndWxhciIscixuLGkpOm9sKGUsIkFNUy1SZWd1bGFyIixyLG4saS5jb25jYXQoWyJhbXNybSJdKSl9LCJtYXRoc3ltIiksQmJlPW8oZnVuY3Rpb24oZSxyLG4saSxhKXtyZXR1cm4gYSE9PSJ0ZXh0b3JkIiYmYjMoZSwiTWF0aC1Cb2xkSXRhbGljIixyKS5tZXRyaWNzP3tmb250TmFtZToiTWF0aC1Cb2xkSXRhbGljIixmb250Q2xhc3M6ImJvbGRzeW1ib2wifTp7Zm9udE5hbWU6Ik1haW4tQm9sZCIsZm9udENsYXNzOiJtYXRoYmYifX0sImJvbGRzeW1ib2wiKSxGYmU9byhmdW5jdGlvbihlLHIsbil7dmFyIGk9ZS5tb2RlLGE9ZS50ZXh0LHM9WyJtb3JkIl0sbD1pPT09Im1hdGgifHxpPT09InRleHQiJiZyLmZvbnQsdT1sP3IuZm9udDpyLmZvbnRGYW1pbHksaD0iIixmPSIiO2lmKGEuY2hhckNvZGVBdCgwKT09PTU1MzQ5JiYoW2gsZl09T2JlKGEsaSkpLGgubGVuZ3RoPjApcmV0dXJuIG9sKGEsaCxpLHIscy5jb25jYXQoZikpO2lmKHUpe3ZhciBkLHA7aWYodT09PSJib2xkc3ltYm9sIil7dmFyIG09QmJlKGEsaSxyLHMsbik7ZD1tLmZvbnROYW1lLHA9W20uZm9udENsYXNzXX1lbHNlIGw/KGQ9WXpbdV0uZm9udE5hbWUscD1bdV0pOihkPWkzKHUsci5mb250V2VpZ2h0LHIuZm9udFNoYXBlKSxwPVt1LHIuZm9udFdlaWdodCxyLmZvbnRTaGFwZV0pO2lmKGIzKGEsZCxpKS5tZXRyaWNzKXJldHVybiBvbChhLGQsaSxyLHMuY29uY2F0KHApKTtpZihIei5oYXNPd25Qcm9wZXJ0eShhKSYmZC5zbGljZSgwLDEwKT09PSJUeXBld3JpdGVyIil7Zm9yKHZhciBnPVtdLHk9MDt5PGEubGVuZ3RoO3krKylnLnB1c2gob2woYVt5XSxkLGkscixzLmNvbmNhdChwKSkpO3JldHVybiBxeihnKX19aWYobj09PSJtYXRob3JkIilyZXR1cm4gb2woYSwiTWF0aC1JdGFsaWMiLGkscixzLmNvbmNhdChbIm1hdGhub3JtYWwiXSkpO2lmKG49PT0idGV4dG9yZCIpe3ZhciB2PUFuW2ldW2FdJiZBbltpXVthXS5mb250O2lmKHY9PT0iYW1zIil7dmFyIHg9aTMoImFtc3JtIixyLmZvbnRXZWlnaHQsci5mb250U2hhcGUpO3JldHVybiBvbChhLHgsaSxyLHMuY29uY2F0KCJhbXNybSIsci5mb250V2VpZ2h0LHIuZm9udFNoYXBlKSl9ZWxzZSBpZih2PT09Im1haW4ifHwhdil7dmFyIGI9aTMoInRleHRybSIsci5mb250V2VpZ2h0LHIuZm9udFNoYXBlKTtyZXR1cm4gb2woYSxiLGkscixzLmNvbmNhdChyLmZvbnRXZWlnaHQsci5mb250U2hhcGUpKX1lbHNle3ZhciB3PWkzKHYsci5mb250V2VpZ2h0LHIuZm9udFNoYXBlKTtyZXR1cm4gb2woYSx3LGkscixzLmNvbmNhdCh3LHIuZm9udFdlaWdodCxyLmZvbnRTaGFwZSkpfX1lbHNlIHRocm93IG5ldyBFcnJvcigidW5leHBlY3RlZCB0eXBlOiAiK24rIiBpbiBtYWtlT3JkIil9LCJtYWtlT3JkIiksJGJlPW8oKHQsZSk9PntpZihmaCh0LmNsYXNzZXMpIT09ZmgoZS5jbGFzc2VzKXx8dC5za2V3IT09ZS5za2V3fHx0Lm1heEZvbnRTaXplIT09ZS5tYXhGb250U2l6ZSlyZXR1cm4hMTtpZih0LmNsYXNzZXMubGVuZ3RoPT09MSl7dmFyIHI9dC5jbGFzc2VzWzBdO2lmKHI9PT0ibWJpbiJ8fHI9PT0ibW9yZCIpcmV0dXJuITF9Zm9yKHZhciBuIGluIHQuc3R5bGUpaWYodC5zdHlsZS5oYXNPd25Qcm9wZXJ0eShuKSYmdC5zdHlsZVtuXSE9PWUuc3R5bGVbbl0pcmV0dXJuITE7Zm9yKHZhciBpIGluIGUuc3R5bGUpaWYoZS5zdHlsZS5oYXNPd25Qcm9wZXJ0eShpKSYmdC5zdHlsZVtpXSE9PWUuc3R5bGVbaV0pcmV0dXJuITE7cmV0dXJuITB9LCJjYW5Db21iaW5lIiksemJlPW8odD0+e2Zvcih2YXIgZT0wO2U8dC5sZW5ndGgtMTtlKyspe3ZhciByPXRbZV0sbj10W2UrMV07ciBpbnN0YW5jZW9mIFRzJiZuIGluc3RhbmNlb2YgVHMmJiRiZShyLG4pJiYoci50ZXh0Kz1uLnRleHQsci5oZWlnaHQ9TWF0aC5tYXgoci5oZWlnaHQsbi5oZWlnaHQpLHIuZGVwdGg9TWF0aC5tYXgoci5kZXB0aCxuLmRlcHRoKSxyLml0YWxpYz1uLml0YWxpYyx0LnNwbGljZShlKzEsMSksZS0tKX1yZXR1cm4gdH0sInRyeUNvbWJpbmVDaGFycyIpLEI3PW8oZnVuY3Rpb24oZSl7Zm9yKHZhciByPTAsbj0wLGk9MCxhPTA7YTxlLmNoaWxkcmVuLmxlbmd0aDthKyspe3ZhciBzPWUuY2hpbGRyZW5bYV07cy5oZWlnaHQ+ciYmKHI9cy5oZWlnaHQpLHMuZGVwdGg+biYmKG49cy5kZXB0aCkscy5tYXhGb250U2l6ZT5pJiYoaT1zLm1heEZvbnRTaXplKX1lLmhlaWdodD1yLGUuZGVwdGg9bixlLm1heEZvbnRTaXplPWl9LCJzaXplRWxlbWVudEZyb21DaGlsZHJlbiIpLGJzPW8oZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9bmV3IHRkKGUscixuLGkpO3JldHVybiBCNyhhKSxhfSwibWFrZVNwYW4iKSxXej1vKCh0LGUscixuKT0+bmV3IHRkKHQsZSxyLG4pLCJtYWtlU3ZnU3BhbiIpLEdiZT1vKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1icyhbZV0sW10scik7cmV0dXJuIGkuaGVpZ2h0PU1hdGgubWF4KG58fHIuZm9udE1ldHJpY3MoKS5kZWZhdWx0UnVsZVRoaWNrbmVzcyxyLm1pblJ1bGVUaGlja25lc3MpLGkuc3R5bGUuYm9yZGVyQm90dG9tV2lkdGg9a3QoaS5oZWlnaHQpLGkubWF4Rm9udFNpemU9MSxpfSwibWFrZUxpbmVTcGFuIiksVmJlPW8oZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9bmV3IFZ5KGUscixuLGkpO3JldHVybiBCNyhhKSxhfSwibWFrZUFuY2hvciIpLHF6PW8oZnVuY3Rpb24oZSl7dmFyIHI9bmV3IGVkKGUpO3JldHVybiBCNyhyKSxyfSwibWFrZUZyYWdtZW50IiksVWJlPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGVkP2JzKFtdLFtlXSxyKTplfSwid3JhcEZyYWdtZW50IiksSGJlPW8oZnVuY3Rpb24oZSl7aWYoZS5wb3NpdGlvblR5cGU9PT0iaW5kaXZpZHVhbFNoaWZ0Iil7Zm9yKHZhciByPWUuY2hpbGRyZW4sbj1bclswXV0saT0tclswXS5zaGlmdC1yWzBdLmVsZW0uZGVwdGgsYT1pLHM9MTtzPHIubGVuZ3RoO3MrKyl7dmFyIGw9LXJbc10uc2hpZnQtYS1yW3NdLmVsZW0uZGVwdGgsdT1sLShyW3MtMV0uZWxlbS5oZWlnaHQrcltzLTFdLmVsZW0uZGVwdGgpO2E9YStsLG4ucHVzaCh7dHlwZToia2VybiIsc2l6ZTp1fSksbi5wdXNoKHJbc10pfXJldHVybntjaGlsZHJlbjpuLGRlcHRoOml9fXZhciBoO2lmKGUucG9zaXRpb25UeXBlPT09InRvcCIpe2Zvcih2YXIgZj1lLnBvc2l0aW9uRGF0YSxkPTA7ZDxlLmNoaWxkcmVuLmxlbmd0aDtkKyspe3ZhciBwPWUuY2hpbGRyZW5bZF07Zi09cC50eXBlPT09Imtlcm4iP3Auc2l6ZTpwLmVsZW0uaGVpZ2h0K3AuZWxlbS5kZXB0aH1oPWZ9ZWxzZSBpZihlLnBvc2l0aW9uVHlwZT09PSJib3R0b20iKWg9LWUucG9zaXRpb25EYXRhO2Vsc2V7dmFyIG09ZS5jaGlsZHJlblswXTtpZihtLnR5cGUhPT0iZWxlbSIpdGhyb3cgbmV3IEVycm9yKCdGaXJzdCBjaGlsZCBtdXN0IGhhdmUgdHlwZSAiZWxlbSIuJyk7aWYoZS5wb3NpdGlvblR5cGU9PT0ic2hpZnQiKWg9LW0uZWxlbS5kZXB0aC1lLnBvc2l0aW9uRGF0YTtlbHNlIGlmKGUucG9zaXRpb25UeXBlPT09ImZpcnN0QmFzZWxpbmUiKWg9LW0uZWxlbS5kZXB0aDtlbHNlIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBwb3NpdGlvblR5cGUgIitlLnBvc2l0aW9uVHlwZSsiLiIpfXJldHVybntjaGlsZHJlbjplLmNoaWxkcmVuLGRlcHRoOmh9fSwiZ2V0Vkxpc3RDaGlsZHJlbkFuZERlcHRoIiksV2JlPW8oZnVuY3Rpb24oZSxyKXtmb3IodmFye2NoaWxkcmVuOm4sZGVwdGg6aX09SGJlKGUpLGE9MCxzPTA7czxuLmxlbmd0aDtzKyspe3ZhciBsPW5bc107aWYobC50eXBlPT09ImVsZW0iKXt2YXIgdT1sLmVsZW07YT1NYXRoLm1heChhLHUubWF4Rm9udFNpemUsdS5oZWlnaHQpfX1hKz0yO3ZhciBoPWJzKFsicHN0cnV0Il0sW10pO2guc3R5bGUuaGVpZ2h0PWt0KGEpO2Zvcih2YXIgZj1bXSxkPWkscD1pLG09aSxnPTA7ZzxuLmxlbmd0aDtnKyspe3ZhciB5PW5bZ107aWYoeS50eXBlPT09Imtlcm4iKW0rPXkuc2l6ZTtlbHNle3ZhciB2PXkuZWxlbSx4PXkud3JhcHBlckNsYXNzZXN8fFtdLGI9eS53cmFwcGVyU3R5bGV8fHt9LHc9YnMoeCxbaCx2XSx2b2lkIDAsYik7dy5zdHlsZS50b3A9a3QoLWEtbS12LmRlcHRoKSx5Lm1hcmdpbkxlZnQmJih3LnN0eWxlLm1hcmdpbkxlZnQ9eS5tYXJnaW5MZWZ0KSx5Lm1hcmdpblJpZ2h0JiYody5zdHlsZS5tYXJnaW5SaWdodD15Lm1hcmdpblJpZ2h0KSxmLnB1c2godyksbSs9di5oZWlnaHQrdi5kZXB0aH1kPU1hdGgubWluKGQsbSkscD1NYXRoLm1heChwLG0pfXZhciBDPWJzKFsidmxpc3QiXSxmKTtDLnN0eWxlLmhlaWdodD1rdChwKTt2YXIgVDtpZihkPDApe3ZhciBFPWJzKFtdLFtdKSxBPWJzKFsidmxpc3QiXSxbRV0pO0Euc3R5bGUuaGVpZ2h0PWt0KC1kKTt2YXIgUz1icyhbInZsaXN0LXMiXSxbbmV3IFRzKCJcdTIwMEIiKV0pO1Q9W2JzKFsidmxpc3QtciJdLFtDLFNdKSxicyhbInZsaXN0LXIiXSxbQV0pXX1lbHNlIFQ9W2JzKFsidmxpc3QtciJdLFtDXSldO3ZhciBfPWJzKFsidmxpc3QtdCJdLFQpO3JldHVybiBULmxlbmd0aD09PTImJl8uY2xhc3Nlcy5wdXNoKCJ2bGlzdC10MiIpLF8uaGVpZ2h0PXAsXy5kZXB0aD0tZCxffSwibWFrZVZMaXN0IikscWJlPW8oKHQsZSk9Pnt2YXIgcj1icyhbIm1zcGFjZSJdLFtdLGUpLG49dGkodCxlKTtyZXR1cm4gci5zdHlsZS5tYXJnaW5SaWdodD1rdChuKSxyfSwibWFrZUdsdWUiKSxpMz1vKGZ1bmN0aW9uKGUscixuKXt2YXIgaT0iIjtzd2l0Y2goZSl7Y2FzZSJhbXNybSI6aT0iQU1TIjticmVhaztjYXNlInRleHRybSI6aT0iTWFpbiI7YnJlYWs7Y2FzZSJ0ZXh0c2YiOmk9IlNhbnNTZXJpZiI7YnJlYWs7Y2FzZSJ0ZXh0dHQiOmk9IlR5cGV3cml0ZXIiO2JyZWFrO2RlZmF1bHQ6aT1lfXZhciBhO3JldHVybiByPT09InRleHRiZiImJm49PT0idGV4dGl0Ij9hPSJCb2xkSXRhbGljIjpyPT09InRleHRiZiI/YT0iQm9sZCI6cj09PSJ0ZXh0aXQiP2E9Ikl0YWxpYyI6YT0iUmVndWxhciIsaSsiLSIrYX0sInJldHJpZXZlVGV4dEZvbnROYW1lIiksWXo9e21hdGhiZjp7dmFyaWFudDoiYm9sZCIsZm9udE5hbWU6Ik1haW4tQm9sZCJ9LG1hdGhybTp7dmFyaWFudDoibm9ybWFsIixmb250TmFtZToiTWFpbi1SZWd1bGFyIn0sdGV4dGl0Ont2YXJpYW50OiJpdGFsaWMiLGZvbnROYW1lOiJNYWluLUl0YWxpYyJ9LG1hdGhpdDp7dmFyaWFudDoiaXRhbGljIixmb250TmFtZToiTWFpbi1JdGFsaWMifSxtYXRobm9ybWFsOnt2YXJpYW50OiJpdGFsaWMiLGZvbnROYW1lOiJNYXRoLUl0YWxpYyJ9LG1hdGhiYjp7dmFyaWFudDoiZG91YmxlLXN0cnVjayIsZm9udE5hbWU6IkFNUy1SZWd1bGFyIn0sbWF0aGNhbDp7dmFyaWFudDoic2NyaXB0Iixmb250TmFtZToiQ2FsaWdyYXBoaWMtUmVndWxhciJ9LG1hdGhmcmFrOnt2YXJpYW50OiJmcmFrdHVyIixmb250TmFtZToiRnJha3R1ci1SZWd1bGFyIn0sbWF0aHNjcjp7dmFyaWFudDoic2NyaXB0Iixmb250TmFtZToiU2NyaXB0LVJlZ3VsYXIifSxtYXRoc2Y6e3ZhcmlhbnQ6InNhbnMtc2VyaWYiLGZvbnROYW1lOiJTYW5zU2VyaWYtUmVndWxhciJ9LG1hdGh0dDp7dmFyaWFudDoibW9ub3NwYWNlIixmb250TmFtZToiVHlwZXdyaXRlci1SZWd1bGFyIn19LFh6PXt2ZWM6WyJ2ZWMiLC40NzEsLjcxNF0sb2lpbnRTaXplMTpbIm9paW50U2l6ZTEiLC45NTcsLjQ5OV0sb2lpbnRTaXplMjpbIm9paW50U2l6ZTIiLDEuNDcyLC42NTldLG9paWludFNpemUxOlsib2lpaW50U2l6ZTEiLDEuMzA0LC40OTldLG9paWludFNpemUyOlsib2lpaW50U2l6ZTIiLDEuOTgsLjY1OV19LFliZT1vKGZ1bmN0aW9uKGUscil7dmFyW24saSxhXT1YeltlXSxzPW5ldyBLbChuKSxsPW5ldyBsbChbc10se3dpZHRoOmt0KGkpLGhlaWdodDprdChhKSxzdHlsZToid2lkdGg6IitrdChpKSx2aWV3Qm94OiIwIDAgIisxZTMqaSsiICIrMWUzKmEscHJlc2VydmVBc3BlY3RSYXRpbzoieE1pbllNaW4ifSksdT1XeihbIm92ZXJsYXkiXSxbbF0scik7cmV0dXJuIHUuaGVpZ2h0PWEsdS5zdHlsZS5oZWlnaHQ9a3QoYSksdS5zdHlsZS53aWR0aD1rdChpKSx1fSwic3RhdGljU3ZnIiksQmU9e2ZvbnRNYXA6WXosbWFrZVN5bWJvbDpvbCxtYXRoc3ltOlBiZSxtYWtlU3BhbjpicyxtYWtlU3ZnU3BhbjpXeixtYWtlTGluZVNwYW46R2JlLG1ha2VBbmNob3I6VmJlLG1ha2VGcmFnbWVudDpxeix3cmFwRnJhZ21lbnQ6VWJlLG1ha2VWTGlzdDpXYmUsbWFrZU9yZDpGYmUsbWFrZUdsdWU6cWJlLHN0YXRpY1N2ZzpZYmUsc3ZnRGF0YTpYeix0cnlDb21iaW5lQ2hhcnM6emJlfSxlaT17bnVtYmVyOjMsdW5pdDoibXUifSxaZj17bnVtYmVyOjQsdW5pdDoibXUifSxhdT17bnVtYmVyOjUsdW5pdDoibXUifSxYYmU9e21vcmQ6e21vcDplaSxtYmluOlpmLG1yZWw6YXUsbWlubmVyOmVpfSxtb3A6e21vcmQ6ZWksbW9wOmVpLG1yZWw6YXUsbWlubmVyOmVpfSxtYmluOnttb3JkOlpmLG1vcDpaZixtb3BlbjpaZixtaW5uZXI6WmZ9LG1yZWw6e21vcmQ6YXUsbW9wOmF1LG1vcGVuOmF1LG1pbm5lcjphdX0sbW9wZW46e30sbWNsb3NlOnttb3A6ZWksbWJpbjpaZixtcmVsOmF1LG1pbm5lcjplaX0sbXB1bmN0Onttb3JkOmVpLG1vcDplaSxtcmVsOmF1LG1vcGVuOmVpLG1jbG9zZTplaSxtcHVuY3Q6ZWksbWlubmVyOmVpfSxtaW5uZXI6e21vcmQ6ZWksbW9wOmVpLG1iaW46WmYsbXJlbDphdSxtb3BlbjplaSxtcHVuY3Q6ZWksbWlubmVyOmVpfX0samJlPXttb3JkOnttb3A6ZWl9LG1vcDp7bW9yZDplaSxtb3A6ZWl9LG1iaW46e30sbXJlbDp7fSxtb3Blbjp7fSxtY2xvc2U6e21vcDplaX0sbXB1bmN0Ont9LG1pbm5lcjp7bW9wOmVpfX0sano9e30scDM9e30sbTM9e307byhOdCwiZGVmaW5lRnVuY3Rpb24iKTtvKHJkLCJkZWZpbmVGdW5jdGlvbkJ1aWxkZXJzIik7ZzM9byhmdW5jdGlvbihlKXtyZXR1cm4gZS50eXBlPT09Im9yZGdyb3VwIiYmZS5ib2R5Lmxlbmd0aD09PTE/ZS5ib2R5WzBdOmV9LCJub3JtYWxpemVBcmd1bWVudCIpLGRpPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGUudHlwZT09PSJvcmRncm91cCI/ZS5ib2R5OltlXX0sIm9yZGFyZ3VtZW50IiksbHU9QmUubWFrZVNwYW4sS2JlPVsibGVmdG1vc3QiLCJtYmluIiwibW9wZW4iLCJtcmVsIiwibW9wIiwibXB1bmN0Il0sUWJlPVsicmlnaHRtb3N0IiwibXJlbCIsIm1jbG9zZSIsIm1wdW5jdCJdLFpiZT17ZGlzcGxheTp0ci5ESVNQTEFZLHRleHQ6dHIuVEVYVCxzY3JpcHQ6dHIuU0NSSVBULHNjcmlwdHNjcmlwdDp0ci5TQ1JJUFRTQ1JJUFR9LEpiZT17bW9yZDoibW9yZCIsbW9wOiJtb3AiLG1iaW46Im1iaW4iLG1yZWw6Im1yZWwiLG1vcGVuOiJtb3BlbiIsbWNsb3NlOiJtY2xvc2UiLG1wdW5jdDoibXB1bmN0IixtaW5uZXI6Im1pbm5lciJ9LFBpPW8oZnVuY3Rpb24oZSxyLG4saSl7aT09PXZvaWQgMCYmKGk9W251bGwsbnVsbF0pO2Zvcih2YXIgYT1bXSxzPTA7czxlLmxlbmd0aDtzKyspe3ZhciBsPUZyKGVbc10scik7aWYobCBpbnN0YW5jZW9mIGVkKXt2YXIgdT1sLmNoaWxkcmVuO2EucHVzaCguLi51KX1lbHNlIGEucHVzaChsKX1pZihCZS50cnlDb21iaW5lQ2hhcnMoYSksIW4pcmV0dXJuIGE7dmFyIGg9cjtpZihlLmxlbmd0aD09PTEpe3ZhciBmPWVbMF07Zi50eXBlPT09InNpemluZyI/aD1yLmhhdmluZ1NpemUoZi5zaXplKTpmLnR5cGU9PT0ic3R5bGluZyImJihoPXIuaGF2aW5nU3R5bGUoWmJlW2Yuc3R5bGVdKSl9dmFyIGQ9bHUoW2lbMF18fCJsZWZ0bW9zdCJdLFtdLHIpLHA9bHUoW2lbMV18fCJyaWdodG1vc3QiXSxbXSxyKSxtPW49PT0icm9vdCI7cmV0dXJuIG16KGEsKGcseSk9Pnt2YXIgdj15LmNsYXNzZXNbMF0seD1nLmNsYXNzZXNbMF07dj09PSJtYmluIiYmSnQuY29udGFpbnMoUWJlLHgpP3kuY2xhc3Nlc1swXT0ibW9yZCI6eD09PSJtYmluIiYmSnQuY29udGFpbnMoS2JlLHYpJiYoZy5jbGFzc2VzWzBdPSJtb3JkIil9LHtub2RlOmR9LHAsbSksbXooYSwoZyx5KT0+e3ZhciB2PUE3KHkpLHg9QTcoZyksYj12JiZ4P2cuaGFzQ2xhc3MoIm10aWdodCIpP2piZVt2XVt4XTpYYmVbdl1beF06bnVsbDtpZihiKXJldHVybiBCZS5tYWtlR2x1ZShiLGgpfSx7bm9kZTpkfSxwLG0pLGF9LCJidWlsZEV4cHJlc3Npb24iKSxtej1vKGZ1bmN0aW9uIHQoZSxyLG4saSxhKXtpJiZlLnB1c2goaSk7Zm9yKHZhciBzPTA7czxlLmxlbmd0aDtzKyspe3ZhciBsPWVbc10sdT1LeihsKTtpZih1KXt0KHUuY2hpbGRyZW4scixuLG51bGwsYSk7Y29udGludWV9dmFyIGg9IWwuaGFzQ2xhc3MoIm1zcGFjZSIpO2lmKGgpe3ZhciBmPXIobCxuLm5vZGUpO2YmJihuLmluc2VydEFmdGVyP24uaW5zZXJ0QWZ0ZXIoZik6KGUudW5zaGlmdChmKSxzKyspKX1oP24ubm9kZT1sOmEmJmwuaGFzQ2xhc3MoIm5ld2xpbmUiKSYmKG4ubm9kZT1sdShbImxlZnRtb3N0Il0pKSxuLmluc2VydEFmdGVyPShkPT5wPT57ZS5zcGxpY2UoZCsxLDAscCkscysrfSkocyl9aSYmZS5wb3AoKX0sInRyYXZlcnNlTm9uU3BhY2VOb2RlcyIpLEt6PW8oZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBlZHx8ZSBpbnN0YW5jZW9mIFZ5fHxlIGluc3RhbmNlb2YgdGQmJmUuaGFzQ2xhc3MoImVuY2xvc2luZyIpP2U6bnVsbH0sImNoZWNrUGFydGlhbEdyb3VwIiksZTRlPW8oZnVuY3Rpb24gdChlLHIpe3ZhciBuPUt6KGUpO2lmKG4pe3ZhciBpPW4uY2hpbGRyZW47aWYoaS5sZW5ndGgpe2lmKHI9PT0icmlnaHQiKXJldHVybiB0KGlbaS5sZW5ndGgtMV0sInJpZ2h0Iik7aWYocj09PSJsZWZ0IilyZXR1cm4gdChpWzBdLCJsZWZ0Iil9fXJldHVybiBlfSwiZ2V0T3V0ZXJtb3N0Tm9kZSIpLEE3PW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gZT8ociYmKGU9ZTRlKGUscikpLEpiZVtlLmNsYXNzZXNbMF1dfHxudWxsKTpudWxsfSwiZ2V0VHlwZU9mRG9tVHJlZSIpLEh5PW8oZnVuY3Rpb24oZSxyKXt2YXIgbj1bIm51bGxkZWxpbWl0ZXIiXS5jb25jYXQoZS5iYXNlU2l6aW5nQ2xhc3NlcygpKTtyZXR1cm4gbHUoci5jb25jYXQobikpfSwibWFrZU51bGxEZWxpbWl0ZXIiKSxGcj1vKGZ1bmN0aW9uKGUscixuKXtpZighZSlyZXR1cm4gbHUoKTtpZihwM1tlLnR5cGVdKXt2YXIgaT1wM1tlLnR5cGVdKGUscik7aWYobiYmci5zaXplIT09bi5zaXplKXtpPWx1KHIuc2l6aW5nQ2xhc3NlcyhuKSxbaV0scik7dmFyIGE9ci5zaXplTXVsdGlwbGllci9uLnNpemVNdWx0aXBsaWVyO2kuaGVpZ2h0Kj1hLGkuZGVwdGgqPWF9cmV0dXJuIGl9ZWxzZSB0aHJvdyBuZXcgZ3QoIkdvdCBncm91cCBvZiB1bmtub3duIHR5cGU6ICciK2UudHlwZSsiJyIpfSwiYnVpbGRHcm91cCIpO28oYTMsImJ1aWxkSFRNTFVuYnJlYWthYmxlIik7byhfNywiYnVpbGRIVE1MIik7byhReiwibmV3RG9jdW1lbnRGcmFnbWVudCIpO3dzPWNsYXNze3N0YXRpY3tvKHRoaXMsIk1hdGhOb2RlIil9Y29uc3RydWN0b3IoZSxyLG4pe3RoaXMudHlwZT12b2lkIDAsdGhpcy5hdHRyaWJ1dGVzPXZvaWQgMCx0aGlzLmNoaWxkcmVuPXZvaWQgMCx0aGlzLmNsYXNzZXM9dm9pZCAwLHRoaXMudHlwZT1lLHRoaXMuYXR0cmlidXRlcz17fSx0aGlzLmNoaWxkcmVuPXJ8fFtdLHRoaXMuY2xhc3Nlcz1ufHxbXX1zZXRBdHRyaWJ1dGUoZSxyKXt0aGlzLmF0dHJpYnV0ZXNbZV09cn1nZXRBdHRyaWJ1dGUoZSl7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1tlXX10b05vZGUoKXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiLHRoaXMudHlwZSk7Zm9yKHZhciByIGluIHRoaXMuYXR0cmlidXRlcylPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJ1dGVzLHIpJiZlLnNldEF0dHJpYnV0ZShyLHRoaXMuYXR0cmlidXRlc1tyXSk7dGhpcy5jbGFzc2VzLmxlbmd0aD4wJiYoZS5jbGFzc05hbWU9ZmgodGhpcy5jbGFzc2VzKSk7Zm9yKHZhciBuPTA7bjx0aGlzLmNoaWxkcmVuLmxlbmd0aDtuKyspZS5hcHBlbmRDaGlsZCh0aGlzLmNoaWxkcmVuW25dLnRvTm9kZSgpKTtyZXR1cm4gZX10b01hcmt1cCgpe3ZhciBlPSI8Iit0aGlzLnR5cGU7Zm9yKHZhciByIGluIHRoaXMuYXR0cmlidXRlcylPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJ1dGVzLHIpJiYoZSs9IiAiK3IrJz0iJyxlKz1KdC5lc2NhcGUodGhpcy5hdHRyaWJ1dGVzW3JdKSxlKz0nIicpO3RoaXMuY2xhc3Nlcy5sZW5ndGg+MCYmKGUrPScgY2xhc3MgPSInK0p0LmVzY2FwZShmaCh0aGlzLmNsYXNzZXMpKSsnIicpLGUrPSI+Ijtmb3IodmFyIG49MDtuPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO24rKyllKz10aGlzLmNoaWxkcmVuW25dLnRvTWFya3VwKCk7cmV0dXJuIGUrPSI8LyIrdGhpcy50eXBlKyI+IixlfXRvVGV4dCgpe3JldHVybiB0aGlzLmNoaWxkcmVuLm1hcChlPT5lLnRvVGV4dCgpKS5qb2luKCIiKX19LEpmPWNsYXNze3N0YXRpY3tvKHRoaXMsIlRleHROb2RlIil9Y29uc3RydWN0b3IoZSl7dGhpcy50ZXh0PXZvaWQgMCx0aGlzLnRleHQ9ZX10b05vZGUoKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGhpcy50ZXh0KX10b01hcmt1cCgpe3JldHVybiBKdC5lc2NhcGUodGhpcy50b1RleHQoKSl9dG9UZXh0KCl7cmV0dXJuIHRoaXMudGV4dH19LEQ3PWNsYXNze3N0YXRpY3tvKHRoaXMsIlNwYWNlTm9kZSIpfWNvbnN0cnVjdG9yKGUpe3RoaXMud2lkdGg9dm9pZCAwLHRoaXMuY2hhcmFjdGVyPXZvaWQgMCx0aGlzLndpZHRoPWUsZT49LjA1NTU1JiZlPD0uMDU1NTY/dGhpcy5jaGFyYWN0ZXI9Ilx1MjAwQSI6ZT49LjE2NjYmJmU8PS4xNjY3P3RoaXMuY2hhcmFjdGVyPSJcdTIwMDkiOmU+PS4yMjIyJiZlPD0uMjIyMz90aGlzLmNoYXJhY3Rlcj0iXHUyMDA1IjplPj0uMjc3NyYmZTw9LjI3Nzg/dGhpcy5jaGFyYWN0ZXI9Ilx1MjAwNVx1MjAwQSI6ZT49LS4wNTU1NiYmZTw9LS4wNTU1NT90aGlzLmNoYXJhY3Rlcj0iXHUyMDBBXHUyMDYzIjplPj0tLjE2NjcmJmU8PS0uMTY2Nj90aGlzLmNoYXJhY3Rlcj0iXHUyMDA5XHUyMDYzIjplPj0tLjIyMjMmJmU8PS0uMjIyMj90aGlzLmNoYXJhY3Rlcj0iXHUyMDVGXHUyMDYzIjplPj0tLjI3NzgmJmU8PS0uMjc3Nz90aGlzLmNoYXJhY3Rlcj0iXHUyMDA1XHUyMDYzIjp0aGlzLmNoYXJhY3Rlcj1udWxsfXRvTm9kZSgpe2lmKHRoaXMuY2hhcmFjdGVyKXJldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0aGlzLmNoYXJhY3Rlcik7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIiwibXNwYWNlIik7cmV0dXJuIGUuc2V0QXR0cmlidXRlKCJ3aWR0aCIsa3QodGhpcy53aWR0aCkpLGV9dG9NYXJrdXAoKXtyZXR1cm4gdGhpcy5jaGFyYWN0ZXI/IjxtdGV4dD4iK3RoaXMuY2hhcmFjdGVyKyI8L210ZXh0PiI6Jzxtc3BhY2Ugd2lkdGg9Iicra3QodGhpcy53aWR0aCkrJyIvPid9dG9UZXh0KCl7cmV0dXJuIHRoaXMuY2hhcmFjdGVyP3RoaXMuY2hhcmFjdGVyOiIgIn19LGR0PXtNYXRoTm9kZTp3cyxUZXh0Tm9kZTpKZixTcGFjZU5vZGU6RDcsbmV3RG9jdW1lbnRGcmFnbWVudDpRen0sQ289byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIEFuW3JdW2VdJiZBbltyXVtlXS5yZXBsYWNlJiZlLmNoYXJDb2RlQXQoMCkhPT01NTM0OSYmIShIei5oYXNPd25Qcm9wZXJ0eShlKSYmbiYmKG4uZm9udEZhbWlseSYmbi5mb250RmFtaWx5LnNsaWNlKDQsNik9PT0idHQifHxuLmZvbnQmJm4uZm9udC5zbGljZSg0LDYpPT09InR0IikpJiYoZT1BbltyXVtlXS5yZXBsYWNlKSxuZXcgZHQuVGV4dE5vZGUoZSl9LCJtYWtlVGV4dCIpLEY3PW8oZnVuY3Rpb24oZSl7cmV0dXJuIGUubGVuZ3RoPT09MT9lWzBdOm5ldyBkdC5NYXRoTm9kZSgibXJvdyIsZSl9LCJtYWtlUm93IiksJDc9byhmdW5jdGlvbihlLHIpe2lmKHIuZm9udEZhbWlseT09PSJ0ZXh0dHQiKXJldHVybiJtb25vc3BhY2UiO2lmKHIuZm9udEZhbWlseT09PSJ0ZXh0c2YiKXJldHVybiByLmZvbnRTaGFwZT09PSJ0ZXh0aXQiJiZyLmZvbnRXZWlnaHQ9PT0idGV4dGJmIj8ic2Fucy1zZXJpZi1ib2xkLWl0YWxpYyI6ci5mb250U2hhcGU9PT0idGV4dGl0Ij8ic2Fucy1zZXJpZi1pdGFsaWMiOnIuZm9udFdlaWdodD09PSJ0ZXh0YmYiPyJib2xkLXNhbnMtc2VyaWYiOiJzYW5zLXNlcmlmIjtpZihyLmZvbnRTaGFwZT09PSJ0ZXh0aXQiJiZyLmZvbnRXZWlnaHQ9PT0idGV4dGJmIilyZXR1cm4iYm9sZC1pdGFsaWMiO2lmKHIuZm9udFNoYXBlPT09InRleHRpdCIpcmV0dXJuIml0YWxpYyI7aWYoci5mb250V2VpZ2h0PT09InRleHRiZiIpcmV0dXJuImJvbGQiO3ZhciBuPXIuZm9udDtpZighbnx8bj09PSJtYXRobm9ybWFsIilyZXR1cm4gbnVsbDt2YXIgaT1lLm1vZGU7aWYobj09PSJtYXRoaXQiKXJldHVybiJpdGFsaWMiO2lmKG49PT0iYm9sZHN5bWJvbCIpcmV0dXJuIGUudHlwZT09PSJ0ZXh0b3JkIj8iYm9sZCI6ImJvbGQtaXRhbGljIjtpZihuPT09Im1hdGhiZiIpcmV0dXJuImJvbGQiO2lmKG49PT0ibWF0aGJiIilyZXR1cm4iZG91YmxlLXN0cnVjayI7aWYobj09PSJtYXRoZnJhayIpcmV0dXJuImZyYWt0dXIiO2lmKG49PT0ibWF0aHNjciJ8fG49PT0ibWF0aGNhbCIpcmV0dXJuInNjcmlwdCI7aWYobj09PSJtYXRoc2YiKXJldHVybiJzYW5zLXNlcmlmIjtpZihuPT09Im1hdGh0dCIpcmV0dXJuIm1vbm9zcGFjZSI7dmFyIGE9ZS50ZXh0O2lmKEp0LmNvbnRhaW5zKFsiXFxpbWF0aCIsIlxcam1hdGgiXSxhKSlyZXR1cm4gbnVsbDtBbltpXVthXSYmQW5baV1bYV0ucmVwbGFjZSYmKGE9QW5baV1bYV0ucmVwbGFjZSk7dmFyIHM9QmUuZm9udE1hcFtuXS5mb250TmFtZTtyZXR1cm4gUDcoYSxzLGkpP0JlLmZvbnRNYXBbbl0udmFyaWFudDpudWxsfSwiZ2V0VmFyaWFudCIpLGtzPW8oZnVuY3Rpb24oZSxyLG4pe2lmKGUubGVuZ3RoPT09MSl7dmFyIGk9eW4oZVswXSxyKTtyZXR1cm4gbiYmaSBpbnN0YW5jZW9mIHdzJiZpLnR5cGU9PT0ibW8iJiYoaS5zZXRBdHRyaWJ1dGUoImxzcGFjZSIsIjBlbSIpLGkuc2V0QXR0cmlidXRlKCJyc3BhY2UiLCIwZW0iKSksW2ldfWZvcih2YXIgYT1bXSxzLGw9MDtsPGUubGVuZ3RoO2wrKyl7dmFyIHU9eW4oZVtsXSxyKTtpZih1IGluc3RhbmNlb2Ygd3MmJnMgaW5zdGFuY2VvZiB3cyl7aWYodS50eXBlPT09Im10ZXh0IiYmcy50eXBlPT09Im10ZXh0IiYmdS5nZXRBdHRyaWJ1dGUoIm1hdGh2YXJpYW50Iik9PT1zLmdldEF0dHJpYnV0ZSgibWF0aHZhcmlhbnQiKSl7cy5jaGlsZHJlbi5wdXNoKC4uLnUuY2hpbGRyZW4pO2NvbnRpbnVlfWVsc2UgaWYodS50eXBlPT09Im1uIiYmcy50eXBlPT09Im1uIil7cy5jaGlsZHJlbi5wdXNoKC4uLnUuY2hpbGRyZW4pO2NvbnRpbnVlfWVsc2UgaWYodS50eXBlPT09Im1pIiYmdS5jaGlsZHJlbi5sZW5ndGg9PT0xJiZzLnR5cGU9PT0ibW4iKXt2YXIgaD11LmNoaWxkcmVuWzBdO2lmKGggaW5zdGFuY2VvZiBKZiYmaC50ZXh0PT09Ii4iKXtzLmNoaWxkcmVuLnB1c2goLi4udS5jaGlsZHJlbik7Y29udGludWV9fWVsc2UgaWYocy50eXBlPT09Im1pIiYmcy5jaGlsZHJlbi5sZW5ndGg9PT0xKXt2YXIgZj1zLmNoaWxkcmVuWzBdO2lmKGYgaW5zdGFuY2VvZiBKZiYmZi50ZXh0PT09Ilx1MDMzOCImJih1LnR5cGU9PT0ibW8ifHx1LnR5cGU9PT0ibWkifHx1LnR5cGU9PT0ibW4iKSl7dmFyIGQ9dS5jaGlsZHJlblswXTtkIGluc3RhbmNlb2YgSmYmJmQudGV4dC5sZW5ndGg+MCYmKGQudGV4dD1kLnRleHQuc2xpY2UoMCwxKSsiXHUwMzM4IitkLnRleHQuc2xpY2UoMSksYS5wb3AoKSl9fX1hLnB1c2godSkscz11fXJldHVybiBhfSwiYnVpbGRFeHByZXNzaW9uIiksZGg9byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIEY3KGtzKGUscixuKSl9LCJidWlsZEV4cHJlc3Npb25Sb3ciKSx5bj1vKGZ1bmN0aW9uKGUscil7aWYoIWUpcmV0dXJuIG5ldyBkdC5NYXRoTm9kZSgibXJvdyIpO2lmKG0zW2UudHlwZV0pe3ZhciBuPW0zW2UudHlwZV0oZSxyKTtyZXR1cm4gbn1lbHNlIHRocm93IG5ldyBndCgiR290IGdyb3VwIG9mIHVua25vd24gdHlwZTogJyIrZS50eXBlKyInIil9LCJidWlsZEdyb3VwIik7byhneiwiYnVpbGRNYXRoTUwiKTtaej1vKGZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZjMoe3N0eWxlOmUuZGlzcGxheU1vZGU/dHIuRElTUExBWTp0ci5URVhULG1heFNpemU6ZS5tYXhTaXplLG1pblJ1bGVUaGlja25lc3M6ZS5taW5SdWxlVGhpY2tuZXNzfSl9LCJvcHRpb25zRnJvbVNldHRpbmdzIiksSno9byhmdW5jdGlvbihlLHIpe2lmKHIuZGlzcGxheU1vZGUpe3ZhciBuPVsia2F0ZXgtZGlzcGxheSJdO3IubGVxbm8mJm4ucHVzaCgibGVxbm8iKSxyLmZsZXFuJiZuLnB1c2goImZsZXFuIiksZT1CZS5tYWtlU3BhbihuLFtlXSl9cmV0dXJuIGV9LCJkaXNwbGF5V3JhcCIpLHQ0ZT1vKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1aeihuKSxhO2lmKG4ub3V0cHV0PT09Im1hdGhtbCIpcmV0dXJuIGd6KGUscixpLG4uZGlzcGxheU1vZGUsITApO2lmKG4ub3V0cHV0PT09Imh0bWwiKXt2YXIgcz1fNyhlLGkpO2E9QmUubWFrZVNwYW4oWyJrYXRleCJdLFtzXSl9ZWxzZXt2YXIgbD1neihlLHIsaSxuLmRpc3BsYXlNb2RlLCExKSx1PV83KGUsaSk7YT1CZS5tYWtlU3BhbihbImthdGV4Il0sW2wsdV0pfXJldHVybiBKeihhLG4pfSwiYnVpbGRUcmVlIikscjRlPW8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPVp6KG4pLGE9XzcoZSxpKSxzPUJlLm1ha2VTcGFuKFsia2F0ZXgiXSxbYV0pO3JldHVybiBKeihzLG4pfSwiYnVpbGRIVE1MVHJlZSIpLG40ZT17d2lkZWhhdDoiXiIsd2lkZWNoZWNrOiJcdTAyQzciLHdpZGV0aWxkZToifiIsdXRpbGRlOiJ+IixvdmVybGVmdGFycm93OiJcdTIxOTAiLHVuZGVybGVmdGFycm93OiJcdTIxOTAiLHhsZWZ0YXJyb3c6Ilx1MjE5MCIsb3ZlcnJpZ2h0YXJyb3c6Ilx1MjE5MiIsdW5kZXJyaWdodGFycm93OiJcdTIxOTIiLHhyaWdodGFycm93OiJcdTIxOTIiLHVuZGVyYnJhY2U6Ilx1MjNERiIsb3ZlcmJyYWNlOiJcdTIzREUiLG92ZXJncm91cDoiXHUyM0UwIix1bmRlcmdyb3VwOiJcdTIzRTEiLG92ZXJsZWZ0cmlnaHRhcnJvdzoiXHUyMTk0Iix1bmRlcmxlZnRyaWdodGFycm93OiJcdTIxOTQiLHhsZWZ0cmlnaHRhcnJvdzoiXHUyMTk0IixPdmVycmlnaHRhcnJvdzoiXHUyMUQyIix4UmlnaHRhcnJvdzoiXHUyMUQyIixvdmVybGVmdGhhcnBvb246Ilx1MjFCQyIseGxlZnRoYXJwb29udXA6Ilx1MjFCQyIsb3ZlcnJpZ2h0aGFycG9vbjoiXHUyMUMwIix4cmlnaHRoYXJwb29udXA6Ilx1MjFDMCIseExlZnRhcnJvdzoiXHUyMUQwIix4TGVmdHJpZ2h0YXJyb3c6Ilx1MjFENCIseGhvb2tsZWZ0YXJyb3c6Ilx1MjFBOSIseGhvb2tyaWdodGFycm93OiJcdTIxQUEiLHhtYXBzdG86Ilx1MjFBNiIseHJpZ2h0aGFycG9vbmRvd246Ilx1MjFDMSIseGxlZnRoYXJwb29uZG93bjoiXHUyMUJEIix4cmlnaHRsZWZ0aGFycG9vbnM6Ilx1MjFDQyIseGxlZnRyaWdodGhhcnBvb25zOiJcdTIxQ0IiLHh0d29oZWFkbGVmdGFycm93OiJcdTIxOUUiLHh0d29oZWFkcmlnaHRhcnJvdzoiXHUyMUEwIix4bG9uZ2VxdWFsOiI9Iix4dG9mcm9tOiJcdTIxQzQiLHhyaWdodGxlZnRhcnJvd3M6Ilx1MjFDNCIseHJpZ2h0ZXF1aWxpYnJpdW06Ilx1MjFDQyIseGxlZnRlcXVpbGlicml1bToiXHUyMUNCIiwiXFxjZHJpZ2h0YXJyb3ciOiJcdTIxOTIiLCJcXGNkbGVmdGFycm93IjoiXHUyMTkwIiwiXFxjZGxvbmdlcXVhbCI6Ij0ifSxpNGU9byhmdW5jdGlvbihlKXt2YXIgcj1uZXcgZHQuTWF0aE5vZGUoIm1vIixbbmV3IGR0LlRleHROb2RlKG40ZVtlLnJlcGxhY2UoL15cXC8sIiIpXSldKTtyZXR1cm4gci5zZXRBdHRyaWJ1dGUoInN0cmV0Y2h5IiwidHJ1ZSIpLHJ9LCJtYXRoTUxub2RlIiksYTRlPXtvdmVycmlnaHRhcnJvdzpbWyJyaWdodGFycm93Il0sLjg4OCw1MjIsInhNYXhZTWluIl0sb3ZlcmxlZnRhcnJvdzpbWyJsZWZ0YXJyb3ciXSwuODg4LDUyMiwieE1pbllNaW4iXSx1bmRlcnJpZ2h0YXJyb3c6W1sicmlnaHRhcnJvdyJdLC44ODgsNTIyLCJ4TWF4WU1pbiJdLHVuZGVybGVmdGFycm93OltbImxlZnRhcnJvdyJdLC44ODgsNTIyLCJ4TWluWU1pbiJdLHhyaWdodGFycm93OltbInJpZ2h0YXJyb3ciXSwxLjQ2OSw1MjIsInhNYXhZTWluIl0sIlxcY2RyaWdodGFycm93IjpbWyJyaWdodGFycm93Il0sMyw1MjIsInhNYXhZTWluIl0seGxlZnRhcnJvdzpbWyJsZWZ0YXJyb3ciXSwxLjQ2OSw1MjIsInhNaW5ZTWluIl0sIlxcY2RsZWZ0YXJyb3ciOltbImxlZnRhcnJvdyJdLDMsNTIyLCJ4TWluWU1pbiJdLE92ZXJyaWdodGFycm93OltbImRvdWJsZXJpZ2h0YXJyb3ciXSwuODg4LDU2MCwieE1heFlNaW4iXSx4UmlnaHRhcnJvdzpbWyJkb3VibGVyaWdodGFycm93Il0sMS41MjYsNTYwLCJ4TWF4WU1pbiJdLHhMZWZ0YXJyb3c6W1siZG91YmxlbGVmdGFycm93Il0sMS41MjYsNTYwLCJ4TWluWU1pbiJdLG92ZXJsZWZ0aGFycG9vbjpbWyJsZWZ0aGFycG9vbiJdLC44ODgsNTIyLCJ4TWluWU1pbiJdLHhsZWZ0aGFycG9vbnVwOltbImxlZnRoYXJwb29uIl0sLjg4OCw1MjIsInhNaW5ZTWluIl0seGxlZnRoYXJwb29uZG93bjpbWyJsZWZ0aGFycG9vbmRvd24iXSwuODg4LDUyMiwieE1pbllNaW4iXSxvdmVycmlnaHRoYXJwb29uOltbInJpZ2h0aGFycG9vbiJdLC44ODgsNTIyLCJ4TWF4WU1pbiJdLHhyaWdodGhhcnBvb251cDpbWyJyaWdodGhhcnBvb24iXSwuODg4LDUyMiwieE1heFlNaW4iXSx4cmlnaHRoYXJwb29uZG93bjpbWyJyaWdodGhhcnBvb25kb3duIl0sLjg4OCw1MjIsInhNYXhZTWluIl0seGxvbmdlcXVhbDpbWyJsb25nZXF1YWwiXSwuODg4LDMzNCwieE1pbllNaW4iXSwiXFxjZGxvbmdlcXVhbCI6W1sibG9uZ2VxdWFsIl0sMywzMzQsInhNaW5ZTWluIl0seHR3b2hlYWRsZWZ0YXJyb3c6W1sidHdvaGVhZGxlZnRhcnJvdyJdLC44ODgsMzM0LCJ4TWluWU1pbiJdLHh0d29oZWFkcmlnaHRhcnJvdzpbWyJ0d29oZWFkcmlnaHRhcnJvdyJdLC44ODgsMzM0LCJ4TWF4WU1pbiJdLG92ZXJsZWZ0cmlnaHRhcnJvdzpbWyJsZWZ0YXJyb3ciLCJyaWdodGFycm93Il0sLjg4OCw1MjJdLG92ZXJicmFjZTpbWyJsZWZ0YnJhY2UiLCJtaWRicmFjZSIsInJpZ2h0YnJhY2UiXSwxLjYsNTQ4XSx1bmRlcmJyYWNlOltbImxlZnRicmFjZXVuZGVyIiwibWlkYnJhY2V1bmRlciIsInJpZ2h0YnJhY2V1bmRlciJdLDEuNiw1NDhdLHVuZGVybGVmdHJpZ2h0YXJyb3c6W1sibGVmdGFycm93IiwicmlnaHRhcnJvdyJdLC44ODgsNTIyXSx4bGVmdHJpZ2h0YXJyb3c6W1sibGVmdGFycm93IiwicmlnaHRhcnJvdyJdLDEuNzUsNTIyXSx4TGVmdHJpZ2h0YXJyb3c6W1siZG91YmxlbGVmdGFycm93IiwiZG91YmxlcmlnaHRhcnJvdyJdLDEuNzUsNTYwXSx4cmlnaHRsZWZ0aGFycG9vbnM6W1sibGVmdGhhcnBvb25kb3ducGx1cyIsInJpZ2h0aGFycG9vbnBsdXMiXSwxLjc1LDcxNl0seGxlZnRyaWdodGhhcnBvb25zOltbImxlZnRoYXJwb29ucGx1cyIsInJpZ2h0aGFycG9vbmRvd25wbHVzIl0sMS43NSw3MTZdLHhob29rbGVmdGFycm93OltbImxlZnRhcnJvdyIsInJpZ2h0aG9vayJdLDEuMDgsNTIyXSx4aG9va3JpZ2h0YXJyb3c6W1sibGVmdGhvb2siLCJyaWdodGFycm93Il0sMS4wOCw1MjJdLG92ZXJsaW5lc2VnbWVudDpbWyJsZWZ0bGluZXNlZ21lbnQiLCJyaWdodGxpbmVzZWdtZW50Il0sLjg4OCw1MjJdLHVuZGVybGluZXNlZ21lbnQ6W1sibGVmdGxpbmVzZWdtZW50IiwicmlnaHRsaW5lc2VnbWVudCJdLC44ODgsNTIyXSxvdmVyZ3JvdXA6W1sibGVmdGdyb3VwIiwicmlnaHRncm91cCJdLC44ODgsMzQyXSx1bmRlcmdyb3VwOltbImxlZnRncm91cHVuZGVyIiwicmlnaHRncm91cHVuZGVyIl0sLjg4OCwzNDJdLHhtYXBzdG86W1sibGVmdG1hcHN0byIsInJpZ2h0YXJyb3ciXSwxLjUsNTIyXSx4dG9mcm9tOltbImxlZnRUb0Zyb20iLCJyaWdodFRvRnJvbSJdLDEuNzUsNTI4XSx4cmlnaHRsZWZ0YXJyb3dzOltbImJhcmFib3ZlbGVmdGFycm93IiwicmlnaHRhcnJvd2Fib3ZlYmFyIl0sMS43NSw5MDFdLHhyaWdodGVxdWlsaWJyaXVtOltbImJhcmFib3Zlc2hvcnRsZWZ0aGFycG9vbiIsInJpZ2h0aGFycG9vbmFib3Zlc2hvcnRiYXIiXSwxLjc1LDcxNl0seGxlZnRlcXVpbGlicml1bTpbWyJzaG9ydGJhcmFib3ZlbGVmdGhhcnBvb24iLCJzaG9ydHJpZ2h0aGFycG9vbmFib3ZlYmFyIl0sMS43NSw3MTZdfSxzNGU9byhmdW5jdGlvbihlKXtyZXR1cm4gZS50eXBlPT09Im9yZGdyb3VwIj9lLmJvZHkubGVuZ3RoOjF9LCJncm91cExlbmd0aCIpLG80ZT1vKGZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbigpe3ZhciBsPTRlNSx1PWUubGFiZWwuc2xpY2UoMSk7aWYoSnQuY29udGFpbnMoWyJ3aWRlaGF0Iiwid2lkZWNoZWNrIiwid2lkZXRpbGRlIiwidXRpbGRlIl0sdSkpe3ZhciBoPWUsZj1zNGUoaC5iYXNlKSxkLHAsbTtpZihmPjUpdT09PSJ3aWRlaGF0Inx8dT09PSJ3aWRlY2hlY2siPyhkPTQyMCxsPTIzNjQsbT0uNDIscD11KyI0Iik6KGQ9MzEyLGw9MjM0MCxtPS4zNCxwPSJ0aWxkZTQiKTtlbHNle3ZhciBnPVsxLDEsMiwyLDMsM11bZl07dT09PSJ3aWRlaGF0Inx8dT09PSJ3aWRlY2hlY2siPyhsPVswLDEwNjIsMjM2NCwyMzY0LDIzNjRdW2ddLGQ9WzAsMjM5LDMwMCwzNjAsNDIwXVtnXSxtPVswLC4yNCwuMywuMywuMzYsLjQyXVtnXSxwPXUrZyk6KGw9WzAsNjAwLDEwMzMsMjMzOSwyMzQwXVtnXSxkPVswLDI2MCwyODYsMzA2LDMxMl1bZ10sbT1bMCwuMjYsLjI4NiwuMywuMzA2LC4zNF1bZ10scD0idGlsZGUiK2cpfXZhciB5PW5ldyBLbChwKSx2PW5ldyBsbChbeV0se3dpZHRoOiIxMDAlIixoZWlnaHQ6a3QobSksdmlld0JveDoiMCAwICIrbCsiICIrZCxwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIn0pO3JldHVybntzcGFuOkJlLm1ha2VTdmdTcGFuKFtdLFt2XSxyKSxtaW5XaWR0aDowLGhlaWdodDptfX1lbHNle3ZhciB4PVtdLGI9YTRlW3VdLFt3LEMsVF09YixFPVQvMWUzLEE9dy5sZW5ndGgsUyxfO2lmKEE9PT0xKXt2YXIgST1iWzNdO1M9WyJoaWRlLXRhaWwiXSxfPVtJXX1lbHNlIGlmKEE9PT0yKVM9WyJoYWxmYXJyb3ctbGVmdCIsImhhbGZhcnJvdy1yaWdodCJdLF89WyJ4TWluWU1pbiIsInhNYXhZTWluIl07ZWxzZSBpZihBPT09MylTPVsiYnJhY2UtbGVmdCIsImJyYWNlLWNlbnRlciIsImJyYWNlLXJpZ2h0Il0sXz1bInhNaW5ZTWluIiwieE1pZFlNaW4iLCJ4TWF4WU1pbiJdO2Vsc2UgdGhyb3cgbmV3IEVycm9yKGBDb3JyZWN0IGthdGV4SW1hZ2VzRGF0YSBvciB1cGRhdGUgY29kZSBoZXJlIHRvIHN1cHBvcnQKICAgICAgICAgICAgICAgICAgICBgK0ErIiBjaGlsZHJlbi4iKTtmb3IodmFyIEQ9MDtEPEE7RCsrKXt2YXIgaz1uZXcgS2wod1tEXSksTD1uZXcgbGwoW2tdLHt3aWR0aDoiNDAwZW0iLGhlaWdodDprdChFKSx2aWV3Qm94OiIwIDAgIitsKyIgIitULHByZXNlcnZlQXNwZWN0UmF0aW86X1tEXSsiIHNsaWNlIn0pLFI9QmUubWFrZVN2Z1NwYW4oW1NbRF1dLFtMXSxyKTtpZihBPT09MSlyZXR1cm57c3BhbjpSLG1pbldpZHRoOkMsaGVpZ2h0OkV9O1Iuc3R5bGUuaGVpZ2h0PWt0KEUpLHgucHVzaChSKX1yZXR1cm57c3BhbjpCZS5tYWtlU3BhbihbInN0cmV0Y2h5Il0seCxyKSxtaW5XaWR0aDpDLGhlaWdodDpFfX19byhuLCJidWlsZFN2Z1NwYW5fIik7dmFye3NwYW46aSxtaW5XaWR0aDphLGhlaWdodDpzfT1uKCk7cmV0dXJuIGkuaGVpZ2h0PXMsaS5zdHlsZS5oZWlnaHQ9a3QocyksYT4wJiYoaS5zdHlsZS5taW5XaWR0aD1rdChhKSksaX0sInN2Z1NwYW4iKSxsNGU9byhmdW5jdGlvbihlLHIsbixpLGEpe3ZhciBzLGw9ZS5oZWlnaHQrZS5kZXB0aCtuK2k7aWYoL2Zib3h8Y29sb3J8YW5nbC8udGVzdChyKSl7aWYocz1CZS5tYWtlU3BhbihbInN0cmV0Y2h5IixyXSxbXSxhKSxyPT09ImZib3giKXt2YXIgdT1hLmNvbG9yJiZhLmdldENvbG9yKCk7dSYmKHMuc3R5bGUuYm9yZGVyQ29sb3I9dSl9fWVsc2V7dmFyIGg9W107L15bYnhdY2FuY2VsJC8udGVzdChyKSYmaC5wdXNoKG5ldyBVeSh7eDE6IjAiLHkxOiIwIix4MjoiMTAwJSIseTI6IjEwMCUiLCJzdHJva2Utd2lkdGgiOiIwLjA0NmVtIn0pKSwvXng/Y2FuY2VsJC8udGVzdChyKSYmaC5wdXNoKG5ldyBVeSh7eDE6IjAiLHkxOiIxMDAlIix4MjoiMTAwJSIseTI6IjAiLCJzdHJva2Utd2lkdGgiOiIwLjA0NmVtIn0pKTt2YXIgZj1uZXcgbGwoaCx7d2lkdGg6IjEwMCUiLGhlaWdodDprdChsKX0pO3M9QmUubWFrZVN2Z1NwYW4oW10sW2ZdLGEpfXJldHVybiBzLmhlaWdodD1sLHMuc3R5bGUuaGVpZ2h0PWt0KGwpLHN9LCJlbmNsb3NlU3BhbiIpLGN1PXtlbmNsb3NlU3BhbjpsNGUsbWF0aE1Mbm9kZTppNGUsc3ZnU3BhbjpvNGV9O28oeHIsImFzc2VydE5vZGVUeXBlIik7byh6NywiYXNzZXJ0U3ltYm9sTm9kZVR5cGUiKTtvKHczLCJjaGVja1N5bWJvbE5vZGVUeXBlIik7Rzc9bygodCxlKT0+e3ZhciByLG4saTt0JiZ0LnR5cGU9PT0ic3Vwc3ViIj8obj14cih0LmJhc2UsImFjY2VudCIpLHI9bi5iYXNlLHQuYmFzZT1yLGk9TmJlKEZyKHQsZSkpLHQuYmFzZT1uKToobj14cih0LCJhY2NlbnQiKSxyPW4uYmFzZSk7dmFyIGE9RnIocixlLmhhdmluZ0NyYW1wZWRTdHlsZSgpKSxzPW4uaXNTaGlmdHkmJkp0LmlzQ2hhcmFjdGVyQm94KHIpLGw9MDtpZihzKXt2YXIgdT1KdC5nZXRCYXNlRWxlbShyKSxoPUZyKHUsZS5oYXZpbmdDcmFtcGVkU3R5bGUoKSk7bD1oeihoKS5za2V3fXZhciBmPW4ubGFiZWw9PT0iXFxjIixkPWY/YS5oZWlnaHQrYS5kZXB0aDpNYXRoLm1pbihhLmhlaWdodCxlLmZvbnRNZXRyaWNzKCkueEhlaWdodCkscDtpZihuLmlzU3RyZXRjaHkpcD1jdS5zdmdTcGFuKG4sZSkscD1CZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiZmlyc3RCYXNlbGluZSIsY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOmF9LHt0eXBlOiJlbGVtIixlbGVtOnAsd3JhcHBlckNsYXNzZXM6WyJzdmctYWxpZ24iXSx3cmFwcGVyU3R5bGU6bD4wP3t3aWR0aDoiY2FsYygxMDAlIC0gIitrdCgyKmwpKyIpIixtYXJnaW5MZWZ0Omt0KDIqbCl9OnZvaWQgMH1dfSxlKTtlbHNle3ZhciBtLGc7bi5sYWJlbD09PSJcXHZlYyI/KG09QmUuc3RhdGljU3ZnKCJ2ZWMiLGUpLGc9QmUuc3ZnRGF0YS52ZWNbMV0pOihtPUJlLm1ha2VPcmQoe21vZGU6bi5tb2RlLHRleHQ6bi5sYWJlbH0sZSwidGV4dG9yZCIpLG09aHoobSksbS5pdGFsaWM9MCxnPW0ud2lkdGgsZiYmKGQrPW0uZGVwdGgpKSxwPUJlLm1ha2VTcGFuKFsiYWNjZW50LWJvZHkiXSxbbV0pO3ZhciB5PW4ubGFiZWw9PT0iXFx0ZXh0Y2lyY2xlZCI7eSYmKHAuY2xhc3Nlcy5wdXNoKCJhY2NlbnQtZnVsbCIpLGQ9YS5oZWlnaHQpO3ZhciB2PWw7eXx8KHYtPWcvMikscC5zdHlsZS5sZWZ0PWt0KHYpLG4ubGFiZWw9PT0iXFx0ZXh0Y2lyY2xlZCImJihwLnN0eWxlLnRvcD0iLjJlbSIpLHA9QmUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImZpcnN0QmFzZWxpbmUiLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTphfSx7dHlwZToia2VybiIsc2l6ZTotZH0se3R5cGU6ImVsZW0iLGVsZW06cH1dfSxlKX12YXIgeD1CZS5tYWtlU3BhbihbIm1vcmQiLCJhY2NlbnQiXSxbcF0sZSk7cmV0dXJuIGk/KGkuY2hpbGRyZW5bMF09eCxpLmhlaWdodD1NYXRoLm1heCh4LmhlaWdodCxpLmhlaWdodCksaS5jbGFzc2VzWzBdPSJtb3JkIixpKTp4fSwiaHRtbEJ1aWxkZXIkYSIpLGVHPW8oKHQsZSk9Pnt2YXIgcj10LmlzU3RyZXRjaHk/Y3UubWF0aE1Mbm9kZSh0LmxhYmVsKTpuZXcgZHQuTWF0aE5vZGUoIm1vIixbQ28odC5sYWJlbCx0Lm1vZGUpXSksbj1uZXcgZHQuTWF0aE5vZGUoIm1vdmVyIixbeW4odC5iYXNlLGUpLHJdKTtyZXR1cm4gbi5zZXRBdHRyaWJ1dGUoImFjY2VudCIsInRydWUiKSxufSwibWF0aG1sQnVpbGRlciQ5IiksYzRlPW5ldyBSZWdFeHAoWyJcXGFjdXRlIiwiXFxncmF2ZSIsIlxcZGRvdCIsIlxcdGlsZGUiLCJcXGJhciIsIlxcYnJldmUiLCJcXGNoZWNrIiwiXFxoYXQiLCJcXHZlYyIsIlxcZG90IiwiXFxtYXRocmluZyJdLm1hcCh0PT4iXFwiK3QpLmpvaW4oInwiKSk7TnQoe3R5cGU6ImFjY2VudCIsbmFtZXM6WyJcXGFjdXRlIiwiXFxncmF2ZSIsIlxcZGRvdCIsIlxcdGlsZGUiLCJcXGJhciIsIlxcYnJldmUiLCJcXGNoZWNrIiwiXFxoYXQiLCJcXHZlYyIsIlxcZG90IiwiXFxtYXRocmluZyIsIlxcd2lkZWNoZWNrIiwiXFx3aWRlaGF0IiwiXFx3aWRldGlsZGUiLCJcXG92ZXJyaWdodGFycm93IiwiXFxvdmVybGVmdGFycm93IiwiXFxPdmVycmlnaHRhcnJvdyIsIlxcb3ZlcmxlZnRyaWdodGFycm93IiwiXFxvdmVyZ3JvdXAiLCJcXG92ZXJsaW5lc2VnbWVudCIsIlxcb3ZlcmxlZnRoYXJwb29uIiwiXFxvdmVycmlnaHRoYXJwb29uIl0scHJvcHM6e251bUFyZ3M6MX0saGFuZGxlcjpvKCh0LGUpPT57dmFyIHI9ZzMoZVswXSksbj0hYzRlLnRlc3QodC5mdW5jTmFtZSksaT0hbnx8dC5mdW5jTmFtZT09PSJcXHdpZGVoYXQifHx0LmZ1bmNOYW1lPT09Ilxcd2lkZXRpbGRlInx8dC5mdW5jTmFtZT09PSJcXHdpZGVjaGVjayI7cmV0dXJue3R5cGU6ImFjY2VudCIsbW9kZTp0LnBhcnNlci5tb2RlLGxhYmVsOnQuZnVuY05hbWUsaXNTdHJldGNoeTpuLGlzU2hpZnR5OmksYmFzZTpyfX0sImhhbmRsZXIiKSxodG1sQnVpbGRlcjpHNyxtYXRobWxCdWlsZGVyOmVHfSk7TnQoe3R5cGU6ImFjY2VudCIsbmFtZXM6WyJcXCciLCJcXGAiLCJcXF4iLCJcXH4iLCJcXD0iLCJcXHUiLCJcXC4iLCdcXCInLCJcXGMiLCJcXHIiLCJcXEgiLCJcXHYiLCJcXHRleHRjaXJjbGVkIl0scHJvcHM6e251bUFyZ3M6MSxhbGxvd2VkSW5UZXh0OiEwLGFsbG93ZWRJbk1hdGg6ITAsYXJnVHlwZXM6WyJwcmltaXRpdmUiXX0saGFuZGxlcjpvKCh0LGUpPT57dmFyIHI9ZVswXSxuPXQucGFyc2VyLm1vZGU7cmV0dXJuIG49PT0ibWF0aCImJih0LnBhcnNlci5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoIm1hdGhWc1RleHRBY2NlbnRzIiwiTGFUZVgncyBhY2NlbnQgIit0LmZ1bmNOYW1lKyIgd29ya3Mgb25seSBpbiB0ZXh0IG1vZGUiKSxuPSJ0ZXh0Iikse3R5cGU6ImFjY2VudCIsbW9kZTpuLGxhYmVsOnQuZnVuY05hbWUsaXNTdHJldGNoeTohMSxpc1NoaWZ0eTohMCxiYXNlOnJ9fSwiaGFuZGxlciIpLGh0bWxCdWlsZGVyOkc3LG1hdGhtbEJ1aWxkZXI6ZUd9KTtOdCh7dHlwZToiYWNjZW50VW5kZXIiLG5hbWVzOlsiXFx1bmRlcmxlZnRhcnJvdyIsIlxcdW5kZXJyaWdodGFycm93IiwiXFx1bmRlcmxlZnRyaWdodGFycm93IiwiXFx1bmRlcmdyb3VwIiwiXFx1bmRlcmxpbmVzZWdtZW50IiwiXFx1dGlsZGUiXSxwcm9wczp7bnVtQXJnczoxfSxoYW5kbGVyOm8oKHQsZSk9Pnt2YXJ7cGFyc2VyOnIsZnVuY05hbWU6bn09dCxpPWVbMF07cmV0dXJue3R5cGU6ImFjY2VudFVuZGVyIixtb2RlOnIubW9kZSxsYWJlbDpuLGJhc2U6aX19LCJoYW5kbGVyIiksaHRtbEJ1aWxkZXI6bygodCxlKT0+e3ZhciByPUZyKHQuYmFzZSxlKSxuPWN1LnN2Z1NwYW4odCxlKSxpPXQubGFiZWw9PT0iXFx1dGlsZGUiPy4xMjowLGE9QmUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6InRvcCIscG9zaXRpb25EYXRhOnIuaGVpZ2h0LGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTpuLHdyYXBwZXJDbGFzc2VzOlsic3ZnLWFsaWduIl19LHt0eXBlOiJrZXJuIixzaXplOml9LHt0eXBlOiJlbGVtIixlbGVtOnJ9XX0sZSk7cmV0dXJuIEJlLm1ha2VTcGFuKFsibW9yZCIsImFjY2VudHVuZGVyIl0sW2FdLGUpfSwiaHRtbEJ1aWxkZXIiKSxtYXRobWxCdWlsZGVyOm8oKHQsZSk9Pnt2YXIgcj1jdS5tYXRoTUxub2RlKHQubGFiZWwpLG49bmV3IGR0Lk1hdGhOb2RlKCJtdW5kZXIiLFt5bih0LmJhc2UsZSkscl0pO3JldHVybiBuLnNldEF0dHJpYnV0ZSgiYWNjZW50dW5kZXIiLCJ0cnVlIiksbn0sIm1hdGhtbEJ1aWxkZXIiKX0pO3MzPW8odD0+e3ZhciBlPW5ldyBkdC5NYXRoTm9kZSgibXBhZGRlZCIsdD9bdF06W10pO3JldHVybiBlLnNldEF0dHJpYnV0ZSgid2lkdGgiLCIrMC42ZW0iKSxlLnNldEF0dHJpYnV0ZSgibHNwYWNlIiwiMC4zZW0iKSxlfSwicGFkZGVkTm9kZSIpO050KHt0eXBlOiJ4QXJyb3ciLG5hbWVzOlsiXFx4bGVmdGFycm93IiwiXFx4cmlnaHRhcnJvdyIsIlxceExlZnRhcnJvdyIsIlxceFJpZ2h0YXJyb3ciLCJcXHhsZWZ0cmlnaHRhcnJvdyIsIlxceExlZnRyaWdodGFycm93IiwiXFx4aG9va2xlZnRhcnJvdyIsIlxceGhvb2tyaWdodGFycm93IiwiXFx4bWFwc3RvIiwiXFx4cmlnaHRoYXJwb29uZG93biIsIlxceHJpZ2h0aGFycG9vbnVwIiwiXFx4bGVmdGhhcnBvb25kb3duIiwiXFx4bGVmdGhhcnBvb251cCIsIlxceHJpZ2h0bGVmdGhhcnBvb25zIiwiXFx4bGVmdHJpZ2h0aGFycG9vbnMiLCJcXHhsb25nZXF1YWwiLCJcXHh0d29oZWFkcmlnaHRhcnJvdyIsIlxceHR3b2hlYWRsZWZ0YXJyb3ciLCJcXHh0b2Zyb20iLCJcXHhyaWdodGxlZnRhcnJvd3MiLCJcXHhyaWdodGVxdWlsaWJyaXVtIiwiXFx4bGVmdGVxdWlsaWJyaXVtIiwiXFxcXGNkcmlnaHRhcnJvdyIsIlxcXFxjZGxlZnRhcnJvdyIsIlxcXFxjZGxvbmdlcXVhbCJdLHByb3BzOntudW1BcmdzOjEsbnVtT3B0aW9uYWxBcmdzOjF9LGhhbmRsZXIodCxlLHIpe3ZhcntwYXJzZXI6bixmdW5jTmFtZTppfT10O3JldHVybnt0eXBlOiJ4QXJyb3ciLG1vZGU6bi5tb2RlLGxhYmVsOmksYm9keTplWzBdLGJlbG93OnJbMF19fSxodG1sQnVpbGRlcih0LGUpe3ZhciByPWUuc3R5bGUsbj1lLmhhdmluZ1N0eWxlKHIuc3VwKCkpLGk9QmUud3JhcEZyYWdtZW50KEZyKHQuYm9keSxuLGUpLGUpLGE9dC5sYWJlbC5zbGljZSgwLDIpPT09IlxceCI/IngiOiJjZCI7aS5jbGFzc2VzLnB1c2goYSsiLWFycm93LXBhZCIpO3ZhciBzO3QuYmVsb3cmJihuPWUuaGF2aW5nU3R5bGUoci5zdWIoKSkscz1CZS53cmFwRnJhZ21lbnQoRnIodC5iZWxvdyxuLGUpLGUpLHMuY2xhc3Nlcy5wdXNoKGErIi1hcnJvdy1wYWQiKSk7dmFyIGw9Y3Uuc3ZnU3Bhbih0LGUpLHU9LWUuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0Ky41KmwuaGVpZ2h0LGg9LWUuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0LS41KmwuaGVpZ2h0LS4xMTE7KGkuZGVwdGg+LjI1fHx0LmxhYmVsPT09IlxceGxlZnRlcXVpbGlicml1bSIpJiYoaC09aS5kZXB0aCk7dmFyIGY7aWYocyl7dmFyIGQ9LWUuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0K3MuaGVpZ2h0Ky41KmwuaGVpZ2h0Ky4xMTE7Zj1CZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiaW5kaXZpZHVhbFNoaWZ0IixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06aSxzaGlmdDpofSx7dHlwZToiZWxlbSIsZWxlbTpsLHNoaWZ0OnV9LHt0eXBlOiJlbGVtIixlbGVtOnMsc2hpZnQ6ZH1dfSxlKX1lbHNlIGY9QmUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImluZGl2aWR1YWxTaGlmdCIsY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOmksc2hpZnQ6aH0se3R5cGU6ImVsZW0iLGVsZW06bCxzaGlmdDp1fV19LGUpO3JldHVybiBmLmNoaWxkcmVuWzBdLmNoaWxkcmVuWzBdLmNoaWxkcmVuWzFdLmNsYXNzZXMucHVzaCgic3ZnLWFsaWduIiksQmUubWFrZVNwYW4oWyJtcmVsIiwieC1hcnJvdyJdLFtmXSxlKX0sbWF0aG1sQnVpbGRlcih0LGUpe3ZhciByPWN1Lm1hdGhNTG5vZGUodC5sYWJlbCk7ci5zZXRBdHRyaWJ1dGUoIm1pbnNpemUiLHQubGFiZWwuY2hhckF0KDApPT09IngiPyIxLjc1ZW0iOiIzLjBlbSIpO3ZhciBuO2lmKHQuYm9keSl7dmFyIGk9czMoeW4odC5ib2R5LGUpKTtpZih0LmJlbG93KXt2YXIgYT1zMyh5bih0LmJlbG93LGUpKTtuPW5ldyBkdC5NYXRoTm9kZSgibXVuZGVyb3ZlciIsW3IsYSxpXSl9ZWxzZSBuPW5ldyBkdC5NYXRoTm9kZSgibW92ZXIiLFtyLGldKX1lbHNlIGlmKHQuYmVsb3cpe3ZhciBzPXMzKHluKHQuYmVsb3csZSkpO249bmV3IGR0Lk1hdGhOb2RlKCJtdW5kZXIiLFtyLHNdKX1lbHNlIG49czMoKSxuPW5ldyBkdC5NYXRoTm9kZSgibW92ZXIiLFtyLG5dKTtyZXR1cm4gbn19KTt1NGU9QmUubWFrZVNwYW47byh0RywiaHRtbEJ1aWxkZXIkOSIpO28ockcsIm1hdGhtbEJ1aWxkZXIkOCIpO050KHt0eXBlOiJtY2xhc3MiLG5hbWVzOlsiXFxtYXRob3JkIiwiXFxtYXRoYmluIiwiXFxtYXRocmVsIiwiXFxtYXRob3BlbiIsIlxcbWF0aGNsb3NlIiwiXFxtYXRocHVuY3QiLCJcXG1hdGhpbm5lciJdLHByb3BzOntudW1BcmdzOjEscHJpbWl0aXZlOiEwfSxoYW5kbGVyKHQsZSl7dmFye3BhcnNlcjpyLGZ1bmNOYW1lOm59PXQsaT1lWzBdO3JldHVybnt0eXBlOiJtY2xhc3MiLG1vZGU6ci5tb2RlLG1jbGFzczoibSIrbi5zbGljZSg1KSxib2R5OmRpKGkpLGlzQ2hhcmFjdGVyQm94Okp0LmlzQ2hhcmFjdGVyQm94KGkpfX0saHRtbEJ1aWxkZXI6dEcsbWF0aG1sQnVpbGRlcjpyR30pO1QzPW8odD0+e3ZhciBlPXQudHlwZT09PSJvcmRncm91cCImJnQuYm9keS5sZW5ndGg/dC5ib2R5WzBdOnQ7cmV0dXJuIGUudHlwZT09PSJhdG9tIiYmKGUuZmFtaWx5PT09ImJpbiJ8fGUuZmFtaWx5PT09InJlbCIpPyJtIitlLmZhbWlseToibW9yZCJ9LCJiaW5yZWxDbGFzcyIpO050KHt0eXBlOiJtY2xhc3MiLG5hbWVzOlsiXFxAYmlucmVsIl0scHJvcHM6e251bUFyZ3M6Mn0saGFuZGxlcih0LGUpe3ZhcntwYXJzZXI6cn09dDtyZXR1cm57dHlwZToibWNsYXNzIixtb2RlOnIubW9kZSxtY2xhc3M6VDMoZVswXSksYm9keTpkaShlWzFdKSxpc0NoYXJhY3RlckJveDpKdC5pc0NoYXJhY3RlckJveChlWzFdKX19fSk7TnQoe3R5cGU6Im1jbGFzcyIsbmFtZXM6WyJcXHN0YWNrcmVsIiwiXFxvdmVyc2V0IiwiXFx1bmRlcnNldCJdLHByb3BzOntudW1BcmdzOjJ9LGhhbmRsZXIodCxlKXt2YXJ7cGFyc2VyOnIsZnVuY05hbWU6bn09dCxpPWVbMV0sYT1lWzBdLHM7biE9PSJcXHN0YWNrcmVsIj9zPVQzKGkpOnM9Im1yZWwiO3ZhciBsPXt0eXBlOiJvcCIsbW9kZTppLm1vZGUsbGltaXRzOiEwLGFsd2F5c0hhbmRsZVN1cFN1YjohMCxwYXJlbnRJc1N1cFN1YjohMSxzeW1ib2w6ITEsc3VwcHJlc3NCYXNlU2hpZnQ6biE9PSJcXHN0YWNrcmVsIixib2R5OmRpKGkpfSx1PXt0eXBlOiJzdXBzdWIiLG1vZGU6YS5tb2RlLGJhc2U6bCxzdXA6bj09PSJcXHVuZGVyc2V0Ij9udWxsOmEsc3ViOm49PT0iXFx1bmRlcnNldCI/YTpudWxsfTtyZXR1cm57dHlwZToibWNsYXNzIixtb2RlOnIubW9kZSxtY2xhc3M6cyxib2R5Olt1XSxpc0NoYXJhY3RlckJveDpKdC5pc0NoYXJhY3RlckJveCh1KX19LGh0bWxCdWlsZGVyOnRHLG1hdGhtbEJ1aWxkZXI6ckd9KTtOdCh7dHlwZToicG1iIixuYW1lczpbIlxccG1iIl0scHJvcHM6e251bUFyZ3M6MSxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyKHQsZSl7dmFye3BhcnNlcjpyfT10O3JldHVybnt0eXBlOiJwbWIiLG1vZGU6ci5tb2RlLG1jbGFzczpUMyhlWzBdKSxib2R5OmRpKGVbMF0pfX0saHRtbEJ1aWxkZXIodCxlKXt2YXIgcj1QaSh0LmJvZHksZSwhMCksbj1CZS5tYWtlU3BhbihbdC5tY2xhc3NdLHIsZSk7cmV0dXJuIG4uc3R5bGUudGV4dFNoYWRvdz0iMC4wMmVtIDAuMDFlbSAwLjA0cHgiLG59LG1hdGhtbEJ1aWxkZXIodCxlKXt2YXIgcj1rcyh0LmJvZHksZSksbj1uZXcgZHQuTWF0aE5vZGUoIm1zdHlsZSIscik7cmV0dXJuIG4uc2V0QXR0cmlidXRlKCJzdHlsZSIsInRleHQtc2hhZG93OiAwLjAyZW0gMC4wMWVtIDAuMDRweCIpLG59fSk7aDRlPXsiPiI6IlxcXFxjZHJpZ2h0YXJyb3ciLCI8IjoiXFxcXGNkbGVmdGFycm93IiwiPSI6IlxcXFxjZGxvbmdlcXVhbCIsQToiXFx1cGFycm93IixWOiJcXGRvd25hcnJvdyIsInwiOiJcXFZlcnQiLCIuIjoibm8gYXJyb3cifSx5ej1vKCgpPT4oe3R5cGU6InN0eWxpbmciLGJvZHk6W10sbW9kZToibWF0aCIsc3R5bGU6ImRpc3BsYXkifSksIm5ld0NlbGwiKSx2ej1vKHQ9PnQudHlwZT09PSJ0ZXh0b3JkIiYmdC50ZXh0PT09IkAiLCJpc1N0YXJ0T2ZBcnJvdyIpLGY0ZT1vKCh0LGUpPT4odC50eXBlPT09Im1hdGhvcmQifHx0LnR5cGU9PT0iYXRvbSIpJiZ0LnRleHQ9PT1lLCJpc0xhYmVsRW5kIik7byhkNGUsImNkQXJyb3ciKTtvKHA0ZSwicGFyc2VDRCIpO050KHt0eXBlOiJjZGxhYmVsIixuYW1lczpbIlxcXFxjZGxlZnQiLCJcXFxcY2RyaWdodCJdLHByb3BzOntudW1BcmdzOjF9LGhhbmRsZXIodCxlKXt2YXJ7cGFyc2VyOnIsZnVuY05hbWU6bn09dDtyZXR1cm57dHlwZToiY2RsYWJlbCIsbW9kZTpyLm1vZGUsc2lkZTpuLnNsaWNlKDQpLGxhYmVsOmVbMF19fSxodG1sQnVpbGRlcih0LGUpe3ZhciByPWUuaGF2aW5nU3R5bGUoZS5zdHlsZS5zdXAoKSksbj1CZS53cmFwRnJhZ21lbnQoRnIodC5sYWJlbCxyLGUpLGUpO3JldHVybiBuLmNsYXNzZXMucHVzaCgiY2QtbGFiZWwtIit0LnNpZGUpLG4uc3R5bGUuYm90dG9tPWt0KC44LW4uZGVwdGgpLG4uaGVpZ2h0PTAsbi5kZXB0aD0wLG59LG1hdGhtbEJ1aWxkZXIodCxlKXt2YXIgcj1uZXcgZHQuTWF0aE5vZGUoIm1yb3ciLFt5bih0LmxhYmVsLGUpXSk7cmV0dXJuIHI9bmV3IGR0Lk1hdGhOb2RlKCJtcGFkZGVkIixbcl0pLHIuc2V0QXR0cmlidXRlKCJ3aWR0aCIsIjAiKSx0LnNpZGU9PT0ibGVmdCImJnIuc2V0QXR0cmlidXRlKCJsc3BhY2UiLCItMXdpZHRoIiksci5zZXRBdHRyaWJ1dGUoInZvZmZzZXQiLCIwLjdlbSIpLHI9bmV3IGR0Lk1hdGhOb2RlKCJtc3R5bGUiLFtyXSksci5zZXRBdHRyaWJ1dGUoImRpc3BsYXlzdHlsZSIsImZhbHNlIiksci5zZXRBdHRyaWJ1dGUoInNjcmlwdGxldmVsIiwiMSIpLHJ9fSk7TnQoe3R5cGU6ImNkbGFiZWxwYXJlbnQiLG5hbWVzOlsiXFxcXGNkcGFyZW50Il0scHJvcHM6e251bUFyZ3M6MX0saGFuZGxlcih0LGUpe3ZhcntwYXJzZXI6cn09dDtyZXR1cm57dHlwZToiY2RsYWJlbHBhcmVudCIsbW9kZTpyLm1vZGUsZnJhZ21lbnQ6ZVswXX19LGh0bWxCdWlsZGVyKHQsZSl7dmFyIHI9QmUud3JhcEZyYWdtZW50KEZyKHQuZnJhZ21lbnQsZSksZSk7cmV0dXJuIHIuY2xhc3Nlcy5wdXNoKCJjZC12ZXJ0LWFycm93Iikscn0sbWF0aG1sQnVpbGRlcih0LGUpe3JldHVybiBuZXcgZHQuTWF0aE5vZGUoIm1yb3ciLFt5bih0LmZyYWdtZW50LGUpXSl9fSk7TnQoe3R5cGU6InRleHRvcmQiLG5hbWVzOlsiXFxAY2hhciJdLHByb3BzOntudW1BcmdzOjEsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcih0LGUpe2Zvcih2YXJ7cGFyc2VyOnJ9PXQsbj14cihlWzBdLCJvcmRncm91cCIpLGk9bi5ib2R5LGE9IiIscz0wO3M8aS5sZW5ndGg7cysrKXt2YXIgbD14cihpW3NdLCJ0ZXh0b3JkIik7YSs9bC50ZXh0fXZhciB1PXBhcnNlSW50KGEpLGg7aWYoaXNOYU4odSkpdGhyb3cgbmV3IGd0KCJcXEBjaGFyIGhhcyBub24tbnVtZXJpYyBhcmd1bWVudCAiK2EpO2lmKHU8MHx8dT49MTExNDExMSl0aHJvdyBuZXcgZ3QoIlxcQGNoYXIgd2l0aCBpbnZhbGlkIGNvZGUgcG9pbnQgIithKTtyZXR1cm4gdTw9NjU1MzU/aD1TdHJpbmcuZnJvbUNoYXJDb2RlKHUpOih1LT02NTUzNixoPVN0cmluZy5mcm9tQ2hhckNvZGUoKHU+PjEwKSs1NTI5NiwodSYxMDIzKSs1NjMyMCkpLHt0eXBlOiJ0ZXh0b3JkIixtb2RlOnIubW9kZSx0ZXh0Omh9fX0pO25HPW8oKHQsZSk9Pnt2YXIgcj1QaSh0LmJvZHksZS53aXRoQ29sb3IodC5jb2xvciksITEpO3JldHVybiBCZS5tYWtlRnJhZ21lbnQocil9LCJodG1sQnVpbGRlciQ4IiksaUc9bygodCxlKT0+e3ZhciByPWtzKHQuYm9keSxlLndpdGhDb2xvcih0LmNvbG9yKSksbj1uZXcgZHQuTWF0aE5vZGUoIm1zdHlsZSIscik7cmV0dXJuIG4uc2V0QXR0cmlidXRlKCJtYXRoY29sb3IiLHQuY29sb3IpLG59LCJtYXRobWxCdWlsZGVyJDciKTtOdCh7dHlwZToiY29sb3IiLG5hbWVzOlsiXFx0ZXh0Y29sb3IiXSxwcm9wczp7bnVtQXJnczoyLGFsbG93ZWRJblRleHQ6ITAsYXJnVHlwZXM6WyJjb2xvciIsIm9yaWdpbmFsIl19LGhhbmRsZXIodCxlKXt2YXJ7cGFyc2VyOnJ9PXQsbj14cihlWzBdLCJjb2xvci10b2tlbiIpLmNvbG9yLGk9ZVsxXTtyZXR1cm57dHlwZToiY29sb3IiLG1vZGU6ci5tb2RlLGNvbG9yOm4sYm9keTpkaShpKX19LGh0bWxCdWlsZGVyOm5HLG1hdGhtbEJ1aWxkZXI6aUd9KTtOdCh7dHlwZToiY29sb3IiLG5hbWVzOlsiXFxjb2xvciJdLHByb3BzOntudW1BcmdzOjEsYWxsb3dlZEluVGV4dDohMCxhcmdUeXBlczpbImNvbG9yIl19LGhhbmRsZXIodCxlKXt2YXJ7cGFyc2VyOnIsYnJlYWtPblRva2VuVGV4dDpufT10LGk9eHIoZVswXSwiY29sb3ItdG9rZW4iKS5jb2xvcjtyLmd1bGxldC5tYWNyb3Muc2V0KCJcXGN1cnJlbnRAY29sb3IiLGkpO3ZhciBhPXIucGFyc2VFeHByZXNzaW9uKCEwLG4pO3JldHVybnt0eXBlOiJjb2xvciIsbW9kZTpyLm1vZGUsY29sb3I6aSxib2R5OmF9fSxodG1sQnVpbGRlcjpuRyxtYXRobWxCdWlsZGVyOmlHfSk7TnQoe3R5cGU6ImNyIixuYW1lczpbIlxcXFwiXSxwcm9wczp7bnVtQXJnczowLG51bU9wdGlvbmFsQXJnczowLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXIodCxlLHIpe3ZhcntwYXJzZXI6bn09dCxpPW4uZ3VsbGV0LmZ1dHVyZSgpLnRleHQ9PT0iWyI/bi5wYXJzZVNpemVHcm91cCghMCk6bnVsbCxhPSFuLnNldHRpbmdzLmRpc3BsYXlNb2RlfHwhbi5zZXR0aW5ncy51c2VTdHJpY3RCZWhhdmlvcigibmV3TGluZUluRGlzcGxheU1vZGUiLCJJbiBMYVRlWCwgXFxcXCBvciBcXG5ld2xpbmUgZG9lcyBub3RoaW5nIGluIGRpc3BsYXkgbW9kZSIpO3JldHVybnt0eXBlOiJjciIsbW9kZTpuLm1vZGUsbmV3TGluZTphLHNpemU6aSYmeHIoaSwic2l6ZSIpLnZhbHVlfX0saHRtbEJ1aWxkZXIodCxlKXt2YXIgcj1CZS5tYWtlU3BhbihbIm1zcGFjZSJdLFtdLGUpO3JldHVybiB0Lm5ld0xpbmUmJihyLmNsYXNzZXMucHVzaCgibmV3bGluZSIpLHQuc2l6ZSYmKHIuc3R5bGUubWFyZ2luVG9wPWt0KHRpKHQuc2l6ZSxlKSkpKSxyfSxtYXRobWxCdWlsZGVyKHQsZSl7dmFyIHI9bmV3IGR0Lk1hdGhOb2RlKCJtc3BhY2UiKTtyZXR1cm4gdC5uZXdMaW5lJiYoci5zZXRBdHRyaWJ1dGUoImxpbmVicmVhayIsIm5ld2xpbmUiKSx0LnNpemUmJnIuc2V0QXR0cmlidXRlKCJoZWlnaHQiLGt0KHRpKHQuc2l6ZSxlKSkpKSxyfX0pO0w3PXsiXFxnbG9iYWwiOiJcXGdsb2JhbCIsIlxcbG9uZyI6IlxcXFxnbG9iYWxsb25nIiwiXFxcXGdsb2JhbGxvbmciOiJcXFxcZ2xvYmFsbG9uZyIsIlxcZGVmIjoiXFxnZGVmIiwiXFxnZGVmIjoiXFxnZGVmIiwiXFxlZGVmIjoiXFx4ZGVmIiwiXFx4ZGVmIjoiXFx4ZGVmIiwiXFxsZXQiOiJcXFxcZ2xvYmFsbGV0IiwiXFxmdXR1cmVsZXQiOiJcXFxcZ2xvYmFsZnV0dXJlIn0sYUc9byh0PT57dmFyIGU9dC50ZXh0O2lmKC9eKD86W1xce30kJiNeX118RU9GKSQvLnRlc3QoZSkpdGhyb3cgbmV3IGd0KCJFeHBlY3RlZCBhIGNvbnRyb2wgc2VxdWVuY2UiLHQpO3JldHVybiBlfSwiY2hlY2tDb250cm9sU2VxdWVuY2UiKSxtNGU9byh0PT57dmFyIGU9dC5ndWxsZXQucG9wVG9rZW4oKTtyZXR1cm4gZS50ZXh0PT09Ij0iJiYoZT10Lmd1bGxldC5wb3BUb2tlbigpLGUudGV4dD09PSIgIiYmKGU9dC5ndWxsZXQucG9wVG9rZW4oKSkpLGV9LCJnZXRSSFMiKSxzRz1vKCh0LGUscixuKT0+e3ZhciBpPXQuZ3VsbGV0Lm1hY3Jvcy5nZXQoci50ZXh0KTtpPT1udWxsJiYoci5ub2V4cGFuZD0hMCxpPXt0b2tlbnM6W3JdLG51bUFyZ3M6MCx1bmV4cGFuZGFibGU6IXQuZ3VsbGV0LmlzRXhwYW5kYWJsZShyLnRleHQpfSksdC5ndWxsZXQubWFjcm9zLnNldChlLGksbil9LCJsZXRDb21tYW5kIik7TnQoe3R5cGU6ImludGVybmFsIixuYW1lczpbIlxcZ2xvYmFsIiwiXFxsb25nIiwiXFxcXGdsb2JhbGxvbmciXSxwcm9wczp7bnVtQXJnczowLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXIodCl7dmFye3BhcnNlcjplLGZ1bmNOYW1lOnJ9PXQ7ZS5jb25zdW1lU3BhY2VzKCk7dmFyIG49ZS5mZXRjaCgpO2lmKEw3W24udGV4dF0pcmV0dXJuKHI9PT0iXFxnbG9iYWwifHxyPT09IlxcXFxnbG9iYWxsb25nIikmJihuLnRleHQ9TDdbbi50ZXh0XSkseHIoZS5wYXJzZUZ1bmN0aW9uKCksImludGVybmFsIik7dGhyb3cgbmV3IGd0KCJJbnZhbGlkIHRva2VuIGFmdGVyIG1hY3JvIHByZWZpeCIsbil9fSk7TnQoe3R5cGU6ImludGVybmFsIixuYW1lczpbIlxcZGVmIiwiXFxnZGVmIiwiXFxlZGVmIiwiXFx4ZGVmIl0scHJvcHM6e251bUFyZ3M6MCxhbGxvd2VkSW5UZXh0OiEwLHByaW1pdGl2ZTohMH0saGFuZGxlcih0KXt2YXJ7cGFyc2VyOmUsZnVuY05hbWU6cn09dCxuPWUuZ3VsbGV0LnBvcFRva2VuKCksaT1uLnRleHQ7aWYoL14oPzpbXFx7fSQmI15fXXxFT0YpJC8udGVzdChpKSl0aHJvdyBuZXcgZ3QoIkV4cGVjdGVkIGEgY29udHJvbCBzZXF1ZW5jZSIsbik7Zm9yKHZhciBhPTAscyxsPVtbXV07ZS5ndWxsZXQuZnV0dXJlKCkudGV4dCE9PSJ7IjspaWYobj1lLmd1bGxldC5wb3BUb2tlbigpLG4udGV4dD09PSIjIil7aWYoZS5ndWxsZXQuZnV0dXJlKCkudGV4dD09PSJ7Iil7cz1lLmd1bGxldC5mdXR1cmUoKSxsW2FdLnB1c2goInsiKTticmVha31pZihuPWUuZ3VsbGV0LnBvcFRva2VuKCksIS9eWzEtOV0kLy50ZXN0KG4udGV4dCkpdGhyb3cgbmV3IGd0KCdJbnZhbGlkIGFyZ3VtZW50IG51bWJlciAiJytuLnRleHQrJyInKTtpZihwYXJzZUludChuLnRleHQpIT09YSsxKXRocm93IG5ldyBndCgnQXJndW1lbnQgbnVtYmVyICInK24udGV4dCsnIiBvdXQgb2Ygb3JkZXInKTthKyssbC5wdXNoKFtdKX1lbHNle2lmKG4udGV4dD09PSJFT0YiKXRocm93IG5ldyBndCgiRXhwZWN0ZWQgYSBtYWNybyBkZWZpbml0aW9uIik7bFthXS5wdXNoKG4udGV4dCl9dmFye3Rva2Vuczp1fT1lLmd1bGxldC5jb25zdW1lQXJnKCk7cmV0dXJuIHMmJnUudW5zaGlmdChzKSwocj09PSJcXGVkZWYifHxyPT09IlxceGRlZiIpJiYodT1lLmd1bGxldC5leHBhbmRUb2tlbnModSksdS5yZXZlcnNlKCkpLGUuZ3VsbGV0Lm1hY3Jvcy5zZXQoaSx7dG9rZW5zOnUsbnVtQXJnczphLGRlbGltaXRlcnM6bH0scj09PUw3W3JdKSx7dHlwZToiaW50ZXJuYWwiLG1vZGU6ZS5tb2RlfX19KTtOdCh7dHlwZToiaW50ZXJuYWwiLG5hbWVzOlsiXFxsZXQiLCJcXFxcZ2xvYmFsbGV0Il0scHJvcHM6e251bUFyZ3M6MCxhbGxvd2VkSW5UZXh0OiEwLHByaW1pdGl2ZTohMH0saGFuZGxlcih0KXt2YXJ7cGFyc2VyOmUsZnVuY05hbWU6cn09dCxuPWFHKGUuZ3VsbGV0LnBvcFRva2VuKCkpO2UuZ3VsbGV0LmNvbnN1bWVTcGFjZXMoKTt2YXIgaT1tNGUoZSk7cmV0dXJuIHNHKGUsbixpLHI9PT0iXFxcXGdsb2JhbGxldCIpLHt0eXBlOiJpbnRlcm5hbCIsbW9kZTplLm1vZGV9fX0pO050KHt0eXBlOiJpbnRlcm5hbCIsbmFtZXM6WyJcXGZ1dHVyZWxldCIsIlxcXFxnbG9iYWxmdXR1cmUiXSxwcm9wczp7bnVtQXJnczowLGFsbG93ZWRJblRleHQ6ITAscHJpbWl0aXZlOiEwfSxoYW5kbGVyKHQpe3ZhcntwYXJzZXI6ZSxmdW5jTmFtZTpyfT10LG49YUcoZS5ndWxsZXQucG9wVG9rZW4oKSksaT1lLmd1bGxldC5wb3BUb2tlbigpLGE9ZS5ndWxsZXQucG9wVG9rZW4oKTtyZXR1cm4gc0coZSxuLGEscj09PSJcXFxcZ2xvYmFsZnV0dXJlIiksZS5ndWxsZXQucHVzaFRva2VuKGEpLGUuZ3VsbGV0LnB1c2hUb2tlbihpKSx7dHlwZToiaW50ZXJuYWwiLG1vZGU6ZS5tb2RlfX19KTtGeT1vKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1Bbi5tYXRoW2VdJiZBbi5tYXRoW2VdLnJlcGxhY2UsYT1QNyhpfHxlLHIsbik7aWYoIWEpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBzeW1ib2wgIitlKyIgYW5kIGZvbnQgc2l6ZSAiK3IrIi4iKTtyZXR1cm4gYX0sImdldE1ldHJpY3MiKSxWNz1vKGZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPW4uaGF2aW5nQmFzZVN0eWxlKHIpLHM9QmUubWFrZVNwYW4oaS5jb25jYXQoYS5zaXppbmdDbGFzc2VzKG4pKSxbZV0sbiksbD1hLnNpemVNdWx0aXBsaWVyL24uc2l6ZU11bHRpcGxpZXI7cmV0dXJuIHMuaGVpZ2h0Kj1sLHMuZGVwdGgqPWwscy5tYXhGb250U2l6ZT1hLnNpemVNdWx0aXBsaWVyLHN9LCJzdHlsZVdyYXAiKSxvRz1vKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1yLmhhdmluZ0Jhc2VTdHlsZShuKSxhPSgxLXIuc2l6ZU11bHRpcGxpZXIvaS5zaXplTXVsdGlwbGllcikqci5mb250TWV0cmljcygpLmF4aXNIZWlnaHQ7ZS5jbGFzc2VzLnB1c2goImRlbGltY2VudGVyIiksZS5zdHlsZS50b3A9a3QoYSksZS5oZWlnaHQtPWEsZS5kZXB0aCs9YX0sImNlbnRlclNwYW4iKSxnNGU9byhmdW5jdGlvbihlLHIsbixpLGEscyl7dmFyIGw9QmUubWFrZVN5bWJvbChlLCJNYWluLVJlZ3VsYXIiLGEsaSksdT1WNyhsLHIsaSxzKTtyZXR1cm4gbiYmb0codSxpLHIpLHV9LCJtYWtlU21hbGxEZWxpbSIpLHk0ZT1vKGZ1bmN0aW9uKGUscixuLGkpe3JldHVybiBCZS5tYWtlU3ltYm9sKGUsIlNpemUiK3IrIi1SZWd1bGFyIixuLGkpfSwibWF0aHJtU2l6ZSIpLGxHPW8oZnVuY3Rpb24oZSxyLG4saSxhLHMpe3ZhciBsPXk0ZShlLHIsYSxpKSx1PVY3KEJlLm1ha2VTcGFuKFsiZGVsaW1zaXppbmciLCJzaXplIityXSxbbF0saSksdHIuVEVYVCxpLHMpO3JldHVybiBuJiZvRyh1LGksdHIuVEVYVCksdX0sIm1ha2VMYXJnZURlbGltIikscDc9byhmdW5jdGlvbihlLHIsbil7dmFyIGk7cj09PSJTaXplMS1SZWd1bGFyIj9pPSJkZWxpbS1zaXplMSI6aT0iZGVsaW0tc2l6ZTQiO3ZhciBhPUJlLm1ha2VTcGFuKFsiZGVsaW1zaXppbmdpbm5lciIsaV0sW0JlLm1ha2VTcGFuKFtdLFtCZS5tYWtlU3ltYm9sKGUscixuKV0pXSk7cmV0dXJue3R5cGU6ImVsZW0iLGVsZW06YX19LCJtYWtlR2x5cGhTcGFuIiksbTc9byhmdW5jdGlvbihlLHIsbil7dmFyIGk9amxbIlNpemU0LVJlZ3VsYXIiXVtlLmNoYXJDb2RlQXQoMCldP2psWyJTaXplNC1SZWd1bGFyIl1bZS5jaGFyQ29kZUF0KDApXVs0XTpqbFsiU2l6ZTEtUmVndWxhciJdW2UuY2hhckNvZGVBdCgwKV1bNF0sYT1uZXcgS2woImlubmVyIixTYmUoZSxNYXRoLnJvdW5kKDFlMypyKSkpLHM9bmV3IGxsKFthXSx7d2lkdGg6a3QoaSksaGVpZ2h0Omt0KHIpLHN0eWxlOiJ3aWR0aDoiK2t0KGkpLHZpZXdCb3g6IjAgMCAiKzFlMyppKyIgIitNYXRoLnJvdW5kKDFlMypyKSxwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJ4TWluWU1pbiJ9KSxsPUJlLm1ha2VTdmdTcGFuKFtdLFtzXSxuKTtyZXR1cm4gbC5oZWlnaHQ9cixsLnN0eWxlLmhlaWdodD1rdChyKSxsLnN0eWxlLndpZHRoPWt0KGkpLHt0eXBlOiJlbGVtIixlbGVtOmx9fSwibWFrZUlubmVyIiksUjc9LjAwOCxvMz17dHlwZToia2VybiIsc2l6ZTotMSpSN30sdjRlPVsifCIsIlxcbHZlcnQiLCJcXHJ2ZXJ0IiwiXFx2ZXJ0Il0seDRlPVsiXFx8IiwiXFxsVmVydCIsIlxcclZlcnQiLCJcXFZlcnQiXSxjRz1vKGZ1bmN0aW9uKGUscixuLGksYSxzKXt2YXIgbCx1LGgsZixkPSIiLHA9MDtsPWg9Zj1lLHU9bnVsbDt2YXIgbT0iU2l6ZTEtUmVndWxhciI7ZT09PSJcXHVwYXJyb3ciP2g9Zj0iXHUyM0QwIjplPT09IlxcVXBhcnJvdyI/aD1mPSJcdTIwMTYiOmU9PT0iXFxkb3duYXJyb3ciP2w9aD0iXHUyM0QwIjplPT09IlxcRG93bmFycm93Ij9sPWg9Ilx1MjAxNiI6ZT09PSJcXHVwZG93bmFycm93Ij8obD0iXFx1cGFycm93IixoPSJcdTIzRDAiLGY9IlxcZG93bmFycm93Iik6ZT09PSJcXFVwZG93bmFycm93Ij8obD0iXFxVcGFycm93IixoPSJcdTIwMTYiLGY9IlxcRG93bmFycm93Iik6SnQuY29udGFpbnModjRlLGUpPyhoPSJcdTIyMjMiLGQ9InZlcnQiLHA9MzMzKTpKdC5jb250YWlucyh4NGUsZSk/KGg9Ilx1MjIyNSIsZD0iZG91YmxldmVydCIscD01NTYpOmU9PT0iWyJ8fGU9PT0iXFxsYnJhY2siPyhsPSJcdTIzQTEiLGg9Ilx1MjNBMiIsZj0iXHUyM0EzIixtPSJTaXplNC1SZWd1bGFyIixkPSJsYnJhY2siLHA9NjY3KTplPT09Il0ifHxlPT09IlxccmJyYWNrIj8obD0iXHUyM0E0IixoPSJcdTIzQTUiLGY9Ilx1MjNBNiIsbT0iU2l6ZTQtUmVndWxhciIsZD0icmJyYWNrIixwPTY2Nyk6ZT09PSJcXGxmbG9vciJ8fGU9PT0iXHUyMzBBIj8oaD1sPSJcdTIzQTIiLGY9Ilx1MjNBMyIsbT0iU2l6ZTQtUmVndWxhciIsZD0ibGZsb29yIixwPTY2Nyk6ZT09PSJcXGxjZWlsInx8ZT09PSJcdTIzMDgiPyhsPSJcdTIzQTEiLGg9Zj0iXHUyM0EyIixtPSJTaXplNC1SZWd1bGFyIixkPSJsY2VpbCIscD02NjcpOmU9PT0iXFxyZmxvb3IifHxlPT09Ilx1MjMwQiI/KGg9bD0iXHUyM0E1IixmPSJcdTIzQTYiLG09IlNpemU0LVJlZ3VsYXIiLGQ9InJmbG9vciIscD02NjcpOmU9PT0iXFxyY2VpbCJ8fGU9PT0iXHUyMzA5Ij8obD0iXHUyM0E0IixoPWY9Ilx1MjNBNSIsbT0iU2l6ZTQtUmVndWxhciIsZD0icmNlaWwiLHA9NjY3KTplPT09IigifHxlPT09IlxcbHBhcmVuIj8obD0iXHUyMzlCIixoPSJcdTIzOUMiLGY9Ilx1MjM5RCIsbT0iU2l6ZTQtUmVndWxhciIsZD0ibHBhcmVuIixwPTg3NSk6ZT09PSIpInx8ZT09PSJcXHJwYXJlbiI/KGw9Ilx1MjM5RSIsaD0iXHUyMzlGIixmPSJcdTIzQTAiLG09IlNpemU0LVJlZ3VsYXIiLGQ9InJwYXJlbiIscD04NzUpOmU9PT0iXFx7Inx8ZT09PSJcXGxicmFjZSI/KGw9Ilx1MjNBNyIsdT0iXHUyM0E4IixmPSJcdTIzQTkiLGg9Ilx1MjNBQSIsbT0iU2l6ZTQtUmVndWxhciIpOmU9PT0iXFx9Inx8ZT09PSJcXHJicmFjZSI/KGw9Ilx1MjNBQiIsdT0iXHUyM0FDIixmPSJcdTIzQUQiLGg9Ilx1MjNBQSIsbT0iU2l6ZTQtUmVndWxhciIpOmU9PT0iXFxsZ3JvdXAifHxlPT09Ilx1MjdFRSI/KGw9Ilx1MjNBNyIsZj0iXHUyM0E5IixoPSJcdTIzQUEiLG09IlNpemU0LVJlZ3VsYXIiKTplPT09Ilxccmdyb3VwInx8ZT09PSJcdTI3RUYiPyhsPSJcdTIzQUIiLGY9Ilx1MjNBRCIsaD0iXHUyM0FBIixtPSJTaXplNC1SZWd1bGFyIik6ZT09PSJcXGxtb3VzdGFjaGUifHxlPT09Ilx1MjNCMCI/KGw9Ilx1MjNBNyIsZj0iXHUyM0FEIixoPSJcdTIzQUEiLG09IlNpemU0LVJlZ3VsYXIiKTooZT09PSJcXHJtb3VzdGFjaGUifHxlPT09Ilx1MjNCMSIpJiYobD0iXHUyM0FCIixmPSJcdTIzQTkiLGg9Ilx1MjNBQSIsbT0iU2l6ZTQtUmVndWxhciIpO3ZhciBnPUZ5KGwsbSxhKSx5PWcuaGVpZ2h0K2cuZGVwdGgsdj1GeShoLG0sYSkseD12LmhlaWdodCt2LmRlcHRoLGI9RnkoZixtLGEpLHc9Yi5oZWlnaHQrYi5kZXB0aCxDPTAsVD0xO2lmKHUhPT1udWxsKXt2YXIgRT1GeSh1LG0sYSk7Qz1FLmhlaWdodCtFLmRlcHRoLFQ9Mn12YXIgQT15K3crQyxTPU1hdGgubWF4KDAsTWF0aC5jZWlsKChyLUEpLyhUKngpKSksXz1BK1MqVCp4LEk9aS5mb250TWV0cmljcygpLmF4aXNIZWlnaHQ7biYmKEkqPWkuc2l6ZU11bHRpcGxpZXIpO3ZhciBEPV8vMi1JLGs9W107aWYoZC5sZW5ndGg+MCl7dmFyIEw9Xy15LXcsUj1NYXRoLnJvdW5kKF8qMWUzKSxPPUNiZShkLE1hdGgucm91bmQoTCoxZTMpKSxNPW5ldyBLbChkLE8pLEI9KHAvMWUzKS50b0ZpeGVkKDMpKyJlbSIsRj0oUi8xZTMpLnRvRml4ZWQoMykrImVtIixQPW5ldyBsbChbTV0se3dpZHRoOkIsaGVpZ2h0OkYsdmlld0JveDoiMCAwICIrcCsiICIrUn0pLHo9QmUubWFrZVN2Z1NwYW4oW10sW1BdLGkpO3ouaGVpZ2h0PVIvMWUzLHouc3R5bGUud2lkdGg9Qix6LnN0eWxlLmhlaWdodD1GLGsucHVzaCh7dHlwZToiZWxlbSIsZWxlbTp6fSl9ZWxzZXtpZihrLnB1c2gocDcoZixtLGEpKSxrLnB1c2gobzMpLHU9PT1udWxsKXt2YXIgJD1fLXktdysyKlI3O2sucHVzaChtNyhoLCQsaSkpfWVsc2V7dmFyIEg9KF8teS13LUMpLzIrMipSNztrLnB1c2gobTcoaCxILGkpKSxrLnB1c2gobzMpLGsucHVzaChwNyh1LG0sYSkpLGsucHVzaChvMyksay5wdXNoKG03KGgsSCxpKSl9ay5wdXNoKG8zKSxrLnB1c2gocDcobCxtLGEpKX12YXIgUT1pLmhhdmluZ0Jhc2VTdHlsZSh0ci5URVhUKSxqPUJlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJib3R0b20iLHBvc2l0aW9uRGF0YTpELGNoaWxkcmVuOmt9LFEpO3JldHVybiBWNyhCZS5tYWtlU3BhbihbImRlbGltc2l6aW5nIiwibXVsdCJdLFtqXSxRKSx0ci5URVhULGkscyl9LCJtYWtlU3RhY2tlZERlbGltIiksZzc9ODAseTc9LjA4LHY3PW8oZnVuY3Rpb24oZSxyLG4saSxhKXt2YXIgcz1FYmUoZSxpLG4pLGw9bmV3IEtsKGUscyksdT1uZXcgbGwoW2xdLHt3aWR0aDoiNDAwZW0iLGhlaWdodDprdChyKSx2aWV3Qm94OiIwIDAgNDAwMDAwICIrbixwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJ4TWluWU1pbiBzbGljZSJ9KTtyZXR1cm4gQmUubWFrZVN2Z1NwYW4oWyJoaWRlLXRhaWwiXSxbdV0sYSl9LCJzcXJ0U3ZnIiksYjRlPW8oZnVuY3Rpb24oZSxyKXt2YXIgbj1yLmhhdmluZ0Jhc2VTaXppbmcoKSxpPWRHKCJcXHN1cmQiLGUqbi5zaXplTXVsdGlwbGllcixmRyxuKSxhPW4uc2l6ZU11bHRpcGxpZXIscz1NYXRoLm1heCgwLHIubWluUnVsZVRoaWNrbmVzcy1yLmZvbnRNZXRyaWNzKCkuc3FydFJ1bGVUaGlja25lc3MpLGwsdT0wLGg9MCxmPTAsZDtyZXR1cm4gaS50eXBlPT09InNtYWxsIj8oZj0xZTMrMWUzKnMrZzcsZTwxP2E9MTplPDEuNCYmKGE9LjcpLHU9KDErcyt5NykvYSxoPSgxK3MpL2EsbD12Nygic3FydE1haW4iLHUsZixzLHIpLGwuc3R5bGUubWluV2lkdGg9IjAuODUzZW0iLGQ9LjgzMy9hKTppLnR5cGU9PT0ibGFyZ2UiPyhmPSgxZTMrZzcpKiR5W2kuc2l6ZV0saD0oJHlbaS5zaXplXStzKS9hLHU9KCR5W2kuc2l6ZV0rcyt5NykvYSxsPXY3KCJzcXJ0U2l6ZSIraS5zaXplLHUsZixzLHIpLGwuc3R5bGUubWluV2lkdGg9IjEuMDJlbSIsZD0xL2EpOih1PWUrcyt5NyxoPWUrcyxmPU1hdGguZmxvb3IoMWUzKmUrcykrZzcsbD12Nygic3FydFRhbGwiLHUsZixzLHIpLGwuc3R5bGUubWluV2lkdGg9IjAuNzQyZW0iLGQ9MS4wNTYpLGwuaGVpZ2h0PWgsbC5zdHlsZS5oZWlnaHQ9a3QodSkse3NwYW46bCxhZHZhbmNlV2lkdGg6ZCxydWxlV2lkdGg6KHIuZm9udE1ldHJpY3MoKS5zcXJ0UnVsZVRoaWNrbmVzcytzKSphfX0sIm1ha2VTcXJ0SW1hZ2UiKSx1Rz1bIigiLCJcXGxwYXJlbiIsIikiLCJcXHJwYXJlbiIsIlsiLCJcXGxicmFjayIsIl0iLCJcXHJicmFjayIsIlxceyIsIlxcbGJyYWNlIiwiXFx9IiwiXFxyYnJhY2UiLCJcXGxmbG9vciIsIlxccmZsb29yIiwiXHUyMzBBIiwiXHUyMzBCIiwiXFxsY2VpbCIsIlxccmNlaWwiLCJcdTIzMDgiLCJcdTIzMDkiLCJcXHN1cmQiXSx3NGU9WyJcXHVwYXJyb3ciLCJcXGRvd25hcnJvdyIsIlxcdXBkb3duYXJyb3ciLCJcXFVwYXJyb3ciLCJcXERvd25hcnJvdyIsIlxcVXBkb3duYXJyb3ciLCJ8IiwiXFx8IiwiXFx2ZXJ0IiwiXFxWZXJ0IiwiXFxsdmVydCIsIlxccnZlcnQiLCJcXGxWZXJ0IiwiXFxyVmVydCIsIlxcbGdyb3VwIiwiXFxyZ3JvdXAiLCJcdTI3RUUiLCJcdTI3RUYiLCJcXGxtb3VzdGFjaGUiLCJcXHJtb3VzdGFjaGUiLCJcdTIzQjAiLCJcdTIzQjEiXSxoRz1bIjwiLCI+IiwiXFxsYW5nbGUiLCJcXHJhbmdsZSIsIi8iLCJcXGJhY2tzbGFzaCIsIlxcbHQiLCJcXGd0Il0sJHk9WzAsMS4yLDEuOCwyLjQsM10sVDRlPW8oZnVuY3Rpb24oZSxyLG4saSxhKXtpZihlPT09IjwifHxlPT09IlxcbHQifHxlPT09Ilx1MjdFOCI/ZT0iXFxsYW5nbGUiOihlPT09Ij4ifHxlPT09IlxcZ3QifHxlPT09Ilx1MjdFOSIpJiYoZT0iXFxyYW5nbGUiKSxKdC5jb250YWlucyh1RyxlKXx8SnQuY29udGFpbnMoaEcsZSkpcmV0dXJuIGxHKGUsciwhMSxuLGksYSk7aWYoSnQuY29udGFpbnModzRlLGUpKXJldHVybiBjRyhlLCR5W3JdLCExLG4saSxhKTt0aHJvdyBuZXcgZ3QoIklsbGVnYWwgZGVsaW1pdGVyOiAnIitlKyInIil9LCJtYWtlU2l6ZWREZWxpbSIpLGs0ZT1be3R5cGU6InNtYWxsIixzdHlsZTp0ci5TQ1JJUFRTQ1JJUFR9LHt0eXBlOiJzbWFsbCIsc3R5bGU6dHIuU0NSSVBUfSx7dHlwZToic21hbGwiLHN0eWxlOnRyLlRFWFR9LHt0eXBlOiJsYXJnZSIsc2l6ZToxfSx7dHlwZToibGFyZ2UiLHNpemU6Mn0se3R5cGU6ImxhcmdlIixzaXplOjN9LHt0eXBlOiJsYXJnZSIsc2l6ZTo0fV0sRTRlPVt7dHlwZToic21hbGwiLHN0eWxlOnRyLlNDUklQVFNDUklQVH0se3R5cGU6InNtYWxsIixzdHlsZTp0ci5TQ1JJUFR9LHt0eXBlOiJzbWFsbCIsc3R5bGU6dHIuVEVYVH0se3R5cGU6InN0YWNrIn1dLGZHPVt7dHlwZToic21hbGwiLHN0eWxlOnRyLlNDUklQVFNDUklQVH0se3R5cGU6InNtYWxsIixzdHlsZTp0ci5TQ1JJUFR9LHt0eXBlOiJzbWFsbCIsc3R5bGU6dHIuVEVYVH0se3R5cGU6ImxhcmdlIixzaXplOjF9LHt0eXBlOiJsYXJnZSIsc2l6ZToyfSx7dHlwZToibGFyZ2UiLHNpemU6M30se3R5cGU6ImxhcmdlIixzaXplOjR9LHt0eXBlOiJzdGFjayJ9XSxTNGU9byhmdW5jdGlvbihlKXtpZihlLnR5cGU9PT0ic21hbGwiKXJldHVybiJNYWluLVJlZ3VsYXIiO2lmKGUudHlwZT09PSJsYXJnZSIpcmV0dXJuIlNpemUiK2Uuc2l6ZSsiLVJlZ3VsYXIiO2lmKGUudHlwZT09PSJzdGFjayIpcmV0dXJuIlNpemU0LVJlZ3VsYXIiO3Rocm93IG5ldyBFcnJvcigiQWRkIHN1cHBvcnQgZm9yIGRlbGltIHR5cGUgJyIrZS50eXBlKyInIGhlcmUuIil9LCJkZWxpbVR5cGVUb0ZvbnQiKSxkRz1vKGZ1bmN0aW9uKGUscixuLGkpe2Zvcih2YXIgYT1NYXRoLm1pbigyLDMtaS5zdHlsZS5zaXplKSxzPWE7czxuLmxlbmd0aCYmbltzXS50eXBlIT09InN0YWNrIjtzKyspe3ZhciBsPUZ5KGUsUzRlKG5bc10pLCJtYXRoIiksdT1sLmhlaWdodCtsLmRlcHRoO2lmKG5bc10udHlwZT09PSJzbWFsbCIpe3ZhciBoPWkuaGF2aW5nQmFzZVN0eWxlKG5bc10uc3R5bGUpO3UqPWguc2l6ZU11bHRpcGxpZXJ9aWYodT5yKXJldHVybiBuW3NdfXJldHVybiBuW24ubGVuZ3RoLTFdfSwidHJhdmVyc2VTZXF1ZW5jZSIpLHBHPW8oZnVuY3Rpb24oZSxyLG4saSxhLHMpe2U9PT0iPCJ8fGU9PT0iXFxsdCJ8fGU9PT0iXHUyN0U4Ij9lPSJcXGxhbmdsZSI6KGU9PT0iPiJ8fGU9PT0iXFxndCJ8fGU9PT0iXHUyN0U5IikmJihlPSJcXHJhbmdsZSIpO3ZhciBsO0p0LmNvbnRhaW5zKGhHLGUpP2w9azRlOkp0LmNvbnRhaW5zKHVHLGUpP2w9Zkc6bD1FNGU7dmFyIHU9ZEcoZSxyLGwsaSk7cmV0dXJuIHUudHlwZT09PSJzbWFsbCI/ZzRlKGUsdS5zdHlsZSxuLGksYSxzKTp1LnR5cGU9PT0ibGFyZ2UiP2xHKGUsdS5zaXplLG4saSxhLHMpOmNHKGUscixuLGksYSxzKX0sIm1ha2VDdXN0b21TaXplZERlbGltIiksQzRlPW8oZnVuY3Rpb24oZSxyLG4saSxhLHMpe3ZhciBsPWkuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0Kmkuc2l6ZU11bHRpcGxpZXIsdT05MDEsaD01L2kuZm9udE1ldHJpY3MoKS5wdFBlckVtLGY9TWF0aC5tYXgoci1sLG4rbCksZD1NYXRoLm1heChmLzUwMCp1LDIqZi1oKTtyZXR1cm4gcEcoZSxkLCEwLGksYSxzKX0sIm1ha2VMZWZ0UmlnaHREZWxpbSIpLG91PXtzcXJ0SW1hZ2U6YjRlLHNpemVkRGVsaW06VDRlLHNpemVUb01heEhlaWdodDokeSxjdXN0b21TaXplZERlbGltOnBHLGxlZnRSaWdodERlbGltOkM0ZX0seHo9eyJcXGJpZ2wiOnttY2xhc3M6Im1vcGVuIixzaXplOjF9LCJcXEJpZ2wiOnttY2xhc3M6Im1vcGVuIixzaXplOjJ9LCJcXGJpZ2dsIjp7bWNsYXNzOiJtb3BlbiIsc2l6ZTozfSwiXFxCaWdnbCI6e21jbGFzczoibW9wZW4iLHNpemU6NH0sIlxcYmlnciI6e21jbGFzczoibWNsb3NlIixzaXplOjF9LCJcXEJpZ3IiOnttY2xhc3M6Im1jbG9zZSIsc2l6ZToyfSwiXFxiaWdnciI6e21jbGFzczoibWNsb3NlIixzaXplOjN9LCJcXEJpZ2dyIjp7bWNsYXNzOiJtY2xvc2UiLHNpemU6NH0sIlxcYmlnbSI6e21jbGFzczoibXJlbCIsc2l6ZToxfSwiXFxCaWdtIjp7bWNsYXNzOiJtcmVsIixzaXplOjJ9LCJcXGJpZ2dtIjp7bWNsYXNzOiJtcmVsIixzaXplOjN9LCJcXEJpZ2dtIjp7bWNsYXNzOiJtcmVsIixzaXplOjR9LCJcXGJpZyI6e21jbGFzczoibW9yZCIsc2l6ZToxfSwiXFxCaWciOnttY2xhc3M6Im1vcmQiLHNpemU6Mn0sIlxcYmlnZyI6e21jbGFzczoibW9yZCIsc2l6ZTozfSwiXFxCaWdnIjp7bWNsYXNzOiJtb3JkIixzaXplOjR9fSxBNGU9WyIoIiwiXFxscGFyZW4iLCIpIiwiXFxycGFyZW4iLCJbIiwiXFxsYnJhY2siLCJdIiwiXFxyYnJhY2siLCJcXHsiLCJcXGxicmFjZSIsIlxcfSIsIlxccmJyYWNlIiwiXFxsZmxvb3IiLCJcXHJmbG9vciIsIlx1MjMwQSIsIlx1MjMwQiIsIlxcbGNlaWwiLCJcXHJjZWlsIiwiXHUyMzA4IiwiXHUyMzA5IiwiPCIsIj4iLCJcXGxhbmdsZSIsIlx1MjdFOCIsIlxccmFuZ2xlIiwiXHUyN0U5IiwiXFxsdCIsIlxcZ3QiLCJcXGx2ZXJ0IiwiXFxydmVydCIsIlxcbFZlcnQiLCJcXHJWZXJ0IiwiXFxsZ3JvdXAiLCJcXHJncm91cCIsIlx1MjdFRSIsIlx1MjdFRiIsIlxcbG1vdXN0YWNoZSIsIlxccm1vdXN0YWNoZSIsIlx1MjNCMCIsIlx1MjNCMSIsIi8iLCJcXGJhY2tzbGFzaCIsInwiLCJcXHZlcnQiLCJcXHwiLCJcXFZlcnQiLCJcXHVwYXJyb3ciLCJcXFVwYXJyb3ciLCJcXGRvd25hcnJvdyIsIlxcRG93bmFycm93IiwiXFx1cGRvd25hcnJvdyIsIlxcVXBkb3duYXJyb3ciLCIuIl07byhrMywiY2hlY2tEZWxpbWl0ZXIiKTtOdCh7dHlwZToiZGVsaW1zaXppbmciLG5hbWVzOlsiXFxiaWdsIiwiXFxCaWdsIiwiXFxiaWdnbCIsIlxcQmlnZ2wiLCJcXGJpZ3IiLCJcXEJpZ3IiLCJcXGJpZ2dyIiwiXFxCaWdnciIsIlxcYmlnbSIsIlxcQmlnbSIsIlxcYmlnZ20iLCJcXEJpZ2dtIiwiXFxiaWciLCJcXEJpZyIsIlxcYmlnZyIsIlxcQmlnZyJdLHByb3BzOntudW1BcmdzOjEsYXJnVHlwZXM6WyJwcmltaXRpdmUiXX0saGFuZGxlcjpvKCh0LGUpPT57dmFyIHI9azMoZVswXSx0KTtyZXR1cm57dHlwZToiZGVsaW1zaXppbmciLG1vZGU6dC5wYXJzZXIubW9kZSxzaXplOnh6W3QuZnVuY05hbWVdLnNpemUsbWNsYXNzOnh6W3QuZnVuY05hbWVdLm1jbGFzcyxkZWxpbTpyLnRleHR9fSwiaGFuZGxlciIpLGh0bWxCdWlsZGVyOm8oKHQsZSk9PnQuZGVsaW09PT0iLiI/QmUubWFrZVNwYW4oW3QubWNsYXNzXSk6b3Uuc2l6ZWREZWxpbSh0LmRlbGltLHQuc2l6ZSxlLHQubW9kZSxbdC5tY2xhc3NdKSwiaHRtbEJ1aWxkZXIiKSxtYXRobWxCdWlsZGVyOm8odD0+e3ZhciBlPVtdO3QuZGVsaW0hPT0iLiImJmUucHVzaChDbyh0LmRlbGltLHQubW9kZSkpO3ZhciByPW5ldyBkdC5NYXRoTm9kZSgibW8iLGUpO3QubWNsYXNzPT09Im1vcGVuInx8dC5tY2xhc3M9PT0ibWNsb3NlIj9yLnNldEF0dHJpYnV0ZSgiZmVuY2UiLCJ0cnVlIik6ci5zZXRBdHRyaWJ1dGUoImZlbmNlIiwiZmFsc2UiKSxyLnNldEF0dHJpYnV0ZSgic3RyZXRjaHkiLCJ0cnVlIik7dmFyIG49a3Qob3Uuc2l6ZVRvTWF4SGVpZ2h0W3Quc2l6ZV0pO3JldHVybiByLnNldEF0dHJpYnV0ZSgibWluc2l6ZSIsbiksci5zZXRBdHRyaWJ1dGUoIm1heHNpemUiLG4pLHJ9LCJtYXRobWxCdWlsZGVyIil9KTtvKGJ6LCJhc3NlcnRQYXJzZWQiKTtOdCh7dHlwZToibGVmdHJpZ2h0LXJpZ2h0IixuYW1lczpbIlxccmlnaHQiXSxwcm9wczp7bnVtQXJnczoxLHByaW1pdGl2ZTohMH0saGFuZGxlcjpvKCh0LGUpPT57dmFyIHI9dC5wYXJzZXIuZ3VsbGV0Lm1hY3Jvcy5nZXQoIlxcY3VycmVudEBjb2xvciIpO2lmKHImJnR5cGVvZiByIT0ic3RyaW5nIil0aHJvdyBuZXcgZ3QoIlxcY3VycmVudEBjb2xvciBzZXQgdG8gbm9uLXN0cmluZyBpbiBcXHJpZ2h0Iik7cmV0dXJue3R5cGU6ImxlZnRyaWdodC1yaWdodCIsbW9kZTp0LnBhcnNlci5tb2RlLGRlbGltOmszKGVbMF0sdCkudGV4dCxjb2xvcjpyfX0sImhhbmRsZXIiKX0pO050KHt0eXBlOiJsZWZ0cmlnaHQiLG5hbWVzOlsiXFxsZWZ0Il0scHJvcHM6e251bUFyZ3M6MSxwcmltaXRpdmU6ITB9LGhhbmRsZXI6bygodCxlKT0+e3ZhciByPWszKGVbMF0sdCksbj10LnBhcnNlcjsrK24ubGVmdHJpZ2h0RGVwdGg7dmFyIGk9bi5wYXJzZUV4cHJlc3Npb24oITEpOy0tbi5sZWZ0cmlnaHREZXB0aCxuLmV4cGVjdCgiXFxyaWdodCIsITEpO3ZhciBhPXhyKG4ucGFyc2VGdW5jdGlvbigpLCJsZWZ0cmlnaHQtcmlnaHQiKTtyZXR1cm57dHlwZToibGVmdHJpZ2h0Iixtb2RlOm4ubW9kZSxib2R5OmksbGVmdDpyLnRleHQscmlnaHQ6YS5kZWxpbSxyaWdodENvbG9yOmEuY29sb3J9fSwiaGFuZGxlciIpLGh0bWxCdWlsZGVyOm8oKHQsZSk9Pntieih0KTtmb3IodmFyIHI9UGkodC5ib2R5LGUsITAsWyJtb3BlbiIsIm1jbG9zZSJdKSxuPTAsaT0wLGE9ITEscz0wO3M8ci5sZW5ndGg7cysrKXJbc10uaXNNaWRkbGU/YT0hMDoobj1NYXRoLm1heChyW3NdLmhlaWdodCxuKSxpPU1hdGgubWF4KHJbc10uZGVwdGgsaSkpO24qPWUuc2l6ZU11bHRpcGxpZXIsaSo9ZS5zaXplTXVsdGlwbGllcjt2YXIgbDtpZih0LmxlZnQ9PT0iLiI/bD1IeShlLFsibW9wZW4iXSk6bD1vdS5sZWZ0UmlnaHREZWxpbSh0LmxlZnQsbixpLGUsdC5tb2RlLFsibW9wZW4iXSksci51bnNoaWZ0KGwpLGEpZm9yKHZhciB1PTE7dTxyLmxlbmd0aDt1Kyspe3ZhciBoPXJbdV0sZj1oLmlzTWlkZGxlO2YmJihyW3VdPW91LmxlZnRSaWdodERlbGltKGYuZGVsaW0sbixpLGYub3B0aW9ucyx0Lm1vZGUsW10pKX12YXIgZDtpZih0LnJpZ2h0PT09Ii4iKWQ9SHkoZSxbIm1jbG9zZSJdKTtlbHNle3ZhciBwPXQucmlnaHRDb2xvcj9lLndpdGhDb2xvcih0LnJpZ2h0Q29sb3IpOmU7ZD1vdS5sZWZ0UmlnaHREZWxpbSh0LnJpZ2h0LG4saSxwLHQubW9kZSxbIm1jbG9zZSJdKX1yZXR1cm4gci5wdXNoKGQpLEJlLm1ha2VTcGFuKFsibWlubmVyIl0scixlKX0sImh0bWxCdWlsZGVyIiksbWF0aG1sQnVpbGRlcjpvKCh0LGUpPT57YnoodCk7dmFyIHI9a3ModC5ib2R5LGUpO2lmKHQubGVmdCE9PSIuIil7dmFyIG49bmV3IGR0Lk1hdGhOb2RlKCJtbyIsW0NvKHQubGVmdCx0Lm1vZGUpXSk7bi5zZXRBdHRyaWJ1dGUoImZlbmNlIiwidHJ1ZSIpLHIudW5zaGlmdChuKX1pZih0LnJpZ2h0IT09Ii4iKXt2YXIgaT1uZXcgZHQuTWF0aE5vZGUoIm1vIixbQ28odC5yaWdodCx0Lm1vZGUpXSk7aS5zZXRBdHRyaWJ1dGUoImZlbmNlIiwidHJ1ZSIpLHQucmlnaHRDb2xvciYmaS5zZXRBdHRyaWJ1dGUoIm1hdGhjb2xvciIsdC5yaWdodENvbG9yKSxyLnB1c2goaSl9cmV0dXJuIEY3KHIpfSwibWF0aG1sQnVpbGRlciIpfSk7TnQoe3R5cGU6Im1pZGRsZSIsbmFtZXM6WyJcXG1pZGRsZSJdLHByb3BzOntudW1BcmdzOjEscHJpbWl0aXZlOiEwfSxoYW5kbGVyOm8oKHQsZSk9Pnt2YXIgcj1rMyhlWzBdLHQpO2lmKCF0LnBhcnNlci5sZWZ0cmlnaHREZXB0aCl0aHJvdyBuZXcgZ3QoIlxcbWlkZGxlIHdpdGhvdXQgcHJlY2VkaW5nIFxcbGVmdCIscik7cmV0dXJue3R5cGU6Im1pZGRsZSIsbW9kZTp0LnBhcnNlci5tb2RlLGRlbGltOnIudGV4dH19LCJoYW5kbGVyIiksaHRtbEJ1aWxkZXI6bygodCxlKT0+e3ZhciByO2lmKHQuZGVsaW09PT0iLiIpcj1IeShlLFtdKTtlbHNle3I9b3Uuc2l6ZWREZWxpbSh0LmRlbGltLDEsZSx0Lm1vZGUsW10pO3ZhciBuPXtkZWxpbTp0LmRlbGltLG9wdGlvbnM6ZX07ci5pc01pZGRsZT1ufXJldHVybiByfSwiaHRtbEJ1aWxkZXIiKSxtYXRobWxCdWlsZGVyOm8oKHQsZSk9Pnt2YXIgcj10LmRlbGltPT09IlxcdmVydCJ8fHQuZGVsaW09PT0ifCI/Q28oInwiLCJ0ZXh0Iik6Q28odC5kZWxpbSx0Lm1vZGUpLG49bmV3IGR0Lk1hdGhOb2RlKCJtbyIsW3JdKTtyZXR1cm4gbi5zZXRBdHRyaWJ1dGUoImZlbmNlIiwidHJ1ZSIpLG4uc2V0QXR0cmlidXRlKCJsc3BhY2UiLCIwLjA1ZW0iKSxuLnNldEF0dHJpYnV0ZSgicnNwYWNlIiwiMC4wNWVtIiksbn0sIm1hdGhtbEJ1aWxkZXIiKX0pO1U3PW8oKHQsZSk9Pnt2YXIgcj1CZS53cmFwRnJhZ21lbnQoRnIodC5ib2R5LGUpLGUpLG49dC5sYWJlbC5zbGljZSgxKSxpPWUuc2l6ZU11bHRpcGxpZXIsYSxzPTAsbD1KdC5pc0NoYXJhY3RlckJveCh0LmJvZHkpO2lmKG49PT0ic291dCIpYT1CZS5tYWtlU3BhbihbInN0cmV0Y2h5Iiwic291dCJdKSxhLmhlaWdodD1lLmZvbnRNZXRyaWNzKCkuZGVmYXVsdFJ1bGVUaGlja25lc3MvaSxzPS0uNSplLmZvbnRNZXRyaWNzKCkueEhlaWdodDtlbHNlIGlmKG49PT0icGhhc2UiKXt2YXIgdT10aSh7bnVtYmVyOi42LHVuaXQ6InB0In0sZSksaD10aSh7bnVtYmVyOi4zNSx1bml0OiJleCJ9LGUpLGY9ZS5oYXZpbmdCYXNlU2l6aW5nKCk7aT1pL2Yuc2l6ZU11bHRpcGxpZXI7dmFyIGQ9ci5oZWlnaHQrci5kZXB0aCt1K2g7ci5zdHlsZS5wYWRkaW5nTGVmdD1rdChkLzIrdSk7dmFyIHA9TWF0aC5mbG9vcigxZTMqZCppKSxtPVRiZShwKSxnPW5ldyBsbChbbmV3IEtsKCJwaGFzZSIsbSldLHt3aWR0aDoiNDAwZW0iLGhlaWdodDprdChwLzFlMyksdmlld0JveDoiMCAwIDQwMDAwMCAiK3AscHJlc2VydmVBc3BlY3RSYXRpbzoieE1pbllNaW4gc2xpY2UifSk7YT1CZS5tYWtlU3ZnU3BhbihbImhpZGUtdGFpbCJdLFtnXSxlKSxhLnN0eWxlLmhlaWdodD1rdChkKSxzPXIuZGVwdGgrdStofWVsc2V7L2NhbmNlbC8udGVzdChuKT9sfHxyLmNsYXNzZXMucHVzaCgiY2FuY2VsLXBhZCIpOm49PT0iYW5nbCI/ci5jbGFzc2VzLnB1c2goImFuZ2xwYWQiKTpyLmNsYXNzZXMucHVzaCgiYm94cGFkIik7dmFyIHk9MCx2PTAseD0wOy9ib3gvLnRlc3Qobik/KHg9TWF0aC5tYXgoZS5mb250TWV0cmljcygpLmZib3hydWxlLGUubWluUnVsZVRoaWNrbmVzcykseT1lLmZvbnRNZXRyaWNzKCkuZmJveHNlcCsobj09PSJjb2xvcmJveCI/MDp4KSx2PXkpOm49PT0iYW5nbCI/KHg9TWF0aC5tYXgoZS5mb250TWV0cmljcygpLmRlZmF1bHRSdWxlVGhpY2tuZXNzLGUubWluUnVsZVRoaWNrbmVzcykseT00Kngsdj1NYXRoLm1heCgwLC4yNS1yLmRlcHRoKSk6KHk9bD8uMjowLHY9eSksYT1jdS5lbmNsb3NlU3BhbihyLG4seSx2LGUpLC9mYm94fGJveGVkfGZjb2xvcmJveC8udGVzdChuKT8oYS5zdHlsZS5ib3JkZXJTdHlsZT0ic29saWQiLGEuc3R5bGUuYm9yZGVyV2lkdGg9a3QoeCkpOm49PT0iYW5nbCImJnghPT0uMDQ5JiYoYS5zdHlsZS5ib3JkZXJUb3BXaWR0aD1rdCh4KSxhLnN0eWxlLmJvcmRlclJpZ2h0V2lkdGg9a3QoeCkpLHM9ci5kZXB0aCt2LHQuYmFja2dyb3VuZENvbG9yJiYoYS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9dC5iYWNrZ3JvdW5kQ29sb3IsdC5ib3JkZXJDb2xvciYmKGEuc3R5bGUuYm9yZGVyQ29sb3I9dC5ib3JkZXJDb2xvcikpfXZhciBiO2lmKHQuYmFja2dyb3VuZENvbG9yKWI9QmUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImluZGl2aWR1YWxTaGlmdCIsY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOmEsc2hpZnQ6c30se3R5cGU6ImVsZW0iLGVsZW06cixzaGlmdDowfV19LGUpO2Vsc2V7dmFyIHc9L2NhbmNlbHxwaGFzZS8udGVzdChuKT9bInN2Zy1hbGlnbiJdOltdO2I9QmUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImluZGl2aWR1YWxTaGlmdCIsY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOnIsc2hpZnQ6MH0se3R5cGU6ImVsZW0iLGVsZW06YSxzaGlmdDpzLHdyYXBwZXJDbGFzc2VzOnd9XX0sZSl9cmV0dXJuL2NhbmNlbC8udGVzdChuKSYmKGIuaGVpZ2h0PXIuaGVpZ2h0LGIuZGVwdGg9ci5kZXB0aCksL2NhbmNlbC8udGVzdChuKSYmIWw/QmUubWFrZVNwYW4oWyJtb3JkIiwiY2FuY2VsLWxhcCJdLFtiXSxlKTpCZS5tYWtlU3BhbihbIm1vcmQiXSxbYl0sZSl9LCJodG1sQnVpbGRlciQ3IiksSDc9bygodCxlKT0+e3ZhciByPTAsbj1uZXcgZHQuTWF0aE5vZGUodC5sYWJlbC5pbmRleE9mKCJjb2xvcmJveCIpPi0xPyJtcGFkZGVkIjoibWVuY2xvc2UiLFt5bih0LmJvZHksZSldKTtzd2l0Y2godC5sYWJlbCl7Y2FzZSJcXGNhbmNlbCI6bi5zZXRBdHRyaWJ1dGUoIm5vdGF0aW9uIiwidXBkaWFnb25hbHN0cmlrZSIpO2JyZWFrO2Nhc2UiXFxiY2FuY2VsIjpuLnNldEF0dHJpYnV0ZSgibm90YXRpb24iLCJkb3duZGlhZ29uYWxzdHJpa2UiKTticmVhaztjYXNlIlxccGhhc2UiOm4uc2V0QXR0cmlidXRlKCJub3RhdGlvbiIsInBoYXNvcmFuZ2xlIik7YnJlYWs7Y2FzZSJcXHNvdXQiOm4uc2V0QXR0cmlidXRlKCJub3RhdGlvbiIsImhvcml6b250YWxzdHJpa2UiKTticmVhaztjYXNlIlxcZmJveCI6bi5zZXRBdHRyaWJ1dGUoIm5vdGF0aW9uIiwiYm94Iik7YnJlYWs7Y2FzZSJcXGFuZ2wiOm4uc2V0QXR0cmlidXRlKCJub3RhdGlvbiIsImFjdHVhcmlhbCIpO2JyZWFrO2Nhc2UiXFxmY29sb3Jib3giOmNhc2UiXFxjb2xvcmJveCI6aWYocj1lLmZvbnRNZXRyaWNzKCkuZmJveHNlcCplLmZvbnRNZXRyaWNzKCkucHRQZXJFbSxuLnNldEF0dHJpYnV0ZSgid2lkdGgiLCIrIisyKnIrInB0Iiksbi5zZXRBdHRyaWJ1dGUoImhlaWdodCIsIisiKzIqcisicHQiKSxuLnNldEF0dHJpYnV0ZSgibHNwYWNlIixyKyJwdCIpLG4uc2V0QXR0cmlidXRlKCJ2b2Zmc2V0IixyKyJwdCIpLHQubGFiZWw9PT0iXFxmY29sb3Jib3giKXt2YXIgaT1NYXRoLm1heChlLmZvbnRNZXRyaWNzKCkuZmJveHJ1bGUsZS5taW5SdWxlVGhpY2tuZXNzKTtuLnNldEF0dHJpYnV0ZSgic3R5bGUiLCJib3JkZXI6ICIraSsiZW0gc29saWQgIitTdHJpbmcodC5ib3JkZXJDb2xvcikpfWJyZWFrO2Nhc2UiXFx4Y2FuY2VsIjpuLnNldEF0dHJpYnV0ZSgibm90YXRpb24iLCJ1cGRpYWdvbmFsc3RyaWtlIGRvd25kaWFnb25hbHN0cmlrZSIpO2JyZWFrfXJldHVybiB0LmJhY2tncm91bmRDb2xvciYmbi5zZXRBdHRyaWJ1dGUoIm1hdGhiYWNrZ3JvdW5kIix0LmJhY2tncm91bmRDb2xvciksbn0sIm1hdGhtbEJ1aWxkZXIkNiIpO050KHt0eXBlOiJlbmNsb3NlIixuYW1lczpbIlxcY29sb3Jib3giXSxwcm9wczp7bnVtQXJnczoyLGFsbG93ZWRJblRleHQ6ITAsYXJnVHlwZXM6WyJjb2xvciIsInRleHQiXX0saGFuZGxlcih0LGUscil7dmFye3BhcnNlcjpuLGZ1bmNOYW1lOml9PXQsYT14cihlWzBdLCJjb2xvci10b2tlbiIpLmNvbG9yLHM9ZVsxXTtyZXR1cm57dHlwZToiZW5jbG9zZSIsbW9kZTpuLm1vZGUsbGFiZWw6aSxiYWNrZ3JvdW5kQ29sb3I6YSxib2R5OnN9fSxodG1sQnVpbGRlcjpVNyxtYXRobWxCdWlsZGVyOkg3fSk7TnQoe3R5cGU6ImVuY2xvc2UiLG5hbWVzOlsiXFxmY29sb3Jib3giXSxwcm9wczp7bnVtQXJnczozLGFsbG93ZWRJblRleHQ6ITAsYXJnVHlwZXM6WyJjb2xvciIsImNvbG9yIiwidGV4dCJdfSxoYW5kbGVyKHQsZSxyKXt2YXJ7cGFyc2VyOm4sZnVuY05hbWU6aX09dCxhPXhyKGVbMF0sImNvbG9yLXRva2VuIikuY29sb3Iscz14cihlWzFdLCJjb2xvci10b2tlbiIpLmNvbG9yLGw9ZVsyXTtyZXR1cm57dHlwZToiZW5jbG9zZSIsbW9kZTpuLm1vZGUsbGFiZWw6aSxiYWNrZ3JvdW5kQ29sb3I6cyxib3JkZXJDb2xvcjphLGJvZHk6bH19LGh0bWxCdWlsZGVyOlU3LG1hdGhtbEJ1aWxkZXI6SDd9KTtOdCh7dHlwZToiZW5jbG9zZSIsbmFtZXM6WyJcXGZib3giXSxwcm9wczp7bnVtQXJnczoxLGFyZ1R5cGVzOlsiaGJveCJdLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXIodCxlKXt2YXJ7cGFyc2VyOnJ9PXQ7cmV0dXJue3R5cGU6ImVuY2xvc2UiLG1vZGU6ci5tb2RlLGxhYmVsOiJcXGZib3giLGJvZHk6ZVswXX19fSk7TnQoe3R5cGU6ImVuY2xvc2UiLG5hbWVzOlsiXFxjYW5jZWwiLCJcXGJjYW5jZWwiLCJcXHhjYW5jZWwiLCJcXHNvdXQiLCJcXHBoYXNlIl0scHJvcHM6e251bUFyZ3M6MX0saGFuZGxlcih0LGUpe3ZhcntwYXJzZXI6cixmdW5jTmFtZTpufT10LGk9ZVswXTtyZXR1cm57dHlwZToiZW5jbG9zZSIsbW9kZTpyLm1vZGUsbGFiZWw6bixib2R5Oml9fSxodG1sQnVpbGRlcjpVNyxtYXRobWxCdWlsZGVyOkg3fSk7TnQoe3R5cGU6ImVuY2xvc2UiLG5hbWVzOlsiXFxhbmdsIl0scHJvcHM6e251bUFyZ3M6MSxhcmdUeXBlczpbImhib3giXSxhbGxvd2VkSW5UZXh0OiExfSxoYW5kbGVyKHQsZSl7dmFye3BhcnNlcjpyfT10O3JldHVybnt0eXBlOiJlbmNsb3NlIixtb2RlOnIubW9kZSxsYWJlbDoiXFxhbmdsIixib2R5OmVbMF19fX0pO21HPXt9O28oUWwsImRlZmluZUVudmlyb25tZW50Iik7Z0c9e307byhmZSwiZGVmaW5lTWFjcm8iKTtvKHd6LCJnZXRITGluZXMiKTtFMz1vKHQ9Pnt2YXIgZT10LnBhcnNlci5zZXR0aW5ncztpZighZS5kaXNwbGF5TW9kZSl0aHJvdyBuZXcgZ3QoInsiK3QuZW52TmFtZSsifSBjYW4gYmUgdXNlZCBvbmx5IGluIGRpc3BsYXkgbW9kZS4iKX0sInZhbGlkYXRlQW1zRW52aXJvbm1lbnRDb250ZXh0Iik7byhXNywiZ2V0QXV0b1RhZyIpO28ocGgsInBhcnNlQXJyYXkiKTtvKHE3LCJkQ2VsbFN0eWxlIik7Wmw9byhmdW5jdGlvbihlLHIpe3ZhciBuLGksYT1lLmJvZHkubGVuZ3RoLHM9ZS5oTGluZXNCZWZvcmVSb3csbD0wLHU9bmV3IEFycmF5KGEpLGg9W10sZj1NYXRoLm1heChyLmZvbnRNZXRyaWNzKCkuYXJyYXlSdWxlV2lkdGgsci5taW5SdWxlVGhpY2tuZXNzKSxkPTEvci5mb250TWV0cmljcygpLnB0UGVyRW0scD01KmQ7aWYoZS5jb2xTZXBhcmF0aW9uVHlwZSYmZS5jb2xTZXBhcmF0aW9uVHlwZT09PSJzbWFsbCIpe3ZhciBtPXIuaGF2aW5nU3R5bGUodHIuU0NSSVBUKS5zaXplTXVsdGlwbGllcjtwPS4yNzc4KihtL3Iuc2l6ZU11bHRpcGxpZXIpfXZhciBnPWUuY29sU2VwYXJhdGlvblR5cGU9PT0iQ0QiP3RpKHtudW1iZXI6Myx1bml0OiJleCJ9LHIpOjEyKmQseT0zKmQsdj1lLmFycmF5c3RyZXRjaCpnLHg9LjcqdixiPS4zKnYsdz0wO2Z1bmN0aW9uIEMoYWUpe2Zvcih2YXIgT2U9MDtPZTxhZS5sZW5ndGg7KytPZSlPZT4wJiYodys9LjI1KSxoLnB1c2goe3Bvczp3LGlzRGFzaGVkOmFlW09lXX0pfWZvcihvKEMsInNldEhMaW5lUG9zIiksQyhzWzBdKSxuPTA7bjxlLmJvZHkubGVuZ3RoOysrbil7dmFyIFQ9ZS5ib2R5W25dLEU9eCxBPWI7bDxULmxlbmd0aCYmKGw9VC5sZW5ndGgpO3ZhciBTPW5ldyBBcnJheShULmxlbmd0aCk7Zm9yKGk9MDtpPFQubGVuZ3RoOysraSl7dmFyIF89RnIoVFtpXSxyKTtBPF8uZGVwdGgmJihBPV8uZGVwdGgpLEU8Xy5oZWlnaHQmJihFPV8uaGVpZ2h0KSxTW2ldPV99dmFyIEk9ZS5yb3dHYXBzW25dLEQ9MDtJJiYoRD10aShJLHIpLEQ+MCYmKEQrPWIsQTxEJiYoQT1EKSxEPTApKSxlLmFkZEpvdCYmKEErPXkpLFMuaGVpZ2h0PUUsUy5kZXB0aD1BLHcrPUUsUy5wb3M9dyx3Kz1BK0QsdVtuXT1TLEMoc1tuKzFdKX12YXIgaz13LzIrci5mb250TWV0cmljcygpLmF4aXNIZWlnaHQsTD1lLmNvbHN8fFtdLFI9W10sTyxNLEI9W107aWYoZS50YWdzJiZlLnRhZ3Muc29tZShhZT0+YWUpKWZvcihuPTA7bjxhOysrbil7dmFyIEY9dVtuXSxQPUYucG9zLWssej1lLnRhZ3Nbbl0sJD12b2lkIDA7ej09PSEwPyQ9QmUubWFrZVNwYW4oWyJlcW4tbnVtIl0sW10scik6ej09PSExPyQ9QmUubWFrZVNwYW4oW10sW10scik6JD1CZS5tYWtlU3BhbihbXSxQaSh6LHIsITApLHIpLCQuZGVwdGg9Ri5kZXB0aCwkLmhlaWdodD1GLmhlaWdodCxCLnB1c2goe3R5cGU6ImVsZW0iLGVsZW06JCxzaGlmdDpQfSl9Zm9yKGk9MCxNPTA7aTxsfHxNPEwubGVuZ3RoOysraSwrK00pe2Zvcih2YXIgSD1MW01dfHx7fSxRPSEwO0gudHlwZT09PSJzZXBhcmF0b3IiOyl7aWYoUXx8KE89QmUubWFrZVNwYW4oWyJhcnJheWNvbHNlcCJdLFtdKSxPLnN0eWxlLndpZHRoPWt0KHIuZm9udE1ldHJpY3MoKS5kb3VibGVSdWxlU2VwKSxSLnB1c2goTykpLEguc2VwYXJhdG9yPT09InwifHxILnNlcGFyYXRvcj09PSI6Iil7dmFyIGo9SC5zZXBhcmF0b3I9PT0ifCI/InNvbGlkIjoiZGFzaGVkIixpZT1CZS5tYWtlU3BhbihbInZlcnRpY2FsLXNlcGFyYXRvciJdLFtdLHIpO2llLnN0eWxlLmhlaWdodD1rdCh3KSxpZS5zdHlsZS5ib3JkZXJSaWdodFdpZHRoPWt0KGYpLGllLnN0eWxlLmJvcmRlclJpZ2h0U3R5bGU9aixpZS5zdHlsZS5tYXJnaW49IjAgIitrdCgtZi8yKTt2YXIgbmU9dy1rO25lJiYoaWUuc3R5bGUudmVydGljYWxBbGlnbj1rdCgtbmUpKSxSLnB1c2goaWUpfWVsc2UgdGhyb3cgbmV3IGd0KCJJbnZhbGlkIHNlcGFyYXRvciB0eXBlOiAiK0guc2VwYXJhdG9yKTtNKyssSD1MW01dfHx7fSxRPSExfWlmKCEoaT49bCkpe3ZhciBsZT12b2lkIDA7KGk+MHx8ZS5oc2tpcEJlZm9yZUFuZEFmdGVyKSYmKGxlPUp0LmRlZmx0KEgucHJlZ2FwLHApLGxlIT09MCYmKE89QmUubWFrZVNwYW4oWyJhcnJheWNvbHNlcCJdLFtdKSxPLnN0eWxlLndpZHRoPWt0KGxlKSxSLnB1c2goTykpKTt2YXIgaGU9W107Zm9yKG49MDtuPGE7KytuKXt2YXIgSz11W25dLFg9S1tpXTtpZihYKXt2YXIgdGU9Sy5wb3MtaztYLmRlcHRoPUsuZGVwdGgsWC5oZWlnaHQ9Sy5oZWlnaHQsaGUucHVzaCh7dHlwZToiZWxlbSIsZWxlbTpYLHNoaWZ0OnRlfSl9fWhlPUJlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJpbmRpdmlkdWFsU2hpZnQiLGNoaWxkcmVuOmhlfSxyKSxoZT1CZS5tYWtlU3BhbihbImNvbC1hbGlnbi0iKyhILmFsaWdufHwiYyIpXSxbaGVdKSxSLnB1c2goaGUpLChpPGwtMXx8ZS5oc2tpcEJlZm9yZUFuZEFmdGVyKSYmKGxlPUp0LmRlZmx0KEgucG9zdGdhcCxwKSxsZSE9PTAmJihPPUJlLm1ha2VTcGFuKFsiYXJyYXljb2xzZXAiXSxbXSksTy5zdHlsZS53aWR0aD1rdChsZSksUi5wdXNoKE8pKSl9fWlmKHU9QmUubWFrZVNwYW4oWyJtdGFibGUiXSxSKSxoLmxlbmd0aD4wKXtmb3IodmFyIEo9QmUubWFrZUxpbmVTcGFuKCJobGluZSIscixmKSxzZT1CZS5tYWtlTGluZVNwYW4oImhkYXNobGluZSIscixmKSx1ZT1be3R5cGU6ImVsZW0iLGVsZW06dSxzaGlmdDowfV07aC5sZW5ndGg+MDspe3ZhciBaPWgucG9wKCksU2U9Wi5wb3MtaztaLmlzRGFzaGVkP3VlLnB1c2goe3R5cGU6ImVsZW0iLGVsZW06c2Usc2hpZnQ6U2V9KTp1ZS5wdXNoKHt0eXBlOiJlbGVtIixlbGVtOkosc2hpZnQ6U2V9KX11PUJlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJpbmRpdmlkdWFsU2hpZnQiLGNoaWxkcmVuOnVlfSxyKX1pZihCLmxlbmd0aD09PTApcmV0dXJuIEJlLm1ha2VTcGFuKFsibW9yZCJdLFt1XSxyKTt2YXIgY2U9QmUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImluZGl2aWR1YWxTaGlmdCIsY2hpbGRyZW46Qn0scik7cmV0dXJuIGNlPUJlLm1ha2VTcGFuKFsidGFnIl0sW2NlXSxyKSxCZS5tYWtlRnJhZ21lbnQoW3UsY2VdKX0sImh0bWxCdWlsZGVyIiksXzRlPXtjOiJjZW50ZXIgIixsOiJsZWZ0ICIscjoicmlnaHQgIn0sSmw9byhmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj1bXSxpPW5ldyBkdC5NYXRoTm9kZSgibXRkIixbXSxbIm10ci1nbHVlIl0pLGE9bmV3IGR0Lk1hdGhOb2RlKCJtdGQiLFtdLFsibW1sLWVxbi1udW0iXSkscz0wO3M8ZS5ib2R5Lmxlbmd0aDtzKyspe2Zvcih2YXIgbD1lLmJvZHlbc10sdT1bXSxoPTA7aDxsLmxlbmd0aDtoKyspdS5wdXNoKG5ldyBkdC5NYXRoTm9kZSgibXRkIixbeW4obFtoXSxyKV0pKTtlLnRhZ3MmJmUudGFnc1tzXSYmKHUudW5zaGlmdChpKSx1LnB1c2goaSksZS5sZXFubz91LnVuc2hpZnQoYSk6dS5wdXNoKGEpKSxuLnB1c2gobmV3IGR0Lk1hdGhOb2RlKCJtdHIiLHUpKX12YXIgZj1uZXcgZHQuTWF0aE5vZGUoIm10YWJsZSIsbiksZD1lLmFycmF5c3RyZXRjaD09PS41Py4xOi4xNitlLmFycmF5c3RyZXRjaC0xKyhlLmFkZEpvdD8uMDk6MCk7Zi5zZXRBdHRyaWJ1dGUoInJvd3NwYWNpbmciLGt0KGQpKTt2YXIgcD0iIixtPSIiO2lmKGUuY29scyYmZS5jb2xzLmxlbmd0aD4wKXt2YXIgZz1lLmNvbHMseT0iIix2PSExLHg9MCxiPWcubGVuZ3RoO2dbMF0udHlwZT09PSJzZXBhcmF0b3IiJiYocCs9InRvcCAiLHg9MSksZ1tnLmxlbmd0aC0xXS50eXBlPT09InNlcGFyYXRvciImJihwKz0iYm90dG9tICIsYi09MSk7Zm9yKHZhciB3PXg7dzxiO3crKylnW3ddLnR5cGU9PT0iYWxpZ24iPyhtKz1fNGVbZ1t3XS5hbGlnbl0sdiYmKHkrPSJub25lICIpLHY9ITApOmdbd10udHlwZT09PSJzZXBhcmF0b3IiJiZ2JiYoeSs9Z1t3XS5zZXBhcmF0b3I9PT0ifCI/InNvbGlkICI6ImRhc2hlZCAiLHY9ITEpO2Yuc2V0QXR0cmlidXRlKCJjb2x1bW5hbGlnbiIsbS50cmltKCkpLC9bc2RdLy50ZXN0KHkpJiZmLnNldEF0dHJpYnV0ZSgiY29sdW1ubGluZXMiLHkudHJpbSgpKX1pZihlLmNvbFNlcGFyYXRpb25UeXBlPT09ImFsaWduIil7Zm9yKHZhciBDPWUuY29sc3x8W10sVD0iIixFPTE7RTxDLmxlbmd0aDtFKyspVCs9RSUyPyIwZW0gIjoiMWVtICI7Zi5zZXRBdHRyaWJ1dGUoImNvbHVtbnNwYWNpbmciLFQudHJpbSgpKX1lbHNlIGUuY29sU2VwYXJhdGlvblR5cGU9PT0iYWxpZ25hdCJ8fGUuY29sU2VwYXJhdGlvblR5cGU9PT0iZ2F0aGVyIj9mLnNldEF0dHJpYnV0ZSgiY29sdW1uc3BhY2luZyIsIjBlbSIpOmUuY29sU2VwYXJhdGlvblR5cGU9PT0ic21hbGwiP2Yuc2V0QXR0cmlidXRlKCJjb2x1bW5zcGFjaW5nIiwiMC4yNzc4ZW0iKTplLmNvbFNlcGFyYXRpb25UeXBlPT09IkNEIj9mLnNldEF0dHJpYnV0ZSgiY29sdW1uc3BhY2luZyIsIjAuNWVtIik6Zi5zZXRBdHRyaWJ1dGUoImNvbHVtbnNwYWNpbmciLCIxZW0iKTt2YXIgQT0iIixTPWUuaExpbmVzQmVmb3JlUm93O3ArPVNbMF0ubGVuZ3RoPjA/ImxlZnQgIjoiIixwKz1TW1MubGVuZ3RoLTFdLmxlbmd0aD4wPyJyaWdodCAiOiIiO2Zvcih2YXIgXz0xO188Uy5sZW5ndGgtMTtfKyspQSs9U1tfXS5sZW5ndGg9PT0wPyJub25lICI6U1tfXVswXT8iZGFzaGVkICI6InNvbGlkICI7cmV0dXJuL1tzZF0vLnRlc3QoQSkmJmYuc2V0QXR0cmlidXRlKCJyb3dsaW5lcyIsQS50cmltKCkpLHAhPT0iIiYmKGY9bmV3IGR0Lk1hdGhOb2RlKCJtZW5jbG9zZSIsW2ZdKSxmLnNldEF0dHJpYnV0ZSgibm90YXRpb24iLHAudHJpbSgpKSksZS5hcnJheXN0cmV0Y2gmJmUuYXJyYXlzdHJldGNoPDEmJihmPW5ldyBkdC5NYXRoTm9kZSgibXN0eWxlIixbZl0pLGYuc2V0QXR0cmlidXRlKCJzY3JpcHRsZXZlbCIsIjEiKSksZn0sIm1hdGhtbEJ1aWxkZXIiKSx5Rz1vKGZ1bmN0aW9uKGUscil7ZS5lbnZOYW1lLmluZGV4T2YoImVkIik9PT0tMSYmRTMoZSk7dmFyIG49W10saT1lLmVudk5hbWUuaW5kZXhPZigiYXQiKT4tMT8iYWxpZ25hdCI6ImFsaWduIixhPWUuZW52TmFtZT09PSJzcGxpdCIscz1waChlLnBhcnNlcix7Y29sczpuLGFkZEpvdDohMCxhdXRvVGFnOmE/dm9pZCAwOlc3KGUuZW52TmFtZSksZW1wdHlTaW5nbGVSb3c6ITAsY29sU2VwYXJhdGlvblR5cGU6aSxtYXhOdW1Db2xzOmE/Mjp2b2lkIDAsbGVxbm86ZS5wYXJzZXIuc2V0dGluZ3MubGVxbm99LCJkaXNwbGF5IiksbCx1PTAsaD17dHlwZToib3JkZ3JvdXAiLG1vZGU6ZS5tb2RlLGJvZHk6W119O2lmKHJbMF0mJnJbMF0udHlwZT09PSJvcmRncm91cCIpe2Zvcih2YXIgZj0iIixkPTA7ZDxyWzBdLmJvZHkubGVuZ3RoO2QrKyl7dmFyIHA9eHIoclswXS5ib2R5W2RdLCJ0ZXh0b3JkIik7Zis9cC50ZXh0fWw9TnVtYmVyKGYpLHU9bCoyfXZhciBtPSF1O3MuYm9keS5mb3JFYWNoKGZ1bmN0aW9uKHgpe2Zvcih2YXIgYj0xO2I8eC5sZW5ndGg7Yis9Mil7dmFyIHc9eHIoeFtiXSwic3R5bGluZyIpLEM9eHIody5ib2R5WzBdLCJvcmRncm91cCIpO0MuYm9keS51bnNoaWZ0KGgpfWlmKG0pdTx4Lmxlbmd0aCYmKHU9eC5sZW5ndGgpO2Vsc2V7dmFyIFQ9eC5sZW5ndGgvMjtpZihsPFQpdGhyb3cgbmV3IGd0KCJUb28gbWFueSBtYXRoIGluIGEgcm93OiAiKygiZXhwZWN0ZWQgIitsKyIsIGJ1dCBnb3QgIitUKSx4WzBdKX19KTtmb3IodmFyIGc9MDtnPHU7KytnKXt2YXIgeT0iciIsdj0wO2clMj09PTE/eT0ibCI6Zz4wJiZtJiYodj0xKSxuW2ddPXt0eXBlOiJhbGlnbiIsYWxpZ246eSxwcmVnYXA6dixwb3N0Z2FwOjB9fXJldHVybiBzLmNvbFNlcGFyYXRpb25UeXBlPW0/ImFsaWduIjoiYWxpZ25hdCIsc30sImFsaWduZWRIYW5kbGVyIik7UWwoe3R5cGU6ImFycmF5IixuYW1lczpbImFycmF5IiwiZGFycmF5Il0scHJvcHM6e251bUFyZ3M6MX0saGFuZGxlcih0LGUpe3ZhciByPXczKGVbMF0pLG49cj9bZVswXV06eHIoZVswXSwib3JkZ3JvdXAiKS5ib2R5LGk9bi5tYXAoZnVuY3Rpb24ocyl7dmFyIGw9ejcocyksdT1sLnRleHQ7aWYoImxjciIuaW5kZXhPZih1KSE9PS0xKXJldHVybnt0eXBlOiJhbGlnbiIsYWxpZ246dX07aWYodT09PSJ8IilyZXR1cm57dHlwZToic2VwYXJhdG9yIixzZXBhcmF0b3I6InwifTtpZih1PT09IjoiKXJldHVybnt0eXBlOiJzZXBhcmF0b3IiLHNlcGFyYXRvcjoiOiJ9O3Rocm93IG5ldyBndCgiVW5rbm93biBjb2x1bW4gYWxpZ25tZW50OiAiK3Uscyl9KSxhPXtjb2xzOmksaHNraXBCZWZvcmVBbmRBZnRlcjohMCxtYXhOdW1Db2xzOmkubGVuZ3RofTtyZXR1cm4gcGgodC5wYXJzZXIsYSxxNyh0LmVudk5hbWUpKX0saHRtbEJ1aWxkZXI6WmwsbWF0aG1sQnVpbGRlcjpKbH0pO1FsKHt0eXBlOiJhcnJheSIsbmFtZXM6WyJtYXRyaXgiLCJwbWF0cml4IiwiYm1hdHJpeCIsIkJtYXRyaXgiLCJ2bWF0cml4IiwiVm1hdHJpeCIsIm1hdHJpeCoiLCJwbWF0cml4KiIsImJtYXRyaXgqIiwiQm1hdHJpeCoiLCJ2bWF0cml4KiIsIlZtYXRyaXgqIl0scHJvcHM6e251bUFyZ3M6MH0saGFuZGxlcih0KXt2YXIgZT17bWF0cml4Om51bGwscG1hdHJpeDpbIigiLCIpIl0sYm1hdHJpeDpbIlsiLCJdIl0sQm1hdHJpeDpbIlxceyIsIlxcfSJdLHZtYXRyaXg6WyJ8IiwifCJdLFZtYXRyaXg6WyJcXFZlcnQiLCJcXFZlcnQiXX1bdC5lbnZOYW1lLnJlcGxhY2UoIioiLCIiKV0scj0iYyIsbj17aHNraXBCZWZvcmVBbmRBZnRlcjohMSxjb2xzOlt7dHlwZToiYWxpZ24iLGFsaWduOnJ9XX07aWYodC5lbnZOYW1lLmNoYXJBdCh0LmVudk5hbWUubGVuZ3RoLTEpPT09IioiKXt2YXIgaT10LnBhcnNlcjtpZihpLmNvbnN1bWVTcGFjZXMoKSxpLmZldGNoKCkudGV4dD09PSJbIil7aWYoaS5jb25zdW1lKCksaS5jb25zdW1lU3BhY2VzKCkscj1pLmZldGNoKCkudGV4dCwibGNyIi5pbmRleE9mKHIpPT09LTEpdGhyb3cgbmV3IGd0KCJFeHBlY3RlZCBsIG9yIGMgb3IgciIsaS5uZXh0VG9rZW4pO2kuY29uc3VtZSgpLGkuY29uc3VtZVNwYWNlcygpLGkuZXhwZWN0KCJdIiksaS5jb25zdW1lKCksbi5jb2xzPVt7dHlwZToiYWxpZ24iLGFsaWduOnJ9XX19dmFyIGE9cGgodC5wYXJzZXIsbixxNyh0LmVudk5hbWUpKSxzPU1hdGgubWF4KDAsLi4uYS5ib2R5Lm1hcChsPT5sLmxlbmd0aCkpO3JldHVybiBhLmNvbHM9bmV3IEFycmF5KHMpLmZpbGwoe3R5cGU6ImFsaWduIixhbGlnbjpyfSksZT97dHlwZToibGVmdHJpZ2h0Iixtb2RlOnQubW9kZSxib2R5OlthXSxsZWZ0OmVbMF0scmlnaHQ6ZVsxXSxyaWdodENvbG9yOnZvaWQgMH06YX0saHRtbEJ1aWxkZXI6WmwsbWF0aG1sQnVpbGRlcjpKbH0pO1FsKHt0eXBlOiJhcnJheSIsbmFtZXM6WyJzbWFsbG1hdHJpeCJdLHByb3BzOntudW1BcmdzOjB9LGhhbmRsZXIodCl7dmFyIGU9e2FycmF5c3RyZXRjaDouNX0scj1waCh0LnBhcnNlcixlLCJzY3JpcHQiKTtyZXR1cm4gci5jb2xTZXBhcmF0aW9uVHlwZT0ic21hbGwiLHJ9LGh0bWxCdWlsZGVyOlpsLG1hdGhtbEJ1aWxkZXI6Smx9KTtRbCh7dHlwZToiYXJyYXkiLG5hbWVzOlsic3ViYXJyYXkiXSxwcm9wczp7bnVtQXJnczoxfSxoYW5kbGVyKHQsZSl7dmFyIHI9dzMoZVswXSksbj1yP1tlWzBdXTp4cihlWzBdLCJvcmRncm91cCIpLmJvZHksaT1uLm1hcChmdW5jdGlvbihzKXt2YXIgbD16NyhzKSx1PWwudGV4dDtpZigibGMiLmluZGV4T2YodSkhPT0tMSlyZXR1cm57dHlwZToiYWxpZ24iLGFsaWduOnV9O3Rocm93IG5ldyBndCgiVW5rbm93biBjb2x1bW4gYWxpZ25tZW50OiAiK3Uscyl9KTtpZihpLmxlbmd0aD4xKXRocm93IG5ldyBndCgie3N1YmFycmF5fSBjYW4gY29udGFpbiBvbmx5IG9uZSBjb2x1bW4iKTt2YXIgYT17Y29sczppLGhza2lwQmVmb3JlQW5kQWZ0ZXI6ITEsYXJyYXlzdHJldGNoOi41fTtpZihhPXBoKHQucGFyc2VyLGEsInNjcmlwdCIpLGEuYm9keS5sZW5ndGg+MCYmYS5ib2R5WzBdLmxlbmd0aD4xKXRocm93IG5ldyBndCgie3N1YmFycmF5fSBjYW4gY29udGFpbiBvbmx5IG9uZSBjb2x1bW4iKTtyZXR1cm4gYX0saHRtbEJ1aWxkZXI6WmwsbWF0aG1sQnVpbGRlcjpKbH0pO1FsKHt0eXBlOiJhcnJheSIsbmFtZXM6WyJjYXNlcyIsImRjYXNlcyIsInJjYXNlcyIsImRyY2FzZXMiXSxwcm9wczp7bnVtQXJnczowfSxoYW5kbGVyKHQpe3ZhciBlPXthcnJheXN0cmV0Y2g6MS4yLGNvbHM6W3t0eXBlOiJhbGlnbiIsYWxpZ246ImwiLHByZWdhcDowLHBvc3RnYXA6MX0se3R5cGU6ImFsaWduIixhbGlnbjoibCIscHJlZ2FwOjAscG9zdGdhcDowfV19LHI9cGgodC5wYXJzZXIsZSxxNyh0LmVudk5hbWUpKTtyZXR1cm57dHlwZToibGVmdHJpZ2h0Iixtb2RlOnQubW9kZSxib2R5OltyXSxsZWZ0OnQuZW52TmFtZS5pbmRleE9mKCJyIik+LTE/Ii4iOiJcXHsiLHJpZ2h0OnQuZW52TmFtZS5pbmRleE9mKCJyIik+LTE/IlxcfSI6Ii4iLHJpZ2h0Q29sb3I6dm9pZCAwfX0saHRtbEJ1aWxkZXI6WmwsbWF0aG1sQnVpbGRlcjpKbH0pO1FsKHt0eXBlOiJhcnJheSIsbmFtZXM6WyJhbGlnbiIsImFsaWduKiIsImFsaWduZWQiLCJzcGxpdCJdLHByb3BzOntudW1BcmdzOjB9LGhhbmRsZXI6eUcsaHRtbEJ1aWxkZXI6WmwsbWF0aG1sQnVpbGRlcjpKbH0pO1FsKHt0eXBlOiJhcnJheSIsbmFtZXM6WyJnYXRoZXJlZCIsImdhdGhlciIsImdhdGhlcioiXSxwcm9wczp7bnVtQXJnczowfSxoYW5kbGVyKHQpe0p0LmNvbnRhaW5zKFsiZ2F0aGVyIiwiZ2F0aGVyKiJdLHQuZW52TmFtZSkmJkUzKHQpO3ZhciBlPXtjb2xzOlt7dHlwZToiYWxpZ24iLGFsaWduOiJjIn1dLGFkZEpvdDohMCxjb2xTZXBhcmF0aW9uVHlwZToiZ2F0aGVyIixhdXRvVGFnOlc3KHQuZW52TmFtZSksZW1wdHlTaW5nbGVSb3c6ITAsbGVxbm86dC5wYXJzZXIuc2V0dGluZ3MubGVxbm99O3JldHVybiBwaCh0LnBhcnNlcixlLCJkaXNwbGF5Iil9LGh0bWxCdWlsZGVyOlpsLG1hdGhtbEJ1aWxkZXI6Smx9KTtRbCh7dHlwZToiYXJyYXkiLG5hbWVzOlsiYWxpZ25hdCIsImFsaWduYXQqIiwiYWxpZ25lZGF0Il0scHJvcHM6e251bUFyZ3M6MX0saGFuZGxlcjp5RyxodG1sQnVpbGRlcjpabCxtYXRobWxCdWlsZGVyOkpsfSk7UWwoe3R5cGU6ImFycmF5IixuYW1lczpbImVxdWF0aW9uIiwiZXF1YXRpb24qIl0scHJvcHM6e251bUFyZ3M6MH0saGFuZGxlcih0KXtFMyh0KTt2YXIgZT17YXV0b1RhZzpXNyh0LmVudk5hbWUpLGVtcHR5U2luZ2xlUm93OiEwLHNpbmdsZVJvdzohMCxtYXhOdW1Db2xzOjEsbGVxbm86dC5wYXJzZXIuc2V0dGluZ3MubGVxbm99O3JldHVybiBwaCh0LnBhcnNlcixlLCJkaXNwbGF5Iil9LGh0bWxCdWlsZGVyOlpsLG1hdGhtbEJ1aWxkZXI6Smx9KTtRbCh7dHlwZToiYXJyYXkiLG5hbWVzOlsiQ0QiXSxwcm9wczp7bnVtQXJnczowfSxoYW5kbGVyKHQpe3JldHVybiBFMyh0KSxwNGUodC5wYXJzZXIpfSxodG1sQnVpbGRlcjpabCxtYXRobWxCdWlsZGVyOkpsfSk7ZmUoIlxcbm9udW1iZXIiLCJcXGdkZWZcXEBlcW5zd3swfSIpO2ZlKCJcXG5vdGFnIiwiXFxub251bWJlciIpO050KHt0eXBlOiJ0ZXh0IixuYW1lczpbIlxcaGxpbmUiLCJcXGhkYXNobGluZSJdLHByb3BzOntudW1BcmdzOjAsYWxsb3dlZEluVGV4dDohMCxhbGxvd2VkSW5NYXRoOiEwfSxoYW5kbGVyKHQsZSl7dGhyb3cgbmV3IGd0KHQuZnVuY05hbWUrIiB2YWxpZCBvbmx5IHdpdGhpbiBhcnJheSBlbnZpcm9ubWVudCIpfX0pO1R6PW1HO050KHt0eXBlOiJlbnZpcm9ubWVudCIsbmFtZXM6WyJcXGJlZ2luIiwiXFxlbmQiXSxwcm9wczp7bnVtQXJnczoxLGFyZ1R5cGVzOlsidGV4dCJdfSxoYW5kbGVyKHQsZSl7dmFye3BhcnNlcjpyLGZ1bmNOYW1lOm59PXQsaT1lWzBdO2lmKGkudHlwZSE9PSJvcmRncm91cCIpdGhyb3cgbmV3IGd0KCJJbnZhbGlkIGVudmlyb25tZW50IG5hbWUiLGkpO2Zvcih2YXIgYT0iIixzPTA7czxpLmJvZHkubGVuZ3RoOysrcylhKz14cihpLmJvZHlbc10sInRleHRvcmQiKS50ZXh0O2lmKG49PT0iXFxiZWdpbiIpe2lmKCFUei5oYXNPd25Qcm9wZXJ0eShhKSl0aHJvdyBuZXcgZ3QoIk5vIHN1Y2ggZW52aXJvbm1lbnQ6ICIrYSxpKTt2YXIgbD1UelthXSx7YXJnczp1LG9wdEFyZ3M6aH09ci5wYXJzZUFyZ3VtZW50cygiXFxiZWdpbnsiK2ErIn0iLGwpLGY9e21vZGU6ci5tb2RlLGVudk5hbWU6YSxwYXJzZXI6cn0sZD1sLmhhbmRsZXIoZix1LGgpO3IuZXhwZWN0KCJcXGVuZCIsITEpO3ZhciBwPXIubmV4dFRva2VuLG09eHIoci5wYXJzZUZ1bmN0aW9uKCksImVudmlyb25tZW50Iik7aWYobS5uYW1lIT09YSl0aHJvdyBuZXcgZ3QoIk1pc21hdGNoOiBcXGJlZ2lueyIrYSsifSBtYXRjaGVkIGJ5IFxcZW5keyIrbS5uYW1lKyJ9IixwKTtyZXR1cm4gZH1yZXR1cm57dHlwZToiZW52aXJvbm1lbnQiLG1vZGU6ci5tb2RlLG5hbWU6YSxuYW1lR3JvdXA6aX19fSk7dkc9bygodCxlKT0+e3ZhciByPXQuZm9udCxuPWUud2l0aEZvbnQocik7cmV0dXJuIEZyKHQuYm9keSxuKX0sImh0bWxCdWlsZGVyJDUiKSx4Rz1vKCh0LGUpPT57dmFyIHI9dC5mb250LG49ZS53aXRoRm9udChyKTtyZXR1cm4geW4odC5ib2R5LG4pfSwibWF0aG1sQnVpbGRlciQ0Iiksa3o9eyJcXEJiYiI6IlxcbWF0aGJiIiwiXFxib2xkIjoiXFxtYXRoYmYiLCJcXGZyYWsiOiJcXG1hdGhmcmFrIiwiXFxibSI6IlxcYm9sZHN5bWJvbCJ9O050KHt0eXBlOiJmb250IixuYW1lczpbIlxcbWF0aHJtIiwiXFxtYXRoaXQiLCJcXG1hdGhiZiIsIlxcbWF0aG5vcm1hbCIsIlxcbWF0aGJiIiwiXFxtYXRoY2FsIiwiXFxtYXRoZnJhayIsIlxcbWF0aHNjciIsIlxcbWF0aHNmIiwiXFxtYXRodHQiLCJcXEJiYiIsIlxcYm9sZCIsIlxcZnJhayJdLHByb3BzOntudW1BcmdzOjEsYWxsb3dlZEluQXJndW1lbnQ6ITB9LGhhbmRsZXI6bygodCxlKT0+e3ZhcntwYXJzZXI6cixmdW5jTmFtZTpufT10LGk9ZzMoZVswXSksYT1uO3JldHVybiBhIGluIGt6JiYoYT1relthXSkse3R5cGU6ImZvbnQiLG1vZGU6ci5tb2RlLGZvbnQ6YS5zbGljZSgxKSxib2R5Oml9fSwiaGFuZGxlciIpLGh0bWxCdWlsZGVyOnZHLG1hdGhtbEJ1aWxkZXI6eEd9KTtOdCh7dHlwZToibWNsYXNzIixuYW1lczpbIlxcYm9sZHN5bWJvbCIsIlxcYm0iXSxwcm9wczp7bnVtQXJnczoxfSxoYW5kbGVyOm8oKHQsZSk9Pnt2YXJ7cGFyc2VyOnJ9PXQsbj1lWzBdLGk9SnQuaXNDaGFyYWN0ZXJCb3gobik7cmV0dXJue3R5cGU6Im1jbGFzcyIsbW9kZTpyLm1vZGUsbWNsYXNzOlQzKG4pLGJvZHk6W3t0eXBlOiJmb250Iixtb2RlOnIubW9kZSxmb250OiJib2xkc3ltYm9sIixib2R5Om59XSxpc0NoYXJhY3RlckJveDppfX0sImhhbmRsZXIiKX0pO050KHt0eXBlOiJmb250IixuYW1lczpbIlxccm0iLCJcXHNmIiwiXFx0dCIsIlxcYmYiLCJcXGl0IiwiXFxjYWwiXSxwcm9wczp7bnVtQXJnczowLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXI6bygodCxlKT0+e3ZhcntwYXJzZXI6cixmdW5jTmFtZTpuLGJyZWFrT25Ub2tlblRleHQ6aX09dCx7bW9kZTphfT1yLHM9ci5wYXJzZUV4cHJlc3Npb24oITAsaSksbD0ibWF0aCIrbi5zbGljZSgxKTtyZXR1cm57dHlwZToiZm9udCIsbW9kZTphLGZvbnQ6bCxib2R5Ont0eXBlOiJvcmRncm91cCIsbW9kZTpyLm1vZGUsYm9keTpzfX19LCJoYW5kbGVyIiksaHRtbEJ1aWxkZXI6dkcsbWF0aG1sQnVpbGRlcjp4R30pO2JHPW8oKHQsZSk9Pnt2YXIgcj1lO3JldHVybiB0PT09ImRpc3BsYXkiP3I9ci5pZD49dHIuU0NSSVBULmlkP3IudGV4dCgpOnRyLkRJU1BMQVk6dD09PSJ0ZXh0IiYmci5zaXplPT09dHIuRElTUExBWS5zaXplP3I9dHIuVEVYVDp0PT09InNjcmlwdCI/cj10ci5TQ1JJUFQ6dD09PSJzY3JpcHRzY3JpcHQiJiYocj10ci5TQ1JJUFRTQ1JJUFQpLHJ9LCJhZGp1c3RTdHlsZSIpLFk3PW8oKHQsZSk9Pnt2YXIgcj1iRyh0LnNpemUsZS5zdHlsZSksbj1yLmZyYWNOdW0oKSxpPXIuZnJhY0RlbigpLGE7YT1lLmhhdmluZ1N0eWxlKG4pO3ZhciBzPUZyKHQubnVtZXIsYSxlKTtpZih0LmNvbnRpbnVlZCl7dmFyIGw9OC41L2UuZm9udE1ldHJpY3MoKS5wdFBlckVtLHU9My41L2UuZm9udE1ldHJpY3MoKS5wdFBlckVtO3MuaGVpZ2h0PXMuaGVpZ2h0PGw/bDpzLmhlaWdodCxzLmRlcHRoPXMuZGVwdGg8dT91OnMuZGVwdGh9YT1lLmhhdmluZ1N0eWxlKGkpO3ZhciBoPUZyKHQuZGVub20sYSxlKSxmLGQscDt0Lmhhc0JhckxpbmU/KHQuYmFyU2l6ZT8oZD10aSh0LmJhclNpemUsZSksZj1CZS5tYWtlTGluZVNwYW4oImZyYWMtbGluZSIsZSxkKSk6Zj1CZS5tYWtlTGluZVNwYW4oImZyYWMtbGluZSIsZSksZD1mLmhlaWdodCxwPWYuaGVpZ2h0KTooZj1udWxsLGQ9MCxwPWUuZm9udE1ldHJpY3MoKS5kZWZhdWx0UnVsZVRoaWNrbmVzcyk7dmFyIG0sZyx5O3Iuc2l6ZT09PXRyLkRJU1BMQVkuc2l6ZXx8dC5zaXplPT09ImRpc3BsYXkiPyhtPWUuZm9udE1ldHJpY3MoKS5udW0xLGQ+MD9nPTMqcDpnPTcqcCx5PWUuZm9udE1ldHJpY3MoKS5kZW5vbTEpOihkPjA/KG09ZS5mb250TWV0cmljcygpLm51bTIsZz1wKToobT1lLmZvbnRNZXRyaWNzKCkubnVtMyxnPTMqcCkseT1lLmZvbnRNZXRyaWNzKCkuZGVub20yKTt2YXIgdjtpZihmKXt2YXIgYj1lLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodDttLXMuZGVwdGgtKGIrLjUqZCk8ZyYmKG0rPWctKG0tcy5kZXB0aC0oYisuNSpkKSkpLGItLjUqZC0oaC5oZWlnaHQteSk8ZyYmKHkrPWctKGItLjUqZC0oaC5oZWlnaHQteSkpKTt2YXIgdz0tKGItLjUqZCk7dj1CZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiaW5kaXZpZHVhbFNoaWZ0IixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06aCxzaGlmdDp5fSx7dHlwZToiZWxlbSIsZWxlbTpmLHNoaWZ0Ond9LHt0eXBlOiJlbGVtIixlbGVtOnMsc2hpZnQ6LW19XX0sZSl9ZWxzZXt2YXIgeD1tLXMuZGVwdGgtKGguaGVpZ2h0LXkpO3g8ZyYmKG0rPS41KihnLXgpLHkrPS41KihnLXgpKSx2PUJlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJpbmRpdmlkdWFsU2hpZnQiLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTpoLHNoaWZ0Onl9LHt0eXBlOiJlbGVtIixlbGVtOnMsc2hpZnQ6LW19XX0sZSl9YT1lLmhhdmluZ1N0eWxlKHIpLHYuaGVpZ2h0Kj1hLnNpemVNdWx0aXBsaWVyL2Uuc2l6ZU11bHRpcGxpZXIsdi5kZXB0aCo9YS5zaXplTXVsdGlwbGllci9lLnNpemVNdWx0aXBsaWVyO3ZhciBDO3Iuc2l6ZT09PXRyLkRJU1BMQVkuc2l6ZT9DPWUuZm9udE1ldHJpY3MoKS5kZWxpbTE6ci5zaXplPT09dHIuU0NSSVBUU0NSSVBULnNpemU/Qz1lLmhhdmluZ1N0eWxlKHRyLlNDUklQVCkuZm9udE1ldHJpY3MoKS5kZWxpbTI6Qz1lLmZvbnRNZXRyaWNzKCkuZGVsaW0yO3ZhciBULEU7cmV0dXJuIHQubGVmdERlbGltPT1udWxsP1Q9SHkoZSxbIm1vcGVuIl0pOlQ9b3UuY3VzdG9tU2l6ZWREZWxpbSh0LmxlZnREZWxpbSxDLCEwLGUuaGF2aW5nU3R5bGUociksdC5tb2RlLFsibW9wZW4iXSksdC5jb250aW51ZWQ/RT1CZS5tYWtlU3BhbihbXSk6dC5yaWdodERlbGltPT1udWxsP0U9SHkoZSxbIm1jbG9zZSJdKTpFPW91LmN1c3RvbVNpemVkRGVsaW0odC5yaWdodERlbGltLEMsITAsZS5oYXZpbmdTdHlsZShyKSx0Lm1vZGUsWyJtY2xvc2UiXSksQmUubWFrZVNwYW4oWyJtb3JkIl0uY29uY2F0KGEuc2l6aW5nQ2xhc3NlcyhlKSksW1QsQmUubWFrZVNwYW4oWyJtZnJhYyJdLFt2XSksRV0sZSl9LCJodG1sQnVpbGRlciQ0IiksWDc9bygodCxlKT0+e3ZhciByPW5ldyBkdC5NYXRoTm9kZSgibWZyYWMiLFt5bih0Lm51bWVyLGUpLHluKHQuZGVub20sZSldKTtpZighdC5oYXNCYXJMaW5lKXIuc2V0QXR0cmlidXRlKCJsaW5ldGhpY2tuZXNzIiwiMHB4Iik7ZWxzZSBpZih0LmJhclNpemUpe3ZhciBuPXRpKHQuYmFyU2l6ZSxlKTtyLnNldEF0dHJpYnV0ZSgibGluZXRoaWNrbmVzcyIsa3QobikpfXZhciBpPWJHKHQuc2l6ZSxlLnN0eWxlKTtpZihpLnNpemUhPT1lLnN0eWxlLnNpemUpe3I9bmV3IGR0Lk1hdGhOb2RlKCJtc3R5bGUiLFtyXSk7dmFyIGE9aS5zaXplPT09dHIuRElTUExBWS5zaXplPyJ0cnVlIjoiZmFsc2UiO3Iuc2V0QXR0cmlidXRlKCJkaXNwbGF5c3R5bGUiLGEpLHIuc2V0QXR0cmlidXRlKCJzY3JpcHRsZXZlbCIsIjAiKX1pZih0LmxlZnREZWxpbSE9bnVsbHx8dC5yaWdodERlbGltIT1udWxsKXt2YXIgcz1bXTtpZih0LmxlZnREZWxpbSE9bnVsbCl7dmFyIGw9bmV3IGR0Lk1hdGhOb2RlKCJtbyIsW25ldyBkdC5UZXh0Tm9kZSh0LmxlZnREZWxpbS5yZXBsYWNlKCJcXCIsIiIpKV0pO2wuc2V0QXR0cmlidXRlKCJmZW5jZSIsInRydWUiKSxzLnB1c2gobCl9aWYocy5wdXNoKHIpLHQucmlnaHREZWxpbSE9bnVsbCl7dmFyIHU9bmV3IGR0Lk1hdGhOb2RlKCJtbyIsW25ldyBkdC5UZXh0Tm9kZSh0LnJpZ2h0RGVsaW0ucmVwbGFjZSgiXFwiLCIiKSldKTt1LnNldEF0dHJpYnV0ZSgiZmVuY2UiLCJ0cnVlIikscy5wdXNoKHUpfXJldHVybiBGNyhzKX1yZXR1cm4gcn0sIm1hdGhtbEJ1aWxkZXIkMyIpO050KHt0eXBlOiJnZW5mcmFjIixuYW1lczpbIlxcZGZyYWMiLCJcXGZyYWMiLCJcXHRmcmFjIiwiXFxkYmlub20iLCJcXGJpbm9tIiwiXFx0Ymlub20iLCJcXFxcYXRvcGZyYWMiLCJcXFxcYnJhY2VmcmFjIiwiXFxcXGJyYWNrZnJhYyJdLHByb3BzOntudW1BcmdzOjIsYWxsb3dlZEluQXJndW1lbnQ6ITB9LGhhbmRsZXI6bygodCxlKT0+e3ZhcntwYXJzZXI6cixmdW5jTmFtZTpufT10LGk9ZVswXSxhPWVbMV0scyxsPW51bGwsdT1udWxsLGg9ImF1dG8iO3N3aXRjaChuKXtjYXNlIlxcZGZyYWMiOmNhc2UiXFxmcmFjIjpjYXNlIlxcdGZyYWMiOnM9ITA7YnJlYWs7Y2FzZSJcXFxcYXRvcGZyYWMiOnM9ITE7YnJlYWs7Y2FzZSJcXGRiaW5vbSI6Y2FzZSJcXGJpbm9tIjpjYXNlIlxcdGJpbm9tIjpzPSExLGw9IigiLHU9IikiO2JyZWFrO2Nhc2UiXFxcXGJyYWNlZnJhYyI6cz0hMSxsPSJcXHsiLHU9IlxcfSI7YnJlYWs7Y2FzZSJcXFxcYnJhY2tmcmFjIjpzPSExLGw9IlsiLHU9Il0iO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgZ2VuZnJhYyBjb21tYW5kIil9c3dpdGNoKG4pe2Nhc2UiXFxkZnJhYyI6Y2FzZSJcXGRiaW5vbSI6aD0iZGlzcGxheSI7YnJlYWs7Y2FzZSJcXHRmcmFjIjpjYXNlIlxcdGJpbm9tIjpoPSJ0ZXh0IjticmVha31yZXR1cm57dHlwZToiZ2VuZnJhYyIsbW9kZTpyLm1vZGUsY29udGludWVkOiExLG51bWVyOmksZGVub206YSxoYXNCYXJMaW5lOnMsbGVmdERlbGltOmwscmlnaHREZWxpbTp1LHNpemU6aCxiYXJTaXplOm51bGx9fSwiaGFuZGxlciIpLGh0bWxCdWlsZGVyOlk3LG1hdGhtbEJ1aWxkZXI6WDd9KTtOdCh7dHlwZToiZ2VuZnJhYyIsbmFtZXM6WyJcXGNmcmFjIl0scHJvcHM6e251bUFyZ3M6Mn0saGFuZGxlcjpvKCh0LGUpPT57dmFye3BhcnNlcjpyLGZ1bmNOYW1lOm59PXQsaT1lWzBdLGE9ZVsxXTtyZXR1cm57dHlwZToiZ2VuZnJhYyIsbW9kZTpyLm1vZGUsY29udGludWVkOiEwLG51bWVyOmksZGVub206YSxoYXNCYXJMaW5lOiEwLGxlZnREZWxpbTpudWxsLHJpZ2h0RGVsaW06bnVsbCxzaXplOiJkaXNwbGF5IixiYXJTaXplOm51bGx9fSwiaGFuZGxlciIpfSk7TnQoe3R5cGU6ImluZml4IixuYW1lczpbIlxcb3ZlciIsIlxcY2hvb3NlIiwiXFxhdG9wIiwiXFxicmFjZSIsIlxcYnJhY2siXSxwcm9wczp7bnVtQXJnczowLGluZml4OiEwfSxoYW5kbGVyKHQpe3ZhcntwYXJzZXI6ZSxmdW5jTmFtZTpyLHRva2VuOm59PXQsaTtzd2l0Y2gocil7Y2FzZSJcXG92ZXIiOmk9IlxcZnJhYyI7YnJlYWs7Y2FzZSJcXGNob29zZSI6aT0iXFxiaW5vbSI7YnJlYWs7Y2FzZSJcXGF0b3AiOmk9IlxcXFxhdG9wZnJhYyI7YnJlYWs7Y2FzZSJcXGJyYWNlIjppPSJcXFxcYnJhY2VmcmFjIjticmVhaztjYXNlIlxcYnJhY2siOmk9IlxcXFxicmFja2ZyYWMiO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgaW5maXggZ2VuZnJhYyBjb21tYW5kIil9cmV0dXJue3R5cGU6ImluZml4Iixtb2RlOmUubW9kZSxyZXBsYWNlV2l0aDppLHRva2VuOm59fX0pO0V6PVsiZGlzcGxheSIsInRleHQiLCJzY3JpcHQiLCJzY3JpcHRzY3JpcHQiXSxTej1vKGZ1bmN0aW9uKGUpe3ZhciByPW51bGw7cmV0dXJuIGUubGVuZ3RoPjAmJihyPWUscj1yPT09Ii4iP251bGw6cikscn0sImRlbGltRnJvbVZhbHVlIik7TnQoe3R5cGU6ImdlbmZyYWMiLG5hbWVzOlsiXFxnZW5mcmFjIl0scHJvcHM6e251bUFyZ3M6NixhbGxvd2VkSW5Bcmd1bWVudDohMCxhcmdUeXBlczpbIm1hdGgiLCJtYXRoIiwic2l6ZSIsInRleHQiLCJtYXRoIiwibWF0aCJdfSxoYW5kbGVyKHQsZSl7dmFye3BhcnNlcjpyfT10LG49ZVs0XSxpPWVbNV0sYT1nMyhlWzBdKSxzPWEudHlwZT09PSJhdG9tIiYmYS5mYW1pbHk9PT0ib3BlbiI/U3ooYS50ZXh0KTpudWxsLGw9ZzMoZVsxXSksdT1sLnR5cGU9PT0iYXRvbSImJmwuZmFtaWx5PT09ImNsb3NlIj9TeihsLnRleHQpOm51bGwsaD14cihlWzJdLCJzaXplIiksZixkPW51bGw7aC5pc0JsYW5rP2Y9ITA6KGQ9aC52YWx1ZSxmPWQubnVtYmVyPjApO3ZhciBwPSJhdXRvIixtPWVbM107aWYobS50eXBlPT09Im9yZGdyb3VwIil7aWYobS5ib2R5Lmxlbmd0aD4wKXt2YXIgZz14cihtLmJvZHlbMF0sInRleHRvcmQiKTtwPUV6W051bWJlcihnLnRleHQpXX19ZWxzZSBtPXhyKG0sInRleHRvcmQiKSxwPUV6W051bWJlcihtLnRleHQpXTtyZXR1cm57dHlwZToiZ2VuZnJhYyIsbW9kZTpyLm1vZGUsbnVtZXI6bixkZW5vbTppLGNvbnRpbnVlZDohMSxoYXNCYXJMaW5lOmYsYmFyU2l6ZTpkLGxlZnREZWxpbTpzLHJpZ2h0RGVsaW06dSxzaXplOnB9fSxodG1sQnVpbGRlcjpZNyxtYXRobWxCdWlsZGVyOlg3fSk7TnQoe3R5cGU6ImluZml4IixuYW1lczpbIlxcYWJvdmUiXSxwcm9wczp7bnVtQXJnczoxLGFyZ1R5cGVzOlsic2l6ZSJdLGluZml4OiEwfSxoYW5kbGVyKHQsZSl7dmFye3BhcnNlcjpyLGZ1bmNOYW1lOm4sdG9rZW46aX09dDtyZXR1cm57dHlwZToiaW5maXgiLG1vZGU6ci5tb2RlLHJlcGxhY2VXaXRoOiJcXFxcYWJvdmVmcmFjIixzaXplOnhyKGVbMF0sInNpemUiKS52YWx1ZSx0b2tlbjppfX19KTtOdCh7dHlwZToiZ2VuZnJhYyIsbmFtZXM6WyJcXFxcYWJvdmVmcmFjIl0scHJvcHM6e251bUFyZ3M6MyxhcmdUeXBlczpbIm1hdGgiLCJzaXplIiwibWF0aCJdfSxoYW5kbGVyOm8oKHQsZSk9Pnt2YXJ7cGFyc2VyOnIsZnVuY05hbWU6bn09dCxpPWVbMF0sYT1vYmUoeHIoZVsxXSwiaW5maXgiKS5zaXplKSxzPWVbMl0sbD1hLm51bWJlcj4wO3JldHVybnt0eXBlOiJnZW5mcmFjIixtb2RlOnIubW9kZSxudW1lcjppLGRlbm9tOnMsY29udGludWVkOiExLGhhc0JhckxpbmU6bCxiYXJTaXplOmEsbGVmdERlbGltOm51bGwscmlnaHREZWxpbTpudWxsLHNpemU6ImF1dG8ifX0sImhhbmRsZXIiKSxodG1sQnVpbGRlcjpZNyxtYXRobWxCdWlsZGVyOlg3fSk7d0c9bygodCxlKT0+e3ZhciByPWUuc3R5bGUsbixpO3QudHlwZT09PSJzdXBzdWIiPyhuPXQuc3VwP0ZyKHQuc3VwLGUuaGF2aW5nU3R5bGUoci5zdXAoKSksZSk6RnIodC5zdWIsZS5oYXZpbmdTdHlsZShyLnN1YigpKSxlKSxpPXhyKHQuYmFzZSwiaG9yaXpCcmFjZSIpKTppPXhyKHQsImhvcml6QnJhY2UiKTt2YXIgYT1GcihpLmJhc2UsZS5oYXZpbmdCYXNlU3R5bGUodHIuRElTUExBWSkpLHM9Y3Uuc3ZnU3BhbihpLGUpLGw7aWYoaS5pc092ZXI/KGw9QmUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImZpcnN0QmFzZWxpbmUiLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTphfSx7dHlwZToia2VybiIsc2l6ZTouMX0se3R5cGU6ImVsZW0iLGVsZW06c31dfSxlKSxsLmNoaWxkcmVuWzBdLmNoaWxkcmVuWzBdLmNoaWxkcmVuWzFdLmNsYXNzZXMucHVzaCgic3ZnLWFsaWduIikpOihsPUJlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJib3R0b20iLHBvc2l0aW9uRGF0YTphLmRlcHRoKy4xK3MuaGVpZ2h0LGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTpzfSx7dHlwZToia2VybiIsc2l6ZTouMX0se3R5cGU6ImVsZW0iLGVsZW06YX1dfSxlKSxsLmNoaWxkcmVuWzBdLmNoaWxkcmVuWzBdLmNoaWxkcmVuWzBdLmNsYXNzZXMucHVzaCgic3ZnLWFsaWduIikpLG4pe3ZhciB1PUJlLm1ha2VTcGFuKFsibW9yZCIsaS5pc092ZXI/Im1vdmVyIjoibXVuZGVyIl0sW2xdLGUpO2kuaXNPdmVyP2w9QmUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImZpcnN0QmFzZWxpbmUiLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTp1fSx7dHlwZToia2VybiIsc2l6ZTouMn0se3R5cGU6ImVsZW0iLGVsZW06bn1dfSxlKTpsPUJlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJib3R0b20iLHBvc2l0aW9uRGF0YTp1LmRlcHRoKy4yK24uaGVpZ2h0K24uZGVwdGgsY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOm59LHt0eXBlOiJrZXJuIixzaXplOi4yfSx7dHlwZToiZWxlbSIsZWxlbTp1fV19LGUpfXJldHVybiBCZS5tYWtlU3BhbihbIm1vcmQiLGkuaXNPdmVyPyJtb3ZlciI6Im11bmRlciJdLFtsXSxlKX0sImh0bWxCdWlsZGVyJDMiKSxENGU9bygodCxlKT0+e3ZhciByPWN1Lm1hdGhNTG5vZGUodC5sYWJlbCk7cmV0dXJuIG5ldyBkdC5NYXRoTm9kZSh0LmlzT3Zlcj8ibW92ZXIiOiJtdW5kZXIiLFt5bih0LmJhc2UsZSkscl0pfSwibWF0aG1sQnVpbGRlciQyIik7TnQoe3R5cGU6Imhvcml6QnJhY2UiLG5hbWVzOlsiXFxvdmVyYnJhY2UiLCJcXHVuZGVyYnJhY2UiXSxwcm9wczp7bnVtQXJnczoxfSxoYW5kbGVyKHQsZSl7dmFye3BhcnNlcjpyLGZ1bmNOYW1lOm59PXQ7cmV0dXJue3R5cGU6Imhvcml6QnJhY2UiLG1vZGU6ci5tb2RlLGxhYmVsOm4saXNPdmVyOi9eXFxvdmVyLy50ZXN0KG4pLGJhc2U6ZVswXX19LGh0bWxCdWlsZGVyOndHLG1hdGhtbEJ1aWxkZXI6RDRlfSk7TnQoe3R5cGU6ImhyZWYiLG5hbWVzOlsiXFxocmVmIl0scHJvcHM6e251bUFyZ3M6MixhcmdUeXBlczpbInVybCIsIm9yaWdpbmFsIl0sYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcjpvKCh0LGUpPT57dmFye3BhcnNlcjpyfT10LG49ZVsxXSxpPXhyKGVbMF0sInVybCIpLnVybDtyZXR1cm4gci5zZXR0aW5ncy5pc1RydXN0ZWQoe2NvbW1hbmQ6IlxcaHJlZiIsdXJsOml9KT97dHlwZToiaHJlZiIsbW9kZTpyLm1vZGUsaHJlZjppLGJvZHk6ZGkobil9OnIuZm9ybWF0VW5zdXBwb3J0ZWRDbWQoIlxcaHJlZiIpfSwiaGFuZGxlciIpLGh0bWxCdWlsZGVyOm8oKHQsZSk9Pnt2YXIgcj1QaSh0LmJvZHksZSwhMSk7cmV0dXJuIEJlLm1ha2VBbmNob3IodC5ocmVmLFtdLHIsZSl9LCJodG1sQnVpbGRlciIpLG1hdGhtbEJ1aWxkZXI6bygodCxlKT0+e3ZhciByPWRoKHQuYm9keSxlKTtyZXR1cm4gciBpbnN0YW5jZW9mIHdzfHwocj1uZXcgd3MoIm1yb3ciLFtyXSkpLHIuc2V0QXR0cmlidXRlKCJocmVmIix0LmhyZWYpLHJ9LCJtYXRobWxCdWlsZGVyIil9KTtOdCh7dHlwZToiaHJlZiIsbmFtZXM6WyJcXHVybCJdLHByb3BzOntudW1BcmdzOjEsYXJnVHlwZXM6WyJ1cmwiXSxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyOm8oKHQsZSk9Pnt2YXJ7cGFyc2VyOnJ9PXQsbj14cihlWzBdLCJ1cmwiKS51cmw7aWYoIXIuc2V0dGluZ3MuaXNUcnVzdGVkKHtjb21tYW5kOiJcXHVybCIsdXJsOm59KSlyZXR1cm4gci5mb3JtYXRVbnN1cHBvcnRlZENtZCgiXFx1cmwiKTtmb3IodmFyIGk9W10sYT0wO2E8bi5sZW5ndGg7YSsrKXt2YXIgcz1uW2FdO3M9PT0ifiImJihzPSJcXHRleHRhc2NpaXRpbGRlIiksaS5wdXNoKHt0eXBlOiJ0ZXh0b3JkIixtb2RlOiJ0ZXh0Iix0ZXh0OnN9KX12YXIgbD17dHlwZToidGV4dCIsbW9kZTpyLm1vZGUsZm9udDoiXFx0ZXh0dHQiLGJvZHk6aX07cmV0dXJue3R5cGU6ImhyZWYiLG1vZGU6ci5tb2RlLGhyZWY6bixib2R5OmRpKGwpfX0sImhhbmRsZXIiKX0pO050KHt0eXBlOiJoYm94IixuYW1lczpbIlxcaGJveCJdLHByb3BzOntudW1BcmdzOjEsYXJnVHlwZXM6WyJ0ZXh0Il0sYWxsb3dlZEluVGV4dDohMCxwcmltaXRpdmU6ITB9LGhhbmRsZXIodCxlKXt2YXJ7cGFyc2VyOnJ9PXQ7cmV0dXJue3R5cGU6Imhib3giLG1vZGU6ci5tb2RlLGJvZHk6ZGkoZVswXSl9fSxodG1sQnVpbGRlcih0LGUpe3ZhciByPVBpKHQuYm9keSxlLCExKTtyZXR1cm4gQmUubWFrZUZyYWdtZW50KHIpfSxtYXRobWxCdWlsZGVyKHQsZSl7cmV0dXJuIG5ldyBkdC5NYXRoTm9kZSgibXJvdyIsa3ModC5ib2R5LGUpKX19KTtOdCh7dHlwZToiaHRtbCIsbmFtZXM6WyJcXGh0bWxDbGFzcyIsIlxcaHRtbElkIiwiXFxodG1sU3R5bGUiLCJcXGh0bWxEYXRhIl0scHJvcHM6e251bUFyZ3M6MixhcmdUeXBlczpbInJhdyIsIm9yaWdpbmFsIl0sYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcjpvKCh0LGUpPT57dmFye3BhcnNlcjpyLGZ1bmNOYW1lOm4sdG9rZW46aX09dCxhPXhyKGVbMF0sInJhdyIpLnN0cmluZyxzPWVbMV07ci5zZXR0aW5ncy5zdHJpY3QmJnIuc2V0dGluZ3MucmVwb3J0Tm9uc3RyaWN0KCJodG1sRXh0ZW5zaW9uIiwiSFRNTCBleHRlbnNpb24gaXMgZGlzYWJsZWQgb24gc3RyaWN0IG1vZGUiKTt2YXIgbCx1PXt9O3N3aXRjaChuKXtjYXNlIlxcaHRtbENsYXNzIjp1LmNsYXNzPWEsbD17Y29tbWFuZDoiXFxodG1sQ2xhc3MiLGNsYXNzOmF9O2JyZWFrO2Nhc2UiXFxodG1sSWQiOnUuaWQ9YSxsPXtjb21tYW5kOiJcXGh0bWxJZCIsaWQ6YX07YnJlYWs7Y2FzZSJcXGh0bWxTdHlsZSI6dS5zdHlsZT1hLGw9e2NvbW1hbmQ6IlxcaHRtbFN0eWxlIixzdHlsZTphfTticmVhaztjYXNlIlxcaHRtbERhdGEiOntmb3IodmFyIGg9YS5zcGxpdCgiLCIpLGY9MDtmPGgubGVuZ3RoO2YrKyl7dmFyIGQ9aFtmXS5zcGxpdCgiPSIpO2lmKGQubGVuZ3RoIT09Mil0aHJvdyBuZXcgZ3QoIkVycm9yIHBhcnNpbmcga2V5LXZhbHVlIGZvciBcXGh0bWxEYXRhIik7dVsiZGF0YS0iK2RbMF0udHJpbSgpXT1kWzFdLnRyaW0oKX1sPXtjb21tYW5kOiJcXGh0bWxEYXRhIixhdHRyaWJ1dGVzOnV9O2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgaHRtbCBjb21tYW5kIil9cmV0dXJuIHIuc2V0dGluZ3MuaXNUcnVzdGVkKGwpP3t0eXBlOiJodG1sIixtb2RlOnIubW9kZSxhdHRyaWJ1dGVzOnUsYm9keTpkaShzKX06ci5mb3JtYXRVbnN1cHBvcnRlZENtZChuKX0sImhhbmRsZXIiKSxodG1sQnVpbGRlcjpvKCh0LGUpPT57dmFyIHI9UGkodC5ib2R5LGUsITEpLG49WyJlbmNsb3NpbmciXTt0LmF0dHJpYnV0ZXMuY2xhc3MmJm4ucHVzaCguLi50LmF0dHJpYnV0ZXMuY2xhc3MudHJpbSgpLnNwbGl0KC9ccysvKSk7dmFyIGk9QmUubWFrZVNwYW4obixyLGUpO2Zvcih2YXIgYSBpbiB0LmF0dHJpYnV0ZXMpYSE9PSJjbGFzcyImJnQuYXR0cmlidXRlcy5oYXNPd25Qcm9wZXJ0eShhKSYmaS5zZXRBdHRyaWJ1dGUoYSx0LmF0dHJpYnV0ZXNbYV0pO3JldHVybiBpfSwiaHRtbEJ1aWxkZXIiKSxtYXRobWxCdWlsZGVyOm8oKHQsZSk9PmRoKHQuYm9keSxlKSwibWF0aG1sQnVpbGRlciIpfSk7TnQoe3R5cGU6Imh0bWxtYXRobWwiLG5hbWVzOlsiXFxodG1sQG1hdGhtbCJdLHByb3BzOntudW1BcmdzOjIsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcjpvKCh0LGUpPT57dmFye3BhcnNlcjpyfT10O3JldHVybnt0eXBlOiJodG1sbWF0aG1sIixtb2RlOnIubW9kZSxodG1sOmRpKGVbMF0pLG1hdGhtbDpkaShlWzFdKX19LCJoYW5kbGVyIiksaHRtbEJ1aWxkZXI6bygodCxlKT0+e3ZhciByPVBpKHQuaHRtbCxlLCExKTtyZXR1cm4gQmUubWFrZUZyYWdtZW50KHIpfSwiaHRtbEJ1aWxkZXIiKSxtYXRobWxCdWlsZGVyOm8oKHQsZSk9PmRoKHQubWF0aG1sLGUpLCJtYXRobWxCdWlsZGVyIil9KTt4Nz1vKGZ1bmN0aW9uKGUpe2lmKC9eWy0rXT8gKihcZCsoXC5cZCopP3xcLlxkKykkLy50ZXN0KGUpKXJldHVybntudW1iZXI6K2UsdW5pdDoiYnAifTt2YXIgcj0vKFstK10/KSAqKFxkKyg/OlwuXGQqKT98XC5cZCspICooW2Etel17Mn0pLy5leGVjKGUpO2lmKCFyKXRocm93IG5ldyBndCgiSW52YWxpZCBzaXplOiAnIitlKyInIGluIFxcaW5jbHVkZWdyYXBoaWNzIik7dmFyIG49e251bWJlcjorKHJbMV0rclsyXSksdW5pdDpyWzNdfTtpZighenoobikpdGhyb3cgbmV3IGd0KCJJbnZhbGlkIHVuaXQ6ICciK24udW5pdCsiJyBpbiBcXGluY2x1ZGVncmFwaGljcy4iKTtyZXR1cm4gbn0sInNpemVEYXRhIik7TnQoe3R5cGU6ImluY2x1ZGVncmFwaGljcyIsbmFtZXM6WyJcXGluY2x1ZGVncmFwaGljcyJdLHByb3BzOntudW1BcmdzOjEsbnVtT3B0aW9uYWxBcmdzOjEsYXJnVHlwZXM6WyJyYXciLCJ1cmwiXSxhbGxvd2VkSW5UZXh0OiExfSxoYW5kbGVyOm8oKHQsZSxyKT0+e3ZhcntwYXJzZXI6bn09dCxpPXtudW1iZXI6MCx1bml0OiJlbSJ9LGE9e251bWJlcjouOSx1bml0OiJlbSJ9LHM9e251bWJlcjowLHVuaXQ6ImVtIn0sbD0iIjtpZihyWzBdKWZvcih2YXIgdT14cihyWzBdLCJyYXciKS5zdHJpbmcsaD11LnNwbGl0KCIsIiksZj0wO2Y8aC5sZW5ndGg7ZisrKXt2YXIgZD1oW2ZdLnNwbGl0KCI9Iik7aWYoZC5sZW5ndGg9PT0yKXt2YXIgcD1kWzFdLnRyaW0oKTtzd2l0Y2goZFswXS50cmltKCkpe2Nhc2UiYWx0IjpsPXA7YnJlYWs7Y2FzZSJ3aWR0aCI6aT14NyhwKTticmVhaztjYXNlImhlaWdodCI6YT14NyhwKTticmVhaztjYXNlInRvdGFsaGVpZ2h0IjpzPXg3KHApO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IGd0KCJJbnZhbGlkIGtleTogJyIrZFswXSsiJyBpbiBcXGluY2x1ZGVncmFwaGljcy4iKX19fXZhciBtPXhyKGVbMF0sInVybCIpLnVybDtyZXR1cm4gbD09PSIiJiYobD1tLGw9bC5yZXBsYWNlKC9eLipbXFwvXS8sIiIpLGw9bC5zdWJzdHJpbmcoMCxsLmxhc3RJbmRleE9mKCIuIikpKSxuLnNldHRpbmdzLmlzVHJ1c3RlZCh7Y29tbWFuZDoiXFxpbmNsdWRlZ3JhcGhpY3MiLHVybDptfSk/e3R5cGU6ImluY2x1ZGVncmFwaGljcyIsbW9kZTpuLm1vZGUsYWx0Omwsd2lkdGg6aSxoZWlnaHQ6YSx0b3RhbGhlaWdodDpzLHNyYzptfTpuLmZvcm1hdFVuc3VwcG9ydGVkQ21kKCJcXGluY2x1ZGVncmFwaGljcyIpfSwiaGFuZGxlciIpLGh0bWxCdWlsZGVyOm8oKHQsZSk9Pnt2YXIgcj10aSh0LmhlaWdodCxlKSxuPTA7dC50b3RhbGhlaWdodC5udW1iZXI+MCYmKG49dGkodC50b3RhbGhlaWdodCxlKS1yKTt2YXIgaT0wO3Qud2lkdGgubnVtYmVyPjAmJihpPXRpKHQud2lkdGgsZSkpO3ZhciBhPXtoZWlnaHQ6a3QocituKX07aT4wJiYoYS53aWR0aD1rdChpKSksbj4wJiYoYS52ZXJ0aWNhbEFsaWduPWt0KC1uKSk7dmFyIHM9bmV3IFM3KHQuc3JjLHQuYWx0LGEpO3JldHVybiBzLmhlaWdodD1yLHMuZGVwdGg9bixzfSwiaHRtbEJ1aWxkZXIiKSxtYXRobWxCdWlsZGVyOm8oKHQsZSk9Pnt2YXIgcj1uZXcgZHQuTWF0aE5vZGUoIm1nbHlwaCIsW10pO3Iuc2V0QXR0cmlidXRlKCJhbHQiLHQuYWx0KTt2YXIgbj10aSh0LmhlaWdodCxlKSxpPTA7aWYodC50b3RhbGhlaWdodC5udW1iZXI+MCYmKGk9dGkodC50b3RhbGhlaWdodCxlKS1uLHIuc2V0QXR0cmlidXRlKCJ2YWxpZ24iLGt0KC1pKSkpLHIuc2V0QXR0cmlidXRlKCJoZWlnaHQiLGt0KG4raSkpLHQud2lkdGgubnVtYmVyPjApe3ZhciBhPXRpKHQud2lkdGgsZSk7ci5zZXRBdHRyaWJ1dGUoIndpZHRoIixrdChhKSl9cmV0dXJuIHIuc2V0QXR0cmlidXRlKCJzcmMiLHQuc3JjKSxyfSwibWF0aG1sQnVpbGRlciIpfSk7TnQoe3R5cGU6Imtlcm4iLG5hbWVzOlsiXFxrZXJuIiwiXFxta2VybiIsIlxcaHNraXAiLCJcXG1za2lwIl0scHJvcHM6e251bUFyZ3M6MSxhcmdUeXBlczpbInNpemUiXSxwcmltaXRpdmU6ITAsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcih0LGUpe3ZhcntwYXJzZXI6cixmdW5jTmFtZTpufT10LGk9eHIoZVswXSwic2l6ZSIpO2lmKHIuc2V0dGluZ3Muc3RyaWN0KXt2YXIgYT1uWzFdPT09Im0iLHM9aS52YWx1ZS51bml0PT09Im11IjthPyhzfHxyLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdCgibWF0aFZzVGV4dFVuaXRzIiwiTGFUZVgncyAiK24rIiBzdXBwb3J0cyBvbmx5IG11IHVuaXRzLCAiKygibm90ICIraS52YWx1ZS51bml0KyIgdW5pdHMiKSksci5tb2RlIT09Im1hdGgiJiZyLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdCgibWF0aFZzVGV4dFVuaXRzIiwiTGFUZVgncyAiK24rIiB3b3JrcyBvbmx5IGluIG1hdGggbW9kZSIpKTpzJiZyLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdCgibWF0aFZzVGV4dFVuaXRzIiwiTGFUZVgncyAiK24rIiBkb2Vzbid0IHN1cHBvcnQgbXUgdW5pdHMiKX1yZXR1cm57dHlwZToia2VybiIsbW9kZTpyLm1vZGUsZGltZW5zaW9uOmkudmFsdWV9fSxodG1sQnVpbGRlcih0LGUpe3JldHVybiBCZS5tYWtlR2x1ZSh0LmRpbWVuc2lvbixlKX0sbWF0aG1sQnVpbGRlcih0LGUpe3ZhciByPXRpKHQuZGltZW5zaW9uLGUpO3JldHVybiBuZXcgZHQuU3BhY2VOb2RlKHIpfX0pO050KHt0eXBlOiJsYXAiLG5hbWVzOlsiXFxtYXRobGxhcCIsIlxcbWF0aHJsYXAiLCJcXG1hdGhjbGFwIl0scHJvcHM6e251bUFyZ3M6MSxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyOm8oKHQsZSk9Pnt2YXJ7cGFyc2VyOnIsZnVuY05hbWU6bn09dCxpPWVbMF07cmV0dXJue3R5cGU6ImxhcCIsbW9kZTpyLm1vZGUsYWxpZ25tZW50Om4uc2xpY2UoNSksYm9keTppfX0sImhhbmRsZXIiKSxodG1sQnVpbGRlcjpvKCh0LGUpPT57dmFyIHI7dC5hbGlnbm1lbnQ9PT0iY2xhcCI/KHI9QmUubWFrZVNwYW4oW10sW0ZyKHQuYm9keSxlKV0pLHI9QmUubWFrZVNwYW4oWyJpbm5lciJdLFtyXSxlKSk6cj1CZS5tYWtlU3BhbihbImlubmVyIl0sW0ZyKHQuYm9keSxlKV0pO3ZhciBuPUJlLm1ha2VTcGFuKFsiZml4Il0sW10pLGk9QmUubWFrZVNwYW4oW3QuYWxpZ25tZW50XSxbcixuXSxlKSxhPUJlLm1ha2VTcGFuKFsic3RydXQiXSk7cmV0dXJuIGEuc3R5bGUuaGVpZ2h0PWt0KGkuaGVpZ2h0K2kuZGVwdGgpLGkuZGVwdGgmJihhLnN0eWxlLnZlcnRpY2FsQWxpZ249a3QoLWkuZGVwdGgpKSxpLmNoaWxkcmVuLnVuc2hpZnQoYSksaT1CZS5tYWtlU3BhbihbInRoaW5ib3giXSxbaV0sZSksQmUubWFrZVNwYW4oWyJtb3JkIiwidmJveCJdLFtpXSxlKX0sImh0bWxCdWlsZGVyIiksbWF0aG1sQnVpbGRlcjpvKCh0LGUpPT57dmFyIHI9bmV3IGR0Lk1hdGhOb2RlKCJtcGFkZGVkIixbeW4odC5ib2R5LGUpXSk7aWYodC5hbGlnbm1lbnQhPT0icmxhcCIpe3ZhciBuPXQuYWxpZ25tZW50PT09ImxsYXAiPyItMSI6Ii0wLjUiO3Iuc2V0QXR0cmlidXRlKCJsc3BhY2UiLG4rIndpZHRoIil9cmV0dXJuIHIuc2V0QXR0cmlidXRlKCJ3aWR0aCIsIjBweCIpLHJ9LCJtYXRobWxCdWlsZGVyIil9KTtOdCh7dHlwZToic3R5bGluZyIsbmFtZXM6WyJcXCgiLCIkIl0scHJvcHM6e251bUFyZ3M6MCxhbGxvd2VkSW5UZXh0OiEwLGFsbG93ZWRJbk1hdGg6ITF9LGhhbmRsZXIodCxlKXt2YXJ7ZnVuY05hbWU6cixwYXJzZXI6bn09dCxpPW4ubW9kZTtuLnN3aXRjaE1vZGUoIm1hdGgiKTt2YXIgYT1yPT09IlxcKCI/IlxcKSI6IiQiLHM9bi5wYXJzZUV4cHJlc3Npb24oITEsYSk7cmV0dXJuIG4uZXhwZWN0KGEpLG4uc3dpdGNoTW9kZShpKSx7dHlwZToic3R5bGluZyIsbW9kZTpuLm1vZGUsc3R5bGU6InRleHQiLGJvZHk6c319fSk7TnQoe3R5cGU6InRleHQiLG5hbWVzOlsiXFwpIiwiXFxdIl0scHJvcHM6e251bUFyZ3M6MCxhbGxvd2VkSW5UZXh0OiEwLGFsbG93ZWRJbk1hdGg6ITF9LGhhbmRsZXIodCxlKXt0aHJvdyBuZXcgZ3QoIk1pc21hdGNoZWQgIit0LmZ1bmNOYW1lKX19KTtDej1vKCh0LGUpPT57c3dpdGNoKGUuc3R5bGUuc2l6ZSl7Y2FzZSB0ci5ESVNQTEFZLnNpemU6cmV0dXJuIHQuZGlzcGxheTtjYXNlIHRyLlRFWFQuc2l6ZTpyZXR1cm4gdC50ZXh0O2Nhc2UgdHIuU0NSSVBULnNpemU6cmV0dXJuIHQuc2NyaXB0O2Nhc2UgdHIuU0NSSVBUU0NSSVBULnNpemU6cmV0dXJuIHQuc2NyaXB0c2NyaXB0O2RlZmF1bHQ6cmV0dXJuIHQudGV4dH19LCJjaG9vc2VNYXRoU3R5bGUiKTtOdCh7dHlwZToibWF0aGNob2ljZSIsbmFtZXM6WyJcXG1hdGhjaG9pY2UiXSxwcm9wczp7bnVtQXJnczo0LHByaW1pdGl2ZTohMH0saGFuZGxlcjpvKCh0LGUpPT57dmFye3BhcnNlcjpyfT10O3JldHVybnt0eXBlOiJtYXRoY2hvaWNlIixtb2RlOnIubW9kZSxkaXNwbGF5OmRpKGVbMF0pLHRleHQ6ZGkoZVsxXSksc2NyaXB0OmRpKGVbMl0pLHNjcmlwdHNjcmlwdDpkaShlWzNdKX19LCJoYW5kbGVyIiksaHRtbEJ1aWxkZXI6bygodCxlKT0+e3ZhciByPUN6KHQsZSksbj1QaShyLGUsITEpO3JldHVybiBCZS5tYWtlRnJhZ21lbnQobil9LCJodG1sQnVpbGRlciIpLG1hdGhtbEJ1aWxkZXI6bygodCxlKT0+e3ZhciByPUN6KHQsZSk7cmV0dXJuIGRoKHIsZSl9LCJtYXRobWxCdWlsZGVyIil9KTtURz1vKCh0LGUscixuLGksYSxzKT0+e3Q9QmUubWFrZVNwYW4oW10sW3RdKTt2YXIgbD1yJiZKdC5pc0NoYXJhY3RlckJveChyKSx1LGg7aWYoZSl7dmFyIGY9RnIoZSxuLmhhdmluZ1N0eWxlKGkuc3VwKCkpLG4pO2g9e2VsZW06ZixrZXJuOk1hdGgubWF4KG4uZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmcxLG4uZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmczLWYuZGVwdGgpfX1pZihyKXt2YXIgZD1GcihyLG4uaGF2aW5nU3R5bGUoaS5zdWIoKSksbik7dT17ZWxlbTpkLGtlcm46TWF0aC5tYXgobi5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzIsbi5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzQtZC5oZWlnaHQpfX12YXIgcDtpZihoJiZ1KXt2YXIgbT1uLmZvbnRNZXRyaWNzKCkuYmlnT3BTcGFjaW5nNSt1LmVsZW0uaGVpZ2h0K3UuZWxlbS5kZXB0aCt1Lmtlcm4rdC5kZXB0aCtzO3A9QmUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImJvdHRvbSIscG9zaXRpb25EYXRhOm0sY2hpbGRyZW46W3t0eXBlOiJrZXJuIixzaXplOm4uZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmc1fSx7dHlwZToiZWxlbSIsZWxlbTp1LmVsZW0sbWFyZ2luTGVmdDprdCgtYSl9LHt0eXBlOiJrZXJuIixzaXplOnUua2Vybn0se3R5cGU6ImVsZW0iLGVsZW06dH0se3R5cGU6Imtlcm4iLHNpemU6aC5rZXJufSx7dHlwZToiZWxlbSIsZWxlbTpoLmVsZW0sbWFyZ2luTGVmdDprdChhKX0se3R5cGU6Imtlcm4iLHNpemU6bi5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzV9XX0sbil9ZWxzZSBpZih1KXt2YXIgZz10LmhlaWdodC1zO3A9QmUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6InRvcCIscG9zaXRpb25EYXRhOmcsY2hpbGRyZW46W3t0eXBlOiJrZXJuIixzaXplOm4uZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmc1fSx7dHlwZToiZWxlbSIsZWxlbTp1LmVsZW0sbWFyZ2luTGVmdDprdCgtYSl9LHt0eXBlOiJrZXJuIixzaXplOnUua2Vybn0se3R5cGU6ImVsZW0iLGVsZW06dH1dfSxuKX1lbHNlIGlmKGgpe3ZhciB5PXQuZGVwdGgrcztwPUJlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJib3R0b20iLHBvc2l0aW9uRGF0YTp5LGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTp0fSx7dHlwZToia2VybiIsc2l6ZTpoLmtlcm59LHt0eXBlOiJlbGVtIixlbGVtOmguZWxlbSxtYXJnaW5MZWZ0Omt0KGEpfSx7dHlwZToia2VybiIsc2l6ZTpuLmZvbnRNZXRyaWNzKCkuYmlnT3BTcGFjaW5nNX1dfSxuKX1lbHNlIHJldHVybiB0O3ZhciB2PVtwXTtpZih1JiZhIT09MCYmIWwpe3ZhciB4PUJlLm1ha2VTcGFuKFsibXNwYWNlIl0sW10sbik7eC5zdHlsZS5tYXJnaW5SaWdodD1rdChhKSx2LnVuc2hpZnQoeCl9cmV0dXJuIEJlLm1ha2VTcGFuKFsibW9wIiwib3AtbGltaXRzIl0sdixuKX0sImFzc2VtYmxlU3VwU3ViIiksa0c9WyJcXHNtYWxsaW50Il0sbTA9bygodCxlKT0+e3ZhciByLG4saT0hMSxhO3QudHlwZT09PSJzdXBzdWIiPyhyPXQuc3VwLG49dC5zdWIsYT14cih0LmJhc2UsIm9wIiksaT0hMCk6YT14cih0LCJvcCIpO3ZhciBzPWUuc3R5bGUsbD0hMTtzLnNpemU9PT10ci5ESVNQTEFZLnNpemUmJmEuc3ltYm9sJiYhSnQuY29udGFpbnMoa0csYS5uYW1lKSYmKGw9ITApO3ZhciB1O2lmKGEuc3ltYm9sKXt2YXIgaD1sPyJTaXplMi1SZWd1bGFyIjoiU2l6ZTEtUmVndWxhciIsZj0iIjtpZigoYS5uYW1lPT09Ilxcb2lpbnQifHxhLm5hbWU9PT0iXFxvaWlpbnQiKSYmKGY9YS5uYW1lLnNsaWNlKDEpLGEubmFtZT1mPT09Im9paW50Ij8iXFxpaW50IjoiXFxpaWludCIpLHU9QmUubWFrZVN5bWJvbChhLm5hbWUsaCwibWF0aCIsZSxbIm1vcCIsIm9wLXN5bWJvbCIsbD8ibGFyZ2Utb3AiOiJzbWFsbC1vcCJdKSxmLmxlbmd0aD4wKXt2YXIgZD11Lml0YWxpYyxwPUJlLnN0YXRpY1N2ZyhmKyJTaXplIisobD8iMiI6IjEiKSxlKTt1PUJlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJpbmRpdmlkdWFsU2hpZnQiLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTp1LHNoaWZ0OjB9LHt0eXBlOiJlbGVtIixlbGVtOnAsc2hpZnQ6bD8uMDg6MH1dfSxlKSxhLm5hbWU9IlxcIitmLHUuY2xhc3Nlcy51bnNoaWZ0KCJtb3AiKSx1Lml0YWxpYz1kfX1lbHNlIGlmKGEuYm9keSl7dmFyIG09UGkoYS5ib2R5LGUsITApO20ubGVuZ3RoPT09MSYmbVswXWluc3RhbmNlb2YgVHM/KHU9bVswXSx1LmNsYXNzZXNbMF09Im1vcCIpOnU9QmUubWFrZVNwYW4oWyJtb3AiXSxtLGUpfWVsc2V7Zm9yKHZhciBnPVtdLHk9MTt5PGEubmFtZS5sZW5ndGg7eSsrKWcucHVzaChCZS5tYXRoc3ltKGEubmFtZVt5XSxhLm1vZGUsZSkpO3U9QmUubWFrZVNwYW4oWyJtb3AiXSxnLGUpfXZhciB2PTAseD0wO3JldHVybih1IGluc3RhbmNlb2YgVHN8fGEubmFtZT09PSJcXG9paW50Inx8YS5uYW1lPT09Ilxcb2lpaW50IikmJiFhLnN1cHByZXNzQmFzZVNoaWZ0JiYodj0odS5oZWlnaHQtdS5kZXB0aCkvMi1lLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodCx4PXUuaXRhbGljKSxpP1RHKHUscixuLGUscyx4LHYpOih2JiYodS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLHUuc3R5bGUudG9wPWt0KHYpKSx1KX0sImh0bWxCdWlsZGVyJDIiKSxXeT1vKCh0LGUpPT57dmFyIHI7aWYodC5zeW1ib2wpcj1uZXcgd3MoIm1vIixbQ28odC5uYW1lLHQubW9kZSldKSxKdC5jb250YWlucyhrRyx0Lm5hbWUpJiZyLnNldEF0dHJpYnV0ZSgibGFyZ2VvcCIsImZhbHNlIik7ZWxzZSBpZih0LmJvZHkpcj1uZXcgd3MoIm1vIixrcyh0LmJvZHksZSkpO2Vsc2V7cj1uZXcgd3MoIm1pIixbbmV3IEpmKHQubmFtZS5zbGljZSgxKSldKTt2YXIgbj1uZXcgd3MoIm1vIixbQ28oIlx1MjA2MSIsInRleHQiKV0pO3QucGFyZW50SXNTdXBTdWI/cj1uZXcgd3MoIm1yb3ciLFtyLG5dKTpyPVF6KFtyLG5dKX1yZXR1cm4gcn0sIm1hdGhtbEJ1aWxkZXIkMSIpLEw0ZT17Ilx1MjIwRiI6IlxccHJvZCIsIlx1MjIxMCI6IlxcY29wcm9kIiwiXHUyMjExIjoiXFxzdW0iLCJcdTIyQzAiOiJcXGJpZ3dlZGdlIiwiXHUyMkMxIjoiXFxiaWd2ZWUiLCJcdTIyQzIiOiJcXGJpZ2NhcCIsIlx1MjJDMyI6IlxcYmlnY3VwIiwiXHUyQTAwIjoiXFxiaWdvZG90IiwiXHUyQTAxIjoiXFxiaWdvcGx1cyIsIlx1MkEwMiI6IlxcYmlnb3RpbWVzIiwiXHUyQTA0IjoiXFxiaWd1cGx1cyIsIlx1MkEwNiI6IlxcYmlnc3FjdXAifTtOdCh7dHlwZToib3AiLG5hbWVzOlsiXFxjb3Byb2QiLCJcXGJpZ3ZlZSIsIlxcYmlnd2VkZ2UiLCJcXGJpZ3VwbHVzIiwiXFxiaWdjYXAiLCJcXGJpZ2N1cCIsIlxcaW50b3AiLCJcXHByb2QiLCJcXHN1bSIsIlxcYmlnb3RpbWVzIiwiXFxiaWdvcGx1cyIsIlxcYmlnb2RvdCIsIlxcYmlnc3FjdXAiLCJcXHNtYWxsaW50IiwiXHUyMjBGIiwiXHUyMjEwIiwiXHUyMjExIiwiXHUyMkMwIiwiXHUyMkMxIiwiXHUyMkMyIiwiXHUyMkMzIiwiXHUyQTAwIiwiXHUyQTAxIiwiXHUyQTAyIiwiXHUyQTA0IiwiXHUyQTA2Il0scHJvcHM6e251bUFyZ3M6MH0saGFuZGxlcjpvKCh0LGUpPT57dmFye3BhcnNlcjpyLGZ1bmNOYW1lOm59PXQsaT1uO3JldHVybiBpLmxlbmd0aD09PTEmJihpPUw0ZVtpXSkse3R5cGU6Im9wIixtb2RlOnIubW9kZSxsaW1pdHM6ITAscGFyZW50SXNTdXBTdWI6ITEsc3ltYm9sOiEwLG5hbWU6aX19LCJoYW5kbGVyIiksaHRtbEJ1aWxkZXI6bTAsbWF0aG1sQnVpbGRlcjpXeX0pO050KHt0eXBlOiJvcCIsbmFtZXM6WyJcXG1hdGhvcCJdLHByb3BzOntudW1BcmdzOjEscHJpbWl0aXZlOiEwfSxoYW5kbGVyOm8oKHQsZSk9Pnt2YXJ7cGFyc2VyOnJ9PXQsbj1lWzBdO3JldHVybnt0eXBlOiJvcCIsbW9kZTpyLm1vZGUsbGltaXRzOiExLHBhcmVudElzU3VwU3ViOiExLHN5bWJvbDohMSxib2R5OmRpKG4pfX0sImhhbmRsZXIiKSxodG1sQnVpbGRlcjptMCxtYXRobWxCdWlsZGVyOld5fSk7UjRlPXsiXHUyMjJCIjoiXFxpbnQiLCJcdTIyMkMiOiJcXGlpbnQiLCJcdTIyMkQiOiJcXGlpaW50IiwiXHUyMjJFIjoiXFxvaW50IiwiXHUyMjJGIjoiXFxvaWludCIsIlx1MjIzMCI6Ilxcb2lpaW50In07TnQoe3R5cGU6Im9wIixuYW1lczpbIlxcYXJjc2luIiwiXFxhcmNjb3MiLCJcXGFyY3RhbiIsIlxcYXJjdGciLCJcXGFyY2N0ZyIsIlxcYXJnIiwiXFxjaCIsIlxcY29zIiwiXFxjb3NlYyIsIlxcY29zaCIsIlxcY290IiwiXFxjb3RnIiwiXFxjb3RoIiwiXFxjc2MiLCJcXGN0ZyIsIlxcY3RoIiwiXFxkZWciLCJcXGRpbSIsIlxcZXhwIiwiXFxob20iLCJcXGtlciIsIlxcbGciLCJcXGxuIiwiXFxsb2ciLCJcXHNlYyIsIlxcc2luIiwiXFxzaW5oIiwiXFxzaCIsIlxcdGFuIiwiXFx0YW5oIiwiXFx0ZyIsIlxcdGgiXSxwcm9wczp7bnVtQXJnczowfSxoYW5kbGVyKHQpe3ZhcntwYXJzZXI6ZSxmdW5jTmFtZTpyfT10O3JldHVybnt0eXBlOiJvcCIsbW9kZTplLm1vZGUsbGltaXRzOiExLHBhcmVudElzU3VwU3ViOiExLHN5bWJvbDohMSxuYW1lOnJ9fSxodG1sQnVpbGRlcjptMCxtYXRobWxCdWlsZGVyOld5fSk7TnQoe3R5cGU6Im9wIixuYW1lczpbIlxcZGV0IiwiXFxnY2QiLCJcXGluZiIsIlxcbGltIiwiXFxtYXgiLCJcXG1pbiIsIlxcUHIiLCJcXHN1cCJdLHByb3BzOntudW1BcmdzOjB9LGhhbmRsZXIodCl7dmFye3BhcnNlcjplLGZ1bmNOYW1lOnJ9PXQ7cmV0dXJue3R5cGU6Im9wIixtb2RlOmUubW9kZSxsaW1pdHM6ITAscGFyZW50SXNTdXBTdWI6ITEsc3ltYm9sOiExLG5hbWU6cn19LGh0bWxCdWlsZGVyOm0wLG1hdGhtbEJ1aWxkZXI6V3l9KTtOdCh7dHlwZToib3AiLG5hbWVzOlsiXFxpbnQiLCJcXGlpbnQiLCJcXGlpaW50IiwiXFxvaW50IiwiXFxvaWludCIsIlxcb2lpaW50IiwiXHUyMjJCIiwiXHUyMjJDIiwiXHUyMjJEIiwiXHUyMjJFIiwiXHUyMjJGIiwiXHUyMjMwIl0scHJvcHM6e251bUFyZ3M6MH0saGFuZGxlcih0KXt2YXJ7cGFyc2VyOmUsZnVuY05hbWU6cn09dCxuPXI7cmV0dXJuIG4ubGVuZ3RoPT09MSYmKG49UjRlW25dKSx7dHlwZToib3AiLG1vZGU6ZS5tb2RlLGxpbWl0czohMSxwYXJlbnRJc1N1cFN1YjohMSxzeW1ib2w6ITAsbmFtZTpufX0saHRtbEJ1aWxkZXI6bTAsbWF0aG1sQnVpbGRlcjpXeX0pO0VHPW8oKHQsZSk9Pnt2YXIgcixuLGk9ITEsYTt0LnR5cGU9PT0ic3Vwc3ViIj8ocj10LnN1cCxuPXQuc3ViLGE9eHIodC5iYXNlLCJvcGVyYXRvcm5hbWUiKSxpPSEwKTphPXhyKHQsIm9wZXJhdG9ybmFtZSIpO3ZhciBzO2lmKGEuYm9keS5sZW5ndGg+MCl7Zm9yKHZhciBsPWEuYm9keS5tYXAoZD0+e3ZhciBwPWQudGV4dDtyZXR1cm4gdHlwZW9mIHA9PSJzdHJpbmciP3t0eXBlOiJ0ZXh0b3JkIixtb2RlOmQubW9kZSx0ZXh0OnB9OmR9KSx1PVBpKGwsZS53aXRoRm9udCgibWF0aHJtIiksITApLGg9MDtoPHUubGVuZ3RoO2grKyl7dmFyIGY9dVtoXTtmIGluc3RhbmNlb2YgVHMmJihmLnRleHQ9Zi50ZXh0LnJlcGxhY2UoL1x1MjIxMi8sIi0iKS5yZXBsYWNlKC9cdTIyMTcvLCIqIikpfXM9QmUubWFrZVNwYW4oWyJtb3AiXSx1LGUpfWVsc2Ugcz1CZS5tYWtlU3BhbihbIm1vcCJdLFtdLGUpO3JldHVybiBpP1RHKHMscixuLGUsZS5zdHlsZSwwLDApOnN9LCJodG1sQnVpbGRlciQxIiksTjRlPW8oKHQsZSk9Pntmb3IodmFyIHI9a3ModC5ib2R5LGUud2l0aEZvbnQoIm1hdGhybSIpKSxuPSEwLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGE9cltpXTtpZighKGEgaW5zdGFuY2VvZiBkdC5TcGFjZU5vZGUpKWlmKGEgaW5zdGFuY2VvZiBkdC5NYXRoTm9kZSlzd2l0Y2goYS50eXBlKXtjYXNlIm1pIjpjYXNlIm1uIjpjYXNlIm1zIjpjYXNlIm1zcGFjZSI6Y2FzZSJtdGV4dCI6YnJlYWs7Y2FzZSJtbyI6e3ZhciBzPWEuY2hpbGRyZW5bMF07YS5jaGlsZHJlbi5sZW5ndGg9PT0xJiZzIGluc3RhbmNlb2YgZHQuVGV4dE5vZGU/cy50ZXh0PXMudGV4dC5yZXBsYWNlKC9cdTIyMTIvLCItIikucmVwbGFjZSgvXHUyMjE3LywiKiIpOm49ITE7YnJlYWt9ZGVmYXVsdDpuPSExfWVsc2Ugbj0hMX1pZihuKXt2YXIgbD1yLm1hcChmPT5mLnRvVGV4dCgpKS5qb2luKCIiKTtyPVtuZXcgZHQuVGV4dE5vZGUobCldfXZhciB1PW5ldyBkdC5NYXRoTm9kZSgibWkiLHIpO3Uuc2V0QXR0cmlidXRlKCJtYXRodmFyaWFudCIsIm5vcm1hbCIpO3ZhciBoPW5ldyBkdC5NYXRoTm9kZSgibW8iLFtDbygiXHUyMDYxIiwidGV4dCIpXSk7cmV0dXJuIHQucGFyZW50SXNTdXBTdWI/bmV3IGR0Lk1hdGhOb2RlKCJtcm93IixbdSxoXSk6ZHQubmV3RG9jdW1lbnRGcmFnbWVudChbdSxoXSl9LCJtYXRobWxCdWlsZGVyIik7TnQoe3R5cGU6Im9wZXJhdG9ybmFtZSIsbmFtZXM6WyJcXG9wZXJhdG9ybmFtZUAiLCJcXG9wZXJhdG9ybmFtZXdpdGhsaW1pdHMiXSxwcm9wczp7bnVtQXJnczoxfSxoYW5kbGVyOm8oKHQsZSk9Pnt2YXJ7cGFyc2VyOnIsZnVuY05hbWU6bn09dCxpPWVbMF07cmV0dXJue3R5cGU6Im9wZXJhdG9ybmFtZSIsbW9kZTpyLm1vZGUsYm9keTpkaShpKSxhbHdheXNIYW5kbGVTdXBTdWI6bj09PSJcXG9wZXJhdG9ybmFtZXdpdGhsaW1pdHMiLGxpbWl0czohMSxwYXJlbnRJc1N1cFN1YjohMX19LCJoYW5kbGVyIiksaHRtbEJ1aWxkZXI6RUcsbWF0aG1sQnVpbGRlcjpONGV9KTtmZSgiXFxvcGVyYXRvcm5hbWUiLCJcXEBpZnN0YXJcXG9wZXJhdG9ybmFtZXdpdGhsaW1pdHNcXG9wZXJhdG9ybmFtZUAiKTtyZCh7dHlwZToib3JkZ3JvdXAiLGh0bWxCdWlsZGVyKHQsZSl7cmV0dXJuIHQuc2VtaXNpbXBsZT9CZS5tYWtlRnJhZ21lbnQoUGkodC5ib2R5LGUsITEpKTpCZS5tYWtlU3BhbihbIm1vcmQiXSxQaSh0LmJvZHksZSwhMCksZSl9LG1hdGhtbEJ1aWxkZXIodCxlKXtyZXR1cm4gZGgodC5ib2R5LGUsITApfX0pO050KHt0eXBlOiJvdmVybGluZSIsbmFtZXM6WyJcXG92ZXJsaW5lIl0scHJvcHM6e251bUFyZ3M6MX0saGFuZGxlcih0LGUpe3ZhcntwYXJzZXI6cn09dCxuPWVbMF07cmV0dXJue3R5cGU6Im92ZXJsaW5lIixtb2RlOnIubW9kZSxib2R5Om59fSxodG1sQnVpbGRlcih0LGUpe3ZhciByPUZyKHQuYm9keSxlLmhhdmluZ0NyYW1wZWRTdHlsZSgpKSxuPUJlLm1ha2VMaW5lU3Bhbigib3ZlcmxpbmUtbGluZSIsZSksaT1lLmZvbnRNZXRyaWNzKCkuZGVmYXVsdFJ1bGVUaGlja25lc3MsYT1CZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiZmlyc3RCYXNlbGluZSIsY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOnJ9LHt0eXBlOiJrZXJuIixzaXplOjMqaX0se3R5cGU6ImVsZW0iLGVsZW06bn0se3R5cGU6Imtlcm4iLHNpemU6aX1dfSxlKTtyZXR1cm4gQmUubWFrZVNwYW4oWyJtb3JkIiwib3ZlcmxpbmUiXSxbYV0sZSl9LG1hdGhtbEJ1aWxkZXIodCxlKXt2YXIgcj1uZXcgZHQuTWF0aE5vZGUoIm1vIixbbmV3IGR0LlRleHROb2RlKCJcdTIwM0UiKV0pO3Iuc2V0QXR0cmlidXRlKCJzdHJldGNoeSIsInRydWUiKTt2YXIgbj1uZXcgZHQuTWF0aE5vZGUoIm1vdmVyIixbeW4odC5ib2R5LGUpLHJdKTtyZXR1cm4gbi5zZXRBdHRyaWJ1dGUoImFjY2VudCIsInRydWUiKSxufX0pO050KHt0eXBlOiJwaGFudG9tIixuYW1lczpbIlxccGhhbnRvbSJdLHByb3BzOntudW1BcmdzOjEsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcjpvKCh0LGUpPT57dmFye3BhcnNlcjpyfT10LG49ZVswXTtyZXR1cm57dHlwZToicGhhbnRvbSIsbW9kZTpyLm1vZGUsYm9keTpkaShuKX19LCJoYW5kbGVyIiksaHRtbEJ1aWxkZXI6bygodCxlKT0+e3ZhciByPVBpKHQuYm9keSxlLndpdGhQaGFudG9tKCksITEpO3JldHVybiBCZS5tYWtlRnJhZ21lbnQocil9LCJodG1sQnVpbGRlciIpLG1hdGhtbEJ1aWxkZXI6bygodCxlKT0+e3ZhciByPWtzKHQuYm9keSxlKTtyZXR1cm4gbmV3IGR0Lk1hdGhOb2RlKCJtcGhhbnRvbSIscil9LCJtYXRobWxCdWlsZGVyIil9KTtOdCh7dHlwZToiaHBoYW50b20iLG5hbWVzOlsiXFxocGhhbnRvbSJdLHByb3BzOntudW1BcmdzOjEsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcjpvKCh0LGUpPT57dmFye3BhcnNlcjpyfT10LG49ZVswXTtyZXR1cm57dHlwZToiaHBoYW50b20iLG1vZGU6ci5tb2RlLGJvZHk6bn19LCJoYW5kbGVyIiksaHRtbEJ1aWxkZXI6bygodCxlKT0+e3ZhciByPUJlLm1ha2VTcGFuKFtdLFtGcih0LmJvZHksZS53aXRoUGhhbnRvbSgpKV0pO2lmKHIuaGVpZ2h0PTAsci5kZXB0aD0wLHIuY2hpbGRyZW4pZm9yKHZhciBuPTA7bjxyLmNoaWxkcmVuLmxlbmd0aDtuKyspci5jaGlsZHJlbltuXS5oZWlnaHQ9MCxyLmNoaWxkcmVuW25dLmRlcHRoPTA7cmV0dXJuIHI9QmUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImZpcnN0QmFzZWxpbmUiLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTpyfV19LGUpLEJlLm1ha2VTcGFuKFsibW9yZCJdLFtyXSxlKX0sImh0bWxCdWlsZGVyIiksbWF0aG1sQnVpbGRlcjpvKCh0LGUpPT57dmFyIHI9a3MoZGkodC5ib2R5KSxlKSxuPW5ldyBkdC5NYXRoTm9kZSgibXBoYW50b20iLHIpLGk9bmV3IGR0Lk1hdGhOb2RlKCJtcGFkZGVkIixbbl0pO3JldHVybiBpLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IiwiMHB4IiksaS5zZXRBdHRyaWJ1dGUoImRlcHRoIiwiMHB4IiksaX0sIm1hdGhtbEJ1aWxkZXIiKX0pO050KHt0eXBlOiJ2cGhhbnRvbSIsbmFtZXM6WyJcXHZwaGFudG9tIl0scHJvcHM6e251bUFyZ3M6MSxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyOm8oKHQsZSk9Pnt2YXJ7cGFyc2VyOnJ9PXQsbj1lWzBdO3JldHVybnt0eXBlOiJ2cGhhbnRvbSIsbW9kZTpyLm1vZGUsYm9keTpufX0sImhhbmRsZXIiKSxodG1sQnVpbGRlcjpvKCh0LGUpPT57dmFyIHI9QmUubWFrZVNwYW4oWyJpbm5lciJdLFtGcih0LmJvZHksZS53aXRoUGhhbnRvbSgpKV0pLG49QmUubWFrZVNwYW4oWyJmaXgiXSxbXSk7cmV0dXJuIEJlLm1ha2VTcGFuKFsibW9yZCIsInJsYXAiXSxbcixuXSxlKX0sImh0bWxCdWlsZGVyIiksbWF0aG1sQnVpbGRlcjpvKCh0LGUpPT57dmFyIHI9a3MoZGkodC5ib2R5KSxlKSxuPW5ldyBkdC5NYXRoTm9kZSgibXBoYW50b20iLHIpLGk9bmV3IGR0Lk1hdGhOb2RlKCJtcGFkZGVkIixbbl0pO3JldHVybiBpLnNldEF0dHJpYnV0ZSgid2lkdGgiLCIwcHgiKSxpfSwibWF0aG1sQnVpbGRlciIpfSk7TnQoe3R5cGU6InJhaXNlYm94IixuYW1lczpbIlxccmFpc2Vib3giXSxwcm9wczp7bnVtQXJnczoyLGFyZ1R5cGVzOlsic2l6ZSIsImhib3giXSxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyKHQsZSl7dmFye3BhcnNlcjpyfT10LG49eHIoZVswXSwic2l6ZSIpLnZhbHVlLGk9ZVsxXTtyZXR1cm57dHlwZToicmFpc2Vib3giLG1vZGU6ci5tb2RlLGR5Om4sYm9keTppfX0saHRtbEJ1aWxkZXIodCxlKXt2YXIgcj1Gcih0LmJvZHksZSksbj10aSh0LmR5LGUpO3JldHVybiBCZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToic2hpZnQiLHBvc2l0aW9uRGF0YTotbixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06cn1dfSxlKX0sbWF0aG1sQnVpbGRlcih0LGUpe3ZhciByPW5ldyBkdC5NYXRoTm9kZSgibXBhZGRlZCIsW3luKHQuYm9keSxlKV0pLG49dC5keS5udW1iZXIrdC5keS51bml0O3JldHVybiByLnNldEF0dHJpYnV0ZSgidm9mZnNldCIsbikscn19KTtOdCh7dHlwZToiaW50ZXJuYWwiLG5hbWVzOlsiXFxyZWxheCJdLHByb3BzOntudW1BcmdzOjAsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcih0KXt2YXJ7cGFyc2VyOmV9PXQ7cmV0dXJue3R5cGU6ImludGVybmFsIixtb2RlOmUubW9kZX19fSk7TnQoe3R5cGU6InJ1bGUiLG5hbWVzOlsiXFxydWxlIl0scHJvcHM6e251bUFyZ3M6MixudW1PcHRpb25hbEFyZ3M6MSxhcmdUeXBlczpbInNpemUiLCJzaXplIiwic2l6ZSJdfSxoYW5kbGVyKHQsZSxyKXt2YXJ7cGFyc2VyOm59PXQsaT1yWzBdLGE9eHIoZVswXSwic2l6ZSIpLHM9eHIoZVsxXSwic2l6ZSIpO3JldHVybnt0eXBlOiJydWxlIixtb2RlOm4ubW9kZSxzaGlmdDppJiZ4cihpLCJzaXplIikudmFsdWUsd2lkdGg6YS52YWx1ZSxoZWlnaHQ6cy52YWx1ZX19LGh0bWxCdWlsZGVyKHQsZSl7dmFyIHI9QmUubWFrZVNwYW4oWyJtb3JkIiwicnVsZSJdLFtdLGUpLG49dGkodC53aWR0aCxlKSxpPXRpKHQuaGVpZ2h0LGUpLGE9dC5zaGlmdD90aSh0LnNoaWZ0LGUpOjA7cmV0dXJuIHIuc3R5bGUuYm9yZGVyUmlnaHRXaWR0aD1rdChuKSxyLnN0eWxlLmJvcmRlclRvcFdpZHRoPWt0KGkpLHIuc3R5bGUuYm90dG9tPWt0KGEpLHIud2lkdGg9bixyLmhlaWdodD1pK2Esci5kZXB0aD0tYSxyLm1heEZvbnRTaXplPWkqMS4xMjUqZS5zaXplTXVsdGlwbGllcixyfSxtYXRobWxCdWlsZGVyKHQsZSl7dmFyIHI9dGkodC53aWR0aCxlKSxuPXRpKHQuaGVpZ2h0LGUpLGk9dC5zaGlmdD90aSh0LnNoaWZ0LGUpOjAsYT1lLmNvbG9yJiZlLmdldENvbG9yKCl8fCJibGFjayIscz1uZXcgZHQuTWF0aE5vZGUoIm1zcGFjZSIpO3Muc2V0QXR0cmlidXRlKCJtYXRoYmFja2dyb3VuZCIsYSkscy5zZXRBdHRyaWJ1dGUoIndpZHRoIixrdChyKSkscy5zZXRBdHRyaWJ1dGUoImhlaWdodCIsa3QobikpO3ZhciBsPW5ldyBkdC5NYXRoTm9kZSgibXBhZGRlZCIsW3NdKTtyZXR1cm4gaT49MD9sLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IixrdChpKSk6KGwuc2V0QXR0cmlidXRlKCJoZWlnaHQiLGt0KGkpKSxsLnNldEF0dHJpYnV0ZSgiZGVwdGgiLGt0KC1pKSkpLGwuc2V0QXR0cmlidXRlKCJ2b2Zmc2V0IixrdChpKSksbH19KTtvKFNHLCJzaXppbmdHcm91cCIpO0F6PVsiXFx0aW55IiwiXFxzaXhwdHNpemUiLCJcXHNjcmlwdHNpemUiLCJcXGZvb3Rub3Rlc2l6ZSIsIlxcc21hbGwiLCJcXG5vcm1hbHNpemUiLCJcXGxhcmdlIiwiXFxMYXJnZSIsIlxcTEFSR0UiLCJcXGh1Z2UiLCJcXEh1Z2UiXSxNNGU9bygodCxlKT0+e3ZhciByPWUuaGF2aW5nU2l6ZSh0LnNpemUpO3JldHVybiBTRyh0LmJvZHkscixlKX0sImh0bWxCdWlsZGVyIik7TnQoe3R5cGU6InNpemluZyIsbmFtZXM6QXoscHJvcHM6e251bUFyZ3M6MCxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyOm8oKHQsZSk9Pnt2YXJ7YnJlYWtPblRva2VuVGV4dDpyLGZ1bmNOYW1lOm4scGFyc2VyOml9PXQsYT1pLnBhcnNlRXhwcmVzc2lvbighMSxyKTtyZXR1cm57dHlwZToic2l6aW5nIixtb2RlOmkubW9kZSxzaXplOkF6LmluZGV4T2YobikrMSxib2R5OmF9fSwiaGFuZGxlciIpLGh0bWxCdWlsZGVyOk00ZSxtYXRobWxCdWlsZGVyOm8oKHQsZSk9Pnt2YXIgcj1lLmhhdmluZ1NpemUodC5zaXplKSxuPWtzKHQuYm9keSxyKSxpPW5ldyBkdC5NYXRoTm9kZSgibXN0eWxlIixuKTtyZXR1cm4gaS5zZXRBdHRyaWJ1dGUoIm1hdGhzaXplIixrdChyLnNpemVNdWx0aXBsaWVyKSksaX0sIm1hdGhtbEJ1aWxkZXIiKX0pO050KHt0eXBlOiJzbWFzaCIsbmFtZXM6WyJcXHNtYXNoIl0scHJvcHM6e251bUFyZ3M6MSxudW1PcHRpb25hbEFyZ3M6MSxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyOm8oKHQsZSxyKT0+e3ZhcntwYXJzZXI6bn09dCxpPSExLGE9ITEscz1yWzBdJiZ4cihyWzBdLCJvcmRncm91cCIpO2lmKHMpZm9yKHZhciBsPSIiLHU9MDt1PHMuYm9keS5sZW5ndGg7Kyt1KXt2YXIgaD1zLmJvZHlbdV07aWYobD1oLnRleHQsbD09PSJ0IilpPSEwO2Vsc2UgaWYobD09PSJiIilhPSEwO2Vsc2V7aT0hMSxhPSExO2JyZWFrfX1lbHNlIGk9ITAsYT0hMDt2YXIgZj1lWzBdO3JldHVybnt0eXBlOiJzbWFzaCIsbW9kZTpuLm1vZGUsYm9keTpmLHNtYXNoSGVpZ2h0Omksc21hc2hEZXB0aDphfX0sImhhbmRsZXIiKSxodG1sQnVpbGRlcjpvKCh0LGUpPT57dmFyIHI9QmUubWFrZVNwYW4oW10sW0ZyKHQuYm9keSxlKV0pO2lmKCF0LnNtYXNoSGVpZ2h0JiYhdC5zbWFzaERlcHRoKXJldHVybiByO2lmKHQuc21hc2hIZWlnaHQmJihyLmhlaWdodD0wLHIuY2hpbGRyZW4pKWZvcih2YXIgbj0wO248ci5jaGlsZHJlbi5sZW5ndGg7bisrKXIuY2hpbGRyZW5bbl0uaGVpZ2h0PTA7aWYodC5zbWFzaERlcHRoJiYoci5kZXB0aD0wLHIuY2hpbGRyZW4pKWZvcih2YXIgaT0wO2k8ci5jaGlsZHJlbi5sZW5ndGg7aSsrKXIuY2hpbGRyZW5baV0uZGVwdGg9MDt2YXIgYT1CZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiZmlyc3RCYXNlbGluZSIsY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOnJ9XX0sZSk7cmV0dXJuIEJlLm1ha2VTcGFuKFsibW9yZCJdLFthXSxlKX0sImh0bWxCdWlsZGVyIiksbWF0aG1sQnVpbGRlcjpvKCh0LGUpPT57dmFyIHI9bmV3IGR0Lk1hdGhOb2RlKCJtcGFkZGVkIixbeW4odC5ib2R5LGUpXSk7cmV0dXJuIHQuc21hc2hIZWlnaHQmJnIuc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIwcHgiKSx0LnNtYXNoRGVwdGgmJnIuc2V0QXR0cmlidXRlKCJkZXB0aCIsIjBweCIpLHJ9LCJtYXRobWxCdWlsZGVyIil9KTtOdCh7dHlwZToic3FydCIsbmFtZXM6WyJcXHNxcnQiXSxwcm9wczp7bnVtQXJnczoxLG51bU9wdGlvbmFsQXJnczoxfSxoYW5kbGVyKHQsZSxyKXt2YXJ7cGFyc2VyOm59PXQsaT1yWzBdLGE9ZVswXTtyZXR1cm57dHlwZToic3FydCIsbW9kZTpuLm1vZGUsYm9keTphLGluZGV4Oml9fSxodG1sQnVpbGRlcih0LGUpe3ZhciByPUZyKHQuYm9keSxlLmhhdmluZ0NyYW1wZWRTdHlsZSgpKTtyLmhlaWdodD09PTAmJihyLmhlaWdodD1lLmZvbnRNZXRyaWNzKCkueEhlaWdodCkscj1CZS53cmFwRnJhZ21lbnQocixlKTt2YXIgbj1lLmZvbnRNZXRyaWNzKCksaT1uLmRlZmF1bHRSdWxlVGhpY2tuZXNzLGE9aTtlLnN0eWxlLmlkPHRyLlRFWFQuaWQmJihhPWUuZm9udE1ldHJpY3MoKS54SGVpZ2h0KTt2YXIgcz1pK2EvNCxsPXIuaGVpZ2h0K3IuZGVwdGgrcytpLHtzcGFuOnUscnVsZVdpZHRoOmgsYWR2YW5jZVdpZHRoOmZ9PW91LnNxcnRJbWFnZShsLGUpLGQ9dS5oZWlnaHQtaDtkPnIuaGVpZ2h0K3IuZGVwdGgrcyYmKHM9KHMrZC1yLmhlaWdodC1yLmRlcHRoKS8yKTt2YXIgcD11LmhlaWdodC1yLmhlaWdodC1zLWg7ci5zdHlsZS5wYWRkaW5nTGVmdD1rdChmKTt2YXIgbT1CZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiZmlyc3RCYXNlbGluZSIsY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOnIsd3JhcHBlckNsYXNzZXM6WyJzdmctYWxpZ24iXX0se3R5cGU6Imtlcm4iLHNpemU6LShyLmhlaWdodCtwKX0se3R5cGU6ImVsZW0iLGVsZW06dX0se3R5cGU6Imtlcm4iLHNpemU6aH1dfSxlKTtpZih0LmluZGV4KXt2YXIgZz1lLmhhdmluZ1N0eWxlKHRyLlNDUklQVFNDUklQVCkseT1Gcih0LmluZGV4LGcsZSksdj0uNioobS5oZWlnaHQtbS5kZXB0aCkseD1CZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToic2hpZnQiLHBvc2l0aW9uRGF0YTotdixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06eX1dfSxlKSxiPUJlLm1ha2VTcGFuKFsicm9vdCJdLFt4XSk7cmV0dXJuIEJlLm1ha2VTcGFuKFsibW9yZCIsInNxcnQiXSxbYixtXSxlKX1lbHNlIHJldHVybiBCZS5tYWtlU3BhbihbIm1vcmQiLCJzcXJ0Il0sW21dLGUpfSxtYXRobWxCdWlsZGVyKHQsZSl7dmFye2JvZHk6cixpbmRleDpufT10O3JldHVybiBuP25ldyBkdC5NYXRoTm9kZSgibXJvb3QiLFt5bihyLGUpLHluKG4sZSldKTpuZXcgZHQuTWF0aE5vZGUoIm1zcXJ0IixbeW4ocixlKV0pfX0pO196PXtkaXNwbGF5OnRyLkRJU1BMQVksdGV4dDp0ci5URVhULHNjcmlwdDp0ci5TQ1JJUFQsc2NyaXB0c2NyaXB0OnRyLlNDUklQVFNDUklQVH07TnQoe3R5cGU6InN0eWxpbmciLG5hbWVzOlsiXFxkaXNwbGF5c3R5bGUiLCJcXHRleHRzdHlsZSIsIlxcc2NyaXB0c3R5bGUiLCJcXHNjcmlwdHNjcmlwdHN0eWxlIl0scHJvcHM6e251bUFyZ3M6MCxhbGxvd2VkSW5UZXh0OiEwLHByaW1pdGl2ZTohMH0saGFuZGxlcih0LGUpe3ZhcnticmVha09uVG9rZW5UZXh0OnIsZnVuY05hbWU6bixwYXJzZXI6aX09dCxhPWkucGFyc2VFeHByZXNzaW9uKCEwLHIpLHM9bi5zbGljZSgxLG4ubGVuZ3RoLTUpO3JldHVybnt0eXBlOiJzdHlsaW5nIixtb2RlOmkubW9kZSxzdHlsZTpzLGJvZHk6YX19LGh0bWxCdWlsZGVyKHQsZSl7dmFyIHI9X3pbdC5zdHlsZV0sbj1lLmhhdmluZ1N0eWxlKHIpLndpdGhGb250KCIiKTtyZXR1cm4gU0codC5ib2R5LG4sZSl9LG1hdGhtbEJ1aWxkZXIodCxlKXt2YXIgcj1felt0LnN0eWxlXSxuPWUuaGF2aW5nU3R5bGUociksaT1rcyh0LmJvZHksbiksYT1uZXcgZHQuTWF0aE5vZGUoIm1zdHlsZSIsaSkscz17ZGlzcGxheTpbIjAiLCJ0cnVlIl0sdGV4dDpbIjAiLCJmYWxzZSJdLHNjcmlwdDpbIjEiLCJmYWxzZSJdLHNjcmlwdHNjcmlwdDpbIjIiLCJmYWxzZSJdfSxsPXNbdC5zdHlsZV07cmV0dXJuIGEuc2V0QXR0cmlidXRlKCJzY3JpcHRsZXZlbCIsbFswXSksYS5zZXRBdHRyaWJ1dGUoImRpc3BsYXlzdHlsZSIsbFsxXSksYX19KTtJNGU9byhmdW5jdGlvbihlLHIpe3ZhciBuPWUuYmFzZTtpZihuKWlmKG4udHlwZT09PSJvcCIpe3ZhciBpPW4ubGltaXRzJiYoci5zdHlsZS5zaXplPT09dHIuRElTUExBWS5zaXplfHxuLmFsd2F5c0hhbmRsZVN1cFN1Yik7cmV0dXJuIGk/bTA6bnVsbH1lbHNlIGlmKG4udHlwZT09PSJvcGVyYXRvcm5hbWUiKXt2YXIgYT1uLmFsd2F5c0hhbmRsZVN1cFN1YiYmKHIuc3R5bGUuc2l6ZT09PXRyLkRJU1BMQVkuc2l6ZXx8bi5saW1pdHMpO3JldHVybiBhP0VHOm51bGx9ZWxzZXtpZihuLnR5cGU9PT0iYWNjZW50IilyZXR1cm4gSnQuaXNDaGFyYWN0ZXJCb3gobi5iYXNlKT9HNzpudWxsO2lmKG4udHlwZT09PSJob3JpekJyYWNlIil7dmFyIHM9IWUuc3ViO3JldHVybiBzPT09bi5pc092ZXI/d0c6bnVsbH1lbHNlIHJldHVybiBudWxsfWVsc2UgcmV0dXJuIG51bGx9LCJodG1sQnVpbGRlckRlbGVnYXRlIik7cmQoe3R5cGU6InN1cHN1YiIsaHRtbEJ1aWxkZXIodCxlKXt2YXIgcj1JNGUodCxlKTtpZihyKXJldHVybiByKHQsZSk7dmFye2Jhc2U6bixzdXA6aSxzdWI6YX09dCxzPUZyKG4sZSksbCx1LGg9ZS5mb250TWV0cmljcygpLGY9MCxkPTAscD1uJiZKdC5pc0NoYXJhY3RlckJveChuKTtpZihpKXt2YXIgbT1lLmhhdmluZ1N0eWxlKGUuc3R5bGUuc3VwKCkpO2w9RnIoaSxtLGUpLHB8fChmPXMuaGVpZ2h0LW0uZm9udE1ldHJpY3MoKS5zdXBEcm9wKm0uc2l6ZU11bHRpcGxpZXIvZS5zaXplTXVsdGlwbGllcil9aWYoYSl7dmFyIGc9ZS5oYXZpbmdTdHlsZShlLnN0eWxlLnN1YigpKTt1PUZyKGEsZyxlKSxwfHwoZD1zLmRlcHRoK2cuZm9udE1ldHJpY3MoKS5zdWJEcm9wKmcuc2l6ZU11bHRpcGxpZXIvZS5zaXplTXVsdGlwbGllcil9dmFyIHk7ZS5zdHlsZT09PXRyLkRJU1BMQVk/eT1oLnN1cDE6ZS5zdHlsZS5jcmFtcGVkP3k9aC5zdXAzOnk9aC5zdXAyO3ZhciB2PWUuc2l6ZU11bHRpcGxpZXIseD1rdCguNS9oLnB0UGVyRW0vdiksYj1udWxsO2lmKHUpe3ZhciB3PXQuYmFzZSYmdC5iYXNlLnR5cGU9PT0ib3AiJiZ0LmJhc2UubmFtZSYmKHQuYmFzZS5uYW1lPT09Ilxcb2lpbnQifHx0LmJhc2UubmFtZT09PSJcXG9paWludCIpOyhzIGluc3RhbmNlb2YgVHN8fHcpJiYoYj1rdCgtcy5pdGFsaWMpKX12YXIgQztpZihsJiZ1KXtmPU1hdGgubWF4KGYseSxsLmRlcHRoKy4yNSpoLnhIZWlnaHQpLGQ9TWF0aC5tYXgoZCxoLnN1YjIpO3ZhciBUPWguZGVmYXVsdFJ1bGVUaGlja25lc3MsRT00KlQ7aWYoZi1sLmRlcHRoLSh1LmhlaWdodC1kKTxFKXtkPUUtKGYtbC5kZXB0aCkrdS5oZWlnaHQ7dmFyIEE9LjgqaC54SGVpZ2h0LShmLWwuZGVwdGgpO0E+MCYmKGYrPUEsZC09QSl9dmFyIFM9W3t0eXBlOiJlbGVtIixlbGVtOnUsc2hpZnQ6ZCxtYXJnaW5SaWdodDp4LG1hcmdpbkxlZnQ6Yn0se3R5cGU6ImVsZW0iLGVsZW06bCxzaGlmdDotZixtYXJnaW5SaWdodDp4fV07Qz1CZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiaW5kaXZpZHVhbFNoaWZ0IixjaGlsZHJlbjpTfSxlKX1lbHNlIGlmKHUpe2Q9TWF0aC5tYXgoZCxoLnN1YjEsdS5oZWlnaHQtLjgqaC54SGVpZ2h0KTt2YXIgXz1be3R5cGU6ImVsZW0iLGVsZW06dSxtYXJnaW5MZWZ0OmIsbWFyZ2luUmlnaHQ6eH1dO0M9QmUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6InNoaWZ0Iixwb3NpdGlvbkRhdGE6ZCxjaGlsZHJlbjpffSxlKX1lbHNlIGlmKGwpZj1NYXRoLm1heChmLHksbC5kZXB0aCsuMjUqaC54SGVpZ2h0KSxDPUJlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJzaGlmdCIscG9zaXRpb25EYXRhOi1mLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTpsLG1hcmdpblJpZ2h0Onh9XX0sZSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoInN1cHN1YiBtdXN0IGhhdmUgZWl0aGVyIHN1cCBvciBzdWIuIik7dmFyIEk9QTcocywicmlnaHQiKXx8Im1vcmQiO3JldHVybiBCZS5tYWtlU3BhbihbSV0sW3MsQmUubWFrZVNwYW4oWyJtc3Vwc3ViIl0sW0NdKV0sZSl9LG1hdGhtbEJ1aWxkZXIodCxlKXt2YXIgcj0hMSxuLGk7dC5iYXNlJiZ0LmJhc2UudHlwZT09PSJob3JpekJyYWNlIiYmKGk9ISF0LnN1cCxpPT09dC5iYXNlLmlzT3ZlciYmKHI9ITAsbj10LmJhc2UuaXNPdmVyKSksdC5iYXNlJiYodC5iYXNlLnR5cGU9PT0ib3AifHx0LmJhc2UudHlwZT09PSJvcGVyYXRvcm5hbWUiKSYmKHQuYmFzZS5wYXJlbnRJc1N1cFN1Yj0hMCk7dmFyIGE9W3luKHQuYmFzZSxlKV07dC5zdWImJmEucHVzaCh5bih0LnN1YixlKSksdC5zdXAmJmEucHVzaCh5bih0LnN1cCxlKSk7dmFyIHM7aWYocilzPW4/Im1vdmVyIjoibXVuZGVyIjtlbHNlIGlmKHQuc3ViKWlmKHQuc3VwKXt2YXIgaD10LmJhc2U7aCYmaC50eXBlPT09Im9wIiYmaC5saW1pdHMmJmUuc3R5bGU9PT10ci5ESVNQTEFZfHxoJiZoLnR5cGU9PT0ib3BlcmF0b3JuYW1lIiYmaC5hbHdheXNIYW5kbGVTdXBTdWImJihlLnN0eWxlPT09dHIuRElTUExBWXx8aC5saW1pdHMpP3M9Im11bmRlcm92ZXIiOnM9Im1zdWJzdXAifWVsc2V7dmFyIHU9dC5iYXNlO3UmJnUudHlwZT09PSJvcCImJnUubGltaXRzJiYoZS5zdHlsZT09PXRyLkRJU1BMQVl8fHUuYWx3YXlzSGFuZGxlU3VwU3ViKXx8dSYmdS50eXBlPT09Im9wZXJhdG9ybmFtZSImJnUuYWx3YXlzSGFuZGxlU3VwU3ViJiYodS5saW1pdHN8fGUuc3R5bGU9PT10ci5ESVNQTEFZKT9zPSJtdW5kZXIiOnM9Im1zdWIifWVsc2V7dmFyIGw9dC5iYXNlO2wmJmwudHlwZT09PSJvcCImJmwubGltaXRzJiYoZS5zdHlsZT09PXRyLkRJU1BMQVl8fGwuYWx3YXlzSGFuZGxlU3VwU3ViKXx8bCYmbC50eXBlPT09Im9wZXJhdG9ybmFtZSImJmwuYWx3YXlzSGFuZGxlU3VwU3ViJiYobC5saW1pdHN8fGUuc3R5bGU9PT10ci5ESVNQTEFZKT9zPSJtb3ZlciI6cz0ibXN1cCJ9cmV0dXJuIG5ldyBkdC5NYXRoTm9kZShzLGEpfX0pO3JkKHt0eXBlOiJhdG9tIixodG1sQnVpbGRlcih0LGUpe3JldHVybiBCZS5tYXRoc3ltKHQudGV4dCx0Lm1vZGUsZSxbIm0iK3QuZmFtaWx5XSl9LG1hdGhtbEJ1aWxkZXIodCxlKXt2YXIgcj1uZXcgZHQuTWF0aE5vZGUoIm1vIixbQ28odC50ZXh0LHQubW9kZSldKTtpZih0LmZhbWlseT09PSJiaW4iKXt2YXIgbj0kNyh0LGUpO249PT0iYm9sZC1pdGFsaWMiJiZyLnNldEF0dHJpYnV0ZSgibWF0aHZhcmlhbnQiLG4pfWVsc2UgdC5mYW1pbHk9PT0icHVuY3QiP3Iuc2V0QXR0cmlidXRlKCJzZXBhcmF0b3IiLCJ0cnVlIik6KHQuZmFtaWx5PT09Im9wZW4ifHx0LmZhbWlseT09PSJjbG9zZSIpJiZyLnNldEF0dHJpYnV0ZSgic3RyZXRjaHkiLCJmYWxzZSIpO3JldHVybiByfX0pO0NHPXttaToiaXRhbGljIixtbjoibm9ybWFsIixtdGV4dDoibm9ybWFsIn07cmQoe3R5cGU6Im1hdGhvcmQiLGh0bWxCdWlsZGVyKHQsZSl7cmV0dXJuIEJlLm1ha2VPcmQodCxlLCJtYXRob3JkIil9LG1hdGhtbEJ1aWxkZXIodCxlKXt2YXIgcj1uZXcgZHQuTWF0aE5vZGUoIm1pIixbQ28odC50ZXh0LHQubW9kZSxlKV0pLG49JDcodCxlKXx8Iml0YWxpYyI7cmV0dXJuIG4hPT1DR1tyLnR5cGVdJiZyLnNldEF0dHJpYnV0ZSgibWF0aHZhcmlhbnQiLG4pLHJ9fSk7cmQoe3R5cGU6InRleHRvcmQiLGh0bWxCdWlsZGVyKHQsZSl7cmV0dXJuIEJlLm1ha2VPcmQodCxlLCJ0ZXh0b3JkIil9LG1hdGhtbEJ1aWxkZXIodCxlKXt2YXIgcj1Dbyh0LnRleHQsdC5tb2RlLGUpLG49JDcodCxlKXx8Im5vcm1hbCIsaTtyZXR1cm4gdC5tb2RlPT09InRleHQiP2k9bmV3IGR0Lk1hdGhOb2RlKCJtdGV4dCIsW3JdKTovWzAtOV0vLnRlc3QodC50ZXh0KT9pPW5ldyBkdC5NYXRoTm9kZSgibW4iLFtyXSk6dC50ZXh0PT09IlxccHJpbWUiP2k9bmV3IGR0Lk1hdGhOb2RlKCJtbyIsW3JdKTppPW5ldyBkdC5NYXRoTm9kZSgibWkiLFtyXSksbiE9PUNHW2kudHlwZV0mJmkuc2V0QXR0cmlidXRlKCJtYXRodmFyaWFudCIsbiksaX19KTtiNz17Ilxcbm9icmVhayI6Im5vYnJlYWsiLCJcXGFsbG93YnJlYWsiOiJhbGxvd2JyZWFrIn0sdzc9eyIgIjp7fSwiXFwgIjp7fSwifiI6e2NsYXNzTmFtZToibm9icmVhayJ9LCJcXHNwYWNlIjp7fSwiXFxub2JyZWFrc3BhY2UiOntjbGFzc05hbWU6Im5vYnJlYWsifX07cmQoe3R5cGU6InNwYWNpbmciLGh0bWxCdWlsZGVyKHQsZSl7aWYodzcuaGFzT3duUHJvcGVydHkodC50ZXh0KSl7dmFyIHI9dzdbdC50ZXh0XS5jbGFzc05hbWV8fCIiO2lmKHQubW9kZT09PSJ0ZXh0Iil7dmFyIG49QmUubWFrZU9yZCh0LGUsInRleHRvcmQiKTtyZXR1cm4gbi5jbGFzc2VzLnB1c2gociksbn1lbHNlIHJldHVybiBCZS5tYWtlU3BhbihbIm1zcGFjZSIscl0sW0JlLm1hdGhzeW0odC50ZXh0LHQubW9kZSxlKV0sZSl9ZWxzZXtpZihiNy5oYXNPd25Qcm9wZXJ0eSh0LnRleHQpKXJldHVybiBCZS5tYWtlU3BhbihbIm1zcGFjZSIsYjdbdC50ZXh0XV0sW10sZSk7dGhyb3cgbmV3IGd0KCdVbmtub3duIHR5cGUgb2Ygc3BhY2UgIicrdC50ZXh0KyciJyl9fSxtYXRobWxCdWlsZGVyKHQsZSl7dmFyIHI7aWYodzcuaGFzT3duUHJvcGVydHkodC50ZXh0KSlyPW5ldyBkdC5NYXRoTm9kZSgibXRleHQiLFtuZXcgZHQuVGV4dE5vZGUoIlx4QTAiKV0pO2Vsc2V7aWYoYjcuaGFzT3duUHJvcGVydHkodC50ZXh0KSlyZXR1cm4gbmV3IGR0Lk1hdGhOb2RlKCJtc3BhY2UiKTt0aHJvdyBuZXcgZ3QoJ1Vua25vd24gdHlwZSBvZiBzcGFjZSAiJyt0LnRleHQrJyInKX1yZXR1cm4gcn19KTtEej1vKCgpPT57dmFyIHQ9bmV3IGR0Lk1hdGhOb2RlKCJtdGQiLFtdKTtyZXR1cm4gdC5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiNTAlIiksdH0sInBhZCIpO3JkKHt0eXBlOiJ0YWciLG1hdGhtbEJ1aWxkZXIodCxlKXt2YXIgcj1uZXcgZHQuTWF0aE5vZGUoIm10YWJsZSIsW25ldyBkdC5NYXRoTm9kZSgibXRyIixbRHooKSxuZXcgZHQuTWF0aE5vZGUoIm10ZCIsW2RoKHQuYm9keSxlKV0pLER6KCksbmV3IGR0Lk1hdGhOb2RlKCJtdGQiLFtkaCh0LnRhZyxlKV0pXSldKTtyZXR1cm4gci5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiMTAwJSIpLHJ9fSk7THo9eyJcXHRleHQiOnZvaWQgMCwiXFx0ZXh0cm0iOiJ0ZXh0cm0iLCJcXHRleHRzZiI6InRleHRzZiIsIlxcdGV4dHR0IjoidGV4dHR0IiwiXFx0ZXh0bm9ybWFsIjoidGV4dHJtIn0sUno9eyJcXHRleHRiZiI6InRleHRiZiIsIlxcdGV4dG1kIjoidGV4dG1kIn0sTzRlPXsiXFx0ZXh0aXQiOiJ0ZXh0aXQiLCJcXHRleHR1cCI6InRleHR1cCJ9LE56PW8oKHQsZSk9Pnt2YXIgcj10LmZvbnQ7aWYocil7aWYoTHpbcl0pcmV0dXJuIGUud2l0aFRleHRGb250RmFtaWx5KEx6W3JdKTtpZihSeltyXSlyZXR1cm4gZS53aXRoVGV4dEZvbnRXZWlnaHQoUnpbcl0pO2lmKHI9PT0iXFxlbXBoIilyZXR1cm4gZS5mb250U2hhcGU9PT0idGV4dGl0Ij9lLndpdGhUZXh0Rm9udFNoYXBlKCJ0ZXh0dXAiKTplLndpdGhUZXh0Rm9udFNoYXBlKCJ0ZXh0aXQiKX1lbHNlIHJldHVybiBlO3JldHVybiBlLndpdGhUZXh0Rm9udFNoYXBlKE80ZVtyXSl9LCJvcHRpb25zV2l0aEZvbnQiKTtOdCh7dHlwZToidGV4dCIsbmFtZXM6WyJcXHRleHQiLCJcXHRleHRybSIsIlxcdGV4dHNmIiwiXFx0ZXh0dHQiLCJcXHRleHRub3JtYWwiLCJcXHRleHRiZiIsIlxcdGV4dG1kIiwiXFx0ZXh0aXQiLCJcXHRleHR1cCIsIlxcZW1waCJdLHByb3BzOntudW1BcmdzOjEsYXJnVHlwZXM6WyJ0ZXh0Il0sYWxsb3dlZEluQXJndW1lbnQ6ITAsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcih0LGUpe3ZhcntwYXJzZXI6cixmdW5jTmFtZTpufT10LGk9ZVswXTtyZXR1cm57dHlwZToidGV4dCIsbW9kZTpyLm1vZGUsYm9keTpkaShpKSxmb250Om59fSxodG1sQnVpbGRlcih0LGUpe3ZhciByPU56KHQsZSksbj1QaSh0LmJvZHksciwhMCk7cmV0dXJuIEJlLm1ha2VTcGFuKFsibW9yZCIsInRleHQiXSxuLHIpfSxtYXRobWxCdWlsZGVyKHQsZSl7dmFyIHI9TnoodCxlKTtyZXR1cm4gZGgodC5ib2R5LHIpfX0pO050KHt0eXBlOiJ1bmRlcmxpbmUiLG5hbWVzOlsiXFx1bmRlcmxpbmUiXSxwcm9wczp7bnVtQXJnczoxLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXIodCxlKXt2YXJ7cGFyc2VyOnJ9PXQ7cmV0dXJue3R5cGU6InVuZGVybGluZSIsbW9kZTpyLm1vZGUsYm9keTplWzBdfX0saHRtbEJ1aWxkZXIodCxlKXt2YXIgcj1Gcih0LmJvZHksZSksbj1CZS5tYWtlTGluZVNwYW4oInVuZGVybGluZS1saW5lIixlKSxpPWUuZm9udE1ldHJpY3MoKS5kZWZhdWx0UnVsZVRoaWNrbmVzcyxhPUJlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJ0b3AiLHBvc2l0aW9uRGF0YTpyLmhlaWdodCxjaGlsZHJlbjpbe3R5cGU6Imtlcm4iLHNpemU6aX0se3R5cGU6ImVsZW0iLGVsZW06bn0se3R5cGU6Imtlcm4iLHNpemU6MyppfSx7dHlwZToiZWxlbSIsZWxlbTpyfV19LGUpO3JldHVybiBCZS5tYWtlU3BhbihbIm1vcmQiLCJ1bmRlcmxpbmUiXSxbYV0sZSl9LG1hdGhtbEJ1aWxkZXIodCxlKXt2YXIgcj1uZXcgZHQuTWF0aE5vZGUoIm1vIixbbmV3IGR0LlRleHROb2RlKCJcdTIwM0UiKV0pO3Iuc2V0QXR0cmlidXRlKCJzdHJldGNoeSIsInRydWUiKTt2YXIgbj1uZXcgZHQuTWF0aE5vZGUoIm11bmRlciIsW3luKHQuYm9keSxlKSxyXSk7cmV0dXJuIG4uc2V0QXR0cmlidXRlKCJhY2NlbnR1bmRlciIsInRydWUiKSxufX0pO050KHt0eXBlOiJ2Y2VudGVyIixuYW1lczpbIlxcdmNlbnRlciJdLHByb3BzOntudW1BcmdzOjEsYXJnVHlwZXM6WyJvcmlnaW5hbCJdLGFsbG93ZWRJblRleHQ6ITF9LGhhbmRsZXIodCxlKXt2YXJ7cGFyc2VyOnJ9PXQ7cmV0dXJue3R5cGU6InZjZW50ZXIiLG1vZGU6ci5tb2RlLGJvZHk6ZVswXX19LGh0bWxCdWlsZGVyKHQsZSl7dmFyIHI9RnIodC5ib2R5LGUpLG49ZS5mb250TWV0cmljcygpLmF4aXNIZWlnaHQsaT0uNSooci5oZWlnaHQtbi0oci5kZXB0aCtuKSk7cmV0dXJuIEJlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJzaGlmdCIscG9zaXRpb25EYXRhOmksY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOnJ9XX0sZSl9LG1hdGhtbEJ1aWxkZXIodCxlKXtyZXR1cm4gbmV3IGR0Lk1hdGhOb2RlKCJtcGFkZGVkIixbeW4odC5ib2R5LGUpXSxbInZjZW50ZXIiXSl9fSk7TnQoe3R5cGU6InZlcmIiLG5hbWVzOlsiXFx2ZXJiIl0scHJvcHM6e251bUFyZ3M6MCxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyKHQsZSxyKXt0aHJvdyBuZXcgZ3QoIlxcdmVyYiBlbmRlZCBieSBlbmQgb2YgbGluZSBpbnN0ZWFkIG9mIG1hdGNoaW5nIGRlbGltaXRlciIpfSxodG1sQnVpbGRlcih0LGUpe2Zvcih2YXIgcj1Neih0KSxuPVtdLGk9ZS5oYXZpbmdTdHlsZShlLnN0eWxlLnRleHQoKSksYT0wO2E8ci5sZW5ndGg7YSsrKXt2YXIgcz1yW2FdO3M9PT0ifiImJihzPSJcXHRleHRhc2NpaXRpbGRlIiksbi5wdXNoKEJlLm1ha2VTeW1ib2wocywiVHlwZXdyaXRlci1SZWd1bGFyIix0Lm1vZGUsaSxbIm1vcmQiLCJ0ZXh0dHQiXSkpfXJldHVybiBCZS5tYWtlU3BhbihbIm1vcmQiLCJ0ZXh0Il0uY29uY2F0KGkuc2l6aW5nQ2xhc3NlcyhlKSksQmUudHJ5Q29tYmluZUNoYXJzKG4pLGkpfSxtYXRobWxCdWlsZGVyKHQsZSl7dmFyIHI9bmV3IGR0LlRleHROb2RlKE16KHQpKSxuPW5ldyBkdC5NYXRoTm9kZSgibXRleHQiLFtyXSk7cmV0dXJuIG4uc2V0QXR0cmlidXRlKCJtYXRodmFyaWFudCIsIm1vbm9zcGFjZSIpLG59fSk7TXo9byh0PT50LmJvZHkucmVwbGFjZSgvIC9nLHQuc3Rhcj8iXHUyNDIzIjoiXHhBMCIpLCJtYWtlVmVyYiIpLGhoPWp6LEFHPWBbIFxyCgldYCxQNGU9IlxcXFxbYS16QS1aQF0rIixCNGU9IlxcXFxbXlx1RDgwMC1cdURGRkZdIixGNGU9IigiK1A0ZSsiKSIrQUcrIioiLCQ0ZT1gXFxcXCgKfFsgXHIJXSsKPylbIFxyCV0qYCxONz0iW1x1MDMwMC1cdTAzNkZdIix6NGU9bmV3IFJlZ0V4cChONysiKyQiKSxHNGU9IigiK0FHKyIrKXwiKygkNGUrInwiKSsiKFshLVxcW1xcXS1cdTIwMjdcdTIwMkEtXHVEN0ZGXHVGOTAwLVx1RkZGRl0iKyhONysiKiIpKyJ8W1x1RDgwMC1cdURCRkZdW1x1REMwMC1cdURGRkZdIisoTjcrIioiKSsifFxcXFx2ZXJiXFwqKFteXSkuKj9cXDR8XFxcXHZlcmIoW14qYS16QS1aXSkuKj9cXDUiKygifCIrRjRlKSsoInwiK0I0ZSsiKSIpLHkzPWNsYXNze3N0YXRpY3tvKHRoaXMsIkxleGVyIil9Y29uc3RydWN0b3IoZSxyKXt0aGlzLmlucHV0PXZvaWQgMCx0aGlzLnNldHRpbmdzPXZvaWQgMCx0aGlzLnRva2VuUmVnZXg9dm9pZCAwLHRoaXMuY2F0Y29kZXM9dm9pZCAwLHRoaXMuaW5wdXQ9ZSx0aGlzLnNldHRpbmdzPXIsdGhpcy50b2tlblJlZ2V4PW5ldyBSZWdFeHAoRzRlLCJnIiksdGhpcy5jYXRjb2Rlcz17IiUiOjE0LCJ+IjoxM319c2V0Q2F0Y29kZShlLHIpe3RoaXMuY2F0Y29kZXNbZV09cn1sZXgoKXt2YXIgZT10aGlzLmlucHV0LHI9dGhpcy50b2tlblJlZ2V4Lmxhc3RJbmRleDtpZihyPT09ZS5sZW5ndGgpcmV0dXJuIG5ldyBTbygiRU9GIixuZXcgWHModGhpcyxyLHIpKTt2YXIgbj10aGlzLnRva2VuUmVnZXguZXhlYyhlKTtpZihuPT09bnVsbHx8bi5pbmRleCE9PXIpdGhyb3cgbmV3IGd0KCJVbmV4cGVjdGVkIGNoYXJhY3RlcjogJyIrZVtyXSsiJyIsbmV3IFNvKGVbcl0sbmV3IFhzKHRoaXMscixyKzEpKSk7dmFyIGk9bls2XXx8blszXXx8KG5bMl0/IlxcICI6IiAiKTtpZih0aGlzLmNhdGNvZGVzW2ldPT09MTQpe3ZhciBhPWUuaW5kZXhPZihgCmAsdGhpcy50b2tlblJlZ2V4Lmxhc3RJbmRleCk7cmV0dXJuIGE9PT0tMT8odGhpcy50b2tlblJlZ2V4Lmxhc3RJbmRleD1lLmxlbmd0aCx0aGlzLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdCgiY29tbWVudEF0RW5kIiwiJSBjb21tZW50IGhhcyBubyB0ZXJtaW5hdGluZyBuZXdsaW5lOyBMYVRlWCB3b3VsZCBmYWlsIGJlY2F1c2Ugb2YgY29tbWVudGluZyB0aGUgZW5kIG9mIG1hdGggbW9kZSAoZS5nLiAkKSIpKTp0aGlzLnRva2VuUmVnZXgubGFzdEluZGV4PWErMSx0aGlzLmxleCgpfXJldHVybiBuZXcgU28oaSxuZXcgWHModGhpcyxyLHRoaXMudG9rZW5SZWdleC5sYXN0SW5kZXgpKX19LE03PWNsYXNze3N0YXRpY3tvKHRoaXMsIk5hbWVzcGFjZSIpfWNvbnN0cnVjdG9yKGUscil7ZT09PXZvaWQgMCYmKGU9e30pLHI9PT12b2lkIDAmJihyPXt9KSx0aGlzLmN1cnJlbnQ9dm9pZCAwLHRoaXMuYnVpbHRpbnM9dm9pZCAwLHRoaXMudW5kZWZTdGFjaz12b2lkIDAsdGhpcy5jdXJyZW50PXIsdGhpcy5idWlsdGlucz1lLHRoaXMudW5kZWZTdGFjaz1bXX1iZWdpbkdyb3VwKCl7dGhpcy51bmRlZlN0YWNrLnB1c2goe30pfWVuZEdyb3VwKCl7aWYodGhpcy51bmRlZlN0YWNrLmxlbmd0aD09PTApdGhyb3cgbmV3IGd0KCJVbmJhbGFuY2VkIG5hbWVzcGFjZSBkZXN0cnVjdGlvbjogYXR0ZW1wdCB0byBwb3AgZ2xvYmFsIG5hbWVzcGFjZTsgcGxlYXNlIHJlcG9ydCB0aGlzIGFzIGEgYnVnIik7dmFyIGU9dGhpcy51bmRlZlN0YWNrLnBvcCgpO2Zvcih2YXIgciBpbiBlKWUuaGFzT3duUHJvcGVydHkocikmJihlW3JdPT1udWxsP2RlbGV0ZSB0aGlzLmN1cnJlbnRbcl06dGhpcy5jdXJyZW50W3JdPWVbcl0pfWVuZEdyb3Vwcygpe2Zvcig7dGhpcy51bmRlZlN0YWNrLmxlbmd0aD4wOyl0aGlzLmVuZEdyb3VwKCl9aGFzKGUpe3JldHVybiB0aGlzLmN1cnJlbnQuaGFzT3duUHJvcGVydHkoZSl8fHRoaXMuYnVpbHRpbnMuaGFzT3duUHJvcGVydHkoZSl9Z2V0KGUpe3JldHVybiB0aGlzLmN1cnJlbnQuaGFzT3duUHJvcGVydHkoZSk/dGhpcy5jdXJyZW50W2VdOnRoaXMuYnVpbHRpbnNbZV19c2V0KGUscixuKXtpZihuPT09dm9pZCAwJiYobj0hMSksbil7Zm9yKHZhciBpPTA7aTx0aGlzLnVuZGVmU3RhY2subGVuZ3RoO2krKylkZWxldGUgdGhpcy51bmRlZlN0YWNrW2ldW2VdO3RoaXMudW5kZWZTdGFjay5sZW5ndGg+MCYmKHRoaXMudW5kZWZTdGFja1t0aGlzLnVuZGVmU3RhY2subGVuZ3RoLTFdW2VdPXIpfWVsc2V7dmFyIGE9dGhpcy51bmRlZlN0YWNrW3RoaXMudW5kZWZTdGFjay5sZW5ndGgtMV07YSYmIWEuaGFzT3duUHJvcGVydHkoZSkmJihhW2VdPXRoaXMuY3VycmVudFtlXSl9cj09bnVsbD9kZWxldGUgdGhpcy5jdXJyZW50W2VdOnRoaXMuY3VycmVudFtlXT1yfX0sVjRlPWdHO2ZlKCJcXG5vZXhwYW5kIixmdW5jdGlvbih0KXt2YXIgZT10LnBvcFRva2VuKCk7cmV0dXJuIHQuaXNFeHBhbmRhYmxlKGUudGV4dCkmJihlLm5vZXhwYW5kPSEwLGUudHJlYXRBc1JlbGF4PSEwKSx7dG9rZW5zOltlXSxudW1BcmdzOjB9fSk7ZmUoIlxcZXhwYW5kYWZ0ZXIiLGZ1bmN0aW9uKHQpe3ZhciBlPXQucG9wVG9rZW4oKTtyZXR1cm4gdC5leHBhbmRPbmNlKCEwKSx7dG9rZW5zOltlXSxudW1BcmdzOjB9fSk7ZmUoIlxcQGZpcnN0b2Z0d28iLGZ1bmN0aW9uKHQpe3ZhciBlPXQuY29uc3VtZUFyZ3MoMik7cmV0dXJue3Rva2VuczplWzBdLG51bUFyZ3M6MH19KTtmZSgiXFxAc2Vjb25kb2Z0d28iLGZ1bmN0aW9uKHQpe3ZhciBlPXQuY29uc3VtZUFyZ3MoMik7cmV0dXJue3Rva2VuczplWzFdLG51bUFyZ3M6MH19KTtmZSgiXFxAaWZuZXh0Y2hhciIsZnVuY3Rpb24odCl7dmFyIGU9dC5jb25zdW1lQXJncygzKTt0LmNvbnN1bWVTcGFjZXMoKTt2YXIgcj10LmZ1dHVyZSgpO3JldHVybiBlWzBdLmxlbmd0aD09PTEmJmVbMF1bMF0udGV4dD09PXIudGV4dD97dG9rZW5zOmVbMV0sbnVtQXJnczowfTp7dG9rZW5zOmVbMl0sbnVtQXJnczowfX0pO2ZlKCJcXEBpZnN0YXIiLCJcXEBpZm5leHRjaGFyICp7XFxAZmlyc3RvZnR3b3sjMX19Iik7ZmUoIlxcVGV4dE9yTWF0aCIsZnVuY3Rpb24odCl7dmFyIGU9dC5jb25zdW1lQXJncygyKTtyZXR1cm4gdC5tb2RlPT09InRleHQiP3t0b2tlbnM6ZVswXSxudW1BcmdzOjB9Ont0b2tlbnM6ZVsxXSxudW1BcmdzOjB9fSk7SXo9ezA6MCwxOjEsMjoyLDM6Myw0OjQsNTo1LDY6Niw3OjcsODo4LDk6OSxhOjEwLEE6MTAsYjoxMSxCOjExLGM6MTIsQzoxMixkOjEzLEQ6MTMsZToxNCxFOjE0LGY6MTUsRjoxNX07ZmUoIlxcY2hhciIsZnVuY3Rpb24odCl7dmFyIGU9dC5wb3BUb2tlbigpLHIsbj0iIjtpZihlLnRleHQ9PT0iJyIpcj04LGU9dC5wb3BUb2tlbigpO2Vsc2UgaWYoZS50ZXh0PT09JyInKXI9MTYsZT10LnBvcFRva2VuKCk7ZWxzZSBpZihlLnRleHQ9PT0iYCIpaWYoZT10LnBvcFRva2VuKCksZS50ZXh0WzBdPT09IlxcIiluPWUudGV4dC5jaGFyQ29kZUF0KDEpO2Vsc2V7aWYoZS50ZXh0PT09IkVPRiIpdGhyb3cgbmV3IGd0KCJcXGNoYXJgIG1pc3NpbmcgYXJndW1lbnQiKTtuPWUudGV4dC5jaGFyQ29kZUF0KDApfWVsc2Ugcj0xMDtpZihyKXtpZihuPUl6W2UudGV4dF0sbj09bnVsbHx8bj49cil0aHJvdyBuZXcgZ3QoIkludmFsaWQgYmFzZS0iK3IrIiBkaWdpdCAiK2UudGV4dCk7Zm9yKHZhciBpOyhpPUl6W3QuZnV0dXJlKCkudGV4dF0pIT1udWxsJiZpPHI7KW4qPXIsbis9aSx0LnBvcFRva2VuKCl9cmV0dXJuIlxcQGNoYXJ7IituKyJ9In0pO2o3PW8oKHQsZSxyKT0+e3ZhciBuPXQuY29uc3VtZUFyZygpLnRva2VucztpZihuLmxlbmd0aCE9PTEpdGhyb3cgbmV3IGd0KCJcXG5ld2NvbW1hbmQncyBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgbWFjcm8gbmFtZSIpO3ZhciBpPW5bMF0udGV4dCxhPXQuaXNEZWZpbmVkKGkpO2lmKGEmJiFlKXRocm93IG5ldyBndCgiXFxuZXdjb21tYW5keyIraSsifSBhdHRlbXB0aW5nIHRvIHJlZGVmaW5lICIrKGkrIjsgdXNlIFxccmVuZXdjb21tYW5kIikpO2lmKCFhJiYhcil0aHJvdyBuZXcgZ3QoIlxccmVuZXdjb21tYW5keyIraSsifSB3aGVuIGNvbW1hbmQgIitpKyIgZG9lcyBub3QgeWV0IGV4aXN0OyB1c2UgXFxuZXdjb21tYW5kIik7dmFyIHM9MDtpZihuPXQuY29uc3VtZUFyZygpLnRva2VucyxuLmxlbmd0aD09PTEmJm5bMF0udGV4dD09PSJbIil7Zm9yKHZhciBsPSIiLHU9dC5leHBhbmROZXh0VG9rZW4oKTt1LnRleHQhPT0iXSImJnUudGV4dCE9PSJFT0YiOylsKz11LnRleHQsdT10LmV4cGFuZE5leHRUb2tlbigpO2lmKCFsLm1hdGNoKC9eXHMqWzAtOV0rXHMqJC8pKXRocm93IG5ldyBndCgiSW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzOiAiK2wpO3M9cGFyc2VJbnQobCksbj10LmNvbnN1bWVBcmcoKS50b2tlbnN9cmV0dXJuIHQubWFjcm9zLnNldChpLHt0b2tlbnM6bixudW1BcmdzOnN9KSwiIn0sIm5ld2NvbW1hbmQiKTtmZSgiXFxuZXdjb21tYW5kIix0PT5qNyh0LCExLCEwKSk7ZmUoIlxccmVuZXdjb21tYW5kIix0PT5qNyh0LCEwLCExKSk7ZmUoIlxccHJvdmlkZWNvbW1hbmQiLHQ9Pmo3KHQsITAsITApKTtmZSgiXFxtZXNzYWdlIix0PT57dmFyIGU9dC5jb25zdW1lQXJncygxKVswXTtyZXR1cm4gY29uc29sZS5sb2coZS5yZXZlcnNlKCkubWFwKHI9PnIudGV4dCkuam9pbigiIikpLCIifSk7ZmUoIlxcZXJybWVzc2FnZSIsdD0+e3ZhciBlPXQuY29uc3VtZUFyZ3MoMSlbMF07cmV0dXJuIGNvbnNvbGUuZXJyb3IoZS5yZXZlcnNlKCkubWFwKHI9PnIudGV4dCkuam9pbigiIikpLCIifSk7ZmUoIlxcc2hvdyIsdD0+e3ZhciBlPXQucG9wVG9rZW4oKSxyPWUudGV4dDtyZXR1cm4gY29uc29sZS5sb2coZSx0Lm1hY3Jvcy5nZXQociksaGhbcl0sQW4ubWF0aFtyXSxBbi50ZXh0W3JdKSwiIn0pO2ZlKCJcXGJncm91cCIsInsiKTtmZSgiXFxlZ3JvdXAiLCJ9Iik7ZmUoIn4iLCJcXG5vYnJlYWtzcGFjZSIpO2ZlKCJcXGxxIiwiYCIpO2ZlKCJcXHJxIiwiJyIpO2ZlKCJcXGFhIiwiXFxyIGEiKTtmZSgiXFxBQSIsIlxcciBBIik7ZmUoIlxcdGV4dGNvcHlyaWdodCIsIlxcaHRtbEBtYXRobWx7XFx0ZXh0Y2lyY2xlZHtjfX17XFxjaGFyYFx4QTl9Iik7ZmUoIlxcY29weXJpZ2h0IiwiXFxUZXh0T3JNYXRoe1xcdGV4dGNvcHlyaWdodH17XFx0ZXh0e1xcdGV4dGNvcHlyaWdodH19Iik7ZmUoIlxcdGV4dHJlZ2lzdGVyZWQiLCJcXGh0bWxAbWF0aG1se1xcdGV4dGNpcmNsZWR7XFxzY3JpcHRzaXplIFJ9fXtcXGNoYXJgXHhBRX0iKTtmZSgiXHUyMTJDIiwiXFxtYXRoc2Nye0J9Iik7ZmUoIlx1MjEzMCIsIlxcbWF0aHNjcntFfSIpO2ZlKCJcdTIxMzEiLCJcXG1hdGhzY3J7Rn0iKTtmZSgiXHUyMTBCIiwiXFxtYXRoc2Nye0h9Iik7ZmUoIlx1MjExMCIsIlxcbWF0aHNjcntJfSIpO2ZlKCJcdTIxMTIiLCJcXG1hdGhzY3J7TH0iKTtmZSgiXHUyMTMzIiwiXFxtYXRoc2Nye019Iik7ZmUoIlx1MjExQiIsIlxcbWF0aHNjcntSfSIpO2ZlKCJcdTIxMkQiLCJcXG1hdGhmcmFre0N9Iik7ZmUoIlx1MjEwQyIsIlxcbWF0aGZyYWt7SH0iKTtmZSgiXHUyMTI4IiwiXFxtYXRoZnJha3tafSIpO2ZlKCJcXEJiYmsiLCJcXEJiYntrfSIpO2ZlKCJceEI3IiwiXFxjZG90cCIpO2ZlKCJcXGxsYXAiLCJcXG1hdGhsbGFwe1xcdGV4dHJteyMxfX0iKTtmZSgiXFxybGFwIiwiXFxtYXRocmxhcHtcXHRleHRybXsjMX19Iik7ZmUoIlxcY2xhcCIsIlxcbWF0aGNsYXB7XFx0ZXh0cm17IzF9fSIpO2ZlKCJcXG1hdGhzdHJ1dCIsIlxcdnBoYW50b217KH0iKTtmZSgiXFx1bmRlcmJhciIsIlxcdW5kZXJsaW5le1xcdGV4dHsjMX19Iik7ZmUoIlxcbm90IiwnXFxodG1sQG1hdGhtbHtcXG1hdGhyZWx7XFxtYXRocmxhcFxcQG5vdH19e1xcY2hhciIzMzh9Jyk7ZmUoIlxcbmVxIiwiXFxodG1sQG1hdGhtbHtcXG1hdGhyZWx7XFxub3Q9fX17XFxtYXRocmVse1xcY2hhcmBcdTIyNjB9fSIpO2ZlKCJcXG5lIiwiXFxuZXEiKTtmZSgiXHUyMjYwIiwiXFxuZXEiKTtmZSgiXFxub3RpbiIsIlxcaHRtbEBtYXRobWx7XFxtYXRocmVse3tcXGlufVxcbWF0aGxsYXB7L1xcbXNraXAxbXV9fX17XFxtYXRocmVse1xcY2hhcmBcdTIyMDl9fSIpO2ZlKCJcdTIyMDkiLCJcXG5vdGluIik7ZmUoIlx1MjI1OCIsIlxcaHRtbEBtYXRobWx7XFxtYXRocmVsez1cXGtlcm57LTFlbX1cXHJhaXNlYm94ezAuNGVtfXskXFxzY3JpcHRzaXplXFxmcm93biR9fX17XFxtYXRocmVse1xcY2hhcmBcdTIyNTh9fSIpO2ZlKCJcdTIyNTkiLCJcXGh0bWxAbWF0aG1se1xcc3RhY2tyZWx7XFx0aW55XFx3ZWRnZX17PX19e1xcbWF0aHJlbHtcXGNoYXJgXHUyMjU4fX0iKTtmZSgiXHUyMjVBIiwiXFxodG1sQG1hdGhtbHtcXHN0YWNrcmVse1xcdGlueVxcdmVlfXs9fX17XFxtYXRocmVse1xcY2hhcmBcdTIyNUF9fSIpO2ZlKCJcdTIyNUIiLCJcXGh0bWxAbWF0aG1se1xcc3RhY2tyZWx7XFxzY3JpcHRzaXplXFxzdGFyfXs9fX17XFxtYXRocmVse1xcY2hhcmBcdTIyNUJ9fSIpO2ZlKCJcdTIyNUQiLCJcXGh0bWxAbWF0aG1se1xcc3RhY2tyZWx7XFx0aW55XFxtYXRocm17ZGVmfX17PX19e1xcbWF0aHJlbHtcXGNoYXJgXHUyMjVEfX0iKTtmZSgiXHUyMjVFIiwiXFxodG1sQG1hdGhtbHtcXHN0YWNrcmVse1xcdGlueVxcbWF0aHJte219fXs9fX17XFxtYXRocmVse1xcY2hhcmBcdTIyNUV9fSIpO2ZlKCJcdTIyNUYiLCJcXGh0bWxAbWF0aG1se1xcc3RhY2tyZWx7XFx0aW55P317PX19e1xcbWF0aHJlbHtcXGNoYXJgXHUyMjVGfX0iKTtmZSgiXHUyN0MyIiwiXFxwZXJwIik7ZmUoIlx1MjAzQyIsIlxcbWF0aGNsb3NleyFcXG1rZXJuLTAuOG11IX0iKTtmZSgiXHUyMjBDIiwiXFxub3RuaSIpO2ZlKCJcdTIzMUMiLCJcXHVsY29ybmVyIik7ZmUoIlx1MjMxRCIsIlxcdXJjb3JuZXIiKTtmZSgiXHUyMzFFIiwiXFxsbGNvcm5lciIpO2ZlKCJcdTIzMUYiLCJcXGxyY29ybmVyIik7ZmUoIlx4QTkiLCJcXGNvcHlyaWdodCIpO2ZlKCJceEFFIiwiXFx0ZXh0cmVnaXN0ZXJlZCIpO2ZlKCJcdUZFMEYiLCJcXHRleHRyZWdpc3RlcmVkIik7ZmUoIlxcdWxjb3JuZXIiLCdcXGh0bWxAbWF0aG1se1xcQHVsY29ybmVyfXtcXG1hdGhvcHtcXGNoYXIiMjMxY319Jyk7ZmUoIlxcdXJjb3JuZXIiLCdcXGh0bWxAbWF0aG1se1xcQHVyY29ybmVyfXtcXG1hdGhvcHtcXGNoYXIiMjMxZH19Jyk7ZmUoIlxcbGxjb3JuZXIiLCdcXGh0bWxAbWF0aG1se1xcQGxsY29ybmVyfXtcXG1hdGhvcHtcXGNoYXIiMjMxZX19Jyk7ZmUoIlxcbHJjb3JuZXIiLCdcXGh0bWxAbWF0aG1se1xcQGxyY29ybmVyfXtcXG1hdGhvcHtcXGNoYXIiMjMxZn19Jyk7ZmUoIlxcdmRvdHMiLCJcXG1hdGhvcmR7XFx2YXJ2ZG90c1xccnVsZXswcHR9ezE1cHR9fSIpO2ZlKCJcdTIyRUUiLCJcXHZkb3RzIik7ZmUoIlxcdmFyR2FtbWEiLCJcXG1hdGhpdHtcXEdhbW1hfSIpO2ZlKCJcXHZhckRlbHRhIiwiXFxtYXRoaXR7XFxEZWx0YX0iKTtmZSgiXFx2YXJUaGV0YSIsIlxcbWF0aGl0e1xcVGhldGF9Iik7ZmUoIlxcdmFyTGFtYmRhIiwiXFxtYXRoaXR7XFxMYW1iZGF9Iik7ZmUoIlxcdmFyWGkiLCJcXG1hdGhpdHtcXFhpfSIpO2ZlKCJcXHZhclBpIiwiXFxtYXRoaXR7XFxQaX0iKTtmZSgiXFx2YXJTaWdtYSIsIlxcbWF0aGl0e1xcU2lnbWF9Iik7ZmUoIlxcdmFyVXBzaWxvbiIsIlxcbWF0aGl0e1xcVXBzaWxvbn0iKTtmZSgiXFx2YXJQaGkiLCJcXG1hdGhpdHtcXFBoaX0iKTtmZSgiXFx2YXJQc2kiLCJcXG1hdGhpdHtcXFBzaX0iKTtmZSgiXFx2YXJPbWVnYSIsIlxcbWF0aGl0e1xcT21lZ2F9Iik7ZmUoIlxcc3Vic3RhY2siLCJcXGJlZ2lue3N1YmFycmF5fXtjfSMxXFxlbmR7c3ViYXJyYXl9Iik7ZmUoIlxcY29sb24iLCJcXG5vYnJlYWtcXG1za2lwMm11XFxtYXRocHVuY3R7fVxcbWF0aGNob2ljZXtcXG1rZXJuLTNtdX17XFxta2Vybi0zbXV9e317fXs6fVxcbXNraXA2bXVcXHJlbGF4Iik7ZmUoIlxcYm94ZWQiLCJcXGZib3h7JFxcZGlzcGxheXN0eWxleyMxfSR9Iik7ZmUoIlxcaWZmIiwiXFxET1RTQlxcO1xcTG9uZ2xlZnRyaWdodGFycm93XFw7Iik7ZmUoIlxcaW1wbGllcyIsIlxcRE9UU0JcXDtcXExvbmdyaWdodGFycm93XFw7Iik7ZmUoIlxcaW1wbGllZGJ5IiwiXFxET1RTQlxcO1xcTG9uZ2xlZnRhcnJvd1xcOyIpO096PXsiLCI6IlxcZG90c2MiLCJcXG5vdCI6IlxcZG90c2IiLCIrIjoiXFxkb3RzYiIsIj0iOiJcXGRvdHNiIiwiPCI6IlxcZG90c2IiLCI+IjoiXFxkb3RzYiIsIi0iOiJcXGRvdHNiIiwiKiI6IlxcZG90c2IiLCI6IjoiXFxkb3RzYiIsIlxcRE9UU0IiOiJcXGRvdHNiIiwiXFxjb3Byb2QiOiJcXGRvdHNiIiwiXFxiaWd2ZWUiOiJcXGRvdHNiIiwiXFxiaWd3ZWRnZSI6IlxcZG90c2IiLCJcXGJpZ3VwbHVzIjoiXFxkb3RzYiIsIlxcYmlnY2FwIjoiXFxkb3RzYiIsIlxcYmlnY3VwIjoiXFxkb3RzYiIsIlxccHJvZCI6IlxcZG90c2IiLCJcXHN1bSI6IlxcZG90c2IiLCJcXGJpZ290aW1lcyI6IlxcZG90c2IiLCJcXGJpZ29wbHVzIjoiXFxkb3RzYiIsIlxcYmlnb2RvdCI6IlxcZG90c2IiLCJcXGJpZ3NxY3VwIjoiXFxkb3RzYiIsIlxcQW5kIjoiXFxkb3RzYiIsIlxcbG9uZ3JpZ2h0YXJyb3ciOiJcXGRvdHNiIiwiXFxMb25ncmlnaHRhcnJvdyI6IlxcZG90c2IiLCJcXGxvbmdsZWZ0YXJyb3ciOiJcXGRvdHNiIiwiXFxMb25nbGVmdGFycm93IjoiXFxkb3RzYiIsIlxcbG9uZ2xlZnRyaWdodGFycm93IjoiXFxkb3RzYiIsIlxcTG9uZ2xlZnRyaWdodGFycm93IjoiXFxkb3RzYiIsIlxcbWFwc3RvIjoiXFxkb3RzYiIsIlxcbG9uZ21hcHN0byI6IlxcZG90c2IiLCJcXGhvb2tyaWdodGFycm93IjoiXFxkb3RzYiIsIlxcZG90ZXEiOiJcXGRvdHNiIiwiXFxtYXRoYmluIjoiXFxkb3RzYiIsIlxcbWF0aHJlbCI6IlxcZG90c2IiLCJcXHJlbGJhciI6IlxcZG90c2IiLCJcXFJlbGJhciI6IlxcZG90c2IiLCJcXHhyaWdodGFycm93IjoiXFxkb3RzYiIsIlxceGxlZnRhcnJvdyI6IlxcZG90c2IiLCJcXERPVFNJIjoiXFxkb3RzaSIsIlxcaW50IjoiXFxkb3RzaSIsIlxcb2ludCI6IlxcZG90c2kiLCJcXGlpbnQiOiJcXGRvdHNpIiwiXFxpaWludCI6IlxcZG90c2kiLCJcXGlpaWludCI6IlxcZG90c2kiLCJcXGlkb3RzaW50IjoiXFxkb3RzaSIsIlxcRE9UU1giOiJcXGRvdHN4In07ZmUoIlxcZG90cyIsZnVuY3Rpb24odCl7dmFyIGU9IlxcZG90c28iLHI9dC5leHBhbmRBZnRlckZ1dHVyZSgpLnRleHQ7cmV0dXJuIHIgaW4gT3o/ZT1PeltyXTooci5zbGljZSgwLDQpPT09Ilxcbm90Inx8ciBpbiBBbi5tYXRoJiZKdC5jb250YWlucyhbImJpbiIsInJlbCJdLEFuLm1hdGhbcl0uZ3JvdXApKSYmKGU9IlxcZG90c2IiKSxlfSk7Szc9eyIpIjohMCwiXSI6ITAsIlxccmJyYWNrIjohMCwiXFx9IjohMCwiXFxyYnJhY2UiOiEwLCJcXHJhbmdsZSI6ITAsIlxccmNlaWwiOiEwLCJcXHJmbG9vciI6ITAsIlxccmdyb3VwIjohMCwiXFxybW91c3RhY2hlIjohMCwiXFxyaWdodCI6ITAsIlxcYmlnciI6ITAsIlxcYmlnZ3IiOiEwLCJcXEJpZ3IiOiEwLCJcXEJpZ2dyIjohMCwkOiEwLCI7IjohMCwiLiI6ITAsIiwiOiEwfTtmZSgiXFxkb3RzbyIsZnVuY3Rpb24odCl7dmFyIGU9dC5mdXR1cmUoKS50ZXh0O3JldHVybiBlIGluIEs3PyJcXGxkb3RzXFwsIjoiXFxsZG90cyJ9KTtmZSgiXFxkb3RzYyIsZnVuY3Rpb24odCl7dmFyIGU9dC5mdXR1cmUoKS50ZXh0O3JldHVybiBlIGluIEs3JiZlIT09IiwiPyJcXGxkb3RzXFwsIjoiXFxsZG90cyJ9KTtmZSgiXFxjZG90cyIsZnVuY3Rpb24odCl7dmFyIGU9dC5mdXR1cmUoKS50ZXh0O3JldHVybiBlIGluIEs3PyJcXEBjZG90c1xcLCI6IlxcQGNkb3RzIn0pO2ZlKCJcXGRvdHNiIiwiXFxjZG90cyIpO2ZlKCJcXGRvdHNtIiwiXFxjZG90cyIpO2ZlKCJcXGRvdHNpIiwiXFwhXFxjZG90cyIpO2ZlKCJcXGRvdHN4IiwiXFxsZG90c1xcLCIpO2ZlKCJcXERPVFNJIiwiXFxyZWxheCIpO2ZlKCJcXERPVFNCIiwiXFxyZWxheCIpO2ZlKCJcXERPVFNYIiwiXFxyZWxheCIpO2ZlKCJcXHRtc3BhY2UiLCJcXFRleHRPck1hdGh7XFxrZXJuIzEjM317XFxtc2tpcCMxIzJ9XFxyZWxheCIpO2ZlKCJcXCwiLCJcXHRtc3BhY2UrezNtdX17LjE2NjdlbX0iKTtmZSgiXFx0aGluc3BhY2UiLCJcXCwiKTtmZSgiXFw+IiwiXFxtc2tpcHs0bXV9Iik7ZmUoIlxcOiIsIlxcdG1zcGFjZSt7NG11fXsuMjIyMmVtfSIpO2ZlKCJcXG1lZHNwYWNlIiwiXFw6Iik7ZmUoIlxcOyIsIlxcdG1zcGFjZSt7NW11fXsuMjc3N2VtfSIpO2ZlKCJcXHRoaWNrc3BhY2UiLCJcXDsiKTtmZSgiXFwhIiwiXFx0bXNwYWNlLXszbXV9ey4xNjY3ZW19Iik7ZmUoIlxcbmVndGhpbnNwYWNlIiwiXFwhIik7ZmUoIlxcbmVnbWVkc3BhY2UiLCJcXHRtc3BhY2UtezRtdX17LjIyMjJlbX0iKTtmZSgiXFxuZWd0aGlja3NwYWNlIiwiXFx0bXNwYWNlLXs1bXV9ey4yNzdlbX0iKTtmZSgiXFxlbnNwYWNlIiwiXFxrZXJuLjVlbSAiKTtmZSgiXFxlbnNraXAiLCJcXGhza2lwLjVlbVxccmVsYXgiKTtmZSgiXFxxdWFkIiwiXFxoc2tpcDFlbVxccmVsYXgiKTtmZSgiXFxxcXVhZCIsIlxcaHNraXAyZW1cXHJlbGF4Iik7ZmUoIlxcdGFnIiwiXFxAaWZzdGFyXFx0YWdAbGl0ZXJhbFxcdGFnQHBhcmVuIik7ZmUoIlxcdGFnQHBhcmVuIiwiXFx0YWdAbGl0ZXJhbHsoeyMxfSl9Iik7ZmUoIlxcdGFnQGxpdGVyYWwiLHQ9PntpZih0Lm1hY3Jvcy5nZXQoIlxcZGZAdGFnIikpdGhyb3cgbmV3IGd0KCJNdWx0aXBsZSBcXHRhZyIpO3JldHVybiJcXGdkZWZcXGRmQHRhZ3tcXHRleHR7IzF9fSJ9KTtmZSgiXFxibW9kIiwiXFxtYXRoY2hvaWNle1xcbXNraXAxbXV9e1xcbXNraXAxbXV9e1xcbXNraXA1bXV9e1xcbXNraXA1bXV9XFxtYXRoYmlue1xccm0gbW9kfVxcbWF0aGNob2ljZXtcXG1za2lwMW11fXtcXG1za2lwMW11fXtcXG1za2lwNW11fXtcXG1za2lwNW11fSIpO2ZlKCJcXHBvZCIsIlxcYWxsb3dicmVha1xcbWF0aGNob2ljZXtcXG1rZXJuMThtdX17XFxta2VybjhtdX17XFxta2VybjhtdX17XFxta2VybjhtdX0oIzEpIik7ZmUoIlxccG1vZCIsIlxccG9ke3tcXHJtIG1vZH1cXG1rZXJuNm11IzF9Iik7ZmUoIlxcbW9kIiwiXFxhbGxvd2JyZWFrXFxtYXRoY2hvaWNle1xcbWtlcm4xOG11fXtcXG1rZXJuMTJtdX17XFxta2VybjEybXV9e1xcbWtlcm4xMm11fXtcXHJtIG1vZH1cXCxcXCwjMSIpO2ZlKCJcXG5ld2xpbmUiLCJcXFxcXFxyZWxheCIpO2ZlKCJcXFRlWCIsIlxcdGV4dHJte1xcaHRtbEBtYXRobWx7VFxca2Vybi0uMTY2N2VtXFxyYWlzZWJveHstLjVleH17RX1cXGtlcm4tLjEyNWVtWH17VGVYfX0iKTtfRz1rdChqbFsiTWFpbi1SZWd1bGFyIl1bODRdWzFdLS43KmpsWyJNYWluLVJlZ3VsYXIiXVs2NV1bMV0pO2ZlKCJcXExhVGVYIiwiXFx0ZXh0cm17XFxodG1sQG1hdGhtbHsiKygiTFxca2Vybi0uMzZlbVxccmFpc2Vib3h7IitfRysifXtcXHNjcmlwdHN0eWxlIEF9IikrIlxca2Vybi0uMTVlbVxcVGVYfXtMYVRlWH19Iik7ZmUoIlxcS2FUZVgiLCJcXHRleHRybXtcXGh0bWxAbWF0aG1seyIrKCJLXFxrZXJuLS4xN2VtXFxyYWlzZWJveHsiK19HKyJ9e1xcc2NyaXB0c3R5bGUgQX0iKSsiXFxrZXJuLS4xNWVtXFxUZVh9e0thVGVYfX0iKTtmZSgiXFxoc3BhY2UiLCJcXEBpZnN0YXJcXEBoc3BhY2VyXFxAaHNwYWNlIik7ZmUoIlxcQGhzcGFjZSIsIlxcaHNraXAgIzFcXHJlbGF4Iik7ZmUoIlxcQGhzcGFjZXIiLCJcXHJ1bGV7MHB0fXswcHR9XFxoc2tpcCAjMVxccmVsYXgiKTtmZSgiXFxvcmRpbmFyeWNvbG9uIiwiOiIpO2ZlKCJcXHZjZW50Y29sb24iLCJcXG1hdGhyZWx7XFxtYXRob3BcXG9yZGluYXJ5Y29sb259Iik7ZmUoIlxcZGJsY29sb24iLCdcXGh0bWxAbWF0aG1se1xcbWF0aHJlbHtcXHZjZW50Y29sb25cXG1hdGhyZWx7XFxta2Vybi0uOW11fVxcdmNlbnRjb2xvbn19e1xcbWF0aG9we1xcY2hhciIyMjM3fX0nKTtmZSgiXFxjb2xvbmVxcSIsJ1xcaHRtbEBtYXRobWx7XFxtYXRocmVse1xcdmNlbnRjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fT19fXtcXG1hdGhvcHtcXGNoYXIiMjI1NH19Jyk7ZmUoIlxcQ29sb25lcXEiLCdcXGh0bWxAbWF0aG1se1xcbWF0aHJlbHtcXGRibGNvbG9uXFxtYXRocmVse1xcbWtlcm4tMS4ybXV9PX19e1xcbWF0aG9we1xcY2hhciIyMjM3XFxjaGFyIjNkfX0nKTtmZSgiXFxjb2xvbmVxIiwnXFxodG1sQG1hdGhtbHtcXG1hdGhyZWx7XFx2Y2VudGNvbG9uXFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxtYXRocmVsey19fX17XFxtYXRob3B7XFxjaGFyIjNhXFxjaGFyIjIyMTJ9fScpO2ZlKCJcXENvbG9uZXEiLCdcXGh0bWxAbWF0aG1se1xcbWF0aHJlbHtcXGRibGNvbG9uXFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxtYXRocmVsey19fX17XFxtYXRob3B7XFxjaGFyIjIyMzdcXGNoYXIiMjIxMn19Jyk7ZmUoIlxcZXFxY29sb24iLCdcXGh0bWxAbWF0aG1se1xcbWF0aHJlbHs9XFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFx2Y2VudGNvbG9ufX17XFxtYXRob3B7XFxjaGFyIjIyNTV9fScpO2ZlKCJcXEVxcWNvbG9uIiwnXFxodG1sQG1hdGhtbHtcXG1hdGhyZWx7PVxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcZGJsY29sb259fXtcXG1hdGhvcHtcXGNoYXIiM2RcXGNoYXIiMjIzN319Jyk7ZmUoIlxcZXFjb2xvbiIsJ1xcaHRtbEBtYXRobWx7XFxtYXRocmVse1xcbWF0aHJlbHstfVxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcdmNlbnRjb2xvbn19e1xcbWF0aG9we1xcY2hhciIyMjM5fX0nKTtmZSgiXFxFcWNvbG9uIiwnXFxodG1sQG1hdGhtbHtcXG1hdGhyZWx7XFxtYXRocmVsey19XFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxkYmxjb2xvbn19e1xcbWF0aG9we1xcY2hhciIyMjEyXFxjaGFyIjIyMzd9fScpO2ZlKCJcXGNvbG9uYXBwcm94IiwnXFxodG1sQG1hdGhtbHtcXG1hdGhyZWx7XFx2Y2VudGNvbG9uXFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxhcHByb3h9fXtcXG1hdGhvcHtcXGNoYXIiM2FcXGNoYXIiMjI0OH19Jyk7ZmUoIlxcQ29sb25hcHByb3giLCdcXGh0bWxAbWF0aG1se1xcbWF0aHJlbHtcXGRibGNvbG9uXFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxhcHByb3h9fXtcXG1hdGhvcHtcXGNoYXIiMjIzN1xcY2hhciIyMjQ4fX0nKTtmZSgiXFxjb2xvbnNpbSIsJ1xcaHRtbEBtYXRobWx7XFxtYXRocmVse1xcdmNlbnRjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcc2ltfX17XFxtYXRob3B7XFxjaGFyIjNhXFxjaGFyIjIyM2N9fScpO2ZlKCJcXENvbG9uc2ltIiwnXFxodG1sQG1hdGhtbHtcXG1hdGhyZWx7XFxkYmxjb2xvblxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcc2ltfX17XFxtYXRob3B7XFxjaGFyIjIyMzdcXGNoYXIiMjIzY319Jyk7ZmUoIlx1MjIzNyIsIlxcZGJsY29sb24iKTtmZSgiXHUyMjM5IiwiXFxlcWNvbG9uIik7ZmUoIlx1MjI1NCIsIlxcY29sb25lcXEiKTtmZSgiXHUyMjU1IiwiXFxlcXFjb2xvbiIpO2ZlKCJcdTJBNzQiLCJcXENvbG9uZXFxIik7ZmUoIlxccmF0aW8iLCJcXHZjZW50Y29sb24iKTtmZSgiXFxjb2xvbmNvbG9uIiwiXFxkYmxjb2xvbiIpO2ZlKCJcXGNvbG9uZXF1YWxzIiwiXFxjb2xvbmVxcSIpO2ZlKCJcXGNvbG9uY29sb25lcXVhbHMiLCJcXENvbG9uZXFxIik7ZmUoIlxcZXF1YWxzY29sb24iLCJcXGVxcWNvbG9uIik7ZmUoIlxcZXF1YWxzY29sb25jb2xvbiIsIlxcRXFxY29sb24iKTtmZSgiXFxjb2xvbm1pbnVzIiwiXFxjb2xvbmVxIik7ZmUoIlxcY29sb25jb2xvbm1pbnVzIiwiXFxDb2xvbmVxIik7ZmUoIlxcbWludXNjb2xvbiIsIlxcZXFjb2xvbiIpO2ZlKCJcXG1pbnVzY29sb25jb2xvbiIsIlxcRXFjb2xvbiIpO2ZlKCJcXGNvbG9uY29sb25hcHByb3giLCJcXENvbG9uYXBwcm94Iik7ZmUoIlxcY29sb25jb2xvbnNpbSIsIlxcQ29sb25zaW0iKTtmZSgiXFxzaW1jb2xvbiIsIlxcbWF0aHJlbHtcXHNpbVxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcdmNlbnRjb2xvbn0iKTtmZSgiXFxzaW1jb2xvbmNvbG9uIiwiXFxtYXRocmVse1xcc2ltXFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxkYmxjb2xvbn0iKTtmZSgiXFxhcHByb3hjb2xvbiIsIlxcbWF0aHJlbHtcXGFwcHJveFxcbWF0aHJlbHtcXG1rZXJuLTEuMm11fVxcdmNlbnRjb2xvbn0iKTtmZSgiXFxhcHByb3hjb2xvbmNvbG9uIiwiXFxtYXRocmVse1xcYXBwcm94XFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxkYmxjb2xvbn0iKTtmZSgiXFxub3RuaSIsIlxcaHRtbEBtYXRobWx7XFxub3RcXG5pfXtcXG1hdGhyZWx7XFxjaGFyYFx1MjIwQ319Iik7ZmUoIlxcbGltc3VwIiwiXFxET1RTQlxcb3BlcmF0b3JuYW1lKntsaW1cXCxzdXB9Iik7ZmUoIlxcbGltaW5mIiwiXFxET1RTQlxcb3BlcmF0b3JuYW1lKntsaW1cXCxpbmZ9Iik7ZmUoIlxcaW5qbGltIiwiXFxET1RTQlxcb3BlcmF0b3JuYW1lKntpbmpcXCxsaW19Iik7ZmUoIlxccHJvamxpbSIsIlxcRE9UU0JcXG9wZXJhdG9ybmFtZSp7cHJvalxcLGxpbX0iKTtmZSgiXFx2YXJsaW1zdXAiLCJcXERPVFNCXFxvcGVyYXRvcm5hbWUqe1xcb3ZlcmxpbmV7bGltfX0iKTtmZSgiXFx2YXJsaW1pbmYiLCJcXERPVFNCXFxvcGVyYXRvcm5hbWUqe1xcdW5kZXJsaW5le2xpbX19Iik7ZmUoIlxcdmFyaW5qbGltIiwiXFxET1RTQlxcb3BlcmF0b3JuYW1lKntcXHVuZGVycmlnaHRhcnJvd3tsaW19fSIpO2ZlKCJcXHZhcnByb2psaW0iLCJcXERPVFNCXFxvcGVyYXRvcm5hbWUqe1xcdW5kZXJsZWZ0YXJyb3d7bGltfX0iKTtmZSgiXFxndmVydG5lcXEiLCJcXGh0bWxAbWF0aG1se1xcQGd2ZXJ0bmVxcX17XHUyMjY5fSIpO2ZlKCJcXGx2ZXJ0bmVxcSIsIlxcaHRtbEBtYXRobWx7XFxAbHZlcnRuZXFxfXtcdTIyNjh9Iik7ZmUoIlxcbmdlcXEiLCJcXGh0bWxAbWF0aG1se1xcQG5nZXFxfXtcdTIyNzF9Iik7ZmUoIlxcbmdlcXNsYW50IiwiXFxodG1sQG1hdGhtbHtcXEBuZ2Vxc2xhbnR9e1x1MjI3MX0iKTtmZSgiXFxubGVxcSIsIlxcaHRtbEBtYXRobWx7XFxAbmxlcXF9e1x1MjI3MH0iKTtmZSgiXFxubGVxc2xhbnQiLCJcXGh0bWxAbWF0aG1se1xcQG5sZXFzbGFudH17XHUyMjcwfSIpO2ZlKCJcXG5zaG9ydG1pZCIsIlxcaHRtbEBtYXRobWx7XFxAbnNob3J0bWlkfXtcdTIyMjR9Iik7ZmUoIlxcbnNob3J0cGFyYWxsZWwiLCJcXGh0bWxAbWF0aG1se1xcQG5zaG9ydHBhcmFsbGVsfXtcdTIyMjZ9Iik7ZmUoIlxcbnN1YnNldGVxcSIsIlxcaHRtbEBtYXRobWx7XFxAbnN1YnNldGVxcX17XHUyMjg4fSIpO2ZlKCJcXG5zdXBzZXRlcXEiLCJcXGh0bWxAbWF0aG1se1xcQG5zdXBzZXRlcXF9e1x1MjI4OX0iKTtmZSgiXFx2YXJzdWJzZXRuZXEiLCJcXGh0bWxAbWF0aG1se1xcQHZhcnN1YnNldG5lcX17XHUyMjhBfSIpO2ZlKCJcXHZhcnN1YnNldG5lcXEiLCJcXGh0bWxAbWF0aG1se1xcQHZhcnN1YnNldG5lcXF9e1x1MkFDQn0iKTtmZSgiXFx2YXJzdXBzZXRuZXEiLCJcXGh0bWxAbWF0aG1se1xcQHZhcnN1cHNldG5lcX17XHUyMjhCfSIpO2ZlKCJcXHZhcnN1cHNldG5lcXEiLCJcXGh0bWxAbWF0aG1se1xcQHZhcnN1cHNldG5lcXF9e1x1MkFDQ30iKTtmZSgiXFxpbWF0aCIsIlxcaHRtbEBtYXRobWx7XFxAaW1hdGh9e1x1MDEzMX0iKTtmZSgiXFxqbWF0aCIsIlxcaHRtbEBtYXRobWx7XFxAam1hdGh9e1x1MDIzN30iKTtmZSgiXFxsbGJyYWNrZXQiLCJcXGh0bWxAbWF0aG1se1xcbWF0aG9wZW57W1xcbWtlcm4tMy4ybXVbfX17XFxtYXRob3BlbntcXGNoYXJgXHUyN0U2fX0iKTtmZSgiXFxycmJyYWNrZXQiLCJcXGh0bWxAbWF0aG1se1xcbWF0aGNsb3Nle11cXG1rZXJuLTMuMm11XX19e1xcbWF0aGNsb3Nle1xcY2hhcmBcdTI3RTd9fSIpO2ZlKCJcdTI3RTYiLCJcXGxsYnJhY2tldCIpO2ZlKCJcdTI3RTciLCJcXHJyYnJhY2tldCIpO2ZlKCJcXGxCcmFjZSIsIlxcaHRtbEBtYXRobWx7XFxtYXRob3BlbntcXHtcXG1rZXJuLTMuMm11W319e1xcbWF0aG9wZW57XFxjaGFyYFx1Mjk4M319Iik7ZmUoIlxcckJyYWNlIiwiXFxodG1sQG1hdGhtbHtcXG1hdGhjbG9zZXtdXFxta2Vybi0zLjJtdVxcfX19e1xcbWF0aGNsb3Nle1xcY2hhcmBcdTI5ODR9fSIpO2ZlKCJcdTI5ODMiLCJcXGxCcmFjZSIpO2ZlKCJcdTI5ODQiLCJcXHJCcmFjZSIpO2ZlKCJcXG1pbnVzbyIsIlxcbWF0aGJpbntcXGh0bWxAbWF0aG1se3tcXG1hdGhybGFwe1xcbWF0aGNob2ljZXtcXGtlcm57MC4xNDVlbX19e1xca2VybnswLjE0NWVtfX17XFxrZXJuezAuMTAxNWVtfX17XFxrZXJuezAuMDcyNWVtfX1cXGNpcmN9ey19fX17XFxjaGFyYFx1MjlCNX19Iik7ZmUoIlx1MjlCNSIsIlxcbWludXNvIik7ZmUoIlxcZGFyciIsIlxcZG93bmFycm93Iik7ZmUoIlxcZEFyciIsIlxcRG93bmFycm93Iik7ZmUoIlxcRGFyciIsIlxcRG93bmFycm93Iik7ZmUoIlxcbGFuZyIsIlxcbGFuZ2xlIik7ZmUoIlxccmFuZyIsIlxccmFuZ2xlIik7ZmUoIlxcdWFyciIsIlxcdXBhcnJvdyIpO2ZlKCJcXHVBcnIiLCJcXFVwYXJyb3ciKTtmZSgiXFxVYXJyIiwiXFxVcGFycm93Iik7ZmUoIlxcTiIsIlxcbWF0aGJie059Iik7ZmUoIlxcUiIsIlxcbWF0aGJie1J9Iik7ZmUoIlxcWiIsIlxcbWF0aGJie1p9Iik7ZmUoIlxcYWxlZiIsIlxcYWxlcGgiKTtmZSgiXFxhbGVmc3ltIiwiXFxhbGVwaCIpO2ZlKCJcXEFscGhhIiwiXFxtYXRocm17QX0iKTtmZSgiXFxCZXRhIiwiXFxtYXRocm17Qn0iKTtmZSgiXFxidWxsIiwiXFxidWxsZXQiKTtmZSgiXFxDaGkiLCJcXG1hdGhybXtYfSIpO2ZlKCJcXGNsdWJzIiwiXFxjbHVic3VpdCIpO2ZlKCJcXGNudW1zIiwiXFxtYXRoYmJ7Q30iKTtmZSgiXFxDb21wbGV4IiwiXFxtYXRoYmJ7Q30iKTtmZSgiXFxEYWdnZXIiLCJcXGRkYWdnZXIiKTtmZSgiXFxkaWFtb25kcyIsIlxcZGlhbW9uZHN1aXQiKTtmZSgiXFxlbXB0eSIsIlxcZW1wdHlzZXQiKTtmZSgiXFxFcHNpbG9uIiwiXFxtYXRocm17RX0iKTtmZSgiXFxFdGEiLCJcXG1hdGhybXtIfSIpO2ZlKCJcXGV4aXN0IiwiXFxleGlzdHMiKTtmZSgiXFxoYXJyIiwiXFxsZWZ0cmlnaHRhcnJvdyIpO2ZlKCJcXGhBcnIiLCJcXExlZnRyaWdodGFycm93Iik7ZmUoIlxcSGFyciIsIlxcTGVmdHJpZ2h0YXJyb3ciKTtmZSgiXFxoZWFydHMiLCJcXGhlYXJ0c3VpdCIpO2ZlKCJcXGltYWdlIiwiXFxJbSIpO2ZlKCJcXGluZmluIiwiXFxpbmZ0eSIpO2ZlKCJcXElvdGEiLCJcXG1hdGhybXtJfSIpO2ZlKCJcXGlzaW4iLCJcXGluIik7ZmUoIlxcS2FwcGEiLCJcXG1hdGhybXtLfSIpO2ZlKCJcXGxhcnIiLCJcXGxlZnRhcnJvdyIpO2ZlKCJcXGxBcnIiLCJcXExlZnRhcnJvdyIpO2ZlKCJcXExhcnIiLCJcXExlZnRhcnJvdyIpO2ZlKCJcXGxyYXJyIiwiXFxsZWZ0cmlnaHRhcnJvdyIpO2ZlKCJcXGxyQXJyIiwiXFxMZWZ0cmlnaHRhcnJvdyIpO2ZlKCJcXExyYXJyIiwiXFxMZWZ0cmlnaHRhcnJvdyIpO2ZlKCJcXE11IiwiXFxtYXRocm17TX0iKTtmZSgiXFxuYXRudW1zIiwiXFxtYXRoYmJ7Tn0iKTtmZSgiXFxOdSIsIlxcbWF0aHJte059Iik7ZmUoIlxcT21pY3JvbiIsIlxcbWF0aHJte099Iik7ZmUoIlxccGx1c21uIiwiXFxwbSIpO2ZlKCJcXHJhcnIiLCJcXHJpZ2h0YXJyb3ciKTtmZSgiXFxyQXJyIiwiXFxSaWdodGFycm93Iik7ZmUoIlxcUmFyciIsIlxcUmlnaHRhcnJvdyIpO2ZlKCJcXHJlYWwiLCJcXFJlIik7ZmUoIlxccmVhbHMiLCJcXG1hdGhiYntSfSIpO2ZlKCJcXFJlYWxzIiwiXFxtYXRoYmJ7Un0iKTtmZSgiXFxSaG8iLCJcXG1hdGhybXtQfSIpO2ZlKCJcXHNkb3QiLCJcXGNkb3QiKTtmZSgiXFxzZWN0IiwiXFxTIik7ZmUoIlxcc3BhZGVzIiwiXFxzcGFkZXN1aXQiKTtmZSgiXFxzdWIiLCJcXHN1YnNldCIpO2ZlKCJcXHN1YmUiLCJcXHN1YnNldGVxIik7ZmUoIlxcc3VwZSIsIlxcc3Vwc2V0ZXEiKTtmZSgiXFxUYXUiLCJcXG1hdGhybXtUfSIpO2ZlKCJcXHRoZXRhc3ltIiwiXFx2YXJ0aGV0YSIpO2ZlKCJcXHdlaWVycCIsIlxcd3AiKTtmZSgiXFxaZXRhIiwiXFxtYXRocm17Wn0iKTtmZSgiXFxhcmdtaW4iLCJcXERPVFNCXFxvcGVyYXRvcm5hbWUqe2FyZ1xcLG1pbn0iKTtmZSgiXFxhcmdtYXgiLCJcXERPVFNCXFxvcGVyYXRvcm5hbWUqe2FyZ1xcLG1heH0iKTtmZSgiXFxwbGltIiwiXFxET1RTQlxcbWF0aG9we1xcb3BlcmF0b3JuYW1le3BsaW19fVxcbGltaXRzIik7ZmUoIlxcYnJhIiwiXFxtYXRoaW5uZXJ7XFxsYW5nbGV7IzF9fH0iKTtmZSgiXFxrZXQiLCJcXG1hdGhpbm5lcnt8eyMxfVxccmFuZ2xlfSIpO2ZlKCJcXGJyYWtldCIsIlxcbWF0aGlubmVye1xcbGFuZ2xleyMxfVxccmFuZ2xlfSIpO2ZlKCJcXEJyYSIsIlxcbGVmdFxcbGFuZ2xlIzFcXHJpZ2h0fCIpO2ZlKCJcXEtldCIsIlxcbGVmdHwjMVxccmlnaHRcXHJhbmdsZSIpO0RHPW8odD0+ZT0+e3ZhciByPWUuY29uc3VtZUFyZygpLnRva2VucyxuPWUuY29uc3VtZUFyZygpLnRva2VucyxpPWUuY29uc3VtZUFyZygpLnRva2VucyxhPWUuY29uc3VtZUFyZygpLnRva2VucyxzPWUubWFjcm9zLmdldCgifCIpLGw9ZS5tYWNyb3MuZ2V0KCJcXHwiKTtlLm1hY3Jvcy5iZWdpbkdyb3VwKCk7dmFyIHU9byhkPT5wPT57dCYmKHAubWFjcm9zLnNldCgifCIscyksaS5sZW5ndGgmJnAubWFjcm9zLnNldCgiXFx8IixsKSk7dmFyIG09ZDtpZighZCYmaS5sZW5ndGgpe3ZhciBnPXAuZnV0dXJlKCk7Zy50ZXh0PT09InwiJiYocC5wb3BUb2tlbigpLG09ITApfXJldHVybnt0b2tlbnM6bT9pOm4sbnVtQXJnczowfX0sIm1pZE1hY3JvIik7ZS5tYWNyb3Muc2V0KCJ8Iix1KCExKSksaS5sZW5ndGgmJmUubWFjcm9zLnNldCgiXFx8Iix1KCEwKSk7dmFyIGg9ZS5jb25zdW1lQXJnKCkudG9rZW5zLGY9ZS5leHBhbmRUb2tlbnMoWy4uLmEsLi4uaCwuLi5yXSk7cmV0dXJuIGUubWFjcm9zLmVuZEdyb3VwKCkse3Rva2VuczpmLnJldmVyc2UoKSxudW1BcmdzOjB9fSwiYnJha2V0SGVscGVyIik7ZmUoIlxcYnJhQGtldCIsREcoITEpKTtmZSgiXFxicmFAc2V0IixERyghMCkpO2ZlKCJcXEJyYWtldCIsIlxcYnJhQGtldHtcXGxlZnRcXGxhbmdsZX17XFwsXFxtaWRkbGVcXHZlcnRcXCx9e1xcLFxcbWlkZGxlXFx2ZXJ0XFwsfXtcXHJpZ2h0XFxyYW5nbGV9Iik7ZmUoIlxcU2V0IiwiXFxicmFAc2V0e1xcbGVmdFxce1xcOn17XFw7XFxtaWRkbGVcXHZlcnRcXDt9e1xcO1xcbWlkZGxlXFxWZXJ0XFw7fXtcXDpcXHJpZ2h0XFx9fSIpO2ZlKCJcXHNldCIsIlxcYnJhQHNldHtcXHtcXCx9e1xcbWlkfXt9e1xcLFxcfX0iKTtmZSgiXFxhbmdsbiIsIntcXGFuZ2wgbn0iKTtmZSgiXFxibHVlIiwiXFx0ZXh0Y29sb3J7IyM2NDk1ZWR9eyMxfSIpO2ZlKCJcXG9yYW5nZSIsIlxcdGV4dGNvbG9yeyMjZmZhNTAwfXsjMX0iKTtmZSgiXFxwaW5rIiwiXFx0ZXh0Y29sb3J7IyNmZjAwYWZ9eyMxfSIpO2ZlKCJcXHJlZCIsIlxcdGV4dGNvbG9yeyMjZGYwMDMwfXsjMX0iKTtmZSgiXFxncmVlbiIsIlxcdGV4dGNvbG9yeyMjMjhhZTdifXsjMX0iKTtmZSgiXFxncmF5IiwiXFx0ZXh0Y29sb3J7Z3JheX17IzF9Iik7ZmUoIlxccHVycGxlIiwiXFx0ZXh0Y29sb3J7IyM5ZDM4YmR9eyMxfSIpO2ZlKCJcXGJsdWVBIiwiXFx0ZXh0Y29sb3J7IyNjY2ZhZmZ9eyMxfSIpO2ZlKCJcXGJsdWVCIiwiXFx0ZXh0Y29sb3J7IyM4MGY2ZmZ9eyMxfSIpO2ZlKCJcXGJsdWVDIiwiXFx0ZXh0Y29sb3J7IyM2M2Q5ZWF9eyMxfSIpO2ZlKCJcXGJsdWVEIiwiXFx0ZXh0Y29sb3J7IyMxMWFjY2R9eyMxfSIpO2ZlKCJcXGJsdWVFIiwiXFx0ZXh0Y29sb3J7IyMwYzdmOTl9eyMxfSIpO2ZlKCJcXHRlYWxBIiwiXFx0ZXh0Y29sb3J7IyM5NGZmZjV9eyMxfSIpO2ZlKCJcXHRlYWxCIiwiXFx0ZXh0Y29sb3J7IyMyNmVkZDV9eyMxfSIpO2ZlKCJcXHRlYWxDIiwiXFx0ZXh0Y29sb3J7IyMwMWQxYzF9eyMxfSIpO2ZlKCJcXHRlYWxEIiwiXFx0ZXh0Y29sb3J7IyMwMWE5OTV9eyMxfSIpO2ZlKCJcXHRlYWxFIiwiXFx0ZXh0Y29sb3J7IyMyMDgxNzB9eyMxfSIpO2ZlKCJcXGdyZWVuQSIsIlxcdGV4dGNvbG9yeyMjYjZmZmIwfXsjMX0iKTtmZSgiXFxncmVlbkIiLCJcXHRleHRjb2xvcnsjIzhhZjI4MX17IzF9Iik7ZmUoIlxcZ3JlZW5DIiwiXFx0ZXh0Y29sb3J7IyM3NGNmNzB9eyMxfSIpO2ZlKCJcXGdyZWVuRCIsIlxcdGV4dGNvbG9yeyMjMWZhYjU0fXsjMX0iKTtmZSgiXFxncmVlbkUiLCJcXHRleHRjb2xvcnsjIzBkOTIzZn17IzF9Iik7ZmUoIlxcZ29sZEEiLCJcXHRleHRjb2xvcnsjI2ZmZDBhOX17IzF9Iik7ZmUoIlxcZ29sZEIiLCJcXHRleHRjb2xvcnsjI2ZmYmI3MX17IzF9Iik7ZmUoIlxcZ29sZEMiLCJcXHRleHRjb2xvcnsjI2ZmOWMzOX17IzF9Iik7ZmUoIlxcZ29sZEQiLCJcXHRleHRjb2xvcnsjI2UwN2QxMH17IzF9Iik7ZmUoIlxcZ29sZEUiLCJcXHRleHRjb2xvcnsjI2E3NWEwNX17IzF9Iik7ZmUoIlxccmVkQSIsIlxcdGV4dGNvbG9yeyMjZmNhOWE5fXsjMX0iKTtmZSgiXFxyZWRCIiwiXFx0ZXh0Y29sb3J7IyNmZjg0ODJ9eyMxfSIpO2ZlKCJcXHJlZEMiLCJcXHRleHRjb2xvcnsjI2Y5Njg1ZH17IzF9Iik7ZmUoIlxccmVkRCIsIlxcdGV4dGNvbG9yeyMjZTg0ZDM5fXsjMX0iKTtmZSgiXFxyZWRFIiwiXFx0ZXh0Y29sb3J7IyNiYzI2MTJ9eyMxfSIpO2ZlKCJcXG1hcm9vbkEiLCJcXHRleHRjb2xvcnsjI2ZmYmRlMH17IzF9Iik7ZmUoIlxcbWFyb29uQiIsIlxcdGV4dGNvbG9yeyMjZmY5MmM2fXsjMX0iKTtmZSgiXFxtYXJvb25DIiwiXFx0ZXh0Y29sb3J7IyNlZDVmYTZ9eyMxfSIpO2ZlKCJcXG1hcm9vbkQiLCJcXHRleHRjb2xvcnsjI2NhMzM3Y317IzF9Iik7ZmUoIlxcbWFyb29uRSIsIlxcdGV4dGNvbG9yeyMjOWUwMzRlfXsjMX0iKTtmZSgiXFxwdXJwbGVBIiwiXFx0ZXh0Y29sb3J7IyNkZGQ3ZmZ9eyMxfSIpO2ZlKCJcXHB1cnBsZUIiLCJcXHRleHRjb2xvcnsjI2M2YjlmY317IzF9Iik7ZmUoIlxccHVycGxlQyIsIlxcdGV4dGNvbG9yeyMjYWE4N2ZmfXsjMX0iKTtmZSgiXFxwdXJwbGVEIiwiXFx0ZXh0Y29sb3J7IyM3ODU0YWJ9eyMxfSIpO2ZlKCJcXHB1cnBsZUUiLCJcXHRleHRjb2xvcnsjIzU0M2I3OH17IzF9Iik7ZmUoIlxcbWludEEiLCJcXHRleHRjb2xvcnsjI2Y1ZjllOH17IzF9Iik7ZmUoIlxcbWludEIiLCJcXHRleHRjb2xvcnsjI2VkZjJkZn17IzF9Iik7ZmUoIlxcbWludEMiLCJcXHRleHRjb2xvcnsjI2UwZTVjY317IzF9Iik7ZmUoIlxcZ3JheUEiLCJcXHRleHRjb2xvcnsjI2Y2ZjdmN317IzF9Iik7ZmUoIlxcZ3JheUIiLCJcXHRleHRjb2xvcnsjI2YwZjFmMn17IzF9Iik7ZmUoIlxcZ3JheUMiLCJcXHRleHRjb2xvcnsjI2UzZTVlNn17IzF9Iik7ZmUoIlxcZ3JheUQiLCJcXHRleHRjb2xvcnsjI2Q2ZDhkYX17IzF9Iik7ZmUoIlxcZ3JheUUiLCJcXHRleHRjb2xvcnsjI2JhYmVjMn17IzF9Iik7ZmUoIlxcZ3JheUYiLCJcXHRleHRjb2xvcnsjIzg4OGQ5M317IzF9Iik7ZmUoIlxcZ3JheUciLCJcXHRleHRjb2xvcnsjIzYyNjU2OX17IzF9Iik7ZmUoIlxcZ3JheUgiLCJcXHRleHRjb2xvcnsjIzNiM2U0MH17IzF9Iik7ZmUoIlxcZ3JheUkiLCJcXHRleHRjb2xvcnsjIzIxMjQyY317IzF9Iik7ZmUoIlxca2FCbHVlIiwiXFx0ZXh0Y29sb3J7IyMzMTQ0NTN9eyMxfSIpO2ZlKCJcXGthR3JlZW4iLCJcXHRleHRjb2xvcnsjIzcxQjMwN317IzF9Iik7TEc9eyJeIjohMCxfOiEwLCJcXGxpbWl0cyI6ITAsIlxcbm9saW1pdHMiOiEwfSxJNz1jbGFzc3tzdGF0aWN7byh0aGlzLCJNYWNyb0V4cGFuZGVyIil9Y29uc3RydWN0b3IoZSxyLG4pe3RoaXMuc2V0dGluZ3M9dm9pZCAwLHRoaXMuZXhwYW5zaW9uQ291bnQ9dm9pZCAwLHRoaXMubGV4ZXI9dm9pZCAwLHRoaXMubWFjcm9zPXZvaWQgMCx0aGlzLnN0YWNrPXZvaWQgMCx0aGlzLm1vZGU9dm9pZCAwLHRoaXMuc2V0dGluZ3M9cix0aGlzLmV4cGFuc2lvbkNvdW50PTAsdGhpcy5mZWVkKGUpLHRoaXMubWFjcm9zPW5ldyBNNyhWNGUsci5tYWNyb3MpLHRoaXMubW9kZT1uLHRoaXMuc3RhY2s9W119ZmVlZChlKXt0aGlzLmxleGVyPW5ldyB5MyhlLHRoaXMuc2V0dGluZ3MpfXN3aXRjaE1vZGUoZSl7dGhpcy5tb2RlPWV9YmVnaW5Hcm91cCgpe3RoaXMubWFjcm9zLmJlZ2luR3JvdXAoKX1lbmRHcm91cCgpe3RoaXMubWFjcm9zLmVuZEdyb3VwKCl9ZW5kR3JvdXBzKCl7dGhpcy5tYWNyb3MuZW5kR3JvdXBzKCl9ZnV0dXJlKCl7cmV0dXJuIHRoaXMuc3RhY2subGVuZ3RoPT09MCYmdGhpcy5wdXNoVG9rZW4odGhpcy5sZXhlci5sZXgoKSksdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXX1wb3BUb2tlbigpe3JldHVybiB0aGlzLmZ1dHVyZSgpLHRoaXMuc3RhY2sucG9wKCl9cHVzaFRva2VuKGUpe3RoaXMuc3RhY2sucHVzaChlKX1wdXNoVG9rZW5zKGUpe3RoaXMuc3RhY2sucHVzaCguLi5lKX1zY2FuQXJndW1lbnQoZSl7dmFyIHIsbixpO2lmKGUpe2lmKHRoaXMuY29uc3VtZVNwYWNlcygpLHRoaXMuZnV0dXJlKCkudGV4dCE9PSJbIilyZXR1cm4gbnVsbDtyPXRoaXMucG9wVG9rZW4oKSx7dG9rZW5zOmksZW5kOm59PXRoaXMuY29uc3VtZUFyZyhbIl0iXSl9ZWxzZSh7dG9rZW5zOmksc3RhcnQ6cixlbmQ6bn09dGhpcy5jb25zdW1lQXJnKCkpO3JldHVybiB0aGlzLnB1c2hUb2tlbihuZXcgU28oIkVPRiIsbi5sb2MpKSx0aGlzLnB1c2hUb2tlbnMoaSksci5yYW5nZShuLCIiKX1jb25zdW1lU3BhY2VzKCl7Zm9yKDs7KXt2YXIgZT10aGlzLmZ1dHVyZSgpO2lmKGUudGV4dD09PSIgIil0aGlzLnN0YWNrLnBvcCgpO2Vsc2UgYnJlYWt9fWNvbnN1bWVBcmcoZSl7dmFyIHI9W10sbj1lJiZlLmxlbmd0aD4wO258fHRoaXMuY29uc3VtZVNwYWNlcygpO3ZhciBpPXRoaXMuZnV0dXJlKCksYSxzPTAsbD0wO2Rve2lmKGE9dGhpcy5wb3BUb2tlbigpLHIucHVzaChhKSxhLnRleHQ9PT0ieyIpKytzO2Vsc2UgaWYoYS50ZXh0PT09In0iKXtpZigtLXMscz09PS0xKXRocm93IG5ldyBndCgiRXh0cmEgfSIsYSl9ZWxzZSBpZihhLnRleHQ9PT0iRU9GIil0aHJvdyBuZXcgZ3QoIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0IGluIGEgbWFjcm8gYXJndW1lbnQsIGV4cGVjdGVkICciKyhlJiZuP2VbbF06In0iKSsiJyIsYSk7aWYoZSYmbilpZigocz09PTB8fHM9PT0xJiZlW2xdPT09InsiKSYmYS50ZXh0PT09ZVtsXSl7aWYoKytsLGw9PT1lLmxlbmd0aCl7ci5zcGxpY2UoLWwsbCk7YnJlYWt9fWVsc2UgbD0wfXdoaWxlKHMhPT0wfHxuKTtyZXR1cm4gaS50ZXh0PT09InsiJiZyW3IubGVuZ3RoLTFdLnRleHQ9PT0ifSImJihyLnBvcCgpLHIuc2hpZnQoKSksci5yZXZlcnNlKCkse3Rva2VuczpyLHN0YXJ0OmksZW5kOmF9fWNvbnN1bWVBcmdzKGUscil7aWYocil7aWYoci5sZW5ndGghPT1lKzEpdGhyb3cgbmV3IGd0KCJUaGUgbGVuZ3RoIG9mIGRlbGltaXRlcnMgZG9lc24ndCBtYXRjaCB0aGUgbnVtYmVyIG9mIGFyZ3MhIik7Zm9yKHZhciBuPXJbMF0saT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgYT10aGlzLnBvcFRva2VuKCk7aWYobltpXSE9PWEudGV4dCl0aHJvdyBuZXcgZ3QoIlVzZSBvZiB0aGUgbWFjcm8gZG9lc24ndCBtYXRjaCBpdHMgZGVmaW5pdGlvbiIsYSl9fWZvcih2YXIgcz1bXSxsPTA7bDxlO2wrKylzLnB1c2godGhpcy5jb25zdW1lQXJnKHImJnJbbCsxXSkudG9rZW5zKTtyZXR1cm4gc31jb3VudEV4cGFuc2lvbihlKXtpZih0aGlzLmV4cGFuc2lvbkNvdW50Kz1lLHRoaXMuZXhwYW5zaW9uQ291bnQ+dGhpcy5zZXR0aW5ncy5tYXhFeHBhbmQpdGhyb3cgbmV3IGd0KCJUb28gbWFueSBleHBhbnNpb25zOiBpbmZpbml0ZSBsb29wIG9yIG5lZWQgdG8gaW5jcmVhc2UgbWF4RXhwYW5kIHNldHRpbmciKX1leHBhbmRPbmNlKGUpe3ZhciByPXRoaXMucG9wVG9rZW4oKSxuPXIudGV4dCxpPXIubm9leHBhbmQ/bnVsbDp0aGlzLl9nZXRFeHBhbnNpb24obik7aWYoaT09bnVsbHx8ZSYmaS51bmV4cGFuZGFibGUpe2lmKGUmJmk9PW51bGwmJm5bMF09PT0iXFwiJiYhdGhpcy5pc0RlZmluZWQobikpdGhyb3cgbmV3IGd0KCJVbmRlZmluZWQgY29udHJvbCBzZXF1ZW5jZTogIituKTtyZXR1cm4gdGhpcy5wdXNoVG9rZW4ociksITF9dGhpcy5jb3VudEV4cGFuc2lvbigxKTt2YXIgYT1pLnRva2VucyxzPXRoaXMuY29uc3VtZUFyZ3MoaS5udW1BcmdzLGkuZGVsaW1pdGVycyk7aWYoaS5udW1BcmdzKXthPWEuc2xpY2UoKTtmb3IodmFyIGw9YS5sZW5ndGgtMTtsPj0wOy0tbCl7dmFyIHU9YVtsXTtpZih1LnRleHQ9PT0iIyIpe2lmKGw9PT0wKXRocm93IG5ldyBndCgiSW5jb21wbGV0ZSBwbGFjZWhvbGRlciBhdCBlbmQgb2YgbWFjcm8gYm9keSIsdSk7aWYodT1hWy0tbF0sdS50ZXh0PT09IiMiKWEuc3BsaWNlKGwrMSwxKTtlbHNlIGlmKC9eWzEtOV0kLy50ZXN0KHUudGV4dCkpYS5zcGxpY2UobCwyLC4uLnNbK3UudGV4dC0xXSk7ZWxzZSB0aHJvdyBuZXcgZ3QoIk5vdCBhIHZhbGlkIGFyZ3VtZW50IG51bWJlciIsdSl9fX1yZXR1cm4gdGhpcy5wdXNoVG9rZW5zKGEpLGEubGVuZ3RofWV4cGFuZEFmdGVyRnV0dXJlKCl7cmV0dXJuIHRoaXMuZXhwYW5kT25jZSgpLHRoaXMuZnV0dXJlKCl9ZXhwYW5kTmV4dFRva2VuKCl7Zm9yKDs7KWlmKHRoaXMuZXhwYW5kT25jZSgpPT09ITEpe3ZhciBlPXRoaXMuc3RhY2sucG9wKCk7cmV0dXJuIGUudHJlYXRBc1JlbGF4JiYoZS50ZXh0PSJcXHJlbGF4IiksZX10aHJvdyBuZXcgRXJyb3J9ZXhwYW5kTWFjcm8oZSl7cmV0dXJuIHRoaXMubWFjcm9zLmhhcyhlKT90aGlzLmV4cGFuZFRva2VucyhbbmV3IFNvKGUpXSk6dm9pZCAwfWV4cGFuZFRva2VucyhlKXt2YXIgcj1bXSxuPXRoaXMuc3RhY2subGVuZ3RoO2Zvcih0aGlzLnB1c2hUb2tlbnMoZSk7dGhpcy5zdGFjay5sZW5ndGg+bjspaWYodGhpcy5leHBhbmRPbmNlKCEwKT09PSExKXt2YXIgaT10aGlzLnN0YWNrLnBvcCgpO2kudHJlYXRBc1JlbGF4JiYoaS5ub2V4cGFuZD0hMSxpLnRyZWF0QXNSZWxheD0hMSksci5wdXNoKGkpfXJldHVybiB0aGlzLmNvdW50RXhwYW5zaW9uKHIubGVuZ3RoKSxyfWV4cGFuZE1hY3JvQXNUZXh0KGUpe3ZhciByPXRoaXMuZXhwYW5kTWFjcm8oZSk7cmV0dXJuIHImJnIubWFwKG49Pm4udGV4dCkuam9pbigiIil9X2dldEV4cGFuc2lvbihlKXt2YXIgcj10aGlzLm1hY3Jvcy5nZXQoZSk7aWYocj09bnVsbClyZXR1cm4gcjtpZihlLmxlbmd0aD09PTEpe3ZhciBuPXRoaXMubGV4ZXIuY2F0Y29kZXNbZV07aWYobiE9bnVsbCYmbiE9PTEzKXJldHVybn12YXIgaT10eXBlb2Ygcj09ImZ1bmN0aW9uIj9yKHRoaXMpOnI7aWYodHlwZW9mIGk9PSJzdHJpbmciKXt2YXIgYT0wO2lmKGkuaW5kZXhPZigiIyIpIT09LTEpZm9yKHZhciBzPWkucmVwbGFjZSgvIyMvZywiIik7cy5pbmRleE9mKCIjIisoYSsxKSkhPT0tMTspKythO2Zvcih2YXIgbD1uZXcgeTMoaSx0aGlzLnNldHRpbmdzKSx1PVtdLGg9bC5sZXgoKTtoLnRleHQhPT0iRU9GIjspdS5wdXNoKGgpLGg9bC5sZXgoKTt1LnJldmVyc2UoKTt2YXIgZj17dG9rZW5zOnUsbnVtQXJnczphfTtyZXR1cm4gZn1yZXR1cm4gaX1pc0RlZmluZWQoZSl7cmV0dXJuIHRoaXMubWFjcm9zLmhhcyhlKXx8aGguaGFzT3duUHJvcGVydHkoZSl8fEFuLm1hdGguaGFzT3duUHJvcGVydHkoZSl8fEFuLnRleHQuaGFzT3duUHJvcGVydHkoZSl8fExHLmhhc093blByb3BlcnR5KGUpfWlzRXhwYW5kYWJsZShlKXt2YXIgcj10aGlzLm1hY3Jvcy5nZXQoZSk7cmV0dXJuIHIhPW51bGw/dHlwZW9mIHI9PSJzdHJpbmcifHx0eXBlb2Ygcj09ImZ1bmN0aW9uInx8IXIudW5leHBhbmRhYmxlOmhoLmhhc093blByb3BlcnR5KGUpJiYhaGhbZV0ucHJpbWl0aXZlfX0sUHo9L15b4oKK4oKL4oKM4oKN4oKO4oKA4oKB4oKC4oKD4oKE4oKF4oKG4oKH4oKI4oKJ4oKQ4oKR4oKV4bWi4rG84oKW4oKX4oKY4oKZ4oKS4oKa4bWj4oKb4oKc4bWk4bWl4oKT4bWm4bWn4bWo4bWp4bWqXS8sbDM9T2JqZWN0LmZyZWV6ZSh7Ilx1MjA4QSI6IisiLCJcdTIwOEIiOiItIiwiXHUyMDhDIjoiPSIsIlx1MjA4RCI6IigiLCJcdTIwOEUiOiIpIiwiXHUyMDgwIjoiMCIsIlx1MjA4MSI6IjEiLCJcdTIwODIiOiIyIiwiXHUyMDgzIjoiMyIsIlx1MjA4NCI6IjQiLCJcdTIwODUiOiI1IiwiXHUyMDg2IjoiNiIsIlx1MjA4NyI6IjciLCJcdTIwODgiOiI4IiwiXHUyMDg5IjoiOSIsIlx1MjA5MCI6ImEiLCJcdTIwOTEiOiJlIiwiXHUyMDk1IjoiaCIsIlx1MUQ2MiI6ImkiLCJcdTJDN0MiOiJqIiwiXHUyMDk2IjoiayIsIlx1MjA5NyI6ImwiLCJcdTIwOTgiOiJtIiwiXHUyMDk5IjoibiIsIlx1MjA5MiI6Im8iLCJcdTIwOUEiOiJwIiwiXHUxRDYzIjoiciIsIlx1MjA5QiI6InMiLCJcdTIwOUMiOiJ0IiwiXHUxRDY0IjoidSIsIlx1MUQ2NSI6InYiLCJcdTIwOTMiOiJ4IiwiXHUxRDY2IjoiXHUwM0IyIiwiXHUxRDY3IjoiXHUwM0IzIiwiXHUxRDY4IjoiXHUwM0MxIiwiXHUxRDY5IjoiXHUwM0Q1IiwiXHUxRDZBIjoiXHUwM0M3IiwiXHUyMDdBIjoiKyIsIlx1MjA3QiI6Ii0iLCJcdTIwN0MiOiI9IiwiXHUyMDdEIjoiKCIsIlx1MjA3RSI6IikiLCJcdTIwNzAiOiIwIiwiXHhCOSI6IjEiLCJceEIyIjoiMiIsIlx4QjMiOiIzIiwiXHUyMDc0IjoiNCIsIlx1MjA3NSI6IjUiLCJcdTIwNzYiOiI2IiwiXHUyMDc3IjoiNyIsIlx1MjA3OCI6IjgiLCJcdTIwNzkiOiI5IiwiXHUxRDJDIjoiQSIsIlx1MUQyRSI6IkIiLCJcdTFEMzAiOiJEIiwiXHUxRDMxIjoiRSIsIlx1MUQzMyI6IkciLCJcdTFEMzQiOiJIIiwiXHUxRDM1IjoiSSIsIlx1MUQzNiI6IkoiLCJcdTFEMzciOiJLIiwiXHUxRDM4IjoiTCIsIlx1MUQzOSI6Ik0iLCJcdTFEM0EiOiJOIiwiXHUxRDNDIjoiTyIsIlx1MUQzRSI6IlAiLCJcdTFEM0YiOiJSIiwiXHUxRDQwIjoiVCIsIlx1MUQ0MSI6IlUiLCJcdTJDN0QiOiJWIiwiXHUxRDQyIjoiVyIsIlx1MUQ0MyI6ImEiLCJcdTFENDciOiJiIiwiXHUxRDlDIjoiYyIsIlx1MUQ0OCI6ImQiLCJcdTFENDkiOiJlIiwiXHUxREEwIjoiZiIsIlx1MUQ0RCI6ImciLFx1MDJCMDoiaCIsIlx1MjA3MSI6ImkiLFx1MDJCMjoiaiIsIlx1MUQ0RiI6ImsiLFx1MDJFMToibCIsIlx1MUQ1MCI6Im0iLFx1MjA3RjoibiIsIlx1MUQ1MiI6Im8iLCJcdTFENTYiOiJwIixcdTAyQjM6InIiLFx1MDJFMjoicyIsIlx1MUQ1NyI6InQiLCJcdTFENTgiOiJ1IiwiXHUxRDVCIjoidiIsXHUwMkI3OiJ3IixcdTAyRTM6IngiLFx1MDJCODoieSIsIlx1MURCQiI6InoiLCJcdTFENUQiOiJcdTAzQjIiLCJcdTFENUUiOiJcdTAzQjMiLCJcdTFENUYiOiJcdTAzQjQiLCJcdTFENjAiOiJcdTAzRDUiLCJcdTFENjEiOiJcdTAzQzciLCJcdTFEQkYiOiJcdTAzQjgifSksVDc9eyJcdTAzMDEiOnt0ZXh0OiJcXCciLG1hdGg6IlxcYWN1dGUifSwiXHUwMzAwIjp7dGV4dDoiXFxgIixtYXRoOiJcXGdyYXZlIn0sIlx1MDMwOCI6e3RleHQ6J1xcIicsbWF0aDoiXFxkZG90In0sIlx1MDMwMyI6e3RleHQ6IlxcfiIsbWF0aDoiXFx0aWxkZSJ9LCJcdTAzMDQiOnt0ZXh0OiJcXD0iLG1hdGg6IlxcYmFyIn0sIlx1MDMwNiI6e3RleHQ6IlxcdSIsbWF0aDoiXFxicmV2ZSJ9LCJcdTAzMEMiOnt0ZXh0OiJcXHYiLG1hdGg6IlxcY2hlY2sifSwiXHUwMzAyIjp7dGV4dDoiXFxeIixtYXRoOiJcXGhhdCJ9LCJcdTAzMDciOnt0ZXh0OiJcXC4iLG1hdGg6IlxcZG90In0sIlx1MDMwQSI6e3RleHQ6IlxcciIsbWF0aDoiXFxtYXRocmluZyJ9LCJcdTAzMEIiOnt0ZXh0OiJcXEgifSwiXHUwMzI3Ijp7dGV4dDoiXFxjIn19LEJ6PXtcdTAwRTE6ImFcdTAzMDEiLFx1MDBFMDoiYVx1MDMwMCIsXHUwMEU0OiJhXHUwMzA4IixcdTAxREY6ImFcdTAzMDhcdTAzMDQiLFx1MDBFMzoiYVx1MDMwMyIsXHUwMTAxOiJhXHUwMzA0IixcdTAxMDM6ImFcdTAzMDYiLFx1MUVBRjoiYVx1MDMwNlx1MDMwMSIsXHUxRUIxOiJhXHUwMzA2XHUwMzAwIixcdTFFQjU6ImFcdTAzMDZcdTAzMDMiLFx1MDFDRToiYVx1MDMwQyIsXHUwMEUyOiJhXHUwMzAyIixcdTFFQTU6ImFcdTAzMDJcdTAzMDEiLFx1MUVBNzoiYVx1MDMwMlx1MDMwMCIsXHUxRUFCOiJhXHUwMzAyXHUwMzAzIixcdTAyMjc6ImFcdTAzMDciLFx1MDFFMToiYVx1MDMwN1x1MDMwNCIsXHUwMEU1OiJhXHUwMzBBIixcdTAxRkI6ImFcdTAzMEFcdTAzMDEiLFx1MUUwMzoiYlx1MDMwNyIsXHUwMTA3OiJjXHUwMzAxIixcdTFFMDk6ImNcdTAzMjdcdTAzMDEiLFx1MDEwRDoiY1x1MDMwQyIsXHUwMTA5OiJjXHUwMzAyIixcdTAxMEI6ImNcdTAzMDciLFx1MDBFNzoiY1x1MDMyNyIsXHUwMTBGOiJkXHUwMzBDIixcdTFFMEI6ImRcdTAzMDciLFx1MUUxMToiZFx1MDMyNyIsXHUwMEU5OiJlXHUwMzAxIixcdTAwRTg6ImVcdTAzMDAiLFx1MDBFQjoiZVx1MDMwOCIsXHUxRUJEOiJlXHUwMzAzIixcdTAxMTM6ImVcdTAzMDQiLFx1MUUxNzoiZVx1MDMwNFx1MDMwMSIsXHUxRTE1OiJlXHUwMzA0XHUwMzAwIixcdTAxMTU6ImVcdTAzMDYiLFx1MUUxRDoiZVx1MDMyN1x1MDMwNiIsXHUwMTFCOiJlXHUwMzBDIixcdTAwRUE6ImVcdTAzMDIiLFx1MUVCRjoiZVx1MDMwMlx1MDMwMSIsXHUxRUMxOiJlXHUwMzAyXHUwMzAwIixcdTFFQzU6ImVcdTAzMDJcdTAzMDMiLFx1MDExNzoiZVx1MDMwNyIsXHUwMjI5OiJlXHUwMzI3IixcdTFFMUY6ImZcdTAzMDciLFx1MDFGNToiZ1x1MDMwMSIsXHUxRTIxOiJnXHUwMzA0IixcdTAxMUY6ImdcdTAzMDYiLFx1MDFFNzoiZ1x1MDMwQyIsXHUwMTFEOiJnXHUwMzAyIixcdTAxMjE6ImdcdTAzMDciLFx1MDEyMzoiZ1x1MDMyNyIsXHUxRTI3OiJoXHUwMzA4IixcdTAyMUY6ImhcdTAzMEMiLFx1MDEyNToiaFx1MDMwMiIsXHUxRTIzOiJoXHUwMzA3IixcdTFFMjk6ImhcdTAzMjciLFx1MDBFRDoiaVx1MDMwMSIsXHUwMEVDOiJpXHUwMzAwIixcdTAwRUY6ImlcdTAzMDgiLFx1MUUyRjoiaVx1MDMwOFx1MDMwMSIsXHUwMTI5OiJpXHUwMzAzIixcdTAxMkI6ImlcdTAzMDQiLFx1MDEyRDoiaVx1MDMwNiIsXHUwMUQwOiJpXHUwMzBDIixcdTAwRUU6ImlcdTAzMDIiLFx1MDFGMDoialx1MDMwQyIsXHUwMTM1OiJqXHUwMzAyIixcdTFFMzE6ImtcdTAzMDEiLFx1MDFFOToia1x1MDMwQyIsXHUwMTM3OiJrXHUwMzI3IixcdTAxM0E6ImxcdTAzMDEiLFx1MDEzRToibFx1MDMwQyIsXHUwMTNDOiJsXHUwMzI3IixcdTFFM0Y6Im1cdTAzMDEiLFx1MUU0MToibVx1MDMwNyIsXHUwMTQ0OiJuXHUwMzAxIixcdTAxRjk6Im5cdTAzMDAiLFx1MDBGMToiblx1MDMwMyIsXHUwMTQ4OiJuXHUwMzBDIixcdTFFNDU6Im5cdTAzMDciLFx1MDE0Njoiblx1MDMyNyIsXHUwMEYzOiJvXHUwMzAxIixcdTAwRjI6Im9cdTAzMDAiLFx1MDBGNjoib1x1MDMwOCIsXHUwMjJCOiJvXHUwMzA4XHUwMzA0IixcdTAwRjU6Im9cdTAzMDMiLFx1MUU0RDoib1x1MDMwM1x1MDMwMSIsXHUxRTRGOiJvXHUwMzAzXHUwMzA4IixcdTAyMkQ6Im9cdTAzMDNcdTAzMDQiLFx1MDE0RDoib1x1MDMwNCIsXHUxRTUzOiJvXHUwMzA0XHUwMzAxIixcdTFFNTE6Im9cdTAzMDRcdTAzMDAiLFx1MDE0Rjoib1x1MDMwNiIsXHUwMUQyOiJvXHUwMzBDIixcdTAwRjQ6Im9cdTAzMDIiLFx1MUVEMToib1x1MDMwMlx1MDMwMSIsXHUxRUQzOiJvXHUwMzAyXHUwMzAwIixcdTFFRDc6Im9cdTAzMDJcdTAzMDMiLFx1MDIyRjoib1x1MDMwNyIsXHUwMjMxOiJvXHUwMzA3XHUwMzA0IixcdTAxNTE6Im9cdTAzMEIiLFx1MUU1NToicFx1MDMwMSIsXHUxRTU3OiJwXHUwMzA3IixcdTAxNTU6InJcdTAzMDEiLFx1MDE1OToiclx1MDMwQyIsXHUxRTU5OiJyXHUwMzA3IixcdTAxNTc6InJcdTAzMjciLFx1MDE1Qjoic1x1MDMwMSIsXHUxRTY1OiJzXHUwMzAxXHUwMzA3IixcdTAxNjE6InNcdTAzMEMiLFx1MUU2Nzoic1x1MDMwQ1x1MDMwNyIsXHUwMTVEOiJzXHUwMzAyIixcdTFFNjE6InNcdTAzMDciLFx1MDE1Rjoic1x1MDMyNyIsXHUxRTk3OiJ0XHUwMzA4IixcdTAxNjU6InRcdTAzMEMiLFx1MUU2QjoidFx1MDMwNyIsXHUwMTYzOiJ0XHUwMzI3IixcdTAwRkE6InVcdTAzMDEiLFx1MDBGOToidVx1MDMwMCIsXHUwMEZDOiJ1XHUwMzA4IixcdTAxRDg6InVcdTAzMDhcdTAzMDEiLFx1MDFEQzoidVx1MDMwOFx1MDMwMCIsXHUwMUQ2OiJ1XHUwMzA4XHUwMzA0IixcdTAxREE6InVcdTAzMDhcdTAzMEMiLFx1MDE2OToidVx1MDMwMyIsXHUxRTc5OiJ1XHUwMzAzXHUwMzAxIixcdTAxNkI6InVcdTAzMDQiLFx1MUU3QjoidVx1MDMwNFx1MDMwOCIsXHUwMTZEOiJ1XHUwMzA2IixcdTAxRDQ6InVcdTAzMEMiLFx1MDBGQjoidVx1MDMwMiIsXHUwMTZGOiJ1XHUwMzBBIixcdTAxNzE6InVcdTAzMEIiLFx1MUU3RDoidlx1MDMwMyIsXHUxRTgzOiJ3XHUwMzAxIixcdTFFODE6IndcdTAzMDAiLFx1MUU4NToid1x1MDMwOCIsXHUwMTc1OiJ3XHUwMzAyIixcdTFFODc6IndcdTAzMDciLFx1MUU5ODoid1x1MDMwQSIsXHUxRThEOiJ4XHUwMzA4IixcdTFFOEI6InhcdTAzMDciLFx1MDBGRDoieVx1MDMwMSIsXHUxRUYzOiJ5XHUwMzAwIixcdTAwRkY6InlcdTAzMDgiLFx1MUVGOToieVx1MDMwMyIsXHUwMjMzOiJ5XHUwMzA0IixcdTAxNzc6InlcdTAzMDIiLFx1MUU4RjoieVx1MDMwNyIsXHUxRTk5OiJ5XHUwMzBBIixcdTAxN0E6InpcdTAzMDEiLFx1MDE3RToielx1MDMwQyIsXHUxRTkxOiJ6XHUwMzAyIixcdTAxN0M6InpcdTAzMDciLFx1MDBDMToiQVx1MDMwMSIsXHUwMEMwOiJBXHUwMzAwIixcdTAwQzQ6IkFcdTAzMDgiLFx1MDFERToiQVx1MDMwOFx1MDMwNCIsXHUwMEMzOiJBXHUwMzAzIixcdTAxMDA6IkFcdTAzMDQiLFx1MDEwMjoiQVx1MDMwNiIsXHUxRUFFOiJBXHUwMzA2XHUwMzAxIixcdTFFQjA6IkFcdTAzMDZcdTAzMDAiLFx1MUVCNDoiQVx1MDMwNlx1MDMwMyIsXHUwMUNEOiJBXHUwMzBDIixcdTAwQzI6IkFcdTAzMDIiLFx1MUVBNDoiQVx1MDMwMlx1MDMwMSIsXHUxRUE2OiJBXHUwMzAyXHUwMzAwIixcdTFFQUE6IkFcdTAzMDJcdTAzMDMiLFx1MDIyNjoiQVx1MDMwNyIsXHUwMUUwOiJBXHUwMzA3XHUwMzA0IixcdTAwQzU6IkFcdTAzMEEiLFx1MDFGQToiQVx1MDMwQVx1MDMwMSIsXHUxRTAyOiJCXHUwMzA3IixcdTAxMDY6IkNcdTAzMDEiLFx1MUUwODoiQ1x1MDMyN1x1MDMwMSIsXHUwMTBDOiJDXHUwMzBDIixcdTAxMDg6IkNcdTAzMDIiLFx1MDEwQToiQ1x1MDMwNyIsXHUwMEM3OiJDXHUwMzI3IixcdTAxMEU6IkRcdTAzMEMiLFx1MUUwQToiRFx1MDMwNyIsXHUxRTEwOiJEXHUwMzI3IixcdTAwQzk6IkVcdTAzMDEiLFx1MDBDODoiRVx1MDMwMCIsXHUwMENCOiJFXHUwMzA4IixcdTFFQkM6IkVcdTAzMDMiLFx1MDExMjoiRVx1MDMwNCIsXHUxRTE2OiJFXHUwMzA0XHUwMzAxIixcdTFFMTQ6IkVcdTAzMDRcdTAzMDAiLFx1MDExNDoiRVx1MDMwNiIsXHUxRTFDOiJFXHUwMzI3XHUwMzA2IixcdTAxMUE6IkVcdTAzMEMiLFx1MDBDQToiRVx1MDMwMiIsXHUxRUJFOiJFXHUwMzAyXHUwMzAxIixcdTFFQzA6IkVcdTAzMDJcdTAzMDAiLFx1MUVDNDoiRVx1MDMwMlx1MDMwMyIsXHUwMTE2OiJFXHUwMzA3IixcdTAyMjg6IkVcdTAzMjciLFx1MUUxRToiRlx1MDMwNyIsXHUwMUY0OiJHXHUwMzAxIixcdTFFMjA6IkdcdTAzMDQiLFx1MDExRToiR1x1MDMwNiIsXHUwMUU2OiJHXHUwMzBDIixcdTAxMUM6IkdcdTAzMDIiLFx1MDEyMDoiR1x1MDMwNyIsXHUwMTIyOiJHXHUwMzI3IixcdTFFMjY6IkhcdTAzMDgiLFx1MDIxRToiSFx1MDMwQyIsXHUwMTI0OiJIXHUwMzAyIixcdTFFMjI6IkhcdTAzMDciLFx1MUUyODoiSFx1MDMyNyIsXHUwMENEOiJJXHUwMzAxIixcdTAwQ0M6IklcdTAzMDAiLFx1MDBDRjoiSVx1MDMwOCIsXHUxRTJFOiJJXHUwMzA4XHUwMzAxIixcdTAxMjg6IklcdTAzMDMiLFx1MDEyQToiSVx1MDMwNCIsXHUwMTJDOiJJXHUwMzA2IixcdTAxQ0Y6IklcdTAzMEMiLFx1MDBDRToiSVx1MDMwMiIsXHUwMTMwOiJJXHUwMzA3IixcdTAxMzQ6IkpcdTAzMDIiLFx1MUUzMDoiS1x1MDMwMSIsXHUwMUU4OiJLXHUwMzBDIixcdTAxMzY6IktcdTAzMjciLFx1MDEzOToiTFx1MDMwMSIsXHUwMTNEOiJMXHUwMzBDIixcdTAxM0I6IkxcdTAzMjciLFx1MUUzRToiTVx1MDMwMSIsXHUxRTQwOiJNXHUwMzA3IixcdTAxNDM6Ik5cdTAzMDEiLFx1MDFGODoiTlx1MDMwMCIsXHUwMEQxOiJOXHUwMzAzIixcdTAxNDc6Ik5cdTAzMEMiLFx1MUU0NDoiTlx1MDMwNyIsXHUwMTQ1OiJOXHUwMzI3IixcdTAwRDM6Ik9cdTAzMDEiLFx1MDBEMjoiT1x1MDMwMCIsXHUwMEQ2OiJPXHUwMzA4IixcdTAyMkE6Ik9cdTAzMDhcdTAzMDQiLFx1MDBENToiT1x1MDMwMyIsXHUxRTRDOiJPXHUwMzAzXHUwMzAxIixcdTFFNEU6Ik9cdTAzMDNcdTAzMDgiLFx1MDIyQzoiT1x1MDMwM1x1MDMwNCIsXHUwMTRDOiJPXHUwMzA0IixcdTFFNTI6Ik9cdTAzMDRcdTAzMDEiLFx1MUU1MDoiT1x1MDMwNFx1MDMwMCIsXHUwMTRFOiJPXHUwMzA2IixcdTAxRDE6Ik9cdTAzMEMiLFx1MDBENDoiT1x1MDMwMiIsXHUxRUQwOiJPXHUwMzAyXHUwMzAxIixcdTFFRDI6Ik9cdTAzMDJcdTAzMDAiLFx1MUVENjoiT1x1MDMwMlx1MDMwMyIsXHUwMjJFOiJPXHUwMzA3IixcdTAyMzA6Ik9cdTAzMDdcdTAzMDQiLFx1MDE1MDoiT1x1MDMwQiIsXHUxRTU0OiJQXHUwMzAxIixcdTFFNTY6IlBcdTAzMDciLFx1MDE1NDoiUlx1MDMwMSIsXHUwMTU4OiJSXHUwMzBDIixcdTFFNTg6IlJcdTAzMDciLFx1MDE1NjoiUlx1MDMyNyIsXHUwMTVBOiJTXHUwMzAxIixcdTFFNjQ6IlNcdTAzMDFcdTAzMDciLFx1MDE2MDoiU1x1MDMwQyIsXHUxRTY2OiJTXHUwMzBDXHUwMzA3IixcdTAxNUM6IlNcdTAzMDIiLFx1MUU2MDoiU1x1MDMwNyIsXHUwMTVFOiJTXHUwMzI3IixcdTAxNjQ6IlRcdTAzMEMiLFx1MUU2QToiVFx1MDMwNyIsXHUwMTYyOiJUXHUwMzI3IixcdTAwREE6IlVcdTAzMDEiLFx1MDBEOToiVVx1MDMwMCIsXHUwMERDOiJVXHUwMzA4IixcdTAxRDc6IlVcdTAzMDhcdTAzMDEiLFx1MDFEQjoiVVx1MDMwOFx1MDMwMCIsXHUwMUQ1OiJVXHUwMzA4XHUwMzA0IixcdTAxRDk6IlVcdTAzMDhcdTAzMEMiLFx1MDE2ODoiVVx1MDMwMyIsXHUxRTc4OiJVXHUwMzAzXHUwMzAxIixcdTAxNkE6IlVcdTAzMDQiLFx1MUU3QToiVVx1MDMwNFx1MDMwOCIsXHUwMTZDOiJVXHUwMzA2IixcdTAxRDM6IlVcdTAzMEMiLFx1MDBEQjoiVVx1MDMwMiIsXHUwMTZFOiJVXHUwMzBBIixcdTAxNzA6IlVcdTAzMEIiLFx1MUU3QzoiVlx1MDMwMyIsXHUxRTgyOiJXXHUwMzAxIixcdTFFODA6IldcdTAzMDAiLFx1MUU4NDoiV1x1MDMwOCIsXHUwMTc0OiJXXHUwMzAyIixcdTFFODY6IldcdTAzMDciLFx1MUU4QzoiWFx1MDMwOCIsXHUxRThBOiJYXHUwMzA3IixcdTAwREQ6IllcdTAzMDEiLFx1MUVGMjoiWVx1MDMwMCIsXHUwMTc4OiJZXHUwMzA4IixcdTFFRjg6IllcdTAzMDMiLFx1MDIzMjoiWVx1MDMwNCIsXHUwMTc2OiJZXHUwMzAyIixcdTFFOEU6IllcdTAzMDciLFx1MDE3OToiWlx1MDMwMSIsXHUwMTdEOiJaXHUwMzBDIixcdTFFOTA6IlpcdTAzMDIiLFx1MDE3QjoiWlx1MDMwNyIsXHUwM0FDOiJcdTAzQjFcdTAzMDEiLFx1MUY3MDoiXHUwM0IxXHUwMzAwIixcdTFGQjE6Ilx1MDNCMVx1MDMwNCIsXHUxRkIwOiJcdTAzQjFcdTAzMDYiLFx1MDNBRDoiXHUwM0I1XHUwMzAxIixcdTFGNzI6Ilx1MDNCNVx1MDMwMCIsXHUwM0FFOiJcdTAzQjdcdTAzMDEiLFx1MUY3NDoiXHUwM0I3XHUwMzAwIixcdTAzQUY6Ilx1MDNCOVx1MDMwMSIsXHUxRjc2OiJcdTAzQjlcdTAzMDAiLFx1MDNDQToiXHUwM0I5XHUwMzA4IixcdTAzOTA6Ilx1MDNCOVx1MDMwOFx1MDMwMSIsXHUxRkQyOiJcdTAzQjlcdTAzMDhcdTAzMDAiLFx1MUZEMToiXHUwM0I5XHUwMzA0IixcdTFGRDA6Ilx1MDNCOVx1MDMwNiIsXHUwM0NDOiJcdTAzQkZcdTAzMDEiLFx1MUY3ODoiXHUwM0JGXHUwMzAwIixcdTAzQ0Q6Ilx1MDNDNVx1MDMwMSIsXHUxRjdBOiJcdTAzQzVcdTAzMDAiLFx1MDNDQjoiXHUwM0M1XHUwMzA4IixcdTAzQjA6Ilx1MDNDNVx1MDMwOFx1MDMwMSIsXHUxRkUyOiJcdTAzQzVcdTAzMDhcdTAzMDAiLFx1MUZFMToiXHUwM0M1XHUwMzA0IixcdTFGRTA6Ilx1MDNDNVx1MDMwNiIsXHUwM0NFOiJcdTAzQzlcdTAzMDEiLFx1MUY3QzoiXHUwM0M5XHUwMzAwIixcdTAzOEU6Ilx1MDNBNVx1MDMwMSIsXHUxRkVBOiJcdTAzQTVcdTAzMDAiLFx1MDNBQjoiXHUwM0E1XHUwMzA4IixcdTFGRTk6Ilx1MDNBNVx1MDMwNCIsXHUxRkU4OiJcdTAzQTVcdTAzMDYiLFx1MDM4RjoiXHUwM0E5XHUwMzAxIixcdTFGRkE6Ilx1MDNBOVx1MDMwMCJ9LHYzPWNsYXNzIHR7c3RhdGlje28odGhpcywiUGFyc2VyIil9Y29uc3RydWN0b3IoZSxyKXt0aGlzLm1vZGU9dm9pZCAwLHRoaXMuZ3VsbGV0PXZvaWQgMCx0aGlzLnNldHRpbmdzPXZvaWQgMCx0aGlzLmxlZnRyaWdodERlcHRoPXZvaWQgMCx0aGlzLm5leHRUb2tlbj12b2lkIDAsdGhpcy5tb2RlPSJtYXRoIix0aGlzLmd1bGxldD1uZXcgSTcoZSxyLHRoaXMubW9kZSksdGhpcy5zZXR0aW5ncz1yLHRoaXMubGVmdHJpZ2h0RGVwdGg9MH1leHBlY3QoZSxyKXtpZihyPT09dm9pZCAwJiYocj0hMCksdGhpcy5mZXRjaCgpLnRleHQhPT1lKXRocm93IG5ldyBndCgiRXhwZWN0ZWQgJyIrZSsiJywgZ290ICciK3RoaXMuZmV0Y2goKS50ZXh0KyInIix0aGlzLmZldGNoKCkpO3ImJnRoaXMuY29uc3VtZSgpfWNvbnN1bWUoKXt0aGlzLm5leHRUb2tlbj1udWxsfWZldGNoKCl7cmV0dXJuIHRoaXMubmV4dFRva2VuPT1udWxsJiYodGhpcy5uZXh0VG9rZW49dGhpcy5ndWxsZXQuZXhwYW5kTmV4dFRva2VuKCkpLHRoaXMubmV4dFRva2VufXN3aXRjaE1vZGUoZSl7dGhpcy5tb2RlPWUsdGhpcy5ndWxsZXQuc3dpdGNoTW9kZShlKX1wYXJzZSgpe3RoaXMuc2V0dGluZ3MuZ2xvYmFsR3JvdXB8fHRoaXMuZ3VsbGV0LmJlZ2luR3JvdXAoKSx0aGlzLnNldHRpbmdzLmNvbG9ySXNUZXh0Q29sb3ImJnRoaXMuZ3VsbGV0Lm1hY3Jvcy5zZXQoIlxcY29sb3IiLCJcXHRleHRjb2xvciIpO3RyeXt2YXIgZT10aGlzLnBhcnNlRXhwcmVzc2lvbighMSk7cmV0dXJuIHRoaXMuZXhwZWN0KCJFT0YiKSx0aGlzLnNldHRpbmdzLmdsb2JhbEdyb3VwfHx0aGlzLmd1bGxldC5lbmRHcm91cCgpLGV9ZmluYWxseXt0aGlzLmd1bGxldC5lbmRHcm91cHMoKX19c3VicGFyc2UoZSl7dmFyIHI9dGhpcy5uZXh0VG9rZW47dGhpcy5jb25zdW1lKCksdGhpcy5ndWxsZXQucHVzaFRva2VuKG5ldyBTbygifSIpKSx0aGlzLmd1bGxldC5wdXNoVG9rZW5zKGUpO3ZhciBuPXRoaXMucGFyc2VFeHByZXNzaW9uKCExKTtyZXR1cm4gdGhpcy5leHBlY3QoIn0iKSx0aGlzLm5leHRUb2tlbj1yLG59cGFyc2VFeHByZXNzaW9uKGUscil7Zm9yKHZhciBuPVtdOzspe3RoaXMubW9kZT09PSJtYXRoIiYmdGhpcy5jb25zdW1lU3BhY2VzKCk7dmFyIGk9dGhpcy5mZXRjaCgpO2lmKHQuZW5kT2ZFeHByZXNzaW9uLmluZGV4T2YoaS50ZXh0KSE9PS0xfHxyJiZpLnRleHQ9PT1yfHxlJiZoaFtpLnRleHRdJiZoaFtpLnRleHRdLmluZml4KWJyZWFrO3ZhciBhPXRoaXMucGFyc2VBdG9tKHIpO2lmKGEpe2lmKGEudHlwZT09PSJpbnRlcm5hbCIpY29udGludWV9ZWxzZSBicmVhaztuLnB1c2goYSl9cmV0dXJuIHRoaXMubW9kZT09PSJ0ZXh0IiYmdGhpcy5mb3JtTGlnYXR1cmVzKG4pLHRoaXMuaGFuZGxlSW5maXhOb2RlcyhuKX1oYW5kbGVJbmZpeE5vZGVzKGUpe2Zvcih2YXIgcj0tMSxuLGk9MDtpPGUubGVuZ3RoO2krKylpZihlW2ldLnR5cGU9PT0iaW5maXgiKXtpZihyIT09LTEpdGhyb3cgbmV3IGd0KCJvbmx5IG9uZSBpbmZpeCBvcGVyYXRvciBwZXIgZ3JvdXAiLGVbaV0udG9rZW4pO3I9aSxuPWVbaV0ucmVwbGFjZVdpdGh9aWYociE9PS0xJiZuKXt2YXIgYSxzLGw9ZS5zbGljZSgwLHIpLHU9ZS5zbGljZShyKzEpO2wubGVuZ3RoPT09MSYmbFswXS50eXBlPT09Im9yZGdyb3VwIj9hPWxbMF06YT17dHlwZToib3JkZ3JvdXAiLG1vZGU6dGhpcy5tb2RlLGJvZHk6bH0sdS5sZW5ndGg9PT0xJiZ1WzBdLnR5cGU9PT0ib3JkZ3JvdXAiP3M9dVswXTpzPXt0eXBlOiJvcmRncm91cCIsbW9kZTp0aGlzLm1vZGUsYm9keTp1fTt2YXIgaDtyZXR1cm4gbj09PSJcXFxcYWJvdmVmcmFjIj9oPXRoaXMuY2FsbEZ1bmN0aW9uKG4sW2EsZVtyXSxzXSxbXSk6aD10aGlzLmNhbGxGdW5jdGlvbihuLFthLHNdLFtdKSxbaF19ZWxzZSByZXR1cm4gZX1oYW5kbGVTdXBTdWJzY3JpcHQoZSl7dmFyIHI9dGhpcy5mZXRjaCgpLG49ci50ZXh0O3RoaXMuY29uc3VtZSgpLHRoaXMuY29uc3VtZVNwYWNlcygpO3ZhciBpPXRoaXMucGFyc2VHcm91cChlKTtpZighaSl0aHJvdyBuZXcgZ3QoIkV4cGVjdGVkIGdyb3VwIGFmdGVyICciK24rIiciLHIpO3JldHVybiBpfWZvcm1hdFVuc3VwcG9ydGVkQ21kKGUpe2Zvcih2YXIgcj1bXSxuPTA7bjxlLmxlbmd0aDtuKyspci5wdXNoKHt0eXBlOiJ0ZXh0b3JkIixtb2RlOiJ0ZXh0Iix0ZXh0OmVbbl19KTt2YXIgaT17dHlwZToidGV4dCIsbW9kZTp0aGlzLm1vZGUsYm9keTpyfSxhPXt0eXBlOiJjb2xvciIsbW9kZTp0aGlzLm1vZGUsY29sb3I6dGhpcy5zZXR0aW5ncy5lcnJvckNvbG9yLGJvZHk6W2ldfTtyZXR1cm4gYX1wYXJzZUF0b20oZSl7dmFyIHI9dGhpcy5wYXJzZUdyb3VwKCJhdG9tIixlKTtpZih0aGlzLm1vZGU9PT0idGV4dCIpcmV0dXJuIHI7Zm9yKHZhciBuLGk7Oyl7dGhpcy5jb25zdW1lU3BhY2VzKCk7dmFyIGE9dGhpcy5mZXRjaCgpO2lmKGEudGV4dD09PSJcXGxpbWl0cyJ8fGEudGV4dD09PSJcXG5vbGltaXRzIil7aWYociYmci50eXBlPT09Im9wIil7dmFyIHM9YS50ZXh0PT09IlxcbGltaXRzIjtyLmxpbWl0cz1zLHIuYWx3YXlzSGFuZGxlU3VwU3ViPSEwfWVsc2UgaWYociYmci50eXBlPT09Im9wZXJhdG9ybmFtZSIpci5hbHdheXNIYW5kbGVTdXBTdWImJihyLmxpbWl0cz1hLnRleHQ9PT0iXFxsaW1pdHMiKTtlbHNlIHRocm93IG5ldyBndCgiTGltaXQgY29udHJvbHMgbXVzdCBmb2xsb3cgYSBtYXRoIG9wZXJhdG9yIixhKTt0aGlzLmNvbnN1bWUoKX1lbHNlIGlmKGEudGV4dD09PSJeIil7aWYobil0aHJvdyBuZXcgZ3QoIkRvdWJsZSBzdXBlcnNjcmlwdCIsYSk7bj10aGlzLmhhbmRsZVN1cFN1YnNjcmlwdCgic3VwZXJzY3JpcHQiKX1lbHNlIGlmKGEudGV4dD09PSJfIil7aWYoaSl0aHJvdyBuZXcgZ3QoIkRvdWJsZSBzdWJzY3JpcHQiLGEpO2k9dGhpcy5oYW5kbGVTdXBTdWJzY3JpcHQoInN1YnNjcmlwdCIpfWVsc2UgaWYoYS50ZXh0PT09IiciKXtpZihuKXRocm93IG5ldyBndCgiRG91YmxlIHN1cGVyc2NyaXB0IixhKTt2YXIgbD17dHlwZToidGV4dG9yZCIsbW9kZTp0aGlzLm1vZGUsdGV4dDoiXFxwcmltZSJ9LHU9W2xdO2Zvcih0aGlzLmNvbnN1bWUoKTt0aGlzLmZldGNoKCkudGV4dD09PSInIjspdS5wdXNoKGwpLHRoaXMuY29uc3VtZSgpO3RoaXMuZmV0Y2goKS50ZXh0PT09Il4iJiZ1LnB1c2godGhpcy5oYW5kbGVTdXBTdWJzY3JpcHQoInN1cGVyc2NyaXB0IikpLG49e3R5cGU6Im9yZGdyb3VwIixtb2RlOnRoaXMubW9kZSxib2R5OnV9fWVsc2UgaWYobDNbYS50ZXh0XSl7dmFyIGg9UHoudGVzdChhLnRleHQpLGY9W107Zm9yKGYucHVzaChuZXcgU28obDNbYS50ZXh0XSkpLHRoaXMuY29uc3VtZSgpOzspe3ZhciBkPXRoaXMuZmV0Y2goKS50ZXh0O2lmKCFsM1tkXXx8UHoudGVzdChkKSE9PWgpYnJlYWs7Zi51bnNoaWZ0KG5ldyBTbyhsM1tkXSkpLHRoaXMuY29uc3VtZSgpfXZhciBwPXRoaXMuc3VicGFyc2UoZik7aD9pPXt0eXBlOiJvcmRncm91cCIsbW9kZToibWF0aCIsYm9keTpwfTpuPXt0eXBlOiJvcmRncm91cCIsbW9kZToibWF0aCIsYm9keTpwfX1lbHNlIGJyZWFrfXJldHVybiBufHxpP3t0eXBlOiJzdXBzdWIiLG1vZGU6dGhpcy5tb2RlLGJhc2U6cixzdXA6bixzdWI6aX06cn1wYXJzZUZ1bmN0aW9uKGUscil7dmFyIG49dGhpcy5mZXRjaCgpLGk9bi50ZXh0LGE9aGhbaV07aWYoIWEpcmV0dXJuIG51bGw7aWYodGhpcy5jb25zdW1lKCksciYmciE9PSJhdG9tIiYmIWEuYWxsb3dlZEluQXJndW1lbnQpdGhyb3cgbmV3IGd0KCJHb3QgZnVuY3Rpb24gJyIraSsiJyB3aXRoIG5vIGFyZ3VtZW50cyIrKHI/IiBhcyAiK3I6IiIpLG4pO2lmKHRoaXMubW9kZT09PSJ0ZXh0IiYmIWEuYWxsb3dlZEluVGV4dCl0aHJvdyBuZXcgZ3QoIkNhbid0IHVzZSBmdW5jdGlvbiAnIitpKyInIGluIHRleHQgbW9kZSIsbik7aWYodGhpcy5tb2RlPT09Im1hdGgiJiZhLmFsbG93ZWRJbk1hdGg9PT0hMSl0aHJvdyBuZXcgZ3QoIkNhbid0IHVzZSBmdW5jdGlvbiAnIitpKyInIGluIG1hdGggbW9kZSIsbik7dmFye2FyZ3M6cyxvcHRBcmdzOmx9PXRoaXMucGFyc2VBcmd1bWVudHMoaSxhKTtyZXR1cm4gdGhpcy5jYWxsRnVuY3Rpb24oaSxzLGwsbixlKX1jYWxsRnVuY3Rpb24oZSxyLG4saSxhKXt2YXIgcz17ZnVuY05hbWU6ZSxwYXJzZXI6dGhpcyx0b2tlbjppLGJyZWFrT25Ub2tlblRleHQ6YX0sbD1oaFtlXTtpZihsJiZsLmhhbmRsZXIpcmV0dXJuIGwuaGFuZGxlcihzLHIsbik7dGhyb3cgbmV3IGd0KCJObyBmdW5jdGlvbiBoYW5kbGVyIGZvciAiK2UpfXBhcnNlQXJndW1lbnRzKGUscil7dmFyIG49ci5udW1BcmdzK3IubnVtT3B0aW9uYWxBcmdzO2lmKG49PT0wKXJldHVybnthcmdzOltdLG9wdEFyZ3M6W119O2Zvcih2YXIgaT1bXSxhPVtdLHM9MDtzPG47cysrKXt2YXIgbD1yLmFyZ1R5cGVzJiZyLmFyZ1R5cGVzW3NdLHU9czxyLm51bU9wdGlvbmFsQXJnczsoci5wcmltaXRpdmUmJmw9PW51bGx8fHIudHlwZT09PSJzcXJ0IiYmcz09PTEmJmFbMF09PW51bGwpJiYobD0icHJpbWl0aXZlIik7dmFyIGg9dGhpcy5wYXJzZUdyb3VwT2ZUeXBlKCJhcmd1bWVudCB0byAnIitlKyInIixsLHUpO2lmKHUpYS5wdXNoKGgpO2Vsc2UgaWYoaCE9bnVsbClpLnB1c2goaCk7ZWxzZSB0aHJvdyBuZXcgZ3QoIk51bGwgYXJndW1lbnQsIHBsZWFzZSByZXBvcnQgdGhpcyBhcyBhIGJ1ZyIpfXJldHVybnthcmdzOmksb3B0QXJnczphfX1wYXJzZUdyb3VwT2ZUeXBlKGUscixuKXtzd2l0Y2gocil7Y2FzZSJjb2xvciI6cmV0dXJuIHRoaXMucGFyc2VDb2xvckdyb3VwKG4pO2Nhc2Uic2l6ZSI6cmV0dXJuIHRoaXMucGFyc2VTaXplR3JvdXAobik7Y2FzZSJ1cmwiOnJldHVybiB0aGlzLnBhcnNlVXJsR3JvdXAobik7Y2FzZSJtYXRoIjpjYXNlInRleHQiOnJldHVybiB0aGlzLnBhcnNlQXJndW1lbnRHcm91cChuLHIpO2Nhc2UiaGJveCI6e3ZhciBpPXRoaXMucGFyc2VBcmd1bWVudEdyb3VwKG4sInRleHQiKTtyZXR1cm4gaSE9bnVsbD97dHlwZToic3R5bGluZyIsbW9kZTppLm1vZGUsYm9keTpbaV0sc3R5bGU6InRleHQifTpudWxsfWNhc2UicmF3Ijp7dmFyIGE9dGhpcy5wYXJzZVN0cmluZ0dyb3VwKCJyYXciLG4pO3JldHVybiBhIT1udWxsP3t0eXBlOiJyYXciLG1vZGU6InRleHQiLHN0cmluZzphLnRleHR9Om51bGx9Y2FzZSJwcmltaXRpdmUiOntpZihuKXRocm93IG5ldyBndCgiQSBwcmltaXRpdmUgYXJndW1lbnQgY2Fubm90IGJlIG9wdGlvbmFsIik7dmFyIHM9dGhpcy5wYXJzZUdyb3VwKGUpO2lmKHM9PW51bGwpdGhyb3cgbmV3IGd0KCJFeHBlY3RlZCBncm91cCBhcyAiK2UsdGhpcy5mZXRjaCgpKTtyZXR1cm4gc31jYXNlIm9yaWdpbmFsIjpjYXNlIG51bGw6Y2FzZSB2b2lkIDA6cmV0dXJuIHRoaXMucGFyc2VBcmd1bWVudEdyb3VwKG4pO2RlZmF1bHQ6dGhyb3cgbmV3IGd0KCJVbmtub3duIGdyb3VwIHR5cGUgYXMgIitlLHRoaXMuZmV0Y2goKSl9fWNvbnN1bWVTcGFjZXMoKXtmb3IoO3RoaXMuZmV0Y2goKS50ZXh0PT09IiAiOyl0aGlzLmNvbnN1bWUoKX1wYXJzZVN0cmluZ0dyb3VwKGUscil7dmFyIG49dGhpcy5ndWxsZXQuc2NhbkFyZ3VtZW50KHIpO2lmKG49PW51bGwpcmV0dXJuIG51bGw7Zm9yKHZhciBpPSIiLGE7KGE9dGhpcy5mZXRjaCgpKS50ZXh0IT09IkVPRiI7KWkrPWEudGV4dCx0aGlzLmNvbnN1bWUoKTtyZXR1cm4gdGhpcy5jb25zdW1lKCksbi50ZXh0PWksbn1wYXJzZVJlZ2V4R3JvdXAoZSxyKXtmb3IodmFyIG49dGhpcy5mZXRjaCgpLGk9bixhPSIiLHM7KHM9dGhpcy5mZXRjaCgpKS50ZXh0IT09IkVPRiImJmUudGVzdChhK3MudGV4dCk7KWk9cyxhKz1pLnRleHQsdGhpcy5jb25zdW1lKCk7aWYoYT09PSIiKXRocm93IG5ldyBndCgiSW52YWxpZCAiK3IrIjogJyIrbi50ZXh0KyInIixuKTtyZXR1cm4gbi5yYW5nZShpLGEpfXBhcnNlQ29sb3JHcm91cChlKXt2YXIgcj10aGlzLnBhcnNlU3RyaW5nR3JvdXAoImNvbG9yIixlKTtpZihyPT1udWxsKXJldHVybiBudWxsO3ZhciBuPS9eKCNbYS1mMC05XXszfXwjP1thLWYwLTldezZ9fFthLXpdKykkL2kuZXhlYyhyLnRleHQpO2lmKCFuKXRocm93IG5ldyBndCgiSW52YWxpZCBjb2xvcjogJyIrci50ZXh0KyInIixyKTt2YXIgaT1uWzBdO3JldHVybi9eWzAtOWEtZl17Nn0kL2kudGVzdChpKSYmKGk9IiMiK2kpLHt0eXBlOiJjb2xvci10b2tlbiIsbW9kZTp0aGlzLm1vZGUsY29sb3I6aX19cGFyc2VTaXplR3JvdXAoZSl7dmFyIHIsbj0hMTtpZih0aGlzLmd1bGxldC5jb25zdW1lU3BhY2VzKCksIWUmJnRoaXMuZ3VsbGV0LmZ1dHVyZSgpLnRleHQhPT0ieyI/cj10aGlzLnBhcnNlUmVnZXhHcm91cCgvXlstK10/ICooPzokfFxkK3xcZCtcLlxkKnxcLlxkKikgKlthLXpdezAsMn0gKiQvLCJzaXplIik6cj10aGlzLnBhcnNlU3RyaW5nR3JvdXAoInNpemUiLGUpLCFyKXJldHVybiBudWxsOyFlJiZyLnRleHQubGVuZ3RoPT09MCYmKHIudGV4dD0iMHB0IixuPSEwKTt2YXIgaT0vKFstK10/KSAqKFxkKyg/OlwuXGQqKT98XC5cZCspICooW2Etel17Mn0pLy5leGVjKHIudGV4dCk7aWYoIWkpdGhyb3cgbmV3IGd0KCJJbnZhbGlkIHNpemU6ICciK3IudGV4dCsiJyIscik7dmFyIGE9e251bWJlcjorKGlbMV0raVsyXSksdW5pdDppWzNdfTtpZighenooYSkpdGhyb3cgbmV3IGd0KCJJbnZhbGlkIHVuaXQ6ICciK2EudW5pdCsiJyIscik7cmV0dXJue3R5cGU6InNpemUiLG1vZGU6dGhpcy5tb2RlLHZhbHVlOmEsaXNCbGFuazpufX1wYXJzZVVybEdyb3VwKGUpe3RoaXMuZ3VsbGV0LmxleGVyLnNldENhdGNvZGUoIiUiLDEzKSx0aGlzLmd1bGxldC5sZXhlci5zZXRDYXRjb2RlKCJ+IiwxMik7dmFyIHI9dGhpcy5wYXJzZVN0cmluZ0dyb3VwKCJ1cmwiLGUpO2lmKHRoaXMuZ3VsbGV0LmxleGVyLnNldENhdGNvZGUoIiUiLDE0KSx0aGlzLmd1bGxldC5sZXhlci5zZXRDYXRjb2RlKCJ+IiwxMykscj09bnVsbClyZXR1cm4gbnVsbDt2YXIgbj1yLnRleHQucmVwbGFjZSgvXFwoWyMkJSZ+X157fV0pL2csIiQxIik7cmV0dXJue3R5cGU6InVybCIsbW9kZTp0aGlzLm1vZGUsdXJsOm59fXBhcnNlQXJndW1lbnRHcm91cChlLHIpe3ZhciBuPXRoaXMuZ3VsbGV0LnNjYW5Bcmd1bWVudChlKTtpZihuPT1udWxsKXJldHVybiBudWxsO3ZhciBpPXRoaXMubW9kZTtyJiZ0aGlzLnN3aXRjaE1vZGUociksdGhpcy5ndWxsZXQuYmVnaW5Hcm91cCgpO3ZhciBhPXRoaXMucGFyc2VFeHByZXNzaW9uKCExLCJFT0YiKTt0aGlzLmV4cGVjdCgiRU9GIiksdGhpcy5ndWxsZXQuZW5kR3JvdXAoKTt2YXIgcz17dHlwZToib3JkZ3JvdXAiLG1vZGU6dGhpcy5tb2RlLGxvYzpuLmxvYyxib2R5OmF9O3JldHVybiByJiZ0aGlzLnN3aXRjaE1vZGUoaSksc31wYXJzZUdyb3VwKGUscil7dmFyIG49dGhpcy5mZXRjaCgpLGk9bi50ZXh0LGE7aWYoaT09PSJ7Inx8aT09PSJcXGJlZ2luZ3JvdXAiKXt0aGlzLmNvbnN1bWUoKTt2YXIgcz1pPT09InsiPyJ9IjoiXFxlbmRncm91cCI7dGhpcy5ndWxsZXQuYmVnaW5Hcm91cCgpO3ZhciBsPXRoaXMucGFyc2VFeHByZXNzaW9uKCExLHMpLHU9dGhpcy5mZXRjaCgpO3RoaXMuZXhwZWN0KHMpLHRoaXMuZ3VsbGV0LmVuZEdyb3VwKCksYT17dHlwZToib3JkZ3JvdXAiLG1vZGU6dGhpcy5tb2RlLGxvYzpYcy5yYW5nZShuLHUpLGJvZHk6bCxzZW1pc2ltcGxlOmk9PT0iXFxiZWdpbmdyb3VwInx8dm9pZCAwfX1lbHNlIGlmKGE9dGhpcy5wYXJzZUZ1bmN0aW9uKHIsZSl8fHRoaXMucGFyc2VTeW1ib2woKSxhPT1udWxsJiZpWzBdPT09IlxcIiYmIUxHLmhhc093blByb3BlcnR5KGkpKXtpZih0aGlzLnNldHRpbmdzLnRocm93T25FcnJvcil0aHJvdyBuZXcgZ3QoIlVuZGVmaW5lZCBjb250cm9sIHNlcXVlbmNlOiAiK2ksbik7YT10aGlzLmZvcm1hdFVuc3VwcG9ydGVkQ21kKGkpLHRoaXMuY29uc3VtZSgpfXJldHVybiBhfWZvcm1MaWdhdHVyZXMoZSl7Zm9yKHZhciByPWUubGVuZ3RoLTEsbj0wO248cjsrK24pe3ZhciBpPWVbbl0sYT1pLnRleHQ7YT09PSItIiYmZVtuKzFdLnRleHQ9PT0iLSImJihuKzE8ciYmZVtuKzJdLnRleHQ9PT0iLSI/KGUuc3BsaWNlKG4sMyx7dHlwZToidGV4dG9yZCIsbW9kZToidGV4dCIsbG9jOlhzLnJhbmdlKGksZVtuKzJdKSx0ZXh0OiItLS0ifSksci09Mik6KGUuc3BsaWNlKG4sMix7dHlwZToidGV4dG9yZCIsbW9kZToidGV4dCIsbG9jOlhzLnJhbmdlKGksZVtuKzFdKSx0ZXh0OiItLSJ9KSxyLT0xKSksKGE9PT0iJyJ8fGE9PT0iYCIpJiZlW24rMV0udGV4dD09PWEmJihlLnNwbGljZShuLDIse3R5cGU6InRleHRvcmQiLG1vZGU6InRleHQiLGxvYzpYcy5yYW5nZShpLGVbbisxXSksdGV4dDphK2F9KSxyLT0xKX19cGFyc2VTeW1ib2woKXt2YXIgZT10aGlzLmZldGNoKCkscj1lLnRleHQ7aWYoL15cXHZlcmJbXmEtekEtWl0vLnRlc3Qocikpe3RoaXMuY29uc3VtZSgpO3ZhciBuPXIuc2xpY2UoNSksaT1uLmNoYXJBdCgwKT09PSIqIjtpZihpJiYobj1uLnNsaWNlKDEpKSxuLmxlbmd0aDwyfHxuLmNoYXJBdCgwKSE9PW4uc2xpY2UoLTEpKXRocm93IG5ldyBndChgXFx2ZXJiIGFzc2VydGlvbiBmYWlsZWQgLS0KICAgICAgICAgICAgICAgICAgICBwbGVhc2UgcmVwb3J0IHdoYXQgaW5wdXQgY2F1c2VkIHRoaXMgYnVnYCk7cmV0dXJuIG49bi5zbGljZSgxLC0xKSx7dHlwZToidmVyYiIsbW9kZToidGV4dCIsYm9keTpuLHN0YXI6aX19QnouaGFzT3duUHJvcGVydHkoclswXSkmJiFBblt0aGlzLm1vZGVdW3JbMF1dJiYodGhpcy5zZXR0aW5ncy5zdHJpY3QmJnRoaXMubW9kZT09PSJtYXRoIiYmdGhpcy5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoInVuaWNvZGVUZXh0SW5NYXRoTW9kZSIsJ0FjY2VudGVkIFVuaWNvZGUgdGV4dCBjaGFyYWN0ZXIgIicrclswXSsnIiB1c2VkIGluIG1hdGggbW9kZScsZSkscj1CeltyWzBdXStyLnNsaWNlKDEpKTt2YXIgYT16NGUuZXhlYyhyKTthJiYocj1yLnN1YnN0cmluZygwLGEuaW5kZXgpLHI9PT0iaSI/cj0iXHUwMTMxIjpyPT09ImoiJiYocj0iXHUwMjM3IikpO3ZhciBzO2lmKEFuW3RoaXMubW9kZV1bcl0pe3RoaXMuc2V0dGluZ3Muc3RyaWN0JiZ0aGlzLm1vZGU9PT0ibWF0aCImJkM3LmluZGV4T2Yocik+PTAmJnRoaXMuc2V0dGluZ3MucmVwb3J0Tm9uc3RyaWN0KCJ1bmljb2RlVGV4dEluTWF0aE1vZGUiLCdMYXRpbi0xL1VuaWNvZGUgdGV4dCBjaGFyYWN0ZXIgIicrclswXSsnIiB1c2VkIGluIG1hdGggbW9kZScsZSk7dmFyIGw9QW5bdGhpcy5tb2RlXVtyXS5ncm91cCx1PVhzLnJhbmdlKGUpLGg7aWYoTWJlLmhhc093blByb3BlcnR5KGwpKXt2YXIgZj1sO2g9e3R5cGU6ImF0b20iLG1vZGU6dGhpcy5tb2RlLGZhbWlseTpmLGxvYzp1LHRleHQ6cn19ZWxzZSBoPXt0eXBlOmwsbW9kZTp0aGlzLm1vZGUsbG9jOnUsdGV4dDpyfTtzPWh9ZWxzZSBpZihyLmNoYXJDb2RlQXQoMCk+PTEyOCl0aGlzLnNldHRpbmdzLnN0cmljdCYmKCR6KHIuY2hhckNvZGVBdCgwKSk/dGhpcy5tb2RlPT09Im1hdGgiJiZ0aGlzLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdCgidW5pY29kZVRleHRJbk1hdGhNb2RlIiwnVW5pY29kZSB0ZXh0IGNoYXJhY3RlciAiJytyWzBdKyciIHVzZWQgaW4gbWF0aCBtb2RlJyxlKTp0aGlzLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdCgidW5rbm93blN5bWJvbCIsJ1VucmVjb2duaXplZCBVbmljb2RlIGNoYXJhY3RlciAiJytyWzBdKyciJysoIiAoIityLmNoYXJDb2RlQXQoMCkrIikiKSxlKSkscz17dHlwZToidGV4dG9yZCIsbW9kZToidGV4dCIsbG9jOlhzLnJhbmdlKGUpLHRleHQ6cn07ZWxzZSByZXR1cm4gbnVsbDtpZih0aGlzLmNvbnN1bWUoKSxhKWZvcih2YXIgZD0wO2Q8YVswXS5sZW5ndGg7ZCsrKXt2YXIgcD1hWzBdW2RdO2lmKCFUN1twXSl0aHJvdyBuZXcgZ3QoIlVua25vd24gYWNjZW50ICcgIitwKyInIixlKTt2YXIgbT1UN1twXVt0aGlzLm1vZGVdfHxUN1twXS50ZXh0O2lmKCFtKXRocm93IG5ldyBndCgiQWNjZW50ICIrcCsiIHVuc3VwcG9ydGVkIGluICIrdGhpcy5tb2RlKyIgbW9kZSIsZSk7cz17dHlwZToiYWNjZW50Iixtb2RlOnRoaXMubW9kZSxsb2M6WHMucmFuZ2UoZSksbGFiZWw6bSxpc1N0cmV0Y2h5OiExLGlzU2hpZnR5OiEwLGJhc2U6c319cmV0dXJuIHN9fTt2My5lbmRPZkV4cHJlc3Npb249WyJ9IiwiXFxlbmRncm91cCIsIlxcZW5kIiwiXFxyaWdodCIsIiYiXTtRNz1vKGZ1bmN0aW9uKGUscil7aWYoISh0eXBlb2YgZT09InN0cmluZyJ8fGUgaW5zdGFuY2VvZiBTdHJpbmcpKXRocm93IG5ldyBUeXBlRXJyb3IoIkthVGVYIGNhbiBvbmx5IHBhcnNlIHN0cmluZyB0eXBlZCBleHByZXNzaW9uIik7dmFyIG49bmV3IHYzKGUscik7ZGVsZXRlIG4uZ3VsbGV0Lm1hY3Jvcy5jdXJyZW50WyJcXGRmQHRhZyJdO3ZhciBpPW4ucGFyc2UoKTtpZihkZWxldGUgbi5ndWxsZXQubWFjcm9zLmN1cnJlbnRbIlxcY3VycmVudEBjb2xvciJdLGRlbGV0ZSBuLmd1bGxldC5tYWNyb3MuY3VycmVudFsiXFxjb2xvciJdLG4uZ3VsbGV0Lm1hY3Jvcy5nZXQoIlxcZGZAdGFnIikpe2lmKCFyLmRpc3BsYXlNb2RlKXRocm93IG5ldyBndCgiXFx0YWcgd29ya3Mgb25seSBpbiBkaXNwbGF5IGVxdWF0aW9ucyIpO2k9W3t0eXBlOiJ0YWciLG1vZGU6InRleHQiLGJvZHk6aSx0YWc6bi5zdWJwYXJzZShbbmV3IFNvKCJcXGRmQHRhZyIpXSl9XX1yZXR1cm4gaX0sInBhcnNlVHJlZSIpLFJHPW8oZnVuY3Rpb24oZSxyLG4pe3IudGV4dENvbnRlbnQ9IiI7dmFyIGk9WjcoZSxuKS50b05vZGUoKTtyLmFwcGVuZENoaWxkKGkpfSwicmVuZGVyIik7dHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQuY29tcGF0TW9kZSE9PSJDU1MxQ29tcGF0IiYmKHR5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS53YXJuKCJXYXJuaW5nOiBLYVRlWCBkb2Vzbid0IHdvcmsgaW4gcXVpcmtzIG1vZGUuIE1ha2Ugc3VyZSB5b3VyIHdlYnNpdGUgaGFzIGEgc3VpdGFibGUgZG9jdHlwZS4iKSxSRz1vKGZ1bmN0aW9uKCl7dGhyb3cgbmV3IGd0KCJLYVRlWCBkb2Vzbid0IHdvcmsgaW4gcXVpcmtzIG1vZGUuIil9LCJyZW5kZXIiKSk7VTRlPW8oZnVuY3Rpb24oZSxyKXt2YXIgbj1aNyhlLHIpLnRvTWFya3VwKCk7cmV0dXJuIG59LCJyZW5kZXJUb1N0cmluZyIpLEg0ZT1vKGZ1bmN0aW9uKGUscil7dmFyIG49bmV3IHp5KHIpO3JldHVybiBRNyhlLG4pfSwiZ2VuZXJhdGVQYXJzZVRyZWUiKSxORz1vKGZ1bmN0aW9uKGUscixuKXtpZihuLnRocm93T25FcnJvcnx8IShlIGluc3RhbmNlb2YgZ3QpKXRocm93IGU7dmFyIGk9QmUubWFrZVNwYW4oWyJrYXRleC1lcnJvciJdLFtuZXcgVHMocildKTtyZXR1cm4gaS5zZXRBdHRyaWJ1dGUoInRpdGxlIixlLnRvU3RyaW5nKCkpLGkuc2V0QXR0cmlidXRlKCJzdHlsZSIsImNvbG9yOiIrbi5lcnJvckNvbG9yKSxpfSwicmVuZGVyRXJyb3IiKSxaNz1vKGZ1bmN0aW9uKGUscil7dmFyIG49bmV3IHp5KHIpO3RyeXt2YXIgaT1RNyhlLG4pO3JldHVybiB0NGUoaSxlLG4pfWNhdGNoKGEpe3JldHVybiBORyhhLGUsbil9fSwicmVuZGVyVG9Eb21UcmVlIiksVzRlPW8oZnVuY3Rpb24oZSxyKXt2YXIgbj1uZXcgenkocik7dHJ5e3ZhciBpPVE3KGUsbik7cmV0dXJuIHI0ZShpLGUsbil9Y2F0Y2goYSl7cmV0dXJuIE5HKGEsZSxuKX19LCJyZW5kZXJUb0hUTUxUcmVlIikscTRlPXt2ZXJzaW9uOiIwLjE2LjExIixyZW5kZXI6UkcscmVuZGVyVG9TdHJpbmc6VTRlLFBhcnNlRXJyb3I6Z3QsU0VUVElOR1NfU0NIRU1BOmMzLF9fcGFyc2U6SDRlLF9fcmVuZGVyVG9Eb21UcmVlOlo3LF9fcmVuZGVyVG9IVE1MVHJlZTpXNGUsX19zZXRGb250TWV0cmljczpBYmUsX19kZWZpbmVTeW1ib2w6RyxfX2RlZmluZUZ1bmN0aW9uOk50LF9fZGVmaW5lTWFjcm86ZmUsX19kb21UcmVlOntTcGFuOnRkLEFuY2hvcjpWeSxTeW1ib2xOb2RlOlRzLFN2Z05vZGU6bGwsUGF0aE5vZGU6S2wsTGluZU5vZGU6VXl9fX0pO2Z1bmN0aW9uIGo0ZSgpe2xldCB0PSJkYXRhLXRlbXAtaHJlZi10YXJnZXQiO2NoLmFkZEhvb2soImJlZm9yZVNhbml0aXplQXR0cmlidXRlcyIsZT0+e2UgaW5zdGFuY2VvZiBFbGVtZW50JiZlLnRhZ05hbWU9PT0iQSImJmUuaGFzQXR0cmlidXRlKCJ0YXJnZXQiKSYmZS5zZXRBdHRyaWJ1dGUodCxlLmdldEF0dHJpYnV0ZSgidGFyZ2V0Iik/PyIiKX0pLGNoLmFkZEhvb2soImFmdGVyU2FuaXRpemVBdHRyaWJ1dGVzIixlPT57ZSBpbnN0YW5jZW9mIEVsZW1lbnQmJmUudGFnTmFtZT09PSJBIiYmZS5oYXNBdHRyaWJ1dGUodCkmJihlLnNldEF0dHJpYnV0ZSgidGFyZ2V0IixlLmdldEF0dHJpYnV0ZSh0KT8/IiIpLGUucmVtb3ZlQXR0cmlidXRlKHQpLGUuZ2V0QXR0cmlidXRlKCJ0YXJnZXQiKT09PSJfYmxhbmsiJiZlLnNldEF0dHJpYnV0ZSgicmVsIiwibm9vcGVuZXIiKSl9KX12YXIgbmQsWTRlLFg0ZSxCRyxPRyxUcixLNGUsUTRlLFo0ZSxKNGUsRkcsZTNlLGZyLHQzZSxyM2UsZWMsSjcsbjNlLGkzZSxQRyxlQSxwaSxpZCxtaCxaZSxncj1OKCgpPT57InVzZSBzdHJpY3QiO3U3KCk7bmQ9LzxiclxzKlwvPz4vZ2ksWTRlPW8odD0+dD9GRyh0KS5yZXBsYWNlKC9cXG4vZywiI2JyIyIpLnNwbGl0KCIjYnIjIik6WyIiXSwiZ2V0Um93cyIpLFg0ZT0oKCk9PntsZXQgdD0hMTtyZXR1cm4oKT0+e3R8fChqNGUoKSx0PSEwKX19KSgpO28oajRlLCJzZXR1cERvbXB1cmlmeUhvb2tzIik7Qkc9byh0PT4oWDRlKCksY2guc2FuaXRpemUodCkpLCJyZW1vdmVTY3JpcHQiKSxPRz1vKCh0LGUpPT57aWYoZS5mbG93Y2hhcnQ/Lmh0bWxMYWJlbHMhPT0hMSl7bGV0IHI9ZS5zZWN1cml0eUxldmVsO3I9PT0iYW50aXNjcmlwdCJ8fHI9PT0ic3RyaWN0Ij90PUJHKHQpOnIhPT0ibG9vc2UiJiYodD1GRyh0KSx0PXQucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IiksdD10LnJlcGxhY2UoLz0vZywiJmVxdWFsczsiKSx0PUo0ZSh0KSl9cmV0dXJuIHR9LCJzYW5pdGl6ZU1vcmUiKSxUcj1vKCh0LGUpPT50JiYoZS5kb21wdXJpZnlDb25maWc/dD1jaC5zYW5pdGl6ZShPRyh0LGUpLGUuZG9tcHVyaWZ5Q29uZmlnKS50b1N0cmluZygpOnQ9Y2guc2FuaXRpemUoT0codCxlKSx7Rk9SQklEX1RBR1M6WyJzdHlsZSJdfSkudG9TdHJpbmcoKSx0KSwic2FuaXRpemVUZXh0IiksSzRlPW8oKHQsZSk9PnR5cGVvZiB0PT0ic3RyaW5nIj9Ucih0LGUpOnQuZmxhdCgpLm1hcChyPT5UcihyLGUpKSwic2FuaXRpemVUZXh0T3JBcnJheSIpLFE0ZT1vKHQ9Pm5kLnRlc3QodCksImhhc0JyZWFrcyIpLFo0ZT1vKHQ9PnQuc3BsaXQobmQpLCJzcGxpdEJyZWFrcyIpLEo0ZT1vKHQ9PnQucmVwbGFjZSgvI2JyIy9nLCI8YnIvPiIpLCJwbGFjZWhvbGRlclRvQnJlYWsiKSxGRz1vKHQ9PnQucmVwbGFjZShuZCwiI2JyIyIpLCJicmVha1RvUGxhY2Vob2xkZXIiKSxlM2U9byh0PT57bGV0IGU9IiI7cmV0dXJuIHQmJihlPXdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCsiLy8iK3dpbmRvdy5sb2NhdGlvbi5ob3N0K3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSt3aW5kb3cubG9jYXRpb24uc2VhcmNoLGU9ZS5yZXBsYWNlQWxsKC9cKC9nLCJcXCgiKSxlPWUucmVwbGFjZUFsbCgvXCkvZywiXFwpIikpLGV9LCJnZXRVcmwiKSxmcj1vKHQ9PiEodD09PSExfHxbImZhbHNlIiwibnVsbCIsIjAiXS5pbmNsdWRlcyhTdHJpbmcodCkudHJpbSgpLnRvTG93ZXJDYXNlKCkpKSwiZXZhbHVhdGUiKSx0M2U9byhmdW5jdGlvbiguLi50KXtsZXQgZT10LmZpbHRlcihyPT4haXNOYU4ocikpO3JldHVybiBNYXRoLm1heCguLi5lKX0sImdldE1heCIpLHIzZT1vKGZ1bmN0aW9uKC4uLnQpe2xldCBlPXQuZmlsdGVyKHI9PiFpc05hTihyKSk7cmV0dXJuIE1hdGgubWluKC4uLmUpfSwiZ2V0TWluIiksZWM9byhmdW5jdGlvbih0KXtsZXQgZT10LnNwbGl0KC8oLCkvKSxyPVtdO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXtsZXQgaT1lW25dO2lmKGk9PT0iLCImJm4+MCYmbisxPGUubGVuZ3RoKXtsZXQgYT1lW24tMV0scz1lW24rMV07bjNlKGEscykmJihpPWErIiwiK3MsbisrLHIucG9wKCkpfXIucHVzaChpM2UoaSkpfXJldHVybiByLmpvaW4oIiIpfSwicGFyc2VHZW5lcmljVHlwZXMiKSxKNz1vKCh0LGUpPT5NYXRoLm1heCgwLHQuc3BsaXQoZSkubGVuZ3RoLTEpLCJjb3VudE9jY3VycmVuY2UiKSxuM2U9bygodCxlKT0+e2xldCByPUo3KHQsIn4iKSxuPUo3KGUsIn4iKTtyZXR1cm4gcj09PTEmJm49PT0xfSwic2hvdWxkQ29tYmluZVNldHMiKSxpM2U9byh0PT57bGV0IGU9SjcodCwifiIpLHI9ITE7aWYoZTw9MSlyZXR1cm4gdDtlJTIhPT0wJiZ0LnN0YXJ0c1dpdGgoIn4iKSYmKHQ9dC5zdWJzdHJpbmcoMSkscj0hMCk7bGV0IG49Wy4uLnRdLGk9bi5pbmRleE9mKCJ+IiksYT1uLmxhc3RJbmRleE9mKCJ+Iik7Zm9yKDtpIT09LTEmJmEhPT0tMSYmaSE9PWE7KW5baV09IjwiLG5bYV09Ij4iLGk9bi5pbmRleE9mKCJ+IiksYT1uLmxhc3RJbmRleE9mKCJ+Iik7cmV0dXJuIHImJm4udW5zaGlmdCgifiIpLG4uam9pbigiIil9LCJwcm9jZXNzU2V0IiksUEc9bygoKT0+d2luZG93Lk1hdGhNTEVsZW1lbnQhPT12b2lkIDAsImlzTWF0aE1MU3VwcG9ydGVkIiksZUE9L1wkXCQoLiopXCRcJC9nLHBpPW8odD0+KHQubWF0Y2goZUEpPy5sZW5ndGg/PzApPjAsImhhc0thdGV4IiksaWQ9byhhc3luYyh0LGUpPT57dD1hd2FpdCBtaCh0LGUpO2xldCByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3IuaW5uZXJIVE1MPXQsci5pZD0ia2F0ZXgtdGVtcCIsci5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iLHIuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixyLnN0eWxlLnRvcD0iMCIsZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiYm9keSIpPy5pbnNlcnRBZGphY2VudEVsZW1lbnQoImJlZm9yZWVuZCIscik7bGV0IGk9e3dpZHRoOnIuY2xpZW50V2lkdGgsaGVpZ2h0OnIuY2xpZW50SGVpZ2h0fTtyZXR1cm4gci5yZW1vdmUoKSxpfSwiY2FsY3VsYXRlTWF0aE1MRGltZW5zaW9ucyIpLG1oPW8oYXN5bmModCxlKT0+e2lmKCFwaSh0KSlyZXR1cm4gdDtpZighKFBHKCl8fGUubGVnYWN5TWF0aE1MfHxlLmZvcmNlTGVnYWN5TWF0aE1MKSlyZXR1cm4gdC5yZXBsYWNlKGVBLCJNYXRoTUwgaXMgdW5zdXBwb3J0ZWQgaW4gdGhpcyBlbnZpcm9ubWVudC4iKTtsZXR7ZGVmYXVsdDpyfT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oSUcoKSxNRykpLG49ZS5mb3JjZUxlZ2FjeU1hdGhNTHx8IVBHKCkmJmUubGVnYWN5TWF0aE1MPyJodG1sQW5kTWF0aG1sIjoibWF0aG1sIjtyZXR1cm4gdC5zcGxpdChuZCkubWFwKGk9PnBpKGkpP2A8ZGl2IHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgd2hpdGUtc3BhY2U6IG5vd3JhcDsiPiR7aX08L2Rpdj5gOmA8ZGl2PiR7aX08L2Rpdj5gKS5qb2luKCIiKS5yZXBsYWNlKGVBLChpLGEpPT5yLnJlbmRlclRvU3RyaW5nKGEse3Rocm93T25FcnJvcjohMCxkaXNwbGF5TW9kZTohMCxvdXRwdXQ6bn0pLnJlcGxhY2UoL1xuL2csIiAiKS5yZXBsYWNlKC88YW5ub3RhdGlvbi4qPFwvYW5ub3RhdGlvbj4vZywiIikpfSwicmVuZGVyS2F0ZXgiKSxaZT17Z2V0Um93czpZNGUsc2FuaXRpemVUZXh0OlRyLHNhbml0aXplVGV4dE9yQXJyYXk6SzRlLGhhc0JyZWFrczpRNGUsc3BsaXRCcmVha3M6WjRlLGxpbmVCcmVha1JlZ2V4Om5kLHJlbW92ZVNjcmlwdDpCRyxnZXRVcmw6ZTNlLGV2YWx1YXRlOmZyLGdldE1heDp0M2UsZ2V0TWluOnIzZX19KTt2YXIgYTNlLHMzZSx2bixBbyxFaT1OKCgpPT57InVzZSBzdHJpY3QiO3Z0KCk7YTNlPW8oZnVuY3Rpb24odCxlKXtmb3IobGV0IHIgb2YgZSl0LmF0dHIoclswXSxyWzFdKX0sImQzQXR0cnMiKSxzM2U9byhmdW5jdGlvbih0LGUscil7bGV0IG49bmV3IE1hcDtyZXR1cm4gcj8obi5zZXQoIndpZHRoIiwiMTAwJSIpLG4uc2V0KCJzdHlsZSIsYG1heC13aWR0aDogJHtlfXB4O2ApKToobi5zZXQoImhlaWdodCIsdCksbi5zZXQoIndpZHRoIixlKSksbn0sImNhbGN1bGF0ZVN2Z1NpemVBdHRycyIpLHZuPW8oZnVuY3Rpb24odCxlLHIsbil7bGV0IGk9czNlKGUscixuKTthM2UodCxpKX0sImNvbmZpZ3VyZVN2Z1NpemUiKSxBbz1vKGZ1bmN0aW9uKHQsZSxyLG4pe2xldCBpPWUubm9kZSgpLmdldEJCb3goKSxhPWkud2lkdGgscz1pLmhlaWdodDtZLmluZm8oYFNWRyBib3VuZHM6ICR7YX14JHtzfWAsaSk7bGV0IGw9MCx1PTA7WS5pbmZvKGBHcmFwaCBib3VuZHM6ICR7bH14JHt1fWAsdCksbD1hK3IqMix1PXMrcioyLFkuaW5mbyhgQ2FsY3VsYXRlZCBib3VuZHM6ICR7bH14JHt1fWApLHZuKGUsdSxsLG4pO2xldCBoPWAke2kueC1yfSAke2kueS1yfSAke2kud2lkdGgrMipyfSAke2kuaGVpZ2h0KzIqcn1gO2UuYXR0cigidmlld0JveCIsaCl9LCJzZXR1cEdyYXBoVmlld2JveCIpfSk7dmFyIFMzLG8zZSwkRyx6Ryx0QT1OKCgpPT57InVzZSBzdHJpY3QiO3Z0KCk7UzM9e30sbzNlPW8oKHQsZSxyKT0+e2xldCBuPSIiO3JldHVybiB0IGluIFMzJiZTM1t0XT9uPVMzW3RdKHIpOlkud2FybihgTm8gdGhlbWUgZm91bmQgZm9yICR7dH1gKSxgICYgewogICAgZm9udC1mYW1pbHk6ICR7ci5mb250RmFtaWx5fTsKICAgIGZvbnQtc2l6ZTogJHtyLmZvbnRTaXplfTsKICAgIGZpbGw6ICR7ci50ZXh0Q29sb3J9CiAgfQogIEBrZXlmcmFtZXMgZWRnZS1hbmltYXRpb24tZnJhbWUgewogICAgZnJvbSB7CiAgICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAwOwogICAgfQogIH0KICBAa2V5ZnJhbWVzIGRhc2ggewogICAgdG8gewogICAgICBzdHJva2UtZGFzaG9mZnNldDogMDsKICAgIH0KICB9CiAgJiAuZWRnZS1hbmltYXRpb24tc2xvdyB7CiAgICBzdHJva2UtZGFzaGFycmF5OiA5LDUgIWltcG9ydGFudDsKICAgIHN0cm9rZS1kYXNob2Zmc2V0OiA5MDA7CiAgICBhbmltYXRpb246IGRhc2ggNTBzIGxpbmVhciBpbmZpbml0ZTsKICAgIHN0cm9rZS1saW5lY2FwOiByb3VuZDsKICB9CiAgJiAuZWRnZS1hbmltYXRpb24tZmFzdCB7CiAgICBzdHJva2UtZGFzaGFycmF5OiA5LDUgIWltcG9ydGFudDsKICAgIHN0cm9rZS1kYXNob2Zmc2V0OiA5MDA7CiAgICBhbmltYXRpb246IGRhc2ggMjBzIGxpbmVhciBpbmZpbml0ZTsKICAgIHN0cm9rZS1saW5lY2FwOiByb3VuZDsKICB9CiAgLyogQ2xhc3NlcyBjb21tb24gZm9yIG11bHRpcGxlIGRpYWdyYW1zICovCgogICYgLmVycm9yLWljb24gewogICAgZmlsbDogJHtyLmVycm9yQmtnQ29sb3J9OwogIH0KICAmIC5lcnJvci10ZXh0IHsKICAgIGZpbGw6ICR7ci5lcnJvclRleHRDb2xvcn07CiAgICBzdHJva2U6ICR7ci5lcnJvclRleHRDb2xvcn07CiAgfQoKICAmIC5lZGdlLXRoaWNrbmVzcy1ub3JtYWwgewogICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgfQogICYgLmVkZ2UtdGhpY2tuZXNzLXRoaWNrIHsKICAgIHN0cm9rZS13aWR0aDogMy41cHgKICB9CiAgJiAuZWRnZS1wYXR0ZXJuLXNvbGlkIHsKICAgIHN0cm9rZS1kYXNoYXJyYXk6IDA7CiAgfQogICYgLmVkZ2UtdGhpY2tuZXNzLWludmlzaWJsZSB7CiAgICBzdHJva2Utd2lkdGg6IDA7CiAgICBmaWxsOiBub25lOwogIH0KICAmIC5lZGdlLXBhdHRlcm4tZGFzaGVkewogICAgc3Ryb2tlLWRhc2hhcnJheTogMzsKICB9CiAgLmVkZ2UtcGF0dGVybi1kb3R0ZWQgewogICAgc3Ryb2tlLWRhc2hhcnJheTogMjsKICB9CgogICYgLm1hcmtlciB7CiAgICBmaWxsOiAke3IubGluZUNvbG9yfTsKICAgIHN0cm9rZTogJHtyLmxpbmVDb2xvcn07CiAgfQogICYgLm1hcmtlci5jcm9zcyB7CiAgICBzdHJva2U6ICR7ci5saW5lQ29sb3J9OwogIH0KCiAgJiBzdmcgewogICAgZm9udC1mYW1pbHk6ICR7ci5mb250RmFtaWx5fTsKICAgIGZvbnQtc2l6ZTogJHtyLmZvbnRTaXplfTsKICB9CiAgICYgcCB7CiAgICBtYXJnaW46IDAKICAgfQoKICAke259CgogICR7ZX0KYH0sImdldFN0eWxlcyIpLCRHPW8oKHQsZSk9PntlIT09dm9pZCAwJiYoUzNbdF09ZSl9LCJhZGRTdHlsZXNGb3JEaWFncmFtIiksekc9bzNlfSk7dmFyIHF5PXt9O2hyKHF5LHtjbGVhcjooKT0+QXIsZ2V0QWNjRGVzY3JpcHRpb246KCk9Pk1yLGdldEFjY1RpdGxlOigpPT5ScixnZXREaWFncmFtVGl0bGU6KCk9PklyLHNldEFjY0Rlc2NyaXB0aW9uOigpPT5OcixzZXRBY2NUaXRsZTooKT0+THIsc2V0RGlhZ3JhbVRpdGxlOigpPT4kcn0pO3ZhciByQSxuQSxpQSxhQSxBcixMcixScixOcixNciwkcixJcixtaT1OKCgpPT57InVzZSBzdHJpY3QiO2dyKCk7amkoKTtyQT0iIixuQT0iIixpQT0iIixhQT1vKHQ9PlRyKHQsY3IoKSksInNhbml0aXplVGV4dCIpLEFyPW8oKCk9PntyQT0iIixpQT0iIixuQT0iIn0sImNsZWFyIiksTHI9byh0PT57ckE9YUEodCkucmVwbGFjZSgvXlxzKy9nLCIiKX0sInNldEFjY1RpdGxlIiksUnI9bygoKT0+ckEsImdldEFjY1RpdGxlIiksTnI9byh0PT57aUE9YUEodCkucmVwbGFjZSgvXG5ccysvZyxgCmApfSwic2V0QWNjRGVzY3JpcHRpb24iKSxNcj1vKCgpPT5pQSwiZ2V0QWNjRGVzY3JpcHRpb24iKSwkcj1vKHQ9PntuQT1hQSh0KX0sInNldERpYWdyYW1UaXRsZSIpLElyPW8oKCk9Pm5BLCJnZXREaWFncmFtVGl0bGUiKX0pO3ZhciBHRyxsM2UsbWUsWXksQTMsWHksb0EsYzNlLEMzLGFkLGp5LHNBLHp0PU4oKCk9PnsidXNlIHN0cmljdCI7WGYoKTt2dCgpO2ppKCk7Z3IoKTtFaSgpO3RBKCk7bWkoKTtHRz1ZLGwzZT13eSxtZT1jcixZeT1YNCxBMz1saCxYeT1vKHQ9PlRyKHQsbWUoKSksInNhbml0aXplVGV4dCIpLG9BPUFvLGMzZT1vKCgpPT5xeSwiZ2V0Q29tbW9uRGIiKSxDMz17fSxhZD1vKCh0LGUscik9PntDM1t0XSYmR0cud2FybihgRGlhZ3JhbSB3aXRoIGlkICR7dH0gYWxyZWFkeSByZWdpc3RlcmVkLiBPdmVyd3JpdGluZy5gKSxDM1t0XT1lLHImJkZDKHQsciksJEcodCxlLnN0eWxlcyksZS5pbmplY3RVdGlscz8uKEdHLGwzZSxtZSxYeSxvQSxjM2UoKSwoKT0+e30pfSwicmVnaXN0ZXJEaWFncmFtIiksank9byh0PT57aWYodCBpbiBDMylyZXR1cm4gQzNbdF07dGhyb3cgbmV3IHNBKHQpfSwiZ2V0RGlhZ3JhbSIpLHNBPWNsYXNzIGV4dGVuZHMgRXJyb3J7c3RhdGlje28odGhpcywiRGlhZ3JhbU5vdEZvdW5kRXJyb3IiKX1jb25zdHJ1Y3RvcihlKXtzdXBlcihgRGlhZ3JhbSAke2V9IG5vdCBmb3VuZC5gKX19fSk7dmFyIHVsLGdoLEphLGNsLHRjLEt5LGxBLGNBLF8zLEQzLFZHLHUzZSxoM2UsZjNlLGQzZSxwM2UsbTNlLGczZSx5M2UsdjNlLHgzZSxiM2UsdzNlLFQzZSxrM2UsRTNlLFMzZSxDM2UsVUcsQTNlLF8zZSxIRyxEM2UsTDNlLFIzZSxOM2UseWgsTTNlLEkzZSxPM2UsUDNlLEIzZSxReSx1QT1OKCgpPT57InVzZSBzdHJpY3QiO3p0KCk7Z3IoKTttaSgpO3VsPVtdLGdoPVsiIl0sSmE9Imdsb2JhbCIsY2w9IiIsdGM9W3thbGlhczoiZ2xvYmFsIixsYWJlbDp7dGV4dDoiZ2xvYmFsIn0sdHlwZTp7dGV4dDoiZ2xvYmFsIn0sdGFnczpudWxsLGxpbms6bnVsbCxwYXJlbnRCb3VuZGFyeToiIn1dLEt5PVtdLGxBPSIiLGNBPSExLF8zPTQsRDM9Mix1M2U9byhmdW5jdGlvbigpe3JldHVybiBWR30sImdldEM0VHlwZSIpLGgzZT1vKGZ1bmN0aW9uKHQpe1ZHPVRyKHQsbWUoKSl9LCJzZXRDNFR5cGUiKSxmM2U9byhmdW5jdGlvbih0LGUscixuLGksYSxzLGwsdSl7aWYodD09bnVsbHx8ZT09PXZvaWQgMHx8ZT09PW51bGx8fHI9PT12b2lkIDB8fHI9PT1udWxsfHxuPT09dm9pZCAwfHxuPT09bnVsbClyZXR1cm47bGV0IGg9e30sZj1LeS5maW5kKGQ9PmQuZnJvbT09PWUmJmQudG89PT1yKTtpZihmP2g9ZjpLeS5wdXNoKGgpLGgudHlwZT10LGguZnJvbT1lLGgudG89cixoLmxhYmVsPXt0ZXh0Om59LGk9PW51bGwpaC50ZWNobj17dGV4dDoiIn07ZWxzZSBpZih0eXBlb2YgaT09Im9iamVjdCIpe2xldFtkLHBdPU9iamVjdC5lbnRyaWVzKGkpWzBdO2hbZF09e3RleHQ6cH19ZWxzZSBoLnRlY2huPXt0ZXh0Oml9O2lmKGE9PW51bGwpaC5kZXNjcj17dGV4dDoiIn07ZWxzZSBpZih0eXBlb2YgYT09Im9iamVjdCIpe2xldFtkLHBdPU9iamVjdC5lbnRyaWVzKGEpWzBdO2hbZF09e3RleHQ6cH19ZWxzZSBoLmRlc2NyPXt0ZXh0OmF9O2lmKHR5cGVvZiBzPT0ib2JqZWN0Iil7bGV0W2QscF09T2JqZWN0LmVudHJpZXMocylbMF07aFtkXT1wfWVsc2UgaC5zcHJpdGU9cztpZih0eXBlb2YgbD09Im9iamVjdCIpe2xldFtkLHBdPU9iamVjdC5lbnRyaWVzKGwpWzBdO2hbZF09cH1lbHNlIGgudGFncz1sO2lmKHR5cGVvZiB1PT0ib2JqZWN0Iil7bGV0W2QscF09T2JqZWN0LmVudHJpZXModSlbMF07aFtkXT1wfWVsc2UgaC5saW5rPXU7aC53cmFwPXloKCl9LCJhZGRSZWwiKSxkM2U9byhmdW5jdGlvbih0LGUscixuLGksYSxzKXtpZihlPT09bnVsbHx8cj09PW51bGwpcmV0dXJuO2xldCBsPXt9LHU9dWwuZmluZChoPT5oLmFsaWFzPT09ZSk7aWYodSYmZT09PXUuYWxpYXM/bD11OihsLmFsaWFzPWUsdWwucHVzaChsKSkscj09bnVsbD9sLmxhYmVsPXt0ZXh0OiIifTpsLmxhYmVsPXt0ZXh0OnJ9LG49PW51bGwpbC5kZXNjcj17dGV4dDoiIn07ZWxzZSBpZih0eXBlb2Ygbj09Im9iamVjdCIpe2xldFtoLGZdPU9iamVjdC5lbnRyaWVzKG4pWzBdO2xbaF09e3RleHQ6Zn19ZWxzZSBsLmRlc2NyPXt0ZXh0Om59O2lmKHR5cGVvZiBpPT0ib2JqZWN0Iil7bGV0W2gsZl09T2JqZWN0LmVudHJpZXMoaSlbMF07bFtoXT1mfWVsc2UgbC5zcHJpdGU9aTtpZih0eXBlb2YgYT09Im9iamVjdCIpe2xldFtoLGZdPU9iamVjdC5lbnRyaWVzKGEpWzBdO2xbaF09Zn1lbHNlIGwudGFncz1hO2lmKHR5cGVvZiBzPT0ib2JqZWN0Iil7bGV0W2gsZl09T2JqZWN0LmVudHJpZXMocylbMF07bFtoXT1mfWVsc2UgbC5saW5rPXM7bC50eXBlQzRTaGFwZT17dGV4dDp0fSxsLnBhcmVudEJvdW5kYXJ5PUphLGwud3JhcD15aCgpfSwiYWRkUGVyc29uT3JTeXN0ZW0iKSxwM2U9byhmdW5jdGlvbih0LGUscixuLGksYSxzLGwpe2lmKGU9PT1udWxsfHxyPT09bnVsbClyZXR1cm47bGV0IHU9e30saD11bC5maW5kKGY9PmYuYWxpYXM9PT1lKTtpZihoJiZlPT09aC5hbGlhcz91PWg6KHUuYWxpYXM9ZSx1bC5wdXNoKHUpKSxyPT1udWxsP3UubGFiZWw9e3RleHQ6IiJ9OnUubGFiZWw9e3RleHQ6cn0sbj09bnVsbCl1LnRlY2huPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiBuPT0ib2JqZWN0Iil7bGV0W2YsZF09T2JqZWN0LmVudHJpZXMobilbMF07dVtmXT17dGV4dDpkfX1lbHNlIHUudGVjaG49e3RleHQ6bn07aWYoaT09bnVsbCl1LmRlc2NyPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiBpPT0ib2JqZWN0Iil7bGV0W2YsZF09T2JqZWN0LmVudHJpZXMoaSlbMF07dVtmXT17dGV4dDpkfX1lbHNlIHUuZGVzY3I9e3RleHQ6aX07aWYodHlwZW9mIGE9PSJvYmplY3QiKXtsZXRbZixkXT1PYmplY3QuZW50cmllcyhhKVswXTt1W2ZdPWR9ZWxzZSB1LnNwcml0ZT1hO2lmKHR5cGVvZiBzPT0ib2JqZWN0Iil7bGV0W2YsZF09T2JqZWN0LmVudHJpZXMocylbMF07dVtmXT1kfWVsc2UgdS50YWdzPXM7aWYodHlwZW9mIGw9PSJvYmplY3QiKXtsZXRbZixkXT1PYmplY3QuZW50cmllcyhsKVswXTt1W2ZdPWR9ZWxzZSB1Lmxpbms9bDt1LndyYXA9eWgoKSx1LnR5cGVDNFNoYXBlPXt0ZXh0OnR9LHUucGFyZW50Qm91bmRhcnk9SmF9LCJhZGRDb250YWluZXIiKSxtM2U9byhmdW5jdGlvbih0LGUscixuLGksYSxzLGwpe2lmKGU9PT1udWxsfHxyPT09bnVsbClyZXR1cm47bGV0IHU9e30saD11bC5maW5kKGY9PmYuYWxpYXM9PT1lKTtpZihoJiZlPT09aC5hbGlhcz91PWg6KHUuYWxpYXM9ZSx1bC5wdXNoKHUpKSxyPT1udWxsP3UubGFiZWw9e3RleHQ6IiJ9OnUubGFiZWw9e3RleHQ6cn0sbj09bnVsbCl1LnRlY2huPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiBuPT0ib2JqZWN0Iil7bGV0W2YsZF09T2JqZWN0LmVudHJpZXMobilbMF07dVtmXT17dGV4dDpkfX1lbHNlIHUudGVjaG49e3RleHQ6bn07aWYoaT09bnVsbCl1LmRlc2NyPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiBpPT0ib2JqZWN0Iil7bGV0W2YsZF09T2JqZWN0LmVudHJpZXMoaSlbMF07dVtmXT17dGV4dDpkfX1lbHNlIHUuZGVzY3I9e3RleHQ6aX07aWYodHlwZW9mIGE9PSJvYmplY3QiKXtsZXRbZixkXT1PYmplY3QuZW50cmllcyhhKVswXTt1W2ZdPWR9ZWxzZSB1LnNwcml0ZT1hO2lmKHR5cGVvZiBzPT0ib2JqZWN0Iil7bGV0W2YsZF09T2JqZWN0LmVudHJpZXMocylbMF07dVtmXT1kfWVsc2UgdS50YWdzPXM7aWYodHlwZW9mIGw9PSJvYmplY3QiKXtsZXRbZixkXT1PYmplY3QuZW50cmllcyhsKVswXTt1W2ZdPWR9ZWxzZSB1Lmxpbms9bDt1LndyYXA9eWgoKSx1LnR5cGVDNFNoYXBlPXt0ZXh0OnR9LHUucGFyZW50Qm91bmRhcnk9SmF9LCJhZGRDb21wb25lbnQiKSxnM2U9byhmdW5jdGlvbih0LGUscixuLGkpe2lmKHQ9PT1udWxsfHxlPT09bnVsbClyZXR1cm47bGV0IGE9e30scz10Yy5maW5kKGw9PmwuYWxpYXM9PT10KTtpZihzJiZ0PT09cy5hbGlhcz9hPXM6KGEuYWxpYXM9dCx0Yy5wdXNoKGEpKSxlPT1udWxsP2EubGFiZWw9e3RleHQ6IiJ9OmEubGFiZWw9e3RleHQ6ZX0scj09bnVsbClhLnR5cGU9e3RleHQ6InN5c3RlbSJ9O2Vsc2UgaWYodHlwZW9mIHI9PSJvYmplY3QiKXtsZXRbbCx1XT1PYmplY3QuZW50cmllcyhyKVswXTthW2xdPXt0ZXh0OnV9fWVsc2UgYS50eXBlPXt0ZXh0OnJ9O2lmKHR5cGVvZiBuPT0ib2JqZWN0Iil7bGV0W2wsdV09T2JqZWN0LmVudHJpZXMobilbMF07YVtsXT11fWVsc2UgYS50YWdzPW47aWYodHlwZW9mIGk9PSJvYmplY3QiKXtsZXRbbCx1XT1PYmplY3QuZW50cmllcyhpKVswXTthW2xdPXV9ZWxzZSBhLmxpbms9aTthLnBhcmVudEJvdW5kYXJ5PUphLGEud3JhcD15aCgpLGNsPUphLEphPXQsZ2gucHVzaChjbCl9LCJhZGRQZXJzb25PclN5c3RlbUJvdW5kYXJ5IikseTNlPW8oZnVuY3Rpb24odCxlLHIsbixpKXtpZih0PT09bnVsbHx8ZT09PW51bGwpcmV0dXJuO2xldCBhPXt9LHM9dGMuZmluZChsPT5sLmFsaWFzPT09dCk7aWYocyYmdD09PXMuYWxpYXM/YT1zOihhLmFsaWFzPXQsdGMucHVzaChhKSksZT09bnVsbD9hLmxhYmVsPXt0ZXh0OiIifTphLmxhYmVsPXt0ZXh0OmV9LHI9PW51bGwpYS50eXBlPXt0ZXh0OiJjb250YWluZXIifTtlbHNlIGlmKHR5cGVvZiByPT0ib2JqZWN0Iil7bGV0W2wsdV09T2JqZWN0LmVudHJpZXMocilbMF07YVtsXT17dGV4dDp1fX1lbHNlIGEudHlwZT17dGV4dDpyfTtpZih0eXBlb2Ygbj09Im9iamVjdCIpe2xldFtsLHVdPU9iamVjdC5lbnRyaWVzKG4pWzBdO2FbbF09dX1lbHNlIGEudGFncz1uO2lmKHR5cGVvZiBpPT0ib2JqZWN0Iil7bGV0W2wsdV09T2JqZWN0LmVudHJpZXMoaSlbMF07YVtsXT11fWVsc2UgYS5saW5rPWk7YS5wYXJlbnRCb3VuZGFyeT1KYSxhLndyYXA9eWgoKSxjbD1KYSxKYT10LGdoLnB1c2goY2wpfSwiYWRkQ29udGFpbmVyQm91bmRhcnkiKSx2M2U9byhmdW5jdGlvbih0LGUscixuLGksYSxzLGwpe2lmKGU9PT1udWxsfHxyPT09bnVsbClyZXR1cm47bGV0IHU9e30saD10Yy5maW5kKGY9PmYuYWxpYXM9PT1lKTtpZihoJiZlPT09aC5hbGlhcz91PWg6KHUuYWxpYXM9ZSx0Yy5wdXNoKHUpKSxyPT1udWxsP3UubGFiZWw9e3RleHQ6IiJ9OnUubGFiZWw9e3RleHQ6cn0sbj09bnVsbCl1LnR5cGU9e3RleHQ6Im5vZGUifTtlbHNlIGlmKHR5cGVvZiBuPT0ib2JqZWN0Iil7bGV0W2YsZF09T2JqZWN0LmVudHJpZXMobilbMF07dVtmXT17dGV4dDpkfX1lbHNlIHUudHlwZT17dGV4dDpufTtpZihpPT1udWxsKXUuZGVzY3I9e3RleHQ6IiJ9O2Vsc2UgaWYodHlwZW9mIGk9PSJvYmplY3QiKXtsZXRbZixkXT1PYmplY3QuZW50cmllcyhpKVswXTt1W2ZdPXt0ZXh0OmR9fWVsc2UgdS5kZXNjcj17dGV4dDppfTtpZih0eXBlb2Ygcz09Im9iamVjdCIpe2xldFtmLGRdPU9iamVjdC5lbnRyaWVzKHMpWzBdO3VbZl09ZH1lbHNlIHUudGFncz1zO2lmKHR5cGVvZiBsPT0ib2JqZWN0Iil7bGV0W2YsZF09T2JqZWN0LmVudHJpZXMobClbMF07dVtmXT1kfWVsc2UgdS5saW5rPWw7dS5ub2RlVHlwZT10LHUucGFyZW50Qm91bmRhcnk9SmEsdS53cmFwPXloKCksY2w9SmEsSmE9ZSxnaC5wdXNoKGNsKX0sImFkZERlcGxveW1lbnROb2RlIikseDNlPW8oZnVuY3Rpb24oKXtKYT1jbCxnaC5wb3AoKSxjbD1naC5wb3AoKSxnaC5wdXNoKGNsKX0sInBvcEJvdW5kYXJ5UGFyc2VTdGFjayIpLGIzZT1vKGZ1bmN0aW9uKHQsZSxyLG4saSxhLHMsbCx1LGgsZil7bGV0IGQ9dWwuZmluZChwPT5wLmFsaWFzPT09ZSk7aWYoIShkPT09dm9pZCAwJiYoZD10Yy5maW5kKHA9PnAuYWxpYXM9PT1lKSxkPT09dm9pZCAwKSkpe2lmKHIhPW51bGwpaWYodHlwZW9mIHI9PSJvYmplY3QiKXtsZXRbcCxtXT1PYmplY3QuZW50cmllcyhyKVswXTtkW3BdPW19ZWxzZSBkLmJnQ29sb3I9cjtpZihuIT1udWxsKWlmKHR5cGVvZiBuPT0ib2JqZWN0Iil7bGV0W3AsbV09T2JqZWN0LmVudHJpZXMobilbMF07ZFtwXT1tfWVsc2UgZC5mb250Q29sb3I9bjtpZihpIT1udWxsKWlmKHR5cGVvZiBpPT0ib2JqZWN0Iil7bGV0W3AsbV09T2JqZWN0LmVudHJpZXMoaSlbMF07ZFtwXT1tfWVsc2UgZC5ib3JkZXJDb2xvcj1pO2lmKGEhPW51bGwpaWYodHlwZW9mIGE9PSJvYmplY3QiKXtsZXRbcCxtXT1PYmplY3QuZW50cmllcyhhKVswXTtkW3BdPW19ZWxzZSBkLnNoYWRvd2luZz1hO2lmKHMhPW51bGwpaWYodHlwZW9mIHM9PSJvYmplY3QiKXtsZXRbcCxtXT1PYmplY3QuZW50cmllcyhzKVswXTtkW3BdPW19ZWxzZSBkLnNoYXBlPXM7aWYobCE9bnVsbClpZih0eXBlb2YgbD09Im9iamVjdCIpe2xldFtwLG1dPU9iamVjdC5lbnRyaWVzKGwpWzBdO2RbcF09bX1lbHNlIGQuc3ByaXRlPWw7aWYodSE9bnVsbClpZih0eXBlb2YgdT09Im9iamVjdCIpe2xldFtwLG1dPU9iamVjdC5lbnRyaWVzKHUpWzBdO2RbcF09bX1lbHNlIGQudGVjaG49dTtpZihoIT1udWxsKWlmKHR5cGVvZiBoPT0ib2JqZWN0Iil7bGV0W3AsbV09T2JqZWN0LmVudHJpZXMoaClbMF07ZFtwXT1tfWVsc2UgZC5sZWdlbmRUZXh0PWg7aWYoZiE9bnVsbClpZih0eXBlb2YgZj09Im9iamVjdCIpe2xldFtwLG1dPU9iamVjdC5lbnRyaWVzKGYpWzBdO2RbcF09bX1lbHNlIGQubGVnZW5kU3ByaXRlPWZ9fSwidXBkYXRlRWxTdHlsZSIpLHczZT1vKGZ1bmN0aW9uKHQsZSxyLG4saSxhLHMpe2xldCBsPUt5LmZpbmQodT0+dS5mcm9tPT09ZSYmdS50bz09PXIpO2lmKGwhPT12b2lkIDApe2lmKG4hPW51bGwpaWYodHlwZW9mIG49PSJvYmplY3QiKXtsZXRbdSxoXT1PYmplY3QuZW50cmllcyhuKVswXTtsW3VdPWh9ZWxzZSBsLnRleHRDb2xvcj1uO2lmKGkhPW51bGwpaWYodHlwZW9mIGk9PSJvYmplY3QiKXtsZXRbdSxoXT1PYmplY3QuZW50cmllcyhpKVswXTtsW3VdPWh9ZWxzZSBsLmxpbmVDb2xvcj1pO2lmKGEhPW51bGwpaWYodHlwZW9mIGE9PSJvYmplY3QiKXtsZXRbdSxoXT1PYmplY3QuZW50cmllcyhhKVswXTtsW3VdPXBhcnNlSW50KGgpfWVsc2UgbC5vZmZzZXRYPXBhcnNlSW50KGEpO2lmKHMhPW51bGwpaWYodHlwZW9mIHM9PSJvYmplY3QiKXtsZXRbdSxoXT1PYmplY3QuZW50cmllcyhzKVswXTtsW3VdPXBhcnNlSW50KGgpfWVsc2UgbC5vZmZzZXRZPXBhcnNlSW50KHMpfX0sInVwZGF0ZVJlbFN0eWxlIiksVDNlPW8oZnVuY3Rpb24odCxlLHIpe2xldCBuPV8zLGk9RDM7aWYodHlwZW9mIGU9PSJvYmplY3QiKXtsZXQgYT1PYmplY3QudmFsdWVzKGUpWzBdO249cGFyc2VJbnQoYSl9ZWxzZSBuPXBhcnNlSW50KGUpO2lmKHR5cGVvZiByPT0ib2JqZWN0Iil7bGV0IGE9T2JqZWN0LnZhbHVlcyhyKVswXTtpPXBhcnNlSW50KGEpfWVsc2UgaT1wYXJzZUludChyKTtuPj0xJiYoXzM9biksaT49MSYmKEQzPWkpfSwidXBkYXRlTGF5b3V0Q29uZmlnIiksazNlPW8oZnVuY3Rpb24oKXtyZXR1cm4gXzN9LCJnZXRDNFNoYXBlSW5Sb3ciKSxFM2U9byhmdW5jdGlvbigpe3JldHVybiBEM30sImdldEM0Qm91bmRhcnlJblJvdyIpLFMzZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIEphfSwiZ2V0Q3VycmVudEJvdW5kYXJ5UGFyc2UiKSxDM2U9byhmdW5jdGlvbigpe3JldHVybiBjbH0sImdldFBhcmVudEJvdW5kYXJ5UGFyc2UiKSxVRz1vKGZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP3VsOnVsLmZpbHRlcihlPT5lLnBhcmVudEJvdW5kYXJ5PT09dCl9LCJnZXRDNFNoYXBlQXJyYXkiKSxBM2U9byhmdW5jdGlvbih0KXtyZXR1cm4gdWwuZmluZChlPT5lLmFsaWFzPT09dCl9LCJnZXRDNFNoYXBlIiksXzNlPW8oZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5rZXlzKFVHKHQpKX0sImdldEM0U2hhcGVLZXlzIiksSEc9byhmdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD90Yzp0Yy5maWx0ZXIoZT0+ZS5wYXJlbnRCb3VuZGFyeT09PXQpfSwiZ2V0Qm91bmRhcmllcyIpLEQzZT1IRyxMM2U9byhmdW5jdGlvbigpe3JldHVybiBLeX0sImdldFJlbHMiKSxSM2U9byhmdW5jdGlvbigpe3JldHVybiBsQX0sImdldFRpdGxlIiksTjNlPW8oZnVuY3Rpb24odCl7Y0E9dH0sInNldFdyYXAiKSx5aD1vKGZ1bmN0aW9uKCl7cmV0dXJuIGNBfSwiYXV0b1dyYXAiKSxNM2U9byhmdW5jdGlvbigpe3VsPVtdLHRjPVt7YWxpYXM6Imdsb2JhbCIsbGFiZWw6e3RleHQ6Imdsb2JhbCJ9LHR5cGU6e3RleHQ6Imdsb2JhbCJ9LHRhZ3M6bnVsbCxsaW5rOm51bGwscGFyZW50Qm91bmRhcnk6IiJ9XSxjbD0iIixKYT0iZ2xvYmFsIixnaD1bIiJdLEt5PVtdLGdoPVsiIl0sbEE9IiIsY0E9ITEsXzM9NCxEMz0yfSwiY2xlYXIiKSxJM2U9e1NPTElEOjAsRE9UVEVEOjEsTk9URToyLFNPTElEX0NST1NTOjMsRE9UVEVEX0NST1NTOjQsU09MSURfT1BFTjo1LERPVFRFRF9PUEVOOjYsTE9PUF9TVEFSVDoxMCxMT09QX0VORDoxMSxBTFRfU1RBUlQ6MTIsQUxUX0VMU0U6MTMsQUxUX0VORDoxNCxPUFRfU1RBUlQ6MTUsT1BUX0VORDoxNixBQ1RJVkVfU1RBUlQ6MTcsQUNUSVZFX0VORDoxOCxQQVJfU1RBUlQ6MTksUEFSX0FORDoyMCxQQVJfRU5EOjIxLFJFQ1RfU1RBUlQ6MjIsUkVDVF9FTkQ6MjMsU09MSURfUE9JTlQ6MjQsRE9UVEVEX1BPSU5UOjI1fSxPM2U9e0ZJTExFRDowLE9QRU46MX0sUDNlPXtMRUZUT0Y6MCxSSUdIVE9GOjEsT1ZFUjoyfSxCM2U9byhmdW5jdGlvbih0KXtsQT1Ucih0LG1lKCkpfSwic2V0VGl0bGUiKSxReT17YWRkUGVyc29uT3JTeXN0ZW06ZDNlLGFkZFBlcnNvbk9yU3lzdGVtQm91bmRhcnk6ZzNlLGFkZENvbnRhaW5lcjpwM2UsYWRkQ29udGFpbmVyQm91bmRhcnk6eTNlLGFkZENvbXBvbmVudDptM2UsYWRkRGVwbG95bWVudE5vZGU6djNlLHBvcEJvdW5kYXJ5UGFyc2VTdGFjazp4M2UsYWRkUmVsOmYzZSx1cGRhdGVFbFN0eWxlOmIzZSx1cGRhdGVSZWxTdHlsZTp3M2UsdXBkYXRlTGF5b3V0Q29uZmlnOlQzZSxhdXRvV3JhcDp5aCxzZXRXcmFwOk4zZSxnZXRDNFNoYXBlQXJyYXk6VUcsZ2V0QzRTaGFwZTpBM2UsZ2V0QzRTaGFwZUtleXM6XzNlLGdldEJvdW5kYXJpZXM6SEcsZ2V0Qm91bmRhcnlzOkQzZSxnZXRDdXJyZW50Qm91bmRhcnlQYXJzZTpTM2UsZ2V0UGFyZW50Qm91bmRhcnlQYXJzZTpDM2UsZ2V0UmVsczpMM2UsZ2V0VGl0bGU6UjNlLGdldEM0VHlwZTp1M2UsZ2V0QzRTaGFwZUluUm93OmszZSxnZXRDNEJvdW5kYXJ5SW5Sb3c6RTNlLHNldEFjY1RpdGxlOkxyLGdldEFjY1RpdGxlOlJyLGdldEFjY0Rlc2NyaXB0aW9uOk1yLHNldEFjY0Rlc2NyaXB0aW9uOk5yLGdldENvbmZpZzpvKCgpPT5tZSgpLmM0LCJnZXRDb25maWciKSxjbGVhcjpNM2UsTElORVRZUEU6STNlLEFSUk9XVFlQRTpPM2UsUExBQ0VNRU5UOlAzZSxzZXRUaXRsZTpCM2Usc2V0QzRUeXBlOmgzZX19KTtmdW5jdGlvbiBzZCh0LGUpe3JldHVybiB0PT1udWxsfHxlPT1udWxsP05hTjp0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn12YXIgaEE9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKHNkLCJhc2NlbmRpbmciKX0pO2Z1bmN0aW9uIGZBKHQsZSl7cmV0dXJuIHQ9PW51bGx8fGU9PW51bGw/TmFOOmU8dD8tMTplPnQ/MTplPj10PzA6TmFOfXZhciBXRz1OKCgpPT57InVzZSBzdHJpY3QiO28oZkEsImRlc2NlbmRpbmciKX0pO2Z1bmN0aW9uIG9kKHQpe2xldCBlLHIsbjt0Lmxlbmd0aCE9PTI/KGU9c2Qscj1vKChsLHUpPT5zZCh0KGwpLHUpLCJjb21wYXJlMiIpLG49bygobCx1KT0+dChsKS11LCJkZWx0YSIpKTooZT10PT09c2R8fHQ9PT1mQT90OkYzZSxyPXQsbj10KTtmdW5jdGlvbiBpKGwsdSxoPTAsZj1sLmxlbmd0aCl7aWYoaDxmKXtpZihlKHUsdSkhPT0wKXJldHVybiBmO2Rve2xldCBkPWgrZj4+PjE7cihsW2RdLHUpPDA/aD1kKzE6Zj1kfXdoaWxlKGg8Zil9cmV0dXJuIGh9byhpLCJsZWZ0Iik7ZnVuY3Rpb24gYShsLHUsaD0wLGY9bC5sZW5ndGgpe2lmKGg8Zil7aWYoZSh1LHUpIT09MClyZXR1cm4gZjtkb3tsZXQgZD1oK2Y+Pj4xO3IobFtkXSx1KTw9MD9oPWQrMTpmPWR9d2hpbGUoaDxmKX1yZXR1cm4gaH1vKGEsInJpZ2h0Iik7ZnVuY3Rpb24gcyhsLHUsaD0wLGY9bC5sZW5ndGgpe2xldCBkPWkobCx1LGgsZi0xKTtyZXR1cm4gZD5oJiZuKGxbZC0xXSx1KT4tbihsW2RdLHUpP2QtMTpkfXJldHVybiBvKHMsImNlbnRlciIpLHtsZWZ0OmksY2VudGVyOnMscmlnaHQ6YX19ZnVuY3Rpb24gRjNlKCl7cmV0dXJuIDB9dmFyIGRBPU4oKCk9PnsidXNlIHN0cmljdCI7aEEoKTtXRygpO28ob2QsImJpc2VjdG9yIik7byhGM2UsInplcm8iKX0pO2Z1bmN0aW9uIHBBKHQpe3JldHVybiB0PT09bnVsbD9OYU46K3R9dmFyIHFHPU4oKCk9PnsidXNlIHN0cmljdCI7byhwQSwibnVtYmVyIil9KTt2YXIgWUcsWEcsJDNlLHozZSxtQSxqRz1OKCgpPT57InVzZSBzdHJpY3QiO2hBKCk7ZEEoKTtxRygpO1lHPW9kKHNkKSxYRz1ZRy5yaWdodCwkM2U9WUcubGVmdCx6M2U9b2QocEEpLmNlbnRlcixtQT1YR30pO2Z1bmN0aW9uIEtHKHtfaW50ZXJuOnQsX2tleTplfSxyKXtsZXQgbj1lKHIpO3JldHVybiB0LmhhcyhuKT90LmdldChuKTpyfWZ1bmN0aW9uIEczZSh7X2ludGVybjp0LF9rZXk6ZX0scil7bGV0IG49ZShyKTtyZXR1cm4gdC5oYXMobik/dC5nZXQobik6KHQuc2V0KG4scikscil9ZnVuY3Rpb24gVjNlKHtfaW50ZXJuOnQsX2tleTplfSxyKXtsZXQgbj1lKHIpO3JldHVybiB0LmhhcyhuKSYmKHI9dC5nZXQobiksdC5kZWxldGUobikpLHJ9ZnVuY3Rpb24gVTNlKHQpe3JldHVybiB0IT09bnVsbCYmdHlwZW9mIHQ9PSJvYmplY3QiP3QudmFsdWVPZigpOnR9dmFyIGcwLFFHPU4oKCk9PnsidXNlIHN0cmljdCI7ZzA9Y2xhc3MgZXh0ZW5kcyBNYXB7c3RhdGlje28odGhpcywiSW50ZXJuTWFwIil9Y29uc3RydWN0b3IoZSxyPVUzZSl7aWYoc3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLHtfaW50ZXJuOnt2YWx1ZTpuZXcgTWFwfSxfa2V5Ont2YWx1ZTpyfX0pLGUhPW51bGwpZm9yKGxldFtuLGldb2YgZSl0aGlzLnNldChuLGkpfWdldChlKXtyZXR1cm4gc3VwZXIuZ2V0KEtHKHRoaXMsZSkpfWhhcyhlKXtyZXR1cm4gc3VwZXIuaGFzKEtHKHRoaXMsZSkpfXNldChlLHIpe3JldHVybiBzdXBlci5zZXQoRzNlKHRoaXMsZSkscil9ZGVsZXRlKGUpe3JldHVybiBzdXBlci5kZWxldGUoVjNlKHRoaXMsZSkpfX07byhLRywiaW50ZXJuX2dldCIpO28oRzNlLCJpbnRlcm5fc2V0Iik7byhWM2UsImludGVybl9kZWxldGUiKTtvKFUzZSwia2V5b2YiKX0pO2Z1bmN0aW9uIEwzKHQsZSxyKXtsZXQgbj0oZS10KS9NYXRoLm1heCgwLHIpLGk9TWF0aC5mbG9vcihNYXRoLmxvZzEwKG4pKSxhPW4vTWF0aC5wb3coMTAsaSkscz1hPj1IM2U/MTA6YT49VzNlPzU6YT49cTNlPzI6MSxsLHUsaDtyZXR1cm4gaTwwPyhoPU1hdGgucG93KDEwLC1pKS9zLGw9TWF0aC5yb3VuZCh0KmgpLHU9TWF0aC5yb3VuZChlKmgpLGwvaDx0JiYrK2wsdS9oPmUmJi0tdSxoPS1oKTooaD1NYXRoLnBvdygxMCxpKSpzLGw9TWF0aC5yb3VuZCh0L2gpLHU9TWF0aC5yb3VuZChlL2gpLGwqaDx0JiYrK2wsdSpoPmUmJi0tdSksdTxsJiYuNTw9ciYmcjwyP0wzKHQsZSxyKjIpOltsLHUsaF19ZnVuY3Rpb24gUjModCxlLHIpe2lmKGU9K2UsdD0rdCxyPStyLCEocj4wKSlyZXR1cm5bXTtpZih0PT09ZSlyZXR1cm5bdF07bGV0IG49ZTx0LFtpLGEsc109bj9MMyhlLHQscik6TDModCxlLHIpO2lmKCEoYT49aSkpcmV0dXJuW107bGV0IGw9YS1pKzEsdT1uZXcgQXJyYXkobCk7aWYobilpZihzPDApZm9yKGxldCBoPTA7aDxsOysraCl1W2hdPShhLWgpLy1zO2Vsc2UgZm9yKGxldCBoPTA7aDxsOysraCl1W2hdPShhLWgpKnM7ZWxzZSBpZihzPDApZm9yKGxldCBoPTA7aDxsOysraCl1W2hdPShpK2gpLy1zO2Vsc2UgZm9yKGxldCBoPTA7aDxsOysraCl1W2hdPShpK2gpKnM7cmV0dXJuIHV9ZnVuY3Rpb24gWnkodCxlLHIpe3JldHVybiBlPStlLHQ9K3Qscj0rcixMMyh0LGUscilbMl19ZnVuY3Rpb24geTAodCxlLHIpe2U9K2UsdD0rdCxyPStyO2xldCBuPWU8dCxpPW4/WnkoZSx0LHIpOlp5KHQsZSxyKTtyZXR1cm4obj8tMToxKSooaTwwPzEvLWk6aSl9dmFyIEgzZSxXM2UscTNlLFpHPU4oKCk9PnsidXNlIHN0cmljdCI7SDNlPU1hdGguc3FydCg1MCksVzNlPU1hdGguc3FydCgxMCkscTNlPU1hdGguc3FydCgyKTtvKEwzLCJ0aWNrU3BlYyIpO28oUjMsInRpY2tzIik7byhaeSwidGlja0luY3JlbWVudCIpO28oeTAsInRpY2tTdGVwIil9KTtmdW5jdGlvbiBOMyh0LGUpe2xldCByO2lmKGU9PT12b2lkIDApZm9yKGxldCBuIG9mIHQpbiE9bnVsbCYmKHI8bnx8cj09PXZvaWQgMCYmbj49bikmJihyPW4pO2Vsc2V7bGV0IG49LTE7Zm9yKGxldCBpIG9mIHQpKGk9ZShpLCsrbix0KSkhPW51bGwmJihyPGl8fHI9PT12b2lkIDAmJmk+PWkpJiYocj1pKX1yZXR1cm4gcn12YXIgSkc9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKE4zLCJtYXgiKX0pO2Z1bmN0aW9uIE0zKHQsZSl7bGV0IHI7aWYoZT09PXZvaWQgMClmb3IobGV0IG4gb2YgdCluIT1udWxsJiYocj5ufHxyPT09dm9pZCAwJiZuPj1uKSYmKHI9bik7ZWxzZXtsZXQgbj0tMTtmb3IobGV0IGkgb2YgdCkoaT1lKGksKytuLHQpKSE9bnVsbCYmKHI+aXx8cj09PXZvaWQgMCYmaT49aSkmJihyPWkpfXJldHVybiByfXZhciBlVj1OKCgpPT57InVzZSBzdHJpY3QiO28oTTMsIm1pbiIpfSk7ZnVuY3Rpb24gSTModCxlLHIpe3Q9K3QsZT0rZSxyPShpPWFyZ3VtZW50cy5sZW5ndGgpPDI/KGU9dCx0PTAsMSk6aTwzPzE6K3I7Zm9yKHZhciBuPS0xLGk9TWF0aC5tYXgoMCxNYXRoLmNlaWwoKGUtdCkvcikpfDAsYT1uZXcgQXJyYXkoaSk7KytuPGk7KWFbbl09dCtuKnI7cmV0dXJuIGF9dmFyIHRWPU4oKCk9PnsidXNlIHN0cmljdCI7byhJMywicmFuZ2UiKX0pO3ZhciB2aD1OKCgpPT57InVzZSBzdHJpY3QiO2pHKCk7ZEEoKTtKRygpO2VWKCk7dFYoKTtaRygpO1FHKCl9KTtmdW5jdGlvbiBnQSh0KXtyZXR1cm4gdH12YXIgclY9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKGdBLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBZM2UodCl7cmV0dXJuInRyYW5zbGF0ZSgiK3QrIiwwKSJ9ZnVuY3Rpb24gWDNlKHQpe3JldHVybiJ0cmFuc2xhdGUoMCwiK3QrIikifWZ1bmN0aW9uIGozZSh0KXtyZXR1cm4gZT0+K3QoZSl9ZnVuY3Rpb24gSzNlKHQsZSl7cmV0dXJuIGU9TWF0aC5tYXgoMCx0LmJhbmR3aWR0aCgpLWUqMikvMix0LnJvdW5kKCkmJihlPU1hdGgucm91bmQoZSkpLHI9Pit0KHIpK2V9ZnVuY3Rpb24gUTNlKCl7cmV0dXJuIXRoaXMuX19heGlzfWZ1bmN0aW9uIGlWKHQsZSl7dmFyIHI9W10sbj1udWxsLGk9bnVsbCxhPTYscz02LGw9Myx1PXR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbz4xPzA6LjUsaD10PT09UDN8fHQ9PT1PMz8tMToxLGY9dD09PU8zfHx0PT09eUE/IngiOiJ5IixkPXQ9PT1QM3x8dD09PXZBP1kzZTpYM2U7ZnVuY3Rpb24gcChtKXt2YXIgZz1uPz8oZS50aWNrcz9lLnRpY2tzLmFwcGx5KGUscik6ZS5kb21haW4oKSkseT1pPz8oZS50aWNrRm9ybWF0P2UudGlja0Zvcm1hdC5hcHBseShlLHIpOmdBKSx2PU1hdGgubWF4KGEsMCkrbCx4PWUucmFuZ2UoKSxiPSt4WzBdK3Usdz0reFt4Lmxlbmd0aC0xXSt1LEM9KGUuYmFuZHdpZHRoP0szZTpqM2UpKGUuY29weSgpLHUpLFQ9bS5zZWxlY3Rpb24/bS5zZWxlY3Rpb24oKTptLEU9VC5zZWxlY3RBbGwoIi5kb21haW4iKS5kYXRhKFtudWxsXSksQT1ULnNlbGVjdEFsbCgiLnRpY2siKS5kYXRhKGcsZSkub3JkZXIoKSxTPUEuZXhpdCgpLF89QS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidGljayIpLEk9QS5zZWxlY3QoImxpbmUiKSxEPUEuc2VsZWN0KCJ0ZXh0Iik7RT1FLm1lcmdlKEUuZW50ZXIoKS5pbnNlcnQoInBhdGgiLCIudGljayIpLmF0dHIoImNsYXNzIiwiZG9tYWluIikuYXR0cigic3Ryb2tlIiwiY3VycmVudENvbG9yIikpLEE9QS5tZXJnZShfKSxJPUkubWVyZ2UoXy5hcHBlbmQoImxpbmUiKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKS5hdHRyKGYrIjIiLGgqYSkpLEQ9RC5tZXJnZShfLmFwcGVuZCgidGV4dCIpLmF0dHIoImZpbGwiLCJjdXJyZW50Q29sb3IiKS5hdHRyKGYsaCp2KS5hdHRyKCJkeSIsdD09PVAzPyIwZW0iOnQ9PT12QT8iMC43MWVtIjoiMC4zMmVtIikpLG0hPT1UJiYoRT1FLnRyYW5zaXRpb24obSksQT1BLnRyYW5zaXRpb24obSksST1JLnRyYW5zaXRpb24obSksRD1ELnRyYW5zaXRpb24obSksUz1TLnRyYW5zaXRpb24obSkuYXR0cigib3BhY2l0eSIsblYpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oayl7cmV0dXJuIGlzRmluaXRlKGs9QyhrKSk/ZChrK3UpOnRoaXMuZ2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iKX0pLF8uYXR0cigib3BhY2l0eSIsblYpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oayl7dmFyIEw9dGhpcy5wYXJlbnROb2RlLl9fYXhpcztyZXR1cm4gZCgoTCYmaXNGaW5pdGUoTD1MKGspKT9MOkMoaykpK3UpfSkpLFMucmVtb3ZlKCksRS5hdHRyKCJkIix0PT09TzN8fHQ9PT15QT9zPyJNIitoKnMrIiwiK2IrIkgiK3UrIlYiK3crIkgiK2gqczoiTSIrdSsiLCIrYisiViIrdzpzPyJNIitiKyIsIitoKnMrIlYiK3UrIkgiK3crIlYiK2gqczoiTSIrYisiLCIrdSsiSCIrdyksQS5hdHRyKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGspe3JldHVybiBkKEMoaykrdSl9KSxJLmF0dHIoZisiMiIsaCphKSxELmF0dHIoZixoKnYpLnRleHQoeSksVC5maWx0ZXIoUTNlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImZvbnQtc2l6ZSIsMTApLmF0dHIoImZvbnQtZmFtaWx5Iiwic2Fucy1zZXJpZiIpLmF0dHIoInRleHQtYW5jaG9yIix0PT09eUE/InN0YXJ0Ijp0PT09TzM/ImVuZCI6Im1pZGRsZSIpLFQuZWFjaChmdW5jdGlvbigpe3RoaXMuX19heGlzPUN9KX1yZXR1cm4gbyhwLCJheGlzIikscC5zY2FsZT1mdW5jdGlvbihtKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1tLHApOmV9LHAudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gcj1BcnJheS5mcm9tKGFyZ3VtZW50cykscH0scC50aWNrQXJndW1lbnRzPWZ1bmN0aW9uKG0pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW09PW51bGw/W106QXJyYXkuZnJvbShtKSxwKTpyLnNsaWNlKCl9LHAudGlja1ZhbHVlcz1mdW5jdGlvbihtKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1tPT1udWxsP251bGw6QXJyYXkuZnJvbShtKSxwKTpuJiZuLnNsaWNlKCl9LHAudGlja0Zvcm1hdD1mdW5jdGlvbihtKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1tLHApOml9LHAudGlja1NpemU9ZnVuY3Rpb24obSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9cz0rbSxwKTphfSxwLnRpY2tTaXplSW5uZXI9ZnVuY3Rpb24obSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9K20scCk6YX0scC50aWNrU2l6ZU91dGVyPWZ1bmN0aW9uKG0pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSttLHApOnN9LHAudGlja1BhZGRpbmc9ZnVuY3Rpb24obSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9K20scCk6bH0scC5vZmZzZXQ9ZnVuY3Rpb24obSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9K20scCk6dX0scH1mdW5jdGlvbiB4QSh0KXtyZXR1cm4gaVYoUDMsdCl9ZnVuY3Rpb24gYkEodCl7cmV0dXJuIGlWKHZBLHQpfXZhciBQMyx5QSx2QSxPMyxuVixhVj1OKCgpPT57InVzZSBzdHJpY3QiO3JWKCk7UDM9MSx5QT0yLHZBPTMsTzM9NCxuVj0xZS02O28oWTNlLCJ0cmFuc2xhdGVYIik7byhYM2UsInRyYW5zbGF0ZVkiKTtvKGozZSwibnVtYmVyIik7byhLM2UsImNlbnRlciIpO28oUTNlLCJlbnRlcmluZyIpO28oaVYsImF4aXMiKTtvKHhBLCJheGlzVG9wIik7byhiQSwiYXhpc0JvdHRvbSIpfSk7dmFyIHNWPU4oKCk9PnsidXNlIHN0cmljdCI7YVYoKX0pO2Z1bmN0aW9uIGxWKCl7Zm9yKHZhciB0PTAsZT1hcmd1bWVudHMubGVuZ3RoLHI9e30sbjt0PGU7Kyt0KXtpZighKG49YXJndW1lbnRzW3RdKyIiKXx8biBpbiByfHwvW1xzLl0vLnRlc3QobikpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrbik7cltuXT1bXX1yZXR1cm4gbmV3IEIzKHIpfWZ1bmN0aW9uIEIzKHQpe3RoaXMuXz10fWZ1bmN0aW9uIEozZSh0LGUpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocil7dmFyIG49IiIsaT1yLmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj1yLnNsaWNlKGkrMSkscj1yLnNsaWNlKDAsaSkpLHImJiFlLmhhc093blByb3BlcnR5KHIpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3IpO3JldHVybnt0eXBlOnIsbmFtZTpufX0pfWZ1bmN0aW9uIGU1ZSh0LGUpe2Zvcih2YXIgcj0wLG49dC5sZW5ndGgsaTtyPG47KytyKWlmKChpPXRbcl0pLm5hbWU9PT1lKXJldHVybiBpLnZhbHVlfWZ1bmN0aW9uIG9WKHQsZSxyKXtmb3IodmFyIG49MCxpPXQubGVuZ3RoO248aTsrK24paWYodFtuXS5uYW1lPT09ZSl7dFtuXT1aM2UsdD10LnNsaWNlKDAsbikuY29uY2F0KHQuc2xpY2UobisxKSk7YnJlYWt9cmV0dXJuIHIhPW51bGwmJnQucHVzaCh7bmFtZTplLHZhbHVlOnJ9KSx0fXZhciBaM2Usd0EsY1Y9TigoKT0+eyJ1c2Ugc3RyaWN0IjtaM2U9e3ZhbHVlOm8oKCk9Pnt9LCJ2YWx1ZSIpfTtvKGxWLCJkaXNwYXRjaCIpO28oQjMsIkRpc3BhdGNoIik7byhKM2UsInBhcnNlVHlwZW5hbWVzIik7QjMucHJvdG90eXBlPWxWLnByb3RvdHlwZT17Y29uc3RydWN0b3I6QjMsb246byhmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuXyxuPUozZSh0KyIiLHIpLGksYT0tMSxzPW4ubGVuZ3RoO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKDsrK2E8czspaWYoKGk9KHQ9blthXSkudHlwZSkmJihpPWU1ZShyW2ldLHQubmFtZSkpKXJldHVybiBpO3JldHVybn1pZihlIT1udWxsJiZ0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrZSk7Zm9yKDsrK2E8czspaWYoaT0odD1uW2FdKS50eXBlKXJbaV09b1YocltpXSx0Lm5hbWUsZSk7ZWxzZSBpZihlPT1udWxsKWZvcihpIGluIHIpcltpXT1vVihyW2ldLHQubmFtZSxudWxsKTtyZXR1cm4gdGhpc30sIm9uIiksY29weTpvKGZ1bmN0aW9uKCl7dmFyIHQ9e30sZT10aGlzLl87Zm9yKHZhciByIGluIGUpdFtyXT1lW3JdLnNsaWNlKCk7cmV0dXJuIG5ldyBCMyh0KX0sImNvcHkiKSxjYWxsOm8oZnVuY3Rpb24odCxlKXtpZigoaT1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciByPW5ldyBBcnJheShpKSxuPTAsaSxhO248aTsrK24pcltuXT1hcmd1bWVudHNbbisyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2ZvcihhPXRoaXMuX1t0XSxuPTAsaT1hLmxlbmd0aDtuPGk7KytuKWFbbl0udmFsdWUuYXBwbHkoZSxyKX0sImNhbGwiKSxhcHBseTpvKGZ1bmN0aW9uKHQsZSxyKXtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2Zvcih2YXIgbj10aGlzLl9bdF0saT0wLGE9bi5sZW5ndGg7aTxhOysraSluW2ldLnZhbHVlLmFwcGx5KGUscil9LCJhcHBseSIpfTtvKGU1ZSwiZ2V0Iik7byhvViwic2V0Iik7d0E9bFZ9KTt2YXIgVEE9TigoKT0+eyJ1c2Ugc3RyaWN0IjtjVigpfSk7dmFyIEYzLGtBLEVBPU4oKCk9PnsidXNlIHN0cmljdCI7RjM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLGtBPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDpGMyx4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9fSk7ZnVuY3Rpb24gcmModCl7dmFyIGU9dCs9IiIscj1lLmluZGV4T2YoIjoiKTtyZXR1cm4gcj49MCYmKGU9dC5zbGljZSgwLHIpKSE9PSJ4bWxucyImJih0PXQuc2xpY2UocisxKSksa0EuaGFzT3duUHJvcGVydHkoZSk/e3NwYWNlOmtBW2VdLGxvY2FsOnR9OnR9dmFyICQzPU4oKCk9PnsidXNlIHN0cmljdCI7RUEoKTtvKHJjLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiB0NWUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vd25lckRvY3VtZW50LHI9dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIHI9PT1GMyYmZS5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09RjM/ZS5jcmVhdGVFbGVtZW50KHQpOmUuY3JlYXRlRWxlbWVudE5TKHIsdCl9fWZ1bmN0aW9uIHI1ZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBKeSh0KXt2YXIgZT1yYyh0KTtyZXR1cm4oZS5sb2NhbD9yNWU6dDVlKShlKX12YXIgU0E9TigoKT0+eyJ1c2Ugc3RyaWN0IjskMygpO0VBKCk7byh0NWUsImNyZWF0b3JJbmhlcml0Iik7byhyNWUsImNyZWF0b3JGaXhlZCIpO28oSnksImRlZmF1bHQiKX0pO2Z1bmN0aW9uIG41ZSgpe31mdW5jdGlvbiB4aCh0KXtyZXR1cm4gdD09bnVsbD9uNWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKHQpfX12YXIgejM9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKG41ZSwibm9uZSIpO28oeGgsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIENBKHQpe3R5cGVvZiB0IT0iZnVuY3Rpb24iJiYodD14aCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxyPWUubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgYT1lW2ldLHM9YS5sZW5ndGgsbD1uW2ldPW5ldyBBcnJheShzKSx1LGgsZj0wO2Y8czsrK2YpKHU9YVtmXSkmJihoPXQuY2FsbCh1LHUuX19kYXRhX18sZixhKSkmJigiX19kYXRhX18iaW4gdSYmKGguX19kYXRhX189dS5fX2RhdGFfXyksbFtmXT1oKTtyZXR1cm4gbmV3IG9pKG4sdGhpcy5fcGFyZW50cyl9dmFyIHVWPU4oKCk9PnsidXNlIHN0cmljdCI7aGwoKTt6MygpO28oQ0EsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIEFBKHQpe3JldHVybiB0PT1udWxsP1tdOkFycmF5LmlzQXJyYXkodCk/dDpBcnJheS5mcm9tKHQpfXZhciBoVj1OKCgpPT57InVzZSBzdHJpY3QiO28oQUEsImFycmF5Iil9KTtmdW5jdGlvbiBpNWUoKXtyZXR1cm5bXX1mdW5jdGlvbiB2MCh0KXtyZXR1cm4gdD09bnVsbD9pNWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKHQpfX12YXIgX0E9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKGk1ZSwiZW1wdHkiKTtvKHYwLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBhNWUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEFBKHQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19ZnVuY3Rpb24gREEodCl7dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dD1hNWUodCk6dD12MCh0KTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHI9ZS5sZW5ndGgsbj1bXSxpPVtdLGE9MDthPHI7KythKWZvcih2YXIgcz1lW2FdLGw9cy5sZW5ndGgsdSxoPTA7aDxsOysraCkodT1zW2hdKSYmKG4ucHVzaCh0LmNhbGwodSx1Ll9fZGF0YV9fLGgscykpLGkucHVzaCh1KSk7cmV0dXJuIG5ldyBvaShuLGkpfXZhciBmVj1OKCgpPT57InVzZSBzdHJpY3QiO2hsKCk7aFYoKTtfQSgpO28oYTVlLCJhcnJheUFsbCIpO28oREEsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIHgwKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXModCl9fWZ1bmN0aW9uIEczKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5tYXRjaGVzKHQpfX12YXIgZXY9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKHgwLCJkZWZhdWx0Iik7byhHMywiY2hpbGRNYXRjaGVyIil9KTtmdW5jdGlvbiBvNWUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHM1ZS5jYWxsKHRoaXMuY2hpbGRyZW4sdCl9fWZ1bmN0aW9uIGw1ZSgpe3JldHVybiB0aGlzLmZpcnN0RWxlbWVudENoaWxkfWZ1bmN0aW9uIExBKHQpe3JldHVybiB0aGlzLnNlbGVjdCh0PT1udWxsP2w1ZTpvNWUodHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpHMyh0KSkpfXZhciBzNWUsZFY9TigoKT0+eyJ1c2Ugc3RyaWN0IjtldigpO3M1ZT1BcnJheS5wcm90b3R5cGUuZmluZDtvKG81ZSwiY2hpbGRGaW5kIik7byhsNWUsImNoaWxkRmlyc3QiKTtvKExBLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiB1NWUoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuKX1mdW5jdGlvbiBoNWUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGM1ZS5jYWxsKHRoaXMuY2hpbGRyZW4sdCl9fWZ1bmN0aW9uIFJBKHQpe3JldHVybiB0aGlzLnNlbGVjdEFsbCh0PT1udWxsP3U1ZTpoNWUodHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpHMyh0KSkpfXZhciBjNWUscFY9TigoKT0+eyJ1c2Ugc3RyaWN0IjtldigpO2M1ZT1BcnJheS5wcm90b3R5cGUuZmlsdGVyO28odTVlLCJjaGlsZHJlbiIpO28oaDVlLCJjaGlsZHJlbkZpbHRlciIpO28oUkEsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIE5BKHQpe3R5cGVvZiB0IT0iZnVuY3Rpb24iJiYodD14MCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxyPWUubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgYT1lW2ldLHM9YS5sZW5ndGgsbD1uW2ldPVtdLHUsaD0wO2g8czsrK2gpKHU9YVtoXSkmJnQuY2FsbCh1LHUuX19kYXRhX18saCxhKSYmbC5wdXNoKHUpO3JldHVybiBuZXcgb2kobix0aGlzLl9wYXJlbnRzKX12YXIgbVY9TigoKT0+eyJ1c2Ugc3RyaWN0IjtobCgpO2V2KCk7byhOQSwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gdHYodCl7cmV0dXJuIG5ldyBBcnJheSh0Lmxlbmd0aCl9dmFyIE1BPU4oKCk9PnsidXNlIHN0cmljdCI7byh0diwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gSUEoKXtyZXR1cm4gbmV3IG9pKHRoaXMuX2VudGVyfHx0aGlzLl9ncm91cHMubWFwKHR2KSx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBydih0LGUpe3RoaXMub3duZXJEb2N1bWVudD10Lm93bmVyRG9jdW1lbnQsdGhpcy5uYW1lc3BhY2VVUkk9dC5uYW1lc3BhY2VVUkksdGhpcy5fbmV4dD1udWxsLHRoaXMuX3BhcmVudD10LHRoaXMuX19kYXRhX189ZX12YXIgT0E9TigoKT0+eyJ1c2Ugc3RyaWN0IjtNQSgpO2hsKCk7byhJQSwiZGVmYXVsdCIpO28ocnYsIkVudGVyTm9kZSIpO3J2LnByb3RvdHlwZT17Y29uc3RydWN0b3I6cnYsYXBwZW5kQ2hpbGQ6byhmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZSh0LHRoaXMuX25leHQpfSwiYXBwZW5kQ2hpbGQiKSxpbnNlcnRCZWZvcmU6byhmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKHQsZSl9LCJpbnNlcnRCZWZvcmUiKSxxdWVyeVNlbGVjdG9yOm8oZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKHQpfSwicXVlcnlTZWxlY3RvciIpLHF1ZXJ5U2VsZWN0b3JBbGw6byhmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwodCl9LCJxdWVyeVNlbGVjdG9yQWxsIil9fSk7ZnVuY3Rpb24gUEEodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fXZhciBnVj1OKCgpPT57InVzZSBzdHJpY3QiO28oUEEsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIGY1ZSh0LGUscixuLGksYSl7Zm9yKHZhciBzPTAsbCx1PWUubGVuZ3RoLGg9YS5sZW5ndGg7czxoOysrcykobD1lW3NdKT8obC5fX2RhdGFfXz1hW3NdLG5bc109bCk6cltzXT1uZXcgcnYodCxhW3NdKTtmb3IoO3M8dTsrK3MpKGw9ZVtzXSkmJihpW3NdPWwpfWZ1bmN0aW9uIGQ1ZSh0LGUscixuLGksYSxzKXt2YXIgbCx1LGg9bmV3IE1hcCxmPWUubGVuZ3RoLGQ9YS5sZW5ndGgscD1uZXcgQXJyYXkoZiksbTtmb3IobD0wO2w8ZjsrK2wpKHU9ZVtsXSkmJihwW2xdPW09cy5jYWxsKHUsdS5fX2RhdGFfXyxsLGUpKyIiLGguaGFzKG0pP2lbbF09dTpoLnNldChtLHUpKTtmb3IobD0wO2w8ZDsrK2wpbT1zLmNhbGwodCxhW2xdLGwsYSkrIiIsKHU9aC5nZXQobSkpPyhuW2xdPXUsdS5fX2RhdGFfXz1hW2xdLGguZGVsZXRlKG0pKTpyW2xdPW5ldyBydih0LGFbbF0pO2ZvcihsPTA7bDxmOysrbCkodT1lW2xdKSYmaC5nZXQocFtsXSk9PT11JiYoaVtsXT11KX1mdW5jdGlvbiBwNWUodCl7cmV0dXJuIHQuX19kYXRhX199ZnVuY3Rpb24gQkEodCxlKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLHA1ZSk7dmFyIHI9ZT9kNWU6ZjVlLG49dGhpcy5fcGFyZW50cyxpPXRoaXMuX2dyb3Vwczt0eXBlb2YgdCE9ImZ1bmN0aW9uIiYmKHQ9UEEodCkpO2Zvcih2YXIgYT1pLmxlbmd0aCxzPW5ldyBBcnJheShhKSxsPW5ldyBBcnJheShhKSx1PW5ldyBBcnJheShhKSxoPTA7aDxhOysraCl7dmFyIGY9bltoXSxkPWlbaF0scD1kLmxlbmd0aCxtPW01ZSh0LmNhbGwoZixmJiZmLl9fZGF0YV9fLGgsbikpLGc9bS5sZW5ndGgseT1sW2hdPW5ldyBBcnJheShnKSx2PXNbaF09bmV3IEFycmF5KGcpLHg9dVtoXT1uZXcgQXJyYXkocCk7cihmLGQseSx2LHgsbSxlKTtmb3IodmFyIGI9MCx3PTAsQyxUO2I8ZzsrK2IpaWYoQz15W2JdKXtmb3IoYj49dyYmKHc9YisxKTshKFQ9dlt3XSkmJisrdzxnOyk7Qy5fbmV4dD1UfHxudWxsfX1yZXR1cm4gcz1uZXcgb2kocyxuKSxzLl9lbnRlcj1sLHMuX2V4aXQ9dSxzfWZ1bmN0aW9uIG01ZSh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJvYmplY3QiJiYibGVuZ3RoImluIHQ/dDpBcnJheS5mcm9tKHQpfXZhciB5Vj1OKCgpPT57InVzZSBzdHJpY3QiO2hsKCk7T0EoKTtnVigpO28oZjVlLCJiaW5kSW5kZXgiKTtvKGQ1ZSwiYmluZEtleSIpO28ocDVlLCJkYXR1bSIpO28oQkEsImRlZmF1bHQiKTtvKG01ZSwiYXJyYXlsaWtlIil9KTtmdW5jdGlvbiBGQSgpe3JldHVybiBuZXcgb2kodGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcCh0diksdGhpcy5fcGFyZW50cyl9dmFyIHZWPU4oKCk9PnsidXNlIHN0cmljdCI7TUEoKTtobCgpO28oRkEsImRlZmF1bHQiKX0pO2Z1bmN0aW9uICRBKHQsZSxyKXt2YXIgbj10aGlzLmVudGVyKCksaT10aGlzLGE9dGhpcy5leGl0KCk7cmV0dXJuIHR5cGVvZiB0PT0iZnVuY3Rpb24iPyhuPXQobiksbiYmKG49bi5zZWxlY3Rpb24oKSkpOm49bi5hcHBlbmQodCsiIiksZSE9bnVsbCYmKGk9ZShpKSxpJiYoaT1pLnNlbGVjdGlvbigpKSkscj09bnVsbD9hLnJlbW92ZSgpOnIoYSksbiYmaT9uLm1lcmdlKGkpLm9yZGVyKCk6aX12YXIgeFY9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKCRBLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiB6QSh0KXtmb3IodmFyIGU9dC5zZWxlY3Rpb24/dC5zZWxlY3Rpb24oKTp0LHI9dGhpcy5fZ3JvdXBzLG49ZS5fZ3JvdXBzLGk9ci5sZW5ndGgsYT1uLmxlbmd0aCxzPU1hdGgubWluKGksYSksbD1uZXcgQXJyYXkoaSksdT0wO3U8czsrK3UpZm9yKHZhciBoPXJbdV0sZj1uW3VdLGQ9aC5sZW5ndGgscD1sW3VdPW5ldyBBcnJheShkKSxtLGc9MDtnPGQ7KytnKShtPWhbZ118fGZbZ10pJiYocFtnXT1tKTtmb3IoO3U8aTsrK3UpbFt1XT1yW3VdO3JldHVybiBuZXcgb2kobCx0aGlzLl9wYXJlbnRzKX12YXIgYlY9TigoKT0+eyJ1c2Ugc3RyaWN0IjtobCgpO28oekEsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIEdBKCl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPS0xLHI9dC5sZW5ndGg7KytlPHI7KWZvcih2YXIgbj10W2VdLGk9bi5sZW5ndGgtMSxhPW5baV0sczstLWk+PTA7KShzPW5baV0pJiYoYSYmcy5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihhKV40JiZhLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHMsYSksYT1zKTtyZXR1cm4gdGhpc312YXIgd1Y9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKEdBLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBWQSh0KXt0fHwodD1nNWUpO2Z1bmN0aW9uIGUoZCxwKXtyZXR1cm4gZCYmcD90KGQuX19kYXRhX18scC5fX2RhdGFfXyk6IWQtIXB9byhlLCJjb21wYXJlTm9kZSIpO2Zvcih2YXIgcj10aGlzLl9ncm91cHMsbj1yLmxlbmd0aCxpPW5ldyBBcnJheShuKSxhPTA7YTxuOysrYSl7Zm9yKHZhciBzPXJbYV0sbD1zLmxlbmd0aCx1PWlbYV09bmV3IEFycmF5KGwpLGgsZj0wO2Y8bDsrK2YpKGg9c1tmXSkmJih1W2ZdPWgpO3Uuc29ydChlKX1yZXR1cm4gbmV3IG9pKGksdGhpcy5fcGFyZW50cykub3JkZXIoKX1mdW5jdGlvbiBnNWUodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59dmFyIFRWPU4oKCk9PnsidXNlIHN0cmljdCI7aGwoKTtvKFZBLCJkZWZhdWx0Iik7byhnNWUsImFzY2VuZGluZyIpfSk7ZnVuY3Rpb24gVUEoKXt2YXIgdD1hcmd1bWVudHNbMF07cmV0dXJuIGFyZ3VtZW50c1swXT10aGlzLHQuYXBwbHkobnVsbCxhcmd1bWVudHMpLHRoaXN9dmFyIGtWPU4oKCk9PnsidXNlIHN0cmljdCI7byhVQSwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gSEEoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzKX12YXIgRVY9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKEhBLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBXQSgpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT0wLHI9dC5sZW5ndGg7ZTxyOysrZSlmb3IodmFyIG49dFtlXSxpPTAsYT1uLmxlbmd0aDtpPGE7KytpKXt2YXIgcz1uW2ldO2lmKHMpcmV0dXJuIHN9cmV0dXJuIG51bGx9dmFyIFNWPU4oKCk9PnsidXNlIHN0cmljdCI7byhXQSwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gcUEoKXtsZXQgdD0wO2ZvcihsZXQgZSBvZiB0aGlzKSsrdDtyZXR1cm4gdH12YXIgQ1Y9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKHFBLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBZQSgpe3JldHVybiF0aGlzLm5vZGUoKX12YXIgQVY9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKFlBLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBYQSh0KXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHI9MCxuPWUubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBpPWVbcl0sYT0wLHM9aS5sZW5ndGgsbDthPHM7KythKShsPWlbYV0pJiZ0LmNhbGwobCxsLl9fZGF0YV9fLGEsaSk7cmV0dXJuIHRoaXN9dmFyIF9WPU4oKCk9PnsidXNlIHN0cmljdCI7byhYQSwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24geTVlKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX1mdW5jdGlvbiB2NWUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiB4NWUodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZSh0LGUpfX1mdW5jdGlvbiBiNWUodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxlKX19ZnVuY3Rpb24gdzVlKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD90aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KTp0aGlzLnNldEF0dHJpYnV0ZSh0LHIpfX1mdW5jdGlvbiBUNWUodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxyKX19ZnVuY3Rpb24gakEodCxlKXt2YXIgcj1yYyh0KTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBuPXRoaXMubm9kZSgpO3JldHVybiByLmxvY2FsP24uZ2V0QXR0cmlidXRlTlMoci5zcGFjZSxyLmxvY2FsKTpuLmdldEF0dHJpYnV0ZShyKX1yZXR1cm4gdGhpcy5lYWNoKChlPT1udWxsP3IubG9jYWw/djVlOnk1ZTp0eXBlb2YgZT09ImZ1bmN0aW9uIj9yLmxvY2FsP1Q1ZTp3NWU6ci5sb2NhbD9iNWU6eDVlKShyLGUpKX12YXIgRFY9TigoKT0+eyJ1c2Ugc3RyaWN0IjskMygpO28oeTVlLCJhdHRyUmVtb3ZlIik7byh2NWUsImF0dHJSZW1vdmVOUyIpO28oeDVlLCJhdHRyQ29uc3RhbnQiKTtvKGI1ZSwiYXR0ckNvbnN0YW50TlMiKTtvKHc1ZSwiYXR0ckZ1bmN0aW9uIik7byhUNWUsImF0dHJGdW5jdGlvbk5TIik7byhqQSwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gbnYodCl7cmV0dXJuIHQub3duZXJEb2N1bWVudCYmdC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx0LmRvY3VtZW50JiZ0fHx0LmRlZmF1bHRWaWV3fXZhciBLQT1OKCgpPT57InVzZSBzdHJpY3QiO28obnYsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIGs1ZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfX1mdW5jdGlvbiBFNWUodCxlLHIpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxlLHIpfX1mdW5jdGlvbiBTNWUodCxlLHIpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO249PW51bGw/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsbixyKX19ZnVuY3Rpb24gUUEodCxlLHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChlPT1udWxsP2s1ZTp0eXBlb2YgZT09ImZ1bmN0aW9uIj9TNWU6RTVlKSh0LGUscj8/IiIpKTpiaCh0aGlzLm5vZGUoKSx0KX1mdW5jdGlvbiBiaCh0LGUpe3JldHVybiB0LnN0eWxlLmdldFByb3BlcnR5VmFsdWUoZSl8fG52KHQpLmdldENvbXB1dGVkU3R5bGUodCxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKGUpfXZhciBaQT1OKCgpPT57InVzZSBzdHJpY3QiO0tBKCk7byhrNWUsInN0eWxlUmVtb3ZlIik7byhFNWUsInN0eWxlQ29uc3RhbnQiKTtvKFM1ZSwic3R5bGVGdW5jdGlvbiIpO28oUUEsImRlZmF1bHQiKTtvKGJoLCJzdHlsZVZhbHVlIil9KTtmdW5jdGlvbiBDNWUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbdF19fWZ1bmN0aW9uIEE1ZSh0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbdF09ZX19ZnVuY3Rpb24gXzVlKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD9kZWxldGUgdGhpc1t0XTp0aGlzW3RdPXJ9fWZ1bmN0aW9uIEpBKHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKGU9PW51bGw/QzVlOnR5cGVvZiBlPT0iZnVuY3Rpb24iP181ZTpBNWUpKHQsZSkpOnRoaXMubm9kZSgpW3RdfXZhciBMVj1OKCgpPT57InVzZSBzdHJpY3QiO28oQzVlLCJwcm9wZXJ0eVJlbW92ZSIpO28oQTVlLCJwcm9wZXJ0eUNvbnN0YW50Iik7byhfNWUsInByb3BlcnR5RnVuY3Rpb24iKTtvKEpBLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBSVih0KXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLyl9ZnVuY3Rpb24gZTgodCl7cmV0dXJuIHQuY2xhc3NMaXN0fHxuZXcgTlYodCl9ZnVuY3Rpb24gTlYodCl7dGhpcy5fbm9kZT10LHRoaXMuX25hbWVzPVJWKHQuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gTVYodCxlKXtmb3IodmFyIHI9ZTgodCksbj0tMSxpPWUubGVuZ3RoOysrbjxpOylyLmFkZChlW25dKX1mdW5jdGlvbiBJVih0LGUpe2Zvcih2YXIgcj1lOCh0KSxuPS0xLGk9ZS5sZW5ndGg7KytuPGk7KXIucmVtb3ZlKGVbbl0pfWZ1bmN0aW9uIEQ1ZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtNVih0aGlzLHQpfX1mdW5jdGlvbiBMNWUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7SVYodGhpcyx0KX19ZnVuY3Rpb24gUjVlKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7KGUuYXBwbHkodGhpcyxhcmd1bWVudHMpP01WOklWKSh0aGlzLHQpfX1mdW5jdGlvbiB0OCh0LGUpe3ZhciByPVJWKHQrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPWU4KHRoaXMubm9kZSgpKSxpPS0xLGE9ci5sZW5ndGg7KytpPGE7KWlmKCFuLmNvbnRhaW5zKHJbaV0pKXJldHVybiExO3JldHVybiEwfXJldHVybiB0aGlzLmVhY2goKHR5cGVvZiBlPT0iZnVuY3Rpb24iP1I1ZTplP0Q1ZTpMNWUpKHIsZSkpfXZhciBPVj1OKCgpPT57InVzZSBzdHJpY3QiO28oUlYsImNsYXNzQXJyYXkiKTtvKGU4LCJjbGFzc0xpc3QiKTtvKE5WLCJDbGFzc0xpc3QiKTtOVi5wcm90b3R5cGU9e2FkZDpvKGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX25hbWVzLmluZGV4T2YodCk7ZTwwJiYodGhpcy5fbmFtZXMucHVzaCh0KSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSwiYWRkIikscmVtb3ZlOm8oZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbmFtZXMuaW5kZXhPZih0KTtlPj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKGUsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sInJlbW92ZSIpLGNvbnRhaW5zOm8oZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YodCk+PTB9LCJjb250YWlucyIpfTtvKE1WLCJjbGFzc2VkQWRkIik7byhJViwiY2xhc3NlZFJlbW92ZSIpO28oRDVlLCJjbGFzc2VkVHJ1ZSIpO28oTDVlLCJjbGFzc2VkRmFsc2UiKTtvKFI1ZSwiY2xhc3NlZEZ1bmN0aW9uIik7byh0OCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gTjVlKCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiBNNWUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX1mdW5jdGlvbiBJNWUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD1lPz8iIn19ZnVuY3Rpb24gcjgodCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKHQ9PW51bGw/TjVlOih0eXBlb2YgdD09ImZ1bmN0aW9uIj9JNWU6TTVlKSh0KSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9dmFyIFBWPU4oKCk9PnsidXNlIHN0cmljdCI7byhONWUsInRleHRSZW1vdmUiKTtvKE01ZSwidGV4dENvbnN0YW50Iik7byhJNWUsInRleHRGdW5jdGlvbiIpO28ocjgsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIE81ZSgpe3RoaXMuaW5uZXJIVE1MPSIifWZ1bmN0aW9uIFA1ZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD10fX1mdW5jdGlvbiBCNWUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9ZT8/IiJ9fWZ1bmN0aW9uIG44KHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCh0PT1udWxsP081ZToodHlwZW9mIHQ9PSJmdW5jdGlvbiI/QjVlOlA1ZSkodCkpOnRoaXMubm9kZSgpLmlubmVySFRNTH12YXIgQlY9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKE81ZSwiaHRtbFJlbW92ZSIpO28oUDVlLCJodG1sQ29uc3RhbnQiKTtvKEI1ZSwiaHRtbEZ1bmN0aW9uIik7byhuOCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gRjVlKCl7dGhpcy5uZXh0U2libGluZyYmdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpfWZ1bmN0aW9uIGk4KCl7cmV0dXJuIHRoaXMuZWFjaChGNWUpfXZhciBGVj1OKCgpPT57InVzZSBzdHJpY3QiO28oRjVlLCJyYWlzZSIpO28oaTgsImRlZmF1bHQiKX0pO2Z1bmN0aW9uICQ1ZSgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIGE4KCl7cmV0dXJuIHRoaXMuZWFjaCgkNWUpfXZhciAkVj1OKCgpPT57InVzZSBzdHJpY3QiO28oJDVlLCJsb3dlciIpO28oYTgsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIHM4KHQpe3ZhciBlPXR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6SnkodCk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQoZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9dmFyIHpWPU4oKCk9PnsidXNlIHN0cmljdCI7U0EoKTtvKHM4LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiB6NWUoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBvOCh0LGUpe3ZhciByPXR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6SnkodCksbj1lPT1udWxsP3o1ZTp0eXBlb2YgZT09ImZ1bmN0aW9uIj9lOnhoKGUpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxuLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KX12YXIgR1Y9TigoKT0+eyJ1c2Ugc3RyaWN0IjtTQSgpO3ozKCk7byh6NWUsImNvbnN0YW50TnVsbCIpO28obzgsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIEc1ZSgpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTt0JiZ0LnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIGw4KCl7cmV0dXJuIHRoaXMuZWFjaChHNWUpfXZhciBWVj1OKCgpPT57InVzZSBzdHJpY3QiO28oRzVlLCJyZW1vdmUiKTtvKGw4LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBWNWUoKXt2YXIgdD10aGlzLmNsb25lTm9kZSghMSksZT10aGlzLnBhcmVudE5vZGU7cmV0dXJuIGU/ZS5pbnNlcnRCZWZvcmUodCx0aGlzLm5leHRTaWJsaW5nKTp0fWZ1bmN0aW9uIFU1ZSgpe3ZhciB0PXRoaXMuY2xvbmVOb2RlKCEwKSxlPXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gZT9lLmluc2VydEJlZm9yZSh0LHRoaXMubmV4dFNpYmxpbmcpOnR9ZnVuY3Rpb24gYzgodCl7cmV0dXJuIHRoaXMuc2VsZWN0KHQ/VTVlOlY1ZSl9dmFyIFVWPU4oKCk9PnsidXNlIHN0cmljdCI7byhWNWUsInNlbGVjdGlvbl9jbG9uZVNoYWxsb3ciKTtvKFU1ZSwic2VsZWN0aW9uX2Nsb25lRGVlcCIpO28oYzgsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIHU4KHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIix0KTp0aGlzLm5vZGUoKS5fX2RhdGFfX312YXIgSFY9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKHU4LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBINWUodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3QuY2FsbCh0aGlzLGUsdGhpcy5fX2RhdGFfXyl9fWZ1bmN0aW9uIFc1ZSh0KXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKGUpe3ZhciByPSIiLG49ZS5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJihyPWUuc2xpY2UobisxKSxlPWUuc2xpY2UoMCxuKSkse3R5cGU6ZSxuYW1lOnJ9fSl9ZnVuY3Rpb24gcTVlKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMuX19vbjtpZihlKXtmb3IodmFyIHI9MCxuPS0xLGk9ZS5sZW5ndGgsYTtyPGk7KytyKWE9ZVtyXSwoIXQudHlwZXx8YS50eXBlPT09dC50eXBlKSYmYS5uYW1lPT09dC5uYW1lP3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLnR5cGUsYS5saXN0ZW5lcixhLm9wdGlvbnMpOmVbKytuXT1hOysrbj9lLmxlbmd0aD1uOmRlbGV0ZSB0aGlzLl9fb259fX1mdW5jdGlvbiBZNWUodCxlLHIpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXRoaXMuX19vbixpLGE9SDVlKGUpO2lmKG4pe2Zvcih2YXIgcz0wLGw9bi5sZW5ndGg7czxsOysrcylpZigoaT1uW3NdKS50eXBlPT09dC50eXBlJiZpLm5hbWU9PT10Lm5hbWUpe3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihpLnR5cGUsaS5saXN0ZW5lcixpLm9wdGlvbnMpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihpLnR5cGUsaS5saXN0ZW5lcj1hLGkub3B0aW9ucz1yKSxpLnZhbHVlPWU7cmV0dXJufX10aGlzLmFkZEV2ZW50TGlzdGVuZXIodC50eXBlLGEsciksaT17dHlwZTp0LnR5cGUsbmFtZTp0Lm5hbWUsdmFsdWU6ZSxsaXN0ZW5lcjphLG9wdGlvbnM6cn0sbj9uLnB1c2goaSk6dGhpcy5fX29uPVtpXX19ZnVuY3Rpb24gaDgodCxlLHIpe3ZhciBuPVc1ZSh0KyIiKSxpLGE9bi5sZW5ndGgscztpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBsPXRoaXMubm9kZSgpLl9fb247aWYobCl7Zm9yKHZhciB1PTAsaD1sLmxlbmd0aCxmO3U8aDsrK3UpZm9yKGk9MCxmPWxbdV07aTxhOysraSlpZigocz1uW2ldKS50eXBlPT09Zi50eXBlJiZzLm5hbWU9PT1mLm5hbWUpcmV0dXJuIGYudmFsdWV9cmV0dXJufWZvcihsPWU/WTVlOnE1ZSxpPTA7aTxhOysraSl0aGlzLmVhY2gobChuW2ldLGUscikpO3JldHVybiB0aGlzfXZhciBXVj1OKCgpPT57InVzZSBzdHJpY3QiO28oSDVlLCJjb250ZXh0TGlzdGVuZXIiKTtvKFc1ZSwicGFyc2VUeXBlbmFtZXMiKTtvKHE1ZSwib25SZW1vdmUiKTtvKFk1ZSwib25BZGQiKTtvKGg4LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBxVih0LGUscil7dmFyIG49bnYodCksaT1uLkN1c3RvbUV2ZW50O3R5cGVvZiBpPT0iZnVuY3Rpb24iP2k9bmV3IGkoZSxyKTooaT1uLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLHI/KGkuaW5pdEV2ZW50KGUsci5idWJibGVzLHIuY2FuY2VsYWJsZSksaS5kZXRhaWw9ci5kZXRhaWwpOmkuaW5pdEV2ZW50KGUsITEsITEpKSx0LmRpc3BhdGNoRXZlbnQoaSl9ZnVuY3Rpb24gWDVlKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHFWKHRoaXMsdCxlKX19ZnVuY3Rpb24gajVlKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHFWKHRoaXMsdCxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fWZ1bmN0aW9uIGY4KHQsZSl7cmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/ajVlOlg1ZSkodCxlKSl9dmFyIFlWPU4oKCk9PnsidXNlIHN0cmljdCI7S0EoKTtvKHFWLCJkaXNwYXRjaEV2ZW50Iik7byhYNWUsImRpc3BhdGNoQ29uc3RhbnQiKTtvKGo1ZSwiZGlzcGF0Y2hGdW5jdGlvbiIpO28oZjgsImRlZmF1bHQiKX0pO2Z1bmN0aW9uKmQ4KCl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPTAscj10Lmxlbmd0aDtlPHI7KytlKWZvcih2YXIgbj10W2VdLGk9MCxhPW4ubGVuZ3RoLHM7aTxhOysraSkocz1uW2ldKSYmKHlpZWxkIHMpfXZhciBYVj1OKCgpPT57InVzZSBzdHJpY3QiO28oZDgsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIG9pKHQsZSl7dGhpcy5fZ3JvdXBzPXQsdGhpcy5fcGFyZW50cz1lfWZ1bmN0aW9uIGpWKCl7cmV0dXJuIG5ldyBvaShbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLHA4KX1mdW5jdGlvbiBLNWUoKXtyZXR1cm4gdGhpc312YXIgcDgsaHUsaGw9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt1VigpO2ZWKCk7ZFYoKTtwVigpO21WKCk7eVYoKTtPQSgpO3ZWKCk7eFYoKTtiVigpO3dWKCk7VFYoKTtrVigpO0VWKCk7U1YoKTtDVigpO0FWKCk7X1YoKTtEVigpO1pBKCk7TFYoKTtPVigpO1BWKCk7QlYoKTtGVigpOyRWKCk7elYoKTtHVigpO1ZWKCk7VVYoKTtIVigpO1dWKCk7WVYoKTtYVigpO3A4PVtudWxsXTtvKG9pLCJTZWxlY3Rpb24iKTtvKGpWLCJzZWxlY3Rpb24iKTtvKEs1ZSwic2VsZWN0aW9uX3NlbGVjdGlvbiIpO29pLnByb3RvdHlwZT1qVi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOm9pLHNlbGVjdDpDQSxzZWxlY3RBbGw6REEsc2VsZWN0Q2hpbGQ6TEEsc2VsZWN0Q2hpbGRyZW46UkEsZmlsdGVyOk5BLGRhdGE6QkEsZW50ZXI6SUEsZXhpdDpGQSxqb2luOiRBLG1lcmdlOnpBLHNlbGVjdGlvbjpLNWUsb3JkZXI6R0Esc29ydDpWQSxjYWxsOlVBLG5vZGVzOkhBLG5vZGU6V0Esc2l6ZTpxQSxlbXB0eTpZQSxlYWNoOlhBLGF0dHI6akEsc3R5bGU6UUEscHJvcGVydHk6SkEsY2xhc3NlZDp0OCx0ZXh0OnI4LGh0bWw6bjgscmFpc2U6aTgsbG93ZXI6YTgsYXBwZW5kOnM4LGluc2VydDpvOCxyZW1vdmU6bDgsY2xvbmU6YzgsZGF0dW06dTgsb246aDgsZGlzcGF0Y2g6ZjgsW1N5bWJvbC5pdGVyYXRvcl06ZDh9O2h1PWpWfSk7ZnVuY3Rpb24gR2UodCl7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIj9uZXcgb2koW1tkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHQpXV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBvaShbW3RdXSxwOCl9dmFyIEtWPU4oKCk9PnsidXNlIHN0cmljdCI7aGwoKTtvKEdlLCJkZWZhdWx0Iil9KTt2YXIgZmw9TigoKT0+eyJ1c2Ugc3RyaWN0IjtldigpOyQzKCk7S1YoKTtobCgpO3ozKCk7X0EoKTtaQSgpfSk7dmFyIFFWPU4oKCk9PnsidXNlIHN0cmljdCJ9KTtmdW5jdGlvbiB3aCh0LGUscil7dC5wcm90b3R5cGU9ZS5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPXR9ZnVuY3Rpb24gYjAodCxlKXt2YXIgcj1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlKTtmb3IodmFyIG4gaW4gZSlyW25dPWVbbl07cmV0dXJuIHJ9dmFyIG04PU4oKCk9PnsidXNlIHN0cmljdCI7byh3aCwiZGVmYXVsdCIpO28oYjAsImV4dGVuZCIpfSk7ZnVuY3Rpb24gVGgoKXt9ZnVuY3Rpb24gSlYoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBpd2UoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXg4KCl9ZnVuY3Rpb24gYXdlKCl7cmV0dXJuIHNVKHRoaXMpLmZvcm1hdEhzbCgpfWZ1bmN0aW9uIGVVKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gcGwodCl7dmFyIGUscjtyZXR1cm4gdD0odCsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKGU9UTVlLmV4ZWModCkpPyhyPWVbMV0ubGVuZ3RoLGU9cGFyc2VJbnQoZVsxXSwxNikscj09PTY/dFUoZSk6cj09PTM/bmV3IHVhKGU+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXxlJjI0MCwoZSYxNSk8PDR8ZSYxNSwxKTpyPT09OD9WMyhlPj4yNCYyNTUsZT4+MTYmMjU1LGU+PjgmMjU1LChlJjI1NSkvMjU1KTpyPT09ND9WMyhlPj4xMiYxNXxlPj44JjI0MCxlPj44JjE1fGU+PjQmMjQwLGU+PjQmMTV8ZSYyNDAsKChlJjE1KTw8NHxlJjE1KS8yNTUpOm51bGwpOihlPVo1ZS5leGVjKHQpKT9uZXcgdWEoZVsxXSxlWzJdLGVbM10sMSk6KGU9SjVlLmV4ZWModCkpP25ldyB1YShlWzFdKjI1NS8xMDAsZVsyXSoyNTUvMTAwLGVbM10qMjU1LzEwMCwxKTooZT1ld2UuZXhlYyh0KSk/VjMoZVsxXSxlWzJdLGVbM10sZVs0XSk6KGU9dHdlLmV4ZWModCkpP1YzKGVbMV0qMjU1LzEwMCxlWzJdKjI1NS8xMDAsZVszXSoyNTUvMTAwLGVbNF0pOihlPXJ3ZS5leGVjKHQpKT9pVShlWzFdLGVbMl0vMTAwLGVbM10vMTAwLDEpOihlPW53ZS5leGVjKHQpKT9pVShlWzFdLGVbMl0vMTAwLGVbM10vMTAwLGVbNF0pOlpWLmhhc093blByb3BlcnR5KHQpP3RVKFpWW3RdKTp0PT09InRyYW5zcGFyZW50Ij9uZXcgdWEoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiB0VSh0KXtyZXR1cm4gbmV3IHVhKHQ+PjE2JjI1NSx0Pj44JjI1NSx0JjI1NSwxKX1mdW5jdGlvbiBWMyh0LGUscixuKXtyZXR1cm4gbjw9MCYmKHQ9ZT1yPU5hTiksbmV3IHVhKHQsZSxyLG4pfWZ1bmN0aW9uIHk4KHQpe3JldHVybiB0IGluc3RhbmNlb2YgVGh8fCh0PXBsKHQpKSx0Pyh0PXQucmdiKCksbmV3IHVhKHQucix0LmcsdC5iLHQub3BhY2l0eSkpOm5ldyB1YX1mdW5jdGlvbiBUMCh0LGUscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/eTgodCk6bmV3IHVhKHQsZSxyLG4/PzEpfWZ1bmN0aW9uIHVhKHQsZSxyLG4pe3RoaXMucj0rdCx0aGlzLmc9K2UsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiByVSgpe3JldHVybmAjJHtsZCh0aGlzLnIpfSR7bGQodGhpcy5nKX0ke2xkKHRoaXMuYil9YH1mdW5jdGlvbiBzd2UoKXtyZXR1cm5gIyR7bGQodGhpcy5yKX0ke2xkKHRoaXMuZyl9JHtsZCh0aGlzLmIpfSR7bGQoKGlzTmFOKHRoaXMub3BhY2l0eSk/MTp0aGlzLm9wYWNpdHkpKjI1NSl9YH1mdW5jdGlvbiBuVSgpe2xldCB0PVczKHRoaXMub3BhY2l0eSk7cmV0dXJuYCR7dD09PTE/InJnYigiOiJyZ2JhKCJ9JHtjZCh0aGlzLnIpfSwgJHtjZCh0aGlzLmcpfSwgJHtjZCh0aGlzLmIpfSR7dD09PTE/IikiOmAsICR7dH0pYH1gfWZ1bmN0aW9uIFczKHQpe3JldHVybiBpc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSl9ZnVuY3Rpb24gY2QodCl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodCl8fDApKX1mdW5jdGlvbiBsZCh0KXtyZXR1cm4gdD1jZCh0KSwodDwxNj8iMCI6IiIpK3QudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIGlVKHQsZSxyLG4pe3JldHVybiBuPD0wP3Q9ZT1yPU5hTjpyPD0wfHxyPj0xP3Q9ZT1OYU46ZTw9MCYmKHQ9TmFOKSxuZXcgZGwodCxlLHIsbil9ZnVuY3Rpb24gc1UodCl7aWYodCBpbnN0YW5jZW9mIGRsKXJldHVybiBuZXcgZGwodC5oLHQucyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgVGh8fCh0PXBsKHQpKSwhdClyZXR1cm4gbmV3IGRsO2lmKHQgaW5zdGFuY2VvZiBkbClyZXR1cm4gdDt0PXQucmdiKCk7dmFyIGU9dC5yLzI1NSxyPXQuZy8yNTUsbj10LmIvMjU1LGk9TWF0aC5taW4oZSxyLG4pLGE9TWF0aC5tYXgoZSxyLG4pLHM9TmFOLGw9YS1pLHU9KGEraSkvMjtyZXR1cm4gbD8oZT09PWE/cz0oci1uKS9sKyhyPG4pKjY6cj09PWE/cz0obi1lKS9sKzI6cz0oZS1yKS9sKzQsbC89dTwuNT9hK2k6Mi1hLWkscyo9NjApOmw9dT4wJiZ1PDE/MDpzLG5ldyBkbChzLGwsdSx0Lm9wYWNpdHkpfWZ1bmN0aW9uIG9VKHQsZSxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9zVSh0KTpuZXcgZGwodCxlLHIsbj8/MSl9ZnVuY3Rpb24gZGwodCxlLHIsbil7dGhpcy5oPSt0LHRoaXMucz0rZSx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIGFVKHQpe3JldHVybiB0PSh0fHwwKSUzNjAsdDwwP3QrMzYwOnR9ZnVuY3Rpb24gVTModCl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oMSx0fHwwKSl9ZnVuY3Rpb24gZzgodCxlLHIpe3JldHVybih0PDYwP2UrKHItZSkqdC82MDp0PDE4MD9yOnQ8MjQwP2UrKHItZSkqKDI0MC10KS82MDplKSoyNTV9dmFyIGl2LEgzLHcwLGF2LG5jLFE1ZSxaNWUsSjVlLGV3ZSx0d2UscndlLG53ZSxaVix2OD1OKCgpPT57InVzZSBzdHJpY3QiO204KCk7byhUaCwiQ29sb3IiKTtpdj0uNyxIMz0xL2l2LHcwPSJcXHMqKFsrLV0/XFxkKylcXHMqIixhdj0iXFxzKihbKy1dPyg/OlxcZCpcXC4pP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsbmM9IlxccyooWystXT8oPzpcXGQqXFwuKT9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixRNWU9L14jKFswLTlhLWZdezMsOH0pJC8sWjVlPW5ldyBSZWdFeHAoYF5yZ2JcXCgke3cwfSwke3cwfSwke3cwfVxcKSRgKSxKNWU9bmV3IFJlZ0V4cChgXnJnYlxcKCR7bmN9LCR7bmN9LCR7bmN9XFwpJGApLGV3ZT1uZXcgUmVnRXhwKGBecmdiYVxcKCR7dzB9LCR7dzB9LCR7dzB9LCR7YXZ9XFwpJGApLHR3ZT1uZXcgUmVnRXhwKGBecmdiYVxcKCR7bmN9LCR7bmN9LCR7bmN9LCR7YXZ9XFwpJGApLHJ3ZT1uZXcgUmVnRXhwKGBeaHNsXFwoJHthdn0sJHtuY30sJHtuY31cXCkkYCksbndlPW5ldyBSZWdFeHAoYF5oc2xhXFwoJHthdn0sJHtuY30sJHtuY30sJHthdn1cXCkkYCksWlY9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07d2goVGgscGwse2NvcHkodCl7cmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IHRoaXMuY29uc3RydWN0b3IsdGhpcyx0KX0sZGlzcGxheWFibGUoKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSxoZXg6SlYsZm9ybWF0SGV4OkpWLGZvcm1hdEhleDg6aXdlLGZvcm1hdEhzbDphd2UsZm9ybWF0UmdiOmVVLHRvU3RyaW5nOmVVfSk7byhKViwiY29sb3JfZm9ybWF0SGV4Iik7byhpd2UsImNvbG9yX2Zvcm1hdEhleDgiKTtvKGF3ZSwiY29sb3JfZm9ybWF0SHNsIik7byhlVSwiY29sb3JfZm9ybWF0UmdiIik7byhwbCwiY29sb3IiKTtvKHRVLCJyZ2JuIik7byhWMywicmdiYSIpO28oeTgsInJnYkNvbnZlcnQiKTtvKFQwLCJyZ2IiKTtvKHVhLCJSZ2IiKTt3aCh1YSxUMCxiMChUaCx7YnJpZ2h0ZXIodCl7cmV0dXJuIHQ9dD09bnVsbD9IMzpNYXRoLnBvdyhIMyx0KSxuZXcgdWEodGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyKHQpe3JldHVybiB0PXQ9PW51bGw/aXY6TWF0aC5wb3coaXYsdCksbmV3IHVhKHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LHJnYigpe3JldHVybiB0aGlzfSxjbGFtcCgpe3JldHVybiBuZXcgdWEoY2QodGhpcy5yKSxjZCh0aGlzLmcpLGNkKHRoaXMuYiksVzModGhpcy5vcGFjaXR5KSl9LGRpc3BsYXlhYmxlKCl7cmV0dXJuLS41PD10aGlzLnImJnRoaXMucjwyNTUuNSYmLS41PD10aGlzLmcmJnRoaXMuZzwyNTUuNSYmLS41PD10aGlzLmImJnRoaXMuYjwyNTUuNSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGhleDpyVSxmb3JtYXRIZXg6clUsZm9ybWF0SGV4ODpzd2UsZm9ybWF0UmdiOm5VLHRvU3RyaW5nOm5VfSkpO28oclUsInJnYl9mb3JtYXRIZXgiKTtvKHN3ZSwicmdiX2Zvcm1hdEhleDgiKTtvKG5VLCJyZ2JfZm9ybWF0UmdiIik7byhXMywiY2xhbXBhIik7byhjZCwiY2xhbXBpIik7byhsZCwiaGV4Iik7byhpVSwiaHNsYSIpO28oc1UsImhzbENvbnZlcnQiKTtvKG9VLCJoc2wiKTtvKGRsLCJIc2wiKTt3aChkbCxvVSxiMChUaCx7YnJpZ2h0ZXIodCl7cmV0dXJuIHQ9dD09bnVsbD9IMzpNYXRoLnBvdyhIMyx0KSxuZXcgZGwodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXIodCl7cmV0dXJuIHQ9dD09bnVsbD9pdjpNYXRoLnBvdyhpdix0KSxuZXcgZGwodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxyZ2IoKXt2YXIgdD10aGlzLmglMzYwKyh0aGlzLmg8MCkqMzYwLGU9aXNOYU4odCl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMscj10aGlzLmwsbj1yKyhyPC41P3I6MS1yKSplLGk9MipyLW47cmV0dXJuIG5ldyB1YShnOCh0Pj0yNDA/dC0yNDA6dCsxMjAsaSxuKSxnOCh0LGksbiksZzgodDwxMjA/dCsyNDA6dC0xMjAsaSxuKSx0aGlzLm9wYWNpdHkpfSxjbGFtcCgpe3JldHVybiBuZXcgZGwoYVUodGhpcy5oKSxVMyh0aGlzLnMpLFUzKHRoaXMubCksVzModGhpcy5vcGFjaXR5KSl9LGRpc3BsYXlhYmxlKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2woKXtsZXQgdD1XMyh0aGlzLm9wYWNpdHkpO3JldHVybmAke3Q9PT0xPyJoc2woIjoiaHNsYSgifSR7YVUodGhpcy5oKX0sICR7VTModGhpcy5zKSoxMDB9JSwgJHtVMyh0aGlzLmwpKjEwMH0lJHt0PT09MT8iKSI6YCwgJHt0fSlgfWB9fSkpO28oYVUsImNsYW1waCIpO28oVTMsImNsYW1wdCIpO28oZzgsImhzbDJyZ2IiKX0pO3ZhciBsVSxjVSx1VT1OKCgpPT57InVzZSBzdHJpY3QiO2xVPU1hdGguUEkvMTgwLGNVPTE4MC9NYXRoLlBJfSk7ZnVuY3Rpb24gZ1UodCl7aWYodCBpbnN0YW5jZW9mIGljKXJldHVybiBuZXcgaWModC5sLHQuYSx0LmIsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgZnUpcmV0dXJuIHlVKHQpO3QgaW5zdGFuY2VvZiB1YXx8KHQ9eTgodCkpO3ZhciBlPVQ4KHQucikscj1UOCh0LmcpLG49VDgodC5iKSxpPXg4KCguMjIyNTA0NSplKy43MTY4Nzg2KnIrLjA2MDYxNjkqbikvZlUpLGEscztyZXR1cm4gZT09PXImJnI9PT1uP2E9cz1pOihhPXg4KCguNDM2MDc0NyplKy4zODUwNjQ5KnIrLjE0MzA4MDQqbikvaFUpLHM9eDgoKC4wMTM5MzIyKmUrLjA5NzEwNDUqcisuNzE0MTczMypuKS9kVSkpLG5ldyBpYygxMTYqaS0xNiw1MDAqKGEtaSksMjAwKihpLXMpLHQub3BhY2l0eSl9ZnVuY3Rpb24gazgodCxlLHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP2dVKHQpOm5ldyBpYyh0LGUscixuPz8xKX1mdW5jdGlvbiBpYyh0LGUscixuKXt0aGlzLmw9K3QsdGhpcy5hPStlLHRoaXMuYj0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24geDgodCl7cmV0dXJuIHQ+b3dlP01hdGgucG93KHQsMS8zKTp0L21VK3BVfWZ1bmN0aW9uIGI4KHQpe3JldHVybiB0PmswP3QqdCp0Om1VKih0LXBVKX1mdW5jdGlvbiB3OCh0KXtyZXR1cm4gMjU1Kih0PD0uMDAzMTMwOD8xMi45Mip0OjEuMDU1Kk1hdGgucG93KHQsMS8yLjQpLS4wNTUpfWZ1bmN0aW9uIFQ4KHQpe3JldHVybih0Lz0yNTUpPD0uMDQwNDU/dC8xMi45MjpNYXRoLnBvdygodCsuMDU1KS8xLjA1NSwyLjQpfWZ1bmN0aW9uIGx3ZSh0KXtpZih0IGluc3RhbmNlb2YgZnUpcmV0dXJuIG5ldyBmdSh0LmgsdC5jLHQubCx0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBpY3x8KHQ9Z1UodCkpLHQuYT09PTAmJnQuYj09PTApcmV0dXJuIG5ldyBmdShOYU4sMDx0LmwmJnQubDwxMDA/MDpOYU4sdC5sLHQub3BhY2l0eSk7dmFyIGU9TWF0aC5hdGFuMih0LmIsdC5hKSpjVTtyZXR1cm4gbmV3IGZ1KGU8MD9lKzM2MDplLE1hdGguc3FydCh0LmEqdC5hK3QuYip0LmIpLHQubCx0Lm9wYWNpdHkpfWZ1bmN0aW9uIHN2KHQsZSxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9sd2UodCk6bmV3IGZ1KHQsZSxyLG4/PzEpfWZ1bmN0aW9uIGZ1KHQsZSxyLG4pe3RoaXMuaD0rdCx0aGlzLmM9K2UsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiB5VSh0KXtpZihpc05hTih0LmgpKXJldHVybiBuZXcgaWModC5sLDAsMCx0Lm9wYWNpdHkpO3ZhciBlPXQuaCpsVTtyZXR1cm4gbmV3IGljKHQubCxNYXRoLmNvcyhlKSp0LmMsTWF0aC5zaW4oZSkqdC5jLHQub3BhY2l0eSl9dmFyIHEzLGhVLGZVLGRVLHBVLGswLG1VLG93ZSx2VT1OKCgpPT57InVzZSBzdHJpY3QiO204KCk7djgoKTt1VSgpO3EzPTE4LGhVPS45NjQyMixmVT0xLGRVPS44MjUyMSxwVT00LzI5LGswPTYvMjksbVU9MyprMCprMCxvd2U9azAqazAqazA7byhnVSwibGFiQ29udmVydCIpO28oazgsImxhYiIpO28oaWMsIkxhYiIpO3doKGljLGs4LGIwKFRoLHticmlnaHRlcih0KXtyZXR1cm4gbmV3IGljKHRoaXMubCtxMyoodD8/MSksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxkYXJrZXIodCl7cmV0dXJuIG5ldyBpYyh0aGlzLmwtcTMqKHQ/PzEpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0scmdiKCl7dmFyIHQ9KHRoaXMubCsxNikvMTE2LGU9aXNOYU4odGhpcy5hKT90OnQrdGhpcy5hLzUwMCxyPWlzTmFOKHRoaXMuYik/dDp0LXRoaXMuYi8yMDA7cmV0dXJuIGU9aFUqYjgoZSksdD1mVSpiOCh0KSxyPWRVKmI4KHIpLG5ldyB1YSh3OCgzLjEzMzg1NjEqZS0xLjYxNjg2NjcqdC0uNDkwNjE0NipyKSx3OCgtLjk3ODc2ODQqZSsxLjkxNjE0MTUqdCsuMDMzNDU0KnIpLHc4KC4wNzE5NDUzKmUtLjIyODk5MTQqdCsxLjQwNTI0MjcqciksdGhpcy5vcGFjaXR5KX19KSk7byh4OCwieHl6MmxhYiIpO28oYjgsImxhYjJ4eXoiKTtvKHc4LCJscmdiMnJnYiIpO28oVDgsInJnYjJscmdiIik7byhsd2UsImhjbENvbnZlcnQiKTtvKHN2LCJoY2wiKTtvKGZ1LCJIY2wiKTtvKHlVLCJoY2wybGFiIik7d2goZnUsc3YsYjAoVGgse2JyaWdodGVyKHQpe3JldHVybiBuZXcgZnUodGhpcy5oLHRoaXMuYyx0aGlzLmwrcTMqKHQ/PzEpLHRoaXMub3BhY2l0eSl9LGRhcmtlcih0KXtyZXR1cm4gbmV3IGZ1KHRoaXMuaCx0aGlzLmMsdGhpcy5sLXEzKih0Pz8xKSx0aGlzLm9wYWNpdHkpfSxyZ2IoKXtyZXR1cm4geVUodGhpcykucmdiKCl9fSkpfSk7dmFyIEUwPU4oKCk9PnsidXNlIHN0cmljdCI7djgoKTt2VSgpfSk7ZnVuY3Rpb24gRTgodCxlLHIsbixpKXt2YXIgYT10KnQscz1hKnQ7cmV0dXJuKCgxLTMqdCszKmEtcykqZSsoNC02KmErMypzKSpyKygxKzMqdCszKmEtMypzKSpuK3MqaSkvNn1mdW5jdGlvbiBTOCh0KXt2YXIgZT10Lmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1yPD0wP3I9MDpyPj0xPyhyPTEsZS0xKTpNYXRoLmZsb29yKHIqZSksaT10W25dLGE9dFtuKzFdLHM9bj4wP3Rbbi0xXToyKmktYSxsPW48ZS0xP3RbbisyXToyKmEtaTtyZXR1cm4gRTgoKHItbi9lKSplLHMsaSxhLGwpfX12YXIgQzg9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKEU4LCJiYXNpcyIpO28oUzgsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIEE4KHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1NYXRoLmZsb29yKCgociU9MSk8MD8rK3I6cikqZSksaT10WyhuK2UtMSklZV0sYT10W24lZV0scz10WyhuKzEpJWVdLGw9dFsobisyKSVlXTtyZXR1cm4gRTgoKHItbi9lKSplLGksYSxzLGwpfX12YXIgeFU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtDOCgpO28oQTgsImRlZmF1bHQiKX0pO3ZhciBTMCxfOD1OKCgpPT57InVzZSBzdHJpY3QiO1MwPW8odD0+KCk9PnQsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIGJVKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB0K3IqZX19ZnVuY3Rpb24gY3dlKHQsZSxyKXtyZXR1cm4gdD1NYXRoLnBvdyh0LHIpLGU9TWF0aC5wb3coZSxyKS10LHI9MS9yLGZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnBvdyh0K24qZSxyKX19ZnVuY3Rpb24gd1UodCxlKXt2YXIgcj1lLXQ7cmV0dXJuIHI/YlUodCxyPjE4MHx8cjwtMTgwP3ItMzYwKk1hdGgucm91bmQoci8zNjApOnIpOlMwKGlzTmFOKHQpP2U6dCl9ZnVuY3Rpb24gVFUodCl7cmV0dXJuKHQ9K3QpPT0xP2R1OmZ1bmN0aW9uKGUscil7cmV0dXJuIHItZT9jd2UoZSxyLHQpOlMwKGlzTmFOKGUpP3I6ZSl9fWZ1bmN0aW9uIGR1KHQsZSl7dmFyIHI9ZS10O3JldHVybiByP2JVKHQscik6UzAoaXNOYU4odCk/ZTp0KX12YXIgRDg9TigoKT0+eyJ1c2Ugc3RyaWN0IjtfOCgpO28oYlUsImxpbmVhciIpO28oY3dlLCJleHBvbmVudGlhbCIpO28od1UsImh1ZSIpO28oVFUsImdhbW1hIik7byhkdSwibm9nYW1tYSIpfSk7ZnVuY3Rpb24ga1UodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByPWUubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9bmV3IEFycmF5KHIpLGE9bmV3IEFycmF5KHIpLHMsbDtmb3Iocz0wO3M8cjsrK3MpbD1UMChlW3NdKSxuW3NdPWwucnx8MCxpW3NdPWwuZ3x8MCxhW3NdPWwuYnx8MDtyZXR1cm4gbj10KG4pLGk9dChpKSxhPXQoYSksbC5vcGFjaXR5PTEsZnVuY3Rpb24odSl7cmV0dXJuIGwucj1uKHUpLGwuZz1pKHUpLGwuYj1hKHUpLGwrIiJ9fX12YXIgdWQsdXdlLGh3ZSxMOD1OKCgpPT57InVzZSBzdHJpY3QiO0UwKCk7QzgoKTt4VSgpO0Q4KCk7dWQ9byhmdW5jdGlvbiB0KGUpe3ZhciByPVRVKGUpO2Z1bmN0aW9uIG4oaSxhKXt2YXIgcz1yKChpPVQwKGkpKS5yLChhPVQwKGEpKS5yKSxsPXIoaS5nLGEuZyksdT1yKGkuYixhLmIpLGg9ZHUoaS5vcGFjaXR5LGEub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGYpe3JldHVybiBpLnI9cyhmKSxpLmc9bChmKSxpLmI9dShmKSxpLm9wYWNpdHk9aChmKSxpKyIifX1yZXR1cm4gbyhuLCJyZ2IiKSxuLmdhbW1hPXQsbn0sInJnYkdhbW1hIikoMSk7byhrVSwicmdiU3BsaW5lIik7dXdlPWtVKFM4KSxod2U9a1UoQTgpfSk7ZnVuY3Rpb24gUjgodCxlKXtlfHwoZT1bXSk7dmFyIHI9dD9NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aCk6MCxuPWUuc2xpY2UoKSxpO3JldHVybiBmdW5jdGlvbihhKXtmb3IoaT0wO2k8cjsrK2kpbltpXT10W2ldKigxLWEpK2VbaV0qYTtyZXR1cm4gbn19ZnVuY3Rpb24gRVUodCl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyh0KSYmISh0IGluc3RhbmNlb2YgRGF0YVZpZXcpfXZhciBTVT1OKCgpPT57InVzZSBzdHJpY3QiO28oUjgsImRlZmF1bHQiKTtvKEVVLCJpc051bWJlckFycmF5Iil9KTtmdW5jdGlvbiBDVSh0LGUpe3ZhciByPWU/ZS5sZW5ndGg6MCxuPXQ/TWF0aC5taW4ocix0Lmxlbmd0aCk6MCxpPW5ldyBBcnJheShuKSxhPW5ldyBBcnJheShyKSxzO2ZvcihzPTA7czxuOysrcylpW3NdPWtoKHRbc10sZVtzXSk7Zm9yKDtzPHI7KytzKWFbc109ZVtzXTtyZXR1cm4gZnVuY3Rpb24obCl7Zm9yKHM9MDtzPG47KytzKWFbc109aVtzXShsKTtyZXR1cm4gYX19dmFyIEFVPU4oKCk9PnsidXNlIHN0cmljdCI7WTMoKTtvKENVLCJnZW5lcmljQXJyYXkiKX0pO2Z1bmN0aW9uIE44KHQsZSl7dmFyIHI9bmV3IERhdGU7cmV0dXJuIHQ9K3QsZT0rZSxmdW5jdGlvbihuKXtyZXR1cm4gci5zZXRUaW1lKHQqKDEtbikrZSpuKSxyfX12YXIgX1U9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKE44LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBLaSh0LGUpe3JldHVybiB0PSt0LGU9K2UsZnVuY3Rpb24ocil7cmV0dXJuIHQqKDEtcikrZSpyfX12YXIgb3Y9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKEtpLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBNOCh0LGUpe3ZhciByPXt9LG49e30saTsodD09PW51bGx8fHR5cGVvZiB0IT0ib2JqZWN0IikmJih0PXt9KSwoZT09PW51bGx8fHR5cGVvZiBlIT0ib2JqZWN0IikmJihlPXt9KTtmb3IoaSBpbiBlKWkgaW4gdD9yW2ldPWtoKHRbaV0sZVtpXSk6bltpXT1lW2ldO3JldHVybiBmdW5jdGlvbihhKXtmb3IoaSBpbiByKW5baV09cltpXShhKTtyZXR1cm4gbn19dmFyIERVPU4oKCk9PnsidXNlIHN0cmljdCI7WTMoKTtvKE04LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBmd2UodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIGR3ZSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSkrIiJ9fWZ1bmN0aW9uIEMwKHQsZSl7dmFyIHI9TzgubGFzdEluZGV4PUk4Lmxhc3RJbmRleD0wLG4saSxhLHM9LTEsbD1bXSx1PVtdO2Zvcih0PXQrIiIsZT1lKyIiOyhuPU84LmV4ZWModCkpJiYoaT1JOC5leGVjKGUpKTspKGE9aS5pbmRleCk+ciYmKGE9ZS5zbGljZShyLGEpLGxbc10/bFtzXSs9YTpsWysrc109YSksKG49blswXSk9PT0oaT1pWzBdKT9sW3NdP2xbc10rPWk6bFsrK3NdPWk6KGxbKytzXT1udWxsLHUucHVzaCh7aTpzLHg6S2kobixpKX0pKSxyPUk4Lmxhc3RJbmRleDtyZXR1cm4gcjxlLmxlbmd0aCYmKGE9ZS5zbGljZShyKSxsW3NdP2xbc10rPWE6bFsrK3NdPWEpLGwubGVuZ3RoPDI/dVswXT9kd2UodVswXS54KTpmd2UoZSk6KGU9dS5sZW5ndGgsZnVuY3Rpb24oaCl7Zm9yKHZhciBmPTAsZDtmPGU7KytmKWxbKGQ9dVtmXSkuaV09ZC54KGgpO3JldHVybiBsLmpvaW4oIiIpfSl9dmFyIE84LEk4LFA4PU4oKCk9PnsidXNlIHN0cmljdCI7b3YoKTtPOD0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csSTg9bmV3IFJlZ0V4cChPOC5zb3VyY2UsImciKTtvKGZ3ZSwiemVybyIpO28oZHdlLCJvbmUiKTtvKEMwLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBraCh0LGUpe3ZhciByPXR5cGVvZiBlLG47cmV0dXJuIGU9PW51bGx8fHI9PT0iYm9vbGVhbiI/UzAoZSk6KHI9PT0ibnVtYmVyIj9LaTpyPT09InN0cmluZyI/KG49cGwoZSkpPyhlPW4sdWQpOkMwOmUgaW5zdGFuY2VvZiBwbD91ZDplIGluc3RhbmNlb2YgRGF0ZT9OODpFVShlKT9SODpBcnJheS5pc0FycmF5KGUpP0NVOnR5cGVvZiBlLnZhbHVlT2YhPSJmdW5jdGlvbiImJnR5cGVvZiBlLnRvU3RyaW5nIT0iZnVuY3Rpb24ifHxpc05hTihlKT9NODpLaSkodCxlKX12YXIgWTM9TigoKT0+eyJ1c2Ugc3RyaWN0IjtFMCgpO0w4KCk7QVUoKTtfVSgpO292KCk7RFUoKTtQOCgpO184KCk7U1UoKTtvKGtoLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBYMyh0LGUpe3JldHVybiB0PSt0LGU9K2UsZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgucm91bmQodCooMS1yKStlKnIpfX12YXIgTFU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKFgzLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBLMyh0LGUscixuLGksYSl7dmFyIHMsbCx1O3JldHVybihzPU1hdGguc3FydCh0KnQrZSplKSkmJih0Lz1zLGUvPXMpLCh1PXQqcitlKm4pJiYoci09dCp1LG4tPWUqdSksKGw9TWF0aC5zcXJ0KHIqcituKm4pKSYmKHIvPWwsbi89bCx1Lz1sKSx0Km48ZSpyJiYodD0tdCxlPS1lLHU9LXUscz0tcykse3RyYW5zbGF0ZVg6aSx0cmFuc2xhdGVZOmEscm90YXRlOk1hdGguYXRhbjIoZSx0KSpSVSxza2V3WDpNYXRoLmF0YW4odSkqUlUsc2NhbGVYOnMsc2NhbGVZOmx9fXZhciBSVSxqMyxOVT1OKCgpPT57InVzZSBzdHJpY3QiO1JVPTE4MC9NYXRoLlBJLGozPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9O28oSzMsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIE1VKHQpe2xldCBlPW5ldyh0eXBlb2YgRE9NTWF0cml4PT0iZnVuY3Rpb24iP0RPTU1hdHJpeDpXZWJLaXRDU1NNYXRyaXgpKHQrIiIpO3JldHVybiBlLmlzSWRlbnRpdHk/ajM6SzMoZS5hLGUuYixlLmMsZS5kLGUuZSxlLmYpfWZ1bmN0aW9uIElVKHQpe3JldHVybiB0PT1udWxsP2ozOihRM3x8KFEzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIikpLFEzLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIix0KSwodD1RMy50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpKT8odD10Lm1hdHJpeCxLMyh0LmEsdC5iLHQuYyx0LmQsdC5lLHQuZikpOmozKX12YXIgUTMsT1U9TigoKT0+eyJ1c2Ugc3RyaWN0IjtOVSgpO28oTVUsInBhcnNlQ3NzIik7byhJVSwicGFyc2VTdmciKX0pO2Z1bmN0aW9uIFBVKHQsZSxyLG4pe2Z1bmN0aW9uIGkoaCl7cmV0dXJuIGgubGVuZ3RoP2gucG9wKCkrIiAiOiIifW8oaSwicG9wIik7ZnVuY3Rpb24gYShoLGYsZCxwLG0sZyl7aWYoaCE9PWR8fGYhPT1wKXt2YXIgeT1tLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsZSxudWxsLHIpO2cucHVzaCh7aTp5LTQseDpLaShoLGQpfSx7aTp5LTIseDpLaShmLHApfSl9ZWxzZShkfHxwKSYmbS5wdXNoKCJ0cmFuc2xhdGUoIitkK2UrcCtyKX1vKGEsInRyYW5zbGF0ZSIpO2Z1bmN0aW9uIHMoaCxmLGQscCl7aCE9PWY/KGgtZj4xODA/Zis9MzYwOmYtaD4xODAmJihoKz0zNjApLHAucHVzaCh7aTpkLnB1c2goaShkKSsicm90YXRlKCIsbnVsbCxuKS0yLHg6S2koaCxmKX0pKTpmJiZkLnB1c2goaShkKSsicm90YXRlKCIrZituKX1vKHMsInJvdGF0ZSIpO2Z1bmN0aW9uIGwoaCxmLGQscCl7aCE9PWY/cC5wdXNoKHtpOmQucHVzaChpKGQpKyJza2V3WCgiLG51bGwsbiktMix4OktpKGgsZil9KTpmJiZkLnB1c2goaShkKSsic2tld1goIitmK24pfW8obCwic2tld1giKTtmdW5jdGlvbiB1KGgsZixkLHAsbSxnKXtpZihoIT09ZHx8ZiE9PXApe3ZhciB5PW0ucHVzaChpKG0pKyJzY2FsZSgiLG51bGwsIiwiLG51bGwsIikiKTtnLnB1c2goe2k6eS00LHg6S2koaCxkKX0se2k6eS0yLHg6S2koZixwKX0pfWVsc2UoZCE9PTF8fHAhPT0xKSYmbS5wdXNoKGkobSkrInNjYWxlKCIrZCsiLCIrcCsiKSIpfXJldHVybiBvKHUsInNjYWxlIiksZnVuY3Rpb24oaCxmKXt2YXIgZD1bXSxwPVtdO3JldHVybiBoPXQoaCksZj10KGYpLGEoaC50cmFuc2xhdGVYLGgudHJhbnNsYXRlWSxmLnRyYW5zbGF0ZVgsZi50cmFuc2xhdGVZLGQscCkscyhoLnJvdGF0ZSxmLnJvdGF0ZSxkLHApLGwoaC5za2V3WCxmLnNrZXdYLGQscCksdShoLnNjYWxlWCxoLnNjYWxlWSxmLnNjYWxlWCxmLnNjYWxlWSxkLHApLGg9Zj1udWxsLGZ1bmN0aW9uKG0pe2Zvcih2YXIgZz0tMSx5PXAubGVuZ3RoLHY7KytnPHk7KWRbKHY9cFtnXSkuaV09di54KG0pO3JldHVybiBkLmpvaW4oIiIpfX19dmFyIEI4LEY4LEJVPU4oKCk9PnsidXNlIHN0cmljdCI7b3YoKTtPVSgpO28oUFUsImludGVycG9sYXRlVHJhbnNmb3JtIik7Qjg9UFUoTVUsInB4LCAiLCJweCkiLCJkZWcpIiksRjg9UFUoSVUsIiwgIiwiKSIsIikiKX0pO2Z1bmN0aW9uIEZVKHQpe3JldHVybiBmdW5jdGlvbihlLHIpe3ZhciBuPXQoKGU9c3YoZSkpLmgsKHI9c3YocikpLmgpLGk9ZHUoZS5jLHIuYyksYT1kdShlLmwsci5sKSxzPWR1KGUub3BhY2l0eSxyLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihsKXtyZXR1cm4gZS5oPW4obCksZS5jPWkobCksZS5sPWEobCksZS5vcGFjaXR5PXMobCksZSsiIn19fXZhciAkOCxwd2UsJFU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtFMCgpO0Q4KCk7byhGVSwiaGNsIik7JDg9RlUod1UpLHB3ZT1GVShkdSl9KTt2YXIgQTA9TigoKT0+eyJ1c2Ugc3RyaWN0IjtZMygpO292KCk7TFUoKTtQOCgpO0JVKCk7TDgoKTskVSgpfSk7ZnVuY3Rpb24gZHYoKXtyZXR1cm4gaGR8fChWVShtd2UpLGhkPWh2Lm5vdygpK2U1KX1mdW5jdGlvbiBtd2UoKXtoZD0wfWZ1bmN0aW9uIGZ2KCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiB0NSh0LGUscil7dmFyIG49bmV3IGZ2O3JldHVybiBuLnJlc3RhcnQodCxlLHIpLG59ZnVuY3Rpb24gVVUoKXtkdigpLCsrXzA7Zm9yKHZhciB0PVozLGU7dDspKGU9aGQtdC5fdGltZSk+PTAmJnQuX2NhbGwuY2FsbCh2b2lkIDAsZSksdD10Ll9uZXh0Oy0tXzB9ZnVuY3Rpb24gelUoKXtoZD0oSjM9aHYubm93KCkpK2U1LF8wPWN2PTA7dHJ5e1VVKCl9ZmluYWxseXtfMD0wLHl3ZSgpLGhkPTB9fWZ1bmN0aW9uIGd3ZSgpe3ZhciB0PWh2Lm5vdygpLGU9dC1KMztlPkdVJiYoZTUtPWUsSjM9dCl9ZnVuY3Rpb24geXdlKCl7Zm9yKHZhciB0LGU9WjMscixuPTEvMDtlOyllLl9jYWxsPyhuPmUuX3RpbWUmJihuPWUuX3RpbWUpLHQ9ZSxlPWUuX25leHQpOihyPWUuX25leHQsZS5fbmV4dD1udWxsLGU9dD90Ll9uZXh0PXI6WjM9cik7dXY9dCx6OChuKX1mdW5jdGlvbiB6OCh0KXtpZighXzApe2N2JiYoY3Y9Y2xlYXJUaW1lb3V0KGN2KSk7dmFyIGU9dC1oZDtlPjI0Pyh0PDEvMCYmKGN2PXNldFRpbWVvdXQoelUsdC1odi5ub3coKS1lNSkpLGx2JiYobHY9Y2xlYXJJbnRlcnZhbChsdikpKToobHZ8fChKMz1odi5ub3coKSxsdj1zZXRJbnRlcnZhbChnd2UsR1UpKSxfMD0xLFZVKHpVKSl9fXZhciBfMCxjdixsdixHVSxaMyx1dixKMyxoZCxlNSxodixWVSxHOD1OKCgpPT57InVzZSBzdHJpY3QiO18wPTAsY3Y9MCxsdj0wLEdVPTFlMyxKMz0wLGhkPTAsZTU9MCxodj10eXBlb2YgcGVyZm9ybWFuY2U9PSJvYmplY3QiJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxWVT10eXBlb2Ygd2luZG93PT0ib2JqZWN0IiYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsMTcpfTtvKGR2LCJub3ciKTtvKG13ZSwiY2xlYXJOb3ciKTtvKGZ2LCJUaW1lciIpO2Z2LnByb3RvdHlwZT10NS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmZ2LHJlc3RhcnQ6byhmdW5jdGlvbih0LGUscil7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTtyPShyPT1udWxsP2R2KCk6K3IpKyhlPT1udWxsPzA6K2UpLCF0aGlzLl9uZXh0JiZ1diE9PXRoaXMmJih1dj91di5fbmV4dD10aGlzOlozPXRoaXMsdXY9dGhpcyksdGhpcy5fY2FsbD10LHRoaXMuX3RpbWU9cix6OCgpfSwicmVzdGFydCIpLHN0b3A6byhmdW5jdGlvbigpe3RoaXMuX2NhbGwmJih0aGlzLl9jYWxsPW51bGwsdGhpcy5fdGltZT0xLzAsejgoKSl9LCJzdG9wIil9O28odDUsInRpbWVyIik7byhVVSwidGltZXJGbHVzaCIpO28oelUsIndha2UiKTtvKGd3ZSwicG9rZSIpO28oeXdlLCJuYXAiKTtvKHo4LCJzbGVlcCIpfSk7ZnVuY3Rpb24gcHYodCxlLHIpe3ZhciBuPW5ldyBmdjtyZXR1cm4gZT1lPT1udWxsPzA6K2Usbi5yZXN0YXJ0KGk9PntuLnN0b3AoKSx0KGkrZSl9LGUsciksbn12YXIgSFU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtHOCgpO28ocHYsImRlZmF1bHQiKX0pO3ZhciByNT1OKCgpPT57InVzZSBzdHJpY3QiO0c4KCk7SFUoKX0pO2Z1bmN0aW9uIHB1KHQsZSxyLG4saSxhKXt2YXIgcz10Ll9fdHJhbnNpdGlvbjtpZighcyl0Ll9fdHJhbnNpdGlvbj17fTtlbHNlIGlmKHIgaW4gcylyZXR1cm47YndlKHQscix7bmFtZTplLGluZGV4Om4sZ3JvdXA6aSxvbjp2d2UsdHdlZW46eHdlLHRpbWU6YS50aW1lLGRlbGF5OmEuZGVsYXksZHVyYXRpb246YS5kdXJhdGlvbixlYXNlOmEuZWFzZSx0aW1lcjpudWxsLHN0YXRlOllVfSl9ZnVuY3Rpb24gZ3YodCxlKXt2YXIgcj1CaSh0LGUpO2lmKHIuc3RhdGU+WVUpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWQiKTtyZXR1cm4gcn1mdW5jdGlvbiBoYSh0LGUpe3ZhciByPUJpKHQsZSk7aWYoci5zdGF0ZT5uNSl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHJ1bm5pbmciKTtyZXR1cm4gcn1mdW5jdGlvbiBCaSh0LGUpe3ZhciByPXQuX190cmFuc2l0aW9uO2lmKCFyfHwhKHI9cltlXSkpdGhyb3cgbmV3IEVycm9yKCJ0cmFuc2l0aW9uIG5vdCBmb3VuZCIpO3JldHVybiByfWZ1bmN0aW9uIGJ3ZSh0LGUscil7dmFyIG49dC5fX3RyYW5zaXRpb24saTtuW2VdPXIsci50aW1lcj10NShhLDAsci50aW1lKTtmdW5jdGlvbiBhKGgpe3Iuc3RhdGU9V1Usci50aW1lci5yZXN0YXJ0KHMsci5kZWxheSxyLnRpbWUpLHIuZGVsYXk8PWgmJnMoaC1yLmRlbGF5KX1vKGEsInNjaGVkdWxlIik7ZnVuY3Rpb24gcyhoKXt2YXIgZixkLHAsbTtpZihyLnN0YXRlIT09V1UpcmV0dXJuIHUoKTtmb3IoZiBpbiBuKWlmKG09bltmXSxtLm5hbWU9PT1yLm5hbWUpe2lmKG0uc3RhdGU9PT1uNSlyZXR1cm4gcHYocyk7bS5zdGF0ZT09PXFVPyhtLnN0YXRlPW12LG0udGltZXIuc3RvcCgpLG0ub24uY2FsbCgiaW50ZXJydXB0Iix0LHQuX19kYXRhX18sbS5pbmRleCxtLmdyb3VwKSxkZWxldGUgbltmXSk6K2Y8ZSYmKG0uc3RhdGU9bXYsbS50aW1lci5zdG9wKCksbS5vbi5jYWxsKCJjYW5jZWwiLHQsdC5fX2RhdGFfXyxtLmluZGV4LG0uZ3JvdXApLGRlbGV0ZSBuW2ZdKX1pZihwdihmdW5jdGlvbigpe3Iuc3RhdGU9PT1uNSYmKHIuc3RhdGU9cVUsci50aW1lci5yZXN0YXJ0KGwsci5kZWxheSxyLnRpbWUpLGwoaCkpfSksci5zdGF0ZT1pNSxyLm9uLmNhbGwoInN0YXJ0Iix0LHQuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSxyLnN0YXRlPT09aTUpe2ZvcihyLnN0YXRlPW41LGk9bmV3IEFycmF5KHA9ci50d2Vlbi5sZW5ndGgpLGY9MCxkPS0xO2Y8cDsrK2YpKG09ci50d2VlbltmXS52YWx1ZS5jYWxsKHQsdC5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApKSYmKGlbKytkXT1tKTtpLmxlbmd0aD1kKzF9fW8ocywic3RhcnQiKTtmdW5jdGlvbiBsKGgpe2Zvcih2YXIgZj1oPHIuZHVyYXRpb24/ci5lYXNlLmNhbGwobnVsbCxoL3IuZHVyYXRpb24pOihyLnRpbWVyLnJlc3RhcnQodSksci5zdGF0ZT1hNSwxKSxkPS0xLHA9aS5sZW5ndGg7KytkPHA7KWlbZF0uY2FsbCh0LGYpO3Iuc3RhdGU9PT1hNSYmKHIub24uY2FsbCgiZW5kIix0LHQuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSx1KCkpfW8obCwidGljayIpO2Z1bmN0aW9uIHUoKXtyLnN0YXRlPW12LHIudGltZXIuc3RvcCgpLGRlbGV0ZSBuW2VdO2Zvcih2YXIgaCBpbiBuKXJldHVybjtkZWxldGUgdC5fX3RyYW5zaXRpb259byh1LCJzdG9wIil9dmFyIHZ3ZSx4d2UsWVUsV1UsaTUsbjUscVUsYTUsbXYsRXM9TigoKT0+eyJ1c2Ugc3RyaWN0IjtUQSgpO3I1KCk7dndlPXdBKCJzdGFydCIsImVuZCIsImNhbmNlbCIsImludGVycnVwdCIpLHh3ZT1bXSxZVT0wLFdVPTEsaTU9MixuNT0zLHFVPTQsYTU9NSxtdj02O28ocHUsImRlZmF1bHQiKTtvKGd2LCJpbml0Iik7byhoYSwic2V0Iik7byhCaSwiZ2V0Iik7byhid2UsImNyZWF0ZSIpfSk7ZnVuY3Rpb24geXYodCxlKXt2YXIgcj10Ll9fdHJhbnNpdGlvbixuLGksYT0hMCxzO2lmKHIpe2U9ZT09bnVsbD9udWxsOmUrIiI7Zm9yKHMgaW4gcil7aWYoKG49cltzXSkubmFtZSE9PWUpe2E9ITE7Y29udGludWV9aT1uLnN0YXRlPmk1JiZuLnN0YXRlPGE1LG4uc3RhdGU9bXYsbi50aW1lci5zdG9wKCksbi5vbi5jYWxsKGk/ImludGVycnVwdCI6ImNhbmNlbCIsdCx0Ll9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCksZGVsZXRlIHJbc119YSYmZGVsZXRlIHQuX190cmFuc2l0aW9ufX12YXIgWFU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtFcygpO28oeXYsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIFY4KHQpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt5dih0aGlzLHQpfSl9dmFyIGpVPU4oKCk9PnsidXNlIHN0cmljdCI7WFUoKTtvKFY4LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiB3d2UodCxlKXt2YXIgcixuO3JldHVybiBmdW5jdGlvbigpe3ZhciBpPWhhKHRoaXMsdCksYT1pLnR3ZWVuO2lmKGEhPT1yKXtuPXI9YTtmb3IodmFyIHM9MCxsPW4ubGVuZ3RoO3M8bDsrK3MpaWYobltzXS5uYW1lPT09ZSl7bj1uLnNsaWNlKCksbi5zcGxpY2UocywxKTticmVha319aS50d2Vlbj1ufX1mdW5jdGlvbiBUd2UodCxlLHIpe3ZhciBuLGk7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPWhhKHRoaXMsdCkscz1hLnR3ZWVuO2lmKHMhPT1uKXtpPShuPXMpLnNsaWNlKCk7Zm9yKHZhciBsPXtuYW1lOmUsdmFsdWU6cn0sdT0wLGg9aS5sZW5ndGg7dTxoOysrdSlpZihpW3VdLm5hbWU9PT1lKXtpW3VdPWw7YnJlYWt9dT09PWgmJmkucHVzaChsKX1hLnR3ZWVuPWl9fWZ1bmN0aW9uIFU4KHQsZSl7dmFyIHI9dGhpcy5faWQ7aWYodCs9IiIsYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIG49QmkodGhpcy5ub2RlKCkscikudHdlZW4saT0wLGE9bi5sZW5ndGgscztpPGE7KytpKWlmKChzPW5baV0pLm5hbWU9PT10KXJldHVybiBzLnZhbHVlO3JldHVybiBudWxsfXJldHVybiB0aGlzLmVhY2goKGU9PW51bGw/d3dlOlR3ZSkocix0LGUpKX1mdW5jdGlvbiBEMCh0LGUscil7dmFyIG49dC5faWQ7cmV0dXJuIHQuZWFjaChmdW5jdGlvbigpe3ZhciBpPWhhKHRoaXMsbik7KGkudmFsdWV8fChpLnZhbHVlPXt9KSlbZV09ci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxmdW5jdGlvbihpKXtyZXR1cm4gQmkoaSxuKS52YWx1ZVtlXX19dmFyIHZ2PU4oKCk9PnsidXNlIHN0cmljdCI7RXMoKTtvKHd3ZSwidHdlZW5SZW1vdmUiKTtvKFR3ZSwidHdlZW5GdW5jdGlvbiIpO28oVTgsImRlZmF1bHQiKTtvKEQwLCJ0d2VlblZhbHVlIil9KTtmdW5jdGlvbiB4dih0LGUpe3ZhciByO3JldHVybih0eXBlb2YgZT09Im51bWJlciI/S2k6ZSBpbnN0YW5jZW9mIHBsP3VkOihyPXBsKGUpKT8oZT1yLHVkKTpDMCkodCxlKX12YXIgSDg9TigoKT0+eyJ1c2Ugc3RyaWN0IjtFMCgpO0EwKCk7byh4diwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24ga3dlKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX1mdW5jdGlvbiBFd2UodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBTd2UodCxlLHIpe3ZhciBuLGk9cisiIixhO3JldHVybiBmdW5jdGlvbigpe3ZhciBzPXRoaXMuZ2V0QXR0cmlidXRlKHQpO3JldHVybiBzPT09aT9udWxsOnM9PT1uP2E6YT1lKG49cyxyKX19ZnVuY3Rpb24gQ3dlKHQsZSxyKXt2YXIgbixpPXIrIiIsYTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcz10aGlzLmdldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk7cmV0dXJuIHM9PT1pP251bGw6cz09PW4/YTphPWUobj1zLHIpfX1mdW5jdGlvbiBBd2UodCxlLHIpe3ZhciBuLGksYTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcyxsPXIodGhpcyksdTtyZXR1cm4gbD09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlKHQpOihzPXRoaXMuZ2V0QXR0cmlidXRlKHQpLHU9bCsiIixzPT09dT9udWxsOnM9PT1uJiZ1PT09aT9hOihpPXUsYT1lKG49cyxsKSkpfX1mdW5jdGlvbiBfd2UodCxlLHIpe3ZhciBuLGksYTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcyxsPXIodGhpcyksdTtyZXR1cm4gbD09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKToocz10aGlzLmdldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCksdT1sKyIiLHM9PT11P251bGw6cz09PW4mJnU9PT1pP2E6KGk9dSxhPWUobj1zLGwpKSl9fWZ1bmN0aW9uIFc4KHQsZSl7dmFyIHI9cmModCksbj1yPT09InRyYW5zZm9ybSI/Rjg6eHY7cmV0dXJuIHRoaXMuYXR0clR3ZWVuKHQsdHlwZW9mIGU9PSJmdW5jdGlvbiI/KHIubG9jYWw/X3dlOkF3ZSkocixuLEQwKHRoaXMsImF0dHIuIit0LGUpKTplPT1udWxsPyhyLmxvY2FsP0V3ZTprd2UpKHIpOihyLmxvY2FsP0N3ZTpTd2UpKHIsbixlKSl9dmFyIEtVPU4oKCk9PnsidXNlIHN0cmljdCI7QTAoKTtmbCgpO3Z2KCk7SDgoKTtvKGt3ZSwiYXR0clJlbW92ZSIpO28oRXdlLCJhdHRyUmVtb3ZlTlMiKTtvKFN3ZSwiYXR0ckNvbnN0YW50Iik7byhDd2UsImF0dHJDb25zdGFudE5TIik7byhBd2UsImF0dHJGdW5jdGlvbiIpO28oX3dlLCJhdHRyRnVuY3Rpb25OUyIpO28oVzgsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIER3ZSh0LGUpe3JldHVybiBmdW5jdGlvbihyKXt0aGlzLnNldEF0dHJpYnV0ZSh0LGUuY2FsbCh0aGlzLHIpKX19ZnVuY3Rpb24gTHdlKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3RoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLGUuY2FsbCh0aGlzLHIpKX19ZnVuY3Rpb24gUndlKHQsZSl7dmFyIHIsbjtmdW5jdGlvbiBpKCl7dmFyIGE9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGEhPT1uJiYocj0obj1hKSYmTHdlKHQsYSkpLHJ9cmV0dXJuIG8oaSwidHdlZW4iKSxpLl92YWx1ZT1lLGl9ZnVuY3Rpb24gTndlKHQsZSl7dmFyIHIsbjtmdW5jdGlvbiBpKCl7dmFyIGE9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGEhPT1uJiYocj0obj1hKSYmRHdlKHQsYSkpLHJ9cmV0dXJuIG8oaSwidHdlZW4iKSxpLl92YWx1ZT1lLGl9ZnVuY3Rpb24gcTgodCxlKXt2YXIgcj0iYXR0ci4iK3Q7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihyPXRoaXMudHdlZW4ocikpJiZyLl92YWx1ZTtpZihlPT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKHIsbnVsbCk7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3ZhciBuPXJjKHQpO3JldHVybiB0aGlzLnR3ZWVuKHIsKG4ubG9jYWw/UndlOk53ZSkobixlKSl9dmFyIFFVPU4oKCk9PnsidXNlIHN0cmljdCI7ZmwoKTtvKER3ZSwiYXR0ckludGVycG9sYXRlIik7byhMd2UsImF0dHJJbnRlcnBvbGF0ZU5TIik7byhSd2UsImF0dHJUd2Vlbk5TIik7byhOd2UsImF0dHJUd2VlbiIpO28ocTgsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIE13ZSh0LGUpe3JldHVybiBmdW5jdGlvbigpe2d2KHRoaXMsdCkuZGVsYXk9K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBJd2UodCxlKXtyZXR1cm4gZT0rZSxmdW5jdGlvbigpe2d2KHRoaXMsdCkuZGVsYXk9ZX19ZnVuY3Rpb24gWTgodCl7dmFyIGU9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj9Nd2U6SXdlKShlLHQpKTpCaSh0aGlzLm5vZGUoKSxlKS5kZWxheX12YXIgWlU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtFcygpO28oTXdlLCJkZWxheUZ1bmN0aW9uIik7byhJd2UsImRlbGF5Q29uc3RhbnQiKTtvKFk4LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBPd2UodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtoYSh0aGlzLHQpLmR1cmF0aW9uPStlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gUHdlKHQsZSl7cmV0dXJuIGU9K2UsZnVuY3Rpb24oKXtoYSh0aGlzLHQpLmR1cmF0aW9uPWV9fWZ1bmN0aW9uIFg4KHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIHQ9PSJmdW5jdGlvbiI/T3dlOlB3ZSkoZSx0KSk6QmkodGhpcy5ub2RlKCksZSkuZHVyYXRpb259dmFyIEpVPU4oKCk9PnsidXNlIHN0cmljdCI7RXMoKTtvKE93ZSwiZHVyYXRpb25GdW5jdGlvbiIpO28oUHdlLCJkdXJhdGlvbkNvbnN0YW50Iik7byhYOCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gQndlKHQsZSl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe2hhKHRoaXMsdCkuZWFzZT1lfX1mdW5jdGlvbiBqOCh0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goQndlKGUsdCkpOkJpKHRoaXMubm9kZSgpLGUpLmVhc2V9dmFyIGVIPU4oKCk9PnsidXNlIHN0cmljdCI7RXMoKTtvKEJ3ZSwiZWFzZUNvbnN0YW50Iik7byhqOCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gRndlKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO2hhKHRoaXMsdCkuZWFzZT1yfX1mdW5jdGlvbiBLOCh0KXtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMuZWFjaChGd2UodGhpcy5faWQsdCkpfXZhciB0SD1OKCgpPT57InVzZSBzdHJpY3QiO0VzKCk7byhGd2UsImVhc2VWYXJ5aW5nIik7byhLOCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gUTgodCl7dHlwZW9mIHQhPSJmdW5jdGlvbiImJih0PXgwKHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHI9ZS5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBhPWVbaV0scz1hLmxlbmd0aCxsPW5baV09W10sdSxoPTA7aDxzOysraCkodT1hW2hdKSYmdC5jYWxsKHUsdS5fX2RhdGFfXyxoLGEpJiZsLnB1c2godSk7cmV0dXJuIG5ldyBlcyhuLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9dmFyIHJIPU4oKCk9PnsidXNlIHN0cmljdCI7ZmwoKTtmZCgpO28oUTgsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIFo4KHQpe2lmKHQuX2lkIT09dGhpcy5faWQpdGhyb3cgbmV3IEVycm9yO2Zvcih2YXIgZT10aGlzLl9ncm91cHMscj10Ll9ncm91cHMsbj1lLmxlbmd0aCxpPXIubGVuZ3RoLGE9TWF0aC5taW4obixpKSxzPW5ldyBBcnJheShuKSxsPTA7bDxhOysrbClmb3IodmFyIHU9ZVtsXSxoPXJbbF0sZj11Lmxlbmd0aCxkPXNbbF09bmV3IEFycmF5KGYpLHAsbT0wO208ZjsrK20pKHA9dVttXXx8aFttXSkmJihkW21dPXApO2Zvcig7bDxuOysrbClzW2xdPWVbbF07cmV0dXJuIG5ldyBlcyhzLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9dmFyIG5IPU4oKCk9PnsidXNlIHN0cmljdCI7ZmQoKTtvKFo4LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiAkd2UodCl7cmV0dXJuKHQrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbihlKXt2YXIgcj1lLmluZGV4T2YoIi4iKTtyZXR1cm4gcj49MCYmKGU9ZS5zbGljZSgwLHIpKSwhZXx8ZT09PSJzdGFydCJ9KX1mdW5jdGlvbiB6d2UodCxlLHIpe3ZhciBuLGksYT0kd2UoZSk/Z3Y6aGE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHM9YSh0aGlzLHQpLGw9cy5vbjtsIT09biYmKGk9KG49bCkuY29weSgpKS5vbihlLHIpLHMub249aX19ZnVuY3Rpb24gSjgodCxlKXt2YXIgcj10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP0JpKHRoaXMubm9kZSgpLHIpLm9uLm9uKHQpOnRoaXMuZWFjaCh6d2Uocix0LGUpKX12YXIgaUg9TigoKT0+eyJ1c2Ugc3RyaWN0IjtFcygpO28oJHdlLCJzdGFydCIpO28oendlLCJvbkZ1bmN0aW9uIik7byhKOCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gR3dlKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMucGFyZW50Tm9kZTtmb3IodmFyIHIgaW4gdGhpcy5fX3RyYW5zaXRpb24paWYoK3IhPT10KXJldHVybjtlJiZlLnJlbW92ZUNoaWxkKHRoaXMpfX1mdW5jdGlvbiBlXygpe3JldHVybiB0aGlzLm9uKCJlbmQucmVtb3ZlIixHd2UodGhpcy5faWQpKX12YXIgYUg9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKEd3ZSwicmVtb3ZlRnVuY3Rpb24iKTtvKGVfLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiB0Xyh0KXt2YXIgZT10aGlzLl9uYW1lLHI9dGhpcy5faWQ7dHlwZW9mIHQhPSJmdW5jdGlvbiImJih0PXhoKHQpKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgsYT1uZXcgQXJyYXkoaSkscz0wO3M8aTsrK3MpZm9yKHZhciBsPW5bc10sdT1sLmxlbmd0aCxoPWFbc109bmV3IEFycmF5KHUpLGYsZCxwPTA7cDx1OysrcCkoZj1sW3BdKSYmKGQ9dC5jYWxsKGYsZi5fX2RhdGFfXyxwLGwpKSYmKCJfX2RhdGFfXyJpbiBmJiYoZC5fX2RhdGFfXz1mLl9fZGF0YV9fKSxoW3BdPWQscHUoaFtwXSxlLHIscCxoLEJpKGYscikpKTtyZXR1cm4gbmV3IGVzKGEsdGhpcy5fcGFyZW50cyxlLHIpfXZhciBzSD1OKCgpPT57InVzZSBzdHJpY3QiO2ZsKCk7ZmQoKTtFcygpO28odF8sImRlZmF1bHQiKX0pO2Z1bmN0aW9uIHJfKHQpe3ZhciBlPXRoaXMuX25hbWUscj10aGlzLl9pZDt0eXBlb2YgdCE9ImZ1bmN0aW9uIiYmKHQ9djAodCkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxhPVtdLHM9W10sbD0wO2w8aTsrK2wpZm9yKHZhciB1PW5bbF0saD11Lmxlbmd0aCxmLGQ9MDtkPGg7KytkKWlmKGY9dVtkXSl7Zm9yKHZhciBwPXQuY2FsbChmLGYuX19kYXRhX18sZCx1KSxtLGc9QmkoZixyKSx5PTAsdj1wLmxlbmd0aDt5PHY7Kyt5KShtPXBbeV0pJiZwdShtLGUscix5LHAsZyk7YS5wdXNoKHApLHMucHVzaChmKX1yZXR1cm4gbmV3IGVzKGEscyxlLHIpfXZhciBvSD1OKCgpPT57InVzZSBzdHJpY3QiO2ZsKCk7ZmQoKTtFcygpO28ocl8sImRlZmF1bHQiKX0pO2Z1bmN0aW9uIG5fKCl7cmV0dXJuIG5ldyBWd2UodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfXZhciBWd2UsbEg9TigoKT0+eyJ1c2Ugc3RyaWN0IjtmbCgpO1Z3ZT1odS5wcm90b3R5cGUuY29uc3RydWN0b3I7byhuXywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gVXdlKHQsZSl7dmFyIHIsbixpO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPWJoKHRoaXMsdCkscz0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KSxiaCh0aGlzLHQpKTtyZXR1cm4gYT09PXM/bnVsbDphPT09ciYmcz09PW4/aTppPWUocj1hLG49cyl9fWZ1bmN0aW9uIGNIKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9fWZ1bmN0aW9uIEh3ZSh0LGUscil7dmFyIG4saT1yKyIiLGE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHM9YmgodGhpcyx0KTtyZXR1cm4gcz09PWk/bnVsbDpzPT09bj9hOmE9ZShuPXMscil9fWZ1bmN0aW9uIFd3ZSh0LGUscil7dmFyIG4saSxhO3JldHVybiBmdW5jdGlvbigpe3ZhciBzPWJoKHRoaXMsdCksbD1yKHRoaXMpLHU9bCsiIjtyZXR1cm4gbD09bnVsbCYmKHU9bD0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KSxiaCh0aGlzLHQpKSkscz09PXU/bnVsbDpzPT09biYmdT09PWk/YTooaT11LGE9ZShuPXMsbCkpfX1mdW5jdGlvbiBxd2UodCxlKXt2YXIgcixuLGksYT0ic3R5bGUuIitlLHM9ImVuZC4iK2EsbDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdT1oYSh0aGlzLHQpLGg9dS5vbixmPXUudmFsdWVbYV09PW51bGw/bHx8KGw9Y0goZSkpOnZvaWQgMDsoaCE9PXJ8fGkhPT1mKSYmKG49KHI9aCkuY29weSgpKS5vbihzLGk9ZiksdS5vbj1ufX1mdW5jdGlvbiBpXyh0LGUscil7dmFyIG49KHQrPSIiKT09InRyYW5zZm9ybSI/Qjg6eHY7cmV0dXJuIGU9PW51bGw/dGhpcy5zdHlsZVR3ZWVuKHQsVXdlKHQsbikpLm9uKCJlbmQuc3R5bGUuIit0LGNIKHQpKTp0eXBlb2YgZT09ImZ1bmN0aW9uIj90aGlzLnN0eWxlVHdlZW4odCxXd2UodCxuLEQwKHRoaXMsInN0eWxlLiIrdCxlKSkpLmVhY2gocXdlKHRoaXMuX2lkLHQpKTp0aGlzLnN0eWxlVHdlZW4odCxId2UodCxuLGUpLHIpLm9uKCJlbmQuc3R5bGUuIit0LG51bGwpfXZhciB1SD1OKCgpPT57InVzZSBzdHJpY3QiO0EwKCk7ZmwoKTtFcygpO3Z2KCk7SDgoKTtvKFV3ZSwic3R5bGVOdWxsIik7byhjSCwic3R5bGVSZW1vdmUiKTtvKEh3ZSwic3R5bGVDb25zdGFudCIpO28oV3dlLCJzdHlsZUZ1bmN0aW9uIik7byhxd2UsInN0eWxlTWF5YmVSZW1vdmUiKTtvKGlfLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBZd2UodCxlLHIpe3JldHVybiBmdW5jdGlvbihuKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsZS5jYWxsKHRoaXMsbikscil9fWZ1bmN0aW9uIFh3ZSh0LGUscil7dmFyIG4saTtmdW5jdGlvbiBhKCl7dmFyIHM9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHMhPT1pJiYobj0oaT1zKSYmWXdlKHQscyxyKSksbn1yZXR1cm4gbyhhLCJ0d2VlbiIpLGEuX3ZhbHVlPWUsYX1mdW5jdGlvbiBhXyh0LGUscil7dmFyIG49InN0eWxlLiIrKHQrPSIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKG49dGhpcy50d2VlbihuKSkmJm4uX3ZhbHVlO2lmKGU9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4obixudWxsKTtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4obixYd2UodCxlLHI/PyIiKSl9dmFyIGhIPU4oKCk9PnsidXNlIHN0cmljdCI7byhZd2UsInN0eWxlSW50ZXJwb2xhdGUiKTtvKFh3ZSwic3R5bGVUd2VlbiIpO28oYV8sImRlZmF1bHQiKX0pO2Z1bmN0aW9uIGp3ZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PXR9fWZ1bmN0aW9uIEt3ZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpO3RoaXMudGV4dENvbnRlbnQ9ZT8/IiJ9fWZ1bmN0aW9uIHNfKHQpe3JldHVybiB0aGlzLnR3ZWVuKCJ0ZXh0Iix0eXBlb2YgdD09ImZ1bmN0aW9uIj9Ld2UoRDAodGhpcywidGV4dCIsdCkpOmp3ZSh0PT1udWxsPyIiOnQrIiIpKX12YXIgZkg9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt2digpO28oandlLCJ0ZXh0Q29uc3RhbnQiKTtvKEt3ZSwidGV4dEZ1bmN0aW9uIik7byhzXywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gUXdlKHQpe3JldHVybiBmdW5jdGlvbihlKXt0aGlzLnRleHRDb250ZW50PXQuY2FsbCh0aGlzLGUpfX1mdW5jdGlvbiBad2UodCl7dmFyIGUscjtmdW5jdGlvbiBuKCl7dmFyIGk9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGkhPT1yJiYoZT0ocj1pKSYmUXdlKGkpKSxlfXJldHVybiBvKG4sInR3ZWVuIiksbi5fdmFsdWU9dCxufWZ1bmN0aW9uIG9fKHQpe3ZhciBlPSJ0ZXh0IjtpZihhcmd1bWVudHMubGVuZ3RoPDEpcmV0dXJuKGU9dGhpcy50d2VlbihlKSkmJmUuX3ZhbHVlO2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4oZSxudWxsKTtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4oZSxad2UodCkpfXZhciBkSD1OKCgpPT57InVzZSBzdHJpY3QiO28oUXdlLCJ0ZXh0SW50ZXJwb2xhdGUiKTtvKFp3ZSwidGV4dFR3ZWVuIik7byhvXywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gbF8oKXtmb3IodmFyIHQ9dGhpcy5fbmFtZSxlPXRoaXMuX2lkLHI9czUoKSxuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLGE9MDthPGk7KythKWZvcih2YXIgcz1uW2FdLGw9cy5sZW5ndGgsdSxoPTA7aDxsOysraClpZih1PXNbaF0pe3ZhciBmPUJpKHUsZSk7cHUodSx0LHIsaCxzLHt0aW1lOmYudGltZStmLmRlbGF5K2YuZHVyYXRpb24sZGVsYXk6MCxkdXJhdGlvbjpmLmR1cmF0aW9uLGVhc2U6Zi5lYXNlfSl9cmV0dXJuIG5ldyBlcyhuLHRoaXMuX3BhcmVudHMsdCxyKX12YXIgcEg9TigoKT0+eyJ1c2Ugc3RyaWN0IjtmZCgpO0VzKCk7byhsXywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gY18oKXt2YXIgdCxlLHI9dGhpcyxuPXIuX2lkLGk9ci5zaXplKCk7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGEscyl7dmFyIGw9e3ZhbHVlOnN9LHU9e3ZhbHVlOm8oZnVuY3Rpb24oKXstLWk9PT0wJiZhKCl9LCJ2YWx1ZSIpfTtyLmVhY2goZnVuY3Rpb24oKXt2YXIgaD1oYSh0aGlzLG4pLGY9aC5vbjtmIT09dCYmKGU9KHQ9ZikuY29weSgpLGUuXy5jYW5jZWwucHVzaChsKSxlLl8uaW50ZXJydXB0LnB1c2gobCksZS5fLmVuZC5wdXNoKHUpKSxoLm9uPWV9KSxpPT09MCYmYSgpfSl9dmFyIG1IPU4oKCk9PnsidXNlIHN0cmljdCI7RXMoKTtvKGNfLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBlcyh0LGUscixuKXt0aGlzLl9ncm91cHM9dCx0aGlzLl9wYXJlbnRzPWUsdGhpcy5fbmFtZT1yLHRoaXMuX2lkPW59ZnVuY3Rpb24gZ0godCl7cmV0dXJuIGh1KCkudHJhbnNpdGlvbih0KX1mdW5jdGlvbiBzNSgpe3JldHVybisrSndlfXZhciBKd2UsbXUsZmQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtmbCgpO0tVKCk7UVUoKTtaVSgpO0pVKCk7ZUgoKTt0SCgpO3JIKCk7bkgoKTtpSCgpO2FIKCk7c0goKTtvSCgpO2xIKCk7dUgoKTtoSCgpO2ZIKCk7ZEgoKTtwSCgpO3Z2KCk7bUgoKTtKd2U9MDtvKGVzLCJUcmFuc2l0aW9uIik7byhnSCwidHJhbnNpdGlvbiIpO28oczUsIm5ld0lkIik7bXU9aHUucHJvdG90eXBlO2VzLnByb3RvdHlwZT1nSC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmVzLHNlbGVjdDp0XyxzZWxlY3RBbGw6cl8sc2VsZWN0Q2hpbGQ6bXUuc2VsZWN0Q2hpbGQsc2VsZWN0Q2hpbGRyZW46bXUuc2VsZWN0Q2hpbGRyZW4sZmlsdGVyOlE4LG1lcmdlOlo4LHNlbGVjdGlvbjpuXyx0cmFuc2l0aW9uOmxfLGNhbGw6bXUuY2FsbCxub2RlczptdS5ub2Rlcyxub2RlOm11Lm5vZGUsc2l6ZTptdS5zaXplLGVtcHR5Om11LmVtcHR5LGVhY2g6bXUuZWFjaCxvbjpKOCxhdHRyOlc4LGF0dHJUd2VlbjpxOCxzdHlsZTppXyxzdHlsZVR3ZWVuOmFfLHRleHQ6c18sdGV4dFR3ZWVuOm9fLHJlbW92ZTplXyx0d2VlbjpVOCxkZWxheTpZOCxkdXJhdGlvbjpYOCxlYXNlOmo4LGVhc2VWYXJ5aW5nOks4LGVuZDpjXyxbU3ltYm9sLml0ZXJhdG9yXTptdVtTeW1ib2wuaXRlcmF0b3JdfX0pO2Z1bmN0aW9uIG81KHQpe3JldHVybigodCo9Mik8PTE/dCp0KnQ6KHQtPTIpKnQqdCsyKS8yfXZhciB5SD1OKCgpPT57InVzZSBzdHJpY3QiO28obzUsImN1YmljSW5PdXQiKX0pO3ZhciB1Xz1OKCgpPT57InVzZSBzdHJpY3QiO3lIKCl9KTtmdW5jdGlvbiB0VGUodCxlKXtmb3IodmFyIHI7IShyPXQuX190cmFuc2l0aW9uKXx8IShyPXJbZV0pOylpZighKHQ9dC5wYXJlbnROb2RlKSl0aHJvdyBuZXcgRXJyb3IoYHRyYW5zaXRpb24gJHtlfSBub3QgZm91bmRgKTtyZXR1cm4gcn1mdW5jdGlvbiBoXyh0KXt2YXIgZSxyO3QgaW5zdGFuY2VvZiBlcz8oZT10Ll9pZCx0PXQuX25hbWUpOihlPXM1KCksKHI9ZVRlKS50aW1lPWR2KCksdD10PT1udWxsP251bGw6dCsiIik7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLGE9MDthPGk7KythKWZvcih2YXIgcz1uW2FdLGw9cy5sZW5ndGgsdSxoPTA7aDxsOysraCkodT1zW2hdKSYmcHUodSx0LGUsaCxzLHJ8fHRUZSh1LGUpKTtyZXR1cm4gbmV3IGVzKG4sdGhpcy5fcGFyZW50cyx0LGUpfXZhciBlVGUsdkg9TigoKT0+eyJ1c2Ugc3RyaWN0IjtmZCgpO0VzKCk7dV8oKTtyNSgpO2VUZT17dGltZTpudWxsLGRlbGF5OjAsZHVyYXRpb246MjUwLGVhc2U6bzV9O28odFRlLCJpbmhlcml0Iik7byhoXywiZGVmYXVsdCIpfSk7dmFyIHhIPU4oKCk9PnsidXNlIHN0cmljdCI7ZmwoKTtqVSgpO3ZIKCk7aHUucHJvdG90eXBlLmludGVycnVwdD1WODtodS5wcm90b3R5cGUudHJhbnNpdGlvbj1oX30pO3ZhciBsNT1OKCgpPT57InVzZSBzdHJpY3QiO3hIKCl9KTt2YXIgYkg9TigoKT0+eyJ1c2Ugc3RyaWN0In0pO3ZhciB3SD1OKCgpPT57InVzZSBzdHJpY3QifSk7dmFyIFRIPU4oKCk9PnsidXNlIHN0cmljdCJ9KTtmdW5jdGlvbiBrSCh0KXtyZXR1cm5bK3RbMF0sK3RbMV1dfWZ1bmN0aW9uIHJUZSh0KXtyZXR1cm5ba0godFswXSksa0godFsxXSldfWZ1bmN0aW9uIGZfKHQpe3JldHVybnt0eXBlOnR9fXZhciBaMHQsSjB0LGVtdCx0bXQscm10LG5tdCxFSD1OKCgpPT57InVzZSBzdHJpY3QiO2w1KCk7YkgoKTt3SCgpO1RIKCk7KHthYnM6WjB0LG1heDpKMHQsbWluOmVtdH09TWF0aCk7byhrSCwibnVtYmVyMSIpO28oclRlLCJudW1iZXIyIik7dG10PXtuYW1lOiJ4IixoYW5kbGVzOlsidyIsImUiXS5tYXAoZl8pLGlucHV0Om8oZnVuY3Rpb24odCxlKXtyZXR1cm4gdD09bnVsbD9udWxsOltbK3RbMF0sZVswXVsxXV0sWyt0WzFdLGVbMV1bMV1dXX0sImlucHV0Iiksb3V0cHV0Om8oZnVuY3Rpb24odCl7cmV0dXJuIHQmJlt0WzBdWzBdLHRbMV1bMF1dfSwib3V0cHV0Iil9LHJtdD17bmFtZToieSIsaGFuZGxlczpbIm4iLCJzIl0ubWFwKGZfKSxpbnB1dDpvKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PW51bGw/bnVsbDpbW2VbMF1bMF0sK3RbMF1dLFtlWzFdWzBdLCt0WzFdXV19LCJpbnB1dCIpLG91dHB1dDpvKGZ1bmN0aW9uKHQpe3JldHVybiB0JiZbdFswXVsxXSx0WzFdWzFdXX0sIm91dHB1dCIpfSxubXQ9e25hbWU6Inh5IixoYW5kbGVzOlsibiIsInciLCJlIiwicyIsIm53IiwibmUiLCJzdyIsInNlIl0ubWFwKGZfKSxpbnB1dDpvKGZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP251bGw6clRlKHQpfSwiaW5wdXQiKSxvdXRwdXQ6byhmdW5jdGlvbih0KXtyZXR1cm4gdH0sIm91dHB1dCIpfTtvKGZfLCJ0eXBlIil9KTt2YXIgU0g9TigoKT0+eyJ1c2Ugc3RyaWN0IjtFSCgpfSk7ZnVuY3Rpb24gQ0godCl7dGhpcy5fKz10WzBdO2ZvcihsZXQgZT0xLHI9dC5sZW5ndGg7ZTxyOysrZSl0aGlzLl8rPWFyZ3VtZW50c1tlXSt0W2VdfWZ1bmN0aW9uIGlUZSh0KXtsZXQgZT1NYXRoLmZsb29yKHQpO2lmKCEoZT49MCkpdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGRpZ2l0czogJHt0fWApO2lmKGU+MTUpcmV0dXJuIENIO2xldCByPTEwKiplO3JldHVybiBmdW5jdGlvbihuKXt0aGlzLl8rPW5bMF07Zm9yKGxldCBpPTEsYT1uLmxlbmd0aDtpPGE7KytpKXRoaXMuXys9TWF0aC5yb3VuZChhcmd1bWVudHNbaV0qcikvcituW2ldfX1mdW5jdGlvbiBBSCgpe3JldHVybiBuZXcgcGR9dmFyIGRfLHBfLGRkLG5UZSxwZCxfSD1OKCgpPT57InVzZSBzdHJpY3QiO2RfPU1hdGguUEkscF89MipkXyxkZD0xZS02LG5UZT1wXy1kZDtvKENILCJhcHBlbmQiKTtvKGlUZSwiYXBwZW5kUm91bmQiKTtwZD1jbGFzc3tzdGF0aWN7byh0aGlzLCJQYXRoIil9Y29uc3RydWN0b3IoZSl7dGhpcy5feDA9dGhpcy5feTA9dGhpcy5feDE9dGhpcy5feTE9bnVsbCx0aGlzLl89IiIsdGhpcy5fYXBwZW5kPWU9PW51bGw/Q0g6aVRlKGUpfW1vdmVUbyhlLHIpe3RoaXMuX2FwcGVuZGBNJHt0aGlzLl94MD10aGlzLl94MT0rZX0sJHt0aGlzLl95MD10aGlzLl95MT0rcn1gfWNsb3NlUGF0aCgpe3RoaXMuX3gxIT09bnVsbCYmKHRoaXMuX3gxPXRoaXMuX3gwLHRoaXMuX3kxPXRoaXMuX3kwLHRoaXMuX2FwcGVuZGBaYCl9bGluZVRvKGUscil7dGhpcy5fYXBwZW5kYEwke3RoaXMuX3gxPStlfSwke3RoaXMuX3kxPStyfWB9cXVhZHJhdGljQ3VydmVUbyhlLHIsbixpKXt0aGlzLl9hcHBlbmRgUSR7K2V9LCR7K3J9LCR7dGhpcy5feDE9K259LCR7dGhpcy5feTE9K2l9YH1iZXppZXJDdXJ2ZVRvKGUscixuLGksYSxzKXt0aGlzLl9hcHBlbmRgQyR7K2V9LCR7K3J9LCR7K259LCR7K2l9LCR7dGhpcy5feDE9K2F9LCR7dGhpcy5feTE9K3N9YH1hcmNUbyhlLHIsbixpLGEpe2lmKGU9K2Uscj0rcixuPStuLGk9K2ksYT0rYSxhPDApdGhyb3cgbmV3IEVycm9yKGBuZWdhdGl2ZSByYWRpdXM6ICR7YX1gKTtsZXQgcz10aGlzLl94MSxsPXRoaXMuX3kxLHU9bi1lLGg9aS1yLGY9cy1lLGQ9bC1yLHA9ZipmK2QqZDtpZih0aGlzLl94MT09PW51bGwpdGhpcy5fYXBwZW5kYE0ke3RoaXMuX3gxPWV9LCR7dGhpcy5feTE9cn1gO2Vsc2UgaWYocD5kZClpZighKE1hdGguYWJzKGQqdS1oKmYpPmRkKXx8IWEpdGhpcy5fYXBwZW5kYEwke3RoaXMuX3gxPWV9LCR7dGhpcy5feTE9cn1gO2Vsc2V7bGV0IG09bi1zLGc9aS1sLHk9dSp1K2gqaCx2PW0qbStnKmcseD1NYXRoLnNxcnQoeSksYj1NYXRoLnNxcnQocCksdz1hKk1hdGgudGFuKChkXy1NYXRoLmFjb3MoKHkrcC12KS8oMip4KmIpKSkvMiksQz13L2IsVD13L3g7TWF0aC5hYnMoQy0xKT5kZCYmdGhpcy5fYXBwZW5kYEwke2UrQypmfSwke3IrQypkfWAsdGhpcy5fYXBwZW5kYEEke2F9LCR7YX0sMCwwLCR7KyhkKm0+ZipnKX0sJHt0aGlzLl94MT1lK1QqdX0sJHt0aGlzLl95MT1yK1QqaH1gfX1hcmMoZSxyLG4saSxhLHMpe2lmKGU9K2Uscj0rcixuPStuLHM9ISFzLG48MCl0aHJvdyBuZXcgRXJyb3IoYG5lZ2F0aXZlIHJhZGl1czogJHtufWApO2xldCBsPW4qTWF0aC5jb3MoaSksdT1uKk1hdGguc2luKGkpLGg9ZStsLGY9cit1LGQ9MV5zLHA9cz9pLWE6YS1pO3RoaXMuX3gxPT09bnVsbD90aGlzLl9hcHBlbmRgTSR7aH0sJHtmfWA6KE1hdGguYWJzKHRoaXMuX3gxLWgpPmRkfHxNYXRoLmFicyh0aGlzLl95MS1mKT5kZCkmJnRoaXMuX2FwcGVuZGBMJHtofSwke2Z9YCxuJiYocDwwJiYocD1wJXBfK3BfKSxwPm5UZT90aGlzLl9hcHBlbmRgQSR7bn0sJHtufSwwLDEsJHtkfSwke2UtbH0sJHtyLXV9QSR7bn0sJHtufSwwLDEsJHtkfSwke3RoaXMuX3gxPWh9LCR7dGhpcy5feTE9Zn1gOnA+ZGQmJnRoaXMuX2FwcGVuZGBBJHtufSwke259LDAsJHsrKHA+PWRfKX0sJHtkfSwke3RoaXMuX3gxPWUrbipNYXRoLmNvcyhhKX0sJHt0aGlzLl95MT1yK24qTWF0aC5zaW4oYSl9YCl9cmVjdChlLHIsbixpKXt0aGlzLl9hcHBlbmRgTSR7dGhpcy5feDA9dGhpcy5feDE9K2V9LCR7dGhpcy5feTA9dGhpcy5feTE9K3J9aCR7bj0rbn12JHsraX1oJHstbn1aYH10b1N0cmluZygpe3JldHVybiB0aGlzLl99fTtvKEFILCJwYXRoIik7QUgucHJvdG90eXBlPXBkLnByb3RvdHlwZX0pO3ZhciBtXz1OKCgpPT57InVzZSBzdHJpY3QiO19IKCl9KTt2YXIgREg9TigoKT0+eyJ1c2Ugc3RyaWN0In0pO3ZhciBMSD1OKCgpPT57InVzZSBzdHJpY3QifSk7dmFyIFJIPU4oKCk9PnsidXNlIHN0cmljdCJ9KTt2YXIgTkg9TigoKT0+eyJ1c2Ugc3RyaWN0In0pO3ZhciBNSD1OKCgpPT57InVzZSBzdHJpY3QifSk7dmFyIElIPU4oKCk9PnsidXNlIHN0cmljdCJ9KTt2YXIgT0g9TigoKT0+eyJ1c2Ugc3RyaWN0In0pO2Z1bmN0aW9uIGdfKHQpe3JldHVybiBNYXRoLmFicyh0PU1hdGgucm91bmQodCkpPj0xZTIxP3QudG9Mb2NhbGVTdHJpbmcoImVuIikucmVwbGFjZSgvLC9nLCIiKTp0LnRvU3RyaW5nKDEwKX1mdW5jdGlvbiBtZCh0LGUpe2lmKChyPSh0PWU/dC50b0V4cG9uZW50aWFsKGUtMSk6dC50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoImUiKSk8MClyZXR1cm4gbnVsbDt2YXIgcixuPXQuc2xpY2UoMCxyKTtyZXR1cm5bbi5sZW5ndGg+MT9uWzBdK24uc2xpY2UoMik6biwrdC5zbGljZShyKzEpXX12YXIgYnY9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKGdfLCJkZWZhdWx0Iik7byhtZCwiZm9ybWF0RGVjaW1hbFBhcnRzIil9KTtmdW5jdGlvbiBtbCh0KXtyZXR1cm4gdD1tZChNYXRoLmFicyh0KSksdD90WzFdOk5hTn12YXIgd3Y9TigoKT0+eyJ1c2Ugc3RyaWN0IjtidigpO28obWwsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIHlfKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpPXIubGVuZ3RoLGE9W10scz0wLGw9dFswXSx1PTA7aT4wJiZsPjAmJih1K2wrMT5uJiYobD1NYXRoLm1heCgxLG4tdSkpLGEucHVzaChyLnN1YnN0cmluZyhpLT1sLGkrbCkpLCEoKHUrPWwrMSk+bikpOylsPXRbcz0ocysxKSV0Lmxlbmd0aF07cmV0dXJuIGEucmV2ZXJzZSgpLmpvaW4oZSl9fXZhciBQSD1OKCgpPT57InVzZSBzdHJpY3QiO28oeV8sImRlZmF1bHQiKX0pO2Z1bmN0aW9uIHZfKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9bMC05XS9nLGZ1bmN0aW9uKHIpe3JldHVybiB0WytyXX0pfX12YXIgQkg9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKHZfLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBFaCh0KXtpZighKGU9YVRlLmV4ZWModCkpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBmb3JtYXQ6ICIrdCk7dmFyIGU7cmV0dXJuIG5ldyBjNSh7ZmlsbDplWzFdLGFsaWduOmVbMl0sc2lnbjplWzNdLHN5bWJvbDplWzRdLHplcm86ZVs1XSx3aWR0aDplWzZdLGNvbW1hOmVbN10scHJlY2lzaW9uOmVbOF0mJmVbOF0uc2xpY2UoMSksdHJpbTplWzldLHR5cGU6ZVsxMF19KX1mdW5jdGlvbiBjNSh0KXt0aGlzLmZpbGw9dC5maWxsPT09dm9pZCAwPyIgIjp0LmZpbGwrIiIsdGhpcy5hbGlnbj10LmFsaWduPT09dm9pZCAwPyI+Ijp0LmFsaWduKyIiLHRoaXMuc2lnbj10LnNpZ249PT12b2lkIDA/Ii0iOnQuc2lnbisiIix0aGlzLnN5bWJvbD10LnN5bWJvbD09PXZvaWQgMD8iIjp0LnN5bWJvbCsiIix0aGlzLnplcm89ISF0Lnplcm8sdGhpcy53aWR0aD10LndpZHRoPT09dm9pZCAwP3ZvaWQgMDordC53aWR0aCx0aGlzLmNvbW1hPSEhdC5jb21tYSx0aGlzLnByZWNpc2lvbj10LnByZWNpc2lvbj09PXZvaWQgMD92b2lkIDA6K3QucHJlY2lzaW9uLHRoaXMudHJpbT0hIXQudHJpbSx0aGlzLnR5cGU9dC50eXBlPT09dm9pZCAwPyIiOnQudHlwZSsiIn12YXIgYVRlLHhfPU4oKCk9PnsidXNlIHN0cmljdCI7YVRlPS9eKD86KC4pPyhbPD49Xl0pKT8oWytcLSggXSk/KFskI10pPygwKT8oXGQrKT8oLCk/KFwuXGQrKT8ofik/KFthLXolXSk/JC9pO28oRWgsImZvcm1hdFNwZWNpZmllciIpO0VoLnByb3RvdHlwZT1jNS5wcm90b3R5cGU7byhjNSwiRm9ybWF0U3BlY2lmaWVyIik7YzUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWduK3RoaXMuc2lnbit0aGlzLnN5bWJvbCsodGhpcy56ZXJvPyIwIjoiIikrKHRoaXMud2lkdGg9PT12b2lkIDA/IiI6TWF0aC5tYXgoMSx0aGlzLndpZHRofDApKSsodGhpcy5jb21tYT8iLCI6IiIpKyh0aGlzLnByZWNpc2lvbj09PXZvaWQgMD8iIjoiLiIrTWF0aC5tYXgoMCx0aGlzLnByZWNpc2lvbnwwKSkrKHRoaXMudHJpbT8ifiI6IiIpK3RoaXMudHlwZX19KTtmdW5jdGlvbiBiXyh0KXtlOmZvcih2YXIgZT10Lmxlbmd0aCxyPTEsbj0tMSxpO3I8ZTsrK3Ipc3dpdGNoKHRbcl0pe2Nhc2UiLiI6bj1pPXI7YnJlYWs7Y2FzZSIwIjpuPT09MCYmKG49ciksaT1yO2JyZWFrO2RlZmF1bHQ6aWYoISt0W3JdKWJyZWFrIGU7bj4wJiYobj0wKTticmVha31yZXR1cm4gbj4wP3Quc2xpY2UoMCxuKSt0LnNsaWNlKGkrMSk6dH12YXIgRkg9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKGJfLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBUXyh0LGUpe3ZhciByPW1kKHQsZSk7aWYoIXIpcmV0dXJuIHQrIiI7dmFyIG49clswXSxpPXJbMV0sYT1pLSh3Xz1NYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoaS8zKSkpKjMpKzEscz1uLmxlbmd0aDtyZXR1cm4gYT09PXM/bjphPnM/bituZXcgQXJyYXkoYS1zKzEpLmpvaW4oIjAiKTphPjA/bi5zbGljZSgwLGEpKyIuIituLnNsaWNlKGEpOiIwLiIrbmV3IEFycmF5KDEtYSkuam9pbigiMCIpK21kKHQsTWF0aC5tYXgoMCxlK2EtMSkpWzBdfXZhciB3XyxrXz1OKCgpPT57InVzZSBzdHJpY3QiO2J2KCk7byhUXywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gdTUodCxlKXt2YXIgcj1tZCh0LGUpO2lmKCFyKXJldHVybiB0KyIiO3ZhciBuPXJbMF0saT1yWzFdO3JldHVybiBpPDA/IjAuIituZXcgQXJyYXkoLWkpLmpvaW4oIjAiKStuOm4ubGVuZ3RoPmkrMT9uLnNsaWNlKDAsaSsxKSsiLiIrbi5zbGljZShpKzEpOm4rbmV3IEFycmF5KGktbi5sZW5ndGgrMikuam9pbigiMCIpfXZhciAkSD1OKCgpPT57InVzZSBzdHJpY3QiO2J2KCk7byh1NSwiZGVmYXVsdCIpfSk7dmFyIEVfLHpIPU4oKCk9PnsidXNlIHN0cmljdCI7YnYoKTtrXygpOyRIKCk7RV89eyIlIjpvKCh0LGUpPT4odCoxMDApLnRvRml4ZWQoZSksIiUiKSxiOm8odD0+TWF0aC5yb3VuZCh0KS50b1N0cmluZygyKSwiYiIpLGM6byh0PT50KyIiLCJjIiksZDpnXyxlOm8oKHQsZSk9PnQudG9FeHBvbmVudGlhbChlKSwiZSIpLGY6bygodCxlKT0+dC50b0ZpeGVkKGUpLCJmIiksZzpvKCh0LGUpPT50LnRvUHJlY2lzaW9uKGUpLCJnIiksbzpvKHQ9Pk1hdGgucm91bmQodCkudG9TdHJpbmcoOCksIm8iKSxwOm8oKHQsZSk9PnU1KHQqMTAwLGUpLCJwIikscjp1NSxzOlRfLFg6byh0PT5NYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLCJYIikseDpvKHQ9Pk1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpLCJ4Iil9fSk7ZnVuY3Rpb24gaDUodCl7cmV0dXJuIHR9dmFyIEdIPU4oKCk9PnsidXNlIHN0cmljdCI7byhoNSwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gU18odCl7dmFyIGU9dC5ncm91cGluZz09PXZvaWQgMHx8dC50aG91c2FuZHM9PT12b2lkIDA/aDU6eV8oVkguY2FsbCh0Lmdyb3VwaW5nLE51bWJlciksdC50aG91c2FuZHMrIiIpLHI9dC5jdXJyZW5jeT09PXZvaWQgMD8iIjp0LmN1cnJlbmN5WzBdKyIiLG49dC5jdXJyZW5jeT09PXZvaWQgMD8iIjp0LmN1cnJlbmN5WzFdKyIiLGk9dC5kZWNpbWFsPT09dm9pZCAwPyIuIjp0LmRlY2ltYWwrIiIsYT10Lm51bWVyYWxzPT09dm9pZCAwP2g1OnZfKFZILmNhbGwodC5udW1lcmFscyxTdHJpbmcpKSxzPXQucGVyY2VudD09PXZvaWQgMD8iJSI6dC5wZXJjZW50KyIiLGw9dC5taW51cz09PXZvaWQgMD8iXHUyMjEyIjp0Lm1pbnVzKyIiLHU9dC5uYW49PT12b2lkIDA/Ik5hTiI6dC5uYW4rIiI7ZnVuY3Rpb24gaChkKXtkPUVoKGQpO3ZhciBwPWQuZmlsbCxtPWQuYWxpZ24sZz1kLnNpZ24seT1kLnN5bWJvbCx2PWQuemVybyx4PWQud2lkdGgsYj1kLmNvbW1hLHc9ZC5wcmVjaXNpb24sQz1kLnRyaW0sVD1kLnR5cGU7VD09PSJuIj8oYj0hMCxUPSJnIik6RV9bVF18fCh3PT09dm9pZCAwJiYodz0xMiksQz0hMCxUPSJnIiksKHZ8fHA9PT0iMCImJm09PT0iPSIpJiYodj0hMCxwPSIwIixtPSI9Iik7dmFyIEU9eT09PSIkIj9yOnk9PT0iIyImJi9bYm94WF0vLnRlc3QoVCk/IjAiK1QudG9Mb3dlckNhc2UoKToiIixBPXk9PT0iJCI/bjovWyVwXS8udGVzdChUKT9zOiIiLFM9RV9bVF0sXz0vW2RlZmdwcnMlXS8udGVzdChUKTt3PXc9PT12b2lkIDA/NjovW2dwcnNdLy50ZXN0KFQpP01hdGgubWF4KDEsTWF0aC5taW4oMjEsdykpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAsdykpO2Z1bmN0aW9uIEkoRCl7dmFyIGs9RSxMPUEsUixPLE07aWYoVD09PSJjIilMPVMoRCkrTCxEPSIiO2Vsc2V7RD0rRDt2YXIgQj1EPDB8fDEvRDwwO2lmKEQ9aXNOYU4oRCk/dTpTKE1hdGguYWJzKEQpLHcpLEMmJihEPWJfKEQpKSxCJiYrRD09MCYmZyE9PSIrIiYmKEI9ITEpLGs9KEI/Zz09PSIoIj9nOmw6Zz09PSItInx8Zz09PSIoIj8iIjpnKStrLEw9KFQ9PT0icyI/VUhbOCt3Xy8zXToiIikrTCsoQiYmZz09PSIoIj8iKSI6IiIpLF8pe2ZvcihSPS0xLE89RC5sZW5ndGg7KytSPE87KWlmKE09RC5jaGFyQ29kZUF0KFIpLDQ4Pk18fE0+NTcpe0w9KE09PT00Nj9pK0Quc2xpY2UoUisxKTpELnNsaWNlKFIpKStMLEQ9RC5zbGljZSgwLFIpO2JyZWFrfX19YiYmIXYmJihEPWUoRCwxLzApKTt2YXIgRj1rLmxlbmd0aCtELmxlbmd0aCtMLmxlbmd0aCxQPUY8eD9uZXcgQXJyYXkoeC1GKzEpLmpvaW4ocCk6IiI7c3dpdGNoKGImJnYmJihEPWUoUCtELFAubGVuZ3RoP3gtTC5sZW5ndGg6MS8wKSxQPSIiKSxtKXtjYXNlIjwiOkQ9aytEK0wrUDticmVhaztjYXNlIj0iOkQ9aytQK0QrTDticmVhaztjYXNlIl4iOkQ9UC5zbGljZSgwLEY9UC5sZW5ndGg+PjEpK2srRCtMK1Auc2xpY2UoRik7YnJlYWs7ZGVmYXVsdDpEPVAraytEK0w7YnJlYWt9cmV0dXJuIGEoRCl9cmV0dXJuIG8oSSwiZm9ybWF0IiksSS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBkKyIifSxJfW8oaCwibmV3Rm9ybWF0Iik7ZnVuY3Rpb24gZihkLHApe3ZhciBtPWgoKGQ9RWgoZCksZC50eXBlPSJmIixkKSksZz1NYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IobWwocCkvMykpKSozLHk9TWF0aC5wb3coMTAsLWcpLHY9VUhbOCtnLzNdO3JldHVybiBmdW5jdGlvbih4KXtyZXR1cm4gbSh5KngpK3Z9fXJldHVybiBvKGYsImZvcm1hdFByZWZpeCIpLHtmb3JtYXQ6aCxmb3JtYXRQcmVmaXg6Zn19dmFyIFZILFVILEhIPU4oKCk9PnsidXNlIHN0cmljdCI7d3YoKTtQSCgpO0JIKCk7eF8oKTtGSCgpO3pIKCk7a18oKTtHSCgpO1ZIPUFycmF5LnByb3RvdHlwZS5tYXAsVUg9WyJ5IiwieiIsImEiLCJmIiwicCIsIm4iLCJceEI1IiwibSIsIiIsImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZIl07byhTXywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gQ18odCl7cmV0dXJuIGY1PVNfKHQpLGQ1PWY1LmZvcm1hdCxwNT1mNS5mb3JtYXRQcmVmaXgsZjV9dmFyIGY1LGQ1LHA1LFdIPU4oKCk9PnsidXNlIHN0cmljdCI7SEgoKTtDXyh7dGhvdXNhbmRzOiIsIixncm91cGluZzpbM10sY3VycmVuY3k6WyIkIiwiIl19KTtvKENfLCJkZWZhdWx0TG9jYWxlIil9KTtmdW5jdGlvbiBtNSh0KXtyZXR1cm4gTWF0aC5tYXgoMCwtbWwoTWF0aC5hYnModCkpKX12YXIgcUg9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt3digpO28obTUsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIGc1KHQsZSl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKG1sKGUpLzMpKSkqMy1tbChNYXRoLmFicyh0KSkpfXZhciBZSD1OKCgpPT57InVzZSBzdHJpY3QiO3d2KCk7byhnNSwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24geTUodCxlKXtyZXR1cm4gdD1NYXRoLmFicyh0KSxlPU1hdGguYWJzKGUpLXQsTWF0aC5tYXgoMCxtbChlKS1tbCh0KSkrMX12YXIgWEg9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt3digpO28oeTUsImRlZmF1bHQiKX0pO3ZhciBBXz1OKCgpPT57InVzZSBzdHJpY3QiO1dIKCk7eF8oKTtxSCgpO1lIKCk7WEgoKX0pO3ZhciBqSD1OKCgpPT57InVzZSBzdHJpY3QifSk7dmFyIEtIPU4oKCk9PnsidXNlIHN0cmljdCJ9KTt2YXIgUUg9TigoKT0+eyJ1c2Ugc3RyaWN0In0pO3ZhciBaSD1OKCgpPT57InVzZSBzdHJpY3QifSk7ZnVuY3Rpb24gU2godCxlKXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTp0aGlzLnJhbmdlKHQpO2JyZWFrO2RlZmF1bHQ6dGhpcy5yYW5nZShlKS5kb21haW4odCk7YnJlYWt9cmV0dXJuIHRoaXN9dmFyIFR2PU4oKCk9PnsidXNlIHN0cmljdCI7byhTaCwiaW5pdFJhbmdlIil9KTtmdW5jdGlvbiBndSgpe3ZhciB0PW5ldyBnMCxlPVtdLHI9W10sbj1fXztmdW5jdGlvbiBpKGEpe2xldCBzPXQuZ2V0KGEpO2lmKHM9PT12b2lkIDApe2lmKG4hPT1fXylyZXR1cm4gbjt0LnNldChhLHM9ZS5wdXNoKGEpLTEpfXJldHVybiByW3Mlci5sZW5ndGhdfXJldHVybiBvKGksInNjYWxlIiksaS5kb21haW49ZnVuY3Rpb24oYSl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGUuc2xpY2UoKTtlPVtdLHQ9bmV3IGcwO2ZvcihsZXQgcyBvZiBhKXQuaGFzKHMpfHx0LnNldChzLGUucHVzaChzKS0xKTtyZXR1cm4gaX0saS5yYW5nZT1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1BcnJheS5mcm9tKGEpLGkpOnIuc2xpY2UoKX0saS51bmtub3duPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWEsaSk6bn0saS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGd1KGUscikudW5rbm93bihuKX0sU2guYXBwbHkoaSxhcmd1bWVudHMpLGl9dmFyIF9fLERfPU4oKCk9PnsidXNlIHN0cmljdCI7dmgoKTtUdigpO19fPVN5bWJvbCgiaW1wbGljaXQiKTtvKGd1LCJvcmRpbmFsIil9KTtmdW5jdGlvbiBMMCgpe3ZhciB0PWd1KCkudW5rbm93bih2b2lkIDApLGU9dC5kb21haW4scj10LnJhbmdlLG49MCxpPTEsYSxzLGw9ITEsdT0wLGg9MCxmPS41O2RlbGV0ZSB0LnVua25vd247ZnVuY3Rpb24gZCgpe3ZhciBwPWUoKS5sZW5ndGgsbT1pPG4sZz1tP2k6bix5PW0/bjppO2E9KHktZykvTWF0aC5tYXgoMSxwLXUraCoyKSxsJiYoYT1NYXRoLmZsb29yKGEpKSxnKz0oeS1nLWEqKHAtdSkpKmYscz1hKigxLXUpLGwmJihnPU1hdGgucm91bmQoZykscz1NYXRoLnJvdW5kKHMpKTt2YXIgdj1JMyhwKS5tYXAoZnVuY3Rpb24oeCl7cmV0dXJuIGcrYSp4fSk7cmV0dXJuIHIobT92LnJldmVyc2UoKTp2KX1yZXR1cm4gbyhkLCJyZXNjYWxlIiksdC5kb21haW49ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGUocCksZCgpKTplKCl9LHQucmFuZ2U9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFtuLGldPXAsbj0rbixpPStpLGQoKSk6W24saV19LHQucmFuZ2VSb3VuZD1mdW5jdGlvbihwKXtyZXR1cm5bbixpXT1wLG49K24saT0raSxsPSEwLGQoKX0sdC5iYW5kd2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gc30sdC5zdGVwPWZ1bmN0aW9uKCl7cmV0dXJuIGF9LHQucm91bmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9ISFwLGQoKSk6bH0sdC5wYWRkaW5nPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PU1hdGgubWluKDEsaD0rcCksZCgpKTp1fSx0LnBhZGRpbmdJbm5lcj1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1NYXRoLm1pbigxLHApLGQoKSk6dX0sdC5wYWRkaW5nT3V0ZXI9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9K3AsZCgpKTpofSx0LmFsaWduPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPU1hdGgubWF4KDAsTWF0aC5taW4oMSxwKSksZCgpKTpmfSx0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gTDAoZSgpLFtuLGldKS5yb3VuZChsKS5wYWRkaW5nSW5uZXIodSkucGFkZGluZ091dGVyKGgpLmFsaWduKGYpfSxTaC5hcHBseShkKCksYXJndW1lbnRzKX12YXIgSkg9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt2aCgpO1R2KCk7RF8oKTtvKEwwLCJiYW5kIil9KTtmdW5jdGlvbiBMXyh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19dmFyIGVXPU4oKCk9PnsidXNlIHN0cmljdCI7byhMXywiY29uc3RhbnRzIil9KTtmdW5jdGlvbiBSXyh0KXtyZXR1cm4rdH12YXIgdFc9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKFJfLCJudW1iZXIiKX0pO2Z1bmN0aW9uIFIwKHQpe3JldHVybiB0fWZ1bmN0aW9uIE5fKHQsZSl7cmV0dXJuKGUtPXQ9K3QpP2Z1bmN0aW9uKHIpe3JldHVybihyLXQpL2V9OkxfKGlzTmFOKGUpP05hTjouNSl9ZnVuY3Rpb24gc1RlKHQsZSl7dmFyIHI7cmV0dXJuIHQ+ZSYmKHI9dCx0PWUsZT1yKSxmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5tYXgodCxNYXRoLm1pbihlLG4pKX19ZnVuY3Rpb24gb1RlKHQsZSxyKXt2YXIgbj10WzBdLGk9dFsxXSxhPWVbMF0scz1lWzFdO3JldHVybiBpPG4/KG49Tl8oaSxuKSxhPXIocyxhKSk6KG49Tl8obixpKSxhPXIoYSxzKSksZnVuY3Rpb24obCl7cmV0dXJuIGEobihsKSl9fWZ1bmN0aW9uIGxUZSh0LGUscil7dmFyIG49TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgpLTEsaT1uZXcgQXJyYXkobiksYT1uZXcgQXJyYXkobikscz0tMTtmb3IodFtuXTx0WzBdJiYodD10LnNsaWNlKCkucmV2ZXJzZSgpLGU9ZS5zbGljZSgpLnJldmVyc2UoKSk7KytzPG47KWlbc109Tl8odFtzXSx0W3MrMV0pLGFbc109cihlW3NdLGVbcysxXSk7cmV0dXJuIGZ1bmN0aW9uKGwpe3ZhciB1PW1BKHQsbCwxLG4pLTE7cmV0dXJuIGFbdV0oaVt1XShsKSl9fWZ1bmN0aW9uIHY1KHQsZSl7cmV0dXJuIGUuZG9tYWluKHQuZG9tYWluKCkpLnJhbmdlKHQucmFuZ2UoKSkuaW50ZXJwb2xhdGUodC5pbnRlcnBvbGF0ZSgpKS5jbGFtcCh0LmNsYW1wKCkpLnVua25vd24odC51bmtub3duKCkpfWZ1bmN0aW9uIGNUZSgpe3ZhciB0PXJXLGU9clcscj1raCxuLGksYSxzPVIwLGwsdSxoO2Z1bmN0aW9uIGYoKXt2YXIgcD1NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCk7cmV0dXJuIHMhPT1SMCYmKHM9c1RlKHRbMF0sdFtwLTFdKSksbD1wPjI/bFRlOm9UZSx1PWg9bnVsbCxkfW8oZiwicmVzY2FsZSIpO2Z1bmN0aW9uIGQocCl7cmV0dXJuIHA9PW51bGx8fGlzTmFOKHA9K3ApP2E6KHV8fCh1PWwodC5tYXAobiksZSxyKSkpKG4ocyhwKSkpfXJldHVybiBvKGQsInNjYWxlIiksZC5pbnZlcnQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHMoaSgoaHx8KGg9bChlLHQubWFwKG4pLEtpKSkpKHApKSl9LGQuZG9tYWluPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PUFycmF5LmZyb20ocCxSXyksZigpKTp0LnNsaWNlKCl9LGQucmFuZ2U9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9QXJyYXkuZnJvbShwKSxmKCkpOmUuc2xpY2UoKX0sZC5yYW5nZVJvdW5kPWZ1bmN0aW9uKHApe3JldHVybiBlPUFycmF5LmZyb20ocCkscj1YMyxmKCl9LGQuY2xhbXA9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9cD8hMDpSMCxmKCkpOnMhPT1SMH0sZC5pbnRlcnBvbGF0ZT1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1wLGYoKSk6cn0sZC51bmtub3duPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXAsZCk6YX0sZnVuY3Rpb24ocCxtKXtyZXR1cm4gbj1wLGk9bSxmKCl9fWZ1bmN0aW9uIGt2KCl7cmV0dXJuIGNUZSgpKFIwLFIwKX12YXIgclcsTV89TigoKT0+eyJ1c2Ugc3RyaWN0Ijt2aCgpO0EwKCk7ZVcoKTt0VygpO3JXPVswLDFdO28oUjAsImlkZW50aXR5Iik7byhOXywibm9ybWFsaXplIik7byhzVGUsImNsYW1wZXIiKTtvKG9UZSwiYmltYXAiKTtvKGxUZSwicG9seW1hcCIpO28odjUsImNvcHkiKTtvKGNUZSwidHJhbnNmb3JtZXIiKTtvKGt2LCJjb250aW51b3VzIil9KTtmdW5jdGlvbiBJXyh0LGUscixuKXt2YXIgaT15MCh0LGUsciksYTtzd2l0Y2gobj1FaChuPz8iLGYiKSxuLnR5cGUpe2Nhc2UicyI6e3ZhciBzPU1hdGgubWF4KE1hdGguYWJzKHQpLE1hdGguYWJzKGUpKTtyZXR1cm4gbi5wcmVjaXNpb249PW51bGwmJiFpc05hTihhPWc1KGkscykpJiYobi5wcmVjaXNpb249YSkscDUobixzKX1jYXNlIiI6Y2FzZSJlIjpjYXNlImciOmNhc2UicCI6Y2FzZSJyIjp7bi5wcmVjaXNpb249PW51bGwmJiFpc05hTihhPXk1KGksTWF0aC5tYXgoTWF0aC5hYnModCksTWF0aC5hYnMoZSkpKSkmJihuLnByZWNpc2lvbj1hLShuLnR5cGU9PT0iZSIpKTticmVha31jYXNlImYiOmNhc2UiJSI6e24ucHJlY2lzaW9uPT1udWxsJiYhaXNOYU4oYT1tNShpKSkmJihuLnByZWNpc2lvbj1hLShuLnR5cGU9PT0iJSIpKjIpO2JyZWFrfX1yZXR1cm4gZDUobil9dmFyIG5XPU4oKCk9PnsidXNlIHN0cmljdCI7dmgoKTtBXygpO28oSV8sInRpY2tGb3JtYXQiKX0pO2Z1bmN0aW9uIHVUZSh0KXt2YXIgZT10LmRvbWFpbjtyZXR1cm4gdC50aWNrcz1mdW5jdGlvbihyKXt2YXIgbj1lKCk7cmV0dXJuIFIzKG5bMF0sbltuLmxlbmd0aC0xXSxyPz8xMCl9LHQudGlja0Zvcm1hdD1mdW5jdGlvbihyLG4pe3ZhciBpPWUoKTtyZXR1cm4gSV8oaVswXSxpW2kubGVuZ3RoLTFdLHI/PzEwLG4pfSx0Lm5pY2U9ZnVuY3Rpb24ocil7cj09bnVsbCYmKHI9MTApO3ZhciBuPWUoKSxpPTAsYT1uLmxlbmd0aC0xLHM9bltpXSxsPW5bYV0sdSxoLGY9MTA7Zm9yKGw8cyYmKGg9cyxzPWwsbD1oLGg9aSxpPWEsYT1oKTtmLS0gPjA7KXtpZihoPVp5KHMsbCxyKSxoPT09dSlyZXR1cm4gbltpXT1zLG5bYV09bCxlKG4pO2lmKGg+MClzPU1hdGguZmxvb3Iocy9oKSpoLGw9TWF0aC5jZWlsKGwvaCkqaDtlbHNlIGlmKGg8MClzPU1hdGguY2VpbChzKmgpL2gsbD1NYXRoLmZsb29yKGwqaCkvaDtlbHNlIGJyZWFrO3U9aH1yZXR1cm4gdH0sdH1mdW5jdGlvbiBnbCgpe3ZhciB0PWt2KCk7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiB2NSh0LGdsKCkpfSxTaC5hcHBseSh0LGFyZ3VtZW50cyksdVRlKHQpfXZhciBpVz1OKCgpPT57InVzZSBzdHJpY3QiO3ZoKCk7TV8oKTtUdigpO25XKCk7byh1VGUsImxpbmVhcmlzaCIpO28oZ2wsImxpbmVhciIpfSk7ZnVuY3Rpb24gT18odCxlKXt0PXQuc2xpY2UoKTt2YXIgcj0wLG49dC5sZW5ndGgtMSxpPXRbcl0sYT10W25dLHM7cmV0dXJuIGE8aSYmKHM9cixyPW4sbj1zLHM9aSxpPWEsYT1zKSx0W3JdPWUuZmxvb3IoaSksdFtuXT1lLmNlaWwoYSksdH12YXIgYVc9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKE9fLCJuaWNlIil9KTtmdW5jdGlvbiB4bih0LGUscixuKXtmdW5jdGlvbiBpKGEpe3JldHVybiB0KGE9YXJndW1lbnRzLmxlbmd0aD09PTA/bmV3IERhdGU6bmV3IERhdGUoK2EpKSxhfXJldHVybiBvKGksImludGVydmFsIiksaS5mbG9vcj1hPT4odChhPW5ldyBEYXRlKCthKSksYSksaS5jZWlsPWE9Pih0KGE9bmV3IERhdGUoYS0xKSksZShhLDEpLHQoYSksYSksaS5yb3VuZD1hPT57bGV0IHM9aShhKSxsPWkuY2VpbChhKTtyZXR1cm4gYS1zPGwtYT9zOmx9LGkub2Zmc2V0PShhLHMpPT4oZShhPW5ldyBEYXRlKCthKSxzPT1udWxsPzE6TWF0aC5mbG9vcihzKSksYSksaS5yYW5nZT0oYSxzLGwpPT57bGV0IHU9W107aWYoYT1pLmNlaWwoYSksbD1sPT1udWxsPzE6TWF0aC5mbG9vcihsKSwhKGE8cyl8fCEobD4wKSlyZXR1cm4gdTtsZXQgaDtkbyB1LnB1c2goaD1uZXcgRGF0ZSgrYSkpLGUoYSxsKSx0KGEpO3doaWxlKGg8YSYmYTxzKTtyZXR1cm4gdX0saS5maWx0ZXI9YT0+eG4ocz0+e2lmKHM+PXMpZm9yKDt0KHMpLCFhKHMpOylzLnNldFRpbWUocy0xKX0sKHMsbCk9PntpZihzPj1zKWlmKGw8MClmb3IoOysrbDw9MDspZm9yKDtlKHMsLTEpLCFhKHMpOyk7ZWxzZSBmb3IoOy0tbD49MDspZm9yKDtlKHMsMSksIWEocyk7KTt9KSxyJiYoaS5jb3VudD0oYSxzKT0+KFBfLnNldFRpbWUoK2EpLEJfLnNldFRpbWUoK3MpLHQoUF8pLHQoQl8pLE1hdGguZmxvb3IocihQXyxCXykpKSxpLmV2ZXJ5PWE9PihhPU1hdGguZmxvb3IoYSksIWlzRmluaXRlKGEpfHwhKGE+MCk/bnVsbDphPjE/aS5maWx0ZXIobj9zPT5uKHMpJWE9PT0wOnM9PmkuY291bnQoMCxzKSVhPT09MCk6aSkpLGl9dmFyIFBfLEJfLHl1PU4oKCk9PnsidXNlIHN0cmljdCI7UF89bmV3IERhdGUsQl89bmV3IERhdGU7byh4biwidGltZUludGVydmFsIil9KTt2YXIgYWMsc1csRl89TigoKT0+eyJ1c2Ugc3RyaWN0Ijt5dSgpO2FjPXhuKCgpPT57fSwodCxlKT0+e3Quc2V0VGltZSgrdCtlKX0sKHQsZSk9PmUtdCk7YWMuZXZlcnk9dD0+KHQ9TWF0aC5mbG9vcih0KSwhaXNGaW5pdGUodCl8fCEodD4wKT9udWxsOnQ+MT94bihlPT57ZS5zZXRUaW1lKE1hdGguZmxvb3IoZS90KSp0KX0sKGUscik9PntlLnNldFRpbWUoK2Urcip0KX0sKGUscik9PihyLWUpL3QpOmFjKTtzVz1hYy5yYW5nZX0pO3ZhciBLcyxvVywkXz1OKCgpPT57InVzZSBzdHJpY3QiO3l1KCk7S3M9eG4odD0+e3Quc2V0VGltZSh0LXQuZ2V0TWlsbGlzZWNvbmRzKCkpfSwodCxlKT0+e3Quc2V0VGltZSgrdCtlKjFlMyl9LCh0LGUpPT4oZS10KS8xZTMsdD0+dC5nZXRVVENTZWNvbmRzKCkpLG9XPUtzLnJhbmdlfSk7dmFyIHZ1LGhUZSx4NSxmVGUsel89TigoKT0+eyJ1c2Ugc3RyaWN0Ijt5dSgpO3Z1PXhuKHQ9Pnt0LnNldFRpbWUodC10LmdldE1pbGxpc2Vjb25kcygpLXQuZ2V0U2Vjb25kcygpKjFlMyl9LCh0LGUpPT57dC5zZXRUaW1lKCt0K2UqNmU0KX0sKHQsZSk9PihlLXQpLzZlNCx0PT50LmdldE1pbnV0ZXMoKSksaFRlPXZ1LnJhbmdlLHg1PXhuKHQ9Pnt0LnNldFVUQ1NlY29uZHMoMCwwKX0sKHQsZSk9Pnt0LnNldFRpbWUoK3QrZSo2ZTQpfSwodCxlKT0+KGUtdCkvNmU0LHQ9PnQuZ2V0VVRDTWludXRlcygpKSxmVGU9eDUucmFuZ2V9KTt2YXIgeHUsZFRlLGI1LHBUZSxHXz1OKCgpPT57InVzZSBzdHJpY3QiO3l1KCk7eHU9eG4odD0+e3Quc2V0VGltZSh0LXQuZ2V0TWlsbGlzZWNvbmRzKCktdC5nZXRTZWNvbmRzKCkqMWUzLXQuZ2V0TWludXRlcygpKjZlNCl9LCh0LGUpPT57dC5zZXRUaW1lKCt0K2UqMzZlNSl9LCh0LGUpPT4oZS10KS8zNmU1LHQ9PnQuZ2V0SG91cnMoKSksZFRlPXh1LnJhbmdlLGI1PXhuKHQ9Pnt0LnNldFVUQ01pbnV0ZXMoMCwwLDApfSwodCxlKT0+e3Quc2V0VGltZSgrdCtlKjM2ZTUpfSwodCxlKT0+KGUtdCkvMzZlNSx0PT50LmdldFVUQ0hvdXJzKCkpLHBUZT1iNS5yYW5nZX0pO3ZhciBfbyxtVGUsU3YsZ1RlLHc1LHlUZSxWXz1OKCgpPT57InVzZSBzdHJpY3QiO3l1KCk7X289eG4odD0+dC5zZXRIb3VycygwLDAsMCwwKSwodCxlKT0+dC5zZXREYXRlKHQuZ2V0RGF0ZSgpK2UpLCh0LGUpPT4oZS10LShlLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSo2ZTQpLzg2NGU1LHQ9PnQuZ2V0RGF0ZSgpLTEpLG1UZT1fby5yYW5nZSxTdj14bih0PT57dC5zZXRVVENIb3VycygwLDAsMCwwKX0sKHQsZSk9Pnt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCkrZSl9LCh0LGUpPT4oZS10KS84NjRlNSx0PT50LmdldFVUQ0RhdGUoKS0xKSxnVGU9U3YucmFuZ2UsdzU9eG4odD0+e3Quc2V0VVRDSG91cnMoMCwwLDAsMCl9LCh0LGUpPT57dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK2UpfSwodCxlKT0+KGUtdCkvODY0ZTUsdD0+TWF0aC5mbG9vcih0Lzg2NGU1KSkseVRlPXc1LnJhbmdlfSk7ZnVuY3Rpb24gdmQodCl7cmV0dXJuIHhuKGU9PntlLnNldERhdGUoZS5nZXREYXRlKCktKGUuZ2V0RGF5KCkrNy10KSU3KSxlLnNldEhvdXJzKDAsMCwwLDApfSwoZSxyKT0+e2Uuc2V0RGF0ZShlLmdldERhdGUoKStyKjcpfSwoZSxyKT0+KHItZS0oci5nZXRUaW1lem9uZU9mZnNldCgpLWUuZ2V0VGltZXpvbmVPZmZzZXQoKSkqNmU0KS82MDQ4ZTUpfWZ1bmN0aW9uIHhkKHQpe3JldHVybiB4bihlPT57ZS5zZXRVVENEYXRlKGUuZ2V0VVRDRGF0ZSgpLShlLmdldFVUQ0RheSgpKzctdCklNyksZS5zZXRVVENIb3VycygwLDAsMCwwKX0sKGUscik9PntlLnNldFVUQ0RhdGUoZS5nZXRVVENEYXRlKCkrcio3KX0sKGUscik9PihyLWUpLzYwNDhlNSl9dmFyIHlsLENoLFQ1LGs1LG9jLEU1LFM1LGNXLHZUZSx4VGUsYlRlLHdUZSxUVGUsa1RlLGJkLE4wLHVXLGhXLEFoLGZXLGRXLHBXLEVUZSxTVGUsQ1RlLEFUZSxfVGUsRFRlLFVfPU4oKCk9PnsidXNlIHN0cmljdCI7eXUoKTtvKHZkLCJ0aW1lV2Vla2RheSIpO3lsPXZkKDApLENoPXZkKDEpLFQ1PXZkKDIpLGs1PXZkKDMpLG9jPXZkKDQpLEU1PXZkKDUpLFM1PXZkKDYpLGNXPXlsLnJhbmdlLHZUZT1DaC5yYW5nZSx4VGU9VDUucmFuZ2UsYlRlPWs1LnJhbmdlLHdUZT1vYy5yYW5nZSxUVGU9RTUucmFuZ2Usa1RlPVM1LnJhbmdlO28oeGQsInV0Y1dlZWtkYXkiKTtiZD14ZCgwKSxOMD14ZCgxKSx1Vz14ZCgyKSxoVz14ZCgzKSxBaD14ZCg0KSxmVz14ZCg1KSxkVz14ZCg2KSxwVz1iZC5yYW5nZSxFVGU9TjAucmFuZ2UsU1RlPXVXLnJhbmdlLENUZT1oVy5yYW5nZSxBVGU9QWgucmFuZ2UsX1RlPWZXLnJhbmdlLERUZT1kVy5yYW5nZX0pO3ZhciBidSxMVGUsQzUsUlRlLEhfPU4oKCk9PnsidXNlIHN0cmljdCI7eXUoKTtidT14bih0PT57dC5zZXREYXRlKDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9LCh0LGUpPT57dC5zZXRNb250aCh0LmdldE1vbnRoKCkrZSl9LCh0LGUpPT5lLmdldE1vbnRoKCktdC5nZXRNb250aCgpKyhlLmdldEZ1bGxZZWFyKCktdC5nZXRGdWxsWWVhcigpKSoxMix0PT50LmdldE1vbnRoKCkpLExUZT1idS5yYW5nZSxDNT14bih0PT57dC5zZXRVVENEYXRlKDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LCh0LGUpPT57dC5zZXRVVENNb250aCh0LmdldFVUQ01vbnRoKCkrZSl9LCh0LGUpPT5lLmdldFVUQ01vbnRoKCktdC5nZXRVVENNb250aCgpKyhlLmdldFVUQ0Z1bGxZZWFyKCktdC5nZXRVVENGdWxsWWVhcigpKSoxMix0PT50LmdldFVUQ01vbnRoKCkpLFJUZT1DNS5yYW5nZX0pO3ZhciBRcyxOVGUsdmwsTVRlLFdfPU4oKCk9PnsidXNlIHN0cmljdCI7eXUoKTtRcz14bih0PT57dC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9LCh0LGUpPT57dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrZSl9LCh0LGUpPT5lLmdldEZ1bGxZZWFyKCktdC5nZXRGdWxsWWVhcigpLHQ9PnQuZ2V0RnVsbFllYXIoKSk7UXMuZXZlcnk9dD0+IWlzRmluaXRlKHQ9TWF0aC5mbG9vcih0KSl8fCEodD4wKT9udWxsOnhuKGU9PntlLnNldEZ1bGxZZWFyKE1hdGguZmxvb3IoZS5nZXRGdWxsWWVhcigpL3QpKnQpLGUuc2V0TW9udGgoMCwxKSxlLnNldEhvdXJzKDAsMCwwLDApfSwoZSxyKT0+e2Uuc2V0RnVsbFllYXIoZS5nZXRGdWxsWWVhcigpK3IqdCl9KTtOVGU9UXMucmFuZ2Usdmw9eG4odD0+e3Quc2V0VVRDTW9udGgoMCwxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSwodCxlKT0+e3Quc2V0VVRDRnVsbFllYXIodC5nZXRVVENGdWxsWWVhcigpK2UpfSwodCxlKT0+ZS5nZXRVVENGdWxsWWVhcigpLXQuZ2V0VVRDRnVsbFllYXIoKSx0PT50LmdldFVUQ0Z1bGxZZWFyKCkpO3ZsLmV2ZXJ5PXQ9PiFpc0Zpbml0ZSh0PU1hdGguZmxvb3IodCkpfHwhKHQ+MCk/bnVsbDp4bihlPT57ZS5zZXRVVENGdWxsWWVhcihNYXRoLmZsb29yKGUuZ2V0VVRDRnVsbFllYXIoKS90KSp0KSxlLnNldFVUQ01vbnRoKDAsMSksZS5zZXRVVENIb3VycygwLDAsMCwwKX0sKGUscik9PntlLnNldFVUQ0Z1bGxZZWFyKGUuZ2V0VVRDRnVsbFllYXIoKStyKnQpfSk7TVRlPXZsLnJhbmdlfSk7ZnVuY3Rpb24gZ1codCxlLHIsbixpLGEpe2xldCBzPVtbS3MsMSwxZTNdLFtLcyw1LDUqMWUzXSxbS3MsMTUsMTUqMWUzXSxbS3MsMzAsMzAqMWUzXSxbYSwxLDZlNF0sW2EsNSw1KjZlNF0sW2EsMTUsMTUqNmU0XSxbYSwzMCwzMCo2ZTRdLFtpLDEsMzZlNV0sW2ksMywzKjM2ZTVdLFtpLDYsNiozNmU1XSxbaSwxMiwxMiozNmU1XSxbbiwxLDg2NGU1XSxbbiwyLDIqODY0ZTVdLFtyLDEsNjA0OGU1XSxbZSwxLDI1OTJlNl0sW2UsMywzKjI1OTJlNl0sW3QsMSwzMTUzNmU2XV07ZnVuY3Rpb24gbChoLGYsZCl7bGV0IHA9ZjxoO3AmJihbaCxmXT1bZixoXSk7bGV0IG09ZCYmdHlwZW9mIGQucmFuZ2U9PSJmdW5jdGlvbiI/ZDp1KGgsZixkKSxnPW0/bS5yYW5nZShoLCtmKzEpOltdO3JldHVybiBwP2cucmV2ZXJzZSgpOmd9byhsLCJ0aWNrcyIpO2Z1bmN0aW9uIHUoaCxmLGQpe2xldCBwPU1hdGguYWJzKGYtaCkvZCxtPW9kKChbLCx2XSk9PnYpLnJpZ2h0KHMscCk7aWYobT09PXMubGVuZ3RoKXJldHVybiB0LmV2ZXJ5KHkwKGgvMzE1MzZlNixmLzMxNTM2ZTYsZCkpO2lmKG09PT0wKXJldHVybiBhYy5ldmVyeShNYXRoLm1heCh5MChoLGYsZCksMSkpO2xldFtnLHldPXNbcC9zW20tMV1bMl08c1ttXVsyXS9wP20tMTptXTtyZXR1cm4gZy5ldmVyeSh5KX1yZXR1cm4gbyh1LCJ0aWNrSW50ZXJ2YWwiKSxbbCx1XX12YXIgT1RlLFBUZSxxXyxZXyx5Vz1OKCgpPT57InVzZSBzdHJpY3QiO3ZoKCk7Rl8oKTskXygpO3pfKCk7R18oKTtWXygpO1VfKCk7SF8oKTtXXygpO28oZ1csInRpY2tlciIpO1tPVGUsUFRlXT1nVyh2bCxDNSxiZCx3NSxiNSx4NSksW3FfLFlfXT1nVyhRcyxidSx5bCxfbyx4dSx2dSl9KTt2YXIgQTU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGXygpOyRfKCk7el8oKTtHXygpO1ZfKCk7VV8oKTtIXygpO1dfKCk7eVcoKX0pO2Z1bmN0aW9uIFhfKHQpe2lmKDA8PXQueSYmdC55PDEwMCl7dmFyIGU9bmV3IERhdGUoLTEsdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpO3JldHVybiBlLnNldEZ1bGxZZWFyKHQueSksZX1yZXR1cm4gbmV3IERhdGUodC55LHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKX1mdW5jdGlvbiBqXyh0KXtpZigwPD10LnkmJnQueTwxMDApe3ZhciBlPW5ldyBEYXRlKERhdGUuVVRDKC0xLHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKSk7cmV0dXJuIGUuc2V0VVRDRnVsbFllYXIodC55KSxlfXJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyh0LnksdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpKX1mdW5jdGlvbiBDdih0LGUscil7cmV0dXJue3k6dCxtOmUsZDpyLEg6MCxNOjAsUzowLEw6MH19ZnVuY3Rpb24gS18odCl7dmFyIGU9dC5kYXRlVGltZSxyPXQuZGF0ZSxuPXQudGltZSxpPXQucGVyaW9kcyxhPXQuZGF5cyxzPXQuc2hvcnREYXlzLGw9dC5tb250aHMsdT10LnNob3J0TW9udGhzLGg9QXYoaSksZj1fdihpKSxkPUF2KGEpLHA9X3YoYSksbT1BdihzKSxnPV92KHMpLHk9QXYobCksdj1fdihsKSx4PUF2KHUpLGI9X3YodSksdz17YTpCLEE6RixiOlAsQjp6LGM6bnVsbCxkOmtXLGU6a1csZjpha2UsZzpta2UsRzp5a2UsSDpya2UsSTpua2Usajppa2UsTDpfVyxtOnNrZSxNOm9rZSxwOiQscTpILFE6Q1csczpBVyxTOmxrZSx1OmNrZSxVOnVrZSxWOmhrZSx3OmZrZSxXOmRrZSx4Om51bGwsWDpudWxsLHk6cGtlLFk6Z2tlLFo6dmtlLCIlIjpTV30sQz17YTpRLEE6aixiOmllLEI6bmUsYzpudWxsLGQ6RVcsZTpFVyxmOlRrZSxnOk5rZSxHOklrZSxIOnhrZSxJOmJrZSxqOndrZSxMOkxXLG06a2tlLE06RWtlLHA6bGUscTpoZSxROkNXLHM6QVcsUzpTa2UsdTpDa2UsVTpBa2UsVjpfa2UsdzpEa2UsVzpMa2UseDpudWxsLFg6bnVsbCx5OlJrZSxZOk1rZSxaOk9rZSwiJSI6U1d9LFQ9e2E6SSxBOkQsYjprLEI6TCxjOlIsZDp3VyxlOndXLGY6WlRlLGc6YlcsRzp4VyxIOlRXLEk6VFcsajpYVGUsTDpRVGUsbTpZVGUsTTpqVGUscDpfLHE6cVRlLFE6ZWtlLHM6dGtlLFM6S1RlLHU6R1RlLFU6VlRlLFY6VVRlLHc6elRlLFc6SFRlLHg6TyxYOk0seTpiVyxZOnhXLFo6V1RlLCIlIjpKVGV9O3cueD1FKHIsdyksdy5YPUUobix3KSx3LmM9RShlLHcpLEMueD1FKHIsQyksQy5YPUUobixDKSxDLmM9RShlLEMpO2Z1bmN0aW9uIEUoSyxYKXtyZXR1cm4gZnVuY3Rpb24odGUpe3ZhciBKPVtdLHNlPS0xLHVlPTAsWj1LLmxlbmd0aCxTZSxjZSxhZTtmb3IodGUgaW5zdGFuY2VvZiBEYXRlfHwodGU9bmV3IERhdGUoK3RlKSk7KytzZTxaOylLLmNoYXJDb2RlQXQoc2UpPT09MzcmJihKLnB1c2goSy5zbGljZSh1ZSxzZSkpLChjZT12V1tTZT1LLmNoYXJBdCgrK3NlKV0pIT1udWxsP1NlPUsuY2hhckF0KCsrc2UpOmNlPVNlPT09ImUiPyIgIjoiMCIsKGFlPVhbU2VdKSYmKFNlPWFlKHRlLGNlKSksSi5wdXNoKFNlKSx1ZT1zZSsxKTtyZXR1cm4gSi5wdXNoKEsuc2xpY2UodWUsc2UpKSxKLmpvaW4oIiIpfX1vKEUsIm5ld0Zvcm1hdCIpO2Z1bmN0aW9uIEEoSyxYKXtyZXR1cm4gZnVuY3Rpb24odGUpe3ZhciBKPUN2KDE5MDAsdm9pZCAwLDEpLHNlPVMoSixLLHRlKz0iIiwwKSx1ZSxaO2lmKHNlIT10ZS5sZW5ndGgpcmV0dXJuIG51bGw7aWYoIlEiaW4gSilyZXR1cm4gbmV3IERhdGUoSi5RKTtpZigicyJpbiBKKXJldHVybiBuZXcgRGF0ZShKLnMqMWUzKygiTCJpbiBKP0ouTDowKSk7aWYoWCYmISgiWiJpbiBKKSYmKEouWj0wKSwicCJpbiBKJiYoSi5IPUouSCUxMitKLnAqMTIpLEoubT09PXZvaWQgMCYmKEoubT0icSJpbiBKP0oucTowKSwiViJpbiBKKXtpZihKLlY8MXx8Si5WPjUzKXJldHVybiBudWxsOyJ3ImluIEp8fChKLnc9MSksIloiaW4gSj8odWU9al8oQ3YoSi55LDAsMSkpLFo9dWUuZ2V0VVRDRGF5KCksdWU9Wj40fHxaPT09MD9OMC5jZWlsKHVlKTpOMCh1ZSksdWU9U3Yub2Zmc2V0KHVlLChKLlYtMSkqNyksSi55PXVlLmdldFVUQ0Z1bGxZZWFyKCksSi5tPXVlLmdldFVUQ01vbnRoKCksSi5kPXVlLmdldFVUQ0RhdGUoKSsoSi53KzYpJTcpOih1ZT1YXyhDdihKLnksMCwxKSksWj11ZS5nZXREYXkoKSx1ZT1aPjR8fFo9PT0wP0NoLmNlaWwodWUpOkNoKHVlKSx1ZT1fby5vZmZzZXQodWUsKEouVi0xKSo3KSxKLnk9dWUuZ2V0RnVsbFllYXIoKSxKLm09dWUuZ2V0TW9udGgoKSxKLmQ9dWUuZ2V0RGF0ZSgpKyhKLncrNiklNyl9ZWxzZSgiVyJpbiBKfHwiVSJpbiBKKSYmKCJ3ImluIEp8fChKLnc9InUiaW4gSj9KLnUlNzoiVyJpbiBKPzE6MCksWj0iWiJpbiBKP2pfKEN2KEoueSwwLDEpKS5nZXRVVENEYXkoKTpYXyhDdihKLnksMCwxKSkuZ2V0RGF5KCksSi5tPTAsSi5kPSJXImluIEo/KEoudys2KSU3K0ouVyo3LShaKzUpJTc6Si53K0ouVSo3LShaKzYpJTcpO3JldHVybiJaImluIEo/KEouSCs9Si5aLzEwMHwwLEouTSs9Si5aJTEwMCxqXyhKKSk6WF8oSil9fW8oQSwibmV3UGFyc2UiKTtmdW5jdGlvbiBTKEssWCx0ZSxKKXtmb3IodmFyIHNlPTAsdWU9WC5sZW5ndGgsWj10ZS5sZW5ndGgsU2UsY2U7c2U8dWU7KXtpZihKPj1aKXJldHVybi0xO2lmKFNlPVguY2hhckNvZGVBdChzZSsrKSxTZT09PTM3KXtpZihTZT1YLmNoYXJBdChzZSsrKSxjZT1UW1NlIGluIHZXP1guY2hhckF0KHNlKyspOlNlXSwhY2V8fChKPWNlKEssdGUsSikpPDApcmV0dXJuLTF9ZWxzZSBpZihTZSE9dGUuY2hhckNvZGVBdChKKyspKXJldHVybi0xfXJldHVybiBKfW8oUywicGFyc2VTcGVjaWZpZXIiKTtmdW5jdGlvbiBfKEssWCx0ZSl7dmFyIEo9aC5leGVjKFguc2xpY2UodGUpKTtyZXR1cm4gSj8oSy5wPWYuZ2V0KEpbMF0udG9Mb3dlckNhc2UoKSksdGUrSlswXS5sZW5ndGgpOi0xfW8oXywicGFyc2VQZXJpb2QiKTtmdW5jdGlvbiBJKEssWCx0ZSl7dmFyIEo9bS5leGVjKFguc2xpY2UodGUpKTtyZXR1cm4gSj8oSy53PWcuZ2V0KEpbMF0udG9Mb3dlckNhc2UoKSksdGUrSlswXS5sZW5ndGgpOi0xfW8oSSwicGFyc2VTaG9ydFdlZWtkYXkiKTtmdW5jdGlvbiBEKEssWCx0ZSl7dmFyIEo9ZC5leGVjKFguc2xpY2UodGUpKTtyZXR1cm4gSj8oSy53PXAuZ2V0KEpbMF0udG9Mb3dlckNhc2UoKSksdGUrSlswXS5sZW5ndGgpOi0xfW8oRCwicGFyc2VXZWVrZGF5Iik7ZnVuY3Rpb24gayhLLFgsdGUpe3ZhciBKPXguZXhlYyhYLnNsaWNlKHRlKSk7cmV0dXJuIEo/KEsubT1iLmdldChKWzBdLnRvTG93ZXJDYXNlKCkpLHRlK0pbMF0ubGVuZ3RoKTotMX1vKGssInBhcnNlU2hvcnRNb250aCIpO2Z1bmN0aW9uIEwoSyxYLHRlKXt2YXIgSj15LmV4ZWMoWC5zbGljZSh0ZSkpO3JldHVybiBKPyhLLm09di5nZXQoSlswXS50b0xvd2VyQ2FzZSgpKSx0ZStKWzBdLmxlbmd0aCk6LTF9byhMLCJwYXJzZU1vbnRoIik7ZnVuY3Rpb24gUihLLFgsdGUpe3JldHVybiBTKEssZSxYLHRlKX1vKFIsInBhcnNlTG9jYWxlRGF0ZVRpbWUiKTtmdW5jdGlvbiBPKEssWCx0ZSl7cmV0dXJuIFMoSyxyLFgsdGUpfW8oTywicGFyc2VMb2NhbGVEYXRlIik7ZnVuY3Rpb24gTShLLFgsdGUpe3JldHVybiBTKEssbixYLHRlKX1vKE0sInBhcnNlTG9jYWxlVGltZSIpO2Z1bmN0aW9uIEIoSyl7cmV0dXJuIHNbSy5nZXREYXkoKV19byhCLCJmb3JtYXRTaG9ydFdlZWtkYXkiKTtmdW5jdGlvbiBGKEspe3JldHVybiBhW0suZ2V0RGF5KCldfW8oRiwiZm9ybWF0V2Vla2RheSIpO2Z1bmN0aW9uIFAoSyl7cmV0dXJuIHVbSy5nZXRNb250aCgpXX1vKFAsImZvcm1hdFNob3J0TW9udGgiKTtmdW5jdGlvbiB6KEspe3JldHVybiBsW0suZ2V0TW9udGgoKV19byh6LCJmb3JtYXRNb250aCIpO2Z1bmN0aW9uICQoSyl7cmV0dXJuIGlbKyhLLmdldEhvdXJzKCk+PTEyKV19bygkLCJmb3JtYXRQZXJpb2QiKTtmdW5jdGlvbiBIKEspe3JldHVybiAxK35+KEsuZ2V0TW9udGgoKS8zKX1vKEgsImZvcm1hdFF1YXJ0ZXIiKTtmdW5jdGlvbiBRKEspe3JldHVybiBzW0suZ2V0VVRDRGF5KCldfW8oUSwiZm9ybWF0VVRDU2hvcnRXZWVrZGF5Iik7ZnVuY3Rpb24gaihLKXtyZXR1cm4gYVtLLmdldFVUQ0RheSgpXX1vKGosImZvcm1hdFVUQ1dlZWtkYXkiKTtmdW5jdGlvbiBpZShLKXtyZXR1cm4gdVtLLmdldFVUQ01vbnRoKCldfW8oaWUsImZvcm1hdFVUQ1Nob3J0TW9udGgiKTtmdW5jdGlvbiBuZShLKXtyZXR1cm4gbFtLLmdldFVUQ01vbnRoKCldfW8obmUsImZvcm1hdFVUQ01vbnRoIik7ZnVuY3Rpb24gbGUoSyl7cmV0dXJuIGlbKyhLLmdldFVUQ0hvdXJzKCk+PTEyKV19byhsZSwiZm9ybWF0VVRDUGVyaW9kIik7ZnVuY3Rpb24gaGUoSyl7cmV0dXJuIDErfn4oSy5nZXRVVENNb250aCgpLzMpfXJldHVybiBvKGhlLCJmb3JtYXRVVENRdWFydGVyIikse2Zvcm1hdDpvKGZ1bmN0aW9uKEspe3ZhciBYPUUoSys9IiIsdyk7cmV0dXJuIFgudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gS30sWH0sImZvcm1hdCIpLHBhcnNlOm8oZnVuY3Rpb24oSyl7dmFyIFg9QShLKz0iIiwhMSk7cmV0dXJuIFgudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gS30sWH0sInBhcnNlIiksdXRjRm9ybWF0Om8oZnVuY3Rpb24oSyl7dmFyIFg9RShLKz0iIixDKTtyZXR1cm4gWC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBLfSxYfSwidXRjRm9ybWF0IiksdXRjUGFyc2U6byhmdW5jdGlvbihLKXt2YXIgWD1BKEsrPSIiLCEwKTtyZXR1cm4gWC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBLfSxYfSwidXRjUGFyc2UiKX19ZnVuY3Rpb24gV3IodCxlLHIpe3ZhciBuPXQ8MD8iLSI6IiIsaT0obj8tdDp0KSsiIixhPWkubGVuZ3RoO3JldHVybiBuKyhhPHI/bmV3IEFycmF5KHItYSsxKS5qb2luKGUpK2k6aSl9ZnVuY3Rpb24gJFRlKHQpe3JldHVybiB0LnJlcGxhY2UoRlRlLCJcXCQmIil9ZnVuY3Rpb24gQXYodCl7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK3QubWFwKCRUZSkuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIF92KHQpe3JldHVybiBuZXcgTWFwKHQubWFwKChlLHIpPT5bZS50b0xvd2VyQ2FzZSgpLHJdKSl9ZnVuY3Rpb24gelRlKHQsZSxyKXt2YXIgbj1RaS5leGVjKGUuc2xpY2UocixyKzEpKTtyZXR1cm4gbj8odC53PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEdUZSh0LGUscil7dmFyIG49UWkuZXhlYyhlLnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KHQudT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBWVGUodCxlLHIpe3ZhciBuPVFpLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0LlU9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gVVRlKHQsZSxyKXt2YXIgbj1RaS5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5WPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEhUZSh0LGUscil7dmFyIG49UWkuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KHQuVz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB4Vyh0LGUscil7dmFyIG49UWkuZXhlYyhlLnNsaWNlKHIscis0KSk7cmV0dXJuIG4/KHQueT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBiVyh0LGUscil7dmFyIG49UWkuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KHQueT0rblswXSsoK25bMF0+Njg/MTkwMDoyZTMpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFdUZSh0LGUscil7dmFyIG49L14oWil8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8vLmV4ZWMoZS5zbGljZShyLHIrNikpO3JldHVybiBuPyh0Llo9blsxXT8wOi0oblsyXSsoblszXXx8IjAwIikpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHFUZSh0LGUscil7dmFyIG49UWkuZXhlYyhlLnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KHQucT1uWzBdKjMtMyxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBZVGUodCxlLHIpe3ZhciBuPVFpLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0Lm09blswXS0xLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHdXKHQsZSxyKXt2YXIgbj1RaS5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5kPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFhUZSh0LGUscil7dmFyIG49UWkuZXhlYyhlLnNsaWNlKHIsciszKSk7cmV0dXJuIG4/KHQubT0wLHQuZD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBUVyh0LGUscil7dmFyIG49UWkuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KHQuSD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBqVGUodCxlLHIpe3ZhciBuPVFpLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0Lk09K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gS1RlKHQsZSxyKXt2YXIgbj1RaS5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5TPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFFUZSh0LGUscil7dmFyIG49UWkuZXhlYyhlLnNsaWNlKHIsciszKSk7cmV0dXJuIG4/KHQuTD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBaVGUodCxlLHIpe3ZhciBuPVFpLmV4ZWMoZS5zbGljZShyLHIrNikpO3JldHVybiBuPyh0Lkw9TWF0aC5mbG9vcihuWzBdLzFlMykscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gSlRlKHQsZSxyKXt2YXIgbj1CVGUuZXhlYyhlLnNsaWNlKHIscisxKSk7cmV0dXJuIG4/cituWzBdLmxlbmd0aDotMX1mdW5jdGlvbiBla2UodCxlLHIpe3ZhciBuPVFpLmV4ZWMoZS5zbGljZShyKSk7cmV0dXJuIG4/KHQuUT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB0a2UodCxlLHIpe3ZhciBuPVFpLmV4ZWMoZS5zbGljZShyKSk7cmV0dXJuIG4/KHQucz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBrVyh0LGUpe3JldHVybiBXcih0LmdldERhdGUoKSxlLDIpfWZ1bmN0aW9uIHJrZSh0LGUpe3JldHVybiBXcih0LmdldEhvdXJzKCksZSwyKX1mdW5jdGlvbiBua2UodCxlKXtyZXR1cm4gV3IodC5nZXRIb3VycygpJTEyfHwxMixlLDIpfWZ1bmN0aW9uIGlrZSh0LGUpe3JldHVybiBXcigxK19vLmNvdW50KFFzKHQpLHQpLGUsMyl9ZnVuY3Rpb24gX1codCxlKXtyZXR1cm4gV3IodC5nZXRNaWxsaXNlY29uZHMoKSxlLDMpfWZ1bmN0aW9uIGFrZSh0LGUpe3JldHVybiBfVyh0LGUpKyIwMDAifWZ1bmN0aW9uIHNrZSh0LGUpe3JldHVybiBXcih0LmdldE1vbnRoKCkrMSxlLDIpfWZ1bmN0aW9uIG9rZSh0LGUpe3JldHVybiBXcih0LmdldE1pbnV0ZXMoKSxlLDIpfWZ1bmN0aW9uIGxrZSh0LGUpe3JldHVybiBXcih0LmdldFNlY29uZHMoKSxlLDIpfWZ1bmN0aW9uIGNrZSh0KXt2YXIgZT10LmdldERheSgpO3JldHVybiBlPT09MD83OmV9ZnVuY3Rpb24gdWtlKHQsZSl7cmV0dXJuIFdyKHlsLmNvdW50KFFzKHQpLTEsdCksZSwyKX1mdW5jdGlvbiBEVyh0KXt2YXIgZT10LmdldERheSgpO3JldHVybiBlPj00fHxlPT09MD9vYyh0KTpvYy5jZWlsKHQpfWZ1bmN0aW9uIGhrZSh0LGUpe3JldHVybiB0PURXKHQpLFdyKG9jLmNvdW50KFFzKHQpLHQpKyhRcyh0KS5nZXREYXkoKT09PTQpLGUsMil9ZnVuY3Rpb24gZmtlKHQpe3JldHVybiB0LmdldERheSgpfWZ1bmN0aW9uIGRrZSh0LGUpe3JldHVybiBXcihDaC5jb3VudChRcyh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gcGtlKHQsZSl7cmV0dXJuIFdyKHQuZ2V0RnVsbFllYXIoKSUxMDAsZSwyKX1mdW5jdGlvbiBta2UodCxlKXtyZXR1cm4gdD1EVyh0KSxXcih0LmdldEZ1bGxZZWFyKCklMTAwLGUsMil9ZnVuY3Rpb24gZ2tlKHQsZSl7cmV0dXJuIFdyKHQuZ2V0RnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiB5a2UodCxlKXt2YXIgcj10LmdldERheSgpO3JldHVybiB0PXI+PTR8fHI9PT0wP29jKHQpOm9jLmNlaWwodCksV3IodC5nZXRGdWxsWWVhcigpJTFlNCxlLDQpfWZ1bmN0aW9uIHZrZSh0KXt2YXIgZT10LmdldFRpbWV6b25lT2Zmc2V0KCk7cmV0dXJuKGU+MD8iLSI6KGUqPS0xLCIrIikpK1dyKGUvNjB8MCwiMCIsMikrV3IoZSU2MCwiMCIsMil9ZnVuY3Rpb24gRVcodCxlKXtyZXR1cm4gV3IodC5nZXRVVENEYXRlKCksZSwyKX1mdW5jdGlvbiB4a2UodCxlKXtyZXR1cm4gV3IodC5nZXRVVENIb3VycygpLGUsMil9ZnVuY3Rpb24gYmtlKHQsZSl7cmV0dXJuIFdyKHQuZ2V0VVRDSG91cnMoKSUxMnx8MTIsZSwyKX1mdW5jdGlvbiB3a2UodCxlKXtyZXR1cm4gV3IoMStTdi5jb3VudCh2bCh0KSx0KSxlLDMpfWZ1bmN0aW9uIExXKHQsZSl7cmV0dXJuIFdyKHQuZ2V0VVRDTWlsbGlzZWNvbmRzKCksZSwzKX1mdW5jdGlvbiBUa2UodCxlKXtyZXR1cm4gTFcodCxlKSsiMDAwIn1mdW5jdGlvbiBra2UodCxlKXtyZXR1cm4gV3IodC5nZXRVVENNb250aCgpKzEsZSwyKX1mdW5jdGlvbiBFa2UodCxlKXtyZXR1cm4gV3IodC5nZXRVVENNaW51dGVzKCksZSwyKX1mdW5jdGlvbiBTa2UodCxlKXtyZXR1cm4gV3IodC5nZXRVVENTZWNvbmRzKCksZSwyKX1mdW5jdGlvbiBDa2UodCl7dmFyIGU9dC5nZXRVVENEYXkoKTtyZXR1cm4gZT09PTA/NzplfWZ1bmN0aW9uIEFrZSh0LGUpe3JldHVybiBXcihiZC5jb3VudCh2bCh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gUlcodCl7dmFyIGU9dC5nZXRVVENEYXkoKTtyZXR1cm4gZT49NHx8ZT09PTA/QWgodCk6QWguY2VpbCh0KX1mdW5jdGlvbiBfa2UodCxlKXtyZXR1cm4gdD1SVyh0KSxXcihBaC5jb3VudCh2bCh0KSx0KSsodmwodCkuZ2V0VVRDRGF5KCk9PT00KSxlLDIpfWZ1bmN0aW9uIERrZSh0KXtyZXR1cm4gdC5nZXRVVENEYXkoKX1mdW5jdGlvbiBMa2UodCxlKXtyZXR1cm4gV3IoTjAuY291bnQodmwodCktMSx0KSxlLDIpfWZ1bmN0aW9uIFJrZSh0LGUpe3JldHVybiBXcih0LmdldFVUQ0Z1bGxZZWFyKCklMTAwLGUsMil9ZnVuY3Rpb24gTmtlKHQsZSl7cmV0dXJuIHQ9UlcodCksV3IodC5nZXRVVENGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIE1rZSh0LGUpe3JldHVybiBXcih0LmdldFVUQ0Z1bGxZZWFyKCklMWU0LGUsNCl9ZnVuY3Rpb24gSWtlKHQsZSl7dmFyIHI9dC5nZXRVVENEYXkoKTtyZXR1cm4gdD1yPj00fHxyPT09MD9BaCh0KTpBaC5jZWlsKHQpLFdyKHQuZ2V0VVRDRnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiBPa2UoKXtyZXR1cm4iKzAwMDAifWZ1bmN0aW9uIFNXKCl7cmV0dXJuIiUifWZ1bmN0aW9uIENXKHQpe3JldHVybit0fWZ1bmN0aW9uIEFXKHQpe3JldHVybiBNYXRoLmZsb29yKCt0LzFlMyl9dmFyIHZXLFFpLEJUZSxGVGUsTlc9TigoKT0+eyJ1c2Ugc3RyaWN0IjtBNSgpO28oWF8sImxvY2FsRGF0ZSIpO28oal8sInV0Y0RhdGUiKTtvKEN2LCJuZXdEYXRlIik7byhLXywiZm9ybWF0TG9jYWxlIik7dlc9eyItIjoiIixfOiIgIiwwOiIwIn0sUWk9L15ccypcZCsvLEJUZT0vXiUvLEZUZT0vW1xcXiQqKz98W1xdKCkue31dL2c7byhXciwicGFkIik7bygkVGUsInJlcXVvdGUiKTtvKEF2LCJmb3JtYXRSZSIpO28oX3YsImZvcm1hdExvb2t1cCIpO28oelRlLCJwYXJzZVdlZWtkYXlOdW1iZXJTdW5kYXkiKTtvKEdUZSwicGFyc2VXZWVrZGF5TnVtYmVyTW9uZGF5Iik7byhWVGUsInBhcnNlV2Vla051bWJlclN1bmRheSIpO28oVVRlLCJwYXJzZVdlZWtOdW1iZXJJU08iKTtvKEhUZSwicGFyc2VXZWVrTnVtYmVyTW9uZGF5Iik7byh4VywicGFyc2VGdWxsWWVhciIpO28oYlcsInBhcnNlWWVhciIpO28oV1RlLCJwYXJzZVpvbmUiKTtvKHFUZSwicGFyc2VRdWFydGVyIik7byhZVGUsInBhcnNlTW9udGhOdW1iZXIiKTtvKHdXLCJwYXJzZURheU9mTW9udGgiKTtvKFhUZSwicGFyc2VEYXlPZlllYXIiKTtvKFRXLCJwYXJzZUhvdXIyNCIpO28oalRlLCJwYXJzZU1pbnV0ZXMiKTtvKEtUZSwicGFyc2VTZWNvbmRzIik7byhRVGUsInBhcnNlTWlsbGlzZWNvbmRzIik7byhaVGUsInBhcnNlTWljcm9zZWNvbmRzIik7byhKVGUsInBhcnNlTGl0ZXJhbFBlcmNlbnQiKTtvKGVrZSwicGFyc2VVbml4VGltZXN0YW1wIik7byh0a2UsInBhcnNlVW5peFRpbWVzdGFtcFNlY29uZHMiKTtvKGtXLCJmb3JtYXREYXlPZk1vbnRoIik7byhya2UsImZvcm1hdEhvdXIyNCIpO28obmtlLCJmb3JtYXRIb3VyMTIiKTtvKGlrZSwiZm9ybWF0RGF5T2ZZZWFyIik7byhfVywiZm9ybWF0TWlsbGlzZWNvbmRzIik7byhha2UsImZvcm1hdE1pY3Jvc2Vjb25kcyIpO28oc2tlLCJmb3JtYXRNb250aE51bWJlciIpO28ob2tlLCJmb3JtYXRNaW51dGVzIik7byhsa2UsImZvcm1hdFNlY29uZHMiKTtvKGNrZSwiZm9ybWF0V2Vla2RheU51bWJlck1vbmRheSIpO28odWtlLCJmb3JtYXRXZWVrTnVtYmVyU3VuZGF5Iik7byhEVywiZElTTyIpO28oaGtlLCJmb3JtYXRXZWVrTnVtYmVySVNPIik7byhma2UsImZvcm1hdFdlZWtkYXlOdW1iZXJTdW5kYXkiKTtvKGRrZSwiZm9ybWF0V2Vla051bWJlck1vbmRheSIpO28ocGtlLCJmb3JtYXRZZWFyIik7byhta2UsImZvcm1hdFllYXJJU08iKTtvKGdrZSwiZm9ybWF0RnVsbFllYXIiKTtvKHlrZSwiZm9ybWF0RnVsbFllYXJJU08iKTtvKHZrZSwiZm9ybWF0Wm9uZSIpO28oRVcsImZvcm1hdFVUQ0RheU9mTW9udGgiKTtvKHhrZSwiZm9ybWF0VVRDSG91cjI0Iik7byhia2UsImZvcm1hdFVUQ0hvdXIxMiIpO28od2tlLCJmb3JtYXRVVENEYXlPZlllYXIiKTtvKExXLCJmb3JtYXRVVENNaWxsaXNlY29uZHMiKTtvKFRrZSwiZm9ybWF0VVRDTWljcm9zZWNvbmRzIik7byhra2UsImZvcm1hdFVUQ01vbnRoTnVtYmVyIik7byhFa2UsImZvcm1hdFVUQ01pbnV0ZXMiKTtvKFNrZSwiZm9ybWF0VVRDU2Vjb25kcyIpO28oQ2tlLCJmb3JtYXRVVENXZWVrZGF5TnVtYmVyTW9uZGF5Iik7byhBa2UsImZvcm1hdFVUQ1dlZWtOdW1iZXJTdW5kYXkiKTtvKFJXLCJVVENkSVNPIik7byhfa2UsImZvcm1hdFVUQ1dlZWtOdW1iZXJJU08iKTtvKERrZSwiZm9ybWF0VVRDV2Vla2RheU51bWJlclN1bmRheSIpO28oTGtlLCJmb3JtYXRVVENXZWVrTnVtYmVyTW9uZGF5Iik7byhSa2UsImZvcm1hdFVUQ1llYXIiKTtvKE5rZSwiZm9ybWF0VVRDWWVhcklTTyIpO28oTWtlLCJmb3JtYXRVVENGdWxsWWVhciIpO28oSWtlLCJmb3JtYXRVVENGdWxsWWVhcklTTyIpO28oT2tlLCJmb3JtYXRVVENab25lIik7byhTVywiZm9ybWF0TGl0ZXJhbFBlcmNlbnQiKTtvKENXLCJmb3JtYXRVbml4VGltZXN0YW1wIik7byhBVywiZm9ybWF0VW5peFRpbWVzdGFtcFNlY29uZHMiKX0pO2Z1bmN0aW9uIFFfKHQpe3JldHVybiBNMD1LXyh0KSx3ZD1NMC5mb3JtYXQsTVc9TTAucGFyc2UsSVc9TTAudXRjRm9ybWF0LE9XPU0wLnV0Y1BhcnNlLE0wfXZhciBNMCx3ZCxNVyxJVyxPVyxQVz1OKCgpPT57InVzZSBzdHJpY3QiO05XKCk7UV8oe2RhdGVUaW1lOiIleCwgJVgiLGRhdGU6IiUtbS8lLWQvJVkiLHRpbWU6IiUtSTolTTolUyAlcCIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KTtvKFFfLCJkZWZhdWx0TG9jYWxlIil9KTt2YXIgWl89TigoKT0+eyJ1c2Ugc3RyaWN0IjtQVygpfSk7ZnVuY3Rpb24gUGtlKHQpe3JldHVybiBuZXcgRGF0ZSh0KX1mdW5jdGlvbiBCa2UodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBEYXRlPyt0OituZXcgRGF0ZSgrdCl9ZnVuY3Rpb24gQlcodCxlLHIsbixpLGEscyxsLHUsaCl7dmFyIGY9a3YoKSxkPWYuaW52ZXJ0LHA9Zi5kb21haW4sbT1oKCIuJUwiKSxnPWgoIjolUyIpLHk9aCgiJUk6JU0iKSx2PWgoIiVJICVwIikseD1oKCIlYSAlZCIpLGI9aCgiJWIgJWQiKSx3PWgoIiVCIiksQz1oKCIlWSIpO2Z1bmN0aW9uIFQoRSl7cmV0dXJuKHUoRSk8RT9tOmwoRSk8RT9nOnMoRSk8RT95OmEoRSk8RT92Om4oRSk8RT9pKEUpPEU/eDpiOnIoRSk8RT93OkMpKEUpfXJldHVybiBvKFQsInRpY2tGb3JtYXQiKSxmLmludmVydD1mdW5jdGlvbihFKXtyZXR1cm4gbmV3IERhdGUoZChFKSl9LGYuZG9tYWluPWZ1bmN0aW9uKEUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3AoQXJyYXkuZnJvbShFLEJrZSkpOnAoKS5tYXAoUGtlKX0sZi50aWNrcz1mdW5jdGlvbihFKXt2YXIgQT1wKCk7cmV0dXJuIHQoQVswXSxBW0EubGVuZ3RoLTFdLEU/PzEwKX0sZi50aWNrRm9ybWF0PWZ1bmN0aW9uKEUsQSl7cmV0dXJuIEE9PW51bGw/VDpoKEEpfSxmLm5pY2U9ZnVuY3Rpb24oRSl7dmFyIEE9cCgpO3JldHVybighRXx8dHlwZW9mIEUucmFuZ2UhPSJmdW5jdGlvbiIpJiYoRT1lKEFbMF0sQVtBLmxlbmd0aC0xXSxFPz8xMCkpLEU/cChPXyhBLEUpKTpmfSxmLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdjUoZixCVyh0LGUscixuLGksYSxzLGwsdSxoKSl9LGZ9ZnVuY3Rpb24gXzUoKXtyZXR1cm4gU2guYXBwbHkoQlcocV8sWV8sUXMsYnUseWwsX28seHUsdnUsS3Msd2QpLmRvbWFpbihbbmV3IERhdGUoMmUzLDAsMSksbmV3IERhdGUoMmUzLDAsMildKSxhcmd1bWVudHMpfXZhciBGVz1OKCgpPT57InVzZSBzdHJpY3QiO0E1KCk7Wl8oKTtNXygpO1R2KCk7YVcoKTtvKFBrZSwiZGF0ZSIpO28oQmtlLCJudW1iZXIiKTtvKEJXLCJjYWxlbmRhciIpO28oXzUsInRpbWUiKX0pO3ZhciAkVz1OKCgpPT57InVzZSBzdHJpY3QiO0pIKCk7aVcoKTtEXygpO0ZXKCl9KTtmdW5jdGlvbiBKXyh0KXtmb3IodmFyIGU9dC5sZW5ndGgvNnwwLHI9bmV3IEFycmF5KGUpLG49MDtuPGU7KXJbbl09IiMiK3Quc2xpY2Uobio2LCsrbio2KTtyZXR1cm4gcn12YXIgelc9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKEpfLCJkZWZhdWx0Iil9KTt2YXIgZTksR1c9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt6VygpO2U5PUpfKCI0ZTc5YTdmMjhlMmNlMTU3NTk3NmI3YjI1OWExNGZlZGM5NDlhZjdhYTFmZjlkYTc5Yzc1NWZiYWIwYWIiKX0pO3ZhciBWVz1OKCgpPT57InVzZSBzdHJpY3QiO0dXKCl9KTtmdW5jdGlvbiBCbih0KXtyZXR1cm4gbyhmdW5jdGlvbigpe3JldHVybiB0fSwiY29uc3RhbnQiKX12YXIgRDU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKEJuLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBIVyh0KXtyZXR1cm4gdD4xPzA6dDwtMT9JMDpNYXRoLmFjb3ModCl9ZnVuY3Rpb24gcjkodCl7cmV0dXJuIHQ+PTE/RHY6dDw9LTE/LUR2Ok1hdGguYXNpbih0KX12YXIgdDksZmEsX2gsVVcsTDUseGwsVGQsWmksSTAsRHYsTzAsUjU9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt0OT1NYXRoLmFicyxmYT1NYXRoLmF0YW4yLF9oPU1hdGguY29zLFVXPU1hdGgubWF4LEw1PU1hdGgubWluLHhsPU1hdGguc2luLFRkPU1hdGguc3FydCxaaT0xZS0xMixJMD1NYXRoLlBJLER2PUkwLzIsTzA9MipJMDtvKEhXLCJhY29zIik7byhyOSwiYXNpbiIpfSk7ZnVuY3Rpb24gTjUodCl7bGV0IGU9MztyZXR1cm4gdC5kaWdpdHM9ZnVuY3Rpb24ocil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGU7aWYocj09bnVsbCllPW51bGw7ZWxzZXtsZXQgbj1NYXRoLmZsb29yKHIpO2lmKCEobj49MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYGludmFsaWQgZGlnaXRzOiAke3J9YCk7ZT1ufXJldHVybiB0fSwoKT0+bmV3IHBkKGUpfXZhciBuOT1OKCgpPT57InVzZSBzdHJpY3QiO21fKCk7byhONSwid2l0aFBhdGgiKX0pO2Z1bmN0aW9uIEZrZSh0KXtyZXR1cm4gdC5pbm5lclJhZGl1c31mdW5jdGlvbiAka2UodCl7cmV0dXJuIHQub3V0ZXJSYWRpdXN9ZnVuY3Rpb24gemtlKHQpe3JldHVybiB0LnN0YXJ0QW5nbGV9ZnVuY3Rpb24gR2tlKHQpe3JldHVybiB0LmVuZEFuZ2xlfWZ1bmN0aW9uIFZrZSh0KXtyZXR1cm4gdCYmdC5wYWRBbmdsZX1mdW5jdGlvbiBVa2UodCxlLHIsbixpLGEscyxsKXt2YXIgdT1yLXQsaD1uLWUsZj1zLWksZD1sLWEscD1kKnUtZipoO2lmKCEocCpwPFppKSlyZXR1cm4gcD0oZiooZS1hKS1kKih0LWkpKS9wLFt0K3AqdSxlK3AqaF19ZnVuY3Rpb24gTTUodCxlLHIsbixpLGEscyl7dmFyIGw9dC1yLHU9ZS1uLGg9KHM/YTotYSkvVGQobCpsK3UqdSksZj1oKnUsZD0taCpsLHA9dCtmLG09ZStkLGc9citmLHk9bitkLHY9KHArZykvMix4PShtK3kpLzIsYj1nLXAsdz15LW0sQz1iKmIrdyp3LFQ9aS1hLEU9cCp5LWcqbSxBPSh3PDA/LTE6MSkqVGQoVVcoMCxUKlQqQy1FKkUpKSxTPShFKnctYipBKS9DLF89KC1FKmItdypBKS9DLEk9KEUqdytiKkEpL0MsRD0oLUUqYit3KkEpL0Msaz1TLXYsTD1fLXgsUj1JLXYsTz1ELXg7cmV0dXJuIGsqaytMKkw+UipSK08qTyYmKFM9SSxfPUQpLHtjeDpTLGN5Ol8seDAxOi1mLHkwMTotZCx4MTE6UyooaS9ULTEpLHkxMTpfKihpL1QtMSl9fWZ1bmN0aW9uIGJsKCl7dmFyIHQ9RmtlLGU9JGtlLHI9Qm4oMCksbj1udWxsLGk9emtlLGE9R2tlLHM9VmtlLGw9bnVsbCx1PU41KGgpO2Z1bmN0aW9uIGgoKXt2YXIgZixkLHA9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpLG09K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpLGc9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyktRHYseT1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1Edix2PXQ5KHktZykseD15Pmc7aWYobHx8KGw9Zj11KCkpLG08cCYmKGQ9bSxtPXAscD1kKSwhKG0+WmkpKWwubW92ZVRvKDAsMCk7ZWxzZSBpZih2Pk8wLVppKWwubW92ZVRvKG0qX2goZyksbSp4bChnKSksbC5hcmMoMCwwLG0sZyx5LCF4KSxwPlppJiYobC5tb3ZlVG8ocCpfaCh5KSxwKnhsKHkpKSxsLmFyYygwLDAscCx5LGcseCkpO2Vsc2V7dmFyIGI9Zyx3PXksQz1nLFQ9eSxFPXYsQT12LFM9cy5hcHBseSh0aGlzLGFyZ3VtZW50cykvMixfPVM+WmkmJihuPytuLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpUZChwKnArbSptKSksST1MNSh0OShtLXApLzIsK3IuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxEPUksaz1JLEwsUjtpZihfPlppKXt2YXIgTz1yOShfL3AqeGwoUykpLE09cjkoXy9tKnhsKFMpKTsoRS09TyoyKT5aaT8oTyo9eD8xOi0xLEMrPU8sVC09Tyk6KEU9MCxDPVQ9KGcreSkvMiksKEEtPU0qMik+Wmk/KE0qPXg/MTotMSxiKz1NLHctPU0pOihBPTAsYj13PShnK3kpLzIpfXZhciBCPW0qX2goYiksRj1tKnhsKGIpLFA9cCpfaChUKSx6PXAqeGwoVCk7aWYoST5aaSl7dmFyICQ9bSpfaCh3KSxIPW0qeGwodyksUT1wKl9oKEMpLGo9cCp4bChDKSxpZTtpZih2PEkwKWlmKGllPVVrZShCLEYsUSxqLCQsSCxQLHopKXt2YXIgbmU9Qi1pZVswXSxsZT1GLWllWzFdLGhlPSQtaWVbMF0sSz1ILWllWzFdLFg9MS94bChIVygobmUqaGUrbGUqSykvKFRkKG5lKm5lK2xlKmxlKSpUZChoZSpoZStLKkspKSkvMiksdGU9VGQoaWVbMF0qaWVbMF0raWVbMV0qaWVbMV0pO0Q9TDUoSSwocC10ZSkvKFgtMSkpLGs9TDUoSSwobS10ZSkvKFgrMSkpfWVsc2UgRD1rPTB9QT5aaT9rPlppPyhMPU01KFEsaixCLEYsbSxrLHgpLFI9TTUoJCxILFAseixtLGsseCksbC5tb3ZlVG8oTC5jeCtMLngwMSxMLmN5K0wueTAxKSxrPEk/bC5hcmMoTC5jeCxMLmN5LGssZmEoTC55MDEsTC54MDEpLGZhKFIueTAxLFIueDAxKSwheCk6KGwuYXJjKEwuY3gsTC5jeSxrLGZhKEwueTAxLEwueDAxKSxmYShMLnkxMSxMLngxMSksIXgpLGwuYXJjKDAsMCxtLGZhKEwuY3krTC55MTEsTC5jeCtMLngxMSksZmEoUi5jeStSLnkxMSxSLmN4K1IueDExKSwheCksbC5hcmMoUi5jeCxSLmN5LGssZmEoUi55MTEsUi54MTEpLGZhKFIueTAxLFIueDAxKSwheCkpKToobC5tb3ZlVG8oQixGKSxsLmFyYygwLDAsbSxiLHcsIXgpKTpsLm1vdmVUbyhCLEYpLCEocD5aaSl8fCEoRT5aaSk/bC5saW5lVG8oUCx6KTpEPlppPyhMPU01KFAseiwkLEgscCwtRCx4KSxSPU01KEIsRixRLGoscCwtRCx4KSxsLmxpbmVUbyhMLmN4K0wueDAxLEwuY3krTC55MDEpLEQ8ST9sLmFyYyhMLmN4LEwuY3ksRCxmYShMLnkwMSxMLngwMSksZmEoUi55MDEsUi54MDEpLCF4KToobC5hcmMoTC5jeCxMLmN5LEQsZmEoTC55MDEsTC54MDEpLGZhKEwueTExLEwueDExKSwheCksbC5hcmMoMCwwLHAsZmEoTC5jeStMLnkxMSxMLmN4K0wueDExKSxmYShSLmN5K1IueTExLFIuY3grUi54MTEpLHgpLGwuYXJjKFIuY3gsUi5jeSxELGZhKFIueTExLFIueDExKSxmYShSLnkwMSxSLngwMSksIXgpKSk6bC5hcmMoMCwwLHAsVCxDLHgpfWlmKGwuY2xvc2VQYXRoKCksZilyZXR1cm4gbD1udWxsLGYrIiJ8fG51bGx9cmV0dXJuIG8oaCwiYXJjIiksaC5jZW50cm9pZD1mdW5jdGlvbigpe3ZhciBmPSgrdC5hcHBseSh0aGlzLGFyZ3VtZW50cykrICtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMixkPSgraS5hcHBseSh0aGlzLGFyZ3VtZW50cykrICthLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMi1JMC8yO3JldHVybltfaChkKSpmLHhsKGQpKmZdfSxoLmlubmVyUmFkaXVzPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBmPT0iZnVuY3Rpb24iP2Y6Qm4oK2YpLGgpOnR9LGgub3V0ZXJSYWRpdXM9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpCbigrZiksaCk6ZX0saC5jb3JuZXJSYWRpdXM9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpCbigrZiksaCk6cn0saC5wYWRSYWRpdXM9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49Zj09bnVsbD9udWxsOnR5cGVvZiBmPT0iZnVuY3Rpb24iP2Y6Qm4oK2YpLGgpOm59LGguc3RhcnRBbmdsZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOkJuKCtmKSxoKTppfSxoLmVuZEFuZ2xlPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXR5cGVvZiBmPT0iZnVuY3Rpb24iP2Y6Qm4oK2YpLGgpOmF9LGgucGFkQW5nbGU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpCbigrZiksaCk6c30saC5jb250ZXh0PWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPWY/P251bGwsaCk6bH0saH12YXIgV1c9TigoKT0+eyJ1c2Ugc3RyaWN0IjtENSgpO1I1KCk7bjkoKTtvKEZrZSwiYXJjSW5uZXJSYWRpdXMiKTtvKCRrZSwiYXJjT3V0ZXJSYWRpdXMiKTtvKHprZSwiYXJjU3RhcnRBbmdsZSIpO28oR2tlLCJhcmNFbmRBbmdsZSIpO28oVmtlLCJhcmNQYWRBbmdsZSIpO28oVWtlLCJpbnRlcnNlY3QiKTtvKE01LCJjb3JuZXJUYW5nZW50cyIpO28oYmwsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIEx2KHQpe3JldHVybiB0eXBlb2YgdD09Im9iamVjdCImJiJsZW5ndGgiaW4gdD90OkFycmF5LmZyb20odCl9dmFyIE55dCxpOT1OKCgpPT57InVzZSBzdHJpY3QiO055dD1BcnJheS5wcm90b3R5cGUuc2xpY2U7byhMdiwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gcVcodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIHd1KHQpe3JldHVybiBuZXcgcVcodCl9dmFyIGE5PU4oKCk9PnsidXNlIHN0cmljdCI7byhxVywiTGluZWFyIik7cVcucHJvdG90eXBlPXthcmVhU3RhcnQ6byhmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sImFyZWFTdGFydCIpLGFyZWFFbmQ6byhmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSwiYXJlYUVuZCIpLGxpbmVTdGFydDpvKGZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sImxpbmVTdGFydCIpLGxpbmVFbmQ6byhmdW5jdGlvbigpeyh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0sImxpbmVFbmQiKSxwb2ludDpvKGZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp0aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpO2JyZWFrfX0sInBvaW50Iil9O28od3UsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIFlXKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIFhXKHQpe3JldHVybiB0WzFdfXZhciBqVz1OKCgpPT57InVzZSBzdHJpY3QiO28oWVcsIngiKTtvKFhXLCJ5Iil9KTtmdW5jdGlvbiB3bCh0LGUpe3ZhciByPUJuKCEwKSxuPW51bGwsaT13dSxhPW51bGwscz1ONShsKTt0PXR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6dD09PXZvaWQgMD9ZVzpCbih0KSxlPXR5cGVvZiBlPT0iZnVuY3Rpb24iP2U6ZT09PXZvaWQgMD9YVzpCbihlKTtmdW5jdGlvbiBsKHUpe3ZhciBoLGY9KHU9THYodSkpLmxlbmd0aCxkLHA9ITEsbTtmb3Iobj09bnVsbCYmKGE9aShtPXMoKSkpLGg9MDtoPD1mOysraCkhKGg8ZiYmcihkPXVbaF0saCx1KSk9PT1wJiYoKHA9IXApP2EubGluZVN0YXJ0KCk6YS5saW5lRW5kKCkpLHAmJmEucG9pbnQoK3QoZCxoLHUpLCtlKGQsaCx1KSk7aWYobSlyZXR1cm4gYT1udWxsLG0rIiJ8fG51bGx9cmV0dXJuIG8obCwibGluZSIpLGwueD1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgdT09ImZ1bmN0aW9uIj91OkJuKCt1KSxsKTp0fSxsLnk9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIHU9PSJmdW5jdGlvbiI/dTpCbigrdSksbCk6ZX0sbC5kZWZpbmVkPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiB1PT0iZnVuY3Rpb24iP3U6Qm4oISF1KSxsKTpyfSxsLmN1cnZlPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXUsbiE9bnVsbCYmKGE9aShuKSksbCk6aX0sbC5jb250ZXh0PWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PT1udWxsP249YT1udWxsOmE9aShuPXUpLGwpOm59LGx9dmFyIEtXPU4oKCk9PnsidXNlIHN0cmljdCI7aTkoKTtENSgpO2E5KCk7bjkoKTtqVygpO28od2wsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIHM5KHQsZSl7cmV0dXJuIGU8dD8tMTplPnQ/MTplPj10PzA6TmFOfXZhciBRVz1OKCgpPT57InVzZSBzdHJpY3QiO28oczksImRlZmF1bHQiKX0pO2Z1bmN0aW9uIG85KHQpe3JldHVybiB0fXZhciBaVz1OKCgpPT57InVzZSBzdHJpY3QiO28obzksImRlZmF1bHQiKX0pO2Z1bmN0aW9uIEk1KCl7dmFyIHQ9bzksZT1zOSxyPW51bGwsbj1CbigwKSxpPUJuKE8wKSxhPUJuKDApO2Z1bmN0aW9uIHMobCl7dmFyIHUsaD0obD1MdihsKSkubGVuZ3RoLGYsZCxwPTAsbT1uZXcgQXJyYXkoaCksZz1uZXcgQXJyYXkoaCkseT0rbi5hcHBseSh0aGlzLGFyZ3VtZW50cyksdj1NYXRoLm1pbihPMCxNYXRoLm1heCgtTzAsaS5hcHBseSh0aGlzLGFyZ3VtZW50cykteSkpLHgsYj1NYXRoLm1pbihNYXRoLmFicyh2KS9oLGEuYXBwbHkodGhpcyxhcmd1bWVudHMpKSx3PWIqKHY8MD8tMToxKSxDO2Zvcih1PTA7dTxoOysrdSkoQz1nW21bdV09dV09K3QobFt1XSx1LGwpKT4wJiYocCs9Qyk7Zm9yKGUhPW51bGw/bS5zb3J0KGZ1bmN0aW9uKFQsRSl7cmV0dXJuIGUoZ1tUXSxnW0VdKX0pOnIhPW51bGwmJm0uc29ydChmdW5jdGlvbihULEUpe3JldHVybiByKGxbVF0sbFtFXSl9KSx1PTAsZD1wPyh2LWgqdykvcDowO3U8aDsrK3UseT14KWY9bVt1XSxDPWdbZl0seD15KyhDPjA/QypkOjApK3csZ1tmXT17ZGF0YTpsW2ZdLGluZGV4OnUsdmFsdWU6QyxzdGFydEFuZ2xlOnksZW5kQW5nbGU6eCxwYWRBbmdsZTpifTtyZXR1cm4gZ31yZXR1cm4gbyhzLCJwaWUiKSxzLnZhbHVlPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBsPT0iZnVuY3Rpb24iP2w6Qm4oK2wpLHMpOnR9LHMuc29ydFZhbHVlcz1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1sLHI9bnVsbCxzKTplfSxzLnNvcnQ9ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bCxlPW51bGwscyk6cn0scy5zdGFydEFuZ2xlPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBsPT0iZnVuY3Rpb24iP2w6Qm4oK2wpLHMpOm59LHMuZW5kQW5nbGU9ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIGw9PSJmdW5jdGlvbiI/bDpCbigrbCkscyk6aX0scy5wYWRBbmdsZT1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10eXBlb2YgbD09ImZ1bmN0aW9uIj9sOkJuKCtsKSxzKTphfSxzfXZhciBKVz1OKCgpPT57InVzZSBzdHJpY3QiO2k5KCk7RDUoKTtRVygpO1pXKCk7UjUoKTtvKEk1LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBSdih0KXtyZXR1cm4gbmV3IE81KHQsITApfWZ1bmN0aW9uIE52KHQpe3JldHVybiBuZXcgTzUodCwhMSl9dmFyIE81LGVxPU4oKCk9PnsidXNlIHN0cmljdCI7TzU9Y2xhc3N7c3RhdGlje28odGhpcywiQnVtcCIpfWNvbnN0cnVjdG9yKGUscil7dGhpcy5fY29udGV4dD1lLHRoaXMuX3g9cn1hcmVhU3RhcnQoKXt0aGlzLl9saW5lPTB9YXJlYUVuZCgpe3RoaXMuX2xpbmU9TmFOfWxpbmVTdGFydCgpe3RoaXMuX3BvaW50PTB9bGluZUVuZCgpeyh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX1wb2ludChlLHIpe3N3aXRjaChlPStlLHI9K3IsdGhpcy5fcG9pbnQpe2Nhc2UgMDp7dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGUscik6dGhpcy5fY29udGV4dC5tb3ZlVG8oZSxyKTticmVha31jYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0Ont0aGlzLl94P3RoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh0aGlzLl94MD0odGhpcy5feDArZSkvMix0aGlzLl95MCx0aGlzLl94MCxyLGUscik6dGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHRoaXMuX3gwLHRoaXMuX3kwPSh0aGlzLl95MCtyKS8yLGUsdGhpcy5feTAsZSxyKTticmVha319dGhpcy5feDA9ZSx0aGlzLl95MD1yfX07byhSdiwiYnVtcFgiKTtvKE52LCJidW1wWSIpfSk7ZnVuY3Rpb24gWnMoKXt9dmFyIE12PU4oKCk9PnsidXNlIHN0cmljdCI7byhacywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gUDAodCxlLHIpe3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbygoMip0Ll94MCt0Ll94MSkvMywoMip0Ll95MCt0Ll95MSkvMywodC5feDArMip0Ll94MSkvMywodC5feTArMip0Ll95MSkvMywodC5feDArNCp0Ll94MStlKS82LCh0Ll95MCs0KnQuX3kxK3IpLzYpfWZ1bmN0aW9uIEl2KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBEbyh0KXtyZXR1cm4gbmV3IEl2KHQpfXZhciBPdj1OKCgpPT57InVzZSBzdHJpY3QiO28oUDAsInBvaW50Iik7byhJdiwiQmFzaXMiKTtJdi5wcm90b3R5cGU9e2FyZWFTdGFydDpvKGZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSwiYXJlYVN0YXJ0IiksYXJlYUVuZDpvKGZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LCJhcmVhRW5kIiksbGluZVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT1OYU4sdGhpcy5fcG9pbnQ9MH0sImxpbmVTdGFydCIpLGxpbmVFbmQ6byhmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAzOlAwKHRoaXMsdGhpcy5feDEsdGhpcy5feTEpO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSk7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSwibGluZUVuZCIpLHBvaW50Om8oZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9jb250ZXh0LmxpbmVUbygoNSp0aGlzLl94MCt0aGlzLl94MSkvNiwoNSp0aGlzLl95MCt0aGlzLl95MSkvNik7ZGVmYXVsdDpQMCh0aGlzLHQsZSk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1lfSwicG9pbnQiKX07byhEbywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gdHEodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIFA1KHQpe3JldHVybiBuZXcgdHEodCl9dmFyIHJxPU4oKCk9PnsidXNlIHN0cmljdCI7TXYoKTtPdigpO28odHEsIkJhc2lzQ2xvc2VkIik7dHEucHJvdG90eXBlPXthcmVhU3RhcnQ6WnMsYXJlYUVuZDpacyxsaW5lU3RhcnQ6byhmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PU5hTix0aGlzLl9wb2ludD0wfSwibGluZVN0YXJ0IiksbGluZUVuZDpvKGZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gyKzIqdGhpcy5feDMpLzMsKHRoaXMuX3kyKzIqdGhpcy5feTMpLzMpLHRoaXMuX2NvbnRleHQubGluZVRvKCh0aGlzLl94MysyKnRoaXMuX3gyKS8zLCh0aGlzLl95MysyKnRoaXMuX3kyKS8zKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMzp7dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCk7YnJlYWt9fX0sImxpbmVFbmQiKSxwb2ludDpvKGZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDI9dCx0aGlzLl95Mj1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gzPXQsdGhpcy5feTM9ZTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94ND10LHRoaXMuX3k0PWUsdGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gwKzQqdGhpcy5feDErdCkvNiwodGhpcy5feTArNCp0aGlzLl95MStlKS82KTticmVhaztkZWZhdWx0OlAwKHRoaXMsdCxlKTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWV9LCJwb2ludCIpfTtvKFA1LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBucSh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gQjUodCl7cmV0dXJuIG5ldyBucSh0KX12YXIgaXE9TigoKT0+eyJ1c2Ugc3RyaWN0IjtPdigpO28obnEsIkJhc2lzT3BlbiIpO25xLnByb3RvdHlwZT17YXJlYVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LCJhcmVhU3RhcnQiKSxhcmVhRW5kOm8oZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sImFyZWFFbmQiKSxsaW5lU3RhcnQ6byhmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSwibGluZVN0YXJ0IiksbGluZUVuZDpvKGZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTMpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSwibGluZUVuZCIpLHBvaW50Om8oZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Mzt2YXIgcj0odGhpcy5feDArNCp0aGlzLl94MSt0KS82LG49KHRoaXMuX3kwKzQqdGhpcy5feTErZSkvNjt0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHIsbik6dGhpcy5fY29udGV4dC5tb3ZlVG8ocixuKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OlAwKHRoaXMsdCxlKTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWV9LCJwb2ludCIpfTtvKEI1LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBhcSh0LGUpe3RoaXMuX2Jhc2lzPW5ldyBJdih0KSx0aGlzLl9iZXRhPWV9dmFyIGw5LHNxPU4oKCk9PnsidXNlIHN0cmljdCI7T3YoKTtvKGFxLCJCdW5kbGUiKTthcS5wcm90b3R5cGU9e2xpbmVTdGFydDpvKGZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdLHRoaXMuX2Jhc2lzLmxpbmVTdGFydCgpfSwibGluZVN0YXJ0IiksbGluZUVuZDpvKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5feCxlPXRoaXMuX3kscj10Lmxlbmd0aC0xO2lmKHI+MClmb3IodmFyIG49dFswXSxpPWVbMF0sYT10W3JdLW4scz1lW3JdLWksbD0tMSx1OysrbDw9cjspdT1sL3IsdGhpcy5fYmFzaXMucG9pbnQodGhpcy5fYmV0YSp0W2xdKygxLXRoaXMuX2JldGEpKihuK3UqYSksdGhpcy5fYmV0YSplW2xdKygxLXRoaXMuX2JldGEpKihpK3UqcykpO3RoaXMuX3g9dGhpcy5feT1udWxsLHRoaXMuX2Jhc2lzLmxpbmVFbmQoKX0sImxpbmVFbmQiKSxwb2ludDpvKGZ1bmN0aW9uKHQsZSl7dGhpcy5feC5wdXNoKCt0KSx0aGlzLl95LnB1c2goK2UpfSwicG9pbnQiKX07bDk9byhmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIHIobil7cmV0dXJuIGU9PT0xP25ldyBJdihuKTpuZXcgYXEobixlKX1yZXR1cm4gbyhyLCJidW5kbGUiKSxyLmJldGE9ZnVuY3Rpb24obil7cmV0dXJuIHQoK24pfSxyfSwiY3VzdG9tIikoLjg1KX0pO2Z1bmN0aW9uIEIwKHQsZSxyKXt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8odC5feDErdC5fayoodC5feDItdC5feDApLHQuX3kxK3QuX2sqKHQuX3kyLXQuX3kwKSx0Ll94Mit0Ll9rKih0Ll94MS1lKSx0Ll95Mit0Ll9rKih0Ll95MS1yKSx0Ll94Mix0Ll95Mil9ZnVuY3Rpb24gRjUodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fXZhciBQdixCdj1OKCgpPT57InVzZSBzdHJpY3QiO28oQjAsInBvaW50Iik7byhGNSwiQ2FyZGluYWwiKTtGNS5wcm90b3R5cGU9e2FyZWFTdGFydDpvKGZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSwiYXJlYVN0YXJ0IiksYXJlYUVuZDpvKGZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LCJhcmVhRW5kIiksbGluZVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sImxpbmVTdGFydCIpLGxpbmVFbmQ6byhmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6QjAodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSwibGluZUVuZCIpLHBvaW50Om8oZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl94MT10LHRoaXMuX3kxPWU7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7ZGVmYXVsdDpCMCh0aGlzLHQsZSk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfSwicG9pbnQiKX07UHY9byhmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIHIobil7cmV0dXJuIG5ldyBGNShuLGUpfXJldHVybiBvKHIsImNhcmRpbmFsIiksci50ZW5zaW9uPWZ1bmN0aW9uKG4pe3JldHVybiB0KCtuKX0scn0sImN1c3RvbSIpKDApfSk7ZnVuY3Rpb24gJDUodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fXZhciBjOSx1OT1OKCgpPT57InVzZSBzdHJpY3QiO012KCk7QnYoKTtvKCQ1LCJDYXJkaW5hbENsb3NlZCIpOyQ1LnByb3RvdHlwZT17YXJlYVN0YXJ0OlpzLGFyZWFFbmQ6WnMsbGluZVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl94NT10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND10aGlzLl95NT1OYU4sdGhpcy5fcG9pbnQ9MH0sImxpbmVTdGFydCIpLGxpbmVFbmQ6byhmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnt0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDI6e3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMzp7dGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCksdGhpcy5wb2ludCh0aGlzLl94NSx0aGlzLl95NSk7YnJlYWt9fX0sImxpbmVFbmQiKSxwb2ludDpvKGZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9dCx0aGlzLl95Mz1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PXQsdGhpcy5feTQ9ZSk7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9dCx0aGlzLl95NT1lO2JyZWFrO2RlZmF1bHQ6QjAodGhpcyx0LGUpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX0sInBvaW50Iil9O2M5PW8oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKG4pe3JldHVybiBuZXcgJDUobixlKX1yZXR1cm4gbyhyLCJjYXJkaW5hbCIpLHIudGVuc2lvbj1mdW5jdGlvbihuKXtyZXR1cm4gdCgrbil9LHJ9LCJjdXN0b20iKSgwKX0pO2Z1bmN0aW9uIHo1KHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtZSkvNn12YXIgaDksZjk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtCdigpO28oejUsIkNhcmRpbmFsT3BlbiIpO3o1LnByb3RvdHlwZT17YXJlYVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LCJhcmVhU3RhcnQiKSxhcmVhRW5kOm8oZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sImFyZWFFbmQiKSxsaW5lU3RhcnQ6byhmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSwibGluZVN0YXJ0IiksbGluZUVuZDpvKGZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTMpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSwibGluZUVuZCIpLHBvaW50Om8oZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpCMCh0aGlzLHQsZSk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfSwicG9pbnQiKX07aDk9byhmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIHIobil7cmV0dXJuIG5ldyB6NShuLGUpfXJldHVybiBvKHIsImNhcmRpbmFsIiksci50ZW5zaW9uPWZ1bmN0aW9uKG4pe3JldHVybiB0KCtuKX0scn0sImN1c3RvbSIpKDApfSk7ZnVuY3Rpb24gRnYodCxlLHIpe3ZhciBuPXQuX3gxLGk9dC5feTEsYT10Ll94MixzPXQuX3kyO2lmKHQuX2wwMV9hPlppKXt2YXIgbD0yKnQuX2wwMV8yYSszKnQuX2wwMV9hKnQuX2wxMl9hK3QuX2wxMl8yYSx1PTMqdC5fbDAxX2EqKHQuX2wwMV9hK3QuX2wxMl9hKTtuPShuKmwtdC5feDAqdC5fbDEyXzJhK3QuX3gyKnQuX2wwMV8yYSkvdSxpPShpKmwtdC5feTAqdC5fbDEyXzJhK3QuX3kyKnQuX2wwMV8yYSkvdX1pZih0Ll9sMjNfYT5aaSl7dmFyIGg9Mip0Ll9sMjNfMmErMyp0Ll9sMjNfYSp0Ll9sMTJfYSt0Ll9sMTJfMmEsZj0zKnQuX2wyM19hKih0Ll9sMjNfYSt0Ll9sMTJfYSk7YT0oYSpoK3QuX3gxKnQuX2wyM18yYS1lKnQuX2wxMl8yYSkvZixzPShzKmgrdC5feTEqdC5fbDIzXzJhLXIqdC5fbDEyXzJhKS9mfXQuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhuLGksYSxzLHQuX3gyLHQuX3kyKX1mdW5jdGlvbiBvcSh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1lfXZhciAkdixHNT1OKCgpPT57InVzZSBzdHJpY3QiO1I1KCk7QnYoKTtvKEZ2LCJwb2ludCIpO28ob3EsIkNhdG11bGxSb20iKTtvcS5wcm90b3R5cGU9e2FyZWFTdGFydDpvKGZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSwiYXJlYVN0YXJ0IiksYXJlYUVuZDpvKGZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LCJhcmVhRW5kIiksbGluZVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sImxpbmVTdGFydCIpLGxpbmVFbmQ6byhmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSwibGluZUVuZCIpLHBvaW50Om8oZnVuY3Rpb24odCxlKXtpZih0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe3ZhciByPXRoaXMuX3gyLXQsbj10aGlzLl95Mi1lO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cocipyK24qbix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7ZGVmYXVsdDpGdih0aGlzLHQsZSk7YnJlYWt9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX0sInBvaW50Iil9OyR2PW8oZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKG4pe3JldHVybiBlP25ldyBvcShuLGUpOm5ldyBGNShuLDApfXJldHVybiBvKHIsImNhdG11bGxSb20iKSxyLmFscGhhPWZ1bmN0aW9uKG4pe3JldHVybiB0KCtuKX0scn0sImN1c3RvbSIpKC41KX0pO2Z1bmN0aW9uIGxxKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPWV9dmFyIGQ5LGNxPU4oKCk9PnsidXNlIHN0cmljdCI7dTkoKTtNdigpO0c1KCk7byhscSwiQ2F0bXVsbFJvbUNsb3NlZCIpO2xxLnByb3RvdHlwZT17YXJlYVN0YXJ0OlpzLGFyZWFFbmQ6WnMsbGluZVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl94NT10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND10aGlzLl95NT1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sImxpbmVTdGFydCIpLGxpbmVFbmQ6byhmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnt0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDI6e3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMzp7dGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCksdGhpcy5wb2ludCh0aGlzLl94NSx0aGlzLl95NSk7YnJlYWt9fX0sImxpbmVFbmQiKSxwb2ludDpvKGZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgcj10aGlzLl94Mi10LG49dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KHIqcituKm4sdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPXQsdGhpcy5feTM9ZTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND10LHRoaXMuX3k0PWUpO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PXQsdGhpcy5feTU9ZTticmVhaztkZWZhdWx0OkZ2KHRoaXMsdCxlKTticmVha310aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfSwicG9pbnQiKX07ZDk9byhmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIHIobil7cmV0dXJuIGU/bmV3IGxxKG4sZSk6bmV3ICQ1KG4sMCl9cmV0dXJuIG8ociwiY2F0bXVsbFJvbSIpLHIuYWxwaGE9ZnVuY3Rpb24obil7cmV0dXJuIHQoK24pfSxyfSwiY3VzdG9tIikoLjUpfSk7ZnVuY3Rpb24gdXEodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9ZX12YXIgcDksaHE9TigoKT0+eyJ1c2Ugc3RyaWN0IjtmOSgpO0c1KCk7byh1cSwiQ2F0bXVsbFJvbU9wZW4iKTt1cS5wcm90b3R5cGU9e2FyZWFTdGFydDpvKGZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSwiYXJlYVN0YXJ0IiksYXJlYUVuZDpvKGZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LCJhcmVhRW5kIiksbGluZVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sImxpbmVTdGFydCIpLGxpbmVFbmQ6byhmdW5jdGlvbigpeyh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0zKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0sImxpbmVFbmQiKSxwb2ludDpvKGZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgcj10aGlzLl94Mi10LG49dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KHIqcituKm4sdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OkZ2KHRoaXMsdCxlKTticmVha310aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfSwicG9pbnQiKX07cDk9byhmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIHIobil7cmV0dXJuIGU/bmV3IHVxKG4sZSk6bmV3IHo1KG4sMCl9cmV0dXJuIG8ociwiY2F0bXVsbFJvbSIpLHIuYWxwaGE9ZnVuY3Rpb24obil7cmV0dXJuIHQoK24pfSxyfSwiY3VzdG9tIikoLjUpfSk7ZnVuY3Rpb24gZnEodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIFY1KHQpe3JldHVybiBuZXcgZnEodCl9dmFyIGRxPU4oKCk9PnsidXNlIHN0cmljdCI7TXYoKTtvKGZxLCJMaW5lYXJDbG9zZWQiKTtmcS5wcm90b3R5cGU9e2FyZWFTdGFydDpacyxhcmVhRW5kOlpzLGxpbmVTdGFydDpvKGZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sImxpbmVTdGFydCIpLGxpbmVFbmQ6byhmdW5jdGlvbigpe3RoaXMuX3BvaW50JiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSwibGluZUVuZCIpLHBvaW50Om8oZnVuY3Rpb24odCxlKXt0PSt0LGU9K2UsdGhpcy5fcG9pbnQ/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKToodGhpcy5fcG9pbnQ9MSx0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpKX0sInBvaW50Iil9O28oVjUsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIHBxKHQpe3JldHVybiB0PDA/LTE6MX1mdW5jdGlvbiBtcSh0LGUscil7dmFyIG49dC5feDEtdC5feDAsaT1lLXQuX3gxLGE9KHQuX3kxLXQuX3kwKS8obnx8aTwwJiYtMCkscz0oci10Ll95MSkvKGl8fG48MCYmLTApLGw9KGEqaStzKm4pLyhuK2kpO3JldHVybihwcShhKStwcShzKSkqTWF0aC5taW4oTWF0aC5hYnMoYSksTWF0aC5hYnMocyksLjUqTWF0aC5hYnMobCkpfHwwfWZ1bmN0aW9uIGdxKHQsZSl7dmFyIHI9dC5feDEtdC5feDA7cmV0dXJuIHI/KDMqKHQuX3kxLXQuX3kwKS9yLWUpLzI6ZX1mdW5jdGlvbiBtOSh0LGUscil7dmFyIG49dC5feDAsaT10Ll95MCxhPXQuX3gxLHM9dC5feTEsbD0oYS1uKS8zO3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhuK2wsaStsKmUsYS1sLHMtbCpyLGEscyl9ZnVuY3Rpb24gVTUodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIHlxKHQpe3RoaXMuX2NvbnRleHQ9bmV3IHZxKHQpfWZ1bmN0aW9uIHZxKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiB6dih0KXtyZXR1cm4gbmV3IFU1KHQpfWZ1bmN0aW9uIEd2KHQpe3JldHVybiBuZXcgeXEodCl9dmFyIHhxPU4oKCk9PnsidXNlIHN0cmljdCI7byhwcSwic2lnbiIpO28obXEsInNsb3BlMyIpO28oZ3EsInNsb3BlMiIpO28obTksInBvaW50Iik7byhVNSwiTW9ub3RvbmVYIik7VTUucHJvdG90eXBlPXthcmVhU3RhcnQ6byhmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sImFyZWFTdGFydCIpLGFyZWFFbmQ6byhmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSwiYXJlYUVuZCIpLGxpbmVTdGFydDpvKGZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5fdDA9TmFOLHRoaXMuX3BvaW50PTB9LCJsaW5lU3RhcnQiKSxsaW5lRW5kOm8oZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSk7YnJlYWs7Y2FzZSAzOm05KHRoaXMsdGhpcy5fdDAsZ3EodGhpcyx0aGlzLl90MCkpO2JyZWFrfSh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0sImxpbmVFbmQiKSxwb2ludDpvKGZ1bmN0aW9uKHQsZSl7dmFyIHI9TmFOO2lmKHQ9K3QsZT0rZSwhKHQ9PT10aGlzLl94MSYmZT09PXRoaXMuX3kxKSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MyxtOSh0aGlzLGdxKHRoaXMscj1tcSh0aGlzLHQsZSkpLHIpO2JyZWFrO2RlZmF1bHQ6bTkodGhpcyx0aGlzLl90MCxyPW1xKHRoaXMsdCxlKSk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1lLHRoaXMuX3QwPXJ9fSwicG9pbnQiKX07byh5cSwiTW9ub3RvbmVZIik7KHlxLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFU1LnByb3RvdHlwZSkpLnBvaW50PWZ1bmN0aW9uKHQsZSl7VTUucHJvdG90eXBlLnBvaW50LmNhbGwodGhpcyxlLHQpfTtvKHZxLCJSZWZsZWN0Q29udGV4dCIpO3ZxLnByb3RvdHlwZT17bW92ZVRvOm8oZnVuY3Rpb24odCxlKXt0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpfSwibW92ZVRvIiksY2xvc2VQYXRoOm8oZnVuY3Rpb24oKXt0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSwiY2xvc2VQYXRoIiksbGluZVRvOm8oZnVuY3Rpb24odCxlKXt0aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpfSwibGluZVRvIiksYmV6aWVyQ3VydmVUbzpvKGZ1bmN0aW9uKHQsZSxyLG4saSxhKXt0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8oZSx0LG4scixhLGkpfSwiYmV6aWVyQ3VydmVUbyIpfTtvKHp2LCJtb25vdG9uZVgiKTtvKEd2LCJtb25vdG9uZVkiKX0pO2Z1bmN0aW9uIHdxKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBicSh0KXt2YXIgZSxyPXQubGVuZ3RoLTEsbixpPW5ldyBBcnJheShyKSxhPW5ldyBBcnJheShyKSxzPW5ldyBBcnJheShyKTtmb3IoaVswXT0wLGFbMF09MixzWzBdPXRbMF0rMip0WzFdLGU9MTtlPHItMTsrK2UpaVtlXT0xLGFbZV09NCxzW2VdPTQqdFtlXSsyKnRbZSsxXTtmb3IoaVtyLTFdPTIsYVtyLTFdPTcsc1tyLTFdPTgqdFtyLTFdK3Rbcl0sZT0xO2U8cjsrK2Upbj1pW2VdL2FbZS0xXSxhW2VdLT1uLHNbZV0tPW4qc1tlLTFdO2ZvcihpW3ItMV09c1tyLTFdL2Fbci0xXSxlPXItMjtlPj0wOy0tZSlpW2VdPShzW2VdLWlbZSsxXSkvYVtlXTtmb3IoYVtyLTFdPSh0W3JdK2lbci0xXSkvMixlPTA7ZTxyLTE7KytlKWFbZV09Mip0W2UrMV0taVtlKzFdO3JldHVybltpLGFdfWZ1bmN0aW9uIEYwKHQpe3JldHVybiBuZXcgd3EodCl9dmFyIFRxPU4oKCk9PnsidXNlIHN0cmljdCI7byh3cSwiTmF0dXJhbCIpO3dxLnByb3RvdHlwZT17YXJlYVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LCJhcmVhU3RhcnQiKSxhcmVhRW5kOm8oZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sImFyZWFFbmQiKSxsaW5lU3RhcnQ6byhmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXX0sImxpbmVTdGFydCIpLGxpbmVFbmQ6byhmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3gsZT10aGlzLl95LHI9dC5sZW5ndGg7aWYocilpZih0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRbMF0sZVswXSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odFswXSxlWzBdKSxyPT09Mil0aGlzLl9jb250ZXh0LmxpbmVUbyh0WzFdLGVbMV0pO2Vsc2UgZm9yKHZhciBuPWJxKHQpLGk9YnEoZSksYT0wLHM9MTtzPHI7KythLCsrcyl0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8oblswXVthXSxpWzBdW2FdLG5bMV1bYV0saVsxXVthXSx0W3NdLGVbc10pOyh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmcj09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lLHRoaXMuX3g9dGhpcy5feT1udWxsfSwibGluZUVuZCIpLHBvaW50Om8oZnVuY3Rpb24odCxlKXt0aGlzLl94LnB1c2goK3QpLHRoaXMuX3kucHVzaCgrZSl9LCJwb2ludCIpfTtvKGJxLCJjb250cm9sUG9pbnRzIik7byhGMCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gSDUodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fdD1lfWZ1bmN0aW9uICQwKHQpe3JldHVybiBuZXcgSDUodCwuNSl9ZnVuY3Rpb24gVnYodCl7cmV0dXJuIG5ldyBINSh0LDApfWZ1bmN0aW9uIFV2KHQpe3JldHVybiBuZXcgSDUodCwxKX12YXIga3E9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKEg1LCJTdGVwIik7SDUucHJvdG90eXBlPXthcmVhU3RhcnQ6byhmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sImFyZWFTdGFydCIpLGFyZWFFbmQ6byhmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSwiYXJlYUVuZCIpLGxpbmVTdGFydDpvKGZ1bmN0aW9uKCl7dGhpcy5feD10aGlzLl95PU5hTix0aGlzLl9wb2ludD0wfSwibGluZVN0YXJ0IiksbGluZUVuZDpvKGZ1bmN0aW9uKCl7MDx0aGlzLl90JiZ0aGlzLl90PDEmJnRoaXMuX3BvaW50PT09MiYmdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feCx0aGlzLl95KSwodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT49MCYmKHRoaXMuX3Q9MS10aGlzLl90LHRoaXMuX2xpbmU9MS10aGlzLl9saW5lKX0sImxpbmVFbmQiKSxwb2ludDpvKGZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp7aWYodGhpcy5fdDw9MCl0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LGUpLHRoaXMuX2NvbnRleHQubGluZVRvKHQsZSk7ZWxzZXt2YXIgcj10aGlzLl94KigxLXRoaXMuX3QpK3QqdGhpcy5fdDt0aGlzLl9jb250ZXh0LmxpbmVUbyhyLHRoaXMuX3kpLHRoaXMuX2NvbnRleHQubGluZVRvKHIsZSl9YnJlYWt9fXRoaXMuX3g9dCx0aGlzLl95PWV9LCJwb2ludCIpfTtvKCQwLCJkZWZhdWx0Iik7byhWdiwic3RlcEJlZm9yZSIpO28oVXYsInN0ZXBBZnRlciIpfSk7dmFyIEVxPU4oKCk9PnsidXNlIHN0cmljdCI7V1coKTtLVygpO0pXKCk7cnEoKTtpcSgpO092KCk7ZXEoKTtzcSgpO3U5KCk7ZjkoKTtCdigpO2NxKCk7aHEoKTtHNSgpO2RxKCk7YTkoKTt4cSgpO1RxKCk7a3EoKX0pO3ZhciBTcT1OKCgpPT57InVzZSBzdHJpY3QifSk7dmFyIENxPU4oKCk9PnsidXNlIHN0cmljdCJ9KTtmdW5jdGlvbiBEaCh0LGUscil7dGhpcy5rPXQsdGhpcy54PWUsdGhpcy55PXJ9ZnVuY3Rpb24geTkodCl7Zm9yKDshdC5fX3pvb207KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybiBnOTtyZXR1cm4gdC5fX3pvb219dmFyIGc5LHY5PU4oKCk9PnsidXNlIHN0cmljdCI7byhEaCwiVHJhbnNmb3JtIik7RGgucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpEaCxzY2FsZTpvKGZ1bmN0aW9uKHQpe3JldHVybiB0PT09MT90aGlzOm5ldyBEaCh0aGlzLmsqdCx0aGlzLngsdGhpcy55KX0sInNjYWxlIiksdHJhbnNsYXRlOm8oZnVuY3Rpb24odCxlKXtyZXR1cm4gdD09PTAmZT09PTA/dGhpczpuZXcgRGgodGhpcy5rLHRoaXMueCt0aGlzLmsqdCx0aGlzLnkrdGhpcy5rKmUpfSwidHJhbnNsYXRlIiksYXBwbHk6byhmdW5jdGlvbih0KXtyZXR1cm5bdFswXSp0aGlzLmsrdGhpcy54LHRbMV0qdGhpcy5rK3RoaXMueV19LCJhcHBseSIpLGFwcGx5WDpvKGZ1bmN0aW9uKHQpe3JldHVybiB0KnRoaXMuayt0aGlzLnh9LCJhcHBseVgiKSxhcHBseVk6byhmdW5jdGlvbih0KXtyZXR1cm4gdCp0aGlzLmsrdGhpcy55fSwiYXBwbHlZIiksaW52ZXJ0Om8oZnVuY3Rpb24odCl7cmV0dXJuWyh0WzBdLXRoaXMueCkvdGhpcy5rLCh0WzFdLXRoaXMueSkvdGhpcy5rXX0sImludmVydCIpLGludmVydFg6byhmdW5jdGlvbih0KXtyZXR1cm4odC10aGlzLngpL3RoaXMua30sImludmVydFgiKSxpbnZlcnRZOm8oZnVuY3Rpb24odCl7cmV0dXJuKHQtdGhpcy55KS90aGlzLmt9LCJpbnZlcnRZIikscmVzY2FsZVg6byhmdW5jdGlvbih0KXtyZXR1cm4gdC5jb3B5KCkuZG9tYWluKHQucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcCh0LmludmVydCx0KSl9LCJyZXNjYWxlWCIpLHJlc2NhbGVZOm8oZnVuY3Rpb24odCl7cmV0dXJuIHQuY29weSgpLmRvbWFpbih0LnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WSx0aGlzKS5tYXAodC5pbnZlcnQsdCkpfSwicmVzY2FsZVkiKSx0b1N0cmluZzpvKGZ1bmN0aW9uKCl7cmV0dXJuInRyYW5zbGF0ZSgiK3RoaXMueCsiLCIrdGhpcy55KyIpIHNjYWxlKCIrdGhpcy5rKyIpIn0sInRvU3RyaW5nIil9O2c5PW5ldyBEaCgxLDAsMCk7eTkucHJvdG90eXBlPURoLnByb3RvdHlwZTtvKHk5LCJ0cmFuc2Zvcm0iKX0pO3ZhciBBcT1OKCgpPT57InVzZSBzdHJpY3QifSk7dmFyIF9xPU4oKCk9PnsidXNlIHN0cmljdCI7bDUoKTtTcSgpO0NxKCk7djkoKTtBcSgpfSk7dmFyIERxPU4oKCk9PnsidXNlIHN0cmljdCI7X3EoKTt2OSgpfSk7dmFyIGRyPU4oKCk9PnsidXNlIHN0cmljdCI7dmgoKTtzVigpO1NIKCk7REgoKTtFMCgpO0xIKCk7UkgoKTtUQSgpO1FWKCk7TkgoKTt1XygpO01IKCk7T0goKTtBXygpO2pIKCk7S0goKTtBMCgpO21fKCk7UUgoKTtJSCgpO1pIKCk7JFcoKTtWVygpO2ZsKCk7RXEoKTtBNSgpO1pfKCk7cjUoKTtsNSgpO0RxKCl9KTt2YXIgTHE9TWkoSmk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEppLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtKaS5CTEFOS19VUkw9SmkucmVsYXRpdmVGaXJzdENoYXJhY3RlcnM9Smkud2hpdGVzcGFjZUVzY2FwZUNoYXJzUmVnZXg9SmkudXJsU2NoZW1lUmVnZXg9SmkuY3RybENoYXJhY3RlcnNSZWdleD1KaS5odG1sQ3RybEVudGl0eVJlZ2V4PUppLmh0bWxFbnRpdGllc1JlZ2V4PUppLmludmFsaWRQcm90b2NvbFJlZ2V4PXZvaWQgMDtKaS5pbnZhbGlkUHJvdG9jb2xSZWdleD0vXihbXlx3XSopKGphdmFzY3JpcHR8ZGF0YXx2YnNjcmlwdCkvaW07SmkuaHRtbEVudGl0aWVzUmVnZXg9LyYjKFx3KykoXlx3fDspPy9nO0ppLmh0bWxDdHJsRW50aXR5UmVnZXg9LyYobmV3bGluZXx0YWIpOy9naTtKaS5jdHJsQ2hhcmFjdGVyc1JlZ2V4PS9bXHUwMDAwLVx1MDAxRlx1MDA3Ri1cdTAwOUZcdTIwMDAtXHUyMDBEXHVGRUZGXS9naW07SmkudXJsU2NoZW1lUmVnZXg9L14uKyg6fCZjb2xvbjspL2dpbTtKaS53aGl0ZXNwYWNlRXNjYXBlQ2hhcnNSZWdleD0vKFxcfCU1W2NDXSkoKCUoNltlRV18NzJ8NzQpKXxbbnJ0XSkvZztKaS5yZWxhdGl2ZUZpcnN0Q2hhcmFjdGVycz1bIi4iLCIvIl07SmkuQkxBTktfVVJMPSJhYm91dDpibGFuayJ9KTt2YXIgejA9TWkoVzU9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFc1LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtXNS5zYW5pdGl6ZVVybD12b2lkIDA7dmFyIEFhPUxxKCk7ZnVuY3Rpb24gSGtlKHQpe3JldHVybiBBYS5yZWxhdGl2ZUZpcnN0Q2hhcmFjdGVycy5pbmRleE9mKHRbMF0pPi0xfW8oSGtlLCJpc1JlbGF0aXZlVXJsV2l0aG91dFByb3RvY29sIik7ZnVuY3Rpb24gV2tlKHQpe3ZhciBlPXQucmVwbGFjZShBYS5jdHJsQ2hhcmFjdGVyc1JlZ2V4LCIiKTtyZXR1cm4gZS5yZXBsYWNlKEFhLmh0bWxFbnRpdGllc1JlZ2V4LGZ1bmN0aW9uKHIsbil7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUobil9KX1vKFdrZSwiZGVjb2RlSHRtbENoYXJhY3RlcnMiKTtmdW5jdGlvbiBxa2UodCl7cmV0dXJuIFVSTC5jYW5QYXJzZSh0KX1vKHFrZSwiaXNWYWxpZFVybCIpO2Z1bmN0aW9uIFJxKHQpe3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHQpfWNhdGNoe3JldHVybiB0fX1vKFJxLCJkZWNvZGVVUkkiKTtmdW5jdGlvbiBZa2UodCl7aWYoIXQpcmV0dXJuIEFhLkJMQU5LX1VSTDt2YXIgZSxyPVJxKHQudHJpbSgpKTtkbyByPVdrZShyKS5yZXBsYWNlKEFhLmh0bWxDdHJsRW50aXR5UmVnZXgsIiIpLnJlcGxhY2UoQWEuY3RybENoYXJhY3RlcnNSZWdleCwiIikucmVwbGFjZShBYS53aGl0ZXNwYWNlRXNjYXBlQ2hhcnNSZWdleCwiIikudHJpbSgpLHI9UnEociksZT1yLm1hdGNoKEFhLmN0cmxDaGFyYWN0ZXJzUmVnZXgpfHxyLm1hdGNoKEFhLmh0bWxFbnRpdGllc1JlZ2V4KXx8ci5tYXRjaChBYS5odG1sQ3RybEVudGl0eVJlZ2V4KXx8ci5tYXRjaChBYS53aGl0ZXNwYWNlRXNjYXBlQ2hhcnNSZWdleCk7d2hpbGUoZSYmZS5sZW5ndGg+MCk7dmFyIG49cjtpZighbilyZXR1cm4gQWEuQkxBTktfVVJMO2lmKEhrZShuKSlyZXR1cm4gbjt2YXIgaT1uLnRyaW1TdGFydCgpLGE9aS5tYXRjaChBYS51cmxTY2hlbWVSZWdleCk7aWYoIWEpcmV0dXJuIG47dmFyIHM9YVswXS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtpZihBYS5pbnZhbGlkUHJvdG9jb2xSZWdleC50ZXN0KHMpKXJldHVybiBBYS5CTEFOS19VUkw7dmFyIGw9aS5yZXBsYWNlKC9cXC9nLCIvIik7aWYocz09PSJtYWlsdG86Inx8cy5pbmNsdWRlcygiOi8vIikpcmV0dXJuIGw7aWYocz09PSJodHRwOiJ8fHM9PT0iaHR0cHM6Iil7aWYoIXFrZShsKSlyZXR1cm4gQWEuQkxBTktfVVJMO3ZhciB1PW5ldyBVUkwobCk7cmV0dXJuIHUucHJvdG9jb2w9dS5wcm90b2NvbC50b0xvd2VyQ2FzZSgpLHUuaG9zdG5hbWU9dS5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpLHUudG9TdHJpbmcoKX1yZXR1cm4gbH1vKFlrZSwic2FuaXRpemVVcmwiKTtXNS5zYW5pdGl6ZVVybD1Za2V9KTt2YXIgeDksa2QscTUsTnEsTXEsSXEsVGwsSHYsV3Y9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt4OT1TYSh6MCgpLDEpO2dyKCk7a2Q9bygodCxlKT0+e2xldCByPXQuYXBwZW5kKCJyZWN0Iik7aWYoci5hdHRyKCJ4IixlLngpLHIuYXR0cigieSIsZS55KSxyLmF0dHIoImZpbGwiLGUuZmlsbCksci5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKSxyLmF0dHIoIndpZHRoIixlLndpZHRoKSxyLmF0dHIoImhlaWdodCIsZS5oZWlnaHQpLGUubmFtZSYmci5hdHRyKCJuYW1lIixlLm5hbWUpLGUucngmJnIuYXR0cigicngiLGUucngpLGUucnkmJnIuYXR0cigicnkiLGUucnkpLGUuYXR0cnMhPT12b2lkIDApZm9yKGxldCBuIGluIGUuYXR0cnMpci5hdHRyKG4sZS5hdHRyc1tuXSk7cmV0dXJuIGUuY2xhc3MmJnIuYXR0cigiY2xhc3MiLGUuY2xhc3MpLHJ9LCJkcmF3UmVjdCIpLHE1PW8oKHQsZSk9PntsZXQgcj17eDplLnN0YXJ0eCx5OmUuc3RhcnR5LHdpZHRoOmUuc3RvcHgtZS5zdGFydHgsaGVpZ2h0OmUuc3RvcHktZS5zdGFydHksZmlsbDplLmZpbGwsc3Ryb2tlOmUuc3Ryb2tlLGNsYXNzOiJyZWN0In07a2QodCxyKS5sb3dlcigpfSwiZHJhd0JhY2tncm91bmRSZWN0IiksTnE9bygodCxlKT0+e2xldCByPWUudGV4dC5yZXBsYWNlKG5kLCIgIiksbj10LmFwcGVuZCgidGV4dCIpO24uYXR0cigieCIsZS54KSxuLmF0dHIoInkiLGUueSksbi5hdHRyKCJjbGFzcyIsImxlZ2VuZCIpLG4uc3R5bGUoInRleHQtYW5jaG9yIixlLmFuY2hvciksZS5jbGFzcyYmbi5hdHRyKCJjbGFzcyIsZS5jbGFzcyk7bGV0IGk9bi5hcHBlbmQoInRzcGFuIik7cmV0dXJuIGkuYXR0cigieCIsZS54K2UudGV4dE1hcmdpbioyKSxpLnRleHQociksbn0sImRyYXdUZXh0IiksTXE9bygodCxlLHIsbik9PntsZXQgaT10LmFwcGVuZCgiaW1hZ2UiKTtpLmF0dHIoIngiLGUpLGkuYXR0cigieSIscik7bGV0IGE9KDAseDkuc2FuaXRpemVVcmwpKG4pO2kuYXR0cigieGxpbms6aHJlZiIsYSl9LCJkcmF3SW1hZ2UiKSxJcT1vKCh0LGUscixuKT0+e2xldCBpPXQuYXBwZW5kKCJ1c2UiKTtpLmF0dHIoIngiLGUpLGkuYXR0cigieSIscik7bGV0IGE9KDAseDkuc2FuaXRpemVVcmwpKG4pO2kuYXR0cigieGxpbms6aHJlZiIsYCMke2F9YCl9LCJkcmF3RW1iZWRkZWRJbWFnZSIpLFRsPW8oKCk9Pih7eDowLHk6MCx3aWR0aDoxMDAsaGVpZ2h0OjEwMCxmaWxsOiIjRURGMkFFIixzdHJva2U6IiM2NjYiLGFuY2hvcjoic3RhcnQiLHJ4OjAscnk6MH0pLCJnZXROb3RlUmVjdCIpLEh2PW8oKCk9Pih7eDowLHk6MCx3aWR0aDoxMDAsaGVpZ2h0OjEwMCwidGV4dC1hbmNob3IiOiJzdGFydCIsc3R5bGU6IiM2NjYiLHRleHRNYXJnaW46MCxyeDowLHJ5OjAsdHNwYW46ITB9KSwiZ2V0VGV4dE9iaiIpfSk7dmFyIE9xLGI5LFBxLFhrZSxqa2UsS2tlLFFrZSxaa2UsSmtlLGVFZSx0RWUsckVlLG5FZSxpRWUsYUVlLFR1LGtsLEJxPU4oKCk9PnsidXNlIHN0cmljdCI7Z3IoKTtXdigpO09xPVNhKHowKCksMSksYjk9byhmdW5jdGlvbih0LGUpe3JldHVybiBrZCh0LGUpfSwiZHJhd1JlY3QiKSxQcT1vKGZ1bmN0aW9uKHQsZSxyLG4saSxhKXtsZXQgcz10LmFwcGVuZCgiaW1hZ2UiKTtzLmF0dHIoIndpZHRoIixlKSxzLmF0dHIoImhlaWdodCIscikscy5hdHRyKCJ4IixuKSxzLmF0dHIoInkiLGkpO2xldCBsPWEuc3RhcnRzV2l0aCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0Iik/YTooMCxPcS5zYW5pdGl6ZVVybCkoYSk7cy5hdHRyKCJ4bGluazpocmVmIixsKX0sImRyYXdJbWFnZSIpLFhrZT1vKCh0LGUscik9PntsZXQgbj10LmFwcGVuZCgiZyIpLGk9MDtmb3IobGV0IGEgb2YgZSl7bGV0IHM9YS50ZXh0Q29sb3I/YS50ZXh0Q29sb3I6IiM0NDQ0NDQiLGw9YS5saW5lQ29sb3I/YS5saW5lQ29sb3I6IiM0NDQ0NDQiLHU9YS5vZmZzZXRYP3BhcnNlSW50KGEub2Zmc2V0WCk6MCxoPWEub2Zmc2V0WT9wYXJzZUludChhLm9mZnNldFkpOjAsZj0iIjtpZihpPT09MCl7bGV0IHA9bi5hcHBlbmQoImxpbmUiKTtwLmF0dHIoIngxIixhLnN0YXJ0UG9pbnQueCkscC5hdHRyKCJ5MSIsYS5zdGFydFBvaW50LnkpLHAuYXR0cigieDIiLGEuZW5kUG9pbnQueCkscC5hdHRyKCJ5MiIsYS5lbmRQb2ludC55KSxwLmF0dHIoInN0cm9rZS13aWR0aCIsIjEiKSxwLmF0dHIoInN0cm9rZSIsbCkscC5zdHlsZSgiZmlsbCIsIm5vbmUiKSxhLnR5cGUhPT0icmVsX2IiJiZwLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitmKyIjYXJyb3doZWFkKSIpLChhLnR5cGU9PT0iYmlyZWwifHxhLnR5cGU9PT0icmVsX2IiKSYmcC5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitmKyIjYXJyb3dlbmQpIiksaT0tMX1lbHNle2xldCBwPW4uYXBwZW5kKCJwYXRoIik7cC5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjEiKS5hdHRyKCJzdHJva2UiLGwpLmF0dHIoImQiLCJNc3RhcnR4LHN0YXJ0eSBRY29udHJvbHgsY29udHJvbHkgc3RvcHgsc3RvcHkgIi5yZXBsYWNlQWxsKCJzdGFydHgiLGEuc3RhcnRQb2ludC54KS5yZXBsYWNlQWxsKCJzdGFydHkiLGEuc3RhcnRQb2ludC55KS5yZXBsYWNlQWxsKCJjb250cm9seCIsYS5zdGFydFBvaW50LngrKGEuZW5kUG9pbnQueC1hLnN0YXJ0UG9pbnQueCkvMi0oYS5lbmRQb2ludC54LWEuc3RhcnRQb2ludC54KS80KS5yZXBsYWNlQWxsKCJjb250cm9seSIsYS5zdGFydFBvaW50LnkrKGEuZW5kUG9pbnQueS1hLnN0YXJ0UG9pbnQueSkvMikucmVwbGFjZUFsbCgic3RvcHgiLGEuZW5kUG9pbnQueCkucmVwbGFjZUFsbCgic3RvcHkiLGEuZW5kUG9pbnQueSkpLGEudHlwZSE9PSJyZWxfYiImJnAuYXR0cigibWFya2VyLWVuZCIsInVybCgiK2YrIiNhcnJvd2hlYWQpIiksKGEudHlwZT09PSJiaXJlbCJ8fGEudHlwZT09PSJyZWxfYiIpJiZwLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK2YrIiNhcnJvd2VuZCkiKX1sZXQgZD1yLm1lc3NhZ2VGb250KCk7VHUocikoYS5sYWJlbC50ZXh0LG4sTWF0aC5taW4oYS5zdGFydFBvaW50LngsYS5lbmRQb2ludC54KStNYXRoLmFicyhhLmVuZFBvaW50LngtYS5zdGFydFBvaW50LngpLzIrdSxNYXRoLm1pbihhLnN0YXJ0UG9pbnQueSxhLmVuZFBvaW50LnkpK01hdGguYWJzKGEuZW5kUG9pbnQueS1hLnN0YXJ0UG9pbnQueSkvMitoLGEubGFiZWwud2lkdGgsYS5sYWJlbC5oZWlnaHQse2ZpbGw6c30sZCksYS50ZWNobiYmYS50ZWNobi50ZXh0IT09IiImJihkPXIubWVzc2FnZUZvbnQoKSxUdShyKSgiWyIrYS50ZWNobi50ZXh0KyJdIixuLE1hdGgubWluKGEuc3RhcnRQb2ludC54LGEuZW5kUG9pbnQueCkrTWF0aC5hYnMoYS5lbmRQb2ludC54LWEuc3RhcnRQb2ludC54KS8yK3UsTWF0aC5taW4oYS5zdGFydFBvaW50LnksYS5lbmRQb2ludC55KStNYXRoLmFicyhhLmVuZFBvaW50LnktYS5zdGFydFBvaW50LnkpLzIrci5tZXNzYWdlRm9udFNpemUrNStoLE1hdGgubWF4KGEubGFiZWwud2lkdGgsYS50ZWNobi53aWR0aCksYS50ZWNobi5oZWlnaHQse2ZpbGw6cywiZm9udC1zdHlsZSI6Iml0YWxpYyJ9LGQpKX19LCJkcmF3UmVscyIpLGprZT1vKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj10LmFwcGVuZCgiZyIpLGk9ZS5iZ0NvbG9yP2UuYmdDb2xvcjoibm9uZSIsYT1lLmJvcmRlckNvbG9yP2UuYm9yZGVyQ29sb3I6IiM0NDQ0NDQiLHM9ZS5mb250Q29sb3I/ZS5mb250Q29sb3I6ImJsYWNrIixsPXsic3Ryb2tlLXdpZHRoIjoxLCJzdHJva2UtZGFzaGFycmF5IjoiNy4wLDcuMCJ9O2Uubm9kZVR5cGUmJihsPXsic3Ryb2tlLXdpZHRoIjoxfSk7bGV0IHU9e3g6ZS54LHk6ZS55LGZpbGw6aSxzdHJva2U6YSx3aWR0aDplLndpZHRoLGhlaWdodDplLmhlaWdodCxyeDoyLjUscnk6Mi41LGF0dHJzOmx9O2I5KG4sdSk7bGV0IGg9ci5ib3VuZGFyeUZvbnQoKTtoLmZvbnRXZWlnaHQ9ImJvbGQiLGguZm9udFNpemU9aC5mb250U2l6ZSsyLGguZm9udENvbG9yPXMsVHUocikoZS5sYWJlbC50ZXh0LG4sZS54LGUueStlLmxhYmVsLlksZS53aWR0aCxlLmhlaWdodCx7ZmlsbDoiIzQ0NDQ0NCJ9LGgpLGUudHlwZSYmZS50eXBlLnRleHQhPT0iIiYmKGg9ci5ib3VuZGFyeUZvbnQoKSxoLmZvbnRDb2xvcj1zLFR1KHIpKGUudHlwZS50ZXh0LG4sZS54LGUueStlLnR5cGUuWSxlLndpZHRoLGUuaGVpZ2h0LHtmaWxsOiIjNDQ0NDQ0In0saCkpLGUuZGVzY3ImJmUuZGVzY3IudGV4dCE9PSIiJiYoaD1yLmJvdW5kYXJ5Rm9udCgpLGguZm9udFNpemU9aC5mb250U2l6ZS0yLGguZm9udENvbG9yPXMsVHUocikoZS5kZXNjci50ZXh0LG4sZS54LGUueStlLmRlc2NyLlksZS53aWR0aCxlLmhlaWdodCx7ZmlsbDoiIzQ0NDQ0NCJ9LGgpKX0sImRyYXdCb3VuZGFyeSIpLEtrZT1vKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj1lLmJnQ29sb3I/ZS5iZ0NvbG9yOnJbZS50eXBlQzRTaGFwZS50ZXh0KyJfYmdfY29sb3IiXSxpPWUuYm9yZGVyQ29sb3I/ZS5ib3JkZXJDb2xvcjpyW2UudHlwZUM0U2hhcGUudGV4dCsiX2JvcmRlcl9jb2xvciJdLGE9ZS5mb250Q29sb3I/ZS5mb250Q29sb3I6IiNGRkZGRkYiLHM9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBREFBQUFBd0NBSUFBQURZWUc3UUFBQUNEMGxFUVZSNFh1MllvVTRFTVJDR1QrNGo4QWk4QWhhSDRRSGdBVWpRdUZNRUNVZ01JVWd3SkFnTWhnUXNBWVVpSkNpUUlCQlkrRUlUc2pmVGRtZTZWMjR2NGM4dnlHYmIrWmpPdE4wYk5jdmpRWG1rSDgzV3ZZQld0bzZQTG02djdwN3VIMS93MmZYRCtQQnljWDFQdjJsM0lkRG0vdm43eCtkWFFpQXViUnpvVVJhN2dSWldkMGlHUklpSmJPbmhuZllCUVpOSmpOYnV5WTJlSkc4ZmtERTNiYkc0ZXA2TUhVQXNnWXhtRTNuVnM2VnNCV0pTR2Njc09sRlBtTElWaU16TE9CN3BDVk8yQXRISk1vaEg3Rmg2enFpdFFLN20wckp2QVZZZ0djRXBlLy9QTGREejY1c000cEY5TjdJQ2NYREtJQjVOdjZqN3REME5vU2RNMlFyVTlHZzBld0UxTHFCaEhSM0JCZHZqMnZhcG5pZGpIeEQvcTZ2ZDdQdmhyMzFBd2NZOGVYTVRYQUtFQ1paSkZYdUVxMjdhTGdRSzV1TE1vaENlbkdHdUdld094U2pCdllCcWVHNkIrTnFpYmxnZ2RqbmMrWlhEeStGTkZwRnp3NzZPM1VCQVJPdVhoNkZvaUFjZjVnOWVUdlVnenkwbldnNkk4Y1hIUlVwZzViT1ZCQ28rS0RwRmFqT2YyM0dnUG1lN1JTUStsYWNJRU5VZ0o2Z2cxazZIamdPbHFuTHFpcDR0RXVodjBoTkVNWFVEMGNseVhFM3A2cFpBMFMybm52VGxYd0xKRVpXbGI3Y1RRSDErVVNnVE40VmhBZW5tL3dlYTFPQ0FPbXFvNmZFMVdDYjlXU0tCYWgrcmJVV1BXQW1FMlJ2azBBcGlCNDVlT3lOQXpVOHhjVHZqOEt2a0tFb09hSVllSE5BM1p1eWdBdkZNVU8wQUFBQUFTVVZPUks1Q1lJST0iO3N3aXRjaChlLnR5cGVDNFNoYXBlLnRleHQpe2Nhc2UicGVyc29uIjpzPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQURBQUFBQXdDQUlBQUFEWVlHN1FBQUFDRDBsRVFWUjRYdTJZb1U0RU1SQ0dUKzRqOEFpOEFoYUg0UUhnQVVqUXVGTUVDVWdNSVVnd0pBZ01oZ1FzQVlVaUpDaVFJQkJZK0VJVHNqZlRkbWU2VjI0djRjOHZ5R2JiK1pqT3ROMGJOY3ZqUVhta0g4M1d2WUJXdG82UExtNnY3cDd1SDEvdzJmWEQrUEJ5Y1gxUHYybDNJZERtL3ZuN3grZFhRaUF1YlJ6b1VSYTdnUlpXZDBpR1JJaUpiT25obmZZQlFaTkpqTmJ1eVkyZUpHOGZrREUzYmJHNGVwNk1IVUFzZ1l4bUUzblZzNlZzQldKU0djY3NPbEZQbUxJVmlNekxPQjdwQ1ZPMkF0SEpNb2hIN0ZoNnpxaXRRSzdtMHJKdkFWWWdHY0VwZS8vUExkRHo2NXNNNHBGOU43SUNjWERLSUI1TnY2ajd0RDBOb1NkTTJRclU5R2cwZXdFMUxxQmhIUjNCQmR2ajJ2YXBuaWRqSHhEL3E2dmQ3UHZocjMxQXdjWThlWE1UWEFLRUNaWkpGWHVFcTI3YUxnUUs1dUxNb2hDZW5HR3VHZXdPeFNqQnZZQnFlRzZCK05xaWJsZ2dkam5jK1pYRHkrRk5GcEZ6dzc2TzNVQkFST3VYaDZGb2lBY2Y1ZzllVHZVZ3p5MG5XZzZJOGNYSFJVcGc1Yk9WQkNvK0tEcEZhak9mMjNHZ1BtZTdSU1ErbGFjSUVOVWdKNmdnMWs2SGpnT2xxbkxxaXA0dEV1aHYwaE5FTVhVRDBjbHlYRTNwNnBaQTBTMm5udlRsWHdMSkVaV2xiN2NUUUgxK1VTZ1RONFZoQWVubS93ZWExT0NBT21xbzZmRTFXQ2I5V1NLQmFoK3JiVVdQV0FtRTJSdmswQXBpQjQ1ZU95TkF6VTh4Y1R2ajhLdmtLRW9PYUlZZUhOQTNadXlnQXZGTVVPMEFBQUFBU1VWT1JLNUNZSUk9IjticmVhaztjYXNlImV4dGVybmFsX3BlcnNvbiI6cz0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFEQUFBQUF3Q0FJQUFBRFlZRzdRQUFBQjZFbEVRVlI0WHUyWUxZK0VNQkNHOStkV3IwYWowV2cwR28xR28wK2o4WGR2MnVUQ3Z2MWdwdDBlYkhLUHVoRGFlVzQ2MDVaOW1Kdng0QWRYVXlUVWRkMDh6K3U2ZmxtV1pSbkhzV2thZms5RHB0QXdEUHUrZjBlQVl0dTJQRWFHV3VqNWZDSVpyQkFDMmVMQkFuUkNzRWtreG1lYUpwN2lESjJRTURkSHNMZzhTeEtGRUphQW84bEFYbm11T0ZJaFRNcHh4S0FUZWJvNFVpRmtudU5vNE9uaVNJWFF5UnhFQTNZc25qR0NWRWpWWEQ3eUxVQXF4QkdVeVB2L1k0VzJiZU1nR3VTN2tWUUlCeWNIMGZEK29pNXBlelFFVHhkSEttUUtHazFlUUVZbGRLK2p3NUd4UGZaOXo3TWswUW5oZjFXMW0zdy8vRVVuNUJEbVNac2JSNDRRUUxCRXFyQkhxT3JtU0thUUF4ZG5MQXJDcnhaY003QTdaS3M0aW9ScThMRkMrTnBDM1dDQkpzdnBWdzVlZG05aUVYRnV5TmZ4WEFnU3dmckZRMWMwaU5kYThBZGVqdlVnbmt0T3RKUVF4bWNmRnpHZ2xjNVdWQ2o3b0RnRnFVMThib2VGU3M1MkNVaDhMRThCSVZRRFQxQUJyQjBIdGdTRVlsWDVkb0puQ3d2OVRYb2NLQ2FLYm53aGRES1BxNGxmM1N3VTNITHE0Vi8rV1loSFZNYS8zYjRJbGZ5aWtBZHVDa2NCYzdtUTMvei9RcS9jVHVpa2hrekIxMkFlL21jSkM5VStWbzhFajFnV0F0Z2JlR2dGc0FNSHI1MEJJV09MQ2JlenZocEJGVWRZNkVKdUovUURXMFhvTVg2MHpaMEFBQUFBU1VWT1JLNUNZSUk9IjticmVha31sZXQgbD10LmFwcGVuZCgiZyIpO2wuYXR0cigiY2xhc3MiLCJwZXJzb24tbWFuIik7bGV0IHU9VGwoKTtzd2l0Y2goZS50eXBlQzRTaGFwZS50ZXh0KXtjYXNlInBlcnNvbiI6Y2FzZSJleHRlcm5hbF9wZXJzb24iOmNhc2Uic3lzdGVtIjpjYXNlImV4dGVybmFsX3N5c3RlbSI6Y2FzZSJjb250YWluZXIiOmNhc2UiZXh0ZXJuYWxfY29udGFpbmVyIjpjYXNlImNvbXBvbmVudCI6Y2FzZSJleHRlcm5hbF9jb21wb25lbnQiOnUueD1lLngsdS55PWUueSx1LmZpbGw9bix1LndpZHRoPWUud2lkdGgsdS5oZWlnaHQ9ZS5oZWlnaHQsdS5zdHJva2U9aSx1LnJ4PTIuNSx1LnJ5PTIuNSx1LmF0dHJzPXsic3Ryb2tlLXdpZHRoIjouNX0sYjkobCx1KTticmVhaztjYXNlInN5c3RlbV9kYiI6Y2FzZSJleHRlcm5hbF9zeXN0ZW1fZGIiOmNhc2UiY29udGFpbmVyX2RiIjpjYXNlImV4dGVybmFsX2NvbnRhaW5lcl9kYiI6Y2FzZSJjb21wb25lbnRfZGIiOmNhc2UiZXh0ZXJuYWxfY29tcG9uZW50X2RiIjpsLmFwcGVuZCgicGF0aCIpLmF0dHIoImZpbGwiLG4pLmF0dHIoInN0cm9rZS13aWR0aCIsIjAuNSIpLmF0dHIoInN0cm9rZSIsaSkuYXR0cigiZCIsIk1zdGFydHgsc3RhcnR5YzAsLTEwIGhhbGYsLTEwIGhhbGYsLTEwYzAsMCBoYWxmLDAgaGFsZiwxMGwwLGhlaWdodGMwLDEwIC1oYWxmLDEwIC1oYWxmLDEwYzAsMCAtaGFsZiwwIC1oYWxmLC0xMGwwLC1oZWlnaHQiLnJlcGxhY2VBbGwoInN0YXJ0eCIsZS54KS5yZXBsYWNlQWxsKCJzdGFydHkiLGUueSkucmVwbGFjZUFsbCgiaGFsZiIsZS53aWR0aC8yKS5yZXBsYWNlQWxsKCJoZWlnaHQiLGUuaGVpZ2h0KSksbC5hcHBlbmQoInBhdGgiKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjAuNSIpLmF0dHIoInN0cm9rZSIsaSkuYXR0cigiZCIsIk1zdGFydHgsc3RhcnR5YzAsMTAgaGFsZiwxMCBoYWxmLDEwYzAsMCBoYWxmLDAgaGFsZiwtMTAiLnJlcGxhY2VBbGwoInN0YXJ0eCIsZS54KS5yZXBsYWNlQWxsKCJzdGFydHkiLGUueSkucmVwbGFjZUFsbCgiaGFsZiIsZS53aWR0aC8yKSk7YnJlYWs7Y2FzZSJzeXN0ZW1fcXVldWUiOmNhc2UiZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlIjpjYXNlImNvbnRhaW5lcl9xdWV1ZSI6Y2FzZSJleHRlcm5hbF9jb250YWluZXJfcXVldWUiOmNhc2UiY29tcG9uZW50X3F1ZXVlIjpjYXNlImV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZSI6bC5hcHBlbmQoInBhdGgiKS5hdHRyKCJmaWxsIixuKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIwLjUiKS5hdHRyKCJzdHJva2UiLGkpLmF0dHIoImQiLCJNc3RhcnR4LHN0YXJ0eWx3aWR0aCwwYzUsMCA1LGhhbGYgNSxoYWxmYzAsMCAwLGhhbGYgLTUsaGFsZmwtd2lkdGgsMGMtNSwwIC01LC1oYWxmIC01LC1oYWxmYzAsMCAwLC1oYWxmIDUsLWhhbGYiLnJlcGxhY2VBbGwoInN0YXJ0eCIsZS54KS5yZXBsYWNlQWxsKCJzdGFydHkiLGUueSkucmVwbGFjZUFsbCgid2lkdGgiLGUud2lkdGgpLnJlcGxhY2VBbGwoImhhbGYiLGUuaGVpZ2h0LzIpKSxsLmFwcGVuZCgicGF0aCIpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMC41IikuYXR0cigic3Ryb2tlIixpKS5hdHRyKCJkIiwiTXN0YXJ0eCxzdGFydHljLTUsMCAtNSxoYWxmIC01LGhhbGZjMCxoYWxmIDUsaGFsZiA1LGhhbGYiLnJlcGxhY2VBbGwoInN0YXJ0eCIsZS54K2Uud2lkdGgpLnJlcGxhY2VBbGwoInN0YXJ0eSIsZS55KS5yZXBsYWNlQWxsKCJoYWxmIixlLmhlaWdodC8yKSk7YnJlYWt9bGV0IGg9YUVlKHIsZS50eXBlQzRTaGFwZS50ZXh0KTtzd2l0Y2gobC5hcHBlbmQoInRleHQiKS5hdHRyKCJmaWxsIixhKS5hdHRyKCJmb250LWZhbWlseSIsaC5mb250RmFtaWx5KS5hdHRyKCJmb250LXNpemUiLGguZm9udFNpemUtMikuYXR0cigiZm9udC1zdHlsZSIsIml0YWxpYyIpLmF0dHIoImxlbmd0aEFkanVzdCIsInNwYWNpbmciKS5hdHRyKCJ0ZXh0TGVuZ3RoIixlLnR5cGVDNFNoYXBlLndpZHRoKS5hdHRyKCJ4IixlLngrZS53aWR0aC8yLWUudHlwZUM0U2hhcGUud2lkdGgvMikuYXR0cigieSIsZS55K2UudHlwZUM0U2hhcGUuWSkudGV4dCgiPDwiK2UudHlwZUM0U2hhcGUudGV4dCsiPj4iKSxlLnR5cGVDNFNoYXBlLnRleHQpe2Nhc2UicGVyc29uIjpjYXNlImV4dGVybmFsX3BlcnNvbiI6UHEobCw0OCw0OCxlLngrZS53aWR0aC8yLTI0LGUueStlLmltYWdlLlkscyk7YnJlYWt9bGV0IGY9cltlLnR5cGVDNFNoYXBlLnRleHQrIkZvbnQiXSgpO3JldHVybiBmLmZvbnRXZWlnaHQ9ImJvbGQiLGYuZm9udFNpemU9Zi5mb250U2l6ZSsyLGYuZm9udENvbG9yPWEsVHUocikoZS5sYWJlbC50ZXh0LGwsZS54LGUueStlLmxhYmVsLlksZS53aWR0aCxlLmhlaWdodCx7ZmlsbDphfSxmKSxmPXJbZS50eXBlQzRTaGFwZS50ZXh0KyJGb250Il0oKSxmLmZvbnRDb2xvcj1hLGUudGVjaG4mJmUudGVjaG4/LnRleHQhPT0iIj9UdShyKShlLnRlY2huLnRleHQsbCxlLngsZS55K2UudGVjaG4uWSxlLndpZHRoLGUuaGVpZ2h0LHtmaWxsOmEsImZvbnQtc3R5bGUiOiJpdGFsaWMifSxmKTplLnR5cGUmJmUudHlwZS50ZXh0IT09IiImJlR1KHIpKGUudHlwZS50ZXh0LGwsZS54LGUueStlLnR5cGUuWSxlLndpZHRoLGUuaGVpZ2h0LHtmaWxsOmEsImZvbnQtc3R5bGUiOiJpdGFsaWMifSxmKSxlLmRlc2NyJiZlLmRlc2NyLnRleHQhPT0iIiYmKGY9ci5wZXJzb25Gb250KCksZi5mb250Q29sb3I9YSxUdShyKShlLmRlc2NyLnRleHQsbCxlLngsZS55K2UuZGVzY3IuWSxlLndpZHRoLGUuaGVpZ2h0LHtmaWxsOmF9LGYpKSxlLmhlaWdodH0sImRyYXdDNFNoYXBlIiksUWtlPW8oZnVuY3Rpb24odCl7dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoInN5bWJvbCIpLmF0dHIoImlkIiwiZGF0YWJhc2UiKS5hdHRyKCJmaWxsLXJ1bGUiLCJldmVub2RkIikuYXR0cigiY2xpcC1ydWxlIiwiZXZlbm9kZCIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInRyYW5zZm9ybSIsInNjYWxlKC41KSIpLmF0dHIoImQiLCJNMTIuMjU4LjAwMWwuMjU2LjAwNC4yNTUuMDA1LjI1My4wMDguMjUxLjAxLjI0OS4wMTIuMjQ3LjAxNS4yNDYuMDE2LjI0Mi4wMTkuMjQxLjAyLjIzOS4wMjMuMjM2LjAyNC4yMzMuMDI3LjIzMS4wMjguMjI5LjAzMS4yMjUuMDMyLjIyMy4wMzQuMjIuMDM2LjIxNy4wMzguMjE0LjA0LjIxMS4wNDEuMjA4LjA0My4yMDUuMDQ1LjIwMS4wNDYuMTk4LjA0OC4xOTQuMDUuMTkxLjA1MS4xODcuMDUzLjE4My4wNTQuMTguMDU2LjE3NS4wNTcuMTcyLjA1OS4xNjguMDYuMTYzLjA2MS4xNi4wNjMuMTU1LjA2NC4xNS4wNjYuMDc0LjAzMy4wNzMuMDMzLjA3MS4wMzQuMDcuMDM0LjA2OS4wMzUuMDY4LjAzNS4wNjcuMDM1LjA2Ni4wMzUuMDY0LjAzNi4wNjQuMDM2LjA2Mi4wMzYuMDYuMDM2LjA2LjAzNy4wNTguMDM3LjA1OC4wMzcuMDU1LjAzOC4wNTUuMDM4LjA1My4wMzguMDUyLjAzOC4wNTEuMDM5LjA1LjAzOS4wNDguMDM5LjA0Ny4wMzkuMDQ1LjA0LjA0NC4wNC4wNDMuMDQuMDQxLjA0LjA0LjA0MS4wMzkuMDQxLjAzNy4wNDEuMDM2LjA0MS4wMzQuMDQxLjAzMy4wNDIuMDMyLjA0Mi4wMy4wNDIuMDI5LjA0Mi4wMjcuMDQyLjAyNi4wNDMuMDI0LjA0My4wMjMuMDQzLjAyMS4wNDMuMDIuMDQzLjAxOC4wNDQuMDE3LjA0My4wMTUuMDQ0LjAxMy4wNDQuMDEyLjA0NC4wMTEuMDQ1LjAwOS4wNDQuMDA3LjA0NS4wMDYuMDQ1LjAwNC4wNDUuMDAyLjA0NS4wMDEuMDQ1djE3bC0uMDAxLjA0NS0uMDAyLjA0NS0uMDA0LjA0NS0uMDA2LjA0NS0uMDA3LjA0NS0uMDA5LjA0NC0uMDExLjA0NS0uMDEyLjA0NC0uMDEzLjA0NC0uMDE1LjA0NC0uMDE3LjA0My0uMDE4LjA0NC0uMDIuMDQzLS4wMjEuMDQzLS4wMjMuMDQzLS4wMjQuMDQzLS4wMjYuMDQzLS4wMjcuMDQyLS4wMjkuMDQyLS4wMy4wNDItLjAzMi4wNDItLjAzMy4wNDItLjAzNC4wNDEtLjAzNi4wNDEtLjAzNy4wNDEtLjAzOS4wNDEtLjA0LjA0MS0uMDQxLjA0LS4wNDMuMDQtLjA0NC4wNC0uMDQ1LjA0LS4wNDcuMDM5LS4wNDguMDM5LS4wNS4wMzktLjA1MS4wMzktLjA1Mi4wMzgtLjA1My4wMzgtLjA1NS4wMzgtLjA1NS4wMzgtLjA1OC4wMzctLjA1OC4wMzctLjA2LjAzNy0uMDYuMDM2LS4wNjIuMDM2LS4wNjQuMDM2LS4wNjQuMDM2LS4wNjYuMDM1LS4wNjcuMDM1LS4wNjguMDM1LS4wNjkuMDM1LS4wNy4wMzQtLjA3MS4wMzQtLjA3My4wMzMtLjA3NC4wMzMtLjE1LjA2Ni0uMTU1LjA2NC0uMTYuMDYzLS4xNjMuMDYxLS4xNjguMDYtLjE3Mi4wNTktLjE3NS4wNTctLjE4LjA1Ni0uMTgzLjA1NC0uMTg3LjA1My0uMTkxLjA1MS0uMTk0LjA1LS4xOTguMDQ4LS4yMDEuMDQ2LS4yMDUuMDQ1LS4yMDguMDQzLS4yMTEuMDQxLS4yMTQuMDQtLjIxNy4wMzgtLjIyLjAzNi0uMjIzLjAzNC0uMjI1LjAzMi0uMjI5LjAzMS0uMjMxLjAyOC0uMjMzLjAyNy0uMjM2LjAyNC0uMjM5LjAyMy0uMjQxLjAyLS4yNDIuMDE5LS4yNDYuMDE2LS4yNDcuMDE1LS4yNDkuMDEyLS4yNTEuMDEtLjI1My4wMDgtLjI1NS4wMDUtLjI1Ni4wMDQtLjI1OC4wMDEtLjI1OC0uMDAxLS4yNTYtLjAwNC0uMjU1LS4wMDUtLjI1My0uMDA4LS4yNTEtLjAxLS4yNDktLjAxMi0uMjQ3LS4wMTUtLjI0NS0uMDE2LS4yNDMtLjAxOS0uMjQxLS4wMi0uMjM4LS4wMjMtLjIzNi0uMDI0LS4yMzQtLjAyNy0uMjMxLS4wMjgtLjIyOC0uMDMxLS4yMjYtLjAzMi0uMjIzLS4wMzQtLjIyLS4wMzYtLjIxNy0uMDM4LS4yMTQtLjA0LS4yMTEtLjA0MS0uMjA4LS4wNDMtLjIwNC0uMDQ1LS4yMDEtLjA0Ni0uMTk4LS4wNDgtLjE5NS0uMDUtLjE5LS4wNTEtLjE4Ny0uMDUzLS4xODQtLjA1NC0uMTc5LS4wNTYtLjE3Ni0uMDU3LS4xNzItLjA1OS0uMTY3LS4wNi0uMTY0LS4wNjEtLjE1OS0uMDYzLS4xNTUtLjA2NC0uMTUxLS4wNjYtLjA3NC0uMDMzLS4wNzItLjAzMy0uMDcyLS4wMzQtLjA3LS4wMzQtLjA2OS0uMDM1LS4wNjgtLjAzNS0uMDY3LS4wMzUtLjA2Ni0uMDM1LS4wNjQtLjAzNi0uMDYzLS4wMzYtLjA2Mi0uMDM2LS4wNjEtLjAzNi0uMDYtLjAzNy0uMDU4LS4wMzctLjA1Ny0uMDM3LS4wNTYtLjAzOC0uMDU1LS4wMzgtLjA1My0uMDM4LS4wNTItLjAzOC0uMDUxLS4wMzktLjA0OS0uMDM5LS4wNDktLjAzOS0uMDQ2LS4wMzktLjA0Ni0uMDQtLjA0NC0uMDQtLjA0My0uMDQtLjA0MS0uMDQtLjA0LS4wNDEtLjAzOS0uMDQxLS4wMzctLjA0MS0uMDM2LS4wNDEtLjAzNC0uMDQxLS4wMzMtLjA0Mi0uMDMyLS4wNDItLjAzLS4wNDItLjAyOS0uMDQyLS4wMjctLjA0Mi0uMDI2LS4wNDMtLjAyNC0uMDQzLS4wMjMtLjA0My0uMDIxLS4wNDMtLjAyLS4wNDMtLjAxOC0uMDQ0LS4wMTctLjA0My0uMDE1LS4wNDQtLjAxMy0uMDQ0LS4wMTItLjA0NC0uMDExLS4wNDUtLjAwOS0uMDQ0LS4wMDctLjA0NS0uMDA2LS4wNDUtLjAwNC0uMDQ1LS4wMDItLjA0NS0uMDAxLS4wNDV2LTE3bC4wMDEtLjA0NS4wMDItLjA0NS4wMDQtLjA0NS4wMDYtLjA0NS4wMDctLjA0NS4wMDktLjA0NC4wMTEtLjA0NS4wMTItLjA0NC4wMTMtLjA0NC4wMTUtLjA0NC4wMTctLjA0My4wMTgtLjA0NC4wMi0uMDQzLjAyMS0uMDQzLjAyMy0uMDQzLjAyNC0uMDQzLjAyNi0uMDQzLjAyNy0uMDQyLjAyOS0uMDQyLjAzLS4wNDIuMDMyLS4wNDIuMDMzLS4wNDIuMDM0LS4wNDEuMDM2LS4wNDEuMDM3LS4wNDEuMDM5LS4wNDEuMDQtLjA0MS4wNDEtLjA0LjA0My0uMDQuMDQ0LS4wNC4wNDYtLjA0LjA0Ni0uMDM5LjA0OS0uMDM5LjA0OS0uMDM5LjA1MS0uMDM5LjA1Mi0uMDM4LjA1My0uMDM4LjA1NS0uMDM4LjA1Ni0uMDM4LjA1Ny0uMDM3LjA1OC0uMDM3LjA2LS4wMzcuMDYxLS4wMzYuMDYyLS4wMzYuMDYzLS4wMzYuMDY0LS4wMzYuMDY2LS4wMzUuMDY3LS4wMzUuMDY4LS4wMzUuMDY5LS4wMzUuMDctLjAzNC4wNzItLjAzNC4wNzItLjAzMy4wNzQtLjAzMy4xNTEtLjA2Ni4xNTUtLjA2NC4xNTktLjA2My4xNjQtLjA2MS4xNjctLjA2LjE3Mi0uMDU5LjE3Ni0uMDU3LjE3OS0uMDU2LjE4NC0uMDU0LjE4Ny0uMDUzLjE5LS4wNTEuMTk1LS4wNS4xOTgtLjA0OC4yMDEtLjA0Ni4yMDQtLjA0NS4yMDgtLjA0My4yMTEtLjA0MS4yMTQtLjA0LjIxNy0uMDM4LjIyLS4wMzYuMjIzLS4wMzQuMjI2LS4wMzIuMjI4LS4wMzEuMjMxLS4wMjguMjM0LS4wMjcuMjM2LS4wMjQuMjM4LS4wMjMuMjQxLS4wMi4yNDMtLjAxOS4yNDUtLjAxNi4yNDctLjAxNS4yNDktLjAxMi4yNTEtLjAxLjI1My0uMDA4LjI1NS0uMDA1LjI1Ni0uMDA0LjI1OC0uMDAxLjI1OC4wMDF6bS05LjI1OCAyMC40OTl2LjAxbC4wMDEuMDIxLjAwMy4wMjEuMDA0LjAyMi4wMDUuMDIxLjAwNi4wMjIuMDA3LjAyMi4wMDkuMDIzLjAxLjAyMi4wMTEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTUuMDIzLjAxNi4wMjQuMDE3LjAyMy4wMTguMDI0LjAxOS4wMjQuMDIxLjAyNC4wMjIuMDI1LjAyMy4wMjQuMDI0LjAyNS4wNTIuMDQ5LjA1Ni4wNS4wNjEuMDUxLjA2Ni4wNTEuMDcuMDUxLjA3NS4wNTEuMDc5LjA1Mi4wODQuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTcuMDUyLjEwMi4wNTEuMTA1LjA1Mi4xMS4wNTIuMTE0LjA1MS4xMTkuMDUxLjEyMy4wNTEuMTI3LjA1LjEzMS4wNS4xMzUuMDUuMTM5LjA0OC4xNDQuMDQ5LjE0Ny4wNDcuMTUyLjA0Ny4xNTUuMDQ3LjE2LjA0NS4xNjMuMDQ1LjE2Ny4wNDMuMTcxLjA0My4xNzYuMDQxLjE3OC4wNDEuMTgzLjAzOS4xODcuMDM5LjE5LjAzNy4xOTQuMDM1LjE5Ny4wMzUuMjAyLjAzMy4yMDQuMDMxLjIwOS4wMy4yMTIuMDI5LjIxNi4wMjcuMjE5LjAyNS4yMjIuMDI0LjIyNi4wMjEuMjMuMDIuMjMzLjAxOC4yMzYuMDE2LjI0LjAxNS4yNDMuMDEyLjI0Ni4wMS4yNDkuMDA4LjI1My4wMDUuMjU2LjAwNC4yNTkuMDAxLjI2LS4wMDEuMjU3LS4wMDQuMjU0LS4wMDUuMjUtLjAwOC4yNDctLjAxMS4yNDQtLjAxMi4yNDEtLjAxNC4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyMS4yMjYtLjAyMS4yMjQtLjAyNC4yMi0uMDI2LjIxNi0uMDI3LjIxMi0uMDI4LjIxLS4wMzEuMjA1LS4wMzEuMjAyLS4wMzQuMTk4LS4wMzQuMTk0LS4wMzYuMTkxLS4wMzcuMTg3LS4wMzkuMTgzLS4wNC4xNzktLjA0LjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQ0LjE2My0uMDQ1LjE2LS4wNDYuMTU1LS4wNDYuMTUyLS4wNDcuMTQ4LS4wNDguMTQzLS4wNDkuMTM5LS4wNDkuMTM2LS4wNS4xMzEtLjA1LjEyNi0uMDUuMTIzLS4wNTEuMTE4LS4wNTIuMTE0LS4wNTEuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1My4wODMtLjA1MS4wNzktLjA1Mi4wNzQtLjA1Mi4wNy0uMDUxLjA2NS0uMDUxLjA2LS4wNTEuMDU2LS4wNS4wNTEtLjA1LjAyMy0uMDI0LjAyMy0uMDI1LjAyMS0uMDI0LjAyLS4wMjQuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjQuMDE1LS4wMjMuMDE0LS4wMjQuMDEzLS4wMjMuMDEyLS4wMjMuMDEtLjAyMy4wMS0uMDIyLjAwOC0uMDIyLjAwNi0uMDIyLjAwNi0uMDIyLjAwNC0uMDIyLjAwNC0uMDIxLjAwMS0uMDIxLjAwMS0uMDIxdi00LjEyN2wtLjA3Ny4wNTUtLjA4LjA1My0uMDgzLjA1NC0uMDg1LjA1My0uMDg3LjA1Mi0uMDkuMDUyLS4wOTMuMDUxLS4wOTUuMDUtLjA5Ny4wNS0uMS4wNDktLjEwMi4wNDktLjEwNS4wNDgtLjEwNi4wNDctLjEwOS4wNDctLjExMS4wNDYtLjExNC4wNDUtLjExNS4wNDUtLjExOC4wNDQtLjEyLjA0My0uMTIyLjA0Mi0uMTI0LjA0Mi0uMTI2LjA0MS0uMTI4LjA0LS4xMy4wNC0uMTMyLjAzOC0uMTM0LjAzOC0uMTM1LjAzNy0uMTM4LjAzNy0uMTM5LjAzNS0uMTQyLjAzNS0uMTQzLjAzNC0uMTQ0LjAzMy0uMTQ3LjAzMi0uMTQ4LjAzMS0uMTUuMDMtLjE1MS4wMy0uMTUzLjAyOS0uMTU0LjAyNy0uMTU2LjAyNy0uMTU4LjAyNi0uMTU5LjAyNS0uMTYxLjAyNC0uMTYyLjAyMy0uMTYzLjAyMi0uMTY1LjAyMS0uMTY2LjAyLS4xNjcuMDE5LS4xNjkuMDE4LS4xNjkuMDE3LS4xNzEuMDE2LS4xNzMuMDE1LS4xNzMuMDE0LS4xNzUuMDEzLS4xNzUuMDEyLS4xNzcuMDExLS4xNzguMDEtLjE3OS4wMDgtLjE3OS4wMDgtLjE4MS4wMDYtLjE4Mi4wMDUtLjE4Mi4wMDQtLjE4NC4wMDMtLjE4NC4wMDJoLS4zN2wtLjE4NC0uMDAyLS4xODQtLjAwMy0uMTgyLS4wMDQtLjE4Mi0uMDA1LS4xODEtLjAwNi0uMTc5LS4wMDgtLjE3OS0uMDA4LS4xNzgtLjAxLS4xNzYtLjAxMS0uMTc2LS4wMTItLjE3NS0uMDEzLS4xNzMtLjAxNC0uMTcyLS4wMTUtLjE3MS0uMDE2LS4xNy0uMDE3LS4xNjktLjAxOC0uMTY3LS4wMTktLjE2Ni0uMDItLjE2NS0uMDIxLS4xNjMtLjAyMi0uMTYyLS4wMjMtLjE2MS0uMDI0LS4xNTktLjAyNS0uMTU3LS4wMjYtLjE1Ni0uMDI3LS4xNTUtLjAyNy0uMTUzLS4wMjktLjE1MS0uMDMtLjE1LS4wMy0uMTQ4LS4wMzEtLjE0Ni0uMDMyLS4xNDUtLjAzMy0uMTQzLS4wMzQtLjE0MS0uMDM1LS4xNC0uMDM1LS4xMzctLjAzNy0uMTM2LS4wMzctLjEzNC0uMDM4LS4xMzItLjAzOC0uMTMtLjA0LS4xMjgtLjA0LS4xMjYtLjA0MS0uMTI0LS4wNDItLjEyMi0uMDQyLS4xMi0uMDQ0LS4xMTctLjA0My0uMTE2LS4wNDUtLjExMy0uMDQ1LS4xMTItLjA0Ni0uMTA5LS4wNDctLjEwNi0uMDQ3LS4xMDUtLjA0OC0uMTAyLS4wNDktLjEtLjA0OS0uMDk3LS4wNS0uMDk1LS4wNS0uMDkzLS4wNTItLjA5LS4wNTEtLjA4Ny0uMDUyLS4wODUtLjA1My0uMDgzLS4wNTQtLjA4LS4wNTQtLjA3Ny0uMDU0djQuMTI3em0wLTUuNjU0di4wMTFsLjAwMS4wMjEuMDAzLjAyMS4wMDQuMDIxLjAwNS4wMjIuMDA2LjAyMi4wMDcuMDIyLjAwOS4wMjIuMDEuMDIyLjAxMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNS4wMjQuMDE2LjAyMy4wMTcuMDI0LjAxOC4wMjQuMDE5LjAyNC4wMjEuMDI0LjAyMi4wMjQuMDIzLjAyNS4wMjQuMDI0LjA1Mi4wNS4wNTYuMDUuMDYxLjA1LjA2Ni4wNTEuMDcuMDUxLjA3NS4wNTIuMDc5LjA1MS4wODQuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTcuMDUyLjEwMi4wNTIuMTA1LjA1Mi4xMS4wNTEuMTE0LjA1MS4xMTkuMDUyLjEyMy4wNS4xMjcuMDUxLjEzMS4wNS4xMzUuMDQ5LjEzOS4wNDkuMTQ0LjA0OC4xNDcuMDQ4LjE1Mi4wNDcuMTU1LjA0Ni4xNi4wNDUuMTYzLjA0NS4xNjcuMDQ0LjE3MS4wNDIuMTc2LjA0Mi4xNzguMDQuMTgzLjA0LjE4Ny4wMzguMTkuMDM3LjE5NC4wMzYuMTk3LjAzNC4yMDIuMDMzLjIwNC4wMzIuMjA5LjAzLjIxMi4wMjguMjE2LjAyNy4yMTkuMDI1LjIyMi4wMjQuMjI2LjAyMi4yMy4wMi4yMzMuMDE4LjIzNi4wMTYuMjQuMDE0LjI0My4wMTIuMjQ2LjAxLjI0OS4wMDguMjUzLjAwNi4yNTYuMDAzLjI1OS4wMDEuMjYtLjAwMS4yNTctLjAwMy4yNTQtLjAwNi4yNS0uMDA4LjI0Ny0uMDEuMjQ0LS4wMTIuMjQxLS4wMTUuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMi4yMjYtLjAyMi4yMjQtLjAyNC4yMi0uMDI1LjIxNi0uMDI3LjIxMi0uMDI5LjIxLS4wMy4yMDUtLjAzMi4yMDItLjAzMy4xOTgtLjAzNS4xOTQtLjAzNi4xOTEtLjAzNy4xODctLjAzOS4xODMtLjAzOS4xNzktLjA0MS4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0NC4xNjMtLjA0NS4xNi0uMDQ1LjE1NS0uMDQ3LjE1Mi0uMDQ3LjE0OC0uMDQ4LjE0My0uMDQ4LjEzOS0uMDUuMTM2LS4wNDkuMTMxLS4wNS4xMjYtLjA1MS4xMjMtLjA1MS4xMTgtLjA1MS4xMTQtLjA1Mi4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUyLjA4My0uMDUyLjA3OS0uMDUyLjA3NC0uMDUxLjA3LS4wNTIuMDY1LS4wNTEuMDYtLjA1LjA1Ni0uMDUxLjA1MS0uMDQ5LjAyMy0uMDI1LjAyMy0uMDI0LjAyMS0uMDI1LjAyLS4wMjQuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjQuMDE1LS4wMjMuMDE0LS4wMjMuMDEzLS4wMjQuMDEyLS4wMjIuMDEtLjAyMy4wMS0uMDIzLjAwOC0uMDIyLjAwNi0uMDIyLjAwNi0uMDIyLjAwNC0uMDIxLjAwNC0uMDIyLjAwMS0uMDIxLjAwMS0uMDIxdi00LjEzOWwtLjA3Ny4wNTQtLjA4LjA1NC0uMDgzLjA1NC0uMDg1LjA1Mi0uMDg3LjA1My0uMDkuMDUxLS4wOTMuMDUxLS4wOTUuMDUxLS4wOTcuMDUtLjEuMDQ5LS4xMDIuMDQ5LS4xMDUuMDQ4LS4xMDYuMDQ3LS4xMDkuMDQ3LS4xMTEuMDQ2LS4xMTQuMDQ1LS4xMTUuMDQ0LS4xMTguMDQ0LS4xMi4wNDQtLjEyMi4wNDItLjEyNC4wNDItLjEyNi4wNDEtLjEyOC4wNC0uMTMuMDM5LS4xMzIuMDM5LS4xMzQuMDM4LS4xMzUuMDM3LS4xMzguMDM2LS4xMzkuMDM2LS4xNDIuMDM1LS4xNDMuMDMzLS4xNDQuMDMzLS4xNDcuMDMzLS4xNDguMDMxLS4xNS4wMy0uMTUxLjAzLS4xNTMuMDI4LS4xNTQuMDI4LS4xNTYuMDI3LS4xNTguMDI2LS4xNTkuMDI1LS4xNjEuMDI0LS4xNjIuMDIzLS4xNjMuMDIyLS4xNjUuMDIxLS4xNjYuMDItLjE2Ny4wMTktLjE2OS4wMTgtLjE2OS4wMTctLjE3MS4wMTYtLjE3My4wMTUtLjE3My4wMTQtLjE3NS4wMTMtLjE3NS4wMTItLjE3Ny4wMTEtLjE3OC4wMDktLjE3OS4wMDktLjE3OS4wMDctLjE4MS4wMDctLjE4Mi4wMDUtLjE4Mi4wMDQtLjE4NC4wMDMtLjE4NC4wMDJoLS4zN2wtLjE4NC0uMDAyLS4xODQtLjAwMy0uMTgyLS4wMDQtLjE4Mi0uMDA1LS4xODEtLjAwNy0uMTc5LS4wMDctLjE3OS0uMDA5LS4xNzgtLjAwOS0uMTc2LS4wMTEtLjE3Ni0uMDEyLS4xNzUtLjAxMy0uMTczLS4wMTQtLjE3Mi0uMDE1LS4xNzEtLjAxNi0uMTctLjAxNy0uMTY5LS4wMTgtLjE2Ny0uMDE5LS4xNjYtLjAyLS4xNjUtLjAyMS0uMTYzLS4wMjItLjE2Mi0uMDIzLS4xNjEtLjAyNC0uMTU5LS4wMjUtLjE1Ny0uMDI2LS4xNTYtLjAyNy0uMTU1LS4wMjgtLjE1My0uMDI4LS4xNTEtLjAzLS4xNS0uMDMtLjE0OC0uMDMxLS4xNDYtLjAzMy0uMTQ1LS4wMzMtLjE0My0uMDMzLS4xNDEtLjAzNS0uMTQtLjAzNi0uMTM3LS4wMzYtLjEzNi0uMDM3LS4xMzQtLjAzOC0uMTMyLS4wMzktLjEzLS4wMzktLjEyOC0uMDQtLjEyNi0uMDQxLS4xMjQtLjA0Mi0uMTIyLS4wNDMtLjEyLS4wNDMtLjExNy0uMDQ0LS4xMTYtLjA0NC0uMTEzLS4wNDYtLjExMi0uMDQ2LS4xMDktLjA0Ni0uMTA2LS4wNDctLjEwNS0uMDQ4LS4xMDItLjA0OS0uMS0uMDQ5LS4wOTctLjA1LS4wOTUtLjA1MS0uMDkzLS4wNTEtLjA5LS4wNTEtLjA4Ny0uMDUzLS4wODUtLjA1Mi0uMDgzLS4wNTQtLjA4LS4wNTQtLjA3Ny0uMDU0djQuMTM5em0wLTUuNjY2di4wMTFsLjAwMS4wMi4wMDMuMDIyLjAwNC4wMjEuMDA1LjAyMi4wMDYuMDIxLjAwNy4wMjIuMDA5LjAyMy4wMS4wMjIuMDExLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE1LjAyMy4wMTYuMDI0LjAxNy4wMjQuMDE4LjAyMy4wMTkuMDI0LjAyMS4wMjUuMDIyLjAyNC4wMjMuMDI0LjAyNC4wMjUuMDUyLjA1LjA1Ni4wNS4wNjEuMDUuMDY2LjA1MS4wNy4wNTEuMDc1LjA1Mi4wNzkuMDUxLjA4NC4wNTIuMDg4LjA1Mi4wOTIuMDUyLjA5Ny4wNTIuMTAyLjA1Mi4xMDUuMDUxLjExLjA1Mi4xMTQuMDUxLjExOS4wNTEuMTIzLjA1MS4xMjcuMDUuMTMxLjA1LjEzNS4wNS4xMzkuMDQ5LjE0NC4wNDguMTQ3LjA0OC4xNTIuMDQ3LjE1NS4wNDYuMTYuMDQ1LjE2My4wNDUuMTY3LjA0My4xNzEuMDQzLjE3Ni4wNDIuMTc4LjA0LjE4My4wNC4xODcuMDM4LjE5LjAzNy4xOTQuMDM2LjE5Ny4wMzQuMjAyLjAzMy4yMDQuMDMyLjIwOS4wMy4yMTIuMDI4LjIxNi4wMjcuMjE5LjAyNS4yMjIuMDI0LjIyNi4wMjEuMjMuMDIuMjMzLjAxOC4yMzYuMDE3LjI0LjAxNC4yNDMuMDEyLjI0Ni4wMS4yNDkuMDA4LjI1My4wMDYuMjU2LjAwMy4yNTkuMDAxLjI2LS4wMDEuMjU3LS4wMDMuMjU0LS4wMDYuMjUtLjAwOC4yNDctLjAxLjI0NC0uMDEzLjI0MS0uMDE0LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIuMjI2LS4wMjIuMjI0LS4wMjQuMjItLjAyNS4yMTYtLjAyNy4yMTItLjAyOS4yMS0uMDMuMjA1LS4wMzIuMjAyLS4wMzMuMTk4LS4wMzUuMTk0LS4wMzYuMTkxLS4wMzcuMTg3LS4wMzkuMTgzLS4wMzkuMTc5LS4wNDEuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDQuMTYzLS4wNDUuMTYtLjA0NS4xNTUtLjA0Ny4xNTItLjA0Ny4xNDgtLjA0OC4xNDMtLjA0OS4xMzktLjA0OS4xMzYtLjA0OS4xMzEtLjA1MS4xMjYtLjA1LjEyMy0uMDUxLjExOC0uMDUyLjExNC0uMDUxLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTIuMDgzLS4wNTIuMDc5LS4wNTIuMDc0LS4wNTIuMDctLjA1MS4wNjUtLjA1MS4wNi0uMDUxLjA1Ni0uMDUuMDUxLS4wNDkuMDIzLS4wMjUuMDIzLS4wMjUuMDIxLS4wMjQuMDItLjAyNC4wMTktLjAyNC4wMTgtLjAyNC4wMTctLjAyNC4wMTUtLjAyMy4wMTQtLjAyNC4wMTMtLjAyMy4wMTItLjAyMy4wMS0uMDIyLjAxLS4wMjMuMDA4LS4wMjIuMDA2LS4wMjIuMDA2LS4wMjIuMDA0LS4wMjIuMDA0LS4wMjEuMDAxLS4wMjEuMDAxLS4wMjF2LTQuMTUzbC0uMDc3LjA1NC0uMDguMDU0LS4wODMuMDUzLS4wODUuMDUzLS4wODcuMDUzLS4wOS4wNTEtLjA5My4wNTEtLjA5NS4wNTEtLjA5Ny4wNS0uMS4wNDktLjEwMi4wNDgtLjEwNS4wNDgtLjEwNi4wNDgtLjEwOS4wNDYtLjExMS4wNDYtLjExNC4wNDYtLjExNS4wNDQtLjExOC4wNDQtLjEyLjA0My0uMTIyLjA0My0uMTI0LjA0Mi0uMTI2LjA0MS0uMTI4LjA0LS4xMy4wMzktLjEzMi4wMzktLjEzNC4wMzgtLjEzNS4wMzctLjEzOC4wMzYtLjEzOS4wMzYtLjE0Mi4wMzQtLjE0My4wMzQtLjE0NC4wMzMtLjE0Ny4wMzItLjE0OC4wMzItLjE1LjAzLS4xNTEuMDMtLjE1My4wMjgtLjE1NC4wMjgtLjE1Ni4wMjctLjE1OC4wMjYtLjE1OS4wMjQtLjE2MS4wMjQtLjE2Mi4wMjMtLjE2My4wMjMtLjE2NS4wMjEtLjE2Ni4wMi0uMTY3LjAxOS0uMTY5LjAxOC0uMTY5LjAxNy0uMTcxLjAxNi0uMTczLjAxNS0uMTczLjAxNC0uMTc1LjAxMy0uMTc1LjAxMi0uMTc3LjAxLS4xNzguMDEtLjE3OS4wMDktLjE3OS4wMDctLjE4MS4wMDYtLjE4Mi4wMDYtLjE4Mi4wMDQtLjE4NC4wMDMtLjE4NC4wMDEtLjE4NS4wMDEtLjE4NS0uMDAxLS4xODQtLjAwMS0uMTg0LS4wMDMtLjE4Mi0uMDA0LS4xODItLjAwNi0uMTgxLS4wMDYtLjE3OS0uMDA3LS4xNzktLjAwOS0uMTc4LS4wMS0uMTc2LS4wMS0uMTc2LS4wMTItLjE3NS0uMDEzLS4xNzMtLjAxNC0uMTcyLS4wMTUtLjE3MS0uMDE2LS4xNy0uMDE3LS4xNjktLjAxOC0uMTY3LS4wMTktLjE2Ni0uMDItLjE2NS0uMDIxLS4xNjMtLjAyMy0uMTYyLS4wMjMtLjE2MS0uMDI0LS4xNTktLjAyNC0uMTU3LS4wMjYtLjE1Ni0uMDI3LS4xNTUtLjAyOC0uMTUzLS4wMjgtLjE1MS0uMDMtLjE1LS4wMy0uMTQ4LS4wMzItLjE0Ni0uMDMyLS4xNDUtLjAzMy0uMTQzLS4wMzQtLjE0MS0uMDM0LS4xNC0uMDM2LS4xMzctLjAzNi0uMTM2LS4wMzctLjEzNC0uMDM4LS4xMzItLjAzOS0uMTMtLjAzOS0uMTI4LS4wNDEtLjEyNi0uMDQxLS4xMjQtLjA0MS0uMTIyLS4wNDMtLjEyLS4wNDMtLjExNy0uMDQ0LS4xMTYtLjA0NC0uMTEzLS4wNDYtLjExMi0uMDQ2LS4xMDktLjA0Ni0uMTA2LS4wNDgtLjEwNS0uMDQ4LS4xMDItLjA0OC0uMS0uMDUtLjA5Ny0uMDQ5LS4wOTUtLjA1MS0uMDkzLS4wNTEtLjA5LS4wNTItLjA4Ny0uMDUyLS4wODUtLjA1My0uMDgzLS4wNTMtLjA4LS4wNTQtLjA3Ny0uMDU0djQuMTUzem04Ljc0LTguMTc5bC0uMjU3LjAwNC0uMjU0LjAwNS0uMjUuMDA4LS4yNDcuMDExLS4yNDQuMDEyLS4yNDEuMDE0LS4yMzcuMDE2LS4yMzMuMDE4LS4yMzEuMDIxLS4yMjYuMDIyLS4yMjQuMDIzLS4yMi4wMjYtLjIxNi4wMjctLjIxMi4wMjgtLjIxLjAzMS0uMjA1LjAzMi0uMjAyLjAzMy0uMTk4LjAzNC0uMTk0LjAzNi0uMTkxLjAzOC0uMTg3LjAzOC0uMTgzLjA0LS4xNzkuMDQxLS4xNzUuMDQyLS4xNzIuMDQzLS4xNjguMDQzLS4xNjMuMDQ1LS4xNi4wNDYtLjE1NS4wNDYtLjE1Mi4wNDgtLjE0OC4wNDgtLjE0My4wNDgtLjEzOS4wNDktLjEzNi4wNS0uMTMxLjA1LS4xMjYuMDUxLS4xMjMuMDUxLS4xMTguMDUxLS4xMTQuMDUyLS4xMS4wNTItLjEwNi4wNTItLjEwMS4wNTItLjA5Ni4wNTItLjA5Mi4wNTItLjA4OC4wNTItLjA4My4wNTItLjA3OS4wNTItLjA3NC4wNTEtLjA3LjA1Mi0uMDY1LjA1MS0uMDYuMDUtLjA1Ni4wNS0uMDUxLjA1LS4wMjMuMDI1LS4wMjMuMDI0LS4wMjEuMDI0LS4wMi4wMjUtLjAxOS4wMjQtLjAxOC4wMjQtLjAxNy4wMjMtLjAxNS4wMjQtLjAxNC4wMjMtLjAxMy4wMjMtLjAxMi4wMjMtLjAxLjAyMy0uMDEuMDIyLS4wMDguMDIyLS4wMDYuMDIzLS4wMDYuMDIxLS4wMDQuMDIyLS4wMDQuMDIxLS4wMDEuMDIxLS4wMDEuMDIxLjAwMS4wMjEuMDAxLjAyMS4wMDQuMDIxLjAwNC4wMjIuMDA2LjAyMS4wMDYuMDIzLjAwOC4wMjIuMDEuMDIyLjAxLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE0LjAyMy4wMTUuMDI0LjAxNy4wMjMuMDE4LjAyNC4wMTkuMDI0LjAyLjAyNS4wMjEuMDI0LjAyMy4wMjQuMDIzLjAyNS4wNTEuMDUuMDU2LjA1LjA2LjA1LjA2NS4wNTEuMDcuMDUyLjA3NC4wNTEuMDc5LjA1Mi4wODMuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTYuMDUyLjEwMS4wNTIuMTA2LjA1Mi4xMS4wNTIuMTE0LjA1Mi4xMTguMDUxLjEyMy4wNTEuMTI2LjA1MS4xMzEuMDUuMTM2LjA1LjEzOS4wNDkuMTQzLjA0OC4xNDguMDQ4LjE1Mi4wNDguMTU1LjA0Ni4xNi4wNDYuMTYzLjA0NS4xNjguMDQzLjE3Mi4wNDMuMTc1LjA0Mi4xNzkuMDQxLjE4My4wNC4xODcuMDM4LjE5MS4wMzguMTk0LjAzNi4xOTguMDM0LjIwMi4wMzMuMjA1LjAzMi4yMS4wMzEuMjEyLjAyOC4yMTYuMDI3LjIyLjAyNi4yMjQuMDIzLjIyNi4wMjIuMjMxLjAyMS4yMzMuMDE4LjIzNy4wMTYuMjQxLjAxNC4yNDQuMDEyLjI0Ny4wMTEuMjUuMDA4LjI1NC4wMDUuMjU3LjAwNC4yNi4wMDEuMjYtLjAwMS4yNTctLjAwNC4yNTQtLjAwNS4yNS0uMDA4LjI0Ny0uMDExLjI0NC0uMDEyLjI0MS0uMDE0LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIxLjIyNi0uMDIyLjIyNC0uMDIzLjIyLS4wMjYuMjE2LS4wMjcuMjEyLS4wMjguMjEtLjAzMS4yMDUtLjAzMi4yMDItLjAzMy4xOTgtLjAzNC4xOTQtLjAzNi4xOTEtLjAzOC4xODctLjAzOC4xODMtLjA0LjE3OS0uMDQxLjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQzLjE2My0uMDQ1LjE2LS4wNDYuMTU1LS4wNDYuMTUyLS4wNDguMTQ4LS4wNDguMTQzLS4wNDguMTM5LS4wNDkuMTM2LS4wNS4xMzEtLjA1LjEyNi0uMDUxLjEyMy0uMDUxLjExOC0uMDUxLjExNC0uMDUyLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTIuMDgzLS4wNTIuMDc5LS4wNTIuMDc0LS4wNTEuMDctLjA1Mi4wNjUtLjA1MS4wNi0uMDUuMDU2LS4wNS4wNTEtLjA1LjAyMy0uMDI1LjAyMy0uMDI0LjAyMS0uMDI0LjAyLS4wMjUuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjMuMDE1LS4wMjQuMDE0LS4wMjMuMDEzLS4wMjMuMDEyLS4wMjMuMDEtLjAyMy4wMS0uMDIyLjAwOC0uMDIyLjAwNi0uMDIzLjAwNi0uMDIxLjAwNC0uMDIyLjAwNC0uMDIxLjAwMS0uMDIxLjAwMS0uMDIxLS4wMDEtLjAyMS0uMDAxLS4wMjEtLjAwNC0uMDIxLS4wMDQtLjAyMi0uMDA2LS4wMjEtLjAwNi0uMDIzLS4wMDgtLjAyMi0uMDEtLjAyMi0uMDEtLjAyMy0uMDEyLS4wMjMtLjAxMy0uMDIzLS4wMTQtLjAyMy0uMDE1LS4wMjQtLjAxNy0uMDIzLS4wMTgtLjAyNC0uMDE5LS4wMjQtLjAyLS4wMjUtLjAyMS0uMDI0LS4wMjMtLjAyNC0uMDIzLS4wMjUtLjA1MS0uMDUtLjA1Ni0uMDUtLjA2LS4wNS0uMDY1LS4wNTEtLjA3LS4wNTItLjA3NC0uMDUxLS4wNzktLjA1Mi0uMDgzLS4wNTItLjA4OC0uMDUyLS4wOTItLjA1Mi0uMDk2LS4wNTItLjEwMS0uMDUyLS4xMDYtLjA1Mi0uMTEtLjA1Mi0uMTE0LS4wNTItLjExOC0uMDUxLS4xMjMtLjA1MS0uMTI2LS4wNTEtLjEzMS0uMDUtLjEzNi0uMDUtLjEzOS0uMDQ5LS4xNDMtLjA0OC0uMTQ4LS4wNDgtLjE1Mi0uMDQ4LS4xNTUtLjA0Ni0uMTYtLjA0Ni0uMTYzLS4wNDUtLjE2OC0uMDQzLS4xNzItLjA0My0uMTc1LS4wNDItLjE3OS0uMDQxLS4xODMtLjA0LS4xODctLjAzOC0uMTkxLS4wMzgtLjE5NC0uMDM2LS4xOTgtLjAzNC0uMjAyLS4wMzMtLjIwNS0uMDMyLS4yMS0uMDMxLS4yMTItLjAyOC0uMjE2LS4wMjctLjIyLS4wMjYtLjIyNC0uMDIzLS4yMjYtLjAyMi0uMjMxLS4wMjEtLjIzMy0uMDE4LS4yMzctLjAxNi0uMjQxLS4wMTQtLjI0NC0uMDEyLS4yNDctLjAxMS0uMjUtLjAwOC0uMjU0LS4wMDUtLjI1Ny0uMDA0LS4yNi0uMDAxLS4yNi4wMDF6Iil9LCJpbnNlcnREYXRhYmFzZUljb24iKSxaa2U9byhmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgic3ltYm9sIikuYXR0cigiaWQiLCJjb21wdXRlciIpLmF0dHIoIndpZHRoIiwiMjQiKS5hdHRyKCJoZWlnaHQiLCIyNCIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInRyYW5zZm9ybSIsInNjYWxlKC41KSIpLmF0dHIoImQiLCJNMiAydjEzaDIwdi0xM2gtMjB6bTE4IDExaC0xNnYtOWgxNnY5em0tMTAuMjI4IDZsLjQ2Ni0xaDMuNTI0bC40NjcgMWgtNC40NTd6bTE0LjIyOCAzaC0yNGwyLTZoMi4xMDRsLTEuMzMgNGgxOC40NWwtMS4yOTctNGgyLjA3M2wyIDZ6bS01LTEwaC0xNHYtN2gxNHY3eiIpfSwiaW5zZXJ0Q29tcHV0ZXJJY29uIiksSmtlPW8oZnVuY3Rpb24odCl7dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoInN5bWJvbCIpLmF0dHIoImlkIiwiY2xvY2siKS5hdHRyKCJ3aWR0aCIsIjI0IikuYXR0cigiaGVpZ2h0IiwiMjQiKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJzY2FsZSguNSkiKS5hdHRyKCJkIiwiTTEyIDJjNS41MTQgMCAxMCA0LjQ4NiAxMCAxMHMtNC40ODYgMTAtMTAgMTAtMTAtNC40ODYtMTAtMTAgNC40ODYtMTAgMTAtMTB6bTAtMmMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnM1LjM3MyAxMiAxMiAxMiAxMi01LjM3MyAxMi0xMi01LjM3My0xMi0xMi0xMnptNS44NDggMTIuNDU5Yy4yMDIuMDM4LjIwMi4zMzMuMDAxLjM3Mi0xLjkwNy4zNjEtNi4wNDUgMS4xMTEtNi41NDcgMS4xMTEtLjcxOSAwLTEuMzAxLS41ODItMS4zMDEtMS4zMDEgMC0uNTEyLjc3LTUuNDQ3IDEuMTI1LTcuNDQ1LjAzNC0uMTkyLjMxMi0uMTgxLjM0My4wMTRsLjk4NSA2LjIzOCA1LjM5NCAxLjAxMXoiKX0sImluc2VydENsb2NrSWNvbiIpLGVFZT1vKGZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImFycm93aGVhZCIpLmF0dHIoInJlZlgiLDkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTIpLmF0dHIoIm1hcmtlckhlaWdodCIsMTIpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDAgTCAxMCA1IEwgMCAxMCB6Iil9LCJpbnNlcnRBcnJvd0hlYWQiKSx0RWU9byhmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJhcnJvd2VuZCIpLmF0dHIoInJlZlgiLDEpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTIpLmF0dHIoIm1hcmtlckhlaWdodCIsMTIpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxMCAwIEwgMCA1IEwgMTAgMTAgeiIpfSwiaW5zZXJ0QXJyb3dFbmQiKSxyRWU9byhmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJmaWxsZWQtaGVhZCIpLmF0dHIoInJlZlgiLDE4KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpfSwiaW5zZXJ0QXJyb3dGaWxsZWRIZWFkIiksbkVlPW8oZnVuY3Rpb24odCl7dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwic2VxdWVuY2VudW1iZXIiKS5hdHRyKCJyZWZYIiwxNSkuYXR0cigicmVmWSIsMTUpLmF0dHIoIm1hcmtlcldpZHRoIiw2MCkuYXR0cigibWFya2VySGVpZ2h0Iiw0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLDE1KS5hdHRyKCJjeSIsMTUpLmF0dHIoInIiLDYpfSwiaW5zZXJ0RHluYW1pY051bWJlciIpLGlFZT1vKGZ1bmN0aW9uKHQpe2xldCByPXQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImNyb3NzaGVhZCIpLmF0dHIoIm1hcmtlcldpZHRoIiwxNSkuYXR0cigibWFya2VySGVpZ2h0Iiw4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXR0cigicmVmWCIsMTYpLmF0dHIoInJlZlkiLDQpO3IuYXBwZW5kKCJwYXRoIikuYXR0cigiZmlsbCIsImJsYWNrIikuYXR0cigic3Ryb2tlIiwiIzAwMDAwMCIpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMCwgMCIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFweCIpLmF0dHIoImQiLCJNIDksMiBWIDYgTDE2LDQgWiIpLHIuYXBwZW5kKCJwYXRoIikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzdHJva2UiLCIjMDAwMDAwIikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIwLCAwIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IikuYXR0cigiZCIsIk0gMCwxIEwgNiw3IE0gNiwxIEwgMCw3Iil9LCJpbnNlcnRBcnJvd0Nyb3NzSGVhZCIpLGFFZT1vKCh0LGUpPT4oe2ZvbnRGYW1pbHk6dFtlKyJGb250RmFtaWx5Il0sZm9udFNpemU6dFtlKyJGb250U2l6ZSJdLGZvbnRXZWlnaHQ6dFtlKyJGb250V2VpZ2h0Il19KSwiZ2V0QzRTaGFwZUZvbnQiKSxUdT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoaSxhLHMsbCx1LGgsZil7bGV0IGQ9YS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixzK3UvMikuYXR0cigieSIsbCtoLzIrNSkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dChpKTtuKGQsZil9byh0LCJieVRleHQiKTtmdW5jdGlvbiBlKGksYSxzLGwsdSxoLGYsZCl7bGV0e2ZvbnRTaXplOnAsZm9udEZhbWlseTptLGZvbnRXZWlnaHQ6Z309ZCx5PWkuc3BsaXQoWmUubGluZUJyZWFrUmVnZXgpO2ZvcihsZXQgdj0wO3Y8eS5sZW5ndGg7disrKXtsZXQgeD12KnAtcCooeS5sZW5ndGgtMSkvMixiPWEuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIscyt1LzIpLmF0dHIoInkiLGwpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikuc3R5bGUoImZvbnQtc2l6ZSIscCkuc3R5bGUoImZvbnQtd2VpZ2h0IixnKS5zdHlsZSgiZm9udC1mYW1pbHkiLG0pO2IuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoImR5Iix4KS50ZXh0KHlbdl0pLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsIm1hdGhlbWF0aWNhbCIpLG4oYixmKX19byhlLCJieVRzcGFuIik7ZnVuY3Rpb24gcihpLGEscyxsLHUsaCxmLGQpe2xldCBwPWEuYXBwZW5kKCJzd2l0Y2giKSxnPXAuYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigieCIscykuYXR0cigieSIsbCkuYXR0cigid2lkdGgiLHUpLmF0dHIoImhlaWdodCIsaCkuYXBwZW5kKCJ4aHRtbDpkaXYiKS5zdHlsZSgiZGlzcGxheSIsInRhYmxlIikuc3R5bGUoImhlaWdodCIsIjEwMCUiKS5zdHlsZSgid2lkdGgiLCIxMDAlIik7Zy5hcHBlbmQoImRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUtY2VsbCIpLnN0eWxlKCJ0ZXh0LWFsaWduIiwiY2VudGVyIikuc3R5bGUoInZlcnRpY2FsLWFsaWduIiwibWlkZGxlIikudGV4dChpKSxlKGkscCxzLGwsdSxoLGYsZCksbihnLGYpfW8ociwiYnlGbyIpO2Z1bmN0aW9uIG4oaSxhKXtmb3IobGV0IHMgaW4gYSlhLmhhc093blByb3BlcnR5KHMpJiZpLmF0dHIocyxhW3NdKX1yZXR1cm4gbyhuLCJfc2V0VGV4dEF0dHJzIiksZnVuY3Rpb24oaSl7cmV0dXJuIGkudGV4dFBsYWNlbWVudD09PSJmbyI/cjppLnRleHRQbGFjZW1lbnQ9PT0ib2xkIj90OmV9fSgpLGtsPXtkcmF3UmVjdDpiOSxkcmF3Qm91bmRhcnk6amtlLGRyYXdDNFNoYXBlOktrZSxkcmF3UmVsczpYa2UsZHJhd0ltYWdlOlBxLGluc2VydEFycm93SGVhZDplRWUsaW5zZXJ0QXJyb3dFbmQ6dEVlLGluc2VydEFycm93RmlsbGVkSGVhZDpyRWUsaW5zZXJ0RHluYW1pY051bWJlcjpuRWUsaW5zZXJ0QXJyb3dDcm9zc0hlYWQ6aUVlLGluc2VydERhdGFiYXNlSWNvbjpRa2UsaW5zZXJ0Q29tcHV0ZXJJY29uOlprZSxpbnNlcnRDbG9ja0ljb246SmtlfX0pO3ZhciBzRWUsWDUsdzk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtzRWU9dHlwZW9mIGdsb2JhbD09Im9iamVjdCImJmdsb2JhbCYmZ2xvYmFsLk9iamVjdD09PU9iamVjdCYmZ2xvYmFsLFg1PXNFZX0pO3ZhciBvRWUsbEVlLGxpLExvPU4oKCk9PnsidXNlIHN0cmljdCI7dzkoKTtvRWU9dHlwZW9mIHNlbGY9PSJvYmplY3QiJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixsRWU9WDV8fG9FZXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSxsaT1sRWV9KTt2YXIgY0VlLGVhLEVkPU4oKCk9PnsidXNlIHN0cmljdCI7TG8oKTtjRWU9bGkuU3ltYm9sLGVhPWNFZX0pO2Z1bmN0aW9uIGZFZSh0KXt2YXIgZT11RWUuY2FsbCh0LHF2KSxyPXRbcXZdO3RyeXt0W3F2XT12b2lkIDA7dmFyIG49ITB9Y2F0Y2h7fXZhciBpPWhFZS5jYWxsKHQpO3JldHVybiBuJiYoZT90W3F2XT1yOmRlbGV0ZSB0W3F2XSksaX12YXIgRnEsdUVlLGhFZSxxdiwkcSx6cT1OKCgpPT57InVzZSBzdHJpY3QiO0VkKCk7RnE9T2JqZWN0LnByb3RvdHlwZSx1RWU9RnEuaGFzT3duUHJvcGVydHksaEVlPUZxLnRvU3RyaW5nLHF2PWVhP2VhLnRvU3RyaW5nVGFnOnZvaWQgMDtvKGZFZSwiZ2V0UmF3VGFnIik7JHE9ZkVlfSk7ZnVuY3Rpb24gbUVlKHQpe3JldHVybiBwRWUuY2FsbCh0KX12YXIgZEVlLHBFZSxHcSxWcT1OKCgpPT57InVzZSBzdHJpY3QiO2RFZT1PYmplY3QucHJvdG90eXBlLHBFZT1kRWUudG9TdHJpbmc7byhtRWUsIm9iamVjdFRvU3RyaW5nIik7R3E9bUVlfSk7ZnVuY3Rpb24gdkVlKHQpe3JldHVybiB0PT1udWxsP3Q9PT12b2lkIDA/eUVlOmdFZTpVcSYmVXEgaW4gT2JqZWN0KHQpPyRxKHQpOkdxKHQpfXZhciBnRWUseUVlLFVxLGRhLGt1PU4oKCk9PnsidXNlIHN0cmljdCI7RWQoKTt6cSgpO1ZxKCk7Z0VlPSJbb2JqZWN0IE51bGxdIix5RWU9IltvYmplY3QgVW5kZWZpbmVkXSIsVXE9ZWE/ZWEudG9TdHJpbmdUYWc6dm9pZCAwO28odkVlLCJiYXNlR2V0VGFnIik7ZGE9dkVlfSk7ZnVuY3Rpb24geEVlKHQpe3ZhciBlPXR5cGVvZiB0O3JldHVybiB0IT1udWxsJiYoZT09Im9iamVjdCJ8fGU9PSJmdW5jdGlvbiIpfXZhciBibixKcz1OKCgpPT57InVzZSBzdHJpY3QiO28oeEVlLCJpc09iamVjdCIpO2JuPXhFZX0pO2Z1bmN0aW9uIEVFZSh0KXtpZighYm4odCkpcmV0dXJuITE7dmFyIGU9ZGEodCk7cmV0dXJuIGU9PXdFZXx8ZT09VEVlfHxlPT1iRWV8fGU9PWtFZX12YXIgYkVlLHdFZSxURWUsa0VlLFNpLFl2PU4oKCk9PnsidXNlIHN0cmljdCI7a3UoKTtKcygpO2JFZT0iW29iamVjdCBBc3luY0Z1bmN0aW9uXSIsd0VlPSJbb2JqZWN0IEZ1bmN0aW9uXSIsVEVlPSJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIsa0VlPSJbb2JqZWN0IFByb3h5XSI7byhFRWUsImlzRnVuY3Rpb24iKTtTaT1FRWV9KTt2YXIgU0VlLGo1LEhxPU4oKCk9PnsidXNlIHN0cmljdCI7TG8oKTtTRWU9bGlbIl9fY29yZS1qc19zaGFyZWRfXyJdLGo1PVNFZX0pO2Z1bmN0aW9uIENFZSh0KXtyZXR1cm4hIVdxJiZXcSBpbiB0fXZhciBXcSxxcSxZcT1OKCgpPT57InVzZSBzdHJpY3QiO0hxKCk7V3E9ZnVuY3Rpb24oKXt2YXIgdD0vW14uXSskLy5leGVjKGo1JiZqNS5rZXlzJiZqNS5rZXlzLklFX1BST1RPfHwiIik7cmV0dXJuIHQ/IlN5bWJvbChzcmMpXzEuIit0OiIifSgpO28oQ0VlLCJpc01hc2tlZCIpO3FxPUNFZX0pO2Z1bmN0aW9uIERFZSh0KXtpZih0IT1udWxsKXt0cnl7cmV0dXJuIF9FZS5jYWxsKHQpfWNhdGNoe310cnl7cmV0dXJuIHQrIiJ9Y2F0Y2h7fX1yZXR1cm4iIn12YXIgQUVlLF9FZSxFdSxUOT1OKCgpPT57InVzZSBzdHJpY3QiO0FFZT1GdW5jdGlvbi5wcm90b3R5cGUsX0VlPUFFZS50b1N0cmluZztvKERFZSwidG9Tb3VyY2UiKTtFdT1ERWV9KTtmdW5jdGlvbiBCRWUodCl7aWYoIWJuKHQpfHxxcSh0KSlyZXR1cm4hMTt2YXIgZT1TaSh0KT9QRWU6UkVlO3JldHVybiBlLnRlc3QoRXUodCkpfXZhciBMRWUsUkVlLE5FZSxNRWUsSUVlLE9FZSxQRWUsWHEsanE9TigoKT0+eyJ1c2Ugc3RyaWN0IjtZdigpO1lxKCk7SnMoKTtUOSgpO0xFZT0vW1xcXiQuKis/KClbXF17fXxdL2csUkVlPS9eXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXSQvLE5FZT1GdW5jdGlvbi5wcm90b3R5cGUsTUVlPU9iamVjdC5wcm90b3R5cGUsSUVlPU5FZS50b1N0cmluZyxPRWU9TUVlLmhhc093blByb3BlcnR5LFBFZT1SZWdFeHAoIl4iK0lFZS5jYWxsKE9FZSkucmVwbGFjZShMRWUsIlxcJCYiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCIkMS4qPyIpKyIkIik7byhCRWUsImJhc2VJc05hdGl2ZSIpO1hxPUJFZX0pO2Z1bmN0aW9uIEZFZSh0LGUpe3JldHVybiB0Py5bZV19dmFyIEtxLFFxPU4oKCk9PnsidXNlIHN0cmljdCI7byhGRWUsImdldFZhbHVlIik7S3E9RkVlfSk7ZnVuY3Rpb24gJEVlKHQsZSl7dmFyIHI9S3EodCxlKTtyZXR1cm4gWHEocik/cjp2b2lkIDB9dmFyIFNzLExoPU4oKCk9PnsidXNlIHN0cmljdCI7anEoKTtRcSgpO28oJEVlLCJnZXROYXRpdmUiKTtTcz0kRWV9KTt2YXIgekVlLFN1LFh2PU4oKCk9PnsidXNlIHN0cmljdCI7TGgoKTt6RWU9U3MoT2JqZWN0LCJjcmVhdGUiKSxTdT16RWV9KTtmdW5jdGlvbiBHRWUoKXt0aGlzLl9fZGF0YV9fPVN1P1N1KG51bGwpOnt9LHRoaXMuc2l6ZT0wfXZhciBacSxKcT1OKCgpPT57InVzZSBzdHJpY3QiO1h2KCk7byhHRWUsImhhc2hDbGVhciIpO1pxPUdFZX0pO2Z1bmN0aW9uIFZFZSh0KXt2YXIgZT10aGlzLmhhcyh0KSYmZGVsZXRlIHRoaXMuX19kYXRhX19bdF07cmV0dXJuIHRoaXMuc2l6ZS09ZT8xOjAsZX12YXIgZVksdFk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKFZFZSwiaGFzaERlbGV0ZSIpO2VZPVZFZX0pO2Z1bmN0aW9uIHFFZSh0KXt2YXIgZT10aGlzLl9fZGF0YV9fO2lmKFN1KXt2YXIgcj1lW3RdO3JldHVybiByPT09VUVlP3ZvaWQgMDpyfXJldHVybiBXRWUuY2FsbChlLHQpP2VbdF06dm9pZCAwfXZhciBVRWUsSEVlLFdFZSxyWSxuWT1OKCgpPT57InVzZSBzdHJpY3QiO1h2KCk7VUVlPSJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIixIRWU9T2JqZWN0LnByb3RvdHlwZSxXRWU9SEVlLmhhc093blByb3BlcnR5O28ocUVlLCJoYXNoR2V0Iik7clk9cUVlfSk7ZnVuY3Rpb24gakVlKHQpe3ZhciBlPXRoaXMuX19kYXRhX187cmV0dXJuIFN1P2VbdF0hPT12b2lkIDA6WEVlLmNhbGwoZSx0KX12YXIgWUVlLFhFZSxpWSxhWT1OKCgpPT57InVzZSBzdHJpY3QiO1h2KCk7WUVlPU9iamVjdC5wcm90b3R5cGUsWEVlPVlFZS5oYXNPd25Qcm9wZXJ0eTtvKGpFZSwiaGFzaEhhcyIpO2lZPWpFZX0pO2Z1bmN0aW9uIFFFZSh0LGUpe3ZhciByPXRoaXMuX19kYXRhX187cmV0dXJuIHRoaXMuc2l6ZSs9dGhpcy5oYXModCk/MDoxLHJbdF09U3UmJmU9PT12b2lkIDA/S0VlOmUsdGhpc312YXIgS0VlLHNZLG9ZPU4oKCk9PnsidXNlIHN0cmljdCI7WHYoKTtLRWU9Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iO28oUUVlLCJoYXNoU2V0Iik7c1k9UUVlfSk7ZnVuY3Rpb24gRzAodCl7dmFyIGU9LTEscj10PT1udWxsPzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2U8cjspe3ZhciBuPXRbZV07dGhpcy5zZXQoblswXSxuWzFdKX19dmFyIGs5LGxZPU4oKCk9PnsidXNlIHN0cmljdCI7SnEoKTt0WSgpO25ZKCk7YVkoKTtvWSgpO28oRzAsIkhhc2giKTtHMC5wcm90b3R5cGUuY2xlYXI9WnE7RzAucHJvdG90eXBlLmRlbGV0ZT1lWTtHMC5wcm90b3R5cGUuZ2V0PXJZO0cwLnByb3RvdHlwZS5oYXM9aVk7RzAucHJvdG90eXBlLnNldD1zWTtrOT1HMH0pO2Z1bmN0aW9uIFpFZSgpe3RoaXMuX19kYXRhX189W10sdGhpcy5zaXplPTB9dmFyIGNZLHVZPU4oKCk9PnsidXNlIHN0cmljdCI7byhaRWUsImxpc3RDYWNoZUNsZWFyIik7Y1k9WkVlfSk7ZnVuY3Rpb24gSkVlKHQsZSl7cmV0dXJuIHQ9PT1lfHx0IT09dCYmZSE9PWV9dmFyIFJvLFNkPU4oKCk9PnsidXNlIHN0cmljdCI7byhKRWUsImVxIik7Um89SkVlfSk7ZnVuY3Rpb24gZTZlKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoO3ItLTspaWYoUm8odFtyXVswXSxlKSlyZXR1cm4gcjtyZXR1cm4tMX12YXIgUmgsanY9TigoKT0+eyJ1c2Ugc3RyaWN0IjtTZCgpO28oZTZlLCJhc3NvY0luZGV4T2YiKTtSaD1lNmV9KTtmdW5jdGlvbiBuNmUodCl7dmFyIGU9dGhpcy5fX2RhdGFfXyxyPVJoKGUsdCk7aWYocjwwKXJldHVybiExO3ZhciBuPWUubGVuZ3RoLTE7cmV0dXJuIHI9PW4/ZS5wb3AoKTpyNmUuY2FsbChlLHIsMSksLS10aGlzLnNpemUsITB9dmFyIHQ2ZSxyNmUsaFksZlk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtqdigpO3Q2ZT1BcnJheS5wcm90b3R5cGUscjZlPXQ2ZS5zcGxpY2U7byhuNmUsImxpc3RDYWNoZURlbGV0ZSIpO2hZPW42ZX0pO2Z1bmN0aW9uIGk2ZSh0KXt2YXIgZT10aGlzLl9fZGF0YV9fLHI9UmgoZSx0KTtyZXR1cm4gcjwwP3ZvaWQgMDplW3JdWzFdfXZhciBkWSxwWT1OKCgpPT57InVzZSBzdHJpY3QiO2p2KCk7byhpNmUsImxpc3RDYWNoZUdldCIpO2RZPWk2ZX0pO2Z1bmN0aW9uIGE2ZSh0KXtyZXR1cm4gUmgodGhpcy5fX2RhdGFfXyx0KT4tMX12YXIgbVksZ1k9TigoKT0+eyJ1c2Ugc3RyaWN0IjtqdigpO28oYTZlLCJsaXN0Q2FjaGVIYXMiKTttWT1hNmV9KTtmdW5jdGlvbiBzNmUodCxlKXt2YXIgcj10aGlzLl9fZGF0YV9fLG49Umgocix0KTtyZXR1cm4gbjwwPygrK3RoaXMuc2l6ZSxyLnB1c2goW3QsZV0pKTpyW25dWzFdPWUsdGhpc312YXIgeVksdlk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtqdigpO28oczZlLCJsaXN0Q2FjaGVTZXQiKTt5WT1zNmV9KTtmdW5jdGlvbiBWMCh0KXt2YXIgZT0tMSxyPXQ9PW51bGw/MDp0Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrZTxyOyl7dmFyIG49dFtlXTt0aGlzLnNldChuWzBdLG5bMV0pfX12YXIgTmgsS3Y9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt1WSgpO2ZZKCk7cFkoKTtnWSgpO3ZZKCk7byhWMCwiTGlzdENhY2hlIik7VjAucHJvdG90eXBlLmNsZWFyPWNZO1YwLnByb3RvdHlwZS5kZWxldGU9aFk7VjAucHJvdG90eXBlLmdldD1kWTtWMC5wcm90b3R5cGUuaGFzPW1ZO1YwLnByb3RvdHlwZS5zZXQ9eVk7Tmg9VjB9KTt2YXIgbzZlLE1oLEs1PU4oKCk9PnsidXNlIHN0cmljdCI7TGgoKTtMbygpO282ZT1TcyhsaSwiTWFwIiksTWg9bzZlfSk7ZnVuY3Rpb24gbDZlKCl7dGhpcy5zaXplPTAsdGhpcy5fX2RhdGFfXz17aGFzaDpuZXcgazksbWFwOm5ldyhNaHx8TmgpLHN0cmluZzpuZXcgazl9fXZhciB4WSxiWT1OKCgpPT57InVzZSBzdHJpY3QiO2xZKCk7S3YoKTtLNSgpO28obDZlLCJtYXBDYWNoZUNsZWFyIik7eFk9bDZlfSk7ZnVuY3Rpb24gYzZlKHQpe3ZhciBlPXR5cGVvZiB0O3JldHVybiBlPT0ic3RyaW5nInx8ZT09Im51bWJlciJ8fGU9PSJzeW1ib2wifHxlPT0iYm9vbGVhbiI/dCE9PSJfX3Byb3RvX18iOnQ9PT1udWxsfXZhciB3WSxUWT1OKCgpPT57InVzZSBzdHJpY3QiO28oYzZlLCJpc0tleWFibGUiKTt3WT1jNmV9KTtmdW5jdGlvbiB1NmUodCxlKXt2YXIgcj10Ll9fZGF0YV9fO3JldHVybiB3WShlKT9yW3R5cGVvZiBlPT0ic3RyaW5nIj8ic3RyaW5nIjoiaGFzaCJdOnIubWFwfXZhciBJaCxRdj1OKCgpPT57InVzZSBzdHJpY3QiO1RZKCk7byh1NmUsImdldE1hcERhdGEiKTtJaD11NmV9KTtmdW5jdGlvbiBoNmUodCl7dmFyIGU9SWgodGhpcyx0KS5kZWxldGUodCk7cmV0dXJuIHRoaXMuc2l6ZS09ZT8xOjAsZX12YXIga1ksRVk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtRdigpO28oaDZlLCJtYXBDYWNoZURlbGV0ZSIpO2tZPWg2ZX0pO2Z1bmN0aW9uIGY2ZSh0KXtyZXR1cm4gSWgodGhpcyx0KS5nZXQodCl9dmFyIFNZLENZPU4oKCk9PnsidXNlIHN0cmljdCI7UXYoKTtvKGY2ZSwibWFwQ2FjaGVHZXQiKTtTWT1mNmV9KTtmdW5jdGlvbiBkNmUodCl7cmV0dXJuIEloKHRoaXMsdCkuaGFzKHQpfXZhciBBWSxfWT1OKCgpPT57InVzZSBzdHJpY3QiO1F2KCk7byhkNmUsIm1hcENhY2hlSGFzIik7QVk9ZDZlfSk7ZnVuY3Rpb24gcDZlKHQsZSl7dmFyIHI9SWgodGhpcyx0KSxuPXIuc2l6ZTtyZXR1cm4gci5zZXQodCxlKSx0aGlzLnNpemUrPXIuc2l6ZT09bj8wOjEsdGhpc312YXIgRFksTFk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtRdigpO28ocDZlLCJtYXBDYWNoZVNldCIpO0RZPXA2ZX0pO2Z1bmN0aW9uIFUwKHQpe3ZhciBlPS0xLHI9dD09bnVsbD8wOnQubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytlPHI7KXt2YXIgbj10W2VdO3RoaXMuc2V0KG5bMF0sblsxXSl9fXZhciBDZCxRNT1OKCgpPT57InVzZSBzdHJpY3QiO2JZKCk7RVkoKTtDWSgpO19ZKCk7TFkoKTtvKFUwLCJNYXBDYWNoZSIpO1UwLnByb3RvdHlwZS5jbGVhcj14WTtVMC5wcm90b3R5cGUuZGVsZXRlPWtZO1UwLnByb3RvdHlwZS5nZXQ9U1k7VTAucHJvdG90eXBlLmhhcz1BWTtVMC5wcm90b3R5cGUuc2V0PURZO0NkPVUwfSk7ZnVuY3Rpb24gRTkodCxlKXtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uInx8ZSE9bnVsbCYmdHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcihtNmUpO3ZhciByPW8oZnVuY3Rpb24oKXt2YXIgbj1hcmd1bWVudHMsaT1lP2UuYXBwbHkodGhpcyxuKTpuWzBdLGE9ci5jYWNoZTtpZihhLmhhcyhpKSlyZXR1cm4gYS5nZXQoaSk7dmFyIHM9dC5hcHBseSh0aGlzLG4pO3JldHVybiByLmNhY2hlPWEuc2V0KGkscyl8fGEsc30sIm1lbW9pemVkIik7cmV0dXJuIHIuY2FjaGU9bmV3KEU5LkNhY2hlfHxDZCkscn12YXIgbTZlLEgwLFM5PU4oKCk9PnsidXNlIHN0cmljdCI7UTUoKTttNmU9IkV4cGVjdGVkIGEgZnVuY3Rpb24iO28oRTksIm1lbW9pemUiKTtFOS5DYWNoZT1DZDtIMD1FOX0pO2Z1bmN0aW9uIGc2ZSgpe3RoaXMuX19kYXRhX189bmV3IE5oLHRoaXMuc2l6ZT0wfXZhciBSWSxOWT1OKCgpPT57InVzZSBzdHJpY3QiO0t2KCk7byhnNmUsInN0YWNrQ2xlYXIiKTtSWT1nNmV9KTtmdW5jdGlvbiB5NmUodCl7dmFyIGU9dGhpcy5fX2RhdGFfXyxyPWUuZGVsZXRlKHQpO3JldHVybiB0aGlzLnNpemU9ZS5zaXplLHJ9dmFyIE1ZLElZPU4oKCk9PnsidXNlIHN0cmljdCI7byh5NmUsInN0YWNrRGVsZXRlIik7TVk9eTZlfSk7ZnVuY3Rpb24gdjZlKHQpe3JldHVybiB0aGlzLl9fZGF0YV9fLmdldCh0KX12YXIgT1ksUFk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKHY2ZSwic3RhY2tHZXQiKTtPWT12NmV9KTtmdW5jdGlvbiB4NmUodCl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKHQpfXZhciBCWSxGWT1OKCgpPT57InVzZSBzdHJpY3QiO28oeDZlLCJzdGFja0hhcyIpO0JZPXg2ZX0pO2Z1bmN0aW9uIHc2ZSh0LGUpe3ZhciByPXRoaXMuX19kYXRhX187aWYociBpbnN0YW5jZW9mIE5oKXt2YXIgbj1yLl9fZGF0YV9fO2lmKCFNaHx8bi5sZW5ndGg8YjZlLTEpcmV0dXJuIG4ucHVzaChbdCxlXSksdGhpcy5zaXplPSsrci5zaXplLHRoaXM7cj10aGlzLl9fZGF0YV9fPW5ldyBDZChuKX1yZXR1cm4gci5zZXQodCxlKSx0aGlzLnNpemU9ci5zaXplLHRoaXN9dmFyIGI2ZSwkWSx6WT1OKCgpPT57InVzZSBzdHJpY3QiO0t2KCk7SzUoKTtRNSgpO2I2ZT0yMDA7byh3NmUsInN0YWNrU2V0Iik7JFk9dzZlfSk7ZnVuY3Rpb24gVzAodCl7dmFyIGU9dGhpcy5fX2RhdGFfXz1uZXcgTmgodCk7dGhpcy5zaXplPWUuc2l6ZX12YXIgbGMsWnY9TigoKT0+eyJ1c2Ugc3RyaWN0IjtLdigpO05ZKCk7SVkoKTtQWSgpO0ZZKCk7elkoKTtvKFcwLCJTdGFjayIpO1cwLnByb3RvdHlwZS5jbGVhcj1SWTtXMC5wcm90b3R5cGUuZGVsZXRlPU1ZO1cwLnByb3RvdHlwZS5nZXQ9T1k7VzAucHJvdG90eXBlLmhhcz1CWTtXMC5wcm90b3R5cGUuc2V0PSRZO2xjPVcwfSk7dmFyIFQ2ZSxxMCxDOT1OKCgpPT57InVzZSBzdHJpY3QiO0xoKCk7VDZlPWZ1bmN0aW9uKCl7dHJ5e3ZhciB0PVNzKE9iamVjdCwiZGVmaW5lUHJvcGVydHkiKTtyZXR1cm4gdCh7fSwiIix7fSksdH1jYXRjaHt9fSgpLHEwPVQ2ZX0pO2Z1bmN0aW9uIGs2ZSh0LGUscil7ZT09Il9fcHJvdG9fXyImJnEwP3EwKHQsZSx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6cix3cml0YWJsZTohMH0pOnRbZV09cn12YXIgY2MsWTA9TigoKT0+eyJ1c2Ugc3RyaWN0IjtDOSgpO28oazZlLCJiYXNlQXNzaWduVmFsdWUiKTtjYz1rNmV9KTtmdW5jdGlvbiBFNmUodCxlLHIpeyhyIT09dm9pZCAwJiYhUm8odFtlXSxyKXx8cj09PXZvaWQgMCYmIShlIGluIHQpKSYmY2ModCxlLHIpfXZhciBKdixBOT1OKCgpPT57InVzZSBzdHJpY3QiO1kwKCk7U2QoKTtvKEU2ZSwiYXNzaWduTWVyZ2VWYWx1ZSIpO0p2PUU2ZX0pO2Z1bmN0aW9uIFM2ZSh0KXtyZXR1cm4gZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaT0tMSxhPU9iamVjdChlKSxzPW4oZSksbD1zLmxlbmd0aDtsLS07KXt2YXIgdT1zW3Q/bDorK2ldO2lmKHIoYVt1XSx1LGEpPT09ITEpYnJlYWt9cmV0dXJuIGV9fXZhciBHWSxWWT1OKCgpPT57InVzZSBzdHJpY3QiO28oUzZlLCJjcmVhdGVCYXNlRm9yIik7R1k9UzZlfSk7dmFyIEM2ZSxYMCxaNT1OKCgpPT57InVzZSBzdHJpY3QiO1ZZKCk7QzZlPUdZKCksWDA9QzZlfSk7ZnVuY3Rpb24gXzZlKHQsZSl7aWYoZSlyZXR1cm4gdC5zbGljZSgpO3ZhciByPXQubGVuZ3RoLG49V1k/V1kocik6bmV3IHQuY29uc3RydWN0b3Iocik7cmV0dXJuIHQuY29weShuKSxufXZhciBxWSxVWSxBNmUsSFksV1ksSjUsXzk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtMbygpO3FZPXR5cGVvZiBleHBvcnRzPT0ib2JqZWN0IiYmZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHMsVVk9cVkmJnR5cGVvZiBtb2R1bGU9PSJvYmplY3QiJiZtb2R1bGUmJiFtb2R1bGUubm9kZVR5cGUmJm1vZHVsZSxBNmU9VVkmJlVZLmV4cG9ydHM9PT1xWSxIWT1BNmU/bGkuQnVmZmVyOnZvaWQgMCxXWT1IWT9IWS5hbGxvY1Vuc2FmZTp2b2lkIDA7byhfNmUsImNsb25lQnVmZmVyIik7SjU9XzZlfSk7dmFyIEQ2ZSxqMCxEOT1OKCgpPT57InVzZSBzdHJpY3QiO0xvKCk7RDZlPWxpLlVpbnQ4QXJyYXksajA9RDZlfSk7ZnVuY3Rpb24gTDZlKHQpe3ZhciBlPW5ldyB0LmNvbnN0cnVjdG9yKHQuYnl0ZUxlbmd0aCk7cmV0dXJuIG5ldyBqMChlKS5zZXQobmV3IGowKHQpKSxlfXZhciBLMCxldz1OKCgpPT57InVzZSBzdHJpY3QiO0Q5KCk7byhMNmUsImNsb25lQXJyYXlCdWZmZXIiKTtLMD1MNmV9KTtmdW5jdGlvbiBSNmUodCxlKXt2YXIgcj1lP0swKHQuYnVmZmVyKTp0LmJ1ZmZlcjtyZXR1cm4gbmV3IHQuY29uc3RydWN0b3Iocix0LmJ5dGVPZmZzZXQsdC5sZW5ndGgpfXZhciB0dyxMOT1OKCgpPT57InVzZSBzdHJpY3QiO2V3KCk7byhSNmUsImNsb25lVHlwZWRBcnJheSIpO3R3PVI2ZX0pO2Z1bmN0aW9uIE42ZSh0LGUpe3ZhciByPS0xLG49dC5sZW5ndGg7Zm9yKGV8fChlPUFycmF5KG4pKTsrK3I8bjspZVtyXT10W3JdO3JldHVybiBlfXZhciBydyxSOT1OKCgpPT57InVzZSBzdHJpY3QiO28oTjZlLCJjb3B5QXJyYXkiKTtydz1ONmV9KTt2YXIgWVksTTZlLFhZLGpZPU4oKCk9PnsidXNlIHN0cmljdCI7SnMoKTtZWT1PYmplY3QuY3JlYXRlLE02ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIG8odCwib2JqZWN0IiksZnVuY3Rpb24oZSl7aWYoIWJuKGUpKXJldHVybnt9O2lmKFlZKXJldHVybiBZWShlKTt0LnByb3RvdHlwZT1lO3ZhciByPW5ldyB0O3JldHVybiB0LnByb3RvdHlwZT12b2lkIDAscn19KCksWFk9TTZlfSk7ZnVuY3Rpb24gSTZlKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB0KGUocikpfX12YXIgbncsTjk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKEk2ZSwib3ZlckFyZyIpO253PUk2ZX0pO3ZhciBPNmUsUTAsaXc9TigoKT0+eyJ1c2Ugc3RyaWN0IjtOOSgpO082ZT1udyhPYmplY3QuZ2V0UHJvdG90eXBlT2YsT2JqZWN0KSxRMD1PNmV9KTtmdW5jdGlvbiBCNmUodCl7dmFyIGU9dCYmdC5jb25zdHJ1Y3RvcixyPXR5cGVvZiBlPT0iZnVuY3Rpb24iJiZlLnByb3RvdHlwZXx8UDZlO3JldHVybiB0PT09cn12YXIgUDZlLHVjLFowPU4oKCk9PnsidXNlIHN0cmljdCI7UDZlPU9iamVjdC5wcm90b3R5cGU7byhCNmUsImlzUHJvdG90eXBlIik7dWM9QjZlfSk7ZnVuY3Rpb24gRjZlKHQpe3JldHVybiB0eXBlb2YgdC5jb25zdHJ1Y3Rvcj09ImZ1bmN0aW9uIiYmIXVjKHQpP1hZKFEwKHQpKTp7fX12YXIgYXcsTTk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtqWSgpO2l3KCk7WjAoKTtvKEY2ZSwiaW5pdENsb25lT2JqZWN0Iik7YXc9RjZlfSk7ZnVuY3Rpb24gJDZlKHQpe3JldHVybiB0IT1udWxsJiZ0eXBlb2YgdD09Im9iamVjdCJ9dmFyIHJpLE5vPU4oKCk9PnsidXNlIHN0cmljdCI7bygkNmUsImlzT2JqZWN0TGlrZSIpO3JpPSQ2ZX0pO2Z1bmN0aW9uIEc2ZSh0KXtyZXR1cm4gcmkodCkmJmRhKHQpPT16NmV9dmFyIHo2ZSxJOSxLWT1OKCgpPT57InVzZSBzdHJpY3QiO2t1KCk7Tm8oKTt6NmU9IltvYmplY3QgQXJndW1lbnRzXSI7byhHNmUsImJhc2VJc0FyZ3VtZW50cyIpO0k5PUc2ZX0pO3ZhciBRWSxWNmUsVTZlLEg2ZSxFbCxKMD1OKCgpPT57InVzZSBzdHJpY3QiO0tZKCk7Tm8oKTtRWT1PYmplY3QucHJvdG90eXBlLFY2ZT1RWS5oYXNPd25Qcm9wZXJ0eSxVNmU9UVkucHJvcGVydHlJc0VudW1lcmFibGUsSDZlPUk5KGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk/STk6ZnVuY3Rpb24odCl7cmV0dXJuIHJpKHQpJiZWNmUuY2FsbCh0LCJjYWxsZWUiKSYmIVU2ZS5jYWxsKHQsImNhbGxlZSIpfSxFbD1INmV9KTt2YXIgVzZlLFB0LFVuPU4oKCk9PnsidXNlIHN0cmljdCI7VzZlPUFycmF5LmlzQXJyYXksUHQ9VzZlfSk7ZnVuY3Rpb24gWTZlKHQpe3JldHVybiB0eXBlb2YgdD09Im51bWJlciImJnQ+LTEmJnQlMT09MCYmdDw9cTZlfXZhciBxNmUsZW0sc3c9TigoKT0+eyJ1c2Ugc3RyaWN0IjtxNmU9OTAwNzE5OTI1NDc0MDk5MTtvKFk2ZSwiaXNMZW5ndGgiKTtlbT1ZNmV9KTtmdW5jdGlvbiBYNmUodCl7cmV0dXJuIHQhPW51bGwmJmVtKHQubGVuZ3RoKSYmIVNpKHQpfXZhciBjaSxNbz1OKCgpPT57InVzZSBzdHJpY3QiO1l2KCk7c3coKTtvKFg2ZSwiaXNBcnJheUxpa2UiKTtjaT1YNmV9KTtmdW5jdGlvbiBqNmUodCl7cmV0dXJuIHJpKHQpJiZjaSh0KX12YXIgQWQsb3c9TigoKT0+eyJ1c2Ugc3RyaWN0IjtNbygpO05vKCk7byhqNmUsImlzQXJyYXlMaWtlT2JqZWN0Iik7QWQ9ajZlfSk7ZnVuY3Rpb24gSzZlKCl7cmV0dXJuITF9dmFyIFpZLEpZPU4oKCk9PnsidXNlIHN0cmljdCI7byhLNmUsInN0dWJGYWxzZSIpO1pZPUs2ZX0pO3ZhciByWCxlWCxRNmUsdFgsWjZlLEo2ZSxTbCx0bT1OKCgpPT57InVzZSBzdHJpY3QiO0xvKCk7SlkoKTtyWD10eXBlb2YgZXhwb3J0cz09Im9iamVjdCImJmV4cG9ydHMmJiFleHBvcnRzLm5vZGVUeXBlJiZleHBvcnRzLGVYPXJYJiZ0eXBlb2YgbW9kdWxlPT0ib2JqZWN0IiYmbW9kdWxlJiYhbW9kdWxlLm5vZGVUeXBlJiZtb2R1bGUsUTZlPWVYJiZlWC5leHBvcnRzPT09clgsdFg9UTZlP2xpLkJ1ZmZlcjp2b2lkIDAsWjZlPXRYP3RYLmlzQnVmZmVyOnZvaWQgMCxKNmU9WjZlfHxaWSxTbD1KNmV9KTtmdW5jdGlvbiBhU2UodCl7aWYoIXJpKHQpfHxkYSh0KSE9ZVNlKXJldHVybiExO3ZhciBlPVEwKHQpO2lmKGU9PT1udWxsKXJldHVybiEwO3ZhciByPW5TZS5jYWxsKGUsImNvbnN0cnVjdG9yIikmJmUuY29uc3RydWN0b3I7cmV0dXJuIHR5cGVvZiByPT0iZnVuY3Rpb24iJiZyIGluc3RhbmNlb2YgciYmblguY2FsbChyKT09aVNlfXZhciBlU2UsdFNlLHJTZSxuWCxuU2UsaVNlLGlYLGFYPU4oKCk9PnsidXNlIHN0cmljdCI7a3UoKTtpdygpO05vKCk7ZVNlPSJbb2JqZWN0IE9iamVjdF0iLHRTZT1GdW5jdGlvbi5wcm90b3R5cGUsclNlPU9iamVjdC5wcm90b3R5cGUsblg9dFNlLnRvU3RyaW5nLG5TZT1yU2UuaGFzT3duUHJvcGVydHksaVNlPW5YLmNhbGwoT2JqZWN0KTtvKGFTZSwiaXNQbGFpbk9iamVjdCIpO2lYPWFTZX0pO2Z1bmN0aW9uIExTZSh0KXtyZXR1cm4gcmkodCkmJmVtKHQubGVuZ3RoKSYmISFGbltkYSh0KV19dmFyIHNTZSxvU2UsbFNlLGNTZSx1U2UsaFNlLGZTZSxkU2UscFNlLG1TZSxnU2UseVNlLHZTZSx4U2UsYlNlLHdTZSxUU2Usa1NlLEVTZSxTU2UsQ1NlLEFTZSxfU2UsRFNlLEZuLHNYLG9YPU4oKCk9PnsidXNlIHN0cmljdCI7a3UoKTtzdygpO05vKCk7c1NlPSJbb2JqZWN0IEFyZ3VtZW50c10iLG9TZT0iW29iamVjdCBBcnJheV0iLGxTZT0iW29iamVjdCBCb29sZWFuXSIsY1NlPSJbb2JqZWN0IERhdGVdIix1U2U9IltvYmplY3QgRXJyb3JdIixoU2U9IltvYmplY3QgRnVuY3Rpb25dIixmU2U9IltvYmplY3QgTWFwXSIsZFNlPSJbb2JqZWN0IE51bWJlcl0iLHBTZT0iW29iamVjdCBPYmplY3RdIixtU2U9IltvYmplY3QgUmVnRXhwXSIsZ1NlPSJbb2JqZWN0IFNldF0iLHlTZT0iW29iamVjdCBTdHJpbmddIix2U2U9IltvYmplY3QgV2Vha01hcF0iLHhTZT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLGJTZT0iW29iamVjdCBEYXRhVmlld10iLHdTZT0iW29iamVjdCBGbG9hdDMyQXJyYXldIixUU2U9IltvYmplY3QgRmxvYXQ2NEFycmF5XSIsa1NlPSJbb2JqZWN0IEludDhBcnJheV0iLEVTZT0iW29iamVjdCBJbnQxNkFycmF5XSIsU1NlPSJbb2JqZWN0IEludDMyQXJyYXldIixDU2U9IltvYmplY3QgVWludDhBcnJheV0iLEFTZT0iW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iLF9TZT0iW29iamVjdCBVaW50MTZBcnJheV0iLERTZT0iW29iamVjdCBVaW50MzJBcnJheV0iLEZuPXt9O0ZuW3dTZV09Rm5bVFNlXT1GbltrU2VdPUZuW0VTZV09Rm5bU1NlXT1GbltDU2VdPUZuW0FTZV09Rm5bX1NlXT1GbltEU2VdPSEwO0ZuW3NTZV09Rm5bb1NlXT1Gblt4U2VdPUZuW2xTZV09Rm5bYlNlXT1GbltjU2VdPUZuW3VTZV09Rm5baFNlXT1GbltmU2VdPUZuW2RTZV09Rm5bcFNlXT1GblttU2VdPUZuW2dTZV09Rm5beVNlXT1Gblt2U2VdPSExO28oTFNlLCJiYXNlSXNUeXBlZEFycmF5Iik7c1g9TFNlfSk7ZnVuY3Rpb24gUlNlKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdChlKX19dmFyIElvLF9kPU4oKCk9PnsidXNlIHN0cmljdCI7byhSU2UsImJhc2VVbmFyeSIpO0lvPVJTZX0pO3ZhciBsWCxlMixOU2UsTzksTVNlLE9vLHQyPU4oKCk9PnsidXNlIHN0cmljdCI7dzkoKTtsWD10eXBlb2YgZXhwb3J0cz09Im9iamVjdCImJmV4cG9ydHMmJiFleHBvcnRzLm5vZGVUeXBlJiZleHBvcnRzLGUyPWxYJiZ0eXBlb2YgbW9kdWxlPT0ib2JqZWN0IiYmbW9kdWxlJiYhbW9kdWxlLm5vZGVUeXBlJiZtb2R1bGUsTlNlPWUyJiZlMi5leHBvcnRzPT09bFgsTzk9TlNlJiZYNS5wcm9jZXNzLE1TZT1mdW5jdGlvbigpe3RyeXt2YXIgdD1lMiYmZTIucmVxdWlyZSYmZTIucmVxdWlyZSgidXRpbCIpLnR5cGVzO3JldHVybiB0fHxPOSYmTzkuYmluZGluZyYmTzkuYmluZGluZygidXRpbCIpfWNhdGNoe319KCksT289TVNlfSk7dmFyIGNYLElTZSxPaCxyMj1OKCgpPT57InVzZSBzdHJpY3QiO29YKCk7X2QoKTt0MigpO2NYPU9vJiZPby5pc1R5cGVkQXJyYXksSVNlPWNYP0lvKGNYKTpzWCxPaD1JU2V9KTtmdW5jdGlvbiBPU2UodCxlKXtpZighKGU9PT0iY29uc3RydWN0b3IiJiZ0eXBlb2YgdFtlXT09ImZ1bmN0aW9uIikmJmUhPSJfX3Byb3RvX18iKXJldHVybiB0W2VdfXZhciBuMixQOT1OKCgpPT57InVzZSBzdHJpY3QiO28oT1NlLCJzYWZlR2V0Iik7bjI9T1NlfSk7ZnVuY3Rpb24gRlNlKHQsZSxyKXt2YXIgbj10W2VdOyghKEJTZS5jYWxsKHQsZSkmJlJvKG4scikpfHxyPT09dm9pZCAwJiYhKGUgaW4gdCkpJiZjYyh0LGUscil9dmFyIFBTZSxCU2UsaGMscm09TigoKT0+eyJ1c2Ugc3RyaWN0IjtZMCgpO1NkKCk7UFNlPU9iamVjdC5wcm90b3R5cGUsQlNlPVBTZS5oYXNPd25Qcm9wZXJ0eTtvKEZTZSwiYXNzaWduVmFsdWUiKTtoYz1GU2V9KTtmdW5jdGlvbiAkU2UodCxlLHIsbil7dmFyIGk9IXI7cnx8KHI9e30pO2Zvcih2YXIgYT0tMSxzPWUubGVuZ3RoOysrYTxzOyl7dmFyIGw9ZVthXSx1PW4/bihyW2xdLHRbbF0sbCxyLHQpOnZvaWQgMDt1PT09dm9pZCAwJiYodT10W2xdKSxpP2NjKHIsbCx1KTpoYyhyLGwsdSl9cmV0dXJuIHJ9dmFyIFBvLERkPU4oKCk9PnsidXNlIHN0cmljdCI7cm0oKTtZMCgpO28oJFNlLCJjb3B5T2JqZWN0Iik7UG89JFNlfSk7ZnVuY3Rpb24gelNlKHQsZSl7Zm9yKHZhciByPS0xLG49QXJyYXkodCk7KytyPHQ7KW5bcl09ZShyKTtyZXR1cm4gbn12YXIgdVgsaFg9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKHpTZSwiYmFzZVRpbWVzIik7dVg9elNlfSk7ZnVuY3Rpb24gVVNlKHQsZSl7dmFyIHI9dHlwZW9mIHQ7cmV0dXJuIGU9ZT8/R1NlLCEhZSYmKHI9PSJudW1iZXIifHxyIT0ic3ltYm9sIiYmVlNlLnRlc3QodCkpJiZ0Pi0xJiZ0JTE9PTAmJnQ8ZX12YXIgR1NlLFZTZSxQaCxpMj1OKCgpPT57InVzZSBzdHJpY3QiO0dTZT05MDA3MTk5MjU0NzQwOTkxLFZTZT0vXig/OjB8WzEtOV1cZCopJC87byhVU2UsImlzSW5kZXgiKTtQaD1VU2V9KTtmdW5jdGlvbiBxU2UodCxlKXt2YXIgcj1QdCh0KSxuPSFyJiZFbCh0KSxpPSFyJiYhbiYmU2wodCksYT0hciYmIW4mJiFpJiZPaCh0KSxzPXJ8fG58fGl8fGEsbD1zP3VYKHQubGVuZ3RoLFN0cmluZyk6W10sdT1sLmxlbmd0aDtmb3IodmFyIGggaW4gdCkoZXx8V1NlLmNhbGwodCxoKSkmJiEocyYmKGg9PSJsZW5ndGgifHxpJiYoaD09Im9mZnNldCJ8fGg9PSJwYXJlbnQiKXx8YSYmKGg9PSJidWZmZXIifHxoPT0iYnl0ZUxlbmd0aCJ8fGg9PSJieXRlT2Zmc2V0Iil8fFBoKGgsdSkpKSYmbC5wdXNoKGgpO3JldHVybiBsfXZhciBIU2UsV1NlLGx3LEI5PU4oKCk9PnsidXNlIHN0cmljdCI7aFgoKTtKMCgpO1VuKCk7dG0oKTtpMigpO3IyKCk7SFNlPU9iamVjdC5wcm90b3R5cGUsV1NlPUhTZS5oYXNPd25Qcm9wZXJ0eTtvKHFTZSwiYXJyYXlMaWtlS2V5cyIpO2x3PXFTZX0pO2Z1bmN0aW9uIFlTZSh0KXt2YXIgZT1bXTtpZih0IT1udWxsKWZvcih2YXIgciBpbiBPYmplY3QodCkpZS5wdXNoKHIpO3JldHVybiBlfXZhciBmWCxkWD1OKCgpPT57InVzZSBzdHJpY3QiO28oWVNlLCJuYXRpdmVLZXlzSW4iKTtmWD1ZU2V9KTtmdW5jdGlvbiBLU2UodCl7aWYoIWJuKHQpKXJldHVybiBmWCh0KTt2YXIgZT11Yyh0KSxyPVtdO2Zvcih2YXIgbiBpbiB0KW49PSJjb25zdHJ1Y3RvciImJihlfHwhalNlLmNhbGwodCxuKSl8fHIucHVzaChuKTtyZXR1cm4gcn12YXIgWFNlLGpTZSxwWCxtWD1OKCgpPT57InVzZSBzdHJpY3QiO0pzKCk7WjAoKTtkWCgpO1hTZT1PYmplY3QucHJvdG90eXBlLGpTZT1YU2UuaGFzT3duUHJvcGVydHk7byhLU2UsImJhc2VLZXlzSW4iKTtwWD1LU2V9KTtmdW5jdGlvbiBRU2UodCl7cmV0dXJuIGNpKHQpP2x3KHQsITApOnBYKHQpfXZhciBDcyxCaD1OKCgpPT57InVzZSBzdHJpY3QiO0I5KCk7bVgoKTtNbygpO28oUVNlLCJrZXlzSW4iKTtDcz1RU2V9KTtmdW5jdGlvbiBaU2UodCl7cmV0dXJuIFBvKHQsQ3ModCkpfXZhciBnWCx5WD1OKCgpPT57InVzZSBzdHJpY3QiO0RkKCk7QmgoKTtvKFpTZSwidG9QbGFpbk9iamVjdCIpO2dYPVpTZX0pO2Z1bmN0aW9uIEpTZSh0LGUscixuLGksYSxzKXt2YXIgbD1uMih0LHIpLHU9bjIoZSxyKSxoPXMuZ2V0KHUpO2lmKGgpe0p2KHQscixoKTtyZXR1cm59dmFyIGY9YT9hKGwsdSxyKyIiLHQsZSxzKTp2b2lkIDAsZD1mPT09dm9pZCAwO2lmKGQpe3ZhciBwPVB0KHUpLG09IXAmJlNsKHUpLGc9IXAmJiFtJiZPaCh1KTtmPXUscHx8bXx8Zz9QdChsKT9mPWw6QWQobCk/Zj1ydyhsKTptPyhkPSExLGY9SjUodSwhMCkpOmc/KGQ9ITEsZj10dyh1LCEwKSk6Zj1bXTppWCh1KXx8RWwodSk/KGY9bCxFbChsKT9mPWdYKGwpOighYm4obCl8fFNpKGwpKSYmKGY9YXcodSkpKTpkPSExfWQmJihzLnNldCh1LGYpLGkoZix1LG4sYSxzKSxzLmRlbGV0ZSh1KSksSnYodCxyLGYpfXZhciB2WCx4WD1OKCgpPT57InVzZSBzdHJpY3QiO0E5KCk7XzkoKTtMOSgpO1I5KCk7TTkoKTtKMCgpO1VuKCk7b3coKTt0bSgpO1l2KCk7SnMoKTthWCgpO3IyKCk7UDkoKTt5WCgpO28oSlNlLCJiYXNlTWVyZ2VEZWVwIik7dlg9SlNlfSk7ZnVuY3Rpb24gYlgodCxlLHIsbixpKXt0IT09ZSYmWDAoZSxmdW5jdGlvbihhLHMpe2lmKGl8fChpPW5ldyBsYyksYm4oYSkpdlgodCxlLHMscixiWCxuLGkpO2Vsc2V7dmFyIGw9bj9uKG4yKHQscyksYSxzKyIiLHQsZSxpKTp2b2lkIDA7bD09PXZvaWQgMCYmKGw9YSksSnYodCxzLGwpfX0sQ3MpfXZhciB3WCxUWD1OKCgpPT57InVzZSBzdHJpY3QiO1p2KCk7QTkoKTtaNSgpO3hYKCk7SnMoKTtCaCgpO1A5KCk7byhiWCwiYmFzZU1lcmdlIik7d1g9Ylh9KTtmdW5jdGlvbiBlQ2UodCl7cmV0dXJuIHR9dmFyIHRhLEN1PU4oKCk9PnsidXNlIHN0cmljdCI7byhlQ2UsImlkZW50aXR5Iik7dGE9ZUNlfSk7ZnVuY3Rpb24gdENlKHQsZSxyKXtzd2l0Y2goci5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gdC5jYWxsKGUpO2Nhc2UgMTpyZXR1cm4gdC5jYWxsKGUsclswXSk7Y2FzZSAyOnJldHVybiB0LmNhbGwoZSxyWzBdLHJbMV0pO2Nhc2UgMzpyZXR1cm4gdC5jYWxsKGUsclswXSxyWzFdLHJbMl0pfXJldHVybiB0LmFwcGx5KGUscil9dmFyIGtYLEVYPU4oKCk9PnsidXNlIHN0cmljdCI7byh0Q2UsImFwcGx5Iik7a1g9dENlfSk7ZnVuY3Rpb24gckNlKHQsZSxyKXtyZXR1cm4gZT1TWChlPT09dm9pZCAwP3QubGVuZ3RoLTE6ZSwwKSxmdW5jdGlvbigpe2Zvcih2YXIgbj1hcmd1bWVudHMsaT0tMSxhPVNYKG4ubGVuZ3RoLWUsMCkscz1BcnJheShhKTsrK2k8YTspc1tpXT1uW2UraV07aT0tMTtmb3IodmFyIGw9QXJyYXkoZSsxKTsrK2k8ZTspbFtpXT1uW2ldO3JldHVybiBsW2VdPXIocyksa1godCx0aGlzLGwpfX12YXIgU1gsY3csRjk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtFWCgpO1NYPU1hdGgubWF4O28ockNlLCJvdmVyUmVzdCIpO2N3PXJDZX0pO2Z1bmN0aW9uIG5DZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19dmFyIEFzLCQ5PU4oKCk9PnsidXNlIHN0cmljdCI7byhuQ2UsImNvbnN0YW50Iik7QXM9bkNlfSk7dmFyIGlDZSxDWCxBWD1OKCgpPT57InVzZSBzdHJpY3QiOyQ5KCk7QzkoKTtDdSgpO2lDZT1xMD9mdW5jdGlvbih0LGUpe3JldHVybiBxMCh0LCJ0b1N0cmluZyIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHZhbHVlOkFzKGUpLHdyaXRhYmxlOiEwfSl9OnRhLENYPWlDZX0pO2Z1bmN0aW9uIGxDZSh0KXt2YXIgZT0wLHI9MDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1vQ2UoKSxpPXNDZS0obi1yKTtpZihyPW4saT4wKXtpZigrK2U+PWFDZSlyZXR1cm4gYXJndW1lbnRzWzBdfWVsc2UgZT0wO3JldHVybiB0LmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpfX12YXIgYUNlLHNDZSxvQ2UsX1gsRFg9TigoKT0+eyJ1c2Ugc3RyaWN0IjthQ2U9ODAwLHNDZT0xNixvQ2U9RGF0ZS5ub3c7byhsQ2UsInNob3J0T3V0Iik7X1g9bENlfSk7dmFyIGNDZSx1dyx6OT1OKCgpPT57InVzZSBzdHJpY3QiO0FYKCk7RFgoKTtjQ2U9X1goQ1gpLHV3PWNDZX0pO2Z1bmN0aW9uIHVDZSh0LGUpe3JldHVybiB1dyhjdyh0LGUsdGEpLHQrIiIpfXZhciBmYyxubT1OKCgpPT57InVzZSBzdHJpY3QiO0N1KCk7RjkoKTt6OSgpO28odUNlLCJiYXNlUmVzdCIpO2ZjPXVDZX0pO2Z1bmN0aW9uIGhDZSh0LGUscil7aWYoIWJuKHIpKXJldHVybiExO3ZhciBuPXR5cGVvZiBlO3JldHVybihuPT0ibnVtYmVyIj9jaShyKSYmUGgoZSxyLmxlbmd0aCk6bj09InN0cmluZyImJmUgaW4gcik/Um8ocltlXSx0KTohMX12YXIgZW8sTGQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtTZCgpO01vKCk7aTIoKTtKcygpO28oaENlLCJpc0l0ZXJhdGVlQ2FsbCIpO2VvPWhDZX0pO2Z1bmN0aW9uIGZDZSh0KXtyZXR1cm4gZmMoZnVuY3Rpb24oZSxyKXt2YXIgbj0tMSxpPXIubGVuZ3RoLGE9aT4xP3JbaS0xXTp2b2lkIDAscz1pPjI/clsyXTp2b2lkIDA7Zm9yKGE9dC5sZW5ndGg+MyYmdHlwZW9mIGE9PSJmdW5jdGlvbiI/KGktLSxhKTp2b2lkIDAscyYmZW8oclswXSxyWzFdLHMpJiYoYT1pPDM/dm9pZCAwOmEsaT0xKSxlPU9iamVjdChlKTsrK248aTspe3ZhciBsPXJbbl07bCYmdChlLGwsbixhKX1yZXR1cm4gZX0pfXZhciBodyxHOT1OKCgpPT57InVzZSBzdHJpY3QiO25tKCk7TGQoKTtvKGZDZSwiY3JlYXRlQXNzaWduZXIiKTtodz1mQ2V9KTt2YXIgZENlLEZoLFY5PU4oKCk9PnsidXNlIHN0cmljdCI7VFgoKTtHOSgpO2RDZT1odyhmdW5jdGlvbih0LGUscil7d1godCxlLHIpfSksRmg9ZENlfSk7ZnVuY3Rpb24gVzkodCxlKXtpZighdClyZXR1cm4gZTtsZXQgcj1gY3VydmUke3QuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKX1gO3JldHVybiBwQ2Vbcl0/P2V9ZnVuY3Rpb24gdkNlKHQsZSl7bGV0IHI9dC50cmltKCk7aWYocilyZXR1cm4gZS5zZWN1cml0eUxldmVsIT09Imxvb3NlIj8oMCxOWC5zYW5pdGl6ZVVybCkocik6cn1mdW5jdGlvbiBPWCh0LGUpe3JldHVybiF0fHwhZT8wOk1hdGguc3FydChNYXRoLnBvdyhlLngtdC54LDIpK01hdGgucG93KGUueS10LnksMikpfWZ1bmN0aW9uIGJDZSh0KXtsZXQgZSxyPTA7dC5mb3JFYWNoKGk9PntyKz1PWChpLGUpLGU9aX0pO2xldCBuPXIvMjtyZXR1cm4gcTkodCxuKX1mdW5jdGlvbiB3Q2UodCl7cmV0dXJuIHQubGVuZ3RoPT09MT90WzBdOmJDZSh0KX1mdW5jdGlvbiBrQ2UodCxlLHIpe2xldCBuPXN0cnVjdHVyZWRDbG9uZShyKTtZLmluZm8oIm91ciBwb2ludHMiLG4pLGUhPT0ic3RhcnRfbGVmdCImJmUhPT0ic3RhcnRfcmlnaHQiJiZuLnJldmVyc2UoKTtsZXQgaT0yNSt0LGE9cTkobixpKSxzPTEwK3QqLjUsbD1NYXRoLmF0YW4yKG5bMF0ueS1hLnksblswXS54LWEueCksdT17eDowLHk6MH07cmV0dXJuIGU9PT0ic3RhcnRfbGVmdCI/KHUueD1NYXRoLnNpbihsK01hdGguUEkpKnMrKG5bMF0ueCthLngpLzIsdS55PS1NYXRoLmNvcyhsK01hdGguUEkpKnMrKG5bMF0ueSthLnkpLzIpOmU9PT0iZW5kX3JpZ2h0Ij8odS54PU1hdGguc2luKGwtTWF0aC5QSSkqcysoblswXS54K2EueCkvMi01LHUueT0tTWF0aC5jb3MobC1NYXRoLlBJKSpzKyhuWzBdLnkrYS55KS8yLTUpOmU9PT0iZW5kX2xlZnQiPyh1Lng9TWF0aC5zaW4obCkqcysoblswXS54K2EueCkvMi01LHUueT0tTWF0aC5jb3MobCkqcysoblswXS55K2EueSkvMi01KToodS54PU1hdGguc2luKGwpKnMrKG5bMF0ueCthLngpLzIsdS55PS1NYXRoLmNvcyhsKSpzKyhuWzBdLnkrYS55KS8yKSx1fWZ1bmN0aW9uIFk5KHQpe2xldCBlPSIiLHI9IiI7Zm9yKGxldCBuIG9mIHQpbiE9PXZvaWQgMCYmKG4uc3RhcnRzV2l0aCgiY29sb3I6Iil8fG4uc3RhcnRzV2l0aCgidGV4dC1hbGlnbjoiKT9yPXIrbisiOyI6ZT1lK24rIjsiKTtyZXR1cm57c3R5bGU6ZSxsYWJlbFN0eWxlOnJ9fWZ1bmN0aW9uIEVDZSh0KXtsZXQgZT0iIixyPSIwMTIzNDU2Nzg5YWJjZGVmIixuPXIubGVuZ3RoO2ZvcihsZXQgaT0wO2k8dDtpKyspZSs9ci5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm4pKTtyZXR1cm4gZX1mdW5jdGlvbiBkdyh0LGUpe3JldHVybiBROSh0LGUpLmhlaWdodH1mdW5jdGlvbiByYSh0LGUpe3JldHVybiBROSh0LGUpLndpZHRofWZ1bmN0aW9uIFo5KHQpe3JldHVybiJzdHIiaW4gdH1mdW5jdGlvbiBGaSh0LGUpe3JldHVybiBGaCh7fSx0LGUpfWZ1bmN0aW9uICRuKHQpe3JldHVybiB0Pz9udWxsfXZhciBOWCxIOSxwQ2UsbUNlLGdDZSxNWCxJWCx5Q2UseENlLExYLHE5LFRDZSxSWCxYOSxqOSxTQ2UsQ0NlLEs5LEFDZSxROSxVOSxmdyxfQ2UsRENlLEJvLEd0LFBYLG5hLCRoLGlyPU4oKCk9PnsidXNlIHN0cmljdCI7Tlg9U2EoejAoKSwxKTtkcigpO2dyKCk7ZTcoKTt2dCgpO1hmKCk7czAoKTtTOSgpO1Y5KCk7JDQoKTtIOT0iXHUyMDBCIixwQ2U9e2N1cnZlQmFzaXM6RG8sY3VydmVCYXNpc0Nsb3NlZDpQNSxjdXJ2ZUJhc2lzT3BlbjpCNSxjdXJ2ZUJ1bXBYOlJ2LGN1cnZlQnVtcFk6TnYsY3VydmVCdW5kbGU6bDksY3VydmVDYXJkaW5hbENsb3NlZDpjOSxjdXJ2ZUNhcmRpbmFsT3BlbjpoOSxjdXJ2ZUNhcmRpbmFsOlB2LGN1cnZlQ2F0bXVsbFJvbUNsb3NlZDpkOSxjdXJ2ZUNhdG11bGxSb21PcGVuOnA5LGN1cnZlQ2F0bXVsbFJvbTokdixjdXJ2ZUxpbmVhcjp3dSxjdXJ2ZUxpbmVhckNsb3NlZDpWNSxjdXJ2ZU1vbm90b25lWDp6dixjdXJ2ZU1vbm90b25lWTpHdixjdXJ2ZU5hdHVyYWw6RjAsY3VydmVTdGVwOiQwLGN1cnZlU3RlcEFmdGVyOlV2LGN1cnZlU3RlcEJlZm9yZTpWdn0sbUNlPS9ccyooPzooXHcrKSg/PTopOnwoXHcrKSlccyooPzooXHcrKXwoKD86KD8hfSV7Mn0pLnxccj9cbikqKSk/XHMqKD86fSV7Mn0pPy9naSxnQ2U9byhmdW5jdGlvbih0LGUpe2xldCByPU1YKHQsLyg/OmluaXRcYil8KD86aW5pdGlhbGl6ZVxiKS8pLG49e307aWYoQXJyYXkuaXNBcnJheShyKSl7bGV0IHM9ci5tYXAobD0+bC5hcmdzKTtsMChzKSxuPUduKG4sWy4uLnNdKX1lbHNlIG49ci5hcmdzO2lmKCFuKXJldHVybjtsZXQgaT1hMCh0LGUpLGE9ImNvbmZpZyI7cmV0dXJuIG5bYV0hPT12b2lkIDAmJihpPT09ImZsb3djaGFydC12MiImJihpPSJmbG93Y2hhcnQiKSxuW2ldPW5bYV0sZGVsZXRlIG5bYV0pLG59LCJkZXRlY3RJbml0IiksTVg9byhmdW5jdGlvbih0LGU9bnVsbCl7dHJ5e2xldCByPW5ldyBSZWdFeHAoYFslXXsyfSg/IVt7XSR7bUNlLnNvdXJjZX0pKD89W31dWyVdezJ9KS4qCmAsImlnIik7dD10LnRyaW0oKS5yZXBsYWNlKHIsIiIpLnJlcGxhY2UoLycvZ20sJyInKSxZLmRlYnVnKGBEZXRlY3RpbmcgZGlhZ3JhbSBkaXJlY3RpdmUke2UhPT1udWxsPyIgdHlwZToiK2U6IiJ9IGJhc2VkIG9uIHRoZSB0ZXh0OiR7dH1gKTtsZXQgbixpPVtdO2Zvcig7KG49cWYuZXhlYyh0KSkhPT1udWxsOylpZihuLmluZGV4PT09cWYubGFzdEluZGV4JiZxZi5sYXN0SW5kZXgrKyxuJiYhZXx8ZSYmblsxXT8ubWF0Y2goZSl8fGUmJm5bMl0/Lm1hdGNoKGUpKXtsZXQgYT1uWzFdP25bMV06blsyXSxzPW5bM10/blszXS50cmltKCk6bls0XT9KU09OLnBhcnNlKG5bNF0udHJpbSgpKTpudWxsO2kucHVzaCh7dHlwZTphLGFyZ3M6c30pfXJldHVybiBpLmxlbmd0aD09PTA/e3R5cGU6dCxhcmdzOm51bGx9OmkubGVuZ3RoPT09MT9pWzBdOml9Y2F0Y2gocil7cmV0dXJuIFkuZXJyb3IoYEVSUk9SOiAke3IubWVzc2FnZX0gLSBVbmFibGUgdG8gcGFyc2UgZGlyZWN0aXZlIHR5cGU6ICcke2V9JyBiYXNlZCBvbiB0aGUgdGV4dDogJyR7dH0nYCkse3R5cGU6dm9pZCAwLGFyZ3M6bnVsbH19fSwiZGV0ZWN0RGlyZWN0aXZlIiksSVg9byhmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKHFmLCIiKX0sInJlbW92ZURpcmVjdGl2ZXMiKSx5Q2U9byhmdW5jdGlvbih0LGUpe2ZvcihsZXRbcixuXW9mIGUuZW50cmllcygpKWlmKG4ubWF0Y2godCkpcmV0dXJuIHI7cmV0dXJuLTF9LCJpc1N1YnN0cmluZ0luQXJyYXkiKTtvKFc5LCJpbnRlcnBvbGF0ZVRvQ3VydmUiKTtvKHZDZSwiZm9ybWF0VXJsIik7eENlPW8oKHQsLi4uZSk9PntsZXQgcj10LnNwbGl0KCIuIiksbj1yLmxlbmd0aC0xLGk9cltuXSxhPXdpbmRvdztmb3IobGV0IHM9MDtzPG47cysrKWlmKGE9YVtyW3NdXSwhYSl7WS5lcnJvcihgRnVuY3Rpb24gbmFtZTogJHt0fSBub3QgZm91bmQgaW4gd2luZG93YCk7cmV0dXJufWFbaV0oLi4uZSl9LCJydW5GdW5jIik7byhPWCwiZGlzdGFuY2UiKTtvKGJDZSwidHJhdmVyc2VFZGdlIik7byh3Q2UsImNhbGNMYWJlbFBvc2l0aW9uIik7TFg9bygodCxlPTIpPT57bGV0IHI9TWF0aC5wb3coMTAsZSk7cmV0dXJuIE1hdGgucm91bmQodCpyKS9yfSwicm91bmROdW1iZXIiKSxxOT1vKCh0LGUpPT57bGV0IHIsbj1lO2ZvcihsZXQgaSBvZiB0KXtpZihyKXtsZXQgYT1PWChpLHIpO2lmKGE9PT0wKXJldHVybiByO2lmKGE8biluLT1hO2Vsc2V7bGV0IHM9bi9hO2lmKHM8PTApcmV0dXJuIHI7aWYocz49MSlyZXR1cm57eDppLngseTppLnl9O2lmKHM+MCYmczwxKXJldHVybnt4OkxYKCgxLXMpKnIueCtzKmkueCw1KSx5OkxYKCgxLXMpKnIueStzKmkueSw1KX19fXI9aX10aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIGEgc3VpdGFibGUgcG9pbnQgZm9yIHRoZSBnaXZlbiBkaXN0YW5jZSIpfSwiY2FsY3VsYXRlUG9pbnQiKSxUQ2U9bygodCxlLHIpPT57WS5pbmZvKGBvdXIgcG9pbnRzICR7SlNPTi5zdHJpbmdpZnkoZSl9YCksZVswXSE9PXImJihlPWUucmV2ZXJzZSgpKTtsZXQgaT1xOShlLDI1KSxhPXQ/MTA6NSxzPU1hdGguYXRhbjIoZVswXS55LWkueSxlWzBdLngtaS54KSxsPXt4OjAseTowfTtyZXR1cm4gbC54PU1hdGguc2luKHMpKmErKGVbMF0ueCtpLngpLzIsbC55PS1NYXRoLmNvcyhzKSphKyhlWzBdLnkraS55KS8yLGx9LCJjYWxjQ2FyZGluYWxpdHlQb3NpdGlvbiIpO28oa0NlLCJjYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uIik7byhZOSwiZ2V0U3R5bGVzRnJvbUFycmF5Iik7Ulg9MCxYOT1vKCgpPT4oUlgrKywiaWQtIitNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwxMikrIi0iK1JYKSwiZ2VuZXJhdGVJZCIpO28oRUNlLCJtYWtlUmFuZG9tSGV4Iik7ajk9byh0PT5FQ2UodC5sZW5ndGgpLCJyYW5kb20iKSxTQ2U9byhmdW5jdGlvbigpe3JldHVybnt4OjAseTowLGZpbGw6dm9pZCAwLGFuY2hvcjoic3RhcnQiLHN0eWxlOiIjNjY2Iix3aWR0aDoxMDAsaGVpZ2h0OjEwMCx0ZXh0TWFyZ2luOjAscng6MCxyeTowLHZhbGlnbjp2b2lkIDAsdGV4dDoiIn19LCJnZXRUZXh0T2JqIiksQ0NlPW8oZnVuY3Rpb24odCxlKXtsZXQgcj1lLnRleHQucmVwbGFjZShaZS5saW5lQnJlYWtSZWdleCwiICIpLFssbl09Qm8oZS5mb250U2l6ZSksaT10LmFwcGVuZCgidGV4dCIpO2kuYXR0cigieCIsZS54KSxpLmF0dHIoInkiLGUueSksaS5zdHlsZSgidGV4dC1hbmNob3IiLGUuYW5jaG9yKSxpLnN0eWxlKCJmb250LWZhbWlseSIsZS5mb250RmFtaWx5KSxpLnN0eWxlKCJmb250LXNpemUiLG4pLGkuc3R5bGUoImZvbnQtd2VpZ2h0IixlLmZvbnRXZWlnaHQpLGkuYXR0cigiZmlsbCIsZS5maWxsKSxlLmNsYXNzIT09dm9pZCAwJiZpLmF0dHIoImNsYXNzIixlLmNsYXNzKTtsZXQgYT1pLmFwcGVuZCgidHNwYW4iKTtyZXR1cm4gYS5hdHRyKCJ4IixlLngrZS50ZXh0TWFyZ2luKjIpLGEuYXR0cigiZmlsbCIsZS5maWxsKSxhLnRleHQociksaX0sImRyYXdTaW1wbGVUZXh0IiksSzk9SDAoKHQsZSxyKT0+e2lmKCF0fHwocj1PYmplY3QuYXNzaWduKHtmb250U2l6ZToxMixmb250V2VpZ2h0OjQwMCxmb250RmFtaWx5OiJBcmlhbCIsam9pbldpdGg6Ijxici8+In0sciksWmUubGluZUJyZWFrUmVnZXgudGVzdCh0KSkpcmV0dXJuIHQ7bGV0IG49dC5zcGxpdCgiICIpLmZpbHRlcihCb29sZWFuKSxpPVtdLGE9IiI7cmV0dXJuIG4uZm9yRWFjaCgocyxsKT0+e2xldCB1PXJhKGAke3N9IGAsciksaD1yYShhLHIpO2lmKHU+ZSl7bGV0e2h5cGhlbmF0ZWRTdHJpbmdzOnAscmVtYWluaW5nV29yZDptfT1BQ2UocyxlLCItIixyKTtpLnB1c2goYSwuLi5wKSxhPW19ZWxzZSBoK3U+PWU/KGkucHVzaChhKSxhPXMpOmE9W2Esc10uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiAiKTtsKzE9PT1uLmxlbmd0aCYmaS5wdXNoKGEpfSksaS5maWx0ZXIocz0+cyE9PSIiKS5qb2luKHIuam9pbldpdGgpfSwodCxlLHIpPT5gJHt0fSR7ZX0ke3IuZm9udFNpemV9JHtyLmZvbnRXZWlnaHR9JHtyLmZvbnRGYW1pbHl9JHtyLmpvaW5XaXRofWApLEFDZT1IMCgodCxlLHI9Ii0iLG4pPT57bj1PYmplY3QuYXNzaWduKHtmb250U2l6ZToxMixmb250V2VpZ2h0OjQwMCxmb250RmFtaWx5OiJBcmlhbCIsbWFyZ2luOjB9LG4pO2xldCBpPVsuLi50XSxhPVtdLHM9IiI7cmV0dXJuIGkuZm9yRWFjaCgobCx1KT0+e2xldCBoPWAke3N9JHtsfWA7aWYocmEoaCxuKT49ZSl7bGV0IGQ9dSsxLHA9aS5sZW5ndGg9PT1kLG09YCR7aH0ke3J9YDthLnB1c2gocD9oOm0pLHM9IiJ9ZWxzZSBzPWh9KSx7aHlwaGVuYXRlZFN0cmluZ3M6YSxyZW1haW5pbmdXb3JkOnN9fSwodCxlLHI9Ii0iLG4pPT5gJHt0fSR7ZX0ke3J9JHtuLmZvbnRTaXplfSR7bi5mb250V2VpZ2h0fSR7bi5mb250RmFtaWx5fWApO28oZHcsImNhbGN1bGF0ZVRleHRIZWlnaHQiKTtvKHJhLCJjYWxjdWxhdGVUZXh0V2lkdGgiKTtROT1IMCgodCxlKT0+e2xldHtmb250U2l6ZTpyPTEyLGZvbnRGYW1pbHk6bj0iQXJpYWwiLGZvbnRXZWlnaHQ6aT00MDB9PWU7aWYoIXQpcmV0dXJue3dpZHRoOjAsaGVpZ2h0OjB9O2xldFssYV09Qm8ocikscz1bInNhbnMtc2VyaWYiLG5dLGw9dC5zcGxpdChaZS5saW5lQnJlYWtSZWdleCksdT1bXSxoPUdlKCJib2R5Iik7aWYoIWgucmVtb3ZlKXJldHVybnt3aWR0aDowLGhlaWdodDowLGxpbmVIZWlnaHQ6MH07bGV0IGY9aC5hcHBlbmQoInN2ZyIpO2ZvcihsZXQgcCBvZiBzKXtsZXQgbT0wLGc9e3dpZHRoOjAsaGVpZ2h0OjAsbGluZUhlaWdodDowfTtmb3IobGV0IHkgb2YgbCl7bGV0IHY9U0NlKCk7di50ZXh0PXl8fEg5O2xldCB4PUNDZShmLHYpLnN0eWxlKCJmb250LXNpemUiLGEpLnN0eWxlKCJmb250LXdlaWdodCIsaSkuc3R5bGUoImZvbnQtZmFtaWx5IixwKSxiPSh4Ll9ncm91cHN8fHgpWzBdWzBdLmdldEJCb3goKTtpZihiLndpZHRoPT09MCYmYi5oZWlnaHQ9PT0wKXRocm93IG5ldyBFcnJvcigic3ZnIGVsZW1lbnQgbm90IGluIHJlbmRlciB0cmVlIik7Zy53aWR0aD1NYXRoLnJvdW5kKE1hdGgubWF4KGcud2lkdGgsYi53aWR0aCkpLG09TWF0aC5yb3VuZChiLmhlaWdodCksZy5oZWlnaHQrPW0sZy5saW5lSGVpZ2h0PU1hdGgucm91bmQoTWF0aC5tYXgoZy5saW5lSGVpZ2h0LG0pKX11LnB1c2goZyl9Zi5yZW1vdmUoKTtsZXQgZD1pc05hTih1WzFdLmhlaWdodCl8fGlzTmFOKHVbMV0ud2lkdGgpfHxpc05hTih1WzFdLmxpbmVIZWlnaHQpfHx1WzBdLmhlaWdodD51WzFdLmhlaWdodCYmdVswXS53aWR0aD51WzFdLndpZHRoJiZ1WzBdLmxpbmVIZWlnaHQ+dVsxXS5saW5lSGVpZ2h0PzA6MTtyZXR1cm4gdVtkXX0sKHQsZSk9PmAke3R9JHtlLmZvbnRTaXplfSR7ZS5mb250V2VpZ2h0fSR7ZS5mb250RmFtaWx5fWApLFU5PWNsYXNze2NvbnN0cnVjdG9yKGU9ITEscil7dGhpcy5jb3VudD0wO3RoaXMuY291bnQ9cj9yLmxlbmd0aDowLHRoaXMubmV4dD1lPygpPT50aGlzLmNvdW50Kys6KCk9PkRhdGUubm93KCl9c3RhdGlje28odGhpcywiSW5pdElER2VuZXJhdG9yIil9fSxfQ2U9byhmdW5jdGlvbih0KXtyZXR1cm4gZnc9Znd8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHQ9ZXNjYXBlKHQpLnJlcGxhY2UoLyUyNi9nLCImIikucmVwbGFjZSgvJTIzL2csIiMiKS5yZXBsYWNlKC8lM0IvZywiOyIpLGZ3LmlubmVySFRNTD10LHVuZXNjYXBlKGZ3LnRleHRDb250ZW50KX0sImVudGl0eURlY29kZSIpO28oWjksImlzRGV0YWlsZWRFcnJvciIpO0RDZT1vKCh0LGUscixuKT0+e2lmKCFuKXJldHVybjtsZXQgaT10Lm5vZGUoKT8uZ2V0QkJveCgpO2kmJnQuYXBwZW5kKCJ0ZXh0IikudGV4dChuKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoIngiLGkueCtpLndpZHRoLzIpLmF0dHIoInkiLC1yKS5hdHRyKCJjbGFzcyIsZSl9LCJpbnNlcnRUaXRsZSIpLEJvPW8odD0+e2lmKHR5cGVvZiB0PT0ibnVtYmVyIilyZXR1cm5bdCx0KyJweCJdO2xldCBlPXBhcnNlSW50KHQ/PyIiLDEwKTtyZXR1cm4gTnVtYmVyLmlzTmFOKGUpP1t2b2lkIDAsdm9pZCAwXTp0PT09U3RyaW5nKGUpP1tlLHQrInB4Il06W2UsdF19LCJwYXJzZUZvbnRTaXplIik7byhGaSwiY2xlYW5BbmRNZXJnZSIpO0d0PXthc3NpZ25XaXRoRGVwdGg6R24sd3JhcExhYmVsOks5LGNhbGN1bGF0ZVRleHRIZWlnaHQ6ZHcsY2FsY3VsYXRlVGV4dFdpZHRoOnJhLGNhbGN1bGF0ZVRleHREaW1lbnNpb25zOlE5LGNsZWFuQW5kTWVyZ2U6RmksZGV0ZWN0SW5pdDpnQ2UsZGV0ZWN0RGlyZWN0aXZlOk1YLGlzU3Vic3RyaW5nSW5BcnJheTp5Q2UsaW50ZXJwb2xhdGVUb0N1cnZlOlc5LGNhbGNMYWJlbFBvc2l0aW9uOndDZSxjYWxjQ2FyZGluYWxpdHlQb3NpdGlvbjpUQ2UsY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbjprQ2UsZm9ybWF0VXJsOnZDZSxnZXRTdHlsZXNGcm9tQXJyYXk6WTksZ2VuZXJhdGVJZDpYOSxyYW5kb206ajkscnVuRnVuYzp4Q2UsZW50aXR5RGVjb2RlOl9DZSxpbnNlcnRUaXRsZTpEQ2UscGFyc2VGb250U2l6ZTpCbyxJbml0SURHZW5lcmF0b3I6VTl9LFBYPW8oZnVuY3Rpb24odCl7bGV0IGU9dDtyZXR1cm4gZT1lLnJlcGxhY2UoL3N0eWxlLio6XFMqIy4qOy9nLGZ1bmN0aW9uKHIpe3JldHVybiByLnN1YnN0cmluZygwLHIubGVuZ3RoLTEpfSksZT1lLnJlcGxhY2UoL2NsYXNzRGVmLio6XFMqIy4qOy9nLGZ1bmN0aW9uKHIpe3JldHVybiByLnN1YnN0cmluZygwLHIubGVuZ3RoLTEpfSksZT1lLnJlcGxhY2UoLyNcdys7L2csZnVuY3Rpb24ocil7bGV0IG49ci5zdWJzdHJpbmcoMSxyLmxlbmd0aC0xKTtyZXR1cm4vXlwrP1xkKyQvLnRlc3Qobik/Ilx1RkIwMlx4QjBceEIwIituKyJceEI2XHhERiI6Ilx1RkIwMlx4QjAiK24rIlx4QjZceERGIn0pLGV9LCJlbmNvZGVFbnRpdGllcyIpLG5hPW8oZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgv76yCwrDCsC9nLCImIyIpLnJlcGxhY2UoL++sgsKwL2csIiYiKS5yZXBsYWNlKC/CtsOfL2csIjsiKX0sImRlY29kZUVudGl0aWVzIiksJGg9bygodCxlLHtjb3VudGVyOnI9MCxwcmVmaXg6bixzdWZmaXg6aX0sYSk9PmF8fGAke24/YCR7bn1fYDoiIn0ke3R9XyR7ZX1fJHtyfSR7aT9gXyR7aX1gOiIifWAsImdldEVkZ2VJZCIpO28oJG4sImhhbmRsZVVuZGVmaW5lZEF0dHIiKX0pO2Z1bmN0aW9uIENsKHQsZSxyLG4saSl7aWYoIWVbdF0ud2lkdGgpaWYocillW3RdLnRleHQ9SzkoZVt0XS50ZXh0LGksbiksZVt0XS50ZXh0TGluZXM9ZVt0XS50ZXh0LnNwbGl0KFplLmxpbmVCcmVha1JlZ2V4KS5sZW5ndGgsZVt0XS53aWR0aD1pLGVbdF0uaGVpZ2h0PWR3KGVbdF0udGV4dCxuKTtlbHNle2xldCBhPWVbdF0udGV4dC5zcGxpdChaZS5saW5lQnJlYWtSZWdleCk7ZVt0XS50ZXh0TGluZXM9YS5sZW5ndGg7bGV0IHM9MDtlW3RdLmhlaWdodD0wLGVbdF0ud2lkdGg9MDtmb3IobGV0IGwgb2YgYSllW3RdLndpZHRoPU1hdGgubWF4KHJhKGwsbiksZVt0XS53aWR0aCkscz1kdyhsLG4pLGVbdF0uaGVpZ2h0PWVbdF0uaGVpZ2h0K3N9fWZ1bmN0aW9uIEdYKHQsZSxyLG4saSl7bGV0IGE9bmV3IHl3KGkpO2EuZGF0YS53aWR0aExpbWl0PXIuZGF0YS53aWR0aExpbWl0L01hdGgubWluKEo5LG4ubGVuZ3RoKTtmb3IobGV0W3MsbF1vZiBuLmVudHJpZXMoKSl7bGV0IHU9MDtsLmltYWdlPXt3aWR0aDowLGhlaWdodDowLFk6MH0sbC5zcHJpdGUmJihsLmltYWdlLndpZHRoPTQ4LGwuaW1hZ2UuaGVpZ2h0PTQ4LGwuaW1hZ2UuWT11LHU9bC5pbWFnZS5ZK2wuaW1hZ2UuaGVpZ2h0KTtsZXQgaD1sLndyYXAmJlZ0LndyYXAsZj1wdyhWdCk7aWYoZi5mb250U2l6ZT1mLmZvbnRTaXplKzIsZi5mb250V2VpZ2h0PSJib2xkIixDbCgibGFiZWwiLGwsaCxmLGEuZGF0YS53aWR0aExpbWl0KSxsLmxhYmVsLlk9dSs4LHU9bC5sYWJlbC5ZK2wubGFiZWwuaGVpZ2h0LGwudHlwZSYmbC50eXBlLnRleHQhPT0iIil7bC50eXBlLnRleHQ9IlsiK2wudHlwZS50ZXh0KyJdIjtsZXQgZz1wdyhWdCk7Q2woInR5cGUiLGwsaCxnLGEuZGF0YS53aWR0aExpbWl0KSxsLnR5cGUuWT11KzUsdT1sLnR5cGUuWStsLnR5cGUuaGVpZ2h0fWlmKGwuZGVzY3ImJmwuZGVzY3IudGV4dCE9PSIiKXtsZXQgZz1wdyhWdCk7Zy5mb250U2l6ZT1nLmZvbnRTaXplLTIsQ2woImRlc2NyIixsLGgsZyxhLmRhdGEud2lkdGhMaW1pdCksbC5kZXNjci5ZPXUrMjAsdT1sLmRlc2NyLlkrbC5kZXNjci5oZWlnaHR9aWYocz09MHx8cyVKOT09PTApe2xldCBnPXIuZGF0YS5zdGFydHgrVnQuZGlhZ3JhbU1hcmdpblgseT1yLmRhdGEuc3RvcHkrVnQuZGlhZ3JhbU1hcmdpblkrdTthLnNldERhdGEoZyxnLHkseSl9ZWxzZXtsZXQgZz1hLmRhdGEuc3RvcHghPT1hLmRhdGEuc3RhcnR4P2EuZGF0YS5zdG9weCtWdC5kaWFncmFtTWFyZ2luWDphLmRhdGEuc3RhcnR4LHk9YS5kYXRhLnN0YXJ0eTthLnNldERhdGEoZyxnLHkseSl9YS5uYW1lPWwuYWxpYXM7bGV0IGQ9aS5kYi5nZXRDNFNoYXBlQXJyYXkobC5hbGlhcykscD1pLmRiLmdldEM0U2hhcGVLZXlzKGwuYWxpYXMpO3AubGVuZ3RoPjAmJnpYKGEsdCxkLHApLGU9bC5hbGlhcztsZXQgbT1pLmRiLmdldEJvdW5kYXJ5cyhlKTttLmxlbmd0aD4wJiZHWCh0LGUsYSxtLGkpLGwuYWxpYXMhPT0iZ2xvYmFsIiYmJFgodCxsLGEpLHIuZGF0YS5zdG9weT1NYXRoLm1heChhLmRhdGEuc3RvcHkrVnQuYzRTaGFwZU1hcmdpbixyLmRhdGEuc3RvcHkpLHIuZGF0YS5zdG9weD1NYXRoLm1heChhLmRhdGEuc3RvcHgrVnQuYzRTaGFwZU1hcmdpbixyLmRhdGEuc3RvcHgpLG13PU1hdGgubWF4KG13LHIuZGF0YS5zdG9weCksZ3c9TWF0aC5tYXgoZ3csci5kYXRhLnN0b3B5KX19dmFyIG13LGd3LEZYLEo5LFZ0LHl3LGVELGEyLHB3LExDZSwkWCx6WCxfcyxCWCxSQ2UsTkNlLE1DZSx0RCxWWD1OKCgpPT57InVzZSBzdHJpY3QiO2RyKCk7QnEoKTt2dCgpOyRDKCk7Z3IoKTt1QSgpO3p0KCk7czAoKTtpcigpO0VpKCk7bXc9MCxndz0wLEZYPTQsSjk9MjtUeS55eT1ReTtWdD17fSx5dz1jbGFzc3tzdGF0aWN7byh0aGlzLCJCb3VuZHMiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLm5hbWU9IiIsdGhpcy5kYXRhPXt9LHRoaXMuZGF0YS5zdGFydHg9dm9pZCAwLHRoaXMuZGF0YS5zdG9weD12b2lkIDAsdGhpcy5kYXRhLnN0YXJ0eT12b2lkIDAsdGhpcy5kYXRhLnN0b3B5PXZvaWQgMCx0aGlzLmRhdGEud2lkdGhMaW1pdD12b2lkIDAsdGhpcy5uZXh0RGF0YT17fSx0aGlzLm5leHREYXRhLnN0YXJ0eD12b2lkIDAsdGhpcy5uZXh0RGF0YS5zdG9weD12b2lkIDAsdGhpcy5uZXh0RGF0YS5zdGFydHk9dm9pZCAwLHRoaXMubmV4dERhdGEuc3RvcHk9dm9pZCAwLHRoaXMubmV4dERhdGEuY250PTAsZUQoZS5kYi5nZXRDb25maWcoKSl9c2V0RGF0YShlLHIsbixpKXt0aGlzLm5leHREYXRhLnN0YXJ0eD10aGlzLmRhdGEuc3RhcnR4PWUsdGhpcy5uZXh0RGF0YS5zdG9weD10aGlzLmRhdGEuc3RvcHg9cix0aGlzLm5leHREYXRhLnN0YXJ0eT10aGlzLmRhdGEuc3RhcnR5PW4sdGhpcy5uZXh0RGF0YS5zdG9weT10aGlzLmRhdGEuc3RvcHk9aX11cGRhdGVWYWwoZSxyLG4saSl7ZVtyXT09PXZvaWQgMD9lW3JdPW46ZVtyXT1pKG4sZVtyXSl9aW5zZXJ0KGUpe3RoaXMubmV4dERhdGEuY250PXRoaXMubmV4dERhdGEuY250KzE7bGV0IHI9dGhpcy5uZXh0RGF0YS5zdGFydHg9PT10aGlzLm5leHREYXRhLnN0b3B4P3RoaXMubmV4dERhdGEuc3RvcHgrZS5tYXJnaW46dGhpcy5uZXh0RGF0YS5zdG9weCtlLm1hcmdpbioyLG49citlLndpZHRoLGk9dGhpcy5uZXh0RGF0YS5zdGFydHkrZS5tYXJnaW4qMixhPWkrZS5oZWlnaHQ7KHI+PXRoaXMuZGF0YS53aWR0aExpbWl0fHxuPj10aGlzLmRhdGEud2lkdGhMaW1pdHx8dGhpcy5uZXh0RGF0YS5jbnQ+RlgpJiYocj10aGlzLm5leHREYXRhLnN0YXJ0eCtlLm1hcmdpbitWdC5uZXh0TGluZVBhZGRpbmdYLGk9dGhpcy5uZXh0RGF0YS5zdG9weStlLm1hcmdpbioyLHRoaXMubmV4dERhdGEuc3RvcHg9bj1yK2Uud2lkdGgsdGhpcy5uZXh0RGF0YS5zdGFydHk9dGhpcy5uZXh0RGF0YS5zdG9weSx0aGlzLm5leHREYXRhLnN0b3B5PWE9aStlLmhlaWdodCx0aGlzLm5leHREYXRhLmNudD0xKSxlLng9cixlLnk9aSx0aGlzLnVwZGF0ZVZhbCh0aGlzLmRhdGEsInN0YXJ0eCIscixNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwodGhpcy5kYXRhLCJzdGFydHkiLGksTWF0aC5taW4pLHRoaXMudXBkYXRlVmFsKHRoaXMuZGF0YSwic3RvcHgiLG4sTWF0aC5tYXgpLHRoaXMudXBkYXRlVmFsKHRoaXMuZGF0YSwic3RvcHkiLGEsTWF0aC5tYXgpLHRoaXMudXBkYXRlVmFsKHRoaXMubmV4dERhdGEsInN0YXJ0eCIscixNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwodGhpcy5uZXh0RGF0YSwic3RhcnR5IixpLE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbCh0aGlzLm5leHREYXRhLCJzdG9weCIsbixNYXRoLm1heCksdGhpcy51cGRhdGVWYWwodGhpcy5uZXh0RGF0YSwic3RvcHkiLGEsTWF0aC5tYXgpfWluaXQoZSl7dGhpcy5uYW1lPSIiLHRoaXMuZGF0YT17c3RhcnR4OnZvaWQgMCxzdG9weDp2b2lkIDAsc3RhcnR5OnZvaWQgMCxzdG9weTp2b2lkIDAsd2lkdGhMaW1pdDp2b2lkIDB9LHRoaXMubmV4dERhdGE9e3N0YXJ0eDp2b2lkIDAsc3RvcHg6dm9pZCAwLHN0YXJ0eTp2b2lkIDAsc3RvcHk6dm9pZCAwLGNudDowfSxlRChlLmRiLmdldENvbmZpZygpKX1idW1wTGFzdE1hcmdpbihlKXt0aGlzLmRhdGEuc3RvcHgrPWUsdGhpcy5kYXRhLnN0b3B5Kz1lfX0sZUQ9byhmdW5jdGlvbih0KXtHbihWdCx0KSx0LmZvbnRGYW1pbHkmJihWdC5wZXJzb25Gb250RmFtaWx5PVZ0LnN5c3RlbUZvbnRGYW1pbHk9VnQubWVzc2FnZUZvbnRGYW1pbHk9dC5mb250RmFtaWx5KSx0LmZvbnRTaXplJiYoVnQucGVyc29uRm9udFNpemU9VnQuc3lzdGVtRm9udFNpemU9VnQubWVzc2FnZUZvbnRTaXplPXQuZm9udFNpemUpLHQuZm9udFdlaWdodCYmKFZ0LnBlcnNvbkZvbnRXZWlnaHQ9VnQuc3lzdGVtRm9udFdlaWdodD1WdC5tZXNzYWdlRm9udFdlaWdodD10LmZvbnRXZWlnaHQpfSwic2V0Q29uZiIpLGEyPW8oKHQsZSk9Pih7Zm9udEZhbWlseTp0W2UrIkZvbnRGYW1pbHkiXSxmb250U2l6ZTp0W2UrIkZvbnRTaXplIl0sZm9udFdlaWdodDp0W2UrIkZvbnRXZWlnaHQiXX0pLCJjNFNoYXBlRm9udCIpLHB3PW8odD0+KHtmb250RmFtaWx5OnQuYm91bmRhcnlGb250RmFtaWx5LGZvbnRTaXplOnQuYm91bmRhcnlGb250U2l6ZSxmb250V2VpZ2h0OnQuYm91bmRhcnlGb250V2VpZ2h0fSksImJvdW5kYXJ5Rm9udCIpLExDZT1vKHQ9Pih7Zm9udEZhbWlseTp0Lm1lc3NhZ2VGb250RmFtaWx5LGZvbnRTaXplOnQubWVzc2FnZUZvbnRTaXplLGZvbnRXZWlnaHQ6dC5tZXNzYWdlRm9udFdlaWdodH0pLCJtZXNzYWdlRm9udCIpO28oQ2wsImNhbGNDNFNoYXBlVGV4dFdIIik7JFg9byhmdW5jdGlvbih0LGUscil7ZS54PXIuZGF0YS5zdGFydHgsZS55PXIuZGF0YS5zdGFydHksZS53aWR0aD1yLmRhdGEuc3RvcHgtci5kYXRhLnN0YXJ0eCxlLmhlaWdodD1yLmRhdGEuc3RvcHktci5kYXRhLnN0YXJ0eSxlLmxhYmVsLnk9VnQuYzRTaGFwZU1hcmdpbi0zNTtsZXQgbj1lLndyYXAmJlZ0LndyYXAsaT1wdyhWdCk7aS5mb250U2l6ZT1pLmZvbnRTaXplKzIsaS5mb250V2VpZ2h0PSJib2xkIjtsZXQgYT1yYShlLmxhYmVsLnRleHQsaSk7Q2woImxhYmVsIixlLG4saSxhKSxrbC5kcmF3Qm91bmRhcnkodCxlLFZ0KX0sImRyYXdCb3VuZGFyeSIpLHpYPW8oZnVuY3Rpb24odCxlLHIsbil7bGV0IGk9MDtmb3IobGV0IGEgb2Ygbil7aT0wO2xldCBzPXJbYV0sbD1hMihWdCxzLnR5cGVDNFNoYXBlLnRleHQpO3N3aXRjaChsLmZvbnRTaXplPWwuZm9udFNpemUtMixzLnR5cGVDNFNoYXBlLndpZHRoPXJhKCJceEFCIitzLnR5cGVDNFNoYXBlLnRleHQrIlx4QkIiLGwpLHMudHlwZUM0U2hhcGUuaGVpZ2h0PWwuZm9udFNpemUrMixzLnR5cGVDNFNoYXBlLlk9VnQuYzRTaGFwZVBhZGRpbmcsaT1zLnR5cGVDNFNoYXBlLlkrcy50eXBlQzRTaGFwZS5oZWlnaHQtNCxzLmltYWdlPXt3aWR0aDowLGhlaWdodDowLFk6MH0scy50eXBlQzRTaGFwZS50ZXh0KXtjYXNlInBlcnNvbiI6Y2FzZSJleHRlcm5hbF9wZXJzb24iOnMuaW1hZ2Uud2lkdGg9NDgscy5pbWFnZS5oZWlnaHQ9NDgscy5pbWFnZS5ZPWksaT1zLmltYWdlLlkrcy5pbWFnZS5oZWlnaHQ7YnJlYWt9cy5zcHJpdGUmJihzLmltYWdlLndpZHRoPTQ4LHMuaW1hZ2UuaGVpZ2h0PTQ4LHMuaW1hZ2UuWT1pLGk9cy5pbWFnZS5ZK3MuaW1hZ2UuaGVpZ2h0KTtsZXQgdT1zLndyYXAmJlZ0LndyYXAsaD1WdC53aWR0aC1WdC5jNFNoYXBlUGFkZGluZyoyLGY9YTIoVnQscy50eXBlQzRTaGFwZS50ZXh0KTtpZihmLmZvbnRTaXplPWYuZm9udFNpemUrMixmLmZvbnRXZWlnaHQ9ImJvbGQiLENsKCJsYWJlbCIscyx1LGYsaCkscy5sYWJlbC5ZPWkrOCxpPXMubGFiZWwuWStzLmxhYmVsLmhlaWdodCxzLnR5cGUmJnMudHlwZS50ZXh0IT09IiIpe3MudHlwZS50ZXh0PSJbIitzLnR5cGUudGV4dCsiXSI7bGV0IG09YTIoVnQscy50eXBlQzRTaGFwZS50ZXh0KTtDbCgidHlwZSIscyx1LG0saCkscy50eXBlLlk9aSs1LGk9cy50eXBlLlkrcy50eXBlLmhlaWdodH1lbHNlIGlmKHMudGVjaG4mJnMudGVjaG4udGV4dCE9PSIiKXtzLnRlY2huLnRleHQ9IlsiK3MudGVjaG4udGV4dCsiXSI7bGV0IG09YTIoVnQscy50ZWNobi50ZXh0KTtDbCgidGVjaG4iLHMsdSxtLGgpLHMudGVjaG4uWT1pKzUsaT1zLnRlY2huLlkrcy50ZWNobi5oZWlnaHR9bGV0IGQ9aSxwPXMubGFiZWwud2lkdGg7aWYocy5kZXNjciYmcy5kZXNjci50ZXh0IT09IiIpe2xldCBtPWEyKFZ0LHMudHlwZUM0U2hhcGUudGV4dCk7Q2woImRlc2NyIixzLHUsbSxoKSxzLmRlc2NyLlk9aSsyMCxpPXMuZGVzY3IuWStzLmRlc2NyLmhlaWdodCxwPU1hdGgubWF4KHMubGFiZWwud2lkdGgscy5kZXNjci53aWR0aCksZD1pLXMuZGVzY3IudGV4dExpbmVzKjV9cD1wK1Z0LmM0U2hhcGVQYWRkaW5nLHMud2lkdGg9TWF0aC5tYXgocy53aWR0aHx8VnQud2lkdGgscCxWdC53aWR0aCkscy5oZWlnaHQ9TWF0aC5tYXgocy5oZWlnaHR8fFZ0LmhlaWdodCxkLFZ0LmhlaWdodCkscy5tYXJnaW49cy5tYXJnaW58fFZ0LmM0U2hhcGVNYXJnaW4sdC5pbnNlcnQocyksa2wuZHJhd0M0U2hhcGUoZSxzLFZ0KX10LmJ1bXBMYXN0TWFyZ2luKFZ0LmM0U2hhcGVNYXJnaW4pfSwiZHJhd0M0U2hhcGVBcnJheSIpLF9zPWNsYXNze3N0YXRpY3tvKHRoaXMsIlBvaW50Iil9Y29uc3RydWN0b3IoZSxyKXt0aGlzLng9ZSx0aGlzLnk9cn19LEJYPW8oZnVuY3Rpb24odCxlKXtsZXQgcj10Lngsbj10LnksaT1lLngsYT1lLnkscz1yK3Qud2lkdGgvMixsPW4rdC5oZWlnaHQvMix1PU1hdGguYWJzKHItaSksaD1NYXRoLmFicyhuLWEpLGY9aC91LGQ9dC5oZWlnaHQvdC53aWR0aCxwPW51bGw7cmV0dXJuIG49PWEmJnI8aT9wPW5ldyBfcyhyK3Qud2lkdGgsbCk6bj09YSYmcj5pP3A9bmV3IF9zKHIsbCk6cj09aSYmbjxhP3A9bmV3IF9zKHMsbit0LmhlaWdodCk6cj09aSYmbj5hJiYocD1uZXcgX3MocyxuKSkscj5pJiZuPGE/ZD49Zj9wPW5ldyBfcyhyLGwrZip0LndpZHRoLzIpOnA9bmV3IF9zKHMtdS9oKnQuaGVpZ2h0LzIsbit0LmhlaWdodCk6cjxpJiZuPGE/ZD49Zj9wPW5ldyBfcyhyK3Qud2lkdGgsbCtmKnQud2lkdGgvMik6cD1uZXcgX3Mocyt1L2gqdC5oZWlnaHQvMixuK3QuaGVpZ2h0KTpyPGkmJm4+YT9kPj1mP3A9bmV3IF9zKHIrdC53aWR0aCxsLWYqdC53aWR0aC8yKTpwPW5ldyBfcyhzK3QuaGVpZ2h0LzIqdS9oLG4pOnI+aSYmbj5hJiYoZD49Zj9wPW5ldyBfcyhyLGwtdC53aWR0aC8yKmYpOnA9bmV3IF9zKHMtdC5oZWlnaHQvMip1L2gsbikpLHB9LCJnZXRJbnRlcnNlY3RQb2ludCIpLFJDZT1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9e3g6MCx5OjB9O3IueD1lLngrZS53aWR0aC8yLHIueT1lLnkrZS5oZWlnaHQvMjtsZXQgbj1CWCh0LHIpO3IueD10LngrdC53aWR0aC8yLHIueT10LnkrdC5oZWlnaHQvMjtsZXQgaT1CWChlLHIpO3JldHVybntzdGFydFBvaW50Om4sZW5kUG9pbnQ6aX19LCJnZXRJbnRlcnNlY3RQb2ludHMiKSxOQ2U9byhmdW5jdGlvbih0LGUscixuKXtsZXQgaT0wO2ZvcihsZXQgYSBvZiBlKXtpPWkrMTtsZXQgcz1hLndyYXAmJlZ0LndyYXAsbD1MQ2UoVnQpO24uZGIuZ2V0QzRUeXBlKCk9PT0iQzREeW5hbWljIiYmKGEubGFiZWwudGV4dD1pKyI6ICIrYS5sYWJlbC50ZXh0KTtsZXQgaD1yYShhLmxhYmVsLnRleHQsbCk7Q2woImxhYmVsIixhLHMsbCxoKSxhLnRlY2huJiZhLnRlY2huLnRleHQhPT0iIiYmKGg9cmEoYS50ZWNobi50ZXh0LGwpLENsKCJ0ZWNobiIsYSxzLGwsaCkpLGEuZGVzY3ImJmEuZGVzY3IudGV4dCE9PSIiJiYoaD1yYShhLmRlc2NyLnRleHQsbCksQ2woImRlc2NyIixhLHMsbCxoKSk7bGV0IGY9cihhLmZyb20pLGQ9cihhLnRvKSxwPVJDZShmLGQpO2Euc3RhcnRQb2ludD1wLnN0YXJ0UG9pbnQsYS5lbmRQb2ludD1wLmVuZFBvaW50fWtsLmRyYXdSZWxzKHQsZSxWdCl9LCJkcmF3UmVscyIpO28oR1gsImRyYXdJbnNpZGVCb3VuZGFyeSIpO01DZT1vKGZ1bmN0aW9uKHQsZSxyLG4pe1Z0PW1lKCkuYzQ7bGV0IGk9bWUoKS5zZWN1cml0eUxldmVsLGE7aT09PSJzYW5kYm94IiYmKGE9R2UoIiNpIitlKSk7bGV0IHM9aT09PSJzYW5kYm94Ij9HZShhLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpOkdlKCJib2R5IiksbD1uLmRiO24uZGIuc2V0V3JhcChWdC53cmFwKSxGWD1sLmdldEM0U2hhcGVJblJvdygpLEo5PWwuZ2V0QzRCb3VuZGFyeUluUm93KCksWS5kZWJ1ZyhgQzoke0pTT04uc3RyaW5naWZ5KFZ0LG51bGwsMil9YCk7bGV0IHU9aT09PSJzYW5kYm94Ij9zLnNlbGVjdChgW2lkPSIke2V9Il1gKTpHZShgW2lkPSIke2V9Il1gKTtrbC5pbnNlcnRDb21wdXRlckljb24odSksa2wuaW5zZXJ0RGF0YWJhc2VJY29uKHUpLGtsLmluc2VydENsb2NrSWNvbih1KTtsZXQgaD1uZXcgeXcobik7aC5zZXREYXRhKFZ0LmRpYWdyYW1NYXJnaW5YLFZ0LmRpYWdyYW1NYXJnaW5YLFZ0LmRpYWdyYW1NYXJnaW5ZLFZ0LmRpYWdyYW1NYXJnaW5ZKSxoLmRhdGEud2lkdGhMaW1pdD1zY3JlZW4uYXZhaWxXaWR0aCxtdz1WdC5kaWFncmFtTWFyZ2luWCxndz1WdC5kaWFncmFtTWFyZ2luWTtsZXQgZj1uLmRiLmdldFRpdGxlKCksZD1uLmRiLmdldEJvdW5kYXJ5cygiIik7R1godSwiIixoLGQsbiksa2wuaW5zZXJ0QXJyb3dIZWFkKHUpLGtsLmluc2VydEFycm93RW5kKHUpLGtsLmluc2VydEFycm93Q3Jvc3NIZWFkKHUpLGtsLmluc2VydEFycm93RmlsbGVkSGVhZCh1KSxOQ2UodSxuLmRiLmdldFJlbHMoKSxuLmRiLmdldEM0U2hhcGUsbiksaC5kYXRhLnN0b3B4PW13LGguZGF0YS5zdG9weT1ndztsZXQgcD1oLmRhdGEsZz1wLnN0b3B5LXAuc3RhcnR5KzIqVnQuZGlhZ3JhbU1hcmdpblksdj1wLnN0b3B4LXAuc3RhcnR4KzIqVnQuZGlhZ3JhbU1hcmdpblg7ZiYmdS5hcHBlbmQoInRleHQiKS50ZXh0KGYpLmF0dHIoIngiLChwLnN0b3B4LXAuc3RhcnR4KS8yLTQqVnQuZGlhZ3JhbU1hcmdpblgpLmF0dHIoInkiLHAuc3RhcnR5K1Z0LmRpYWdyYW1NYXJnaW5ZKSx2bih1LGcsdixWdC51c2VNYXhXaWR0aCk7bGV0IHg9Zj82MDowO3UuYXR0cigidmlld0JveCIscC5zdGFydHgtVnQuZGlhZ3JhbU1hcmdpblgrIiAtIisoVnQuZGlhZ3JhbU1hcmdpblkreCkrIiAiK3YrIiAiKyhnK3gpKSxZLmRlYnVnKCJtb2RlbHM6IixwKX0sImRyYXciKSx0RD17ZHJhd1BlcnNvbk9yU3lzdGVtQXJyYXk6elgsZHJhd0JvdW5kYXJ5OiRYLHNldENvbmY6ZUQsZHJhdzpNQ2V9fSk7dmFyIElDZSxVWCxIWD1OKCgpPT57InVzZSBzdHJpY3QiO0lDZT1vKHQ9PmAucGVyc29uIHsKICAgIHN0cm9rZTogJHt0LnBlcnNvbkJvcmRlcn07CiAgICBmaWxsOiAke3QucGVyc29uQmtnfTsKICB9CmAsImdldFN0eWxlcyIpLFVYPUlDZX0pO3ZhciBXWD17fTtocihXWCx7ZGlhZ3JhbTooKT0+T0NlfSk7dmFyIE9DZSxxWD1OKCgpPT57InVzZSBzdHJpY3QiOyRDKCk7dUEoKTtWWCgpO0hYKCk7T0NlPXtwYXJzZXI6SkYsZGI6UXkscmVuZGVyZXI6dEQsc3R5bGVzOlVYLGluaXQ6bygoe2M0OnQsd3JhcDplfSk9Pnt0RC5zZXRDb25mKHQpLFF5LnNldFdyYXAoZSl9LCJpbml0Iil9fSk7ZnVuY3Rpb24gdWoodCl7cmV0dXJuIHR5cGVvZiB0PiJ1Inx8dD09PW51bGx9ZnVuY3Rpb24gJENlKHQpe3JldHVybiB0eXBlb2YgdD09Im9iamVjdCImJnQhPT1udWxsfWZ1bmN0aW9uIHpDZSh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90OnVqKHQpP1tdOlt0XX1mdW5jdGlvbiBHQ2UodCxlKXt2YXIgcixuLGksYTtpZihlKWZvcihhPU9iamVjdC5rZXlzKGUpLHI9MCxuPWEubGVuZ3RoO3I8bjtyKz0xKWk9YVtyXSx0W2ldPWVbaV07cmV0dXJuIHR9ZnVuY3Rpb24gVkNlKHQsZSl7dmFyIHI9IiIsbjtmb3Iobj0wO248ZTtuKz0xKXIrPXQ7cmV0dXJuIHJ9ZnVuY3Rpb24gVUNlKHQpe3JldHVybiB0PT09MCYmTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZPT09MS90fWZ1bmN0aW9uIGhqKHQsZSl7dmFyIHI9IiIsbj10LnJlYXNvbnx8Iih1bmtub3duIHJlYXNvbikiO3JldHVybiB0Lm1hcms/KHQubWFyay5uYW1lJiYocis9J2luICInK3QubWFyay5uYW1lKyciICcpLHIrPSIoIisodC5tYXJrLmxpbmUrMSkrIjoiKyh0Lm1hcmsuY29sdW1uKzEpKyIpIiwhZSYmdC5tYXJrLnNuaXBwZXQmJihyKz1gCgpgK3QubWFyay5zbmlwcGV0KSxuKyIgIityKTpufWZ1bmN0aW9uIG8yKHQsZSl7RXJyb3IuY2FsbCh0aGlzKSx0aGlzLm5hbWU9IllBTUxFeGNlcHRpb24iLHRoaXMucmVhc29uPXQsdGhpcy5tYXJrPWUsdGhpcy5tZXNzYWdlPWhqKHRoaXMsITEpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcik6dGhpcy5zdGFjaz1uZXcgRXJyb3IoKS5zdGFja3x8IiJ9ZnVuY3Rpb24gckQodCxlLHIsbixpKXt2YXIgYT0iIixzPSIiLGw9TWF0aC5mbG9vcihpLzIpLTE7cmV0dXJuIG4tZT5sJiYoYT0iIC4uLiAiLGU9bi1sK2EubGVuZ3RoKSxyLW4+bCYmKHM9IiAuLi4iLHI9bitsLXMubGVuZ3RoKSx7c3RyOmErdC5zbGljZShlLHIpLnJlcGxhY2UoL1x0L2csIlx1MjE5MiIpK3MscG9zOm4tZSthLmxlbmd0aH19ZnVuY3Rpb24gbkQodCxlKXtyZXR1cm4gJGkucmVwZWF0KCIgIixlLXQubGVuZ3RoKSt0fWZ1bmN0aW9uIEtDZSh0LGUpe2lmKGU9T2JqZWN0LmNyZWF0ZShlfHxudWxsKSwhdC5idWZmZXIpcmV0dXJuIG51bGw7ZS5tYXhMZW5ndGh8fChlLm1heExlbmd0aD03OSksdHlwZW9mIGUuaW5kZW50IT0ibnVtYmVyIiYmKGUuaW5kZW50PTEpLHR5cGVvZiBlLmxpbmVzQmVmb3JlIT0ibnVtYmVyIiYmKGUubGluZXNCZWZvcmU9MyksdHlwZW9mIGUubGluZXNBZnRlciE9Im51bWJlciImJihlLmxpbmVzQWZ0ZXI9Mik7Zm9yKHZhciByPS9ccj9cbnxccnxcMC9nLG49WzBdLGk9W10sYSxzPS0xO2E9ci5leGVjKHQuYnVmZmVyKTspaS5wdXNoKGEuaW5kZXgpLG4ucHVzaChhLmluZGV4K2FbMF0ubGVuZ3RoKSx0LnBvc2l0aW9uPD1hLmluZGV4JiZzPDAmJihzPW4ubGVuZ3RoLTIpO3M8MCYmKHM9bi5sZW5ndGgtMSk7dmFyIGw9IiIsdSxoLGY9TWF0aC5taW4odC5saW5lK2UubGluZXNBZnRlcixpLmxlbmd0aCkudG9TdHJpbmcoKS5sZW5ndGgsZD1lLm1heExlbmd0aC0oZS5pbmRlbnQrZiszKTtmb3IodT0xO3U8PWUubGluZXNCZWZvcmUmJiEocy11PDApO3UrKyloPXJEKHQuYnVmZmVyLG5bcy11XSxpW3MtdV0sdC5wb3NpdGlvbi0obltzXS1uW3MtdV0pLGQpLGw9JGkucmVwZWF0KCIgIixlLmluZGVudCkrbkQoKHQubGluZS11KzEpLnRvU3RyaW5nKCksZikrIiB8ICIraC5zdHIrYApgK2w7Zm9yKGg9ckQodC5idWZmZXIsbltzXSxpW3NdLHQucG9zaXRpb24sZCksbCs9JGkucmVwZWF0KCIgIixlLmluZGVudCkrbkQoKHQubGluZSsxKS50b1N0cmluZygpLGYpKyIgfCAiK2guc3RyK2AKYCxsKz0kaS5yZXBlYXQoIi0iLGUuaW5kZW50K2YrMytoLnBvcykrYF4KYCx1PTE7dTw9ZS5saW5lc0FmdGVyJiYhKHMrdT49aS5sZW5ndGgpO3UrKyloPXJEKHQuYnVmZmVyLG5bcyt1XSxpW3MrdV0sdC5wb3NpdGlvbi0obltzXS1uW3MrdV0pLGQpLGwrPSRpLnJlcGVhdCgiICIsZS5pbmRlbnQpK25EKCh0LmxpbmUrdSsxKS50b1N0cmluZygpLGYpKyIgfCAiK2guc3RyK2AKYDtyZXR1cm4gbC5yZXBsYWNlKC9cbiQvLCIiKX1mdW5jdGlvbiBlN2UodCl7dmFyIGU9e307cmV0dXJuIHQhPT1udWxsJiZPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3Rbcl0uZm9yRWFjaChmdW5jdGlvbihuKXtlW1N0cmluZyhuKV09cn0pfSksZX1mdW5jdGlvbiB0N2UodCxlKXtpZihlPWV8fHt9LE9iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24ocil7aWYoWkNlLmluZGV4T2Yocik9PT0tMSl0aHJvdyBuZXcgRHMoJ1Vua25vd24gb3B0aW9uICInK3IrJyIgaXMgbWV0IGluIGRlZmluaXRpb24gb2YgIicrdCsnIiBZQU1MIHR5cGUuJyl9KSx0aGlzLm9wdGlvbnM9ZSx0aGlzLnRhZz10LHRoaXMua2luZD1lLmtpbmR8fG51bGwsdGhpcy5yZXNvbHZlPWUucmVzb2x2ZXx8ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdGhpcy5jb25zdHJ1Y3Q9ZS5jb25zdHJ1Y3R8fGZ1bmN0aW9uKHIpe3JldHVybiByfSx0aGlzLmluc3RhbmNlT2Y9ZS5pbnN0YW5jZU9mfHxudWxsLHRoaXMucHJlZGljYXRlPWUucHJlZGljYXRlfHxudWxsLHRoaXMucmVwcmVzZW50PWUucmVwcmVzZW50fHxudWxsLHRoaXMucmVwcmVzZW50TmFtZT1lLnJlcHJlc2VudE5hbWV8fG51bGwsdGhpcy5kZWZhdWx0U3R5bGU9ZS5kZWZhdWx0U3R5bGV8fG51bGwsdGhpcy5tdWx0aT1lLm11bHRpfHwhMSx0aGlzLnN0eWxlQWxpYXNlcz1lN2UoZS5zdHlsZUFsaWFzZXN8fG51bGwpLEpDZS5pbmRleE9mKHRoaXMua2luZCk9PT0tMSl0aHJvdyBuZXcgRHMoJ1Vua25vd24ga2luZCAiJyt0aGlzLmtpbmQrJyIgaXMgc3BlY2lmaWVkIGZvciAiJyt0KyciIFlBTUwgdHlwZS4nKX1mdW5jdGlvbiBqWCh0LGUpe3ZhciByPVtdO3JldHVybiB0W2VdLmZvckVhY2goZnVuY3Rpb24obil7dmFyIGk9ci5sZW5ndGg7ci5mb3JFYWNoKGZ1bmN0aW9uKGEscyl7YS50YWc9PT1uLnRhZyYmYS5raW5kPT09bi5raW5kJiZhLm11bHRpPT09bi5tdWx0aSYmKGk9cyl9KSxyW2ldPW59KSxyfWZ1bmN0aW9uIHI3ZSgpe3ZhciB0PXtzY2FsYXI6e30sc2VxdWVuY2U6e30sbWFwcGluZzp7fSxmYWxsYmFjazp7fSxtdWx0aTp7c2NhbGFyOltdLHNlcXVlbmNlOltdLG1hcHBpbmc6W10sZmFsbGJhY2s6W119fSxlLHI7ZnVuY3Rpb24gbihpKXtpLm11bHRpPyh0Lm11bHRpW2kua2luZF0ucHVzaChpKSx0Lm11bHRpLmZhbGxiYWNrLnB1c2goaSkpOnRbaS5raW5kXVtpLnRhZ109dC5mYWxsYmFja1tpLnRhZ109aX1mb3IobyhuLCJjb2xsZWN0VHlwZSIpLGU9MCxyPWFyZ3VtZW50cy5sZW5ndGg7ZTxyO2UrPTEpYXJndW1lbnRzW2VdLmZvckVhY2gobik7cmV0dXJuIHR9ZnVuY3Rpb24gYUQodCl7cmV0dXJuIHRoaXMuZXh0ZW5kKHQpfWZ1bmN0aW9uIGw3ZSh0KXtpZih0PT09bnVsbClyZXR1cm4hMDt2YXIgZT10Lmxlbmd0aDtyZXR1cm4gZT09PTEmJnQ9PT0ifiJ8fGU9PT00JiYodD09PSJudWxsInx8dD09PSJOdWxsInx8dD09PSJOVUxMIil9ZnVuY3Rpb24gYzdlKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gdTdlKHQpe3JldHVybiB0PT09bnVsbH1mdW5jdGlvbiBmN2UodCl7aWYodD09PW51bGwpcmV0dXJuITE7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIGU9PT00JiYodD09PSJ0cnVlInx8dD09PSJUcnVlInx8dD09PSJUUlVFIil8fGU9PT01JiYodD09PSJmYWxzZSJ8fHQ9PT0iRmFsc2UifHx0PT09IkZBTFNFIil9ZnVuY3Rpb24gZDdlKHQpe3JldHVybiB0PT09InRydWUifHx0PT09IlRydWUifHx0PT09IlRSVUUifWZ1bmN0aW9uIHA3ZSh0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpPT09IltvYmplY3QgQm9vbGVhbl0ifWZ1bmN0aW9uIGc3ZSh0KXtyZXR1cm4gNDg8PXQmJnQ8PTU3fHw2NTw9dCYmdDw9NzB8fDk3PD10JiZ0PD0xMDJ9ZnVuY3Rpb24geTdlKHQpe3JldHVybiA0ODw9dCYmdDw9NTV9ZnVuY3Rpb24gdjdlKHQpe3JldHVybiA0ODw9dCYmdDw9NTd9ZnVuY3Rpb24geDdlKHQpe2lmKHQ9PT1udWxsKXJldHVybiExO3ZhciBlPXQubGVuZ3RoLHI9MCxuPSExLGk7aWYoIWUpcmV0dXJuITE7aWYoaT10W3JdLChpPT09Ii0ifHxpPT09IisiKSYmKGk9dFsrK3JdKSxpPT09IjAiKXtpZihyKzE9PT1lKXJldHVybiEwO2lmKGk9dFsrK3JdLGk9PT0iYiIpe2ZvcihyKys7cjxlO3IrKylpZihpPXRbcl0saSE9PSJfIil7aWYoaSE9PSIwIiYmaSE9PSIxIilyZXR1cm4hMTtuPSEwfXJldHVybiBuJiZpIT09Il8ifWlmKGk9PT0ieCIpe2ZvcihyKys7cjxlO3IrKylpZihpPXRbcl0saSE9PSJfIil7aWYoIWc3ZSh0LmNoYXJDb2RlQXQocikpKXJldHVybiExO249ITB9cmV0dXJuIG4mJmkhPT0iXyJ9aWYoaT09PSJvIil7Zm9yKHIrKztyPGU7cisrKWlmKGk9dFtyXSxpIT09Il8iKXtpZigheTdlKHQuY2hhckNvZGVBdChyKSkpcmV0dXJuITE7bj0hMH1yZXR1cm4gbiYmaSE9PSJfIn19aWYoaT09PSJfIilyZXR1cm4hMTtmb3IoO3I8ZTtyKyspaWYoaT10W3JdLGkhPT0iXyIpe2lmKCF2N2UodC5jaGFyQ29kZUF0KHIpKSlyZXR1cm4hMTtuPSEwfXJldHVybiEoIW58fGk9PT0iXyIpfWZ1bmN0aW9uIGI3ZSh0KXt2YXIgZT10LHI9MSxuO2lmKGUuaW5kZXhPZigiXyIpIT09LTEmJihlPWUucmVwbGFjZSgvXy9nLCIiKSksbj1lWzBdLChuPT09Ii0ifHxuPT09IisiKSYmKG49PT0iLSImJihyPS0xKSxlPWUuc2xpY2UoMSksbj1lWzBdKSxlPT09IjAiKXJldHVybiAwO2lmKG49PT0iMCIpe2lmKGVbMV09PT0iYiIpcmV0dXJuIHIqcGFyc2VJbnQoZS5zbGljZSgyKSwyKTtpZihlWzFdPT09IngiKXJldHVybiByKnBhcnNlSW50KGUuc2xpY2UoMiksMTYpO2lmKGVbMV09PT0ibyIpcmV0dXJuIHIqcGFyc2VJbnQoZS5zbGljZSgyKSw4KX1yZXR1cm4gcipwYXJzZUludChlLDEwKX1mdW5jdGlvbiB3N2UodCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KT09PSJbb2JqZWN0IE51bWJlcl0iJiZ0JTE9PT0wJiYhJGkuaXNOZWdhdGl2ZVplcm8odCl9ZnVuY3Rpb24gRTdlKHQpe3JldHVybiEodD09PW51bGx8fCFrN2UudGVzdCh0KXx8dFt0Lmxlbmd0aC0xXT09PSJfIil9ZnVuY3Rpb24gUzdlKHQpe3ZhciBlLHI7cmV0dXJuIGU9dC5yZXBsYWNlKC9fL2csIiIpLnRvTG93ZXJDYXNlKCkscj1lWzBdPT09Ii0iPy0xOjEsIistIi5pbmRleE9mKGVbMF0pPj0wJiYoZT1lLnNsaWNlKDEpKSxlPT09Ii5pbmYiP3I9PT0xP051bWJlci5QT1NJVElWRV9JTkZJTklUWTpOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk6ZT09PSIubmFuIj9OYU46cipwYXJzZUZsb2F0KGUsMTApfWZ1bmN0aW9uIEE3ZSh0LGUpe3ZhciByO2lmKGlzTmFOKHQpKXN3aXRjaChlKXtjYXNlImxvd2VyY2FzZSI6cmV0dXJuIi5uYW4iO2Nhc2UidXBwZXJjYXNlIjpyZXR1cm4iLk5BTiI7Y2FzZSJjYW1lbGNhc2UiOnJldHVybiIuTmFOIn1lbHNlIGlmKE51bWJlci5QT1NJVElWRV9JTkZJTklUWT09PXQpc3dpdGNoKGUpe2Nhc2UibG93ZXJjYXNlIjpyZXR1cm4iLmluZiI7Y2FzZSJ1cHBlcmNhc2UiOnJldHVybiIuSU5GIjtjYXNlImNhbWVsY2FzZSI6cmV0dXJuIi5JbmYifWVsc2UgaWYoTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZPT09dClzd2l0Y2goZSl7Y2FzZSJsb3dlcmNhc2UiOnJldHVybiItLmluZiI7Y2FzZSJ1cHBlcmNhc2UiOnJldHVybiItLklORiI7Y2FzZSJjYW1lbGNhc2UiOnJldHVybiItLkluZiJ9ZWxzZSBpZigkaS5pc05lZ2F0aXZlWmVybyh0KSlyZXR1cm4iLTAuMCI7cmV0dXJuIHI9dC50b1N0cmluZygxMCksQzdlLnRlc3Qocik/ci5yZXBsYWNlKCJlIiwiLmUiKTpyfWZ1bmN0aW9uIF83ZSh0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpPT09IltvYmplY3QgTnVtYmVyXSImJih0JTEhPT0wfHwkaS5pc05lZ2F0aXZlWmVybyh0KSl9ZnVuY3Rpb24gUjdlKHQpe3JldHVybiB0PT09bnVsbD8hMTpkai5leGVjKHQpIT09bnVsbHx8cGouZXhlYyh0KSE9PW51bGx9ZnVuY3Rpb24gTjdlKHQpe3ZhciBlLHIsbixpLGEscyxsLHU9MCxoPW51bGwsZixkLHA7aWYoZT1kai5leGVjKHQpLGU9PT1udWxsJiYoZT1wai5leGVjKHQpKSxlPT09bnVsbCl0aHJvdyBuZXcgRXJyb3IoIkRhdGUgcmVzb2x2ZSBlcnJvciIpO2lmKHI9K2VbMV0sbj0rZVsyXS0xLGk9K2VbM10sIWVbNF0pcmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKHIsbixpKSk7aWYoYT0rZVs0XSxzPStlWzVdLGw9K2VbNl0sZVs3XSl7Zm9yKHU9ZVs3XS5zbGljZSgwLDMpO3UubGVuZ3RoPDM7KXUrPSIwIjt1PSt1fXJldHVybiBlWzldJiYoZj0rZVsxMF0sZD0rKGVbMTFdfHwwKSxoPShmKjYwK2QpKjZlNCxlWzldPT09Ii0iJiYoaD0taCkpLHA9bmV3IERhdGUoRGF0ZS5VVEMocixuLGksYSxzLGwsdSkpLGgmJnAuc2V0VGltZShwLmdldFRpbWUoKS1oKSxwfWZ1bmN0aW9uIE03ZSh0KXtyZXR1cm4gdC50b0lTT1N0cmluZygpfWZ1bmN0aW9uIE83ZSh0KXtyZXR1cm4gdD09PSI8PCJ8fHQ9PT1udWxsfWZ1bmN0aW9uIEI3ZSh0KXtpZih0PT09bnVsbClyZXR1cm4hMTt2YXIgZSxyLG49MCxpPXQubGVuZ3RoLGE9dUQ7Zm9yKHI9MDtyPGk7cisrKWlmKGU9YS5pbmRleE9mKHQuY2hhckF0KHIpKSwhKGU+NjQpKXtpZihlPDApcmV0dXJuITE7bis9Nn1yZXR1cm4gbiU4PT09MH1mdW5jdGlvbiBGN2UodCl7dmFyIGUscixuPXQucmVwbGFjZSgvW1xyXG49XS9nLCIiKSxpPW4ubGVuZ3RoLGE9dUQscz0wLGw9W107Zm9yKGU9MDtlPGk7ZSsrKWUlND09PTAmJmUmJihsLnB1c2gocz4+MTYmMjU1KSxsLnB1c2gocz4+OCYyNTUpLGwucHVzaChzJjI1NSkpLHM9czw8NnxhLmluZGV4T2Yobi5jaGFyQXQoZSkpO3JldHVybiByPWklNCo2LHI9PT0wPyhsLnB1c2gocz4+MTYmMjU1KSxsLnB1c2gocz4+OCYyNTUpLGwucHVzaChzJjI1NSkpOnI9PT0xOD8obC5wdXNoKHM+PjEwJjI1NSksbC5wdXNoKHM+PjImMjU1KSk6cj09PTEyJiZsLnB1c2gocz4+NCYyNTUpLG5ldyBVaW50OEFycmF5KGwpfWZ1bmN0aW9uICQ3ZSh0KXt2YXIgZT0iIixyPTAsbixpLGE9dC5sZW5ndGgscz11RDtmb3Iobj0wO248YTtuKyspbiUzPT09MCYmbiYmKGUrPXNbcj4+MTgmNjNdLGUrPXNbcj4+MTImNjNdLGUrPXNbcj4+NiY2M10sZSs9c1tyJjYzXSkscj0ocjw8OCkrdFtuXTtyZXR1cm4gaT1hJTMsaT09PTA/KGUrPXNbcj4+MTgmNjNdLGUrPXNbcj4+MTImNjNdLGUrPXNbcj4+NiY2M10sZSs9c1tyJjYzXSk6aT09PTI/KGUrPXNbcj4+MTAmNjNdLGUrPXNbcj4+NCY2M10sZSs9c1tyPDwyJjYzXSxlKz1zWzY0XSk6aT09PTEmJihlKz1zW3I+PjImNjNdLGUrPXNbcjw8NCY2M10sZSs9c1s2NF0sZSs9c1s2NF0pLGV9ZnVuY3Rpb24gejdlKHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCk9PT0iW29iamVjdCBVaW50OEFycmF5XSJ9ZnVuY3Rpb24gSDdlKHQpe2lmKHQ9PT1udWxsKXJldHVybiEwO3ZhciBlPVtdLHIsbixpLGEscyxsPXQ7Zm9yKHI9MCxuPWwubGVuZ3RoO3I8bjtyKz0xKXtpZihpPWxbcl0scz0hMSxVN2UuY2FsbChpKSE9PSJbb2JqZWN0IE9iamVjdF0iKXJldHVybiExO2ZvcihhIGluIGkpaWYoVjdlLmNhbGwoaSxhKSlpZighcylzPSEwO2Vsc2UgcmV0dXJuITE7aWYoIXMpcmV0dXJuITE7aWYoZS5pbmRleE9mKGEpPT09LTEpZS5wdXNoKGEpO2Vsc2UgcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gVzdlKHQpe3JldHVybiB0IT09bnVsbD90OltdfWZ1bmN0aW9uIFg3ZSh0KXtpZih0PT09bnVsbClyZXR1cm4hMDt2YXIgZSxyLG4saSxhLHM9dDtmb3IoYT1uZXcgQXJyYXkocy5sZW5ndGgpLGU9MCxyPXMubGVuZ3RoO2U8cjtlKz0xKXtpZihuPXNbZV0sWTdlLmNhbGwobikhPT0iW29iamVjdCBPYmplY3RdInx8KGk9T2JqZWN0LmtleXMobiksaS5sZW5ndGghPT0xKSlyZXR1cm4hMTthW2VdPVtpWzBdLG5baVswXV1dfXJldHVybiEwfWZ1bmN0aW9uIGo3ZSh0KXtpZih0PT09bnVsbClyZXR1cm5bXTt2YXIgZSxyLG4saSxhLHM9dDtmb3IoYT1uZXcgQXJyYXkocy5sZW5ndGgpLGU9MCxyPXMubGVuZ3RoO2U8cjtlKz0xKW49c1tlXSxpPU9iamVjdC5rZXlzKG4pLGFbZV09W2lbMF0sbltpWzBdXV07cmV0dXJuIGF9ZnVuY3Rpb24gWjdlKHQpe2lmKHQ9PT1udWxsKXJldHVybiEwO3ZhciBlLHI9dDtmb3IoZSBpbiByKWlmKFE3ZS5jYWxsKHIsZSkmJnJbZV0hPT1udWxsKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIEo3ZSh0KXtyZXR1cm4gdCE9PW51bGw/dDp7fX1mdW5jdGlvbiBRWCh0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIGRjKHQpe3JldHVybiB0PT09MTB8fHQ9PT0xM31mdW5jdGlvbiBOZCh0KXtyZXR1cm4gdD09PTl8fHQ9PT0zMn1mdW5jdGlvbiBMcyh0KXtyZXR1cm4gdD09PTl8fHQ9PT0zMnx8dD09PTEwfHx0PT09MTN9ZnVuY3Rpb24gYW0odCl7cmV0dXJuIHQ9PT00NHx8dD09PTkxfHx0PT09OTN8fHQ9PT0xMjN8fHQ9PT0xMjV9ZnVuY3Rpb24gYUFlKHQpe3ZhciBlO3JldHVybiA0ODw9dCYmdDw9NTc/dC00ODooZT10fDMyLDk3PD1lJiZlPD0xMDI/ZS05NysxMDotMSl9ZnVuY3Rpb24gc0FlKHQpe3JldHVybiB0PT09MTIwPzI6dD09PTExNz80OnQ9PT04NT84OjB9ZnVuY3Rpb24gb0FlKHQpe3JldHVybiA0ODw9dCYmdDw9NTc/dC00ODotMX1mdW5jdGlvbiBaWCh0KXtyZXR1cm4gdD09PTQ4PyJcMCI6dD09PTk3PyJceDA3Ijp0PT09OTg/IlxiIjp0PT09MTE2fHx0PT09OT8iCSI6dD09PTExMD9gCmA6dD09PTExOD8iXHYiOnQ9PT0xMDI/IlxmIjp0PT09MTE0PyJcciI6dD09PTEwMT8iXHgxQiI6dD09PTMyPyIgIjp0PT09MzQ/JyInOnQ9PT00Nz8iLyI6dD09PTkyPyJcXCI6dD09PTc4PyJceDg1Ijp0PT09OTU/Ilx4QTAiOnQ9PT03Nj8iXHUyMDI4Ijp0PT09ODA/Ilx1MjAyOSI6IiJ9ZnVuY3Rpb24gbEFlKHQpe3JldHVybiB0PD02NTUzNT9TdHJpbmcuZnJvbUNoYXJDb2RlKHQpOlN0cmluZy5mcm9tQ2hhckNvZGUoKHQtNjU1MzY+PjEwKSs1NTI5NiwodC02NTUzNiYxMDIzKSs1NjMyMCl9ZnVuY3Rpb24gY0FlKHQsZSl7dGhpcy5pbnB1dD10LHRoaXMuZmlsZW5hbWU9ZS5maWxlbmFtZXx8bnVsbCx0aGlzLnNjaGVtYT1lLnNjaGVtYXx8bWosdGhpcy5vbldhcm5pbmc9ZS5vbldhcm5pbmd8fG51bGwsdGhpcy5sZWdhY3k9ZS5sZWdhY3l8fCExLHRoaXMuanNvbj1lLmpzb258fCExLHRoaXMubGlzdGVuZXI9ZS5saXN0ZW5lcnx8bnVsbCx0aGlzLmltcGxpY2l0VHlwZXM9dGhpcy5zY2hlbWEuY29tcGlsZWRJbXBsaWNpdCx0aGlzLnR5cGVNYXA9dGhpcy5zY2hlbWEuY29tcGlsZWRUeXBlTWFwLHRoaXMubGVuZ3RoPXQubGVuZ3RoLHRoaXMucG9zaXRpb249MCx0aGlzLmxpbmU9MCx0aGlzLmxpbmVTdGFydD0wLHRoaXMubGluZUluZGVudD0wLHRoaXMuZmlyc3RUYWJJbkxpbmU9LTEsdGhpcy5kb2N1bWVudHM9W119ZnVuY3Rpb24gVGoodCxlKXt2YXIgcj17bmFtZTp0LmZpbGVuYW1lLGJ1ZmZlcjp0LmlucHV0LnNsaWNlKDAsLTEpLHBvc2l0aW9uOnQucG9zaXRpb24sbGluZTp0LmxpbmUsY29sdW1uOnQucG9zaXRpb24tdC5saW5lU3RhcnR9O3JldHVybiByLnNuaXBwZXQ9UUNlKHIpLG5ldyBEcyhlLHIpfWZ1bmN0aW9uIFF0KHQsZSl7dGhyb3cgVGoodCxlKX1mdW5jdGlvbiBidyh0LGUpe3Qub25XYXJuaW5nJiZ0Lm9uV2FybmluZy5jYWxsKG51bGwsVGoodCxlKSl9ZnVuY3Rpb24gemgodCxlLHIsbil7dmFyIGksYSxzLGw7aWYoZTxyKXtpZihsPXQuaW5wdXQuc2xpY2UoZSxyKSxuKWZvcihpPTAsYT1sLmxlbmd0aDtpPGE7aSs9MSlzPWwuY2hhckNvZGVBdChpKSxzPT09OXx8MzI8PXMmJnM8PTExMTQxMTF8fFF0KHQsImV4cGVjdGVkIHZhbGlkIEpTT04gY2hhcmFjdGVyIik7ZWxzZSByQWUudGVzdChsKSYmUXQodCwidGhlIHN0cmVhbSBjb250YWlucyBub24tcHJpbnRhYmxlIGNoYXJhY3RlcnMiKTt0LnJlc3VsdCs9bH19ZnVuY3Rpb24gZWoodCxlLHIsbil7dmFyIGksYSxzLGw7Zm9yKCRpLmlzT2JqZWN0KHIpfHxRdCh0LCJjYW5ub3QgbWVyZ2UgbWFwcGluZ3M7IHRoZSBwcm92aWRlZCBzb3VyY2Ugb2JqZWN0IGlzIHVuYWNjZXB0YWJsZSIpLGk9T2JqZWN0LmtleXMocikscz0wLGw9aS5sZW5ndGg7czxsO3MrPTEpYT1pW3NdLEdoLmNhbGwoZSxhKXx8KGVbYV09clthXSxuW2FdPSEwKX1mdW5jdGlvbiBzbSh0LGUscixuLGksYSxzLGwsdSl7dmFyIGgsZjtpZihBcnJheS5pc0FycmF5KGkpKWZvcihpPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGkpLGg9MCxmPWkubGVuZ3RoO2g8ZjtoKz0xKUFycmF5LmlzQXJyYXkoaVtoXSkmJlF0KHQsIm5lc3RlZCBhcnJheXMgYXJlIG5vdCBzdXBwb3J0ZWQgaW5zaWRlIGtleXMiKSx0eXBlb2YgaT09Im9iamVjdCImJlFYKGlbaF0pPT09IltvYmplY3QgT2JqZWN0XSImJihpW2hdPSJbb2JqZWN0IE9iamVjdF0iKTtpZih0eXBlb2YgaT09Im9iamVjdCImJlFYKGkpPT09IltvYmplY3QgT2JqZWN0XSImJihpPSJbb2JqZWN0IE9iamVjdF0iKSxpPVN0cmluZyhpKSxlPT09bnVsbCYmKGU9e30pLG49PT0idGFnOnlhbWwub3JnLDIwMDI6bWVyZ2UiKWlmKEFycmF5LmlzQXJyYXkoYSkpZm9yKGg9MCxmPWEubGVuZ3RoO2g8ZjtoKz0xKWVqKHQsZSxhW2hdLHIpO2Vsc2UgZWoodCxlLGEscik7ZWxzZSF0Lmpzb24mJiFHaC5jYWxsKHIsaSkmJkdoLmNhbGwoZSxpKSYmKHQubGluZT1zfHx0LmxpbmUsdC5saW5lU3RhcnQ9bHx8dC5saW5lU3RhcnQsdC5wb3NpdGlvbj11fHx0LnBvc2l0aW9uLFF0KHQsImR1cGxpY2F0ZWQgbWFwcGluZyBrZXkiKSksaT09PSJfX3Byb3RvX18iP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLGkse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmF9KTplW2ldPWEsZGVsZXRlIHJbaV07cmV0dXJuIGV9ZnVuY3Rpb24gaEQodCl7dmFyIGU7ZT10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbiksZT09PTEwP3QucG9zaXRpb24rKzplPT09MTM/KHQucG9zaXRpb24rKyx0LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbik9PT0xMCYmdC5wb3NpdGlvbisrKTpRdCh0LCJhIGxpbmUgYnJlYWsgaXMgZXhwZWN0ZWQiKSx0LmxpbmUrPTEsdC5saW5lU3RhcnQ9dC5wb3NpdGlvbix0LmZpcnN0VGFiSW5MaW5lPS0xfWZ1bmN0aW9uIENpKHQsZSxyKXtmb3IodmFyIG49MCxpPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKTtpIT09MDspe2Zvcig7TmQoaSk7KWk9PT05JiZ0LmZpcnN0VGFiSW5MaW5lPT09LTEmJih0LmZpcnN0VGFiSW5MaW5lPXQucG9zaXRpb24pLGk9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbik7aWYoZSYmaT09PTM1KWRvIGk9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbik7d2hpbGUoaSE9PTEwJiZpIT09MTMmJmkhPT0wKTtpZihkYyhpKSlmb3IoaEQodCksaT10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbiksbisrLHQubGluZUluZGVudD0wO2k9PT0zMjspdC5saW5lSW5kZW50KyssaT10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKTtlbHNlIGJyZWFrfXJldHVybiByIT09LTEmJm4hPT0wJiZ0LmxpbmVJbmRlbnQ8ciYmYncodCwiZGVmaWNpZW50IGluZGVudGF0aW9uIiksbn1mdW5jdGlvbiBrdyh0KXt2YXIgZT10LnBvc2l0aW9uLHI7cmV0dXJuIHI9dC5pbnB1dC5jaGFyQ29kZUF0KGUpLCEhKChyPT09NDV8fHI9PT00NikmJnI9PT10LmlucHV0LmNoYXJDb2RlQXQoZSsxKSYmcj09PXQuaW5wdXQuY2hhckNvZGVBdChlKzIpJiYoZSs9MyxyPXQuaW5wdXQuY2hhckNvZGVBdChlKSxyPT09MHx8THMocikpKX1mdW5jdGlvbiBmRCh0LGUpe2U9PT0xP3QucmVzdWx0Kz0iICI6ZT4xJiYodC5yZXN1bHQrPSRpLnJlcGVhdChgCmAsZS0xKSl9ZnVuY3Rpb24gdUFlKHQsZSxyKXt2YXIgbixpLGEscyxsLHUsaCxmLGQ9dC5raW5kLHA9dC5yZXN1bHQsbTtpZihtPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSxMcyhtKXx8YW0obSl8fG09PT0zNXx8bT09PTM4fHxtPT09NDJ8fG09PT0zM3x8bT09PTEyNHx8bT09PTYyfHxtPT09Mzl8fG09PT0zNHx8bT09PTM3fHxtPT09NjR8fG09PT05Nnx8KG09PT02M3x8bT09PTQ1KSYmKGk9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24rMSksTHMoaSl8fHImJmFtKGkpKSlyZXR1cm4hMTtmb3IodC5raW5kPSJzY2FsYXIiLHQucmVzdWx0PSIiLGE9cz10LnBvc2l0aW9uLGw9ITE7bSE9PTA7KXtpZihtPT09NTgpe2lmKGk9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24rMSksTHMoaSl8fHImJmFtKGkpKWJyZWFrfWVsc2UgaWYobT09PTM1KXtpZihuPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uLTEpLExzKG4pKWJyZWFrfWVsc2V7aWYodC5wb3NpdGlvbj09PXQubGluZVN0YXJ0JiZrdyh0KXx8ciYmYW0obSkpYnJlYWs7aWYoZGMobSkpaWYodT10LmxpbmUsaD10LmxpbmVTdGFydCxmPXQubGluZUluZGVudCxDaSh0LCExLC0xKSx0LmxpbmVJbmRlbnQ+PWUpe2w9ITAsbT10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbik7Y29udGludWV9ZWxzZXt0LnBvc2l0aW9uPXMsdC5saW5lPXUsdC5saW5lU3RhcnQ9aCx0LmxpbmVJbmRlbnQ9ZjticmVha319bCYmKHpoKHQsYSxzLCExKSxmRCh0LHQubGluZS11KSxhPXM9dC5wb3NpdGlvbixsPSExKSxOZChtKXx8KHM9dC5wb3NpdGlvbisxKSxtPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pfXJldHVybiB6aCh0LGEscywhMSksdC5yZXN1bHQ/ITA6KHQua2luZD1kLHQucmVzdWx0PXAsITEpfWZ1bmN0aW9uIGhBZSh0LGUpe3ZhciByLG4saTtpZihyPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSxyIT09MzkpcmV0dXJuITE7Zm9yKHQua2luZD0ic2NhbGFyIix0LnJlc3VsdD0iIix0LnBvc2l0aW9uKyssbj1pPXQucG9zaXRpb247KHI9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pKSE9PTA7KWlmKHI9PT0zOSlpZih6aCh0LG4sdC5wb3NpdGlvbiwhMCkscj10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKSxyPT09Mzkpbj10LnBvc2l0aW9uLHQucG9zaXRpb24rKyxpPXQucG9zaXRpb247ZWxzZSByZXR1cm4hMDtlbHNlIGRjKHIpPyh6aCh0LG4saSwhMCksZkQodCxDaSh0LCExLGUpKSxuPWk9dC5wb3NpdGlvbik6dC5wb3NpdGlvbj09PXQubGluZVN0YXJ0JiZrdyh0KT9RdCh0LCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgZG9jdW1lbnQgd2l0aGluIGEgc2luZ2xlIHF1b3RlZCBzY2FsYXIiKToodC5wb3NpdGlvbisrLGk9dC5wb3NpdGlvbik7UXQodCwidW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSBzaW5nbGUgcXVvdGVkIHNjYWxhciIpfWZ1bmN0aW9uIGZBZSh0LGUpe3ZhciByLG4saSxhLHMsbDtpZihsPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSxsIT09MzQpcmV0dXJuITE7Zm9yKHQua2luZD0ic2NhbGFyIix0LnJlc3VsdD0iIix0LnBvc2l0aW9uKysscj1uPXQucG9zaXRpb247KGw9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pKSE9PTA7KXtpZihsPT09MzQpcmV0dXJuIHpoKHQscix0LnBvc2l0aW9uLCEwKSx0LnBvc2l0aW9uKyssITA7aWYobD09PTkyKXtpZih6aCh0LHIsdC5wb3NpdGlvbiwhMCksbD10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKSxkYyhsKSlDaSh0LCExLGUpO2Vsc2UgaWYobDwyNTYmJmJqW2xdKXQucmVzdWx0Kz13altsXSx0LnBvc2l0aW9uKys7ZWxzZSBpZigocz1zQWUobCkpPjApe2ZvcihpPXMsYT0wO2k+MDtpLS0pbD10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKSwocz1hQWUobCkpPj0wP2E9KGE8PDQpK3M6UXQodCwiZXhwZWN0ZWQgaGV4YWRlY2ltYWwgY2hhcmFjdGVyIik7dC5yZXN1bHQrPWxBZShhKSx0LnBvc2l0aW9uKyt9ZWxzZSBRdCh0LCJ1bmtub3duIGVzY2FwZSBzZXF1ZW5jZSIpO3I9bj10LnBvc2l0aW9ufWVsc2UgZGMobCk/KHpoKHQscixuLCEwKSxmRCh0LENpKHQsITEsZSkpLHI9bj10LnBvc2l0aW9uKTp0LnBvc2l0aW9uPT09dC5saW5lU3RhcnQmJmt3KHQpP1F0KHQsInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBkb2N1bWVudCB3aXRoaW4gYSBkb3VibGUgcXVvdGVkIHNjYWxhciIpOih0LnBvc2l0aW9uKyssbj10LnBvc2l0aW9uKX1RdCh0LCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIGRvdWJsZSBxdW90ZWQgc2NhbGFyIil9ZnVuY3Rpb24gZEFlKHQsZSl7dmFyIHI9ITAsbixpLGEscz10LnRhZyxsLHU9dC5hbmNob3IsaCxmLGQscCxtLGc9T2JqZWN0LmNyZWF0ZShudWxsKSx5LHYseCxiO2lmKGI9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pLGI9PT05MSlmPTkzLG09ITEsbD1bXTtlbHNlIGlmKGI9PT0xMjMpZj0xMjUsbT0hMCxsPXt9O2Vsc2UgcmV0dXJuITE7Zm9yKHQuYW5jaG9yIT09bnVsbCYmKHQuYW5jaG9yTWFwW3QuYW5jaG9yXT1sKSxiPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pO2IhPT0wOyl7aWYoQ2kodCwhMCxlKSxiPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSxiPT09ZilyZXR1cm4gdC5wb3NpdGlvbisrLHQudGFnPXMsdC5hbmNob3I9dSx0LmtpbmQ9bT8ibWFwcGluZyI6InNlcXVlbmNlIix0LnJlc3VsdD1sLCEwO3I/Yj09PTQ0JiZRdCh0LCJleHBlY3RlZCB0aGUgbm9kZSBjb250ZW50LCBidXQgZm91bmQgJywnIik6UXQodCwibWlzc2VkIGNvbW1hIGJldHdlZW4gZmxvdyBjb2xsZWN0aW9uIGVudHJpZXMiKSx2PXk9eD1udWxsLGQ9cD0hMSxiPT09NjMmJihoPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKzEpLExzKGgpJiYoZD1wPSEwLHQucG9zaXRpb24rKyxDaSh0LCEwLGUpKSksbj10LmxpbmUsaT10LmxpbmVTdGFydCxhPXQucG9zaXRpb24sb20odCxlLHZ3LCExLCEwKSx2PXQudGFnLHk9dC5yZXN1bHQsQ2kodCwhMCxlKSxiPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSwocHx8dC5saW5lPT09bikmJmI9PT01OCYmKGQ9ITAsYj10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKSxDaSh0LCEwLGUpLG9tKHQsZSx2dywhMSwhMCkseD10LnJlc3VsdCksbT9zbSh0LGwsZyx2LHkseCxuLGksYSk6ZD9sLnB1c2goc20odCxudWxsLGcsdix5LHgsbixpLGEpKTpsLnB1c2goeSksQ2kodCwhMCxlKSxiPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSxiPT09NDQ/KHI9ITAsYj10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKSk6cj0hMX1RdCh0LCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIGZsb3cgY29sbGVjdGlvbiIpfWZ1bmN0aW9uIHBBZSh0LGUpe3ZhciByLG4saT1pRCxhPSExLHM9ITEsbD1lLHU9MCxoPSExLGYsZDtpZihkPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSxkPT09MTI0KW49ITE7ZWxzZSBpZihkPT09NjIpbj0hMDtlbHNlIHJldHVybiExO2Zvcih0LmtpbmQ9InNjYWxhciIsdC5yZXN1bHQ9IiI7ZCE9PTA7KWlmKGQ9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbiksZD09PTQzfHxkPT09NDUpaUQ9PT1pP2k9ZD09PTQzP0tYOnRBZTpRdCh0LCJyZXBlYXQgb2YgYSBjaG9tcGluZyBtb2RlIGlkZW50aWZpZXIiKTtlbHNlIGlmKChmPW9BZShkKSk+PTApZj09PTA/UXQodCwiYmFkIGV4cGxpY2l0IGluZGVudGF0aW9uIHdpZHRoIG9mIGEgYmxvY2sgc2NhbGFyOyBpdCBjYW5ub3QgYmUgbGVzcyB0aGFuIG9uZSIpOnM/UXQodCwicmVwZWF0IG9mIGFuIGluZGVudGF0aW9uIHdpZHRoIGlkZW50aWZpZXIiKToobD1lK2YtMSxzPSEwKTtlbHNlIGJyZWFrO2lmKE5kKGQpKXtkbyBkPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pO3doaWxlKE5kKGQpKTtpZihkPT09MzUpZG8gZD10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKTt3aGlsZSghZGMoZCkmJmQhPT0wKX1mb3IoO2QhPT0wOyl7Zm9yKGhEKHQpLHQubGluZUluZGVudD0wLGQ9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pOyghc3x8dC5saW5lSW5kZW50PGwpJiZkPT09MzI7KXQubGluZUluZGVudCsrLGQ9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbik7aWYoIXMmJnQubGluZUluZGVudD5sJiYobD10LmxpbmVJbmRlbnQpLGRjKGQpKXt1Kys7Y29udGludWV9aWYodC5saW5lSW5kZW50PGwpe2k9PT1LWD90LnJlc3VsdCs9JGkucmVwZWF0KGAKYCxhPzErdTp1KTppPT09aUQmJmEmJih0LnJlc3VsdCs9YApgKTticmVha31mb3Iobj9OZChkKT8oaD0hMCx0LnJlc3VsdCs9JGkucmVwZWF0KGAKYCxhPzErdTp1KSk6aD8oaD0hMSx0LnJlc3VsdCs9JGkucmVwZWF0KGAKYCx1KzEpKTp1PT09MD9hJiYodC5yZXN1bHQrPSIgIik6dC5yZXN1bHQrPSRpLnJlcGVhdChgCmAsdSk6dC5yZXN1bHQrPSRpLnJlcGVhdChgCmAsYT8xK3U6dSksYT0hMCxzPSEwLHU9MCxyPXQucG9zaXRpb247IWRjKGQpJiZkIT09MDspZD10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKTt6aCh0LHIsdC5wb3NpdGlvbiwhMSl9cmV0dXJuITB9ZnVuY3Rpb24gdGoodCxlKXt2YXIgcixuPXQudGFnLGk9dC5hbmNob3IsYT1bXSxzLGw9ITEsdTtpZih0LmZpcnN0VGFiSW5MaW5lIT09LTEpcmV0dXJuITE7Zm9yKHQuYW5jaG9yIT09bnVsbCYmKHQuYW5jaG9yTWFwW3QuYW5jaG9yXT1hKSx1PXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKTt1IT09MCYmKHQuZmlyc3RUYWJJbkxpbmUhPT0tMSYmKHQucG9zaXRpb249dC5maXJzdFRhYkluTGluZSxRdCh0LCJ0YWIgY2hhcmFjdGVycyBtdXN0IG5vdCBiZSB1c2VkIGluIGluZGVudGF0aW9uIikpLCEodSE9PTQ1fHwocz10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbisxKSwhTHMocykpKSk7KXtpZihsPSEwLHQucG9zaXRpb24rKyxDaSh0LCEwLC0xKSYmdC5saW5lSW5kZW50PD1lKXthLnB1c2gobnVsbCksdT10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbik7Y29udGludWV9aWYocj10LmxpbmUsb20odCxlLHlqLCExLCEwKSxhLnB1c2godC5yZXN1bHQpLENpKHQsITAsLTEpLHU9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pLCh0LmxpbmU9PT1yfHx0LmxpbmVJbmRlbnQ+ZSkmJnUhPT0wKVF0KHQsImJhZCBpbmRlbnRhdGlvbiBvZiBhIHNlcXVlbmNlIGVudHJ5Iik7ZWxzZSBpZih0LmxpbmVJbmRlbnQ8ZSlicmVha31yZXR1cm4gbD8odC50YWc9bix0LmFuY2hvcj1pLHQua2luZD0ic2VxdWVuY2UiLHQucmVzdWx0PWEsITApOiExfWZ1bmN0aW9uIG1BZSh0LGUscil7dmFyIG4saSxhLHMsbCx1LGg9dC50YWcsZj10LmFuY2hvcixkPXt9LHA9T2JqZWN0LmNyZWF0ZShudWxsKSxtPW51bGwsZz1udWxsLHk9bnVsbCx2PSExLHg9ITEsYjtpZih0LmZpcnN0VGFiSW5MaW5lIT09LTEpcmV0dXJuITE7Zm9yKHQuYW5jaG9yIT09bnVsbCYmKHQuYW5jaG9yTWFwW3QuYW5jaG9yXT1kKSxiPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKTtiIT09MDspe2lmKCF2JiZ0LmZpcnN0VGFiSW5MaW5lIT09LTEmJih0LnBvc2l0aW9uPXQuZmlyc3RUYWJJbkxpbmUsUXQodCwidGFiIGNoYXJhY3RlcnMgbXVzdCBub3QgYmUgdXNlZCBpbiBpbmRlbnRhdGlvbiIpKSxuPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKzEpLGE9dC5saW5lLChiPT09NjN8fGI9PT01OCkmJkxzKG4pKWI9PT02Mz8odiYmKHNtKHQsZCxwLG0sZyxudWxsLHMsbCx1KSxtPWc9eT1udWxsKSx4PSEwLHY9ITAsaT0hMCk6dj8odj0hMSxpPSEwKTpRdCh0LCJpbmNvbXBsZXRlIGV4cGxpY2l0IG1hcHBpbmcgcGFpcjsgYSBrZXkgbm9kZSBpcyBtaXNzZWQ7IG9yIGZvbGxvd2VkIGJ5IGEgbm9uLXRhYnVsYXRlZCBlbXB0eSBsaW5lIiksdC5wb3NpdGlvbis9MSxiPW47ZWxzZXtpZihzPXQubGluZSxsPXQubGluZVN0YXJ0LHU9dC5wb3NpdGlvbiwhb20odCxyLGdqLCExLCEwKSlicmVhaztpZih0LmxpbmU9PT1hKXtmb3IoYj10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbik7TmQoYik7KWI9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbik7aWYoYj09PTU4KWI9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbiksTHMoYil8fFF0KHQsImEgd2hpdGVzcGFjZSBjaGFyYWN0ZXIgaXMgZXhwZWN0ZWQgYWZ0ZXIgdGhlIGtleS12YWx1ZSBzZXBhcmF0b3Igd2l0aGluIGEgYmxvY2sgbWFwcGluZyIpLHYmJihzbSh0LGQscCxtLGcsbnVsbCxzLGwsdSksbT1nPXk9bnVsbCkseD0hMCx2PSExLGk9ITEsbT10LnRhZyxnPXQucmVzdWx0O2Vsc2UgaWYoeClRdCh0LCJjYW4gbm90IHJlYWQgYW4gaW1wbGljaXQgbWFwcGluZyBwYWlyOyBhIGNvbG9uIGlzIG1pc3NlZCIpO2Vsc2UgcmV0dXJuIHQudGFnPWgsdC5hbmNob3I9ZiwhMH1lbHNlIGlmKHgpUXQodCwiY2FuIG5vdCByZWFkIGEgYmxvY2sgbWFwcGluZyBlbnRyeTsgYSBtdWx0aWxpbmUga2V5IG1heSBub3QgYmUgYW4gaW1wbGljaXQga2V5Iik7ZWxzZSByZXR1cm4gdC50YWc9aCx0LmFuY2hvcj1mLCEwfWlmKCh0LmxpbmU9PT1hfHx0LmxpbmVJbmRlbnQ+ZSkmJih2JiYocz10LmxpbmUsbD10LmxpbmVTdGFydCx1PXQucG9zaXRpb24pLG9tKHQsZSx4dywhMCxpKSYmKHY/Zz10LnJlc3VsdDp5PXQucmVzdWx0KSx2fHwoc20odCxkLHAsbSxnLHkscyxsLHUpLG09Zz15PW51bGwpLENpKHQsITAsLTEpLGI9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pKSwodC5saW5lPT09YXx8dC5saW5lSW5kZW50PmUpJiZiIT09MClRdCh0LCJiYWQgaW5kZW50YXRpb24gb2YgYSBtYXBwaW5nIGVudHJ5Iik7ZWxzZSBpZih0LmxpbmVJbmRlbnQ8ZSlicmVha31yZXR1cm4gdiYmc20odCxkLHAsbSxnLG51bGwscyxsLHUpLHgmJih0LnRhZz1oLHQuYW5jaG9yPWYsdC5raW5kPSJtYXBwaW5nIix0LnJlc3VsdD1kKSx4fWZ1bmN0aW9uIGdBZSh0KXt2YXIgZSxyPSExLG49ITEsaSxhLHM7aWYocz10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbikscyE9PTMzKXJldHVybiExO2lmKHQudGFnIT09bnVsbCYmUXQodCwiZHVwbGljYXRpb24gb2YgYSB0YWcgcHJvcGVydHkiKSxzPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pLHM9PT02MD8ocj0hMCxzPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pKTpzPT09MzM/KG49ITAsaT0iISEiLHM9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbikpOmk9IiEiLGU9dC5wb3NpdGlvbixyKXtkbyBzPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pO3doaWxlKHMhPT0wJiZzIT09NjIpO3QucG9zaXRpb248dC5sZW5ndGg/KGE9dC5pbnB1dC5zbGljZShlLHQucG9zaXRpb24pLHM9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbikpOlF0KHQsInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgdmVyYmF0aW0gdGFnIil9ZWxzZXtmb3IoO3MhPT0wJiYhTHMocyk7KXM9PT0zMyYmKG4/UXQodCwidGFnIHN1ZmZpeCBjYW5ub3QgY29udGFpbiBleGNsYW1hdGlvbiBtYXJrcyIpOihpPXQuaW5wdXQuc2xpY2UoZS0xLHQucG9zaXRpb24rMSksdmoudGVzdChpKXx8UXQodCwibmFtZWQgdGFnIGhhbmRsZSBjYW5ub3QgY29udGFpbiBzdWNoIGNoYXJhY3RlcnMiKSxuPSEwLGU9dC5wb3NpdGlvbisxKSkscz10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKTthPXQuaW5wdXQuc2xpY2UoZSx0LnBvc2l0aW9uKSxpQWUudGVzdChhKSYmUXQodCwidGFnIHN1ZmZpeCBjYW5ub3QgY29udGFpbiBmbG93IGluZGljYXRvciBjaGFyYWN0ZXJzIil9YSYmIXhqLnRlc3QoYSkmJlF0KHQsInRhZyBuYW1lIGNhbm5vdCBjb250YWluIHN1Y2ggY2hhcmFjdGVyczogIithKTt0cnl7YT1kZWNvZGVVUklDb21wb25lbnQoYSl9Y2F0Y2h7UXQodCwidGFnIG5hbWUgaXMgbWFsZm9ybWVkOiAiK2EpfXJldHVybiByP3QudGFnPWE6R2guY2FsbCh0LnRhZ01hcCxpKT90LnRhZz10LnRhZ01hcFtpXSthOmk9PT0iISI/dC50YWc9IiEiK2E6aT09PSIhISI/dC50YWc9InRhZzp5YW1sLm9yZywyMDAyOiIrYTpRdCh0LCd1bmRlY2xhcmVkIHRhZyBoYW5kbGUgIicraSsnIicpLCEwfWZ1bmN0aW9uIHlBZSh0KXt2YXIgZSxyO2lmKHI9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pLHIhPT0zOClyZXR1cm4hMTtmb3IodC5hbmNob3IhPT1udWxsJiZRdCh0LCJkdXBsaWNhdGlvbiBvZiBhbiBhbmNob3IgcHJvcGVydHkiKSxyPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pLGU9dC5wb3NpdGlvbjtyIT09MCYmIUxzKHIpJiYhYW0ocik7KXI9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbik7cmV0dXJuIHQucG9zaXRpb249PT1lJiZRdCh0LCJuYW1lIG9mIGFuIGFuY2hvciBub2RlIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyIiksdC5hbmNob3I9dC5pbnB1dC5zbGljZShlLHQucG9zaXRpb24pLCEwfWZ1bmN0aW9uIHZBZSh0KXt2YXIgZSxyLG47aWYobj10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbiksbiE9PTQyKXJldHVybiExO2ZvcihuPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pLGU9dC5wb3NpdGlvbjtuIT09MCYmIUxzKG4pJiYhYW0obik7KW49dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbik7cmV0dXJuIHQucG9zaXRpb249PT1lJiZRdCh0LCJuYW1lIG9mIGFuIGFsaWFzIG5vZGUgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIiKSxyPXQuaW5wdXQuc2xpY2UoZSx0LnBvc2l0aW9uKSxHaC5jYWxsKHQuYW5jaG9yTWFwLHIpfHxRdCh0LCd1bmlkZW50aWZpZWQgYWxpYXMgIicrcisnIicpLHQucmVzdWx0PXQuYW5jaG9yTWFwW3JdLENpKHQsITAsLTEpLCEwfWZ1bmN0aW9uIG9tKHQsZSxyLG4saSl7dmFyIGEscyxsLHU9MSxoPSExLGY9ITEsZCxwLG0sZyx5LHY7aWYodC5saXN0ZW5lciE9PW51bGwmJnQubGlzdGVuZXIoIm9wZW4iLHQpLHQudGFnPW51bGwsdC5hbmNob3I9bnVsbCx0LmtpbmQ9bnVsbCx0LnJlc3VsdD1udWxsLGE9cz1sPXh3PT09cnx8eWo9PT1yLG4mJkNpKHQsITAsLTEpJiYoaD0hMCx0LmxpbmVJbmRlbnQ+ZT91PTE6dC5saW5lSW5kZW50PT09ZT91PTA6dC5saW5lSW5kZW50PGUmJih1PS0xKSksdT09PTEpZm9yKDtnQWUodCl8fHlBZSh0KTspQ2kodCwhMCwtMSk/KGg9ITAsbD1hLHQubGluZUluZGVudD5lP3U9MTp0LmxpbmVJbmRlbnQ9PT1lP3U9MDp0LmxpbmVJbmRlbnQ8ZSYmKHU9LTEpKTpsPSExO2lmKGwmJihsPWh8fGkpLCh1PT09MXx8eHc9PT1yKSYmKHZ3PT09cnx8Z2o9PT1yP3k9ZTp5PWUrMSx2PXQucG9zaXRpb24tdC5saW5lU3RhcnQsdT09PTE/bCYmKHRqKHQsdil8fG1BZSh0LHYseSkpfHxkQWUodCx5KT9mPSEwOihzJiZwQWUodCx5KXx8aEFlKHQseSl8fGZBZSh0LHkpP2Y9ITA6dkFlKHQpPyhmPSEwLCh0LnRhZyE9PW51bGx8fHQuYW5jaG9yIT09bnVsbCkmJlF0KHQsImFsaWFzIG5vZGUgc2hvdWxkIG5vdCBoYXZlIGFueSBwcm9wZXJ0aWVzIikpOnVBZSh0LHksdnc9PT1yKSYmKGY9ITAsdC50YWc9PT1udWxsJiYodC50YWc9Ij8iKSksdC5hbmNob3IhPT1udWxsJiYodC5hbmNob3JNYXBbdC5hbmNob3JdPXQucmVzdWx0KSk6dT09PTAmJihmPWwmJnRqKHQsdikpKSx0LnRhZz09PW51bGwpdC5hbmNob3IhPT1udWxsJiYodC5hbmNob3JNYXBbdC5hbmNob3JdPXQucmVzdWx0KTtlbHNlIGlmKHQudGFnPT09Ij8iKXtmb3IodC5yZXN1bHQhPT1udWxsJiZ0LmtpbmQhPT0ic2NhbGFyIiYmUXQodCwndW5hY2NlcHRhYmxlIG5vZGUga2luZCBmb3IgITw/PiB0YWc7IGl0IHNob3VsZCBiZSAic2NhbGFyIiwgbm90ICInK3Qua2luZCsnIicpLGQ9MCxwPXQuaW1wbGljaXRUeXBlcy5sZW5ndGg7ZDxwO2QrPTEpaWYoZz10LmltcGxpY2l0VHlwZXNbZF0sZy5yZXNvbHZlKHQucmVzdWx0KSl7dC5yZXN1bHQ9Zy5jb25zdHJ1Y3QodC5yZXN1bHQpLHQudGFnPWcudGFnLHQuYW5jaG9yIT09bnVsbCYmKHQuYW5jaG9yTWFwW3QuYW5jaG9yXT10LnJlc3VsdCk7YnJlYWt9fWVsc2UgaWYodC50YWchPT0iISIpe2lmKEdoLmNhbGwodC50eXBlTWFwW3Qua2luZHx8ImZhbGxiYWNrIl0sdC50YWcpKWc9dC50eXBlTWFwW3Qua2luZHx8ImZhbGxiYWNrIl1bdC50YWddO2Vsc2UgZm9yKGc9bnVsbCxtPXQudHlwZU1hcC5tdWx0aVt0LmtpbmR8fCJmYWxsYmFjayJdLGQ9MCxwPW0ubGVuZ3RoO2Q8cDtkKz0xKWlmKHQudGFnLnNsaWNlKDAsbVtkXS50YWcubGVuZ3RoKT09PW1bZF0udGFnKXtnPW1bZF07YnJlYWt9Z3x8UXQodCwidW5rbm93biB0YWcgITwiK3QudGFnKyI+IiksdC5yZXN1bHQhPT1udWxsJiZnLmtpbmQhPT10LmtpbmQmJlF0KHQsInVuYWNjZXB0YWJsZSBub2RlIGtpbmQgZm9yICE8Iit0LnRhZysnPiB0YWc7IGl0IHNob3VsZCBiZSAiJytnLmtpbmQrJyIsIG5vdCAiJyt0LmtpbmQrJyInKSxnLnJlc29sdmUodC5yZXN1bHQsdC50YWcpPyh0LnJlc3VsdD1nLmNvbnN0cnVjdCh0LnJlc3VsdCx0LnRhZyksdC5hbmNob3IhPT1udWxsJiYodC5hbmNob3JNYXBbdC5hbmNob3JdPXQucmVzdWx0KSk6UXQodCwiY2Fubm90IHJlc29sdmUgYSBub2RlIHdpdGggITwiK3QudGFnKyI+IGV4cGxpY2l0IHRhZyIpfXJldHVybiB0Lmxpc3RlbmVyIT09bnVsbCYmdC5saXN0ZW5lcigiY2xvc2UiLHQpLHQudGFnIT09bnVsbHx8dC5hbmNob3IhPT1udWxsfHxmfWZ1bmN0aW9uIHhBZSh0KXt2YXIgZT10LnBvc2l0aW9uLHIsbixpLGE9ITEscztmb3IodC52ZXJzaW9uPW51bGwsdC5jaGVja0xpbmVCcmVha3M9dC5sZWdhY3ksdC50YWdNYXA9T2JqZWN0LmNyZWF0ZShudWxsKSx0LmFuY2hvck1hcD1PYmplY3QuY3JlYXRlKG51bGwpOyhzPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSkhPT0wJiYoQ2kodCwhMCwtMSkscz10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbiksISh0LmxpbmVJbmRlbnQ+MHx8cyE9PTM3KSk7KXtmb3IoYT0hMCxzPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pLHI9dC5wb3NpdGlvbjtzIT09MCYmIUxzKHMpOylzPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pO2ZvcihuPXQuaW5wdXQuc2xpY2Uocix0LnBvc2l0aW9uKSxpPVtdLG4ubGVuZ3RoPDEmJlF0KHQsImRpcmVjdGl2ZSBuYW1lIG11c3Qgbm90IGJlIGxlc3MgdGhhbiBvbmUgY2hhcmFjdGVyIGluIGxlbmd0aCIpO3MhPT0wOyl7Zm9yKDtOZChzKTspcz10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKTtpZihzPT09MzUpe2RvIHM9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbik7d2hpbGUocyE9PTAmJiFkYyhzKSk7YnJlYWt9aWYoZGMocykpYnJlYWs7Zm9yKHI9dC5wb3NpdGlvbjtzIT09MCYmIUxzKHMpOylzPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pO2kucHVzaCh0LmlucHV0LnNsaWNlKHIsdC5wb3NpdGlvbikpfXMhPT0wJiZoRCh0KSxHaC5jYWxsKEpYLG4pP0pYW25dKHQsbixpKTpidyh0LCd1bmtub3duIGRvY3VtZW50IGRpcmVjdGl2ZSAiJytuKyciJyl9aWYoQ2kodCwhMCwtMSksdC5saW5lSW5kZW50PT09MCYmdC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pPT09NDUmJnQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKzEpPT09NDUmJnQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKzIpPT09NDU/KHQucG9zaXRpb24rPTMsQ2kodCwhMCwtMSkpOmEmJlF0KHQsImRpcmVjdGl2ZXMgZW5kIG1hcmsgaXMgZXhwZWN0ZWQiKSxvbSh0LHQubGluZUluZGVudC0xLHh3LCExLCEwKSxDaSh0LCEwLC0xKSx0LmNoZWNrTGluZUJyZWFrcyYmbkFlLnRlc3QodC5pbnB1dC5zbGljZShlLHQucG9zaXRpb24pKSYmYncodCwibm9uLUFTQ0lJIGxpbmUgYnJlYWtzIGFyZSBpbnRlcnByZXRlZCBhcyBjb250ZW50IiksdC5kb2N1bWVudHMucHVzaCh0LnJlc3VsdCksdC5wb3NpdGlvbj09PXQubGluZVN0YXJ0JiZrdyh0KSl7dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pPT09NDYmJih0LnBvc2l0aW9uKz0zLENpKHQsITAsLTEpKTtyZXR1cm59aWYodC5wb3NpdGlvbjx0Lmxlbmd0aC0xKVF0KHQsImVuZCBvZiB0aGUgc3RyZWFtIG9yIGEgZG9jdW1lbnQgc2VwYXJhdG9yIGlzIGV4cGVjdGVkIik7ZWxzZSByZXR1cm59ZnVuY3Rpb24ga2oodCxlKXt0PVN0cmluZyh0KSxlPWV8fHt9LHQubGVuZ3RoIT09MCYmKHQuY2hhckNvZGVBdCh0Lmxlbmd0aC0xKSE9PTEwJiZ0LmNoYXJDb2RlQXQodC5sZW5ndGgtMSkhPT0xMyYmKHQrPWAKYCksdC5jaGFyQ29kZUF0KDApPT09NjUyNzkmJih0PXQuc2xpY2UoMSkpKTt2YXIgcj1uZXcgY0FlKHQsZSksbj10LmluZGV4T2YoIlwwIik7Zm9yKG4hPT0tMSYmKHIucG9zaXRpb249bixRdChyLCJudWxsIGJ5dGUgaXMgbm90IGFsbG93ZWQgaW4gaW5wdXQiKSksci5pbnB1dCs9IlwwIjtyLmlucHV0LmNoYXJDb2RlQXQoci5wb3NpdGlvbik9PT0zMjspci5saW5lSW5kZW50Kz0xLHIucG9zaXRpb24rPTE7Zm9yKDtyLnBvc2l0aW9uPHIubGVuZ3RoLTE7KXhBZShyKTtyZXR1cm4gci5kb2N1bWVudHN9ZnVuY3Rpb24gYkFlKHQsZSxyKXtlIT09bnVsbCYmdHlwZW9mIGU9PSJvYmplY3QiJiZ0eXBlb2Ygcj4idSImJihyPWUsZT1udWxsKTt2YXIgbj1raih0LHIpO2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXJldHVybiBuO2Zvcih2YXIgaT0wLGE9bi5sZW5ndGg7aTxhO2krPTEpZShuW2ldKX1mdW5jdGlvbiB3QWUodCxlKXt2YXIgcj1raih0LGUpO2lmKHIubGVuZ3RoIT09MCl7aWYoci5sZW5ndGg9PT0xKXJldHVybiByWzBdO3Rocm93IG5ldyBEcygiZXhwZWN0ZWQgYSBzaW5nbGUgZG9jdW1lbnQgaW4gdGhlIHN0cmVhbSwgYnV0IGZvdW5kIG1vcmUiKX19ZnVuY3Rpb24gVkFlKHQsZSl7dmFyIHIsbixpLGEscyxsLHU7aWYoZT09PW51bGwpcmV0dXJue307Zm9yKHI9e30sbj1PYmplY3Qua2V5cyhlKSxpPTAsYT1uLmxlbmd0aDtpPGE7aSs9MSlzPW5baV0sbD1TdHJpbmcoZVtzXSkscy5zbGljZSgwLDIpPT09IiEhIiYmKHM9InRhZzp5YW1sLm9yZywyMDAyOiIrcy5zbGljZSgyKSksdT10LmNvbXBpbGVkVHlwZU1hcC5mYWxsYmFja1tzXSx1JiZDai5jYWxsKHUuc3R5bGVBbGlhc2VzLGwpJiYobD11LnN0eWxlQWxpYXNlc1tsXSkscltzXT1sO3JldHVybiByfWZ1bmN0aW9uIFVBZSh0KXt2YXIgZSxyLG47aWYoZT10LnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLHQ8PTI1NSlyPSJ4IixuPTI7ZWxzZSBpZih0PD02NTUzNSlyPSJ1IixuPTQ7ZWxzZSBpZih0PD00Mjk0OTY3Mjk1KXI9IlUiLG49ODtlbHNlIHRocm93IG5ldyBEcygiY29kZSBwb2ludCB3aXRoaW4gYSBzdHJpbmcgbWF5IG5vdCBiZSBncmVhdGVyIHRoYW4gMHhGRkZGRkZGRiIpO3JldHVybiJcXCIrciskaS5yZXBlYXQoIjAiLG4tZS5sZW5ndGgpK2V9ZnVuY3Rpb24gV0FlKHQpe3RoaXMuc2NoZW1hPXQuc2NoZW1hfHxtaix0aGlzLmluZGVudD1NYXRoLm1heCgxLHQuaW5kZW50fHwyKSx0aGlzLm5vQXJyYXlJbmRlbnQ9dC5ub0FycmF5SW5kZW50fHwhMSx0aGlzLnNraXBJbnZhbGlkPXQuc2tpcEludmFsaWR8fCExLHRoaXMuZmxvd0xldmVsPSRpLmlzTm90aGluZyh0LmZsb3dMZXZlbCk/LTE6dC5mbG93TGV2ZWwsdGhpcy5zdHlsZU1hcD1WQWUodGhpcy5zY2hlbWEsdC5zdHlsZXN8fG51bGwpLHRoaXMuc29ydEtleXM9dC5zb3J0S2V5c3x8ITEsdGhpcy5saW5lV2lkdGg9dC5saW5lV2lkdGh8fDgwLHRoaXMubm9SZWZzPXQubm9SZWZzfHwhMSx0aGlzLm5vQ29tcGF0TW9kZT10Lm5vQ29tcGF0TW9kZXx8ITEsdGhpcy5jb25kZW5zZUZsb3c9dC5jb25kZW5zZUZsb3d8fCExLHRoaXMucXVvdGluZ1R5cGU9dC5xdW90aW5nVHlwZT09PSciJz9jMjpIQWUsdGhpcy5mb3JjZVF1b3Rlcz10LmZvcmNlUXVvdGVzfHwhMSx0aGlzLnJlcGxhY2VyPXR5cGVvZiB0LnJlcGxhY2VyPT0iZnVuY3Rpb24iP3QucmVwbGFjZXI6bnVsbCx0aGlzLmltcGxpY2l0VHlwZXM9dGhpcy5zY2hlbWEuY29tcGlsZWRJbXBsaWNpdCx0aGlzLmV4cGxpY2l0VHlwZXM9dGhpcy5zY2hlbWEuY29tcGlsZWRFeHBsaWNpdCx0aGlzLnRhZz1udWxsLHRoaXMucmVzdWx0PSIiLHRoaXMuZHVwbGljYXRlcz1bXSx0aGlzLnVzZWREdXBsaWNhdGVzPW51bGx9ZnVuY3Rpb24gcmoodCxlKXtmb3IodmFyIHI9JGkucmVwZWF0KCIgIixlKSxuPTAsaT0tMSxhPSIiLHMsbD10Lmxlbmd0aDtuPGw7KWk9dC5pbmRleE9mKGAKYCxuKSxpPT09LTE/KHM9dC5zbGljZShuKSxuPWwpOihzPXQuc2xpY2UobixpKzEpLG49aSsxKSxzLmxlbmd0aCYmcyE9PWAKYCYmKGErPXIpLGErPXM7cmV0dXJuIGF9ZnVuY3Rpb24gb0QodCxlKXtyZXR1cm5gCmArJGkucmVwZWF0KCIgIix0LmluZGVudCplKX1mdW5jdGlvbiBxQWUodCxlKXt2YXIgcixuLGk7Zm9yKHI9MCxuPXQuaW1wbGljaXRUeXBlcy5sZW5ndGg7cjxuO3IrPTEpaWYoaT10LmltcGxpY2l0VHlwZXNbcl0saS5yZXNvbHZlKGUpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFR3KHQpe3JldHVybiB0PT09Q0FlfHx0PT09RUFlfWZ1bmN0aW9uIHUyKHQpe3JldHVybiAzMjw9dCYmdDw9MTI2fHwxNjE8PXQmJnQ8PTU1Mjk1JiZ0IT09ODIzMiYmdCE9PTgyMzN8fDU3MzQ0PD10JiZ0PD02NTUzMyYmdCE9PWREfHw2NTUzNjw9dCYmdDw9MTExNDExMX1mdW5jdGlvbiBuaih0KXtyZXR1cm4gdTIodCkmJnQhPT1kRCYmdCE9PVNBZSYmdCE9PWwyfWZ1bmN0aW9uIGlqKHQsZSxyKXt2YXIgbj1uaih0KSxpPW4mJiFUdyh0KTtyZXR1cm4ocj9uOm4mJnQhPT1BaiYmdCE9PV9qJiZ0IT09RGomJnQhPT1MaiYmdCE9PVJqKSYmdCE9PXNEJiYhKGU9PT13dyYmIWkpfHxuaihlKSYmIVR3KGUpJiZ0PT09c0R8fGU9PT13dyYmaX1mdW5jdGlvbiBZQWUodCl7cmV0dXJuIHUyKHQpJiZ0IT09ZEQmJiFUdyh0KSYmdCE9PU1BZSYmdCE9PVBBZSYmdCE9PXd3JiZ0IT09QWomJnQhPT1faiYmdCE9PURqJiZ0IT09TGomJnQhPT1SaiYmdCE9PXNEJiZ0IT09TEFlJiZ0IT09TkFlJiZ0IT09QUFlJiZ0IT09JEFlJiZ0IT09SUFlJiZ0IT09T0FlJiZ0IT09UkFlJiZ0IT09X0FlJiZ0IT09REFlJiZ0IT09QkFlJiZ0IT09RkFlfWZ1bmN0aW9uIFhBZSh0KXtyZXR1cm4hVHcodCkmJnQhPT13d31mdW5jdGlvbiBzMih0LGUpe3ZhciByPXQuY2hhckNvZGVBdChlKSxuO3JldHVybiByPj01NTI5NiYmcjw9NTYzMTkmJmUrMTx0Lmxlbmd0aCYmKG49dC5jaGFyQ29kZUF0KGUrMSksbj49NTYzMjAmJm48PTU3MzQzKT8oci01NTI5NikqMTAyNCtuLTU2MzIwKzY1NTM2OnJ9ZnVuY3Rpb24gTmoodCl7dmFyIGU9L15cbiogLztyZXR1cm4gZS50ZXN0KHQpfWZ1bmN0aW9uIGpBZSh0LGUscixuLGksYSxzLGwpe3ZhciB1LGg9MCxmPW51bGwsZD0hMSxwPSExLG09biE9PS0xLGc9LTEseT1ZQWUoczIodCwwKSkmJlhBZShzMih0LHQubGVuZ3RoLTEpKTtpZihlfHxzKWZvcih1PTA7dTx0Lmxlbmd0aDtoPj02NTUzNj91Kz0yOnUrKyl7aWYoaD1zMih0LHUpLCF1MihoKSlyZXR1cm4gaW07eT15JiZpaihoLGYsbCksZj1ofWVsc2V7Zm9yKHU9MDt1PHQubGVuZ3RoO2g+PTY1NTM2P3UrPTI6dSsrKXtpZihoPXMyKHQsdSksaD09PWwyKWQ9ITAsbSYmKHA9cHx8dS1nLTE+biYmdFtnKzFdIT09IiAiLGc9dSk7ZWxzZSBpZighdTIoaCkpcmV0dXJuIGltO3k9eSYmaWooaCxmLGwpLGY9aH1wPXB8fG0mJnUtZy0xPm4mJnRbZysxXSE9PSIgIn1yZXR1cm4hZCYmIXA/eSYmIXMmJiFpKHQpP01qOmE9PT1jMj9pbTpsRDpyPjkmJk5qKHQpP2ltOnM/YT09PWMyP2ltOmxEOnA/T2o6SWp9ZnVuY3Rpb24gS0FlKHQsZSxyLG4saSl7dC5kdW1wPWZ1bmN0aW9uKCl7aWYoZS5sZW5ndGg9PT0wKXJldHVybiB0LnF1b3RpbmdUeXBlPT09YzI/JyIiJzoiJyciO2lmKCF0Lm5vQ29tcGF0TW9kZSYmKHpBZS5pbmRleE9mKGUpIT09LTF8fEdBZS50ZXN0KGUpKSlyZXR1cm4gdC5xdW90aW5nVHlwZT09PWMyPyciJytlKyciJzoiJyIrZSsiJyI7dmFyIGE9dC5pbmRlbnQqTWF0aC5tYXgoMSxyKSxzPXQubGluZVdpZHRoPT09LTE/LTE6TWF0aC5tYXgoTWF0aC5taW4odC5saW5lV2lkdGgsNDApLHQubGluZVdpZHRoLWEpLGw9bnx8dC5mbG93TGV2ZWw+LTEmJnI+PXQuZmxvd0xldmVsO2Z1bmN0aW9uIHUoaCl7cmV0dXJuIHFBZSh0LGgpfXN3aXRjaChvKHUsInRlc3RBbWJpZ3VpdHkiKSxqQWUoZSxsLHQuaW5kZW50LHMsdSx0LnF1b3RpbmdUeXBlLHQuZm9yY2VRdW90ZXMmJiFuLGkpKXtjYXNlIE1qOnJldHVybiBlO2Nhc2UgbEQ6cmV0dXJuIiciK2UucmVwbGFjZSgvJy9nLCInJyIpKyInIjtjYXNlIElqOnJldHVybiJ8IithaihlLHQuaW5kZW50KStzaihyaihlLGEpKTtjYXNlIE9qOnJldHVybiI+IithaihlLHQuaW5kZW50KStzaihyaihRQWUoZSxzKSxhKSk7Y2FzZSBpbTpyZXR1cm4nIicrWkFlKGUpKyciJztkZWZhdWx0OnRocm93IG5ldyBEcygiaW1wb3NzaWJsZSBlcnJvcjogaW52YWxpZCBzY2FsYXIgc3R5bGUiKX19KCl9ZnVuY3Rpb24gYWoodCxlKXt2YXIgcj1Oaih0KT9TdHJpbmcoZSk6IiIsbj10W3QubGVuZ3RoLTFdPT09YApgLGk9biYmKHRbdC5sZW5ndGgtMl09PT1gCmB8fHQ9PT1gCmApLGE9aT8iKyI6bj8iIjoiLSI7cmV0dXJuIHIrYStgCmB9ZnVuY3Rpb24gc2oodCl7cmV0dXJuIHRbdC5sZW5ndGgtMV09PT1gCmA/dC5zbGljZSgwLC0xKTp0fWZ1bmN0aW9uIFFBZSh0LGUpe2Zvcih2YXIgcj0vKFxuKykoW15cbl0qKS9nLG49ZnVuY3Rpb24oKXt2YXIgaD10LmluZGV4T2YoYApgKTtyZXR1cm4gaD1oIT09LTE/aDp0Lmxlbmd0aCxyLmxhc3RJbmRleD1oLG9qKHQuc2xpY2UoMCxoKSxlKX0oKSxpPXRbMF09PT1gCmB8fHRbMF09PT0iICIsYSxzO3M9ci5leGVjKHQpOyl7dmFyIGw9c1sxXSx1PXNbMl07YT11WzBdPT09IiAiLG4rPWwrKCFpJiYhYSYmdSE9PSIiP2AKYDoiIikrb2oodSxlKSxpPWF9cmV0dXJuIG59ZnVuY3Rpb24gb2oodCxlKXtpZih0PT09IiJ8fHRbMF09PT0iICIpcmV0dXJuIHQ7Zm9yKHZhciByPS8gW14gXS9nLG4saT0wLGEscz0wLGw9MCx1PSIiO249ci5leGVjKHQpOylsPW4uaW5kZXgsbC1pPmUmJihhPXM+aT9zOmwsdSs9YApgK3Quc2xpY2UoaSxhKSxpPWErMSkscz1sO3JldHVybiB1Kz1gCmAsdC5sZW5ndGgtaT5lJiZzPmk/dSs9dC5zbGljZShpLHMpK2AKYCt0LnNsaWNlKHMrMSk6dSs9dC5zbGljZShpKSx1LnNsaWNlKDEpfWZ1bmN0aW9uIFpBZSh0KXtmb3IodmFyIGU9IiIscj0wLG4saT0wO2k8dC5sZW5ndGg7cj49NjU1MzY/aSs9MjppKyspcj1zMih0LGkpLG49RGFbcl0sIW4mJnUyKHIpPyhlKz10W2ldLHI+PTY1NTM2JiYoZSs9dFtpKzFdKSk6ZSs9bnx8VUFlKHIpO3JldHVybiBlfWZ1bmN0aW9uIEpBZSh0LGUscil7dmFyIG49IiIsaT10LnRhZyxhLHMsbDtmb3IoYT0wLHM9ci5sZW5ndGg7YTxzO2ErPTEpbD1yW2FdLHQucmVwbGFjZXImJihsPXQucmVwbGFjZXIuY2FsbChyLFN0cmluZyhhKSxsKSksKEF1KHQsZSxsLCExLCExKXx8dHlwZW9mIGw+InUiJiZBdSh0LGUsbnVsbCwhMSwhMSkpJiYobiE9PSIiJiYobis9IiwiKyh0LmNvbmRlbnNlRmxvdz8iIjoiICIpKSxuKz10LmR1bXApO3QudGFnPWksdC5kdW1wPSJbIituKyJdIn1mdW5jdGlvbiBsaih0LGUscixuKXt2YXIgaT0iIixhPXQudGFnLHMsbCx1O2ZvcihzPTAsbD1yLmxlbmd0aDtzPGw7cys9MSl1PXJbc10sdC5yZXBsYWNlciYmKHU9dC5yZXBsYWNlci5jYWxsKHIsU3RyaW5nKHMpLHUpKSwoQXUodCxlKzEsdSwhMCwhMCwhMSwhMCl8fHR5cGVvZiB1PiJ1IiYmQXUodCxlKzEsbnVsbCwhMCwhMCwhMSwhMCkpJiYoKCFufHxpIT09IiIpJiYoaSs9b0QodCxlKSksdC5kdW1wJiZsMj09PXQuZHVtcC5jaGFyQ29kZUF0KDApP2krPSItIjppKz0iLSAiLGkrPXQuZHVtcCk7dC50YWc9YSx0LmR1bXA9aXx8IltdIn1mdW5jdGlvbiBlOGUodCxlLHIpe3ZhciBuPSIiLGk9dC50YWcsYT1PYmplY3Qua2V5cyhyKSxzLGwsdSxoLGY7Zm9yKHM9MCxsPWEubGVuZ3RoO3M8bDtzKz0xKWY9IiIsbiE9PSIiJiYoZis9IiwgIiksdC5jb25kZW5zZUZsb3cmJihmKz0nIicpLHU9YVtzXSxoPXJbdV0sdC5yZXBsYWNlciYmKGg9dC5yZXBsYWNlci5jYWxsKHIsdSxoKSksQXUodCxlLHUsITEsITEpJiYodC5kdW1wLmxlbmd0aD4xMDI0JiYoZis9Ij8gIiksZis9dC5kdW1wKyh0LmNvbmRlbnNlRmxvdz8nIic6IiIpKyI6IisodC5jb25kZW5zZUZsb3c/IiI6IiAiKSxBdSh0LGUsaCwhMSwhMSkmJihmKz10LmR1bXAsbis9ZikpO3QudGFnPWksdC5kdW1wPSJ7IituKyJ9In1mdW5jdGlvbiB0OGUodCxlLHIsbil7dmFyIGk9IiIsYT10LnRhZyxzPU9iamVjdC5rZXlzKHIpLGwsdSxoLGYsZCxwO2lmKHQuc29ydEtleXM9PT0hMClzLnNvcnQoKTtlbHNlIGlmKHR5cGVvZiB0LnNvcnRLZXlzPT0iZnVuY3Rpb24iKXMuc29ydCh0LnNvcnRLZXlzKTtlbHNlIGlmKHQuc29ydEtleXMpdGhyb3cgbmV3IERzKCJzb3J0S2V5cyBtdXN0IGJlIGEgYm9vbGVhbiBvciBhIGZ1bmN0aW9uIik7Zm9yKGw9MCx1PXMubGVuZ3RoO2w8dTtsKz0xKXA9IiIsKCFufHxpIT09IiIpJiYocCs9b0QodCxlKSksaD1zW2xdLGY9cltoXSx0LnJlcGxhY2VyJiYoZj10LnJlcGxhY2VyLmNhbGwocixoLGYpKSxBdSh0LGUrMSxoLCEwLCEwLCEwKSYmKGQ9dC50YWchPT1udWxsJiZ0LnRhZyE9PSI/Inx8dC5kdW1wJiZ0LmR1bXAubGVuZ3RoPjEwMjQsZCYmKHQuZHVtcCYmbDI9PT10LmR1bXAuY2hhckNvZGVBdCgwKT9wKz0iPyI6cCs9Ij8gIikscCs9dC5kdW1wLGQmJihwKz1vRCh0LGUpKSxBdSh0LGUrMSxmLCEwLGQpJiYodC5kdW1wJiZsMj09PXQuZHVtcC5jaGFyQ29kZUF0KDApP3ArPSI6IjpwKz0iOiAiLHArPXQuZHVtcCxpKz1wKSk7dC50YWc9YSx0LmR1bXA9aXx8Int9In1mdW5jdGlvbiBjaih0LGUscil7dmFyIG4saSxhLHMsbCx1O2ZvcihpPXI/dC5leHBsaWNpdFR5cGVzOnQuaW1wbGljaXRUeXBlcyxhPTAscz1pLmxlbmd0aDthPHM7YSs9MSlpZihsPWlbYV0sKGwuaW5zdGFuY2VPZnx8bC5wcmVkaWNhdGUpJiYoIWwuaW5zdGFuY2VPZnx8dHlwZW9mIGU9PSJvYmplY3QiJiZlIGluc3RhbmNlb2YgbC5pbnN0YW5jZU9mKSYmKCFsLnByZWRpY2F0ZXx8bC5wcmVkaWNhdGUoZSkpKXtpZihyP2wubXVsdGkmJmwucmVwcmVzZW50TmFtZT90LnRhZz1sLnJlcHJlc2VudE5hbWUoZSk6dC50YWc9bC50YWc6dC50YWc9Ij8iLGwucmVwcmVzZW50KXtpZih1PXQuc3R5bGVNYXBbbC50YWddfHxsLmRlZmF1bHRTdHlsZSxTai5jYWxsKGwucmVwcmVzZW50KT09PSJbb2JqZWN0IEZ1bmN0aW9uXSIpbj1sLnJlcHJlc2VudChlLHUpO2Vsc2UgaWYoQ2ouY2FsbChsLnJlcHJlc2VudCx1KSluPWwucmVwcmVzZW50W3VdKGUsdSk7ZWxzZSB0aHJvdyBuZXcgRHMoIiE8IitsLnRhZysnPiB0YWcgcmVzb2x2ZXIgYWNjZXB0cyBub3QgIicrdSsnIiBzdHlsZScpO3QuZHVtcD1ufXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIEF1KHQsZSxyLG4saSxhLHMpe3QudGFnPW51bGwsdC5kdW1wPXIsY2oodCxyLCExKXx8Y2oodCxyLCEwKTt2YXIgbD1Tai5jYWxsKHQuZHVtcCksdT1uLGg7biYmKG49dC5mbG93TGV2ZWw8MHx8dC5mbG93TGV2ZWw+ZSk7dmFyIGY9bD09PSJbb2JqZWN0IE9iamVjdF0ifHxsPT09IltvYmplY3QgQXJyYXldIixkLHA7aWYoZiYmKGQ9dC5kdXBsaWNhdGVzLmluZGV4T2YocikscD1kIT09LTEpLCh0LnRhZyE9PW51bGwmJnQudGFnIT09Ij8ifHxwfHx0LmluZGVudCE9PTImJmU+MCkmJihpPSExKSxwJiZ0LnVzZWREdXBsaWNhdGVzW2RdKXQuZHVtcD0iKnJlZl8iK2Q7ZWxzZXtpZihmJiZwJiYhdC51c2VkRHVwbGljYXRlc1tkXSYmKHQudXNlZER1cGxpY2F0ZXNbZF09ITApLGw9PT0iW29iamVjdCBPYmplY3RdIiluJiZPYmplY3Qua2V5cyh0LmR1bXApLmxlbmd0aCE9PTA/KHQ4ZSh0LGUsdC5kdW1wLGkpLHAmJih0LmR1bXA9IiZyZWZfIitkK3QuZHVtcCkpOihlOGUodCxlLHQuZHVtcCkscCYmKHQuZHVtcD0iJnJlZl8iK2QrIiAiK3QuZHVtcCkpO2Vsc2UgaWYobD09PSJbb2JqZWN0IEFycmF5XSIpbiYmdC5kdW1wLmxlbmd0aCE9PTA/KHQubm9BcnJheUluZGVudCYmIXMmJmU+MD9saih0LGUtMSx0LmR1bXAsaSk6bGoodCxlLHQuZHVtcCxpKSxwJiYodC5kdW1wPSImcmVmXyIrZCt0LmR1bXApKTooSkFlKHQsZSx0LmR1bXApLHAmJih0LmR1bXA9IiZyZWZfIitkKyIgIit0LmR1bXApKTtlbHNlIGlmKGw9PT0iW29iamVjdCBTdHJpbmddIil0LnRhZyE9PSI/IiYmS0FlKHQsdC5kdW1wLGUsYSx1KTtlbHNle2lmKGw9PT0iW29iamVjdCBVbmRlZmluZWRdIilyZXR1cm4hMTtpZih0LnNraXBJbnZhbGlkKXJldHVybiExO3Rocm93IG5ldyBEcygidW5hY2NlcHRhYmxlIGtpbmQgb2YgYW4gb2JqZWN0IHRvIGR1bXAgIitsKX10LnRhZyE9PW51bGwmJnQudGFnIT09Ij8iJiYoaD1lbmNvZGVVUkkodC50YWdbMF09PT0iISI/dC50YWcuc2xpY2UoMSk6dC50YWcpLnJlcGxhY2UoLyEvZywiJTIxIiksdC50YWdbMF09PT0iISI/aD0iISIraDpoLnNsaWNlKDAsMTgpPT09InRhZzp5YW1sLm9yZywyMDAyOiI/aD0iISEiK2guc2xpY2UoMTgpOmg9IiE8IitoKyI+Iix0LmR1bXA9aCsiICIrdC5kdW1wKX1yZXR1cm4hMH1mdW5jdGlvbiByOGUodCxlKXt2YXIgcj1bXSxuPVtdLGksYTtmb3IoY0QodCxyLG4pLGk9MCxhPW4ubGVuZ3RoO2k8YTtpKz0xKWUuZHVwbGljYXRlcy5wdXNoKHJbbltpXV0pO2UudXNlZER1cGxpY2F0ZXM9bmV3IEFycmF5KGEpfWZ1bmN0aW9uIGNEKHQsZSxyKXt2YXIgbixpLGE7aWYodCE9PW51bGwmJnR5cGVvZiB0PT0ib2JqZWN0IilpZihpPWUuaW5kZXhPZih0KSxpIT09LTEpci5pbmRleE9mKGkpPT09LTEmJnIucHVzaChpKTtlbHNlIGlmKGUucHVzaCh0KSxBcnJheS5pc0FycmF5KHQpKWZvcihpPTAsYT10Lmxlbmd0aDtpPGE7aSs9MSljRCh0W2ldLGUscik7ZWxzZSBmb3Iobj1PYmplY3Qua2V5cyh0KSxpPTAsYT1uLmxlbmd0aDtpPGE7aSs9MSljRCh0W25baV1dLGUscil9ZnVuY3Rpb24gbjhlKHQsZSl7ZT1lfHx7fTt2YXIgcj1uZXcgV0FlKGUpO3Iubm9SZWZzfHxyOGUodCxyKTt2YXIgbj10O3JldHVybiByLnJlcGxhY2VyJiYobj1yLnJlcGxhY2VyLmNhbGwoeyIiOm59LCIiLG4pKSxBdShyLDAsbiwhMCwhMCk/ci5kdW1wK2AKYDoiIn1mdW5jdGlvbiBwRCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiRnVuY3Rpb24geWFtbC4iK3QrIiBpcyByZW1vdmVkIGluIGpzLXlhbWwgNC4gVXNlIHlhbWwuIitlKyIgaW5zdGVhZCwgd2hpY2ggaXMgbm93IHNhZmUgYnkgZGVmYXVsdC4iKX19dmFyIEhDZSxXQ2UscUNlLFlDZSxYQ2UsakNlLCRpLERzLFFDZSxaQ2UsSkNlLF9hLG43ZSxpN2UsYTdlLHM3ZSxvN2UsaDdlLG03ZSxUN2UsazdlLEM3ZSxEN2UsZmosTDdlLGRqLHBqLEk3ZSxQN2UsdUQsRzdlLFY3ZSxVN2UscTdlLFk3ZSxLN2UsUTdlLGVBZSxtaixHaCx2dyxnaix5aix4dyxpRCx0QWUsS1gsckFlLG5BZSxpQWUsdmoseGosYmosd2osUmQsSlgsVEFlLGtBZSxFaixTaixDaixkRCxFQWUsbDIsU0FlLENBZSxBQWUsX0FlLHNELERBZSxMQWUsUkFlLE5BZSxBaixNQWUsd3csSUFlLE9BZSxQQWUsQkFlLF9qLERqLEZBZSxMaiwkQWUsUmosRGEsekFlLEdBZSxIQWUsYzIsTWosbEQsSWosT2osaW0saThlLGE4ZSxsbSxjbSxva3QsbGt0LGNrdCx1a3QsaGt0LEV3PU4oKCk9PnsidXNlIHN0cmljdCI7byh1aiwiaXNOb3RoaW5nIik7bygkQ2UsImlzT2JqZWN0Iik7byh6Q2UsInRvQXJyYXkiKTtvKEdDZSwiZXh0ZW5kIik7byhWQ2UsInJlcGVhdCIpO28oVUNlLCJpc05lZ2F0aXZlWmVybyIpO0hDZT11aixXQ2U9JENlLHFDZT16Q2UsWUNlPVZDZSxYQ2U9VUNlLGpDZT1HQ2UsJGk9e2lzTm90aGluZzpIQ2UsaXNPYmplY3Q6V0NlLHRvQXJyYXk6cUNlLHJlcGVhdDpZQ2UsaXNOZWdhdGl2ZVplcm86WENlLGV4dGVuZDpqQ2V9O28oaGosImZvcm1hdEVycm9yIik7byhvMiwiWUFNTEV4Y2VwdGlvbiQxIik7bzIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtvMi5wcm90b3R5cGUuY29uc3RydWN0b3I9bzI7bzIucHJvdG90eXBlLnRvU3RyaW5nPW8oZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubmFtZSsiOiAiK2hqKHRoaXMsZSl9LCJ0b1N0cmluZyIpO0RzPW8yO28ockQsImdldExpbmUiKTtvKG5ELCJwYWRTdGFydCIpO28oS0NlLCJtYWtlU25pcHBldCIpO1FDZT1LQ2UsWkNlPVsia2luZCIsIm11bHRpIiwicmVzb2x2ZSIsImNvbnN0cnVjdCIsImluc3RhbmNlT2YiLCJwcmVkaWNhdGUiLCJyZXByZXNlbnQiLCJyZXByZXNlbnROYW1lIiwiZGVmYXVsdFN0eWxlIiwic3R5bGVBbGlhc2VzIl0sSkNlPVsic2NhbGFyIiwic2VxdWVuY2UiLCJtYXBwaW5nIl07byhlN2UsImNvbXBpbGVTdHlsZUFsaWFzZXMiKTtvKHQ3ZSwiVHlwZSQxIik7X2E9dDdlO28oalgsImNvbXBpbGVMaXN0Iik7byhyN2UsImNvbXBpbGVNYXAiKTtvKGFELCJTY2hlbWEkMSIpO2FELnByb3RvdHlwZS5leHRlbmQ9byhmdW5jdGlvbihlKXt2YXIgcj1bXSxuPVtdO2lmKGUgaW5zdGFuY2VvZiBfYSluLnB1c2goZSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGUpKW49bi5jb25jYXQoZSk7ZWxzZSBpZihlJiYoQXJyYXkuaXNBcnJheShlLmltcGxpY2l0KXx8QXJyYXkuaXNBcnJheShlLmV4cGxpY2l0KSkpZS5pbXBsaWNpdCYmKHI9ci5jb25jYXQoZS5pbXBsaWNpdCkpLGUuZXhwbGljaXQmJihuPW4uY29uY2F0KGUuZXhwbGljaXQpKTtlbHNlIHRocm93IG5ldyBEcygiU2NoZW1hLmV4dGVuZCBhcmd1bWVudCBzaG91bGQgYmUgYSBUeXBlLCBbIFR5cGUgXSwgb3IgYSBzY2hlbWEgZGVmaW5pdGlvbiAoeyBpbXBsaWNpdDogWy4uLl0sIGV4cGxpY2l0OiBbLi4uXSB9KSIpO3IuZm9yRWFjaChmdW5jdGlvbihhKXtpZighKGEgaW5zdGFuY2VvZiBfYSkpdGhyb3cgbmV3IERzKCJTcGVjaWZpZWQgbGlzdCBvZiBZQU1MIHR5cGVzIChvciBhIHNpbmdsZSBUeXBlIG9iamVjdCkgY29udGFpbnMgYSBub24tVHlwZSBvYmplY3QuIik7aWYoYS5sb2FkS2luZCYmYS5sb2FkS2luZCE9PSJzY2FsYXIiKXRocm93IG5ldyBEcygiVGhlcmUgaXMgYSBub24tc2NhbGFyIHR5cGUgaW4gdGhlIGltcGxpY2l0IGxpc3Qgb2YgYSBzY2hlbWEuIEltcGxpY2l0IHJlc29sdmluZyBvZiBzdWNoIHR5cGVzIGlzIG5vdCBzdXBwb3J0ZWQuIik7aWYoYS5tdWx0aSl0aHJvdyBuZXcgRHMoIlRoZXJlIGlzIGEgbXVsdGkgdHlwZSBpbiB0aGUgaW1wbGljaXQgbGlzdCBvZiBhIHNjaGVtYS4gTXVsdGkgdGFncyBjYW4gb25seSBiZSBsaXN0ZWQgYXMgZXhwbGljaXQuIil9KSxuLmZvckVhY2goZnVuY3Rpb24oYSl7aWYoIShhIGluc3RhbmNlb2YgX2EpKXRocm93IG5ldyBEcygiU3BlY2lmaWVkIGxpc3Qgb2YgWUFNTCB0eXBlcyAob3IgYSBzaW5nbGUgVHlwZSBvYmplY3QpIGNvbnRhaW5zIGEgbm9uLVR5cGUgb2JqZWN0LiIpfSk7dmFyIGk9T2JqZWN0LmNyZWF0ZShhRC5wcm90b3R5cGUpO3JldHVybiBpLmltcGxpY2l0PSh0aGlzLmltcGxpY2l0fHxbXSkuY29uY2F0KHIpLGkuZXhwbGljaXQ9KHRoaXMuZXhwbGljaXR8fFtdKS5jb25jYXQobiksaS5jb21waWxlZEltcGxpY2l0PWpYKGksImltcGxpY2l0IiksaS5jb21waWxlZEV4cGxpY2l0PWpYKGksImV4cGxpY2l0IiksaS5jb21waWxlZFR5cGVNYXA9cjdlKGkuY29tcGlsZWRJbXBsaWNpdCxpLmNvbXBpbGVkRXhwbGljaXQpLGl9LCJleHRlbmQiKTtuN2U9YUQsaTdlPW5ldyBfYSgidGFnOnlhbWwub3JnLDIwMDI6c3RyIix7a2luZDoic2NhbGFyIixjb25zdHJ1Y3Q6byhmdW5jdGlvbih0KXtyZXR1cm4gdCE9PW51bGw/dDoiIn0sImNvbnN0cnVjdCIpfSksYTdlPW5ldyBfYSgidGFnOnlhbWwub3JnLDIwMDI6c2VxIix7a2luZDoic2VxdWVuY2UiLGNvbnN0cnVjdDpvKGZ1bmN0aW9uKHQpe3JldHVybiB0IT09bnVsbD90OltdfSwiY29uc3RydWN0Iil9KSxzN2U9bmV3IF9hKCJ0YWc6eWFtbC5vcmcsMjAwMjptYXAiLHtraW5kOiJtYXBwaW5nIixjb25zdHJ1Y3Q6byhmdW5jdGlvbih0KXtyZXR1cm4gdCE9PW51bGw/dDp7fX0sImNvbnN0cnVjdCIpfSksbzdlPW5ldyBuN2Uoe2V4cGxpY2l0OltpN2UsYTdlLHM3ZV19KTtvKGw3ZSwicmVzb2x2ZVlhbWxOdWxsIik7byhjN2UsImNvbnN0cnVjdFlhbWxOdWxsIik7byh1N2UsImlzTnVsbCIpO2g3ZT1uZXcgX2EoInRhZzp5YW1sLm9yZywyMDAyOm51bGwiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6bDdlLGNvbnN0cnVjdDpjN2UscHJlZGljYXRlOnU3ZSxyZXByZXNlbnQ6e2Nhbm9uaWNhbDpvKGZ1bmN0aW9uKCl7cmV0dXJuIn4ifSwiY2Fub25pY2FsIiksbG93ZXJjYXNlOm8oZnVuY3Rpb24oKXtyZXR1cm4ibnVsbCJ9LCJsb3dlcmNhc2UiKSx1cHBlcmNhc2U6byhmdW5jdGlvbigpe3JldHVybiJOVUxMIn0sInVwcGVyY2FzZSIpLGNhbWVsY2FzZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIk51bGwifSwiY2FtZWxjYXNlIiksZW1wdHk6byhmdW5jdGlvbigpe3JldHVybiIifSwiZW1wdHkiKX0sZGVmYXVsdFN0eWxlOiJsb3dlcmNhc2UifSk7byhmN2UsInJlc29sdmVZYW1sQm9vbGVhbiIpO28oZDdlLCJjb25zdHJ1Y3RZYW1sQm9vbGVhbiIpO28ocDdlLCJpc0Jvb2xlYW4iKTttN2U9bmV3IF9hKCJ0YWc6eWFtbC5vcmcsMjAwMjpib29sIix7a2luZDoic2NhbGFyIixyZXNvbHZlOmY3ZSxjb25zdHJ1Y3Q6ZDdlLHByZWRpY2F0ZTpwN2UscmVwcmVzZW50Ontsb3dlcmNhc2U6byhmdW5jdGlvbih0KXtyZXR1cm4gdD8idHJ1ZSI6ImZhbHNlIn0sImxvd2VyY2FzZSIpLHVwcGVyY2FzZTpvKGZ1bmN0aW9uKHQpe3JldHVybiB0PyJUUlVFIjoiRkFMU0UifSwidXBwZXJjYXNlIiksY2FtZWxjYXNlOm8oZnVuY3Rpb24odCl7cmV0dXJuIHQ/IlRydWUiOiJGYWxzZSJ9LCJjYW1lbGNhc2UiKX0sZGVmYXVsdFN0eWxlOiJsb3dlcmNhc2UifSk7byhnN2UsImlzSGV4Q29kZSIpO28oeTdlLCJpc09jdENvZGUiKTtvKHY3ZSwiaXNEZWNDb2RlIik7byh4N2UsInJlc29sdmVZYW1sSW50ZWdlciIpO28oYjdlLCJjb25zdHJ1Y3RZYW1sSW50ZWdlciIpO28odzdlLCJpc0ludGVnZXIiKTtUN2U9bmV3IF9hKCJ0YWc6eWFtbC5vcmcsMjAwMjppbnQiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6eDdlLGNvbnN0cnVjdDpiN2UscHJlZGljYXRlOnc3ZSxyZXByZXNlbnQ6e2JpbmFyeTpvKGZ1bmN0aW9uKHQpe3JldHVybiB0Pj0wPyIwYiIrdC50b1N0cmluZygyKToiLTBiIit0LnRvU3RyaW5nKDIpLnNsaWNlKDEpfSwiYmluYXJ5Iiksb2N0YWw6byhmdW5jdGlvbih0KXtyZXR1cm4gdD49MD8iMG8iK3QudG9TdHJpbmcoOCk6Ii0wbyIrdC50b1N0cmluZyg4KS5zbGljZSgxKX0sIm9jdGFsIiksZGVjaW1hbDpvKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRvU3RyaW5nKDEwKX0sImRlY2ltYWwiKSxoZXhhZGVjaW1hbDpvKGZ1bmN0aW9uKHQpe3JldHVybiB0Pj0wPyIweCIrdC50b1N0cmluZygxNikudG9VcHBlckNhc2UoKToiLTB4Iit0LnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLnNsaWNlKDEpfSwiaGV4YWRlY2ltYWwiKX0sZGVmYXVsdFN0eWxlOiJkZWNpbWFsIixzdHlsZUFsaWFzZXM6e2JpbmFyeTpbMiwiYmluIl0sb2N0YWw6WzgsIm9jdCJdLGRlY2ltYWw6WzEwLCJkZWMiXSxoZXhhZGVjaW1hbDpbMTYsImhleCJdfX0pLGs3ZT1uZXcgUmVnRXhwKCJeKD86Wy0rXT8oPzpbMC05XVswLTlfXSopKD86XFwuWzAtOV9dKik/KD86W2VFXVstK10/WzAtOV0rKT98XFwuWzAtOV9dKyg/OltlRV1bLStdP1swLTldKyk/fFstK10/XFwuKD86aW5mfEluZnxJTkYpfFxcLig/Om5hbnxOYU58TkFOKSkkIik7byhFN2UsInJlc29sdmVZYW1sRmxvYXQiKTtvKFM3ZSwiY29uc3RydWN0WWFtbEZsb2F0Iik7QzdlPS9eWy0rXT9bMC05XStlLztvKEE3ZSwicmVwcmVzZW50WWFtbEZsb2F0Iik7byhfN2UsImlzRmxvYXQiKTtEN2U9bmV3IF9hKCJ0YWc6eWFtbC5vcmcsMjAwMjpmbG9hdCIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTpFN2UsY29uc3RydWN0OlM3ZSxwcmVkaWNhdGU6XzdlLHJlcHJlc2VudDpBN2UsZGVmYXVsdFN0eWxlOiJsb3dlcmNhc2UifSksZmo9bzdlLmV4dGVuZCh7aW1wbGljaXQ6W2g3ZSxtN2UsVDdlLEQ3ZV19KSxMN2U9ZmosZGo9bmV3IFJlZ0V4cCgiXihbMC05XVswLTldWzAtOV1bMC05XSktKFswLTldWzAtOV0pLShbMC05XVswLTldKSQiKSxwaj1uZXcgUmVnRXhwKCJeKFswLTldWzAtOV1bMC05XVswLTldKS0oWzAtOV1bMC05XT8pLShbMC05XVswLTldPykoPzpbVHRdfFsgXFx0XSspKFswLTldWzAtOV0/KTooWzAtOV1bMC05XSk6KFswLTldWzAtOV0pKD86XFwuKFswLTldKikpPyg/OlsgXFx0XSooWnwoWy0rXSkoWzAtOV1bMC05XT8pKD86OihbMC05XVswLTldKSk/KSk/JCIpO28oUjdlLCJyZXNvbHZlWWFtbFRpbWVzdGFtcCIpO28oTjdlLCJjb25zdHJ1Y3RZYW1sVGltZXN0YW1wIik7byhNN2UsInJlcHJlc2VudFlhbWxUaW1lc3RhbXAiKTtJN2U9bmV3IF9hKCJ0YWc6eWFtbC5vcmcsMjAwMjp0aW1lc3RhbXAiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6UjdlLGNvbnN0cnVjdDpON2UsaW5zdGFuY2VPZjpEYXRlLHJlcHJlc2VudDpNN2V9KTtvKE83ZSwicmVzb2x2ZVlhbWxNZXJnZSIpO1A3ZT1uZXcgX2EoInRhZzp5YW1sLm9yZywyMDAyOm1lcmdlIix7a2luZDoic2NhbGFyIixyZXNvbHZlOk83ZX0pLHVEPWBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPQpccmA7byhCN2UsInJlc29sdmVZYW1sQmluYXJ5Iik7byhGN2UsImNvbnN0cnVjdFlhbWxCaW5hcnkiKTtvKCQ3ZSwicmVwcmVzZW50WWFtbEJpbmFyeSIpO28oejdlLCJpc0JpbmFyeSIpO0c3ZT1uZXcgX2EoInRhZzp5YW1sLm9yZywyMDAyOmJpbmFyeSIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTpCN2UsY29uc3RydWN0OkY3ZSxwcmVkaWNhdGU6ejdlLHJlcHJlc2VudDokN2V9KSxWN2U9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxVN2U9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztvKEg3ZSwicmVzb2x2ZVlhbWxPbWFwIik7byhXN2UsImNvbnN0cnVjdFlhbWxPbWFwIik7cTdlPW5ldyBfYSgidGFnOnlhbWwub3JnLDIwMDI6b21hcCIse2tpbmQ6InNlcXVlbmNlIixyZXNvbHZlOkg3ZSxjb25zdHJ1Y3Q6VzdlfSksWTdlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7byhYN2UsInJlc29sdmVZYW1sUGFpcnMiKTtvKGo3ZSwiY29uc3RydWN0WWFtbFBhaXJzIik7SzdlPW5ldyBfYSgidGFnOnlhbWwub3JnLDIwMDI6cGFpcnMiLHtraW5kOiJzZXF1ZW5jZSIscmVzb2x2ZTpYN2UsY29uc3RydWN0Omo3ZX0pLFE3ZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O28oWjdlLCJyZXNvbHZlWWFtbFNldCIpO28oSjdlLCJjb25zdHJ1Y3RZYW1sU2V0Iik7ZUFlPW5ldyBfYSgidGFnOnlhbWwub3JnLDIwMDI6c2V0Iix7a2luZDoibWFwcGluZyIscmVzb2x2ZTpaN2UsY29uc3RydWN0Oko3ZX0pLG1qPUw3ZS5leHRlbmQoe2ltcGxpY2l0OltJN2UsUDdlXSxleHBsaWNpdDpbRzdlLHE3ZSxLN2UsZUFlXX0pLEdoPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksdnc9MSxnaj0yLHlqPTMseHc9NCxpRD0xLHRBZT0yLEtYPTMsckFlPS9bXHgwMC1ceDA4XHgwQlx4MENceDBFLVx4MUZceDdGLVx4ODRceDg2LVx4OUZcdUZGRkVcdUZGRkZdfFtcdUQ4MDAtXHVEQkZGXSg/IVtcdURDMDAtXHVERkZGXSl8KD86W15cdUQ4MDAtXHVEQkZGXXxeKVtcdURDMDAtXHVERkZGXS8sbkFlPS9bXHg4NVx1MjAyOFx1MjAyOV0vLGlBZT0vWyxcW1xdXHtcfV0vLHZqPS9eKD86IXwhIXwhW2EtelwtXSshKSQvaSx4aj0vXig/OiF8W14sXFtcXVx7XH1dKSg/OiVbMC05YS1mXXsyfXxbMC05YS16XC0jO1wvXD86QCY9XCtcJCxfXC4hflwqJ1woXClcW1xdXSkqJC9pO28oUVgsIl9jbGFzcyIpO28oZGMsImlzX0VPTCIpO28oTmQsImlzX1dISVRFX1NQQUNFIik7byhMcywiaXNfV1NfT1JfRU9MIik7byhhbSwiaXNfRkxPV19JTkRJQ0FUT1IiKTtvKGFBZSwiZnJvbUhleENvZGUiKTtvKHNBZSwiZXNjYXBlZEhleExlbiIpO28ob0FlLCJmcm9tRGVjaW1hbENvZGUiKTtvKFpYLCJzaW1wbGVFc2NhcGVTZXF1ZW5jZSIpO28obEFlLCJjaGFyRnJvbUNvZGVwb2ludCIpO2JqPW5ldyBBcnJheSgyNTYpLHdqPW5ldyBBcnJheSgyNTYpO2ZvcihSZD0wO1JkPDI1NjtSZCsrKWJqW1JkXT1aWChSZCk/MTowLHdqW1JkXT1aWChSZCk7byhjQWUsIlN0YXRlJDEiKTtvKFRqLCJnZW5lcmF0ZUVycm9yIik7byhRdCwidGhyb3dFcnJvciIpO28oYncsInRocm93V2FybmluZyIpO0pYPXtZQU1MOm8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpLGEscztlLnZlcnNpb24hPT1udWxsJiZRdChlLCJkdXBsaWNhdGlvbiBvZiAlWUFNTCBkaXJlY3RpdmUiKSxuLmxlbmd0aCE9PTEmJlF0KGUsIllBTUwgZGlyZWN0aXZlIGFjY2VwdHMgZXhhY3RseSBvbmUgYXJndW1lbnQiKSxpPS9eKFswLTldKylcLihbMC05XSspJC8uZXhlYyhuWzBdKSxpPT09bnVsbCYmUXQoZSwiaWxsLWZvcm1lZCBhcmd1bWVudCBvZiB0aGUgWUFNTCBkaXJlY3RpdmUiKSxhPXBhcnNlSW50KGlbMV0sMTApLHM9cGFyc2VJbnQoaVsyXSwxMCksYSE9PTEmJlF0KGUsInVuYWNjZXB0YWJsZSBZQU1MIHZlcnNpb24gb2YgdGhlIGRvY3VtZW50IiksZS52ZXJzaW9uPW5bMF0sZS5jaGVja0xpbmVCcmVha3M9czwyLHMhPT0xJiZzIT09MiYmYncoZSwidW5zdXBwb3J0ZWQgWUFNTCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudCIpfSwiaGFuZGxlWWFtbERpcmVjdGl2ZSIpLFRBRzpvKGZ1bmN0aW9uKGUscixuKXt2YXIgaSxhO24ubGVuZ3RoIT09MiYmUXQoZSwiVEFHIGRpcmVjdGl2ZSBhY2NlcHRzIGV4YWN0bHkgdHdvIGFyZ3VtZW50cyIpLGk9blswXSxhPW5bMV0sdmoudGVzdChpKXx8UXQoZSwiaWxsLWZvcm1lZCB0YWcgaGFuZGxlIChmaXJzdCBhcmd1bWVudCkgb2YgdGhlIFRBRyBkaXJlY3RpdmUiKSxHaC5jYWxsKGUudGFnTWFwLGkpJiZRdChlLCd0aGVyZSBpcyBhIHByZXZpb3VzbHkgZGVjbGFyZWQgc3VmZml4IGZvciAiJytpKyciIHRhZyBoYW5kbGUnKSx4ai50ZXN0KGEpfHxRdChlLCJpbGwtZm9ybWVkIHRhZyBwcmVmaXggKHNlY29uZCBhcmd1bWVudCkgb2YgdGhlIFRBRyBkaXJlY3RpdmUiKTt0cnl7YT1kZWNvZGVVUklDb21wb25lbnQoYSl9Y2F0Y2h7UXQoZSwidGFnIHByZWZpeCBpcyBtYWxmb3JtZWQ6ICIrYSl9ZS50YWdNYXBbaV09YX0sImhhbmRsZVRhZ0RpcmVjdGl2ZSIpfTtvKHpoLCJjYXB0dXJlU2VnbWVudCIpO28oZWosIm1lcmdlTWFwcGluZ3MiKTtvKHNtLCJzdG9yZU1hcHBpbmdQYWlyIik7byhoRCwicmVhZExpbmVCcmVhayIpO28oQ2ksInNraXBTZXBhcmF0aW9uU3BhY2UiKTtvKGt3LCJ0ZXN0RG9jdW1lbnRTZXBhcmF0b3IiKTtvKGZELCJ3cml0ZUZvbGRlZExpbmVzIik7byh1QWUsInJlYWRQbGFpblNjYWxhciIpO28oaEFlLCJyZWFkU2luZ2xlUXVvdGVkU2NhbGFyIik7byhmQWUsInJlYWREb3VibGVRdW90ZWRTY2FsYXIiKTtvKGRBZSwicmVhZEZsb3dDb2xsZWN0aW9uIik7byhwQWUsInJlYWRCbG9ja1NjYWxhciIpO28odGosInJlYWRCbG9ja1NlcXVlbmNlIik7byhtQWUsInJlYWRCbG9ja01hcHBpbmciKTtvKGdBZSwicmVhZFRhZ1Byb3BlcnR5Iik7byh5QWUsInJlYWRBbmNob3JQcm9wZXJ0eSIpO28odkFlLCJyZWFkQWxpYXMiKTtvKG9tLCJjb21wb3NlTm9kZSIpO28oeEFlLCJyZWFkRG9jdW1lbnQiKTtvKGtqLCJsb2FkRG9jdW1lbnRzIik7byhiQWUsImxvYWRBbGwkMSIpO28od0FlLCJsb2FkJDEiKTtUQWU9YkFlLGtBZT13QWUsRWo9e2xvYWRBbGw6VEFlLGxvYWQ6a0FlfSxTaj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLENqPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksZEQ9NjUyNzksRUFlPTksbDI9MTAsU0FlPTEzLENBZT0zMixBQWU9MzMsX0FlPTM0LHNEPTM1LERBZT0zNyxMQWU9MzgsUkFlPTM5LE5BZT00MixBaj00NCxNQWU9NDUsd3c9NTgsSUFlPTYxLE9BZT02MixQQWU9NjMsQkFlPTY0LF9qPTkxLERqPTkzLEZBZT05NixMaj0xMjMsJEFlPTEyNCxSaj0xMjUsRGE9e307RGFbMF09IlxcMCI7RGFbN109IlxcYSI7RGFbOF09IlxcYiI7RGFbOV09IlxcdCI7RGFbMTBdPSJcXG4iO0RhWzExXT0iXFx2IjtEYVsxMl09IlxcZiI7RGFbMTNdPSJcXHIiO0RhWzI3XT0iXFxlIjtEYVszNF09J1xcIic7RGFbOTJdPSJcXFxcIjtEYVsxMzNdPSJcXE4iO0RhWzE2MF09IlxcXyI7RGFbODIzMl09IlxcTCI7RGFbODIzM109IlxcUCI7ekFlPVsieSIsIlkiLCJ5ZXMiLCJZZXMiLCJZRVMiLCJvbiIsIk9uIiwiT04iLCJuIiwiTiIsIm5vIiwiTm8iLCJOTyIsIm9mZiIsIk9mZiIsIk9GRiJdLEdBZT0vXlstK10/WzAtOV9dKyg/OjpbMC05X10rKSsoPzpcLlswLTlfXSopPyQvO28oVkFlLCJjb21waWxlU3R5bGVNYXAiKTtvKFVBZSwiZW5jb2RlSGV4Iik7SEFlPTEsYzI9MjtvKFdBZSwiU3RhdGUiKTtvKHJqLCJpbmRlbnRTdHJpbmciKTtvKG9ELCJnZW5lcmF0ZU5leHRMaW5lIik7byhxQWUsInRlc3RJbXBsaWNpdFJlc29sdmluZyIpO28oVHcsImlzV2hpdGVzcGFjZSIpO28odTIsImlzUHJpbnRhYmxlIik7byhuaiwiaXNOc0NoYXJPcldoaXRlc3BhY2UiKTtvKGlqLCJpc1BsYWluU2FmZSIpO28oWUFlLCJpc1BsYWluU2FmZUZpcnN0Iik7byhYQWUsImlzUGxhaW5TYWZlTGFzdCIpO28oczIsImNvZGVQb2ludEF0Iik7byhOaiwibmVlZEluZGVudEluZGljYXRvciIpO01qPTEsbEQ9MixJaj0zLE9qPTQsaW09NTtvKGpBZSwiY2hvb3NlU2NhbGFyU3R5bGUiKTtvKEtBZSwid3JpdGVTY2FsYXIiKTtvKGFqLCJibG9ja0hlYWRlciIpO28oc2osImRyb3BFbmRpbmdOZXdsaW5lIik7byhRQWUsImZvbGRTdHJpbmciKTtvKG9qLCJmb2xkTGluZSIpO28oWkFlLCJlc2NhcGVTdHJpbmciKTtvKEpBZSwid3JpdGVGbG93U2VxdWVuY2UiKTtvKGxqLCJ3cml0ZUJsb2NrU2VxdWVuY2UiKTtvKGU4ZSwid3JpdGVGbG93TWFwcGluZyIpO28odDhlLCJ3cml0ZUJsb2NrTWFwcGluZyIpO28oY2osImRldGVjdFR5cGUiKTtvKEF1LCJ3cml0ZU5vZGUiKTtvKHI4ZSwiZ2V0RHVwbGljYXRlUmVmZXJlbmNlcyIpO28oY0QsImluc3BlY3ROb2RlIik7byhuOGUsImR1bXAkMSIpO2k4ZT1uOGUsYThlPXtkdW1wOmk4ZX07byhwRCwicmVuYW1lZCIpO2xtPWZqLGNtPUVqLmxvYWQsb2t0PUVqLmxvYWRBbGwsbGt0PWE4ZS5kdW1wLGNrdD1wRCgic2FmZUxvYWQiLCJsb2FkIiksdWt0PXBEKCJzYWZlTG9hZEFsbCIsImxvYWRBbGwiKSxoa3Q9cEQoInNhZmVEdW1wIiwiZHVtcCIpfSk7ZnVuY3Rpb24gdkQoKXtyZXR1cm57YXN5bmM6ITEsYnJlYWtzOiExLGV4dGVuc2lvbnM6bnVsbCxnZm06ITAsaG9va3M6bnVsbCxwZWRhbnRpYzohMSxyZW5kZXJlcjpudWxsLHNpbGVudDohMSx0b2tlbml6ZXI6bnVsbCx3YWxrVG9rZW5zOm51bGx9fWZ1bmN0aW9uIEdqKHQpe0lkPXR9ZnVuY3Rpb24gbm4odCxlPSIiKXtsZXQgcj10eXBlb2YgdD09InN0cmluZyI/dDp0LnNvdXJjZSxuPXtyZXBsYWNlOm8oKGksYSk9PntsZXQgcz10eXBlb2YgYT09InN0cmluZyI/YTphLnNvdXJjZTtyZXR1cm4gcz1zLnJlcGxhY2UodHMuY2FyZXQsIiQxIikscj1yLnJlcGxhY2UoaSxzKSxufSwicmVwbGFjZSIpLGdldFJlZ2V4Om8oKCk9Pm5ldyBSZWdFeHAocixlKSwiZ2V0UmVnZXgiKX07cmV0dXJuIG59ZnVuY3Rpb24gcGModCxlKXtpZihlKXtpZih0cy5lc2NhcGVUZXN0LnRlc3QodCkpcmV0dXJuIHQucmVwbGFjZSh0cy5lc2NhcGVSZXBsYWNlLEJqKX1lbHNlIGlmKHRzLmVzY2FwZVRlc3ROb0VuY29kZS50ZXN0KHQpKXJldHVybiB0LnJlcGxhY2UodHMuZXNjYXBlUmVwbGFjZU5vRW5jb2RlLEJqKTtyZXR1cm4gdH1mdW5jdGlvbiBGaih0KXt0cnl7dD1lbmNvZGVVUkkodCkucmVwbGFjZSh0cy5wZXJjZW50RGVjb2RlLCIlIil9Y2F0Y2h7cmV0dXJuIG51bGx9cmV0dXJuIHR9ZnVuY3Rpb24gJGoodCxlKXtsZXQgcj10LnJlcGxhY2UodHMuZmluZFBpcGUsKGEscyxsKT0+e2xldCB1PSExLGg9cztmb3IoOy0taD49MCYmbFtoXT09PSJcXCI7KXU9IXU7cmV0dXJuIHU/InwiOiIgfCJ9KSxuPXIuc3BsaXQodHMuc3BsaXRQaXBlKSxpPTA7aWYoblswXS50cmltKCl8fG4uc2hpZnQoKSxuLmxlbmd0aD4wJiYhbi5hdCgtMSk/LnRyaW0oKSYmbi5wb3AoKSxlKWlmKG4ubGVuZ3RoPmUpbi5zcGxpY2UoZSk7ZWxzZSBmb3IoO24ubGVuZ3RoPGU7KW4ucHVzaCgiIik7Zm9yKDtpPG4ubGVuZ3RoO2krKyluW2ldPW5baV0udHJpbSgpLnJlcGxhY2UodHMuc2xhc2hQaXBlLCJ8Iik7cmV0dXJuIG59ZnVuY3Rpb24gZjIodCxlLHIpe2xldCBuPXQubGVuZ3RoO2lmKG49PT0wKXJldHVybiIiO2xldCBpPTA7Zm9yKDtpPG4mJnQuY2hhckF0KG4taS0xKT09PWU7KWkrKztyZXR1cm4gdC5zbGljZSgwLG4taSl9ZnVuY3Rpb24gJDhlKHQsZSl7aWYodC5pbmRleE9mKGVbMV0pPT09LTEpcmV0dXJuLTE7bGV0IHI9MDtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKylpZih0W25dPT09IlxcIiluKys7ZWxzZSBpZih0W25dPT09ZVswXSlyKys7ZWxzZSBpZih0W25dPT09ZVsxXSYmKHItLSxyPDApKXJldHVybiBuO3JldHVybi0xfWZ1bmN0aW9uIHpqKHQsZSxyLG4saSl7bGV0IGE9ZS5ocmVmLHM9ZS50aXRsZXx8bnVsbCxsPXRbMV0ucmVwbGFjZShpLm90aGVyLm91dHB1dExpbmtSZXBsYWNlLCIkMSIpO2lmKHRbMF0uY2hhckF0KDApIT09IiEiKXtuLnN0YXRlLmluTGluaz0hMDtsZXQgdT17dHlwZToibGluayIscmF3OnIsaHJlZjphLHRpdGxlOnMsdGV4dDpsLHRva2VuczpuLmlubGluZVRva2VucyhsKX07cmV0dXJuIG4uc3RhdGUuaW5MaW5rPSExLHV9cmV0dXJue3R5cGU6ImltYWdlIixyYXc6cixocmVmOmEsdGl0bGU6cyx0ZXh0Omx9fWZ1bmN0aW9uIHo4ZSh0LGUscil7bGV0IG49dC5tYXRjaChyLm90aGVyLmluZGVudENvZGVDb21wZW5zYXRpb24pO2lmKG49PT1udWxsKXJldHVybiBlO2xldCBpPW5bMV07cmV0dXJuIGUuc3BsaXQoYApgKS5tYXAoYT0+e2xldCBzPWEubWF0Y2goci5vdGhlci5iZWdpbm5pbmdTcGFjZSk7aWYocz09PW51bGwpcmV0dXJuIGE7bGV0W2xdPXM7cmV0dXJuIGwubGVuZ3RoPj1pLmxlbmd0aD9hLnNsaWNlKGkubGVuZ3RoKTphfSkuam9pbihgCmApfWZ1bmN0aW9uIEpyKHQsZSl7cmV0dXJuIE1kLnBhcnNlKHQsZSl9dmFyIElkLGQyLHRzLHM4ZSxvOGUsbDhlLG0yLGM4ZSx4RCxWaixVaix1OGUsYkQsaDhlLHdELGY4ZSxkOGUsQXcsVEQscDhlLEhqLG04ZSxrRCxQaixnOGUseThlLHY4ZSx4OGUsV2osYjhlLF93LEVELHFqLHc4ZSxZaixUOGUsazhlLEU4ZSxYaixTOGUsQzhlLGpqLEE4ZSxfOGUsRDhlLEw4ZSxSOGUsTjhlLE04ZSxDdyxJOGUsS2osUWosTzhlLFNELFA4ZSxnRCxCOGUsU3csaDIsRjhlLEJqLGhtLEFsLGZtLHAyLF9sLHVtLHlELE1kLGRrdCxwa3QsbWt0LGdrdCx5a3Qsdmt0LHhrdCxaaj1OKCgpPT57InVzZSBzdHJpY3QiO28odkQsIl9nZXREZWZhdWx0cyIpO0lkPXZEKCk7byhHaiwiY2hhbmdlRGVmYXVsdHMiKTtkMj17ZXhlYzpvKCgpPT5udWxsLCJleGVjIil9O28obm4sImVkaXQiKTt0cz17Y29kZVJlbW92ZUluZGVudDovXig/OiB7MSw0fXwgezAsM31cdCkvZ20sb3V0cHV0TGlua1JlcGxhY2U6L1xcKFtcW1xdXSkvZyxpbmRlbnRDb2RlQ29tcGVuc2F0aW9uOi9eKFxzKykoPzpgYGApLyxiZWdpbm5pbmdTcGFjZTovXlxzKy8sZW5kaW5nSGFzaDovIyQvLHN0YXJ0aW5nU3BhY2VDaGFyOi9eIC8sZW5kaW5nU3BhY2VDaGFyOi8gJC8sbm9uU3BhY2VDaGFyOi9bXiBdLyxuZXdMaW5lQ2hhckdsb2JhbDovXG4vZyx0YWJDaGFyR2xvYmFsOi9cdC9nLG11bHRpcGxlU3BhY2VHbG9iYWw6L1xzKy9nLGJsYW5rTGluZTovXlsgXHRdKiQvLGRvdWJsZUJsYW5rTGluZTovXG5bIFx0XSpcblsgXHRdKiQvLGJsb2NrcXVvdGVTdGFydDovXiB7MCwzfT4vLGJsb2NrcXVvdGVTZXRleHRSZXBsYWNlOi9cbiB7MCwzfSgoPzo9K3wtKykgKikoPz1cbnwkKS9nLGJsb2NrcXVvdGVTZXRleHRSZXBsYWNlMjovXiB7MCwzfT5bIFx0XT8vZ20sbGlzdFJlcGxhY2VUYWJzOi9eXHQrLyxsaXN0UmVwbGFjZU5lc3Rpbmc6L14gezEsNH0oPz0oIHs0fSkqW14gXSkvZyxsaXN0SXNUYXNrOi9eXFtbIHhYXVxdIC8sbGlzdFJlcGxhY2VUYXNrOi9eXFtbIHhYXVxdICsvLGFueUxpbmU6L1xuLipcbi8saHJlZkJyYWNrZXRzOi9ePCguKik+JC8sdGFibGVEZWxpbWl0ZXI6L1s6fF0vLHRhYmxlQWxpZ25DaGFyczovXlx8fFx8ICokL2csdGFibGVSb3dCbGFua0xpbmU6L1xuWyBcdF0qJC8sdGFibGVBbGlnblJpZ2h0Oi9eICotKzogKiQvLHRhYmxlQWxpZ25DZW50ZXI6L14gKjotKzogKiQvLHRhYmxlQWxpZ25MZWZ0Oi9eICo6LSsgKiQvLHN0YXJ0QVRhZzovXjxhIC9pLGVuZEFUYWc6L148XC9hPi9pLHN0YXJ0UHJlU2NyaXB0VGFnOi9ePChwcmV8Y29kZXxrYmR8c2NyaXB0KShcc3w+KS9pLGVuZFByZVNjcmlwdFRhZzovXjxcLyhwcmV8Y29kZXxrYmR8c2NyaXB0KShcc3w+KS9pLHN0YXJ0QW5nbGVCcmFja2V0Oi9ePC8sZW5kQW5nbGVCcmFja2V0Oi8+JC8scGVkYW50aWNIcmVmVGl0bGU6L14oW14nIl0qW15cc10pXHMrKFsnIl0pKC4qKVwyLyx1bmljb2RlQWxwaGFOdW1lcmljOi9bXHB7TH1ccHtOfV0vdSxlc2NhcGVUZXN0Oi9bJjw+IiddLyxlc2NhcGVSZXBsYWNlOi9bJjw+IiddL2csZXNjYXBlVGVzdE5vRW5jb2RlOi9bPD4iJ118Jig/ISgjXGR7MSw3fXwjW1h4XVthLWZBLUYwLTldezEsNn18XHcrKTspLyxlc2NhcGVSZXBsYWNlTm9FbmNvZGU6L1s8PiInXXwmKD8hKCNcZHsxLDd9fCNbWHhdW2EtZkEtRjAtOV17MSw2fXxcdyspOykvZyx1bmVzY2FwZVRlc3Q6LyYoIyg/OlxkKyl8KD86I3hbMC05QS1GYS1mXSspfCg/Olx3KykpOz8vaWcsY2FyZXQ6LyhefFteXFtdKVxeL2cscGVyY2VudERlY29kZTovJTI1L2csZmluZFBpcGU6L1x8L2csc3BsaXRQaXBlOi8gXHwvLHNsYXNoUGlwZTovXFxcfC9nLGNhcnJpYWdlUmV0dXJuOi9cclxufFxyL2csc3BhY2VMaW5lOi9eICskL2dtLG5vdFNwYWNlU3RhcnQ6L15cUyovLGVuZGluZ05ld2xpbmU6L1xuJC8sbGlzdEl0ZW1SZWdleDpvKHQ9Pm5ldyBSZWdFeHAoYF4oIHswLDN9JHt0fSkoKD86WwkgXVteXFxuXSopPyg/OlxcbnwkKSlgKSwibGlzdEl0ZW1SZWdleCIpLG5leHRCdWxsZXRSZWdleDpvKHQ9Pm5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLHQtMSl9fSg/OlsqKy1dfFxcZHsxLDl9Wy4pXSkoKD86WyAJXVteXFxuXSopPyg/OlxcbnwkKSlgKSwibmV4dEJ1bGxldFJlZ2V4IiksaHJSZWdleDpvKHQ9Pm5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLHQtMSl9fSgoPzotICopezMsfXwoPzpfICopezMsfXwoPzpcXCogKil7Myx9KSg/Olxcbit8JClgKSwiaHJSZWdleCIpLGZlbmNlc0JlZ2luUmVnZXg6byh0PT5uZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMyx0LTEpfX0oPzpcYFxgXGB8fn5+KWApLCJmZW5jZXNCZWdpblJlZ2V4IiksaGVhZGluZ0JlZ2luUmVnZXg6byh0PT5uZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMyx0LTEpfX0jYCksImhlYWRpbmdCZWdpblJlZ2V4IiksaHRtbEJlZ2luUmVnZXg6byh0PT5uZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMyx0LTEpfX08KD86W2Etel0uKj58IS0tKWAsImkiKSwiaHRtbEJlZ2luUmVnZXgiKX0sczhlPS9eKD86WyBcdF0qKD86XG58JCkpKy8sbzhlPS9eKCg/OiB7NH18IHswLDN9XHQpW15cbl0rKD86XG4oPzpbIFx0XSooPzpcbnwkKSkqKT8pKy8sbDhlPS9eIHswLDN9KGB7Myx9KD89W15gXG5dKig/OlxufCQpKXx+ezMsfSkoW15cbl0qKSg/OlxufCQpKD86fChbXHNcU10qPykoPzpcbnwkKSkoPzogezAsM31cMVt+YF0qICooPz1cbnwkKXwkKS8sbTI9L14gezAsM30oKD86LVtcdCBdKil7Myx9fCg/Ol9bIFx0XSopezMsfXwoPzpcKlsgXHRdKil7Myx9KSg/OlxuK3wkKS8sYzhlPS9eIHswLDN9KCN7MSw2fSkoPz1cc3wkKSguKikoPzpcbit8JCkvLHhEPS8oPzpbKistXXxcZHsxLDl9Wy4pXSkvLFZqPS9eKD8hYnVsbCB8YmxvY2tDb2RlfGZlbmNlc3xibG9ja3F1b3RlfGhlYWRpbmd8aHRtbHx0YWJsZSkoKD86Lnxcbig/IVxzKj9cbnxidWxsIHxibG9ja0NvZGV8ZmVuY2VzfGJsb2NrcXVvdGV8aGVhZGluZ3xodG1sfHRhYmxlKSkrPylcbiB7MCwzfSg9K3wtKykgKig/OlxuK3wkKS8sVWo9bm4oVmopLnJlcGxhY2UoL2J1bGwvZyx4RCkucmVwbGFjZSgvYmxvY2tDb2RlL2csLyg/OiB7NH18IHswLDN9XHQpLykucmVwbGFjZSgvZmVuY2VzL2csLyB7MCwzfSg/OmB7Myx9fH57Myx9KS8pLnJlcGxhY2UoL2Jsb2NrcXVvdGUvZywvIHswLDN9Pi8pLnJlcGxhY2UoL2hlYWRpbmcvZywvIHswLDN9I3sxLDZ9LykucmVwbGFjZSgvaHRtbC9nLC8gezAsM308W15cbj5dKz5cbi8pLnJlcGxhY2UoL1x8dGFibGUvZywiIikuZ2V0UmVnZXgoKSx1OGU9bm4oVmopLnJlcGxhY2UoL2J1bGwvZyx4RCkucmVwbGFjZSgvYmxvY2tDb2RlL2csLyg/OiB7NH18IHswLDN9XHQpLykucmVwbGFjZSgvZmVuY2VzL2csLyB7MCwzfSg/OmB7Myx9fH57Myx9KS8pLnJlcGxhY2UoL2Jsb2NrcXVvdGUvZywvIHswLDN9Pi8pLnJlcGxhY2UoL2hlYWRpbmcvZywvIHswLDN9I3sxLDZ9LykucmVwbGFjZSgvaHRtbC9nLC8gezAsM308W15cbj5dKz5cbi8pLnJlcGxhY2UoL3RhYmxlL2csLyB7MCwzfVx8Pyg/Ols6XC0gXSpcfCkrW1w6XC0gXSpcbi8pLmdldFJlZ2V4KCksYkQ9L14oW15cbl0rKD86XG4oPyFocnxoZWFkaW5nfGxoZWFkaW5nfGJsb2NrcXVvdGV8ZmVuY2VzfGxpc3R8aHRtbHx0YWJsZXwgK1xuKVteXG5dKykqKS8saDhlPS9eW15cbl0rLyx3RD0vKD8hXHMqXF0pKD86XFwufFteXFtcXVxcXSkrLyxmOGU9bm4oL14gezAsM31cWyhsYWJlbClcXTogKig/OlxuWyBcdF0qKT8oW148XHNdW15cc10qfDwuKj8+KSg/Oig/OiArKD86XG5bIFx0XSopP3wgKlxuWyBcdF0qKSh0aXRsZSkpPyAqKD86XG4rfCQpLykucmVwbGFjZSgibGFiZWwiLHdEKS5yZXBsYWNlKCJ0aXRsZSIsLyg/OiIoPzpcXCI/fFteIlxcXSkqInwnW14nXG5dKig/OlxuW14nXG5dKykqXG4/J3xcKFteKCldKlwpKS8pLmdldFJlZ2V4KCksZDhlPW5uKC9eKCB7MCwzfWJ1bGwpKFsgXHRdW15cbl0rPyk/KD86XG58JCkvKS5yZXBsYWNlKC9idWxsL2cseEQpLmdldFJlZ2V4KCksQXc9ImFkZHJlc3N8YXJ0aWNsZXxhc2lkZXxiYXNlfGJhc2Vmb250fGJsb2NrcXVvdGV8Ym9keXxjYXB0aW9ufGNlbnRlcnxjb2x8Y29sZ3JvdXB8ZGR8ZGV0YWlsc3xkaWFsb2d8ZGlyfGRpdnxkbHxkdHxmaWVsZHNldHxmaWdjYXB0aW9ufGZpZ3VyZXxmb290ZXJ8Zm9ybXxmcmFtZXxmcmFtZXNldHxoWzEtNl18aGVhZHxoZWFkZXJ8aHJ8aHRtbHxpZnJhbWV8bGVnZW5kfGxpfGxpbmt8bWFpbnxtZW51fG1lbnVpdGVtfG1ldGF8bmF2fG5vZnJhbWVzfG9sfG9wdGdyb3VwfG9wdGlvbnxwfHBhcmFtfHNlYXJjaHxzZWN0aW9ufHN1bW1hcnl8dGFibGV8dGJvZHl8dGR8dGZvb3R8dGh8dGhlYWR8dGl0bGV8dHJ8dHJhY2t8dWwiLFREPS88IS0tKD86LT8+fFtcc1xTXSo/KD86LS0+fCQpKS8scDhlPW5uKCJeIHswLDN9KD86PChzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhKVtcXHM+XVtcXHNcXFNdKj8oPzo8L1xcMT5bXlxcbl0qXFxuK3wkKXxjb21tZW50W15cXG5dKihcXG4rfCQpfDxcXD9bXFxzXFxTXSo/KD86XFw/Plxcbip8JCl8PCFbQS1aXVtcXHNcXFNdKj8oPzo+XFxuKnwkKXw8IVxcW0NEQVRBXFxbW1xcc1xcU10qPyg/OlxcXVxcXT5cXG4qfCQpfDwvPyh0YWcpKD86ICt8XFxufC8/PilbXFxzXFxTXSo/KD86KD86XFxuWyAJXSopK1xcbnwkKXw8KD8hc2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYSkoW2Etel1bXFx3LV0qKSg/OmF0dHJpYnV0ZSkqPyAqLz8+KD89WyBcXHRdKig/OlxcbnwkKSlbXFxzXFxTXSo/KD86KD86XFxuWyAJXSopK1xcbnwkKXw8Lyg/IXNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWEpW2Etel1bXFx3LV0qXFxzKj4oPz1bIFxcdF0qKD86XFxufCQpKVtcXHNcXFNdKj8oPzooPzpcXG5bIAldKikrXFxufCQpKSIsImkiKS5yZXBsYWNlKCJjb21tZW50IixURCkucmVwbGFjZSgidGFnIixBdykucmVwbGFjZSgiYXR0cmlidXRlIiwvICtbYS16QS1aOl9dW1x3LjotXSooPzogKj0gKiJbXiJcbl0qInwgKj0gKidbXidcbl0qJ3wgKj0gKlteXHMiJz08PmBdKyk/LykuZ2V0UmVnZXgoKSxIaj1ubihiRCkucmVwbGFjZSgiaHIiLG0yKS5yZXBsYWNlKCJoZWFkaW5nIiwiIHswLDN9I3sxLDZ9KD86XFxzfCQpIikucmVwbGFjZSgifGxoZWFkaW5nIiwiIikucmVwbGFjZSgifHRhYmxlIiwiIikucmVwbGFjZSgiYmxvY2txdW90ZSIsIiB7MCwzfT4iKS5yZXBsYWNlKCJmZW5jZXMiLCIgezAsM30oPzpgezMsfSg/PVteYFxcbl0qXFxuKXx+ezMsfSlbXlxcbl0qXFxuIikucmVwbGFjZSgibGlzdCIsIiB7MCwzfSg/OlsqKy1dfDFbLildKSAiKS5yZXBsYWNlKCJodG1sIiwiPC8/KD86dGFnKSg/OiArfFxcbnwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSkiKS5yZXBsYWNlKCJ0YWciLEF3KS5nZXRSZWdleCgpLG04ZT1ubigvXiggezAsM30+ID8ocGFyYWdyYXBofFteXG5dKikoPzpcbnwkKSkrLykucmVwbGFjZSgicGFyYWdyYXBoIixIaikuZ2V0UmVnZXgoKSxrRD17YmxvY2txdW90ZTptOGUsY29kZTpvOGUsZGVmOmY4ZSxmZW5jZXM6bDhlLGhlYWRpbmc6YzhlLGhyOm0yLGh0bWw6cDhlLGxoZWFkaW5nOlVqLGxpc3Q6ZDhlLG5ld2xpbmU6czhlLHBhcmFncmFwaDpIaix0YWJsZTpkMix0ZXh0Omg4ZX0sUGo9bm4oIl4gKihbXlxcbiBdLiopXFxuIHswLDN9KCg/OlxcfCAqKT86Py0rOj8gKig/OlxcfCAqOj8tKzo/ICopKig/OlxcfCAqKT8pKD86XFxuKCg/Oig/ISAqXFxufGhyfGhlYWRpbmd8YmxvY2txdW90ZXxjb2RlfGZlbmNlc3xsaXN0fGh0bWwpLiooPzpcXG58JCkpKilcXG4qfCQpIikucmVwbGFjZSgiaHIiLG0yKS5yZXBsYWNlKCJoZWFkaW5nIiwiIHswLDN9I3sxLDZ9KD86XFxzfCQpIikucmVwbGFjZSgiYmxvY2txdW90ZSIsIiB7MCwzfT4iKS5yZXBsYWNlKCJjb2RlIiwiKD86IHs0fXwgezAsM30JKVteXFxuXSIpLnJlcGxhY2UoImZlbmNlcyIsIiB7MCwzfSg/OmB7Myx9KD89W15gXFxuXSpcXG4pfH57Myx9KVteXFxuXSpcXG4iKS5yZXBsYWNlKCJsaXN0IiwiIHswLDN9KD86WyorLV18MVsuKV0pICIpLnJlcGxhY2UoImh0bWwiLCI8Lz8oPzp0YWcpKD86ICt8XFxufC8/Pil8PCg/OnNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWF8IS0tKSIpLnJlcGxhY2UoInRhZyIsQXcpLmdldFJlZ2V4KCksZzhlPXsuLi5rRCxsaGVhZGluZzp1OGUsdGFibGU6UGoscGFyYWdyYXBoOm5uKGJEKS5yZXBsYWNlKCJociIsbTIpLnJlcGxhY2UoImhlYWRpbmciLCIgezAsM30jezEsNn0oPzpcXHN8JCkiKS5yZXBsYWNlKCJ8bGhlYWRpbmciLCIiKS5yZXBsYWNlKCJ0YWJsZSIsUGopLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgiZmVuY2VzIiwiIHswLDN9KD86YHszLH0oPz1bXmBcXG5dKlxcbil8fnszLH0pW15cXG5dKlxcbiIpLnJlcGxhY2UoImxpc3QiLCIgezAsM30oPzpbKistXXwxWy4pXSkgIikucmVwbGFjZSgiaHRtbCIsIjwvPyg/OnRhZykoPzogK3xcXG58Lz8+KXw8KD86c2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYXwhLS0pIikucmVwbGFjZSgidGFnIixBdykuZ2V0UmVnZXgoKX0seThlPXsuLi5rRCxodG1sOm5uKGBeICooPzpjb21tZW50ICooPzpcXG58XFxzKiQpfDwodGFnKVtcXHNcXFNdKz88L1xcMT4gKig/OlxcbnsyLH18XFxzKiQpfDx0YWcoPzoiW14iXSoifCdbXiddKid8XFxzW14nIi8+XFxzXSopKj8vPz4gKig/OlxcbnsyLH18XFxzKiQpKWApLnJlcGxhY2UoImNvbW1lbnQiLFREKS5yZXBsYWNlKC90YWcvZywiKD8hKD86YXxlbXxzdHJvbmd8c21hbGx8c3xjaXRlfHF8ZGZufGFiYnJ8ZGF0YXx0aW1lfGNvZGV8dmFyfHNhbXB8a2JkfHN1YnxzdXB8aXxifHV8bWFya3xydWJ5fHJ0fHJwfGJkaXxiZG98c3Bhbnxicnx3YnJ8aW5zfGRlbHxpbWcpXFxiKVxcdysoPyE6fFteXFx3XFxzQF0qQClcXGIiKS5nZXRSZWdleCgpLGRlZjovXiAqXFsoW15cXV0rKVxdOiAqPD8oW15ccz5dKyk+Pyg/OiArKFsiKF1bXlxuXStbIildKSk/ICooPzpcbit8JCkvLGhlYWRpbmc6L14oI3sxLDZ9KSguKikoPzpcbit8JCkvLGZlbmNlczpkMixsaGVhZGluZzovXiguKz8pXG4gezAsM30oPSt8LSspICooPzpcbit8JCkvLHBhcmFncmFwaDpubihiRCkucmVwbGFjZSgiaHIiLG0yKS5yZXBsYWNlKCJoZWFkaW5nIixgICojezEsNn0gKlteCl1gKS5yZXBsYWNlKCJsaGVhZGluZyIsVWopLnJlcGxhY2UoInx0YWJsZSIsIiIpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgifGZlbmNlcyIsIiIpLnJlcGxhY2UoInxsaXN0IiwiIikucmVwbGFjZSgifGh0bWwiLCIiKS5yZXBsYWNlKCJ8dGFnIiwiIikuZ2V0UmVnZXgoKX0sdjhlPS9eXFwoWyEiIyQlJicoKSorLFwtLi86Ozw9Pj9AXFtcXVxcXl9ge3x9fl0pLyx4OGU9L14oYCspKFteYF18W15gXVtcc1xTXSo/W15gXSlcMSg/IWApLyxXaj0vXiggezIsfXxcXClcbig/IVxzKiQpLyxiOGU9L14oYCt8W15gXSkoPzooPz0gezIsfVxuKXxbXHNcU10qPyg/Oig/PVtcXDwhXFtgKl9dfFxiX3wkKXxbXiBdKD89IHsyLH1cbikpKS8sX3c9L1tccHtQfVxwe1N9XS91LEVEPS9bXHNccHtQfVxwe1N9XS91LHFqPS9bXlxzXHB7UH1ccHtTfV0vdSx3OGU9bm4oL14oKD8hWypfXSlwdW5jdFNwYWNlKS8sInUiKS5yZXBsYWNlKC9wdW5jdFNwYWNlL2csRUQpLmdldFJlZ2V4KCksWWo9Lyg/IX4pW1xwe1B9XHB7U31dL3UsVDhlPS8oPyF+KVtcc1xwe1B9XHB7U31dL3UsazhlPS8oPzpbXlxzXHB7UH1ccHtTfV18fikvdSxFOGU9L1xbW15bXF1dKj9cXVwoKD86XFwufFteXFxcKFwpXXxcKCg/OlxcLnxbXlxcXChcKV0pKlwpKSpcKXxgW15gXSo/YHw8W148Pl0qPz4vZyxYaj0vXig/OlwqKyg/OigoPyFcKilwdW5jdCl8W15ccypdKSl8Xl8rKD86KCg/IV8pcHVuY3QpfChbXlxzX10pKS8sUzhlPW5uKFhqLCJ1IikucmVwbGFjZSgvcHVuY3QvZyxfdykuZ2V0UmVnZXgoKSxDOGU9bm4oWGosInUiKS5yZXBsYWNlKC9wdW5jdC9nLFlqKS5nZXRSZWdleCgpLGpqPSJeW15fKl0qP19fW15fKl0qP1xcKlteXypdKj8oPz1fXyl8W14qXSsoPz1bXipdKXwoPyFcXCopcHVuY3QoXFwqKykoPz1bXFxzXXwkKXxub3RQdW5jdFNwYWNlKFxcKispKD8hXFwqKSg/PXB1bmN0U3BhY2V8JCl8KD8hXFwqKXB1bmN0U3BhY2UoXFwqKykoPz1ub3RQdW5jdFNwYWNlKXxbXFxzXShcXCorKSg/IVxcKikoPz1wdW5jdCl8KD8hXFwqKXB1bmN0KFxcKispKD8hXFwqKSg/PXB1bmN0KXxub3RQdW5jdFNwYWNlKFxcKispKD89bm90UHVuY3RTcGFjZSkiLEE4ZT1ubihqaiwiZ3UiKS5yZXBsYWNlKC9ub3RQdW5jdFNwYWNlL2cscWopLnJlcGxhY2UoL3B1bmN0U3BhY2UvZyxFRCkucmVwbGFjZSgvcHVuY3QvZyxfdykuZ2V0UmVnZXgoKSxfOGU9bm4oamosImd1IikucmVwbGFjZSgvbm90UHVuY3RTcGFjZS9nLGs4ZSkucmVwbGFjZSgvcHVuY3RTcGFjZS9nLFQ4ZSkucmVwbGFjZSgvcHVuY3QvZyxZaikuZ2V0UmVnZXgoKSxEOGU9bm4oIl5bXl8qXSo/XFwqXFwqW15fKl0qP19bXl8qXSo/KD89XFwqXFwqKXxbXl9dKyg/PVteX10pfCg/IV8pcHVuY3QoXyspKD89W1xcc118JCl8bm90UHVuY3RTcGFjZShfKykoPyFfKSg/PXB1bmN0U3BhY2V8JCl8KD8hXylwdW5jdFNwYWNlKF8rKSg/PW5vdFB1bmN0U3BhY2UpfFtcXHNdKF8rKSg/IV8pKD89cHVuY3QpfCg/IV8pcHVuY3QoXyspKD8hXykoPz1wdW5jdCkiLCJndSIpLnJlcGxhY2UoL25vdFB1bmN0U3BhY2UvZyxxaikucmVwbGFjZSgvcHVuY3RTcGFjZS9nLEVEKS5yZXBsYWNlKC9wdW5jdC9nLF93KS5nZXRSZWdleCgpLEw4ZT1ubigvXFwocHVuY3QpLywiZ3UiKS5yZXBsYWNlKC9wdW5jdC9nLF93KS5nZXRSZWdleCgpLFI4ZT1ubigvXjwoc2NoZW1lOlteXHNceDAwLVx4MWY8Pl0qfGVtYWlsKT4vKS5yZXBsYWNlKCJzY2hlbWUiLC9bYS16QS1aXVthLXpBLVowLTkrLi1dezEsMzF9LykucmVwbGFjZSgiZW1haWwiLC9bYS16QS1aMC05LiEjJCUmJyorLz0/Xl9ge3x9fi1dKyhAKVthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSsoPyFbLV9dKS8pLmdldFJlZ2V4KCksTjhlPW5uKFREKS5yZXBsYWNlKCIoPzotLT58JCkiLCItLT4iKS5nZXRSZWdleCgpLE04ZT1ubigiXmNvbW1lbnR8XjwvW2EtekEtWl1bXFx3Oi1dKlxccyo+fF48W2EtekEtWl1bXFx3LV0qKD86YXR0cmlidXRlKSo/XFxzKi8/PnxePFxcP1tcXHNcXFNdKj9cXD8+fF48IVthLXpBLVpdK1xcc1tcXHNcXFNdKj8+fF48IVxcW0NEQVRBXFxbW1xcc1xcU10qP1xcXVxcXT4iKS5yZXBsYWNlKCJjb21tZW50IixOOGUpLnJlcGxhY2UoImF0dHJpYnV0ZSIsL1xzK1thLXpBLVo6X11bXHcuOi1dKig/OlxzKj1ccyoiW14iXSoifFxzKj1ccyonW14nXSonfFxzKj1ccypbXlxzIic9PD5gXSspPy8pLmdldFJlZ2V4KCksQ3c9Lyg/OlxbKD86XFwufFteXFtcXVxcXSkqXF18XFwufGBbXmBdKmB8W15cW1xdXFxgXSkqPy8sSThlPW5uKC9eIT9cWyhsYWJlbClcXVwoXHMqKGhyZWYpKD86XHMrKHRpdGxlKSk/XHMqXCkvKS5yZXBsYWNlKCJsYWJlbCIsQ3cpLnJlcGxhY2UoImhyZWYiLC88KD86XFwufFteXG48PlxcXSkrPnxbXlxzXHgwMC1ceDFmXSovKS5yZXBsYWNlKCJ0aXRsZSIsLyIoPzpcXCI/fFteIlxcXSkqInwnKD86XFwnP3xbXidcXF0pKid8XCgoPzpcXFwpP3xbXilcXF0pKlwpLykuZ2V0UmVnZXgoKSxLaj1ubigvXiE/XFsobGFiZWwpXF1cWyhyZWYpXF0vKS5yZXBsYWNlKCJsYWJlbCIsQ3cpLnJlcGxhY2UoInJlZiIsd0QpLmdldFJlZ2V4KCksUWo9bm4oL14hP1xbKHJlZilcXSg/OlxbXF0pPy8pLnJlcGxhY2UoInJlZiIsd0QpLmdldFJlZ2V4KCksTzhlPW5uKCJyZWZsaW5rfG5vbGluayg/IVxcKCkiLCJnIikucmVwbGFjZSgicmVmbGluayIsS2opLnJlcGxhY2UoIm5vbGluayIsUWopLmdldFJlZ2V4KCksU0Q9e19iYWNrcGVkYWw6ZDIsYW55UHVuY3R1YXRpb246TDhlLGF1dG9saW5rOlI4ZSxibG9ja1NraXA6RThlLGJyOldqLGNvZGU6eDhlLGRlbDpkMixlbVN0cm9uZ0xEZWxpbTpTOGUsZW1TdHJvbmdSRGVsaW1Bc3Q6QThlLGVtU3Ryb25nUkRlbGltVW5kOkQ4ZSxlc2NhcGU6djhlLGxpbms6SThlLG5vbGluazpRaixwdW5jdHVhdGlvbjp3OGUscmVmbGluazpLaixyZWZsaW5rU2VhcmNoOk84ZSx0YWc6TThlLHRleHQ6YjhlLHVybDpkMn0sUDhlPXsuLi5TRCxsaW5rOm5uKC9eIT9cWyhsYWJlbClcXVwoKC4qPylcKS8pLnJlcGxhY2UoImxhYmVsIixDdykuZ2V0UmVnZXgoKSxyZWZsaW5rOm5uKC9eIT9cWyhsYWJlbClcXVxzKlxbKFteXF1dKilcXS8pLnJlcGxhY2UoImxhYmVsIixDdykuZ2V0UmVnZXgoKX0sZ0Q9ey4uLlNELGVtU3Ryb25nUkRlbGltQXN0Ol84ZSxlbVN0cm9uZ0xEZWxpbTpDOGUsdXJsOm5uKC9eKCg/OmZ0cHxodHRwcz8pOlwvXC98d3d3XC4pKD86W2EtekEtWjAtOVwtXStcLj8pK1teXHM8XSp8XmVtYWlsLywiaSIpLnJlcGxhY2UoImVtYWlsIiwvW0EtWmEtejAtOS5fKy1dKyhAKVthLXpBLVowLTktX10rKD86XC5bYS16QS1aMC05LV9dKlthLXpBLVowLTldKSsoPyFbLV9dKS8pLmdldFJlZ2V4KCksX2JhY2twZWRhbDovKD86W14/IS4sOjsqXycifigpJl0rfFwoW14pXSpcKXwmKD8hW2EtekEtWjAtOV0rOyQpfFs/IS4sOjsqXycifildKyg/ISQpKSsvLGRlbDovXih+fj8pKD89W15cc35dKSgoPzpcXC58W15cXF0pKj8oPzpcXC58W15cc35cXF0pKVwxKD89W15+XXwkKS8sdGV4dDovXihbYH5dK3xbXmB+XSkoPzooPz0gezIsfVxuKXwoPz1bYS16QS1aMC05LiEjJCUmJyorXC89P19ge1x8fX4tXStAKXxbXHNcU10qPyg/Oig/PVtcXDwhXFtgKn5fXXxcYl98aHR0cHM/OlwvXC98ZnRwOlwvXC98d3d3XC58JCl8W14gXSg/PSB7Mix9XG4pfFteYS16QS1aMC05LiEjJCUmJyorXC89P19ge1x8fX4tXSg/PVthLXpBLVowLTkuISMkJSYnKitcLz0/X2B7XHx9fi1dK0ApKSkvfSxCOGU9ey4uLmdELGJyOm5uKFdqKS5yZXBsYWNlKCJ7Mix9IiwiKiIpLmdldFJlZ2V4KCksdGV4dDpubihnRC50ZXh0KS5yZXBsYWNlKCJcXGJfIiwiXFxiX3wgezIsfVxcbiIpLnJlcGxhY2UoL1x7MixcfS9nLCIqIikuZ2V0UmVnZXgoKX0sU3c9e25vcm1hbDprRCxnZm06ZzhlLHBlZGFudGljOnk4ZX0saDI9e25vcm1hbDpTRCxnZm06Z0QsYnJlYWtzOkI4ZSxwZWRhbnRpYzpQOGV9LEY4ZT17IiYiOiImYW1wOyIsIjwiOiImbHQ7IiwiPiI6IiZndDsiLCciJzoiJnF1b3Q7IiwiJyI6IiYjMzk7In0sQmo9byh0PT5GOGVbdF0sImdldEVzY2FwZVJlcGxhY2VtZW50Iik7byhwYywiZXNjYXBlIik7byhGaiwiY2xlYW5VcmwiKTtvKCRqLCJzcGxpdENlbGxzIik7byhmMiwicnRyaW0iKTtvKCQ4ZSwiZmluZENsb3NpbmdCcmFja2V0Iik7byh6aiwib3V0cHV0TGluayIpO28oejhlLCJpbmRlbnRDb2RlQ29tcGVuc2F0aW9uIik7aG09Y2xhc3N7c3RhdGlje28odGhpcywiX1Rva2VuaXplciIpfW9wdGlvbnM7cnVsZXM7bGV4ZXI7Y29uc3RydWN0b3IoZSl7dGhpcy5vcHRpb25zPWV8fElkfXNwYWNlKGUpe2xldCByPXRoaXMucnVsZXMuYmxvY2submV3bGluZS5leGVjKGUpO2lmKHImJnJbMF0ubGVuZ3RoPjApcmV0dXJue3R5cGU6InNwYWNlIixyYXc6clswXX19Y29kZShlKXtsZXQgcj10aGlzLnJ1bGVzLmJsb2NrLmNvZGUuZXhlYyhlKTtpZihyKXtsZXQgbj1yWzBdLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci5jb2RlUmVtb3ZlSW5kZW50LCIiKTtyZXR1cm57dHlwZToiY29kZSIscmF3OnJbMF0sY29kZUJsb2NrU3R5bGU6ImluZGVudGVkIix0ZXh0OnRoaXMub3B0aW9ucy5wZWRhbnRpYz9uOmYyKG4sYApgKX19fWZlbmNlcyhlKXtsZXQgcj10aGlzLnJ1bGVzLmJsb2NrLmZlbmNlcy5leGVjKGUpO2lmKHIpe2xldCBuPXJbMF0saT16OGUobixyWzNdfHwiIix0aGlzLnJ1bGVzKTtyZXR1cm57dHlwZToiY29kZSIscmF3Om4sbGFuZzpyWzJdP3JbMl0udHJpbSgpLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24sIiQxIik6clsyXSx0ZXh0Oml9fX1oZWFkaW5nKGUpe2xldCByPXRoaXMucnVsZXMuYmxvY2suaGVhZGluZy5leGVjKGUpO2lmKHIpe2xldCBuPXJbMl0udHJpbSgpO2lmKHRoaXMucnVsZXMub3RoZXIuZW5kaW5nSGFzaC50ZXN0KG4pKXtsZXQgaT1mMihuLCIjIik7KHRoaXMub3B0aW9ucy5wZWRhbnRpY3x8IWl8fHRoaXMucnVsZXMub3RoZXIuZW5kaW5nU3BhY2VDaGFyLnRlc3QoaSkpJiYobj1pLnRyaW0oKSl9cmV0dXJue3R5cGU6ImhlYWRpbmciLHJhdzpyWzBdLGRlcHRoOnJbMV0ubGVuZ3RoLHRleHQ6bix0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmUobil9fX1ocihlKXtsZXQgcj10aGlzLnJ1bGVzLmJsb2NrLmhyLmV4ZWMoZSk7aWYocilyZXR1cm57dHlwZToiaHIiLHJhdzpmMihyWzBdLGAKYCl9fWJsb2NrcXVvdGUoZSl7bGV0IHI9dGhpcy5ydWxlcy5ibG9jay5ibG9ja3F1b3RlLmV4ZWMoZSk7aWYocil7bGV0IG49ZjIoclswXSxgCmApLnNwbGl0KGAKYCksaT0iIixhPSIiLHM9W107Zm9yKDtuLmxlbmd0aD4wOyl7bGV0IGw9ITEsdT1bXSxoO2ZvcihoPTA7aDxuLmxlbmd0aDtoKyspaWYodGhpcy5ydWxlcy5vdGhlci5ibG9ja3F1b3RlU3RhcnQudGVzdChuW2hdKSl1LnB1c2gobltoXSksbD0hMDtlbHNlIGlmKCFsKXUucHVzaChuW2hdKTtlbHNlIGJyZWFrO249bi5zbGljZShoKTtsZXQgZj11LmpvaW4oYApgKSxkPWYucmVwbGFjZSh0aGlzLnJ1bGVzLm90aGVyLmJsb2NrcXVvdGVTZXRleHRSZXBsYWNlLGAKICAgICQxYCkucmVwbGFjZSh0aGlzLnJ1bGVzLm90aGVyLmJsb2NrcXVvdGVTZXRleHRSZXBsYWNlMiwiIik7aT1pP2Ake2l9CiR7Zn1gOmYsYT1hP2Ake2F9CiR7ZH1gOmQ7bGV0IHA9dGhpcy5sZXhlci5zdGF0ZS50b3A7aWYodGhpcy5sZXhlci5zdGF0ZS50b3A9ITAsdGhpcy5sZXhlci5ibG9ja1Rva2VucyhkLHMsITApLHRoaXMubGV4ZXIuc3RhdGUudG9wPXAsbi5sZW5ndGg9PT0wKWJyZWFrO2xldCBtPXMuYXQoLTEpO2lmKG0/LnR5cGU9PT0iY29kZSIpYnJlYWs7aWYobT8udHlwZT09PSJibG9ja3F1b3RlIil7bGV0IGc9bSx5PWcucmF3K2AKYCtuLmpvaW4oYApgKSx2PXRoaXMuYmxvY2txdW90ZSh5KTtzW3MubGVuZ3RoLTFdPXYsaT1pLnN1YnN0cmluZygwLGkubGVuZ3RoLWcucmF3Lmxlbmd0aCkrdi5yYXcsYT1hLnN1YnN0cmluZygwLGEubGVuZ3RoLWcudGV4dC5sZW5ndGgpK3YudGV4dDticmVha31lbHNlIGlmKG0/LnR5cGU9PT0ibGlzdCIpe2xldCBnPW0seT1nLnJhdytgCmArbi5qb2luKGAKYCksdj10aGlzLmxpc3QoeSk7c1tzLmxlbmd0aC0xXT12LGk9aS5zdWJzdHJpbmcoMCxpLmxlbmd0aC1tLnJhdy5sZW5ndGgpK3YucmF3LGE9YS5zdWJzdHJpbmcoMCxhLmxlbmd0aC1nLnJhdy5sZW5ndGgpK3YucmF3LG49eS5zdWJzdHJpbmcocy5hdCgtMSkucmF3Lmxlbmd0aCkuc3BsaXQoYApgKTtjb250aW51ZX19cmV0dXJue3R5cGU6ImJsb2NrcXVvdGUiLHJhdzppLHRva2VuczpzLHRleHQ6YX19fWxpc3QoZSl7bGV0IHI9dGhpcy5ydWxlcy5ibG9jay5saXN0LmV4ZWMoZSk7aWYocil7bGV0IG49clsxXS50cmltKCksaT1uLmxlbmd0aD4xLGE9e3R5cGU6Imxpc3QiLHJhdzoiIixvcmRlcmVkOmksc3RhcnQ6aT8rbi5zbGljZSgwLC0xKToiIixsb29zZTohMSxpdGVtczpbXX07bj1pP2BcXGR7MSw5fVxcJHtuLnNsaWNlKC0xKX1gOmBcXCR7bn1gLHRoaXMub3B0aW9ucy5wZWRhbnRpYyYmKG49aT9uOiJbKistXSIpO2xldCBzPXRoaXMucnVsZXMub3RoZXIubGlzdEl0ZW1SZWdleChuKSxsPSExO2Zvcig7ZTspe2xldCBoPSExLGY9IiIsZD0iIjtpZighKHI9cy5leGVjKGUpKXx8dGhpcy5ydWxlcy5ibG9jay5oci50ZXN0KGUpKWJyZWFrO2Y9clswXSxlPWUuc3Vic3RyaW5nKGYubGVuZ3RoKTtsZXQgcD1yWzJdLnNwbGl0KGAKYCwxKVswXS5yZXBsYWNlKHRoaXMucnVsZXMub3RoZXIubGlzdFJlcGxhY2VUYWJzLGI9PiIgIi5yZXBlYXQoMypiLmxlbmd0aCkpLG09ZS5zcGxpdChgCmAsMSlbMF0sZz0hcC50cmltKCkseT0wO2lmKHRoaXMub3B0aW9ucy5wZWRhbnRpYz8oeT0yLGQ9cC50cmltU3RhcnQoKSk6Zz95PXJbMV0ubGVuZ3RoKzE6KHk9clsyXS5zZWFyY2godGhpcy5ydWxlcy5vdGhlci5ub25TcGFjZUNoYXIpLHk9eT40PzE6eSxkPXAuc2xpY2UoeSkseSs9clsxXS5sZW5ndGgpLGcmJnRoaXMucnVsZXMub3RoZXIuYmxhbmtMaW5lLnRlc3QobSkmJihmKz1tK2AKYCxlPWUuc3Vic3RyaW5nKG0ubGVuZ3RoKzEpLGg9ITApLCFoKXtsZXQgYj10aGlzLnJ1bGVzLm90aGVyLm5leHRCdWxsZXRSZWdleCh5KSx3PXRoaXMucnVsZXMub3RoZXIuaHJSZWdleCh5KSxDPXRoaXMucnVsZXMub3RoZXIuZmVuY2VzQmVnaW5SZWdleCh5KSxUPXRoaXMucnVsZXMub3RoZXIuaGVhZGluZ0JlZ2luUmVnZXgoeSksRT10aGlzLnJ1bGVzLm90aGVyLmh0bWxCZWdpblJlZ2V4KHkpO2Zvcig7ZTspe2xldCBBPWUuc3BsaXQoYApgLDEpWzBdLFM7aWYobT1BLHRoaXMub3B0aW9ucy5wZWRhbnRpYz8obT1tLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci5saXN0UmVwbGFjZU5lc3RpbmcsIiAgIiksUz1tKTpTPW0ucmVwbGFjZSh0aGlzLnJ1bGVzLm90aGVyLnRhYkNoYXJHbG9iYWwsIiAgICAiKSxDLnRlc3QobSl8fFQudGVzdChtKXx8RS50ZXN0KG0pfHxiLnRlc3QobSl8fHcudGVzdChtKSlicmVhaztpZihTLnNlYXJjaCh0aGlzLnJ1bGVzLm90aGVyLm5vblNwYWNlQ2hhcik+PXl8fCFtLnRyaW0oKSlkKz1gCmArUy5zbGljZSh5KTtlbHNle2lmKGd8fHAucmVwbGFjZSh0aGlzLnJ1bGVzLm90aGVyLnRhYkNoYXJHbG9iYWwsIiAgICAiKS5zZWFyY2godGhpcy5ydWxlcy5vdGhlci5ub25TcGFjZUNoYXIpPj00fHxDLnRlc3QocCl8fFQudGVzdChwKXx8dy50ZXN0KHApKWJyZWFrO2QrPWAKYCttfSFnJiYhbS50cmltKCkmJihnPSEwKSxmKz1BK2AKYCxlPWUuc3Vic3RyaW5nKEEubGVuZ3RoKzEpLHA9Uy5zbGljZSh5KX19YS5sb29zZXx8KGw/YS5sb29zZT0hMDp0aGlzLnJ1bGVzLm90aGVyLmRvdWJsZUJsYW5rTGluZS50ZXN0KGYpJiYobD0hMCkpO2xldCB2PW51bGwseDt0aGlzLm9wdGlvbnMuZ2ZtJiYodj10aGlzLnJ1bGVzLm90aGVyLmxpc3RJc1Rhc2suZXhlYyhkKSx2JiYoeD12WzBdIT09IlsgXSAiLGQ9ZC5yZXBsYWNlKHRoaXMucnVsZXMub3RoZXIubGlzdFJlcGxhY2VUYXNrLCIiKSkpLGEuaXRlbXMucHVzaCh7dHlwZToibGlzdF9pdGVtIixyYXc6Zix0YXNrOiEhdixjaGVja2VkOngsbG9vc2U6ITEsdGV4dDpkLHRva2VuczpbXX0pLGEucmF3Kz1mfWxldCB1PWEuaXRlbXMuYXQoLTEpO2lmKHUpdS5yYXc9dS5yYXcudHJpbUVuZCgpLHUudGV4dD11LnRleHQudHJpbUVuZCgpO2Vsc2UgcmV0dXJuO2EucmF3PWEucmF3LnRyaW1FbmQoKTtmb3IobGV0IGg9MDtoPGEuaXRlbXMubGVuZ3RoO2grKylpZih0aGlzLmxleGVyLnN0YXRlLnRvcD0hMSxhLml0ZW1zW2hdLnRva2Vucz10aGlzLmxleGVyLmJsb2NrVG9rZW5zKGEuaXRlbXNbaF0udGV4dCxbXSksIWEubG9vc2Upe2xldCBmPWEuaXRlbXNbaF0udG9rZW5zLmZpbHRlcihwPT5wLnR5cGU9PT0ic3BhY2UiKSxkPWYubGVuZ3RoPjAmJmYuc29tZShwPT50aGlzLnJ1bGVzLm90aGVyLmFueUxpbmUudGVzdChwLnJhdykpO2EubG9vc2U9ZH1pZihhLmxvb3NlKWZvcihsZXQgaD0wO2g8YS5pdGVtcy5sZW5ndGg7aCsrKWEuaXRlbXNbaF0ubG9vc2U9ITA7cmV0dXJuIGF9fWh0bWwoZSl7bGV0IHI9dGhpcy5ydWxlcy5ibG9jay5odG1sLmV4ZWMoZSk7aWYocilyZXR1cm57dHlwZToiaHRtbCIsYmxvY2s6ITAscmF3OnJbMF0scHJlOnJbMV09PT0icHJlInx8clsxXT09PSJzY3JpcHQifHxyWzFdPT09InN0eWxlIix0ZXh0OnJbMF19fWRlZihlKXtsZXQgcj10aGlzLnJ1bGVzLmJsb2NrLmRlZi5leGVjKGUpO2lmKHIpe2xldCBuPXJbMV0udG9Mb3dlckNhc2UoKS5yZXBsYWNlKHRoaXMucnVsZXMub3RoZXIubXVsdGlwbGVTcGFjZUdsb2JhbCwiICIpLGk9clsyXT9yWzJdLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci5ocmVmQnJhY2tldHMsIiQxIikucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5hbnlQdW5jdHVhdGlvbiwiJDEiKToiIixhPXJbM10/clszXS5zdWJzdHJpbmcoMSxyWzNdLmxlbmd0aC0xKS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLCIkMSIpOnJbM107cmV0dXJue3R5cGU6ImRlZiIsdGFnOm4scmF3OnJbMF0saHJlZjppLHRpdGxlOmF9fX10YWJsZShlKXtsZXQgcj10aGlzLnJ1bGVzLmJsb2NrLnRhYmxlLmV4ZWMoZSk7aWYoIXJ8fCF0aGlzLnJ1bGVzLm90aGVyLnRhYmxlRGVsaW1pdGVyLnRlc3QoclsyXSkpcmV0dXJuO2xldCBuPSRqKHJbMV0pLGk9clsyXS5yZXBsYWNlKHRoaXMucnVsZXMub3RoZXIudGFibGVBbGlnbkNoYXJzLCIiKS5zcGxpdCgifCIpLGE9clszXT8udHJpbSgpP3JbM10ucmVwbGFjZSh0aGlzLnJ1bGVzLm90aGVyLnRhYmxlUm93QmxhbmtMaW5lLCIiKS5zcGxpdChgCmApOltdLHM9e3R5cGU6InRhYmxlIixyYXc6clswXSxoZWFkZXI6W10sYWxpZ246W10scm93czpbXX07aWYobi5sZW5ndGg9PT1pLmxlbmd0aCl7Zm9yKGxldCBsIG9mIGkpdGhpcy5ydWxlcy5vdGhlci50YWJsZUFsaWduUmlnaHQudGVzdChsKT9zLmFsaWduLnB1c2goInJpZ2h0Iik6dGhpcy5ydWxlcy5vdGhlci50YWJsZUFsaWduQ2VudGVyLnRlc3QobCk/cy5hbGlnbi5wdXNoKCJjZW50ZXIiKTp0aGlzLnJ1bGVzLm90aGVyLnRhYmxlQWxpZ25MZWZ0LnRlc3QobCk/cy5hbGlnbi5wdXNoKCJsZWZ0Iik6cy5hbGlnbi5wdXNoKG51bGwpO2ZvcihsZXQgbD0wO2w8bi5sZW5ndGg7bCsrKXMuaGVhZGVyLnB1c2goe3RleHQ6bltsXSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmUobltsXSksaGVhZGVyOiEwLGFsaWduOnMuYWxpZ25bbF19KTtmb3IobGV0IGwgb2YgYSlzLnJvd3MucHVzaCgkaihsLHMuaGVhZGVyLmxlbmd0aCkubWFwKCh1LGgpPT4oe3RleHQ6dSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmUodSksaGVhZGVyOiExLGFsaWduOnMuYWxpZ25baF19KSkpO3JldHVybiBzfX1saGVhZGluZyhlKXtsZXQgcj10aGlzLnJ1bGVzLmJsb2NrLmxoZWFkaW5nLmV4ZWMoZSk7aWYocilyZXR1cm57dHlwZToiaGVhZGluZyIscmF3OnJbMF0sZGVwdGg6clsyXS5jaGFyQXQoMCk9PT0iPSI/MToyLHRleHQ6clsxXSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmUoclsxXSl9fXBhcmFncmFwaChlKXtsZXQgcj10aGlzLnJ1bGVzLmJsb2NrLnBhcmFncmFwaC5leGVjKGUpO2lmKHIpe2xldCBuPXJbMV0uY2hhckF0KHJbMV0ubGVuZ3RoLTEpPT09YApgP3JbMV0uc2xpY2UoMCwtMSk6clsxXTtyZXR1cm57dHlwZToicGFyYWdyYXBoIixyYXc6clswXSx0ZXh0Om4sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKG4pfX19dGV4dChlKXtsZXQgcj10aGlzLnJ1bGVzLmJsb2NrLnRleHQuZXhlYyhlKTtpZihyKXJldHVybnt0eXBlOiJ0ZXh0IixyYXc6clswXSx0ZXh0OnJbMF0sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKHJbMF0pfX1lc2NhcGUoZSl7bGV0IHI9dGhpcy5ydWxlcy5pbmxpbmUuZXNjYXBlLmV4ZWMoZSk7aWYocilyZXR1cm57dHlwZToiZXNjYXBlIixyYXc6clswXSx0ZXh0OnJbMV19fXRhZyhlKXtsZXQgcj10aGlzLnJ1bGVzLmlubGluZS50YWcuZXhlYyhlKTtpZihyKXJldHVybiF0aGlzLmxleGVyLnN0YXRlLmluTGluayYmdGhpcy5ydWxlcy5vdGhlci5zdGFydEFUYWcudGVzdChyWzBdKT90aGlzLmxleGVyLnN0YXRlLmluTGluaz0hMDp0aGlzLmxleGVyLnN0YXRlLmluTGluayYmdGhpcy5ydWxlcy5vdGhlci5lbmRBVGFnLnRlc3QoclswXSkmJih0aGlzLmxleGVyLnN0YXRlLmluTGluaz0hMSksIXRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jayYmdGhpcy5ydWxlcy5vdGhlci5zdGFydFByZVNjcmlwdFRhZy50ZXN0KHJbMF0pP3RoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jaz0hMDp0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2smJnRoaXMucnVsZXMub3RoZXIuZW5kUHJlU2NyaXB0VGFnLnRlc3QoclswXSkmJih0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2s9ITEpLHt0eXBlOiJodG1sIixyYXc6clswXSxpbkxpbms6dGhpcy5sZXhlci5zdGF0ZS5pbkxpbmssaW5SYXdCbG9jazp0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2ssYmxvY2s6ITEsdGV4dDpyWzBdfX1saW5rKGUpe2xldCByPXRoaXMucnVsZXMuaW5saW5lLmxpbmsuZXhlYyhlKTtpZihyKXtsZXQgbj1yWzJdLnRyaW0oKTtpZighdGhpcy5vcHRpb25zLnBlZGFudGljJiZ0aGlzLnJ1bGVzLm90aGVyLnN0YXJ0QW5nbGVCcmFja2V0LnRlc3Qobikpe2lmKCF0aGlzLnJ1bGVzLm90aGVyLmVuZEFuZ2xlQnJhY2tldC50ZXN0KG4pKXJldHVybjtsZXQgcz1mMihuLnNsaWNlKDAsLTEpLCJcXCIpO2lmKChuLmxlbmd0aC1zLmxlbmd0aCklMj09PTApcmV0dXJufWVsc2V7bGV0IHM9JDhlKHJbMl0sIigpIik7aWYocz4tMSl7bGV0IHU9KHJbMF0uaW5kZXhPZigiISIpPT09MD81OjQpK3JbMV0ubGVuZ3RoK3M7clsyXT1yWzJdLnN1YnN0cmluZygwLHMpLHJbMF09clswXS5zdWJzdHJpbmcoMCx1KS50cmltKCksclszXT0iIn19bGV0IGk9clsyXSxhPSIiO2lmKHRoaXMub3B0aW9ucy5wZWRhbnRpYyl7bGV0IHM9dGhpcy5ydWxlcy5vdGhlci5wZWRhbnRpY0hyZWZUaXRsZS5leGVjKGkpO3MmJihpPXNbMV0sYT1zWzNdKX1lbHNlIGE9clszXT9yWzNdLnNsaWNlKDEsLTEpOiIiO3JldHVybiBpPWkudHJpbSgpLHRoaXMucnVsZXMub3RoZXIuc3RhcnRBbmdsZUJyYWNrZXQudGVzdChpKSYmKHRoaXMub3B0aW9ucy5wZWRhbnRpYyYmIXRoaXMucnVsZXMub3RoZXIuZW5kQW5nbGVCcmFja2V0LnRlc3Qobik/aT1pLnNsaWNlKDEpOmk9aS5zbGljZSgxLC0xKSksemoocix7aHJlZjppJiZpLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24sIiQxIiksdGl0bGU6YSYmYS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLCIkMSIpfSxyWzBdLHRoaXMubGV4ZXIsdGhpcy5ydWxlcyl9fXJlZmxpbmsoZSxyKXtsZXQgbjtpZigobj10aGlzLnJ1bGVzLmlubGluZS5yZWZsaW5rLmV4ZWMoZSkpfHwobj10aGlzLnJ1bGVzLmlubGluZS5ub2xpbmsuZXhlYyhlKSkpe2xldCBpPShuWzJdfHxuWzFdKS5yZXBsYWNlKHRoaXMucnVsZXMub3RoZXIubXVsdGlwbGVTcGFjZUdsb2JhbCwiICIpLGE9cltpLnRvTG93ZXJDYXNlKCldO2lmKCFhKXtsZXQgcz1uWzBdLmNoYXJBdCgwKTtyZXR1cm57dHlwZToidGV4dCIscmF3OnMsdGV4dDpzfX1yZXR1cm4gemoobixhLG5bMF0sdGhpcy5sZXhlcix0aGlzLnJ1bGVzKX19ZW1TdHJvbmcoZSxyLG49IiIpe2xldCBpPXRoaXMucnVsZXMuaW5saW5lLmVtU3Ryb25nTERlbGltLmV4ZWMoZSk7aWYoIWl8fGlbM10mJm4ubWF0Y2godGhpcy5ydWxlcy5vdGhlci51bmljb2RlQWxwaGFOdW1lcmljKSlyZXR1cm47aWYoIShpWzFdfHxpWzJdfHwiIil8fCFufHx0aGlzLnJ1bGVzLmlubGluZS5wdW5jdHVhdGlvbi5leGVjKG4pKXtsZXQgcz1bLi4uaVswXV0ubGVuZ3RoLTEsbCx1LGg9cyxmPTAsZD1pWzBdWzBdPT09IioiP3RoaXMucnVsZXMuaW5saW5lLmVtU3Ryb25nUkRlbGltQXN0OnRoaXMucnVsZXMuaW5saW5lLmVtU3Ryb25nUkRlbGltVW5kO2ZvcihkLmxhc3RJbmRleD0wLHI9ci5zbGljZSgtMSplLmxlbmd0aCtzKTsoaT1kLmV4ZWMocikpIT1udWxsOyl7aWYobD1pWzFdfHxpWzJdfHxpWzNdfHxpWzRdfHxpWzVdfHxpWzZdLCFsKWNvbnRpbnVlO2lmKHU9Wy4uLmxdLmxlbmd0aCxpWzNdfHxpWzRdKXtoKz11O2NvbnRpbnVlfWVsc2UgaWYoKGlbNV18fGlbNl0pJiZzJTMmJiEoKHMrdSklMykpe2YrPXU7Y29udGludWV9aWYoaC09dSxoPjApY29udGludWU7dT1NYXRoLm1pbih1LHUraCtmKTtsZXQgcD1bLi4uaVswXV1bMF0ubGVuZ3RoLG09ZS5zbGljZSgwLHMraS5pbmRleCtwK3UpO2lmKE1hdGgubWluKHMsdSklMil7bGV0IHk9bS5zbGljZSgxLC0xKTtyZXR1cm57dHlwZToiZW0iLHJhdzptLHRleHQ6eSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmVUb2tlbnMoeSl9fWxldCBnPW0uc2xpY2UoMiwtMik7cmV0dXJue3R5cGU6InN0cm9uZyIscmF3Om0sdGV4dDpnLHRva2Vuczp0aGlzLmxleGVyLmlubGluZVRva2VucyhnKX19fX1jb2Rlc3BhbihlKXtsZXQgcj10aGlzLnJ1bGVzLmlubGluZS5jb2RlLmV4ZWMoZSk7aWYocil7bGV0IG49clsyXS5yZXBsYWNlKHRoaXMucnVsZXMub3RoZXIubmV3TGluZUNoYXJHbG9iYWwsIiAiKSxpPXRoaXMucnVsZXMub3RoZXIubm9uU3BhY2VDaGFyLnRlc3QobiksYT10aGlzLnJ1bGVzLm90aGVyLnN0YXJ0aW5nU3BhY2VDaGFyLnRlc3QobikmJnRoaXMucnVsZXMub3RoZXIuZW5kaW5nU3BhY2VDaGFyLnRlc3Qobik7cmV0dXJuIGkmJmEmJihuPW4uc3Vic3RyaW5nKDEsbi5sZW5ndGgtMSkpLHt0eXBlOiJjb2Rlc3BhbiIscmF3OnJbMF0sdGV4dDpufX19YnIoZSl7bGV0IHI9dGhpcy5ydWxlcy5pbmxpbmUuYnIuZXhlYyhlKTtpZihyKXJldHVybnt0eXBlOiJiciIscmF3OnJbMF19fWRlbChlKXtsZXQgcj10aGlzLnJ1bGVzLmlubGluZS5kZWwuZXhlYyhlKTtpZihyKXJldHVybnt0eXBlOiJkZWwiLHJhdzpyWzBdLHRleHQ6clsyXSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmVUb2tlbnMoclsyXSl9fWF1dG9saW5rKGUpe2xldCByPXRoaXMucnVsZXMuaW5saW5lLmF1dG9saW5rLmV4ZWMoZSk7aWYocil7bGV0IG4saTtyZXR1cm4gclsyXT09PSJAIj8obj1yWzFdLGk9Im1haWx0bzoiK24pOihuPXJbMV0saT1uKSx7dHlwZToibGluayIscmF3OnJbMF0sdGV4dDpuLGhyZWY6aSx0b2tlbnM6W3t0eXBlOiJ0ZXh0IixyYXc6bix0ZXh0Om59XX19fXVybChlKXtsZXQgcjtpZihyPXRoaXMucnVsZXMuaW5saW5lLnVybC5leGVjKGUpKXtsZXQgbixpO2lmKHJbMl09PT0iQCIpbj1yWzBdLGk9Im1haWx0bzoiK247ZWxzZXtsZXQgYTtkbyBhPXJbMF0sclswXT10aGlzLnJ1bGVzLmlubGluZS5fYmFja3BlZGFsLmV4ZWMoclswXSk/LlswXT8/IiI7d2hpbGUoYSE9PXJbMF0pO249clswXSxyWzFdPT09Ind3dy4iP2k9Imh0dHA6Ly8iK3JbMF06aT1yWzBdfXJldHVybnt0eXBlOiJsaW5rIixyYXc6clswXSx0ZXh0Om4saHJlZjppLHRva2Vuczpbe3R5cGU6InRleHQiLHJhdzpuLHRleHQ6bn1dfX19aW5saW5lVGV4dChlKXtsZXQgcj10aGlzLnJ1bGVzLmlubGluZS50ZXh0LmV4ZWMoZSk7aWYocil7bGV0IG49dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrO3JldHVybnt0eXBlOiJ0ZXh0IixyYXc6clswXSx0ZXh0OnJbMF0sZXNjYXBlZDpufX19fSxBbD1jbGFzcyB0e3N0YXRpY3tvKHRoaXMsIl9MZXhlciIpfXRva2VucztvcHRpb25zO3N0YXRlO3Rva2VuaXplcjtpbmxpbmVRdWV1ZTtjb25zdHJ1Y3RvcihlKXt0aGlzLnRva2Vucz1bXSx0aGlzLnRva2Vucy5saW5rcz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMub3B0aW9ucz1lfHxJZCx0aGlzLm9wdGlvbnMudG9rZW5pemVyPXRoaXMub3B0aW9ucy50b2tlbml6ZXJ8fG5ldyBobSx0aGlzLnRva2VuaXplcj10aGlzLm9wdGlvbnMudG9rZW5pemVyLHRoaXMudG9rZW5pemVyLm9wdGlvbnM9dGhpcy5vcHRpb25zLHRoaXMudG9rZW5pemVyLmxleGVyPXRoaXMsdGhpcy5pbmxpbmVRdWV1ZT1bXSx0aGlzLnN0YXRlPXtpbkxpbms6ITEsaW5SYXdCbG9jazohMSx0b3A6ITB9O2xldCByPXtvdGhlcjp0cyxibG9jazpTdy5ub3JtYWwsaW5saW5lOmgyLm5vcm1hbH07dGhpcy5vcHRpb25zLnBlZGFudGljPyhyLmJsb2NrPVN3LnBlZGFudGljLHIuaW5saW5lPWgyLnBlZGFudGljKTp0aGlzLm9wdGlvbnMuZ2ZtJiYoci5ibG9jaz1Tdy5nZm0sdGhpcy5vcHRpb25zLmJyZWFrcz9yLmlubGluZT1oMi5icmVha3M6ci5pbmxpbmU9aDIuZ2ZtKSx0aGlzLnRva2VuaXplci5ydWxlcz1yfXN0YXRpYyBnZXQgcnVsZXMoKXtyZXR1cm57YmxvY2s6U3csaW5saW5lOmgyfX1zdGF0aWMgbGV4KGUscil7cmV0dXJuIG5ldyB0KHIpLmxleChlKX1zdGF0aWMgbGV4SW5saW5lKGUscil7cmV0dXJuIG5ldyB0KHIpLmlubGluZVRva2VucyhlKX1sZXgoZSl7ZT1lLnJlcGxhY2UodHMuY2FycmlhZ2VSZXR1cm4sYApgKSx0aGlzLmJsb2NrVG9rZW5zKGUsdGhpcy50b2tlbnMpO2ZvcihsZXQgcj0wO3I8dGhpcy5pbmxpbmVRdWV1ZS5sZW5ndGg7cisrKXtsZXQgbj10aGlzLmlubGluZVF1ZXVlW3JdO3RoaXMuaW5saW5lVG9rZW5zKG4uc3JjLG4udG9rZW5zKX1yZXR1cm4gdGhpcy5pbmxpbmVRdWV1ZT1bXSx0aGlzLnRva2Vuc31ibG9ja1Rva2VucyhlLHI9W10sbj0hMSl7Zm9yKHRoaXMub3B0aW9ucy5wZWRhbnRpYyYmKGU9ZS5yZXBsYWNlKHRzLnRhYkNoYXJHbG9iYWwsIiAgICAiKS5yZXBsYWNlKHRzLnNwYWNlTGluZSwiIikpO2U7KXtsZXQgaTtpZih0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucz8uYmxvY2s/LnNvbWUocz0+KGk9cy5jYWxsKHtsZXhlcjp0aGlzfSxlLHIpKT8oZT1lLnN1YnN0cmluZyhpLnJhdy5sZW5ndGgpLHIucHVzaChpKSwhMCk6ITEpKWNvbnRpbnVlO2lmKGk9dGhpcy50b2tlbml6ZXIuc3BhY2UoZSkpe2U9ZS5zdWJzdHJpbmcoaS5yYXcubGVuZ3RoKTtsZXQgcz1yLmF0KC0xKTtpLnJhdy5sZW5ndGg9PT0xJiZzIT09dm9pZCAwP3MucmF3Kz1gCmA6ci5wdXNoKGkpO2NvbnRpbnVlfWlmKGk9dGhpcy50b2tlbml6ZXIuY29kZShlKSl7ZT1lLnN1YnN0cmluZyhpLnJhdy5sZW5ndGgpO2xldCBzPXIuYXQoLTEpO3M/LnR5cGU9PT0icGFyYWdyYXBoInx8cz8udHlwZT09PSJ0ZXh0Ij8ocy5yYXcrPWAKYCtpLnJhdyxzLnRleHQrPWAKYCtpLnRleHQsdGhpcy5pbmxpbmVRdWV1ZS5hdCgtMSkuc3JjPXMudGV4dCk6ci5wdXNoKGkpO2NvbnRpbnVlfWlmKGk9dGhpcy50b2tlbml6ZXIuZmVuY2VzKGUpKXtlPWUuc3Vic3RyaW5nKGkucmF3Lmxlbmd0aCksci5wdXNoKGkpO2NvbnRpbnVlfWlmKGk9dGhpcy50b2tlbml6ZXIuaGVhZGluZyhlKSl7ZT1lLnN1YnN0cmluZyhpLnJhdy5sZW5ndGgpLHIucHVzaChpKTtjb250aW51ZX1pZihpPXRoaXMudG9rZW5pemVyLmhyKGUpKXtlPWUuc3Vic3RyaW5nKGkucmF3Lmxlbmd0aCksci5wdXNoKGkpO2NvbnRpbnVlfWlmKGk9dGhpcy50b2tlbml6ZXIuYmxvY2txdW90ZShlKSl7ZT1lLnN1YnN0cmluZyhpLnJhdy5sZW5ndGgpLHIucHVzaChpKTtjb250aW51ZX1pZihpPXRoaXMudG9rZW5pemVyLmxpc3QoZSkpe2U9ZS5zdWJzdHJpbmcoaS5yYXcubGVuZ3RoKSxyLnB1c2goaSk7Y29udGludWV9aWYoaT10aGlzLnRva2VuaXplci5odG1sKGUpKXtlPWUuc3Vic3RyaW5nKGkucmF3Lmxlbmd0aCksci5wdXNoKGkpO2NvbnRpbnVlfWlmKGk9dGhpcy50b2tlbml6ZXIuZGVmKGUpKXtlPWUuc3Vic3RyaW5nKGkucmF3Lmxlbmd0aCk7bGV0IHM9ci5hdCgtMSk7cz8udHlwZT09PSJwYXJhZ3JhcGgifHxzPy50eXBlPT09InRleHQiPyhzLnJhdys9YApgK2kucmF3LHMudGV4dCs9YApgK2kucmF3LHRoaXMuaW5saW5lUXVldWUuYXQoLTEpLnNyYz1zLnRleHQpOnRoaXMudG9rZW5zLmxpbmtzW2kudGFnXXx8KHRoaXMudG9rZW5zLmxpbmtzW2kudGFnXT17aHJlZjppLmhyZWYsdGl0bGU6aS50aXRsZX0pO2NvbnRpbnVlfWlmKGk9dGhpcy50b2tlbml6ZXIudGFibGUoZSkpe2U9ZS5zdWJzdHJpbmcoaS5yYXcubGVuZ3RoKSxyLnB1c2goaSk7Y29udGludWV9aWYoaT10aGlzLnRva2VuaXplci5saGVhZGluZyhlKSl7ZT1lLnN1YnN0cmluZyhpLnJhdy5sZW5ndGgpLHIucHVzaChpKTtjb250aW51ZX1sZXQgYT1lO2lmKHRoaXMub3B0aW9ucy5leHRlbnNpb25zPy5zdGFydEJsb2NrKXtsZXQgcz0xLzAsbD1lLnNsaWNlKDEpLHU7dGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuc3RhcnRCbG9jay5mb3JFYWNoKGg9Pnt1PWguY2FsbCh7bGV4ZXI6dGhpc30sbCksdHlwZW9mIHU9PSJudW1iZXIiJiZ1Pj0wJiYocz1NYXRoLm1pbihzLHUpKX0pLHM8MS8wJiZzPj0wJiYoYT1lLnN1YnN0cmluZygwLHMrMSkpfWlmKHRoaXMuc3RhdGUudG9wJiYoaT10aGlzLnRva2VuaXplci5wYXJhZ3JhcGgoYSkpKXtsZXQgcz1yLmF0KC0xKTtuJiZzPy50eXBlPT09InBhcmFncmFwaCI/KHMucmF3Kz1gCmAraS5yYXcscy50ZXh0Kz1gCmAraS50ZXh0LHRoaXMuaW5saW5lUXVldWUucG9wKCksdGhpcy5pbmxpbmVRdWV1ZS5hdCgtMSkuc3JjPXMudGV4dCk6ci5wdXNoKGkpLG49YS5sZW5ndGghPT1lLmxlbmd0aCxlPWUuc3Vic3RyaW5nKGkucmF3Lmxlbmd0aCk7Y29udGludWV9aWYoaT10aGlzLnRva2VuaXplci50ZXh0KGUpKXtlPWUuc3Vic3RyaW5nKGkucmF3Lmxlbmd0aCk7bGV0IHM9ci5hdCgtMSk7cz8udHlwZT09PSJ0ZXh0Ij8ocy5yYXcrPWAKYCtpLnJhdyxzLnRleHQrPWAKYCtpLnRleHQsdGhpcy5pbmxpbmVRdWV1ZS5wb3AoKSx0aGlzLmlubGluZVF1ZXVlLmF0KC0xKS5zcmM9cy50ZXh0KTpyLnB1c2goaSk7Y29udGludWV9aWYoZSl7bGV0IHM9IkluZmluaXRlIGxvb3Agb24gYnl0ZTogIitlLmNoYXJDb2RlQXQoMCk7aWYodGhpcy5vcHRpb25zLnNpbGVudCl7Y29uc29sZS5lcnJvcihzKTticmVha31lbHNlIHRocm93IG5ldyBFcnJvcihzKX19cmV0dXJuIHRoaXMuc3RhdGUudG9wPSEwLHJ9aW5saW5lKGUscj1bXSl7cmV0dXJuIHRoaXMuaW5saW5lUXVldWUucHVzaCh7c3JjOmUsdG9rZW5zOnJ9KSxyfWlubGluZVRva2VucyhlLHI9W10pe2xldCBuPWUsaT1udWxsO2lmKHRoaXMudG9rZW5zLmxpbmtzKXtsZXQgbD1PYmplY3Qua2V5cyh0aGlzLnRva2Vucy5saW5rcyk7aWYobC5sZW5ndGg+MClmb3IoOyhpPXRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5yZWZsaW5rU2VhcmNoLmV4ZWMobikpIT1udWxsOylsLmluY2x1ZGVzKGlbMF0uc2xpY2UoaVswXS5sYXN0SW5kZXhPZigiWyIpKzEsLTEpKSYmKG49bi5zbGljZSgwLGkuaW5kZXgpKyJbIisiYSIucmVwZWF0KGlbMF0ubGVuZ3RoLTIpKyJdIituLnNsaWNlKHRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5yZWZsaW5rU2VhcmNoLmxhc3RJbmRleCkpfWZvcig7KGk9dGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmJsb2NrU2tpcC5leGVjKG4pKSE9bnVsbDspbj1uLnNsaWNlKDAsaS5pbmRleCkrIlsiKyJhIi5yZXBlYXQoaVswXS5sZW5ndGgtMikrIl0iK24uc2xpY2UodGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmJsb2NrU2tpcC5sYXN0SW5kZXgpO2Zvcig7KGk9dGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLmV4ZWMobikpIT1udWxsOyluPW4uc2xpY2UoMCxpLmluZGV4KSsiKysiK24uc2xpY2UodGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLmxhc3RJbmRleCk7bGV0IGE9ITEscz0iIjtmb3IoO2U7KXthfHwocz0iIiksYT0hMTtsZXQgbDtpZih0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucz8uaW5saW5lPy5zb21lKGg9PihsPWguY2FsbCh7bGV4ZXI6dGhpc30sZSxyKSk/KGU9ZS5zdWJzdHJpbmcobC5yYXcubGVuZ3RoKSxyLnB1c2gobCksITApOiExKSljb250aW51ZTtpZihsPXRoaXMudG9rZW5pemVyLmVzY2FwZShlKSl7ZT1lLnN1YnN0cmluZyhsLnJhdy5sZW5ndGgpLHIucHVzaChsKTtjb250aW51ZX1pZihsPXRoaXMudG9rZW5pemVyLnRhZyhlKSl7ZT1lLnN1YnN0cmluZyhsLnJhdy5sZW5ndGgpLHIucHVzaChsKTtjb250aW51ZX1pZihsPXRoaXMudG9rZW5pemVyLmxpbmsoZSkpe2U9ZS5zdWJzdHJpbmcobC5yYXcubGVuZ3RoKSxyLnB1c2gobCk7Y29udGludWV9aWYobD10aGlzLnRva2VuaXplci5yZWZsaW5rKGUsdGhpcy50b2tlbnMubGlua3MpKXtlPWUuc3Vic3RyaW5nKGwucmF3Lmxlbmd0aCk7bGV0IGg9ci5hdCgtMSk7bC50eXBlPT09InRleHQiJiZoPy50eXBlPT09InRleHQiPyhoLnJhdys9bC5yYXcsaC50ZXh0Kz1sLnRleHQpOnIucHVzaChsKTtjb250aW51ZX1pZihsPXRoaXMudG9rZW5pemVyLmVtU3Ryb25nKGUsbixzKSl7ZT1lLnN1YnN0cmluZyhsLnJhdy5sZW5ndGgpLHIucHVzaChsKTtjb250aW51ZX1pZihsPXRoaXMudG9rZW5pemVyLmNvZGVzcGFuKGUpKXtlPWUuc3Vic3RyaW5nKGwucmF3Lmxlbmd0aCksci5wdXNoKGwpO2NvbnRpbnVlfWlmKGw9dGhpcy50b2tlbml6ZXIuYnIoZSkpe2U9ZS5zdWJzdHJpbmcobC5yYXcubGVuZ3RoKSxyLnB1c2gobCk7Y29udGludWV9aWYobD10aGlzLnRva2VuaXplci5kZWwoZSkpe2U9ZS5zdWJzdHJpbmcobC5yYXcubGVuZ3RoKSxyLnB1c2gobCk7Y29udGludWV9aWYobD10aGlzLnRva2VuaXplci5hdXRvbGluayhlKSl7ZT1lLnN1YnN0cmluZyhsLnJhdy5sZW5ndGgpLHIucHVzaChsKTtjb250aW51ZX1pZighdGhpcy5zdGF0ZS5pbkxpbmsmJihsPXRoaXMudG9rZW5pemVyLnVybChlKSkpe2U9ZS5zdWJzdHJpbmcobC5yYXcubGVuZ3RoKSxyLnB1c2gobCk7Y29udGludWV9bGV0IHU9ZTtpZih0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucz8uc3RhcnRJbmxpbmUpe2xldCBoPTEvMCxmPWUuc2xpY2UoMSksZDt0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydElubGluZS5mb3JFYWNoKHA9PntkPXAuY2FsbCh7bGV4ZXI6dGhpc30sZiksdHlwZW9mIGQ9PSJudW1iZXIiJiZkPj0wJiYoaD1NYXRoLm1pbihoLGQpKX0pLGg8MS8wJiZoPj0wJiYodT1lLnN1YnN0cmluZygwLGgrMSkpfWlmKGw9dGhpcy50b2tlbml6ZXIuaW5saW5lVGV4dCh1KSl7ZT1lLnN1YnN0cmluZyhsLnJhdy5sZW5ndGgpLGwucmF3LnNsaWNlKC0xKSE9PSJfIiYmKHM9bC5yYXcuc2xpY2UoLTEpKSxhPSEwO2xldCBoPXIuYXQoLTEpO2g/LnR5cGU9PT0idGV4dCI/KGgucmF3Kz1sLnJhdyxoLnRleHQrPWwudGV4dCk6ci5wdXNoKGwpO2NvbnRpbnVlfWlmKGUpe2xldCBoPSJJbmZpbml0ZSBsb29wIG9uIGJ5dGU6ICIrZS5jaGFyQ29kZUF0KDApO2lmKHRoaXMub3B0aW9ucy5zaWxlbnQpe2NvbnNvbGUuZXJyb3IoaCk7YnJlYWt9ZWxzZSB0aHJvdyBuZXcgRXJyb3IoaCl9fXJldHVybiByfX0sZm09Y2xhc3N7c3RhdGlje28odGhpcywiX1JlbmRlcmVyIil9b3B0aW9ucztwYXJzZXI7Y29uc3RydWN0b3IoZSl7dGhpcy5vcHRpb25zPWV8fElkfXNwYWNlKGUpe3JldHVybiIifWNvZGUoe3RleHQ6ZSxsYW5nOnIsZXNjYXBlZDpufSl7bGV0IGk9KHJ8fCIiKS5tYXRjaCh0cy5ub3RTcGFjZVN0YXJ0KT8uWzBdLGE9ZS5yZXBsYWNlKHRzLmVuZGluZ05ld2xpbmUsIiIpK2AKYDtyZXR1cm4gaT8nPHByZT48Y29kZSBjbGFzcz0ibGFuZ3VhZ2UtJytwYyhpKSsnIj4nKyhuP2E6cGMoYSwhMCkpK2A8L2NvZGU+PC9wcmU+CmA6IjxwcmU+PGNvZGU+Iisobj9hOnBjKGEsITApKStgPC9jb2RlPjwvcHJlPgpgfWJsb2NrcXVvdGUoe3Rva2VuczplfSl7cmV0dXJuYDxibG9ja3F1b3RlPgoke3RoaXMucGFyc2VyLnBhcnNlKGUpfTwvYmxvY2txdW90ZT4KYH1odG1sKHt0ZXh0OmV9KXtyZXR1cm4gZX1oZWFkaW5nKHt0b2tlbnM6ZSxkZXB0aDpyfSl7cmV0dXJuYDxoJHtyfT4ke3RoaXMucGFyc2VyLnBhcnNlSW5saW5lKGUpfTwvaCR7cn0+CmB9aHIoZSl7cmV0dXJuYDxocj4KYH1saXN0KGUpe2xldCByPWUub3JkZXJlZCxuPWUuc3RhcnQsaT0iIjtmb3IobGV0IGw9MDtsPGUuaXRlbXMubGVuZ3RoO2wrKyl7bGV0IHU9ZS5pdGVtc1tsXTtpKz10aGlzLmxpc3RpdGVtKHUpfWxldCBhPXI/Im9sIjoidWwiLHM9ciYmbiE9PTE/JyBzdGFydD0iJytuKyciJzoiIjtyZXR1cm4iPCIrYStzK2A+CmAraSsiPC8iK2ErYD4KYH1saXN0aXRlbShlKXtsZXQgcj0iIjtpZihlLnRhc2spe2xldCBuPXRoaXMuY2hlY2tib3goe2NoZWNrZWQ6ISFlLmNoZWNrZWR9KTtlLmxvb3NlP2UudG9rZW5zWzBdPy50eXBlPT09InBhcmFncmFwaCI/KGUudG9rZW5zWzBdLnRleHQ9bisiICIrZS50b2tlbnNbMF0udGV4dCxlLnRva2Vuc1swXS50b2tlbnMmJmUudG9rZW5zWzBdLnRva2Vucy5sZW5ndGg+MCYmZS50b2tlbnNbMF0udG9rZW5zWzBdLnR5cGU9PT0idGV4dCImJihlLnRva2Vuc1swXS50b2tlbnNbMF0udGV4dD1uKyIgIitwYyhlLnRva2Vuc1swXS50b2tlbnNbMF0udGV4dCksZS50b2tlbnNbMF0udG9rZW5zWzBdLmVzY2FwZWQ9ITApKTplLnRva2Vucy51bnNoaWZ0KHt0eXBlOiJ0ZXh0IixyYXc6bisiICIsdGV4dDpuKyIgIixlc2NhcGVkOiEwfSk6cis9bisiICJ9cmV0dXJuIHIrPXRoaXMucGFyc2VyLnBhcnNlKGUudG9rZW5zLCEhZS5sb29zZSksYDxsaT4ke3J9PC9saT4KYH1jaGVja2JveCh7Y2hlY2tlZDplfSl7cmV0dXJuIjxpbnB1dCAiKyhlPydjaGVja2VkPSIiICc6IiIpKydkaXNhYmxlZD0iIiB0eXBlPSJjaGVja2JveCI+J31wYXJhZ3JhcGgoe3Rva2VuczplfSl7cmV0dXJuYDxwPiR7dGhpcy5wYXJzZXIucGFyc2VJbmxpbmUoZSl9PC9wPgpgfXRhYmxlKGUpe2xldCByPSIiLG49IiI7Zm9yKGxldCBhPTA7YTxlLmhlYWRlci5sZW5ndGg7YSsrKW4rPXRoaXMudGFibGVjZWxsKGUuaGVhZGVyW2FdKTtyKz10aGlzLnRhYmxlcm93KHt0ZXh0Om59KTtsZXQgaT0iIjtmb3IobGV0IGE9MDthPGUucm93cy5sZW5ndGg7YSsrKXtsZXQgcz1lLnJvd3NbYV07bj0iIjtmb3IobGV0IGw9MDtsPHMubGVuZ3RoO2wrKyluKz10aGlzLnRhYmxlY2VsbChzW2xdKTtpKz10aGlzLnRhYmxlcm93KHt0ZXh0Om59KX1yZXR1cm4gaSYmKGk9YDx0Ym9keT4ke2l9PC90Ym9keT5gKSxgPHRhYmxlPgo8dGhlYWQ+CmArcitgPC90aGVhZD4KYCtpK2A8L3RhYmxlPgpgfXRhYmxlcm93KHt0ZXh0OmV9KXtyZXR1cm5gPHRyPgoke2V9PC90cj4KYH10YWJsZWNlbGwoZSl7bGV0IHI9dGhpcy5wYXJzZXIucGFyc2VJbmxpbmUoZS50b2tlbnMpLG49ZS5oZWFkZXI/InRoIjoidGQiO3JldHVybihlLmFsaWduP2A8JHtufSBhbGlnbj0iJHtlLmFsaWdufSI+YDpgPCR7bn0+YCkrcitgPC8ke259PgpgfXN0cm9uZyh7dG9rZW5zOmV9KXtyZXR1cm5gPHN0cm9uZz4ke3RoaXMucGFyc2VyLnBhcnNlSW5saW5lKGUpfTwvc3Ryb25nPmB9ZW0oe3Rva2VuczplfSl7cmV0dXJuYDxlbT4ke3RoaXMucGFyc2VyLnBhcnNlSW5saW5lKGUpfTwvZW0+YH1jb2Rlc3Bhbih7dGV4dDplfSl7cmV0dXJuYDxjb2RlPiR7cGMoZSwhMCl9PC9jb2RlPmB9YnIoZSl7cmV0dXJuIjxicj4ifWRlbCh7dG9rZW5zOmV9KXtyZXR1cm5gPGRlbD4ke3RoaXMucGFyc2VyLnBhcnNlSW5saW5lKGUpfTwvZGVsPmB9bGluayh7aHJlZjplLHRpdGxlOnIsdG9rZW5zOm59KXtsZXQgaT10aGlzLnBhcnNlci5wYXJzZUlubGluZShuKSxhPUZqKGUpO2lmKGE9PT1udWxsKXJldHVybiBpO2U9YTtsZXQgcz0nPGEgaHJlZj0iJytlKyciJztyZXR1cm4gciYmKHMrPScgdGl0bGU9IicrcGMocikrJyInKSxzKz0iPiIraSsiPC9hPiIsc31pbWFnZSh7aHJlZjplLHRpdGxlOnIsdGV4dDpufSl7bGV0IGk9RmooZSk7aWYoaT09PW51bGwpcmV0dXJuIHBjKG4pO2U9aTtsZXQgYT1gPGltZyBzcmM9IiR7ZX0iIGFsdD0iJHtufSJgO3JldHVybiByJiYoYSs9YCB0aXRsZT0iJHtwYyhyKX0iYCksYSs9Ij4iLGF9dGV4dChlKXtyZXR1cm4idG9rZW5zImluIGUmJmUudG9rZW5zP3RoaXMucGFyc2VyLnBhcnNlSW5saW5lKGUudG9rZW5zKToiZXNjYXBlZCJpbiBlJiZlLmVzY2FwZWQ/ZS50ZXh0OnBjKGUudGV4dCl9fSxwMj1jbGFzc3tzdGF0aWN7byh0aGlzLCJfVGV4dFJlbmRlcmVyIil9c3Ryb25nKHt0ZXh0OmV9KXtyZXR1cm4gZX1lbSh7dGV4dDplfSl7cmV0dXJuIGV9Y29kZXNwYW4oe3RleHQ6ZX0pe3JldHVybiBlfWRlbCh7dGV4dDplfSl7cmV0dXJuIGV9aHRtbCh7dGV4dDplfSl7cmV0dXJuIGV9dGV4dCh7dGV4dDplfSl7cmV0dXJuIGV9bGluayh7dGV4dDplfSl7cmV0dXJuIiIrZX1pbWFnZSh7dGV4dDplfSl7cmV0dXJuIiIrZX1icigpe3JldHVybiIifX0sX2w9Y2xhc3MgdHtzdGF0aWN7byh0aGlzLCJfUGFyc2VyIil9b3B0aW9ucztyZW5kZXJlcjt0ZXh0UmVuZGVyZXI7Y29uc3RydWN0b3IoZSl7dGhpcy5vcHRpb25zPWV8fElkLHRoaXMub3B0aW9ucy5yZW5kZXJlcj10aGlzLm9wdGlvbnMucmVuZGVyZXJ8fG5ldyBmbSx0aGlzLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcix0aGlzLnJlbmRlcmVyLm9wdGlvbnM9dGhpcy5vcHRpb25zLHRoaXMucmVuZGVyZXIucGFyc2VyPXRoaXMsdGhpcy50ZXh0UmVuZGVyZXI9bmV3IHAyfXN0YXRpYyBwYXJzZShlLHIpe3JldHVybiBuZXcgdChyKS5wYXJzZShlKX1zdGF0aWMgcGFyc2VJbmxpbmUoZSxyKXtyZXR1cm4gbmV3IHQocikucGFyc2VJbmxpbmUoZSl9cGFyc2UoZSxyPSEwKXtsZXQgbj0iIjtmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKyl7bGV0IGE9ZVtpXTtpZih0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucz8ucmVuZGVyZXJzPy5bYS50eXBlXSl7bGV0IGw9YSx1PXRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1tsLnR5cGVdLmNhbGwoe3BhcnNlcjp0aGlzfSxsKTtpZih1IT09ITF8fCFbInNwYWNlIiwiaHIiLCJoZWFkaW5nIiwiY29kZSIsInRhYmxlIiwiYmxvY2txdW90ZSIsImxpc3QiLCJodG1sIiwicGFyYWdyYXBoIiwidGV4dCJdLmluY2x1ZGVzKGwudHlwZSkpe24rPXV8fCIiO2NvbnRpbnVlfX1sZXQgcz1hO3N3aXRjaChzLnR5cGUpe2Nhc2Uic3BhY2UiOntuKz10aGlzLnJlbmRlcmVyLnNwYWNlKHMpO2NvbnRpbnVlfWNhc2UiaHIiOntuKz10aGlzLnJlbmRlcmVyLmhyKHMpO2NvbnRpbnVlfWNhc2UiaGVhZGluZyI6e24rPXRoaXMucmVuZGVyZXIuaGVhZGluZyhzKTtjb250aW51ZX1jYXNlImNvZGUiOntuKz10aGlzLnJlbmRlcmVyLmNvZGUocyk7Y29udGludWV9Y2FzZSJ0YWJsZSI6e24rPXRoaXMucmVuZGVyZXIudGFibGUocyk7Y29udGludWV9Y2FzZSJibG9ja3F1b3RlIjp7bis9dGhpcy5yZW5kZXJlci5ibG9ja3F1b3RlKHMpO2NvbnRpbnVlfWNhc2UibGlzdCI6e24rPXRoaXMucmVuZGVyZXIubGlzdChzKTtjb250aW51ZX1jYXNlImh0bWwiOntuKz10aGlzLnJlbmRlcmVyLmh0bWwocyk7Y29udGludWV9Y2FzZSJwYXJhZ3JhcGgiOntuKz10aGlzLnJlbmRlcmVyLnBhcmFncmFwaChzKTtjb250aW51ZX1jYXNlInRleHQiOntsZXQgbD1zLHU9dGhpcy5yZW5kZXJlci50ZXh0KGwpO2Zvcig7aSsxPGUubGVuZ3RoJiZlW2krMV0udHlwZT09PSJ0ZXh0IjspbD1lWysraV0sdSs9YApgK3RoaXMucmVuZGVyZXIudGV4dChsKTtyP24rPXRoaXMucmVuZGVyZXIucGFyYWdyYXBoKHt0eXBlOiJwYXJhZ3JhcGgiLHJhdzp1LHRleHQ6dSx0b2tlbnM6W3t0eXBlOiJ0ZXh0IixyYXc6dSx0ZXh0OnUsZXNjYXBlZDohMH1dfSk6bis9dTtjb250aW51ZX1kZWZhdWx0OntsZXQgbD0nVG9rZW4gd2l0aCAiJytzLnR5cGUrJyIgdHlwZSB3YXMgbm90IGZvdW5kLic7aWYodGhpcy5vcHRpb25zLnNpbGVudClyZXR1cm4gY29uc29sZS5lcnJvcihsKSwiIjt0aHJvdyBuZXcgRXJyb3IobCl9fX1yZXR1cm4gbn1wYXJzZUlubGluZShlLHI9dGhpcy5yZW5kZXJlcil7bGV0IG49IiI7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspe2xldCBhPWVbaV07aWYodGhpcy5vcHRpb25zLmV4dGVuc2lvbnM/LnJlbmRlcmVycz8uW2EudHlwZV0pe2xldCBsPXRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1thLnR5cGVdLmNhbGwoe3BhcnNlcjp0aGlzfSxhKTtpZihsIT09ITF8fCFbImVzY2FwZSIsImh0bWwiLCJsaW5rIiwiaW1hZ2UiLCJzdHJvbmciLCJlbSIsImNvZGVzcGFuIiwiYnIiLCJkZWwiLCJ0ZXh0Il0uaW5jbHVkZXMoYS50eXBlKSl7bis9bHx8IiI7Y29udGludWV9fWxldCBzPWE7c3dpdGNoKHMudHlwZSl7Y2FzZSJlc2NhcGUiOntuKz1yLnRleHQocyk7YnJlYWt9Y2FzZSJodG1sIjp7bis9ci5odG1sKHMpO2JyZWFrfWNhc2UibGluayI6e24rPXIubGluayhzKTticmVha31jYXNlImltYWdlIjp7bis9ci5pbWFnZShzKTticmVha31jYXNlInN0cm9uZyI6e24rPXIuc3Ryb25nKHMpO2JyZWFrfWNhc2UiZW0iOntuKz1yLmVtKHMpO2JyZWFrfWNhc2UiY29kZXNwYW4iOntuKz1yLmNvZGVzcGFuKHMpO2JyZWFrfWNhc2UiYnIiOntuKz1yLmJyKHMpO2JyZWFrfWNhc2UiZGVsIjp7bis9ci5kZWwocyk7YnJlYWt9Y2FzZSJ0ZXh0Ijp7bis9ci50ZXh0KHMpO2JyZWFrfWRlZmF1bHQ6e2xldCBsPSdUb2tlbiB3aXRoICInK3MudHlwZSsnIiB0eXBlIHdhcyBub3QgZm91bmQuJztpZih0aGlzLm9wdGlvbnMuc2lsZW50KXJldHVybiBjb25zb2xlLmVycm9yKGwpLCIiO3Rocm93IG5ldyBFcnJvcihsKX19fXJldHVybiBufX0sdW09Y2xhc3N7c3RhdGlje28odGhpcywiX0hvb2tzIil9b3B0aW9ucztibG9jaztjb25zdHJ1Y3RvcihlKXt0aGlzLm9wdGlvbnM9ZXx8SWR9c3RhdGljIHBhc3NUaHJvdWdoSG9va3M9bmV3IFNldChbInByZXByb2Nlc3MiLCJwb3N0cHJvY2VzcyIsInByb2Nlc3NBbGxUb2tlbnMiXSk7cHJlcHJvY2VzcyhlKXtyZXR1cm4gZX1wb3N0cHJvY2VzcyhlKXtyZXR1cm4gZX1wcm9jZXNzQWxsVG9rZW5zKGUpe3JldHVybiBlfXByb3ZpZGVMZXhlcigpe3JldHVybiB0aGlzLmJsb2NrP0FsLmxleDpBbC5sZXhJbmxpbmV9cHJvdmlkZVBhcnNlcigpe3JldHVybiB0aGlzLmJsb2NrP19sLnBhcnNlOl9sLnBhcnNlSW5saW5lfX0seUQ9Y2xhc3N7c3RhdGlje28odGhpcywiTWFya2VkIil9ZGVmYXVsdHM9dkQoKTtvcHRpb25zPXRoaXMuc2V0T3B0aW9ucztwYXJzZT10aGlzLnBhcnNlTWFya2Rvd24oITApO3BhcnNlSW5saW5lPXRoaXMucGFyc2VNYXJrZG93bighMSk7UGFyc2VyPV9sO1JlbmRlcmVyPWZtO1RleHRSZW5kZXJlcj1wMjtMZXhlcj1BbDtUb2tlbml6ZXI9aG07SG9va3M9dW07Y29uc3RydWN0b3IoLi4uZSl7dGhpcy51c2UoLi4uZSl9d2Fsa1Rva2VucyhlLHIpe2xldCBuPVtdO2ZvcihsZXQgaSBvZiBlKXN3aXRjaChuPW4uY29uY2F0KHIuY2FsbCh0aGlzLGkpKSxpLnR5cGUpe2Nhc2UidGFibGUiOntsZXQgYT1pO2ZvcihsZXQgcyBvZiBhLmhlYWRlciluPW4uY29uY2F0KHRoaXMud2Fsa1Rva2VucyhzLnRva2VucyxyKSk7Zm9yKGxldCBzIG9mIGEucm93cylmb3IobGV0IGwgb2YgcyluPW4uY29uY2F0KHRoaXMud2Fsa1Rva2VucyhsLnRva2VucyxyKSk7YnJlYWt9Y2FzZSJsaXN0Ijp7bGV0IGE9aTtuPW4uY29uY2F0KHRoaXMud2Fsa1Rva2VucyhhLml0ZW1zLHIpKTticmVha31kZWZhdWx0OntsZXQgYT1pO3RoaXMuZGVmYXVsdHMuZXh0ZW5zaW9ucz8uY2hpbGRUb2tlbnM/LlthLnR5cGVdP3RoaXMuZGVmYXVsdHMuZXh0ZW5zaW9ucy5jaGlsZFRva2Vuc1thLnR5cGVdLmZvckVhY2gocz0+e2xldCBsPWFbc10uZmxhdCgxLzApO249bi5jb25jYXQodGhpcy53YWxrVG9rZW5zKGwscikpfSk6YS50b2tlbnMmJihuPW4uY29uY2F0KHRoaXMud2Fsa1Rva2VucyhhLnRva2VucyxyKSkpfX1yZXR1cm4gbn11c2UoLi4uZSl7bGV0IHI9dGhpcy5kZWZhdWx0cy5leHRlbnNpb25zfHx7cmVuZGVyZXJzOnt9LGNoaWxkVG9rZW5zOnt9fTtyZXR1cm4gZS5mb3JFYWNoKG49PntsZXQgaT17Li4ubn07aWYoaS5hc3luYz10aGlzLmRlZmF1bHRzLmFzeW5jfHxpLmFzeW5jfHwhMSxuLmV4dGVuc2lvbnMmJihuLmV4dGVuc2lvbnMuZm9yRWFjaChhPT57aWYoIWEubmFtZSl0aHJvdyBuZXcgRXJyb3IoImV4dGVuc2lvbiBuYW1lIHJlcXVpcmVkIik7aWYoInJlbmRlcmVyImluIGEpe2xldCBzPXIucmVuZGVyZXJzW2EubmFtZV07cz9yLnJlbmRlcmVyc1thLm5hbWVdPWZ1bmN0aW9uKC4uLmwpe2xldCB1PWEucmVuZGVyZXIuYXBwbHkodGhpcyxsKTtyZXR1cm4gdT09PSExJiYodT1zLmFwcGx5KHRoaXMsbCkpLHV9OnIucmVuZGVyZXJzW2EubmFtZV09YS5yZW5kZXJlcn1pZigidG9rZW5pemVyImluIGEpe2lmKCFhLmxldmVsfHxhLmxldmVsIT09ImJsb2NrIiYmYS5sZXZlbCE9PSJpbmxpbmUiKXRocm93IG5ldyBFcnJvcigiZXh0ZW5zaW9uIGxldmVsIG11c3QgYmUgJ2Jsb2NrJyBvciAnaW5saW5lJyIpO2xldCBzPXJbYS5sZXZlbF07cz9zLnVuc2hpZnQoYS50b2tlbml6ZXIpOnJbYS5sZXZlbF09W2EudG9rZW5pemVyXSxhLnN0YXJ0JiYoYS5sZXZlbD09PSJibG9jayI/ci5zdGFydEJsb2NrP3Iuc3RhcnRCbG9jay5wdXNoKGEuc3RhcnQpOnIuc3RhcnRCbG9jaz1bYS5zdGFydF06YS5sZXZlbD09PSJpbmxpbmUiJiYoci5zdGFydElubGluZT9yLnN0YXJ0SW5saW5lLnB1c2goYS5zdGFydCk6ci5zdGFydElubGluZT1bYS5zdGFydF0pKX0iY2hpbGRUb2tlbnMiaW4gYSYmYS5jaGlsZFRva2VucyYmKHIuY2hpbGRUb2tlbnNbYS5uYW1lXT1hLmNoaWxkVG9rZW5zKX0pLGkuZXh0ZW5zaW9ucz1yKSxuLnJlbmRlcmVyKXtsZXQgYT10aGlzLmRlZmF1bHRzLnJlbmRlcmVyfHxuZXcgZm0odGhpcy5kZWZhdWx0cyk7Zm9yKGxldCBzIGluIG4ucmVuZGVyZXIpe2lmKCEocyBpbiBhKSl0aHJvdyBuZXcgRXJyb3IoYHJlbmRlcmVyICcke3N9JyBkb2VzIG5vdCBleGlzdGApO2lmKFsib3B0aW9ucyIsInBhcnNlciJdLmluY2x1ZGVzKHMpKWNvbnRpbnVlO2xldCBsPXMsdT1uLnJlbmRlcmVyW2xdLGg9YVtsXTthW2xdPSguLi5mKT0+e2xldCBkPXUuYXBwbHkoYSxmKTtyZXR1cm4gZD09PSExJiYoZD1oLmFwcGx5KGEsZikpLGR8fCIifX1pLnJlbmRlcmVyPWF9aWYobi50b2tlbml6ZXIpe2xldCBhPXRoaXMuZGVmYXVsdHMudG9rZW5pemVyfHxuZXcgaG0odGhpcy5kZWZhdWx0cyk7Zm9yKGxldCBzIGluIG4udG9rZW5pemVyKXtpZighKHMgaW4gYSkpdGhyb3cgbmV3IEVycm9yKGB0b2tlbml6ZXIgJyR7c30nIGRvZXMgbm90IGV4aXN0YCk7aWYoWyJvcHRpb25zIiwicnVsZXMiLCJsZXhlciJdLmluY2x1ZGVzKHMpKWNvbnRpbnVlO2xldCBsPXMsdT1uLnRva2VuaXplcltsXSxoPWFbbF07YVtsXT0oLi4uZik9PntsZXQgZD11LmFwcGx5KGEsZik7cmV0dXJuIGQ9PT0hMSYmKGQ9aC5hcHBseShhLGYpKSxkfX1pLnRva2VuaXplcj1hfWlmKG4uaG9va3Mpe2xldCBhPXRoaXMuZGVmYXVsdHMuaG9va3N8fG5ldyB1bTtmb3IobGV0IHMgaW4gbi5ob29rcyl7aWYoIShzIGluIGEpKXRocm93IG5ldyBFcnJvcihgaG9vayAnJHtzfScgZG9lcyBub3QgZXhpc3RgKTtpZihbIm9wdGlvbnMiLCJibG9jayJdLmluY2x1ZGVzKHMpKWNvbnRpbnVlO2xldCBsPXMsdT1uLmhvb2tzW2xdLGg9YVtsXTt1bS5wYXNzVGhyb3VnaEhvb2tzLmhhcyhzKT9hW2xdPWY9PntpZih0aGlzLmRlZmF1bHRzLmFzeW5jKXJldHVybiBQcm9taXNlLnJlc29sdmUodS5jYWxsKGEsZikpLnRoZW4ocD0+aC5jYWxsKGEscCkpO2xldCBkPXUuY2FsbChhLGYpO3JldHVybiBoLmNhbGwoYSxkKX06YVtsXT0oLi4uZik9PntsZXQgZD11LmFwcGx5KGEsZik7cmV0dXJuIGQ9PT0hMSYmKGQ9aC5hcHBseShhLGYpKSxkfX1pLmhvb2tzPWF9aWYobi53YWxrVG9rZW5zKXtsZXQgYT10aGlzLmRlZmF1bHRzLndhbGtUb2tlbnMscz1uLndhbGtUb2tlbnM7aS53YWxrVG9rZW5zPWZ1bmN0aW9uKGwpe2xldCB1PVtdO3JldHVybiB1LnB1c2gocy5jYWxsKHRoaXMsbCkpLGEmJih1PXUuY29uY2F0KGEuY2FsbCh0aGlzLGwpKSksdX19dGhpcy5kZWZhdWx0cz17Li4udGhpcy5kZWZhdWx0cywuLi5pfX0pLHRoaXN9c2V0T3B0aW9ucyhlKXtyZXR1cm4gdGhpcy5kZWZhdWx0cz17Li4udGhpcy5kZWZhdWx0cywuLi5lfSx0aGlzfWxleGVyKGUscil7cmV0dXJuIEFsLmxleChlLHI/P3RoaXMuZGVmYXVsdHMpfXBhcnNlcihlLHIpe3JldHVybiBfbC5wYXJzZShlLHI/P3RoaXMuZGVmYXVsdHMpfXBhcnNlTWFya2Rvd24oZSl7cmV0dXJuIG8oKG4saSk9PntsZXQgYT17Li4uaX0scz17Li4udGhpcy5kZWZhdWx0cywuLi5hfSxsPXRoaXMub25FcnJvcighIXMuc2lsZW50LCEhcy5hc3luYyk7aWYodGhpcy5kZWZhdWx0cy5hc3luYz09PSEwJiZhLmFzeW5jPT09ITEpcmV0dXJuIGwobmV3IEVycm9yKCJtYXJrZWQoKTogVGhlIGFzeW5jIG9wdGlvbiB3YXMgc2V0IHRvIHRydWUgYnkgYW4gZXh0ZW5zaW9uLiBSZW1vdmUgYXN5bmM6IGZhbHNlIGZyb20gdGhlIHBhcnNlIG9wdGlvbnMgb2JqZWN0IHRvIHJldHVybiBhIFByb21pc2UuIikpO2lmKHR5cGVvZiBuPiJ1Inx8bj09PW51bGwpcmV0dXJuIGwobmV3IEVycm9yKCJtYXJrZWQoKTogaW5wdXQgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZCBvciBudWxsIikpO2lmKHR5cGVvZiBuIT0ic3RyaW5nIilyZXR1cm4gbChuZXcgRXJyb3IoIm1hcmtlZCgpOiBpbnB1dCBwYXJhbWV0ZXIgaXMgb2YgdHlwZSAiK09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuKSsiLCBzdHJpbmcgZXhwZWN0ZWQiKSk7cy5ob29rcyYmKHMuaG9va3Mub3B0aW9ucz1zLHMuaG9va3MuYmxvY2s9ZSk7bGV0IHU9cy5ob29rcz9zLmhvb2tzLnByb3ZpZGVMZXhlcigpOmU/QWwubGV4OkFsLmxleElubGluZSxoPXMuaG9va3M/cy5ob29rcy5wcm92aWRlUGFyc2VyKCk6ZT9fbC5wYXJzZTpfbC5wYXJzZUlubGluZTtpZihzLmFzeW5jKXJldHVybiBQcm9taXNlLnJlc29sdmUocy5ob29rcz9zLmhvb2tzLnByZXByb2Nlc3Mobik6bikudGhlbihmPT51KGYscykpLnRoZW4oZj0+cy5ob29rcz9zLmhvb2tzLnByb2Nlc3NBbGxUb2tlbnMoZik6ZikudGhlbihmPT5zLndhbGtUb2tlbnM/UHJvbWlzZS5hbGwodGhpcy53YWxrVG9rZW5zKGYscy53YWxrVG9rZW5zKSkudGhlbigoKT0+Zik6ZikudGhlbihmPT5oKGYscykpLnRoZW4oZj0+cy5ob29rcz9zLmhvb2tzLnBvc3Rwcm9jZXNzKGYpOmYpLmNhdGNoKGwpO3RyeXtzLmhvb2tzJiYobj1zLmhvb2tzLnByZXByb2Nlc3MobikpO2xldCBmPXUobixzKTtzLmhvb2tzJiYoZj1zLmhvb2tzLnByb2Nlc3NBbGxUb2tlbnMoZikpLHMud2Fsa1Rva2VucyYmdGhpcy53YWxrVG9rZW5zKGYscy53YWxrVG9rZW5zKTtsZXQgZD1oKGYscyk7cmV0dXJuIHMuaG9va3MmJihkPXMuaG9va3MucG9zdHByb2Nlc3MoZCkpLGR9Y2F0Y2goZil7cmV0dXJuIGwoZil9fSwicGFyc2UiKX1vbkVycm9yKGUscil7cmV0dXJuIG49PntpZihuLm1lc3NhZ2UrPWAKUGxlYXNlIHJlcG9ydCB0aGlzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXJrZWRqcy9tYXJrZWQuYCxlKXtsZXQgaT0iPHA+QW4gZXJyb3Igb2NjdXJyZWQ6PC9wPjxwcmU+IitwYyhuLm1lc3NhZ2UrIiIsITApKyI8L3ByZT4iO3JldHVybiByP1Byb21pc2UucmVzb2x2ZShpKTppfWlmKHIpcmV0dXJuIFByb21pc2UucmVqZWN0KG4pO3Rocm93IG59fX0sTWQ9bmV3IHlEO28oSnIsIm1hcmtlZCIpO0pyLm9wdGlvbnM9SnIuc2V0T3B0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gTWQuc2V0T3B0aW9ucyh0KSxKci5kZWZhdWx0cz1NZC5kZWZhdWx0cyxHaihKci5kZWZhdWx0cyksSnJ9O0pyLmdldERlZmF1bHRzPXZEO0pyLmRlZmF1bHRzPUlkO0pyLnVzZT1mdW5jdGlvbiguLi50KXtyZXR1cm4gTWQudXNlKC4uLnQpLEpyLmRlZmF1bHRzPU1kLmRlZmF1bHRzLEdqKEpyLmRlZmF1bHRzKSxKcn07SnIud2Fsa1Rva2Vucz1mdW5jdGlvbih0LGUpe3JldHVybiBNZC53YWxrVG9rZW5zKHQsZSl9O0pyLnBhcnNlSW5saW5lPU1kLnBhcnNlSW5saW5lO0pyLlBhcnNlcj1fbDtKci5wYXJzZXI9X2wucGFyc2U7SnIuUmVuZGVyZXI9Zm07SnIuVGV4dFJlbmRlcmVyPXAyO0pyLkxleGVyPUFsO0pyLmxleGVyPUFsLmxleDtKci5Ub2tlbml6ZXI9aG07SnIuSG9va3M9dW07SnIucGFyc2U9SnI7ZGt0PUpyLm9wdGlvbnMscGt0PUpyLnNldE9wdGlvbnMsbWt0PUpyLnVzZSxna3Q9SnIud2Fsa1Rva2Vucyx5a3Q9SnIucGFyc2VJbmxpbmUsdmt0PV9sLnBhcnNlLHhrdD1BbC5sZXh9KTtmdW5jdGlvbiBHOGUodCx7bWFya2Rvd25BdXRvV3JhcDplfSl7bGV0IG49dC5yZXBsYWNlKC88YnJcLz4vZyxgCmApLnJlcGxhY2UoL1xuezIsfS9nLGAKYCksaT1CNChuKTtyZXR1cm4gZT09PSExP2kucmVwbGFjZSgvIC9nLCImbmJzcDsiKTppfWZ1bmN0aW9uIEpqKHQsZT17fSl7bGV0IHI9RzhlKHQsZSksbj1Kci5sZXhlcihyKSxpPVtbXV0sYT0wO2Z1bmN0aW9uIHMobCx1PSJub3JtYWwiKXtsLnR5cGU9PT0idGV4dCI/bC50ZXh0LnNwbGl0KGAKYCkuZm9yRWFjaCgoZixkKT0+e2QhPT0wJiYoYSsrLGkucHVzaChbXSkpLGYuc3BsaXQoIiAiKS5mb3JFYWNoKHA9PntwPXAucmVwbGFjZSgvJiMzOTsvZywiJyIpLHAmJmlbYV0ucHVzaCh7Y29udGVudDpwLHR5cGU6dX0pfSl9KTpsLnR5cGU9PT0ic3Ryb25nInx8bC50eXBlPT09ImVtIj9sLnRva2Vucy5mb3JFYWNoKGg9PntzKGgsbC50eXBlKX0pOmwudHlwZT09PSJodG1sIiYmaVthXS5wdXNoKHtjb250ZW50OmwudGV4dCx0eXBlOiJub3JtYWwifSl9cmV0dXJuIG8ocywicHJvY2Vzc05vZGUiKSxuLmZvckVhY2gobD0+e2wudHlwZT09PSJwYXJhZ3JhcGgiP2wudG9rZW5zPy5mb3JFYWNoKHU9PntzKHUpfSk6bC50eXBlPT09Imh0bWwiJiZpW2FdLnB1c2goe2NvbnRlbnQ6bC50ZXh0LHR5cGU6Im5vcm1hbCJ9KX0pLGl9ZnVuY3Rpb24gZUsodCx7bWFya2Rvd25BdXRvV3JhcDplfT17fSl7bGV0IHI9SnIubGV4ZXIodCk7ZnVuY3Rpb24gbihpKXtyZXR1cm4gaS50eXBlPT09InRleHQiP2U9PT0hMT9pLnRleHQucmVwbGFjZSgvXG4gKi9nLCI8YnIvPiIpLnJlcGxhY2UoLyAvZywiJm5ic3A7Iik6aS50ZXh0LnJlcGxhY2UoL1xuICovZywiPGJyLz4iKTppLnR5cGU9PT0ic3Ryb25nIj9gPHN0cm9uZz4ke2kudG9rZW5zPy5tYXAobikuam9pbigiIil9PC9zdHJvbmc+YDppLnR5cGU9PT0iZW0iP2A8ZW0+JHtpLnRva2Vucz8ubWFwKG4pLmpvaW4oIiIpfTwvZW0+YDppLnR5cGU9PT0icGFyYWdyYXBoIj9gPHA+JHtpLnRva2Vucz8ubWFwKG4pLmpvaW4oIiIpfTwvcD5gOmkudHlwZT09PSJzcGFjZSI/IiI6aS50eXBlPT09Imh0bWwiP2Ake2kudGV4dH1gOmkudHlwZT09PSJlc2NhcGUiP2kudGV4dDpgVW5zdXBwb3J0ZWQgbWFya2Rvd246ICR7aS50eXBlfWB9cmV0dXJuIG8obiwib3V0cHV0Iiksci5tYXAobikuam9pbigiIil9dmFyIHRLPU4oKCk9PnsidXNlIHN0cmljdCI7WmooKTtQQygpO28oRzhlLCJwcmVwcm9jZXNzTWFya2Rvd24iKTtvKEpqLCJtYXJrZG93blRvTGluZXMiKTtvKGVLLCJtYXJrZG93blRvSFRNTCIpfSk7ZnVuY3Rpb24gVjhlKHQpe3JldHVybiBJbnRsLlNlZ21lbnRlcj9bLi4ubmV3IEludGwuU2VnbWVudGVyKCkuc2VnbWVudCh0KV0ubWFwKGU9PmUuc2VnbWVudCk6Wy4uLnRdfWZ1bmN0aW9uIFU4ZSh0LGUpe2xldCByPVY4ZShlLmNvbnRlbnQpO3JldHVybiBySyh0LFtdLHIsZS50eXBlKX1mdW5jdGlvbiBySyh0LGUscixuKXtpZihyLmxlbmd0aD09PTApcmV0dXJuW3tjb250ZW50OmUuam9pbigiIiksdHlwZTpufSx7Y29udGVudDoiIix0eXBlOm59XTtsZXRbaSwuLi5hXT1yLHM9Wy4uLmUsaV07cmV0dXJuIHQoW3tjb250ZW50OnMuam9pbigiIiksdHlwZTpufV0pP3JLKHQscyxhLG4pOihlLmxlbmd0aD09PTAmJmkmJihlLnB1c2goaSksci5zaGlmdCgpKSxbe2NvbnRlbnQ6ZS5qb2luKCIiKSx0eXBlOm59LHtjb250ZW50OnIuam9pbigiIiksdHlwZTpufV0pfWZ1bmN0aW9uIG5LKHQsZSl7aWYodC5zb21lKCh7Y29udGVudDpyfSk9PnIuaW5jbHVkZXMoYApgKSkpdGhyb3cgbmV3IEVycm9yKCJzcGxpdExpbmVUb0ZpdFdpZHRoIGRvZXMgbm90IHN1cHBvcnQgbmV3bGluZXMgaW4gdGhlIGxpbmUiKTtyZXR1cm4gQ0QodCxlKX1mdW5jdGlvbiBDRCh0LGUscj1bXSxuPVtdKXtpZih0Lmxlbmd0aD09PTApcmV0dXJuIG4ubGVuZ3RoPjAmJnIucHVzaChuKSxyLmxlbmd0aD4wP3I6W107bGV0IGk9IiI7dFswXS5jb250ZW50PT09IiAiJiYoaT0iICIsdC5zaGlmdCgpKTtsZXQgYT10LnNoaWZ0KCk/P3tjb250ZW50OiIgIix0eXBlOiJub3JtYWwifSxzPVsuLi5uXTtpZihpIT09IiImJnMucHVzaCh7Y29udGVudDppLHR5cGU6Im5vcm1hbCJ9KSxzLnB1c2goYSksZShzKSlyZXR1cm4gQ0QodCxlLHIscyk7aWYobi5sZW5ndGg+MClyLnB1c2gobiksdC51bnNoaWZ0KGEpO2Vsc2UgaWYoYS5jb250ZW50KXtsZXRbbCx1XT1VOGUoZSxhKTtyLnB1c2goW2xdKSx1LmNvbnRlbnQmJnQudW5zaGlmdCh1KX1yZXR1cm4gQ0QodCxlLHIpfXZhciBpSz1OKCgpPT57InVzZSBzdHJpY3QiO28oVjhlLCJzcGxpdFRleHRUb0NoYXJzIik7byhVOGUsInNwbGl0V29yZFRvRml0V2lkdGgiKTtvKHJLLCJzcGxpdFdvcmRUb0ZpdFdpZHRoUmVjdXJzaW9uIik7byhuSywic3BsaXRMaW5lVG9GaXRXaWR0aCIpO28oQ0QsInNwbGl0TGluZVRvRml0V2lkdGhSZWN1cnNpb24iKX0pO2Z1bmN0aW9uIGFLKHQsZSl7ZSYmdC5hdHRyKCJzdHlsZSIsZSl9YXN5bmMgZnVuY3Rpb24gSDhlKHQsZSxyLG4saT0hMSl7bGV0IGE9dC5hcHBlbmQoImZvcmVpZ25PYmplY3QiKTthLmF0dHIoIndpZHRoIixgJHsxMCpyfXB4YCksYS5hdHRyKCJoZWlnaHQiLGAkezEwKnJ9cHhgKTtsZXQgcz1hLmFwcGVuZCgieGh0bWw6ZGl2IiksbD1lLmxhYmVsO2UubGFiZWwmJnBpKGUubGFiZWwpJiYobD1hd2FpdCBtaChlLmxhYmVsLnJlcGxhY2UoWmUubGluZUJyZWFrUmVnZXgsYApgKSxtZSgpKSk7bGV0IHU9ZS5pc05vZGU/Im5vZGVMYWJlbCI6ImVkZ2VMYWJlbCIsaD1zLmFwcGVuZCgic3BhbiIpO2guaHRtbChsKSxhSyhoLGUubGFiZWxTdHlsZSksaC5hdHRyKCJjbGFzcyIsYCR7dX0gJHtufWApLGFLKHMsZS5sYWJlbFN0eWxlKSxzLnN0eWxlKCJkaXNwbGF5IiwidGFibGUtY2VsbCIpLHMuc3R5bGUoIndoaXRlLXNwYWNlIiwibm93cmFwIikscy5zdHlsZSgibGluZS1oZWlnaHQiLCIxLjUiKSxzLnN0eWxlKCJtYXgtd2lkdGgiLHIrInB4Iikscy5zdHlsZSgidGV4dC1hbGlnbiIsImNlbnRlciIpLHMuYXR0cigieG1sbnMiLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiksaSYmcy5hdHRyKCJjbGFzcyIsImxhYmVsQmtnIik7bGV0IGY9cy5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIGYud2lkdGg9PT1yJiYocy5zdHlsZSgiZGlzcGxheSIsInRhYmxlIikscy5zdHlsZSgid2hpdGUtc3BhY2UiLCJicmVhay1zcGFjZXMiKSxzLnN0eWxlKCJ3aWR0aCIscisicHgiKSxmPXMubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSxhLm5vZGUoKX1mdW5jdGlvbiBBRCh0LGUscil7cmV0dXJuIHQuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoImNsYXNzIiwidGV4dC1vdXRlci10c3BhbiIpLmF0dHIoIngiLDApLmF0dHIoInkiLGUqci0uMSsiZW0iKS5hdHRyKCJkeSIscisiZW0iKX1mdW5jdGlvbiBXOGUodCxlLHIpe2xldCBuPXQuYXBwZW5kKCJ0ZXh0IiksaT1BRChuLDEsZSk7X0QoaSxyKTtsZXQgYT1pLm5vZGUoKS5nZXRDb21wdXRlZFRleHRMZW5ndGgoKTtyZXR1cm4gbi5yZW1vdmUoKSxhfWZ1bmN0aW9uIHNLKHQsZSxyKXtsZXQgbj10LmFwcGVuZCgidGV4dCIpLGk9QUQobiwxLGUpO19EKGksW3tjb250ZW50OnIsdHlwZToibm9ybWFsIn1dKTtsZXQgYT1pLm5vZGUoKT8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIGEmJm4ucmVtb3ZlKCksYX1mdW5jdGlvbiBxOGUodCxlLHIsbj0hMSl7bGV0IGE9ZS5hcHBlbmQoImciKSxzPWEuaW5zZXJ0KCJyZWN0IikuYXR0cigiY2xhc3MiLCJiYWNrZ3JvdW5kIikuYXR0cigic3R5bGUiLCJzdHJva2U6IG5vbmUiKSxsPWEuYXBwZW5kKCJ0ZXh0IikuYXR0cigieSIsIi0xMC4xIiksdT0wO2ZvcihsZXQgaCBvZiByKXtsZXQgZj1vKHA9Plc4ZShhLDEuMSxwKTw9dCwiY2hlY2tXaWR0aCIpLGQ9ZihoKT9baF06bksoaCxmKTtmb3IobGV0IHAgb2YgZCl7bGV0IG09QUQobCx1LDEuMSk7X0QobSxwKSx1Kyt9fWlmKG4pe2xldCBoPWwubm9kZSgpLmdldEJCb3goKSxmPTI7cmV0dXJuIHMuYXR0cigieCIsaC54LWYpLmF0dHIoInkiLGgueS1mKS5hdHRyKCJ3aWR0aCIsaC53aWR0aCsyKmYpLmF0dHIoImhlaWdodCIsaC5oZWlnaHQrMipmKSxhLm5vZGUoKX1lbHNlIHJldHVybiBsLm5vZGUoKX1mdW5jdGlvbiBfRCh0LGUpe3QudGV4dCgiIiksZS5mb3JFYWNoKChyLG4pPT57bGV0IGk9dC5hcHBlbmQoInRzcGFuIikuYXR0cigiZm9udC1zdHlsZSIsci50eXBlPT09ImVtIj8iaXRhbGljIjoibm9ybWFsIikuYXR0cigiY2xhc3MiLCJ0ZXh0LWlubmVyLXRzcGFuIikuYXR0cigiZm9udC13ZWlnaHQiLHIudHlwZT09PSJzdHJvbmciPyJib2xkIjoibm9ybWFsIik7bj09PTA/aS50ZXh0KHIuY29udGVudCk6aS50ZXh0KCIgIityLmNvbnRlbnQpfSl9ZnVuY3Rpb24gREQodCl7cmV0dXJuIHQucmVwbGFjZSgvZmFbYmtscnNdPzpmYS1bXHctXSsvZyxlPT5gPGkgY2xhc3M9JyR7ZS5yZXBsYWNlKCI6IiwiICIpfSc+PC9pPmApfXZhciBIbix0bz1OKCgpPT57InVzZSBzdHJpY3QiO3p0KCk7Z3IoKTtkcigpO3Z0KCk7dEsoKTtpcigpO2lLKCk7byhhSywiYXBwbHlTdHlsZSIpO28oSDhlLCJhZGRIdG1sU3BhbiIpO28oQUQsImNyZWF0ZVRzcGFuIik7byhXOGUsImNvbXB1dGVXaWR0aE9mVGV4dCIpO28oc0ssImNvbXB1dGVEaW1lbnNpb25PZlRleHQiKTtvKHE4ZSwiY3JlYXRlRm9ybWF0dGVkVGV4dCIpO28oX0QsInVwZGF0ZVRleHRDb250ZW50QW5kU3R5bGVzIik7byhERCwicmVwbGFjZUljb25TdWJzdHJpbmciKTtIbj1vKGFzeW5jKHQsZT0iIix7c3R5bGU6cj0iIixpc1RpdGxlOm49ITEsY2xhc3NlczppPSIiLHVzZUh0bWxMYWJlbHM6YT0hMCxpc05vZGU6cz0hMCx3aWR0aDpsPTIwMCxhZGRTdmdCYWNrZ3JvdW5kOnU9ITF9PXt9LGgpPT57aWYoWS5kZWJ1ZygiWFlaIGNyZWF0ZVRleHQiLGUscixuLGksYSxzLCJhZGRTdmdCYWNrZ3JvdW5kOiAiLHUpLGEpe2xldCBmPWVLKGUsaCksZD1ERChuYShmKSkscD1lLnJlcGxhY2UoL1xcXFwvZywiXFwiKSxtPXtpc05vZGU6cyxsYWJlbDpwaShlKT9wOmQsbGFiZWxTdHlsZTpyLnJlcGxhY2UoImZpbGw6IiwiY29sb3I6Iil9O3JldHVybiBhd2FpdCBIOGUodCxtLGwsaSx1KX1lbHNle2xldCBmPWUucmVwbGFjZSgvPGJyXHMqXC8/Pi9nLCI8YnIvPiIpLGQ9SmooZi5yZXBsYWNlKCI8YnI+IiwiPGJyLz4iKSxoKSxwPXE4ZShsLHQsZCxlP3U6ITEpO2lmKHMpey9zdHJva2U6Ly5leGVjKHIpJiYocj1yLnJlcGxhY2UoInN0cm9rZToiLCJsaW5lQ29sb3I6IikpO2xldCBtPXIucmVwbGFjZSgvc3Ryb2tlOlteO10rOz8vZywiIikucmVwbGFjZSgvc3Ryb2tlLXdpZHRoOlteO10rOz8vZywiIikucmVwbGFjZSgvZmlsbDpbXjtdKzs/L2csIiIpLnJlcGxhY2UoL2NvbG9yOi9nLCJmaWxsOiIpO0dlKHApLmF0dHIoInN0eWxlIixtKX1lbHNle2xldCBtPXIucmVwbGFjZSgvc3Ryb2tlOlteO10rOz8vZywiIikucmVwbGFjZSgvc3Ryb2tlLXdpZHRoOlteO10rOz8vZywiIikucmVwbGFjZSgvZmlsbDpbXjtdKzs/L2csIiIpLnJlcGxhY2UoL2JhY2tncm91bmQ6L2csImZpbGw6Iik7R2UocCkuc2VsZWN0KCJyZWN0IikuYXR0cigic3R5bGUiLG0ucmVwbGFjZSgvYmFja2dyb3VuZDovZywiZmlsbDoiKSk7bGV0IGc9ci5yZXBsYWNlKC9zdHJva2U6W147XSs7Py9nLCIiKS5yZXBsYWNlKC9zdHJva2Utd2lkdGg6W147XSs7Py9nLCIiKS5yZXBsYWNlKC9maWxsOlteO10rOz8vZywiIikucmVwbGFjZSgvY29sb3I6L2csImZpbGw6Iik7R2UocCkuc2VsZWN0KCJ0ZXh0IikuYXR0cigic3R5bGUiLGcpfXJldHVybiBwfX0sImNyZWF0ZVRleHQiKX0pO2Z1bmN0aW9uIFh0KHQpe2xldCBlPXQubWFwKChyLG4pPT5gJHtuPT09MD8iTSI6IkwifSR7ci54fSwke3IueX1gKTtyZXR1cm4gZS5wdXNoKCJaIiksZS5qb2luKCIgIil9ZnVuY3Rpb24gRm8odCxlLHIsbixpLGEpe2xldCBzPVtdLHU9ci10LGg9bi1lLGY9dS9hLGQ9MipNYXRoLlBJL2YscD1lK2gvMjtmb3IobGV0IG09MDttPD01MDttKyspe2xldCBnPW0vNTAseT10K2cqdSx2PXAraSpNYXRoLnNpbihkKih5LXQpKTtzLnB1c2goe3g6eSx5OnZ9KX1yZXR1cm4gc31mdW5jdGlvbiBMdyh0LGUscixuLGksYSl7bGV0IHM9W10sbD1pKk1hdGguUEkvMTgwLGY9KGEqTWF0aC5QSS8xODAtbCkvKG4tMSk7Zm9yKGxldCBkPTA7ZDxuO2QrKyl7bGV0IHA9bCtkKmYsbT10K3IqTWF0aC5jb3MocCksZz1lK3IqTWF0aC5zaW4ocCk7cy5wdXNoKHt4Oi1tLHk6LWd9KX1yZXR1cm4gc312YXIgcHQsRHcsamUsaHQsRnQ9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt0bygpO3p0KCk7ZHIoKTtZYSgpO2dyKCk7aXIoKTtwdD1vKGFzeW5jKHQsZSxyKT0+e2xldCBuLGk9ZS51c2VIdG1sTGFiZWxzfHxmcihtZSgpPy5odG1sTGFiZWxzKTtyP249cjpuPSJub2RlIGRlZmF1bHQiO2xldCBhPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLG4pLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxzPWEuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLmF0dHIoInN0eWxlIiwkbihlLmxhYmVsU3R5bGUpKSxsO2UubGFiZWw9PT12b2lkIDA/bD0iIjpsPXR5cGVvZiBlLmxhYmVsPT0ic3RyaW5nIj9lLmxhYmVsOmUubGFiZWxbMF07bGV0IHU9YXdhaXQgSG4ocyxUcihuYShsKSxtZSgpKSx7dXNlSHRtbExhYmVsczppLHdpZHRoOmUud2lkdGh8fG1lKCkuZmxvd2NoYXJ0Py53cmFwcGluZ1dpZHRoLGNzc0NsYXNzZXM6Im1hcmtkb3duLW5vZGUtbGFiZWwiLHN0eWxlOmUubGFiZWxTdHlsZSxhZGRTdmdCYWNrZ3JvdW5kOiEhZS5pY29ufHwhIWUuaW1nfSksaD11LmdldEJCb3goKSxmPShlPy5wYWRkaW5nPz8wKS8yO2lmKGkpe2xldCBkPXUuY2hpbGRyZW5bMF0scD1HZSh1KSxtPWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImltZyIpO2lmKG0pe2xldCBnPWwucmVwbGFjZSgvPGltZ1tePl0qPi9nLCIiKS50cmltKCk9PT0iIjthd2FpdCBQcm9taXNlLmFsbChbLi4ubV0ubWFwKHk9Pm5ldyBQcm9taXNlKHY9PntmdW5jdGlvbiB4KCl7aWYoeS5zdHlsZS5kaXNwbGF5PSJmbGV4Iix5LnN0eWxlLmZsZXhEaXJlY3Rpb249ImNvbHVtbiIsZyl7bGV0IGI9bWUoKS5mb250U2l6ZT9tZSgpLmZvbnRTaXplOndpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmZvbnRTaXplLHc9NSxbQz1vci5mb250U2l6ZV09Qm8oYiksVD1DKncrInB4Ijt5LnN0eWxlLm1pbldpZHRoPVQseS5zdHlsZS5tYXhXaWR0aD1UfWVsc2UgeS5zdHlsZS53aWR0aD0iMTAwJSI7dih5KX1vKHgsInNldHVwSW1hZ2UiKSxzZXRUaW1lb3V0KCgpPT57eS5jb21wbGV0ZSYmeCgpfSkseS5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIseCkseS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIix4KX0pKSl9aD1kLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHAuYXR0cigid2lkdGgiLGgud2lkdGgpLHAuYXR0cigiaGVpZ2h0IixoLmhlaWdodCl9cmV0dXJuIGk/cy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistaC53aWR0aC8yKyIsICIrLWguaGVpZ2h0LzIrIikiKTpzLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCAiKy1oLmhlaWdodC8yKyIpIiksZS5jZW50ZXJMYWJlbCYmcy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistaC53aWR0aC8yKyIsICIrLWguaGVpZ2h0LzIrIikiKSxzLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLHtzaGFwZVN2ZzphLGJib3g6aCxoYWxmUGFkZGluZzpmLGxhYmVsOnN9fSwibGFiZWxIZWxwZXIiKSxEdz1vKGFzeW5jKHQsZSxyKT0+e2xldCBuPXIudXNlSHRtbExhYmVsc3x8ZnIobWUoKT8uZmxvd2NoYXJ0Py5odG1sTGFiZWxzKSxpPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLmF0dHIoInN0eWxlIixyLmxhYmVsU3R5bGV8fCIiKSxhPWF3YWl0IEhuKGksVHIobmEoZSksbWUoKSkse3VzZUh0bWxMYWJlbHM6bix3aWR0aDpyLndpZHRofHxtZSgpPy5mbG93Y2hhcnQ/LndyYXBwaW5nV2lkdGgsc3R5bGU6ci5sYWJlbFN0eWxlLGFkZFN2Z0JhY2tncm91bmQ6ISFyLmljb258fCEhci5pbWd9KSxzPWEuZ2V0QkJveCgpLGw9ci5wYWRkaW5nLzI7aWYoZnIobWUoKT8uZmxvd2NoYXJ0Py5odG1sTGFiZWxzKSl7bGV0IHU9YS5jaGlsZHJlblswXSxoPUdlKGEpO3M9dS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxoLmF0dHIoIndpZHRoIixzLndpZHRoKSxoLmF0dHIoImhlaWdodCIscy5oZWlnaHQpfXJldHVybiBuP2kuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLXMud2lkdGgvMisiLCAiKy1zLmhlaWdodC8yKyIpIik6aS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwgIistcy5oZWlnaHQvMisiKSIpLHIuY2VudGVyTGFiZWwmJmkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLXMud2lkdGgvMisiLCAiKy1zLmhlaWdodC8yKyIpIiksaS5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSx7c2hhcGVTdmc6dCxiYm94OnMsaGFsZlBhZGRpbmc6bCxsYWJlbDppfX0sImluc2VydExhYmVsIiksamU9bygodCxlKT0+e2xldCByPWUubm9kZSgpLmdldEJCb3goKTt0LndpZHRoPXIud2lkdGgsdC5oZWlnaHQ9ci5oZWlnaHR9LCJ1cGRhdGVOb2RlQm91bmRzIiksaHQ9bygodCxlKT0+KHQubG9vaz09PSJoYW5kRHJhd24iPyJyb3VnaC1ub2RlIjoibm9kZSIpKyIgIit0LmNzc0NsYXNzZXMrIiAiKyhlfHwiIiksImdldE5vZGVDbGFzc2VzIik7byhYdCwiY3JlYXRlUGF0aEZyb21Qb2ludHMiKTtvKEZvLCJnZW5lcmF0ZUZ1bGxTaW5lV2F2ZVBvaW50cyIpO28oTHcsImdlbmVyYXRlQ2lyY2xlUG9pbnRzIil9KTtmdW5jdGlvbiBZOGUodCxlKXtyZXR1cm4gdC5pbnRlcnNlY3QoZSl9dmFyIG9LLGxLPU4oKCk9PnsidXNlIHN0cmljdCI7byhZOGUsImludGVyc2VjdE5vZGUiKTtvSz1ZOGV9KTtmdW5jdGlvbiBYOGUodCxlLHIsbil7dmFyIGk9dC54LGE9dC55LHM9aS1uLngsbD1hLW4ueSx1PU1hdGguc3FydChlKmUqbCpsK3IqcipzKnMpLGg9TWF0aC5hYnMoZSpyKnMvdSk7bi54PGkmJihoPS1oKTt2YXIgZj1NYXRoLmFicyhlKnIqbC91KTtyZXR1cm4gbi55PGEmJihmPS1mKSx7eDppK2gseTphK2Z9fXZhciBSdyxMRD1OKCgpPT57InVzZSBzdHJpY3QiO28oWDhlLCJpbnRlcnNlY3RFbGxpcHNlIik7Unc9WDhlfSk7ZnVuY3Rpb24gajhlKHQsZSxyKXtyZXR1cm4gUncodCxlLGUscil9dmFyIGNLLHVLPU4oKCk9PnsidXNlIHN0cmljdCI7TEQoKTtvKGo4ZSwiaW50ZXJzZWN0Q2lyY2xlIik7Y0s9ajhlfSk7ZnVuY3Rpb24gSzhlKHQsZSxyLG4pe3ZhciBpLGEscyxsLHUsaCxmLGQscCxtLGcseSx2LHgsYjtpZihpPWUueS10Lnkscz10LngtZS54LHU9ZS54KnQueS10LngqZS55LHA9aSpyLngrcypyLnkrdSxtPWkqbi54K3Mqbi55K3UsIShwIT09MCYmbSE9PTAmJmhLKHAsbSkpJiYoYT1uLnktci55LGw9ci54LW4ueCxoPW4ueCpyLnktci54Km4ueSxmPWEqdC54K2wqdC55K2gsZD1hKmUueCtsKmUueStoLCEoZiE9PTAmJmQhPT0wJiZoSyhmLGQpKSYmKGc9aSpsLWEqcyxnIT09MCkpKXJldHVybiB5PU1hdGguYWJzKGcvMiksdj1zKmgtbCp1LHg9djwwPyh2LXkpL2c6KHYreSkvZyx2PWEqdS1pKmgsYj12PDA/KHYteSkvZzoodit5KS9nLHt4LHk6Yn19ZnVuY3Rpb24gaEsodCxlKXtyZXR1cm4gdCplPjB9dmFyIGZLLGRLPU4oKCk9PnsidXNlIHN0cmljdCI7byhLOGUsImludGVyc2VjdExpbmUiKTtvKGhLLCJzYW1lU2lnbiIpO2ZLPUs4ZX0pO2Z1bmN0aW9uIFE4ZSh0LGUscil7bGV0IG49dC54LGk9dC55LGE9W10scz1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksbD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7dHlwZW9mIGUuZm9yRWFjaD09ImZ1bmN0aW9uIj9lLmZvckVhY2goZnVuY3Rpb24oZil7cz1NYXRoLm1pbihzLGYueCksbD1NYXRoLm1pbihsLGYueSl9KToocz1NYXRoLm1pbihzLGUueCksbD1NYXRoLm1pbihsLGUueSkpO2xldCB1PW4tdC53aWR0aC8yLXMsaD1pLXQuaGVpZ2h0LzItbDtmb3IobGV0IGY9MDtmPGUubGVuZ3RoO2YrKyl7bGV0IGQ9ZVtmXSxwPWVbZjxlLmxlbmd0aC0xP2YrMTowXSxtPWZLKHQscix7eDp1K2QueCx5OmgrZC55fSx7eDp1K3AueCx5OmgrcC55fSk7bSYmYS5wdXNoKG0pfXJldHVybiBhLmxlbmd0aD8oYS5sZW5ndGg+MSYmYS5zb3J0KGZ1bmN0aW9uKGYsZCl7bGV0IHA9Zi54LXIueCxtPWYueS1yLnksZz1NYXRoLnNxcnQocCpwK20qbSkseT1kLngtci54LHY9ZC55LXIueSx4PU1hdGguc3FydCh5Knkrdip2KTtyZXR1cm4gZzx4Py0xOmc9PT14PzA6MX0pLGFbMF0pOnR9dmFyIHBLLG1LPU4oKCk9PnsidXNlIHN0cmljdCI7ZEsoKTtvKFE4ZSwiaW50ZXJzZWN0UG9seWdvbiIpO3BLPVE4ZX0pO3ZhciBaOGUsVmgsUkQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtaOGU9bygodCxlKT0+e3ZhciByPXQueCxuPXQueSxpPWUueC1yLGE9ZS55LW4scz10LndpZHRoLzIsbD10LmhlaWdodC8yLHUsaDtyZXR1cm4gTWF0aC5hYnMoYSkqcz5NYXRoLmFicyhpKSpsPyhhPDAmJihsPS1sKSx1PWE9PT0wPzA6bCppL2EsaD1sKTooaTwwJiYocz0tcyksdT1zLGg9aT09PTA/MDpzKmEvaSkse3g6cit1LHk6bitofX0sImludGVyc2VjdFJlY3QiKSxWaD1aOGV9KTt2YXIgWWUsSHQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtsSygpO3VLKCk7TEQoKTttSygpO1JEKCk7WWU9e25vZGU6b0ssY2lyY2xlOmNLLGVsbGlwc2U6UncscG9seWdvbjpwSyxyZWN0OlZofX0pO3ZhciBnSyxtYyxKOGUsTkQsUWUsS2UsVXQ9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt6dCgpO2dLPW8odD0+e2xldHtoYW5kRHJhd25TZWVkOmV9PW1lKCk7cmV0dXJue2ZpbGw6dCxoYWNodXJlQW5nbGU6MTIwLGhhY2h1cmVHYXA6NCxmaWxsV2VpZ2h0OjIscm91Z2huZXNzOi43LHN0cm9rZTp0LHNlZWQ6ZX19LCJzb2xpZFN0YXRlRmlsbCIpLG1jPW8odD0+e2xldCBlPUo4ZShbLi4udC5jc3NDb21waWxlZFN0eWxlc3x8W10sLi4udC5jc3NTdHlsZXN8fFtdXSk7cmV0dXJue3N0eWxlc01hcDplLHN0eWxlc0FycmF5OlsuLi5lXX19LCJjb21waWxlU3R5bGVzIiksSjhlPW8odD0+e2xldCBlPW5ldyBNYXA7cmV0dXJuIHQuZm9yRWFjaChyPT57bGV0W24saV09ci5zcGxpdCgiOiIpO2Uuc2V0KG4udHJpbSgpLGk/LnRyaW0oKSl9KSxlfSwic3R5bGVzMk1hcCIpLE5EPW8odD0+dD09PSJjb2xvciJ8fHQ9PT0iZm9udC1zaXplInx8dD09PSJmb250LWZhbWlseSJ8fHQ9PT0iZm9udC13ZWlnaHQifHx0PT09ImZvbnQtc3R5bGUifHx0PT09InRleHQtZGVjb3JhdGlvbiJ8fHQ9PT0idGV4dC1hbGlnbiJ8fHQ9PT0idGV4dC10cmFuc2Zvcm0ifHx0PT09ImxpbmUtaGVpZ2h0Inx8dD09PSJsZXR0ZXItc3BhY2luZyJ8fHQ9PT0id29yZC1zcGFjaW5nInx8dD09PSJ0ZXh0LXNoYWRvdyJ8fHQ9PT0idGV4dC1vdmVyZmxvdyJ8fHQ9PT0id2hpdGUtc3BhY2UifHx0PT09IndvcmQtd3JhcCJ8fHQ9PT0id29yZC1icmVhayJ8fHQ9PT0ib3ZlcmZsb3ctd3JhcCJ8fHQ9PT0iaHlwaGVucyIsImlzTGFiZWxTdHlsZSIpLFFlPW8odD0+e2xldHtzdHlsZXNBcnJheTplfT1tYyh0KSxyPVtdLG49W10saT1bXSxhPVtdO3JldHVybiBlLmZvckVhY2gocz0+e2xldCBsPXNbMF07TkQobCk/ci5wdXNoKHMuam9pbigiOiIpKyIgIWltcG9ydGFudCIpOihuLnB1c2gocy5qb2luKCI6IikrIiAhaW1wb3J0YW50IiksbC5pbmNsdWRlcygic3Ryb2tlIikmJmkucHVzaChzLmpvaW4oIjoiKSsiICFpbXBvcnRhbnQiKSxsPT09ImZpbGwiJiZhLnB1c2gocy5qb2luKCI6IikrIiAhaW1wb3J0YW50IikpfSkse2xhYmVsU3R5bGVzOnIuam9pbigiOyIpLG5vZGVTdHlsZXM6bi5qb2luKCI7Iiksc3R5bGVzQXJyYXk6ZSxib3JkZXJTdHlsZXM6aSxiYWNrZ3JvdW5kU3R5bGVzOmF9fSwic3R5bGVzMlN0cmluZyIpLEtlPW8oKHQsZSk9PntsZXR7dGhlbWVWYXJpYWJsZXM6cixoYW5kRHJhd25TZWVkOm59PW1lKCkse25vZGVCb3JkZXI6aSxtYWluQmtnOmF9PXIse3N0eWxlc01hcDpzfT1tYyh0KTtyZXR1cm4gT2JqZWN0LmFzc2lnbih7cm91Z2huZXNzOi43LGZpbGw6cy5nZXQoImZpbGwiKXx8YSxmaWxsU3R5bGU6ImhhY2h1cmUiLGZpbGxXZWlnaHQ6NCxoYWNodXJlR2FwOjUuMixzdHJva2U6cy5nZXQoInN0cm9rZSIpfHxpLHNlZWQ6bixzdHJva2VXaWR0aDpzLmdldCgic3Ryb2tlLXdpZHRoIik/LnJlcGxhY2UoInB4IiwiIil8fDEuMyxmaWxsTGluZURhc2g6WzAsMF19LGUpfSwidXNlck5vZGVPdmVycmlkZXMiKX0pO2Z1bmN0aW9uIE1EKHQsZSxyKXtpZih0JiZ0Lmxlbmd0aCl7bGV0W24saV09ZSxhPU1hdGguUEkvMTgwKnIscz1NYXRoLmNvcyhhKSxsPU1hdGguc2luKGEpO2ZvcihsZXQgdSBvZiB0KXtsZXRbaCxmXT11O3VbMF09KGgtbikqcy0oZi1pKSpsK24sdVsxXT0oaC1uKSpsKyhmLWkpKnMraX19fWZ1bmN0aW9uIGVfZSh0LGUpe3JldHVybiB0WzBdPT09ZVswXSYmdFsxXT09PWVbMV19ZnVuY3Rpb24gdF9lKHQsZSxyLG49MSl7bGV0IGk9cixhPU1hdGgubWF4KGUsLjEpLHM9dFswXSYmdFswXVswXSYmdHlwZW9mIHRbMF1bMF09PSJudW1iZXIiP1t0XTp0LGw9WzAsMF07aWYoaSlmb3IobGV0IGggb2YgcylNRChoLGwsaSk7bGV0IHU9ZnVuY3Rpb24oaCxmLGQpe2xldCBwPVtdO2ZvcihsZXQgYiBvZiBoKXtsZXQgdz1bLi4uYl07ZV9lKHdbMF0sd1t3Lmxlbmd0aC0xXSl8fHcucHVzaChbd1swXVswXSx3WzBdWzFdXSksdy5sZW5ndGg+MiYmcC5wdXNoKHcpfWxldCBtPVtdO2Y9TWF0aC5tYXgoZiwuMSk7bGV0IGc9W107Zm9yKGxldCBiIG9mIHApZm9yKGxldCB3PTA7dzxiLmxlbmd0aC0xO3crKyl7bGV0IEM9Ylt3XSxUPWJbdysxXTtpZihDWzFdIT09VFsxXSl7bGV0IEU9TWF0aC5taW4oQ1sxXSxUWzFdKTtnLnB1c2goe3ltaW46RSx5bWF4Ok1hdGgubWF4KENbMV0sVFsxXSkseDpFPT09Q1sxXT9DWzBdOlRbMF0saXNsb3BlOihUWzBdLUNbMF0pLyhUWzFdLUNbMV0pfSl9fWlmKGcuc29ydCgoYix3KT0+Yi55bWluPHcueW1pbj8tMTpiLnltaW4+dy55bWluPzE6Yi54PHcueD8tMTpiLng+dy54PzE6Yi55bWF4PT09dy55bWF4PzA6KGIueW1heC13LnltYXgpL01hdGguYWJzKGIueW1heC13LnltYXgpKSwhZy5sZW5ndGgpcmV0dXJuIG07bGV0IHk9W10sdj1nWzBdLnltaW4seD0wO2Zvcig7eS5sZW5ndGh8fGcubGVuZ3RoOyl7aWYoZy5sZW5ndGgpe2xldCBiPS0xO2ZvcihsZXQgdz0wO3c8Zy5sZW5ndGgmJiEoZ1t3XS55bWluPnYpO3crKyliPXc7Zy5zcGxpY2UoMCxiKzEpLmZvckVhY2godz0+e3kucHVzaCh7czp2LGVkZ2U6d30pfSl9aWYoeT15LmZpbHRlcihiPT4hKGIuZWRnZS55bWF4PD12KSkseS5zb3J0KChiLHcpPT5iLmVkZ2UueD09PXcuZWRnZS54PzA6KGIuZWRnZS54LXcuZWRnZS54KS9NYXRoLmFicyhiLmVkZ2UueC13LmVkZ2UueCkpLChkIT09MXx8eCVmPT0wKSYmeS5sZW5ndGg+MSlmb3IobGV0IGI9MDtiPHkubGVuZ3RoO2IrPTIpe2xldCB3PWIrMTtpZih3Pj15Lmxlbmd0aClicmVhaztsZXQgQz15W2JdLmVkZ2UsVD15W3ddLmVkZ2U7bS5wdXNoKFtbTWF0aC5yb3VuZChDLngpLHZdLFtNYXRoLnJvdW5kKFQueCksdl1dKX12Kz1kLHkuZm9yRWFjaChiPT57Yi5lZGdlLng9Yi5lZGdlLngrZCpiLmVkZ2UuaXNsb3BlfSkseCsrfXJldHVybiBtfShzLGEsbik7aWYoaSl7Zm9yKGxldCBoIG9mIHMpTUQoaCxsLC1pKTsoZnVuY3Rpb24oaCxmLGQpe2xldCBwPVtdO2guZm9yRWFjaChtPT5wLnB1c2goLi4ubSkpLE1EKHAsZixkKX0pKHUsbCwtaSl9cmV0dXJuIHV9ZnVuY3Rpb24geDIodCxlKXt2YXIgcjtsZXQgbj1lLmhhY2h1cmVBbmdsZSs5MCxpPWUuaGFjaHVyZUdhcDtpPDAmJihpPTQqZS5zdHJva2VXaWR0aCksaT1NYXRoLnJvdW5kKE1hdGgubWF4KGksLjEpKTtsZXQgYT0xO3JldHVybiBlLnJvdWdobmVzcz49MSYmKCgocj1lLnJhbmRvbWl6ZXIpPT09bnVsbHx8cj09PXZvaWQgMD92b2lkIDA6ci5uZXh0KCkpfHxNYXRoLnJhbmRvbSgpKT4uNyYmKGE9aSksdF9lKHQsaSxuLGF8fDEpfWZ1bmN0aW9uIHp3KHQpe2xldCBlPXRbMF0scj10WzFdO3JldHVybiBNYXRoLnNxcnQoTWF0aC5wb3coZVswXS1yWzBdLDIpK01hdGgucG93KGVbMV0tclsxXSwyKSl9ZnVuY3Rpb24gT0QodCxlKXtyZXR1cm4gdC50eXBlPT09ZX1mdW5jdGlvbiBqRCh0KXtsZXQgZT1bXSxyPWZ1bmN0aW9uKHMpe2xldCBsPW5ldyBBcnJheTtmb3IoO3MhPT0iIjspaWYocy5tYXRjaCgvXihbIFx0XHJcbixdKykvKSlzPXMuc3Vic3RyKFJlZ0V4cC4kMS5sZW5ndGgpO2Vsc2UgaWYocy5tYXRjaCgvXihbYUFjQ2hIbExtTXFRc1N0VHZWelpdKS8pKWxbbC5sZW5ndGhdPXt0eXBlOnJfZSx0ZXh0OlJlZ0V4cC4kMX0scz1zLnN1YnN0cihSZWdFeHAuJDEubGVuZ3RoKTtlbHNle2lmKCFzLm1hdGNoKC9eKChbLStdP1swLTldKyhcLlswLTldKik/fFstK10/XC5bMC05XSspKFtlRV1bLStdP1swLTldKyk/KS8pKXJldHVybltdO2xbbC5sZW5ndGhdPXt0eXBlOklELHRleHQ6YCR7cGFyc2VGbG9hdChSZWdFeHAuJDEpfWB9LHM9cy5zdWJzdHIoUmVnRXhwLiQxLmxlbmd0aCl9cmV0dXJuIGxbbC5sZW5ndGhdPXt0eXBlOnlLLHRleHQ6IiJ9LGx9KHQpLG49IkJPRCIsaT0wLGE9cltpXTtmb3IoOyFPRChhLHlLKTspe2xldCBzPTAsbD1bXTtpZihuPT09IkJPRCIpe2lmKGEudGV4dCE9PSJNIiYmYS50ZXh0IT09Im0iKXJldHVybiBqRCgiTTAsMCIrdCk7aSsrLHM9TndbYS50ZXh0XSxuPWEudGV4dH1lbHNlIE9EKGEsSUQpP3M9Tndbbl06KGkrKyxzPU53W2EudGV4dF0sbj1hLnRleHQpO2lmKCEoaStzPHIubGVuZ3RoKSl0aHJvdyBuZXcgRXJyb3IoIlBhdGggZGF0YSBlbmRlZCBzaG9ydCIpO2ZvcihsZXQgdT1pO3U8aStzO3UrKyl7bGV0IGg9clt1XTtpZighT0QoaCxJRCkpdGhyb3cgbmV3IEVycm9yKCJQYXJhbSBub3QgYSBudW1iZXI6ICIrbisiLCIraC50ZXh0KTtsW2wubGVuZ3RoXT0raC50ZXh0fWlmKHR5cGVvZiBOd1tuXSE9Im51bWJlciIpdGhyb3cgbmV3IEVycm9yKCJCYWQgc2VnbWVudDogIituKTt7bGV0IHU9e2tleTpuLGRhdGE6bH07ZS5wdXNoKHUpLGkrPXMsYT1yW2ldLG49PT0iTSImJihuPSJMIiksbj09PSJtIiYmKG49ImwiKX19cmV0dXJuIGV9ZnVuY3Rpb24gU0sodCl7bGV0IGU9MCxyPTAsbj0wLGk9MCxhPVtdO2ZvcihsZXR7a2V5OnMsZGF0YTpsfW9mIHQpc3dpdGNoKHMpe2Nhc2UiTSI6YS5wdXNoKHtrZXk6Ik0iLGRhdGE6Wy4uLmxdfSksW2Uscl09bCxbbixpXT1sO2JyZWFrO2Nhc2UibSI6ZSs9bFswXSxyKz1sWzFdLGEucHVzaCh7a2V5OiJNIixkYXRhOltlLHJdfSksbj1lLGk9cjticmVhaztjYXNlIkwiOmEucHVzaCh7a2V5OiJMIixkYXRhOlsuLi5sXX0pLFtlLHJdPWw7YnJlYWs7Y2FzZSJsIjplKz1sWzBdLHIrPWxbMV0sYS5wdXNoKHtrZXk6IkwiLGRhdGE6W2Uscl19KTticmVhaztjYXNlIkMiOmEucHVzaCh7a2V5OiJDIixkYXRhOlsuLi5sXX0pLGU9bFs0XSxyPWxbNV07YnJlYWs7Y2FzZSJjIjp7bGV0IHU9bC5tYXAoKGgsZik9PmYlMj9oK3I6aCtlKTthLnB1c2goe2tleToiQyIsZGF0YTp1fSksZT11WzRdLHI9dVs1XTticmVha31jYXNlIlEiOmEucHVzaCh7a2V5OiJRIixkYXRhOlsuLi5sXX0pLGU9bFsyXSxyPWxbM107YnJlYWs7Y2FzZSJxIjp7bGV0IHU9bC5tYXAoKGgsZik9PmYlMj9oK3I6aCtlKTthLnB1c2goe2tleToiUSIsZGF0YTp1fSksZT11WzJdLHI9dVszXTticmVha31jYXNlIkEiOmEucHVzaCh7a2V5OiJBIixkYXRhOlsuLi5sXX0pLGU9bFs1XSxyPWxbNl07YnJlYWs7Y2FzZSJhIjplKz1sWzVdLHIrPWxbNl0sYS5wdXNoKHtrZXk6IkEiLGRhdGE6W2xbMF0sbFsxXSxsWzJdLGxbM10sbFs0XSxlLHJdfSk7YnJlYWs7Y2FzZSJIIjphLnB1c2goe2tleToiSCIsZGF0YTpbLi4ubF19KSxlPWxbMF07YnJlYWs7Y2FzZSJoIjplKz1sWzBdLGEucHVzaCh7a2V5OiJIIixkYXRhOltlXX0pO2JyZWFrO2Nhc2UiViI6YS5wdXNoKHtrZXk6IlYiLGRhdGE6Wy4uLmxdfSkscj1sWzBdO2JyZWFrO2Nhc2UidiI6cis9bFswXSxhLnB1c2goe2tleToiViIsZGF0YTpbcl19KTticmVhaztjYXNlIlMiOmEucHVzaCh7a2V5OiJTIixkYXRhOlsuLi5sXX0pLGU9bFsyXSxyPWxbM107YnJlYWs7Y2FzZSJzIjp7bGV0IHU9bC5tYXAoKGgsZik9PmYlMj9oK3I6aCtlKTthLnB1c2goe2tleToiUyIsZGF0YTp1fSksZT11WzJdLHI9dVszXTticmVha31jYXNlIlQiOmEucHVzaCh7a2V5OiJUIixkYXRhOlsuLi5sXX0pLGU9bFswXSxyPWxbMV07YnJlYWs7Y2FzZSJ0IjplKz1sWzBdLHIrPWxbMV0sYS5wdXNoKHtrZXk6IlQiLGRhdGE6W2Uscl19KTticmVhaztjYXNlIloiOmNhc2UieiI6YS5wdXNoKHtrZXk6IloiLGRhdGE6W119KSxlPW4scj1pfXJldHVybiBhfWZ1bmN0aW9uIENLKHQpe2xldCBlPVtdLHI9IiIsbj0wLGk9MCxhPTAscz0wLGw9MCx1PTA7Zm9yKGxldHtrZXk6aCxkYXRhOmZ9b2YgdCl7c3dpdGNoKGgpe2Nhc2UiTSI6ZS5wdXNoKHtrZXk6Ik0iLGRhdGE6Wy4uLmZdfSksW24saV09ZixbYSxzXT1mO2JyZWFrO2Nhc2UiQyI6ZS5wdXNoKHtrZXk6IkMiLGRhdGE6Wy4uLmZdfSksbj1mWzRdLGk9Zls1XSxsPWZbMl0sdT1mWzNdO2JyZWFrO2Nhc2UiTCI6ZS5wdXNoKHtrZXk6IkwiLGRhdGE6Wy4uLmZdfSksW24saV09ZjticmVhaztjYXNlIkgiOm49ZlswXSxlLnB1c2goe2tleToiTCIsZGF0YTpbbixpXX0pO2JyZWFrO2Nhc2UiViI6aT1mWzBdLGUucHVzaCh7a2V5OiJMIixkYXRhOltuLGldfSk7YnJlYWs7Y2FzZSJTIjp7bGV0IGQ9MCxwPTA7cj09PSJDInx8cj09PSJTIj8oZD1uKyhuLWwpLHA9aSsoaS11KSk6KGQ9bixwPWkpLGUucHVzaCh7a2V5OiJDIixkYXRhOltkLHAsLi4uZl19KSxsPWZbMF0sdT1mWzFdLG49ZlsyXSxpPWZbM107YnJlYWt9Y2FzZSJUIjp7bGV0W2QscF09ZixtPTAsZz0wO3I9PT0iUSJ8fHI9PT0iVCI/KG09bisobi1sKSxnPWkrKGktdSkpOihtPW4sZz1pKTtsZXQgeT1uKzIqKG0tbikvMyx2PWkrMiooZy1pKS8zLHg9ZCsyKihtLWQpLzMsYj1wKzIqKGctcCkvMztlLnB1c2goe2tleToiQyIsZGF0YTpbeSx2LHgsYixkLHBdfSksbD1tLHU9ZyxuPWQsaT1wO2JyZWFrfWNhc2UiUSI6e2xldFtkLHAsbSxnXT1mLHk9bisyKihkLW4pLzMsdj1pKzIqKHAtaSkvMyx4PW0rMiooZC1tKS8zLGI9ZysyKihwLWcpLzM7ZS5wdXNoKHtrZXk6IkMiLGRhdGE6W3ksdix4LGIsbSxnXX0pLGw9ZCx1PXAsbj1tLGk9ZzticmVha31jYXNlIkEiOntsZXQgZD1NYXRoLmFicyhmWzBdKSxwPU1hdGguYWJzKGZbMV0pLG09ZlsyXSxnPWZbM10seT1mWzRdLHY9Zls1XSx4PWZbNl07ZD09PTB8fHA9PT0wPyhlLnB1c2goe2tleToiQyIsZGF0YTpbbixpLHYseCx2LHhdfSksbj12LGk9eCk6KG4hPT12fHxpIT09eCkmJihBSyhuLGksdix4LGQscCxtLGcseSkuZm9yRWFjaChmdW5jdGlvbihiKXtlLnB1c2goe2tleToiQyIsZGF0YTpifSl9KSxuPXYsaT14KTticmVha31jYXNlIloiOmUucHVzaCh7a2V5OiJaIixkYXRhOltdfSksbj1hLGk9c31yPWh9cmV0dXJuIGV9ZnVuY3Rpb24gZzIodCxlLHIpe3JldHVyblt0Kk1hdGguY29zKHIpLWUqTWF0aC5zaW4ociksdCpNYXRoLnNpbihyKStlKk1hdGguY29zKHIpXX1mdW5jdGlvbiBBSyh0LGUscixuLGksYSxzLGwsdSxoKXtsZXQgZj0oZD1zLE1hdGguUEkqZC8xODApO3ZhciBkO2xldCBwPVtdLG09MCxnPTAseT0wLHY9MDtpZihoKVttLGcseSx2XT1oO2Vsc2V7W3QsZV09ZzIodCxlLC1mKSxbcixuXT1nMihyLG4sLWYpO2xldCBMPSh0LXIpLzIsUj0oZS1uKS8yLE89TCpMLyhpKmkpK1IqUi8oYSphKTtPPjEmJihPPU1hdGguc3FydChPKSxpKj1PLGEqPU8pO2xldCBNPWkqaSxCPWEqYSxGPU0qQi1NKlIqUi1CKkwqTCxQPU0qUipSK0IqTCpMLHo9KGw9PT11Py0xOjEpKk1hdGguc3FydChNYXRoLmFicyhGL1ApKTt5PXoqaSpSL2ErKHQrcikvMix2PXoqLWEqTC9pKyhlK24pLzIsbT1NYXRoLmFzaW4ocGFyc2VGbG9hdCgoKGUtdikvYSkudG9GaXhlZCg5KSkpLGc9TWF0aC5hc2luKHBhcnNlRmxvYXQoKChuLXYpL2EpLnRvRml4ZWQoOSkpKSx0PHkmJihtPU1hdGguUEktbSkscjx5JiYoZz1NYXRoLlBJLWcpLG08MCYmKG09MipNYXRoLlBJK20pLGc8MCYmKGc9MipNYXRoLlBJK2cpLHUmJm0+ZyYmKG0tPTIqTWF0aC5QSSksIXUmJmc+bSYmKGctPTIqTWF0aC5QSSl9bGV0IHg9Zy1tO2lmKE1hdGguYWJzKHgpPjEyMCpNYXRoLlBJLzE4MCl7bGV0IEw9ZyxSPXIsTz1uO2c9dSYmZz5tP20rMTIwKk1hdGguUEkvMTgwKjE6bSsxMjAqTWF0aC5QSS8xODAqLTEscD1BSyhyPXkraSpNYXRoLmNvcyhnKSxuPXYrYSpNYXRoLnNpbihnKSxSLE8saSxhLHMsMCx1LFtnLEwseSx2XSl9eD1nLW07bGV0IGI9TWF0aC5jb3MobSksdz1NYXRoLnNpbihtKSxDPU1hdGguY29zKGcpLFQ9TWF0aC5zaW4oZyksRT1NYXRoLnRhbih4LzQpLEE9NC8zKmkqRSxTPTQvMyphKkUsXz1bdCxlXSxJPVt0K0EqdyxlLVMqYl0sRD1bcitBKlQsbi1TKkNdLGs9W3Isbl07aWYoSVswXT0yKl9bMF0tSVswXSxJWzFdPTIqX1sxXS1JWzFdLGgpcmV0dXJuW0ksRCxrXS5jb25jYXQocCk7e3A9W0ksRCxrXS5jb25jYXQocCk7bGV0IEw9W107Zm9yKGxldCBSPTA7UjxwLmxlbmd0aDtSKz0zKXtsZXQgTz1nMihwW1JdWzBdLHBbUl1bMV0sZiksTT1nMihwW1IrMV1bMF0scFtSKzFdWzFdLGYpLEI9ZzIocFtSKzJdWzBdLHBbUisyXVsxXSxmKTtMLnB1c2goW09bMF0sT1sxXSxNWzBdLE1bMV0sQlswXSxCWzFdXSl9cmV0dXJuIEx9fWZ1bmN0aW9uIF9LKHQsZSxyLG4saSl7cmV0dXJue3R5cGU6InBhdGgiLG9wczpVaCh0LGUscixuLGkpfX1mdW5jdGlvbiBPdyh0LGUscil7bGV0IG49KHR8fFtdKS5sZW5ndGg7aWYobj4yKXtsZXQgaT1bXTtmb3IobGV0IGE9MDthPG4tMTthKyspaS5wdXNoKC4uLlVoKHRbYV1bMF0sdFthXVsxXSx0W2ErMV1bMF0sdFthKzFdWzFdLHIpKTtyZXR1cm4gZSYmaS5wdXNoKC4uLlVoKHRbbi0xXVswXSx0W24tMV1bMV0sdFswXVswXSx0WzBdWzFdLHIpKSx7dHlwZToicGF0aCIsb3BzOml9fXJldHVybiBuPT09Mj9fSyh0WzBdWzBdLHRbMF1bMV0sdFsxXVswXSx0WzFdWzFdLHIpOnt0eXBlOiJwYXRoIixvcHM6W119fWZ1bmN0aW9uIGlfZSh0LGUscixuLGkpe3JldHVybiBmdW5jdGlvbihhLHMpe3JldHVybiBPdyhhLCEwLHMpfShbW3QsZV0sW3QrcixlXSxbdCtyLGUrbl0sW3QsZStuXV0saSl9ZnVuY3Rpb24gdksodCxlKXtpZih0Lmxlbmd0aCl7bGV0IHI9dHlwZW9mIHRbMF1bMF09PSJudW1iZXIiP1t0XTp0LG49TXcoclswXSwxKigxKy4yKmUucm91Z2huZXNzKSxlKSxpPWUuZGlzYWJsZU11bHRpU3Ryb2tlP1tdOk13KHJbMF0sMS41KigxKy4yMiplLnJvdWdobmVzcyksd0soZSkpO2ZvcihsZXQgYT0xO2E8ci5sZW5ndGg7YSsrKXtsZXQgcz1yW2FdO2lmKHMubGVuZ3RoKXtsZXQgbD1NdyhzLDEqKDErLjIqZS5yb3VnaG5lc3MpLGUpLHU9ZS5kaXNhYmxlTXVsdGlTdHJva2U/W106TXcocywxLjUqKDErLjIyKmUucm91Z2huZXNzKSx3SyhlKSk7Zm9yKGxldCBoIG9mIGwpaC5vcCE9PSJtb3ZlIiYmbi5wdXNoKGgpO2ZvcihsZXQgaCBvZiB1KWgub3AhPT0ibW92ZSImJmkucHVzaChoKX19cmV0dXJue3R5cGU6InBhdGgiLG9wczpuLmNvbmNhdChpKX19cmV0dXJue3R5cGU6InBhdGgiLG9wczpbXX19ZnVuY3Rpb24gREsodCxlLHIpe2xldCBuPU1hdGguc3FydCgyKk1hdGguUEkqTWF0aC5zcXJ0KChNYXRoLnBvdyh0LzIsMikrTWF0aC5wb3coZS8yLDIpKS8yKSksaT1NYXRoLmNlaWwoTWF0aC5tYXgoci5jdXJ2ZVN0ZXBDb3VudCxyLmN1cnZlU3RlcENvdW50L01hdGguc3FydCgyMDApKm4pKSxhPTIqTWF0aC5QSS9pLHM9TWF0aC5hYnModC8yKSxsPU1hdGguYWJzKGUvMiksdT0xLXIuY3VydmVGaXR0aW5nO3JldHVybiBzKz1ucihzKnUsciksbCs9bnIobCp1LHIpLHtpbmNyZW1lbnQ6YSxyeDpzLHJ5Omx9fWZ1bmN0aW9uIEhEKHQsZSxyLG4pe2xldFtpLGFdPVRLKG4uaW5jcmVtZW50LHQsZSxuLnJ4LG4ucnksMSxuLmluY3JlbWVudCpCdyguMSxCdyguNCwxLHIpLHIpLHIpLHM9RncoaSxudWxsLHIpO2lmKCFyLmRpc2FibGVNdWx0aVN0cm9rZSYmci5yb3VnaG5lc3MhPT0wKXtsZXRbbF09VEsobi5pbmNyZW1lbnQsdCxlLG4ucngsbi5yeSwxLjUsMCxyKSx1PUZ3KGwsbnVsbCxyKTtzPXMuY29uY2F0KHUpfXJldHVybntlc3RpbWF0ZWRQb2ludHM6YSxvcHNldDp7dHlwZToicGF0aCIsb3BzOnN9fX1mdW5jdGlvbiB4Syh0LGUscixuLGksYSxzLGwsdSl7bGV0IGg9dCxmPWUsZD1NYXRoLmFicyhyLzIpLHA9TWF0aC5hYnMobi8yKTtkKz1uciguMDEqZCx1KSxwKz1uciguMDEqcCx1KTtsZXQgbT1pLGc9YTtmb3IoO208MDspbSs9MipNYXRoLlBJLGcrPTIqTWF0aC5QSTtnLW0+MipNYXRoLlBJJiYobT0wLGc9MipNYXRoLlBJKTtsZXQgeT0yKk1hdGguUEkvdS5jdXJ2ZVN0ZXBDb3VudCx2PU1hdGgubWluKHkvMiwoZy1tKS8yKSx4PWtLKHYsaCxmLGQscCxtLGcsMSx1KTtpZighdS5kaXNhYmxlTXVsdGlTdHJva2Upe2xldCBiPWtLKHYsaCxmLGQscCxtLGcsMS41LHUpO3gucHVzaCguLi5iKX1yZXR1cm4gcyYmKGw/eC5wdXNoKC4uLlVoKGgsZixoK2QqTWF0aC5jb3MobSksZitwKk1hdGguc2luKG0pLHUpLC4uLlVoKGgsZixoK2QqTWF0aC5jb3MoZyksZitwKk1hdGguc2luKGcpLHUpKTp4LnB1c2goe29wOiJsaW5lVG8iLGRhdGE6W2gsZl19LHtvcDoibGluZVRvIixkYXRhOltoK2QqTWF0aC5jb3MobSksZitwKk1hdGguc2luKG0pXX0pKSx7dHlwZToicGF0aCIsb3BzOnh9fWZ1bmN0aW9uIGJLKHQsZSl7bGV0IHI9Q0soU0soakQodCkpKSxuPVtdLGk9WzAsMF0sYT1bMCwwXTtmb3IobGV0e2tleTpzLGRhdGE6bH1vZiByKXN3aXRjaChzKXtjYXNlIk0iOmE9W2xbMF0sbFsxXV0saT1bbFswXSxsWzFdXTticmVhaztjYXNlIkwiOm4ucHVzaCguLi5VaChhWzBdLGFbMV0sbFswXSxsWzFdLGUpKSxhPVtsWzBdLGxbMV1dO2JyZWFrO2Nhc2UiQyI6e2xldFt1LGgsZixkLHAsbV09bDtuLnB1c2goLi4uYV9lKHUsaCxmLGQscCxtLGEsZSkpLGE9W3AsbV07YnJlYWt9Y2FzZSJaIjpuLnB1c2goLi4uVWgoYVswXSxhWzFdLGlbMF0saVsxXSxlKSksYT1baVswXSxpWzFdXX1yZXR1cm57dHlwZToicGF0aCIsb3BzOm59fWZ1bmN0aW9uIFBEKHQsZSl7bGV0IHI9W107Zm9yKGxldCBuIG9mIHQpaWYobi5sZW5ndGgpe2xldCBpPWUubWF4UmFuZG9tbmVzc09mZnNldHx8MCxhPW4ubGVuZ3RoO2lmKGE+Mil7ci5wdXNoKHtvcDoibW92ZSIsZGF0YTpbblswXVswXStucihpLGUpLG5bMF1bMV0rbnIoaSxlKV19KTtmb3IobGV0IHM9MTtzPGE7cysrKXIucHVzaCh7b3A6ImxpbmVUbyIsZGF0YTpbbltzXVswXStucihpLGUpLG5bc11bMV0rbnIoaSxlKV19KX19cmV0dXJue3R5cGU6ImZpbGxQYXRoIixvcHM6cn19ZnVuY3Rpb24gZG0odCxlKXtyZXR1cm4gZnVuY3Rpb24ocixuKXtsZXQgaT1yLmZpbGxTdHlsZXx8ImhhY2h1cmUiO2lmKCFSc1tpXSlzd2l0Y2goaSl7Y2FzZSJ6aWd6YWciOlJzW2ldfHwoUnNbaV09bmV3IEZEKG4pKTticmVhaztjYXNlImNyb3NzLWhhdGNoIjpSc1tpXXx8KFJzW2ldPW5ldyAkRChuKSk7YnJlYWs7Y2FzZSJkb3RzIjpSc1tpXXx8KFJzW2ldPW5ldyB6RChuKSk7YnJlYWs7Y2FzZSJkYXNoZWQiOlJzW2ldfHwoUnNbaV09bmV3IEdEKG4pKTticmVhaztjYXNlInppZ3phZy1saW5lIjpSc1tpXXx8KFJzW2ldPW5ldyBWRChuKSk7YnJlYWs7ZGVmYXVsdDppPSJoYWNodXJlIixSc1tpXXx8KFJzW2ldPW5ldyB2MihuKSl9cmV0dXJuIFJzW2ldfShlLG5fZSkuZmlsbFBvbHlnb25zKHQsZSl9ZnVuY3Rpb24gd0sodCl7bGV0IGU9T2JqZWN0LmFzc2lnbih7fSx0KTtyZXR1cm4gZS5yYW5kb21pemVyPXZvaWQgMCx0LnNlZWQmJihlLnNlZWQ9dC5zZWVkKzEpLGV9ZnVuY3Rpb24gTEsodCl7cmV0dXJuIHQucmFuZG9taXplcnx8KHQucmFuZG9taXplcj1uZXcgVUQodC5zZWVkfHwwKSksdC5yYW5kb21pemVyLm5leHQoKX1mdW5jdGlvbiBCdyh0LGUscixuPTEpe3JldHVybiByLnJvdWdobmVzcypuKihMSyhyKSooZS10KSt0KX1mdW5jdGlvbiBucih0LGUscj0xKXtyZXR1cm4gQncoLXQsdCxlLHIpfWZ1bmN0aW9uIFVoKHQsZSxyLG4saSxhPSExKXtsZXQgcz1hP2kuZGlzYWJsZU11bHRpU3Ryb2tlRmlsbDppLmRpc2FibGVNdWx0aVN0cm9rZSxsPVdEKHQsZSxyLG4saSwhMCwhMSk7aWYocylyZXR1cm4gbDtsZXQgdT1XRCh0LGUscixuLGksITAsITApO3JldHVybiBsLmNvbmNhdCh1KX1mdW5jdGlvbiBXRCh0LGUscixuLGksYSxzKXtsZXQgbD1NYXRoLnBvdyh0LXIsMikrTWF0aC5wb3coZS1uLDIpLHU9TWF0aC5zcXJ0KGwpLGg9MTtoPXU8MjAwPzE6dT41MDA/LjQ6LS4wMDE2NjY4KnUrMS4yMzMzMzQ7bGV0IGY9aS5tYXhSYW5kb21uZXNzT2Zmc2V0fHwwO2YqZioxMDA+bCYmKGY9dS8xMCk7bGV0IGQ9Zi8yLHA9LjIrLjIqTEsoaSksbT1pLmJvd2luZyppLm1heFJhbmRvbW5lc3NPZmZzZXQqKG4tZSkvMjAwLGc9aS5ib3dpbmcqaS5tYXhSYW5kb21uZXNzT2Zmc2V0Kih0LXIpLzIwMDttPW5yKG0saSxoKSxnPW5yKGcsaSxoKTtsZXQgeT1bXSx2PW8oKCk9Pm5yKGQsaSxoKSwiTSIpLHg9bygoKT0+bnIoZixpLGgpLCJrIiksYj1pLnByZXNlcnZlVmVydGljZXM7cmV0dXJuIGEmJihzP3kucHVzaCh7b3A6Im1vdmUiLGRhdGE6W3QrKGI/MDp2KCkpLGUrKGI/MDp2KCkpXX0pOnkucHVzaCh7b3A6Im1vdmUiLGRhdGE6W3QrKGI/MDpucihmLGksaCkpLGUrKGI/MDpucihmLGksaCkpXX0pKSxzP3kucHVzaCh7b3A6ImJjdXJ2ZVRvIixkYXRhOlttK3QrKHItdCkqcCt2KCksZytlKyhuLWUpKnArdigpLG0rdCsyKihyLXQpKnArdigpLGcrZSsyKihuLWUpKnArdigpLHIrKGI/MDp2KCkpLG4rKGI/MDp2KCkpXX0pOnkucHVzaCh7b3A6ImJjdXJ2ZVRvIixkYXRhOlttK3QrKHItdCkqcCt4KCksZytlKyhuLWUpKnAreCgpLG0rdCsyKihyLXQpKnAreCgpLGcrZSsyKihuLWUpKnAreCgpLHIrKGI/MDp4KCkpLG4rKGI/MDp4KCkpXX0pLHl9ZnVuY3Rpb24gTXcodCxlLHIpe2lmKCF0Lmxlbmd0aClyZXR1cm5bXTtsZXQgbj1bXTtuLnB1c2goW3RbMF1bMF0rbnIoZSxyKSx0WzBdWzFdK25yKGUscildKSxuLnB1c2goW3RbMF1bMF0rbnIoZSxyKSx0WzBdWzFdK25yKGUscildKTtmb3IobGV0IGk9MTtpPHQubGVuZ3RoO2krKyluLnB1c2goW3RbaV1bMF0rbnIoZSxyKSx0W2ldWzFdK25yKGUscildKSxpPT09dC5sZW5ndGgtMSYmbi5wdXNoKFt0W2ldWzBdK25yKGUsciksdFtpXVsxXStucihlLHIpXSk7cmV0dXJuIEZ3KG4sbnVsbCxyKX1mdW5jdGlvbiBGdyh0LGUscil7bGV0IG49dC5sZW5ndGgsaT1bXTtpZihuPjMpe2xldCBhPVtdLHM9MS1yLmN1cnZlVGlnaHRuZXNzO2kucHVzaCh7b3A6Im1vdmUiLGRhdGE6W3RbMV1bMF0sdFsxXVsxXV19KTtmb3IobGV0IGw9MTtsKzI8bjtsKyspe2xldCB1PXRbbF07YVswXT1bdVswXSx1WzFdXSxhWzFdPVt1WzBdKyhzKnRbbCsxXVswXS1zKnRbbC0xXVswXSkvNix1WzFdKyhzKnRbbCsxXVsxXS1zKnRbbC0xXVsxXSkvNl0sYVsyXT1bdFtsKzFdWzBdKyhzKnRbbF1bMF0tcyp0W2wrMl1bMF0pLzYsdFtsKzFdWzFdKyhzKnRbbF1bMV0tcyp0W2wrMl1bMV0pLzZdLGFbM109W3RbbCsxXVswXSx0W2wrMV1bMV1dLGkucHVzaCh7b3A6ImJjdXJ2ZVRvIixkYXRhOlthWzFdWzBdLGFbMV1bMV0sYVsyXVswXSxhWzJdWzFdLGFbM11bMF0sYVszXVsxXV19KX1pZihlJiZlLmxlbmd0aD09PTIpe2xldCBsPXIubWF4UmFuZG9tbmVzc09mZnNldDtpLnB1c2goe29wOiJsaW5lVG8iLGRhdGE6W2VbMF0rbnIobCxyKSxlWzFdK25yKGwscildfSl9fWVsc2Ugbj09PTM/KGkucHVzaCh7b3A6Im1vdmUiLGRhdGE6W3RbMV1bMF0sdFsxXVsxXV19KSxpLnB1c2goe29wOiJiY3VydmVUbyIsZGF0YTpbdFsxXVswXSx0WzFdWzFdLHRbMl1bMF0sdFsyXVsxXSx0WzJdWzBdLHRbMl1bMV1dfSkpOm49PT0yJiZpLnB1c2goLi4uV0QodFswXVswXSx0WzBdWzFdLHRbMV1bMF0sdFsxXVsxXSxyLCEwLCEwKSk7cmV0dXJuIGl9ZnVuY3Rpb24gVEsodCxlLHIsbixpLGEscyxsKXtsZXQgdT1bXSxoPVtdO2lmKGwucm91Z2huZXNzPT09MCl7dC89NCxoLnB1c2goW2UrbipNYXRoLmNvcygtdCkscitpKk1hdGguc2luKC10KV0pO2ZvcihsZXQgZj0wO2Y8PTIqTWF0aC5QSTtmKz10KXtsZXQgZD1bZStuKk1hdGguY29zKGYpLHIraSpNYXRoLnNpbihmKV07dS5wdXNoKGQpLGgucHVzaChkKX1oLnB1c2goW2UrbipNYXRoLmNvcygwKSxyK2kqTWF0aC5zaW4oMCldKSxoLnB1c2goW2UrbipNYXRoLmNvcyh0KSxyK2kqTWF0aC5zaW4odCldKX1lbHNle2xldCBmPW5yKC41LGwpLU1hdGguUEkvMjtoLnB1c2goW25yKGEsbCkrZSsuOSpuKk1hdGguY29zKGYtdCksbnIoYSxsKStyKy45KmkqTWF0aC5zaW4oZi10KV0pO2xldCBkPTIqTWF0aC5QSStmLS4wMTtmb3IobGV0IHA9ZjtwPGQ7cCs9dCl7bGV0IG09W25yKGEsbCkrZStuKk1hdGguY29zKHApLG5yKGEsbCkrcitpKk1hdGguc2luKHApXTt1LnB1c2gobSksaC5wdXNoKG0pfWgucHVzaChbbnIoYSxsKStlK24qTWF0aC5jb3MoZisyKk1hdGguUEkrLjUqcyksbnIoYSxsKStyK2kqTWF0aC5zaW4oZisyKk1hdGguUEkrLjUqcyldKSxoLnB1c2goW25yKGEsbCkrZSsuOTgqbipNYXRoLmNvcyhmK3MpLG5yKGEsbCkrcisuOTgqaSpNYXRoLnNpbihmK3MpXSksaC5wdXNoKFtucihhLGwpK2UrLjkqbipNYXRoLmNvcyhmKy41KnMpLG5yKGEsbCkrcisuOSppKk1hdGguc2luKGYrLjUqcyldKX1yZXR1cm5baCx1XX1mdW5jdGlvbiBrSyh0LGUscixuLGksYSxzLGwsdSl7bGV0IGg9YStuciguMSx1KSxmPVtdO2YucHVzaChbbnIobCx1KStlKy45Km4qTWF0aC5jb3MoaC10KSxucihsLHUpK3IrLjkqaSpNYXRoLnNpbihoLXQpXSk7Zm9yKGxldCBkPWg7ZDw9cztkKz10KWYucHVzaChbbnIobCx1KStlK24qTWF0aC5jb3MoZCksbnIobCx1KStyK2kqTWF0aC5zaW4oZCldKTtyZXR1cm4gZi5wdXNoKFtlK24qTWF0aC5jb3MocykscitpKk1hdGguc2luKHMpXSksZi5wdXNoKFtlK24qTWF0aC5jb3MocykscitpKk1hdGguc2luKHMpXSksRncoZixudWxsLHUpfWZ1bmN0aW9uIGFfZSh0LGUscixuLGksYSxzLGwpe2xldCB1PVtdLGg9W2wubWF4UmFuZG9tbmVzc09mZnNldHx8MSwobC5tYXhSYW5kb21uZXNzT2Zmc2V0fHwxKSsuM10sZj1bMCwwXSxkPWwuZGlzYWJsZU11bHRpU3Ryb2tlPzE6MixwPWwucHJlc2VydmVWZXJ0aWNlcztmb3IobGV0IG09MDttPGQ7bSsrKW09PT0wP3UucHVzaCh7b3A6Im1vdmUiLGRhdGE6W3NbMF0sc1sxXV19KTp1LnB1c2goe29wOiJtb3ZlIixkYXRhOltzWzBdKyhwPzA6bnIoaFswXSxsKSksc1sxXSsocD8wOm5yKGhbMF0sbCkpXX0pLGY9cD9baSxhXTpbaStucihoW21dLGwpLGErbnIoaFttXSxsKV0sdS5wdXNoKHtvcDoiYmN1cnZlVG8iLGRhdGE6W3QrbnIoaFttXSxsKSxlK25yKGhbbV0sbCkscitucihoW21dLGwpLG4rbnIoaFttXSxsKSxmWzBdLGZbMV1dfSk7cmV0dXJuIHV9ZnVuY3Rpb24geTIodCl7cmV0dXJuWy4uLnRdfWZ1bmN0aW9uIEVLKHQsZT0wKXtsZXQgcj10Lmxlbmd0aDtpZihyPDMpdGhyb3cgbmV3IEVycm9yKCJBIGN1cnZlIG11c3QgaGF2ZSBhdCBsZWFzdCB0aHJlZSBwb2ludHMuIik7bGV0IG49W107aWYocj09PTMpbi5wdXNoKHkyKHRbMF0pLHkyKHRbMV0pLHkyKHRbMl0pLHkyKHRbMl0pKTtlbHNle2xldCBpPVtdO2kucHVzaCh0WzBdLHRbMF0pO2ZvcihsZXQgbD0xO2w8dC5sZW5ndGg7bCsrKWkucHVzaCh0W2xdKSxsPT09dC5sZW5ndGgtMSYmaS5wdXNoKHRbbF0pO2xldCBhPVtdLHM9MS1lO24ucHVzaCh5MihpWzBdKSk7Zm9yKGxldCBsPTE7bCsyPGkubGVuZ3RoO2wrKyl7bGV0IHU9aVtsXTthWzBdPVt1WzBdLHVbMV1dLGFbMV09W3VbMF0rKHMqaVtsKzFdWzBdLXMqaVtsLTFdWzBdKS82LHVbMV0rKHMqaVtsKzFdWzFdLXMqaVtsLTFdWzFdKS82XSxhWzJdPVtpW2wrMV1bMF0rKHMqaVtsXVswXS1zKmlbbCsyXVswXSkvNixpW2wrMV1bMV0rKHMqaVtsXVsxXS1zKmlbbCsyXVsxXSkvNl0sYVszXT1baVtsKzFdWzBdLGlbbCsxXVsxXV0sbi5wdXNoKGFbMV0sYVsyXSxhWzNdKX19cmV0dXJuIG59ZnVuY3Rpb24gUHcodCxlKXtyZXR1cm4gTWF0aC5wb3codFswXS1lWzBdLDIpK01hdGgucG93KHRbMV0tZVsxXSwyKX1mdW5jdGlvbiBzX2UodCxlLHIpe2xldCBuPVB3KGUscik7aWYobj09PTApcmV0dXJuIFB3KHQsZSk7bGV0IGk9KCh0WzBdLWVbMF0pKihyWzBdLWVbMF0pKyh0WzFdLWVbMV0pKihyWzFdLWVbMV0pKS9uO3JldHVybiBpPU1hdGgubWF4KDAsTWF0aC5taW4oMSxpKSksUHcodCxPZChlLHIsaSkpfWZ1bmN0aW9uIE9kKHQsZSxyKXtyZXR1cm5bdFswXSsoZVswXS10WzBdKSpyLHRbMV0rKGVbMV0tdFsxXSkqcl19ZnVuY3Rpb24gcUQodCxlLHIsbil7bGV0IGk9bnx8W107aWYoZnVuY3Rpb24obCx1KXtsZXQgaD1sW3UrMF0sZj1sW3UrMV0sZD1sW3UrMl0scD1sW3UrM10sbT0zKmZbMF0tMipoWzBdLXBbMF07bSo9bTtsZXQgZz0zKmZbMV0tMipoWzFdLXBbMV07Zyo9ZztsZXQgeT0zKmRbMF0tMipwWzBdLWhbMF07eSo9eTtsZXQgdj0zKmRbMV0tMipwWzFdLWhbMV07cmV0dXJuIHYqPXYsbTx5JiYobT15KSxnPHYmJihnPXYpLG0rZ30odCxlKTxyKXtsZXQgbD10W2UrMF07aS5sZW5ndGg/KGE9aVtpLmxlbmd0aC0xXSxzPWwsTWF0aC5zcXJ0KFB3KGEscykpPjEmJmkucHVzaChsKSk6aS5wdXNoKGwpLGkucHVzaCh0W2UrM10pfWVsc2V7bGV0IHU9dFtlKzBdLGg9dFtlKzFdLGY9dFtlKzJdLGQ9dFtlKzNdLHA9T2QodSxoLC41KSxtPU9kKGgsZiwuNSksZz1PZChmLGQsLjUpLHk9T2QocCxtLC41KSx2PU9kKG0sZywuNSkseD1PZCh5LHYsLjUpO3FEKFt1LHAseSx4XSwwLHIsaSkscUQoW3gsdixnLGRdLDAscixpKX12YXIgYSxzO3JldHVybiBpfWZ1bmN0aW9uIG9fZSh0LGUpe3JldHVybiAkdyh0LDAsdC5sZW5ndGgsZSl9ZnVuY3Rpb24gJHcodCxlLHIsbixpKXtsZXQgYT1pfHxbXSxzPXRbZV0sbD10W3ItMV0sdT0wLGg9MTtmb3IobGV0IGY9ZSsxO2Y8ci0xOysrZil7bGV0IGQ9c19lKHRbZl0scyxsKTtkPnUmJih1PWQsaD1mKX1yZXR1cm4gTWF0aC5zcXJ0KHUpPm4/KCR3KHQsZSxoKzEsbixhKSwkdyh0LGgscixuLGEpKTooYS5sZW5ndGh8fGEucHVzaChzKSxhLnB1c2gobCkpLGF9ZnVuY3Rpb24gQkQodCxlPS4xNSxyKXtsZXQgbj1bXSxpPSh0Lmxlbmd0aC0xKS8zO2ZvcihsZXQgYT0wO2E8aTthKyspcUQodCwzKmEsZSxuKTtyZXR1cm4gciYmcj4wPyR3KG4sMCxuLmxlbmd0aCxyKTpufXZhciB2MixGRCwkRCx6RCxHRCxWRCxScyxVRCxyX2UsSUQseUssTncsbl9lLHJvLHBtLFlELEl3LFhELFhlLFd0PU4oKCk9PnsidXNlIHN0cmljdCI7byhNRCwidCIpO28oZV9lLCJlIik7byh0X2UsInMiKTtvKHgyLCJuIik7djI9Y2xhc3N7c3RhdGlje28odGhpcywibyIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuaGVscGVyPWV9ZmlsbFBvbHlnb25zKGUscil7cmV0dXJuIHRoaXMuX2ZpbGxQb2x5Z29ucyhlLHIpfV9maWxsUG9seWdvbnMoZSxyKXtsZXQgbj14MihlLHIpO3JldHVybnt0eXBlOiJmaWxsU2tldGNoIixvcHM6dGhpcy5yZW5kZXJMaW5lcyhuLHIpfX1yZW5kZXJMaW5lcyhlLHIpe2xldCBuPVtdO2ZvcihsZXQgaSBvZiBlKW4ucHVzaCguLi50aGlzLmhlbHBlci5kb3VibGVMaW5lT3BzKGlbMF1bMF0saVswXVsxXSxpWzFdWzBdLGlbMV1bMV0scikpO3JldHVybiBufX07byh6dywiYSIpO0ZEPWNsYXNzIGV4dGVuZHMgdjJ7c3RhdGlje28odGhpcywiaCIpfWZpbGxQb2x5Z29ucyhlLHIpe2xldCBuPXIuaGFjaHVyZUdhcDtuPDAmJihuPTQqci5zdHJva2VXaWR0aCksbj1NYXRoLm1heChuLC4xKTtsZXQgaT14MihlLE9iamVjdC5hc3NpZ24oe30scix7aGFjaHVyZUdhcDpufSkpLGE9TWF0aC5QSS8xODAqci5oYWNodXJlQW5nbGUscz1bXSxsPS41Km4qTWF0aC5jb3MoYSksdT0uNSpuKk1hdGguc2luKGEpO2ZvcihsZXRbaCxmXW9mIGkpencoW2gsZl0pJiZzLnB1c2goW1toWzBdLWwsaFsxXSt1XSxbLi4uZl1dLFtbaFswXStsLGhbMV0tdV0sWy4uLmZdXSk7cmV0dXJue3R5cGU6ImZpbGxTa2V0Y2giLG9wczp0aGlzLnJlbmRlckxpbmVzKHMscil9fX0sJEQ9Y2xhc3MgZXh0ZW5kcyB2MntzdGF0aWN7byh0aGlzLCJyIil9ZmlsbFBvbHlnb25zKGUscil7bGV0IG49dGhpcy5fZmlsbFBvbHlnb25zKGUsciksaT1PYmplY3QuYXNzaWduKHt9LHIse2hhY2h1cmVBbmdsZTpyLmhhY2h1cmVBbmdsZSs5MH0pLGE9dGhpcy5fZmlsbFBvbHlnb25zKGUsaSk7cmV0dXJuIG4ub3BzPW4ub3BzLmNvbmNhdChhLm9wcyksbn19LHpEPWNsYXNze3N0YXRpY3tvKHRoaXMsImkiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLmhlbHBlcj1lfWZpbGxQb2x5Z29ucyhlLHIpe2xldCBuPXgyKGUscj1PYmplY3QuYXNzaWduKHt9LHIse2hhY2h1cmVBbmdsZTowfSkpO3JldHVybiB0aGlzLmRvdHNPbkxpbmVzKG4scil9ZG90c09uTGluZXMoZSxyKXtsZXQgbj1bXSxpPXIuaGFjaHVyZUdhcDtpPDAmJihpPTQqci5zdHJva2VXaWR0aCksaT1NYXRoLm1heChpLC4xKTtsZXQgYT1yLmZpbGxXZWlnaHQ7YTwwJiYoYT1yLnN0cm9rZVdpZHRoLzIpO2xldCBzPWkvNDtmb3IobGV0IGwgb2YgZSl7bGV0IHU9encobCksaD11L2ksZj1NYXRoLmNlaWwoaCktMSxkPXUtZippLHA9KGxbMF1bMF0rbFsxXVswXSkvMi1pLzQsbT1NYXRoLm1pbihsWzBdWzFdLGxbMV1bMV0pO2ZvcihsZXQgZz0wO2c8ZjtnKyspe2xldCB5PW0rZCtnKmksdj1wLXMrMipNYXRoLnJhbmRvbSgpKnMseD15LXMrMipNYXRoLnJhbmRvbSgpKnMsYj10aGlzLmhlbHBlci5lbGxpcHNlKHYseCxhLGEscik7bi5wdXNoKC4uLmIub3BzKX19cmV0dXJue3R5cGU6ImZpbGxTa2V0Y2giLG9wczpufX19LEdEPWNsYXNze3N0YXRpY3tvKHRoaXMsImMiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLmhlbHBlcj1lfWZpbGxQb2x5Z29ucyhlLHIpe2xldCBuPXgyKGUscik7cmV0dXJue3R5cGU6ImZpbGxTa2V0Y2giLG9wczp0aGlzLmRhc2hlZExpbmUobixyKX19ZGFzaGVkTGluZShlLHIpe2xldCBuPXIuZGFzaE9mZnNldDwwP3IuaGFjaHVyZUdhcDwwPzQqci5zdHJva2VXaWR0aDpyLmhhY2h1cmVHYXA6ci5kYXNoT2Zmc2V0LGk9ci5kYXNoR2FwPDA/ci5oYWNodXJlR2FwPDA/NCpyLnN0cm9rZVdpZHRoOnIuaGFjaHVyZUdhcDpyLmRhc2hHYXAsYT1bXTtyZXR1cm4gZS5mb3JFYWNoKHM9PntsZXQgbD16dyhzKSx1PU1hdGguZmxvb3IobC8obitpKSksaD0obCtpLXUqKG4raSkpLzIsZj1zWzBdLGQ9c1sxXTtmWzBdPmRbMF0mJihmPXNbMV0sZD1zWzBdKTtsZXQgcD1NYXRoLmF0YW4oKGRbMV0tZlsxXSkvKGRbMF0tZlswXSkpO2ZvcihsZXQgbT0wO208dTttKyspe2xldCBnPW0qKG4raSkseT1nK24sdj1bZlswXStnKk1hdGguY29zKHApK2gqTWF0aC5jb3MocCksZlsxXStnKk1hdGguc2luKHApK2gqTWF0aC5zaW4ocCldLHg9W2ZbMF0reSpNYXRoLmNvcyhwKStoKk1hdGguY29zKHApLGZbMV0reSpNYXRoLnNpbihwKStoKk1hdGguc2luKHApXTthLnB1c2goLi4udGhpcy5oZWxwZXIuZG91YmxlTGluZU9wcyh2WzBdLHZbMV0seFswXSx4WzFdLHIpKX19KSxhfX0sVkQ9Y2xhc3N7c3RhdGlje28odGhpcywibCIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuaGVscGVyPWV9ZmlsbFBvbHlnb25zKGUscil7bGV0IG49ci5oYWNodXJlR2FwPDA/NCpyLnN0cm9rZVdpZHRoOnIuaGFjaHVyZUdhcCxpPXIuemlnemFnT2Zmc2V0PDA/bjpyLnppZ3phZ09mZnNldCxhPXgyKGUscj1PYmplY3QuYXNzaWduKHt9LHIse2hhY2h1cmVHYXA6bitpfSkpO3JldHVybnt0eXBlOiJmaWxsU2tldGNoIixvcHM6dGhpcy56aWd6YWdMaW5lcyhhLGkscil9fXppZ3phZ0xpbmVzKGUscixuKXtsZXQgaT1bXTtyZXR1cm4gZS5mb3JFYWNoKGE9PntsZXQgcz16dyhhKSxsPU1hdGgucm91bmQocy8oMipyKSksdT1hWzBdLGg9YVsxXTt1WzBdPmhbMF0mJih1PWFbMV0saD1hWzBdKTtsZXQgZj1NYXRoLmF0YW4oKGhbMV0tdVsxXSkvKGhbMF0tdVswXSkpO2ZvcihsZXQgZD0wO2Q8bDtkKyspe2xldCBwPTIqZCpyLG09MiooZCsxKSpyLGc9TWF0aC5zcXJ0KDIqTWF0aC5wb3cociwyKSkseT1bdVswXStwKk1hdGguY29zKGYpLHVbMV0rcCpNYXRoLnNpbihmKV0sdj1bdVswXSttKk1hdGguY29zKGYpLHVbMV0rbSpNYXRoLnNpbihmKV0seD1beVswXStnKk1hdGguY29zKGYrTWF0aC5QSS80KSx5WzFdK2cqTWF0aC5zaW4oZitNYXRoLlBJLzQpXTtpLnB1c2goLi4udGhpcy5oZWxwZXIuZG91YmxlTGluZU9wcyh5WzBdLHlbMV0seFswXSx4WzFdLG4pLC4uLnRoaXMuaGVscGVyLmRvdWJsZUxpbmVPcHMoeFswXSx4WzFdLHZbMF0sdlsxXSxuKSl9fSksaX19LFJzPXt9LFVEPWNsYXNze3N0YXRpY3tvKHRoaXMsInAiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLnNlZWQ9ZX1uZXh0KCl7cmV0dXJuIHRoaXMuc2VlZD8oMioqMzEtMSYodGhpcy5zZWVkPU1hdGguaW11bCg0ODI3MSx0aGlzLnNlZWQpKSkvMioqMzE6TWF0aC5yYW5kb20oKX19LHJfZT0wLElEPTEseUs9MixOdz17QTo3LGE6NyxDOjYsYzo2LEg6MSxoOjEsTDoyLGw6MixNOjIsbToyLFE6NCxxOjQsUzo0LHM6NCxUOjIsdDoyLFY6MSx2OjEsWjowLHo6MH07byhPRCwiayIpO28oakQsImIiKTtvKFNLLCJ5Iik7byhDSywibSIpO28oZzIsInciKTtvKEFLLCJ4Iik7bl9lPXtyYW5kT2Zmc2V0Om8oZnVuY3Rpb24odCxlKXtyZXR1cm4gbnIodCxlKX0sInJhbmRPZmZzZXQiKSxyYW5kT2Zmc2V0V2l0aFJhbmdlOm8oZnVuY3Rpb24odCxlLHIpe3JldHVybiBCdyh0LGUscil9LCJyYW5kT2Zmc2V0V2l0aFJhbmdlIiksZWxsaXBzZTpvKGZ1bmN0aW9uKHQsZSxyLG4saSl7bGV0IGE9REsocixuLGkpO3JldHVybiBIRCh0LGUsaSxhKS5vcHNldH0sImVsbGlwc2UiKSxkb3VibGVMaW5lT3BzOm8oZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gVWgodCxlLHIsbixpLCEwKX0sImRvdWJsZUxpbmVPcHMiKX07byhfSywidiIpO28oT3csIlMiKTtvKGlfZSwiTyIpO28odkssIkwiKTtvKERLLCJUIik7byhIRCwiRCIpO28oeEssIkEiKTtvKGJLLCJfIik7byhQRCwiSSIpO28oZG0sIkMiKTtvKHdLLCJ6Iik7byhMSywiVyIpO28oQncsIkUiKTtvKG5yLCJHIik7byhVaCwiJCIpO28oV0QsIlIiKTtvKE13LCJqIik7byhGdywicSIpO28oVEssIkYiKTtvKGtLLCJWIik7byhhX2UsIloiKTtvKHkyLCJRIik7byhFSywiSCIpO28oUHcsIk4iKTtvKHNfZSwiQiIpO28oT2QsIkoiKTtvKHFELCJLIik7byhvX2UsIlUiKTtvKCR3LCJYIik7byhCRCwiWSIpO3JvPSJub25lIixwbT1jbGFzc3tzdGF0aWN7byh0aGlzLCJldCIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuZGVmYXVsdE9wdGlvbnM9e21heFJhbmRvbW5lc3NPZmZzZXQ6Mixyb3VnaG5lc3M6MSxib3dpbmc6MSxzdHJva2U6IiMwMDAiLHN0cm9rZVdpZHRoOjEsY3VydmVUaWdodG5lc3M6MCxjdXJ2ZUZpdHRpbmc6Ljk1LGN1cnZlU3RlcENvdW50OjksZmlsbFN0eWxlOiJoYWNodXJlIixmaWxsV2VpZ2h0Oi0xLGhhY2h1cmVBbmdsZTotNDEsaGFjaHVyZUdhcDotMSxkYXNoT2Zmc2V0Oi0xLGRhc2hHYXA6LTEsemlnemFnT2Zmc2V0Oi0xLHNlZWQ6MCxkaXNhYmxlTXVsdGlTdHJva2U6ITEsZGlzYWJsZU11bHRpU3Ryb2tlRmlsbDohMSxwcmVzZXJ2ZVZlcnRpY2VzOiExLGZpbGxTaGFwZVJvdWdobmVzc0dhaW46Ljh9LHRoaXMuY29uZmlnPWV8fHt9LHRoaXMuY29uZmlnLm9wdGlvbnMmJih0aGlzLmRlZmF1bHRPcHRpb25zPXRoaXMuX28odGhpcy5jb25maWcub3B0aW9ucykpfXN0YXRpYyBuZXdTZWVkKCl7cmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoyKiozMSl9X28oZSl7cmV0dXJuIGU/T2JqZWN0LmFzc2lnbih7fSx0aGlzLmRlZmF1bHRPcHRpb25zLGUpOnRoaXMuZGVmYXVsdE9wdGlvbnN9X2QoZSxyLG4pe3JldHVybntzaGFwZTplLHNldHM6cnx8W10sb3B0aW9uczpufHx0aGlzLmRlZmF1bHRPcHRpb25zfX1saW5lKGUscixuLGksYSl7bGV0IHM9dGhpcy5fbyhhKTtyZXR1cm4gdGhpcy5fZCgibGluZSIsW19LKGUscixuLGkscyldLHMpfXJlY3RhbmdsZShlLHIsbixpLGEpe2xldCBzPXRoaXMuX28oYSksbD1bXSx1PWlfZShlLHIsbixpLHMpO2lmKHMuZmlsbCl7bGV0IGg9W1tlLHJdLFtlK24scl0sW2UrbixyK2ldLFtlLHIraV1dO3MuZmlsbFN0eWxlPT09InNvbGlkIj9sLnB1c2goUEQoW2hdLHMpKTpsLnB1c2goZG0oW2hdLHMpKX1yZXR1cm4gcy5zdHJva2UhPT1ybyYmbC5wdXNoKHUpLHRoaXMuX2QoInJlY3RhbmdsZSIsbCxzKX1lbGxpcHNlKGUscixuLGksYSl7bGV0IHM9dGhpcy5fbyhhKSxsPVtdLHU9REsobixpLHMpLGg9SEQoZSxyLHMsdSk7aWYocy5maWxsKWlmKHMuZmlsbFN0eWxlPT09InNvbGlkIil7bGV0IGY9SEQoZSxyLHMsdSkub3BzZXQ7Zi50eXBlPSJmaWxsUGF0aCIsbC5wdXNoKGYpfWVsc2UgbC5wdXNoKGRtKFtoLmVzdGltYXRlZFBvaW50c10scykpO3JldHVybiBzLnN0cm9rZSE9PXJvJiZsLnB1c2goaC5vcHNldCksdGhpcy5fZCgiZWxsaXBzZSIsbCxzKX1jaXJjbGUoZSxyLG4saSl7bGV0IGE9dGhpcy5lbGxpcHNlKGUscixuLG4saSk7cmV0dXJuIGEuc2hhcGU9ImNpcmNsZSIsYX1saW5lYXJQYXRoKGUscil7bGV0IG49dGhpcy5fbyhyKTtyZXR1cm4gdGhpcy5fZCgibGluZWFyUGF0aCIsW093KGUsITEsbildLG4pfWFyYyhlLHIsbixpLGEscyxsPSExLHUpe2xldCBoPXRoaXMuX28odSksZj1bXSxkPXhLKGUscixuLGksYSxzLGwsITAsaCk7aWYobCYmaC5maWxsKWlmKGguZmlsbFN0eWxlPT09InNvbGlkIil7bGV0IHA9T2JqZWN0LmFzc2lnbih7fSxoKTtwLmRpc2FibGVNdWx0aVN0cm9rZT0hMDtsZXQgbT14SyhlLHIsbixpLGEscywhMCwhMSxwKTttLnR5cGU9ImZpbGxQYXRoIixmLnB1c2gobSl9ZWxzZSBmLnB1c2goZnVuY3Rpb24ocCxtLGcseSx2LHgsYil7bGV0IHc9cCxDPW0sVD1NYXRoLmFicyhnLzIpLEU9TWF0aC5hYnMoeS8yKTtUKz1uciguMDEqVCxiKSxFKz1uciguMDEqRSxiKTtsZXQgQT12LFM9eDtmb3IoO0E8MDspQSs9MipNYXRoLlBJLFMrPTIqTWF0aC5QSTtTLUE+MipNYXRoLlBJJiYoQT0wLFM9MipNYXRoLlBJKTtsZXQgXz0oUy1BKS9iLmN1cnZlU3RlcENvdW50LEk9W107Zm9yKGxldCBEPUE7RDw9UztEKz1fKUkucHVzaChbdytUKk1hdGguY29zKEQpLEMrRSpNYXRoLnNpbihEKV0pO3JldHVybiBJLnB1c2goW3crVCpNYXRoLmNvcyhTKSxDK0UqTWF0aC5zaW4oUyldKSxJLnB1c2goW3csQ10pLGRtKFtJXSxiKX0oZSxyLG4saSxhLHMsaCkpO3JldHVybiBoLnN0cm9rZSE9PXJvJiZmLnB1c2goZCksdGhpcy5fZCgiYXJjIixmLGgpfWN1cnZlKGUscil7bGV0IG49dGhpcy5fbyhyKSxpPVtdLGE9dksoZSxuKTtpZihuLmZpbGwmJm4uZmlsbCE9PXJvKWlmKG4uZmlsbFN0eWxlPT09InNvbGlkIil7bGV0IHM9dksoZSxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbikse2Rpc2FibGVNdWx0aVN0cm9rZTohMCxyb3VnaG5lc3M6bi5yb3VnaG5lc3M/bi5yb3VnaG5lc3Mrbi5maWxsU2hhcGVSb3VnaG5lc3NHYWluOjB9KSk7aS5wdXNoKHt0eXBlOiJmaWxsUGF0aCIsb3BzOnRoaXMuX21lcmdlZFNoYXBlKHMub3BzKX0pfWVsc2V7bGV0IHM9W10sbD1lO2lmKGwubGVuZ3RoKXtsZXQgdT10eXBlb2YgbFswXVswXT09Im51bWJlciI/W2xdOmw7Zm9yKGxldCBoIG9mIHUpaC5sZW5ndGg8Mz9zLnB1c2goLi4uaCk6aC5sZW5ndGg9PT0zP3MucHVzaCguLi5CRChFSyhbaFswXSxoWzBdLGhbMV0saFsyXV0pLDEwLCgxK24ucm91Z2huZXNzKS8yKSk6cy5wdXNoKC4uLkJEKEVLKGgpLDEwLCgxK24ucm91Z2huZXNzKS8yKSl9cy5sZW5ndGgmJmkucHVzaChkbShbc10sbikpfXJldHVybiBuLnN0cm9rZSE9PXJvJiZpLnB1c2goYSksdGhpcy5fZCgiY3VydmUiLGksbil9cG9seWdvbihlLHIpe2xldCBuPXRoaXMuX28ociksaT1bXSxhPU93KGUsITAsbik7cmV0dXJuIG4uZmlsbCYmKG4uZmlsbFN0eWxlPT09InNvbGlkIj9pLnB1c2goUEQoW2VdLG4pKTppLnB1c2goZG0oW2VdLG4pKSksbi5zdHJva2UhPT1ybyYmaS5wdXNoKGEpLHRoaXMuX2QoInBvbHlnb24iLGksbil9cGF0aChlLHIpe2xldCBuPXRoaXMuX28ociksaT1bXTtpZighZSlyZXR1cm4gdGhpcy5fZCgicGF0aCIsaSxuKTtlPShlfHwiIikucmVwbGFjZSgvXG4vZywiICIpLnJlcGxhY2UoLygtXHMpL2csIi0iKS5yZXBsYWNlKCIvKHNzKS9nIiwiICIpO2xldCBhPW4uZmlsbCYmbi5maWxsIT09InRyYW5zcGFyZW50IiYmbi5maWxsIT09cm8scz1uLnN0cm9rZSE9PXJvLGw9ISEobi5zaW1wbGlmaWNhdGlvbiYmbi5zaW1wbGlmaWNhdGlvbjwxKSx1PWZ1bmN0aW9uKGYsZCxwKXtsZXQgbT1DSyhTSyhqRChmKSkpLGc9W10seT1bXSx2PVswLDBdLHg9W10sYj1vKCgpPT57eC5sZW5ndGg+PTQmJnkucHVzaCguLi5CRCh4LGQpKSx4PVtdfSwiaSIpLHc9bygoKT0+e2IoKSx5Lmxlbmd0aCYmKGcucHVzaCh5KSx5PVtdKX0sImMiKTtmb3IobGV0e2tleTpULGRhdGE6RX1vZiBtKXN3aXRjaChUKXtjYXNlIk0iOncoKSx2PVtFWzBdLEVbMV1dLHkucHVzaCh2KTticmVhaztjYXNlIkwiOmIoKSx5LnB1c2goW0VbMF0sRVsxXV0pO2JyZWFrO2Nhc2UiQyI6aWYoIXgubGVuZ3RoKXtsZXQgQT15Lmxlbmd0aD95W3kubGVuZ3RoLTFdOnY7eC5wdXNoKFtBWzBdLEFbMV1dKX14LnB1c2goW0VbMF0sRVsxXV0pLHgucHVzaChbRVsyXSxFWzNdXSkseC5wdXNoKFtFWzRdLEVbNV1dKTticmVhaztjYXNlIloiOmIoKSx5LnB1c2goW3ZbMF0sdlsxXV0pfWlmKHcoKSwhcClyZXR1cm4gZztsZXQgQz1bXTtmb3IobGV0IFQgb2YgZyl7bGV0IEU9b19lKFQscCk7RS5sZW5ndGgmJkMucHVzaChFKX1yZXR1cm4gQ30oZSwxLGw/NC00KihuLnNpbXBsaWZpY2F0aW9ufHwxKTooMStuLnJvdWdobmVzcykvMiksaD1iSyhlLG4pO2lmKGEpaWYobi5maWxsU3R5bGU9PT0ic29saWQiKWlmKHUubGVuZ3RoPT09MSl7bGV0IGY9YksoZSxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbikse2Rpc2FibGVNdWx0aVN0cm9rZTohMCxyb3VnaG5lc3M6bi5yb3VnaG5lc3M/bi5yb3VnaG5lc3Mrbi5maWxsU2hhcGVSb3VnaG5lc3NHYWluOjB9KSk7aS5wdXNoKHt0eXBlOiJmaWxsUGF0aCIsb3BzOnRoaXMuX21lcmdlZFNoYXBlKGYub3BzKX0pfWVsc2UgaS5wdXNoKFBEKHUsbikpO2Vsc2UgaS5wdXNoKGRtKHUsbikpO3JldHVybiBzJiYobD91LmZvckVhY2goZj0+e2kucHVzaChPdyhmLCExLG4pKX0pOmkucHVzaChoKSksdGhpcy5fZCgicGF0aCIsaSxuKX1vcHNUb1BhdGgoZSxyKXtsZXQgbj0iIjtmb3IobGV0IGkgb2YgZS5vcHMpe2xldCBhPXR5cGVvZiByPT0ibnVtYmVyIiYmcj49MD9pLmRhdGEubWFwKHM9PitzLnRvRml4ZWQocikpOmkuZGF0YTtzd2l0Y2goaS5vcCl7Y2FzZSJtb3ZlIjpuKz1gTSR7YVswXX0gJHthWzFdfSBgO2JyZWFrO2Nhc2UiYmN1cnZlVG8iOm4rPWBDJHthWzBdfSAke2FbMV19LCAke2FbMl19ICR7YVszXX0sICR7YVs0XX0gJHthWzVdfSBgO2JyZWFrO2Nhc2UibGluZVRvIjpuKz1gTCR7YVswXX0gJHthWzFdfSBgfX1yZXR1cm4gbi50cmltKCl9dG9QYXRocyhlKXtsZXQgcj1lLnNldHN8fFtdLG49ZS5vcHRpb25zfHx0aGlzLmRlZmF1bHRPcHRpb25zLGk9W107Zm9yKGxldCBhIG9mIHIpe2xldCBzPW51bGw7c3dpdGNoKGEudHlwZSl7Y2FzZSJwYXRoIjpzPXtkOnRoaXMub3BzVG9QYXRoKGEpLHN0cm9rZTpuLnN0cm9rZSxzdHJva2VXaWR0aDpuLnN0cm9rZVdpZHRoLGZpbGw6cm99O2JyZWFrO2Nhc2UiZmlsbFBhdGgiOnM9e2Q6dGhpcy5vcHNUb1BhdGgoYSksc3Ryb2tlOnJvLHN0cm9rZVdpZHRoOjAsZmlsbDpuLmZpbGx8fHJvfTticmVhaztjYXNlImZpbGxTa2V0Y2giOnM9dGhpcy5maWxsU2tldGNoKGEsbil9cyYmaS5wdXNoKHMpfXJldHVybiBpfWZpbGxTa2V0Y2goZSxyKXtsZXQgbj1yLmZpbGxXZWlnaHQ7cmV0dXJuIG48MCYmKG49ci5zdHJva2VXaWR0aC8yKSx7ZDp0aGlzLm9wc1RvUGF0aChlKSxzdHJva2U6ci5maWxsfHxybyxzdHJva2VXaWR0aDpuLGZpbGw6cm99fV9tZXJnZWRTaGFwZShlKXtyZXR1cm4gZS5maWx0ZXIoKHIsbik9Pm49PT0wfHxyLm9wIT09Im1vdmUiKX19LFlEPWNsYXNze3N0YXRpY3tvKHRoaXMsInN0Iil9Y29uc3RydWN0b3IoZSxyKXt0aGlzLmNhbnZhcz1lLHRoaXMuY3R4PXRoaXMuY2FudmFzLmdldENvbnRleHQoIjJkIiksdGhpcy5nZW49bmV3IHBtKHIpfWRyYXcoZSl7bGV0IHI9ZS5zZXRzfHxbXSxuPWUub3B0aW9uc3x8dGhpcy5nZXREZWZhdWx0T3B0aW9ucygpLGk9dGhpcy5jdHgsYT1lLm9wdGlvbnMuZml4ZWREZWNpbWFsUGxhY2VEaWdpdHM7Zm9yKGxldCBzIG9mIHIpc3dpdGNoKHMudHlwZSl7Y2FzZSJwYXRoIjppLnNhdmUoKSxpLnN0cm9rZVN0eWxlPW4uc3Ryb2tlPT09Im5vbmUiPyJ0cmFuc3BhcmVudCI6bi5zdHJva2UsaS5saW5lV2lkdGg9bi5zdHJva2VXaWR0aCxuLnN0cm9rZUxpbmVEYXNoJiZpLnNldExpbmVEYXNoKG4uc3Ryb2tlTGluZURhc2gpLG4uc3Ryb2tlTGluZURhc2hPZmZzZXQmJihpLmxpbmVEYXNoT2Zmc2V0PW4uc3Ryb2tlTGluZURhc2hPZmZzZXQpLHRoaXMuX2RyYXdUb0NvbnRleHQoaSxzLGEpLGkucmVzdG9yZSgpO2JyZWFrO2Nhc2UiZmlsbFBhdGgiOntpLnNhdmUoKSxpLmZpbGxTdHlsZT1uLmZpbGx8fCIiO2xldCBsPWUuc2hhcGU9PT0iY3VydmUifHxlLnNoYXBlPT09InBvbHlnb24ifHxlLnNoYXBlPT09InBhdGgiPyJldmVub2RkIjoibm9uemVybyI7dGhpcy5fZHJhd1RvQ29udGV4dChpLHMsYSxsKSxpLnJlc3RvcmUoKTticmVha31jYXNlImZpbGxTa2V0Y2giOnRoaXMuZmlsbFNrZXRjaChpLHMsbil9fWZpbGxTa2V0Y2goZSxyLG4pe2xldCBpPW4uZmlsbFdlaWdodDtpPDAmJihpPW4uc3Ryb2tlV2lkdGgvMiksZS5zYXZlKCksbi5maWxsTGluZURhc2gmJmUuc2V0TGluZURhc2gobi5maWxsTGluZURhc2gpLG4uZmlsbExpbmVEYXNoT2Zmc2V0JiYoZS5saW5lRGFzaE9mZnNldD1uLmZpbGxMaW5lRGFzaE9mZnNldCksZS5zdHJva2VTdHlsZT1uLmZpbGx8fCIiLGUubGluZVdpZHRoPWksdGhpcy5fZHJhd1RvQ29udGV4dChlLHIsbi5maXhlZERlY2ltYWxQbGFjZURpZ2l0cyksZS5yZXN0b3JlKCl9X2RyYXdUb0NvbnRleHQoZSxyLG4saT0ibm9uemVybyIpe2UuYmVnaW5QYXRoKCk7Zm9yKGxldCBhIG9mIHIub3BzKXtsZXQgcz10eXBlb2Ygbj09Im51bWJlciImJm4+PTA/YS5kYXRhLm1hcChsPT4rbC50b0ZpeGVkKG4pKTphLmRhdGE7c3dpdGNoKGEub3Ape2Nhc2UibW92ZSI6ZS5tb3ZlVG8oc1swXSxzWzFdKTticmVhaztjYXNlImJjdXJ2ZVRvIjplLmJlemllckN1cnZlVG8oc1swXSxzWzFdLHNbMl0sc1szXSxzWzRdLHNbNV0pO2JyZWFrO2Nhc2UibGluZVRvIjplLmxpbmVUbyhzWzBdLHNbMV0pfX1yLnR5cGU9PT0iZmlsbFBhdGgiP2UuZmlsbChpKTplLnN0cm9rZSgpfWdldCBnZW5lcmF0b3IoKXtyZXR1cm4gdGhpcy5nZW59Z2V0RGVmYXVsdE9wdGlvbnMoKXtyZXR1cm4gdGhpcy5nZW4uZGVmYXVsdE9wdGlvbnN9bGluZShlLHIsbixpLGEpe2xldCBzPXRoaXMuZ2VuLmxpbmUoZSxyLG4saSxhKTtyZXR1cm4gdGhpcy5kcmF3KHMpLHN9cmVjdGFuZ2xlKGUscixuLGksYSl7bGV0IHM9dGhpcy5nZW4ucmVjdGFuZ2xlKGUscixuLGksYSk7cmV0dXJuIHRoaXMuZHJhdyhzKSxzfWVsbGlwc2UoZSxyLG4saSxhKXtsZXQgcz10aGlzLmdlbi5lbGxpcHNlKGUscixuLGksYSk7cmV0dXJuIHRoaXMuZHJhdyhzKSxzfWNpcmNsZShlLHIsbixpKXtsZXQgYT10aGlzLmdlbi5jaXJjbGUoZSxyLG4saSk7cmV0dXJuIHRoaXMuZHJhdyhhKSxhfWxpbmVhclBhdGgoZSxyKXtsZXQgbj10aGlzLmdlbi5saW5lYXJQYXRoKGUscik7cmV0dXJuIHRoaXMuZHJhdyhuKSxufXBvbHlnb24oZSxyKXtsZXQgbj10aGlzLmdlbi5wb2x5Z29uKGUscik7cmV0dXJuIHRoaXMuZHJhdyhuKSxufWFyYyhlLHIsbixpLGEscyxsPSExLHUpe2xldCBoPXRoaXMuZ2VuLmFyYyhlLHIsbixpLGEscyxsLHUpO3JldHVybiB0aGlzLmRyYXcoaCksaH1jdXJ2ZShlLHIpe2xldCBuPXRoaXMuZ2VuLmN1cnZlKGUscik7cmV0dXJuIHRoaXMuZHJhdyhuKSxufXBhdGgoZSxyKXtsZXQgbj10aGlzLmdlbi5wYXRoKGUscik7cmV0dXJuIHRoaXMuZHJhdyhuKSxufX0sSXc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixYRD1jbGFzc3tzdGF0aWN7byh0aGlzLCJvdCIpfWNvbnN0cnVjdG9yKGUscil7dGhpcy5zdmc9ZSx0aGlzLmdlbj1uZXcgcG0ocil9ZHJhdyhlKXtsZXQgcj1lLnNldHN8fFtdLG49ZS5vcHRpb25zfHx0aGlzLmdldERlZmF1bHRPcHRpb25zKCksaT10aGlzLnN2Zy5vd25lckRvY3VtZW50fHx3aW5kb3cuZG9jdW1lbnQsYT1pLmNyZWF0ZUVsZW1lbnROUyhJdywiZyIpLHM9ZS5vcHRpb25zLmZpeGVkRGVjaW1hbFBsYWNlRGlnaXRzO2ZvcihsZXQgbCBvZiByKXtsZXQgdT1udWxsO3N3aXRjaChsLnR5cGUpe2Nhc2UicGF0aCI6dT1pLmNyZWF0ZUVsZW1lbnROUyhJdywicGF0aCIpLHUuc2V0QXR0cmlidXRlKCJkIix0aGlzLm9wc1RvUGF0aChsLHMpKSx1LnNldEF0dHJpYnV0ZSgic3Ryb2tlIixuLnN0cm9rZSksdS5zZXRBdHRyaWJ1dGUoInN0cm9rZS13aWR0aCIsbi5zdHJva2VXaWR0aCsiIiksdS5zZXRBdHRyaWJ1dGUoImZpbGwiLCJub25lIiksbi5zdHJva2VMaW5lRGFzaCYmdS5zZXRBdHRyaWJ1dGUoInN0cm9rZS1kYXNoYXJyYXkiLG4uc3Ryb2tlTGluZURhc2guam9pbigiICIpLnRyaW0oKSksbi5zdHJva2VMaW5lRGFzaE9mZnNldCYmdS5zZXRBdHRyaWJ1dGUoInN0cm9rZS1kYXNob2Zmc2V0IixgJHtuLnN0cm9rZUxpbmVEYXNoT2Zmc2V0fWApO2JyZWFrO2Nhc2UiZmlsbFBhdGgiOnU9aS5jcmVhdGVFbGVtZW50TlMoSXcsInBhdGgiKSx1LnNldEF0dHJpYnV0ZSgiZCIsdGhpcy5vcHNUb1BhdGgobCxzKSksdS5zZXRBdHRyaWJ1dGUoInN0cm9rZSIsIm5vbmUiKSx1LnNldEF0dHJpYnV0ZSgic3Ryb2tlLXdpZHRoIiwiMCIpLHUuc2V0QXR0cmlidXRlKCJmaWxsIixuLmZpbGx8fCIiKSxlLnNoYXBlIT09ImN1cnZlIiYmZS5zaGFwZSE9PSJwb2x5Z29uInx8dS5zZXRBdHRyaWJ1dGUoImZpbGwtcnVsZSIsImV2ZW5vZGQiKTticmVhaztjYXNlImZpbGxTa2V0Y2giOnU9dGhpcy5maWxsU2tldGNoKGksbCxuKX11JiZhLmFwcGVuZENoaWxkKHUpfXJldHVybiBhfWZpbGxTa2V0Y2goZSxyLG4pe2xldCBpPW4uZmlsbFdlaWdodDtpPDAmJihpPW4uc3Ryb2tlV2lkdGgvMik7bGV0IGE9ZS5jcmVhdGVFbGVtZW50TlMoSXcsInBhdGgiKTtyZXR1cm4gYS5zZXRBdHRyaWJ1dGUoImQiLHRoaXMub3BzVG9QYXRoKHIsbi5maXhlZERlY2ltYWxQbGFjZURpZ2l0cykpLGEuc2V0QXR0cmlidXRlKCJzdHJva2UiLG4uZmlsbHx8IiIpLGEuc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLGkrIiIpLGEuc2V0QXR0cmlidXRlKCJmaWxsIiwibm9uZSIpLG4uZmlsbExpbmVEYXNoJiZhLnNldEF0dHJpYnV0ZSgic3Ryb2tlLWRhc2hhcnJheSIsbi5maWxsTGluZURhc2guam9pbigiICIpLnRyaW0oKSksbi5maWxsTGluZURhc2hPZmZzZXQmJmEuc2V0QXR0cmlidXRlKCJzdHJva2UtZGFzaG9mZnNldCIsYCR7bi5maWxsTGluZURhc2hPZmZzZXR9YCksYX1nZXQgZ2VuZXJhdG9yKCl7cmV0dXJuIHRoaXMuZ2VufWdldERlZmF1bHRPcHRpb25zKCl7cmV0dXJuIHRoaXMuZ2VuLmRlZmF1bHRPcHRpb25zfW9wc1RvUGF0aChlLHIpe3JldHVybiB0aGlzLmdlbi5vcHNUb1BhdGgoZSxyKX1saW5lKGUscixuLGksYSl7bGV0IHM9dGhpcy5nZW4ubGluZShlLHIsbixpLGEpO3JldHVybiB0aGlzLmRyYXcocyl9cmVjdGFuZ2xlKGUscixuLGksYSl7bGV0IHM9dGhpcy5nZW4ucmVjdGFuZ2xlKGUscixuLGksYSk7cmV0dXJuIHRoaXMuZHJhdyhzKX1lbGxpcHNlKGUscixuLGksYSl7bGV0IHM9dGhpcy5nZW4uZWxsaXBzZShlLHIsbixpLGEpO3JldHVybiB0aGlzLmRyYXcocyl9Y2lyY2xlKGUscixuLGkpe2xldCBhPXRoaXMuZ2VuLmNpcmNsZShlLHIsbixpKTtyZXR1cm4gdGhpcy5kcmF3KGEpfWxpbmVhclBhdGgoZSxyKXtsZXQgbj10aGlzLmdlbi5saW5lYXJQYXRoKGUscik7cmV0dXJuIHRoaXMuZHJhdyhuKX1wb2x5Z29uKGUscil7bGV0IG49dGhpcy5nZW4ucG9seWdvbihlLHIpO3JldHVybiB0aGlzLmRyYXcobil9YXJjKGUscixuLGksYSxzLGw9ITEsdSl7bGV0IGg9dGhpcy5nZW4uYXJjKGUscixuLGksYSxzLGwsdSk7cmV0dXJuIHRoaXMuZHJhdyhoKX1jdXJ2ZShlLHIpe2xldCBuPXRoaXMuZ2VuLmN1cnZlKGUscik7cmV0dXJuIHRoaXMuZHJhdyhuKX1wYXRoKGUscil7bGV0IG49dGhpcy5nZW4ucGF0aChlLHIpO3JldHVybiB0aGlzLmRyYXcobil9fSxYZT17Y2FudmFzOm8oKHQsZSk9Pm5ldyBZRCh0LGUpLCJjYW52YXMiKSxzdmc6bygodCxlKT0+bmV3IFhEKHQsZSksInN2ZyIpLGdlbmVyYXRvcjpvKHQ9Pm5ldyBwbSh0KSwiZ2VuZXJhdG9yIiksbmV3U2VlZDpvKCgpPT5wbS5uZXdTZWVkKCksIm5ld1NlZWQiKX19KTtmdW5jdGlvbiBSSyh0LGUpe2xldHtsYWJlbFN0eWxlczpyfT1RZShlKTtlLmxhYmVsU3R5bGU9cjtsZXQgbj1odChlKSxpPW47bnx8KGk9ImFuY2hvciIpO2xldCBhPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLGkpLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxzPTEse2Nzc1N0eWxlczpsfT1lLHU9WGUuc3ZnKGEpLGg9S2UoZSx7ZmlsbDoiYmxhY2siLHN0cm9rZToibm9uZSIsZmlsbFN0eWxlOiJzb2xpZCJ9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKGgucm91Z2huZXNzPTApO2xldCBmPXUuY2lyY2xlKDAsMCxzKjIsaCksZD1hLmluc2VydCgoKT0+ZiwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIGQuYXR0cigiY2xhc3MiLCJhbmNob3IiKS5hdHRyKCJzdHlsZSIsJG4obCkpLGplKGUsZCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24ocCl7cmV0dXJuIFkuaW5mbygiQ2lyY2xlIGludGVyc2VjdCIsZSxzLHApLFllLmNpcmNsZShlLHMscCl9LGF9dmFyIE5LPU4oKCk9PnsidXNlIHN0cmljdCI7dnQoKTtGdCgpO0h0KCk7VXQoKTtXdCgpO2lyKCk7byhSSywiYW5jaG9yIil9KTtmdW5jdGlvbiBNSyh0LGUscixuLGksYSxzKXtsZXQgdT0odCtyKS8yLGg9KGUrbikvMixmPU1hdGguYXRhbjIobi1lLHItdCksZD0oci10KS8yLHA9KG4tZSkvMixtPWQvaSxnPXAvYSx5PU1hdGguc3FydChtKioyK2cqKjIpO2lmKHk+MSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBnaXZlbiByYWRpaSBhcmUgdG9vIHNtYWxsIHRvIGNyZWF0ZSBhbiBhcmMgYmV0d2VlbiB0aGUgcG9pbnRzLiIpO2xldCB2PU1hdGguc3FydCgxLXkqKjIpLHg9dSt2KmEqTWF0aC5zaW4oZikqKHM/LTE6MSksYj1oLXYqaSpNYXRoLmNvcyhmKSoocz8tMToxKSx3PU1hdGguYXRhbjIoKGUtYikvYSwodC14KS9pKSxUPU1hdGguYXRhbjIoKG4tYikvYSwoci14KS9pKS13O3MmJlQ8MCYmKFQrPTIqTWF0aC5QSSksIXMmJlQ+MCYmKFQtPTIqTWF0aC5QSSk7bGV0IEU9W107Zm9yKGxldCBBPTA7QTwyMDtBKyspe2xldCBTPUEvMTksXz13K1MqVCxJPXgraSpNYXRoLmNvcyhfKSxEPWIrYSpNYXRoLnNpbihfKTtFLnB1c2goe3g6SSx5OkR9KX1yZXR1cm4gRX1hc3luYyBmdW5jdGlvbiBJSyh0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09UWUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphfT1hd2FpdCBwdCh0LGUsaHQoZSkpLHM9YS53aWR0aCtlLnBhZGRpbmcrMjAsbD1hLmhlaWdodCtlLnBhZGRpbmcsdT1sLzIsaD11LygyLjUrbC81MCkse2Nzc1N0eWxlczpmfT1lLGQ9W3t4OnMvMix5Oi1sLzJ9LHt4Oi1zLzIseTotbC8yfSwuLi5NSygtcy8yLC1sLzIsLXMvMixsLzIsaCx1LCExKSx7eDpzLzIseTpsLzJ9LC4uLk1LKHMvMixsLzIscy8yLC1sLzIsaCx1LCEwKV0scD1YZS5zdmcoaSksbT1LZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKG0ucm91Z2huZXNzPTAsbS5maWxsU3R5bGU9InNvbGlkIik7bGV0IGc9WHQoZCkseT1wLnBhdGgoZyxtKSx2PWkuaW5zZXJ0KCgpPT55LCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gdi5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLGYmJmUubG9vayE9PSJoYW5kRHJhd24iJiZ2LnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixmKSxuJiZlLmxvb2shPT0iaGFuZERyYXduIiYmdi5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsbiksdi5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtoLzJ9LCAwKWApLGplKGUsdiksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oeCl7cmV0dXJuIFllLnBvbHlnb24oZSxkLHgpfSxpfXZhciBPSz1OKCgpPT57InVzZSBzdHJpY3QiO0Z0KCk7SHQoKTtVdCgpO1d0KCk7byhNSywiZ2VuZXJhdGVBcmNQb2ludHMiKTtvKElLLCJib3dUaWVSZWN0Iil9KTtmdW5jdGlvbiBMYSh0LGUscixuKXtyZXR1cm4gdC5pbnNlcnQoInBvbHlnb24iLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJwb2ludHMiLG4ubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBpLngrIiwiK2kueX0pLmpvaW4oIiAiKSkuYXR0cigiY2xhc3MiLCJsYWJlbC1jb250YWluZXIiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistZS8yKyIsIityLzIrIikiKX12YXIgX3U9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKExhLCJpbnNlcnRQb2x5Z29uU2hhcGUiKX0pO2FzeW5jIGZ1bmN0aW9uIFBLKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1RZShlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmF9PWF3YWl0IHB0KHQsZSxodChlKSkscz1hLmhlaWdodCtlLnBhZGRpbmcsbD0xMix1PWEud2lkdGgrZS5wYWRkaW5nK2wsaD0wLGY9dSxkPS1zLHA9MCxtPVt7eDpoK2wseTpkfSx7eDpmLHk6ZH0se3g6Zix5OnB9LHt4OmgseTpwfSx7eDpoLHk6ZCtsfSx7eDpoK2wseTpkfV0sZyx7Y3NzU3R5bGVzOnl9PWU7aWYoZS5sb29rPT09ImhhbmREcmF3biIpe2xldCB2PVhlLnN2ZyhpKSx4PUtlKGUse30pLGI9WHQobSksdz12LnBhdGgoYix4KTtnPWkuaW5zZXJ0KCgpPT53LCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstdS8yfSwgJHtzLzJ9KWApLHkmJmcuYXR0cigic3R5bGUiLHkpfWVsc2UgZz1MYShpLHUscyxtKTtyZXR1cm4gbiYmZy5hdHRyKCJzdHlsZSIsbiksamUoZSxnKSxlLmludGVyc2VjdD1mdW5jdGlvbih2KXtyZXR1cm4gWWUucG9seWdvbihlLG0sdil9LGl9dmFyIEJLPU4oKCk9PnsidXNlIHN0cmljdCI7RnQoKTtIdCgpO1V0KCk7V3QoKTtfdSgpO0Z0KCk7byhQSywiY2FyZCIpfSk7ZnVuY3Rpb24gRksodCxlKXtsZXR7bm9kZVN0eWxlczpyfT1RZShlKTtlLmxhYmVsPSIiO2xldCBuPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLGh0KGUpKS5hdHRyKCJpZCIsZS5kb21JZD8/ZS5pZCkse2Nzc1N0eWxlczppfT1lLGE9TWF0aC5tYXgoMjgsZS53aWR0aD8/MCkscz1be3g6MCx5OmEvMn0se3g6YS8yLHk6MH0se3g6MCx5Oi1hLzJ9LHt4Oi1hLzIseTowfV0sbD1YZS5zdmcobiksdT1LZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKHUucm91Z2huZXNzPTAsdS5maWxsU3R5bGU9InNvbGlkIik7bGV0IGg9WHQocyksZj1sLnBhdGgoaCx1KSxkPW4uaW5zZXJ0KCgpPT5mLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gaSYmZS5sb29rIT09ImhhbmREcmF3biImJmQuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLGkpLHImJmUubG9vayE9PSJoYW5kRHJhd24iJiZkLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixyKSxlLndpZHRoPTI4LGUuaGVpZ2h0PTI4LGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHApe3JldHVybiBZZS5wb2x5Z29uKGUscyxwKX0sbn12YXIgJEs9TigoKT0+eyJ1c2Ugc3RyaWN0IjtIdCgpO1d0KCk7VXQoKTtGdCgpO28oRkssImNob2ljZSIpfSk7YXN5bmMgZnVuY3Rpb24geksodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVFlKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YSxoYWxmUGFkZGluZzpzfT1hd2FpdCBwdCh0LGUsaHQoZSkpLGw9YS53aWR0aC8yK3MsdSx7Y3NzU3R5bGVzOmh9PWU7aWYoZS5sb29rPT09ImhhbmREcmF3biIpe2xldCBmPVhlLnN2ZyhpKSxkPUtlKGUse30pLHA9Zi5jaXJjbGUoMCwwLGwqMixkKTt1PWkuaW5zZXJ0KCgpPT5wLCI6Zmlyc3QtY2hpbGQiKSx1LmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIikuYXR0cigic3R5bGUiLCRuKGgpKX1lbHNlIHU9aS5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIikuYXR0cigic3R5bGUiLG4pLmF0dHIoInIiLGwpLmF0dHIoImN4IiwwKS5hdHRyKCJjeSIsMCk7cmV0dXJuIGplKGUsdSksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oZil7cmV0dXJuIFkuaW5mbygiQ2lyY2xlIGludGVyc2VjdCIsZSxsLGYpLFllLmNpcmNsZShlLGwsZil9LGl9dmFyIEdLPU4oKCk9PnsidXNlIHN0cmljdCI7dnQoKTtGdCgpO0h0KCk7VXQoKTtXdCgpO2lyKCk7byh6SywiY2lyY2xlIil9KTtmdW5jdGlvbiBsX2UodCl7bGV0IGU9TWF0aC5jb3MoTWF0aC5QSS80KSxyPU1hdGguc2luKE1hdGguUEkvNCksbj10KjIsaT17eDpuLzIqZSx5Om4vMipyfSxhPXt4Oi0obi8yKSplLHk6bi8yKnJ9LHM9e3g6LShuLzIpKmUseTotKG4vMikqcn0sbD17eDpuLzIqZSx5Oi0obi8yKSpyfTtyZXR1cm5gTSAke2EueH0sJHthLnl9IEwgJHtsLnh9LCR7bC55fQogICAgICAgICAgICAgICAgICAgTSAke2kueH0sJHtpLnl9IEwgJHtzLnh9LCR7cy55fWB9ZnVuY3Rpb24gVksodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVFlKGUpO2UubGFiZWxTdHlsZT1yLGUubGFiZWw9IiI7bGV0IGk9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsaHQoZSkpLmF0dHIoImlkIixlLmRvbUlkPz9lLmlkKSxhPU1hdGgubWF4KDMwLGU/LndpZHRoPz8wKSx7Y3NzU3R5bGVzOnN9PWUsbD1YZS5zdmcoaSksdT1LZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKHUucm91Z2huZXNzPTAsdS5maWxsU3R5bGU9InNvbGlkIik7bGV0IGg9bC5jaXJjbGUoMCwwLGEqMix1KSxmPWxfZShhKSxkPWwucGF0aChmLHUpLHA9aS5pbnNlcnQoKCk9PmgsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBwLmluc2VydCgoKT0+ZCkscyYmZS5sb29rIT09ImhhbmREcmF3biImJnAuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLHMpLG4mJmUubG9vayE9PSJoYW5kRHJhd24iJiZwLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixuKSxqZShlLHApLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKG0pe3JldHVybiBZLmluZm8oImNyb3NzZWRDaXJjbGUgaW50ZXJzZWN0IixlLHtyYWRpdXM6YSxwb2ludDptfSksWWUuY2lyY2xlKGUsYSxtKX0saX12YXIgVUs9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt2dCgpO0Z0KCk7VXQoKTtXdCgpO0h0KCk7byhsX2UsImNyZWF0ZUxpbmUiKTtvKFZLLCJjcm9zc2VkQ2lyY2xlIil9KTtmdW5jdGlvbiBIaCh0LGUscixuPTEwMCxpPTAsYT0xODApe2xldCBzPVtdLGw9aSpNYXRoLlBJLzE4MCxmPShhKk1hdGguUEkvMTgwLWwpLyhuLTEpO2ZvcihsZXQgZD0wO2Q8bjtkKyspe2xldCBwPWwrZCpmLG09dCtyKk1hdGguY29zKHApLGc9ZStyKk1hdGguc2luKHApO3MucHVzaCh7eDotbSx5Oi1nfSl9cmV0dXJuIHN9YXN5bmMgZnVuY3Rpb24gSEsodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVFlKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YSxsYWJlbDpzfT1hd2FpdCBwdCh0LGUsaHQoZSkpLGw9YS53aWR0aCsoZS5wYWRkaW5nPz8wKSx1PWEuaGVpZ2h0KyhlLnBhZGRpbmc/PzApLGg9TWF0aC5tYXgoNSx1Ki4xKSx7Y3NzU3R5bGVzOmZ9PWUsZD1bLi4uSGgobC8yLC11LzIsaCwzMCwtOTAsMCkse3g6LWwvMi1oLHk6aH0sLi4uSGgobC8yK2gqMiwtaCxoLDIwLC0xODAsLTI3MCksLi4uSGgobC8yK2gqMixoLGgsMjAsLTkwLC0xODApLHt4Oi1sLzItaCx5Oi11LzJ9LC4uLkhoKGwvMix1LzIsaCwyMCwwLDkwKV0scD1be3g6bC8yLHk6LXUvMi1ofSx7eDotbC8yLHk6LXUvMi1ofSwuLi5IaChsLzIsLXUvMixoLDIwLC05MCwwKSx7eDotbC8yLWgseTotaH0sLi4uSGgobC8yK2wqLjEsLWgsaCwyMCwtMTgwLC0yNzApLC4uLkhoKGwvMitsKi4xLGgsaCwyMCwtOTAsLTE4MCkse3g6LWwvMi1oLHk6dS8yfSwuLi5IaChsLzIsdS8yLGgsMjAsMCw5MCkse3g6LWwvMix5OnUvMitofSx7eDpsLzIseTp1LzIraH1dLG09WGUuc3ZnKGkpLGc9S2UoZSx7ZmlsbDoibm9uZSJ9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKGcucm91Z2huZXNzPTAsZy5maWxsU3R5bGU9InNvbGlkIik7bGV0IHY9WHQoZCkucmVwbGFjZSgiWiIsIiIpLHg9bS5wYXRoKHYsZyksYj1YdChwKSx3PW0ucGF0aChiLHsuLi5nfSksQz1pLmluc2VydCgiZyIsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBDLmluc2VydCgoKT0+dywiOmZpcnN0LWNoaWxkIikuYXR0cigic3Ryb2tlLW9wYWNpdHkiLDApLEMuaW5zZXJ0KCgpPT54LCI6Zmlyc3QtY2hpbGQiKSxDLmF0dHIoImNsYXNzIiwidGV4dCIpLGYmJmUubG9vayE9PSJoYW5kRHJhd24iJiZDLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixmKSxuJiZlLmxvb2shPT0iaGFuZERyYXduIiYmQy5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsbiksQy5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtofSwgMClgKSxzLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1sLzIraC0oYS54LShhLmxlZnQ/PzApKX0sJHstdS8yKyhlLnBhZGRpbmc/PzApLzItKGEueS0oYS50b3A/PzApKX0pYCksamUoZSxDKSxlLmludGVyc2VjdD1mdW5jdGlvbihUKXtyZXR1cm4gWWUucG9seWdvbihlLHAsVCl9LGl9dmFyIFdLPU4oKCk9PnsidXNlIHN0cmljdCI7RnQoKTtIdCgpO1V0KCk7V3QoKTtvKEhoLCJnZW5lcmF0ZUNpcmNsZVBvaW50cyIpO28oSEssImN1cmx5QnJhY2VMZWZ0Iil9KTtmdW5jdGlvbiBXaCh0LGUscixuPTEwMCxpPTAsYT0xODApe2xldCBzPVtdLGw9aSpNYXRoLlBJLzE4MCxmPShhKk1hdGguUEkvMTgwLWwpLyhuLTEpO2ZvcihsZXQgZD0wO2Q8bjtkKyspe2xldCBwPWwrZCpmLG09dCtyKk1hdGguY29zKHApLGc9ZStyKk1hdGguc2luKHApO3MucHVzaCh7eDptLHk6Z30pfXJldHVybiBzfWFzeW5jIGZ1bmN0aW9uIHFLKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1RZShlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmEsbGFiZWw6c309YXdhaXQgcHQodCxlLGh0KGUpKSxsPWEud2lkdGgrKGUucGFkZGluZz8/MCksdT1hLmhlaWdodCsoZS5wYWRkaW5nPz8wKSxoPU1hdGgubWF4KDUsdSouMSkse2Nzc1N0eWxlczpmfT1lLGQ9Wy4uLldoKGwvMiwtdS8yLGgsMjAsLTkwLDApLHt4OmwvMitoLHk6LWh9LC4uLldoKGwvMitoKjIsLWgsaCwyMCwtMTgwLC0yNzApLC4uLldoKGwvMitoKjIsaCxoLDIwLC05MCwtMTgwKSx7eDpsLzIraCx5OnUvMn0sLi4uV2gobC8yLHUvMixoLDIwLDAsOTApXSxwPVt7eDotbC8yLHk6LXUvMi1ofSx7eDpsLzIseTotdS8yLWh9LC4uLldoKGwvMiwtdS8yLGgsMjAsLTkwLDApLHt4OmwvMitoLHk6LWh9LC4uLldoKGwvMitoKjIsLWgsaCwyMCwtMTgwLC0yNzApLC4uLldoKGwvMitoKjIsaCxoLDIwLC05MCwtMTgwKSx7eDpsLzIraCx5OnUvMn0sLi4uV2gobC8yLHUvMixoLDIwLDAsOTApLHt4OmwvMix5OnUvMitofSx7eDotbC8yLHk6dS8yK2h9XSxtPVhlLnN2ZyhpKSxnPUtlKGUse2ZpbGw6Im5vbmUifSk7ZS5sb29rIT09ImhhbmREcmF3biImJihnLnJvdWdobmVzcz0wLGcuZmlsbFN0eWxlPSJzb2xpZCIpO2xldCB2PVh0KGQpLnJlcGxhY2UoIloiLCIiKSx4PW0ucGF0aCh2LGcpLGI9WHQocCksdz1tLnBhdGgoYix7Li4uZ30pLEM9aS5pbnNlcnQoImciLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gQy5pbnNlcnQoKCk9PncsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwwKSxDLmluc2VydCgoKT0+eCwiOmZpcnN0LWNoaWxkIiksQy5hdHRyKCJjbGFzcyIsInRleHQiKSxmJiZlLmxvb2shPT0iaGFuZERyYXduIiYmQy5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsZiksbiYmZS5sb29rIT09ImhhbmREcmF3biImJkMuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLG4pLEMuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LWh9LCAwKWApLHMuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LWwvMisoZS5wYWRkaW5nPz8wKS8yLShhLngtKGEubGVmdD8/MCkpfSwkey11LzIrKGUucGFkZGluZz8/MCkvMi0oYS55LShhLnRvcD8/MCkpfSlgKSxqZShlLEMpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKFQpe3JldHVybiBZZS5wb2x5Z29uKGUscCxUKX0saX12YXIgWUs9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO0h0KCk7VXQoKTtXdCgpO28oV2gsImdlbmVyYXRlQ2lyY2xlUG9pbnRzIik7byhxSywiY3VybHlCcmFjZVJpZ2h0Iil9KTtmdW5jdGlvbiBSYSh0LGUscixuPTEwMCxpPTAsYT0xODApe2xldCBzPVtdLGw9aSpNYXRoLlBJLzE4MCxmPShhKk1hdGguUEkvMTgwLWwpLyhuLTEpO2ZvcihsZXQgZD0wO2Q8bjtkKyspe2xldCBwPWwrZCpmLG09dCtyKk1hdGguY29zKHApLGc9ZStyKk1hdGguc2luKHApO3MucHVzaCh7eDotbSx5Oi1nfSl9cmV0dXJuIHN9YXN5bmMgZnVuY3Rpb24gWEsodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVFlKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YSxsYWJlbDpzfT1hd2FpdCBwdCh0LGUsaHQoZSkpLGw9YS53aWR0aCsoZS5wYWRkaW5nPz8wKSx1PWEuaGVpZ2h0KyhlLnBhZGRpbmc/PzApLGg9TWF0aC5tYXgoNSx1Ki4xKSx7Y3NzU3R5bGVzOmZ9PWUsZD1bLi4uUmEobC8yLC11LzIsaCwzMCwtOTAsMCkse3g6LWwvMi1oLHk6aH0sLi4uUmEobC8yK2gqMiwtaCxoLDIwLC0xODAsLTI3MCksLi4uUmEobC8yK2gqMixoLGgsMjAsLTkwLC0xODApLHt4Oi1sLzItaCx5Oi11LzJ9LC4uLlJhKGwvMix1LzIsaCwyMCwwLDkwKV0scD1bLi4uUmEoLWwvMitoK2gvMiwtdS8yLGgsMjAsLTkwLC0xODApLHt4OmwvMi1oLzIseTpofSwuLi5SYSgtbC8yLWgvMiwtaCxoLDIwLDAsOTApLC4uLlJhKC1sLzItaC8yLGgsaCwyMCwtOTAsMCkse3g6bC8yLWgvMix5Oi1ofSwuLi5SYSgtbC8yK2graC8yLHUvMixoLDMwLC0xODAsLTI3MCldLG09W3t4OmwvMix5Oi11LzItaH0se3g6LWwvMix5Oi11LzItaH0sLi4uUmEobC8yLC11LzIsaCwyMCwtOTAsMCkse3g6LWwvMi1oLHk6LWh9LC4uLlJhKGwvMitoKjIsLWgsaCwyMCwtMTgwLC0yNzApLC4uLlJhKGwvMitoKjIsaCxoLDIwLC05MCwtMTgwKSx7eDotbC8yLWgseTp1LzJ9LC4uLlJhKGwvMix1LzIsaCwyMCwwLDkwKSx7eDotbC8yLHk6dS8yK2h9LHt4OmwvMi1oLWgvMix5OnUvMitofSwuLi5SYSgtbC8yK2graC8yLC11LzIsaCwyMCwtOTAsLTE4MCkse3g6bC8yLWgvMix5Omh9LC4uLlJhKC1sLzItaC8yLC1oLGgsMjAsMCw5MCksLi4uUmEoLWwvMi1oLzIsaCxoLDIwLC05MCwwKSx7eDpsLzItaC8yLHk6LWh9LC4uLlJhKC1sLzIraCtoLzIsdS8yLGgsMzAsLTE4MCwtMjcwKV0sZz1YZS5zdmcoaSkseT1LZShlLHtmaWxsOiJub25lIn0pO2UubG9vayE9PSJoYW5kRHJhd24iJiYoeS5yb3VnaG5lc3M9MCx5LmZpbGxTdHlsZT0ic29saWQiKTtsZXQgeD1YdChkKS5yZXBsYWNlKCJaIiwiIiksYj1nLnBhdGgoeCx5KSxDPVh0KHApLnJlcGxhY2UoIloiLCIiKSxUPWcucGF0aChDLHkpLEU9WHQobSksQT1nLnBhdGgoRSx7Li4ueX0pLFM9aS5pbnNlcnQoImciLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gUy5pbnNlcnQoKCk9PkEsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwwKSxTLmluc2VydCgoKT0+YiwiOmZpcnN0LWNoaWxkIiksUy5pbnNlcnQoKCk9PlQsIjpmaXJzdC1jaGlsZCIpLFMuYXR0cigiY2xhc3MiLCJ0ZXh0IiksZiYmZS5sb29rIT09ImhhbmREcmF3biImJlMuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLGYpLG4mJmUubG9vayE9PSJoYW5kRHJhd24iJiZTLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixuKSxTLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke2gtaC80fSwgMClgKSxzLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1sLzIrKGUucGFkZGluZz8/MCkvMi0oYS54LShhLmxlZnQ/PzApKX0sJHstdS8yKyhlLnBhZGRpbmc/PzApLzItKGEueS0oYS50b3A/PzApKX0pYCksamUoZSxTKSxlLmludGVyc2VjdD1mdW5jdGlvbihfKXtyZXR1cm4gWWUucG9seWdvbihlLG0sXyl9LGl9dmFyIGpLPU4oKCk9PnsidXNlIHN0cmljdCI7RnQoKTtIdCgpO1V0KCk7V3QoKTtvKFJhLCJnZW5lcmF0ZUNpcmNsZVBvaW50cyIpO28oWEssImN1cmx5QnJhY2VzIil9KTthc3luYyBmdW5jdGlvbiBLSyh0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09UWUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphfT1hd2FpdCBwdCh0LGUsaHQoZSkpLHM9ODAsbD0yMCx1PU1hdGgubWF4KHMsKGEud2lkdGgrKGUucGFkZGluZz8/MCkqMikqMS4yNSxlPy53aWR0aD8/MCksaD1NYXRoLm1heChsLGEuaGVpZ2h0KyhlLnBhZGRpbmc/PzApKjIsZT8uaGVpZ2h0Pz8wKSxmPWgvMix7Y3NzU3R5bGVzOmR9PWUscD1YZS5zdmcoaSksbT1LZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKG0ucm91Z2huZXNzPTAsbS5maWxsU3R5bGU9InNvbGlkIik7bGV0IGc9dSx5PWgsdj1nLWYseD15LzQsYj1be3g6dix5OjB9LHt4LHk6MH0se3g6MCx5OnkvMn0se3gseX0se3g6dix5fSwuLi5MdygtdiwteS8yLGYsNTAsMjcwLDkwKV0sdz1YdChiKSxDPXAucGF0aCh3LG0pLFQ9aS5pbnNlcnQoKCk9PkMsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBULmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIiksZCYmZS5sb29rIT09ImhhbmREcmF3biImJlQuc2VsZWN0Q2hpbGRyZW4oInBhdGgiKS5hdHRyKCJzdHlsZSIsZCksbiYmZS5sb29rIT09ImhhbmREcmF3biImJlQuc2VsZWN0Q2hpbGRyZW4oInBhdGgiKS5hdHRyKCJzdHlsZSIsbiksVC5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstdS8yfSwgJHstaC8yfSlgKSxqZShlLFQpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKEUpe3JldHVybiBZZS5wb2x5Z29uKGUsYixFKX0saX12YXIgUUs9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO0h0KCk7VXQoKTtXdCgpO28oS0ssImN1cnZlZFRyYXBlem9pZCIpfSk7YXN5bmMgZnVuY3Rpb24gWksodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVFlKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YSxsYWJlbDpzfT1hd2FpdCBwdCh0LGUsaHQoZSkpLGw9TWF0aC5tYXgoYS53aWR0aCtlLnBhZGRpbmcsZS53aWR0aD8/MCksdT1sLzIsaD11LygyLjUrbC81MCksZj1NYXRoLm1heChhLmhlaWdodCtoK2UucGFkZGluZyxlLmhlaWdodD8/MCksZCx7Y3NzU3R5bGVzOnB9PWU7aWYoZS5sb29rPT09ImhhbmREcmF3biIpe2xldCBtPVhlLnN2ZyhpKSxnPXVfZSgwLDAsbCxmLHUsaCkseT1oX2UoMCxoLGwsZix1LGgpLHY9bS5wYXRoKGcsS2UoZSx7fSkpLHg9bS5wYXRoKHksS2UoZSx7ZmlsbDoibm9uZSJ9KSk7ZD1pLmluc2VydCgoKT0+eCwiOmZpcnN0LWNoaWxkIiksZD1pLmluc2VydCgoKT0+diwiOmZpcnN0LWNoaWxkIiksZC5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLHAmJmQuYXR0cigic3R5bGUiLHApfWVsc2V7bGV0IG09Y19lKDAsMCxsLGYsdSxoKTtkPWkuaW5zZXJ0KCJwYXRoIiwiOmZpcnN0LWNoaWxkIikuYXR0cigiZCIsbSkuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKS5hdHRyKCJzdHlsZSIsJG4ocCkpLmF0dHIoInN0eWxlIixuKX1yZXR1cm4gZC5hdHRyKCJsYWJlbC1vZmZzZXQteSIsaCksZC5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstbC8yfSwgJHstKGYvMitoKX0pYCksamUoZSxkKSxzLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey0oYS53aWR0aC8yKS0oYS54LShhLmxlZnQ/PzApKX0sICR7LShhLmhlaWdodC8yKSsoZS5wYWRkaW5nPz8wKS8xLjUtKGEueS0oYS50b3A/PzApKX0pYCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24obSl7bGV0IGc9WWUucmVjdChlLG0pLHk9Zy54LShlLng/PzApO2lmKHUhPTAmJihNYXRoLmFicyh5KTwoZS53aWR0aD8/MCkvMnx8TWF0aC5hYnMoeSk9PShlLndpZHRoPz8wKS8yJiZNYXRoLmFicyhnLnktKGUueT8/MCkpPihlLmhlaWdodD8/MCkvMi1oKSl7bGV0IHY9aCpoKigxLXkqeS8odSp1KSk7dj4wJiYodj1NYXRoLnNxcnQodikpLHY9aC12LG0ueS0oZS55Pz8wKT4wJiYodj0tdiksZy55Kz12fXJldHVybiBnfSxpfXZhciBjX2UsdV9lLGhfZSxKSz1OKCgpPT57InVzZSBzdHJpY3QiO0Z0KCk7SHQoKTtVdCgpO1d0KCk7aXIoKTtjX2U9bygodCxlLHIsbixpLGEpPT5bYE0ke3R9LCR7ZSthfWAsYGEke2l9LCR7YX0gMCwwLDAgJHtyfSwwYCxgYSR7aX0sJHthfSAwLDAsMCAkey1yfSwwYCxgbDAsJHtufWAsYGEke2l9LCR7YX0gMCwwLDAgJHtyfSwwYCxgbDAsJHstbn1gXS5qb2luKCIgIiksImNyZWF0ZUN5bGluZGVyUGF0aEQiKSx1X2U9bygodCxlLHIsbixpLGEpPT5bYE0ke3R9LCR7ZSthfWAsYE0ke3Qrcn0sJHtlK2F9YCxgYSR7aX0sJHthfSAwLDAsMCAkey1yfSwwYCxgbDAsJHtufWAsYGEke2l9LCR7YX0gMCwwLDAgJHtyfSwwYCxgbDAsJHstbn1gXS5qb2luKCIgIiksImNyZWF0ZU91dGVyQ3lsaW5kZXJQYXRoRCIpLGhfZT1vKCh0LGUscixuLGksYSk9PltgTSR7dC1yLzJ9LCR7LW4vMn1gLGBhJHtpfSwke2F9IDAsMCwwICR7cn0sMGBdLmpvaW4oIiAiKSwiY3JlYXRlSW5uZXJDeWxpbmRlclBhdGhEIik7byhaSywiY3lsaW5kZXIiKX0pO2FzeW5jIGZ1bmN0aW9uIGVRKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1RZShlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmEsbGFiZWw6c309YXdhaXQgcHQodCxlLGh0KGUpKSxsPWEud2lkdGgrZS5wYWRkaW5nLHU9YS5oZWlnaHQrZS5wYWRkaW5nLGg9dSouMixmPS1sLzIsZD0tdS8yLWgvMix7Y3NzU3R5bGVzOnB9PWUsbT1YZS5zdmcoaSksZz1LZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKGcucm91Z2huZXNzPTAsZy5maWxsU3R5bGU9InNvbGlkIik7bGV0IHk9W3t4OmYseTpkK2h9LHt4Oi1mLHk6ZCtofSx7eDotZix5Oi1kfSx7eDpmLHk6LWR9LHt4OmYseTpkfSx7eDotZix5OmR9LHt4Oi1mLHk6ZCtofV0sdj1tLnBvbHlnb24oeS5tYXAoYj0+W2IueCxiLnldKSxnKSx4PWkuaW5zZXJ0KCgpPT52LCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4geC5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLHAmJmUubG9vayE9PSJoYW5kRHJhd24iJiZ4LnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixwKSxuJiZlLmxvb2shPT0iaGFuZERyYXduIiYmeC5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsbikscy5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtmKyhlLnBhZGRpbmc/PzApLzItKGEueC0oYS5sZWZ0Pz8wKSl9LCAke2QraCsoZS5wYWRkaW5nPz8wKS8yLShhLnktKGEudG9wPz8wKSl9KWApLGplKGUseCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oYil7cmV0dXJuIFllLnJlY3QoZSxiKX0saX12YXIgdFE9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO0h0KCk7VXQoKTtXdCgpO28oZVEsImRpdmlkZWRSZWN0YW5nbGUiKX0pO2FzeW5jIGZ1bmN0aW9uIHJRKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1RZShlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmEsaGFsZlBhZGRpbmc6c309YXdhaXQgcHQodCxlLGh0KGUpKSx1PWEud2lkdGgvMitzKzUsaD1hLndpZHRoLzIrcyxmLHtjc3NTdHlsZXM6ZH09ZTtpZihlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0IHA9WGUuc3ZnKGkpLG09S2UoZSx7cm91Z2huZXNzOi4yLHN0cm9rZVdpZHRoOjIuNX0pLGc9S2UoZSx7cm91Z2huZXNzOi4yLHN0cm9rZVdpZHRoOjEuNX0pLHk9cC5jaXJjbGUoMCwwLHUqMixtKSx2PXAuY2lyY2xlKDAsMCxoKjIsZyk7Zj1pLmluc2VydCgiZyIsIjpmaXJzdC1jaGlsZCIpLGYuYXR0cigiY2xhc3MiLCRuKGUuY3NzQ2xhc3NlcykpLmF0dHIoInN0eWxlIiwkbihkKSksZi5ub2RlKCk/LmFwcGVuZENoaWxkKHkpLGYubm9kZSgpPy5hcHBlbmRDaGlsZCh2KX1lbHNle2Y9aS5pbnNlcnQoImciLCI6Zmlyc3QtY2hpbGQiKTtsZXQgcD1mLmluc2VydCgiY2lyY2xlIiwiOmZpcnN0LWNoaWxkIiksbT1mLmluc2VydCgiY2lyY2xlIik7Zi5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInN0eWxlIixuKSxwLmF0dHIoImNsYXNzIiwib3V0ZXItY2lyY2xlIikuYXR0cigic3R5bGUiLG4pLmF0dHIoInIiLHUpLmF0dHIoImN4IiwwKS5hdHRyKCJjeSIsMCksbS5hdHRyKCJjbGFzcyIsImlubmVyLWNpcmNsZSIpLmF0dHIoInN0eWxlIixuKS5hdHRyKCJyIixoKS5hdHRyKCJjeCIsMCkuYXR0cigiY3kiLDApfXJldHVybiBqZShlLGYpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHApe3JldHVybiBZLmluZm8oIkRvdWJsZUNpcmNsZSBpbnRlcnNlY3QiLGUsdSxwKSxZZS5jaXJjbGUoZSx1LHApfSxpfXZhciBuUT1OKCgpPT57InVzZSBzdHJpY3QiO3Z0KCk7RnQoKTtIdCgpO1V0KCk7V3QoKTtpcigpO28oclEsImRvdWJsZWNpcmNsZSIpfSk7ZnVuY3Rpb24gaVEodCxlLHtjb25maWc6e3RoZW1lVmFyaWFibGVzOnJ9fSl7bGV0e2xhYmVsU3R5bGVzOm4sbm9kZVN0eWxlczppfT1RZShlKTtlLmxhYmVsPSIiLGUubGFiZWxTdHlsZT1uO2xldCBhPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLGh0KGUpKS5hdHRyKCJpZCIsZS5kb21JZD8/ZS5pZCkscz03LHtjc3NTdHlsZXM6bH09ZSx1PVhlLnN2ZyhhKSx7bm9kZUJvcmRlcjpofT1yLGY9S2UoZSx7ZmlsbFN0eWxlOiJzb2xpZCJ9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKGYucm91Z2huZXNzPTApO2xldCBkPXUuY2lyY2xlKDAsMCxzKjIsZikscD1hLmluc2VydCgoKT0+ZCwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIHAuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLGBmaWxsOiAke2h9ICFpbXBvcnRhbnQ7YCksbCYmbC5sZW5ndGg+MCYmZS5sb29rIT09ImhhbmREcmF3biImJnAuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLGwpLGkmJmUubG9vayE9PSJoYW5kRHJhd24iJiZwLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixpKSxqZShlLHApLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKG0pe3JldHVybiBZLmluZm8oImZpbGxlZENpcmNsZSBpbnRlcnNlY3QiLGUse3JhZGl1czpzLHBvaW50Om19KSxZZS5jaXJjbGUoZSxzLG0pfSxhfXZhciBhUT1OKCgpPT57InVzZSBzdHJpY3QiO1d0KCk7dnQoKTtIdCgpO1V0KCk7RnQoKTtvKGlRLCJmaWxsZWRDaXJjbGUiKX0pO2FzeW5jIGZ1bmN0aW9uIHNRKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1RZShlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmEsbGFiZWw6c309YXdhaXQgcHQodCxlLGh0KGUpKSxsPWEud2lkdGgrKGUucGFkZGluZz8/MCksdT1sK2EuaGVpZ2h0LGg9bCthLmhlaWdodCxmPVt7eDowLHk6LXV9LHt4OmgseTotdX0se3g6aC8yLHk6MH1dLHtjc3NTdHlsZXM6ZH09ZSxwPVhlLnN2ZyhpKSxtPUtlKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYobS5yb3VnaG5lc3M9MCxtLmZpbGxTdHlsZT0ic29saWQiKTtsZXQgZz1YdChmKSx5PXAucGF0aChnLG0pLHY9aS5pbnNlcnQoKCk9PnksIjpmaXJzdC1jaGlsZCIpLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey11LzJ9LCAke3UvMn0pYCk7cmV0dXJuIGQmJmUubG9vayE9PSJoYW5kRHJhd24iJiZ2LnNlbGVjdENoaWxkcmVuKCJwYXRoIikuYXR0cigic3R5bGUiLGQpLG4mJmUubG9vayE9PSJoYW5kRHJhd24iJiZ2LnNlbGVjdENoaWxkcmVuKCJwYXRoIikuYXR0cigic3R5bGUiLG4pLGUud2lkdGg9bCxlLmhlaWdodD11LGplKGUsdikscy5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstYS53aWR0aC8yLShhLngtKGEubGVmdD8/MCkpfSwgJHstdS8yKyhlLnBhZGRpbmc/PzApLzIrKGEueS0oYS50b3A/PzApKX0pYCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oeCl7cmV0dXJuIFkuaW5mbygiVHJpYW5nbGUgaW50ZXJzZWN0IixlLGYseCksWWUucG9seWdvbihlLGYseCl9LGl9dmFyIG9RPU4oKCk9PnsidXNlIHN0cmljdCI7dnQoKTtGdCgpO0h0KCk7VXQoKTtXdCgpO0Z0KCk7byhzUSwiZmxpcHBlZFRyaWFuZ2xlIil9KTtmdW5jdGlvbiBsUSh0LGUse2RpcjpyLGNvbmZpZzp7c3RhdGU6bix0aGVtZVZhcmlhYmxlczppfX0pe2xldHtub2RlU3R5bGVzOmF9PVFlKGUpO2UubGFiZWw9IiI7bGV0IHM9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsaHQoZSkpLmF0dHIoImlkIixlLmRvbUlkPz9lLmlkKSx7Y3NzU3R5bGVzOmx9PWUsdT1NYXRoLm1heCg3MCxlPy53aWR0aD8/MCksaD1NYXRoLm1heCgxMCxlPy5oZWlnaHQ/PzApO3I9PT0iTFIiJiYodT1NYXRoLm1heCgxMCxlPy53aWR0aD8/MCksaD1NYXRoLm1heCg3MCxlPy5oZWlnaHQ/PzApKTtsZXQgZj0tMSp1LzIsZD0tMSpoLzIscD1YZS5zdmcocyksbT1LZShlLHtzdHJva2U6aS5saW5lQ29sb3IsZmlsbDppLmxpbmVDb2xvcn0pO2UubG9vayE9PSJoYW5kRHJhd24iJiYobS5yb3VnaG5lc3M9MCxtLmZpbGxTdHlsZT0ic29saWQiKTtsZXQgZz1wLnJlY3RhbmdsZShmLGQsdSxoLG0pLHk9cy5pbnNlcnQoKCk9PmcsIjpmaXJzdC1jaGlsZCIpO2wmJmUubG9vayE9PSJoYW5kRHJhd24iJiZ5LnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixsKSxhJiZlLmxvb2shPT0iaGFuZERyYXduIiYmeS5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsYSksamUoZSx5KTtsZXQgdj1uPy5wYWRkaW5nPz8wO3JldHVybiBlLndpZHRoJiZlLmhlaWdodCYmKGUud2lkdGgrPXYvMnx8MCxlLmhlaWdodCs9di8yfHwwKSxlLmludGVyc2VjdD1mdW5jdGlvbih4KXtyZXR1cm4gWWUucmVjdChlLHgpfSxzfXZhciBjUT1OKCgpPT57InVzZSBzdHJpY3QiO1d0KCk7SHQoKTtVdCgpO0Z0KCk7byhsUSwiZm9ya0pvaW4iKX0pO2FzeW5jIGZ1bmN0aW9uIHVRKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1RZShlKTtlLmxhYmVsU3R5bGU9cjtsZXQgaT04MCxhPTUwLHtzaGFwZVN2ZzpzLGJib3g6bH09YXdhaXQgcHQodCxlLGh0KGUpKSx1PU1hdGgubWF4KGksbC53aWR0aCsoZS5wYWRkaW5nPz8wKSoyLGU/LndpZHRoPz8wKSxoPU1hdGgubWF4KGEsbC5oZWlnaHQrKGUucGFkZGluZz8/MCkqMixlPy5oZWlnaHQ/PzApLGY9aC8yLHtjc3NTdHlsZXM6ZH09ZSxwPVhlLnN2ZyhzKSxtPUtlKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYobS5yb3VnaG5lc3M9MCxtLmZpbGxTdHlsZT0ic29saWQiKTtsZXQgZz1be3g6LXUvMix5Oi1oLzJ9LHt4OnUvMi1mLHk6LWgvMn0sLi4uTHcoLXUvMitmLDAsZiw1MCw5MCwyNzApLHt4OnUvMi1mLHk6aC8yfSx7eDotdS8yLHk6aC8yfV0seT1YdChnKSx2PXAucGF0aCh5LG0pLHg9cy5pbnNlcnQoKCk9PnYsIjpmaXJzdC1jaGlsZCIpO3JldHVybiB4LmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIiksZCYmZS5sb29rIT09ImhhbmREcmF3biImJnguc2VsZWN0Q2hpbGRyZW4oInBhdGgiKS5hdHRyKCJzdHlsZSIsZCksbiYmZS5sb29rIT09ImhhbmREcmF3biImJnguc2VsZWN0Q2hpbGRyZW4oInBhdGgiKS5hdHRyKCJzdHlsZSIsbiksamUoZSx4KSxlLmludGVyc2VjdD1mdW5jdGlvbihiKXtyZXR1cm4gWS5pbmZvKCJQaWxsIGludGVyc2VjdCIsZSx7cmFkaXVzOmYscG9pbnQ6Yn0pLFllLnBvbHlnb24oZSxnLGIpfSxzfXZhciBoUT1OKCgpPT57InVzZSBzdHJpY3QiO3Z0KCk7RnQoKTtIdCgpO1V0KCk7V3QoKTtvKHVRLCJoYWxmUm91bmRlZFJlY3RhbmdsZSIpfSk7YXN5bmMgZnVuY3Rpb24gZlEodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVFlKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YX09YXdhaXQgcHQodCxlLGh0KGUpKSxzPTQsbD1hLmhlaWdodCtlLnBhZGRpbmcsdT1sL3MsaD1hLndpZHRoKzIqdStlLnBhZGRpbmcsZj1be3g6dSx5OjB9LHt4OmgtdSx5OjB9LHt4OmgseTotbC8yfSx7eDpoLXUseTotbH0se3g6dSx5Oi1sfSx7eDowLHk6LWwvMn1dLGQse2Nzc1N0eWxlczpwfT1lO2lmKGUubG9vaz09PSJoYW5kRHJhd24iKXtsZXQgbT1YZS5zdmcoaSksZz1LZShlLHt9KSx5PWZfZSgwLDAsaCxsLHUpLHY9bS5wYXRoKHksZyk7ZD1pLmluc2VydCgoKT0+diwiOmZpcnN0LWNoaWxkIikuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LWgvMn0sICR7bC8yfSlgKSxwJiZkLmF0dHIoInN0eWxlIixwKX1lbHNlIGQ9TGEoaSxoLGwsZik7cmV0dXJuIG4mJmQuYXR0cigic3R5bGUiLG4pLGUud2lkdGg9aCxlLmhlaWdodD1sLGplKGUsZCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24obSl7cmV0dXJuIFllLnBvbHlnb24oZSxmLG0pfSxpfXZhciBmX2UsZFE9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO0h0KCk7VXQoKTtXdCgpO191KCk7Zl9lPW8oKHQsZSxyLG4saSk9PltgTSR7dCtpfSwke2V9YCxgTCR7dCtyLWl9LCR7ZX1gLGBMJHt0K3J9LCR7ZS1uLzJ9YCxgTCR7dCtyLWl9LCR7ZS1ufWAsYEwke3QraX0sJHtlLW59YCxgTCR7dH0sJHtlLW4vMn1gLCJaIl0uam9pbigiICIpLCJjcmVhdGVIZXhhZ29uUGF0aEQiKTtvKGZRLCJoZXhhZ29uIil9KTthc3luYyBmdW5jdGlvbiBwUSh0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09UWUoZSk7ZS5sYWJlbD0iIixlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aX09YXdhaXQgcHQodCxlLGh0KGUpKSxhPU1hdGgubWF4KDMwLGU/LndpZHRoPz8wKSxzPU1hdGgubWF4KDMwLGU/LmhlaWdodD8/MCkse2Nzc1N0eWxlczpsfT1lLHU9WGUuc3ZnKGkpLGg9S2UoZSx7fSk7ZS5sb29rIT09ImhhbmREcmF3biImJihoLnJvdWdobmVzcz0wLGguZmlsbFN0eWxlPSJzb2xpZCIpO2xldCBmPVt7eDowLHk6MH0se3g6YSx5OjB9LHt4OjAseTpzfSx7eDphLHk6c31dLGQ9WHQoZikscD11LnBhdGgoZCxoKSxtPWkuaW5zZXJ0KCgpPT5wLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gbS5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLGwmJmUubG9vayE9PSJoYW5kRHJhd24iJiZtLnNlbGVjdENoaWxkcmVuKCJwYXRoIikuYXR0cigic3R5bGUiLGwpLG4mJmUubG9vayE9PSJoYW5kRHJhd24iJiZtLnNlbGVjdENoaWxkcmVuKCJwYXRoIikuYXR0cigic3R5bGUiLG4pLG0uYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LWEvMn0sICR7LXMvMn0pYCksamUoZSxtKSxlLmludGVyc2VjdD1mdW5jdGlvbihnKXtyZXR1cm4gWS5pbmZvKCJQaWxsIGludGVyc2VjdCIsZSx7cG9pbnRzOmZ9KSxZZS5wb2x5Z29uKGUsZixnKX0saX12YXIgbVE9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt2dCgpO0Z0KCk7SHQoKTtVdCgpO1d0KCk7byhwUSwiaG91cmdsYXNzIil9KTthc3luYyBmdW5jdGlvbiBnUSh0LGUse2NvbmZpZzp7dGhlbWVWYXJpYWJsZXM6cixmbG93Y2hhcnQ6bn19KXtsZXR7bGFiZWxTdHlsZXM6aX09UWUoZSk7ZS5sYWJlbFN0eWxlPWk7bGV0IGE9ZS5hc3NldEhlaWdodD8/NDgscz1lLmFzc2V0V2lkdGg/PzQ4LGw9TWF0aC5tYXgoYSxzKSx1PW4/LndyYXBwaW5nV2lkdGg7ZS53aWR0aD1NYXRoLm1heChsLHU/PzApO2xldHtzaGFwZVN2ZzpoLGJib3g6ZixsYWJlbDpkfT1hd2FpdCBwdCh0LGUsImljb24tc2hhcGUgZGVmYXVsdCIpLHA9ZS5wb3M9PT0idCIsbT1sLGc9bCx7bm9kZUJvcmRlcjp5fT1yLHtzdHlsZXNNYXA6dn09bWMoZSkseD0tZy8yLGI9LW0vMix3PWUubGFiZWw/ODowLEM9WGUuc3ZnKGgpLFQ9S2UoZSx7c3Ryb2tlOiJub25lIixmaWxsOiJub25lIn0pO2UubG9vayE9PSJoYW5kRHJhd24iJiYoVC5yb3VnaG5lc3M9MCxULmZpbGxTdHlsZT0ic29saWQiKTtsZXQgRT1DLnJlY3RhbmdsZSh4LGIsZyxtLFQpLEE9TWF0aC5tYXgoZyxmLndpZHRoKSxTPW0rZi5oZWlnaHQrdyxfPUMucmVjdGFuZ2xlKC1BLzIsLVMvMixBLFMsey4uLlQsZmlsbDoidHJhbnNwYXJlbnQiLHN0cm9rZToibm9uZSJ9KSxJPWguaW5zZXJ0KCgpPT5FLCI6Zmlyc3QtY2hpbGQiKSxEPWguaW5zZXJ0KCgpPT5fKTtpZihlLmljb24pe2xldCBrPWguYXBwZW5kKCJnIik7ay5odG1sKGA8Zz4ke2F3YWl0IHdvKGUuaWNvbix7aGVpZ2h0Omwsd2lkdGg6bCxmYWxsYmFja1ByZWZpeDoiIn0pfTwvZz5gKTtsZXQgTD1rLm5vZGUoKS5nZXRCQm94KCksUj1MLndpZHRoLE89TC5oZWlnaHQsTT1MLngsQj1MLnk7ay5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstUi8yLU19LCR7cD9mLmhlaWdodC8yK3cvMi1PLzItQjotZi5oZWlnaHQvMi13LzItTy8yLUJ9KWApLGsuYXR0cigic3R5bGUiLGBjb2xvcjogJHt2LmdldCgic3Ryb2tlIik/P3l9O2ApfXJldHVybiBkLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1mLndpZHRoLzItKGYueC0oZi5sZWZ0Pz8wKSl9LCR7cD8tUy8yOlMvMi1mLmhlaWdodH0pYCksSS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoMCwke3A/Zi5oZWlnaHQvMit3LzI6LWYuaGVpZ2h0LzItdy8yfSlgKSxqZShlLEQpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGspe2lmKFkuaW5mbygiaWNvblNxdWFyZSBpbnRlcnNlY3QiLGUsayksIWUubGFiZWwpcmV0dXJuIFllLnJlY3QoZSxrKTtsZXQgTD1lLng/PzAsUj1lLnk/PzAsTz1lLmhlaWdodD8/MCxNPVtdO3JldHVybiBwP009W3t4OkwtZi53aWR0aC8yLHk6Ui1PLzJ9LHt4OkwrZi53aWR0aC8yLHk6Ui1PLzJ9LHt4OkwrZi53aWR0aC8yLHk6Ui1PLzIrZi5oZWlnaHQrd30se3g6TCtnLzIseTpSLU8vMitmLmhlaWdodCt3fSx7eDpMK2cvMix5OlIrTy8yfSx7eDpMLWcvMix5OlIrTy8yfSx7eDpMLWcvMix5OlItTy8yK2YuaGVpZ2h0K3d9LHt4OkwtZi53aWR0aC8yLHk6Ui1PLzIrZi5oZWlnaHQrd31dOk09W3t4OkwtZy8yLHk6Ui1PLzJ9LHt4OkwrZy8yLHk6Ui1PLzJ9LHt4OkwrZy8yLHk6Ui1PLzIrbX0se3g6TCtmLndpZHRoLzIseTpSLU8vMittfSx7eDpMK2Yud2lkdGgvMi8yLHk6UitPLzJ9LHt4OkwtZi53aWR0aC8yLHk6UitPLzJ9LHt4OkwtZi53aWR0aC8yLHk6Ui1PLzIrbX0se3g6TC1nLzIseTpSLU8vMittfV0sWWUucG9seWdvbihlLE0sayl9LGh9dmFyIHlRPU4oKCk9PnsidXNlIHN0cmljdCI7V3QoKTt2dCgpO3R1KCk7SHQoKTtVdCgpO0Z0KCk7byhnUSwiaWNvbiIpfSk7YXN5bmMgZnVuY3Rpb24gdlEodCxlLHtjb25maWc6e3RoZW1lVmFyaWFibGVzOnIsZmxvd2NoYXJ0Om59fSl7bGV0e2xhYmVsU3R5bGVzOml9PVFlKGUpO2UubGFiZWxTdHlsZT1pO2xldCBhPWUuYXNzZXRIZWlnaHQ/PzQ4LHM9ZS5hc3NldFdpZHRoPz80OCxsPU1hdGgubWF4KGEscyksdT1uPy53cmFwcGluZ1dpZHRoO2Uud2lkdGg9TWF0aC5tYXgobCx1Pz8wKTtsZXR7c2hhcGVTdmc6aCxiYm94OmYsbGFiZWw6ZH09YXdhaXQgcHQodCxlLCJpY29uLXNoYXBlIGRlZmF1bHQiKSxwPTIwLG09ZS5sYWJlbD84OjAsZz1lLnBvcz09PSJ0Iix7bm9kZUJvcmRlcjp5LG1haW5Ca2c6dn09cix7c3R5bGVzTWFwOnh9PW1jKGUpLGI9WGUuc3ZnKGgpLHc9S2UoZSx7fSk7ZS5sb29rIT09ImhhbmREcmF3biImJih3LnJvdWdobmVzcz0wLHcuZmlsbFN0eWxlPSJzb2xpZCIpO2xldCBDPXguZ2V0KCJmaWxsIik7dy5zdHJva2U9Qz8/djtsZXQgVD1oLmFwcGVuZCgiZyIpO2UuaWNvbiYmVC5odG1sKGA8Zz4ke2F3YWl0IHdvKGUuaWNvbix7aGVpZ2h0Omwsd2lkdGg6bCxmYWxsYmFja1ByZWZpeDoiIn0pfTwvZz5gKTtsZXQgRT1ULm5vZGUoKS5nZXRCQm94KCksQT1FLndpZHRoLFM9RS5oZWlnaHQsXz1FLngsST1FLnksRD1NYXRoLm1heChBLFMpKk1hdGguU1FSVDIrcCoyLGs9Yi5jaXJjbGUoMCwwLEQsdyksTD1NYXRoLm1heChELGYud2lkdGgpLFI9RCtmLmhlaWdodCttLE89Yi5yZWN0YW5nbGUoLUwvMiwtUi8yLEwsUix7Li4udyxmaWxsOiJ0cmFuc3BhcmVudCIsc3Ryb2tlOiJub25lIn0pLE09aC5pbnNlcnQoKCk9PmssIjpmaXJzdC1jaGlsZCIpLEI9aC5pbnNlcnQoKCk9Pk8pO3JldHVybiBULmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1BLzItX30sJHtnP2YuaGVpZ2h0LzIrbS8yLVMvMi1JOi1mLmhlaWdodC8yLW0vMi1TLzItSX0pYCksVC5hdHRyKCJzdHlsZSIsYGNvbG9yOiAke3guZ2V0KCJzdHJva2UiKT8/eX07YCksZC5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstZi53aWR0aC8yLShmLngtKGYubGVmdD8/MCkpfSwke2c/LVIvMjpSLzItZi5oZWlnaHR9KWApLE0uYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKDAsJHtnP2YuaGVpZ2h0LzIrbS8yOi1mLmhlaWdodC8yLW0vMn0pYCksamUoZSxCKSxlLmludGVyc2VjdD1mdW5jdGlvbihGKXtyZXR1cm4gWS5pbmZvKCJpY29uU3F1YXJlIGludGVyc2VjdCIsZSxGKSxZZS5yZWN0KGUsRil9LGh9dmFyIHhRPU4oKCk9PnsidXNlIHN0cmljdCI7V3QoKTt2dCgpO3R1KCk7SHQoKTtVdCgpO0Z0KCk7byh2USwiaWNvbkNpcmNsZSIpfSk7dmFyIE5hLHFoPU4oKCk9PnsidXNlIHN0cmljdCI7TmE9bygodCxlLHIsbixpKT0+WyJNIix0K2ksZSwiSCIsdCtyLWksIkEiLGksaSwwLDAsMSx0K3IsZStpLCJWIixlK24taSwiQSIsaSxpLDAsMCwxLHQrci1pLGUrbiwiSCIsdCtpLCJBIixpLGksMCwwLDEsdCxlK24taSwiViIsZStpLCJBIixpLGksMCwwLDEsdCtpLGUsIloiXS5qb2luKCIgIiksImNyZWF0ZVJvdW5kZWRSZWN0UGF0aEQiKX0pO2FzeW5jIGZ1bmN0aW9uIGJRKHQsZSx7Y29uZmlnOnt0aGVtZVZhcmlhYmxlczpyLGZsb3djaGFydDpufX0pe2xldHtsYWJlbFN0eWxlczppfT1RZShlKTtlLmxhYmVsU3R5bGU9aTtsZXQgYT1lLmFzc2V0SGVpZ2h0Pz80OCxzPWUuYXNzZXRXaWR0aD8/NDgsbD1NYXRoLm1heChhLHMpLHU9bj8ud3JhcHBpbmdXaWR0aDtlLndpZHRoPU1hdGgubWF4KGwsdT8/MCk7bGV0e3NoYXBlU3ZnOmgsYmJveDpmLGhhbGZQYWRkaW5nOmQsbGFiZWw6cH09YXdhaXQgcHQodCxlLCJpY29uLXNoYXBlIGRlZmF1bHQiKSxtPWUucG9zPT09InQiLGc9bCtkKjIseT1sK2QqMix7bm9kZUJvcmRlcjp2LG1haW5Ca2c6eH09cix7c3R5bGVzTWFwOmJ9PW1jKGUpLHc9LXkvMixDPS1nLzIsVD1lLmxhYmVsPzg6MCxFPVhlLnN2ZyhoKSxBPUtlKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYoQS5yb3VnaG5lc3M9MCxBLmZpbGxTdHlsZT0ic29saWQiKTtsZXQgUz1iLmdldCgiZmlsbCIpO0Euc3Ryb2tlPVM/P3g7bGV0IF89RS5wYXRoKE5hKHcsQyx5LGcsNSksQSksST1NYXRoLm1heCh5LGYud2lkdGgpLEQ9ZytmLmhlaWdodCtULGs9RS5yZWN0YW5nbGUoLUkvMiwtRC8yLEksRCx7Li4uQSxmaWxsOiJ0cmFuc3BhcmVudCIsc3Ryb2tlOiJub25lIn0pLEw9aC5pbnNlcnQoKCk9Pl8sIjpmaXJzdC1jaGlsZCIpLmF0dHIoImNsYXNzIiwiaWNvbi1zaGFwZTIiKSxSPWguaW5zZXJ0KCgpPT5rKTtpZihlLmljb24pe2xldCBPPWguYXBwZW5kKCJnIik7Ty5odG1sKGA8Zz4ke2F3YWl0IHdvKGUuaWNvbix7aGVpZ2h0Omwsd2lkdGg6bCxmYWxsYmFja1ByZWZpeDoiIn0pfTwvZz5gKTtsZXQgTT1PLm5vZGUoKS5nZXRCQm94KCksQj1NLndpZHRoLEY9TS5oZWlnaHQsUD1NLngsej1NLnk7Ty5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstQi8yLVB9LCR7bT9mLmhlaWdodC8yK1QvMi1GLzItejotZi5oZWlnaHQvMi1ULzItRi8yLXp9KWApLE8uYXR0cigic3R5bGUiLGBjb2xvcjogJHtiLmdldCgic3Ryb2tlIik/P3Z9O2ApfXJldHVybiBwLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1mLndpZHRoLzItKGYueC0oZi5sZWZ0Pz8wKSl9LCR7bT8tRC8yOkQvMi1mLmhlaWdodH0pYCksTC5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoMCwke20/Zi5oZWlnaHQvMitULzI6LWYuaGVpZ2h0LzItVC8yfSlgKSxqZShlLFIpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKE8pe2lmKFkuaW5mbygiaWNvblNxdWFyZSBpbnRlcnNlY3QiLGUsTyksIWUubGFiZWwpcmV0dXJuIFllLnJlY3QoZSxPKTtsZXQgTT1lLng/PzAsQj1lLnk/PzAsRj1lLmhlaWdodD8/MCxQPVtdO3JldHVybiBtP1A9W3t4Ok0tZi53aWR0aC8yLHk6Qi1GLzJ9LHt4Ok0rZi53aWR0aC8yLHk6Qi1GLzJ9LHt4Ok0rZi53aWR0aC8yLHk6Qi1GLzIrZi5oZWlnaHQrVH0se3g6TSt5LzIseTpCLUYvMitmLmhlaWdodCtUfSx7eDpNK3kvMix5OkIrRi8yfSx7eDpNLXkvMix5OkIrRi8yfSx7eDpNLXkvMix5OkItRi8yK2YuaGVpZ2h0K1R9LHt4Ok0tZi53aWR0aC8yLHk6Qi1GLzIrZi5oZWlnaHQrVH1dOlA9W3t4Ok0teS8yLHk6Qi1GLzJ9LHt4Ok0reS8yLHk6Qi1GLzJ9LHt4Ok0reS8yLHk6Qi1GLzIrZ30se3g6TStmLndpZHRoLzIseTpCLUYvMitnfSx7eDpNK2Yud2lkdGgvMi8yLHk6QitGLzJ9LHt4Ok0tZi53aWR0aC8yLHk6QitGLzJ9LHt4Ok0tZi53aWR0aC8yLHk6Qi1GLzIrZ30se3g6TS15LzIseTpCLUYvMitnfV0sWWUucG9seWdvbihlLFAsTyl9LGh9dmFyIHdRPU4oKCk9PnsidXNlIHN0cmljdCI7V3QoKTt2dCgpO3R1KCk7SHQoKTtVdCgpO3FoKCk7RnQoKTtvKGJRLCJpY29uUm91bmRlZCIpfSk7YXN5bmMgZnVuY3Rpb24gVFEodCxlLHtjb25maWc6e3RoZW1lVmFyaWFibGVzOnIsZmxvd2NoYXJ0Om59fSl7bGV0e2xhYmVsU3R5bGVzOml9PVFlKGUpO2UubGFiZWxTdHlsZT1pO2xldCBhPWUuYXNzZXRIZWlnaHQ/PzQ4LHM9ZS5hc3NldFdpZHRoPz80OCxsPU1hdGgubWF4KGEscyksdT1uPy53cmFwcGluZ1dpZHRoO2Uud2lkdGg9TWF0aC5tYXgobCx1Pz8wKTtsZXR7c2hhcGVTdmc6aCxiYm94OmYsaGFsZlBhZGRpbmc6ZCxsYWJlbDpwfT1hd2FpdCBwdCh0LGUsImljb24tc2hhcGUgZGVmYXVsdCIpLG09ZS5wb3M9PT0idCIsZz1sK2QqMix5PWwrZCoyLHtub2RlQm9yZGVyOnYsbWFpbkJrZzp4fT1yLHtzdHlsZXNNYXA6Yn09bWMoZSksdz0teS8yLEM9LWcvMixUPWUubGFiZWw/ODowLEU9WGUuc3ZnKGgpLEE9S2UoZSx7fSk7ZS5sb29rIT09ImhhbmREcmF3biImJihBLnJvdWdobmVzcz0wLEEuZmlsbFN0eWxlPSJzb2xpZCIpO2xldCBTPWIuZ2V0KCJmaWxsIik7QS5zdHJva2U9Uz8/eDtsZXQgXz1FLnBhdGgoTmEodyxDLHksZywuMSksQSksST1NYXRoLm1heCh5LGYud2lkdGgpLEQ9ZytmLmhlaWdodCtULGs9RS5yZWN0YW5nbGUoLUkvMiwtRC8yLEksRCx7Li4uQSxmaWxsOiJ0cmFuc3BhcmVudCIsc3Ryb2tlOiJub25lIn0pLEw9aC5pbnNlcnQoKCk9Pl8sIjpmaXJzdC1jaGlsZCIpLFI9aC5pbnNlcnQoKCk9PmspO2lmKGUuaWNvbil7bGV0IE89aC5hcHBlbmQoImciKTtPLmh0bWwoYDxnPiR7YXdhaXQgd28oZS5pY29uLHtoZWlnaHQ6bCx3aWR0aDpsLGZhbGxiYWNrUHJlZml4OiIifSl9PC9nPmApO2xldCBNPU8ubm9kZSgpLmdldEJCb3goKSxCPU0ud2lkdGgsRj1NLmhlaWdodCxQPU0ueCx6PU0ueTtPLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1CLzItUH0sJHttP2YuaGVpZ2h0LzIrVC8yLUYvMi16Oi1mLmhlaWdodC8yLVQvMi1GLzIten0pYCksTy5hdHRyKCJzdHlsZSIsYGNvbG9yOiAke2IuZ2V0KCJzdHJva2UiKT8/dn07YCl9cmV0dXJuIHAuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LWYud2lkdGgvMi0oZi54LShmLmxlZnQ/PzApKX0sJHttPy1ELzI6RC8yLWYuaGVpZ2h0fSlgKSxMLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgwLCR7bT9mLmhlaWdodC8yK1QvMjotZi5oZWlnaHQvMi1ULzJ9KWApLGplKGUsUiksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oTyl7aWYoWS5pbmZvKCJpY29uU3F1YXJlIGludGVyc2VjdCIsZSxPKSwhZS5sYWJlbClyZXR1cm4gWWUucmVjdChlLE8pO2xldCBNPWUueD8/MCxCPWUueT8/MCxGPWUuaGVpZ2h0Pz8wLFA9W107cmV0dXJuIG0/UD1be3g6TS1mLndpZHRoLzIseTpCLUYvMn0se3g6TStmLndpZHRoLzIseTpCLUYvMn0se3g6TStmLndpZHRoLzIseTpCLUYvMitmLmhlaWdodCtUfSx7eDpNK3kvMix5OkItRi8yK2YuaGVpZ2h0K1R9LHt4Ok0reS8yLHk6QitGLzJ9LHt4Ok0teS8yLHk6QitGLzJ9LHt4Ok0teS8yLHk6Qi1GLzIrZi5oZWlnaHQrVH0se3g6TS1mLndpZHRoLzIseTpCLUYvMitmLmhlaWdodCtUfV06UD1be3g6TS15LzIseTpCLUYvMn0se3g6TSt5LzIseTpCLUYvMn0se3g6TSt5LzIseTpCLUYvMitnfSx7eDpNK2Yud2lkdGgvMix5OkItRi8yK2d9LHt4Ok0rZi53aWR0aC8yLzIseTpCK0YvMn0se3g6TS1mLndpZHRoLzIseTpCK0YvMn0se3g6TS1mLndpZHRoLzIseTpCLUYvMitnfSx7eDpNLXkvMix5OkItRi8yK2d9XSxZZS5wb2x5Z29uKGUsUCxPKX0saH12YXIga1E9TigoKT0+eyJ1c2Ugc3RyaWN0IjtXdCgpO3Z0KCk7dHUoKTtIdCgpO3FoKCk7VXQoKTtGdCgpO28oVFEsImljb25TcXVhcmUiKX0pO2FzeW5jIGZ1bmN0aW9uIEVRKHQsZSx7Y29uZmlnOntmbG93Y2hhcnQ6cn19KXtsZXQgbj1uZXcgSW1hZ2U7bi5zcmM9ZT8uaW1nPz8iIixhd2FpdCBuLmRlY29kZSgpO2xldCBpPU51bWJlcihuLm5hdHVyYWxXaWR0aC50b1N0cmluZygpLnJlcGxhY2UoInB4IiwiIikpLGE9TnVtYmVyKG4ubmF0dXJhbEhlaWdodC50b1N0cmluZygpLnJlcGxhY2UoInB4IiwiIikpO2UuaW1hZ2VBc3BlY3RSYXRpbz1pL2E7bGV0e2xhYmVsU3R5bGVzOnN9PVFlKGUpO2UubGFiZWxTdHlsZT1zO2xldCBsPXI/LndyYXBwaW5nV2lkdGg7ZS5kZWZhdWx0V2lkdGg9cj8ud3JhcHBpbmdXaWR0aDtsZXQgdT1NYXRoLm1heChlLmxhYmVsP2w/PzA6MCxlPy5hc3NldFdpZHRoPz9pKSxoPWUuY29uc3RyYWludD09PSJvbiImJmU/LmFzc2V0SGVpZ2h0P2UuYXNzZXRIZWlnaHQqZS5pbWFnZUFzcGVjdFJhdGlvOnUsZj1lLmNvbnN0cmFpbnQ9PT0ib24iP2gvZS5pbWFnZUFzcGVjdFJhdGlvOmU/LmFzc2V0SGVpZ2h0Pz9hO2Uud2lkdGg9TWF0aC5tYXgoaCxsPz8wKTtsZXR7c2hhcGVTdmc6ZCxiYm94OnAsbGFiZWw6bX09YXdhaXQgcHQodCxlLCJpbWFnZS1zaGFwZSBkZWZhdWx0IiksZz1lLnBvcz09PSJ0Iix5PS1oLzIsdj0tZi8yLHg9ZS5sYWJlbD84OjAsYj1YZS5zdmcoZCksdz1LZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKHcucm91Z2huZXNzPTAsdy5maWxsU3R5bGU9InNvbGlkIik7bGV0IEM9Yi5yZWN0YW5nbGUoeSx2LGgsZix3KSxUPU1hdGgubWF4KGgscC53aWR0aCksRT1mK3AuaGVpZ2h0K3gsQT1iLnJlY3RhbmdsZSgtVC8yLC1FLzIsVCxFLHsuLi53LGZpbGw6Im5vbmUiLHN0cm9rZToibm9uZSJ9KSxTPWQuaW5zZXJ0KCgpPT5DLCI6Zmlyc3QtY2hpbGQiKSxfPWQuaW5zZXJ0KCgpPT5BKTtpZihlLmltZyl7bGV0IEk9ZC5hcHBlbmQoImltYWdlIik7SS5hdHRyKCJocmVmIixlLmltZyksSS5hdHRyKCJ3aWR0aCIsaCksSS5hdHRyKCJoZWlnaHQiLGYpLEkuYXR0cigicHJlc2VydmVBc3BlY3RSYXRpbyIsIm5vbmUiKSxJLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1oLzJ9LCR7Zz9FLzItZjotRS8yfSlgKX1yZXR1cm4gbS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstcC53aWR0aC8yLShwLngtKHAubGVmdD8/MCkpfSwke2c/LWYvMi1wLmhlaWdodC8yLXgvMjpmLzItcC5oZWlnaHQvMit4LzJ9KWApLFMuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKDAsJHtnP3AuaGVpZ2h0LzIreC8yOi1wLmhlaWdodC8yLXgvMn0pYCksamUoZSxfKSxlLmludGVyc2VjdD1mdW5jdGlvbihJKXtpZihZLmluZm8oImljb25TcXVhcmUgaW50ZXJzZWN0IixlLEkpLCFlLmxhYmVsKXJldHVybiBZZS5yZWN0KGUsSSk7bGV0IEQ9ZS54Pz8wLGs9ZS55Pz8wLEw9ZS5oZWlnaHQ/PzAsUj1bXTtyZXR1cm4gZz9SPVt7eDpELXAud2lkdGgvMix5OmstTC8yfSx7eDpEK3Aud2lkdGgvMix5OmstTC8yfSx7eDpEK3Aud2lkdGgvMix5OmstTC8yK3AuaGVpZ2h0K3h9LHt4OkQraC8yLHk6ay1MLzIrcC5oZWlnaHQreH0se3g6RCtoLzIseTprK0wvMn0se3g6RC1oLzIseTprK0wvMn0se3g6RC1oLzIseTprLUwvMitwLmhlaWdodCt4fSx7eDpELXAud2lkdGgvMix5OmstTC8yK3AuaGVpZ2h0K3h9XTpSPVt7eDpELWgvMix5OmstTC8yfSx7eDpEK2gvMix5OmstTC8yfSx7eDpEK2gvMix5OmstTC8yK2Z9LHt4OkQrcC53aWR0aC8yLHk6ay1MLzIrZn0se3g6RCtwLndpZHRoLzIvMix5OmsrTC8yfSx7eDpELXAud2lkdGgvMix5OmsrTC8yfSx7eDpELXAud2lkdGgvMix5OmstTC8yK2Z9LHt4OkQtaC8yLHk6ay1MLzIrZn1dLFllLnBvbHlnb24oZSxSLEkpfSxkfXZhciBTUT1OKCgpPT57InVzZSBzdHJpY3QiO1d0KCk7dnQoKTtIdCgpO1V0KCk7RnQoKTtvKEVRLCJpbWFnZVNxdWFyZSIpfSk7YXN5bmMgZnVuY3Rpb24gQ1EodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVFlKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YX09YXdhaXQgcHQodCxlLGh0KGUpKSxzPU1hdGgubWF4KGEud2lkdGgrKGUucGFkZGluZz8/MCkqMixlPy53aWR0aD8/MCksbD1NYXRoLm1heChhLmhlaWdodCsoZS5wYWRkaW5nPz8wKSoyLGU/LmhlaWdodD8/MCksdT1be3g6MCx5OjB9LHt4OnMseTowfSx7eDpzKzMqbC82LHk6LWx9LHt4Oi0zKmwvNix5Oi1sfV0saCx7Y3NzU3R5bGVzOmZ9PWU7aWYoZS5sb29rPT09ImhhbmREcmF3biIpe2xldCBkPVhlLnN2ZyhpKSxwPUtlKGUse30pLG09WHQodSksZz1kLnBhdGgobSxwKTtoPWkuaW5zZXJ0KCgpPT5nLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstcy8yfSwgJHtsLzJ9KWApLGYmJmguYXR0cigic3R5bGUiLGYpfWVsc2UgaD1MYShpLHMsbCx1KTtyZXR1cm4gbiYmaC5hdHRyKCJzdHlsZSIsbiksZS53aWR0aD1zLGUuaGVpZ2h0PWwsamUoZSxoKSxlLmludGVyc2VjdD1mdW5jdGlvbihkKXtyZXR1cm4gWWUucG9seWdvbihlLHUsZCl9LGl9dmFyIEFRPU4oKCk9PnsidXNlIHN0cmljdCI7RnQoKTtIdCgpO1V0KCk7V3QoKTtfdSgpO28oQ1EsImludl90cmFwZXpvaWQiKX0pO2FzeW5jIGZ1bmN0aW9uIER1KHQsZSxyKXtsZXR7bGFiZWxTdHlsZXM6bixub2RlU3R5bGVzOml9PVFlKGUpO2UubGFiZWxTdHlsZT1uO2xldHtzaGFwZVN2ZzphLGJib3g6c309YXdhaXQgcHQodCxlLGh0KGUpKSxsPU1hdGgubWF4KHMud2lkdGgrci5sYWJlbFBhZGRpbmdYKjIsZT8ud2lkdGh8fDApLHU9TWF0aC5tYXgocy5oZWlnaHQrci5sYWJlbFBhZGRpbmdZKjIsZT8uaGVpZ2h0fHwwKSxoPS1sLzIsZj0tdS8yLGQse3J4OnAscnk6bX09ZSx7Y3NzU3R5bGVzOmd9PWU7aWYocj8ucngmJnIucnkmJihwPXIucngsbT1yLnJ5KSxlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0IHk9WGUuc3ZnKGEpLHY9S2UoZSx7fSkseD1wfHxtP3kucGF0aChOYShoLGYsbCx1LHB8fDApLHYpOnkucmVjdGFuZ2xlKGgsZixsLHUsdik7ZD1hLmluc2VydCgoKT0+eCwiOmZpcnN0LWNoaWxkIiksZC5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInN0eWxlIiwkbihnKSl9ZWxzZSBkPWEuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksZC5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInN0eWxlIixpKS5hdHRyKCJyeCIsJG4ocCkpLmF0dHIoInJ5IiwkbihtKSkuYXR0cigieCIsaCkuYXR0cigieSIsZikuYXR0cigid2lkdGgiLGwpLmF0dHIoImhlaWdodCIsdSk7cmV0dXJuIGplKGUsZCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oeSl7cmV0dXJuIFllLnJlY3QoZSx5KX0sYX12YXIgbW09TigoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO0h0KCk7cWgoKTtVdCgpO1d0KCk7aXIoKTtvKER1LCJkcmF3UmVjdCIpfSk7YXN5bmMgZnVuY3Rpb24gX1EodCxlKXtsZXR7c2hhcGVTdmc6cixiYm94Om4sbGFiZWw6aX09YXdhaXQgcHQodCxlLCJsYWJlbCIpLGE9ci5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gYS5hdHRyKCJ3aWR0aCIsLjEpLmF0dHIoImhlaWdodCIsLjEpLHIuYXR0cigiY2xhc3MiLCJsYWJlbCBlZGdlTGFiZWwiKSxpLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey0obi53aWR0aC8yKS0obi54LShuLmxlZnQ/PzApKX0sICR7LShuLmhlaWdodC8yKS0obi55LShuLnRvcD8/MCkpfSlgKSxqZShlLGEpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHUpe3JldHVybiBZZS5yZWN0KGUsdSl9LHJ9dmFyIERRPU4oKCk9PnsidXNlIHN0cmljdCI7bW0oKTtGdCgpO0h0KCk7byhfUSwibGFiZWxSZWN0Iil9KTthc3luYyBmdW5jdGlvbiBMUSh0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09UWUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphfT1hd2FpdCBwdCh0LGUsaHQoZSkpLHM9TWF0aC5tYXgoYS53aWR0aCsoZS5wYWRkaW5nPz8wKSxlPy53aWR0aD8/MCksbD1NYXRoLm1heChhLmhlaWdodCsoZS5wYWRkaW5nPz8wKSxlPy5oZWlnaHQ/PzApLHU9W3t4OjAseTowfSx7eDpzKzMqbC82LHk6MH0se3g6cyx5Oi1sfSx7eDotKDMqbCkvNix5Oi1sfV0saCx7Y3NzU3R5bGVzOmZ9PWU7aWYoZS5sb29rPT09ImhhbmREcmF3biIpe2xldCBkPVhlLnN2ZyhpKSxwPUtlKGUse30pLG09WHQodSksZz1kLnBhdGgobSxwKTtoPWkuaW5zZXJ0KCgpPT5nLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstcy8yfSwgJHtsLzJ9KWApLGYmJmguYXR0cigic3R5bGUiLGYpfWVsc2UgaD1MYShpLHMsbCx1KTtyZXR1cm4gbiYmaC5hdHRyKCJzdHlsZSIsbiksZS53aWR0aD1zLGUuaGVpZ2h0PWwsamUoZSxoKSxlLmludGVyc2VjdD1mdW5jdGlvbihkKXtyZXR1cm4gWWUucG9seWdvbihlLHUsZCl9LGl9dmFyIFJRPU4oKCk9PnsidXNlIHN0cmljdCI7RnQoKTtIdCgpO1V0KCk7V3QoKTtfdSgpO28oTFEsImxlYW5fbGVmdCIpfSk7YXN5bmMgZnVuY3Rpb24gTlEodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVFlKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YX09YXdhaXQgcHQodCxlLGh0KGUpKSxzPU1hdGgubWF4KGEud2lkdGgrKGUucGFkZGluZz8/MCksZT8ud2lkdGg/PzApLGw9TWF0aC5tYXgoYS5oZWlnaHQrKGUucGFkZGluZz8/MCksZT8uaGVpZ2h0Pz8wKSx1PVt7eDotMypsLzYseTowfSx7eDpzLHk6MH0se3g6cyszKmwvNix5Oi1sfSx7eDowLHk6LWx9XSxoLHtjc3NTdHlsZXM6Zn09ZTtpZihlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0IGQ9WGUuc3ZnKGkpLHA9S2UoZSx7fSksbT1YdCh1KSxnPWQucGF0aChtLHApO2g9aS5pbnNlcnQoKCk9PmcsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1zLzJ9LCAke2wvMn0pYCksZiYmaC5hdHRyKCJzdHlsZSIsZil9ZWxzZSBoPUxhKGkscyxsLHUpO3JldHVybiBuJiZoLmF0dHIoInN0eWxlIixuKSxlLndpZHRoPXMsZS5oZWlnaHQ9bCxqZShlLGgpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGQpe3JldHVybiBZZS5wb2x5Z29uKGUsdSxkKX0saX12YXIgTVE9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO0h0KCk7VXQoKTtXdCgpO191KCk7byhOUSwibGVhbl9yaWdodCIpfSk7ZnVuY3Rpb24gSVEodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVFlKGUpO2UubGFiZWw9IiIsZS5sYWJlbFN0eWxlPXI7bGV0IGk9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsaHQoZSkpLmF0dHIoImlkIixlLmRvbUlkPz9lLmlkKSx7Y3NzU3R5bGVzOmF9PWUscz1NYXRoLm1heCgzNSxlPy53aWR0aD8/MCksbD1NYXRoLm1heCgzNSxlPy5oZWlnaHQ/PzApLHU9NyxoPVt7eDpzLHk6MH0se3g6MCx5OmwrdS8yfSx7eDpzLTIqdSx5OmwrdS8yfSx7eDowLHk6MipsfSx7eDpzLHk6bC11LzJ9LHt4OjIqdSx5OmwtdS8yfV0sZj1YZS5zdmcoaSksZD1LZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKGQucm91Z2huZXNzPTAsZC5maWxsU3R5bGU9InNvbGlkIik7bGV0IHA9WHQoaCksbT1mLnBhdGgocCxkKSxnPWkuaW5zZXJ0KCgpPT5tLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gYSYmZS5sb29rIT09ImhhbmREcmF3biImJmcuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLGEpLG4mJmUubG9vayE9PSJoYW5kRHJhd24iJiZnLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixuKSxnLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgtJHtzLzJ9LCR7LWx9KWApLGplKGUsZyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oeSl7cmV0dXJuIFkuaW5mbygibGlnaHRuaW5nQm9sdCBpbnRlcnNlY3QiLGUseSksWWUucG9seWdvbihlLGgseSl9LGl9dmFyIE9RPU4oKCk9PnsidXNlIHN0cmljdCI7dnQoKTtGdCgpO1V0KCk7V3QoKTtIdCgpO0Z0KCk7byhJUSwibGlnaHRuaW5nQm9sdCIpfSk7YXN5bmMgZnVuY3Rpb24gUFEodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVFlKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YSxsYWJlbDpzfT1hd2FpdCBwdCh0LGUsaHQoZSkpLGw9TWF0aC5tYXgoYS53aWR0aCsoZS5wYWRkaW5nPz8wKSxlLndpZHRoPz8wKSx1PWwvMixoPXUvKDIuNStsLzUwKSxmPU1hdGgubWF4KGEuaGVpZ2h0K2grKGUucGFkZGluZz8/MCksZS5oZWlnaHQ/PzApLGQ9ZiouMSxwLHtjc3NTdHlsZXM6bX09ZTtpZihlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0IGc9WGUuc3ZnKGkpLHk9cF9lKDAsMCxsLGYsdSxoLGQpLHY9bV9lKDAsaCxsLGYsdSxoKSx4PUtlKGUse30pLGI9Zy5wYXRoKHkseCksdz1nLnBhdGgodix4KTtpLmluc2VydCgoKT0+dywiOmZpcnN0LWNoaWxkIikuYXR0cigiY2xhc3MiLCJsaW5lIikscD1pLmluc2VydCgoKT0+YiwiOmZpcnN0LWNoaWxkIikscC5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLG0mJnAuYXR0cigic3R5bGUiLG0pfWVsc2V7bGV0IGc9ZF9lKDAsMCxsLGYsdSxoLGQpO3A9aS5pbnNlcnQoInBhdGgiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJkIixnKS5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInN0eWxlIiwkbihtKSkuYXR0cigic3R5bGUiLG4pfXJldHVybiBwLmF0dHIoImxhYmVsLW9mZnNldC15IixoKSxwLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1sLzJ9LCAkey0oZi8yK2gpfSlgKSxqZShlLHApLHMuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LShhLndpZHRoLzIpLShhLngtKGEubGVmdD8/MCkpfSwgJHstKGEuaGVpZ2h0LzIpK2gtKGEueS0oYS50b3A/PzApKX0pYCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oZyl7bGV0IHk9WWUucmVjdChlLGcpLHY9eS54LShlLng/PzApO2lmKHUhPTAmJihNYXRoLmFicyh2KTwoZS53aWR0aD8/MCkvMnx8TWF0aC5hYnModik9PShlLndpZHRoPz8wKS8yJiZNYXRoLmFicyh5LnktKGUueT8/MCkpPihlLmhlaWdodD8/MCkvMi1oKSl7bGV0IHg9aCpoKigxLXYqdi8odSp1KSk7eD4wJiYoeD1NYXRoLnNxcnQoeCkpLHg9aC14LGcueS0oZS55Pz8wKT4wJiYoeD0teCkseS55Kz14fXJldHVybiB5fSxpfXZhciBkX2UscF9lLG1fZSxCUT1OKCgpPT57InVzZSBzdHJpY3QiO0Z0KCk7SHQoKTtVdCgpO1d0KCk7aXIoKTtkX2U9bygodCxlLHIsbixpLGEscyk9PltgTSR7dH0sJHtlK2F9YCxgYSR7aX0sJHthfSAwLDAsMCAke3J9LDBgLGBhJHtpfSwke2F9IDAsMCwwICR7LXJ9LDBgLGBsMCwke259YCxgYSR7aX0sJHthfSAwLDAsMCAke3J9LDBgLGBsMCwkey1ufWAsYE0ke3R9LCR7ZSthK3N9YCxgYSR7aX0sJHthfSAwLDAsMCAke3J9LDBgXS5qb2luKCIgIiksImNyZWF0ZUN5bGluZGVyUGF0aEQiKSxwX2U9bygodCxlLHIsbixpLGEscyk9PltgTSR7dH0sJHtlK2F9YCxgTSR7dCtyfSwke2UrYX1gLGBhJHtpfSwke2F9IDAsMCwwICR7LXJ9LDBgLGBsMCwke259YCxgYSR7aX0sJHthfSAwLDAsMCAke3J9LDBgLGBsMCwkey1ufWAsYE0ke3R9LCR7ZSthK3N9YCxgYSR7aX0sJHthfSAwLDAsMCAke3J9LDBgXS5qb2luKCIgIiksImNyZWF0ZU91dGVyQ3lsaW5kZXJQYXRoRCIpLG1fZT1vKCh0LGUscixuLGksYSk9PltgTSR7dC1yLzJ9LCR7LW4vMn1gLGBhJHtpfSwke2F9IDAsMCwwICR7cn0sMGBdLmpvaW4oIiAiKSwiY3JlYXRlSW5uZXJDeWxpbmRlclBhdGhEIik7byhQUSwibGluZWRDeWxpbmRlciIpfSk7YXN5bmMgZnVuY3Rpb24gRlEodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVFlKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YSxsYWJlbDpzfT1hd2FpdCBwdCh0LGUsaHQoZSkpLGw9TWF0aC5tYXgoYS53aWR0aCsoZS5wYWRkaW5nPz8wKSoyLGU/LndpZHRoPz8wKSx1PU1hdGgubWF4KGEuaGVpZ2h0KyhlLnBhZGRpbmc/PzApKjIsZT8uaGVpZ2h0Pz8wKSxoPXUvNCxmPXUraCx7Y3NzU3R5bGVzOmR9PWUscD1YZS5zdmcoaSksbT1LZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKG0ucm91Z2huZXNzPTAsbS5maWxsU3R5bGU9InNvbGlkIik7bGV0IGc9W3t4Oi1sLzItbC8yKi4xLHk6LWYvMn0se3g6LWwvMi1sLzIqLjEseTpmLzJ9LC4uLkZvKC1sLzItbC8yKi4xLGYvMixsLzIrbC8yKi4xLGYvMixoLC44KSx7eDpsLzIrbC8yKi4xLHk6LWYvMn0se3g6LWwvMi1sLzIqLjEseTotZi8yfSx7eDotbC8yLHk6LWYvMn0se3g6LWwvMix5OmYvMioxLjF9LHt4Oi1sLzIseTotZi8yfV0seT1wLnBvbHlnb24oZy5tYXAoeD0+W3gueCx4LnldKSxtKSx2PWkuaW5zZXJ0KCgpPT55LCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gdi5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLGQmJmUubG9vayE9PSJoYW5kRHJhd24iJiZ2LnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixkKSxuJiZlLmxvb2shPT0iaGFuZERyYXduIiYmdi5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsbiksdi5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoMCwkey1oLzJ9KWApLHMuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LWwvMisoZS5wYWRkaW5nPz8wKStsLzIqLjEvMi0oYS54LShhLmxlZnQ/PzApKX0sJHstdS8yKyhlLnBhZGRpbmc/PzApLWgvMi0oYS55LShhLnRvcD8/MCkpfSlgKSxqZShlLHYpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHgpe3JldHVybiBZZS5wb2x5Z29uKGUsZyx4KX0saX12YXIgJFE9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO0h0KCk7V3QoKTtVdCgpO28oRlEsImxpbmVkV2F2ZUVkZ2VkUmVjdCIpfSk7YXN5bmMgZnVuY3Rpb24gelEodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVFlKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YSxsYWJlbDpzfT1hd2FpdCBwdCh0LGUsaHQoZSkpLGw9TWF0aC5tYXgoYS53aWR0aCsoZS5wYWRkaW5nPz8wKSoyLGU/LndpZHRoPz8wKSx1PU1hdGgubWF4KGEuaGVpZ2h0KyhlLnBhZGRpbmc/PzApKjIsZT8uaGVpZ2h0Pz8wKSxoPTUsZj0tbC8yLGQ9LXUvMix7Y3NzU3R5bGVzOnB9PWUsbT1YZS5zdmcoaSksZz1LZShlLHt9KSx5PVt7eDpmLWgseTpkK2h9LHt4OmYtaCx5OmQrdStofSx7eDpmK2wtaCx5OmQrdStofSx7eDpmK2wtaCx5OmQrdX0se3g6ZitsLHk6ZCt1fSx7eDpmK2wseTpkK3UtaH0se3g6ZitsK2gseTpkK3UtaH0se3g6ZitsK2gseTpkLWh9LHt4OmYraCx5OmQtaH0se3g6ZitoLHk6ZH0se3g6Zix5OmR9LHt4OmYseTpkK2h9XSx2PVt7eDpmLHk6ZCtofSx7eDpmK2wtaCx5OmQraH0se3g6ZitsLWgseTpkK3V9LHt4OmYrbCx5OmQrdX0se3g6ZitsLHk6ZH0se3g6Zix5OmR9XTtlLmxvb2shPT0iaGFuZERyYXduIiYmKGcucm91Z2huZXNzPTAsZy5maWxsU3R5bGU9InNvbGlkIik7bGV0IHg9WHQoeSksYj1tLnBhdGgoeCxnKSx3PVh0KHYpLEM9bS5wYXRoKHcsey4uLmcsZmlsbDoibm9uZSJ9KSxUPWkuaW5zZXJ0KCgpPT5DLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gVC5pbnNlcnQoKCk9PmIsIjpmaXJzdC1jaGlsZCIpLFQuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKSxwJiZlLmxvb2shPT0iaGFuZERyYXduIiYmVC5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIscCksbiYmZS5sb29rIT09ImhhbmREcmF3biImJlQuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLG4pLHMuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LShhLndpZHRoLzIpLWgtKGEueC0oYS5sZWZ0Pz8wKSl9LCAkey0oYS5oZWlnaHQvMikraC0oYS55LShhLnRvcD8/MCkpfSlgKSxqZShlLFQpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKEUpe3JldHVybiBZZS5wb2x5Z29uKGUseSxFKX0saX12YXIgR1E9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO1V0KCk7V3QoKTtIdCgpO28oelEsIm11bHRpUmVjdCIpfSk7YXN5bmMgZnVuY3Rpb24gVlEodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVFlKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YSxsYWJlbDpzfT1hd2FpdCBwdCh0LGUsaHQoZSkpLGw9TWF0aC5tYXgoYS53aWR0aCsoZS5wYWRkaW5nPz8wKSoyLGU/LndpZHRoPz8wKSx1PU1hdGgubWF4KGEuaGVpZ2h0KyhlLnBhZGRpbmc/PzApKjIsZT8uaGVpZ2h0Pz8wKSxoPXUvNCxmPXUraCxkPS1sLzIscD0tZi8yLG09NSx7Y3NzU3R5bGVzOmd9PWUseT1GbyhkLW0scCtmK20sZCtsLW0scCtmK20saCwuOCksdj15Py5beS5sZW5ndGgtMV0seD1be3g6ZC1tLHk6cCttfSx7eDpkLW0seTpwK2YrbX0sLi4ueSx7eDpkK2wtbSx5OnYueS1tfSx7eDpkK2wseTp2LnktbX0se3g6ZCtsLHk6di55LTIqbX0se3g6ZCtsK20seTp2LnktMiptfSx7eDpkK2wrbSx5OnAtbX0se3g6ZCttLHk6cC1tfSx7eDpkK20seTpwfSx7eDpkLHk6cH0se3g6ZCx5OnArbX1dLGI9W3t4OmQseTpwK219LHt4OmQrbC1tLHk6cCttfSx7eDpkK2wtbSx5OnYueS1tfSx7eDpkK2wseTp2LnktbX0se3g6ZCtsLHk6cH0se3g6ZCx5OnB9XSx3PVhlLnN2ZyhpKSxDPUtlKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYoQy5yb3VnaG5lc3M9MCxDLmZpbGxTdHlsZT0ic29saWQiKTtsZXQgVD1YdCh4KSxFPXcucGF0aChULEMpLEE9WHQoYiksUz13LnBhdGgoQSxDKSxfPWkuaW5zZXJ0KCgpPT5FLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gXy5pbnNlcnQoKCk9PlMpLF8uYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKSxnJiZlLmxvb2shPT0iaGFuZERyYXduIiYmXy5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsZyksbiYmZS5sb29rIT09ImhhbmREcmF3biImJl8uc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLG4pLF8uYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKDAsJHstaC8yfSlgKSxzLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey0oYS53aWR0aC8yKS1tLShhLngtKGEubGVmdD8/MCkpfSwgJHstKGEuaGVpZ2h0LzIpK20taC8yLShhLnktKGEudG9wPz8wKSl9KWApLGplKGUsXyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oSSl7cmV0dXJuIFllLnBvbHlnb24oZSx4LEkpfSxpfXZhciBVUT1OKCgpPT57InVzZSBzdHJpY3QiO0Z0KCk7SHQoKTtXdCgpO1V0KCk7byhWUSwibXVsdGlXYXZlRWRnZWRSZWN0YW5nbGUiKX0pO2FzeW5jIGZ1bmN0aW9uIEhRKHQsZSx7Y29uZmlnOnt0aGVtZVZhcmlhYmxlczpyfX0pe2xldHtsYWJlbFN0eWxlczpuLG5vZGVTdHlsZXM6aX09UWUoZSk7ZS5sYWJlbFN0eWxlPW4sZS51c2VIdG1sTGFiZWxzfHxjcigpLmZsb3djaGFydD8uaHRtbExhYmVscyE9PSExfHwoZS5jZW50ZXJMYWJlbD0hMCk7bGV0e3NoYXBlU3ZnOnMsYmJveDpsfT1hd2FpdCBwdCh0LGUsaHQoZSkpLHU9TWF0aC5tYXgobC53aWR0aCsoZS5wYWRkaW5nPz8wKSoyLGU/LndpZHRoPz8wKSxoPU1hdGgubWF4KGwuaGVpZ2h0KyhlLnBhZGRpbmc/PzApKjIsZT8uaGVpZ2h0Pz8wKSxmPS11LzIsZD0taC8yLHtjc3NTdHlsZXM6cH09ZSxtPVhlLnN2ZyhzKSxnPUtlKGUse2ZpbGw6ci5ub3RlQmtnQ29sb3Isc3Ryb2tlOnIubm90ZUJvcmRlckNvbG9yfSk7ZS5sb29rIT09ImhhbmREcmF3biImJihnLnJvdWdobmVzcz0wLGcuZmlsbFN0eWxlPSJzb2xpZCIpO2xldCB5PW0ucmVjdGFuZ2xlKGYsZCx1LGgsZyksdj1zLmluc2VydCgoKT0+eSwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIHYuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKSxwJiZlLmxvb2shPT0iaGFuZERyYXduIiYmdi5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIscCksaSYmZS5sb29rIT09ImhhbmREcmF3biImJnYuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLGkpLGplKGUsdiksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oeCl7cmV0dXJuIFllLnJlY3QoZSx4KX0sc312YXIgV1E9TigoKT0+eyJ1c2Ugc3RyaWN0IjtXdCgpO0h0KCk7VXQoKTtGdCgpO2ppKCk7byhIUSwibm90ZSIpfSk7YXN5bmMgZnVuY3Rpb24gcVEodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVFlKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YX09YXdhaXQgcHQodCxlLGh0KGUpKSxzPWEud2lkdGgrZS5wYWRkaW5nLGw9YS5oZWlnaHQrZS5wYWRkaW5nLHU9cytsLGg9W3t4OnUvMix5OjB9LHt4OnUseTotdS8yfSx7eDp1LzIseTotdX0se3g6MCx5Oi11LzJ9XSxmLHtjc3NTdHlsZXM6ZH09ZTtpZihlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0IHA9WGUuc3ZnKGkpLG09S2UoZSx7fSksZz1nX2UoMCwwLHUpLHk9cC5wYXRoKGcsbSk7Zj1pLmluc2VydCgoKT0+eSwiOmZpcnN0LWNoaWxkIikuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LXUvMn0sICR7dS8yfSlgKSxkJiZmLmF0dHIoInN0eWxlIixkKX1lbHNlIGY9TGEoaSx1LHUsaCk7cmV0dXJuIG4mJmYuYXR0cigic3R5bGUiLG4pLGplKGUsZiksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24ocCl7cmV0dXJuIFkuZGVidWcoYEFQQTEyIEludGVyc2VjdCBjYWxsZWQgU1BMSVQKcG9pbnQ6YCxwLGAKbm9kZToKYCxlLGAKcmVzOmAsWWUucG9seWdvbihlLGgscCkpLFllLnBvbHlnb24oZSxoLHApfSxpfXZhciBnX2UsWVE9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt2dCgpO0Z0KCk7SHQoKTtVdCgpO1d0KCk7X3UoKTtnX2U9bygodCxlLHIpPT5bYE0ke3Qrci8yfSwke2V9YCxgTCR7dCtyfSwke2Utci8yfWAsYEwke3Qrci8yfSwke2Utcn1gLGBMJHt0fSwke2Utci8yfWAsIloiXS5qb2luKCIgIiksImNyZWF0ZURlY2lzaW9uQm94UGF0aEQiKTtvKHFRLCJxdWVzdGlvbiIpfSk7YXN5bmMgZnVuY3Rpb24gWFEodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVFlKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YSxsYWJlbDpzfT1hd2FpdCBwdCh0LGUsaHQoZSkpLGw9TWF0aC5tYXgoYS53aWR0aCsoZS5wYWRkaW5nPz8wKSxlPy53aWR0aD8/MCksdT1NYXRoLm1heChhLmhlaWdodCsoZS5wYWRkaW5nPz8wKSxlPy5oZWlnaHQ/PzApLGg9LWwvMixmPS11LzIsZD1mLzIscD1be3g6aCtkLHk6Zn0se3g6aCx5OjB9LHt4OmgrZCx5Oi1mfSx7eDotaCx5Oi1mfSx7eDotaCx5OmZ9XSx7Y3NzU3R5bGVzOm19PWUsZz1YZS5zdmcoaSkseT1LZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKHkucm91Z2huZXNzPTAseS5maWxsU3R5bGU9InNvbGlkIik7bGV0IHY9WHQocCkseD1nLnBhdGgodix5KSxiPWkuaW5zZXJ0KCgpPT54LCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gYi5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLG0mJmUubG9vayE9PSJoYW5kRHJhd24iJiZiLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixtKSxuJiZlLmxvb2shPT0iaGFuZERyYXduIiYmYi5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsbiksYi5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstZC8yfSwwKWApLHMuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LWQvMi1hLndpZHRoLzItKGEueC0oYS5sZWZ0Pz8wKSl9LCAkey0oYS5oZWlnaHQvMiktKGEueS0oYS50b3A/PzApKX0pYCksamUoZSxiKSxlLmludGVyc2VjdD1mdW5jdGlvbih3KXtyZXR1cm4gWWUucG9seWdvbihlLHAsdyl9LGl9dmFyIGpRPU4oKCk9PnsidXNlIHN0cmljdCI7RnQoKTtIdCgpO1V0KCk7V3QoKTtvKFhRLCJyZWN0X2xlZnRfaW52X2Fycm93Iil9KTtmdW5jdGlvbiB5X2UodCxlKXtlJiZ0LmF0dHIoInN0eWxlIixlKX1hc3luYyBmdW5jdGlvbiB2X2UodCl7bGV0IGU9R2UoZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImZvcmVpZ25PYmplY3QiKSkscj1lLmFwcGVuZCgieGh0bWw6ZGl2Iiksbj10LmxhYmVsO3QubGFiZWwmJnBpKHQubGFiZWwpJiYobj1hd2FpdCBtaCh0LmxhYmVsLnJlcGxhY2UoWmUubGluZUJyZWFrUmVnZXgsYApgKSxtZSgpKSk7bGV0IGk9dC5pc05vZGU/Im5vZGVMYWJlbCI6ImVkZ2VMYWJlbCI7cmV0dXJuIHIuaHRtbCgnPHNwYW4gY2xhc3M9IicraSsnIiAnKyh0LmxhYmVsU3R5bGU/J3N0eWxlPSInK3QubGFiZWxTdHlsZSsnIic6IiIpKyI+IituKyI8L3NwYW4+IikseV9lKHIsdC5sYWJlbFN0eWxlKSxyLnN0eWxlKCJkaXNwbGF5IiwiaW5saW5lLWJsb2NrIiksci5zdHlsZSgicGFkZGluZy1yaWdodCIsIjFweCIpLHIuc3R5bGUoIndoaXRlLXNwYWNlIiwibm93cmFwIiksci5hdHRyKCJ4bWxucyIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiKSxlLm5vZGUoKX12YXIgeF9lLGdjLEd3PU4oKCk9PnsidXNlIHN0cmljdCI7ZHIoKTt2dCgpO3p0KCk7Z3IoKTtpcigpO28oeV9lLCJhcHBseVN0eWxlIik7byh2X2UsImFkZEh0bWxMYWJlbCIpO3hfZT1vKGFzeW5jKHQsZSxyLG4pPT57bGV0IGk9dHx8IiI7aWYodHlwZW9mIGk9PSJvYmplY3QiJiYoaT1pWzBdKSxmcihtZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7aT1pLnJlcGxhY2UoL1xcbnxcbi9nLCI8YnIgLz4iKSxZLmluZm8oInZlcnRleFRleHQiK2kpO2xldCBhPXtpc05vZGU6bixsYWJlbDpuYShpKS5yZXBsYWNlKC9mYVtibHJzXT86ZmEtW1x3LV0rL2csbD0+YDxpIGNsYXNzPScke2wucmVwbGFjZSgiOiIsIiAiKX0nPjwvaT5gKSxsYWJlbFN0eWxlOmUmJmUucmVwbGFjZSgiZmlsbDoiLCJjb2xvcjoiKX07cmV0dXJuIGF3YWl0IHZfZShhKX1lbHNle2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iik7YS5zZXRBdHRyaWJ1dGUoInN0eWxlIixlLnJlcGxhY2UoImNvbG9yOiIsImZpbGw6IikpO2xldCBzPVtdO3R5cGVvZiBpPT0ic3RyaW5nIj9zPWkuc3BsaXQoL1xcbnxcbnw8YnJccypcLz8+L2dpKTpBcnJheS5pc0FycmF5KGkpP3M9aTpzPVtdO2ZvcihsZXQgbCBvZiBzKXtsZXQgdT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidHNwYW4iKTt1LnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLCJ4bWw6c3BhY2UiLCJwcmVzZXJ2ZSIpLHUuc2V0QXR0cmlidXRlKCJkeSIsIjFlbSIpLHUuc2V0QXR0cmlidXRlKCJ4IiwiMCIpLHI/dS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwidGl0bGUtcm93Iik6dS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwicm93IiksdS50ZXh0Q29udGVudD1sLnRyaW0oKSxhLmFwcGVuZENoaWxkKHUpfXJldHVybiBhfX0sImNyZWF0ZUxhYmVsIiksZ2M9eF9lfSk7YXN5bmMgZnVuY3Rpb24gS1EodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVFlKGUpO2UubGFiZWxTdHlsZT1yO2xldCBpO2UuY3NzQ2xhc3Nlcz9pPSJub2RlICIrZS5jc3NDbGFzc2VzOmk9Im5vZGUgZGVmYXVsdCI7bGV0IGE9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsaSkuYXR0cigiaWQiLGUuZG9tSWR8fGUuaWQpLHM9YS5pbnNlcnQoImciKSxsPWEuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLmF0dHIoInN0eWxlIixuKSx1PWUuZGVzY3JpcHRpb24saD1lLmxhYmVsLGY9bC5ub2RlKCkuYXBwZW5kQ2hpbGQoYXdhaXQgZ2MoaCxlLmxhYmVsU3R5bGUsITAsITApKSxkPXt3aWR0aDowLGhlaWdodDowfTtpZihmcihtZSgpPy5mbG93Y2hhcnQ/Lmh0bWxMYWJlbHMpKXtsZXQgUz1mLmNoaWxkcmVuWzBdLF89R2UoZik7ZD1TLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLF8uYXR0cigid2lkdGgiLGQud2lkdGgpLF8uYXR0cigiaGVpZ2h0IixkLmhlaWdodCl9WS5pbmZvKCJUZXh0IDIiLHUpO2xldCBwPXV8fFtdLG09Zi5nZXRCQm94KCksZz1sLm5vZGUoKS5hcHBlbmRDaGlsZChhd2FpdCBnYyhwLmpvaW4/cC5qb2luKCI8YnIvPiIpOnAsZS5sYWJlbFN0eWxlLCEwLCEwKSkseT1nLmNoaWxkcmVuWzBdLHY9R2UoZyk7ZD15LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHYuYXR0cigid2lkdGgiLGQud2lkdGgpLHYuYXR0cigiaGVpZ2h0IixkLmhlaWdodCk7bGV0IHg9KGUucGFkZGluZ3x8MCkvMjtHZShnKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrKGQud2lkdGg+bS53aWR0aD8wOihtLndpZHRoLWQud2lkdGgpLzIpKyIsICIrKG0uaGVpZ2h0K3grNSkrIikiKSxHZShmKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrKGQud2lkdGg8bS53aWR0aD8wOi0obS53aWR0aC1kLndpZHRoKS8yKSsiLCAwKSIpLGQ9bC5ub2RlKCkuZ2V0QkJveCgpLGwuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWQud2lkdGgvMisiLCAiKygtZC5oZWlnaHQvMi14KzMpKyIpIik7bGV0IGI9ZC53aWR0aCsoZS5wYWRkaW5nfHwwKSx3PWQuaGVpZ2h0KyhlLnBhZGRpbmd8fDApLEM9LWQud2lkdGgvMi14LFQ9LWQuaGVpZ2h0LzIteCxFLEE7aWYoZS5sb29rPT09ImhhbmREcmF3biIpe2xldCBTPVhlLnN2ZyhhKSxfPUtlKGUse30pLEk9Uy5wYXRoKE5hKEMsVCxiLHcsZS5yeHx8MCksXyksRD1TLmxpbmUoLWQud2lkdGgvMi14LC1kLmhlaWdodC8yLXgrbS5oZWlnaHQreCxkLndpZHRoLzIreCwtZC5oZWlnaHQvMi14K20uaGVpZ2h0K3gsXyk7QT1hLmluc2VydCgoKT0+KFkuZGVidWcoIlJvdWdoIG5vZGUgaW5zZXJ0IENYQyIsSSksRCksIjpmaXJzdC1jaGlsZCIpLEU9YS5pbnNlcnQoKCk9PihZLmRlYnVnKCJSb3VnaCBub2RlIGluc2VydCBDWEMiLEkpLEkpLCI6Zmlyc3QtY2hpbGQiKX1lbHNlIEU9cy5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxBPXMuaW5zZXJ0KCJsaW5lIiksRS5hdHRyKCJjbGFzcyIsIm91dGVyIHRpdGxlLXN0YXRlIikuYXR0cigic3R5bGUiLG4pLmF0dHIoIngiLC1kLndpZHRoLzIteCkuYXR0cigieSIsLWQuaGVpZ2h0LzIteCkuYXR0cigid2lkdGgiLGQud2lkdGgrKGUucGFkZGluZ3x8MCkpLmF0dHIoImhlaWdodCIsZC5oZWlnaHQrKGUucGFkZGluZ3x8MCkpLEEuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDEiLC1kLndpZHRoLzIteCkuYXR0cigieDIiLGQud2lkdGgvMit4KS5hdHRyKCJ5MSIsLWQuaGVpZ2h0LzIteCttLmhlaWdodCt4KS5hdHRyKCJ5MiIsLWQuaGVpZ2h0LzIteCttLmhlaWdodCt4KTtyZXR1cm4gamUoZSxFKSxlLmludGVyc2VjdD1mdW5jdGlvbihTKXtyZXR1cm4gWWUucmVjdChlLFMpfSxhfXZhciBRUT1OKCgpPT57InVzZSBzdHJpY3QiO2RyKCk7Z3IoKTtGdCgpO0d3KCk7SHQoKTtVdCgpO1d0KCk7enQoKTtxaCgpO3Z0KCk7byhLUSwicmVjdFdpdGhUaXRsZSIpfSk7YXN5bmMgZnVuY3Rpb24gWlEodCxlKXtsZXQgcj17cng6NSxyeTo1LGNsYXNzZXM6IiIsbGFiZWxQYWRkaW5nWDooZT8ucGFkZGluZ3x8MCkqMSxsYWJlbFBhZGRpbmdZOihlPy5wYWRkaW5nfHwwKSoxfTtyZXR1cm4gRHUodCxlLHIpfXZhciBKUT1OKCgpPT57InVzZSBzdHJpY3QiO21tKCk7byhaUSwicm91bmRlZFJlY3QiKX0pO2FzeW5jIGZ1bmN0aW9uIGVaKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1RZShlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmEsbGFiZWw6c309YXdhaXQgcHQodCxlLGh0KGUpKSxsPWU/LnBhZGRpbmc/PzAsdT1NYXRoLm1heChhLndpZHRoKyhlLnBhZGRpbmc/PzApKjIsZT8ud2lkdGg/PzApLGg9TWF0aC5tYXgoYS5oZWlnaHQrKGUucGFkZGluZz8/MCkqMixlPy5oZWlnaHQ/PzApLGY9LWEud2lkdGgvMi1sLGQ9LWEuaGVpZ2h0LzItbCx7Y3NzU3R5bGVzOnB9PWUsbT1YZS5zdmcoaSksZz1LZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKGcucm91Z2huZXNzPTAsZy5maWxsU3R5bGU9InNvbGlkIik7bGV0IHk9W3t4OmYseTpkfSx7eDpmK3UrOCx5OmR9LHt4OmYrdSs4LHk6ZCtofSx7eDpmLTgseTpkK2h9LHt4OmYtOCx5OmR9LHt4OmYseTpkfSx7eDpmLHk6ZCtofV0sdj1tLnBvbHlnb24oeS5tYXAoYj0+W2IueCxiLnldKSxnKSx4PWkuaW5zZXJ0KCgpPT52LCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4geC5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInN0eWxlIiwkbihwKSksbiYmZS5sb29rIT09ImhhbmREcmF3biImJnguc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLG4pLHAmJmUubG9vayE9PSJoYW5kRHJhd24iJiZ4LnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixuKSxzLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey11LzIrNCsoZS5wYWRkaW5nPz8wKS0oYS54LShhLmxlZnQ/PzApKX0sJHstaC8yKyhlLnBhZGRpbmc/PzApLShhLnktKGEudG9wPz8wKSl9KWApLGplKGUseCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oYil7cmV0dXJuIFllLnJlY3QoZSxiKX0saX12YXIgdFo9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO0h0KCk7VXQoKTtXdCgpO2lyKCk7byhlWiwic2hhZGVkUHJvY2VzcyIpfSk7YXN5bmMgZnVuY3Rpb24gcloodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVFlKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YSxsYWJlbDpzfT1hd2FpdCBwdCh0LGUsaHQoZSkpLGw9TWF0aC5tYXgoYS53aWR0aCsoZS5wYWRkaW5nPz8wKSoyLGU/LndpZHRoPz8wKSx1PU1hdGgubWF4KGEuaGVpZ2h0KyhlLnBhZGRpbmc/PzApKjIsZT8uaGVpZ2h0Pz8wKSxoPS1sLzIsZj0tdS8yLHtjc3NTdHlsZXM6ZH09ZSxwPVhlLnN2ZyhpKSxtPUtlKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYobS5yb3VnaG5lc3M9MCxtLmZpbGxTdHlsZT0ic29saWQiKTtsZXQgZz1be3g6aCx5OmZ9LHt4OmgseTpmK3V9LHt4OmgrbCx5OmYrdX0se3g6aCtsLHk6Zi11LzJ9XSx5PVh0KGcpLHY9cC5wYXRoKHksbSkseD1pLmluc2VydCgoKT0+diwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIHguYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKSxkJiZlLmxvb2shPT0iaGFuZERyYXduIiYmeC5zZWxlY3RDaGlsZHJlbigicGF0aCIpLmF0dHIoInN0eWxlIixkKSxuJiZlLmxvb2shPT0iaGFuZERyYXduIiYmeC5zZWxlY3RDaGlsZHJlbigicGF0aCIpLmF0dHIoInN0eWxlIixuKSx4LmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgwLCAke3UvNH0pYCkscy5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstbC8yKyhlLnBhZGRpbmc/PzApLShhLngtKGEubGVmdD8/MCkpfSwgJHstdS80KyhlLnBhZGRpbmc/PzApLShhLnktKGEudG9wPz8wKSl9KWApLGplKGUseCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oYil7cmV0dXJuIFllLnBvbHlnb24oZSxnLGIpfSxpfXZhciBuWj1OKCgpPT57InVzZSBzdHJpY3QiO0Z0KCk7SHQoKTtVdCgpO1d0KCk7byhyWiwic2xvcGVkUmVjdCIpfSk7YXN5bmMgZnVuY3Rpb24gaVoodCxlKXtsZXQgcj17cng6MCxyeTowLGNsYXNzZXM6IiIsbGFiZWxQYWRkaW5nWDooZT8ucGFkZGluZ3x8MCkqMixsYWJlbFBhZGRpbmdZOihlPy5wYWRkaW5nfHwwKSoxfTtyZXR1cm4gRHUodCxlLHIpfXZhciBhWj1OKCgpPT57InVzZSBzdHJpY3QiO21tKCk7byhpWiwic3F1YXJlUmVjdCIpfSk7YXN5bmMgZnVuY3Rpb24gc1oodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVFlKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YX09YXdhaXQgcHQodCxlLGh0KGUpKSxzPWEuaGVpZ2h0K2UucGFkZGluZyxsPWEud2lkdGgrcy80K2UucGFkZGluZyx1LHtjc3NTdHlsZXM6aH09ZTtpZihlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0IGY9WGUuc3ZnKGkpLGQ9S2UoZSx7fSkscD1OYSgtbC8yLC1zLzIsbCxzLHMvMiksbT1mLnBhdGgocCxkKTt1PWkuaW5zZXJ0KCgpPT5tLCI6Zmlyc3QtY2hpbGQiKSx1LmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIikuYXR0cigic3R5bGUiLCRuKGgpKX1lbHNlIHU9aS5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSx1LmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIikuYXR0cigic3R5bGUiLG4pLmF0dHIoInJ4IixzLzIpLmF0dHIoInJ5IixzLzIpLmF0dHIoIngiLC1sLzIpLmF0dHIoInkiLC1zLzIpLmF0dHIoIndpZHRoIixsKS5hdHRyKCJoZWlnaHQiLHMpO3JldHVybiBqZShlLHUpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGYpe3JldHVybiBZZS5yZWN0KGUsZil9LGl9dmFyIG9aPU4oKCk9PnsidXNlIHN0cmljdCI7RnQoKTtIdCgpO1V0KCk7V3QoKTtxaCgpO2lyKCk7byhzWiwic3RhZGl1bSIpfSk7YXN5bmMgZnVuY3Rpb24gbFoodCxlKXtyZXR1cm4gRHUodCxlLHtyeDo1LHJ5OjUsY2xhc3NlczoiZmxvd2NoYXJ0LW5vZGUifSl9dmFyIGNaPU4oKCk9PnsidXNlIHN0cmljdCI7bW0oKTtvKGxaLCJzdGF0ZSIpfSk7ZnVuY3Rpb24gdVoodCxlLHtjb25maWc6e3RoZW1lVmFyaWFibGVzOnJ9fSl7bGV0e2xhYmVsU3R5bGVzOm4sbm9kZVN0eWxlczppfT1RZShlKTtlLmxhYmVsU3R5bGU9bjtsZXR7Y3NzU3R5bGVzOmF9PWUse2xpbmVDb2xvcjpzLHN0YXRlQm9yZGVyOmwsbm9kZUJvcmRlcjp1fT1yLGg9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCIpLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxmPVhlLnN2ZyhoKSxkPUtlKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYoZC5yb3VnaG5lc3M9MCxkLmZpbGxTdHlsZT0ic29saWQiKTtsZXQgcD1mLmNpcmNsZSgwLDAsMTQsey4uLmQsc3Ryb2tlOnMsc3Ryb2tlV2lkdGg6Mn0pLG09bD8/dSxnPWYuY2lyY2xlKDAsMCw1LHsuLi5kLGZpbGw6bSxzdHJva2U6bSxzdHJva2VXaWR0aDoyLGZpbGxTdHlsZToic29saWQifSkseT1oLmluc2VydCgoKT0+cCwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIHkuaW5zZXJ0KCgpPT5nKSxhJiZ5LnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixhKSxpJiZ5LnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixpKSxqZShlLHkpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHYpe3JldHVybiBZZS5jaXJjbGUoZSw3LHYpfSxofXZhciBoWj1OKCgpPT57InVzZSBzdHJpY3QiO1d0KCk7SHQoKTtVdCgpO0Z0KCk7byh1Wiwic3RhdGVFbmQiKX0pO2Z1bmN0aW9uIGZaKHQsZSx7Y29uZmlnOnt0aGVtZVZhcmlhYmxlczpyfX0pe2xldHtsaW5lQ29sb3I6bn09cixpPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJub2RlIGRlZmF1bHQiKS5hdHRyKCJpZCIsZS5kb21JZHx8ZS5pZCksYTtpZihlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0IGw9WGUuc3ZnKGkpLmNpcmNsZSgwLDAsMTQsZ0sobikpO2E9aS5pbnNlcnQoKCk9PmwpLGEuYXR0cigiY2xhc3MiLCJzdGF0ZS1zdGFydCIpLmF0dHIoInIiLDcpLmF0dHIoIndpZHRoIiwxNCkuYXR0cigiaGVpZ2h0IiwxNCl9ZWxzZSBhPWkuaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKSxhLmF0dHIoImNsYXNzIiwic3RhdGUtc3RhcnQiKS5hdHRyKCJyIiw3KS5hdHRyKCJ3aWR0aCIsMTQpLmF0dHIoImhlaWdodCIsMTQpO3JldHVybiBqZShlLGEpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHMpe3JldHVybiBZZS5jaXJjbGUoZSw3LHMpfSxpfXZhciBkWj1OKCgpPT57InVzZSBzdHJpY3QiO1d0KCk7SHQoKTtVdCgpO0Z0KCk7byhmWiwic3RhdGVTdGFydCIpfSk7YXN5bmMgZnVuY3Rpb24gcFoodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVFlKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YX09YXdhaXQgcHQodCxlLGh0KGUpKSxzPShlPy5wYWRkaW5nfHwwKS8yLGw9YS53aWR0aCtlLnBhZGRpbmcsdT1hLmhlaWdodCtlLnBhZGRpbmcsaD0tYS53aWR0aC8yLXMsZj0tYS5oZWlnaHQvMi1zLGQ9W3t4OjAseTowfSx7eDpsLHk6MH0se3g6bCx5Oi11fSx7eDowLHk6LXV9LHt4OjAseTowfSx7eDotOCx5OjB9LHt4OmwrOCx5OjB9LHt4OmwrOCx5Oi11fSx7eDotOCx5Oi11fSx7eDotOCx5OjB9XTtpZihlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0IHA9WGUuc3ZnKGkpLG09S2UoZSx7fSksZz1wLnJlY3RhbmdsZShoLTgsZixsKzE2LHUsbSkseT1wLmxpbmUoaCxmLGgsZit1LG0pLHY9cC5saW5lKGgrbCxmLGgrbCxmK3UsbSk7aS5pbnNlcnQoKCk9PnksIjpmaXJzdC1jaGlsZCIpLGkuaW5zZXJ0KCgpPT52LCI6Zmlyc3QtY2hpbGQiKTtsZXQgeD1pLmluc2VydCgoKT0+ZywiOmZpcnN0LWNoaWxkIikse2Nzc1N0eWxlczpifT1lO3guYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKS5hdHRyKCJzdHlsZSIsJG4oYikpLGplKGUseCl9ZWxzZXtsZXQgcD1MYShpLGwsdSxkKTtuJiZwLmF0dHIoInN0eWxlIixuKSxqZShlLHApfXJldHVybiBlLmludGVyc2VjdD1mdW5jdGlvbihwKXtyZXR1cm4gWWUucG9seWdvbihlLGQscCl9LGl9dmFyIG1aPU4oKCk9PnsidXNlIHN0cmljdCI7RnQoKTtIdCgpO1V0KCk7V3QoKTtfdSgpO2lyKCk7byhwWiwic3Vicm91dGluZSIpfSk7YXN5bmMgZnVuY3Rpb24gZ1oodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVFlKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YX09YXdhaXQgcHQodCxlLGh0KGUpKSxzPU1hdGgubWF4KGEud2lkdGgrKGUucGFkZGluZz8/MCkqMixlPy53aWR0aD8/MCksbD1NYXRoLm1heChhLmhlaWdodCsoZS5wYWRkaW5nPz8wKSoyLGU/LmhlaWdodD8/MCksdT0tcy8yLGg9LWwvMixmPS4yKmwsZD0uMipsLHtjc3NTdHlsZXM6cH09ZSxtPVhlLnN2ZyhpKSxnPUtlKGUse30pLHk9W3t4OnUtZi8yLHk6aH0se3g6dStzK2YvMix5Omh9LHt4OnUrcytmLzIseTpoK2x9LHt4OnUtZi8yLHk6aCtsfV0sdj1be3g6dStzLWYvMix5OmgrbH0se3g6dStzK2YvMix5OmgrbH0se3g6dStzK2YvMix5OmgrbC1kfV07ZS5sb29rIT09ImhhbmREcmF3biImJihnLnJvdWdobmVzcz0wLGcuZmlsbFN0eWxlPSJzb2xpZCIpO2xldCB4PVh0KHkpLGI9bS5wYXRoKHgsZyksdz1YdCh2KSxDPW0ucGF0aCh3LHsuLi5nLGZpbGxTdHlsZToic29saWQifSksVD1pLmluc2VydCgoKT0+QywiOmZpcnN0LWNoaWxkIik7cmV0dXJuIFQuaW5zZXJ0KCgpPT5iLCI6Zmlyc3QtY2hpbGQiKSxULmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIikscCYmZS5sb29rIT09ImhhbmREcmF3biImJlQuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLHApLG4mJmUubG9vayE9PSJoYW5kRHJhd24iJiZULnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixuKSxqZShlLFQpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKEUpe3JldHVybiBZZS5wb2x5Z29uKGUseSxFKX0saX12YXIgeVo9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO1V0KCk7V3QoKTtIdCgpO28oZ1osInRhZ2dlZFJlY3QiKX0pO2FzeW5jIGZ1bmN0aW9uIHZaKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1RZShlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmEsbGFiZWw6c309YXdhaXQgcHQodCxlLGh0KGUpKSxsPU1hdGgubWF4KGEud2lkdGgrKGUucGFkZGluZz8/MCkqMixlPy53aWR0aD8/MCksdT1NYXRoLm1heChhLmhlaWdodCsoZS5wYWRkaW5nPz8wKSoyLGU/LmhlaWdodD8/MCksaD11LzQsZj0uMipsLGQ9LjIqdSxwPXUraCx7Y3NzU3R5bGVzOm19PWUsZz1YZS5zdmcoaSkseT1LZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKHkucm91Z2huZXNzPTAseS5maWxsU3R5bGU9InNvbGlkIik7bGV0IHY9W3t4Oi1sLzItbC8yKi4xLHk6cC8yfSwuLi5GbygtbC8yLWwvMiouMSxwLzIsbC8yK2wvMiouMSxwLzIsaCwuOCkse3g6bC8yK2wvMiouMSx5Oi1wLzJ9LHt4Oi1sLzItbC8yKi4xLHk6LXAvMn1dLHg9LWwvMitsLzIqLjEsYj0tcC8yLWQqLjQsdz1be3g6eCtsLWYseTooYit1KSoxLjR9LHt4OngrbCx5OmIrdS1kfSx7eDp4K2wseTooYit1KSouOX0sLi4uRm8oeCtsLChiK3UpKjEuMyx4K2wtZiwoYit1KSoxLjUsLXUqLjAzLC41KV0sQz1YdCh2KSxUPWcucGF0aChDLHkpLEU9WHQodyksQT1nLnBhdGgoRSx7Li4ueSxmaWxsU3R5bGU6InNvbGlkIn0pLFM9aS5pbnNlcnQoKCk9PkEsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBTLmluc2VydCgoKT0+VCwiOmZpcnN0LWNoaWxkIiksUy5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLG0mJmUubG9vayE9PSJoYW5kRHJhd24iJiZTLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixtKSxuJiZlLmxvb2shPT0iaGFuZERyYXduIiYmUy5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsbiksUy5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoMCwkey1oLzJ9KWApLHMuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LWwvMisoZS5wYWRkaW5nPz8wKS0oYS54LShhLmxlZnQ/PzApKX0sJHstdS8yKyhlLnBhZGRpbmc/PzApLWgvMi0oYS55LShhLnRvcD8/MCkpfSlgKSxqZShlLFMpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKF8pe3JldHVybiBZZS5wb2x5Z29uKGUsdixfKX0saX12YXIgeFo9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO0h0KCk7V3QoKTtVdCgpO28odlosInRhZ2dlZFdhdmVFZGdlZFJlY3RhbmdsZSIpfSk7YXN5bmMgZnVuY3Rpb24gYloodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVFlKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YX09YXdhaXQgcHQodCxlLGh0KGUpKSxzPU1hdGgubWF4KGEud2lkdGgrZS5wYWRkaW5nLGU/LndpZHRofHwwKSxsPU1hdGgubWF4KGEuaGVpZ2h0K2UucGFkZGluZyxlPy5oZWlnaHR8fDApLHU9LXMvMixoPS1sLzIsZj1pLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBmLmF0dHIoImNsYXNzIiwidGV4dCIpLmF0dHIoInN0eWxlIixuKS5hdHRyKCJyeCIsMCkuYXR0cigicnkiLDApLmF0dHIoIngiLHUpLmF0dHIoInkiLGgpLmF0dHIoIndpZHRoIixzKS5hdHRyKCJoZWlnaHQiLGwpLGplKGUsZiksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oZCl7cmV0dXJuIFllLnJlY3QoZSxkKX0saX12YXIgd1o9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO0h0KCk7VXQoKTtvKGJaLCJ0ZXh0Iil9KTthc3luYyBmdW5jdGlvbiBUWih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09UWUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphLGxhYmVsOnMsaGFsZlBhZGRpbmc6bH09YXdhaXQgcHQodCxlLGh0KGUpKSx1PWUubG9vaz09PSJuZW8iP2wqMjpsLGg9YS5oZWlnaHQrdSxmPWgvMixkPWYvKDIuNStoLzUwKSxwPWEud2lkdGgrZCt1LHtjc3NTdHlsZXM6bX09ZSxnO2lmKGUubG9vaz09PSJoYW5kRHJhd24iKXtsZXQgeT1YZS5zdmcoaSksdj13X2UoMCwwLHAsaCxkLGYpLHg9VF9lKDAsMCxwLGgsZCxmKSxiPXkucGF0aCh2LEtlKGUse30pKSx3PXkucGF0aCh4LEtlKGUse2ZpbGw6Im5vbmUifSkpO2c9aS5pbnNlcnQoKCk9PncsIjpmaXJzdC1jaGlsZCIpLGc9aS5pbnNlcnQoKCk9PmIsIjpmaXJzdC1jaGlsZCIpLGcuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKSxtJiZnLmF0dHIoInN0eWxlIixtKX1lbHNle2xldCB5PWJfZSgwLDAscCxoLGQsZik7Zz1pLmluc2VydCgicGF0aCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoImQiLHkpLmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIikuYXR0cigic3R5bGUiLCRuKG0pKS5hdHRyKCJzdHlsZSIsbiksZy5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLG0mJmcuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLG0pLG4mJmcuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLG4pfXJldHVybiBnLmF0dHIoImxhYmVsLW9mZnNldC14IixkKSxnLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1wLzJ9LCAke2gvMn0gKWApLHMuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LShhLndpZHRoLzIpLWQtKGEueC0oYS5sZWZ0Pz8wKSl9LCAkey0oYS5oZWlnaHQvMiktKGEueS0oYS50b3A/PzApKX0pYCksamUoZSxnKSxlLmludGVyc2VjdD1mdW5jdGlvbih5KXtsZXQgdj1ZZS5yZWN0KGUseSkseD12LnktKGUueT8/MCk7aWYoZiE9MCYmKE1hdGguYWJzKHgpPChlLmhlaWdodD8/MCkvMnx8TWF0aC5hYnMoeCk9PShlLmhlaWdodD8/MCkvMiYmTWF0aC5hYnModi54LShlLng/PzApKT4oZS53aWR0aD8/MCkvMi1kKSl7bGV0IGI9ZCpkKigxLXgqeC8oZipmKSk7YiE9MCYmKGI9TWF0aC5zcXJ0KE1hdGguYWJzKGIpKSksYj1kLWIseS54LShlLng/PzApPjAmJihiPS1iKSx2LngrPWJ9cmV0dXJuIHZ9LGl9dmFyIGJfZSx3X2UsVF9lLGtaPU4oKCk9PnsidXNlIHN0cmljdCI7RnQoKTtVdCgpO1d0KCk7SHQoKTtpcigpO2JfZT1vKCh0LGUscixuLGksYSk9PmBNJHt0fSwke2V9CiAgICBhJHtpfSwke2F9IDAsMCwxIDAsJHstbn0KICAgIGwke3J9LDAKICAgIGEke2l9LCR7YX0gMCwwLDEgMCwke259CiAgICBNJHtyfSwkey1ufQogICAgYSR7aX0sJHthfSAwLDAsMCAwLCR7bn0KICAgIGwkey1yfSwwYCwiY3JlYXRlQ3lsaW5kZXJQYXRoRCIpLHdfZT1vKCh0LGUscixuLGksYSk9PltgTSR7dH0sJHtlfWAsYE0ke3Qrcn0sJHtlfWAsYGEke2l9LCR7YX0gMCwwLDAgMCwkey1ufWAsYGwkey1yfSwwYCxgYSR7aX0sJHthfSAwLDAsMCAwLCR7bn1gLGBsJHtyfSwwYF0uam9pbigiICIpLCJjcmVhdGVPdXRlckN5bGluZGVyUGF0aEQiKSxUX2U9bygodCxlLHIsbixpLGEpPT5bYE0ke3Qrci8yfSwkey1uLzJ9YCxgYSR7aX0sJHthfSAwLDAsMCAwLCR7bn1gXS5qb2luKCIgIiksImNyZWF0ZUlubmVyQ3lsaW5kZXJQYXRoRCIpO28oVFosInRpbHRlZEN5bGluZGVyIil9KTthc3luYyBmdW5jdGlvbiBFWih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09UWUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphfT1hd2FpdCBwdCh0LGUsaHQoZSkpLHM9YS53aWR0aCtlLnBhZGRpbmcsbD1hLmhlaWdodCtlLnBhZGRpbmcsdT1be3g6LTMqbC82LHk6MH0se3g6cyszKmwvNix5OjB9LHt4OnMseTotbH0se3g6MCx5Oi1sfV0saCx7Y3NzU3R5bGVzOmZ9PWU7aWYoZS5sb29rPT09ImhhbmREcmF3biIpe2xldCBkPVhlLnN2ZyhpKSxwPUtlKGUse30pLG09WHQodSksZz1kLnBhdGgobSxwKTtoPWkuaW5zZXJ0KCgpPT5nLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstcy8yfSwgJHtsLzJ9KWApLGYmJmguYXR0cigic3R5bGUiLGYpfWVsc2UgaD1MYShpLHMsbCx1KTtyZXR1cm4gbiYmaC5hdHRyKCJzdHlsZSIsbiksZS53aWR0aD1zLGUuaGVpZ2h0PWwsamUoZSxoKSxlLmludGVyc2VjdD1mdW5jdGlvbihkKXtyZXR1cm4gWWUucG9seWdvbihlLHUsZCl9LGl9dmFyIFNaPU4oKCk9PnsidXNlIHN0cmljdCI7RnQoKTtIdCgpO1V0KCk7V3QoKTtfdSgpO28oRVosInRyYXBlem9pZCIpfSk7YXN5bmMgZnVuY3Rpb24gQ1oodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVFlKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YX09YXdhaXQgcHQodCxlLGh0KGUpKSxzPTYwLGw9MjAsdT1NYXRoLm1heChzLGEud2lkdGgrKGUucGFkZGluZz8/MCkqMixlPy53aWR0aD8/MCksaD1NYXRoLm1heChsLGEuaGVpZ2h0KyhlLnBhZGRpbmc/PzApKjIsZT8uaGVpZ2h0Pz8wKSx7Y3NzU3R5bGVzOmZ9PWUsZD1YZS5zdmcoaSkscD1LZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKHAucm91Z2huZXNzPTAscC5maWxsU3R5bGU9InNvbGlkIik7bGV0IG09W3t4Oi11LzIqLjgseTotaC8yfSx7eDp1LzIqLjgseTotaC8yfSx7eDp1LzIseTotaC8yKi42fSx7eDp1LzIseTpoLzJ9LHt4Oi11LzIseTpoLzJ9LHt4Oi11LzIseTotaC8yKi42fV0sZz1YdChtKSx5PWQucGF0aChnLHApLHY9aS5pbnNlcnQoKCk9PnksIjpmaXJzdC1jaGlsZCIpO3JldHVybiB2LmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIiksZiYmZS5sb29rIT09ImhhbmREcmF3biImJnYuc2VsZWN0Q2hpbGRyZW4oInBhdGgiKS5hdHRyKCJzdHlsZSIsZiksbiYmZS5sb29rIT09ImhhbmREcmF3biImJnYuc2VsZWN0Q2hpbGRyZW4oInBhdGgiKS5hdHRyKCJzdHlsZSIsbiksamUoZSx2KSxlLmludGVyc2VjdD1mdW5jdGlvbih4KXtyZXR1cm4gWWUucG9seWdvbihlLG0seCl9LGl9dmFyIEFaPU4oKCk9PnsidXNlIHN0cmljdCI7RnQoKTtIdCgpO1V0KCk7V3QoKTtvKENaLCJ0cmFwZXpvaWRhbFBlbnRhZ29uIil9KTthc3luYyBmdW5jdGlvbiBfWih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09UWUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphLGxhYmVsOnN9PWF3YWl0IHB0KHQsZSxodChlKSksbD1mcihtZSgpLmZsb3djaGFydD8uaHRtbExhYmVscyksdT1hLndpZHRoKyhlLnBhZGRpbmc/PzApLGg9dSthLmhlaWdodCxmPXUrYS5oZWlnaHQsZD1be3g6MCx5OjB9LHt4OmYseTowfSx7eDpmLzIseTotaH1dLHtjc3NTdHlsZXM6cH09ZSxtPVhlLnN2ZyhpKSxnPUtlKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYoZy5yb3VnaG5lc3M9MCxnLmZpbGxTdHlsZT0ic29saWQiKTtsZXQgeT1YdChkKSx2PW0ucGF0aCh5LGcpLHg9aS5pbnNlcnQoKCk9PnYsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1oLzJ9LCAke2gvMn0pYCk7cmV0dXJuIHAmJmUubG9vayE9PSJoYW5kRHJhd24iJiZ4LnNlbGVjdENoaWxkcmVuKCJwYXRoIikuYXR0cigic3R5bGUiLHApLG4mJmUubG9vayE9PSJoYW5kRHJhd24iJiZ4LnNlbGVjdENoaWxkcmVuKCJwYXRoIikuYXR0cigic3R5bGUiLG4pLGUud2lkdGg9dSxlLmhlaWdodD1oLGplKGUseCkscy5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstYS53aWR0aC8yLShhLngtKGEubGVmdD8/MCkpfSwgJHtoLzItKGEuaGVpZ2h0KyhlLnBhZGRpbmc/PzApLyhsPzI6MSktKGEueS0oYS50b3A/PzApKSl9KWApLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGIpe3JldHVybiBZLmluZm8oIlRyaWFuZ2xlIGludGVyc2VjdCIsZSxkLGIpLFllLnBvbHlnb24oZSxkLGIpfSxpfXZhciBEWj1OKCgpPT57InVzZSBzdHJpY3QiO3Z0KCk7RnQoKTtIdCgpO1V0KCk7V3QoKTtGdCgpO2dyKCk7enQoKTtvKF9aLCJ0cmlhbmdsZSIpfSk7YXN5bmMgZnVuY3Rpb24gTFoodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVFlKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YSxsYWJlbDpzfT1hd2FpdCBwdCh0LGUsaHQoZSkpLGw9TWF0aC5tYXgoYS53aWR0aCsoZS5wYWRkaW5nPz8wKSoyLGU/LndpZHRoPz8wKSx1PU1hdGgubWF4KGEuaGVpZ2h0KyhlLnBhZGRpbmc/PzApKjIsZT8uaGVpZ2h0Pz8wKSxoPXUvOCxmPXUraCx7Y3NzU3R5bGVzOmR9PWUsbT03MC1sLGc9bT4wP20vMjowLHk9WGUuc3ZnKGkpLHY9S2UoZSx7fSk7ZS5sb29rIT09ImhhbmREcmF3biImJih2LnJvdWdobmVzcz0wLHYuZmlsbFN0eWxlPSJzb2xpZCIpO2xldCB4PVt7eDotbC8yLWcseTpmLzJ9LC4uLkZvKC1sLzItZyxmLzIsbC8yK2csZi8yLGgsLjgpLHt4OmwvMitnLHk6LWYvMn0se3g6LWwvMi1nLHk6LWYvMn1dLGI9WHQoeCksdz15LnBhdGgoYix2KSxDPWkuaW5zZXJ0KCgpPT53LCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gQy5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLGQmJmUubG9vayE9PSJoYW5kRHJhd24iJiZDLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixkKSxuJiZlLmxvb2shPT0iaGFuZERyYXduIiYmQy5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsbiksQy5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoMCwkey1oLzJ9KWApLHMuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LWwvMisoZS5wYWRkaW5nPz8wKS0oYS54LShhLmxlZnQ/PzApKX0sJHstdS8yKyhlLnBhZGRpbmc/PzApLWgtKGEueS0oYS50b3A/PzApKX0pYCksamUoZSxDKSxlLmludGVyc2VjdD1mdW5jdGlvbihUKXtyZXR1cm4gWWUucG9seWdvbihlLHgsVCl9LGl9dmFyIFJaPU4oKCk9PnsidXNlIHN0cmljdCI7RnQoKTtIdCgpO1d0KCk7VXQoKTtvKExaLCJ3YXZlRWRnZWRSZWN0YW5nbGUiKX0pO2FzeW5jIGZ1bmN0aW9uIE5aKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1RZShlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmF9PWF3YWl0IHB0KHQsZSxodChlKSkscz0xMDAsbD01MCx1PU1hdGgubWF4KGEud2lkdGgrKGUucGFkZGluZz8/MCkqMixlPy53aWR0aD8/MCksaD1NYXRoLm1heChhLmhlaWdodCsoZS5wYWRkaW5nPz8wKSoyLGU/LmhlaWdodD8/MCksZj11L2gsZD11LHA9aDtkPnAqZj9wPWQvZjpkPXAqZixkPU1hdGgubWF4KGQscykscD1NYXRoLm1heChwLGwpO2xldCBtPU1hdGgubWluKHAqLjIscC80KSxnPXArbSoyLHtjc3NTdHlsZXM6eX09ZSx2PVhlLnN2ZyhpKSx4PUtlKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYoeC5yb3VnaG5lc3M9MCx4LmZpbGxTdHlsZT0ic29saWQiKTtsZXQgYj1be3g6LWQvMix5OmcvMn0sLi4uRm8oLWQvMixnLzIsZC8yLGcvMixtLDEpLHt4OmQvMix5Oi1nLzJ9LC4uLkZvKGQvMiwtZy8yLC1kLzIsLWcvMixtLC0xKV0sdz1YdChiKSxDPXYucGF0aCh3LHgpLFQ9aS5pbnNlcnQoKCk9PkMsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBULmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIikseSYmZS5sb29rIT09ImhhbmREcmF3biImJlQuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLHkpLG4mJmUubG9vayE9PSJoYW5kRHJhd24iJiZULnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixuKSxqZShlLFQpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKEUpe3JldHVybiBZZS5wb2x5Z29uKGUsYixFKX0saX12YXIgTVo9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO0h0KCk7VXQoKTtXdCgpO28oTlosIndhdmVSZWN0YW5nbGUiKX0pO2FzeW5jIGZ1bmN0aW9uIElaKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1RZShlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmEsbGFiZWw6c309YXdhaXQgcHQodCxlLGh0KGUpKSxsPU1hdGgubWF4KGEud2lkdGgrKGUucGFkZGluZz8/MCkqMixlPy53aWR0aD8/MCksdT1NYXRoLm1heChhLmhlaWdodCsoZS5wYWRkaW5nPz8wKSoyLGU/LmhlaWdodD8/MCksaD01LGY9LWwvMixkPS11LzIse2Nzc1N0eWxlczpwfT1lLG09WGUuc3ZnKGkpLGc9S2UoZSx7fSkseT1be3g6Zi1oLHk6ZC1ofSx7eDpmLWgseTpkK3V9LHt4OmYrbCx5OmQrdX0se3g6ZitsLHk6ZC1ofV0sdj1gTSR7Zi1ofSwke2QtaH0gTCR7ZitsfSwke2QtaH0gTCR7ZitsfSwke2QrdX0gTCR7Zi1ofSwke2QrdX0gTCR7Zi1ofSwke2QtaH0KICAgICAgICAgICAgICAgIE0ke2YtaH0sJHtkfSBMJHtmK2x9LCR7ZH0KICAgICAgICAgICAgICAgIE0ke2Z9LCR7ZC1ofSBMJHtmfSwke2QrdX1gO2UubG9vayE9PSJoYW5kRHJhd24iJiYoZy5yb3VnaG5lc3M9MCxnLmZpbGxTdHlsZT0ic29saWQiKTtsZXQgeD1tLnBhdGgodixnKSxiPWkuaW5zZXJ0KCgpPT54LCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gYi5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtoLzJ9LCAke2gvMn0pYCksYi5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLHAmJmUubG9vayE9PSJoYW5kRHJhd24iJiZiLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixwKSxuJiZlLmxvb2shPT0iaGFuZERyYXduIiYmYi5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsbikscy5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstKGEud2lkdGgvMikraC8yLShhLngtKGEubGVmdD8/MCkpfSwgJHstKGEuaGVpZ2h0LzIpK2gvMi0oYS55LShhLnRvcD8/MCkpfSlgKSxqZShlLGIpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHcpe3JldHVybiBZZS5wb2x5Z29uKGUseSx3KX0saX12YXIgT1o9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO1V0KCk7V3QoKTtIdCgpO28oSVosIndpbmRvd1BhbmUiKX0pO2FzeW5jIGZ1bmN0aW9uIEtEKHQsZSl7bGV0IHI9ZTtpZihyLmFsaWFzJiYoZS5sYWJlbD1yLmFsaWFzKSxlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0e3RoZW1lVmFyaWFibGVzOlB9PWNyKCkse2JhY2tncm91bmQ6en09UCwkPXsuLi5lLGlkOmUuaWQrIi1iYWNrZ3JvdW5kIixsb29rOiJkZWZhdWx0Iixjc3NTdHlsZXM6WyJzdHJva2U6IG5vbmUiLGBmaWxsOiAke3p9YF19O2F3YWl0IEtEKHQsJCl9bGV0IG49Y3IoKTtlLnVzZUh0bWxMYWJlbHM9bi5odG1sTGFiZWxzO2xldCBpPW4uZXI/LmRpYWdyYW1QYWRkaW5nPz8xMCxhPW4uZXI/LmVudGl0eVBhZGRpbmc/PzYse2Nzc1N0eWxlczpzfT1lLHtsYWJlbFN0eWxlczpsfT1RZShlKTtpZihyLmF0dHJpYnV0ZXMubGVuZ3RoPT09MCYmZS5sYWJlbCl7bGV0IFA9e3J4OjAscnk6MCxsYWJlbFBhZGRpbmdYOmksbGFiZWxQYWRkaW5nWTppKjEuNSxjbGFzc2VzOiIifTtyYShlLmxhYmVsLG4pK1AubGFiZWxQYWRkaW5nWCoyPG4uZXIubWluRW50aXR5V2lkdGgmJihlLndpZHRoPW4uZXIubWluRW50aXR5V2lkdGgpO2xldCB6PWF3YWl0IER1KHQsZSxQKTtpZighZnIobi5odG1sTGFiZWxzKSl7bGV0ICQ9ei5zZWxlY3QoInRleHQiKSxIPSQubm9kZSgpPy5nZXRCQm94KCk7JC5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstSC53aWR0aC8yfSwgMClgKX1yZXR1cm4gen1uLmh0bWxMYWJlbHN8fChpKj0xLjI1LGEqPTEuMjUpO2xldCB1PWh0KGUpO3V8fCh1PSJub2RlIGRlZmF1bHQiKTtsZXQgaD10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIix1KS5hdHRyKCJpZCIsZS5kb21JZHx8ZS5pZCksZj1hd2FpdCBiMihoLGUubGFiZWw/PyIiLG4sMCwwLFsibmFtZSJdLGwpO2YuaGVpZ2h0Kz1hO2xldCBkPTAscD1bXSxtPTAsZz0wLHk9MCx2PTAseD0hMCxiPSEwO2ZvcihsZXQgUCBvZiByLmF0dHJpYnV0ZXMpe2xldCB6PWF3YWl0IGIyKGgsUC50eXBlLG4sMCxkLFsiYXR0cmlidXRlLXR5cGUiXSxsKTttPU1hdGgubWF4KG0sei53aWR0aCtpKTtsZXQgJD1hd2FpdCBiMihoLFAubmFtZSxuLDAsZCxbImF0dHJpYnV0ZS1uYW1lIl0sbCk7Zz1NYXRoLm1heChnLCQud2lkdGgraSk7bGV0IEg9YXdhaXQgYjIoaCxQLmtleXMuam9pbigpLG4sMCxkLFsiYXR0cmlidXRlLWtleXMiXSxsKTt5PU1hdGgubWF4KHksSC53aWR0aCtpKTtsZXQgUT1hd2FpdCBiMihoLFAuY29tbWVudCxuLDAsZCxbImF0dHJpYnV0ZS1jb21tZW50Il0sbCk7dj1NYXRoLm1heCh2LFEud2lkdGgraSksZCs9TWF0aC5tYXgoei5oZWlnaHQsJC5oZWlnaHQsSC5oZWlnaHQsUS5oZWlnaHQpK2EscC5wdXNoKGQpfXAucG9wKCk7bGV0IHc9NDt5PD1pJiYoeD0hMSx5PTAsdy0tKSx2PD1pJiYoYj0hMSx2PTAsdy0tKTtsZXQgQz1oLm5vZGUoKS5nZXRCQm94KCk7aWYoZi53aWR0aCtpKjItKG0rZyt5K3YpPjApe2xldCBQPWYud2lkdGgraSoyLShtK2creSt2KTttKz1QL3csZys9UC93LHk+MCYmKHkrPVAvdyksdj4wJiYodis9UC93KX1sZXQgVD1tK2creSt2LEU9WGUuc3ZnKGgpLEE9S2UoZSx7fSk7ZS5sb29rIT09ImhhbmREcmF3biImJihBLnJvdWdobmVzcz0wLEEuZmlsbFN0eWxlPSJzb2xpZCIpO2xldCBTPU1hdGgubWF4KEMud2lkdGgraSoyLGU/LndpZHRofHwwLFQpLF89TWF0aC5tYXgoQy5oZWlnaHQrKHBbMF18fGQpK2EsZT8uaGVpZ2h0fHwwKSxJPS1TLzIsRD0tXy8yO2guc2VsZWN0QWxsKCJnOm5vdCg6Zmlyc3QtY2hpbGQpIikuZWFjaCgoUCx6LCQpPT57bGV0IEg9R2UoJFt6XSksUT1ILmF0dHIoInRyYW5zZm9ybSIpLGo9MCxpZT0wO2lmKFEpe2xldCBsZT1SZWdFeHAoL3RyYW5zbGF0ZVwoKFteLF0rKSwoW14pXSspXCkvKS5leGVjKFEpO2xlJiYoaj1wYXJzZUZsb2F0KGxlWzFdKSxpZT1wYXJzZUZsb2F0KGxlWzJdKSxILmF0dHIoImNsYXNzIikuaW5jbHVkZXMoImF0dHJpYnV0ZS1uYW1lIik/ais9bTpILmF0dHIoImNsYXNzIikuaW5jbHVkZXMoImF0dHJpYnV0ZS1rZXlzIik/ais9bStnOkguYXR0cigiY2xhc3MiKS5pbmNsdWRlcygiYXR0cmlidXRlLWNvbW1lbnQiKSYmKGorPW0rZyt5KSl9SC5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtJK2kvMitqfSwgJHtpZStEK2YuaGVpZ2h0K2EvMn0pYCl9KSxoLnNlbGVjdCgiLm5hbWUiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistZi53aWR0aC8yKyIsICIrKEQrYS8yKSsiKSIpO2xldCBrPUUucmVjdGFuZ2xlKEksRCxTLF8sQSksTD1oLmluc2VydCgoKT0+aywiOmZpcnN0LWNoaWxkIikuYXR0cigic3R5bGUiLHMuam9pbigiIikpLHt0aGVtZVZhcmlhYmxlczpSfT1jcigpLHtyb3dFdmVuOk8scm93T2RkOk0sbm9kZUJvcmRlcjpCfT1SO3AucHVzaCgwKTtmb3IobGV0W1Asel1vZiBwLmVudHJpZXMoKSl7aWYoUD09PTAmJnAubGVuZ3RoPjEpY29udGludWU7bGV0ICQ9UCUyPT09MCYmeiE9PTAsSD1FLnJlY3RhbmdsZShJLGYuaGVpZ2h0K0QreixTLGYuaGVpZ2h0LHsuLi5BLGZpbGw6JD9POk0sc3Ryb2tlOkJ9KTtoLmluc2VydCgoKT0+SCwiZy5sYWJlbCIpLmF0dHIoInN0eWxlIixzLmpvaW4oIiIpKS5hdHRyKCJjbGFzcyIsYHJvdy1yZWN0LSR7UCUyPT09MD8iZXZlbiI6Im9kZCJ9YCl9bGV0IEY9RS5saW5lKEksZi5oZWlnaHQrRCxTK0ksZi5oZWlnaHQrRCxBKTtoLmluc2VydCgoKT0+RikuYXR0cigiY2xhc3MiLCJkaXZpZGVyIiksRj1FLmxpbmUobStJLGYuaGVpZ2h0K0QsbStJLF8rRCxBKSxoLmluc2VydCgoKT0+RikuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikseCYmKEY9RS5saW5lKG0rZytJLGYuaGVpZ2h0K0QsbStnK0ksXytELEEpLGguaW5zZXJ0KCgpPT5GKS5hdHRyKCJjbGFzcyIsImRpdmlkZXIiKSksYiYmKEY9RS5saW5lKG0rZyt5K0ksZi5oZWlnaHQrRCxtK2creStJLF8rRCxBKSxoLmluc2VydCgoKT0+RikuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikpO2ZvcihsZXQgUCBvZiBwKUY9RS5saW5lKEksZi5oZWlnaHQrRCtQLFMrSSxmLmhlaWdodCtEK1AsQSksaC5pbnNlcnQoKCk9PkYpLmF0dHIoImNsYXNzIiwiZGl2aWRlciIpO3JldHVybiBqZShlLEwpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKFApe3JldHVybiBZZS5yZWN0KGUsUCl9LGh9YXN5bmMgZnVuY3Rpb24gYjIodCxlLHIsbj0wLGk9MCxhPVtdLHM9IiIpe2xldCBsPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLGBsYWJlbCAke2Euam9pbigiICIpfWApLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke259LCAke2l9KWApLmF0dHIoInN0eWxlIixzKTtlIT09ZWMoZSkmJihlPWVjKGUpLGU9ZS5yZXBsYWNlQWxsKCI8IiwiJmx0OyIpLnJlcGxhY2VBbGwoIj4iLCImZ3Q7IikpO2xldCB1PWwubm9kZSgpLmFwcGVuZENoaWxkKGF3YWl0IEhuKGwsZSx7d2lkdGg6cmEoZSxyKSsxMDAsc3R5bGU6cyx1c2VIdG1sTGFiZWxzOnIuaHRtbExhYmVsc30scikpO2lmKGUuaW5jbHVkZXMoIiZsdDsiKXx8ZS5pbmNsdWRlcygiJmd0OyIpKXtsZXQgZj11LmNoaWxkcmVuWzBdO2ZvcihmLnRleHRDb250ZW50PWYudGV4dENvbnRlbnQucmVwbGFjZUFsbCgiJmx0OyIsIjwiKS5yZXBsYWNlQWxsKCImZ3Q7IiwiPiIpO2YuY2hpbGROb2Rlc1swXTspZj1mLmNoaWxkTm9kZXNbMF0sZi50ZXh0Q29udGVudD1mLnRleHRDb250ZW50LnJlcGxhY2VBbGwoIiZsdDsiLCI8IikucmVwbGFjZUFsbCgiJmd0OyIsIj4iKX1sZXQgaD11LmdldEJCb3goKTtpZihmcihyLmh0bWxMYWJlbHMpKXtsZXQgZj11LmNoaWxkcmVuWzBdO2Yuc3R5bGUudGV4dEFsaWduPSJzdGFydCI7bGV0IGQ9R2UodSk7aD1mLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGQuYXR0cigid2lkdGgiLGgud2lkdGgpLGQuYXR0cigiaGVpZ2h0IixoLmhlaWdodCl9cmV0dXJuIGh9dmFyIFBaPU4oKCk9PnsidXNlIHN0cmljdCI7RnQoKTtIdCgpO1V0KCk7V3QoKTttbSgpO2ppKCk7dG8oKTtncigpO2RyKCk7aXIoKTtvKEtELCJlckJveCIpO28oYjIsImFkZFRleHQiKX0pO2FzeW5jIGZ1bmN0aW9uIEJaKHQsZSxyLG4saT1yLmNsYXNzLnBhZGRpbmc/PzEyKXtsZXQgYT1uPzA6MyxzPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLGh0KGUpKS5hdHRyKCJpZCIsZS5kb21JZHx8ZS5pZCksbD1udWxsLHU9bnVsbCxoPW51bGwsZj1udWxsLGQ9MCxwPTAsbT0wO2lmKGw9cy5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImFubm90YXRpb24tZ3JvdXAgdGV4dCIpLGUuYW5ub3RhdGlvbnMubGVuZ3RoPjApe2xldCBiPWUuYW5ub3RhdGlvbnNbMF07YXdhaXQgVncobCx7dGV4dDpgXHhBQiR7Yn1ceEJCYH0sMCksZD1sLm5vZGUoKS5nZXRCQm94KCkuaGVpZ2h0fXU9cy5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsLWdyb3VwIHRleHQiKSxhd2FpdCBWdyh1LGUsMCxbImZvbnQtd2VpZ2h0OiBib2xkZXIiXSk7bGV0IGc9dS5ub2RlKCkuZ2V0QkJveCgpO3A9Zy5oZWlnaHQsaD1zLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibWVtYmVycy1ncm91cCB0ZXh0Iik7bGV0IHk9MDtmb3IobGV0IGIgb2YgZS5tZW1iZXJzKXtsZXQgdz1hd2FpdCBWdyhoLGIseSxbYi5wYXJzZUNsYXNzaWZpZXIoKV0pO3krPXcrYX1tPWgubm9kZSgpLmdldEJCb3goKS5oZWlnaHQsbTw9MCYmKG09aS8yKSxmPXMuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJtZXRob2RzLWdyb3VwIHRleHQiKTtsZXQgdj0wO2ZvcihsZXQgYiBvZiBlLm1ldGhvZHMpe2xldCB3PWF3YWl0IFZ3KGYsYix2LFtiLnBhcnNlQ2xhc3NpZmllcigpXSk7dis9dythfWxldCB4PXMubm9kZSgpLmdldEJCb3goKTtpZihsIT09bnVsbCl7bGV0IGI9bC5ub2RlKCkuZ2V0QkJveCgpO2wuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LWIud2lkdGgvMn0pYCl9cmV0dXJuIHUuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LWcud2lkdGgvMn0sICR7ZH0pYCkseD1zLm5vZGUoKS5nZXRCQm94KCksaC5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoMCwgJHtkK3AraSoyfSlgKSx4PXMubm9kZSgpLmdldEJCb3goKSxmLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgwLCAke2QrcCsobT9tK2kqNDppKjIpfSlgKSx4PXMubm9kZSgpLmdldEJCb3goKSx7c2hhcGVTdmc6cyxiYm94Onh9fWFzeW5jIGZ1bmN0aW9uIFZ3KHQsZSxyLG49W10pe2xldCBpPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLmF0dHIoInN0eWxlIixuLmpvaW4oIjsgIikpLGE9Y3IoKSxzPSJ1c2VIdG1sTGFiZWxzImluIGU/ZS51c2VIdG1sTGFiZWxzOmZyKGEuaHRtbExhYmVscyk/PyEwLGw9IiI7InRleHQiaW4gZT9sPWUudGV4dDpsPWUubGFiZWwsIXMmJmwuc3RhcnRzV2l0aCgiXFwiKSYmKGw9bC5zdWJzdHJpbmcoMSkpLHBpKGwpJiYocz0hMCk7bGV0IHU9YXdhaXQgSG4oaSxYeShuYShsKSkse3dpZHRoOnJhKGwsYSkrNTAsY2xhc3NlczoibWFya2Rvd24tbm9kZS1sYWJlbCIsdXNlSHRtbExhYmVsczpzfSxhKSxoLGY9MTtpZihzKXtsZXQgZD11LmNoaWxkcmVuWzBdLHA9R2UodSk7Zj1kLmlubmVySFRNTC5zcGxpdCgiPGJyPiIpLmxlbmd0aCxkLmlubmVySFRNTC5pbmNsdWRlcygiPC9tYXRoPiIpJiYoZis9ZC5pbm5lckhUTUwuc3BsaXQoIjxtcm93PiIpLmxlbmd0aC0xKTtsZXQgbT1kLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbWciKTtpZihtKXtsZXQgZz1sLnJlcGxhY2UoLzxpbWdbXj5dKj4vZywiIikudHJpbSgpPT09IiI7YXdhaXQgUHJvbWlzZS5hbGwoWy4uLm1dLm1hcCh5PT5uZXcgUHJvbWlzZSh2PT57ZnVuY3Rpb24geCgpe2lmKHkuc3R5bGUuZGlzcGxheT0iZmxleCIseS5zdHlsZS5mbGV4RGlyZWN0aW9uPSJjb2x1bW4iLGcpe2xldCBiPWEuZm9udFNpemU/LnRvU3RyaW5nKCk/P3dpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmZvbnRTaXplLEM9cGFyc2VJbnQoYiwxMCkqNSsicHgiO3kuc3R5bGUubWluV2lkdGg9Qyx5LnN0eWxlLm1heFdpZHRoPUN9ZWxzZSB5LnN0eWxlLndpZHRoPSIxMDAlIjt2KHkpfW8oeCwic2V0dXBJbWFnZSIpLHNldFRpbWVvdXQoKCk9Pnt5LmNvbXBsZXRlJiZ4KCl9KSx5LmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIix4KSx5LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLHgpfSkpKX1oPWQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscC5hdHRyKCJ3aWR0aCIsaC53aWR0aCkscC5hdHRyKCJoZWlnaHQiLGguaGVpZ2h0KX1lbHNle24uaW5jbHVkZXMoImZvbnQtd2VpZ2h0OiBib2xkZXIiKSYmR2UodSkuc2VsZWN0QWxsKCJ0c3BhbiIpLmF0dHIoImZvbnQtd2VpZ2h0IiwiIiksZj11LmNoaWxkcmVuLmxlbmd0aDtsZXQgZD11LmNoaWxkcmVuWzBdOyh1LnRleHRDb250ZW50PT09IiJ8fHUudGV4dENvbnRlbnQuaW5jbHVkZXMoIiZndCIpKSYmKGQudGV4dENvbnRlbnQ9bFswXStsLnN1YnN0cmluZygxKS5yZXBsYWNlQWxsKCImZ3Q7IiwiPiIpLnJlcGxhY2VBbGwoIiZsdDsiLCI8IikudHJpbSgpLGxbMV09PT0iICImJihkLnRleHRDb250ZW50PWQudGV4dENvbnRlbnRbMF0rIiAiK2QudGV4dENvbnRlbnQuc3Vic3RyaW5nKDEpKSksZC50ZXh0Q29udGVudD09PSJ1bmRlZmluZWQiJiYoZC50ZXh0Q29udGVudD0iIiksaD11LmdldEJCb3goKX1yZXR1cm4gaS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwiKygtaC5oZWlnaHQvKDIqZikrcikrIikiKSxoLmhlaWdodH12YXIgRlo9TigoKT0+eyJ1c2Ugc3RyaWN0IjtkcigpO2ppKCk7RnQoKTtpcigpO3p0KCk7dG8oKTtncigpO28oQlosInRleHRIZWxwZXIiKTtvKFZ3LCJhZGRUZXh0Iil9KTthc3luYyBmdW5jdGlvbiAkWih0LGUpe2xldCByPW1lKCksbj1yLmNsYXNzLnBhZGRpbmc/PzEyLGk9bixhPWUudXNlSHRtbExhYmVscz8/ZnIoci5odG1sTGFiZWxzKT8/ITAscz1lO3MuYW5ub3RhdGlvbnM9cy5hbm5vdGF0aW9ucz8/W10scy5tZW1iZXJzPXMubWVtYmVycz8/W10scy5tZXRob2RzPXMubWV0aG9kcz8/W107bGV0e3NoYXBlU3ZnOmwsYmJveDp1fT1hd2FpdCBCWih0LGUscixhLGkpLHtsYWJlbFN0eWxlczpoLG5vZGVTdHlsZXM6Zn09UWUoZSk7ZS5sYWJlbFN0eWxlPWgsZS5jc3NTdHlsZXM9cy5zdHlsZXN8fCIiO2xldCBkPXMuc3R5bGVzPy5qb2luKCI7Iil8fGZ8fCIiO2UuY3NzU3R5bGVzfHwoZS5jc3NTdHlsZXM9ZC5yZXBsYWNlQWxsKCIhaW1wb3J0YW50IiwiIikuc3BsaXQoIjsiKSk7bGV0IHA9cy5tZW1iZXJzLmxlbmd0aD09PTAmJnMubWV0aG9kcy5sZW5ndGg9PT0wJiYhci5jbGFzcz8uaGlkZUVtcHR5TWVtYmVyc0JveCxtPVhlLnN2ZyhsKSxnPUtlKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYoZy5yb3VnaG5lc3M9MCxnLmZpbGxTdHlsZT0ic29saWQiKTtsZXQgeT11LndpZHRoLHY9dS5oZWlnaHQ7cy5tZW1iZXJzLmxlbmd0aD09PTAmJnMubWV0aG9kcy5sZW5ndGg9PT0wP3YrPWk6cy5tZW1iZXJzLmxlbmd0aD4wJiZzLm1ldGhvZHMubGVuZ3RoPT09MCYmKHYrPWkqMik7bGV0IHg9LXkvMixiPS12LzIsdz1tLnJlY3RhbmdsZSh4LW4sYi1uLShwP246cy5tZW1iZXJzLmxlbmd0aD09PTAmJnMubWV0aG9kcy5sZW5ndGg9PT0wPy1uLzI6MCkseSsyKm4sdisyKm4rKHA/bioyOnMubWVtYmVycy5sZW5ndGg9PT0wJiZzLm1ldGhvZHMubGVuZ3RoPT09MD8tbjowKSxnKSxDPWwuaW5zZXJ0KCgpPT53LCI6Zmlyc3QtY2hpbGQiKTtDLmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIik7bGV0IFQ9Qy5ub2RlKCkuZ2V0QkJveCgpO2wuc2VsZWN0QWxsKCIudGV4dCIpLmVhY2goKF8sSSxEKT0+e2xldCBrPUdlKERbSV0pLEw9ay5hdHRyKCJ0cmFuc2Zvcm0iKSxSPTA7aWYoTCl7bGV0IEY9UmVnRXhwKC90cmFuc2xhdGVcKChbXixdKyksKFteKV0rKVwpLykuZXhlYyhMKTtGJiYoUj1wYXJzZUZsb2F0KEZbMl0pKX1sZXQgTz1SK2Irbi0ocD9uOnMubWVtYmVycy5sZW5ndGg9PT0wJiZzLm1ldGhvZHMubGVuZ3RoPT09MD8tbi8yOjApO2F8fChPLT00KTtsZXQgTT14OyhrLmF0dHIoImNsYXNzIikuaW5jbHVkZXMoImxhYmVsLWdyb3VwIil8fGsuYXR0cigiY2xhc3MiKS5pbmNsdWRlcygiYW5ub3RhdGlvbi1ncm91cCIpKSYmKE09LWsubm9kZSgpPy5nZXRCQm94KCkud2lkdGgvMnx8MCxsLnNlbGVjdEFsbCgidGV4dCIpLmVhY2goZnVuY3Rpb24oQixGLFApe3dpbmRvdy5nZXRDb21wdXRlZFN0eWxlKFBbRl0pLnRleHRBbmNob3I9PT0ibWlkZGxlIiYmKE09MCl9KSksay5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtNfSwgJHtPfSlgKX0pO2xldCBFPWwuc2VsZWN0KCIuYW5ub3RhdGlvbi1ncm91cCIpLm5vZGUoKS5nZXRCQm94KCkuaGVpZ2h0LShwP24vMjowKXx8MCxBPWwuc2VsZWN0KCIubGFiZWwtZ3JvdXAiKS5ub2RlKCkuZ2V0QkJveCgpLmhlaWdodC0ocD9uLzI6MCl8fDAsUz1sLnNlbGVjdCgiLm1lbWJlcnMtZ3JvdXAiKS5ub2RlKCkuZ2V0QkJveCgpLmhlaWdodC0ocD9uLzI6MCl8fDA7aWYocy5tZW1iZXJzLmxlbmd0aD4wfHxzLm1ldGhvZHMubGVuZ3RoPjB8fHApe2xldCBfPW0ubGluZShULngsRStBK2IrbixULngrVC53aWR0aCxFK0ErYituLGcpO2wuaW5zZXJ0KCgpPT5fKS5hdHRyKCJjbGFzcyIsImRpdmlkZXIiKS5hdHRyKCJzdHlsZSIsZCl9aWYocHx8cy5tZW1iZXJzLmxlbmd0aD4wfHxzLm1ldGhvZHMubGVuZ3RoPjApe2xldCBfPW0ubGluZShULngsRStBK1MrYitpKjIrbixULngrVC53aWR0aCxFK0ErUytiK24raSoyLGcpO2wuaW5zZXJ0KCgpPT5fKS5hdHRyKCJjbGFzcyIsImRpdmlkZXIiKS5hdHRyKCJzdHlsZSIsZCl9aWYocy5sb29rIT09ImhhbmREcmF3biImJmwuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLGQpLEMuc2VsZWN0KCI6bnRoLWNoaWxkKDIpIikuYXR0cigic3R5bGUiLGQpLGwuc2VsZWN0QWxsKCIuZGl2aWRlciIpLnNlbGVjdCgicGF0aCIpLmF0dHIoInN0eWxlIixkKSxlLmxhYmVsU3R5bGU/bC5zZWxlY3RBbGwoInNwYW4iKS5hdHRyKCJzdHlsZSIsZS5sYWJlbFN0eWxlKTpsLnNlbGVjdEFsbCgic3BhbiIpLmF0dHIoInN0eWxlIixkKSwhYSl7bGV0IF89UmVnRXhwKC9jb2xvclxzKjpccyooW147XSopLyksST1fLmV4ZWMoZCk7aWYoSSl7bGV0IEQ9SVswXS5yZXBsYWNlKCJjb2xvciIsImZpbGwiKTtsLnNlbGVjdEFsbCgidHNwYW4iKS5hdHRyKCJzdHlsZSIsRCl9ZWxzZSBpZihoKXtsZXQgRD1fLmV4ZWMoaCk7aWYoRCl7bGV0IGs9RFswXS5yZXBsYWNlKCJjb2xvciIsImZpbGwiKTtsLnNlbGVjdEFsbCgidHNwYW4iKS5hdHRyKCJzdHlsZSIsayl9fX1yZXR1cm4gamUoZSxDKSxlLmludGVyc2VjdD1mdW5jdGlvbihfKXtyZXR1cm4gWWUucmVjdChlLF8pfSxsfXZhciB6Wj1OKCgpPT57InVzZSBzdHJpY3QiO0Z0KCk7enQoKTtkcigpO1d0KCk7VXQoKTtIdCgpO0ZaKCk7Z3IoKTtvKCRaLCJjbGFzc0JveCIpfSk7YXN5bmMgZnVuY3Rpb24gR1oodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVFlKGUpO2UubGFiZWxTdHlsZT1yO2xldCBpPWUsYT1lLHM9MjAsbD0yMCx1PSJ2ZXJpZnlNZXRob2QiaW4gZSxoPWh0KGUpLGY9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsaCkuYXR0cigiaWQiLGUuZG9tSWQ/P2UuaWQpLGQ7dT9kPWF3YWl0IEx1KGYsYCZsdDsmbHQ7JHtpLnR5cGV9Jmd0OyZndDtgLDAsZS5sYWJlbFN0eWxlKTpkPWF3YWl0IEx1KGYsIiZsdDsmbHQ7RWxlbWVudCZndDsmZ3Q7IiwwLGUubGFiZWxTdHlsZSk7bGV0IHA9ZCxtPWF3YWl0IEx1KGYsaS5uYW1lLHAsZS5sYWJlbFN0eWxlKyI7IGZvbnQtd2VpZ2h0OiBib2xkOyIpO2lmKHArPW0rbCx1KXtsZXQgRT1hd2FpdCBMdShmLGAke2kucmVxdWlyZW1lbnRJZD9gSWQ6ICR7aS5yZXF1aXJlbWVudElkfWA6IiJ9YCxwLGUubGFiZWxTdHlsZSk7cCs9RTtsZXQgQT1hd2FpdCBMdShmLGAke2kudGV4dD9gVGV4dDogJHtpLnRleHR9YDoiIn1gLHAsZS5sYWJlbFN0eWxlKTtwKz1BO2xldCBTPWF3YWl0IEx1KGYsYCR7aS5yaXNrP2BSaXNrOiAke2kucmlza31gOiIifWAscCxlLmxhYmVsU3R5bGUpO3ArPVMsYXdhaXQgTHUoZixgJHtpLnZlcmlmeU1ldGhvZD9gVmVyaWZpY2F0aW9uOiAke2kudmVyaWZ5TWV0aG9kfWA6IiJ9YCxwLGUubGFiZWxTdHlsZSl9ZWxzZXtsZXQgRT1hd2FpdCBMdShmLGAke2EudHlwZT9gVHlwZTogJHthLnR5cGV9YDoiIn1gLHAsZS5sYWJlbFN0eWxlKTtwKz1FLGF3YWl0IEx1KGYsYCR7YS5kb2NSZWY/YERvYyBSZWY6ICR7YS5kb2NSZWZ9YDoiIn1gLHAsZS5sYWJlbFN0eWxlKX1sZXQgZz0oZi5ub2RlKCk/LmdldEJCb3goKS53aWR0aD8/MjAwKStzLHk9KGYubm9kZSgpPy5nZXRCQm94KCkuaGVpZ2h0Pz8yMDApK3Msdj0tZy8yLHg9LXkvMixiPVhlLnN2ZyhmKSx3PUtlKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYody5yb3VnaG5lc3M9MCx3LmZpbGxTdHlsZT0ic29saWQiKTtsZXQgQz1iLnJlY3RhbmdsZSh2LHgsZyx5LHcpLFQ9Zi5pbnNlcnQoKCk9PkMsIjpmaXJzdC1jaGlsZCIpO2lmKFQuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKS5hdHRyKCJzdHlsZSIsbiksZi5zZWxlY3RBbGwoIi5sYWJlbCIpLmVhY2goKEUsQSxTKT0+e2xldCBfPUdlKFNbQV0pLEk9Xy5hdHRyKCJ0cmFuc2Zvcm0iKSxEPTAsaz0wO2lmKEkpe2xldCBNPVJlZ0V4cCgvdHJhbnNsYXRlXCgoW14sXSspLChbXildKylcKS8pLmV4ZWMoSSk7TSYmKEQ9cGFyc2VGbG9hdChNWzFdKSxrPXBhcnNlRmxvYXQoTVsyXSkpfWxldCBMPWsteS8yLFI9ditzLzI7KEE9PT0wfHxBPT09MSkmJihSPUQpLF8uYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7Un0sICR7TCtzfSlgKX0pLHA+ZCttK2wpe2xldCBFPWIubGluZSh2LHgrZCttK2wsditnLHgrZCttK2wsdyk7Zi5pbnNlcnQoKCk9PkUpLmF0dHIoInN0eWxlIixuKX1yZXR1cm4gamUoZSxUKSxlLmludGVyc2VjdD1mdW5jdGlvbihFKXtyZXR1cm4gWWUucmVjdChlLEUpfSxmfWFzeW5jIGZ1bmN0aW9uIEx1KHQsZSxyLG49IiIpe2lmKGU9PT0iIilyZXR1cm4gMDtsZXQgaT10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKS5hdHRyKCJzdHlsZSIsbiksYT1tZSgpLHM9YS5odG1sTGFiZWxzPz8hMCxsPWF3YWl0IEhuKGksWHkobmEoZSkpLHt3aWR0aDpyYShlLGEpKzUwLGNsYXNzZXM6Im1hcmtkb3duLW5vZGUtbGFiZWwiLHVzZUh0bWxMYWJlbHM6cyxzdHlsZTpufSxhKSx1O2lmKHMpe2xldCBoPWwuY2hpbGRyZW5bMF0sZj1HZShsKTt1PWguZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZi5hdHRyKCJ3aWR0aCIsdS53aWR0aCksZi5hdHRyKCJoZWlnaHQiLHUuaGVpZ2h0KX1lbHNle2xldCBoPWwuY2hpbGRyZW5bMF07Zm9yKGxldCBmIG9mIGguY2hpbGRyZW4pZi50ZXh0Q29udGVudD1mLnRleHRDb250ZW50LnJlcGxhY2VBbGwoIiZndDsiLCI+IikucmVwbGFjZUFsbCgiJmx0OyIsIjwiKSxuJiZmLnNldEF0dHJpYnV0ZSgic3R5bGUiLG4pO3U9bC5nZXRCQm94KCksdS5oZWlnaHQrPTZ9cmV0dXJuIGkuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LXUud2lkdGgvMn0sJHstdS5oZWlnaHQvMityfSlgKSx1LmhlaWdodH12YXIgVlo9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO0h0KCk7VXQoKTtXdCgpO2lyKCk7enQoKTt0bygpO2RyKCk7byhHWiwicmVxdWlyZW1lbnRCb3giKTtvKEx1LCJhZGRUZXh0Iil9KTthc3luYyBmdW5jdGlvbiBVWih0LGUse2NvbmZpZzpyfSl7bGV0e2xhYmVsU3R5bGVzOm4sbm9kZVN0eWxlczppfT1RZShlKTtlLmxhYmVsU3R5bGU9bnx8IiI7bGV0IGE9MTAscz1lLndpZHRoO2Uud2lkdGg9KGUud2lkdGg/PzIwMCktMTA7bGV0e3NoYXBlU3ZnOmwsYmJveDp1LGxhYmVsOmh9PWF3YWl0IHB0KHQsZSxodChlKSksZj1lLnBhZGRpbmd8fDEwLGQ9IiIscDsidGlja2V0ImluIGUmJmUudGlja2V0JiZyPy5rYW5iYW4/LnRpY2tldEJhc2VVcmwmJihkPXI/LmthbmJhbj8udGlja2V0QmFzZVVybC5yZXBsYWNlKCIjVElDS0VUIyIsZS50aWNrZXQpLHA9bC5pbnNlcnQoInN2ZzphIiwiOmZpcnN0LWNoaWxkIikuYXR0cigiY2xhc3MiLCJrYW5iYW4tdGlja2V0LWxpbmsiKS5hdHRyKCJ4bGluazpocmVmIixkKS5hdHRyKCJ0YXJnZXQiLCJfYmxhbmsiKSk7bGV0IG09e3VzZUh0bWxMYWJlbHM6ZS51c2VIdG1sTGFiZWxzLGxhYmVsU3R5bGU6ZS5sYWJlbFN0eWxlfHwiIix3aWR0aDplLndpZHRoLGltZzplLmltZyxwYWRkaW5nOmUucGFkZGluZ3x8OCxjZW50ZXJMYWJlbDohMX0sZyx5O3A/e2xhYmVsOmcsYmJveDp5fT1hd2FpdCBEdyhwLCJ0aWNrZXQiaW4gZSYmZS50aWNrZXR8fCIiLG0pOntsYWJlbDpnLGJib3g6eX09YXdhaXQgRHcobCwidGlja2V0ImluIGUmJmUudGlja2V0fHwiIixtKTtsZXR7bGFiZWw6dixiYm94Onh9PWF3YWl0IER3KGwsImFzc2lnbmVkImluIGUmJmUuYXNzaWduZWR8fCIiLG0pO2Uud2lkdGg9cztsZXQgYj0xMCx3PWU/LndpZHRofHwwLEM9TWF0aC5tYXgoeS5oZWlnaHQseC5oZWlnaHQpLzIsVD1NYXRoLm1heCh1LmhlaWdodCtiKjIsZT8uaGVpZ2h0fHwwKStDLEU9LXcvMixBPS1ULzI7aC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoZi13LzIpKyIsICIrKC1DLXUuaGVpZ2h0LzIpKyIpIiksZy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoZi13LzIpKyIsICIrKC1DK3UuaGVpZ2h0LzIpKyIpIiksdi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoZit3LzIteC53aWR0aC0yKmEpKyIsICIrKC1DK3UuaGVpZ2h0LzIpKyIpIik7bGV0IFMse3J4Ol8scnk6SX09ZSx7Y3NzU3R5bGVzOkR9PWU7aWYoZS5sb29rPT09ImhhbmREcmF3biIpe2xldCBrPVhlLnN2ZyhsKSxMPUtlKGUse30pLFI9X3x8ST9rLnBhdGgoTmEoRSxBLHcsVCxffHwwKSxMKTprLnJlY3RhbmdsZShFLEEsdyxULEwpO1M9bC5pbnNlcnQoKCk9PlIsIjpmaXJzdC1jaGlsZCIpLFMuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKS5hdHRyKCJzdHlsZSIsRHx8bnVsbCl9ZWxzZXtTPWwuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksUy5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciBfX0FQQV9fIikuYXR0cigic3R5bGUiLGkpLmF0dHIoInJ4IixfPz81KS5hdHRyKCJyeSIsST8/NSkuYXR0cigieCIsRSkuYXR0cigieSIsQSkuYXR0cigid2lkdGgiLHcpLmF0dHIoImhlaWdodCIsVCk7bGV0IGs9InByaW9yaXR5ImluIGUmJmUucHJpb3JpdHk7aWYoayl7bGV0IEw9bC5hcHBlbmQoImxpbmUiKSxSPUUrMixPPUErTWF0aC5mbG9vcigoXz8/MCkvMiksTT1BK1QtTWF0aC5mbG9vcigoXz8/MCkvMik7TC5hdHRyKCJ4MSIsUikuYXR0cigieTEiLE8pLmF0dHIoIngyIixSKS5hdHRyKCJ5MiIsTSkuYXR0cigic3Ryb2tlLXdpZHRoIiwiNCIpLmF0dHIoInN0cm9rZSIsa19lKGspKX19cmV0dXJuIGplKGUsUyksZS5oZWlnaHQ9VCxlLmludGVyc2VjdD1mdW5jdGlvbihrKXtyZXR1cm4gWWUucmVjdChlLGspfSxsfXZhciBrX2UsSFo9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO0h0KCk7cWgoKTtVdCgpO1d0KCk7a19lPW8odD0+e3N3aXRjaCh0KXtjYXNlIlZlcnkgSGlnaCI6cmV0dXJuInJlZCI7Y2FzZSJIaWdoIjpyZXR1cm4ib3JhbmdlIjtjYXNlIk1lZGl1bSI6cmV0dXJuIG51bGw7Y2FzZSJMb3ciOnJldHVybiJibHVlIjtjYXNlIlZlcnkgTG93IjpyZXR1cm4ibGlnaHRibHVlIn19LCJjb2xvckZyb21Qcmlvcml0eSIpO28oVVosImthbmJhbkl0ZW0iKX0pO2Z1bmN0aW9uIFdaKHQpe3JldHVybiB0IGluIFFEfXZhciBFX2UsU19lLFFELFpEPU4oKCk9PnsidXNlIHN0cmljdCI7TksoKTtPSygpO0JLKCk7JEsoKTtHSygpO1VLKCk7V0soKTtZSygpO2pLKCk7UUsoKTtKSygpO3RRKCk7blEoKTthUSgpO29RKCk7Y1EoKTtoUSgpO2RRKCk7bVEoKTt5USgpO3hRKCk7d1EoKTtrUSgpO1NRKCk7QVEoKTtEUSgpO1JRKCk7TVEoKTtPUSgpO0JRKCk7JFEoKTtHUSgpO1VRKCk7V1EoKTtZUSgpO2pRKCk7UVEoKTtKUSgpO3RaKCk7blooKTthWigpO29aKCk7Y1ooKTtoWigpO2RaKCk7bVooKTt5WigpO3haKCk7d1ooKTtrWigpO1NaKCk7QVooKTtEWigpO1JaKCk7TVooKTtPWigpO1BaKCk7elooKTtWWigpO0haKCk7RV9lPVt7c2VtYW50aWNOYW1lOiJQcm9jZXNzIixuYW1lOiJSZWN0YW5nbGUiLHNob3J0TmFtZToicmVjdCIsZGVzY3JpcHRpb246IlN0YW5kYXJkIHByb2Nlc3Mgc2hhcGUiLGFsaWFzZXM6WyJwcm9jIiwicHJvY2VzcyIsInJlY3RhbmdsZSJdLGludGVybmFsQWxpYXNlczpbInNxdWFyZVJlY3QiXSxoYW5kbGVyOmlafSx7c2VtYW50aWNOYW1lOiJFdmVudCIsbmFtZToiUm91bmRlZCBSZWN0YW5nbGUiLHNob3J0TmFtZToicm91bmRlZCIsZGVzY3JpcHRpb246IlJlcHJlc2VudHMgYW4gZXZlbnQiLGFsaWFzZXM6WyJldmVudCJdLGludGVybmFsQWxpYXNlczpbInJvdW5kZWRSZWN0Il0saGFuZGxlcjpaUX0se3NlbWFudGljTmFtZToiVGVybWluYWwgUG9pbnQiLG5hbWU6IlN0YWRpdW0iLHNob3J0TmFtZToic3RhZGl1bSIsZGVzY3JpcHRpb246IlRlcm1pbmFsIHBvaW50IixhbGlhc2VzOlsidGVybWluYWwiLCJwaWxsIl0saGFuZGxlcjpzWn0se3NlbWFudGljTmFtZToiU3VicHJvY2VzcyIsbmFtZToiRnJhbWVkIFJlY3RhbmdsZSIsc2hvcnROYW1lOiJmci1yZWN0IixkZXNjcmlwdGlvbjoiU3VicHJvY2VzcyIsYWxpYXNlczpbInN1YnByb2Nlc3MiLCJzdWJwcm9jIiwiZnJhbWVkLXJlY3RhbmdsZSIsInN1YnJvdXRpbmUiXSxoYW5kbGVyOnBafSx7c2VtYW50aWNOYW1lOiJEYXRhYmFzZSIsbmFtZToiQ3lsaW5kZXIiLHNob3J0TmFtZToiY3lsIixkZXNjcmlwdGlvbjoiRGF0YWJhc2Ugc3RvcmFnZSIsYWxpYXNlczpbImRiIiwiZGF0YWJhc2UiLCJjeWxpbmRlciJdLGhhbmRsZXI6Wkt9LHtzZW1hbnRpY05hbWU6IlN0YXJ0IixuYW1lOiJDaXJjbGUiLHNob3J0TmFtZToiY2lyY2xlIixkZXNjcmlwdGlvbjoiU3RhcnRpbmcgcG9pbnQiLGFsaWFzZXM6WyJjaXJjIl0saGFuZGxlcjp6S30se3NlbWFudGljTmFtZToiRGVjaXNpb24iLG5hbWU6IkRpYW1vbmQiLHNob3J0TmFtZToiZGlhbSIsZGVzY3JpcHRpb246IkRlY2lzaW9uLW1ha2luZyBzdGVwIixhbGlhc2VzOlsiZGVjaXNpb24iLCJkaWFtb25kIiwicXVlc3Rpb24iXSxoYW5kbGVyOnFRfSx7c2VtYW50aWNOYW1lOiJQcmVwYXJlIENvbmRpdGlvbmFsIixuYW1lOiJIZXhhZ29uIixzaG9ydE5hbWU6ImhleCIsZGVzY3JpcHRpb246IlByZXBhcmF0aW9uIG9yIGNvbmRpdGlvbiBzdGVwIixhbGlhc2VzOlsiaGV4YWdvbiIsInByZXBhcmUiXSxoYW5kbGVyOmZRfSx7c2VtYW50aWNOYW1lOiJEYXRhIElucHV0L091dHB1dCIsbmFtZToiTGVhbiBSaWdodCIsc2hvcnROYW1lOiJsZWFuLXIiLGRlc2NyaXB0aW9uOiJSZXByZXNlbnRzIGlucHV0IG9yIG91dHB1dCIsYWxpYXNlczpbImxlYW4tcmlnaHQiLCJpbi1vdXQiXSxpbnRlcm5hbEFsaWFzZXM6WyJsZWFuX3JpZ2h0Il0saGFuZGxlcjpOUX0se3NlbWFudGljTmFtZToiRGF0YSBJbnB1dC9PdXRwdXQiLG5hbWU6IkxlYW4gTGVmdCIsc2hvcnROYW1lOiJsZWFuLWwiLGRlc2NyaXB0aW9uOiJSZXByZXNlbnRzIG91dHB1dCBvciBpbnB1dCIsYWxpYXNlczpbImxlYW4tbGVmdCIsIm91dC1pbiJdLGludGVybmFsQWxpYXNlczpbImxlYW5fbGVmdCJdLGhhbmRsZXI6TFF9LHtzZW1hbnRpY05hbWU6IlByaW9yaXR5IEFjdGlvbiIsbmFtZToiVHJhcGV6b2lkIEJhc2UgQm90dG9tIixzaG9ydE5hbWU6InRyYXAtYiIsZGVzY3JpcHRpb246IlByaW9yaXR5IGFjdGlvbiIsYWxpYXNlczpbInByaW9yaXR5IiwidHJhcGV6b2lkLWJvdHRvbSIsInRyYXBlem9pZCJdLGhhbmRsZXI6RVp9LHtzZW1hbnRpY05hbWU6Ik1hbnVhbCBPcGVyYXRpb24iLG5hbWU6IlRyYXBlem9pZCBCYXNlIFRvcCIsc2hvcnROYW1lOiJ0cmFwLXQiLGRlc2NyaXB0aW9uOiJSZXByZXNlbnRzIGEgbWFudWFsIHRhc2siLGFsaWFzZXM6WyJtYW51YWwiLCJ0cmFwZXpvaWQtdG9wIiwiaW52LXRyYXBlem9pZCJdLGludGVybmFsQWxpYXNlczpbImludl90cmFwZXpvaWQiXSxoYW5kbGVyOkNRfSx7c2VtYW50aWNOYW1lOiJTdG9wIixuYW1lOiJEb3VibGUgQ2lyY2xlIixzaG9ydE5hbWU6ImRibC1jaXJjIixkZXNjcmlwdGlvbjoiUmVwcmVzZW50cyBhIHN0b3AgcG9pbnQiLGFsaWFzZXM6WyJkb3VibGUtY2lyY2xlIl0saW50ZXJuYWxBbGlhc2VzOlsiZG91YmxlY2lyY2xlIl0saGFuZGxlcjpyUX0se3NlbWFudGljTmFtZToiVGV4dCBCbG9jayIsbmFtZToiVGV4dCBCbG9jayIsc2hvcnROYW1lOiJ0ZXh0IixkZXNjcmlwdGlvbjoiVGV4dCBibG9jayIsaGFuZGxlcjpiWn0se3NlbWFudGljTmFtZToiQ2FyZCIsbmFtZToiTm90Y2hlZCBSZWN0YW5nbGUiLHNob3J0TmFtZToibm90Y2gtcmVjdCIsZGVzY3JpcHRpb246IlJlcHJlc2VudHMgYSBjYXJkIixhbGlhc2VzOlsiY2FyZCIsIm5vdGNoZWQtcmVjdGFuZ2xlIl0saGFuZGxlcjpQS30se3NlbWFudGljTmFtZToiTGluZWQvU2hhZGVkIFByb2Nlc3MiLG5hbWU6IkxpbmVkIFJlY3RhbmdsZSIsc2hvcnROYW1lOiJsaW4tcmVjdCIsZGVzY3JpcHRpb246IkxpbmVkIHByb2Nlc3Mgc2hhcGUiLGFsaWFzZXM6WyJsaW5lZC1yZWN0YW5nbGUiLCJsaW5lZC1wcm9jZXNzIiwibGluLXByb2MiLCJzaGFkZWQtcHJvY2VzcyJdLGhhbmRsZXI6ZVp9LHtzZW1hbnRpY05hbWU6IlN0YXJ0IixuYW1lOiJTbWFsbCBDaXJjbGUiLHNob3J0TmFtZToic20tY2lyYyIsZGVzY3JpcHRpb246IlNtYWxsIHN0YXJ0aW5nIHBvaW50IixhbGlhc2VzOlsic3RhcnQiLCJzbWFsbC1jaXJjbGUiXSxpbnRlcm5hbEFsaWFzZXM6WyJzdGF0ZVN0YXJ0Il0saGFuZGxlcjpmWn0se3NlbWFudGljTmFtZToiU3RvcCIsbmFtZToiRnJhbWVkIENpcmNsZSIsc2hvcnROYW1lOiJmci1jaXJjIixkZXNjcmlwdGlvbjoiU3RvcCBwb2ludCIsYWxpYXNlczpbInN0b3AiLCJmcmFtZWQtY2lyY2xlIl0saW50ZXJuYWxBbGlhc2VzOlsic3RhdGVFbmQiXSxoYW5kbGVyOnVafSx7c2VtYW50aWNOYW1lOiJGb3JrL0pvaW4iLG5hbWU6IkZpbGxlZCBSZWN0YW5nbGUiLHNob3J0TmFtZToiZm9yayIsZGVzY3JpcHRpb246IkZvcmsgb3Igam9pbiBpbiBwcm9jZXNzIGZsb3ciLGFsaWFzZXM6WyJqb2luIl0saW50ZXJuYWxBbGlhc2VzOlsiZm9ya0pvaW4iXSxoYW5kbGVyOmxRfSx7c2VtYW50aWNOYW1lOiJDb2xsYXRlIixuYW1lOiJIb3VyZ2xhc3MiLHNob3J0TmFtZToiaG91cmdsYXNzIixkZXNjcmlwdGlvbjoiUmVwcmVzZW50cyBhIGNvbGxhdGUgb3BlcmF0aW9uIixhbGlhc2VzOlsiaG91cmdsYXNzIiwiY29sbGF0ZSJdLGhhbmRsZXI6cFF9LHtzZW1hbnRpY05hbWU6IkNvbW1lbnQiLG5hbWU6IkN1cmx5IEJyYWNlIixzaG9ydE5hbWU6ImJyYWNlIixkZXNjcmlwdGlvbjoiQWRkcyBhIGNvbW1lbnQiLGFsaWFzZXM6WyJjb21tZW50IiwiYnJhY2UtbCJdLGhhbmRsZXI6SEt9LHtzZW1hbnRpY05hbWU6IkNvbW1lbnQgUmlnaHQiLG5hbWU6IkN1cmx5IEJyYWNlIixzaG9ydE5hbWU6ImJyYWNlLXIiLGRlc2NyaXB0aW9uOiJBZGRzIGEgY29tbWVudCIsaGFuZGxlcjpxS30se3NlbWFudGljTmFtZToiQ29tbWVudCB3aXRoIGJyYWNlcyBvbiBib3RoIHNpZGVzIixuYW1lOiJDdXJseSBCcmFjZXMiLHNob3J0TmFtZToiYnJhY2VzIixkZXNjcmlwdGlvbjoiQWRkcyBhIGNvbW1lbnQiLGhhbmRsZXI6WEt9LHtzZW1hbnRpY05hbWU6IkNvbSBMaW5rIixuYW1lOiJMaWdodG5pbmcgQm9sdCIsc2hvcnROYW1lOiJib2x0IixkZXNjcmlwdGlvbjoiQ29tbXVuaWNhdGlvbiBsaW5rIixhbGlhc2VzOlsiY29tLWxpbmsiLCJsaWdodG5pbmctYm9sdCJdLGhhbmRsZXI6SVF9LHtzZW1hbnRpY05hbWU6IkRvY3VtZW50IixuYW1lOiJEb2N1bWVudCIsc2hvcnROYW1lOiJkb2MiLGRlc2NyaXB0aW9uOiJSZXByZXNlbnRzIGEgZG9jdW1lbnQiLGFsaWFzZXM6WyJkb2MiLCJkb2N1bWVudCJdLGhhbmRsZXI6TFp9LHtzZW1hbnRpY05hbWU6IkRlbGF5IixuYW1lOiJIYWxmLVJvdW5kZWQgUmVjdGFuZ2xlIixzaG9ydE5hbWU6ImRlbGF5IixkZXNjcmlwdGlvbjoiUmVwcmVzZW50cyBhIGRlbGF5IixhbGlhc2VzOlsiaGFsZi1yb3VuZGVkLXJlY3RhbmdsZSJdLGhhbmRsZXI6dVF9LHtzZW1hbnRpY05hbWU6IkRpcmVjdCBBY2Nlc3MgU3RvcmFnZSIsbmFtZToiSG9yaXpvbnRhbCBDeWxpbmRlciIsc2hvcnROYW1lOiJoLWN5bCIsZGVzY3JpcHRpb246IkRpcmVjdCBhY2Nlc3Mgc3RvcmFnZSIsYWxpYXNlczpbImRhcyIsImhvcml6b250YWwtY3lsaW5kZXIiXSxoYW5kbGVyOlRafSx7c2VtYW50aWNOYW1lOiJEaXNrIFN0b3JhZ2UiLG5hbWU6IkxpbmVkIEN5bGluZGVyIixzaG9ydE5hbWU6Imxpbi1jeWwiLGRlc2NyaXB0aW9uOiJEaXNrIHN0b3JhZ2UiLGFsaWFzZXM6WyJkaXNrIiwibGluZWQtY3lsaW5kZXIiXSxoYW5kbGVyOlBRfSx7c2VtYW50aWNOYW1lOiJEaXNwbGF5IixuYW1lOiJDdXJ2ZWQgVHJhcGV6b2lkIixzaG9ydE5hbWU6ImN1cnYtdHJhcCIsZGVzY3JpcHRpb246IlJlcHJlc2VudHMgYSBkaXNwbGF5IixhbGlhc2VzOlsiY3VydmVkLXRyYXBlem9pZCIsImRpc3BsYXkiXSxoYW5kbGVyOktLfSx7c2VtYW50aWNOYW1lOiJEaXZpZGVkIFByb2Nlc3MiLG5hbWU6IkRpdmlkZWQgUmVjdGFuZ2xlIixzaG9ydE5hbWU6ImRpdi1yZWN0IixkZXNjcmlwdGlvbjoiRGl2aWRlZCBwcm9jZXNzIHNoYXBlIixhbGlhc2VzOlsiZGl2LXByb2MiLCJkaXZpZGVkLXJlY3RhbmdsZSIsImRpdmlkZWQtcHJvY2VzcyJdLGhhbmRsZXI6ZVF9LHtzZW1hbnRpY05hbWU6IkV4dHJhY3QiLG5hbWU6IlRyaWFuZ2xlIixzaG9ydE5hbWU6InRyaSIsZGVzY3JpcHRpb246IkV4dHJhY3Rpb24gcHJvY2VzcyIsYWxpYXNlczpbImV4dHJhY3QiLCJ0cmlhbmdsZSJdLGhhbmRsZXI6X1p9LHtzZW1hbnRpY05hbWU6IkludGVybmFsIFN0b3JhZ2UiLG5hbWU6IldpbmRvdyBQYW5lIixzaG9ydE5hbWU6Indpbi1wYW5lIixkZXNjcmlwdGlvbjoiSW50ZXJuYWwgc3RvcmFnZSIsYWxpYXNlczpbImludGVybmFsLXN0b3JhZ2UiLCJ3aW5kb3ctcGFuZSJdLGhhbmRsZXI6SVp9LHtzZW1hbnRpY05hbWU6Ikp1bmN0aW9uIixuYW1lOiJGaWxsZWQgQ2lyY2xlIixzaG9ydE5hbWU6ImYtY2lyYyIsZGVzY3JpcHRpb246Ikp1bmN0aW9uIHBvaW50IixhbGlhc2VzOlsianVuY3Rpb24iLCJmaWxsZWQtY2lyY2xlIl0saGFuZGxlcjppUX0se3NlbWFudGljTmFtZToiTG9vcCBMaW1pdCIsbmFtZToiVHJhcGV6b2lkYWwgUGVudGFnb24iLHNob3J0TmFtZToibm90Y2gtcGVudCIsZGVzY3JpcHRpb246Ikxvb3AgbGltaXQgc3RlcCIsYWxpYXNlczpbImxvb3AtbGltaXQiLCJub3RjaGVkLXBlbnRhZ29uIl0saGFuZGxlcjpDWn0se3NlbWFudGljTmFtZToiTWFudWFsIEZpbGUiLG5hbWU6IkZsaXBwZWQgVHJpYW5nbGUiLHNob3J0TmFtZToiZmxpcC10cmkiLGRlc2NyaXB0aW9uOiJNYW51YWwgZmlsZSBvcGVyYXRpb24iLGFsaWFzZXM6WyJtYW51YWwtZmlsZSIsImZsaXBwZWQtdHJpYW5nbGUiXSxoYW5kbGVyOnNRfSx7c2VtYW50aWNOYW1lOiJNYW51YWwgSW5wdXQiLG5hbWU6IlNsb3BlZCBSZWN0YW5nbGUiLHNob3J0TmFtZToic2wtcmVjdCIsZGVzY3JpcHRpb246Ik1hbnVhbCBpbnB1dCBzdGVwIixhbGlhc2VzOlsibWFudWFsLWlucHV0Iiwic2xvcGVkLXJlY3RhbmdsZSJdLGhhbmRsZXI6clp9LHtzZW1hbnRpY05hbWU6Ik11bHRpLURvY3VtZW50IixuYW1lOiJTdGFja2VkIERvY3VtZW50IixzaG9ydE5hbWU6ImRvY3MiLGRlc2NyaXB0aW9uOiJNdWx0aXBsZSBkb2N1bWVudHMiLGFsaWFzZXM6WyJkb2N1bWVudHMiLCJzdC1kb2MiLCJzdGFja2VkLWRvY3VtZW50Il0saGFuZGxlcjpWUX0se3NlbWFudGljTmFtZToiTXVsdGktUHJvY2VzcyIsbmFtZToiU3RhY2tlZCBSZWN0YW5nbGUiLHNob3J0TmFtZToic3QtcmVjdCIsZGVzY3JpcHRpb246Ik11bHRpcGxlIHByb2Nlc3NlcyIsYWxpYXNlczpbInByb2NzIiwicHJvY2Vzc2VzIiwic3RhY2tlZC1yZWN0YW5nbGUiXSxoYW5kbGVyOnpRfSx7c2VtYW50aWNOYW1lOiJTdG9yZWQgRGF0YSIsbmFtZToiQm93IFRpZSBSZWN0YW5nbGUiLHNob3J0TmFtZToiYm93LXJlY3QiLGRlc2NyaXB0aW9uOiJTdG9yZWQgZGF0YSIsYWxpYXNlczpbInN0b3JlZC1kYXRhIiwiYm93LXRpZS1yZWN0YW5nbGUiXSxoYW5kbGVyOklLfSx7c2VtYW50aWNOYW1lOiJTdW1tYXJ5IixuYW1lOiJDcm9zc2VkIENpcmNsZSIsc2hvcnROYW1lOiJjcm9zcy1jaXJjIixkZXNjcmlwdGlvbjoiU3VtbWFyeSIsYWxpYXNlczpbInN1bW1hcnkiLCJjcm9zc2VkLWNpcmNsZSJdLGhhbmRsZXI6Vkt9LHtzZW1hbnRpY05hbWU6IlRhZ2dlZCBEb2N1bWVudCIsbmFtZToiVGFnZ2VkIERvY3VtZW50IixzaG9ydE5hbWU6InRhZy1kb2MiLGRlc2NyaXB0aW9uOiJUYWdnZWQgZG9jdW1lbnQiLGFsaWFzZXM6WyJ0YWctZG9jIiwidGFnZ2VkLWRvY3VtZW50Il0saGFuZGxlcjp2Wn0se3NlbWFudGljTmFtZToiVGFnZ2VkIFByb2Nlc3MiLG5hbWU6IlRhZ2dlZCBSZWN0YW5nbGUiLHNob3J0TmFtZToidGFnLXJlY3QiLGRlc2NyaXB0aW9uOiJUYWdnZWQgcHJvY2VzcyIsYWxpYXNlczpbInRhZ2dlZC1yZWN0YW5nbGUiLCJ0YWctcHJvYyIsInRhZ2dlZC1wcm9jZXNzIl0saGFuZGxlcjpnWn0se3NlbWFudGljTmFtZToiUGFwZXIgVGFwZSIsbmFtZToiRmxhZyIsc2hvcnROYW1lOiJmbGFnIixkZXNjcmlwdGlvbjoiUGFwZXIgdGFwZSIsYWxpYXNlczpbInBhcGVyLXRhcGUiXSxoYW5kbGVyOk5afSx7c2VtYW50aWNOYW1lOiJPZGQiLG5hbWU6Ik9kZCIsc2hvcnROYW1lOiJvZGQiLGRlc2NyaXB0aW9uOiJPZGQgc2hhcGUiLGludGVybmFsQWxpYXNlczpbInJlY3RfbGVmdF9pbnZfYXJyb3ciXSxoYW5kbGVyOlhRfSx7c2VtYW50aWNOYW1lOiJMaW5lZCBEb2N1bWVudCIsbmFtZToiTGluZWQgRG9jdW1lbnQiLHNob3J0TmFtZToibGluLWRvYyIsZGVzY3JpcHRpb246IkxpbmVkIGRvY3VtZW50IixhbGlhc2VzOlsibGluZWQtZG9jdW1lbnQiXSxoYW5kbGVyOkZRfV0sU19lPW8oKCk9PntsZXQgZT1bLi4uT2JqZWN0LmVudHJpZXMoe3N0YXRlOmxaLGNob2ljZTpGSyxub3RlOkhRLHJlY3RXaXRoVGl0bGU6S1EsbGFiZWxSZWN0Ol9RLGljb25TcXVhcmU6VFEsaWNvbkNpcmNsZTp2USxpY29uOmdRLGljb25Sb3VuZGVkOmJRLGltYWdlU3F1YXJlOkVRLGFuY2hvcjpSSyxrYW5iYW5JdGVtOlVaLGNsYXNzQm94OiRaLGVyQm94OktELHJlcXVpcmVtZW50Qm94OkdafSksLi4uRV9lLmZsYXRNYXAocj0+W3Iuc2hvcnROYW1lLC4uLiJhbGlhc2VzImluIHI/ci5hbGlhc2VzOltdLC4uLiJpbnRlcm5hbEFsaWFzZXMiaW4gcj9yLmludGVybmFsQWxpYXNlczpbXV0ubWFwKGk9PltpLHIuaGFuZGxlcl0pKV07cmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhlKX0sImdlbmVyYXRlU2hhcGVNYXAiKSxRRD1TX2UoKTtvKFdaLCJpc1ZhbGlkU2hhcGUiKX0pO3ZhciBDX2UsVXcscVo9TigoKT0+eyJ1c2Ugc3RyaWN0IjtkcigpO0V3KCk7enQoKTt2dCgpO1pEKCk7aXIoKTtncigpO21pKCk7Q19lPSJmbG93Y2hhcnQtIixVdz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMudmVydGV4Q291bnRlcj0wO3RoaXMuY29uZmlnPW1lKCk7dGhpcy52ZXJ0aWNlcz1uZXcgTWFwO3RoaXMuZWRnZXM9W107dGhpcy5jbGFzc2VzPW5ldyBNYXA7dGhpcy5zdWJHcmFwaHM9W107dGhpcy5zdWJHcmFwaExvb2t1cD1uZXcgTWFwO3RoaXMudG9vbHRpcHM9bmV3IE1hcDt0aGlzLnN1YkNvdW50PTA7dGhpcy5maXJzdEdyYXBoRmxhZz0hMDt0aGlzLnNlY0NvdW50PS0xO3RoaXMucG9zQ3Jvc3NSZWY9W107dGhpcy5mdW5zPVtdO3RoaXMuc2V0QWNjVGl0bGU9THI7dGhpcy5zZXRBY2NEZXNjcmlwdGlvbj1Ocjt0aGlzLnNldERpYWdyYW1UaXRsZT0kcjt0aGlzLmdldEFjY1RpdGxlPVJyO3RoaXMuZ2V0QWNjRGVzY3JpcHRpb249TXI7dGhpcy5nZXREaWFncmFtVGl0bGU9SXI7dGhpcy5mdW5zLnB1c2godGhpcy5zZXR1cFRvb2xUaXBzLmJpbmQodGhpcykpLHRoaXMuYWRkVmVydGV4PXRoaXMuYWRkVmVydGV4LmJpbmQodGhpcyksdGhpcy5maXJzdEdyYXBoPXRoaXMuZmlyc3RHcmFwaC5iaW5kKHRoaXMpLHRoaXMuc2V0RGlyZWN0aW9uPXRoaXMuc2V0RGlyZWN0aW9uLmJpbmQodGhpcyksdGhpcy5hZGRTdWJHcmFwaD10aGlzLmFkZFN1YkdyYXBoLmJpbmQodGhpcyksdGhpcy5hZGRMaW5rPXRoaXMuYWRkTGluay5iaW5kKHRoaXMpLHRoaXMuc2V0TGluaz10aGlzLnNldExpbmsuYmluZCh0aGlzKSx0aGlzLnVwZGF0ZUxpbms9dGhpcy51cGRhdGVMaW5rLmJpbmQodGhpcyksdGhpcy5hZGRDbGFzcz10aGlzLmFkZENsYXNzLmJpbmQodGhpcyksdGhpcy5zZXRDbGFzcz10aGlzLnNldENsYXNzLmJpbmQodGhpcyksdGhpcy5kZXN0cnVjdExpbms9dGhpcy5kZXN0cnVjdExpbmsuYmluZCh0aGlzKSx0aGlzLnNldENsaWNrRXZlbnQ9dGhpcy5zZXRDbGlja0V2ZW50LmJpbmQodGhpcyksdGhpcy5zZXRUb29sdGlwPXRoaXMuc2V0VG9vbHRpcC5iaW5kKHRoaXMpLHRoaXMudXBkYXRlTGlua0ludGVycG9sYXRlPXRoaXMudXBkYXRlTGlua0ludGVycG9sYXRlLmJpbmQodGhpcyksdGhpcy5zZXRDbGlja0Z1bj10aGlzLnNldENsaWNrRnVuLmJpbmQodGhpcyksdGhpcy5iaW5kRnVuY3Rpb25zPXRoaXMuYmluZEZ1bmN0aW9ucy5iaW5kKHRoaXMpLHRoaXMubGV4PXtmaXJzdEdyYXBoOnRoaXMuZmlyc3RHcmFwaC5iaW5kKHRoaXMpfSx0aGlzLmNsZWFyKCksdGhpcy5zZXRHZW4oImdlbi0yIil9c3RhdGlje28odGhpcywiRmxvd0RCIil9c2FuaXRpemVUZXh0KGUpe3JldHVybiBaZS5zYW5pdGl6ZVRleHQoZSx0aGlzLmNvbmZpZyl9bG9va1VwRG9tSWQoZSl7Zm9yKGxldCByIG9mIHRoaXMudmVydGljZXMudmFsdWVzKCkpaWYoci5pZD09PWUpcmV0dXJuIHIuZG9tSWQ7cmV0dXJuIGV9YWRkVmVydGV4KGUscixuLGksYSxzLGw9e30sdSl7aWYoIWV8fGUudHJpbSgpLmxlbmd0aD09PTApcmV0dXJuO2xldCBoO2lmKHUhPT12b2lkIDApe2xldCBtO3UuaW5jbHVkZXMoYApgKT9tPXUrYApgOm09YHsKYCt1K2AKfWAsaD1jbShtLHtzY2hlbWE6bG19KX1sZXQgZj10aGlzLmVkZ2VzLmZpbmQobT0+bS5pZD09PWUpO2lmKGYpe2xldCBtPWg7bT8uYW5pbWF0ZSE9PXZvaWQgMCYmKGYuYW5pbWF0ZT1tLmFuaW1hdGUpLG0/LmFuaW1hdGlvbiE9PXZvaWQgMCYmKGYuYW5pbWF0aW9uPW0uYW5pbWF0aW9uKTtyZXR1cm59bGV0IGQscD10aGlzLnZlcnRpY2VzLmdldChlKTtpZihwPT09dm9pZCAwJiYocD17aWQ6ZSxsYWJlbFR5cGU6InRleHQiLGRvbUlkOkNfZStlKyItIit0aGlzLnZlcnRleENvdW50ZXIsc3R5bGVzOltdLGNsYXNzZXM6W119LHRoaXMudmVydGljZXMuc2V0KGUscCkpLHRoaXMudmVydGV4Q291bnRlcisrLHIhPT12b2lkIDA/KHRoaXMuY29uZmlnPW1lKCksZD10aGlzLnNhbml0aXplVGV4dChyLnRleHQudHJpbSgpKSxwLmxhYmVsVHlwZT1yLnR5cGUsZC5zdGFydHNXaXRoKCciJykmJmQuZW5kc1dpdGgoJyInKSYmKGQ9ZC5zdWJzdHJpbmcoMSxkLmxlbmd0aC0xKSkscC50ZXh0PWQpOnAudGV4dD09PXZvaWQgMCYmKHAudGV4dD1lKSxuIT09dm9pZCAwJiYocC50eXBlPW4pLGk/LmZvckVhY2gobT0+e3Auc3R5bGVzLnB1c2gobSl9KSxhPy5mb3JFYWNoKG09PntwLmNsYXNzZXMucHVzaChtKX0pLHMhPT12b2lkIDAmJihwLmRpcj1zKSxwLnByb3BzPT09dm9pZCAwP3AucHJvcHM9bDpsIT09dm9pZCAwJiZPYmplY3QuYXNzaWduKHAucHJvcHMsbCksaCE9PXZvaWQgMCl7aWYoaC5zaGFwZSl7aWYoaC5zaGFwZSE9PWguc2hhcGUudG9Mb3dlckNhc2UoKXx8aC5zaGFwZS5pbmNsdWRlcygiXyIpKXRocm93IG5ldyBFcnJvcihgTm8gc3VjaCBzaGFwZTogJHtoLnNoYXBlfS4gU2hhcGUgbmFtZXMgc2hvdWxkIGJlIGxvd2VyY2FzZS5gKTtpZighV1ooaC5zaGFwZSkpdGhyb3cgbmV3IEVycm9yKGBObyBzdWNoIHNoYXBlOiAke2guc2hhcGV9LmApO3AudHlwZT1oPy5zaGFwZX1oPy5sYWJlbCYmKHAudGV4dD1oPy5sYWJlbCksaD8uaWNvbiYmKHAuaWNvbj1oPy5pY29uLCFoLmxhYmVsPy50cmltKCkmJnAudGV4dD09PWUmJihwLnRleHQ9IiIpKSxoPy5mb3JtJiYocC5mb3JtPWg/LmZvcm0pLGg/LnBvcyYmKHAucG9zPWg/LnBvcyksaD8uaW1nJiYocC5pbWc9aD8uaW1nLCFoLmxhYmVsPy50cmltKCkmJnAudGV4dD09PWUmJihwLnRleHQ9IiIpKSxoPy5jb25zdHJhaW50JiYocC5jb25zdHJhaW50PWguY29uc3RyYWludCksaC53JiYocC5hc3NldFdpZHRoPU51bWJlcihoLncpKSxoLmgmJihwLmFzc2V0SGVpZ2h0PU51bWJlcihoLmgpKX19YWRkU2luZ2xlTGluayhlLHIsbixpKXtsZXQgbD17c3RhcnQ6ZSxlbmQ6cix0eXBlOnZvaWQgMCx0ZXh0OiIiLGxhYmVsVHlwZToidGV4dCIsY2xhc3NlczpbXSxpc1VzZXJEZWZpbmVkSWQ6ITEsaW50ZXJwb2xhdGU6dGhpcy5lZGdlcy5kZWZhdWx0SW50ZXJwb2xhdGV9O1kuaW5mbygiYWJjNzggR290IGVkZ2UuLi4iLGwpO2xldCB1PW4udGV4dDtpZih1IT09dm9pZCAwJiYobC50ZXh0PXRoaXMuc2FuaXRpemVUZXh0KHUudGV4dC50cmltKCkpLGwudGV4dC5zdGFydHNXaXRoKCciJykmJmwudGV4dC5lbmRzV2l0aCgnIicpJiYobC50ZXh0PWwudGV4dC5zdWJzdHJpbmcoMSxsLnRleHQubGVuZ3RoLTEpKSxsLmxhYmVsVHlwZT11LnR5cGUpLG4hPT12b2lkIDAmJihsLnR5cGU9bi50eXBlLGwuc3Ryb2tlPW4uc3Ryb2tlLGwubGVuZ3RoPW4ubGVuZ3RoPjEwPzEwOm4ubGVuZ3RoKSxpJiYhdGhpcy5lZGdlcy5zb21lKGg9PmguaWQ9PT1pKSlsLmlkPWksbC5pc1VzZXJEZWZpbmVkSWQ9ITA7ZWxzZXtsZXQgaD10aGlzLmVkZ2VzLmZpbHRlcihmPT5mLnN0YXJ0PT09bC5zdGFydCYmZi5lbmQ9PT1sLmVuZCk7aC5sZW5ndGg9PT0wP2wuaWQ9JGgobC5zdGFydCxsLmVuZCx7Y291bnRlcjowLHByZWZpeDoiTCJ9KTpsLmlkPSRoKGwuc3RhcnQsbC5lbmQse2NvdW50ZXI6aC5sZW5ndGgrMSxwcmVmaXg6IkwifSl9aWYodGhpcy5lZGdlcy5sZW5ndGg8KHRoaXMuY29uZmlnLm1heEVkZ2VzPz81MDApKVkuaW5mbygiUHVzaGluZyBlZGdlLi4uIiksdGhpcy5lZGdlcy5wdXNoKGwpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKGBFZGdlIGxpbWl0IGV4Y2VlZGVkLiAke3RoaXMuZWRnZXMubGVuZ3RofSBlZGdlcyBmb3VuZCwgYnV0IHRoZSBsaW1pdCBpcyAke3RoaXMuY29uZmlnLm1heEVkZ2VzfS4KCkluaXRpYWxpemUgbWVybWFpZCB3aXRoIG1heEVkZ2VzIHNldCB0byBhIGhpZ2hlciBudW1iZXIgdG8gYWxsb3cgbW9yZSBlZGdlcy4KWW91IGNhbm5vdCBzZXQgdGhpcyBjb25maWcgdmlhIGNvbmZpZ3VyYXRpb24gaW5zaWRlIHRoZSBkaWFncmFtIGFzIGl0IGlzIGEgc2VjdXJlIGNvbmZpZy4KWW91IGhhdmUgdG8gY2FsbCBtZXJtYWlkLmluaXRpYWxpemUuYCl9aXNMaW5rRGF0YShlKXtyZXR1cm4gZSE9PW51bGwmJnR5cGVvZiBlPT0ib2JqZWN0IiYmImlkImluIGUmJnR5cGVvZiBlLmlkPT0ic3RyaW5nIn1hZGRMaW5rKGUscixuKXtsZXQgaT10aGlzLmlzTGlua0RhdGEobik/bi5pZC5yZXBsYWNlKCJAIiwiIik6dm9pZCAwO1kuaW5mbygiYWRkTGluayIsZSxyLGkpO2ZvcihsZXQgYSBvZiBlKWZvcihsZXQgcyBvZiByKXtsZXQgbD1hPT09ZVtlLmxlbmd0aC0xXSx1PXM9PT1yWzBdO2wmJnU/dGhpcy5hZGRTaW5nbGVMaW5rKGEscyxuLGkpOnRoaXMuYWRkU2luZ2xlTGluayhhLHMsbix2b2lkIDApfX11cGRhdGVMaW5rSW50ZXJwb2xhdGUoZSxyKXtlLmZvckVhY2gobj0+e249PT0iZGVmYXVsdCI/dGhpcy5lZGdlcy5kZWZhdWx0SW50ZXJwb2xhdGU9cjp0aGlzLmVkZ2VzW25dLmludGVycG9sYXRlPXJ9KX11cGRhdGVMaW5rKGUscil7ZS5mb3JFYWNoKG49PntpZih0eXBlb2Ygbj09Im51bWJlciImJm4+PXRoaXMuZWRnZXMubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgVGhlIGluZGV4ICR7bn0gZm9yIGxpbmtTdHlsZSBpcyBvdXQgb2YgYm91bmRzLiBWYWxpZCBpbmRpY2VzIGZvciBsaW5rU3R5bGUgYXJlIGJldHdlZW4gMCBhbmQgJHt0aGlzLmVkZ2VzLmxlbmd0aC0xfS4gKEhlbHA6IEVuc3VyZSB0aGF0IHRoZSBpbmRleCBpcyB3aXRoaW4gdGhlIHJhbmdlIG9mIGV4aXN0aW5nIGVkZ2VzLilgKTtuPT09ImRlZmF1bHQiP3RoaXMuZWRnZXMuZGVmYXVsdFN0eWxlPXI6KHRoaXMuZWRnZXNbbl0uc3R5bGU9ciwodGhpcy5lZGdlc1tuXT8uc3R5bGU/Lmxlbmd0aD8/MCk+MCYmIXRoaXMuZWRnZXNbbl0/LnN0eWxlPy5zb21lKGk9Pmk/LnN0YXJ0c1dpdGgoImZpbGwiKSkmJnRoaXMuZWRnZXNbbl0/LnN0eWxlPy5wdXNoKCJmaWxsOm5vbmUiKSl9KX1hZGRDbGFzcyhlLHIpe2xldCBuPXIuam9pbigpLnJlcGxhY2UoL1xcLC9nLCJceEE3XHhBN1x4QTciKS5yZXBsYWNlKC8sL2csIjsiKS5yZXBsYWNlKC/Cp8KnwqcvZywiLCIpLnNwbGl0KCI7Iik7ZS5zcGxpdCgiLCIpLmZvckVhY2goaT0+e2xldCBhPXRoaXMuY2xhc3Nlcy5nZXQoaSk7YT09PXZvaWQgMCYmKGE9e2lkOmksc3R5bGVzOltdLHRleHRTdHlsZXM6W119LHRoaXMuY2xhc3Nlcy5zZXQoaSxhKSksbj8uZm9yRWFjaChzPT57aWYoL2NvbG9yLy5leGVjKHMpKXtsZXQgbD1zLnJlcGxhY2UoImZpbGwiLCJiZ0ZpbGwiKTthLnRleHRTdHlsZXMucHVzaChsKX1hLnN0eWxlcy5wdXNoKHMpfSl9KX1zZXREaXJlY3Rpb24oZSl7dGhpcy5kaXJlY3Rpb249ZSwvLio8Ly5leGVjKHRoaXMuZGlyZWN0aW9uKSYmKHRoaXMuZGlyZWN0aW9uPSJSTCIpLC8uKlxeLy5leGVjKHRoaXMuZGlyZWN0aW9uKSYmKHRoaXMuZGlyZWN0aW9uPSJCVCIpLC8uKj4vLmV4ZWModGhpcy5kaXJlY3Rpb24pJiYodGhpcy5kaXJlY3Rpb249IkxSIiksLy4qdi8uZXhlYyh0aGlzLmRpcmVjdGlvbikmJih0aGlzLmRpcmVjdGlvbj0iVEIiKSx0aGlzLmRpcmVjdGlvbj09PSJURCImJih0aGlzLmRpcmVjdGlvbj0iVEIiKX1zZXRDbGFzcyhlLHIpe2ZvcihsZXQgbiBvZiBlLnNwbGl0KCIsIikpe2xldCBpPXRoaXMudmVydGljZXMuZ2V0KG4pO2kmJmkuY2xhc3Nlcy5wdXNoKHIpO2xldCBhPXRoaXMuZWRnZXMuZmluZChsPT5sLmlkPT09bik7YSYmYS5jbGFzc2VzLnB1c2gocik7bGV0IHM9dGhpcy5zdWJHcmFwaExvb2t1cC5nZXQobik7cyYmcy5jbGFzc2VzLnB1c2gocil9fXNldFRvb2x0aXAoZSxyKXtpZihyIT09dm9pZCAwKXtyPXRoaXMuc2FuaXRpemVUZXh0KHIpO2ZvcihsZXQgbiBvZiBlLnNwbGl0KCIsIikpdGhpcy50b29sdGlwcy5zZXQodGhpcy52ZXJzaW9uPT09Imdlbi0xIj90aGlzLmxvb2tVcERvbUlkKG4pOm4scil9fXNldENsaWNrRnVuKGUscixuKXtsZXQgaT10aGlzLmxvb2tVcERvbUlkKGUpO2lmKG1lKCkuc2VjdXJpdHlMZXZlbCE9PSJsb29zZSJ8fHI9PT12b2lkIDApcmV0dXJuO2xldCBhPVtdO2lmKHR5cGVvZiBuPT0ic3RyaW5nIil7YT1uLnNwbGl0KC8sKD89KD86KD86W14iXSoiKXsyfSkqW14iXSokKS8pO2ZvcihsZXQgbD0wO2w8YS5sZW5ndGg7bCsrKXtsZXQgdT1hW2xdLnRyaW0oKTt1LnN0YXJ0c1dpdGgoJyInKSYmdS5lbmRzV2l0aCgnIicpJiYodT11LnN1YnN0cigxLHUubGVuZ3RoLTIpKSxhW2xdPXV9fWEubGVuZ3RoPT09MCYmYS5wdXNoKGUpO2xldCBzPXRoaXMudmVydGljZXMuZ2V0KGUpO3MmJihzLmhhdmVDYWxsYmFjaz0hMCx0aGlzLmZ1bnMucHVzaCgoKT0+e2xldCBsPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtpZD0iJHtpfSJdYCk7bCE9PW51bGwmJmwuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCgpPT57R3QucnVuRnVuYyhyLC4uLmEpfSwhMSl9KSl9c2V0TGluayhlLHIsbil7ZS5zcGxpdCgiLCIpLmZvckVhY2goaT0+e2xldCBhPXRoaXMudmVydGljZXMuZ2V0KGkpO2EhPT12b2lkIDAmJihhLmxpbms9R3QuZm9ybWF0VXJsKHIsdGhpcy5jb25maWcpLGEubGlua1RhcmdldD1uKX0pLHRoaXMuc2V0Q2xhc3MoZSwiY2xpY2thYmxlIil9Z2V0VG9vbHRpcChlKXtyZXR1cm4gdGhpcy50b29sdGlwcy5nZXQoZSl9c2V0Q2xpY2tFdmVudChlLHIsbil7ZS5zcGxpdCgiLCIpLmZvckVhY2goaT0+e3RoaXMuc2V0Q2xpY2tGdW4oaSxyLG4pfSksdGhpcy5zZXRDbGFzcyhlLCJjbGlja2FibGUiKX1iaW5kRnVuY3Rpb25zKGUpe3RoaXMuZnVucy5mb3JFYWNoKHI9PntyKGUpfSl9Z2V0RGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuZGlyZWN0aW9uPy50cmltKCl9Z2V0VmVydGljZXMoKXtyZXR1cm4gdGhpcy52ZXJ0aWNlc31nZXRFZGdlcygpe3JldHVybiB0aGlzLmVkZ2VzfWdldENsYXNzZXMoKXtyZXR1cm4gdGhpcy5jbGFzc2VzfXNldHVwVG9vbFRpcHMoZSl7bGV0IHI9R2UoIi5tZXJtYWlkVG9vbHRpcCIpOyhyLl9ncm91cHN8fHIpWzBdWzBdPT09bnVsbCYmKHI9R2UoImJvZHkiKS5hcHBlbmQoImRpdiIpLmF0dHIoImNsYXNzIiwibWVybWFpZFRvb2x0aXAiKS5zdHlsZSgib3BhY2l0eSIsMCkpLEdlKGUpLnNlbGVjdCgic3ZnIikuc2VsZWN0QWxsKCJnLm5vZGUiKS5vbigibW91c2VvdmVyIixhPT57bGV0IHM9R2UoYS5jdXJyZW50VGFyZ2V0KTtpZihzLmF0dHIoInRpdGxlIik9PT1udWxsKXJldHVybjtsZXQgdT1hLmN1cnJlbnRUYXJnZXQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3IudHJhbnNpdGlvbigpLmR1cmF0aW9uKDIwMCkuc3R5bGUoIm9wYWNpdHkiLCIuOSIpLHIudGV4dChzLmF0dHIoInRpdGxlIikpLnN0eWxlKCJsZWZ0Iix3aW5kb3cuc2Nyb2xsWCt1LmxlZnQrKHUucmlnaHQtdS5sZWZ0KS8yKyJweCIpLnN0eWxlKCJ0b3AiLHdpbmRvdy5zY3JvbGxZK3UuYm90dG9tKyJweCIpLHIuaHRtbChyLmh0bWwoKS5yZXBsYWNlKC8mbHQ7YnJcLyZndDsvZywiPGJyLz4iKSkscy5jbGFzc2VkKCJob3ZlciIsITApfSkub24oIm1vdXNlb3V0IixhPT57ci50cmFuc2l0aW9uKCkuZHVyYXRpb24oNTAwKS5zdHlsZSgib3BhY2l0eSIsMCksR2UoYS5jdXJyZW50VGFyZ2V0KS5jbGFzc2VkKCJob3ZlciIsITEpfSl9Y2xlYXIoZT0iZ2VuLTIiKXt0aGlzLnZlcnRpY2VzPW5ldyBNYXAsdGhpcy5jbGFzc2VzPW5ldyBNYXAsdGhpcy5lZGdlcz1bXSx0aGlzLmZ1bnM9W3RoaXMuc2V0dXBUb29sVGlwcy5iaW5kKHRoaXMpXSx0aGlzLnN1YkdyYXBocz1bXSx0aGlzLnN1YkdyYXBoTG9va3VwPW5ldyBNYXAsdGhpcy5zdWJDb3VudD0wLHRoaXMudG9vbHRpcHM9bmV3IE1hcCx0aGlzLmZpcnN0R3JhcGhGbGFnPSEwLHRoaXMudmVyc2lvbj1lLHRoaXMuY29uZmlnPW1lKCksQXIoKX1zZXRHZW4oZSl7dGhpcy52ZXJzaW9uPWV8fCJnZW4tMiJ9ZGVmYXVsdFN0eWxlKCl7cmV0dXJuImZpbGw6I2ZmYTtzdHJva2U6ICNmNjY7IHN0cm9rZS13aWR0aDogM3B4OyBzdHJva2UtZGFzaGFycmF5OiA1LCA1O2ZpbGw6I2ZmYTtzdHJva2U6ICM2NjY7In1hZGRTdWJHcmFwaChlLHIsbil7bGV0IGk9ZS50ZXh0LnRyaW0oKSxhPW4udGV4dDtlPT09biYmL1xzLy5leGVjKG4udGV4dCkmJihpPXZvaWQgMCk7bGV0IHM9byhmPT57bGV0IGQ9e2Jvb2xlYW46e30sbnVtYmVyOnt9LHN0cmluZzp7fX0scD1bXSxtO3JldHVybntub2RlTGlzdDpmLmZpbHRlcihmdW5jdGlvbih5KXtsZXQgdj10eXBlb2YgeTtyZXR1cm4geS5zdG10JiZ5LnN0bXQ9PT0iZGlyIj8obT15LnZhbHVlLCExKTp5LnRyaW0oKT09PSIiPyExOnYgaW4gZD9kW3ZdLmhhc093blByb3BlcnR5KHkpPyExOmRbdl1beV09ITA6cC5pbmNsdWRlcyh5KT8hMTpwLnB1c2goeSl9KSxkaXI6bX19LCJ1bmlxIikse25vZGVMaXN0OmwsZGlyOnV9PXMoci5mbGF0KCkpO2lmKHRoaXMudmVyc2lvbj09PSJnZW4tMSIpZm9yKGxldCBmPTA7ZjxsLmxlbmd0aDtmKyspbFtmXT10aGlzLmxvb2tVcERvbUlkKGxbZl0pO2k9aT8/InN1YkdyYXBoIit0aGlzLnN1YkNvdW50LGE9YXx8IiIsYT10aGlzLnNhbml0aXplVGV4dChhKSx0aGlzLnN1YkNvdW50PXRoaXMuc3ViQ291bnQrMTtsZXQgaD17aWQ6aSxub2RlczpsLHRpdGxlOmEudHJpbSgpLGNsYXNzZXM6W10sZGlyOnUsbGFiZWxUeXBlOm4udHlwZX07cmV0dXJuIFkuaW5mbygiQWRkaW5nIixoLmlkLGgubm9kZXMsaC5kaXIpLGgubm9kZXM9dGhpcy5tYWtlVW5pcShoLHRoaXMuc3ViR3JhcGhzKS5ub2Rlcyx0aGlzLnN1YkdyYXBocy5wdXNoKGgpLHRoaXMuc3ViR3JhcGhMb29rdXAuc2V0KGksaCksaX1nZXRQb3NGb3JJZChlKXtmb3IobGV0W3Isbl1vZiB0aGlzLnN1YkdyYXBocy5lbnRyaWVzKCkpaWYobi5pZD09PWUpcmV0dXJuIHI7cmV0dXJuLTF9aW5kZXhOb2RlczIoZSxyKXtsZXQgbj10aGlzLnN1YkdyYXBoc1tyXS5ub2RlcztpZih0aGlzLnNlY0NvdW50PXRoaXMuc2VjQ291bnQrMSx0aGlzLnNlY0NvdW50PjJlMylyZXR1cm57cmVzdWx0OiExLGNvdW50OjB9O2lmKHRoaXMucG9zQ3Jvc3NSZWZbdGhpcy5zZWNDb3VudF09cix0aGlzLnN1YkdyYXBoc1tyXS5pZD09PWUpcmV0dXJue3Jlc3VsdDohMCxjb3VudDowfTtsZXQgaT0wLGE9MTtmb3IoO2k8bi5sZW5ndGg7KXtsZXQgcz10aGlzLmdldFBvc0ZvcklkKG5baV0pO2lmKHM+PTApe2xldCBsPXRoaXMuaW5kZXhOb2RlczIoZSxzKTtpZihsLnJlc3VsdClyZXR1cm57cmVzdWx0OiEwLGNvdW50OmErbC5jb3VudH07YT1hK2wuY291bnR9aT1pKzF9cmV0dXJue3Jlc3VsdDohMSxjb3VudDphfX1nZXREZXB0aEZpcnN0UG9zKGUpe3JldHVybiB0aGlzLnBvc0Nyb3NzUmVmW2VdfWluZGV4Tm9kZXMoKXt0aGlzLnNlY0NvdW50PS0xLHRoaXMuc3ViR3JhcGhzLmxlbmd0aD4wJiZ0aGlzLmluZGV4Tm9kZXMyKCJub25lIix0aGlzLnN1YkdyYXBocy5sZW5ndGgtMSl9Z2V0U3ViR3JhcGhzKCl7cmV0dXJuIHRoaXMuc3ViR3JhcGhzfWZpcnN0R3JhcGgoKXtyZXR1cm4gdGhpcy5maXJzdEdyYXBoRmxhZz8odGhpcy5maXJzdEdyYXBoRmxhZz0hMSwhMCk6ITF9ZGVzdHJ1Y3RTdGFydExpbmsoZSl7bGV0IHI9ZS50cmltKCksbj0iYXJyb3dfb3BlbiI7c3dpdGNoKHJbMF0pe2Nhc2UiPCI6bj0iYXJyb3dfcG9pbnQiLHI9ci5zbGljZSgxKTticmVhaztjYXNlIngiOm49ImFycm93X2Nyb3NzIixyPXIuc2xpY2UoMSk7YnJlYWs7Y2FzZSJvIjpuPSJhcnJvd19jaXJjbGUiLHI9ci5zbGljZSgxKTticmVha31sZXQgaT0ibm9ybWFsIjtyZXR1cm4gci5pbmNsdWRlcygiPSIpJiYoaT0idGhpY2siKSxyLmluY2x1ZGVzKCIuIikmJihpPSJkb3R0ZWQiKSx7dHlwZTpuLHN0cm9rZTppfX1jb3VudENoYXIoZSxyKXtsZXQgbj1yLmxlbmd0aCxpPTA7Zm9yKGxldCBhPTA7YTxuOysrYSlyW2FdPT09ZSYmKytpO3JldHVybiBpfWRlc3RydWN0RW5kTGluayhlKXtsZXQgcj1lLnRyaW0oKSxuPXIuc2xpY2UoMCwtMSksaT0iYXJyb3dfb3BlbiI7c3dpdGNoKHIuc2xpY2UoLTEpKXtjYXNlIngiOmk9ImFycm93X2Nyb3NzIixyLnN0YXJ0c1dpdGgoIngiKSYmKGk9ImRvdWJsZV8iK2ksbj1uLnNsaWNlKDEpKTticmVhaztjYXNlIj4iOmk9ImFycm93X3BvaW50IixyLnN0YXJ0c1dpdGgoIjwiKSYmKGk9ImRvdWJsZV8iK2ksbj1uLnNsaWNlKDEpKTticmVhaztjYXNlIm8iOmk9ImFycm93X2NpcmNsZSIsci5zdGFydHNXaXRoKCJvIikmJihpPSJkb3VibGVfIitpLG49bi5zbGljZSgxKSk7YnJlYWt9bGV0IGE9Im5vcm1hbCIscz1uLmxlbmd0aC0xO24uc3RhcnRzV2l0aCgiPSIpJiYoYT0idGhpY2siKSxuLnN0YXJ0c1dpdGgoIn4iKSYmKGE9ImludmlzaWJsZSIpO2xldCBsPXRoaXMuY291bnRDaGFyKCIuIixuKTtyZXR1cm4gbCYmKGE9ImRvdHRlZCIscz1sKSx7dHlwZTppLHN0cm9rZTphLGxlbmd0aDpzfX1kZXN0cnVjdExpbmsoZSxyKXtsZXQgbj10aGlzLmRlc3RydWN0RW5kTGluayhlKSxpO2lmKHIpe2lmKGk9dGhpcy5kZXN0cnVjdFN0YXJ0TGluayhyKSxpLnN0cm9rZSE9PW4uc3Ryb2tlKXJldHVybnt0eXBlOiJJTlZBTElEIixzdHJva2U6IklOVkFMSUQifTtpZihpLnR5cGU9PT0iYXJyb3dfb3BlbiIpaS50eXBlPW4udHlwZTtlbHNle2lmKGkudHlwZSE9PW4udHlwZSlyZXR1cm57dHlwZToiSU5WQUxJRCIsc3Ryb2tlOiJJTlZBTElEIn07aS50eXBlPSJkb3VibGVfIitpLnR5cGV9cmV0dXJuIGkudHlwZT09PSJkb3VibGVfYXJyb3ciJiYoaS50eXBlPSJkb3VibGVfYXJyb3dfcG9pbnQiKSxpLmxlbmd0aD1uLmxlbmd0aCxpfXJldHVybiBufWV4aXN0cyhlLHIpe2ZvcihsZXQgbiBvZiBlKWlmKG4ubm9kZXMuaW5jbHVkZXMocikpcmV0dXJuITA7cmV0dXJuITF9bWFrZVVuaXEoZSxyKXtsZXQgbj1bXTtyZXR1cm4gZS5ub2Rlcy5mb3JFYWNoKChpLGEpPT57dGhpcy5leGlzdHMocixpKXx8bi5wdXNoKGUubm9kZXNbYV0pfSkse25vZGVzOm59fWdldFR5cGVGcm9tVmVydGV4KGUpe2lmKGUuaW1nKXJldHVybiJpbWFnZVNxdWFyZSI7aWYoZS5pY29uKXJldHVybiBlLmZvcm09PT0iY2lyY2xlIj8iaWNvbkNpcmNsZSI6ZS5mb3JtPT09InNxdWFyZSI/Imljb25TcXVhcmUiOmUuZm9ybT09PSJyb3VuZGVkIj8iaWNvblJvdW5kZWQiOiJpY29uIjtzd2l0Y2goZS50eXBlKXtjYXNlInNxdWFyZSI6Y2FzZSB2b2lkIDA6cmV0dXJuInNxdWFyZVJlY3QiO2Nhc2Uicm91bmQiOnJldHVybiJyb3VuZGVkUmVjdCI7Y2FzZSJlbGxpcHNlIjpyZXR1cm4iZWxsaXBzZSI7ZGVmYXVsdDpyZXR1cm4gZS50eXBlfX1maW5kTm9kZShlLHIpe3JldHVybiBlLmZpbmQobj0+bi5pZD09PXIpfWRlc3RydWN0RWRnZVR5cGUoZSl7bGV0IHI9Im5vbmUiLG49ImFycm93X3BvaW50Ijtzd2l0Y2goZSl7Y2FzZSJhcnJvd19wb2ludCI6Y2FzZSJhcnJvd19jaXJjbGUiOmNhc2UiYXJyb3dfY3Jvc3MiOm49ZTticmVhaztjYXNlImRvdWJsZV9hcnJvd19wb2ludCI6Y2FzZSJkb3VibGVfYXJyb3dfY2lyY2xlIjpjYXNlImRvdWJsZV9hcnJvd19jcm9zcyI6cj1lLnJlcGxhY2UoImRvdWJsZV8iLCIiKSxuPXI7YnJlYWt9cmV0dXJue2Fycm93VHlwZVN0YXJ0OnIsYXJyb3dUeXBlRW5kOm59fWFkZE5vZGVGcm9tVmVydGV4KGUscixuLGksYSxzKXtsZXQgbD1uLmdldChlLmlkKSx1PWkuZ2V0KGUuaWQpPz8hMSxoPXRoaXMuZmluZE5vZGUocixlLmlkKTtpZihoKWguY3NzU3R5bGVzPWUuc3R5bGVzLGguY3NzQ29tcGlsZWRTdHlsZXM9dGhpcy5nZXRDb21waWxlZFN0eWxlcyhlLmNsYXNzZXMpLGguY3NzQ2xhc3Nlcz1lLmNsYXNzZXMuam9pbigiICIpO2Vsc2V7bGV0IGY9e2lkOmUuaWQsbGFiZWw6ZS50ZXh0LGxhYmVsU3R5bGU6IiIscGFyZW50SWQ6bCxwYWRkaW5nOmEuZmxvd2NoYXJ0Py5wYWRkaW5nfHw4LGNzc1N0eWxlczplLnN0eWxlcyxjc3NDb21waWxlZFN0eWxlczp0aGlzLmdldENvbXBpbGVkU3R5bGVzKFsiZGVmYXVsdCIsIm5vZGUiLC4uLmUuY2xhc3Nlc10pLGNzc0NsYXNzZXM6ImRlZmF1bHQgIitlLmNsYXNzZXMuam9pbigiICIpLGRpcjplLmRpcixkb21JZDplLmRvbUlkLGxvb2s6cyxsaW5rOmUubGluayxsaW5rVGFyZ2V0OmUubGlua1RhcmdldCx0b29sdGlwOnRoaXMuZ2V0VG9vbHRpcChlLmlkKSxpY29uOmUuaWNvbixwb3M6ZS5wb3MsaW1nOmUuaW1nLGFzc2V0V2lkdGg6ZS5hc3NldFdpZHRoLGFzc2V0SGVpZ2h0OmUuYXNzZXRIZWlnaHQsY29uc3RyYWludDplLmNvbnN0cmFpbnR9O3U/ci5wdXNoKHsuLi5mLGlzR3JvdXA6ITAsc2hhcGU6InJlY3QifSk6ci5wdXNoKHsuLi5mLGlzR3JvdXA6ITEsc2hhcGU6dGhpcy5nZXRUeXBlRnJvbVZlcnRleChlKX0pfX1nZXRDb21waWxlZFN0eWxlcyhlKXtsZXQgcj1bXTtmb3IobGV0IG4gb2YgZSl7bGV0IGk9dGhpcy5jbGFzc2VzLmdldChuKTtpPy5zdHlsZXMmJihyPVsuLi5yLC4uLmkuc3R5bGVzPz9bXV0ubWFwKGE9PmEudHJpbSgpKSksaT8udGV4dFN0eWxlcyYmKHI9Wy4uLnIsLi4uaS50ZXh0U3R5bGVzPz9bXV0ubWFwKGE9PmEudHJpbSgpKSl9cmV0dXJuIHJ9Z2V0RGF0YSgpe2xldCBlPW1lKCkscj1bXSxuPVtdLGk9dGhpcy5nZXRTdWJHcmFwaHMoKSxhPW5ldyBNYXAscz1uZXcgTWFwO2ZvcihsZXQgaD1pLmxlbmd0aC0xO2g+PTA7aC0tKXtsZXQgZj1pW2hdO2Yubm9kZXMubGVuZ3RoPjAmJnMuc2V0KGYuaWQsITApO2ZvcihsZXQgZCBvZiBmLm5vZGVzKWEuc2V0KGQsZi5pZCl9Zm9yKGxldCBoPWkubGVuZ3RoLTE7aD49MDtoLS0pe2xldCBmPWlbaF07ci5wdXNoKHtpZDpmLmlkLGxhYmVsOmYudGl0bGUsbGFiZWxTdHlsZToiIixwYXJlbnRJZDphLmdldChmLmlkKSxwYWRkaW5nOjgsY3NzQ29tcGlsZWRTdHlsZXM6dGhpcy5nZXRDb21waWxlZFN0eWxlcyhmLmNsYXNzZXMpLGNzc0NsYXNzZXM6Zi5jbGFzc2VzLmpvaW4oIiAiKSxzaGFwZToicmVjdCIsZGlyOmYuZGlyLGlzR3JvdXA6ITAsbG9vazplLmxvb2t9KX10aGlzLmdldFZlcnRpY2VzKCkuZm9yRWFjaChoPT57dGhpcy5hZGROb2RlRnJvbVZlcnRleChoLHIsYSxzLGUsZS5sb29rfHwiY2xhc3NpYyIpfSk7bGV0IHU9dGhpcy5nZXRFZGdlcygpO3JldHVybiB1LmZvckVhY2goKGgsZik9PntsZXR7YXJyb3dUeXBlU3RhcnQ6ZCxhcnJvd1R5cGVFbmQ6cH09dGhpcy5kZXN0cnVjdEVkZ2VUeXBlKGgudHlwZSksbT1bLi4udS5kZWZhdWx0U3R5bGU/P1tdXTtoLnN0eWxlJiZtLnB1c2goLi4uaC5zdHlsZSk7bGV0IGc9e2lkOiRoKGguc3RhcnQsaC5lbmQse2NvdW50ZXI6ZixwcmVmaXg6IkwifSxoLmlkKSxpc1VzZXJEZWZpbmVkSWQ6aC5pc1VzZXJEZWZpbmVkSWQsc3RhcnQ6aC5zdGFydCxlbmQ6aC5lbmQsdHlwZTpoLnR5cGU/PyJub3JtYWwiLGxhYmVsOmgudGV4dCxsYWJlbHBvczoiYyIsdGhpY2tuZXNzOmguc3Ryb2tlLG1pbmxlbjpoLmxlbmd0aCxjbGFzc2VzOmg/LnN0cm9rZT09PSJpbnZpc2libGUiPyIiOiJlZGdlLXRoaWNrbmVzcy1ub3JtYWwgZWRnZS1wYXR0ZXJuLXNvbGlkIGZsb3djaGFydC1saW5rIixhcnJvd1R5cGVTdGFydDpoPy5zdHJva2U9PT0iaW52aXNpYmxlInx8aD8udHlwZT09PSJhcnJvd19vcGVuIj8ibm9uZSI6ZCxhcnJvd1R5cGVFbmQ6aD8uc3Ryb2tlPT09ImludmlzaWJsZSJ8fGg/LnR5cGU9PT0iYXJyb3dfb3BlbiI/Im5vbmUiOnAsYXJyb3doZWFkU3R5bGU6ImZpbGw6ICMzMzMiLGNzc0NvbXBpbGVkU3R5bGVzOnRoaXMuZ2V0Q29tcGlsZWRTdHlsZXMoaC5jbGFzc2VzKSxsYWJlbFN0eWxlOm0sc3R5bGU6bSxwYXR0ZXJuOmguc3Ryb2tlLGxvb2s6ZS5sb29rLGFuaW1hdGU6aC5hbmltYXRlLGFuaW1hdGlvbjpoLmFuaW1hdGlvbixjdXJ2ZTpoLmludGVycG9sYXRlfHx0aGlzLmVkZ2VzLmRlZmF1bHRJbnRlcnBvbGF0ZXx8ZS5mbG93Y2hhcnQ/LmN1cnZlfTtuLnB1c2goZyl9KSx7bm9kZXM6cixlZGdlczpuLG90aGVyOnt9LGNvbmZpZzplfX1kZWZhdWx0Q29uZmlnKCl7cmV0dXJuIEEzLmZsb3djaGFydH19fSk7dmFyIHljLGdtPU4oKCk9PnsidXNlIHN0cmljdCI7ZHIoKTt5Yz1vKCh0LGUpPT57bGV0IHI7cmV0dXJuIGU9PT0ic2FuZGJveCImJihyPUdlKCIjaSIrdCkpLChlPT09InNhbmRib3giP0dlKHIubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keSk6R2UoImJvZHkiKSkuc2VsZWN0KGBbaWQ9IiR7dH0iXWApfSwiZ2V0RGlhZ3JhbUVsZW1lbnQiKX0pO3ZhciBSdSx3Mj1OKCgpPT57InVzZSBzdHJpY3QiO1J1PW8oKHtmbG93Y2hhcnQ6dH0pPT57bGV0IGU9dD8uc3ViR3JhcGhUaXRsZU1hcmdpbj8udG9wPz8wLHI9dD8uc3ViR3JhcGhUaXRsZU1hcmdpbj8uYm90dG9tPz8wLG49ZStyO3JldHVybntzdWJHcmFwaFRpdGxlVG9wTWFyZ2luOmUsc3ViR3JhcGhUaXRsZUJvdHRvbU1hcmdpbjpyLHN1YkdyYXBoVGl0bGVUb3RhbE1hcmdpbjpufX0sImdldFN1YkdyYXBoVGl0bGVNYXJnaW5zIil9KTt2YXIgWVosQV9lLF9fZSxEX2UsTF9lLFJfZSxOX2UsWFoseW0salosSHc9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt6dCgpO2dyKCk7dnQoKTt3MigpO2RyKCk7V3QoKTt0bygpO1JEKCk7R3coKTtxaCgpO1V0KCk7WVo9byhhc3luYyh0LGUpPT57WS5pbmZvKCJDcmVhdGluZyBzdWJncmFwaCByZWN0IGZvciAiLGUuaWQsZSk7bGV0IHI9bWUoKSx7dGhlbWVWYXJpYWJsZXM6bixoYW5kRHJhd25TZWVkOml9PXIse2NsdXN0ZXJCa2c6YSxjbHVzdGVyQm9yZGVyOnN9PW4se2xhYmVsU3R5bGVzOmwsbm9kZVN0eWxlczp1LGJvcmRlclN0eWxlczpoLGJhY2tncm91bmRTdHlsZXM6Zn09UWUoZSksZD10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiY2x1c3RlciAiK2UuY3NzQ2xhc3NlcykuYXR0cigiaWQiLGUuaWQpLmF0dHIoImRhdGEtbG9vayIsZS5sb29rKSxwPWZyKHIuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpLG09ZC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImNsdXN0ZXItbGFiZWwgIiksZz1hd2FpdCBIbihtLGUubGFiZWwse3N0eWxlOmUubGFiZWxTdHlsZSx1c2VIdG1sTGFiZWxzOnAsaXNOb2RlOiEwfSkseT1nLmdldEJCb3goKTtpZihmcihyLmZsb3djaGFydC5odG1sTGFiZWxzKSl7bGV0IEE9Zy5jaGlsZHJlblswXSxTPUdlKGcpO3k9QS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxTLmF0dHIoIndpZHRoIix5LndpZHRoKSxTLmF0dHIoImhlaWdodCIseS5oZWlnaHQpfWxldCB2PWUud2lkdGg8PXkud2lkdGgrZS5wYWRkaW5nP3kud2lkdGgrZS5wYWRkaW5nOmUud2lkdGg7ZS53aWR0aDw9eS53aWR0aCtlLnBhZGRpbmc/ZS5kaWZmPSh2LWUud2lkdGgpLzItZS5wYWRkaW5nOmUuZGlmZj0tZS5wYWRkaW5nO2xldCB4PWUuaGVpZ2h0LGI9ZS54LXYvMix3PWUueS14LzI7WS50cmFjZSgiRGF0YSAiLGUsSlNPTi5zdHJpbmdpZnkoZSkpO2xldCBDO2lmKGUubG9vaz09PSJoYW5kRHJhd24iKXtsZXQgQT1YZS5zdmcoZCksUz1LZShlLHtyb3VnaG5lc3M6LjcsZmlsbDphLHN0cm9rZTpzLGZpbGxXZWlnaHQ6MyxzZWVkOml9KSxfPUEucGF0aChOYShiLHcsdix4LDApLFMpO0M9ZC5pbnNlcnQoKCk9PihZLmRlYnVnKCJSb3VnaCBub2RlIGluc2VydCBDWEMiLF8pLF8pLCI6Zmlyc3QtY2hpbGQiKSxDLnNlbGVjdCgicGF0aDpudGgtY2hpbGQoMikiKS5hdHRyKCJzdHlsZSIsaC5qb2luKCI7IikpLEMuc2VsZWN0KCJwYXRoIikuYXR0cigic3R5bGUiLGYuam9pbigiOyIpLnJlcGxhY2UoImZpbGwiLCJzdHJva2UiKSl9ZWxzZSBDPWQuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksQy5hdHRyKCJzdHlsZSIsdSkuYXR0cigicngiLGUucngpLmF0dHIoInJ5IixlLnJ5KS5hdHRyKCJ4IixiKS5hdHRyKCJ5Iix3KS5hdHRyKCJ3aWR0aCIsdikuYXR0cigiaGVpZ2h0Iix4KTtsZXR7c3ViR3JhcGhUaXRsZVRvcE1hcmdpbjpUfT1SdShyKTtpZihtLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke2UueC15LndpZHRoLzJ9LCAke2UueS1lLmhlaWdodC8yK1R9KWApLGwpe2xldCBBPW0uc2VsZWN0KCJzcGFuIik7QSYmQS5hdHRyKCJzdHlsZSIsbCl9bGV0IEU9Qy5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiBlLm9mZnNldFg9MCxlLndpZHRoPUUud2lkdGgsZS5oZWlnaHQ9RS5oZWlnaHQsZS5vZmZzZXRZPXkuaGVpZ2h0LWUucGFkZGluZy8yLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKEEpe3JldHVybiBWaChlLEEpfSx7Y2x1c3RlcjpkLGxhYmVsQkJveDp5fX0sInJlY3QiKSxBX2U9bygodCxlKT0+e2xldCByPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJub3RlLWNsdXN0ZXIiKS5hdHRyKCJpZCIsZS5pZCksbj1yLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLGk9MCplLnBhZGRpbmcsYT1pLzI7bi5hdHRyKCJyeCIsZS5yeCkuYXR0cigicnkiLGUucnkpLmF0dHIoIngiLGUueC1lLndpZHRoLzItYSkuYXR0cigieSIsZS55LWUuaGVpZ2h0LzItYSkuYXR0cigid2lkdGgiLGUud2lkdGgraSkuYXR0cigiaGVpZ2h0IixlLmhlaWdodCtpKS5hdHRyKCJmaWxsIiwibm9uZSIpO2xldCBzPW4ubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gZS53aWR0aD1zLndpZHRoLGUuaGVpZ2h0PXMuaGVpZ2h0LGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGwpe3JldHVybiBWaChlLGwpfSx7Y2x1c3RlcjpyLGxhYmVsQkJveDp7d2lkdGg6MCxoZWlnaHQ6MH19fSwibm90ZUdyb3VwIiksX19lPW8oYXN5bmModCxlKT0+e2xldCByPW1lKCkse3RoZW1lVmFyaWFibGVzOm4saGFuZERyYXduU2VlZDppfT1yLHthbHRCYWNrZ3JvdW5kOmEsY29tcG9zaXRlQmFja2dyb3VuZDpzLGNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZDpsLG5vZGVCb3JkZXI6dX09bixoPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLGUuY3NzQ2xhc3NlcykuYXR0cigiaWQiLGUuaWQpLmF0dHIoImRhdGEtaWQiLGUuaWQpLmF0dHIoImRhdGEtbG9vayIsZS5sb29rKSxmPWguaW5zZXJ0KCJnIiwiOmZpcnN0LWNoaWxkIiksZD1oLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiY2x1c3Rlci1sYWJlbCIpLHA9aC5hcHBlbmQoInJlY3QiKSxtPWQubm9kZSgpLmFwcGVuZENoaWxkKGF3YWl0IGdjKGUubGFiZWwsZS5sYWJlbFN0eWxlLHZvaWQgMCwhMCkpLGc9bS5nZXRCQm94KCk7aWYoZnIoci5mbG93Y2hhcnQuaHRtbExhYmVscykpe2xldCBfPW0uY2hpbGRyZW5bMF0sST1HZShtKTtnPV8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksSS5hdHRyKCJ3aWR0aCIsZy53aWR0aCksSS5hdHRyKCJoZWlnaHQiLGcuaGVpZ2h0KX1sZXQgeT0wKmUucGFkZGluZyx2PXkvMix4PShlLndpZHRoPD1nLndpZHRoK2UucGFkZGluZz9nLndpZHRoK2UucGFkZGluZzplLndpZHRoKSt5O2Uud2lkdGg8PWcud2lkdGgrZS5wYWRkaW5nP2UuZGlmZj0oeC1lLndpZHRoKS8yLWUucGFkZGluZzplLmRpZmY9LWUucGFkZGluZztsZXQgYj1lLmhlaWdodCt5LHc9ZS5oZWlnaHQreS1nLmhlaWdodC02LEM9ZS54LXgvMixUPWUueS1iLzI7ZS53aWR0aD14O2xldCBFPWUueS1lLmhlaWdodC8yLXYrZy5oZWlnaHQrMixBO2lmKGUubG9vaz09PSJoYW5kRHJhd24iKXtsZXQgXz1lLmNzc0NsYXNzZXMuaW5jbHVkZXMoInN0YXRlZGlhZ3JhbS1jbHVzdGVyLWFsdCIpLEk9WGUuc3ZnKGgpLEQ9ZS5yeHx8ZS5yeT9JLnBhdGgoTmEoQyxULHgsYiwxMCkse3JvdWdobmVzczouNyxmaWxsOmwsZmlsbFN0eWxlOiJzb2xpZCIsc3Ryb2tlOnUsc2VlZDppfSk6SS5yZWN0YW5nbGUoQyxULHgsYix7c2VlZDppfSk7QT1oLmluc2VydCgoKT0+RCwiOmZpcnN0LWNoaWxkIik7bGV0IGs9SS5yZWN0YW5nbGUoQyxFLHgsdyx7ZmlsbDpfP2E6cyxmaWxsU3R5bGU6Xz8iaGFjaHVyZSI6InNvbGlkIixzdHJva2U6dSxzZWVkOml9KTtBPWguaW5zZXJ0KCgpPT5ELCI6Zmlyc3QtY2hpbGQiKSxwPWguaW5zZXJ0KCgpPT5rKX1lbHNlIEE9Zi5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxBLmF0dHIoImNsYXNzIiwib3V0ZXIiKS5hdHRyKCJ4IixDKS5hdHRyKCJ5IixUKS5hdHRyKCJ3aWR0aCIseCkuYXR0cigiaGVpZ2h0IixiKS5hdHRyKCJkYXRhLWxvb2siLGUubG9vaykscC5hdHRyKCJjbGFzcyIsImlubmVyIikuYXR0cigieCIsQykuYXR0cigieSIsRSkuYXR0cigid2lkdGgiLHgpLmF0dHIoImhlaWdodCIsdyk7ZC5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtlLngtZy53aWR0aC8yfSwgJHtUKzEtKGZyKHIuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpPzA6Myl9KWApO2xldCBTPUEubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gZS5oZWlnaHQ9Uy5oZWlnaHQsZS5vZmZzZXRYPTAsZS5vZmZzZXRZPWcuaGVpZ2h0LWUucGFkZGluZy8yLGUubGFiZWxCQm94PWcsZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oXyl7cmV0dXJuIFZoKGUsXyl9LHtjbHVzdGVyOmgsbGFiZWxCQm94Omd9fSwicm91bmRlZFdpdGhUaXRsZSIpLERfZT1vKGFzeW5jKHQsZSk9PntZLmluZm8oIkNyZWF0aW5nIHN1YmdyYXBoIHJlY3QgZm9yICIsZS5pZCxlKTtsZXQgcj1tZSgpLHt0aGVtZVZhcmlhYmxlczpuLGhhbmREcmF3blNlZWQ6aX09cix7Y2x1c3RlckJrZzphLGNsdXN0ZXJCb3JkZXI6c309bix7bGFiZWxTdHlsZXM6bCxub2RlU3R5bGVzOnUsYm9yZGVyU3R5bGVzOmgsYmFja2dyb3VuZFN0eWxlczpmfT1RZShlKSxkPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJjbHVzdGVyICIrZS5jc3NDbGFzc2VzKS5hdHRyKCJpZCIsZS5pZCkuYXR0cigiZGF0YS1sb29rIixlLmxvb2spLHA9ZnIoci5mbG93Y2hhcnQuaHRtbExhYmVscyksbT1kLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiY2x1c3Rlci1sYWJlbCAiKSxnPWF3YWl0IEhuKG0sZS5sYWJlbCx7c3R5bGU6ZS5sYWJlbFN0eWxlLHVzZUh0bWxMYWJlbHM6cCxpc05vZGU6ITAsd2lkdGg6ZS53aWR0aH0pLHk9Zy5nZXRCQm94KCk7aWYoZnIoci5mbG93Y2hhcnQuaHRtbExhYmVscykpe2xldCBBPWcuY2hpbGRyZW5bMF0sUz1HZShnKTt5PUEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksUy5hdHRyKCJ3aWR0aCIseS53aWR0aCksUy5hdHRyKCJoZWlnaHQiLHkuaGVpZ2h0KX1sZXQgdj1lLndpZHRoPD15LndpZHRoK2UucGFkZGluZz95LndpZHRoK2UucGFkZGluZzplLndpZHRoO2Uud2lkdGg8PXkud2lkdGgrZS5wYWRkaW5nP2UuZGlmZj0odi1lLndpZHRoKS8yLWUucGFkZGluZzplLmRpZmY9LWUucGFkZGluZztsZXQgeD1lLmhlaWdodCxiPWUueC12LzIsdz1lLnkteC8yO1kudHJhY2UoIkRhdGEgIixlLEpTT04uc3RyaW5naWZ5KGUpKTtsZXQgQztpZihlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0IEE9WGUuc3ZnKGQpLFM9S2UoZSx7cm91Z2huZXNzOi43LGZpbGw6YSxzdHJva2U6cyxmaWxsV2VpZ2h0OjQsc2VlZDppfSksXz1BLnBhdGgoTmEoYix3LHYseCxlLnJ4KSxTKTtDPWQuaW5zZXJ0KCgpPT4oWS5kZWJ1ZygiUm91Z2ggbm9kZSBpbnNlcnQgQ1hDIixfKSxfKSwiOmZpcnN0LWNoaWxkIiksQy5zZWxlY3QoInBhdGg6bnRoLWNoaWxkKDIpIikuYXR0cigic3R5bGUiLGguam9pbigiOyIpKSxDLnNlbGVjdCgicGF0aCIpLmF0dHIoInN0eWxlIixmLmpvaW4oIjsiKS5yZXBsYWNlKCJmaWxsIiwic3Ryb2tlIikpfWVsc2UgQz1kLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLEMuYXR0cigic3R5bGUiLHUpLmF0dHIoInJ4IixlLnJ4KS5hdHRyKCJyeSIsZS5yeSkuYXR0cigieCIsYikuYXR0cigieSIsdykuYXR0cigid2lkdGgiLHYpLmF0dHIoImhlaWdodCIseCk7bGV0e3N1YkdyYXBoVGl0bGVUb3BNYXJnaW46VH09UnUocik7aWYobS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtlLngteS53aWR0aC8yfSwgJHtlLnktZS5oZWlnaHQvMitUfSlgKSxsKXtsZXQgQT1tLnNlbGVjdCgic3BhbiIpO0EmJkEuYXR0cigic3R5bGUiLGwpfWxldCBFPUMubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gZS5vZmZzZXRYPTAsZS53aWR0aD1FLndpZHRoLGUuaGVpZ2h0PUUuaGVpZ2h0LGUub2Zmc2V0WT15LmhlaWdodC1lLnBhZGRpbmcvMixlLmludGVyc2VjdD1mdW5jdGlvbihBKXtyZXR1cm4gVmgoZSxBKX0se2NsdXN0ZXI6ZCxsYWJlbEJCb3g6eX19LCJrYW5iYW5TZWN0aW9uIiksTF9lPW8oKHQsZSk9PntsZXQgcj1tZSgpLHt0aGVtZVZhcmlhYmxlczpuLGhhbmREcmF3blNlZWQ6aX09cix7bm9kZUJvcmRlcjphfT1uLHM9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsZS5jc3NDbGFzc2VzKS5hdHRyKCJpZCIsZS5pZCkuYXR0cigiZGF0YS1sb29rIixlLmxvb2spLGw9cy5pbnNlcnQoImciLCI6Zmlyc3QtY2hpbGQiKSx1PTAqZS5wYWRkaW5nLGg9ZS53aWR0aCt1O2UuZGlmZj0tZS5wYWRkaW5nO2xldCBmPWUuaGVpZ2h0K3UsZD1lLngtaC8yLHA9ZS55LWYvMjtlLndpZHRoPWg7bGV0IG07aWYoZS5sb29rPT09ImhhbmREcmF3biIpe2xldCB2PVhlLnN2ZyhzKS5yZWN0YW5nbGUoZCxwLGgsZix7ZmlsbDoibGlnaHRncmV5Iixyb3VnaG5lc3M6LjUsc3Ryb2tlTGluZURhc2g6WzVdLHN0cm9rZTphLHNlZWQ6aX0pO209cy5pbnNlcnQoKCk9PnYsIjpmaXJzdC1jaGlsZCIpfWVsc2UgbT1sLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLG0uYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieCIsZCkuYXR0cigieSIscCkuYXR0cigid2lkdGgiLGgpLmF0dHIoImhlaWdodCIsZikuYXR0cigiZGF0YS1sb29rIixlLmxvb2spO2xldCBnPW0ubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gZS5oZWlnaHQ9Zy5oZWlnaHQsZS5vZmZzZXRYPTAsZS5vZmZzZXRZPTAsZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oeSl7cmV0dXJuIFZoKGUseSl9LHtjbHVzdGVyOnMsbGFiZWxCQm94Ont9fX0sImRpdmlkZXIiKSxSX2U9WVosTl9lPXtyZWN0OllaLHNxdWFyZVJlY3Q6Ul9lLHJvdW5kZWRXaXRoVGl0bGU6X19lLG5vdGVHcm91cDpBX2UsZGl2aWRlcjpMX2Usa2FuYmFuU2VjdGlvbjpEX2V9LFhaPW5ldyBNYXAseW09byhhc3luYyh0LGUpPT57bGV0IHI9ZS5zaGFwZXx8InJlY3QiLG49YXdhaXQgTl9lW3JdKHQsZSk7cmV0dXJuIFhaLnNldChlLmlkLG4pLG59LCJpbnNlcnRDbHVzdGVyIiksalo9bygoKT0+e1haPW5ldyBNYXB9LCJjbGVhciIpfSk7ZnVuY3Rpb24gV3codCxlKXtpZih0PT09dm9pZCAwfHxlPT09dm9pZCAwKXJldHVybnthbmdsZTowLGRlbHRhWDowLGRlbHRhWTowfTt0PVduKHQpLGU9V24oZSk7bGV0W3Isbl09W3QueCx0LnldLFtpLGFdPVtlLngsZS55XSxzPWktcixsPWEtbjtyZXR1cm57YW5nbGU6TWF0aC5hdGFuKGwvcyksZGVsdGFYOnMsZGVsdGFZOmx9fXZhciAkbyxXbixxdyxKRD1OKCgpPT57InVzZSBzdHJpY3QiOyRvPXthZ2dyZWdhdGlvbjoxOCxleHRlbnNpb246MTgsY29tcG9zaXRpb246MTgsZGVwZW5kZW5jeTo2LGxvbGxpcG9wOjEzLjUsYXJyb3dfcG9pbnQ6NH07byhXdywiY2FsY3VsYXRlRGVsdGFBbmRBbmdsZSIpO1duPW8odD0+QXJyYXkuaXNBcnJheSh0KT97eDp0WzBdLHk6dFsxXX06dCwicG9pbnRUcmFuc2Zvcm1lciIpLHF3PW8odD0+KHt4Om8oZnVuY3Rpb24oZSxyLG4pe2xldCBpPTAsYT1XbihuWzBdKS54PFduKG5bbi5sZW5ndGgtMV0pLng/ImxlZnQiOiJyaWdodCI7aWYocj09PTAmJk9iamVjdC5oYXNPd24oJG8sdC5hcnJvd1R5cGVTdGFydCkpe2xldHthbmdsZTptLGRlbHRhWDpnfT1XdyhuWzBdLG5bMV0pO2k9JG9bdC5hcnJvd1R5cGVTdGFydF0qTWF0aC5jb3MobSkqKGc+PTA/MTotMSl9ZWxzZSBpZihyPT09bi5sZW5ndGgtMSYmT2JqZWN0Lmhhc093bigkbyx0LmFycm93VHlwZUVuZCkpe2xldHthbmdsZTptLGRlbHRhWDpnfT1XdyhuW24ubGVuZ3RoLTFdLG5bbi5sZW5ndGgtMl0pO2k9JG9bdC5hcnJvd1R5cGVFbmRdKk1hdGguY29zKG0pKihnPj0wPzE6LTEpfWxldCBzPU1hdGguYWJzKFduKGUpLngtV24obltuLmxlbmd0aC0xXSkueCksbD1NYXRoLmFicyhXbihlKS55LVduKG5bbi5sZW5ndGgtMV0pLnkpLHU9TWF0aC5hYnMoV24oZSkueC1XbihuWzBdKS54KSxoPU1hdGguYWJzKFduKGUpLnktV24oblswXSkueSksZj0kb1t0LmFycm93VHlwZVN0YXJ0XSxkPSRvW3QuYXJyb3dUeXBlRW5kXSxwPTE7aWYoczxkJiZzPjAmJmw8ZCl7bGV0IG09ZCtwLXM7bSo9YT09PSJyaWdodCI/LTE6MSxpLT1tfWlmKHU8ZiYmdT4wJiZoPGYpe2xldCBtPWYrcC11O20qPWE9PT0icmlnaHQiPy0xOjEsaSs9bX1yZXR1cm4gV24oZSkueCtpfSwieCIpLHk6byhmdW5jdGlvbihlLHIsbil7bGV0IGk9MCxhPVduKG5bMF0pLnk8V24obltuLmxlbmd0aC0xXSkueT8iZG93biI6InVwIjtpZihyPT09MCYmT2JqZWN0Lmhhc093bigkbyx0LmFycm93VHlwZVN0YXJ0KSl7bGV0e2FuZ2xlOm0sZGVsdGFZOmd9PVd3KG5bMF0sblsxXSk7aT0kb1t0LmFycm93VHlwZVN0YXJ0XSpNYXRoLmFicyhNYXRoLnNpbihtKSkqKGc+PTA/MTotMSl9ZWxzZSBpZihyPT09bi5sZW5ndGgtMSYmT2JqZWN0Lmhhc093bigkbyx0LmFycm93VHlwZUVuZCkpe2xldHthbmdsZTptLGRlbHRhWTpnfT1XdyhuW24ubGVuZ3RoLTFdLG5bbi5sZW5ndGgtMl0pO2k9JG9bdC5hcnJvd1R5cGVFbmRdKk1hdGguYWJzKE1hdGguc2luKG0pKSooZz49MD8xOi0xKX1sZXQgcz1NYXRoLmFicyhXbihlKS55LVduKG5bbi5sZW5ndGgtMV0pLnkpLGw9TWF0aC5hYnMoV24oZSkueC1XbihuW24ubGVuZ3RoLTFdKS54KSx1PU1hdGguYWJzKFduKGUpLnktV24oblswXSkueSksaD1NYXRoLmFicyhXbihlKS54LVduKG5bMF0pLngpLGY9JG9bdC5hcnJvd1R5cGVTdGFydF0sZD0kb1t0LmFycm93VHlwZUVuZF0scD0xO2lmKHM8ZCYmcz4wJiZsPGQpe2xldCBtPWQrcC1zO20qPWE9PT0idXAiPy0xOjEsaS09bX1pZih1PGYmJnU+MCYmaDxmKXtsZXQgbT1mK3AtdTttKj1hPT09InVwIj8tMToxLGkrPW19cmV0dXJuIFduKGUpLnkraX0sInkiKX0pLCJnZXRMaW5lRnVuY3Rpb25zV2l0aE9mZnNldCIpfSk7dmFyIFFaLE1fZSxLWixaWj1OKCgpPT57InVzZSBzdHJpY3QiO3Z0KCk7UVo9bygodCxlLHIsbixpLGEpPT57ZS5hcnJvd1R5cGVTdGFydCYmS1oodCwic3RhcnQiLGUuYXJyb3dUeXBlU3RhcnQscixuLGksYSksZS5hcnJvd1R5cGVFbmQmJktaKHQsImVuZCIsZS5hcnJvd1R5cGVFbmQscixuLGksYSl9LCJhZGRFZGdlTWFya2VycyIpLE1fZT17YXJyb3dfY3Jvc3M6e3R5cGU6ImNyb3NzIixmaWxsOiExfSxhcnJvd19wb2ludDp7dHlwZToicG9pbnQiLGZpbGw6ITB9LGFycm93X2JhcmI6e3R5cGU6ImJhcmIiLGZpbGw6ITB9LGFycm93X2NpcmNsZTp7dHlwZToiY2lyY2xlIixmaWxsOiExfSxhZ2dyZWdhdGlvbjp7dHlwZToiYWdncmVnYXRpb24iLGZpbGw6ITF9LGV4dGVuc2lvbjp7dHlwZToiZXh0ZW5zaW9uIixmaWxsOiExfSxjb21wb3NpdGlvbjp7dHlwZToiY29tcG9zaXRpb24iLGZpbGw6ITB9LGRlcGVuZGVuY3k6e3R5cGU6ImRlcGVuZGVuY3kiLGZpbGw6ITB9LGxvbGxpcG9wOnt0eXBlOiJsb2xsaXBvcCIsZmlsbDohMX0sb25seV9vbmU6e3R5cGU6Im9ubHlPbmUiLGZpbGw6ITF9LHplcm9fb3Jfb25lOnt0eXBlOiJ6ZXJvT3JPbmUiLGZpbGw6ITF9LG9uZV9vcl9tb3JlOnt0eXBlOiJvbmVPck1vcmUiLGZpbGw6ITF9LHplcm9fb3JfbW9yZTp7dHlwZToiemVyb09yTW9yZSIsZmlsbDohMX0scmVxdWlyZW1lbnRfYXJyb3c6e3R5cGU6InJlcXVpcmVtZW50X2Fycm93IixmaWxsOiExfSxyZXF1aXJlbWVudF9jb250YWluczp7dHlwZToicmVxdWlyZW1lbnRfY29udGFpbnMiLGZpbGw6ITF9fSxLWj1vKCh0LGUscixuLGksYSxzKT0+e2xldCBsPU1fZVtyXTtpZighbCl7WS53YXJuKGBVbmtub3duIGFycm93IHR5cGU6ICR7cn1gKTtyZXR1cm59bGV0IHU9bC50eXBlLGY9YCR7aX1fJHthfS0ke3V9JHtlPT09InN0YXJ0Ij8iU3RhcnQiOiJFbmQifWA7aWYocyYmcy50cmltKCkhPT0iIil7bGV0IGQ9cy5yZXBsYWNlKC9bXlxkQS1aYS16XS9nLCJfIikscD1gJHtmfV8ke2R9YDtpZighZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocCkpe2xldCBtPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGYpO2lmKG0pe2xldCBnPW0uY2xvbmVOb2RlKCEwKTtnLmlkPXAsZy5xdWVyeVNlbGVjdG9yQWxsKCJwYXRoLCBjaXJjbGUsIGxpbmUiKS5mb3JFYWNoKHY9Pnt2LnNldEF0dHJpYnV0ZSgic3Ryb2tlIixzKSxsLmZpbGwmJnYuc2V0QXR0cmlidXRlKCJmaWxsIixzKX0pLG0ucGFyZW50Tm9kZT8uYXBwZW5kQ2hpbGQoZyl9fXQuYXR0cihgbWFya2VyLSR7ZX1gLGB1cmwoJHtufSMke3B9KWApfWVsc2UgdC5hdHRyKGBtYXJrZXItJHtlfWAsYHVybCgke259IyR7Zn0pYCl9LCJhZGRFZGdlTWFya2VyIil9KTtmdW5jdGlvbiBZdyh0LGUpe21lKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMmJnQmJih0LnN0eWxlLndpZHRoPWUubGVuZ3RoKjkrInB4Iix0LnN0eWxlLmhlaWdodD0iMTJweCIpfWZ1bmN0aW9uIFBfZSh0KXtsZXQgZT1bXSxyPVtdO2ZvcihsZXQgbj0xO248dC5sZW5ndGgtMTtuKyspe2xldCBpPXRbbi0xXSxhPXRbbl0scz10W24rMV07KGkueD09PWEueCYmYS55PT09cy55JiZNYXRoLmFicyhhLngtcy54KT41JiZNYXRoLmFicyhhLnktaS55KT41fHxpLnk9PT1hLnkmJmEueD09PXMueCYmTWF0aC5hYnMoYS54LWkueCk+NSYmTWF0aC5hYnMoYS55LXMueSk+NSkmJihlLnB1c2goYSksci5wdXNoKG4pKX1yZXR1cm57Y29ybmVyUG9pbnRzOmUsY29ybmVyUG9pbnRQb3NpdGlvbnM6cn19dmFyIFh3LHBhLHRKLFQyLGp3LEt3LElfZSxPX2UsSlosZUosQl9lLFF3LGVMPU4oKCk9PnsidXNlIHN0cmljdCI7enQoKTtncigpO3Z0KCk7dG8oKTtpcigpO0pEKCk7dzIoKTtkcigpO1d0KCk7R3coKTtaWigpO1V0KCk7WHc9bmV3IE1hcCxwYT1uZXcgTWFwLHRKPW8oKCk9PntYdy5jbGVhcigpLHBhLmNsZWFyKCl9LCJjbGVhciIpLFQyPW8odD0+dD90LnJlZHVjZSgocixuKT0+cisiOyIrbiwiIik6IiIsImdldExhYmVsU3R5bGVzIiksanc9byhhc3luYyh0LGUpPT57bGV0IHI9ZnIobWUoKS5mbG93Y2hhcnQuaHRtbExhYmVscyksbj1hd2FpdCBIbih0LGUubGFiZWwse3N0eWxlOlQyKGUubGFiZWxTdHlsZSksdXNlSHRtbExhYmVsczpyLGFkZFN2Z0JhY2tncm91bmQ6ITAsaXNOb2RlOiExfSk7WS5pbmZvKCJhYmM4MiIsZSxlLmxhYmVsVHlwZSk7bGV0IGk9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VMYWJlbCIpLGE9aS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIik7YS5ub2RlKCkuYXBwZW5kQ2hpbGQobik7bGV0IHM9bi5nZXRCQm94KCk7aWYocil7bGV0IHU9bi5jaGlsZHJlblswXSxoPUdlKG4pO3M9dS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxoLmF0dHIoIndpZHRoIixzLndpZHRoKSxoLmF0dHIoImhlaWdodCIscy5oZWlnaHQpfWEuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLXMud2lkdGgvMisiLCAiKy1zLmhlaWdodC8yKyIpIiksWHcuc2V0KGUuaWQsaSksZS53aWR0aD1zLndpZHRoLGUuaGVpZ2h0PXMuaGVpZ2h0O2xldCBsO2lmKGUuc3RhcnRMYWJlbExlZnQpe2xldCB1PWF3YWl0IGdjKGUuc3RhcnRMYWJlbExlZnQsVDIoZS5sYWJlbFN0eWxlKSksaD10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZVRlcm1pbmFscyIpLGY9aC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImlubmVyIik7bD1mLm5vZGUoKS5hcHBlbmRDaGlsZCh1KTtsZXQgZD11LmdldEJCb3goKTtmLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1kLndpZHRoLzIrIiwgIistZC5oZWlnaHQvMisiKSIpLHBhLmdldChlLmlkKXx8cGEuc2V0KGUuaWQse30pLHBhLmdldChlLmlkKS5zdGFydExlZnQ9aCxZdyhsLGUuc3RhcnRMYWJlbExlZnQpfWlmKGUuc3RhcnRMYWJlbFJpZ2h0KXtsZXQgdT1hd2FpdCBnYyhlLnN0YXJ0TGFiZWxSaWdodCxUMihlLmxhYmVsU3R5bGUpKSxoPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlVGVybWluYWxzIiksZj1oLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiaW5uZXIiKTtsPWgubm9kZSgpLmFwcGVuZENoaWxkKHUpLGYubm9kZSgpLmFwcGVuZENoaWxkKHUpO2xldCBkPXUuZ2V0QkJveCgpO2YuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWQud2lkdGgvMisiLCAiKy1kLmhlaWdodC8yKyIpIikscGEuZ2V0KGUuaWQpfHxwYS5zZXQoZS5pZCx7fSkscGEuZ2V0KGUuaWQpLnN0YXJ0UmlnaHQ9aCxZdyhsLGUuc3RhcnRMYWJlbFJpZ2h0KX1pZihlLmVuZExhYmVsTGVmdCl7bGV0IHU9YXdhaXQgZ2MoZS5lbmRMYWJlbExlZnQsVDIoZS5sYWJlbFN0eWxlKSksaD10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZVRlcm1pbmFscyIpLGY9aC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImlubmVyIik7bD1mLm5vZGUoKS5hcHBlbmRDaGlsZCh1KTtsZXQgZD11LmdldEJCb3goKTtmLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1kLndpZHRoLzIrIiwgIistZC5oZWlnaHQvMisiKSIpLGgubm9kZSgpLmFwcGVuZENoaWxkKHUpLHBhLmdldChlLmlkKXx8cGEuc2V0KGUuaWQse30pLHBhLmdldChlLmlkKS5lbmRMZWZ0PWgsWXcobCxlLmVuZExhYmVsTGVmdCl9aWYoZS5lbmRMYWJlbFJpZ2h0KXtsZXQgdT1hd2FpdCBnYyhlLmVuZExhYmVsUmlnaHQsVDIoZS5sYWJlbFN0eWxlKSksaD10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZVRlcm1pbmFscyIpLGY9aC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImlubmVyIik7bD1mLm5vZGUoKS5hcHBlbmRDaGlsZCh1KTtsZXQgZD11LmdldEJCb3goKTtmLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1kLndpZHRoLzIrIiwgIistZC5oZWlnaHQvMisiKSIpLGgubm9kZSgpLmFwcGVuZENoaWxkKHUpLHBhLmdldChlLmlkKXx8cGEuc2V0KGUuaWQse30pLHBhLmdldChlLmlkKS5lbmRSaWdodD1oLFl3KGwsZS5lbmRMYWJlbFJpZ2h0KX1yZXR1cm4gbn0sImluc2VydEVkZ2VMYWJlbCIpO28oWXcsInNldFRlcm1pbmFsV2lkdGgiKTtLdz1vKCh0LGUpPT57WS5kZWJ1ZygiTW92aW5nIGxhYmVsIGFiYzg4ICIsdC5pZCx0LmxhYmVsLFh3LmdldCh0LmlkKSxlKTtsZXQgcj1lLnVwZGF0ZWRQYXRoP2UudXBkYXRlZFBhdGg6ZS5vcmlnaW5hbFBhdGgsbj1tZSgpLHtzdWJHcmFwaFRpdGxlVG90YWxNYXJnaW46aX09UnUobik7aWYodC5sYWJlbCl7bGV0IGE9WHcuZ2V0KHQuaWQpLHM9dC54LGw9dC55O2lmKHIpe2xldCB1PUd0LmNhbGNMYWJlbFBvc2l0aW9uKHIpO1kuZGVidWcoIk1vdmluZyBsYWJlbCAiK3QubGFiZWwrIiBmcm9tICgiLHMsIiwiLGwsIikgdG8gKCIsdS54LCIsIix1LnksIikgYWJjODgiKSxlLnVwZGF0ZWRQYXRoJiYocz11LngsbD11LnkpfWEuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7c30sICR7bCtpLzJ9KWApfWlmKHQuc3RhcnRMYWJlbExlZnQpe2xldCBhPXBhLmdldCh0LmlkKS5zdGFydExlZnQscz10LngsbD10Lnk7aWYocil7bGV0IHU9R3QuY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbih0LmFycm93VHlwZVN0YXJ0PzEwOjAsInN0YXJ0X2xlZnQiLHIpO3M9dS54LGw9dS55fWEuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7c30sICR7bH0pYCl9aWYodC5zdGFydExhYmVsUmlnaHQpe2xldCBhPXBhLmdldCh0LmlkKS5zdGFydFJpZ2h0LHM9dC54LGw9dC55O2lmKHIpe2xldCB1PUd0LmNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb24odC5hcnJvd1R5cGVTdGFydD8xMDowLCJzdGFydF9yaWdodCIscik7cz11LngsbD11Lnl9YS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtzfSwgJHtsfSlgKX1pZih0LmVuZExhYmVsTGVmdCl7bGV0IGE9cGEuZ2V0KHQuaWQpLmVuZExlZnQscz10LngsbD10Lnk7aWYocil7bGV0IHU9R3QuY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbih0LmFycm93VHlwZUVuZD8xMDowLCJlbmRfbGVmdCIscik7cz11LngsbD11Lnl9YS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtzfSwgJHtsfSlgKX1pZih0LmVuZExhYmVsUmlnaHQpe2xldCBhPXBhLmdldCh0LmlkKS5lbmRSaWdodCxzPXQueCxsPXQueTtpZihyKXtsZXQgdT1HdC5jYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uKHQuYXJyb3dUeXBlRW5kPzEwOjAsImVuZF9yaWdodCIscik7cz11LngsbD11Lnl9YS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtzfSwgJHtsfSlgKX19LCJwb3NpdGlvbkVkZ2VMYWJlbCIpLElfZT1vKCh0LGUpPT57bGV0IHI9dC54LG49dC55LGk9TWF0aC5hYnMoZS54LXIpLGE9TWF0aC5hYnMoZS55LW4pLHM9dC53aWR0aC8yLGw9dC5oZWlnaHQvMjtyZXR1cm4gaT49c3x8YT49bH0sIm91dHNpZGVOb2RlIiksT19lPW8oKHQsZSxyKT0+e1kuZGVidWcoYGludGVyc2VjdGlvbiBjYWxjIGFiYzg5OgogIG91dHNpZGVQb2ludDogJHtKU09OLnN0cmluZ2lmeShlKX0KICBpbnNpZGVQb2ludCA6ICR7SlNPTi5zdHJpbmdpZnkocil9CiAgbm9kZSAgICAgICAgOiB4OiR7dC54fSB5OiR7dC55fSB3OiR7dC53aWR0aH0gaDoke3QuaGVpZ2h0fWApO2xldCBuPXQueCxpPXQueSxhPU1hdGguYWJzKG4tci54KSxzPXQud2lkdGgvMixsPXIueDxlLng/cy1hOnMrYSx1PXQuaGVpZ2h0LzIsaD1NYXRoLmFicyhlLnktci55KSxmPU1hdGguYWJzKGUueC1yLngpO2lmKE1hdGguYWJzKGktZS55KSpzPk1hdGguYWJzKG4tZS54KSp1KXtsZXQgZD1yLnk8ZS55P2UueS11LWk6aS11LWUueTtsPWYqZC9oO2xldCBwPXt4OnIueDxlLng/ci54K2w6ci54LWYrbCx5OnIueTxlLnk/ci55K2gtZDpyLnktaCtkfTtyZXR1cm4gbD09PTAmJihwLng9ZS54LHAueT1lLnkpLGY9PT0wJiYocC54PWUueCksaD09PTAmJihwLnk9ZS55KSxZLmRlYnVnKGBhYmM4OSB0b3AvYm90dG9tIGNhbGMsIFEgJHtofSwgcSAke2R9LCBSICR7Zn0sIHIgJHtsfWAscCkscH1lbHNle3IueDxlLng/bD1lLngtcy1uOmw9bi1zLWUueDtsZXQgZD1oKmwvZixwPXIueDxlLng/ci54K2YtbDpyLngtZitsLG09ci55PGUueT9yLnkrZDpyLnktZDtyZXR1cm4gWS5kZWJ1Zyhgc2lkZXMgY2FsYyBhYmM4OSwgUSAke2h9LCBxICR7ZH0sIFIgJHtmfSwgciAke2x9YCx7X3g6cCxfeTptfSksbD09PTAmJihwPWUueCxtPWUueSksZj09PTAmJihwPWUueCksaD09PTAmJihtPWUueSkse3g6cCx5Om19fX0sImludGVyc2VjdGlvbiIpLEpaPW8oKHQsZSk9PntZLndhcm4oImFiYzg4IGN1dFBhdGhBdEludGVyc2VjdCIsdCxlKTtsZXQgcj1bXSxuPXRbMF0saT0hMTtyZXR1cm4gdC5mb3JFYWNoKGE9PntpZihZLmluZm8oImFiYzg4IGNoZWNraW5nIHBvaW50IixhLGUpLCFJX2UoZSxhKSYmIWkpe2xldCBzPU9fZShlLG4sYSk7WS5kZWJ1ZygiYWJjODggaW5zaWRlIixhLG4scyksWS5kZWJ1ZygiYWJjODggaW50ZXJzZWN0aW9uIixzLGUpO2xldCBsPSExO3IuZm9yRWFjaCh1PT57bD1sfHx1Lng9PT1zLngmJnUueT09PXMueX0pLHIuc29tZSh1PT51Lng9PT1zLngmJnUueT09PXMueSk/WS53YXJuKCJhYmM4OCBubyBpbnRlcnNlY3QiLHMscik6ci5wdXNoKHMpLGk9ITB9ZWxzZSBZLndhcm4oImFiYzg4IG91dHNpZGUiLGEsbiksbj1hLGl8fHIucHVzaChhKX0pLFkuZGVidWcoInJldHVybmluZyBwb2ludHMiLHIpLHJ9LCJjdXRQYXRoQXRJbnRlcnNlY3QiKTtvKFBfZSwiZXh0cmFjdENvcm5lclBvaW50cyIpO2VKPW8oZnVuY3Rpb24odCxlLHIpe2xldCBuPWUueC10LngsaT1lLnktdC55LGE9TWF0aC5zcXJ0KG4qbitpKmkpLHM9ci9hO3JldHVybnt4OmUueC1zKm4seTplLnktcyppfX0sImZpbmRBZGphY2VudFBvaW50IiksQl9lPW8oZnVuY3Rpb24odCl7bGV0e2Nvcm5lclBvaW50UG9zaXRpb25zOmV9PVBfZSh0KSxyPVtdO2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKWlmKGUuaW5jbHVkZXMobikpe2xldCBpPXRbbi0xXSxhPXRbbisxXSxzPXRbbl0sbD1lSihpLHMsNSksdT1lSihhLHMsNSksaD11LngtbC54LGY9dS55LWwueTtyLnB1c2gobCk7bGV0IGQ9TWF0aC5zcXJ0KDIpKjIscD17eDpzLngseTpzLnl9O2lmKE1hdGguYWJzKGEueC1pLngpPjEwJiZNYXRoLmFicyhhLnktaS55KT49MTApe1kuZGVidWcoIkNvcm5lciBwb2ludCBmaXhpbmciLE1hdGguYWJzKGEueC1pLngpLE1hdGguYWJzKGEueS1pLnkpKTtsZXQgbT01O3MueD09PWwueD9wPXt4Omg8MD9sLngtbStkOmwueCttLWQseTpmPDA/bC55LWQ6bC55K2R9OnA9e3g6aDwwP2wueC1kOmwueCtkLHk6ZjwwP2wueS1tK2Q6bC55K20tZH19ZWxzZSBZLmRlYnVnKCJDb3JuZXIgcG9pbnQgc2tpcHBpbmcgZml4aW5nIixNYXRoLmFicyhhLngtaS54KSxNYXRoLmFicyhhLnktaS55KSk7ci5wdXNoKHAsdSl9ZWxzZSByLnB1c2godFtuXSk7cmV0dXJuIHJ9LCJmaXhDb3JuZXJzIiksUXc9byhmdW5jdGlvbih0LGUscixuLGksYSxzKXtsZXR7aGFuZERyYXduU2VlZDpsfT1tZSgpLHU9ZS5wb2ludHMsaD0hMSxmPWk7dmFyIGQ9YTtsZXQgcD1bXTtmb3IobGV0IF8gaW4gZS5jc3NDb21waWxlZFN0eWxlcylORChfKXx8cC5wdXNoKGUuY3NzQ29tcGlsZWRTdHlsZXNbX10pO2QuaW50ZXJzZWN0JiZmLmludGVyc2VjdCYmKHU9dS5zbGljZSgxLGUucG9pbnRzLmxlbmd0aC0xKSx1LnVuc2hpZnQoZi5pbnRlcnNlY3QodVswXSkpLFkuZGVidWcoIkxhc3QgcG9pbnQgQVBBMTIiLGUuc3RhcnQsIi0tPiIsZS5lbmQsdVt1Lmxlbmd0aC0xXSxkLGQuaW50ZXJzZWN0KHVbdS5sZW5ndGgtMV0pKSx1LnB1c2goZC5pbnRlcnNlY3QodVt1Lmxlbmd0aC0xXSkpKSxlLnRvQ2x1c3RlciYmKFkuaW5mbygidG8gY2x1c3RlciBhYmM4OCIsci5nZXQoZS50b0NsdXN0ZXIpKSx1PUpaKGUucG9pbnRzLHIuZ2V0KGUudG9DbHVzdGVyKS5ub2RlKSxoPSEwKSxlLmZyb21DbHVzdGVyJiYoWS5kZWJ1ZygiZnJvbSBjbHVzdGVyIGFiYzg4IixyLmdldChlLmZyb21DbHVzdGVyKSxKU09OLnN0cmluZ2lmeSh1LG51bGwsMikpLHU9SloodS5yZXZlcnNlKCksci5nZXQoZS5mcm9tQ2x1c3Rlcikubm9kZSkucmV2ZXJzZSgpLGg9ITApO2xldCBtPXUuZmlsdGVyKF89PiFOdW1iZXIuaXNOYU4oXy55KSk7bT1CX2UobSk7bGV0IGc9RG87c3dpdGNoKGc9d3UsZS5jdXJ2ZSl7Y2FzZSJsaW5lYXIiOmc9d3U7YnJlYWs7Y2FzZSJiYXNpcyI6Zz1EbzticmVhaztjYXNlImNhcmRpbmFsIjpnPVB2O2JyZWFrO2Nhc2UiYnVtcFgiOmc9UnY7YnJlYWs7Y2FzZSJidW1wWSI6Zz1OdjticmVhaztjYXNlImNhdG11bGxSb20iOmc9JHY7YnJlYWs7Y2FzZSJtb25vdG9uZVgiOmc9enY7YnJlYWs7Y2FzZSJtb25vdG9uZVkiOmc9R3Y7YnJlYWs7Y2FzZSJuYXR1cmFsIjpnPUYwO2JyZWFrO2Nhc2Uic3RlcCI6Zz0kMDticmVhaztjYXNlInN0ZXBBZnRlciI6Zz1VdjticmVhaztjYXNlInN0ZXBCZWZvcmUiOmc9VnY7YnJlYWs7ZGVmYXVsdDpnPURvfWxldHt4OnkseTp2fT1xdyhlKSx4PXdsKCkueCh5KS55KHYpLmN1cnZlKGcpLGI7c3dpdGNoKGUudGhpY2tuZXNzKXtjYXNlIm5vcm1hbCI6Yj0iZWRnZS10aGlja25lc3Mtbm9ybWFsIjticmVhaztjYXNlInRoaWNrIjpiPSJlZGdlLXRoaWNrbmVzcy10aGljayI7YnJlYWs7Y2FzZSJpbnZpc2libGUiOmI9ImVkZ2UtdGhpY2tuZXNzLWludmlzaWJsZSI7YnJlYWs7ZGVmYXVsdDpiPSJlZGdlLXRoaWNrbmVzcy1ub3JtYWwifXN3aXRjaChlLnBhdHRlcm4pe2Nhc2Uic29saWQiOmIrPSIgZWRnZS1wYXR0ZXJuLXNvbGlkIjticmVhaztjYXNlImRvdHRlZCI6Yis9IiBlZGdlLXBhdHRlcm4tZG90dGVkIjticmVhaztjYXNlImRhc2hlZCI6Yis9IiBlZGdlLXBhdHRlcm4tZGFzaGVkIjticmVhaztkZWZhdWx0OmIrPSIgZWRnZS1wYXR0ZXJuLXNvbGlkIn1sZXQgdyxDPXgobSksVD1BcnJheS5pc0FycmF5KGUuc3R5bGUpP2Uuc3R5bGU6W2Uuc3R5bGVdLEU9VC5maW5kKF89Pl8/LnN0YXJ0c1dpdGgoInN0cm9rZToiKSk7aWYoZS5sb29rPT09ImhhbmREcmF3biIpe2xldCBfPVhlLnN2Zyh0KTtPYmplY3QuYXNzaWduKFtdLG0pO2xldCBJPV8ucGF0aChDLHtyb3VnaG5lc3M6LjMsc2VlZDpsfSk7Yis9IiB0cmFuc2l0aW9uIix3PUdlKEkpLnNlbGVjdCgicGF0aCIpLmF0dHIoImlkIixlLmlkKS5hdHRyKCJjbGFzcyIsIiAiK2IrKGUuY2xhc3Nlcz8iICIrZS5jbGFzc2VzOiIiKSkuYXR0cigic3R5bGUiLFQ/VC5yZWR1Y2UoKGssTCk9PmsrIjsiK0wsIiIpOiIiKTtsZXQgRD13LmF0dHIoImQiKTt3LmF0dHIoImQiLEQpLHQubm9kZSgpLmFwcGVuZENoaWxkKHcubm9kZSgpKX1lbHNle2xldCBfPXAuam9pbigiOyIpLEk9VD9ULnJlZHVjZSgoTCxSKT0+TCtSKyI7IiwiIik6IiIsRD0iIjtlLmFuaW1hdGUmJihEPSIgZWRnZS1hbmltYXRpb24tZmFzdCIpLGUuYW5pbWF0aW9uJiYoRD0iIGVkZ2UtYW5pbWF0aW9uLSIrZS5hbmltYXRpb24pO2xldCBrPV8/XysiOyIrSSsiOyI6STt3PXQuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsQykuYXR0cigiaWQiLGUuaWQpLmF0dHIoImNsYXNzIiwiICIrYisoZS5jbGFzc2VzPyIgIitlLmNsYXNzZXM6IiIpKyhEPz8iIikpLmF0dHIoInN0eWxlIixrKSxFPWsubWF0Y2goL3N0cm9rZTooW147XSspLyk/LlsxXX1sZXQgQT0iIjsobWUoKS5mbG93Y2hhcnQuYXJyb3dNYXJrZXJBYnNvbHV0ZXx8bWUoKS5zdGF0ZS5hcnJvd01hcmtlckFic29sdXRlKSYmKEE9d2luZG93LmxvY2F0aW9uLnByb3RvY29sKyIvLyIrd2luZG93LmxvY2F0aW9uLmhvc3Qrd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lK3dpbmRvdy5sb2NhdGlvbi5zZWFyY2gsQT1BLnJlcGxhY2UoL1woL2csIlxcKCIpLnJlcGxhY2UoL1wpL2csIlxcKSIpKSxZLmluZm8oImFycm93VHlwZVN0YXJ0IixlLmFycm93VHlwZVN0YXJ0KSxZLmluZm8oImFycm93VHlwZUVuZCIsZS5hcnJvd1R5cGVFbmQpLFFaKHcsZSxBLHMsbixFKTtsZXQgUz17fTtyZXR1cm4gaCYmKFMudXBkYXRlZFBhdGg9dSksUy5vcmlnaW5hbFBhdGg9ZS5wb2ludHMsU30sImluc2VydEVkZ2UiKX0pO3ZhciBGX2UsJF9lLHpfZSxHX2UsVl9lLFVfZSxIX2UsV19lLHFfZSxZX2UsWF9lLGpfZSxLX2UsUV9lLFpfZSxKX2UsZTllLFp3LHRMPU4oKCk9PnsidXNlIHN0cmljdCI7dnQoKTtGX2U9bygodCxlLHIsbik9PntlLmZvckVhY2goaT0+e2U5ZVtpXSh0LHIsbil9KX0sImluc2VydE1hcmtlcnMiKSwkX2U9bygodCxlLHIpPT57WS50cmFjZSgiTWFraW5nIG1hcmtlcnMgZm9yICIsciksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItZXh0ZW5zaW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBleHRlbnNpb24gIitlKS5hdHRyKCJyZWZYIiwxOCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDcgTDE4LDEzIFYgMSBaIiksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItZXh0ZW5zaW9uRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgZXh0ZW5zaW9uICIrZSkuYXR0cigicmVmWCIsMSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSwxIFYgMTMgTDE4LDcgWiIpfSwiZXh0ZW5zaW9uIiksel9lPW8oKHQsZSxyKT0+e3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWNvbXBvc2l0aW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBjb21wb3NpdGlvbiAiK2UpLmF0dHIoInJlZlgiLDE4KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1jb21wb3NpdGlvbkVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGNvbXBvc2l0aW9uICIrZSkuYXR0cigicmVmWCIsMSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpfSwiY29tcG9zaXRpb24iKSxHX2U9bygodCxlLHIpPT57dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItYWdncmVnYXRpb25TdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGFnZ3JlZ2F0aW9uICIrZSkuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWFnZ3JlZ2F0aW9uRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgYWdncmVnYXRpb24gIitlKS5hdHRyKCJyZWZYIiwxKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIil9LCJhZ2dyZWdhdGlvbiIpLFZfZT1vKCh0LGUscik9Pnt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1kZXBlbmRlbmN5U3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBkZXBlbmRlbmN5ICIrZSkuYXR0cigicmVmWCIsNikuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSA1LDcgTDksMTMgTDEsNyBMOSwxIFoiKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1kZXBlbmRlbmN5RW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgZGVwZW5kZW5jeSAiK2UpLmF0dHIoInJlZlgiLDEzKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpfSwiZGVwZW5kZW5jeSIpLFVfZT1vKCh0LGUscik9Pnt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1sb2xsaXBvcFN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgbG9sbGlwb3AgIitlKS5hdHRyKCJyZWZYIiwxMykuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInN0cm9rZSIsImJsYWNrIikuYXR0cigiZmlsbCIsInRyYW5zcGFyZW50IikuYXR0cigiY3giLDcpLmF0dHIoImN5Iiw3KS5hdHRyKCJyIiw2KSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1sb2xsaXBvcEVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGxvbGxpcG9wICIrZSkuYXR0cigicmVmWCIsMSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInN0cm9rZSIsImJsYWNrIikuYXR0cigiZmlsbCIsInRyYW5zcGFyZW50IikuYXR0cigiY3giLDcpLmF0dHIoImN5Iiw3KS5hdHRyKCJyIiw2KX0sImxvbGxpcG9wIiksSF9lPW8oKHQsZSxyKT0+e3QuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLXBvaW50RW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgIitlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsNSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiw4KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDAgTCAxMCA1IEwgMCAxMCB6IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpLHQuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLXBvaW50U3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciAiK2UpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiw0LjUpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsOCkuYXR0cigibWFya2VySGVpZ2h0Iiw4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCA1IEwgMTAgMTAgTCAxMCAwIHoiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIil9LCJwb2ludCIpLFdfZT1vKCh0LGUscik9Pnt0LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1jaXJjbGVFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciAiK2UpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiwxMSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMSkuYXR0cigibWFya2VySGVpZ2h0IiwxMSkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLCI1IikuYXR0cigiY3kiLCI1IikuYXR0cigiciIsIjUiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIiksdC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItY2lyY2xlU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciAiK2UpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiwtMSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMSkuYXR0cigibWFya2VySGVpZ2h0IiwxMSkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLCI1IikuYXR0cigiY3kiLCI1IikuYXR0cigiciIsIjUiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIil9LCJjaXJjbGUiKSxxX2U9bygodCxlLHIpPT57dC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItY3Jvc3NFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBjcm9zcyAiK2UpLmF0dHIoInZpZXdCb3giLCIwIDAgMTEgMTEiKS5hdHRyKCJyZWZYIiwxMikuYXR0cigicmVmWSIsNS4yKS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDExKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDExKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSwxIGwgOSw5IE0gMTAsMSBsIC05LDkiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDIpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIiksdC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItY3Jvc3NTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGNyb3NzICIrZSkuYXR0cigidmlld0JveCIsIjAgMCAxMSAxMSIpLmF0dHIoInJlZlgiLC0xKS5hdHRyKCJyZWZZIiw1LjIpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTEpLmF0dHIoIm1hcmtlckhlaWdodCIsMTEpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDEgbCA5LDkgTSAxMCwxIGwgLTksOSIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKX0sImNyb3NzIiksWV9lPW8oKHQsZSxyKT0+e3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWJhcmJFbmQiKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDE0KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE5LDcgTDksMTMgTDE0LDcgTDksMSBaIil9LCJiYXJiIiksWF9lPW8oKHQsZSxyKT0+e3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLW9ubHlPbmVTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIG9ubHlPbmUgIitlKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw5KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTgpLmF0dHIoIm1hcmtlckhlaWdodCIsMTgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTTksMCBMOSwxOCBNMTUsMCBMMTUsMTgiKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1vbmx5T25lRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgb25seU9uZSAiK2UpLmF0dHIoInJlZlgiLDE4KS5hdHRyKCJyZWZZIiw5KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTgpLmF0dHIoIm1hcmtlckhlaWdodCIsMTgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTTMsMCBMMywxOCBNOSwwIEw5LDE4Iil9LCJvbmx5X29uZSIpLGpfZT1vKCh0LGUscik9PntsZXQgbj10LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi16ZXJvT3JPbmVTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIHplcm9Pck9uZSAiK2UpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDkpLmF0dHIoIm1hcmtlcldpZHRoIiwzMCkuYXR0cigibWFya2VySGVpZ2h0IiwxOCkuYXR0cigib3JpZW50IiwiYXV0byIpO24uYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJmaWxsIiwid2hpdGUiKS5hdHRyKCJjeCIsMjEpLmF0dHIoImN5Iiw5KS5hdHRyKCJyIiw2KSxuLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNOSwwIEw5LDE4Iik7bGV0IGk9dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItemVyb09yT25lRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgemVyb09yT25lICIrZSkuYXR0cigicmVmWCIsMzApLmF0dHIoInJlZlkiLDkpLmF0dHIoIm1hcmtlcldpZHRoIiwzMCkuYXR0cigibWFya2VySGVpZ2h0IiwxOCkuYXR0cigib3JpZW50IiwiYXV0byIpO2kuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJmaWxsIiwid2hpdGUiKS5hdHRyKCJjeCIsOSkuYXR0cigiY3kiLDkpLmF0dHIoInIiLDYpLGkuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0yMSwwIEwyMSwxOCIpfSwiemVyb19vcl9vbmUiKSxLX2U9bygodCxlLHIpPT57dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItb25lT3JNb3JlU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBvbmVPck1vcmUgIitlKS5hdHRyKCJyZWZYIiwxOCkuYXR0cigicmVmWSIsMTgpLmF0dHIoIm1hcmtlcldpZHRoIiw0NSkuYXR0cigibWFya2VySGVpZ2h0IiwzNikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNMCwxOCBRIDE4LDAgMzYsMTggUSAxOCwzNiAwLDE4IE00Miw5IEw0MiwyNyIpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLW9uZU9yTW9yZUVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyIG9uZU9yTW9yZSAiK2UpLmF0dHIoInJlZlgiLDI3KS5hdHRyKCJyZWZZIiwxOCkuYXR0cigibWFya2VyV2lkdGgiLDQ1KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDM2KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0zLDkgTDMsMjcgTTksMTggUTI3LDAgNDUsMTggUTI3LDM2IDksMTgiKX0sIm9uZV9vcl9tb3JlIiksUV9lPW8oKHQsZSxyKT0+e2xldCBuPXQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLXplcm9Pck1vcmVTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIHplcm9Pck1vcmUgIitlKS5hdHRyKCJyZWZYIiwxOCkuYXR0cigicmVmWSIsMTgpLmF0dHIoIm1hcmtlcldpZHRoIiw1NykuYXR0cigibWFya2VySGVpZ2h0IiwzNikuYXR0cigib3JpZW50IiwiYXV0byIpO24uYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJmaWxsIiwid2hpdGUiKS5hdHRyKCJjeCIsNDgpLmF0dHIoImN5IiwxOCkuYXR0cigiciIsNiksbi5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTTAsMTggUTE4LDAgMzYsMTggUTE4LDM2IDAsMTgiKTtsZXQgaT10LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi16ZXJvT3JNb3JlRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgemVyb09yTW9yZSAiK2UpLmF0dHIoInJlZlgiLDM5KS5hdHRyKCJyZWZZIiwxOCkuYXR0cigibWFya2VyV2lkdGgiLDU3KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDM2KS5hdHRyKCJvcmllbnQiLCJhdXRvIik7aS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImN4Iiw5KS5hdHRyKCJjeSIsMTgpLmF0dHIoInIiLDYpLGkuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0yMSwxOCBRMzksMCA1NywxOCBRMzksMzYgMjEsMTgiKX0sInplcm9fb3JfbW9yZSIpLFpfZT1vKCh0LGUscik9Pnt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1yZXF1aXJlbWVudF9hcnJvd0VuZCIpLmF0dHIoInJlZlgiLDIwKS5hdHRyKCJyZWZZIiwxMCkuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDIwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsYE0wLDAKICAgICAgTDIwLDEwCiAgICAgIE0yMCwxMAogICAgICBMMCwyMGApfSwicmVxdWlyZW1lbnRfYXJyb3ciKSxKX2U9bygodCxlLHIpPT57bGV0IG49dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItcmVxdWlyZW1lbnRfY29udGFpbnNTdGFydCIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDEwKS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImciKTtuLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLDEwKS5hdHRyKCJjeSIsMTApLmF0dHIoInIiLDkpLmF0dHIoImZpbGwiLCJub25lIiksbi5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsMSkuYXR0cigieDIiLDE5KS5hdHRyKCJ5MSIsMTApLmF0dHIoInkyIiwxMCksbi5hcHBlbmQoImxpbmUiKS5hdHRyKCJ5MSIsMSkuYXR0cigieTIiLDE5KS5hdHRyKCJ4MSIsMTApLmF0dHIoIngyIiwxMCl9LCJyZXF1aXJlbWVudF9jb250YWlucyIpLGU5ZT17ZXh0ZW5zaW9uOiRfZSxjb21wb3NpdGlvbjp6X2UsYWdncmVnYXRpb246R19lLGRlcGVuZGVuY3k6Vl9lLGxvbGxpcG9wOlVfZSxwb2ludDpIX2UsY2lyY2xlOldfZSxjcm9zczpxX2UsYmFyYjpZX2Usb25seV9vbmU6WF9lLHplcm9fb3Jfb25lOmpfZSxvbmVfb3JfbW9yZTpLX2UsemVyb19vcl9tb3JlOlFfZSxyZXF1aXJlbWVudF9hcnJvdzpaX2UscmVxdWlyZW1lbnRfY29udGFpbnM6Sl9lfSxadz1GX2V9KTthc3luYyBmdW5jdGlvbiB2bSh0LGUscil7bGV0IG4saTtlLnNoYXBlPT09InJlY3QiJiYoZS5yeCYmZS5yeT9lLnNoYXBlPSJyb3VuZGVkUmVjdCI6ZS5zaGFwZT0ic3F1YXJlUmVjdCIpO2xldCBhPWUuc2hhcGU/UURbZS5zaGFwZV06dm9pZCAwO2lmKCFhKXRocm93IG5ldyBFcnJvcihgTm8gc3VjaCBzaGFwZTogJHtlLnNoYXBlfS4gUGxlYXNlIGNoZWNrIHlvdXIgc3ludGF4LmApO2lmKGUubGluayl7bGV0IHM7ci5jb25maWcuc2VjdXJpdHlMZXZlbD09PSJzYW5kYm94Ij9zPSJfdG9wIjplLmxpbmtUYXJnZXQmJihzPWUubGlua1RhcmdldHx8Il9ibGFuayIpLG49dC5pbnNlcnQoInN2ZzphIikuYXR0cigieGxpbms6aHJlZiIsZS5saW5rKS5hdHRyKCJ0YXJnZXQiLHM/P251bGwpLGk9YXdhaXQgYShuLGUscil9ZWxzZSBpPWF3YWl0IGEodCxlLHIpLG49aTtyZXR1cm4gZS50b29sdGlwJiZpLmF0dHIoInRpdGxlIixlLnRvb2x0aXApLEp3LnNldChlLmlkLG4pLGUuaGF2ZUNhbGxiYWNrJiZuLmF0dHIoImNsYXNzIixuLmF0dHIoImNsYXNzIikrIiBjbGlja2FibGUiKSxufXZhciBKdyxySixuSixrMixlVD1OKCgpPT57InVzZSBzdHJpY3QiO3Z0KCk7WkQoKTtKdz1uZXcgTWFwO28odm0sImluc2VydE5vZGUiKTtySj1vKCh0LGUpPT57Sncuc2V0KGUuaWQsdCl9LCJzZXROb2RlRWxlbSIpLG5KPW8oKCk9PntKdy5jbGVhcigpfSwiY2xlYXIiKSxrMj1vKHQ9PntsZXQgZT1Kdy5nZXQodC5pZCk7WS50cmFjZSgiVHJhbnNmb3JtaW5nIG5vZGUiLHQuZGlmZix0LCJ0cmFuc2xhdGUoIisodC54LXQud2lkdGgvMi01KSsiLCAiK3Qud2lkdGgvMisiKSIpO2xldCByPTgsbj10LmRpZmZ8fDA7cmV0dXJuIHQuY2x1c3Rlck5vZGU/ZS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisodC54K24tdC53aWR0aC8yKSsiLCAiKyh0LnktdC5oZWlnaHQvMi1yKSsiKSIpOmUuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdC54KyIsICIrdC55KyIpIiksbn0sInBvc2l0aW9uTm9kZSIpfSk7dmFyIGlKLGFKPU4oKCk9PnsidXNlIHN0cmljdCI7amkoKTtncigpO3Z0KCk7SHcoKTtlTCgpO3RMKCk7ZVQoKTtGdCgpO2lyKCk7aUo9e2NvbW1vbjpaZSxnZXRDb25maWc6Y3IsaW5zZXJ0Q2x1c3Rlcjp5bSxpbnNlcnRFZGdlOlF3LGluc2VydEVkZ2VMYWJlbDpqdyxpbnNlcnRNYXJrZXJzOlp3LGluc2VydE5vZGU6dm0saW50ZXJwb2xhdGVUb0N1cnZlOlc5LGxhYmVsSGVscGVyOnB0LGxvZzpZLHBvc2l0aW9uRWRnZUxhYmVsOkt3fX0pO2Z1bmN0aW9uIHI5ZSh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJzeW1ib2wifHxyaSh0KSYmZGEodCk9PXQ5ZX12YXIgdDllLG5vLFBkPU4oKCk9PnsidXNlIHN0cmljdCI7a3UoKTtObygpO3Q5ZT0iW29iamVjdCBTeW1ib2xdIjtvKHI5ZSwiaXNTeW1ib2wiKTtubz1yOWV9KTtmdW5jdGlvbiBuOWUodCxlKXtmb3IodmFyIHI9LTEsbj10PT1udWxsPzA6dC5sZW5ndGgsaT1BcnJheShuKTsrK3I8bjspaVtyXT1lKHRbcl0scix0KTtyZXR1cm4gaX12YXIgTnMsQmQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKG45ZSwiYXJyYXlNYXAiKTtOcz1uOWV9KTtmdW5jdGlvbiBsSih0KXtpZih0eXBlb2YgdD09InN0cmluZyIpcmV0dXJuIHQ7aWYoUHQodCkpcmV0dXJuIE5zKHQsbEopKyIiO2lmKG5vKHQpKXJldHVybiBvSj9vSi5jYWxsKHQpOiIiO3ZhciBlPXQrIiI7cmV0dXJuIGU9PSIwIiYmMS90PT0taTllPyItMCI6ZX12YXIgaTllLHNKLG9KLGNKLHVKPU4oKCk9PnsidXNlIHN0cmljdCI7RWQoKTtCZCgpO1VuKCk7UGQoKTtpOWU9MS8wLHNKPWVhP2VhLnByb3RvdHlwZTp2b2lkIDAsb0o9c0o/c0oudG9TdHJpbmc6dm9pZCAwO28obEosImJhc2VUb1N0cmluZyIpO2NKPWxKfSk7ZnVuY3Rpb24gczllKHQpe2Zvcih2YXIgZT10Lmxlbmd0aDtlLS0mJmE5ZS50ZXN0KHQuY2hhckF0KGUpKTspO3JldHVybiBlfXZhciBhOWUsaEosZko9TigoKT0+eyJ1c2Ugc3RyaWN0IjthOWU9L1xzLztvKHM5ZSwidHJpbW1lZEVuZEluZGV4Iik7aEo9czllfSk7ZnVuY3Rpb24gbDllKHQpe3JldHVybiB0JiZ0LnNsaWNlKDAsaEoodCkrMSkucmVwbGFjZShvOWUsIiIpfXZhciBvOWUsZEoscEo9TigoKT0+eyJ1c2Ugc3RyaWN0IjtmSigpO285ZT0vXlxzKy87byhsOWUsImJhc2VUcmltIik7ZEo9bDllfSk7ZnVuY3Rpb24gZDllKHQpe2lmKHR5cGVvZiB0PT0ibnVtYmVyIilyZXR1cm4gdDtpZihubyh0KSlyZXR1cm4gbUo7aWYoYm4odCkpe3ZhciBlPXR5cGVvZiB0LnZhbHVlT2Y9PSJmdW5jdGlvbiI/dC52YWx1ZU9mKCk6dDt0PWJuKGUpP2UrIiI6ZX1pZih0eXBlb2YgdCE9InN0cmluZyIpcmV0dXJuIHQ9PT0wP3Q6K3Q7dD1kSih0KTt2YXIgcj11OWUudGVzdCh0KTtyZXR1cm4gcnx8aDllLnRlc3QodCk/ZjllKHQuc2xpY2UoMikscj8yOjgpOmM5ZS50ZXN0KHQpP21KOit0fXZhciBtSixjOWUsdTllLGg5ZSxmOWUsZ0oseUo9TigoKT0+eyJ1c2Ugc3RyaWN0IjtwSigpO0pzKCk7UGQoKTttSj1OYU4sYzllPS9eWy0rXTB4WzAtOWEtZl0rJC9pLHU5ZT0vXjBiWzAxXSskL2ksaDllPS9eMG9bMC03XSskL2ksZjllPXBhcnNlSW50O28oZDllLCJ0b051bWJlciIpO2dKPWQ5ZX0pO2Z1bmN0aW9uIG05ZSh0KXtpZighdClyZXR1cm4gdD09PTA/dDowO2lmKHQ9Z0oodCksdD09PXZKfHx0PT09LXZKKXt2YXIgZT10PDA/LTE6MTtyZXR1cm4gZSpwOWV9cmV0dXJuIHQ9PT10P3Q6MH12YXIgdkoscDllLHhtLHJMPU4oKCk9PnsidXNlIHN0cmljdCI7eUooKTt2Sj0xLzAscDllPTE3OTc2OTMxMzQ4NjIzMTU3ZTI5MjtvKG05ZSwidG9GaW5pdGUiKTt4bT1tOWV9KTtmdW5jdGlvbiBnOWUodCl7dmFyIGU9eG0odCkscj1lJTE7cmV0dXJuIGU9PT1lP3I/ZS1yOmU6MH12YXIgdmMsYm09TigoKT0+eyJ1c2Ugc3RyaWN0IjtyTCgpO28oZzllLCJ0b0ludGVnZXIiKTt2Yz1nOWV9KTt2YXIgeTllLHRULHhKPU4oKCk9PnsidXNlIHN0cmljdCI7TGgoKTtMbygpO3k5ZT1TcyhsaSwiV2Vha01hcCIpLHRUPXk5ZX0pO2Z1bmN0aW9uIHY5ZSgpe312YXIgbmksbkw9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKHY5ZSwibm9vcCIpO25pPXY5ZX0pO2Z1bmN0aW9uIHg5ZSh0LGUpe2Zvcih2YXIgcj0tMSxuPXQ9PW51bGw/MDp0Lmxlbmd0aDsrK3I8biYmZSh0W3JdLHIsdCkhPT0hMTspO3JldHVybiB0fXZhciByVCxpTD1OKCgpPT57InVzZSBzdHJpY3QiO28oeDllLCJhcnJheUVhY2giKTtyVD14OWV9KTtmdW5jdGlvbiBiOWUodCxlLHIsbil7Zm9yKHZhciBpPXQubGVuZ3RoLGE9cisobj8xOi0xKTtuP2EtLTorK2E8aTspaWYoZSh0W2FdLGEsdCkpcmV0dXJuIGE7cmV0dXJuLTF9dmFyIG5ULGFMPU4oKCk9PnsidXNlIHN0cmljdCI7byhiOWUsImJhc2VGaW5kSW5kZXgiKTtuVD1iOWV9KTtmdW5jdGlvbiB3OWUodCl7cmV0dXJuIHQhPT10fXZhciBiSix3Sj1OKCgpPT57InVzZSBzdHJpY3QiO28odzllLCJiYXNlSXNOYU4iKTtiSj13OWV9KTtmdW5jdGlvbiBUOWUodCxlLHIpe2Zvcih2YXIgbj1yLTEsaT10Lmxlbmd0aDsrK248aTspaWYodFtuXT09PWUpcmV0dXJuIG47cmV0dXJuLTF9dmFyIFRKLGtKPU4oKCk9PnsidXNlIHN0cmljdCI7byhUOWUsInN0cmljdEluZGV4T2YiKTtUSj1UOWV9KTtmdW5jdGlvbiBrOWUodCxlLHIpe3JldHVybiBlPT09ZT9USih0LGUscik6blQodCxiSixyKX12YXIgd20saVQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjthTCgpO3dKKCk7a0ooKTtvKGs5ZSwiYmFzZUluZGV4T2YiKTt3bT1rOWV9KTtmdW5jdGlvbiBFOWUodCxlKXt2YXIgcj10PT1udWxsPzA6dC5sZW5ndGg7cmV0dXJuISFyJiZ3bSh0LGUsMCk+LTF9dmFyIGFULHNMPU4oKCk9PnsidXNlIHN0cmljdCI7aVQoKTtvKEU5ZSwiYXJyYXlJbmNsdWRlcyIpO2FUPUU5ZX0pO3ZhciBTOWUsRUosU0o9TigoKT0+eyJ1c2Ugc3RyaWN0IjtOOSgpO1M5ZT1udyhPYmplY3Qua2V5cyxPYmplY3QpLEVKPVM5ZX0pO2Z1bmN0aW9uIF85ZSh0KXtpZighdWModCkpcmV0dXJuIEVKKHQpO3ZhciBlPVtdO2Zvcih2YXIgciBpbiBPYmplY3QodCkpQTllLmNhbGwodCxyKSYmciE9ImNvbnN0cnVjdG9yIiYmZS5wdXNoKHIpO3JldHVybiBlfXZhciBDOWUsQTllLFRtLHNUPU4oKCk9PnsidXNlIHN0cmljdCI7WjAoKTtTSigpO0M5ZT1PYmplY3QucHJvdG90eXBlLEE5ZT1DOWUuaGFzT3duUHJvcGVydHk7byhfOWUsImJhc2VLZXlzIik7VG09XzllfSk7ZnVuY3Rpb24gRDllKHQpe3JldHVybiBjaSh0KT9sdyh0KTpUbSh0KX12YXIgenIseGM9TigoKT0+eyJ1c2Ugc3RyaWN0IjtCOSgpO3NUKCk7TW8oKTtvKEQ5ZSwia2V5cyIpO3pyPUQ5ZX0pO3ZhciBMOWUsUjllLE45ZSxtYSxDSj1OKCgpPT57InVzZSBzdHJpY3QiO3JtKCk7RGQoKTtHOSgpO01vKCk7WjAoKTt4YygpO0w5ZT1PYmplY3QucHJvdG90eXBlLFI5ZT1MOWUuaGFzT3duUHJvcGVydHksTjllPWh3KGZ1bmN0aW9uKHQsZSl7aWYodWMoZSl8fGNpKGUpKXtQbyhlLHpyKGUpLHQpO3JldHVybn1mb3IodmFyIHIgaW4gZSlSOWUuY2FsbChlLHIpJiZoYyh0LHIsZVtyXSl9KSxtYT1OOWV9KTtmdW5jdGlvbiBPOWUodCxlKXtpZihQdCh0KSlyZXR1cm4hMTt2YXIgcj10eXBlb2YgdDtyZXR1cm4gcj09Im51bWJlciJ8fHI9PSJzeW1ib2wifHxyPT0iYm9vbGVhbiJ8fHQ9PW51bGx8fG5vKHQpPyEwOkk5ZS50ZXN0KHQpfHwhTTllLnRlc3QodCl8fGUhPW51bGwmJnQgaW4gT2JqZWN0KGUpfXZhciBNOWUsSTllLGttLG9UPU4oKCk9PnsidXNlIHN0cmljdCI7VW4oKTtQZCgpO005ZT0vXC58XFsoPzpbXltcXV0qfChbIiddKSg/Oig/IVwxKVteXFxdfFxcLikqP1wxKVxdLyxJOWU9L15cdyokLztvKE85ZSwiaXNLZXkiKTtrbT1POWV9KTtmdW5jdGlvbiBCOWUodCl7dmFyIGU9SDAodCxmdW5jdGlvbihuKXtyZXR1cm4gci5zaXplPT09UDllJiZyLmNsZWFyKCksbn0pLHI9ZS5jYWNoZTtyZXR1cm4gZX12YXIgUDllLEFKLF9KPU4oKCk9PnsidXNlIHN0cmljdCI7UzkoKTtQOWU9NTAwO28oQjllLCJtZW1vaXplQ2FwcGVkIik7QUo9QjllfSk7dmFyIEY5ZSwkOWUsejllLERKLExKPU4oKCk9PnsidXNlIHN0cmljdCI7X0ooKTtGOWU9L1teLltcXV0rfFxbKD86KC0/XGQrKD86XC5cZCspPyl8KFsiJ10pKCg/Oig/IVwyKVteXFxdfFxcLikqPylcMilcXXwoPz0oPzpcLnxcW1xdKSg/OlwufFxbXF18JCkpL2csJDllPS9cXChcXCk/L2csejllPUFKKGZ1bmN0aW9uKHQpe3ZhciBlPVtdO3JldHVybiB0LmNoYXJDb2RlQXQoMCk9PT00NiYmZS5wdXNoKCIiKSx0LnJlcGxhY2UoRjllLGZ1bmN0aW9uKHIsbixpLGEpe2UucHVzaChpP2EucmVwbGFjZSgkOWUsIiQxIik6bnx8cil9KSxlfSksREo9ejllfSk7ZnVuY3Rpb24gRzllKHQpe3JldHVybiB0PT1udWxsPyIiOmNKKHQpfXZhciBsVCxvTD1OKCgpPT57InVzZSBzdHJpY3QiO3VKKCk7byhHOWUsInRvU3RyaW5nIik7bFQ9RzllfSk7ZnVuY3Rpb24gVjllKHQsZSl7cmV0dXJuIFB0KHQpP3Q6a20odCxlKT9bdF06REoobFQodCkpfXZhciBZaCxFMj1OKCgpPT57InVzZSBzdHJpY3QiO1VuKCk7b1QoKTtMSigpO29MKCk7byhWOWUsImNhc3RQYXRoIik7WWg9VjllfSk7ZnVuY3Rpb24gSDllKHQpe2lmKHR5cGVvZiB0PT0ic3RyaW5nInx8bm8odCkpcmV0dXJuIHQ7dmFyIGU9dCsiIjtyZXR1cm4gZT09IjAiJiYxL3Q9PS1VOWU/Ii0wIjplfXZhciBVOWUsYmMsRW09TigoKT0+eyJ1c2Ugc3RyaWN0IjtQZCgpO1U5ZT0xLzA7byhIOWUsInRvS2V5Iik7YmM9SDllfSk7ZnVuY3Rpb24gVzllKHQsZSl7ZT1ZaChlLHQpO2Zvcih2YXIgcj0wLG49ZS5sZW5ndGg7dCE9bnVsbCYmcjxuOyl0PXRbYmMoZVtyKytdKV07cmV0dXJuIHImJnI9PW4/dDp2b2lkIDB9dmFyIFhoLFMyPU4oKCk9PnsidXNlIHN0cmljdCI7RTIoKTtFbSgpO28oVzllLCJiYXNlR2V0Iik7WGg9VzllfSk7ZnVuY3Rpb24gcTllKHQsZSxyKXt2YXIgbj10PT1udWxsP3ZvaWQgMDpYaCh0LGUpO3JldHVybiBuPT09dm9pZCAwP3I6bn12YXIgUkosTko9TigoKT0+eyJ1c2Ugc3RyaWN0IjtTMigpO28ocTllLCJnZXQiKTtSSj1xOWV9KTtmdW5jdGlvbiBZOWUodCxlKXtmb3IodmFyIHI9LTEsbj1lLmxlbmd0aCxpPXQubGVuZ3RoOysrcjxuOyl0W2krcl09ZVtyXTtyZXR1cm4gdH12YXIgU20sY1Q9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKFk5ZSwiYXJyYXlQdXNoIik7U209WTllfSk7ZnVuY3Rpb24gWDllKHQpe3JldHVybiBQdCh0KXx8RWwodCl8fCEhKE1KJiZ0JiZ0W01KXSl9dmFyIE1KLElKLE9KPU4oKCk9PnsidXNlIHN0cmljdCI7RWQoKTtKMCgpO1VuKCk7TUo9ZWE/ZWEuaXNDb25jYXRTcHJlYWRhYmxlOnZvaWQgMDtvKFg5ZSwiaXNGbGF0dGVuYWJsZSIpO0lKPVg5ZX0pO2Z1bmN0aW9uIFBKKHQsZSxyLG4saSl7dmFyIGE9LTEscz10Lmxlbmd0aDtmb3Iocnx8KHI9SUopLGl8fChpPVtdKTsrK2E8czspe3ZhciBsPXRbYV07ZT4wJiZyKGwpP2U+MT9QSihsLGUtMSxyLG4saSk6U20oaSxsKTpufHwoaVtpLmxlbmd0aF09bCl9cmV0dXJuIGl9dmFyIHdjLENtPU4oKCk9PnsidXNlIHN0cmljdCI7Y1QoKTtPSigpO28oUEosImJhc2VGbGF0dGVuIik7d2M9UEp9KTtmdW5jdGlvbiBqOWUodCl7dmFyIGU9dD09bnVsbD8wOnQubGVuZ3RoO3JldHVybiBlP3djKHQsMSk6W119dmFyIHFyLHVUPU4oKCk9PnsidXNlIHN0cmljdCI7Q20oKTtvKGo5ZSwiZmxhdHRlbiIpO3FyPWo5ZX0pO2Z1bmN0aW9uIEs5ZSh0KXtyZXR1cm4gdXcoY3codCx2b2lkIDAscXIpLHQrIiIpfXZhciBCSixGSj1OKCgpPT57InVzZSBzdHJpY3QiO3VUKCk7RjkoKTt6OSgpO28oSzllLCJmbGF0UmVzdCIpO0JKPUs5ZX0pO2Z1bmN0aW9uIFE5ZSh0LGUscil7dmFyIG49LTEsaT10Lmxlbmd0aDtlPDAmJihlPS1lPmk/MDppK2UpLHI9cj5pP2k6cixyPDAmJihyKz1pKSxpPWU+cj8wOnItZT4+PjAsZT4+Pj0wO2Zvcih2YXIgYT1BcnJheShpKTsrK248aTspYVtuXT10W24rZV07cmV0dXJuIGF9dmFyIGhULGxMPU4oKCk9PnsidXNlIHN0cmljdCI7byhROWUsImJhc2VTbGljZSIpO2hUPVE5ZX0pO2Z1bmN0aW9uIHNEZSh0KXtyZXR1cm4gYURlLnRlc3QodCl9dmFyIFo5ZSxKOWUsZURlLHREZSxyRGUsbkRlLGlEZSxhRGUsJEoseko9TigoKT0+eyJ1c2Ugc3RyaWN0IjtaOWU9IlxcdWQ4MDAtXFx1ZGZmZiIsSjllPSJcXHUwMzAwLVxcdTAzNmYiLGVEZT0iXFx1ZmUyMC1cXHVmZTJmIix0RGU9IlxcdTIwZDAtXFx1MjBmZiIsckRlPUo5ZStlRGUrdERlLG5EZT0iXFx1ZmUwZVxcdWZlMGYiLGlEZT0iXFx1MjAwZCIsYURlPVJlZ0V4cCgiWyIraURlK1o5ZStyRGUrbkRlKyJdIik7byhzRGUsImhhc1VuaWNvZGUiKTskSj1zRGV9KTtmdW5jdGlvbiBvRGUodCxlLHIsbil7dmFyIGk9LTEsYT10PT1udWxsPzA6dC5sZW5ndGg7Zm9yKG4mJmEmJihyPXRbKytpXSk7KytpPGE7KXI9ZShyLHRbaV0saSx0KTtyZXR1cm4gcn12YXIgR0osVko9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKG9EZSwiYXJyYXlSZWR1Y2UiKTtHSj1vRGV9KTtmdW5jdGlvbiBsRGUodCxlKXtyZXR1cm4gdCYmUG8oZSx6cihlKSx0KX12YXIgVUosSEo9TigoKT0+eyJ1c2Ugc3RyaWN0IjtEZCgpO3hjKCk7byhsRGUsImJhc2VBc3NpZ24iKTtVSj1sRGV9KTtmdW5jdGlvbiBjRGUodCxlKXtyZXR1cm4gdCYmUG8oZSxDcyhlKSx0KX12YXIgV0oscUo9TigoKT0+eyJ1c2Ugc3RyaWN0IjtEZCgpO0JoKCk7byhjRGUsImJhc2VBc3NpZ25JbiIpO1dKPWNEZX0pO2Z1bmN0aW9uIHVEZSh0LGUpe2Zvcih2YXIgcj0tMSxuPXQ9PW51bGw/MDp0Lmxlbmd0aCxpPTAsYT1bXTsrK3I8bjspe3ZhciBzPXRbcl07ZShzLHIsdCkmJihhW2krK109cyl9cmV0dXJuIGF9dmFyIEFtLGZUPU4oKCk9PnsidXNlIHN0cmljdCI7byh1RGUsImFycmF5RmlsdGVyIik7QW09dURlfSk7ZnVuY3Rpb24gaERlKCl7cmV0dXJuW119dmFyIGRULGNMPU4oKCk9PnsidXNlIHN0cmljdCI7byhoRGUsInN0dWJBcnJheSIpO2RUPWhEZX0pO3ZhciBmRGUsZERlLFlKLHBEZSxfbSxwVD1OKCgpPT57InVzZSBzdHJpY3QiO2ZUKCk7Y0woKTtmRGU9T2JqZWN0LnByb3RvdHlwZSxkRGU9ZkRlLnByb3BlcnR5SXNFbnVtZXJhYmxlLFlKPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMscERlPVlKP2Z1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP1tdOih0PU9iamVjdCh0KSxBbShZSih0KSxmdW5jdGlvbihlKXtyZXR1cm4gZERlLmNhbGwodCxlKX0pKX06ZFQsX209cERlfSk7ZnVuY3Rpb24gbURlKHQsZSl7cmV0dXJuIFBvKHQsX20odCksZSl9dmFyIFhKLGpKPU4oKCk9PnsidXNlIHN0cmljdCI7RGQoKTtwVCgpO28obURlLCJjb3B5U3ltYm9scyIpO1hKPW1EZX0pO3ZhciBnRGUseURlLG1ULHVMPU4oKCk9PnsidXNlIHN0cmljdCI7Y1QoKTtpdygpO3BUKCk7Y0woKTtnRGU9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyx5RGU9Z0RlP2Z1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXTt0OylTbShlLF9tKHQpKSx0PVEwKHQpO3JldHVybiBlfTpkVCxtVD15RGV9KTtmdW5jdGlvbiB2RGUodCxlKXtyZXR1cm4gUG8odCxtVCh0KSxlKX12YXIgS0osUUo9TigoKT0+eyJ1c2Ugc3RyaWN0IjtEZCgpO3VMKCk7byh2RGUsImNvcHlTeW1ib2xzSW4iKTtLSj12RGV9KTtmdW5jdGlvbiB4RGUodCxlLHIpe3ZhciBuPWUodCk7cmV0dXJuIFB0KHQpP246U20obixyKHQpKX12YXIgZ1QsaEw9TigoKT0+eyJ1c2Ugc3RyaWN0IjtjVCgpO1VuKCk7byh4RGUsImJhc2VHZXRBbGxLZXlzIik7Z1Q9eERlfSk7ZnVuY3Rpb24gYkRlKHQpe3JldHVybiBnVCh0LHpyLF9tKX12YXIgQzIsZkw9TigoKT0+eyJ1c2Ugc3RyaWN0IjtoTCgpO3BUKCk7eGMoKTtvKGJEZSwiZ2V0QWxsS2V5cyIpO0MyPWJEZX0pO2Z1bmN0aW9uIHdEZSh0KXtyZXR1cm4gZ1QodCxDcyxtVCl9dmFyIHlULGRMPU4oKCk9PnsidXNlIHN0cmljdCI7aEwoKTt1TCgpO0JoKCk7byh3RGUsImdldEFsbEtleXNJbiIpO3lUPXdEZX0pO3ZhciBURGUsdlQsWko9TigoKT0+eyJ1c2Ugc3RyaWN0IjtMaCgpO0xvKCk7VERlPVNzKGxpLCJEYXRhVmlldyIpLHZUPVREZX0pO3ZhciBrRGUseFQsSko9TigoKT0+eyJ1c2Ugc3RyaWN0IjtMaCgpO0xvKCk7a0RlPVNzKGxpLCJQcm9taXNlIikseFQ9a0RlfSk7dmFyIEVEZSxqaCxwTD1OKCgpPT57InVzZSBzdHJpY3QiO0xoKCk7TG8oKTtFRGU9U3MobGksIlNldCIpLGpoPUVEZX0pO3ZhciBlZWUsU0RlLHRlZSxyZWUsbmVlLGllZSxDRGUsQURlLF9EZSxERGUsTERlLEZkLGlvLCRkPU4oKCk9PnsidXNlIHN0cmljdCI7WkooKTtLNSgpO0pKKCk7cEwoKTt4SigpO2t1KCk7VDkoKTtlZWU9IltvYmplY3QgTWFwXSIsU0RlPSJbb2JqZWN0IE9iamVjdF0iLHRlZT0iW29iamVjdCBQcm9taXNlXSIscmVlPSJbb2JqZWN0IFNldF0iLG5lZT0iW29iamVjdCBXZWFrTWFwXSIsaWVlPSJbb2JqZWN0IERhdGFWaWV3XSIsQ0RlPUV1KHZUKSxBRGU9RXUoTWgpLF9EZT1FdSh4VCksRERlPUV1KGpoKSxMRGU9RXUodFQpLEZkPWRhOyh2VCYmRmQobmV3IHZUKG5ldyBBcnJheUJ1ZmZlcigxKSkpIT1pZWV8fE1oJiZGZChuZXcgTWgpIT1lZWV8fHhUJiZGZCh4VC5yZXNvbHZlKCkpIT10ZWV8fGpoJiZGZChuZXcgamgpIT1yZWV8fHRUJiZGZChuZXcgdFQpIT1uZWUpJiYoRmQ9byhmdW5jdGlvbih0KXt2YXIgZT1kYSh0KSxyPWU9PVNEZT90LmNvbnN0cnVjdG9yOnZvaWQgMCxuPXI/RXUocik6IiI7aWYobilzd2l0Y2gobil7Y2FzZSBDRGU6cmV0dXJuIGllZTtjYXNlIEFEZTpyZXR1cm4gZWVlO2Nhc2UgX0RlOnJldHVybiB0ZWU7Y2FzZSBERGU6cmV0dXJuIHJlZTtjYXNlIExEZTpyZXR1cm4gbmVlfXJldHVybiBlfSwiZ2V0VGFnIikpO2lvPUZkfSk7ZnVuY3Rpb24gTURlKHQpe3ZhciBlPXQubGVuZ3RoLHI9bmV3IHQuY29uc3RydWN0b3IoZSk7cmV0dXJuIGUmJnR5cGVvZiB0WzBdPT0ic3RyaW5nIiYmTkRlLmNhbGwodCwiaW5kZXgiKSYmKHIuaW5kZXg9dC5pbmRleCxyLmlucHV0PXQuaW5wdXQpLHJ9dmFyIFJEZSxORGUsYWVlLHNlZT1OKCgpPT57InVzZSBzdHJpY3QiO1JEZT1PYmplY3QucHJvdG90eXBlLE5EZT1SRGUuaGFzT3duUHJvcGVydHk7byhNRGUsImluaXRDbG9uZUFycmF5Iik7YWVlPU1EZX0pO2Z1bmN0aW9uIElEZSh0LGUpe3ZhciByPWU/SzAodC5idWZmZXIpOnQuYnVmZmVyO3JldHVybiBuZXcgdC5jb25zdHJ1Y3RvcihyLHQuYnl0ZU9mZnNldCx0LmJ5dGVMZW5ndGgpfXZhciBvZWUsbGVlPU4oKCk9PnsidXNlIHN0cmljdCI7ZXcoKTtvKElEZSwiY2xvbmVEYXRhVmlldyIpO29lZT1JRGV9KTtmdW5jdGlvbiBQRGUodCl7dmFyIGU9bmV3IHQuY29uc3RydWN0b3IodC5zb3VyY2UsT0RlLmV4ZWModCkpO3JldHVybiBlLmxhc3RJbmRleD10Lmxhc3RJbmRleCxlfXZhciBPRGUsY2VlLHVlZT1OKCgpPT57InVzZSBzdHJpY3QiO09EZT0vXHcqJC87byhQRGUsImNsb25lUmVnRXhwIik7Y2VlPVBEZX0pO2Z1bmN0aW9uIEJEZSh0KXtyZXR1cm4gZmVlP09iamVjdChmZWUuY2FsbCh0KSk6e319dmFyIGhlZSxmZWUsZGVlLHBlZT1OKCgpPT57InVzZSBzdHJpY3QiO0VkKCk7aGVlPWVhP2VhLnByb3RvdHlwZTp2b2lkIDAsZmVlPWhlZT9oZWUudmFsdWVPZjp2b2lkIDA7byhCRGUsImNsb25lU3ltYm9sIik7ZGVlPUJEZX0pO2Z1bmN0aW9uIG5MZSh0LGUscil7dmFyIG49dC5jb25zdHJ1Y3Rvcjtzd2l0Y2goZSl7Y2FzZSBxRGU6cmV0dXJuIEswKHQpO2Nhc2UgRkRlOmNhc2UgJERlOnJldHVybiBuZXcgbigrdCk7Y2FzZSBZRGU6cmV0dXJuIG9lZSh0LHIpO2Nhc2UgWERlOmNhc2UgakRlOmNhc2UgS0RlOmNhc2UgUURlOmNhc2UgWkRlOmNhc2UgSkRlOmNhc2UgZUxlOmNhc2UgdExlOmNhc2UgckxlOnJldHVybiB0dyh0LHIpO2Nhc2UgekRlOnJldHVybiBuZXcgbjtjYXNlIEdEZTpjYXNlIEhEZTpyZXR1cm4gbmV3IG4odCk7Y2FzZSBWRGU6cmV0dXJuIGNlZSh0KTtjYXNlIFVEZTpyZXR1cm4gbmV3IG47Y2FzZSBXRGU6cmV0dXJuIGRlZSh0KX19dmFyIEZEZSwkRGUsekRlLEdEZSxWRGUsVURlLEhEZSxXRGUscURlLFlEZSxYRGUsakRlLEtEZSxRRGUsWkRlLEpEZSxlTGUsdExlLHJMZSxtZWUsZ2VlPU4oKCk9PnsidXNlIHN0cmljdCI7ZXcoKTtsZWUoKTt1ZWUoKTtwZWUoKTtMOSgpO0ZEZT0iW29iamVjdCBCb29sZWFuXSIsJERlPSJbb2JqZWN0IERhdGVdIix6RGU9IltvYmplY3QgTWFwXSIsR0RlPSJbb2JqZWN0IE51bWJlcl0iLFZEZT0iW29iamVjdCBSZWdFeHBdIixVRGU9IltvYmplY3QgU2V0XSIsSERlPSJbb2JqZWN0IFN0cmluZ10iLFdEZT0iW29iamVjdCBTeW1ib2xdIixxRGU9IltvYmplY3QgQXJyYXlCdWZmZXJdIixZRGU9IltvYmplY3QgRGF0YVZpZXddIixYRGU9IltvYmplY3QgRmxvYXQzMkFycmF5XSIsakRlPSJbb2JqZWN0IEZsb2F0NjRBcnJheV0iLEtEZT0iW29iamVjdCBJbnQ4QXJyYXldIixRRGU9IltvYmplY3QgSW50MTZBcnJheV0iLFpEZT0iW29iamVjdCBJbnQzMkFycmF5XSIsSkRlPSJbb2JqZWN0IFVpbnQ4QXJyYXldIixlTGU9IltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIix0TGU9IltvYmplY3QgVWludDE2QXJyYXldIixyTGU9IltvYmplY3QgVWludDMyQXJyYXldIjtvKG5MZSwiaW5pdENsb25lQnlUYWciKTttZWU9bkxlfSk7ZnVuY3Rpb24gYUxlKHQpe3JldHVybiByaSh0KSYmaW8odCk9PWlMZX12YXIgaUxlLHllZSx2ZWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjskZCgpO05vKCk7aUxlPSJbb2JqZWN0IE1hcF0iO28oYUxlLCJiYXNlSXNNYXAiKTt5ZWU9YUxlfSk7dmFyIHhlZSxzTGUsYmVlLHdlZT1OKCgpPT57InVzZSBzdHJpY3QiO3ZlZSgpO19kKCk7dDIoKTt4ZWU9T28mJk9vLmlzTWFwLHNMZT14ZWU/SW8oeGVlKTp5ZWUsYmVlPXNMZX0pO2Z1bmN0aW9uIGxMZSh0KXtyZXR1cm4gcmkodCkmJmlvKHQpPT1vTGV9dmFyIG9MZSxUZWUsa2VlPU4oKCk9PnsidXNlIHN0cmljdCI7JGQoKTtObygpO29MZT0iW29iamVjdCBTZXRdIjtvKGxMZSwiYmFzZUlzU2V0Iik7VGVlPWxMZX0pO3ZhciBFZWUsY0xlLFNlZSxDZWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtrZWUoKTtfZCgpO3QyKCk7RWVlPU9vJiZPby5pc1NldCxjTGU9RWVlP0lvKEVlZSk6VGVlLFNlZT1jTGV9KTtmdW5jdGlvbiBiVCh0LGUscixuLGksYSl7dmFyIHMsbD1lJnVMZSx1PWUmaExlLGg9ZSZmTGU7aWYociYmKHM9aT9yKHQsbixpLGEpOnIodCkpLHMhPT12b2lkIDApcmV0dXJuIHM7aWYoIWJuKHQpKXJldHVybiB0O3ZhciBmPVB0KHQpO2lmKGYpe2lmKHM9YWVlKHQpLCFsKXJldHVybiBydyh0LHMpfWVsc2V7dmFyIGQ9aW8odCkscD1kPT1fZWV8fGQ9PXlMZTtpZihTbCh0KSlyZXR1cm4gSjUodCxsKTtpZihkPT1EZWV8fGQ9PUFlZXx8cCYmIWkpe2lmKHM9dXx8cD97fTphdyh0KSwhbClyZXR1cm4gdT9LSih0LFdKKHMsdCkpOlhKKHQsVUoocyx0KSl9ZWxzZXtpZighX25bZF0pcmV0dXJuIGk/dDp7fTtzPW1lZSh0LGQsbCl9fWF8fChhPW5ldyBsYyk7dmFyIG09YS5nZXQodCk7aWYobSlyZXR1cm4gbTthLnNldCh0LHMpLFNlZSh0KT90LmZvckVhY2goZnVuY3Rpb24odil7cy5hZGQoYlQodixlLHIsdix0LGEpKX0pOmJlZSh0KSYmdC5mb3JFYWNoKGZ1bmN0aW9uKHYseCl7cy5zZXQoeCxiVCh2LGUscix4LHQsYSkpfSk7dmFyIGc9aD91P3lUOkMyOnU/Q3M6enIseT1mP3ZvaWQgMDpnKHQpO3JldHVybiByVCh5fHx0LGZ1bmN0aW9uKHYseCl7eSYmKHg9dix2PXRbeF0pLGhjKHMseCxiVCh2LGUscix4LHQsYSkpfSksc312YXIgdUxlLGhMZSxmTGUsQWVlLGRMZSxwTGUsbUxlLGdMZSxfZWUseUxlLHZMZSx4TGUsRGVlLGJMZSx3TGUsVExlLGtMZSxFTGUsU0xlLENMZSxBTGUsX0xlLERMZSxMTGUsUkxlLE5MZSxNTGUsSUxlLE9MZSxfbix3VCxtTD1OKCgpPT57InVzZSBzdHJpY3QiO1p2KCk7aUwoKTtybSgpO0hKKCk7cUooKTtfOSgpO1I5KCk7akooKTtRSigpO2ZMKCk7ZEwoKTskZCgpO3NlZSgpO2dlZSgpO005KCk7VW4oKTt0bSgpO3dlZSgpO0pzKCk7Q2VlKCk7eGMoKTtCaCgpO3VMZT0xLGhMZT0yLGZMZT00LEFlZT0iW29iamVjdCBBcmd1bWVudHNdIixkTGU9IltvYmplY3QgQXJyYXldIixwTGU9IltvYmplY3QgQm9vbGVhbl0iLG1MZT0iW29iamVjdCBEYXRlXSIsZ0xlPSJbb2JqZWN0IEVycm9yXSIsX2VlPSJbb2JqZWN0IEZ1bmN0aW9uXSIseUxlPSJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIsdkxlPSJbb2JqZWN0IE1hcF0iLHhMZT0iW29iamVjdCBOdW1iZXJdIixEZWU9IltvYmplY3QgT2JqZWN0XSIsYkxlPSJbb2JqZWN0IFJlZ0V4cF0iLHdMZT0iW29iamVjdCBTZXRdIixUTGU9IltvYmplY3QgU3RyaW5nXSIsa0xlPSJbb2JqZWN0IFN5bWJvbF0iLEVMZT0iW29iamVjdCBXZWFrTWFwXSIsU0xlPSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsQ0xlPSJbb2JqZWN0IERhdGFWaWV3XSIsQUxlPSJbb2JqZWN0IEZsb2F0MzJBcnJheV0iLF9MZT0iW29iamVjdCBGbG9hdDY0QXJyYXldIixETGU9IltvYmplY3QgSW50OEFycmF5XSIsTExlPSJbb2JqZWN0IEludDE2QXJyYXldIixSTGU9IltvYmplY3QgSW50MzJBcnJheV0iLE5MZT0iW29iamVjdCBVaW50OEFycmF5XSIsTUxlPSJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsSUxlPSJbb2JqZWN0IFVpbnQxNkFycmF5XSIsT0xlPSJbb2JqZWN0IFVpbnQzMkFycmF5XSIsX249e307X25bQWVlXT1fbltkTGVdPV9uW1NMZV09X25bQ0xlXT1fbltwTGVdPV9uW21MZV09X25bQUxlXT1fbltfTGVdPV9uW0RMZV09X25bTExlXT1fbltSTGVdPV9uW3ZMZV09X25beExlXT1fbltEZWVdPV9uW2JMZV09X25bd0xlXT1fbltUTGVdPV9uW2tMZV09X25bTkxlXT1fbltNTGVdPV9uW0lMZV09X25bT0xlXT0hMDtfbltnTGVdPV9uW19lZV09X25bRUxlXT0hMTtvKGJULCJiYXNlQ2xvbmUiKTt3VD1iVH0pO2Z1bmN0aW9uIEJMZSh0KXtyZXR1cm4gd1QodCxQTGUpfXZhciBQTGUsYW4sZ0w9TigoKT0+eyJ1c2Ugc3RyaWN0IjttTCgpO1BMZT00O28oQkxlLCJjbG9uZSIpO2FuPUJMZX0pO2Z1bmN0aW9uIHpMZSh0KXtyZXR1cm4gd1QodCxGTGV8JExlKX12YXIgRkxlLCRMZSx5TCxMZWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjttTCgpO0ZMZT0xLCRMZT00O28oekxlLCJjbG9uZURlZXAiKTt5TD16TGV9KTtmdW5jdGlvbiBHTGUodCl7Zm9yKHZhciBlPS0xLHI9dD09bnVsbD8wOnQubGVuZ3RoLG49MCxpPVtdOysrZTxyOyl7dmFyIGE9dFtlXTthJiYoaVtuKytdPWEpfXJldHVybiBpfXZhciBUYyxSZWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKEdMZSwiY29tcGFjdCIpO1RjPUdMZX0pO2Z1bmN0aW9uIFVMZSh0KXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5zZXQodCxWTGUpLHRoaXN9dmFyIFZMZSxOZWUsTWVlPU4oKCk9PnsidXNlIHN0cmljdCI7VkxlPSJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIjtvKFVMZSwic2V0Q2FjaGVBZGQiKTtOZWU9VUxlfSk7ZnVuY3Rpb24gSExlKHQpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh0KX12YXIgSWVlLE9lZT1OKCgpPT57InVzZSBzdHJpY3QiO28oSExlLCJzZXRDYWNoZUhhcyIpO0llZT1ITGV9KTtmdW5jdGlvbiBUVCh0KXt2YXIgZT0tMSxyPXQ9PW51bGw/MDp0Lmxlbmd0aDtmb3IodGhpcy5fX2RhdGFfXz1uZXcgQ2Q7KytlPHI7KXRoaXMuYWRkKHRbZV0pfXZhciBEbSxrVD1OKCgpPT57InVzZSBzdHJpY3QiO1E1KCk7TWVlKCk7T2VlKCk7byhUVCwiU2V0Q2FjaGUiKTtUVC5wcm90b3R5cGUuYWRkPVRULnByb3RvdHlwZS5wdXNoPU5lZTtUVC5wcm90b3R5cGUuaGFzPUllZTtEbT1UVH0pO2Z1bmN0aW9uIFdMZSh0LGUpe2Zvcih2YXIgcj0tMSxuPXQ9PW51bGw/MDp0Lmxlbmd0aDsrK3I8bjspaWYoZSh0W3JdLHIsdCkpcmV0dXJuITA7cmV0dXJuITF9dmFyIEVULHZMPU4oKCk9PnsidXNlIHN0cmljdCI7byhXTGUsImFycmF5U29tZSIpO0VUPVdMZX0pO2Z1bmN0aW9uIHFMZSh0LGUpe3JldHVybiB0LmhhcyhlKX12YXIgTG0sU1Q9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKHFMZSwiY2FjaGVIYXMiKTtMbT1xTGV9KTtmdW5jdGlvbiBqTGUodCxlLHIsbixpLGEpe3ZhciBzPXImWUxlLGw9dC5sZW5ndGgsdT1lLmxlbmd0aDtpZihsIT11JiYhKHMmJnU+bCkpcmV0dXJuITE7dmFyIGg9YS5nZXQodCksZj1hLmdldChlKTtpZihoJiZmKXJldHVybiBoPT1lJiZmPT10O3ZhciBkPS0xLHA9ITAsbT1yJlhMZT9uZXcgRG06dm9pZCAwO2ZvcihhLnNldCh0LGUpLGEuc2V0KGUsdCk7KytkPGw7KXt2YXIgZz10W2RdLHk9ZVtkXTtpZihuKXZhciB2PXM/bih5LGcsZCxlLHQsYSk6bihnLHksZCx0LGUsYSk7aWYodiE9PXZvaWQgMCl7aWYodiljb250aW51ZTtwPSExO2JyZWFrfWlmKG0pe2lmKCFFVChlLGZ1bmN0aW9uKHgsYil7aWYoIUxtKG0sYikmJihnPT09eHx8aShnLHgscixuLGEpKSlyZXR1cm4gbS5wdXNoKGIpfSkpe3A9ITE7YnJlYWt9fWVsc2UgaWYoIShnPT09eXx8aShnLHkscixuLGEpKSl7cD0hMTticmVha319cmV0dXJuIGEuZGVsZXRlKHQpLGEuZGVsZXRlKGUpLHB9dmFyIFlMZSxYTGUsQ1QseEw9TigoKT0+eyJ1c2Ugc3RyaWN0IjtrVCgpO3ZMKCk7U1QoKTtZTGU9MSxYTGU9MjtvKGpMZSwiZXF1YWxBcnJheXMiKTtDVD1qTGV9KTtmdW5jdGlvbiBLTGUodCl7dmFyIGU9LTEscj1BcnJheSh0LnNpemUpO3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24obixpKXtyWysrZV09W2ksbl19KSxyfXZhciBQZWUsQmVlPU4oKCk9PnsidXNlIHN0cmljdCI7byhLTGUsIm1hcFRvQXJyYXkiKTtQZWU9S0xlfSk7ZnVuY3Rpb24gUUxlKHQpe3ZhciBlPS0xLHI9QXJyYXkodC5zaXplKTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JbKytlXT1ufSkscn12YXIgUm0sQVQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKFFMZSwic2V0VG9BcnJheSIpO1JtPVFMZX0pO2Z1bmN0aW9uIGhSZSh0LGUscixuLGksYSxzKXtzd2l0Y2gocil7Y2FzZSB1UmU6aWYodC5ieXRlTGVuZ3RoIT1lLmJ5dGVMZW5ndGh8fHQuYnl0ZU9mZnNldCE9ZS5ieXRlT2Zmc2V0KXJldHVybiExO3Q9dC5idWZmZXIsZT1lLmJ1ZmZlcjtjYXNlIGNSZTpyZXR1cm4hKHQuYnl0ZUxlbmd0aCE9ZS5ieXRlTGVuZ3RofHwhYShuZXcgajAodCksbmV3IGowKGUpKSk7Y2FzZSBlUmU6Y2FzZSB0UmU6Y2FzZSBpUmU6cmV0dXJuIFJvKCt0LCtlKTtjYXNlIHJSZTpyZXR1cm4gdC5uYW1lPT1lLm5hbWUmJnQubWVzc2FnZT09ZS5tZXNzYWdlO2Nhc2UgYVJlOmNhc2Ugb1JlOnJldHVybiB0PT1lKyIiO2Nhc2UgblJlOnZhciBsPVBlZTtjYXNlIHNSZTp2YXIgdT1uJlpMZTtpZihsfHwobD1SbSksdC5zaXplIT1lLnNpemUmJiF1KXJldHVybiExO3ZhciBoPXMuZ2V0KHQpO2lmKGgpcmV0dXJuIGg9PWU7bnw9SkxlLHMuc2V0KHQsZSk7dmFyIGY9Q1QobCh0KSxsKGUpLG4saSxhLHMpO3JldHVybiBzLmRlbGV0ZSh0KSxmO2Nhc2UgbFJlOmlmKGJMKXJldHVybiBiTC5jYWxsKHQpPT1iTC5jYWxsKGUpfXJldHVybiExfXZhciBaTGUsSkxlLGVSZSx0UmUsclJlLG5SZSxpUmUsYVJlLHNSZSxvUmUsbFJlLGNSZSx1UmUsRmVlLGJMLCRlZSx6ZWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtFZCgpO0Q5KCk7U2QoKTt4TCgpO0JlZSgpO0FUKCk7WkxlPTEsSkxlPTIsZVJlPSJbb2JqZWN0IEJvb2xlYW5dIix0UmU9IltvYmplY3QgRGF0ZV0iLHJSZT0iW29iamVjdCBFcnJvcl0iLG5SZT0iW29iamVjdCBNYXBdIixpUmU9IltvYmplY3QgTnVtYmVyXSIsYVJlPSJbb2JqZWN0IFJlZ0V4cF0iLHNSZT0iW29iamVjdCBTZXRdIixvUmU9IltvYmplY3QgU3RyaW5nXSIsbFJlPSJbb2JqZWN0IFN5bWJvbF0iLGNSZT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLHVSZT0iW29iamVjdCBEYXRhVmlld10iLEZlZT1lYT9lYS5wcm90b3R5cGU6dm9pZCAwLGJMPUZlZT9GZWUudmFsdWVPZjp2b2lkIDA7byhoUmUsImVxdWFsQnlUYWciKTskZWU9aFJlfSk7ZnVuY3Rpb24gbVJlKHQsZSxyLG4saSxhKXt2YXIgcz1yJmZSZSxsPUMyKHQpLHU9bC5sZW5ndGgsaD1DMihlKSxmPWgubGVuZ3RoO2lmKHUhPWYmJiFzKXJldHVybiExO2Zvcih2YXIgZD11O2QtLTspe3ZhciBwPWxbZF07aWYoIShzP3AgaW4gZTpwUmUuY2FsbChlLHApKSlyZXR1cm4hMX12YXIgbT1hLmdldCh0KSxnPWEuZ2V0KGUpO2lmKG0mJmcpcmV0dXJuIG09PWUmJmc9PXQ7dmFyIHk9ITA7YS5zZXQodCxlKSxhLnNldChlLHQpO2Zvcih2YXIgdj1zOysrZDx1Oyl7cD1sW2RdO3ZhciB4PXRbcF0sYj1lW3BdO2lmKG4pdmFyIHc9cz9uKGIseCxwLGUsdCxhKTpuKHgsYixwLHQsZSxhKTtpZighKHc9PT12b2lkIDA/eD09PWJ8fGkoeCxiLHIsbixhKTp3KSl7eT0hMTticmVha312fHwodj1wPT0iY29uc3RydWN0b3IiKX1pZih5JiYhdil7dmFyIEM9dC5jb25zdHJ1Y3RvcixUPWUuY29uc3RydWN0b3I7QyE9VCYmImNvbnN0cnVjdG9yImluIHQmJiJjb25zdHJ1Y3RvciJpbiBlJiYhKHR5cGVvZiBDPT0iZnVuY3Rpb24iJiZDIGluc3RhbmNlb2YgQyYmdHlwZW9mIFQ9PSJmdW5jdGlvbiImJlQgaW5zdGFuY2VvZiBUKSYmKHk9ITEpfXJldHVybiBhLmRlbGV0ZSh0KSxhLmRlbGV0ZShlKSx5fXZhciBmUmUsZFJlLHBSZSxHZWUsVmVlPU4oKCk9PnsidXNlIHN0cmljdCI7ZkwoKTtmUmU9MSxkUmU9T2JqZWN0LnByb3RvdHlwZSxwUmU9ZFJlLmhhc093blByb3BlcnR5O28obVJlLCJlcXVhbE9iamVjdHMiKTtHZWU9bVJlfSk7ZnVuY3Rpb24gdlJlKHQsZSxyLG4saSxhKXt2YXIgcz1QdCh0KSxsPVB0KGUpLHU9cz9IZWU6aW8odCksaD1sP0hlZTppbyhlKTt1PXU9PVVlZT9fVDp1LGg9aD09VWVlP19UOmg7dmFyIGY9dT09X1QsZD1oPT1fVCxwPXU9PWg7aWYocCYmU2wodCkpe2lmKCFTbChlKSlyZXR1cm4hMTtzPSEwLGY9ITF9aWYocCYmIWYpcmV0dXJuIGF8fChhPW5ldyBsYyksc3x8T2godCk/Q1QodCxlLHIsbixpLGEpOiRlZSh0LGUsdSxyLG4saSxhKTtpZighKHImZ1JlKSl7dmFyIG09ZiYmV2VlLmNhbGwodCwiX193cmFwcGVkX18iKSxnPWQmJldlZS5jYWxsKGUsIl9fd3JhcHBlZF9fIik7aWYobXx8Zyl7dmFyIHk9bT90LnZhbHVlKCk6dCx2PWc/ZS52YWx1ZSgpOmU7cmV0dXJuIGF8fChhPW5ldyBsYyksaSh5LHYscixuLGEpfX1yZXR1cm4gcD8oYXx8KGE9bmV3IGxjKSxHZWUodCxlLHIsbixpLGEpKTohMX12YXIgZ1JlLFVlZSxIZWUsX1QseVJlLFdlZSxxZWUsWWVlPU4oKCk9PnsidXNlIHN0cmljdCI7WnYoKTt4TCgpO3plZSgpO1ZlZSgpOyRkKCk7VW4oKTt0bSgpO3IyKCk7Z1JlPTEsVWVlPSJbb2JqZWN0IEFyZ3VtZW50c10iLEhlZT0iW29iamVjdCBBcnJheV0iLF9UPSJbb2JqZWN0IE9iamVjdF0iLHlSZT1PYmplY3QucHJvdG90eXBlLFdlZT15UmUuaGFzT3duUHJvcGVydHk7byh2UmUsImJhc2VJc0VxdWFsRGVlcCIpO3FlZT12UmV9KTtmdW5jdGlvbiBYZWUodCxlLHIsbixpKXtyZXR1cm4gdD09PWU/ITA6dD09bnVsbHx8ZT09bnVsbHx8IXJpKHQpJiYhcmkoZSk/dCE9PXQmJmUhPT1lOnFlZSh0LGUscixuLFhlZSxpKX12YXIgRFQsd0w9TigoKT0+eyJ1c2Ugc3RyaWN0IjtZZWUoKTtObygpO28oWGVlLCJiYXNlSXNFcXVhbCIpO0RUPVhlZX0pO2Z1bmN0aW9uIHdSZSh0LGUscixuKXt2YXIgaT1yLmxlbmd0aCxhPWkscz0hbjtpZih0PT1udWxsKXJldHVybiFhO2Zvcih0PU9iamVjdCh0KTtpLS07KXt2YXIgbD1yW2ldO2lmKHMmJmxbMl0/bFsxXSE9PXRbbFswXV06IShsWzBdaW4gdCkpcmV0dXJuITF9Zm9yKDsrK2k8YTspe2w9cltpXTt2YXIgdT1sWzBdLGg9dFt1XSxmPWxbMV07aWYocyYmbFsyXSl7aWYoaD09PXZvaWQgMCYmISh1IGluIHQpKXJldHVybiExfWVsc2V7dmFyIGQ9bmV3IGxjO2lmKG4pdmFyIHA9bihoLGYsdSx0LGUsZCk7aWYoIShwPT09dm9pZCAwP0RUKGYsaCx4UmV8YlJlLG4sZCk6cCkpcmV0dXJuITF9fXJldHVybiEwfXZhciB4UmUsYlJlLGplZSxLZWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtadigpO3dMKCk7eFJlPTEsYlJlPTI7byh3UmUsImJhc2VJc01hdGNoIik7amVlPXdSZX0pO2Z1bmN0aW9uIFRSZSh0KXtyZXR1cm4gdD09PXQmJiFibih0KX12YXIgTFQsVEw9TigoKT0+eyJ1c2Ugc3RyaWN0IjtKcygpO28oVFJlLCJpc1N0cmljdENvbXBhcmFibGUiKTtMVD1UUmV9KTtmdW5jdGlvbiBrUmUodCl7Zm9yKHZhciBlPXpyKHQpLHI9ZS5sZW5ndGg7ci0tOyl7dmFyIG49ZVtyXSxpPXRbbl07ZVtyXT1bbixpLExUKGkpXX1yZXR1cm4gZX12YXIgUWVlLFplZT1OKCgpPT57InVzZSBzdHJpY3QiO1RMKCk7eGMoKTtvKGtSZSwiZ2V0TWF0Y2hEYXRhIik7UWVlPWtSZX0pO2Z1bmN0aW9uIEVSZSh0LGUpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD8hMTpyW3RdPT09ZSYmKGUhPT12b2lkIDB8fHQgaW4gT2JqZWN0KHIpKX19dmFyIFJULGtMPU4oKCk9PnsidXNlIHN0cmljdCI7byhFUmUsIm1hdGNoZXNTdHJpY3RDb21wYXJhYmxlIik7UlQ9RVJlfSk7ZnVuY3Rpb24gU1JlKHQpe3ZhciBlPVFlZSh0KTtyZXR1cm4gZS5sZW5ndGg9PTEmJmVbMF1bMl0/UlQoZVswXVswXSxlWzBdWzFdKTpmdW5jdGlvbihyKXtyZXR1cm4gcj09PXR8fGplZShyLHQsZSl9fXZhciBKZWUsZXRlPU4oKCk9PnsidXNlIHN0cmljdCI7S2VlKCk7WmVlKCk7a0woKTtvKFNSZSwiYmFzZU1hdGNoZXMiKTtKZWU9U1JlfSk7ZnVuY3Rpb24gQ1JlKHQsZSl7cmV0dXJuIHQhPW51bGwmJmUgaW4gT2JqZWN0KHQpfXZhciB0dGUscnRlPU4oKCk9PnsidXNlIHN0cmljdCI7byhDUmUsImJhc2VIYXNJbiIpO3R0ZT1DUmV9KTtmdW5jdGlvbiBBUmUodCxlLHIpe2U9WWgoZSx0KTtmb3IodmFyIG49LTEsaT1lLmxlbmd0aCxhPSExOysrbjxpOyl7dmFyIHM9YmMoZVtuXSk7aWYoIShhPXQhPW51bGwmJnIodCxzKSkpYnJlYWs7dD10W3NdfXJldHVybiBhfHwrK24hPWk/YTooaT10PT1udWxsPzA6dC5sZW5ndGgsISFpJiZlbShpKSYmUGgocyxpKSYmKFB0KHQpfHxFbCh0KSkpfXZhciBOVCxFTD1OKCgpPT57InVzZSBzdHJpY3QiO0UyKCk7SjAoKTtVbigpO2kyKCk7c3coKTtFbSgpO28oQVJlLCJoYXNQYXRoIik7TlQ9QVJlfSk7ZnVuY3Rpb24gX1JlKHQsZSl7cmV0dXJuIHQhPW51bGwmJk5UKHQsZSx0dGUpfXZhciBNVCxTTD1OKCgpPT57InVzZSBzdHJpY3QiO3J0ZSgpO0VMKCk7byhfUmUsImhhc0luIik7TVQ9X1JlfSk7ZnVuY3Rpb24gUlJlKHQsZSl7cmV0dXJuIGttKHQpJiZMVChlKT9SVChiYyh0KSxlKTpmdW5jdGlvbihyKXt2YXIgbj1SSihyLHQpO3JldHVybiBuPT09dm9pZCAwJiZuPT09ZT9NVChyLHQpOkRUKGUsbixEUmV8TFJlKX19dmFyIERSZSxMUmUsbnRlLGl0ZT1OKCgpPT57InVzZSBzdHJpY3QiO3dMKCk7TkooKTtTTCgpO29UKCk7VEwoKTtrTCgpO0VtKCk7RFJlPTEsTFJlPTI7byhSUmUsImJhc2VNYXRjaGVzUHJvcGVydHkiKTtudGU9UlJlfSk7ZnVuY3Rpb24gTlJlKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZT8uW3RdfX12YXIgSVQsQ0w9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKE5SZSwiYmFzZVByb3BlcnR5Iik7SVQ9TlJlfSk7ZnVuY3Rpb24gTVJlKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gWGgoZSx0KX19dmFyIGF0ZSxzdGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtTMigpO28oTVJlLCJiYXNlUHJvcGVydHlEZWVwIik7YXRlPU1SZX0pO2Z1bmN0aW9uIElSZSh0KXtyZXR1cm4ga20odCk/SVQoYmModCkpOmF0ZSh0KX12YXIgb3RlLGx0ZT1OKCgpPT57InVzZSBzdHJpY3QiO0NMKCk7c3RlKCk7b1QoKTtFbSgpO28oSVJlLCJwcm9wZXJ0eSIpO290ZT1JUmV9KTtmdW5jdGlvbiBPUmUodCl7cmV0dXJuIHR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6dD09bnVsbD90YTp0eXBlb2YgdD09Im9iamVjdCI/UHQodCk/bnRlKHRbMF0sdFsxXSk6SmVlKHQpOm90ZSh0KX12YXIgcG4scnM9TigoKT0+eyJ1c2Ugc3RyaWN0IjtldGUoKTtpdGUoKTtDdSgpO1VuKCk7bHRlKCk7byhPUmUsImJhc2VJdGVyYXRlZSIpO3BuPU9SZX0pO2Z1bmN0aW9uIFBSZSh0LGUscixuKXtmb3IodmFyIGk9LTEsYT10PT1udWxsPzA6dC5sZW5ndGg7KytpPGE7KXt2YXIgcz10W2ldO2UobixzLHIocyksdCl9cmV0dXJuIG59dmFyIGN0ZSx1dGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKFBSZSwiYXJyYXlBZ2dyZWdhdG9yIik7Y3RlPVBSZX0pO2Z1bmN0aW9uIEJSZSh0LGUpe3JldHVybiB0JiZYMCh0LGUsenIpfXZhciBObSxPVD1OKCgpPT57InVzZSBzdHJpY3QiO1o1KCk7eGMoKTtvKEJSZSwiYmFzZUZvck93biIpO05tPUJSZX0pO2Z1bmN0aW9uIEZSZSh0LGUpe3JldHVybiBmdW5jdGlvbihyLG4pe2lmKHI9PW51bGwpcmV0dXJuIHI7aWYoIWNpKHIpKXJldHVybiB0KHIsbik7Zm9yKHZhciBpPXIubGVuZ3RoLGE9ZT9pOi0xLHM9T2JqZWN0KHIpOyhlP2EtLTorK2E8aSkmJm4oc1thXSxhLHMpIT09ITE7KTtyZXR1cm4gcn19dmFyIGh0ZSxmdGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtNbygpO28oRlJlLCJjcmVhdGVCYXNlRWFjaCIpO2h0ZT1GUmV9KTt2YXIgJFJlLE1zLEtoPU4oKCk9PnsidXNlIHN0cmljdCI7T1QoKTtmdGUoKTskUmU9aHRlKE5tKSxNcz0kUmV9KTtmdW5jdGlvbiB6UmUodCxlLHIsbil7cmV0dXJuIE1zKHQsZnVuY3Rpb24oaSxhLHMpe2UobixpLHIoaSkscyl9KSxufXZhciBkdGUscHRlPU4oKCk9PnsidXNlIHN0cmljdCI7S2goKTtvKHpSZSwiYmFzZUFnZ3JlZ2F0b3IiKTtkdGU9elJlfSk7ZnVuY3Rpb24gR1JlKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7dmFyIGk9UHQocik/Y3RlOmR0ZSxhPWU/ZSgpOnt9O3JldHVybiBpKHIsdCxwbihuLDIpLGEpfX12YXIgbXRlLGd0ZT1OKCgpPT57InVzZSBzdHJpY3QiO3V0ZSgpO3B0ZSgpO3JzKCk7VW4oKTtvKEdSZSwiY3JlYXRlQWdncmVnYXRvciIpO210ZT1HUmV9KTt2YXIgVlJlLFBULHl0ZT1OKCgpPT57InVzZSBzdHJpY3QiO0xvKCk7VlJlPW8oZnVuY3Rpb24oKXtyZXR1cm4gbGkuRGF0ZS5ub3coKX0sIm5vdyIpLFBUPVZSZX0pO3ZhciB2dGUsVVJlLEhSZSxRaCx4dGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtubSgpO1NkKCk7TGQoKTtCaCgpO3Z0ZT1PYmplY3QucHJvdG90eXBlLFVSZT12dGUuaGFzT3duUHJvcGVydHksSFJlPWZjKGZ1bmN0aW9uKHQsZSl7dD1PYmplY3QodCk7dmFyIHI9LTEsbj1lLmxlbmd0aCxpPW4+Mj9lWzJdOnZvaWQgMDtmb3IoaSYmZW8oZVswXSxlWzFdLGkpJiYobj0xKTsrK3I8bjspZm9yKHZhciBhPWVbcl0scz1DcyhhKSxsPS0xLHU9cy5sZW5ndGg7KytsPHU7KXt2YXIgaD1zW2xdLGY9dFtoXTsoZj09PXZvaWQgMHx8Um8oZix2dGVbaF0pJiYhVVJlLmNhbGwodCxoKSkmJih0W2hdPWFbaF0pfXJldHVybiB0fSksUWg9SFJlfSk7ZnVuY3Rpb24gV1JlKHQsZSxyKXtmb3IodmFyIG49LTEsaT10PT1udWxsPzA6dC5sZW5ndGg7KytuPGk7KWlmKHIoZSx0W25dKSlyZXR1cm4hMDtyZXR1cm4hMX12YXIgQlQsQUw9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKFdSZSwiYXJyYXlJbmNsdWRlc1dpdGgiKTtCVD1XUmV9KTtmdW5jdGlvbiBZUmUodCxlLHIsbil7dmFyIGk9LTEsYT1hVCxzPSEwLGw9dC5sZW5ndGgsdT1bXSxoPWUubGVuZ3RoO2lmKCFsKXJldHVybiB1O3ImJihlPU5zKGUsSW8ocikpKSxuPyhhPUJULHM9ITEpOmUubGVuZ3RoPj1xUmUmJihhPUxtLHM9ITEsZT1uZXcgRG0oZSkpO2U6Zm9yKDsrK2k8bDspe3ZhciBmPXRbaV0sZD1yPT1udWxsP2Y6cihmKTtpZihmPW58fGYhPT0wP2Y6MCxzJiZkPT09ZCl7Zm9yKHZhciBwPWg7cC0tOylpZihlW3BdPT09ZCljb250aW51ZSBlO3UucHVzaChmKX1lbHNlIGEoZSxkLG4pfHx1LnB1c2goZil9cmV0dXJuIHV9dmFyIHFSZSxidGUsd3RlPU4oKCk9PnsidXNlIHN0cmljdCI7a1QoKTtzTCgpO0FMKCk7QmQoKTtfZCgpO1NUKCk7cVJlPTIwMDtvKFlSZSwiYmFzZURpZmZlcmVuY2UiKTtidGU9WVJlfSk7dmFyIFhSZSxaaCxUdGU9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt3dGUoKTtDbSgpO25tKCk7b3coKTtYUmU9ZmMoZnVuY3Rpb24odCxlKXtyZXR1cm4gQWQodCk/YnRlKHQsd2MoZSwxLEFkLCEwKSk6W119KSxaaD1YUmV9KTtmdW5jdGlvbiBqUmUodCl7dmFyIGU9dD09bnVsbD8wOnQubGVuZ3RoO3JldHVybiBlP3RbZS0xXTp2b2lkIDB9dmFyIGdhLGt0ZT1OKCgpPT57InVzZSBzdHJpY3QiO28oalJlLCJsYXN0Iik7Z2E9alJlfSk7ZnVuY3Rpb24gS1JlKHQsZSxyKXt2YXIgbj10PT1udWxsPzA6dC5sZW5ndGg7cmV0dXJuIG4/KGU9cnx8ZT09PXZvaWQgMD8xOnZjKGUpLGhUKHQsZTwwPzA6ZSxuKSk6W119dmFyIGdpLEV0ZT1OKCgpPT57InVzZSBzdHJpY3QiO2xMKCk7Ym0oKTtvKEtSZSwiZHJvcCIpO2dpPUtSZX0pO2Z1bmN0aW9uIFFSZSh0LGUscil7dmFyIG49dD09bnVsbD8wOnQubGVuZ3RoO3JldHVybiBuPyhlPXJ8fGU9PT12b2lkIDA/MTp2YyhlKSxlPW4tZSxoVCh0LDAsZTwwPzA6ZSkpOltdfXZhciBOdSxTdGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtsTCgpO2JtKCk7byhRUmUsImRyb3BSaWdodCIpO051PVFSZX0pO2Z1bmN0aW9uIFpSZSh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDp0YX12YXIgTW0sRlQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtDdSgpO28oWlJlLCJjYXN0RnVuY3Rpb24iKTtNbT1aUmV9KTtmdW5jdGlvbiBKUmUodCxlKXt2YXIgcj1QdCh0KT9yVDpNcztyZXR1cm4gcih0LE1tKGUpKX12YXIgQWUsJFQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtpTCgpO0toKCk7RlQoKTtVbigpO28oSlJlLCJmb3JFYWNoIik7QWU9SlJlfSk7dmFyIEN0ZT1OKCgpPT57InVzZSBzdHJpY3QiOyRUKCl9KTtmdW5jdGlvbiBlTmUodCxlKXtmb3IodmFyIHI9LTEsbj10PT1udWxsPzA6dC5sZW5ndGg7KytyPG47KWlmKCFlKHRbcl0scix0KSlyZXR1cm4hMTtyZXR1cm4hMH12YXIgQXRlLF90ZT1OKCgpPT57InVzZSBzdHJpY3QiO28oZU5lLCJhcnJheUV2ZXJ5Iik7QXRlPWVOZX0pO2Z1bmN0aW9uIHROZSh0LGUpe3ZhciByPSEwO3JldHVybiBNcyh0LGZ1bmN0aW9uKG4saSxhKXtyZXR1cm4gcj0hIWUobixpLGEpLHJ9KSxyfXZhciBEdGUsTHRlPU4oKCk9PnsidXNlIHN0cmljdCI7S2goKTtvKHROZSwiYmFzZUV2ZXJ5Iik7RHRlPXROZX0pO2Z1bmN0aW9uIHJOZSh0LGUscil7dmFyIG49UHQodCk/QXRlOkR0ZTtyZXR1cm4gciYmZW8odCxlLHIpJiYoZT12b2lkIDApLG4odCxwbihlLDMpKX12YXIgTWEsUnRlPU4oKCk9PnsidXNlIHN0cmljdCI7X3RlKCk7THRlKCk7cnMoKTtVbigpO0xkKCk7byhyTmUsImV2ZXJ5Iik7TWE9ck5lfSk7ZnVuY3Rpb24gbk5lKHQsZSl7dmFyIHI9W107cmV0dXJuIE1zKHQsZnVuY3Rpb24obixpLGEpe2UobixpLGEpJiZyLnB1c2gobil9KSxyfXZhciB6VCxfTD1OKCgpPT57InVzZSBzdHJpY3QiO0toKCk7byhuTmUsImJhc2VGaWx0ZXIiKTt6VD1uTmV9KTtmdW5jdGlvbiBpTmUodCxlKXt2YXIgcj1QdCh0KT9BbTp6VDtyZXR1cm4gcih0LHBuKGUsMykpfXZhciBZcixETD1OKCgpPT57InVzZSBzdHJpY3QiO2ZUKCk7X0woKTtycygpO1VuKCk7byhpTmUsImZpbHRlciIpO1lyPWlOZX0pO2Z1bmN0aW9uIGFOZSh0KXtyZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3ZhciBpPU9iamVjdChlKTtpZighY2koZSkpe3ZhciBhPXBuKHIsMyk7ZT16cihlKSxyPW8oZnVuY3Rpb24obCl7cmV0dXJuIGEoaVtsXSxsLGkpfSwicHJlZGljYXRlIil9dmFyIHM9dChlLHIsbik7cmV0dXJuIHM+LTE/aVthP2Vbc106c106dm9pZCAwfX12YXIgTnRlLE10ZT1OKCgpPT57InVzZSBzdHJpY3QiO3JzKCk7TW8oKTt4YygpO28oYU5lLCJjcmVhdGVGaW5kIik7TnRlPWFOZX0pO2Z1bmN0aW9uIG9OZSh0LGUscil7dmFyIG49dD09bnVsbD8wOnQubGVuZ3RoO2lmKCFuKXJldHVybi0xO3ZhciBpPXI9PW51bGw/MDp2YyhyKTtyZXR1cm4gaTwwJiYoaT1zTmUobitpLDApKSxuVCh0LHBuKGUsMyksaSl9dmFyIHNOZSxJdGUsT3RlPU4oKCk9PnsidXNlIHN0cmljdCI7YUwoKTtycygpO2JtKCk7c05lPU1hdGgubWF4O28ob05lLCJmaW5kSW5kZXgiKTtJdGU9b05lfSk7dmFyIGxOZSxucyxQdGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtNdGUoKTtPdGUoKTtsTmU9TnRlKEl0ZSksbnM9bE5lfSk7ZnVuY3Rpb24gY05lKHQpe3JldHVybiB0JiZ0Lmxlbmd0aD90WzBdOnZvaWQgMH12YXIgaWEsQnRlPU4oKCk9PnsidXNlIHN0cmljdCI7byhjTmUsImhlYWQiKTtpYT1jTmV9KTt2YXIgRnRlPU4oKCk9PnsidXNlIHN0cmljdCI7QnRlKCl9KTtmdW5jdGlvbiB1TmUodCxlKXt2YXIgcj0tMSxuPWNpKHQpP0FycmF5KHQubGVuZ3RoKTpbXTtyZXR1cm4gTXModCxmdW5jdGlvbihpLGEscyl7blsrK3JdPWUoaSxhLHMpfSksbn12YXIgR1QsTEw9TigoKT0+eyJ1c2Ugc3RyaWN0IjtLaCgpO01vKCk7byh1TmUsImJhc2VNYXAiKTtHVD11TmV9KTtmdW5jdGlvbiBoTmUodCxlKXt2YXIgcj1QdCh0KT9OczpHVDtyZXR1cm4gcih0LHBuKGUsMykpfXZhciBKZSxJbT1OKCgpPT57InVzZSBzdHJpY3QiO0JkKCk7cnMoKTtMTCgpO1VuKCk7byhoTmUsIm1hcCIpO0plPWhOZX0pO2Z1bmN0aW9uIGZOZSh0LGUpe3JldHVybiB3YyhKZSh0LGUpLDEpfXZhciB5YSxSTD1OKCgpPT57InVzZSBzdHJpY3QiO0NtKCk7SW0oKTtvKGZOZSwiZmxhdE1hcCIpO3lhPWZOZX0pO2Z1bmN0aW9uIGROZSh0LGUpe3JldHVybiB0PT1udWxsP3Q6WDAodCxNbShlKSxDcyl9dmFyIE5MLCR0ZT1OKCgpPT57InVzZSBzdHJpY3QiO1o1KCk7RlQoKTtCaCgpO28oZE5lLCJmb3JJbiIpO05MPWROZX0pO2Z1bmN0aW9uIHBOZSh0LGUpe3JldHVybiB0JiZObSh0LE1tKGUpKX12YXIgTUwsenRlPU4oKCk9PnsidXNlIHN0cmljdCI7T1QoKTtGVCgpO28ocE5lLCJmb3JPd24iKTtNTD1wTmV9KTt2YXIgbU5lLGdOZSx5TmUsSUwsR3RlPU4oKCk9PnsidXNlIHN0cmljdCI7WTAoKTtndGUoKTttTmU9T2JqZWN0LnByb3RvdHlwZSxnTmU9bU5lLmhhc093blByb3BlcnR5LHlOZT1tdGUoZnVuY3Rpb24odCxlLHIpe2dOZS5jYWxsKHQscik/dFtyXS5wdXNoKGUpOmNjKHQscixbZV0pfSksSUw9eU5lfSk7ZnVuY3Rpb24gdk5lKHQsZSl7cmV0dXJuIHQ+ZX12YXIgVnRlLFV0ZT1OKCgpPT57InVzZSBzdHJpY3QiO28odk5lLCJiYXNlR3QiKTtWdGU9dk5lfSk7ZnVuY3Rpb24gd05lKHQsZSl7cmV0dXJuIHQhPW51bGwmJmJOZS5jYWxsKHQsZSl9dmFyIHhOZSxiTmUsSHRlLFd0ZT1OKCgpPT57InVzZSBzdHJpY3QiO3hOZT1PYmplY3QucHJvdG90eXBlLGJOZT14TmUuaGFzT3duUHJvcGVydHk7byh3TmUsImJhc2VIYXMiKTtIdGU9d05lfSk7ZnVuY3Rpb24gVE5lKHQsZSl7cmV0dXJuIHQhPW51bGwmJk5UKHQsZSxIdGUpfXZhciBCdCxxdGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtXdGUoKTtFTCgpO28oVE5lLCJoYXMiKTtCdD1UTmV9KTtmdW5jdGlvbiBFTmUodCl7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nInx8IVB0KHQpJiZyaSh0KSYmZGEodCk9PWtOZX12YXIga05lLHlpLFZUPU4oKCk9PnsidXNlIHN0cmljdCI7a3UoKTtVbigpO05vKCk7a05lPSJbb2JqZWN0IFN0cmluZ10iO28oRU5lLCJpc1N0cmluZyIpO3lpPUVOZX0pO2Z1bmN0aW9uIFNOZSh0LGUpe3JldHVybiBOcyhlLGZ1bmN0aW9uKHIpe3JldHVybiB0W3JdfSl9dmFyIFl0ZSxYdGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtCZCgpO28oU05lLCJiYXNlVmFsdWVzIik7WXRlPVNOZX0pO2Z1bmN0aW9uIENOZSh0KXtyZXR1cm4gdD09bnVsbD9bXTpZdGUodCx6cih0KSl9dmFyIGJyLE9MPU4oKCk9PnsidXNlIHN0cmljdCI7WHRlKCk7eGMoKTtvKENOZSwidmFsdWVzIik7YnI9Q05lfSk7ZnVuY3Rpb24gX05lKHQsZSxyLG4pe3Q9Y2kodCk/dDpicih0KSxyPXImJiFuP3ZjKHIpOjA7dmFyIGk9dC5sZW5ndGg7cmV0dXJuIHI8MCYmKHI9QU5lKGkrciwwKSkseWkodCk/cjw9aSYmdC5pbmRleE9mKGUscik+LTE6ISFpJiZ3bSh0LGUscik+LTF9dmFyIEFOZSxxbixqdGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtpVCgpO01vKCk7VlQoKTtibSgpO09MKCk7QU5lPU1hdGgubWF4O28oX05lLCJpbmNsdWRlcyIpO3FuPV9OZX0pO2Z1bmN0aW9uIExOZSh0LGUscil7dmFyIG49dD09bnVsbD8wOnQubGVuZ3RoO2lmKCFuKXJldHVybi0xO3ZhciBpPXI9PW51bGw/MDp2YyhyKTtyZXR1cm4gaTwwJiYoaT1ETmUobitpLDApKSx3bSh0LGUsaSl9dmFyIEROZSxVVCxLdGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtpVCgpO2JtKCk7RE5lPU1hdGgubWF4O28oTE5lLCJpbmRleE9mIik7VVQ9TE5lfSk7ZnVuY3Rpb24gT05lKHQpe2lmKHQ9PW51bGwpcmV0dXJuITA7aWYoY2kodCkmJihQdCh0KXx8dHlwZW9mIHQ9PSJzdHJpbmcifHx0eXBlb2YgdC5zcGxpY2U9PSJmdW5jdGlvbiJ8fFNsKHQpfHxPaCh0KXx8RWwodCkpKXJldHVybiF0Lmxlbmd0aDt2YXIgZT1pbyh0KTtpZihlPT1STmV8fGU9PU5OZSlyZXR1cm4hdC5zaXplO2lmKHVjKHQpKXJldHVybiFUbSh0KS5sZW5ndGg7Zm9yKHZhciByIGluIHQpaWYoSU5lLmNhbGwodCxyKSlyZXR1cm4hMTtyZXR1cm4hMH12YXIgUk5lLE5OZSxNTmUsSU5lLHVyLEhUPU4oKCk9PnsidXNlIHN0cmljdCI7c1QoKTskZCgpO0owKCk7VW4oKTtNbygpO3RtKCk7WjAoKTtyMigpO1JOZT0iW29iamVjdCBNYXBdIixOTmU9IltvYmplY3QgU2V0XSIsTU5lPU9iamVjdC5wcm90b3R5cGUsSU5lPU1OZS5oYXNPd25Qcm9wZXJ0eTtvKE9OZSwiaXNFbXB0eSIpO3VyPU9OZX0pO2Z1bmN0aW9uIEJOZSh0KXtyZXR1cm4gcmkodCkmJmRhKHQpPT1QTmV9dmFyIFBOZSxRdGUsWnRlPU4oKCk9PnsidXNlIHN0cmljdCI7a3UoKTtObygpO1BOZT0iW29iamVjdCBSZWdFeHBdIjtvKEJOZSwiYmFzZUlzUmVnRXhwIik7UXRlPUJOZX0pO3ZhciBKdGUsRk5lLHpvLGVyZT1OKCgpPT57InVzZSBzdHJpY3QiO1p0ZSgpO19kKCk7dDIoKTtKdGU9T28mJk9vLmlzUmVnRXhwLEZOZT1KdGU/SW8oSnRlKTpRdGUsem89Rk5lfSk7ZnVuY3Rpb24gJE5lKHQpe3JldHVybiB0PT09dm9pZCAwfXZhciBwcix0cmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKCROZSwiaXNVbmRlZmluZWQiKTtwcj0kTmV9KTtmdW5jdGlvbiB6TmUodCxlKXtyZXR1cm4gdDxlfXZhciBXVCxQTD1OKCgpPT57InVzZSBzdHJpY3QiO28oek5lLCJiYXNlTHQiKTtXVD16TmV9KTtmdW5jdGlvbiBHTmUodCxlKXt2YXIgcj17fTtyZXR1cm4gZT1wbihlLDMpLE5tKHQsZnVuY3Rpb24obixpLGEpe2NjKHIsaSxlKG4saSxhKSl9KSxyfXZhciB6ZCxycmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtZMCgpO09UKCk7cnMoKTtvKEdOZSwibWFwVmFsdWVzIik7emQ9R05lfSk7ZnVuY3Rpb24gVk5lKHQsZSxyKXtmb3IodmFyIG49LTEsaT10Lmxlbmd0aDsrK248aTspe3ZhciBhPXRbbl0scz1lKGEpO2lmKHMhPW51bGwmJihsPT09dm9pZCAwP3M9PT1zJiYhbm8ocyk6cihzLGwpKSl2YXIgbD1zLHU9YX1yZXR1cm4gdX12YXIgT20scVQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtQZCgpO28oVk5lLCJiYXNlRXh0cmVtdW0iKTtPbT1WTmV9KTtmdW5jdGlvbiBVTmUodCl7cmV0dXJuIHQmJnQubGVuZ3RoP09tKHQsdGEsVnRlKTp2b2lkIDB9dmFyIElzLG5yZT1OKCgpPT57InVzZSBzdHJpY3QiO3FUKCk7VXRlKCk7Q3UoKTtvKFVOZSwibWF4Iik7SXM9VU5lfSk7ZnVuY3Rpb24gSE5lKHQpe3JldHVybiB0JiZ0Lmxlbmd0aD9PbSh0LHRhLFdUKTp2b2lkIDB9dmFyIERsLEJMPU4oKCk9PnsidXNlIHN0cmljdCI7cVQoKTtQTCgpO0N1KCk7byhITmUsIm1pbiIpO0RsPUhOZX0pO2Z1bmN0aW9uIFdOZSh0LGUpe3JldHVybiB0JiZ0Lmxlbmd0aD9PbSh0LHBuKGUsMiksV1QpOnZvaWQgMH12YXIgR2QsaXJlPU4oKCk9PnsidXNlIHN0cmljdCI7cVQoKTtycygpO1BMKCk7byhXTmUsIm1pbkJ5Iik7R2Q9V05lfSk7ZnVuY3Rpb24gWU5lKHQpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IocU5lKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHM7c3dpdGNoKGUubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIXQuY2FsbCh0aGlzKTtjYXNlIDE6cmV0dXJuIXQuY2FsbCh0aGlzLGVbMF0pO2Nhc2UgMjpyZXR1cm4hdC5jYWxsKHRoaXMsZVswXSxlWzFdKTtjYXNlIDM6cmV0dXJuIXQuY2FsbCh0aGlzLGVbMF0sZVsxXSxlWzJdKX1yZXR1cm4hdC5hcHBseSh0aGlzLGUpfX12YXIgcU5lLGFyZSxzcmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtxTmU9IkV4cGVjdGVkIGEgZnVuY3Rpb24iO28oWU5lLCJuZWdhdGUiKTthcmU9WU5lfSk7ZnVuY3Rpb24gWE5lKHQsZSxyLG4pe2lmKCFibih0KSlyZXR1cm4gdDtlPVloKGUsdCk7Zm9yKHZhciBpPS0xLGE9ZS5sZW5ndGgscz1hLTEsbD10O2whPW51bGwmJisraTxhOyl7dmFyIHU9YmMoZVtpXSksaD1yO2lmKHU9PT0iX19wcm90b19fInx8dT09PSJjb25zdHJ1Y3RvciJ8fHU9PT0icHJvdG90eXBlIilyZXR1cm4gdDtpZihpIT1zKXt2YXIgZj1sW3VdO2g9bj9uKGYsdSxsKTp2b2lkIDAsaD09PXZvaWQgMCYmKGg9Ym4oZik/ZjpQaChlW2krMV0pP1tdOnt9KX1oYyhsLHUsaCksbD1sW3VdfXJldHVybiB0fXZhciBvcmUsbHJlPU4oKCk9PnsidXNlIHN0cmljdCI7cm0oKTtFMigpO2kyKCk7SnMoKTtFbSgpO28oWE5lLCJiYXNlU2V0Iik7b3JlPVhOZX0pO2Z1bmN0aW9uIGpOZSh0LGUscil7Zm9yKHZhciBuPS0xLGk9ZS5sZW5ndGgsYT17fTsrK248aTspe3ZhciBzPWVbbl0sbD1YaCh0LHMpO3IobCxzKSYmb3JlKGEsWWgocyx0KSxsKX1yZXR1cm4gYX12YXIgWVQsRkw9TigoKT0+eyJ1c2Ugc3RyaWN0IjtTMigpO2xyZSgpO0UyKCk7byhqTmUsImJhc2VQaWNrQnkiKTtZVD1qTmV9KTtmdW5jdGlvbiBLTmUodCxlKXtpZih0PT1udWxsKXJldHVybnt9O3ZhciByPU5zKHlUKHQpLGZ1bmN0aW9uKG4pe3JldHVybltuXX0pO3JldHVybiBlPXBuKGUpLFlUKHQscixmdW5jdGlvbihuLGkpe3JldHVybiBlKG4saVswXSl9KX12YXIgT3MsY3JlPU4oKCk9PnsidXNlIHN0cmljdCI7QmQoKTtycygpO0ZMKCk7ZEwoKTtvKEtOZSwicGlja0J5Iik7T3M9S05lfSk7ZnVuY3Rpb24gUU5lKHQsZSl7dmFyIHI9dC5sZW5ndGg7Zm9yKHQuc29ydChlKTtyLS07KXRbcl09dFtyXS52YWx1ZTtyZXR1cm4gdH12YXIgdXJlLGhyZT1OKCgpPT57InVzZSBzdHJpY3QiO28oUU5lLCJiYXNlU29ydEJ5Iik7dXJlPVFOZX0pO2Z1bmN0aW9uIFpOZSh0LGUpe2lmKHQhPT1lKXt2YXIgcj10IT09dm9pZCAwLG49dD09PW51bGwsaT10PT09dCxhPW5vKHQpLHM9ZSE9PXZvaWQgMCxsPWU9PT1udWxsLHU9ZT09PWUsaD1ubyhlKTtpZighbCYmIWgmJiFhJiZ0PmV8fGEmJnMmJnUmJiFsJiYhaHx8biYmcyYmdXx8IXImJnV8fCFpKXJldHVybiAxO2lmKCFuJiYhYSYmIWgmJnQ8ZXx8aCYmciYmaSYmIW4mJiFhfHxsJiZyJiZpfHwhcyYmaXx8IXUpcmV0dXJuLTF9cmV0dXJuIDB9dmFyIGZyZSxkcmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtQZCgpO28oWk5lLCJjb21wYXJlQXNjZW5kaW5nIik7ZnJlPVpOZX0pO2Z1bmN0aW9uIEpOZSh0LGUscil7Zm9yKHZhciBuPS0xLGk9dC5jcml0ZXJpYSxhPWUuY3JpdGVyaWEscz1pLmxlbmd0aCxsPXIubGVuZ3RoOysrbjxzOyl7dmFyIHU9ZnJlKGlbbl0sYVtuXSk7aWYodSl7aWYobj49bClyZXR1cm4gdTt2YXIgaD1yW25dO3JldHVybiB1KihoPT0iZGVzYyI/LTE6MSl9fXJldHVybiB0LmluZGV4LWUuaW5kZXh9dmFyIHByZSxtcmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtkcmUoKTtvKEpOZSwiY29tcGFyZU11bHRpcGxlIik7cHJlPUpOZX0pO2Z1bmN0aW9uIGVNZSh0LGUscil7ZS5sZW5ndGg/ZT1OcyhlLGZ1bmN0aW9uKGEpe3JldHVybiBQdChhKT9mdW5jdGlvbihzKXtyZXR1cm4gWGgocyxhLmxlbmd0aD09PTE/YVswXTphKX06YX0pOmU9W3RhXTt2YXIgbj0tMTtlPU5zKGUsSW8ocG4pKTt2YXIgaT1HVCh0LGZ1bmN0aW9uKGEscyxsKXt2YXIgdT1OcyhlLGZ1bmN0aW9uKGgpe3JldHVybiBoKGEpfSk7cmV0dXJue2NyaXRlcmlhOnUsaW5kZXg6KytuLHZhbHVlOmF9fSk7cmV0dXJuIHVyZShpLGZ1bmN0aW9uKGEscyl7cmV0dXJuIHByZShhLHMscil9KX12YXIgZ3JlLHlyZT1OKCgpPT57InVzZSBzdHJpY3QiO0JkKCk7UzIoKTtycygpO0xMKCk7aHJlKCk7X2QoKTttcmUoKTtDdSgpO1VuKCk7byhlTWUsImJhc2VPcmRlckJ5Iik7Z3JlPWVNZX0pO3ZhciB0TWUsdnJlLHhyZT1OKCgpPT57InVzZSBzdHJpY3QiO0NMKCk7dE1lPUlUKCJsZW5ndGgiKSx2cmU9dE1lfSk7ZnVuY3Rpb24gZE1lKHQpe2Zvcih2YXIgZT1icmUubGFzdEluZGV4PTA7YnJlLnRlc3QodCk7KSsrZTtyZXR1cm4gZX12YXIgd3JlLHJNZSxuTWUsaU1lLGFNZSxzTWUsb01lLCRMLHpMLGxNZSxUcmUsa3JlLEVyZSxjTWUsU3JlLENyZSx1TWUsaE1lLGZNZSxicmUsQXJlLF9yZT1OKCgpPT57InVzZSBzdHJpY3QiO3dyZT0iXFx1ZDgwMC1cXHVkZmZmIixyTWU9IlxcdTAzMDAtXFx1MDM2ZiIsbk1lPSJcXHVmZTIwLVxcdWZlMmYiLGlNZT0iXFx1MjBkMC1cXHUyMGZmIixhTWU9ck1lK25NZStpTWUsc01lPSJcXHVmZTBlXFx1ZmUwZiIsb01lPSJbIit3cmUrIl0iLCRMPSJbIithTWUrIl0iLHpMPSJcXHVkODNjW1xcdWRmZmItXFx1ZGZmZl0iLGxNZT0iKD86IiskTCsifCIrekwrIikiLFRyZT0iW14iK3dyZSsiXSIsa3JlPSIoPzpcXHVkODNjW1xcdWRkZTYtXFx1ZGRmZl0pezJ9IixFcmU9IltcXHVkODAwLVxcdWRiZmZdW1xcdWRjMDAtXFx1ZGZmZl0iLGNNZT0iXFx1MjAwZCIsU3JlPWxNZSsiPyIsQ3JlPSJbIitzTWUrIl0/Iix1TWU9Iig/OiIrY01lKyIoPzoiK1tUcmUsa3JlLEVyZV0uam9pbigifCIpKyIpIitDcmUrU3JlKyIpKiIsaE1lPUNyZStTcmUrdU1lLGZNZT0iKD86IitbVHJlKyRMKyI/IiwkTCxrcmUsRXJlLG9NZV0uam9pbigifCIpKyIpIixicmU9UmVnRXhwKHpMKyIoPz0iK3pMKyIpfCIrZk1lK2hNZSwiZyIpO28oZE1lLCJ1bmljb2RlU2l6ZSIpO0FyZT1kTWV9KTtmdW5jdGlvbiBwTWUodCl7cmV0dXJuICRKKHQpP0FyZSh0KTp2cmUodCl9dmFyIERyZSxMcmU9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt4cmUoKTt6SigpO19yZSgpO28ocE1lLCJzdHJpbmdTaXplIik7RHJlPXBNZX0pO2Z1bmN0aW9uIG1NZSh0LGUpe3JldHVybiBZVCh0LGUsZnVuY3Rpb24ocixuKXtyZXR1cm4gTVQodCxuKX0pfXZhciBScmUsTnJlPU4oKCk9PnsidXNlIHN0cmljdCI7RkwoKTtTTCgpO28obU1lLCJiYXNlUGljayIpO1JyZT1tTWV9KTt2YXIgZ01lLFZkLE1yZT1OKCgpPT57InVzZSBzdHJpY3QiO05yZSgpO0ZKKCk7Z01lPUJKKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PW51bGw/e306UnJlKHQsZSl9KSxWZD1nTWV9KTtmdW5jdGlvbiB4TWUodCxlLHIsbil7Zm9yKHZhciBpPS0xLGE9dk1lKHlNZSgoZS10KS8ocnx8MSkpLDApLHM9QXJyYXkoYSk7YS0tOylzW24/YTorK2ldPXQsdCs9cjtyZXR1cm4gc312YXIgeU1lLHZNZSxJcmUsT3JlPU4oKCk9PnsidXNlIHN0cmljdCI7eU1lPU1hdGguY2VpbCx2TWU9TWF0aC5tYXg7byh4TWUsImJhc2VSYW5nZSIpO0lyZT14TWV9KTtmdW5jdGlvbiBiTWUodCl7cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gbiYmdHlwZW9mIG4hPSJudW1iZXIiJiZlbyhlLHIsbikmJihyPW49dm9pZCAwKSxlPXhtKGUpLHI9PT12b2lkIDA/KHI9ZSxlPTApOnI9eG0ociksbj1uPT09dm9pZCAwP2U8cj8xOi0xOnhtKG4pLElyZShlLHIsbix0KX19dmFyIFByZSxCcmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtPcmUoKTtMZCgpO3JMKCk7byhiTWUsImNyZWF0ZVJhbmdlIik7UHJlPWJNZX0pO3ZhciB3TWUsR28sRnJlPU4oKCk9PnsidXNlIHN0cmljdCI7QnJlKCk7d01lPVByZSgpLEdvPXdNZX0pO2Z1bmN0aW9uIFRNZSh0LGUscixuLGkpe3JldHVybiBpKHQsZnVuY3Rpb24oYSxzLGwpe3I9bj8obj0hMSxhKTplKHIsYSxzLGwpfSkscn12YXIgJHJlLHpyZT1OKCgpPT57InVzZSBzdHJpY3QiO28oVE1lLCJiYXNlUmVkdWNlIik7JHJlPVRNZX0pO2Z1bmN0aW9uIGtNZSh0LGUscil7dmFyIG49UHQodCk/R0o6JHJlLGk9YXJndW1lbnRzLmxlbmd0aDwzO3JldHVybiBuKHQscG4oZSw0KSxyLGksTXMpfXZhciBYcixHTD1OKCgpPT57InVzZSBzdHJpY3QiO1ZKKCk7S2goKTtycygpO3pyZSgpO1VuKCk7byhrTWUsInJlZHVjZSIpO1hyPWtNZX0pO2Z1bmN0aW9uIEVNZSh0LGUpe3ZhciByPVB0KHQpP0FtOnpUO3JldHVybiByKHQsYXJlKHBuKGUsMykpKX12YXIgSmgsR3JlPU4oKCk9PnsidXNlIHN0cmljdCI7ZlQoKTtfTCgpO3JzKCk7VW4oKTtzcmUoKTtvKEVNZSwicmVqZWN0Iik7Smg9RU1lfSk7ZnVuY3Rpb24gQU1lKHQpe2lmKHQ9PW51bGwpcmV0dXJuIDA7aWYoY2kodCkpcmV0dXJuIHlpKHQpP0RyZSh0KTp0Lmxlbmd0aDt2YXIgZT1pbyh0KTtyZXR1cm4gZT09U01lfHxlPT1DTWU/dC5zaXplOlRtKHQpLmxlbmd0aH12YXIgU01lLENNZSxWTCxWcmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtzVCgpOyRkKCk7TW8oKTtWVCgpO0xyZSgpO1NNZT0iW29iamVjdCBNYXBdIixDTWU9IltvYmplY3QgU2V0XSI7byhBTWUsInNpemUiKTtWTD1BTWV9KTtmdW5jdGlvbiBfTWUodCxlKXt2YXIgcjtyZXR1cm4gTXModCxmdW5jdGlvbihuLGksYSl7cmV0dXJuIHI9ZShuLGksYSksIXJ9KSwhIXJ9dmFyIFVyZSxIcmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtLaCgpO28oX01lLCJiYXNlU29tZSIpO1VyZT1fTWV9KTtmdW5jdGlvbiBETWUodCxlLHIpe3ZhciBuPVB0KHQpP0VUOlVyZTtyZXR1cm4gciYmZW8odCxlLHIpJiYoZT12b2lkIDApLG4odCxwbihlLDMpKX12YXIgQTIsV3JlPU4oKCk9PnsidXNlIHN0cmljdCI7dkwoKTtycygpO0hyZSgpO1VuKCk7TGQoKTtvKERNZSwic29tZSIpO0EyPURNZX0pO3ZhciBMTWUsa2MscXJlPU4oKCk9PnsidXNlIHN0cmljdCI7Q20oKTt5cmUoKTtubSgpO0xkKCk7TE1lPWZjKGZ1bmN0aW9uKHQsZSl7aWYodD09bnVsbClyZXR1cm5bXTt2YXIgcj1lLmxlbmd0aDtyZXR1cm4gcj4xJiZlbyh0LGVbMF0sZVsxXSk/ZT1bXTpyPjImJmVvKGVbMF0sZVsxXSxlWzJdKSYmKGU9W2VbMF1dKSxncmUodCx3YyhlLDEpLFtdKX0pLGtjPUxNZX0pO3ZhciBSTWUsTk1lLFlyZSxYcmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtwTCgpO25MKCk7QVQoKTtSTWU9MS8wLE5NZT1qaCYmMS9SbShuZXcgamgoWywtMF0pKVsxXT09Uk1lP2Z1bmN0aW9uKHQpe3JldHVybiBuZXcgamgodCl9Om5pLFlyZT1OTWV9KTtmdW5jdGlvbiBJTWUodCxlLHIpe3ZhciBuPS0xLGk9YVQsYT10Lmxlbmd0aCxzPSEwLGw9W10sdT1sO2lmKHIpcz0hMSxpPUJUO2Vsc2UgaWYoYT49TU1lKXt2YXIgaD1lP251bGw6WXJlKHQpO2lmKGgpcmV0dXJuIFJtKGgpO3M9ITEsaT1MbSx1PW5ldyBEbX1lbHNlIHU9ZT9bXTpsO2U6Zm9yKDsrK248YTspe3ZhciBmPXRbbl0sZD1lP2UoZik6ZjtpZihmPXJ8fGYhPT0wP2Y6MCxzJiZkPT09ZCl7Zm9yKHZhciBwPXUubGVuZ3RoO3AtLTspaWYodVtwXT09PWQpY29udGludWUgZTtlJiZ1LnB1c2goZCksbC5wdXNoKGYpfWVsc2UgaSh1LGQscil8fCh1IT09bCYmdS5wdXNoKGQpLGwucHVzaChmKSl9cmV0dXJuIGx9dmFyIE1NZSxQbSxYVD1OKCgpPT57InVzZSBzdHJpY3QiO2tUKCk7c0woKTtBTCgpO1NUKCk7WHJlKCk7QVQoKTtNTWU9MjAwO28oSU1lLCJiYXNlVW5pcSIpO1BtPUlNZX0pO3ZhciBPTWUsVUwsanJlPU4oKCk9PnsidXNlIHN0cmljdCI7Q20oKTtubSgpO1hUKCk7b3coKTtPTWU9ZmMoZnVuY3Rpb24odCl7cmV0dXJuIFBtKHdjKHQsMSxBZCwhMCkpfSksVUw9T01lfSk7ZnVuY3Rpb24gUE1lKHQpe3JldHVybiB0JiZ0Lmxlbmd0aD9QbSh0KTpbXX12YXIgQm0sS3JlPU4oKCk9PnsidXNlIHN0cmljdCI7WFQoKTtvKFBNZSwidW5pcSIpO0JtPVBNZX0pO2Z1bmN0aW9uIEJNZSh0LGUpe3JldHVybiB0JiZ0Lmxlbmd0aD9QbSh0LHBuKGUsMikpOltdfXZhciBRcmUsWnJlPU4oKCk9PnsidXNlIHN0cmljdCI7cnMoKTtYVCgpO28oQk1lLCJ1bmlxQnkiKTtRcmU9Qk1lfSk7ZnVuY3Rpb24gJE1lKHQpe3ZhciBlPSsrRk1lO3JldHVybiBsVCh0KStlfXZhciBGTWUsVWQsSnJlPU4oKCk9PnsidXNlIHN0cmljdCI7b0woKTtGTWU9MDtvKCRNZSwidW5pcXVlSWQiKTtVZD0kTWV9KTtmdW5jdGlvbiB6TWUodCxlLHIpe2Zvcih2YXIgbj0tMSxpPXQubGVuZ3RoLGE9ZS5sZW5ndGgscz17fTsrK248aTspe3ZhciBsPW48YT9lW25dOnZvaWQgMDtyKHMsdFtuXSxsKX1yZXR1cm4gc312YXIgZW5lLHRuZT1OKCgpPT57InVzZSBzdHJpY3QiO28oek1lLCJiYXNlWmlwT2JqZWN0Iik7ZW5lPXpNZX0pO2Z1bmN0aW9uIEdNZSh0LGUpe3JldHVybiBlbmUodHx8W10sZXx8W10saGMpfXZhciBqVCxybmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtybSgpO3RuZSgpO28oR01lLCJ6aXBPYmplY3QiKTtqVD1HTWV9KTt2YXIgcXQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtDSigpO2dMKCk7TGVlKCk7UmVlKCk7JDkoKTt4dGUoKTtUdGUoKTtFdGUoKTtTdGUoKTtDdGUoKTtSdGUoKTtETCgpO1B0ZSgpO0Z0ZSgpO1JMKCk7dVQoKTskVCgpOyR0ZSgpO3p0ZSgpO0d0ZSgpO3F0ZSgpO0N1KCk7anRlKCk7S3RlKCk7VW4oKTtIVCgpO1l2KCk7SnMoKTtlcmUoKTtWVCgpO3RyZSgpO3hjKCk7a3RlKCk7SW0oKTtycmUoKTtucmUoKTtWOSgpO0JMKCk7aXJlKCk7bkwoKTt5dGUoKTtNcmUoKTtjcmUoKTtGcmUoKTtHTCgpO0dyZSgpO1ZyZSgpO1dyZSgpO3FyZSgpO2pyZSgpO0tyZSgpO0pyZSgpO09MKCk7cm5lKCk7fSk7ZnVuY3Rpb24gaW5lKHQsZSl7dFtlXT90W2VdKys6dFtlXT0xfWZ1bmN0aW9uIGFuZSh0LGUpey0tdFtlXXx8ZGVsZXRlIHRbZV19ZnVuY3Rpb24gXzIodCxlLHIsbil7dmFyIGk9IiIrZSxhPSIiK3I7aWYoIXQmJmk+YSl7dmFyIHM9aTtpPWEsYT1zfXJldHVybiBpK25uZSthK25uZSsocHIobik/Vk1lOm4pfWZ1bmN0aW9uIFVNZSh0LGUscixuKXt2YXIgaT0iIitlLGE9IiIrcjtpZighdCYmaT5hKXt2YXIgcz1pO2k9YSxhPXN9dmFyIGw9e3Y6aSx3OmF9O3JldHVybiBuJiYobC5uYW1lPW4pLGx9ZnVuY3Rpb24gSEwodCxlKXtyZXR1cm4gXzIodCxlLnYsZS53LGUubmFtZSl9dmFyIFZNZSxIZCxubmUsc24sS1Q9TigoKT0+eyJ1c2Ugc3RyaWN0IjtxdCgpO1ZNZT0iXDAiLEhkPSJcMCIsbm5lPSIBIixzbj1jbGFzc3tzdGF0aWN7byh0aGlzLCJHcmFwaCIpfWNvbnN0cnVjdG9yKGU9e30pe3RoaXMuX2lzRGlyZWN0ZWQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsImRpcmVjdGVkIik/ZS5kaXJlY3RlZDohMCx0aGlzLl9pc011bHRpZ3JhcGg9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIm11bHRpZ3JhcGgiKT9lLm11bHRpZ3JhcGg6ITEsdGhpcy5faXNDb21wb3VuZD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSwiY29tcG91bmQiKT9lLmNvbXBvdW5kOiExLHRoaXMuX2xhYmVsPXZvaWQgMCx0aGlzLl9kZWZhdWx0Tm9kZUxhYmVsRm49QXModm9pZCAwKSx0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm49QXModm9pZCAwKSx0aGlzLl9ub2Rlcz17fSx0aGlzLl9pc0NvbXBvdW5kJiYodGhpcy5fcGFyZW50PXt9LHRoaXMuX2NoaWxkcmVuPXt9LHRoaXMuX2NoaWxkcmVuW0hkXT17fSksdGhpcy5faW49e30sdGhpcy5fcHJlZHM9e30sdGhpcy5fb3V0PXt9LHRoaXMuX3N1Y3M9e30sdGhpcy5fZWRnZU9ianM9e30sdGhpcy5fZWRnZUxhYmVscz17fX1pc0RpcmVjdGVkKCl7cmV0dXJuIHRoaXMuX2lzRGlyZWN0ZWR9aXNNdWx0aWdyYXBoKCl7cmV0dXJuIHRoaXMuX2lzTXVsdGlncmFwaH1pc0NvbXBvdW5kKCl7cmV0dXJuIHRoaXMuX2lzQ29tcG91bmR9c2V0R3JhcGgoZSl7cmV0dXJuIHRoaXMuX2xhYmVsPWUsdGhpc31ncmFwaCgpe3JldHVybiB0aGlzLl9sYWJlbH1zZXREZWZhdWx0Tm9kZUxhYmVsKGUpe3JldHVybiBTaShlKXx8KGU9QXMoZSkpLHRoaXMuX2RlZmF1bHROb2RlTGFiZWxGbj1lLHRoaXN9bm9kZUNvdW50KCl7cmV0dXJuIHRoaXMuX25vZGVDb3VudH1ub2Rlcygpe3JldHVybiB6cih0aGlzLl9ub2Rlcyl9c291cmNlcygpe3ZhciBlPXRoaXM7cmV0dXJuIFlyKHRoaXMubm9kZXMoKSxmdW5jdGlvbihyKXtyZXR1cm4gdXIoZS5faW5bcl0pfSl9c2lua3MoKXt2YXIgZT10aGlzO3JldHVybiBZcih0aGlzLm5vZGVzKCksZnVuY3Rpb24ocil7cmV0dXJuIHVyKGUuX291dFtyXSl9KX1zZXROb2RlcyhlLHIpe3ZhciBuPWFyZ3VtZW50cyxpPXRoaXM7cmV0dXJuIEFlKGUsZnVuY3Rpb24oYSl7bi5sZW5ndGg+MT9pLnNldE5vZGUoYSxyKTppLnNldE5vZGUoYSl9KSx0aGlzfXNldE5vZGUoZSxyKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuX25vZGVzLGUpPyhhcmd1bWVudHMubGVuZ3RoPjEmJih0aGlzLl9ub2Rlc1tlXT1yKSx0aGlzKToodGhpcy5fbm9kZXNbZV09YXJndW1lbnRzLmxlbmd0aD4xP3I6dGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuKGUpLHRoaXMuX2lzQ29tcG91bmQmJih0aGlzLl9wYXJlbnRbZV09SGQsdGhpcy5fY2hpbGRyZW5bZV09e30sdGhpcy5fY2hpbGRyZW5bSGRdW2VdPSEwKSx0aGlzLl9pbltlXT17fSx0aGlzLl9wcmVkc1tlXT17fSx0aGlzLl9vdXRbZV09e30sdGhpcy5fc3Vjc1tlXT17fSwrK3RoaXMuX25vZGVDb3VudCx0aGlzKX1ub2RlKGUpe3JldHVybiB0aGlzLl9ub2Rlc1tlXX1oYXNOb2RlKGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5fbm9kZXMsZSl9cmVtb3ZlTm9kZShlKXtpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5fbm9kZXMsZSkpe3ZhciByPW8obj0+dGhpcy5yZW1vdmVFZGdlKHRoaXMuX2VkZ2VPYmpzW25dKSwicmVtb3ZlRWRnZSIpO2RlbGV0ZSB0aGlzLl9ub2Rlc1tlXSx0aGlzLl9pc0NvbXBvdW5kJiYodGhpcy5fcmVtb3ZlRnJvbVBhcmVudHNDaGlsZExpc3QoZSksZGVsZXRlIHRoaXMuX3BhcmVudFtlXSxBZSh0aGlzLmNoaWxkcmVuKGUpLG49Pnt0aGlzLnNldFBhcmVudChuKX0pLGRlbGV0ZSB0aGlzLl9jaGlsZHJlbltlXSksQWUoenIodGhpcy5faW5bZV0pLHIpLGRlbGV0ZSB0aGlzLl9pbltlXSxkZWxldGUgdGhpcy5fcHJlZHNbZV0sQWUoenIodGhpcy5fb3V0W2VdKSxyKSxkZWxldGUgdGhpcy5fb3V0W2VdLGRlbGV0ZSB0aGlzLl9zdWNzW2VdLC0tdGhpcy5fbm9kZUNvdW50fXJldHVybiB0aGlzfXNldFBhcmVudChlLHIpe2lmKCF0aGlzLl9pc0NvbXBvdW5kKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHNldCBwYXJlbnQgaW4gYSBub24tY29tcG91bmQgZ3JhcGgiKTtpZihwcihyKSlyPUhkO2Vsc2V7cis9IiI7Zm9yKHZhciBuPXI7IXByKG4pO249dGhpcy5wYXJlbnQobikpaWYobj09PWUpdGhyb3cgbmV3IEVycm9yKCJTZXR0aW5nICIrcisiIGFzIHBhcmVudCBvZiAiK2UrIiB3b3VsZCBjcmVhdGUgYSBjeWNsZSIpO3RoaXMuc2V0Tm9kZShyKX1yZXR1cm4gdGhpcy5zZXROb2RlKGUpLHRoaXMuX3JlbW92ZUZyb21QYXJlbnRzQ2hpbGRMaXN0KGUpLHRoaXMuX3BhcmVudFtlXT1yLHRoaXMuX2NoaWxkcmVuW3JdW2VdPSEwLHRoaXN9X3JlbW92ZUZyb21QYXJlbnRzQ2hpbGRMaXN0KGUpe2RlbGV0ZSB0aGlzLl9jaGlsZHJlblt0aGlzLl9wYXJlbnRbZV1dW2VdfXBhcmVudChlKXtpZih0aGlzLl9pc0NvbXBvdW5kKXt2YXIgcj10aGlzLl9wYXJlbnRbZV07aWYociE9PUhkKXJldHVybiByfX1jaGlsZHJlbihlKXtpZihwcihlKSYmKGU9SGQpLHRoaXMuX2lzQ29tcG91bmQpe3ZhciByPXRoaXMuX2NoaWxkcmVuW2VdO2lmKHIpcmV0dXJuIHpyKHIpfWVsc2V7aWYoZT09PUhkKXJldHVybiB0aGlzLm5vZGVzKCk7aWYodGhpcy5oYXNOb2RlKGUpKXJldHVybltdfX1wcmVkZWNlc3NvcnMoZSl7dmFyIHI9dGhpcy5fcHJlZHNbZV07aWYocilyZXR1cm4genIocil9c3VjY2Vzc29ycyhlKXt2YXIgcj10aGlzLl9zdWNzW2VdO2lmKHIpcmV0dXJuIHpyKHIpfW5laWdoYm9ycyhlKXt2YXIgcj10aGlzLnByZWRlY2Vzc29ycyhlKTtpZihyKXJldHVybiBVTChyLHRoaXMuc3VjY2Vzc29ycyhlKSl9aXNMZWFmKGUpe3ZhciByO3JldHVybiB0aGlzLmlzRGlyZWN0ZWQoKT9yPXRoaXMuc3VjY2Vzc29ycyhlKTpyPXRoaXMubmVpZ2hib3JzKGUpLHIubGVuZ3RoPT09MH1maWx0ZXJOb2RlcyhlKXt2YXIgcj1uZXcgdGhpcy5jb25zdHJ1Y3Rvcih7ZGlyZWN0ZWQ6dGhpcy5faXNEaXJlY3RlZCxtdWx0aWdyYXBoOnRoaXMuX2lzTXVsdGlncmFwaCxjb21wb3VuZDp0aGlzLl9pc0NvbXBvdW5kfSk7ci5zZXRHcmFwaCh0aGlzLmdyYXBoKCkpO3ZhciBuPXRoaXM7QWUodGhpcy5fbm9kZXMsZnVuY3Rpb24ocyxsKXtlKGwpJiZyLnNldE5vZGUobCxzKX0pLEFlKHRoaXMuX2VkZ2VPYmpzLGZ1bmN0aW9uKHMpe3IuaGFzTm9kZShzLnYpJiZyLmhhc05vZGUocy53KSYmci5zZXRFZGdlKHMsbi5lZGdlKHMpKX0pO3ZhciBpPXt9O2Z1bmN0aW9uIGEocyl7dmFyIGw9bi5wYXJlbnQocyk7cmV0dXJuIGw9PT12b2lkIDB8fHIuaGFzTm9kZShsKT8oaVtzXT1sLGwpOmwgaW4gaT9pW2xdOmEobCl9cmV0dXJuIG8oYSwiZmluZFBhcmVudCIpLHRoaXMuX2lzQ29tcG91bmQmJkFlKHIubm9kZXMoKSxmdW5jdGlvbihzKXtyLnNldFBhcmVudChzLGEocykpfSkscn1zZXREZWZhdWx0RWRnZUxhYmVsKGUpe3JldHVybiBTaShlKXx8KGU9QXMoZSkpLHRoaXMuX2RlZmF1bHRFZGdlTGFiZWxGbj1lLHRoaXN9ZWRnZUNvdW50KCl7cmV0dXJuIHRoaXMuX2VkZ2VDb3VudH1lZGdlcygpe3JldHVybiBicih0aGlzLl9lZGdlT2Jqcyl9c2V0UGF0aChlLHIpe3ZhciBuPXRoaXMsaT1hcmd1bWVudHM7cmV0dXJuIFhyKGUsZnVuY3Rpb24oYSxzKXtyZXR1cm4gaS5sZW5ndGg+MT9uLnNldEVkZ2UoYSxzLHIpOm4uc2V0RWRnZShhLHMpLHN9KSx0aGlzfXNldEVkZ2UoKXt2YXIgZSxyLG4saSxhPSExLHM9YXJndW1lbnRzWzBdO3R5cGVvZiBzPT0ib2JqZWN0IiYmcyE9PW51bGwmJiJ2ImluIHM/KGU9cy52LHI9cy53LG49cy5uYW1lLGFyZ3VtZW50cy5sZW5ndGg9PT0yJiYoaT1hcmd1bWVudHNbMV0sYT0hMCkpOihlPXMscj1hcmd1bWVudHNbMV0sbj1hcmd1bWVudHNbM10sYXJndW1lbnRzLmxlbmd0aD4yJiYoaT1hcmd1bWVudHNbMl0sYT0hMCkpLGU9IiIrZSxyPSIiK3IscHIobil8fChuPSIiK24pO3ZhciBsPV8yKHRoaXMuX2lzRGlyZWN0ZWQsZSxyLG4pO2lmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLl9lZGdlTGFiZWxzLGwpKXJldHVybiBhJiYodGhpcy5fZWRnZUxhYmVsc1tsXT1pKSx0aGlzO2lmKCFwcihuKSYmIXRoaXMuX2lzTXVsdGlncmFwaCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXQgYSBuYW1lZCBlZGdlIHdoZW4gaXNNdWx0aWdyYXBoID0gZmFsc2UiKTt0aGlzLnNldE5vZGUoZSksdGhpcy5zZXROb2RlKHIpLHRoaXMuX2VkZ2VMYWJlbHNbbF09YT9pOnRoaXMuX2RlZmF1bHRFZGdlTGFiZWxGbihlLHIsbik7dmFyIHU9VU1lKHRoaXMuX2lzRGlyZWN0ZWQsZSxyLG4pO3JldHVybiBlPXUudixyPXUudyxPYmplY3QuZnJlZXplKHUpLHRoaXMuX2VkZ2VPYmpzW2xdPXUsaW5lKHRoaXMuX3ByZWRzW3JdLGUpLGluZSh0aGlzLl9zdWNzW2VdLHIpLHRoaXMuX2luW3JdW2xdPXUsdGhpcy5fb3V0W2VdW2xdPXUsdGhpcy5fZWRnZUNvdW50KyssdGhpc31lZGdlKGUscixuKXt2YXIgaT1hcmd1bWVudHMubGVuZ3RoPT09MT9ITCh0aGlzLl9pc0RpcmVjdGVkLGFyZ3VtZW50c1swXSk6XzIodGhpcy5faXNEaXJlY3RlZCxlLHIsbik7cmV0dXJuIHRoaXMuX2VkZ2VMYWJlbHNbaV19aGFzRWRnZShlLHIsbil7dmFyIGk9YXJndW1lbnRzLmxlbmd0aD09PTE/SEwodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOl8yKHRoaXMuX2lzRGlyZWN0ZWQsZSxyLG4pO3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5fZWRnZUxhYmVscyxpKX1yZW1vdmVFZGdlKGUscixuKXt2YXIgaT1hcmd1bWVudHMubGVuZ3RoPT09MT9ITCh0aGlzLl9pc0RpcmVjdGVkLGFyZ3VtZW50c1swXSk6XzIodGhpcy5faXNEaXJlY3RlZCxlLHIsbiksYT10aGlzLl9lZGdlT2Jqc1tpXTtyZXR1cm4gYSYmKGU9YS52LHI9YS53LGRlbGV0ZSB0aGlzLl9lZGdlTGFiZWxzW2ldLGRlbGV0ZSB0aGlzLl9lZGdlT2Jqc1tpXSxhbmUodGhpcy5fcHJlZHNbcl0sZSksYW5lKHRoaXMuX3N1Y3NbZV0sciksZGVsZXRlIHRoaXMuX2luW3JdW2ldLGRlbGV0ZSB0aGlzLl9vdXRbZV1baV0sdGhpcy5fZWRnZUNvdW50LS0pLHRoaXN9aW5FZGdlcyhlLHIpe3ZhciBuPXRoaXMuX2luW2VdO2lmKG4pe3ZhciBpPWJyKG4pO3JldHVybiByP1lyKGksZnVuY3Rpb24oYSl7cmV0dXJuIGEudj09PXJ9KTppfX1vdXRFZGdlcyhlLHIpe3ZhciBuPXRoaXMuX291dFtlXTtpZihuKXt2YXIgaT1icihuKTtyZXR1cm4gcj9ZcihpLGZ1bmN0aW9uKGEpe3JldHVybiBhLnc9PT1yfSk6aX19bm9kZUVkZ2VzKGUscil7dmFyIG49dGhpcy5pbkVkZ2VzKGUscik7aWYobilyZXR1cm4gbi5jb25jYXQodGhpcy5vdXRFZGdlcyhlLHIpKX19O3NuLnByb3RvdHlwZS5fbm9kZUNvdW50PTA7c24ucHJvdG90eXBlLl9lZGdlQ291bnQ9MDtvKGluZSwiaW5jcmVtZW50T3JJbml0RW50cnkiKTtvKGFuZSwiZGVjcmVtZW50T3JSZW1vdmVFbnRyeSIpO28oXzIsImVkZ2VBcmdzVG9JZCIpO28oVU1lLCJlZGdlQXJnc1RvT2JqIik7byhITCwiZWRnZU9ialRvSWQiKX0pO3ZhciBWbz1OKCgpPT57InVzZSBzdHJpY3QiO0tUKCl9KTtmdW5jdGlvbiBzbmUodCl7dC5fcHJldi5fbmV4dD10Ll9uZXh0LHQuX25leHQuX3ByZXY9dC5fcHJldixkZWxldGUgdC5fbmV4dCxkZWxldGUgdC5fcHJldn1mdW5jdGlvbiBITWUodCxlKXtpZih0IT09Il9uZXh0IiYmdCE9PSJfcHJldiIpcmV0dXJuIGV9dmFyIFpULG9uZT1OKCgpPT57InVzZSBzdHJpY3QiO1pUPWNsYXNze3N0YXRpY3tvKHRoaXMsIkxpc3QiKX1jb25zdHJ1Y3Rvcigpe3ZhciBlPXt9O2UuX25leHQ9ZS5fcHJldj1lLHRoaXMuX3NlbnRpbmVsPWV9ZGVxdWV1ZSgpe3ZhciBlPXRoaXMuX3NlbnRpbmVsLHI9ZS5fcHJldjtpZihyIT09ZSlyZXR1cm4gc25lKHIpLHJ9ZW5xdWV1ZShlKXt2YXIgcj10aGlzLl9zZW50aW5lbDtlLl9wcmV2JiZlLl9uZXh0JiZzbmUoZSksZS5fbmV4dD1yLl9uZXh0LHIuX25leHQuX3ByZXY9ZSxyLl9uZXh0PWUsZS5fcHJldj1yfXRvU3RyaW5nKCl7Zm9yKHZhciBlPVtdLHI9dGhpcy5fc2VudGluZWwsbj1yLl9wcmV2O24hPT1yOyllLnB1c2goSlNPTi5zdHJpbmdpZnkobixITWUpKSxuPW4uX3ByZXY7cmV0dXJuIlsiK2Uuam9pbigiLCAiKSsiXSJ9fTtvKHNuZSwidW5saW5rIik7byhITWUsImZpbHRlck91dExpbmtzIil9KTtmdW5jdGlvbiBsbmUodCxlKXtpZih0Lm5vZGVDb3VudCgpPD0xKXJldHVybltdO3ZhciByPVlNZSh0LGV8fFdNZSksbj1xTWUoci5ncmFwaCxyLmJ1Y2tldHMsci56ZXJvSWR4KTtyZXR1cm4gcXIoSmUobixmdW5jdGlvbihpKXtyZXR1cm4gdC5vdXRFZGdlcyhpLnYsaS53KX0pKX1mdW5jdGlvbiBxTWUodCxlLHIpe2Zvcih2YXIgbj1bXSxpPWVbZS5sZW5ndGgtMV0sYT1lWzBdLHM7dC5ub2RlQ291bnQoKTspe2Zvcig7cz1hLmRlcXVldWUoKTspV0wodCxlLHIscyk7Zm9yKDtzPWkuZGVxdWV1ZSgpOylXTCh0LGUscixzKTtpZih0Lm5vZGVDb3VudCgpKXtmb3IodmFyIGw9ZS5sZW5ndGgtMjtsPjA7LS1sKWlmKHM9ZVtsXS5kZXF1ZXVlKCkscyl7bj1uLmNvbmNhdChXTCh0LGUscixzLCEwKSk7YnJlYWt9fX1yZXR1cm4gbn1mdW5jdGlvbiBXTCh0LGUscixuLGkpe3ZhciBhPWk/W106dm9pZCAwO3JldHVybiBBZSh0LmluRWRnZXMobi52KSxmdW5jdGlvbihzKXt2YXIgbD10LmVkZ2UocyksdT10Lm5vZGUocy52KTtpJiZhLnB1c2goe3Y6cy52LHc6cy53fSksdS5vdXQtPWwscUwoZSxyLHUpfSksQWUodC5vdXRFZGdlcyhuLnYpLGZ1bmN0aW9uKHMpe3ZhciBsPXQuZWRnZShzKSx1PXMudyxoPXQubm9kZSh1KTtoLmluLT1sLHFMKGUscixoKX0pLHQucmVtb3ZlTm9kZShuLnYpLGF9ZnVuY3Rpb24gWU1lKHQsZSl7dmFyIHI9bmV3IHNuLG49MCxpPTA7QWUodC5ub2RlcygpLGZ1bmN0aW9uKGwpe3Iuc2V0Tm9kZShsLHt2OmwsaW46MCxvdXQ6MH0pfSksQWUodC5lZGdlcygpLGZ1bmN0aW9uKGwpe3ZhciB1PXIuZWRnZShsLnYsbC53KXx8MCxoPWUobCksZj11K2g7ci5zZXRFZGdlKGwudixsLncsZiksaT1NYXRoLm1heChpLHIubm9kZShsLnYpLm91dCs9aCksbj1NYXRoLm1heChuLHIubm9kZShsLncpLmluKz1oKX0pO3ZhciBhPUdvKGkrbiszKS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFpUfSkscz1uKzE7cmV0dXJuIEFlKHIubm9kZXMoKSxmdW5jdGlvbihsKXtxTChhLHMsci5ub2RlKGwpKX0pLHtncmFwaDpyLGJ1Y2tldHM6YSx6ZXJvSWR4OnN9fWZ1bmN0aW9uIHFMKHQsZSxyKXtyLm91dD9yLmluP3Rbci5vdXQtci5pbitlXS5lbnF1ZXVlKHIpOnRbdC5sZW5ndGgtMV0uZW5xdWV1ZShyKTp0WzBdLmVucXVldWUocil9dmFyIFdNZSxjbmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtxdCgpO1ZvKCk7b25lKCk7V01lPUFzKDEpO28obG5lLCJncmVlZHlGQVMiKTtvKHFNZSwiZG9HcmVlZHlGQVMiKTtvKFdMLCJyZW1vdmVOb2RlIik7byhZTWUsImJ1aWxkU3RhdGUiKTtvKHFMLCJhc3NpZ25CdWNrZXQiKX0pO2Z1bmN0aW9uIHVuZSh0KXt2YXIgZT10LmdyYXBoKCkuYWN5Y2xpY2VyPT09ImdyZWVkeSI/bG5lKHQscih0KSk6WE1lKHQpO0FlKGUsZnVuY3Rpb24obil7dmFyIGk9dC5lZGdlKG4pO3QucmVtb3ZlRWRnZShuKSxpLmZvcndhcmROYW1lPW4ubmFtZSxpLnJldmVyc2VkPSEwLHQuc2V0RWRnZShuLncsbi52LGksVWQoInJldiIpKX0pO2Z1bmN0aW9uIHIobil7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiBuLmVkZ2UoaSkud2VpZ2h0fX1vKHIsIndlaWdodEZuIil9ZnVuY3Rpb24gWE1lKHQpe3ZhciBlPVtdLHI9e30sbj17fTtmdW5jdGlvbiBpKGEpe09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLGEpfHwoblthXT0hMCxyW2FdPSEwLEFlKHQub3V0RWRnZXMoYSksZnVuY3Rpb24ocyl7T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIscy53KT9lLnB1c2gocyk6aShzLncpfSksZGVsZXRlIHJbYV0pfXJldHVybiBvKGksImRmcyIpLEFlKHQubm9kZXMoKSxpKSxlfWZ1bmN0aW9uIGhuZSh0KXtBZSh0LmVkZ2VzKCksZnVuY3Rpb24oZSl7dmFyIHI9dC5lZGdlKGUpO2lmKHIucmV2ZXJzZWQpe3QucmVtb3ZlRWRnZShlKTt2YXIgbj1yLmZvcndhcmROYW1lO2RlbGV0ZSByLnJldmVyc2VkLGRlbGV0ZSByLmZvcndhcmROYW1lLHQuc2V0RWRnZShlLncsZS52LHIsbil9fSl9dmFyIFlMPU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTtjbmUoKTtvKHVuZSwicnVuIik7byhYTWUsImRmc0ZBUyIpO28oaG5lLCJ1bmRvIil9KTtmdW5jdGlvbiBFYyh0LGUscixuKXt2YXIgaTtkbyBpPVVkKG4pO3doaWxlKHQuaGFzTm9kZShpKSk7cmV0dXJuIHIuZHVtbXk9ZSx0LnNldE5vZGUoaSxyKSxpfWZ1bmN0aW9uIGRuZSh0KXt2YXIgZT1uZXcgc24oKS5zZXRHcmFwaCh0LmdyYXBoKCkpO3JldHVybiBBZSh0Lm5vZGVzKCksZnVuY3Rpb24ocil7ZS5zZXROb2RlKHIsdC5ub2RlKHIpKX0pLEFlKHQuZWRnZXMoKSxmdW5jdGlvbihyKXt2YXIgbj1lLmVkZ2Uoci52LHIudyl8fHt3ZWlnaHQ6MCxtaW5sZW46MX0saT10LmVkZ2Uocik7ZS5zZXRFZGdlKHIudixyLncse3dlaWdodDpuLndlaWdodCtpLndlaWdodCxtaW5sZW46TWF0aC5tYXgobi5taW5sZW4saS5taW5sZW4pfSl9KSxlfWZ1bmN0aW9uIEpUKHQpe3ZhciBlPW5ldyBzbih7bXVsdGlncmFwaDp0LmlzTXVsdGlncmFwaCgpfSkuc2V0R3JhcGgodC5ncmFwaCgpKTtyZXR1cm4gQWUodC5ub2RlcygpLGZ1bmN0aW9uKHIpe3QuY2hpbGRyZW4ocikubGVuZ3RofHxlLnNldE5vZGUocix0Lm5vZGUocikpfSksQWUodC5lZGdlcygpLGZ1bmN0aW9uKHIpe2Uuc2V0RWRnZShyLHQuZWRnZShyKSl9KSxlfWZ1bmN0aW9uIFhMKHQsZSl7dmFyIHI9dC54LG49dC55LGk9ZS54LXIsYT1lLnktbixzPXQud2lkdGgvMixsPXQuaGVpZ2h0LzI7aWYoIWkmJiFhKXRocm93IG5ldyBFcnJvcigiTm90IHBvc3NpYmxlIHRvIGZpbmQgaW50ZXJzZWN0aW9uIGluc2lkZSBvZiB0aGUgcmVjdGFuZ2xlIik7dmFyIHUsaDtyZXR1cm4gTWF0aC5hYnMoYSkqcz5NYXRoLmFicyhpKSpsPyhhPDAmJihsPS1sKSx1PWwqaS9hLGg9bCk6KGk8MCYmKHM9LXMpLHU9cyxoPXMqYS9pKSx7eDpyK3UseTpuK2h9fWZ1bmN0aW9uIGVmKHQpe3ZhciBlPUplKEdvKEtMKHQpKzEpLGZ1bmN0aW9uKCl7cmV0dXJuW119KTtyZXR1cm4gQWUodC5ub2RlcygpLGZ1bmN0aW9uKHIpe3ZhciBuPXQubm9kZShyKSxpPW4ucmFuaztwcihpKXx8KGVbaV1bbi5vcmRlcl09cil9KSxlfWZ1bmN0aW9uIHBuZSh0KXt2YXIgZT1EbChKZSh0Lm5vZGVzKCksZnVuY3Rpb24ocil7cmV0dXJuIHQubm9kZShyKS5yYW5rfSkpO0FlKHQubm9kZXMoKSxmdW5jdGlvbihyKXt2YXIgbj10Lm5vZGUocik7QnQobiwicmFuayIpJiYobi5yYW5rLT1lKX0pfWZ1bmN0aW9uIG1uZSh0KXt2YXIgZT1EbChKZSh0Lm5vZGVzKCksZnVuY3Rpb24oYSl7cmV0dXJuIHQubm9kZShhKS5yYW5rfSkpLHI9W107QWUodC5ub2RlcygpLGZ1bmN0aW9uKGEpe3ZhciBzPXQubm9kZShhKS5yYW5rLWU7cltzXXx8KHJbc109W10pLHJbc10ucHVzaChhKX0pO3ZhciBuPTAsaT10LmdyYXBoKCkubm9kZVJhbmtGYWN0b3I7QWUocixmdW5jdGlvbihhLHMpe3ByKGEpJiZzJWkhPT0wPy0tbjpuJiZBZShhLGZ1bmN0aW9uKGwpe3Qubm9kZShsKS5yYW5rKz1ufSl9KX1mdW5jdGlvbiBqTCh0LGUscixuKXt2YXIgaT17d2lkdGg6MCxoZWlnaHQ6MH07cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+PTQmJihpLnJhbms9cixpLm9yZGVyPW4pLEVjKHQsImJvcmRlciIsaSxlKX1mdW5jdGlvbiBLTCh0KXtyZXR1cm4gSXMoSmUodC5ub2RlcygpLGZ1bmN0aW9uKGUpe3ZhciByPXQubm9kZShlKS5yYW5rO2lmKCFwcihyKSlyZXR1cm4gcn0pKX1mdW5jdGlvbiBnbmUodCxlKXt2YXIgcj17bGhzOltdLHJoczpbXX07cmV0dXJuIEFlKHQsZnVuY3Rpb24obil7ZShuKT9yLmxocy5wdXNoKG4pOnIucmhzLnB1c2gobil9KSxyfWZ1bmN0aW9uIHluZSh0LGUpe3ZhciByPVBUKCk7dHJ5e3JldHVybiBlKCl9ZmluYWxseXtjb25zb2xlLmxvZyh0KyIgdGltZTogIisoUFQoKS1yKSsibXMiKX19ZnVuY3Rpb24gdm5lKHQsZSl7cmV0dXJuIGUoKX12YXIgU2M9TigoKT0+eyJ1c2Ugc3RyaWN0IjtxdCgpO1ZvKCk7byhFYywiYWRkRHVtbXlOb2RlIik7byhkbmUsInNpbXBsaWZ5Iik7byhKVCwiYXNOb25Db21wb3VuZEdyYXBoIik7byhYTCwiaW50ZXJzZWN0UmVjdCIpO28oZWYsImJ1aWxkTGF5ZXJNYXRyaXgiKTtvKHBuZSwibm9ybWFsaXplUmFua3MiKTtvKG1uZSwicmVtb3ZlRW1wdHlSYW5rcyIpO28oakwsImFkZEJvcmRlck5vZGUiKTtvKEtMLCJtYXhSYW5rIik7byhnbmUsInBhcnRpdGlvbiIpO28oeW5lLCJ0aW1lIik7byh2bmUsIm5vdGltZSIpfSk7ZnVuY3Rpb24gYm5lKHQpe2Z1bmN0aW9uIGUocil7dmFyIG49dC5jaGlsZHJlbihyKSxpPXQubm9kZShyKTtpZihuLmxlbmd0aCYmQWUobixlKSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSwibWluUmFuayIpKXtpLmJvcmRlckxlZnQ9W10saS5ib3JkZXJSaWdodD1bXTtmb3IodmFyIGE9aS5taW5SYW5rLHM9aS5tYXhSYW5rKzE7YTxzOysrYSl4bmUodCwiYm9yZGVyTGVmdCIsIl9ibCIscixpLGEpLHhuZSh0LCJib3JkZXJSaWdodCIsIl9iciIscixpLGEpfX1vKGUsImRmcyIpLEFlKHQuY2hpbGRyZW4oKSxlKX1mdW5jdGlvbiB4bmUodCxlLHIsbixpLGEpe3ZhciBzPXt3aWR0aDowLGhlaWdodDowLHJhbms6YSxib3JkZXJUeXBlOmV9LGw9aVtlXVthLTFdLHU9RWModCwiYm9yZGVyIixzLHIpO2lbZV1bYV09dSx0LnNldFBhcmVudCh1LG4pLGwmJnQuc2V0RWRnZShsLHUse3dlaWdodDoxfSl9dmFyIHduZT1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7U2MoKTtvKGJuZSwiYWRkQm9yZGVyU2VnbWVudHMiKTtvKHhuZSwiYWRkQm9yZGVyTm9kZSIpfSk7ZnVuY3Rpb24ga25lKHQpe3ZhciBlPXQuZ3JhcGgoKS5yYW5rZGlyLnRvTG93ZXJDYXNlKCk7KGU9PT0ibHIifHxlPT09InJsIikmJlNuZSh0KX1mdW5jdGlvbiBFbmUodCl7dmFyIGU9dC5ncmFwaCgpLnJhbmtkaXIudG9Mb3dlckNhc2UoKTsoZT09PSJidCJ8fGU9PT0icmwiKSYmak1lKHQpLChlPT09ImxyInx8ZT09PSJybCIpJiYoS01lKHQpLFNuZSh0KSl9ZnVuY3Rpb24gU25lKHQpe0FlKHQubm9kZXMoKSxmdW5jdGlvbihlKXtUbmUodC5ub2RlKGUpKX0pLEFlKHQuZWRnZXMoKSxmdW5jdGlvbihlKXtUbmUodC5lZGdlKGUpKX0pfWZ1bmN0aW9uIFRuZSh0KXt2YXIgZT10LndpZHRoO3Qud2lkdGg9dC5oZWlnaHQsdC5oZWlnaHQ9ZX1mdW5jdGlvbiBqTWUodCl7QWUodC5ub2RlcygpLGZ1bmN0aW9uKGUpe1FMKHQubm9kZShlKSl9KSxBZSh0LmVkZ2VzKCksZnVuY3Rpb24oZSl7dmFyIHI9dC5lZGdlKGUpO0FlKHIucG9pbnRzLFFMKSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwociwieSIpJiZRTChyKX0pfWZ1bmN0aW9uIFFMKHQpe3QueT0tdC55fWZ1bmN0aW9uIEtNZSh0KXtBZSh0Lm5vZGVzKCksZnVuY3Rpb24oZSl7WkwodC5ub2RlKGUpKX0pLEFlKHQuZWRnZXMoKSxmdW5jdGlvbihlKXt2YXIgcj10LmVkZ2UoZSk7QWUoci5wb2ludHMsWkwpLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLCJ4IikmJlpMKHIpfSl9ZnVuY3Rpb24gWkwodCl7dmFyIGU9dC54O3QueD10LnksdC55PWV9dmFyIENuZT1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7byhrbmUsImFkanVzdCIpO28oRW5lLCJ1bmRvIik7byhTbmUsInN3YXBXaWR0aEhlaWdodCIpO28oVG5lLCJzd2FwV2lkdGhIZWlnaHRPbmUiKTtvKGpNZSwicmV2ZXJzZVkiKTtvKFFMLCJyZXZlcnNlWU9uZSIpO28oS01lLCJzd2FwWFkiKTtvKFpMLCJzd2FwWFlPbmUiKX0pO2Z1bmN0aW9uIEFuZSh0KXt0LmdyYXBoKCkuZHVtbXlDaGFpbnM9W10sQWUodC5lZGdlcygpLGZ1bmN0aW9uKGUpe1pNZSh0LGUpfSl9ZnVuY3Rpb24gWk1lKHQsZSl7dmFyIHI9ZS52LG49dC5ub2RlKHIpLnJhbmssaT1lLncsYT10Lm5vZGUoaSkucmFuayxzPWUubmFtZSxsPXQuZWRnZShlKSx1PWwubGFiZWxSYW5rO2lmKGEhPT1uKzEpe3QucmVtb3ZlRWRnZShlKTt2YXIgaD12b2lkIDAsZixkO2ZvcihkPTAsKytuO248YTsrK2QsKytuKWwucG9pbnRzPVtdLGg9e3dpZHRoOjAsaGVpZ2h0OjAsZWRnZUxhYmVsOmwsZWRnZU9iajplLHJhbms6bn0sZj1FYyh0LCJlZGdlIixoLCJfZCIpLG49PT11JiYoaC53aWR0aD1sLndpZHRoLGguaGVpZ2h0PWwuaGVpZ2h0LGguZHVtbXk9ImVkZ2UtbGFiZWwiLGgubGFiZWxwb3M9bC5sYWJlbHBvcyksdC5zZXRFZGdlKHIsZix7d2VpZ2h0Omwud2VpZ2h0fSxzKSxkPT09MCYmdC5ncmFwaCgpLmR1bW15Q2hhaW5zLnB1c2goZikscj1mO3Quc2V0RWRnZShyLGkse3dlaWdodDpsLndlaWdodH0scyl9fWZ1bmN0aW9uIF9uZSh0KXtBZSh0LmdyYXBoKCkuZHVtbXlDaGFpbnMsZnVuY3Rpb24oZSl7dmFyIHI9dC5ub2RlKGUpLG49ci5lZGdlTGFiZWwsaTtmb3IodC5zZXRFZGdlKHIuZWRnZU9iaixuKTtyLmR1bW15OylpPXQuc3VjY2Vzc29ycyhlKVswXSx0LnJlbW92ZU5vZGUoZSksbi5wb2ludHMucHVzaCh7eDpyLngseTpyLnl9KSxyLmR1bW15PT09ImVkZ2UtbGFiZWwiJiYobi54PXIueCxuLnk9ci55LG4ud2lkdGg9ci53aWR0aCxuLmhlaWdodD1yLmhlaWdodCksZT1pLHI9dC5ub2RlKGUpfSl9dmFyIEpMPU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTtTYygpO28oQW5lLCJydW4iKTtvKFpNZSwibm9ybWFsaXplRWRnZSIpO28oX25lLCJ1bmRvIil9KTtmdW5jdGlvbiBEMih0KXt2YXIgZT17fTtmdW5jdGlvbiByKG4pe3ZhciBpPXQubm9kZShuKTtpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSlyZXR1cm4gaS5yYW5rO2Vbbl09ITA7dmFyIGE9RGwoSmUodC5vdXRFZGdlcyhuKSxmdW5jdGlvbihzKXtyZXR1cm4gcihzLncpLXQuZWRnZShzKS5taW5sZW59KSk7cmV0dXJuKGE9PT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFl8fGE9PT12b2lkIDB8fGE9PT1udWxsKSYmKGE9MCksaS5yYW5rPWF9byhyLCJkZnMiKSxBZSh0LnNvdXJjZXMoKSxyKX1mdW5jdGlvbiBXZCh0LGUpe3JldHVybiB0Lm5vZGUoZS53KS5yYW5rLXQubm9kZShlLnYpLnJhbmstdC5lZGdlKGUpLm1pbmxlbn12YXIgZWs9TigoKT0+eyJ1c2Ugc3RyaWN0IjtxdCgpO28oRDIsImxvbmdlc3RQYXRoIik7byhXZCwic2xhY2siKX0pO2Z1bmN0aW9uIHRrKHQpe3ZhciBlPW5ldyBzbih7ZGlyZWN0ZWQ6ITF9KSxyPXQubm9kZXMoKVswXSxuPXQubm9kZUNvdW50KCk7ZS5zZXROb2RlKHIse30pO2Zvcih2YXIgaSxhO0pNZShlLHQpPG47KWk9ZUllKGUsdCksYT1lLmhhc05vZGUoaS52KT9XZCh0LGkpOi1XZCh0LGkpLHRJZShlLHQsYSk7cmV0dXJuIGV9ZnVuY3Rpb24gSk1lKHQsZSl7ZnVuY3Rpb24gcihuKXtBZShlLm5vZGVFZGdlcyhuKSxmdW5jdGlvbihpKXt2YXIgYT1pLnYscz1uPT09YT9pLnc6YTshdC5oYXNOb2RlKHMpJiYhV2QoZSxpKSYmKHQuc2V0Tm9kZShzLHt9KSx0LnNldEVkZ2UobixzLHt9KSxyKHMpKX0pfXJldHVybiBvKHIsImRmcyIpLEFlKHQubm9kZXMoKSxyKSx0Lm5vZGVDb3VudCgpfWZ1bmN0aW9uIGVJZSh0LGUpe3JldHVybiBHZChlLmVkZ2VzKCksZnVuY3Rpb24ocil7aWYodC5oYXNOb2RlKHIudikhPT10Lmhhc05vZGUoci53KSlyZXR1cm4gV2QoZSxyKX0pfWZ1bmN0aW9uIHRJZSh0LGUscil7QWUodC5ub2RlcygpLGZ1bmN0aW9uKG4pe2Uubm9kZShuKS5yYW5rKz1yfSl9dmFyIGVSPU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTtWbygpO2VrKCk7byh0aywiZmVhc2libGVUcmVlIik7byhKTWUsInRpZ2h0VHJlZSIpO28oZUllLCJmaW5kTWluU2xhY2tFZGdlIik7byh0SWUsInNoaWZ0UmFua3MiKX0pO3ZhciBMbmU9TigoKT0+eyJ1c2Ugc3RyaWN0In0pO3ZhciB0Uj1OKCgpPT57InVzZSBzdHJpY3QifSk7dmFyIGNXdCxyUj1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7dFIoKTtjV3Q9QXMoMSl9KTt2YXIgUm5lPU4oKCk9PnsidXNlIHN0cmljdCI7clIoKX0pO3ZhciBuUj1OKCgpPT57InVzZSBzdHJpY3QifSk7dmFyIE5uZT1OKCgpPT57InVzZSBzdHJpY3QiO25SKCl9KTt2YXIgYld0LE1uZT1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7Yld0PUFzKDEpfSk7ZnVuY3Rpb24gaVIodCl7dmFyIGU9e30scj17fSxuPVtdO2Z1bmN0aW9uIGkoYSl7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsYSkpdGhyb3cgbmV3IEwyO09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLGEpfHwoclthXT0hMCxlW2FdPSEwLEFlKHQucHJlZGVjZXNzb3JzKGEpLGkpLGRlbGV0ZSByW2FdLG4ucHVzaChhKSl9aWYobyhpLCJ2aXNpdCIpLEFlKHQuc2lua3MoKSxpKSxWTChlKSE9PXQubm9kZUNvdW50KCkpdGhyb3cgbmV3IEwyO3JldHVybiBufWZ1bmN0aW9uIEwyKCl7fXZhciBhUj1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7aVIuQ3ljbGVFeGNlcHRpb249TDI7byhpUiwidG9wc29ydCIpO28oTDIsIkN5Y2xlRXhjZXB0aW9uIik7TDIucHJvdG90eXBlPW5ldyBFcnJvcn0pO3ZhciBJbmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjthUigpfSk7ZnVuY3Rpb24gcmsodCxlLHIpe1B0KGUpfHwoZT1bZV0pO3ZhciBuPSh0LmlzRGlyZWN0ZWQoKT90LnN1Y2Nlc3NvcnM6dC5uZWlnaGJvcnMpLmJpbmQodCksaT1bXSxhPXt9O3JldHVybiBBZShlLGZ1bmN0aW9uKHMpe2lmKCF0Lmhhc05vZGUocykpdGhyb3cgbmV3IEVycm9yKCJHcmFwaCBkb2VzIG5vdCBoYXZlIG5vZGU6ICIrcyk7T25lKHQscyxyPT09InBvc3QiLGEsbixpKX0pLGl9ZnVuY3Rpb24gT25lKHQsZSxyLG4saSxhKXtPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixlKXx8KG5bZV09ITAscnx8YS5wdXNoKGUpLEFlKGkoZSksZnVuY3Rpb24ocyl7T25lKHQscyxyLG4saSxhKX0pLHImJmEucHVzaChlKSl9dmFyIHNSPU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTtvKHJrLCJkZnMiKTtvKE9uZSwiZG9EZnMiKX0pO2Z1bmN0aW9uIG9SKHQsZSl7cmV0dXJuIHJrKHQsZSwicG9zdCIpfXZhciBQbmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtzUigpO28ob1IsInBvc3RvcmRlciIpfSk7ZnVuY3Rpb24gbFIodCxlKXtyZXR1cm4gcmsodCxlLCJwcmUiKX12YXIgQm5lPU4oKCk9PnsidXNlIHN0cmljdCI7c1IoKTtvKGxSLCJwcmVvcmRlciIpfSk7dmFyIEZuZT1OKCgpPT57InVzZSBzdHJpY3QiO3RSKCk7S1QoKX0pO3ZhciAkbmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtMbmUoKTtyUigpO1JuZSgpO05uZSgpO01uZSgpO0luZSgpO1BuZSgpO0JuZSgpO0ZuZSgpO25SKCk7YVIoKX0pO2Z1bmN0aW9uIHJmKHQpe3Q9ZG5lKHQpLEQyKHQpO3ZhciBlPXRrKHQpO3VSKGUpLGNSKGUsdCk7Zm9yKHZhciByLG47cj1VbmUoZSk7KW49SG5lKGUsdCxyKSxXbmUoZSx0LHIsbil9ZnVuY3Rpb24gY1IodCxlKXt2YXIgcj1vUih0LHQubm9kZXMoKSk7cj1yLnNsaWNlKDAsci5sZW5ndGgtMSksQWUocixmdW5jdGlvbihuKXtzSWUodCxlLG4pfSl9ZnVuY3Rpb24gc0llKHQsZSxyKXt2YXIgbj10Lm5vZGUociksaT1uLnBhcmVudDt0LmVkZ2UocixpKS5jdXR2YWx1ZT1HbmUodCxlLHIpfWZ1bmN0aW9uIEduZSh0LGUscil7dmFyIG49dC5ub2RlKHIpLGk9bi5wYXJlbnQsYT0hMCxzPWUuZWRnZShyLGkpLGw9MDtyZXR1cm4gc3x8KGE9ITEscz1lLmVkZ2UoaSxyKSksbD1zLndlaWdodCxBZShlLm5vZGVFZGdlcyhyKSxmdW5jdGlvbih1KXt2YXIgaD11LnY9PT1yLGY9aD91Lnc6dS52O2lmKGYhPT1pKXt2YXIgZD1oPT09YSxwPWUuZWRnZSh1KS53ZWlnaHQ7aWYobCs9ZD9wOi1wLGxJZSh0LHIsZikpe3ZhciBtPXQuZWRnZShyLGYpLmN1dHZhbHVlO2wrPWQ/LW06bX19fSksbH1mdW5jdGlvbiB1Uih0LGUpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKGU9dC5ub2RlcygpWzBdKSxWbmUodCx7fSwxLGUpfWZ1bmN0aW9uIFZuZSh0LGUscixuLGkpe3ZhciBhPXIscz10Lm5vZGUobik7cmV0dXJuIGVbbl09ITAsQWUodC5uZWlnaGJvcnMobiksZnVuY3Rpb24obCl7T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbCl8fChyPVZuZSh0LGUscixsLG4pKX0pLHMubG93PWEscy5saW09cisrLGk/cy5wYXJlbnQ9aTpkZWxldGUgcy5wYXJlbnQscn1mdW5jdGlvbiBVbmUodCl7cmV0dXJuIG5zKHQuZWRnZXMoKSxmdW5jdGlvbihlKXtyZXR1cm4gdC5lZGdlKGUpLmN1dHZhbHVlPDB9KX1mdW5jdGlvbiBIbmUodCxlLHIpe3ZhciBuPXIudixpPXIudztlLmhhc0VkZ2UobixpKXx8KG49ci53LGk9ci52KTt2YXIgYT10Lm5vZGUobikscz10Lm5vZGUoaSksbD1hLHU9ITE7YS5saW0+cy5saW0mJihsPXMsdT0hMCk7dmFyIGg9WXIoZS5lZGdlcygpLGZ1bmN0aW9uKGYpe3JldHVybiB1PT09em5lKHQsdC5ub2RlKGYudiksbCkmJnUhPT16bmUodCx0Lm5vZGUoZi53KSxsKX0pO3JldHVybiBHZChoLGZ1bmN0aW9uKGYpe3JldHVybiBXZChlLGYpfSl9ZnVuY3Rpb24gV25lKHQsZSxyLG4pe3ZhciBpPXIudixhPXIudzt0LnJlbW92ZUVkZ2UoaSxhKSx0LnNldEVkZ2Uobi52LG4udyx7fSksdVIodCksY1IodCxlKSxvSWUodCxlKX1mdW5jdGlvbiBvSWUodCxlKXt2YXIgcj1ucyh0Lm5vZGVzKCksZnVuY3Rpb24oaSl7cmV0dXJuIWUubm9kZShpKS5wYXJlbnR9KSxuPWxSKHQscik7bj1uLnNsaWNlKDEpLEFlKG4sZnVuY3Rpb24oaSl7dmFyIGE9dC5ub2RlKGkpLnBhcmVudCxzPWUuZWRnZShpLGEpLGw9ITE7c3x8KHM9ZS5lZGdlKGEsaSksbD0hMCksZS5ub2RlKGkpLnJhbms9ZS5ub2RlKGEpLnJhbmsrKGw/cy5taW5sZW46LXMubWlubGVuKX0pfWZ1bmN0aW9uIGxJZSh0LGUscil7cmV0dXJuIHQuaGFzRWRnZShlLHIpfWZ1bmN0aW9uIHpuZSh0LGUscil7cmV0dXJuIHIubG93PD1lLmxpbSYmZS5saW08PXIubGltfXZhciBxbmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtxdCgpOyRuZSgpO1NjKCk7ZVIoKTtlaygpO3JmLmluaXRMb3dMaW1WYWx1ZXM9dVI7cmYuaW5pdEN1dFZhbHVlcz1jUjtyZi5jYWxjQ3V0VmFsdWU9R25lO3JmLmxlYXZlRWRnZT1VbmU7cmYuZW50ZXJFZGdlPUhuZTtyZi5leGNoYW5nZUVkZ2VzPVduZTtvKHJmLCJuZXR3b3JrU2ltcGxleCIpO28oY1IsImluaXRDdXRWYWx1ZXMiKTtvKHNJZSwiYXNzaWduQ3V0VmFsdWUiKTtvKEduZSwiY2FsY0N1dFZhbHVlIik7byh1UiwiaW5pdExvd0xpbVZhbHVlcyIpO28oVm5lLCJkZnNBc3NpZ25Mb3dMaW0iKTtvKFVuZSwibGVhdmVFZGdlIik7byhIbmUsImVudGVyRWRnZSIpO28oV25lLCJleGNoYW5nZUVkZ2VzIik7byhvSWUsInVwZGF0ZVJhbmtzIik7byhsSWUsImlzVHJlZUVkZ2UiKTtvKHpuZSwiaXNEZXNjZW5kYW50Iil9KTtmdW5jdGlvbiBoUih0KXtzd2l0Y2godC5ncmFwaCgpLnJhbmtlcil7Y2FzZSJuZXR3b3JrLXNpbXBsZXgiOlluZSh0KTticmVhaztjYXNlInRpZ2h0LXRyZWUiOnVJZSh0KTticmVhaztjYXNlImxvbmdlc3QtcGF0aCI6Y0llKHQpO2JyZWFrO2RlZmF1bHQ6WW5lKHQpfX1mdW5jdGlvbiB1SWUodCl7RDIodCksdGsodCl9ZnVuY3Rpb24gWW5lKHQpe3JmKHQpfXZhciBjSWUsZlI9TigoKT0+eyJ1c2Ugc3RyaWN0IjtlUigpO3FuZSgpO2VrKCk7byhoUiwicmFuayIpO2NJZT1EMjtvKHVJZSwidGlnaHRUcmVlUmFua2VyIik7byhZbmUsIm5ldHdvcmtTaW1wbGV4UmFua2VyIil9KTtmdW5jdGlvbiBYbmUodCl7dmFyIGU9RWModCwicm9vdCIse30sIl9yb290Iikscj1oSWUodCksbj1JcyhicihyKSktMSxpPTIqbisxO3QuZ3JhcGgoKS5uZXN0aW5nUm9vdD1lLEFlKHQuZWRnZXMoKSxmdW5jdGlvbihzKXt0LmVkZ2UocykubWlubGVuKj1pfSk7dmFyIGE9ZkllKHQpKzE7QWUodC5jaGlsZHJlbigpLGZ1bmN0aW9uKHMpe2puZSh0LGUsaSxhLG4scixzKX0pLHQuZ3JhcGgoKS5ub2RlUmFua0ZhY3Rvcj1pfWZ1bmN0aW9uIGpuZSh0LGUscixuLGksYSxzKXt2YXIgbD10LmNoaWxkcmVuKHMpO2lmKCFsLmxlbmd0aCl7cyE9PWUmJnQuc2V0RWRnZShlLHMse3dlaWdodDowLG1pbmxlbjpyfSk7cmV0dXJufXZhciB1PWpMKHQsIl9idCIpLGg9akwodCwiX2JiIiksZj10Lm5vZGUocyk7dC5zZXRQYXJlbnQodSxzKSxmLmJvcmRlclRvcD11LHQuc2V0UGFyZW50KGgscyksZi5ib3JkZXJCb3R0b209aCxBZShsLGZ1bmN0aW9uKGQpe2puZSh0LGUscixuLGksYSxkKTt2YXIgcD10Lm5vZGUoZCksbT1wLmJvcmRlclRvcD9wLmJvcmRlclRvcDpkLGc9cC5ib3JkZXJCb3R0b20/cC5ib3JkZXJCb3R0b206ZCx5PXAuYm9yZGVyVG9wP246MipuLHY9bSE9PWc/MTppLWFbc10rMTt0LnNldEVkZ2UodSxtLHt3ZWlnaHQ6eSxtaW5sZW46dixuZXN0aW5nRWRnZTohMH0pLHQuc2V0RWRnZShnLGgse3dlaWdodDp5LG1pbmxlbjp2LG5lc3RpbmdFZGdlOiEwfSl9KSx0LnBhcmVudChzKXx8dC5zZXRFZGdlKGUsdSx7d2VpZ2h0OjAsbWlubGVuOmkrYVtzXX0pfWZ1bmN0aW9uIGhJZSh0KXt2YXIgZT17fTtmdW5jdGlvbiByKG4saSl7dmFyIGE9dC5jaGlsZHJlbihuKTthJiZhLmxlbmd0aCYmQWUoYSxmdW5jdGlvbihzKXtyKHMsaSsxKX0pLGVbbl09aX1yZXR1cm4gbyhyLCJkZnMiKSxBZSh0LmNoaWxkcmVuKCksZnVuY3Rpb24obil7cihuLDEpfSksZX1mdW5jdGlvbiBmSWUodCl7cmV0dXJuIFhyKHQuZWRnZXMoKSxmdW5jdGlvbihlLHIpe3JldHVybiBlK3QuZWRnZShyKS53ZWlnaHR9LDApfWZ1bmN0aW9uIEtuZSh0KXt2YXIgZT10LmdyYXBoKCk7dC5yZW1vdmVOb2RlKGUubmVzdGluZ1Jvb3QpLGRlbGV0ZSBlLm5lc3RpbmdSb290LEFlKHQuZWRnZXMoKSxmdW5jdGlvbihyKXt2YXIgbj10LmVkZ2Uocik7bi5uZXN0aW5nRWRnZSYmdC5yZW1vdmVFZGdlKHIpfSl9dmFyIFFuZT1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7U2MoKTtvKFhuZSwicnVuIik7byhqbmUsImRmcyIpO28oaEllLCJ0cmVlRGVwdGhzIik7byhmSWUsInN1bVdlaWdodHMiKTtvKEtuZSwiY2xlYW51cCIpfSk7ZnVuY3Rpb24gWm5lKHQsZSxyKXt2YXIgbj17fSxpO0FlKHIsZnVuY3Rpb24oYSl7Zm9yKHZhciBzPXQucGFyZW50KGEpLGwsdTtzOyl7aWYobD10LnBhcmVudChzKSxsPyh1PW5bbF0sbltsXT1zKToodT1pLGk9cyksdSYmdSE9PXMpe2Uuc2V0RWRnZSh1LHMpO3JldHVybn1zPWx9fSl9dmFyIEpuZT1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7byhabmUsImFkZFN1YmdyYXBoQ29uc3RyYWludHMiKX0pO2Z1bmN0aW9uIGVpZSh0LGUscil7dmFyIG49cEllKHQpLGk9bmV3IHNuKHtjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyb290Om59KS5zZXREZWZhdWx0Tm9kZUxhYmVsKGZ1bmN0aW9uKGEpe3JldHVybiB0Lm5vZGUoYSl9KTtyZXR1cm4gQWUodC5ub2RlcygpLGZ1bmN0aW9uKGEpe3ZhciBzPXQubm9kZShhKSxsPXQucGFyZW50KGEpOyhzLnJhbms9PT1lfHxzLm1pblJhbms8PWUmJmU8PXMubWF4UmFuaykmJihpLnNldE5vZGUoYSksaS5zZXRQYXJlbnQoYSxsfHxuKSxBZSh0W3JdKGEpLGZ1bmN0aW9uKHUpe3ZhciBoPXUudj09PWE/dS53OnUudixmPWkuZWRnZShoLGEpLGQ9cHIoZik/MDpmLndlaWdodDtpLnNldEVkZ2UoaCxhLHt3ZWlnaHQ6dC5lZGdlKHUpLndlaWdodCtkfSl9KSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywibWluUmFuayIpJiZpLnNldE5vZGUoYSx7Ym9yZGVyTGVmdDpzLmJvcmRlckxlZnRbZV0sYm9yZGVyUmlnaHQ6cy5ib3JkZXJSaWdodFtlXX0pKX0pLGl9ZnVuY3Rpb24gcEllKHQpe2Zvcih2YXIgZTt0Lmhhc05vZGUoZT1VZCgiX3Jvb3QiKSk7KTtyZXR1cm4gZX12YXIgdGllPU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTtWbygpO28oZWllLCJidWlsZExheWVyR3JhcGgiKTtvKHBJZSwiY3JlYXRlUm9vdE5vZGUiKX0pO2Z1bmN0aW9uIHJpZSh0LGUpe2Zvcih2YXIgcj0wLG49MTtuPGUubGVuZ3RoOysrbilyKz1tSWUodCxlW24tMV0sZVtuXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gbUllKHQsZSxyKXtmb3IodmFyIG49alQocixKZShyLGZ1bmN0aW9uKGgsZil7cmV0dXJuIGZ9KSksaT1xcihKZShlLGZ1bmN0aW9uKGgpe3JldHVybiBrYyhKZSh0Lm91dEVkZ2VzKGgpLGZ1bmN0aW9uKGYpe3JldHVybntwb3M6bltmLnddLHdlaWdodDp0LmVkZ2UoZikud2VpZ2h0fX0pLCJwb3MiKX0pKSxhPTE7YTxyLmxlbmd0aDspYTw8PTE7dmFyIHM9MiphLTE7YS09MTt2YXIgbD1KZShuZXcgQXJyYXkocyksZnVuY3Rpb24oKXtyZXR1cm4gMH0pLHU9MDtyZXR1cm4gQWUoaS5mb3JFYWNoKGZ1bmN0aW9uKGgpe3ZhciBmPWgucG9zK2E7bFtmXSs9aC53ZWlnaHQ7Zm9yKHZhciBkPTA7Zj4wOylmJTImJihkKz1sW2YrMV0pLGY9Zi0xPj4xLGxbZl0rPWgud2VpZ2h0O3UrPWgud2VpZ2h0KmR9KSksdX12YXIgbmllPU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTtvKHJpZSwiY3Jvc3NDb3VudCIpO28obUllLCJ0d29MYXllckNyb3NzQ291bnQiKX0pO2Z1bmN0aW9uIGlpZSh0KXt2YXIgZT17fSxyPVlyKHQubm9kZXMoKSxmdW5jdGlvbihsKXtyZXR1cm4hdC5jaGlsZHJlbihsKS5sZW5ndGh9KSxuPUlzKEplKHIsZnVuY3Rpb24obCl7cmV0dXJuIHQubm9kZShsKS5yYW5rfSkpLGk9SmUoR28obisxKSxmdW5jdGlvbigpe3JldHVybltdfSk7ZnVuY3Rpb24gYShsKXtpZighQnQoZSxsKSl7ZVtsXT0hMDt2YXIgdT10Lm5vZGUobCk7aVt1LnJhbmtdLnB1c2gobCksQWUodC5zdWNjZXNzb3JzKGwpLGEpfX1vKGEsImRmcyIpO3ZhciBzPWtjKHIsZnVuY3Rpb24obCl7cmV0dXJuIHQubm9kZShsKS5yYW5rfSk7cmV0dXJuIEFlKHMsYSksaX12YXIgYWllPU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTtvKGlpZSwiaW5pdE9yZGVyIil9KTtmdW5jdGlvbiBzaWUodCxlKXtyZXR1cm4gSmUoZSxmdW5jdGlvbihyKXt2YXIgbj10LmluRWRnZXMocik7aWYobi5sZW5ndGgpe3ZhciBpPVhyKG4sZnVuY3Rpb24oYSxzKXt2YXIgbD10LmVkZ2UocyksdT10Lm5vZGUocy52KTtyZXR1cm57c3VtOmEuc3VtK2wud2VpZ2h0KnUub3JkZXIsd2VpZ2h0OmEud2VpZ2h0K2wud2VpZ2h0fX0se3N1bTowLHdlaWdodDowfSk7cmV0dXJue3Y6cixiYXJ5Y2VudGVyOmkuc3VtL2kud2VpZ2h0LHdlaWdodDppLndlaWdodH19ZWxzZSByZXR1cm57djpyfX0pfXZhciBvaWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtxdCgpO28oc2llLCJiYXJ5Y2VudGVyIil9KTtmdW5jdGlvbiBsaWUodCxlKXt2YXIgcj17fTtBZSh0LGZ1bmN0aW9uKGksYSl7dmFyIHM9cltpLnZdPXtpbmRlZ3JlZTowLGluOltdLG91dDpbXSx2czpbaS52XSxpOmF9O3ByKGkuYmFyeWNlbnRlcil8fChzLmJhcnljZW50ZXI9aS5iYXJ5Y2VudGVyLHMud2VpZ2h0PWkud2VpZ2h0KX0pLEFlKGUuZWRnZXMoKSxmdW5jdGlvbihpKXt2YXIgYT1yW2kudl0scz1yW2kud107IXByKGEpJiYhcHIocykmJihzLmluZGVncmVlKyssYS5vdXQucHVzaChyW2kud10pKX0pO3ZhciBuPVlyKHIsZnVuY3Rpb24oaSl7cmV0dXJuIWkuaW5kZWdyZWV9KTtyZXR1cm4gZ0llKG4pfWZ1bmN0aW9uIGdJZSh0KXt2YXIgZT1bXTtmdW5jdGlvbiByKGEpe3JldHVybiBmdW5jdGlvbihzKXtzLm1lcmdlZHx8KHByKHMuYmFyeWNlbnRlcil8fHByKGEuYmFyeWNlbnRlcil8fHMuYmFyeWNlbnRlcj49YS5iYXJ5Y2VudGVyKSYmeUllKGEscyl9fW8ociwiaGFuZGxlSW4iKTtmdW5jdGlvbiBuKGEpe3JldHVybiBmdW5jdGlvbihzKXtzLmluLnB1c2goYSksLS1zLmluZGVncmVlPT09MCYmdC5wdXNoKHMpfX1mb3IobyhuLCJoYW5kbGVPdXQiKTt0Lmxlbmd0aDspe3ZhciBpPXQucG9wKCk7ZS5wdXNoKGkpLEFlKGkuaW4ucmV2ZXJzZSgpLHIoaSkpLEFlKGkub3V0LG4oaSkpfXJldHVybiBKZShZcihlLGZ1bmN0aW9uKGEpe3JldHVybiFhLm1lcmdlZH0pLGZ1bmN0aW9uKGEpe3JldHVybiBWZChhLFsidnMiLCJpIiwiYmFyeWNlbnRlciIsIndlaWdodCJdKX0pfWZ1bmN0aW9uIHlJZSh0LGUpe3ZhciByPTAsbj0wO3Qud2VpZ2h0JiYocis9dC5iYXJ5Y2VudGVyKnQud2VpZ2h0LG4rPXQud2VpZ2h0KSxlLndlaWdodCYmKHIrPWUuYmFyeWNlbnRlciplLndlaWdodCxuKz1lLndlaWdodCksdC52cz1lLnZzLmNvbmNhdCh0LnZzKSx0LmJhcnljZW50ZXI9ci9uLHQud2VpZ2h0PW4sdC5pPU1hdGgubWluKGUuaSx0LmkpLGUubWVyZ2VkPSEwfXZhciBjaWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtxdCgpO28obGllLCJyZXNvbHZlQ29uZmxpY3RzIik7byhnSWUsImRvUmVzb2x2ZUNvbmZsaWN0cyIpO28oeUllLCJtZXJnZUVudHJpZXMiKX0pO2Z1bmN0aW9uIGhpZSh0LGUpe3ZhciByPWduZSh0LGZ1bmN0aW9uKGYpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZiwiYmFyeWNlbnRlciIpfSksbj1yLmxocyxpPWtjKHIucmhzLGZ1bmN0aW9uKGYpe3JldHVybi1mLml9KSxhPVtdLHM9MCxsPTAsdT0wO24uc29ydCh2SWUoISFlKSksdT11aWUoYSxpLHUpLEFlKG4sZnVuY3Rpb24oZil7dSs9Zi52cy5sZW5ndGgsYS5wdXNoKGYudnMpLHMrPWYuYmFyeWNlbnRlcipmLndlaWdodCxsKz1mLndlaWdodCx1PXVpZShhLGksdSl9KTt2YXIgaD17dnM6cXIoYSl9O3JldHVybiBsJiYoaC5iYXJ5Y2VudGVyPXMvbCxoLndlaWdodD1sKSxofWZ1bmN0aW9uIHVpZSh0LGUscil7Zm9yKHZhciBuO2UubGVuZ3RoJiYobj1nYShlKSkuaTw9cjspZS5wb3AoKSx0LnB1c2gobi52cykscisrO3JldHVybiByfWZ1bmN0aW9uIHZJZSh0KXtyZXR1cm4gZnVuY3Rpb24oZSxyKXtyZXR1cm4gZS5iYXJ5Y2VudGVyPHIuYmFyeWNlbnRlcj8tMTplLmJhcnljZW50ZXI+ci5iYXJ5Y2VudGVyPzE6dD9yLmktZS5pOmUuaS1yLml9fXZhciBmaWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtxdCgpO1NjKCk7byhoaWUsInNvcnQiKTtvKHVpZSwiY29uc3VtZVVuc29ydGFibGUiKTtvKHZJZSwiY29tcGFyZVdpdGhCaWFzIil9KTtmdW5jdGlvbiBkUih0LGUscixuKXt2YXIgaT10LmNoaWxkcmVuKGUpLGE9dC5ub2RlKGUpLHM9YT9hLmJvcmRlckxlZnQ6dm9pZCAwLGw9YT9hLmJvcmRlclJpZ2h0OnZvaWQgMCx1PXt9O3MmJihpPVlyKGksZnVuY3Rpb24oZyl7cmV0dXJuIGchPT1zJiZnIT09bH0pKTt2YXIgaD1zaWUodCxpKTtBZShoLGZ1bmN0aW9uKGcpe2lmKHQuY2hpbGRyZW4oZy52KS5sZW5ndGgpe3ZhciB5PWRSKHQsZy52LHIsbik7dVtnLnZdPXksT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHksImJhcnljZW50ZXIiKSYmYkllKGcseSl9fSk7dmFyIGY9bGllKGgscik7eEllKGYsdSk7dmFyIGQ9aGllKGYsbik7aWYocyYmKGQudnM9cXIoW3MsZC52cyxsXSksdC5wcmVkZWNlc3NvcnMocykubGVuZ3RoKSl7dmFyIHA9dC5ub2RlKHQucHJlZGVjZXNzb3JzKHMpWzBdKSxtPXQubm9kZSh0LnByZWRlY2Vzc29ycyhsKVswXSk7T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGQsImJhcnljZW50ZXIiKXx8KGQuYmFyeWNlbnRlcj0wLGQud2VpZ2h0PTApLGQuYmFyeWNlbnRlcj0oZC5iYXJ5Y2VudGVyKmQud2VpZ2h0K3Aub3JkZXIrbS5vcmRlcikvKGQud2VpZ2h0KzIpLGQud2VpZ2h0Kz0yfXJldHVybiBkfWZ1bmN0aW9uIHhJZSh0LGUpe0FlKHQsZnVuY3Rpb24ocil7ci52cz1xcihyLnZzLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gZVtuXT9lW25dLnZzOm59KSl9KX1mdW5jdGlvbiBiSWUodCxlKXtwcih0LmJhcnljZW50ZXIpPyh0LmJhcnljZW50ZXI9ZS5iYXJ5Y2VudGVyLHQud2VpZ2h0PWUud2VpZ2h0KToodC5iYXJ5Y2VudGVyPSh0LmJhcnljZW50ZXIqdC53ZWlnaHQrZS5iYXJ5Y2VudGVyKmUud2VpZ2h0KS8odC53ZWlnaHQrZS53ZWlnaHQpLHQud2VpZ2h0Kz1lLndlaWdodCl9dmFyIGRpZT1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7b2llKCk7Y2llKCk7ZmllKCk7byhkUiwic29ydFN1YmdyYXBoIik7byh4SWUsImV4cGFuZFN1YmdyYXBocyIpO28oYkllLCJtZXJnZUJhcnljZW50ZXJzIil9KTtmdW5jdGlvbiBnaWUodCl7dmFyIGU9S0wodCkscj1waWUodCxHbygxLGUrMSksImluRWRnZXMiKSxuPXBpZSh0LEdvKGUtMSwtMSwtMSksIm91dEVkZ2VzIiksaT1paWUodCk7bWllKHQsaSk7Zm9yKHZhciBhPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxzLGw9MCx1PTA7dTw0OysrbCwrK3Upe3dJZShsJTI/cjpuLGwlND49MiksaT1lZih0KTt2YXIgaD1yaWUodCxpKTtoPGEmJih1PTAscz15TChpKSxhPWgpfW1pZSh0LHMpfWZ1bmN0aW9uIHBpZSh0LGUscil7cmV0dXJuIEplKGUsZnVuY3Rpb24obil7cmV0dXJuIGVpZSh0LG4scil9KX1mdW5jdGlvbiB3SWUodCxlKXt2YXIgcj1uZXcgc247QWUodCxmdW5jdGlvbihuKXt2YXIgaT1uLmdyYXBoKCkucm9vdCxhPWRSKG4saSxyLGUpO0FlKGEudnMsZnVuY3Rpb24ocyxsKXtuLm5vZGUocykub3JkZXI9bH0pLFpuZShuLHIsYS52cyl9KX1mdW5jdGlvbiBtaWUodCxlKXtBZShlLGZ1bmN0aW9uKHIpe0FlKHIsZnVuY3Rpb24obixpKXt0Lm5vZGUobikub3JkZXI9aX0pfSl9dmFyIHlpZT1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7Vm8oKTtTYygpO0puZSgpO3RpZSgpO25pZSgpO2FpZSgpO2RpZSgpO28oZ2llLCJvcmRlciIpO28ocGllLCJidWlsZExheWVyR3JhcGhzIik7byh3SWUsInN3ZWVwTGF5ZXJHcmFwaHMiKTtvKG1pZSwiYXNzaWduT3JkZXIiKX0pO2Z1bmN0aW9uIHZpZSh0KXt2YXIgZT1rSWUodCk7QWUodC5ncmFwaCgpLmR1bW15Q2hhaW5zLGZ1bmN0aW9uKHIpe2Zvcih2YXIgbj10Lm5vZGUociksaT1uLmVkZ2VPYmosYT1USWUodCxlLGkudixpLncpLHM9YS5wYXRoLGw9YS5sY2EsdT0wLGg9c1t1XSxmPSEwO3IhPT1pLnc7KXtpZihuPXQubm9kZShyKSxmKXtmb3IoOyhoPXNbdV0pIT09bCYmdC5ub2RlKGgpLm1heFJhbms8bi5yYW5rOyl1Kys7aD09PWwmJihmPSExKX1pZighZil7Zm9yKDt1PHMubGVuZ3RoLTEmJnQubm9kZShoPXNbdSsxXSkubWluUmFuazw9bi5yYW5rOyl1Kys7aD1zW3VdfXQuc2V0UGFyZW50KHIsaCkscj10LnN1Y2Nlc3NvcnMocilbMF19fSl9ZnVuY3Rpb24gVEllKHQsZSxyLG4pe3ZhciBpPVtdLGE9W10scz1NYXRoLm1pbihlW3JdLmxvdyxlW25dLmxvdyksbD1NYXRoLm1heChlW3JdLmxpbSxlW25dLmxpbSksdSxoO3U9cjtkbyB1PXQucGFyZW50KHUpLGkucHVzaCh1KTt3aGlsZSh1JiYoZVt1XS5sb3c+c3x8bD5lW3VdLmxpbSkpO2ZvcihoPXUsdT1uOyh1PXQucGFyZW50KHUpKSE9PWg7KWEucHVzaCh1KTtyZXR1cm57cGF0aDppLmNvbmNhdChhLnJldmVyc2UoKSksbGNhOmh9fWZ1bmN0aW9uIGtJZSh0KXt2YXIgZT17fSxyPTA7ZnVuY3Rpb24gbihpKXt2YXIgYT1yO0FlKHQuY2hpbGRyZW4oaSksbiksZVtpXT17bG93OmEsbGltOnIrK319cmV0dXJuIG8obiwiZGZzIiksQWUodC5jaGlsZHJlbigpLG4pLGV9dmFyIHhpZT1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7byh2aWUsInBhcmVudER1bW15Q2hhaW5zIik7byhUSWUsImZpbmRQYXRoIik7byhrSWUsInBvc3RvcmRlciIpfSk7ZnVuY3Rpb24gRUllKHQsZSl7dmFyIHI9e307ZnVuY3Rpb24gbihpLGEpe3ZhciBzPTAsbD0wLHU9aS5sZW5ndGgsaD1nYShhKTtyZXR1cm4gQWUoYSxmdW5jdGlvbihmLGQpe3ZhciBwPUNJZSh0LGYpLG09cD90Lm5vZGUocCkub3JkZXI6dTsocHx8Zj09PWgpJiYoQWUoYS5zbGljZShsLGQrMSksZnVuY3Rpb24oZyl7QWUodC5wcmVkZWNlc3NvcnMoZyksZnVuY3Rpb24oeSl7dmFyIHY9dC5ub2RlKHkpLHg9di5vcmRlcjsoeDxzfHxtPHgpJiYhKHYuZHVtbXkmJnQubm9kZShnKS5kdW1teSkmJmJpZShyLHksZyl9KX0pLGw9ZCsxLHM9bSl9KSxhfXJldHVybiBvKG4sInZpc2l0TGF5ZXIiKSxYcihlLG4pLHJ9ZnVuY3Rpb24gU0llKHQsZSl7dmFyIHI9e307ZnVuY3Rpb24gbihhLHMsbCx1LGgpe3ZhciBmO0FlKEdvKHMsbCksZnVuY3Rpb24oZCl7Zj1hW2RdLHQubm9kZShmKS5kdW1teSYmQWUodC5wcmVkZWNlc3NvcnMoZiksZnVuY3Rpb24ocCl7dmFyIG09dC5ub2RlKHApO20uZHVtbXkmJihtLm9yZGVyPHV8fG0ub3JkZXI+aCkmJmJpZShyLHAsZil9KX0pfW8obiwic2NhbiIpO2Z1bmN0aW9uIGkoYSxzKXt2YXIgbD0tMSx1LGg9MDtyZXR1cm4gQWUocyxmdW5jdGlvbihmLGQpe2lmKHQubm9kZShmKS5kdW1teT09PSJib3JkZXIiKXt2YXIgcD10LnByZWRlY2Vzc29ycyhmKTtwLmxlbmd0aCYmKHU9dC5ub2RlKHBbMF0pLm9yZGVyLG4ocyxoLGQsbCx1KSxoPWQsbD11KX1uKHMsaCxzLmxlbmd0aCx1LGEubGVuZ3RoKX0pLHN9cmV0dXJuIG8oaSwidmlzaXRMYXllciIpLFhyKGUsaSkscn1mdW5jdGlvbiBDSWUodCxlKXtpZih0Lm5vZGUoZSkuZHVtbXkpcmV0dXJuIG5zKHQucHJlZGVjZXNzb3JzKGUpLGZ1bmN0aW9uKHIpe3JldHVybiB0Lm5vZGUocikuZHVtbXl9KX1mdW5jdGlvbiBiaWUodCxlLHIpe2lmKGU+cil7dmFyIG49ZTtlPXIscj1ufXZhciBpPXRbZV07aXx8KHRbZV09aT17fSksaVtyXT0hMH1mdW5jdGlvbiBBSWUodCxlLHIpe2lmKGU+cil7dmFyIG49ZTtlPXIscj1ufXJldHVybiEhdFtlXSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRbZV0scil9ZnVuY3Rpb24gX0llKHQsZSxyLG4pe3ZhciBpPXt9LGE9e30scz17fTtyZXR1cm4gQWUoZSxmdW5jdGlvbihsKXtBZShsLGZ1bmN0aW9uKHUsaCl7aVt1XT11LGFbdV09dSxzW3VdPWh9KX0pLEFlKGUsZnVuY3Rpb24obCl7dmFyIHU9LTE7QWUobCxmdW5jdGlvbihoKXt2YXIgZj1uKGgpO2lmKGYubGVuZ3RoKXtmPWtjKGYsZnVuY3Rpb24oeSl7cmV0dXJuIHNbeV19KTtmb3IodmFyIGQ9KGYubGVuZ3RoLTEpLzIscD1NYXRoLmZsb29yKGQpLG09TWF0aC5jZWlsKGQpO3A8PW07KytwKXt2YXIgZz1mW3BdO2FbaF09PT1oJiZ1PHNbZ10mJiFBSWUocixoLGcpJiYoYVtnXT1oLGFbaF09aVtoXT1pW2ddLHU9c1tnXSl9fX0pfSkse3Jvb3Q6aSxhbGlnbjphfX1mdW5jdGlvbiBESWUodCxlLHIsbixpKXt2YXIgYT17fSxzPUxJZSh0LGUscixpKSxsPWk/ImJvcmRlckxlZnQiOiJib3JkZXJSaWdodCI7ZnVuY3Rpb24gdShkLHApe2Zvcih2YXIgbT1zLm5vZGVzKCksZz1tLnBvcCgpLHk9e307ZzspeVtnXT9kKGcpOih5W2ddPSEwLG0ucHVzaChnKSxtPW0uY29uY2F0KHAoZykpKSxnPW0ucG9wKCl9byh1LCJpdGVyYXRlIik7ZnVuY3Rpb24gaChkKXthW2RdPXMuaW5FZGdlcyhkKS5yZWR1Y2UoZnVuY3Rpb24ocCxtKXtyZXR1cm4gTWF0aC5tYXgocCxhW20udl0rcy5lZGdlKG0pKX0sMCl9byhoLCJwYXNzMSIpO2Z1bmN0aW9uIGYoZCl7dmFyIHA9cy5vdXRFZGdlcyhkKS5yZWR1Y2UoZnVuY3Rpb24oZyx5KXtyZXR1cm4gTWF0aC5taW4oZyxhW3kud10tcy5lZGdlKHkpKX0sTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSxtPXQubm9kZShkKTtwIT09TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZJiZtLmJvcmRlclR5cGUhPT1sJiYoYVtkXT1NYXRoLm1heChhW2RdLHApKX1yZXR1cm4gbyhmLCJwYXNzMiIpLHUoaCxzLnByZWRlY2Vzc29ycy5iaW5kKHMpKSx1KGYscy5zdWNjZXNzb3JzLmJpbmQocykpLEFlKG4sZnVuY3Rpb24oZCl7YVtkXT1hW3JbZF1dfSksYX1mdW5jdGlvbiBMSWUodCxlLHIsbil7dmFyIGk9bmV3IHNuLGE9dC5ncmFwaCgpLHM9SUllKGEubm9kZXNlcCxhLmVkZ2VzZXAsbik7cmV0dXJuIEFlKGUsZnVuY3Rpb24obCl7dmFyIHU7QWUobCxmdW5jdGlvbihoKXt2YXIgZj1yW2hdO2lmKGkuc2V0Tm9kZShmKSx1KXt2YXIgZD1yW3VdLHA9aS5lZGdlKGQsZik7aS5zZXRFZGdlKGQsZixNYXRoLm1heChzKHQsaCx1KSxwfHwwKSl9dT1ofSl9KSxpfWZ1bmN0aW9uIFJJZSh0LGUpe3JldHVybiBHZChicihlKSxmdW5jdGlvbihyKXt2YXIgbj1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksaT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7cmV0dXJuIE5MKHIsZnVuY3Rpb24oYSxzKXt2YXIgbD1PSWUodCxzKS8yO249TWF0aC5tYXgoYStsLG4pLGk9TWF0aC5taW4oYS1sLGkpfSksbi1pfSl9ZnVuY3Rpb24gTkllKHQsZSl7dmFyIHI9YnIoZSksbj1EbChyKSxpPUlzKHIpO0FlKFsidSIsImQiXSxmdW5jdGlvbihhKXtBZShbImwiLCJyIl0sZnVuY3Rpb24ocyl7dmFyIGw9YStzLHU9dFtsXSxoO2lmKHUhPT1lKXt2YXIgZj1icih1KTtoPXM9PT0ibCI/bi1EbChmKTppLUlzKGYpLGgmJih0W2xdPXpkKHUsZnVuY3Rpb24oZCl7cmV0dXJuIGQraH0pKX19KX0pfWZ1bmN0aW9uIE1JZSh0LGUpe3JldHVybiB6ZCh0LnVsLGZ1bmN0aW9uKHIsbil7aWYoZSlyZXR1cm4gdFtlLnRvTG93ZXJDYXNlKCldW25dO3ZhciBpPWtjKEplKHQsbikpO3JldHVybihpWzFdK2lbMl0pLzJ9KX1mdW5jdGlvbiB3aWUodCl7dmFyIGU9ZWYodCkscj1GaChFSWUodCxlKSxTSWUodCxlKSksbj17fSxpO0FlKFsidSIsImQiXSxmdW5jdGlvbihzKXtpPXM9PT0idSI/ZTpicihlKS5yZXZlcnNlKCksQWUoWyJsIiwiciJdLGZ1bmN0aW9uKGwpe2w9PT0iciImJihpPUplKGksZnVuY3Rpb24oZCl7cmV0dXJuIGJyKGQpLnJldmVyc2UoKX0pKTt2YXIgdT0ocz09PSJ1Ij90LnByZWRlY2Vzc29yczp0LnN1Y2Nlc3NvcnMpLmJpbmQodCksaD1fSWUodCxpLHIsdSksZj1ESWUodCxpLGgucm9vdCxoLmFsaWduLGw9PT0iciIpO2w9PT0iciImJihmPXpkKGYsZnVuY3Rpb24oZCl7cmV0dXJuLWR9KSksbltzK2xdPWZ9KX0pO3ZhciBhPVJJZSh0LG4pO3JldHVybiBOSWUobixhKSxNSWUobix0LmdyYXBoKCkuYWxpZ24pfWZ1bmN0aW9uIElJZSh0LGUscil7cmV0dXJuIGZ1bmN0aW9uKG4saSxhKXt2YXIgcz1uLm5vZGUoaSksbD1uLm5vZGUoYSksdT0wLGg7aWYodSs9cy53aWR0aC8yLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCJsYWJlbHBvcyIpKXN3aXRjaChzLmxhYmVscG9zLnRvTG93ZXJDYXNlKCkpe2Nhc2UibCI6aD0tcy53aWR0aC8yO2JyZWFrO2Nhc2UiciI6aD1zLndpZHRoLzI7YnJlYWt9aWYoaCYmKHUrPXI/aDotaCksaD0wLHUrPShzLmR1bW15P2U6dCkvMix1Kz0obC5kdW1teT9lOnQpLzIsdSs9bC53aWR0aC8yLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsLCJsYWJlbHBvcyIpKXN3aXRjaChsLmxhYmVscG9zLnRvTG93ZXJDYXNlKCkpe2Nhc2UibCI6aD1sLndpZHRoLzI7YnJlYWs7Y2FzZSJyIjpoPS1sLndpZHRoLzI7YnJlYWt9cmV0dXJuIGgmJih1Kz1yP2g6LWgpLGg9MCx1fX1mdW5jdGlvbiBPSWUodCxlKXtyZXR1cm4gdC5ub2RlKGUpLndpZHRofXZhciBUaWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtxdCgpO1ZvKCk7U2MoKTtvKEVJZSwiZmluZFR5cGUxQ29uZmxpY3RzIik7byhTSWUsImZpbmRUeXBlMkNvbmZsaWN0cyIpO28oQ0llLCJmaW5kT3RoZXJJbm5lclNlZ21lbnROb2RlIik7byhiaWUsImFkZENvbmZsaWN0Iik7byhBSWUsImhhc0NvbmZsaWN0Iik7byhfSWUsInZlcnRpY2FsQWxpZ25tZW50Iik7byhESWUsImhvcml6b250YWxDb21wYWN0aW9uIik7byhMSWUsImJ1aWxkQmxvY2tHcmFwaCIpO28oUkllLCJmaW5kU21hbGxlc3RXaWR0aEFsaWdubWVudCIpO28oTkllLCJhbGlnbkNvb3JkaW5hdGVzIik7byhNSWUsImJhbGFuY2UiKTtvKHdpZSwicG9zaXRpb25YIik7byhJSWUsInNlcCIpO28oT0llLCJ3aWR0aCIpfSk7ZnVuY3Rpb24ga2llKHQpe3Q9SlQodCksUEllKHQpLE1MKHdpZSh0KSxmdW5jdGlvbihlLHIpe3Qubm9kZShyKS54PWV9KX1mdW5jdGlvbiBQSWUodCl7dmFyIGU9ZWYodCkscj10LmdyYXBoKCkucmFua3NlcCxuPTA7QWUoZSxmdW5jdGlvbihpKXt2YXIgYT1JcyhKZShpLGZ1bmN0aW9uKHMpe3JldHVybiB0Lm5vZGUocykuaGVpZ2h0fSkpO0FlKGksZnVuY3Rpb24ocyl7dC5ub2RlKHMpLnk9bithLzJ9KSxuKz1hK3J9KX12YXIgRWllPU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTtTYygpO1RpZSgpO28oa2llLCJwb3NpdGlvbiIpO28oUEllLCJwb3NpdGlvblkiKX0pO2Z1bmN0aW9uIFIyKHQsZSl7dmFyIHI9ZSYmZS5kZWJ1Z1RpbWluZz95bmU6dm5lO3IoImxheW91dCIsKCk9Pnt2YXIgbj1yKCIgIGJ1aWxkTGF5b3V0R3JhcGgiLCgpPT5ZSWUodCkpO3IoIiAgcnVuTGF5b3V0IiwoKT0+QkllKG4scikpLHIoIiAgdXBkYXRlSW5wdXRHcmFwaCIsKCk9PkZJZSh0LG4pKX0pfWZ1bmN0aW9uIEJJZSh0LGUpe2UoIiAgICBtYWtlU3BhY2VGb3JFZGdlTGFiZWxzIiwoKT0+WEllKHQpKSxlKCIgICAgcmVtb3ZlU2VsZkVkZ2VzIiwoKT0+bk9lKHQpKSxlKCIgICAgYWN5Y2xpYyIsKCk9PnVuZSh0KSksZSgiICAgIG5lc3RpbmdHcmFwaC5ydW4iLCgpPT5YbmUodCkpLGUoIiAgICByYW5rIiwoKT0+aFIoSlQodCkpKSxlKCIgICAgaW5qZWN0RWRnZUxhYmVsUHJveGllcyIsKCk9PmpJZSh0KSksZSgiICAgIHJlbW92ZUVtcHR5UmFua3MiLCgpPT5tbmUodCkpLGUoIiAgICBuZXN0aW5nR3JhcGguY2xlYW51cCIsKCk9PktuZSh0KSksZSgiICAgIG5vcm1hbGl6ZVJhbmtzIiwoKT0+cG5lKHQpKSxlKCIgICAgYXNzaWduUmFua01pbk1heCIsKCk9PktJZSh0KSksZSgiICAgIHJlbW92ZUVkZ2VMYWJlbFByb3hpZXMiLCgpPT5RSWUodCkpLGUoIiAgICBub3JtYWxpemUucnVuIiwoKT0+QW5lKHQpKSxlKCIgICAgcGFyZW50RHVtbXlDaGFpbnMiLCgpPT52aWUodCkpLGUoIiAgICBhZGRCb3JkZXJTZWdtZW50cyIsKCk9PmJuZSh0KSksZSgiICAgIG9yZGVyIiwoKT0+Z2llKHQpKSxlKCIgICAgaW5zZXJ0U2VsZkVkZ2VzIiwoKT0+aU9lKHQpKSxlKCIgICAgYWRqdXN0Q29vcmRpbmF0ZVN5c3RlbSIsKCk9PmtuZSh0KSksZSgiICAgIHBvc2l0aW9uIiwoKT0+a2llKHQpKSxlKCIgICAgcG9zaXRpb25TZWxmRWRnZXMiLCgpPT5hT2UodCkpLGUoIiAgICByZW1vdmVCb3JkZXJOb2RlcyIsKCk9PnJPZSh0KSksZSgiICAgIG5vcm1hbGl6ZS51bmRvIiwoKT0+X25lKHQpKSxlKCIgICAgZml4dXBFZGdlTGFiZWxDb29yZHMiLCgpPT5lT2UodCkpLGUoIiAgICB1bmRvQ29vcmRpbmF0ZVN5c3RlbSIsKCk9PkVuZSh0KSksZSgiICAgIHRyYW5zbGF0ZUdyYXBoIiwoKT0+WkllKHQpKSxlKCIgICAgYXNzaWduTm9kZUludGVyc2VjdHMiLCgpPT5KSWUodCkpLGUoIiAgICByZXZlcnNlUG9pbnRzIiwoKT0+dE9lKHQpKSxlKCIgICAgYWN5Y2xpYy51bmRvIiwoKT0+aG5lKHQpKX1mdW5jdGlvbiBGSWUodCxlKXtBZSh0Lm5vZGVzKCksZnVuY3Rpb24ocil7dmFyIG49dC5ub2RlKHIpLGk9ZS5ub2RlKHIpO24mJihuLng9aS54LG4ueT1pLnksZS5jaGlsZHJlbihyKS5sZW5ndGgmJihuLndpZHRoPWkud2lkdGgsbi5oZWlnaHQ9aS5oZWlnaHQpKX0pLEFlKHQuZWRnZXMoKSxmdW5jdGlvbihyKXt2YXIgbj10LmVkZ2UociksaT1lLmVkZ2Uocik7bi5wb2ludHM9aS5wb2ludHMsT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGksIngiKSYmKG4ueD1pLngsbi55PWkueSl9KSx0LmdyYXBoKCkud2lkdGg9ZS5ncmFwaCgpLndpZHRoLHQuZ3JhcGgoKS5oZWlnaHQ9ZS5ncmFwaCgpLmhlaWdodH1mdW5jdGlvbiBZSWUodCl7dmFyIGU9bmV3IHNuKHttdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwfSkscj1tUih0LmdyYXBoKCkpO3JldHVybiBlLnNldEdyYXBoKEZoKHt9LHpJZSxwUihyLCRJZSksVmQocixHSWUpKSksQWUodC5ub2RlcygpLGZ1bmN0aW9uKG4pe3ZhciBpPW1SKHQubm9kZShuKSk7ZS5zZXROb2RlKG4sUWgocFIoaSxWSWUpLFVJZSkpLGUuc2V0UGFyZW50KG4sdC5wYXJlbnQobikpfSksQWUodC5lZGdlcygpLGZ1bmN0aW9uKG4pe3ZhciBpPW1SKHQuZWRnZShuKSk7ZS5zZXRFZGdlKG4sRmgoe30sV0llLHBSKGksSEllKSxWZChpLHFJZSkpKX0pLGV9ZnVuY3Rpb24gWEllKHQpe3ZhciBlPXQuZ3JhcGgoKTtlLnJhbmtzZXAvPTIsQWUodC5lZGdlcygpLGZ1bmN0aW9uKHIpe3ZhciBuPXQuZWRnZShyKTtuLm1pbmxlbio9MixuLmxhYmVscG9zLnRvTG93ZXJDYXNlKCkhPT0iYyImJihlLnJhbmtkaXI9PT0iVEIifHxlLnJhbmtkaXI9PT0iQlQiP24ud2lkdGgrPW4ubGFiZWxvZmZzZXQ6bi5oZWlnaHQrPW4ubGFiZWxvZmZzZXQpfSl9ZnVuY3Rpb24gakllKHQpe0FlKHQuZWRnZXMoKSxmdW5jdGlvbihlKXt2YXIgcj10LmVkZ2UoZSk7aWYoci53aWR0aCYmci5oZWlnaHQpe3ZhciBuPXQubm9kZShlLnYpLGk9dC5ub2RlKGUudyksYT17cmFuazooaS5yYW5rLW4ucmFuaykvMituLnJhbmssZX07RWModCwiZWRnZS1wcm94eSIsYSwiX2VwIil9fSl9ZnVuY3Rpb24gS0llKHQpe3ZhciBlPTA7QWUodC5ub2RlcygpLGZ1bmN0aW9uKHIpe3ZhciBuPXQubm9kZShyKTtuLmJvcmRlclRvcCYmKG4ubWluUmFuaz10Lm5vZGUobi5ib3JkZXJUb3ApLnJhbmssbi5tYXhSYW5rPXQubm9kZShuLmJvcmRlckJvdHRvbSkucmFuayxlPUlzKGUsbi5tYXhSYW5rKSl9KSx0LmdyYXBoKCkubWF4UmFuaz1lfWZ1bmN0aW9uIFFJZSh0KXtBZSh0Lm5vZGVzKCksZnVuY3Rpb24oZSl7dmFyIHI9dC5ub2RlKGUpO3IuZHVtbXk9PT0iZWRnZS1wcm94eSImJih0LmVkZ2Uoci5lKS5sYWJlbFJhbms9ci5yYW5rLHQucmVtb3ZlTm9kZShlKSl9KX1mdW5jdGlvbiBaSWUodCl7dmFyIGU9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLHI9MCxuPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxpPTAsYT10LmdyYXBoKCkscz1hLm1hcmdpbnh8fDAsbD1hLm1hcmdpbnl8fDA7ZnVuY3Rpb24gdShoKXt2YXIgZj1oLngsZD1oLnkscD1oLndpZHRoLG09aC5oZWlnaHQ7ZT1NYXRoLm1pbihlLGYtcC8yKSxyPU1hdGgubWF4KHIsZitwLzIpLG49TWF0aC5taW4obixkLW0vMiksaT1NYXRoLm1heChpLGQrbS8yKX1vKHUsImdldEV4dHJlbWVzIiksQWUodC5ub2RlcygpLGZ1bmN0aW9uKGgpe3UodC5ub2RlKGgpKX0pLEFlKHQuZWRnZXMoKSxmdW5jdGlvbihoKXt2YXIgZj10LmVkZ2UoaCk7T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGYsIngiKSYmdShmKX0pLGUtPXMsbi09bCxBZSh0Lm5vZGVzKCksZnVuY3Rpb24oaCl7dmFyIGY9dC5ub2RlKGgpO2YueC09ZSxmLnktPW59KSxBZSh0LmVkZ2VzKCksZnVuY3Rpb24oaCl7dmFyIGY9dC5lZGdlKGgpO0FlKGYucG9pbnRzLGZ1bmN0aW9uKGQpe2QueC09ZSxkLnktPW59KSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZiwieCIpJiYoZi54LT1lKSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZiwieSIpJiYoZi55LT1uKX0pLGEud2lkdGg9ci1lK3MsYS5oZWlnaHQ9aS1uK2x9ZnVuY3Rpb24gSkllKHQpe0FlKHQuZWRnZXMoKSxmdW5jdGlvbihlKXt2YXIgcj10LmVkZ2UoZSksbj10Lm5vZGUoZS52KSxpPXQubm9kZShlLncpLGEscztyLnBvaW50cz8oYT1yLnBvaW50c1swXSxzPXIucG9pbnRzW3IucG9pbnRzLmxlbmd0aC0xXSk6KHIucG9pbnRzPVtdLGE9aSxzPW4pLHIucG9pbnRzLnVuc2hpZnQoWEwobixhKSksci5wb2ludHMucHVzaChYTChpLHMpKX0pfWZ1bmN0aW9uIGVPZSh0KXtBZSh0LmVkZ2VzKCksZnVuY3Rpb24oZSl7dmFyIHI9dC5lZGdlKGUpO2lmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLCJ4Iikpc3dpdGNoKChyLmxhYmVscG9zPT09ImwifHxyLmxhYmVscG9zPT09InIiKSYmKHIud2lkdGgtPXIubGFiZWxvZmZzZXQpLHIubGFiZWxwb3Mpe2Nhc2UibCI6ci54LT1yLndpZHRoLzIrci5sYWJlbG9mZnNldDticmVhaztjYXNlInIiOnIueCs9ci53aWR0aC8yK3IubGFiZWxvZmZzZXQ7YnJlYWt9fSl9ZnVuY3Rpb24gdE9lKHQpe0FlKHQuZWRnZXMoKSxmdW5jdGlvbihlKXt2YXIgcj10LmVkZ2UoZSk7ci5yZXZlcnNlZCYmci5wb2ludHMucmV2ZXJzZSgpfSl9ZnVuY3Rpb24gck9lKHQpe0FlKHQubm9kZXMoKSxmdW5jdGlvbihlKXtpZih0LmNoaWxkcmVuKGUpLmxlbmd0aCl7dmFyIHI9dC5ub2RlKGUpLG49dC5ub2RlKHIuYm9yZGVyVG9wKSxpPXQubm9kZShyLmJvcmRlckJvdHRvbSksYT10Lm5vZGUoZ2Eoci5ib3JkZXJMZWZ0KSkscz10Lm5vZGUoZ2Eoci5ib3JkZXJSaWdodCkpO3Iud2lkdGg9TWF0aC5hYnMocy54LWEueCksci5oZWlnaHQ9TWF0aC5hYnMoaS55LW4ueSksci54PWEueCtyLndpZHRoLzIsci55PW4ueStyLmhlaWdodC8yfX0pLEFlKHQubm9kZXMoKSxmdW5jdGlvbihlKXt0Lm5vZGUoZSkuZHVtbXk9PT0iYm9yZGVyIiYmdC5yZW1vdmVOb2RlKGUpfSl9ZnVuY3Rpb24gbk9lKHQpe0FlKHQuZWRnZXMoKSxmdW5jdGlvbihlKXtpZihlLnY9PT1lLncpe3ZhciByPXQubm9kZShlLnYpO3Iuc2VsZkVkZ2VzfHwoci5zZWxmRWRnZXM9W10pLHIuc2VsZkVkZ2VzLnB1c2goe2UsbGFiZWw6dC5lZGdlKGUpfSksdC5yZW1vdmVFZGdlKGUpfX0pfWZ1bmN0aW9uIGlPZSh0KXt2YXIgZT1lZih0KTtBZShlLGZ1bmN0aW9uKHIpe3ZhciBuPTA7QWUocixmdW5jdGlvbihpLGEpe3ZhciBzPXQubm9kZShpKTtzLm9yZGVyPWErbixBZShzLnNlbGZFZGdlcyxmdW5jdGlvbihsKXtFYyh0LCJzZWxmZWRnZSIse3dpZHRoOmwubGFiZWwud2lkdGgsaGVpZ2h0OmwubGFiZWwuaGVpZ2h0LHJhbms6cy5yYW5rLG9yZGVyOmErICsrbixlOmwuZSxsYWJlbDpsLmxhYmVsfSwiX3NlIil9KSxkZWxldGUgcy5zZWxmRWRnZXN9KX0pfWZ1bmN0aW9uIGFPZSh0KXtBZSh0Lm5vZGVzKCksZnVuY3Rpb24oZSl7dmFyIHI9dC5ub2RlKGUpO2lmKHIuZHVtbXk9PT0ic2VsZmVkZ2UiKXt2YXIgbj10Lm5vZGUoci5lLnYpLGk9bi54K24ud2lkdGgvMixhPW4ueSxzPXIueC1pLGw9bi5oZWlnaHQvMjt0LnNldEVkZ2Uoci5lLHIubGFiZWwpLHQucmVtb3ZlTm9kZShlKSxyLmxhYmVsLnBvaW50cz1be3g6aSsyKnMvMyx5OmEtbH0se3g6aSs1KnMvNix5OmEtbH0se3g6aStzLHk6YX0se3g6aSs1KnMvNix5OmErbH0se3g6aSsyKnMvMyx5OmErbH1dLHIubGFiZWwueD1yLngsci5sYWJlbC55PXIueX19KX1mdW5jdGlvbiBwUih0LGUpe3JldHVybiB6ZChWZCh0LGUpLE51bWJlcil9ZnVuY3Rpb24gbVIodCl7dmFyIGU9e307cmV0dXJuIEFlKHQsZnVuY3Rpb24ocixuKXtlW24udG9Mb3dlckNhc2UoKV09cn0pLGV9dmFyICRJZSx6SWUsR0llLFZJZSxVSWUsSEllLFdJZSxxSWUsU2llPU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTtWbygpO3duZSgpO0NuZSgpO1lMKCk7SkwoKTtmUigpO1FuZSgpO3lpZSgpO3hpZSgpO0VpZSgpO1NjKCk7byhSMiwibGF5b3V0Iik7byhCSWUsInJ1bkxheW91dCIpO28oRkllLCJ1cGRhdGVJbnB1dEdyYXBoIik7JEllPVsibm9kZXNlcCIsImVkZ2VzZXAiLCJyYW5rc2VwIiwibWFyZ2lueCIsIm1hcmdpbnkiXSx6SWU9e3JhbmtzZXA6NTAsZWRnZXNlcDoyMCxub2Rlc2VwOjUwLHJhbmtkaXI6InRiIn0sR0llPVsiYWN5Y2xpY2VyIiwicmFua2VyIiwicmFua2RpciIsImFsaWduIl0sVkllPVsid2lkdGgiLCJoZWlnaHQiXSxVSWU9e3dpZHRoOjAsaGVpZ2h0OjB9LEhJZT1bIm1pbmxlbiIsIndlaWdodCIsIndpZHRoIiwiaGVpZ2h0IiwibGFiZWxvZmZzZXQiXSxXSWU9e21pbmxlbjoxLHdlaWdodDoxLHdpZHRoOjAsaGVpZ2h0OjAsbGFiZWxvZmZzZXQ6MTAsbGFiZWxwb3M6InIifSxxSWU9WyJsYWJlbHBvcyJdO28oWUllLCJidWlsZExheW91dEdyYXBoIik7byhYSWUsIm1ha2VTcGFjZUZvckVkZ2VMYWJlbHMiKTtvKGpJZSwiaW5qZWN0RWRnZUxhYmVsUHJveGllcyIpO28oS0llLCJhc3NpZ25SYW5rTWluTWF4Iik7byhRSWUsInJlbW92ZUVkZ2VMYWJlbFByb3hpZXMiKTtvKFpJZSwidHJhbnNsYXRlR3JhcGgiKTtvKEpJZSwiYXNzaWduTm9kZUludGVyc2VjdHMiKTtvKGVPZSwiZml4dXBFZGdlTGFiZWxDb29yZHMiKTtvKHRPZSwicmV2ZXJzZVBvaW50c0ZvclJldmVyc2VkRWRnZXMiKTtvKHJPZSwicmVtb3ZlQm9yZGVyTm9kZXMiKTtvKG5PZSwicmVtb3ZlU2VsZkVkZ2VzIik7byhpT2UsImluc2VydFNlbGZFZGdlcyIpO28oYU9lLCJwb3NpdGlvblNlbGZFZGdlcyIpO28ocFIsInNlbGVjdE51bWJlckF0dHJzIik7byhtUiwiY2Fub25pY2FsaXplIil9KTt2YXIgZ1I9TigoKT0+eyJ1c2Ugc3RyaWN0IjtZTCgpO1NpZSgpO0pMKCk7ZlIoKX0pO2Z1bmN0aW9uIFVvKHQpe3ZhciBlPXtvcHRpb25zOntkaXJlY3RlZDp0LmlzRGlyZWN0ZWQoKSxtdWx0aWdyYXBoOnQuaXNNdWx0aWdyYXBoKCksY29tcG91bmQ6dC5pc0NvbXBvdW5kKCl9LG5vZGVzOnNPZSh0KSxlZGdlczpvT2UodCl9O3JldHVybiBwcih0LmdyYXBoKCkpfHwoZS52YWx1ZT1hbih0LmdyYXBoKCkpKSxlfWZ1bmN0aW9uIHNPZSh0KXtyZXR1cm4gSmUodC5ub2RlcygpLGZ1bmN0aW9uKGUpe3ZhciByPXQubm9kZShlKSxuPXQucGFyZW50KGUpLGk9e3Y6ZX07cmV0dXJuIHByKHIpfHwoaS52YWx1ZT1yKSxwcihuKXx8KGkucGFyZW50PW4pLGl9KX1mdW5jdGlvbiBvT2UodCl7cmV0dXJuIEplKHQuZWRnZXMoKSxmdW5jdGlvbihlKXt2YXIgcj10LmVkZ2UoZSksbj17djplLnYsdzplLnd9O3JldHVybiBwcihlLm5hbWUpfHwobi5uYW1lPWUubmFtZSkscHIocil8fChuLnZhbHVlPXIpLG59KX12YXIgeVI9TigoKT0+eyJ1c2Ugc3RyaWN0IjtxdCgpO0tUKCk7byhVbywid3JpdGUiKTtvKHNPZSwid3JpdGVOb2RlcyIpO28ob09lLCJ3cml0ZUVkZ2VzIil9KTt2YXIgd3IscWQsX2llLERpZSxuayxsT2UsTGllLFJpZSxjT2UsRm0sQWllLE5pZSxNaWUsSWllLE9pZSxQaWU9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt2dCgpO1ZvKCk7eVIoKTt3cj1uZXcgTWFwLHFkPW5ldyBNYXAsX2llPW5ldyBNYXAsRGllPW8oKCk9PntxZC5jbGVhcigpLF9pZS5jbGVhcigpLHdyLmNsZWFyKCl9LCJjbGVhciIpLG5rPW8oKHQsZSk9PntsZXQgcj1xZC5nZXQoZSl8fFtdO3JldHVybiBZLnRyYWNlKCJJbiBpc0Rlc2NlbmRhbnQiLGUsIiAiLHQsIiA9ICIsci5pbmNsdWRlcyh0KSksci5pbmNsdWRlcyh0KX0sImlzRGVzY2VuZGFudCIpLGxPZT1vKCh0LGUpPT57bGV0IHI9cWQuZ2V0KGUpfHxbXTtyZXR1cm4gWS5pbmZvKCJEZXNjZW5kYW50cyBvZiAiLGUsIiBpcyAiLHIpLFkuaW5mbygiRWRnZSBpcyAiLHQpLHQudj09PWV8fHQudz09PWU/ITE6cj9yLmluY2x1ZGVzKHQudil8fG5rKHQudixlKXx8bmsodC53LGUpfHxyLmluY2x1ZGVzKHQudyk6KFkuZGVidWcoIlRpbHQsICIsZSwiLG5vdCBpbiBkZXNjZW5kYW50cyIpLCExKX0sImVkZ2VJbkNsdXN0ZXIiKSxMaWU9bygodCxlLHIsbik9PntZLndhcm4oIkNvcHlpbmcgY2hpbGRyZW4gb2YgIix0LCJyb290IixuLCJkYXRhIixlLm5vZGUodCksbik7bGV0IGk9ZS5jaGlsZHJlbih0KXx8W107dCE9PW4mJmkucHVzaCh0KSxZLndhcm4oIkNvcHlpbmcgKG5vZGVzKSBjbHVzdGVySWQiLHQsIm5vZGVzIixpKSxpLmZvckVhY2goYT0+e2lmKGUuY2hpbGRyZW4oYSkubGVuZ3RoPjApTGllKGEsZSxyLG4pO2Vsc2V7bGV0IHM9ZS5ub2RlKGEpO1kuaW5mbygiY3AgIixhLCIgdG8gIixuLCIgd2l0aCBwYXJlbnQgIix0KSxyLnNldE5vZGUoYSxzKSxuIT09ZS5wYXJlbnQoYSkmJihZLndhcm4oIlNldHRpbmcgcGFyZW50IixhLGUucGFyZW50KGEpKSxyLnNldFBhcmVudChhLGUucGFyZW50KGEpKSksdCE9PW4mJmEhPT10PyhZLmRlYnVnKCJTZXR0aW5nIHBhcmVudCIsYSx0KSxyLnNldFBhcmVudChhLHQpKTooWS5pbmZvKCJJbiBjb3B5ICIsdCwicm9vdCIsbiwiZGF0YSIsZS5ub2RlKHQpLG4pLFkuZGVidWcoIk5vdCBTZXR0aW5nIHBhcmVudCBmb3Igbm9kZT0iLGEsImNsdXN0ZXIhPT1yb290SWQiLHQhPT1uLCJub2RlIT09Y2x1c3RlcklkIixhIT09dCkpO2xldCBsPWUuZWRnZXMoYSk7WS5kZWJ1ZygiQ29weWluZyBFZGdlcyIsbCksbC5mb3JFYWNoKHU9PntZLmluZm8oIkVkZ2UiLHUpO2xldCBoPWUuZWRnZSh1LnYsdS53LHUubmFtZSk7WS5pbmZvKCJFZGdlIGRhdGEiLGgsbik7dHJ5e2xPZSh1LG4pPyhZLmluZm8oIkNvcHlpbmcgYXMgIix1LnYsdS53LGgsdS5uYW1lKSxyLnNldEVkZ2UodS52LHUudyxoLHUubmFtZSksWS5pbmZvKCJuZXdHcmFwaCBlZGdlcyAiLHIuZWRnZXMoKSxyLmVkZ2Uoci5lZGdlcygpWzBdKSkpOlkuaW5mbygiU2tpcHBpbmcgY29weSBvZiBlZGdlICIsdS52LCItLT4iLHUudywiIHJvb3RJZDogIixuLCIgY2x1c3RlcklkOiIsdCl9Y2F0Y2goZil7WS5lcnJvcihmKX19KX1ZLmRlYnVnKCJSZW1vdmluZyBub2RlIixhKSxlLnJlbW92ZU5vZGUoYSl9KX0sImNvcHkiKSxSaWU9bygodCxlKT0+e2xldCByPWUuY2hpbGRyZW4odCksbj1bLi4ucl07Zm9yKGxldCBpIG9mIHIpX2llLnNldChpLHQpLG49Wy4uLm4sLi4uUmllKGksZSldO3JldHVybiBufSwiZXh0cmFjdERlc2NlbmRhbnRzIiksY09lPW8oKHQsZSxyKT0+e2xldCBuPXQuZWRnZXMoKS5maWx0ZXIodT0+dS52PT09ZXx8dS53PT09ZSksaT10LmVkZ2VzKCkuZmlsdGVyKHU9PnUudj09PXJ8fHUudz09PXIpLGE9bi5tYXAodT0+KHt2OnUudj09PWU/cjp1LnYsdzp1Lnc9PT1lP2U6dS53fSkpLHM9aS5tYXAodT0+KHt2OnUudix3OnUud30pKTtyZXR1cm4gYS5maWx0ZXIodT0+cy5zb21lKGg9PnUudj09PWgudiYmdS53PT09aC53KSl9LCJmaW5kQ29tbW9uRWRnZXMiKSxGbT1vKCh0LGUscik9PntsZXQgbj1lLmNoaWxkcmVuKHQpO2lmKFkudHJhY2UoIlNlYXJjaGluZyBjaGlsZHJlbiBvZiBpZCAiLHQsbiksbi5sZW5ndGg8MSlyZXR1cm4gdDtsZXQgaTtmb3IobGV0IGEgb2Ygbil7bGV0IHM9Rm0oYSxlLHIpLGw9Y09lKGUscixzKTtpZihzKWlmKGwubGVuZ3RoPjApaT1zO2Vsc2UgcmV0dXJuIHN9cmV0dXJuIGl9LCJmaW5kTm9uQ2x1c3RlckNoaWxkIiksQWllPW8odD0+IXdyLmhhcyh0KXx8IXdyLmdldCh0KS5leHRlcm5hbENvbm5lY3Rpb25zP3Q6d3IuaGFzKHQpP3dyLmdldCh0KS5pZDp0LCJnZXRBbmNob3JJZCIpLE5pZT1vKCh0LGUpPT57aWYoIXR8fGU+MTApe1kuZGVidWcoIk9wdGluZyBvdXQsIG5vIGdyYXBoICIpO3JldHVybn1lbHNlIFkuZGVidWcoIk9wdGluZyBpbiwgZ3JhcGggIik7dC5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24ocil7dC5jaGlsZHJlbihyKS5sZW5ndGg+MCYmKFkud2FybigiQ2x1c3RlciBpZGVudGlmaWVkIixyLCIgUmVwbGFjZW1lbnQgaWQgaW4gZWRnZXM6ICIsRm0ocix0LHIpKSxxZC5zZXQocixSaWUocix0KSksd3Iuc2V0KHIse2lkOkZtKHIsdCxyKSxjbHVzdGVyRGF0YTp0Lm5vZGUocil9KSl9KSx0Lm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihyKXtsZXQgbj10LmNoaWxkcmVuKHIpLGk9dC5lZGdlcygpO24ubGVuZ3RoPjA/KFkuZGVidWcoIkNsdXN0ZXIgaWRlbnRpZmllZCIscixxZCksaS5mb3JFYWNoKGE9PntsZXQgcz1uayhhLnYsciksbD1uayhhLncscik7c15sJiYoWS53YXJuKCJFZGdlOiAiLGEsIiBsZWF2ZXMgY2x1c3RlciAiLHIpLFkud2FybigiRGVzY2VuZGFudHMgb2YgWFhYICIsciwiOiAiLHFkLmdldChyKSksd3IuZ2V0KHIpLmV4dGVybmFsQ29ubmVjdGlvbnM9ITApfSkpOlkuZGVidWcoIk5vdCBhIGNsdXN0ZXIgIixyLHFkKX0pO2ZvcihsZXQgciBvZiB3ci5rZXlzKCkpe2xldCBuPXdyLmdldChyKS5pZCxpPXQucGFyZW50KG4pO2khPT1yJiZ3ci5oYXMoaSkmJiF3ci5nZXQoaSkuZXh0ZXJuYWxDb25uZWN0aW9ucyYmKHdyLmdldChyKS5pZD1pKX10LmVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihyKXtsZXQgbj10LmVkZ2Uocik7WS53YXJuKCJFZGdlICIrci52KyIgLT4gIityLncrIjogIitKU09OLnN0cmluZ2lmeShyKSksWS53YXJuKCJFZGdlICIrci52KyIgLT4gIityLncrIjogIitKU09OLnN0cmluZ2lmeSh0LmVkZ2UocikpKTtsZXQgaT1yLnYsYT1yLnc7aWYoWS53YXJuKCJGaXggWFhYIix3ciwiaWRzOiIsci52LHIudywiVHJhbnNsYXRpbmc6ICIsd3IuZ2V0KHIudiksIiAtLS0gIix3ci5nZXQoci53KSksd3IuZ2V0KHIudil8fHdyLmdldChyLncpKXtpZihZLndhcm4oIkZpeGluZyBhbmQgdHJ5aW5nIC0gcmVtb3ZpbmcgWFhYIixyLnYsci53LHIubmFtZSksaT1BaWUoci52KSxhPUFpZShyLncpLHQucmVtb3ZlRWRnZShyLnYsci53LHIubmFtZSksaSE9PXIudil7bGV0IHM9dC5wYXJlbnQoaSk7d3IuZ2V0KHMpLmV4dGVybmFsQ29ubmVjdGlvbnM9ITAsbi5mcm9tQ2x1c3Rlcj1yLnZ9aWYoYSE9PXIudyl7bGV0IHM9dC5wYXJlbnQoYSk7d3IuZ2V0KHMpLmV4dGVybmFsQ29ubmVjdGlvbnM9ITAsbi50b0NsdXN0ZXI9ci53fVkud2FybigiRml4IFJlcGxhY2luZyB3aXRoIFhYWCIsaSxhLHIubmFtZSksdC5zZXRFZGdlKGksYSxuLHIubmFtZSl9fSksWS53YXJuKCJBZGp1c3RlZCBHcmFwaCIsVW8odCkpLE1pZSh0LDApLFkudHJhY2Uod3IpfSwiYWRqdXN0Q2x1c3RlcnNBbmRFZGdlcyIpLE1pZT1vKCh0LGUpPT57aWYoWS53YXJuKCJleHRyYWN0b3IgLSAiLGUsVW8odCksdC5jaGlsZHJlbigiRCIpKSxlPjEwKXtZLmVycm9yKCJCYWlsaW5nIG91dCIpO3JldHVybn1sZXQgcj10Lm5vZGVzKCksbj0hMTtmb3IobGV0IGkgb2Ygcil7bGV0IGE9dC5jaGlsZHJlbihpKTtuPW58fGEubGVuZ3RoPjB9aWYoIW4pe1kuZGVidWcoIkRvbmUsIG5vIG5vZGUgaGFzIGNoaWxkcmVuIix0Lm5vZGVzKCkpO3JldHVybn1ZLmRlYnVnKCJOb2RlcyA9ICIscixlKTtmb3IobGV0IGkgb2YgcilpZihZLmRlYnVnKCJFeHRyYWN0aW5nIG5vZGUiLGksd3Isd3IuaGFzKGkpJiYhd3IuZ2V0KGkpLmV4dGVybmFsQ29ubmVjdGlvbnMsIXQucGFyZW50KGkpLHQubm9kZShpKSx0LmNoaWxkcmVuKCJEIiksIiBEZXB0aCAiLGUpLCF3ci5oYXMoaSkpWS5kZWJ1ZygiTm90IGEgY2x1c3RlciIsaSxlKTtlbHNlIGlmKCF3ci5nZXQoaSkuZXh0ZXJuYWxDb25uZWN0aW9ucyYmdC5jaGlsZHJlbihpKSYmdC5jaGlsZHJlbihpKS5sZW5ndGg+MCl7WS53YXJuKCJDbHVzdGVyIHdpdGhvdXQgZXh0ZXJuYWwgY29ubmVjdGlvbnMsIHdpdGhvdXQgYSBwYXJlbnQgYW5kIHdpdGggY2hpbGRyZW4iLGksZSk7bGV0IHM9dC5ncmFwaCgpLnJhbmtkaXI9PT0iVEIiPyJMUiI6IlRCIjt3ci5nZXQoaSk/LmNsdXN0ZXJEYXRhPy5kaXImJihzPXdyLmdldChpKS5jbHVzdGVyRGF0YS5kaXIsWS53YXJuKCJGaXhpbmcgZGlyIix3ci5nZXQoaSkuY2x1c3RlckRhdGEuZGlyLHMpKTtsZXQgbD1uZXcgc24oe211bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITB9KS5zZXRHcmFwaCh7cmFua2RpcjpzLG5vZGVzZXA6NTAscmFua3NlcDo1MCxtYXJnaW54OjgsbWFyZ2lueTo4fSkuc2V0RGVmYXVsdEVkZ2VMYWJlbChmdW5jdGlvbigpe3JldHVybnt9fSk7WS53YXJuKCJPbGQgZ3JhcGggYmVmb3JlIGNvcHkiLFVvKHQpKSxMaWUoaSx0LGwsaSksdC5zZXROb2RlKGkse2NsdXN0ZXJOb2RlOiEwLGlkOmksY2x1c3RlckRhdGE6d3IuZ2V0KGkpLmNsdXN0ZXJEYXRhLGxhYmVsOndyLmdldChpKS5sYWJlbCxncmFwaDpsfSksWS53YXJuKCJOZXcgZ3JhcGggYWZ0ZXIgY29weSBub2RlOiAoIixpLCIpIixVbyhsKSksWS5kZWJ1ZygiT2xkIGdyYXBoIGFmdGVyIGNvcHkiLFVvKHQpKX1lbHNlIFkud2FybigiQ2x1c3RlciAqKiAiLGksIiAqKm5vdCBtZWV0aW5nIHRoZSBjcml0ZXJpYSAhZXh0ZXJuYWxDb25uZWN0aW9uczoiLCF3ci5nZXQoaSkuZXh0ZXJuYWxDb25uZWN0aW9ucywiIG5vIHBhcmVudDogIiwhdC5wYXJlbnQoaSksIiBjaGlsZHJlbiAiLHQuY2hpbGRyZW4oaSkmJnQuY2hpbGRyZW4oaSkubGVuZ3RoPjAsdC5jaGlsZHJlbigiRCIpLGUpLFkuZGVidWcod3IpO3I9dC5ub2RlcygpLFkud2FybigiTmV3IGxpc3Qgb2Ygbm9kZXMiLHIpO2ZvcihsZXQgaSBvZiByKXtsZXQgYT10Lm5vZGUoaSk7WS53YXJuKCIgTm93IG5leHQgbGV2ZWwiLGksYSksYT8uY2x1c3Rlck5vZGUmJk1pZShhLmdyYXBoLGUrMSl9fSwiZXh0cmFjdG9yIiksSWllPW8oKHQsZSk9PntpZihlLmxlbmd0aD09PTApcmV0dXJuW107bGV0IHI9T2JqZWN0LmFzc2lnbihbXSxlKTtyZXR1cm4gZS5mb3JFYWNoKG49PntsZXQgaT10LmNoaWxkcmVuKG4pLGE9SWllKHQsaSk7cj1bLi4uciwuLi5hXX0pLHJ9LCJzb3J0ZXIiKSxPaWU9byh0PT5JaWUodCx0LmNoaWxkcmVuKCkpLCJzb3J0Tm9kZXNCeUhpZXJhcmNoeSIpfSk7dmFyIEZpZT17fTtocihGaWUse3JlbmRlcjooKT0+dU9lfSk7dmFyIEJpZSx1T2UsJGllPU4oKCk9PnsidXNlIHN0cmljdCI7Z1IoKTt5UigpO1ZvKCk7dEwoKTtGdCgpO1BpZSgpO2VUKCk7SHcoKTtlTCgpO3Z0KCk7dzIoKTt6dCgpO0JpZT1vKGFzeW5jKHQsZSxyLG4saSxhKT0+e1kud2FybigiR3JhcGggaW4gcmVjdXJzaXZlIHJlbmRlcjpYQVgiLFVvKGUpLGkpO2xldCBzPWUuZ3JhcGgoKS5yYW5rZGlyO1kudHJhY2UoIkRpciBpbiByZWN1cnNpdmUgcmVuZGVyIC0gZGlyOiIscyk7bGV0IGw9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsInJvb3QiKTtlLm5vZGVzKCk/WS5pbmZvKCJSZWN1cnNpdmUgcmVuZGVyIFhYWCIsZS5ub2RlcygpKTpZLmluZm8oIk5vIG5vZGVzIGZvdW5kIGZvciIsZSksZS5lZGdlcygpLmxlbmd0aD4wJiZZLmluZm8oIlJlY3Vyc2l2ZSBlZGdlcyIsZS5lZGdlKGUuZWRnZXMoKVswXSkpO2xldCB1PWwuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJjbHVzdGVycyIpLGg9bC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VQYXRocyIpLGY9bC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VMYWJlbHMiKSxkPWwuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJub2RlcyIpO2F3YWl0IFByb21pc2UuYWxsKGUubm9kZXMoKS5tYXAoYXN5bmMgZnVuY3Rpb24oeSl7bGV0IHY9ZS5ub2RlKHkpO2lmKGkhPT12b2lkIDApe2xldCB4PUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaS5jbHVzdGVyRGF0YSkpO1kudHJhY2UoYFNldHRpbmcgZGF0YSBmb3IgcGFyZW50IGNsdXN0ZXIgWFhYCiBOb2RlLmlkID0gYCx5LGAKIGRhdGE9YCx4LmhlaWdodCxgClBhcmVudCBjbHVzdGVyYCxpLmhlaWdodCksZS5zZXROb2RlKGkuaWQseCksZS5wYXJlbnQoeSl8fChZLnRyYWNlKCJTZXR0aW5nIHBhcmVudCIseSxpLmlkKSxlLnNldFBhcmVudCh5LGkuaWQseCkpfWlmKFkuaW5mbygiKEluc2VydCkgTm9kZSBYWFgiK3krIjogIitKU09OLnN0cmluZ2lmeShlLm5vZGUoeSkpKSx2Py5jbHVzdGVyTm9kZSl7WS5pbmZvKCJDbHVzdGVyIGlkZW50aWZpZWQgWEJYIix5LHYud2lkdGgsZS5ub2RlKHkpKTtsZXR7cmFua3NlcDp4LG5vZGVzZXA6Yn09ZS5ncmFwaCgpO3YuZ3JhcGguc2V0R3JhcGgoey4uLnYuZ3JhcGguZ3JhcGgoKSxyYW5rc2VwOngrMjUsbm9kZXNlcDpifSk7bGV0IHc9YXdhaXQgQmllKGQsdi5ncmFwaCxyLG4sZS5ub2RlKHkpLGEpLEM9dy5lbGVtO2plKHYsQyksdi5kaWZmPXcuZGlmZnx8MCxZLmluZm8oIk5ldyBjb21wb3VuZCBub2RlIGFmdGVyIHJlY3Vyc2l2ZSByZW5kZXIgWEFYIix5LCJ3aWR0aCIsdi53aWR0aCwiaGVpZ2h0Iix2LmhlaWdodCksckooQyx2KX1lbHNlIGUuY2hpbGRyZW4oeSkubGVuZ3RoPjA/KFkudHJhY2UoIkNsdXN0ZXIgLSB0aGUgbm9uIHJlY3Vyc2l2ZSBwYXRoIFhCWCIseSx2LmlkLHYsdi53aWR0aCwiR3JhcGg6IixlKSxZLnRyYWNlKEZtKHYuaWQsZSkpLHdyLnNldCh2LmlkLHtpZDpGbSh2LmlkLGUpLG5vZGU6dn0pKTooWS50cmFjZSgiTm9kZSAtIHRoZSBub24gcmVjdXJzaXZlIHBhdGggWEFYIix5LGQsZS5ub2RlKHkpLHMpLGF3YWl0IHZtKGQsZS5ub2RlKHkpLHtjb25maWc6YSxkaXI6c30pKX0pKSxhd2FpdCBvKGFzeW5jKCk9PntsZXQgeT1lLmVkZ2VzKCkubWFwKGFzeW5jIGZ1bmN0aW9uKHYpe2xldCB4PWUuZWRnZSh2LnYsdi53LHYubmFtZSk7WS5pbmZvKCJFZGdlICIrdi52KyIgLT4gIit2LncrIjogIitKU09OLnN0cmluZ2lmeSh2KSksWS5pbmZvKCJFZGdlICIrdi52KyIgLT4gIit2LncrIjogIix2LCIgIixKU09OLnN0cmluZ2lmeShlLmVkZ2UodikpKSxZLmluZm8oIkZpeCIsd3IsImlkczoiLHYudix2LncsIlRyYW5zbGF0aW5nOiAiLHdyLmdldCh2LnYpLHdyLmdldCh2LncpKSxhd2FpdCBqdyhmLHgpfSk7YXdhaXQgUHJvbWlzZS5hbGwoeSl9LCJwcm9jZXNzRWRnZXMiKSgpLFkuaW5mbygiR3JhcGggYmVmb3JlIGxheW91dDoiLEpTT04uc3RyaW5naWZ5KFVvKGUpKSksWS5pbmZvKCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgWFhYIiksWS5pbmZvKCIjIyMgICAgICAgICAgICAgICAgTGF5b3V0ICAgICAgICAgICAgICAgICAjIyMgWFhYIiksWS5pbmZvKCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgWFhYIiksUjIoZSksWS5pbmZvKCJHcmFwaCBhZnRlciBsYXlvdXQ6IixKU09OLnN0cmluZ2lmeShVbyhlKSkpO2xldCBtPTAse3N1YkdyYXBoVGl0bGVUb3RhbE1hcmdpbjpnfT1SdShhKTtyZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwoT2llKGUpLm1hcChhc3luYyBmdW5jdGlvbih5KXtsZXQgdj1lLm5vZGUoeSk7aWYoWS5pbmZvKCJQb3NpdGlvbiBYQlggPT4gIit5KyI6ICgiK3YueCwiLCIrdi55LCIpIHdpZHRoOiAiLHYud2lkdGgsIiBoZWlnaHQ6ICIsdi5oZWlnaHQpLHY/LmNsdXN0ZXJOb2RlKXYueSs9ZyxZLmluZm8oIkEgdGFpbnRlZCBjbHVzdGVyIG5vZGUgWEJYMSIseSx2LmlkLHYud2lkdGgsdi5oZWlnaHQsdi54LHYueSxlLnBhcmVudCh5KSksd3IuZ2V0KHYuaWQpLm5vZGU9dixrMih2KTtlbHNlIGlmKGUuY2hpbGRyZW4oeSkubGVuZ3RoPjApe1kuaW5mbygiQSBwdXJlIGNsdXN0ZXIgbm9kZSBYQlgxIix5LHYuaWQsdi54LHYueSx2LndpZHRoLHYuaGVpZ2h0LGUucGFyZW50KHkpKSx2LmhlaWdodCs9ZyxlLm5vZGUodi5wYXJlbnRJZCk7bGV0IHg9dj8ucGFkZGluZy8yfHwwLGI9dj8ubGFiZWxCQm94Py5oZWlnaHR8fDAsdz1iLXh8fDA7WS5kZWJ1ZygiT2Zmc2V0WSIsdywibGFiZWxIZWlnaHQiLGIsImhhbGZQYWRkaW5nIix4KSxhd2FpdCB5bSh1LHYpLHdyLmdldCh2LmlkKS5ub2RlPXZ9ZWxzZXtsZXQgeD1lLm5vZGUodi5wYXJlbnRJZCk7di55Kz1nLzIsWS5pbmZvKCJBIHJlZ3VsYXIgbm9kZSBYQlgxIC0gdXNpbmcgdGhlIHBhZGRpbmciLHYuaWQsInBhcmVudCIsdi5wYXJlbnRJZCx2LndpZHRoLHYuaGVpZ2h0LHYueCx2LnksIm9mZnNldFkiLHYub2Zmc2V0WSwicGFyZW50Iix4LHg/Lm9mZnNldFksdiksazIodil9fSkpLGUuZWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHkpe2xldCB2PWUuZWRnZSh5KTtZLmluZm8oIkVkZ2UgIit5LnYrIiAtPiAiK3kudysiOiAiK0pTT04uc3RyaW5naWZ5KHYpLHYpLHYucG9pbnRzLmZvckVhY2goQz0+Qy55Kz1nLzIpO2xldCB4PWUubm9kZSh5LnYpO3ZhciBiPWUubm9kZSh5LncpO2xldCB3PVF3KGgsdix3cixyLHgsYixuKTtLdyh2LHcpfSksZS5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24oeSl7bGV0IHY9ZS5ub2RlKHkpO1kuaW5mbyh5LHYudHlwZSx2LmRpZmYpLHYuaXNHcm91cCYmKG09di5kaWZmKX0pLFkud2FybigiUmV0dXJuaW5nIGZyb20gcmVjdXJzaXZlIHJlbmRlciBYQVgiLGwsbSkse2VsZW06bCxkaWZmOm19fSwicmVjdXJzaXZlUmVuZGVyIiksdU9lPW8oYXN5bmModCxlKT0+e2xldCByPW5ldyBzbih7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyYW5rZGlyOnQuZGlyZWN0aW9uLG5vZGVzZXA6dC5jb25maWc/Lm5vZGVTcGFjaW5nfHx0LmNvbmZpZz8uZmxvd2NoYXJ0Py5ub2RlU3BhY2luZ3x8dC5ub2RlU3BhY2luZyxyYW5rc2VwOnQuY29uZmlnPy5yYW5rU3BhY2luZ3x8dC5jb25maWc/LmZsb3djaGFydD8ucmFua1NwYWNpbmd8fHQucmFua1NwYWNpbmcsbWFyZ2lueDo4LG1hcmdpbnk6OH0pLnNldERlZmF1bHRFZGdlTGFiZWwoZnVuY3Rpb24oKXtyZXR1cm57fX0pLG49ZS5zZWxlY3QoImciKTtadyhuLHQubWFya2Vycyx0LnR5cGUsdC5kaWFncmFtSWQpLG5KKCksdEooKSxqWigpLERpZSgpLHQubm9kZXMuZm9yRWFjaChhPT57ci5zZXROb2RlKGEuaWQsey4uLmF9KSxhLnBhcmVudElkJiZyLnNldFBhcmVudChhLmlkLGEucGFyZW50SWQpfSksWS5kZWJ1ZygiRWRnZXM6Iix0LmVkZ2VzKSx0LmVkZ2VzLmZvckVhY2goYT0+e2lmKGEuc3RhcnQ9PT1hLmVuZCl7bGV0IHM9YS5zdGFydCxsPXMrIi0tLSIrcysiLS0tMSIsdT1zKyItLS0iK3MrIi0tLTIiLGg9ci5ub2RlKHMpO3Iuc2V0Tm9kZShsLHtkb21JZDpsLGlkOmwscGFyZW50SWQ6aC5wYXJlbnRJZCxsYWJlbFN0eWxlOiIiLGxhYmVsOiIiLHBhZGRpbmc6MCxzaGFwZToibGFiZWxSZWN0IixzdHlsZToiIix3aWR0aDoxMCxoZWlnaHQ6MTB9KSxyLnNldFBhcmVudChsLGgucGFyZW50SWQpLHIuc2V0Tm9kZSh1LHtkb21JZDp1LGlkOnUscGFyZW50SWQ6aC5wYXJlbnRJZCxsYWJlbFN0eWxlOiIiLHBhZGRpbmc6MCxzaGFwZToibGFiZWxSZWN0IixsYWJlbDoiIixzdHlsZToiIix3aWR0aDoxMCxoZWlnaHQ6MTB9KSxyLnNldFBhcmVudCh1LGgucGFyZW50SWQpO2xldCBmPXN0cnVjdHVyZWRDbG9uZShhKSxkPXN0cnVjdHVyZWRDbG9uZShhKSxwPXN0cnVjdHVyZWRDbG9uZShhKTtmLmxhYmVsPSIiLGYuYXJyb3dUeXBlRW5kPSJub25lIixmLmlkPXMrIi1jeWNsaWMtc3BlY2lhbC0xIixkLmFycm93VHlwZVN0YXJ0PSJub25lIixkLmFycm93VHlwZUVuZD0ibm9uZSIsZC5pZD1zKyItY3ljbGljLXNwZWNpYWwtbWlkIixwLmxhYmVsPSIiLGguaXNHcm91cCYmKGYuZnJvbUNsdXN0ZXI9cyxwLnRvQ2x1c3Rlcj1zKSxwLmlkPXMrIi1jeWNsaWMtc3BlY2lhbC0yIixwLmFycm93VHlwZVN0YXJ0PSJub25lIixyLnNldEVkZ2UocyxsLGYscysiLWN5Y2xpYy1zcGVjaWFsLTAiKSxyLnNldEVkZ2UobCx1LGQscysiLWN5Y2xpYy1zcGVjaWFsLTEiKSxyLnNldEVkZ2UodSxzLHAscysiLWN5YzxsaWMtc3BlY2lhbC0yIil9ZWxzZSByLnNldEVkZ2UoYS5zdGFydCxhLmVuZCx7Li4uYX0sYS5pZCl9KSxZLndhcm4oIkdyYXBoIGF0IGZpcnN0OiIsSlNPTi5zdHJpbmdpZnkoVW8ocikpKSxOaWUociksWS53YXJuKCJHcmFwaCBhZnRlciBYQVg6IixKU09OLnN0cmluZ2lmeShVbyhyKSkpO2xldCBpPW1lKCk7YXdhaXQgQmllKG4scix0LnR5cGUsdC5kaWFncmFtSWQsdm9pZCAwLGkpfSwicmVuZGVyIil9KTt2YXIgTjIsdlIsaE9lLENjLG5mLFlkPU4oKCk9PnsidXNlIHN0cmljdCI7YUooKTt2dCgpO04yPXt9LHZSPW8odD0+e2ZvcihsZXQgZSBvZiB0KU4yW2UubmFtZV09ZX0sInJlZ2lzdGVyTGF5b3V0TG9hZGVycyIpLGhPZT1vKCgpPT57dlIoW3tuYW1lOiJkYWdyZSIsbG9hZGVyOm8oYXN5bmMoKT0+YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KCRpZSgpLEZpZSkpLCJsb2FkZXIiKX1dKX0sInJlZ2lzdGVyRGVmYXVsdExheW91dExvYWRlcnMiKTtoT2UoKTtDYz1vKGFzeW5jKHQsZSk9PntpZighKHQubGF5b3V0QWxnb3JpdGhtIGluIE4yKSl0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gbGF5b3V0IGFsZ29yaXRobTogJHt0LmxheW91dEFsZ29yaXRobX1gKTtsZXQgcj1OMlt0LmxheW91dEFsZ29yaXRobV07cmV0dXJuKGF3YWl0IHIubG9hZGVyKCkpLnJlbmRlcih0LGUsaUose2FsZ29yaXRobTpyLmFsZ29yaXRobX0pfSwicmVuZGVyIiksbmY9bygodD0iIix7ZmFsbGJhY2s6ZT0iZGFncmUifT17fSk9PntpZih0IGluIE4yKXJldHVybiB0O2lmKGUgaW4gTjIpcmV0dXJuIFkud2FybihgTGF5b3V0IGFsZ29yaXRobSAke3R9IGlzIG5vdCByZWdpc3RlcmVkLiBVc2luZyAke2V9IGFzIGZhbGxiYWNrLmApLGU7dGhyb3cgbmV3IEVycm9yKGBCb3RoIGxheW91dCBhbGdvcml0aG1zICR7dH0gYW5kICR7ZX0gYXJlIG5vdCByZWdpc3RlcmVkLmApfSwiZ2V0UmVnaXN0ZXJlZExheW91dEFsZ29yaXRobSIpfSk7dmFyIEFjLGZPZSxkT2UsJG09TigoKT0+eyJ1c2Ugc3RyaWN0IjtFaSgpO3Z0KCk7QWM9bygodCxlLHIsbik9Pnt0LmF0dHIoImNsYXNzIixyKTtsZXR7d2lkdGg6aSxoZWlnaHQ6YSx4OnMseTpsfT1mT2UodCxlKTt2bih0LGEsaSxuKTtsZXQgdT1kT2UocyxsLGksYSxlKTt0LmF0dHIoInZpZXdCb3giLHUpLFkuZGVidWcoYHZpZXdCb3ggY29uZmlndXJlZDogJHt1fSB3aXRoIHBhZGRpbmc6ICR7ZX1gKX0sInNldHVwVmlld1BvcnRGb3JTVkciKSxmT2U9bygodCxlKT0+e2xldCByPXQubm9kZSgpPy5nZXRCQm94KCl8fHt3aWR0aDowLGhlaWdodDowLHg6MCx5OjB9O3JldHVybnt3aWR0aDpyLndpZHRoK2UqMixoZWlnaHQ6ci5oZWlnaHQrZSoyLHg6ci54LHk6ci55fX0sImNhbGN1bGF0ZURpbWVuc2lvbnNXaXRoUGFkZGluZyIpLGRPZT1vKCh0LGUscixuLGkpPT5gJHt0LWl9ICR7ZS1pfSAke3J9ICR7bn1gLCJjcmVhdGVWaWV3Qm94Iil9KTt2YXIgcE9lLG1PZSx6aWUsR2llPU4oKCk9PnsidXNlIHN0cmljdCI7ZHIoKTt6dCgpO3Z0KCk7Z20oKTtZZCgpOyRtKCk7aXIoKTtwT2U9byhmdW5jdGlvbih0LGUpe3JldHVybiBlLmRiLmdldENsYXNzZXMoKX0sImdldENsYXNzZXMiKSxtT2U9byhhc3luYyBmdW5jdGlvbih0LGUscixuKXtZLmluZm8oIlJFRjA6IiksWS5pbmZvKCJEcmF3aW5nIHN0YXRlIGRpYWdyYW0gKHYyKSIsZSk7bGV0e3NlY3VyaXR5TGV2ZWw6aSxmbG93Y2hhcnQ6YSxsYXlvdXQ6c309bWUoKSxsO2k9PT0ic2FuZGJveCImJihsPUdlKCIjaSIrZSkpO2xldCB1PWk9PT0ic2FuZGJveCI/bC5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudDpkb2N1bWVudDtZLmRlYnVnKCJCZWZvcmUgZ2V0RGF0YTogIik7bGV0IGg9bi5kYi5nZXREYXRhKCk7WS5kZWJ1ZygiRGF0YTogIixoKTtsZXQgZj15YyhlLGkpLGQ9bi5kYi5nZXREaXJlY3Rpb24oKTtoLnR5cGU9bi50eXBlLGgubGF5b3V0QWxnb3JpdGhtPW5mKHMpLGgubGF5b3V0QWxnb3JpdGhtPT09ImRhZ3JlIiYmcz09PSJlbGsiJiZZLndhcm4oImZsb3djaGFydC1lbGsgd2FzIG1vdmVkIHRvIGFuIGV4dGVybmFsIHBhY2thZ2UgaW4gTWVybWFpZCB2MTEuIFBsZWFzZSByZWZlciBbcmVsZWFzZSBub3Rlc10oaHR0cHM6Ly9naXRodWIuY29tL21lcm1haWQtanMvbWVybWFpZC9yZWxlYXNlcy90YWcvdjExLjAuMCkgZm9yIG1vcmUgZGV0YWlscy4gVGhpcyBkaWFncmFtIHdpbGwgYmUgcmVuZGVyZWQgdXNpbmcgYGRhZ3JlYCBsYXlvdXQgYXMgYSBmYWxsYmFjay4iKSxoLmRpcmVjdGlvbj1kLGgubm9kZVNwYWNpbmc9YT8ubm9kZVNwYWNpbmd8fDUwLGgucmFua1NwYWNpbmc9YT8ucmFua1NwYWNpbmd8fDUwLGgubWFya2Vycz1bInBvaW50IiwiY2lyY2xlIiwiY3Jvc3MiXSxoLmRpYWdyYW1JZD1lLFkuZGVidWcoIlJFRjE6IixoKSxhd2FpdCBDYyhoLGYpO2xldCBwPWguY29uZmlnLmZsb3djaGFydD8uZGlhZ3JhbVBhZGRpbmc/Pzg7R3QuaW5zZXJ0VGl0bGUoZiwiZmxvd2NoYXJ0VGl0bGVUZXh0IixhPy50aXRsZVRvcE1hcmdpbnx8MCxuLmRiLmdldERpYWdyYW1UaXRsZSgpKSxBYyhmLHAsImZsb3djaGFydCIsYT8udXNlTWF4V2lkdGh8fCExKTtmb3IobGV0IG0gb2YgaC5ub2Rlcyl7bGV0IGc9R2UoYCMke2V9IFtpZD0iJHttLmlkfSJdYCk7aWYoIWd8fCFtLmxpbmspY29udGludWU7bGV0IHk9dS5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYSIpO3kuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiY2xhc3MiLG0uY3NzQ2xhc3NlcykseS5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJyZWwiLCJub29wZW5lciIpLGk9PT0ic2FuZGJveCI/eS5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0YXJnZXQiLCJfdG9wIik6bS5saW5rVGFyZ2V0JiZ5LnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRhcmdldCIsbS5saW5rVGFyZ2V0KTtsZXQgdj1nLmluc2VydChmdW5jdGlvbigpe3JldHVybiB5fSwiOmZpcnN0LWNoaWxkIikseD1nLnNlbGVjdCgiLmxhYmVsLWNvbnRhaW5lciIpO3gmJnYuYXBwZW5kKGZ1bmN0aW9uKCl7cmV0dXJuIHgubm9kZSgpfSk7bGV0IGI9Zy5zZWxlY3QoIi5sYWJlbCIpO2ImJnYuYXBwZW5kKGZ1bmN0aW9uKCl7cmV0dXJuIGIubm9kZSgpfSl9fSwiZHJhdyIpLHppZT17Z2V0Q2xhc3NlczpwT2UsZHJhdzptT2V9fSk7dmFyIHhSLGJSLFZpZT1OKCgpPT57InVzZSBzdHJpY3QiO3hSPWZ1bmN0aW9uKCl7dmFyIHQ9byhmdW5jdGlvbihIcixldCxtdCxLdCl7Zm9yKG10PW10fHx7fSxLdD1Ici5sZW5ndGg7S3QtLTttdFtIcltLdF1dPWV0KTtyZXR1cm4gbXR9LCJvIiksZT1bMSw0XSxyPVsxLDNdLG49WzEsNV0saT1bMSw4LDksMTAsMTEsMjcsMzQsMzYsMzgsNDQsNjAsODQsODUsODYsODcsODgsODksMTAyLDEwNSwxMDYsMTA5LDExMSwxMTQsMTE1LDExNiwxMjEsMTIyLDEyMywxMjRdLGE9WzIsMl0scz1bMSwxM10sbD1bMSwxNF0sdT1bMSwxNV0saD1bMSwxNl0sZj1bMSwyM10sZD1bMSwyNV0scD1bMSwyNl0sbT1bMSwyN10sZz1bMSw0OV0seT1bMSw0OF0sdj1bMSwyOV0seD1bMSwzMF0sYj1bMSwzMV0sdz1bMSwzMl0sQz1bMSwzM10sVD1bMSw0NF0sRT1bMSw0Nl0sQT1bMSw0Ml0sUz1bMSw0N10sXz1bMSw0M10sST1bMSw1MF0sRD1bMSw0NV0saz1bMSw1MV0sTD1bMSw1Ml0sUj1bMSwzNF0sTz1bMSwzNV0sTT1bMSwzNl0sQj1bMSwzN10sRj1bMSw1N10sUD1bMSw4LDksMTAsMTEsMjcsMzIsMzQsMzYsMzgsNDQsNjAsODQsODUsODYsODcsODgsODksMTAyLDEwNSwxMDYsMTA5LDExMSwxMTQsMTE1LDExNiwxMjEsMTIyLDEyMywxMjRdLHo9WzEsNjFdLCQ9WzEsNjBdLEg9WzEsNjJdLFE9WzgsOSwxMSw3NSw3Nyw3OF0saj1bMSw3OF0saWU9WzEsOTFdLG5lPVsxLDk2XSxsZT1bMSw5NV0saGU9WzEsOTJdLEs9WzEsODhdLFg9WzEsOTRdLHRlPVsxLDkwXSxKPVsxLDk3XSxzZT1bMSw5M10sdWU9WzEsOThdLFo9WzEsODldLFNlPVs4LDksMTAsMTEsNDAsNzUsNzcsNzhdLGNlPVs4LDksMTAsMTEsNDAsNDYsNzUsNzcsNzhdLGFlPVs4LDksMTAsMTEsMjksNDAsNDQsNDYsNDgsNTAsNTIsNTQsNTYsNTgsNjAsNjMsNjUsNjcsNjgsNzAsNzUsNzcsNzgsODksMTAyLDEwNSwxMDYsMTA5LDExMSwxMTQsMTE1LDExNl0sT2U9WzgsOSwxMSw0NCw2MCw3NSw3Nyw3OCw4OSwxMDIsMTA1LDEwNiwxMDksMTExLDExNCwxMTUsMTE2XSxnZT1bNDQsNjAsODksMTAyLDEwNSwxMDYsMTA5LDExMSwxMTQsMTE1LDExNl0semU9WzEsMTIxXSxIZT1bMSwxMjJdLCRlPVsxLDEyNF0sUmU9WzEsMTIzXSxJZT1bNDQsNjAsNjIsNzQsODksMTAyLDEwNSwxMDYsMTA5LDExMSwxMTQsMTE1LDExNl0sYmU9WzEsMTMzXSxXPVsxLDE0N10sZGU9WzEsMTQ4XSxyZT1bMSwxNDldLG9lPVsxLDE1MF0sVj1bMSwxMzVdLHhlPVsxLDEzN10scT1bMSwxNDFdLHBlPVsxLDE0Ml0sdmU9WzEsMTQzXSxQZT1bMSwxNDRdLF9lPVsxLDE0NV0sd2U9WzEsMTQ2XSxWZT1bMSwxNTFdLERlPVsxLDE1Ml0scWU9WzEsMTMxXSxhdD1bMSwxMzJdLFJ0PVsxLDEzOV0sc3Q9WzEsMTM0XSxVZT1bMSwxMzhdLGN0PVsxLDEzNl0sV2U9WzgsOSwxMCwxMSwyNywzMiwzNCwzNiwzOCw0NCw2MCw4NCw4NSw4Niw4Nyw4OCw4OSwxMDIsMTA1LDEwNiwxMDksMTExLDExNCwxMTUsMTE2LDEyMSwxMjIsMTIzLDEyNF0sb3Q9WzEsMTU0XSxZdD1bMSwxNTZdLGJ0PVs4LDksMTFdLE10PVs4LDksMTAsMTEsMTQsNDQsNjAsODksMTA1LDEwNiwxMDksMTExLDExNCwxMTUsMTE2XSx4dD1bMSwxNzZdLHV0PVsxLDE3Ml0sRXQ9WzEsMTczXSxmdD1bMSwxNzddLHl0PVsxLDE3NF0sbnQ9WzEsMTc1XSxkbj1bNzcsMTE2LDExOV0sVHQ9WzgsOSwxMCwxMSwxMiwxNCwyNywyOSwzMiw0NCw2MCw3NSw4NCw4NSw4Niw4Nyw4OCw4OSw5MCwxMDUsMTA5LDExMSwxMTQsMTE1LDExNl0sT249WzEwLDEwNl0sdG49WzMxLDQ5LDUxLDUzLDU1LDU3LDYyLDY0LDY2LDY3LDY5LDcxLDExNiwxMTcsMTE4XSxfcj1bMSwyNDddLERyPVsxLDI0NV0sUG49WzEsMjQ5XSxBdD1bMSwyNDNdLENlPVsxLDI0NF0sdHQ9WzEsMjQ2XSxTdD1bMSwyNDhdLG1yPVsxLDI1MF0scm49WzEsMjY4XSxnbj1bOCw5LDExLDEwNl0sWnI9WzgsOSwxMCwxMSw2MCw4NCwxMDUsMTA2LDEwOSwxMTAsMTExLDExMl0sTmk9e3RyYWNlOm8oZnVuY3Rpb24oKXt9LCJ0cmFjZSIpLHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsZ3JhcGhDb25maWc6NCxkb2N1bWVudDo1LGxpbmU6NixzdGF0ZW1lbnQ6NyxTRU1JOjgsTkVXTElORTo5LFNQQUNFOjEwLEVPRjoxMSxHUkFQSDoxMixOT0RJUjoxMyxESVI6MTQsRmlyc3RTdG10U2VwYXJhdG9yOjE1LGVuZGluZzoxNixlbmRUb2tlbjoxNyxzcGFjZUxpc3Q6MTgsc3BhY2VMaXN0TmV3bGluZToxOSx2ZXJ0ZXhTdGF0ZW1lbnQ6MjAsc2VwYXJhdG9yOjIxLHN0eWxlU3RhdGVtZW50OjIyLGxpbmtTdHlsZVN0YXRlbWVudDoyMyxjbGFzc0RlZlN0YXRlbWVudDoyNCxjbGFzc1N0YXRlbWVudDoyNSxjbGlja1N0YXRlbWVudDoyNixzdWJncmFwaDoyNyx0ZXh0Tm9UYWdzOjI4LFNRUzoyOSx0ZXh0OjMwLFNRRTozMSxlbmQ6MzIsZGlyZWN0aW9uOjMzLGFjY190aXRsZTozNCxhY2NfdGl0bGVfdmFsdWU6MzUsYWNjX2Rlc2NyOjM2LGFjY19kZXNjcl92YWx1ZTozNyxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjM4LHNoYXBlRGF0YTozOSxTSEFQRV9EQVRBOjQwLGxpbms6NDEsbm9kZTo0MixzdHlsZWRWZXJ0ZXg6NDMsQU1QOjQ0LHZlcnRleDo0NSxTVFlMRV9TRVBBUkFUT1I6NDYsaWRTdHJpbmc6NDcsRE9VQkxFQ0lSQ0xFU1RBUlQ6NDgsRE9VQkxFQ0lSQ0xFRU5EOjQ5LFBTOjUwLFBFOjUxLCIoLSI6NTIsIi0pIjo1MyxTVEFESVVNU1RBUlQ6NTQsU1RBRElVTUVORDo1NSxTVUJST1VUSU5FU1RBUlQ6NTYsU1VCUk9VVElORUVORDo1NyxWRVJURVhfV0lUSF9QUk9QU19TVEFSVDo1OCwiTk9ERV9TVFJJTkdbZmllbGRdIjo1OSxDT0xPTjo2MCwiTk9ERV9TVFJJTkdbdmFsdWVdIjo2MSxQSVBFOjYyLENZTElOREVSU1RBUlQ6NjMsQ1lMSU5ERVJFTkQ6NjQsRElBTU9ORF9TVEFSVDo2NSxESUFNT05EX1NUT1A6NjYsVEFHRU5EOjY3LFRSQVBTVEFSVDo2OCxUUkFQRU5EOjY5LElOVlRSQVBTVEFSVDo3MCxJTlZUUkFQRU5EOjcxLGxpbmtTdGF0ZW1lbnQ6NzIsYXJyb3dUZXh0OjczLFRFU1RTVFI6NzQsU1RBUlRfTElOSzo3NSxlZGdlVGV4dDo3NixMSU5LOjc3LExJTktfSUQ6NzgsZWRnZVRleHRUb2tlbjo3OSxTVFI6ODAsTURfU1RSOjgxLHRleHRUb2tlbjo4MixrZXl3b3Jkczo4MyxTVFlMRTo4NCxMSU5LU1RZTEU6ODUsQ0xBU1NERUY6ODYsQ0xBU1M6ODcsQ0xJQ0s6ODgsRE9XTjo4OSxVUDo5MCx0ZXh0Tm9UYWdzVG9rZW46OTEsc3R5bGVzT3B0OjkyLCJpZFN0cmluZ1t2ZXJ0ZXhdIjo5MywiaWRTdHJpbmdbY2xhc3NdIjo5NCxDQUxMQkFDS05BTUU6OTUsQ0FMTEJBQ0tBUkdTOjk2LEhSRUY6OTcsTElOS19UQVJHRVQ6OTgsIlNUUltsaW5rXSI6OTksIlNUUlt0b29sdGlwXSI6MTAwLGFscGhhTnVtOjEwMSxERUZBVUxUOjEwMixudW1MaXN0OjEwMyxJTlRFUlBPTEFURToxMDQsTlVNOjEwNSxDT01NQToxMDYsc3R5bGU6MTA3LHN0eWxlQ29tcG9uZW50OjEwOCxOT0RFX1NUUklORzoxMDksVU5JVDoxMTAsQlJLVDoxMTEsUENUOjExMixpZFN0cmluZ1Rva2VuOjExMyxNSU5VUzoxMTQsTVVMVDoxMTUsVU5JQ09ERV9URVhUOjExNixURVhUOjExNyxUQUdTVEFSVDoxMTgsRURHRV9URVhUOjExOSxhbHBoYU51bVRva2VuOjEyMCxkaXJlY3Rpb25fdGI6MTIxLGRpcmVjdGlvbl9idDoxMjIsZGlyZWN0aW9uX3JsOjEyMyxkaXJlY3Rpb25fbHI6MTI0LCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw4OiJTRU1JIiw5OiJORVdMSU5FIiwxMDoiU1BBQ0UiLDExOiJFT0YiLDEyOiJHUkFQSCIsMTM6Ik5PRElSIiwxNDoiRElSIiwyNzoic3ViZ3JhcGgiLDI5OiJTUVMiLDMxOiJTUUUiLDMyOiJlbmQiLDM0OiJhY2NfdGl0bGUiLDM1OiJhY2NfdGl0bGVfdmFsdWUiLDM2OiJhY2NfZGVzY3IiLDM3OiJhY2NfZGVzY3JfdmFsdWUiLDM4OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiw0MDoiU0hBUEVfREFUQSIsNDQ6IkFNUCIsNDY6IlNUWUxFX1NFUEFSQVRPUiIsNDg6IkRPVUJMRUNJUkNMRVNUQVJUIiw0OToiRE9VQkxFQ0lSQ0xFRU5EIiw1MDoiUFMiLDUxOiJQRSIsNTI6IigtIiw1MzoiLSkiLDU0OiJTVEFESVVNU1RBUlQiLDU1OiJTVEFESVVNRU5EIiw1NjoiU1VCUk9VVElORVNUQVJUIiw1NzoiU1VCUk9VVElORUVORCIsNTg6IlZFUlRFWF9XSVRIX1BST1BTX1NUQVJUIiw1OToiTk9ERV9TVFJJTkdbZmllbGRdIiw2MDoiQ09MT04iLDYxOiJOT0RFX1NUUklOR1t2YWx1ZV0iLDYyOiJQSVBFIiw2MzoiQ1lMSU5ERVJTVEFSVCIsNjQ6IkNZTElOREVSRU5EIiw2NToiRElBTU9ORF9TVEFSVCIsNjY6IkRJQU1PTkRfU1RPUCIsNjc6IlRBR0VORCIsNjg6IlRSQVBTVEFSVCIsNjk6IlRSQVBFTkQiLDcwOiJJTlZUUkFQU1RBUlQiLDcxOiJJTlZUUkFQRU5EIiw3NDoiVEVTVFNUUiIsNzU6IlNUQVJUX0xJTksiLDc3OiJMSU5LIiw3ODoiTElOS19JRCIsODA6IlNUUiIsODE6Ik1EX1NUUiIsODQ6IlNUWUxFIiw4NToiTElOS1NUWUxFIiw4NjoiQ0xBU1NERUYiLDg3OiJDTEFTUyIsODg6IkNMSUNLIiw4OToiRE9XTiIsOTA6IlVQIiw5MzoiaWRTdHJpbmdbdmVydGV4XSIsOTQ6ImlkU3RyaW5nW2NsYXNzXSIsOTU6IkNBTExCQUNLTkFNRSIsOTY6IkNBTExCQUNLQVJHUyIsOTc6IkhSRUYiLDk4OiJMSU5LX1RBUkdFVCIsOTk6IlNUUltsaW5rXSIsMTAwOiJTVFJbdG9vbHRpcF0iLDEwMjoiREVGQVVMVCIsMTA0OiJJTlRFUlBPTEFURSIsMTA1OiJOVU0iLDEwNjoiQ09NTUEiLDEwOToiTk9ERV9TVFJJTkciLDExMDoiVU5JVCIsMTExOiJCUktUIiwxMTI6IlBDVCIsMTE0OiJNSU5VUyIsMTE1OiJNVUxUIiwxMTY6IlVOSUNPREVfVEVYVCIsMTE3OiJURVhUIiwxMTg6IlRBR1NUQVJUIiwxMTk6IkVER0VfVEVYVCIsMTIxOiJkaXJlY3Rpb25fdGIiLDEyMjoiZGlyZWN0aW9uX2J0IiwxMjM6ImRpcmVjdGlvbl9ybCIsMTI0OiJkaXJlY3Rpb25fbHIifSxwcm9kdWN0aW9uc186WzAsWzMsMl0sWzUsMF0sWzUsMl0sWzYsMV0sWzYsMV0sWzYsMV0sWzYsMV0sWzYsMV0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsM10sWzE2LDJdLFsxNiwxXSxbMTcsMV0sWzE3LDFdLFsxNywxXSxbMTUsMV0sWzE1LDFdLFsxNSwyXSxbMTksMl0sWzE5LDJdLFsxOSwxXSxbMTksMV0sWzE4LDJdLFsxOCwxXSxbNywyXSxbNywyXSxbNywyXSxbNywyXSxbNywyXSxbNywyXSxbNyw5XSxbNyw2XSxbNyw0XSxbNywxXSxbNywyXSxbNywyXSxbNywxXSxbMjEsMV0sWzIxLDFdLFsyMSwxXSxbMzksMl0sWzM5LDFdLFsyMCw0XSxbMjAsM10sWzIwLDRdLFsyMCwyXSxbMjAsMl0sWzIwLDFdLFs0MiwxXSxbNDIsNl0sWzQyLDVdLFs0MywxXSxbNDMsM10sWzQ1LDRdLFs0NSw0XSxbNDUsNl0sWzQ1LDRdLFs0NSw0XSxbNDUsNF0sWzQ1LDhdLFs0NSw0XSxbNDUsNF0sWzQ1LDRdLFs0NSw2XSxbNDUsNF0sWzQ1LDRdLFs0NSw0XSxbNDUsNF0sWzQ1LDRdLFs0NSwxXSxbNDEsMl0sWzQxLDNdLFs0MSwzXSxbNDEsMV0sWzQxLDNdLFs0MSw0XSxbNzYsMV0sWzc2LDJdLFs3NiwxXSxbNzYsMV0sWzcyLDFdLFs3MiwyXSxbNzMsM10sWzMwLDFdLFszMCwyXSxbMzAsMV0sWzMwLDFdLFs4MywxXSxbODMsMV0sWzgzLDFdLFs4MywxXSxbODMsMV0sWzgzLDFdLFs4MywxXSxbODMsMV0sWzgzLDFdLFs4MywxXSxbODMsMV0sWzI4LDFdLFsyOCwyXSxbMjgsMV0sWzI4LDFdLFsyNCw1XSxbMjUsNV0sWzI2LDJdLFsyNiw0XSxbMjYsM10sWzI2LDVdLFsyNiwzXSxbMjYsNV0sWzI2LDVdLFsyNiw3XSxbMjYsMl0sWzI2LDRdLFsyNiwyXSxbMjYsNF0sWzI2LDRdLFsyNiw2XSxbMjIsNV0sWzIzLDVdLFsyMyw1XSxbMjMsOV0sWzIzLDldLFsyMyw3XSxbMjMsN10sWzEwMywxXSxbMTAzLDNdLFs5MiwxXSxbOTIsM10sWzEwNywxXSxbMTA3LDJdLFsxMDgsMV0sWzEwOCwxXSxbMTA4LDFdLFsxMDgsMV0sWzEwOCwxXSxbMTA4LDFdLFsxMDgsMV0sWzEwOCwxXSxbMTEzLDFdLFsxMTMsMV0sWzExMywxXSxbMTEzLDFdLFsxMTMsMV0sWzExMywxXSxbMTEzLDFdLFsxMTMsMV0sWzExMywxXSxbMTEzLDFdLFsxMTMsMV0sWzgyLDFdLFs4MiwxXSxbODIsMV0sWzgyLDFdLFs5MSwxXSxbOTEsMV0sWzkxLDFdLFs5MSwxXSxbOTEsMV0sWzkxLDFdLFs5MSwxXSxbOTEsMV0sWzkxLDFdLFs5MSwxXSxbOTEsMV0sWzc5LDFdLFs3OSwxXSxbMTIwLDFdLFsxMjAsMV0sWzEyMCwxXSxbMTIwLDFdLFsxMjAsMV0sWzEyMCwxXSxbMTIwLDFdLFsxMjAsMV0sWzEyMCwxXSxbMTIwLDFdLFsxMjAsMV0sWzQ3LDFdLFs0NywyXSxbMTAxLDFdLFsxMDEsMl0sWzMzLDFdLFszMywxXSxbMzMsMV0sWzMzLDFdXSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24oZXQsbXQsS3QsbHQsQ24seWUsVmYpe3ZhciBUZT15ZS5sZW5ndGgtMTtzd2l0Y2goQ24pe2Nhc2UgMjp0aGlzLiQ9W107YnJlYWs7Y2FzZSAzOighQXJyYXkuaXNBcnJheSh5ZVtUZV0pfHx5ZVtUZV0ubGVuZ3RoPjApJiZ5ZVtUZS0xXS5wdXNoKHllW1RlXSksdGhpcy4kPXllW1RlLTFdO2JyZWFrO2Nhc2UgNDpjYXNlIDE4Mzp0aGlzLiQ9eWVbVGVdO2JyZWFrO2Nhc2UgMTE6bHQuc2V0RGlyZWN0aW9uKCJUQiIpLHRoaXMuJD0iVEIiO2JyZWFrO2Nhc2UgMTI6bHQuc2V0RGlyZWN0aW9uKHllW1RlLTFdKSx0aGlzLiQ9eWVbVGUtMV07YnJlYWs7Y2FzZSAyNzp0aGlzLiQ9eWVbVGUtMV0ubm9kZXM7YnJlYWs7Y2FzZSAyODpjYXNlIDI5OmNhc2UgMzA6Y2FzZSAzMTpjYXNlIDMyOnRoaXMuJD1bXTticmVhaztjYXNlIDMzOnRoaXMuJD1sdC5hZGRTdWJHcmFwaCh5ZVtUZS02XSx5ZVtUZS0xXSx5ZVtUZS00XSk7YnJlYWs7Y2FzZSAzNDp0aGlzLiQ9bHQuYWRkU3ViR3JhcGgoeWVbVGUtM10seWVbVGUtMV0seWVbVGUtM10pO2JyZWFrO2Nhc2UgMzU6dGhpcy4kPWx0LmFkZFN1YkdyYXBoKHZvaWQgMCx5ZVtUZS0xXSx2b2lkIDApO2JyZWFrO2Nhc2UgMzc6dGhpcy4kPXllW1RlXS50cmltKCksbHQuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDM4OmNhc2UgMzk6dGhpcy4kPXllW1RlXS50cmltKCksbHQuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDQzOnRoaXMuJD15ZVtUZS0xXSt5ZVtUZV07YnJlYWs7Y2FzZSA0NDp0aGlzLiQ9eWVbVGVdO2JyZWFrO2Nhc2UgNDU6bHQuYWRkVmVydGV4KHllW1RlLTFdW3llW1RlLTFdLmxlbmd0aC0xXSx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx5ZVtUZV0pLGx0LmFkZExpbmsoeWVbVGUtM10uc3RtdCx5ZVtUZS0xXSx5ZVtUZS0yXSksdGhpcy4kPXtzdG10OnllW1RlLTFdLG5vZGVzOnllW1RlLTFdLmNvbmNhdCh5ZVtUZS0zXS5ub2Rlcyl9O2JyZWFrO2Nhc2UgNDY6bHQuYWRkTGluayh5ZVtUZS0yXS5zdG10LHllW1RlXSx5ZVtUZS0xXSksdGhpcy4kPXtzdG10OnllW1RlXSxub2Rlczp5ZVtUZV0uY29uY2F0KHllW1RlLTJdLm5vZGVzKX07YnJlYWs7Y2FzZSA0NzpsdC5hZGRMaW5rKHllW1RlLTNdLnN0bXQseWVbVGUtMV0seWVbVGUtMl0pLHRoaXMuJD17c3RtdDp5ZVtUZS0xXSxub2Rlczp5ZVtUZS0xXS5jb25jYXQoeWVbVGUtM10ubm9kZXMpfTticmVhaztjYXNlIDQ4OnRoaXMuJD17c3RtdDp5ZVtUZS0xXSxub2Rlczp5ZVtUZS0xXX07YnJlYWs7Y2FzZSA0OTpsdC5hZGRWZXJ0ZXgoeWVbVGUtMV1beWVbVGUtMV0ubGVuZ3RoLTFdLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHllW1RlXSksdGhpcy4kPXtzdG10OnllW1RlLTFdLG5vZGVzOnllW1RlLTFdLHNoYXBlRGF0YTp5ZVtUZV19O2JyZWFrO2Nhc2UgNTA6dGhpcy4kPXtzdG10OnllW1RlXSxub2Rlczp5ZVtUZV19O2JyZWFrO2Nhc2UgNTE6dGhpcy4kPVt5ZVtUZV1dO2JyZWFrO2Nhc2UgNTI6bHQuYWRkVmVydGV4KHllW1RlLTVdW3llW1RlLTVdLmxlbmd0aC0xXSx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx5ZVtUZS00XSksdGhpcy4kPXllW1RlLTVdLmNvbmNhdCh5ZVtUZV0pO2JyZWFrO2Nhc2UgNTM6dGhpcy4kPXllW1RlLTRdLmNvbmNhdCh5ZVtUZV0pO2JyZWFrO2Nhc2UgNTQ6dGhpcy4kPXllW1RlXTticmVhaztjYXNlIDU1OnRoaXMuJD15ZVtUZS0yXSxsdC5zZXRDbGFzcyh5ZVtUZS0yXSx5ZVtUZV0pO2JyZWFrO2Nhc2UgNTY6dGhpcy4kPXllW1RlLTNdLGx0LmFkZFZlcnRleCh5ZVtUZS0zXSx5ZVtUZS0xXSwic3F1YXJlIik7YnJlYWs7Y2FzZSA1Nzp0aGlzLiQ9eWVbVGUtM10sbHQuYWRkVmVydGV4KHllW1RlLTNdLHllW1RlLTFdLCJkb3VibGVjaXJjbGUiKTticmVhaztjYXNlIDU4OnRoaXMuJD15ZVtUZS01XSxsdC5hZGRWZXJ0ZXgoeWVbVGUtNV0seWVbVGUtMl0sImNpcmNsZSIpO2JyZWFrO2Nhc2UgNTk6dGhpcy4kPXllW1RlLTNdLGx0LmFkZFZlcnRleCh5ZVtUZS0zXSx5ZVtUZS0xXSwiZWxsaXBzZSIpO2JyZWFrO2Nhc2UgNjA6dGhpcy4kPXllW1RlLTNdLGx0LmFkZFZlcnRleCh5ZVtUZS0zXSx5ZVtUZS0xXSwic3RhZGl1bSIpO2JyZWFrO2Nhc2UgNjE6dGhpcy4kPXllW1RlLTNdLGx0LmFkZFZlcnRleCh5ZVtUZS0zXSx5ZVtUZS0xXSwic3Vicm91dGluZSIpO2JyZWFrO2Nhc2UgNjI6dGhpcy4kPXllW1RlLTddLGx0LmFkZFZlcnRleCh5ZVtUZS03XSx5ZVtUZS0xXSwicmVjdCIsdm9pZCAwLHZvaWQgMCx2b2lkIDAsT2JqZWN0LmZyb21FbnRyaWVzKFtbeWVbVGUtNV0seWVbVGUtM11dXSkpO2JyZWFrO2Nhc2UgNjM6dGhpcy4kPXllW1RlLTNdLGx0LmFkZFZlcnRleCh5ZVtUZS0zXSx5ZVtUZS0xXSwiY3lsaW5kZXIiKTticmVhaztjYXNlIDY0OnRoaXMuJD15ZVtUZS0zXSxsdC5hZGRWZXJ0ZXgoeWVbVGUtM10seWVbVGUtMV0sInJvdW5kIik7YnJlYWs7Y2FzZSA2NTp0aGlzLiQ9eWVbVGUtM10sbHQuYWRkVmVydGV4KHllW1RlLTNdLHllW1RlLTFdLCJkaWFtb25kIik7YnJlYWs7Y2FzZSA2Njp0aGlzLiQ9eWVbVGUtNV0sbHQuYWRkVmVydGV4KHllW1RlLTVdLHllW1RlLTJdLCJoZXhhZ29uIik7YnJlYWs7Y2FzZSA2Nzp0aGlzLiQ9eWVbVGUtM10sbHQuYWRkVmVydGV4KHllW1RlLTNdLHllW1RlLTFdLCJvZGQiKTticmVhaztjYXNlIDY4OnRoaXMuJD15ZVtUZS0zXSxsdC5hZGRWZXJ0ZXgoeWVbVGUtM10seWVbVGUtMV0sInRyYXBlem9pZCIpO2JyZWFrO2Nhc2UgNjk6dGhpcy4kPXllW1RlLTNdLGx0LmFkZFZlcnRleCh5ZVtUZS0zXSx5ZVtUZS0xXSwiaW52X3RyYXBlem9pZCIpO2JyZWFrO2Nhc2UgNzA6dGhpcy4kPXllW1RlLTNdLGx0LmFkZFZlcnRleCh5ZVtUZS0zXSx5ZVtUZS0xXSwibGVhbl9yaWdodCIpO2JyZWFrO2Nhc2UgNzE6dGhpcy4kPXllW1RlLTNdLGx0LmFkZFZlcnRleCh5ZVtUZS0zXSx5ZVtUZS0xXSwibGVhbl9sZWZ0Iik7YnJlYWs7Y2FzZSA3Mjp0aGlzLiQ9eWVbVGVdLGx0LmFkZFZlcnRleCh5ZVtUZV0pO2JyZWFrO2Nhc2UgNzM6eWVbVGUtMV0udGV4dD15ZVtUZV0sdGhpcy4kPXllW1RlLTFdO2JyZWFrO2Nhc2UgNzQ6Y2FzZSA3NTp5ZVtUZS0yXS50ZXh0PXllW1RlLTFdLHRoaXMuJD15ZVtUZS0yXTticmVhaztjYXNlIDc2OnRoaXMuJD15ZVtUZV07YnJlYWs7Y2FzZSA3Nzp2YXIgd2k9bHQuZGVzdHJ1Y3RMaW5rKHllW1RlXSx5ZVtUZS0yXSk7dGhpcy4kPXt0eXBlOndpLnR5cGUsc3Ryb2tlOndpLnN0cm9rZSxsZW5ndGg6d2kubGVuZ3RoLHRleHQ6eWVbVGUtMV19O2JyZWFrO2Nhc2UgNzg6dmFyIHdpPWx0LmRlc3RydWN0TGluayh5ZVtUZV0seWVbVGUtMl0pO3RoaXMuJD17dHlwZTp3aS50eXBlLHN0cm9rZTp3aS5zdHJva2UsbGVuZ3RoOndpLmxlbmd0aCx0ZXh0OnllW1RlLTFdLGlkOnllW1RlLTNdfTticmVhaztjYXNlIDc5OnRoaXMuJD17dGV4dDp5ZVtUZV0sdHlwZToidGV4dCJ9O2JyZWFrO2Nhc2UgODA6dGhpcy4kPXt0ZXh0OnllW1RlLTFdLnRleHQrIiIreWVbVGVdLHR5cGU6eWVbVGUtMV0udHlwZX07YnJlYWs7Y2FzZSA4MTp0aGlzLiQ9e3RleHQ6eWVbVGVdLHR5cGU6InN0cmluZyJ9O2JyZWFrO2Nhc2UgODI6dGhpcy4kPXt0ZXh0OnllW1RlXSx0eXBlOiJtYXJrZG93biJ9O2JyZWFrO2Nhc2UgODM6dmFyIHdpPWx0LmRlc3RydWN0TGluayh5ZVtUZV0pO3RoaXMuJD17dHlwZTp3aS50eXBlLHN0cm9rZTp3aS5zdHJva2UsbGVuZ3RoOndpLmxlbmd0aH07YnJlYWs7Y2FzZSA4NDp2YXIgd2k9bHQuZGVzdHJ1Y3RMaW5rKHllW1RlXSk7dGhpcy4kPXt0eXBlOndpLnR5cGUsc3Ryb2tlOndpLnN0cm9rZSxsZW5ndGg6d2kubGVuZ3RoLGlkOnllW1RlLTFdfTticmVhaztjYXNlIDg1OnRoaXMuJD15ZVtUZS0xXTticmVhaztjYXNlIDg2OnRoaXMuJD17dGV4dDp5ZVtUZV0sdHlwZToidGV4dCJ9O2JyZWFrO2Nhc2UgODc6dGhpcy4kPXt0ZXh0OnllW1RlLTFdLnRleHQrIiIreWVbVGVdLHR5cGU6eWVbVGUtMV0udHlwZX07YnJlYWs7Y2FzZSA4ODp0aGlzLiQ9e3RleHQ6eWVbVGVdLHR5cGU6InN0cmluZyJ9O2JyZWFrO2Nhc2UgODk6Y2FzZSAxMDQ6dGhpcy4kPXt0ZXh0OnllW1RlXSx0eXBlOiJtYXJrZG93biJ9O2JyZWFrO2Nhc2UgMTAxOnRoaXMuJD17dGV4dDp5ZVtUZV0sdHlwZToidGV4dCJ9O2JyZWFrO2Nhc2UgMTAyOnRoaXMuJD17dGV4dDp5ZVtUZS0xXS50ZXh0KyIiK3llW1RlXSx0eXBlOnllW1RlLTFdLnR5cGV9O2JyZWFrO2Nhc2UgMTAzOnRoaXMuJD17dGV4dDp5ZVtUZV0sdHlwZToidGV4dCJ9O2JyZWFrO2Nhc2UgMTA1OnRoaXMuJD15ZVtUZS00XSxsdC5hZGRDbGFzcyh5ZVtUZS0yXSx5ZVtUZV0pO2JyZWFrO2Nhc2UgMTA2OnRoaXMuJD15ZVtUZS00XSxsdC5zZXRDbGFzcyh5ZVtUZS0yXSx5ZVtUZV0pO2JyZWFrO2Nhc2UgMTA3OmNhc2UgMTE1OnRoaXMuJD15ZVtUZS0xXSxsdC5zZXRDbGlja0V2ZW50KHllW1RlLTFdLHllW1RlXSk7YnJlYWs7Y2FzZSAxMDg6Y2FzZSAxMTY6dGhpcy4kPXllW1RlLTNdLGx0LnNldENsaWNrRXZlbnQoeWVbVGUtM10seWVbVGUtMl0pLGx0LnNldFRvb2x0aXAoeWVbVGUtM10seWVbVGVdKTticmVhaztjYXNlIDEwOTp0aGlzLiQ9eWVbVGUtMl0sbHQuc2V0Q2xpY2tFdmVudCh5ZVtUZS0yXSx5ZVtUZS0xXSx5ZVtUZV0pO2JyZWFrO2Nhc2UgMTEwOnRoaXMuJD15ZVtUZS00XSxsdC5zZXRDbGlja0V2ZW50KHllW1RlLTRdLHllW1RlLTNdLHllW1RlLTJdKSxsdC5zZXRUb29sdGlwKHllW1RlLTRdLHllW1RlXSk7YnJlYWs7Y2FzZSAxMTE6dGhpcy4kPXllW1RlLTJdLGx0LnNldExpbmsoeWVbVGUtMl0seWVbVGVdKTticmVhaztjYXNlIDExMjp0aGlzLiQ9eWVbVGUtNF0sbHQuc2V0TGluayh5ZVtUZS00XSx5ZVtUZS0yXSksbHQuc2V0VG9vbHRpcCh5ZVtUZS00XSx5ZVtUZV0pO2JyZWFrO2Nhc2UgMTEzOnRoaXMuJD15ZVtUZS00XSxsdC5zZXRMaW5rKHllW1RlLTRdLHllW1RlLTJdLHllW1RlXSk7YnJlYWs7Y2FzZSAxMTQ6dGhpcy4kPXllW1RlLTZdLGx0LnNldExpbmsoeWVbVGUtNl0seWVbVGUtNF0seWVbVGVdKSxsdC5zZXRUb29sdGlwKHllW1RlLTZdLHllW1RlLTJdKTticmVhaztjYXNlIDExNzp0aGlzLiQ9eWVbVGUtMV0sbHQuc2V0TGluayh5ZVtUZS0xXSx5ZVtUZV0pO2JyZWFrO2Nhc2UgMTE4OnRoaXMuJD15ZVtUZS0zXSxsdC5zZXRMaW5rKHllW1RlLTNdLHllW1RlLTJdKSxsdC5zZXRUb29sdGlwKHllW1RlLTNdLHllW1RlXSk7YnJlYWs7Y2FzZSAxMTk6dGhpcy4kPXllW1RlLTNdLGx0LnNldExpbmsoeWVbVGUtM10seWVbVGUtMl0seWVbVGVdKTticmVhaztjYXNlIDEyMDp0aGlzLiQ9eWVbVGUtNV0sbHQuc2V0TGluayh5ZVtUZS01XSx5ZVtUZS00XSx5ZVtUZV0pLGx0LnNldFRvb2x0aXAoeWVbVGUtNV0seWVbVGUtMl0pO2JyZWFrO2Nhc2UgMTIxOnRoaXMuJD15ZVtUZS00XSxsdC5hZGRWZXJ0ZXgoeWVbVGUtMl0sdm9pZCAwLHZvaWQgMCx5ZVtUZV0pO2JyZWFrO2Nhc2UgMTIyOnRoaXMuJD15ZVtUZS00XSxsdC51cGRhdGVMaW5rKFt5ZVtUZS0yXV0seWVbVGVdKTticmVhaztjYXNlIDEyMzp0aGlzLiQ9eWVbVGUtNF0sbHQudXBkYXRlTGluayh5ZVtUZS0yXSx5ZVtUZV0pO2JyZWFrO2Nhc2UgMTI0OnRoaXMuJD15ZVtUZS04XSxsdC51cGRhdGVMaW5rSW50ZXJwb2xhdGUoW3llW1RlLTZdXSx5ZVtUZS0yXSksbHQudXBkYXRlTGluayhbeWVbVGUtNl1dLHllW1RlXSk7YnJlYWs7Y2FzZSAxMjU6dGhpcy4kPXllW1RlLThdLGx0LnVwZGF0ZUxpbmtJbnRlcnBvbGF0ZSh5ZVtUZS02XSx5ZVtUZS0yXSksbHQudXBkYXRlTGluayh5ZVtUZS02XSx5ZVtUZV0pO2JyZWFrO2Nhc2UgMTI2OnRoaXMuJD15ZVtUZS02XSxsdC51cGRhdGVMaW5rSW50ZXJwb2xhdGUoW3llW1RlLTRdXSx5ZVtUZV0pO2JyZWFrO2Nhc2UgMTI3OnRoaXMuJD15ZVtUZS02XSxsdC51cGRhdGVMaW5rSW50ZXJwb2xhdGUoeWVbVGUtNF0seWVbVGVdKTticmVhaztjYXNlIDEyODpjYXNlIDEzMDp0aGlzLiQ9W3llW1RlXV07YnJlYWs7Y2FzZSAxMjk6Y2FzZSAxMzE6eWVbVGUtMl0ucHVzaCh5ZVtUZV0pLHRoaXMuJD15ZVtUZS0yXTticmVhaztjYXNlIDEzMzp0aGlzLiQ9eWVbVGUtMV0reWVbVGVdO2JyZWFrO2Nhc2UgMTgxOnRoaXMuJD15ZVtUZV07YnJlYWs7Y2FzZSAxODI6dGhpcy4kPXllW1RlLTFdKyIiK3llW1RlXTticmVhaztjYXNlIDE4NDp0aGlzLiQ9eWVbVGUtMV0rIiIreWVbVGVdO2JyZWFrO2Nhc2UgMTg1OnRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiVEIifTticmVhaztjYXNlIDE4Njp0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IkJUIn07YnJlYWs7Y2FzZSAxODc6dGhpcy4kPXtzdG10OiJkaXIiLHZhbHVlOiJSTCJ9O2JyZWFrO2Nhc2UgMTg4OnRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiTFIifTticmVha319LCJhbm9ueW1vdXMiKSx0YWJsZTpbezM6MSw0OjIsOTplLDEwOnIsMTI6bn0sezE6WzNdfSx0KGksYSx7NTo2fSksezQ6Nyw5OmUsMTA6ciwxMjpufSx7NDo4LDk6ZSwxMDpyLDEyOm59LHsxMzpbMSw5XSwxNDpbMSwxMF19LHsxOlsyLDFdLDY6MTEsNzoxMiw4OnMsOTpsLDEwOnUsMTE6aCwyMDoxNywyMjoxOCwyMzoxOSwyNDoyMCwyNToyMSwyNjoyMiwyNzpmLDMzOjI0LDM0OmQsMzY6cCwzODptLDQyOjI4LDQzOjM4LDQ0OmcsNDU6MzksNDc6NDAsNjA6eSw4NDp2LDg1OngsODY6Yiw4Nzp3LDg4OkMsODk6VCwxMDI6RSwxMDU6QSwxMDY6UywxMDk6XywxMTE6SSwxMTM6NDEsMTE0OkQsMTE1OmssMTE2OkwsMTIxOlIsMTIyOk8sMTIzOk0sMTI0OkJ9LHQoaSxbMiw5XSksdChpLFsyLDEwXSksdChpLFsyLDExXSksezg6WzEsNTRdLDk6WzEsNTVdLDEwOkYsMTU6NTMsMTg6NTZ9LHQoUCxbMiwzXSksdChQLFsyLDRdKSx0KFAsWzIsNV0pLHQoUCxbMiw2XSksdChQLFsyLDddKSx0KFAsWzIsOF0pLHs4OnosOTokLDExOkgsMjE6NTgsNDE6NTksNzI6NjMsNzU6WzEsNjRdLDc3OlsxLDY2XSw3ODpbMSw2NV19LHs4OnosOTokLDExOkgsMjE6Njd9LHs4OnosOTokLDExOkgsMjE6Njh9LHs4OnosOTokLDExOkgsMjE6Njl9LHs4OnosOTokLDExOkgsMjE6NzB9LHs4OnosOTokLDExOkgsMjE6NzF9LHs4OnosOTokLDEwOlsxLDcyXSwxMTpILDIxOjczfSx0KFAsWzIsMzZdKSx7MzU6WzEsNzRdfSx7Mzc6WzEsNzVdfSx0KFAsWzIsMzldKSx0KFEsWzIsNTBdLHsxODo3NiwzOTo3NywxMDpGLDQwOmp9KSx7MTA6WzEsNzldfSx7MTA6WzEsODBdfSx7MTA6WzEsODFdfSx7MTA6WzEsODJdfSx7MTQ6aWUsNDQ6bmUsNjA6bGUsODA6WzEsODZdLDg5OmhlLDk1OlsxLDgzXSw5NzpbMSw4NF0sMTAxOjg1LDEwNTpLLDEwNjpYLDEwOTp0ZSwxMTE6SiwxMTQ6c2UsMTE1OnVlLDExNjpaLDEyMDo4N30sdChQLFsyLDE4NV0pLHQoUCxbMiwxODZdKSx0KFAsWzIsMTg3XSksdChQLFsyLDE4OF0pLHQoU2UsWzIsNTFdKSx0KFNlLFsyLDU0XSx7NDY6WzEsOTldfSksdChjZSxbMiw3Ml0sezExMzoxMTIsMjk6WzEsMTAwXSw0NDpnLDQ4OlsxLDEwMV0sNTA6WzEsMTAyXSw1MjpbMSwxMDNdLDU0OlsxLDEwNF0sNTY6WzEsMTA1XSw1ODpbMSwxMDZdLDYwOnksNjM6WzEsMTA3XSw2NTpbMSwxMDhdLDY3OlsxLDEwOV0sNjg6WzEsMTEwXSw3MDpbMSwxMTFdLDg5OlQsMTAyOkUsMTA1OkEsMTA2OlMsMTA5Ol8sMTExOkksMTE0OkQsMTE1OmssMTE2Okx9KSx0KGFlLFsyLDE4MV0pLHQoYWUsWzIsMTQyXSksdChhZSxbMiwxNDNdKSx0KGFlLFsyLDE0NF0pLHQoYWUsWzIsMTQ1XSksdChhZSxbMiwxNDZdKSx0KGFlLFsyLDE0N10pLHQoYWUsWzIsMTQ4XSksdChhZSxbMiwxNDldKSx0KGFlLFsyLDE1MF0pLHQoYWUsWzIsMTUxXSksdChhZSxbMiwxNTJdKSx0KGksWzIsMTJdKSx0KGksWzIsMThdKSx0KGksWzIsMTldKSx7OTpbMSwxMTNdfSx0KE9lLFsyLDI2XSx7MTg6MTE0LDEwOkZ9KSx0KFAsWzIsMjddKSx7NDI6MTE1LDQzOjM4LDQ0OmcsNDU6MzksNDc6NDAsNjA6eSw4OTpULDEwMjpFLDEwNTpBLDEwNjpTLDEwOTpfLDExMTpJLDExMzo0MSwxMTQ6RCwxMTU6aywxMTY6TH0sdChQLFsyLDQwXSksdChQLFsyLDQxXSksdChQLFsyLDQyXSksdChnZSxbMiw3Nl0sezczOjExNiw2MjpbMSwxMThdLDc0OlsxLDExN119KSx7NzY6MTE5LDc5OjEyMCw4MDp6ZSw4MTpIZSwxMTY6JGUsMTE5OlJlfSx7NzU6WzEsMTI1XSw3NzpbMSwxMjZdfSx0KEllLFsyLDgzXSksdChQLFsyLDI4XSksdChQLFsyLDI5XSksdChQLFsyLDMwXSksdChQLFsyLDMxXSksdChQLFsyLDMyXSksezEwOmJlLDEyOlcsMTQ6ZGUsMjc6cmUsMjg6MTI3LDMyOm9lLDQ0OlYsNjA6eGUsNzU6cSw4MDpbMSwxMjldLDgxOlsxLDEzMF0sODM6MTQwLDg0OnBlLDg1OnZlLDg2OlBlLDg3Ol9lLDg4OndlLDg5OlZlLDkwOkRlLDkxOjEyOCwxMDU6cWUsMTA5OmF0LDExMTpSdCwxMTQ6c3QsMTE1OlVlLDExNjpjdH0sdChXZSxhLHs1OjE1M30pLHQoUCxbMiwzN10pLHQoUCxbMiwzOF0pLHQoUSxbMiw0OF0sezQ0Om90fSksdChRLFsyLDQ5XSx7MTg6MTU1LDEwOkYsNDA6WXR9KSx0KFNlLFsyLDQ0XSksezQ0OmcsNDc6MTU3LDYwOnksODk6VCwxMDI6RSwxMDU6QSwxMDY6UywxMDk6XywxMTE6SSwxMTM6NDEsMTE0OkQsMTE1OmssMTE2Okx9LHsxMDI6WzEsMTU4XSwxMDM6MTU5LDEwNTpbMSwxNjBdfSx7NDQ6Zyw0NzoxNjEsNjA6eSw4OTpULDEwMjpFLDEwNTpBLDEwNjpTLDEwOTpfLDExMTpJLDExMzo0MSwxMTQ6RCwxMTU6aywxMTY6TH0sezQ0OmcsNDc6MTYyLDYwOnksODk6VCwxMDI6RSwxMDU6QSwxMDY6UywxMDk6XywxMTE6SSwxMTM6NDEsMTE0OkQsMTE1OmssMTE2Okx9LHQoYnQsWzIsMTA3XSx7MTA6WzEsMTYzXSw5NjpbMSwxNjRdfSksezgwOlsxLDE2NV19LHQoYnQsWzIsMTE1XSx7MTIwOjE2NywxMDpbMSwxNjZdLDE0OmllLDQ0Om5lLDYwOmxlLDg5OmhlLDEwNTpLLDEwNjpYLDEwOTp0ZSwxMTE6SiwxMTQ6c2UsMTE1OnVlLDExNjpafSksdChidCxbMiwxMTddLHsxMDpbMSwxNjhdfSksdChNdCxbMiwxODNdKSx0KE10LFsyLDE3MF0pLHQoTXQsWzIsMTcxXSksdChNdCxbMiwxNzJdKSx0KE10LFsyLDE3M10pLHQoTXQsWzIsMTc0XSksdChNdCxbMiwxNzVdKSx0KE10LFsyLDE3Nl0pLHQoTXQsWzIsMTc3XSksdChNdCxbMiwxNzhdKSx0KE10LFsyLDE3OV0pLHQoTXQsWzIsMTgwXSksezQ0OmcsNDc6MTY5LDYwOnksODk6VCwxMDI6RSwxMDU6QSwxMDY6UywxMDk6XywxMTE6SSwxMTM6NDEsMTE0OkQsMTE1OmssMTE2Okx9LHszMDoxNzAsNjc6eHQsODA6dXQsODE6RXQsODI6MTcxLDExNjpmdCwxMTc6eXQsMTE4Om50fSx7MzA6MTc4LDY3Onh0LDgwOnV0LDgxOkV0LDgyOjE3MSwxMTY6ZnQsMTE3Onl0LDExODpudH0sezMwOjE4MCw1MDpbMSwxNzldLDY3Onh0LDgwOnV0LDgxOkV0LDgyOjE3MSwxMTY6ZnQsMTE3Onl0LDExODpudH0sezMwOjE4MSw2Nzp4dCw4MDp1dCw4MTpFdCw4MjoxNzEsMTE2OmZ0LDExNzp5dCwxMTg6bnR9LHszMDoxODIsNjc6eHQsODA6dXQsODE6RXQsODI6MTcxLDExNjpmdCwxMTc6eXQsMTE4Om50fSx7MzA6MTgzLDY3Onh0LDgwOnV0LDgxOkV0LDgyOjE3MSwxMTY6ZnQsMTE3Onl0LDExODpudH0sezEwOTpbMSwxODRdfSx7MzA6MTg1LDY3Onh0LDgwOnV0LDgxOkV0LDgyOjE3MSwxMTY6ZnQsMTE3Onl0LDExODpudH0sezMwOjE4Niw2NTpbMSwxODddLDY3Onh0LDgwOnV0LDgxOkV0LDgyOjE3MSwxMTY6ZnQsMTE3Onl0LDExODpudH0sezMwOjE4OCw2Nzp4dCw4MDp1dCw4MTpFdCw4MjoxNzEsMTE2OmZ0LDExNzp5dCwxMTg6bnR9LHszMDoxODksNjc6eHQsODA6dXQsODE6RXQsODI6MTcxLDExNjpmdCwxMTc6eXQsMTE4Om50fSx7MzA6MTkwLDY3Onh0LDgwOnV0LDgxOkV0LDgyOjE3MSwxMTY6ZnQsMTE3Onl0LDExODpudH0sdChhZSxbMiwxODJdKSx0KGksWzIsMjBdKSx0KE9lLFsyLDI1XSksdChRLFsyLDQ2XSx7Mzk6MTkxLDE4OjE5MiwxMDpGLDQwOmp9KSx0KGdlLFsyLDczXSx7MTA6WzEsMTkzXX0pLHsxMDpbMSwxOTRdfSx7MzA6MTk1LDY3Onh0LDgwOnV0LDgxOkV0LDgyOjE3MSwxMTY6ZnQsMTE3Onl0LDExODpudH0sezc3OlsxLDE5Nl0sNzk6MTk3LDExNjokZSwxMTk6UmV9LHQoZG4sWzIsNzldKSx0KGRuLFsyLDgxXSksdChkbixbMiw4Ml0pLHQoZG4sWzIsMTY4XSksdChkbixbMiwxNjldKSx7NzY6MTk4LDc5OjEyMCw4MDp6ZSw4MTpIZSwxMTY6JGUsMTE5OlJlfSx0KEllLFsyLDg0XSksezg6eiw5OiQsMTA6YmUsMTE6SCwxMjpXLDE0OmRlLDIxOjIwMCwyNzpyZSwyOTpbMSwxOTldLDMyOm9lLDQ0OlYsNjA6eGUsNzU6cSw4MzoxNDAsODQ6cGUsODU6dmUsODY6UGUsODc6X2UsODg6d2UsODk6VmUsOTA6RGUsOTE6MjAxLDEwNTpxZSwxMDk6YXQsMTExOlJ0LDExNDpzdCwxMTU6VWUsMTE2OmN0fSx0KFR0LFsyLDEwMV0pLHQoVHQsWzIsMTAzXSksdChUdCxbMiwxMDRdKSx0KFR0LFsyLDE1N10pLHQoVHQsWzIsMTU4XSksdChUdCxbMiwxNTldKSx0KFR0LFsyLDE2MF0pLHQoVHQsWzIsMTYxXSksdChUdCxbMiwxNjJdKSx0KFR0LFsyLDE2M10pLHQoVHQsWzIsMTY0XSksdChUdCxbMiwxNjVdKSx0KFR0LFsyLDE2Nl0pLHQoVHQsWzIsMTY3XSksdChUdCxbMiw5MF0pLHQoVHQsWzIsOTFdKSx0KFR0LFsyLDkyXSksdChUdCxbMiw5M10pLHQoVHQsWzIsOTRdKSx0KFR0LFsyLDk1XSksdChUdCxbMiw5Nl0pLHQoVHQsWzIsOTddKSx0KFR0LFsyLDk4XSksdChUdCxbMiw5OV0pLHQoVHQsWzIsMTAwXSksezY6MTEsNzoxMiw4OnMsOTpsLDEwOnUsMTE6aCwyMDoxNywyMjoxOCwyMzoxOSwyNDoyMCwyNToyMSwyNjoyMiwyNzpmLDMyOlsxLDIwMl0sMzM6MjQsMzQ6ZCwzNjpwLDM4Om0sNDI6MjgsNDM6MzgsNDQ6Zyw0NTozOSw0Nzo0MCw2MDp5LDg0OnYsODU6eCw4NjpiLDg3OncsODg6Qyw4OTpULDEwMjpFLDEwNTpBLDEwNjpTLDEwOTpfLDExMTpJLDExMzo0MSwxMTQ6RCwxMTU6aywxMTY6TCwxMjE6UiwxMjI6TywxMjM6TSwxMjQ6Qn0sezEwOkYsMTg6MjAzfSx7NDQ6WzEsMjA0XX0sdChTZSxbMiw0M10pLHsxMDpbMSwyMDVdLDQ0OmcsNjA6eSw4OTpULDEwMjpFLDEwNTpBLDEwNjpTLDEwOTpfLDExMTpJLDExMzoxMTIsMTE0OkQsMTE1OmssMTE2Okx9LHsxMDpbMSwyMDZdfSx7MTA6WzEsMjA3XSwxMDY6WzEsMjA4XX0sdChPbixbMiwxMjhdKSx7MTA6WzEsMjA5XSw0NDpnLDYwOnksODk6VCwxMDI6RSwxMDU6QSwxMDY6UywxMDk6XywxMTE6SSwxMTM6MTEyLDExNDpELDExNTprLDExNjpMfSx7MTA6WzEsMjEwXSw0NDpnLDYwOnksODk6VCwxMDI6RSwxMDU6QSwxMDY6UywxMDk6XywxMTE6SSwxMTM6MTEyLDExNDpELDExNTprLDExNjpMfSx7ODA6WzEsMjExXX0sdChidCxbMiwxMDldLHsxMDpbMSwyMTJdfSksdChidCxbMiwxMTFdLHsxMDpbMSwyMTNdfSksezgwOlsxLDIxNF19LHQoTXQsWzIsMTg0XSksezgwOlsxLDIxNV0sOTg6WzEsMjE2XX0sdChTZSxbMiw1NV0sezExMzoxMTIsNDQ6Zyw2MDp5LDg5OlQsMTAyOkUsMTA1OkEsMTA2OlMsMTA5Ol8sMTExOkksMTE0OkQsMTE1OmssMTE2Okx9KSx7MzE6WzEsMjE3XSw2Nzp4dCw4MjoyMTgsMTE2OmZ0LDExNzp5dCwxMTg6bnR9LHQodG4sWzIsODZdKSx0KHRuLFsyLDg4XSksdCh0bixbMiw4OV0pLHQodG4sWzIsMTUzXSksdCh0bixbMiwxNTRdKSx0KHRuLFsyLDE1NV0pLHQodG4sWzIsMTU2XSksezQ5OlsxLDIxOV0sNjc6eHQsODI6MjE4LDExNjpmdCwxMTc6eXQsMTE4Om50fSx7MzA6MjIwLDY3Onh0LDgwOnV0LDgxOkV0LDgyOjE3MSwxMTY6ZnQsMTE3Onl0LDExODpudH0sezUxOlsxLDIyMV0sNjc6eHQsODI6MjE4LDExNjpmdCwxMTc6eXQsMTE4Om50fSx7NTM6WzEsMjIyXSw2Nzp4dCw4MjoyMTgsMTE2OmZ0LDExNzp5dCwxMTg6bnR9LHs1NTpbMSwyMjNdLDY3Onh0LDgyOjIxOCwxMTY6ZnQsMTE3Onl0LDExODpudH0sezU3OlsxLDIyNF0sNjc6eHQsODI6MjE4LDExNjpmdCwxMTc6eXQsMTE4Om50fSx7NjA6WzEsMjI1XX0sezY0OlsxLDIyNl0sNjc6eHQsODI6MjE4LDExNjpmdCwxMTc6eXQsMTE4Om50fSx7NjY6WzEsMjI3XSw2Nzp4dCw4MjoyMTgsMTE2OmZ0LDExNzp5dCwxMTg6bnR9LHszMDoyMjgsNjc6eHQsODA6dXQsODE6RXQsODI6MTcxLDExNjpmdCwxMTc6eXQsMTE4Om50fSx7MzE6WzEsMjI5XSw2Nzp4dCw4MjoyMTgsMTE2OmZ0LDExNzp5dCwxMTg6bnR9LHs2Nzp4dCw2OTpbMSwyMzBdLDcxOlsxLDIzMV0sODI6MjE4LDExNjpmdCwxMTc6eXQsMTE4Om50fSx7Njc6eHQsNjk6WzEsMjMzXSw3MTpbMSwyMzJdLDgyOjIxOCwxMTY6ZnQsMTE3Onl0LDExODpudH0sdChRLFsyLDQ1XSx7MTg6MTU1LDEwOkYsNDA6WXR9KSx0KFEsWzIsNDddLHs0NDpvdH0pLHQoZ2UsWzIsNzVdKSx0KGdlLFsyLDc0XSksezYyOlsxLDIzNF0sNjc6eHQsODI6MjE4LDExNjpmdCwxMTc6eXQsMTE4Om50fSx0KGdlLFsyLDc3XSksdChkbixbMiw4MF0pLHs3NzpbMSwyMzVdLDc5OjE5NywxMTY6JGUsMTE5OlJlfSx7MzA6MjM2LDY3Onh0LDgwOnV0LDgxOkV0LDgyOjE3MSwxMTY6ZnQsMTE3Onl0LDExODpudH0sdChXZSxhLHs1OjIzN30pLHQoVHQsWzIsMTAyXSksdChQLFsyLDM1XSksezQzOjIzOCw0NDpnLDQ1OjM5LDQ3OjQwLDYwOnksODk6VCwxMDI6RSwxMDU6QSwxMDY6UywxMDk6XywxMTE6SSwxMTM6NDEsMTE0OkQsMTE1OmssMTE2Okx9LHsxMDpGLDE4OjIzOX0sezEwOl9yLDYwOkRyLDg0OlBuLDkyOjI0MCwxMDU6QXQsMTA3OjI0MSwxMDg6MjQyLDEwOTpDZSwxMTA6dHQsMTExOlN0LDExMjptcn0sezEwOl9yLDYwOkRyLDg0OlBuLDkyOjI1MSwxMDQ6WzEsMjUyXSwxMDU6QXQsMTA3OjI0MSwxMDg6MjQyLDEwOTpDZSwxMTA6dHQsMTExOlN0LDExMjptcn0sezEwOl9yLDYwOkRyLDg0OlBuLDkyOjI1MywxMDQ6WzEsMjU0XSwxMDU6QXQsMTA3OjI0MSwxMDg6MjQyLDEwOTpDZSwxMTA6dHQsMTExOlN0LDExMjptcn0sezEwNTpbMSwyNTVdfSx7MTA6X3IsNjA6RHIsODQ6UG4sOTI6MjU2LDEwNTpBdCwxMDc6MjQxLDEwODoyNDIsMTA5OkNlLDExMDp0dCwxMTE6U3QsMTEyOm1yfSx7NDQ6Zyw0NzoyNTcsNjA6eSw4OTpULDEwMjpFLDEwNTpBLDEwNjpTLDEwOTpfLDExMTpJLDExMzo0MSwxMTQ6RCwxMTU6aywxMTY6TH0sdChidCxbMiwxMDhdKSx7ODA6WzEsMjU4XX0sezgwOlsxLDI1OV0sOTg6WzEsMjYwXX0sdChidCxbMiwxMTZdKSx0KGJ0LFsyLDExOF0sezEwOlsxLDI2MV19KSx0KGJ0LFsyLDExOV0pLHQoY2UsWzIsNTZdKSx0KHRuLFsyLDg3XSksdChjZSxbMiw1N10pLHs1MTpbMSwyNjJdLDY3Onh0LDgyOjIxOCwxMTY6ZnQsMTE3Onl0LDExODpudH0sdChjZSxbMiw2NF0pLHQoY2UsWzIsNTldKSx0KGNlLFsyLDYwXSksdChjZSxbMiw2MV0pLHsxMDk6WzEsMjYzXX0sdChjZSxbMiw2M10pLHQoY2UsWzIsNjVdKSx7NjY6WzEsMjY0XSw2Nzp4dCw4MjoyMTgsMTE2OmZ0LDExNzp5dCwxMTg6bnR9LHQoY2UsWzIsNjddKSx0KGNlLFsyLDY4XSksdChjZSxbMiw3MF0pLHQoY2UsWzIsNjldKSx0KGNlLFsyLDcxXSksdChbMTAsNDQsNjAsODksMTAyLDEwNSwxMDYsMTA5LDExMSwxMTQsMTE1LDExNl0sWzIsODVdKSx0KGdlLFsyLDc4XSksezMxOlsxLDI2NV0sNjc6eHQsODI6MjE4LDExNjpmdCwxMTc6eXQsMTE4Om50fSx7NjoxMSw3OjEyLDg6cyw5OmwsMTA6dSwxMTpoLDIwOjE3LDIyOjE4LDIzOjE5LDI0OjIwLDI1OjIxLDI2OjIyLDI3OmYsMzI6WzEsMjY2XSwzMzoyNCwzNDpkLDM2OnAsMzg6bSw0MjoyOCw0MzozOCw0NDpnLDQ1OjM5LDQ3OjQwLDYwOnksODQ6diw4NTp4LDg2OmIsODc6dyw4ODpDLDg5OlQsMTAyOkUsMTA1OkEsMTA2OlMsMTA5Ol8sMTExOkksMTEzOjQxLDExNDpELDExNTprLDExNjpMLDEyMTpSLDEyMjpPLDEyMzpNLDEyNDpCfSx0KFNlLFsyLDUzXSksezQzOjI2Nyw0NDpnLDQ1OjM5LDQ3OjQwLDYwOnksODk6VCwxMDI6RSwxMDU6QSwxMDY6UywxMDk6XywxMTE6SSwxMTM6NDEsMTE0OkQsMTE1OmssMTE2Okx9LHQoYnQsWzIsMTIxXSx7MTA2OnJufSksdChnbixbMiwxMzBdLHsxMDg6MjY5LDEwOl9yLDYwOkRyLDg0OlBuLDEwNTpBdCwxMDk6Q2UsMTEwOnR0LDExMTpTdCwxMTI6bXJ9KSx0KFpyLFsyLDEzMl0pLHQoWnIsWzIsMTM0XSksdChacixbMiwxMzVdKSx0KFpyLFsyLDEzNl0pLHQoWnIsWzIsMTM3XSksdChacixbMiwxMzhdKSx0KFpyLFsyLDEzOV0pLHQoWnIsWzIsMTQwXSksdChacixbMiwxNDFdKSx0KGJ0LFsyLDEyMl0sezEwNjpybn0pLHsxMDpbMSwyNzBdfSx0KGJ0LFsyLDEyM10sezEwNjpybn0pLHsxMDpbMSwyNzFdfSx0KE9uLFsyLDEyOV0pLHQoYnQsWzIsMTA1XSx7MTA2OnJufSksdChidCxbMiwxMDZdLHsxMTM6MTEyLDQ0OmcsNjA6eSw4OTpULDEwMjpFLDEwNTpBLDEwNjpTLDEwOTpfLDExMTpJLDExNDpELDExNTprLDExNjpMfSksdChidCxbMiwxMTBdKSx0KGJ0LFsyLDExMl0sezEwOlsxLDI3Ml19KSx0KGJ0LFsyLDExM10pLHs5ODpbMSwyNzNdfSx7NTE6WzEsMjc0XX0sezYyOlsxLDI3NV19LHs2NjpbMSwyNzZdfSx7ODp6LDk6JCwxMTpILDIxOjI3N30sdChQLFsyLDM0XSksdChTZSxbMiw1Ml0pLHsxMDpfciw2MDpEciw4NDpQbiwxMDU6QXQsMTA3OjI3OCwxMDg6MjQyLDEwOTpDZSwxMTA6dHQsMTExOlN0LDExMjptcn0sdChacixbMiwxMzNdKSx7MTQ6aWUsNDQ6bmUsNjA6bGUsODk6aGUsMTAxOjI3OSwxMDU6SywxMDY6WCwxMDk6dGUsMTExOkosMTE0OnNlLDExNTp1ZSwxMTY6WiwxMjA6ODd9LHsxNDppZSw0NDpuZSw2MDpsZSw4OTpoZSwxMDE6MjgwLDEwNTpLLDEwNjpYLDEwOTp0ZSwxMTE6SiwxMTQ6c2UsMTE1OnVlLDExNjpaLDEyMDo4N30sezk4OlsxLDI4MV19LHQoYnQsWzIsMTIwXSksdChjZSxbMiw1OF0pLHszMDoyODIsNjc6eHQsODA6dXQsODE6RXQsODI6MTcxLDExNjpmdCwxMTc6eXQsMTE4Om50fSx0KGNlLFsyLDY2XSksdChXZSxhLHs1OjI4M30pLHQoZ24sWzIsMTMxXSx7MTA4OjI2OSwxMDpfciw2MDpEciw4NDpQbiwxMDU6QXQsMTA5OkNlLDExMDp0dCwxMTE6U3QsMTEyOm1yfSksdChidCxbMiwxMjZdLHsxMjA6MTY3LDEwOlsxLDI4NF0sMTQ6aWUsNDQ6bmUsNjA6bGUsODk6aGUsMTA1OkssMTA2OlgsMTA5OnRlLDExMTpKLDExNDpzZSwxMTU6dWUsMTE2Olp9KSx0KGJ0LFsyLDEyN10sezEyMDoxNjcsMTA6WzEsMjg1XSwxNDppZSw0NDpuZSw2MDpsZSw4OTpoZSwxMDU6SywxMDY6WCwxMDk6dGUsMTExOkosMTE0OnNlLDExNTp1ZSwxMTY6Wn0pLHQoYnQsWzIsMTE0XSksezMxOlsxLDI4Nl0sNjc6eHQsODI6MjE4LDExNjpmdCwxMTc6eXQsMTE4Om50fSx7NjoxMSw3OjEyLDg6cyw5OmwsMTA6dSwxMTpoLDIwOjE3LDIyOjE4LDIzOjE5LDI0OjIwLDI1OjIxLDI2OjIyLDI3OmYsMzI6WzEsMjg3XSwzMzoyNCwzNDpkLDM2OnAsMzg6bSw0MjoyOCw0MzozOCw0NDpnLDQ1OjM5LDQ3OjQwLDYwOnksODQ6diw4NTp4LDg2OmIsODc6dyw4ODpDLDg5OlQsMTAyOkUsMTA1OkEsMTA2OlMsMTA5Ol8sMTExOkksMTEzOjQxLDExNDpELDExNTprLDExNjpMLDEyMTpSLDEyMjpPLDEyMzpNLDEyNDpCfSx7MTA6X3IsNjA6RHIsODQ6UG4sOTI6Mjg4LDEwNTpBdCwxMDc6MjQxLDEwODoyNDIsMTA5OkNlLDExMDp0dCwxMTE6U3QsMTEyOm1yfSx7MTA6X3IsNjA6RHIsODQ6UG4sOTI6Mjg5LDEwNTpBdCwxMDc6MjQxLDEwODoyNDIsMTA5OkNlLDExMDp0dCwxMTE6U3QsMTEyOm1yfSx0KGNlLFsyLDYyXSksdChQLFsyLDMzXSksdChidCxbMiwxMjRdLHsxMDY6cm59KSx0KGJ0LFsyLDEyNV0sezEwNjpybn0pXSxkZWZhdWx0QWN0aW9uczp7fSxwYXJzZUVycm9yOm8oZnVuY3Rpb24oZXQsbXQpe2lmKG10LnJlY292ZXJhYmxlKXRoaXMudHJhY2UoZXQpO2Vsc2V7dmFyIEt0PW5ldyBFcnJvcihldCk7dGhyb3cgS3QuaGFzaD1tdCxLdH19LCJwYXJzZUVycm9yIikscGFyc2U6byhmdW5jdGlvbihldCl7dmFyIG10PXRoaXMsS3Q9WzBdLGx0PVtdLENuPVtudWxsXSx5ZT1bXSxWZj10aGlzLnRhYmxlLFRlPSIiLHdpPTAsVEY9MCxrRj0wLE0yZT0yLEVGPTEsSTJlPXllLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLFhpPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksVWY9e3l5Ont9fTtmb3IodmFyIHhDIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXkseEMpJiYoVWYueXlbeENdPXRoaXMueXlbeENdKTtYaS5zZXRJbnB1dChldCxVZi55eSksVWYueXkubGV4ZXI9WGksVWYueXkucGFyc2VyPXRoaXMsdHlwZW9mIFhpLnl5bGxvYz4idSImJihYaS55eWxsb2M9e30pO3ZhciBiQz1YaS55eWxsb2M7eWUucHVzaChiQyk7dmFyIE8yZT1YaS5vcHRpb25zJiZYaS5vcHRpb25zLnJhbmdlczt0eXBlb2YgVWYueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9VWYueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gd250KFdzKXtLdC5sZW5ndGg9S3QubGVuZ3RoLTIqV3MsQ24ubGVuZ3RoPUNuLmxlbmd0aC1Xcyx5ZS5sZW5ndGg9eWUubGVuZ3RoLVdzfW8od250LCJwb3BTdGFjayIpO2Z1bmN0aW9uIFAyZSgpe3ZhciBXcztyZXR1cm4gV3M9bHQucG9wKCl8fFhpLmxleCgpfHxFRix0eXBlb2YgV3MhPSJudW1iZXIiJiYoV3MgaW5zdGFuY2VvZiBBcnJheSYmKGx0PVdzLFdzPWx0LnBvcCgpKSxXcz1tdC5zeW1ib2xzX1tXc118fFdzKSxXc31vKFAyZSwibGV4Iik7Zm9yKHZhciBXYSx3QyxIZix4byxUbnQsVEMsSnA9e30sXzQsSmMsU0YsRDQ7Oyl7aWYoSGY9S3RbS3QubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbSGZdP3hvPXRoaXMuZGVmYXVsdEFjdGlvbnNbSGZdOigoV2E9PT1udWxsfHx0eXBlb2YgV2E+InUiKSYmKFdhPVAyZSgpKSx4bz1WZltIZl0mJlZmW0hmXVtXYV0pLHR5cGVvZiB4bz4idSJ8fCF4by5sZW5ndGh8fCF4b1swXSl7dmFyIGtDPSIiO0Q0PVtdO2ZvcihfNCBpbiBWZltIZl0pdGhpcy50ZXJtaW5hbHNfW180XSYmXzQ+TTJlJiZENC5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bXzRdKyInIik7WGkuc2hvd1Bvc2l0aW9uP2tDPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKHdpKzEpK2A6CmArWGkuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtENC5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW1dhXXx8V2EpKyInIjprQz0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyh3aSsxKSsiOiBVbmV4cGVjdGVkICIrKFdhPT1FRj8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tXYV18fFdhKSsiJyIpLHRoaXMucGFyc2VFcnJvcihrQyx7dGV4dDpYaS5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bV2FdfHxXYSxsaW5lOlhpLnl5bGluZW5vLGxvYzpiQyxleHBlY3RlZDpENH0pfWlmKHhvWzBdaW5zdGFuY2VvZiBBcnJheSYmeG8ubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitIZisiLCB0b2tlbjogIitXYSk7c3dpdGNoKHhvWzBdKXtjYXNlIDE6S3QucHVzaChXYSksQ24ucHVzaChYaS55eXRleHQpLHllLnB1c2goWGkueXlsbG9jKSxLdC5wdXNoKHhvWzFdKSxXYT1udWxsLHdDPyhXYT13Qyx3Qz1udWxsKTooVEY9WGkueXlsZW5nLFRlPVhpLnl5dGV4dCx3aT1YaS55eWxpbmVubyxiQz1YaS55eWxsb2Msa0Y+MCYma0YtLSk7YnJlYWs7Y2FzZSAyOmlmKEpjPXRoaXMucHJvZHVjdGlvbnNfW3hvWzFdXVsxXSxKcC4kPUNuW0NuLmxlbmd0aC1KY10sSnAuXyQ9e2ZpcnN0X2xpbmU6eWVbeWUubGVuZ3RoLShKY3x8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOnllW3llLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnllW3llLmxlbmd0aC0oSmN8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46eWVbeWUubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxPMmUmJihKcC5fJC5yYW5nZT1beWVbeWUubGVuZ3RoLShKY3x8MSldLnJhbmdlWzBdLHllW3llLmxlbmd0aC0xXS5yYW5nZVsxXV0pLFRDPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShKcCxbVGUsVEYsd2ksVWYueXkseG9bMV0sQ24seWVdLmNvbmNhdChJMmUpKSx0eXBlb2YgVEM8InUiKXJldHVybiBUQztKYyYmKEt0PUt0LnNsaWNlKDAsLTEqSmMqMiksQ249Q24uc2xpY2UoMCwtMSpKYykseWU9eWUuc2xpY2UoMCwtMSpKYykpLEt0LnB1c2godGhpcy5wcm9kdWN0aW9uc19beG9bMV1dWzBdKSxDbi5wdXNoKEpwLiQpLHllLnB1c2goSnAuXyQpLFNGPVZmW0t0W0t0Lmxlbmd0aC0yXV1bS3RbS3QubGVuZ3RoLTFdXSxLdC5wdXNoKFNGKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfSwicGFyc2UiKX0sWm49ZnVuY3Rpb24oKXt2YXIgSHI9e0VPRjoxLHBhcnNlRXJyb3I6byhmdW5jdGlvbihtdCxLdCl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihtdCxLdCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IobXQpfSwicGFyc2VFcnJvciIpLHNldElucHV0Om8oZnVuY3Rpb24oZXQsbXQpe3JldHVybiB0aGlzLnl5PW10fHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1ldCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30sInNldElucHV0IiksaW5wdXQ6byhmdW5jdGlvbigpe3ZhciBldD10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9ZXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPWV0LHRoaXMubWF0Y2hlZCs9ZXQ7dmFyIG10PWV0Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gbXQ/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLGV0fSwiaW5wdXQiKSx1bnB1dDpvKGZ1bmN0aW9uKGV0KXt2YXIgbXQ9ZXQubGVuZ3RoLEt0PWV0LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9ZXQrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLW10KSx0aGlzLm9mZnNldC09bXQ7dmFyIGx0PXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLEt0Lmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09S3QubGVuZ3RoLTEpO3ZhciBDbj10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46S3Q/KEt0Lmxlbmd0aD09PWx0Lmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrbHRbbHQubGVuZ3RoLUt0Lmxlbmd0aF0ubGVuZ3RoLUt0WzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tbXR9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bQ25bMF0sQ25bMF0rdGhpcy55eWxlbmctbXRdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sInVucHV0IiksbW9yZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30sIm1vcmUiKSxyZWplY3Q6byhmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sInJlamVjdCIpLGxlc3M6byhmdW5jdGlvbihldCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKGV0KSl9LCJsZXNzIikscGFzdElucHV0Om8oZnVuY3Rpb24oKXt2YXIgZXQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihldC5sZW5ndGg+MjA/Ii4uLiI6IiIpK2V0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSwicGFzdElucHV0IiksdXBjb21pbmdJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIGV0PXRoaXMubWF0Y2g7cmV0dXJuIGV0Lmxlbmd0aDwyMCYmKGV0Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1ldC5sZW5ndGgpKSwoZXQuc3Vic3RyKDAsMjApKyhldC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sInVwY29taW5nSW5wdXQiKSxzaG93UG9zaXRpb246byhmdW5jdGlvbigpe3ZhciBldD10aGlzLnBhc3RJbnB1dCgpLG10PW5ldyBBcnJheShldC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBldCt0aGlzLnVwY29taW5nSW5wdXQoKStgCmArbXQrIl4ifSwic2hvd1Bvc2l0aW9uIiksdGVzdF9tYXRjaDpvKGZ1bmN0aW9uKGV0LG10KXt2YXIgS3QsbHQsQ247aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKENuPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKENuLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLGx0PWV0WzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxsdCYmKHRoaXMueXlsaW5lbm8rPWx0Lmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOmx0P2x0W2x0Lmxlbmd0aC0xXS5sZW5ndGgtbHRbbHQubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rZXRbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9ZXRbMF0sdGhpcy5tYXRjaCs9ZXRbMF0sdGhpcy5tYXRjaGVzPWV0LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKGV0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1ldFswXSxLdD10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxtdCx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxLdClyZXR1cm4gS3Q7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIHllIGluIENuKXRoaXNbeWVdPUNuW3llXTtyZXR1cm4hMX1yZXR1cm4hMX0sInRlc3RfbWF0Y2giKSxuZXh0Om8oZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgZXQsbXQsS3QsbHQ7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgQ249dGhpcy5fY3VycmVudFJ1bGVzKCkseWU9MDt5ZTxDbi5sZW5ndGg7eWUrKylpZihLdD10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW0NuW3llXV0pLEt0JiYoIW10fHxLdFswXS5sZW5ndGg+bXRbMF0ubGVuZ3RoKSl7aWYobXQ9S3QsbHQ9eWUsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoZXQ9dGhpcy50ZXN0X21hdGNoKEt0LENuW3llXSksZXQhPT0hMSlyZXR1cm4gZXQ7aWYodGhpcy5fYmFja3RyYWNrKXttdD0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBtdD8oZXQ9dGhpcy50ZXN0X21hdGNoKG10LENuW2x0XSksZXQhPT0hMT9ldDohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sIm5leHQiKSxsZXg6byhmdW5jdGlvbigpe3ZhciBtdD10aGlzLm5leHQoKTtyZXR1cm4gbXR8fHRoaXMubGV4KCl9LCJsZXgiKSxiZWdpbjpvKGZ1bmN0aW9uKG10KXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2gobXQpfSwiYmVnaW4iKSxwb3BTdGF0ZTpvKGZ1bmN0aW9uKCl7dmFyIG10PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIG10PjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSwicG9wU3RhdGUiKSxfY3VycmVudFJ1bGVzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSwiX2N1cnJlbnRSdWxlcyIpLHRvcFN0YXRlOm8oZnVuY3Rpb24obXQpe3JldHVybiBtdD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKG10fHwwKSxtdD49MD90aGlzLmNvbmRpdGlvblN0YWNrW210XToiSU5JVElBTCJ9LCJ0b3BTdGF0ZSIpLHB1c2hTdGF0ZTpvKGZ1bmN0aW9uKG10KXt0aGlzLmJlZ2luKG10KX0sInB1c2hTdGF0ZSIpLHN0YXRlU3RhY2tTaXplOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LCJzdGF0ZVN0YWNrU2l6ZSIpLG9wdGlvbnM6e30scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKG10LEt0LGx0LENuKXt2YXIgeWU9Q247c3dpdGNoKGx0KXtjYXNlIDA6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDM0O2JyZWFrO2Nhc2UgMTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2JyZWFrO2Nhc2UgMjpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX2Rlc2NyIiksMzY7YnJlYWs7Y2FzZSAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7YnJlYWs7Y2FzZSA0OnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDU6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNjpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSA3OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgic2hhcGVEYXRhIiksS3QueXl0ZXh0PSIiLDQwO2JyZWFrO2Nhc2UgODpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInNoYXBlRGF0YVN0ciIpLDQwO2JyZWFrO2Nhc2UgOTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDQwO2JyZWFrO2Nhc2UgMTA6bGV0IFZmPS9cblxzKi9nO3JldHVybiBLdC55eXRleHQ9S3QueXl0ZXh0LnJlcGxhY2UoVmYsIjxici8+IiksNDA7YnJlYWs7Y2FzZSAxMTpyZXR1cm4gNDA7Y2FzZSAxMjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxMzp0aGlzLmJlZ2luKCJjYWxsYmFja25hbWUiKTticmVhaztjYXNlIDE0OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE1OnRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJjYWxsYmFja2FyZ3MiKTticmVhaztjYXNlIDE2OnJldHVybiA5NTtjYXNlIDE3OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE4OnJldHVybiA5NjtjYXNlIDE5OnJldHVybiJNRF9TVFIiO2Nhc2UgMjA6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjE6dGhpcy5iZWdpbigibWRfc3RyaW5nIik7YnJlYWs7Y2FzZSAyMjpyZXR1cm4iU1RSIjtjYXNlIDIzOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDI0OnRoaXMucHVzaFN0YXRlKCJzdHJpbmciKTticmVhaztjYXNlIDI1OnJldHVybiA4NDtjYXNlIDI2OnJldHVybiAxMDI7Y2FzZSAyNzpyZXR1cm4gODU7Y2FzZSAyODpyZXR1cm4gMTA0O2Nhc2UgMjk6cmV0dXJuIDg2O2Nhc2UgMzA6cmV0dXJuIDg3O2Nhc2UgMzE6cmV0dXJuIDk3O2Nhc2UgMzI6dGhpcy5iZWdpbigiY2xpY2siKTticmVhaztjYXNlIDMzOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDM0OnJldHVybiA4ODtjYXNlIDM1OnJldHVybiBtdC5sZXguZmlyc3RHcmFwaCgpJiZ0aGlzLmJlZ2luKCJkaXIiKSwxMjticmVhaztjYXNlIDM2OnJldHVybiBtdC5sZXguZmlyc3RHcmFwaCgpJiZ0aGlzLmJlZ2luKCJkaXIiKSwxMjticmVhaztjYXNlIDM3OnJldHVybiBtdC5sZXguZmlyc3RHcmFwaCgpJiZ0aGlzLmJlZ2luKCJkaXIiKSwxMjticmVhaztjYXNlIDM4OnJldHVybiAyNztjYXNlIDM5OnJldHVybiAzMjtjYXNlIDQwOnJldHVybiA5ODtjYXNlIDQxOnJldHVybiA5ODtjYXNlIDQyOnJldHVybiA5ODtjYXNlIDQzOnJldHVybiA5ODtjYXNlIDQ0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTM7YnJlYWs7Y2FzZSA0NTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE0O2JyZWFrO2Nhc2UgNDY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNDticmVhaztjYXNlIDQ3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTQ7YnJlYWs7Y2FzZSA0ODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE0O2JyZWFrO2Nhc2UgNDk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNDticmVhaztjYXNlIDUwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTQ7YnJlYWs7Y2FzZSA1MTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE0O2JyZWFrO2Nhc2UgNTI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNDticmVhaztjYXNlIDUzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTQ7YnJlYWs7Y2FzZSA1NDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE0O2JyZWFrO2Nhc2UgNTU6cmV0dXJuIDEyMTtjYXNlIDU2OnJldHVybiAxMjI7Y2FzZSA1NzpyZXR1cm4gMTIzO2Nhc2UgNTg6cmV0dXJuIDEyNDtjYXNlIDU5OnJldHVybiA3ODtjYXNlIDYwOnJldHVybiAxMDU7Y2FzZSA2MTpyZXR1cm4gMTExO2Nhc2UgNjI6cmV0dXJuIDQ2O2Nhc2UgNjM6cmV0dXJuIDYwO2Nhc2UgNjQ6cmV0dXJuIDQ0O2Nhc2UgNjU6cmV0dXJuIDg7Y2FzZSA2NjpyZXR1cm4gMTA2O2Nhc2UgNjc6cmV0dXJuIDExNTtjYXNlIDY4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNzc7YnJlYWs7Y2FzZSA2OTpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImVkZ2VUZXh0IiksNzU7YnJlYWs7Y2FzZSA3MDpyZXR1cm4gMTE5O2Nhc2UgNzE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw3NzticmVhaztjYXNlIDcyOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidGhpY2tFZGdlVGV4dCIpLDc1O2JyZWFrO2Nhc2UgNzM6cmV0dXJuIDExOTtjYXNlIDc0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNzc7YnJlYWs7Y2FzZSA3NTpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImRvdHRlZEVkZ2VUZXh0IiksNzU7YnJlYWs7Y2FzZSA3NjpyZXR1cm4gMTE5O2Nhc2UgNzc6cmV0dXJuIDc3O2Nhc2UgNzg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw1MzticmVhaztjYXNlIDc5OnJldHVybiJURVhUIjtjYXNlIDgwOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiZWxsaXBzZVRleHQiKSw1MjticmVhaztjYXNlIDgxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNTU7YnJlYWs7Y2FzZSA4MjpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRleHQiKSw1NDticmVhaztjYXNlIDgzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNTc7YnJlYWs7Y2FzZSA4NDpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRleHQiKSw1NjticmVhaztjYXNlIDg1OnJldHVybiA1ODtjYXNlIDg2OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidGV4dCIpLDY3O2JyZWFrO2Nhc2UgODc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw2NDticmVhaztjYXNlIDg4OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidGV4dCIpLDYzO2JyZWFrO2Nhc2UgODk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw0OTticmVhaztjYXNlIDkwOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidGV4dCIpLDQ4O2JyZWFrO2Nhc2UgOTE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw2OTticmVhaztjYXNlIDkyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNzE7YnJlYWs7Y2FzZSA5MzpyZXR1cm4gMTE3O2Nhc2UgOTQ6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0cmFwVGV4dCIpLDY4O2JyZWFrO2Nhc2UgOTU6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0cmFwVGV4dCIpLDcwO2JyZWFrO2Nhc2UgOTY6cmV0dXJuIDExODtjYXNlIDk3OnJldHVybiA2NztjYXNlIDk4OnJldHVybiA5MDtjYXNlIDk5OnJldHVybiJTRVAiO2Nhc2UgMTAwOnJldHVybiA4OTtjYXNlIDEwMTpyZXR1cm4gMTE1O2Nhc2UgMTAyOnJldHVybiAxMTE7Y2FzZSAxMDM6cmV0dXJuIDQ0O2Nhc2UgMTA0OnJldHVybiAxMDk7Y2FzZSAxMDU6cmV0dXJuIDExNDtjYXNlIDEwNjpyZXR1cm4gMTE2O2Nhc2UgMTA3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNjI7YnJlYWs7Y2FzZSAxMDg6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0ZXh0IiksNjI7YnJlYWs7Y2FzZSAxMDk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw1MTticmVhaztjYXNlIDExMDpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRleHQiKSw1MDticmVhaztjYXNlIDExMTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDMxO2JyZWFrO2Nhc2UgMTEyOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidGV4dCIpLDI5O2JyZWFrO2Nhc2UgMTEzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNjY7YnJlYWs7Y2FzZSAxMTQ6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0ZXh0IiksNjU7YnJlYWs7Y2FzZSAxMTU6cmV0dXJuIlRFWFQiO2Nhc2UgMTE2OnJldHVybiJRVU9URSI7Y2FzZSAxMTc6cmV0dXJuIDk7Y2FzZSAxMTg6cmV0dXJuIDEwO2Nhc2UgMTE5OnJldHVybiAxMX19LCJhbm9ueW1vdXMiKSxydWxlczpbL14oPzphY2NUaXRsZVxzKjpccyopLywvXig/Oig/IVxufHwpKlteXG5dKikvLC9eKD86YWNjRGVzY3Jccyo6XHMqKS8sL14oPzooPyFcbnx8KSpbXlxuXSopLywvXig/OmFjY0Rlc2NyXHMqXHtccyopLywvXig/OltcfV0pLywvXig/OlteXH1dKikvLC9eKD86QFx7KS8sL14oPzpbIl0pLywvXig/OlsiXSkvLC9eKD86W15cIl0rKS8sL14oPzpbXn1eIl0rKS8sL14oPzpcfSkvLC9eKD86Y2FsbFtcc10rKS8sL14oPzpcKFtcc10qXCkpLywvXig/OlwoKS8sL14oPzpbXihdKikvLC9eKD86XCkpLywvXig/OlteKV0qKS8sL14oPzpbXmAiXSspLywvXig/OltgXVsiXSkvLC9eKD86WyJdW2BdKS8sL14oPzpbXiJdKykvLC9eKD86WyJdKS8sL14oPzpbIl0pLywvXig/OnN0eWxlXGIpLywvXig/OmRlZmF1bHRcYikvLC9eKD86bGlua1N0eWxlXGIpLywvXig/OmludGVycG9sYXRlXGIpLywvXig/OmNsYXNzRGVmXGIpLywvXig/OmNsYXNzXGIpLywvXig/OmhyZWZbXHNdKS8sL14oPzpjbGlja1tcc10rKS8sL14oPzpbXHNcbl0pLywvXig/OlteXHNcbl0qKS8sL14oPzpmbG93Y2hhcnQtZWxrXGIpLywvXig/OmdyYXBoXGIpLywvXig/OmZsb3djaGFydFxiKS8sL14oPzpzdWJncmFwaFxiKS8sL14oPzplbmRcYlxzKikvLC9eKD86X3NlbGZcYikvLC9eKD86X2JsYW5rXGIpLywvXig/Ol9wYXJlbnRcYikvLC9eKD86X3RvcFxiKS8sL14oPzooXHI/XG4pKlxzKlxuKS8sL14oPzpccypMUlxiKS8sL14oPzpccypSTFxiKS8sL14oPzpccypUQlxiKS8sL14oPzpccypCVFxiKS8sL14oPzpccypURFxiKS8sL14oPzpccypCUlxiKS8sL14oPzpccyo8KS8sL14oPzpccyo+KS8sL14oPzpccypcXikvLC9eKD86XHMqdlxiKS8sL14oPzouKmRpcmVjdGlvblxzK1RCW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK0JUW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK1JMW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK0xSW15cbl0qKS8sL14oPzpbXlxzXCJdK0AoPz1bXlx7XCJdKSkvLC9eKD86WzAtOV0rKS8sL14oPzojKS8sL14oPzo6OjopLywvXig/OjopLywvXig/OiYpLywvXig/OjspLywvXig/OiwpLywvXig/OlwqKS8sL14oPzpccypbeG88XT8tLStbLXhvPl1ccyopLywvXig/OlxzKlt4bzxdPy0tXHMqKS8sL14oPzpbXi1dfC0oPyEtKSspLywvXig/OlxzKlt4bzxdPz09K1s9eG8+XVxzKikvLC9eKD86XHMqW3hvPF0/PT1ccyopLywvXig/OltePV18PSg/ISkpLywvXig/OlxzKlt4bzxdPy0/XC4rLVt4bz5dP1xzKikvLC9eKD86XHMqW3hvPF0/LVwuXHMqKS8sL14oPzpbXlwuXXxcLig/ISkpLywvXig/OlxzKn5+W1x+XStccyopLywvXig/OlstL1wpXVtcKV0pLywvXig/OlteXChcKVxbXF1ce1x9XXwhXCkrKS8sL14oPzpcKC0pLywvXig/OlxdXCkpLywvXig/OlwoXFspLywvXig/OlxdXF0pLywvXig/OlxbXFspLywvXig/OlxbXHwpLywvXig/Oj4pLywvXig/OlwpXF0pLywvXig/OlxbXCgpLywvXig/OlwpXClcKSkvLC9eKD86XChcKFwoKS8sL14oPzpbXFwoPz1cXSldW1xdXSkvLC9eKD86XC8oPz1cXSlcXSkvLC9eKD86XC8oPyFcXSl8XFwoPyFcXSl8W15cXFxbXF1cKFwpXHtcfVwvXSspLywvXig/OlxbXC8pLywvXig/OlxbXFwpLywvXig/OjwpLywvXig/Oj4pLywvXig/OlxeKS8sL14oPzpcXFx8KS8sL14oPzp2XGIpLywvXig/OlwqKS8sL14oPzojKS8sL14oPzomKS8sL14oPzooW0EtWmEtejAtOSEiXCMkJSYnKitcLmA/XFxfXC9dfC0oPz1bXlw+XC1cLl0pfCg/ISkpKykvLC9eKD86LSkvLC9eKD86W1x1MDBBQVx1MDBCNVx1MDBCQVx1MDBDMC1cdTAwRDZcdTAwRDgtXHUwMEY2XXxbXHUwMEY4LVx1MDJDMVx1MDJDNi1cdTAyRDFcdTAyRTAtXHUwMkU0XHUwMkVDXHUwMkVFXHUwMzcwLVx1MDM3NFx1MDM3Nlx1MDM3N118W1x1MDM3QS1cdTAzN0RcdTAzODZcdTAzODgtXHUwMzhBXHUwMzhDXHUwMzhFLVx1MDNBMVx1MDNBMy1cdTAzRjVdfFtcdTAzRjctXHUwNDgxXHUwNDhBLVx1MDUyN1x1MDUzMS1cdTA1NTZcdTA1NTlcdTA1NjEtXHUwNTg3XHUwNUQwLVx1MDVFQV18W1x1MDVGMC1cdTA1RjJcdTA2MjAtXHUwNjRBXHUwNjZFXHUwNjZGXHUwNjcxLVx1MDZEM1x1MDZENVx1MDZFNVx1MDZFNlx1MDZFRV18W1x1MDZFRlx1MDZGQS1cdTA2RkNcdTA2RkZcdTA3MTBcdTA3MTItXHUwNzJGXHUwNzRELVx1MDdBNVx1MDdCMVx1MDdDQS1cdTA3RUFdfFtcdTA3RjRcdTA3RjVcdTA3RkFcdTA4MDAtXHUwODE1XHUwODFBXHUwODI0XHUwODI4XHUwODQwLVx1MDg1OFx1MDhBMF18W1x1MDhBMi1cdTA4QUNcdTA5MDQtXHUwOTM5XHUwOTNEXHUwOTUwXHUwOTU4LVx1MDk2MVx1MDk3MS1cdTA5NzddfFtcdTA5NzktXHUwOTdGXHUwOTg1LVx1MDk4Q1x1MDk4Rlx1MDk5MFx1MDk5My1cdTA5QThcdTA5QUEtXHUwOUIwXHUwOUIyXXxbXHUwOUI2LVx1MDlCOVx1MDlCRFx1MDlDRVx1MDlEQ1x1MDlERFx1MDlERi1cdTA5RTFcdTA5RjBcdTA5RjFcdTBBMDUtXHUwQTBBXXxbXHUwQTBGXHUwQTEwXHUwQTEzLVx1MEEyOFx1MEEyQS1cdTBBMzBcdTBBMzJcdTBBMzNcdTBBMzVcdTBBMzZcdTBBMzhcdTBBMzldfFtcdTBBNTktXHUwQTVDXHUwQTVFXHUwQTcyLVx1MEE3NFx1MEE4NS1cdTBBOERcdTBBOEYtXHUwQTkxXHUwQTkzLVx1MEFBOF18W1x1MEFBQS1cdTBBQjBcdTBBQjJcdTBBQjNcdTBBQjUtXHUwQUI5XHUwQUJEXHUwQUQwXHUwQUUwXHUwQUUxXHUwQjA1LVx1MEIwQ118W1x1MEIwRlx1MEIxMFx1MEIxMy1cdTBCMjhcdTBCMkEtXHUwQjMwXHUwQjMyXHUwQjMzXHUwQjM1LVx1MEIzOVx1MEIzRFx1MEI1Q118W1x1MEI1RFx1MEI1Ri1cdTBCNjFcdTBCNzFcdTBCODNcdTBCODUtXHUwQjhBXHUwQjhFLVx1MEI5MFx1MEI5Mi1cdTBCOTVcdTBCOTldfFtcdTBCOUFcdTBCOUNcdTBCOUVcdTBCOUZcdTBCQTNcdTBCQTRcdTBCQTgtXHUwQkFBXHUwQkFFLVx1MEJCOVx1MEJEMF18W1x1MEMwNS1cdTBDMENcdTBDMEUtXHUwQzEwXHUwQzEyLVx1MEMyOFx1MEMyQS1cdTBDMzNcdTBDMzUtXHUwQzM5XHUwQzNEXXxbXHUwQzU4XHUwQzU5XHUwQzYwXHUwQzYxXHUwQzg1LVx1MEM4Q1x1MEM4RS1cdTBDOTBcdTBDOTItXHUwQ0E4XHUwQ0FBLVx1MENCM118W1x1MENCNS1cdTBDQjlcdTBDQkRcdTBDREVcdTBDRTBcdTBDRTFcdTBDRjFcdTBDRjJcdTBEMDUtXHUwRDBDXHUwRDBFLVx1MEQxMF18W1x1MEQxMi1cdTBEM0FcdTBEM0RcdTBENEVcdTBENjBcdTBENjFcdTBEN0EtXHUwRDdGXHUwRDg1LVx1MEQ5Nlx1MEQ5QS1cdTBEQjFdfFtcdTBEQjMtXHUwREJCXHUwREJEXHUwREMwLVx1MERDNlx1MEUwMS1cdTBFMzBcdTBFMzJcdTBFMzNcdTBFNDAtXHUwRTQ2XHUwRTgxXXxbXHUwRTgyXHUwRTg0XHUwRTg3XHUwRTg4XHUwRThBXHUwRThEXHUwRTk0LVx1MEU5N1x1MEU5OS1cdTBFOUZcdTBFQTEtXHUwRUEzXXxbXHUwRUE1XHUwRUE3XHUwRUFBXHUwRUFCXHUwRUFELVx1MEVCMFx1MEVCMlx1MEVCM1x1MEVCRFx1MEVDMC1cdTBFQzRcdTBFQzZdfFtcdTBFREMtXHUwRURGXHUwRjAwXHUwRjQwLVx1MEY0N1x1MEY0OS1cdTBGNkNcdTBGODgtXHUwRjhDXHUxMDAwLVx1MTAyQV18W1x1MTAzRlx1MTA1MC1cdTEwNTVcdTEwNUEtXHUxMDVEXHUxMDYxXHUxMDY1XHUxMDY2XHUxMDZFLVx1MTA3MFx1MTA3NS1cdTEwODFdfFtcdTEwOEVcdTEwQTAtXHUxMEM1XHUxMEM3XHUxMENEXHUxMEQwLVx1MTBGQVx1MTBGQy1cdTEyNDhcdTEyNEEtXHUxMjREXXxbXHUxMjUwLVx1MTI1Nlx1MTI1OFx1MTI1QS1cdTEyNURcdTEyNjAtXHUxMjg4XHUxMjhBLVx1MTI4RFx1MTI5MC1cdTEyQjBdfFtcdTEyQjItXHUxMkI1XHUxMkI4LVx1MTJCRVx1MTJDMFx1MTJDMi1cdTEyQzVcdTEyQzgtXHUxMkQ2XHUxMkQ4LVx1MTMxMF18W1x1MTMxMi1cdTEzMTVcdTEzMTgtXHUxMzVBXHUxMzgwLVx1MTM4Rlx1MTNBMC1cdTEzRjRcdTE0MDEtXHUxNjZDXXxbXHUxNjZGLVx1MTY3Rlx1MTY4MS1cdTE2OUFcdTE2QTAtXHUxNkVBXHUxNzAwLVx1MTcwQ1x1MTcwRS1cdTE3MTFdfFtcdTE3MjAtXHUxNzMxXHUxNzQwLVx1MTc1MVx1MTc2MC1cdTE3NkNcdTE3NkUtXHUxNzcwXHUxNzgwLVx1MTdCM1x1MTdEN118W1x1MTdEQ1x1MTgyMC1cdTE4NzdcdTE4ODAtXHUxOEE4XHUxOEFBXHUxOEIwLVx1MThGNVx1MTkwMC1cdTE5MUNdfFtcdTE5NTAtXHUxOTZEXHUxOTcwLVx1MTk3NFx1MTk4MC1cdTE5QUJcdTE5QzEtXHUxOUM3XHUxQTAwLVx1MUExNl18W1x1MUEyMC1cdTFBNTRcdTFBQTdcdTFCMDUtXHUxQjMzXHUxQjQ1LVx1MUI0Qlx1MUI4My1cdTFCQTBcdTFCQUVcdTFCQUZdfFtcdTFCQkEtXHUxQkU1XHUxQzAwLVx1MUMyM1x1MUM0RC1cdTFDNEZcdTFDNUEtXHUxQzdEXHUxQ0U5LVx1MUNFQ118W1x1MUNFRS1cdTFDRjFcdTFDRjVcdTFDRjZcdTFEMDAtXHUxREJGXHUxRTAwLVx1MUYxNVx1MUYxOC1cdTFGMURdfFtcdTFGMjAtXHUxRjQ1XHUxRjQ4LVx1MUY0RFx1MUY1MC1cdTFGNTdcdTFGNTlcdTFGNUJcdTFGNURcdTFGNUYtXHUxRjdEXXxbXHUxRjgwLVx1MUZCNFx1MUZCNi1cdTFGQkNcdTFGQkVcdTFGQzItXHUxRkM0XHUxRkM2LVx1MUZDQ1x1MUZEMC1cdTFGRDNdfFtcdTFGRDYtXHUxRkRCXHUxRkUwLVx1MUZFQ1x1MUZGMi1cdTFGRjRcdTFGRjYtXHUxRkZDXHUyMDcxXHUyMDdGXXxbXHUyMDkwLVx1MjA5Q1x1MjEwMlx1MjEwN1x1MjEwQS1cdTIxMTNcdTIxMTVcdTIxMTktXHUyMTFEXHUyMTI0XHUyMTI2XHUyMTI4XXxbXHUyMTJBLVx1MjEyRFx1MjEyRi1cdTIxMzlcdTIxM0MtXHUyMTNGXHUyMTQ1LVx1MjE0OVx1MjE0RVx1MjE4M1x1MjE4NF18W1x1MkMwMC1cdTJDMkVcdTJDMzAtXHUyQzVFXHUyQzYwLVx1MkNFNFx1MkNFQi1cdTJDRUVcdTJDRjJcdTJDRjNdfFtcdTJEMDAtXHUyRDI1XHUyRDI3XHUyRDJEXHUyRDMwLVx1MkQ2N1x1MkQ2Rlx1MkQ4MC1cdTJEOTZcdTJEQTAtXHUyREE2XXxbXHUyREE4LVx1MkRBRVx1MkRCMC1cdTJEQjZcdTJEQjgtXHUyREJFXHUyREMwLVx1MkRDNlx1MkRDOC1cdTJEQ0VdfFtcdTJERDAtXHUyREQ2XHUyREQ4LVx1MkRERVx1MkUyRlx1MzAwNVx1MzAwNlx1MzAzMS1cdTMwMzVcdTMwM0JcdTMwM0NdfFtcdTMwNDEtXHUzMDk2XHUzMDlELVx1MzA5Rlx1MzBBMS1cdTMwRkFcdTMwRkMtXHUzMEZGXHUzMTA1LVx1MzEyRF18W1x1MzEzMS1cdTMxOEVcdTMxQTAtXHUzMUJBXHUzMUYwLVx1MzFGRlx1MzQwMC1cdTREQjVcdTRFMDAtXHU5RkNDXXxbXHVBMDAwLVx1QTQ4Q1x1QTREMC1cdUE0RkRcdUE1MDAtXHVBNjBDXHVBNjEwLVx1QTYxRlx1QTYyQVx1QTYyQl18W1x1QTY0MC1cdUE2NkVcdUE2N0YtXHVBNjk3XHVBNkEwLVx1QTZFNVx1QTcxNy1cdUE3MUZcdUE3MjItXHVBNzg4XXxbXHVBNzhCLVx1QTc4RVx1QTc5MC1cdUE3OTNcdUE3QTAtXHVBN0FBXHVBN0Y4LVx1QTgwMVx1QTgwMy1cdUE4MDVdfFtcdUE4MDctXHVBODBBXHVBODBDLVx1QTgyMlx1QTg0MC1cdUE4NzNcdUE4ODItXHVBOEIzXHVBOEYyLVx1QThGN1x1QThGQl18W1x1QTkwQS1cdUE5MjVcdUE5MzAtXHVBOTQ2XHVBOTYwLVx1QTk3Q1x1QTk4NC1cdUE5QjJcdUE5Q0ZcdUFBMDAtXHVBQTI4XXxbXHVBQTQwLVx1QUE0Mlx1QUE0NC1cdUFBNEJcdUFBNjAtXHVBQTc2XHVBQTdBXHVBQTgwLVx1QUFBRlx1QUFCMVx1QUFCNV18W1x1QUFCNlx1QUFCOS1cdUFBQkRcdUFBQzBcdUFBQzJcdUFBREItXHVBQUREXHVBQUUwLVx1QUFFQVx1QUFGMi1cdUFBRjRdfFtcdUFCMDEtXHVBQjA2XHVBQjA5LVx1QUIwRVx1QUIxMS1cdUFCMTZcdUFCMjAtXHVBQjI2XHVBQjI4LVx1QUIyRV18W1x1QUJDMC1cdUFCRTJcdUFDMDAtXHVEN0EzXHVEN0IwLVx1RDdDNlx1RDdDQi1cdUQ3RkJcdUY5MDAtXHVGQTZEXXxbXHVGQTcwLVx1RkFEOVx1RkIwMC1cdUZCMDZcdUZCMTMtXHVGQjE3XHVGQjFEXHVGQjFGLVx1RkIyOFx1RkIyQS1cdUZCMzZdfFtcdUZCMzgtXHVGQjNDXHVGQjNFXHVGQjQwXHVGQjQxXHVGQjQzXHVGQjQ0XHVGQjQ2LVx1RkJCMVx1RkJEMy1cdUZEM0RdfFtcdUZENTAtXHVGRDhGXHVGRDkyLVx1RkRDN1x1RkRGMC1cdUZERkJcdUZFNzAtXHVGRTc0XHVGRTc2LVx1RkVGQ118W1x1RkYyMS1cdUZGM0FcdUZGNDEtXHVGRjVBXHVGRjY2LVx1RkZCRVx1RkZDMi1cdUZGQzdcdUZGQ0EtXHVGRkNGXXxbXHVGRkQyLVx1RkZEN1x1RkZEQS1cdUZGRENdKS8sL14oPzpcfCkvLC9eKD86XHwpLywvXig/OlwpKS8sL14oPzpcKCkvLC9eKD86XF0pLywvXig/OlxbKS8sL14oPzooXH0pKS8sL14oPzpceykvLC9eKD86W15cW1xdXChcKVx7XH1cfFwiXSspLywvXig/OiIpLywvXig/Oihccj9cbikrKS8sL14oPzpccykvLC9eKD86JCkvXSxjb25kaXRpb25zOntzaGFwZURhdGFFbmRCcmFja2V0OntydWxlczpbMjEsMjQsNzcsODAsODIsODQsODgsOTAsOTQsOTUsMTA4LDExMCwxMTIsMTE0XSxpbmNsdXNpdmU6ITF9LHNoYXBlRGF0YVN0cjp7cnVsZXM6WzksMTAsMjEsMjQsNzcsODAsODIsODQsODgsOTAsOTQsOTUsMTA4LDExMCwxMTIsMTE0XSxpbmNsdXNpdmU6ITF9LHNoYXBlRGF0YTp7cnVsZXM6WzgsMTEsMTIsMjEsMjQsNzcsODAsODIsODQsODgsOTAsOTQsOTUsMTA4LDExMCwxMTIsMTE0XSxpbmNsdXNpdmU6ITF9LGNhbGxiYWNrYXJnczp7cnVsZXM6WzE3LDE4LDIxLDI0LDc3LDgwLDgyLDg0LDg4LDkwLDk0LDk1LDEwOCwxMTAsMTEyLDExNF0saW5jbHVzaXZlOiExfSxjYWxsYmFja25hbWU6e3J1bGVzOlsxNCwxNSwxNiwyMSwyNCw3Nyw4MCw4Miw4NCw4OCw5MCw5NCw5NSwxMDgsMTEwLDExMiwxMTRdLGluY2x1c2l2ZTohMX0saHJlZjp7cnVsZXM6WzIxLDI0LDc3LDgwLDgyLDg0LDg4LDkwLDk0LDk1LDEwOCwxMTAsMTEyLDExNF0saW5jbHVzaXZlOiExfSxjbGljazp7cnVsZXM6WzIxLDI0LDMzLDM0LDc3LDgwLDgyLDg0LDg4LDkwLDk0LDk1LDEwOCwxMTAsMTEyLDExNF0saW5jbHVzaXZlOiExfSxkb3R0ZWRFZGdlVGV4dDp7cnVsZXM6WzIxLDI0LDc0LDc2LDc3LDgwLDgyLDg0LDg4LDkwLDk0LDk1LDEwOCwxMTAsMTEyLDExNF0saW5jbHVzaXZlOiExfSx0aGlja0VkZ2VUZXh0OntydWxlczpbMjEsMjQsNzEsNzMsNzcsODAsODIsODQsODgsOTAsOTQsOTUsMTA4LDExMCwxMTIsMTE0XSxpbmNsdXNpdmU6ITF9LGVkZ2VUZXh0OntydWxlczpbMjEsMjQsNjgsNzAsNzcsODAsODIsODQsODgsOTAsOTQsOTUsMTA4LDExMCwxMTIsMTE0XSxpbmNsdXNpdmU6ITF9LHRyYXBUZXh0OntydWxlczpbMjEsMjQsNzcsODAsODIsODQsODgsOTAsOTEsOTIsOTMsOTQsOTUsMTA4LDExMCwxMTIsMTE0XSxpbmNsdXNpdmU6ITF9LGVsbGlwc2VUZXh0OntydWxlczpbMjEsMjQsNzcsNzgsNzksODAsODIsODQsODgsOTAsOTQsOTUsMTA4LDExMCwxMTIsMTE0XSxpbmNsdXNpdmU6ITF9LHRleHQ6e3J1bGVzOlsyMSwyNCw3Nyw4MCw4MSw4Miw4Myw4NCw4Nyw4OCw4OSw5MCw5NCw5NSwxMDcsMTA4LDEwOSwxMTAsMTExLDExMiwxMTMsMTE0LDExNV0saW5jbHVzaXZlOiExfSx2ZXJ0ZXg6e3J1bGVzOlsyMSwyNCw3Nyw4MCw4Miw4NCw4OCw5MCw5NCw5NSwxMDgsMTEwLDExMiwxMTRdLGluY2x1c2l2ZTohMX0sZGlyOntydWxlczpbMjEsMjQsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNzcsODAsODIsODQsODgsOTAsOTQsOTUsMTA4LDExMCwxMTIsMTE0XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOls1LDYsMjEsMjQsNzcsODAsODIsODQsODgsOTAsOTQsOTUsMTA4LDExMCwxMTIsMTE0XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzMsMjEsMjQsNzcsODAsODIsODQsODgsOTAsOTQsOTUsMTA4LDExMCwxMTIsMTE0XSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzEsMjEsMjQsNzcsODAsODIsODQsODgsOTAsOTQsOTUsMTA4LDExMCwxMTIsMTE0XSxpbmNsdXNpdmU6ITF9LG1kX3N0cmluZzp7cnVsZXM6WzE5LDIwLDIxLDI0LDc3LDgwLDgyLDg0LDg4LDkwLDk0LDk1LDEwOCwxMTAsMTEyLDExNF0saW5jbHVzaXZlOiExfSxzdHJpbmc6e3J1bGVzOlsyMSwyMiwyMywyNCw3Nyw4MCw4Miw4NCw4OCw5MCw5NCw5NSwxMDgsMTEwLDExMiwxMTRdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMiw0LDcsMTMsMjEsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzEsNzIsNzQsNzUsNzcsODAsODIsODQsODUsODYsODgsOTAsOTQsOTUsOTYsOTcsOTgsOTksMTAwLDEwMSwxMDIsMTAzLDEwNCwxMDUsMTA2LDEwOCwxMTAsMTEyLDExNCwxMTYsMTE3LDExOCwxMTldLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gSHJ9KCk7TmkubGV4ZXI9Wm47ZnVuY3Rpb24gU24oKXt0aGlzLnl5PXt9fXJldHVybiBvKFNuLCJQYXJzZXIiKSxTbi5wcm90b3R5cGU9TmksTmkuUGFyc2VyPVNuLG5ldyBTbn0oKTt4Ui5wYXJzZXI9eFI7YlI9eFJ9KTt2YXIgVWllLEhpZSxXaWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtWaWUoKTtVaWU9T2JqZWN0LmFzc2lnbih7fSxiUik7VWllLnBhcnNlPXQ9PntsZXQgZT10LnJlcGxhY2UoL31ccypcbi9nLGB9CmApO3JldHVybiBiUi5wYXJzZShlKX07SGllPVVpZX0pO3ZhciBnT2UseU9lLHFpZSxZaWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtZcygpO2dPZT1vKCh0LGUpPT57bGV0IHI9S2Ysbj1yKHQsInIiKSxpPXIodCwiZyIpLGE9cih0LCJiIik7cmV0dXJuIHFhKG4saSxhLGUpfSwiZmFkZSIpLHlPZT1vKHQ9PmAubGFiZWwgewogICAgZm9udC1mYW1pbHk6ICR7dC5mb250RmFtaWx5fTsKICAgIGNvbG9yOiAke3Qubm9kZVRleHRDb2xvcnx8dC50ZXh0Q29sb3J9OwogIH0KICAuY2x1c3Rlci1sYWJlbCB0ZXh0IHsKICAgIGZpbGw6ICR7dC50aXRsZUNvbG9yfTsKICB9CiAgLmNsdXN0ZXItbGFiZWwgc3BhbiB7CiAgICBjb2xvcjogJHt0LnRpdGxlQ29sb3J9OwogIH0KICAuY2x1c3Rlci1sYWJlbCBzcGFuIHAgewogICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgfQoKICAubGFiZWwgdGV4dCxzcGFuIHsKICAgIGZpbGw6ICR7dC5ub2RlVGV4dENvbG9yfHx0LnRleHRDb2xvcn07CiAgICBjb2xvcjogJHt0Lm5vZGVUZXh0Q29sb3J8fHQudGV4dENvbG9yfTsKICB9CgogIC5ub2RlIHJlY3QsCiAgLm5vZGUgY2lyY2xlLAogIC5ub2RlIGVsbGlwc2UsCiAgLm5vZGUgcG9seWdvbiwKICAubm9kZSBwYXRoIHsKICAgIGZpbGw6ICR7dC5tYWluQmtnfTsKICAgIHN0cm9rZTogJHt0Lm5vZGVCb3JkZXJ9OwogICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgfQogIC5yb3VnaC1ub2RlIC5sYWJlbCB0ZXh0ICwgLm5vZGUgLmxhYmVsIHRleHQsIC5pbWFnZS1zaGFwZSAubGFiZWwsIC5pY29uLXNoYXBlIC5sYWJlbCB7CiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogIH0KICAvLyAuZmxvd2NoYXJ0LWxhYmVsIC50ZXh0LW91dGVyLXRzcGFuIHsKICAvLyAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgLy8gfQogIC8vIC5mbG93Y2hhcnQtbGFiZWwgLnRleHQtaW5uZXItdHNwYW4gewogIC8vICAgdGV4dC1hbmNob3I6IHN0YXJ0OwogIC8vIH0KCiAgLm5vZGUgLmthdGV4IHBhdGggewogICAgZmlsbDogIzAwMDsKICAgIHN0cm9rZTogIzAwMDsKICAgIHN0cm9rZS13aWR0aDogMXB4OwogIH0KCiAgLnJvdWdoLW5vZGUgLmxhYmVsLC5ub2RlIC5sYWJlbCwgLmltYWdlLXNoYXBlIC5sYWJlbCwgLmljb24tc2hhcGUgLmxhYmVsIHsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICB9CiAgLm5vZGUuY2xpY2thYmxlIHsKICAgIGN1cnNvcjogcG9pbnRlcjsKICB9CgoKICAucm9vdCAuYW5jaG9yIHBhdGggewogICAgZmlsbDogJHt0LmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICAgIHN0cm9rZS13aWR0aDogMDsKICAgIHN0cm9rZTogJHt0LmxpbmVDb2xvcn07CiAgfQoKICAuYXJyb3doZWFkUGF0aCB7CiAgICBmaWxsOiAke3QuYXJyb3doZWFkQ29sb3J9OwogIH0KCiAgLmVkZ2VQYXRoIC5wYXRoIHsKICAgIHN0cm9rZTogJHt0LmxpbmVDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6IDIuMHB4OwogIH0KCiAgLmZsb3djaGFydC1saW5rIHsKICAgIHN0cm9rZTogJHt0LmxpbmVDb2xvcn07CiAgICBmaWxsOiBub25lOwogIH0KCiAgLmVkZ2VMYWJlbCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3QuZWRnZUxhYmVsQmFja2dyb3VuZH07CiAgICBwIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHt0LmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgfQogICAgcmVjdCB7CiAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHt0LmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgICBmaWxsOiAke3QuZWRnZUxhYmVsQmFja2dyb3VuZH07CiAgICB9CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgfQoKICAvKiBGb3IgaHRtbCBsYWJlbHMgb25seSAqLwogIC5sYWJlbEJrZyB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2dPZSh0LmVkZ2VMYWJlbEJhY2tncm91bmQsLjUpfTsKICAgIC8vIGJhY2tncm91bmQtY29sb3I6CiAgfQoKICAuY2x1c3RlciByZWN0IHsKICAgIGZpbGw6ICR7dC5jbHVzdGVyQmtnfTsKICAgIHN0cm9rZTogJHt0LmNsdXN0ZXJCb3JkZXJ9OwogICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgfQoKICAuY2x1c3RlciB0ZXh0IHsKICAgIGZpbGw6ICR7dC50aXRsZUNvbG9yfTsKICB9CgogIC5jbHVzdGVyIHNwYW4gewogICAgY29sb3I6ICR7dC50aXRsZUNvbG9yfTsKICB9CiAgLyogLmNsdXN0ZXIgZGl2IHsKICAgIGNvbG9yOiAke3QudGl0bGVDb2xvcn07CiAgfSAqLwoKICBkaXYubWVybWFpZFRvb2x0aXAgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgbWF4LXdpZHRoOiAyMDBweDsKICAgIHBhZGRpbmc6IDJweDsKICAgIGZvbnQtZmFtaWx5OiAke3QuZm9udEZhbWlseX07CiAgICBmb250LXNpemU6IDEycHg7CiAgICBiYWNrZ3JvdW5kOiAke3QudGVydGlhcnlDb2xvcn07CiAgICBib3JkZXI6IDFweCBzb2xpZCAke3QuYm9yZGVyMn07CiAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IDEwMDsKICB9CgogIC5mbG93Y2hhcnRUaXRsZVRleHQgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIGZvbnQtc2l6ZTogMThweDsKICAgIGZpbGw6ICR7dC50ZXh0Q29sb3J9OwogIH0KCiAgcmVjdC50ZXh0IHsKICAgIGZpbGw6IG5vbmU7CiAgICBzdHJva2Utd2lkdGg6IDA7CiAgfQoKICAuaWNvbi1zaGFwZSwgLmltYWdlLXNoYXBlIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICR7dC5lZGdlTGFiZWxCYWNrZ3JvdW5kfTsKICAgIHAgewogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3QuZWRnZUxhYmVsQmFja2dyb3VuZH07CiAgICAgIHBhZGRpbmc6IDJweDsKICAgIH0KICAgIHJlY3QgewogICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7dC5lZGdlTGFiZWxCYWNrZ3JvdW5kfTsKICAgICAgZmlsbDogJHt0LmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgfQogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KYCwiZ2V0U3R5bGVzIikscWllPXlPZX0pO3ZhciBpaz17fTtocihpayx7ZGlhZ3JhbTooKT0+dk9lfSk7dmFyIHZPZSxhaz1OKCgpPT57InVzZSBzdHJpY3QiO3p0KCk7cVooKTtHaWUoKTtXaWUoKTtZaWUoKTt2T2U9e3BhcnNlcjpIaWUsZ2V0IGRiKCl7cmV0dXJuIG5ldyBVd30scmVuZGVyZXI6emllLHN0eWxlczpxaWUsaW5pdDpvKHQ9Pnt0LmZsb3djaGFydHx8KHQuZmxvd2NoYXJ0PXt9KSx0LmxheW91dCYmWXkoe2xheW91dDp0LmxheW91dH0pLHQuZmxvd2NoYXJ0LmFycm93TWFya2VyQWJzb2x1dGU9dC5hcnJvd01hcmtlckFic29sdXRlLFl5KHtmbG93Y2hhcnQ6e2Fycm93TWFya2VyQWJzb2x1dGU6dC5hcnJvd01hcmtlckFic29sdXRlfX0pfSwiaW5pdCIpfX0pO3ZhciB3UixaaWUsSmllPU4oKCk9PnsidXNlIHN0cmljdCI7d1I9ZnVuY3Rpb24oKXt2YXIgdD1vKGZ1bmN0aW9uKEosc2UsdWUsWil7Zm9yKHVlPXVlfHx7fSxaPUoubGVuZ3RoO1otLTt1ZVtKW1pdXT1zZSk7cmV0dXJuIHVlfSwibyIpLGU9WzYsOCwxMCwyMiwyNCwyNiwyOCwzMywzNCwzNSwzNiwzNyw0MCw0Myw0NCw1MF0scj1bMSwxMF0sbj1bMSwxMV0saT1bMSwxMl0sYT1bMSwxM10scz1bMSwyMF0sbD1bMSwyMV0sdT1bMSwyMl0saD1bMSwyM10sZj1bMSwyNF0sZD1bMSwxOV0scD1bMSwyNV0sbT1bMSwyNl0sZz1bMSwxOF0seT1bMSwzM10sdj1bMSwzNF0seD1bMSwzNV0sYj1bMSwzNl0sdz1bMSwzN10sQz1bNiw4LDEwLDEzLDE1LDE3LDIwLDIxLDIyLDI0LDI2LDI4LDMzLDM0LDM1LDM2LDM3LDQwLDQzLDQ0LDUwLDYzLDY0LDY1LDY2LDY3XSxUPVsxLDQyXSxFPVsxLDQzXSxBPVsxLDUyXSxTPVs0MCw1MCw2OCw2OV0sXz1bMSw2M10sST1bMSw2MV0sRD1bMSw1OF0saz1bMSw2Ml0sTD1bMSw2NF0sUj1bNiw4LDEwLDEzLDE3LDIyLDI0LDI2LDI4LDMzLDM0LDM1LDM2LDM3LDQwLDQxLDQyLDQzLDQ0LDQ4LDQ5LDUwLDYzLDY0LDY1LDY2LDY3XSxPPVs2Myw2NCw2NSw2Niw2N10sTT1bMSw4MV0sQj1bMSw4MF0sRj1bMSw3OF0sUD1bMSw3OV0sej1bNiwxMCw0Miw0N10sJD1bNiwxMCwxMyw0MSw0Miw0Nyw0OCw0OV0sSD1bMSw4OV0sUT1bMSw4OF0saj1bMSw4N10saWU9WzE5LDU2XSxuZT1bMSw5OF0sbGU9WzEsOTddLGhlPVsxOSw1Niw1OCw2MF0sSz17dHJhY2U6byhmdW5jdGlvbigpe30sInRyYWNlIikseXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxFUl9ESUFHUkFNOjQsZG9jdW1lbnQ6NSxFT0Y6NixsaW5lOjcsU1BBQ0U6OCxzdGF0ZW1lbnQ6OSxORVdMSU5FOjEwLGVudGl0eU5hbWU6MTEscmVsU3BlYzoxMixDT0xPTjoxMyxyb2xlOjE0LFNUWUxFX1NFUEFSQVRPUjoxNSxpZExpc3Q6MTYsQkxPQ0tfU1RBUlQ6MTcsYXR0cmlidXRlczoxOCxCTE9DS19TVE9QOjE5LFNRUzoyMCxTUUU6MjEsdGl0bGU6MjIsdGl0bGVfdmFsdWU6MjMsYWNjX3RpdGxlOjI0LGFjY190aXRsZV92YWx1ZToyNSxhY2NfZGVzY3I6MjYsYWNjX2Rlc2NyX3ZhbHVlOjI3LGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6MjgsZGlyZWN0aW9uOjI5LGNsYXNzRGVmU3RhdGVtZW50OjMwLGNsYXNzU3RhdGVtZW50OjMxLHN0eWxlU3RhdGVtZW50OjMyLGRpcmVjdGlvbl90YjozMyxkaXJlY3Rpb25fYnQ6MzQsZGlyZWN0aW9uX3JsOjM1LGRpcmVjdGlvbl9scjozNixDTEFTU0RFRjozNyxzdHlsZXNPcHQ6Mzgsc2VwYXJhdG9yOjM5LFVOSUNPREVfVEVYVDo0MCxTVFlMRV9URVhUOjQxLENPTU1BOjQyLENMQVNTOjQzLFNUWUxFOjQ0LHN0eWxlOjQ1LHN0eWxlQ29tcG9uZW50OjQ2LFNFTUk6NDcsTlVNOjQ4LEJSS1Q6NDksRU5USVRZX05BTUU6NTAsYXR0cmlidXRlOjUxLGF0dHJpYnV0ZVR5cGU6NTIsYXR0cmlidXRlTmFtZTo1MyxhdHRyaWJ1dGVLZXlUeXBlTGlzdDo1NCxhdHRyaWJ1dGVDb21tZW50OjU1LEFUVFJJQlVURV9XT1JEOjU2LGF0dHJpYnV0ZUtleVR5cGU6NTcsIiwiOjU4LEFUVFJJQlVURV9LRVk6NTksQ09NTUVOVDo2MCxjYXJkaW5hbGl0eTo2MSxyZWxUeXBlOjYyLFpFUk9fT1JfT05FOjYzLFpFUk9fT1JfTU9SRTo2NCxPTkVfT1JfTU9SRTo2NSxPTkxZX09ORTo2NixNRF9QQVJFTlQ6NjcsTk9OX0lERU5USUZZSU5HOjY4LElERU5USUZZSU5HOjY5LFdPUkQ6NzAsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6IkVSX0RJQUdSQU0iLDY6IkVPRiIsODoiU1BBQ0UiLDEwOiJORVdMSU5FIiwxMzoiQ09MT04iLDE1OiJTVFlMRV9TRVBBUkFUT1IiLDE3OiJCTE9DS19TVEFSVCIsMTk6IkJMT0NLX1NUT1AiLDIwOiJTUVMiLDIxOiJTUUUiLDIyOiJ0aXRsZSIsMjM6InRpdGxlX3ZhbHVlIiwyNDoiYWNjX3RpdGxlIiwyNToiYWNjX3RpdGxlX3ZhbHVlIiwyNjoiYWNjX2Rlc2NyIiwyNzoiYWNjX2Rlc2NyX3ZhbHVlIiwyODoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMzM6ImRpcmVjdGlvbl90YiIsMzQ6ImRpcmVjdGlvbl9idCIsMzU6ImRpcmVjdGlvbl9ybCIsMzY6ImRpcmVjdGlvbl9sciIsMzc6IkNMQVNTREVGIiw0MDoiVU5JQ09ERV9URVhUIiw0MToiU1RZTEVfVEVYVCIsNDI6IkNPTU1BIiw0MzoiQ0xBU1MiLDQ0OiJTVFlMRSIsNDc6IlNFTUkiLDQ4OiJOVU0iLDQ5OiJCUktUIiw1MDoiRU5USVRZX05BTUUiLDU2OiJBVFRSSUJVVEVfV09SRCIsNTg6IiwiLDU5OiJBVFRSSUJVVEVfS0VZIiw2MDoiQ09NTUVOVCIsNjM6IlpFUk9fT1JfT05FIiw2NDoiWkVST19PUl9NT1JFIiw2NToiT05FX09SX01PUkUiLDY2OiJPTkxZX09ORSIsNjc6Ik1EX1BBUkVOVCIsNjg6Ik5PTl9JREVOVElGWUlORyIsNjk6IklERU5USUZZSU5HIiw3MDoiV09SRCJ9LHByb2R1Y3Rpb25zXzpbMCxbMywzXSxbNSwwXSxbNSwyXSxbNywyXSxbNywxXSxbNywxXSxbNywxXSxbOSw1XSxbOSw5XSxbOSw3XSxbOSw3XSxbOSw0XSxbOSw2XSxbOSwzXSxbOSw1XSxbOSwxXSxbOSwzXSxbOSw3XSxbOSw5XSxbOSw2XSxbOSw4XSxbOSw0XSxbOSw2XSxbOSwyXSxbOSwyXSxbOSwyXSxbOSwxXSxbOSwxXSxbOSwxXSxbOSwxXSxbOSwxXSxbMjksMV0sWzI5LDFdLFsyOSwxXSxbMjksMV0sWzMwLDRdLFsxNiwxXSxbMTYsMV0sWzE2LDNdLFsxNiwzXSxbMzEsM10sWzMyLDRdLFszOCwxXSxbMzgsM10sWzQ1LDFdLFs0NSwyXSxbMzksMV0sWzM5LDFdLFszOSwxXSxbNDYsMV0sWzQ2LDFdLFs0NiwxXSxbNDYsMV0sWzExLDFdLFsxMSwxXSxbMTgsMV0sWzE4LDJdLFs1MSwyXSxbNTEsM10sWzUxLDNdLFs1MSw0XSxbNTIsMV0sWzUzLDFdLFs1NCwxXSxbNTQsM10sWzU3LDFdLFs1NSwxXSxbMTIsM10sWzYxLDFdLFs2MSwxXSxbNjEsMV0sWzYxLDFdLFs2MSwxXSxbNjIsMV0sWzYyLDFdLFsxNCwxXSxbMTQsMV0sWzE0LDFdXSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24oc2UsdWUsWixTZSxjZSxhZSxPZSl7dmFyIGdlPWFlLmxlbmd0aC0xO3N3aXRjaChjZSl7Y2FzZSAxOmJyZWFrO2Nhc2UgMjp0aGlzLiQ9W107YnJlYWs7Y2FzZSAzOmFlW2dlLTFdLnB1c2goYWVbZ2VdKSx0aGlzLiQ9YWVbZ2UtMV07YnJlYWs7Y2FzZSA0OmNhc2UgNTp0aGlzLiQ9YWVbZ2VdO2JyZWFrO2Nhc2UgNjpjYXNlIDc6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgODpTZS5hZGRFbnRpdHkoYWVbZ2UtNF0pLFNlLmFkZEVudGl0eShhZVtnZS0yXSksU2UuYWRkUmVsYXRpb25zaGlwKGFlW2dlLTRdLGFlW2dlXSxhZVtnZS0yXSxhZVtnZS0zXSk7YnJlYWs7Y2FzZSA5OlNlLmFkZEVudGl0eShhZVtnZS04XSksU2UuYWRkRW50aXR5KGFlW2dlLTRdKSxTZS5hZGRSZWxhdGlvbnNoaXAoYWVbZ2UtOF0sYWVbZ2VdLGFlW2dlLTRdLGFlW2dlLTVdKSxTZS5zZXRDbGFzcyhbYWVbZ2UtOF1dLGFlW2dlLTZdKSxTZS5zZXRDbGFzcyhbYWVbZ2UtNF1dLGFlW2dlLTJdKTticmVhaztjYXNlIDEwOlNlLmFkZEVudGl0eShhZVtnZS02XSksU2UuYWRkRW50aXR5KGFlW2dlLTJdKSxTZS5hZGRSZWxhdGlvbnNoaXAoYWVbZ2UtNl0sYWVbZ2VdLGFlW2dlLTJdLGFlW2dlLTNdKSxTZS5zZXRDbGFzcyhbYWVbZ2UtNl1dLGFlW2dlLTRdKTticmVhaztjYXNlIDExOlNlLmFkZEVudGl0eShhZVtnZS02XSksU2UuYWRkRW50aXR5KGFlW2dlLTRdKSxTZS5hZGRSZWxhdGlvbnNoaXAoYWVbZ2UtNl0sYWVbZ2VdLGFlW2dlLTRdLGFlW2dlLTVdKSxTZS5zZXRDbGFzcyhbYWVbZ2UtNF1dLGFlW2dlLTJdKTticmVhaztjYXNlIDEyOlNlLmFkZEVudGl0eShhZVtnZS0zXSksU2UuYWRkQXR0cmlidXRlcyhhZVtnZS0zXSxhZVtnZS0xXSk7YnJlYWs7Y2FzZSAxMzpTZS5hZGRFbnRpdHkoYWVbZ2UtNV0pLFNlLmFkZEF0dHJpYnV0ZXMoYWVbZ2UtNV0sYWVbZ2UtMV0pLFNlLnNldENsYXNzKFthZVtnZS01XV0sYWVbZ2UtM10pO2JyZWFrO2Nhc2UgMTQ6U2UuYWRkRW50aXR5KGFlW2dlLTJdKTticmVhaztjYXNlIDE1OlNlLmFkZEVudGl0eShhZVtnZS00XSksU2Uuc2V0Q2xhc3MoW2FlW2dlLTRdXSxhZVtnZS0yXSk7YnJlYWs7Y2FzZSAxNjpTZS5hZGRFbnRpdHkoYWVbZ2VdKTticmVhaztjYXNlIDE3OlNlLmFkZEVudGl0eShhZVtnZS0yXSksU2Uuc2V0Q2xhc3MoW2FlW2dlLTJdXSxhZVtnZV0pO2JyZWFrO2Nhc2UgMTg6U2UuYWRkRW50aXR5KGFlW2dlLTZdLGFlW2dlLTRdKSxTZS5hZGRBdHRyaWJ1dGVzKGFlW2dlLTZdLGFlW2dlLTFdKTticmVhaztjYXNlIDE5OlNlLmFkZEVudGl0eShhZVtnZS04XSxhZVtnZS02XSksU2UuYWRkQXR0cmlidXRlcyhhZVtnZS04XSxhZVtnZS0xXSksU2Uuc2V0Q2xhc3MoW2FlW2dlLThdXSxhZVtnZS0zXSk7YnJlYWs7Y2FzZSAyMDpTZS5hZGRFbnRpdHkoYWVbZ2UtNV0sYWVbZ2UtM10pO2JyZWFrO2Nhc2UgMjE6U2UuYWRkRW50aXR5KGFlW2dlLTddLGFlW2dlLTVdKSxTZS5zZXRDbGFzcyhbYWVbZ2UtN11dLGFlW2dlLTJdKTticmVhaztjYXNlIDIyOlNlLmFkZEVudGl0eShhZVtnZS0zXSxhZVtnZS0xXSk7YnJlYWs7Y2FzZSAyMzpTZS5hZGRFbnRpdHkoYWVbZ2UtNV0sYWVbZ2UtM10pLFNlLnNldENsYXNzKFthZVtnZS01XV0sYWVbZ2VdKTticmVhaztjYXNlIDI0OmNhc2UgMjU6dGhpcy4kPWFlW2dlXS50cmltKCksU2Uuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDI2OmNhc2UgMjc6dGhpcy4kPWFlW2dlXS50cmltKCksU2Uuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDMyOlNlLnNldERpcmVjdGlvbigiVEIiKTticmVhaztjYXNlIDMzOlNlLnNldERpcmVjdGlvbigiQlQiKTticmVhaztjYXNlIDM0OlNlLnNldERpcmVjdGlvbigiUkwiKTticmVhaztjYXNlIDM1OlNlLnNldERpcmVjdGlvbigiTFIiKTticmVhaztjYXNlIDM2OnRoaXMuJD1hZVtnZS0zXSxTZS5hZGRDbGFzcyhhZVtnZS0yXSxhZVtnZS0xXSk7YnJlYWs7Y2FzZSAzNzpjYXNlIDM4OmNhc2UgNTY6Y2FzZSA2NDp0aGlzLiQ9W2FlW2dlXV07YnJlYWs7Y2FzZSAzOTpjYXNlIDQwOnRoaXMuJD1hZVtnZS0yXS5jb25jYXQoW2FlW2dlXV0pO2JyZWFrO2Nhc2UgNDE6dGhpcy4kPWFlW2dlLTJdLFNlLnNldENsYXNzKGFlW2dlLTFdLGFlW2dlXSk7YnJlYWs7Y2FzZSA0Mjp0aGlzLiQ9YWVbZ2UtM10sU2UuYWRkQ3NzU3R5bGVzKGFlW2dlLTJdLGFlW2dlLTFdKTticmVhaztjYXNlIDQzOnRoaXMuJD1bYWVbZ2VdXTticmVhaztjYXNlIDQ0OmFlW2dlLTJdLnB1c2goYWVbZ2VdKSx0aGlzLiQ9YWVbZ2UtMl07YnJlYWs7Y2FzZSA0Njp0aGlzLiQ9YWVbZ2UtMV0rYWVbZ2VdO2JyZWFrO2Nhc2UgNTQ6Y2FzZSA3NjpjYXNlIDc3OnRoaXMuJD1hZVtnZV0ucmVwbGFjZSgvIi9nLCIiKTticmVhaztjYXNlIDU1OmNhc2UgNzg6dGhpcy4kPWFlW2dlXTticmVhaztjYXNlIDU3OmFlW2dlXS5wdXNoKGFlW2dlLTFdKSx0aGlzLiQ9YWVbZ2VdO2JyZWFrO2Nhc2UgNTg6dGhpcy4kPXt0eXBlOmFlW2dlLTFdLG5hbWU6YWVbZ2VdfTticmVhaztjYXNlIDU5OnRoaXMuJD17dHlwZTphZVtnZS0yXSxuYW1lOmFlW2dlLTFdLGtleXM6YWVbZ2VdfTticmVhaztjYXNlIDYwOnRoaXMuJD17dHlwZTphZVtnZS0yXSxuYW1lOmFlW2dlLTFdLGNvbW1lbnQ6YWVbZ2VdfTticmVhaztjYXNlIDYxOnRoaXMuJD17dHlwZTphZVtnZS0zXSxuYW1lOmFlW2dlLTJdLGtleXM6YWVbZ2UtMV0sY29tbWVudDphZVtnZV19O2JyZWFrO2Nhc2UgNjI6Y2FzZSA2MzpjYXNlIDY2OnRoaXMuJD1hZVtnZV07YnJlYWs7Y2FzZSA2NTphZVtnZS0yXS5wdXNoKGFlW2dlXSksdGhpcy4kPWFlW2dlLTJdO2JyZWFrO2Nhc2UgNjc6dGhpcy4kPWFlW2dlXS5yZXBsYWNlKC8iL2csIiIpO2JyZWFrO2Nhc2UgNjg6dGhpcy4kPXtjYXJkQTphZVtnZV0scmVsVHlwZTphZVtnZS0xXSxjYXJkQjphZVtnZS0yXX07YnJlYWs7Y2FzZSA2OTp0aGlzLiQ9U2UuQ2FyZGluYWxpdHkuWkVST19PUl9PTkU7YnJlYWs7Y2FzZSA3MDp0aGlzLiQ9U2UuQ2FyZGluYWxpdHkuWkVST19PUl9NT1JFO2JyZWFrO2Nhc2UgNzE6dGhpcy4kPVNlLkNhcmRpbmFsaXR5Lk9ORV9PUl9NT1JFO2JyZWFrO2Nhc2UgNzI6dGhpcy4kPVNlLkNhcmRpbmFsaXR5Lk9OTFlfT05FO2JyZWFrO2Nhc2UgNzM6dGhpcy4kPVNlLkNhcmRpbmFsaXR5Lk1EX1BBUkVOVDticmVhaztjYXNlIDc0OnRoaXMuJD1TZS5JZGVudGlmaWNhdGlvbi5OT05fSURFTlRJRllJTkc7YnJlYWs7Y2FzZSA3NTp0aGlzLiQ9U2UuSWRlbnRpZmljYXRpb24uSURFTlRJRllJTkc7YnJlYWt9fSwiYW5vbnltb3VzIiksdGFibGU6W3szOjEsNDpbMSwyXX0sezE6WzNdfSx0KGUsWzIsMl0sezU6M30pLHs2OlsxLDRdLDc6NSw4OlsxLDZdLDk6NywxMDpbMSw4XSwxMTo5LDIyOnIsMjQ6biwyNjppLDI4OmEsMjk6MTQsMzA6MTUsMzE6MTYsMzI6MTcsMzM6cywzNDpsLDM1OnUsMzY6aCwzNzpmLDQwOmQsNDM6cCw0NDptLDUwOmd9LHQoZSxbMiw3XSx7MTpbMiwxXX0pLHQoZSxbMiwzXSksezk6MjcsMTE6OSwyMjpyLDI0Om4sMjY6aSwyODphLDI5OjE0LDMwOjE1LDMxOjE2LDMyOjE3LDMzOnMsMzQ6bCwzNTp1LDM2OmgsMzc6Ziw0MDpkLDQzOnAsNDQ6bSw1MDpnfSx0KGUsWzIsNV0pLHQoZSxbMiw2XSksdChlLFsyLDE2XSx7MTI6MjgsNjE6MzIsMTU6WzEsMjldLDE3OlsxLDMwXSwyMDpbMSwzMV0sNjM6eSw2NDp2LDY1OngsNjY6Yiw2Nzp3fSksezIzOlsxLDM4XX0sezI1OlsxLDM5XX0sezI3OlsxLDQwXX0sdChlLFsyLDI3XSksdChlLFsyLDI4XSksdChlLFsyLDI5XSksdChlLFsyLDMwXSksdChlLFsyLDMxXSksdChDLFsyLDU0XSksdChDLFsyLDU1XSksdChlLFsyLDMyXSksdChlLFsyLDMzXSksdChlLFsyLDM0XSksdChlLFsyLDM1XSksezE2OjQxLDQwOlQsNDE6RX0sezE2OjQ0LDQwOlQsNDE6RX0sezE2OjQ1LDQwOlQsNDE6RX0sdChlLFsyLDRdKSx7MTE6NDYsNDA6ZCw1MDpnfSx7MTY6NDcsNDA6VCw0MTpFfSx7MTg6NDgsMTk6WzEsNDldLDUxOjUwLDUyOjUxLDU2OkF9LHsxMTo1Myw0MDpkLDUwOmd9LHs2Mjo1NCw2ODpbMSw1NV0sNjk6WzEsNTZdfSx0KFMsWzIsNjldKSx0KFMsWzIsNzBdKSx0KFMsWzIsNzFdKSx0KFMsWzIsNzJdKSx0KFMsWzIsNzNdKSx0KGUsWzIsMjRdKSx0KGUsWzIsMjVdKSx0KGUsWzIsMjZdKSx7MTM6XywzODo1Nyw0MTpJLDQyOkQsNDU6NTksNDY6NjAsNDg6ayw0OTpMfSx0KFIsWzIsMzddKSx0KFIsWzIsMzhdKSx7MTY6NjUsNDA6VCw0MTpFLDQyOkR9LHsxMzpfLDM4OjY2LDQxOkksNDI6RCw0NTo1OSw0Njo2MCw0ODprLDQ5Okx9LHsxMzpbMSw2N10sMTU6WzEsNjhdfSx0KGUsWzIsMTddLHs2MTozMiwxMjo2OSwxNzpbMSw3MF0sNDI6RCw2Mzp5LDY0OnYsNjU6eCw2NjpiLDY3Ond9KSx7MTk6WzEsNzFdfSx0KGUsWzIsMTRdKSx7MTg6NzIsMTk6WzIsNTZdLDUxOjUwLDUyOjUxLDU2OkF9LHs1Mzo3Myw1NjpbMSw3NF19LHs1NjpbMiw2Ml19LHsyMTpbMSw3NV19LHs2MTo3Niw2Mzp5LDY0OnYsNjU6eCw2NjpiLDY3Ond9LHQoTyxbMiw3NF0pLHQoTyxbMiw3NV0pLHs2Ok0sMTA6QiwzOTo3Nyw0MjpGLDQ3OlB9LHs0MDpbMSw4Ml0sNDE6WzEsODNdfSx0KHosWzIsNDNdLHs0Njo4NCwxMzpfLDQxOkksNDg6ayw0OTpMfSksdCgkLFsyLDQ1XSksdCgkLFsyLDUwXSksdCgkLFsyLDUxXSksdCgkLFsyLDUyXSksdCgkLFsyLDUzXSksdChlLFsyLDQxXSx7NDI6RH0pLHs2Ok0sMTA6QiwzOTo4NSw0MjpGLDQ3OlB9LHsxNDo4Niw0MDpILDUwOlEsNzA6an0sezE2OjkwLDQwOlQsNDE6RX0sezExOjkxLDQwOmQsNTA6Z30sezE4OjkyLDE5OlsxLDkzXSw1MTo1MCw1Mjo1MSw1NjpBfSx0KGUsWzIsMTJdKSx7MTk6WzIsNTddfSx0KGllLFsyLDU4XSx7NTQ6OTQsNTU6OTUsNTc6OTYsNTk6bmUsNjA6bGV9KSx0KFsxOSw1Niw1OSw2MF0sWzIsNjNdKSx0KGUsWzIsMjJdLHsxNTpbMSwxMDBdLDE3OlsxLDk5XX0pLHQoWzQwLDUwXSxbMiw2OF0pLHQoZSxbMiwzNl0pLHsxMzpfLDQxOkksNDU6MTAxLDQ2OjYwLDQ4OmssNDk6TH0sdChlLFsyLDQ3XSksdChlLFsyLDQ4XSksdChlLFsyLDQ5XSksdChSLFsyLDM5XSksdChSLFsyLDQwXSksdCgkLFsyLDQ2XSksdChlLFsyLDQyXSksdChlLFsyLDhdKSx0KGUsWzIsNzZdKSx0KGUsWzIsNzddKSx0KGUsWzIsNzhdKSx7MTM6WzEsMTAyXSw0MjpEfSx7MTM6WzEsMTA0XSwxNTpbMSwxMDNdfSx7MTk6WzEsMTA1XX0sdChlLFsyLDE1XSksdChpZSxbMiw1OV0sezU1OjEwNiw1ODpbMSwxMDddLDYwOmxlfSksdChpZSxbMiw2MF0pLHQoaGUsWzIsNjRdKSx0KGllLFsyLDY3XSksdChoZSxbMiw2Nl0pLHsxODoxMDgsMTk6WzEsMTA5XSw1MTo1MCw1Mjo1MSw1NjpBfSx7MTY6MTEwLDQwOlQsNDE6RX0sdCh6LFsyLDQ0XSx7NDY6ODQsMTM6Xyw0MTpJLDQ4OmssNDk6TH0pLHsxNDoxMTEsNDA6SCw1MDpRLDcwOmp9LHsxNjoxMTIsNDA6VCw0MTpFfSx7MTQ6MTEzLDQwOkgsNTA6USw3MDpqfSx0KGUsWzIsMTNdKSx0KGllLFsyLDYxXSksezU3OjExNCw1OTpuZX0sezE5OlsxLDExNV19LHQoZSxbMiwyMF0pLHQoZSxbMiwyM10sezE3OlsxLDExNl0sNDI6RH0pLHQoZSxbMiwxMV0pLHsxMzpbMSwxMTddLDQyOkR9LHQoZSxbMiwxMF0pLHQoaGUsWzIsNjVdKSx0KGUsWzIsMThdKSx7MTg6MTE4LDE5OlsxLDExOV0sNTE6NTAsNTI6NTEsNTY6QX0sezE0OjEyMCw0MDpILDUwOlEsNzA6an0sezE5OlsxLDEyMV19LHQoZSxbMiwyMV0pLHQoZSxbMiw5XSksdChlLFsyLDE5XSldLGRlZmF1bHRBY3Rpb25zOns1MjpbMiw2Ml0sNzI6WzIsNTddfSxwYXJzZUVycm9yOm8oZnVuY3Rpb24oc2UsdWUpe2lmKHVlLnJlY292ZXJhYmxlKXRoaXMudHJhY2Uoc2UpO2Vsc2V7dmFyIFo9bmV3IEVycm9yKHNlKTt0aHJvdyBaLmhhc2g9dWUsWn19LCJwYXJzZUVycm9yIikscGFyc2U6byhmdW5jdGlvbihzZSl7dmFyIHVlPXRoaXMsWj1bMF0sU2U9W10sY2U9W251bGxdLGFlPVtdLE9lPXRoaXMudGFibGUsZ2U9IiIsemU9MCxIZT0wLCRlPTAsUmU9MixJZT0xLGJlPWFlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLFc9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxkZT17eXk6e319O2Zvcih2YXIgcmUgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxyZSkmJihkZS55eVtyZV09dGhpcy55eVtyZV0pO1cuc2V0SW5wdXQoc2UsZGUueXkpLGRlLnl5LmxleGVyPVcsZGUueXkucGFyc2VyPXRoaXMsdHlwZW9mIFcueXlsbG9jPiJ1IiYmKFcueXlsbG9jPXt9KTt2YXIgb2U9Vy55eWxsb2M7YWUucHVzaChvZSk7dmFyIFY9Vy5vcHRpb25zJiZXLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBkZS55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1kZS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiB4ZShjdCl7Wi5sZW5ndGg9Wi5sZW5ndGgtMipjdCxjZS5sZW5ndGg9Y2UubGVuZ3RoLWN0LGFlLmxlbmd0aD1hZS5sZW5ndGgtY3R9byh4ZSwicG9wU3RhY2siKTtmdW5jdGlvbiBxKCl7dmFyIGN0O3JldHVybiBjdD1TZS5wb3AoKXx8Vy5sZXgoKXx8SWUsdHlwZW9mIGN0IT0ibnVtYmVyIiYmKGN0IGluc3RhbmNlb2YgQXJyYXkmJihTZT1jdCxjdD1TZS5wb3AoKSksY3Q9dWUuc3ltYm9sc19bY3RdfHxjdCksY3R9byhxLCJsZXgiKTtmb3IodmFyIHBlLHZlLFBlLF9lLHdlLFZlLERlPXt9LHFlLGF0LFJ0LHN0Ozspe2lmKFBlPVpbWi5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1tQZV0/X2U9dGhpcy5kZWZhdWx0QWN0aW9uc1tQZV06KChwZT09PW51bGx8fHR5cGVvZiBwZT4idSIpJiYocGU9cSgpKSxfZT1PZVtQZV0mJk9lW1BlXVtwZV0pLHR5cGVvZiBfZT4idSJ8fCFfZS5sZW5ndGh8fCFfZVswXSl7dmFyIFVlPSIiO3N0PVtdO2ZvcihxZSBpbiBPZVtQZV0pdGhpcy50ZXJtaW5hbHNfW3FlXSYmcWU+UmUmJnN0LnB1c2goIiciK3RoaXMudGVybWluYWxzX1txZV0rIiciKTtXLnNob3dQb3NpdGlvbj9VZT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyh6ZSsxKStgOgpgK1cuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtzdC5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW3BlXXx8cGUpKyInIjpVZT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyh6ZSsxKSsiOiBVbmV4cGVjdGVkICIrKHBlPT1JZT8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1twZV18fHBlKSsiJyIpLHRoaXMucGFyc2VFcnJvcihVZSx7dGV4dDpXLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1twZV18fHBlLGxpbmU6Vy55eWxpbmVubyxsb2M6b2UsZXhwZWN0ZWQ6c3R9KX1pZihfZVswXWluc3RhbmNlb2YgQXJyYXkmJl9lLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrUGUrIiwgdG9rZW46ICIrcGUpO3N3aXRjaChfZVswXSl7Y2FzZSAxOloucHVzaChwZSksY2UucHVzaChXLnl5dGV4dCksYWUucHVzaChXLnl5bGxvYyksWi5wdXNoKF9lWzFdKSxwZT1udWxsLHZlPyhwZT12ZSx2ZT1udWxsKTooSGU9Vy55eWxlbmcsZ2U9Vy55eXRleHQsemU9Vy55eWxpbmVubyxvZT1XLnl5bGxvYywkZT4wJiYkZS0tKTticmVhaztjYXNlIDI6aWYoYXQ9dGhpcy5wcm9kdWN0aW9uc19bX2VbMV1dWzFdLERlLiQ9Y2VbY2UubGVuZ3RoLWF0XSxEZS5fJD17Zmlyc3RfbGluZTphZVthZS5sZW5ndGgtKGF0fHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6YWVbYWUubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46YWVbYWUubGVuZ3RoLShhdHx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjphZVthZS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LFYmJihEZS5fJC5yYW5nZT1bYWVbYWUubGVuZ3RoLShhdHx8MSldLnJhbmdlWzBdLGFlW2FlLmxlbmd0aC0xXS5yYW5nZVsxXV0pLFZlPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShEZSxbZ2UsSGUsemUsZGUueXksX2VbMV0sY2UsYWVdLmNvbmNhdChiZSkpLHR5cGVvZiBWZTwidSIpcmV0dXJuIFZlO2F0JiYoWj1aLnNsaWNlKDAsLTEqYXQqMiksY2U9Y2Uuc2xpY2UoMCwtMSphdCksYWU9YWUuc2xpY2UoMCwtMSphdCkpLFoucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1tfZVsxXV1bMF0pLGNlLnB1c2goRGUuJCksYWUucHVzaChEZS5fJCksUnQ9T2VbWltaLmxlbmd0aC0yXV1bWltaLmxlbmd0aC0xXV0sWi5wdXNoKFJ0KTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfSwicGFyc2UiKX0sWD1mdW5jdGlvbigpe3ZhciBKPXtFT0Y6MSxwYXJzZUVycm9yOm8oZnVuY3Rpb24odWUsWil7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcih1ZSxaKTtlbHNlIHRocm93IG5ldyBFcnJvcih1ZSl9LCJwYXJzZUVycm9yIiksc2V0SW5wdXQ6byhmdW5jdGlvbihzZSx1ZSl7cmV0dXJuIHRoaXMueXk9dWV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXNlLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSwic2V0SW5wdXQiKSxpbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIHNlPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1zZSx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9c2UsdGhpcy5tYXRjaGVkKz1zZTt2YXIgdWU9c2UubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiB1ZT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksc2V9LCJpbnB1dCIpLHVucHV0Om8oZnVuY3Rpb24oc2Upe3ZhciB1ZT1zZS5sZW5ndGgsWj1zZS5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PXNlK3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC11ZSksdGhpcy5vZmZzZXQtPXVlO3ZhciBTZT10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxaLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09Wi5sZW5ndGgtMSk7dmFyIGNlPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpaPyhaLmxlbmd0aD09PVNlLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrU2VbU2UubGVuZ3RoLVoubGVuZ3RoXS5sZW5ndGgtWlswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLXVlfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2NlWzBdLGNlWzBdK3RoaXMueXlsZW5nLXVlXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LCJ1bnB1dCIpLG1vcmU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LCJtb3JlIikscmVqZWN0Om8oZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LCJyZWplY3QiKSxsZXNzOm8oZnVuY3Rpb24oc2Upe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShzZSkpfSwibGVzcyIpLHBhc3RJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIHNlPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oc2UubGVuZ3RoPjIwPyIuLi4iOiIiKStzZS5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sInBhc3RJbnB1dCIpLHVwY29taW5nSW5wdXQ6byhmdW5jdGlvbigpe3ZhciBzZT10aGlzLm1hdGNoO3JldHVybiBzZS5sZW5ndGg8MjAmJihzZSs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtc2UubGVuZ3RoKSksKHNlLnN1YnN0cigwLDIwKSsoc2UubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LCJ1cGNvbWluZ0lucHV0Iiksc2hvd1Bvc2l0aW9uOm8oZnVuY3Rpb24oKXt2YXIgc2U9dGhpcy5wYXN0SW5wdXQoKSx1ZT1uZXcgQXJyYXkoc2UubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gc2UrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK3VlKyJeIn0sInNob3dQb3NpdGlvbiIpLHRlc3RfbWF0Y2g6byhmdW5jdGlvbihzZSx1ZSl7dmFyIFosU2UsY2U7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKGNlPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGNlLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLFNlPXNlWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxTZSYmKHRoaXMueXlsaW5lbm8rPVNlLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOlNlP1NlW1NlLmxlbmd0aC0xXS5sZW5ndGgtU2VbU2UubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rc2VbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9c2VbMF0sdGhpcy5tYXRjaCs9c2VbMF0sdGhpcy5tYXRjaGVzPXNlLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKHNlWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1zZVswXSxaPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLHVlLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLFopcmV0dXJuIFo7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIGFlIGluIGNlKXRoaXNbYWVdPWNlW2FlXTtyZXR1cm4hMX1yZXR1cm4hMX0sInRlc3RfbWF0Y2giKSxuZXh0Om8oZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgc2UsdWUsWixTZTt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBjZT10aGlzLl9jdXJyZW50UnVsZXMoKSxhZT0wO2FlPGNlLmxlbmd0aDthZSsrKWlmKFo9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tjZVthZV1dKSxaJiYoIXVlfHxaWzBdLmxlbmd0aD51ZVswXS5sZW5ndGgpKXtpZih1ZT1aLFNlPWFlLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKHNlPXRoaXMudGVzdF9tYXRjaChaLGNlW2FlXSksc2UhPT0hMSlyZXR1cm4gc2U7aWYodGhpcy5fYmFja3RyYWNrKXt1ZT0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiB1ZT8oc2U9dGhpcy50ZXN0X21hdGNoKHVlLGNlW1NlXSksc2UhPT0hMT9zZTohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sIm5leHQiKSxsZXg6byhmdW5jdGlvbigpe3ZhciB1ZT10aGlzLm5leHQoKTtyZXR1cm4gdWV8fHRoaXMubGV4KCl9LCJsZXgiKSxiZWdpbjpvKGZ1bmN0aW9uKHVlKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2godWUpfSwiYmVnaW4iKSxwb3BTdGF0ZTpvKGZ1bmN0aW9uKCl7dmFyIHVlPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIHVlPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSwicG9wU3RhdGUiKSxfY3VycmVudFJ1bGVzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSwiX2N1cnJlbnRSdWxlcyIpLHRvcFN0YXRlOm8oZnVuY3Rpb24odWUpe3JldHVybiB1ZT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKHVlfHwwKSx1ZT49MD90aGlzLmNvbmRpdGlvblN0YWNrW3VlXToiSU5JVElBTCJ9LCJ0b3BTdGF0ZSIpLHB1c2hTdGF0ZTpvKGZ1bmN0aW9uKHVlKXt0aGlzLmJlZ2luKHVlKX0sInB1c2hTdGF0ZSIpLHN0YXRlU3RhY2tTaXplOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LCJzdGF0ZVN0YWNrU2l6ZSIpLG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKHVlLFosU2UsY2Upe3ZhciBhZT1jZTtzd2l0Y2goU2Upe2Nhc2UgMDpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMjQ7YnJlYWs7Y2FzZSAxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7YnJlYWs7Y2FzZSAyOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwyNjticmVhaztjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjticmVhaztjYXNlIDQ6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgNTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA2OnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDc6cmV0dXJuIDMzO2Nhc2UgODpyZXR1cm4gMzQ7Y2FzZSA5OnJldHVybiAzNTtjYXNlIDEwOnJldHVybiAzNjtjYXNlIDExOnJldHVybiAxMDtjYXNlIDEyOmJyZWFrO2Nhc2UgMTM6cmV0dXJuIDg7Y2FzZSAxNDpyZXR1cm4gNTA7Y2FzZSAxNTpyZXR1cm4gNzA7Y2FzZSAxNjpyZXR1cm4gNDtjYXNlIDE3OnJldHVybiB0aGlzLmJlZ2luKCJibG9jayIpLDE3O2JyZWFrO2Nhc2UgMTg6cmV0dXJuIDQ5O2Nhc2UgMTk6cmV0dXJuIDQ5O2Nhc2UgMjA6cmV0dXJuIDQyO2Nhc2UgMjE6cmV0dXJuIDE1O2Nhc2UgMjI6cmV0dXJuIDEzO2Nhc2UgMjM6YnJlYWs7Y2FzZSAyNDpyZXR1cm4gNTk7Y2FzZSAyNTpyZXR1cm4gNTY7Y2FzZSAyNjpyZXR1cm4gNTY7Y2FzZSAyNzpyZXR1cm4gNjA7Y2FzZSAyODpicmVhaztjYXNlIDI5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTk7YnJlYWs7Y2FzZSAzMDpyZXR1cm4gWi55eXRleHRbMF07Y2FzZSAzMTpyZXR1cm4gMjA7Y2FzZSAzMjpyZXR1cm4gMjE7Y2FzZSAzMzpyZXR1cm4gdGhpcy5iZWdpbigic3R5bGUiKSw0NDticmVhaztjYXNlIDM0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTA7YnJlYWs7Y2FzZSAzNTpicmVhaztjYXNlIDM2OnJldHVybiAxMztjYXNlIDM3OnJldHVybiA0MjtjYXNlIDM4OnJldHVybiA0OTtjYXNlIDM5OnJldHVybiB0aGlzLmJlZ2luKCJzdHlsZSIpLDM3O2JyZWFrO2Nhc2UgNDA6cmV0dXJuIDQzO2Nhc2UgNDE6cmV0dXJuIDYzO2Nhc2UgNDI6cmV0dXJuIDY1O2Nhc2UgNDM6cmV0dXJuIDY1O2Nhc2UgNDQ6cmV0dXJuIDY1O2Nhc2UgNDU6cmV0dXJuIDYzO2Nhc2UgNDY6cmV0dXJuIDYzO2Nhc2UgNDc6cmV0dXJuIDY0O2Nhc2UgNDg6cmV0dXJuIDY0O2Nhc2UgNDk6cmV0dXJuIDY0O2Nhc2UgNTA6cmV0dXJuIDY0O2Nhc2UgNTE6cmV0dXJuIDY0O2Nhc2UgNTI6cmV0dXJuIDY1O2Nhc2UgNTM6cmV0dXJuIDY0O2Nhc2UgNTQ6cmV0dXJuIDY1O2Nhc2UgNTU6cmV0dXJuIDY2O2Nhc2UgNTY6cmV0dXJuIDY2O2Nhc2UgNTc6cmV0dXJuIDY2O2Nhc2UgNTg6cmV0dXJuIDY2O2Nhc2UgNTk6cmV0dXJuIDYzO2Nhc2UgNjA6cmV0dXJuIDY0O2Nhc2UgNjE6cmV0dXJuIDY1O2Nhc2UgNjI6cmV0dXJuIDY3O2Nhc2UgNjM6cmV0dXJuIDY4O2Nhc2UgNjQ6cmV0dXJuIDY5O2Nhc2UgNjU6cmV0dXJuIDY5O2Nhc2UgNjY6cmV0dXJuIDY4O2Nhc2UgNjc6cmV0dXJuIDY4O2Nhc2UgNjg6cmV0dXJuIDY4O2Nhc2UgNjk6cmV0dXJuIDQxO2Nhc2UgNzA6cmV0dXJuIDQ3O2Nhc2UgNzE6cmV0dXJuIDQwO2Nhc2UgNzI6cmV0dXJuIDQ4O2Nhc2UgNzM6cmV0dXJuIFoueXl0ZXh0WzBdO2Nhc2UgNzQ6cmV0dXJuIDZ9fSwiYW5vbnltb3VzIikscnVsZXM6Wy9eKD86YWNjVGl0bGVccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccypce1xzKikvaSwvXig/OltcfV0pL2ksL14oPzpbXlx9XSopL2ksL14oPzouKmRpcmVjdGlvblxzK1RCW15cbl0qKS9pLC9eKD86LipkaXJlY3Rpb25ccytCVFteXG5dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrUkxbXlxuXSopL2ksL14oPzouKmRpcmVjdGlvblxzK0xSW15cbl0qKS9pLC9eKD86W1xuXSspL2ksL14oPzpccyspL2ksL14oPzpbXHNdKykvaSwvXig/OiJbXiIlXHJcblx2XGJcXF0rIikvaSwvXig/OiJbXiJdKiIpL2ksL14oPzplckRpYWdyYW1cYikvaSwvXig/Olx7KS9pLC9eKD86IykvaSwvXig/OiMpL2ksL14oPzosKS9pLC9eKD86Ojo6KS9pLC9eKD86OikvaSwvXig/OlxzKykvaSwvXig/OlxiKCg/OlBLKXwoPzpGSyl8KD86VUspKVxiKS9pLC9eKD86KFteXHNdKilbfl0uKlt+XShbXlxzXSopKS9pLC9eKD86KFtcKkEtWmEtel9cdTAwQzAtXHVGRkZGXVtBLVphLXowLTlcLVxfXFtcXVwoXClcdTAwQzAtXHVGRkZGXCpdKikpL2ksL14oPzoiW14iXSoiKS9pLC9eKD86W1xuXSspL2ksL14oPzpcfSkvaSwvXig/Oi4pL2ksL14oPzpcWykvaSwvXig/OlxdKS9pLC9eKD86c3R5bGVcYikvaSwvXig/Oltcbl0rKS9pLC9eKD86XHMrKS9pLC9eKD86OikvaSwvXig/OiwpL2ksL14oPzojKS9pLC9eKD86Y2xhc3NEZWZcYikvaSwvXig/OmNsYXNzXGIpL2ksL14oPzpvbmUgb3IgemVyb1xiKS9pLC9eKD86b25lIG9yIG1vcmVcYikvaSwvXig/Om9uZSBvciBtYW55XGIpL2ksL14oPzoxXCspL2ksL14oPzpcfG9cYikvaSwvXig/Onplcm8gb3Igb25lXGIpL2ksL14oPzp6ZXJvIG9yIG1vcmVcYikvaSwvXig/Onplcm8gb3IgbWFueVxiKS9pLC9eKD86MFwrKS9pLC9eKD86XH1vXGIpL2ksL14oPzptYW55XCgwXCkpL2ksL14oPzptYW55XCgxXCkpL2ksL14oPzptYW55XGIpL2ksL14oPzpcfVx8KS9pLC9eKD86b25lXGIpL2ksL14oPzpvbmx5IG9uZVxiKS9pLC9eKD86MVxiKS9pLC9eKD86XHxcfCkvaSwvXig/Om9cfCkvaSwvXig/Om9ceykvaSwvXig/Olx8XHspL2ksL14oPzpccyp1XGIpL2ksL14oPzpcLlwuKS9pLC9eKD86LS0pL2ksL14oPzp0b1xiKS9pLC9eKD86b3B0aW9uYWxseSB0b1xiKS9pLC9eKD86XC4tKS9pLC9eKD86LVwuKS9pLC9eKD86KFteXHgwMC1ceDdGXXxcd3wtfFwqKSspL2ksL14oPzo7KS9pLC9eKD86KFteXHgwMC1ceDdGXXxcd3wtfFwqKSspL2ksL14oPzpbMC05XSkvaSwvXig/Oi4pL2ksL14oPzokKS9pXSxjb25kaXRpb25zOntzdHlsZTp7cnVsZXM6WzM0LDM1LDM2LDM3LDM4LDY5LDcwXSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOls1LDZdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbM10saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOlsxXSxpbmNsdXNpdmU6ITF9LGJsb2NrOntydWxlczpbMjMsMjQsMjUsMjYsMjcsMjgsMjksMzBdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMiw0LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDMxLDMyLDMzLDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDcxLDcyLDczLDc0XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIEp9KCk7Sy5sZXhlcj1YO2Z1bmN0aW9uIHRlKCl7dGhpcy55eT17fX1yZXR1cm4gbyh0ZSwiUGFyc2VyIiksdGUucHJvdG90eXBlPUssSy5QYXJzZXI9dGUsbmV3IHRlfSgpO3dSLnBhcnNlcj13UjtaaWU9d1J9KTt2YXIgc2ssZWFlPU4oKCk9PnsidXNlIHN0cmljdCI7dnQoKTt6dCgpO21pKCk7aXIoKTtzaz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuZW50aXRpZXM9bmV3IE1hcDt0aGlzLnJlbGF0aW9uc2hpcHM9W107dGhpcy5jbGFzc2VzPW5ldyBNYXA7dGhpcy5kaXJlY3Rpb249IlRCIjt0aGlzLkNhcmRpbmFsaXR5PXtaRVJPX09SX09ORToiWkVST19PUl9PTkUiLFpFUk9fT1JfTU9SRToiWkVST19PUl9NT1JFIixPTkVfT1JfTU9SRToiT05FX09SX01PUkUiLE9OTFlfT05FOiJPTkxZX09ORSIsTURfUEFSRU5UOiJNRF9QQVJFTlQifTt0aGlzLklkZW50aWZpY2F0aW9uPXtOT05fSURFTlRJRllJTkc6Ik5PTl9JREVOVElGWUlORyIsSURFTlRJRllJTkc6IklERU5USUZZSU5HIn07dGhpcy5zZXRBY2NUaXRsZT1Mcjt0aGlzLmdldEFjY1RpdGxlPVJyO3RoaXMuc2V0QWNjRGVzY3JpcHRpb249TnI7dGhpcy5nZXRBY2NEZXNjcmlwdGlvbj1Ncjt0aGlzLnNldERpYWdyYW1UaXRsZT0kcjt0aGlzLmdldERpYWdyYW1UaXRsZT1Jcjt0aGlzLmdldENvbmZpZz1vKCgpPT5tZSgpLmVyLCJnZXRDb25maWciKTt0aGlzLmNsZWFyKCksdGhpcy5hZGRFbnRpdHk9dGhpcy5hZGRFbnRpdHkuYmluZCh0aGlzKSx0aGlzLmFkZEF0dHJpYnV0ZXM9dGhpcy5hZGRBdHRyaWJ1dGVzLmJpbmQodGhpcyksdGhpcy5hZGRSZWxhdGlvbnNoaXA9dGhpcy5hZGRSZWxhdGlvbnNoaXAuYmluZCh0aGlzKSx0aGlzLnNldERpcmVjdGlvbj10aGlzLnNldERpcmVjdGlvbi5iaW5kKHRoaXMpLHRoaXMuYWRkQ3NzU3R5bGVzPXRoaXMuYWRkQ3NzU3R5bGVzLmJpbmQodGhpcyksdGhpcy5hZGRDbGFzcz10aGlzLmFkZENsYXNzLmJpbmQodGhpcyksdGhpcy5zZXRDbGFzcz10aGlzLnNldENsYXNzLmJpbmQodGhpcyksdGhpcy5zZXRBY2NUaXRsZT10aGlzLnNldEFjY1RpdGxlLmJpbmQodGhpcyksdGhpcy5zZXRBY2NEZXNjcmlwdGlvbj10aGlzLnNldEFjY0Rlc2NyaXB0aW9uLmJpbmQodGhpcyl9c3RhdGlje28odGhpcywiRXJEQiIpfWFkZEVudGl0eShlLHI9IiIpe3JldHVybiB0aGlzLmVudGl0aWVzLmhhcyhlKT8hdGhpcy5lbnRpdGllcy5nZXQoZSk/LmFsaWFzJiZyJiYodGhpcy5lbnRpdGllcy5nZXQoZSkuYWxpYXM9cixZLmluZm8oYEFkZCBhbGlhcyAnJHtyfScgdG8gZW50aXR5ICcke2V9J2ApKToodGhpcy5lbnRpdGllcy5zZXQoZSx7aWQ6YGVudGl0eS0ke2V9LSR7dGhpcy5lbnRpdGllcy5zaXplfWAsbGFiZWw6ZSxhdHRyaWJ1dGVzOltdLGFsaWFzOnIsc2hhcGU6ImVyQm94Iixsb29rOm1lKCkubG9vaz8/ImRlZmF1bHQiLGNzc0NsYXNzZXM6ImRlZmF1bHQiLGNzc1N0eWxlczpbXX0pLFkuaW5mbygiQWRkZWQgbmV3IGVudGl0eSA6IixlKSksdGhpcy5lbnRpdGllcy5nZXQoZSl9Z2V0RW50aXR5KGUpe3JldHVybiB0aGlzLmVudGl0aWVzLmdldChlKX1nZXRFbnRpdGllcygpe3JldHVybiB0aGlzLmVudGl0aWVzfWdldENsYXNzZXMoKXtyZXR1cm4gdGhpcy5jbGFzc2VzfWFkZEF0dHJpYnV0ZXMoZSxyKXtsZXQgbj10aGlzLmFkZEVudGl0eShlKSxpO2ZvcihpPXIubGVuZ3RoLTE7aT49MDtpLS0pcltpXS5rZXlzfHwocltpXS5rZXlzPVtdKSxyW2ldLmNvbW1lbnR8fChyW2ldLmNvbW1lbnQ9IiIpLG4uYXR0cmlidXRlcy5wdXNoKHJbaV0pLFkuZGVidWcoIkFkZGVkIGF0dHJpYnV0ZSAiLHJbaV0ubmFtZSl9YWRkUmVsYXRpb25zaGlwKGUscixuLGkpe2xldCBhPXRoaXMuZW50aXRpZXMuZ2V0KGUpLHM9dGhpcy5lbnRpdGllcy5nZXQobik7aWYoIWF8fCFzKXJldHVybjtsZXQgbD17ZW50aXR5QTphLmlkLHJvbGVBOnIsZW50aXR5QjpzLmlkLHJlbFNwZWM6aX07dGhpcy5yZWxhdGlvbnNoaXBzLnB1c2gobCksWS5kZWJ1ZygiQWRkZWQgbmV3IHJlbGF0aW9uc2hpcCA6IixsKX1nZXRSZWxhdGlvbnNoaXBzKCl7cmV0dXJuIHRoaXMucmVsYXRpb25zaGlwc31nZXREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXJlY3Rpb259c2V0RGlyZWN0aW9uKGUpe3RoaXMuZGlyZWN0aW9uPWV9Z2V0Q29tcGlsZWRTdHlsZXMoZSl7bGV0IHI9W107Zm9yKGxldCBuIG9mIGUpe2xldCBpPXRoaXMuY2xhc3Nlcy5nZXQobik7aT8uc3R5bGVzJiYocj1bLi4uciwuLi5pLnN0eWxlcz8/W11dLm1hcChhPT5hLnRyaW0oKSkpLGk/LnRleHRTdHlsZXMmJihyPVsuLi5yLC4uLmkudGV4dFN0eWxlcz8/W11dLm1hcChhPT5hLnRyaW0oKSkpfXJldHVybiByfWFkZENzc1N0eWxlcyhlLHIpe2ZvcihsZXQgbiBvZiBlKXtsZXQgaT10aGlzLmVudGl0aWVzLmdldChuKTtpZighcnx8IWkpcmV0dXJuO2ZvcihsZXQgYSBvZiByKWkuY3NzU3R5bGVzLnB1c2goYSl9fWFkZENsYXNzKGUscil7ZS5mb3JFYWNoKG49PntsZXQgaT10aGlzLmNsYXNzZXMuZ2V0KG4pO2k9PT12b2lkIDAmJihpPXtpZDpuLHN0eWxlczpbXSx0ZXh0U3R5bGVzOltdfSx0aGlzLmNsYXNzZXMuc2V0KG4saSkpLHImJnIuZm9yRWFjaChmdW5jdGlvbihhKXtpZigvY29sb3IvLmV4ZWMoYSkpe2xldCBzPWEucmVwbGFjZSgiZmlsbCIsImJnRmlsbCIpO2kudGV4dFN0eWxlcy5wdXNoKHMpfWkuc3R5bGVzLnB1c2goYSl9KX0pfXNldENsYXNzKGUscil7Zm9yKGxldCBuIG9mIGUpe2xldCBpPXRoaXMuZW50aXRpZXMuZ2V0KG4pO2lmKGkpZm9yKGxldCBhIG9mIHIpaS5jc3NDbGFzc2VzKz0iICIrYX19Y2xlYXIoKXt0aGlzLmVudGl0aWVzPW5ldyBNYXAsdGhpcy5jbGFzc2VzPW5ldyBNYXAsdGhpcy5yZWxhdGlvbnNoaXBzPVtdLEFyKCl9Z2V0RGF0YSgpe2xldCBlPVtdLHI9W10sbj1tZSgpO2ZvcihsZXQgYSBvZiB0aGlzLmVudGl0aWVzLmtleXMoKSl7bGV0IHM9dGhpcy5lbnRpdGllcy5nZXQoYSk7cyYmKHMuY3NzQ29tcGlsZWRTdHlsZXM9dGhpcy5nZXRDb21waWxlZFN0eWxlcyhzLmNzc0NsYXNzZXMuc3BsaXQoIiAiKSksZS5wdXNoKHMpKX1sZXQgaT0wO2ZvcihsZXQgYSBvZiB0aGlzLnJlbGF0aW9uc2hpcHMpe2xldCBzPXtpZDokaChhLmVudGl0eUEsYS5lbnRpdHlCLHtwcmVmaXg6ImlkIixjb3VudGVyOmkrK30pLHR5cGU6Im5vcm1hbCIsY3VydmU6ImJhc2lzIixzdGFydDphLmVudGl0eUEsZW5kOmEuZW50aXR5QixsYWJlbDphLnJvbGVBLGxhYmVscG9zOiJjIix0aGlja25lc3M6Im5vcm1hbCIsY2xhc3NlczoicmVsYXRpb25zaGlwTGluZSIsYXJyb3dUeXBlU3RhcnQ6YS5yZWxTcGVjLmNhcmRCLnRvTG93ZXJDYXNlKCksYXJyb3dUeXBlRW5kOmEucmVsU3BlYy5jYXJkQS50b0xvd2VyQ2FzZSgpLHBhdHRlcm46YS5yZWxTcGVjLnJlbFR5cGU9PSJJREVOVElGWUlORyI/InNvbGlkIjoiZGFzaGVkIixsb29rOm4ubG9va307ci5wdXNoKHMpfXJldHVybntub2RlczplLGVkZ2VzOnIsb3RoZXI6e30sY29uZmlnOm4sZGlyZWN0aW9uOiJUQiJ9fX19KTt2YXIgVFI9e307aHIoVFIse2RyYXc6KCk9PlNPZX0pO3ZhciBTT2UsdGFlPU4oKCk9PnsidXNlIHN0cmljdCI7enQoKTt2dCgpO2dtKCk7WWQoKTskbSgpO2lyKCk7ZHIoKTtTT2U9byhhc3luYyBmdW5jdGlvbih0LGUscixuKXtZLmluZm8oIlJFRjA6IiksWS5pbmZvKCJEcmF3aW5nIGVyIGRpYWdyYW0gKHVuaWZpZWQpIixlKTtsZXR7c2VjdXJpdHlMZXZlbDppLGVyOmEsbGF5b3V0OnN9PW1lKCksbD1uLmRiLmdldERhdGEoKSx1PXljKGUsaSk7bC50eXBlPW4udHlwZSxsLmxheW91dEFsZ29yaXRobT1uZihzKSxsLmNvbmZpZy5mbG93Y2hhcnQubm9kZVNwYWNpbmc9YT8ubm9kZVNwYWNpbmd8fDE0MCxsLmNvbmZpZy5mbG93Y2hhcnQucmFua1NwYWNpbmc9YT8ucmFua1NwYWNpbmd8fDgwLGwuZGlyZWN0aW9uPW4uZGIuZ2V0RGlyZWN0aW9uKCksbC5tYXJrZXJzPVsib25seV9vbmUiLCJ6ZXJvX29yX29uZSIsIm9uZV9vcl9tb3JlIiwiemVyb19vcl9tb3JlIl0sbC5kaWFncmFtSWQ9ZSxhd2FpdCBDYyhsLHUpLGwubGF5b3V0QWxnb3JpdGhtPT09ImVsayImJnUuc2VsZWN0KCIuZWRnZXMiKS5sb3dlcigpO2xldCBoPXUuc2VsZWN0QWxsKCdbaWQqPSItYmFja2dyb3VuZCJdJyk7QXJyYXkuZnJvbShoKS5sZW5ndGg+MCYmaC5lYWNoKGZ1bmN0aW9uKCl7bGV0IGQ9R2UodGhpcyksbT1kLmF0dHIoImlkIikucmVwbGFjZSgiLWJhY2tncm91bmQiLCIiKSxnPXUuc2VsZWN0KGAjJHtDU1MuZXNjYXBlKG0pfWApO2lmKCFnLmVtcHR5KCkpe2xldCB5PWcuYXR0cigidHJhbnNmb3JtIik7ZC5hdHRyKCJ0cmFuc2Zvcm0iLHkpfX0pO2xldCBmPTg7R3QuaW5zZXJ0VGl0bGUodSwiZXJEaWFncmFtVGl0bGVUZXh0IixhPy50aXRsZVRvcE1hcmdpbj8/MjUsbi5kYi5nZXREaWFncmFtVGl0bGUoKSksQWModSxmLCJlckRpYWdyYW0iLGE/LnVzZU1heFdpZHRoPz8hMCl9LCJkcmF3Iil9KTt2YXIgQ09lLEFPZSxyYWUsbmFlPU4oKCk9PnsidXNlIHN0cmljdCI7WXMoKTtDT2U9bygodCxlKT0+e2xldCByPUtmLG49cih0LCJyIiksaT1yKHQsImciKSxhPXIodCwiYiIpO3JldHVybiBxYShuLGksYSxlKX0sImZhZGUiKSxBT2U9byh0PT5gCiAgLmVudGl0eUJveCB7CiAgICBmaWxsOiAke3QubWFpbkJrZ307CiAgICBzdHJva2U6ICR7dC5ub2RlQm9yZGVyfTsKICB9CgogIC5yZWxhdGlvbnNoaXBMYWJlbEJveCB7CiAgICBmaWxsOiAke3QudGVydGlhcnlDb2xvcn07CiAgICBvcGFjaXR5OiAwLjc7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3QudGVydGlhcnlDb2xvcn07CiAgICAgIHJlY3QgewogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgfQogIH0KCiAgLmxhYmVsQmtnIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICR7Q09lKHQudGVydGlhcnlDb2xvciwuNSl9OwogIH0KCiAgLmVkZ2VMYWJlbCAubGFiZWwgewogICAgZmlsbDogJHt0Lm5vZGVCb3JkZXJ9OwogICAgZm9udC1zaXplOiAxNHB4OwogIH0KCiAgLmxhYmVsIHsKICAgIGZvbnQtZmFtaWx5OiAke3QuZm9udEZhbWlseX07CiAgICBjb2xvcjogJHt0Lm5vZGVUZXh0Q29sb3J8fHQudGV4dENvbG9yfTsKICB9CgogIC5lZGdlLXBhdHRlcm4tZGFzaGVkIHsKICAgIHN0cm9rZS1kYXNoYXJyYXk6IDgsODsKICB9CgogIC5ub2RlIHJlY3QsCiAgLm5vZGUgY2lyY2xlLAogIC5ub2RlIGVsbGlwc2UsCiAgLm5vZGUgcG9seWdvbgogIHsKICAgIGZpbGw6ICR7dC5tYWluQmtnfTsKICAgIHN0cm9rZTogJHt0Lm5vZGVCb3JkZXJ9OwogICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgfQoKICAucmVsYXRpb25zaGlwTGluZSB7CiAgICBzdHJva2U6ICR7dC5saW5lQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAxOwogICAgZmlsbDogbm9uZTsKICB9CgogIC5tYXJrZXIgewogICAgZmlsbDogbm9uZSAhaW1wb3J0YW50OwogICAgc3Ryb2tlOiAke3QubGluZUNvbG9yfSAhaW1wb3J0YW50OwogICAgc3Ryb2tlLXdpZHRoOiAxOwogIH0KYCwiZ2V0U3R5bGVzIikscmFlPUFPZX0pO3ZhciBpYWU9e307aHIoaWFlLHtkaWFncmFtOigpPT5fT2V9KTt2YXIgX09lLGFhZT1OKCgpPT57InVzZSBzdHJpY3QiO0ppZSgpO2VhZSgpO3RhZSgpO25hZSgpO19PZT17cGFyc2VyOlppZSxnZXQgZGIoKXtyZXR1cm4gbmV3IHNrfSxyZW5kZXJlcjpUUixzdHlsZXM6cmFlfX0pO2Z1bmN0aW9uIGlpKHQpe3JldHVybiB0eXBlb2YgdD09Im9iamVjdCImJnQhPT1udWxsJiZ0eXBlb2YgdC4kdHlwZT09InN0cmluZyJ9ZnVuY3Rpb24gdmEodCl7cmV0dXJuIHR5cGVvZiB0PT0ib2JqZWN0IiYmdCE9PW51bGwmJnR5cGVvZiB0LiRyZWZUZXh0PT0ic3RyaW5nIn1mdW5jdGlvbiBrUih0KXtyZXR1cm4gdHlwZW9mIHQ9PSJvYmplY3QiJiZ0IT09bnVsbCYmdHlwZW9mIHQubmFtZT09InN0cmluZyImJnR5cGVvZiB0LnR5cGU9PSJzdHJpbmciJiZ0eXBlb2YgdC5wYXRoPT0ic3RyaW5nIn1mdW5jdGlvbiBqZCh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJvYmplY3QiJiZ0IT09bnVsbCYmaWkodC5jb250YWluZXIpJiZ2YSh0LnJlZmVyZW5jZSkmJnR5cGVvZiB0Lm1lc3NhZ2U9PSJzdHJpbmcifWZ1bmN0aW9uIExsKHQpe3JldHVybiB0eXBlb2YgdD09Im9iamVjdCImJnQhPT1udWxsJiZBcnJheS5pc0FycmF5KHQuY29udGVudCl9ZnVuY3Rpb24gYWYodCl7cmV0dXJuIHR5cGVvZiB0PT0ib2JqZWN0IiYmdCE9PW51bGwmJnR5cGVvZiB0LnRva2VuVHlwZT09Im9iamVjdCJ9ZnVuY3Rpb24gTTIodCl7cmV0dXJuIExsKHQpJiZ0eXBlb2YgdC5mdWxsVGV4dD09InN0cmluZyJ9dmFyIFhkLFJsPU4oKCk9PnsidXNlIHN0cmljdCI7byhpaSwiaXNBc3ROb2RlIik7byh2YSwiaXNSZWZlcmVuY2UiKTtvKGtSLCJpc0FzdE5vZGVEZXNjcmlwdGlvbiIpO28oamQsImlzTGlua2luZ0Vycm9yIik7WGQ9Y2xhc3N7c3RhdGlje28odGhpcywiQWJzdHJhY3RBc3RSZWZsZWN0aW9uIil9Y29uc3RydWN0b3IoKXt0aGlzLnN1YnR5cGVzPXt9LHRoaXMuYWxsU3VidHlwZXM9e319aXNJbnN0YW5jZShlLHIpe3JldHVybiBpaShlKSYmdGhpcy5pc1N1YnR5cGUoZS4kdHlwZSxyKX1pc1N1YnR5cGUoZSxyKXtpZihlPT09cilyZXR1cm4hMDtsZXQgbj10aGlzLnN1YnR5cGVzW2VdO258fChuPXRoaXMuc3VidHlwZXNbZV09e30pO2xldCBpPW5bcl07aWYoaSE9PXZvaWQgMClyZXR1cm4gaTt7bGV0IGE9dGhpcy5jb21wdXRlSXNTdWJ0eXBlKGUscik7cmV0dXJuIG5bcl09YSxhfX1nZXRBbGxTdWJUeXBlcyhlKXtsZXQgcj10aGlzLmFsbFN1YnR5cGVzW2VdO2lmKHIpcmV0dXJuIHI7e2xldCBuPXRoaXMuZ2V0QWxsVHlwZXMoKSxpPVtdO2ZvcihsZXQgYSBvZiBuKXRoaXMuaXNTdWJ0eXBlKGEsZSkmJmkucHVzaChhKTtyZXR1cm4gdGhpcy5hbGxTdWJ0eXBlc1tlXT1pLGl9fX07byhMbCwiaXNDb21wb3NpdGVDc3ROb2RlIik7byhhZiwiaXNMZWFmQ3N0Tm9kZSIpO28oTTIsImlzUm9vdENzdE5vZGUiKX0pO2Z1bmN0aW9uIE5PZSh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJzdHJpbmciP3Q6dHlwZW9mIHQ+InUiPyJ1bmRlZmluZWQiOnR5cGVvZiB0LnRvU3RyaW5nPT0iZnVuY3Rpb24iP3QudG9TdHJpbmcoKTpPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9ZnVuY3Rpb24gb2sodCl7cmV0dXJuISF0JiZ0eXBlb2YgdFtTeW1ib2wuaXRlcmF0b3JdPT0iZnVuY3Rpb24ifWZ1bmN0aW9uIGVuKC4uLnQpe2lmKHQubGVuZ3RoPT09MSl7bGV0IGU9dFswXTtpZihlIGluc3RhbmNlb2YgYW8pcmV0dXJuIGU7aWYob2soZSkpcmV0dXJuIG5ldyBhbygoKT0+ZVtTeW1ib2wuaXRlcmF0b3JdKCkscj0+ci5uZXh0KCkpO2lmKHR5cGVvZiBlLmxlbmd0aD09Im51bWJlciIpcmV0dXJuIG5ldyBhbygoKT0+KHtpbmRleDowfSkscj0+ci5pbmRleDxlLmxlbmd0aD97ZG9uZTohMSx2YWx1ZTplW3IuaW5kZXgrK119OklhKX1yZXR1cm4gdC5sZW5ndGg+MT9uZXcgYW8oKCk9Pih7Y29sbEluZGV4OjAsYXJySW5kZXg6MH0pLGU9Pntkb3tpZihlLml0ZXJhdG9yKXtsZXQgcj1lLml0ZXJhdG9yLm5leHQoKTtpZighci5kb25lKXJldHVybiByO2UuaXRlcmF0b3I9dm9pZCAwfWlmKGUuYXJyYXkpe2lmKGUuYXJySW5kZXg8ZS5hcnJheS5sZW5ndGgpcmV0dXJue2RvbmU6ITEsdmFsdWU6ZS5hcnJheVtlLmFyckluZGV4KytdfTtlLmFycmF5PXZvaWQgMCxlLmFyckluZGV4PTB9aWYoZS5jb2xsSW5kZXg8dC5sZW5ndGgpe2xldCByPXRbZS5jb2xsSW5kZXgrK107b2socik/ZS5pdGVyYXRvcj1yW1N5bWJvbC5pdGVyYXRvcl0oKTpyJiZ0eXBlb2Ygci5sZW5ndGg9PSJudW1iZXIiJiYoZS5hcnJheT1yKX19d2hpbGUoZS5pdGVyYXRvcnx8ZS5hcnJheXx8ZS5jb2xsSW5kZXg8dC5sZW5ndGgpO3JldHVybiBJYX0pOkkyfXZhciBhbyxJMixJYSxfYyx6bSxQcz1OKCgpPT57InVzZSBzdHJpY3QiO2FvPWNsYXNzIHR7c3RhdGlje28odGhpcywiU3RyZWFtSW1wbCIpfWNvbnN0cnVjdG9yKGUscil7dGhpcy5zdGFydEZuPWUsdGhpcy5uZXh0Rm49cn1pdGVyYXRvcigpe2xldCBlPXtzdGF0ZTp0aGlzLnN0YXJ0Rm4oKSxuZXh0Om8oKCk9PnRoaXMubmV4dEZuKGUuc3RhdGUpLCJuZXh0IiksW1N5bWJvbC5pdGVyYXRvcl06KCk9PmV9O3JldHVybiBlfVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoKX1pc0VtcHR5KCl7cmV0dXJuISF0aGlzLml0ZXJhdG9yKCkubmV4dCgpLmRvbmV9Y291bnQoKXtsZXQgZT10aGlzLml0ZXJhdG9yKCkscj0wLG49ZS5uZXh0KCk7Zm9yKDshbi5kb25lOylyKyssbj1lLm5leHQoKTtyZXR1cm4gcn10b0FycmF5KCl7bGV0IGU9W10scj10aGlzLml0ZXJhdG9yKCksbjtkbyBuPXIubmV4dCgpLG4udmFsdWUhPT12b2lkIDAmJmUucHVzaChuLnZhbHVlKTt3aGlsZSghbi5kb25lKTtyZXR1cm4gZX10b1NldCgpe3JldHVybiBuZXcgU2V0KHRoaXMpfXRvTWFwKGUscil7bGV0IG49dGhpcy5tYXAoaT0+W2U/ZShpKTppLHI/cihpKTppXSk7cmV0dXJuIG5ldyBNYXAobil9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5qb2luKCl9Y29uY2F0KGUpe3JldHVybiBuZXcgdCgoKT0+KHtmaXJzdDp0aGlzLnN0YXJ0Rm4oKSxmaXJzdERvbmU6ITEsaXRlcmF0b3I6ZVtTeW1ib2wuaXRlcmF0b3JdKCl9KSxyPT57bGV0IG47aWYoIXIuZmlyc3REb25lKXtkbyBpZihuPXRoaXMubmV4dEZuKHIuZmlyc3QpLCFuLmRvbmUpcmV0dXJuIG47d2hpbGUoIW4uZG9uZSk7ci5maXJzdERvbmU9ITB9ZG8gaWYobj1yLml0ZXJhdG9yLm5leHQoKSwhbi5kb25lKXJldHVybiBuO3doaWxlKCFuLmRvbmUpO3JldHVybiBJYX0pfWpvaW4oZT0iLCIpe2xldCByPXRoaXMuaXRlcmF0b3IoKSxuPSIiLGksYT0hMTtkbyBpPXIubmV4dCgpLGkuZG9uZXx8KGEmJihuKz1lKSxuKz1OT2UoaS52YWx1ZSkpLGE9ITA7d2hpbGUoIWkuZG9uZSk7cmV0dXJuIG59aW5kZXhPZihlLHI9MCl7bGV0IG49dGhpcy5pdGVyYXRvcigpLGk9MCxhPW4ubmV4dCgpO2Zvcig7IWEuZG9uZTspe2lmKGk+PXImJmEudmFsdWU9PT1lKXJldHVybiBpO2E9bi5uZXh0KCksaSsrfXJldHVybi0xfWV2ZXJ5KGUpe2xldCByPXRoaXMuaXRlcmF0b3IoKSxuPXIubmV4dCgpO2Zvcig7IW4uZG9uZTspe2lmKCFlKG4udmFsdWUpKXJldHVybiExO249ci5uZXh0KCl9cmV0dXJuITB9c29tZShlKXtsZXQgcj10aGlzLml0ZXJhdG9yKCksbj1yLm5leHQoKTtmb3IoOyFuLmRvbmU7KXtpZihlKG4udmFsdWUpKXJldHVybiEwO249ci5uZXh0KCl9cmV0dXJuITF9Zm9yRWFjaChlKXtsZXQgcj10aGlzLml0ZXJhdG9yKCksbj0wLGk9ci5uZXh0KCk7Zm9yKDshaS5kb25lOyllKGkudmFsdWUsbiksaT1yLm5leHQoKSxuKyt9bWFwKGUpe3JldHVybiBuZXcgdCh0aGlzLnN0YXJ0Rm4scj0+e2xldHtkb25lOm4sdmFsdWU6aX09dGhpcy5uZXh0Rm4ocik7cmV0dXJuIG4/SWE6e2RvbmU6ITEsdmFsdWU6ZShpKX19KX1maWx0ZXIoZSl7cmV0dXJuIG5ldyB0KHRoaXMuc3RhcnRGbixyPT57bGV0IG47ZG8gaWYobj10aGlzLm5leHRGbihyKSwhbi5kb25lJiZlKG4udmFsdWUpKXJldHVybiBuO3doaWxlKCFuLmRvbmUpO3JldHVybiBJYX0pfW5vbk51bGxhYmxlKCl7cmV0dXJuIHRoaXMuZmlsdGVyKGU9PmUhPW51bGwpfXJlZHVjZShlLHIpe2xldCBuPXRoaXMuaXRlcmF0b3IoKSxpPXIsYT1uLm5leHQoKTtmb3IoOyFhLmRvbmU7KWk9PT12b2lkIDA/aT1hLnZhbHVlOmk9ZShpLGEudmFsdWUpLGE9bi5uZXh0KCk7cmV0dXJuIGl9cmVkdWNlUmlnaHQoZSxyKXtyZXR1cm4gdGhpcy5yZWN1cnNpdmVSZWR1Y2UodGhpcy5pdGVyYXRvcigpLGUscil9cmVjdXJzaXZlUmVkdWNlKGUscixuKXtsZXQgaT1lLm5leHQoKTtpZihpLmRvbmUpcmV0dXJuIG47bGV0IGE9dGhpcy5yZWN1cnNpdmVSZWR1Y2UoZSxyLG4pO3JldHVybiBhPT09dm9pZCAwP2kudmFsdWU6cihhLGkudmFsdWUpfWZpbmQoZSl7bGV0IHI9dGhpcy5pdGVyYXRvcigpLG49ci5uZXh0KCk7Zm9yKDshbi5kb25lOyl7aWYoZShuLnZhbHVlKSlyZXR1cm4gbi52YWx1ZTtuPXIubmV4dCgpfX1maW5kSW5kZXgoZSl7bGV0IHI9dGhpcy5pdGVyYXRvcigpLG49MCxpPXIubmV4dCgpO2Zvcig7IWkuZG9uZTspe2lmKGUoaS52YWx1ZSkpcmV0dXJuIG47aT1yLm5leHQoKSxuKyt9cmV0dXJuLTF9aW5jbHVkZXMoZSl7bGV0IHI9dGhpcy5pdGVyYXRvcigpLG49ci5uZXh0KCk7Zm9yKDshbi5kb25lOyl7aWYobi52YWx1ZT09PWUpcmV0dXJuITA7bj1yLm5leHQoKX1yZXR1cm4hMX1mbGF0TWFwKGUpe3JldHVybiBuZXcgdCgoKT0+KHt0aGlzOnRoaXMuc3RhcnRGbigpfSkscj0+e2Rve2lmKHIuaXRlcmF0b3Ipe2xldCBhPXIuaXRlcmF0b3IubmV4dCgpO2lmKGEuZG9uZSlyLml0ZXJhdG9yPXZvaWQgMDtlbHNlIHJldHVybiBhfWxldHtkb25lOm4sdmFsdWU6aX09dGhpcy5uZXh0Rm4oci50aGlzKTtpZighbil7bGV0IGE9ZShpKTtpZihvayhhKSlyLml0ZXJhdG9yPWFbU3ltYm9sLml0ZXJhdG9yXSgpO2Vsc2UgcmV0dXJue2RvbmU6ITEsdmFsdWU6YX19fXdoaWxlKHIuaXRlcmF0b3IpO3JldHVybiBJYX0pfWZsYXQoZSl7aWYoZT09PXZvaWQgMCYmKGU9MSksZTw9MClyZXR1cm4gdGhpcztsZXQgcj1lPjE/dGhpcy5mbGF0KGUtMSk6dGhpcztyZXR1cm4gbmV3IHQoKCk9Pih7dGhpczpyLnN0YXJ0Rm4oKX0pLG49Pntkb3tpZihuLml0ZXJhdG9yKXtsZXQgcz1uLml0ZXJhdG9yLm5leHQoKTtpZihzLmRvbmUpbi5pdGVyYXRvcj12b2lkIDA7ZWxzZSByZXR1cm4gc31sZXR7ZG9uZTppLHZhbHVlOmF9PXIubmV4dEZuKG4udGhpcyk7aWYoIWkpaWYob2soYSkpbi5pdGVyYXRvcj1hW1N5bWJvbC5pdGVyYXRvcl0oKTtlbHNlIHJldHVybntkb25lOiExLHZhbHVlOmF9fXdoaWxlKG4uaXRlcmF0b3IpO3JldHVybiBJYX0pfWhlYWQoKXtsZXQgcj10aGlzLml0ZXJhdG9yKCkubmV4dCgpO2lmKCFyLmRvbmUpcmV0dXJuIHIudmFsdWV9dGFpbChlPTEpe3JldHVybiBuZXcgdCgoKT0+e2xldCByPXRoaXMuc3RhcnRGbigpO2ZvcihsZXQgbj0wO248ZTtuKyspaWYodGhpcy5uZXh0Rm4ocikuZG9uZSlyZXR1cm4gcjtyZXR1cm4gcn0sdGhpcy5uZXh0Rm4pfWxpbWl0KGUpe3JldHVybiBuZXcgdCgoKT0+KHtzaXplOjAsc3RhdGU6dGhpcy5zdGFydEZuKCl9KSxyPT4oci5zaXplKyssci5zaXplPmU/SWE6dGhpcy5uZXh0Rm4oci5zdGF0ZSkpKX1kaXN0aW5jdChlKXtyZXR1cm4gbmV3IHQoKCk9Pih7c2V0Om5ldyBTZXQsaW50ZXJuYWxTdGF0ZTp0aGlzLnN0YXJ0Rm4oKX0pLHI9PntsZXQgbjtkbyBpZihuPXRoaXMubmV4dEZuKHIuaW50ZXJuYWxTdGF0ZSksIW4uZG9uZSl7bGV0IGk9ZT9lKG4udmFsdWUpOm4udmFsdWU7aWYoIXIuc2V0LmhhcyhpKSlyZXR1cm4gci5zZXQuYWRkKGkpLG59d2hpbGUoIW4uZG9uZSk7cmV0dXJuIElhfSl9ZXhjbHVkZShlLHIpe2xldCBuPW5ldyBTZXQ7Zm9yKGxldCBpIG9mIGUpe2xldCBhPXI/cihpKTppO24uYWRkKGEpfXJldHVybiB0aGlzLmZpbHRlcihpPT57bGV0IGE9cj9yKGkpOmk7cmV0dXJuIW4uaGFzKGEpfSl9fTtvKE5PZSwidG9TdHJpbmciKTtvKG9rLCJpc0l0ZXJhYmxlIik7STI9bmV3IGFvKCgpPT57fSwoKT0+SWEpLElhPU9iamVjdC5mcmVlemUoe2RvbmU6ITAsdmFsdWU6dm9pZCAwfSk7byhlbiwic3RyZWFtIik7X2M9Y2xhc3MgZXh0ZW5kcyBhb3tzdGF0aWN7byh0aGlzLCJUcmVlU3RyZWFtSW1wbCIpfWNvbnN0cnVjdG9yKGUscixuKXtzdXBlcigoKT0+KHtpdGVyYXRvcnM6bj8uaW5jbHVkZVJvb3Q/W1tlXVtTeW1ib2wuaXRlcmF0b3JdKCldOltyKGUpW1N5bWJvbC5pdGVyYXRvcl0oKV0scHJ1bmVkOiExfSksaT0+e2ZvcihpLnBydW5lZCYmKGkuaXRlcmF0b3JzLnBvcCgpLGkucHJ1bmVkPSExKTtpLml0ZXJhdG9ycy5sZW5ndGg+MDspe2xldCBzPWkuaXRlcmF0b3JzW2kuaXRlcmF0b3JzLmxlbmd0aC0xXS5uZXh0KCk7aWYocy5kb25lKWkuaXRlcmF0b3JzLnBvcCgpO2Vsc2UgcmV0dXJuIGkuaXRlcmF0b3JzLnB1c2gocihzLnZhbHVlKVtTeW1ib2wuaXRlcmF0b3JdKCkpLHN9cmV0dXJuIElhfSl9aXRlcmF0b3IoKXtsZXQgZT17c3RhdGU6dGhpcy5zdGFydEZuKCksbmV4dDpvKCgpPT50aGlzLm5leHRGbihlLnN0YXRlKSwibmV4dCIpLHBydW5lOm8oKCk9PntlLnN0YXRlLnBydW5lZD0hMH0sInBydW5lIiksW1N5bWJvbC5pdGVyYXRvcl06KCk9PmV9O3JldHVybiBlfX07KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoYSl7cmV0dXJuIGEucmVkdWNlKChzLGwpPT5zK2wsMCl9byhlLCJzdW0iKSx0LnN1bT1lO2Z1bmN0aW9uIHIoYSl7cmV0dXJuIGEucmVkdWNlKChzLGwpPT5zKmwsMCl9byhyLCJwcm9kdWN0IiksdC5wcm9kdWN0PXI7ZnVuY3Rpb24gbihhKXtyZXR1cm4gYS5yZWR1Y2UoKHMsbCk9Pk1hdGgubWluKHMsbCkpfW8obiwibWluIiksdC5taW49bjtmdW5jdGlvbiBpKGEpe3JldHVybiBhLnJlZHVjZSgocyxsKT0+TWF0aC5tYXgocyxsKSl9byhpLCJtYXgiKSx0Lm1heD1pfSkoem18fCh6bT17fSkpfSk7dmFyIGNrPXt9O2hyKGNrLHtEZWZhdWx0TmFtZVJlZ2V4cDooKT0+bGssUmFuZ2VDb21wYXJpc29uOigpPT5EYyxjb21wYXJlUmFuZ2U6KCk9PmNhZSxmaW5kQ29tbWVudE5vZGU6KCk9PkFSLGZpbmREZWNsYXJhdGlvbk5vZGVBdE9mZnNldDooKT0+SU9lLGZpbmRMZWFmTm9kZUF0T2Zmc2V0OigpPT5fUixmaW5kTGVhZk5vZGVCZWZvcmVPZmZzZXQ6KCk9PnVhZSxmbGF0dGVuQ3N0OigpPT5NT2UsZ2V0SW50ZXJpb3JOb2RlczooKT0+Qk9lLGdldE5leHROb2RlOigpPT5PT2UsZ2V0UHJldmlvdXNOb2RlOigpPT5mYWUsZ2V0U3RhcnRsaW5lTm9kZTooKT0+UE9lLGluUmFuZ2U6KCk9PkNSLGlzQ2hpbGROb2RlOigpPT5TUixpc0NvbW1lbnROb2RlOigpPT5FUixzdHJlYW1Dc3Q6KCk9PktkLHRvRG9jdW1lbnRTZWdtZW50OigpPT5RZCx0b2tlblRvUmFuZ2U6KCk9PkdtfSk7ZnVuY3Rpb24gS2QodCl7cmV0dXJuIG5ldyBfYyh0LGU9PkxsKGUpP2UuY29udGVudDpbXSx7aW5jbHVkZVJvb3Q6ITB9KX1mdW5jdGlvbiBNT2UodCl7cmV0dXJuIEtkKHQpLmZpbHRlcihhZil9ZnVuY3Rpb24gU1IodCxlKXtmb3IoO3QuY29udGFpbmVyOylpZih0PXQuY29udGFpbmVyLHQ9PT1lKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIEdtKHQpe3JldHVybntzdGFydDp7Y2hhcmFjdGVyOnQuc3RhcnRDb2x1bW4tMSxsaW5lOnQuc3RhcnRMaW5lLTF9LGVuZDp7Y2hhcmFjdGVyOnQuZW5kQ29sdW1uLGxpbmU6dC5lbmRMaW5lLTF9fX1mdW5jdGlvbiBRZCh0KXtpZighdClyZXR1cm47bGV0e29mZnNldDplLGVuZDpyLHJhbmdlOm59PXQ7cmV0dXJue3JhbmdlOm4sb2Zmc2V0OmUsZW5kOnIsbGVuZ3RoOnItZX19ZnVuY3Rpb24gY2FlKHQsZSl7aWYodC5lbmQubGluZTxlLnN0YXJ0LmxpbmV8fHQuZW5kLmxpbmU9PT1lLnN0YXJ0LmxpbmUmJnQuZW5kLmNoYXJhY3Rlcjw9ZS5zdGFydC5jaGFyYWN0ZXIpcmV0dXJuIERjLkJlZm9yZTtpZih0LnN0YXJ0LmxpbmU+ZS5lbmQubGluZXx8dC5zdGFydC5saW5lPT09ZS5lbmQubGluZSYmdC5zdGFydC5jaGFyYWN0ZXI+PWUuZW5kLmNoYXJhY3RlcilyZXR1cm4gRGMuQWZ0ZXI7bGV0IHI9dC5zdGFydC5saW5lPmUuc3RhcnQubGluZXx8dC5zdGFydC5saW5lPT09ZS5zdGFydC5saW5lJiZ0LnN0YXJ0LmNoYXJhY3Rlcj49ZS5zdGFydC5jaGFyYWN0ZXIsbj10LmVuZC5saW5lPGUuZW5kLmxpbmV8fHQuZW5kLmxpbmU9PT1lLmVuZC5saW5lJiZ0LmVuZC5jaGFyYWN0ZXI8PWUuZW5kLmNoYXJhY3RlcjtyZXR1cm4gciYmbj9EYy5JbnNpZGU6cj9EYy5PdmVybGFwQmFjazpuP0RjLk92ZXJsYXBGcm9udDpEYy5PdXRzaWRlfWZ1bmN0aW9uIENSKHQsZSl7cmV0dXJuIGNhZSh0LGUpPkRjLkFmdGVyfWZ1bmN0aW9uIElPZSh0LGUscj1sayl7aWYodCl7aWYoZT4wKXtsZXQgbj1lLXQub2Zmc2V0LGk9dC50ZXh0LmNoYXJBdChuKTtyLnRlc3QoaSl8fGUtLX1yZXR1cm4gX1IodCxlKX19ZnVuY3Rpb24gQVIodCxlKXtpZih0KXtsZXQgcj1mYWUodCwhMCk7aWYociYmRVIocixlKSlyZXR1cm4gcjtpZihNMih0KSl7bGV0IG49dC5jb250ZW50LmZpbmRJbmRleChpPT4haS5oaWRkZW4pO2ZvcihsZXQgaT1uLTE7aT49MDtpLS0pe2xldCBhPXQuY29udGVudFtpXTtpZihFUihhLGUpKXJldHVybiBhfX19fWZ1bmN0aW9uIEVSKHQsZSl7cmV0dXJuIGFmKHQpJiZlLmluY2x1ZGVzKHQudG9rZW5UeXBlLm5hbWUpfWZ1bmN0aW9uIF9SKHQsZSl7aWYoYWYodCkpcmV0dXJuIHQ7aWYoTGwodCkpe2xldCByPWhhZSh0LGUsITEpO2lmKHIpcmV0dXJuIF9SKHIsZSl9fWZ1bmN0aW9uIHVhZSh0LGUpe2lmKGFmKHQpKXJldHVybiB0O2lmKExsKHQpKXtsZXQgcj1oYWUodCxlLCEwKTtpZihyKXJldHVybiB1YWUocixlKX19ZnVuY3Rpb24gaGFlKHQsZSxyKXtsZXQgbj0wLGk9dC5jb250ZW50Lmxlbmd0aC0xLGE7Zm9yKDtuPD1pOyl7bGV0IHM9TWF0aC5mbG9vcigobitpKS8yKSxsPXQuY29udGVudFtzXTtpZihsLm9mZnNldDw9ZSYmbC5lbmQ+ZSlyZXR1cm4gbDtsLmVuZDw9ZT8oYT1yP2w6dm9pZCAwLG49cysxKTppPXMtMX1yZXR1cm4gYX1mdW5jdGlvbiBmYWUodCxlPSEwKXtmb3IoO3QuY29udGFpbmVyOyl7bGV0IHI9dC5jb250YWluZXIsbj1yLmNvbnRlbnQuaW5kZXhPZih0KTtmb3IoO24+MDspe24tLTtsZXQgaT1yLmNvbnRlbnRbbl07aWYoZXx8IWkuaGlkZGVuKXJldHVybiBpfXQ9cn19ZnVuY3Rpb24gT09lKHQsZT0hMCl7Zm9yKDt0LmNvbnRhaW5lcjspe2xldCByPXQuY29udGFpbmVyLG49ci5jb250ZW50LmluZGV4T2YodCksaT1yLmNvbnRlbnQubGVuZ3RoLTE7Zm9yKDtuPGk7KXtuKys7bGV0IGE9ci5jb250ZW50W25dO2lmKGV8fCFhLmhpZGRlbilyZXR1cm4gYX10PXJ9fWZ1bmN0aW9uIFBPZSh0KXtpZih0LnJhbmdlLnN0YXJ0LmNoYXJhY3Rlcj09PTApcmV0dXJuIHQ7bGV0IGU9dC5yYW5nZS5zdGFydC5saW5lLHI9dCxuO2Zvcig7dC5jb250YWluZXI7KXtsZXQgaT10LmNvbnRhaW5lcixhPW4/P2kuY29udGVudC5pbmRleE9mKHQpO2lmKGE9PT0wPyh0PWksbj12b2lkIDApOihuPWEtMSx0PWkuY29udGVudFtuXSksdC5yYW5nZS5zdGFydC5saW5lIT09ZSlicmVhaztyPXR9cmV0dXJuIHJ9ZnVuY3Rpb24gQk9lKHQsZSl7bGV0IHI9Rk9lKHQsZSk7cmV0dXJuIHI/ci5wYXJlbnQuY29udGVudC5zbGljZShyLmErMSxyLmIpOltdfWZ1bmN0aW9uIEZPZSh0LGUpe2xldCByPWxhZSh0KSxuPWxhZShlKSxpO2ZvcihsZXQgYT0wO2E8ci5sZW5ndGgmJmE8bi5sZW5ndGg7YSsrKXtsZXQgcz1yW2FdLGw9blthXTtpZihzLnBhcmVudD09PWwucGFyZW50KWk9e3BhcmVudDpzLnBhcmVudCxhOnMuaW5kZXgsYjpsLmluZGV4fTtlbHNlIGJyZWFrfXJldHVybiBpfWZ1bmN0aW9uIGxhZSh0KXtsZXQgZT1bXTtmb3IoO3QuY29udGFpbmVyOyl7bGV0IHI9dC5jb250YWluZXIsbj1yLmNvbnRlbnQuaW5kZXhPZih0KTtlLnB1c2goe3BhcmVudDpyLGluZGV4Om59KSx0PXJ9cmV0dXJuIGUucmV2ZXJzZSgpfXZhciBEYyxsayxObD1OKCgpPT57InVzZSBzdHJpY3QiO1JsKCk7UHMoKTtvKEtkLCJzdHJlYW1Dc3QiKTtvKE1PZSwiZmxhdHRlbkNzdCIpO28oU1IsImlzQ2hpbGROb2RlIik7byhHbSwidG9rZW5Ub1JhbmdlIik7byhRZCwidG9Eb2N1bWVudFNlZ21lbnQiKTsoZnVuY3Rpb24odCl7dFt0LkJlZm9yZT0wXT0iQmVmb3JlIix0W3QuQWZ0ZXI9MV09IkFmdGVyIix0W3QuT3ZlcmxhcEZyb250PTJdPSJPdmVybGFwRnJvbnQiLHRbdC5PdmVybGFwQmFjaz0zXT0iT3ZlcmxhcEJhY2siLHRbdC5JbnNpZGU9NF09Ikluc2lkZSIsdFt0Lk91dHNpZGU9NV09Ik91dHNpZGUifSkoRGN8fChEYz17fSkpO28oY2FlLCJjb21wYXJlUmFuZ2UiKTtvKENSLCJpblJhbmdlIik7bGs9L15bXHdccHtMfV0kL3U7byhJT2UsImZpbmREZWNsYXJhdGlvbk5vZGVBdE9mZnNldCIpO28oQVIsImZpbmRDb21tZW50Tm9kZSIpO28oRVIsImlzQ29tbWVudE5vZGUiKTtvKF9SLCJmaW5kTGVhZk5vZGVBdE9mZnNldCIpO28odWFlLCJmaW5kTGVhZk5vZGVCZWZvcmVPZmZzZXQiKTtvKGhhZSwiYmluYXJ5U2VhcmNoIik7byhmYWUsImdldFByZXZpb3VzTm9kZSIpO28oT09lLCJnZXROZXh0Tm9kZSIpO28oUE9lLCJnZXRTdGFydGxpbmVOb2RlIik7byhCT2UsImdldEludGVyaW9yTm9kZXMiKTtvKEZPZSwiZ2V0Q29tbW9uUGFyZW50Iik7byhsYWUsImdldFBhcmVudENoYWluIil9KTtmdW5jdGlvbiBMYyh0KXt0aHJvdyBuZXcgRXJyb3IoIkVycm9yISBUaGUgaW5wdXQgdmFsdWUgd2FzIG5vdCBoYW5kbGVkLiIpfXZhciBaZCx1az1OKCgpPT57InVzZSBzdHJpY3QiO1pkPWNsYXNzIGV4dGVuZHMgRXJyb3J7c3RhdGlje28odGhpcywiRXJyb3JXaXRoTG9jYXRpb24iKX1jb25zdHJ1Y3RvcihlLHIpe3N1cGVyKGU/YCR7cn0gYXQgJHtlLnJhbmdlLnN0YXJ0LmxpbmV9OiR7ZS5yYW5nZS5zdGFydC5jaGFyYWN0ZXJ9YDpyKX19O28oTGMsImFzc2VydFVucmVhY2hhYmxlIil9KTt2YXIgVTI9e307aHIoVTIse0Fic3RyYWN0RWxlbWVudDooKT0+SG0sQWJzdHJhY3RSdWxlOigpPT5WbSxBYnN0cmFjdFR5cGU6KCk9PlVtLEFjdGlvbjooKT0+Y2csQWx0ZXJuYXRpdmVzOigpPT51ZyxBcnJheUxpdGVyYWw6KCk9PldtLEFycmF5VHlwZTooKT0+cW0sQXNzaWdubWVudDooKT0+aGcsQm9vbGVhbkxpdGVyYWw6KCk9PlltLENoYXJhY3RlclJhbmdlOigpPT5mZyxDb25kaXRpb246KCk9Pk8yLENvbmp1bmN0aW9uOigpPT5YbSxDcm9zc1JlZmVyZW5jZTooKT0+ZGcsRGlzanVuY3Rpb246KCk9PmptLEVuZE9mRmlsZTooKT0+cGcsR3JhbW1hcjooKT0+S20sR3JhbW1hckltcG9ydDooKT0+QjIsR3JvdXA6KCk9Pm1nLEluZmVycmVkVHlwZTooKT0+UW0sSW50ZXJmYWNlOigpPT5abSxLZXl3b3JkOigpPT5nZyxMYW5naXVtR3JhbW1hckFzdFJlZmxlY3Rpb246KCk9PkNnLExhbmdpdW1HcmFtbWFyVGVybWluYWxzOigpPT4kT2UsTmFtZWRBcmd1bWVudDooKT0+RjIsTmVnYXRlZFRva2VuOigpPT55ZyxOZWdhdGlvbjooKT0+Sm0sTnVtYmVyTGl0ZXJhbDooKT0+ZWcsUGFyYW1ldGVyOigpPT50ZyxQYXJhbWV0ZXJSZWZlcmVuY2U6KCk9PnJnLFBhcnNlclJ1bGU6KCk9Pm5nLFJlZmVyZW5jZVR5cGU6KCk9PmlnLFJlZ2V4VG9rZW46KCk9PnZnLFJldHVyblR5cGU6KCk9PiQyLFJ1bGVDYWxsOigpPT54ZyxTaW1wbGVUeXBlOigpPT5hZyxTdHJpbmdMaXRlcmFsOigpPT5zZyxUZXJtaW5hbEFsdGVybmF0aXZlczooKT0+YmcsVGVybWluYWxHcm91cDooKT0+d2csVGVybWluYWxSdWxlOigpPT5KZCxUZXJtaW5hbFJ1bGVDYWxsOigpPT5UZyxUeXBlOigpPT5vZyxUeXBlQXR0cmlidXRlOigpPT56MixUeXBlRGVmaW5pdGlvbjooKT0+aGssVW5pb25UeXBlOigpPT5sZyxVbm9yZGVyZWRHcm91cDooKT0+a2csVW50aWxUb2tlbjooKT0+RWcsVmFsdWVMaXRlcmFsOigpPT5QMixXaWxkY2FyZDooKT0+U2csaXNBYnN0cmFjdEVsZW1lbnQ6KCk9PkcyLGlzQWJzdHJhY3RSdWxlOigpPT56T2UsaXNBYnN0cmFjdFR5cGU6KCk9PkdPZSxpc0FjdGlvbjooKT0+TXUsaXNBbHRlcm5hdGl2ZXM6KCk9Pm1rLGlzQXJyYXlMaXRlcmFsOigpPT5xT2UsaXNBcnJheVR5cGU6KCk9PkRSLGlzQXNzaWdubWVudDooKT0+TWwsaXNCb29sZWFuTGl0ZXJhbDooKT0+TFIsaXNDaGFyYWN0ZXJSYW5nZTooKT0+RlIsaXNDb25kaXRpb246KCk9PlZPZSxpc0Nvbmp1bmN0aW9uOigpPT5SUixpc0Nyb3NzUmVmZXJlbmNlOigpPT5lcCxpc0Rpc2p1bmN0aW9uOigpPT5OUixpc0VuZE9mRmlsZTooKT0+JFIsaXNGZWF0dXJlTmFtZTooKT0+VU9lLGlzR3JhbW1hcjooKT0+WU9lLGlzR3JhbW1hckltcG9ydDooKT0+WE9lLGlzR3JvdXA6KCk9PnNmLGlzSW5mZXJyZWRUeXBlOigpPT5mayxpc0ludGVyZmFjZTooKT0+ZGssaXNLZXl3b3JkOigpPT5Ibyxpc05hbWVkQXJndW1lbnQ6KCk9PmpPZSxpc05lZ2F0ZWRUb2tlbjooKT0+elIsaXNOZWdhdGlvbjooKT0+TVIsaXNOdW1iZXJMaXRlcmFsOigpPT5LT2UsaXNQYXJhbWV0ZXI6KCk9PlFPZSxpc1BhcmFtZXRlclJlZmVyZW5jZTooKT0+SVIsaXNQYXJzZXJSdWxlOigpPT5PYSxpc1ByaW1pdGl2ZVR5cGU6KCk9PmRhZSxpc1JlZmVyZW5jZVR5cGU6KCk9Pk9SLGlzUmVnZXhUb2tlbjooKT0+R1IsaXNSZXR1cm5UeXBlOigpPT5QUixpc1J1bGVDYWxsOigpPT5JbCxpc1NpbXBsZVR5cGU6KCk9PnBrLGlzU3RyaW5nTGl0ZXJhbDooKT0+Wk9lLGlzVGVybWluYWxBbHRlcm5hdGl2ZXM6KCk9PlZSLGlzVGVybWluYWxHcm91cDooKT0+VVIsaXNUZXJtaW5hbFJ1bGU6KCk9PnNvLGlzVGVybWluYWxSdWxlQ2FsbDooKT0+Z2ssaXNUeXBlOigpPT5WMixpc1R5cGVBdHRyaWJ1dGU6KCk9PkpPZSxpc1R5cGVEZWZpbml0aW9uOigpPT5IT2UsaXNVbmlvblR5cGU6KCk9PkJSLGlzVW5vcmRlcmVkR3JvdXA6KCk9PnlrLGlzVW50aWxUb2tlbjooKT0+SFIsaXNWYWx1ZUxpdGVyYWw6KCk9PldPZSxpc1dpbGRjYXJkOigpPT5XUixyZWZsZWN0aW9uOigpPT5scn0pO2Z1bmN0aW9uIHpPZSh0KXtyZXR1cm4gbHIuaXNJbnN0YW5jZSh0LFZtKX1mdW5jdGlvbiBHT2UodCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxVbSl9ZnVuY3Rpb24gVk9lKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsTzIpfWZ1bmN0aW9uIFVPZSh0KXtyZXR1cm4gZGFlKHQpfHx0PT09ImN1cnJlbnQifHx0PT09ImVudHJ5Inx8dD09PSJleHRlbmRzInx8dD09PSJmYWxzZSJ8fHQ9PT0iZnJhZ21lbnQifHx0PT09ImdyYW1tYXIifHx0PT09ImhpZGRlbiJ8fHQ9PT0iaW1wb3J0Inx8dD09PSJpbnRlcmZhY2UifHx0PT09InJldHVybnMifHx0PT09InRlcm1pbmFsInx8dD09PSJ0cnVlInx8dD09PSJ0eXBlInx8dD09PSJpbmZlciJ8fHQ9PT0iaW5mZXJzInx8dD09PSJ3aXRoInx8dHlwZW9mIHQ9PSJzdHJpbmciJiYvXF4/W19hLXpBLVpdW1x3X10qLy50ZXN0KHQpfWZ1bmN0aW9uIGRhZSh0KXtyZXR1cm4gdD09PSJzdHJpbmcifHx0PT09Im51bWJlciJ8fHQ9PT0iYm9vbGVhbiJ8fHQ9PT0iRGF0ZSJ8fHQ9PT0iYmlnaW50In1mdW5jdGlvbiBIT2UodCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxoayl9ZnVuY3Rpb24gV09lKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsUDIpfWZ1bmN0aW9uIEcyKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsSG0pfWZ1bmN0aW9uIHFPZSh0KXtyZXR1cm4gbHIuaXNJbnN0YW5jZSh0LFdtKX1mdW5jdGlvbiBEUih0KXtyZXR1cm4gbHIuaXNJbnN0YW5jZSh0LHFtKX1mdW5jdGlvbiBMUih0KXtyZXR1cm4gbHIuaXNJbnN0YW5jZSh0LFltKX1mdW5jdGlvbiBSUih0KXtyZXR1cm4gbHIuaXNJbnN0YW5jZSh0LFhtKX1mdW5jdGlvbiBOUih0KXtyZXR1cm4gbHIuaXNJbnN0YW5jZSh0LGptKX1mdW5jdGlvbiBZT2UodCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxLbSl9ZnVuY3Rpb24gWE9lKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsQjIpfWZ1bmN0aW9uIGZrKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsUW0pfWZ1bmN0aW9uIGRrKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsWm0pfWZ1bmN0aW9uIGpPZSh0KXtyZXR1cm4gbHIuaXNJbnN0YW5jZSh0LEYyKX1mdW5jdGlvbiBNUih0KXtyZXR1cm4gbHIuaXNJbnN0YW5jZSh0LEptKX1mdW5jdGlvbiBLT2UodCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxlZyl9ZnVuY3Rpb24gUU9lKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsdGcpfWZ1bmN0aW9uIElSKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQscmcpfWZ1bmN0aW9uIE9hKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsbmcpfWZ1bmN0aW9uIE9SKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsaWcpfWZ1bmN0aW9uIFBSKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsJDIpfWZ1bmN0aW9uIHBrKHQpe3JldHVybiBsci5pc0luc3RhbmNlKHQsYWcpfWZ1bmN0aW9uIFpPZSh0KXtyZXR1cm4gbHIuaXNJbnN0YW5jZSh0LHNnKX1mdW5jdGlvbiBzbyh0KXtyZXR1cm4gbHIuaXNJbnN0YW5jZSh0LEpkKX1mdW5jdGlvbiBWMih0KXtyZXR1cm4gbHIuaXNJbnN0YW5jZSh0LG9nKX1mdW5jdGlvbiBKT2UodCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCx6Mil9ZnVuY3Rpb24gQlIodCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxsZyl9ZnVuY3Rpb24gTXUodCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxjZyl9ZnVuY3Rpb24gbWsodCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCx1Zyl9ZnVuY3Rpb24gTWwodCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxoZyl9ZnVuY3Rpb24gRlIodCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxmZyl9ZnVuY3Rpb24gZXAodCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxkZyl9ZnVuY3Rpb24gJFIodCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxwZyl9ZnVuY3Rpb24gc2YodCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxtZyl9ZnVuY3Rpb24gSG8odCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxnZyl9ZnVuY3Rpb24gelIodCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCx5Zyl9ZnVuY3Rpb24gR1IodCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCx2Zyl9ZnVuY3Rpb24gSWwodCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCx4Zyl9ZnVuY3Rpb24gVlIodCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxiZyl9ZnVuY3Rpb24gVVIodCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCx3Zyl9ZnVuY3Rpb24gZ2sodCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxUZyl9ZnVuY3Rpb24geWsodCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxrZyl9ZnVuY3Rpb24gSFIodCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxFZyl9ZnVuY3Rpb24gV1IodCl7cmV0dXJuIGxyLmlzSW5zdGFuY2UodCxTZyl9dmFyICRPZSxWbSxVbSxPMixoayxQMixIbSxXbSxxbSxZbSxYbSxqbSxLbSxCMixRbSxabSxGMixKbSxlZyx0ZyxyZyxuZyxpZywkMixhZyxzZyxKZCxvZyx6MixsZyxjZyx1ZyxoZyxmZyxkZyxwZyxtZyxnZyx5Zyx2Zyx4ZyxiZyx3ZyxUZyxrZyxFZyxTZyxDZyxscixSYz1OKCgpPT57InVzZSBzdHJpY3QiO1JsKCk7JE9lPXtJRDovXF4/W19hLXpBLVpdW1x3X10qLyxTVFJJTkc6LyIoXFwufFteIlxcXSkqInwnKFxcLnxbXidcXF0pKicvLE5VTUJFUjovTmFOfC0/KChcZCpcLlxkK3xcZCspKFtFZV1bKy1dP1xkKyk/fEluZmluaXR5KS8sUmVnZXhMaXRlcmFsOi9cLyg/IVsqKz9dKSg/OlteXHJcblxbL1xcXXxcXC58XFsoPzpbXlxyXG5cXVxcXXxcXC4pKlxdKStcL1thLXpdKi8sV1M6L1xzKy8sTUxfQ09NTUVOVDovXC9cKltcc1xTXSo/XCpcLy8sU0xfQ09NTUVOVDovXC9cL1teXG5ccl0qL30sVm09IkFic3RyYWN0UnVsZSI7byh6T2UsImlzQWJzdHJhY3RSdWxlIik7VW09IkFic3RyYWN0VHlwZSI7byhHT2UsImlzQWJzdHJhY3RUeXBlIik7TzI9IkNvbmRpdGlvbiI7byhWT2UsImlzQ29uZGl0aW9uIik7byhVT2UsImlzRmVhdHVyZU5hbWUiKTtvKGRhZSwiaXNQcmltaXRpdmVUeXBlIik7aGs9IlR5cGVEZWZpbml0aW9uIjtvKEhPZSwiaXNUeXBlRGVmaW5pdGlvbiIpO1AyPSJWYWx1ZUxpdGVyYWwiO28oV09lLCJpc1ZhbHVlTGl0ZXJhbCIpO0htPSJBYnN0cmFjdEVsZW1lbnQiO28oRzIsImlzQWJzdHJhY3RFbGVtZW50Iik7V209IkFycmF5TGl0ZXJhbCI7byhxT2UsImlzQXJyYXlMaXRlcmFsIik7cW09IkFycmF5VHlwZSI7byhEUiwiaXNBcnJheVR5cGUiKTtZbT0iQm9vbGVhbkxpdGVyYWwiO28oTFIsImlzQm9vbGVhbkxpdGVyYWwiKTtYbT0iQ29uanVuY3Rpb24iO28oUlIsImlzQ29uanVuY3Rpb24iKTtqbT0iRGlzanVuY3Rpb24iO28oTlIsImlzRGlzanVuY3Rpb24iKTtLbT0iR3JhbW1hciI7byhZT2UsImlzR3JhbW1hciIpO0IyPSJHcmFtbWFySW1wb3J0IjtvKFhPZSwiaXNHcmFtbWFySW1wb3J0Iik7UW09IkluZmVycmVkVHlwZSI7byhmaywiaXNJbmZlcnJlZFR5cGUiKTtabT0iSW50ZXJmYWNlIjtvKGRrLCJpc0ludGVyZmFjZSIpO0YyPSJOYW1lZEFyZ3VtZW50IjtvKGpPZSwiaXNOYW1lZEFyZ3VtZW50Iik7Sm09Ik5lZ2F0aW9uIjtvKE1SLCJpc05lZ2F0aW9uIik7ZWc9Ik51bWJlckxpdGVyYWwiO28oS09lLCJpc051bWJlckxpdGVyYWwiKTt0Zz0iUGFyYW1ldGVyIjtvKFFPZSwiaXNQYXJhbWV0ZXIiKTtyZz0iUGFyYW1ldGVyUmVmZXJlbmNlIjtvKElSLCJpc1BhcmFtZXRlclJlZmVyZW5jZSIpO25nPSJQYXJzZXJSdWxlIjtvKE9hLCJpc1BhcnNlclJ1bGUiKTtpZz0iUmVmZXJlbmNlVHlwZSI7byhPUiwiaXNSZWZlcmVuY2VUeXBlIik7JDI9IlJldHVyblR5cGUiO28oUFIsImlzUmV0dXJuVHlwZSIpO2FnPSJTaW1wbGVUeXBlIjtvKHBrLCJpc1NpbXBsZVR5cGUiKTtzZz0iU3RyaW5nTGl0ZXJhbCI7byhaT2UsImlzU3RyaW5nTGl0ZXJhbCIpO0pkPSJUZXJtaW5hbFJ1bGUiO28oc28sImlzVGVybWluYWxSdWxlIik7b2c9IlR5cGUiO28oVjIsImlzVHlwZSIpO3oyPSJUeXBlQXR0cmlidXRlIjtvKEpPZSwiaXNUeXBlQXR0cmlidXRlIik7bGc9IlVuaW9uVHlwZSI7byhCUiwiaXNVbmlvblR5cGUiKTtjZz0iQWN0aW9uIjtvKE11LCJpc0FjdGlvbiIpO3VnPSJBbHRlcm5hdGl2ZXMiO28obWssImlzQWx0ZXJuYXRpdmVzIik7aGc9IkFzc2lnbm1lbnQiO28oTWwsImlzQXNzaWdubWVudCIpO2ZnPSJDaGFyYWN0ZXJSYW5nZSI7byhGUiwiaXNDaGFyYWN0ZXJSYW5nZSIpO2RnPSJDcm9zc1JlZmVyZW5jZSI7byhlcCwiaXNDcm9zc1JlZmVyZW5jZSIpO3BnPSJFbmRPZkZpbGUiO28oJFIsImlzRW5kT2ZGaWxlIik7bWc9Ikdyb3VwIjtvKHNmLCJpc0dyb3VwIik7Z2c9IktleXdvcmQiO28oSG8sImlzS2V5d29yZCIpO3lnPSJOZWdhdGVkVG9rZW4iO28oelIsImlzTmVnYXRlZFRva2VuIik7dmc9IlJlZ2V4VG9rZW4iO28oR1IsImlzUmVnZXhUb2tlbiIpO3hnPSJSdWxlQ2FsbCI7byhJbCwiaXNSdWxlQ2FsbCIpO2JnPSJUZXJtaW5hbEFsdGVybmF0aXZlcyI7byhWUiwiaXNUZXJtaW5hbEFsdGVybmF0aXZlcyIpO3dnPSJUZXJtaW5hbEdyb3VwIjtvKFVSLCJpc1Rlcm1pbmFsR3JvdXAiKTtUZz0iVGVybWluYWxSdWxlQ2FsbCI7byhnaywiaXNUZXJtaW5hbFJ1bGVDYWxsIik7a2c9IlVub3JkZXJlZEdyb3VwIjtvKHlrLCJpc1Vub3JkZXJlZEdyb3VwIik7RWc9IlVudGlsVG9rZW4iO28oSFIsImlzVW50aWxUb2tlbiIpO1NnPSJXaWxkY2FyZCI7byhXUiwiaXNXaWxkY2FyZCIpO0NnPWNsYXNzIGV4dGVuZHMgWGR7c3RhdGlje28odGhpcywiTGFuZ2l1bUdyYW1tYXJBc3RSZWZsZWN0aW9uIil9Z2V0QWxsVHlwZXMoKXtyZXR1cm5bSG0sVm0sVW0sY2csdWcsV20scW0saGcsWW0sZmcsTzIsWG0sZGcsam0scGcsS20sQjIsbWcsUW0sWm0sZ2csRjIseWcsSm0sZWcsdGcscmcsbmcsaWcsdmcsJDIseGcsYWcsc2csYmcsd2csSmQsVGcsb2csejIsaGssbGcsa2csRWcsUDIsU2ddfWNvbXB1dGVJc1N1YnR5cGUoZSxyKXtzd2l0Y2goZSl7Y2FzZSBjZzpjYXNlIHVnOmNhc2UgaGc6Y2FzZSBmZzpjYXNlIGRnOmNhc2UgcGc6Y2FzZSBtZzpjYXNlIGdnOmNhc2UgeWc6Y2FzZSB2ZzpjYXNlIHhnOmNhc2UgYmc6Y2FzZSB3ZzpjYXNlIFRnOmNhc2Uga2c6Y2FzZSBFZzpjYXNlIFNnOnJldHVybiB0aGlzLmlzU3VidHlwZShIbSxyKTtjYXNlIFdtOmNhc2UgZWc6Y2FzZSBzZzpyZXR1cm4gdGhpcy5pc1N1YnR5cGUoUDIscik7Y2FzZSBxbTpjYXNlIGlnOmNhc2UgYWc6Y2FzZSBsZzpyZXR1cm4gdGhpcy5pc1N1YnR5cGUoaGsscik7Y2FzZSBZbTpyZXR1cm4gdGhpcy5pc1N1YnR5cGUoTzIscil8fHRoaXMuaXNTdWJ0eXBlKFAyLHIpO2Nhc2UgWG06Y2FzZSBqbTpjYXNlIEptOmNhc2Ugcmc6cmV0dXJuIHRoaXMuaXNTdWJ0eXBlKE8yLHIpO2Nhc2UgUW06Y2FzZSBabTpjYXNlIG9nOnJldHVybiB0aGlzLmlzU3VidHlwZShVbSxyKTtjYXNlIG5nOnJldHVybiB0aGlzLmlzU3VidHlwZShWbSxyKXx8dGhpcy5pc1N1YnR5cGUoVW0scik7Y2FzZSBKZDpyZXR1cm4gdGhpcy5pc1N1YnR5cGUoVm0scik7ZGVmYXVsdDpyZXR1cm4hMX19Z2V0UmVmZXJlbmNlVHlwZShlKXtsZXQgcj1gJHtlLmNvbnRhaW5lci4kdHlwZX06JHtlLnByb3BlcnR5fWA7c3dpdGNoKHIpe2Nhc2UiQWN0aW9uOnR5cGUiOmNhc2UiQ3Jvc3NSZWZlcmVuY2U6dHlwZSI6Y2FzZSJJbnRlcmZhY2U6c3VwZXJUeXBlcyI6Y2FzZSJQYXJzZXJSdWxlOnJldHVyblR5cGUiOmNhc2UiU2ltcGxlVHlwZTp0eXBlUmVmIjpyZXR1cm4gVW07Y2FzZSJHcmFtbWFyOmhpZGRlblRva2VucyI6Y2FzZSJQYXJzZXJSdWxlOmhpZGRlblRva2VucyI6Y2FzZSJSdWxlQ2FsbDpydWxlIjpyZXR1cm4gVm07Y2FzZSJHcmFtbWFyOnVzZWRHcmFtbWFycyI6cmV0dXJuIEttO2Nhc2UiTmFtZWRBcmd1bWVudDpwYXJhbWV0ZXIiOmNhc2UiUGFyYW1ldGVyUmVmZXJlbmNlOnBhcmFtZXRlciI6cmV0dXJuIHRnO2Nhc2UiVGVybWluYWxSdWxlQ2FsbDpydWxlIjpyZXR1cm4gSmQ7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYCR7cn0gaXMgbm90IGEgdmFsaWQgcmVmZXJlbmNlIGlkLmApfX1nZXRUeXBlTWV0YURhdGEoZSl7c3dpdGNoKGUpe2Nhc2UgSG06cmV0dXJue25hbWU6SG0scHJvcGVydGllczpbe25hbWU6ImNhcmRpbmFsaXR5In0se25hbWU6Imxvb2thaGVhZCJ9XX07Y2FzZSBXbTpyZXR1cm57bmFtZTpXbSxwcm9wZXJ0aWVzOlt7bmFtZToiZWxlbWVudHMiLGRlZmF1bHRWYWx1ZTpbXX1dfTtjYXNlIHFtOnJldHVybntuYW1lOnFtLHByb3BlcnRpZXM6W3tuYW1lOiJlbGVtZW50VHlwZSJ9XX07Y2FzZSBZbTpyZXR1cm57bmFtZTpZbSxwcm9wZXJ0aWVzOlt7bmFtZToidHJ1ZSIsZGVmYXVsdFZhbHVlOiExfV19O2Nhc2UgWG06cmV0dXJue25hbWU6WG0scHJvcGVydGllczpbe25hbWU6ImxlZnQifSx7bmFtZToicmlnaHQifV19O2Nhc2Ugam06cmV0dXJue25hbWU6am0scHJvcGVydGllczpbe25hbWU6ImxlZnQifSx7bmFtZToicmlnaHQifV19O2Nhc2UgS206cmV0dXJue25hbWU6S20scHJvcGVydGllczpbe25hbWU6ImRlZmluZXNIaWRkZW5Ub2tlbnMiLGRlZmF1bHRWYWx1ZTohMX0se25hbWU6ImhpZGRlblRva2VucyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToiaW1wb3J0cyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToiaW50ZXJmYWNlcyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToiaXNEZWNsYXJlZCIsZGVmYXVsdFZhbHVlOiExfSx7bmFtZToibmFtZSJ9LHtuYW1lOiJydWxlcyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToidHlwZXMiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6InVzZWRHcmFtbWFycyIsZGVmYXVsdFZhbHVlOltdfV19O2Nhc2UgQjI6cmV0dXJue25hbWU6QjIscHJvcGVydGllczpbe25hbWU6InBhdGgifV19O2Nhc2UgUW06cmV0dXJue25hbWU6UW0scHJvcGVydGllczpbe25hbWU6Im5hbWUifV19O2Nhc2UgWm06cmV0dXJue25hbWU6Wm0scHJvcGVydGllczpbe25hbWU6ImF0dHJpYnV0ZXMiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6Im5hbWUifSx7bmFtZToic3VwZXJUeXBlcyIsZGVmYXVsdFZhbHVlOltdfV19O2Nhc2UgRjI6cmV0dXJue25hbWU6RjIscHJvcGVydGllczpbe25hbWU6ImNhbGxlZEJ5TmFtZSIsZGVmYXVsdFZhbHVlOiExfSx7bmFtZToicGFyYW1ldGVyIn0se25hbWU6InZhbHVlIn1dfTtjYXNlIEptOnJldHVybntuYW1lOkptLHByb3BlcnRpZXM6W3tuYW1lOiJ2YWx1ZSJ9XX07Y2FzZSBlZzpyZXR1cm57bmFtZTplZyxwcm9wZXJ0aWVzOlt7bmFtZToidmFsdWUifV19O2Nhc2UgdGc6cmV0dXJue25hbWU6dGcscHJvcGVydGllczpbe25hbWU6Im5hbWUifV19O2Nhc2Ugcmc6cmV0dXJue25hbWU6cmcscHJvcGVydGllczpbe25hbWU6InBhcmFtZXRlciJ9XX07Y2FzZSBuZzpyZXR1cm57bmFtZTpuZyxwcm9wZXJ0aWVzOlt7bmFtZToiZGF0YVR5cGUifSx7bmFtZToiZGVmaW5lc0hpZGRlblRva2VucyIsZGVmYXVsdFZhbHVlOiExfSx7bmFtZToiZGVmaW5pdGlvbiJ9LHtuYW1lOiJlbnRyeSIsZGVmYXVsdFZhbHVlOiExfSx7bmFtZToiZnJhZ21lbnQiLGRlZmF1bHRWYWx1ZTohMX0se25hbWU6ImhpZGRlblRva2VucyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToiaW5mZXJyZWRUeXBlIn0se25hbWU6Im5hbWUifSx7bmFtZToicGFyYW1ldGVycyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToicmV0dXJuVHlwZSJ9LHtuYW1lOiJ3aWxkY2FyZCIsZGVmYXVsdFZhbHVlOiExfV19O2Nhc2UgaWc6cmV0dXJue25hbWU6aWcscHJvcGVydGllczpbe25hbWU6InJlZmVyZW5jZVR5cGUifV19O2Nhc2UgJDI6cmV0dXJue25hbWU6JDIscHJvcGVydGllczpbe25hbWU6Im5hbWUifV19O2Nhc2UgYWc6cmV0dXJue25hbWU6YWcscHJvcGVydGllczpbe25hbWU6InByaW1pdGl2ZVR5cGUifSx7bmFtZToic3RyaW5nVHlwZSJ9LHtuYW1lOiJ0eXBlUmVmIn1dfTtjYXNlIHNnOnJldHVybntuYW1lOnNnLHByb3BlcnRpZXM6W3tuYW1lOiJ2YWx1ZSJ9XX07Y2FzZSBKZDpyZXR1cm57bmFtZTpKZCxwcm9wZXJ0aWVzOlt7bmFtZToiZGVmaW5pdGlvbiJ9LHtuYW1lOiJmcmFnbWVudCIsZGVmYXVsdFZhbHVlOiExfSx7bmFtZToiaGlkZGVuIixkZWZhdWx0VmFsdWU6ITF9LHtuYW1lOiJuYW1lIn0se25hbWU6InR5cGUifV19O2Nhc2Ugb2c6cmV0dXJue25hbWU6b2cscHJvcGVydGllczpbe25hbWU6Im5hbWUifSx7bmFtZToidHlwZSJ9XX07Y2FzZSB6MjpyZXR1cm57bmFtZTp6Mixwcm9wZXJ0aWVzOlt7bmFtZToiZGVmYXVsdFZhbHVlIn0se25hbWU6ImlzT3B0aW9uYWwiLGRlZmF1bHRWYWx1ZTohMX0se25hbWU6Im5hbWUifSx7bmFtZToidHlwZSJ9XX07Y2FzZSBsZzpyZXR1cm57bmFtZTpsZyxwcm9wZXJ0aWVzOlt7bmFtZToidHlwZXMiLGRlZmF1bHRWYWx1ZTpbXX1dfTtjYXNlIGNnOnJldHVybntuYW1lOmNnLHByb3BlcnRpZXM6W3tuYW1lOiJjYXJkaW5hbGl0eSJ9LHtuYW1lOiJmZWF0dXJlIn0se25hbWU6ImluZmVycmVkVHlwZSJ9LHtuYW1lOiJsb29rYWhlYWQifSx7bmFtZToib3BlcmF0b3IifSx7bmFtZToidHlwZSJ9XX07Y2FzZSB1ZzpyZXR1cm57bmFtZTp1Zyxwcm9wZXJ0aWVzOlt7bmFtZToiY2FyZGluYWxpdHkifSx7bmFtZToiZWxlbWVudHMiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6Imxvb2thaGVhZCJ9XX07Y2FzZSBoZzpyZXR1cm57bmFtZTpoZyxwcm9wZXJ0aWVzOlt7bmFtZToiY2FyZGluYWxpdHkifSx7bmFtZToiZmVhdHVyZSJ9LHtuYW1lOiJsb29rYWhlYWQifSx7bmFtZToib3BlcmF0b3IifSx7bmFtZToidGVybWluYWwifV19O2Nhc2UgZmc6cmV0dXJue25hbWU6ZmcscHJvcGVydGllczpbe25hbWU6ImNhcmRpbmFsaXR5In0se25hbWU6ImxlZnQifSx7bmFtZToibG9va2FoZWFkIn0se25hbWU6InJpZ2h0In1dfTtjYXNlIGRnOnJldHVybntuYW1lOmRnLHByb3BlcnRpZXM6W3tuYW1lOiJjYXJkaW5hbGl0eSJ9LHtuYW1lOiJkZXByZWNhdGVkU3ludGF4IixkZWZhdWx0VmFsdWU6ITF9LHtuYW1lOiJsb29rYWhlYWQifSx7bmFtZToidGVybWluYWwifSx7bmFtZToidHlwZSJ9XX07Y2FzZSBwZzpyZXR1cm57bmFtZTpwZyxwcm9wZXJ0aWVzOlt7bmFtZToiY2FyZGluYWxpdHkifSx7bmFtZToibG9va2FoZWFkIn1dfTtjYXNlIG1nOnJldHVybntuYW1lOm1nLHByb3BlcnRpZXM6W3tuYW1lOiJjYXJkaW5hbGl0eSJ9LHtuYW1lOiJlbGVtZW50cyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToiZ3VhcmRDb25kaXRpb24ifSx7bmFtZToibG9va2FoZWFkIn1dfTtjYXNlIGdnOnJldHVybntuYW1lOmdnLHByb3BlcnRpZXM6W3tuYW1lOiJjYXJkaW5hbGl0eSJ9LHtuYW1lOiJsb29rYWhlYWQifSx7bmFtZToidmFsdWUifV19O2Nhc2UgeWc6cmV0dXJue25hbWU6eWcscHJvcGVydGllczpbe25hbWU6ImNhcmRpbmFsaXR5In0se25hbWU6Imxvb2thaGVhZCJ9LHtuYW1lOiJ0ZXJtaW5hbCJ9XX07Y2FzZSB2ZzpyZXR1cm57bmFtZTp2Zyxwcm9wZXJ0aWVzOlt7bmFtZToiY2FyZGluYWxpdHkifSx7bmFtZToibG9va2FoZWFkIn0se25hbWU6InJlZ2V4In1dfTtjYXNlIHhnOnJldHVybntuYW1lOnhnLHByb3BlcnRpZXM6W3tuYW1lOiJhcmd1bWVudHMiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6ImNhcmRpbmFsaXR5In0se25hbWU6Imxvb2thaGVhZCJ9LHtuYW1lOiJydWxlIn1dfTtjYXNlIGJnOnJldHVybntuYW1lOmJnLHByb3BlcnRpZXM6W3tuYW1lOiJjYXJkaW5hbGl0eSJ9LHtuYW1lOiJlbGVtZW50cyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToibG9va2FoZWFkIn1dfTtjYXNlIHdnOnJldHVybntuYW1lOndnLHByb3BlcnRpZXM6W3tuYW1lOiJjYXJkaW5hbGl0eSJ9LHtuYW1lOiJlbGVtZW50cyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToibG9va2FoZWFkIn1dfTtjYXNlIFRnOnJldHVybntuYW1lOlRnLHByb3BlcnRpZXM6W3tuYW1lOiJjYXJkaW5hbGl0eSJ9LHtuYW1lOiJsb29rYWhlYWQifSx7bmFtZToicnVsZSJ9XX07Y2FzZSBrZzpyZXR1cm57bmFtZTprZyxwcm9wZXJ0aWVzOlt7bmFtZToiY2FyZGluYWxpdHkifSx7bmFtZToiZWxlbWVudHMiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6Imxvb2thaGVhZCJ9XX07Y2FzZSBFZzpyZXR1cm57bmFtZTpFZyxwcm9wZXJ0aWVzOlt7bmFtZToiY2FyZGluYWxpdHkifSx7bmFtZToibG9va2FoZWFkIn0se25hbWU6InRlcm1pbmFsIn1dfTtjYXNlIFNnOnJldHVybntuYW1lOlNnLHByb3BlcnRpZXM6W3tuYW1lOiJjYXJkaW5hbGl0eSJ9LHtuYW1lOiJsb29rYWhlYWQifV19O2RlZmF1bHQ6cmV0dXJue25hbWU6ZSxwcm9wZXJ0aWVzOltdfX19fSxscj1uZXcgQ2d9KTt2YXIgeGs9e307aHIoeGsse2Fzc2lnbk1hbmRhdG9yeVByb3BlcnRpZXM6KCk9PlhSLGNvcHlBc3ROb2RlOigpPT5ZUixmaW5kTG9jYWxSZWZlcmVuY2VzOigpPT50UGUsZmluZFJvb3ROb2RlOigpPT5IMixnZXRDb250YWluZXJPZlR5cGU6KCk9PnRwLGdldERvY3VtZW50OigpPT5QYSxoYXNDb250YWluZXJPZlR5cGU6KCk9PmVQZSxsaW5rQ29udGVudFRvQ29udGFpbmVyOigpPT52ayxzdHJlYW1BbGxDb250ZW50czooKT0+TmMsc3RyZWFtQXN0OigpPT5XbyxzdHJlYW1Db250ZW50czooKT0+VzIsc3RyZWFtUmVmZXJlbmNlczooKT0+QWd9KTtmdW5jdGlvbiB2ayh0KXtmb3IobGV0W2Uscl1vZiBPYmplY3QuZW50cmllcyh0KSllLnN0YXJ0c1dpdGgoIiQiKXx8KEFycmF5LmlzQXJyYXkocik/ci5mb3JFYWNoKChuLGkpPT57aWkobikmJihuLiRjb250YWluZXI9dCxuLiRjb250YWluZXJQcm9wZXJ0eT1lLG4uJGNvbnRhaW5lckluZGV4PWkpfSk6aWkocikmJihyLiRjb250YWluZXI9dCxyLiRjb250YWluZXJQcm9wZXJ0eT1lKSl9ZnVuY3Rpb24gdHAodCxlKXtsZXQgcj10O2Zvcig7cjspe2lmKGUocikpcmV0dXJuIHI7cj1yLiRjb250YWluZXJ9fWZ1bmN0aW9uIGVQZSh0LGUpe2xldCByPXQ7Zm9yKDtyOyl7aWYoZShyKSlyZXR1cm4hMDtyPXIuJGNvbnRhaW5lcn1yZXR1cm4hMX1mdW5jdGlvbiBQYSh0KXtsZXQgcj1IMih0KS4kZG9jdW1lbnQ7aWYoIXIpdGhyb3cgbmV3IEVycm9yKCJBU1Qgbm9kZSBoYXMgbm8gZG9jdW1lbnQuIik7cmV0dXJuIHJ9ZnVuY3Rpb24gSDIodCl7Zm9yKDt0LiRjb250YWluZXI7KXQ9dC4kY29udGFpbmVyO3JldHVybiB0fWZ1bmN0aW9uIFcyKHQsZSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJOb2RlIG11c3QgYmUgYW4gQXN0Tm9kZS4iKTtsZXQgcj1lPy5yYW5nZTtyZXR1cm4gbmV3IGFvKCgpPT4oe2tleXM6T2JqZWN0LmtleXModCksa2V5SW5kZXg6MCxhcnJheUluZGV4OjB9KSxuPT57Zm9yKDtuLmtleUluZGV4PG4ua2V5cy5sZW5ndGg7KXtsZXQgaT1uLmtleXNbbi5rZXlJbmRleF07aWYoIWkuc3RhcnRzV2l0aCgiJCIpKXtsZXQgYT10W2ldO2lmKGlpKGEpKXtpZihuLmtleUluZGV4KysscVIoYSxyKSlyZXR1cm57ZG9uZTohMSx2YWx1ZTphfX1lbHNlIGlmKEFycmF5LmlzQXJyYXkoYSkpe2Zvcig7bi5hcnJheUluZGV4PGEubGVuZ3RoOyl7bGV0IHM9bi5hcnJheUluZGV4KyssbD1hW3NdO2lmKGlpKGwpJiZxUihsLHIpKXJldHVybntkb25lOiExLHZhbHVlOmx9fW4uYXJyYXlJbmRleD0wfX1uLmtleUluZGV4Kyt9cmV0dXJuIElhfSl9ZnVuY3Rpb24gTmModCxlKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoIlJvb3Qgbm9kZSBtdXN0IGJlIGFuIEFzdE5vZGUuIik7cmV0dXJuIG5ldyBfYyh0LHI9PlcyKHIsZSkpfWZ1bmN0aW9uIFdvKHQsZSl7aWYodCl7aWYoZT8ucmFuZ2UmJiFxUih0LGUucmFuZ2UpKXJldHVybiBuZXcgX2ModCwoKT0+W10pfWVsc2UgdGhyb3cgbmV3IEVycm9yKCJSb290IG5vZGUgbXVzdCBiZSBhbiBBc3ROb2RlLiIpO3JldHVybiBuZXcgX2ModCxyPT5XMihyLGUpLHtpbmNsdWRlUm9vdDohMH0pfWZ1bmN0aW9uIHFSKHQsZSl7dmFyIHI7aWYoIWUpcmV0dXJuITA7bGV0IG49KHI9dC4kY3N0Tm9kZSk9PT1udWxsfHxyPT09dm9pZCAwP3ZvaWQgMDpyLnJhbmdlO3JldHVybiBuP0NSKG4sZSk6ITF9ZnVuY3Rpb24gQWcodCl7cmV0dXJuIG5ldyBhbygoKT0+KHtrZXlzOk9iamVjdC5rZXlzKHQpLGtleUluZGV4OjAsYXJyYXlJbmRleDowfSksZT0+e2Zvcig7ZS5rZXlJbmRleDxlLmtleXMubGVuZ3RoOyl7bGV0IHI9ZS5rZXlzW2Uua2V5SW5kZXhdO2lmKCFyLnN0YXJ0c1dpdGgoIiQiKSl7bGV0IG49dFtyXTtpZih2YShuKSlyZXR1cm4gZS5rZXlJbmRleCsrLHtkb25lOiExLHZhbHVlOntyZWZlcmVuY2U6bixjb250YWluZXI6dCxwcm9wZXJ0eTpyfX07aWYoQXJyYXkuaXNBcnJheShuKSl7Zm9yKDtlLmFycmF5SW5kZXg8bi5sZW5ndGg7KXtsZXQgaT1lLmFycmF5SW5kZXgrKyxhPW5baV07aWYodmEoYSkpcmV0dXJue2RvbmU6ITEsdmFsdWU6e3JlZmVyZW5jZTphLGNvbnRhaW5lcjp0LHByb3BlcnR5OnIsaW5kZXg6aX19fWUuYXJyYXlJbmRleD0wfX1lLmtleUluZGV4Kyt9cmV0dXJuIElhfSl9ZnVuY3Rpb24gdFBlKHQsZT1QYSh0KS5wYXJzZVJlc3VsdC52YWx1ZSl7bGV0IHI9W107cmV0dXJuIFdvKGUpLmZvckVhY2gobj0+e0FnKG4pLmZvckVhY2goaT0+e2kucmVmZXJlbmNlLnJlZj09PXQmJnIucHVzaChpLnJlZmVyZW5jZSl9KX0pLGVuKHIpfWZ1bmN0aW9uIFhSKHQsZSl7bGV0IHI9dC5nZXRUeXBlTWV0YURhdGEoZS4kdHlwZSksbj1lO2ZvcihsZXQgaSBvZiByLnByb3BlcnRpZXMpaS5kZWZhdWx0VmFsdWUhPT12b2lkIDAmJm5baS5uYW1lXT09PXZvaWQgMCYmKG5baS5uYW1lXT1wYWUoaS5kZWZhdWx0VmFsdWUpKX1mdW5jdGlvbiBwYWUodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/Wy4uLnQubWFwKHBhZSldOnR9ZnVuY3Rpb24gWVIodCxlKXtsZXQgcj17JHR5cGU6dC4kdHlwZX07Zm9yKGxldFtuLGldb2YgT2JqZWN0LmVudHJpZXModCkpaWYoIW4uc3RhcnRzV2l0aCgiJCIpKWlmKGlpKGkpKXJbbl09WVIoaSxlKTtlbHNlIGlmKHZhKGkpKXJbbl09ZShyLG4saS4kcmVmTm9kZSxpLiRyZWZUZXh0KTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoaSkpe2xldCBhPVtdO2ZvcihsZXQgcyBvZiBpKWlpKHMpP2EucHVzaChZUihzLGUpKTp2YShzKT9hLnB1c2goZShyLG4scy4kcmVmTm9kZSxzLiRyZWZUZXh0KSk6YS5wdXNoKHMpO3Jbbl09YX1lbHNlIHJbbl09aTtyZXR1cm4gdmsocikscn12YXIgaXM9TigoKT0+eyJ1c2Ugc3RyaWN0IjtSbCgpO1BzKCk7TmwoKTtvKHZrLCJsaW5rQ29udGVudFRvQ29udGFpbmVyIik7byh0cCwiZ2V0Q29udGFpbmVyT2ZUeXBlIik7byhlUGUsImhhc0NvbnRhaW5lck9mVHlwZSIpO28oUGEsImdldERvY3VtZW50Iik7byhIMiwiZmluZFJvb3ROb2RlIik7byhXMiwic3RyZWFtQ29udGVudHMiKTtvKE5jLCJzdHJlYW1BbGxDb250ZW50cyIpO28oV28sInN0cmVhbUFzdCIpO28ocVIsImlzQXN0Tm9kZUluUmFuZ2UiKTtvKEFnLCJzdHJlYW1SZWZlcmVuY2VzIik7byh0UGUsImZpbmRMb2NhbFJlZmVyZW5jZXMiKTtvKFhSLCJhc3NpZ25NYW5kYXRvcnlQcm9wZXJ0aWVzIik7byhwYWUsImNvcHlEZWZhdWx0VmFsdWUiKTtvKFlSLCJjb3B5QXN0Tm9kZSIpfSk7ZnVuY3Rpb24gYXIodCl7cmV0dXJuIHQuY2hhckNvZGVBdCgwKX1mdW5jdGlvbiBiayh0LGUpe0FycmF5LmlzQXJyYXkodCk/dC5mb3JFYWNoKGZ1bmN0aW9uKHIpe2UucHVzaChyKX0pOmUucHVzaCh0KX1mdW5jdGlvbiBfZyh0LGUpe2lmKHRbZV09PT0hMCl0aHJvdyJkdXBsaWNhdGUgZmxhZyAiK2U7bGV0IHI9dFtlXTt0W2VdPSEwfWZ1bmN0aW9uIHJwKHQpe2lmKHQ9PT12b2lkIDApdGhyb3cgRXJyb3IoIkludGVybmFsIEVycm9yIC0gU2hvdWxkIG5ldmVyIGdldCBoZXJlISIpO3JldHVybiEwfWZ1bmN0aW9uIHEyKCl7dGhyb3cgRXJyb3IoIkludGVybmFsIEVycm9yIC0gU2hvdWxkIG5ldmVyIGdldCBoZXJlISIpfWZ1bmN0aW9uIGpSKHQpe3JldHVybiB0LnR5cGU9PT0iQ2hhcmFjdGVyIn12YXIgS1I9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKGFyLCJjYyIpO28oYmssImluc2VydFRvU2V0Iik7byhfZywiYWRkRmxhZyIpO28ocnAsIkFTU0VSVF9FWElTVFMiKTtvKHEyLCJBU1NFUlRfTkVWRVJfUkVBQ0hfSEVSRSIpO28oalIsImlzQ2hhcmFjdGVyIil9KTt2YXIgWTIsWDIsUVIsbWFlPU4oKCk9PnsidXNlIHN0cmljdCI7S1IoKTtZMj1bXTtmb3IobGV0IHQ9YXIoIjAiKTt0PD1hcigiOSIpO3QrKylZMi5wdXNoKHQpO1gyPVthcigiXyIpXS5jb25jYXQoWTIpO2ZvcihsZXQgdD1hcigiYSIpO3Q8PWFyKCJ6Iik7dCsrKVgyLnB1c2godCk7Zm9yKGxldCB0PWFyKCJBIik7dDw9YXIoIloiKTt0KyspWDIucHVzaCh0KTtRUj1bYXIoIiAiKSxhcigiXGYiKSxhcihgCmApLGFyKCJcciIpLGFyKCIJIiksYXIoIlx2IiksYXIoIgkiKSxhcigiXHhBMCIpLGFyKCJcdTE2ODAiKSxhcigiXHUyMDAwIiksYXIoIlx1MjAwMSIpLGFyKCJcdTIwMDIiKSxhcigiXHUyMDAzIiksYXIoIlx1MjAwNCIpLGFyKCJcdTIwMDUiKSxhcigiXHUyMDA2IiksYXIoIlx1MjAwNyIpLGFyKCJcdTIwMDgiKSxhcigiXHUyMDA5IiksYXIoIlx1MjAwQSIpLGFyKCJcdTIwMjgiKSxhcigiXHUyMDI5IiksYXIoIlx1MjAyRiIpLGFyKCJcdTIwNUYiKSxhcigiXHUzMDAwIiksYXIoIlx1RkVGRiIpXX0pO3ZhciByUGUsd2ssblBlLG5wLGdhZT1OKCgpPT57InVzZSBzdHJpY3QiO0tSKCk7bWFlKCk7clBlPS9bMC05YS1mQS1GXS8sd2s9L1swLTldLyxuUGU9L1sxLTldLyxucD1jbGFzc3tzdGF0aWN7byh0aGlzLCJSZWdFeHBQYXJzZXIiKX1jb25zdHJ1Y3Rvcigpe3RoaXMuaWR4PTAsdGhpcy5pbnB1dD0iIix0aGlzLmdyb3VwSWR4PTB9c2F2ZVN0YXRlKCl7cmV0dXJue2lkeDp0aGlzLmlkeCxpbnB1dDp0aGlzLmlucHV0LGdyb3VwSWR4OnRoaXMuZ3JvdXBJZHh9fXJlc3RvcmVTdGF0ZShlKXt0aGlzLmlkeD1lLmlkeCx0aGlzLmlucHV0PWUuaW5wdXQsdGhpcy5ncm91cElkeD1lLmdyb3VwSWR4fXBhdHRlcm4oZSl7dGhpcy5pZHg9MCx0aGlzLmlucHV0PWUsdGhpcy5ncm91cElkeD0wLHRoaXMuY29uc3VtZUNoYXIoIi8iKTtsZXQgcj10aGlzLmRpc2p1bmN0aW9uKCk7dGhpcy5jb25zdW1lQ2hhcigiLyIpO2xldCBuPXt0eXBlOiJGbGFncyIsbG9jOntiZWdpbjp0aGlzLmlkeCxlbmQ6ZS5sZW5ndGh9LGdsb2JhbDohMSxpZ25vcmVDYXNlOiExLG11bHRpTGluZTohMSx1bmljb2RlOiExLHN0aWNreTohMX07Zm9yKDt0aGlzLmlzUmVnRXhwRmxhZygpOylzd2l0Y2godGhpcy5wb3BDaGFyKCkpe2Nhc2UiZyI6X2cobiwiZ2xvYmFsIik7YnJlYWs7Y2FzZSJpIjpfZyhuLCJpZ25vcmVDYXNlIik7YnJlYWs7Y2FzZSJtIjpfZyhuLCJtdWx0aUxpbmUiKTticmVhaztjYXNlInUiOl9nKG4sInVuaWNvZGUiKTticmVhaztjYXNlInkiOl9nKG4sInN0aWNreSIpO2JyZWFrfWlmKHRoaXMuaWR4IT09dGhpcy5pbnB1dC5sZW5ndGgpdGhyb3cgRXJyb3IoIlJlZHVuZGFudCBpbnB1dDogIit0aGlzLmlucHV0LnN1YnN0cmluZyh0aGlzLmlkeCkpO3JldHVybnt0eXBlOiJQYXR0ZXJuIixmbGFnczpuLHZhbHVlOnIsbG9jOnRoaXMubG9jKDApfX1kaXNqdW5jdGlvbigpe2xldCBlPVtdLHI9dGhpcy5pZHg7Zm9yKGUucHVzaCh0aGlzLmFsdGVybmF0aXZlKCkpO3RoaXMucGVla0NoYXIoKT09PSJ8IjspdGhpcy5jb25zdW1lQ2hhcigifCIpLGUucHVzaCh0aGlzLmFsdGVybmF0aXZlKCkpO3JldHVybnt0eXBlOiJEaXNqdW5jdGlvbiIsdmFsdWU6ZSxsb2M6dGhpcy5sb2Mocil9fWFsdGVybmF0aXZlKCl7bGV0IGU9W10scj10aGlzLmlkeDtmb3IoO3RoaXMuaXNUZXJtKCk7KWUucHVzaCh0aGlzLnRlcm0oKSk7cmV0dXJue3R5cGU6IkFsdGVybmF0aXZlIix2YWx1ZTplLGxvYzp0aGlzLmxvYyhyKX19dGVybSgpe3JldHVybiB0aGlzLmlzQXNzZXJ0aW9uKCk/dGhpcy5hc3NlcnRpb24oKTp0aGlzLmF0b20oKX1hc3NlcnRpb24oKXtsZXQgZT10aGlzLmlkeDtzd2l0Y2godGhpcy5wb3BDaGFyKCkpe2Nhc2UiXiI6cmV0dXJue3R5cGU6IlN0YXJ0QW5jaG9yIixsb2M6dGhpcy5sb2MoZSl9O2Nhc2UiJCI6cmV0dXJue3R5cGU6IkVuZEFuY2hvciIsbG9jOnRoaXMubG9jKGUpfTtjYXNlIlxcIjpzd2l0Y2godGhpcy5wb3BDaGFyKCkpe2Nhc2UiYiI6cmV0dXJue3R5cGU6IldvcmRCb3VuZGFyeSIsbG9jOnRoaXMubG9jKGUpfTtjYXNlIkIiOnJldHVybnt0eXBlOiJOb25Xb3JkQm91bmRhcnkiLGxvYzp0aGlzLmxvYyhlKX19dGhyb3cgRXJyb3IoIkludmFsaWQgQXNzZXJ0aW9uIEVzY2FwZSIpO2Nhc2UiKCI6dGhpcy5jb25zdW1lQ2hhcigiPyIpO2xldCByO3N3aXRjaCh0aGlzLnBvcENoYXIoKSl7Y2FzZSI9IjpyPSJMb29rYWhlYWQiO2JyZWFrO2Nhc2UiISI6cj0iTmVnYXRpdmVMb29rYWhlYWQiO2JyZWFrfXJwKHIpO2xldCBuPXRoaXMuZGlzanVuY3Rpb24oKTtyZXR1cm4gdGhpcy5jb25zdW1lQ2hhcigiKSIpLHt0eXBlOnIsdmFsdWU6bixsb2M6dGhpcy5sb2MoZSl9fXJldHVybiBxMigpfXF1YW50aWZpZXIoZT0hMSl7bGV0IHIsbj10aGlzLmlkeDtzd2l0Y2godGhpcy5wb3BDaGFyKCkpe2Nhc2UiKiI6cj17YXRMZWFzdDowLGF0TW9zdDoxLzB9O2JyZWFrO2Nhc2UiKyI6cj17YXRMZWFzdDoxLGF0TW9zdDoxLzB9O2JyZWFrO2Nhc2UiPyI6cj17YXRMZWFzdDowLGF0TW9zdDoxfTticmVhaztjYXNlInsiOmxldCBpPXRoaXMuaW50ZWdlckluY2x1ZGluZ1plcm8oKTtzd2l0Y2godGhpcy5wb3BDaGFyKCkpe2Nhc2UifSI6cj17YXRMZWFzdDppLGF0TW9zdDppfTticmVhaztjYXNlIiwiOmxldCBhO3RoaXMuaXNEaWdpdCgpPyhhPXRoaXMuaW50ZWdlckluY2x1ZGluZ1plcm8oKSxyPXthdExlYXN0OmksYXRNb3N0OmF9KTpyPXthdExlYXN0OmksYXRNb3N0OjEvMH0sdGhpcy5jb25zdW1lQ2hhcigifSIpO2JyZWFrfWlmKGU9PT0hMCYmcj09PXZvaWQgMClyZXR1cm47cnAocik7YnJlYWt9aWYoIShlPT09ITAmJnI9PT12b2lkIDApJiZycChyKSlyZXR1cm4gdGhpcy5wZWVrQ2hhcigwKT09PSI/Ij8odGhpcy5jb25zdW1lQ2hhcigiPyIpLHIuZ3JlZWR5PSExKTpyLmdyZWVkeT0hMCxyLnR5cGU9IlF1YW50aWZpZXIiLHIubG9jPXRoaXMubG9jKG4pLHJ9YXRvbSgpe2xldCBlLHI9dGhpcy5pZHg7c3dpdGNoKHRoaXMucGVla0NoYXIoKSl7Y2FzZSIuIjplPXRoaXMuZG90QWxsKCk7YnJlYWs7Y2FzZSJcXCI6ZT10aGlzLmF0b21Fc2NhcGUoKTticmVhaztjYXNlIlsiOmU9dGhpcy5jaGFyYWN0ZXJDbGFzcygpO2JyZWFrO2Nhc2UiKCI6ZT10aGlzLmdyb3VwKCk7YnJlYWt9cmV0dXJuIGU9PT12b2lkIDAmJnRoaXMuaXNQYXR0ZXJuQ2hhcmFjdGVyKCkmJihlPXRoaXMucGF0dGVybkNoYXJhY3RlcigpKSxycChlKT8oZS5sb2M9dGhpcy5sb2MociksdGhpcy5pc1F1YW50aWZpZXIoKSYmKGUucXVhbnRpZmllcj10aGlzLnF1YW50aWZpZXIoKSksZSk6cTIoKX1kb3RBbGwoKXtyZXR1cm4gdGhpcy5jb25zdW1lQ2hhcigiLiIpLHt0eXBlOiJTZXQiLGNvbXBsZW1lbnQ6ITAsdmFsdWU6W2FyKGAKYCksYXIoIlxyIiksYXIoIlx1MjAyOCIpLGFyKCJcdTIwMjkiKV19fWF0b21Fc2NhcGUoKXtzd2l0Y2godGhpcy5jb25zdW1lQ2hhcigiXFwiKSx0aGlzLnBlZWtDaGFyKCkpe2Nhc2UiMSI6Y2FzZSIyIjpjYXNlIjMiOmNhc2UiNCI6Y2FzZSI1IjpjYXNlIjYiOmNhc2UiNyI6Y2FzZSI4IjpjYXNlIjkiOnJldHVybiB0aGlzLmRlY2ltYWxFc2NhcGVBdG9tKCk7Y2FzZSJkIjpjYXNlIkQiOmNhc2UicyI6Y2FzZSJTIjpjYXNlInciOmNhc2UiVyI6cmV0dXJuIHRoaXMuY2hhcmFjdGVyQ2xhc3NFc2NhcGUoKTtjYXNlImYiOmNhc2UibiI6Y2FzZSJyIjpjYXNlInQiOmNhc2UidiI6cmV0dXJuIHRoaXMuY29udHJvbEVzY2FwZUF0b20oKTtjYXNlImMiOnJldHVybiB0aGlzLmNvbnRyb2xMZXR0ZXJFc2NhcGVBdG9tKCk7Y2FzZSIwIjpyZXR1cm4gdGhpcy5udWxDaGFyYWN0ZXJBdG9tKCk7Y2FzZSJ4IjpyZXR1cm4gdGhpcy5oZXhFc2NhcGVTZXF1ZW5jZUF0b20oKTtjYXNlInUiOnJldHVybiB0aGlzLnJlZ0V4cFVuaWNvZGVFc2NhcGVTZXF1ZW5jZUF0b20oKTtkZWZhdWx0OnJldHVybiB0aGlzLmlkZW50aXR5RXNjYXBlQXRvbSgpfX1kZWNpbWFsRXNjYXBlQXRvbSgpe3JldHVybnt0eXBlOiJHcm91cEJhY2tSZWZlcmVuY2UiLHZhbHVlOnRoaXMucG9zaXRpdmVJbnRlZ2VyKCl9fWNoYXJhY3RlckNsYXNzRXNjYXBlKCl7bGV0IGUscj0hMTtzd2l0Y2godGhpcy5wb3BDaGFyKCkpe2Nhc2UiZCI6ZT1ZMjticmVhaztjYXNlIkQiOmU9WTIscj0hMDticmVhaztjYXNlInMiOmU9UVI7YnJlYWs7Y2FzZSJTIjplPVFSLHI9ITA7YnJlYWs7Y2FzZSJ3IjplPVgyO2JyZWFrO2Nhc2UiVyI6ZT1YMixyPSEwO2JyZWFrfXJldHVybiBycChlKT97dHlwZToiU2V0Iix2YWx1ZTplLGNvbXBsZW1lbnQ6cn06cTIoKX1jb250cm9sRXNjYXBlQXRvbSgpe2xldCBlO3N3aXRjaCh0aGlzLnBvcENoYXIoKSl7Y2FzZSJmIjplPWFyKCJcZiIpO2JyZWFrO2Nhc2UibiI6ZT1hcihgCmApO2JyZWFrO2Nhc2UiciI6ZT1hcigiXHIiKTticmVhaztjYXNlInQiOmU9YXIoIgkiKTticmVhaztjYXNlInYiOmU9YXIoIlx2Iik7YnJlYWt9cmV0dXJuIHJwKGUpP3t0eXBlOiJDaGFyYWN0ZXIiLHZhbHVlOmV9OnEyKCl9Y29udHJvbExldHRlckVzY2FwZUF0b20oKXt0aGlzLmNvbnN1bWVDaGFyKCJjIik7bGV0IGU9dGhpcy5wb3BDaGFyKCk7aWYoL1thLXpBLVpdLy50ZXN0KGUpPT09ITEpdGhyb3cgRXJyb3IoIkludmFsaWQgIik7cmV0dXJue3R5cGU6IkNoYXJhY3RlciIsdmFsdWU6ZS50b1VwcGVyQ2FzZSgpLmNoYXJDb2RlQXQoMCktNjR9fW51bENoYXJhY3RlckF0b20oKXtyZXR1cm4gdGhpcy5jb25zdW1lQ2hhcigiMCIpLHt0eXBlOiJDaGFyYWN0ZXIiLHZhbHVlOmFyKCJcMCIpfX1oZXhFc2NhcGVTZXF1ZW5jZUF0b20oKXtyZXR1cm4gdGhpcy5jb25zdW1lQ2hhcigieCIpLHRoaXMucGFyc2VIZXhEaWdpdHMoMil9cmVnRXhwVW5pY29kZUVzY2FwZVNlcXVlbmNlQXRvbSgpe3JldHVybiB0aGlzLmNvbnN1bWVDaGFyKCJ1IiksdGhpcy5wYXJzZUhleERpZ2l0cyg0KX1pZGVudGl0eUVzY2FwZUF0b20oKXtsZXQgZT10aGlzLnBvcENoYXIoKTtyZXR1cm57dHlwZToiQ2hhcmFjdGVyIix2YWx1ZTphcihlKX19Y2xhc3NQYXR0ZXJuQ2hhcmFjdGVyQXRvbSgpe3N3aXRjaCh0aGlzLnBlZWtDaGFyKCkpe2Nhc2VgCmA6Y2FzZSJcciI6Y2FzZSJcdTIwMjgiOmNhc2UiXHUyMDI5IjpjYXNlIlxcIjpjYXNlIl0iOnRocm93IEVycm9yKCJUQkQiKTtkZWZhdWx0OmxldCBlPXRoaXMucG9wQ2hhcigpO3JldHVybnt0eXBlOiJDaGFyYWN0ZXIiLHZhbHVlOmFyKGUpfX19Y2hhcmFjdGVyQ2xhc3MoKXtsZXQgZT1bXSxyPSExO2Zvcih0aGlzLmNvbnN1bWVDaGFyKCJbIiksdGhpcy5wZWVrQ2hhcigwKT09PSJeIiYmKHRoaXMuY29uc3VtZUNoYXIoIl4iKSxyPSEwKTt0aGlzLmlzQ2xhc3NBdG9tKCk7KXtsZXQgbj10aGlzLmNsYXNzQXRvbSgpLGk9bi50eXBlPT09IkNoYXJhY3RlciI7aWYoalIobikmJnRoaXMuaXNSYW5nZURhc2goKSl7dGhpcy5jb25zdW1lQ2hhcigiLSIpO2xldCBhPXRoaXMuY2xhc3NBdG9tKCkscz1hLnR5cGU9PT0iQ2hhcmFjdGVyIjtpZihqUihhKSl7aWYoYS52YWx1ZTxuLnZhbHVlKXRocm93IEVycm9yKCJSYW5nZSBvdXQgb2Ygb3JkZXIgaW4gY2hhcmFjdGVyIGNsYXNzIik7ZS5wdXNoKHtmcm9tOm4udmFsdWUsdG86YS52YWx1ZX0pfWVsc2UgYmsobi52YWx1ZSxlKSxlLnB1c2goYXIoIi0iKSksYmsoYS52YWx1ZSxlKX1lbHNlIGJrKG4udmFsdWUsZSl9cmV0dXJuIHRoaXMuY29uc3VtZUNoYXIoIl0iKSx7dHlwZToiU2V0Iixjb21wbGVtZW50OnIsdmFsdWU6ZX19Y2xhc3NBdG9tKCl7c3dpdGNoKHRoaXMucGVla0NoYXIoKSl7Y2FzZSJdIjpjYXNlYApgOmNhc2UiXHIiOmNhc2UiXHUyMDI4IjpjYXNlIlx1MjAyOSI6dGhyb3cgRXJyb3IoIlRCRCIpO2Nhc2UiXFwiOnJldHVybiB0aGlzLmNsYXNzRXNjYXBlKCk7ZGVmYXVsdDpyZXR1cm4gdGhpcy5jbGFzc1BhdHRlcm5DaGFyYWN0ZXJBdG9tKCl9fWNsYXNzRXNjYXBlKCl7c3dpdGNoKHRoaXMuY29uc3VtZUNoYXIoIlxcIiksdGhpcy5wZWVrQ2hhcigpKXtjYXNlImIiOnJldHVybiB0aGlzLmNvbnN1bWVDaGFyKCJiIikse3R5cGU6IkNoYXJhY3RlciIsdmFsdWU6YXIoIlxiIil9O2Nhc2UiZCI6Y2FzZSJEIjpjYXNlInMiOmNhc2UiUyI6Y2FzZSJ3IjpjYXNlIlciOnJldHVybiB0aGlzLmNoYXJhY3RlckNsYXNzRXNjYXBlKCk7Y2FzZSJmIjpjYXNlIm4iOmNhc2UiciI6Y2FzZSJ0IjpjYXNlInYiOnJldHVybiB0aGlzLmNvbnRyb2xFc2NhcGVBdG9tKCk7Y2FzZSJjIjpyZXR1cm4gdGhpcy5jb250cm9sTGV0dGVyRXNjYXBlQXRvbSgpO2Nhc2UiMCI6cmV0dXJuIHRoaXMubnVsQ2hhcmFjdGVyQXRvbSgpO2Nhc2UieCI6cmV0dXJuIHRoaXMuaGV4RXNjYXBlU2VxdWVuY2VBdG9tKCk7Y2FzZSJ1IjpyZXR1cm4gdGhpcy5yZWdFeHBVbmljb2RlRXNjYXBlU2VxdWVuY2VBdG9tKCk7ZGVmYXVsdDpyZXR1cm4gdGhpcy5pZGVudGl0eUVzY2FwZUF0b20oKX19Z3JvdXAoKXtsZXQgZT0hMDtzd2l0Y2godGhpcy5jb25zdW1lQ2hhcigiKCIpLHRoaXMucGVla0NoYXIoMCkpe2Nhc2UiPyI6dGhpcy5jb25zdW1lQ2hhcigiPyIpLHRoaXMuY29uc3VtZUNoYXIoIjoiKSxlPSExO2JyZWFrO2RlZmF1bHQ6dGhpcy5ncm91cElkeCsrO2JyZWFrfWxldCByPXRoaXMuZGlzanVuY3Rpb24oKTt0aGlzLmNvbnN1bWVDaGFyKCIpIik7bGV0IG49e3R5cGU6Ikdyb3VwIixjYXB0dXJpbmc6ZSx2YWx1ZTpyfTtyZXR1cm4gZSYmKG4uaWR4PXRoaXMuZ3JvdXBJZHgpLG59cG9zaXRpdmVJbnRlZ2VyKCl7bGV0IGU9dGhpcy5wb3BDaGFyKCk7aWYoblBlLnRlc3QoZSk9PT0hMSl0aHJvdyBFcnJvcigiRXhwZWN0aW5nIGEgcG9zaXRpdmUgaW50ZWdlciIpO2Zvcig7d2sudGVzdCh0aGlzLnBlZWtDaGFyKDApKTspZSs9dGhpcy5wb3BDaGFyKCk7cmV0dXJuIHBhcnNlSW50KGUsMTApfWludGVnZXJJbmNsdWRpbmdaZXJvKCl7bGV0IGU9dGhpcy5wb3BDaGFyKCk7aWYod2sudGVzdChlKT09PSExKXRocm93IEVycm9yKCJFeHBlY3RpbmcgYW4gaW50ZWdlciIpO2Zvcig7d2sudGVzdCh0aGlzLnBlZWtDaGFyKDApKTspZSs9dGhpcy5wb3BDaGFyKCk7cmV0dXJuIHBhcnNlSW50KGUsMTApfXBhdHRlcm5DaGFyYWN0ZXIoKXtsZXQgZT10aGlzLnBvcENoYXIoKTtzd2l0Y2goZSl7Y2FzZWAKYDpjYXNlIlxyIjpjYXNlIlx1MjAyOCI6Y2FzZSJcdTIwMjkiOmNhc2UiXiI6Y2FzZSIkIjpjYXNlIlxcIjpjYXNlIi4iOmNhc2UiKiI6Y2FzZSIrIjpjYXNlIj8iOmNhc2UiKCI6Y2FzZSIpIjpjYXNlIlsiOmNhc2UifCI6dGhyb3cgRXJyb3IoIlRCRCIpO2RlZmF1bHQ6cmV0dXJue3R5cGU6IkNoYXJhY3RlciIsdmFsdWU6YXIoZSl9fX1pc1JlZ0V4cEZsYWcoKXtzd2l0Y2godGhpcy5wZWVrQ2hhcigwKSl7Y2FzZSJnIjpjYXNlImkiOmNhc2UibSI6Y2FzZSJ1IjpjYXNlInkiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fWlzUmFuZ2VEYXNoKCl7cmV0dXJuIHRoaXMucGVla0NoYXIoKT09PSItIiYmdGhpcy5pc0NsYXNzQXRvbSgxKX1pc0RpZ2l0KCl7cmV0dXJuIHdrLnRlc3QodGhpcy5wZWVrQ2hhcigwKSl9aXNDbGFzc0F0b20oZT0wKXtzd2l0Y2godGhpcy5wZWVrQ2hhcihlKSl7Y2FzZSJdIjpjYXNlYApgOmNhc2UiXHIiOmNhc2UiXHUyMDI4IjpjYXNlIlx1MjAyOSI6cmV0dXJuITE7ZGVmYXVsdDpyZXR1cm4hMH19aXNUZXJtKCl7cmV0dXJuIHRoaXMuaXNBdG9tKCl8fHRoaXMuaXNBc3NlcnRpb24oKX1pc0F0b20oKXtpZih0aGlzLmlzUGF0dGVybkNoYXJhY3RlcigpKXJldHVybiEwO3N3aXRjaCh0aGlzLnBlZWtDaGFyKDApKXtjYXNlIi4iOmNhc2UiXFwiOmNhc2UiWyI6Y2FzZSIoIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX1pc0Fzc2VydGlvbigpe3N3aXRjaCh0aGlzLnBlZWtDaGFyKDApKXtjYXNlIl4iOmNhc2UiJCI6cmV0dXJuITA7Y2FzZSJcXCI6c3dpdGNoKHRoaXMucGVla0NoYXIoMSkpe2Nhc2UiYiI6Y2FzZSJCIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfWNhc2UiKCI6cmV0dXJuIHRoaXMucGVla0NoYXIoMSk9PT0iPyImJih0aGlzLnBlZWtDaGFyKDIpPT09Ij0ifHx0aGlzLnBlZWtDaGFyKDIpPT09IiEiKTtkZWZhdWx0OnJldHVybiExfX1pc1F1YW50aWZpZXIoKXtsZXQgZT10aGlzLnNhdmVTdGF0ZSgpO3RyeXtyZXR1cm4gdGhpcy5xdWFudGlmaWVyKCEwKSE9PXZvaWQgMH1jYXRjaHtyZXR1cm4hMX1maW5hbGx5e3RoaXMucmVzdG9yZVN0YXRlKGUpfX1pc1BhdHRlcm5DaGFyYWN0ZXIoKXtzd2l0Y2godGhpcy5wZWVrQ2hhcigpKXtjYXNlIl4iOmNhc2UiJCI6Y2FzZSJcXCI6Y2FzZSIuIjpjYXNlIioiOmNhc2UiKyI6Y2FzZSI/IjpjYXNlIigiOmNhc2UiKSI6Y2FzZSJbIjpjYXNlInwiOmNhc2UiLyI6Y2FzZWAKYDpjYXNlIlxyIjpjYXNlIlx1MjAyOCI6Y2FzZSJcdTIwMjkiOnJldHVybiExO2RlZmF1bHQ6cmV0dXJuITB9fXBhcnNlSGV4RGlnaXRzKGUpe2xldCByPSIiO2ZvcihsZXQgaT0wO2k8ZTtpKyspe2xldCBhPXRoaXMucG9wQ2hhcigpO2lmKHJQZS50ZXN0KGEpPT09ITEpdGhyb3cgRXJyb3IoIkV4cGVjdGluZyBhIEhleERlY2ltYWwgZGlnaXRzIik7cis9YX1yZXR1cm57dHlwZToiQ2hhcmFjdGVyIix2YWx1ZTpwYXJzZUludChyLDE2KX19cGVla0NoYXIoZT0wKXtyZXR1cm4gdGhpcy5pbnB1dFt0aGlzLmlkeCtlXX1wb3BDaGFyKCl7bGV0IGU9dGhpcy5wZWVrQ2hhcigwKTtyZXR1cm4gdGhpcy5jb25zdW1lQ2hhcih2b2lkIDApLGV9Y29uc3VtZUNoYXIoZSl7aWYoZSE9PXZvaWQgMCYmdGhpcy5pbnB1dFt0aGlzLmlkeF0hPT1lKXRocm93IEVycm9yKCJFeHBlY3RlZDogJyIrZSsiJyBidXQgZm91bmQ6ICciK3RoaXMuaW5wdXRbdGhpcy5pZHhdKyInIGF0IG9mZnNldDogIit0aGlzLmlkeCk7aWYodGhpcy5pZHg+PXRoaXMuaW5wdXQubGVuZ3RoKXRocm93IEVycm9yKCJVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dCIpO3RoaXMuaWR4Kyt9bG9jKGUpe3JldHVybntiZWdpbjplLGVuZDp0aGlzLmlkeH19fX0pO3ZhciBNYyx5YWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtNYz1jbGFzc3tzdGF0aWN7byh0aGlzLCJCYXNlUmVnRXhwVmlzaXRvciIpfXZpc2l0Q2hpbGRyZW4oZSl7Zm9yKGxldCByIGluIGUpe2xldCBuPWVbcl07ZS5oYXNPd25Qcm9wZXJ0eShyKSYmKG4udHlwZSE9PXZvaWQgMD90aGlzLnZpc2l0KG4pOkFycmF5LmlzQXJyYXkobikmJm4uZm9yRWFjaChpPT57dGhpcy52aXNpdChpKX0sdGhpcykpfX12aXNpdChlKXtzd2l0Y2goZS50eXBlKXtjYXNlIlBhdHRlcm4iOnRoaXMudmlzaXRQYXR0ZXJuKGUpO2JyZWFrO2Nhc2UiRmxhZ3MiOnRoaXMudmlzaXRGbGFncyhlKTticmVhaztjYXNlIkRpc2p1bmN0aW9uIjp0aGlzLnZpc2l0RGlzanVuY3Rpb24oZSk7YnJlYWs7Y2FzZSJBbHRlcm5hdGl2ZSI6dGhpcy52aXNpdEFsdGVybmF0aXZlKGUpO2JyZWFrO2Nhc2UiU3RhcnRBbmNob3IiOnRoaXMudmlzaXRTdGFydEFuY2hvcihlKTticmVhaztjYXNlIkVuZEFuY2hvciI6dGhpcy52aXNpdEVuZEFuY2hvcihlKTticmVhaztjYXNlIldvcmRCb3VuZGFyeSI6dGhpcy52aXNpdFdvcmRCb3VuZGFyeShlKTticmVhaztjYXNlIk5vbldvcmRCb3VuZGFyeSI6dGhpcy52aXNpdE5vbldvcmRCb3VuZGFyeShlKTticmVhaztjYXNlIkxvb2thaGVhZCI6dGhpcy52aXNpdExvb2thaGVhZChlKTticmVhaztjYXNlIk5lZ2F0aXZlTG9va2FoZWFkIjp0aGlzLnZpc2l0TmVnYXRpdmVMb29rYWhlYWQoZSk7YnJlYWs7Y2FzZSJDaGFyYWN0ZXIiOnRoaXMudmlzaXRDaGFyYWN0ZXIoZSk7YnJlYWs7Y2FzZSJTZXQiOnRoaXMudmlzaXRTZXQoZSk7YnJlYWs7Y2FzZSJHcm91cCI6dGhpcy52aXNpdEdyb3VwKGUpO2JyZWFrO2Nhc2UiR3JvdXBCYWNrUmVmZXJlbmNlIjp0aGlzLnZpc2l0R3JvdXBCYWNrUmVmZXJlbmNlKGUpO2JyZWFrO2Nhc2UiUXVhbnRpZmllciI6dGhpcy52aXNpdFF1YW50aWZpZXIoZSk7YnJlYWt9dGhpcy52aXNpdENoaWxkcmVuKGUpfXZpc2l0UGF0dGVybihlKXt9dmlzaXRGbGFncyhlKXt9dmlzaXREaXNqdW5jdGlvbihlKXt9dmlzaXRBbHRlcm5hdGl2ZShlKXt9dmlzaXRTdGFydEFuY2hvcihlKXt9dmlzaXRFbmRBbmNob3IoZSl7fXZpc2l0V29yZEJvdW5kYXJ5KGUpe312aXNpdE5vbldvcmRCb3VuZGFyeShlKXt9dmlzaXRMb29rYWhlYWQoZSl7fXZpc2l0TmVnYXRpdmVMb29rYWhlYWQoZSl7fXZpc2l0Q2hhcmFjdGVyKGUpe312aXNpdFNldChlKXt9dmlzaXRHcm91cChlKXt9dmlzaXRHcm91cEJhY2tSZWZlcmVuY2UoZSl7fXZpc2l0UXVhbnRpZmllcihlKXt9fX0pO3ZhciBqMj1OKCgpPT57InVzZSBzdHJpY3QiO2dhZSgpO3lhZSgpfSk7dmFyIFRrPXt9O2hyKFRrLHtORVdMSU5FX1JFR0VYUDooKT0+SlIsZXNjYXBlUmVnRXhwOigpPT5hcCxnZXRDYXNlSW5zZW5zaXRpdmVQYXR0ZXJuOigpPT50TixnZXRUZXJtaW5hbFBhcnRzOigpPT5pUGUsaXNNdWx0aWxpbmVDb21tZW50OigpPT5lTixpc1doaXRlc3BhY2U6KCk9PkRnLHBhcnRpYWxNYXRjaGVzOigpPT5yTixwYXJ0aWFsUmVnRXhwOigpPT5iYWUsd2hpdGVzcGFjZUNoYXJhY3RlcnM6KCk9PnhhZX0pO2Z1bmN0aW9uIGlQZSh0KXt0cnl7dHlwZW9mIHQhPSJzdHJpbmciJiYodD10LnNvdXJjZSksdD1gLyR7dH0vYDtsZXQgZT12YWUucGF0dGVybih0KSxyPVtdO2ZvcihsZXQgbiBvZiBlLnZhbHVlLnZhbHVlKWlwLnJlc2V0KHQpLGlwLnZpc2l0KG4pLHIucHVzaCh7c3RhcnQ6aXAuc3RhcnRSZWdleHAsZW5kOmlwLmVuZFJlZ2V4fSk7cmV0dXJuIHJ9Y2F0Y2h7cmV0dXJuW119fWZ1bmN0aW9uIGVOKHQpe3RyeXtyZXR1cm4gdHlwZW9mIHQ9PSJzdHJpbmciJiYodD1uZXcgUmVnRXhwKHQpKSx0PXQudG9TdHJpbmcoKSxpcC5yZXNldCh0KSxpcC52aXNpdCh2YWUucGF0dGVybih0KSksaXAubXVsdGlsaW5lfWNhdGNoe3JldHVybiExfX1mdW5jdGlvbiBEZyh0KXtsZXQgZT10eXBlb2YgdD09InN0cmluZyI/bmV3IFJlZ0V4cCh0KTp0O3JldHVybiB4YWUuc29tZShyPT5lLnRlc3QocikpfWZ1bmN0aW9uIGFwKHQpe3JldHVybiB0LnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXVxcXS9nLCJcXCQmIil9ZnVuY3Rpb24gdE4odCl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5tYXAuY2FsbCh0LGU9Pi9cdy8udGVzdChlKT9gWyR7ZS50b0xvd2VyQ2FzZSgpfSR7ZS50b1VwcGVyQ2FzZSgpfV1gOmFwKGUpKS5qb2luKCIiKX1mdW5jdGlvbiByTih0LGUpe2xldCByPWJhZSh0KSxuPWUubWF0Y2gocik7cmV0dXJuISFuJiZuWzBdLmxlbmd0aD4wfWZ1bmN0aW9uIGJhZSh0KXt0eXBlb2YgdD09InN0cmluZyImJih0PW5ldyBSZWdFeHAodCkpO2xldCBlPXQscj10LnNvdXJjZSxuPTA7ZnVuY3Rpb24gaSgpe2xldCBhPSIiLHM7ZnVuY3Rpb24gbChoKXthKz1yLnN1YnN0cihuLGgpLG4rPWh9byhsLCJhcHBlbmRSYXciKTtmdW5jdGlvbiB1KGgpe2ErPSIoPzoiK3Iuc3Vic3RyKG4saCkrInwkKSIsbis9aH1mb3Iobyh1LCJhcHBlbmRPcHRpb25hbCIpO248ci5sZW5ndGg7KXN3aXRjaChyW25dKXtjYXNlIlxcIjpzd2l0Y2gocltuKzFdKXtjYXNlImMiOnUoMyk7YnJlYWs7Y2FzZSJ4Ijp1KDQpO2JyZWFrO2Nhc2UidSI6ZS51bmljb2RlP3JbbisyXT09PSJ7Ij91KHIuaW5kZXhPZigifSIsbiktbisxKTp1KDYpOnUoMik7YnJlYWs7Y2FzZSJwIjpjYXNlIlAiOmUudW5pY29kZT91KHIuaW5kZXhPZigifSIsbiktbisxKTp1KDIpO2JyZWFrO2Nhc2UiayI6dShyLmluZGV4T2YoIj4iLG4pLW4rMSk7YnJlYWs7ZGVmYXVsdDp1KDIpO2JyZWFrfWJyZWFrO2Nhc2UiWyI6cz0vXFsoPzpcXC58LikqP1xdL2cscy5sYXN0SW5kZXg9bixzPXMuZXhlYyhyKXx8W10sdShzWzBdLmxlbmd0aCk7YnJlYWs7Y2FzZSJ8IjpjYXNlIl4iOmNhc2UiJCI6Y2FzZSIqIjpjYXNlIisiOmNhc2UiPyI6bCgxKTticmVhaztjYXNlInsiOnM9L1x7XGQrLD9cZCpcfS9nLHMubGFzdEluZGV4PW4scz1zLmV4ZWMocikscz9sKHNbMF0ubGVuZ3RoKTp1KDEpO2JyZWFrO2Nhc2UiKCI6aWYocltuKzFdPT09Ij8iKXN3aXRjaChyW24rMl0pe2Nhc2UiOiI6YSs9Iig/OiIsbis9MyxhKz1pKCkrInwkKSI7YnJlYWs7Y2FzZSI9IjphKz0iKD89IixuKz0zLGErPWkoKSsiKSI7YnJlYWs7Y2FzZSIhIjpzPW4sbis9MyxpKCksYSs9ci5zdWJzdHIocyxuLXMpO2JyZWFrO2Nhc2UiPCI6c3dpdGNoKHJbbiszXSl7Y2FzZSI9IjpjYXNlIiEiOnM9bixuKz00LGkoKSxhKz1yLnN1YnN0cihzLG4tcyk7YnJlYWs7ZGVmYXVsdDpsKHIuaW5kZXhPZigiPiIsbiktbisxKSxhKz1pKCkrInwkKSI7YnJlYWt9YnJlYWt9ZWxzZSBsKDEpLGErPWkoKSsifCQpIjticmVhaztjYXNlIikiOnJldHVybisrbixhO2RlZmF1bHQ6dSgxKTticmVha31yZXR1cm4gYX1yZXR1cm4gbyhpLCJwcm9jZXNzIiksbmV3IFJlZ0V4cChpKCksdC5mbGFncyl9dmFyIEpSLHZhZSxaUixpcCx4YWUsTGc9TigoKT0+eyJ1c2Ugc3RyaWN0IjtqMigpO0pSPS9ccj9cbi9nbSx2YWU9bmV3IG5wLFpSPWNsYXNzIGV4dGVuZHMgTWN7c3RhdGlje28odGhpcywiVGVybWluYWxSZWdFeHBWaXNpdG9yIil9Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuaXNTdGFydGluZz0hMCx0aGlzLmVuZFJlZ2V4cFN0YWNrPVtdLHRoaXMubXVsdGlsaW5lPSExfWdldCBlbmRSZWdleCgpe3JldHVybiB0aGlzLmVuZFJlZ2V4cFN0YWNrLmpvaW4oIiIpfXJlc2V0KGUpe3RoaXMubXVsdGlsaW5lPSExLHRoaXMucmVnZXg9ZSx0aGlzLnN0YXJ0UmVnZXhwPSIiLHRoaXMuaXNTdGFydGluZz0hMCx0aGlzLmVuZFJlZ2V4cFN0YWNrPVtdfXZpc2l0R3JvdXAoZSl7ZS5xdWFudGlmaWVyJiYodGhpcy5pc1N0YXJ0aW5nPSExLHRoaXMuZW5kUmVnZXhwU3RhY2s9W10pfXZpc2l0Q2hhcmFjdGVyKGUpe2xldCByPVN0cmluZy5mcm9tQ2hhckNvZGUoZS52YWx1ZSk7aWYoIXRoaXMubXVsdGlsaW5lJiZyPT09YApgJiYodGhpcy5tdWx0aWxpbmU9ITApLGUucXVhbnRpZmllcil0aGlzLmlzU3RhcnRpbmc9ITEsdGhpcy5lbmRSZWdleHBTdGFjaz1bXTtlbHNle2xldCBuPWFwKHIpO3RoaXMuZW5kUmVnZXhwU3RhY2sucHVzaChuKSx0aGlzLmlzU3RhcnRpbmcmJih0aGlzLnN0YXJ0UmVnZXhwKz1uKX19dmlzaXRTZXQoZSl7aWYoIXRoaXMubXVsdGlsaW5lKXtsZXQgcj10aGlzLnJlZ2V4LnN1YnN0cmluZyhlLmxvYy5iZWdpbixlLmxvYy5lbmQpLG49bmV3IFJlZ0V4cChyKTt0aGlzLm11bHRpbGluZT0hIWAKYC5tYXRjaChuKX1pZihlLnF1YW50aWZpZXIpdGhpcy5pc1N0YXJ0aW5nPSExLHRoaXMuZW5kUmVnZXhwU3RhY2s9W107ZWxzZXtsZXQgcj10aGlzLnJlZ2V4LnN1YnN0cmluZyhlLmxvYy5iZWdpbixlLmxvYy5lbmQpO3RoaXMuZW5kUmVnZXhwU3RhY2sucHVzaChyKSx0aGlzLmlzU3RhcnRpbmcmJih0aGlzLnN0YXJ0UmVnZXhwKz1yKX19dmlzaXRDaGlsZHJlbihlKXtlLnR5cGU9PT0iR3JvdXAiJiZlLnF1YW50aWZpZXJ8fHN1cGVyLnZpc2l0Q2hpbGRyZW4oZSl9fSxpcD1uZXcgWlI7byhpUGUsImdldFRlcm1pbmFsUGFydHMiKTtvKGVOLCJpc011bHRpbGluZUNvbW1lbnQiKTt4YWU9YFxmClxyCVx2IFx4QTBcdTE2ODBcdTIwMDBcdTIwMDFcdTIwMDJcdTIwMDNcdTIwMDRcdTIwMDVcdTIwMDZcdTIwMDdcdTIwMDhcdTIwMDlcdTIwMEFcdTIwMjhcdTIwMjlcdTIwMkZcdTIwNUZcdTMwMDBcdUZFRkZgLnNwbGl0KCIiKTtvKERnLCJpc1doaXRlc3BhY2UiKTtvKGFwLCJlc2NhcGVSZWdFeHAiKTtvKHROLCJnZXRDYXNlSW5zZW5zaXRpdmVQYXR0ZXJuIik7byhyTiwicGFydGlhbE1hdGNoZXMiKTtvKGJhZSwicGFydGlhbFJlZ0V4cCIpfSk7dmFyIEVrPXt9O2hyKEVrLHtmaW5kQXNzaWdubWVudDooKT0+aE4sZmluZE5hbWVBc3NpZ25tZW50OigpPT5rayxmaW5kTm9kZUZvcktleXdvcmQ6KCk9PmNOLGZpbmROb2RlRm9yUHJvcGVydHk6KCk9PlEyLGZpbmROb2Rlc0ZvcktleXdvcmQ6KCk9PmFQZSxmaW5kTm9kZXNGb3JLZXl3b3JkSW50ZXJuYWw6KCk9PnVOLGZpbmROb2Rlc0ZvclByb3BlcnR5OigpPT5vTixnZXRBY3Rpb25BdEVsZW1lbnQ6KCk9PlNhZSxnZXRBY3Rpb25UeXBlOigpPT5BYWUsZ2V0QWxsUmVhY2hhYmxlUnVsZXM6KCk9PksyLGdldENyb3NzUmVmZXJlbmNlVGVybWluYWw6KCk9PmFOLGdldEVudHJ5UnVsZTooKT0+d2FlLGdldEV4cGxpY2l0UnVsZVR5cGU6KCk9PlJnLGdldEhpZGRlblJ1bGVzOigpPT5UYWUsZ2V0UnVsZVR5cGU6KCk9PmZOLGdldFJ1bGVUeXBlTmFtZTooKT0+dVBlLGdldFR5cGVOYW1lOigpPT5KMixpc0FycmF5Q2FyZGluYWxpdHk6KCk9Pm9QZSxpc0FycmF5T3BlcmF0b3I6KCk9PmxQZSxpc0NvbW1lbnRUZXJtaW5hbDooKT0+c04saXNEYXRhVHlwZTooKT0+Y1BlLGlzRGF0YVR5cGVSdWxlOigpPT5aMixpc09wdGlvbmFsQ2FyZGluYWxpdHk6KCk9PnNQZSx0ZXJtaW5hbFJlZ2V4OigpPT5OZ30pO2Z1bmN0aW9uIHdhZSh0KXtyZXR1cm4gdC5ydWxlcy5maW5kKGU9Pk9hKGUpJiZlLmVudHJ5KX1mdW5jdGlvbiBUYWUodCl7cmV0dXJuIHQucnVsZXMuZmlsdGVyKGU9PnNvKGUpJiZlLmhpZGRlbil9ZnVuY3Rpb24gSzIodCxlKXtsZXQgcj1uZXcgU2V0LG49d2FlKHQpO2lmKCFuKXJldHVybiBuZXcgU2V0KHQucnVsZXMpO2xldCBpPVtuXS5jb25jYXQoVGFlKHQpKTtmb3IobGV0IHMgb2YgaSlrYWUocyxyLGUpO2xldCBhPW5ldyBTZXQ7Zm9yKGxldCBzIG9mIHQucnVsZXMpKHIuaGFzKHMubmFtZSl8fHNvKHMpJiZzLmhpZGRlbikmJmEuYWRkKHMpO3JldHVybiBhfWZ1bmN0aW9uIGthZSh0LGUscil7ZS5hZGQodC5uYW1lKSxOYyh0KS5mb3JFYWNoKG49PntpZihJbChuKXx8ciYmZ2sobikpe2xldCBpPW4ucnVsZS5yZWY7aSYmIWUuaGFzKGkubmFtZSkmJmthZShpLGUscil9fSl9ZnVuY3Rpb24gYU4odCl7aWYodC50ZXJtaW5hbClyZXR1cm4gdC50ZXJtaW5hbDtpZih0LnR5cGUucmVmKXtsZXQgZT1rayh0LnR5cGUucmVmKTtyZXR1cm4gZT8udGVybWluYWx9fWZ1bmN0aW9uIHNOKHQpe3JldHVybiB0LmhpZGRlbiYmIURnKE5nKHQpKX1mdW5jdGlvbiBvTih0LGUpe3JldHVybiF0fHwhZT9bXTpsTih0LGUsdC5hc3ROb2RlLCEwKX1mdW5jdGlvbiBRMih0LGUscil7aWYoIXR8fCFlKXJldHVybjtsZXQgbj1sTih0LGUsdC5hc3ROb2RlLCEwKTtpZihuLmxlbmd0aCE9PTApcmV0dXJuIHIhPT12b2lkIDA/cj1NYXRoLm1heCgwLE1hdGgubWluKHIsbi5sZW5ndGgtMSkpOnI9MCxuW3JdfWZ1bmN0aW9uIGxOKHQsZSxyLG4pe2lmKCFuKXtsZXQgaT10cCh0LmdyYW1tYXJTb3VyY2UsTWwpO2lmKGkmJmkuZmVhdHVyZT09PWUpcmV0dXJuW3RdfXJldHVybiBMbCh0KSYmdC5hc3ROb2RlPT09cj90LmNvbnRlbnQuZmxhdE1hcChpPT5sTihpLGUsciwhMSkpOltdfWZ1bmN0aW9uIGFQZSh0LGUpe3JldHVybiB0P3VOKHQsZSx0Py5hc3ROb2RlKTpbXX1mdW5jdGlvbiBjTih0LGUscil7aWYoIXQpcmV0dXJuO2xldCBuPXVOKHQsZSx0Py5hc3ROb2RlKTtpZihuLmxlbmd0aCE9PTApcmV0dXJuIHIhPT12b2lkIDA/cj1NYXRoLm1heCgwLE1hdGgubWluKHIsbi5sZW5ndGgtMSkpOnI9MCxuW3JdfWZ1bmN0aW9uIHVOKHQsZSxyKXtpZih0LmFzdE5vZGUhPT1yKXJldHVybltdO2lmKEhvKHQuZ3JhbW1hclNvdXJjZSkmJnQuZ3JhbW1hclNvdXJjZS52YWx1ZT09PWUpcmV0dXJuW3RdO2xldCBuPUtkKHQpLml0ZXJhdG9yKCksaSxhPVtdO2RvIGlmKGk9bi5uZXh0KCksIWkuZG9uZSl7bGV0IHM9aS52YWx1ZTtzLmFzdE5vZGU9PT1yP0hvKHMuZ3JhbW1hclNvdXJjZSkmJnMuZ3JhbW1hclNvdXJjZS52YWx1ZT09PWUmJmEucHVzaChzKTpuLnBydW5lKCl9d2hpbGUoIWkuZG9uZSk7cmV0dXJuIGF9ZnVuY3Rpb24gaE4odCl7dmFyIGU7bGV0IHI9dC5hc3ROb2RlO2Zvcig7cj09PSgoZT10LmNvbnRhaW5lcik9PT1udWxsfHxlPT09dm9pZCAwP3ZvaWQgMDplLmFzdE5vZGUpOyl7bGV0IG49dHAodC5ncmFtbWFyU291cmNlLE1sKTtpZihuKXJldHVybiBuO3Q9dC5jb250YWluZXJ9fWZ1bmN0aW9uIGtrKHQpe2xldCBlPXQ7cmV0dXJuIGZrKGUpJiYoTXUoZS4kY29udGFpbmVyKT9lPWUuJGNvbnRhaW5lci4kY29udGFpbmVyOk9hKGUuJGNvbnRhaW5lcik/ZT1lLiRjb250YWluZXI6TGMoZS4kY29udGFpbmVyKSksRWFlKHQsZSxuZXcgTWFwKX1mdW5jdGlvbiBFYWUodCxlLHIpe3ZhciBuO2Z1bmN0aW9uIGkoYSxzKXtsZXQgbDtyZXR1cm4gdHAoYSxNbCl8fChsPUVhZShzLHMscikpLHIuc2V0KHQsbCksbH1pZihvKGksImdvIiksci5oYXModCkpcmV0dXJuIHIuZ2V0KHQpO3Iuc2V0KHQsdm9pZCAwKTtmb3IobGV0IGEgb2YgTmMoZSkpe2lmKE1sKGEpJiZhLmZlYXR1cmUudG9Mb3dlckNhc2UoKT09PSJuYW1lIilyZXR1cm4gci5zZXQodCxhKSxhO2lmKElsKGEpJiZPYShhLnJ1bGUucmVmKSlyZXR1cm4gaShhLGEucnVsZS5yZWYpO2lmKHBrKGEpJiYoISgobj1hLnR5cGVSZWYpPT09bnVsbHx8bj09PXZvaWQgMCkmJm4ucmVmKSlyZXR1cm4gaShhLGEudHlwZVJlZi5yZWYpfX1mdW5jdGlvbiBTYWUodCl7bGV0IGU9dC4kY29udGFpbmVyO2lmKHNmKGUpKXtsZXQgcj1lLmVsZW1lbnRzLG49ci5pbmRleE9mKHQpO2ZvcihsZXQgaT1uLTE7aT49MDtpLS0pe2xldCBhPXJbaV07aWYoTXUoYSkpcmV0dXJuIGE7e2xldCBzPU5jKHJbaV0pLmZpbmQoTXUpO2lmKHMpcmV0dXJuIHN9fX1pZihHMihlKSlyZXR1cm4gU2FlKGUpfWZ1bmN0aW9uIHNQZSh0LGUpe3JldHVybiB0PT09Ij8ifHx0PT09IioifHxzZihlKSYmISFlLmd1YXJkQ29uZGl0aW9ufWZ1bmN0aW9uIG9QZSh0KXtyZXR1cm4gdD09PSIqInx8dD09PSIrIn1mdW5jdGlvbiBsUGUodCl7cmV0dXJuIHQ9PT0iKz0ifWZ1bmN0aW9uIFoyKHQpe3JldHVybiBDYWUodCxuZXcgU2V0KX1mdW5jdGlvbiBDYWUodCxlKXtpZihlLmhhcyh0KSlyZXR1cm4hMDtlLmFkZCh0KTtmb3IobGV0IHIgb2YgTmModCkpaWYoSWwocikpe2lmKCFyLnJ1bGUucmVmfHxPYShyLnJ1bGUucmVmKSYmIUNhZShyLnJ1bGUucmVmLGUpKXJldHVybiExfWVsc2V7aWYoTWwocikpcmV0dXJuITE7aWYoTXUocikpcmV0dXJuITF9cmV0dXJuISF0LmRlZmluaXRpb259ZnVuY3Rpb24gY1BlKHQpe3JldHVybiBpTih0LnR5cGUsbmV3IFNldCl9ZnVuY3Rpb24gaU4odCxlKXtpZihlLmhhcyh0KSlyZXR1cm4hMDtpZihlLmFkZCh0KSxEUih0KSlyZXR1cm4hMTtpZihPUih0KSlyZXR1cm4hMTtpZihCUih0KSlyZXR1cm4gdC50eXBlcy5ldmVyeShyPT5pTihyLGUpKTtpZihwayh0KSl7aWYodC5wcmltaXRpdmVUeXBlIT09dm9pZCAwKXJldHVybiEwO2lmKHQuc3RyaW5nVHlwZSE9PXZvaWQgMClyZXR1cm4hMDtpZih0LnR5cGVSZWYhPT12b2lkIDApe2xldCByPXQudHlwZVJlZi5yZWY7cmV0dXJuIFYyKHIpP2lOKHIudHlwZSxlKTohMX1lbHNlIHJldHVybiExfWVsc2UgcmV0dXJuITF9ZnVuY3Rpb24gUmcodCl7aWYodC5pbmZlcnJlZFR5cGUpcmV0dXJuIHQuaW5mZXJyZWRUeXBlLm5hbWU7aWYodC5kYXRhVHlwZSlyZXR1cm4gdC5kYXRhVHlwZTtpZih0LnJldHVyblR5cGUpe2xldCBlPXQucmV0dXJuVHlwZS5yZWY7aWYoZSl7aWYoT2EoZSkpcmV0dXJuIGUubmFtZTtpZihkayhlKXx8VjIoZSkpcmV0dXJuIGUubmFtZX19fWZ1bmN0aW9uIEoyKHQpe3ZhciBlO2lmKE9hKHQpKXJldHVybiBaMih0KT90Lm5hbWU6KGU9UmcodCkpIT09bnVsbCYmZSE9PXZvaWQgMD9lOnQubmFtZTtpZihkayh0KXx8VjIodCl8fFBSKHQpKXJldHVybiB0Lm5hbWU7aWYoTXUodCkpe2xldCByPUFhZSh0KTtpZihyKXJldHVybiByfWVsc2UgaWYoZmsodCkpcmV0dXJuIHQubmFtZTt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBnZXQgbmFtZSBvZiBVbmtub3duIFR5cGUiKX1mdW5jdGlvbiBBYWUodCl7dmFyIGU7aWYodC5pbmZlcnJlZFR5cGUpcmV0dXJuIHQuaW5mZXJyZWRUeXBlLm5hbWU7aWYoISgoZT10LnR5cGUpPT09bnVsbHx8ZT09PXZvaWQgMCkmJmUucmVmKXJldHVybiBKMih0LnR5cGUucmVmKX1mdW5jdGlvbiB1UGUodCl7dmFyIGUscixuO3JldHVybiBzbyh0KT8ocj0oZT10LnR5cGUpPT09bnVsbHx8ZT09PXZvaWQgMD92b2lkIDA6ZS5uYW1lKSE9PW51bGwmJnIhPT12b2lkIDA/cjoic3RyaW5nIjpaMih0KT90Lm5hbWU6KG49UmcodCkpIT09bnVsbCYmbiE9PXZvaWQgMD9uOnQubmFtZX1mdW5jdGlvbiBmTih0KXt2YXIgZSxyLG47cmV0dXJuIHNvKHQpPyhyPShlPXQudHlwZSk9PT1udWxsfHxlPT09dm9pZCAwP3ZvaWQgMDplLm5hbWUpIT09bnVsbCYmciE9PXZvaWQgMD9yOiJzdHJpbmciOihuPVJnKHQpKSE9PW51bGwmJm4hPT12b2lkIDA/bjp0Lm5hbWV9ZnVuY3Rpb24gTmcodCl7bGV0IGU9e3M6ITEsaTohMSx1OiExfSxyPU1nKHQuZGVmaW5pdGlvbixlKSxuPU9iamVjdC5lbnRyaWVzKGUpLmZpbHRlcigoWyxpXSk9PmkpLm1hcCgoW2ldKT0+aSkuam9pbigiIik7cmV0dXJuIG5ldyBSZWdFeHAocixuKX1mdW5jdGlvbiBNZyh0LGUpe2lmKFZSKHQpKXJldHVybiBoUGUodCk7aWYoVVIodCkpcmV0dXJuIGZQZSh0KTtpZihGUih0KSlyZXR1cm4gbVBlKHQpO2lmKGdrKHQpKXtsZXQgcj10LnJ1bGUucmVmO2lmKCFyKXRocm93IG5ldyBFcnJvcigiTWlzc2luZyBydWxlIHJlZmVyZW5jZS4iKTtyZXR1cm4gSXUoTWcoci5kZWZpbml0aW9uKSx7Y2FyZGluYWxpdHk6dC5jYXJkaW5hbGl0eSxsb29rYWhlYWQ6dC5sb29rYWhlYWR9KX1lbHNle2lmKHpSKHQpKXJldHVybiBwUGUodCk7aWYoSFIodCkpcmV0dXJuIGRQZSh0KTtpZihHUih0KSl7bGV0IHI9dC5yZWdleC5sYXN0SW5kZXhPZigiLyIpLG49dC5yZWdleC5zdWJzdHJpbmcoMSxyKSxpPXQucmVnZXguc3Vic3RyaW5nKHIrMSk7cmV0dXJuIGUmJihlLmk9aS5pbmNsdWRlcygiaSIpLGUucz1pLmluY2x1ZGVzKCJzIiksZS51PWkuaW5jbHVkZXMoInUiKSksSXUobix7Y2FyZGluYWxpdHk6dC5jYXJkaW5hbGl0eSxsb29rYWhlYWQ6dC5sb29rYWhlYWQsd3JhcDohMX0pfWVsc2V7aWYoV1IodCkpcmV0dXJuIEl1KGROLHtjYXJkaW5hbGl0eTp0LmNhcmRpbmFsaXR5LGxvb2thaGVhZDp0Lmxvb2thaGVhZH0pO3Rocm93IG5ldyBFcnJvcihgSW52YWxpZCB0ZXJtaW5hbCBlbGVtZW50OiAke3Q/LiR0eXBlfWApfX19ZnVuY3Rpb24gaFBlKHQpe3JldHVybiBJdSh0LmVsZW1lbnRzLm1hcChlPT5NZyhlKSkuam9pbigifCIpLHtjYXJkaW5hbGl0eTp0LmNhcmRpbmFsaXR5LGxvb2thaGVhZDp0Lmxvb2thaGVhZH0pfWZ1bmN0aW9uIGZQZSh0KXtyZXR1cm4gSXUodC5lbGVtZW50cy5tYXAoZT0+TWcoZSkpLmpvaW4oIiIpLHtjYXJkaW5hbGl0eTp0LmNhcmRpbmFsaXR5LGxvb2thaGVhZDp0Lmxvb2thaGVhZH0pfWZ1bmN0aW9uIGRQZSh0KXtyZXR1cm4gSXUoYCR7ZE59Kj8ke01nKHQudGVybWluYWwpfWAse2NhcmRpbmFsaXR5OnQuY2FyZGluYWxpdHksbG9va2FoZWFkOnQubG9va2FoZWFkfSl9ZnVuY3Rpb24gcFBlKHQpe3JldHVybiBJdShgKD8hJHtNZyh0LnRlcm1pbmFsKX0pJHtkTn0qP2Ase2NhcmRpbmFsaXR5OnQuY2FyZGluYWxpdHksbG9va2FoZWFkOnQubG9va2FoZWFkfSl9ZnVuY3Rpb24gbVBlKHQpe3JldHVybiB0LnJpZ2h0P0l1KGBbJHtuTih0LmxlZnQpfS0ke25OKHQucmlnaHQpfV1gLHtjYXJkaW5hbGl0eTp0LmNhcmRpbmFsaXR5LGxvb2thaGVhZDp0Lmxvb2thaGVhZCx3cmFwOiExfSk6SXUobk4odC5sZWZ0KSx7Y2FyZGluYWxpdHk6dC5jYXJkaW5hbGl0eSxsb29rYWhlYWQ6dC5sb29rYWhlYWQsd3JhcDohMX0pfWZ1bmN0aW9uIG5OKHQpe3JldHVybiBhcCh0LnZhbHVlKX1mdW5jdGlvbiBJdSh0LGUpe3ZhciByO3JldHVybihlLndyYXAhPT0hMXx8ZS5sb29rYWhlYWQpJiYodD1gKCR7KHI9ZS5sb29rYWhlYWQpIT09bnVsbCYmciE9PXZvaWQgMD9yOiIifSR7dH0pYCksZS5jYXJkaW5hbGl0eT9gJHt0fSR7ZS5jYXJkaW5hbGl0eX1gOnR9dmFyIGROLE9sPU4oKCk9PnsidXNlIHN0cmljdCI7dWsoKTtSYygpO1JsKCk7aXMoKTtObCgpO0xnKCk7byh3YWUsImdldEVudHJ5UnVsZSIpO28oVGFlLCJnZXRIaWRkZW5SdWxlcyIpO28oSzIsImdldEFsbFJlYWNoYWJsZVJ1bGVzIik7byhrYWUsInJ1bGVEZnMiKTtvKGFOLCJnZXRDcm9zc1JlZmVyZW5jZVRlcm1pbmFsIik7byhzTiwiaXNDb21tZW50VGVybWluYWwiKTtvKG9OLCJmaW5kTm9kZXNGb3JQcm9wZXJ0eSIpO28oUTIsImZpbmROb2RlRm9yUHJvcGVydHkiKTtvKGxOLCJmaW5kTm9kZXNGb3JQcm9wZXJ0eUludGVybmFsIik7byhhUGUsImZpbmROb2Rlc0ZvcktleXdvcmQiKTtvKGNOLCJmaW5kTm9kZUZvcktleXdvcmQiKTtvKHVOLCJmaW5kTm9kZXNGb3JLZXl3b3JkSW50ZXJuYWwiKTtvKGhOLCJmaW5kQXNzaWdubWVudCIpO28oa2ssImZpbmROYW1lQXNzaWdubWVudCIpO28oRWFlLCJmaW5kTmFtZUFzc2lnbm1lbnRJbnRlcm5hbCIpO28oU2FlLCJnZXRBY3Rpb25BdEVsZW1lbnQiKTtvKHNQZSwiaXNPcHRpb25hbENhcmRpbmFsaXR5Iik7byhvUGUsImlzQXJyYXlDYXJkaW5hbGl0eSIpO28obFBlLCJpc0FycmF5T3BlcmF0b3IiKTtvKFoyLCJpc0RhdGFUeXBlUnVsZSIpO28oQ2FlLCJpc0RhdGFUeXBlUnVsZUludGVybmFsIik7byhjUGUsImlzRGF0YVR5cGUiKTtvKGlOLCJpc0RhdGFUeXBlSW50ZXJuYWwiKTtvKFJnLCJnZXRFeHBsaWNpdFJ1bGVUeXBlIik7byhKMiwiZ2V0VHlwZU5hbWUiKTtvKEFhZSwiZ2V0QWN0aW9uVHlwZSIpO28odVBlLCJnZXRSdWxlVHlwZU5hbWUiKTtvKGZOLCJnZXRSdWxlVHlwZSIpO28oTmcsInRlcm1pbmFsUmVnZXgiKTtkTj0vW1xzXFNdLy5zb3VyY2U7byhNZywiYWJzdHJhY3RFbGVtZW50VG9SZWdleCIpO28oaFBlLCJ0ZXJtaW5hbEFsdGVybmF0aXZlc1RvUmVnZXgiKTtvKGZQZSwidGVybWluYWxHcm91cFRvUmVnZXgiKTtvKGRQZSwidW50aWxUb2tlblRvUmVnZXgiKTtvKHBQZSwibmVnYXRlVG9rZW5Ub1JlZ2V4Iik7byhtUGUsImNoYXJhY3RlclJhbmdlVG9SZWdleCIpO28obk4sImtleXdvcmRUb1JlZ2V4Iik7byhJdSwid2l0aENhcmRpbmFsaXR5Iil9KTtmdW5jdGlvbiBwTih0KXtsZXQgZT1bXSxyPXQuR3JhbW1hcjtmb3IobGV0IG4gb2Ygci5ydWxlcylzbyhuKSYmc04obikmJmVOKE5nKG4pKSYmZS5wdXNoKG4ubmFtZSk7cmV0dXJue211bHRpbGluZUNvbW1lbnRSdWxlczplLG5hbWVSZWdleHA6bGt9fXZhciBtTj1OKCgpPT57InVzZSBzdHJpY3QiO05sKCk7T2woKTtMZygpO1JjKCk7byhwTiwiY3JlYXRlR3JhbW1hckNvbmZpZyIpfSk7dmFyIGdOPU4oKCk9PnsidXNlIHN0cmljdCJ9KTtmdW5jdGlvbiBJZyh0KXtjb25zb2xlJiZjb25zb2xlLmVycm9yJiZjb25zb2xlLmVycm9yKGBFcnJvcjogJHt0fWApfWZ1bmN0aW9uIGV4KHQpe2NvbnNvbGUmJmNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKGBXYXJuaW5nOiAke3R9YCl9dmFyIF9hZT1OKCgpPT57InVzZSBzdHJpY3QiO28oSWcsIlBSSU5UX0VSUk9SIik7byhleCwiUFJJTlRfV0FSTklORyIpfSk7ZnVuY3Rpb24gdHgodCl7bGV0IGU9bmV3IERhdGUoKS5nZXRUaW1lKCkscj10KCk7cmV0dXJue3RpbWU6bmV3IERhdGUoKS5nZXRUaW1lKCktZSx2YWx1ZTpyfX12YXIgRGFlPU4oKCk9PnsidXNlIHN0cmljdCI7byh0eCwidGltZXIiKX0pO2Z1bmN0aW9uIHJ4KHQpe2Z1bmN0aW9uIGUoKXt9byhlLCJGYWtlQ29uc3RydWN0b3IiKSxlLnByb3RvdHlwZT10O2xldCByPW5ldyBlO2Z1bmN0aW9uIG4oKXtyZXR1cm4gdHlwZW9mIHIuYmFyfXJldHVybiBvKG4sImZha2VBY2Nlc3MiKSxuKCksbigpLHQ7KDAsZXZhbCkodCl9dmFyIExhZT1OKCgpPT57InVzZSBzdHJpY3QiO28ocngsInRvRmFzdFByb3BlcnRpZXMiKX0pO3ZhciBPZz1OKCgpPT57InVzZSBzdHJpY3QiO19hZSgpO0RhZSgpO0xhZSgpfSk7ZnVuY3Rpb24gZ1BlKHQpe3JldHVybiB5UGUodCk/dC5MQUJFTDp0Lm5hbWV9ZnVuY3Rpb24geVBlKHQpe3JldHVybiB5aSh0LkxBQkVMKSYmdC5MQUJFTCE9PSIifWZ1bmN0aW9uIFNrKHQpe3JldHVybiBKZSh0LFBnKX1mdW5jdGlvbiBQZyh0KXtmdW5jdGlvbiBlKHIpe3JldHVybiBKZShyLFBnKX1pZihvKGUsImNvbnZlcnREZWZpbml0aW9uIiksdCBpbnN0YW5jZW9mIG9uKXtsZXQgcj17dHlwZToiTm9uVGVybWluYWwiLG5hbWU6dC5ub25UZXJtaW5hbE5hbWUsaWR4OnQuaWR4fTtyZXR1cm4geWkodC5sYWJlbCkmJihyLmxhYmVsPXQubGFiZWwpLHJ9ZWxzZXtpZih0IGluc3RhbmNlb2YgRG4pcmV0dXJue3R5cGU6IkFsdGVybmF0aXZlIixkZWZpbml0aW9uOmUodC5kZWZpbml0aW9uKX07aWYodCBpbnN0YW5jZW9mIGxuKXJldHVybnt0eXBlOiJPcHRpb24iLGlkeDp0LmlkeCxkZWZpbml0aW9uOmUodC5kZWZpbml0aW9uKX07aWYodCBpbnN0YW5jZW9mIExuKXJldHVybnt0eXBlOiJSZXBldGl0aW9uTWFuZGF0b3J5IixpZHg6dC5pZHgsZGVmaW5pdGlvbjplKHQuZGVmaW5pdGlvbil9O2lmKHQgaW5zdGFuY2VvZiBSbilyZXR1cm57dHlwZToiUmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3IiLGlkeDp0LmlkeCxzZXBhcmF0b3I6UGcobmV3IGtyKHt0ZXJtaW5hbFR5cGU6dC5zZXBhcmF0b3J9KSksZGVmaW5pdGlvbjplKHQuZGVmaW5pdGlvbil9O2lmKHQgaW5zdGFuY2VvZiB3bilyZXR1cm57dHlwZToiUmVwZXRpdGlvbldpdGhTZXBhcmF0b3IiLGlkeDp0LmlkeCxzZXBhcmF0b3I6UGcobmV3IGtyKHt0ZXJtaW5hbFR5cGU6dC5zZXBhcmF0b3J9KSksZGVmaW5pdGlvbjplKHQuZGVmaW5pdGlvbil9O2lmKHQgaW5zdGFuY2VvZiBPcilyZXR1cm57dHlwZToiUmVwZXRpdGlvbiIsaWR4OnQuaWR4LGRlZmluaXRpb246ZSh0LmRlZmluaXRpb24pfTtpZih0IGluc3RhbmNlb2YgVG4pcmV0dXJue3R5cGU6IkFsdGVybmF0aW9uIixpZHg6dC5pZHgsZGVmaW5pdGlvbjplKHQuZGVmaW5pdGlvbil9O2lmKHQgaW5zdGFuY2VvZiBrcil7bGV0IHI9e3R5cGU6IlRlcm1pbmFsIixuYW1lOnQudGVybWluYWxUeXBlLm5hbWUsbGFiZWw6Z1BlKHQudGVybWluYWxUeXBlKSxpZHg6dC5pZHh9O3lpKHQubGFiZWwpJiYoci50ZXJtaW5hbExhYmVsPXQubGFiZWwpO2xldCBuPXQudGVybWluYWxUeXBlLlBBVFRFUk47cmV0dXJuIHQudGVybWluYWxUeXBlLlBBVFRFUk4mJihyLnBhdHRlcm49em8obik/bi5zb3VyY2U6bikscn1lbHNle2lmKHQgaW5zdGFuY2VvZiBhcylyZXR1cm57dHlwZToiUnVsZSIsbmFtZTp0Lm5hbWUsb3JnVGV4dDp0Lm9yZ1RleHQsZGVmaW5pdGlvbjplKHQuZGVmaW5pdGlvbil9O3Rocm93IEVycm9yKCJub24gZXhoYXVzdGl2ZSBtYXRjaCIpfX19dmFyIG9vLG9uLGFzLERuLGxuLExuLFJuLE9yLHduLFRuLGtyLENrPU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTtvKGdQZSwidG9rZW5MYWJlbCIpO28oeVBlLCJoYXNUb2tlbkxhYmVsIik7b289Y2xhc3N7c3RhdGlje28odGhpcywiQWJzdHJhY3RQcm9kdWN0aW9uIil9Z2V0IGRlZmluaXRpb24oKXtyZXR1cm4gdGhpcy5fZGVmaW5pdGlvbn1zZXQgZGVmaW5pdGlvbihlKXt0aGlzLl9kZWZpbml0aW9uPWV9Y29uc3RydWN0b3IoZSl7dGhpcy5fZGVmaW5pdGlvbj1lfWFjY2VwdChlKXtlLnZpc2l0KHRoaXMpLEFlKHRoaXMuZGVmaW5pdGlvbixyPT57ci5hY2NlcHQoZSl9KX19LG9uPWNsYXNzIGV4dGVuZHMgb297c3RhdGlje28odGhpcywiTm9uVGVybWluYWwiKX1jb25zdHJ1Y3RvcihlKXtzdXBlcihbXSksdGhpcy5pZHg9MSxtYSh0aGlzLE9zKGUscj0+ciE9PXZvaWQgMCkpfXNldCBkZWZpbml0aW9uKGUpe31nZXQgZGVmaW5pdGlvbigpe3JldHVybiB0aGlzLnJlZmVyZW5jZWRSdWxlIT09dm9pZCAwP3RoaXMucmVmZXJlbmNlZFJ1bGUuZGVmaW5pdGlvbjpbXX1hY2NlcHQoZSl7ZS52aXNpdCh0aGlzKX19LGFzPWNsYXNzIGV4dGVuZHMgb297c3RhdGlje28odGhpcywiUnVsZSIpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKGUuZGVmaW5pdGlvbiksdGhpcy5vcmdUZXh0PSIiLG1hKHRoaXMsT3MoZSxyPT5yIT09dm9pZCAwKSl9fSxEbj1jbGFzcyBleHRlbmRzIG9ve3N0YXRpY3tvKHRoaXMsIkFsdGVybmF0aXZlIil9Y29uc3RydWN0b3IoZSl7c3VwZXIoZS5kZWZpbml0aW9uKSx0aGlzLmlnbm9yZUFtYmlndWl0aWVzPSExLG1hKHRoaXMsT3MoZSxyPT5yIT09dm9pZCAwKSl9fSxsbj1jbGFzcyBleHRlbmRzIG9ve3N0YXRpY3tvKHRoaXMsIk9wdGlvbiIpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKGUuZGVmaW5pdGlvbiksdGhpcy5pZHg9MSxtYSh0aGlzLE9zKGUscj0+ciE9PXZvaWQgMCkpfX0sTG49Y2xhc3MgZXh0ZW5kcyBvb3tzdGF0aWN7byh0aGlzLCJSZXBldGl0aW9uTWFuZGF0b3J5Iil9Y29uc3RydWN0b3IoZSl7c3VwZXIoZS5kZWZpbml0aW9uKSx0aGlzLmlkeD0xLG1hKHRoaXMsT3MoZSxyPT5yIT09dm9pZCAwKSl9fSxSbj1jbGFzcyBleHRlbmRzIG9ve3N0YXRpY3tvKHRoaXMsIlJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yIil9Y29uc3RydWN0b3IoZSl7c3VwZXIoZS5kZWZpbml0aW9uKSx0aGlzLmlkeD0xLG1hKHRoaXMsT3MoZSxyPT5yIT09dm9pZCAwKSl9fSxPcj1jbGFzcyBleHRlbmRzIG9ve3N0YXRpY3tvKHRoaXMsIlJlcGV0aXRpb24iKX1jb25zdHJ1Y3RvcihlKXtzdXBlcihlLmRlZmluaXRpb24pLHRoaXMuaWR4PTEsbWEodGhpcyxPcyhlLHI9PnIhPT12b2lkIDApKX19LHduPWNsYXNzIGV4dGVuZHMgb297c3RhdGlje28odGhpcywiUmVwZXRpdGlvbldpdGhTZXBhcmF0b3IiKX1jb25zdHJ1Y3RvcihlKXtzdXBlcihlLmRlZmluaXRpb24pLHRoaXMuaWR4PTEsbWEodGhpcyxPcyhlLHI9PnIhPT12b2lkIDApKX19LFRuPWNsYXNzIGV4dGVuZHMgb297c3RhdGlje28odGhpcywiQWx0ZXJuYXRpb24iKX1nZXQgZGVmaW5pdGlvbigpe3JldHVybiB0aGlzLl9kZWZpbml0aW9ufXNldCBkZWZpbml0aW9uKGUpe3RoaXMuX2RlZmluaXRpb249ZX1jb25zdHJ1Y3RvcihlKXtzdXBlcihlLmRlZmluaXRpb24pLHRoaXMuaWR4PTEsdGhpcy5pZ25vcmVBbWJpZ3VpdGllcz0hMSx0aGlzLmhhc1ByZWRpY2F0ZXM9ITEsbWEodGhpcyxPcyhlLHI9PnIhPT12b2lkIDApKX19LGtyPWNsYXNze3N0YXRpY3tvKHRoaXMsIlRlcm1pbmFsIil9Y29uc3RydWN0b3IoZSl7dGhpcy5pZHg9MSxtYSh0aGlzLE9zKGUscj0+ciE9PXZvaWQgMCkpfWFjY2VwdChlKXtlLnZpc2l0KHRoaXMpfX07byhTaywic2VyaWFsaXplR3JhbW1hciIpO28oUGcsInNlcmlhbGl6ZVByb2R1Y3Rpb24iKX0pO3ZhciBzcyxSYWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtDaygpO3NzPWNsYXNze3N0YXRpY3tvKHRoaXMsIkdBc3RWaXNpdG9yIil9dmlzaXQoZSl7bGV0IHI9ZTtzd2l0Y2goci5jb25zdHJ1Y3Rvcil7Y2FzZSBvbjpyZXR1cm4gdGhpcy52aXNpdE5vblRlcm1pbmFsKHIpO2Nhc2UgRG46cmV0dXJuIHRoaXMudmlzaXRBbHRlcm5hdGl2ZShyKTtjYXNlIGxuOnJldHVybiB0aGlzLnZpc2l0T3B0aW9uKHIpO2Nhc2UgTG46cmV0dXJuIHRoaXMudmlzaXRSZXBldGl0aW9uTWFuZGF0b3J5KHIpO2Nhc2UgUm46cmV0dXJuIHRoaXMudmlzaXRSZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvcihyKTtjYXNlIHduOnJldHVybiB0aGlzLnZpc2l0UmVwZXRpdGlvbldpdGhTZXBhcmF0b3Iocik7Y2FzZSBPcjpyZXR1cm4gdGhpcy52aXNpdFJlcGV0aXRpb24ocik7Y2FzZSBUbjpyZXR1cm4gdGhpcy52aXNpdEFsdGVybmF0aW9uKHIpO2Nhc2Uga3I6cmV0dXJuIHRoaXMudmlzaXRUZXJtaW5hbChyKTtjYXNlIGFzOnJldHVybiB0aGlzLnZpc2l0UnVsZShyKTtkZWZhdWx0OnRocm93IEVycm9yKCJub24gZXhoYXVzdGl2ZSBtYXRjaCIpfX12aXNpdE5vblRlcm1pbmFsKGUpe312aXNpdEFsdGVybmF0aXZlKGUpe312aXNpdE9wdGlvbihlKXt9dmlzaXRSZXBldGl0aW9uKGUpe312aXNpdFJlcGV0aXRpb25NYW5kYXRvcnkoZSl7fXZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3IoZSl7fXZpc2l0UmVwZXRpdGlvbldpdGhTZXBhcmF0b3IoZSl7fXZpc2l0QWx0ZXJuYXRpb24oZSl7fXZpc2l0VGVybWluYWwoZSl7fXZpc2l0UnVsZShlKXt9fX0pO2Z1bmN0aW9uIHlOKHQpe3JldHVybiB0IGluc3RhbmNlb2YgRG58fHQgaW5zdGFuY2VvZiBsbnx8dCBpbnN0YW5jZW9mIE9yfHx0IGluc3RhbmNlb2YgTG58fHQgaW5zdGFuY2VvZiBSbnx8dCBpbnN0YW5jZW9mIHdufHx0IGluc3RhbmNlb2Yga3J8fHQgaW5zdGFuY2VvZiBhc31mdW5jdGlvbiBzcCh0LGU9W10pe3JldHVybiB0IGluc3RhbmNlb2YgbG58fHQgaW5zdGFuY2VvZiBPcnx8dCBpbnN0YW5jZW9mIHduPyEwOnQgaW5zdGFuY2VvZiBUbj9BMih0LmRlZmluaXRpb24sbj0+c3AobixlKSk6dCBpbnN0YW5jZW9mIG9uJiZxbihlLHQpPyExOnQgaW5zdGFuY2VvZiBvbz8odCBpbnN0YW5jZW9mIG9uJiZlLnB1c2godCksTWEodC5kZWZpbml0aW9uLG49PnNwKG4sZSkpKTohMX1mdW5jdGlvbiB2Tih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIFRufWZ1bmN0aW9uIEJzKHQpe2lmKHQgaW5zdGFuY2VvZiBvbilyZXR1cm4iU1VCUlVMRSI7aWYodCBpbnN0YW5jZW9mIGxuKXJldHVybiJPUFRJT04iO2lmKHQgaW5zdGFuY2VvZiBUbilyZXR1cm4iT1IiO2lmKHQgaW5zdGFuY2VvZiBMbilyZXR1cm4iQVRfTEVBU1RfT05FIjtpZih0IGluc3RhbmNlb2YgUm4pcmV0dXJuIkFUX0xFQVNUX09ORV9TRVAiO2lmKHQgaW5zdGFuY2VvZiB3bilyZXR1cm4iTUFOWV9TRVAiO2lmKHQgaW5zdGFuY2VvZiBPcilyZXR1cm4iTUFOWSI7aWYodCBpbnN0YW5jZW9mIGtyKXJldHVybiJDT05TVU1FIjt0aHJvdyBFcnJvcigibm9uIGV4aGF1c3RpdmUgbWF0Y2giKX12YXIgTmFlPU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTtDaygpO28oeU4sImlzU2VxdWVuY2VQcm9kIik7byhzcCwiaXNPcHRpb25hbFByb2QiKTtvKHZOLCJpc0JyYW5jaGluZ1Byb2QiKTtvKEJzLCJnZXRQcm9kdWN0aW9uRHNsTmFtZSIpfSk7dmFyIG9zPU4oKCk9PnsidXNlIHN0cmljdCI7Q2soKTtSYWUoKTtOYWUoKX0pO2Z1bmN0aW9uIE1hZSh0LGUscil7cmV0dXJuW25ldyBsbih7ZGVmaW5pdGlvbjpbbmV3IGtyKHt0ZXJtaW5hbFR5cGU6dC5zZXBhcmF0b3J9KV0uY29uY2F0KHQuZGVmaW5pdGlvbil9KV0uY29uY2F0KGUscil9dmFyIE91LEFrPU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTtvcygpO091PWNsYXNze3N0YXRpY3tvKHRoaXMsIlJlc3RXYWxrZXIiKX13YWxrKGUscj1bXSl7QWUoZS5kZWZpbml0aW9uLChuLGkpPT57bGV0IGE9Z2koZS5kZWZpbml0aW9uLGkrMSk7aWYobiBpbnN0YW5jZW9mIG9uKXRoaXMud2Fsa1Byb2RSZWYobixhLHIpO2Vsc2UgaWYobiBpbnN0YW5jZW9mIGtyKXRoaXMud2Fsa1Rlcm1pbmFsKG4sYSxyKTtlbHNlIGlmKG4gaW5zdGFuY2VvZiBEbil0aGlzLndhbGtGbGF0KG4sYSxyKTtlbHNlIGlmKG4gaW5zdGFuY2VvZiBsbil0aGlzLndhbGtPcHRpb24obixhLHIpO2Vsc2UgaWYobiBpbnN0YW5jZW9mIExuKXRoaXMud2Fsa0F0TGVhc3RPbmUobixhLHIpO2Vsc2UgaWYobiBpbnN0YW5jZW9mIFJuKXRoaXMud2Fsa0F0TGVhc3RPbmVTZXAobixhLHIpO2Vsc2UgaWYobiBpbnN0YW5jZW9mIHduKXRoaXMud2Fsa01hbnlTZXAobixhLHIpO2Vsc2UgaWYobiBpbnN0YW5jZW9mIE9yKXRoaXMud2Fsa01hbnkobixhLHIpO2Vsc2UgaWYobiBpbnN0YW5jZW9mIFRuKXRoaXMud2Fsa09yKG4sYSxyKTtlbHNlIHRocm93IEVycm9yKCJub24gZXhoYXVzdGl2ZSBtYXRjaCIpfSl9d2Fsa1Rlcm1pbmFsKGUscixuKXt9d2Fsa1Byb2RSZWYoZSxyLG4pe313YWxrRmxhdChlLHIsbil7bGV0IGk9ci5jb25jYXQobik7dGhpcy53YWxrKGUsaSl9d2Fsa09wdGlvbihlLHIsbil7bGV0IGk9ci5jb25jYXQobik7dGhpcy53YWxrKGUsaSl9d2Fsa0F0TGVhc3RPbmUoZSxyLG4pe2xldCBpPVtuZXcgbG4oe2RlZmluaXRpb246ZS5kZWZpbml0aW9ufSldLmNvbmNhdChyLG4pO3RoaXMud2FsayhlLGkpfXdhbGtBdExlYXN0T25lU2VwKGUscixuKXtsZXQgaT1NYWUoZSxyLG4pO3RoaXMud2FsayhlLGkpfXdhbGtNYW55KGUscixuKXtsZXQgaT1bbmV3IGxuKHtkZWZpbml0aW9uOmUuZGVmaW5pdGlvbn0pXS5jb25jYXQocixuKTt0aGlzLndhbGsoZSxpKX13YWxrTWFueVNlcChlLHIsbil7bGV0IGk9TWFlKGUscixuKTt0aGlzLndhbGsoZSxpKX13YWxrT3IoZSxyLG4pe2xldCBpPXIuY29uY2F0KG4pO0FlKGUuZGVmaW5pdGlvbixhPT57bGV0IHM9bmV3IERuKHtkZWZpbml0aW9uOlthXX0pO3RoaXMud2FsayhzLGkpfSl9fTtvKE1hZSwicmVzdEZvclJlcGV0aXRpb25XaXRoU2VwYXJhdG9yIil9KTtmdW5jdGlvbiBvcCh0KXtpZih0IGluc3RhbmNlb2Ygb24pcmV0dXJuIG9wKHQucmVmZXJlbmNlZFJ1bGUpO2lmKHQgaW5zdGFuY2VvZiBrcilyZXR1cm4gYlBlKHQpO2lmKHlOKHQpKXJldHVybiB2UGUodCk7aWYodk4odCkpcmV0dXJuIHhQZSh0KTt0aHJvdyBFcnJvcigibm9uIGV4aGF1c3RpdmUgbWF0Y2giKX1mdW5jdGlvbiB2UGUodCl7bGV0IGU9W10scj10LmRlZmluaXRpb24sbj0wLGk9ci5sZW5ndGg+bixhLHM9ITA7Zm9yKDtpJiZzOylhPXJbbl0scz1zcChhKSxlPWUuY29uY2F0KG9wKGEpKSxuPW4rMSxpPXIubGVuZ3RoPm47cmV0dXJuIEJtKGUpfWZ1bmN0aW9uIHhQZSh0KXtsZXQgZT1KZSh0LmRlZmluaXRpb24scj0+b3AocikpO3JldHVybiBCbShxcihlKSl9ZnVuY3Rpb24gYlBlKHQpe3JldHVyblt0LnRlcm1pbmFsVHlwZV19dmFyIHhOPU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTtvcygpO28ob3AsImZpcnN0Iik7byh2UGUsImZpcnN0Rm9yU2VxdWVuY2UiKTtvKHhQZSwiZmlyc3RGb3JCcmFuY2hpbmciKTtvKGJQZSwiZmlyc3RGb3JUZXJtaW5hbCIpfSk7dmFyIF9rLGJOPU4oKCk9PnsidXNlIHN0cmljdCI7X2s9Il9+SU5+XyJ9KTtmdW5jdGlvbiBJYWUodCl7bGV0IGU9e307cmV0dXJuIEFlKHQscj0+e2xldCBuPW5ldyB3TihyKS5zdGFydFdhbGtpbmcoKTttYShlLG4pfSksZX1mdW5jdGlvbiB3UGUodCxlKXtyZXR1cm4gdC5uYW1lK2UrX2t9dmFyIHdOLE9hZT1OKCgpPT57InVzZSBzdHJpY3QiO0FrKCk7eE4oKTtxdCgpO2JOKCk7b3MoKTt3Tj1jbGFzcyBleHRlbmRzIE91e3N0YXRpY3tvKHRoaXMsIlJlc3luY0ZvbGxvd3NXYWxrZXIiKX1jb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMudG9wUHJvZD1lLHRoaXMuZm9sbG93cz17fX1zdGFydFdhbGtpbmcoKXtyZXR1cm4gdGhpcy53YWxrKHRoaXMudG9wUHJvZCksdGhpcy5mb2xsb3dzfXdhbGtUZXJtaW5hbChlLHIsbil7fXdhbGtQcm9kUmVmKGUscixuKXtsZXQgaT13UGUoZS5yZWZlcmVuY2VkUnVsZSxlLmlkeCkrdGhpcy50b3BQcm9kLm5hbWUsYT1yLmNvbmNhdChuKSxzPW5ldyBEbih7ZGVmaW5pdGlvbjphfSksbD1vcChzKTt0aGlzLmZvbGxvd3NbaV09bH19O28oSWFlLCJjb21wdXRlQWxsUHJvZHNGb2xsb3dzIik7byh3UGUsImJ1aWxkQmV0d2VlblByb2RzRm9sbG93UHJlZml4Iil9KTtmdW5jdGlvbiBCZyh0KXtsZXQgZT10LnRvU3RyaW5nKCk7aWYoRGsuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuIERrW2VdO3tsZXQgcj1UUGUucGF0dGVybihlKTtyZXR1cm4gRGtbZV09cixyfX1mdW5jdGlvbiBQYWUoKXtEaz17fX12YXIgRGssVFBlLExrPU4oKCk9PnsidXNlIHN0cmljdCI7ajIoKTtEaz17fSxUUGU9bmV3IG5wO28oQmcsImdldFJlZ0V4cEFzdCIpO28oUGFlLCJjbGVhclJlZ0V4cFBhcnNlckNhY2hlIil9KTtmdW5jdGlvbiAkYWUodCxlPSExKXt0cnl7bGV0IHI9QmcodCk7cmV0dXJuIFROKHIudmFsdWUse30sci5mbGFncy5pZ25vcmVDYXNlKX1jYXRjaChyKXtpZihyLm1lc3NhZ2U9PT1GYWUpZSYmZXgoYCR7bnh9CVVuYWJsZSB0byBvcHRpbWl6ZTogPCAke3QudG9TdHJpbmcoKX0gPgoJQ29tcGxlbWVudCBTZXRzIGNhbm5vdCBiZSBhdXRvbWF0aWNhbGx5IG9wdGltaXplZC4KCVRoaXMgd2lsbCBkaXNhYmxlIHRoZSBsZXhlcidzIGZpcnN0IGNoYXIgb3B0aW1pemF0aW9ucy4KCVNlZTogaHR0cHM6Ly9jaGV2cm90YWluLmlvL2RvY3MvZ3VpZGUvcmVzb2x2aW5nX2xleGVyX2Vycm9ycy5odG1sI0NPTVBMRU1FTlQgZm9yIGRldGFpbHMuYCk7ZWxzZXtsZXQgbj0iIjtlJiYobj1gCglUaGlzIHdpbGwgZGlzYWJsZSB0aGUgbGV4ZXIncyBmaXJzdCBjaGFyIG9wdGltaXphdGlvbnMuCglTZWU6IGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL3Jlc29sdmluZ19sZXhlcl9lcnJvcnMuaHRtbCNSRUdFWFBfUEFSU0lORyBmb3IgZGV0YWlscy5gKSxJZyhgJHtueH0KCUZhaWxlZCBwYXJzaW5nOiA8ICR7dC50b1N0cmluZygpfSA+CglVc2luZyB0aGUgQGNoZXZyb3RhaW4vcmVnZXhwLXRvLWFzdCBsaWJyYXJ5CglQbGVhc2Ugb3BlbiBhbiBpc3N1ZSBhdDogaHR0cHM6Ly9naXRodWIuY29tL2NoZXZyb3RhaW4vY2hldnJvdGFpbi9pc3N1ZXNgK24pfX1yZXR1cm5bXX1mdW5jdGlvbiBUTih0LGUscil7c3dpdGNoKHQudHlwZSl7Y2FzZSJEaXNqdW5jdGlvbiI6Zm9yKGxldCBpPTA7aTx0LnZhbHVlLmxlbmd0aDtpKyspVE4odC52YWx1ZVtpXSxlLHIpO2JyZWFrO2Nhc2UiQWx0ZXJuYXRpdmUiOmxldCBuPXQudmFsdWU7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspe2xldCBhPW5baV07c3dpdGNoKGEudHlwZSl7Y2FzZSJFbmRBbmNob3IiOmNhc2UiR3JvdXBCYWNrUmVmZXJlbmNlIjpjYXNlIkxvb2thaGVhZCI6Y2FzZSJOZWdhdGl2ZUxvb2thaGVhZCI6Y2FzZSJTdGFydEFuY2hvciI6Y2FzZSJXb3JkQm91bmRhcnkiOmNhc2UiTm9uV29yZEJvdW5kYXJ5Ijpjb250aW51ZX1sZXQgcz1hO3N3aXRjaChzLnR5cGUpe2Nhc2UiQ2hhcmFjdGVyIjpSayhzLnZhbHVlLGUscik7YnJlYWs7Y2FzZSJTZXQiOmlmKHMuY29tcGxlbWVudD09PSEwKXRocm93IEVycm9yKEZhZSk7QWUocy52YWx1ZSx1PT57aWYodHlwZW9mIHU9PSJudW1iZXIiKVJrKHUsZSxyKTtlbHNle2xldCBoPXU7aWYocj09PSEwKWZvcihsZXQgZj1oLmZyb207Zjw9aC50bztmKyspUmsoZixlLHIpO2Vsc2V7Zm9yKGxldCBmPWguZnJvbTtmPD1oLnRvJiZmPEZnO2YrKylSayhmLGUscik7aWYoaC50bz49Rmcpe2xldCBmPWguZnJvbT49Rmc/aC5mcm9tOkZnLGQ9aC50byxwPUljKGYpLG09SWMoZCk7Zm9yKGxldCBnPXA7Zzw9bTtnKyspZVtnXT1nfX19fSk7YnJlYWs7Y2FzZSJHcm91cCI6VE4ocy52YWx1ZSxlLHIpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoIk5vbiBFeGhhdXN0aXZlIE1hdGNoIil9bGV0IGw9cy5xdWFudGlmaWVyIT09dm9pZCAwJiZzLnF1YW50aWZpZXIuYXRMZWFzdD09PTA7aWYocy50eXBlPT09Ikdyb3VwIiYma04ocyk9PT0hMXx8cy50eXBlIT09Ikdyb3VwIiYmbD09PSExKWJyZWFrfWJyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoIm5vbiBleGhhdXN0aXZlIG1hdGNoISIpfXJldHVybiBicihlKX1mdW5jdGlvbiBSayh0LGUscil7bGV0IG49SWModCk7ZVtuXT1uLHI9PT0hMCYma1BlKHQsZSl9ZnVuY3Rpb24ga1BlKHQsZSl7bGV0IHI9U3RyaW5nLmZyb21DaGFyQ29kZSh0KSxuPXIudG9VcHBlckNhc2UoKTtpZihuIT09cil7bGV0IGk9SWMobi5jaGFyQ29kZUF0KDApKTtlW2ldPWl9ZWxzZXtsZXQgaT1yLnRvTG93ZXJDYXNlKCk7aWYoaSE9PXIpe2xldCBhPUljKGkuY2hhckNvZGVBdCgwKSk7ZVthXT1hfX19ZnVuY3Rpb24gQmFlKHQsZSl7cmV0dXJuIG5zKHQudmFsdWUscj0+e2lmKHR5cGVvZiByPT0ibnVtYmVyIilyZXR1cm4gcW4oZSxyKTt7bGV0IG49cjtyZXR1cm4gbnMoZSxpPT5uLmZyb208PWkmJmk8PW4udG8pIT09dm9pZCAwfX0pfWZ1bmN0aW9uIGtOKHQpe2xldCBlPXQucXVhbnRpZmllcjtyZXR1cm4gZSYmZS5hdExlYXN0PT09MD8hMDp0LnZhbHVlP1B0KHQudmFsdWUpP01hKHQudmFsdWUsa04pOmtOKHQudmFsdWUpOiExfWZ1bmN0aW9uIE5rKHQsZSl7aWYoZSBpbnN0YW5jZW9mIFJlZ0V4cCl7bGV0IHI9QmcoZSksbj1uZXcgRU4odCk7cmV0dXJuIG4udmlzaXQociksbi5mb3VuZH1lbHNlIHJldHVybiBucyhlLHI9PnFuKHQsci5jaGFyQ29kZUF0KDApKSkhPT12b2lkIDB9dmFyIEZhZSxueCxFTix6YWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtqMigpO3F0KCk7T2coKTtMaygpO1NOKCk7RmFlPSJDb21wbGVtZW50IFNldHMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIGZpcnN0IGNoYXIgb3B0aW1pemF0aW9uIixueD1gVW5hYmxlIHRvIHVzZSAiZmlyc3QgY2hhciIgbGV4ZXIgb3B0aW1pemF0aW9uczoKYDtvKCRhZSwiZ2V0T3B0aW1pemVkU3RhcnRDb2Rlc0luZGljZXMiKTtvKFROLCJmaXJzdENoYXJPcHRpbWl6ZWRJbmRpY2VzIik7byhSaywiYWRkT3B0aW1pemVkSWR4VG9SZXN1bHQiKTtvKGtQZSwiaGFuZGxlSWdub3JlQ2FzZSIpO28oQmFlLCJmaW5kQ29kZSIpO28oa04sImlzV2hvbGVPcHRpb25hbCIpO0VOPWNsYXNzIGV4dGVuZHMgTWN7c3RhdGlje28odGhpcywiQ2hhckNvZGVGaW5kZXIiKX1jb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMudGFyZ2V0Q2hhckNvZGVzPWUsdGhpcy5mb3VuZD0hMX12aXNpdENoaWxkcmVuKGUpe2lmKHRoaXMuZm91bmQhPT0hMCl7c3dpdGNoKGUudHlwZSl7Y2FzZSJMb29rYWhlYWQiOnRoaXMudmlzaXRMb29rYWhlYWQoZSk7cmV0dXJuO2Nhc2UiTmVnYXRpdmVMb29rYWhlYWQiOnRoaXMudmlzaXROZWdhdGl2ZUxvb2thaGVhZChlKTtyZXR1cm59c3VwZXIudmlzaXRDaGlsZHJlbihlKX19dmlzaXRDaGFyYWN0ZXIoZSl7cW4odGhpcy50YXJnZXRDaGFyQ29kZXMsZS52YWx1ZSkmJih0aGlzLmZvdW5kPSEwKX12aXNpdFNldChlKXtlLmNvbXBsZW1lbnQ/QmFlKGUsdGhpcy50YXJnZXRDaGFyQ29kZXMpPT09dm9pZCAwJiYodGhpcy5mb3VuZD0hMCk6QmFlKGUsdGhpcy50YXJnZXRDaGFyQ29kZXMpIT09dm9pZCAwJiYodGhpcy5mb3VuZD0hMCl9fTtvKE5rLCJjYW5NYXRjaENoYXJDb2RlIil9KTtmdW5jdGlvbiBVYWUodCxlKXtlPVFoKGUse3VzZVN0aWNreTpBTixkZWJ1ZzohMSxzYWZlTW9kZTohMSxwb3NpdGlvblRyYWNraW5nOiJmdWxsIixsaW5lVGVybWluYXRvckNoYXJhY3RlcnM6WyJcciIsYApgXSx0cmFjZXI6bygoYix3KT0+dygpLCJ0cmFjZXIiKX0pO2xldCByPWUudHJhY2VyO3IoImluaXRDaGFyQ29kZVRvT3B0aW1pemVkSW5kZXhNYXAiLCgpPT57R1BlKCl9KTtsZXQgbjtyKCJSZWplY3QgTGV4ZXIuTkEiLCgpPT57bj1KaCh0LGI9PmJbbHBdPT09WG4uTkEpfSk7bGV0IGk9ITEsYTtyKCJUcmFuc2Zvcm0gUGF0dGVybnMiLCgpPT57aT0hMSxhPUplKG4sYj0+e2xldCB3PWJbbHBdO2lmKHpvKHcpKXtsZXQgQz13LnNvdXJjZTtyZXR1cm4gQy5sZW5ndGg9PT0xJiZDIT09Il4iJiZDIT09IiQiJiZDIT09Ii4iJiYhdy5pZ25vcmVDYXNlP0M6Qy5sZW5ndGg9PT0yJiZDWzBdPT09IlxcIiYmIXFuKFsiZCIsIkQiLCJzIiwiUyIsInQiLCJyIiwibiIsInQiLCIwIiwiYyIsImIiLCJCIiwiZiIsInYiLCJ3IiwiVyJdLENbMV0pP0NbMV06ZS51c2VTdGlja3k/VmFlKHcpOkdhZSh3KX1lbHNle2lmKFNpKHcpKXJldHVybiBpPSEwLHtleGVjOnd9O2lmKHR5cGVvZiB3PT0ib2JqZWN0IilyZXR1cm4gaT0hMCx3O2lmKHR5cGVvZiB3PT0ic3RyaW5nIil7aWYody5sZW5ndGg9PT0xKXJldHVybiB3O3tsZXQgQz13LnJlcGxhY2UoL1tcXF4kLiorPygpW1xde318XS9nLCJcXCQmIiksVD1uZXcgUmVnRXhwKEMpO3JldHVybiBlLnVzZVN0aWNreT9WYWUoVCk6R2FlKFQpfX1lbHNlIHRocm93IEVycm9yKCJub24gZXhoYXVzdGl2ZSBtYXRjaCIpfX0pfSk7bGV0IHMsbCx1LGgsZjtyKCJtaXNjIG1hcHBpbmciLCgpPT57cz1KZShuLGI9PmIudG9rZW5UeXBlSWR4KSxsPUplKG4sYj0+e2xldCB3PWIuR1JPVVA7aWYodyE9PVhuLlNLSVBQRUQpe2lmKHlpKHcpKXJldHVybiB3O2lmKHByKHcpKXJldHVybiExO3Rocm93IEVycm9yKCJub24gZXhoYXVzdGl2ZSBtYXRjaCIpfX0pLHU9SmUobixiPT57bGV0IHc9Yi5MT05HRVJfQUxUO2lmKHcpcmV0dXJuIFB0KHcpP0plKHcsVD0+VVQobixUKSk6W1VUKG4sdyldfSksaD1KZShuLGI9PmIuUFVTSF9NT0RFKSxmPUplKG4sYj0+QnQoYiwiUE9QX01PREUiKSl9KTtsZXQgZDtyKCJMaW5lIFRlcm1pbmF0b3IgSGFuZGxpbmciLCgpPT57bGV0IGI9UWFlKGUubGluZVRlcm1pbmF0b3JDaGFyYWN0ZXJzKTtkPUplKG4sdz0+ITEpLGUucG9zaXRpb25UcmFja2luZyE9PSJvbmx5T2Zmc2V0IiYmKGQ9SmUobix3PT5CdCh3LCJMSU5FX0JSRUFLUyIpPyEhdy5MSU5FX0JSRUFLUzpLYWUodyxiKT09PSExJiZOayhiLHcuUEFUVEVSTikpKX0pO2xldCBwLG0sZyx5O3IoIk1pc2MgTWFwcGluZyAjMiIsKCk9PntwPUplKG4sWGFlKSxtPUplKGEsJFBlKSxnPVhyKG4sKGIsdyk9PntsZXQgQz13LkdST1VQO3JldHVybiB5aShDKSYmQyE9PVhuLlNLSVBQRUQmJihiW0NdPVtdKSxifSx7fSkseT1KZShhLChiLHcpPT4oe3BhdHRlcm46YVt3XSxsb25nZXJBbHQ6dVt3XSxjYW5MaW5lVGVybWluYXRvcjpkW3ddLGlzQ3VzdG9tOnBbd10sc2hvcnQ6bVt3XSxncm91cDpsW3ddLHB1c2g6aFt3XSxwb3A6Zlt3XSx0b2tlblR5cGVJZHg6c1t3XSx0b2tlblR5cGU6blt3XX0pKX0pO2xldCB2PSEwLHg9W107cmV0dXJuIGUuc2FmZU1vZGV8fHIoIkZpcnN0IENoYXIgT3B0aW1pemF0aW9uIiwoKT0+e3g9WHIobiwoYix3LEMpPT57aWYodHlwZW9mIHcuUEFUVEVSTj09InN0cmluZyIpe2xldCBUPXcuUEFUVEVSTi5jaGFyQ29kZUF0KDApLEU9SWMoVCk7Q04oYixFLHlbQ10pfWVsc2UgaWYoUHQody5TVEFSVF9DSEFSU19ISU5UKSl7bGV0IFQ7QWUody5TVEFSVF9DSEFSU19ISU5ULEU9PntsZXQgQT10eXBlb2YgRT09InN0cmluZyI/RS5jaGFyQ29kZUF0KDApOkUsUz1JYyhBKTtUIT09UyYmKFQ9UyxDTihiLFMseVtDXSkpfSl9ZWxzZSBpZih6byh3LlBBVFRFUk4pKWlmKHcuUEFUVEVSTi51bmljb2RlKXY9ITEsZS5lbnN1cmVPcHRpbWl6YXRpb25zJiZJZyhgJHtueH0JVW5hYmxlIHRvIGFuYWx5emUgPCAke3cuUEFUVEVSTi50b1N0cmluZygpfSA+IHBhdHRlcm4uCglUaGUgcmVnZXhwIHVuaWNvZGUgZmxhZyBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZCBieSB0aGUgcmVnZXhwLXRvLWFzdCBsaWJyYXJ5LgoJVGhpcyB3aWxsIGRpc2FibGUgdGhlIGxleGVyJ3MgZmlyc3QgY2hhciBvcHRpbWl6YXRpb25zLgoJRm9yIGRldGFpbHMgU2VlOiBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9ndWlkZS9yZXNvbHZpbmdfbGV4ZXJfZXJyb3JzLmh0bWwjVU5JQ09ERV9PUFRJTUlaRWApO2Vsc2V7bGV0IFQ9JGFlKHcuUEFUVEVSTixlLmVuc3VyZU9wdGltaXphdGlvbnMpO3VyKFQpJiYodj0hMSksQWUoVCxFPT57Q04oYixFLHlbQ10pfSl9ZWxzZSBlLmVuc3VyZU9wdGltaXphdGlvbnMmJklnKGAke254fQlUb2tlblR5cGU6IDwke3cubmFtZX0+IGlzIHVzaW5nIGEgY3VzdG9tIHRva2VuIHBhdHRlcm4gd2l0aG91dCBwcm92aWRpbmcgPHN0YXJ0X2NoYXJzX2hpbnQ+IHBhcmFtZXRlci4KCVRoaXMgd2lsbCBkaXNhYmxlIHRoZSBsZXhlcidzIGZpcnN0IGNoYXIgb3B0aW1pemF0aW9ucy4KCUZvciBkZXRhaWxzIFNlZTogaHR0cHM6Ly9jaGV2cm90YWluLmlvL2RvY3MvZ3VpZGUvcmVzb2x2aW5nX2xleGVyX2Vycm9ycy5odG1sI0NVU1RPTV9PUFRJTUlaRWApLHY9ITE7cmV0dXJuIGJ9LFtdKX0pLHtlbXB0eUdyb3VwczpnLHBhdHRlcm5JZHhUb0NvbmZpZzp5LGNoYXJDb2RlVG9QYXR0ZXJuSWR4VG9Db25maWc6eCxoYXNDdXN0b206aSxjYW5CZU9wdGltaXplZDp2fX1mdW5jdGlvbiBIYWUodCxlKXtsZXQgcj1bXSxuPVNQZSh0KTtyPXIuY29uY2F0KG4uZXJyb3JzKTtsZXQgaT1DUGUobi52YWxpZCksYT1pLnZhbGlkO3JldHVybiByPXIuY29uY2F0KGkuZXJyb3JzKSxyPXIuY29uY2F0KEVQZShhKSkscj1yLmNvbmNhdChJUGUoYSkpLHI9ci5jb25jYXQoT1BlKGEsZSkpLHI9ci5jb25jYXQoUFBlKGEpKSxyfWZ1bmN0aW9uIEVQZSh0KXtsZXQgZT1bXSxyPVlyKHQsbj0+em8obltscF0pKTtyZXR1cm4gZT1lLmNvbmNhdChfUGUocikpLGU9ZS5jb25jYXQoUlBlKHIpKSxlPWUuY29uY2F0KE5QZShyKSksZT1lLmNvbmNhdChNUGUocikpLGU9ZS5jb25jYXQoRFBlKHIpKSxlfWZ1bmN0aW9uIFNQZSh0KXtsZXQgZT1Zcih0LGk9PiFCdChpLGxwKSkscj1KZShlLGk9Pih7bWVzc2FnZToiVG9rZW4gVHlwZTogLT4iK2kubmFtZSsiPC0gbWlzc2luZyBzdGF0aWMgJ1BBVFRFUk4nIHByb3BlcnR5Iix0eXBlOlluLk1JU1NJTkdfUEFUVEVSTix0b2tlblR5cGVzOltpXX0pKSxuPVpoKHQsZSk7cmV0dXJue2Vycm9yczpyLHZhbGlkOm59fWZ1bmN0aW9uIENQZSh0KXtsZXQgZT1Zcih0LGk9PntsZXQgYT1pW2xwXTtyZXR1cm4hem8oYSkmJiFTaShhKSYmIUJ0KGEsImV4ZWMiKSYmIXlpKGEpfSkscj1KZShlLGk9Pih7bWVzc2FnZToiVG9rZW4gVHlwZTogLT4iK2kubmFtZSsiPC0gc3RhdGljICdQQVRURVJOJyBjYW4gb25seSBiZSBhIFJlZ0V4cCwgYSBGdW5jdGlvbiBtYXRjaGluZyB0aGUge0N1c3RvbVBhdHRlcm5NYXRjaGVyRnVuY30gdHlwZSBvciBhbiBPYmplY3QgbWF0Y2hpbmcgdGhlIHtJQ3VzdG9tUGF0dGVybn0gaW50ZXJmYWNlLiIsdHlwZTpZbi5JTlZBTElEX1BBVFRFUk4sdG9rZW5UeXBlczpbaV19KSksbj1aaCh0LGUpO3JldHVybntlcnJvcnM6cix2YWxpZDpufX1mdW5jdGlvbiBfUGUodCl7Y2xhc3MgZSBleHRlbmRzIE1je3N0YXRpY3tvKHRoaXMsIkVuZEFuY2hvckZpbmRlciIpfWNvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmZvdW5kPSExfXZpc2l0RW5kQW5jaG9yKGEpe3RoaXMuZm91bmQ9ITB9fWxldCByPVlyKHQsaT0+e2xldCBhPWkuUEFUVEVSTjt0cnl7bGV0IHM9QmcoYSksbD1uZXcgZTtyZXR1cm4gbC52aXNpdChzKSxsLmZvdW5kfWNhdGNoe3JldHVybiBBUGUudGVzdChhLnNvdXJjZSl9fSk7cmV0dXJuIEplKHIsaT0+KHttZXNzYWdlOmBVbmV4cGVjdGVkIFJlZ0V4cCBBbmNob3IgRXJyb3I6CglUb2tlbiBUeXBlOiAtPmAraS5uYW1lK2A8LSBzdGF0aWMgJ1BBVFRFUk4nIGNhbm5vdCBjb250YWluIGVuZCBvZiBpbnB1dCBhbmNob3IgJyQnCglTZWUgY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL3Jlc29sdmluZ19sZXhlcl9lcnJvcnMuaHRtbCNBTkNIT1JTCWZvciBkZXRhaWxzLmAsdHlwZTpZbi5FT0lfQU5DSE9SX0ZPVU5ELHRva2VuVHlwZXM6W2ldfSkpfWZ1bmN0aW9uIERQZSh0KXtsZXQgZT1Zcih0LG49Pm4uUEFUVEVSTi50ZXN0KCIiKSk7cmV0dXJuIEplKGUsbj0+KHttZXNzYWdlOiJUb2tlbiBUeXBlOiAtPiIrbi5uYW1lKyI8LSBzdGF0aWMgJ1BBVFRFUk4nIG11c3Qgbm90IG1hdGNoIGFuIGVtcHR5IHN0cmluZyIsdHlwZTpZbi5FTVBUWV9NQVRDSF9QQVRURVJOLHRva2VuVHlwZXM6W25dfSkpfWZ1bmN0aW9uIFJQZSh0KXtjbGFzcyBlIGV4dGVuZHMgTWN7c3RhdGlje28odGhpcywiU3RhcnRBbmNob3JGaW5kZXIiKX1jb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5mb3VuZD0hMX12aXNpdFN0YXJ0QW5jaG9yKGEpe3RoaXMuZm91bmQ9ITB9fWxldCByPVlyKHQsaT0+e2xldCBhPWkuUEFUVEVSTjt0cnl7bGV0IHM9QmcoYSksbD1uZXcgZTtyZXR1cm4gbC52aXNpdChzKSxsLmZvdW5kfWNhdGNoe3JldHVybiBMUGUudGVzdChhLnNvdXJjZSl9fSk7cmV0dXJuIEplKHIsaT0+KHttZXNzYWdlOmBVbmV4cGVjdGVkIFJlZ0V4cCBBbmNob3IgRXJyb3I6CglUb2tlbiBUeXBlOiAtPmAraS5uYW1lK2A8LSBzdGF0aWMgJ1BBVFRFUk4nIGNhbm5vdCBjb250YWluIHN0YXJ0IG9mIGlucHV0IGFuY2hvciAnXicKCVNlZSBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9ndWlkZS9yZXNvbHZpbmdfbGV4ZXJfZXJyb3JzLmh0bWwjQU5DSE9SUwlmb3IgZGV0YWlscy5gLHR5cGU6WW4uU09JX0FOQ0hPUl9GT1VORCx0b2tlblR5cGVzOltpXX0pKX1mdW5jdGlvbiBOUGUodCl7bGV0IGU9WXIodCxuPT57bGV0IGk9bltscF07cmV0dXJuIGkgaW5zdGFuY2VvZiBSZWdFeHAmJihpLm11bHRpbGluZXx8aS5nbG9iYWwpfSk7cmV0dXJuIEplKGUsbj0+KHttZXNzYWdlOiJUb2tlbiBUeXBlOiAtPiIrbi5uYW1lKyI8LSBzdGF0aWMgJ1BBVFRFUk4nIG1heSBOT1QgY29udGFpbiBnbG9iYWwoJ2cnKSBvciBtdWx0aWxpbmUoJ20nKSIsdHlwZTpZbi5VTlNVUFBPUlRFRF9GTEFHU19GT1VORCx0b2tlblR5cGVzOltuXX0pKX1mdW5jdGlvbiBNUGUodCl7bGV0IGU9W10scj1KZSh0LGE9PlhyKHQsKHMsbCk9PihhLlBBVFRFUk4uc291cmNlPT09bC5QQVRURVJOLnNvdXJjZSYmIXFuKGUsbCkmJmwuUEFUVEVSTiE9PVhuLk5BJiYoZS5wdXNoKGwpLHMucHVzaChsKSkscyksW10pKTtyPVRjKHIpO2xldCBuPVlyKHIsYT0+YS5sZW5ndGg+MSk7cmV0dXJuIEplKG4sYT0+e2xldCBzPUplKGEsdT0+dS5uYW1lKTtyZXR1cm57bWVzc2FnZTpgVGhlIHNhbWUgUmVnRXhwIHBhdHRlcm4gLT4ke2lhKGEpLlBBVFRFUk59PC1oYXMgYmVlbiB1c2VkIGluIGFsbCBvZiB0aGUgZm9sbG93aW5nIFRva2VuIFR5cGVzOiAke3Muam9pbigiLCAiKX0gPC1gLHR5cGU6WW4uRFVQTElDQVRFX1BBVFRFUk5TX0ZPVU5ELHRva2VuVHlwZXM6YX19KX1mdW5jdGlvbiBJUGUodCl7bGV0IGU9WXIodCxuPT57aWYoIUJ0KG4sIkdST1VQIikpcmV0dXJuITE7bGV0IGk9bi5HUk9VUDtyZXR1cm4gaSE9PVhuLlNLSVBQRUQmJmkhPT1Ybi5OQSYmIXlpKGkpfSk7cmV0dXJuIEplKGUsbj0+KHttZXNzYWdlOiJUb2tlbiBUeXBlOiAtPiIrbi5uYW1lKyI8LSBzdGF0aWMgJ0dST1VQJyBjYW4gb25seSBiZSBMZXhlci5TS0lQUEVEL0xleGVyLk5BL0EgU3RyaW5nIix0eXBlOlluLklOVkFMSURfR1JPVVBfVFlQRV9GT1VORCx0b2tlblR5cGVzOltuXX0pKX1mdW5jdGlvbiBPUGUodCxlKXtsZXQgcj1Zcih0LGk9PmkuUFVTSF9NT0RFIT09dm9pZCAwJiYhcW4oZSxpLlBVU0hfTU9ERSkpO3JldHVybiBKZShyLGk9Pih7bWVzc2FnZTpgVG9rZW4gVHlwZTogLT4ke2kubmFtZX08LSBzdGF0aWMgJ1BVU0hfTU9ERScgdmFsdWUgY2Fubm90IHJlZmVyIHRvIGEgTGV4ZXIgTW9kZSAtPiR7aS5QVVNIX01PREV9PC13aGljaCBkb2VzIG5vdCBleGlzdGAsdHlwZTpZbi5QVVNIX01PREVfRE9FU19OT1RfRVhJU1QsdG9rZW5UeXBlczpbaV19KSl9ZnVuY3Rpb24gUFBlKHQpe2xldCBlPVtdLHI9WHIodCwobixpLGEpPT57bGV0IHM9aS5QQVRURVJOO3JldHVybiBzPT09WG4uTkF8fCh5aShzKT9uLnB1c2goe3N0cjpzLGlkeDphLHRva2VuVHlwZTppfSk6em8ocykmJkZQZShzKSYmbi5wdXNoKHtzdHI6cy5zb3VyY2UsaWR4OmEsdG9rZW5UeXBlOml9KSksbn0sW10pO3JldHVybiBBZSh0LChuLGkpPT57QWUociwoe3N0cjphLGlkeDpzLHRva2VuVHlwZTpsfSk9PntpZihpPHMmJkJQZShhLG4uUEFUVEVSTikpe2xldCB1PWBUb2tlbjogLT4ke2wubmFtZX08LSBjYW4gbmV2ZXIgYmUgbWF0Y2hlZC4KQmVjYXVzZSBpdCBhcHBlYXJzIEFGVEVSIHRoZSBUb2tlbiBUeXBlIC0+JHtuLm5hbWV9PC1pbiB0aGUgbGV4ZXIncyBkZWZpbml0aW9uLgpTZWUgaHR0cHM6Ly9jaGV2cm90YWluLmlvL2RvY3MvZ3VpZGUvcmVzb2x2aW5nX2xleGVyX2Vycm9ycy5odG1sI1VOUkVBQ0hBQkxFYDtlLnB1c2goe21lc3NhZ2U6dSx0eXBlOlluLlVOUkVBQ0hBQkxFX1BBVFRFUk4sdG9rZW5UeXBlczpbbixsXX0pfX0pfSksZX1mdW5jdGlvbiBCUGUodCxlKXtpZih6byhlKSl7bGV0IHI9ZS5leGVjKHQpO3JldHVybiByIT09bnVsbCYmci5pbmRleD09PTB9ZWxzZXtpZihTaShlKSlyZXR1cm4gZSh0LDAsW10se30pO2lmKEJ0KGUsImV4ZWMiKSlyZXR1cm4gZS5leGVjKHQsMCxbXSx7fSk7aWYodHlwZW9mIGU9PSJzdHJpbmciKXJldHVybiBlPT09dDt0aHJvdyBFcnJvcigibm9uIGV4aGF1c3RpdmUgbWF0Y2giKX19ZnVuY3Rpb24gRlBlKHQpe3JldHVybiBucyhbIi4iLCJcXCIsIlsiLCJdIiwifCIsIl4iLCIkIiwiKCIsIikiLCI/IiwiKiIsIisiLCJ7Il0scj0+dC5zb3VyY2UuaW5kZXhPZihyKSE9PS0xKT09PXZvaWQgMH1mdW5jdGlvbiBHYWUodCl7bGV0IGU9dC5pZ25vcmVDYXNlPyJpIjoiIjtyZXR1cm4gbmV3IFJlZ0V4cChgXig/OiR7dC5zb3VyY2V9KWAsZSl9ZnVuY3Rpb24gVmFlKHQpe2xldCBlPXQuaWdub3JlQ2FzZT8iaXkiOiJ5IjtyZXR1cm4gbmV3IFJlZ0V4cChgJHt0LnNvdXJjZX1gLGUpfWZ1bmN0aW9uIFdhZSh0LGUscil7bGV0IG49W107cmV0dXJuIEJ0KHQsJGcpfHxuLnB1c2goe21lc3NhZ2U6IkEgTXVsdGlNb2RlIExleGVyIGNhbm5vdCBiZSBpbml0aWFsaXplZCB3aXRob3V0IGEgPCIrJGcrYD4gcHJvcGVydHkgaW4gaXRzIGRlZmluaXRpb24KYCx0eXBlOlluLk1VTFRJX01PREVfTEVYRVJfV0lUSE9VVF9ERUZBVUxUX01PREV9KSxCdCh0LE1rKXx8bi5wdXNoKHttZXNzYWdlOiJBIE11bHRpTW9kZSBMZXhlciBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQgd2l0aG91dCBhIDwiK01rK2A+IHByb3BlcnR5IGluIGl0cyBkZWZpbml0aW9uCmAsdHlwZTpZbi5NVUxUSV9NT0RFX0xFWEVSX1dJVEhPVVRfTU9ERVNfUFJPUEVSVFl9KSxCdCh0LE1rKSYmQnQodCwkZykmJiFCdCh0Lm1vZGVzLHQuZGVmYXVsdE1vZGUpJiZuLnB1c2goe21lc3NhZ2U6YEEgTXVsdGlNb2RlIExleGVyIGNhbm5vdCBiZSBpbml0aWFsaXplZCB3aXRoIGEgJHskZ306IDwke3QuZGVmYXVsdE1vZGV9PndoaWNoIGRvZXMgbm90IGV4aXN0CmAsdHlwZTpZbi5NVUxUSV9NT0RFX0xFWEVSX0RFRkFVTFRfTU9ERV9WQUxVRV9ET0VTX05PVF9FWElTVH0pLEJ0KHQsTWspJiZBZSh0Lm1vZGVzLChpLGEpPT57QWUoaSwocyxsKT0+e2lmKHByKHMpKW4ucHVzaCh7bWVzc2FnZTpgQSBMZXhlciBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQgdXNpbmcgYW4gdW5kZWZpbmVkIFRva2VuIFR5cGUuIE1vZGU6PCR7YX0+IGF0IGluZGV4OiA8JHtsfT4KYCx0eXBlOlluLkxFWEVSX0RFRklOSVRJT05fQ0FOTk9UX0NPTlRBSU5fVU5ERUZJTkVEfSk7ZWxzZSBpZihCdChzLCJMT05HRVJfQUxUIikpe2xldCB1PVB0KHMuTE9OR0VSX0FMVCk/cy5MT05HRVJfQUxUOltzLkxPTkdFUl9BTFRdO0FlKHUsaD0+eyFwcihoKSYmIXFuKGksaCkmJm4ucHVzaCh7bWVzc2FnZTpgQSBNdWx0aU1vZGUgTGV4ZXIgY2Fubm90IGJlIGluaXRpYWxpemVkIHdpdGggYSBsb25nZXJfYWx0IDwke2gubmFtZX0+IG9uIHRva2VuIDwke3MubmFtZX0+IG91dHNpZGUgb2YgbW9kZSA8JHthfT4KYCx0eXBlOlluLk1VTFRJX01PREVfTEVYRVJfTE9OR0VSX0FMVF9OT1RfSU5fQ1VSUkVOVF9NT0RFfSl9KX19KX0pLG59ZnVuY3Rpb24gcWFlKHQsZSxyKXtsZXQgbj1bXSxpPSExLGE9VGMocXIoYnIodC5tb2RlcykpKSxzPUpoKGEsdT0+dVtscF09PT1Ybi5OQSksbD1RYWUocik7cmV0dXJuIGUmJkFlKHMsdT0+e2xldCBoPUthZSh1LGwpO2lmKGghPT0hMSl7bGV0IGQ9e21lc3NhZ2U6elBlKHUsaCksdHlwZTpoLmlzc3VlLHRva2VuVHlwZTp1fTtuLnB1c2goZCl9ZWxzZSBCdCh1LCJMSU5FX0JSRUFLUyIpP3UuTElORV9CUkVBS1M9PT0hMCYmKGk9ITApOk5rKGwsdS5QQVRURVJOKSYmKGk9ITApfSksZSYmIWkmJm4ucHVzaCh7bWVzc2FnZTpgV2FybmluZzogTm8gTElORV9CUkVBS1MgRm91bmQuCglUaGlzIExleGVyIGhhcyBiZWVuIGRlZmluZWQgdG8gdHJhY2sgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uLAoJQnV0IG5vbmUgb2YgdGhlIFRva2VuIFR5cGVzIGNhbiBiZSBpZGVudGlmaWVkIGFzIG1hdGNoaW5nIGEgbGluZSB0ZXJtaW5hdG9yLgoJU2VlIGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL3Jlc29sdmluZ19sZXhlcl9lcnJvcnMuaHRtbCNMSU5FX0JSRUFLUyAKCWZvciBkZXRhaWxzLmAsdHlwZTpZbi5OT19MSU5FX0JSRUFLU19GTEFHU30pLG59ZnVuY3Rpb24gWWFlKHQpe2xldCBlPXt9LHI9enIodCk7cmV0dXJuIEFlKHIsbj0+e2xldCBpPXRbbl07aWYoUHQoaSkpZVtuXT1bXTtlbHNlIHRocm93IEVycm9yKCJub24gZXhoYXVzdGl2ZSBtYXRjaCIpfSksZX1mdW5jdGlvbiBYYWUodCl7bGV0IGU9dC5QQVRURVJOO2lmKHpvKGUpKXJldHVybiExO2lmKFNpKGUpKXJldHVybiEwO2lmKEJ0KGUsImV4ZWMiKSlyZXR1cm4hMDtpZih5aShlKSlyZXR1cm4hMTt0aHJvdyBFcnJvcigibm9uIGV4aGF1c3RpdmUgbWF0Y2giKX1mdW5jdGlvbiAkUGUodCl7cmV0dXJuIHlpKHQpJiZ0Lmxlbmd0aD09PTE/dC5jaGFyQ29kZUF0KDApOiExfWZ1bmN0aW9uIEthZSh0LGUpe2lmKEJ0KHQsIkxJTkVfQlJFQUtTIikpcmV0dXJuITE7aWYoem8odC5QQVRURVJOKSl7dHJ5e05rKGUsdC5QQVRURVJOKX1jYXRjaChyKXtyZXR1cm57aXNzdWU6WW4uSURFTlRJRllfVEVSTUlOQVRPUixlcnJNc2c6ci5tZXNzYWdlfX1yZXR1cm4hMX1lbHNle2lmKHlpKHQuUEFUVEVSTikpcmV0dXJuITE7aWYoWGFlKHQpKXJldHVybntpc3N1ZTpZbi5DVVNUT01fTElORV9CUkVBS307dGhyb3cgRXJyb3IoIm5vbiBleGhhdXN0aXZlIG1hdGNoIil9fWZ1bmN0aW9uIHpQZSh0LGUpe2lmKGUuaXNzdWU9PT1Zbi5JREVOVElGWV9URVJNSU5BVE9SKXJldHVybmBXYXJuaW5nOiB1bmFibGUgdG8gaWRlbnRpZnkgbGluZSB0ZXJtaW5hdG9yIHVzYWdlIGluIHBhdHRlcm4uCglUaGUgcHJvYmxlbSBpcyBpbiB0aGUgPCR7dC5uYW1lfT4gVG9rZW4gVHlwZQoJIFJvb3QgY2F1c2U6ICR7ZS5lcnJNc2d9LgoJRm9yIGRldGFpbHMgU2VlOiBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9ndWlkZS9yZXNvbHZpbmdfbGV4ZXJfZXJyb3JzLmh0bWwjSURFTlRJRllfVEVSTUlOQVRPUmA7aWYoZS5pc3N1ZT09PVluLkNVU1RPTV9MSU5FX0JSRUFLKXJldHVybmBXYXJuaW5nOiBBIEN1c3RvbSBUb2tlbiBQYXR0ZXJuIHNob3VsZCBzcGVjaWZ5IHRoZSA8bGluZV9icmVha3M+IG9wdGlvbi4KCVRoZSBwcm9ibGVtIGlzIGluIHRoZSA8JHt0Lm5hbWV9PiBUb2tlbiBUeXBlCglGb3IgZGV0YWlscyBTZWU6IGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL3Jlc29sdmluZ19sZXhlcl9lcnJvcnMuaHRtbCNDVVNUT01fTElORV9CUkVBS2A7dGhyb3cgRXJyb3IoIm5vbiBleGhhdXN0aXZlIG1hdGNoIil9ZnVuY3Rpb24gUWFlKHQpe3JldHVybiBKZSh0LHI9PnlpKHIpP3IuY2hhckNvZGVBdCgwKTpyKX1mdW5jdGlvbiBDTih0LGUscil7dFtlXT09PXZvaWQgMD90W2VdPVtyXTp0W2VdLnB1c2gocil9ZnVuY3Rpb24gSWModCl7cmV0dXJuIHQ8Rmc/dDpJa1t0XX1mdW5jdGlvbiBHUGUoKXtpZih1cihJaykpe0lrPW5ldyBBcnJheSg2NTUzNik7Zm9yKGxldCB0PTA7dDw2NTUzNjt0KyspSWtbdF09dD4yNTU/MjU1K35+KHQvMjU1KTp0fX12YXIgbHAsJGcsTWssQU4sQVBlLExQZSxqYWUsRmcsSWssU049TigoKT0+eyJ1c2Ugc3RyaWN0IjtqMigpO2l4KCk7cXQoKTtPZygpO3phZSgpO0xrKCk7bHA9IlBBVFRFUk4iLCRnPSJkZWZhdWx0TW9kZSIsTWs9Im1vZGVzIixBTj10eXBlb2YgbmV3IFJlZ0V4cCgiKD86KSIpLnN0aWNreT09ImJvb2xlYW4iO28oVWFlLCJhbmFseXplVG9rZW5UeXBlcyIpO28oSGFlLCJ2YWxpZGF0ZVBhdHRlcm5zIik7byhFUGUsInZhbGlkYXRlUmVnRXhwUGF0dGVybiIpO28oU1BlLCJmaW5kTWlzc2luZ1BhdHRlcm5zIik7byhDUGUsImZpbmRJbnZhbGlkUGF0dGVybnMiKTtBUGU9L1teXFxdWyRdLztvKF9QZSwiZmluZEVuZE9mSW5wdXRBbmNob3IiKTtvKERQZSwiZmluZEVtcHR5TWF0Y2hSZWdFeHBzIik7TFBlPS9bXlxcW11bXF5dfF5cXi87byhSUGUsImZpbmRTdGFydE9mSW5wdXRBbmNob3IiKTtvKE5QZSwiZmluZFVuc3VwcG9ydGVkRmxhZ3MiKTtvKE1QZSwiZmluZER1cGxpY2F0ZVBhdHRlcm5zIik7byhJUGUsImZpbmRJbnZhbGlkR3JvdXBUeXBlIik7byhPUGUsImZpbmRNb2Rlc1RoYXREb05vdEV4aXN0Iik7byhQUGUsImZpbmRVbnJlYWNoYWJsZVBhdHRlcm5zIik7byhCUGUsInRlc3RUb2tlblR5cGUiKTtvKEZQZSwibm9NZXRhQ2hhciIpO28oR2FlLCJhZGRTdGFydE9mSW5wdXQiKTtvKFZhZSwiYWRkU3RpY2t5RmxhZyIpO28oV2FlLCJwZXJmb3JtUnVudGltZUNoZWNrcyIpO28ocWFlLCJwZXJmb3JtV2FybmluZ1J1bnRpbWVDaGVja3MiKTtvKFlhZSwiY2xvbmVFbXB0eUdyb3VwcyIpO28oWGFlLCJpc0N1c3RvbVBhdHRlcm4iKTtvKCRQZSwiaXNTaG9ydFBhdHRlcm4iKTtqYWU9e3Rlc3Q6byhmdW5jdGlvbih0KXtsZXQgZT10Lmxlbmd0aDtmb3IobGV0IHI9dGhpcy5sYXN0SW5kZXg7cjxlO3IrKyl7bGV0IG49dC5jaGFyQ29kZUF0KHIpO2lmKG49PT0xMClyZXR1cm4gdGhpcy5sYXN0SW5kZXg9cisxLCEwO2lmKG49PT0xMylyZXR1cm4gdC5jaGFyQ29kZUF0KHIrMSk9PT0xMD90aGlzLmxhc3RJbmRleD1yKzI6dGhpcy5sYXN0SW5kZXg9cisxLCEwfXJldHVybiExfSwidGVzdCIpLGxhc3RJbmRleDowfTtvKEthZSwiY2hlY2tMaW5lQnJlYWtzSXNzdWVzIik7byh6UGUsImJ1aWxkTGluZUJyZWFrSXNzdWVNZXNzYWdlIik7byhRYWUsImdldENoYXJDb2RlcyIpO28oQ04sImFkZFRvTWFwT2ZBcnJheXMiKTtGZz0yNTYsSWs9W107byhJYywiY2hhckNvZGVUb09wdGltaXplZEluZGV4Iik7byhHUGUsImluaXRDaGFyQ29kZVRvT3B0aW1pemVkSW5kZXhNYXAiKX0pO2Z1bmN0aW9uIFB1KHQsZSl7bGV0IHI9dC50b2tlblR5cGVJZHg7cmV0dXJuIHI9PT1lLnRva2VuVHlwZUlkeD8hMDplLmlzUGFyZW50PT09ITAmJmUuY2F0ZWdvcnlNYXRjaGVzTWFwW3JdPT09ITB9ZnVuY3Rpb24gemcodCxlKXtyZXR1cm4gdC50b2tlblR5cGVJZHg9PT1lLnRva2VuVHlwZUlkeH1mdW5jdGlvbiBCdSh0KXtsZXQgZT1WUGUodCk7VVBlKGUpLFdQZShlKSxIUGUoZSksQWUoZSxyPT57ci5pc1BhcmVudD1yLmNhdGVnb3J5TWF0Y2hlcy5sZW5ndGg+MH0pfWZ1bmN0aW9uIFZQZSh0KXtsZXQgZT1hbih0KSxyPXQsbj0hMDtmb3IoO247KXtyPVRjKHFyKEplKHIsYT0+YS5DQVRFR09SSUVTKSkpO2xldCBpPVpoKHIsZSk7ZT1lLmNvbmNhdChpKSx1cihpKT9uPSExOnI9aX1yZXR1cm4gZX1mdW5jdGlvbiBVUGUodCl7QWUodCxlPT57X04oZSl8fChlc2VbWmFlXT1lLGUudG9rZW5UeXBlSWR4PVphZSsrKSxKYWUoZSkmJiFQdChlLkNBVEVHT1JJRVMpJiYoZS5DQVRFR09SSUVTPVtlLkNBVEVHT1JJRVNdKSxKYWUoZSl8fChlLkNBVEVHT1JJRVM9W10pLHFQZShlKXx8KGUuY2F0ZWdvcnlNYXRjaGVzPVtdKSxZUGUoZSl8fChlLmNhdGVnb3J5TWF0Y2hlc01hcD17fSl9KX1mdW5jdGlvbiBIUGUodCl7QWUodCxlPT57ZS5jYXRlZ29yeU1hdGNoZXM9W10sQWUoZS5jYXRlZ29yeU1hdGNoZXNNYXAsKHIsbik9PntlLmNhdGVnb3J5TWF0Y2hlcy5wdXNoKGVzZVtuXS50b2tlblR5cGVJZHgpfSl9KX1mdW5jdGlvbiBXUGUodCl7QWUodCxlPT57dHNlKFtdLGUpfSl9ZnVuY3Rpb24gdHNlKHQsZSl7QWUodCxyPT57ZS5jYXRlZ29yeU1hdGNoZXNNYXBbci50b2tlblR5cGVJZHhdPSEwfSksQWUoZS5DQVRFR09SSUVTLHI9PntsZXQgbj10LmNvbmNhdChlKTtxbihuLHIpfHx0c2UobixyKX0pfWZ1bmN0aW9uIF9OKHQpe3JldHVybiBCdCh0LCJ0b2tlblR5cGVJZHgiKX1mdW5jdGlvbiBKYWUodCl7cmV0dXJuIEJ0KHQsIkNBVEVHT1JJRVMiKX1mdW5jdGlvbiBxUGUodCl7cmV0dXJuIEJ0KHQsImNhdGVnb3J5TWF0Y2hlcyIpfWZ1bmN0aW9uIFlQZSh0KXtyZXR1cm4gQnQodCwiY2F0ZWdvcnlNYXRjaGVzTWFwIil9ZnVuY3Rpb24gcnNlKHQpe3JldHVybiBCdCh0LCJ0b2tlblR5cGVJZHgiKX12YXIgWmFlLGVzZSxjcD1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7byhQdSwidG9rZW5TdHJ1Y3R1cmVkTWF0Y2hlciIpO28oemcsInRva2VuU3RydWN0dXJlZE1hdGNoZXJOb0NhdGVnb3JpZXMiKTtaYWU9MSxlc2U9e307byhCdSwiYXVnbWVudFRva2VuVHlwZXMiKTtvKFZQZSwiZXhwYW5kQ2F0ZWdvcmllcyIpO28oVVBlLCJhc3NpZ25Ub2tlbkRlZmF1bHRQcm9wcyIpO28oSFBlLCJhc3NpZ25DYXRlZ29yaWVzVG9rZW5zUHJvcCIpO28oV1BlLCJhc3NpZ25DYXRlZ29yaWVzTWFwUHJvcCIpO28odHNlLCJzaW5nbGVBc3NpZ25DYXRlZ29yaWVzVG9rc01hcCIpO28oX04sImhhc1Nob3J0S2V5UHJvcGVydHkiKTtvKEphZSwiaGFzQ2F0ZWdvcmllc1Byb3BlcnR5Iik7byhxUGUsImhhc0V4dGVuZGluZ1Rva2Vuc1R5cGVzUHJvcGVydHkiKTtvKFlQZSwiaGFzRXh0ZW5kaW5nVG9rZW5zVHlwZXNNYXBQcm9wZXJ0eSIpO28ocnNlLCJpc1Rva2VuVHlwZSIpfSk7dmFyIEdnLEROPU4oKCk9PnsidXNlIHN0cmljdCI7R2c9e2J1aWxkVW5hYmxlVG9Qb3BMZXhlck1vZGVNZXNzYWdlKHQpe3JldHVybmBVbmFibGUgdG8gcG9wIExleGVyIE1vZGUgYWZ0ZXIgZW5jb3VudGVyaW5nIFRva2VuIC0+JHt0LmltYWdlfTwtIFRoZSBNb2RlIFN0YWNrIGlzIGVtcHR5YH0sYnVpbGRVbmV4cGVjdGVkQ2hhcmFjdGVyc01lc3NhZ2UodCxlLHIsbixpKXtyZXR1cm5gdW5leHBlY3RlZCBjaGFyYWN0ZXI6IC0+JHt0LmNoYXJBdChlKX08LSBhdCBvZmZzZXQ6ICR7ZX0sIHNraXBwZWQgJHtyfSBjaGFyYWN0ZXJzLmB9fX0pO3ZhciBZbixheCxYbixpeD1OKCgpPT57InVzZSBzdHJpY3QiO1NOKCk7cXQoKTtPZygpO2NwKCk7RE4oKTtMaygpOyhmdW5jdGlvbih0KXt0W3QuTUlTU0lOR19QQVRURVJOPTBdPSJNSVNTSU5HX1BBVFRFUk4iLHRbdC5JTlZBTElEX1BBVFRFUk49MV09IklOVkFMSURfUEFUVEVSTiIsdFt0LkVPSV9BTkNIT1JfRk9VTkQ9Ml09IkVPSV9BTkNIT1JfRk9VTkQiLHRbdC5VTlNVUFBPUlRFRF9GTEFHU19GT1VORD0zXT0iVU5TVVBQT1JURURfRkxBR1NfRk9VTkQiLHRbdC5EVVBMSUNBVEVfUEFUVEVSTlNfRk9VTkQ9NF09IkRVUExJQ0FURV9QQVRURVJOU19GT1VORCIsdFt0LklOVkFMSURfR1JPVVBfVFlQRV9GT1VORD01XT0iSU5WQUxJRF9HUk9VUF9UWVBFX0ZPVU5EIix0W3QuUFVTSF9NT0RFX0RPRVNfTk9UX0VYSVNUPTZdPSJQVVNIX01PREVfRE9FU19OT1RfRVhJU1QiLHRbdC5NVUxUSV9NT0RFX0xFWEVSX1dJVEhPVVRfREVGQVVMVF9NT0RFPTddPSJNVUxUSV9NT0RFX0xFWEVSX1dJVEhPVVRfREVGQVVMVF9NT0RFIix0W3QuTVVMVElfTU9ERV9MRVhFUl9XSVRIT1VUX01PREVTX1BST1BFUlRZPThdPSJNVUxUSV9NT0RFX0xFWEVSX1dJVEhPVVRfTU9ERVNfUFJPUEVSVFkiLHRbdC5NVUxUSV9NT0RFX0xFWEVSX0RFRkFVTFRfTU9ERV9WQUxVRV9ET0VTX05PVF9FWElTVD05XT0iTVVMVElfTU9ERV9MRVhFUl9ERUZBVUxUX01PREVfVkFMVUVfRE9FU19OT1RfRVhJU1QiLHRbdC5MRVhFUl9ERUZJTklUSU9OX0NBTk5PVF9DT05UQUlOX1VOREVGSU5FRD0xMF09IkxFWEVSX0RFRklOSVRJT05fQ0FOTk9UX0NPTlRBSU5fVU5ERUZJTkVEIix0W3QuU09JX0FOQ0hPUl9GT1VORD0xMV09IlNPSV9BTkNIT1JfRk9VTkQiLHRbdC5FTVBUWV9NQVRDSF9QQVRURVJOPTEyXT0iRU1QVFlfTUFUQ0hfUEFUVEVSTiIsdFt0Lk5PX0xJTkVfQlJFQUtTX0ZMQUdTPTEzXT0iTk9fTElORV9CUkVBS1NfRkxBR1MiLHRbdC5VTlJFQUNIQUJMRV9QQVRURVJOPTE0XT0iVU5SRUFDSEFCTEVfUEFUVEVSTiIsdFt0LklERU5USUZZX1RFUk1JTkFUT1I9MTVdPSJJREVOVElGWV9URVJNSU5BVE9SIix0W3QuQ1VTVE9NX0xJTkVfQlJFQUs9MTZdPSJDVVNUT01fTElORV9CUkVBSyIsdFt0Lk1VTFRJX01PREVfTEVYRVJfTE9OR0VSX0FMVF9OT1RfSU5fQ1VSUkVOVF9NT0RFPTE3XT0iTVVMVElfTU9ERV9MRVhFUl9MT05HRVJfQUxUX05PVF9JTl9DVVJSRU5UX01PREUifSkoWW58fChZbj17fSkpO2F4PXtkZWZlckRlZmluaXRpb25FcnJvcnNIYW5kbGluZzohMSxwb3NpdGlvblRyYWNraW5nOiJmdWxsIixsaW5lVGVybWluYXRvcnNQYXR0ZXJuOi9cbnxcclxuPy9nLGxpbmVUZXJtaW5hdG9yQ2hhcmFjdGVyczpbYApgLCJcciJdLGVuc3VyZU9wdGltaXphdGlvbnM6ITEsc2FmZU1vZGU6ITEsZXJyb3JNZXNzYWdlUHJvdmlkZXI6R2csdHJhY2VJbml0UGVyZjohMSxza2lwVmFsaWRhdGlvbnM6ITEscmVjb3ZlcnlFbmFibGVkOiEwfTtPYmplY3QuZnJlZXplKGF4KTtYbj1jbGFzc3tzdGF0aWN7byh0aGlzLCJMZXhlciIpfWNvbnN0cnVjdG9yKGUscj1heCl7aWYodGhpcy5sZXhlckRlZmluaXRpb249ZSx0aGlzLmxleGVyRGVmaW5pdGlvbkVycm9ycz1bXSx0aGlzLmxleGVyRGVmaW5pdGlvbldhcm5pbmc9W10sdGhpcy5wYXR0ZXJuSWR4VG9Db25maWc9e30sdGhpcy5jaGFyQ29kZVRvUGF0dGVybklkeFRvQ29uZmlnPXt9LHRoaXMubW9kZXM9W10sdGhpcy5lbXB0eUdyb3Vwcz17fSx0aGlzLnRyYWNrU3RhcnRMaW5lcz0hMCx0aGlzLnRyYWNrRW5kTGluZXM9ITAsdGhpcy5oYXNDdXN0b209ITEsdGhpcy5jYW5Nb2RlQmVPcHRpbWl6ZWQ9e30sdGhpcy5UUkFDRV9JTklUPShpLGEpPT57aWYodGhpcy50cmFjZUluaXRQZXJmPT09ITApe3RoaXMudHJhY2VJbml0SW5kZW50Kys7bGV0IHM9bmV3IEFycmF5KHRoaXMudHJhY2VJbml0SW5kZW50KzEpLmpvaW4oIgkiKTt0aGlzLnRyYWNlSW5pdEluZGVudDx0aGlzLnRyYWNlSW5pdE1heElkZW50JiZjb25zb2xlLmxvZyhgJHtzfS0tPiA8JHtpfT5gKTtsZXR7dGltZTpsLHZhbHVlOnV9PXR4KGEpLGg9bD4xMD9jb25zb2xlLndhcm46Y29uc29sZS5sb2c7cmV0dXJuIHRoaXMudHJhY2VJbml0SW5kZW50PHRoaXMudHJhY2VJbml0TWF4SWRlbnQmJmgoYCR7c308LS0gPCR7aX0+IHRpbWU6ICR7bH1tc2ApLHRoaXMudHJhY2VJbml0SW5kZW50LS0sdX1lbHNlIHJldHVybiBhKCl9LHR5cGVvZiByPT0iYm9vbGVhbiIpdGhyb3cgRXJyb3IoYFRoZSBzZWNvbmQgYXJndW1lbnQgdG8gdGhlIExleGVyIGNvbnN0cnVjdG9yIGlzIG5vdyBhbiBJTGV4ZXJDb25maWcgT2JqZWN0LgphIGJvb2xlYW4gMm5kIGFyZ3VtZW50IGlzIG5vIGxvbmdlciBzdXBwb3J0ZWRgKTt0aGlzLmNvbmZpZz1tYSh7fSxheCxyKTtsZXQgbj10aGlzLmNvbmZpZy50cmFjZUluaXRQZXJmO249PT0hMD8odGhpcy50cmFjZUluaXRNYXhJZGVudD0xLzAsdGhpcy50cmFjZUluaXRQZXJmPSEwKTp0eXBlb2Ygbj09Im51bWJlciImJih0aGlzLnRyYWNlSW5pdE1heElkZW50PW4sdGhpcy50cmFjZUluaXRQZXJmPSEwKSx0aGlzLnRyYWNlSW5pdEluZGVudD0tMSx0aGlzLlRSQUNFX0lOSVQoIkxleGVyIENvbnN0cnVjdG9yIiwoKT0+e2xldCBpLGE9ITA7dGhpcy5UUkFDRV9JTklUKCJMZXhlciBDb25maWcgaGFuZGxpbmciLCgpPT57aWYodGhpcy5jb25maWcubGluZVRlcm1pbmF0b3JzUGF0dGVybj09PWF4LmxpbmVUZXJtaW5hdG9yc1BhdHRlcm4pdGhpcy5jb25maWcubGluZVRlcm1pbmF0b3JzUGF0dGVybj1qYWU7ZWxzZSBpZih0aGlzLmNvbmZpZy5saW5lVGVybWluYXRvckNoYXJhY3RlcnM9PT1heC5saW5lVGVybWluYXRvckNoYXJhY3RlcnMpdGhyb3cgRXJyb3IoYEVycm9yOiBNaXNzaW5nIDxsaW5lVGVybWluYXRvckNoYXJhY3RlcnM+IHByb3BlcnR5IG9uIHRoZSBMZXhlciBjb25maWcuCglGb3IgZGV0YWlscyBTZWU6IGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL3Jlc29sdmluZ19sZXhlcl9lcnJvcnMuaHRtbCNNSVNTSU5HX0xJTkVfVEVSTV9DSEFSU2ApO2lmKHIuc2FmZU1vZGUmJnIuZW5zdXJlT3B0aW1pemF0aW9ucyl0aHJvdyBFcnJvcignInNhZmVNb2RlIiBhbmQgImVuc3VyZU9wdGltaXphdGlvbnMiIGZsYWdzIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuJyk7dGhpcy50cmFja1N0YXJ0TGluZXM9L2Z1bGx8b25seVN0YXJ0L2kudGVzdCh0aGlzLmNvbmZpZy5wb3NpdGlvblRyYWNraW5nKSx0aGlzLnRyYWNrRW5kTGluZXM9L2Z1bGwvaS50ZXN0KHRoaXMuY29uZmlnLnBvc2l0aW9uVHJhY2tpbmcpLFB0KGUpP2k9e21vZGVzOntkZWZhdWx0TW9kZTphbihlKX0sZGVmYXVsdE1vZGU6JGd9OihhPSExLGk9YW4oZSkpfSksdGhpcy5jb25maWcuc2tpcFZhbGlkYXRpb25zPT09ITEmJih0aGlzLlRSQUNFX0lOSVQoInBlcmZvcm1SdW50aW1lQ2hlY2tzIiwoKT0+e3RoaXMubGV4ZXJEZWZpbml0aW9uRXJyb3JzPXRoaXMubGV4ZXJEZWZpbml0aW9uRXJyb3JzLmNvbmNhdChXYWUoaSx0aGlzLnRyYWNrU3RhcnRMaW5lcyx0aGlzLmNvbmZpZy5saW5lVGVybWluYXRvckNoYXJhY3RlcnMpKX0pLHRoaXMuVFJBQ0VfSU5JVCgicGVyZm9ybVdhcm5pbmdSdW50aW1lQ2hlY2tzIiwoKT0+e3RoaXMubGV4ZXJEZWZpbml0aW9uV2FybmluZz10aGlzLmxleGVyRGVmaW5pdGlvbldhcm5pbmcuY29uY2F0KHFhZShpLHRoaXMudHJhY2tTdGFydExpbmVzLHRoaXMuY29uZmlnLmxpbmVUZXJtaW5hdG9yQ2hhcmFjdGVycykpfSkpLGkubW9kZXM9aS5tb2Rlcz9pLm1vZGVzOnt9LEFlKGkubW9kZXMsKGwsdSk9PntpLm1vZGVzW3VdPUpoKGwsaD0+cHIoaCkpfSk7bGV0IHM9enIoaS5tb2Rlcyk7aWYoQWUoaS5tb2RlcywobCx1KT0+e3RoaXMuVFJBQ0VfSU5JVChgTW9kZTogPCR7dX0+IHByb2Nlc3NpbmdgLCgpPT57aWYodGhpcy5tb2Rlcy5wdXNoKHUpLHRoaXMuY29uZmlnLnNraXBWYWxpZGF0aW9ucz09PSExJiZ0aGlzLlRSQUNFX0lOSVQoInZhbGlkYXRlUGF0dGVybnMiLCgpPT57dGhpcy5sZXhlckRlZmluaXRpb25FcnJvcnM9dGhpcy5sZXhlckRlZmluaXRpb25FcnJvcnMuY29uY2F0KEhhZShsLHMpKX0pLHVyKHRoaXMubGV4ZXJEZWZpbml0aW9uRXJyb3JzKSl7QnUobCk7bGV0IGg7dGhpcy5UUkFDRV9JTklUKCJhbmFseXplVG9rZW5UeXBlcyIsKCk9PntoPVVhZShsLHtsaW5lVGVybWluYXRvckNoYXJhY3RlcnM6dGhpcy5jb25maWcubGluZVRlcm1pbmF0b3JDaGFyYWN0ZXJzLHBvc2l0aW9uVHJhY2tpbmc6ci5wb3NpdGlvblRyYWNraW5nLGVuc3VyZU9wdGltaXphdGlvbnM6ci5lbnN1cmVPcHRpbWl6YXRpb25zLHNhZmVNb2RlOnIuc2FmZU1vZGUsdHJhY2VyOnRoaXMuVFJBQ0VfSU5JVH0pfSksdGhpcy5wYXR0ZXJuSWR4VG9Db25maWdbdV09aC5wYXR0ZXJuSWR4VG9Db25maWcsdGhpcy5jaGFyQ29kZVRvUGF0dGVybklkeFRvQ29uZmlnW3VdPWguY2hhckNvZGVUb1BhdHRlcm5JZHhUb0NvbmZpZyx0aGlzLmVtcHR5R3JvdXBzPW1hKHt9LHRoaXMuZW1wdHlHcm91cHMsaC5lbXB0eUdyb3VwcyksdGhpcy5oYXNDdXN0b209aC5oYXNDdXN0b218fHRoaXMuaGFzQ3VzdG9tLHRoaXMuY2FuTW9kZUJlT3B0aW1pemVkW3VdPWguY2FuQmVPcHRpbWl6ZWR9fSl9KSx0aGlzLmRlZmF1bHRNb2RlPWkuZGVmYXVsdE1vZGUsIXVyKHRoaXMubGV4ZXJEZWZpbml0aW9uRXJyb3JzKSYmIXRoaXMuY29uZmlnLmRlZmVyRGVmaW5pdGlvbkVycm9yc0hhbmRsaW5nKXtsZXQgdT1KZSh0aGlzLmxleGVyRGVmaW5pdGlvbkVycm9ycyxoPT5oLm1lc3NhZ2UpLmpvaW4oYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmApO3Rocm93IG5ldyBFcnJvcihgRXJyb3JzIGRldGVjdGVkIGluIGRlZmluaXRpb24gb2YgTGV4ZXI6CmArdSl9QWUodGhpcy5sZXhlckRlZmluaXRpb25XYXJuaW5nLGw9PntleChsLm1lc3NhZ2UpfSksdGhpcy5UUkFDRV9JTklUKCJDaG9vc2luZyBzdWItbWV0aG9kcyBpbXBsZW1lbnRhdGlvbnMiLCgpPT57aWYoQU4/KHRoaXMuY2hvcElucHV0PXRhLHRoaXMubWF0Y2g9dGhpcy5tYXRjaFdpdGhUZXN0KToodGhpcy51cGRhdGVMYXN0SW5kZXg9bmksdGhpcy5tYXRjaD10aGlzLm1hdGNoV2l0aEV4ZWMpLGEmJih0aGlzLmhhbmRsZU1vZGVzPW5pKSx0aGlzLnRyYWNrU3RhcnRMaW5lcz09PSExJiYodGhpcy5jb21wdXRlTmV3Q29sdW1uPXRhKSx0aGlzLnRyYWNrRW5kTGluZXM9PT0hMSYmKHRoaXMudXBkYXRlVG9rZW5FbmRMaW5lQ29sdW1uTG9jYXRpb249bmkpLC9mdWxsL2kudGVzdCh0aGlzLmNvbmZpZy5wb3NpdGlvblRyYWNraW5nKSl0aGlzLmNyZWF0ZVRva2VuSW5zdGFuY2U9dGhpcy5jcmVhdGVGdWxsVG9rZW47ZWxzZSBpZigvb25seVN0YXJ0L2kudGVzdCh0aGlzLmNvbmZpZy5wb3NpdGlvblRyYWNraW5nKSl0aGlzLmNyZWF0ZVRva2VuSW5zdGFuY2U9dGhpcy5jcmVhdGVTdGFydE9ubHlUb2tlbjtlbHNlIGlmKC9vbmx5T2Zmc2V0L2kudGVzdCh0aGlzLmNvbmZpZy5wb3NpdGlvblRyYWNraW5nKSl0aGlzLmNyZWF0ZVRva2VuSW5zdGFuY2U9dGhpcy5jcmVhdGVPZmZzZXRPbmx5VG9rZW47ZWxzZSB0aHJvdyBFcnJvcihgSW52YWxpZCA8cG9zaXRpb25UcmFja2luZz4gY29uZmlnIG9wdGlvbjogIiR7dGhpcy5jb25maWcucG9zaXRpb25UcmFja2luZ30iYCk7dGhpcy5oYXNDdXN0b20/KHRoaXMuYWRkVG9rZW49dGhpcy5hZGRUb2tlblVzaW5nUHVzaCx0aGlzLmhhbmRsZVBheWxvYWQ9dGhpcy5oYW5kbGVQYXlsb2FkV2l0aEN1c3RvbSk6KHRoaXMuYWRkVG9rZW49dGhpcy5hZGRUb2tlblVzaW5nTWVtYmVyQWNjZXNzLHRoaXMuaGFuZGxlUGF5bG9hZD10aGlzLmhhbmRsZVBheWxvYWROb0N1c3RvbSl9KSx0aGlzLlRSQUNFX0lOSVQoIkZhaWxlZCBPcHRpbWl6YXRpb24gV2FybmluZ3MiLCgpPT57bGV0IGw9WHIodGhpcy5jYW5Nb2RlQmVPcHRpbWl6ZWQsKHUsaCxmKT0+KGg9PT0hMSYmdS5wdXNoKGYpLHUpLFtdKTtpZihyLmVuc3VyZU9wdGltaXphdGlvbnMmJiF1cihsKSl0aHJvdyBFcnJvcihgTGV4ZXIgTW9kZXM6IDwgJHtsLmpvaW4oIiwgIil9ID4gY2Fubm90IGJlIG9wdGltaXplZC4KCSBEaXNhYmxlIHRoZSAiZW5zdXJlT3B0aW1pemF0aW9ucyIgbGV4ZXIgY29uZmlnIGZsYWcgdG8gc2lsZW50bHkgaWdub3JlIHRoaXMgYW5kIHJ1biB0aGUgbGV4ZXIgaW4gYW4gdW4tb3B0aW1pemVkIG1vZGUuCgkgT3IgaW5zcGVjdCB0aGUgY29uc29sZSBsb2cgZm9yIGRldGFpbHMgb24gaG93IHRvIHJlc29sdmUgdGhlc2UgaXNzdWVzLmApfSksdGhpcy5UUkFDRV9JTklUKCJjbGVhclJlZ0V4cFBhcnNlckNhY2hlIiwoKT0+e1BhZSgpfSksdGhpcy5UUkFDRV9JTklUKCJ0b0Zhc3RQcm9wZXJ0aWVzIiwoKT0+e3J4KHRoaXMpfSl9KX10b2tlbml6ZShlLHI9dGhpcy5kZWZhdWx0TW9kZSl7aWYoIXVyKHRoaXMubGV4ZXJEZWZpbml0aW9uRXJyb3JzKSl7bGV0IGk9SmUodGhpcy5sZXhlckRlZmluaXRpb25FcnJvcnMsYT0+YS5tZXNzYWdlKS5qb2luKGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpgKTt0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBUb2tlbml6ZSBiZWNhdXNlIEVycm9ycyBkZXRlY3RlZCBpbiBkZWZpbml0aW9uIG9mIExleGVyOgpgK2kpfXJldHVybiB0aGlzLnRva2VuaXplSW50ZXJuYWwoZSxyKX10b2tlbml6ZUludGVybmFsKGUscil7bGV0IG4saSxhLHMsbCx1LGgsZixkLHAsbSxnLHksdix4LGIsdz1lLEM9dy5sZW5ndGgsVD0wLEU9MCxBPXRoaXMuaGFzQ3VzdG9tPzA6TWF0aC5mbG9vcihlLmxlbmd0aC8xMCksUz1uZXcgQXJyYXkoQSksXz1bXSxJPXRoaXMudHJhY2tTdGFydExpbmVzPzE6dm9pZCAwLEQ9dGhpcy50cmFja1N0YXJ0TGluZXM/MTp2b2lkIDAsaz1ZYWUodGhpcy5lbXB0eUdyb3VwcyksTD10aGlzLnRyYWNrU3RhcnRMaW5lcyxSPXRoaXMuY29uZmlnLmxpbmVUZXJtaW5hdG9yc1BhdHRlcm4sTz0wLE09W10sQj1bXSxGPVtdLFA9W107T2JqZWN0LmZyZWV6ZShQKTtsZXQgejtmdW5jdGlvbiAkKCl7cmV0dXJuIE19bygkLCJnZXRQb3NzaWJsZVBhdHRlcm5zU2xvdyIpO2Z1bmN0aW9uIEgobGUpe2xldCBoZT1JYyhsZSksSz1CW2hlXTtyZXR1cm4gSz09PXZvaWQgMD9QOkt9byhILCJnZXRQb3NzaWJsZVBhdHRlcm5zT3B0aW1pemVkIik7bGV0IFE9byhsZT0+e2lmKEYubGVuZ3RoPT09MSYmbGUudG9rZW5UeXBlLlBVU0hfTU9ERT09PXZvaWQgMCl7bGV0IGhlPXRoaXMuY29uZmlnLmVycm9yTWVzc2FnZVByb3ZpZGVyLmJ1aWxkVW5hYmxlVG9Qb3BMZXhlck1vZGVNZXNzYWdlKGxlKTtfLnB1c2goe29mZnNldDpsZS5zdGFydE9mZnNldCxsaW5lOmxlLnN0YXJ0TGluZSxjb2x1bW46bGUuc3RhcnRDb2x1bW4sbGVuZ3RoOmxlLmltYWdlLmxlbmd0aCxtZXNzYWdlOmhlfSl9ZWxzZXtGLnBvcCgpO2xldCBoZT1nYShGKTtNPXRoaXMucGF0dGVybklkeFRvQ29uZmlnW2hlXSxCPXRoaXMuY2hhckNvZGVUb1BhdHRlcm5JZHhUb0NvbmZpZ1toZV0sTz1NLmxlbmd0aDtsZXQgSz10aGlzLmNhbk1vZGVCZU9wdGltaXplZFtoZV0mJnRoaXMuY29uZmlnLnNhZmVNb2RlPT09ITE7QiYmSz96PUg6ej0kfX0sInBvcF9tb2RlIik7ZnVuY3Rpb24gaihsZSl7Ri5wdXNoKGxlKSxCPXRoaXMuY2hhckNvZGVUb1BhdHRlcm5JZHhUb0NvbmZpZ1tsZV0sTT10aGlzLnBhdHRlcm5JZHhUb0NvbmZpZ1tsZV0sTz1NLmxlbmd0aCxPPU0ubGVuZ3RoO2xldCBoZT10aGlzLmNhbk1vZGVCZU9wdGltaXplZFtsZV0mJnRoaXMuY29uZmlnLnNhZmVNb2RlPT09ITE7QiYmaGU/ej1IOno9JH1vKGosInB1c2hfbW9kZSIpLGouY2FsbCh0aGlzLHIpO2xldCBpZSxuZT10aGlzLmNvbmZpZy5yZWNvdmVyeUVuYWJsZWQ7Zm9yKDtUPEM7KXt1PW51bGw7bGV0IGxlPXcuY2hhckNvZGVBdChUKSxoZT16KGxlKSxLPWhlLmxlbmd0aDtmb3Iobj0wO248SztuKyspe2llPWhlW25dO2xldCBYPWllLnBhdHRlcm47aD1udWxsO2xldCB0ZT1pZS5zaG9ydDtpZih0ZSE9PSExP2xlPT09dGUmJih1PVgpOmllLmlzQ3VzdG9tPT09ITA/KGI9WC5leGVjKHcsVCxTLGspLGIhPT1udWxsPyh1PWJbMF0sYi5wYXlsb2FkIT09dm9pZCAwJiYoaD1iLnBheWxvYWQpKTp1PW51bGwpOih0aGlzLnVwZGF0ZUxhc3RJbmRleChYLFQpLHU9dGhpcy5tYXRjaChYLGUsVCkpLHUhPT1udWxsKXtpZihsPWllLmxvbmdlckFsdCxsIT09dm9pZCAwKXtsZXQgSj1sLmxlbmd0aDtmb3IoYT0wO2E8SjthKyspe2xldCBzZT1NW2xbYV1dLHVlPXNlLnBhdHRlcm47aWYoZj1udWxsLHNlLmlzQ3VzdG9tPT09ITA/KGI9dWUuZXhlYyh3LFQsUyxrKSxiIT09bnVsbD8ocz1iWzBdLGIucGF5bG9hZCE9PXZvaWQgMCYmKGY9Yi5wYXlsb2FkKSk6cz1udWxsKToodGhpcy51cGRhdGVMYXN0SW5kZXgodWUsVCkscz10aGlzLm1hdGNoKHVlLGUsVCkpLHMmJnMubGVuZ3RoPnUubGVuZ3RoKXt1PXMsaD1mLGllPXNlO2JyZWFrfX19YnJlYWt9fWlmKHUhPT1udWxsKXtpZihkPXUubGVuZ3RoLHA9aWUuZ3JvdXAscCE9PXZvaWQgMCYmKG09aWUudG9rZW5UeXBlSWR4LGc9dGhpcy5jcmVhdGVUb2tlbkluc3RhbmNlKHUsVCxtLGllLnRva2VuVHlwZSxJLEQsZCksdGhpcy5oYW5kbGVQYXlsb2FkKGcsaCkscD09PSExP0U9dGhpcy5hZGRUb2tlbihTLEUsZyk6a1twXS5wdXNoKGcpKSxlPXRoaXMuY2hvcElucHV0KGUsZCksVD1UK2QsRD10aGlzLmNvbXB1dGVOZXdDb2x1bW4oRCxkKSxMPT09ITAmJmllLmNhbkxpbmVUZXJtaW5hdG9yPT09ITApe2xldCBYPTAsdGUsSjtSLmxhc3RJbmRleD0wO2RvIHRlPVIudGVzdCh1KSx0ZT09PSEwJiYoSj1SLmxhc3RJbmRleC0xLFgrKyk7d2hpbGUodGU9PT0hMCk7WCE9PTAmJihJPUkrWCxEPWQtSix0aGlzLnVwZGF0ZVRva2VuRW5kTGluZUNvbHVtbkxvY2F0aW9uKGcscCxKLFgsSSxELGQpKX10aGlzLmhhbmRsZU1vZGVzKGllLFEsaixnKX1lbHNle2xldCBYPVQsdGU9SSxKPUQsc2U9bmU9PT0hMTtmb3IoO3NlPT09ITEmJlQ8QzspZm9yKGU9dGhpcy5jaG9wSW5wdXQoZSwxKSxUKyssaT0wO2k8TztpKyspe2xldCB1ZT1NW2ldLFo9dWUucGF0dGVybixTZT11ZS5zaG9ydDtpZihTZSE9PSExP3cuY2hhckNvZGVBdChUKT09PVNlJiYoc2U9ITApOnVlLmlzQ3VzdG9tPT09ITA/c2U9Wi5leGVjKHcsVCxTLGspIT09bnVsbDoodGhpcy51cGRhdGVMYXN0SW5kZXgoWixUKSxzZT1aLmV4ZWMoZSkhPT1udWxsKSxzZT09PSEwKWJyZWFrfWlmKHk9VC1YLEQ9dGhpcy5jb21wdXRlTmV3Q29sdW1uKEQseSkseD10aGlzLmNvbmZpZy5lcnJvck1lc3NhZ2VQcm92aWRlci5idWlsZFVuZXhwZWN0ZWRDaGFyYWN0ZXJzTWVzc2FnZSh3LFgseSx0ZSxKKSxfLnB1c2goe29mZnNldDpYLGxpbmU6dGUsY29sdW1uOkosbGVuZ3RoOnksbWVzc2FnZTp4fSksbmU9PT0hMSlicmVha319cmV0dXJuIHRoaXMuaGFzQ3VzdG9tfHwoUy5sZW5ndGg9RSkse3Rva2VuczpTLGdyb3VwczprLGVycm9yczpffX1oYW5kbGVNb2RlcyhlLHIsbixpKXtpZihlLnBvcD09PSEwKXtsZXQgYT1lLnB1c2g7cihpKSxhIT09dm9pZCAwJiZuLmNhbGwodGhpcyxhKX1lbHNlIGUucHVzaCE9PXZvaWQgMCYmbi5jYWxsKHRoaXMsZS5wdXNoKX1jaG9wSW5wdXQoZSxyKXtyZXR1cm4gZS5zdWJzdHJpbmcocil9dXBkYXRlTGFzdEluZGV4KGUscil7ZS5sYXN0SW5kZXg9cn11cGRhdGVUb2tlbkVuZExpbmVDb2x1bW5Mb2NhdGlvbihlLHIsbixpLGEscyxsKXtsZXQgdSxoO3IhPT12b2lkIDAmJih1PW49PT1sLTEsaD11Py0xOjAsaT09PTEmJnU9PT0hMHx8KGUuZW5kTGluZT1hK2gsZS5lbmRDb2x1bW49cy0xKy1oKSl9Y29tcHV0ZU5ld0NvbHVtbihlLHIpe3JldHVybiBlK3J9Y3JlYXRlT2Zmc2V0T25seVRva2VuKGUscixuLGkpe3JldHVybntpbWFnZTplLHN0YXJ0T2Zmc2V0OnIsdG9rZW5UeXBlSWR4Om4sdG9rZW5UeXBlOml9fWNyZWF0ZVN0YXJ0T25seVRva2VuKGUscixuLGksYSxzKXtyZXR1cm57aW1hZ2U6ZSxzdGFydE9mZnNldDpyLHN0YXJ0TGluZTphLHN0YXJ0Q29sdW1uOnMsdG9rZW5UeXBlSWR4Om4sdG9rZW5UeXBlOml9fWNyZWF0ZUZ1bGxUb2tlbihlLHIsbixpLGEscyxsKXtyZXR1cm57aW1hZ2U6ZSxzdGFydE9mZnNldDpyLGVuZE9mZnNldDpyK2wtMSxzdGFydExpbmU6YSxlbmRMaW5lOmEsc3RhcnRDb2x1bW46cyxlbmRDb2x1bW46cytsLTEsdG9rZW5UeXBlSWR4Om4sdG9rZW5UeXBlOml9fWFkZFRva2VuVXNpbmdQdXNoKGUscixuKXtyZXR1cm4gZS5wdXNoKG4pLHJ9YWRkVG9rZW5Vc2luZ01lbWJlckFjY2VzcyhlLHIsbil7cmV0dXJuIGVbcl09bixyKysscn1oYW5kbGVQYXlsb2FkTm9DdXN0b20oZSxyKXt9aGFuZGxlUGF5bG9hZFdpdGhDdXN0b20oZSxyKXtyIT09bnVsbCYmKGUucGF5bG9hZD1yKX1tYXRjaFdpdGhUZXN0KGUscixuKXtyZXR1cm4gZS50ZXN0KHIpPT09ITA/ci5zdWJzdHJpbmcobixlLmxhc3RJbmRleCk6bnVsbH1tYXRjaFdpdGhFeGVjKGUscil7bGV0IG49ZS5leGVjKHIpO3JldHVybiBuIT09bnVsbD9uWzBdOm51bGx9fTtYbi5TS0lQUEVEPSJUaGlzIG1hcmtzIGEgc2tpcHBlZCBUb2tlbiBwYXR0ZXJuLCB0aGlzIG1lYW5zIGVhY2ggdG9rZW4gaWRlbnRpZmllZCBieSBpdCB3aWxsYmUgY29uc3VtZWQgYW5kIHRoZW4gdGhyb3duIGludG8gb2JsaXZpb24sIHRoaXMgY2FuIGJlIHVzZWQgdG8gZm9yIGV4YW1wbGUgdG8gY29tcGxldGVseSBpZ25vcmUgd2hpdGVzcGFjZS4iO1huLk5BPS9OT1RfQVBQTElDQUJMRS99KTtmdW5jdGlvbiBGdSh0KXtyZXR1cm4gTE4odCk/dC5MQUJFTDp0Lm5hbWV9ZnVuY3Rpb24gTE4odCl7cmV0dXJuIHlpKHQuTEFCRUwpJiZ0LkxBQkVMIT09IiJ9ZnVuY3Rpb24gb2YodCl7cmV0dXJuIGpQZSh0KX1mdW5jdGlvbiBqUGUodCl7bGV0IGU9dC5wYXR0ZXJuLHI9e307aWYoci5uYW1lPXQubmFtZSxwcihlKXx8KHIuUEFUVEVSTj1lKSxCdCh0LFhQZSkpdGhyb3dgVGhlIHBhcmVudCBwcm9wZXJ0eSBpcyBubyBsb25nZXIgc3VwcG9ydGVkLgpTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9jaGV2cm90YWluL2NoZXZyb3RhaW4vaXNzdWVzLzU2NCNpc3N1ZWNvbW1lbnQtMzQ5MDYyMzQ2IGZvciBkZXRhaWxzLmA7cmV0dXJuIEJ0KHQsbnNlKSYmKHIuQ0FURUdPUklFUz10W25zZV0pLEJ1KFtyXSksQnQodCxpc2UpJiYoci5MQUJFTD10W2lzZV0pLEJ0KHQsYXNlKSYmKHIuR1JPVVA9dFthc2VdKSxCdCh0LG9zZSkmJihyLlBPUF9NT0RFPXRbb3NlXSksQnQodCxzc2UpJiYoci5QVVNIX01PREU9dFtzc2VdKSxCdCh0LGxzZSkmJihyLkxPTkdFUl9BTFQ9dFtsc2VdKSxCdCh0LGNzZSkmJihyLkxJTkVfQlJFQUtTPXRbY3NlXSksQnQodCx1c2UpJiYoci5TVEFSVF9DSEFSU19ISU5UPXRbdXNlXSkscn1mdW5jdGlvbiAkdSh0LGUscixuLGksYSxzLGwpe3JldHVybntpbWFnZTplLHN0YXJ0T2Zmc2V0OnIsZW5kT2Zmc2V0Om4sc3RhcnRMaW5lOmksZW5kTGluZTphLHN0YXJ0Q29sdW1uOnMsZW5kQ29sdW1uOmwsdG9rZW5UeXBlSWR4OnQudG9rZW5UeXBlSWR4LHRva2VuVHlwZTp0fX1mdW5jdGlvbiBzeCh0LGUpe3JldHVybiBQdSh0LGUpfXZhciBYUGUsbnNlLGlzZSxhc2Usc3NlLG9zZSxsc2UsY3NlLHVzZSxsbyx1cD1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7aXgoKTtjcCgpO28oRnUsInRva2VuTGFiZWwiKTtvKExOLCJoYXNUb2tlbkxhYmVsIik7WFBlPSJwYXJlbnQiLG5zZT0iY2F0ZWdvcmllcyIsaXNlPSJsYWJlbCIsYXNlPSJncm91cCIsc3NlPSJwdXNoX21vZGUiLG9zZT0icG9wX21vZGUiLGxzZT0ibG9uZ2VyX2FsdCIsY3NlPSJsaW5lX2JyZWFrcyIsdXNlPSJzdGFydF9jaGFyc19oaW50IjtvKG9mLCJjcmVhdGVUb2tlbiIpO28oalBlLCJjcmVhdGVUb2tlbkludGVybmFsIik7bG89b2Yoe25hbWU6IkVPRiIscGF0dGVybjpYbi5OQX0pO0J1KFtsb10pO28oJHUsImNyZWF0ZVRva2VuSW5zdGFuY2UiKTtvKHN4LCJ0b2tlbk1hdGNoZXIiKX0pO3ZhciB6dSxoc2UsUGwsVmc9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt1cCgpO3F0KCk7b3MoKTt6dT17YnVpbGRNaXNtYXRjaFRva2VuTWVzc2FnZSh7ZXhwZWN0ZWQ6dCxhY3R1YWw6ZSxwcmV2aW91czpyLHJ1bGVOYW1lOm59KXtyZXR1cm5gRXhwZWN0aW5nICR7TE4odCk/YC0tPiAke0Z1KHQpfSA8LS1gOmB0b2tlbiBvZiB0eXBlIC0tPiAke3QubmFtZX0gPC0tYH0gYnV0IGZvdW5kIC0tPiAnJHtlLmltYWdlfScgPC0tYH0sYnVpbGROb3RBbGxJbnB1dFBhcnNlZE1lc3NhZ2Uoe2ZpcnN0UmVkdW5kYW50OnQscnVsZU5hbWU6ZX0pe3JldHVybiJSZWR1bmRhbnQgaW5wdXQsIGV4cGVjdGluZyBFT0YgYnV0IGZvdW5kOiAiK3QuaW1hZ2V9LGJ1aWxkTm9WaWFibGVBbHRNZXNzYWdlKHtleHBlY3RlZFBhdGhzUGVyQWx0OnQsYWN0dWFsOmUscHJldmlvdXM6cixjdXN0b21Vc2VyRGVzY3JpcHRpb246bixydWxlTmFtZTppfSl7bGV0IGE9IkV4cGVjdGluZzogIixsPWAKYnV0IGZvdW5kOiAnYCtpYShlKS5pbWFnZSsiJyI7aWYobilyZXR1cm4gYStuK2w7e2xldCB1PVhyKHQsKHAsbSk9PnAuY29uY2F0KG0pLFtdKSxoPUplKHUscD0+YFske0plKHAsbT0+RnUobSkpLmpvaW4oIiwgIil9XWApLGQ9YG9uZSBvZiB0aGVzZSBwb3NzaWJsZSBUb2tlbiBzZXF1ZW5jZXM6CiR7SmUoaCwocCxtKT0+YCAgJHttKzF9LiAke3B9YCkuam9pbihgCmApfWA7cmV0dXJuIGErZCtsfX0sYnVpbGRFYXJseUV4aXRNZXNzYWdlKHtleHBlY3RlZEl0ZXJhdGlvblBhdGhzOnQsYWN0dWFsOmUsY3VzdG9tVXNlckRlc2NyaXB0aW9uOnIscnVsZU5hbWU6bn0pe2xldCBpPSJFeHBlY3Rpbmc6ICIscz1gCmJ1dCBmb3VuZDogJ2AraWEoZSkuaW1hZ2UrIiciO2lmKHIpcmV0dXJuIGkrcitzO3tsZXQgdT1gZXhwZWN0aW5nIGF0IGxlYXN0IG9uZSBpdGVyYXRpb24gd2hpY2ggc3RhcnRzIHdpdGggb25lIG9mIHRoZXNlIHBvc3NpYmxlIFRva2VuIHNlcXVlbmNlczo6CiAgPCR7SmUodCxoPT5gWyR7SmUoaCxmPT5GdShmKSkuam9pbigiLCIpfV1gKS5qb2luKCIgLCIpfT5gO3JldHVybiBpK3Urc319fTtPYmplY3QuZnJlZXplKHp1KTtoc2U9e2J1aWxkUnVsZU5vdEZvdW5kRXJyb3IodCxlKXtyZXR1cm4iSW52YWxpZCBncmFtbWFyLCByZWZlcmVuY2UgdG8gYSBydWxlIHdoaWNoIGlzIG5vdCBkZWZpbmVkOiAtPiIrZS5ub25UZXJtaW5hbE5hbWUrYDwtCmluc2lkZSB0b3AgbGV2ZWwgcnVsZTogLT5gK3QubmFtZSsiPC0ifX0sUGw9e2J1aWxkRHVwbGljYXRlRm91bmRFcnJvcih0LGUpe2Z1bmN0aW9uIHIoZil7cmV0dXJuIGYgaW5zdGFuY2VvZiBrcj9mLnRlcm1pbmFsVHlwZS5uYW1lOmYgaW5zdGFuY2VvZiBvbj9mLm5vblRlcm1pbmFsTmFtZToiIn1vKHIsImdldEV4dHJhUHJvZHVjdGlvbkFyZ3VtZW50Iik7bGV0IG49dC5uYW1lLGk9aWEoZSksYT1pLmlkeCxzPUJzKGkpLGw9cihpKSx1PWE+MCxoPWAtPiR7c30ke3U/YToiIn08LSAke2w/YHdpdGggYXJndW1lbnQ6IC0+JHtsfTwtYDoiIn0KICAgICAgICAgICAgICAgICAgYXBwZWFycyBtb3JlIHRoYW4gb25jZSAoJHtlLmxlbmd0aH0gdGltZXMpIGluIHRoZSB0b3AgbGV2ZWwgcnVsZTogLT4ke259PC0uICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgIEZvciBmdXJ0aGVyIGRldGFpbHMgc2VlOiBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9GQVEuaHRtbCNOVU1FUklDQUxfU1VGRklYRVMgCiAgICAgICAgICAgICAgICAgIGA7cmV0dXJuIGg9aC5yZXBsYWNlKC9bIFx0XSsvZywiICIpLGg9aC5yZXBsYWNlKC9cc1xzKy9nLGAKYCksaH0sYnVpbGROYW1lc3BhY2VDb25mbGljdEVycm9yKHQpe3JldHVybmBOYW1lc3BhY2UgY29uZmxpY3QgZm91bmQgaW4gZ3JhbW1hci4KVGhlIGdyYW1tYXIgaGFzIGJvdGggYSBUZXJtaW5hbChUb2tlbikgYW5kIGEgTm9uLVRlcm1pbmFsKFJ1bGUpIG5hbWVkOiA8JHt0Lm5hbWV9Pi4KVG8gcmVzb2x2ZSB0aGlzIG1ha2Ugc3VyZSBlYWNoIFRlcm1pbmFsIGFuZCBOb24tVGVybWluYWwgbmFtZXMgYXJlIHVuaXF1ZQpUaGlzIGlzIGVhc3kgdG8gYWNjb21wbGlzaCBieSB1c2luZyB0aGUgY29udmVudGlvbiB0aGF0IFRlcm1pbmFsIG5hbWVzIHN0YXJ0IHdpdGggYW4gdXBwZXJjYXNlIGxldHRlcgphbmQgTm9uLVRlcm1pbmFsIG5hbWVzIHN0YXJ0IHdpdGggYSBsb3dlciBjYXNlIGxldHRlci5gfSxidWlsZEFsdGVybmF0aW9uUHJlZml4QW1iaWd1aXR5RXJyb3IodCl7bGV0IGU9SmUodC5wcmVmaXhQYXRoLGk9PkZ1KGkpKS5qb2luKCIsICIpLHI9dC5hbHRlcm5hdGlvbi5pZHg9PT0wPyIiOnQuYWx0ZXJuYXRpb24uaWR4O3JldHVybmBBbWJpZ3VvdXMgYWx0ZXJuYXRpdmVzOiA8JHt0LmFtYmlndWl0eUluZGljZXMuam9pbigiICwiKX0+IGR1ZSB0byBjb21tb24gbG9va2FoZWFkIHByZWZpeAppbiA8T1Ike3J9PiBpbnNpZGUgPCR7dC50b3BMZXZlbFJ1bGUubmFtZX0+IFJ1bGUsCjwke2V9PiBtYXkgYXBwZWFycyBhcyBhIHByZWZpeCBwYXRoIGluIGFsbCB0aGVzZSBhbHRlcm5hdGl2ZXMuClNlZTogaHR0cHM6Ly9jaGV2cm90YWluLmlvL2RvY3MvZ3VpZGUvcmVzb2x2aW5nX2dyYW1tYXJfZXJyb3JzLmh0bWwjQ09NTU9OX1BSRUZJWApGb3IgRnVydGhlciBkZXRhaWxzLmB9LGJ1aWxkQWx0ZXJuYXRpb25BbWJpZ3VpdHlFcnJvcih0KXtsZXQgZT1KZSh0LnByZWZpeFBhdGgsaT0+RnUoaSkpLmpvaW4oIiwgIikscj10LmFsdGVybmF0aW9uLmlkeD09PTA/IiI6dC5hbHRlcm5hdGlvbi5pZHgsbj1gQW1iaWd1b3VzIEFsdGVybmF0aXZlcyBEZXRlY3RlZDogPCR7dC5hbWJpZ3VpdHlJbmRpY2VzLmpvaW4oIiAsIil9PiBpbiA8T1Ike3J9PiBpbnNpZGUgPCR7dC50b3BMZXZlbFJ1bGUubmFtZX0+IFJ1bGUsCjwke2V9PiBtYXkgYXBwZWFycyBhcyBhIHByZWZpeCBwYXRoIGluIGFsbCB0aGVzZSBhbHRlcm5hdGl2ZXMuCmA7cmV0dXJuIG49bitgU2VlOiBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9ndWlkZS9yZXNvbHZpbmdfZ3JhbW1hcl9lcnJvcnMuaHRtbCNBTUJJR1VPVVNfQUxURVJOQVRJVkVTCkZvciBGdXJ0aGVyIGRldGFpbHMuYCxufSxidWlsZEVtcHR5UmVwZXRpdGlvbkVycm9yKHQpe2xldCBlPUJzKHQucmVwZXRpdGlvbik7cmV0dXJuIHQucmVwZXRpdGlvbi5pZHghPT0wJiYoZSs9dC5yZXBldGl0aW9uLmlkeCksYFRoZSByZXBldGl0aW9uIDwke2V9PiB3aXRoaW4gUnVsZSA8JHt0LnRvcExldmVsUnVsZS5uYW1lfT4gY2FuIG5ldmVyIGNvbnN1bWUgYW55IHRva2Vucy4KVGhpcyBjb3VsZCBsZWFkIHRvIGFuIGluZmluaXRlIGxvb3AuYH0sYnVpbGRUb2tlbk5hbWVFcnJvcih0KXtyZXR1cm4iZGVwcmVjYXRlZCJ9LGJ1aWxkRW1wdHlBbHRlcm5hdGlvbkVycm9yKHQpe3JldHVybmBBbWJpZ3VvdXMgZW1wdHkgYWx0ZXJuYXRpdmU6IDwke3QuZW1wdHlDaG9pY2VJZHgrMX0+IGluIDxPUiR7dC5hbHRlcm5hdGlvbi5pZHh9PiBpbnNpZGUgPCR7dC50b3BMZXZlbFJ1bGUubmFtZX0+IFJ1bGUuCk9ubHkgdGhlIGxhc3QgYWx0ZXJuYXRpdmUgbWF5IGJlIGFuIGVtcHR5IGFsdGVybmF0aXZlLmB9LGJ1aWxkVG9vTWFueUFsdGVybmF0aXZlc0Vycm9yKHQpe3JldHVybmBBbiBBbHRlcm5hdGlvbiBjYW5ub3QgaGF2ZSBtb3JlIHRoYW4gMjU2IGFsdGVybmF0aXZlczoKPE9SJHt0LmFsdGVybmF0aW9uLmlkeH0+IGluc2lkZSA8JHt0LnRvcExldmVsUnVsZS5uYW1lfT4gUnVsZS4KIGhhcyAke3QuYWx0ZXJuYXRpb24uZGVmaW5pdGlvbi5sZW5ndGgrMX0gYWx0ZXJuYXRpdmVzLmB9LGJ1aWxkTGVmdFJlY3Vyc2lvbkVycm9yKHQpe2xldCBlPXQudG9wTGV2ZWxSdWxlLm5hbWUscj1KZSh0LmxlZnRSZWN1cnNpb25QYXRoLGE9PmEubmFtZSksbj1gJHtlfSAtLT4gJHtyLmNvbmNhdChbZV0pLmpvaW4oIiAtLT4gIil9YDtyZXR1cm5gTGVmdCBSZWN1cnNpb24gZm91bmQgaW4gZ3JhbW1hci4KcnVsZTogPCR7ZX0+IGNhbiBiZSBpbnZva2VkIGZyb20gaXRzZWxmIChkaXJlY3RseSBvciBpbmRpcmVjdGx5KQp3aXRob3V0IGNvbnN1bWluZyBhbnkgVG9rZW5zLiBUaGUgZ3JhbW1hciBwYXRoIHRoYXQgY2F1c2VzIHRoaXMgaXM6IAogJHtufQogVG8gZml4IHRoaXMgcmVmYWN0b3IgeW91ciBncmFtbWFyIHRvIHJlbW92ZSB0aGUgbGVmdCByZWN1cnNpb24uCnNlZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTExfcGFyc2VyI0xlZnRfZmFjdG9yaW5nLmB9LGJ1aWxkSW52YWxpZFJ1bGVOYW1lRXJyb3IodCl7cmV0dXJuImRlcHJlY2F0ZWQifSxidWlsZER1cGxpY2F0ZVJ1bGVOYW1lRXJyb3IodCl7bGV0IGU7cmV0dXJuIHQudG9wTGV2ZWxSdWxlIGluc3RhbmNlb2YgYXM/ZT10LnRvcExldmVsUnVsZS5uYW1lOmU9dC50b3BMZXZlbFJ1bGUsYER1cGxpY2F0ZSBkZWZpbml0aW9uLCBydWxlOiAtPiR7ZX08LSBpcyBhbHJlYWR5IGRlZmluZWQgaW4gdGhlIGdyYW1tYXI6IC0+JHt0LmdyYW1tYXJOYW1lfTwtYH19fSk7ZnVuY3Rpb24gZnNlKHQsZSl7bGV0IHI9bmV3IFJOKHQsZSk7cmV0dXJuIHIucmVzb2x2ZVJlZnMoKSxyLmVycm9yc312YXIgUk4sZHNlPU4oKCk9PnsidXNlIHN0cmljdCI7RnMoKTtxdCgpO29zKCk7byhmc2UsInJlc29sdmVHcmFtbWFyIik7Uk49Y2xhc3MgZXh0ZW5kcyBzc3tzdGF0aWN7byh0aGlzLCJHYXN0UmVmUmVzb2x2ZXJWaXNpdG9yIil9Y29uc3RydWN0b3IoZSxyKXtzdXBlcigpLHRoaXMubmFtZVRvVG9wUnVsZT1lLHRoaXMuZXJyTXNnUHJvdmlkZXI9cix0aGlzLmVycm9ycz1bXX1yZXNvbHZlUmVmcygpe0FlKGJyKHRoaXMubmFtZVRvVG9wUnVsZSksZT0+e3RoaXMuY3VyclRvcExldmVsPWUsZS5hY2NlcHQodGhpcyl9KX12aXNpdE5vblRlcm1pbmFsKGUpe2xldCByPXRoaXMubmFtZVRvVG9wUnVsZVtlLm5vblRlcm1pbmFsTmFtZV07aWYocillLnJlZmVyZW5jZWRSdWxlPXI7ZWxzZXtsZXQgbj10aGlzLmVyck1zZ1Byb3ZpZGVyLmJ1aWxkUnVsZU5vdEZvdW5kRXJyb3IodGhpcy5jdXJyVG9wTGV2ZWwsZSk7dGhpcy5lcnJvcnMucHVzaCh7bWVzc2FnZTpuLHR5cGU6emkuVU5SRVNPTFZFRF9TVUJSVUxFX1JFRixydWxlTmFtZTp0aGlzLmN1cnJUb3BMZXZlbC5uYW1lLHVucmVzb2x2ZWRSZWZOYW1lOmUubm9uVGVybWluYWxOYW1lfSl9fX19KTtmdW5jdGlvbiBGayh0LGUscj1bXSl7cj1hbihyKTtsZXQgbj1bXSxpPTA7ZnVuY3Rpb24gYShsKXtyZXR1cm4gbC5jb25jYXQoZ2kodCxpKzEpKX1vKGEsInJlbWFpbmluZ1BhdGhXaXRoIik7ZnVuY3Rpb24gcyhsKXtsZXQgdT1GayhhKGwpLGUscik7cmV0dXJuIG4uY29uY2F0KHUpfWZvcihvKHMsImdldEFsdGVybmF0aXZlc0ZvclByb2QiKTtyLmxlbmd0aDxlJiZpPHQubGVuZ3RoOyl7bGV0IGw9dFtpXTtpZihsIGluc3RhbmNlb2YgRG4pcmV0dXJuIHMobC5kZWZpbml0aW9uKTtpZihsIGluc3RhbmNlb2Ygb24pcmV0dXJuIHMobC5kZWZpbml0aW9uKTtpZihsIGluc3RhbmNlb2YgbG4pbj1zKGwuZGVmaW5pdGlvbik7ZWxzZSBpZihsIGluc3RhbmNlb2YgTG4pe2xldCB1PWwuZGVmaW5pdGlvbi5jb25jYXQoW25ldyBPcih7ZGVmaW5pdGlvbjpsLmRlZmluaXRpb259KV0pO3JldHVybiBzKHUpfWVsc2UgaWYobCBpbnN0YW5jZW9mIFJuKXtsZXQgdT1bbmV3IERuKHtkZWZpbml0aW9uOmwuZGVmaW5pdGlvbn0pLG5ldyBPcih7ZGVmaW5pdGlvbjpbbmV3IGtyKHt0ZXJtaW5hbFR5cGU6bC5zZXBhcmF0b3J9KV0uY29uY2F0KGwuZGVmaW5pdGlvbil9KV07cmV0dXJuIHModSl9ZWxzZSBpZihsIGluc3RhbmNlb2Ygd24pe2xldCB1PWwuZGVmaW5pdGlvbi5jb25jYXQoW25ldyBPcih7ZGVmaW5pdGlvbjpbbmV3IGtyKHt0ZXJtaW5hbFR5cGU6bC5zZXBhcmF0b3J9KV0uY29uY2F0KGwuZGVmaW5pdGlvbil9KV0pO249cyh1KX1lbHNlIGlmKGwgaW5zdGFuY2VvZiBPcil7bGV0IHU9bC5kZWZpbml0aW9uLmNvbmNhdChbbmV3IE9yKHtkZWZpbml0aW9uOmwuZGVmaW5pdGlvbn0pXSk7bj1zKHUpfWVsc2V7aWYobCBpbnN0YW5jZW9mIFRuKXJldHVybiBBZShsLmRlZmluaXRpb24sdT0+e3VyKHUuZGVmaW5pdGlvbik9PT0hMSYmKG49cyh1LmRlZmluaXRpb24pKX0pLG47aWYobCBpbnN0YW5jZW9mIGtyKXIucHVzaChsLnRlcm1pbmFsVHlwZSk7ZWxzZSB0aHJvdyBFcnJvcigibm9uIGV4aGF1c3RpdmUgbWF0Y2giKX1pKyt9cmV0dXJuIG4ucHVzaCh7cGFydGlhbFBhdGg6cixzdWZmaXhEZWY6Z2kodCxpKX0pLG59ZnVuY3Rpb24gJGsodCxlLHIsbil7bGV0IGk9IkVYSVRfTk9ORV9URVJNSU5BTCIsYT1baV0scz0iRVhJVF9BTFRFUk5BVElWRSIsbD0hMSx1PWUubGVuZ3RoLGg9dS1uLTEsZj1bXSxkPVtdO2ZvcihkLnB1c2goe2lkeDotMSxkZWY6dCxydWxlU3RhY2s6W10sb2NjdXJyZW5jZVN0YWNrOltdfSk7IXVyKGQpOyl7bGV0IHA9ZC5wb3AoKTtpZihwPT09cyl7bCYmZ2EoZCkuaWR4PD1oJiZkLnBvcCgpO2NvbnRpbnVlfWxldCBtPXAuZGVmLGc9cC5pZHgseT1wLnJ1bGVTdGFjayx2PXAub2NjdXJyZW5jZVN0YWNrO2lmKHVyKG0pKWNvbnRpbnVlO2xldCB4PW1bMF07aWYoeD09PWkpe2xldCBiPXtpZHg6ZyxkZWY6Z2kobSkscnVsZVN0YWNrOk51KHkpLG9jY3VycmVuY2VTdGFjazpOdSh2KX07ZC5wdXNoKGIpfWVsc2UgaWYoeCBpbnN0YW5jZW9mIGtyKWlmKGc8dS0xKXtsZXQgYj1nKzEsdz1lW2JdO2lmKHIodyx4LnRlcm1pbmFsVHlwZSkpe2xldCBDPXtpZHg6YixkZWY6Z2kobSkscnVsZVN0YWNrOnksb2NjdXJyZW5jZVN0YWNrOnZ9O2QucHVzaChDKX19ZWxzZSBpZihnPT09dS0xKWYucHVzaCh7bmV4dFRva2VuVHlwZTp4LnRlcm1pbmFsVHlwZSxuZXh0VG9rZW5PY2N1cnJlbmNlOnguaWR4LHJ1bGVTdGFjazp5LG9jY3VycmVuY2VTdGFjazp2fSksbD0hMDtlbHNlIHRocm93IEVycm9yKCJub24gZXhoYXVzdGl2ZSBtYXRjaCIpO2Vsc2UgaWYoeCBpbnN0YW5jZW9mIG9uKXtsZXQgYj1hbih5KTtiLnB1c2goeC5ub25UZXJtaW5hbE5hbWUpO2xldCB3PWFuKHYpO3cucHVzaCh4LmlkeCk7bGV0IEM9e2lkeDpnLGRlZjp4LmRlZmluaXRpb24uY29uY2F0KGEsZ2kobSkpLHJ1bGVTdGFjazpiLG9jY3VycmVuY2VTdGFjazp3fTtkLnB1c2goQyl9ZWxzZSBpZih4IGluc3RhbmNlb2YgbG4pe2xldCBiPXtpZHg6ZyxkZWY6Z2kobSkscnVsZVN0YWNrOnksb2NjdXJyZW5jZVN0YWNrOnZ9O2QucHVzaChiKSxkLnB1c2gocyk7bGV0IHc9e2lkeDpnLGRlZjp4LmRlZmluaXRpb24uY29uY2F0KGdpKG0pKSxydWxlU3RhY2s6eSxvY2N1cnJlbmNlU3RhY2s6dn07ZC5wdXNoKHcpfWVsc2UgaWYoeCBpbnN0YW5jZW9mIExuKXtsZXQgYj1uZXcgT3Ioe2RlZmluaXRpb246eC5kZWZpbml0aW9uLGlkeDp4LmlkeH0pLHc9eC5kZWZpbml0aW9uLmNvbmNhdChbYl0sZ2kobSkpLEM9e2lkeDpnLGRlZjp3LHJ1bGVTdGFjazp5LG9jY3VycmVuY2VTdGFjazp2fTtkLnB1c2goQyl9ZWxzZSBpZih4IGluc3RhbmNlb2YgUm4pe2xldCBiPW5ldyBrcih7dGVybWluYWxUeXBlOnguc2VwYXJhdG9yfSksdz1uZXcgT3Ioe2RlZmluaXRpb246W2JdLmNvbmNhdCh4LmRlZmluaXRpb24pLGlkeDp4LmlkeH0pLEM9eC5kZWZpbml0aW9uLmNvbmNhdChbd10sZ2kobSkpLFQ9e2lkeDpnLGRlZjpDLHJ1bGVTdGFjazp5LG9jY3VycmVuY2VTdGFjazp2fTtkLnB1c2goVCl9ZWxzZSBpZih4IGluc3RhbmNlb2Ygd24pe2xldCBiPXtpZHg6ZyxkZWY6Z2kobSkscnVsZVN0YWNrOnksb2NjdXJyZW5jZVN0YWNrOnZ9O2QucHVzaChiKSxkLnB1c2gocyk7bGV0IHc9bmV3IGtyKHt0ZXJtaW5hbFR5cGU6eC5zZXBhcmF0b3J9KSxDPW5ldyBPcih7ZGVmaW5pdGlvbjpbd10uY29uY2F0KHguZGVmaW5pdGlvbiksaWR4OnguaWR4fSksVD14LmRlZmluaXRpb24uY29uY2F0KFtDXSxnaShtKSksRT17aWR4OmcsZGVmOlQscnVsZVN0YWNrOnksb2NjdXJyZW5jZVN0YWNrOnZ9O2QucHVzaChFKX1lbHNlIGlmKHggaW5zdGFuY2VvZiBPcil7bGV0IGI9e2lkeDpnLGRlZjpnaShtKSxydWxlU3RhY2s6eSxvY2N1cnJlbmNlU3RhY2s6dn07ZC5wdXNoKGIpLGQucHVzaChzKTtsZXQgdz1uZXcgT3Ioe2RlZmluaXRpb246eC5kZWZpbml0aW9uLGlkeDp4LmlkeH0pLEM9eC5kZWZpbml0aW9uLmNvbmNhdChbd10sZ2kobSkpLFQ9e2lkeDpnLGRlZjpDLHJ1bGVTdGFjazp5LG9jY3VycmVuY2VTdGFjazp2fTtkLnB1c2goVCl9ZWxzZSBpZih4IGluc3RhbmNlb2YgVG4pZm9yKGxldCBiPXguZGVmaW5pdGlvbi5sZW5ndGgtMTtiPj0wO2ItLSl7bGV0IHc9eC5kZWZpbml0aW9uW2JdLEM9e2lkeDpnLGRlZjp3LmRlZmluaXRpb24uY29uY2F0KGdpKG0pKSxydWxlU3RhY2s6eSxvY2N1cnJlbmNlU3RhY2s6dn07ZC5wdXNoKEMpLGQucHVzaChzKX1lbHNlIGlmKHggaW5zdGFuY2VvZiBEbilkLnB1c2goe2lkeDpnLGRlZjp4LmRlZmluaXRpb24uY29uY2F0KGdpKG0pKSxydWxlU3RhY2s6eSxvY2N1cnJlbmNlU3RhY2s6dn0pO2Vsc2UgaWYoeCBpbnN0YW5jZW9mIGFzKWQucHVzaChLUGUoeCxnLHksdikpO2Vsc2UgdGhyb3cgRXJyb3IoIm5vbiBleGhhdXN0aXZlIG1hdGNoIil9cmV0dXJuIGZ9ZnVuY3Rpb24gS1BlKHQsZSxyLG4pe2xldCBpPWFuKHIpO2kucHVzaCh0Lm5hbWUpO2xldCBhPWFuKG4pO3JldHVybiBhLnB1c2goMSkse2lkeDplLGRlZjp0LmRlZmluaXRpb24scnVsZVN0YWNrOmksb2NjdXJyZW5jZVN0YWNrOmF9fXZhciBOTixPayxVZyxQayxveCxCayxseCxjeD1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7eE4oKTtBaygpO29zKCk7Tk49Y2xhc3MgZXh0ZW5kcyBPdXtzdGF0aWN7byh0aGlzLCJBYnN0cmFjdE5leHRQb3NzaWJsZVRva2Vuc1dhbGtlciIpfWNvbnN0cnVjdG9yKGUscil7c3VwZXIoKSx0aGlzLnRvcFByb2Q9ZSx0aGlzLnBhdGg9cix0aGlzLnBvc3NpYmxlVG9rVHlwZXM9W10sdGhpcy5uZXh0UHJvZHVjdGlvbk5hbWU9IiIsdGhpcy5uZXh0UHJvZHVjdGlvbk9jY3VycmVuY2U9MCx0aGlzLmZvdW5kPSExLHRoaXMuaXNBdEVuZE9mUGF0aD0hMX1zdGFydFdhbGtpbmcoKXtpZih0aGlzLmZvdW5kPSExLHRoaXMucGF0aC5ydWxlU3RhY2tbMF0hPT10aGlzLnRvcFByb2QubmFtZSl0aHJvdyBFcnJvcigiVGhlIHBhdGggZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgd2Fsa2VyJ3MgdG9wIFJ1bGUhIik7cmV0dXJuIHRoaXMucnVsZVN0YWNrPWFuKHRoaXMucGF0aC5ydWxlU3RhY2spLnJldmVyc2UoKSx0aGlzLm9jY3VycmVuY2VTdGFjaz1hbih0aGlzLnBhdGgub2NjdXJyZW5jZVN0YWNrKS5yZXZlcnNlKCksdGhpcy5ydWxlU3RhY2sucG9wKCksdGhpcy5vY2N1cnJlbmNlU3RhY2sucG9wKCksdGhpcy51cGRhdGVFeHBlY3RlZE5leHQoKSx0aGlzLndhbGsodGhpcy50b3BQcm9kKSx0aGlzLnBvc3NpYmxlVG9rVHlwZXN9d2FsayhlLHI9W10pe3RoaXMuZm91bmR8fHN1cGVyLndhbGsoZSxyKX13YWxrUHJvZFJlZihlLHIsbil7aWYoZS5yZWZlcmVuY2VkUnVsZS5uYW1lPT09dGhpcy5uZXh0UHJvZHVjdGlvbk5hbWUmJmUuaWR4PT09dGhpcy5uZXh0UHJvZHVjdGlvbk9jY3VycmVuY2Upe2xldCBpPXIuY29uY2F0KG4pO3RoaXMudXBkYXRlRXhwZWN0ZWROZXh0KCksdGhpcy53YWxrKGUucmVmZXJlbmNlZFJ1bGUsaSl9fXVwZGF0ZUV4cGVjdGVkTmV4dCgpe3VyKHRoaXMucnVsZVN0YWNrKT8odGhpcy5uZXh0UHJvZHVjdGlvbk5hbWU9IiIsdGhpcy5uZXh0UHJvZHVjdGlvbk9jY3VycmVuY2U9MCx0aGlzLmlzQXRFbmRPZlBhdGg9ITApOih0aGlzLm5leHRQcm9kdWN0aW9uTmFtZT10aGlzLnJ1bGVTdGFjay5wb3AoKSx0aGlzLm5leHRQcm9kdWN0aW9uT2NjdXJyZW5jZT10aGlzLm9jY3VycmVuY2VTdGFjay5wb3AoKSl9fSxPaz1jbGFzcyBleHRlbmRzIE5Oe3N0YXRpY3tvKHRoaXMsIk5leHRBZnRlclRva2VuV2Fsa2VyIil9Y29uc3RydWN0b3IoZSxyKXtzdXBlcihlLHIpLHRoaXMucGF0aD1yLHRoaXMubmV4dFRlcm1pbmFsTmFtZT0iIix0aGlzLm5leHRUZXJtaW5hbE9jY3VycmVuY2U9MCx0aGlzLm5leHRUZXJtaW5hbE5hbWU9dGhpcy5wYXRoLmxhc3RUb2submFtZSx0aGlzLm5leHRUZXJtaW5hbE9jY3VycmVuY2U9dGhpcy5wYXRoLmxhc3RUb2tPY2N1cnJlbmNlfXdhbGtUZXJtaW5hbChlLHIsbil7aWYodGhpcy5pc0F0RW5kT2ZQYXRoJiZlLnRlcm1pbmFsVHlwZS5uYW1lPT09dGhpcy5uZXh0VGVybWluYWxOYW1lJiZlLmlkeD09PXRoaXMubmV4dFRlcm1pbmFsT2NjdXJyZW5jZSYmIXRoaXMuZm91bmQpe2xldCBpPXIuY29uY2F0KG4pLGE9bmV3IERuKHtkZWZpbml0aW9uOml9KTt0aGlzLnBvc3NpYmxlVG9rVHlwZXM9b3AoYSksdGhpcy5mb3VuZD0hMH19fSxVZz1jbGFzcyBleHRlbmRzIE91e3N0YXRpY3tvKHRoaXMsIkFic3RyYWN0TmV4dFRlcm1pbmFsQWZ0ZXJQcm9kdWN0aW9uV2Fsa2VyIil9Y29uc3RydWN0b3IoZSxyKXtzdXBlcigpLHRoaXMudG9wUnVsZT1lLHRoaXMub2NjdXJyZW5jZT1yLHRoaXMucmVzdWx0PXt0b2tlbjp2b2lkIDAsb2NjdXJyZW5jZTp2b2lkIDAsaXNFbmRPZlJ1bGU6dm9pZCAwfX1zdGFydFdhbGtpbmcoKXtyZXR1cm4gdGhpcy53YWxrKHRoaXMudG9wUnVsZSksdGhpcy5yZXN1bHR9fSxQaz1jbGFzcyBleHRlbmRzIFVne3N0YXRpY3tvKHRoaXMsIk5leHRUZXJtaW5hbEFmdGVyTWFueVdhbGtlciIpfXdhbGtNYW55KGUscixuKXtpZihlLmlkeD09PXRoaXMub2NjdXJyZW5jZSl7bGV0IGk9aWEoci5jb25jYXQobikpO3RoaXMucmVzdWx0LmlzRW5kT2ZSdWxlPWk9PT12b2lkIDAsaSBpbnN0YW5jZW9mIGtyJiYodGhpcy5yZXN1bHQudG9rZW49aS50ZXJtaW5hbFR5cGUsdGhpcy5yZXN1bHQub2NjdXJyZW5jZT1pLmlkeCl9ZWxzZSBzdXBlci53YWxrTWFueShlLHIsbil9fSxveD1jbGFzcyBleHRlbmRzIFVne3N0YXRpY3tvKHRoaXMsIk5leHRUZXJtaW5hbEFmdGVyTWFueVNlcFdhbGtlciIpfXdhbGtNYW55U2VwKGUscixuKXtpZihlLmlkeD09PXRoaXMub2NjdXJyZW5jZSl7bGV0IGk9aWEoci5jb25jYXQobikpO3RoaXMucmVzdWx0LmlzRW5kT2ZSdWxlPWk9PT12b2lkIDAsaSBpbnN0YW5jZW9mIGtyJiYodGhpcy5yZXN1bHQudG9rZW49aS50ZXJtaW5hbFR5cGUsdGhpcy5yZXN1bHQub2NjdXJyZW5jZT1pLmlkeCl9ZWxzZSBzdXBlci53YWxrTWFueVNlcChlLHIsbil9fSxCaz1jbGFzcyBleHRlbmRzIFVne3N0YXRpY3tvKHRoaXMsIk5leHRUZXJtaW5hbEFmdGVyQXRMZWFzdE9uZVdhbGtlciIpfXdhbGtBdExlYXN0T25lKGUscixuKXtpZihlLmlkeD09PXRoaXMub2NjdXJyZW5jZSl7bGV0IGk9aWEoci5jb25jYXQobikpO3RoaXMucmVzdWx0LmlzRW5kT2ZSdWxlPWk9PT12b2lkIDAsaSBpbnN0YW5jZW9mIGtyJiYodGhpcy5yZXN1bHQudG9rZW49aS50ZXJtaW5hbFR5cGUsdGhpcy5yZXN1bHQub2NjdXJyZW5jZT1pLmlkeCl9ZWxzZSBzdXBlci53YWxrQXRMZWFzdE9uZShlLHIsbil9fSxseD1jbGFzcyBleHRlbmRzIFVne3N0YXRpY3tvKHRoaXMsIk5leHRUZXJtaW5hbEFmdGVyQXRMZWFzdE9uZVNlcFdhbGtlciIpfXdhbGtBdExlYXN0T25lU2VwKGUscixuKXtpZihlLmlkeD09PXRoaXMub2NjdXJyZW5jZSl7bGV0IGk9aWEoci5jb25jYXQobikpO3RoaXMucmVzdWx0LmlzRW5kT2ZSdWxlPWk9PT12b2lkIDAsaSBpbnN0YW5jZW9mIGtyJiYodGhpcy5yZXN1bHQudG9rZW49aS50ZXJtaW5hbFR5cGUsdGhpcy5yZXN1bHQub2NjdXJyZW5jZT1pLmlkeCl9ZWxzZSBzdXBlci53YWxrQXRMZWFzdE9uZVNlcChlLHIsbil9fTtvKEZrLCJwb3NzaWJsZVBhdGhzRnJvbSIpO28oJGssIm5leHRQb3NzaWJsZVRva2Vuc0FmdGVyIik7byhLUGUsImV4cGFuZFRvcExldmVsUnVsZSIpfSk7ZnVuY3Rpb24gdXgodCl7aWYodCBpbnN0YW5jZW9mIGxufHx0PT09Ik9wdGlvbiIpcmV0dXJuIGpuLk9QVElPTjtpZih0IGluc3RhbmNlb2YgT3J8fHQ9PT0iUmVwZXRpdGlvbiIpcmV0dXJuIGpuLlJFUEVUSVRJT047aWYodCBpbnN0YW5jZW9mIExufHx0PT09IlJlcGV0aXRpb25NYW5kYXRvcnkiKXJldHVybiBqbi5SRVBFVElUSU9OX01BTkRBVE9SWTtpZih0IGluc3RhbmNlb2YgUm58fHQ9PT0iUmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3IiKXJldHVybiBqbi5SRVBFVElUSU9OX01BTkRBVE9SWV9XSVRIX1NFUEFSQVRPUjtpZih0IGluc3RhbmNlb2Ygd258fHQ9PT0iUmVwZXRpdGlvbldpdGhTZXBhcmF0b3IiKXJldHVybiBqbi5SRVBFVElUSU9OX1dJVEhfU0VQQVJBVE9SO2lmKHQgaW5zdGFuY2VvZiBUbnx8dD09PSJBbHRlcm5hdGlvbiIpcmV0dXJuIGpuLkFMVEVSTkFUSU9OO3Rocm93IEVycm9yKCJub24gZXhoYXVzdGl2ZSBtYXRjaCIpfWZ1bmN0aW9uIEdrKHQpe2xldHtvY2N1cnJlbmNlOmUscnVsZTpyLHByb2RUeXBlOm4sbWF4TG9va2FoZWFkOml9PXQsYT11eChuKTtyZXR1cm4gYT09PWpuLkFMVEVSTkFUSU9OP0hnKGUscixpKTpXZyhlLHIsYSxpKX1mdW5jdGlvbiBtc2UodCxlLHIsbixpLGEpe2xldCBzPUhnKHQsZSxyKSxsPXdzZShzKT96ZzpQdTtyZXR1cm4gYShzLG4sbCxpKX1mdW5jdGlvbiBnc2UodCxlLHIsbixpLGEpe2xldCBzPVdnKHQsZSxpLHIpLGw9d3NlKHMpP3pnOlB1O3JldHVybiBhKHNbMF0sbCxuKX1mdW5jdGlvbiB5c2UodCxlLHIsbil7bGV0IGk9dC5sZW5ndGgsYT1NYSh0LHM9Pk1hKHMsbD0+bC5sZW5ndGg9PT0xKSk7aWYoZSlyZXR1cm4gZnVuY3Rpb24ocyl7bGV0IGw9SmUocyx1PT51LkdBVEUpO2ZvcihsZXQgdT0wO3U8aTt1Kyspe2xldCBoPXRbdV0sZj1oLmxlbmd0aCxkPWxbdV07aWYoIShkIT09dm9pZCAwJiZkLmNhbGwodGhpcyk9PT0hMSkpZTpmb3IobGV0IHA9MDtwPGY7cCsrKXtsZXQgbT1oW3BdLGc9bS5sZW5ndGg7Zm9yKGxldCB5PTA7eTxnO3krKyl7bGV0IHY9dGhpcy5MQSh5KzEpO2lmKHIodixtW3ldKT09PSExKWNvbnRpbnVlIGV9cmV0dXJuIHV9fX07aWYoYSYmIW4pe2xldCBzPUplKHQsdT0+cXIodSkpLGw9WHIocywodSxoLGYpPT4oQWUoaCxkPT57QnQodSxkLnRva2VuVHlwZUlkeCl8fCh1W2QudG9rZW5UeXBlSWR4XT1mKSxBZShkLmNhdGVnb3J5TWF0Y2hlcyxwPT57QnQodSxwKXx8KHVbcF09Zil9KX0pLHUpLHt9KTtyZXR1cm4gZnVuY3Rpb24oKXtsZXQgdT10aGlzLkxBKDEpO3JldHVybiBsW3UudG9rZW5UeXBlSWR4XX19ZWxzZSByZXR1cm4gZnVuY3Rpb24oKXtmb3IobGV0IHM9MDtzPGk7cysrKXtsZXQgbD10W3NdLHU9bC5sZW5ndGg7ZTpmb3IobGV0IGg9MDtoPHU7aCsrKXtsZXQgZj1sW2hdLGQ9Zi5sZW5ndGg7Zm9yKGxldCBwPTA7cDxkO3ArKyl7bGV0IG09dGhpcy5MQShwKzEpO2lmKHIobSxmW3BdKT09PSExKWNvbnRpbnVlIGV9cmV0dXJuIHN9fX19ZnVuY3Rpb24gdnNlKHQsZSxyKXtsZXQgbj1NYSh0LGE9PmEubGVuZ3RoPT09MSksaT10Lmxlbmd0aDtpZihuJiYhcil7bGV0IGE9cXIodCk7aWYoYS5sZW5ndGg9PT0xJiZ1cihhWzBdLmNhdGVnb3J5TWF0Y2hlcykpe2xldCBsPWFbMF0udG9rZW5UeXBlSWR4O3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLkxBKDEpLnRva2VuVHlwZUlkeD09PWx9fWVsc2V7bGV0IHM9WHIoYSwobCx1LGgpPT4obFt1LnRva2VuVHlwZUlkeF09ITAsQWUodS5jYXRlZ29yeU1hdGNoZXMsZj0+e2xbZl09ITB9KSxsKSxbXSk7cmV0dXJuIGZ1bmN0aW9uKCl7bGV0IGw9dGhpcy5MQSgxKTtyZXR1cm4gc1tsLnRva2VuVHlwZUlkeF09PT0hMH19fWVsc2UgcmV0dXJuIGZ1bmN0aW9uKCl7ZTpmb3IobGV0IGE9MDthPGk7YSsrKXtsZXQgcz10W2FdLGw9cy5sZW5ndGg7Zm9yKGxldCB1PTA7dTxsO3UrKyl7bGV0IGg9dGhpcy5MQSh1KzEpO2lmKGUoaCxzW3VdKT09PSExKWNvbnRpbnVlIGV9cmV0dXJuITB9cmV0dXJuITF9fWZ1bmN0aW9uIHBzZSh0KXtsZXQgZT1uZXcgQXJyYXkodCk7Zm9yKGxldCByPTA7cjx0O3IrKyllW3JdPVtdO3JldHVybiBlfWZ1bmN0aW9uIE1OKHQpe2xldCBlPVsiIl07Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspe2xldCBuPXRbcl0saT1bXTtmb3IobGV0IGE9MDthPGUubGVuZ3RoO2ErKyl7bGV0IHM9ZVthXTtpLnB1c2gocysiXyIrbi50b2tlblR5cGVJZHgpO2ZvcihsZXQgbD0wO2w8bi5jYXRlZ29yeU1hdGNoZXMubGVuZ3RoO2wrKyl7bGV0IHU9Il8iK24uY2F0ZWdvcnlNYXRjaGVzW2xdO2kucHVzaChzK3UpfX1lPWl9cmV0dXJuIGV9ZnVuY3Rpb24gUVBlKHQsZSxyKXtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKyl7aWYobj09PXIpY29udGludWU7bGV0IGk9dFtuXTtmb3IobGV0IGE9MDthPGUubGVuZ3RoO2ErKyl7bGV0IHM9ZVthXTtpZihpW3NdPT09ITApcmV0dXJuITF9fXJldHVybiEwfWZ1bmN0aW9uIHhzZSh0LGUpe2xldCByPUplKHQscz0+RmsoW3NdLDEpKSxuPXBzZShyLmxlbmd0aCksaT1KZShyLHM9PntsZXQgbD17fTtyZXR1cm4gQWUocyx1PT57bGV0IGg9TU4odS5wYXJ0aWFsUGF0aCk7QWUoaCxmPT57bFtmXT0hMH0pfSksbH0pLGE9cjtmb3IobGV0IHM9MTtzPD1lO3MrKyl7bGV0IGw9YTthPXBzZShsLmxlbmd0aCk7Zm9yKGxldCB1PTA7dTxsLmxlbmd0aDt1Kyspe2xldCBoPWxbdV07Zm9yKGxldCBmPTA7ZjxoLmxlbmd0aDtmKyspe2xldCBkPWhbZl0ucGFydGlhbFBhdGgscD1oW2ZdLnN1ZmZpeERlZixtPU1OKGQpO2lmKFFQZShpLG0sdSl8fHVyKHApfHxkLmxlbmd0aD09PWUpe2xldCB5PW5bdV07aWYoVmsoeSxkKT09PSExKXt5LnB1c2goZCk7Zm9yKGxldCB2PTA7djxtLmxlbmd0aDt2Kyspe2xldCB4PW1bdl07aVt1XVt4XT0hMH19fWVsc2V7bGV0IHk9RmsocCxzKzEsZCk7YVt1XT1hW3VdLmNvbmNhdCh5KSxBZSh5LHY9PntsZXQgeD1NTih2LnBhcnRpYWxQYXRoKTtBZSh4LGI9PntpW3VdW2JdPSEwfSl9KX19fX1yZXR1cm4gbn1mdW5jdGlvbiBIZyh0LGUscixuKXtsZXQgaT1uZXcgemsodCxqbi5BTFRFUk5BVElPTixuKTtyZXR1cm4gZS5hY2NlcHQoaSkseHNlKGkucmVzdWx0LHIpfWZ1bmN0aW9uIFdnKHQsZSxyLG4pe2xldCBpPW5ldyB6ayh0LHIpO2UuYWNjZXB0KGkpO2xldCBhPWkucmVzdWx0LGw9bmV3IElOKGUsdCxyKS5zdGFydFdhbGtpbmcoKSx1PW5ldyBEbih7ZGVmaW5pdGlvbjphfSksaD1uZXcgRG4oe2RlZmluaXRpb246bH0pO3JldHVybiB4c2UoW3UsaF0sbil9ZnVuY3Rpb24gVmsodCxlKXtlOmZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXtsZXQgbj10W3JdO2lmKG4ubGVuZ3RoPT09ZS5sZW5ndGgpe2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKXtsZXQgYT1lW2ldLHM9bltpXTtpZigoYT09PXN8fHMuY2F0ZWdvcnlNYXRjaGVzTWFwW2EudG9rZW5UeXBlSWR4XSE9PXZvaWQgMCk9PT0hMSljb250aW51ZSBlfXJldHVybiEwfX1yZXR1cm4hMX1mdW5jdGlvbiBic2UodCxlKXtyZXR1cm4gdC5sZW5ndGg8ZS5sZW5ndGgmJk1hKHQsKHIsbik9PntsZXQgaT1lW25dO3JldHVybiByPT09aXx8aS5jYXRlZ29yeU1hdGNoZXNNYXBbci50b2tlblR5cGVJZHhdfSl9ZnVuY3Rpb24gd3NlKHQpe3JldHVybiBNYSh0LGU9Pk1hKGUscj0+TWEocixuPT51cihuLmNhdGVnb3J5TWF0Y2hlcykpKSl9dmFyIGpuLElOLHprLHFnPU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTtjeCgpO0FrKCk7Y3AoKTtvcygpOyhmdW5jdGlvbih0KXt0W3QuT1BUSU9OPTBdPSJPUFRJT04iLHRbdC5SRVBFVElUSU9OPTFdPSJSRVBFVElUSU9OIix0W3QuUkVQRVRJVElPTl9NQU5EQVRPUlk9Ml09IlJFUEVUSVRJT05fTUFOREFUT1JZIix0W3QuUkVQRVRJVElPTl9NQU5EQVRPUllfV0lUSF9TRVBBUkFUT1I9M109IlJFUEVUSVRJT05fTUFOREFUT1JZX1dJVEhfU0VQQVJBVE9SIix0W3QuUkVQRVRJVElPTl9XSVRIX1NFUEFSQVRPUj00XT0iUkVQRVRJVElPTl9XSVRIX1NFUEFSQVRPUiIsdFt0LkFMVEVSTkFUSU9OPTVdPSJBTFRFUk5BVElPTiJ9KShqbnx8KGpuPXt9KSk7byh1eCwiZ2V0UHJvZFR5cGUiKTtvKEdrLCJnZXRMb29rYWhlYWRQYXRocyIpO28obXNlLCJidWlsZExvb2thaGVhZEZ1bmNGb3JPciIpO28oZ3NlLCJidWlsZExvb2thaGVhZEZ1bmNGb3JPcHRpb25hbFByb2QiKTtvKHlzZSwiYnVpbGRBbHRlcm5hdGl2ZXNMb29rQWhlYWRGdW5jIik7byh2c2UsImJ1aWxkU2luZ2xlQWx0ZXJuYXRpdmVMb29rYWhlYWRGdW5jdGlvbiIpO0lOPWNsYXNzIGV4dGVuZHMgT3V7c3RhdGlje28odGhpcywiUmVzdERlZmluaXRpb25GaW5kZXJXYWxrZXIiKX1jb25zdHJ1Y3RvcihlLHIsbil7c3VwZXIoKSx0aGlzLnRvcFByb2Q9ZSx0aGlzLnRhcmdldE9jY3VycmVuY2U9cix0aGlzLnRhcmdldFByb2RUeXBlPW59c3RhcnRXYWxraW5nKCl7cmV0dXJuIHRoaXMud2Fsayh0aGlzLnRvcFByb2QpLHRoaXMucmVzdERlZn1jaGVja0lzVGFyZ2V0KGUscixuLGkpe3JldHVybiBlLmlkeD09PXRoaXMudGFyZ2V0T2NjdXJyZW5jZSYmdGhpcy50YXJnZXRQcm9kVHlwZT09PXI/KHRoaXMucmVzdERlZj1uLmNvbmNhdChpKSwhMCk6ITF9d2Fsa09wdGlvbihlLHIsbil7dGhpcy5jaGVja0lzVGFyZ2V0KGUsam4uT1BUSU9OLHIsbil8fHN1cGVyLndhbGtPcHRpb24oZSxyLG4pfXdhbGtBdExlYXN0T25lKGUscixuKXt0aGlzLmNoZWNrSXNUYXJnZXQoZSxqbi5SRVBFVElUSU9OX01BTkRBVE9SWSxyLG4pfHxzdXBlci53YWxrT3B0aW9uKGUscixuKX13YWxrQXRMZWFzdE9uZVNlcChlLHIsbil7dGhpcy5jaGVja0lzVGFyZ2V0KGUsam4uUkVQRVRJVElPTl9NQU5EQVRPUllfV0lUSF9TRVBBUkFUT1IscixuKXx8c3VwZXIud2Fsa09wdGlvbihlLHIsbil9d2Fsa01hbnkoZSxyLG4pe3RoaXMuY2hlY2tJc1RhcmdldChlLGpuLlJFUEVUSVRJT04scixuKXx8c3VwZXIud2Fsa09wdGlvbihlLHIsbil9d2Fsa01hbnlTZXAoZSxyLG4pe3RoaXMuY2hlY2tJc1RhcmdldChlLGpuLlJFUEVUSVRJT05fV0lUSF9TRVBBUkFUT1IscixuKXx8c3VwZXIud2Fsa09wdGlvbihlLHIsbil9fSx6az1jbGFzcyBleHRlbmRzIHNze3N0YXRpY3tvKHRoaXMsIkluc2lkZURlZmluaXRpb25GaW5kZXJWaXNpdG9yIil9Y29uc3RydWN0b3IoZSxyLG4pe3N1cGVyKCksdGhpcy50YXJnZXRPY2N1cnJlbmNlPWUsdGhpcy50YXJnZXRQcm9kVHlwZT1yLHRoaXMudGFyZ2V0UmVmPW4sdGhpcy5yZXN1bHQ9W119Y2hlY2tJc1RhcmdldChlLHIpe2UuaWR4PT09dGhpcy50YXJnZXRPY2N1cnJlbmNlJiZ0aGlzLnRhcmdldFByb2RUeXBlPT09ciYmKHRoaXMudGFyZ2V0UmVmPT09dm9pZCAwfHxlPT09dGhpcy50YXJnZXRSZWYpJiYodGhpcy5yZXN1bHQ9ZS5kZWZpbml0aW9uKX12aXNpdE9wdGlvbihlKXt0aGlzLmNoZWNrSXNUYXJnZXQoZSxqbi5PUFRJT04pfXZpc2l0UmVwZXRpdGlvbihlKXt0aGlzLmNoZWNrSXNUYXJnZXQoZSxqbi5SRVBFVElUSU9OKX12aXNpdFJlcGV0aXRpb25NYW5kYXRvcnkoZSl7dGhpcy5jaGVja0lzVGFyZ2V0KGUsam4uUkVQRVRJVElPTl9NQU5EQVRPUlkpfXZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3IoZSl7dGhpcy5jaGVja0lzVGFyZ2V0KGUsam4uUkVQRVRJVElPTl9NQU5EQVRPUllfV0lUSF9TRVBBUkFUT1IpfXZpc2l0UmVwZXRpdGlvbldpdGhTZXBhcmF0b3IoZSl7dGhpcy5jaGVja0lzVGFyZ2V0KGUsam4uUkVQRVRJVElPTl9XSVRIX1NFUEFSQVRPUil9dmlzaXRBbHRlcm5hdGlvbihlKXt0aGlzLmNoZWNrSXNUYXJnZXQoZSxqbi5BTFRFUk5BVElPTil9fTtvKHBzZSwiaW5pdGlhbGl6ZUFycmF5T2ZBcnJheXMiKTtvKE1OLCJwYXRoVG9IYXNoS2V5cyIpO28oUVBlLCJpc1VuaXF1ZVByZWZpeEhhc2giKTtvKHhzZSwibG9va0FoZWFkU2VxdWVuY2VGcm9tQWx0ZXJuYXRpdmVzIik7byhIZywiZ2V0TG9va2FoZWFkUGF0aHNGb3JPciIpO28oV2csImdldExvb2thaGVhZFBhdGhzRm9yT3B0aW9uYWxQcm9kIik7byhWaywiY29udGFpbnNQYXRoIik7byhic2UsImlzU3RyaWN0UHJlZml4T2ZQYXRoIik7byh3c2UsImFyZVRva2VuQ2F0ZWdvcmllc05vdFVzZWQiKX0pO2Z1bmN0aW9uIFRzZSh0KXtsZXQgZT10Lmxvb2thaGVhZFN0cmF0ZWd5LnZhbGlkYXRlKHtydWxlczp0LnJ1bGVzLHRva2VuVHlwZXM6dC50b2tlblR5cGVzLGdyYW1tYXJOYW1lOnQuZ3JhbW1hck5hbWV9KTtyZXR1cm4gSmUoZSxyPT5PYmplY3QuYXNzaWduKHt0eXBlOnppLkNVU1RPTV9MT09LQUhFQURfVkFMSURBVElPTn0scikpfWZ1bmN0aW9uIGtzZSh0LGUscixuKXtsZXQgaT15YSh0LHU9PlpQZSh1LHIpKSxhPWlCZSh0LGUscikscz15YSh0LHU9PnRCZSh1LHIpKSxsPXlhKHQsdT0+ZUJlKHUsdCxuLHIpKTtyZXR1cm4gaS5jb25jYXQoYSxzLGwpfWZ1bmN0aW9uIFpQZSh0LGUpe2xldCByPW5ldyBPTjt0LmFjY2VwdChyKTtsZXQgbj1yLmFsbFByb2R1Y3Rpb25zLGk9SUwobixKUGUpLGE9T3MoaSxsPT5sLmxlbmd0aD4xKTtyZXR1cm4gSmUoYnIoYSksbD0+e2xldCB1PWlhKGwpLGg9ZS5idWlsZER1cGxpY2F0ZUZvdW5kRXJyb3IodCxsKSxmPUJzKHUpLGQ9e21lc3NhZ2U6aCx0eXBlOnppLkRVUExJQ0FURV9QUk9EVUNUSU9OUyxydWxlTmFtZTp0Lm5hbWUsZHNsTmFtZTpmLG9jY3VycmVuY2U6dS5pZHh9LHA9RXNlKHUpO3JldHVybiBwJiYoZC5wYXJhbWV0ZXI9cCksZH0pfWZ1bmN0aW9uIEpQZSh0KXtyZXR1cm5gJHtCcyh0KX1fI18ke3QuaWR4fV8jXyR7RXNlKHQpfWB9ZnVuY3Rpb24gRXNlKHQpe3JldHVybiB0IGluc3RhbmNlb2Yga3I/dC50ZXJtaW5hbFR5cGUubmFtZTp0IGluc3RhbmNlb2Ygb24/dC5ub25UZXJtaW5hbE5hbWU6IiJ9ZnVuY3Rpb24gZUJlKHQsZSxyLG4pe2xldCBpPVtdO2lmKFhyKGUsKHMsbCk9PmwubmFtZT09PXQubmFtZT9zKzE6cywwKT4xKXtsZXQgcz1uLmJ1aWxkRHVwbGljYXRlUnVsZU5hbWVFcnJvcih7dG9wTGV2ZWxSdWxlOnQsZ3JhbW1hck5hbWU6cn0pO2kucHVzaCh7bWVzc2FnZTpzLHR5cGU6emkuRFVQTElDQVRFX1JVTEVfTkFNRSxydWxlTmFtZTp0Lm5hbWV9KX1yZXR1cm4gaX1mdW5jdGlvbiBTc2UodCxlLHIpe2xldCBuPVtdLGk7cmV0dXJuIHFuKGUsdCl8fChpPWBJbnZhbGlkIHJ1bGUgb3ZlcnJpZGUsIHJ1bGU6IC0+JHt0fTwtIGNhbm5vdCBiZSBvdmVycmlkZGVuIGluIHRoZSBncmFtbWFyOiAtPiR7cn08LWFzIGl0IGlzIG5vdCBkZWZpbmVkIGluIGFueSBvZiB0aGUgc3VwZXIgZ3JhbW1hcnMgYCxuLnB1c2goe21lc3NhZ2U6aSx0eXBlOnppLklOVkFMSURfUlVMRV9PVkVSUklERSxydWxlTmFtZTp0fSkpLG59ZnVuY3Rpb24gQk4odCxlLHIsbj1bXSl7bGV0IGk9W10sYT1VayhlLmRlZmluaXRpb24pO2lmKHVyKGEpKXJldHVybltdO3tsZXQgcz10Lm5hbWU7cW4oYSx0KSYmaS5wdXNoKHttZXNzYWdlOnIuYnVpbGRMZWZ0UmVjdXJzaW9uRXJyb3Ioe3RvcExldmVsUnVsZTp0LGxlZnRSZWN1cnNpb25QYXRoOm59KSx0eXBlOnppLkxFRlRfUkVDVVJTSU9OLHJ1bGVOYW1lOnN9KTtsZXQgdT1aaChhLG4uY29uY2F0KFt0XSkpLGg9eWEodSxmPT57bGV0IGQ9YW4obik7cmV0dXJuIGQucHVzaChmKSxCTih0LGYscixkKX0pO3JldHVybiBpLmNvbmNhdChoKX19ZnVuY3Rpb24gVWsodCl7bGV0IGU9W107aWYodXIodCkpcmV0dXJuIGU7bGV0IHI9aWEodCk7aWYociBpbnN0YW5jZW9mIG9uKWUucHVzaChyLnJlZmVyZW5jZWRSdWxlKTtlbHNlIGlmKHIgaW5zdGFuY2VvZiBEbnx8ciBpbnN0YW5jZW9mIGxufHxyIGluc3RhbmNlb2YgTG58fHIgaW5zdGFuY2VvZiBSbnx8ciBpbnN0YW5jZW9mIHdufHxyIGluc3RhbmNlb2YgT3IpZT1lLmNvbmNhdChVayhyLmRlZmluaXRpb24pKTtlbHNlIGlmKHIgaW5zdGFuY2VvZiBUbillPXFyKEplKHIuZGVmaW5pdGlvbixhPT5VayhhLmRlZmluaXRpb24pKSk7ZWxzZSBpZighKHIgaW5zdGFuY2VvZiBrcikpdGhyb3cgRXJyb3IoIm5vbiBleGhhdXN0aXZlIG1hdGNoIik7bGV0IG49c3AociksaT10Lmxlbmd0aD4xO2lmKG4mJmkpe2xldCBhPWdpKHQpO3JldHVybiBlLmNvbmNhdChVayhhKSl9ZWxzZSByZXR1cm4gZX1mdW5jdGlvbiBDc2UodCxlKXtsZXQgcj1uZXcgaHg7dC5hY2NlcHQocik7bGV0IG49ci5hbHRlcm5hdGlvbnM7cmV0dXJuIHlhKG4sYT0+e2xldCBzPU51KGEuZGVmaW5pdGlvbik7cmV0dXJuIHlhKHMsKGwsdSk9PntsZXQgaD0kayhbbF0sW10sUHUsMSk7cmV0dXJuIHVyKGgpP1t7bWVzc2FnZTplLmJ1aWxkRW1wdHlBbHRlcm5hdGlvbkVycm9yKHt0b3BMZXZlbFJ1bGU6dCxhbHRlcm5hdGlvbjphLGVtcHR5Q2hvaWNlSWR4OnV9KSx0eXBlOnppLk5PTkVfTEFTVF9FTVBUWV9BTFQscnVsZU5hbWU6dC5uYW1lLG9jY3VycmVuY2U6YS5pZHgsYWx0ZXJuYXRpdmU6dSsxfV06W119KX0pfWZ1bmN0aW9uIEFzZSh0LGUscil7bGV0IG49bmV3IGh4O3QuYWNjZXB0KG4pO2xldCBpPW4uYWx0ZXJuYXRpb25zO3JldHVybiBpPUpoKGkscz0+cy5pZ25vcmVBbWJpZ3VpdGllcz09PSEwKSx5YShpLHM9PntsZXQgbD1zLmlkeCx1PXMubWF4TG9va2FoZWFkfHxlLGg9SGcobCx0LHUscyksZj1yQmUoaCxzLHQsciksZD1uQmUoaCxzLHQscik7cmV0dXJuIGYuY29uY2F0KGQpfSl9ZnVuY3Rpb24gdEJlKHQsZSl7bGV0IHI9bmV3IGh4O3QuYWNjZXB0KHIpO2xldCBuPXIuYWx0ZXJuYXRpb25zO3JldHVybiB5YShuLGE9PmEuZGVmaW5pdGlvbi5sZW5ndGg+MjU1P1t7bWVzc2FnZTplLmJ1aWxkVG9vTWFueUFsdGVybmF0aXZlc0Vycm9yKHt0b3BMZXZlbFJ1bGU6dCxhbHRlcm5hdGlvbjphfSksdHlwZTp6aS5UT09fTUFOWV9BTFRTLHJ1bGVOYW1lOnQubmFtZSxvY2N1cnJlbmNlOmEuaWR4fV06W10pfWZ1bmN0aW9uIF9zZSh0LGUscil7bGV0IG49W107cmV0dXJuIEFlKHQsaT0+e2xldCBhPW5ldyBQTjtpLmFjY2VwdChhKTtsZXQgcz1hLmFsbFByb2R1Y3Rpb25zO0FlKHMsbD0+e2xldCB1PXV4KGwpLGg9bC5tYXhMb29rYWhlYWR8fGUsZj1sLmlkeCxwPVdnKGYsaSx1LGgpWzBdO2lmKHVyKHFyKHApKSl7bGV0IG09ci5idWlsZEVtcHR5UmVwZXRpdGlvbkVycm9yKHt0b3BMZXZlbFJ1bGU6aSxyZXBldGl0aW9uOmx9KTtuLnB1c2goe21lc3NhZ2U6bSx0eXBlOnppLk5PX05PTl9FTVBUWV9MT09LQUhFQUQscnVsZU5hbWU6aS5uYW1lfSl9fSl9KSxufWZ1bmN0aW9uIHJCZSh0LGUscixuKXtsZXQgaT1bXSxhPVhyKHQsKGwsdSxoKT0+KGUuZGVmaW5pdGlvbltoXS5pZ25vcmVBbWJpZ3VpdGllcz09PSEwfHxBZSh1LGY9PntsZXQgZD1baF07QWUodCwocCxtKT0+e2ghPT1tJiZWayhwLGYpJiZlLmRlZmluaXRpb25bbV0uaWdub3JlQW1iaWd1aXRpZXMhPT0hMCYmZC5wdXNoKG0pfSksZC5sZW5ndGg+MSYmIVZrKGksZikmJihpLnB1c2goZiksbC5wdXNoKHthbHRzOmQscGF0aDpmfSkpfSksbCksW10pO3JldHVybiBKZShhLGw9PntsZXQgdT1KZShsLmFsdHMsZj0+ZisxKTtyZXR1cm57bWVzc2FnZTpuLmJ1aWxkQWx0ZXJuYXRpb25BbWJpZ3VpdHlFcnJvcih7dG9wTGV2ZWxSdWxlOnIsYWx0ZXJuYXRpb246ZSxhbWJpZ3VpdHlJbmRpY2VzOnUscHJlZml4UGF0aDpsLnBhdGh9KSx0eXBlOnppLkFNQklHVU9VU19BTFRTLHJ1bGVOYW1lOnIubmFtZSxvY2N1cnJlbmNlOmUuaWR4LGFsdGVybmF0aXZlczpsLmFsdHN9fSl9ZnVuY3Rpb24gbkJlKHQsZSxyLG4pe2xldCBpPVhyKHQsKHMsbCx1KT0+e2xldCBoPUplKGwsZj0+KHtpZHg6dSxwYXRoOmZ9KSk7cmV0dXJuIHMuY29uY2F0KGgpfSxbXSk7cmV0dXJuIFRjKHlhKGkscz0+e2lmKGUuZGVmaW5pdGlvbltzLmlkeF0uaWdub3JlQW1iaWd1aXRpZXM9PT0hMClyZXR1cm5bXTtsZXQgdT1zLmlkeCxoPXMucGF0aCxmPVlyKGkscD0+ZS5kZWZpbml0aW9uW3AuaWR4XS5pZ25vcmVBbWJpZ3VpdGllcyE9PSEwJiZwLmlkeDx1JiZic2UocC5wYXRoLGgpKTtyZXR1cm4gSmUoZixwPT57bGV0IG09W3AuaWR4KzEsdSsxXSxnPWUuaWR4PT09MD8iIjplLmlkeDtyZXR1cm57bWVzc2FnZTpuLmJ1aWxkQWx0ZXJuYXRpb25QcmVmaXhBbWJpZ3VpdHlFcnJvcih7dG9wTGV2ZWxSdWxlOnIsYWx0ZXJuYXRpb246ZSxhbWJpZ3VpdHlJbmRpY2VzOm0scHJlZml4UGF0aDpwLnBhdGh9KSx0eXBlOnppLkFNQklHVU9VU19QUkVGSVhfQUxUUyxydWxlTmFtZTpyLm5hbWUsb2NjdXJyZW5jZTpnLGFsdGVybmF0aXZlczptfX0pfSkpfWZ1bmN0aW9uIGlCZSh0LGUscil7bGV0IG49W10saT1KZShlLGE9PmEubmFtZSk7cmV0dXJuIEFlKHQsYT0+e2xldCBzPWEubmFtZTtpZihxbihpLHMpKXtsZXQgbD1yLmJ1aWxkTmFtZXNwYWNlQ29uZmxpY3RFcnJvcihhKTtuLnB1c2goe21lc3NhZ2U6bCx0eXBlOnppLkNPTkZMSUNUX1RPS0VOU19SVUxFU19OQU1FU1BBQ0UscnVsZU5hbWU6c30pfX0pLG59dmFyIE9OLGh4LFBOLGZ4PU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTtGcygpO29zKCk7cWcoKTtjeCgpO2NwKCk7byhUc2UsInZhbGlkYXRlTG9va2FoZWFkIik7byhrc2UsInZhbGlkYXRlR3JhbW1hciIpO28oWlBlLCJ2YWxpZGF0ZUR1cGxpY2F0ZVByb2R1Y3Rpb25zIik7byhKUGUsImlkZW50aWZ5UHJvZHVjdGlvbkZvckR1cGxpY2F0ZXMiKTtvKEVzZSwiZ2V0RXh0cmFQcm9kdWN0aW9uQXJndW1lbnQiKTtPTj1jbGFzcyBleHRlbmRzIHNze3N0YXRpY3tvKHRoaXMsIk9jY3VycmVuY2VWYWxpZGF0aW9uQ29sbGVjdG9yIil9Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuYWxsUHJvZHVjdGlvbnM9W119dmlzaXROb25UZXJtaW5hbChlKXt0aGlzLmFsbFByb2R1Y3Rpb25zLnB1c2goZSl9dmlzaXRPcHRpb24oZSl7dGhpcy5hbGxQcm9kdWN0aW9ucy5wdXNoKGUpfXZpc2l0UmVwZXRpdGlvbldpdGhTZXBhcmF0b3IoZSl7dGhpcy5hbGxQcm9kdWN0aW9ucy5wdXNoKGUpfXZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeShlKXt0aGlzLmFsbFByb2R1Y3Rpb25zLnB1c2goZSl9dmlzaXRSZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvcihlKXt0aGlzLmFsbFByb2R1Y3Rpb25zLnB1c2goZSl9dmlzaXRSZXBldGl0aW9uKGUpe3RoaXMuYWxsUHJvZHVjdGlvbnMucHVzaChlKX12aXNpdEFsdGVybmF0aW9uKGUpe3RoaXMuYWxsUHJvZHVjdGlvbnMucHVzaChlKX12aXNpdFRlcm1pbmFsKGUpe3RoaXMuYWxsUHJvZHVjdGlvbnMucHVzaChlKX19O28oZUJlLCJ2YWxpZGF0ZVJ1bGVEb2VzTm90QWxyZWFkeUV4aXN0Iik7byhTc2UsInZhbGlkYXRlUnVsZUlzT3ZlcnJpZGRlbiIpO28oQk4sInZhbGlkYXRlTm9MZWZ0UmVjdXJzaW9uIik7byhVaywiZ2V0Rmlyc3ROb25lVGVybWluYWwiKTtoeD1jbGFzcyBleHRlbmRzIHNze3N0YXRpY3tvKHRoaXMsIk9yQ29sbGVjdG9yIil9Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuYWx0ZXJuYXRpb25zPVtdfXZpc2l0QWx0ZXJuYXRpb24oZSl7dGhpcy5hbHRlcm5hdGlvbnMucHVzaChlKX19O28oQ3NlLCJ2YWxpZGF0ZUVtcHR5T3JBbHRlcm5hdGl2ZSIpO28oQXNlLCJ2YWxpZGF0ZUFtYmlndW91c0FsdGVybmF0aW9uQWx0ZXJuYXRpdmVzIik7UE49Y2xhc3MgZXh0ZW5kcyBzc3tzdGF0aWN7byh0aGlzLCJSZXBldGl0aW9uQ29sbGVjdG9yIil9Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuYWxsUHJvZHVjdGlvbnM9W119dmlzaXRSZXBldGl0aW9uV2l0aFNlcGFyYXRvcihlKXt0aGlzLmFsbFByb2R1Y3Rpb25zLnB1c2goZSl9dmlzaXRSZXBldGl0aW9uTWFuZGF0b3J5KGUpe3RoaXMuYWxsUHJvZHVjdGlvbnMucHVzaChlKX12aXNpdFJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yKGUpe3RoaXMuYWxsUHJvZHVjdGlvbnMucHVzaChlKX12aXNpdFJlcGV0aXRpb24oZSl7dGhpcy5hbGxQcm9kdWN0aW9ucy5wdXNoKGUpfX07byh0QmUsInZhbGlkYXRlVG9vTWFueUFsdHMiKTtvKF9zZSwidmFsaWRhdGVTb21lTm9uRW1wdHlMb29rYWhlYWRQYXRoIik7byhyQmUsImNoZWNrQWx0ZXJuYXRpdmVzQW1iaWd1aXRpZXMiKTtvKG5CZSwiY2hlY2tQcmVmaXhBbHRlcm5hdGl2ZXNBbWJpZ3VpdGllcyIpO28oaUJlLCJjaGVja1Rlcm1pbmFsQW5kTm9uZVRlcm1pbmFsc05hbWVTcGFjZSIpfSk7ZnVuY3Rpb24gRHNlKHQpe2xldCBlPVFoKHQse2Vyck1zZ1Byb3ZpZGVyOmhzZX0pLHI9e307cmV0dXJuIEFlKHQucnVsZXMsbj0+e3Jbbi5uYW1lXT1ufSksZnNlKHIsZS5lcnJNc2dQcm92aWRlcil9ZnVuY3Rpb24gTHNlKHQpe3JldHVybiB0PVFoKHQse2Vyck1zZ1Byb3ZpZGVyOlBsfSksa3NlKHQucnVsZXMsdC50b2tlblR5cGVzLHQuZXJyTXNnUHJvdmlkZXIsdC5ncmFtbWFyTmFtZSl9dmFyIFJzZT1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7ZHNlKCk7ZngoKTtWZygpO28oRHNlLCJyZXNvbHZlR3JhbW1hciIpO28oTHNlLCJ2YWxpZGF0ZUdyYW1tYXIiKX0pO2Z1bmN0aW9uIGxmKHQpe3JldHVybiBxbihQc2UsdC5uYW1lKX12YXIgTnNlLE1zZSxJc2UsT3NlLFBzZSxZZyxocCxkeCxweCxteCxYZz1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7TnNlPSJNaXNtYXRjaGVkVG9rZW5FeGNlcHRpb24iLE1zZT0iTm9WaWFibGVBbHRFeGNlcHRpb24iLElzZT0iRWFybHlFeGl0RXhjZXB0aW9uIixPc2U9Ik5vdEFsbElucHV0UGFyc2VkRXhjZXB0aW9uIixQc2U9W05zZSxNc2UsSXNlLE9zZV07T2JqZWN0LmZyZWV6ZShQc2UpO28obGYsImlzUmVjb2duaXRpb25FeGNlcHRpb24iKTtZZz1jbGFzcyBleHRlbmRzIEVycm9ye3N0YXRpY3tvKHRoaXMsIlJlY29nbml0aW9uRXhjZXB0aW9uIil9Y29uc3RydWN0b3IoZSxyKXtzdXBlcihlKSx0aGlzLnRva2VuPXIsdGhpcy5yZXN5bmNlZFRva2Vucz1bXSxPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxuZXcudGFyZ2V0LnByb3RvdHlwZSksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcil9fSxocD1jbGFzcyBleHRlbmRzIFlne3N0YXRpY3tvKHRoaXMsIk1pc21hdGNoZWRUb2tlbkV4Y2VwdGlvbiIpfWNvbnN0cnVjdG9yKGUscixuKXtzdXBlcihlLHIpLHRoaXMucHJldmlvdXNUb2tlbj1uLHRoaXMubmFtZT1Oc2V9fSxkeD1jbGFzcyBleHRlbmRzIFlne3N0YXRpY3tvKHRoaXMsIk5vVmlhYmxlQWx0RXhjZXB0aW9uIil9Y29uc3RydWN0b3IoZSxyLG4pe3N1cGVyKGUsciksdGhpcy5wcmV2aW91c1Rva2VuPW4sdGhpcy5uYW1lPU1zZX19LHB4PWNsYXNzIGV4dGVuZHMgWWd7c3RhdGlje28odGhpcywiTm90QWxsSW5wdXRQYXJzZWRFeGNlcHRpb24iKX1jb25zdHJ1Y3RvcihlLHIpe3N1cGVyKGUsciksdGhpcy5uYW1lPU9zZX19LG14PWNsYXNzIGV4dGVuZHMgWWd7c3RhdGlje28odGhpcywiRWFybHlFeGl0RXhjZXB0aW9uIil9Y29uc3RydWN0b3IoZSxyLG4pe3N1cGVyKGUsciksdGhpcy5wcmV2aW91c1Rva2VuPW4sdGhpcy5uYW1lPUlzZX19fSk7ZnVuY3Rpb24gYUJlKHQsZSxyLG4saSxhLHMpe2xldCBsPXRoaXMuZ2V0S2V5Rm9yQXV0b21hdGljTG9va2FoZWFkKG4saSksdT10aGlzLmZpcnN0QWZ0ZXJSZXBNYXBbbF07aWYodT09PXZvaWQgMCl7bGV0IHA9dGhpcy5nZXRDdXJyUnVsZUZ1bGxOYW1lKCksbT10aGlzLmdldEdBc3RQcm9kdWN0aW9ucygpW3BdO3U9bmV3IGEobSxpKS5zdGFydFdhbGtpbmcoKSx0aGlzLmZpcnN0QWZ0ZXJSZXBNYXBbbF09dX1sZXQgaD11LnRva2VuLGY9dS5vY2N1cnJlbmNlLGQ9dS5pc0VuZE9mUnVsZTt0aGlzLlJVTEVfU1RBQ0subGVuZ3RoPT09MSYmZCYmaD09PXZvaWQgMCYmKGg9bG8sZj0xKSwhKGg9PT12b2lkIDB8fGY9PT12b2lkIDApJiZ0aGlzLnNob3VsZEluUmVwZXRpdGlvblJlY292ZXJ5QmVUcmllZChoLGYscykmJnRoaXMudHJ5SW5SZXBldGl0aW9uUmVjb3ZlcnkodCxlLHIsaCl9dmFyIEZOLHpOLCROLEhrLEdOPU4oKCk9PnsidXNlIHN0cmljdCI7dXAoKTtxdCgpO1hnKCk7Yk4oKTtGcygpO0ZOPXt9LHpOPSJJblJ1bGVSZWNvdmVyeUV4Y2VwdGlvbiIsJE49Y2xhc3MgZXh0ZW5kcyBFcnJvcntzdGF0aWN7byh0aGlzLCJJblJ1bGVSZWNvdmVyeUV4Y2VwdGlvbiIpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKGUpLHRoaXMubmFtZT16Tn19LEhrPWNsYXNze3N0YXRpY3tvKHRoaXMsIlJlY292ZXJhYmxlIil9aW5pdFJlY292ZXJhYmxlKGUpe3RoaXMuZmlyc3RBZnRlclJlcE1hcD17fSx0aGlzLnJlc3luY0ZvbGxvd3M9e30sdGhpcy5yZWNvdmVyeUVuYWJsZWQ9QnQoZSwicmVjb3ZlcnlFbmFibGVkIik/ZS5yZWNvdmVyeUVuYWJsZWQ6bHMucmVjb3ZlcnlFbmFibGVkLHRoaXMucmVjb3ZlcnlFbmFibGVkJiYodGhpcy5hdHRlbXB0SW5SZXBldGl0aW9uUmVjb3Zlcnk9YUJlKX1nZXRUb2tlblRvSW5zZXJ0KGUpe2xldCByPSR1KGUsIiIsTmFOLE5hTixOYU4sTmFOLE5hTixOYU4pO3JldHVybiByLmlzSW5zZXJ0ZWRJblJlY292ZXJ5PSEwLHJ9Y2FuVG9rZW5UeXBlQmVJbnNlcnRlZEluUmVjb3ZlcnkoZSl7cmV0dXJuITB9Y2FuVG9rZW5UeXBlQmVEZWxldGVkSW5SZWNvdmVyeShlKXtyZXR1cm4hMH10cnlJblJlcGV0aXRpb25SZWNvdmVyeShlLHIsbixpKXtsZXQgYT10aGlzLmZpbmRSZVN5bmNUb2tlblR5cGUoKSxzPXRoaXMuZXhwb3J0TGV4ZXJTdGF0ZSgpLGw9W10sdT0hMSxoPXRoaXMuTEEoMSksZj10aGlzLkxBKDEpLGQ9bygoKT0+e2xldCBwPXRoaXMuTEEoMCksbT10aGlzLmVycm9yTWVzc2FnZVByb3ZpZGVyLmJ1aWxkTWlzbWF0Y2hUb2tlbk1lc3NhZ2Uoe2V4cGVjdGVkOmksYWN0dWFsOmgscHJldmlvdXM6cCxydWxlTmFtZTp0aGlzLmdldEN1cnJSdWxlRnVsbE5hbWUoKX0pLGc9bmV3IGhwKG0saCx0aGlzLkxBKDApKTtnLnJlc3luY2VkVG9rZW5zPU51KGwpLHRoaXMuU0FWRV9FUlJPUihnKX0sImdlbmVyYXRlRXJyb3JNZXNzYWdlIik7Zm9yKDshdTspaWYodGhpcy50b2tlbk1hdGNoZXIoZixpKSl7ZCgpO3JldHVybn1lbHNlIGlmKG4uY2FsbCh0aGlzKSl7ZCgpLGUuYXBwbHkodGhpcyxyKTtyZXR1cm59ZWxzZSB0aGlzLnRva2VuTWF0Y2hlcihmLGEpP3U9ITA6KGY9dGhpcy5TS0lQX1RPS0VOKCksdGhpcy5hZGRUb1Jlc3luY1Rva2VucyhmLGwpKTt0aGlzLmltcG9ydExleGVyU3RhdGUocyl9c2hvdWxkSW5SZXBldGl0aW9uUmVjb3ZlcnlCZVRyaWVkKGUscixuKXtyZXR1cm4hKG49PT0hMXx8dGhpcy50b2tlbk1hdGNoZXIodGhpcy5MQSgxKSxlKXx8dGhpcy5pc0JhY2tUcmFja2luZygpfHx0aGlzLmNhblBlcmZvcm1JblJ1bGVSZWNvdmVyeShlLHRoaXMuZ2V0Rm9sbG93c0ZvckluUnVsZVJlY292ZXJ5KGUscikpKX1nZXRGb2xsb3dzRm9ySW5SdWxlUmVjb3ZlcnkoZSxyKXtsZXQgbj10aGlzLmdldEN1cnJlbnRHcmFtbWFyUGF0aChlLHIpO3JldHVybiB0aGlzLmdldE5leHRQb3NzaWJsZVRva2VuVHlwZXMobil9dHJ5SW5SdWxlUmVjb3ZlcnkoZSxyKXtpZih0aGlzLmNhblJlY292ZXJXaXRoU2luZ2xlVG9rZW5JbnNlcnRpb24oZSxyKSlyZXR1cm4gdGhpcy5nZXRUb2tlblRvSW5zZXJ0KGUpO2lmKHRoaXMuY2FuUmVjb3ZlcldpdGhTaW5nbGVUb2tlbkRlbGV0aW9uKGUpKXtsZXQgbj10aGlzLlNLSVBfVE9LRU4oKTtyZXR1cm4gdGhpcy5jb25zdW1lVG9rZW4oKSxufXRocm93IG5ldyAkTigic2FkIHNhZCBwYW5kYSIpfWNhblBlcmZvcm1JblJ1bGVSZWNvdmVyeShlLHIpe3JldHVybiB0aGlzLmNhblJlY292ZXJXaXRoU2luZ2xlVG9rZW5JbnNlcnRpb24oZSxyKXx8dGhpcy5jYW5SZWNvdmVyV2l0aFNpbmdsZVRva2VuRGVsZXRpb24oZSl9Y2FuUmVjb3ZlcldpdGhTaW5nbGVUb2tlbkluc2VydGlvbihlLHIpe2lmKCF0aGlzLmNhblRva2VuVHlwZUJlSW5zZXJ0ZWRJblJlY292ZXJ5KGUpfHx1cihyKSlyZXR1cm4hMTtsZXQgbj10aGlzLkxBKDEpO3JldHVybiBucyhyLGE9PnRoaXMudG9rZW5NYXRjaGVyKG4sYSkpIT09dm9pZCAwfWNhblJlY292ZXJXaXRoU2luZ2xlVG9rZW5EZWxldGlvbihlKXtyZXR1cm4gdGhpcy5jYW5Ub2tlblR5cGVCZURlbGV0ZWRJblJlY292ZXJ5KGUpP3RoaXMudG9rZW5NYXRjaGVyKHRoaXMuTEEoMiksZSk6ITF9aXNJbkN1cnJlbnRSdWxlUmVTeW5jU2V0KGUpe2xldCByPXRoaXMuZ2V0Q3VyckZvbGxvd0tleSgpLG49dGhpcy5nZXRGb2xsb3dTZXRGcm9tRm9sbG93S2V5KHIpO3JldHVybiBxbihuLGUpfWZpbmRSZVN5bmNUb2tlblR5cGUoKXtsZXQgZT10aGlzLmZsYXR0ZW5Gb2xsb3dTZXQoKSxyPXRoaXMuTEEoMSksbj0yO2Zvcig7Oyl7bGV0IGk9bnMoZSxhPT5zeChyLGEpKTtpZihpIT09dm9pZCAwKXJldHVybiBpO3I9dGhpcy5MQShuKSxuKyt9fWdldEN1cnJGb2xsb3dLZXkoKXtpZih0aGlzLlJVTEVfU1RBQ0subGVuZ3RoPT09MSlyZXR1cm4gRk47bGV0IGU9dGhpcy5nZXRMYXN0RXhwbGljaXRSdWxlU2hvcnROYW1lKCkscj10aGlzLmdldExhc3RFeHBsaWNpdFJ1bGVPY2N1cnJlbmNlSW5kZXgoKSxuPXRoaXMuZ2V0UHJldmlvdXNFeHBsaWNpdFJ1bGVTaG9ydE5hbWUoKTtyZXR1cm57cnVsZU5hbWU6dGhpcy5zaG9ydFJ1bGVOYW1lVG9GdWxsTmFtZShlKSxpZHhJbkNhbGxpbmdSdWxlOnIsaW5SdWxlOnRoaXMuc2hvcnRSdWxlTmFtZVRvRnVsbE5hbWUobil9fWJ1aWxkRnVsbEZvbGxvd0tleVN0YWNrKCl7bGV0IGU9dGhpcy5SVUxFX1NUQUNLLHI9dGhpcy5SVUxFX09DQ1VSUkVOQ0VfU1RBQ0s7cmV0dXJuIEplKGUsKG4saSk9Pmk9PT0wP0ZOOntydWxlTmFtZTp0aGlzLnNob3J0UnVsZU5hbWVUb0Z1bGxOYW1lKG4pLGlkeEluQ2FsbGluZ1J1bGU6cltpXSxpblJ1bGU6dGhpcy5zaG9ydFJ1bGVOYW1lVG9GdWxsTmFtZShlW2ktMV0pfSl9ZmxhdHRlbkZvbGxvd1NldCgpe2xldCBlPUplKHRoaXMuYnVpbGRGdWxsRm9sbG93S2V5U3RhY2soKSxyPT50aGlzLmdldEZvbGxvd1NldEZyb21Gb2xsb3dLZXkocikpO3JldHVybiBxcihlKX1nZXRGb2xsb3dTZXRGcm9tRm9sbG93S2V5KGUpe2lmKGU9PT1GTilyZXR1cm5bbG9dO2xldCByPWUucnVsZU5hbWUrZS5pZHhJbkNhbGxpbmdSdWxlK19rK2UuaW5SdWxlO3JldHVybiB0aGlzLnJlc3luY0ZvbGxvd3Nbcl19YWRkVG9SZXN5bmNUb2tlbnMoZSxyKXtyZXR1cm4gdGhpcy50b2tlbk1hdGNoZXIoZSxsbyl8fHIucHVzaChlKSxyfXJlU3luY1RvKGUpe2xldCByPVtdLG49dGhpcy5MQSgxKTtmb3IoO3RoaXMudG9rZW5NYXRjaGVyKG4sZSk9PT0hMTspbj10aGlzLlNLSVBfVE9LRU4oKSx0aGlzLmFkZFRvUmVzeW5jVG9rZW5zKG4scik7cmV0dXJuIE51KHIpfWF0dGVtcHRJblJlcGV0aXRpb25SZWNvdmVyeShlLHIsbixpLGEscyxsKXt9Z2V0Q3VycmVudEdyYW1tYXJQYXRoKGUscil7bGV0IG49dGhpcy5nZXRIdW1hblJlYWRhYmxlUnVsZVN0YWNrKCksaT1hbih0aGlzLlJVTEVfT0NDVVJSRU5DRV9TVEFDSyk7cmV0dXJue3J1bGVTdGFjazpuLG9jY3VycmVuY2VTdGFjazppLGxhc3RUb2s6ZSxsYXN0VG9rT2NjdXJyZW5jZTpyfX1nZXRIdW1hblJlYWRhYmxlUnVsZVN0YWNrKCl7cmV0dXJuIEplKHRoaXMuUlVMRV9TVEFDSyxlPT50aGlzLnNob3J0UnVsZU5hbWVUb0Z1bGxOYW1lKGUpKX19O28oYUJlLCJhdHRlbXB0SW5SZXBldGl0aW9uUmVjb3ZlcnkiKX0pO2Z1bmN0aW9uIFdrKHQsZSxyKXtyZXR1cm4gcnxlfHR9dmFyIHFrPU4oKCk9PnsidXNlIHN0cmljdCI7byhXaywiZ2V0S2V5Rm9yQXV0b21hdGljTG9va2FoZWFkIil9KTt2YXIgR3UsVk49TigoKT0+eyJ1c2Ugc3RyaWN0IjtxdCgpO1ZnKCk7RnMoKTtmeCgpO3FnKCk7R3U9Y2xhc3N7c3RhdGlje28odGhpcywiTExrTG9va2FoZWFkU3RyYXRlZ3kiKX1jb25zdHJ1Y3RvcihlKXt2YXIgcjt0aGlzLm1heExvb2thaGVhZD0ocj1lPy5tYXhMb29rYWhlYWQpIT09bnVsbCYmciE9PXZvaWQgMD9yOmxzLm1heExvb2thaGVhZH12YWxpZGF0ZShlKXtsZXQgcj10aGlzLnZhbGlkYXRlTm9MZWZ0UmVjdXJzaW9uKGUucnVsZXMpO2lmKHVyKHIpKXtsZXQgbj10aGlzLnZhbGlkYXRlRW1wdHlPckFsdGVybmF0aXZlcyhlLnJ1bGVzKSxpPXRoaXMudmFsaWRhdGVBbWJpZ3VvdXNBbHRlcm5hdGlvbkFsdGVybmF0aXZlcyhlLnJ1bGVzLHRoaXMubWF4TG9va2FoZWFkKSxhPXRoaXMudmFsaWRhdGVTb21lTm9uRW1wdHlMb29rYWhlYWRQYXRoKGUucnVsZXMsdGhpcy5tYXhMb29rYWhlYWQpO3JldHVyblsuLi5yLC4uLm4sLi4uaSwuLi5hXX1yZXR1cm4gcn12YWxpZGF0ZU5vTGVmdFJlY3Vyc2lvbihlKXtyZXR1cm4geWEoZSxyPT5CTihyLHIsUGwpKX12YWxpZGF0ZUVtcHR5T3JBbHRlcm5hdGl2ZXMoZSl7cmV0dXJuIHlhKGUscj0+Q3NlKHIsUGwpKX12YWxpZGF0ZUFtYmlndW91c0FsdGVybmF0aW9uQWx0ZXJuYXRpdmVzKGUscil7cmV0dXJuIHlhKGUsbj0+QXNlKG4scixQbCkpfXZhbGlkYXRlU29tZU5vbkVtcHR5TG9va2FoZWFkUGF0aChlLHIpe3JldHVybiBfc2UoZSxyLFBsKX1idWlsZExvb2thaGVhZEZvckFsdGVybmF0aW9uKGUpe3JldHVybiBtc2UoZS5wcm9kT2NjdXJyZW5jZSxlLnJ1bGUsZS5tYXhMb29rYWhlYWQsZS5oYXNQcmVkaWNhdGVzLGUuZHluYW1pY1Rva2Vuc0VuYWJsZWQseXNlKX1idWlsZExvb2thaGVhZEZvck9wdGlvbmFsKGUpe3JldHVybiBnc2UoZS5wcm9kT2NjdXJyZW5jZSxlLnJ1bGUsZS5tYXhMb29rYWhlYWQsZS5keW5hbWljVG9rZW5zRW5hYmxlZCx1eChlLnByb2RUeXBlKSx2c2UpfX19KTtmdW5jdGlvbiBzQmUodCl7WWsucmVzZXQoKSx0LmFjY2VwdChZayk7bGV0IGU9WWsuZHNsTWV0aG9kcztyZXR1cm4gWWsucmVzZXQoKSxlfXZhciBYayxVTixZayxCc2U9TigoKT0+eyJ1c2Ugc3RyaWN0IjtxdCgpO0ZzKCk7cWsoKTtvcygpO1ZOKCk7WGs9Y2xhc3N7c3RhdGlje28odGhpcywiTG9va3NBaGVhZCIpfWluaXRMb29rc0FoZWFkKGUpe3RoaXMuZHluYW1pY1Rva2Vuc0VuYWJsZWQ9QnQoZSwiZHluYW1pY1Rva2Vuc0VuYWJsZWQiKT9lLmR5bmFtaWNUb2tlbnNFbmFibGVkOmxzLmR5bmFtaWNUb2tlbnNFbmFibGVkLHRoaXMubWF4TG9va2FoZWFkPUJ0KGUsIm1heExvb2thaGVhZCIpP2UubWF4TG9va2FoZWFkOmxzLm1heExvb2thaGVhZCx0aGlzLmxvb2thaGVhZFN0cmF0ZWd5PUJ0KGUsImxvb2thaGVhZFN0cmF0ZWd5Iik/ZS5sb29rYWhlYWRTdHJhdGVneTpuZXcgR3Uoe21heExvb2thaGVhZDp0aGlzLm1heExvb2thaGVhZH0pLHRoaXMubG9va0FoZWFkRnVuY3NDYWNoZT1uZXcgTWFwfXByZUNvbXB1dGVMb29rYWhlYWRGdW5jdGlvbnMoZSl7QWUoZSxyPT57dGhpcy5UUkFDRV9JTklUKGAke3IubmFtZX0gUnVsZSBMb29rYWhlYWRgLCgpPT57bGV0e2FsdGVybmF0aW9uOm4scmVwZXRpdGlvbjppLG9wdGlvbjphLHJlcGV0aXRpb25NYW5kYXRvcnk6cyxyZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvcjpsLHJlcGV0aXRpb25XaXRoU2VwYXJhdG9yOnV9PXNCZShyKTtBZShuLGg9PntsZXQgZj1oLmlkeD09PTA/IiI6aC5pZHg7dGhpcy5UUkFDRV9JTklUKGAke0JzKGgpfSR7Zn1gLCgpPT57bGV0IGQ9dGhpcy5sb29rYWhlYWRTdHJhdGVneS5idWlsZExvb2thaGVhZEZvckFsdGVybmF0aW9uKHtwcm9kT2NjdXJyZW5jZTpoLmlkeCxydWxlOnIsbWF4TG9va2FoZWFkOmgubWF4TG9va2FoZWFkfHx0aGlzLm1heExvb2thaGVhZCxoYXNQcmVkaWNhdGVzOmguaGFzUHJlZGljYXRlcyxkeW5hbWljVG9rZW5zRW5hYmxlZDp0aGlzLmR5bmFtaWNUb2tlbnNFbmFibGVkfSkscD1Xayh0aGlzLmZ1bGxSdWxlTmFtZVRvU2hvcnRbci5uYW1lXSwyNTYsaC5pZHgpO3RoaXMuc2V0TGFGdW5jQ2FjaGUocCxkKX0pfSksQWUoaSxoPT57dGhpcy5jb21wdXRlTG9va2FoZWFkRnVuYyhyLGguaWR4LDc2OCwiUmVwZXRpdGlvbiIsaC5tYXhMb29rYWhlYWQsQnMoaCkpfSksQWUoYSxoPT57dGhpcy5jb21wdXRlTG9va2FoZWFkRnVuYyhyLGguaWR4LDUxMiwiT3B0aW9uIixoLm1heExvb2thaGVhZCxCcyhoKSl9KSxBZShzLGg9Pnt0aGlzLmNvbXB1dGVMb29rYWhlYWRGdW5jKHIsaC5pZHgsMTAyNCwiUmVwZXRpdGlvbk1hbmRhdG9yeSIsaC5tYXhMb29rYWhlYWQsQnMoaCkpfSksQWUobCxoPT57dGhpcy5jb21wdXRlTG9va2FoZWFkRnVuYyhyLGguaWR4LDE1MzYsIlJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yIixoLm1heExvb2thaGVhZCxCcyhoKSl9KSxBZSh1LGg9Pnt0aGlzLmNvbXB1dGVMb29rYWhlYWRGdW5jKHIsaC5pZHgsMTI4MCwiUmVwZXRpdGlvbldpdGhTZXBhcmF0b3IiLGgubWF4TG9va2FoZWFkLEJzKGgpKX0pfSl9KX1jb21wdXRlTG9va2FoZWFkRnVuYyhlLHIsbixpLGEscyl7dGhpcy5UUkFDRV9JTklUKGAke3N9JHtyPT09MD8iIjpyfWAsKCk9PntsZXQgbD10aGlzLmxvb2thaGVhZFN0cmF0ZWd5LmJ1aWxkTG9va2FoZWFkRm9yT3B0aW9uYWwoe3Byb2RPY2N1cnJlbmNlOnIscnVsZTplLG1heExvb2thaGVhZDphfHx0aGlzLm1heExvb2thaGVhZCxkeW5hbWljVG9rZW5zRW5hYmxlZDp0aGlzLmR5bmFtaWNUb2tlbnNFbmFibGVkLHByb2RUeXBlOml9KSx1PVdrKHRoaXMuZnVsbFJ1bGVOYW1lVG9TaG9ydFtlLm5hbWVdLG4scik7dGhpcy5zZXRMYUZ1bmNDYWNoZSh1LGwpfSl9Z2V0S2V5Rm9yQXV0b21hdGljTG9va2FoZWFkKGUscil7bGV0IG49dGhpcy5nZXRMYXN0RXhwbGljaXRSdWxlU2hvcnROYW1lKCk7cmV0dXJuIFdrKG4sZSxyKX1nZXRMYUZ1bmNGcm9tQ2FjaGUoZSl7cmV0dXJuIHRoaXMubG9va0FoZWFkRnVuY3NDYWNoZS5nZXQoZSl9c2V0TGFGdW5jQ2FjaGUoZSxyKXt0aGlzLmxvb2tBaGVhZEZ1bmNzQ2FjaGUuc2V0KGUscil9fSxVTj1jbGFzcyBleHRlbmRzIHNze3N0YXRpY3tvKHRoaXMsIkRzbE1ldGhvZHNDb2xsZWN0b3JWaXNpdG9yIil9Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuZHNsTWV0aG9kcz17b3B0aW9uOltdLGFsdGVybmF0aW9uOltdLHJlcGV0aXRpb246W10scmVwZXRpdGlvbldpdGhTZXBhcmF0b3I6W10scmVwZXRpdGlvbk1hbmRhdG9yeTpbXSxyZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvcjpbXX19cmVzZXQoKXt0aGlzLmRzbE1ldGhvZHM9e29wdGlvbjpbXSxhbHRlcm5hdGlvbjpbXSxyZXBldGl0aW9uOltdLHJlcGV0aXRpb25XaXRoU2VwYXJhdG9yOltdLHJlcGV0aXRpb25NYW5kYXRvcnk6W10scmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3I6W119fXZpc2l0T3B0aW9uKGUpe3RoaXMuZHNsTWV0aG9kcy5vcHRpb24ucHVzaChlKX12aXNpdFJlcGV0aXRpb25XaXRoU2VwYXJhdG9yKGUpe3RoaXMuZHNsTWV0aG9kcy5yZXBldGl0aW9uV2l0aFNlcGFyYXRvci5wdXNoKGUpfXZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeShlKXt0aGlzLmRzbE1ldGhvZHMucmVwZXRpdGlvbk1hbmRhdG9yeS5wdXNoKGUpfXZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3IoZSl7dGhpcy5kc2xNZXRob2RzLnJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yLnB1c2goZSl9dmlzaXRSZXBldGl0aW9uKGUpe3RoaXMuZHNsTWV0aG9kcy5yZXBldGl0aW9uLnB1c2goZSl9dmlzaXRBbHRlcm5hdGlvbihlKXt0aGlzLmRzbE1ldGhvZHMuYWx0ZXJuYXRpb24ucHVzaChlKX19LFlrPW5ldyBVTjtvKHNCZSwiY29sbGVjdE1ldGhvZHMiKX0pO2Z1bmN0aW9uIHFOKHQsZSl7aXNOYU4odC5zdGFydE9mZnNldCk9PT0hMD8odC5zdGFydE9mZnNldD1lLnN0YXJ0T2Zmc2V0LHQuZW5kT2Zmc2V0PWUuZW5kT2Zmc2V0KTp0LmVuZE9mZnNldDxlLmVuZE9mZnNldCYmKHQuZW5kT2Zmc2V0PWUuZW5kT2Zmc2V0KX1mdW5jdGlvbiBZTih0LGUpe2lzTmFOKHQuc3RhcnRPZmZzZXQpPT09ITA/KHQuc3RhcnRPZmZzZXQ9ZS5zdGFydE9mZnNldCx0LnN0YXJ0Q29sdW1uPWUuc3RhcnRDb2x1bW4sdC5zdGFydExpbmU9ZS5zdGFydExpbmUsdC5lbmRPZmZzZXQ9ZS5lbmRPZmZzZXQsdC5lbmRDb2x1bW49ZS5lbmRDb2x1bW4sdC5lbmRMaW5lPWUuZW5kTGluZSk6dC5lbmRPZmZzZXQ8ZS5lbmRPZmZzZXQmJih0LmVuZE9mZnNldD1lLmVuZE9mZnNldCx0LmVuZENvbHVtbj1lLmVuZENvbHVtbix0LmVuZExpbmU9ZS5lbmRMaW5lKX1mdW5jdGlvbiBGc2UodCxlLHIpe3QuY2hpbGRyZW5bcl09PT12b2lkIDA/dC5jaGlsZHJlbltyXT1bZV06dC5jaGlsZHJlbltyXS5wdXNoKGUpfWZ1bmN0aW9uICRzZSh0LGUscil7dC5jaGlsZHJlbltlXT09PXZvaWQgMD90LmNoaWxkcmVuW2VdPVtyXTp0LmNoaWxkcmVuW2VdLnB1c2gocil9dmFyIHpzZT1OKCgpPT57InVzZSBzdHJpY3QiO28ocU4sInNldE5vZGVMb2NhdGlvbk9ubHlPZmZzZXQiKTtvKFlOLCJzZXROb2RlTG9jYXRpb25GdWxsIik7byhGc2UsImFkZFRlcm1pbmFsVG9Dc3QiKTtvKCRzZSwiYWRkTm9uZVRlcm1pbmFsVG9Dc3QiKX0pO2Z1bmN0aW9uIFhOKHQsZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsb0JlLHtlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMSx2YWx1ZTplfSl9dmFyIG9CZSxHc2U9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvQmU9Im5hbWUiO28oWE4sImRlZmluZU5hbWVQcm9wIil9KTtmdW5jdGlvbiBsQmUodCxlKXtsZXQgcj16cih0KSxuPXIubGVuZ3RoO2ZvcihsZXQgaT0wO2k8bjtpKyspe2xldCBhPXJbaV0scz10W2FdLGw9cy5sZW5ndGg7Zm9yKGxldCB1PTA7dTxsO3UrKyl7bGV0IGg9c1t1XTtoLnRva2VuVHlwZUlkeD09PXZvaWQgMCYmdGhpc1toLm5hbWVdKGguY2hpbGRyZW4sZSl9fX1mdW5jdGlvbiBWc2UodCxlKXtsZXQgcj1vKGZ1bmN0aW9uKCl7fSwiZGVyaXZlZENvbnN0cnVjdG9yIik7WE4ocix0KyJCYXNlU2VtYW50aWNzIik7bGV0IG49e3Zpc2l0Om8oZnVuY3Rpb24oaSxhKXtpZihQdChpKSYmKGk9aVswXSksIXByKGkpKXJldHVybiB0aGlzW2kubmFtZV0oaS5jaGlsZHJlbixhKX0sInZpc2l0IiksdmFsaWRhdGVWaXNpdG9yOm8oZnVuY3Rpb24oKXtsZXQgaT1jQmUodGhpcyxlKTtpZighdXIoaSkpe2xldCBhPUplKGkscz0+cy5tc2cpO3Rocm93IEVycm9yKGBFcnJvcnMgRGV0ZWN0ZWQgaW4gQ1NUIFZpc2l0b3IgPCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfT46Cgkke2Euam9pbihgCgpgKS5yZXBsYWNlKC9cbi9nLGAKCWApfWApfX0sInZhbGlkYXRlVmlzaXRvciIpfTtyZXR1cm4gci5wcm90b3R5cGU9bixyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIuX1JVTEVfTkFNRVM9ZSxyfWZ1bmN0aW9uIFVzZSh0LGUscil7bGV0IG49byhmdW5jdGlvbigpe30sImRlcml2ZWRDb25zdHJ1Y3RvciIpO1hOKG4sdCsiQmFzZVNlbWFudGljc1dpdGhEZWZhdWx0cyIpO2xldCBpPU9iamVjdC5jcmVhdGUoci5wcm90b3R5cGUpO3JldHVybiBBZShlLGE9PntpW2FdPWxCZX0pLG4ucHJvdG90eXBlPWksbi5wcm90b3R5cGUuY29uc3RydWN0b3I9bixufWZ1bmN0aW9uIGNCZSh0LGUpe3JldHVybiB1QmUodCxlKX1mdW5jdGlvbiB1QmUodCxlKXtsZXQgcj1ZcihlLGk9PlNpKHRbaV0pPT09ITEpLG49SmUocixpPT4oe21zZzpgTWlzc2luZyB2aXNpdG9yIG1ldGhvZDogPCR7aX0+IG9uICR7dC5jb25zdHJ1Y3Rvci5uYW1lfSBDU1QgVmlzaXRvci5gLHR5cGU6ak4uTUlTU0lOR19NRVRIT0QsbWV0aG9kTmFtZTppfSkpO3JldHVybiBUYyhuKX12YXIgak4sSHNlPU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTtHc2UoKTtvKGxCZSwiZGVmYXVsdFZpc2l0Iik7byhWc2UsImNyZWF0ZUJhc2VTZW1hbnRpY1Zpc2l0b3JDb25zdHJ1Y3RvciIpO28oVXNlLCJjcmVhdGVCYXNlVmlzaXRvckNvbnN0cnVjdG9yV2l0aERlZmF1bHRzIik7KGZ1bmN0aW9uKHQpe3RbdC5SRURVTkRBTlRfTUVUSE9EPTBdPSJSRURVTkRBTlRfTUVUSE9EIix0W3QuTUlTU0lOR19NRVRIT0Q9MV09Ik1JU1NJTkdfTUVUSE9EIn0pKGpOfHwoak49e30pKTtvKGNCZSwidmFsaWRhdGVWaXNpdG9yIik7byh1QmUsInZhbGlkYXRlTWlzc2luZ0NzdE1ldGhvZHMiKX0pO3ZhciBaayxXc2U9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt6c2UoKTtxdCgpO0hzZSgpO0ZzKCk7Wms9Y2xhc3N7c3RhdGlje28odGhpcywiVHJlZUJ1aWxkZXIiKX1pbml0VHJlZUJ1aWxkZXIoZSl7aWYodGhpcy5DU1RfU1RBQ0s9W10sdGhpcy5vdXRwdXRDc3Q9ZS5vdXRwdXRDc3QsdGhpcy5ub2RlTG9jYXRpb25UcmFja2luZz1CdChlLCJub2RlTG9jYXRpb25UcmFja2luZyIpP2Uubm9kZUxvY2F0aW9uVHJhY2tpbmc6bHMubm9kZUxvY2F0aW9uVHJhY2tpbmcsIXRoaXMub3V0cHV0Q3N0KXRoaXMuY3N0SW52b2NhdGlvblN0YXRlVXBkYXRlPW5pLHRoaXMuY3N0RmluYWxseVN0YXRlVXBkYXRlPW5pLHRoaXMuY3N0UG9zdFRlcm1pbmFsPW5pLHRoaXMuY3N0UG9zdE5vblRlcm1pbmFsPW5pLHRoaXMuY3N0UG9zdFJ1bGU9bmk7ZWxzZSBpZigvZnVsbC9pLnRlc3QodGhpcy5ub2RlTG9jYXRpb25UcmFja2luZykpdGhpcy5yZWNvdmVyeUVuYWJsZWQ/KHRoaXMuc2V0Tm9kZUxvY2F0aW9uRnJvbVRva2VuPVlOLHRoaXMuc2V0Tm9kZUxvY2F0aW9uRnJvbU5vZGU9WU4sdGhpcy5jc3RQb3N0UnVsZT1uaSx0aGlzLnNldEluaXRpYWxOb2RlTG9jYXRpb249dGhpcy5zZXRJbml0aWFsTm9kZUxvY2F0aW9uRnVsbFJlY292ZXJ5KToodGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tVG9rZW49bmksdGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tTm9kZT1uaSx0aGlzLmNzdFBvc3RSdWxlPXRoaXMuY3N0UG9zdFJ1bGVGdWxsLHRoaXMuc2V0SW5pdGlhbE5vZGVMb2NhdGlvbj10aGlzLnNldEluaXRpYWxOb2RlTG9jYXRpb25GdWxsUmVndWxhcik7ZWxzZSBpZigvb25seU9mZnNldC9pLnRlc3QodGhpcy5ub2RlTG9jYXRpb25UcmFja2luZykpdGhpcy5yZWNvdmVyeUVuYWJsZWQ/KHRoaXMuc2V0Tm9kZUxvY2F0aW9uRnJvbVRva2VuPXFOLHRoaXMuc2V0Tm9kZUxvY2F0aW9uRnJvbU5vZGU9cU4sdGhpcy5jc3RQb3N0UnVsZT1uaSx0aGlzLnNldEluaXRpYWxOb2RlTG9jYXRpb249dGhpcy5zZXRJbml0aWFsTm9kZUxvY2F0aW9uT25seU9mZnNldFJlY292ZXJ5KToodGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tVG9rZW49bmksdGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tTm9kZT1uaSx0aGlzLmNzdFBvc3RSdWxlPXRoaXMuY3N0UG9zdFJ1bGVPbmx5T2Zmc2V0LHRoaXMuc2V0SW5pdGlhbE5vZGVMb2NhdGlvbj10aGlzLnNldEluaXRpYWxOb2RlTG9jYXRpb25Pbmx5T2Zmc2V0UmVndWxhcik7ZWxzZSBpZigvbm9uZS9pLnRlc3QodGhpcy5ub2RlTG9jYXRpb25UcmFja2luZykpdGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tVG9rZW49bmksdGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tTm9kZT1uaSx0aGlzLmNzdFBvc3RSdWxlPW5pLHRoaXMuc2V0SW5pdGlhbE5vZGVMb2NhdGlvbj1uaTtlbHNlIHRocm93IEVycm9yKGBJbnZhbGlkIDxub2RlTG9jYXRpb25UcmFja2luZz4gY29uZmlnIG9wdGlvbjogIiR7ZS5ub2RlTG9jYXRpb25UcmFja2luZ30iYCl9c2V0SW5pdGlhbE5vZGVMb2NhdGlvbk9ubHlPZmZzZXRSZWNvdmVyeShlKXtlLmxvY2F0aW9uPXtzdGFydE9mZnNldDpOYU4sZW5kT2Zmc2V0Ok5hTn19c2V0SW5pdGlhbE5vZGVMb2NhdGlvbk9ubHlPZmZzZXRSZWd1bGFyKGUpe2UubG9jYXRpb249e3N0YXJ0T2Zmc2V0OnRoaXMuTEEoMSkuc3RhcnRPZmZzZXQsZW5kT2Zmc2V0Ok5hTn19c2V0SW5pdGlhbE5vZGVMb2NhdGlvbkZ1bGxSZWNvdmVyeShlKXtlLmxvY2F0aW9uPXtzdGFydE9mZnNldDpOYU4sc3RhcnRMaW5lOk5hTixzdGFydENvbHVtbjpOYU4sZW5kT2Zmc2V0Ok5hTixlbmRMaW5lOk5hTixlbmRDb2x1bW46TmFOfX1zZXRJbml0aWFsTm9kZUxvY2F0aW9uRnVsbFJlZ3VsYXIoZSl7bGV0IHI9dGhpcy5MQSgxKTtlLmxvY2F0aW9uPXtzdGFydE9mZnNldDpyLnN0YXJ0T2Zmc2V0LHN0YXJ0TGluZTpyLnN0YXJ0TGluZSxzdGFydENvbHVtbjpyLnN0YXJ0Q29sdW1uLGVuZE9mZnNldDpOYU4sZW5kTGluZTpOYU4sZW5kQ29sdW1uOk5hTn19Y3N0SW52b2NhdGlvblN0YXRlVXBkYXRlKGUpe2xldCByPXtuYW1lOmUsY2hpbGRyZW46T2JqZWN0LmNyZWF0ZShudWxsKX07dGhpcy5zZXRJbml0aWFsTm9kZUxvY2F0aW9uKHIpLHRoaXMuQ1NUX1NUQUNLLnB1c2gocil9Y3N0RmluYWxseVN0YXRlVXBkYXRlKCl7dGhpcy5DU1RfU1RBQ0sucG9wKCl9Y3N0UG9zdFJ1bGVGdWxsKGUpe2xldCByPXRoaXMuTEEoMCksbj1lLmxvY2F0aW9uO24uc3RhcnRPZmZzZXQ8PXIuc3RhcnRPZmZzZXQ/KG4uZW5kT2Zmc2V0PXIuZW5kT2Zmc2V0LG4uZW5kTGluZT1yLmVuZExpbmUsbi5lbmRDb2x1bW49ci5lbmRDb2x1bW4pOihuLnN0YXJ0T2Zmc2V0PU5hTixuLnN0YXJ0TGluZT1OYU4sbi5zdGFydENvbHVtbj1OYU4pfWNzdFBvc3RSdWxlT25seU9mZnNldChlKXtsZXQgcj10aGlzLkxBKDApLG49ZS5sb2NhdGlvbjtuLnN0YXJ0T2Zmc2V0PD1yLnN0YXJ0T2Zmc2V0P24uZW5kT2Zmc2V0PXIuZW5kT2Zmc2V0Om4uc3RhcnRPZmZzZXQ9TmFOfWNzdFBvc3RUZXJtaW5hbChlLHIpe2xldCBuPXRoaXMuQ1NUX1NUQUNLW3RoaXMuQ1NUX1NUQUNLLmxlbmd0aC0xXTtGc2UobixyLGUpLHRoaXMuc2V0Tm9kZUxvY2F0aW9uRnJvbVRva2VuKG4ubG9jYXRpb24scil9Y3N0UG9zdE5vblRlcm1pbmFsKGUscil7bGV0IG49dGhpcy5DU1RfU1RBQ0tbdGhpcy5DU1RfU1RBQ0subGVuZ3RoLTFdOyRzZShuLHIsZSksdGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tTm9kZShuLmxvY2F0aW9uLGUubG9jYXRpb24pfWdldEJhc2VDc3RWaXNpdG9yQ29uc3RydWN0b3IoKXtpZihwcih0aGlzLmJhc2VDc3RWaXNpdG9yQ29uc3RydWN0b3IpKXtsZXQgZT1Wc2UodGhpcy5jbGFzc05hbWUsenIodGhpcy5nYXN0UHJvZHVjdGlvbnNDYWNoZSkpO3JldHVybiB0aGlzLmJhc2VDc3RWaXNpdG9yQ29uc3RydWN0b3I9ZSxlfXJldHVybiB0aGlzLmJhc2VDc3RWaXNpdG9yQ29uc3RydWN0b3J9Z2V0QmFzZUNzdFZpc2l0b3JDb25zdHJ1Y3RvcldpdGhEZWZhdWx0cygpe2lmKHByKHRoaXMuYmFzZUNzdFZpc2l0b3JXaXRoRGVmYXVsdHNDb25zdHJ1Y3Rvcikpe2xldCBlPVVzZSh0aGlzLmNsYXNzTmFtZSx6cih0aGlzLmdhc3RQcm9kdWN0aW9uc0NhY2hlKSx0aGlzLmdldEJhc2VDc3RWaXNpdG9yQ29uc3RydWN0b3IoKSk7cmV0dXJuIHRoaXMuYmFzZUNzdFZpc2l0b3JXaXRoRGVmYXVsdHNDb25zdHJ1Y3Rvcj1lLGV9cmV0dXJuIHRoaXMuYmFzZUNzdFZpc2l0b3JXaXRoRGVmYXVsdHNDb25zdHJ1Y3Rvcn1nZXRMYXN0RXhwbGljaXRSdWxlU2hvcnROYW1lKCl7bGV0IGU9dGhpcy5SVUxFX1NUQUNLO3JldHVybiBlW2UubGVuZ3RoLTFdfWdldFByZXZpb3VzRXhwbGljaXRSdWxlU2hvcnROYW1lKCl7bGV0IGU9dGhpcy5SVUxFX1NUQUNLO3JldHVybiBlW2UubGVuZ3RoLTJdfWdldExhc3RFeHBsaWNpdFJ1bGVPY2N1cnJlbmNlSW5kZXgoKXtsZXQgZT10aGlzLlJVTEVfT0NDVVJSRU5DRV9TVEFDSztyZXR1cm4gZVtlLmxlbmd0aC0xXX19fSk7dmFyIEprLHFzZT1OKCgpPT57InVzZSBzdHJpY3QiO0ZzKCk7Sms9Y2xhc3N7c3RhdGlje28odGhpcywiTGV4ZXJBZGFwdGVyIil9aW5pdExleGVyQWRhcHRlcigpe3RoaXMudG9rVmVjdG9yPVtdLHRoaXMudG9rVmVjdG9yTGVuZ3RoPTAsdGhpcy5jdXJySWR4PS0xfXNldCBpbnB1dChlKXtpZih0aGlzLnNlbGZBbmFseXNpc0RvbmUhPT0hMCl0aHJvdyBFcnJvcigiTWlzc2luZyA8cGVyZm9ybVNlbGZBbmFseXNpcz4gaW52b2NhdGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBQYXJzZXIncyBjb25zdHJ1Y3Rvci4iKTt0aGlzLnJlc2V0KCksdGhpcy50b2tWZWN0b3I9ZSx0aGlzLnRva1ZlY3Rvckxlbmd0aD1lLmxlbmd0aH1nZXQgaW5wdXQoKXtyZXR1cm4gdGhpcy50b2tWZWN0b3J9U0tJUF9UT0tFTigpe3JldHVybiB0aGlzLmN1cnJJZHg8PXRoaXMudG9rVmVjdG9yLmxlbmd0aC0yPyh0aGlzLmNvbnN1bWVUb2tlbigpLHRoaXMuTEEoMSkpOmpnfUxBKGUpe2xldCByPXRoaXMuY3VycklkeCtlO3JldHVybiByPDB8fHRoaXMudG9rVmVjdG9yTGVuZ3RoPD1yP2pnOnRoaXMudG9rVmVjdG9yW3JdfWNvbnN1bWVUb2tlbigpe3RoaXMuY3VycklkeCsrfWV4cG9ydExleGVyU3RhdGUoKXtyZXR1cm4gdGhpcy5jdXJySWR4fWltcG9ydExleGVyU3RhdGUoZSl7dGhpcy5jdXJySWR4PWV9cmVzZXRMZXhlclN0YXRlKCl7dGhpcy5jdXJySWR4PS0xfW1vdmVUb1Rlcm1pbmF0ZWRTdGF0ZSgpe3RoaXMuY3VycklkeD10aGlzLnRva1ZlY3Rvci5sZW5ndGgtMX1nZXRMZXhlclBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuZXhwb3J0TGV4ZXJTdGF0ZSgpfX19KTt2YXIgZUUsWXNlPU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTtYZygpO0ZzKCk7VmcoKTtmeCgpO29zKCk7ZUU9Y2xhc3N7c3RhdGlje28odGhpcywiUmVjb2duaXplckFwaSIpfUFDVElPTihlKXtyZXR1cm4gZS5jYWxsKHRoaXMpfWNvbnN1bWUoZSxyLG4pe3JldHVybiB0aGlzLmNvbnN1bWVJbnRlcm5hbChyLGUsbil9c3VicnVsZShlLHIsbil7cmV0dXJuIHRoaXMuc3VicnVsZUludGVybmFsKHIsZSxuKX1vcHRpb24oZSxyKXtyZXR1cm4gdGhpcy5vcHRpb25JbnRlcm5hbChyLGUpfW9yKGUscil7cmV0dXJuIHRoaXMub3JJbnRlcm5hbChyLGUpfW1hbnkoZSxyKXtyZXR1cm4gdGhpcy5tYW55SW50ZXJuYWwoZSxyKX1hdExlYXN0T25lKGUscil7cmV0dXJuIHRoaXMuYXRMZWFzdE9uZUludGVybmFsKGUscil9Q09OU1VNRShlLHIpe3JldHVybiB0aGlzLmNvbnN1bWVJbnRlcm5hbChlLDAscil9Q09OU1VNRTEoZSxyKXtyZXR1cm4gdGhpcy5jb25zdW1lSW50ZXJuYWwoZSwxLHIpfUNPTlNVTUUyKGUscil7cmV0dXJuIHRoaXMuY29uc3VtZUludGVybmFsKGUsMixyKX1DT05TVU1FMyhlLHIpe3JldHVybiB0aGlzLmNvbnN1bWVJbnRlcm5hbChlLDMscil9Q09OU1VNRTQoZSxyKXtyZXR1cm4gdGhpcy5jb25zdW1lSW50ZXJuYWwoZSw0LHIpfUNPTlNVTUU1KGUscil7cmV0dXJuIHRoaXMuY29uc3VtZUludGVybmFsKGUsNSxyKX1DT05TVU1FNihlLHIpe3JldHVybiB0aGlzLmNvbnN1bWVJbnRlcm5hbChlLDYscil9Q09OU1VNRTcoZSxyKXtyZXR1cm4gdGhpcy5jb25zdW1lSW50ZXJuYWwoZSw3LHIpfUNPTlNVTUU4KGUscil7cmV0dXJuIHRoaXMuY29uc3VtZUludGVybmFsKGUsOCxyKX1DT05TVU1FOShlLHIpe3JldHVybiB0aGlzLmNvbnN1bWVJbnRlcm5hbChlLDkscil9U1VCUlVMRShlLHIpe3JldHVybiB0aGlzLnN1YnJ1bGVJbnRlcm5hbChlLDAscil9U1VCUlVMRTEoZSxyKXtyZXR1cm4gdGhpcy5zdWJydWxlSW50ZXJuYWwoZSwxLHIpfVNVQlJVTEUyKGUscil7cmV0dXJuIHRoaXMuc3VicnVsZUludGVybmFsKGUsMixyKX1TVUJSVUxFMyhlLHIpe3JldHVybiB0aGlzLnN1YnJ1bGVJbnRlcm5hbChlLDMscil9U1VCUlVMRTQoZSxyKXtyZXR1cm4gdGhpcy5zdWJydWxlSW50ZXJuYWwoZSw0LHIpfVNVQlJVTEU1KGUscil7cmV0dXJuIHRoaXMuc3VicnVsZUludGVybmFsKGUsNSxyKX1TVUJSVUxFNihlLHIpe3JldHVybiB0aGlzLnN1YnJ1bGVJbnRlcm5hbChlLDYscil9U1VCUlVMRTcoZSxyKXtyZXR1cm4gdGhpcy5zdWJydWxlSW50ZXJuYWwoZSw3LHIpfVNVQlJVTEU4KGUscil7cmV0dXJuIHRoaXMuc3VicnVsZUludGVybmFsKGUsOCxyKX1TVUJSVUxFOShlLHIpe3JldHVybiB0aGlzLnN1YnJ1bGVJbnRlcm5hbChlLDkscil9T1BUSU9OKGUpe3JldHVybiB0aGlzLm9wdGlvbkludGVybmFsKGUsMCl9T1BUSU9OMShlKXtyZXR1cm4gdGhpcy5vcHRpb25JbnRlcm5hbChlLDEpfU9QVElPTjIoZSl7cmV0dXJuIHRoaXMub3B0aW9uSW50ZXJuYWwoZSwyKX1PUFRJT04zKGUpe3JldHVybiB0aGlzLm9wdGlvbkludGVybmFsKGUsMyl9T1BUSU9ONChlKXtyZXR1cm4gdGhpcy5vcHRpb25JbnRlcm5hbChlLDQpfU9QVElPTjUoZSl7cmV0dXJuIHRoaXMub3B0aW9uSW50ZXJuYWwoZSw1KX1PUFRJT042KGUpe3JldHVybiB0aGlzLm9wdGlvbkludGVybmFsKGUsNil9T1BUSU9ONyhlKXtyZXR1cm4gdGhpcy5vcHRpb25JbnRlcm5hbChlLDcpfU9QVElPTjgoZSl7cmV0dXJuIHRoaXMub3B0aW9uSW50ZXJuYWwoZSw4KX1PUFRJT045KGUpe3JldHVybiB0aGlzLm9wdGlvbkludGVybmFsKGUsOSl9T1IoZSl7cmV0dXJuIHRoaXMub3JJbnRlcm5hbChlLDApfU9SMShlKXtyZXR1cm4gdGhpcy5vckludGVybmFsKGUsMSl9T1IyKGUpe3JldHVybiB0aGlzLm9ySW50ZXJuYWwoZSwyKX1PUjMoZSl7cmV0dXJuIHRoaXMub3JJbnRlcm5hbChlLDMpfU9SNChlKXtyZXR1cm4gdGhpcy5vckludGVybmFsKGUsNCl9T1I1KGUpe3JldHVybiB0aGlzLm9ySW50ZXJuYWwoZSw1KX1PUjYoZSl7cmV0dXJuIHRoaXMub3JJbnRlcm5hbChlLDYpfU9SNyhlKXtyZXR1cm4gdGhpcy5vckludGVybmFsKGUsNyl9T1I4KGUpe3JldHVybiB0aGlzLm9ySW50ZXJuYWwoZSw4KX1PUjkoZSl7cmV0dXJuIHRoaXMub3JJbnRlcm5hbChlLDkpfU1BTlkoZSl7dGhpcy5tYW55SW50ZXJuYWwoMCxlKX1NQU5ZMShlKXt0aGlzLm1hbnlJbnRlcm5hbCgxLGUpfU1BTlkyKGUpe3RoaXMubWFueUludGVybmFsKDIsZSl9TUFOWTMoZSl7dGhpcy5tYW55SW50ZXJuYWwoMyxlKX1NQU5ZNChlKXt0aGlzLm1hbnlJbnRlcm5hbCg0LGUpfU1BTlk1KGUpe3RoaXMubWFueUludGVybmFsKDUsZSl9TUFOWTYoZSl7dGhpcy5tYW55SW50ZXJuYWwoNixlKX1NQU5ZNyhlKXt0aGlzLm1hbnlJbnRlcm5hbCg3LGUpfU1BTlk4KGUpe3RoaXMubWFueUludGVybmFsKDgsZSl9TUFOWTkoZSl7dGhpcy5tYW55SW50ZXJuYWwoOSxlKX1NQU5ZX1NFUChlKXt0aGlzLm1hbnlTZXBGaXJzdEludGVybmFsKDAsZSl9TUFOWV9TRVAxKGUpe3RoaXMubWFueVNlcEZpcnN0SW50ZXJuYWwoMSxlKX1NQU5ZX1NFUDIoZSl7dGhpcy5tYW55U2VwRmlyc3RJbnRlcm5hbCgyLGUpfU1BTllfU0VQMyhlKXt0aGlzLm1hbnlTZXBGaXJzdEludGVybmFsKDMsZSl9TUFOWV9TRVA0KGUpe3RoaXMubWFueVNlcEZpcnN0SW50ZXJuYWwoNCxlKX1NQU5ZX1NFUDUoZSl7dGhpcy5tYW55U2VwRmlyc3RJbnRlcm5hbCg1LGUpfU1BTllfU0VQNihlKXt0aGlzLm1hbnlTZXBGaXJzdEludGVybmFsKDYsZSl9TUFOWV9TRVA3KGUpe3RoaXMubWFueVNlcEZpcnN0SW50ZXJuYWwoNyxlKX1NQU5ZX1NFUDgoZSl7dGhpcy5tYW55U2VwRmlyc3RJbnRlcm5hbCg4LGUpfU1BTllfU0VQOShlKXt0aGlzLm1hbnlTZXBGaXJzdEludGVybmFsKDksZSl9QVRfTEVBU1RfT05FKGUpe3RoaXMuYXRMZWFzdE9uZUludGVybmFsKDAsZSl9QVRfTEVBU1RfT05FMShlKXtyZXR1cm4gdGhpcy5hdExlYXN0T25lSW50ZXJuYWwoMSxlKX1BVF9MRUFTVF9PTkUyKGUpe3RoaXMuYXRMZWFzdE9uZUludGVybmFsKDIsZSl9QVRfTEVBU1RfT05FMyhlKXt0aGlzLmF0TGVhc3RPbmVJbnRlcm5hbCgzLGUpfUFUX0xFQVNUX09ORTQoZSl7dGhpcy5hdExlYXN0T25lSW50ZXJuYWwoNCxlKX1BVF9MRUFTVF9PTkU1KGUpe3RoaXMuYXRMZWFzdE9uZUludGVybmFsKDUsZSl9QVRfTEVBU1RfT05FNihlKXt0aGlzLmF0TGVhc3RPbmVJbnRlcm5hbCg2LGUpfUFUX0xFQVNUX09ORTcoZSl7dGhpcy5hdExlYXN0T25lSW50ZXJuYWwoNyxlKX1BVF9MRUFTVF9PTkU4KGUpe3RoaXMuYXRMZWFzdE9uZUludGVybmFsKDgsZSl9QVRfTEVBU1RfT05FOShlKXt0aGlzLmF0TGVhc3RPbmVJbnRlcm5hbCg5LGUpfUFUX0xFQVNUX09ORV9TRVAoZSl7dGhpcy5hdExlYXN0T25lU2VwRmlyc3RJbnRlcm5hbCgwLGUpfUFUX0xFQVNUX09ORV9TRVAxKGUpe3RoaXMuYXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWwoMSxlKX1BVF9MRUFTVF9PTkVfU0VQMihlKXt0aGlzLmF0TGVhc3RPbmVTZXBGaXJzdEludGVybmFsKDIsZSl9QVRfTEVBU1RfT05FX1NFUDMoZSl7dGhpcy5hdExlYXN0T25lU2VwRmlyc3RJbnRlcm5hbCgzLGUpfUFUX0xFQVNUX09ORV9TRVA0KGUpe3RoaXMuYXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWwoNCxlKX1BVF9MRUFTVF9PTkVfU0VQNShlKXt0aGlzLmF0TGVhc3RPbmVTZXBGaXJzdEludGVybmFsKDUsZSl9QVRfTEVBU1RfT05FX1NFUDYoZSl7dGhpcy5hdExlYXN0T25lU2VwRmlyc3RJbnRlcm5hbCg2LGUpfUFUX0xFQVNUX09ORV9TRVA3KGUpe3RoaXMuYXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWwoNyxlKX1BVF9MRUFTVF9PTkVfU0VQOChlKXt0aGlzLmF0TGVhc3RPbmVTZXBGaXJzdEludGVybmFsKDgsZSl9QVRfTEVBU1RfT05FX1NFUDkoZSl7dGhpcy5hdExlYXN0T25lU2VwRmlyc3RJbnRlcm5hbCg5LGUpfVJVTEUoZSxyLG49S2cpe2lmKHFuKHRoaXMuZGVmaW5lZFJ1bGVzTmFtZXMsZSkpe2xldCBzPXttZXNzYWdlOlBsLmJ1aWxkRHVwbGljYXRlUnVsZU5hbWVFcnJvcih7dG9wTGV2ZWxSdWxlOmUsZ3JhbW1hck5hbWU6dGhpcy5jbGFzc05hbWV9KSx0eXBlOnppLkRVUExJQ0FURV9SVUxFX05BTUUscnVsZU5hbWU6ZX07dGhpcy5kZWZpbml0aW9uRXJyb3JzLnB1c2gocyl9dGhpcy5kZWZpbmVkUnVsZXNOYW1lcy5wdXNoKGUpO2xldCBpPXRoaXMuZGVmaW5lUnVsZShlLHIsbik7cmV0dXJuIHRoaXNbZV09aSxpfU9WRVJSSURFX1JVTEUoZSxyLG49S2cpe2xldCBpPVNzZShlLHRoaXMuZGVmaW5lZFJ1bGVzTmFtZXMsdGhpcy5jbGFzc05hbWUpO3RoaXMuZGVmaW5pdGlvbkVycm9ycz10aGlzLmRlZmluaXRpb25FcnJvcnMuY29uY2F0KGkpO2xldCBhPXRoaXMuZGVmaW5lUnVsZShlLHIsbik7cmV0dXJuIHRoaXNbZV09YSxhfUJBQ0tUUkFDSyhlLHIpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuaXNCYWNrVHJhY2tpbmdTdGFjay5wdXNoKDEpO2xldCBuPXRoaXMuc2F2ZVJlY29nU3RhdGUoKTt0cnl7cmV0dXJuIGUuYXBwbHkodGhpcyxyKSwhMH1jYXRjaChpKXtpZihsZihpKSlyZXR1cm4hMTt0aHJvdyBpfWZpbmFsbHl7dGhpcy5yZWxvYWRSZWNvZ1N0YXRlKG4pLHRoaXMuaXNCYWNrVHJhY2tpbmdTdGFjay5wb3AoKX19fWdldEdBc3RQcm9kdWN0aW9ucygpe3JldHVybiB0aGlzLmdhc3RQcm9kdWN0aW9uc0NhY2hlfWdldFNlcmlhbGl6ZWRHYXN0UHJvZHVjdGlvbnMoKXtyZXR1cm4gU2soYnIodGhpcy5nYXN0UHJvZHVjdGlvbnNDYWNoZSkpfX19KTt2YXIgdEUsWHNlPU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTtxaygpO1hnKCk7cWcoKTtjeCgpO0ZzKCk7R04oKTt1cCgpO2NwKCk7dEU9Y2xhc3N7c3RhdGlje28odGhpcywiUmVjb2duaXplckVuZ2luZSIpfWluaXRSZWNvZ25pemVyRW5naW5lKGUscil7aWYodGhpcy5jbGFzc05hbWU9dGhpcy5jb25zdHJ1Y3Rvci5uYW1lLHRoaXMuc2hvcnRSdWxlTmFtZVRvRnVsbD17fSx0aGlzLmZ1bGxSdWxlTmFtZVRvU2hvcnQ9e30sdGhpcy5ydWxlU2hvcnROYW1lSWR4PTI1Nix0aGlzLnRva2VuTWF0Y2hlcj16Zyx0aGlzLnN1YnJ1bGVJZHg9MCx0aGlzLmRlZmluZWRSdWxlc05hbWVzPVtdLHRoaXMudG9rZW5zTWFwPXt9LHRoaXMuaXNCYWNrVHJhY2tpbmdTdGFjaz1bXSx0aGlzLlJVTEVfU1RBQ0s9W10sdGhpcy5SVUxFX09DQ1VSUkVOQ0VfU1RBQ0s9W10sdGhpcy5nYXN0UHJvZHVjdGlvbnNDYWNoZT17fSxCdChyLCJzZXJpYWxpemVkR3JhbW1hciIpKXRocm93IEVycm9yKGBUaGUgUGFyc2VyJ3MgY29uZmlndXJhdGlvbiBjYW4gbm8gbG9uZ2VyIGNvbnRhaW4gYSA8c2VyaWFsaXplZEdyYW1tYXI+IHByb3BlcnR5LgoJU2VlOiBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9jaGFuZ2VzL0JSRUFLSU5HX0NIQU5HRVMuaHRtbCNfNi0wLTAKCUZvciBGdXJ0aGVyIGRldGFpbHMuYCk7aWYoUHQoZSkpe2lmKHVyKGUpKXRocm93IEVycm9yKGBBIFRva2VuIFZvY2FidWxhcnkgY2Fubm90IGJlIGVtcHR5LgoJTm90ZSB0aGF0IHRoZSBmaXJzdCBhcmd1bWVudCBmb3IgdGhlIHBhcnNlciBjb25zdHJ1Y3RvcgoJaXMgbm8gbG9uZ2VyIGEgVG9rZW4gdmVjdG9yIChzaW5jZSB2NC4wKS5gKTtpZih0eXBlb2YgZVswXS5zdGFydE9mZnNldD09Im51bWJlciIpdGhyb3cgRXJyb3IoYFRoZSBQYXJzZXIgY29uc3RydWN0b3Igbm8gbG9uZ2VyIGFjY2VwdHMgYSB0b2tlbiB2ZWN0b3IgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LgoJU2VlOiBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9jaGFuZ2VzL0JSRUFLSU5HX0NIQU5HRVMuaHRtbCNfNC0wLTAKCUZvciBGdXJ0aGVyIGRldGFpbHMuYCl9aWYoUHQoZSkpdGhpcy50b2tlbnNNYXA9WHIoZSwoYSxzKT0+KGFbcy5uYW1lXT1zLGEpLHt9KTtlbHNlIGlmKEJ0KGUsIm1vZGVzIikmJk1hKHFyKGJyKGUubW9kZXMpKSxyc2UpKXtsZXQgYT1xcihicihlLm1vZGVzKSkscz1CbShhKTt0aGlzLnRva2Vuc01hcD1YcihzLChsLHUpPT4obFt1Lm5hbWVdPXUsbCkse30pfWVsc2UgaWYoYm4oZSkpdGhpcy50b2tlbnNNYXA9YW4oZSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIjx0b2tlbnNEaWN0aW9uYXJ5PiBhcmd1bWVudCBtdXN0IGJlIEFuIEFycmF5IG9mIFRva2VuIGNvbnN0cnVjdG9ycywgQSBkaWN0aW9uYXJ5IG9mIFRva2VuIGNvbnN0cnVjdG9ycyBvciBhbiBJTXVsdGlNb2RlTGV4ZXJEZWZpbml0aW9uIik7dGhpcy50b2tlbnNNYXAuRU9GPWxvO2xldCBuPUJ0KGUsIm1vZGVzIik/cXIoYnIoZS5tb2RlcykpOmJyKGUpLGk9TWEobixhPT51cihhLmNhdGVnb3J5TWF0Y2hlcykpO3RoaXMudG9rZW5NYXRjaGVyPWk/emc6UHUsQnUoYnIodGhpcy50b2tlbnNNYXApKX1kZWZpbmVSdWxlKGUscixuKXtpZih0aGlzLnNlbGZBbmFseXNpc0RvbmUpdGhyb3cgRXJyb3IoYEdyYW1tYXIgcnVsZSA8JHtlfT4gbWF5IG5vdCBiZSBkZWZpbmVkIGFmdGVyIHRoZSAncGVyZm9ybVNlbGZBbmFseXNpcycgbWV0aG9kIGhhcyBiZWVuIGNhbGxlZCcKTWFrZSBzdXJlIHRoYXQgYWxsIGdyYW1tYXIgcnVsZSBkZWZpbml0aW9ucyBhcmUgZG9uZSBiZWZvcmUgJ3BlcmZvcm1TZWxmQW5hbHlzaXMnIGlzIGNhbGxlZC5gKTtsZXQgaT1CdChuLCJyZXN5bmNFbmFibGVkIik/bi5yZXN5bmNFbmFibGVkOktnLnJlc3luY0VuYWJsZWQsYT1CdChuLCJyZWNvdmVyeVZhbHVlRnVuYyIpP24ucmVjb3ZlcnlWYWx1ZUZ1bmM6S2cucmVjb3ZlcnlWYWx1ZUZ1bmMscz10aGlzLnJ1bGVTaG9ydE5hbWVJZHg8PDEyO3RoaXMucnVsZVNob3J0TmFtZUlkeCsrLHRoaXMuc2hvcnRSdWxlTmFtZVRvRnVsbFtzXT1lLHRoaXMuZnVsbFJ1bGVOYW1lVG9TaG9ydFtlXT1zO2xldCBsO3JldHVybiB0aGlzLm91dHB1dENzdD09PSEwP2w9byhmdW5jdGlvbiguLi5mKXt0cnl7dGhpcy5ydWxlSW52b2NhdGlvblN0YXRlVXBkYXRlKHMsZSx0aGlzLnN1YnJ1bGVJZHgpLHIuYXBwbHkodGhpcyxmKTtsZXQgZD10aGlzLkNTVF9TVEFDS1t0aGlzLkNTVF9TVEFDSy5sZW5ndGgtMV07cmV0dXJuIHRoaXMuY3N0UG9zdFJ1bGUoZCksZH1jYXRjaChkKXtyZXR1cm4gdGhpcy5pbnZva2VSdWxlQ2F0Y2goZCxpLGEpfWZpbmFsbHl7dGhpcy5ydWxlRmluYWxseVN0YXRlVXBkYXRlKCl9fSwiaW52b2tlUnVsZVdpdGhUcnkiKTpsPW8oZnVuY3Rpb24oLi4uZil7dHJ5e3JldHVybiB0aGlzLnJ1bGVJbnZvY2F0aW9uU3RhdGVVcGRhdGUocyxlLHRoaXMuc3VicnVsZUlkeCksci5hcHBseSh0aGlzLGYpfWNhdGNoKGQpe3JldHVybiB0aGlzLmludm9rZVJ1bGVDYXRjaChkLGksYSl9ZmluYWxseXt0aGlzLnJ1bGVGaW5hbGx5U3RhdGVVcGRhdGUoKX19LCJpbnZva2VSdWxlV2l0aFRyeUNzdCIpLE9iamVjdC5hc3NpZ24obCx7cnVsZU5hbWU6ZSxvcmlnaW5hbEdyYW1tYXJBY3Rpb246cn0pfWludm9rZVJ1bGVDYXRjaChlLHIsbil7bGV0IGk9dGhpcy5SVUxFX1NUQUNLLmxlbmd0aD09PTEsYT1yJiYhdGhpcy5pc0JhY2tUcmFja2luZygpJiZ0aGlzLnJlY292ZXJ5RW5hYmxlZDtpZihsZihlKSl7bGV0IHM9ZTtpZihhKXtsZXQgbD10aGlzLmZpbmRSZVN5bmNUb2tlblR5cGUoKTtpZih0aGlzLmlzSW5DdXJyZW50UnVsZVJlU3luY1NldChsKSlpZihzLnJlc3luY2VkVG9rZW5zPXRoaXMucmVTeW5jVG8obCksdGhpcy5vdXRwdXRDc3Qpe2xldCB1PXRoaXMuQ1NUX1NUQUNLW3RoaXMuQ1NUX1NUQUNLLmxlbmd0aC0xXTtyZXR1cm4gdS5yZWNvdmVyZWROb2RlPSEwLHV9ZWxzZSByZXR1cm4gbihlKTtlbHNle2lmKHRoaXMub3V0cHV0Q3N0KXtsZXQgdT10aGlzLkNTVF9TVEFDS1t0aGlzLkNTVF9TVEFDSy5sZW5ndGgtMV07dS5yZWNvdmVyZWROb2RlPSEwLHMucGFydGlhbENzdFJlc3VsdD11fXRocm93IHN9fWVsc2V7aWYoaSlyZXR1cm4gdGhpcy5tb3ZlVG9UZXJtaW5hdGVkU3RhdGUoKSxuKGUpO3Rocm93IHN9fWVsc2UgdGhyb3cgZX1vcHRpb25JbnRlcm5hbChlLHIpe2xldCBuPXRoaXMuZ2V0S2V5Rm9yQXV0b21hdGljTG9va2FoZWFkKDUxMixyKTtyZXR1cm4gdGhpcy5vcHRpb25JbnRlcm5hbExvZ2ljKGUscixuKX1vcHRpb25JbnRlcm5hbExvZ2ljKGUscixuKXtsZXQgaT10aGlzLmdldExhRnVuY0Zyb21DYWNoZShuKSxhO2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXthPWUuREVGO2xldCBzPWUuR0FURTtpZihzIT09dm9pZCAwKXtsZXQgbD1pO2k9bygoKT0+cy5jYWxsKHRoaXMpJiZsLmNhbGwodGhpcyksImxvb2tBaGVhZEZ1bmMiKX19ZWxzZSBhPWU7aWYoaS5jYWxsKHRoaXMpPT09ITApcmV0dXJuIGEuY2FsbCh0aGlzKX1hdExlYXN0T25lSW50ZXJuYWwoZSxyKXtsZXQgbj10aGlzLmdldEtleUZvckF1dG9tYXRpY0xvb2thaGVhZCgxMDI0LGUpO3JldHVybiB0aGlzLmF0TGVhc3RPbmVJbnRlcm5hbExvZ2ljKGUscixuKX1hdExlYXN0T25lSW50ZXJuYWxMb2dpYyhlLHIsbil7bGV0IGk9dGhpcy5nZXRMYUZ1bmNGcm9tQ2FjaGUobiksYTtpZih0eXBlb2YgciE9ImZ1bmN0aW9uIil7YT1yLkRFRjtsZXQgcz1yLkdBVEU7aWYocyE9PXZvaWQgMCl7bGV0IGw9aTtpPW8oKCk9PnMuY2FsbCh0aGlzKSYmbC5jYWxsKHRoaXMpLCJsb29rQWhlYWRGdW5jIil9fWVsc2UgYT1yO2lmKGkuY2FsbCh0aGlzKT09PSEwKXtsZXQgcz10aGlzLmRvU2luZ2xlUmVwZXRpdGlvbihhKTtmb3IoO2kuY2FsbCh0aGlzKT09PSEwJiZzPT09ITA7KXM9dGhpcy5kb1NpbmdsZVJlcGV0aXRpb24oYSl9ZWxzZSB0aHJvdyB0aGlzLnJhaXNlRWFybHlFeGl0RXhjZXB0aW9uKGUsam4uUkVQRVRJVElPTl9NQU5EQVRPUlksci5FUlJfTVNHKTt0aGlzLmF0dGVtcHRJblJlcGV0aXRpb25SZWNvdmVyeSh0aGlzLmF0TGVhc3RPbmVJbnRlcm5hbCxbZSxyXSxpLDEwMjQsZSxCayl9YXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWwoZSxyKXtsZXQgbj10aGlzLmdldEtleUZvckF1dG9tYXRpY0xvb2thaGVhZCgxNTM2LGUpO3RoaXMuYXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWxMb2dpYyhlLHIsbil9YXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWxMb2dpYyhlLHIsbil7bGV0IGk9ci5ERUYsYT1yLlNFUDtpZih0aGlzLmdldExhRnVuY0Zyb21DYWNoZShuKS5jYWxsKHRoaXMpPT09ITApe2kuY2FsbCh0aGlzKTtsZXQgbD1vKCgpPT50aGlzLnRva2VuTWF0Y2hlcih0aGlzLkxBKDEpLGEpLCJzZXBhcmF0b3JMb29rQWhlYWRGdW5jIik7Zm9yKDt0aGlzLnRva2VuTWF0Y2hlcih0aGlzLkxBKDEpLGEpPT09ITA7KXRoaXMuQ09OU1VNRShhKSxpLmNhbGwodGhpcyk7dGhpcy5hdHRlbXB0SW5SZXBldGl0aW9uUmVjb3ZlcnkodGhpcy5yZXBldGl0aW9uU2VwU2Vjb25kSW50ZXJuYWwsW2UsYSxsLGksbHhdLGwsMTUzNixlLGx4KX1lbHNlIHRocm93IHRoaXMucmFpc2VFYXJseUV4aXRFeGNlcHRpb24oZSxqbi5SRVBFVElUSU9OX01BTkRBVE9SWV9XSVRIX1NFUEFSQVRPUixyLkVSUl9NU0cpfW1hbnlJbnRlcm5hbChlLHIpe2xldCBuPXRoaXMuZ2V0S2V5Rm9yQXV0b21hdGljTG9va2FoZWFkKDc2OCxlKTtyZXR1cm4gdGhpcy5tYW55SW50ZXJuYWxMb2dpYyhlLHIsbil9bWFueUludGVybmFsTG9naWMoZSxyLG4pe2xldCBpPXRoaXMuZ2V0TGFGdW5jRnJvbUNhY2hlKG4pLGE7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpe2E9ci5ERUY7bGV0IGw9ci5HQVRFO2lmKGwhPT12b2lkIDApe2xldCB1PWk7aT1vKCgpPT5sLmNhbGwodGhpcykmJnUuY2FsbCh0aGlzKSwibG9va2FoZWFkRnVuY3Rpb24iKX19ZWxzZSBhPXI7bGV0IHM9ITA7Zm9yKDtpLmNhbGwodGhpcyk9PT0hMCYmcz09PSEwOylzPXRoaXMuZG9TaW5nbGVSZXBldGl0aW9uKGEpO3RoaXMuYXR0ZW1wdEluUmVwZXRpdGlvblJlY292ZXJ5KHRoaXMubWFueUludGVybmFsLFtlLHJdLGksNzY4LGUsUGsscyl9bWFueVNlcEZpcnN0SW50ZXJuYWwoZSxyKXtsZXQgbj10aGlzLmdldEtleUZvckF1dG9tYXRpY0xvb2thaGVhZCgxMjgwLGUpO3RoaXMubWFueVNlcEZpcnN0SW50ZXJuYWxMb2dpYyhlLHIsbil9bWFueVNlcEZpcnN0SW50ZXJuYWxMb2dpYyhlLHIsbil7bGV0IGk9ci5ERUYsYT1yLlNFUDtpZih0aGlzLmdldExhRnVuY0Zyb21DYWNoZShuKS5jYWxsKHRoaXMpPT09ITApe2kuY2FsbCh0aGlzKTtsZXQgbD1vKCgpPT50aGlzLnRva2VuTWF0Y2hlcih0aGlzLkxBKDEpLGEpLCJzZXBhcmF0b3JMb29rQWhlYWRGdW5jIik7Zm9yKDt0aGlzLnRva2VuTWF0Y2hlcih0aGlzLkxBKDEpLGEpPT09ITA7KXRoaXMuQ09OU1VNRShhKSxpLmNhbGwodGhpcyk7dGhpcy5hdHRlbXB0SW5SZXBldGl0aW9uUmVjb3ZlcnkodGhpcy5yZXBldGl0aW9uU2VwU2Vjb25kSW50ZXJuYWwsW2UsYSxsLGksb3hdLGwsMTI4MCxlLG94KX19cmVwZXRpdGlvblNlcFNlY29uZEludGVybmFsKGUscixuLGksYSl7Zm9yKDtuKCk7KXRoaXMuQ09OU1VNRShyKSxpLmNhbGwodGhpcyk7dGhpcy5hdHRlbXB0SW5SZXBldGl0aW9uUmVjb3ZlcnkodGhpcy5yZXBldGl0aW9uU2VwU2Vjb25kSW50ZXJuYWwsW2UscixuLGksYV0sbiwxNTM2LGUsYSl9ZG9TaW5nbGVSZXBldGl0aW9uKGUpe2xldCByPXRoaXMuZ2V0TGV4ZXJQb3NpdGlvbigpO3JldHVybiBlLmNhbGwodGhpcyksdGhpcy5nZXRMZXhlclBvc2l0aW9uKCk+cn1vckludGVybmFsKGUscil7bGV0IG49dGhpcy5nZXRLZXlGb3JBdXRvbWF0aWNMb29rYWhlYWQoMjU2LHIpLGk9UHQoZSk/ZTplLkRFRixzPXRoaXMuZ2V0TGFGdW5jRnJvbUNhY2hlKG4pLmNhbGwodGhpcyxpKTtpZihzIT09dm9pZCAwKXJldHVybiBpW3NdLkFMVC5jYWxsKHRoaXMpO3RoaXMucmFpc2VOb0FsdEV4Y2VwdGlvbihyLGUuRVJSX01TRyl9cnVsZUZpbmFsbHlTdGF0ZVVwZGF0ZSgpe2lmKHRoaXMuUlVMRV9TVEFDSy5wb3AoKSx0aGlzLlJVTEVfT0NDVVJSRU5DRV9TVEFDSy5wb3AoKSx0aGlzLmNzdEZpbmFsbHlTdGF0ZVVwZGF0ZSgpLHRoaXMuUlVMRV9TVEFDSy5sZW5ndGg9PT0wJiZ0aGlzLmlzQXRFbmRPZklucHV0KCk9PT0hMSl7bGV0IGU9dGhpcy5MQSgxKSxyPXRoaXMuZXJyb3JNZXNzYWdlUHJvdmlkZXIuYnVpbGROb3RBbGxJbnB1dFBhcnNlZE1lc3NhZ2Uoe2ZpcnN0UmVkdW5kYW50OmUscnVsZU5hbWU6dGhpcy5nZXRDdXJyUnVsZUZ1bGxOYW1lKCl9KTt0aGlzLlNBVkVfRVJST1IobmV3IHB4KHIsZSkpfX1zdWJydWxlSW50ZXJuYWwoZSxyLG4pe2xldCBpO3RyeXtsZXQgYT1uIT09dm9pZCAwP24uQVJHUzp2b2lkIDA7cmV0dXJuIHRoaXMuc3VicnVsZUlkeD1yLGk9ZS5hcHBseSh0aGlzLGEpLHRoaXMuY3N0UG9zdE5vblRlcm1pbmFsKGksbiE9PXZvaWQgMCYmbi5MQUJFTCE9PXZvaWQgMD9uLkxBQkVMOmUucnVsZU5hbWUpLGl9Y2F0Y2goYSl7dGhyb3cgdGhpcy5zdWJydWxlSW50ZXJuYWxFcnJvcihhLG4sZS5ydWxlTmFtZSl9fXN1YnJ1bGVJbnRlcm5hbEVycm9yKGUscixuKXt0aHJvdyBsZihlKSYmZS5wYXJ0aWFsQ3N0UmVzdWx0IT09dm9pZCAwJiYodGhpcy5jc3RQb3N0Tm9uVGVybWluYWwoZS5wYXJ0aWFsQ3N0UmVzdWx0LHIhPT12b2lkIDAmJnIuTEFCRUwhPT12b2lkIDA/ci5MQUJFTDpuKSxkZWxldGUgZS5wYXJ0aWFsQ3N0UmVzdWx0KSxlfWNvbnN1bWVJbnRlcm5hbChlLHIsbil7bGV0IGk7dHJ5e2xldCBhPXRoaXMuTEEoMSk7dGhpcy50b2tlbk1hdGNoZXIoYSxlKT09PSEwPyh0aGlzLmNvbnN1bWVUb2tlbigpLGk9YSk6dGhpcy5jb25zdW1lSW50ZXJuYWxFcnJvcihlLGEsbil9Y2F0Y2goYSl7aT10aGlzLmNvbnN1bWVJbnRlcm5hbFJlY292ZXJ5KGUscixhKX1yZXR1cm4gdGhpcy5jc3RQb3N0VGVybWluYWwobiE9PXZvaWQgMCYmbi5MQUJFTCE9PXZvaWQgMD9uLkxBQkVMOmUubmFtZSxpKSxpfWNvbnN1bWVJbnRlcm5hbEVycm9yKGUscixuKXtsZXQgaSxhPXRoaXMuTEEoMCk7dGhyb3cgbiE9PXZvaWQgMCYmbi5FUlJfTVNHP2k9bi5FUlJfTVNHOmk9dGhpcy5lcnJvck1lc3NhZ2VQcm92aWRlci5idWlsZE1pc21hdGNoVG9rZW5NZXNzYWdlKHtleHBlY3RlZDplLGFjdHVhbDpyLHByZXZpb3VzOmEscnVsZU5hbWU6dGhpcy5nZXRDdXJyUnVsZUZ1bGxOYW1lKCl9KSx0aGlzLlNBVkVfRVJST1IobmV3IGhwKGkscixhKSl9Y29uc3VtZUludGVybmFsUmVjb3ZlcnkoZSxyLG4pe2lmKHRoaXMucmVjb3ZlcnlFbmFibGVkJiZuLm5hbWU9PT0iTWlzbWF0Y2hlZFRva2VuRXhjZXB0aW9uIiYmIXRoaXMuaXNCYWNrVHJhY2tpbmcoKSl7bGV0IGk9dGhpcy5nZXRGb2xsb3dzRm9ySW5SdWxlUmVjb3ZlcnkoZSxyKTt0cnl7cmV0dXJuIHRoaXMudHJ5SW5SdWxlUmVjb3ZlcnkoZSxpKX1jYXRjaChhKXt0aHJvdyBhLm5hbWU9PT16Tj9uOmF9fWVsc2UgdGhyb3cgbn1zYXZlUmVjb2dTdGF0ZSgpe2xldCBlPXRoaXMuZXJyb3JzLHI9YW4odGhpcy5SVUxFX1NUQUNLKTtyZXR1cm57ZXJyb3JzOmUsbGV4ZXJTdGF0ZTp0aGlzLmV4cG9ydExleGVyU3RhdGUoKSxSVUxFX1NUQUNLOnIsQ1NUX1NUQUNLOnRoaXMuQ1NUX1NUQUNLfX1yZWxvYWRSZWNvZ1N0YXRlKGUpe3RoaXMuZXJyb3JzPWUuZXJyb3JzLHRoaXMuaW1wb3J0TGV4ZXJTdGF0ZShlLmxleGVyU3RhdGUpLHRoaXMuUlVMRV9TVEFDSz1lLlJVTEVfU1RBQ0t9cnVsZUludm9jYXRpb25TdGF0ZVVwZGF0ZShlLHIsbil7dGhpcy5SVUxFX09DQ1VSUkVOQ0VfU1RBQ0sucHVzaChuKSx0aGlzLlJVTEVfU1RBQ0sucHVzaChlKSx0aGlzLmNzdEludm9jYXRpb25TdGF0ZVVwZGF0ZShyKX1pc0JhY2tUcmFja2luZygpe3JldHVybiB0aGlzLmlzQmFja1RyYWNraW5nU3RhY2subGVuZ3RoIT09MH1nZXRDdXJyUnVsZUZ1bGxOYW1lKCl7bGV0IGU9dGhpcy5nZXRMYXN0RXhwbGljaXRSdWxlU2hvcnROYW1lKCk7cmV0dXJuIHRoaXMuc2hvcnRSdWxlTmFtZVRvRnVsbFtlXX1zaG9ydFJ1bGVOYW1lVG9GdWxsTmFtZShlKXtyZXR1cm4gdGhpcy5zaG9ydFJ1bGVOYW1lVG9GdWxsW2VdfWlzQXRFbmRPZklucHV0KCl7cmV0dXJuIHRoaXMudG9rZW5NYXRjaGVyKHRoaXMuTEEoMSksbG8pfXJlc2V0KCl7dGhpcy5yZXNldExleGVyU3RhdGUoKSx0aGlzLnN1YnJ1bGVJZHg9MCx0aGlzLmlzQmFja1RyYWNraW5nU3RhY2s9W10sdGhpcy5lcnJvcnM9W10sdGhpcy5SVUxFX1NUQUNLPVtdLHRoaXMuQ1NUX1NUQUNLPVtdLHRoaXMuUlVMRV9PQ0NVUlJFTkNFX1NUQUNLPVtdfX19KTt2YXIgckUsanNlPU4oKCk9PnsidXNlIHN0cmljdCI7WGcoKTtxdCgpO3FnKCk7RnMoKTtyRT1jbGFzc3tzdGF0aWN7byh0aGlzLCJFcnJvckhhbmRsZXIiKX1pbml0RXJyb3JIYW5kbGVyKGUpe3RoaXMuX2Vycm9ycz1bXSx0aGlzLmVycm9yTWVzc2FnZVByb3ZpZGVyPUJ0KGUsImVycm9yTWVzc2FnZVByb3ZpZGVyIik/ZS5lcnJvck1lc3NhZ2VQcm92aWRlcjpscy5lcnJvck1lc3NhZ2VQcm92aWRlcn1TQVZFX0VSUk9SKGUpe2lmKGxmKGUpKXJldHVybiBlLmNvbnRleHQ9e3J1bGVTdGFjazp0aGlzLmdldEh1bWFuUmVhZGFibGVSdWxlU3RhY2soKSxydWxlT2NjdXJyZW5jZVN0YWNrOmFuKHRoaXMuUlVMRV9PQ0NVUlJFTkNFX1NUQUNLKX0sdGhpcy5fZXJyb3JzLnB1c2goZSksZTt0aHJvdyBFcnJvcigiVHJ5aW5nIHRvIHNhdmUgYW4gRXJyb3Igd2hpY2ggaXMgbm90IGEgUmVjb2duaXRpb25FeGNlcHRpb24iKX1nZXQgZXJyb3JzKCl7cmV0dXJuIGFuKHRoaXMuX2Vycm9ycyl9c2V0IGVycm9ycyhlKXt0aGlzLl9lcnJvcnM9ZX1yYWlzZUVhcmx5RXhpdEV4Y2VwdGlvbihlLHIsbil7bGV0IGk9dGhpcy5nZXRDdXJyUnVsZUZ1bGxOYW1lKCksYT10aGlzLmdldEdBc3RQcm9kdWN0aW9ucygpW2ldLGw9V2coZSxhLHIsdGhpcy5tYXhMb29rYWhlYWQpWzBdLHU9W107Zm9yKGxldCBmPTE7Zjw9dGhpcy5tYXhMb29rYWhlYWQ7ZisrKXUucHVzaCh0aGlzLkxBKGYpKTtsZXQgaD10aGlzLmVycm9yTWVzc2FnZVByb3ZpZGVyLmJ1aWxkRWFybHlFeGl0TWVzc2FnZSh7ZXhwZWN0ZWRJdGVyYXRpb25QYXRoczpsLGFjdHVhbDp1LHByZXZpb3VzOnRoaXMuTEEoMCksY3VzdG9tVXNlckRlc2NyaXB0aW9uOm4scnVsZU5hbWU6aX0pO3Rocm93IHRoaXMuU0FWRV9FUlJPUihuZXcgbXgoaCx0aGlzLkxBKDEpLHRoaXMuTEEoMCkpKX1yYWlzZU5vQWx0RXhjZXB0aW9uKGUscil7bGV0IG49dGhpcy5nZXRDdXJyUnVsZUZ1bGxOYW1lKCksaT10aGlzLmdldEdBc3RQcm9kdWN0aW9ucygpW25dLGE9SGcoZSxpLHRoaXMubWF4TG9va2FoZWFkKSxzPVtdO2ZvcihsZXQgaD0xO2g8PXRoaXMubWF4TG9va2FoZWFkO2grKylzLnB1c2godGhpcy5MQShoKSk7bGV0IGw9dGhpcy5MQSgwKSx1PXRoaXMuZXJyb3JNZXNzYWdlUHJvdmlkZXIuYnVpbGROb1ZpYWJsZUFsdE1lc3NhZ2Uoe2V4cGVjdGVkUGF0aHNQZXJBbHQ6YSxhY3R1YWw6cyxwcmV2aW91czpsLGN1c3RvbVVzZXJEZXNjcmlwdGlvbjpyLHJ1bGVOYW1lOnRoaXMuZ2V0Q3VyclJ1bGVGdWxsTmFtZSgpfSk7dGhyb3cgdGhpcy5TQVZFX0VSUk9SKG5ldyBkeCh1LHRoaXMuTEEoMSksbCkpfX19KTt2YXIgbkUsS3NlPU4oKCk9PnsidXNlIHN0cmljdCI7Y3goKTtxdCgpO25FPWNsYXNze3N0YXRpY3tvKHRoaXMsIkNvbnRlbnRBc3Npc3QiKX1pbml0Q29udGVudEFzc2lzdCgpe31jb21wdXRlQ29udGVudEFzc2lzdChlLHIpe2xldCBuPXRoaXMuZ2FzdFByb2R1Y3Rpb25zQ2FjaGVbZV07aWYocHIobikpdGhyb3cgRXJyb3IoYFJ1bGUgLT4ke2V9PC0gZG9lcyBub3QgZXhpc3QgaW4gdGhpcyBncmFtbWFyLmApO3JldHVybiAkayhbbl0scix0aGlzLnRva2VuTWF0Y2hlcix0aGlzLm1heExvb2thaGVhZCl9Z2V0TmV4dFBvc3NpYmxlVG9rZW5UeXBlcyhlKXtsZXQgcj1pYShlLnJ1bGVTdGFjayksaT10aGlzLmdldEdBc3RQcm9kdWN0aW9ucygpW3JdO3JldHVybiBuZXcgT2soaSxlKS5zdGFydFdhbGtpbmcoKX19fSk7ZnVuY3Rpb24geXgodCxlLHIsbj0hMSl7YUUocik7bGV0IGk9Z2EodGhpcy5yZWNvcmRpbmdQcm9kU3RhY2spLGE9U2koZSk/ZTplLkRFRixzPW5ldyB0KHtkZWZpbml0aW9uOltdLGlkeDpyfSk7cmV0dXJuIG4mJihzLnNlcGFyYXRvcj1lLlNFUCksQnQoZSwiTUFYX0xPT0tBSEVBRCIpJiYocy5tYXhMb29rYWhlYWQ9ZS5NQVhfTE9PS0FIRUFEKSx0aGlzLnJlY29yZGluZ1Byb2RTdGFjay5wdXNoKHMpLGEuY2FsbCh0aGlzKSxpLmRlZmluaXRpb24ucHVzaChzKSx0aGlzLnJlY29yZGluZ1Byb2RTdGFjay5wb3AoKSxzRX1mdW5jdGlvbiBkQmUodCxlKXthRShlKTtsZXQgcj1nYSh0aGlzLnJlY29yZGluZ1Byb2RTdGFjayksbj1QdCh0KT09PSExLGk9bj09PSExP3Q6dC5ERUYsYT1uZXcgVG4oe2RlZmluaXRpb246W10saWR4OmUsaWdub3JlQW1iaWd1aXRpZXM6biYmdC5JR05PUkVfQU1CSUdVSVRJRVM9PT0hMH0pO0J0KHQsIk1BWF9MT09LQUhFQUQiKSYmKGEubWF4TG9va2FoZWFkPXQuTUFYX0xPT0tBSEVBRCk7bGV0IHM9QTIoaSxsPT5TaShsLkdBVEUpKTtyZXR1cm4gYS5oYXNQcmVkaWNhdGVzPXMsci5kZWZpbml0aW9uLnB1c2goYSksQWUoaSxsPT57bGV0IHU9bmV3IERuKHtkZWZpbml0aW9uOltdfSk7YS5kZWZpbml0aW9uLnB1c2godSksQnQobCwiSUdOT1JFX0FNQklHVUlUSUVTIik/dS5pZ25vcmVBbWJpZ3VpdGllcz1sLklHTk9SRV9BTUJJR1VJVElFUzpCdChsLCJHQVRFIikmJih1Lmlnbm9yZUFtYmlndWl0aWVzPSEwKSx0aGlzLnJlY29yZGluZ1Byb2RTdGFjay5wdXNoKHUpLGwuQUxULmNhbGwodGhpcyksdGhpcy5yZWNvcmRpbmdQcm9kU3RhY2sucG9wKCl9KSxzRX1mdW5jdGlvbiBKc2UodCl7cmV0dXJuIHQ9PT0wPyIiOmAke3R9YH1mdW5jdGlvbiBhRSh0KXtpZih0PDB8fHQ+WnNlKXtsZXQgZT1uZXcgRXJyb3IoYEludmFsaWQgRFNMIE1ldGhvZCBpZHggdmFsdWU6IDwke3R9PgoJSWR4IHZhbHVlIG11c3QgYmUgYSBub25lIG5lZ2F0aXZlIHZhbHVlIHNtYWxsZXIgdGhhbiAke1pzZSsxfWApO3Rocm93IGUuS05PV05fUkVDT1JERVJfRVJST1I9ITAsZX19dmFyIHNFLFFzZSxac2UsZW9lLHRvZSxmQmUsaUUscm9lPU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTtvcygpO2l4KCk7Y3AoKTt1cCgpO0ZzKCk7cWsoKTtzRT17ZGVzY3JpcHRpb246IlRoaXMgT2JqZWN0IGluZGljYXRlcyB0aGUgUGFyc2VyIGlzIGR1cmluZyBSZWNvcmRpbmcgUGhhc2UifTtPYmplY3QuZnJlZXplKHNFKTtRc2U9ITAsWnNlPU1hdGgucG93KDIsOCktMSxlb2U9b2Yoe25hbWU6IlJFQ09SRElOR19QSEFTRV9UT0tFTiIscGF0dGVybjpYbi5OQX0pO0J1KFtlb2VdKTt0b2U9JHUoZW9lLGBUaGlzIElUb2tlbiBpbmRpY2F0ZXMgdGhlIFBhcnNlciBpcyBpbiBSZWNvcmRpbmcgUGhhc2UKCVNlZTogaHR0cHM6Ly9jaGV2cm90YWluLmlvL2RvY3MvZ3VpZGUvaW50ZXJuYWxzLmh0bWwjZ3JhbW1hci1yZWNvcmRpbmcgZm9yIGRldGFpbHNgLC0xLC0xLC0xLC0xLC0xLC0xKTtPYmplY3QuZnJlZXplKHRvZSk7ZkJlPXtuYW1lOmBUaGlzIENTVE5vZGUgaW5kaWNhdGVzIHRoZSBQYXJzZXIgaXMgaW4gUmVjb3JkaW5nIFBoYXNlCglTZWU6IGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL2ludGVybmFscy5odG1sI2dyYW1tYXItcmVjb3JkaW5nIGZvciBkZXRhaWxzYCxjaGlsZHJlbjp7fX0saUU9Y2xhc3N7c3RhdGlje28odGhpcywiR2FzdFJlY29yZGVyIil9aW5pdEdhc3RSZWNvcmRlcihlKXt0aGlzLnJlY29yZGluZ1Byb2RTdGFjaz1bXSx0aGlzLlJFQ09SRElOR19QSEFTRT0hMX1lbmFibGVSZWNvcmRpbmcoKXt0aGlzLlJFQ09SRElOR19QSEFTRT0hMCx0aGlzLlRSQUNFX0lOSVQoIkVuYWJsZSBSZWNvcmRpbmciLCgpPT57Zm9yKGxldCBlPTA7ZTwxMDtlKyspe2xldCByPWU+MD9lOiIiO3RoaXNbYENPTlNVTUUke3J9YF09ZnVuY3Rpb24obixpKXtyZXR1cm4gdGhpcy5jb25zdW1lSW50ZXJuYWxSZWNvcmQobixlLGkpfSx0aGlzW2BTVUJSVUxFJHtyfWBdPWZ1bmN0aW9uKG4saSl7cmV0dXJuIHRoaXMuc3VicnVsZUludGVybmFsUmVjb3JkKG4sZSxpKX0sdGhpc1tgT1BUSU9OJHtyfWBdPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLm9wdGlvbkludGVybmFsUmVjb3JkKG4sZSl9LHRoaXNbYE9SJHtyfWBdPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLm9ySW50ZXJuYWxSZWNvcmQobixlKX0sdGhpc1tgTUFOWSR7cn1gXT1mdW5jdGlvbihuKXt0aGlzLm1hbnlJbnRlcm5hbFJlY29yZChlLG4pfSx0aGlzW2BNQU5ZX1NFUCR7cn1gXT1mdW5jdGlvbihuKXt0aGlzLm1hbnlTZXBGaXJzdEludGVybmFsUmVjb3JkKGUsbil9LHRoaXNbYEFUX0xFQVNUX09ORSR7cn1gXT1mdW5jdGlvbihuKXt0aGlzLmF0TGVhc3RPbmVJbnRlcm5hbFJlY29yZChlLG4pfSx0aGlzW2BBVF9MRUFTVF9PTkVfU0VQJHtyfWBdPWZ1bmN0aW9uKG4pe3RoaXMuYXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWxSZWNvcmQoZSxuKX19dGhpcy5jb25zdW1lPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdGhpcy5jb25zdW1lSW50ZXJuYWxSZWNvcmQocixlLG4pfSx0aGlzLnN1YnJ1bGU9ZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0aGlzLnN1YnJ1bGVJbnRlcm5hbFJlY29yZChyLGUsbil9LHRoaXMub3B0aW9uPWZ1bmN0aW9uKGUscil7cmV0dXJuIHRoaXMub3B0aW9uSW50ZXJuYWxSZWNvcmQocixlKX0sdGhpcy5vcj1mdW5jdGlvbihlLHIpe3JldHVybiB0aGlzLm9ySW50ZXJuYWxSZWNvcmQocixlKX0sdGhpcy5tYW55PWZ1bmN0aW9uKGUscil7dGhpcy5tYW55SW50ZXJuYWxSZWNvcmQoZSxyKX0sdGhpcy5hdExlYXN0T25lPWZ1bmN0aW9uKGUscil7dGhpcy5hdExlYXN0T25lSW50ZXJuYWxSZWNvcmQoZSxyKX0sdGhpcy5BQ1RJT049dGhpcy5BQ1RJT05fUkVDT1JELHRoaXMuQkFDS1RSQUNLPXRoaXMuQkFDS1RSQUNLX1JFQ09SRCx0aGlzLkxBPXRoaXMuTEFfUkVDT1JEfSl9ZGlzYWJsZVJlY29yZGluZygpe3RoaXMuUkVDT1JESU5HX1BIQVNFPSExLHRoaXMuVFJBQ0VfSU5JVCgiRGVsZXRpbmcgUmVjb3JkaW5nIG1ldGhvZHMiLCgpPT57bGV0IGU9dGhpcztmb3IobGV0IHI9MDtyPDEwO3IrKyl7bGV0IG49cj4wP3I6IiI7ZGVsZXRlIGVbYENPTlNVTUUke259YF0sZGVsZXRlIGVbYFNVQlJVTEUke259YF0sZGVsZXRlIGVbYE9QVElPTiR7bn1gXSxkZWxldGUgZVtgT1Ike259YF0sZGVsZXRlIGVbYE1BTlkke259YF0sZGVsZXRlIGVbYE1BTllfU0VQJHtufWBdLGRlbGV0ZSBlW2BBVF9MRUFTVF9PTkUke259YF0sZGVsZXRlIGVbYEFUX0xFQVNUX09ORV9TRVAke259YF19ZGVsZXRlIGUuY29uc3VtZSxkZWxldGUgZS5zdWJydWxlLGRlbGV0ZSBlLm9wdGlvbixkZWxldGUgZS5vcixkZWxldGUgZS5tYW55LGRlbGV0ZSBlLmF0TGVhc3RPbmUsZGVsZXRlIGUuQUNUSU9OLGRlbGV0ZSBlLkJBQ0tUUkFDSyxkZWxldGUgZS5MQX0pfUFDVElPTl9SRUNPUkQoZSl7fUJBQ0tUUkFDS19SRUNPUkQoZSxyKXtyZXR1cm4oKT0+ITB9TEFfUkVDT1JEKGUpe3JldHVybiBqZ310b3BMZXZlbFJ1bGVSZWNvcmQoZSxyKXt0cnl7bGV0IG49bmV3IGFzKHtkZWZpbml0aW9uOltdLG5hbWU6ZX0pO3JldHVybiBuLm5hbWU9ZSx0aGlzLnJlY29yZGluZ1Byb2RTdGFjay5wdXNoKG4pLHIuY2FsbCh0aGlzKSx0aGlzLnJlY29yZGluZ1Byb2RTdGFjay5wb3AoKSxufWNhdGNoKG4pe2lmKG4uS05PV05fUkVDT1JERVJfRVJST1IhPT0hMCl0cnl7bi5tZXNzYWdlPW4ubWVzc2FnZStgCgkgVGhpcyBlcnJvciB3YXMgdGhyb3duIGR1cmluZyB0aGUgImdyYW1tYXIgcmVjb3JkaW5nIHBoYXNlIiBGb3IgbW9yZSBpbmZvIHNlZToKCWh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL2ludGVybmFscy5odG1sI2dyYW1tYXItcmVjb3JkaW5nYH1jYXRjaHt0aHJvdyBufXRocm93IG59fW9wdGlvbkludGVybmFsUmVjb3JkKGUscil7cmV0dXJuIHl4LmNhbGwodGhpcyxsbixlLHIpfWF0TGVhc3RPbmVJbnRlcm5hbFJlY29yZChlLHIpe3l4LmNhbGwodGhpcyxMbixyLGUpfWF0TGVhc3RPbmVTZXBGaXJzdEludGVybmFsUmVjb3JkKGUscil7eXguY2FsbCh0aGlzLFJuLHIsZSxRc2UpfW1hbnlJbnRlcm5hbFJlY29yZChlLHIpe3l4LmNhbGwodGhpcyxPcixyLGUpfW1hbnlTZXBGaXJzdEludGVybmFsUmVjb3JkKGUscil7eXguY2FsbCh0aGlzLHduLHIsZSxRc2UpfW9ySW50ZXJuYWxSZWNvcmQoZSxyKXtyZXR1cm4gZEJlLmNhbGwodGhpcyxlLHIpfXN1YnJ1bGVJbnRlcm5hbFJlY29yZChlLHIsbil7aWYoYUUociksIWV8fEJ0KGUsInJ1bGVOYW1lIik9PT0hMSl7bGV0IGw9bmV3IEVycm9yKGA8U1VCUlVMRSR7SnNlKHIpfT4gYXJndW1lbnQgaXMgaW52YWxpZCBleHBlY3RpbmcgYSBQYXJzZXIgbWV0aG9kIHJlZmVyZW5jZSBidXQgZ290OiA8JHtKU09OLnN0cmluZ2lmeShlKX0+CiBpbnNpZGUgdG9wIGxldmVsIHJ1bGU6IDwke3RoaXMucmVjb3JkaW5nUHJvZFN0YWNrWzBdLm5hbWV9PmApO3Rocm93IGwuS05PV05fUkVDT1JERVJfRVJST1I9ITAsbH1sZXQgaT1nYSh0aGlzLnJlY29yZGluZ1Byb2RTdGFjayksYT1lLnJ1bGVOYW1lLHM9bmV3IG9uKHtpZHg6cixub25UZXJtaW5hbE5hbWU6YSxsYWJlbDpuPy5MQUJFTCxyZWZlcmVuY2VkUnVsZTp2b2lkIDB9KTtyZXR1cm4gaS5kZWZpbml0aW9uLnB1c2gocyksdGhpcy5vdXRwdXRDc3Q/ZkJlOnNFfWNvbnN1bWVJbnRlcm5hbFJlY29yZChlLHIsbil7aWYoYUUociksIV9OKGUpKXtsZXQgcz1uZXcgRXJyb3IoYDxDT05TVU1FJHtKc2Uocil9PiBhcmd1bWVudCBpcyBpbnZhbGlkIGV4cGVjdGluZyBhIFRva2VuVHlwZSByZWZlcmVuY2UgYnV0IGdvdDogPCR7SlNPTi5zdHJpbmdpZnkoZSl9PgogaW5zaWRlIHRvcCBsZXZlbCBydWxlOiA8JHt0aGlzLnJlY29yZGluZ1Byb2RTdGFja1swXS5uYW1lfT5gKTt0aHJvdyBzLktOT1dOX1JFQ09SREVSX0VSUk9SPSEwLHN9bGV0IGk9Z2EodGhpcy5yZWNvcmRpbmdQcm9kU3RhY2spLGE9bmV3IGtyKHtpZHg6cix0ZXJtaW5hbFR5cGU6ZSxsYWJlbDpuPy5MQUJFTH0pO3JldHVybiBpLmRlZmluaXRpb24ucHVzaChhKSx0b2V9fTtvKHl4LCJyZWNvcmRQcm9kIik7byhkQmUsInJlY29yZE9yUHJvZCIpO28oSnNlLCJnZXRJZHhTdWZmaXgiKTtvKGFFLCJhc3NlcnRNZXRob2RJZHhJc1ZhbGlkIil9KTt2YXIgb0Usbm9lPU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTtPZygpO0ZzKCk7b0U9Y2xhc3N7c3RhdGlje28odGhpcywiUGVyZm9ybWFuY2VUcmFjZXIiKX1pbml0UGVyZm9ybWFuY2VUcmFjZXIoZSl7aWYoQnQoZSwidHJhY2VJbml0UGVyZiIpKXtsZXQgcj1lLnRyYWNlSW5pdFBlcmYsbj10eXBlb2Ygcj09Im51bWJlciI7dGhpcy50cmFjZUluaXRNYXhJZGVudD1uP3I6MS8wLHRoaXMudHJhY2VJbml0UGVyZj1uP3I+MDpyfWVsc2UgdGhpcy50cmFjZUluaXRNYXhJZGVudD0wLHRoaXMudHJhY2VJbml0UGVyZj1scy50cmFjZUluaXRQZXJmO3RoaXMudHJhY2VJbml0SW5kZW50PS0xfVRSQUNFX0lOSVQoZSxyKXtpZih0aGlzLnRyYWNlSW5pdFBlcmY9PT0hMCl7dGhpcy50cmFjZUluaXRJbmRlbnQrKztsZXQgbj1uZXcgQXJyYXkodGhpcy50cmFjZUluaXRJbmRlbnQrMSkuam9pbigiCSIpO3RoaXMudHJhY2VJbml0SW5kZW50PHRoaXMudHJhY2VJbml0TWF4SWRlbnQmJmNvbnNvbGUubG9nKGAke259LS0+IDwke2V9PmApO2xldHt0aW1lOmksdmFsdWU6YX09dHgocikscz1pPjEwP2NvbnNvbGUud2Fybjpjb25zb2xlLmxvZztyZXR1cm4gdGhpcy50cmFjZUluaXRJbmRlbnQ8dGhpcy50cmFjZUluaXRNYXhJZGVudCYmcyhgJHtufTwtLSA8JHtlfT4gdGltZTogJHtpfW1zYCksdGhpcy50cmFjZUluaXRJbmRlbnQtLSxhfWVsc2UgcmV0dXJuIHIoKX19fSk7ZnVuY3Rpb24gaW9lKHQsZSl7ZS5mb3JFYWNoKHI9PntsZXQgbj1yLnByb3RvdHlwZTtPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhuKS5mb3JFYWNoKGk9PntpZihpPT09ImNvbnN0cnVjdG9yIilyZXR1cm47bGV0IGE9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGkpO2EmJihhLmdldHx8YS5zZXQpP09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSxpLGEpOnQucHJvdG90eXBlW2ldPXIucHJvdG90eXBlW2ldfSl9KX12YXIgYW9lPU4oKCk9PnsidXNlIHN0cmljdCI7byhpb2UsImFwcGx5TWl4aW5zIil9KTtmdW5jdGlvbiBsRSh0PXZvaWQgMCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fXZhciBqZyxscyxLZyx6aSx2eCx4eCxGcz1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7T2coKTtPYWUoKTt1cCgpO1ZnKCk7UnNlKCk7R04oKTtCc2UoKTtXc2UoKTtxc2UoKTtZc2UoKTtYc2UoKTtqc2UoKTtLc2UoKTtyb2UoKTtub2UoKTthb2UoKTtmeCgpO2pnPSR1KGxvLCIiLE5hTixOYU4sTmFOLE5hTixOYU4sTmFOKTtPYmplY3QuZnJlZXplKGpnKTtscz1PYmplY3QuZnJlZXplKHtyZWNvdmVyeUVuYWJsZWQ6ITEsbWF4TG9va2FoZWFkOjMsZHluYW1pY1Rva2Vuc0VuYWJsZWQ6ITEsb3V0cHV0Q3N0OiEwLGVycm9yTWVzc2FnZVByb3ZpZGVyOnp1LG5vZGVMb2NhdGlvblRyYWNraW5nOiJub25lIix0cmFjZUluaXRQZXJmOiExLHNraXBWYWxpZGF0aW9uczohMX0pLEtnPU9iamVjdC5mcmVlemUoe3JlY292ZXJ5VmFsdWVGdW5jOm8oKCk9Pnt9LCJyZWNvdmVyeVZhbHVlRnVuYyIpLHJlc3luY0VuYWJsZWQ6ITB9KTsoZnVuY3Rpb24odCl7dFt0LklOVkFMSURfUlVMRV9OQU1FPTBdPSJJTlZBTElEX1JVTEVfTkFNRSIsdFt0LkRVUExJQ0FURV9SVUxFX05BTUU9MV09IkRVUExJQ0FURV9SVUxFX05BTUUiLHRbdC5JTlZBTElEX1JVTEVfT1ZFUlJJREU9Ml09IklOVkFMSURfUlVMRV9PVkVSUklERSIsdFt0LkRVUExJQ0FURV9QUk9EVUNUSU9OUz0zXT0iRFVQTElDQVRFX1BST0RVQ1RJT05TIix0W3QuVU5SRVNPTFZFRF9TVUJSVUxFX1JFRj00XT0iVU5SRVNPTFZFRF9TVUJSVUxFX1JFRiIsdFt0LkxFRlRfUkVDVVJTSU9OPTVdPSJMRUZUX1JFQ1VSU0lPTiIsdFt0Lk5PTkVfTEFTVF9FTVBUWV9BTFQ9Nl09Ik5PTkVfTEFTVF9FTVBUWV9BTFQiLHRbdC5BTUJJR1VPVVNfQUxUUz03XT0iQU1CSUdVT1VTX0FMVFMiLHRbdC5DT05GTElDVF9UT0tFTlNfUlVMRVNfTkFNRVNQQUNFPThdPSJDT05GTElDVF9UT0tFTlNfUlVMRVNfTkFNRVNQQUNFIix0W3QuSU5WQUxJRF9UT0tFTl9OQU1FPTldPSJJTlZBTElEX1RPS0VOX05BTUUiLHRbdC5OT19OT05fRU1QVFlfTE9PS0FIRUFEPTEwXT0iTk9fTk9OX0VNUFRZX0xPT0tBSEVBRCIsdFt0LkFNQklHVU9VU19QUkVGSVhfQUxUUz0xMV09IkFNQklHVU9VU19QUkVGSVhfQUxUUyIsdFt0LlRPT19NQU5ZX0FMVFM9MTJdPSJUT09fTUFOWV9BTFRTIix0W3QuQ1VTVE9NX0xPT0tBSEVBRF9WQUxJREFUSU9OPTEzXT0iQ1VTVE9NX0xPT0tBSEVBRF9WQUxJREFUSU9OIn0pKHppfHwoemk9e30pKTtvKGxFLCJFTVBUWV9BTFQiKTt2eD1jbGFzcyB0e3N0YXRpY3tvKHRoaXMsIlBhcnNlciIpfXN0YXRpYyBwZXJmb3JtU2VsZkFuYWx5c2lzKGUpe3Rocm93IEVycm9yKCJUaGUgKipzdGF0aWMqKiBgcGVyZm9ybVNlbGZBbmFseXNpc2AgbWV0aG9kIGhhcyBiZWVuIGRlcHJlY2F0ZWQuCVxuVXNlIHRoZSAqKmluc3RhbmNlKiogbWV0aG9kIHdpdGggdGhlIHNhbWUgbmFtZSBpbnN0ZWFkLiIpfXBlcmZvcm1TZWxmQW5hbHlzaXMoKXt0aGlzLlRSQUNFX0lOSVQoInBlcmZvcm1TZWxmQW5hbHlzaXMiLCgpPT57bGV0IGU7dGhpcy5zZWxmQW5hbHlzaXNEb25lPSEwO2xldCByPXRoaXMuY2xhc3NOYW1lO3RoaXMuVFJBQ0VfSU5JVCgidG9GYXN0UHJvcHMiLCgpPT57cngodGhpcyl9KSx0aGlzLlRSQUNFX0lOSVQoIkdyYW1tYXIgUmVjb3JkaW5nIiwoKT0+e3RyeXt0aGlzLmVuYWJsZVJlY29yZGluZygpLEFlKHRoaXMuZGVmaW5lZFJ1bGVzTmFtZXMsaT0+e2xldCBzPXRoaXNbaV0ub3JpZ2luYWxHcmFtbWFyQWN0aW9uLGw7dGhpcy5UUkFDRV9JTklUKGAke2l9IFJ1bGVgLCgpPT57bD10aGlzLnRvcExldmVsUnVsZVJlY29yZChpLHMpfSksdGhpcy5nYXN0UHJvZHVjdGlvbnNDYWNoZVtpXT1sfSl9ZmluYWxseXt0aGlzLmRpc2FibGVSZWNvcmRpbmcoKX19KTtsZXQgbj1bXTtpZih0aGlzLlRSQUNFX0lOSVQoIkdyYW1tYXIgUmVzb2x2aW5nIiwoKT0+e249RHNlKHtydWxlczpicih0aGlzLmdhc3RQcm9kdWN0aW9uc0NhY2hlKX0pLHRoaXMuZGVmaW5pdGlvbkVycm9ycz10aGlzLmRlZmluaXRpb25FcnJvcnMuY29uY2F0KG4pfSksdGhpcy5UUkFDRV9JTklUKCJHcmFtbWFyIFZhbGlkYXRpb25zIiwoKT0+e2lmKHVyKG4pJiZ0aGlzLnNraXBWYWxpZGF0aW9ucz09PSExKXtsZXQgaT1Mc2Uoe3J1bGVzOmJyKHRoaXMuZ2FzdFByb2R1Y3Rpb25zQ2FjaGUpLHRva2VuVHlwZXM6YnIodGhpcy50b2tlbnNNYXApLGVyck1zZ1Byb3ZpZGVyOlBsLGdyYW1tYXJOYW1lOnJ9KSxhPVRzZSh7bG9va2FoZWFkU3RyYXRlZ3k6dGhpcy5sb29rYWhlYWRTdHJhdGVneSxydWxlczpicih0aGlzLmdhc3RQcm9kdWN0aW9uc0NhY2hlKSx0b2tlblR5cGVzOmJyKHRoaXMudG9rZW5zTWFwKSxncmFtbWFyTmFtZTpyfSk7dGhpcy5kZWZpbml0aW9uRXJyb3JzPXRoaXMuZGVmaW5pdGlvbkVycm9ycy5jb25jYXQoaSxhKX19KSx1cih0aGlzLmRlZmluaXRpb25FcnJvcnMpJiYodGhpcy5yZWNvdmVyeUVuYWJsZWQmJnRoaXMuVFJBQ0VfSU5JVCgiY29tcHV0ZUFsbFByb2RzRm9sbG93cyIsKCk9PntsZXQgaT1JYWUoYnIodGhpcy5nYXN0UHJvZHVjdGlvbnNDYWNoZSkpO3RoaXMucmVzeW5jRm9sbG93cz1pfSksdGhpcy5UUkFDRV9JTklUKCJDb21wdXRlTG9va2FoZWFkRnVuY3Rpb25zIiwoKT0+e3ZhciBpLGE7KGE9KGk9dGhpcy5sb29rYWhlYWRTdHJhdGVneSkuaW5pdGlhbGl6ZSk9PT1udWxsfHxhPT09dm9pZCAwfHxhLmNhbGwoaSx7cnVsZXM6YnIodGhpcy5nYXN0UHJvZHVjdGlvbnNDYWNoZSl9KSx0aGlzLnByZUNvbXB1dGVMb29rYWhlYWRGdW5jdGlvbnMoYnIodGhpcy5nYXN0UHJvZHVjdGlvbnNDYWNoZSkpfSkpLCF0LkRFRkVSX0RFRklOSVRJT05fRVJST1JTX0hBTkRMSU5HJiYhdXIodGhpcy5kZWZpbml0aW9uRXJyb3JzKSl0aHJvdyBlPUplKHRoaXMuZGVmaW5pdGlvbkVycm9ycyxpPT5pLm1lc3NhZ2UpLG5ldyBFcnJvcihgUGFyc2VyIERlZmluaXRpb24gRXJyb3JzIGRldGVjdGVkOgogJHtlLmpvaW4oYAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmApfWApfSl9Y29uc3RydWN0b3IoZSxyKXt0aGlzLmRlZmluaXRpb25FcnJvcnM9W10sdGhpcy5zZWxmQW5hbHlzaXNEb25lPSExO2xldCBuPXRoaXM7aWYobi5pbml0RXJyb3JIYW5kbGVyKHIpLG4uaW5pdExleGVyQWRhcHRlcigpLG4uaW5pdExvb2tzQWhlYWQociksbi5pbml0UmVjb2duaXplckVuZ2luZShlLHIpLG4uaW5pdFJlY292ZXJhYmxlKHIpLG4uaW5pdFRyZWVCdWlsZGVyKHIpLG4uaW5pdENvbnRlbnRBc3Npc3QoKSxuLmluaXRHYXN0UmVjb3JkZXIociksbi5pbml0UGVyZm9ybWFuY2VUcmFjZXIociksQnQociwiaWdub3JlZElzc3VlcyIpKXRocm93IG5ldyBFcnJvcihgVGhlIDxpZ25vcmVkSXNzdWVzPiBJUGFyc2VyQ29uZmlnIHByb3BlcnR5IGhhcyBiZWVuIGRlcHJlY2F0ZWQuCglQbGVhc2UgdXNlIHRoZSA8SUdOT1JFX0FNQklHVUlUSUVTPiBmbGFnIG9uIHRoZSByZWxldmFudCBEU0wgbWV0aG9kIGluc3RlYWQuCglTZWU6IGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL3Jlc29sdmluZ19ncmFtbWFyX2Vycm9ycy5odG1sI0lHTk9SSU5HX0FNQklHVUlUSUVTCglGb3IgZnVydGhlciBkZXRhaWxzLmApO3RoaXMuc2tpcFZhbGlkYXRpb25zPUJ0KHIsInNraXBWYWxpZGF0aW9ucyIpP3Iuc2tpcFZhbGlkYXRpb25zOmxzLnNraXBWYWxpZGF0aW9uc319O3Z4LkRFRkVSX0RFRklOSVRJT05fRVJST1JTX0hBTkRMSU5HPSExO2lvZSh2eCxbSGssWGssWmssSmssdEUsZUUsckUsbkUsaUUsb0VdKTt4eD1jbGFzcyBleHRlbmRzIHZ4e3N0YXRpY3tvKHRoaXMsIkVtYmVkZGVkQWN0aW9uc1BhcnNlciIpfWNvbnN0cnVjdG9yKGUscj1scyl7bGV0IG49YW4ocik7bi5vdXRwdXRDc3Q9ITEsc3VwZXIoZSxuKX19fSk7dmFyIHNvZT1OKCgpPT57InVzZSBzdHJpY3QiO29zKCl9KTt2YXIgb29lPU4oKCk9PnsidXNlIHN0cmljdCJ9KTt2YXIgbG9lPU4oKCk9PnsidXNlIHN0cmljdCI7c29lKCk7b29lKCl9KTt2YXIgY29lPU4oKCk9PnsidXNlIHN0cmljdCI7Z04oKX0pO3ZhciBjZj1OKCgpPT57InVzZSBzdHJpY3QiO2dOKCk7RnMoKTtpeCgpO3VwKCk7cWcoKTtWTigpO1ZnKCk7WGcoKTtETigpO29zKCk7b3MoKTtsb2UoKTtjb2UoKX0pO2Z1bmN0aW9uIGZwKHQsZSxyKXtyZXR1cm5gJHt0Lm5hbWV9XyR7ZX1fJHtyfWB9ZnVuY3Rpb24gZG9lKHQpe2xldCBlPXtkZWNpc2lvbk1hcDp7fSxkZWNpc2lvblN0YXRlczpbXSxydWxlVG9TdGFydFN0YXRlOm5ldyBNYXAscnVsZVRvU3RvcFN0YXRlOm5ldyBNYXAsc3RhdGVzOltdfTtiQmUoZSx0KTtsZXQgcj10Lmxlbmd0aDtmb3IobGV0IG49MDtuPHI7bisrKXtsZXQgaT10W25dLGE9ZHAoZSxpLGkpO2EhPT12b2lkIDAmJlJCZShlLGksYSl9cmV0dXJuIGV9ZnVuY3Rpb24gYkJlKHQsZSl7bGV0IHI9ZS5sZW5ndGg7Zm9yKGxldCBuPTA7bjxyO24rKyl7bGV0IGk9ZVtuXSxhPWFhKHQsaSx2b2lkIDAse3R5cGU6bUJlfSkscz1hYSh0LGksdm9pZCAwLHt0eXBlOkpnfSk7YS5zdG9wPXMsdC5ydWxlVG9TdGFydFN0YXRlLnNldChpLGEpLHQucnVsZVRvU3RvcFN0YXRlLnNldChpLHMpfX1mdW5jdGlvbiBwb2UodCxlLHIpe3JldHVybiByIGluc3RhbmNlb2Yga3I/UU4odCxlLHIudGVybWluYWxUeXBlLHIpOnIgaW5zdGFuY2VvZiBvbj9MQmUodCxlLHIpOnIgaW5zdGFuY2VvZiBUbj9TQmUodCxlLHIpOnIgaW5zdGFuY2VvZiBsbj9DQmUodCxlLHIpOnIgaW5zdGFuY2VvZiBPcj93QmUodCxlLHIpOnIgaW5zdGFuY2VvZiB3bj9UQmUodCxlLHIpOnIgaW5zdGFuY2VvZiBMbj9rQmUodCxlLHIpOnIgaW5zdGFuY2VvZiBSbj9FQmUodCxlLHIpOmRwKHQsZSxyKX1mdW5jdGlvbiB3QmUodCxlLHIpe2xldCBuPWFhKHQsZSxyLHt0eXBlOmhvZX0pO2hmKHQsbik7bGV0IGk9ZTEodCxlLG4scixkcCh0LGUscikpO3JldHVybiBnb2UodCxlLHIsaSl9ZnVuY3Rpb24gVEJlKHQsZSxyKXtsZXQgbj1hYSh0LGUscix7dHlwZTpob2V9KTtoZih0LG4pO2xldCBpPWUxKHQsZSxuLHIsZHAodCxlLHIpKSxhPVFOKHQsZSxyLnNlcGFyYXRvcixyKTtyZXR1cm4gZ29lKHQsZSxyLGksYSl9ZnVuY3Rpb24ga0JlKHQsZSxyKXtsZXQgbj1hYSh0LGUscix7dHlwZTp1b2V9KTtoZih0LG4pO2xldCBpPWUxKHQsZSxuLHIsZHAodCxlLHIpKTtyZXR1cm4gbW9lKHQsZSxyLGkpfWZ1bmN0aW9uIEVCZSh0LGUscil7bGV0IG49YWEodCxlLHIse3R5cGU6dW9lfSk7aGYodCxuKTtsZXQgaT1lMSh0LGUsbixyLGRwKHQsZSxyKSksYT1RTih0LGUsci5zZXBhcmF0b3Iscik7cmV0dXJuIG1vZSh0LGUscixpLGEpfWZ1bmN0aW9uIFNCZSh0LGUscil7bGV0IG49YWEodCxlLHIse3R5cGU6dWZ9KTtoZih0LG4pO2xldCBpPUplKHIuZGVmaW5pdGlvbixzPT5wb2UodCxlLHMpKTtyZXR1cm4gZTEodCxlLG4sciwuLi5pKX1mdW5jdGlvbiBDQmUodCxlLHIpe2xldCBuPWFhKHQsZSxyLHt0eXBlOnVmfSk7aGYodCxuKTtsZXQgaT1lMSh0LGUsbixyLGRwKHQsZSxyKSk7cmV0dXJuIEFCZSh0LGUscixpKX1mdW5jdGlvbiBkcCh0LGUscil7bGV0IG49WXIoSmUoci5kZWZpbml0aW9uLGk9PnBvZSh0LGUsaSkpLGk9PmkhPT12b2lkIDApO3JldHVybiBuLmxlbmd0aD09PTE/blswXTpuLmxlbmd0aD09PTA/dm9pZCAwOkRCZSh0LG4pfWZ1bmN0aW9uIG1vZSh0LGUscixuLGkpe2xldCBhPW4ubGVmdCxzPW4ucmlnaHQsbD1hYSh0LGUscix7dHlwZTp4QmV9KTtoZih0LGwpO2xldCB1PWFhKHQsZSxyLHt0eXBlOmZvZX0pO3JldHVybiBhLmxvb3BiYWNrPWwsdS5sb29wYmFjaz1sLHQuZGVjaXNpb25NYXBbZnAoZSxpPyJSZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvciI6IlJlcGV0aXRpb25NYW5kYXRvcnkiLHIuaWR4KV09bCxBaShzLGwpLGk9PT12b2lkIDA/KEFpKGwsYSksQWkobCx1KSk6KEFpKGwsdSksQWkobCxpLmxlZnQpLEFpKGkucmlnaHQsYSkpLHtsZWZ0OmEscmlnaHQ6dX19ZnVuY3Rpb24gZ29lKHQsZSxyLG4saSl7bGV0IGE9bi5sZWZ0LHM9bi5yaWdodCxsPWFhKHQsZSxyLHt0eXBlOnZCZX0pO2hmKHQsbCk7bGV0IHU9YWEodCxlLHIse3R5cGU6Zm9lfSksaD1hYSh0LGUscix7dHlwZTp5QmV9KTtyZXR1cm4gbC5sb29wYmFjaz1oLHUubG9vcGJhY2s9aCxBaShsLGEpLEFpKGwsdSksQWkocyxoKSxpIT09dm9pZCAwPyhBaShoLHUpLEFpKGgsaS5sZWZ0KSxBaShpLnJpZ2h0LGEpKTpBaShoLGwpLHQuZGVjaXNpb25NYXBbZnAoZSxpPyJSZXBldGl0aW9uV2l0aFNlcGFyYXRvciI6IlJlcGV0aXRpb24iLHIuaWR4KV09bCx7bGVmdDpsLHJpZ2h0OnV9fWZ1bmN0aW9uIEFCZSh0LGUscixuKXtsZXQgaT1uLmxlZnQsYT1uLnJpZ2h0O3JldHVybiBBaShpLGEpLHQuZGVjaXNpb25NYXBbZnAoZSwiT3B0aW9uIixyLmlkeCldPWksbn1mdW5jdGlvbiBoZih0LGUpe3JldHVybiB0LmRlY2lzaW9uU3RhdGVzLnB1c2goZSksZS5kZWNpc2lvbj10LmRlY2lzaW9uU3RhdGVzLmxlbmd0aC0xLGUuZGVjaXNpb259ZnVuY3Rpb24gZTEodCxlLHIsbiwuLi5pKXtsZXQgYT1hYSh0LGUsbix7dHlwZTpnQmUsc3RhcnQ6cn0pO3IuZW5kPWE7Zm9yKGxldCBsIG9mIGkpbCE9PXZvaWQgMD8oQWkocixsLmxlZnQpLEFpKGwucmlnaHQsYSkpOkFpKHIsYSk7bGV0IHM9e2xlZnQ6cixyaWdodDphfTtyZXR1cm4gdC5kZWNpc2lvbk1hcFtmcChlLF9CZShuKSxuLmlkeCldPXIsc31mdW5jdGlvbiBfQmUodCl7aWYodCBpbnN0YW5jZW9mIFRuKXJldHVybiJBbHRlcm5hdGlvbiI7aWYodCBpbnN0YW5jZW9mIGxuKXJldHVybiJPcHRpb24iO2lmKHQgaW5zdGFuY2VvZiBPcilyZXR1cm4iUmVwZXRpdGlvbiI7aWYodCBpbnN0YW5jZW9mIHduKXJldHVybiJSZXBldGl0aW9uV2l0aFNlcGFyYXRvciI7aWYodCBpbnN0YW5jZW9mIExuKXJldHVybiJSZXBldGl0aW9uTWFuZGF0b3J5IjtpZih0IGluc3RhbmNlb2YgUm4pcmV0dXJuIlJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yIjt0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgcHJvZHVjdGlvbiB0eXBlIGVuY291bnRlcmVkIil9ZnVuY3Rpb24gREJlKHQsZSl7bGV0IHI9ZS5sZW5ndGg7Zm9yKGxldCBhPTA7YTxyLTE7YSsrKXtsZXQgcz1lW2FdLGw7cy5sZWZ0LnRyYW5zaXRpb25zLmxlbmd0aD09PTEmJihsPXMubGVmdC50cmFuc2l0aW9uc1swXSk7bGV0IHU9bCBpbnN0YW5jZW9mIFpnLGg9bCxmPWVbYSsxXS5sZWZ0O3MubGVmdC50eXBlPT09dWYmJnMucmlnaHQudHlwZT09PXVmJiZsIT09dm9pZCAwJiYodSYmaC5mb2xsb3dTdGF0ZT09PXMucmlnaHR8fGwudGFyZ2V0PT09cy5yaWdodCk/KHU/aC5mb2xsb3dTdGF0ZT1mOmwudGFyZ2V0PWYsTkJlKHQscy5yaWdodCkpOkFpKHMucmlnaHQsZil9bGV0IG49ZVswXSxpPWVbci0xXTtyZXR1cm57bGVmdDpuLmxlZnQscmlnaHQ6aS5yaWdodH19ZnVuY3Rpb24gUU4odCxlLHIsbil7bGV0IGk9YWEodCxlLG4se3R5cGU6dWZ9KSxhPWFhKHQsZSxuLHt0eXBlOnVmfSk7cmV0dXJuIFpOKGksbmV3IFFnKGEscikpLHtsZWZ0OmkscmlnaHQ6YX19ZnVuY3Rpb24gTEJlKHQsZSxyKXtsZXQgbj1yLnJlZmVyZW5jZWRSdWxlLGk9dC5ydWxlVG9TdGFydFN0YXRlLmdldChuKSxhPWFhKHQsZSxyLHt0eXBlOnVmfSkscz1hYSh0LGUscix7dHlwZTp1Zn0pLGw9bmV3IFpnKGksbixzKTtyZXR1cm4gWk4oYSxsKSx7bGVmdDphLHJpZ2h0OnN9fWZ1bmN0aW9uIFJCZSh0LGUscil7bGV0IG49dC5ydWxlVG9TdGFydFN0YXRlLmdldChlKTtBaShuLHIubGVmdCk7bGV0IGk9dC5ydWxlVG9TdG9wU3RhdGUuZ2V0KGUpO3JldHVybiBBaShyLnJpZ2h0LGkpLHtsZWZ0Om4scmlnaHQ6aX19ZnVuY3Rpb24gQWkodCxlKXtsZXQgcj1uZXcgd3goZSk7Wk4odCxyKX1mdW5jdGlvbiBhYSh0LGUscixuKXtsZXQgaT1PYmplY3QuYXNzaWduKHthdG46dCxwcm9kdWN0aW9uOnIsZXBzaWxvbk9ubHlUcmFuc2l0aW9uczohMSxydWxlOmUsdHJhbnNpdGlvbnM6W10sbmV4dFRva2VuV2l0aGluUnVsZTpbXSxzdGF0ZU51bWJlcjp0LnN0YXRlcy5sZW5ndGh9LG4pO3JldHVybiB0LnN0YXRlcy5wdXNoKGkpLGl9ZnVuY3Rpb24gWk4odCxlKXt0LnRyYW5zaXRpb25zLmxlbmd0aD09PTAmJih0LmVwc2lsb25Pbmx5VHJhbnNpdGlvbnM9ZS5pc0Vwc2lsb24oKSksdC50cmFuc2l0aW9ucy5wdXNoKGUpfWZ1bmN0aW9uIE5CZSh0LGUpe3Quc3RhdGVzLnNwbGljZSh0LnN0YXRlcy5pbmRleE9mKGUpLDEpfXZhciB1ZixtQmUsdW9lLGhvZSxKZyxnQmUseUJlLHZCZSx4QmUsZm9lLGJ4LFFnLHd4LFpnLHlvZT1OKCgpPT57InVzZSBzdHJpY3QiO0ltKCk7REwoKTtjZigpO28oZnAsImJ1aWxkQVROS2V5Iik7dWY9MSxtQmU9Mix1b2U9NCxob2U9NSxKZz03LGdCZT04LHlCZT05LHZCZT0xMCx4QmU9MTEsZm9lPTEyLGJ4PWNsYXNze3N0YXRpY3tvKHRoaXMsIkFic3RyYWN0VHJhbnNpdGlvbiIpfWNvbnN0cnVjdG9yKGUpe3RoaXMudGFyZ2V0PWV9aXNFcHNpbG9uKCl7cmV0dXJuITF9fSxRZz1jbGFzcyBleHRlbmRzIGJ4e3N0YXRpY3tvKHRoaXMsIkF0b21UcmFuc2l0aW9uIil9Y29uc3RydWN0b3IoZSxyKXtzdXBlcihlKSx0aGlzLnRva2VuVHlwZT1yfX0sd3g9Y2xhc3MgZXh0ZW5kcyBieHtzdGF0aWN7byh0aGlzLCJFcHNpbG9uVHJhbnNpdGlvbiIpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKGUpfWlzRXBzaWxvbigpe3JldHVybiEwfX0sWmc9Y2xhc3MgZXh0ZW5kcyBieHtzdGF0aWN7byh0aGlzLCJSdWxlVHJhbnNpdGlvbiIpfWNvbnN0cnVjdG9yKGUscixuKXtzdXBlcihlKSx0aGlzLnJ1bGU9cix0aGlzLmZvbGxvd1N0YXRlPW59aXNFcHNpbG9uKCl7cmV0dXJuITB9fTtvKGRvZSwiY3JlYXRlQVROIik7byhiQmUsImNyZWF0ZVJ1bGVTdGFydEFuZFN0b3BBVE5TdGF0ZXMiKTtvKHBvZSwiYXRvbSIpO28od0JlLCJyZXBldGl0aW9uIik7byhUQmUsInJlcGV0aXRpb25TZXAiKTtvKGtCZSwicmVwZXRpdGlvbk1hbmRhdG9yeSIpO28oRUJlLCJyZXBldGl0aW9uTWFuZGF0b3J5U2VwIik7byhTQmUsImFsdGVybmF0aW9uIik7byhDQmUsIm9wdGlvbiIpO28oZHAsImJsb2NrIik7byhtb2UsInBsdXMiKTtvKGdvZSwic3RhciIpO28oQUJlLCJvcHRpb25hbCIpO28oaGYsImRlZmluZURlY2lzaW9uU3RhdGUiKTtvKGUxLCJtYWtlQWx0cyIpO28oX0JlLCJnZXRQcm9kVHlwZSIpO28oREJlLCJtYWtlQmxvY2siKTtvKFFOLCJ0b2tlblJlZiIpO28oTEJlLCJydWxlUmVmIik7byhSQmUsImJ1aWxkUnVsZUhhbmRsZSIpO28oQWksImVwc2lsb24iKTtvKGFhLCJuZXdTdGF0ZSIpO28oWk4sImFkZFRyYW5zaXRpb24iKTtvKE5CZSwicmVtb3ZlU3RhdGUiKX0pO2Z1bmN0aW9uIEpOKHQsZT0hMCl7cmV0dXJuYCR7ZT9gYSR7dC5hbHR9YDoiIn1zJHt0LnN0YXRlLnN0YXRlTnVtYmVyfToke3Quc3RhY2subWFwKHI9PnIuc3RhdGVOdW1iZXIudG9TdHJpbmcoKSkuam9pbigiXyIpfWB9dmFyIFR4LHQxLHZvZT1OKCgpPT57InVzZSBzdHJpY3QiO0ltKCk7VHg9e30sdDE9Y2xhc3N7c3RhdGlje28odGhpcywiQVROQ29uZmlnU2V0Iil9Y29uc3RydWN0b3IoKXt0aGlzLm1hcD17fSx0aGlzLmNvbmZpZ3M9W119Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5jb25maWdzLmxlbmd0aH1maW5hbGl6ZSgpe3RoaXMubWFwPXt9fWFkZChlKXtsZXQgcj1KTihlKTtyIGluIHRoaXMubWFwfHwodGhpcy5tYXBbcl09dGhpcy5jb25maWdzLmxlbmd0aCx0aGlzLmNvbmZpZ3MucHVzaChlKSl9Z2V0IGVsZW1lbnRzKCl7cmV0dXJuIHRoaXMuY29uZmlnc31nZXQgYWx0cygpe3JldHVybiBKZSh0aGlzLmNvbmZpZ3MsZT0+ZS5hbHQpfWdldCBrZXkoKXtsZXQgZT0iIjtmb3IobGV0IHIgaW4gdGhpcy5tYXApZSs9cisiOiI7cmV0dXJuIGV9fTtvKEpOLCJnZXRBVE5Db25maWdLZXkiKX0pO2Z1bmN0aW9uIE1CZSh0LGUpe2xldCByPXt9O3JldHVybiBuPT57bGV0IGk9bi50b1N0cmluZygpLGE9cltpXTtyZXR1cm4gYSE9PXZvaWQgMHx8KGE9e2F0blN0YXJ0U3RhdGU6dCxkZWNpc2lvbjplLHN0YXRlczp7fX0scltpXT1hKSxhfX1mdW5jdGlvbiBib2UodCxlPSEwKXtsZXQgcj1uZXcgU2V0O2ZvcihsZXQgbiBvZiB0KXtsZXQgaT1uZXcgU2V0O2ZvcihsZXQgYSBvZiBuKXtpZihhPT09dm9pZCAwKXtpZihlKWJyZWFrO3JldHVybiExfWxldCBzPVthLnRva2VuVHlwZUlkeF0uY29uY2F0KGEuY2F0ZWdvcnlNYXRjaGVzKTtmb3IobGV0IGwgb2YgcylpZihyLmhhcyhsKSl7aWYoIWkuaGFzKGwpKXJldHVybiExfWVsc2Ugci5hZGQobCksaS5hZGQobCl9fXJldHVybiEwfWZ1bmN0aW9uIElCZSh0KXtsZXQgZT10LmRlY2lzaW9uU3RhdGVzLmxlbmd0aCxyPUFycmF5KGUpO2ZvcihsZXQgbj0wO248ZTtuKyspcltuXT1NQmUodC5kZWNpc2lvblN0YXRlc1tuXSxuKTtyZXR1cm4gcn1mdW5jdGlvbiBlTSh0LGUscixuKXtsZXQgaT10W2VdKHIpLGE9aS5zdGFydDtpZihhPT09dm9pZCAwKXtsZXQgbD1XQmUoaS5hdG5TdGFydFN0YXRlKTthPWtvZShpLFRvZShsKSksaS5zdGFydD1hfXJldHVybiBPQmUuYXBwbHkodGhpcyxbaSxhLHIsbl0pfWZ1bmN0aW9uIE9CZSh0LGUscixuKXtsZXQgaT1lLGE9MSxzPVtdLGw9dGhpcy5MQShhKyspO2Zvcig7Oyl7bGV0IHU9R0JlKGksbCk7aWYodT09PXZvaWQgMCYmKHU9UEJlLmFwcGx5KHRoaXMsW3QsaSxsLGEscixuXSkpLHU9PT1UeClyZXR1cm4gekJlKHMsaSxsKTtpZih1LmlzQWNjZXB0U3RhdGU9PT0hMClyZXR1cm4gdS5wcmVkaWN0aW9uO2k9dSxzLnB1c2gobCksbD10aGlzLkxBKGErKyl9fWZ1bmN0aW9uIFBCZSh0LGUscixuLGksYSl7bGV0IHM9VkJlKGUuY29uZmlncyxyLGkpO2lmKHMuc2l6ZT09PTApcmV0dXJuIHdvZSh0LGUscixUeCksVHg7bGV0IGw9VG9lKHMpLHU9SEJlKHMsaSk7aWYodSE9PXZvaWQgMClsLmlzQWNjZXB0U3RhdGU9ITAsbC5wcmVkaWN0aW9uPXUsbC5jb25maWdzLnVuaXF1ZUFsdD11O2Vsc2UgaWYoakJlKHMpKXtsZXQgaD1EbChzLmFsdHMpO2wuaXNBY2NlcHRTdGF0ZT0hMCxsLnByZWRpY3Rpb249aCxsLmNvbmZpZ3MudW5pcXVlQWx0PWgsQkJlLmFwcGx5KHRoaXMsW3QsbixzLmFsdHMsYV0pfXJldHVybiBsPXdvZSh0LGUscixsKSxsfWZ1bmN0aW9uIEJCZSh0LGUscixuKXtsZXQgaT1bXTtmb3IobGV0IGg9MTtoPD1lO2grKylpLnB1c2godGhpcy5MQShoKS50b2tlblR5cGUpO2xldCBhPXQuYXRuU3RhcnRTdGF0ZSxzPWEucnVsZSxsPWEucHJvZHVjdGlvbix1PUZCZSh7dG9wTGV2ZWxSdWxlOnMsYW1iaWd1aXR5SW5kaWNlczpyLHByb2R1Y3Rpb246bCxwcmVmaXhQYXRoOml9KTtuKHUpfWZ1bmN0aW9uIEZCZSh0KXtsZXQgZT1KZSh0LnByZWZpeFBhdGgsaT0+RnUoaSkpLmpvaW4oIiwgIikscj10LnByb2R1Y3Rpb24uaWR4PT09MD8iIjp0LnByb2R1Y3Rpb24uaWR4LG49YEFtYmlndW91cyBBbHRlcm5hdGl2ZXMgRGV0ZWN0ZWQ6IDwke3QuYW1iaWd1aXR5SW5kaWNlcy5qb2luKCIsICIpfT4gaW4gPCR7JEJlKHQucHJvZHVjdGlvbil9JHtyfT4gaW5zaWRlIDwke3QudG9wTGV2ZWxSdWxlLm5hbWV9PiBSdWxlLAo8JHtlfT4gbWF5IGFwcGVhcnMgYXMgYSBwcmVmaXggcGF0aCBpbiBhbGwgdGhlc2UgYWx0ZXJuYXRpdmVzLgpgO3JldHVybiBuPW4rYFNlZTogaHR0cHM6Ly9jaGV2cm90YWluLmlvL2RvY3MvZ3VpZGUvcmVzb2x2aW5nX2dyYW1tYXJfZXJyb3JzLmh0bWwjQU1CSUdVT1VTX0FMVEVSTkFUSVZFUwpGb3IgRnVydGhlciBkZXRhaWxzLmAsbn1mdW5jdGlvbiAkQmUodCl7aWYodCBpbnN0YW5jZW9mIG9uKXJldHVybiJTVUJSVUxFIjtpZih0IGluc3RhbmNlb2YgbG4pcmV0dXJuIk9QVElPTiI7aWYodCBpbnN0YW5jZW9mIFRuKXJldHVybiJPUiI7aWYodCBpbnN0YW5jZW9mIExuKXJldHVybiJBVF9MRUFTVF9PTkUiO2lmKHQgaW5zdGFuY2VvZiBSbilyZXR1cm4iQVRfTEVBU1RfT05FX1NFUCI7aWYodCBpbnN0YW5jZW9mIHduKXJldHVybiJNQU5ZX1NFUCI7aWYodCBpbnN0YW5jZW9mIE9yKXJldHVybiJNQU5ZIjtpZih0IGluc3RhbmNlb2Yga3IpcmV0dXJuIkNPTlNVTUUiO3Rocm93IEVycm9yKCJub24gZXhoYXVzdGl2ZSBtYXRjaCIpfWZ1bmN0aW9uIHpCZSh0LGUscil7bGV0IG49eWEoZS5jb25maWdzLmVsZW1lbnRzLGE9PmEuc3RhdGUudHJhbnNpdGlvbnMpLGk9UXJlKG4uZmlsdGVyKGE9PmEgaW5zdGFuY2VvZiBRZykubWFwKGE9PmEudG9rZW5UeXBlKSxhPT5hLnRva2VuVHlwZUlkeCk7cmV0dXJue2FjdHVhbFRva2VuOnIscG9zc2libGVUb2tlblR5cGVzOmksdG9rZW5QYXRoOnR9fWZ1bmN0aW9uIEdCZSh0LGUpe3JldHVybiB0LmVkZ2VzW2UudG9rZW5UeXBlSWR4XX1mdW5jdGlvbiBWQmUodCxlLHIpe2xldCBuPW5ldyB0MSxpPVtdO2ZvcihsZXQgcyBvZiB0LmVsZW1lbnRzKXtpZihyLmlzKHMuYWx0KT09PSExKWNvbnRpbnVlO2lmKHMuc3RhdGUudHlwZT09PUpnKXtpLnB1c2gocyk7Y29udGludWV9bGV0IGw9cy5zdGF0ZS50cmFuc2l0aW9ucy5sZW5ndGg7Zm9yKGxldCB1PTA7dTxsO3UrKyl7bGV0IGg9cy5zdGF0ZS50cmFuc2l0aW9uc1t1XSxmPVVCZShoLGUpO2YhPT12b2lkIDAmJm4uYWRkKHtzdGF0ZTpmLGFsdDpzLmFsdCxzdGFjazpzLnN0YWNrfSl9fWxldCBhO2lmKGkubGVuZ3RoPT09MCYmbi5zaXplPT09MSYmKGE9biksYT09PXZvaWQgMCl7YT1uZXcgdDE7Zm9yKGxldCBzIG9mIG4uZWxlbWVudHMpdUUocyxhKX1pZihpLmxlbmd0aD4wJiYhWUJlKGEpKWZvcihsZXQgcyBvZiBpKWEuYWRkKHMpO3JldHVybiBhfWZ1bmN0aW9uIFVCZSh0LGUpe2lmKHQgaW5zdGFuY2VvZiBRZyYmc3goZSx0LnRva2VuVHlwZSkpcmV0dXJuIHQudGFyZ2V0fWZ1bmN0aW9uIEhCZSh0LGUpe2xldCByO2ZvcihsZXQgbiBvZiB0LmVsZW1lbnRzKWlmKGUuaXMobi5hbHQpPT09ITApe2lmKHI9PT12b2lkIDApcj1uLmFsdDtlbHNlIGlmKHIhPT1uLmFsdClyZXR1cm59cmV0dXJuIHJ9ZnVuY3Rpb24gVG9lKHQpe3JldHVybntjb25maWdzOnQsZWRnZXM6e30saXNBY2NlcHRTdGF0ZTohMSxwcmVkaWN0aW9uOi0xfX1mdW5jdGlvbiB3b2UodCxlLHIsbil7cmV0dXJuIG49a29lKHQsbiksZS5lZGdlc1tyLnRva2VuVHlwZUlkeF09bixufWZ1bmN0aW9uIGtvZSh0LGUpe2lmKGU9PT1UeClyZXR1cm4gZTtsZXQgcj1lLmNvbmZpZ3Mua2V5LG49dC5zdGF0ZXNbcl07cmV0dXJuIG4hPT12b2lkIDA/bjooZS5jb25maWdzLmZpbmFsaXplKCksdC5zdGF0ZXNbcl09ZSxlKX1mdW5jdGlvbiBXQmUodCl7bGV0IGU9bmV3IHQxLHI9dC50cmFuc2l0aW9ucy5sZW5ndGg7Zm9yKGxldCBuPTA7bjxyO24rKyl7bGV0IGE9e3N0YXRlOnQudHJhbnNpdGlvbnNbbl0udGFyZ2V0LGFsdDpuLHN0YWNrOltdfTt1RShhLGUpfXJldHVybiBlfWZ1bmN0aW9uIHVFKHQsZSl7bGV0IHI9dC5zdGF0ZTtpZihyLnR5cGU9PT1KZyl7aWYodC5zdGFjay5sZW5ndGg+MCl7bGV0IGk9Wy4uLnQuc3RhY2tdLHM9e3N0YXRlOmkucG9wKCksYWx0OnQuYWx0LHN0YWNrOml9O3VFKHMsZSl9ZWxzZSBlLmFkZCh0KTtyZXR1cm59ci5lcHNpbG9uT25seVRyYW5zaXRpb25zfHxlLmFkZCh0KTtsZXQgbj1yLnRyYW5zaXRpb25zLmxlbmd0aDtmb3IobGV0IGk9MDtpPG47aSsrKXtsZXQgYT1yLnRyYW5zaXRpb25zW2ldLHM9cUJlKHQsYSk7cyE9PXZvaWQgMCYmdUUocyxlKX19ZnVuY3Rpb24gcUJlKHQsZSl7aWYoZSBpbnN0YW5jZW9mIHd4KXJldHVybntzdGF0ZTplLnRhcmdldCxhbHQ6dC5hbHQsc3RhY2s6dC5zdGFja307aWYoZSBpbnN0YW5jZW9mIFpnKXtsZXQgcj1bLi4udC5zdGFjayxlLmZvbGxvd1N0YXRlXTtyZXR1cm57c3RhdGU6ZS50YXJnZXQsYWx0OnQuYWx0LHN0YWNrOnJ9fX1mdW5jdGlvbiBZQmUodCl7Zm9yKGxldCBlIG9mIHQuZWxlbWVudHMpaWYoZS5zdGF0ZS50eXBlPT09SmcpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gWEJlKHQpe2ZvcihsZXQgZSBvZiB0LmVsZW1lbnRzKWlmKGUuc3RhdGUudHlwZSE9PUpnKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGpCZSh0KXtpZihYQmUodCkpcmV0dXJuITA7bGV0IGU9S0JlKHQuZWxlbWVudHMpO3JldHVybiBRQmUoZSkmJiFaQmUoZSl9ZnVuY3Rpb24gS0JlKHQpe2xldCBlPW5ldyBNYXA7Zm9yKGxldCByIG9mIHQpe2xldCBuPUpOKHIsITEpLGk9ZS5nZXQobik7aT09PXZvaWQgMCYmKGk9e30sZS5zZXQobixpKSksaVtyLmFsdF09ITB9cmV0dXJuIGV9ZnVuY3Rpb24gUUJlKHQpe2ZvcihsZXQgZSBvZiBBcnJheS5mcm9tKHQudmFsdWVzKCkpKWlmKE9iamVjdC5rZXlzKGUpLmxlbmd0aD4xKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFpCZSh0KXtmb3IobGV0IGUgb2YgQXJyYXkuZnJvbSh0LnZhbHVlcygpKSlpZihPYmplY3Qua2V5cyhlKS5sZW5ndGg9PT0xKXJldHVybiEwO3JldHVybiExfXZhciBjRSx4b2Usa3gsRW9lPU4oKCk9PnsidXNlIHN0cmljdCI7Y2YoKTt5b2UoKTt2b2UoKTtCTCgpO1JMKCk7WnJlKCk7SW0oKTt1VCgpOyRUKCk7SFQoKTtHTCgpO28oTUJlLCJjcmVhdGVERkFDYWNoZSIpO2NFPWNsYXNze3N0YXRpY3tvKHRoaXMsIlByZWRpY2F0ZVNldCIpfWNvbnN0cnVjdG9yKCl7dGhpcy5wcmVkaWNhdGVzPVtdfWlzKGUpe3JldHVybiBlPj10aGlzLnByZWRpY2F0ZXMubGVuZ3RofHx0aGlzLnByZWRpY2F0ZXNbZV19c2V0KGUscil7dGhpcy5wcmVkaWNhdGVzW2VdPXJ9dG9TdHJpbmcoKXtsZXQgZT0iIixyPXRoaXMucHJlZGljYXRlcy5sZW5ndGg7Zm9yKGxldCBuPTA7bjxyO24rKyllKz10aGlzLnByZWRpY2F0ZXNbbl09PT0hMD8iMSI6IjAiO3JldHVybiBlfX0seG9lPW5ldyBjRSxreD1jbGFzcyBleHRlbmRzIEd1e3N0YXRpY3tvKHRoaXMsIkxMU3Rhckxvb2thaGVhZFN0cmF0ZWd5Iil9Y29uc3RydWN0b3IoZSl7dmFyIHI7c3VwZXIoKSx0aGlzLmxvZ2dpbmc9KHI9ZT8ubG9nZ2luZykhPT1udWxsJiZyIT09dm9pZCAwP3I6bj0+Y29uc29sZS5sb2cobil9aW5pdGlhbGl6ZShlKXt0aGlzLmF0bj1kb2UoZS5ydWxlcyksdGhpcy5kZmFzPUlCZSh0aGlzLmF0bil9dmFsaWRhdGVBbWJpZ3VvdXNBbHRlcm5hdGlvbkFsdGVybmF0aXZlcygpe3JldHVybltdfXZhbGlkYXRlRW1wdHlPckFsdGVybmF0aXZlcygpe3JldHVybltdfWJ1aWxkTG9va2FoZWFkRm9yQWx0ZXJuYXRpb24oZSl7bGV0e3Byb2RPY2N1cnJlbmNlOnIscnVsZTpuLGhhc1ByZWRpY2F0ZXM6aSxkeW5hbWljVG9rZW5zRW5hYmxlZDphfT1lLHM9dGhpcy5kZmFzLGw9dGhpcy5sb2dnaW5nLHU9ZnAobiwiQWx0ZXJuYXRpb24iLHIpLGY9dGhpcy5hdG4uZGVjaXNpb25NYXBbdV0uZGVjaXNpb24sZD1KZShHayh7bWF4TG9va2FoZWFkOjEsb2NjdXJyZW5jZTpyLHByb2RUeXBlOiJBbHRlcm5hdGlvbiIscnVsZTpufSkscD0+SmUocCxtPT5tWzBdKSk7aWYoYm9lKGQsITEpJiYhYSl7bGV0IHA9WHIoZCwobSxnLHkpPT4oQWUoZyx2PT57diYmKG1bdi50b2tlblR5cGVJZHhdPXksQWUodi5jYXRlZ29yeU1hdGNoZXMseD0+e21beF09eX0pKX0pLG0pLHt9KTtyZXR1cm4gaT9mdW5jdGlvbihtKXt2YXIgZztsZXQgeT10aGlzLkxBKDEpLHY9cFt5LnRva2VuVHlwZUlkeF07aWYobSE9PXZvaWQgMCYmdiE9PXZvaWQgMCl7bGV0IHg9KGc9bVt2XSk9PT1udWxsfHxnPT09dm9pZCAwP3ZvaWQgMDpnLkdBVEU7aWYoeCE9PXZvaWQgMCYmeC5jYWxsKHRoaXMpPT09ITEpcmV0dXJufXJldHVybiB2fTpmdW5jdGlvbigpe2xldCBtPXRoaXMuTEEoMSk7cmV0dXJuIHBbbS50b2tlblR5cGVJZHhdfX1lbHNlIHJldHVybiBpP2Z1bmN0aW9uKHApe2xldCBtPW5ldyBjRSxnPXA9PT12b2lkIDA/MDpwLmxlbmd0aDtmb3IobGV0IHY9MDt2PGc7disrKXtsZXQgeD1wPy5bdl0uR0FURTttLnNldCh2LHg9PT12b2lkIDB8fHguY2FsbCh0aGlzKSl9bGV0IHk9ZU0uY2FsbCh0aGlzLHMsZixtLGwpO3JldHVybiB0eXBlb2YgeT09Im51bWJlciI/eTp2b2lkIDB9OmZ1bmN0aW9uKCl7bGV0IHA9ZU0uY2FsbCh0aGlzLHMsZix4b2UsbCk7cmV0dXJuIHR5cGVvZiBwPT0ibnVtYmVyIj9wOnZvaWQgMH19YnVpbGRMb29rYWhlYWRGb3JPcHRpb25hbChlKXtsZXR7cHJvZE9jY3VycmVuY2U6cixydWxlOm4scHJvZFR5cGU6aSxkeW5hbWljVG9rZW5zRW5hYmxlZDphfT1lLHM9dGhpcy5kZmFzLGw9dGhpcy5sb2dnaW5nLHU9ZnAobixpLHIpLGY9dGhpcy5hdG4uZGVjaXNpb25NYXBbdV0uZGVjaXNpb24sZD1KZShHayh7bWF4TG9va2FoZWFkOjEsb2NjdXJyZW5jZTpyLHByb2RUeXBlOmkscnVsZTpufSkscD0+SmUocCxtPT5tWzBdKSk7aWYoYm9lKGQpJiZkWzBdWzBdJiYhYSl7bGV0IHA9ZFswXSxtPXFyKHApO2lmKG0ubGVuZ3RoPT09MSYmdXIobVswXS5jYXRlZ29yeU1hdGNoZXMpKXtsZXQgeT1tWzBdLnRva2VuVHlwZUlkeDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5MQSgxKS50b2tlblR5cGVJZHg9PT15fX1lbHNle2xldCBnPVhyKG0sKHksdik9Pih2IT09dm9pZCAwJiYoeVt2LnRva2VuVHlwZUlkeF09ITAsQWUodi5jYXRlZ29yeU1hdGNoZXMseD0+e3lbeF09ITB9KSkseSkse30pO3JldHVybiBmdW5jdGlvbigpe2xldCB5PXRoaXMuTEEoMSk7cmV0dXJuIGdbeS50b2tlblR5cGVJZHhdPT09ITB9fX1yZXR1cm4gZnVuY3Rpb24oKXtsZXQgcD1lTS5jYWxsKHRoaXMscyxmLHhvZSxsKTtyZXR1cm4gdHlwZW9mIHA9PSJvYmplY3QiPyExOnA9PT0wfX19O28oYm9lLCJpc0xMMVNlcXVlbmNlIik7byhJQmUsImluaXRBVE5TaW11bGF0b3IiKTtvKGVNLCJhZGFwdGl2ZVByZWRpY3QiKTtvKE9CZSwicGVyZm9ybUxvb2thaGVhZCIpO28oUEJlLCJjb21wdXRlTG9va2FoZWFkVGFyZ2V0Iik7byhCQmUsInJlcG9ydExvb2thaGVhZEFtYmlndWl0eSIpO28oRkJlLCJidWlsZEFtYmlndWl0eUVycm9yIik7bygkQmUsImdldFByb2R1Y3Rpb25Ec2xOYW1lIik7byh6QmUsImJ1aWxkQWRhcHRpdmVQcmVkaWN0RXJyb3IiKTtvKEdCZSwiZ2V0RXhpc3RpbmdUYXJnZXRTdGF0ZSIpO28oVkJlLCJjb21wdXRlUmVhY2hTZXQiKTtvKFVCZSwiZ2V0UmVhY2hhYmxlVGFyZ2V0Iik7byhIQmUsImdldFVuaXF1ZUFsdCIpO28oVG9lLCJuZXdERkFTdGF0ZSIpO28od29lLCJhZGRERkFFZGdlIik7byhrb2UsImFkZERGQVN0YXRlIik7byhXQmUsImNvbXB1dGVTdGFydFN0YXRlIik7byh1RSwiY2xvc3VyZSIpO28ocUJlLCJnZXRFcHNpbG9uVGFyZ2V0Iik7byhZQmUsImhhc0NvbmZpZ0luUnVsZVN0b3BTdGF0ZSIpO28oWEJlLCJhbGxDb25maWdzSW5SdWxlU3RvcFN0YXRlcyIpO28oakJlLCJoYXNDb25mbGljdFRlcm1pbmF0aW5nUHJlZGljdGlvbiIpO28oS0JlLCJnZXRDb25mbGljdGluZ0FsdFNldHMiKTtvKFFCZSwiaGFzQ29uZmxpY3RpbmdBbHRTZXQiKTtvKFpCZSwiaGFzU3RhdGVBc3NvY2lhdGVkV2l0aE9uZUFsdCIpfSk7dmFyIFNvZT1OKCgpPT57InVzZSBzdHJpY3QiO0VvZSgpfSk7dmFyIENvZSx0TSxBb2UsaEUsanIsUHIsZkUsX29lLHJNLERvZSxMb2UsUm9lLE5vZSxuTSxNb2UsSW9lLE9vZSxkRSxyMSxuMSxpTSxpMSxQb2UsYU0sc00sb00sbE0sY00sQm9lLEZvZSx1TSwkb2UsaE0sRXgsem9lLEdvZSxWb2UsVW9lLEhvZSxXb2UscW9lLFlvZSxwRSxYb2Usam9lLEtvZSxRb2UsWm9lLEpvZSxlbGUsdGxlLHJsZSxubGUsaWxlLG1FLGFsZSxzbGUsb2xlLGxsZSxjbGUsdWxlLGhsZSxmbGUsZGxlLHBsZSxtbGUsZ2xlLHlsZSxmTSxkTSx2bGUseGxlLGJsZSx3bGUsVGxlLGtsZSxFbGUsU2xlLENsZSxwTSxGZSxtTT1OKCgpPT57InVzZSBzdHJpY3QiOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHIpe3JldHVybiB0eXBlb2Ygcj09InN0cmluZyJ9byhlLCJpcyIpLHQuaXM9ZX0pKENvZXx8KENvZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHIpe3JldHVybiB0eXBlb2Ygcj09InN0cmluZyJ9byhlLCJpcyIpLHQuaXM9ZX0pKHRNfHwodE09e30pKTsoZnVuY3Rpb24odCl7dC5NSU5fVkFMVUU9LTIxNDc0ODM2NDgsdC5NQVhfVkFMVUU9MjE0NzQ4MzY0NztmdW5jdGlvbiBlKHIpe3JldHVybiB0eXBlb2Ygcj09Im51bWJlciImJnQuTUlOX1ZBTFVFPD1yJiZyPD10Lk1BWF9WQUxVRX1vKGUsImlzIiksdC5pcz1lfSkoQW9lfHwoQW9lPXt9KSk7KGZ1bmN0aW9uKHQpe3QuTUlOX1ZBTFVFPTAsdC5NQVhfVkFMVUU9MjE0NzQ4MzY0NztmdW5jdGlvbiBlKHIpe3JldHVybiB0eXBlb2Ygcj09Im51bWJlciImJnQuTUlOX1ZBTFVFPD1yJiZyPD10Lk1BWF9WQUxVRX1vKGUsImlzIiksdC5pcz1lfSkoaEV8fChoRT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSl7cmV0dXJuIG49PT1OdW1iZXIuTUFYX1ZBTFVFJiYobj1oRS5NQVhfVkFMVUUpLGk9PT1OdW1iZXIuTUFYX1ZBTFVFJiYoaT1oRS5NQVhfVkFMVUUpLHtsaW5lOm4sY2hhcmFjdGVyOml9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIEZlLm9iamVjdExpdGVyYWwoaSkmJkZlLnVpbnRlZ2VyKGkubGluZSkmJkZlLnVpbnRlZ2VyKGkuY2hhcmFjdGVyKX1vKHIsImlzIiksdC5pcz1yfSkoanJ8fChqcj17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSxhLHMpe2lmKEZlLnVpbnRlZ2VyKG4pJiZGZS51aW50ZWdlcihpKSYmRmUudWludGVnZXIoYSkmJkZlLnVpbnRlZ2VyKHMpKXJldHVybntzdGFydDpqci5jcmVhdGUobixpKSxlbmQ6anIuY3JlYXRlKGEscyl9O2lmKGpyLmlzKG4pJiZqci5pcyhpKSlyZXR1cm57c3RhcnQ6bixlbmQ6aX07dGhyb3cgbmV3IEVycm9yKGBSYW5nZSNjcmVhdGUgY2FsbGVkIHdpdGggaW52YWxpZCBhcmd1bWVudHNbJHtufSwgJHtpfSwgJHthfSwgJHtzfV1gKX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiBGZS5vYmplY3RMaXRlcmFsKGkpJiZqci5pcyhpLnN0YXJ0KSYmanIuaXMoaS5lbmQpfW8ociwiaXMiKSx0LmlzPXJ9KShQcnx8KFByPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpKXtyZXR1cm57dXJpOm4scmFuZ2U6aX19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gRmUub2JqZWN0TGl0ZXJhbChpKSYmUHIuaXMoaS5yYW5nZSkmJihGZS5zdHJpbmcoaS51cmkpfHxGZS51bmRlZmluZWQoaS51cmkpKX1vKHIsImlzIiksdC5pcz1yfSkoZkV8fChmRT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSxhLHMpe3JldHVybnt0YXJnZXRVcmk6bix0YXJnZXRSYW5nZTppLHRhcmdldFNlbGVjdGlvblJhbmdlOmEsb3JpZ2luU2VsZWN0aW9uUmFuZ2U6c319byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gRmUub2JqZWN0TGl0ZXJhbChpKSYmUHIuaXMoaS50YXJnZXRSYW5nZSkmJkZlLnN0cmluZyhpLnRhcmdldFVyaSkmJlByLmlzKGkudGFyZ2V0U2VsZWN0aW9uUmFuZ2UpJiYoUHIuaXMoaS5vcmlnaW5TZWxlY3Rpb25SYW5nZSl8fEZlLnVuZGVmaW5lZChpLm9yaWdpblNlbGVjdGlvblJhbmdlKSl9byhyLCJpcyIpLHQuaXM9cn0pKF9vZXx8KF9vZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSxhLHMpe3JldHVybntyZWQ6bixncmVlbjppLGJsdWU6YSxhbHBoYTpzfX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiBGZS5vYmplY3RMaXRlcmFsKGkpJiZGZS5udW1iZXJSYW5nZShpLnJlZCwwLDEpJiZGZS5udW1iZXJSYW5nZShpLmdyZWVuLDAsMSkmJkZlLm51bWJlclJhbmdlKGkuYmx1ZSwwLDEpJiZGZS5udW1iZXJSYW5nZShpLmFscGhhLDAsMSl9byhyLCJpcyIpLHQuaXM9cn0pKHJNfHwock09e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGkpe3JldHVybntyYW5nZTpuLGNvbG9yOml9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIEZlLm9iamVjdExpdGVyYWwoaSkmJlByLmlzKGkucmFuZ2UpJiZyTS5pcyhpLmNvbG9yKX1vKHIsImlzIiksdC5pcz1yfSkoRG9lfHwoRG9lPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpLGEpe3JldHVybntsYWJlbDpuLHRleHRFZGl0OmksYWRkaXRpb25hbFRleHRFZGl0czphfX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiBGZS5vYmplY3RMaXRlcmFsKGkpJiZGZS5zdHJpbmcoaS5sYWJlbCkmJihGZS51bmRlZmluZWQoaS50ZXh0RWRpdCl8fG4xLmlzKGkpKSYmKEZlLnVuZGVmaW5lZChpLmFkZGl0aW9uYWxUZXh0RWRpdHMpfHxGZS50eXBlZEFycmF5KGkuYWRkaXRpb25hbFRleHRFZGl0cyxuMS5pcykpfW8ociwiaXMiKSx0LmlzPXJ9KShMb2V8fChMb2U9e30pKTsoZnVuY3Rpb24odCl7dC5Db21tZW50PSJjb21tZW50Iix0LkltcG9ydHM9ImltcG9ydHMiLHQuUmVnaW9uPSJyZWdpb24ifSkoUm9lfHwoUm9lPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpLGEscyxsLHUpe2xldCBoPXtzdGFydExpbmU6bixlbmRMaW5lOml9O3JldHVybiBGZS5kZWZpbmVkKGEpJiYoaC5zdGFydENoYXJhY3Rlcj1hKSxGZS5kZWZpbmVkKHMpJiYoaC5lbmRDaGFyYWN0ZXI9cyksRmUuZGVmaW5lZChsKSYmKGgua2luZD1sKSxGZS5kZWZpbmVkKHUpJiYoaC5jb2xsYXBzZWRUZXh0PXUpLGh9byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gRmUub2JqZWN0TGl0ZXJhbChpKSYmRmUudWludGVnZXIoaS5zdGFydExpbmUpJiZGZS51aW50ZWdlcihpLnN0YXJ0TGluZSkmJihGZS51bmRlZmluZWQoaS5zdGFydENoYXJhY3Rlcil8fEZlLnVpbnRlZ2VyKGkuc3RhcnRDaGFyYWN0ZXIpKSYmKEZlLnVuZGVmaW5lZChpLmVuZENoYXJhY3Rlcil8fEZlLnVpbnRlZ2VyKGkuZW5kQ2hhcmFjdGVyKSkmJihGZS51bmRlZmluZWQoaS5raW5kKXx8RmUuc3RyaW5nKGkua2luZCkpfW8ociwiaXMiKSx0LmlzPXJ9KShOb2V8fChOb2U9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGkpe3JldHVybntsb2NhdGlvbjpuLG1lc3NhZ2U6aX19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gRmUuZGVmaW5lZChpKSYmZkUuaXMoaS5sb2NhdGlvbikmJkZlLnN0cmluZyhpLm1lc3NhZ2UpfW8ociwiaXMiKSx0LmlzPXJ9KShuTXx8KG5NPXt9KSk7KGZ1bmN0aW9uKHQpe3QuRXJyb3I9MSx0Lldhcm5pbmc9Mix0LkluZm9ybWF0aW9uPTMsdC5IaW50PTR9KShNb2V8fChNb2U9e30pKTsoZnVuY3Rpb24odCl7dC5Vbm5lY2Vzc2FyeT0xLHQuRGVwcmVjYXRlZD0yfSkoSW9lfHwoSW9lPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUocil7bGV0IG49cjtyZXR1cm4gRmUub2JqZWN0TGl0ZXJhbChuKSYmRmUuc3RyaW5nKG4uaHJlZil9byhlLCJpcyIpLHQuaXM9ZX0pKE9vZXx8KE9vZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSxhLHMsbCx1KXtsZXQgaD17cmFuZ2U6bixtZXNzYWdlOml9O3JldHVybiBGZS5kZWZpbmVkKGEpJiYoaC5zZXZlcml0eT1hKSxGZS5kZWZpbmVkKHMpJiYoaC5jb2RlPXMpLEZlLmRlZmluZWQobCkmJihoLnNvdXJjZT1sKSxGZS5kZWZpbmVkKHUpJiYoaC5yZWxhdGVkSW5mb3JtYXRpb249dSksaH1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXt2YXIgaTtsZXQgYT1uO3JldHVybiBGZS5kZWZpbmVkKGEpJiZQci5pcyhhLnJhbmdlKSYmRmUuc3RyaW5nKGEubWVzc2FnZSkmJihGZS5udW1iZXIoYS5zZXZlcml0eSl8fEZlLnVuZGVmaW5lZChhLnNldmVyaXR5KSkmJihGZS5pbnRlZ2VyKGEuY29kZSl8fEZlLnN0cmluZyhhLmNvZGUpfHxGZS51bmRlZmluZWQoYS5jb2RlKSkmJihGZS51bmRlZmluZWQoYS5jb2RlRGVzY3JpcHRpb24pfHxGZS5zdHJpbmcoKGk9YS5jb2RlRGVzY3JpcHRpb24pPT09bnVsbHx8aT09PXZvaWQgMD92b2lkIDA6aS5ocmVmKSkmJihGZS5zdHJpbmcoYS5zb3VyY2UpfHxGZS51bmRlZmluZWQoYS5zb3VyY2UpKSYmKEZlLnVuZGVmaW5lZChhLnJlbGF0ZWRJbmZvcm1hdGlvbil8fEZlLnR5cGVkQXJyYXkoYS5yZWxhdGVkSW5mb3JtYXRpb24sbk0uaXMpKX1vKHIsImlzIiksdC5pcz1yfSkoZEV8fChkRT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSwuLi5hKXtsZXQgcz17dGl0bGU6bixjb21tYW5kOml9O3JldHVybiBGZS5kZWZpbmVkKGEpJiZhLmxlbmd0aD4wJiYocy5hcmd1bWVudHM9YSksc31vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiBGZS5kZWZpbmVkKGkpJiZGZS5zdHJpbmcoaS50aXRsZSkmJkZlLnN0cmluZyhpLmNvbW1hbmQpfW8ociwiaXMiKSx0LmlzPXJ9KShyMXx8KHIxPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoYSxzKXtyZXR1cm57cmFuZ2U6YSxuZXdUZXh0OnN9fW8oZSwicmVwbGFjZSIpLHQucmVwbGFjZT1lO2Z1bmN0aW9uIHIoYSxzKXtyZXR1cm57cmFuZ2U6e3N0YXJ0OmEsZW5kOmF9LG5ld1RleHQ6c319byhyLCJpbnNlcnQiKSx0Lmluc2VydD1yO2Z1bmN0aW9uIG4oYSl7cmV0dXJue3JhbmdlOmEsbmV3VGV4dDoiIn19byhuLCJkZWwiKSx0LmRlbD1uO2Z1bmN0aW9uIGkoYSl7bGV0IHM9YTtyZXR1cm4gRmUub2JqZWN0TGl0ZXJhbChzKSYmRmUuc3RyaW5nKHMubmV3VGV4dCkmJlByLmlzKHMucmFuZ2UpfW8oaSwiaXMiKSx0LmlzPWl9KShuMXx8KG4xPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpLGEpe2xldCBzPXtsYWJlbDpufTtyZXR1cm4gaSE9PXZvaWQgMCYmKHMubmVlZHNDb25maXJtYXRpb249aSksYSE9PXZvaWQgMCYmKHMuZGVzY3JpcHRpb249YSksc31vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiBGZS5vYmplY3RMaXRlcmFsKGkpJiZGZS5zdHJpbmcoaS5sYWJlbCkmJihGZS5ib29sZWFuKGkubmVlZHNDb25maXJtYXRpb24pfHxpLm5lZWRzQ29uZmlybWF0aW9uPT09dm9pZCAwKSYmKEZlLnN0cmluZyhpLmRlc2NyaXB0aW9uKXx8aS5kZXNjcmlwdGlvbj09PXZvaWQgMCl9byhyLCJpcyIpLHQuaXM9cn0pKGlNfHwoaU09e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyKXtsZXQgbj1yO3JldHVybiBGZS5zdHJpbmcobil9byhlLCJpcyIpLHQuaXM9ZX0pKGkxfHwoaTE9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShhLHMsbCl7cmV0dXJue3JhbmdlOmEsbmV3VGV4dDpzLGFubm90YXRpb25JZDpsfX1vKGUsInJlcGxhY2UiKSx0LnJlcGxhY2U9ZTtmdW5jdGlvbiByKGEscyxsKXtyZXR1cm57cmFuZ2U6e3N0YXJ0OmEsZW5kOmF9LG5ld1RleHQ6cyxhbm5vdGF0aW9uSWQ6bH19byhyLCJpbnNlcnQiKSx0Lmluc2VydD1yO2Z1bmN0aW9uIG4oYSxzKXtyZXR1cm57cmFuZ2U6YSxuZXdUZXh0OiIiLGFubm90YXRpb25JZDpzfX1vKG4sImRlbCIpLHQuZGVsPW47ZnVuY3Rpb24gaShhKXtsZXQgcz1hO3JldHVybiBuMS5pcyhzKSYmKGlNLmlzKHMuYW5ub3RhdGlvbklkKXx8aTEuaXMocy5hbm5vdGF0aW9uSWQpKX1vKGksImlzIiksdC5pcz1pfSkoUG9lfHwoUG9lPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpKXtyZXR1cm57dGV4dERvY3VtZW50Om4sZWRpdHM6aX19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gRmUuZGVmaW5lZChpKSYmdU0uaXMoaS50ZXh0RG9jdW1lbnQpJiZBcnJheS5pc0FycmF5KGkuZWRpdHMpfW8ociwiaXMiKSx0LmlzPXJ9KShhTXx8KGFNPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpLGEpe2xldCBzPXtraW5kOiJjcmVhdGUiLHVyaTpufTtyZXR1cm4gaSE9PXZvaWQgMCYmKGkub3ZlcndyaXRlIT09dm9pZCAwfHxpLmlnbm9yZUlmRXhpc3RzIT09dm9pZCAwKSYmKHMub3B0aW9ucz1pKSxhIT09dm9pZCAwJiYocy5hbm5vdGF0aW9uSWQ9YSksc31vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiBpJiZpLmtpbmQ9PT0iY3JlYXRlIiYmRmUuc3RyaW5nKGkudXJpKSYmKGkub3B0aW9ucz09PXZvaWQgMHx8KGkub3B0aW9ucy5vdmVyd3JpdGU9PT12b2lkIDB8fEZlLmJvb2xlYW4oaS5vcHRpb25zLm92ZXJ3cml0ZSkpJiYoaS5vcHRpb25zLmlnbm9yZUlmRXhpc3RzPT09dm9pZCAwfHxGZS5ib29sZWFuKGkub3B0aW9ucy5pZ25vcmVJZkV4aXN0cykpKSYmKGkuYW5ub3RhdGlvbklkPT09dm9pZCAwfHxpMS5pcyhpLmFubm90YXRpb25JZCkpfW8ociwiaXMiKSx0LmlzPXJ9KShzTXx8KHNNPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpLGEscyl7bGV0IGw9e2tpbmQ6InJlbmFtZSIsb2xkVXJpOm4sbmV3VXJpOml9O3JldHVybiBhIT09dm9pZCAwJiYoYS5vdmVyd3JpdGUhPT12b2lkIDB8fGEuaWdub3JlSWZFeGlzdHMhPT12b2lkIDApJiYobC5vcHRpb25zPWEpLHMhPT12b2lkIDAmJihsLmFubm90YXRpb25JZD1zKSxsfW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIGkmJmkua2luZD09PSJyZW5hbWUiJiZGZS5zdHJpbmcoaS5vbGRVcmkpJiZGZS5zdHJpbmcoaS5uZXdVcmkpJiYoaS5vcHRpb25zPT09dm9pZCAwfHwoaS5vcHRpb25zLm92ZXJ3cml0ZT09PXZvaWQgMHx8RmUuYm9vbGVhbihpLm9wdGlvbnMub3ZlcndyaXRlKSkmJihpLm9wdGlvbnMuaWdub3JlSWZFeGlzdHM9PT12b2lkIDB8fEZlLmJvb2xlYW4oaS5vcHRpb25zLmlnbm9yZUlmRXhpc3RzKSkpJiYoaS5hbm5vdGF0aW9uSWQ9PT12b2lkIDB8fGkxLmlzKGkuYW5ub3RhdGlvbklkKSl9byhyLCJpcyIpLHQuaXM9cn0pKG9NfHwob009e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGksYSl7bGV0IHM9e2tpbmQ6ImRlbGV0ZSIsdXJpOm59O3JldHVybiBpIT09dm9pZCAwJiYoaS5yZWN1cnNpdmUhPT12b2lkIDB8fGkuaWdub3JlSWZOb3RFeGlzdHMhPT12b2lkIDApJiYocy5vcHRpb25zPWkpLGEhPT12b2lkIDAmJihzLmFubm90YXRpb25JZD1hKSxzfW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIGkmJmkua2luZD09PSJkZWxldGUiJiZGZS5zdHJpbmcoaS51cmkpJiYoaS5vcHRpb25zPT09dm9pZCAwfHwoaS5vcHRpb25zLnJlY3Vyc2l2ZT09PXZvaWQgMHx8RmUuYm9vbGVhbihpLm9wdGlvbnMucmVjdXJzaXZlKSkmJihpLm9wdGlvbnMuaWdub3JlSWZOb3RFeGlzdHM9PT12b2lkIDB8fEZlLmJvb2xlYW4oaS5vcHRpb25zLmlnbm9yZUlmTm90RXhpc3RzKSkpJiYoaS5hbm5vdGF0aW9uSWQ9PT12b2lkIDB8fGkxLmlzKGkuYW5ub3RhdGlvbklkKSl9byhyLCJpcyIpLHQuaXM9cn0pKGxNfHwobE09e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyKXtsZXQgbj1yO3JldHVybiBuJiYobi5jaGFuZ2VzIT09dm9pZCAwfHxuLmRvY3VtZW50Q2hhbmdlcyE9PXZvaWQgMCkmJihuLmRvY3VtZW50Q2hhbmdlcz09PXZvaWQgMHx8bi5kb2N1bWVudENoYW5nZXMuZXZlcnkoaT0+RmUuc3RyaW5nKGkua2luZCk/c00uaXMoaSl8fG9NLmlzKGkpfHxsTS5pcyhpKTphTS5pcyhpKSkpfW8oZSwiaXMiKSx0LmlzPWV9KShjTXx8KGNNPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobil7cmV0dXJue3VyaTpufX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiBGZS5kZWZpbmVkKGkpJiZGZS5zdHJpbmcoaS51cmkpfW8ociwiaXMiKSx0LmlzPXJ9KShCb2V8fChCb2U9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGkpe3JldHVybnt1cmk6bix2ZXJzaW9uOml9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIEZlLmRlZmluZWQoaSkmJkZlLnN0cmluZyhpLnVyaSkmJkZlLmludGVnZXIoaS52ZXJzaW9uKX1vKHIsImlzIiksdC5pcz1yfSkoRm9lfHwoRm9lPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpKXtyZXR1cm57dXJpOm4sdmVyc2lvbjppfX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiBGZS5kZWZpbmVkKGkpJiZGZS5zdHJpbmcoaS51cmkpJiYoaS52ZXJzaW9uPT09bnVsbHx8RmUuaW50ZWdlcihpLnZlcnNpb24pKX1vKHIsImlzIiksdC5pcz1yfSkodU18fCh1TT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSxhLHMpe3JldHVybnt1cmk6bixsYW5ndWFnZUlkOmksdmVyc2lvbjphLHRleHQ6c319byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gRmUuZGVmaW5lZChpKSYmRmUuc3RyaW5nKGkudXJpKSYmRmUuc3RyaW5nKGkubGFuZ3VhZ2VJZCkmJkZlLmludGVnZXIoaS52ZXJzaW9uKSYmRmUuc3RyaW5nKGkudGV4dCl9byhyLCJpcyIpLHQuaXM9cn0pKCRvZXx8KCRvZT17fSkpOyhmdW5jdGlvbih0KXt0LlBsYWluVGV4dD0icGxhaW50ZXh0Iix0Lk1hcmtkb3duPSJtYXJrZG93biI7ZnVuY3Rpb24gZShyKXtsZXQgbj1yO3JldHVybiBuPT09dC5QbGFpblRleHR8fG49PT10Lk1hcmtkb3dufW8oZSwiaXMiKSx0LmlzPWV9KShoTXx8KGhNPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUocil7bGV0IG49cjtyZXR1cm4gRmUub2JqZWN0TGl0ZXJhbChyKSYmaE0uaXMobi5raW5kKSYmRmUuc3RyaW5nKG4udmFsdWUpfW8oZSwiaXMiKSx0LmlzPWV9KShFeHx8KEV4PXt9KSk7KGZ1bmN0aW9uKHQpe3QuVGV4dD0xLHQuTWV0aG9kPTIsdC5GdW5jdGlvbj0zLHQuQ29uc3RydWN0b3I9NCx0LkZpZWxkPTUsdC5WYXJpYWJsZT02LHQuQ2xhc3M9Nyx0LkludGVyZmFjZT04LHQuTW9kdWxlPTksdC5Qcm9wZXJ0eT0xMCx0LlVuaXQ9MTEsdC5WYWx1ZT0xMix0LkVudW09MTMsdC5LZXl3b3JkPTE0LHQuU25pcHBldD0xNSx0LkNvbG9yPTE2LHQuRmlsZT0xNyx0LlJlZmVyZW5jZT0xOCx0LkZvbGRlcj0xOSx0LkVudW1NZW1iZXI9MjAsdC5Db25zdGFudD0yMSx0LlN0cnVjdD0yMix0LkV2ZW50PTIzLHQuT3BlcmF0b3I9MjQsdC5UeXBlUGFyYW1ldGVyPTI1fSkoem9lfHwoem9lPXt9KSk7KGZ1bmN0aW9uKHQpe3QuUGxhaW5UZXh0PTEsdC5TbmlwcGV0PTJ9KShHb2V8fChHb2U9e30pKTsoZnVuY3Rpb24odCl7dC5EZXByZWNhdGVkPTF9KShWb2V8fChWb2U9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGksYSl7cmV0dXJue25ld1RleHQ6bixpbnNlcnQ6aSxyZXBsYWNlOmF9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIGkmJkZlLnN0cmluZyhpLm5ld1RleHQpJiZQci5pcyhpLmluc2VydCkmJlByLmlzKGkucmVwbGFjZSl9byhyLCJpcyIpLHQuaXM9cn0pKFVvZXx8KFVvZT17fSkpOyhmdW5jdGlvbih0KXt0LmFzSXM9MSx0LmFkanVzdEluZGVudGF0aW9uPTJ9KShIb2V8fChIb2U9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyKXtsZXQgbj1yO3JldHVybiBuJiYoRmUuc3RyaW5nKG4uZGV0YWlsKXx8bi5kZXRhaWw9PT12b2lkIDApJiYoRmUuc3RyaW5nKG4uZGVzY3JpcHRpb24pfHxuLmRlc2NyaXB0aW9uPT09dm9pZCAwKX1vKGUsImlzIiksdC5pcz1lfSkoV29lfHwoV29lPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUocil7cmV0dXJue2xhYmVsOnJ9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZX0pKHFvZXx8KHFvZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHIsbil7cmV0dXJue2l0ZW1zOnJ8fFtdLGlzSW5jb21wbGV0ZTohIW59fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZX0pKFlvZXx8KFlvZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4pe3JldHVybiBuLnJlcGxhY2UoL1tcXGAqX3t9W1xdKCkjK1wtLiFdL2csIlxcJCYiKX1vKGUsImZyb21QbGFpblRleHQiKSx0LmZyb21QbGFpblRleHQ9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIEZlLnN0cmluZyhpKXx8RmUub2JqZWN0TGl0ZXJhbChpKSYmRmUuc3RyaW5nKGkubGFuZ3VhZ2UpJiZGZS5zdHJpbmcoaS52YWx1ZSl9byhyLCJpcyIpLHQuaXM9cn0pKHBFfHwocEU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyKXtsZXQgbj1yO3JldHVybiEhbiYmRmUub2JqZWN0TGl0ZXJhbChuKSYmKEV4LmlzKG4uY29udGVudHMpfHxwRS5pcyhuLmNvbnRlbnRzKXx8RmUudHlwZWRBcnJheShuLmNvbnRlbnRzLHBFLmlzKSkmJihyLnJhbmdlPT09dm9pZCAwfHxQci5pcyhyLnJhbmdlKSl9byhlLCJpcyIpLHQuaXM9ZX0pKFhvZXx8KFhvZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHIsbil7cmV0dXJuIG4/e2xhYmVsOnIsZG9jdW1lbnRhdGlvbjpufTp7bGFiZWw6cn19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lfSkoam9lfHwoam9lPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUocixuLC4uLmkpe2xldCBhPXtsYWJlbDpyfTtyZXR1cm4gRmUuZGVmaW5lZChuKSYmKGEuZG9jdW1lbnRhdGlvbj1uKSxGZS5kZWZpbmVkKGkpP2EucGFyYW1ldGVycz1pOmEucGFyYW1ldGVycz1bXSxhfW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZX0pKEtvZXx8KEtvZT17fSkpOyhmdW5jdGlvbih0KXt0LlRleHQ9MSx0LlJlYWQ9Mix0LldyaXRlPTN9KShRb2V8fChRb2U9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyLG4pe2xldCBpPXtyYW5nZTpyfTtyZXR1cm4gRmUubnVtYmVyKG4pJiYoaS5raW5kPW4pLGl9byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lfSkoWm9lfHwoWm9lPXt9KSk7KGZ1bmN0aW9uKHQpe3QuRmlsZT0xLHQuTW9kdWxlPTIsdC5OYW1lc3BhY2U9Myx0LlBhY2thZ2U9NCx0LkNsYXNzPTUsdC5NZXRob2Q9Nix0LlByb3BlcnR5PTcsdC5GaWVsZD04LHQuQ29uc3RydWN0b3I9OSx0LkVudW09MTAsdC5JbnRlcmZhY2U9MTEsdC5GdW5jdGlvbj0xMix0LlZhcmlhYmxlPTEzLHQuQ29uc3RhbnQ9MTQsdC5TdHJpbmc9MTUsdC5OdW1iZXI9MTYsdC5Cb29sZWFuPTE3LHQuQXJyYXk9MTgsdC5PYmplY3Q9MTksdC5LZXk9MjAsdC5OdWxsPTIxLHQuRW51bU1lbWJlcj0yMix0LlN0cnVjdD0yMyx0LkV2ZW50PTI0LHQuT3BlcmF0b3I9MjUsdC5UeXBlUGFyYW1ldGVyPTI2fSkoSm9lfHwoSm9lPXt9KSk7KGZ1bmN0aW9uKHQpe3QuRGVwcmVjYXRlZD0xfSkoZWxlfHwoZWxlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUocixuLGksYSxzKXtsZXQgbD17bmFtZTpyLGtpbmQ6bixsb2NhdGlvbjp7dXJpOmEscmFuZ2U6aX19O3JldHVybiBzJiYobC5jb250YWluZXJOYW1lPXMpLGx9byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lfSkodGxlfHwodGxlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUocixuLGksYSl7cmV0dXJuIGEhPT12b2lkIDA/e25hbWU6cixraW5kOm4sbG9jYXRpb246e3VyaTppLHJhbmdlOmF9fTp7bmFtZTpyLGtpbmQ6bixsb2NhdGlvbjp7dXJpOml9fX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWV9KShybGV8fChybGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGksYSxzLGwsdSl7bGV0IGg9e25hbWU6bixkZXRhaWw6aSxraW5kOmEscmFuZ2U6cyxzZWxlY3Rpb25SYW5nZTpsfTtyZXR1cm4gdSE9PXZvaWQgMCYmKGguY2hpbGRyZW49dSksaH1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiBpJiZGZS5zdHJpbmcoaS5uYW1lKSYmRmUubnVtYmVyKGkua2luZCkmJlByLmlzKGkucmFuZ2UpJiZQci5pcyhpLnNlbGVjdGlvblJhbmdlKSYmKGkuZGV0YWlsPT09dm9pZCAwfHxGZS5zdHJpbmcoaS5kZXRhaWwpKSYmKGkuZGVwcmVjYXRlZD09PXZvaWQgMHx8RmUuYm9vbGVhbihpLmRlcHJlY2F0ZWQpKSYmKGkuY2hpbGRyZW49PT12b2lkIDB8fEFycmF5LmlzQXJyYXkoaS5jaGlsZHJlbikpJiYoaS50YWdzPT09dm9pZCAwfHxBcnJheS5pc0FycmF5KGkudGFncykpfW8ociwiaXMiKSx0LmlzPXJ9KShubGV8fChubGU9e30pKTsoZnVuY3Rpb24odCl7dC5FbXB0eT0iIix0LlF1aWNrRml4PSJxdWlja2ZpeCIsdC5SZWZhY3Rvcj0icmVmYWN0b3IiLHQuUmVmYWN0b3JFeHRyYWN0PSJyZWZhY3Rvci5leHRyYWN0Iix0LlJlZmFjdG9ySW5saW5lPSJyZWZhY3Rvci5pbmxpbmUiLHQuUmVmYWN0b3JSZXdyaXRlPSJyZWZhY3Rvci5yZXdyaXRlIix0LlNvdXJjZT0ic291cmNlIix0LlNvdXJjZU9yZ2FuaXplSW1wb3J0cz0ic291cmNlLm9yZ2FuaXplSW1wb3J0cyIsdC5Tb3VyY2VGaXhBbGw9InNvdXJjZS5maXhBbGwifSkoaWxlfHwoaWxlPXt9KSk7KGZ1bmN0aW9uKHQpe3QuSW52b2tlZD0xLHQuQXV0b21hdGljPTJ9KShtRXx8KG1FPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpLGEpe2xldCBzPXtkaWFnbm9zdGljczpufTtyZXR1cm4gaSE9bnVsbCYmKHMub25seT1pKSxhIT1udWxsJiYocy50cmlnZ2VyS2luZD1hKSxzfW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIEZlLmRlZmluZWQoaSkmJkZlLnR5cGVkQXJyYXkoaS5kaWFnbm9zdGljcyxkRS5pcykmJihpLm9ubHk9PT12b2lkIDB8fEZlLnR5cGVkQXJyYXkoaS5vbmx5LEZlLnN0cmluZykpJiYoaS50cmlnZ2VyS2luZD09PXZvaWQgMHx8aS50cmlnZ2VyS2luZD09PW1FLkludm9rZWR8fGkudHJpZ2dlcktpbmQ9PT1tRS5BdXRvbWF0aWMpfW8ociwiaXMiKSx0LmlzPXJ9KShhbGV8fChhbGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGksYSl7bGV0IHM9e3RpdGxlOm59LGw9ITA7cmV0dXJuIHR5cGVvZiBpPT0ic3RyaW5nIj8obD0hMSxzLmtpbmQ9aSk6cjEuaXMoaSk/cy5jb21tYW5kPWk6cy5lZGl0PWksbCYmYSE9PXZvaWQgMCYmKHMua2luZD1hKSxzfW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIGkmJkZlLnN0cmluZyhpLnRpdGxlKSYmKGkuZGlhZ25vc3RpY3M9PT12b2lkIDB8fEZlLnR5cGVkQXJyYXkoaS5kaWFnbm9zdGljcyxkRS5pcykpJiYoaS5raW5kPT09dm9pZCAwfHxGZS5zdHJpbmcoaS5raW5kKSkmJihpLmVkaXQhPT12b2lkIDB8fGkuY29tbWFuZCE9PXZvaWQgMCkmJihpLmNvbW1hbmQ9PT12b2lkIDB8fHIxLmlzKGkuY29tbWFuZCkpJiYoaS5pc1ByZWZlcnJlZD09PXZvaWQgMHx8RmUuYm9vbGVhbihpLmlzUHJlZmVycmVkKSkmJihpLmVkaXQ9PT12b2lkIDB8fGNNLmlzKGkuZWRpdCkpfW8ociwiaXMiKSx0LmlzPXJ9KShzbGV8fChzbGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGkpe2xldCBhPXtyYW5nZTpufTtyZXR1cm4gRmUuZGVmaW5lZChpKSYmKGEuZGF0YT1pKSxhfW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIEZlLmRlZmluZWQoaSkmJlByLmlzKGkucmFuZ2UpJiYoRmUudW5kZWZpbmVkKGkuY29tbWFuZCl8fHIxLmlzKGkuY29tbWFuZCkpfW8ociwiaXMiKSx0LmlzPXJ9KShvbGV8fChvbGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGkpe3JldHVybnt0YWJTaXplOm4saW5zZXJ0U3BhY2VzOml9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIEZlLmRlZmluZWQoaSkmJkZlLnVpbnRlZ2VyKGkudGFiU2l6ZSkmJkZlLmJvb2xlYW4oaS5pbnNlcnRTcGFjZXMpfW8ociwiaXMiKSx0LmlzPXJ9KShsbGV8fChsbGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGksYSl7cmV0dXJue3JhbmdlOm4sdGFyZ2V0OmksZGF0YTphfX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiBGZS5kZWZpbmVkKGkpJiZQci5pcyhpLnJhbmdlKSYmKEZlLnVuZGVmaW5lZChpLnRhcmdldCl8fEZlLnN0cmluZyhpLnRhcmdldCkpfW8ociwiaXMiKSx0LmlzPXJ9KShjbGV8fChjbGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGkpe3JldHVybntyYW5nZTpuLHBhcmVudDppfX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiBGZS5vYmplY3RMaXRlcmFsKGkpJiZQci5pcyhpLnJhbmdlKSYmKGkucGFyZW50PT09dm9pZCAwfHx0LmlzKGkucGFyZW50KSl9byhyLCJpcyIpLHQuaXM9cn0pKHVsZXx8KHVsZT17fSkpOyhmdW5jdGlvbih0KXt0Lm5hbWVzcGFjZT0ibmFtZXNwYWNlIix0LnR5cGU9InR5cGUiLHQuY2xhc3M9ImNsYXNzIix0LmVudW09ImVudW0iLHQuaW50ZXJmYWNlPSJpbnRlcmZhY2UiLHQuc3RydWN0PSJzdHJ1Y3QiLHQudHlwZVBhcmFtZXRlcj0idHlwZVBhcmFtZXRlciIsdC5wYXJhbWV0ZXI9InBhcmFtZXRlciIsdC52YXJpYWJsZT0idmFyaWFibGUiLHQucHJvcGVydHk9InByb3BlcnR5Iix0LmVudW1NZW1iZXI9ImVudW1NZW1iZXIiLHQuZXZlbnQ9ImV2ZW50Iix0LmZ1bmN0aW9uPSJmdW5jdGlvbiIsdC5tZXRob2Q9Im1ldGhvZCIsdC5tYWNybz0ibWFjcm8iLHQua2V5d29yZD0ia2V5d29yZCIsdC5tb2RpZmllcj0ibW9kaWZpZXIiLHQuY29tbWVudD0iY29tbWVudCIsdC5zdHJpbmc9InN0cmluZyIsdC5udW1iZXI9Im51bWJlciIsdC5yZWdleHA9InJlZ2V4cCIsdC5vcGVyYXRvcj0ib3BlcmF0b3IiLHQuZGVjb3JhdG9yPSJkZWNvcmF0b3IifSkoaGxlfHwoaGxlPXt9KSk7KGZ1bmN0aW9uKHQpe3QuZGVjbGFyYXRpb249ImRlY2xhcmF0aW9uIix0LmRlZmluaXRpb249ImRlZmluaXRpb24iLHQucmVhZG9ubHk9InJlYWRvbmx5Iix0LnN0YXRpYz0ic3RhdGljIix0LmRlcHJlY2F0ZWQ9ImRlcHJlY2F0ZWQiLHQuYWJzdHJhY3Q9ImFic3RyYWN0Iix0LmFzeW5jPSJhc3luYyIsdC5tb2RpZmljYXRpb249Im1vZGlmaWNhdGlvbiIsdC5kb2N1bWVudGF0aW9uPSJkb2N1bWVudGF0aW9uIix0LmRlZmF1bHRMaWJyYXJ5PSJkZWZhdWx0TGlicmFyeSJ9KShmbGV8fChmbGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyKXtsZXQgbj1yO3JldHVybiBGZS5vYmplY3RMaXRlcmFsKG4pJiYobi5yZXN1bHRJZD09PXZvaWQgMHx8dHlwZW9mIG4ucmVzdWx0SWQ9PSJzdHJpbmciKSYmQXJyYXkuaXNBcnJheShuLmRhdGEpJiYobi5kYXRhLmxlbmd0aD09PTB8fHR5cGVvZiBuLmRhdGFbMF09PSJudW1iZXIiKX1vKGUsImlzIiksdC5pcz1lfSkoZGxlfHwoZGxlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpKXtyZXR1cm57cmFuZ2U6bix0ZXh0Oml9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIGkhPW51bGwmJlByLmlzKGkucmFuZ2UpJiZGZS5zdHJpbmcoaS50ZXh0KX1vKHIsImlzIiksdC5pcz1yfSkocGxlfHwocGxlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpLGEpe3JldHVybntyYW5nZTpuLHZhcmlhYmxlTmFtZTppLGNhc2VTZW5zaXRpdmVMb29rdXA6YX19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gaSE9bnVsbCYmUHIuaXMoaS5yYW5nZSkmJkZlLmJvb2xlYW4oaS5jYXNlU2Vuc2l0aXZlTG9va3VwKSYmKEZlLnN0cmluZyhpLnZhcmlhYmxlTmFtZSl8fGkudmFyaWFibGVOYW1lPT09dm9pZCAwKX1vKHIsImlzIiksdC5pcz1yfSkobWxlfHwobWxlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpKXtyZXR1cm57cmFuZ2U6bixleHByZXNzaW9uOml9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIGkhPW51bGwmJlByLmlzKGkucmFuZ2UpJiYoRmUuc3RyaW5nKGkuZXhwcmVzc2lvbil8fGkuZXhwcmVzc2lvbj09PXZvaWQgMCl9byhyLCJpcyIpLHQuaXM9cn0pKGdsZXx8KGdsZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSl7cmV0dXJue2ZyYW1lSWQ6bixzdG9wcGVkTG9jYXRpb246aX19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gRmUuZGVmaW5lZChpKSYmUHIuaXMobi5zdG9wcGVkTG9jYXRpb24pfW8ociwiaXMiKSx0LmlzPXJ9KSh5bGV8fCh5bGU9e30pKTsoZnVuY3Rpb24odCl7dC5UeXBlPTEsdC5QYXJhbWV0ZXI9MjtmdW5jdGlvbiBlKHIpe3JldHVybiByPT09MXx8cj09PTJ9byhlLCJpcyIpLHQuaXM9ZX0pKGZNfHwoZk09e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuKXtyZXR1cm57dmFsdWU6bn19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gRmUub2JqZWN0TGl0ZXJhbChpKSYmKGkudG9vbHRpcD09PXZvaWQgMHx8RmUuc3RyaW5nKGkudG9vbHRpcCl8fEV4LmlzKGkudG9vbHRpcCkpJiYoaS5sb2NhdGlvbj09PXZvaWQgMHx8ZkUuaXMoaS5sb2NhdGlvbikpJiYoaS5jb21tYW5kPT09dm9pZCAwfHxyMS5pcyhpLmNvbW1hbmQpKX1vKHIsImlzIiksdC5pcz1yfSkoZE18fChkTT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSxhKXtsZXQgcz17cG9zaXRpb246bixsYWJlbDppfTtyZXR1cm4gYSE9PXZvaWQgMCYmKHMua2luZD1hKSxzfW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIEZlLm9iamVjdExpdGVyYWwoaSkmJmpyLmlzKGkucG9zaXRpb24pJiYoRmUuc3RyaW5nKGkubGFiZWwpfHxGZS50eXBlZEFycmF5KGkubGFiZWwsZE0uaXMpKSYmKGkua2luZD09PXZvaWQgMHx8Zk0uaXMoaS5raW5kKSkmJmkudGV4dEVkaXRzPT09dm9pZCAwfHxGZS50eXBlZEFycmF5KGkudGV4dEVkaXRzLG4xLmlzKSYmKGkudG9vbHRpcD09PXZvaWQgMHx8RmUuc3RyaW5nKGkudG9vbHRpcCl8fEV4LmlzKGkudG9vbHRpcCkpJiYoaS5wYWRkaW5nTGVmdD09PXZvaWQgMHx8RmUuYm9vbGVhbihpLnBhZGRpbmdMZWZ0KSkmJihpLnBhZGRpbmdSaWdodD09PXZvaWQgMHx8RmUuYm9vbGVhbihpLnBhZGRpbmdSaWdodCkpfW8ociwiaXMiKSx0LmlzPXJ9KSh2bGV8fCh2bGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyKXtyZXR1cm57a2luZDoic25pcHBldCIsdmFsdWU6cn19byhlLCJjcmVhdGVTbmlwcGV0IiksdC5jcmVhdGVTbmlwcGV0PWV9KSh4bGV8fCh4bGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyLG4saSxhKXtyZXR1cm57aW5zZXJ0VGV4dDpyLGZpbHRlclRleHQ6bixyYW5nZTppLGNvbW1hbmQ6YX19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lfSkoYmxlfHwoYmxlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUocil7cmV0dXJue2l0ZW1zOnJ9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZX0pKHdsZXx8KHdsZT17fSkpOyhmdW5jdGlvbih0KXt0Lkludm9rZWQ9MCx0LkF1dG9tYXRpYz0xfSkoVGxlfHwoVGxlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUocixuKXtyZXR1cm57cmFuZ2U6cix0ZXh0Om59fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZX0pKGtsZXx8KGtsZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHIsbil7cmV0dXJue3RyaWdnZXJLaW5kOnIsc2VsZWN0ZWRDb21wbGV0aW9uSW5mbzpufX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWV9KShFbGV8fChFbGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyKXtsZXQgbj1yO3JldHVybiBGZS5vYmplY3RMaXRlcmFsKG4pJiZ0TS5pcyhuLnVyaSkmJkZlLnN0cmluZyhuLm5hbWUpfW8oZSwiaXMiKSx0LmlzPWV9KShTbGV8fChTbGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShhLHMsbCx1KXtyZXR1cm4gbmV3IHBNKGEscyxsLHUpfW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKGEpe2xldCBzPWE7cmV0dXJuISEoRmUuZGVmaW5lZChzKSYmRmUuc3RyaW5nKHMudXJpKSYmKEZlLnVuZGVmaW5lZChzLmxhbmd1YWdlSWQpfHxGZS5zdHJpbmcocy5sYW5ndWFnZUlkKSkmJkZlLnVpbnRlZ2VyKHMubGluZUNvdW50KSYmRmUuZnVuYyhzLmdldFRleHQpJiZGZS5mdW5jKHMucG9zaXRpb25BdCkmJkZlLmZ1bmMocy5vZmZzZXRBdCkpfW8ociwiaXMiKSx0LmlzPXI7ZnVuY3Rpb24gbihhLHMpe2xldCBsPWEuZ2V0VGV4dCgpLHU9aShzLChmLGQpPT57bGV0IHA9Zi5yYW5nZS5zdGFydC5saW5lLWQucmFuZ2Uuc3RhcnQubGluZTtyZXR1cm4gcD09PTA/Zi5yYW5nZS5zdGFydC5jaGFyYWN0ZXItZC5yYW5nZS5zdGFydC5jaGFyYWN0ZXI6cH0pLGg9bC5sZW5ndGg7Zm9yKGxldCBmPXUubGVuZ3RoLTE7Zj49MDtmLS0pe2xldCBkPXVbZl0scD1hLm9mZnNldEF0KGQucmFuZ2Uuc3RhcnQpLG09YS5vZmZzZXRBdChkLnJhbmdlLmVuZCk7aWYobTw9aClsPWwuc3Vic3RyaW5nKDAscCkrZC5uZXdUZXh0K2wuc3Vic3RyaW5nKG0sbC5sZW5ndGgpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJPdmVybGFwcGluZyBlZGl0Iik7aD1wfXJldHVybiBsfW8obiwiYXBwbHlFZGl0cyIpLHQuYXBwbHlFZGl0cz1uO2Z1bmN0aW9uIGkoYSxzKXtpZihhLmxlbmd0aDw9MSlyZXR1cm4gYTtsZXQgbD1hLmxlbmd0aC8yfDAsdT1hLnNsaWNlKDAsbCksaD1hLnNsaWNlKGwpO2kodSxzKSxpKGgscyk7bGV0IGY9MCxkPTAscD0wO2Zvcig7Zjx1Lmxlbmd0aCYmZDxoLmxlbmd0aDspcyh1W2ZdLGhbZF0pPD0wP2FbcCsrXT11W2YrK106YVtwKytdPWhbZCsrXTtmb3IoO2Y8dS5sZW5ndGg7KWFbcCsrXT11W2YrK107Zm9yKDtkPGgubGVuZ3RoOylhW3ArK109aFtkKytdO3JldHVybiBhfW8oaSwibWVyZ2VTb3J0Iil9KShDbGV8fChDbGU9e30pKTtwTT1jbGFzc3tzdGF0aWN7byh0aGlzLCJGdWxsVGV4dERvY3VtZW50Iil9Y29uc3RydWN0b3IoZSxyLG4saSl7dGhpcy5fdXJpPWUsdGhpcy5fbGFuZ3VhZ2VJZD1yLHRoaXMuX3ZlcnNpb249bix0aGlzLl9jb250ZW50PWksdGhpcy5fbGluZU9mZnNldHM9dm9pZCAwfWdldCB1cmkoKXtyZXR1cm4gdGhpcy5fdXJpfWdldCBsYW5ndWFnZUlkKCl7cmV0dXJuIHRoaXMuX2xhbmd1YWdlSWR9Z2V0IHZlcnNpb24oKXtyZXR1cm4gdGhpcy5fdmVyc2lvbn1nZXRUZXh0KGUpe2lmKGUpe2xldCByPXRoaXMub2Zmc2V0QXQoZS5zdGFydCksbj10aGlzLm9mZnNldEF0KGUuZW5kKTtyZXR1cm4gdGhpcy5fY29udGVudC5zdWJzdHJpbmcocixuKX1yZXR1cm4gdGhpcy5fY29udGVudH11cGRhdGUoZSxyKXt0aGlzLl9jb250ZW50PWUudGV4dCx0aGlzLl92ZXJzaW9uPXIsdGhpcy5fbGluZU9mZnNldHM9dm9pZCAwfWdldExpbmVPZmZzZXRzKCl7aWYodGhpcy5fbGluZU9mZnNldHM9PT12b2lkIDApe2xldCBlPVtdLHI9dGhpcy5fY29udGVudCxuPSEwO2ZvcihsZXQgaT0wO2k8ci5sZW5ndGg7aSsrKXtuJiYoZS5wdXNoKGkpLG49ITEpO2xldCBhPXIuY2hhckF0KGkpO249YT09PSJcciJ8fGE9PT1gCmAsYT09PSJcciImJmkrMTxyLmxlbmd0aCYmci5jaGFyQXQoaSsxKT09PWAKYCYmaSsrfW4mJnIubGVuZ3RoPjAmJmUucHVzaChyLmxlbmd0aCksdGhpcy5fbGluZU9mZnNldHM9ZX1yZXR1cm4gdGhpcy5fbGluZU9mZnNldHN9cG9zaXRpb25BdChlKXtlPU1hdGgubWF4KE1hdGgubWluKGUsdGhpcy5fY29udGVudC5sZW5ndGgpLDApO2xldCByPXRoaXMuZ2V0TGluZU9mZnNldHMoKSxuPTAsaT1yLmxlbmd0aDtpZihpPT09MClyZXR1cm4ganIuY3JlYXRlKDAsZSk7Zm9yKDtuPGk7KXtsZXQgcz1NYXRoLmZsb29yKChuK2kpLzIpO3Jbc10+ZT9pPXM6bj1zKzF9bGV0IGE9bi0xO3JldHVybiBqci5jcmVhdGUoYSxlLXJbYV0pfW9mZnNldEF0KGUpe2xldCByPXRoaXMuZ2V0TGluZU9mZnNldHMoKTtpZihlLmxpbmU+PXIubGVuZ3RoKXJldHVybiB0aGlzLl9jb250ZW50Lmxlbmd0aDtpZihlLmxpbmU8MClyZXR1cm4gMDtsZXQgbj1yW2UubGluZV0saT1lLmxpbmUrMTxyLmxlbmd0aD9yW2UubGluZSsxXTp0aGlzLl9jb250ZW50Lmxlbmd0aDtyZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4obitlLmNoYXJhY3RlcixpKSxuKX1nZXQgbGluZUNvdW50KCl7cmV0dXJuIHRoaXMuZ2V0TGluZU9mZnNldHMoKS5sZW5ndGh9fTsoZnVuY3Rpb24odCl7bGV0IGU9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztmdW5jdGlvbiByKG0pe3JldHVybiB0eXBlb2YgbTwidSJ9byhyLCJkZWZpbmVkIiksdC5kZWZpbmVkPXI7ZnVuY3Rpb24gbihtKXtyZXR1cm4gdHlwZW9mIG0+InUifW8obiwidW5kZWZpbmVkIiksdC51bmRlZmluZWQ9bjtmdW5jdGlvbiBpKG0pe3JldHVybiBtPT09ITB8fG09PT0hMX1vKGksImJvb2xlYW4iKSx0LmJvb2xlYW49aTtmdW5jdGlvbiBhKG0pe3JldHVybiBlLmNhbGwobSk9PT0iW29iamVjdCBTdHJpbmddIn1vKGEsInN0cmluZyIpLHQuc3RyaW5nPWE7ZnVuY3Rpb24gcyhtKXtyZXR1cm4gZS5jYWxsKG0pPT09IltvYmplY3QgTnVtYmVyXSJ9byhzLCJudW1iZXIiKSx0Lm51bWJlcj1zO2Z1bmN0aW9uIGwobSxnLHkpe3JldHVybiBlLmNhbGwobSk9PT0iW29iamVjdCBOdW1iZXJdIiYmZzw9bSYmbTw9eX1vKGwsIm51bWJlclJhbmdlIiksdC5udW1iZXJSYW5nZT1sO2Z1bmN0aW9uIHUobSl7cmV0dXJuIGUuY2FsbChtKT09PSJbb2JqZWN0IE51bWJlcl0iJiYtMjE0NzQ4MzY0ODw9bSYmbTw9MjE0NzQ4MzY0N31vKHUsImludGVnZXIiKSx0LmludGVnZXI9dTtmdW5jdGlvbiBoKG0pe3JldHVybiBlLmNhbGwobSk9PT0iW29iamVjdCBOdW1iZXJdIiYmMDw9bSYmbTw9MjE0NzQ4MzY0N31vKGgsInVpbnRlZ2VyIiksdC51aW50ZWdlcj1oO2Z1bmN0aW9uIGYobSl7cmV0dXJuIGUuY2FsbChtKT09PSJbb2JqZWN0IEZ1bmN0aW9uXSJ9byhmLCJmdW5jIiksdC5mdW5jPWY7ZnVuY3Rpb24gZChtKXtyZXR1cm4gbSE9PW51bGwmJnR5cGVvZiBtPT0ib2JqZWN0In1vKGQsIm9iamVjdExpdGVyYWwiKSx0Lm9iamVjdExpdGVyYWw9ZDtmdW5jdGlvbiBwKG0sZyl7cmV0dXJuIEFycmF5LmlzQXJyYXkobSkmJm0uZXZlcnkoZyl9byhwLCJ0eXBlZEFycmF5IiksdC50eXBlZEFycmF5PXB9KShGZXx8KEZlPXt9KSl9KTt2YXIgU3gsQ3gscHAsbXAsZ00sYTEsZ0U9TigoKT0+eyJ1c2Ugc3RyaWN0IjttTSgpO05sKCk7U3g9Y2xhc3N7c3RhdGlje28odGhpcywiQ3N0Tm9kZUJ1aWxkZXIiKX1jb25zdHJ1Y3Rvcigpe3RoaXMubm9kZVN0YWNrPVtdfWdldCBjdXJyZW50KCl7dmFyIGU7cmV0dXJuKGU9dGhpcy5ub2RlU3RhY2tbdGhpcy5ub2RlU3RhY2subGVuZ3RoLTFdKSE9PW51bGwmJmUhPT12b2lkIDA/ZTp0aGlzLnJvb3ROb2RlfWJ1aWxkUm9vdE5vZGUoZSl7cmV0dXJuIHRoaXMucm9vdE5vZGU9bmV3IGExKGUpLHRoaXMucm9vdE5vZGUucm9vdD10aGlzLnJvb3ROb2RlLHRoaXMubm9kZVN0YWNrPVt0aGlzLnJvb3ROb2RlXSx0aGlzLnJvb3ROb2RlfWJ1aWxkQ29tcG9zaXRlTm9kZShlKXtsZXQgcj1uZXcgbXA7cmV0dXJuIHIuZ3JhbW1hclNvdXJjZT1lLHIucm9vdD10aGlzLnJvb3ROb2RlLHRoaXMuY3VycmVudC5jb250ZW50LnB1c2gociksdGhpcy5ub2RlU3RhY2sucHVzaChyKSxyfWJ1aWxkTGVhZk5vZGUoZSxyKXtsZXQgbj1uZXcgcHAoZS5zdGFydE9mZnNldCxlLmltYWdlLmxlbmd0aCxHbShlKSxlLnRva2VuVHlwZSwhcik7cmV0dXJuIG4uZ3JhbW1hclNvdXJjZT1yLG4ucm9vdD10aGlzLnJvb3ROb2RlLHRoaXMuY3VycmVudC5jb250ZW50LnB1c2gobiksbn1yZW1vdmVOb2RlKGUpe2xldCByPWUuY29udGFpbmVyO2lmKHIpe2xldCBuPXIuY29udGVudC5pbmRleE9mKGUpO24+PTAmJnIuY29udGVudC5zcGxpY2UobiwxKX19YWRkSGlkZGVuTm9kZXMoZSl7bGV0IHI9W107Zm9yKGxldCBhIG9mIGUpe2xldCBzPW5ldyBwcChhLnN0YXJ0T2Zmc2V0LGEuaW1hZ2UubGVuZ3RoLEdtKGEpLGEudG9rZW5UeXBlLCEwKTtzLnJvb3Q9dGhpcy5yb290Tm9kZSxyLnB1c2gocyl9bGV0IG49dGhpcy5jdXJyZW50LGk9ITE7aWYobi5jb250ZW50Lmxlbmd0aD4wKXtuLmNvbnRlbnQucHVzaCguLi5yKTtyZXR1cm59Zm9yKDtuLmNvbnRhaW5lcjspe2xldCBhPW4uY29udGFpbmVyLmNvbnRlbnQuaW5kZXhPZihuKTtpZihhPjApe24uY29udGFpbmVyLmNvbnRlbnQuc3BsaWNlKGEsMCwuLi5yKSxpPSEwO2JyZWFrfW49bi5jb250YWluZXJ9aXx8dGhpcy5yb290Tm9kZS5jb250ZW50LnVuc2hpZnQoLi4ucil9Y29uc3RydWN0KGUpe2xldCByPXRoaXMuY3VycmVudDt0eXBlb2YgZS4kdHlwZT09InN0cmluZyImJih0aGlzLmN1cnJlbnQuYXN0Tm9kZT1lKSxlLiRjc3ROb2RlPXI7bGV0IG49dGhpcy5ub2RlU3RhY2sucG9wKCk7bj8uY29udGVudC5sZW5ndGg9PT0wJiZ0aGlzLnJlbW92ZU5vZGUobil9fSxDeD1jbGFzc3tzdGF0aWN7byh0aGlzLCJBYnN0cmFjdENzdE5vZGUiKX1nZXQgcGFyZW50KCl7cmV0dXJuIHRoaXMuY29udGFpbmVyfWdldCBmZWF0dXJlKCl7cmV0dXJuIHRoaXMuZ3JhbW1hclNvdXJjZX1nZXQgaGlkZGVuKCl7cmV0dXJuITF9Z2V0IGFzdE5vZGUoKXt2YXIgZSxyO2xldCBuPXR5cGVvZigoZT10aGlzLl9hc3ROb2RlKT09PW51bGx8fGU9PT12b2lkIDA/dm9pZCAwOmUuJHR5cGUpPT0ic3RyaW5nIj90aGlzLl9hc3ROb2RlOihyPXRoaXMuY29udGFpbmVyKT09PW51bGx8fHI9PT12b2lkIDA/dm9pZCAwOnIuYXN0Tm9kZTtpZighbil0aHJvdyBuZXcgRXJyb3IoIlRoaXMgbm9kZSBoYXMgbm8gYXNzb2NpYXRlZCBBU1QgZWxlbWVudCIpO3JldHVybiBufXNldCBhc3ROb2RlKGUpe3RoaXMuX2FzdE5vZGU9ZX1nZXQgZWxlbWVudCgpe3JldHVybiB0aGlzLmFzdE5vZGV9Z2V0IHRleHQoKXtyZXR1cm4gdGhpcy5yb290LmZ1bGxUZXh0LnN1YnN0cmluZyh0aGlzLm9mZnNldCx0aGlzLmVuZCl9fSxwcD1jbGFzcyBleHRlbmRzIEN4e3N0YXRpY3tvKHRoaXMsIkxlYWZDc3ROb2RlSW1wbCIpfWdldCBvZmZzZXQoKXtyZXR1cm4gdGhpcy5fb2Zmc2V0fWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5fbGVuZ3RofWdldCBlbmQoKXtyZXR1cm4gdGhpcy5fb2Zmc2V0K3RoaXMuX2xlbmd0aH1nZXQgaGlkZGVuKCl7cmV0dXJuIHRoaXMuX2hpZGRlbn1nZXQgdG9rZW5UeXBlKCl7cmV0dXJuIHRoaXMuX3Rva2VuVHlwZX1nZXQgcmFuZ2UoKXtyZXR1cm4gdGhpcy5fcmFuZ2V9Y29uc3RydWN0b3IoZSxyLG4saSxhPSExKXtzdXBlcigpLHRoaXMuX2hpZGRlbj1hLHRoaXMuX29mZnNldD1lLHRoaXMuX3Rva2VuVHlwZT1pLHRoaXMuX2xlbmd0aD1yLHRoaXMuX3JhbmdlPW59fSxtcD1jbGFzcyBleHRlbmRzIEN4e3N0YXRpY3tvKHRoaXMsIkNvbXBvc2l0ZUNzdE5vZGVJbXBsIil9Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29udGVudD1uZXcgZ00odGhpcyl9Z2V0IGNoaWxkcmVuKCl7cmV0dXJuIHRoaXMuY29udGVudH1nZXQgb2Zmc2V0KCl7dmFyIGUscjtyZXR1cm4ocj0oZT10aGlzLmZpcnN0Tm9uSGlkZGVuTm9kZSk9PT1udWxsfHxlPT09dm9pZCAwP3ZvaWQgMDplLm9mZnNldCkhPT1udWxsJiZyIT09dm9pZCAwP3I6MH1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuZW5kLXRoaXMub2Zmc2V0fWdldCBlbmQoKXt2YXIgZSxyO3JldHVybihyPShlPXRoaXMubGFzdE5vbkhpZGRlbk5vZGUpPT09bnVsbHx8ZT09PXZvaWQgMD92b2lkIDA6ZS5lbmQpIT09bnVsbCYmciE9PXZvaWQgMD9yOjB9Z2V0IHJhbmdlKCl7bGV0IGU9dGhpcy5maXJzdE5vbkhpZGRlbk5vZGUscj10aGlzLmxhc3ROb25IaWRkZW5Ob2RlO2lmKGUmJnIpe2lmKHRoaXMuX3JhbmdlQ2FjaGU9PT12b2lkIDApe2xldHtyYW5nZTpufT1lLHtyYW5nZTppfT1yO3RoaXMuX3JhbmdlQ2FjaGU9e3N0YXJ0Om4uc3RhcnQsZW5kOmkuZW5kLmxpbmU8bi5zdGFydC5saW5lP24uc3RhcnQ6aS5lbmR9fXJldHVybiB0aGlzLl9yYW5nZUNhY2hlfWVsc2UgcmV0dXJue3N0YXJ0OmpyLmNyZWF0ZSgwLDApLGVuZDpqci5jcmVhdGUoMCwwKX19Z2V0IGZpcnN0Tm9uSGlkZGVuTm9kZSgpe2ZvcihsZXQgZSBvZiB0aGlzLmNvbnRlbnQpaWYoIWUuaGlkZGVuKXJldHVybiBlO3JldHVybiB0aGlzLmNvbnRlbnRbMF19Z2V0IGxhc3ROb25IaWRkZW5Ob2RlKCl7Zm9yKGxldCBlPXRoaXMuY29udGVudC5sZW5ndGgtMTtlPj0wO2UtLSl7bGV0IHI9dGhpcy5jb250ZW50W2VdO2lmKCFyLmhpZGRlbilyZXR1cm4gcn1yZXR1cm4gdGhpcy5jb250ZW50W3RoaXMuY29udGVudC5sZW5ndGgtMV19fSxnTT1jbGFzcyB0IGV4dGVuZHMgQXJyYXl7c3RhdGlje28odGhpcywiQ3N0Tm9kZUNvbnRhaW5lciIpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5wYXJlbnQ9ZSxPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyx0LnByb3RvdHlwZSl9cHVzaCguLi5lKXtyZXR1cm4gdGhpcy5hZGRQYXJlbnRzKGUpLHN1cGVyLnB1c2goLi4uZSl9dW5zaGlmdCguLi5lKXtyZXR1cm4gdGhpcy5hZGRQYXJlbnRzKGUpLHN1cGVyLnVuc2hpZnQoLi4uZSl9c3BsaWNlKGUsciwuLi5uKXtyZXR1cm4gdGhpcy5hZGRQYXJlbnRzKG4pLHN1cGVyLnNwbGljZShlLHIsLi4ubil9YWRkUGFyZW50cyhlKXtmb3IobGV0IHIgb2YgZSlyLmNvbnRhaW5lcj10aGlzLnBhcmVudH19LGExPWNsYXNzIGV4dGVuZHMgbXB7c3RhdGlje28odGhpcywiUm9vdENzdE5vZGVJbXBsIil9Z2V0IHRleHQoKXtyZXR1cm4gdGhpcy5fdGV4dC5zdWJzdHJpbmcodGhpcy5vZmZzZXQsdGhpcy5lbmQpfWdldCBmdWxsVGV4dCgpe3JldHVybiB0aGlzLl90ZXh0fWNvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5fdGV4dD0iIix0aGlzLl90ZXh0PWU/PyIifX19KTtmdW5jdGlvbiB5TSh0KXtyZXR1cm4gdC4kdHlwZT09PXlFfXZhciB5RSxBbGUsX2xlLEF4LF94LHZFLHMxLER4LEpCZSx2TSxMeD1OKCgpPT57InVzZSBzdHJpY3QiO2NmKCk7U29lKCk7UmMoKTtPbCgpO2lzKCk7Z0UoKTt5RT1TeW1ib2woIkRhdGF0eXBlIik7byh5TSwiaXNEYXRhVHlwZU5vZGUiKTtBbGU9Ilx1MjAwQiIsX2xlPW8odD0+dC5lbmRzV2l0aChBbGUpP3Q6dCtBbGUsIndpdGhSdWxlU3VmZml4IiksQXg9Y2xhc3N7c3RhdGlje28odGhpcywiQWJzdHJhY3RMYW5naXVtUGFyc2VyIil9Y29uc3RydWN0b3IoZSl7dGhpcy5fdW5vcmRlcmVkR3JvdXBzPW5ldyBNYXAsdGhpcy5hbGxSdWxlcz1uZXcgTWFwLHRoaXMubGV4ZXI9ZS5wYXJzZXIuTGV4ZXI7bGV0IHI9dGhpcy5sZXhlci5kZWZpbml0aW9uLG49ZS5MYW5ndWFnZU1ldGFEYXRhLm1vZGU9PT0icHJvZHVjdGlvbiI7dGhpcy53cmFwcGVyPW5ldyB2TShyLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlLnBhcnNlci5QYXJzZXJDb25maWcpLHtza2lwVmFsaWRhdGlvbnM6bixlcnJvck1lc3NhZ2VQcm92aWRlcjplLnBhcnNlci5QYXJzZXJFcnJvck1lc3NhZ2VQcm92aWRlcn0pKX1hbHRlcm5hdGl2ZXMoZSxyKXt0aGlzLndyYXBwZXIud3JhcE9yKGUscil9b3B0aW9uYWwoZSxyKXt0aGlzLndyYXBwZXIud3JhcE9wdGlvbihlLHIpfW1hbnkoZSxyKXt0aGlzLndyYXBwZXIud3JhcE1hbnkoZSxyKX1hdExlYXN0T25lKGUscil7dGhpcy53cmFwcGVyLndyYXBBdExlYXN0T25lKGUscil9Z2V0UnVsZShlKXtyZXR1cm4gdGhpcy5hbGxSdWxlcy5nZXQoZSl9aXNSZWNvcmRpbmcoKXtyZXR1cm4gdGhpcy53cmFwcGVyLklTX1JFQ09SRElOR31nZXQgdW5vcmRlcmVkR3JvdXBzKCl7cmV0dXJuIHRoaXMuX3Vub3JkZXJlZEdyb3Vwc31nZXRSdWxlU3RhY2soKXtyZXR1cm4gdGhpcy53cmFwcGVyLlJVTEVfU1RBQ0t9ZmluYWxpemUoKXt0aGlzLndyYXBwZXIud3JhcFNlbGZBbmFseXNpcygpfX0sX3g9Y2xhc3MgZXh0ZW5kcyBBeHtzdGF0aWN7byh0aGlzLCJMYW5naXVtUGFyc2VyIil9Z2V0IGN1cnJlbnQoKXtyZXR1cm4gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXX1jb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx0aGlzLm5vZGVCdWlsZGVyPW5ldyBTeCx0aGlzLnN0YWNrPVtdLHRoaXMuYXNzaWdubWVudE1hcD1uZXcgTWFwLHRoaXMubGlua2VyPWUucmVmZXJlbmNlcy5MaW5rZXIsdGhpcy5jb252ZXJ0ZXI9ZS5wYXJzZXIuVmFsdWVDb252ZXJ0ZXIsdGhpcy5hc3RSZWZsZWN0aW9uPWUuc2hhcmVkLkFzdFJlZmxlY3Rpb259cnVsZShlLHIpe2xldCBuPXRoaXMuY29tcHV0ZVJ1bGVUeXBlKGUpLGk9dGhpcy53cmFwcGVyLkRFRklORV9SVUxFKF9sZShlLm5hbWUpLHRoaXMuc3RhcnRJbXBsZW1lbnRhdGlvbihuLHIpLmJpbmQodGhpcykpO3JldHVybiB0aGlzLmFsbFJ1bGVzLnNldChlLm5hbWUsaSksZS5lbnRyeSYmKHRoaXMubWFpblJ1bGU9aSksaX1jb21wdXRlUnVsZVR5cGUoZSl7aWYoIWUuZnJhZ21lbnQpe2lmKFoyKGUpKXJldHVybiB5RTt7bGV0IHI9UmcoZSk7cmV0dXJuIHI/P2UubmFtZX19fXBhcnNlKGUscj17fSl7dGhpcy5ub2RlQnVpbGRlci5idWlsZFJvb3ROb2RlKGUpO2xldCBuPXRoaXMubGV4ZXJSZXN1bHQ9dGhpcy5sZXhlci50b2tlbml6ZShlKTt0aGlzLndyYXBwZXIuaW5wdXQ9bi50b2tlbnM7bGV0IGk9ci5ydWxlP3RoaXMuYWxsUnVsZXMuZ2V0KHIucnVsZSk6dGhpcy5tYWluUnVsZTtpZighaSl0aHJvdyBuZXcgRXJyb3Ioci5ydWxlP2BObyBydWxlIGZvdW5kIHdpdGggbmFtZSAnJHtyLnJ1bGV9J2A6Ik5vIG1haW4gcnVsZSBhdmFpbGFibGUuIik7bGV0IGE9aS5jYWxsKHRoaXMud3JhcHBlcix7fSk7cmV0dXJuIHRoaXMubm9kZUJ1aWxkZXIuYWRkSGlkZGVuTm9kZXMobi5oaWRkZW4pLHRoaXMudW5vcmRlcmVkR3JvdXBzLmNsZWFyKCksdGhpcy5sZXhlclJlc3VsdD12b2lkIDAse3ZhbHVlOmEsbGV4ZXJFcnJvcnM6bi5lcnJvcnMsbGV4ZXJSZXBvcnQ6bi5yZXBvcnQscGFyc2VyRXJyb3JzOnRoaXMud3JhcHBlci5lcnJvcnN9fXN0YXJ0SW1wbGVtZW50YXRpb24oZSxyKXtyZXR1cm4gbj0+e2xldCBpPSF0aGlzLmlzUmVjb3JkaW5nKCkmJmUhPT12b2lkIDA7aWYoaSl7bGV0IHM9eyR0eXBlOmV9O3RoaXMuc3RhY2sucHVzaChzKSxlPT09eUUmJihzLnZhbHVlPSIiKX1sZXQgYTt0cnl7YT1yKG4pfWNhdGNoe2E9dm9pZCAwfXJldHVybiBhPT09dm9pZCAwJiZpJiYoYT10aGlzLmNvbnN0cnVjdCgpKSxhfX1leHRyYWN0SGlkZGVuVG9rZW5zKGUpe2xldCByPXRoaXMubGV4ZXJSZXN1bHQuaGlkZGVuO2lmKCFyLmxlbmd0aClyZXR1cm5bXTtsZXQgbj1lLnN0YXJ0T2Zmc2V0O2ZvcihsZXQgaT0wO2k8ci5sZW5ndGg7aSsrKWlmKHJbaV0uc3RhcnRPZmZzZXQ+bilyZXR1cm4gci5zcGxpY2UoMCxpKTtyZXR1cm4gci5zcGxpY2UoMCxyLmxlbmd0aCl9Y29uc3VtZShlLHIsbil7bGV0IGk9dGhpcy53cmFwcGVyLndyYXBDb25zdW1lKGUscik7aWYoIXRoaXMuaXNSZWNvcmRpbmcoKSYmdGhpcy5pc1ZhbGlkVG9rZW4oaSkpe2xldCBhPXRoaXMuZXh0cmFjdEhpZGRlblRva2VucyhpKTt0aGlzLm5vZGVCdWlsZGVyLmFkZEhpZGRlbk5vZGVzKGEpO2xldCBzPXRoaXMubm9kZUJ1aWxkZXIuYnVpbGRMZWFmTm9kZShpLG4pLHthc3NpZ25tZW50OmwsaXNDcm9zc1JlZjp1fT10aGlzLmdldEFzc2lnbm1lbnQobiksaD10aGlzLmN1cnJlbnQ7aWYobCl7bGV0IGY9SG8obik/aS5pbWFnZTp0aGlzLmNvbnZlcnRlci5jb252ZXJ0KGkuaW1hZ2Uscyk7dGhpcy5hc3NpZ24obC5vcGVyYXRvcixsLmZlYXR1cmUsZixzLHUpfWVsc2UgaWYoeU0oaCkpe2xldCBmPWkuaW1hZ2U7SG8obil8fChmPXRoaXMuY29udmVydGVyLmNvbnZlcnQoZixzKS50b1N0cmluZygpKSxoLnZhbHVlKz1mfX19aXNWYWxpZFRva2VuKGUpe3JldHVybiFlLmlzSW5zZXJ0ZWRJblJlY292ZXJ5JiYhaXNOYU4oZS5zdGFydE9mZnNldCkmJnR5cGVvZiBlLmVuZE9mZnNldD09Im51bWJlciImJiFpc05hTihlLmVuZE9mZnNldCl9c3VicnVsZShlLHIsbixpLGEpe2xldCBzOyF0aGlzLmlzUmVjb3JkaW5nKCkmJiFuJiYocz10aGlzLm5vZGVCdWlsZGVyLmJ1aWxkQ29tcG9zaXRlTm9kZShpKSk7bGV0IGw9dGhpcy53cmFwcGVyLndyYXBTdWJydWxlKGUscixhKTshdGhpcy5pc1JlY29yZGluZygpJiZzJiZzLmxlbmd0aD4wJiZ0aGlzLnBlcmZvcm1TdWJydWxlQXNzaWdubWVudChsLGkscyl9cGVyZm9ybVN1YnJ1bGVBc3NpZ25tZW50KGUscixuKXtsZXR7YXNzaWdubWVudDppLGlzQ3Jvc3NSZWY6YX09dGhpcy5nZXRBc3NpZ25tZW50KHIpO2lmKGkpdGhpcy5hc3NpZ24oaS5vcGVyYXRvcixpLmZlYXR1cmUsZSxuLGEpO2Vsc2UgaWYoIWkpe2xldCBzPXRoaXMuY3VycmVudDtpZih5TShzKSlzLnZhbHVlKz1lLnRvU3RyaW5nKCk7ZWxzZSBpZih0eXBlb2YgZT09Im9iamVjdCImJmUpe2xldCB1PXRoaXMuYXNzaWduV2l0aG91dE92ZXJyaWRlKGUscyk7dGhpcy5zdGFjay5wb3AoKSx0aGlzLnN0YWNrLnB1c2godSl9fX1hY3Rpb24oZSxyKXtpZighdGhpcy5pc1JlY29yZGluZygpKXtsZXQgbj10aGlzLmN1cnJlbnQ7aWYoci5mZWF0dXJlJiZyLm9wZXJhdG9yKXtuPXRoaXMuY29uc3RydWN0KCksdGhpcy5ub2RlQnVpbGRlci5yZW1vdmVOb2RlKG4uJGNzdE5vZGUpLHRoaXMubm9kZUJ1aWxkZXIuYnVpbGRDb21wb3NpdGVOb2RlKHIpLmNvbnRlbnQucHVzaChuLiRjc3ROb2RlKTtsZXQgYT17JHR5cGU6ZX07dGhpcy5zdGFjay5wdXNoKGEpLHRoaXMuYXNzaWduKHIub3BlcmF0b3Isci5mZWF0dXJlLG4sbi4kY3N0Tm9kZSwhMSl9ZWxzZSBuLiR0eXBlPWV9fWNvbnN0cnVjdCgpe2lmKHRoaXMuaXNSZWNvcmRpbmcoKSlyZXR1cm47bGV0IGU9dGhpcy5jdXJyZW50O3JldHVybiB2ayhlKSx0aGlzLm5vZGVCdWlsZGVyLmNvbnN0cnVjdChlKSx0aGlzLnN0YWNrLnBvcCgpLHlNKGUpP3RoaXMuY29udmVydGVyLmNvbnZlcnQoZS52YWx1ZSxlLiRjc3ROb2RlKTooWFIodGhpcy5hc3RSZWZsZWN0aW9uLGUpLGUpfWdldEFzc2lnbm1lbnQoZSl7aWYoIXRoaXMuYXNzaWdubWVudE1hcC5oYXMoZSkpe2xldCByPXRwKGUsTWwpO3RoaXMuYXNzaWdubWVudE1hcC5zZXQoZSx7YXNzaWdubWVudDpyLGlzQ3Jvc3NSZWY6cj9lcChyLnRlcm1pbmFsKTohMX0pfXJldHVybiB0aGlzLmFzc2lnbm1lbnRNYXAuZ2V0KGUpfWFzc2lnbihlLHIsbixpLGEpe2xldCBzPXRoaXMuY3VycmVudCxsO3N3aXRjaChhJiZ0eXBlb2Ygbj09InN0cmluZyI/bD10aGlzLmxpbmtlci5idWlsZFJlZmVyZW5jZShzLHIsaSxuKTpsPW4sZSl7Y2FzZSI9Ijp7c1tyXT1sO2JyZWFrfWNhc2UiPz0iOntzW3JdPSEwO2JyZWFrfWNhc2UiKz0iOkFycmF5LmlzQXJyYXkoc1tyXSl8fChzW3JdPVtdKSxzW3JdLnB1c2gobCl9fWFzc2lnbldpdGhvdXRPdmVycmlkZShlLHIpe2ZvcihsZXRbaSxhXW9mIE9iamVjdC5lbnRyaWVzKHIpKXtsZXQgcz1lW2ldO3M9PT12b2lkIDA/ZVtpXT1hOkFycmF5LmlzQXJyYXkocykmJkFycmF5LmlzQXJyYXkoYSkmJihhLnB1c2goLi4ucyksZVtpXT1hKX1sZXQgbj1lLiRjc3ROb2RlO3JldHVybiBuJiYobi5hc3ROb2RlPXZvaWQgMCxlLiRjc3ROb2RlPXZvaWQgMCksZX1nZXQgZGVmaW5pdGlvbkVycm9ycygpe3JldHVybiB0aGlzLndyYXBwZXIuZGVmaW5pdGlvbkVycm9yc319LHZFPWNsYXNze3N0YXRpY3tvKHRoaXMsIkFic3RyYWN0UGFyc2VyRXJyb3JNZXNzYWdlUHJvdmlkZXIiKX1idWlsZE1pc21hdGNoVG9rZW5NZXNzYWdlKGUpe3JldHVybiB6dS5idWlsZE1pc21hdGNoVG9rZW5NZXNzYWdlKGUpfWJ1aWxkTm90QWxsSW5wdXRQYXJzZWRNZXNzYWdlKGUpe3JldHVybiB6dS5idWlsZE5vdEFsbElucHV0UGFyc2VkTWVzc2FnZShlKX1idWlsZE5vVmlhYmxlQWx0TWVzc2FnZShlKXtyZXR1cm4genUuYnVpbGROb1ZpYWJsZUFsdE1lc3NhZ2UoZSl9YnVpbGRFYXJseUV4aXRNZXNzYWdlKGUpe3JldHVybiB6dS5idWlsZEVhcmx5RXhpdE1lc3NhZ2UoZSl9fSxzMT1jbGFzcyBleHRlbmRzIHZFe3N0YXRpY3tvKHRoaXMsIkxhbmdpdW1QYXJzZXJFcnJvck1lc3NhZ2VQcm92aWRlciIpfWJ1aWxkTWlzbWF0Y2hUb2tlbk1lc3NhZ2Uoe2V4cGVjdGVkOmUsYWN0dWFsOnJ9KXtyZXR1cm5gRXhwZWN0aW5nICR7ZS5MQUJFTD8iYCIrZS5MQUJFTCsiYCI6ZS5uYW1lLmVuZHNXaXRoKCI6S1ciKT9ga2V5d29yZCAnJHtlLm5hbWUuc3Vic3RyaW5nKDAsZS5uYW1lLmxlbmd0aC0zKX0nYDpgdG9rZW4gb2YgdHlwZSAnJHtlLm5hbWV9J2B9IGJ1dCBmb3VuZCBcYCR7ci5pbWFnZX1cYC5gfWJ1aWxkTm90QWxsSW5wdXRQYXJzZWRNZXNzYWdlKHtmaXJzdFJlZHVuZGFudDplfSl7cmV0dXJuYEV4cGVjdGluZyBlbmQgb2YgZmlsZSBidXQgZm91bmQgXGAke2UuaW1hZ2V9XGAuYH19LER4PWNsYXNzIGV4dGVuZHMgQXh7c3RhdGlje28odGhpcywiTGFuZ2l1bUNvbXBsZXRpb25QYXJzZXIiKX1jb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy50b2tlbnM9W10sdGhpcy5lbGVtZW50U3RhY2s9W10sdGhpcy5sYXN0RWxlbWVudFN0YWNrPVtdLHRoaXMubmV4dFRva2VuSW5kZXg9MCx0aGlzLnN0YWNrU2l6ZT0wfWFjdGlvbigpe31jb25zdHJ1Y3QoKXt9cGFyc2UoZSl7dGhpcy5yZXNldFN0YXRlKCk7bGV0IHI9dGhpcy5sZXhlci50b2tlbml6ZShlLHttb2RlOiJwYXJ0aWFsIn0pO3JldHVybiB0aGlzLnRva2Vucz1yLnRva2Vucyx0aGlzLndyYXBwZXIuaW5wdXQ9Wy4uLnRoaXMudG9rZW5zXSx0aGlzLm1haW5SdWxlLmNhbGwodGhpcy53cmFwcGVyLHt9KSx0aGlzLnVub3JkZXJlZEdyb3Vwcy5jbGVhcigpLHt0b2tlbnM6dGhpcy50b2tlbnMsZWxlbWVudFN0YWNrOlsuLi50aGlzLmxhc3RFbGVtZW50U3RhY2tdLHRva2VuSW5kZXg6dGhpcy5uZXh0VG9rZW5JbmRleH19cnVsZShlLHIpe2xldCBuPXRoaXMud3JhcHBlci5ERUZJTkVfUlVMRShfbGUoZS5uYW1lKSx0aGlzLnN0YXJ0SW1wbGVtZW50YXRpb24ocikuYmluZCh0aGlzKSk7cmV0dXJuIHRoaXMuYWxsUnVsZXMuc2V0KGUubmFtZSxuKSxlLmVudHJ5JiYodGhpcy5tYWluUnVsZT1uKSxufXJlc2V0U3RhdGUoKXt0aGlzLmVsZW1lbnRTdGFjaz1bXSx0aGlzLmxhc3RFbGVtZW50U3RhY2s9W10sdGhpcy5uZXh0VG9rZW5JbmRleD0wLHRoaXMuc3RhY2tTaXplPTB9c3RhcnRJbXBsZW1lbnRhdGlvbihlKXtyZXR1cm4gcj0+e2xldCBuPXRoaXMua2VlcFN0YWNrU2l6ZSgpO3RyeXtlKHIpfWZpbmFsbHl7dGhpcy5yZXNldFN0YWNrU2l6ZShuKX19fXJlbW92ZVVuZXhwZWN0ZWRFbGVtZW50cygpe3RoaXMuZWxlbWVudFN0YWNrLnNwbGljZSh0aGlzLnN0YWNrU2l6ZSl9a2VlcFN0YWNrU2l6ZSgpe2xldCBlPXRoaXMuZWxlbWVudFN0YWNrLmxlbmd0aDtyZXR1cm4gdGhpcy5zdGFja1NpemU9ZSxlfXJlc2V0U3RhY2tTaXplKGUpe3RoaXMucmVtb3ZlVW5leHBlY3RlZEVsZW1lbnRzKCksdGhpcy5zdGFja1NpemU9ZX1jb25zdW1lKGUscixuKXt0aGlzLndyYXBwZXIud3JhcENvbnN1bWUoZSxyKSx0aGlzLmlzUmVjb3JkaW5nKCl8fCh0aGlzLmxhc3RFbGVtZW50U3RhY2s9Wy4uLnRoaXMuZWxlbWVudFN0YWNrLG5dLHRoaXMubmV4dFRva2VuSW5kZXg9dGhpcy5jdXJySWR4KzEpfXN1YnJ1bGUoZSxyLG4saSxhKXt0aGlzLmJlZm9yZShpKSx0aGlzLndyYXBwZXIud3JhcFN1YnJ1bGUoZSxyLGEpLHRoaXMuYWZ0ZXIoaSl9YmVmb3JlKGUpe3RoaXMuaXNSZWNvcmRpbmcoKXx8dGhpcy5lbGVtZW50U3RhY2sucHVzaChlKX1hZnRlcihlKXtpZighdGhpcy5pc1JlY29yZGluZygpKXtsZXQgcj10aGlzLmVsZW1lbnRTdGFjay5sYXN0SW5kZXhPZihlKTtyPj0wJiZ0aGlzLmVsZW1lbnRTdGFjay5zcGxpY2Uocil9fWdldCBjdXJySWR4KCl7cmV0dXJuIHRoaXMud3JhcHBlci5jdXJySWR4fX0sSkJlPXtyZWNvdmVyeUVuYWJsZWQ6ITAsbm9kZUxvY2F0aW9uVHJhY2tpbmc6ImZ1bGwiLHNraXBWYWxpZGF0aW9uczohMCxlcnJvck1lc3NhZ2VQcm92aWRlcjpuZXcgczF9LHZNPWNsYXNzIGV4dGVuZHMgeHh7c3RhdGlje28odGhpcywiQ2hldnJvdGFpbldyYXBwZXIiKX1jb25zdHJ1Y3RvcihlLHIpe2xldCBuPXImJiJtYXhMb29rYWhlYWQiaW4gcjtzdXBlcihlLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LEpCZSkse2xvb2thaGVhZFN0cmF0ZWd5Om4/bmV3IEd1KHttYXhMb29rYWhlYWQ6ci5tYXhMb29rYWhlYWR9KTpuZXcga3goe2xvZ2dpbmc6ci5za2lwVmFsaWRhdGlvbnM/KCk9Pnt9OnZvaWQgMH0pfSkscikpfWdldCBJU19SRUNPUkRJTkcoKXtyZXR1cm4gdGhpcy5SRUNPUkRJTkdfUEhBU0V9REVGSU5FX1JVTEUoZSxyKXtyZXR1cm4gdGhpcy5SVUxFKGUscil9d3JhcFNlbGZBbmFseXNpcygpe3RoaXMucGVyZm9ybVNlbGZBbmFseXNpcygpfXdyYXBDb25zdW1lKGUscil7cmV0dXJuIHRoaXMuY29uc3VtZShlLHIpfXdyYXBTdWJydWxlKGUscixuKXtyZXR1cm4gdGhpcy5zdWJydWxlKGUscix7QVJHUzpbbl19KX13cmFwT3IoZSxyKXt0aGlzLm9yKGUscil9d3JhcE9wdGlvbihlLHIpe3RoaXMub3B0aW9uKGUscil9d3JhcE1hbnkoZSxyKXt0aGlzLm1hbnkoZSxyKX13cmFwQXRMZWFzdE9uZShlLHIpe3RoaXMuYXRMZWFzdE9uZShlLHIpfX19KTtmdW5jdGlvbiBSeCh0LGUscil7cmV0dXJuIGVGZSh7cGFyc2VyOmUsdG9rZW5zOnIscnVsZU5hbWVzOm5ldyBNYXB9LHQpLGV9ZnVuY3Rpb24gZUZlKHQsZSl7bGV0IHI9SzIoZSwhMSksbj1lbihlLnJ1bGVzKS5maWx0ZXIoT2EpLmZpbHRlcihpPT5yLmhhcyhpKSk7Zm9yKGxldCBpIG9mIG4pe2xldCBhPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7Y29uc3VtZToxLG9wdGlvbmFsOjEsc3VicnVsZToxLG1hbnk6MSxvcjoxfSk7dC5wYXJzZXIucnVsZShpLGdwKGEsaS5kZWZpbml0aW9uKSl9fWZ1bmN0aW9uIGdwKHQsZSxyPSExKXtsZXQgbjtpZihIbyhlKSluPW9GZSh0LGUpO2Vsc2UgaWYoTXUoZSkpbj10RmUodCxlKTtlbHNlIGlmKE1sKGUpKW49Z3AodCxlLnRlcm1pbmFsKTtlbHNlIGlmKGVwKGUpKW49RGxlKHQsZSk7ZWxzZSBpZihJbChlKSluPXJGZSh0LGUpO2Vsc2UgaWYobWsoZSkpbj1pRmUodCxlKTtlbHNlIGlmKHlrKGUpKW49YUZlKHQsZSk7ZWxzZSBpZihzZihlKSluPXNGZSh0LGUpO2Vsc2UgaWYoJFIoZSkpe2xldCBpPXQuY29uc3VtZSsrO249bygoKT0+dC5wYXJzZXIuY29uc3VtZShpLGxvLGUpLCJtZXRob2QiKX1lbHNlIHRocm93IG5ldyBaZChlLiRjc3ROb2RlLGBVbmV4cGVjdGVkIGVsZW1lbnQgdHlwZTogJHtlLiR0eXBlfWApO3JldHVybiBMbGUodCxyP3ZvaWQgMDp4RShlKSxuLGUuY2FyZGluYWxpdHkpfWZ1bmN0aW9uIHRGZSh0LGUpe2xldCByPUoyKGUpO3JldHVybigpPT50LnBhcnNlci5hY3Rpb24ocixlKX1mdW5jdGlvbiByRmUodCxlKXtsZXQgcj1lLnJ1bGUucmVmO2lmKE9hKHIpKXtsZXQgbj10LnN1YnJ1bGUrKyxpPXIuZnJhZ21lbnQsYT1lLmFyZ3VtZW50cy5sZW5ndGg+MD9uRmUocixlLmFyZ3VtZW50cyk6KCk9Pih7fSk7cmV0dXJuIHM9PnQucGFyc2VyLnN1YnJ1bGUobixSbGUodCxyKSxpLGUsYShzKSl9ZWxzZSBpZihzbyhyKSl7bGV0IG49dC5jb25zdW1lKyssaT14TSh0LHIubmFtZSk7cmV0dXJuKCk9PnQucGFyc2VyLmNvbnN1bWUobixpLGUpfWVsc2UgaWYocilMYyhyKTtlbHNlIHRocm93IG5ldyBaZChlLiRjc3ROb2RlLGBVbmRlZmluZWQgcnVsZTogJHtlLnJ1bGUuJHJlZlRleHR9YCl9ZnVuY3Rpb24gbkZlKHQsZSl7bGV0IHI9ZS5tYXAobj0+VnUobi52YWx1ZSkpO3JldHVybiBuPT57bGV0IGk9e307Zm9yKGxldCBhPTA7YTxyLmxlbmd0aDthKyspe2xldCBzPXQucGFyYW1ldGVyc1thXSxsPXJbYV07aVtzLm5hbWVdPWwobil9cmV0dXJuIGl9fWZ1bmN0aW9uIFZ1KHQpe2lmKE5SKHQpKXtsZXQgZT1WdSh0LmxlZnQpLHI9VnUodC5yaWdodCk7cmV0dXJuIG49PmUobil8fHIobil9ZWxzZSBpZihSUih0KSl7bGV0IGU9VnUodC5sZWZ0KSxyPVZ1KHQucmlnaHQpO3JldHVybiBuPT5lKG4pJiZyKG4pfWVsc2UgaWYoTVIodCkpe2xldCBlPVZ1KHQudmFsdWUpO3JldHVybiByPT4hZShyKX1lbHNlIGlmKElSKHQpKXtsZXQgZT10LnBhcmFtZXRlci5yZWYubmFtZTtyZXR1cm4gcj0+ciE9PXZvaWQgMCYmcltlXT09PSEwfWVsc2UgaWYoTFIodCkpe2xldCBlPSEhdC50cnVlO3JldHVybigpPT5lfUxjKHQpfWZ1bmN0aW9uIGlGZSh0LGUpe2lmKGUuZWxlbWVudHMubGVuZ3RoPT09MSlyZXR1cm4gZ3AodCxlLmVsZW1lbnRzWzBdKTt7bGV0IHI9W107Zm9yKGxldCBpIG9mIGUuZWxlbWVudHMpe2xldCBhPXtBTFQ6Z3AodCxpLCEwKX0scz14RShpKTtzJiYoYS5HQVRFPVZ1KHMpKSxyLnB1c2goYSl9bGV0IG49dC5vcisrO3JldHVybiBpPT50LnBhcnNlci5hbHRlcm5hdGl2ZXMobixyLm1hcChhPT57bGV0IHM9e0FMVDpvKCgpPT5hLkFMVChpKSwiQUxUIil9LGw9YS5HQVRFO3JldHVybiBsJiYocy5HQVRFPSgpPT5sKGkpKSxzfSkpfX1mdW5jdGlvbiBhRmUodCxlKXtpZihlLmVsZW1lbnRzLmxlbmd0aD09PTEpcmV0dXJuIGdwKHQsZS5lbGVtZW50c1swXSk7bGV0IHI9W107Zm9yKGxldCBsIG9mIGUuZWxlbWVudHMpe2xldCB1PXtBTFQ6Z3AodCxsLCEwKX0saD14RShsKTtoJiYodS5HQVRFPVZ1KGgpKSxyLnB1c2godSl9bGV0IG49dC5vcisrLGk9bygobCx1KT0+e2xldCBoPXUuZ2V0UnVsZVN0YWNrKCkuam9pbigiLSIpO3JldHVybmB1R3JvdXBfJHtsfV8ke2h9YH0sImlkRnVuYyIpLGE9byhsPT50LnBhcnNlci5hbHRlcm5hdGl2ZXMobixyLm1hcCgodSxoKT0+e2xldCBmPXtBTFQ6bygoKT0+ITAsIkFMVCIpfSxkPXQucGFyc2VyO2YuQUxUPSgpPT57aWYodS5BTFQobCksIWQuaXNSZWNvcmRpbmcoKSl7bGV0IG09aShuLGQpO2QudW5vcmRlcmVkR3JvdXBzLmdldChtKXx8ZC51bm9yZGVyZWRHcm91cHMuc2V0KG0sW10pO2xldCBnPWQudW5vcmRlcmVkR3JvdXBzLmdldChtKTt0eXBlb2YgZz8uW2hdPiJ1IiYmKGdbaF09ITApfX07bGV0IHA9dS5HQVRFO3JldHVybiBwP2YuR0FURT0oKT0+cChsKTpmLkdBVEU9KCk9PntsZXQgbT1kLnVub3JkZXJlZEdyb3Vwcy5nZXQoaShuLGQpKTtyZXR1cm4hbT8uW2hdfSxmfSkpLCJhbHRlcm5hdGl2ZXMiKSxzPUxsZSh0LHhFKGUpLGEsIioiKTtyZXR1cm4gbD0+e3MobCksdC5wYXJzZXIuaXNSZWNvcmRpbmcoKXx8dC5wYXJzZXIudW5vcmRlcmVkR3JvdXBzLmRlbGV0ZShpKG4sdC5wYXJzZXIpKX19ZnVuY3Rpb24gc0ZlKHQsZSl7bGV0IHI9ZS5lbGVtZW50cy5tYXAobj0+Z3AodCxuKSk7cmV0dXJuIG49PnIuZm9yRWFjaChpPT5pKG4pKX1mdW5jdGlvbiB4RSh0KXtpZihzZih0KSlyZXR1cm4gdC5ndWFyZENvbmRpdGlvbn1mdW5jdGlvbiBEbGUodCxlLHI9ZS50ZXJtaW5hbCl7aWYocilpZihJbChyKSYmT2Eoci5ydWxlLnJlZikpe2xldCBuPXIucnVsZS5yZWYsaT10LnN1YnJ1bGUrKztyZXR1cm4gYT0+dC5wYXJzZXIuc3VicnVsZShpLFJsZSh0LG4pLCExLGUsYSl9ZWxzZSBpZihJbChyKSYmc28oci5ydWxlLnJlZikpe2xldCBuPXQuY29uc3VtZSsrLGk9eE0odCxyLnJ1bGUucmVmLm5hbWUpO3JldHVybigpPT50LnBhcnNlci5jb25zdW1lKG4saSxlKX1lbHNlIGlmKEhvKHIpKXtsZXQgbj10LmNvbnN1bWUrKyxpPXhNKHQsci52YWx1ZSk7cmV0dXJuKCk9PnQucGFyc2VyLmNvbnN1bWUobixpLGUpfWVsc2UgdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgYnVpbGQgY3Jvc3MgcmVmZXJlbmNlIHBhcnNlciIpO2Vsc2V7aWYoIWUudHlwZS5yZWYpdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgcmVzb2x2ZSByZWZlcmVuY2UgdG8gdHlwZTogIitlLnR5cGUuJHJlZlRleHQpO2xldCBuPWtrKGUudHlwZS5yZWYpLGk9bj8udGVybWluYWw7aWYoIWkpdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCBuYW1lIGFzc2lnbm1lbnQgZm9yIHR5cGU6ICIrSjIoZS50eXBlLnJlZikpO3JldHVybiBEbGUodCxlLGkpfX1mdW5jdGlvbiBvRmUodCxlKXtsZXQgcj10LmNvbnN1bWUrKyxuPXQudG9rZW5zW2UudmFsdWVdO2lmKCFuKXRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGZpbmQgdG9rZW4gZm9yIGtleXdvcmQ6ICIrZS52YWx1ZSk7cmV0dXJuKCk9PnQucGFyc2VyLmNvbnN1bWUocixuLGUpfWZ1bmN0aW9uIExsZSh0LGUscixuKXtsZXQgaT1lJiZWdShlKTtpZighbilpZihpKXtsZXQgYT10Lm9yKys7cmV0dXJuIHM9PnQucGFyc2VyLmFsdGVybmF0aXZlcyhhLFt7QUxUOm8oKCk9PnIocyksIkFMVCIpLEdBVEU6bygoKT0+aShzKSwiR0FURSIpfSx7QUxUOmxFKCksR0FURTpvKCgpPT4haShzKSwiR0FURSIpfV0pfWVsc2UgcmV0dXJuIHI7aWYobj09PSIqIil7bGV0IGE9dC5tYW55Kys7cmV0dXJuIHM9PnQucGFyc2VyLm1hbnkoYSx7REVGOm8oKCk9PnIocyksIkRFRiIpLEdBVEU6aT8oKT0+aShzKTp2b2lkIDB9KX1lbHNlIGlmKG49PT0iKyIpe2xldCBhPXQubWFueSsrO2lmKGkpe2xldCBzPXQub3IrKztyZXR1cm4gbD0+dC5wYXJzZXIuYWx0ZXJuYXRpdmVzKHMsW3tBTFQ6bygoKT0+dC5wYXJzZXIuYXRMZWFzdE9uZShhLHtERUY6bygoKT0+cihsKSwiREVGIil9KSwiQUxUIiksR0FURTpvKCgpPT5pKGwpLCJHQVRFIil9LHtBTFQ6bEUoKSxHQVRFOm8oKCk9PiFpKGwpLCJHQVRFIil9XSl9ZWxzZSByZXR1cm4gcz0+dC5wYXJzZXIuYXRMZWFzdE9uZShhLHtERUY6bygoKT0+cihzKSwiREVGIil9KX1lbHNlIGlmKG49PT0iPyIpe2xldCBhPXQub3B0aW9uYWwrKztyZXR1cm4gcz0+dC5wYXJzZXIub3B0aW9uYWwoYSx7REVGOm8oKCk9PnIocyksIkRFRiIpLEdBVEU6aT8oKT0+aShzKTp2b2lkIDB9KX1lbHNlIExjKG4pfWZ1bmN0aW9uIFJsZSh0LGUpe2xldCByPWxGZSh0LGUpLG49dC5wYXJzZXIuZ2V0UnVsZShyKTtpZighbil0aHJvdyBuZXcgRXJyb3IoYFJ1bGUgIiR7cn0iIG5vdCBmb3VuZC4iYCk7cmV0dXJuIG59ZnVuY3Rpb24gbEZlKHQsZSl7aWYoT2EoZSkpcmV0dXJuIGUubmFtZTtpZih0LnJ1bGVOYW1lcy5oYXMoZSkpcmV0dXJuIHQucnVsZU5hbWVzLmdldChlKTt7bGV0IHI9ZSxuPXIuJGNvbnRhaW5lcixpPWUuJHR5cGU7Zm9yKDshT2Eobik7KShzZihuKXx8bWsobil8fHlrKG4pKSYmKGk9bi5lbGVtZW50cy5pbmRleE9mKHIpLnRvU3RyaW5nKCkrIjoiK2kpLHI9bixuPW4uJGNvbnRhaW5lcjtyZXR1cm4gaT1uLm5hbWUrIjoiK2ksdC5ydWxlTmFtZXMuc2V0KGUsaSksaX19ZnVuY3Rpb24geE0odCxlKXtsZXQgcj10LnRva2Vuc1tlXTtpZighcil0aHJvdyBuZXcgRXJyb3IoYFRva2VuICIke2V9IiBub3QgZm91bmQuImApO3JldHVybiByfXZhciBiRT1OKCgpPT57InVzZSBzdHJpY3QiO2NmKCk7UmMoKTt1aygpO1BzKCk7T2woKTtvKFJ4LCJjcmVhdGVQYXJzZXIiKTtvKGVGZSwiYnVpbGRSdWxlcyIpO28oZ3AsImJ1aWxkRWxlbWVudCIpO28odEZlLCJidWlsZEFjdGlvbiIpO28ockZlLCJidWlsZFJ1bGVDYWxsIik7byhuRmUsImJ1aWxkUnVsZUNhbGxQcmVkaWNhdGUiKTtvKFZ1LCJidWlsZFByZWRpY2F0ZSIpO28oaUZlLCJidWlsZEFsdGVybmF0aXZlcyIpO28oYUZlLCJidWlsZFVub3JkZXJlZEdyb3VwIik7byhzRmUsImJ1aWxkR3JvdXAiKTtvKHhFLCJnZXRHdWFyZENvbmRpdGlvbiIpO28oRGxlLCJidWlsZENyb3NzUmVmZXJlbmNlIik7byhvRmUsImJ1aWxkS2V5d29yZCIpO28oTGxlLCJ3cmFwIik7byhSbGUsImdldFJ1bGUiKTtvKGxGZSwiZ2V0UnVsZU5hbWUiKTtvKHhNLCJnZXRUb2tlbiIpfSk7ZnVuY3Rpb24gYk0odCl7bGV0IGU9dC5HcmFtbWFyLHI9dC5wYXJzZXIuTGV4ZXIsbj1uZXcgRHgodCk7cmV0dXJuIFJ4KGUsbixyLmRlZmluaXRpb24pLG4uZmluYWxpemUoKSxufXZhciB3TT1OKCgpPT57InVzZSBzdHJpY3QiO0x4KCk7YkUoKTtvKGJNLCJjcmVhdGVDb21wbGV0aW9uUGFyc2VyIil9KTtmdW5jdGlvbiBUTSh0KXtsZXQgZT1ObGUodCk7cmV0dXJuIGUuZmluYWxpemUoKSxlfWZ1bmN0aW9uIE5sZSh0KXtsZXQgZT10LkdyYW1tYXIscj10LnBhcnNlci5MZXhlcixuPW5ldyBfeCh0KTtyZXR1cm4gUngoZSxuLHIuZGVmaW5pdGlvbil9dmFyIGtNPU4oKCk9PnsidXNlIHN0cmljdCI7THgoKTtiRSgpO28oVE0sImNyZWF0ZUxhbmdpdW1QYXJzZXIiKTtvKE5sZSwicHJlcGFyZUxhbmdpdW1QYXJzZXIiKX0pO3ZhciBVdSx3RT1OKCgpPT57InVzZSBzdHJpY3QiO2NmKCk7UmMoKTtpcygpO09sKCk7TGcoKTtQcygpO1V1PWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRUb2tlbkJ1aWxkZXIiKX1jb25zdHJ1Y3Rvcigpe3RoaXMuZGlhZ25vc3RpY3M9W119YnVpbGRUb2tlbnMoZSxyKXtsZXQgbj1lbihLMihlLCExKSksaT10aGlzLmJ1aWxkVGVybWluYWxUb2tlbnMobiksYT10aGlzLmJ1aWxkS2V5d29yZFRva2VucyhuLGkscik7cmV0dXJuIGkuZm9yRWFjaChzPT57bGV0IGw9cy5QQVRURVJOO3R5cGVvZiBsPT0ib2JqZWN0IiYmbCYmInRlc3QiaW4gbCYmRGcobCk/YS51bnNoaWZ0KHMpOmEucHVzaChzKX0pLGF9Zmx1c2hMZXhpbmdSZXBvcnQoZSl7cmV0dXJue2RpYWdub3N0aWNzOnRoaXMucG9wRGlhZ25vc3RpY3MoKX19cG9wRGlhZ25vc3RpY3MoKXtsZXQgZT1bLi4udGhpcy5kaWFnbm9zdGljc107cmV0dXJuIHRoaXMuZGlhZ25vc3RpY3M9W10sZX1idWlsZFRlcm1pbmFsVG9rZW5zKGUpe3JldHVybiBlLmZpbHRlcihzbykuZmlsdGVyKHI9PiFyLmZyYWdtZW50KS5tYXAocj0+dGhpcy5idWlsZFRlcm1pbmFsVG9rZW4ocikpLnRvQXJyYXkoKX1idWlsZFRlcm1pbmFsVG9rZW4oZSl7bGV0IHI9TmcoZSksbj10aGlzLnJlcXVpcmVzQ3VzdG9tUGF0dGVybihyKT90aGlzLnJlZ2V4UGF0dGVybkZ1bmN0aW9uKHIpOnIsaT17bmFtZTplLm5hbWUsUEFUVEVSTjpufTtyZXR1cm4gdHlwZW9mIG49PSJmdW5jdGlvbiImJihpLkxJTkVfQlJFQUtTPSEwKSxlLmhpZGRlbiYmKGkuR1JPVVA9RGcocik/WG4uU0tJUFBFRDoiaGlkZGVuIiksaX1yZXF1aXJlc0N1c3RvbVBhdHRlcm4oZSl7cmV0dXJuIGUuZmxhZ3MuaW5jbHVkZXMoInUiKXx8ZS5mbGFncy5pbmNsdWRlcygicyIpPyEwOiEhKGUuc291cmNlLmluY2x1ZGVzKCI/PD0iKXx8ZS5zb3VyY2UuaW5jbHVkZXMoIj88ISIpKX1yZWdleFBhdHRlcm5GdW5jdGlvbihlKXtsZXQgcj1uZXcgUmVnRXhwKGUsZS5mbGFncysieSIpO3JldHVybihuLGkpPT4oci5sYXN0SW5kZXg9aSxyLmV4ZWMobikpfWJ1aWxkS2V5d29yZFRva2VucyhlLHIsbil7cmV0dXJuIGUuZmlsdGVyKE9hKS5mbGF0TWFwKGk9Pk5jKGkpLmZpbHRlcihIbykpLmRpc3RpbmN0KGk9PmkudmFsdWUpLnRvQXJyYXkoKS5zb3J0KChpLGEpPT5hLnZhbHVlLmxlbmd0aC1pLnZhbHVlLmxlbmd0aCkubWFwKGk9PnRoaXMuYnVpbGRLZXl3b3JkVG9rZW4oaSxyLCEhbj8uY2FzZUluc2Vuc2l0aXZlKSl9YnVpbGRLZXl3b3JkVG9rZW4oZSxyLG4pe2xldCBpPXRoaXMuYnVpbGRLZXl3b3JkUGF0dGVybihlLG4pLGE9e25hbWU6ZS52YWx1ZSxQQVRURVJOOmksTE9OR0VSX0FMVDp0aGlzLmZpbmRMb25nZXJBbHQoZSxyKX07cmV0dXJuIHR5cGVvZiBpPT0iZnVuY3Rpb24iJiYoYS5MSU5FX0JSRUFLUz0hMCksYX1idWlsZEtleXdvcmRQYXR0ZXJuKGUscil7cmV0dXJuIHI/bmV3IFJlZ0V4cCh0TihlLnZhbHVlKSk6ZS52YWx1ZX1maW5kTG9uZ2VyQWx0KGUscil7cmV0dXJuIHIucmVkdWNlKChuLGkpPT57bGV0IGE9aT8uUEFUVEVSTjtyZXR1cm4gYT8uc291cmNlJiZyTigiXiIrYS5zb3VyY2UrIiQiLGUudmFsdWUpJiZuLnB1c2goaSksbn0sW10pfX19KTt2YXIgeXAsT2MsRU09TigoKT0+eyJ1c2Ugc3RyaWN0IjtSYygpO09sKCk7eXA9Y2xhc3N7c3RhdGlje28odGhpcywiRGVmYXVsdFZhbHVlQ29udmVydGVyIil9Y29udmVydChlLHIpe2xldCBuPXIuZ3JhbW1hclNvdXJjZTtpZihlcChuKSYmKG49YU4obikpLElsKG4pKXtsZXQgaT1uLnJ1bGUucmVmO2lmKCFpKXRocm93IG5ldyBFcnJvcigiVGhpcyBjc3Qgbm9kZSB3YXMgbm90IHBhcnNlZCBieSBhIHJ1bGUuIik7cmV0dXJuIHRoaXMucnVuQ29udmVydGVyKGksZSxyKX1yZXR1cm4gZX1ydW5Db252ZXJ0ZXIoZSxyLG4pe3ZhciBpO3N3aXRjaChlLm5hbWUudG9VcHBlckNhc2UoKSl7Y2FzZSJJTlQiOnJldHVybiBPYy5jb252ZXJ0SW50KHIpO2Nhc2UiU1RSSU5HIjpyZXR1cm4gT2MuY29udmVydFN0cmluZyhyKTtjYXNlIklEIjpyZXR1cm4gT2MuY29udmVydElEKHIpfXN3aXRjaCgoaT1mTihlKSk9PT1udWxsfHxpPT09dm9pZCAwP3ZvaWQgMDppLnRvTG93ZXJDYXNlKCkpe2Nhc2UibnVtYmVyIjpyZXR1cm4gT2MuY29udmVydE51bWJlcihyKTtjYXNlImJvb2xlYW4iOnJldHVybiBPYy5jb252ZXJ0Qm9vbGVhbihyKTtjYXNlImJpZ2ludCI6cmV0dXJuIE9jLmNvbnZlcnRCaWdpbnQocik7Y2FzZSJkYXRlIjpyZXR1cm4gT2MuY29udmVydERhdGUocik7ZGVmYXVsdDpyZXR1cm4gcn19fTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShoKXtsZXQgZj0iIjtmb3IobGV0IGQ9MTtkPGgubGVuZ3RoLTE7ZCsrKXtsZXQgcD1oLmNoYXJBdChkKTtpZihwPT09IlxcIil7bGV0IG09aC5jaGFyQXQoKytkKTtmKz1yKG0pfWVsc2UgZis9cH1yZXR1cm4gZn1vKGUsImNvbnZlcnRTdHJpbmciKSx0LmNvbnZlcnRTdHJpbmc9ZTtmdW5jdGlvbiByKGgpe3N3aXRjaChoKXtjYXNlImIiOnJldHVybiJcYiI7Y2FzZSJmIjpyZXR1cm4iXGYiO2Nhc2UibiI6cmV0dXJuYApgO2Nhc2UiciI6cmV0dXJuIlxyIjtjYXNlInQiOnJldHVybiIJIjtjYXNlInYiOnJldHVybiJcdiI7Y2FzZSIwIjpyZXR1cm4iXDAiO2RlZmF1bHQ6cmV0dXJuIGh9fW8ociwiY29udmVydEVzY2FwZUNoYXJhY3RlciIpO2Z1bmN0aW9uIG4oaCl7cmV0dXJuIGguY2hhckF0KDApPT09Il4iP2guc3Vic3RyaW5nKDEpOmh9byhuLCJjb252ZXJ0SUQiKSx0LmNvbnZlcnRJRD1uO2Z1bmN0aW9uIGkoaCl7cmV0dXJuIHBhcnNlSW50KGgpfW8oaSwiY29udmVydEludCIpLHQuY29udmVydEludD1pO2Z1bmN0aW9uIGEoaCl7cmV0dXJuIEJpZ0ludChoKX1vKGEsImNvbnZlcnRCaWdpbnQiKSx0LmNvbnZlcnRCaWdpbnQ9YTtmdW5jdGlvbiBzKGgpe3JldHVybiBuZXcgRGF0ZShoKX1vKHMsImNvbnZlcnREYXRlIiksdC5jb252ZXJ0RGF0ZT1zO2Z1bmN0aW9uIGwoaCl7cmV0dXJuIE51bWJlcihoKX1vKGwsImNvbnZlcnROdW1iZXIiKSx0LmNvbnZlcnROdW1iZXI9bDtmdW5jdGlvbiB1KGgpe3JldHVybiBoLnRvTG93ZXJDYXNlKCk9PT0idHJ1ZSJ9byh1LCJjb252ZXJ0Qm9vbGVhbiIpLHQuY29udmVydEJvb2xlYW49dX0pKE9jfHwoT2M9e30pKX0pO3ZhciBfTT1NaShBTT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQU0sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBTTTtmdW5jdGlvbiBDTSgpe2lmKFNNPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiTm8gcnVudGltZSBhYnN0cmFjdGlvbiBsYXllciBpbnN0YWxsZWQiKTtyZXR1cm4gU019byhDTSwiUkFMIik7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUocil7aWYocj09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIk5vIHJ1bnRpbWUgYWJzdHJhY3Rpb24gbGF5ZXIgcHJvdmlkZWQiKTtTTT1yfW8oZSwiaW5zdGFsbCIpLHQuaW5zdGFsbD1lfSkoQ018fChDTT17fSkpO0FNLmRlZmF1bHQ9Q019KTt2YXIgT2xlPU1pKEJhPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShCYSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7QmEuc3RyaW5nQXJyYXk9QmEuYXJyYXk9QmEuZnVuYz1CYS5lcnJvcj1CYS5udW1iZXI9QmEuc3RyaW5nPUJhLmJvb2xlYW49dm9pZCAwO2Z1bmN0aW9uIGNGZSh0KXtyZXR1cm4gdD09PSEwfHx0PT09ITF9byhjRmUsImJvb2xlYW4iKTtCYS5ib29sZWFuPWNGZTtmdW5jdGlvbiBNbGUodCl7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nInx8dCBpbnN0YW5jZW9mIFN0cmluZ31vKE1sZSwic3RyaW5nIik7QmEuc3RyaW5nPU1sZTtmdW5jdGlvbiB1RmUodCl7cmV0dXJuIHR5cGVvZiB0PT0ibnVtYmVyInx8dCBpbnN0YW5jZW9mIE51bWJlcn1vKHVGZSwibnVtYmVyIik7QmEubnVtYmVyPXVGZTtmdW5jdGlvbiBoRmUodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBFcnJvcn1vKGhGZSwiZXJyb3IiKTtCYS5lcnJvcj1oRmU7ZnVuY3Rpb24gZkZlKHQpe3JldHVybiB0eXBlb2YgdD09ImZ1bmN0aW9uIn1vKGZGZSwiZnVuYyIpO0JhLmZ1bmM9ZkZlO2Z1bmN0aW9uIElsZSh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KX1vKElsZSwiYXJyYXkiKTtCYS5hcnJheT1JbGU7ZnVuY3Rpb24gZEZlKHQpe3JldHVybiBJbGUodCkmJnQuZXZlcnkoZT0+TWxlKGUpKX1vKGRGZSwic3RyaW5nQXJyYXkiKTtCYS5zdHJpbmdBcnJheT1kRmV9KTt2YXIgTE09TWkobzE9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KG8xLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtvMS5FbWl0dGVyPW8xLkV2ZW50PXZvaWQgMDt2YXIgcEZlPV9NKCksUGxlOyhmdW5jdGlvbih0KXtsZXQgZT17ZGlzcG9zZSgpe319O3QuTm9uZT1mdW5jdGlvbigpe3JldHVybiBlfX0pKFBsZXx8KG8xLkV2ZW50PVBsZT17fSkpO3ZhciBETT1jbGFzc3tzdGF0aWN7byh0aGlzLCJDYWxsYmFja0xpc3QiKX1hZGQoZSxyPW51bGwsbil7dGhpcy5fY2FsbGJhY2tzfHwodGhpcy5fY2FsbGJhY2tzPVtdLHRoaXMuX2NvbnRleHRzPVtdKSx0aGlzLl9jYWxsYmFja3MucHVzaChlKSx0aGlzLl9jb250ZXh0cy5wdXNoKHIpLEFycmF5LmlzQXJyYXkobikmJm4ucHVzaCh7ZGlzcG9zZTpvKCgpPT50aGlzLnJlbW92ZShlLHIpLCJkaXNwb3NlIil9KX1yZW1vdmUoZSxyPW51bGwpe2lmKCF0aGlzLl9jYWxsYmFja3MpcmV0dXJuO2xldCBuPSExO2ZvcihsZXQgaT0wLGE9dGhpcy5fY2FsbGJhY2tzLmxlbmd0aDtpPGE7aSsrKWlmKHRoaXMuX2NhbGxiYWNrc1tpXT09PWUpaWYodGhpcy5fY29udGV4dHNbaV09PT1yKXt0aGlzLl9jYWxsYmFja3Muc3BsaWNlKGksMSksdGhpcy5fY29udGV4dHMuc3BsaWNlKGksMSk7cmV0dXJufWVsc2Ugbj0hMDtpZihuKXRocm93IG5ldyBFcnJvcigiV2hlbiBhZGRpbmcgYSBsaXN0ZW5lciB3aXRoIGEgY29udGV4dCwgeW91IHNob3VsZCByZW1vdmUgaXQgd2l0aCB0aGUgc2FtZSBjb250ZXh0Iil9aW52b2tlKC4uLmUpe2lmKCF0aGlzLl9jYWxsYmFja3MpcmV0dXJuW107bGV0IHI9W10sbj10aGlzLl9jYWxsYmFja3Muc2xpY2UoMCksaT10aGlzLl9jb250ZXh0cy5zbGljZSgwKTtmb3IobGV0IGE9MCxzPW4ubGVuZ3RoO2E8czthKyspdHJ5e3IucHVzaChuW2FdLmFwcGx5KGlbYV0sZSkpfWNhdGNoKGwpeygwLHBGZS5kZWZhdWx0KSgpLmNvbnNvbGUuZXJyb3IobCl9cmV0dXJuIHJ9aXNFbXB0eSgpe3JldHVybiF0aGlzLl9jYWxsYmFja3N8fHRoaXMuX2NhbGxiYWNrcy5sZW5ndGg9PT0wfWRpc3Bvc2UoKXt0aGlzLl9jYWxsYmFja3M9dm9pZCAwLHRoaXMuX2NvbnRleHRzPXZvaWQgMH19LFRFPWNsYXNzIHR7c3RhdGlje28odGhpcywiRW1pdHRlciIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuX29wdGlvbnM9ZX1nZXQgZXZlbnQoKXtyZXR1cm4gdGhpcy5fZXZlbnR8fCh0aGlzLl9ldmVudD0oZSxyLG4pPT57dGhpcy5fY2FsbGJhY2tzfHwodGhpcy5fY2FsbGJhY2tzPW5ldyBETSksdGhpcy5fb3B0aW9ucyYmdGhpcy5fb3B0aW9ucy5vbkZpcnN0TGlzdGVuZXJBZGQmJnRoaXMuX2NhbGxiYWNrcy5pc0VtcHR5KCkmJnRoaXMuX29wdGlvbnMub25GaXJzdExpc3RlbmVyQWRkKHRoaXMpLHRoaXMuX2NhbGxiYWNrcy5hZGQoZSxyKTtsZXQgaT17ZGlzcG9zZTpvKCgpPT57dGhpcy5fY2FsbGJhY2tzJiYodGhpcy5fY2FsbGJhY2tzLnJlbW92ZShlLHIpLGkuZGlzcG9zZT10Ll9ub29wLHRoaXMuX29wdGlvbnMmJnRoaXMuX29wdGlvbnMub25MYXN0TGlzdGVuZXJSZW1vdmUmJnRoaXMuX2NhbGxiYWNrcy5pc0VtcHR5KCkmJnRoaXMuX29wdGlvbnMub25MYXN0TGlzdGVuZXJSZW1vdmUodGhpcykpfSwiZGlzcG9zZSIpfTtyZXR1cm4gQXJyYXkuaXNBcnJheShuKSYmbi5wdXNoKGkpLGl9KSx0aGlzLl9ldmVudH1maXJlKGUpe3RoaXMuX2NhbGxiYWNrcyYmdGhpcy5fY2FsbGJhY2tzLmludm9rZS5jYWxsKHRoaXMuX2NhbGxiYWNrcyxlKX1kaXNwb3NlKCl7dGhpcy5fY2FsbGJhY2tzJiYodGhpcy5fY2FsbGJhY2tzLmRpc3Bvc2UoKSx0aGlzLl9jYWxsYmFja3M9dm9pZCAwKX19O28xLkVtaXR0ZXI9VEU7VEUuX25vb3A9ZnVuY3Rpb24oKXt9fSk7dmFyIEJsZT1NaShsMT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobDEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2wxLkNhbmNlbGxhdGlvblRva2VuU291cmNlPWwxLkNhbmNlbGxhdGlvblRva2VuPXZvaWQgMDt2YXIgbUZlPV9NKCksZ0ZlPU9sZSgpLFJNPUxNKCksa0U7KGZ1bmN0aW9uKHQpe3QuTm9uZT1PYmplY3QuZnJlZXplKHtpc0NhbmNlbGxhdGlvblJlcXVlc3RlZDohMSxvbkNhbmNlbGxhdGlvblJlcXVlc3RlZDpSTS5FdmVudC5Ob25lfSksdC5DYW5jZWxsZWQ9T2JqZWN0LmZyZWV6ZSh7aXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQ6ITAsb25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQ6Uk0uRXZlbnQuTm9uZX0pO2Z1bmN0aW9uIGUocil7bGV0IG49cjtyZXR1cm4gbiYmKG49PT10Lk5vbmV8fG49PT10LkNhbmNlbGxlZHx8Z0ZlLmJvb2xlYW4obi5pc0NhbmNlbGxhdGlvblJlcXVlc3RlZCkmJiEhbi5vbkNhbmNlbGxhdGlvblJlcXVlc3RlZCl9byhlLCJpcyIpLHQuaXM9ZX0pKGtFfHwobDEuQ2FuY2VsbGF0aW9uVG9rZW49a0U9e30pKTt2YXIgeUZlPU9iamVjdC5mcmVlemUoZnVuY3Rpb24odCxlKXtsZXQgcj0oMCxtRmUuZGVmYXVsdCkoKS50aW1lci5zZXRUaW1lb3V0KHQuYmluZChlKSwwKTtyZXR1cm57ZGlzcG9zZSgpe3IuZGlzcG9zZSgpfX19KSxFRT1jbGFzc3tzdGF0aWN7byh0aGlzLCJNdXRhYmxlVG9rZW4iKX1jb25zdHJ1Y3Rvcigpe3RoaXMuX2lzQ2FuY2VsbGVkPSExfWNhbmNlbCgpe3RoaXMuX2lzQ2FuY2VsbGVkfHwodGhpcy5faXNDYW5jZWxsZWQ9ITAsdGhpcy5fZW1pdHRlciYmKHRoaXMuX2VtaXR0ZXIuZmlyZSh2b2lkIDApLHRoaXMuZGlzcG9zZSgpKSl9Z2V0IGlzQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKCl7cmV0dXJuIHRoaXMuX2lzQ2FuY2VsbGVkfWdldCBvbkNhbmNlbGxhdGlvblJlcXVlc3RlZCgpe3JldHVybiB0aGlzLl9pc0NhbmNlbGxlZD95RmU6KHRoaXMuX2VtaXR0ZXJ8fCh0aGlzLl9lbWl0dGVyPW5ldyBSTS5FbWl0dGVyKSx0aGlzLl9lbWl0dGVyLmV2ZW50KX1kaXNwb3NlKCl7dGhpcy5fZW1pdHRlciYmKHRoaXMuX2VtaXR0ZXIuZGlzcG9zZSgpLHRoaXMuX2VtaXR0ZXI9dm9pZCAwKX19LE5NPWNsYXNze3N0YXRpY3tvKHRoaXMsIkNhbmNlbGxhdGlvblRva2VuU291cmNlIil9Z2V0IHRva2VuKCl7cmV0dXJuIHRoaXMuX3Rva2VufHwodGhpcy5fdG9rZW49bmV3IEVFKSx0aGlzLl90b2tlbn1jYW5jZWwoKXt0aGlzLl90b2tlbj90aGlzLl90b2tlbi5jYW5jZWwoKTp0aGlzLl90b2tlbj1rRS5DYW5jZWxsZWR9ZGlzcG9zZSgpe3RoaXMuX3Rva2VuP3RoaXMuX3Rva2VuIGluc3RhbmNlb2YgRUUmJnRoaXMuX3Rva2VuLmRpc3Bvc2UoKTp0aGlzLl90b2tlbj1rRS5Ob25lfX07bDEuQ2FuY2VsbGF0aW9uVG9rZW5Tb3VyY2U9Tk19KTt2YXIgeXI9e307dmFyIHFvPU4oKCk9PnsidXNlIHN0cmljdCI7U3IoeXIsU2EoQmxlKCksMSkpfSk7ZnVuY3Rpb24gTU0oKXtyZXR1cm4gbmV3IFByb21pc2UodD0+e3R5cGVvZiBzZXRJbW1lZGlhdGU+InUiP3NldFRpbWVvdXQodCwwKTpzZXRJbW1lZGlhdGUodCl9KX1mdW5jdGlvbiBDRSgpe3JldHVybiBTRT1wZXJmb3JtYW5jZS5ub3coKSxuZXcgeXIuQ2FuY2VsbGF0aW9uVG9rZW5Tb3VyY2V9ZnVuY3Rpb24gJGxlKHQpe0ZsZT10fWZ1bmN0aW9uIEJjKHQpe3JldHVybiB0PT09UGN9YXN5bmMgZnVuY3Rpb24geGkodCl7aWYodD09PXlyLkNhbmNlbGxhdGlvblRva2VuLk5vbmUpcmV0dXJuO2xldCBlPXBlcmZvcm1hbmNlLm5vdygpO2lmKGUtU0U+PUZsZSYmKFNFPWUsYXdhaXQgTU0oKSxTRT1wZXJmb3JtYW5jZS5ub3coKSksdC5pc0NhbmNlbGxhdGlvblJlcXVlc3RlZCl0aHJvdyBQY312YXIgU0UsRmxlLFBjLGNzLFlvPU4oKCk9PnsidXNlIHN0cmljdCI7cW8oKTtvKE1NLCJkZWxheU5leHRUaWNrIik7U0U9MCxGbGU9MTA7byhDRSwic3RhcnRDYW5jZWxhYmxlT3BlcmF0aW9uIik7bygkbGUsInNldEludGVycnVwdGlvblBlcmlvZCIpO1BjPVN5bWJvbCgiT3BlcmF0aW9uQ2FuY2VsbGVkIik7byhCYywiaXNPcGVyYXRpb25DYW5jZWxsZWQiKTtvKHhpLCJpbnRlcnJ1cHRBbmRDaGVjayIpO2NzPWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmVycmVkIil9Y29uc3RydWN0b3IoKXt0aGlzLnByb21pc2U9bmV3IFByb21pc2UoKGUscik9Pnt0aGlzLnJlc29sdmU9bj0+KGUobiksdGhpcyksdGhpcy5yZWplY3Q9bj0+KHIobiksdGhpcyl9KX19fSk7ZnVuY3Rpb24gSU0odCxlKXtpZih0Lmxlbmd0aDw9MSlyZXR1cm4gdDtsZXQgcj10Lmxlbmd0aC8yfDAsbj10LnNsaWNlKDAsciksaT10LnNsaWNlKHIpO0lNKG4sZSksSU0oaSxlKTtsZXQgYT0wLHM9MCxsPTA7Zm9yKDthPG4ubGVuZ3RoJiZzPGkubGVuZ3RoOyllKG5bYV0saVtzXSk8PTA/dFtsKytdPW5bYSsrXTp0W2wrK109aVtzKytdO2Zvcig7YTxuLmxlbmd0aDspdFtsKytdPW5bYSsrXTtmb3IoO3M8aS5sZW5ndGg7KXRbbCsrXT1pW3MrK107cmV0dXJuIHR9ZnVuY3Rpb24gemxlKHQsZSxyPTApe2xldCBuPWU/W3JdOltdO2ZvcihsZXQgaT0wO2k8dC5sZW5ndGg7aSsrKXtsZXQgYT10LmNoYXJDb2RlQXQoaSk7R2xlKGEpJiYoYT09PTEzJiZpKzE8dC5sZW5ndGgmJnQuY2hhckNvZGVBdChpKzEpPT09MTAmJmkrKyxuLnB1c2gocitpKzEpKX1yZXR1cm4gbn1mdW5jdGlvbiBHbGUodCl7cmV0dXJuIHQ9PT0xM3x8dD09PTEwfWZ1bmN0aW9uIFZsZSh0KXtsZXQgZT10LnN0YXJ0LHI9dC5lbmQ7cmV0dXJuIGUubGluZT5yLmxpbmV8fGUubGluZT09PXIubGluZSYmZS5jaGFyYWN0ZXI+ci5jaGFyYWN0ZXI/e3N0YXJ0OnIsZW5kOmV9OnR9ZnVuY3Rpb24gdkZlKHQpe2xldCBlPVZsZSh0LnJhbmdlKTtyZXR1cm4gZSE9PXQucmFuZ2U/e25ld1RleHQ6dC5uZXdUZXh0LHJhbmdlOmV9OnR9dmFyIEFFLGMxLFVsZT1OKCgpPT57InVzZSBzdHJpY3QiO0FFPWNsYXNzIHR7c3RhdGlje28odGhpcywiRnVsbFRleHREb2N1bWVudCIpfWNvbnN0cnVjdG9yKGUscixuLGkpe3RoaXMuX3VyaT1lLHRoaXMuX2xhbmd1YWdlSWQ9cix0aGlzLl92ZXJzaW9uPW4sdGhpcy5fY29udGVudD1pLHRoaXMuX2xpbmVPZmZzZXRzPXZvaWQgMH1nZXQgdXJpKCl7cmV0dXJuIHRoaXMuX3VyaX1nZXQgbGFuZ3VhZ2VJZCgpe3JldHVybiB0aGlzLl9sYW5ndWFnZUlkfWdldCB2ZXJzaW9uKCl7cmV0dXJuIHRoaXMuX3ZlcnNpb259Z2V0VGV4dChlKXtpZihlKXtsZXQgcj10aGlzLm9mZnNldEF0KGUuc3RhcnQpLG49dGhpcy5vZmZzZXRBdChlLmVuZCk7cmV0dXJuIHRoaXMuX2NvbnRlbnQuc3Vic3RyaW5nKHIsbil9cmV0dXJuIHRoaXMuX2NvbnRlbnR9dXBkYXRlKGUscil7Zm9yKGxldCBuIG9mIGUpaWYodC5pc0luY3JlbWVudGFsKG4pKXtsZXQgaT1WbGUobi5yYW5nZSksYT10aGlzLm9mZnNldEF0KGkuc3RhcnQpLHM9dGhpcy5vZmZzZXRBdChpLmVuZCk7dGhpcy5fY29udGVudD10aGlzLl9jb250ZW50LnN1YnN0cmluZygwLGEpK24udGV4dCt0aGlzLl9jb250ZW50LnN1YnN0cmluZyhzLHRoaXMuX2NvbnRlbnQubGVuZ3RoKTtsZXQgbD1NYXRoLm1heChpLnN0YXJ0LmxpbmUsMCksdT1NYXRoLm1heChpLmVuZC5saW5lLDApLGg9dGhpcy5fbGluZU9mZnNldHMsZj16bGUobi50ZXh0LCExLGEpO2lmKHUtbD09PWYubGVuZ3RoKWZvcihsZXQgcD0wLG09Zi5sZW5ndGg7cDxtO3ArKyloW3ArbCsxXT1mW3BdO2Vsc2UgZi5sZW5ndGg8MWU0P2guc3BsaWNlKGwrMSx1LWwsLi4uZik6dGhpcy5fbGluZU9mZnNldHM9aD1oLnNsaWNlKDAsbCsxKS5jb25jYXQoZixoLnNsaWNlKHUrMSkpO2xldCBkPW4udGV4dC5sZW5ndGgtKHMtYSk7aWYoZCE9PTApZm9yKGxldCBwPWwrMStmLmxlbmd0aCxtPWgubGVuZ3RoO3A8bTtwKyspaFtwXT1oW3BdK2R9ZWxzZSBpZih0LmlzRnVsbChuKSl0aGlzLl9jb250ZW50PW4udGV4dCx0aGlzLl9saW5lT2Zmc2V0cz12b2lkIDA7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gY2hhbmdlIGV2ZW50IHJlY2VpdmVkIik7dGhpcy5fdmVyc2lvbj1yfWdldExpbmVPZmZzZXRzKCl7cmV0dXJuIHRoaXMuX2xpbmVPZmZzZXRzPT09dm9pZCAwJiYodGhpcy5fbGluZU9mZnNldHM9emxlKHRoaXMuX2NvbnRlbnQsITApKSx0aGlzLl9saW5lT2Zmc2V0c31wb3NpdGlvbkF0KGUpe2U9TWF0aC5tYXgoTWF0aC5taW4oZSx0aGlzLl9jb250ZW50Lmxlbmd0aCksMCk7bGV0IHI9dGhpcy5nZXRMaW5lT2Zmc2V0cygpLG49MCxpPXIubGVuZ3RoO2lmKGk9PT0wKXJldHVybntsaW5lOjAsY2hhcmFjdGVyOmV9O2Zvcig7bjxpOyl7bGV0IHM9TWF0aC5mbG9vcigobitpKS8yKTtyW3NdPmU/aT1zOm49cysxfWxldCBhPW4tMTtyZXR1cm4gZT10aGlzLmVuc3VyZUJlZm9yZUVPTChlLHJbYV0pLHtsaW5lOmEsY2hhcmFjdGVyOmUtclthXX19b2Zmc2V0QXQoZSl7bGV0IHI9dGhpcy5nZXRMaW5lT2Zmc2V0cygpO2lmKGUubGluZT49ci5sZW5ndGgpcmV0dXJuIHRoaXMuX2NvbnRlbnQubGVuZ3RoO2lmKGUubGluZTwwKXJldHVybiAwO2xldCBuPXJbZS5saW5lXTtpZihlLmNoYXJhY3Rlcjw9MClyZXR1cm4gbjtsZXQgaT1lLmxpbmUrMTxyLmxlbmd0aD9yW2UubGluZSsxXTp0aGlzLl9jb250ZW50Lmxlbmd0aCxhPU1hdGgubWluKG4rZS5jaGFyYWN0ZXIsaSk7cmV0dXJuIHRoaXMuZW5zdXJlQmVmb3JlRU9MKGEsbil9ZW5zdXJlQmVmb3JlRU9MKGUscil7Zm9yKDtlPnImJkdsZSh0aGlzLl9jb250ZW50LmNoYXJDb2RlQXQoZS0xKSk7KWUtLTtyZXR1cm4gZX1nZXQgbGluZUNvdW50KCl7cmV0dXJuIHRoaXMuZ2V0TGluZU9mZnNldHMoKS5sZW5ndGh9c3RhdGljIGlzSW5jcmVtZW50YWwoZSl7bGV0IHI9ZTtyZXR1cm4gciE9bnVsbCYmdHlwZW9mIHIudGV4dD09InN0cmluZyImJnIucmFuZ2UhPT12b2lkIDAmJihyLnJhbmdlTGVuZ3RoPT09dm9pZCAwfHx0eXBlb2Ygci5yYW5nZUxlbmd0aD09Im51bWJlciIpfXN0YXRpYyBpc0Z1bGwoZSl7bGV0IHI9ZTtyZXR1cm4gciE9bnVsbCYmdHlwZW9mIHIudGV4dD09InN0cmluZyImJnIucmFuZ2U9PT12b2lkIDAmJnIucmFuZ2VMZW5ndGg9PT12b2lkIDB9fTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShpLGEscyxsKXtyZXR1cm4gbmV3IEFFKGksYSxzLGwpfW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKGksYSxzKXtpZihpIGluc3RhbmNlb2YgQUUpcmV0dXJuIGkudXBkYXRlKGEscyksaTt0aHJvdyBuZXcgRXJyb3IoIlRleHREb2N1bWVudC51cGRhdGU6IGRvY3VtZW50IG11c3QgYmUgY3JlYXRlZCBieSBUZXh0RG9jdW1lbnQuY3JlYXRlIil9byhyLCJ1cGRhdGUiKSx0LnVwZGF0ZT1yO2Z1bmN0aW9uIG4oaSxhKXtsZXQgcz1pLmdldFRleHQoKSxsPUlNKGEubWFwKHZGZSksKGYsZCk9PntsZXQgcD1mLnJhbmdlLnN0YXJ0LmxpbmUtZC5yYW5nZS5zdGFydC5saW5lO3JldHVybiBwPT09MD9mLnJhbmdlLnN0YXJ0LmNoYXJhY3Rlci1kLnJhbmdlLnN0YXJ0LmNoYXJhY3RlcjpwfSksdT0wLGg9W107Zm9yKGxldCBmIG9mIGwpe2xldCBkPWkub2Zmc2V0QXQoZi5yYW5nZS5zdGFydCk7aWYoZDx1KXRocm93IG5ldyBFcnJvcigiT3ZlcmxhcHBpbmcgZWRpdCIpO2Q+dSYmaC5wdXNoKHMuc3Vic3RyaW5nKHUsZCkpLGYubmV3VGV4dC5sZW5ndGgmJmgucHVzaChmLm5ld1RleHQpLHU9aS5vZmZzZXRBdChmLnJhbmdlLmVuZCl9cmV0dXJuIGgucHVzaChzLnN1YnN0cih1KSksaC5qb2luKCIiKX1vKG4sImFwcGx5RWRpdHMiKSx0LmFwcGx5RWRpdHM9bn0pKGMxfHwoYzE9e30pKTtvKElNLCJtZXJnZVNvcnQiKTtvKHpsZSwiY29tcHV0ZUxpbmVPZmZzZXRzIik7byhHbGUsImlzRU9MIik7byhWbGUsImdldFdlbGxmb3JtZWRSYW5nZSIpO28odkZlLCJnZXRXZWxsZm9ybWVkRWRpdCIpfSk7dmFyIEhsZSx1cyx1MSxPTT1OKCgpPT57InVzZSBzdHJpY3QiOygoKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgdD17NDcwOmk9PntmdW5jdGlvbiBhKHUpe2lmKHR5cGVvZiB1IT0ic3RyaW5nIil0aHJvdyBuZXcgVHlwZUVycm9yKCJQYXRoIG11c3QgYmUgYSBzdHJpbmcuIFJlY2VpdmVkICIrSlNPTi5zdHJpbmdpZnkodSkpfW8oYSwiZSIpO2Z1bmN0aW9uIHModSxoKXtmb3IodmFyIGYsZD0iIixwPTAsbT0tMSxnPTAseT0wO3k8PXUubGVuZ3RoOysreSl7aWYoeTx1Lmxlbmd0aClmPXUuY2hhckNvZGVBdCh5KTtlbHNle2lmKGY9PT00NylicmVhaztmPTQ3fWlmKGY9PT00Nyl7aWYoIShtPT09eS0xfHxnPT09MSkpaWYobSE9PXktMSYmZz09PTIpe2lmKGQubGVuZ3RoPDJ8fHAhPT0yfHxkLmNoYXJDb2RlQXQoZC5sZW5ndGgtMSkhPT00Nnx8ZC5jaGFyQ29kZUF0KGQubGVuZ3RoLTIpIT09NDYpe2lmKGQubGVuZ3RoPjIpe3ZhciB2PWQubGFzdEluZGV4T2YoIi8iKTtpZih2IT09ZC5sZW5ndGgtMSl7dj09PS0xPyhkPSIiLHA9MCk6cD0oZD1kLnNsaWNlKDAsdikpLmxlbmd0aC0xLWQubGFzdEluZGV4T2YoIi8iKSxtPXksZz0wO2NvbnRpbnVlfX1lbHNlIGlmKGQubGVuZ3RoPT09Mnx8ZC5sZW5ndGg9PT0xKXtkPSIiLHA9MCxtPXksZz0wO2NvbnRpbnVlfX1oJiYoZC5sZW5ndGg+MD9kKz0iLy4uIjpkPSIuLiIscD0yKX1lbHNlIGQubGVuZ3RoPjA/ZCs9Ii8iK3Uuc2xpY2UobSsxLHkpOmQ9dS5zbGljZShtKzEseSkscD15LW0tMTttPXksZz0wfWVsc2UgZj09PTQ2JiZnIT09LTE/KytnOmc9LTF9cmV0dXJuIGR9byhzLCJyIik7dmFyIGw9e3Jlc29sdmU6byhmdW5jdGlvbigpe2Zvcih2YXIgdSxoPSIiLGY9ITEsZD1hcmd1bWVudHMubGVuZ3RoLTE7ZD49LTEmJiFmO2QtLSl7dmFyIHA7ZD49MD9wPWFyZ3VtZW50c1tkXToodT09PXZvaWQgMCYmKHU9cHJvY2Vzcy5jd2QoKSkscD11KSxhKHApLHAubGVuZ3RoIT09MCYmKGg9cCsiLyIraCxmPXAuY2hhckNvZGVBdCgwKT09PTQ3KX1yZXR1cm4gaD1zKGgsIWYpLGY/aC5sZW5ndGg+MD8iLyIraDoiLyI6aC5sZW5ndGg+MD9oOiIuIn0sInJlc29sdmUiKSxub3JtYWxpemU6byhmdW5jdGlvbih1KXtpZihhKHUpLHUubGVuZ3RoPT09MClyZXR1cm4iLiI7dmFyIGg9dS5jaGFyQ29kZUF0KDApPT09NDcsZj11LmNoYXJDb2RlQXQodS5sZW5ndGgtMSk9PT00NztyZXR1cm4odT1zKHUsIWgpKS5sZW5ndGghPT0wfHxofHwodT0iLiIpLHUubGVuZ3RoPjAmJmYmJih1Kz0iLyIpLGg/Ii8iK3U6dX0sIm5vcm1hbGl6ZSIpLGlzQWJzb2x1dGU6byhmdW5jdGlvbih1KXtyZXR1cm4gYSh1KSx1Lmxlbmd0aD4wJiZ1LmNoYXJDb2RlQXQoMCk9PT00N30sImlzQWJzb2x1dGUiKSxqb2luOm8oZnVuY3Rpb24oKXtpZihhcmd1bWVudHMubGVuZ3RoPT09MClyZXR1cm4iLiI7Zm9yKHZhciB1LGg9MDtoPGFyZ3VtZW50cy5sZW5ndGg7KytoKXt2YXIgZj1hcmd1bWVudHNbaF07YShmKSxmLmxlbmd0aD4wJiYodT09PXZvaWQgMD91PWY6dSs9Ii8iK2YpfXJldHVybiB1PT09dm9pZCAwPyIuIjpsLm5vcm1hbGl6ZSh1KX0sImpvaW4iKSxyZWxhdGl2ZTpvKGZ1bmN0aW9uKHUsaCl7aWYoYSh1KSxhKGgpLHU9PT1ofHwodT1sLnJlc29sdmUodSkpPT09KGg9bC5yZXNvbHZlKGgpKSlyZXR1cm4iIjtmb3IodmFyIGY9MTtmPHUubGVuZ3RoJiZ1LmNoYXJDb2RlQXQoZik9PT00NzsrK2YpO2Zvcih2YXIgZD11Lmxlbmd0aCxwPWQtZixtPTE7bTxoLmxlbmd0aCYmaC5jaGFyQ29kZUF0KG0pPT09NDc7KyttKTtmb3IodmFyIGc9aC5sZW5ndGgtbSx5PXA8Zz9wOmcsdj0tMSx4PTA7eDw9eTsrK3gpe2lmKHg9PT15KXtpZihnPnkpe2lmKGguY2hhckNvZGVBdChtK3gpPT09NDcpcmV0dXJuIGguc2xpY2UobSt4KzEpO2lmKHg9PT0wKXJldHVybiBoLnNsaWNlKG0reCl9ZWxzZSBwPnkmJih1LmNoYXJDb2RlQXQoZit4KT09PTQ3P3Y9eDp4PT09MCYmKHY9MCkpO2JyZWFrfXZhciBiPXUuY2hhckNvZGVBdChmK3gpO2lmKGIhPT1oLmNoYXJDb2RlQXQobSt4KSlicmVhaztiPT09NDcmJih2PXgpfXZhciB3PSIiO2Zvcih4PWYrdisxO3g8PWQ7Kyt4KXghPT1kJiZ1LmNoYXJDb2RlQXQoeCkhPT00N3x8KHcubGVuZ3RoPT09MD93Kz0iLi4iOncrPSIvLi4iKTtyZXR1cm4gdy5sZW5ndGg+MD93K2guc2xpY2UobSt2KToobSs9dixoLmNoYXJDb2RlQXQobSk9PT00NyYmKyttLGguc2xpY2UobSkpfSwicmVsYXRpdmUiKSxfbWFrZUxvbmc6byhmdW5jdGlvbih1KXtyZXR1cm4gdX0sIl9tYWtlTG9uZyIpLGRpcm5hbWU6byhmdW5jdGlvbih1KXtpZihhKHUpLHUubGVuZ3RoPT09MClyZXR1cm4iLiI7Zm9yKHZhciBoPXUuY2hhckNvZGVBdCgwKSxmPWg9PT00NyxkPS0xLHA9ITAsbT11Lmxlbmd0aC0xO20+PTE7LS1tKWlmKChoPXUuY2hhckNvZGVBdChtKSk9PT00Nyl7aWYoIXApe2Q9bTticmVha319ZWxzZSBwPSExO3JldHVybiBkPT09LTE/Zj8iLyI6Ii4iOmYmJmQ9PT0xPyIvLyI6dS5zbGljZSgwLGQpfSwiZGlybmFtZSIpLGJhc2VuYW1lOm8oZnVuY3Rpb24odSxoKXtpZihoIT09dm9pZCAwJiZ0eXBlb2YgaCE9InN0cmluZyIpdGhyb3cgbmV3IFR5cGVFcnJvcignImV4dCIgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZycpO2EodSk7dmFyIGYsZD0wLHA9LTEsbT0hMDtpZihoIT09dm9pZCAwJiZoLmxlbmd0aD4wJiZoLmxlbmd0aDw9dS5sZW5ndGgpe2lmKGgubGVuZ3RoPT09dS5sZW5ndGgmJmg9PT11KXJldHVybiIiO3ZhciBnPWgubGVuZ3RoLTEseT0tMTtmb3IoZj11Lmxlbmd0aC0xO2Y+PTA7LS1mKXt2YXIgdj11LmNoYXJDb2RlQXQoZik7aWYodj09PTQ3KXtpZighbSl7ZD1mKzE7YnJlYWt9fWVsc2UgeT09PS0xJiYobT0hMSx5PWYrMSksZz49MCYmKHY9PT1oLmNoYXJDb2RlQXQoZyk/LS1nPT0tMSYmKHA9Zik6KGc9LTEscD15KSl9cmV0dXJuIGQ9PT1wP3A9eTpwPT09LTEmJihwPXUubGVuZ3RoKSx1LnNsaWNlKGQscCl9Zm9yKGY9dS5sZW5ndGgtMTtmPj0wOy0tZilpZih1LmNoYXJDb2RlQXQoZik9PT00Nyl7aWYoIW0pe2Q9ZisxO2JyZWFrfX1lbHNlIHA9PT0tMSYmKG09ITEscD1mKzEpO3JldHVybiBwPT09LTE/IiI6dS5zbGljZShkLHApfSwiYmFzZW5hbWUiKSxleHRuYW1lOm8oZnVuY3Rpb24odSl7YSh1KTtmb3IodmFyIGg9LTEsZj0wLGQ9LTEscD0hMCxtPTAsZz11Lmxlbmd0aC0xO2c+PTA7LS1nKXt2YXIgeT11LmNoYXJDb2RlQXQoZyk7aWYoeSE9PTQ3KWQ9PT0tMSYmKHA9ITEsZD1nKzEpLHk9PT00Nj9oPT09LTE/aD1nOm0hPT0xJiYobT0xKTpoIT09LTEmJihtPS0xKTtlbHNlIGlmKCFwKXtmPWcrMTticmVha319cmV0dXJuIGg9PT0tMXx8ZD09PS0xfHxtPT09MHx8bT09PTEmJmg9PT1kLTEmJmg9PT1mKzE/IiI6dS5zbGljZShoLGQpfSwiZXh0bmFtZSIpLGZvcm1hdDpvKGZ1bmN0aW9uKHUpe2lmKHU9PT1udWxsfHx0eXBlb2YgdSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJwYXRoT2JqZWN0IiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIHUpO3JldHVybiBmdW5jdGlvbihoLGYpe3ZhciBkPWYuZGlyfHxmLnJvb3QscD1mLmJhc2V8fChmLm5hbWV8fCIiKSsoZi5leHR8fCIiKTtyZXR1cm4gZD9kPT09Zi5yb290P2QrcDpkKyIvIitwOnB9KDAsdSl9LCJmb3JtYXQiKSxwYXJzZTpvKGZ1bmN0aW9uKHUpe2EodSk7dmFyIGg9e3Jvb3Q6IiIsZGlyOiIiLGJhc2U6IiIsZXh0OiIiLG5hbWU6IiJ9O2lmKHUubGVuZ3RoPT09MClyZXR1cm4gaDt2YXIgZixkPXUuY2hhckNvZGVBdCgwKSxwPWQ9PT00NztwPyhoLnJvb3Q9Ii8iLGY9MSk6Zj0wO2Zvcih2YXIgbT0tMSxnPTAseT0tMSx2PSEwLHg9dS5sZW5ndGgtMSxiPTA7eD49ZjstLXgpaWYoKGQ9dS5jaGFyQ29kZUF0KHgpKSE9PTQ3KXk9PT0tMSYmKHY9ITEseT14KzEpLGQ9PT00Nj9tPT09LTE/bT14OmIhPT0xJiYoYj0xKTptIT09LTEmJihiPS0xKTtlbHNlIGlmKCF2KXtnPXgrMTticmVha31yZXR1cm4gbT09PS0xfHx5PT09LTF8fGI9PT0wfHxiPT09MSYmbT09PXktMSYmbT09PWcrMT95IT09LTEmJihoLmJhc2U9aC5uYW1lPWc9PT0wJiZwP3Uuc2xpY2UoMSx5KTp1LnNsaWNlKGcseSkpOihnPT09MCYmcD8oaC5uYW1lPXUuc2xpY2UoMSxtKSxoLmJhc2U9dS5zbGljZSgxLHkpKTooaC5uYW1lPXUuc2xpY2UoZyxtKSxoLmJhc2U9dS5zbGljZShnLHkpKSxoLmV4dD11LnNsaWNlKG0seSkpLGc+MD9oLmRpcj11LnNsaWNlKDAsZy0xKTpwJiYoaC5kaXI9Ii8iKSxofSwicGFyc2UiKSxzZXA6Ii8iLGRlbGltaXRlcjoiOiIsd2luMzI6bnVsbCxwb3NpeDpudWxsfTtsLnBvc2l4PWwsaS5leHBvcnRzPWx9fSxlPXt9O2Z1bmN0aW9uIHIoaSl7dmFyIGE9ZVtpXTtpZihhIT09dm9pZCAwKXJldHVybiBhLmV4cG9ydHM7dmFyIHM9ZVtpXT17ZXhwb3J0czp7fX07cmV0dXJuIHRbaV0ocyxzLmV4cG9ydHMscikscy5leHBvcnRzfW8ociwiciIpLHIuZD0oaSxhKT0+e2Zvcih2YXIgcyBpbiBhKXIubyhhLHMpJiYhci5vKGkscykmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLHMse2VudW1lcmFibGU6ITAsZ2V0OmFbc119KX0sci5vPShpLGEpPT5PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSxhKSxyLnI9aT0+e3R5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9O3ZhciBuPXt9OygoKT0+e2xldCBpO3IucihuKSxyLmQobix7VVJJOm8oKCk9PnAsIlVSSSIpLFV0aWxzOm8oKCk9PkksIlV0aWxzIil9KSx0eXBlb2YgcHJvY2Vzcz09Im9iamVjdCI/aT1wcm9jZXNzLnBsYXRmb3JtPT09IndpbjMyIjp0eXBlb2YgbmF2aWdhdG9yPT0ib2JqZWN0IiYmKGk9bmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJXaW5kb3dzIik+PTApO2xldCBhPS9eXHdbXHdcZCsuLV0qJC8scz0vXlwvLyxsPS9eXC9cLy87ZnVuY3Rpb24gdShELGspe2lmKCFELnNjaGVtZSYmayl0aHJvdyBuZXcgRXJyb3IoYFtVcmlFcnJvcl06IFNjaGVtZSBpcyBtaXNzaW5nOiB7c2NoZW1lOiAiIiwgYXV0aG9yaXR5OiAiJHtELmF1dGhvcml0eX0iLCBwYXRoOiAiJHtELnBhdGh9IiwgcXVlcnk6ICIke0QucXVlcnl9IiwgZnJhZ21lbnQ6ICIke0QuZnJhZ21lbnR9In1gKTtpZihELnNjaGVtZSYmIWEudGVzdChELnNjaGVtZSkpdGhyb3cgbmV3IEVycm9yKCJbVXJpRXJyb3JdOiBTY2hlbWUgY29udGFpbnMgaWxsZWdhbCBjaGFyYWN0ZXJzLiIpO2lmKEQucGF0aCl7aWYoRC5hdXRob3JpdHkpe2lmKCFzLnRlc3QoRC5wYXRoKSl0aHJvdyBuZXcgRXJyb3IoJ1tVcmlFcnJvcl06IElmIGEgVVJJIGNvbnRhaW5zIGFuIGF1dGhvcml0eSBjb21wb25lbnQsIHRoZW4gdGhlIHBhdGggY29tcG9uZW50IG11c3QgZWl0aGVyIGJlIGVtcHR5IG9yIGJlZ2luIHdpdGggYSBzbGFzaCAoIi8iKSBjaGFyYWN0ZXInKX1lbHNlIGlmKGwudGVzdChELnBhdGgpKXRocm93IG5ldyBFcnJvcignW1VyaUVycm9yXTogSWYgYSBVUkkgZG9lcyBub3QgY29udGFpbiBhbiBhdXRob3JpdHkgY29tcG9uZW50LCB0aGVuIHRoZSBwYXRoIGNhbm5vdCBiZWdpbiB3aXRoIHR3byBzbGFzaCBjaGFyYWN0ZXJzICgiLy8iKScpfX1vKHUsInMiKTtsZXQgaD0iIixmPSIvIixkPS9eKChbXjovPyNdKz8pOik/KFwvXC8oW14vPyNdKikpPyhbXj8jXSopKFw/KFteI10qKSk/KCMoLiopKT8vO2NsYXNzIHB7c3RhdGlje28odGhpcywiZiIpfXN0YXRpYyBpc1VyaShrKXtyZXR1cm4gayBpbnN0YW5jZW9mIHB8fCEhayYmdHlwZW9mIGsuYXV0aG9yaXR5PT0ic3RyaW5nIiYmdHlwZW9mIGsuZnJhZ21lbnQ9PSJzdHJpbmciJiZ0eXBlb2Ygay5wYXRoPT0ic3RyaW5nIiYmdHlwZW9mIGsucXVlcnk9PSJzdHJpbmciJiZ0eXBlb2Ygay5zY2hlbWU9PSJzdHJpbmciJiZ0eXBlb2Ygay5mc1BhdGg9PSJzdHJpbmciJiZ0eXBlb2Ygay53aXRoPT0iZnVuY3Rpb24iJiZ0eXBlb2Ygay50b1N0cmluZz09ImZ1bmN0aW9uIn1zY2hlbWU7YXV0aG9yaXR5O3BhdGg7cXVlcnk7ZnJhZ21lbnQ7Y29uc3RydWN0b3IoayxMLFIsTyxNLEI9ITEpe3R5cGVvZiBrPT0ib2JqZWN0Ij8odGhpcy5zY2hlbWU9ay5zY2hlbWV8fGgsdGhpcy5hdXRob3JpdHk9ay5hdXRob3JpdHl8fGgsdGhpcy5wYXRoPWsucGF0aHx8aCx0aGlzLnF1ZXJ5PWsucXVlcnl8fGgsdGhpcy5mcmFnbWVudD1rLmZyYWdtZW50fHxoKToodGhpcy5zY2hlbWU9ZnVuY3Rpb24oRixQKXtyZXR1cm4gRnx8UD9GOiJmaWxlIn0oayxCKSx0aGlzLmF1dGhvcml0eT1MfHxoLHRoaXMucGF0aD1mdW5jdGlvbihGLFApe3N3aXRjaChGKXtjYXNlImh0dHBzIjpjYXNlImh0dHAiOmNhc2UiZmlsZSI6UD9QWzBdIT09ZiYmKFA9ZitQKTpQPWZ9cmV0dXJuIFB9KHRoaXMuc2NoZW1lLFJ8fGgpLHRoaXMucXVlcnk9T3x8aCx0aGlzLmZyYWdtZW50PU18fGgsdSh0aGlzLEIpKX1nZXQgZnNQYXRoKCl7cmV0dXJuIGIodGhpcywhMSl9d2l0aChrKXtpZighaylyZXR1cm4gdGhpcztsZXR7c2NoZW1lOkwsYXV0aG9yaXR5OlIscGF0aDpPLHF1ZXJ5Ok0sZnJhZ21lbnQ6Qn09aztyZXR1cm4gTD09PXZvaWQgMD9MPXRoaXMuc2NoZW1lOkw9PT1udWxsJiYoTD1oKSxSPT09dm9pZCAwP1I9dGhpcy5hdXRob3JpdHk6Uj09PW51bGwmJihSPWgpLE89PT12b2lkIDA/Tz10aGlzLnBhdGg6Tz09PW51bGwmJihPPWgpLE09PT12b2lkIDA/TT10aGlzLnF1ZXJ5Ok09PT1udWxsJiYoTT1oKSxCPT09dm9pZCAwP0I9dGhpcy5mcmFnbWVudDpCPT09bnVsbCYmKEI9aCksTD09PXRoaXMuc2NoZW1lJiZSPT09dGhpcy5hdXRob3JpdHkmJk89PT10aGlzLnBhdGgmJk09PT10aGlzLnF1ZXJ5JiZCPT09dGhpcy5mcmFnbWVudD90aGlzOm5ldyBnKEwsUixPLE0sQil9c3RhdGljIHBhcnNlKGssTD0hMSl7bGV0IFI9ZC5leGVjKGspO3JldHVybiBSP25ldyBnKFJbMl18fGgsRShSWzRdfHxoKSxFKFJbNV18fGgpLEUoUls3XXx8aCksRShSWzldfHxoKSxMKTpuZXcgZyhoLGgsaCxoLGgpfXN0YXRpYyBmaWxlKGspe2xldCBMPWg7aWYoaSYmKGs9ay5yZXBsYWNlKC9cXC9nLGYpKSxrWzBdPT09ZiYma1sxXT09PWYpe2xldCBSPWsuaW5kZXhPZihmLDIpO1I9PT0tMT8oTD1rLnN1YnN0cmluZygyKSxrPWYpOihMPWsuc3Vic3RyaW5nKDIsUiksaz1rLnN1YnN0cmluZyhSKXx8Zil9cmV0dXJuIG5ldyBnKCJmaWxlIixMLGssaCxoKX1zdGF0aWMgZnJvbShrKXtsZXQgTD1uZXcgZyhrLnNjaGVtZSxrLmF1dGhvcml0eSxrLnBhdGgsay5xdWVyeSxrLmZyYWdtZW50KTtyZXR1cm4gdShMLCEwKSxMfXRvU3RyaW5nKGs9ITEpe3JldHVybiB3KHRoaXMsayl9dG9KU09OKCl7cmV0dXJuIHRoaXN9c3RhdGljIHJldml2ZShrKXtpZihrKXtpZihrIGluc3RhbmNlb2YgcClyZXR1cm4gazt7bGV0IEw9bmV3IGcoayk7cmV0dXJuIEwuX2Zvcm1hdHRlZD1rLmV4dGVybmFsLEwuX2ZzUGF0aD1rLl9zZXA9PT1tP2suZnNQYXRoOm51bGwsTH19cmV0dXJuIGt9fWxldCBtPWk/MTp2b2lkIDA7Y2xhc3MgZyBleHRlbmRzIHB7c3RhdGlje28odGhpcywibCIpfV9mb3JtYXR0ZWQ9bnVsbDtfZnNQYXRoPW51bGw7Z2V0IGZzUGF0aCgpe3JldHVybiB0aGlzLl9mc1BhdGh8fCh0aGlzLl9mc1BhdGg9Yih0aGlzLCExKSksdGhpcy5fZnNQYXRofXRvU3RyaW5nKGs9ITEpe3JldHVybiBrP3codGhpcywhMCk6KHRoaXMuX2Zvcm1hdHRlZHx8KHRoaXMuX2Zvcm1hdHRlZD13KHRoaXMsITEpKSx0aGlzLl9mb3JtYXR0ZWQpfXRvSlNPTigpe2xldCBrPXskbWlkOjF9O3JldHVybiB0aGlzLl9mc1BhdGgmJihrLmZzUGF0aD10aGlzLl9mc1BhdGgsay5fc2VwPW0pLHRoaXMuX2Zvcm1hdHRlZCYmKGsuZXh0ZXJuYWw9dGhpcy5fZm9ybWF0dGVkKSx0aGlzLnBhdGgmJihrLnBhdGg9dGhpcy5wYXRoKSx0aGlzLnNjaGVtZSYmKGsuc2NoZW1lPXRoaXMuc2NoZW1lKSx0aGlzLmF1dGhvcml0eSYmKGsuYXV0aG9yaXR5PXRoaXMuYXV0aG9yaXR5KSx0aGlzLnF1ZXJ5JiYoay5xdWVyeT10aGlzLnF1ZXJ5KSx0aGlzLmZyYWdtZW50JiYoay5mcmFnbWVudD10aGlzLmZyYWdtZW50KSxrfX1sZXQgeT17NTg6IiUzQSIsNDc6IiUyRiIsNjM6IiUzRiIsMzU6IiUyMyIsOTE6IiU1QiIsOTM6IiU1RCIsNjQ6IiU0MCIsMzM6IiUyMSIsMzY6IiUyNCIsMzg6IiUyNiIsMzk6IiUyNyIsNDA6IiUyOCIsNDE6IiUyOSIsNDI6IiUyQSIsNDM6IiUyQiIsNDQ6IiUyQyIsNTk6IiUzQiIsNjE6IiUzRCIsMzI6IiUyMCJ9O2Z1bmN0aW9uIHYoRCxrLEwpe2xldCBSLE89LTE7Zm9yKGxldCBNPTA7TTxELmxlbmd0aDtNKyspe2xldCBCPUQuY2hhckNvZGVBdChNKTtpZihCPj05NyYmQjw9MTIyfHxCPj02NSYmQjw9OTB8fEI+PTQ4JiZCPD01N3x8Qj09PTQ1fHxCPT09NDZ8fEI9PT05NXx8Qj09PTEyNnx8ayYmQj09PTQ3fHxMJiZCPT09OTF8fEwmJkI9PT05M3x8TCYmQj09PTU4KU8hPT0tMSYmKFIrPWVuY29kZVVSSUNvbXBvbmVudChELnN1YnN0cmluZyhPLE0pKSxPPS0xKSxSIT09dm9pZCAwJiYoUis9RC5jaGFyQXQoTSkpO2Vsc2V7Uj09PXZvaWQgMCYmKFI9RC5zdWJzdHIoMCxNKSk7bGV0IEY9eVtCXTtGIT09dm9pZCAwPyhPIT09LTEmJihSKz1lbmNvZGVVUklDb21wb25lbnQoRC5zdWJzdHJpbmcoTyxNKSksTz0tMSksUis9Rik6Tz09PS0xJiYoTz1NKX19cmV0dXJuIE8hPT0tMSYmKFIrPWVuY29kZVVSSUNvbXBvbmVudChELnN1YnN0cmluZyhPKSkpLFIhPT12b2lkIDA/UjpEfW8odiwiZCIpO2Z1bmN0aW9uIHgoRCl7bGV0IGs7Zm9yKGxldCBMPTA7TDxELmxlbmd0aDtMKyspe2xldCBSPUQuY2hhckNvZGVBdChMKTtSPT09MzV8fFI9PT02Mz8oaz09PXZvaWQgMCYmKGs9RC5zdWJzdHIoMCxMKSksays9eVtSXSk6ayE9PXZvaWQgMCYmKGsrPURbTF0pfXJldHVybiBrIT09dm9pZCAwP2s6RH1vKHgsInAiKTtmdW5jdGlvbiBiKEQsayl7bGV0IEw7cmV0dXJuIEw9RC5hdXRob3JpdHkmJkQucGF0aC5sZW5ndGg+MSYmRC5zY2hlbWU9PT0iZmlsZSI/YC8vJHtELmF1dGhvcml0eX0ke0QucGF0aH1gOkQucGF0aC5jaGFyQ29kZUF0KDApPT09NDcmJihELnBhdGguY2hhckNvZGVBdCgxKT49NjUmJkQucGF0aC5jaGFyQ29kZUF0KDEpPD05MHx8RC5wYXRoLmNoYXJDb2RlQXQoMSk+PTk3JiZELnBhdGguY2hhckNvZGVBdCgxKTw9MTIyKSYmRC5wYXRoLmNoYXJDb2RlQXQoMik9PT01OD9rP0QucGF0aC5zdWJzdHIoMSk6RC5wYXRoWzFdLnRvTG93ZXJDYXNlKCkrRC5wYXRoLnN1YnN0cigyKTpELnBhdGgsaSYmKEw9TC5yZXBsYWNlKC9cLy9nLCJcXCIpKSxMfW8oYiwibSIpO2Z1bmN0aW9uIHcoRCxrKXtsZXQgTD1rP3g6dixSPSIiLHtzY2hlbWU6TyxhdXRob3JpdHk6TSxwYXRoOkIscXVlcnk6RixmcmFnbWVudDpQfT1EO2lmKE8mJihSKz1PLFIrPSI6IiksKE18fE89PT0iZmlsZSIpJiYoUis9ZixSKz1mKSxNKXtsZXQgej1NLmluZGV4T2YoIkAiKTtpZih6IT09LTEpe2xldCAkPU0uc3Vic3RyKDAseik7TT1NLnN1YnN0cih6KzEpLHo9JC5sYXN0SW5kZXhPZigiOiIpLHo9PT0tMT9SKz1MKCQsITEsITEpOihSKz1MKCQuc3Vic3RyKDAseiksITEsITEpLFIrPSI6IixSKz1MKCQuc3Vic3RyKHorMSksITEsITApKSxSKz0iQCJ9TT1NLnRvTG93ZXJDYXNlKCksej1NLmxhc3RJbmRleE9mKCI6Iiksej09PS0xP1IrPUwoTSwhMSwhMCk6KFIrPUwoTS5zdWJzdHIoMCx6KSwhMSwhMCksUis9TS5zdWJzdHIoeikpfWlmKEIpe2lmKEIubGVuZ3RoPj0zJiZCLmNoYXJDb2RlQXQoMCk9PT00NyYmQi5jaGFyQ29kZUF0KDIpPT09NTgpe2xldCB6PUIuY2hhckNvZGVBdCgxKTt6Pj02NSYmejw9OTAmJihCPWAvJHtTdHJpbmcuZnJvbUNoYXJDb2RlKHorMzIpfToke0Iuc3Vic3RyKDMpfWApfWVsc2UgaWYoQi5sZW5ndGg+PTImJkIuY2hhckNvZGVBdCgxKT09PTU4KXtsZXQgej1CLmNoYXJDb2RlQXQoMCk7ej49NjUmJno8PTkwJiYoQj1gJHtTdHJpbmcuZnJvbUNoYXJDb2RlKHorMzIpfToke0Iuc3Vic3RyKDIpfWApfVIrPUwoQiwhMCwhMSl9cmV0dXJuIEYmJihSKz0iPyIsUis9TChGLCExLCExKSksUCYmKFIrPSIjIixSKz1rP1A6dihQLCExLCExKSksUn1vKHcsInkiKTtmdW5jdGlvbiBDKEQpe3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KEQpfWNhdGNoe3JldHVybiBELmxlbmd0aD4zP0Quc3Vic3RyKDAsMykrQyhELnN1YnN0cigzKSk6RH19byhDLCJ2Iik7bGV0IFQ9LyglWzAtOUEtWmEtel1bMC05QS1aYS16XSkrL2c7ZnVuY3Rpb24gRShEKXtyZXR1cm4gRC5tYXRjaChUKT9ELnJlcGxhY2UoVCxrPT5DKGspKTpEfW8oRSwiQyIpO3ZhciBBPXIoNDcwKTtsZXQgUz1BLnBvc2l4fHxBLF89Ii8iO3ZhciBJOyhmdW5jdGlvbihEKXtELmpvaW5QYXRoPWZ1bmN0aW9uKGssLi4uTCl7cmV0dXJuIGsud2l0aCh7cGF0aDpTLmpvaW4oay5wYXRoLC4uLkwpfSl9LEQucmVzb2x2ZVBhdGg9ZnVuY3Rpb24oaywuLi5MKXtsZXQgUj1rLnBhdGgsTz0hMTtSWzBdIT09XyYmKFI9XytSLE89ITApO2xldCBNPVMucmVzb2x2ZShSLC4uLkwpO3JldHVybiBPJiZNWzBdPT09XyYmIWsuYXV0aG9yaXR5JiYoTT1NLnN1YnN0cmluZygxKSksay53aXRoKHtwYXRoOk19KX0sRC5kaXJuYW1lPWZ1bmN0aW9uKGspe2lmKGsucGF0aC5sZW5ndGg9PT0wfHxrLnBhdGg9PT1fKXJldHVybiBrO2xldCBMPVMuZGlybmFtZShrLnBhdGgpO3JldHVybiBMLmxlbmd0aD09PTEmJkwuY2hhckNvZGVBdCgwKT09PTQ2JiYoTD0iIiksay53aXRoKHtwYXRoOkx9KX0sRC5iYXNlbmFtZT1mdW5jdGlvbihrKXtyZXR1cm4gUy5iYXNlbmFtZShrLnBhdGgpfSxELmV4dG5hbWU9ZnVuY3Rpb24oayl7cmV0dXJuIFMuZXh0bmFtZShrLnBhdGgpfX0pKEl8fChJPXt9KSl9KSgpLEhsZT1ufSkoKTsoe1VSSTp1cyxVdGlsczp1MX09SGxlKX0pO3ZhciBocyxGYz1OKCgpPT57InVzZSBzdHJpY3QiO09NKCk7KGZ1bmN0aW9uKHQpe3QuYmFzZW5hbWU9dTEuYmFzZW5hbWUsdC5kaXJuYW1lPXUxLmRpcm5hbWUsdC5leHRuYW1lPXUxLmV4dG5hbWUsdC5qb2luUGF0aD11MS5qb2luUGF0aCx0LnJlc29sdmVQYXRoPXUxLnJlc29sdmVQYXRoO2Z1bmN0aW9uIGUoaSxhKXtyZXR1cm4gaT8udG9TdHJpbmcoKT09PWE/LnRvU3RyaW5nKCl9byhlLCJlcXVhbHMiKSx0LmVxdWFscz1lO2Z1bmN0aW9uIHIoaSxhKXtsZXQgcz10eXBlb2YgaT09InN0cmluZyI/aTppLnBhdGgsbD10eXBlb2YgYT09InN0cmluZyI/YTphLnBhdGgsdT1zLnNwbGl0KCIvIikuZmlsdGVyKG09Pm0ubGVuZ3RoPjApLGg9bC5zcGxpdCgiLyIpLmZpbHRlcihtPT5tLmxlbmd0aD4wKSxmPTA7Zm9yKDtmPHUubGVuZ3RoJiZ1W2ZdPT09aFtmXTtmKyspO2xldCBkPSIuLi8iLnJlcGVhdCh1Lmxlbmd0aC1mKSxwPWguc2xpY2UoZikuam9pbigiLyIpO3JldHVybiBkK3B9byhyLCJyZWxhdGl2ZSIpLHQucmVsYXRpdmU9cjtmdW5jdGlvbiBuKGkpe3JldHVybiB1cy5wYXJzZShpLnRvU3RyaW5nKCkpLnRvU3RyaW5nKCl9byhuLCJub3JtYWxpemUiKSx0Lm5vcm1hbGl6ZT1ufSkoaHN8fChocz17fSkpfSk7dmFyIGtuLE54LE14LGgxPU4oKCk9PnsidXNlIHN0cmljdCI7VWxlKCk7aDEoKTtxbygpO1BzKCk7RmMoKTsoZnVuY3Rpb24odCl7dFt0LkNoYW5nZWQ9MF09IkNoYW5nZWQiLHRbdC5QYXJzZWQ9MV09IlBhcnNlZCIsdFt0LkluZGV4ZWRDb250ZW50PTJdPSJJbmRleGVkQ29udGVudCIsdFt0LkNvbXB1dGVkU2NvcGVzPTNdPSJDb21wdXRlZFNjb3BlcyIsdFt0LkxpbmtlZD00XT0iTGlua2VkIix0W3QuSW5kZXhlZFJlZmVyZW5jZXM9NV09IkluZGV4ZWRSZWZlcmVuY2VzIix0W3QuVmFsaWRhdGVkPTZdPSJWYWxpZGF0ZWQifSkoa258fChrbj17fSkpO054PWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRMYW5naXVtRG9jdW1lbnRGYWN0b3J5Iil9Y29uc3RydWN0b3IoZSl7dGhpcy5zZXJ2aWNlUmVnaXN0cnk9ZS5TZXJ2aWNlUmVnaXN0cnksdGhpcy50ZXh0RG9jdW1lbnRzPWUud29ya3NwYWNlLlRleHREb2N1bWVudHMsdGhpcy5maWxlU3lzdGVtUHJvdmlkZXI9ZS53b3Jrc3BhY2UuRmlsZVN5c3RlbVByb3ZpZGVyfWFzeW5jIGZyb21VcmkoZSxyPXlyLkNhbmNlbGxhdGlvblRva2VuLk5vbmUpe2xldCBuPWF3YWl0IHRoaXMuZmlsZVN5c3RlbVByb3ZpZGVyLnJlYWRGaWxlKGUpO3JldHVybiB0aGlzLmNyZWF0ZUFzeW5jKGUsbixyKX1mcm9tVGV4dERvY3VtZW50KGUscixuKXtyZXR1cm4gcj1yPz91cy5wYXJzZShlLnVyaSkseXIuQ2FuY2VsbGF0aW9uVG9rZW4uaXMobik/dGhpcy5jcmVhdGVBc3luYyhyLGUsbik6dGhpcy5jcmVhdGUocixlLG4pfWZyb21TdHJpbmcoZSxyLG4pe3JldHVybiB5ci5DYW5jZWxsYXRpb25Ub2tlbi5pcyhuKT90aGlzLmNyZWF0ZUFzeW5jKHIsZSxuKTp0aGlzLmNyZWF0ZShyLGUsbil9ZnJvbU1vZGVsKGUscil7cmV0dXJuIHRoaXMuY3JlYXRlKHIseyRtb2RlbDplfSl9Y3JlYXRlKGUscixuKXtpZih0eXBlb2Ygcj09InN0cmluZyIpe2xldCBpPXRoaXMucGFyc2UoZSxyLG4pO3JldHVybiB0aGlzLmNyZWF0ZUxhbmdpdW1Eb2N1bWVudChpLGUsdm9pZCAwLHIpfWVsc2UgaWYoIiRtb2RlbCJpbiByKXtsZXQgaT17dmFsdWU6ci4kbW9kZWwscGFyc2VyRXJyb3JzOltdLGxleGVyRXJyb3JzOltdfTtyZXR1cm4gdGhpcy5jcmVhdGVMYW5naXVtRG9jdW1lbnQoaSxlKX1lbHNle2xldCBpPXRoaXMucGFyc2UoZSxyLmdldFRleHQoKSxuKTtyZXR1cm4gdGhpcy5jcmVhdGVMYW5naXVtRG9jdW1lbnQoaSxlLHIpfX1hc3luYyBjcmVhdGVBc3luYyhlLHIsbil7aWYodHlwZW9mIHI9PSJzdHJpbmciKXtsZXQgaT1hd2FpdCB0aGlzLnBhcnNlQXN5bmMoZSxyLG4pO3JldHVybiB0aGlzLmNyZWF0ZUxhbmdpdW1Eb2N1bWVudChpLGUsdm9pZCAwLHIpfWVsc2V7bGV0IGk9YXdhaXQgdGhpcy5wYXJzZUFzeW5jKGUsci5nZXRUZXh0KCksbik7cmV0dXJuIHRoaXMuY3JlYXRlTGFuZ2l1bURvY3VtZW50KGksZSxyKX19Y3JlYXRlTGFuZ2l1bURvY3VtZW50KGUscixuLGkpe2xldCBhO2lmKG4pYT17cGFyc2VSZXN1bHQ6ZSx1cmk6cixzdGF0ZTprbi5QYXJzZWQscmVmZXJlbmNlczpbXSx0ZXh0RG9jdW1lbnQ6bn07ZWxzZXtsZXQgcz10aGlzLmNyZWF0ZVRleHREb2N1bWVudEdldHRlcihyLGkpO2E9e3BhcnNlUmVzdWx0OmUsdXJpOnIsc3RhdGU6a24uUGFyc2VkLHJlZmVyZW5jZXM6W10sZ2V0IHRleHREb2N1bWVudCgpe3JldHVybiBzKCl9fX1yZXR1cm4gZS52YWx1ZS4kZG9jdW1lbnQ9YSxhfWFzeW5jIHVwZGF0ZShlLHIpe3ZhciBuLGk7bGV0IGE9KG49ZS5wYXJzZVJlc3VsdC52YWx1ZS4kY3N0Tm9kZSk9PT1udWxsfHxuPT09dm9pZCAwP3ZvaWQgMDpuLnJvb3QuZnVsbFRleHQscz0oaT10aGlzLnRleHREb2N1bWVudHMpPT09bnVsbHx8aT09PXZvaWQgMD92b2lkIDA6aS5nZXQoZS51cmkudG9TdHJpbmcoKSksbD1zP3MuZ2V0VGV4dCgpOmF3YWl0IHRoaXMuZmlsZVN5c3RlbVByb3ZpZGVyLnJlYWRGaWxlKGUudXJpKTtpZihzKU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJ0ZXh0RG9jdW1lbnQiLHt2YWx1ZTpzfSk7ZWxzZXtsZXQgdT10aGlzLmNyZWF0ZVRleHREb2N1bWVudEdldHRlcihlLnVyaSxsKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwidGV4dERvY3VtZW50Iix7Z2V0OnV9KX1yZXR1cm4gYSE9PWwmJihlLnBhcnNlUmVzdWx0PWF3YWl0IHRoaXMucGFyc2VBc3luYyhlLnVyaSxsLHIpLGUucGFyc2VSZXN1bHQudmFsdWUuJGRvY3VtZW50PWUpLGUuc3RhdGU9a24uUGFyc2VkLGV9cGFyc2UoZSxyLG4pe3JldHVybiB0aGlzLnNlcnZpY2VSZWdpc3RyeS5nZXRTZXJ2aWNlcyhlKS5wYXJzZXIuTGFuZ2l1bVBhcnNlci5wYXJzZShyLG4pfXBhcnNlQXN5bmMoZSxyLG4pe3JldHVybiB0aGlzLnNlcnZpY2VSZWdpc3RyeS5nZXRTZXJ2aWNlcyhlKS5wYXJzZXIuQXN5bmNQYXJzZXIucGFyc2UocixuKX1jcmVhdGVUZXh0RG9jdW1lbnRHZXR0ZXIoZSxyKXtsZXQgbj10aGlzLnNlcnZpY2VSZWdpc3RyeSxpO3JldHVybigpPT5pPz8oaT1jMS5jcmVhdGUoZS50b1N0cmluZygpLG4uZ2V0U2VydmljZXMoZSkuTGFuZ3VhZ2VNZXRhRGF0YS5sYW5ndWFnZUlkLDAscj8/IiIpKX19LE14PWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRMYW5naXVtRG9jdW1lbnRzIil9Y29uc3RydWN0b3IoZSl7dGhpcy5kb2N1bWVudE1hcD1uZXcgTWFwLHRoaXMubGFuZ2l1bURvY3VtZW50RmFjdG9yeT1lLndvcmtzcGFjZS5MYW5naXVtRG9jdW1lbnRGYWN0b3J5LHRoaXMuc2VydmljZVJlZ2lzdHJ5PWUuU2VydmljZVJlZ2lzdHJ5fWdldCBhbGwoKXtyZXR1cm4gZW4odGhpcy5kb2N1bWVudE1hcC52YWx1ZXMoKSl9YWRkRG9jdW1lbnQoZSl7bGV0IHI9ZS51cmkudG9TdHJpbmcoKTtpZih0aGlzLmRvY3VtZW50TWFwLmhhcyhyKSl0aHJvdyBuZXcgRXJyb3IoYEEgZG9jdW1lbnQgd2l0aCB0aGUgVVJJICcke3J9JyBpcyBhbHJlYWR5IHByZXNlbnQuYCk7dGhpcy5kb2N1bWVudE1hcC5zZXQocixlKX1nZXREb2N1bWVudChlKXtsZXQgcj1lLnRvU3RyaW5nKCk7cmV0dXJuIHRoaXMuZG9jdW1lbnRNYXAuZ2V0KHIpfWFzeW5jIGdldE9yQ3JlYXRlRG9jdW1lbnQoZSxyKXtsZXQgbj10aGlzLmdldERvY3VtZW50KGUpO3JldHVybiBufHwobj1hd2FpdCB0aGlzLmxhbmdpdW1Eb2N1bWVudEZhY3RvcnkuZnJvbVVyaShlLHIpLHRoaXMuYWRkRG9jdW1lbnQobiksbil9Y3JlYXRlRG9jdW1lbnQoZSxyLG4pe2lmKG4pcmV0dXJuIHRoaXMubGFuZ2l1bURvY3VtZW50RmFjdG9yeS5mcm9tU3RyaW5nKHIsZSxuKS50aGVuKGk9Pih0aGlzLmFkZERvY3VtZW50KGkpLGkpKTt7bGV0IGk9dGhpcy5sYW5naXVtRG9jdW1lbnRGYWN0b3J5LmZyb21TdHJpbmcocixlKTtyZXR1cm4gdGhpcy5hZGREb2N1bWVudChpKSxpfX1oYXNEb2N1bWVudChlKXtyZXR1cm4gdGhpcy5kb2N1bWVudE1hcC5oYXMoZS50b1N0cmluZygpKX1pbnZhbGlkYXRlRG9jdW1lbnQoZSl7bGV0IHI9ZS50b1N0cmluZygpLG49dGhpcy5kb2N1bWVudE1hcC5nZXQocik7cmV0dXJuIG4mJih0aGlzLnNlcnZpY2VSZWdpc3RyeS5nZXRTZXJ2aWNlcyhlKS5yZWZlcmVuY2VzLkxpbmtlci51bmxpbmsobiksbi5zdGF0ZT1rbi5DaGFuZ2VkLG4ucHJlY29tcHV0ZWRTY29wZXM9dm9pZCAwLG4uZGlhZ25vc3RpY3M9dm9pZCAwKSxufWRlbGV0ZURvY3VtZW50KGUpe2xldCByPWUudG9TdHJpbmcoKSxuPXRoaXMuZG9jdW1lbnRNYXAuZ2V0KHIpO3JldHVybiBuJiYobi5zdGF0ZT1rbi5DaGFuZ2VkLHRoaXMuZG9jdW1lbnRNYXAuZGVsZXRlKHIpKSxufX19KTt2YXIgUE0sSXgsQk09TigoKT0+eyJ1c2Ugc3RyaWN0IjtxbygpO1JsKCk7aXMoKTtZbygpO2gxKCk7UE09U3ltYm9sKCJyZWZfcmVzb2x2aW5nIiksSXg9Y2xhc3N7c3RhdGlje28odGhpcywiRGVmYXVsdExpbmtlciIpfWNvbnN0cnVjdG9yKGUpe3RoaXMucmVmbGVjdGlvbj1lLnNoYXJlZC5Bc3RSZWZsZWN0aW9uLHRoaXMubGFuZ2l1bURvY3VtZW50cz0oKT0+ZS5zaGFyZWQud29ya3NwYWNlLkxhbmdpdW1Eb2N1bWVudHMsdGhpcy5zY29wZVByb3ZpZGVyPWUucmVmZXJlbmNlcy5TY29wZVByb3ZpZGVyLHRoaXMuYXN0Tm9kZUxvY2F0b3I9ZS53b3Jrc3BhY2UuQXN0Tm9kZUxvY2F0b3J9YXN5bmMgbGluayhlLHI9eXIuQ2FuY2VsbGF0aW9uVG9rZW4uTm9uZSl7Zm9yKGxldCBuIG9mIFdvKGUucGFyc2VSZXN1bHQudmFsdWUpKWF3YWl0IHhpKHIpLEFnKG4pLmZvckVhY2goaT0+dGhpcy5kb0xpbmsoaSxlKSl9ZG9MaW5rKGUscil7dmFyIG47bGV0IGk9ZS5yZWZlcmVuY2U7aWYoaS5fcmVmPT09dm9pZCAwKXtpLl9yZWY9UE07dHJ5e2xldCBhPXRoaXMuZ2V0Q2FuZGlkYXRlKGUpO2lmKGpkKGEpKWkuX3JlZj1hO2Vsc2UgaWYoaS5fbm9kZURlc2NyaXB0aW9uPWEsdGhpcy5sYW5naXVtRG9jdW1lbnRzKCkuaGFzRG9jdW1lbnQoYS5kb2N1bWVudFVyaSkpe2xldCBzPXRoaXMubG9hZEFzdE5vZGUoYSk7aS5fcmVmPXM/P3RoaXMuY3JlYXRlTGlua2luZ0Vycm9yKGUsYSl9ZWxzZSBpLl9yZWY9dm9pZCAwfWNhdGNoKGEpe2NvbnNvbGUuZXJyb3IoYEFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlc29sdmluZyByZWZlcmVuY2UgdG8gJyR7aS4kcmVmVGV4dH0nOmAsYSk7bGV0IHM9KG49YS5tZXNzYWdlKSE9PW51bGwmJm4hPT12b2lkIDA/bjpTdHJpbmcoYSk7aS5fcmVmPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx7bWVzc2FnZTpgQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVzb2x2aW5nIHJlZmVyZW5jZSB0byAnJHtpLiRyZWZUZXh0fSc6ICR7c31gfSl9ci5yZWZlcmVuY2VzLnB1c2goaSl9fXVubGluayhlKXtmb3IobGV0IHIgb2YgZS5yZWZlcmVuY2VzKWRlbGV0ZSByLl9yZWYsZGVsZXRlIHIuX25vZGVEZXNjcmlwdGlvbjtlLnJlZmVyZW5jZXM9W119Z2V0Q2FuZGlkYXRlKGUpe2xldCBuPXRoaXMuc2NvcGVQcm92aWRlci5nZXRTY29wZShlKS5nZXRFbGVtZW50KGUucmVmZXJlbmNlLiRyZWZUZXh0KTtyZXR1cm4gbj8/dGhpcy5jcmVhdGVMaW5raW5nRXJyb3IoZSl9YnVpbGRSZWZlcmVuY2UoZSxyLG4saSl7bGV0IGE9dGhpcyxzPXskcmVmTm9kZTpuLCRyZWZUZXh0OmksZ2V0IHJlZigpe3ZhciBsO2lmKGlpKHRoaXMuX3JlZikpcmV0dXJuIHRoaXMuX3JlZjtpZihrUih0aGlzLl9ub2RlRGVzY3JpcHRpb24pKXtsZXQgdT1hLmxvYWRBc3ROb2RlKHRoaXMuX25vZGVEZXNjcmlwdGlvbik7dGhpcy5fcmVmPXU/P2EuY3JlYXRlTGlua2luZ0Vycm9yKHtyZWZlcmVuY2U6cyxjb250YWluZXI6ZSxwcm9wZXJ0eTpyfSx0aGlzLl9ub2RlRGVzY3JpcHRpb24pfWVsc2UgaWYodGhpcy5fcmVmPT09dm9pZCAwKXt0aGlzLl9yZWY9UE07bGV0IHU9SDIoZSkuJGRvY3VtZW50LGg9YS5nZXRMaW5rZWROb2RlKHtyZWZlcmVuY2U6cyxjb250YWluZXI6ZSxwcm9wZXJ0eTpyfSk7aWYoaC5lcnJvciYmdSYmdS5zdGF0ZTxrbi5Db21wdXRlZFNjb3BlcylyZXR1cm4gdGhpcy5fcmVmPXZvaWQgMDt0aGlzLl9yZWY9KGw9aC5ub2RlKSE9PW51bGwmJmwhPT12b2lkIDA/bDpoLmVycm9yLHRoaXMuX25vZGVEZXNjcmlwdGlvbj1oLmRlc2NyLHU/LnJlZmVyZW5jZXMucHVzaCh0aGlzKX1lbHNlIGlmKHRoaXMuX3JlZj09PVBNKXRocm93IG5ldyBFcnJvcihgQ3ljbGljIHJlZmVyZW5jZSByZXNvbHV0aW9uIGRldGVjdGVkOiAke2EuYXN0Tm9kZUxvY2F0b3IuZ2V0QXN0Tm9kZVBhdGgoZSl9LyR7cn0gKHN5bWJvbCAnJHtpfScpYCk7cmV0dXJuIGlpKHRoaXMuX3JlZik/dGhpcy5fcmVmOnZvaWQgMH0sZ2V0ICRub2RlRGVzY3JpcHRpb24oKXtyZXR1cm4gdGhpcy5fbm9kZURlc2NyaXB0aW9ufSxnZXQgZXJyb3IoKXtyZXR1cm4gamQodGhpcy5fcmVmKT90aGlzLl9yZWY6dm9pZCAwfX07cmV0dXJuIHN9Z2V0TGlua2VkTm9kZShlKXt2YXIgcjt0cnl7bGV0IG49dGhpcy5nZXRDYW5kaWRhdGUoZSk7aWYoamQobikpcmV0dXJue2Vycm9yOm59O2xldCBpPXRoaXMubG9hZEFzdE5vZGUobik7cmV0dXJuIGk/e25vZGU6aSxkZXNjcjpufTp7ZGVzY3I6bixlcnJvcjp0aGlzLmNyZWF0ZUxpbmtpbmdFcnJvcihlLG4pfX1jYXRjaChuKXtjb25zb2xlLmVycm9yKGBBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSByZXNvbHZpbmcgcmVmZXJlbmNlIHRvICcke2UucmVmZXJlbmNlLiRyZWZUZXh0fSc6YCxuKTtsZXQgaT0ocj1uLm1lc3NhZ2UpIT09bnVsbCYmciE9PXZvaWQgMD9yOlN0cmluZyhuKTtyZXR1cm57ZXJyb3I6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHttZXNzYWdlOmBBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSByZXNvbHZpbmcgcmVmZXJlbmNlIHRvICcke2UucmVmZXJlbmNlLiRyZWZUZXh0fSc6ICR7aX1gfSl9fX1sb2FkQXN0Tm9kZShlKXtpZihlLm5vZGUpcmV0dXJuIGUubm9kZTtsZXQgcj10aGlzLmxhbmdpdW1Eb2N1bWVudHMoKS5nZXREb2N1bWVudChlLmRvY3VtZW50VXJpKTtpZihyKXJldHVybiB0aGlzLmFzdE5vZGVMb2NhdG9yLmdldEFzdE5vZGUoci5wYXJzZVJlc3VsdC52YWx1ZSxlLnBhdGgpfWNyZWF0ZUxpbmtpbmdFcnJvcihlLHIpe2xldCBuPUgyKGUuY29udGFpbmVyKS4kZG9jdW1lbnQ7biYmbi5zdGF0ZTxrbi5Db21wdXRlZFNjb3BlcyYmY29uc29sZS53YXJuKGBBdHRlbXB0ZWQgcmVmZXJlbmNlIHJlc29sdXRpb24gYmVmb3JlIGRvY3VtZW50IHJlYWNoZWQgQ29tcHV0ZWRTY29wZXMgc3RhdGUgKCR7bi51cml9KS5gKTtsZXQgaT10aGlzLnJlZmxlY3Rpb24uZ2V0UmVmZXJlbmNlVHlwZShlKTtyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHttZXNzYWdlOmBDb3VsZCBub3QgcmVzb2x2ZSByZWZlcmVuY2UgdG8gJHtpfSBuYW1lZCAnJHtlLnJlZmVyZW5jZS4kcmVmVGV4dH0nLmAsdGFyZ2V0RGVzY3JpcHRpb246cn0pfX19KTtmdW5jdGlvbiBXbGUodCl7cmV0dXJuIHR5cGVvZiB0Lm5hbWU9PSJzdHJpbmcifXZhciBPeCxGTT1OKCgpPT57InVzZSBzdHJpY3QiO09sKCk7byhXbGUsImlzTmFtZWQiKTtPeD1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZhdWx0TmFtZVByb3ZpZGVyIil9Z2V0TmFtZShlKXtpZihXbGUoZSkpcmV0dXJuIGUubmFtZX1nZXROYW1lTm9kZShlKXtyZXR1cm4gUTIoZS4kY3N0Tm9kZSwibmFtZSIpfX19KTt2YXIgUHgsJE09TigoKT0+eyJ1c2Ugc3RyaWN0IjtPbCgpO1JsKCk7aXMoKTtObCgpO1BzKCk7RmMoKTtQeD1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZhdWx0UmVmZXJlbmNlcyIpfWNvbnN0cnVjdG9yKGUpe3RoaXMubmFtZVByb3ZpZGVyPWUucmVmZXJlbmNlcy5OYW1lUHJvdmlkZXIsdGhpcy5pbmRleD1lLnNoYXJlZC53b3Jrc3BhY2UuSW5kZXhNYW5hZ2VyLHRoaXMubm9kZUxvY2F0b3I9ZS53b3Jrc3BhY2UuQXN0Tm9kZUxvY2F0b3J9ZmluZERlY2xhcmF0aW9uKGUpe2lmKGUpe2xldCByPWhOKGUpLG49ZS5hc3ROb2RlO2lmKHImJm4pe2xldCBpPW5bci5mZWF0dXJlXTtpZih2YShpKSlyZXR1cm4gaS5yZWY7aWYoQXJyYXkuaXNBcnJheShpKSl7Zm9yKGxldCBhIG9mIGkpaWYodmEoYSkmJmEuJHJlZk5vZGUmJmEuJHJlZk5vZGUub2Zmc2V0PD1lLm9mZnNldCYmYS4kcmVmTm9kZS5lbmQ+PWUuZW5kKXJldHVybiBhLnJlZn19aWYobil7bGV0IGk9dGhpcy5uYW1lUHJvdmlkZXIuZ2V0TmFtZU5vZGUobik7aWYoaSYmKGk9PT1lfHxTUihlLGkpKSlyZXR1cm4gbn19fWZpbmREZWNsYXJhdGlvbk5vZGUoZSl7bGV0IHI9dGhpcy5maW5kRGVjbGFyYXRpb24oZSk7aWYocj8uJGNzdE5vZGUpe2xldCBuPXRoaXMubmFtZVByb3ZpZGVyLmdldE5hbWVOb2RlKHIpO3JldHVybiBuPz9yLiRjc3ROb2RlfX1maW5kUmVmZXJlbmNlcyhlLHIpe2xldCBuPVtdO2lmKHIuaW5jbHVkZURlY2xhcmF0aW9uKXtsZXQgYT10aGlzLmdldFJlZmVyZW5jZVRvU2VsZihlKTthJiZuLnB1c2goYSl9bGV0IGk9dGhpcy5pbmRleC5maW5kQWxsUmVmZXJlbmNlcyhlLHRoaXMubm9kZUxvY2F0b3IuZ2V0QXN0Tm9kZVBhdGgoZSkpO3JldHVybiByLmRvY3VtZW50VXJpJiYoaT1pLmZpbHRlcihhPT5ocy5lcXVhbHMoYS5zb3VyY2VVcmksci5kb2N1bWVudFVyaSkpKSxuLnB1c2goLi4uaSksZW4obil9Z2V0UmVmZXJlbmNlVG9TZWxmKGUpe2xldCByPXRoaXMubmFtZVByb3ZpZGVyLmdldE5hbWVOb2RlKGUpO2lmKHIpe2xldCBuPVBhKGUpLGk9dGhpcy5ub2RlTG9jYXRvci5nZXRBc3ROb2RlUGF0aChlKTtyZXR1cm57c291cmNlVXJpOm4udXJpLHNvdXJjZVBhdGg6aSx0YXJnZXRVcmk6bi51cmksdGFyZ2V0UGF0aDppLHNlZ21lbnQ6UWQociksbG9jYWw6ITB9fX19fSk7dmFyIEJsLHZwLGYxPU4oKCk9PnsidXNlIHN0cmljdCI7UHMoKTtCbD1jbGFzc3tzdGF0aWN7byh0aGlzLCJNdWx0aU1hcCIpfWNvbnN0cnVjdG9yKGUpe2lmKHRoaXMubWFwPW5ldyBNYXAsZSlmb3IobGV0W3Isbl1vZiBlKXRoaXMuYWRkKHIsbil9Z2V0IHNpemUoKXtyZXR1cm4gem0uc3VtKGVuKHRoaXMubWFwLnZhbHVlcygpKS5tYXAoZT0+ZS5sZW5ndGgpKX1jbGVhcigpe3RoaXMubWFwLmNsZWFyKCl9ZGVsZXRlKGUscil7aWYocj09PXZvaWQgMClyZXR1cm4gdGhpcy5tYXAuZGVsZXRlKGUpO3tsZXQgbj10aGlzLm1hcC5nZXQoZSk7aWYobil7bGV0IGk9bi5pbmRleE9mKHIpO2lmKGk+PTApcmV0dXJuIG4ubGVuZ3RoPT09MT90aGlzLm1hcC5kZWxldGUoZSk6bi5zcGxpY2UoaSwxKSwhMH1yZXR1cm4hMX19Z2V0KGUpe3ZhciByO3JldHVybihyPXRoaXMubWFwLmdldChlKSkhPT1udWxsJiZyIT09dm9pZCAwP3I6W119aGFzKGUscil7aWYocj09PXZvaWQgMClyZXR1cm4gdGhpcy5tYXAuaGFzKGUpO3tsZXQgbj10aGlzLm1hcC5nZXQoZSk7cmV0dXJuIG4/bi5pbmRleE9mKHIpPj0wOiExfX1hZGQoZSxyKXtyZXR1cm4gdGhpcy5tYXAuaGFzKGUpP3RoaXMubWFwLmdldChlKS5wdXNoKHIpOnRoaXMubWFwLnNldChlLFtyXSksdGhpc31hZGRBbGwoZSxyKXtyZXR1cm4gdGhpcy5tYXAuaGFzKGUpP3RoaXMubWFwLmdldChlKS5wdXNoKC4uLnIpOnRoaXMubWFwLnNldChlLEFycmF5LmZyb20ocikpLHRoaXN9Zm9yRWFjaChlKXt0aGlzLm1hcC5mb3JFYWNoKChyLG4pPT5yLmZvckVhY2goaT0+ZShpLG4sdGhpcykpKX1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiB0aGlzLmVudHJpZXMoKS5pdGVyYXRvcigpfWVudHJpZXMoKXtyZXR1cm4gZW4odGhpcy5tYXAuZW50cmllcygpKS5mbGF0TWFwKChbZSxyXSk9PnIubWFwKG49PltlLG5dKSl9a2V5cygpe3JldHVybiBlbih0aGlzLm1hcC5rZXlzKCkpfXZhbHVlcygpe3JldHVybiBlbih0aGlzLm1hcC52YWx1ZXMoKSkuZmxhdCgpfWVudHJpZXNHcm91cGVkQnlLZXkoKXtyZXR1cm4gZW4odGhpcy5tYXAuZW50cmllcygpKX19LHZwPWNsYXNze3N0YXRpY3tvKHRoaXMsIkJpTWFwIil9Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5tYXAuc2l6ZX1jb25zdHJ1Y3RvcihlKXtpZih0aGlzLm1hcD1uZXcgTWFwLHRoaXMuaW52ZXJzZT1uZXcgTWFwLGUpZm9yKGxldFtyLG5db2YgZSl0aGlzLnNldChyLG4pfWNsZWFyKCl7dGhpcy5tYXAuY2xlYXIoKSx0aGlzLmludmVyc2UuY2xlYXIoKX1zZXQoZSxyKXtyZXR1cm4gdGhpcy5tYXAuc2V0KGUsciksdGhpcy5pbnZlcnNlLnNldChyLGUpLHRoaXN9Z2V0KGUpe3JldHVybiB0aGlzLm1hcC5nZXQoZSl9Z2V0S2V5KGUpe3JldHVybiB0aGlzLmludmVyc2UuZ2V0KGUpfWRlbGV0ZShlKXtsZXQgcj10aGlzLm1hcC5nZXQoZSk7cmV0dXJuIHIhPT12b2lkIDA/KHRoaXMubWFwLmRlbGV0ZShlKSx0aGlzLmludmVyc2UuZGVsZXRlKHIpLCEwKTohMX19fSk7dmFyIEJ4LHpNPU4oKCk9PnsidXNlIHN0cmljdCI7cW8oKTtpcygpO2YxKCk7WW8oKTtCeD1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZhdWx0U2NvcGVDb21wdXRhdGlvbiIpfWNvbnN0cnVjdG9yKGUpe3RoaXMubmFtZVByb3ZpZGVyPWUucmVmZXJlbmNlcy5OYW1lUHJvdmlkZXIsdGhpcy5kZXNjcmlwdGlvbnM9ZS53b3Jrc3BhY2UuQXN0Tm9kZURlc2NyaXB0aW9uUHJvdmlkZXJ9YXN5bmMgY29tcHV0ZUV4cG9ydHMoZSxyPXlyLkNhbmNlbGxhdGlvblRva2VuLk5vbmUpe3JldHVybiB0aGlzLmNvbXB1dGVFeHBvcnRzRm9yTm9kZShlLnBhcnNlUmVzdWx0LnZhbHVlLGUsdm9pZCAwLHIpfWFzeW5jIGNvbXB1dGVFeHBvcnRzRm9yTm9kZShlLHIsbj1XMixpPXlyLkNhbmNlbGxhdGlvblRva2VuLk5vbmUpe2xldCBhPVtdO3RoaXMuZXhwb3J0Tm9kZShlLGEscik7Zm9yKGxldCBzIG9mIG4oZSkpYXdhaXQgeGkoaSksdGhpcy5leHBvcnROb2RlKHMsYSxyKTtyZXR1cm4gYX1leHBvcnROb2RlKGUscixuKXtsZXQgaT10aGlzLm5hbWVQcm92aWRlci5nZXROYW1lKGUpO2kmJnIucHVzaCh0aGlzLmRlc2NyaXB0aW9ucy5jcmVhdGVEZXNjcmlwdGlvbihlLGksbikpfWFzeW5jIGNvbXB1dGVMb2NhbFNjb3BlcyhlLHI9eXIuQ2FuY2VsbGF0aW9uVG9rZW4uTm9uZSl7bGV0IG49ZS5wYXJzZVJlc3VsdC52YWx1ZSxpPW5ldyBCbDtmb3IobGV0IGEgb2YgTmMobikpYXdhaXQgeGkociksdGhpcy5wcm9jZXNzTm9kZShhLGUsaSk7cmV0dXJuIGl9cHJvY2Vzc05vZGUoZSxyLG4pe2xldCBpPWUuJGNvbnRhaW5lcjtpZihpKXtsZXQgYT10aGlzLm5hbWVQcm92aWRlci5nZXROYW1lKGUpO2EmJm4uYWRkKGksdGhpcy5kZXNjcmlwdGlvbnMuY3JlYXRlRGVzY3JpcHRpb24oZSxhLHIpKX19fX0pO3ZhciBkMSxGeCx4RmUsR009TigoKT0+eyJ1c2Ugc3RyaWN0IjtQcygpO2QxPWNsYXNze3N0YXRpY3tvKHRoaXMsIlN0cmVhbVNjb3BlIil9Y29uc3RydWN0b3IoZSxyLG4pe3ZhciBpO3RoaXMuZWxlbWVudHM9ZSx0aGlzLm91dGVyU2NvcGU9cix0aGlzLmNhc2VJbnNlbnNpdGl2ZT0oaT1uPy5jYXNlSW5zZW5zaXRpdmUpIT09bnVsbCYmaSE9PXZvaWQgMD9pOiExfWdldEFsbEVsZW1lbnRzKCl7cmV0dXJuIHRoaXMub3V0ZXJTY29wZT90aGlzLmVsZW1lbnRzLmNvbmNhdCh0aGlzLm91dGVyU2NvcGUuZ2V0QWxsRWxlbWVudHMoKSk6dGhpcy5lbGVtZW50c31nZXRFbGVtZW50KGUpe2xldCByPXRoaXMuY2FzZUluc2Vuc2l0aXZlP3RoaXMuZWxlbWVudHMuZmluZChuPT5uLm5hbWUudG9Mb3dlckNhc2UoKT09PWUudG9Mb3dlckNhc2UoKSk6dGhpcy5lbGVtZW50cy5maW5kKG49Pm4ubmFtZT09PWUpO2lmKHIpcmV0dXJuIHI7aWYodGhpcy5vdXRlclNjb3BlKXJldHVybiB0aGlzLm91dGVyU2NvcGUuZ2V0RWxlbWVudChlKX19LEZ4PWNsYXNze3N0YXRpY3tvKHRoaXMsIk1hcFNjb3BlIil9Y29uc3RydWN0b3IoZSxyLG4pe3ZhciBpO3RoaXMuZWxlbWVudHM9bmV3IE1hcCx0aGlzLmNhc2VJbnNlbnNpdGl2ZT0oaT1uPy5jYXNlSW5zZW5zaXRpdmUpIT09bnVsbCYmaSE9PXZvaWQgMD9pOiExO2ZvcihsZXQgYSBvZiBlKXtsZXQgcz10aGlzLmNhc2VJbnNlbnNpdGl2ZT9hLm5hbWUudG9Mb3dlckNhc2UoKTphLm5hbWU7dGhpcy5lbGVtZW50cy5zZXQocyxhKX10aGlzLm91dGVyU2NvcGU9cn1nZXRFbGVtZW50KGUpe2xldCByPXRoaXMuY2FzZUluc2Vuc2l0aXZlP2UudG9Mb3dlckNhc2UoKTplLG49dGhpcy5lbGVtZW50cy5nZXQocik7aWYobilyZXR1cm4gbjtpZih0aGlzLm91dGVyU2NvcGUpcmV0dXJuIHRoaXMub3V0ZXJTY29wZS5nZXRFbGVtZW50KGUpfWdldEFsbEVsZW1lbnRzKCl7bGV0IGU9ZW4odGhpcy5lbGVtZW50cy52YWx1ZXMoKSk7cmV0dXJuIHRoaXMub3V0ZXJTY29wZSYmKGU9ZS5jb25jYXQodGhpcy5vdXRlclNjb3BlLmdldEFsbEVsZW1lbnRzKCkpKSxlfX0seEZlPXtnZXRFbGVtZW50KCl7fSxnZXRBbGxFbGVtZW50cygpe3JldHVybiBJMn19fSk7dmFyIHAxLCR4LHhwLF9FLG0xLERFPU4oKCk9PnsidXNlIHN0cmljdCI7cDE9Y2xhc3N7c3RhdGlje28odGhpcywiRGlzcG9zYWJsZUNhY2hlIil9Y29uc3RydWN0b3IoKXt0aGlzLnRvRGlzcG9zZT1bXSx0aGlzLmlzRGlzcG9zZWQ9ITF9b25EaXNwb3NlKGUpe3RoaXMudG9EaXNwb3NlLnB1c2goZSl9ZGlzcG9zZSgpe3RoaXMudGhyb3dJZkRpc3Bvc2VkKCksdGhpcy5jbGVhcigpLHRoaXMuaXNEaXNwb3NlZD0hMCx0aGlzLnRvRGlzcG9zZS5mb3JFYWNoKGU9PmUuZGlzcG9zZSgpKX10aHJvd0lmRGlzcG9zZWQoKXtpZih0aGlzLmlzRGlzcG9zZWQpdGhyb3cgbmV3IEVycm9yKCJUaGlzIGNhY2hlIGhhcyBhbHJlYWR5IGJlZW4gZGlzcG9zZWQiKX19LCR4PWNsYXNzIGV4dGVuZHMgcDF7c3RhdGlje28odGhpcywiU2ltcGxlQ2FjaGUiKX1jb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jYWNoZT1uZXcgTWFwfWhhcyhlKXtyZXR1cm4gdGhpcy50aHJvd0lmRGlzcG9zZWQoKSx0aGlzLmNhY2hlLmhhcyhlKX1zZXQoZSxyKXt0aGlzLnRocm93SWZEaXNwb3NlZCgpLHRoaXMuY2FjaGUuc2V0KGUscil9Z2V0KGUscil7aWYodGhpcy50aHJvd0lmRGlzcG9zZWQoKSx0aGlzLmNhY2hlLmhhcyhlKSlyZXR1cm4gdGhpcy5jYWNoZS5nZXQoZSk7aWYocil7bGV0IG49cigpO3JldHVybiB0aGlzLmNhY2hlLnNldChlLG4pLG59ZWxzZSByZXR1cm59ZGVsZXRlKGUpe3JldHVybiB0aGlzLnRocm93SWZEaXNwb3NlZCgpLHRoaXMuY2FjaGUuZGVsZXRlKGUpfWNsZWFyKCl7dGhpcy50aHJvd0lmRGlzcG9zZWQoKSx0aGlzLmNhY2hlLmNsZWFyKCl9fSx4cD1jbGFzcyBleHRlbmRzIHAxe3N0YXRpY3tvKHRoaXMsIkNvbnRleHRDYWNoZSIpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5jYWNoZT1uZXcgTWFwLHRoaXMuY29udmVydGVyPWU/PyhyPT5yKX1oYXMoZSxyKXtyZXR1cm4gdGhpcy50aHJvd0lmRGlzcG9zZWQoKSx0aGlzLmNhY2hlRm9yQ29udGV4dChlKS5oYXMocil9c2V0KGUscixuKXt0aGlzLnRocm93SWZEaXNwb3NlZCgpLHRoaXMuY2FjaGVGb3JDb250ZXh0KGUpLnNldChyLG4pfWdldChlLHIsbil7dGhpcy50aHJvd0lmRGlzcG9zZWQoKTtsZXQgaT10aGlzLmNhY2hlRm9yQ29udGV4dChlKTtpZihpLmhhcyhyKSlyZXR1cm4gaS5nZXQocik7aWYobil7bGV0IGE9bigpO3JldHVybiBpLnNldChyLGEpLGF9ZWxzZSByZXR1cm59ZGVsZXRlKGUscil7cmV0dXJuIHRoaXMudGhyb3dJZkRpc3Bvc2VkKCksdGhpcy5jYWNoZUZvckNvbnRleHQoZSkuZGVsZXRlKHIpfWNsZWFyKGUpe2lmKHRoaXMudGhyb3dJZkRpc3Bvc2VkKCksZSl7bGV0IHI9dGhpcy5jb252ZXJ0ZXIoZSk7dGhpcy5jYWNoZS5kZWxldGUocil9ZWxzZSB0aGlzLmNhY2hlLmNsZWFyKCl9Y2FjaGVGb3JDb250ZXh0KGUpe2xldCByPXRoaXMuY29udmVydGVyKGUpLG49dGhpcy5jYWNoZS5nZXQocik7cmV0dXJuIG58fChuPW5ldyBNYXAsdGhpcy5jYWNoZS5zZXQocixuKSksbn19LF9FPWNsYXNzIGV4dGVuZHMgeHB7c3RhdGlje28odGhpcywiRG9jdW1lbnRDYWNoZSIpfWNvbnN0cnVjdG9yKGUscil7c3VwZXIobj0+bi50b1N0cmluZygpKSxyPyh0aGlzLnRvRGlzcG9zZS5wdXNoKGUud29ya3NwYWNlLkRvY3VtZW50QnVpbGRlci5vbkRvY3VtZW50UGhhc2UocixuPT57dGhpcy5jbGVhcihuLnVyaS50b1N0cmluZygpKX0pKSx0aGlzLnRvRGlzcG9zZS5wdXNoKGUud29ya3NwYWNlLkRvY3VtZW50QnVpbGRlci5vblVwZGF0ZSgobixpKT0+e2ZvcihsZXQgYSBvZiBpKXRoaXMuY2xlYXIoYSl9KSkpOnRoaXMudG9EaXNwb3NlLnB1c2goZS53b3Jrc3BhY2UuRG9jdW1lbnRCdWlsZGVyLm9uVXBkYXRlKChuLGkpPT57bGV0IGE9bi5jb25jYXQoaSk7Zm9yKGxldCBzIG9mIGEpdGhpcy5jbGVhcihzKX0pKX19LG0xPWNsYXNzIGV4dGVuZHMgJHh7c3RhdGlje28odGhpcywiV29ya3NwYWNlQ2FjaGUiKX1jb25zdHJ1Y3RvcihlLHIpe3N1cGVyKCkscj8odGhpcy50b0Rpc3Bvc2UucHVzaChlLndvcmtzcGFjZS5Eb2N1bWVudEJ1aWxkZXIub25CdWlsZFBoYXNlKHIsKCk9Pnt0aGlzLmNsZWFyKCl9KSksdGhpcy50b0Rpc3Bvc2UucHVzaChlLndvcmtzcGFjZS5Eb2N1bWVudEJ1aWxkZXIub25VcGRhdGUoKG4saSk9PntpLmxlbmd0aD4wJiZ0aGlzLmNsZWFyKCl9KSkpOnRoaXMudG9EaXNwb3NlLnB1c2goZS53b3Jrc3BhY2UuRG9jdW1lbnRCdWlsZGVyLm9uVXBkYXRlKCgpPT57dGhpcy5jbGVhcigpfSkpfX19KTt2YXIgengsVk09TigoKT0+eyJ1c2Ugc3RyaWN0IjtHTSgpO2lzKCk7UHMoKTtERSgpO3p4PWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRTY29wZVByb3ZpZGVyIil9Y29uc3RydWN0b3IoZSl7dGhpcy5yZWZsZWN0aW9uPWUuc2hhcmVkLkFzdFJlZmxlY3Rpb24sdGhpcy5uYW1lUHJvdmlkZXI9ZS5yZWZlcmVuY2VzLk5hbWVQcm92aWRlcix0aGlzLmRlc2NyaXB0aW9ucz1lLndvcmtzcGFjZS5Bc3ROb2RlRGVzY3JpcHRpb25Qcm92aWRlcix0aGlzLmluZGV4TWFuYWdlcj1lLnNoYXJlZC53b3Jrc3BhY2UuSW5kZXhNYW5hZ2VyLHRoaXMuZ2xvYmFsU2NvcGVDYWNoZT1uZXcgbTEoZS5zaGFyZWQpfWdldFNjb3BlKGUpe2xldCByPVtdLG49dGhpcy5yZWZsZWN0aW9uLmdldFJlZmVyZW5jZVR5cGUoZSksaT1QYShlLmNvbnRhaW5lcikucHJlY29tcHV0ZWRTY29wZXM7aWYoaSl7bGV0IHM9ZS5jb250YWluZXI7ZG97bGV0IGw9aS5nZXQocyk7bC5sZW5ndGg+MCYmci5wdXNoKGVuKGwpLmZpbHRlcih1PT50aGlzLnJlZmxlY3Rpb24uaXNTdWJ0eXBlKHUudHlwZSxuKSkpLHM9cy4kY29udGFpbmVyfXdoaWxlKHMpfWxldCBhPXRoaXMuZ2V0R2xvYmFsU2NvcGUobixlKTtmb3IobGV0IHM9ci5sZW5ndGgtMTtzPj0wO3MtLSlhPXRoaXMuY3JlYXRlU2NvcGUocltzXSxhKTtyZXR1cm4gYX1jcmVhdGVTY29wZShlLHIsbil7cmV0dXJuIG5ldyBkMShlbihlKSxyLG4pfWNyZWF0ZVNjb3BlRm9yTm9kZXMoZSxyLG4pe2xldCBpPWVuKGUpLm1hcChhPT57bGV0IHM9dGhpcy5uYW1lUHJvdmlkZXIuZ2V0TmFtZShhKTtpZihzKXJldHVybiB0aGlzLmRlc2NyaXB0aW9ucy5jcmVhdGVEZXNjcmlwdGlvbihhLHMpfSkubm9uTnVsbGFibGUoKTtyZXR1cm4gbmV3IGQxKGkscixuKX1nZXRHbG9iYWxTY29wZShlLHIpe3JldHVybiB0aGlzLmdsb2JhbFNjb3BlQ2FjaGUuZ2V0KGUsKCk9Pm5ldyBGeCh0aGlzLmluZGV4TWFuYWdlci5hbGxFbGVtZW50cyhlKSkpfX19KTtmdW5jdGlvbiBVTSh0KXtyZXR1cm4gdHlwZW9mIHQuJGNvbW1lbnQ9PSJzdHJpbmcifWZ1bmN0aW9uIHFsZSh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJvYmplY3QiJiYhIXQmJigiJHJlZiJpbiB0fHwiJGVycm9yImluIHQpfXZhciBHeCxMRT1OKCgpPT57InVzZSBzdHJpY3QiO09NKCk7UmwoKTtpcygpO09sKCk7byhVTSwiaXNBc3ROb2RlV2l0aENvbW1lbnQiKTtvKHFsZSwiaXNJbnRlcm1lZGlhdGVSZWZlcmVuY2UiKTtHeD1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZhdWx0SnNvblNlcmlhbGl6ZXIiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLmlnbm9yZVByb3BlcnRpZXM9bmV3IFNldChbIiRjb250YWluZXIiLCIkY29udGFpbmVyUHJvcGVydHkiLCIkY29udGFpbmVySW5kZXgiLCIkZG9jdW1lbnQiLCIkY3N0Tm9kZSJdKSx0aGlzLmxhbmdpdW1Eb2N1bWVudHM9ZS5zaGFyZWQud29ya3NwYWNlLkxhbmdpdW1Eb2N1bWVudHMsdGhpcy5hc3ROb2RlTG9jYXRvcj1lLndvcmtzcGFjZS5Bc3ROb2RlTG9jYXRvcix0aGlzLm5hbWVQcm92aWRlcj1lLnJlZmVyZW5jZXMuTmFtZVByb3ZpZGVyLHRoaXMuY29tbWVudFByb3ZpZGVyPWUuZG9jdW1lbnRhdGlvbi5Db21tZW50UHJvdmlkZXJ9c2VyaWFsaXplKGUscil7bGV0IG49cj8/e30saT1yPy5yZXBsYWNlcixhPW8oKGwsdSk9PnRoaXMucmVwbGFjZXIobCx1LG4pLCJkZWZhdWx0UmVwbGFjZXIiKSxzPWk/KGwsdSk9PmkobCx1LGEpOmE7dHJ5e3JldHVybiB0aGlzLmN1cnJlbnREb2N1bWVudD1QYShlKSxKU09OLnN0cmluZ2lmeShlLHMscj8uc3BhY2UpfWZpbmFsbHl7dGhpcy5jdXJyZW50RG9jdW1lbnQ9dm9pZCAwfX1kZXNlcmlhbGl6ZShlLHIpe2xldCBuPXI/P3t9LGk9SlNPTi5wYXJzZShlKTtyZXR1cm4gdGhpcy5saW5rTm9kZShpLGksbiksaX1yZXBsYWNlcihlLHIse3JlZlRleHQ6bixzb3VyY2VUZXh0OmksdGV4dFJlZ2lvbnM6YSxjb21tZW50czpzLHVyaUNvbnZlcnRlcjpsfSl7dmFyIHUsaCxmLGQ7aWYoIXRoaXMuaWdub3JlUHJvcGVydGllcy5oYXMoZSkpaWYodmEocikpe2xldCBwPXIucmVmLG09bj9yLiRyZWZUZXh0OnZvaWQgMDtpZihwKXtsZXQgZz1QYShwKSx5PSIiO3RoaXMuY3VycmVudERvY3VtZW50JiZ0aGlzLmN1cnJlbnREb2N1bWVudCE9PWcmJihsP3k9bChnLnVyaSxyKTp5PWcudXJpLnRvU3RyaW5nKCkpO2xldCB2PXRoaXMuYXN0Tm9kZUxvY2F0b3IuZ2V0QXN0Tm9kZVBhdGgocCk7cmV0dXJueyRyZWY6YCR7eX0jJHt2fWAsJHJlZlRleHQ6bX19ZWxzZSByZXR1cm57JGVycm9yOihoPSh1PXIuZXJyb3IpPT09bnVsbHx8dT09PXZvaWQgMD92b2lkIDA6dS5tZXNzYWdlKSE9PW51bGwmJmghPT12b2lkIDA/aDoiQ291bGQgbm90IHJlc29sdmUgcmVmZXJlbmNlIiwkcmVmVGV4dDptfX1lbHNlIGlmKGlpKHIpKXtsZXQgcDtpZihhJiYocD10aGlzLmFkZEFzdE5vZGVSZWdpb25XaXRoQXNzaWdubWVudHNUbyhPYmplY3QuYXNzaWduKHt9LHIpKSwoIWV8fHIuJGRvY3VtZW50KSYmcD8uJHRleHRSZWdpb24mJihwLiR0ZXh0UmVnaW9uLmRvY3VtZW50VVJJPShmPXRoaXMuY3VycmVudERvY3VtZW50KT09PW51bGx8fGY9PT12b2lkIDA/dm9pZCAwOmYudXJpLnRvU3RyaW5nKCkpKSxpJiYhZSYmKHA/PyhwPU9iamVjdC5hc3NpZ24oe30scikpLHAuJHNvdXJjZVRleHQ9KGQ9ci4kY3N0Tm9kZSk9PT1udWxsfHxkPT09dm9pZCAwP3ZvaWQgMDpkLnRleHQpLHMpe3A/PyhwPU9iamVjdC5hc3NpZ24oe30scikpO2xldCBtPXRoaXMuY29tbWVudFByb3ZpZGVyLmdldENvbW1lbnQocik7bSYmKHAuJGNvbW1lbnQ9bS5yZXBsYWNlKC9cci9nLCIiKSl9cmV0dXJuIHA/P3J9ZWxzZSByZXR1cm4gcn1hZGRBc3ROb2RlUmVnaW9uV2l0aEFzc2lnbm1lbnRzVG8oZSl7bGV0IHI9byhuPT4oe29mZnNldDpuLm9mZnNldCxlbmQ6bi5lbmQsbGVuZ3RoOm4ubGVuZ3RoLHJhbmdlOm4ucmFuZ2V9KSwiY3JlYXRlRG9jdW1lbnRTZWdtZW50Iik7aWYoZS4kY3N0Tm9kZSl7bGV0IG49ZS4kdGV4dFJlZ2lvbj1yKGUuJGNzdE5vZGUpLGk9bi5hc3NpZ25tZW50cz17fTtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZmlsdGVyKGE9PiFhLnN0YXJ0c1dpdGgoIiQiKSkuZm9yRWFjaChhPT57bGV0IHM9b04oZS4kY3N0Tm9kZSxhKS5tYXAocik7cy5sZW5ndGghPT0wJiYoaVthXT1zKX0pLGV9fWxpbmtOb2RlKGUscixuLGksYSxzKXtmb3IobGV0W3UsaF1vZiBPYmplY3QuZW50cmllcyhlKSlpZihBcnJheS5pc0FycmF5KGgpKWZvcihsZXQgZj0wO2Y8aC5sZW5ndGg7ZisrKXtsZXQgZD1oW2ZdO3FsZShkKT9oW2ZdPXRoaXMucmV2aXZlUmVmZXJlbmNlKGUsdSxyLGQsbik6aWkoZCkmJnRoaXMubGlua05vZGUoZCxyLG4sZSx1LGYpfWVsc2UgcWxlKGgpP2VbdV09dGhpcy5yZXZpdmVSZWZlcmVuY2UoZSx1LHIsaCxuKTppaShoKSYmdGhpcy5saW5rTm9kZShoLHIsbixlLHUpO2xldCBsPWU7bC4kY29udGFpbmVyPWksbC4kY29udGFpbmVyUHJvcGVydHk9YSxsLiRjb250YWluZXJJbmRleD1zfXJldml2ZVJlZmVyZW5jZShlLHIsbixpLGEpe2xldCBzPWkuJHJlZlRleHQsbD1pLiRlcnJvcjtpZihpLiRyZWYpe2xldCB1PXRoaXMuZ2V0UmVmTm9kZShuLGkuJHJlZixhLnVyaUNvbnZlcnRlcik7aWYoaWkodSkpcmV0dXJuIHN8fChzPXRoaXMubmFtZVByb3ZpZGVyLmdldE5hbWUodSkpLHskcmVmVGV4dDpzPz8iIixyZWY6dX07bD11fWlmKGwpe2xldCB1PXskcmVmVGV4dDpzPz8iIn07cmV0dXJuIHUuZXJyb3I9e2NvbnRhaW5lcjplLHByb3BlcnR5OnIsbWVzc2FnZTpsLHJlZmVyZW5jZTp1fSx1fWVsc2UgcmV0dXJufWdldFJlZk5vZGUoZSxyLG4pe3RyeXtsZXQgaT1yLmluZGV4T2YoIiMiKTtpZihpPT09MCl7bGV0IHU9dGhpcy5hc3ROb2RlTG9jYXRvci5nZXRBc3ROb2RlKGUsci5zdWJzdHJpbmcoMSkpO3JldHVybiB1fHwiQ291bGQgbm90IHJlc29sdmUgcGF0aDogIityfWlmKGk8MCl7bGV0IHU9bj9uKHIpOnVzLnBhcnNlKHIpLGg9dGhpcy5sYW5naXVtRG9jdW1lbnRzLmdldERvY3VtZW50KHUpO3JldHVybiBoP2gucGFyc2VSZXN1bHQudmFsdWU6IkNvdWxkIG5vdCBmaW5kIGRvY3VtZW50IGZvciBVUkk6ICIrcn1sZXQgYT1uP24oci5zdWJzdHJpbmcoMCxpKSk6dXMucGFyc2Uoci5zdWJzdHJpbmcoMCxpKSkscz10aGlzLmxhbmdpdW1Eb2N1bWVudHMuZ2V0RG9jdW1lbnQoYSk7aWYoIXMpcmV0dXJuIkNvdWxkIG5vdCBmaW5kIGRvY3VtZW50IGZvciBVUkk6ICIrcjtpZihpPT09ci5sZW5ndGgtMSlyZXR1cm4gcy5wYXJzZVJlc3VsdC52YWx1ZTtsZXQgbD10aGlzLmFzdE5vZGVMb2NhdG9yLmdldEFzdE5vZGUocy5wYXJzZVJlc3VsdC52YWx1ZSxyLnN1YnN0cmluZyhpKzEpKTtyZXR1cm4gbHx8IkNvdWxkIG5vdCByZXNvbHZlIFVSSTogIityfWNhdGNoKGkpe3JldHVybiBTdHJpbmcoaSl9fX19KTt2YXIgVngsSE09TigoKT0+eyJ1c2Ugc3RyaWN0IjtGYygpO1Z4PWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRTZXJ2aWNlUmVnaXN0cnkiKX1nZXQgbWFwKCl7cmV0dXJuIHRoaXMuZmlsZUV4dGVuc2lvbk1hcH1jb25zdHJ1Y3RvcihlKXt0aGlzLmxhbmd1YWdlSWRNYXA9bmV3IE1hcCx0aGlzLmZpbGVFeHRlbnNpb25NYXA9bmV3IE1hcCx0aGlzLnRleHREb2N1bWVudHM9ZT8ud29ya3NwYWNlLlRleHREb2N1bWVudHN9cmVnaXN0ZXIoZSl7bGV0IHI9ZS5MYW5ndWFnZU1ldGFEYXRhO2ZvcihsZXQgbiBvZiByLmZpbGVFeHRlbnNpb25zKXRoaXMuZmlsZUV4dGVuc2lvbk1hcC5oYXMobikmJmNvbnNvbGUud2FybihgVGhlIGZpbGUgZXh0ZW5zaW9uICR7bn0gaXMgdXNlZCBieSBtdWx0aXBsZSBsYW5ndWFnZXMuIEl0IGlzIG5vdyBhc3NpZ25lZCB0byAnJHtyLmxhbmd1YWdlSWR9Jy5gKSx0aGlzLmZpbGVFeHRlbnNpb25NYXAuc2V0KG4sZSk7dGhpcy5sYW5ndWFnZUlkTWFwLnNldChyLmxhbmd1YWdlSWQsZSksdGhpcy5sYW5ndWFnZUlkTWFwLnNpemU9PT0xP3RoaXMuc2luZ2xldG9uPWU6dGhpcy5zaW5nbGV0b249dm9pZCAwfWdldFNlcnZpY2VzKGUpe3ZhciByLG47aWYodGhpcy5zaW5nbGV0b24hPT12b2lkIDApcmV0dXJuIHRoaXMuc2luZ2xldG9uO2lmKHRoaXMubGFuZ3VhZ2VJZE1hcC5zaXplPT09MCl0aHJvdyBuZXcgRXJyb3IoIlRoZSBzZXJ2aWNlIHJlZ2lzdHJ5IGlzIGVtcHR5LiBVc2UgYHJlZ2lzdGVyYCB0byByZWdpc3RlciB0aGUgc2VydmljZXMgb2YgYSBsYW5ndWFnZS4iKTtsZXQgaT0obj0ocj10aGlzLnRleHREb2N1bWVudHMpPT09bnVsbHx8cj09PXZvaWQgMD92b2lkIDA6ci5nZXQoZSkpPT09bnVsbHx8bj09PXZvaWQgMD92b2lkIDA6bi5sYW5ndWFnZUlkO2lmKGkhPT12b2lkIDApe2xldCBsPXRoaXMubGFuZ3VhZ2VJZE1hcC5nZXQoaSk7aWYobClyZXR1cm4gbH1sZXQgYT1ocy5leHRuYW1lKGUpLHM9dGhpcy5maWxlRXh0ZW5zaW9uTWFwLmdldChhKTtpZighcyl0aHJvdyBpP25ldyBFcnJvcihgVGhlIHNlcnZpY2UgcmVnaXN0cnkgY29udGFpbnMgbm8gc2VydmljZXMgZm9yIHRoZSBleHRlbnNpb24gJyR7YX0nIGZvciBsYW5ndWFnZSAnJHtpfScuYCk6bmV3IEVycm9yKGBUaGUgc2VydmljZSByZWdpc3RyeSBjb250YWlucyBubyBzZXJ2aWNlcyBmb3IgdGhlIGV4dGVuc2lvbiAnJHthfScuYCk7cmV0dXJuIHN9aGFzU2VydmljZXMoZSl7dHJ5e3JldHVybiB0aGlzLmdldFNlcnZpY2VzKGUpLCEwfWNhdGNoe3JldHVybiExfX1nZXQgYWxsKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5sYW5ndWFnZUlkTWFwLnZhbHVlcygpKX19fSk7ZnVuY3Rpb24gYnAodCl7cmV0dXJue2NvZGU6dH19dmFyIGcxLFV4LEh4PU4oKCk9PnsidXNlIHN0cmljdCI7WG8oKTtmMSgpO1lvKCk7UHMoKTtvKGJwLCJkaWFnbm9zdGljRGF0YSIpOyhmdW5jdGlvbih0KXt0LmFsbD1bImZhc3QiLCJzbG93IiwiYnVpbHQtaW4iXX0pKGcxfHwoZzE9e30pKTtVeD1jbGFzc3tzdGF0aWN7byh0aGlzLCJWYWxpZGF0aW9uUmVnaXN0cnkiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLmVudHJpZXM9bmV3IEJsLHRoaXMuZW50cmllc0JlZm9yZT1bXSx0aGlzLmVudHJpZXNBZnRlcj1bXSx0aGlzLnJlZmxlY3Rpb249ZS5zaGFyZWQuQXN0UmVmbGVjdGlvbn1yZWdpc3RlcihlLHI9dGhpcyxuPSJmYXN0Iil7aWYobj09PSJidWlsdC1pbiIpdGhyb3cgbmV3IEVycm9yKCJUaGUgJ2J1aWx0LWluJyBjYXRlZ29yeSBpcyByZXNlcnZlZCBmb3IgbGV4ZXIsIHBhcnNlciwgYW5kIGxpbmtlciBlcnJvcnMuIik7Zm9yKGxldFtpLGFdb2YgT2JqZWN0LmVudHJpZXMoZSkpe2xldCBzPWE7aWYoQXJyYXkuaXNBcnJheShzKSlmb3IobGV0IGwgb2Ygcyl7bGV0IHU9e2NoZWNrOnRoaXMud3JhcFZhbGlkYXRpb25FeGNlcHRpb24obCxyKSxjYXRlZ29yeTpufTt0aGlzLmFkZEVudHJ5KGksdSl9ZWxzZSBpZih0eXBlb2Ygcz09ImZ1bmN0aW9uIil7bGV0IGw9e2NoZWNrOnRoaXMud3JhcFZhbGlkYXRpb25FeGNlcHRpb24ocyxyKSxjYXRlZ29yeTpufTt0aGlzLmFkZEVudHJ5KGksbCl9ZWxzZSBMYyhzKX19d3JhcFZhbGlkYXRpb25FeGNlcHRpb24oZSxyKXtyZXR1cm4gYXN5bmMobixpLGEpPT57YXdhaXQgdGhpcy5oYW5kbGVFeGNlcHRpb24oKCk9PmUuY2FsbChyLG4saSxhKSwiQW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHZhbGlkYXRpb24iLGksbil9fWFzeW5jIGhhbmRsZUV4Y2VwdGlvbihlLHIsbixpKXt0cnl7YXdhaXQgZSgpfWNhdGNoKGEpe2lmKEJjKGEpKXRocm93IGE7Y29uc29sZS5lcnJvcihgJHtyfTpgLGEpLGEgaW5zdGFuY2VvZiBFcnJvciYmYS5zdGFjayYmY29uc29sZS5lcnJvcihhLnN0YWNrKTtsZXQgcz1hIGluc3RhbmNlb2YgRXJyb3I/YS5tZXNzYWdlOlN0cmluZyhhKTtuKCJlcnJvciIsYCR7cn06ICR7c31gLHtub2RlOml9KX19YWRkRW50cnkoZSxyKXtpZihlPT09IkFzdE5vZGUiKXt0aGlzLmVudHJpZXMuYWRkKCJBc3ROb2RlIixyKTtyZXR1cm59Zm9yKGxldCBuIG9mIHRoaXMucmVmbGVjdGlvbi5nZXRBbGxTdWJUeXBlcyhlKSl0aGlzLmVudHJpZXMuYWRkKG4scil9Z2V0Q2hlY2tzKGUscil7bGV0IG49ZW4odGhpcy5lbnRyaWVzLmdldChlKSkuY29uY2F0KHRoaXMuZW50cmllcy5nZXQoIkFzdE5vZGUiKSk7cmV0dXJuIHImJihuPW4uZmlsdGVyKGk9PnIuaW5jbHVkZXMoaS5jYXRlZ29yeSkpKSxuLm1hcChpPT5pLmNoZWNrKX1yZWdpc3RlckJlZm9yZURvY3VtZW50KGUscj10aGlzKXt0aGlzLmVudHJpZXNCZWZvcmUucHVzaCh0aGlzLndyYXBQcmVwYXJhdGlvbkV4Y2VwdGlvbihlLCJBbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgc2V0LXVwIG9mIHRoZSB2YWxpZGF0aW9uIixyKSl9cmVnaXN0ZXJBZnRlckRvY3VtZW50KGUscj10aGlzKXt0aGlzLmVudHJpZXNBZnRlci5wdXNoKHRoaXMud3JhcFByZXBhcmF0aW9uRXhjZXB0aW9uKGUsIkFuIGVycm9yIG9jY3VycmVkIGR1cmluZyB0ZWFyLWRvd24gb2YgdGhlIHZhbGlkYXRpb24iLHIpKX13cmFwUHJlcGFyYXRpb25FeGNlcHRpb24oZSxyLG4pe3JldHVybiBhc3luYyhpLGEscyxsKT0+e2F3YWl0IHRoaXMuaGFuZGxlRXhjZXB0aW9uKCgpPT5lLmNhbGwobixpLGEscyxsKSxyLGEsaSl9fWdldCBjaGVja3NCZWZvcmUoKXtyZXR1cm4gdGhpcy5lbnRyaWVzQmVmb3JlfWdldCBjaGVja3NBZnRlcigpe3JldHVybiB0aGlzLmVudHJpZXNBZnRlcn19fSk7ZnVuY3Rpb24gWWxlKHQpe2lmKHQucmFuZ2UpcmV0dXJuIHQucmFuZ2U7bGV0IGU7cmV0dXJuIHR5cGVvZiB0LnByb3BlcnR5PT0ic3RyaW5nIj9lPVEyKHQubm9kZS4kY3N0Tm9kZSx0LnByb3BlcnR5LHQuaW5kZXgpOnR5cGVvZiB0LmtleXdvcmQ9PSJzdHJpbmciJiYoZT1jTih0Lm5vZGUuJGNzdE5vZGUsdC5rZXl3b3JkLHQuaW5kZXgpKSxlPz8oZT10Lm5vZGUuJGNzdE5vZGUpLGU/ZS5yYW5nZTp7c3RhcnQ6e2xpbmU6MCxjaGFyYWN0ZXI6MH0sZW5kOntsaW5lOjAsY2hhcmFjdGVyOjB9fX1mdW5jdGlvbiBSRSh0KXtzd2l0Y2godCl7Y2FzZSJlcnJvciI6cmV0dXJuIDE7Y2FzZSJ3YXJuaW5nIjpyZXR1cm4gMjtjYXNlImluZm8iOnJldHVybiAzO2Nhc2UiaGludCI6cmV0dXJuIDQ7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgZGlhZ25vc3RpYyBzZXZlcml0eTogIit0KX19ZnVuY3Rpb24gWGxlKHQpe3N3aXRjaCh0KXtjYXNlImVycm9yIjpyZXR1cm4gYnAoam8uTGV4aW5nRXJyb3IpO2Nhc2Uid2FybmluZyI6cmV0dXJuIGJwKGpvLkxleGluZ1dhcm5pbmcpO2Nhc2UiaW5mbyI6cmV0dXJuIGJwKGpvLkxleGluZ0luZm8pO2Nhc2UiaGludCI6cmV0dXJuIGJwKGpvLkxleGluZ0hpbnQpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGRpYWdub3N0aWMgc2V2ZXJpdHk6ICIrdCl9fXZhciBXeCxqbyxXTT1OKCgpPT57InVzZSBzdHJpY3QiO3FvKCk7T2woKTtpcygpO05sKCk7WW8oKTtIeCgpO1d4PWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHREb2N1bWVudFZhbGlkYXRvciIpfWNvbnN0cnVjdG9yKGUpe3RoaXMudmFsaWRhdGlvblJlZ2lzdHJ5PWUudmFsaWRhdGlvbi5WYWxpZGF0aW9uUmVnaXN0cnksdGhpcy5tZXRhZGF0YT1lLkxhbmd1YWdlTWV0YURhdGF9YXN5bmMgdmFsaWRhdGVEb2N1bWVudChlLHI9e30sbj15ci5DYW5jZWxsYXRpb25Ub2tlbi5Ob25lKXtsZXQgaT1lLnBhcnNlUmVzdWx0LGE9W107aWYoYXdhaXQgeGkobiksKCFyLmNhdGVnb3JpZXN8fHIuY2F0ZWdvcmllcy5pbmNsdWRlcygiYnVpbHQtaW4iKSkmJih0aGlzLnByb2Nlc3NMZXhpbmdFcnJvcnMoaSxhLHIpLHIuc3RvcEFmdGVyTGV4aW5nRXJyb3JzJiZhLnNvbWUocz0+e3ZhciBsO3JldHVybigobD1zLmRhdGEpPT09bnVsbHx8bD09PXZvaWQgMD92b2lkIDA6bC5jb2RlKT09PWpvLkxleGluZ0Vycm9yfSl8fCh0aGlzLnByb2Nlc3NQYXJzaW5nRXJyb3JzKGksYSxyKSxyLnN0b3BBZnRlclBhcnNpbmdFcnJvcnMmJmEuc29tZShzPT57dmFyIGw7cmV0dXJuKChsPXMuZGF0YSk9PT1udWxsfHxsPT09dm9pZCAwP3ZvaWQgMDpsLmNvZGUpPT09am8uUGFyc2luZ0Vycm9yfSkpfHwodGhpcy5wcm9jZXNzTGlua2luZ0Vycm9ycyhlLGEsciksci5zdG9wQWZ0ZXJMaW5raW5nRXJyb3JzJiZhLnNvbWUocz0+e3ZhciBsO3JldHVybigobD1zLmRhdGEpPT09bnVsbHx8bD09PXZvaWQgMD92b2lkIDA6bC5jb2RlKT09PWpvLkxpbmtpbmdFcnJvcn0pKSkpcmV0dXJuIGE7dHJ5e2EucHVzaCguLi5hd2FpdCB0aGlzLnZhbGlkYXRlQXN0KGkudmFsdWUscixuKSl9Y2F0Y2gocyl7aWYoQmMocykpdGhyb3cgcztjb25zb2xlLmVycm9yKCJBbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgdmFsaWRhdGlvbjoiLHMpfXJldHVybiBhd2FpdCB4aShuKSxhfXByb2Nlc3NMZXhpbmdFcnJvcnMoZSxyLG4pe3ZhciBpLGEscztsZXQgbD1bLi4uZS5sZXhlckVycm9ycywuLi4oYT0oaT1lLmxleGVyUmVwb3J0KT09PW51bGx8fGk9PT12b2lkIDA/dm9pZCAwOmkuZGlhZ25vc3RpY3MpIT09bnVsbCYmYSE9PXZvaWQgMD9hOltdXTtmb3IobGV0IHUgb2YgbCl7bGV0IGg9KHM9dS5zZXZlcml0eSkhPT1udWxsJiZzIT09dm9pZCAwP3M6ImVycm9yIixmPXtzZXZlcml0eTpSRShoKSxyYW5nZTp7c3RhcnQ6e2xpbmU6dS5saW5lLTEsY2hhcmFjdGVyOnUuY29sdW1uLTF9LGVuZDp7bGluZTp1LmxpbmUtMSxjaGFyYWN0ZXI6dS5jb2x1bW4rdS5sZW5ndGgtMX19LG1lc3NhZ2U6dS5tZXNzYWdlLGRhdGE6WGxlKGgpLHNvdXJjZTp0aGlzLmdldFNvdXJjZSgpfTtyLnB1c2goZil9fXByb2Nlc3NQYXJzaW5nRXJyb3JzKGUscixuKXtmb3IobGV0IGkgb2YgZS5wYXJzZXJFcnJvcnMpe2xldCBhO2lmKGlzTmFOKGkudG9rZW4uc3RhcnRPZmZzZXQpKXtpZigicHJldmlvdXNUb2tlbiJpbiBpKXtsZXQgcz1pLnByZXZpb3VzVG9rZW47aWYoaXNOYU4ocy5zdGFydE9mZnNldCkpe2xldCBsPXtsaW5lOjAsY2hhcmFjdGVyOjB9O2E9e3N0YXJ0OmwsZW5kOmx9fWVsc2V7bGV0IGw9e2xpbmU6cy5lbmRMaW5lLTEsY2hhcmFjdGVyOnMuZW5kQ29sdW1ufTthPXtzdGFydDpsLGVuZDpsfX19fWVsc2UgYT1HbShpLnRva2VuKTtpZihhKXtsZXQgcz17c2V2ZXJpdHk6UkUoImVycm9yIikscmFuZ2U6YSxtZXNzYWdlOmkubWVzc2FnZSxkYXRhOmJwKGpvLlBhcnNpbmdFcnJvciksc291cmNlOnRoaXMuZ2V0U291cmNlKCl9O3IucHVzaChzKX19fXByb2Nlc3NMaW5raW5nRXJyb3JzKGUscixuKXtmb3IobGV0IGkgb2YgZS5yZWZlcmVuY2VzKXtsZXQgYT1pLmVycm9yO2lmKGEpe2xldCBzPXtub2RlOmEuY29udGFpbmVyLHByb3BlcnR5OmEucHJvcGVydHksaW5kZXg6YS5pbmRleCxkYXRhOntjb2RlOmpvLkxpbmtpbmdFcnJvcixjb250YWluZXJUeXBlOmEuY29udGFpbmVyLiR0eXBlLHByb3BlcnR5OmEucHJvcGVydHkscmVmVGV4dDphLnJlZmVyZW5jZS4kcmVmVGV4dH19O3IucHVzaCh0aGlzLnRvRGlhZ25vc3RpYygiZXJyb3IiLGEubWVzc2FnZSxzKSl9fX1hc3luYyB2YWxpZGF0ZUFzdChlLHIsbj15ci5DYW5jZWxsYXRpb25Ub2tlbi5Ob25lKXtsZXQgaT1bXSxhPW8oKHMsbCx1KT0+e2kucHVzaCh0aGlzLnRvRGlhZ25vc3RpYyhzLGwsdSkpfSwiYWNjZXB0b3IiKTtyZXR1cm4gYXdhaXQgdGhpcy52YWxpZGF0ZUFzdEJlZm9yZShlLHIsYSxuKSxhd2FpdCB0aGlzLnZhbGlkYXRlQXN0Tm9kZXMoZSxyLGEsbiksYXdhaXQgdGhpcy52YWxpZGF0ZUFzdEFmdGVyKGUscixhLG4pLGl9YXN5bmMgdmFsaWRhdGVBc3RCZWZvcmUoZSxyLG4saT15ci5DYW5jZWxsYXRpb25Ub2tlbi5Ob25lKXt2YXIgYTtsZXQgcz10aGlzLnZhbGlkYXRpb25SZWdpc3RyeS5jaGVja3NCZWZvcmU7Zm9yKGxldCBsIG9mIHMpYXdhaXQgeGkoaSksYXdhaXQgbChlLG4sKGE9ci5jYXRlZ29yaWVzKSE9PW51bGwmJmEhPT12b2lkIDA/YTpbXSxpKX1hc3luYyB2YWxpZGF0ZUFzdE5vZGVzKGUscixuLGk9eXIuQ2FuY2VsbGF0aW9uVG9rZW4uTm9uZSl7YXdhaXQgUHJvbWlzZS5hbGwoV28oZSkubWFwKGFzeW5jIGE9Pnthd2FpdCB4aShpKTtsZXQgcz10aGlzLnZhbGlkYXRpb25SZWdpc3RyeS5nZXRDaGVja3MoYS4kdHlwZSxyLmNhdGVnb3JpZXMpO2ZvcihsZXQgbCBvZiBzKWF3YWl0IGwoYSxuLGkpfSkpfWFzeW5jIHZhbGlkYXRlQXN0QWZ0ZXIoZSxyLG4saT15ci5DYW5jZWxsYXRpb25Ub2tlbi5Ob25lKXt2YXIgYTtsZXQgcz10aGlzLnZhbGlkYXRpb25SZWdpc3RyeS5jaGVja3NBZnRlcjtmb3IobGV0IGwgb2Ygcylhd2FpdCB4aShpKSxhd2FpdCBsKGUsbiwoYT1yLmNhdGVnb3JpZXMpIT09bnVsbCYmYSE9PXZvaWQgMD9hOltdLGkpfXRvRGlhZ25vc3RpYyhlLHIsbil7cmV0dXJue21lc3NhZ2U6cixyYW5nZTpZbGUobiksc2V2ZXJpdHk6UkUoZSksY29kZTpuLmNvZGUsY29kZURlc2NyaXB0aW9uOm4uY29kZURlc2NyaXB0aW9uLHRhZ3M6bi50YWdzLHJlbGF0ZWRJbmZvcm1hdGlvbjpuLnJlbGF0ZWRJbmZvcm1hdGlvbixkYXRhOm4uZGF0YSxzb3VyY2U6dGhpcy5nZXRTb3VyY2UoKX19Z2V0U291cmNlKCl7cmV0dXJuIHRoaXMubWV0YWRhdGEubGFuZ3VhZ2VJZH19O28oWWxlLCJnZXREaWFnbm9zdGljUmFuZ2UiKTtvKFJFLCJ0b0RpYWdub3N0aWNTZXZlcml0eSIpO28oWGxlLCJ0b0RpYWdub3N0aWNEYXRhIik7KGZ1bmN0aW9uKHQpe3QuTGV4aW5nRXJyb3I9ImxleGluZy1lcnJvciIsdC5MZXhpbmdXYXJuaW5nPSJsZXhpbmctd2FybmluZyIsdC5MZXhpbmdJbmZvPSJsZXhpbmctaW5mbyIsdC5MZXhpbmdIaW50PSJsZXhpbmctaGludCIsdC5QYXJzaW5nRXJyb3I9InBhcnNpbmctZXJyb3IiLHQuTGlua2luZ0Vycm9yPSJsaW5raW5nLWVycm9yIn0pKGpvfHwoam89e30pKX0pO3ZhciBxeCxZeCxxTT1OKCgpPT57InVzZSBzdHJpY3QiO3FvKCk7UmwoKTtpcygpO05sKCk7WW8oKTtGYygpO3F4PWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRBc3ROb2RlRGVzY3JpcHRpb25Qcm92aWRlciIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuYXN0Tm9kZUxvY2F0b3I9ZS53b3Jrc3BhY2UuQXN0Tm9kZUxvY2F0b3IsdGhpcy5uYW1lUHJvdmlkZXI9ZS5yZWZlcmVuY2VzLk5hbWVQcm92aWRlcn1jcmVhdGVEZXNjcmlwdGlvbihlLHIsbil7bGV0IGk9bj8/UGEoZSk7cj8/KHI9dGhpcy5uYW1lUHJvdmlkZXIuZ2V0TmFtZShlKSk7bGV0IGE9dGhpcy5hc3ROb2RlTG9jYXRvci5nZXRBc3ROb2RlUGF0aChlKTtpZighcil0aHJvdyBuZXcgRXJyb3IoYE5vZGUgYXQgcGF0aCAke2F9IGhhcyBubyBuYW1lLmApO2xldCBzLGw9bygoKT0+e3ZhciB1O3JldHVybiBzPz8ocz1RZCgodT10aGlzLm5hbWVQcm92aWRlci5nZXROYW1lTm9kZShlKSkhPT1udWxsJiZ1IT09dm9pZCAwP3U6ZS4kY3N0Tm9kZSkpfSwibmFtZVNlZ21lbnRHZXR0ZXIiKTtyZXR1cm57bm9kZTplLG5hbWU6cixnZXQgbmFtZVNlZ21lbnQoKXtyZXR1cm4gbCgpfSxzZWxlY3Rpb25TZWdtZW50OlFkKGUuJGNzdE5vZGUpLHR5cGU6ZS4kdHlwZSxkb2N1bWVudFVyaTppLnVyaSxwYXRoOmF9fX0sWXg9Y2xhc3N7c3RhdGlje28odGhpcywiRGVmYXVsdFJlZmVyZW5jZURlc2NyaXB0aW9uUHJvdmlkZXIiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLm5vZGVMb2NhdG9yPWUud29ya3NwYWNlLkFzdE5vZGVMb2NhdG9yfWFzeW5jIGNyZWF0ZURlc2NyaXB0aW9ucyhlLHI9eXIuQ2FuY2VsbGF0aW9uVG9rZW4uTm9uZSl7bGV0IG49W10saT1lLnBhcnNlUmVzdWx0LnZhbHVlO2ZvcihsZXQgYSBvZiBXbyhpKSlhd2FpdCB4aShyKSxBZyhhKS5maWx0ZXIocz0+IWpkKHMpKS5mb3JFYWNoKHM9PntsZXQgbD10aGlzLmNyZWF0ZURlc2NyaXB0aW9uKHMpO2wmJm4ucHVzaChsKX0pO3JldHVybiBufWNyZWF0ZURlc2NyaXB0aW9uKGUpe2xldCByPWUucmVmZXJlbmNlLiRub2RlRGVzY3JpcHRpb24sbj1lLnJlZmVyZW5jZS4kcmVmTm9kZTtpZighcnx8IW4pcmV0dXJuO2xldCBpPVBhKGUuY29udGFpbmVyKS51cmk7cmV0dXJue3NvdXJjZVVyaTppLHNvdXJjZVBhdGg6dGhpcy5ub2RlTG9jYXRvci5nZXRBc3ROb2RlUGF0aChlLmNvbnRhaW5lciksdGFyZ2V0VXJpOnIuZG9jdW1lbnRVcmksdGFyZ2V0UGF0aDpyLnBhdGgsc2VnbWVudDpRZChuKSxsb2NhbDpocy5lcXVhbHMoci5kb2N1bWVudFVyaSxpKX19fX0pO3ZhciBYeCxZTT1OKCgpPT57InVzZSBzdHJpY3QiO1h4PWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRBc3ROb2RlTG9jYXRvciIpfWNvbnN0cnVjdG9yKCl7dGhpcy5zZWdtZW50U2VwYXJhdG9yPSIvIix0aGlzLmluZGV4U2VwYXJhdG9yPSJAIn1nZXRBc3ROb2RlUGF0aChlKXtpZihlLiRjb250YWluZXIpe2xldCByPXRoaXMuZ2V0QXN0Tm9kZVBhdGgoZS4kY29udGFpbmVyKSxuPXRoaXMuZ2V0UGF0aFNlZ21lbnQoZSk7cmV0dXJuIHIrdGhpcy5zZWdtZW50U2VwYXJhdG9yK259cmV0dXJuIiJ9Z2V0UGF0aFNlZ21lbnQoeyRjb250YWluZXJQcm9wZXJ0eTplLCRjb250YWluZXJJbmRleDpyfSl7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJNaXNzaW5nICckY29udGFpbmVyUHJvcGVydHknIGluIEFTVCBub2RlLiIpO3JldHVybiByIT09dm9pZCAwP2UrdGhpcy5pbmRleFNlcGFyYXRvcityOmV9Z2V0QXN0Tm9kZShlLHIpe3JldHVybiByLnNwbGl0KHRoaXMuc2VnbWVudFNlcGFyYXRvcikucmVkdWNlKChpLGEpPT57aWYoIWl8fGEubGVuZ3RoPT09MClyZXR1cm4gaTtsZXQgcz1hLmluZGV4T2YodGhpcy5pbmRleFNlcGFyYXRvcik7aWYocz4wKXtsZXQgbD1hLnN1YnN0cmluZygwLHMpLHU9cGFyc2VJbnQoYS5zdWJzdHJpbmcocysxKSksaD1pW2xdO3JldHVybiBoPy5bdV19cmV0dXJuIGlbYV19LGUpfX19KTt2YXIgS249e307dmFyIE5FPU4oKCk9PnsidXNlIHN0cmljdCI7U3IoS24sU2EoTE0oKSwxKSl9KTt2YXIgangsWE09TigoKT0+eyJ1c2Ugc3RyaWN0IjtORSgpO1lvKCk7ang9Y2xhc3N7c3RhdGlje28odGhpcywiRGVmYXVsdENvbmZpZ3VyYXRpb25Qcm92aWRlciIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuX3JlYWR5PW5ldyBjcyx0aGlzLnNldHRpbmdzPXt9LHRoaXMud29ya3NwYWNlQ29uZmlnPSExLHRoaXMub25Db25maWd1cmF0aW9uU2VjdGlvblVwZGF0ZUVtaXR0ZXI9bmV3IEtuLkVtaXR0ZXIsdGhpcy5zZXJ2aWNlUmVnaXN0cnk9ZS5TZXJ2aWNlUmVnaXN0cnl9Z2V0IHJlYWR5KCl7cmV0dXJuIHRoaXMuX3JlYWR5LnByb21pc2V9aW5pdGlhbGl6ZShlKXt2YXIgcixuO3RoaXMud29ya3NwYWNlQ29uZmlnPShuPShyPWUuY2FwYWJpbGl0aWVzLndvcmtzcGFjZSk9PT1udWxsfHxyPT09dm9pZCAwP3ZvaWQgMDpyLmNvbmZpZ3VyYXRpb24pIT09bnVsbCYmbiE9PXZvaWQgMD9uOiExfWFzeW5jIGluaXRpYWxpemVkKGUpe2lmKHRoaXMud29ya3NwYWNlQ29uZmlnKXtpZihlLnJlZ2lzdGVyKXtsZXQgcj10aGlzLnNlcnZpY2VSZWdpc3RyeS5hbGw7ZS5yZWdpc3Rlcih7c2VjdGlvbjpyLm1hcChuPT50aGlzLnRvU2VjdGlvbk5hbWUobi5MYW5ndWFnZU1ldGFEYXRhLmxhbmd1YWdlSWQpKX0pfWlmKGUuZmV0Y2hDb25maWd1cmF0aW9uKXtsZXQgcj10aGlzLnNlcnZpY2VSZWdpc3RyeS5hbGwubWFwKGk9Pih7c2VjdGlvbjp0aGlzLnRvU2VjdGlvbk5hbWUoaS5MYW5ndWFnZU1ldGFEYXRhLmxhbmd1YWdlSWQpfSkpLG49YXdhaXQgZS5mZXRjaENvbmZpZ3VyYXRpb24ocik7ci5mb3JFYWNoKChpLGEpPT57dGhpcy51cGRhdGVTZWN0aW9uQ29uZmlndXJhdGlvbihpLnNlY3Rpb24sblthXSl9KX19dGhpcy5fcmVhZHkucmVzb2x2ZSgpfXVwZGF0ZUNvbmZpZ3VyYXRpb24oZSl7ZS5zZXR0aW5ncyYmT2JqZWN0LmtleXMoZS5zZXR0aW5ncykuZm9yRWFjaChyPT57bGV0IG49ZS5zZXR0aW5nc1tyXTt0aGlzLnVwZGF0ZVNlY3Rpb25Db25maWd1cmF0aW9uKHIsbiksdGhpcy5vbkNvbmZpZ3VyYXRpb25TZWN0aW9uVXBkYXRlRW1pdHRlci5maXJlKHtzZWN0aW9uOnIsY29uZmlndXJhdGlvbjpufSl9KX11cGRhdGVTZWN0aW9uQ29uZmlndXJhdGlvbihlLHIpe3RoaXMuc2V0dGluZ3NbZV09cn1hc3luYyBnZXRDb25maWd1cmF0aW9uKGUscil7YXdhaXQgdGhpcy5yZWFkeTtsZXQgbj10aGlzLnRvU2VjdGlvbk5hbWUoZSk7aWYodGhpcy5zZXR0aW5nc1tuXSlyZXR1cm4gdGhpcy5zZXR0aW5nc1tuXVtyXX10b1NlY3Rpb25OYW1lKGUpe3JldHVybmAke2V9YH1nZXQgb25Db25maWd1cmF0aW9uU2VjdGlvblVwZGF0ZSgpe3JldHVybiB0aGlzLm9uQ29uZmlndXJhdGlvblNlY3Rpb25VcGRhdGVFbWl0dGVyLmV2ZW50fX19KTt2YXIgZmYsak09TigoKT0+eyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyKXtyZXR1cm57ZGlzcG9zZTpvKGFzeW5jKCk9PmF3YWl0IHIoKSwiZGlzcG9zZSIpfX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWV9KShmZnx8KGZmPXt9KSl9KTt2YXIgS3gsS009TigoKT0+eyJ1c2Ugc3RyaWN0IjtxbygpO2pNKCk7ZjEoKTtZbygpO1BzKCk7SHgoKTtoMSgpO0t4PWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHREb2N1bWVudEJ1aWxkZXIiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLnVwZGF0ZUJ1aWxkT3B0aW9ucz17dmFsaWRhdGlvbjp7Y2F0ZWdvcmllczpbImJ1aWx0LWluIiwiZmFzdCJdfX0sdGhpcy51cGRhdGVMaXN0ZW5lcnM9W10sdGhpcy5idWlsZFBoYXNlTGlzdGVuZXJzPW5ldyBCbCx0aGlzLmRvY3VtZW50UGhhc2VMaXN0ZW5lcnM9bmV3IEJsLHRoaXMuYnVpbGRTdGF0ZT1uZXcgTWFwLHRoaXMuZG9jdW1lbnRCdWlsZFdhaXRlcnM9bmV3IE1hcCx0aGlzLmN1cnJlbnRTdGF0ZT1rbi5DaGFuZ2VkLHRoaXMubGFuZ2l1bURvY3VtZW50cz1lLndvcmtzcGFjZS5MYW5naXVtRG9jdW1lbnRzLHRoaXMubGFuZ2l1bURvY3VtZW50RmFjdG9yeT1lLndvcmtzcGFjZS5MYW5naXVtRG9jdW1lbnRGYWN0b3J5LHRoaXMudGV4dERvY3VtZW50cz1lLndvcmtzcGFjZS5UZXh0RG9jdW1lbnRzLHRoaXMuaW5kZXhNYW5hZ2VyPWUud29ya3NwYWNlLkluZGV4TWFuYWdlcix0aGlzLnNlcnZpY2VSZWdpc3RyeT1lLlNlcnZpY2VSZWdpc3RyeX1hc3luYyBidWlsZChlLHI9e30sbj15ci5DYW5jZWxsYXRpb25Ub2tlbi5Ob25lKXt2YXIgaSxhO2ZvcihsZXQgcyBvZiBlKXtsZXQgbD1zLnVyaS50b1N0cmluZygpO2lmKHMuc3RhdGU9PT1rbi5WYWxpZGF0ZWQpe2lmKHR5cGVvZiByLnZhbGlkYXRpb249PSJib29sZWFuIiYmci52YWxpZGF0aW9uKXMuc3RhdGU9a24uSW5kZXhlZFJlZmVyZW5jZXMscy5kaWFnbm9zdGljcz12b2lkIDAsdGhpcy5idWlsZFN0YXRlLmRlbGV0ZShsKTtlbHNlIGlmKHR5cGVvZiByLnZhbGlkYXRpb249PSJvYmplY3QiKXtsZXQgdT10aGlzLmJ1aWxkU3RhdGUuZ2V0KGwpLGg9KGk9dT8ucmVzdWx0KT09PW51bGx8fGk9PT12b2lkIDA/dm9pZCAwOmkudmFsaWRhdGlvbkNoZWNrcztpZihoKXtsZXQgZD0oKGE9ci52YWxpZGF0aW9uLmNhdGVnb3JpZXMpIT09bnVsbCYmYSE9PXZvaWQgMD9hOmcxLmFsbCkuZmlsdGVyKHA9PiFoLmluY2x1ZGVzKHApKTtkLmxlbmd0aD4wJiYodGhpcy5idWlsZFN0YXRlLnNldChsLHtjb21wbGV0ZWQ6ITEsb3B0aW9uczp7dmFsaWRhdGlvbjpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sci52YWxpZGF0aW9uKSx7Y2F0ZWdvcmllczpkfSl9LHJlc3VsdDp1LnJlc3VsdH0pLHMuc3RhdGU9a24uSW5kZXhlZFJlZmVyZW5jZXMpfX19ZWxzZSB0aGlzLmJ1aWxkU3RhdGUuZGVsZXRlKGwpfXRoaXMuY3VycmVudFN0YXRlPWtuLkNoYW5nZWQsYXdhaXQgdGhpcy5lbWl0VXBkYXRlKGUubWFwKHM9PnMudXJpKSxbXSksYXdhaXQgdGhpcy5idWlsZERvY3VtZW50cyhlLHIsbil9YXN5bmMgdXBkYXRlKGUscixuPXlyLkNhbmNlbGxhdGlvblRva2VuLk5vbmUpe3RoaXMuY3VycmVudFN0YXRlPWtuLkNoYW5nZWQ7Zm9yKGxldCBzIG9mIHIpdGhpcy5sYW5naXVtRG9jdW1lbnRzLmRlbGV0ZURvY3VtZW50KHMpLHRoaXMuYnVpbGRTdGF0ZS5kZWxldGUocy50b1N0cmluZygpKSx0aGlzLmluZGV4TWFuYWdlci5yZW1vdmUocyk7Zm9yKGxldCBzIG9mIGUpe2lmKCF0aGlzLmxhbmdpdW1Eb2N1bWVudHMuaW52YWxpZGF0ZURvY3VtZW50KHMpKXtsZXQgdT10aGlzLmxhbmdpdW1Eb2N1bWVudEZhY3RvcnkuZnJvbU1vZGVsKHskdHlwZToiSU5WQUxJRCJ9LHMpO3Uuc3RhdGU9a24uQ2hhbmdlZCx0aGlzLmxhbmdpdW1Eb2N1bWVudHMuYWRkRG9jdW1lbnQodSl9dGhpcy5idWlsZFN0YXRlLmRlbGV0ZShzLnRvU3RyaW5nKCkpfWxldCBpPWVuKGUpLmNvbmNhdChyKS5tYXAocz0+cy50b1N0cmluZygpKS50b1NldCgpO3RoaXMubGFuZ2l1bURvY3VtZW50cy5hbGwuZmlsdGVyKHM9PiFpLmhhcyhzLnVyaS50b1N0cmluZygpKSYmdGhpcy5zaG91bGRSZWxpbmsocyxpKSkuZm9yRWFjaChzPT57dGhpcy5zZXJ2aWNlUmVnaXN0cnkuZ2V0U2VydmljZXMocy51cmkpLnJlZmVyZW5jZXMuTGlua2VyLnVubGluayhzKSxzLnN0YXRlPU1hdGgubWluKHMuc3RhdGUsa24uQ29tcHV0ZWRTY29wZXMpLHMuZGlhZ25vc3RpY3M9dm9pZCAwfSksYXdhaXQgdGhpcy5lbWl0VXBkYXRlKGUsciksYXdhaXQgeGkobik7bGV0IGE9dGhpcy5zb3J0RG9jdW1lbnRzKHRoaXMubGFuZ2l1bURvY3VtZW50cy5hbGwuZmlsdGVyKHM9Pnt2YXIgbDtyZXR1cm4gcy5zdGF0ZTxrbi5MaW5rZWR8fCEoISgobD10aGlzLmJ1aWxkU3RhdGUuZ2V0KHMudXJpLnRvU3RyaW5nKCkpKT09PW51bGx8fGw9PT12b2lkIDApJiZsLmNvbXBsZXRlZCl9KS50b0FycmF5KCkpO2F3YWl0IHRoaXMuYnVpbGREb2N1bWVudHMoYSx0aGlzLnVwZGF0ZUJ1aWxkT3B0aW9ucyxuKX1hc3luYyBlbWl0VXBkYXRlKGUscil7YXdhaXQgUHJvbWlzZS5hbGwodGhpcy51cGRhdGVMaXN0ZW5lcnMubWFwKG49Pm4oZSxyKSkpfXNvcnREb2N1bWVudHMoZSl7bGV0IHI9MCxuPWUubGVuZ3RoLTE7Zm9yKDtyPG47KXtmb3IoO3I8ZS5sZW5ndGgmJnRoaXMuaGFzVGV4dERvY3VtZW50KGVbcl0pOylyKys7Zm9yKDtuPj0wJiYhdGhpcy5oYXNUZXh0RG9jdW1lbnQoZVtuXSk7KW4tLTtyPG4mJihbZVtyXSxlW25dXT1bZVtuXSxlW3JdXSl9cmV0dXJuIGV9aGFzVGV4dERvY3VtZW50KGUpe3ZhciByO3JldHVybiEhKCEoKHI9dGhpcy50ZXh0RG9jdW1lbnRzKT09PW51bGx8fHI9PT12b2lkIDApJiZyLmdldChlLnVyaSkpfXNob3VsZFJlbGluayhlLHIpe3JldHVybiBlLnJlZmVyZW5jZXMuc29tZShuPT5uLmVycm9yIT09dm9pZCAwKT8hMDp0aGlzLmluZGV4TWFuYWdlci5pc0FmZmVjdGVkKGUscil9b25VcGRhdGUoZSl7cmV0dXJuIHRoaXMudXBkYXRlTGlzdGVuZXJzLnB1c2goZSksZmYuY3JlYXRlKCgpPT57bGV0IHI9dGhpcy51cGRhdGVMaXN0ZW5lcnMuaW5kZXhPZihlKTtyPj0wJiZ0aGlzLnVwZGF0ZUxpc3RlbmVycy5zcGxpY2UociwxKX0pfWFzeW5jIGJ1aWxkRG9jdW1lbnRzKGUscixuKXt0aGlzLnByZXBhcmVCdWlsZChlLHIpLGF3YWl0IHRoaXMucnVuQ2FuY2VsYWJsZShlLGtuLlBhcnNlZCxuLGE9PnRoaXMubGFuZ2l1bURvY3VtZW50RmFjdG9yeS51cGRhdGUoYSxuKSksYXdhaXQgdGhpcy5ydW5DYW5jZWxhYmxlKGUsa24uSW5kZXhlZENvbnRlbnQsbixhPT50aGlzLmluZGV4TWFuYWdlci51cGRhdGVDb250ZW50KGEsbikpLGF3YWl0IHRoaXMucnVuQ2FuY2VsYWJsZShlLGtuLkNvbXB1dGVkU2NvcGVzLG4sYXN5bmMgYT0+e2xldCBzPXRoaXMuc2VydmljZVJlZ2lzdHJ5LmdldFNlcnZpY2VzKGEudXJpKS5yZWZlcmVuY2VzLlNjb3BlQ29tcHV0YXRpb247YS5wcmVjb21wdXRlZFNjb3Blcz1hd2FpdCBzLmNvbXB1dGVMb2NhbFNjb3BlcyhhLG4pfSksYXdhaXQgdGhpcy5ydW5DYW5jZWxhYmxlKGUsa24uTGlua2VkLG4sYT0+dGhpcy5zZXJ2aWNlUmVnaXN0cnkuZ2V0U2VydmljZXMoYS51cmkpLnJlZmVyZW5jZXMuTGlua2VyLmxpbmsoYSxuKSksYXdhaXQgdGhpcy5ydW5DYW5jZWxhYmxlKGUsa24uSW5kZXhlZFJlZmVyZW5jZXMsbixhPT50aGlzLmluZGV4TWFuYWdlci51cGRhdGVSZWZlcmVuY2VzKGEsbikpO2xldCBpPWUuZmlsdGVyKGE9PnRoaXMuc2hvdWxkVmFsaWRhdGUoYSkpO2F3YWl0IHRoaXMucnVuQ2FuY2VsYWJsZShpLGtuLlZhbGlkYXRlZCxuLGE9PnRoaXMudmFsaWRhdGUoYSxuKSk7Zm9yKGxldCBhIG9mIGUpe2xldCBzPXRoaXMuYnVpbGRTdGF0ZS5nZXQoYS51cmkudG9TdHJpbmcoKSk7cyYmKHMuY29tcGxldGVkPSEwKX19cHJlcGFyZUJ1aWxkKGUscil7Zm9yKGxldCBuIG9mIGUpe2xldCBpPW4udXJpLnRvU3RyaW5nKCksYT10aGlzLmJ1aWxkU3RhdGUuZ2V0KGkpOyghYXx8YS5jb21wbGV0ZWQpJiZ0aGlzLmJ1aWxkU3RhdGUuc2V0KGkse2NvbXBsZXRlZDohMSxvcHRpb25zOnIscmVzdWx0OmE/LnJlc3VsdH0pfX1hc3luYyBydW5DYW5jZWxhYmxlKGUscixuLGkpe2xldCBhPWUuZmlsdGVyKGw9Pmwuc3RhdGU8cik7Zm9yKGxldCBsIG9mIGEpYXdhaXQgeGkobiksYXdhaXQgaShsKSxsLnN0YXRlPXIsYXdhaXQgdGhpcy5ub3RpZnlEb2N1bWVudFBoYXNlKGwscixuKTtsZXQgcz1lLmZpbHRlcihsPT5sLnN0YXRlPT09cik7YXdhaXQgdGhpcy5ub3RpZnlCdWlsZFBoYXNlKHMscixuKSx0aGlzLmN1cnJlbnRTdGF0ZT1yfW9uQnVpbGRQaGFzZShlLHIpe3JldHVybiB0aGlzLmJ1aWxkUGhhc2VMaXN0ZW5lcnMuYWRkKGUsciksZmYuY3JlYXRlKCgpPT57dGhpcy5idWlsZFBoYXNlTGlzdGVuZXJzLmRlbGV0ZShlLHIpfSl9b25Eb2N1bWVudFBoYXNlKGUscil7cmV0dXJuIHRoaXMuZG9jdW1lbnRQaGFzZUxpc3RlbmVycy5hZGQoZSxyKSxmZi5jcmVhdGUoKCk9Pnt0aGlzLmRvY3VtZW50UGhhc2VMaXN0ZW5lcnMuZGVsZXRlKGUscil9KX13YWl0VW50aWwoZSxyLG4pe2xldCBpO2lmKHImJiJwYXRoImluIHI/aT1yOm49cixuPz8obj15ci5DYW5jZWxsYXRpb25Ub2tlbi5Ob25lKSxpKXtsZXQgYT10aGlzLmxhbmdpdW1Eb2N1bWVudHMuZ2V0RG9jdW1lbnQoaSk7aWYoYSYmYS5zdGF0ZT5lKXJldHVybiBQcm9taXNlLnJlc29sdmUoaSl9cmV0dXJuIHRoaXMuY3VycmVudFN0YXRlPj1lP1Byb21pc2UucmVzb2x2ZSh2b2lkIDApOm4uaXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQ/UHJvbWlzZS5yZWplY3QoUGMpOm5ldyBQcm9taXNlKChhLHMpPT57bGV0IGw9dGhpcy5vbkJ1aWxkUGhhc2UoZSwoKT0+e2lmKGwuZGlzcG9zZSgpLHUuZGlzcG9zZSgpLGkpe2xldCBoPXRoaXMubGFuZ2l1bURvY3VtZW50cy5nZXREb2N1bWVudChpKTthKGg/LnVyaSl9ZWxzZSBhKHZvaWQgMCl9KSx1PW4ub25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQoKCk9PntsLmRpc3Bvc2UoKSx1LmRpc3Bvc2UoKSxzKFBjKX0pfSl9YXN5bmMgbm90aWZ5RG9jdW1lbnRQaGFzZShlLHIsbil7bGV0IGE9dGhpcy5kb2N1bWVudFBoYXNlTGlzdGVuZXJzLmdldChyKS5zbGljZSgpO2ZvcihsZXQgcyBvZiBhKXRyeXthd2FpdCBzKGUsbil9Y2F0Y2gobCl7aWYoIUJjKGwpKXRocm93IGx9fWFzeW5jIG5vdGlmeUJ1aWxkUGhhc2UoZSxyLG4pe2lmKGUubGVuZ3RoPT09MClyZXR1cm47bGV0IGE9dGhpcy5idWlsZFBoYXNlTGlzdGVuZXJzLmdldChyKS5zbGljZSgpO2ZvcihsZXQgcyBvZiBhKWF3YWl0IHhpKG4pLGF3YWl0IHMoZSxuKX1zaG91bGRWYWxpZGF0ZShlKXtyZXR1cm4hIXRoaXMuZ2V0QnVpbGRPcHRpb25zKGUpLnZhbGlkYXRpb259YXN5bmMgdmFsaWRhdGUoZSxyKXt2YXIgbixpO2xldCBhPXRoaXMuc2VydmljZVJlZ2lzdHJ5LmdldFNlcnZpY2VzKGUudXJpKS52YWxpZGF0aW9uLkRvY3VtZW50VmFsaWRhdG9yLHM9dGhpcy5nZXRCdWlsZE9wdGlvbnMoZSkudmFsaWRhdGlvbixsPXR5cGVvZiBzPT0ib2JqZWN0Ij9zOnZvaWQgMCx1PWF3YWl0IGEudmFsaWRhdGVEb2N1bWVudChlLGwscik7ZS5kaWFnbm9zdGljcz9lLmRpYWdub3N0aWNzLnB1c2goLi4udSk6ZS5kaWFnbm9zdGljcz11O2xldCBoPXRoaXMuYnVpbGRTdGF0ZS5nZXQoZS51cmkudG9TdHJpbmcoKSk7aWYoaCl7KG49aC5yZXN1bHQpIT09bnVsbCYmbiE9PXZvaWQgMHx8KGgucmVzdWx0PXt9KTtsZXQgZj0oaT1sPy5jYXRlZ29yaWVzKSE9PW51bGwmJmkhPT12b2lkIDA/aTpnMS5hbGw7aC5yZXN1bHQudmFsaWRhdGlvbkNoZWNrcz9oLnJlc3VsdC52YWxpZGF0aW9uQ2hlY2tzLnB1c2goLi4uZik6aC5yZXN1bHQudmFsaWRhdGlvbkNoZWNrcz1bLi4uZl19fWdldEJ1aWxkT3B0aW9ucyhlKXt2YXIgcixuO3JldHVybihuPShyPXRoaXMuYnVpbGRTdGF0ZS5nZXQoZS51cmkudG9TdHJpbmcoKSkpPT09bnVsbHx8cj09PXZvaWQgMD92b2lkIDA6ci5vcHRpb25zKSE9PW51bGwmJm4hPT12b2lkIDA/bjp7fX19fSk7dmFyIFF4LFFNPU4oKCk9PnsidXNlIHN0cmljdCI7aXMoKTtERSgpO3FvKCk7UHMoKTtGYygpO1F4PWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRJbmRleE1hbmFnZXIiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLnN5bWJvbEluZGV4PW5ldyBNYXAsdGhpcy5zeW1ib2xCeVR5cGVJbmRleD1uZXcgeHAsdGhpcy5yZWZlcmVuY2VJbmRleD1uZXcgTWFwLHRoaXMuZG9jdW1lbnRzPWUud29ya3NwYWNlLkxhbmdpdW1Eb2N1bWVudHMsdGhpcy5zZXJ2aWNlUmVnaXN0cnk9ZS5TZXJ2aWNlUmVnaXN0cnksdGhpcy5hc3RSZWZsZWN0aW9uPWUuQXN0UmVmbGVjdGlvbn1maW5kQWxsUmVmZXJlbmNlcyhlLHIpe2xldCBuPVBhKGUpLnVyaSxpPVtdO3JldHVybiB0aGlzLnJlZmVyZW5jZUluZGV4LmZvckVhY2goYT0+e2EuZm9yRWFjaChzPT57aHMuZXF1YWxzKHMudGFyZ2V0VXJpLG4pJiZzLnRhcmdldFBhdGg9PT1yJiZpLnB1c2gocyl9KX0pLGVuKGkpfWFsbEVsZW1lbnRzKGUscil7bGV0IG49ZW4odGhpcy5zeW1ib2xJbmRleC5rZXlzKCkpO3JldHVybiByJiYobj1uLmZpbHRlcihpPT4hcnx8ci5oYXMoaSkpKSxuLm1hcChpPT50aGlzLmdldEZpbGVEZXNjcmlwdGlvbnMoaSxlKSkuZmxhdCgpfWdldEZpbGVEZXNjcmlwdGlvbnMoZSxyKXt2YXIgbjtyZXR1cm4gcj90aGlzLnN5bWJvbEJ5VHlwZUluZGV4LmdldChlLHIsKCk9Pnt2YXIgYTtyZXR1cm4oKGE9dGhpcy5zeW1ib2xJbmRleC5nZXQoZSkpIT09bnVsbCYmYSE9PXZvaWQgMD9hOltdKS5maWx0ZXIobD0+dGhpcy5hc3RSZWZsZWN0aW9uLmlzU3VidHlwZShsLnR5cGUscikpfSk6KG49dGhpcy5zeW1ib2xJbmRleC5nZXQoZSkpIT09bnVsbCYmbiE9PXZvaWQgMD9uOltdfXJlbW92ZShlKXtsZXQgcj1lLnRvU3RyaW5nKCk7dGhpcy5zeW1ib2xJbmRleC5kZWxldGUociksdGhpcy5zeW1ib2xCeVR5cGVJbmRleC5jbGVhcihyKSx0aGlzLnJlZmVyZW5jZUluZGV4LmRlbGV0ZShyKX1hc3luYyB1cGRhdGVDb250ZW50KGUscj15ci5DYW5jZWxsYXRpb25Ub2tlbi5Ob25lKXtsZXQgaT1hd2FpdCB0aGlzLnNlcnZpY2VSZWdpc3RyeS5nZXRTZXJ2aWNlcyhlLnVyaSkucmVmZXJlbmNlcy5TY29wZUNvbXB1dGF0aW9uLmNvbXB1dGVFeHBvcnRzKGUsciksYT1lLnVyaS50b1N0cmluZygpO3RoaXMuc3ltYm9sSW5kZXguc2V0KGEsaSksdGhpcy5zeW1ib2xCeVR5cGVJbmRleC5jbGVhcihhKX1hc3luYyB1cGRhdGVSZWZlcmVuY2VzKGUscj15ci5DYW5jZWxsYXRpb25Ub2tlbi5Ob25lKXtsZXQgaT1hd2FpdCB0aGlzLnNlcnZpY2VSZWdpc3RyeS5nZXRTZXJ2aWNlcyhlLnVyaSkud29ya3NwYWNlLlJlZmVyZW5jZURlc2NyaXB0aW9uUHJvdmlkZXIuY3JlYXRlRGVzY3JpcHRpb25zKGUscik7dGhpcy5yZWZlcmVuY2VJbmRleC5zZXQoZS51cmkudG9TdHJpbmcoKSxpKX1pc0FmZmVjdGVkKGUscil7bGV0IG49dGhpcy5yZWZlcmVuY2VJbmRleC5nZXQoZS51cmkudG9TdHJpbmcoKSk7cmV0dXJuIG4/bi5zb21lKGk9PiFpLmxvY2FsJiZyLmhhcyhpLnRhcmdldFVyaS50b1N0cmluZygpKSk6ITF9fX0pO3ZhciBaeCxaTT1OKCgpPT57InVzZSBzdHJpY3QiO3FvKCk7WW8oKTtGYygpO1p4PWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRXb3Jrc3BhY2VNYW5hZ2VyIil9Y29uc3RydWN0b3IoZSl7dGhpcy5pbml0aWFsQnVpbGRPcHRpb25zPXt9LHRoaXMuX3JlYWR5PW5ldyBjcyx0aGlzLnNlcnZpY2VSZWdpc3RyeT1lLlNlcnZpY2VSZWdpc3RyeSx0aGlzLmxhbmdpdW1Eb2N1bWVudHM9ZS53b3Jrc3BhY2UuTGFuZ2l1bURvY3VtZW50cyx0aGlzLmRvY3VtZW50QnVpbGRlcj1lLndvcmtzcGFjZS5Eb2N1bWVudEJ1aWxkZXIsdGhpcy5maWxlU3lzdGVtUHJvdmlkZXI9ZS53b3Jrc3BhY2UuRmlsZVN5c3RlbVByb3ZpZGVyLHRoaXMubXV0ZXg9ZS53b3Jrc3BhY2UuV29ya3NwYWNlTG9ja31nZXQgcmVhZHkoKXtyZXR1cm4gdGhpcy5fcmVhZHkucHJvbWlzZX1nZXQgd29ya3NwYWNlRm9sZGVycygpe3JldHVybiB0aGlzLmZvbGRlcnN9aW5pdGlhbGl6ZShlKXt2YXIgcjt0aGlzLmZvbGRlcnM9KHI9ZS53b3Jrc3BhY2VGb2xkZXJzKSE9PW51bGwmJnIhPT12b2lkIDA/cjp2b2lkIDB9aW5pdGlhbGl6ZWQoZSl7cmV0dXJuIHRoaXMubXV0ZXgud3JpdGUocj0+e3ZhciBuO3JldHVybiB0aGlzLmluaXRpYWxpemVXb3Jrc3BhY2UoKG49dGhpcy5mb2xkZXJzKSE9PW51bGwmJm4hPT12b2lkIDA/bjpbXSxyKX0pfWFzeW5jIGluaXRpYWxpemVXb3Jrc3BhY2UoZSxyPXlyLkNhbmNlbGxhdGlvblRva2VuLk5vbmUpe2xldCBuPWF3YWl0IHRoaXMucGVyZm9ybVN0YXJ0dXAoZSk7YXdhaXQgeGkociksYXdhaXQgdGhpcy5kb2N1bWVudEJ1aWxkZXIuYnVpbGQobix0aGlzLmluaXRpYWxCdWlsZE9wdGlvbnMscil9YXN5bmMgcGVyZm9ybVN0YXJ0dXAoZSl7bGV0IHI9dGhpcy5zZXJ2aWNlUmVnaXN0cnkuYWxsLmZsYXRNYXAoYT0+YS5MYW5ndWFnZU1ldGFEYXRhLmZpbGVFeHRlbnNpb25zKSxuPVtdLGk9byhhPT57bi5wdXNoKGEpLHRoaXMubGFuZ2l1bURvY3VtZW50cy5oYXNEb2N1bWVudChhLnVyaSl8fHRoaXMubGFuZ2l1bURvY3VtZW50cy5hZGREb2N1bWVudChhKX0sImNvbGxlY3RvciIpO3JldHVybiBhd2FpdCB0aGlzLmxvYWRBZGRpdGlvbmFsRG9jdW1lbnRzKGUsaSksYXdhaXQgUHJvbWlzZS5hbGwoZS5tYXAoYT0+W2EsdGhpcy5nZXRSb290Rm9sZGVyKGEpXSkubWFwKGFzeW5jIGE9PnRoaXMudHJhdmVyc2VGb2xkZXIoLi4uYSxyLGkpKSksdGhpcy5fcmVhZHkucmVzb2x2ZSgpLG59bG9hZEFkZGl0aW9uYWxEb2N1bWVudHMoZSxyKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCl9Z2V0Um9vdEZvbGRlcihlKXtyZXR1cm4gdXMucGFyc2UoZS51cmkpfWFzeW5jIHRyYXZlcnNlRm9sZGVyKGUscixuLGkpe2xldCBhPWF3YWl0IHRoaXMuZmlsZVN5c3RlbVByb3ZpZGVyLnJlYWREaXJlY3Rvcnkocik7YXdhaXQgUHJvbWlzZS5hbGwoYS5tYXAoYXN5bmMgcz0+e2lmKHRoaXMuaW5jbHVkZUVudHJ5KGUscyxuKSl7aWYocy5pc0RpcmVjdG9yeSlhd2FpdCB0aGlzLnRyYXZlcnNlRm9sZGVyKGUscy51cmksbixpKTtlbHNlIGlmKHMuaXNGaWxlKXtsZXQgbD1hd2FpdCB0aGlzLmxhbmdpdW1Eb2N1bWVudHMuZ2V0T3JDcmVhdGVEb2N1bWVudChzLnVyaSk7aShsKX19fSkpfWluY2x1ZGVFbnRyeShlLHIsbil7bGV0IGk9aHMuYmFzZW5hbWUoci51cmkpO2lmKGkuc3RhcnRzV2l0aCgiLiIpKXJldHVybiExO2lmKHIuaXNEaXJlY3RvcnkpcmV0dXJuIGkhPT0ibm9kZV9tb2R1bGVzIiYmaSE9PSJvdXQiO2lmKHIuaXNGaWxlKXtsZXQgYT1ocy5leHRuYW1lKHIudXJpKTtyZXR1cm4gbi5pbmNsdWRlcyhhKX1yZXR1cm4hMX19fSk7ZnVuY3Rpb24gSUUodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCkmJih0Lmxlbmd0aD09PTB8fCJuYW1lImluIHRbMF0pfWZ1bmN0aW9uIGVJKHQpe3JldHVybiB0JiYibW9kZXMiaW4gdCYmImRlZmF1bHRNb2RlImluIHR9ZnVuY3Rpb24gSk0odCl7cmV0dXJuIUlFKHQpJiYhZUkodCl9dmFyIEp4LE1FLHdwLE9FPU4oKCk9PnsidXNlIHN0cmljdCI7Y2YoKTtKeD1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZhdWx0TGV4ZXJFcnJvck1lc3NhZ2VQcm92aWRlciIpfWJ1aWxkVW5leHBlY3RlZENoYXJhY3RlcnNNZXNzYWdlKGUscixuLGksYSl7cmV0dXJuIEdnLmJ1aWxkVW5leHBlY3RlZENoYXJhY3RlcnNNZXNzYWdlKGUscixuLGksYSl9YnVpbGRVbmFibGVUb1BvcExleGVyTW9kZU1lc3NhZ2UoZSl7cmV0dXJuIEdnLmJ1aWxkVW5hYmxlVG9Qb3BMZXhlck1vZGVNZXNzYWdlKGUpfX0sTUU9e21vZGU6ImZ1bGwifSx3cD1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZhdWx0TGV4ZXIiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLmVycm9yTWVzc2FnZVByb3ZpZGVyPWUucGFyc2VyLkxleGVyRXJyb3JNZXNzYWdlUHJvdmlkZXIsdGhpcy50b2tlbkJ1aWxkZXI9ZS5wYXJzZXIuVG9rZW5CdWlsZGVyO2xldCByPXRoaXMudG9rZW5CdWlsZGVyLmJ1aWxkVG9rZW5zKGUuR3JhbW1hcix7Y2FzZUluc2Vuc2l0aXZlOmUuTGFuZ3VhZ2VNZXRhRGF0YS5jYXNlSW5zZW5zaXRpdmV9KTt0aGlzLnRva2VuVHlwZXM9dGhpcy50b1Rva2VuVHlwZURpY3Rpb25hcnkocik7bGV0IG49Sk0ocik/T2JqZWN0LnZhbHVlcyhyKTpyLGk9ZS5MYW5ndWFnZU1ldGFEYXRhLm1vZGU9PT0icHJvZHVjdGlvbiI7dGhpcy5jaGV2cm90YWluTGV4ZXI9bmV3IFhuKG4se3Bvc2l0aW9uVHJhY2tpbmc6ImZ1bGwiLHNraXBWYWxpZGF0aW9uczppLGVycm9yTWVzc2FnZVByb3ZpZGVyOnRoaXMuZXJyb3JNZXNzYWdlUHJvdmlkZXJ9KX1nZXQgZGVmaW5pdGlvbigpe3JldHVybiB0aGlzLnRva2VuVHlwZXN9dG9rZW5pemUoZSxyPU1FKXt2YXIgbixpLGE7bGV0IHM9dGhpcy5jaGV2cm90YWluTGV4ZXIudG9rZW5pemUoZSk7cmV0dXJue3Rva2VuczpzLnRva2VucyxlcnJvcnM6cy5lcnJvcnMsaGlkZGVuOihuPXMuZ3JvdXBzLmhpZGRlbikhPT1udWxsJiZuIT09dm9pZCAwP246W10scmVwb3J0OihhPShpPXRoaXMudG9rZW5CdWlsZGVyKS5mbHVzaExleGluZ1JlcG9ydCk9PT1udWxsfHxhPT09dm9pZCAwP3ZvaWQgMDphLmNhbGwoaSxlKX19dG9Ub2tlblR5cGVEaWN0aW9uYXJ5KGUpe2lmKEpNKGUpKXJldHVybiBlO2xldCByPWVJKGUpP09iamVjdC52YWx1ZXMoZS5tb2RlcykuZmxhdCgpOmUsbj17fTtyZXR1cm4gci5mb3JFYWNoKGk9Pm5baS5uYW1lXT1pKSxufX07byhJRSwiaXNUb2tlblR5cGVBcnJheSIpO28oZUksImlzSU11bHRpTW9kZUxleGVyRGVmaW5pdGlvbiIpO28oSk0sImlzVG9rZW5UeXBlRGljdGlvbmFyeSIpfSk7ZnVuY3Rpb24gbkkodCxlLHIpe2xldCBuLGk7dHlwZW9mIHQ9PSJzdHJpbmciPyhpPWUsbj1yKTooaT10LnJhbmdlLnN0YXJ0LG49ZSksaXx8KGk9anIuY3JlYXRlKDAsMCkpO2xldCBhPVFsZSh0KSxzPWFJKG4pLGw9d0ZlKHtsaW5lczphLHBvc2l0aW9uOmksb3B0aW9uczpzfSk7cmV0dXJuIENGZSh7aW5kZXg6MCx0b2tlbnM6bCxwb3NpdGlvbjppfSl9ZnVuY3Rpb24gaUkodCxlKXtsZXQgcj1hSShlKSxuPVFsZSh0KTtpZihuLmxlbmd0aD09PTApcmV0dXJuITE7bGV0IGk9blswXSxhPW5bbi5sZW5ndGgtMV0scz1yLnN0YXJ0LGw9ci5lbmQ7cmV0dXJuISFzPy5leGVjKGkpJiYhIWw/LmV4ZWMoYSl9ZnVuY3Rpb24gUWxlKHQpe2xldCBlPSIiO3JldHVybiB0eXBlb2YgdD09InN0cmluZyI/ZT10OmU9dC50ZXh0LGUuc3BsaXQoSlIpfWZ1bmN0aW9uIHdGZSh0KXt2YXIgZSxyLG47bGV0IGk9W10sYT10LnBvc2l0aW9uLmxpbmUscz10LnBvc2l0aW9uLmNoYXJhY3Rlcjtmb3IobGV0IGw9MDtsPHQubGluZXMubGVuZ3RoO2wrKyl7bGV0IHU9bD09PTAsaD1sPT09dC5saW5lcy5sZW5ndGgtMSxmPXQubGluZXNbbF0sZD0wO2lmKHUmJnQub3B0aW9ucy5zdGFydCl7bGV0IG09KGU9dC5vcHRpb25zLnN0YXJ0KT09PW51bGx8fGU9PT12b2lkIDA/dm9pZCAwOmUuZXhlYyhmKTttJiYoZD1tLmluZGV4K21bMF0ubGVuZ3RoKX1lbHNle2xldCBtPShyPXQub3B0aW9ucy5saW5lKT09PW51bGx8fHI9PT12b2lkIDA/dm9pZCAwOnIuZXhlYyhmKTttJiYoZD1tLmluZGV4K21bMF0ubGVuZ3RoKX1pZihoKXtsZXQgbT0obj10Lm9wdGlvbnMuZW5kKT09PW51bGx8fG49PT12b2lkIDA/dm9pZCAwOm4uZXhlYyhmKTttJiYoZj1mLnN1YnN0cmluZygwLG0uaW5kZXgpKX1pZihmPWYuc3Vic3RyaW5nKDAsU0ZlKGYpKSxySShmLGQpPj1mLmxlbmd0aCl7aWYoaS5sZW5ndGg+MCl7bGV0IG09anIuY3JlYXRlKGEscyk7aS5wdXNoKHt0eXBlOiJicmVhayIsY29udGVudDoiIixyYW5nZTpQci5jcmVhdGUobSxtKX0pfX1lbHNle2psZS5sYXN0SW5kZXg9ZDtsZXQgbT1qbGUuZXhlYyhmKTtpZihtKXtsZXQgZz1tWzBdLHk9bVsxXSx2PWpyLmNyZWF0ZShhLHMrZCkseD1qci5jcmVhdGUoYSxzK2QrZy5sZW5ndGgpO2kucHVzaCh7dHlwZToidGFnIixjb250ZW50OnkscmFuZ2U6UHIuY3JlYXRlKHYseCl9KSxkKz1nLmxlbmd0aCxkPXJJKGYsZCl9aWYoZDxmLmxlbmd0aCl7bGV0IGc9Zi5zdWJzdHJpbmcoZCkseT1BcnJheS5mcm9tKGcubWF0Y2hBbGwoYkZlKSk7aS5wdXNoKC4uLlRGZSh5LGcsYSxzK2QpKX19YSsrLHM9MH1yZXR1cm4gaS5sZW5ndGg+MCYmaVtpLmxlbmd0aC0xXS50eXBlPT09ImJyZWFrIj9pLnNsaWNlKDAsLTEpOml9ZnVuY3Rpb24gVEZlKHQsZSxyLG4pe2xldCBpPVtdO2lmKHQubGVuZ3RoPT09MCl7bGV0IGE9anIuY3JlYXRlKHIsbikscz1qci5jcmVhdGUocixuK2UubGVuZ3RoKTtpLnB1c2goe3R5cGU6InRleHQiLGNvbnRlbnQ6ZSxyYW5nZTpQci5jcmVhdGUoYSxzKX0pfWVsc2V7bGV0IGE9MDtmb3IobGV0IGwgb2YgdCl7bGV0IHU9bC5pbmRleCxoPWUuc3Vic3RyaW5nKGEsdSk7aC5sZW5ndGg+MCYmaS5wdXNoKHt0eXBlOiJ0ZXh0Iixjb250ZW50OmUuc3Vic3RyaW5nKGEsdSkscmFuZ2U6UHIuY3JlYXRlKGpyLmNyZWF0ZShyLGErbiksanIuY3JlYXRlKHIsdStuKSl9KTtsZXQgZj1oLmxlbmd0aCsxLGQ9bFsxXTtpZihpLnB1c2goe3R5cGU6ImlubGluZS10YWciLGNvbnRlbnQ6ZCxyYW5nZTpQci5jcmVhdGUoanIuY3JlYXRlKHIsYStmK24pLGpyLmNyZWF0ZShyLGErZitkLmxlbmd0aCtuKSl9KSxmKz1kLmxlbmd0aCxsLmxlbmd0aD09PTQpe2YrPWxbMl0ubGVuZ3RoO2xldCBwPWxbM107aS5wdXNoKHt0eXBlOiJ0ZXh0Iixjb250ZW50OnAscmFuZ2U6UHIuY3JlYXRlKGpyLmNyZWF0ZShyLGErZituKSxqci5jcmVhdGUocixhK2YrcC5sZW5ndGgrbikpfSl9ZWxzZSBpLnB1c2goe3R5cGU6InRleHQiLGNvbnRlbnQ6IiIscmFuZ2U6UHIuY3JlYXRlKGpyLmNyZWF0ZShyLGErZituKSxqci5jcmVhdGUocixhK2YrbikpfSk7YT11K2xbMF0ubGVuZ3RofWxldCBzPWUuc3Vic3RyaW5nKGEpO3MubGVuZ3RoPjAmJmkucHVzaCh7dHlwZToidGV4dCIsY29udGVudDpzLHJhbmdlOlByLmNyZWF0ZShqci5jcmVhdGUocixhK24pLGpyLmNyZWF0ZShyLGErbitzLmxlbmd0aCkpfSl9cmV0dXJuIGl9ZnVuY3Rpb24gckkodCxlKXtsZXQgcj10LnN1YnN0cmluZyhlKS5tYXRjaChrRmUpO3JldHVybiByP2Urci5pbmRleDp0Lmxlbmd0aH1mdW5jdGlvbiBTRmUodCl7bGV0IGU9dC5tYXRjaChFRmUpO2lmKGUmJnR5cGVvZiBlLmluZGV4PT0ibnVtYmVyIilyZXR1cm4gZS5pbmRleH1mdW5jdGlvbiBDRmUodCl7dmFyIGUscixuLGk7bGV0IGE9anIuY3JlYXRlKHQucG9zaXRpb24ubGluZSx0LnBvc2l0aW9uLmNoYXJhY3Rlcik7aWYodC50b2tlbnMubGVuZ3RoPT09MClyZXR1cm4gbmV3IFBFKFtdLFByLmNyZWF0ZShhLGEpKTtsZXQgcz1bXTtmb3IoO3QuaW5kZXg8dC50b2tlbnMubGVuZ3RoOyl7bGV0IGg9QUZlKHQsc1tzLmxlbmd0aC0xXSk7aCYmcy5wdXNoKGgpfWxldCBsPShyPShlPXNbMF0pPT09bnVsbHx8ZT09PXZvaWQgMD92b2lkIDA6ZS5yYW5nZS5zdGFydCkhPT1udWxsJiZyIT09dm9pZCAwP3I6YSx1PShpPShuPXNbcy5sZW5ndGgtMV0pPT09bnVsbHx8bj09PXZvaWQgMD92b2lkIDA6bi5yYW5nZS5lbmQpIT09bnVsbCYmaSE9PXZvaWQgMD9pOmE7cmV0dXJuIG5ldyBQRShzLFByLmNyZWF0ZShsLHUpKX1mdW5jdGlvbiBBRmUodCxlKXtsZXQgcj10LnRva2Vuc1t0LmluZGV4XTtpZihyLnR5cGU9PT0idGFnIilyZXR1cm4gSmxlKHQsITEpO2lmKHIudHlwZT09PSJ0ZXh0Inx8ci50eXBlPT09ImlubGluZS10YWciKXJldHVybiBabGUodCk7X0ZlKHIsZSksdC5pbmRleCsrfWZ1bmN0aW9uIF9GZSh0LGUpe2lmKGUpe2xldCByPW5ldyBCRSgiIix0LnJhbmdlKTsiaW5saW5lcyJpbiBlP2UuaW5saW5lcy5wdXNoKHIpOmUuY29udGVudC5pbmxpbmVzLnB1c2gocil9fWZ1bmN0aW9uIFpsZSh0KXtsZXQgZT10LnRva2Vuc1t0LmluZGV4XSxyPWUsbj1lLGk9W107Zm9yKDtlJiZlLnR5cGUhPT0iYnJlYWsiJiZlLnR5cGUhPT0idGFnIjspaS5wdXNoKERGZSh0KSksbj1lLGU9dC50b2tlbnNbdC5pbmRleF07cmV0dXJuIG5ldyB0YihpLFByLmNyZWF0ZShyLnJhbmdlLnN0YXJ0LG4ucmFuZ2UuZW5kKSl9ZnVuY3Rpb24gREZlKHQpe3JldHVybiB0LnRva2Vuc1t0LmluZGV4XS50eXBlPT09ImlubGluZS10YWciP0psZSh0LCEwKTplY2UodCl9ZnVuY3Rpb24gSmxlKHQsZSl7bGV0IHI9dC50b2tlbnNbdC5pbmRleCsrXSxuPXIuY29udGVudC5zdWJzdHJpbmcoMSksaT10LnRva2Vuc1t0LmluZGV4XTtpZihpPy50eXBlPT09InRleHQiKWlmKGUpe2xldCBhPWVjZSh0KTtyZXR1cm4gbmV3IGViKG4sbmV3IHRiKFthXSxhLnJhbmdlKSxlLFByLmNyZWF0ZShyLnJhbmdlLnN0YXJ0LGEucmFuZ2UuZW5kKSl9ZWxzZXtsZXQgYT1abGUodCk7cmV0dXJuIG5ldyBlYihuLGEsZSxQci5jcmVhdGUoci5yYW5nZS5zdGFydCxhLnJhbmdlLmVuZCkpfWVsc2V7bGV0IGE9ci5yYW5nZTtyZXR1cm4gbmV3IGViKG4sbmV3IHRiKFtdLGEpLGUsYSl9fWZ1bmN0aW9uIGVjZSh0KXtsZXQgZT10LnRva2Vuc1t0LmluZGV4KytdO3JldHVybiBuZXcgQkUoZS5jb250ZW50LGUucmFuZ2UpfWZ1bmN0aW9uIGFJKHQpe2lmKCF0KXJldHVybiBhSSh7c3RhcnQ6Ii8qKiIsZW5kOiIqLyIsbGluZToiKiJ9KTtsZXR7c3RhcnQ6ZSxlbmQ6cixsaW5lOm59PXQ7cmV0dXJue3N0YXJ0OnRJKGUsITApLGVuZDp0SShyLCExKSxsaW5lOnRJKG4sITApfX1mdW5jdGlvbiB0SSh0LGUpe2lmKHR5cGVvZiB0PT0ic3RyaW5nInx8dHlwZW9mIHQ9PSJvYmplY3QiKXtsZXQgcj10eXBlb2YgdD09InN0cmluZyI/YXAodCk6dC5zb3VyY2U7cmV0dXJuIGU/bmV3IFJlZ0V4cChgXlxccyoke3J9YCk6bmV3IFJlZ0V4cChgXFxzKiR7cn1cXHMqJGApfWVsc2UgcmV0dXJuIHR9ZnVuY3Rpb24gTEZlKHQsZSxyKXt2YXIgbixpO2lmKHQ9PT0ibGlua3BsYWluInx8dD09PSJsaW5rY29kZSJ8fHQ9PT0ibGluayIpe2xldCBhPWUuaW5kZXhPZigiICIpLHM9ZTtpZihhPjApe2xldCB1PXJJKGUsYSk7cz1lLnN1YnN0cmluZyh1KSxlPWUuc3Vic3RyaW5nKDAsYSl9cmV0dXJuKHQ9PT0ibGlua2NvZGUifHx0PT09ImxpbmsiJiZyLmxpbms9PT0iY29kZSIpJiYocz1gXGAke3N9XGBgKSwoaT0obj1yLnJlbmRlckxpbmspPT09bnVsbHx8bj09PXZvaWQgMD92b2lkIDA6bi5jYWxsKHIsZSxzKSkhPT1udWxsJiZpIT09dm9pZCAwP2k6UkZlKGUscyl9fWZ1bmN0aW9uIFJGZSh0LGUpe3RyeXtyZXR1cm4gdXMucGFyc2UodCwhMCksYFske2V9XSgke3R9KWB9Y2F0Y2h7cmV0dXJuIHR9fWZ1bmN0aW9uIEtsZSh0KXtyZXR1cm4gdC5lbmRzV2l0aChgCmApP2AKYDpgCgpgfXZhciBqbGUsYkZlLGtGZSxFRmUsUEUsZWIsdGIsQkUsc0k9TigoKT0+eyJ1c2Ugc3RyaWN0IjttTSgpO0xnKCk7RmMoKTtvKG5JLCJwYXJzZUpTRG9jIik7byhpSSwiaXNKU0RvYyIpO28oUWxlLCJnZXRMaW5lcyIpO2psZT0vXHMqKEAoW1xwe0x9XVtccHtMfVxwe059XSopPykvdXksYkZlPS9ceyhAW1xwe0x9XVtccHtMfVxwe059XSopKFxzKikoW15cclxufV0rKT9cfS9ndTtvKHdGZSwidG9rZW5pemUiKTtvKFRGZSwiYnVpbGRJbmxpbmVUb2tlbnMiKTtrRmU9L1xTLyxFRmU9L1xzKiQvO28ockksInNraXBXaGl0ZXNwYWNlIik7byhTRmUsImxhc3RDaGFyYWN0ZXIiKTtvKENGZSwicGFyc2VKU0RvY0NvbW1lbnQiKTtvKEFGZSwicGFyc2VKU0RvY0VsZW1lbnQiKTtvKF9GZSwiYXBwZW5kRW1wdHlMaW5lIik7byhabGUsInBhcnNlSlNEb2NUZXh0Iik7byhERmUsInBhcnNlSlNEb2NJbmxpbmUiKTtvKEpsZSwicGFyc2VKU0RvY1RhZyIpO28oZWNlLCJwYXJzZUpTRG9jTGluZSIpO28oYUksIm5vcm1hbGl6ZU9wdGlvbnMiKTtvKHRJLCJub3JtYWxpemVPcHRpb24iKTtQRT1jbGFzc3tzdGF0aWN7byh0aGlzLCJKU0RvY0NvbW1lbnRJbXBsIil9Y29uc3RydWN0b3IoZSxyKXt0aGlzLmVsZW1lbnRzPWUsdGhpcy5yYW5nZT1yfWdldFRhZyhlKXtyZXR1cm4gdGhpcy5nZXRBbGxUYWdzKCkuZmluZChyPT5yLm5hbWU9PT1lKX1nZXRUYWdzKGUpe3JldHVybiB0aGlzLmdldEFsbFRhZ3MoKS5maWx0ZXIocj0+ci5uYW1lPT09ZSl9Z2V0QWxsVGFncygpe3JldHVybiB0aGlzLmVsZW1lbnRzLmZpbHRlcihlPT4ibmFtZSJpbiBlKX10b1N0cmluZygpe2xldCBlPSIiO2ZvcihsZXQgciBvZiB0aGlzLmVsZW1lbnRzKWlmKGUubGVuZ3RoPT09MCllPXIudG9TdHJpbmcoKTtlbHNle2xldCBuPXIudG9TdHJpbmcoKTtlKz1LbGUoZSkrbn1yZXR1cm4gZS50cmltKCl9dG9NYXJrZG93bihlKXtsZXQgcj0iIjtmb3IobGV0IG4gb2YgdGhpcy5lbGVtZW50cylpZihyLmxlbmd0aD09PTApcj1uLnRvTWFya2Rvd24oZSk7ZWxzZXtsZXQgaT1uLnRvTWFya2Rvd24oZSk7cis9S2xlKHIpK2l9cmV0dXJuIHIudHJpbSgpfX0sZWI9Y2xhc3N7c3RhdGlje28odGhpcywiSlNEb2NUYWdJbXBsIil9Y29uc3RydWN0b3IoZSxyLG4saSl7dGhpcy5uYW1lPWUsdGhpcy5jb250ZW50PXIsdGhpcy5pbmxpbmU9bix0aGlzLnJhbmdlPWl9dG9TdHJpbmcoKXtsZXQgZT1gQCR7dGhpcy5uYW1lfWAscj10aGlzLmNvbnRlbnQudG9TdHJpbmcoKTtyZXR1cm4gdGhpcy5jb250ZW50LmlubGluZXMubGVuZ3RoPT09MT9lPWAke2V9ICR7cn1gOnRoaXMuY29udGVudC5pbmxpbmVzLmxlbmd0aD4xJiYoZT1gJHtlfQoke3J9YCksdGhpcy5pbmxpbmU/YHske2V9fWA6ZX10b01hcmtkb3duKGUpe3ZhciByLG47cmV0dXJuKG49KHI9ZT8ucmVuZGVyVGFnKT09PW51bGx8fHI9PT12b2lkIDA/dm9pZCAwOnIuY2FsbChlLHRoaXMpKSE9PW51bGwmJm4hPT12b2lkIDA/bjp0aGlzLnRvTWFya2Rvd25EZWZhdWx0KGUpfXRvTWFya2Rvd25EZWZhdWx0KGUpe2xldCByPXRoaXMuY29udGVudC50b01hcmtkb3duKGUpO2lmKHRoaXMuaW5saW5lKXtsZXQgYT1MRmUodGhpcy5uYW1lLHIsZT8/e30pO2lmKHR5cGVvZiBhPT0ic3RyaW5nIilyZXR1cm4gYX1sZXQgbj0iIjtlPy50YWc9PT0iaXRhbGljInx8ZT8udGFnPT09dm9pZCAwP249IioiOmU/LnRhZz09PSJib2xkIj9uPSIqKiI6ZT8udGFnPT09ImJvbGQtaXRhbGljIiYmKG49IioqKiIpO2xldCBpPWAke259QCR7dGhpcy5uYW1lfSR7bn1gO3JldHVybiB0aGlzLmNvbnRlbnQuaW5saW5lcy5sZW5ndGg9PT0xP2k9YCR7aX0gXHUyMDE0ICR7cn1gOnRoaXMuY29udGVudC5pbmxpbmVzLmxlbmd0aD4xJiYoaT1gJHtpfQoke3J9YCksdGhpcy5pbmxpbmU/YHske2l9fWA6aX19O28oTEZlLCJyZW5kZXJJbmxpbmVUYWciKTtvKFJGZSwicmVuZGVyTGlua0RlZmF1bHQiKTt0Yj1jbGFzc3tzdGF0aWN7byh0aGlzLCJKU0RvY1RleHRJbXBsIil9Y29uc3RydWN0b3IoZSxyKXt0aGlzLmlubGluZXM9ZSx0aGlzLnJhbmdlPXJ9dG9TdHJpbmcoKXtsZXQgZT0iIjtmb3IobGV0IHI9MDtyPHRoaXMuaW5saW5lcy5sZW5ndGg7cisrKXtsZXQgbj10aGlzLmlubGluZXNbcl0saT10aGlzLmlubGluZXNbcisxXTtlKz1uLnRvU3RyaW5nKCksaSYmaS5yYW5nZS5zdGFydC5saW5lPm4ucmFuZ2Uuc3RhcnQubGluZSYmKGUrPWAKYCl9cmV0dXJuIGV9dG9NYXJrZG93bihlKXtsZXQgcj0iIjtmb3IobGV0IG49MDtuPHRoaXMuaW5saW5lcy5sZW5ndGg7bisrKXtsZXQgaT10aGlzLmlubGluZXNbbl0sYT10aGlzLmlubGluZXNbbisxXTtyKz1pLnRvTWFya2Rvd24oZSksYSYmYS5yYW5nZS5zdGFydC5saW5lPmkucmFuZ2Uuc3RhcnQubGluZSYmKHIrPWAKYCl9cmV0dXJuIHJ9fSxCRT1jbGFzc3tzdGF0aWN7byh0aGlzLCJKU0RvY0xpbmVJbXBsIil9Y29uc3RydWN0b3IoZSxyKXt0aGlzLnRleHQ9ZSx0aGlzLnJhbmdlPXJ9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy50ZXh0fXRvTWFya2Rvd24oKXtyZXR1cm4gdGhpcy50ZXh0fX07byhLbGUsImZpbGxOZXdsaW5lcyIpfSk7dmFyIHJiLG9JPU4oKCk9PnsidXNlIHN0cmljdCI7aXMoKTtzSSgpO3JiPWNsYXNze3N0YXRpY3tvKHRoaXMsIkpTRG9jRG9jdW1lbnRhdGlvblByb3ZpZGVyIil9Y29uc3RydWN0b3IoZSl7dGhpcy5pbmRleE1hbmFnZXI9ZS5zaGFyZWQud29ya3NwYWNlLkluZGV4TWFuYWdlcix0aGlzLmNvbW1lbnRQcm92aWRlcj1lLmRvY3VtZW50YXRpb24uQ29tbWVudFByb3ZpZGVyfWdldERvY3VtZW50YXRpb24oZSl7bGV0IHI9dGhpcy5jb21tZW50UHJvdmlkZXIuZ2V0Q29tbWVudChlKTtpZihyJiZpSShyKSlyZXR1cm4gbkkocikudG9NYXJrZG93bih7cmVuZGVyTGluazpvKChpLGEpPT50aGlzLmRvY3VtZW50YXRpb25MaW5rUmVuZGVyZXIoZSxpLGEpLCJyZW5kZXJMaW5rIikscmVuZGVyVGFnOm8oaT0+dGhpcy5kb2N1bWVudGF0aW9uVGFnUmVuZGVyZXIoZSxpKSwicmVuZGVyVGFnIil9KX1kb2N1bWVudGF0aW9uTGlua1JlbmRlcmVyKGUscixuKXt2YXIgaTtsZXQgYT0oaT10aGlzLmZpbmROYW1lSW5QcmVjb21wdXRlZFNjb3BlcyhlLHIpKSE9PW51bGwmJmkhPT12b2lkIDA/aTp0aGlzLmZpbmROYW1lSW5HbG9iYWxTY29wZShlLHIpO2lmKGEmJmEubmFtZVNlZ21lbnQpe2xldCBzPWEubmFtZVNlZ21lbnQucmFuZ2Uuc3RhcnQubGluZSsxLGw9YS5uYW1lU2VnbWVudC5yYW5nZS5zdGFydC5jaGFyYWN0ZXIrMSx1PWEuZG9jdW1lbnRVcmkud2l0aCh7ZnJhZ21lbnQ6YEwke3N9LCR7bH1gfSk7cmV0dXJuYFske259XSgke3UudG9TdHJpbmcoKX0pYH1lbHNlIHJldHVybn1kb2N1bWVudGF0aW9uVGFnUmVuZGVyZXIoZSxyKXt9ZmluZE5hbWVJblByZWNvbXB1dGVkU2NvcGVzKGUscil7bGV0IGk9UGEoZSkucHJlY29tcHV0ZWRTY29wZXM7aWYoIWkpcmV0dXJuO2xldCBhPWU7ZG97bGV0IGw9aS5nZXQoYSkuZmluZCh1PT51Lm5hbWU9PT1yKTtpZihsKXJldHVybiBsO2E9YS4kY29udGFpbmVyfXdoaWxlKGEpfWZpbmROYW1lSW5HbG9iYWxTY29wZShlLHIpe3JldHVybiB0aGlzLmluZGV4TWFuYWdlci5hbGxFbGVtZW50cygpLmZpbmQoaT0+aS5uYW1lPT09cil9fX0pO3ZhciBuYixsST1OKCgpPT57InVzZSBzdHJpY3QiO0xFKCk7TmwoKTtuYj1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZhdWx0Q29tbWVudFByb3ZpZGVyIil9Y29uc3RydWN0b3IoZSl7dGhpcy5ncmFtbWFyQ29uZmlnPSgpPT5lLnBhcnNlci5HcmFtbWFyQ29uZmlnfWdldENvbW1lbnQoZSl7dmFyIHI7cmV0dXJuIFVNKGUpP2UuJGNvbW1lbnQ6KHI9QVIoZS4kY3N0Tm9kZSx0aGlzLmdyYW1tYXJDb25maWcoKS5tdWx0aWxpbmVDb21tZW50UnVsZXMpKT09PW51bGx8fHI9PT12b2lkIDA/dm9pZCAwOnIudGV4dH19fSk7dmFyIGliLGNJLHVJLGhJPU4oKCk9PnsidXNlIHN0cmljdCI7WW8oKTtORSgpO2liPWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRBc3luY1BhcnNlciIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuc3luY1BhcnNlcj1lLnBhcnNlci5MYW5naXVtUGFyc2VyfXBhcnNlKGUscil7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLnN5bmNQYXJzZXIucGFyc2UoZSkpfX0sY0k9Y2xhc3N7c3RhdGlje28odGhpcywiQWJzdHJhY3RUaHJlYWRlZEFzeW5jUGFyc2VyIil9Y29uc3RydWN0b3IoZSl7dGhpcy50aHJlYWRDb3VudD04LHRoaXMudGVybWluYXRpb25EZWxheT0yMDAsdGhpcy53b3JrZXJQb29sPVtdLHRoaXMucXVldWU9W10sdGhpcy5oeWRyYXRvcj1lLnNlcmlhbGl6ZXIuSHlkcmF0b3J9aW5pdGlhbGl6ZVdvcmtlcnMoKXtmb3IoO3RoaXMud29ya2VyUG9vbC5sZW5ndGg8dGhpcy50aHJlYWRDb3VudDspe2xldCBlPXRoaXMuY3JlYXRlV29ya2VyKCk7ZS5vblJlYWR5KCgpPT57aWYodGhpcy5xdWV1ZS5sZW5ndGg+MCl7bGV0IHI9dGhpcy5xdWV1ZS5zaGlmdCgpO3ImJihlLmxvY2soKSxyLnJlc29sdmUoZSkpfX0pLHRoaXMud29ya2VyUG9vbC5wdXNoKGUpfX1hc3luYyBwYXJzZShlLHIpe2xldCBuPWF3YWl0IHRoaXMuYWNxdWlyZVBhcnNlcldvcmtlcihyKSxpPW5ldyBjcyxhLHM9ci5vbkNhbmNlbGxhdGlvblJlcXVlc3RlZCgoKT0+e2E9c2V0VGltZW91dCgoKT0+e3RoaXMudGVybWluYXRlV29ya2VyKG4pfSx0aGlzLnRlcm1pbmF0aW9uRGVsYXkpfSk7cmV0dXJuIG4ucGFyc2UoZSkudGhlbihsPT57bGV0IHU9dGhpcy5oeWRyYXRvci5oeWRyYXRlKGwpO2kucmVzb2x2ZSh1KX0pLmNhdGNoKGw9PntpLnJlamVjdChsKX0pLmZpbmFsbHkoKCk9PntzLmRpc3Bvc2UoKSxjbGVhclRpbWVvdXQoYSl9KSxpLnByb21pc2V9dGVybWluYXRlV29ya2VyKGUpe2UudGVybWluYXRlKCk7bGV0IHI9dGhpcy53b3JrZXJQb29sLmluZGV4T2YoZSk7cj49MCYmdGhpcy53b3JrZXJQb29sLnNwbGljZShyLDEpfWFzeW5jIGFjcXVpcmVQYXJzZXJXb3JrZXIoZSl7dGhpcy5pbml0aWFsaXplV29ya2VycygpO2ZvcihsZXQgbiBvZiB0aGlzLndvcmtlclBvb2wpaWYobi5yZWFkeSlyZXR1cm4gbi5sb2NrKCksbjtsZXQgcj1uZXcgY3M7cmV0dXJuIGUub25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQoKCk9PntsZXQgbj10aGlzLnF1ZXVlLmluZGV4T2Yocik7bj49MCYmdGhpcy5xdWV1ZS5zcGxpY2UobiwxKSxyLnJlamVjdChQYyl9KSx0aGlzLnF1ZXVlLnB1c2gociksci5wcm9taXNlfX0sdUk9Y2xhc3N7c3RhdGlje28odGhpcywiUGFyc2VyV29ya2VyIil9Z2V0IHJlYWR5KCl7cmV0dXJuIHRoaXMuX3JlYWR5fWdldCBvblJlYWR5KCl7cmV0dXJuIHRoaXMub25SZWFkeUVtaXR0ZXIuZXZlbnR9Y29uc3RydWN0b3IoZSxyLG4saSl7dGhpcy5vblJlYWR5RW1pdHRlcj1uZXcgS24uRW1pdHRlcix0aGlzLmRlZmVycmVkPW5ldyBjcyx0aGlzLl9yZWFkeT0hMCx0aGlzLl9wYXJzaW5nPSExLHRoaXMuc2VuZE1lc3NhZ2U9ZSx0aGlzLl90ZXJtaW5hdGU9aSxyKGE9PntsZXQgcz1hO3RoaXMuZGVmZXJyZWQucmVzb2x2ZShzKSx0aGlzLnVubG9jaygpfSksbihhPT57dGhpcy5kZWZlcnJlZC5yZWplY3QoYSksdGhpcy51bmxvY2soKX0pfXRlcm1pbmF0ZSgpe3RoaXMuZGVmZXJyZWQucmVqZWN0KFBjKSx0aGlzLl90ZXJtaW5hdGUoKX1sb2NrKCl7dGhpcy5fcmVhZHk9ITF9dW5sb2NrKCl7dGhpcy5fcGFyc2luZz0hMSx0aGlzLl9yZWFkeT0hMCx0aGlzLm9uUmVhZHlFbWl0dGVyLmZpcmUoKX1wYXJzZShlKXtpZih0aGlzLl9wYXJzaW5nKXRocm93IG5ldyBFcnJvcigiUGFyc2VyIHdvcmtlciBpcyBidXN5Iik7cmV0dXJuIHRoaXMuX3BhcnNpbmc9ITAsdGhpcy5kZWZlcnJlZD1uZXcgY3MsdGhpcy5zZW5kTWVzc2FnZShlKSx0aGlzLmRlZmVycmVkLnByb21pc2V9fX0pO3ZhciBhYixmST1OKCgpPT57InVzZSBzdHJpY3QiO3FvKCk7WW8oKTthYj1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZhdWx0V29ya3NwYWNlTG9jayIpfWNvbnN0cnVjdG9yKCl7dGhpcy5wcmV2aW91c1Rva2VuU291cmNlPW5ldyB5ci5DYW5jZWxsYXRpb25Ub2tlblNvdXJjZSx0aGlzLndyaXRlUXVldWU9W10sdGhpcy5yZWFkUXVldWU9W10sdGhpcy5kb25lPSEwfXdyaXRlKGUpe3RoaXMuY2FuY2VsV3JpdGUoKTtsZXQgcj1DRSgpO3JldHVybiB0aGlzLnByZXZpb3VzVG9rZW5Tb3VyY2U9cix0aGlzLmVucXVldWUodGhpcy53cml0ZVF1ZXVlLGUsci50b2tlbil9cmVhZChlKXtyZXR1cm4gdGhpcy5lbnF1ZXVlKHRoaXMucmVhZFF1ZXVlLGUpfWVucXVldWUoZSxyLG49eXIuQ2FuY2VsbGF0aW9uVG9rZW4uTm9uZSl7bGV0IGk9bmV3IGNzLGE9e2FjdGlvbjpyLGRlZmVycmVkOmksY2FuY2VsbGF0aW9uVG9rZW46bn07cmV0dXJuIGUucHVzaChhKSx0aGlzLnBlcmZvcm1OZXh0T3BlcmF0aW9uKCksaS5wcm9taXNlfWFzeW5jIHBlcmZvcm1OZXh0T3BlcmF0aW9uKCl7aWYoIXRoaXMuZG9uZSlyZXR1cm47bGV0IGU9W107aWYodGhpcy53cml0ZVF1ZXVlLmxlbmd0aD4wKWUucHVzaCh0aGlzLndyaXRlUXVldWUuc2hpZnQoKSk7ZWxzZSBpZih0aGlzLnJlYWRRdWV1ZS5sZW5ndGg+MCllLnB1c2goLi4udGhpcy5yZWFkUXVldWUuc3BsaWNlKDAsdGhpcy5yZWFkUXVldWUubGVuZ3RoKSk7ZWxzZSByZXR1cm47dGhpcy5kb25lPSExLGF3YWl0IFByb21pc2UuYWxsKGUubWFwKGFzeW5jKHthY3Rpb246cixkZWZlcnJlZDpuLGNhbmNlbGxhdGlvblRva2VuOml9KT0+e3RyeXtsZXQgYT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5yKGkpKTtuLnJlc29sdmUoYSl9Y2F0Y2goYSl7QmMoYSk/bi5yZXNvbHZlKHZvaWQgMCk6bi5yZWplY3QoYSl9fSkpLHRoaXMuZG9uZT0hMCx0aGlzLnBlcmZvcm1OZXh0T3BlcmF0aW9uKCl9Y2FuY2VsV3JpdGUoKXt0aGlzLnByZXZpb3VzVG9rZW5Tb3VyY2UuY2FuY2VsKCl9fX0pO3ZhciBzYixkST1OKCgpPT57InVzZSBzdHJpY3QiO2dFKCk7UmMoKTtSbCgpO2lzKCk7ZjEoKTtObCgpO3NiPWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRIeWRyYXRvciIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuZ3JhbW1hckVsZW1lbnRJZE1hcD1uZXcgdnAsdGhpcy50b2tlblR5cGVJZE1hcD1uZXcgdnAsdGhpcy5ncmFtbWFyPWUuR3JhbW1hcix0aGlzLmxleGVyPWUucGFyc2VyLkxleGVyLHRoaXMubGlua2VyPWUucmVmZXJlbmNlcy5MaW5rZXJ9ZGVoeWRyYXRlKGUpe3JldHVybntsZXhlckVycm9yczplLmxleGVyRXJyb3JzLGxleGVyUmVwb3J0OmUubGV4ZXJSZXBvcnQ/dGhpcy5kZWh5ZHJhdGVMZXhlclJlcG9ydChlLmxleGVyUmVwb3J0KTp2b2lkIDAscGFyc2VyRXJyb3JzOmUucGFyc2VyRXJyb3JzLm1hcChyPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30scikse21lc3NhZ2U6ci5tZXNzYWdlfSkpLHZhbHVlOnRoaXMuZGVoeWRyYXRlQXN0Tm9kZShlLnZhbHVlLHRoaXMuY3JlYXRlRGVoeXJhdGlvbkNvbnRleHQoZS52YWx1ZSkpfX1kZWh5ZHJhdGVMZXhlclJlcG9ydChlKXtyZXR1cm4gZX1jcmVhdGVEZWh5cmF0aW9uQ29udGV4dChlKXtsZXQgcj1uZXcgTWFwLG49bmV3IE1hcDtmb3IobGV0IGkgb2YgV28oZSkpci5zZXQoaSx7fSk7aWYoZS4kY3N0Tm9kZSlmb3IobGV0IGkgb2YgS2QoZS4kY3N0Tm9kZSkpbi5zZXQoaSx7fSk7cmV0dXJue2FzdE5vZGVzOnIsY3N0Tm9kZXM6bn19ZGVoeWRyYXRlQXN0Tm9kZShlLHIpe2xldCBuPXIuYXN0Tm9kZXMuZ2V0KGUpO24uJHR5cGU9ZS4kdHlwZSxuLiRjb250YWluZXJJbmRleD1lLiRjb250YWluZXJJbmRleCxuLiRjb250YWluZXJQcm9wZXJ0eT1lLiRjb250YWluZXJQcm9wZXJ0eSxlLiRjc3ROb2RlIT09dm9pZCAwJiYobi4kY3N0Tm9kZT10aGlzLmRlaHlkcmF0ZUNzdE5vZGUoZS4kY3N0Tm9kZSxyKSk7Zm9yKGxldFtpLGFdb2YgT2JqZWN0LmVudHJpZXMoZSkpaWYoIWkuc3RhcnRzV2l0aCgiJCIpKWlmKEFycmF5LmlzQXJyYXkoYSkpe2xldCBzPVtdO25baV09cztmb3IobGV0IGwgb2YgYSlpaShsKT9zLnB1c2godGhpcy5kZWh5ZHJhdGVBc3ROb2RlKGwscikpOnZhKGwpP3MucHVzaCh0aGlzLmRlaHlkcmF0ZVJlZmVyZW5jZShsLHIpKTpzLnB1c2gobCl9ZWxzZSBpaShhKT9uW2ldPXRoaXMuZGVoeWRyYXRlQXN0Tm9kZShhLHIpOnZhKGEpP25baV09dGhpcy5kZWh5ZHJhdGVSZWZlcmVuY2UoYSxyKTphIT09dm9pZCAwJiYobltpXT1hKTtyZXR1cm4gbn1kZWh5ZHJhdGVSZWZlcmVuY2UoZSxyKXtsZXQgbj17fTtyZXR1cm4gbi4kcmVmVGV4dD1lLiRyZWZUZXh0LGUuJHJlZk5vZGUmJihuLiRyZWZOb2RlPXIuY3N0Tm9kZXMuZ2V0KGUuJHJlZk5vZGUpKSxufWRlaHlkcmF0ZUNzdE5vZGUoZSxyKXtsZXQgbj1yLmNzdE5vZGVzLmdldChlKTtyZXR1cm4gTTIoZSk/bi5mdWxsVGV4dD1lLmZ1bGxUZXh0Om4uZ3JhbW1hclNvdXJjZT10aGlzLmdldEdyYW1tYXJFbGVtZW50SWQoZS5ncmFtbWFyU291cmNlKSxuLmhpZGRlbj1lLmhpZGRlbixuLmFzdE5vZGU9ci5hc3ROb2Rlcy5nZXQoZS5hc3ROb2RlKSxMbChlKT9uLmNvbnRlbnQ9ZS5jb250ZW50Lm1hcChpPT50aGlzLmRlaHlkcmF0ZUNzdE5vZGUoaSxyKSk6YWYoZSkmJihuLnRva2VuVHlwZT1lLnRva2VuVHlwZS5uYW1lLG4ub2Zmc2V0PWUub2Zmc2V0LG4ubGVuZ3RoPWUubGVuZ3RoLG4uc3RhcnRMaW5lPWUucmFuZ2Uuc3RhcnQubGluZSxuLnN0YXJ0Q29sdW1uPWUucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyLG4uZW5kTGluZT1lLnJhbmdlLmVuZC5saW5lLG4uZW5kQ29sdW1uPWUucmFuZ2UuZW5kLmNoYXJhY3Rlciksbn1oeWRyYXRlKGUpe2xldCByPWUudmFsdWUsbj10aGlzLmNyZWF0ZUh5ZHJhdGlvbkNvbnRleHQocik7cmV0dXJuIiRjc3ROb2RlImluIHImJnRoaXMuaHlkcmF0ZUNzdE5vZGUoci4kY3N0Tm9kZSxuKSx7bGV4ZXJFcnJvcnM6ZS5sZXhlckVycm9ycyxsZXhlclJlcG9ydDplLmxleGVyUmVwb3J0LHBhcnNlckVycm9yczplLnBhcnNlckVycm9ycyx2YWx1ZTp0aGlzLmh5ZHJhdGVBc3ROb2RlKHIsbil9fWNyZWF0ZUh5ZHJhdGlvbkNvbnRleHQoZSl7bGV0IHI9bmV3IE1hcCxuPW5ldyBNYXA7Zm9yKGxldCBhIG9mIFdvKGUpKXIuc2V0KGEse30pO2xldCBpO2lmKGUuJGNzdE5vZGUpZm9yKGxldCBhIG9mIEtkKGUuJGNzdE5vZGUpKXtsZXQgczsiZnVsbFRleHQiaW4gYT8ocz1uZXcgYTEoYS5mdWxsVGV4dCksaT1zKToiY29udGVudCJpbiBhP3M9bmV3IG1wOiJ0b2tlblR5cGUiaW4gYSYmKHM9dGhpcy5oeWRyYXRlQ3N0TGVhZk5vZGUoYSkpLHMmJihuLnNldChhLHMpLHMucm9vdD1pKX1yZXR1cm57YXN0Tm9kZXM6cixjc3ROb2RlczpufX1oeWRyYXRlQXN0Tm9kZShlLHIpe2xldCBuPXIuYXN0Tm9kZXMuZ2V0KGUpO24uJHR5cGU9ZS4kdHlwZSxuLiRjb250YWluZXJJbmRleD1lLiRjb250YWluZXJJbmRleCxuLiRjb250YWluZXJQcm9wZXJ0eT1lLiRjb250YWluZXJQcm9wZXJ0eSxlLiRjc3ROb2RlJiYobi4kY3N0Tm9kZT1yLmNzdE5vZGVzLmdldChlLiRjc3ROb2RlKSk7Zm9yKGxldFtpLGFdb2YgT2JqZWN0LmVudHJpZXMoZSkpaWYoIWkuc3RhcnRzV2l0aCgiJCIpKWlmKEFycmF5LmlzQXJyYXkoYSkpe2xldCBzPVtdO25baV09cztmb3IobGV0IGwgb2YgYSlpaShsKT9zLnB1c2godGhpcy5zZXRQYXJlbnQodGhpcy5oeWRyYXRlQXN0Tm9kZShsLHIpLG4pKTp2YShsKT9zLnB1c2godGhpcy5oeWRyYXRlUmVmZXJlbmNlKGwsbixpLHIpKTpzLnB1c2gobCl9ZWxzZSBpaShhKT9uW2ldPXRoaXMuc2V0UGFyZW50KHRoaXMuaHlkcmF0ZUFzdE5vZGUoYSxyKSxuKTp2YShhKT9uW2ldPXRoaXMuaHlkcmF0ZVJlZmVyZW5jZShhLG4saSxyKTphIT09dm9pZCAwJiYobltpXT1hKTtyZXR1cm4gbn1zZXRQYXJlbnQoZSxyKXtyZXR1cm4gZS4kY29udGFpbmVyPXIsZX1oeWRyYXRlUmVmZXJlbmNlKGUscixuLGkpe3JldHVybiB0aGlzLmxpbmtlci5idWlsZFJlZmVyZW5jZShyLG4saS5jc3ROb2Rlcy5nZXQoZS4kcmVmTm9kZSksZS4kcmVmVGV4dCl9aHlkcmF0ZUNzdE5vZGUoZSxyLG49MCl7bGV0IGk9ci5jc3ROb2Rlcy5nZXQoZSk7aWYodHlwZW9mIGUuZ3JhbW1hclNvdXJjZT09Im51bWJlciImJihpLmdyYW1tYXJTb3VyY2U9dGhpcy5nZXRHcmFtbWFyRWxlbWVudChlLmdyYW1tYXJTb3VyY2UpKSxpLmFzdE5vZGU9ci5hc3ROb2Rlcy5nZXQoZS5hc3ROb2RlKSxMbChpKSlmb3IobGV0IGEgb2YgZS5jb250ZW50KXtsZXQgcz10aGlzLmh5ZHJhdGVDc3ROb2RlKGEscixuKyspO2kuY29udGVudC5wdXNoKHMpfXJldHVybiBpfWh5ZHJhdGVDc3RMZWFmTm9kZShlKXtsZXQgcj10aGlzLmdldFRva2VuVHlwZShlLnRva2VuVHlwZSksbj1lLm9mZnNldCxpPWUubGVuZ3RoLGE9ZS5zdGFydExpbmUscz1lLnN0YXJ0Q29sdW1uLGw9ZS5lbmRMaW5lLHU9ZS5lbmRDb2x1bW4saD1lLmhpZGRlbjtyZXR1cm4gbmV3IHBwKG4saSx7c3RhcnQ6e2xpbmU6YSxjaGFyYWN0ZXI6c30sZW5kOntsaW5lOmwsY2hhcmFjdGVyOnV9fSxyLGgpfWdldFRva2VuVHlwZShlKXtyZXR1cm4gdGhpcy5sZXhlci5kZWZpbml0aW9uW2VdfWdldEdyYW1tYXJFbGVtZW50SWQoZSl7aWYoZSlyZXR1cm4gdGhpcy5ncmFtbWFyRWxlbWVudElkTWFwLnNpemU9PT0wJiZ0aGlzLmNyZWF0ZUdyYW1tYXJFbGVtZW50SWRNYXAoKSx0aGlzLmdyYW1tYXJFbGVtZW50SWRNYXAuZ2V0KGUpfWdldEdyYW1tYXJFbGVtZW50KGUpe3JldHVybiB0aGlzLmdyYW1tYXJFbGVtZW50SWRNYXAuc2l6ZT09PTAmJnRoaXMuY3JlYXRlR3JhbW1hckVsZW1lbnRJZE1hcCgpLHRoaXMuZ3JhbW1hckVsZW1lbnRJZE1hcC5nZXRLZXkoZSl9Y3JlYXRlR3JhbW1hckVsZW1lbnRJZE1hcCgpe2xldCBlPTA7Zm9yKGxldCByIG9mIFdvKHRoaXMuZ3JhbW1hcikpRzIocikmJnRoaXMuZ3JhbW1hckVsZW1lbnRJZE1hcC5zZXQocixlKyspfX19KTtmdW5jdGlvbiBmcyh0KXtyZXR1cm57ZG9jdW1lbnRhdGlvbjp7Q29tbWVudFByb3ZpZGVyOm8oZT0+bmV3IG5iKGUpLCJDb21tZW50UHJvdmlkZXIiKSxEb2N1bWVudGF0aW9uUHJvdmlkZXI6byhlPT5uZXcgcmIoZSksIkRvY3VtZW50YXRpb25Qcm92aWRlciIpfSxwYXJzZXI6e0FzeW5jUGFyc2VyOm8oZT0+bmV3IGliKGUpLCJBc3luY1BhcnNlciIpLEdyYW1tYXJDb25maWc6byhlPT5wTihlKSwiR3JhbW1hckNvbmZpZyIpLExhbmdpdW1QYXJzZXI6byhlPT5UTShlKSwiTGFuZ2l1bVBhcnNlciIpLENvbXBsZXRpb25QYXJzZXI6byhlPT5iTShlKSwiQ29tcGxldGlvblBhcnNlciIpLFZhbHVlQ29udmVydGVyOm8oKCk9Pm5ldyB5cCwiVmFsdWVDb252ZXJ0ZXIiKSxUb2tlbkJ1aWxkZXI6bygoKT0+bmV3IFV1LCJUb2tlbkJ1aWxkZXIiKSxMZXhlcjpvKGU9Pm5ldyB3cChlKSwiTGV4ZXIiKSxQYXJzZXJFcnJvck1lc3NhZ2VQcm92aWRlcjpvKCgpPT5uZXcgczEsIlBhcnNlckVycm9yTWVzc2FnZVByb3ZpZGVyIiksTGV4ZXJFcnJvck1lc3NhZ2VQcm92aWRlcjpvKCgpPT5uZXcgSngsIkxleGVyRXJyb3JNZXNzYWdlUHJvdmlkZXIiKX0sd29ya3NwYWNlOntBc3ROb2RlTG9jYXRvcjpvKCgpPT5uZXcgWHgsIkFzdE5vZGVMb2NhdG9yIiksQXN0Tm9kZURlc2NyaXB0aW9uUHJvdmlkZXI6byhlPT5uZXcgcXgoZSksIkFzdE5vZGVEZXNjcmlwdGlvblByb3ZpZGVyIiksUmVmZXJlbmNlRGVzY3JpcHRpb25Qcm92aWRlcjpvKGU9Pm5ldyBZeChlKSwiUmVmZXJlbmNlRGVzY3JpcHRpb25Qcm92aWRlciIpfSxyZWZlcmVuY2VzOntMaW5rZXI6byhlPT5uZXcgSXgoZSksIkxpbmtlciIpLE5hbWVQcm92aWRlcjpvKCgpPT5uZXcgT3gsIk5hbWVQcm92aWRlciIpLFNjb3BlUHJvdmlkZXI6byhlPT5uZXcgengoZSksIlNjb3BlUHJvdmlkZXIiKSxTY29wZUNvbXB1dGF0aW9uOm8oZT0+bmV3IEJ4KGUpLCJTY29wZUNvbXB1dGF0aW9uIiksUmVmZXJlbmNlczpvKGU9Pm5ldyBQeChlKSwiUmVmZXJlbmNlcyIpfSxzZXJpYWxpemVyOntIeWRyYXRvcjpvKGU9Pm5ldyBzYihlKSwiSHlkcmF0b3IiKSxKc29uU2VyaWFsaXplcjpvKGU9Pm5ldyBHeChlKSwiSnNvblNlcmlhbGl6ZXIiKX0sdmFsaWRhdGlvbjp7RG9jdW1lbnRWYWxpZGF0b3I6byhlPT5uZXcgV3goZSksIkRvY3VtZW50VmFsaWRhdG9yIiksVmFsaWRhdGlvblJlZ2lzdHJ5Om8oZT0+bmV3IFV4KGUpLCJWYWxpZGF0aW9uUmVnaXN0cnkiKX0sc2hhcmVkOm8oKCk9PnQuc2hhcmVkLCJzaGFyZWQiKX19ZnVuY3Rpb24gZHModCl7cmV0dXJue1NlcnZpY2VSZWdpc3RyeTpvKGU9Pm5ldyBWeChlKSwiU2VydmljZVJlZ2lzdHJ5Iiksd29ya3NwYWNlOntMYW5naXVtRG9jdW1lbnRzOm8oZT0+bmV3IE14KGUpLCJMYW5naXVtRG9jdW1lbnRzIiksTGFuZ2l1bURvY3VtZW50RmFjdG9yeTpvKGU9Pm5ldyBOeChlKSwiTGFuZ2l1bURvY3VtZW50RmFjdG9yeSIpLERvY3VtZW50QnVpbGRlcjpvKGU9Pm5ldyBLeChlKSwiRG9jdW1lbnRCdWlsZGVyIiksSW5kZXhNYW5hZ2VyOm8oZT0+bmV3IFF4KGUpLCJJbmRleE1hbmFnZXIiKSxXb3Jrc3BhY2VNYW5hZ2VyOm8oZT0+bmV3IFp4KGUpLCJXb3Jrc3BhY2VNYW5hZ2VyIiksRmlsZVN5c3RlbVByb3ZpZGVyOm8oZT0+dC5maWxlU3lzdGVtUHJvdmlkZXIoZSksIkZpbGVTeXN0ZW1Qcm92aWRlciIpLFdvcmtzcGFjZUxvY2s6bygoKT0+bmV3IGFiLCJXb3Jrc3BhY2VMb2NrIiksQ29uZmlndXJhdGlvblByb3ZpZGVyOm8oZT0+bmV3IGp4KGUpLCJDb25maWd1cmF0aW9uUHJvdmlkZXIiKX19fXZhciBwST1OKCgpPT57InVzZSBzdHJpY3QiO21OKCk7d00oKTtrTSgpO3dFKCk7RU0oKTtCTSgpO0ZNKCk7JE0oKTt6TSgpO1ZNKCk7TEUoKTtITSgpO1dNKCk7SHgoKTtxTSgpO1lNKCk7WE0oKTtLTSgpO2gxKCk7UU0oKTtaTSgpO09FKCk7b0koKTtsSSgpO0x4KCk7aEkoKTtmSSgpO2RJKCk7byhmcywiY3JlYXRlRGVmYXVsdENvcmVNb2R1bGUiKTtvKGRzLCJjcmVhdGVEZWZhdWx0U2hhcmVkQ29yZU1vZHVsZSIpfSk7ZnVuY3Rpb24gdWkodCxlLHIsbixpLGEscyxsLHUpe2xldCBoPVt0LGUscixuLGksYSxzLGwsdV0ucmVkdWNlKEZFLHt9KTtyZXR1cm4gYWNlKGgpfWZ1bmN0aW9uIGljZSh0KXtpZih0JiZ0W25jZV0pZm9yKGxldCBlIG9mIE9iamVjdC52YWx1ZXModCkpaWNlKGUpO3JldHVybiB0fWZ1bmN0aW9uIGFjZSh0LGUpe2xldCByPW5ldyBQcm94eSh7fSx7ZGVsZXRlUHJvcGVydHk6bygoKT0+ITEsImRlbGV0ZVByb3BlcnR5Iiksc2V0Om8oKCk9Pnt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXQgcHJvcGVydHkgb24gaW5qZWN0ZWQgc2VydmljZSBjb250YWluZXIiKX0sInNldCIpLGdldDpvKChuLGkpPT5pPT09bmNlPyEwOnJjZShuLGksdCxlfHxyKSwiZ2V0IiksZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOm8oKG4saSk9PihyY2UobixpLHQsZXx8ciksT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGkpKSwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiksaGFzOm8oKG4saSk9PmkgaW4gdCwiaGFzIiksb3duS2V5czpvKCgpPT5bLi4uT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModCldLCJvd25LZXlzIil9KTtyZXR1cm4gcn1mdW5jdGlvbiByY2UodCxlLHIsbil7aWYoZSBpbiB0KXtpZih0W2VdaW5zdGFuY2VvZiBFcnJvcil0aHJvdyBuZXcgRXJyb3IoIkNvbnN0cnVjdGlvbiBmYWlsdXJlLiBQbGVhc2UgbWFrZSBzdXJlIHRoYXQgeW91ciBkZXBlbmRlbmNpZXMgYXJlIGNvbnN0cnVjdGFibGUuIix7Y2F1c2U6dFtlXX0pO2lmKHRbZV09PT10Y2UpdGhyb3cgbmV3IEVycm9yKCdDeWNsZSBkZXRlY3RlZC4gUGxlYXNlIG1ha2UgIicrU3RyaW5nKGUpKyciIGxhenkuIFZpc2l0IGh0dHBzOi8vbGFuZ2l1bS5vcmcvZG9jcy9yZWZlcmVuY2UvY29uZmlndXJhdGlvbi1zZXJ2aWNlcy8jcmVzb2x2aW5nLWN5Y2xpYy1kZXBlbmRlbmNpZXMnKTtyZXR1cm4gdFtlXX1lbHNlIGlmKGUgaW4gcil7bGV0IGk9cltlXTt0W2VdPXRjZTt0cnl7dFtlXT10eXBlb2YgaT09ImZ1bmN0aW9uIj9pKG4pOmFjZShpLG4pfWNhdGNoKGEpe3Rocm93IHRbZV09YSBpbnN0YW5jZW9mIEVycm9yP2E6dm9pZCAwLGF9cmV0dXJuIHRbZV19ZWxzZSByZXR1cm59ZnVuY3Rpb24gRkUodCxlKXtpZihlKXtmb3IobGV0W3Isbl1vZiBPYmplY3QuZW50cmllcyhlKSlpZihuIT09dm9pZCAwKXtsZXQgaT10W3JdO2khPT1udWxsJiZuIT09bnVsbCYmdHlwZW9mIGk9PSJvYmplY3QiJiZ0eXBlb2Ygbj09Im9iamVjdCI/dFtyXT1GRShpLG4pOnRbcl09bn19cmV0dXJuIHR9dmFyIG1JLG5jZSx0Y2UsZ0k9TigoKT0+eyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24odCl7dC5tZXJnZT0oZSxyKT0+RkUoRkUoe30sZSkscil9KShtSXx8KG1JPXt9KSk7byh1aSwiaW5qZWN0Iik7bmNlPVN5bWJvbCgiaXNQcm94eSIpO28oaWNlLCJlYWdlckxvYWQiKTtvKGFjZSwiX2luamVjdCIpO3RjZT1TeW1ib2woKTtvKHJjZSwiX3Jlc29sdmUiKTtvKEZFLCJfbWVyZ2UiKX0pO3ZhciBzY2U9TigoKT0+eyJ1c2Ugc3RyaWN0In0pO3ZhciBvY2U9TigoKT0+eyJ1c2Ugc3RyaWN0IjtsSSgpO29JKCk7c0koKX0pO3ZhciBsY2U9TigoKT0+eyJ1c2Ugc3RyaWN0In0pO3ZhciBjY2U9TigoKT0+eyJ1c2Ugc3RyaWN0IjttTigpO2xjZSgpfSk7dmFyIHlJLFRwLCRFLHZJLHVjZT1OKCgpPT57InVzZSBzdHJpY3QiO2NmKCk7d0UoKTtPRSgpO3lJPXtpbmRlbnRUb2tlbk5hbWU6IklOREVOVCIsZGVkZW50VG9rZW5OYW1lOiJERURFTlQiLHdoaXRlc3BhY2VUb2tlbk5hbWU6IldTIixpZ25vcmVJbmRlbnRhdGlvbkRlbGltaXRlcnM6W119OyhmdW5jdGlvbih0KXt0LlJFR1VMQVI9ImluZGVudGF0aW9uLXNlbnNpdGl2ZSIsdC5JR05PUkVfSU5ERU5UQVRJT049Imlnbm9yZS1pbmRlbnRhdGlvbiJ9KShUcHx8KFRwPXt9KSk7JEU9Y2xhc3MgZXh0ZW5kcyBVdXtzdGF0aWN7byh0aGlzLCJJbmRlbnRhdGlvbkF3YXJlVG9rZW5CdWlsZGVyIil9Y29uc3RydWN0b3IoZT15SSl7c3VwZXIoKSx0aGlzLmluZGVudGF0aW9uU3RhY2s9WzBdLHRoaXMud2hpdGVzcGFjZVJlZ0V4cD0vWyBcdF0rL3ksdGhpcy5vcHRpb25zPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx5SSksZSksdGhpcy5pbmRlbnRUb2tlblR5cGU9b2Yoe25hbWU6dGhpcy5vcHRpb25zLmluZGVudFRva2VuTmFtZSxwYXR0ZXJuOnRoaXMuaW5kZW50TWF0Y2hlci5iaW5kKHRoaXMpLGxpbmVfYnJlYWtzOiExfSksdGhpcy5kZWRlbnRUb2tlblR5cGU9b2Yoe25hbWU6dGhpcy5vcHRpb25zLmRlZGVudFRva2VuTmFtZSxwYXR0ZXJuOnRoaXMuZGVkZW50TWF0Y2hlci5iaW5kKHRoaXMpLGxpbmVfYnJlYWtzOiExfSl9YnVpbGRUb2tlbnMoZSxyKXtsZXQgbj1zdXBlci5idWlsZFRva2VucyhlLHIpO2lmKCFJRShuKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdG9rZW5zIGJ1aWx0IGJ5IGRlZmF1bHQgYnVpbGRlciIpO2xldHtpbmRlbnRUb2tlbk5hbWU6aSxkZWRlbnRUb2tlbk5hbWU6YSx3aGl0ZXNwYWNlVG9rZW5OYW1lOnMsaWdub3JlSW5kZW50YXRpb25EZWxpbWl0ZXJzOmx9PXRoaXMub3B0aW9ucyx1LGgsZixkPVtdO2ZvcihsZXQgcCBvZiBuKXtmb3IobGV0W20sZ11vZiBsKXAubmFtZT09PW0/cC5QVVNIX01PREU9VHAuSUdOT1JFX0lOREVOVEFUSU9OOnAubmFtZT09PWcmJihwLlBPUF9NT0RFPSEwKTtwLm5hbWU9PT1hP3U9cDpwLm5hbWU9PT1pP2g9cDpwLm5hbWU9PT1zP2Y9cDpkLnB1c2gocCl9aWYoIXV8fCFofHwhZil0aHJvdyBuZXcgRXJyb3IoIlNvbWUgaW5kZW50YXRpb24vd2hpdGVzcGFjZSB0b2tlbnMgbm90IGZvdW5kISIpO3JldHVybiBsLmxlbmd0aD4wP3ttb2Rlczp7W1RwLlJFR1VMQVJdOlt1LGgsLi4uZCxmXSxbVHAuSUdOT1JFX0lOREVOVEFUSU9OXTpbLi4uZCxmXX0sZGVmYXVsdE1vZGU6VHAuUkVHVUxBUn06W3UsaCxmLC4uLmRdfWZsdXNoTGV4aW5nUmVwb3J0KGUpe2xldCByPXN1cGVyLmZsdXNoTGV4aW5nUmVwb3J0KGUpO3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30scikse3JlbWFpbmluZ0RlZGVudHM6dGhpcy5mbHVzaFJlbWFpbmluZ0RlZGVudHMoZSl9KX1pc1N0YXJ0T2ZMaW5lKGUscil7cmV0dXJuIHI9PT0wfHxgXHIKYC5pbmNsdWRlcyhlW3ItMV0pfW1hdGNoV2hpdGVzcGFjZShlLHIsbixpKXt2YXIgYTt0aGlzLndoaXRlc3BhY2VSZWdFeHAubGFzdEluZGV4PXI7bGV0IHM9dGhpcy53aGl0ZXNwYWNlUmVnRXhwLmV4ZWMoZSk7cmV0dXJue2N1cnJJbmRlbnRMZXZlbDooYT1zPy5bMF0ubGVuZ3RoKSE9PW51bGwmJmEhPT12b2lkIDA/YTowLHByZXZJbmRlbnRMZXZlbDp0aGlzLmluZGVudGF0aW9uU3RhY2suYXQoLTEpLG1hdGNoOnN9fWNyZWF0ZUluZGVudGF0aW9uVG9rZW5JbnN0YW5jZShlLHIsbixpKXtsZXQgYT10aGlzLmdldExpbmVOdW1iZXIocixpKTtyZXR1cm4gJHUoZSxuLGksaStuLmxlbmd0aCxhLGEsMSxuLmxlbmd0aCl9Z2V0TGluZU51bWJlcihlLHIpe3JldHVybiBlLnN1YnN0cmluZygwLHIpLnNwbGl0KC9cclxufFxyfFxuLykubGVuZ3RofWluZGVudE1hdGNoZXIoZSxyLG4saSl7aWYoIXRoaXMuaXNTdGFydE9mTGluZShlLHIpKXJldHVybiBudWxsO2xldHtjdXJySW5kZW50TGV2ZWw6YSxwcmV2SW5kZW50TGV2ZWw6cyxtYXRjaDpsfT10aGlzLm1hdGNoV2hpdGVzcGFjZShlLHIsbixpKTtyZXR1cm4gYTw9cz9udWxsOih0aGlzLmluZGVudGF0aW9uU3RhY2sucHVzaChhKSxsKX1kZWRlbnRNYXRjaGVyKGUscixuLGkpe3ZhciBhLHMsbCx1O2lmKCF0aGlzLmlzU3RhcnRPZkxpbmUoZSxyKSlyZXR1cm4gbnVsbDtsZXR7Y3VyckluZGVudExldmVsOmgscHJldkluZGVudExldmVsOmYsbWF0Y2g6ZH09dGhpcy5tYXRjaFdoaXRlc3BhY2UoZSxyLG4saSk7aWYoaD49ZilyZXR1cm4gbnVsbDtsZXQgcD10aGlzLmluZGVudGF0aW9uU3RhY2subGFzdEluZGV4T2YoaCk7aWYocD09PS0xKXJldHVybiB0aGlzLmRpYWdub3N0aWNzLnB1c2goe3NldmVyaXR5OiJlcnJvciIsbWVzc2FnZTpgSW52YWxpZCBkZWRlbnQgbGV2ZWwgJHtofSBhdCBvZmZzZXQ6ICR7cn0uIEN1cnJlbnQgaW5kZW50YXRpb24gc3RhY2s6ICR7dGhpcy5pbmRlbnRhdGlvblN0YWNrfWAsb2Zmc2V0OnIsbGVuZ3RoOihzPShhPWQ/LlswXSk9PT1udWxsfHxhPT09dm9pZCAwP3ZvaWQgMDphLmxlbmd0aCkhPT1udWxsJiZzIT09dm9pZCAwP3M6MCxsaW5lOnRoaXMuZ2V0TGluZU51bWJlcihlLHIpLGNvbHVtbjoxfSksbnVsbDtsZXQgbT10aGlzLmluZGVudGF0aW9uU3RhY2subGVuZ3RoLXAtMSxnPSh1PShsPWUuc3Vic3RyaW5nKDAscikubWF0Y2goL1tcclxuXSskLykpPT09bnVsbHx8bD09PXZvaWQgMD92b2lkIDA6bFswXS5sZW5ndGgpIT09bnVsbCYmdSE9PXZvaWQgMD91OjE7Zm9yKGxldCB5PTA7eTxtO3krKyl7bGV0IHY9dGhpcy5jcmVhdGVJbmRlbnRhdGlvblRva2VuSW5zdGFuY2UodGhpcy5kZWRlbnRUb2tlblR5cGUsZSwiIixyLShnLTEpKTtuLnB1c2godiksdGhpcy5pbmRlbnRhdGlvblN0YWNrLnBvcCgpfXJldHVybiBudWxsfWJ1aWxkVGVybWluYWxUb2tlbihlKXtsZXQgcj1zdXBlci5idWlsZFRlcm1pbmFsVG9rZW4oZSkse2luZGVudFRva2VuTmFtZTpuLGRlZGVudFRva2VuTmFtZTppLHdoaXRlc3BhY2VUb2tlbk5hbWU6YX09dGhpcy5vcHRpb25zO3JldHVybiByLm5hbWU9PT1uP3RoaXMuaW5kZW50VG9rZW5UeXBlOnIubmFtZT09PWk/dGhpcy5kZWRlbnRUb2tlblR5cGU6ci5uYW1lPT09YT9vZih7bmFtZTphLHBhdHRlcm46dGhpcy53aGl0ZXNwYWNlUmVnRXhwLGdyb3VwOlhuLlNLSVBQRUR9KTpyfWZsdXNoUmVtYWluaW5nRGVkZW50cyhlKXtsZXQgcj1bXTtmb3IoO3RoaXMuaW5kZW50YXRpb25TdGFjay5sZW5ndGg+MTspci5wdXNoKHRoaXMuY3JlYXRlSW5kZW50YXRpb25Ub2tlbkluc3RhbmNlKHRoaXMuZGVkZW50VG9rZW5UeXBlLGUsIiIsZS5sZW5ndGgpKSx0aGlzLmluZGVudGF0aW9uU3RhY2sucG9wKCk7cmV0dXJuIHRoaXMuaW5kZW50YXRpb25TdGFjaz1bMF0scn19LHZJPWNsYXNzIGV4dGVuZHMgd3B7c3RhdGlje28odGhpcywiSW5kZW50YXRpb25Bd2FyZUxleGVyIil9Y29uc3RydWN0b3IoZSl7aWYoc3VwZXIoZSksZS5wYXJzZXIuVG9rZW5CdWlsZGVyIGluc3RhbmNlb2YgJEUpdGhpcy5pbmRlbnRhdGlvblRva2VuQnVpbGRlcj1lLnBhcnNlci5Ub2tlbkJ1aWxkZXI7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIkluZGVudGF0aW9uQXdhcmVMZXhlciByZXF1aXJlcyBhbiBhY2NvbXBhbnlpbmcgSW5kZW50YXRpb25Bd2FyZVRva2VuQnVpbGRlciIpfXRva2VuaXplKGUscj1NRSl7bGV0IG49c3VwZXIudG9rZW5pemUoZSksaT1uLnJlcG9ydDtyPy5tb2RlPT09ImZ1bGwiJiZuLnRva2Vucy5wdXNoKC4uLmkucmVtYWluaW5nRGVkZW50cyksaS5yZW1haW5pbmdEZWRlbnRzPVtdO2xldHtpbmRlbnRUb2tlblR5cGU6YSxkZWRlbnRUb2tlblR5cGU6c309dGhpcy5pbmRlbnRhdGlvblRva2VuQnVpbGRlcixsPWEudG9rZW5UeXBlSWR4LHU9cy50b2tlblR5cGVJZHgsaD1bXSxmPW4udG9rZW5zLmxlbmd0aC0xO2ZvcihsZXQgZD0wO2Q8ZjtkKyspe2xldCBwPW4udG9rZW5zW2RdLG09bi50b2tlbnNbZCsxXTtpZihwLnRva2VuVHlwZUlkeD09PWwmJm0udG9rZW5UeXBlSWR4PT09dSl7ZCsrO2NvbnRpbnVlfWgucHVzaChwKX1yZXR1cm4gZj49MCYmaC5wdXNoKG4udG9rZW5zW2ZdKSxuLnRva2Vucz1oLG59fX0pO3ZhciBoY2U9TigoKT0+eyJ1c2Ugc3RyaWN0In0pO3ZhciBmY2U9TigoKT0+eyJ1c2Ugc3RyaWN0IjtoSSgpO3dNKCk7Z0UoKTt1Y2UoKTtrTSgpO0x4KCk7T0UoKTtiRSgpO2hjZSgpO3dFKCk7RU0oKX0pO3ZhciBkY2U9TigoKT0+eyJ1c2Ugc3RyaWN0IjtCTSgpO0ZNKCk7JE0oKTtHTSgpO3pNKCk7Vk0oKX0pO3ZhciBwY2U9TigoKT0+eyJ1c2Ugc3RyaWN0IjtkSSgpO0xFKCl9KTt2YXIgekUscHMseEk9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt6RT1jbGFzc3tzdGF0aWN7byh0aGlzLCJFbXB0eUZpbGVTeXN0ZW1Qcm92aWRlciIpfXJlYWRGaWxlKCl7dGhyb3cgbmV3IEVycm9yKCJObyBmaWxlIHN5c3RlbSBpcyBhdmFpbGFibGUuIil9YXN5bmMgcmVhZERpcmVjdG9yeSgpe3JldHVybltdfX0scHM9e2ZpbGVTeXN0ZW1Qcm92aWRlcjpvKCgpPT5uZXcgekUsImZpbGVTeXN0ZW1Qcm92aWRlciIpfX0pO2Z1bmN0aW9uIElGZSgpe2xldCB0PXVpKGRzKHBzKSxNRmUpLGU9dWkoZnMoe3NoYXJlZDp0fSksTkZlKTtyZXR1cm4gdC5TZXJ2aWNlUmVnaXN0cnkucmVnaXN0ZXIoZSksZX1mdW5jdGlvbiBIdSh0KXt2YXIgZTtsZXQgcj1JRmUoKSxuPXIuc2VyaWFsaXplci5Kc29uU2VyaWFsaXplci5kZXNlcmlhbGl6ZSh0KTtyZXR1cm4gci5zaGFyZWQud29ya3NwYWNlLkxhbmdpdW1Eb2N1bWVudEZhY3RvcnkuZnJvbU1vZGVsKG4sdXMucGFyc2UoYG1lbW9yeTovLyR7KGU9bi5uYW1lKSE9PW51bGwmJmUhPT12b2lkIDA/ZToiZ3JhbW1hciJ9LmxhbmdpdW1gKSksbn12YXIgTkZlLE1GZSxtY2U9TigoKT0+eyJ1c2Ugc3RyaWN0IjtwSSgpO2dJKCk7UmMoKTt4SSgpO0ZjKCk7TkZlPXtHcmFtbWFyOm8oKCk9Pnt9LCJHcmFtbWFyIiksTGFuZ3VhZ2VNZXRhRGF0YTpvKCgpPT4oe2Nhc2VJbnNlbnNpdGl2ZTohMSxmaWxlRXh0ZW5zaW9uczpbIi5sYW5naXVtIl0sbGFuZ3VhZ2VJZDoibGFuZ2l1bSJ9KSwiTGFuZ3VhZ2VNZXRhRGF0YSIpfSxNRmU9e0FzdFJlZmxlY3Rpb246bygoKT0+bmV3IENnLCJBc3RSZWZsZWN0aW9uIil9O28oSUZlLCJjcmVhdGVNaW5pbWFsR3JhbW1hclNlcnZpY2VzIik7byhIdSwibG9hZEdyYW1tYXJGcm9tSnNvbiIpfSk7dmFyIEdyPXt9O2hyKEdyLHtBc3RVdGlsczooKT0+eGssQmlNYXA6KCk9PnZwLENhbmNlbGxhdGlvbjooKT0+eXIsQ29udGV4dENhY2hlOigpPT54cCxDc3RVdGlsczooKT0+Y2ssRE9ORV9SRVNVTFQ6KCk9PklhLERlZmVycmVkOigpPT5jcyxEaXNwb3NhYmxlOigpPT5mZixEaXNwb3NhYmxlQ2FjaGU6KCk9PnAxLERvY3VtZW50Q2FjaGU6KCk9Pl9FLEVNUFRZX1NUUkVBTTooKT0+STIsRXJyb3JXaXRoTG9jYXRpb246KCk9PlpkLEdyYW1tYXJVdGlsczooKT0+RWssTXVsdGlNYXA6KCk9PkJsLE9wZXJhdGlvbkNhbmNlbGxlZDooKT0+UGMsUmVkdWN0aW9uOigpPT56bSxSZWdFeHBVdGlsczooKT0+VGssU2ltcGxlQ2FjaGU6KCk9PiR4LFN0cmVhbUltcGw6KCk9PmFvLFRyZWVTdHJlYW1JbXBsOigpPT5fYyxVUkk6KCk9PnVzLFVyaVV0aWxzOigpPT5ocyxXb3Jrc3BhY2VDYWNoZTooKT0+bTEsYXNzZXJ0VW5yZWFjaGFibGU6KCk9PkxjLGRlbGF5TmV4dFRpY2s6KCk9Pk1NLGludGVycnVwdEFuZENoZWNrOigpPT54aSxpc09wZXJhdGlvbkNhbmNlbGxlZDooKT0+QmMsbG9hZEdyYW1tYXJGcm9tSnNvbjooKT0+SHUsc2V0SW50ZXJydXB0aW9uUGVyaW9kOigpPT4kbGUsc3RhcnRDYW5jZWxhYmxlT3BlcmF0aW9uOigpPT5DRSxzdHJlYW06KCk9PmVufSk7dmFyIGdjZT1OKCgpPT57InVzZSBzdHJpY3QiO0RFKCk7TkUoKTtTcihHcixLbik7ZjEoKTtqTSgpO3VrKCk7bWNlKCk7WW8oKTtQcygpO0ZjKCk7aXMoKTtxbygpO05sKCk7T2woKTtMZygpfSk7dmFyIHljZT1OKCgpPT57InVzZSBzdHJpY3QiO1dNKCk7SHgoKX0pO3ZhciB2Y2U9TigoKT0+eyJ1c2Ugc3RyaWN0IjtxTSgpO1lNKCk7WE0oKTtLTSgpO2gxKCk7eEkoKTtRTSgpO2ZJKCk7Wk0oKX0pO3ZhciB4YT17fTtocih4YSx7QWJzdHJhY3RBc3RSZWZsZWN0aW9uOigpPT5YZCxBYnN0cmFjdENzdE5vZGU6KCk9PkN4LEFic3RyYWN0TGFuZ2l1bVBhcnNlcjooKT0+QXgsQWJzdHJhY3RQYXJzZXJFcnJvck1lc3NhZ2VQcm92aWRlcjooKT0+dkUsQWJzdHJhY3RUaHJlYWRlZEFzeW5jUGFyc2VyOigpPT5jSSxBc3RVdGlsczooKT0+eGssQmlNYXA6KCk9PnZwLENhbmNlbGxhdGlvbjooKT0+eXIsQ29tcG9zaXRlQ3N0Tm9kZUltcGw6KCk9Pm1wLENvbnRleHRDYWNoZTooKT0+eHAsQ3N0Tm9kZUJ1aWxkZXI6KCk9PlN4LENzdFV0aWxzOigpPT5jayxERUZBVUxUX1RPS0VOSVpFX09QVElPTlM6KCk9Pk1FLERPTkVfUkVTVUxUOigpPT5JYSxEYXRhdHlwZVN5bWJvbDooKT0+eUUsRGVmYXVsdEFzdE5vZGVEZXNjcmlwdGlvblByb3ZpZGVyOigpPT5xeCxEZWZhdWx0QXN0Tm9kZUxvY2F0b3I6KCk9Plh4LERlZmF1bHRBc3luY1BhcnNlcjooKT0+aWIsRGVmYXVsdENvbW1lbnRQcm92aWRlcjooKT0+bmIsRGVmYXVsdENvbmZpZ3VyYXRpb25Qcm92aWRlcjooKT0+angsRGVmYXVsdERvY3VtZW50QnVpbGRlcjooKT0+S3gsRGVmYXVsdERvY3VtZW50VmFsaWRhdG9yOigpPT5XeCxEZWZhdWx0SHlkcmF0b3I6KCk9PnNiLERlZmF1bHRJbmRleE1hbmFnZXI6KCk9PlF4LERlZmF1bHRKc29uU2VyaWFsaXplcjooKT0+R3gsRGVmYXVsdExhbmdpdW1Eb2N1bWVudEZhY3Rvcnk6KCk9Pk54LERlZmF1bHRMYW5naXVtRG9jdW1lbnRzOigpPT5NeCxEZWZhdWx0TGV4ZXI6KCk9PndwLERlZmF1bHRMZXhlckVycm9yTWVzc2FnZVByb3ZpZGVyOigpPT5KeCxEZWZhdWx0TGlua2VyOigpPT5JeCxEZWZhdWx0TmFtZVByb3ZpZGVyOigpPT5PeCxEZWZhdWx0UmVmZXJlbmNlRGVzY3JpcHRpb25Qcm92aWRlcjooKT0+WXgsRGVmYXVsdFJlZmVyZW5jZXM6KCk9PlB4LERlZmF1bHRTY29wZUNvbXB1dGF0aW9uOigpPT5CeCxEZWZhdWx0U2NvcGVQcm92aWRlcjooKT0+engsRGVmYXVsdFNlcnZpY2VSZWdpc3RyeTooKT0+VngsRGVmYXVsdFRva2VuQnVpbGRlcjooKT0+VXUsRGVmYXVsdFZhbHVlQ29udmVydGVyOigpPT55cCxEZWZhdWx0V29ya3NwYWNlTG9jazooKT0+YWIsRGVmYXVsdFdvcmtzcGFjZU1hbmFnZXI6KCk9Plp4LERlZmVycmVkOigpPT5jcyxEaXNwb3NhYmxlOigpPT5mZixEaXNwb3NhYmxlQ2FjaGU6KCk9PnAxLERvY3VtZW50Q2FjaGU6KCk9Pl9FLERvY3VtZW50U3RhdGU6KCk9PmtuLERvY3VtZW50VmFsaWRhdG9yOigpPT5qbyxFTVBUWV9TQ09QRTooKT0+eEZlLEVNUFRZX1NUUkVBTTooKT0+STIsRW1wdHlGaWxlU3lzdGVtOigpPT5wcyxFbXB0eUZpbGVTeXN0ZW1Qcm92aWRlcjooKT0+ekUsRXJyb3JXaXRoTG9jYXRpb246KCk9PlpkLEdyYW1tYXJBU1Q6KCk9PlUyLEdyYW1tYXJVdGlsczooKT0+RWssSW5kZW50YXRpb25Bd2FyZUxleGVyOigpPT52SSxJbmRlbnRhdGlvbkF3YXJlVG9rZW5CdWlsZGVyOigpPT4kRSxKU0RvY0RvY3VtZW50YXRpb25Qcm92aWRlcjooKT0+cmIsTGFuZ2l1bUNvbXBsZXRpb25QYXJzZXI6KCk9PkR4LExhbmdpdW1QYXJzZXI6KCk9Pl94LExhbmdpdW1QYXJzZXJFcnJvck1lc3NhZ2VQcm92aWRlcjooKT0+czEsTGVhZkNzdE5vZGVJbXBsOigpPT5wcCxMZXhpbmdNb2RlOigpPT5UcCxNYXBTY29wZTooKT0+RngsTW9kdWxlOigpPT5tSSxNdWx0aU1hcDooKT0+QmwsT3BlcmF0aW9uQ2FuY2VsbGVkOigpPT5QYyxQYXJzZXJXb3JrZXI6KCk9PnVJLFJlZHVjdGlvbjooKT0+em0sUmVnRXhwVXRpbHM6KCk9PlRrLFJvb3RDc3ROb2RlSW1wbDooKT0+YTEsU2ltcGxlQ2FjaGU6KCk9PiR4LFN0cmVhbUltcGw6KCk9PmFvLFN0cmVhbVNjb3BlOigpPT5kMSxUZXh0RG9jdW1lbnQ6KCk9PmMxLFRyZWVTdHJlYW1JbXBsOigpPT5fYyxVUkk6KCk9PnVzLFVyaVV0aWxzOigpPT5ocyxWYWxpZGF0aW9uQ2F0ZWdvcnk6KCk9PmcxLFZhbGlkYXRpb25SZWdpc3RyeTooKT0+VXgsVmFsdWVDb252ZXJ0ZXI6KCk9Pk9jLFdvcmtzcGFjZUNhY2hlOigpPT5tMSxhc3NlcnRVbnJlYWNoYWJsZTooKT0+TGMsY3JlYXRlQ29tcGxldGlvblBhcnNlcjooKT0+Yk0sY3JlYXRlRGVmYXVsdENvcmVNb2R1bGU6KCk9PmZzLGNyZWF0ZURlZmF1bHRTaGFyZWRDb3JlTW9kdWxlOigpPT5kcyxjcmVhdGVHcmFtbWFyQ29uZmlnOigpPT5wTixjcmVhdGVMYW5naXVtUGFyc2VyOigpPT5UTSxjcmVhdGVQYXJzZXI6KCk9PlJ4LGRlbGF5TmV4dFRpY2s6KCk9Pk1NLGRpYWdub3N0aWNEYXRhOigpPT5icCxlYWdlckxvYWQ6KCk9PmljZSxnZXREaWFnbm9zdGljUmFuZ2U6KCk9PllsZSxpbmRlbnRhdGlvbkJ1aWxkZXJEZWZhdWx0T3B0aW9uczooKT0+eUksaW5qZWN0OigpPT51aSxpbnRlcnJ1cHRBbmRDaGVjazooKT0+eGksaXNBc3ROb2RlOigpPT5paSxpc0FzdE5vZGVEZXNjcmlwdGlvbjooKT0+a1IsaXNBc3ROb2RlV2l0aENvbW1lbnQ6KCk9PlVNLGlzQ29tcG9zaXRlQ3N0Tm9kZTooKT0+TGwsaXNJTXVsdGlNb2RlTGV4ZXJEZWZpbml0aW9uOigpPT5lSSxpc0pTRG9jOigpPT5pSSxpc0xlYWZDc3ROb2RlOigpPT5hZixpc0xpbmtpbmdFcnJvcjooKT0+amQsaXNOYW1lZDooKT0+V2xlLGlzT3BlcmF0aW9uQ2FuY2VsbGVkOigpPT5CYyxpc1JlZmVyZW5jZTooKT0+dmEsaXNSb290Q3N0Tm9kZTooKT0+TTIsaXNUb2tlblR5cGVBcnJheTooKT0+SUUsaXNUb2tlblR5cGVEaWN0aW9uYXJ5OigpPT5KTSxsb2FkR3JhbW1hckZyb21Kc29uOigpPT5IdSxwYXJzZUpTRG9jOigpPT5uSSxwcmVwYXJlTGFuZ2l1bVBhcnNlcjooKT0+TmxlLHNldEludGVycnVwdGlvblBlcmlvZDooKT0+JGxlLHN0YXJ0Q2FuY2VsYWJsZU9wZXJhdGlvbjooKT0+Q0Usc3RyZWFtOigpPT5lbix0b0RpYWdub3N0aWNEYXRhOigpPT5YbGUsdG9EaWFnbm9zdGljU2V2ZXJpdHk6KCk9PlJFfSk7dmFyIFhvPU4oKCk9PnsidXNlIHN0cmljdCI7cEkoKTtnSSgpO0hNKCk7c2NlKCk7UmwoKTtvY2UoKTtjY2UoKTtmY2UoKTtkY2UoKTtwY2UoKTtnY2UoKTtTcih4YSxHcik7eWNlKCk7dmNlKCk7UmMoKX0pO2Z1bmN0aW9uIFNjZSh0KXtyZXR1cm4gRmwuaXNJbnN0YW5jZSh0LG9iKX1mdW5jdGlvbiBDY2UodCl7cmV0dXJuIEZsLmlzSW5zdGFuY2UodCx5MSl9ZnVuY3Rpb24gQWNlKHQpe3JldHVybiBGbC5pc0luc3RhbmNlKHQsdjEpfWZ1bmN0aW9uIF9jZSh0KXtyZXR1cm4gRmwuaXNJbnN0YW5jZSh0LFdFKX1mdW5jdGlvbiBEY2UodCl7cmV0dXJuIEZsLmlzSW5zdGFuY2UodCx4MSl9ZnVuY3Rpb24gTGNlKHQpe3JldHVybiBGbC5pc0luc3RhbmNlKHQsbGIpfWZ1bmN0aW9uIFJjZSh0KXtyZXR1cm4gRmwuaXNJbnN0YW5jZSh0LGIxKX1mdW5jdGlvbiBOY2UodCl7cmV0dXJuIEZsLmlzSW5zdGFuY2UodCxjYil9ZnVuY3Rpb24gTWNlKHQpe3JldHVybiBGbC5pc0luc3RhbmNlKHQsdWIpfWZ1bmN0aW9uIEljZSh0KXtyZXR1cm4gRmwuaXNJbnN0YW5jZSh0LGhiKX1mdW5jdGlvbiBPY2UodCl7cmV0dXJuIEZsLmlzSW5zdGFuY2UodCxmYil9dmFyIE9GZSxMdCxBSSxvYixHRSx5MSxWRSxVRSx2MSxXRSxiSSx3SSxUSSx4MSxrSSxsYixFSSxiMSxTSSxjYix1YixoYixmYixxRSxDSSxIRSxQY2UsRmwseGNlLFBGZSxiY2UsQkZlLHdjZSxGRmUsVGNlLCRGZSxrY2UsekZlLEVjZSxHRmUsVkZlLFVGZSxIRmUsV0ZlLHFGZSxZRmUsY28sX0ksREksTEksUkksTkksTUksWEZlLGpGZSxLRmUsUUZlLHcxLFd1LCRzLFpGZSx6cz1OKCgpPT57InVzZSBzdHJpY3QiO1hvKCk7WG8oKTtYbygpO1hvKCk7T0ZlPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxMdD1vKCh0LGUpPT5PRmUodCwibmFtZSIse3ZhbHVlOmUsY29uZmlndXJhYmxlOiEwfSksIl9fbmFtZSIpLEFJPSJTdGF0ZW1lbnQiLG9iPSJBcmNoaXRlY3R1cmUiO28oU2NlLCJpc0FyY2hpdGVjdHVyZSIpO0x0KFNjZSwiaXNBcmNoaXRlY3R1cmUiKTtHRT0iQXhpcyIseTE9IkJyYW5jaCI7byhDY2UsImlzQnJhbmNoIik7THQoQ2NlLCJpc0JyYW5jaCIpO1ZFPSJDaGVja291dCIsVUU9IkNoZXJyeVBpY2tpbmciLHYxPSJDb21taXQiO28oQWNlLCJpc0NvbW1pdCIpO0x0KEFjZSwiaXNDb21taXQiKTtXRT0iQ29tbW9uIjtvKF9jZSwiaXNDb21tb24iKTtMdChfY2UsImlzQ29tbW9uIik7Ykk9IkN1cnZlIix3ST0iRWRnZSIsVEk9IkVudHJ5Iix4MT0iR2l0R3JhcGgiO28oRGNlLCJpc0dpdEdyYXBoIik7THQoRGNlLCJpc0dpdEdyYXBoIik7a0k9Ikdyb3VwIixsYj0iSW5mbyI7byhMY2UsImlzSW5mbyIpO0x0KExjZSwiaXNJbmZvIik7RUk9Ikp1bmN0aW9uIixiMT0iTWVyZ2UiO28oUmNlLCJpc01lcmdlIik7THQoUmNlLCJpc01lcmdlIik7U0k9Ik9wdGlvbiIsY2I9IlBhY2tldCI7byhOY2UsImlzUGFja2V0Iik7THQoTmNlLCJpc1BhY2tldCIpO3ViPSJQYWNrZXRCbG9jayI7byhNY2UsImlzUGFja2V0QmxvY2siKTtMdChNY2UsImlzUGFja2V0QmxvY2siKTtoYj0iUGllIjtvKEljZSwiaXNQaWUiKTtMdChJY2UsImlzUGllIik7ZmI9IlBpZVNlY3Rpb24iO28oT2NlLCJpc1BpZVNlY3Rpb24iKTtMdChPY2UsImlzUGllU2VjdGlvbiIpO3FFPSJSYWRhciIsQ0k9IlNlcnZpY2UiLEhFPSJEaXJlY3Rpb24iLFBjZT1jbGFzcyBleHRlbmRzIFhke3N0YXRpY3tvKHRoaXMsIk1lcm1haWRBc3RSZWZsZWN0aW9uIil9c3RhdGlje0x0KHRoaXMsIk1lcm1haWRBc3RSZWZsZWN0aW9uIil9Z2V0QWxsVHlwZXMoKXtyZXR1cm5bb2IsR0UseTEsVkUsVUUsdjEsV0UsYkksSEUsd0ksVEkseDEsa0ksbGIsRUksYjEsU0ksY2IsdWIsaGIsZmIscUUsQ0ksQUldfWNvbXB1dGVJc1N1YnR5cGUodCxlKXtzd2l0Y2godCl7Y2FzZSB5MTpjYXNlIFZFOmNhc2UgVUU6Y2FzZSB2MTpjYXNlIGIxOnJldHVybiB0aGlzLmlzU3VidHlwZShBSSxlKTtjYXNlIEhFOnJldHVybiB0aGlzLmlzU3VidHlwZSh4MSxlKTtkZWZhdWx0OnJldHVybiExfX1nZXRSZWZlcmVuY2VUeXBlKHQpe2xldCBlPWAke3QuY29udGFpbmVyLiR0eXBlfToke3QucHJvcGVydHl9YDtzd2l0Y2goZSl7Y2FzZSJFbnRyeTpheGlzIjpyZXR1cm4gR0U7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYCR7ZX0gaXMgbm90IGEgdmFsaWQgcmVmZXJlbmNlIGlkLmApfX1nZXRUeXBlTWV0YURhdGEodCl7c3dpdGNoKHQpe2Nhc2Ugb2I6cmV0dXJue25hbWU6b2IscHJvcGVydGllczpbe25hbWU6ImFjY0Rlc2NyIn0se25hbWU6ImFjY1RpdGxlIn0se25hbWU6ImVkZ2VzIixkZWZhdWx0VmFsdWU6W119LHtuYW1lOiJncm91cHMiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6Imp1bmN0aW9ucyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToic2VydmljZXMiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6InRpdGxlIn1dfTtjYXNlIEdFOnJldHVybntuYW1lOkdFLHByb3BlcnRpZXM6W3tuYW1lOiJsYWJlbCJ9LHtuYW1lOiJuYW1lIn1dfTtjYXNlIHkxOnJldHVybntuYW1lOnkxLHByb3BlcnRpZXM6W3tuYW1lOiJuYW1lIn0se25hbWU6Im9yZGVyIn1dfTtjYXNlIFZFOnJldHVybntuYW1lOlZFLHByb3BlcnRpZXM6W3tuYW1lOiJicmFuY2gifV19O2Nhc2UgVUU6cmV0dXJue25hbWU6VUUscHJvcGVydGllczpbe25hbWU6ImlkIn0se25hbWU6InBhcmVudCJ9LHtuYW1lOiJ0YWdzIixkZWZhdWx0VmFsdWU6W119XX07Y2FzZSB2MTpyZXR1cm57bmFtZTp2MSxwcm9wZXJ0aWVzOlt7bmFtZToiaWQifSx7bmFtZToibWVzc2FnZSJ9LHtuYW1lOiJ0YWdzIixkZWZhdWx0VmFsdWU6W119LHtuYW1lOiJ0eXBlIn1dfTtjYXNlIFdFOnJldHVybntuYW1lOldFLHByb3BlcnRpZXM6W3tuYW1lOiJhY2NEZXNjciJ9LHtuYW1lOiJhY2NUaXRsZSJ9LHtuYW1lOiJ0aXRsZSJ9XX07Y2FzZSBiSTpyZXR1cm57bmFtZTpiSSxwcm9wZXJ0aWVzOlt7bmFtZToiZW50cmllcyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToibGFiZWwifSx7bmFtZToibmFtZSJ9XX07Y2FzZSB3STpyZXR1cm57bmFtZTp3SSxwcm9wZXJ0aWVzOlt7bmFtZToibGhzRGlyIn0se25hbWU6Imxoc0dyb3VwIixkZWZhdWx0VmFsdWU6ITF9LHtuYW1lOiJsaHNJZCJ9LHtuYW1lOiJsaHNJbnRvIixkZWZhdWx0VmFsdWU6ITF9LHtuYW1lOiJyaHNEaXIifSx7bmFtZToicmhzR3JvdXAiLGRlZmF1bHRWYWx1ZTohMX0se25hbWU6InJoc0lkIn0se25hbWU6InJoc0ludG8iLGRlZmF1bHRWYWx1ZTohMX0se25hbWU6InRpdGxlIn1dfTtjYXNlIFRJOnJldHVybntuYW1lOlRJLHByb3BlcnRpZXM6W3tuYW1lOiJheGlzIn0se25hbWU6InZhbHVlIn1dfTtjYXNlIHgxOnJldHVybntuYW1lOngxLHByb3BlcnRpZXM6W3tuYW1lOiJhY2NEZXNjciJ9LHtuYW1lOiJhY2NUaXRsZSJ9LHtuYW1lOiJzdGF0ZW1lbnRzIixkZWZhdWx0VmFsdWU6W119LHtuYW1lOiJ0aXRsZSJ9XX07Y2FzZSBrSTpyZXR1cm57bmFtZTprSSxwcm9wZXJ0aWVzOlt7bmFtZToiaWNvbiJ9LHtuYW1lOiJpZCJ9LHtuYW1lOiJpbiJ9LHtuYW1lOiJ0aXRsZSJ9XX07Y2FzZSBsYjpyZXR1cm57bmFtZTpsYixwcm9wZXJ0aWVzOlt7bmFtZToiYWNjRGVzY3IifSx7bmFtZToiYWNjVGl0bGUifSx7bmFtZToidGl0bGUifV19O2Nhc2UgRUk6cmV0dXJue25hbWU6RUkscHJvcGVydGllczpbe25hbWU6ImlkIn0se25hbWU6ImluIn1dfTtjYXNlIGIxOnJldHVybntuYW1lOmIxLHByb3BlcnRpZXM6W3tuYW1lOiJicmFuY2gifSx7bmFtZToiaWQifSx7bmFtZToidGFncyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToidHlwZSJ9XX07Y2FzZSBTSTpyZXR1cm57bmFtZTpTSSxwcm9wZXJ0aWVzOlt7bmFtZToibmFtZSJ9LHtuYW1lOiJ2YWx1ZSIsZGVmYXVsdFZhbHVlOiExfV19O2Nhc2UgY2I6cmV0dXJue25hbWU6Y2IscHJvcGVydGllczpbe25hbWU6ImFjY0Rlc2NyIn0se25hbWU6ImFjY1RpdGxlIn0se25hbWU6ImJsb2NrcyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToidGl0bGUifV19O2Nhc2UgdWI6cmV0dXJue25hbWU6dWIscHJvcGVydGllczpbe25hbWU6ImVuZCJ9LHtuYW1lOiJsYWJlbCJ9LHtuYW1lOiJzdGFydCJ9XX07Y2FzZSBoYjpyZXR1cm57bmFtZTpoYixwcm9wZXJ0aWVzOlt7bmFtZToiYWNjRGVzY3IifSx7bmFtZToiYWNjVGl0bGUifSx7bmFtZToic2VjdGlvbnMiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6InNob3dEYXRhIixkZWZhdWx0VmFsdWU6ITF9LHtuYW1lOiJ0aXRsZSJ9XX07Y2FzZSBmYjpyZXR1cm57bmFtZTpmYixwcm9wZXJ0aWVzOlt7bmFtZToibGFiZWwifSx7bmFtZToidmFsdWUifV19O2Nhc2UgcUU6cmV0dXJue25hbWU6cUUscHJvcGVydGllczpbe25hbWU6ImFjY0Rlc2NyIn0se25hbWU6ImFjY1RpdGxlIn0se25hbWU6ImF4ZXMiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6ImN1cnZlcyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToib3B0aW9ucyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToidGl0bGUifV19O2Nhc2UgQ0k6cmV0dXJue25hbWU6Q0kscHJvcGVydGllczpbe25hbWU6Imljb24ifSx7bmFtZToiaWNvblRleHQifSx7bmFtZToiaWQifSx7bmFtZToiaW4ifSx7bmFtZToidGl0bGUifV19O2Nhc2UgSEU6cmV0dXJue25hbWU6SEUscHJvcGVydGllczpbe25hbWU6ImFjY0Rlc2NyIn0se25hbWU6ImFjY1RpdGxlIn0se25hbWU6ImRpciJ9LHtuYW1lOiJzdGF0ZW1lbnRzIixkZWZhdWx0VmFsdWU6W119LHtuYW1lOiJ0aXRsZSJ9XX07ZGVmYXVsdDpyZXR1cm57bmFtZTp0LHByb3BlcnRpZXM6W119fX19LEZsPW5ldyBQY2UsUEZlPUx0KCgpPT54Y2U/Pyh4Y2U9SHUoJ3siJHR5cGUiOiJHcmFtbWFyIiwiaXNEZWNsYXJlZCI6dHJ1ZSwibmFtZSI6IkluZm8iLCJpbXBvcnRzIjpbXSwicnVsZXMiOlt7IiR0eXBlIjoiUGFyc2VyUnVsZSIsImVudHJ5Ijp0cnVlLCJuYW1lIjoiSW5mbyIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AzIn0sImFyZ3VtZW50cyI6W10sImNhcmRpbmFsaXR5IjoiKiJ9LHsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJpbmZvIn0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AzIn0sImFyZ3VtZW50cyI6W10sImNhcmRpbmFsaXR5IjoiKiJ9LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6InNob3dJbmZvIn0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AzIn0sImFyZ3VtZW50cyI6W10sImNhcmRpbmFsaXR5IjoiKiJ9XSwiY2FyZGluYWxpdHkiOiI/In0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxIn0sImFyZ3VtZW50cyI6W10sImNhcmRpbmFsaXR5IjoiPyJ9XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwiZnJhZ21lbnQiOnRydWUsIm5hbWUiOiJUaXRsZUFuZEFjY2Vzc2liaWxpdGllcyIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiYWNjRGVzY3IiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A0In0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJhY2NUaXRsZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDUifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InRpdGxlIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANiJ9LCJhcmd1bWVudHMiOltdfX1dfSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIifSwiYXJndW1lbnRzIjpbXX1dLCJjYXJkaW5hbGl0eSI6IisifSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJmcmFnbWVudCI6dHJ1ZSwibmFtZSI6IkVPTCIsImRhdGFUeXBlIjoic3RyaW5nIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AzIn0sImFyZ3VtZW50cyI6W10sImNhcmRpbmFsaXR5IjoiKyJ9LHsiJHR5cGUiOiJFbmRPZkZpbGUifV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6Ik5FV0xJTkUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1xcXFxyP1xcXFxuLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiQUNDX0RFU0NSIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSphY2NEZXNjcig/OltcXFxcdCBdKjooW15cXFxcblxcXFxyXSo/KD89JSUpfFteXFxcXG5cXFxccl0qKXxcXFxccyp7KFtefV0qKX0pLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiQUNDX1RJVExFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSphY2NUaXRsZVtcXFxcdCBdKjooPzpbXlxcXFxuXFxcXHJdKj8oPz0lJSl8W15cXFxcblxcXFxyXSopLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiVElUTEUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKnRpdGxlKD86W1xcXFx0IF1bXlxcXFxuXFxcXHJdKj8oPz0lJSl8W1xcXFx0IF1bXlxcXFxuXFxcXHJdKnwpLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJoaWRkZW4iOnRydWUsIm5hbWUiOiJXSElURVNQQUNFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSsvIn0sImZyYWdtZW50IjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6IllBTUwiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiLy0tLVtcXFxcdCBdKlxcXFxyP1xcXFxuKD86W1xcXFxTXFxcXHNdKj9cXFxccj9cXFxcbik/LS0tKD86XFxcXHI/XFxcXG58KD8hXFxcXFMpKS8ifSwiZnJhZ21lbnQiOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwiaGlkZGVuIjp0cnVlLCJuYW1lIjoiRElSRUNUSVZFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSolJXtbXFxcXFNcXFxcc10qP30lJSg/OlxcXFxyP1xcXFxufCg/IVxcXFxTKSkvIn0sImZyYWdtZW50IjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6IlNJTkdMRV9MSU5FX0NPTU1FTlQiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKiUlW15cXFxcblxcXFxyXSovIn0sImZyYWdtZW50IjpmYWxzZX1dLCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwiaW50ZXJmYWNlcyI6W3siJHR5cGUiOiJJbnRlcmZhY2UiLCJuYW1lIjoiQ29tbW9uIiwiYXR0cmlidXRlcyI6W3siJHR5cGUiOiJUeXBlQXR0cmlidXRlIiwibmFtZSI6ImFjY0Rlc2NyIiwiaXNPcHRpb25hbCI6dHJ1ZSwidHlwZSI6eyIkdHlwZSI6IlNpbXBsZVR5cGUiLCJwcmltaXRpdmVUeXBlIjoic3RyaW5nIn19LHsiJHR5cGUiOiJUeXBlQXR0cmlidXRlIiwibmFtZSI6ImFjY1RpdGxlIiwiaXNPcHRpb25hbCI6dHJ1ZSwidHlwZSI6eyIkdHlwZSI6IlNpbXBsZVR5cGUiLCJwcmltaXRpdmVUeXBlIjoic3RyaW5nIn19LHsiJHR5cGUiOiJUeXBlQXR0cmlidXRlIiwibmFtZSI6InRpdGxlIiwiaXNPcHRpb25hbCI6dHJ1ZSwidHlwZSI6eyIkdHlwZSI6IlNpbXBsZVR5cGUiLCJwcmltaXRpdmVUeXBlIjoic3RyaW5nIn19XSwic3VwZXJUeXBlcyI6W119XSwidHlwZXMiOltdLCJ1c2VkR3JhbW1hcnMiOltdfScpKSwiSW5mb0dyYW1tYXIiKSxCRmU9THQoKCk9PmJjZT8/KGJjZT1IdShgeyIkdHlwZSI6IkdyYW1tYXIiLCJpc0RlY2xhcmVkIjp0cnVlLCJuYW1lIjoiUGFja2V0IiwiaW1wb3J0cyI6W10sInJ1bGVzIjpbeyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJlbnRyeSI6dHJ1ZSwibmFtZSI6IlBhY2tldCIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A2In0sImFyZ3VtZW50cyI6W10sImNhcmRpbmFsaXR5IjoiKiJ9LHsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJwYWNrZXQtYmV0YSJ9LHsiJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A2In0sImFyZ3VtZW50cyI6W10sImNhcmRpbmFsaXR5IjoiKiJ9LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANCJ9LCJhcmd1bWVudHMiOltdfSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJibG9ja3MiLCJvcGVyYXRvciI6Iis9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMSJ9LCJhcmd1bWVudHMiOltdfSwiY2FyZGluYWxpdHkiOiIqIn1dfSx7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANiJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IisifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJibG9ja3MiLCJvcGVyYXRvciI6Iis9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMSJ9LCJhcmd1bWVudHMiOltdfSwiY2FyZGluYWxpdHkiOiIrIn1dfSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDYifSwiYXJndW1lbnRzIjpbXSwiY2FyZGluYWxpdHkiOiIqIn1dfV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJQYWNrZXRCbG9jayIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoic3RhcnQiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyIn0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiItIn0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiZW5kIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMiJ9LCJhcmd1bWVudHMiOltdfX1dLCJjYXJkaW5hbGl0eSI6Ij8ifSx7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiOiJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImxhYmVsIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMyJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A1In0sImFyZ3VtZW50cyI6W119XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJJTlQiLCJ0eXBlIjp7IiR0eXBlIjoiUmV0dXJuVHlwZSIsIm5hbWUiOiJudW1iZXIifSwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii8wfFsxLTldWzAtOV0qLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiU1RSSU5HIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9cXCJbXlxcIl0qXFwifCdbXiddKicvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJmcmFnbWVudCI6dHJ1ZSwibmFtZSI6IlRpdGxlQW5kQWNjZXNzaWJpbGl0aWVzIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJhY2NEZXNjciIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDcifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImFjY1RpdGxlIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAOCJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoidGl0bGUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A5In0sImFyZ3VtZW50cyI6W119fV19LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANSJ9LCJhcmd1bWVudHMiOltdfV0sImNhcmRpbmFsaXR5IjoiKyJ9LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsImZyYWdtZW50Ijp0cnVlLCJuYW1lIjoiRU9MIiwiZGF0YVR5cGUiOiJzdHJpbmciLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDYifSwiYXJndW1lbnRzIjpbXSwiY2FyZGluYWxpdHkiOiIrIn0seyIkdHlwZSI6IkVuZE9mRmlsZSJ9XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiTkVXTElORSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvXFxcXHI/XFxcXG4vIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJBQ0NfREVTQ1IiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKmFjY0Rlc2NyKD86W1xcXFx0IF0qOihbXlxcXFxuXFxcXHJdKj8oPz0lJSl8W15cXFxcblxcXFxyXSopfFxcXFxzKnsoW159XSopfSkvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJBQ0NfVElUTEUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKmFjY1RpdGxlW1xcXFx0IF0qOig/OlteXFxcXG5cXFxccl0qPyg/PSUlKXxbXlxcXFxuXFxcXHJdKikvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJUSVRMRSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0qdGl0bGUoPzpbXFxcXHQgXVteXFxcXG5cXFxccl0qPyg/PSUlKXxbXFxcXHQgXVteXFxcXG5cXFxccl0qfCkvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6IldISVRFU1BBQ0UiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKy8ifSwiZnJhZ21lbnQiOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwiaGlkZGVuIjp0cnVlLCJuYW1lIjoiWUFNTCIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvLS0tW1xcXFx0IF0qXFxcXHI/XFxcXG4oPzpbXFxcXFNcXFxcc10qP1xcXFxyP1xcXFxuKT8tLS0oPzpcXFxccj9cXFxcbnwoPyFcXFxcUykpLyJ9LCJmcmFnbWVudCI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJoaWRkZW4iOnRydWUsIm5hbWUiOiJESVJFQ1RJVkUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKiUle1tcXFxcU1xcXFxzXSo/fSUlKD86XFxcXHI/XFxcXG58KD8hXFxcXFMpKS8ifSwiZnJhZ21lbnQiOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwiaGlkZGVuIjp0cnVlLCJuYW1lIjoiU0lOR0xFX0xJTkVfQ09NTUVOVCIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0qJSVbXlxcXFxuXFxcXHJdKi8ifSwiZnJhZ21lbnQiOmZhbHNlfV0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJpbnRlcmZhY2VzIjpbeyIkdHlwZSI6IkludGVyZmFjZSIsIm5hbWUiOiJDb21tb24iLCJhdHRyaWJ1dGVzIjpbeyIkdHlwZSI6IlR5cGVBdHRyaWJ1dGUiLCJuYW1lIjoiYWNjRGVzY3IiLCJpc09wdGlvbmFsIjp0cnVlLCJ0eXBlIjp7IiR0eXBlIjoiU2ltcGxlVHlwZSIsInByaW1pdGl2ZVR5cGUiOiJzdHJpbmcifX0seyIkdHlwZSI6IlR5cGVBdHRyaWJ1dGUiLCJuYW1lIjoiYWNjVGl0bGUiLCJpc09wdGlvbmFsIjp0cnVlLCJ0eXBlIjp7IiR0eXBlIjoiU2ltcGxlVHlwZSIsInByaW1pdGl2ZVR5cGUiOiJzdHJpbmcifX0seyIkdHlwZSI6IlR5cGVBdHRyaWJ1dGUiLCJuYW1lIjoidGl0bGUiLCJpc09wdGlvbmFsIjp0cnVlLCJ0eXBlIjp7IiR0eXBlIjoiU2ltcGxlVHlwZSIsInByaW1pdGl2ZVR5cGUiOiJzdHJpbmcifX1dLCJzdXBlclR5cGVzIjpbXX1dLCJ0eXBlcyI6W10sInVzZWRHcmFtbWFycyI6W119YCkpLCJQYWNrZXRHcmFtbWFyIiksRkZlPUx0KCgpPT53Y2U/Pyh3Y2U9SHUoJ3siJHR5cGUiOiJHcmFtbWFyIiwiaXNEZWNsYXJlZCI6dHJ1ZSwibmFtZSI6IlBpZSIsImltcG9ydHMiOltdLCJydWxlcyI6W3siJHR5cGUiOiJQYXJzZXJSdWxlIiwiZW50cnkiOnRydWUsIm5hbWUiOiJQaWUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANiJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IioifSx7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoicGllIn0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoic2hvd0RhdGEiLCJvcGVyYXRvciI6Ij89IiwidGVybWluYWwiOnsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJzaG93RGF0YSJ9LCJjYXJkaW5hbGl0eSI6Ij8ifSx7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANiJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IioifSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDQifSwiYXJndW1lbnRzIjpbXX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoic2VjdGlvbnMiLCJvcGVyYXRvciI6Iis9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMSJ9LCJhcmd1bWVudHMiOltdfSwiY2FyZGluYWxpdHkiOiIqIn1dfSx7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANiJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IisifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJzZWN0aW9ucyIsIm9wZXJhdG9yIjoiKz0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxIn0sImFyZ3VtZW50cyI6W119LCJjYXJkaW5hbGl0eSI6IisifV19LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANiJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IioifV19XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6IlBpZVNlY3Rpb24iLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImxhYmVsIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMiJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IjoifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJ2YWx1ZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDMifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANSJ9LCJhcmd1bWVudHMiOltdfV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiUElFX1NFQ1RJT05fTEFCRUwiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1xcIlteXFwiXStcXCIvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJQSUVfU0VDVElPTl9WQUxVRSIsInR5cGUiOnsiJHR5cGUiOiJSZXR1cm5UeXBlIiwibmFtZSI6Im51bWJlciJ9LCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiLygwfFsxLTldWzAtOV0qKShcXFxcLlswLTldKyk/LyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwiZnJhZ21lbnQiOnRydWUsIm5hbWUiOiJUaXRsZUFuZEFjY2Vzc2liaWxpdGllcyIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiYWNjRGVzY3IiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A3In0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJhY2NUaXRsZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDgifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InRpdGxlIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAOSJ9LCJhcmd1bWVudHMiOltdfX1dfSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDUifSwiYXJndW1lbnRzIjpbXX1dLCJjYXJkaW5hbGl0eSI6IisifSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJmcmFnbWVudCI6dHJ1ZSwibmFtZSI6IkVPTCIsImRhdGFUeXBlIjoic3RyaW5nIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A2In0sImFyZ3VtZW50cyI6W10sImNhcmRpbmFsaXR5IjoiKyJ9LHsiJHR5cGUiOiJFbmRPZkZpbGUifV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6Ik5FV0xJTkUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1xcXFxyP1xcXFxuLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiQUNDX0RFU0NSIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSphY2NEZXNjcig/OltcXFxcdCBdKjooW15cXFxcblxcXFxyXSo/KD89JSUpfFteXFxcXG5cXFxccl0qKXxcXFxccyp7KFtefV0qKX0pLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiQUNDX1RJVExFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSphY2NUaXRsZVtcXFxcdCBdKjooPzpbXlxcXFxuXFxcXHJdKj8oPz0lJSl8W15cXFxcblxcXFxyXSopLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiVElUTEUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKnRpdGxlKD86W1xcXFx0IF1bXlxcXFxuXFxcXHJdKj8oPz0lJSl8W1xcXFx0IF1bXlxcXFxuXFxcXHJdKnwpLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJoaWRkZW4iOnRydWUsIm5hbWUiOiJXSElURVNQQUNFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSsvIn0sImZyYWdtZW50IjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6IllBTUwiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiLy0tLVtcXFxcdCBdKlxcXFxyP1xcXFxuKD86W1xcXFxTXFxcXHNdKj9cXFxccj9cXFxcbik/LS0tKD86XFxcXHI/XFxcXG58KD8hXFxcXFMpKS8ifSwiZnJhZ21lbnQiOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwiaGlkZGVuIjp0cnVlLCJuYW1lIjoiRElSRUNUSVZFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSolJXtbXFxcXFNcXFxcc10qP30lJSg/OlxcXFxyP1xcXFxufCg/IVxcXFxTKSkvIn0sImZyYWdtZW50IjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6IlNJTkdMRV9MSU5FX0NPTU1FTlQiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKiUlW15cXFxcblxcXFxyXSovIn0sImZyYWdtZW50IjpmYWxzZX1dLCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwiaW50ZXJmYWNlcyI6W3siJHR5cGUiOiJJbnRlcmZhY2UiLCJuYW1lIjoiQ29tbW9uIiwiYXR0cmlidXRlcyI6W3siJHR5cGUiOiJUeXBlQXR0cmlidXRlIiwibmFtZSI6ImFjY0Rlc2NyIiwiaXNPcHRpb25hbCI6dHJ1ZSwidHlwZSI6eyIkdHlwZSI6IlNpbXBsZVR5cGUiLCJwcmltaXRpdmVUeXBlIjoic3RyaW5nIn19LHsiJHR5cGUiOiJUeXBlQXR0cmlidXRlIiwibmFtZSI6ImFjY1RpdGxlIiwiaXNPcHRpb25hbCI6dHJ1ZSwidHlwZSI6eyIkdHlwZSI6IlNpbXBsZVR5cGUiLCJwcmltaXRpdmVUeXBlIjoic3RyaW5nIn19LHsiJHR5cGUiOiJUeXBlQXR0cmlidXRlIiwibmFtZSI6InRpdGxlIiwiaXNPcHRpb25hbCI6dHJ1ZSwidHlwZSI6eyIkdHlwZSI6IlNpbXBsZVR5cGUiLCJwcmltaXRpdmVUeXBlIjoic3RyaW5nIn19XSwic3VwZXJUeXBlcyI6W119XSwidHlwZXMiOltdLCJ1c2VkR3JhbW1hcnMiOltdfScpKSwiUGllR3JhbW1hciIpLCRGZT1MdCgoKT0+VGNlPz8oVGNlPUh1KCd7IiR0eXBlIjoiR3JhbW1hciIsImlzRGVjbGFyZWQiOnRydWUsIm5hbWUiOiJBcmNoaXRlY3R1cmUiLCJpbXBvcnRzIjpbXSwicnVsZXMiOlt7IiR0eXBlIjoiUGFyc2VyUnVsZSIsImVudHJ5Ijp0cnVlLCJuYW1lIjoiQXJjaGl0ZWN0dXJlIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE4In0sImFyZ3VtZW50cyI6W10sImNhcmRpbmFsaXR5IjoiKiJ9LHsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJhcmNoaXRlY3R1cmUtYmV0YSJ9LHsiJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxOCJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IioifSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE2In0sImFyZ3VtZW50cyI6W119XX0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE4In0sImFyZ3VtZW50cyI6W10sImNhcmRpbmFsaXR5IjoiKiJ9LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMSJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IioifV19LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTgifSwiYXJndW1lbnRzIjpbXSwiY2FyZGluYWxpdHkiOiIqIn1dfV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsImZyYWdtZW50Ijp0cnVlLCJuYW1lIjoiU3RhdGVtZW50IiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiZ3JvdXBzIiwib3BlcmF0b3IiOiIrPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDUifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InNlcnZpY2VzIiwib3BlcmF0b3IiOiIrPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDYifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6Imp1bmN0aW9ucyIsIm9wZXJhdG9yIjoiKz0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A3In0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJlZGdlcyIsIm9wZXJhdG9yIjoiKz0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A4In0sImFyZ3VtZW50cyI6W119fV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsImZyYWdtZW50Ijp0cnVlLCJuYW1lIjoiTGVmdFBvcnQiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiI6In0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoibGhzRGlyIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAOSJ9LCJhcmd1bWVudHMiOltdfX1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJmcmFnbWVudCI6dHJ1ZSwibmFtZSI6IlJpZ2h0UG9ydCIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoicmhzRGlyIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAOSJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IjoifV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsImZyYWdtZW50Ijp0cnVlLCJuYW1lIjoiQXJyb3ciLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMiJ9LCJhcmd1bWVudHMiOltdfSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJsaHNJbnRvIiwib3BlcmF0b3IiOiI/PSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE1In0sImFyZ3VtZW50cyI6W119LCJjYXJkaW5hbGl0eSI6Ij8ifSx7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiLS0ifSx7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiItIn0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoidGl0bGUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxMyJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6Ii0ifV19XX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoicmhzSW50byIsIm9wZXJhdG9yIjoiPz0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxNSJ9LCJhcmd1bWVudHMiOltdfSwiY2FyZGluYWxpdHkiOiI/In0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AzIn0sImFyZ3VtZW50cyI6W119XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6Ikdyb3VwIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiZ3JvdXAifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJpZCIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEwIn0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJpY29uIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTIifSwiYXJndW1lbnRzIjpbXX0sImNhcmRpbmFsaXR5IjoiPyJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InRpdGxlIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTMifSwiYXJndW1lbnRzIjpbXX0sImNhcmRpbmFsaXR5IjoiPyJ9LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6ImluIn0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiaW4iLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxMCJ9LCJhcmd1bWVudHMiOltdfX1dLCJjYXJkaW5hbGl0eSI6Ij8ifSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE3In0sImFyZ3VtZW50cyI6W119XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJuYW1lIjoiU2VydmljZSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6InNlcnZpY2UifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJpZCIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEwIn0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJpY29uVGV4dCIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDExIn0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJpY29uIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTIifSwiYXJndW1lbnRzIjpbXX19XSwiY2FyZGluYWxpdHkiOiI/In0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoidGl0bGUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxMyJ9LCJhcmd1bWVudHMiOltdfSwiY2FyZGluYWxpdHkiOiI/In0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiaW4ifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJpbiIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEwIn0sImFyZ3VtZW50cyI6W119fV0sImNhcmRpbmFsaXR5IjoiPyJ9LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTcifSwiYXJndW1lbnRzIjpbXX1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJKdW5jdGlvbiIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6Imp1bmN0aW9uIn0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiaWQiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxMCJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiaW4ifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJpbiIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEwIn0sImFyZ3VtZW50cyI6W119fV0sImNhcmRpbmFsaXR5IjoiPyJ9LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTcifSwiYXJndW1lbnRzIjpbXX1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJFZGdlIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJsaHNJZCIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEwIn0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJsaHNHcm91cCIsIm9wZXJhdG9yIjoiPz0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxNCJ9LCJhcmd1bWVudHMiOltdfSwiY2FyZGluYWxpdHkiOiI/In0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A0In0sImFyZ3VtZW50cyI6W119LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InJoc0lkIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTAifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InJoc0dyb3VwIiwib3BlcmF0b3IiOiI/PSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE0In0sImFyZ3VtZW50cyI6W119LCJjYXJkaW5hbGl0eSI6Ij8ifSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE3In0sImFyZ3VtZW50cyI6W119XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJBUlJPV19ESVJFQ1RJT04iLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiVGVybWluYWxBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJUZXJtaW5hbEFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlRlcm1pbmFsQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiQ2hhcmFjdGVyUmFuZ2UiLCJsZWZ0Ijp7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiTCJ9fSx7IiR0eXBlIjoiQ2hhcmFjdGVyUmFuZ2UiLCJsZWZ0Ijp7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiUiJ9fV19LHsiJHR5cGUiOiJDaGFyYWN0ZXJSYW5nZSIsImxlZnQiOnsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJUIn19XX0seyIkdHlwZSI6IkNoYXJhY3RlclJhbmdlIiwibGVmdCI6eyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IkIifX1dfSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IkFSQ0hfSUQiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcd10rLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiQVJDSF9URVhUX0lDT04iLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1xcXFwoXFwiW15cXCJdK1xcIlxcXFwpLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiQVJDSF9JQ09OIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9cXFxcKFtcXFxcdy06XStcXFxcKS8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IkFSQ0hfVElUTEUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1xcXFxbW1xcXFx3IF0rXFxcXF0vIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJBUlJPV19HUk9VUCIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvXFxcXHtncm91cFxcXFx9LyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiQVJST1dfSU5UTyIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvPHw+LyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwiZnJhZ21lbnQiOnRydWUsIm5hbWUiOiJUaXRsZUFuZEFjY2Vzc2liaWxpdGllcyIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiYWNjRGVzY3IiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxOSJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiYWNjVGl0bGUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyMCJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoidGl0bGUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyMSJ9LCJhcmd1bWVudHMiOltdfX1dfSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE3In0sImFyZ3VtZW50cyI6W119XSwiY2FyZGluYWxpdHkiOiIrIn0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwiZnJhZ21lbnQiOnRydWUsIm5hbWUiOiJFT0wiLCJkYXRhVHlwZSI6InN0cmluZyIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTgifSwiYXJndW1lbnRzIjpbXSwiY2FyZGluYWxpdHkiOiIrIn0seyIkdHlwZSI6IkVuZE9mRmlsZSJ9XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiTkVXTElORSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvXFxcXHI/XFxcXG4vIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJBQ0NfREVTQ1IiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKmFjY0Rlc2NyKD86W1xcXFx0IF0qOihbXlxcXFxuXFxcXHJdKj8oPz0lJSl8W15cXFxcblxcXFxyXSopfFxcXFxzKnsoW159XSopfSkvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJBQ0NfVElUTEUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKmFjY1RpdGxlW1xcXFx0IF0qOig/OlteXFxcXG5cXFxccl0qPyg/PSUlKXxbXlxcXFxuXFxcXHJdKikvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJUSVRMRSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0qdGl0bGUoPzpbXFxcXHQgXVteXFxcXG5cXFxccl0qPyg/PSUlKXxbXFxcXHQgXVteXFxcXG5cXFxccl0qfCkvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6IldISVRFU1BBQ0UiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKy8ifSwiZnJhZ21lbnQiOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwiaGlkZGVuIjp0cnVlLCJuYW1lIjoiWUFNTCIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvLS0tW1xcXFx0IF0qXFxcXHI/XFxcXG4oPzpbXFxcXFNcXFxcc10qP1xcXFxyP1xcXFxuKT8tLS0oPzpcXFxccj9cXFxcbnwoPyFcXFxcUykpLyJ9LCJmcmFnbWVudCI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJoaWRkZW4iOnRydWUsIm5hbWUiOiJESVJFQ1RJVkUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKiUle1tcXFxcU1xcXFxzXSo/fSUlKD86XFxcXHI/XFxcXG58KD8hXFxcXFMpKS8ifSwiZnJhZ21lbnQiOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwiaGlkZGVuIjp0cnVlLCJuYW1lIjoiU0lOR0xFX0xJTkVfQ09NTUVOVCIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0qJSVbXlxcXFxuXFxcXHJdKi8ifSwiZnJhZ21lbnQiOmZhbHNlfV0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJpbnRlcmZhY2VzIjpbeyIkdHlwZSI6IkludGVyZmFjZSIsIm5hbWUiOiJDb21tb24iLCJhdHRyaWJ1dGVzIjpbeyIkdHlwZSI6IlR5cGVBdHRyaWJ1dGUiLCJuYW1lIjoiYWNjRGVzY3IiLCJpc09wdGlvbmFsIjp0cnVlLCJ0eXBlIjp7IiR0eXBlIjoiU2ltcGxlVHlwZSIsInByaW1pdGl2ZVR5cGUiOiJzdHJpbmcifX0seyIkdHlwZSI6IlR5cGVBdHRyaWJ1dGUiLCJuYW1lIjoiYWNjVGl0bGUiLCJpc09wdGlvbmFsIjp0cnVlLCJ0eXBlIjp7IiR0eXBlIjoiU2ltcGxlVHlwZSIsInByaW1pdGl2ZVR5cGUiOiJzdHJpbmcifX0seyIkdHlwZSI6IlR5cGVBdHRyaWJ1dGUiLCJuYW1lIjoidGl0bGUiLCJpc09wdGlvbmFsIjp0cnVlLCJ0eXBlIjp7IiR0eXBlIjoiU2ltcGxlVHlwZSIsInByaW1pdGl2ZVR5cGUiOiJzdHJpbmcifX1dLCJzdXBlclR5cGVzIjpbXX1dLCJ0eXBlcyI6W10sInVzZWRHcmFtbWFycyI6W119JykpLCJBcmNoaXRlY3R1cmVHcmFtbWFyIiksekZlPUx0KCgpPT5rY2U/PyhrY2U9SHUoYHsiJHR5cGUiOiJHcmFtbWFyIiwiaXNEZWNsYXJlZCI6dHJ1ZSwibmFtZSI6IkdpdEdyYXBoIiwiaW50ZXJmYWNlcyI6W3siJHR5cGUiOiJJbnRlcmZhY2UiLCJuYW1lIjoiQ29tbW9uIiwiYXR0cmlidXRlcyI6W3siJHR5cGUiOiJUeXBlQXR0cmlidXRlIiwibmFtZSI6ImFjY0Rlc2NyIiwiaXNPcHRpb25hbCI6dHJ1ZSwidHlwZSI6eyIkdHlwZSI6IlNpbXBsZVR5cGUiLCJwcmltaXRpdmVUeXBlIjoic3RyaW5nIn19LHsiJHR5cGUiOiJUeXBlQXR0cmlidXRlIiwibmFtZSI6ImFjY1RpdGxlIiwiaXNPcHRpb25hbCI6dHJ1ZSwidHlwZSI6eyIkdHlwZSI6IlNpbXBsZVR5cGUiLCJwcmltaXRpdmVUeXBlIjoic3RyaW5nIn19LHsiJHR5cGUiOiJUeXBlQXR0cmlidXRlIiwibmFtZSI6InRpdGxlIiwiaXNPcHRpb25hbCI6dHJ1ZSwidHlwZSI6eyIkdHlwZSI6IlNpbXBsZVR5cGUiLCJwcmltaXRpdmVUeXBlIjoic3RyaW5nIn19XSwic3VwZXJUeXBlcyI6W119XSwicnVsZXMiOlt7IiR0eXBlIjoiUGFyc2VyUnVsZSIsImZyYWdtZW50Ijp0cnVlLCJuYW1lIjoiVGl0bGVBbmRBY2Nlc3NpYmlsaXRpZXMiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImFjY0Rlc2NyIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMyJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiYWNjVGl0bGUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A0In0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJ0aXRsZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDUifSwiYXJndW1lbnRzIjpbXX19XX0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxIn0sImFyZ3VtZW50cyI6W119XSwiY2FyZGluYWxpdHkiOiIrIn0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwiZnJhZ21lbnQiOnRydWUsIm5hbWUiOiJFT0wiLCJkYXRhVHlwZSI6InN0cmluZyIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMiJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IisifSx7IiR0eXBlIjoiRW5kT2ZGaWxlIn1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJORVdMSU5FIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9cXFxccj9cXFxcbi8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IkFDQ19ERVNDUiIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0qYWNjRGVzY3IoPzpbXFxcXHQgXSo6KFteXFxcXG5cXFxccl0qPyg/PSUlKXxbXlxcXFxuXFxcXHJdKil8XFxcXHMqeyhbXn1dKil9KS8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IkFDQ19USVRMRSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0qYWNjVGl0bGVbXFxcXHQgXSo6KD86W15cXFxcblxcXFxyXSo/KD89JSUpfFteXFxcXG5cXFxccl0qKS8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IlRJVExFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSp0aXRsZSg/OltcXFxcdCBdW15cXFxcblxcXFxyXSo/KD89JSUpfFtcXFxcdCBdW15cXFxcblxcXFxyXSp8KS8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwiaGlkZGVuIjp0cnVlLCJuYW1lIjoiV0hJVEVTUEFDRSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0rLyJ9LCJmcmFnbWVudCI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJoaWRkZW4iOnRydWUsIm5hbWUiOiJZQU1MIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii8tLS1bXFxcXHQgXSpcXFxccj9cXFxcbig/OltcXFxcU1xcXFxzXSo/XFxcXHI/XFxcXG4pPy0tLSg/OlxcXFxyP1xcXFxufCg/IVxcXFxTKSkvIn0sImZyYWdtZW50IjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6IkRJUkVDVElWRSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0qJSV7W1xcXFxTXFxcXHNdKj99JSUoPzpcXFxccj9cXFxcbnwoPyFcXFxcUykpLyJ9LCJmcmFnbWVudCI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJoaWRkZW4iOnRydWUsIm5hbWUiOiJTSU5HTEVfTElORV9DT01NRU5UIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSolJVteXFxcXG5cXFxccl0qLyJ9LCJmcmFnbWVudCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwiZW50cnkiOnRydWUsIm5hbWUiOiJHaXRHcmFwaCIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyIn0sImFyZ3VtZW50cyI6W10sImNhcmRpbmFsaXR5IjoiKiJ9LHsiJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJnaXRHcmFwaCJ9LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6ImdpdEdyYXBoIn0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IjoifV19LHsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJnaXRHcmFwaDoifSx7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJnaXRHcmFwaCJ9LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTIifSwiYXJndW1lbnRzIjpbXX0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IjoifV19XX0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyIn0sImFyZ3VtZW50cyI6W10sImNhcmRpbmFsaXR5IjoiKiJ9LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyIn0sImFyZ3VtZW50cyI6W10sImNhcmRpbmFsaXR5IjoiKiJ9LHsiJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMCJ9LCJhcmd1bWVudHMiOltdfSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJzdGF0ZW1lbnRzIiwib3BlcmF0b3IiOiIrPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDExIn0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIifSwiYXJndW1lbnRzIjpbXX1dLCJjYXJkaW5hbGl0eSI6IioifV19XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6IlN0YXRlbWVudCIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTMifSwiYXJndW1lbnRzIjpbXX0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxNCJ9LCJhcmd1bWVudHMiOltdfSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE1In0sImFyZ3VtZW50cyI6W119LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTYifSwiYXJndW1lbnRzIjpbXX0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxNyJ9LCJhcmd1bWVudHMiOltdfV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6IkRpcmVjdGlvbiIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImRpciIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiTFIifSx7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiVEIifSx7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiQlQifV19fSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJDb21taXQiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJjb21taXQifSx7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJpZDoifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJpZCIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIwIn0sImFyZ3VtZW50cyI6W119fV19LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6Im1zZzoiLCJjYXJkaW5hbGl0eSI6Ij8ifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJtZXNzYWdlIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMjAifSwiYXJndW1lbnRzIjpbXX19XX0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoidGFnOiJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InRhZ3MiLCJvcGVyYXRvciI6Iis9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMjAifSwiYXJndW1lbnRzIjpbXX19XX0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoidHlwZToifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJ0eXBlIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJOT1JNQUwifSx7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiUkVWRVJTRSJ9LHsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJISUdITElHSFQifV19fV19XSwiY2FyZGluYWxpdHkiOiIqIn0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxIn0sImFyZ3VtZW50cyI6W119XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJuYW1lIjoiQnJhbmNoIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiYnJhbmNoIn0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoibmFtZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE5In0sImFyZ3VtZW50cyI6W119LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMjAifSwiYXJndW1lbnRzIjpbXX1dfX0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoib3JkZXI6In0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoib3JkZXIiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxOCJ9LCJhcmd1bWVudHMiOltdfX1dLCJjYXJkaW5hbGl0eSI6Ij8ifSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEifSwiYXJndW1lbnRzIjpbXX1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJNZXJnZSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6Im1lcmdlIn0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiYnJhbmNoIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTkifSwiYXJndW1lbnRzIjpbXX0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyMCJ9LCJhcmd1bWVudHMiOltdfV19fSx7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJpZDoifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJpZCIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIwIn0sImFyZ3VtZW50cyI6W119fV19LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6InRhZzoifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJ0YWdzIiwib3BlcmF0b3IiOiIrPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIwIn0sImFyZ3VtZW50cyI6W119fV19LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6InR5cGU6In0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoidHlwZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiTk9STUFMIn0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IlJFVkVSU0UifSx7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiSElHSExJR0hUIn1dfX1dfV0sImNhcmRpbmFsaXR5IjoiKiJ9LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMSJ9LCJhcmd1bWVudHMiOltdfV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6IkNoZWNrb3V0IiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiY2hlY2tvdXQifSx7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoic3dpdGNoIn1dfSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJicmFuY2giLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxOSJ9LCJhcmd1bWVudHMiOltdfSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIwIn0sImFyZ3VtZW50cyI6W119XX19LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMSJ9LCJhcmd1bWVudHMiOltdfV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6IkNoZXJyeVBpY2tpbmciLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJjaGVycnktcGljayJ9LHsiJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6ImlkOiJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImlkIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMjAifSwiYXJndW1lbnRzIjpbXX19XX0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoidGFnOiJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InRhZ3MiLCJvcGVyYXRvciI6Iis9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMjAifSwiYXJndW1lbnRzIjpbXX19XX0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoicGFyZW50OiJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InBhcmVudCIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIwIn0sImFyZ3VtZW50cyI6W119fV19XSwiY2FyZGluYWxpdHkiOiIqIn0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxIn0sImFyZ3VtZW50cyI6W119XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJJTlQiLCJ0eXBlIjp7IiR0eXBlIjoiUmV0dXJuVHlwZSIsIm5hbWUiOiJudW1iZXIifSwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bMC05XSsoPz1cXFxccykvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJJRCIsInR5cGUiOnsiJHR5cGUiOiJSZXR1cm5UeXBlIiwibmFtZSI6InN0cmluZyJ9LCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1xcXFx3KFstXFxcXC4vXFxcXHddKlstXFxcXHddKT8vIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJTVFJJTkciLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1xcIlteXFwiXSpcXCJ8J1teJ10qJy8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfV0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJpbXBvcnRzIjpbXSwidHlwZXMiOltdLCJ1c2VkR3JhbW1hcnMiOltdfWApKSwiR2l0R3JhcGhHcmFtbWFyIiksR0ZlPUx0KCgpPT5FY2U/PyhFY2U9SHUoYHsiJHR5cGUiOiJHcmFtbWFyIiwiaXNEZWNsYXJlZCI6dHJ1ZSwibmFtZSI6IlJhZGFyIiwiaW50ZXJmYWNlcyI6W3siJHR5cGUiOiJJbnRlcmZhY2UiLCJuYW1lIjoiQ29tbW9uIiwiYXR0cmlidXRlcyI6W3siJHR5cGUiOiJUeXBlQXR0cmlidXRlIiwibmFtZSI6ImFjY0Rlc2NyIiwiaXNPcHRpb25hbCI6dHJ1ZSwidHlwZSI6eyIkdHlwZSI6IlNpbXBsZVR5cGUiLCJwcmltaXRpdmVUeXBlIjoic3RyaW5nIn19LHsiJHR5cGUiOiJUeXBlQXR0cmlidXRlIiwibmFtZSI6ImFjY1RpdGxlIiwiaXNPcHRpb25hbCI6dHJ1ZSwidHlwZSI6eyIkdHlwZSI6IlNpbXBsZVR5cGUiLCJwcmltaXRpdmVUeXBlIjoic3RyaW5nIn19LHsiJHR5cGUiOiJUeXBlQXR0cmlidXRlIiwibmFtZSI6InRpdGxlIiwiaXNPcHRpb25hbCI6dHJ1ZSwidHlwZSI6eyIkdHlwZSI6IlNpbXBsZVR5cGUiLCJwcmltaXRpdmVUeXBlIjoic3RyaW5nIn19XSwic3VwZXJUeXBlcyI6W119LHsiJHR5cGUiOiJJbnRlcmZhY2UiLCJuYW1lIjoiRW50cnkiLCJhdHRyaWJ1dGVzIjpbeyIkdHlwZSI6IlR5cGVBdHRyaWJ1dGUiLCJuYW1lIjoiYXhpcyIsImlzT3B0aW9uYWwiOnRydWUsInR5cGUiOnsiJHR5cGUiOiJSZWZlcmVuY2VUeXBlIiwicmVmZXJlbmNlVHlwZSI6eyIkdHlwZSI6IlNpbXBsZVR5cGUiLCJ0eXBlUmVmIjp7IiRyZWYiOiIjL3J1bGVzQDEyIn19fX0seyIkdHlwZSI6IlR5cGVBdHRyaWJ1dGUiLCJuYW1lIjoidmFsdWUiLCJ0eXBlIjp7IiR0eXBlIjoiU2ltcGxlVHlwZSIsInByaW1pdGl2ZVR5cGUiOiJudW1iZXIifSwiaXNPcHRpb25hbCI6ZmFsc2V9XSwic3VwZXJUeXBlcyI6W119XSwicnVsZXMiOlt7IiR0eXBlIjoiUGFyc2VyUnVsZSIsImZyYWdtZW50Ijp0cnVlLCJuYW1lIjoiVGl0bGVBbmRBY2Nlc3NpYmlsaXRpZXMiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImFjY0Rlc2NyIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMyJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiYWNjVGl0bGUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A0In0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJ0aXRsZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDUifSwiYXJndW1lbnRzIjpbXX19XX0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxIn0sImFyZ3VtZW50cyI6W119XSwiY2FyZGluYWxpdHkiOiIrIn0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwiZnJhZ21lbnQiOnRydWUsIm5hbWUiOiJFT0wiLCJkYXRhVHlwZSI6InN0cmluZyIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMiJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IisifSx7IiR0eXBlIjoiRW5kT2ZGaWxlIn1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJORVdMSU5FIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9cXFxccj9cXFxcbi8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IkFDQ19ERVNDUiIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0qYWNjRGVzY3IoPzpbXFxcXHQgXSo6KFteXFxcXG5cXFxccl0qPyg/PSUlKXxbXlxcXFxuXFxcXHJdKil8XFxcXHMqeyhbXn1dKil9KS8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IkFDQ19USVRMRSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0qYWNjVGl0bGVbXFxcXHQgXSo6KD86W15cXFxcblxcXFxyXSo/KD89JSUpfFteXFxcXG5cXFxccl0qKS8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IlRJVExFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSp0aXRsZSg/OltcXFxcdCBdW15cXFxcblxcXFxyXSo/KD89JSUpfFtcXFxcdCBdW15cXFxcblxcXFxyXSp8KS8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwiaGlkZGVuIjp0cnVlLCJuYW1lIjoiV0hJVEVTUEFDRSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0rLyJ9LCJmcmFnbWVudCI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJoaWRkZW4iOnRydWUsIm5hbWUiOiJZQU1MIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii8tLS1bXFxcXHQgXSpcXFxccj9cXFxcbig/OltcXFxcU1xcXFxzXSo/XFxcXHI/XFxcXG4pPy0tLSg/OlxcXFxyP1xcXFxufCg/IVxcXFxTKSkvIn0sImZyYWdtZW50IjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6IkRJUkVDVElWRSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0qJSV7W1xcXFxTXFxcXHNdKj99JSUoPzpcXFxccj9cXFxcbnwoPyFcXFxcUykpLyJ9LCJmcmFnbWVudCI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJoaWRkZW4iOnRydWUsIm5hbWUiOiJTSU5HTEVfTElORV9DT01NRU5UIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSolJVteXFxcXG5cXFxccl0qLyJ9LCJmcmFnbWVudCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwiZW50cnkiOnRydWUsIm5hbWUiOiJSYWRhciIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyIn0sImFyZ3VtZW50cyI6W10sImNhcmRpbmFsaXR5IjoiKiJ9LHsiJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJyYWRhci1iZXRhIn0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6InJhZGFyLWJldGE6In0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoicmFkYXItYmV0YSJ9LHsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiI6In1dfV19LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMiJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IioifSx7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDAifSwiYXJndW1lbnRzIjpbXX0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiYXhpcyJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImF4ZXMiLCJvcGVyYXRvciI6Iis9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTIifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IiwifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJheGVzIiwib3BlcmF0b3IiOiIrPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEyIn0sImFyZ3VtZW50cyI6W119fV0sImNhcmRpbmFsaXR5IjoiKiJ9XX0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiY3VydmUifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJjdXJ2ZXMiLCJvcGVyYXRvciI6Iis9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTMifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IiwifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJjdXJ2ZXMiLCJvcGVyYXRvciI6Iis9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTMifSwiYXJndW1lbnRzIjpbXX19XSwiY2FyZGluYWxpdHkiOiIqIn1dfSx7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6Im9wdGlvbnMiLCJvcGVyYXRvciI6Iis9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTcifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IiwifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJvcHRpb25zIiwib3BlcmF0b3IiOiIrPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE3In0sImFyZ3VtZW50cyI6W119fV0sImNhcmRpbmFsaXR5IjoiKiJ9XX0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyIn0sImFyZ3VtZW50cyI6W119XSwiY2FyZGluYWxpdHkiOiIqIn1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJmcmFnbWVudCI6dHJ1ZSwibmFtZSI6IkxhYmVsIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiWyJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImxhYmVsIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMjIifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJdIn1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJuYW1lIjoiQXhpcyIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoibmFtZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIxIn0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDExIn0sImFyZ3VtZW50cyI6W10sImNhcmRpbmFsaXR5IjoiPyJ9XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJuYW1lIjoiQ3VydmUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6Im5hbWUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyMSJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxMSJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6Ij8ifSx7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoieyJ9LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTQifSwiYXJndW1lbnRzIjpbXX0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6In0ifV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwiZnJhZ21lbnQiOnRydWUsIm5hbWUiOiJFbnRyaWVzIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIifSwiYXJndW1lbnRzIjpbXSwiY2FyZGluYWxpdHkiOiIqIn0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiZW50cmllcyIsIm9wZXJhdG9yIjoiKz0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxNiJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiLCJ9LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMiJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IioifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJlbnRyaWVzIiwib3BlcmF0b3IiOiIrPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE2In0sImFyZ3VtZW50cyI6W119fV0sImNhcmRpbmFsaXR5IjoiKiJ9LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMiJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IioifV19LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyIn0sImFyZ3VtZW50cyI6W10sImNhcmRpbmFsaXR5IjoiKiJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImVudHJpZXMiLCJvcGVyYXRvciI6Iis9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTUifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IiwifSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIifSwiYXJndW1lbnRzIjpbXSwiY2FyZGluYWxpdHkiOiIqIn0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiZW50cmllcyIsIm9wZXJhdG9yIjoiKz0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxNSJ9LCJhcmd1bWVudHMiOltdfX1dLCJjYXJkaW5hbGl0eSI6IioifSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIifSwiYXJndW1lbnRzIjpbXSwiY2FyZGluYWxpdHkiOiIqIn1dfV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJEZXRhaWxlZEVudHJ5IiwicmV0dXJuVHlwZSI6eyIkcmVmIjoiIy9pbnRlcmZhY2VzQDEifSwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJheGlzIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJDcm9zc1JlZmVyZW5jZSIsInR5cGUiOnsiJHJlZiI6IiMvcnVsZXNAMTIifSwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMjEifSwiYXJndW1lbnRzIjpbXX0sImRlcHJlY2F0ZWRTeW50YXgiOmZhbHNlfX0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IjoiLCJjYXJkaW5hbGl0eSI6Ij8ifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJ2YWx1ZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE4In0sImFyZ3VtZW50cyI6W119fV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6Ik51bWJlckVudHJ5IiwicmV0dXJuVHlwZSI6eyIkcmVmIjoiIy9pbnRlcmZhY2VzQDEifSwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoidmFsdWUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxOCJ9LCJhcmd1bWVudHMiOltdfX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJuYW1lIjoiT3B0aW9uIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJuYW1lIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJzaG93TGVnZW5kIn19LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InZhbHVlIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTkifSwiYXJndW1lbnRzIjpbXX19XX0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJuYW1lIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJ0aWNrcyJ9fSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJ2YWx1ZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE4In0sImFyZ3VtZW50cyI6W119fV19LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoibmFtZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoibWF4In19LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InZhbHVlIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTgifSwiYXJndW1lbnRzIjpbXX19XX0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJuYW1lIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJtaW4ifX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoidmFsdWUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxOCJ9LCJhcmd1bWVudHMiOltdfX1dfSx7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6Im5hbWUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6ImdyYXRpY3VsZSJ9fSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJ2YWx1ZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIwIn0sImFyZ3VtZW50cyI6W119fV19XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJOVU1CRVIiLCJ0eXBlIjp7IiR0eXBlIjoiUmV0dXJuVHlwZSIsIm5hbWUiOiJudW1iZXIifSwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii8oMHxbMS05XVswLTldKikoXFxcXC5bMC05XSspPy8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IkJPT0xFQU4iLCJ0eXBlIjp7IiR0eXBlIjoiUmV0dXJuVHlwZSIsIm5hbWUiOiJib29sZWFuIn0sImRlZmluaXRpb24iOnsiJHR5cGUiOiJUZXJtaW5hbEFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkNoYXJhY3RlclJhbmdlIiwibGVmdCI6eyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6InRydWUifX0seyIkdHlwZSI6IkNoYXJhY3RlclJhbmdlIiwibGVmdCI6eyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6ImZhbHNlIn19XX0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJHUkFUSUNVTEUiLCJ0eXBlIjp7IiR0eXBlIjoiUmV0dXJuVHlwZSIsIm5hbWUiOiJzdHJpbmcifSwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlRlcm1pbmFsQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiQ2hhcmFjdGVyUmFuZ2UiLCJsZWZ0Ijp7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiY2lyY2xlIn19LHsiJHR5cGUiOiJDaGFyYWN0ZXJSYW5nZSIsImxlZnQiOnsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJwb2x5Z29uIn19XX0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJJRCIsInR5cGUiOnsiJHR5cGUiOiJSZXR1cm5UeXBlIiwibmFtZSI6InN0cmluZyJ9LCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1thLXpBLVpfXVthLXpBLVowLTlcXFxcLV9dKi8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IlNUUklORyIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvXFwiW15cXCJdKlxcInwnW14nXSonLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9XSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sImltcG9ydHMiOltdLCJ0eXBlcyI6W10sInVzZWRHcmFtbWFycyI6W119YCkpLCJSYWRhckdyYW1tYXIiKSxWRmU9e2xhbmd1YWdlSWQ6ImluZm8iLGZpbGVFeHRlbnNpb25zOlsiLm1tZCIsIi5tZXJtYWlkIl0sY2FzZUluc2Vuc2l0aXZlOiExLG1vZGU6InByb2R1Y3Rpb24ifSxVRmU9e2xhbmd1YWdlSWQ6InBhY2tldCIsZmlsZUV4dGVuc2lvbnM6WyIubW1kIiwiLm1lcm1haWQiXSxjYXNlSW5zZW5zaXRpdmU6ITEsbW9kZToicHJvZHVjdGlvbiJ9LEhGZT17bGFuZ3VhZ2VJZDoicGllIixmaWxlRXh0ZW5zaW9uczpbIi5tbWQiLCIubWVybWFpZCJdLGNhc2VJbnNlbnNpdGl2ZTohMSxtb2RlOiJwcm9kdWN0aW9uIn0sV0ZlPXtsYW5ndWFnZUlkOiJhcmNoaXRlY3R1cmUiLGZpbGVFeHRlbnNpb25zOlsiLm1tZCIsIi5tZXJtYWlkIl0sY2FzZUluc2Vuc2l0aXZlOiExLG1vZGU6InByb2R1Y3Rpb24ifSxxRmU9e2xhbmd1YWdlSWQ6ImdpdEdyYXBoIixmaWxlRXh0ZW5zaW9uczpbIi5tbWQiLCIubWVybWFpZCJdLGNhc2VJbnNlbnNpdGl2ZTohMSxtb2RlOiJwcm9kdWN0aW9uIn0sWUZlPXtsYW5ndWFnZUlkOiJyYWRhciIsZmlsZUV4dGVuc2lvbnM6WyIubW1kIiwiLm1lcm1haWQiXSxjYXNlSW5zZW5zaXRpdmU6ITEsbW9kZToicHJvZHVjdGlvbiJ9LGNvPXtBc3RSZWZsZWN0aW9uOkx0KCgpPT5uZXcgUGNlLCJBc3RSZWZsZWN0aW9uIil9LF9JPXtHcmFtbWFyOkx0KCgpPT5QRmUoKSwiR3JhbW1hciIpLExhbmd1YWdlTWV0YURhdGE6THQoKCk9PlZGZSwiTGFuZ3VhZ2VNZXRhRGF0YSIpLHBhcnNlcjp7fX0sREk9e0dyYW1tYXI6THQoKCk9PkJGZSgpLCJHcmFtbWFyIiksTGFuZ3VhZ2VNZXRhRGF0YTpMdCgoKT0+VUZlLCJMYW5ndWFnZU1ldGFEYXRhIikscGFyc2VyOnt9fSxMST17R3JhbW1hcjpMdCgoKT0+RkZlKCksIkdyYW1tYXIiKSxMYW5ndWFnZU1ldGFEYXRhOkx0KCgpPT5IRmUsIkxhbmd1YWdlTWV0YURhdGEiKSxwYXJzZXI6e319LFJJPXtHcmFtbWFyOkx0KCgpPT4kRmUoKSwiR3JhbW1hciIpLExhbmd1YWdlTWV0YURhdGE6THQoKCk9PldGZSwiTGFuZ3VhZ2VNZXRhRGF0YSIpLHBhcnNlcjp7fX0sTkk9e0dyYW1tYXI6THQoKCk9PnpGZSgpLCJHcmFtbWFyIiksTGFuZ3VhZ2VNZXRhRGF0YTpMdCgoKT0+cUZlLCJMYW5ndWFnZU1ldGFEYXRhIikscGFyc2VyOnt9fSxNST17R3JhbW1hcjpMdCgoKT0+R0ZlKCksIkdyYW1tYXIiKSxMYW5ndWFnZU1ldGFEYXRhOkx0KCgpPT5ZRmUsIkxhbmd1YWdlTWV0YURhdGEiKSxwYXJzZXI6e319LFhGZT0vYWNjRGVzY3IoPzpbXHQgXSo6KFteXG5ccl0qKXxccyp7KFtefV0qKX0pLyxqRmU9L2FjY1RpdGxlW1x0IF0qOihbXlxuXHJdKikvLEtGZT0vdGl0bGUoW1x0IF1bXlxuXHJdKnwpLyxRRmU9e0FDQ19ERVNDUjpYRmUsQUNDX1RJVExFOmpGZSxUSVRMRTpLRmV9LHcxPWNsYXNzIGV4dGVuZHMgeXB7c3RhdGlje28odGhpcywiQWJzdHJhY3RNZXJtYWlkVmFsdWVDb252ZXJ0ZXIiKX1zdGF0aWN7THQodGhpcywiQWJzdHJhY3RNZXJtYWlkVmFsdWVDb252ZXJ0ZXIiKX1ydW5Db252ZXJ0ZXIodCxlLHIpe2xldCBuPXRoaXMucnVuQ29tbW9uQ29udmVydGVyKHQsZSxyKTtyZXR1cm4gbj09PXZvaWQgMCYmKG49dGhpcy5ydW5DdXN0b21Db252ZXJ0ZXIodCxlLHIpKSxuPT09dm9pZCAwP3N1cGVyLnJ1bkNvbnZlcnRlcih0LGUscik6bn1ydW5Db21tb25Db252ZXJ0ZXIodCxlLHIpe2xldCBuPVFGZVt0Lm5hbWVdO2lmKG49PT12b2lkIDApcmV0dXJuO2xldCBpPW4uZXhlYyhlKTtpZihpIT09bnVsbCl7aWYoaVsxXSE9PXZvaWQgMClyZXR1cm4gaVsxXS50cmltKCkucmVwbGFjZSgvW1x0IF17Mix9L2dtLCIgIik7aWYoaVsyXSE9PXZvaWQgMClyZXR1cm4gaVsyXS5yZXBsYWNlKC9eXHMqL2dtLCIiKS5yZXBsYWNlKC9ccyskL2dtLCIiKS5yZXBsYWNlKC9bXHQgXXsyLH0vZ20sIiAiKS5yZXBsYWNlKC9bXG5ccl17Mix9L2dtLGAKYCl9fX0sV3U9Y2xhc3MgZXh0ZW5kcyB3MXtzdGF0aWN7byh0aGlzLCJDb21tb25WYWx1ZUNvbnZlcnRlciIpfXN0YXRpY3tMdCh0aGlzLCJDb21tb25WYWx1ZUNvbnZlcnRlciIpfXJ1bkN1c3RvbUNvbnZlcnRlcih0LGUscil7fX0sJHM9Y2xhc3MgZXh0ZW5kcyBVdXtzdGF0aWN7byh0aGlzLCJBYnN0cmFjdE1lcm1haWRUb2tlbkJ1aWxkZXIiKX1zdGF0aWN7THQodGhpcywiQWJzdHJhY3RNZXJtYWlkVG9rZW5CdWlsZGVyIil9Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLmtleXdvcmRzPW5ldyBTZXQodCl9YnVpbGRLZXl3b3JkVG9rZW5zKHQsZSxyKXtsZXQgbj1zdXBlci5idWlsZEtleXdvcmRUb2tlbnModCxlLHIpO3JldHVybiBuLmZvckVhY2goaT0+e3RoaXMua2V5d29yZHMuaGFzKGkubmFtZSkmJmkuUEFUVEVSTiE9PXZvaWQgMCYmKGkuUEFUVEVSTj1uZXcgUmVnRXhwKGkuUEFUVEVSTi50b1N0cmluZygpKyIoPzooPz0lJSl8KD8hXFxTKSkiKSl9KSxufX0sWkZlPWNsYXNzIGV4dGVuZHMgJHN7c3RhdGlje28odGhpcywiQ29tbW9uVG9rZW5CdWlsZGVyIil9c3RhdGlje0x0KHRoaXMsIkNvbW1vblRva2VuQnVpbGRlciIpfX19KTtmdW5jdGlvbiBYRSh0PXBzKXtsZXQgZT11aShkcyh0KSxjbykscj11aShmcyh7c2hhcmVkOmV9KSxOSSxZRSk7cmV0dXJuIGUuU2VydmljZVJlZ2lzdHJ5LnJlZ2lzdGVyKHIpLHtzaGFyZWQ6ZSxHaXRHcmFwaDpyfX12YXIgSkZlLFlFLElJPU4oKCk9PnsidXNlIHN0cmljdCI7enMoKTtYbygpO0pGZT1jbGFzcyBleHRlbmRzICRze3N0YXRpY3tvKHRoaXMsIkdpdEdyYXBoVG9rZW5CdWlsZGVyIil9c3RhdGlje0x0KHRoaXMsIkdpdEdyYXBoVG9rZW5CdWlsZGVyIil9Y29uc3RydWN0b3IoKXtzdXBlcihbImdpdEdyYXBoIl0pfX0sWUU9e3BhcnNlcjp7VG9rZW5CdWlsZGVyOkx0KCgpPT5uZXcgSkZlLCJUb2tlbkJ1aWxkZXIiKSxWYWx1ZUNvbnZlcnRlcjpMdCgoKT0+bmV3IFd1LCJWYWx1ZUNvbnZlcnRlciIpfX07byhYRSwiY3JlYXRlR2l0R3JhcGhTZXJ2aWNlcyIpO0x0KFhFLCJjcmVhdGVHaXRHcmFwaFNlcnZpY2VzIil9KTtmdW5jdGlvbiBLRSh0PXBzKXtsZXQgZT11aShkcyh0KSxjbykscj11aShmcyh7c2hhcmVkOmV9KSxfSSxqRSk7cmV0dXJuIGUuU2VydmljZVJlZ2lzdHJ5LnJlZ2lzdGVyKHIpLHtzaGFyZWQ6ZSxJbmZvOnJ9fXZhciBlJGUsakUsT0k9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt6cygpO1hvKCk7ZSRlPWNsYXNzIGV4dGVuZHMgJHN7c3RhdGlje28odGhpcywiSW5mb1Rva2VuQnVpbGRlciIpfXN0YXRpY3tMdCh0aGlzLCJJbmZvVG9rZW5CdWlsZGVyIil9Y29uc3RydWN0b3IoKXtzdXBlcihbImluZm8iLCJzaG93SW5mbyJdKX19LGpFPXtwYXJzZXI6e1Rva2VuQnVpbGRlcjpMdCgoKT0+bmV3IGUkZSwiVG9rZW5CdWlsZGVyIiksVmFsdWVDb252ZXJ0ZXI6THQoKCk9Pm5ldyBXdSwiVmFsdWVDb252ZXJ0ZXIiKX19O28oS0UsImNyZWF0ZUluZm9TZXJ2aWNlcyIpO0x0KEtFLCJjcmVhdGVJbmZvU2VydmljZXMiKX0pO2Z1bmN0aW9uIFpFKHQ9cHMpe2xldCBlPXVpKGRzKHQpLGNvKSxyPXVpKGZzKHtzaGFyZWQ6ZX0pLERJLFFFKTtyZXR1cm4gZS5TZXJ2aWNlUmVnaXN0cnkucmVnaXN0ZXIocikse3NoYXJlZDplLFBhY2tldDpyfX12YXIgdCRlLFFFLFBJPU4oKCk9PnsidXNlIHN0cmljdCI7enMoKTtYbygpO3QkZT1jbGFzcyBleHRlbmRzICRze3N0YXRpY3tvKHRoaXMsIlBhY2tldFRva2VuQnVpbGRlciIpfXN0YXRpY3tMdCh0aGlzLCJQYWNrZXRUb2tlbkJ1aWxkZXIiKX1jb25zdHJ1Y3Rvcigpe3N1cGVyKFsicGFja2V0LWJldGEiXSl9fSxRRT17cGFyc2VyOntUb2tlbkJ1aWxkZXI6THQoKCk9Pm5ldyB0JGUsIlRva2VuQnVpbGRlciIpLFZhbHVlQ29udmVydGVyOkx0KCgpPT5uZXcgV3UsIlZhbHVlQ29udmVydGVyIil9fTtvKFpFLCJjcmVhdGVQYWNrZXRTZXJ2aWNlcyIpO0x0KFpFLCJjcmVhdGVQYWNrZXRTZXJ2aWNlcyIpfSk7ZnVuY3Rpb24gZTYodD1wcyl7bGV0IGU9dWkoZHModCksY28pLHI9dWkoZnMoe3NoYXJlZDplfSksTEksSkUpO3JldHVybiBlLlNlcnZpY2VSZWdpc3RyeS5yZWdpc3RlcihyKSx7c2hhcmVkOmUsUGllOnJ9fXZhciByJGUsbiRlLEpFLEJJPU4oKCk9PnsidXNlIHN0cmljdCI7enMoKTtYbygpO3IkZT1jbGFzcyBleHRlbmRzICRze3N0YXRpY3tvKHRoaXMsIlBpZVRva2VuQnVpbGRlciIpfXN0YXRpY3tMdCh0aGlzLCJQaWVUb2tlbkJ1aWxkZXIiKX1jb25zdHJ1Y3Rvcigpe3N1cGVyKFsicGllIiwic2hvd0RhdGEiXSl9fSxuJGU9Y2xhc3MgZXh0ZW5kcyB3MXtzdGF0aWN7byh0aGlzLCJQaWVWYWx1ZUNvbnZlcnRlciIpfXN0YXRpY3tMdCh0aGlzLCJQaWVWYWx1ZUNvbnZlcnRlciIpfXJ1bkN1c3RvbUNvbnZlcnRlcih0LGUscil7aWYodC5uYW1lPT09IlBJRV9TRUNUSU9OX0xBQkVMIilyZXR1cm4gZS5yZXBsYWNlKC8iL2csIiIpLnRyaW0oKX19LEpFPXtwYXJzZXI6e1Rva2VuQnVpbGRlcjpMdCgoKT0+bmV3IHIkZSwiVG9rZW5CdWlsZGVyIiksVmFsdWVDb252ZXJ0ZXI6THQoKCk9Pm5ldyBuJGUsIlZhbHVlQ29udmVydGVyIil9fTtvKGU2LCJjcmVhdGVQaWVTZXJ2aWNlcyIpO0x0KGU2LCJjcmVhdGVQaWVTZXJ2aWNlcyIpfSk7ZnVuY3Rpb24gcjYodD1wcyl7bGV0IGU9dWkoZHModCksY28pLHI9dWkoZnMoe3NoYXJlZDplfSksUkksdDYpO3JldHVybiBlLlNlcnZpY2VSZWdpc3RyeS5yZWdpc3RlcihyKSx7c2hhcmVkOmUsQXJjaGl0ZWN0dXJlOnJ9fXZhciBpJGUsYSRlLHQ2LEZJPU4oKCk9PnsidXNlIHN0cmljdCI7enMoKTtYbygpO2kkZT1jbGFzcyBleHRlbmRzICRze3N0YXRpY3tvKHRoaXMsIkFyY2hpdGVjdHVyZVRva2VuQnVpbGRlciIpfXN0YXRpY3tMdCh0aGlzLCJBcmNoaXRlY3R1cmVUb2tlbkJ1aWxkZXIiKX1jb25zdHJ1Y3Rvcigpe3N1cGVyKFsiYXJjaGl0ZWN0dXJlIl0pfX0sYSRlPWNsYXNzIGV4dGVuZHMgdzF7c3RhdGlje28odGhpcywiQXJjaGl0ZWN0dXJlVmFsdWVDb252ZXJ0ZXIiKX1zdGF0aWN7THQodGhpcywiQXJjaGl0ZWN0dXJlVmFsdWVDb252ZXJ0ZXIiKX1ydW5DdXN0b21Db252ZXJ0ZXIodCxlLHIpe2lmKHQubmFtZT09PSJBUkNIX0lDT04iKXJldHVybiBlLnJlcGxhY2UoL1soKV0vZywiIikudHJpbSgpO2lmKHQubmFtZT09PSJBUkNIX1RFWFRfSUNPTiIpcmV0dXJuIGUucmVwbGFjZSgvWyIoKV0vZywiIik7aWYodC5uYW1lPT09IkFSQ0hfVElUTEUiKXJldHVybiBlLnJlcGxhY2UoL1tbXF1dL2csIiIpLnRyaW0oKX19LHQ2PXtwYXJzZXI6e1Rva2VuQnVpbGRlcjpMdCgoKT0+bmV3IGkkZSwiVG9rZW5CdWlsZGVyIiksVmFsdWVDb252ZXJ0ZXI6THQoKCk9Pm5ldyBhJGUsIlZhbHVlQ29udmVydGVyIil9fTtvKHI2LCJjcmVhdGVBcmNoaXRlY3R1cmVTZXJ2aWNlcyIpO0x0KHI2LCJjcmVhdGVBcmNoaXRlY3R1cmVTZXJ2aWNlcyIpfSk7ZnVuY3Rpb24gaTYodD1wcyl7bGV0IGU9dWkoZHModCksY28pLHI9dWkoZnMoe3NoYXJlZDplfSksTUksbjYpO3JldHVybiBlLlNlcnZpY2VSZWdpc3RyeS5yZWdpc3RlcihyKSx7c2hhcmVkOmUsUmFkYXI6cn19dmFyIHMkZSxuNiwkST1OKCgpPT57InVzZSBzdHJpY3QiO3pzKCk7WG8oKTtzJGU9Y2xhc3MgZXh0ZW5kcyAkc3tzdGF0aWN7byh0aGlzLCJSYWRhclRva2VuQnVpbGRlciIpfXN0YXRpY3tMdCh0aGlzLCJSYWRhclRva2VuQnVpbGRlciIpfWNvbnN0cnVjdG9yKCl7c3VwZXIoWyJyYWRhci1iZXRhIl0pfX0sbjY9e3BhcnNlcjp7VG9rZW5CdWlsZGVyOkx0KCgpPT5uZXcgcyRlLCJUb2tlbkJ1aWxkZXIiKSxWYWx1ZUNvbnZlcnRlcjpMdCgoKT0+bmV3IFd1LCJWYWx1ZUNvbnZlcnRlciIpfX07byhpNiwiY3JlYXRlUmFkYXJTZXJ2aWNlcyIpO0x0KGk2LCJjcmVhdGVSYWRhclNlcnZpY2VzIil9KTt2YXIgQmNlPXt9O2hyKEJjZSx7SW5mb01vZHVsZTooKT0+akUsY3JlYXRlSW5mb1NlcnZpY2VzOigpPT5LRX0pO3ZhciBGY2U9TigoKT0+eyJ1c2Ugc3RyaWN0IjtPSSgpO3pzKCl9KTt2YXIgJGNlPXt9O2hyKCRjZSx7UGFja2V0TW9kdWxlOigpPT5RRSxjcmVhdGVQYWNrZXRTZXJ2aWNlczooKT0+WkV9KTt2YXIgemNlPU4oKCk9PnsidXNlIHN0cmljdCI7UEkoKTt6cygpfSk7dmFyIEdjZT17fTtocihHY2Use1BpZU1vZHVsZTooKT0+SkUsY3JlYXRlUGllU2VydmljZXM6KCk9PmU2fSk7dmFyIFZjZT1OKCgpPT57InVzZSBzdHJpY3QiO0JJKCk7enMoKX0pO3ZhciBVY2U9e307aHIoVWNlLHtBcmNoaXRlY3R1cmVNb2R1bGU6KCk9PnQ2LGNyZWF0ZUFyY2hpdGVjdHVyZVNlcnZpY2VzOigpPT5yNn0pO3ZhciBIY2U9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGSSgpO3pzKCl9KTt2YXIgV2NlPXt9O2hyKFdjZSx7R2l0R3JhcGhNb2R1bGU6KCk9PllFLGNyZWF0ZUdpdEdyYXBoU2VydmljZXM6KCk9PlhFfSk7dmFyIHFjZT1OKCgpPT57InVzZSBzdHJpY3QiO0lJKCk7enMoKX0pO3ZhciBZY2U9e307aHIoWWNlLHtSYWRhck1vZHVsZTooKT0+bjYsY3JlYXRlUmFkYXJTZXJ2aWNlczooKT0+aTZ9KTt2YXIgWGNlPU4oKCk9PnsidXNlIHN0cmljdCI7JEkoKTt6cygpfSk7YXN5bmMgZnVuY3Rpb24gdW8odCxlKXtsZXQgcj1vJGVbdF07aWYoIXIpdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGRpYWdyYW0gdHlwZTogJHt0fWApO2RmW3RdfHxhd2FpdCByKCk7bGV0IGk9ZGZbdF0ucGFyc2UoZSk7aWYoaS5sZXhlckVycm9ycy5sZW5ndGg+MHx8aS5wYXJzZXJFcnJvcnMubGVuZ3RoPjApdGhyb3cgbmV3IGwkZShpKTtyZXR1cm4gaS52YWx1ZX12YXIgZGYsbyRlLGwkZSxrcD1OKCgpPT57InVzZSBzdHJpY3QiO0lJKCk7T0koKTtQSSgpO0JJKCk7RkkoKTskSSgpO3pzKCk7ZGY9e30sbyRlPXtpbmZvOkx0KGFzeW5jKCk9PntsZXR7Y3JlYXRlSW5mb1NlcnZpY2VzOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihGY2UoKSxCY2UpKSxlPXQoKS5JbmZvLnBhcnNlci5MYW5naXVtUGFyc2VyO2RmLmluZm89ZX0sImluZm8iKSxwYWNrZXQ6THQoYXN5bmMoKT0+e2xldHtjcmVhdGVQYWNrZXRTZXJ2aWNlczp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oemNlKCksJGNlKSksZT10KCkuUGFja2V0LnBhcnNlci5MYW5naXVtUGFyc2VyO2RmLnBhY2tldD1lfSwicGFja2V0IikscGllOkx0KGFzeW5jKCk9PntsZXR7Y3JlYXRlUGllU2VydmljZXM6dH09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KFZjZSgpLEdjZSkpLGU9dCgpLlBpZS5wYXJzZXIuTGFuZ2l1bVBhcnNlcjtkZi5waWU9ZX0sInBpZSIpLGFyY2hpdGVjdHVyZTpMdChhc3luYygpPT57bGV0e2NyZWF0ZUFyY2hpdGVjdHVyZVNlcnZpY2VzOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihIY2UoKSxVY2UpKSxlPXQoKS5BcmNoaXRlY3R1cmUucGFyc2VyLkxhbmdpdW1QYXJzZXI7ZGYuYXJjaGl0ZWN0dXJlPWV9LCJhcmNoaXRlY3R1cmUiKSxnaXRHcmFwaDpMdChhc3luYygpPT57bGV0e2NyZWF0ZUdpdEdyYXBoU2VydmljZXM6dH09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KHFjZSgpLFdjZSkpLGU9dCgpLkdpdEdyYXBoLnBhcnNlci5MYW5naXVtUGFyc2VyO2RmLmdpdEdyYXBoPWV9LCJnaXRHcmFwaCIpLHJhZGFyOkx0KGFzeW5jKCk9PntsZXR7Y3JlYXRlUmFkYXJTZXJ2aWNlczp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oWGNlKCksWWNlKSksZT10KCkuUmFkYXIucGFyc2VyLkxhbmdpdW1QYXJzZXI7ZGYucmFkYXI9ZX0sInJhZGFyIil9O28odW8sInBhcnNlIik7THQodW8sInBhcnNlIik7bCRlPWNsYXNzIGV4dGVuZHMgRXJyb3J7c3RhdGlje28odGhpcywiTWVybWFpZFBhcnNlRXJyb3IiKX1jb25zdHJ1Y3Rvcih0KXtsZXQgZT10LmxleGVyRXJyb3JzLm1hcChuPT5uLm1lc3NhZ2UpLmpvaW4oYApgKSxyPXQucGFyc2VyRXJyb3JzLm1hcChuPT5uLm1lc3NhZ2UpLmpvaW4oYApgKTtzdXBlcihgUGFyc2luZyBmYWlsZWQ6ICR7ZX0gJHtyfWApLHRoaXMucmVzdWx0PXR9c3RhdGlje0x0KHRoaXMsIk1lcm1haWRQYXJzZUVycm9yIil9fX0pO2Z1bmN0aW9uICRjKHQsZSl7dC5hY2NEZXNjciYmZS5zZXRBY2NEZXNjcmlwdGlvbj8uKHQuYWNjRGVzY3IpLHQuYWNjVGl0bGUmJmUuc2V0QWNjVGl0bGU/Lih0LmFjY1RpdGxlKSx0LnRpdGxlJiZlLnNldERpYWdyYW1UaXRsZT8uKHQudGl0bGUpfXZhciBUMT1OKCgpPT57InVzZSBzdHJpY3QiO28oJGMsInBvcHVsYXRlQ29tbW9uRGIiKX0pO3ZhciBLcixhNj1OKCgpPT57InVzZSBzdHJpY3QiO0tyPXtOT1JNQUw6MCxSRVZFUlNFOjEsSElHSExJR0hUOjIsTUVSR0U6MyxDSEVSUllfUElDSzo0fX0pO3ZhciBwZixzNj1OKCgpPT57InVzZSBzdHJpY3QiO3BmPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuaW5pdD1lO3RoaXMucmVjb3Jkcz10aGlzLmluaXQoKX1zdGF0aWN7byh0aGlzLCJJbXBlcmF0aXZlU3RhdGUiKX1yZXNldCgpe3RoaXMucmVjb3Jkcz10aGlzLmluaXQoKX19fSk7ZnVuY3Rpb24gekkoKXtyZXR1cm4gajkoe2xlbmd0aDo3fSl9ZnVuY3Rpb24gdSRlKHQsZSl7bGV0IHI9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gdC5yZWR1Y2UoKG4saSk9PntsZXQgYT1lKGkpO3JldHVybiByW2FdfHwoclthXT0hMCxuLnB1c2goaSkpLG59LFtdKX1mdW5jdGlvbiBqY2UodCxlLHIpe2xldCBuPXQuaW5kZXhPZihlKTtuPT09LTE/dC5wdXNoKHIpOnQuc3BsaWNlKG4sMSxyKX1mdW5jdGlvbiBRY2UodCl7bGV0IGU9dC5yZWR1Y2UoKGksYSk9Pmkuc2VxPmEuc2VxP2k6YSx0WzBdKSxyPSIiO3QuZm9yRWFjaChmdW5jdGlvbihpKXtpPT09ZT9yKz0iCSoiOnIrPSIJfCJ9KTtsZXQgbj1bcixlLmlkLGUuc2VxXTtmb3IobGV0IGkgaW4gX3QucmVjb3Jkcy5icmFuY2hlcylfdC5yZWNvcmRzLmJyYW5jaGVzLmdldChpKT09PWUuaWQmJm4ucHVzaChpKTtpZihZLmRlYnVnKG4uam9pbigiICIpKSxlLnBhcmVudHMmJmUucGFyZW50cy5sZW5ndGg9PTImJmUucGFyZW50c1swXSYmZS5wYXJlbnRzWzFdKXtsZXQgaT1fdC5yZWNvcmRzLmNvbW1pdHMuZ2V0KGUucGFyZW50c1swXSk7amNlKHQsZSxpKSxlLnBhcmVudHNbMV0mJnQucHVzaChfdC5yZWNvcmRzLmNvbW1pdHMuZ2V0KGUucGFyZW50c1sxXSkpfWVsc2V7aWYoZS5wYXJlbnRzLmxlbmd0aD09MClyZXR1cm47aWYoZS5wYXJlbnRzWzBdKXtsZXQgaT1fdC5yZWNvcmRzLmNvbW1pdHMuZ2V0KGUucGFyZW50c1swXSk7amNlKHQsZSxpKX19dD11JGUodCxpPT5pLmlkKSxRY2UodCl9dmFyIGMkZSxFcCxfdCxoJGUsZiRlLGQkZSxwJGUsbSRlLGckZSx5JGUsS2NlLHYkZSx4JGUsYiRlLHckZSxUJGUsWmNlLGskZSxFJGUsUyRlLG82LEdJPU4oKCk9PnsidXNlIHN0cmljdCI7dnQoKTtpcigpO2ppKCk7Z3IoKTttaSgpO2E2KCk7czYoKTtZYSgpO2MkZT1vci5naXRHcmFwaCxFcD1vKCgpPT5GaSh7Li4uYyRlLC4uLmNyKCkuZ2l0R3JhcGh9KSwiZ2V0Q29uZmlnIiksX3Q9bmV3IHBmKCgpPT57bGV0IHQ9RXAoKSxlPXQubWFpbkJyYW5jaE5hbWUscj10Lm1haW5CcmFuY2hPcmRlcjtyZXR1cm57bWFpbkJyYW5jaE5hbWU6ZSxjb21taXRzOm5ldyBNYXAsaGVhZDpudWxsLGJyYW5jaENvbmZpZzpuZXcgTWFwKFtbZSx7bmFtZTplLG9yZGVyOnJ9XV0pLGJyYW5jaGVzOm5ldyBNYXAoW1tlLG51bGxdXSksY3VyckJyYW5jaDplLGRpcmVjdGlvbjoiTFIiLHNlcTowLG9wdGlvbnM6e319fSk7byh6SSwiZ2V0SUQiKTtvKHUkZSwidW5pcUJ5Iik7aCRlPW8oZnVuY3Rpb24odCl7X3QucmVjb3Jkcy5kaXJlY3Rpb249dH0sInNldERpcmVjdGlvbiIpLGYkZT1vKGZ1bmN0aW9uKHQpe1kuZGVidWcoIm9wdGlvbnMgc3RyIix0KSx0PXQ/LnRyaW0oKSx0PXR8fCJ7fSI7dHJ5e190LnJlY29yZHMub3B0aW9ucz1KU09OLnBhcnNlKHQpfWNhdGNoKGUpe1kuZXJyb3IoImVycm9yIHdoaWxlIHBhcnNpbmcgZ2l0R3JhcGggb3B0aW9ucyIsZS5tZXNzYWdlKX19LCJzZXRPcHRpb25zIiksZCRlPW8oZnVuY3Rpb24oKXtyZXR1cm4gX3QucmVjb3Jkcy5vcHRpb25zfSwiZ2V0T3B0aW9ucyIpLHAkZT1vKGZ1bmN0aW9uKHQpe2xldCBlPXQubXNnLHI9dC5pZCxuPXQudHlwZSxpPXQudGFncztZLmluZm8oImNvbW1pdCIsZSxyLG4saSksWS5kZWJ1ZygiRW50ZXJpbmcgY29tbWl0OiIsZSxyLG4saSk7bGV0IGE9RXAoKTtyPVplLnNhbml0aXplVGV4dChyLGEpLGU9WmUuc2FuaXRpemVUZXh0KGUsYSksaT1pPy5tYXAobD0+WmUuc2FuaXRpemVUZXh0KGwsYSkpO2xldCBzPXtpZDpyfHxfdC5yZWNvcmRzLnNlcSsiLSIrekkoKSxtZXNzYWdlOmUsc2VxOl90LnJlY29yZHMuc2VxKyssdHlwZTpuPz9Lci5OT1JNQUwsdGFnczppPz9bXSxwYXJlbnRzOl90LnJlY29yZHMuaGVhZD09bnVsbD9bXTpbX3QucmVjb3Jkcy5oZWFkLmlkXSxicmFuY2g6X3QucmVjb3Jkcy5jdXJyQnJhbmNofTtfdC5yZWNvcmRzLmhlYWQ9cyxZLmluZm8oIm1haW4gYnJhbmNoIixhLm1haW5CcmFuY2hOYW1lKSxfdC5yZWNvcmRzLmNvbW1pdHMuc2V0KHMuaWQscyksX3QucmVjb3Jkcy5icmFuY2hlcy5zZXQoX3QucmVjb3Jkcy5jdXJyQnJhbmNoLHMuaWQpLFkuZGVidWcoImluIHB1c2hDb21taXQgIitzLmlkKX0sImNvbW1pdCIpLG0kZT1vKGZ1bmN0aW9uKHQpe2xldCBlPXQubmFtZSxyPXQub3JkZXI7aWYoZT1aZS5zYW5pdGl6ZVRleHQoZSxFcCgpKSxfdC5yZWNvcmRzLmJyYW5jaGVzLmhhcyhlKSl0aHJvdyBuZXcgRXJyb3IoYFRyeWluZyB0byBjcmVhdGUgYW4gZXhpc3RpbmcgYnJhbmNoLiAoSGVscDogRWl0aGVyIHVzZSBhIG5ldyBuYW1lIGlmIHlvdSB3YW50IGNyZWF0ZSBhIG5ldyBicmFuY2ggb3IgdHJ5IHVzaW5nICJjaGVja291dCAke2V9IilgKTtfdC5yZWNvcmRzLmJyYW5jaGVzLnNldChlLF90LnJlY29yZHMuaGVhZCE9bnVsbD9fdC5yZWNvcmRzLmhlYWQuaWQ6bnVsbCksX3QucmVjb3Jkcy5icmFuY2hDb25maWcuc2V0KGUse25hbWU6ZSxvcmRlcjpyfSksS2NlKGUpLFkuZGVidWcoImluIGNyZWF0ZUJyYW5jaCIpfSwiYnJhbmNoIiksZyRlPW8odD0+e2xldCBlPXQuYnJhbmNoLHI9dC5pZCxuPXQudHlwZSxpPXQudGFncyxhPUVwKCk7ZT1aZS5zYW5pdGl6ZVRleHQoZSxhKSxyJiYocj1aZS5zYW5pdGl6ZVRleHQocixhKSk7bGV0IHM9X3QucmVjb3Jkcy5icmFuY2hlcy5nZXQoX3QucmVjb3Jkcy5jdXJyQnJhbmNoKSxsPV90LnJlY29yZHMuYnJhbmNoZXMuZ2V0KGUpLHU9cz9fdC5yZWNvcmRzLmNvbW1pdHMuZ2V0KHMpOnZvaWQgMCxoPWw/X3QucmVjb3Jkcy5jb21taXRzLmdldChsKTp2b2lkIDA7aWYodSYmaCYmdS5icmFuY2g9PT1lKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IG1lcmdlIGJyYW5jaCAnJHtlfScgaW50byBpdHNlbGYuYCk7aWYoX3QucmVjb3Jkcy5jdXJyQnJhbmNoPT09ZSl7bGV0IHA9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQ2Fubm90IG1lcmdlIGEgYnJhbmNoIHRvIGl0c2VsZicpO3Rocm93IHAuaGFzaD17dGV4dDpgbWVyZ2UgJHtlfWAsdG9rZW46YG1lcmdlICR7ZX1gLGV4cGVjdGVkOlsiYnJhbmNoIGFiYyJdfSxwfWlmKHU9PT12b2lkIDB8fCF1KXtsZXQgcD1uZXcgRXJyb3IoYEluY29ycmVjdCB1c2FnZSBvZiAibWVyZ2UiLiBDdXJyZW50IGJyYW5jaCAoJHtfdC5yZWNvcmRzLmN1cnJCcmFuY2h9KWhhcyBubyBjb21taXRzYCk7dGhyb3cgcC5oYXNoPXt0ZXh0OmBtZXJnZSAke2V9YCx0b2tlbjpgbWVyZ2UgJHtlfWAsZXhwZWN0ZWQ6WyJjb21taXQiXX0scH1pZighX3QucmVjb3Jkcy5icmFuY2hlcy5oYXMoZSkpe2xldCBwPW5ldyBFcnJvcignSW5jb3JyZWN0IHVzYWdlIG9mICJtZXJnZSIuIEJyYW5jaCB0byBiZSBtZXJnZWQgKCcrZSsiKSBkb2VzIG5vdCBleGlzdCIpO3Rocm93IHAuaGFzaD17dGV4dDpgbWVyZ2UgJHtlfWAsdG9rZW46YG1lcmdlICR7ZX1gLGV4cGVjdGVkOltgYnJhbmNoICR7ZX1gXX0scH1pZihoPT09dm9pZCAwfHwhaCl7bGV0IHA9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQnJhbmNoIHRvIGJlIG1lcmdlZCAoJytlKyIpIGhhcyBubyBjb21taXRzIik7dGhyb3cgcC5oYXNoPXt0ZXh0OmBtZXJnZSAke2V9YCx0b2tlbjpgbWVyZ2UgJHtlfWAsZXhwZWN0ZWQ6WyciY29tbWl0IiddfSxwfWlmKHU9PT1oKXtsZXQgcD1uZXcgRXJyb3IoJ0luY29ycmVjdCB1c2FnZSBvZiAibWVyZ2UiLiBCb3RoIGJyYW5jaGVzIGhhdmUgc2FtZSBoZWFkJyk7dGhyb3cgcC5oYXNoPXt0ZXh0OmBtZXJnZSAke2V9YCx0b2tlbjpgbWVyZ2UgJHtlfWAsZXhwZWN0ZWQ6WyJicmFuY2ggYWJjIl19LHB9aWYociYmX3QucmVjb3Jkcy5jb21taXRzLmhhcyhyKSl7bGV0IHA9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQ29tbWl0IHdpdGggaWQ6JytyKyIgYWxyZWFkeSBleGlzdHMsIHVzZSBkaWZmZXJlbnQgY3VzdG9tIElkIik7dGhyb3cgcC5oYXNoPXt0ZXh0OmBtZXJnZSAke2V9ICR7cn0gJHtufSAke2k/LmpvaW4oIiAiKX1gLHRva2VuOmBtZXJnZSAke2V9ICR7cn0gJHtufSAke2k/LmpvaW4oIiAiKX1gLGV4cGVjdGVkOltgbWVyZ2UgJHtlfSAke3J9X1VOSVFVRSAke259ICR7aT8uam9pbigiICIpfWBdfSxwfWxldCBmPWx8fCIiLGQ9e2lkOnJ8fGAke190LnJlY29yZHMuc2VxfS0ke3pJKCl9YCxtZXNzYWdlOmBtZXJnZWQgYnJhbmNoICR7ZX0gaW50byAke190LnJlY29yZHMuY3VyckJyYW5jaH1gLHNlcTpfdC5yZWNvcmRzLnNlcSsrLHBhcmVudHM6X3QucmVjb3Jkcy5oZWFkPT1udWxsP1tdOltfdC5yZWNvcmRzLmhlYWQuaWQsZl0sYnJhbmNoOl90LnJlY29yZHMuY3VyckJyYW5jaCx0eXBlOktyLk1FUkdFLGN1c3RvbVR5cGU6bixjdXN0b21JZDohIXIsdGFnczppPz9bXX07X3QucmVjb3Jkcy5oZWFkPWQsX3QucmVjb3Jkcy5jb21taXRzLnNldChkLmlkLGQpLF90LnJlY29yZHMuYnJhbmNoZXMuc2V0KF90LnJlY29yZHMuY3VyckJyYW5jaCxkLmlkKSxZLmRlYnVnKF90LnJlY29yZHMuYnJhbmNoZXMpLFkuZGVidWcoImluIG1lcmdlQnJhbmNoIil9LCJtZXJnZSIpLHkkZT1vKGZ1bmN0aW9uKHQpe2xldCBlPXQuaWQscj10LnRhcmdldElkLG49dC50YWdzLGk9dC5wYXJlbnQ7WS5kZWJ1ZygiRW50ZXJpbmcgY2hlcnJ5UGljazoiLGUscixuKTtsZXQgYT1FcCgpO2lmKGU9WmUuc2FuaXRpemVUZXh0KGUsYSkscj1aZS5zYW5pdGl6ZVRleHQocixhKSxuPW4/Lm1hcCh1PT5aZS5zYW5pdGl6ZVRleHQodSxhKSksaT1aZS5zYW5pdGl6ZVRleHQoaSxhKSwhZXx8IV90LnJlY29yZHMuY29tbWl0cy5oYXMoZSkpe2xldCB1PW5ldyBFcnJvcignSW5jb3JyZWN0IHVzYWdlIG9mICJjaGVycnlQaWNrIi4gU291cmNlIGNvbW1pdCBpZCBzaG91bGQgZXhpc3QgYW5kIHByb3ZpZGVkJyk7dGhyb3cgdS5oYXNoPXt0ZXh0OmBjaGVycnlQaWNrICR7ZX0gJHtyfWAsdG9rZW46YGNoZXJyeVBpY2sgJHtlfSAke3J9YCxleHBlY3RlZDpbImNoZXJyeS1waWNrIGFiYyJdfSx1fWxldCBzPV90LnJlY29yZHMuY29tbWl0cy5nZXQoZSk7aWYocz09PXZvaWQgMHx8IXMpdGhyb3cgbmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgImNoZXJyeVBpY2siLiBTb3VyY2UgY29tbWl0IGlkIHNob3VsZCBleGlzdCBhbmQgcHJvdmlkZWQnKTtpZihpJiYhKEFycmF5LmlzQXJyYXkocy5wYXJlbnRzKSYmcy5wYXJlbnRzLmluY2x1ZGVzKGkpKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgb3BlcmF0aW9uOiBUaGUgc3BlY2lmaWVkIHBhcmVudCBjb21taXQgaXMgbm90IGFuIGltbWVkaWF0ZSBwYXJlbnQgb2YgdGhlIGNoZXJyeS1waWNrZWQgY29tbWl0LiIpO2xldCBsPXMuYnJhbmNoO2lmKHMudHlwZT09PUtyLk1FUkdFJiYhaSl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCB1c2FnZSBvZiBjaGVycnktcGljazogSWYgdGhlIHNvdXJjZSBjb21taXQgaXMgYSBtZXJnZSBjb21taXQsIGFuIGltbWVkaWF0ZSBwYXJlbnQgY29tbWl0IG11c3QgYmUgc3BlY2lmaWVkLiIpO2lmKCFyfHwhX3QucmVjb3Jkcy5jb21taXRzLmhhcyhyKSl7aWYobD09PV90LnJlY29yZHMuY3VyckJyYW5jaCl7bGV0IGQ9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgImNoZXJyeVBpY2siLiBTb3VyY2UgY29tbWl0IGlzIGFscmVhZHkgb24gY3VycmVudCBicmFuY2gnKTt0aHJvdyBkLmhhc2g9e3RleHQ6YGNoZXJyeVBpY2sgJHtlfSAke3J9YCx0b2tlbjpgY2hlcnJ5UGljayAke2V9ICR7cn1gLGV4cGVjdGVkOlsiY2hlcnJ5LXBpY2sgYWJjIl19LGR9bGV0IHU9X3QucmVjb3Jkcy5icmFuY2hlcy5nZXQoX3QucmVjb3Jkcy5jdXJyQnJhbmNoKTtpZih1PT09dm9pZCAwfHwhdSl7bGV0IGQ9bmV3IEVycm9yKGBJbmNvcnJlY3QgdXNhZ2Ugb2YgImNoZXJyeS1waWNrIi4gQ3VycmVudCBicmFuY2ggKCR7X3QucmVjb3Jkcy5jdXJyQnJhbmNofSloYXMgbm8gY29tbWl0c2ApO3Rocm93IGQuaGFzaD17dGV4dDpgY2hlcnJ5UGljayAke2V9ICR7cn1gLHRva2VuOmBjaGVycnlQaWNrICR7ZX0gJHtyfWAsZXhwZWN0ZWQ6WyJjaGVycnktcGljayBhYmMiXX0sZH1sZXQgaD1fdC5yZWNvcmRzLmNvbW1pdHMuZ2V0KHUpO2lmKGg9PT12b2lkIDB8fCFoKXtsZXQgZD1uZXcgRXJyb3IoYEluY29ycmVjdCB1c2FnZSBvZiAiY2hlcnJ5LXBpY2siLiBDdXJyZW50IGJyYW5jaCAoJHtfdC5yZWNvcmRzLmN1cnJCcmFuY2h9KWhhcyBubyBjb21taXRzYCk7dGhyb3cgZC5oYXNoPXt0ZXh0OmBjaGVycnlQaWNrICR7ZX0gJHtyfWAsdG9rZW46YGNoZXJyeVBpY2sgJHtlfSAke3J9YCxleHBlY3RlZDpbImNoZXJyeS1waWNrIGFiYyJdfSxkfWxldCBmPXtpZDpfdC5yZWNvcmRzLnNlcSsiLSIrekkoKSxtZXNzYWdlOmBjaGVycnktcGlja2VkICR7cz8ubWVzc2FnZX0gaW50byAke190LnJlY29yZHMuY3VyckJyYW5jaH1gLHNlcTpfdC5yZWNvcmRzLnNlcSsrLHBhcmVudHM6X3QucmVjb3Jkcy5oZWFkPT1udWxsP1tdOltfdC5yZWNvcmRzLmhlYWQuaWQscy5pZF0sYnJhbmNoOl90LnJlY29yZHMuY3VyckJyYW5jaCx0eXBlOktyLkNIRVJSWV9QSUNLLHRhZ3M6bj9uLmZpbHRlcihCb29sZWFuKTpbYGNoZXJyeS1waWNrOiR7cy5pZH0ke3MudHlwZT09PUtyLk1FUkdFP2B8cGFyZW50OiR7aX1gOiIifWBdfTtfdC5yZWNvcmRzLmhlYWQ9ZixfdC5yZWNvcmRzLmNvbW1pdHMuc2V0KGYuaWQsZiksX3QucmVjb3Jkcy5icmFuY2hlcy5zZXQoX3QucmVjb3Jkcy5jdXJyQnJhbmNoLGYuaWQpLFkuZGVidWcoX3QucmVjb3Jkcy5icmFuY2hlcyksWS5kZWJ1ZygiaW4gY2hlcnJ5UGljayIpfX0sImNoZXJyeVBpY2siKSxLY2U9byhmdW5jdGlvbih0KXtpZih0PVplLnNhbml0aXplVGV4dCh0LEVwKCkpLF90LnJlY29yZHMuYnJhbmNoZXMuaGFzKHQpKXtfdC5yZWNvcmRzLmN1cnJCcmFuY2g9dDtsZXQgZT1fdC5yZWNvcmRzLmJyYW5jaGVzLmdldChfdC5yZWNvcmRzLmN1cnJCcmFuY2gpO2U9PT12b2lkIDB8fCFlP190LnJlY29yZHMuaGVhZD1udWxsOl90LnJlY29yZHMuaGVhZD1fdC5yZWNvcmRzLmNvbW1pdHMuZ2V0KGUpPz9udWxsfWVsc2V7bGV0IGU9bmV3IEVycm9yKGBUcnlpbmcgdG8gY2hlY2tvdXQgYnJhbmNoIHdoaWNoIGlzIG5vdCB5ZXQgY3JlYXRlZC4gKEhlbHAgdHJ5IHVzaW5nICJicmFuY2ggJHt0fSIpYCk7dGhyb3cgZS5oYXNoPXt0ZXh0OmBjaGVja291dCAke3R9YCx0b2tlbjpgY2hlY2tvdXQgJHt0fWAsZXhwZWN0ZWQ6W2BicmFuY2ggJHt0fWBdfSxlfX0sImNoZWNrb3V0Iik7byhqY2UsInVwc2VydCIpO28oUWNlLCJwcmV0dHlQcmludENvbW1pdEhpc3RvcnkiKTt2JGU9byhmdW5jdGlvbigpe1kuZGVidWcoX3QucmVjb3Jkcy5jb21taXRzKTtsZXQgdD1aY2UoKVswXTtRY2UoW3RdKX0sInByZXR0eVByaW50IikseCRlPW8oZnVuY3Rpb24oKXtfdC5yZXNldCgpLEFyKCl9LCJjbGVhciIpLGIkZT1vKGZ1bmN0aW9uKCl7cmV0dXJuWy4uLl90LnJlY29yZHMuYnJhbmNoQ29uZmlnLnZhbHVlcygpXS5tYXAoKGUscik9PmUub3JkZXIhPT1udWxsJiZlLm9yZGVyIT09dm9pZCAwP2U6ey4uLmUsb3JkZXI6cGFyc2VGbG9hdChgMC4ke3J9YCl9KS5zb3J0KChlLHIpPT4oZS5vcmRlcj8/MCktKHIub3JkZXI/PzApKS5tYXAoKHtuYW1lOmV9KT0+KHtuYW1lOmV9KSl9LCJnZXRCcmFuY2hlc0FzT2JqQXJyYXkiKSx3JGU9byhmdW5jdGlvbigpe3JldHVybiBfdC5yZWNvcmRzLmJyYW5jaGVzfSwiZ2V0QnJhbmNoZXMiKSxUJGU9byhmdW5jdGlvbigpe3JldHVybiBfdC5yZWNvcmRzLmNvbW1pdHN9LCJnZXRDb21taXRzIiksWmNlPW8oZnVuY3Rpb24oKXtsZXQgdD1bLi4uX3QucmVjb3Jkcy5jb21taXRzLnZhbHVlcygpXTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKGUpe1kuZGVidWcoZS5pZCl9KSx0LnNvcnQoKGUscik9PmUuc2VxLXIuc2VxKSx0fSwiZ2V0Q29tbWl0c0FycmF5IiksayRlPW8oZnVuY3Rpb24oKXtyZXR1cm4gX3QucmVjb3Jkcy5jdXJyQnJhbmNofSwiZ2V0Q3VycmVudEJyYW5jaCIpLEUkZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIF90LnJlY29yZHMuZGlyZWN0aW9ufSwiZ2V0RGlyZWN0aW9uIiksUyRlPW8oZnVuY3Rpb24oKXtyZXR1cm4gX3QucmVjb3Jkcy5oZWFkfSwiZ2V0SGVhZCIpLG82PXtjb21taXRUeXBlOktyLGdldENvbmZpZzpFcCxzZXREaXJlY3Rpb246aCRlLHNldE9wdGlvbnM6ZiRlLGdldE9wdGlvbnM6ZCRlLGNvbW1pdDpwJGUsYnJhbmNoOm0kZSxtZXJnZTpnJGUsY2hlcnJ5UGljazp5JGUsY2hlY2tvdXQ6S2NlLHByZXR0eVByaW50OnYkZSxjbGVhcjp4JGUsZ2V0QnJhbmNoZXNBc09iakFycmF5OmIkZSxnZXRCcmFuY2hlczp3JGUsZ2V0Q29tbWl0czpUJGUsZ2V0Q29tbWl0c0FycmF5OlpjZSxnZXRDdXJyZW50QnJhbmNoOmskZSxnZXREaXJlY3Rpb246RSRlLGdldEhlYWQ6UyRlLHNldEFjY1RpdGxlOkxyLGdldEFjY1RpdGxlOlJyLGdldEFjY0Rlc2NyaXB0aW9uOk1yLHNldEFjY0Rlc2NyaXB0aW9uOk5yLHNldERpYWdyYW1UaXRsZTokcixnZXREaWFncmFtVGl0bGU6SXJ9fSk7dmFyIEMkZSxBJGUsXyRlLEQkZSxMJGUsUiRlLE4kZSxKY2UsZXVlPU4oKCk9PnsidXNlIHN0cmljdCI7a3AoKTt2dCgpO1QxKCk7R0koKTthNigpO0MkZT1vKCh0LGUpPT57JGModCxlKSx0LmRpciYmZS5zZXREaXJlY3Rpb24odC5kaXIpO2ZvcihsZXQgciBvZiB0LnN0YXRlbWVudHMpQSRlKHIsZSl9LCJwb3B1bGF0ZSIpLEEkZT1vKCh0LGUpPT57bGV0IG49e0NvbW1pdDpvKGk9PmUuY29tbWl0KF8kZShpKSksIkNvbW1pdCIpLEJyYW5jaDpvKGk9PmUuYnJhbmNoKEQkZShpKSksIkJyYW5jaCIpLE1lcmdlOm8oaT0+ZS5tZXJnZShMJGUoaSkpLCJNZXJnZSIpLENoZWNrb3V0Om8oaT0+ZS5jaGVja291dChSJGUoaSkpLCJDaGVja291dCIpLENoZXJyeVBpY2tpbmc6byhpPT5lLmNoZXJyeVBpY2soTiRlKGkpKSwiQ2hlcnJ5UGlja2luZyIpfVt0LiR0eXBlXTtuP24odCk6WS5lcnJvcihgVW5rbm93biBzdGF0ZW1lbnQgdHlwZTogJHt0LiR0eXBlfWApfSwicGFyc2VTdGF0ZW1lbnQiKSxfJGU9byh0PT4oe2lkOnQuaWQsbXNnOnQubWVzc2FnZT8/IiIsdHlwZTp0LnR5cGUhPT12b2lkIDA/S3JbdC50eXBlXTpLci5OT1JNQUwsdGFnczp0LnRhZ3M/P3ZvaWQgMH0pLCJwYXJzZUNvbW1pdCIpLEQkZT1vKHQ9Pih7bmFtZTp0Lm5hbWUsb3JkZXI6dC5vcmRlcj8/MH0pLCJwYXJzZUJyYW5jaCIpLEwkZT1vKHQ9Pih7YnJhbmNoOnQuYnJhbmNoLGlkOnQuaWQ/PyIiLHR5cGU6dC50eXBlIT09dm9pZCAwP0tyW3QudHlwZV06dm9pZCAwLHRhZ3M6dC50YWdzPz92b2lkIDB9KSwicGFyc2VNZXJnZSIpLFIkZT1vKHQ9PnQuYnJhbmNoLCJwYXJzZUNoZWNrb3V0IiksTiRlPW8odD0+KHtpZDp0LmlkLHRhcmdldElkOiIiLHRhZ3M6dC50YWdzPy5sZW5ndGg9PT0wP3ZvaWQgMDp0LnRhZ3MscGFyZW50OnQucGFyZW50fSksInBhcnNlQ2hlcnJ5UGlja2luZyIpLEpjZT17cGFyc2U6byhhc3luYyB0PT57bGV0IGU9YXdhaXQgdW8oImdpdEdyYXBoIix0KTtZLmRlYnVnKGUpLEMkZShlLG82KX0sInBhcnNlIil9fSk7dmFyIE0kZSxLbyxnZix5Zix6YyxxdSxTcCxHcyxWcyxsNixkYixjNixtZixCcixJJGUscnVlLG51ZSxPJGUsUCRlLEIkZSxGJGUsJCRlLHokZSxHJGUsViRlLFUkZSxIJGUsVyRlLHEkZSx0dWUsWSRlLHBiLFgkZSxqJGUsSyRlLFEkZSxaJGUsaXVlLGF1ZT1OKCgpPT57InVzZSBzdHJpY3QiO2RyKCk7enQoKTt2dCgpO2lyKCk7YTYoKTtNJGU9bWUoKSxLbz1NJGU/LmdpdEdyYXBoLGdmPTEwLHlmPTQwLHpjPTQscXU9MixTcD04LEdzPW5ldyBNYXAsVnM9bmV3IE1hcCxsNj0zMCxkYj1uZXcgTWFwLGM2PVtdLG1mPTAsQnI9IkxSIixJJGU9bygoKT0+e0dzLmNsZWFyKCksVnMuY2xlYXIoKSxkYi5jbGVhcigpLG1mPTAsYzY9W10sQnI9IkxSIn0sImNsZWFyIikscnVlPW8odD0+e2xldCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iik7cmV0dXJuKHR5cGVvZiB0PT0ic3RyaW5nIj90LnNwbGl0KC9cXG58XG58PGJyXHMqXC8/Pi9naSk6dCkuZm9yRWFjaChuPT57bGV0IGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRzcGFuIik7aS5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwieG1sOnNwYWNlIiwicHJlc2VydmUiKSxpLnNldEF0dHJpYnV0ZSgiZHkiLCIxZW0iKSxpLnNldEF0dHJpYnV0ZSgieCIsIjAiKSxpLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJyb3ciKSxpLnRleHRDb250ZW50PW4udHJpbSgpLGUuYXBwZW5kQ2hpbGQoaSl9KSxlfSwiZHJhd1RleHQiKSxudWU9byh0PT57bGV0IGUscixuO3JldHVybiBCcj09PSJCVCI/KHI9bygoaSxhKT0+aTw9YSwiY29tcGFyaXNvbkZ1bmMiKSxuPTEvMCk6KHI9bygoaSxhKT0+aT49YSwiY29tcGFyaXNvbkZ1bmMiKSxuPTApLHQuZm9yRWFjaChpPT57bGV0IGE9QnI9PT0iVEIifHxCcj09IkJUIj9Wcy5nZXQoaSk/Lnk6VnMuZ2V0KGkpPy54O2EhPT12b2lkIDAmJnIoYSxuKSYmKGU9aSxuPWEpfSksZX0sImZpbmRDbG9zZXN0UGFyZW50IiksTyRlPW8odD0+e2xldCBlPSIiLHI9MS8wO3JldHVybiB0LmZvckVhY2gobj0+e2xldCBpPVZzLmdldChuKS55O2k8PXImJihlPW4scj1pKX0pLGV8fHZvaWQgMH0sImZpbmRDbG9zZXN0UGFyZW50QlQiKSxQJGU9bygodCxlLHIpPT57bGV0IG49cixpPXIsYT1bXTt0LmZvckVhY2gocz0+e2xldCBsPWUuZ2V0KHMpO2lmKCFsKXRocm93IG5ldyBFcnJvcihgQ29tbWl0IG5vdCBmb3VuZCBmb3Iga2V5ICR7c31gKTtsLnBhcmVudHMubGVuZ3RoPyhuPUYkZShsKSxpPU1hdGgubWF4KG4saSkpOmEucHVzaChsKSwkJGUobCxuKX0pLG49aSxhLmZvckVhY2gocz0+e3okZShzLG4scil9KSx0LmZvckVhY2gocz0+e2xldCBsPWUuZ2V0KHMpO2lmKGw/LnBhcmVudHMubGVuZ3RoKXtsZXQgdT1PJGUobC5wYXJlbnRzKTtuPVZzLmdldCh1KS55LXlmLG48PWkmJihpPW4pO2xldCBoPUdzLmdldChsLmJyYW5jaCkucG9zLGY9bi1nZjtWcy5zZXQobC5pZCx7eDpoLHk6Zn0pfX0pfSwic2V0UGFyYWxsZWxCVFBvcyIpLEIkZT1vKHQ9PntsZXQgZT1udWUodC5wYXJlbnRzLmZpbHRlcihuPT5uIT09bnVsbCkpO2lmKCFlKXRocm93IG5ldyBFcnJvcihgQ2xvc2VzdCBwYXJlbnQgbm90IGZvdW5kIGZvciBjb21taXQgJHt0LmlkfWApO2xldCByPVZzLmdldChlKT8ueTtpZihyPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgQ2xvc2VzdCBwYXJlbnQgcG9zaXRpb24gbm90IGZvdW5kIGZvciBjb21taXQgJHt0LmlkfWApO3JldHVybiByfSwiZmluZENsb3Nlc3RQYXJlbnRQb3MiKSxGJGU9byh0PT5CJGUodCkreWYsImNhbGN1bGF0ZUNvbW1pdFBvc2l0aW9uIiksJCRlPW8oKHQsZSk9PntsZXQgcj1Hcy5nZXQodC5icmFuY2gpO2lmKCFyKXRocm93IG5ldyBFcnJvcihgQnJhbmNoIG5vdCBmb3VuZCBmb3IgY29tbWl0ICR7dC5pZH1gKTtsZXQgbj1yLnBvcyxpPWUrZ2Y7cmV0dXJuIFZzLnNldCh0LmlkLHt4Om4seTppfSkse3g6bix5Oml9fSwic2V0Q29tbWl0UG9zaXRpb24iKSx6JGU9bygodCxlLHIpPT57bGV0IG49R3MuZ2V0KHQuYnJhbmNoKTtpZighbil0aHJvdyBuZXcgRXJyb3IoYEJyYW5jaCBub3QgZm91bmQgZm9yIGNvbW1pdCAke3QuaWR9YCk7bGV0IGk9ZStyLGE9bi5wb3M7VnMuc2V0KHQuaWQse3g6YSx5Oml9KX0sInNldFJvb3RQb3NpdGlvbiIpLEckZT1vKCh0LGUscixuLGksYSk9PntpZihhPT09S3IuSElHSExJR0hUKXQuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsci54LTEwKS5hdHRyKCJ5IixyLnktMTApLmF0dHIoIndpZHRoIiwyMCkuYXR0cigiaGVpZ2h0IiwyMCkuYXR0cigiY2xhc3MiLGBjb21taXQgJHtlLmlkfSBjb21taXQtaGlnaGxpZ2h0JHtpJVNwfSAke259LW91dGVyYCksdC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IixyLngtNikuYXR0cigieSIsci55LTYpLmF0dHIoIndpZHRoIiwxMikuYXR0cigiaGVpZ2h0IiwxMikuYXR0cigiY2xhc3MiLGBjb21taXQgJHtlLmlkfSBjb21taXQke2klU3B9ICR7bn0taW5uZXJgKTtlbHNlIGlmKGE9PT1Lci5DSEVSUllfUElDSyl0LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLHIueCkuYXR0cigiY3kiLHIueSkuYXR0cigiciIsMTApLmF0dHIoImNsYXNzIixgY29tbWl0ICR7ZS5pZH0gJHtufWApLHQuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsci54LTMpLmF0dHIoImN5IixyLnkrMikuYXR0cigiciIsMi43NSkuYXR0cigiZmlsbCIsIiNmZmYiKS5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke2UuaWR9ICR7bn1gKSx0LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLHIueCszKS5hdHRyKCJjeSIsci55KzIpLmF0dHIoInIiLDIuNzUpLmF0dHIoImZpbGwiLCIjZmZmIikuYXR0cigiY2xhc3MiLGBjb21taXQgJHtlLmlkfSAke259YCksdC5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsci54KzMpLmF0dHIoInkxIixyLnkrMSkuYXR0cigieDIiLHIueCkuYXR0cigieTIiLHIueS01KS5hdHRyKCJzdHJva2UiLCIjZmZmIikuYXR0cigiY2xhc3MiLGBjb21taXQgJHtlLmlkfSAke259YCksdC5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsci54LTMpLmF0dHIoInkxIixyLnkrMSkuYXR0cigieDIiLHIueCkuYXR0cigieTIiLHIueS01KS5hdHRyKCJzdHJva2UiLCIjZmZmIikuYXR0cigiY2xhc3MiLGBjb21taXQgJHtlLmlkfSAke259YCk7ZWxzZXtsZXQgcz10LmFwcGVuZCgiY2lyY2xlIik7aWYocy5hdHRyKCJjeCIsci54KSxzLmF0dHIoImN5IixyLnkpLHMuYXR0cigiciIsZS50eXBlPT09S3IuTUVSR0U/OToxMCkscy5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke2UuaWR9IGNvbW1pdCR7aSVTcH1gKSxhPT09S3IuTUVSR0Upe2xldCBsPXQuYXBwZW5kKCJjaXJjbGUiKTtsLmF0dHIoImN4IixyLngpLGwuYXR0cigiY3kiLHIueSksbC5hdHRyKCJyIiw2KSxsLmF0dHIoImNsYXNzIixgY29tbWl0ICR7bn0gJHtlLmlkfSBjb21taXQke2klU3B9YCl9YT09PUtyLlJFVkVSU0UmJnQuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsYE0gJHtyLngtNX0sJHtyLnktNX1MJHtyLngrNX0sJHtyLnkrNX1NJHtyLngtNX0sJHtyLnkrNX1MJHtyLngrNX0sJHtyLnktNX1gKS5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke259ICR7ZS5pZH0gY29tbWl0JHtpJVNwfWApfX0sImRyYXdDb21taXRCdWxsZXQiKSxWJGU9bygodCxlLHIsbik9PntpZihlLnR5cGUhPT1Lci5DSEVSUllfUElDSyYmKGUuY3VzdG9tSWQmJmUudHlwZT09PUtyLk1FUkdFfHxlLnR5cGUhPT1Lci5NRVJHRSkmJktvPy5zaG93Q29tbWl0TGFiZWwpe2xldCBpPXQuYXBwZW5kKCJnIiksYT1pLmluc2VydCgicmVjdCIpLmF0dHIoImNsYXNzIiwiY29tbWl0LWxhYmVsLWJrZyIpLHM9aS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixuKS5hdHRyKCJ5IixyLnkrMjUpLmF0dHIoImNsYXNzIiwiY29tbWl0LWxhYmVsIikudGV4dChlLmlkKSxsPXMubm9kZSgpPy5nZXRCQm94KCk7aWYobCYmKGEuYXR0cigieCIsci5wb3NXaXRoT2Zmc2V0LWwud2lkdGgvMi1xdSkuYXR0cigieSIsci55KzEzLjUpLmF0dHIoIndpZHRoIixsLndpZHRoKzIqcXUpLmF0dHIoImhlaWdodCIsbC5oZWlnaHQrMipxdSksQnI9PT0iVEIifHxCcj09PSJCVCI/KGEuYXR0cigieCIsci54LShsLndpZHRoKzQqemMrNSkpLmF0dHIoInkiLHIueS0xMikscy5hdHRyKCJ4IixyLngtKGwud2lkdGgrNCp6YykpLmF0dHIoInkiLHIueStsLmhlaWdodC0xMikpOnMuYXR0cigieCIsci5wb3NXaXRoT2Zmc2V0LWwud2lkdGgvMiksS28ucm90YXRlQ29tbWl0TGFiZWwpKWlmKEJyPT09IlRCInx8QnI9PT0iQlQiKXMuYXR0cigidHJhbnNmb3JtIiwicm90YXRlKC00NSwgIityLngrIiwgIityLnkrIikiKSxhLmF0dHIoInRyYW5zZm9ybSIsInJvdGF0ZSgtNDUsICIrci54KyIsICIrci55KyIpIik7ZWxzZXtsZXQgdT0tNy41LShsLndpZHRoKzEwKS8yNSo5LjUsaD0xMCtsLndpZHRoLzI1KjguNTtpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3UrIiwgIitoKyIpIHJvdGF0ZSgtNDUsICIrbisiLCAiK3IueSsiKSIpfX19LCJkcmF3Q29tbWl0TGFiZWwiKSxVJGU9bygodCxlLHIsbik9PntpZihlLnRhZ3MubGVuZ3RoPjApe2xldCBpPTAsYT0wLHM9MCxsPVtdO2ZvcihsZXQgdSBvZiBlLnRhZ3MucmV2ZXJzZSgpKXtsZXQgaD10Lmluc2VydCgicG9seWdvbiIpLGY9dC5hcHBlbmQoImNpcmNsZSIpLGQ9dC5hcHBlbmQoInRleHQiKS5hdHRyKCJ5IixyLnktMTYtaSkuYXR0cigiY2xhc3MiLCJ0YWctbGFiZWwiKS50ZXh0KHUpLHA9ZC5ub2RlKCk/LmdldEJCb3goKTtpZighcCl0aHJvdyBuZXcgRXJyb3IoIlRhZyBiYm94IG5vdCBmb3VuZCIpO2E9TWF0aC5tYXgoYSxwLndpZHRoKSxzPU1hdGgubWF4KHMscC5oZWlnaHQpLGQuYXR0cigieCIsci5wb3NXaXRoT2Zmc2V0LXAud2lkdGgvMiksbC5wdXNoKHt0YWc6ZCxob2xlOmYscmVjdDpoLHlPZmZzZXQ6aX0pLGkrPTIwfWZvcihsZXR7dGFnOnUsaG9sZTpoLHJlY3Q6Zix5T2Zmc2V0OmR9b2YgbCl7bGV0IHA9cy8yLG09ci55LTE5LjItZDtpZihmLmF0dHIoImNsYXNzIiwidGFnLWxhYmVsLWJrZyIpLmF0dHIoInBvaW50cyIsYAogICAgICAke24tYS8yLXpjLzJ9LCR7bStxdX0gIAogICAgICAke24tYS8yLXpjLzJ9LCR7bS1xdX0KICAgICAgJHtyLnBvc1dpdGhPZmZzZXQtYS8yLXpjfSwke20tcC1xdX0KICAgICAgJHtyLnBvc1dpdGhPZmZzZXQrYS8yK3pjfSwke20tcC1xdX0KICAgICAgJHtyLnBvc1dpdGhPZmZzZXQrYS8yK3pjfSwke20rcCtxdX0KICAgICAgJHtyLnBvc1dpdGhPZmZzZXQtYS8yLXpjfSwke20rcCtxdX1gKSxoLmF0dHIoImN5IixtKS5hdHRyKCJjeCIsbi1hLzIremMvMikuYXR0cigiciIsMS41KS5hdHRyKCJjbGFzcyIsInRhZy1ob2xlIiksQnI9PT0iVEIifHxCcj09PSJCVCIpe2xldCBnPW4rZDtmLmF0dHIoImNsYXNzIiwidGFnLWxhYmVsLWJrZyIpLmF0dHIoInBvaW50cyIsYAogICAgICAgICR7ci54fSwke2crMn0KICAgICAgICAke3IueH0sJHtnLTJ9CiAgICAgICAgJHtyLngrZ2Z9LCR7Zy1wLTJ9CiAgICAgICAgJHtyLngrZ2YrYSs0fSwke2ctcC0yfQogICAgICAgICR7ci54K2dmK2ErNH0sJHtnK3ArMn0KICAgICAgICAke3IueCtnZn0sJHtnK3ArMn1gKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMTIsMTIpIHJvdGF0ZSg0NSwgIityLngrIiwiK24rIikiKSxoLmF0dHIoImN4IixyLngremMvMikuYXR0cigiY3kiLGcpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgxMiwxMikgcm90YXRlKDQ1LCAiK3IueCsiLCIrbisiKSIpLHUuYXR0cigieCIsci54KzUpLmF0dHIoInkiLGcrMykuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDE0LDE0KSByb3RhdGUoNDUsICIrci54KyIsIituKyIpIil9fX19LCJkcmF3Q29tbWl0VGFncyIpLEgkZT1vKHQ9Pntzd2l0Y2godC5jdXN0b21UeXBlPz90LnR5cGUpe2Nhc2UgS3IuTk9STUFMOnJldHVybiJjb21taXQtbm9ybWFsIjtjYXNlIEtyLlJFVkVSU0U6cmV0dXJuImNvbW1pdC1yZXZlcnNlIjtjYXNlIEtyLkhJR0hMSUdIVDpyZXR1cm4iY29tbWl0LWhpZ2hsaWdodCI7Y2FzZSBLci5NRVJHRTpyZXR1cm4iY29tbWl0LW1lcmdlIjtjYXNlIEtyLkNIRVJSWV9QSUNLOnJldHVybiJjb21taXQtY2hlcnJ5LXBpY2siO2RlZmF1bHQ6cmV0dXJuImNvbW1pdC1ub3JtYWwifX0sImdldENvbW1pdENsYXNzVHlwZSIpLFckZT1vKCh0LGUscixuKT0+e2xldCBpPXt4OjAseTowfTtpZih0LnBhcmVudHMubGVuZ3RoPjApe2xldCBhPW51ZSh0LnBhcmVudHMpO2lmKGEpe2xldCBzPW4uZ2V0KGEpPz9pO3JldHVybiBlPT09IlRCIj9zLnkreWY6ZT09PSJCVCI/KG4uZ2V0KHQuaWQpPz9pKS55LXlmOnMueCt5Zn19ZWxzZSByZXR1cm4gZT09PSJUQiI/bDY6ZT09PSJCVCI/KG4uZ2V0KHQuaWQpPz9pKS55LXlmOjA7cmV0dXJuIDB9LCJjYWxjdWxhdGVQb3NpdGlvbiIpLHEkZT1vKCh0LGUscik9PntsZXQgbj1Ccj09PSJCVCImJnI/ZTplK2dmLGk9QnI9PT0iVEIifHxCcj09PSJCVCI/bjpHcy5nZXQodC5icmFuY2gpPy5wb3MsYT1Ccj09PSJUQiJ8fEJyPT09IkJUIj9Hcy5nZXQodC5icmFuY2gpPy5wb3M6bjtpZihhPT09dm9pZCAwfHxpPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgUG9zaXRpb24gd2VyZSB1bmRlZmluZWQgZm9yIGNvbW1pdCAke3QuaWR9YCk7cmV0dXJue3g6YSx5OmkscG9zV2l0aE9mZnNldDpufX0sImdldENvbW1pdFBvc2l0aW9uIiksdHVlPW8oKHQsZSxyKT0+e2lmKCFLbyl0aHJvdyBuZXcgRXJyb3IoIkdpdEdyYXBoIGNvbmZpZyBub3QgZm91bmQiKTtsZXQgbj10LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiY29tbWl0LWJ1bGxldHMiKSxpPXQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJjb21taXQtbGFiZWxzIiksYT1Ccj09PSJUQiJ8fEJyPT09IkJUIj9sNjowLHM9Wy4uLmUua2V5cygpXSxsPUtvPy5wYXJhbGxlbENvbW1pdHM/PyExLHU9bygoZixkKT0+e2xldCBwPWUuZ2V0KGYpPy5zZXEsbT1lLmdldChkKT8uc2VxO3JldHVybiBwIT09dm9pZCAwJiZtIT09dm9pZCAwP3AtbTowfSwic29ydEtleXMiKSxoPXMuc29ydCh1KTtCcj09PSJCVCImJihsJiZQJGUoaCxlLGEpLGg9aC5yZXZlcnNlKCkpLGguZm9yRWFjaChmPT57bGV0IGQ9ZS5nZXQoZik7aWYoIWQpdGhyb3cgbmV3IEVycm9yKGBDb21taXQgbm90IGZvdW5kIGZvciBrZXkgJHtmfWApO2wmJihhPVckZShkLEJyLGEsVnMpKTtsZXQgcD1xJGUoZCxhLGwpO2lmKHIpe2xldCBtPUgkZShkKSxnPWQuY3VzdG9tVHlwZT8/ZC50eXBlLHk9R3MuZ2V0KGQuYnJhbmNoKT8uaW5kZXg/PzA7RyRlKG4sZCxwLG0seSxnKSxWJGUoaSxkLHAsYSksVSRlKGksZCxwLGEpfUJyPT09IlRCInx8QnI9PT0iQlQiP1ZzLnNldChkLmlkLHt4OnAueCx5OnAucG9zV2l0aE9mZnNldH0pOlZzLnNldChkLmlkLHt4OnAucG9zV2l0aE9mZnNldCx5OnAueX0pLGE9QnI9PT0iQlQiJiZsP2EreWY6YSt5ZitnZixhPm1mJiYobWY9YSl9KX0sImRyYXdDb21taXRzIiksWSRlPW8oKHQsZSxyLG4saSk9PntsZXQgcz0oQnI9PT0iVEIifHxCcj09PSJCVCI/ci54PG4ueDpyLnk8bi55KT9lLmJyYW5jaDp0LmJyYW5jaCxsPW8oaD0+aC5icmFuY2g9PT1zLCJpc09uQnJhbmNoVG9HZXRDdXJ2ZSIpLHU9byhoPT5oLnNlcT50LnNlcSYmaC5zZXE8ZS5zZXEsImlzQmV0d2VlbkNvbW1pdHMiKTtyZXR1cm5bLi4uaS52YWx1ZXMoKV0uc29tZShoPT51KGgpJiZsKGgpKX0sInNob3VsZFJlcm91dGVBcnJvdyIpLHBiPW8oKHQsZSxyPTApPT57bGV0IG49dCtNYXRoLmFicyh0LWUpLzI7aWYocj41KXJldHVybiBuO2lmKGM2LmV2ZXJ5KHM9Pk1hdGguYWJzKHMtbik+PTEwKSlyZXR1cm4gYzYucHVzaChuKSxuO2xldCBhPU1hdGguYWJzKHQtZSk7cmV0dXJuIHBiKHQsZS1hLzUscisxKX0sImZpbmRMYW5lIiksWCRlPW8oKHQsZSxyLG4pPT57bGV0IGk9VnMuZ2V0KGUuaWQpLGE9VnMuZ2V0KHIuaWQpO2lmKGk9PT12b2lkIDB8fGE9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBDb21taXQgcG9zaXRpb25zIG5vdCBmb3VuZCBmb3IgY29tbWl0cyAke2UuaWR9IGFuZCAke3IuaWR9YCk7bGV0IHM9WSRlKGUscixpLGEsbiksbD0iIix1PSIiLGg9MCxmPTAsZD1Hcy5nZXQoci5icmFuY2gpPy5pbmRleDtyLnR5cGU9PT1Lci5NRVJHRSYmZS5pZCE9PXIucGFyZW50c1swXSYmKGQ9R3MuZ2V0KGUuYnJhbmNoKT8uaW5kZXgpO2xldCBwO2lmKHMpe2w9IkEgMTAgMTAsIDAsIDAsIDAsIix1PSJBIDEwIDEwLCAwLCAwLCAxLCIsaD0xMCxmPTEwO2xldCBtPWkueTxhLnk/cGIoaS55LGEueSk6cGIoYS55LGkueSksZz1pLng8YS54P3BiKGkueCxhLngpOnBiKGEueCxpLngpO0JyPT09IlRCIj9pLng8YS54P3A9YE0gJHtpLnh9ICR7aS55fSBMICR7Zy1ofSAke2kueX0gJHt1fSAke2d9ICR7aS55K2Z9IEwgJHtnfSAke2EueS1ofSAke2x9ICR7ZytmfSAke2EueX0gTCAke2EueH0gJHthLnl9YDooZD1Hcy5nZXQoZS5icmFuY2gpPy5pbmRleCxwPWBNICR7aS54fSAke2kueX0gTCAke2craH0gJHtpLnl9ICR7bH0gJHtnfSAke2kueStmfSBMICR7Z30gJHthLnktaH0gJHt1fSAke2ctZn0gJHthLnl9IEwgJHthLnh9ICR7YS55fWApOkJyPT09IkJUIj9pLng8YS54P3A9YE0gJHtpLnh9ICR7aS55fSBMICR7Zy1ofSAke2kueX0gJHtsfSAke2d9ICR7aS55LWZ9IEwgJHtnfSAke2EueStofSAke3V9ICR7ZytmfSAke2EueX0gTCAke2EueH0gJHthLnl9YDooZD1Hcy5nZXQoZS5icmFuY2gpPy5pbmRleCxwPWBNICR7aS54fSAke2kueX0gTCAke2craH0gJHtpLnl9ICR7dX0gJHtnfSAke2kueS1mfSBMICR7Z30gJHthLnkraH0gJHtsfSAke2ctZn0gJHthLnl9IEwgJHthLnh9ICR7YS55fWApOmkueTxhLnk/cD1gTSAke2kueH0gJHtpLnl9IEwgJHtpLnh9ICR7bS1ofSAke2x9ICR7aS54K2Z9ICR7bX0gTCAke2EueC1ofSAke219ICR7dX0gJHthLnh9ICR7bStmfSBMICR7YS54fSAke2EueX1gOihkPUdzLmdldChlLmJyYW5jaCk/LmluZGV4LHA9YE0gJHtpLnh9ICR7aS55fSBMICR7aS54fSAke20raH0gJHt1fSAke2kueCtmfSAke219IEwgJHthLngtaH0gJHttfSAke2x9ICR7YS54fSAke20tZn0gTCAke2EueH0gJHthLnl9YCl9ZWxzZSBsPSJBIDIwIDIwLCAwLCAwLCAwLCIsdT0iQSAyMCAyMCwgMCwgMCwgMSwiLGg9MjAsZj0yMCxCcj09PSJUQiI/KGkueDxhLngmJihyLnR5cGU9PT1Lci5NRVJHRSYmZS5pZCE9PXIucGFyZW50c1swXT9wPWBNICR7aS54fSAke2kueX0gTCAke2kueH0gJHthLnktaH0gJHtsfSAke2kueCtmfSAke2EueX0gTCAke2EueH0gJHthLnl9YDpwPWBNICR7aS54fSAke2kueX0gTCAke2EueC1ofSAke2kueX0gJHt1fSAke2EueH0gJHtpLnkrZn0gTCAke2EueH0gJHthLnl9YCksaS54PmEueCYmKGw9IkEgMjAgMjAsIDAsIDAsIDAsIix1PSJBIDIwIDIwLCAwLCAwLCAxLCIsaD0yMCxmPTIwLHIudHlwZT09PUtyLk1FUkdFJiZlLmlkIT09ci5wYXJlbnRzWzBdP3A9YE0gJHtpLnh9ICR7aS55fSBMICR7aS54fSAke2EueS1ofSAke3V9ICR7aS54LWZ9ICR7YS55fSBMICR7YS54fSAke2EueX1gOnA9YE0gJHtpLnh9ICR7aS55fSBMICR7YS54K2h9ICR7aS55fSAke2x9ICR7YS54fSAke2kueStmfSBMICR7YS54fSAke2EueX1gKSxpLng9PT1hLngmJihwPWBNICR7aS54fSAke2kueX0gTCAke2EueH0gJHthLnl9YCkpOkJyPT09IkJUIj8oaS54PGEueCYmKHIudHlwZT09PUtyLk1FUkdFJiZlLmlkIT09ci5wYXJlbnRzWzBdP3A9YE0gJHtpLnh9ICR7aS55fSBMICR7aS54fSAke2EueStofSAke3V9ICR7aS54K2Z9ICR7YS55fSBMICR7YS54fSAke2EueX1gOnA9YE0gJHtpLnh9ICR7aS55fSBMICR7YS54LWh9ICR7aS55fSAke2x9ICR7YS54fSAke2kueS1mfSBMICR7YS54fSAke2EueX1gKSxpLng+YS54JiYobD0iQSAyMCAyMCwgMCwgMCwgMCwiLHU9IkEgMjAgMjAsIDAsIDAsIDEsIixoPTIwLGY9MjAsci50eXBlPT09S3IuTUVSR0UmJmUuaWQhPT1yLnBhcmVudHNbMF0/cD1gTSAke2kueH0gJHtpLnl9IEwgJHtpLnh9ICR7YS55K2h9ICR7bH0gJHtpLngtZn0gJHthLnl9IEwgJHthLnh9ICR7YS55fWA6cD1gTSAke2kueH0gJHtpLnl9IEwgJHthLngtaH0gJHtpLnl9ICR7bH0gJHthLnh9ICR7aS55LWZ9IEwgJHthLnh9ICR7YS55fWApLGkueD09PWEueCYmKHA9YE0gJHtpLnh9ICR7aS55fSBMICR7YS54fSAke2EueX1gKSk6KGkueTxhLnkmJihyLnR5cGU9PT1Lci5NRVJHRSYmZS5pZCE9PXIucGFyZW50c1swXT9wPWBNICR7aS54fSAke2kueX0gTCAke2EueC1ofSAke2kueX0gJHt1fSAke2EueH0gJHtpLnkrZn0gTCAke2EueH0gJHthLnl9YDpwPWBNICR7aS54fSAke2kueX0gTCAke2kueH0gJHthLnktaH0gJHtsfSAke2kueCtmfSAke2EueX0gTCAke2EueH0gJHthLnl9YCksaS55PmEueSYmKHIudHlwZT09PUtyLk1FUkdFJiZlLmlkIT09ci5wYXJlbnRzWzBdP3A9YE0gJHtpLnh9ICR7aS55fSBMICR7YS54LWh9ICR7aS55fSAke2x9ICR7YS54fSAke2kueS1mfSBMICR7YS54fSAke2EueX1gOnA9YE0gJHtpLnh9ICR7aS55fSBMICR7aS54fSAke2EueStofSAke3V9ICR7aS54K2Z9ICR7YS55fSBMICR7YS54fSAke2EueX1gKSxpLnk9PT1hLnkmJihwPWBNICR7aS54fSAke2kueX0gTCAke2EueH0gJHthLnl9YCkpO2lmKHA9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJMaW5lIGRlZmluaXRpb24gbm90IGZvdW5kIik7dC5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixwKS5hdHRyKCJjbGFzcyIsImFycm93IGFycm93IitkJVNwKX0sImRyYXdBcnJvdyIpLGokZT1vKCh0LGUpPT57bGV0IHI9dC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImNvbW1pdC1hcnJvd3MiKTtbLi4uZS5rZXlzKCldLmZvckVhY2gobj0+e2xldCBpPWUuZ2V0KG4pO2kucGFyZW50cyYmaS5wYXJlbnRzLmxlbmd0aD4wJiZpLnBhcmVudHMuZm9yRWFjaChhPT57WCRlKHIsZS5nZXQoYSksaSxlKX0pfSl9LCJkcmF3QXJyb3dzIiksSyRlPW8oKHQsZSk9PntsZXQgcj10LmFwcGVuZCgiZyIpO2UuZm9yRWFjaCgobixpKT0+e2xldCBhPWklU3Ascz1Hcy5nZXQobi5uYW1lKT8ucG9zO2lmKHM9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBQb3NpdGlvbiBub3QgZm91bmQgZm9yIGJyYW5jaCAke24ubmFtZX1gKTtsZXQgbD1yLmFwcGVuZCgibGluZSIpO2wuYXR0cigieDEiLDApLGwuYXR0cigieTEiLHMpLGwuYXR0cigieDIiLG1mKSxsLmF0dHIoInkyIixzKSxsLmF0dHIoImNsYXNzIiwiYnJhbmNoIGJyYW5jaCIrYSksQnI9PT0iVEIiPyhsLmF0dHIoInkxIixsNiksbC5hdHRyKCJ4MSIscyksbC5hdHRyKCJ5MiIsbWYpLGwuYXR0cigieDIiLHMpKTpCcj09PSJCVCImJihsLmF0dHIoInkxIixtZiksbC5hdHRyKCJ4MSIscyksbC5hdHRyKCJ5MiIsbDYpLGwuYXR0cigieDIiLHMpKSxjNi5wdXNoKHMpO2xldCB1PW4ubmFtZSxoPXJ1ZSh1KSxmPXIuaW5zZXJ0KCJyZWN0IikscD1yLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiYnJhbmNoTGFiZWwiKS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIGJyYW5jaC1sYWJlbCIrYSk7cC5ub2RlKCkuYXBwZW5kQ2hpbGQoaCk7bGV0IG09aC5nZXRCQm94KCk7Zi5hdHRyKCJjbGFzcyIsImJyYW5jaExhYmVsQmtnIGxhYmVsIithKS5hdHRyKCJyeCIsNCkuYXR0cigicnkiLDQpLmF0dHIoIngiLC1tLndpZHRoLTQtKEtvPy5yb3RhdGVDb21taXRMYWJlbD09PSEwPzMwOjApKS5hdHRyKCJ5IiwtbS5oZWlnaHQvMis4KS5hdHRyKCJ3aWR0aCIsbS53aWR0aCsxOCkuYXR0cigiaGVpZ2h0IixtLmhlaWdodCs0KSxwLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKygtbS53aWR0aC0xNC0oS28/LnJvdGF0ZUNvbW1pdExhYmVsPT09ITA/MzA6MCkpKyIsICIrKHMtbS5oZWlnaHQvMi0xKSsiKSIpLEJyPT09IlRCIj8oZi5hdHRyKCJ4IixzLW0ud2lkdGgvMi0xMCkuYXR0cigieSIsMCkscC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisocy1tLndpZHRoLzItNSkrIiwgMCkiKSk6QnI9PT0iQlQiPyhmLmF0dHIoIngiLHMtbS53aWR0aC8yLTEwKS5hdHRyKCJ5IixtZikscC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisocy1tLndpZHRoLzItNSkrIiwgIittZisiKSIpKTpmLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgtMTksICIrKHMtbS5oZWlnaHQvMikrIikiKX0pfSwiZHJhd0JyYW5jaGVzIiksUSRlPW8oZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gR3Muc2V0KHQse3BvczplLGluZGV4OnJ9KSxlKz01MCsoaT80MDowKSsoQnI9PT0iVEIifHxCcj09PSJCVCI/bi53aWR0aC8yOjApLGV9LCJzZXRCcmFuY2hQb3NpdGlvbiIpLFokZT1vKGZ1bmN0aW9uKHQsZSxyLG4pe2lmKEkkZSgpLFkuZGVidWcoImluIGdpdGdyYXBoIHJlbmRlcmVyIix0K2AKYCwiaWQ6IixlLHIpLCFLbyl0aHJvdyBuZXcgRXJyb3IoIkdpdEdyYXBoIGNvbmZpZyBub3QgZm91bmQiKTtsZXQgaT1Lby5yb3RhdGVDb21taXRMYWJlbD8/ITEsYT1uLmRiO2RiPWEuZ2V0Q29tbWl0cygpO2xldCBzPWEuZ2V0QnJhbmNoZXNBc09iakFycmF5KCk7QnI9YS5nZXREaXJlY3Rpb24oKTtsZXQgbD1HZShgW2lkPSIke2V9Il1gKSx1PTA7cy5mb3JFYWNoKChoLGYpPT57bGV0IGQ9cnVlKGgubmFtZSkscD1sLmFwcGVuZCgiZyIpLG09cC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImJyYW5jaExhYmVsIiksZz1tLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwgYnJhbmNoLWxhYmVsIik7Zy5ub2RlKCk/LmFwcGVuZENoaWxkKGQpO2xldCB5PWQuZ2V0QkJveCgpO3U9USRlKGgubmFtZSx1LGYseSxpKSxnLnJlbW92ZSgpLG0ucmVtb3ZlKCkscC5yZW1vdmUoKX0pLHR1ZShsLGRiLCExKSxLby5zaG93QnJhbmNoZXMmJkskZShsLHMpLGokZShsLGRiKSx0dWUobCxkYiwhMCksR3QuaW5zZXJ0VGl0bGUobCwiZ2l0VGl0bGVUZXh0IixLby50aXRsZVRvcE1hcmdpbj8/MCxhLmdldERpYWdyYW1UaXRsZSgpKSxvQSh2b2lkIDAsbCxLby5kaWFncmFtUGFkZGluZyxLby51c2VNYXhXaWR0aCl9LCJkcmF3IiksaXVlPXtkcmF3OlokZX19KTt2YXIgSiRlLHN1ZSxvdWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtKJGU9byh0PT5gCiAgLmNvbW1pdC1pZCwKICAuY29tbWl0LW1zZywKICAuYnJhbmNoLWxhYmVsIHsKICAgIGZpbGw6IGxpZ2h0Z3JleTsKICAgIGNvbG9yOiBsaWdodGdyZXk7CiAgICBmb250LWZhbWlseTogJ3RyZWJ1Y2hldCBtcycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmOwogICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpOwogIH0KICAke1swLDEsMiwzLDQsNSw2LDddLm1hcChlPT5gCiAgICAgICAgLmJyYW5jaC1sYWJlbCR7ZX0geyBmaWxsOiAke3RbImdpdEJyYW5jaExhYmVsIitlXX07IH0KICAgICAgICAuY29tbWl0JHtlfSB7IHN0cm9rZTogJHt0WyJnaXQiK2VdfTsgZmlsbDogJHt0WyJnaXQiK2VdfTsgfQogICAgICAgIC5jb21taXQtaGlnaGxpZ2h0JHtlfSB7IHN0cm9rZTogJHt0WyJnaXRJbnYiK2VdfTsgZmlsbDogJHt0WyJnaXRJbnYiK2VdfTsgfQogICAgICAgIC5sYWJlbCR7ZX0gIHsgZmlsbDogJHt0WyJnaXQiK2VdfTsgfQogICAgICAgIC5hcnJvdyR7ZX0geyBzdHJva2U6ICR7dFsiZ2l0IitlXX07IH0KICAgICAgICBgKS5qb2luKGAKYCl9CgogIC5icmFuY2ggewogICAgc3Ryb2tlLXdpZHRoOiAxOwogICAgc3Ryb2tlOiAke3QubGluZUNvbG9yfTsKICAgIHN0cm9rZS1kYXNoYXJyYXk6IDI7CiAgfQogIC5jb21taXQtbGFiZWwgeyBmb250LXNpemU6ICR7dC5jb21taXRMYWJlbEZvbnRTaXplfTsgZmlsbDogJHt0LmNvbW1pdExhYmVsQ29sb3J9O30KICAuY29tbWl0LWxhYmVsLWJrZyB7IGZvbnQtc2l6ZTogJHt0LmNvbW1pdExhYmVsRm9udFNpemV9OyBmaWxsOiAke3QuY29tbWl0TGFiZWxCYWNrZ3JvdW5kfTsgb3BhY2l0eTogMC41OyB9CiAgLnRhZy1sYWJlbCB7IGZvbnQtc2l6ZTogJHt0LnRhZ0xhYmVsRm9udFNpemV9OyBmaWxsOiAke3QudGFnTGFiZWxDb2xvcn07fQogIC50YWctbGFiZWwtYmtnIHsgZmlsbDogJHt0LnRhZ0xhYmVsQmFja2dyb3VuZH07IHN0cm9rZTogJHt0LnRhZ0xhYmVsQm9yZGVyfTsgfQogIC50YWctaG9sZSB7IGZpbGw6ICR7dC50ZXh0Q29sb3J9OyB9CgogIC5jb21taXQtbWVyZ2UgewogICAgc3Ryb2tlOiAke3QucHJpbWFyeUNvbG9yfTsKICAgIGZpbGw6ICR7dC5wcmltYXJ5Q29sb3J9OwogIH0KICAuY29tbWl0LXJldmVyc2UgewogICAgc3Ryb2tlOiAke3QucHJpbWFyeUNvbG9yfTsKICAgIGZpbGw6ICR7dC5wcmltYXJ5Q29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAzOwogIH0KICAuY29tbWl0LWhpZ2hsaWdodC1vdXRlciB7CiAgfQogIC5jb21taXQtaGlnaGxpZ2h0LWlubmVyIHsKICAgIHN0cm9rZTogJHt0LnByaW1hcnlDb2xvcn07CiAgICBmaWxsOiAke3QucHJpbWFyeUNvbG9yfTsKICB9CgogIC5hcnJvdyB7IHN0cm9rZS13aWR0aDogODsgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kOyBmaWxsOiBub25lfQogIC5naXRUaXRsZVRleHQgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIGZvbnQtc2l6ZTogMThweDsKICAgIGZpbGw6ICR7dC50ZXh0Q29sb3J9OwogIH0KYCwiZ2V0U3R5bGVzIiksc3VlPUokZX0pO3ZhciBsdWU9e307aHIobHVlLHtkaWFncmFtOigpPT5lemV9KTt2YXIgZXplLGN1ZT1OKCgpPT57InVzZSBzdHJpY3QiO2V1ZSgpO0dJKCk7YXVlKCk7b3VlKCk7ZXplPXtwYXJzZXI6SmNlLGRiOm82LHJlbmRlcmVyOml1ZSxzdHlsZXM6c3VlfX0pO3ZhciBWSSxmdWUsZHVlPU4oKCk9PnsidXNlIHN0cmljdCI7Vkk9ZnVuY3Rpb24oKXt2YXIgdD1vKGZ1bmN0aW9uKEwsUixPLE0pe2ZvcihPPU98fHt9LE09TC5sZW5ndGg7TS0tO09bTFtNXV09Uik7cmV0dXJuIE99LCJvIiksZT1bNiw4LDEwLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMzLDM1LDM2LDM4LDQwXSxyPVsxLDI2XSxuPVsxLDI3XSxpPVsxLDI4XSxhPVsxLDI5XSxzPVsxLDMwXSxsPVsxLDMxXSx1PVsxLDMyXSxoPVsxLDMzXSxmPVsxLDM0XSxkPVsxLDldLHA9WzEsMTBdLG09WzEsMTFdLGc9WzEsMTJdLHk9WzEsMTNdLHY9WzEsMTRdLHg9WzEsMTVdLGI9WzEsMTZdLHc9WzEsMTldLEM9WzEsMjBdLFQ9WzEsMjFdLEU9WzEsMjJdLEE9WzEsMjNdLFM9WzEsMjVdLF89WzEsMzVdLEk9e3RyYWNlOm8oZnVuY3Rpb24oKXt9LCJ0cmFjZSIpLHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsZ2FudHQ6NCxkb2N1bWVudDo1LEVPRjo2LGxpbmU6NyxTUEFDRTo4LHN0YXRlbWVudDo5LE5MOjEwLHdlZWtkYXk6MTEsd2Vla2RheV9tb25kYXk6MTIsd2Vla2RheV90dWVzZGF5OjEzLHdlZWtkYXlfd2VkbmVzZGF5OjE0LHdlZWtkYXlfdGh1cnNkYXk6MTUsd2Vla2RheV9mcmlkYXk6MTYsd2Vla2RheV9zYXR1cmRheToxNyx3ZWVrZGF5X3N1bmRheToxOCx3ZWVrZW5kOjE5LHdlZWtlbmRfZnJpZGF5OjIwLHdlZWtlbmRfc2F0dXJkYXk6MjEsZGF0ZUZvcm1hdDoyMixpbmNsdXNpdmVFbmREYXRlczoyMyx0b3BBeGlzOjI0LGF4aXNGb3JtYXQ6MjUsdGlja0ludGVydmFsOjI2LGV4Y2x1ZGVzOjI3LGluY2x1ZGVzOjI4LHRvZGF5TWFya2VyOjI5LHRpdGxlOjMwLGFjY190aXRsZTozMSxhY2NfdGl0bGVfdmFsdWU6MzIsYWNjX2Rlc2NyOjMzLGFjY19kZXNjcl92YWx1ZTozNCxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjM1LHNlY3Rpb246MzYsY2xpY2tTdGF0ZW1lbnQ6MzcsdGFza1R4dDozOCx0YXNrRGF0YTozOSxjbGljazo0MCxjYWxsYmFja25hbWU6NDEsY2FsbGJhY2thcmdzOjQyLGhyZWY6NDMsY2xpY2tTdGF0ZW1lbnREZWJ1Zzo0NCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiZ2FudHQiLDY6IkVPRiIsODoiU1BBQ0UiLDEwOiJOTCIsMTI6IndlZWtkYXlfbW9uZGF5IiwxMzoid2Vla2RheV90dWVzZGF5IiwxNDoid2Vla2RheV93ZWRuZXNkYXkiLDE1OiJ3ZWVrZGF5X3RodXJzZGF5IiwxNjoid2Vla2RheV9mcmlkYXkiLDE3OiJ3ZWVrZGF5X3NhdHVyZGF5IiwxODoid2Vla2RheV9zdW5kYXkiLDIwOiJ3ZWVrZW5kX2ZyaWRheSIsMjE6IndlZWtlbmRfc2F0dXJkYXkiLDIyOiJkYXRlRm9ybWF0IiwyMzoiaW5jbHVzaXZlRW5kRGF0ZXMiLDI0OiJ0b3BBeGlzIiwyNToiYXhpc0Zvcm1hdCIsMjY6InRpY2tJbnRlcnZhbCIsMjc6ImV4Y2x1ZGVzIiwyODoiaW5jbHVkZXMiLDI5OiJ0b2RheU1hcmtlciIsMzA6InRpdGxlIiwzMToiYWNjX3RpdGxlIiwzMjoiYWNjX3RpdGxlX3ZhbHVlIiwzMzoiYWNjX2Rlc2NyIiwzNDoiYWNjX2Rlc2NyX3ZhbHVlIiwzNToiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMzY6InNlY3Rpb24iLDM4OiJ0YXNrVHh0IiwzOToidGFza0RhdGEiLDQwOiJjbGljayIsNDE6ImNhbGxiYWNrbmFtZSIsNDI6ImNhbGxiYWNrYXJncyIsNDM6ImhyZWYifSxwcm9kdWN0aW9uc186WzAsWzMsM10sWzUsMF0sWzUsMl0sWzcsMl0sWzcsMV0sWzcsMV0sWzcsMV0sWzExLDFdLFsxMSwxXSxbMTEsMV0sWzExLDFdLFsxMSwxXSxbMTEsMV0sWzExLDFdLFsxOSwxXSxbMTksMV0sWzksMV0sWzksMV0sWzksMV0sWzksMV0sWzksMV0sWzksMV0sWzksMV0sWzksMV0sWzksMV0sWzksMV0sWzksMV0sWzksMl0sWzksMl0sWzksMV0sWzksMV0sWzksMV0sWzksMl0sWzM3LDJdLFszNywzXSxbMzcsM10sWzM3LDRdLFszNywzXSxbMzcsNF0sWzM3LDJdLFs0NCwyXSxbNDQsM10sWzQ0LDNdLFs0NCw0XSxbNDQsM10sWzQ0LDRdLFs0NCwyXV0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKFIsTyxNLEIsRixQLHope3ZhciAkPVAubGVuZ3RoLTE7c3dpdGNoKEYpe2Nhc2UgMTpyZXR1cm4gUFskLTFdO2Nhc2UgMjp0aGlzLiQ9W107YnJlYWs7Y2FzZSAzOlBbJC0xXS5wdXNoKFBbJF0pLHRoaXMuJD1QWyQtMV07YnJlYWs7Y2FzZSA0OmNhc2UgNTp0aGlzLiQ9UFskXTticmVhaztjYXNlIDY6Y2FzZSA3OnRoaXMuJD1bXTticmVhaztjYXNlIDg6Qi5zZXRXZWVrZGF5KCJtb25kYXkiKTticmVhaztjYXNlIDk6Qi5zZXRXZWVrZGF5KCJ0dWVzZGF5Iik7YnJlYWs7Y2FzZSAxMDpCLnNldFdlZWtkYXkoIndlZG5lc2RheSIpO2JyZWFrO2Nhc2UgMTE6Qi5zZXRXZWVrZGF5KCJ0aHVyc2RheSIpO2JyZWFrO2Nhc2UgMTI6Qi5zZXRXZWVrZGF5KCJmcmlkYXkiKTticmVhaztjYXNlIDEzOkIuc2V0V2Vla2RheSgic2F0dXJkYXkiKTticmVhaztjYXNlIDE0OkIuc2V0V2Vla2RheSgic3VuZGF5Iik7YnJlYWs7Y2FzZSAxNTpCLnNldFdlZWtlbmQoImZyaWRheSIpO2JyZWFrO2Nhc2UgMTY6Qi5zZXRXZWVrZW5kKCJzYXR1cmRheSIpO2JyZWFrO2Nhc2UgMTc6Qi5zZXREYXRlRm9ybWF0KFBbJF0uc3Vic3RyKDExKSksdGhpcy4kPVBbJF0uc3Vic3RyKDExKTticmVhaztjYXNlIDE4OkIuZW5hYmxlSW5jbHVzaXZlRW5kRGF0ZXMoKSx0aGlzLiQ9UFskXS5zdWJzdHIoMTgpO2JyZWFrO2Nhc2UgMTk6Qi5Ub3BBeGlzKCksdGhpcy4kPVBbJF0uc3Vic3RyKDgpO2JyZWFrO2Nhc2UgMjA6Qi5zZXRBeGlzRm9ybWF0KFBbJF0uc3Vic3RyKDExKSksdGhpcy4kPVBbJF0uc3Vic3RyKDExKTticmVhaztjYXNlIDIxOkIuc2V0VGlja0ludGVydmFsKFBbJF0uc3Vic3RyKDEzKSksdGhpcy4kPVBbJF0uc3Vic3RyKDEzKTticmVhaztjYXNlIDIyOkIuc2V0RXhjbHVkZXMoUFskXS5zdWJzdHIoOSkpLHRoaXMuJD1QWyRdLnN1YnN0cig5KTticmVhaztjYXNlIDIzOkIuc2V0SW5jbHVkZXMoUFskXS5zdWJzdHIoOSkpLHRoaXMuJD1QWyRdLnN1YnN0cig5KTticmVhaztjYXNlIDI0OkIuc2V0VG9kYXlNYXJrZXIoUFskXS5zdWJzdHIoMTIpKSx0aGlzLiQ9UFskXS5zdWJzdHIoMTIpO2JyZWFrO2Nhc2UgMjc6Qi5zZXREaWFncmFtVGl0bGUoUFskXS5zdWJzdHIoNikpLHRoaXMuJD1QWyRdLnN1YnN0cig2KTticmVhaztjYXNlIDI4OnRoaXMuJD1QWyRdLnRyaW0oKSxCLnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAyOTpjYXNlIDMwOnRoaXMuJD1QWyRdLnRyaW0oKSxCLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAzMTpCLmFkZFNlY3Rpb24oUFskXS5zdWJzdHIoOCkpLHRoaXMuJD1QWyRdLnN1YnN0cig4KTticmVhaztjYXNlIDMzOkIuYWRkVGFzayhQWyQtMV0sUFskXSksdGhpcy4kPSJ0YXNrIjticmVhaztjYXNlIDM0OnRoaXMuJD1QWyQtMV0sQi5zZXRDbGlja0V2ZW50KFBbJC0xXSxQWyRdLG51bGwpO2JyZWFrO2Nhc2UgMzU6dGhpcy4kPVBbJC0yXSxCLnNldENsaWNrRXZlbnQoUFskLTJdLFBbJC0xXSxQWyRdKTticmVhaztjYXNlIDM2OnRoaXMuJD1QWyQtMl0sQi5zZXRDbGlja0V2ZW50KFBbJC0yXSxQWyQtMV0sbnVsbCksQi5zZXRMaW5rKFBbJC0yXSxQWyRdKTticmVhaztjYXNlIDM3OnRoaXMuJD1QWyQtM10sQi5zZXRDbGlja0V2ZW50KFBbJC0zXSxQWyQtMl0sUFskLTFdKSxCLnNldExpbmsoUFskLTNdLFBbJF0pO2JyZWFrO2Nhc2UgMzg6dGhpcy4kPVBbJC0yXSxCLnNldENsaWNrRXZlbnQoUFskLTJdLFBbJF0sbnVsbCksQi5zZXRMaW5rKFBbJC0yXSxQWyQtMV0pO2JyZWFrO2Nhc2UgMzk6dGhpcy4kPVBbJC0zXSxCLnNldENsaWNrRXZlbnQoUFskLTNdLFBbJC0xXSxQWyRdKSxCLnNldExpbmsoUFskLTNdLFBbJC0yXSk7YnJlYWs7Y2FzZSA0MDp0aGlzLiQ9UFskLTFdLEIuc2V0TGluayhQWyQtMV0sUFskXSk7YnJlYWs7Y2FzZSA0MTpjYXNlIDQ3OnRoaXMuJD1QWyQtMV0rIiAiK1BbJF07YnJlYWs7Y2FzZSA0MjpjYXNlIDQzOmNhc2UgNDU6dGhpcy4kPVBbJC0yXSsiICIrUFskLTFdKyIgIitQWyRdO2JyZWFrO2Nhc2UgNDQ6Y2FzZSA0Njp0aGlzLiQ9UFskLTNdKyIgIitQWyQtMl0rIiAiK1BbJC0xXSsiICIrUFskXTticmVha319LCJhbm9ueW1vdXMiKSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LHQoZSxbMiwyXSx7NTozfSksezY6WzEsNF0sNzo1LDg6WzEsNl0sOTo3LDEwOlsxLDhdLDExOjE3LDEyOnIsMTM6biwxNDppLDE1OmEsMTY6cywxNzpsLDE4OnUsMTk6MTgsMjA6aCwyMTpmLDIyOmQsMjM6cCwyNDptLDI1OmcsMjY6eSwyNzp2LDI4OngsMjk6YiwzMDp3LDMxOkMsMzM6VCwzNTpFLDM2OkEsMzc6MjQsMzg6Uyw0MDpffSx0KGUsWzIsN10sezE6WzIsMV19KSx0KGUsWzIsM10pLHs5OjM2LDExOjE3LDEyOnIsMTM6biwxNDppLDE1OmEsMTY6cywxNzpsLDE4OnUsMTk6MTgsMjA6aCwyMTpmLDIyOmQsMjM6cCwyNDptLDI1OmcsMjY6eSwyNzp2LDI4OngsMjk6YiwzMDp3LDMxOkMsMzM6VCwzNTpFLDM2OkEsMzc6MjQsMzg6Uyw0MDpffSx0KGUsWzIsNV0pLHQoZSxbMiw2XSksdChlLFsyLDE3XSksdChlLFsyLDE4XSksdChlLFsyLDE5XSksdChlLFsyLDIwXSksdChlLFsyLDIxXSksdChlLFsyLDIyXSksdChlLFsyLDIzXSksdChlLFsyLDI0XSksdChlLFsyLDI1XSksdChlLFsyLDI2XSksdChlLFsyLDI3XSksezMyOlsxLDM3XX0sezM0OlsxLDM4XX0sdChlLFsyLDMwXSksdChlLFsyLDMxXSksdChlLFsyLDMyXSksezM5OlsxLDM5XX0sdChlLFsyLDhdKSx0KGUsWzIsOV0pLHQoZSxbMiwxMF0pLHQoZSxbMiwxMV0pLHQoZSxbMiwxMl0pLHQoZSxbMiwxM10pLHQoZSxbMiwxNF0pLHQoZSxbMiwxNV0pLHQoZSxbMiwxNl0pLHs0MTpbMSw0MF0sNDM6WzEsNDFdfSx0KGUsWzIsNF0pLHQoZSxbMiwyOF0pLHQoZSxbMiwyOV0pLHQoZSxbMiwzM10pLHQoZSxbMiwzNF0sezQyOlsxLDQyXSw0MzpbMSw0M119KSx0KGUsWzIsNDBdLHs0MTpbMSw0NF19KSx0KGUsWzIsMzVdLHs0MzpbMSw0NV19KSx0KGUsWzIsMzZdKSx0KGUsWzIsMzhdLHs0MjpbMSw0Nl19KSx0KGUsWzIsMzddKSx0KGUsWzIsMzldKV0sZGVmYXVsdEFjdGlvbnM6e30scGFyc2VFcnJvcjpvKGZ1bmN0aW9uKFIsTyl7aWYoTy5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKFIpO2Vsc2V7dmFyIE09bmV3IEVycm9yKFIpO3Rocm93IE0uaGFzaD1PLE19fSwicGFyc2VFcnJvciIpLHBhcnNlOm8oZnVuY3Rpb24oUil7dmFyIE89dGhpcyxNPVswXSxCPVtdLEY9W251bGxdLFA9W10sej10aGlzLnRhYmxlLCQ9IiIsSD0wLFE9MCxqPTAsaWU9MixuZT0xLGxlPVAuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksaGU9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxLPXt5eTp7fX07Zm9yKHZhciBYIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksWCkmJihLLnl5W1hdPXRoaXMueXlbWF0pO2hlLnNldElucHV0KFIsSy55eSksSy55eS5sZXhlcj1oZSxLLnl5LnBhcnNlcj10aGlzLHR5cGVvZiBoZS55eWxsb2M+InUiJiYoaGUueXlsbG9jPXt9KTt2YXIgdGU9aGUueXlsbG9jO1AucHVzaCh0ZSk7dmFyIEo9aGUub3B0aW9ucyYmaGUub3B0aW9ucy5yYW5nZXM7dHlwZW9mIEsueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9Sy55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBzZShXKXtNLmxlbmd0aD1NLmxlbmd0aC0yKlcsRi5sZW5ndGg9Ri5sZW5ndGgtVyxQLmxlbmd0aD1QLmxlbmd0aC1XfW8oc2UsInBvcFN0YWNrIik7ZnVuY3Rpb24gdWUoKXt2YXIgVztyZXR1cm4gVz1CLnBvcCgpfHxoZS5sZXgoKXx8bmUsdHlwZW9mIFchPSJudW1iZXIiJiYoVyBpbnN0YW5jZW9mIEFycmF5JiYoQj1XLFc9Qi5wb3AoKSksVz1PLnN5bWJvbHNfW1ddfHxXKSxXfW8odWUsImxleCIpO2Zvcih2YXIgWixTZSxjZSxhZSxPZSxnZSx6ZT17fSxIZSwkZSxSZSxJZTs7KXtpZihjZT1NW00ubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbY2VdP2FlPXRoaXMuZGVmYXVsdEFjdGlvbnNbY2VdOigoWj09PW51bGx8fHR5cGVvZiBaPiJ1IikmJihaPXVlKCkpLGFlPXpbY2VdJiZ6W2NlXVtaXSksdHlwZW9mIGFlPiJ1Inx8IWFlLmxlbmd0aHx8IWFlWzBdKXt2YXIgYmU9IiI7SWU9W107Zm9yKEhlIGluIHpbY2VdKXRoaXMudGVybWluYWxzX1tIZV0mJkhlPmllJiZJZS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bSGVdKyInIik7aGUuc2hvd1Bvc2l0aW9uP2JlPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKEgrMSkrYDoKYCtoZS5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK0llLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bWl18fFopKyInIjpiZT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhIKzEpKyI6IFVuZXhwZWN0ZWQgIisoWj09bmU/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bWl18fFopKyInIiksdGhpcy5wYXJzZUVycm9yKGJlLHt0ZXh0OmhlLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1taXXx8WixsaW5lOmhlLnl5bGluZW5vLGxvYzp0ZSxleHBlY3RlZDpJZX0pfWlmKGFlWzBdaW5zdGFuY2VvZiBBcnJheSYmYWUubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitjZSsiLCB0b2tlbjogIitaKTtzd2l0Y2goYWVbMF0pe2Nhc2UgMTpNLnB1c2goWiksRi5wdXNoKGhlLnl5dGV4dCksUC5wdXNoKGhlLnl5bGxvYyksTS5wdXNoKGFlWzFdKSxaPW51bGwsU2U/KFo9U2UsU2U9bnVsbCk6KFE9aGUueXlsZW5nLCQ9aGUueXl0ZXh0LEg9aGUueXlsaW5lbm8sdGU9aGUueXlsbG9jLGo+MCYmai0tKTticmVhaztjYXNlIDI6aWYoJGU9dGhpcy5wcm9kdWN0aW9uc19bYWVbMV1dWzFdLHplLiQ9RltGLmxlbmd0aC0kZV0semUuXyQ9e2ZpcnN0X2xpbmU6UFtQLmxlbmd0aC0oJGV8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpQW1AubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46UFtQLmxlbmd0aC0oJGV8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46UFtQLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sSiYmKHplLl8kLnJhbmdlPVtQW1AubGVuZ3RoLSgkZXx8MSldLnJhbmdlWzBdLFBbUC5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxnZT10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoemUsWyQsUSxILEsueXksYWVbMV0sRixQXS5jb25jYXQobGUpKSx0eXBlb2YgZ2U8InUiKXJldHVybiBnZTskZSYmKE09TS5zbGljZSgwLC0xKiRlKjIpLEY9Ri5zbGljZSgwLC0xKiRlKSxQPVAuc2xpY2UoMCwtMSokZSkpLE0ucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1thZVsxXV1bMF0pLEYucHVzaCh6ZS4kKSxQLnB1c2goemUuXyQpLFJlPXpbTVtNLmxlbmd0aC0yXV1bTVtNLmxlbmd0aC0xXV0sTS5wdXNoKFJlKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfSwicGFyc2UiKX0sRD1mdW5jdGlvbigpe3ZhciBMPXtFT0Y6MSxwYXJzZUVycm9yOm8oZnVuY3Rpb24oTyxNKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKE8sTSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoTyl9LCJwYXJzZUVycm9yIiksc2V0SW5wdXQ6byhmdW5jdGlvbihSLE8pe3JldHVybiB0aGlzLnl5PU98fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PVIsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LCJzZXRJbnB1dCIpLGlucHV0Om8oZnVuY3Rpb24oKXt2YXIgUj10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9Uix0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9Uix0aGlzLm1hdGNoZWQrPVI7dmFyIE89Ui5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIE8/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLFJ9LCJpbnB1dCIpLHVucHV0Om8oZnVuY3Rpb24oUil7dmFyIE89Ui5sZW5ndGgsTT1SLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9Uit0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtTyksdGhpcy5vZmZzZXQtPU87dmFyIEI9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksTS5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPU0ubGVuZ3RoLTEpO3ZhciBGPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpNPyhNLmxlbmd0aD09PUIubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStCW0IubGVuZ3RoLU0ubGVuZ3RoXS5sZW5ndGgtTVswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLU99LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bRlswXSxGWzBdK3RoaXMueXlsZW5nLU9dKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sInVucHV0IiksbW9yZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30sIm1vcmUiKSxyZWplY3Q6byhmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sInJlamVjdCIpLGxlc3M6byhmdW5jdGlvbihSKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoUikpfSwibGVzcyIpLHBhc3RJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIFI9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihSLmxlbmd0aD4yMD8iLi4uIjoiIikrUi5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sInBhc3RJbnB1dCIpLHVwY29taW5nSW5wdXQ6byhmdW5jdGlvbigpe3ZhciBSPXRoaXMubWF0Y2g7cmV0dXJuIFIubGVuZ3RoPDIwJiYoUis9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtUi5sZW5ndGgpKSwoUi5zdWJzdHIoMCwyMCkrKFIubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LCJ1cGNvbWluZ0lucHV0Iiksc2hvd1Bvc2l0aW9uOm8oZnVuY3Rpb24oKXt2YXIgUj10aGlzLnBhc3RJbnB1dCgpLE89bmV3IEFycmF5KFIubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gUit0aGlzLnVwY29taW5nSW5wdXQoKStgCmArTysiXiJ9LCJzaG93UG9zaXRpb24iKSx0ZXN0X21hdGNoOm8oZnVuY3Rpb24oUixPKXt2YXIgTSxCLEY7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKEY9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoRi55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxCPVJbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLEImJih0aGlzLnl5bGluZW5vKz1CLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOkI/QltCLmxlbmd0aC0xXS5sZW5ndGgtQltCLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK1JbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9UlswXSx0aGlzLm1hdGNoKz1SWzBdLHRoaXMubWF0Y2hlcz1SLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKFJbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPVJbMF0sTT10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxPLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLE0pcmV0dXJuIE07aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIFAgaW4gRil0aGlzW1BdPUZbUF07cmV0dXJuITF9cmV0dXJuITF9LCJ0ZXN0X21hdGNoIiksbmV4dDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIFIsTyxNLEI7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgRj10aGlzLl9jdXJyZW50UnVsZXMoKSxQPTA7UDxGLmxlbmd0aDtQKyspaWYoTT10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW0ZbUF1dKSxNJiYoIU98fE1bMF0ubGVuZ3RoPk9bMF0ubGVuZ3RoKSl7aWYoTz1NLEI9UCx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihSPXRoaXMudGVzdF9tYXRjaChNLEZbUF0pLFIhPT0hMSlyZXR1cm4gUjtpZih0aGlzLl9iYWNrdHJhY2spe089ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gTz8oUj10aGlzLnRlc3RfbWF0Y2goTyxGW0JdKSxSIT09ITE/UjohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sIm5leHQiKSxsZXg6byhmdW5jdGlvbigpe3ZhciBPPXRoaXMubmV4dCgpO3JldHVybiBPfHx0aGlzLmxleCgpfSwibGV4IiksYmVnaW46byhmdW5jdGlvbihPKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goTyl9LCJiZWdpbiIpLHBvcFN0YXRlOm8oZnVuY3Rpb24oKXt2YXIgTz10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBPPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSwicG9wU3RhdGUiKSxfY3VycmVudFJ1bGVzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSwiX2N1cnJlbnRSdWxlcyIpLHRvcFN0YXRlOm8oZnVuY3Rpb24oTyl7cmV0dXJuIE89dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhPfHwwKSxPPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbT106IklOSVRJQUwifSwidG9wU3RhdGUiKSxwdXNoU3RhdGU6byhmdW5jdGlvbihPKXt0aGlzLmJlZ2luKE8pfSwicHVzaFN0YXRlIiksc3RhdGVTdGFja1NpemU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sInN0YXRlU3RhY2tTaXplIiksb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24oTyxNLEIsRil7dmFyIFA9Rjtzd2l0Y2goQil7Y2FzZSAwOnJldHVybiB0aGlzLmJlZ2luKCJvcGVuX2RpcmVjdGl2ZSIpLCJvcGVuX2RpcmVjdGl2ZSI7YnJlYWs7Y2FzZSAxOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwzMTticmVhaztjYXNlIDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjticmVhaztjYXNlIDM6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDMzO2JyZWFrO2Nhc2UgNDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2JyZWFrO2Nhc2UgNTp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSA2OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDc6cmV0dXJuImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiO2Nhc2UgODpicmVhaztjYXNlIDk6YnJlYWs7Y2FzZSAxMDpicmVhaztjYXNlIDExOnJldHVybiAxMDtjYXNlIDEyOmJyZWFrO2Nhc2UgMTM6YnJlYWs7Y2FzZSAxNDp0aGlzLmJlZ2luKCJocmVmIik7YnJlYWs7Y2FzZSAxNTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxNjpyZXR1cm4gNDM7Y2FzZSAxNzp0aGlzLmJlZ2luKCJjYWxsYmFja25hbWUiKTticmVhaztjYXNlIDE4OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE5OnRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJjYWxsYmFja2FyZ3MiKTticmVhaztjYXNlIDIwOnJldHVybiA0MTtjYXNlIDIxOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDIyOnJldHVybiA0MjtjYXNlIDIzOnRoaXMuYmVnaW4oImNsaWNrIik7YnJlYWs7Y2FzZSAyNDp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyNTpyZXR1cm4gNDA7Y2FzZSAyNjpyZXR1cm4gNDtjYXNlIDI3OnJldHVybiAyMjtjYXNlIDI4OnJldHVybiAyMztjYXNlIDI5OnJldHVybiAyNDtjYXNlIDMwOnJldHVybiAyNTtjYXNlIDMxOnJldHVybiAyNjtjYXNlIDMyOnJldHVybiAyODtjYXNlIDMzOnJldHVybiAyNztjYXNlIDM0OnJldHVybiAyOTtjYXNlIDM1OnJldHVybiAxMjtjYXNlIDM2OnJldHVybiAxMztjYXNlIDM3OnJldHVybiAxNDtjYXNlIDM4OnJldHVybiAxNTtjYXNlIDM5OnJldHVybiAxNjtjYXNlIDQwOnJldHVybiAxNztjYXNlIDQxOnJldHVybiAxODtjYXNlIDQyOnJldHVybiAyMDtjYXNlIDQzOnJldHVybiAyMTtjYXNlIDQ0OnJldHVybiJkYXRlIjtjYXNlIDQ1OnJldHVybiAzMDtjYXNlIDQ2OnJldHVybiJhY2NEZXNjcmlwdGlvbiI7Y2FzZSA0NzpyZXR1cm4gMzY7Y2FzZSA0ODpyZXR1cm4gMzg7Y2FzZSA0OTpyZXR1cm4gMzk7Y2FzZSA1MDpyZXR1cm4iOiI7Y2FzZSA1MTpyZXR1cm4gNjtjYXNlIDUyOnJldHVybiJJTlZBTElEIn19LCJhbm9ueW1vdXMiKSxydWxlczpbL14oPzolJVx7KS9pLC9eKD86YWNjVGl0bGVccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccypce1xzKikvaSwvXig/OltcfV0pL2ksL14oPzpbXlx9XSopL2ksL14oPzolJSg/IVx7KSpbXlxuXSopL2ksL14oPzpbXlx9XSUlKlteXG5dKikvaSwvXig/OiUlKlteXG5dKltcbl0qKS9pLC9eKD86W1xuXSspL2ksL14oPzpccyspL2ksL14oPzolW15cbl0qKS9pLC9eKD86aHJlZltcc10rWyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpjYWxsW1xzXSspL2ksL14oPzpcKFtcc10qXCkpL2ksL14oPzpcKCkvaSwvXig/OlteKF0qKS9pLC9eKD86XCkpL2ksL14oPzpbXildKikvaSwvXig/OmNsaWNrW1xzXSspL2ksL14oPzpbXHNcbl0pL2ksL14oPzpbXlxzXG5dKikvaSwvXig/OmdhbnR0XGIpL2ksL14oPzpkYXRlRm9ybWF0XHNbXiNcbjtdKykvaSwvXig/OmluY2x1c2l2ZUVuZERhdGVzXGIpL2ksL14oPzp0b3BBeGlzXGIpL2ksL14oPzpheGlzRm9ybWF0XHNbXiNcbjtdKykvaSwvXig/OnRpY2tJbnRlcnZhbFxzW14jXG47XSspL2ksL14oPzppbmNsdWRlc1xzW14jXG47XSspL2ksL14oPzpleGNsdWRlc1xzW14jXG47XSspL2ksL14oPzp0b2RheU1hcmtlclxzW15cbjtdKykvaSwvXig/OndlZWtkYXlccyttb25kYXlcYikvaSwvXig/OndlZWtkYXlccyt0dWVzZGF5XGIpL2ksL14oPzp3ZWVrZGF5XHMrd2VkbmVzZGF5XGIpL2ksL14oPzp3ZWVrZGF5XHMrdGh1cnNkYXlcYikvaSwvXig/OndlZWtkYXlccytmcmlkYXlcYikvaSwvXig/OndlZWtkYXlccytzYXR1cmRheVxiKS9pLC9eKD86d2Vla2RheVxzK3N1bmRheVxiKS9pLC9eKD86d2Vla2VuZFxzK2ZyaWRheVxiKS9pLC9eKD86d2Vla2VuZFxzK3NhdHVyZGF5XGIpL2ksL14oPzpcZFxkXGRcZC1cZFxkLVxkXGRcYikvaSwvXig/OnRpdGxlXHNbXlxuXSspL2ksL14oPzphY2NEZXNjcmlwdGlvblxzW14jXG47XSspL2ksL14oPzpzZWN0aW9uXHNbXlxuXSspL2ksL14oPzpbXjpcbl0rKS9pLC9eKD86OlteI1xuO10rKS9pLC9eKD86OikvaSwvXig/OiQpL2ksL14oPzouKS9pXSxjb25kaXRpb25zOnthY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbNiw3XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzRdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbMl0saW5jbHVzaXZlOiExfSxjYWxsYmFja2FyZ3M6e3J1bGVzOlsyMSwyMl0saW5jbHVzaXZlOiExfSxjYWxsYmFja25hbWU6e3J1bGVzOlsxOCwxOSwyMF0saW5jbHVzaXZlOiExfSxocmVmOntydWxlczpbMTUsMTZdLGluY2x1c2l2ZTohMX0sY2xpY2s6e3J1bGVzOlsyNCwyNV0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDMsNSw4LDksMTAsMTEsMTIsMTMsMTQsMTcsMjMsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTJdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gTH0oKTtJLmxleGVyPUQ7ZnVuY3Rpb24gaygpe3RoaXMueXk9e319cmV0dXJuIG8oaywiUGFyc2VyIiksay5wcm90b3R5cGU9SSxJLlBhcnNlcj1rLG5ldyBrfSgpO1ZJLnBhcnNlcj1WSTtmdWU9Vkl9KTt2YXIgcHVlPU1pKChVSSxISSk9PnsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKHQsZSl7dHlwZW9mIFVJPT0ib2JqZWN0IiYmdHlwZW9mIEhJPCJ1Ij9ISS5leHBvcnRzPWUoKTp0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kP2RlZmluZShlKToodD10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0fHxzZWxmKS5kYXlqc19wbHVnaW5faXNvV2Vlaz1lKCl9KShVSSxmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD0iZGF5IjtyZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3ZhciBpPW8oZnVuY3Rpb24obCl7cmV0dXJuIGwuYWRkKDQtbC5pc29XZWVrZGF5KCksdCl9LCJhIiksYT1yLnByb3RvdHlwZTthLmlzb1dlZWtZZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIGkodGhpcykueWVhcigpfSxhLmlzb1dlZWs9ZnVuY3Rpb24obCl7aWYoIXRoaXMuJHV0aWxzKCkudShsKSlyZXR1cm4gdGhpcy5hZGQoNyoobC10aGlzLmlzb1dlZWsoKSksdCk7dmFyIHUsaCxmLGQscD1pKHRoaXMpLG09KHU9dGhpcy5pc29XZWVrWWVhcigpLGg9dGhpcy4kdSxmPShoP24udXRjOm4pKCkueWVhcih1KS5zdGFydE9mKCJ5ZWFyIiksZD00LWYuaXNvV2Vla2RheSgpLGYuaXNvV2Vla2RheSgpPjQmJihkKz03KSxmLmFkZChkLHQpKTtyZXR1cm4gcC5kaWZmKG0sIndlZWsiKSsxfSxhLmlzb1dlZWtkYXk9ZnVuY3Rpb24obCl7cmV0dXJuIHRoaXMuJHV0aWxzKCkudShsKT90aGlzLmRheSgpfHw3OnRoaXMuZGF5KHRoaXMuZGF5KCklNz9sOmwtNyl9O3ZhciBzPWEuc3RhcnRPZjthLnN0YXJ0T2Y9ZnVuY3Rpb24obCx1KXt2YXIgaD10aGlzLiR1dGlscygpLGY9ISFoLnUodSl8fHU7cmV0dXJuIGgucChsKT09PSJpc293ZWVrIj9mP3RoaXMuZGF0ZSh0aGlzLmRhdGUoKS0odGhpcy5pc29XZWVrZGF5KCktMSkpLnN0YXJ0T2YoImRheSIpOnRoaXMuZGF0ZSh0aGlzLmRhdGUoKS0xLSh0aGlzLmlzb1dlZWtkYXkoKS0xKSs3KS5lbmRPZigiZGF5Iik6cy5iaW5kKHRoaXMpKGwsdSl9fX0pfSk7dmFyIG11ZT1NaSgoV0kscUkpPT57InVzZSBzdHJpY3QiOyhmdW5jdGlvbih0LGUpe3R5cGVvZiBXST09Im9iamVjdCImJnR5cGVvZiBxSTwidSI/cUkuZXhwb3J0cz1lKCk6dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZD9kZWZpbmUoZSk6KHQ9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHx8c2VsZikuZGF5anNfcGx1Z2luX2N1c3RvbVBhcnNlRm9ybWF0PWUoKX0pKFdJLGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciB0PXtMVFM6Img6bW06c3MgQSIsTFQ6Img6bW0gQSIsTDoiTU0vREQvWVlZWSIsTEw6Ik1NTU0gRCwgWVlZWSIsTExMOiJNTU1NIEQsIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBNTU1NIEQsIFlZWVkgaDptbSBBIn0sZT0vKFxbW15bXSpcXSl8KFstXzovLiwoKVxzXSspfChBfGF8UXxZWVlZfFlZP3x3dz98TU0/TT9NP3xEb3xERD98aGg/fEhIP3xtbT98c3M/fFN7MSwzfXx6fFpaPykvZyxyPS9cZC8sbj0vXGRcZC8saT0vXGRcZD8vLGE9L1xkKlteLV86LywoKVxzXGRdKy8scz17fSxsPW8oZnVuY3Rpb24oZyl7cmV0dXJuKGc9K2cpKyhnPjY4PzE5MDA6MmUzKX0sImEiKSx1PW8oZnVuY3Rpb24oZyl7cmV0dXJuIGZ1bmN0aW9uKHkpe3RoaXNbZ109K3l9fSwiZiIpLGg9Wy9bKy1dXGRcZDo/KFxkXGQpP3xaLyxmdW5jdGlvbihnKXsodGhpcy56b25lfHwodGhpcy56b25lPXt9KSkub2Zmc2V0PWZ1bmN0aW9uKHkpe2lmKCF5fHx5PT09IloiKXJldHVybiAwO3ZhciB2PXkubWF0Y2goLyhbKy1dfFxkXGQpL2cpLHg9NjAqdlsxXSsoK3ZbMl18fDApO3JldHVybiB4PT09MD8wOnZbMF09PT0iKyI/LXg6eH0oZyl9XSxmPW8oZnVuY3Rpb24oZyl7dmFyIHk9c1tnXTtyZXR1cm4geSYmKHkuaW5kZXhPZj95Onkucy5jb25jYXQoeS5mKSl9LCJ1IiksZD1vKGZ1bmN0aW9uKGcseSl7dmFyIHYseD1zLm1lcmlkaWVtO2lmKHgpe2Zvcih2YXIgYj0xO2I8PTI0O2IrPTEpaWYoZy5pbmRleE9mKHgoYiwwLHkpKT4tMSl7dj1iPjEyO2JyZWFrfX1lbHNlIHY9Zz09PSh5PyJwbSI6IlBNIik7cmV0dXJuIHZ9LCJkIikscD17QTpbYSxmdW5jdGlvbihnKXt0aGlzLmFmdGVybm9vbj1kKGcsITEpfV0sYTpbYSxmdW5jdGlvbihnKXt0aGlzLmFmdGVybm9vbj1kKGcsITApfV0sUTpbcixmdW5jdGlvbihnKXt0aGlzLm1vbnRoPTMqKGctMSkrMX1dLFM6W3IsZnVuY3Rpb24oZyl7dGhpcy5taWxsaXNlY29uZHM9MTAwKitnfV0sU1M6W24sZnVuY3Rpb24oZyl7dGhpcy5taWxsaXNlY29uZHM9MTAqK2d9XSxTU1M6Wy9cZHszfS8sZnVuY3Rpb24oZyl7dGhpcy5taWxsaXNlY29uZHM9K2d9XSxzOltpLHUoInNlY29uZHMiKV0sc3M6W2ksdSgic2Vjb25kcyIpXSxtOltpLHUoIm1pbnV0ZXMiKV0sbW06W2ksdSgibWludXRlcyIpXSxIOltpLHUoImhvdXJzIildLGg6W2ksdSgiaG91cnMiKV0sSEg6W2ksdSgiaG91cnMiKV0saGg6W2ksdSgiaG91cnMiKV0sRDpbaSx1KCJkYXkiKV0sREQ6W24sdSgiZGF5IildLERvOlthLGZ1bmN0aW9uKGcpe3ZhciB5PXMub3JkaW5hbCx2PWcubWF0Y2goL1xkKy8pO2lmKHRoaXMuZGF5PXZbMF0seSlmb3IodmFyIHg9MTt4PD0zMTt4Kz0xKXkoeCkucmVwbGFjZSgvXFt8XF0vZywiIik9PT1nJiYodGhpcy5kYXk9eCl9XSx3OltpLHUoIndlZWsiKV0sd3c6W24sdSgid2VlayIpXSxNOltpLHUoIm1vbnRoIildLE1NOltuLHUoIm1vbnRoIildLE1NTTpbYSxmdW5jdGlvbihnKXt2YXIgeT1mKCJtb250aHMiKSx2PShmKCJtb250aHNTaG9ydCIpfHx5Lm1hcChmdW5jdGlvbih4KXtyZXR1cm4geC5zbGljZSgwLDMpfSkpLmluZGV4T2YoZykrMTtpZih2PDEpdGhyb3cgbmV3IEVycm9yO3RoaXMubW9udGg9diUxMnx8dn1dLE1NTU06W2EsZnVuY3Rpb24oZyl7dmFyIHk9ZigibW9udGhzIikuaW5kZXhPZihnKSsxO2lmKHk8MSl0aHJvdyBuZXcgRXJyb3I7dGhpcy5tb250aD15JTEyfHx5fV0sWTpbL1srLV0/XGQrLyx1KCJ5ZWFyIildLFlZOltuLGZ1bmN0aW9uKGcpe3RoaXMueWVhcj1sKGcpfV0sWVlZWTpbL1xkezR9Lyx1KCJ5ZWFyIildLFo6aCxaWjpofTtmdW5jdGlvbiBtKGcpe3ZhciB5LHY7eT1nLHY9cyYmcy5mb3JtYXRzO2Zvcih2YXIgeD0oZz15LnJlcGxhY2UoLyhcW1teXF1dK10pfChMVFM/fGx7MSw0fXxMezEsNH0pL2csZnVuY3Rpb24oUyxfLEkpe3ZhciBEPUkmJkkudG9VcHBlckNhc2UoKTtyZXR1cm4gX3x8dltJXXx8dFtJXXx8dltEXS5yZXBsYWNlKC8oXFtbXlxdXStdKXwoTU1NTXxNTXxERHxkZGRkKS9nLGZ1bmN0aW9uKGssTCxSKXtyZXR1cm4gTHx8Ui5zbGljZSgxKX0pfSkpLm1hdGNoKGUpLGI9eC5sZW5ndGgsdz0wO3c8Yjt3Kz0xKXt2YXIgQz14W3ddLFQ9cFtDXSxFPVQmJlRbMF0sQT1UJiZUWzFdO3hbd109QT97cmVnZXg6RSxwYXJzZXI6QX06Qy5yZXBsYWNlKC9eXFt8XF0kL2csIiIpfXJldHVybiBmdW5jdGlvbihTKXtmb3IodmFyIF89e30sST0wLEQ9MDtJPGI7SSs9MSl7dmFyIGs9eFtJXTtpZih0eXBlb2Ygaz09InN0cmluZyIpRCs9ay5sZW5ndGg7ZWxzZXt2YXIgTD1rLnJlZ2V4LFI9ay5wYXJzZXIsTz1TLnNsaWNlKEQpLE09TC5leGVjKE8pWzBdO1IuY2FsbChfLE0pLFM9Uy5yZXBsYWNlKE0sIiIpfX1yZXR1cm4gZnVuY3Rpb24oQil7dmFyIEY9Qi5hZnRlcm5vb247aWYoRiE9PXZvaWQgMCl7dmFyIFA9Qi5ob3VycztGP1A8MTImJihCLmhvdXJzKz0xMik6UD09PTEyJiYoQi5ob3Vycz0wKSxkZWxldGUgQi5hZnRlcm5vb259fShfKSxffX1yZXR1cm4gbyhtLCJsIiksZnVuY3Rpb24oZyx5LHYpe3YucC5jdXN0b21QYXJzZUZvcm1hdD0hMCxnJiZnLnBhcnNlVHdvRGlnaXRZZWFyJiYobD1nLnBhcnNlVHdvRGlnaXRZZWFyKTt2YXIgeD15LnByb3RvdHlwZSxiPXgucGFyc2U7eC5wYXJzZT1mdW5jdGlvbih3KXt2YXIgQz13LmRhdGUsVD13LnV0YyxFPXcuYXJnczt0aGlzLiR1PVQ7dmFyIEE9RVsxXTtpZih0eXBlb2YgQT09InN0cmluZyIpe3ZhciBTPUVbMl09PT0hMCxfPUVbM109PT0hMCxJPVN8fF8sRD1FWzJdO18mJihEPUVbMl0pLHM9dGhpcy4kbG9jYWxlKCksIVMmJkQmJihzPXYuTHNbRF0pLHRoaXMuJGQ9ZnVuY3Rpb24oTyxNLEIsRil7dHJ5e2lmKFsieCIsIlgiXS5pbmRleE9mKE0pPi0xKXJldHVybiBuZXcgRGF0ZSgoTT09PSJYIj8xZTM6MSkqTyk7dmFyIFA9bShNKShPKSx6PVAueWVhciwkPVAubW9udGgsSD1QLmRheSxRPVAuaG91cnMsaj1QLm1pbnV0ZXMsaWU9UC5zZWNvbmRzLG5lPVAubWlsbGlzZWNvbmRzLGxlPVAuem9uZSxoZT1QLndlZWssSz1uZXcgRGF0ZSxYPUh8fCh6fHwkPzE6Sy5nZXREYXRlKCkpLHRlPXp8fEsuZ2V0RnVsbFllYXIoKSxKPTA7eiYmISR8fChKPSQ+MD8kLTE6Sy5nZXRNb250aCgpKTt2YXIgc2UsdWU9UXx8MCxaPWp8fDAsU2U9aWV8fDAsY2U9bmV8fDA7cmV0dXJuIGxlP25ldyBEYXRlKERhdGUuVVRDKHRlLEosWCx1ZSxaLFNlLGNlKzYwKmxlLm9mZnNldCoxZTMpKTpCP25ldyBEYXRlKERhdGUuVVRDKHRlLEosWCx1ZSxaLFNlLGNlKSk6KHNlPW5ldyBEYXRlKHRlLEosWCx1ZSxaLFNlLGNlKSxoZSYmKHNlPUYoc2UpLndlZWsoaGUpLnRvRGF0ZSgpKSxzZSl9Y2F0Y2h7cmV0dXJuIG5ldyBEYXRlKCIiKX19KEMsQSxULHYpLHRoaXMuaW5pdCgpLEQmJkQhPT0hMCYmKHRoaXMuJEw9dGhpcy5sb2NhbGUoRCkuJEwpLEkmJkMhPXRoaXMuZm9ybWF0KEEpJiYodGhpcy4kZD1uZXcgRGF0ZSgiIikpLHM9e319ZWxzZSBpZihBIGluc3RhbmNlb2YgQXJyYXkpZm9yKHZhciBrPUEubGVuZ3RoLEw9MTtMPD1rO0wrPTEpe0VbMV09QVtMLTFdO3ZhciBSPXYuYXBwbHkodGhpcyxFKTtpZihSLmlzVmFsaWQoKSl7dGhpcy4kZD1SLiRkLHRoaXMuJEw9Ui4kTCx0aGlzLmluaXQoKTticmVha31MPT09ayYmKHRoaXMuJGQ9bmV3IERhdGUoIiIpKX1lbHNlIGIuY2FsbCh0aGlzLHcpfX19KX0pO3ZhciBndWU9TWkoKFlJLFhJKT0+eyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24odCxlKXt0eXBlb2YgWUk9PSJvYmplY3QiJiZ0eXBlb2YgWEk8InUiP1hJLmV4cG9ydHM9ZSgpOnR5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJmRlZmluZS5hbWQ/ZGVmaW5lKGUpOih0PXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR8fHNlbGYpLmRheWpzX3BsdWdpbl9hZHZhbmNlZEZvcm1hdD1lKCl9KShZSSxmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj1lLnByb3RvdHlwZSxuPXIuZm9ybWF0O3IuZm9ybWF0PWZ1bmN0aW9uKGkpe3ZhciBhPXRoaXMscz10aGlzLiRsb2NhbGUoKTtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG4uYmluZCh0aGlzKShpKTt2YXIgbD10aGlzLiR1dGlscygpLHU9KGl8fCJZWVlZLU1NLUREVEhIOm1tOnNzWiIpLnJlcGxhY2UoL1xbKFteXF1dKyldfFF8d298d3d8d3xXV3xXfHp6enx6fGdnZ2d8R0dHR3xEb3xYfHh8a3sxLDJ9fFMvZyxmdW5jdGlvbihoKXtzd2l0Y2goaCl7Y2FzZSJRIjpyZXR1cm4gTWF0aC5jZWlsKChhLiRNKzEpLzMpO2Nhc2UiRG8iOnJldHVybiBzLm9yZGluYWwoYS4kRCk7Y2FzZSJnZ2dnIjpyZXR1cm4gYS53ZWVrWWVhcigpO2Nhc2UiR0dHRyI6cmV0dXJuIGEuaXNvV2Vla1llYXIoKTtjYXNlIndvIjpyZXR1cm4gcy5vcmRpbmFsKGEud2VlaygpLCJXIik7Y2FzZSJ3IjpjYXNlInd3IjpyZXR1cm4gbC5zKGEud2VlaygpLGg9PT0idyI/MToyLCIwIik7Y2FzZSJXIjpjYXNlIldXIjpyZXR1cm4gbC5zKGEuaXNvV2VlaygpLGg9PT0iVyI/MToyLCIwIik7Y2FzZSJrIjpjYXNlImtrIjpyZXR1cm4gbC5zKFN0cmluZyhhLiRIPT09MD8yNDphLiRIKSxoPT09ImsiPzE6MiwiMCIpO2Nhc2UiWCI6cmV0dXJuIE1hdGguZmxvb3IoYS4kZC5nZXRUaW1lKCkvMWUzKTtjYXNlIngiOnJldHVybiBhLiRkLmdldFRpbWUoKTtjYXNlInoiOnJldHVybiJbIithLm9mZnNldE5hbWUoKSsiXSI7Y2FzZSJ6enoiOnJldHVybiJbIithLm9mZnNldE5hbWUoImxvbmciKSsiXSI7ZGVmYXVsdDpyZXR1cm4gaH19KTtyZXR1cm4gbi5iaW5kKHRoaXMpKHUpfX19KX0pO2Z1bmN0aW9uIE51ZSh0LGUscil7bGV0IG49ITA7Zm9yKDtuOyluPSExLHIuZm9yRWFjaChmdW5jdGlvbihpKXtsZXQgYT0iXlxccyoiK2krIlxccyokIixzPW5ldyBSZWdFeHAoYSk7dFswXS5tYXRjaChzKSYmKGVbaV09ITAsdC5zaGlmdCgxKSxuPSEwKX0pfXZhciB4dWUsaG8sYnVlLHd1ZSxUdWUseXVlLEdjLFpJLEpJLGVPLG1iLGdiLHRPLHJPLGY2LEUxLG5PLGt1ZSxpTyx5YixhTyxzTyxkNixqSSxpemUsYXplLHN6ZSxvemUsbHplLGN6ZSx1emUsaHplLGZ6ZSxkemUscHplLG16ZSxnemUseXplLHZ6ZSx4emUsYnplLHd6ZSxUemUsa3plLEV6ZSxTemUsQ3plLEV1ZSxBemUsX3plLER6ZSxTdWUsTHplLEtJLEN1ZSxBdWUsdTYsazEsUnplLE56ZSxRSSxoNixHaSxfdWUsTXplLENwLEl6ZSx2dWUsT3plLER1ZSxQemUsTHVlLEJ6ZSxGemUsUnVlLE11ZT1OKCgpPT57InVzZSBzdHJpY3QiO3h1ZT1TYSh6MCgpLDEpLGhvPVNhKFI0KCksMSksYnVlPVNhKHB1ZSgpLDEpLHd1ZT1TYShtdWUoKSwxKSxUdWU9U2EoZ3VlKCksMSk7dnQoKTt6dCgpO2lyKCk7bWkoKTtoby5kZWZhdWx0LmV4dGVuZChidWUuZGVmYXVsdCk7aG8uZGVmYXVsdC5leHRlbmQod3VlLmRlZmF1bHQpO2hvLmRlZmF1bHQuZXh0ZW5kKFR1ZS5kZWZhdWx0KTt5dWU9e2ZyaWRheTo1LHNhdHVyZGF5OjZ9LEdjPSIiLFpJPSIiLGVPPSIiLG1iPVtdLGdiPVtdLHRPPW5ldyBNYXAsck89W10sZjY9W10sRTE9IiIsbk89IiIsa3VlPVsiYWN0aXZlIiwiZG9uZSIsImNyaXQiLCJtaWxlc3RvbmUiXSxpTz1bXSx5Yj0hMSxhTz0hMSxzTz0ic3VuZGF5IixkNj0ic2F0dXJkYXkiLGpJPTAsaXplPW8oZnVuY3Rpb24oKXtyTz1bXSxmNj1bXSxFMT0iIixpTz1bXSx1Nj0wLFFJPXZvaWQgMCxoNj12b2lkIDAsR2k9W10sR2M9IiIsWkk9IiIsbk89IiIsSkk9dm9pZCAwLGVPPSIiLG1iPVtdLGdiPVtdLHliPSExLGFPPSExLGpJPTAsdE89bmV3IE1hcCxBcigpLHNPPSJzdW5kYXkiLGQ2PSJzYXR1cmRheSJ9LCJjbGVhciIpLGF6ZT1vKGZ1bmN0aW9uKHQpe1pJPXR9LCJzZXRBeGlzRm9ybWF0Iiksc3plPW8oZnVuY3Rpb24oKXtyZXR1cm4gWkl9LCJnZXRBeGlzRm9ybWF0Iiksb3plPW8oZnVuY3Rpb24odCl7Skk9dH0sInNldFRpY2tJbnRlcnZhbCIpLGx6ZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIEpJfSwiZ2V0VGlja0ludGVydmFsIiksY3plPW8oZnVuY3Rpb24odCl7ZU89dH0sInNldFRvZGF5TWFya2VyIiksdXplPW8oZnVuY3Rpb24oKXtyZXR1cm4gZU99LCJnZXRUb2RheU1hcmtlciIpLGh6ZT1vKGZ1bmN0aW9uKHQpe0djPXR9LCJzZXREYXRlRm9ybWF0IiksZnplPW8oZnVuY3Rpb24oKXt5Yj0hMH0sImVuYWJsZUluY2x1c2l2ZUVuZERhdGVzIiksZHplPW8oZnVuY3Rpb24oKXtyZXR1cm4geWJ9LCJlbmREYXRlc0FyZUluY2x1c2l2ZSIpLHB6ZT1vKGZ1bmN0aW9uKCl7YU89ITB9LCJlbmFibGVUb3BBeGlzIiksbXplPW8oZnVuY3Rpb24oKXtyZXR1cm4gYU99LCJ0b3BBeGlzRW5hYmxlZCIpLGd6ZT1vKGZ1bmN0aW9uKHQpe25PPXR9LCJzZXREaXNwbGF5TW9kZSIpLHl6ZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIG5PfSwiZ2V0RGlzcGxheU1vZGUiKSx2emU9byhmdW5jdGlvbigpe3JldHVybiBHY30sImdldERhdGVGb3JtYXQiKSx4emU9byhmdW5jdGlvbih0KXttYj10LnRvTG93ZXJDYXNlKCkuc3BsaXQoL1tccyxdKy8pfSwic2V0SW5jbHVkZXMiKSxiemU9byhmdW5jdGlvbigpe3JldHVybiBtYn0sImdldEluY2x1ZGVzIiksd3plPW8oZnVuY3Rpb24odCl7Z2I9dC50b0xvd2VyQ2FzZSgpLnNwbGl0KC9bXHMsXSsvKX0sInNldEV4Y2x1ZGVzIiksVHplPW8oZnVuY3Rpb24oKXtyZXR1cm4gZ2J9LCJnZXRFeGNsdWRlcyIpLGt6ZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIHRPfSwiZ2V0TGlua3MiKSxFemU9byhmdW5jdGlvbih0KXtFMT10LHJPLnB1c2godCl9LCJhZGRTZWN0aW9uIiksU3plPW8oZnVuY3Rpb24oKXtyZXR1cm4gck99LCJnZXRTZWN0aW9ucyIpLEN6ZT1vKGZ1bmN0aW9uKCl7bGV0IHQ9dnVlKCksZT0xMCxyPTA7Zm9yKDshdCYmcjxlOyl0PXZ1ZSgpLHIrKztyZXR1cm4gZjY9R2ksZjZ9LCJnZXRUYXNrcyIpLEV1ZT1vKGZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiBuLmluY2x1ZGVzKHQuZm9ybWF0KGUudHJpbSgpKSk/ITE6ci5pbmNsdWRlcygid2Vla2VuZHMiKSYmKHQuaXNvV2Vla2RheSgpPT09eXVlW2Q2XXx8dC5pc29XZWVrZGF5KCk9PT15dWVbZDZdKzEpfHxyLmluY2x1ZGVzKHQuZm9ybWF0KCJkZGRkIikudG9Mb3dlckNhc2UoKSk/ITA6ci5pbmNsdWRlcyh0LmZvcm1hdChlLnRyaW0oKSkpfSwiaXNJbnZhbGlkRGF0ZSIpLEF6ZT1vKGZ1bmN0aW9uKHQpe3NPPXR9LCJzZXRXZWVrZGF5IiksX3plPW8oZnVuY3Rpb24oKXtyZXR1cm4gc099LCJnZXRXZWVrZGF5IiksRHplPW8oZnVuY3Rpb24odCl7ZDY9dH0sInNldFdlZWtlbmQiKSxTdWU9byhmdW5jdGlvbih0LGUscixuKXtpZighci5sZW5ndGh8fHQubWFudWFsRW5kVGltZSlyZXR1cm47bGV0IGk7dC5zdGFydFRpbWUgaW5zdGFuY2VvZiBEYXRlP2k9KDAsaG8uZGVmYXVsdCkodC5zdGFydFRpbWUpOmk9KDAsaG8uZGVmYXVsdCkodC5zdGFydFRpbWUsZSwhMCksaT1pLmFkZCgxLCJkIik7bGV0IGE7dC5lbmRUaW1lIGluc3RhbmNlb2YgRGF0ZT9hPSgwLGhvLmRlZmF1bHQpKHQuZW5kVGltZSk6YT0oMCxoby5kZWZhdWx0KSh0LmVuZFRpbWUsZSwhMCk7bGV0W3MsbF09THplKGksYSxlLHIsbik7dC5lbmRUaW1lPXMudG9EYXRlKCksdC5yZW5kZXJFbmRUaW1lPWx9LCJjaGVja1Rhc2tEYXRlcyIpLEx6ZT1vKGZ1bmN0aW9uKHQsZSxyLG4saSl7bGV0IGE9ITEscz1udWxsO2Zvcig7dDw9ZTspYXx8KHM9ZS50b0RhdGUoKSksYT1FdWUodCxyLG4saSksYSYmKGU9ZS5hZGQoMSwiZCIpKSx0PXQuYWRkKDEsImQiKTtyZXR1cm5bZSxzXX0sImZpeFRhc2tEYXRlcyIpLEtJPW8oZnVuY3Rpb24odCxlLHIpe3I9ci50cmltKCk7bGV0IGk9L15hZnRlclxzKyg/PGlkcz5bXGRcdy0gXSspLy5leGVjKHIpO2lmKGkhPT1udWxsKXtsZXQgcz1udWxsO2ZvcihsZXQgdSBvZiBpLmdyb3Vwcy5pZHMuc3BsaXQoIiAiKSl7bGV0IGg9Q3AodSk7aCE9PXZvaWQgMCYmKCFzfHxoLmVuZFRpbWU+cy5lbmRUaW1lKSYmKHM9aCl9aWYocylyZXR1cm4gcy5lbmRUaW1lO2xldCBsPW5ldyBEYXRlO3JldHVybiBsLnNldEhvdXJzKDAsMCwwLDApLGx9bGV0IGE9KDAsaG8uZGVmYXVsdCkocixlLnRyaW0oKSwhMCk7aWYoYS5pc1ZhbGlkKCkpcmV0dXJuIGEudG9EYXRlKCk7e1kuZGVidWcoIkludmFsaWQgZGF0ZToiK3IpLFkuZGVidWcoIldpdGggZGF0ZSBmb3JtYXQ6IitlLnRyaW0oKSk7bGV0IHM9bmV3IERhdGUocik7aWYocz09PXZvaWQgMHx8aXNOYU4ocy5nZXRUaW1lKCkpfHxzLmdldEZ1bGxZZWFyKCk8LTFlNHx8cy5nZXRGdWxsWWVhcigpPjFlNCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgZGF0ZToiK3IpO3JldHVybiBzfX0sImdldFN0YXJ0RGF0ZSIpLEN1ZT1vKGZ1bmN0aW9uKHQpe2xldCBlPS9eKFxkKyg/OlwuXGQrKT8pKFtNZGhtc3d5XXxtcykkLy5leGVjKHQudHJpbSgpKTtyZXR1cm4gZSE9PW51bGw/W051bWJlci5wYXJzZUZsb2F0KGVbMV0pLGVbMl1dOltOYU4sIm1zIl19LCJwYXJzZUR1cmF0aW9uIiksQXVlPW8oZnVuY3Rpb24odCxlLHIsbj0hMSl7cj1yLnRyaW0oKTtsZXQgYT0vXnVudGlsXHMrKD88aWRzPltcZFx3LSBdKykvLmV4ZWMocik7aWYoYSE9PW51bGwpe2xldCBmPW51bGw7Zm9yKGxldCBwIG9mIGEuZ3JvdXBzLmlkcy5zcGxpdCgiICIpKXtsZXQgbT1DcChwKTttIT09dm9pZCAwJiYoIWZ8fG0uc3RhcnRUaW1lPGYuc3RhcnRUaW1lKSYmKGY9bSl9aWYoZilyZXR1cm4gZi5zdGFydFRpbWU7bGV0IGQ9bmV3IERhdGU7cmV0dXJuIGQuc2V0SG91cnMoMCwwLDAsMCksZH1sZXQgcz0oMCxoby5kZWZhdWx0KShyLGUudHJpbSgpLCEwKTtpZihzLmlzVmFsaWQoKSlyZXR1cm4gbiYmKHM9cy5hZGQoMSwiZCIpKSxzLnRvRGF0ZSgpO2xldCBsPSgwLGhvLmRlZmF1bHQpKHQpLFt1LGhdPUN1ZShyKTtpZighTnVtYmVyLmlzTmFOKHUpKXtsZXQgZj1sLmFkZCh1LGgpO2YuaXNWYWxpZCgpJiYobD1mKX1yZXR1cm4gbC50b0RhdGUoKX0sImdldEVuZERhdGUiKSx1Nj0wLGsxPW8oZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT12b2lkIDA/KHU2PXU2KzEsInRhc2siK3U2KTp0fSwicGFyc2VJZCIpLFJ6ZT1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI7ZS5zdWJzdHIoMCwxKT09PSI6Ij9yPWUuc3Vic3RyKDEsZS5sZW5ndGgpOnI9ZTtsZXQgbj1yLnNwbGl0KCIsIiksaT17fTtOdWUobixpLGt1ZSk7Zm9yKGxldCBzPTA7czxuLmxlbmd0aDtzKyspbltzXT1uW3NdLnRyaW0oKTtsZXQgYT0iIjtzd2l0Y2gobi5sZW5ndGgpe2Nhc2UgMTppLmlkPWsxKCksaS5zdGFydFRpbWU9dC5lbmRUaW1lLGE9blswXTticmVhaztjYXNlIDI6aS5pZD1rMSgpLGkuc3RhcnRUaW1lPUtJKHZvaWQgMCxHYyxuWzBdKSxhPW5bMV07YnJlYWs7Y2FzZSAzOmkuaWQ9azEoblswXSksaS5zdGFydFRpbWU9S0kodm9pZCAwLEdjLG5bMV0pLGE9blsyXTticmVhaztkZWZhdWx0On1yZXR1cm4gYSYmKGkuZW5kVGltZT1BdWUoaS5zdGFydFRpbWUsR2MsYSx5YiksaS5tYW51YWxFbmRUaW1lPSgwLGhvLmRlZmF1bHQpKGEsIllZWVktTU0tREQiLCEwKS5pc1ZhbGlkKCksU3VlKGksR2MsZ2IsbWIpKSxpfSwiY29tcGlsZURhdGEiKSxOemU9byhmdW5jdGlvbih0LGUpe2xldCByO2Uuc3Vic3RyKDAsMSk9PT0iOiI/cj1lLnN1YnN0cigxLGUubGVuZ3RoKTpyPWU7bGV0IG49ci5zcGxpdCgiLCIpLGk9e307TnVlKG4saSxrdWUpO2ZvcihsZXQgYT0wO2E8bi5sZW5ndGg7YSsrKW5bYV09blthXS50cmltKCk7c3dpdGNoKG4ubGVuZ3RoKXtjYXNlIDE6aS5pZD1rMSgpLGkuc3RhcnRUaW1lPXt0eXBlOiJwcmV2VGFza0VuZCIsaWQ6dH0saS5lbmRUaW1lPXtkYXRhOm5bMF19O2JyZWFrO2Nhc2UgMjppLmlkPWsxKCksaS5zdGFydFRpbWU9e3R5cGU6ImdldFN0YXJ0RGF0ZSIsc3RhcnREYXRhOm5bMF19LGkuZW5kVGltZT17ZGF0YTpuWzFdfTticmVhaztjYXNlIDM6aS5pZD1rMShuWzBdKSxpLnN0YXJ0VGltZT17dHlwZToiZ2V0U3RhcnREYXRlIixzdGFydERhdGE6blsxXX0saS5lbmRUaW1lPXtkYXRhOm5bMl19O2JyZWFrO2RlZmF1bHQ6fXJldHVybiBpfSwicGFyc2VEYXRhIiksR2k9W10sX3VlPXt9LE16ZT1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9e3NlY3Rpb246RTEsdHlwZTpFMSxwcm9jZXNzZWQ6ITEsbWFudWFsRW5kVGltZTohMSxyZW5kZXJFbmRUaW1lOm51bGwscmF3OntkYXRhOmV9LHRhc2s6dCxjbGFzc2VzOltdfSxuPU56ZShoNixlKTtyLnJhdy5zdGFydFRpbWU9bi5zdGFydFRpbWUsci5yYXcuZW5kVGltZT1uLmVuZFRpbWUsci5pZD1uLmlkLHIucHJldlRhc2tJZD1oNixyLmFjdGl2ZT1uLmFjdGl2ZSxyLmRvbmU9bi5kb25lLHIuY3JpdD1uLmNyaXQsci5taWxlc3RvbmU9bi5taWxlc3RvbmUsci5vcmRlcj1qSSxqSSsrO2xldCBpPUdpLnB1c2gocik7aDY9ci5pZCxfdWVbci5pZF09aS0xfSwiYWRkVGFzayIpLENwPW8oZnVuY3Rpb24odCl7bGV0IGU9X3VlW3RdO3JldHVybiBHaVtlXX0sImZpbmRUYXNrQnlJZCIpLEl6ZT1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9e3NlY3Rpb246RTEsdHlwZTpFMSxkZXNjcmlwdGlvbjp0LHRhc2s6dCxjbGFzc2VzOltdfSxuPVJ6ZShRSSxlKTtyLnN0YXJ0VGltZT1uLnN0YXJ0VGltZSxyLmVuZFRpbWU9bi5lbmRUaW1lLHIuaWQ9bi5pZCxyLmFjdGl2ZT1uLmFjdGl2ZSxyLmRvbmU9bi5kb25lLHIuY3JpdD1uLmNyaXQsci5taWxlc3RvbmU9bi5taWxlc3RvbmUsUUk9cixmNi5wdXNoKHIpfSwiYWRkVGFza09yZyIpLHZ1ZT1vKGZ1bmN0aW9uKCl7bGV0IHQ9byhmdW5jdGlvbihyKXtsZXQgbj1HaVtyXSxpPSIiO3N3aXRjaChHaVtyXS5yYXcuc3RhcnRUaW1lLnR5cGUpe2Nhc2UicHJldlRhc2tFbmQiOntsZXQgYT1DcChuLnByZXZUYXNrSWQpO24uc3RhcnRUaW1lPWEuZW5kVGltZTticmVha31jYXNlImdldFN0YXJ0RGF0ZSI6aT1LSSh2b2lkIDAsR2MsR2lbcl0ucmF3LnN0YXJ0VGltZS5zdGFydERhdGEpLGkmJihHaVtyXS5zdGFydFRpbWU9aSk7YnJlYWt9cmV0dXJuIEdpW3JdLnN0YXJ0VGltZSYmKEdpW3JdLmVuZFRpbWU9QXVlKEdpW3JdLnN0YXJ0VGltZSxHYyxHaVtyXS5yYXcuZW5kVGltZS5kYXRhLHliKSxHaVtyXS5lbmRUaW1lJiYoR2lbcl0ucHJvY2Vzc2VkPSEwLEdpW3JdLm1hbnVhbEVuZFRpbWU9KDAsaG8uZGVmYXVsdCkoR2lbcl0ucmF3LmVuZFRpbWUuZGF0YSwiWVlZWS1NTS1ERCIsITApLmlzVmFsaWQoKSxTdWUoR2lbcl0sR2MsZ2IsbWIpKSksR2lbcl0ucHJvY2Vzc2VkfSwiY29tcGlsZVRhc2siKSxlPSEwO2ZvcihsZXRbcixuXW9mIEdpLmVudHJpZXMoKSl0KHIpLGU9ZSYmbi5wcm9jZXNzZWQ7cmV0dXJuIGV9LCJjb21waWxlVGFza3MiKSxPemU9byhmdW5jdGlvbih0LGUpe2xldCByPWU7bWUoKS5zZWN1cml0eUxldmVsIT09Imxvb3NlIiYmKHI9KDAseHVlLnNhbml0aXplVXJsKShlKSksdC5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24obil7Q3AobikhPT12b2lkIDAmJihMdWUobiwoKT0+e3dpbmRvdy5vcGVuKHIsIl9zZWxmIil9KSx0Ty5zZXQobixyKSl9KSxEdWUodCwiY2xpY2thYmxlIil9LCJzZXRMaW5rIiksRHVlPW8oZnVuY3Rpb24odCxlKXt0LnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbihyKXtsZXQgbj1DcChyKTtuIT09dm9pZCAwJiZuLmNsYXNzZXMucHVzaChlKX0pfSwic2V0Q2xhc3MiKSxQemU9byhmdW5jdGlvbih0LGUscil7aWYobWUoKS5zZWN1cml0eUxldmVsIT09Imxvb3NlInx8ZT09PXZvaWQgMClyZXR1cm47bGV0IG49W107aWYodHlwZW9mIHI9PSJzdHJpbmciKXtuPXIuc3BsaXQoLywoPz0oPzooPzpbXiJdKiIpezJ9KSpbXiJdKiQpLyk7Zm9yKGxldCBhPTA7YTxuLmxlbmd0aDthKyspe2xldCBzPW5bYV0udHJpbSgpO3Muc3RhcnRzV2l0aCgnIicpJiZzLmVuZHNXaXRoKCciJykmJihzPXMuc3Vic3RyKDEscy5sZW5ndGgtMikpLG5bYV09c319bi5sZW5ndGg9PT0wJiZuLnB1c2godCksQ3AodCkhPT12b2lkIDAmJkx1ZSh0LCgpPT57R3QucnVuRnVuYyhlLC4uLm4pfSl9LCJzZXRDbGlja0Z1biIpLEx1ZT1vKGZ1bmN0aW9uKHQsZSl7aU8ucHVzaChmdW5jdGlvbigpe2xldCByPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtpZD0iJHt0fSJdYCk7ciE9PW51bGwmJnIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7ZSgpfSl9LGZ1bmN0aW9uKCl7bGV0IHI9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2lkPSIke3R9LXRleHQiXWApO3IhPT1udWxsJiZyLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbigpe2UoKX0pfSl9LCJwdXNoRnVuIiksQnplPW8oZnVuY3Rpb24odCxlLHIpe3Quc3BsaXQoIiwiKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe1B6ZShuLGUscil9KSxEdWUodCwiY2xpY2thYmxlIil9LCJzZXRDbGlja0V2ZW50IiksRnplPW8oZnVuY3Rpb24odCl7aU8uZm9yRWFjaChmdW5jdGlvbihlKXtlKHQpfSl9LCJiaW5kRnVuY3Rpb25zIiksUnVlPXtnZXRDb25maWc6bygoKT0+bWUoKS5nYW50dCwiZ2V0Q29uZmlnIiksY2xlYXI6aXplLHNldERhdGVGb3JtYXQ6aHplLGdldERhdGVGb3JtYXQ6dnplLGVuYWJsZUluY2x1c2l2ZUVuZERhdGVzOmZ6ZSxlbmREYXRlc0FyZUluY2x1c2l2ZTpkemUsZW5hYmxlVG9wQXhpczpwemUsdG9wQXhpc0VuYWJsZWQ6bXplLHNldEF4aXNGb3JtYXQ6YXplLGdldEF4aXNGb3JtYXQ6c3plLHNldFRpY2tJbnRlcnZhbDpvemUsZ2V0VGlja0ludGVydmFsOmx6ZSxzZXRUb2RheU1hcmtlcjpjemUsZ2V0VG9kYXlNYXJrZXI6dXplLHNldEFjY1RpdGxlOkxyLGdldEFjY1RpdGxlOlJyLHNldERpYWdyYW1UaXRsZTokcixnZXREaWFncmFtVGl0bGU6SXIsc2V0RGlzcGxheU1vZGU6Z3plLGdldERpc3BsYXlNb2RlOnl6ZSxzZXRBY2NEZXNjcmlwdGlvbjpOcixnZXRBY2NEZXNjcmlwdGlvbjpNcixhZGRTZWN0aW9uOkV6ZSxnZXRTZWN0aW9uczpTemUsZ2V0VGFza3M6Q3plLGFkZFRhc2s6TXplLGZpbmRUYXNrQnlJZDpDcCxhZGRUYXNrT3JnOkl6ZSxzZXRJbmNsdWRlczp4emUsZ2V0SW5jbHVkZXM6YnplLHNldEV4Y2x1ZGVzOnd6ZSxnZXRFeGNsdWRlczpUemUsc2V0Q2xpY2tFdmVudDpCemUsc2V0TGluazpPemUsZ2V0TGlua3M6a3plLGJpbmRGdW5jdGlvbnM6RnplLHBhcnNlRHVyYXRpb246Q3VlLGlzSW52YWxpZERhdGU6RXVlLHNldFdlZWtkYXk6QXplLGdldFdlZWtkYXk6X3plLHNldFdlZWtlbmQ6RHplfTtvKE51ZSwiZ2V0VGFza1RhZ3MiKX0pO3ZhciBwNiwkemUsSXVlLHp6ZSxZdSxHemUsT3VlLFB1ZT1OKCgpPT57InVzZSBzdHJpY3QiO3A2PVNhKFI0KCksMSk7dnQoKTtkcigpO2dyKCk7enQoKTtFaSgpOyR6ZT1vKGZ1bmN0aW9uKCl7WS5kZWJ1ZygiU29tZXRoaW5nIGlzIGNhbGxpbmcsIHNldENvbmYsIHJlbW92ZSB0aGUgY2FsbCIpfSwic2V0Q29uZiIpLEl1ZT17bW9uZGF5OkNoLHR1ZXNkYXk6VDUsd2VkbmVzZGF5Oms1LHRodXJzZGF5Om9jLGZyaWRheTpFNSxzYXR1cmRheTpTNSxzdW5kYXk6eWx9LHp6ZT1vKCh0LGUpPT57bGV0IHI9Wy4uLnRdLm1hcCgoKT0+LTEvMCksbj1bLi4udF0uc29ydCgoYSxzKT0+YS5zdGFydFRpbWUtcy5zdGFydFRpbWV8fGEub3JkZXItcy5vcmRlciksaT0wO2ZvcihsZXQgYSBvZiBuKWZvcihsZXQgcz0wO3M8ci5sZW5ndGg7cysrKWlmKGEuc3RhcnRUaW1lPj1yW3NdKXtyW3NdPWEuZW5kVGltZSxhLm9yZGVyPXMrZSxzPmkmJihpPXMpO2JyZWFrfXJldHVybiBpfSwiZ2V0TWF4SW50ZXJzZWN0aW9ucyIpLEd6ZT1vKGZ1bmN0aW9uKHQsZSxyLG4pe2xldCBpPW1lKCkuZ2FudHQsYT1tZSgpLnNlY3VyaXR5TGV2ZWwsczthPT09InNhbmRib3giJiYocz1HZSgiI2kiK2UpKTtsZXQgbD1hPT09InNhbmRib3giP0dlKHMubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keSk6R2UoImJvZHkiKSx1PWE9PT0ic2FuZGJveCI/cy5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudDpkb2N1bWVudCxoPXUuZ2V0RWxlbWVudEJ5SWQoZSk7WXU9aC5wYXJlbnRFbGVtZW50Lm9mZnNldFdpZHRoLFl1PT09dm9pZCAwJiYoWXU9MTIwMCksaS51c2VXaWR0aCE9PXZvaWQgMCYmKFl1PWkudXNlV2lkdGgpO2xldCBmPW4uZGIuZ2V0VGFza3MoKSxkPVtdO2ZvcihsZXQgUyBvZiBmKWQucHVzaChTLnR5cGUpO2Q9QShkKTtsZXQgcD17fSxtPTIqaS50b3BQYWRkaW5nO2lmKG4uZGIuZ2V0RGlzcGxheU1vZGUoKT09PSJjb21wYWN0Inx8aS5kaXNwbGF5TW9kZT09PSJjb21wYWN0Iil7bGV0IFM9e307Zm9yKGxldCBJIG9mIGYpU1tJLnNlY3Rpb25dPT09dm9pZCAwP1NbSS5zZWN0aW9uXT1bSV06U1tJLnNlY3Rpb25dLnB1c2goSSk7bGV0IF89MDtmb3IobGV0IEkgb2YgT2JqZWN0LmtleXMoUykpe2xldCBEPXp6ZShTW0ldLF8pKzE7Xys9RCxtKz1EKihpLmJhckhlaWdodCtpLmJhckdhcCkscFtJXT1EfX1lbHNle20rPWYubGVuZ3RoKihpLmJhckhlaWdodCtpLmJhckdhcCk7Zm9yKGxldCBTIG9mIGQpcFtTXT1mLmZpbHRlcihfPT5fLnR5cGU9PT1TKS5sZW5ndGh9aC5zZXRBdHRyaWJ1dGUoInZpZXdCb3giLCIwIDAgIitZdSsiICIrbSk7bGV0IGc9bC5zZWxlY3QoYFtpZD0iJHtlfSJdYCkseT1fNSgpLmRvbWFpbihbTTMoZixmdW5jdGlvbihTKXtyZXR1cm4gUy5zdGFydFRpbWV9KSxOMyhmLGZ1bmN0aW9uKFMpe3JldHVybiBTLmVuZFRpbWV9KV0pLnJhbmdlUm91bmQoWzAsWXUtaS5sZWZ0UGFkZGluZy1pLnJpZ2h0UGFkZGluZ10pO2Z1bmN0aW9uIHYoUyxfKXtsZXQgST1TLnN0YXJ0VGltZSxEPV8uc3RhcnRUaW1lLGs9MDtyZXR1cm4gST5EP2s9MTpJPEQmJihrPS0xKSxrfW8odiwidGFza0NvbXBhcmUiKSxmLnNvcnQodikseChmLFl1LG0pLHZuKGcsbSxZdSxpLnVzZU1heFdpZHRoKSxnLmFwcGVuZCgidGV4dCIpLnRleHQobi5kYi5nZXREaWFncmFtVGl0bGUoKSkuYXR0cigieCIsWXUvMikuYXR0cigieSIsaS50aXRsZVRvcE1hcmdpbikuYXR0cigiY2xhc3MiLCJ0aXRsZVRleHQiKTtmdW5jdGlvbiB4KFMsXyxJKXtsZXQgRD1pLmJhckhlaWdodCxrPUQraS5iYXJHYXAsTD1pLnRvcFBhZGRpbmcsUj1pLmxlZnRQYWRkaW5nLE89Z2woKS5kb21haW4oWzAsZC5sZW5ndGhdKS5yYW5nZShbIiMwMEI5RkEiLCIjRjk1MDAyIl0pLmludGVycG9sYXRlKCQ4KTt3KGssTCxSLF8sSSxTLG4uZGIuZ2V0RXhjbHVkZXMoKSxuLmRiLmdldEluY2x1ZGVzKCkpLEMoUixMLF8sSSksYihTLGssTCxSLEQsTyxfLEkpLFQoayxMLFIsRCxPKSxFKFIsTCxfLEkpfW8oeCwibWFrZUdhbnR0Iik7ZnVuY3Rpb24gYihTLF8sSSxELGssTCxSKXtsZXQgTT1bLi4ubmV3IFNldChTLm1hcCh6PT56Lm9yZGVyKSldLm1hcCh6PT5TLmZpbmQoJD0+JC5vcmRlcj09PXopKTtnLmFwcGVuZCgiZyIpLnNlbGVjdEFsbCgicmVjdCIpLmRhdGEoTSkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IixmdW5jdGlvbih6LCQpe3JldHVybiAkPXoub3JkZXIsJCpfK0ktMn0pLmF0dHIoIndpZHRoIixmdW5jdGlvbigpe3JldHVybiBSLWkucmlnaHRQYWRkaW5nLzJ9KS5hdHRyKCJoZWlnaHQiLF8pLmF0dHIoImNsYXNzIixmdW5jdGlvbih6KXtmb3IobGV0WyQsSF1vZiBkLmVudHJpZXMoKSlpZih6LnR5cGU9PT1IKXJldHVybiJzZWN0aW9uIHNlY3Rpb24iKyQlaS5udW1iZXJTZWN0aW9uU3R5bGVzO3JldHVybiJzZWN0aW9uIHNlY3Rpb24wIn0pO2xldCBCPWcuYXBwZW5kKCJnIikuc2VsZWN0QWxsKCJyZWN0IikuZGF0YShTKS5lbnRlcigpLEY9bi5kYi5nZXRMaW5rcygpO2lmKEIuYXBwZW5kKCJyZWN0IikuYXR0cigiaWQiLGZ1bmN0aW9uKHope3JldHVybiB6LmlkfSkuYXR0cigicngiLDMpLmF0dHIoInJ5IiwzKS5hdHRyKCJ4IixmdW5jdGlvbih6KXtyZXR1cm4gei5taWxlc3RvbmU/eSh6LnN0YXJ0VGltZSkrRCsuNSooeSh6LmVuZFRpbWUpLXkoei5zdGFydFRpbWUpKS0uNSprOnkoei5zdGFydFRpbWUpK0R9KS5hdHRyKCJ5IixmdW5jdGlvbih6LCQpe3JldHVybiAkPXoub3JkZXIsJCpfK0l9KS5hdHRyKCJ3aWR0aCIsZnVuY3Rpb24oeil7cmV0dXJuIHoubWlsZXN0b25lP2s6eSh6LnJlbmRlckVuZFRpbWV8fHouZW5kVGltZSkteSh6LnN0YXJ0VGltZSl9KS5hdHRyKCJoZWlnaHQiLGspLmF0dHIoInRyYW5zZm9ybS1vcmlnaW4iLGZ1bmN0aW9uKHosJCl7cmV0dXJuICQ9ei5vcmRlciwoeSh6LnN0YXJ0VGltZSkrRCsuNSooeSh6LmVuZFRpbWUpLXkoei5zdGFydFRpbWUpKSkudG9TdHJpbmcoKSsicHggIisoJCpfK0krLjUqaykudG9TdHJpbmcoKSsicHgifSkuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKHope2xldCAkPSJ0YXNrIixIPSIiO3ouY2xhc3Nlcy5sZW5ndGg+MCYmKEg9ei5jbGFzc2VzLmpvaW4oIiAiKSk7bGV0IFE9MDtmb3IobGV0W2llLG5lXW9mIGQuZW50cmllcygpKXoudHlwZT09PW5lJiYoUT1pZSVpLm51bWJlclNlY3Rpb25TdHlsZXMpO2xldCBqPSIiO3JldHVybiB6LmFjdGl2ZT96LmNyaXQ/ais9IiBhY3RpdmVDcml0IjpqPSIgYWN0aXZlIjp6LmRvbmU/ei5jcml0P2o9IiBkb25lQ3JpdCI6aj0iIGRvbmUiOnouY3JpdCYmKGorPSIgY3JpdCIpLGoubGVuZ3RoPT09MCYmKGo9IiB0YXNrIiksei5taWxlc3RvbmUmJihqPSIgbWlsZXN0b25lICIraiksais9USxqKz0iICIrSCwkK2p9KSxCLmFwcGVuZCgidGV4dCIpLmF0dHIoImlkIixmdW5jdGlvbih6KXtyZXR1cm4gei5pZCsiLXRleHQifSkudGV4dChmdW5jdGlvbih6KXtyZXR1cm4gei50YXNrfSkuYXR0cigiZm9udC1zaXplIixpLmZvbnRTaXplKS5hdHRyKCJ4IixmdW5jdGlvbih6KXtsZXQgJD15KHouc3RhcnRUaW1lKSxIPXkoei5yZW5kZXJFbmRUaW1lfHx6LmVuZFRpbWUpO3oubWlsZXN0b25lJiYoJCs9LjUqKHkoei5lbmRUaW1lKS15KHouc3RhcnRUaW1lKSktLjUqayksei5taWxlc3RvbmUmJihIPSQrayk7bGV0IFE9dGhpcy5nZXRCQm94KCkud2lkdGg7cmV0dXJuIFE+SC0kP0grUSsxLjUqaS5sZWZ0UGFkZGluZz5SPyQrRC01OkgrRCs1OihILSQpLzIrJCtEfSkuYXR0cigieSIsZnVuY3Rpb24oeiwkKXtyZXR1cm4gJD16Lm9yZGVyLCQqXytpLmJhckhlaWdodC8yKyhpLmZvbnRTaXplLzItMikrSX0pLmF0dHIoInRleHQtaGVpZ2h0IixrKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oeil7bGV0ICQ9eSh6LnN0YXJ0VGltZSksSD15KHouZW5kVGltZSk7ei5taWxlc3RvbmUmJihIPSQrayk7bGV0IFE9dGhpcy5nZXRCQm94KCkud2lkdGgsaj0iIjt6LmNsYXNzZXMubGVuZ3RoPjAmJihqPXouY2xhc3Nlcy5qb2luKCIgIikpO2xldCBpZT0wO2ZvcihsZXRbbGUsaGVdb2YgZC5lbnRyaWVzKCkpei50eXBlPT09aGUmJihpZT1sZSVpLm51bWJlclNlY3Rpb25TdHlsZXMpO2xldCBuZT0iIjtyZXR1cm4gei5hY3RpdmUmJih6LmNyaXQ/bmU9ImFjdGl2ZUNyaXRUZXh0IitpZTpuZT0iYWN0aXZlVGV4dCIraWUpLHouZG9uZT96LmNyaXQ/bmU9bmUrIiBkb25lQ3JpdFRleHQiK2llOm5lPW5lKyIgZG9uZVRleHQiK2llOnouY3JpdCYmKG5lPW5lKyIgY3JpdFRleHQiK2llKSx6Lm1pbGVzdG9uZSYmKG5lKz0iIG1pbGVzdG9uZVRleHQiKSxRPkgtJD9IK1ErMS41KmkubGVmdFBhZGRpbmc+Uj9qKyIgdGFza1RleHRPdXRzaWRlTGVmdCB0YXNrVGV4dE91dHNpZGUiK2llKyIgIituZTpqKyIgdGFza1RleHRPdXRzaWRlUmlnaHQgdGFza1RleHRPdXRzaWRlIitpZSsiICIrbmUrIiB3aWR0aC0iK1E6aisiIHRhc2tUZXh0IHRhc2tUZXh0IitpZSsiICIrbmUrIiB3aWR0aC0iK1F9KSxtZSgpLnNlY3VyaXR5TGV2ZWw9PT0ic2FuZGJveCIpe2xldCB6O3o9R2UoIiNpIitlKTtsZXQgJD16Lm5vZGVzKClbMF0uY29udGVudERvY3VtZW50O0IuZmlsdGVyKGZ1bmN0aW9uKEgpe3JldHVybiBGLmhhcyhILmlkKX0pLmVhY2goZnVuY3Rpb24oSCl7dmFyIFE9JC5xdWVyeVNlbGVjdG9yKCIjIitILmlkKSxqPSQucXVlcnlTZWxlY3RvcigiIyIrSC5pZCsiLXRleHQiKTtsZXQgaWU9US5wYXJlbnROb2RlO3ZhciBuZT0kLmNyZWF0ZUVsZW1lbnQoImEiKTtuZS5zZXRBdHRyaWJ1dGUoInhsaW5rOmhyZWYiLEYuZ2V0KEguaWQpKSxuZS5zZXRBdHRyaWJ1dGUoInRhcmdldCIsIl90b3AiKSxpZS5hcHBlbmRDaGlsZChuZSksbmUuYXBwZW5kQ2hpbGQoUSksbmUuYXBwZW5kQ2hpbGQoail9KX19byhiLCJkcmF3UmVjdHMiKTtmdW5jdGlvbiB3KFMsXyxJLEQsayxMLFIsTyl7aWYoUi5sZW5ndGg9PT0wJiZPLmxlbmd0aD09PTApcmV0dXJuO2xldCBNLEI7Zm9yKGxldHtzdGFydFRpbWU6USxlbmRUaW1lOmp9b2YgTCkoTT09PXZvaWQgMHx8UTxNKSYmKE09USksKEI9PT12b2lkIDB8fGo+QikmJihCPWopO2lmKCFNfHwhQilyZXR1cm47aWYoKDAscDYuZGVmYXVsdCkoQikuZGlmZigoMCxwNi5kZWZhdWx0KShNKSwieWVhciIpPjUpe1kud2FybigiVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgbWluIGFuZCBtYXggdGltZSBpcyBtb3JlIHRoYW4gNSB5ZWFycy4gVGhpcyB3aWxsIGNhdXNlIHBlcmZvcm1hbmNlIGlzc3Vlcy4gU2tpcHBpbmcgZHJhd2luZyBleGNsdWRlIGRheXMuIik7cmV0dXJufWxldCBGPW4uZGIuZ2V0RGF0ZUZvcm1hdCgpLFA9W10sej1udWxsLCQ9KDAscDYuZGVmYXVsdCkoTSk7Zm9yKDskLnZhbHVlT2YoKTw9Qjspbi5kYi5pc0ludmFsaWREYXRlKCQsRixSLE8pP3o/ei5lbmQ9JDp6PXtzdGFydDokLGVuZDokfTp6JiYoUC5wdXNoKHopLHo9bnVsbCksJD0kLmFkZCgxLCJkIik7Zy5hcHBlbmQoImciKS5zZWxlY3RBbGwoInJlY3QiKS5kYXRhKFApLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiaWQiLGZ1bmN0aW9uKFEpe3JldHVybiJleGNsdWRlLSIrUS5zdGFydC5mb3JtYXQoIllZWVktTU0tREQiKX0pLmF0dHIoIngiLGZ1bmN0aW9uKFEpe3JldHVybiB5KFEuc3RhcnQpK0l9KS5hdHRyKCJ5IixpLmdyaWRMaW5lU3RhcnRQYWRkaW5nKS5hdHRyKCJ3aWR0aCIsZnVuY3Rpb24oUSl7bGV0IGo9US5lbmQuYWRkKDEsImRheSIpO3JldHVybiB5KGopLXkoUS5zdGFydCl9KS5hdHRyKCJoZWlnaHQiLGstXy1pLmdyaWRMaW5lU3RhcnRQYWRkaW5nKS5hdHRyKCJ0cmFuc2Zvcm0tb3JpZ2luIixmdW5jdGlvbihRLGope3JldHVybih5KFEuc3RhcnQpK0krLjUqKHkoUS5lbmQpLXkoUS5zdGFydCkpKS50b1N0cmluZygpKyJweCAiKyhqKlMrLjUqaykudG9TdHJpbmcoKSsicHgifSkuYXR0cigiY2xhc3MiLCJleGNsdWRlLXJhbmdlIil9byh3LCJkcmF3RXhjbHVkZURheXMiKTtmdW5jdGlvbiBDKFMsXyxJLEQpe2xldCBrPWJBKHkpLnRpY2tTaXplKC1EK18raS5ncmlkTGluZVN0YXJ0UGFkZGluZykudGlja0Zvcm1hdCh3ZChuLmRiLmdldEF4aXNGb3JtYXQoKXx8aS5heGlzRm9ybWF0fHwiJVktJW0tJWQiKSksUj0vXihbMS05XVxkKikobWlsbGlzZWNvbmR8c2Vjb25kfG1pbnV0ZXxob3VyfGRheXx3ZWVrfG1vbnRoKSQvLmV4ZWMobi5kYi5nZXRUaWNrSW50ZXJ2YWwoKXx8aS50aWNrSW50ZXJ2YWwpO2lmKFIhPT1udWxsKXtsZXQgTz1SWzFdLE09UlsyXSxCPW4uZGIuZ2V0V2Vla2RheSgpfHxpLndlZWtkYXk7c3dpdGNoKE0pe2Nhc2UibWlsbGlzZWNvbmQiOmsudGlja3MoYWMuZXZlcnkoTykpO2JyZWFrO2Nhc2Uic2Vjb25kIjprLnRpY2tzKEtzLmV2ZXJ5KE8pKTticmVhaztjYXNlIm1pbnV0ZSI6ay50aWNrcyh2dS5ldmVyeShPKSk7YnJlYWs7Y2FzZSJob3VyIjprLnRpY2tzKHh1LmV2ZXJ5KE8pKTticmVhaztjYXNlImRheSI6ay50aWNrcyhfby5ldmVyeShPKSk7YnJlYWs7Y2FzZSJ3ZWVrIjprLnRpY2tzKEl1ZVtCXS5ldmVyeShPKSk7YnJlYWs7Y2FzZSJtb250aCI6ay50aWNrcyhidS5ldmVyeShPKSk7YnJlYWt9fWlmKGcuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJncmlkIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrUysiLCAiKyhELTUwKSsiKSIpLmNhbGwoaykuc2VsZWN0QWxsKCJ0ZXh0Iikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiZmlsbCIsIiMwMDAiKS5hdHRyKCJzdHJva2UiLCJub25lIikuYXR0cigiZm9udC1zaXplIiwxMCkuYXR0cigiZHkiLCIxZW0iKSxuLmRiLnRvcEF4aXNFbmFibGVkKCl8fGkudG9wQXhpcyl7bGV0IE89eEEoeSkudGlja1NpemUoLUQrXytpLmdyaWRMaW5lU3RhcnRQYWRkaW5nKS50aWNrRm9ybWF0KHdkKG4uZGIuZ2V0QXhpc0Zvcm1hdCgpfHxpLmF4aXNGb3JtYXR8fCIlWS0lbS0lZCIpKTtpZihSIT09bnVsbCl7bGV0IE09UlsxXSxCPVJbMl0sRj1uLmRiLmdldFdlZWtkYXkoKXx8aS53ZWVrZGF5O3N3aXRjaChCKXtjYXNlIm1pbGxpc2Vjb25kIjpPLnRpY2tzKGFjLmV2ZXJ5KE0pKTticmVhaztjYXNlInNlY29uZCI6Ty50aWNrcyhLcy5ldmVyeShNKSk7YnJlYWs7Y2FzZSJtaW51dGUiOk8udGlja3ModnUuZXZlcnkoTSkpO2JyZWFrO2Nhc2UiaG91ciI6Ty50aWNrcyh4dS5ldmVyeShNKSk7YnJlYWs7Y2FzZSJkYXkiOk8udGlja3MoX28uZXZlcnkoTSkpO2JyZWFrO2Nhc2Uid2VlayI6Ty50aWNrcyhJdWVbRl0uZXZlcnkoTSkpO2JyZWFrO2Nhc2UibW9udGgiOk8udGlja3MoYnUuZXZlcnkoTSkpO2JyZWFrfX1nLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiZ3JpZCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK1MrIiwgIitfKyIpIikuY2FsbChPKS5zZWxlY3RBbGwoInRleHQiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJmaWxsIiwiIzAwMCIpLmF0dHIoInN0cm9rZSIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKX19byhDLCJtYWtlR3JpZCIpO2Z1bmN0aW9uIFQoUyxfKXtsZXQgST0wLEQ9T2JqZWN0LmtleXMocCkubWFwKGs9PltrLHBba11dKTtnLmFwcGVuZCgiZyIpLnNlbGVjdEFsbCgidGV4dCIpLmRhdGEoRCkuZW50ZXIoKS5hcHBlbmQoZnVuY3Rpb24oayl7bGV0IEw9a1swXS5zcGxpdChaZS5saW5lQnJlYWtSZWdleCksUj0tKEwubGVuZ3RoLTEpLzIsTz11LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iik7Ty5zZXRBdHRyaWJ1dGUoImR5IixSKyJlbSIpO2ZvcihsZXRbTSxCXW9mIEwuZW50cmllcygpKXtsZXQgRj11LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0c3BhbiIpO0Yuc2V0QXR0cmlidXRlKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJjZW50cmFsIiksRi5zZXRBdHRyaWJ1dGUoIngiLCIxMCIpLE0+MCYmRi5zZXRBdHRyaWJ1dGUoImR5IiwiMWVtIiksRi50ZXh0Q29udGVudD1CLE8uYXBwZW5kQ2hpbGQoRil9cmV0dXJuIE99KS5hdHRyKCJ4IiwxMCkuYXR0cigieSIsZnVuY3Rpb24oayxMKXtpZihMPjApZm9yKGxldCBSPTA7UjxMO1IrKylyZXR1cm4gSSs9RFtMLTFdWzFdLGtbMV0qUy8yK0kqUytfO2Vsc2UgcmV0dXJuIGtbMV0qUy8yK199KS5hdHRyKCJmb250LXNpemUiLGkuc2VjdGlvbkZvbnRTaXplKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oayl7Zm9yKGxldFtMLFJdb2YgZC5lbnRyaWVzKCkpaWYoa1swXT09PVIpcmV0dXJuInNlY3Rpb25UaXRsZSBzZWN0aW9uVGl0bGUiK0wlaS5udW1iZXJTZWN0aW9uU3R5bGVzO3JldHVybiJzZWN0aW9uVGl0bGUifSl9byhULCJ2ZXJ0TGFiZWxzIik7ZnVuY3Rpb24gRShTLF8sSSxEKXtsZXQgaz1uLmRiLmdldFRvZGF5TWFya2VyKCk7aWYoaz09PSJvZmYiKXJldHVybjtsZXQgTD1nLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidG9kYXkiKSxSPW5ldyBEYXRlLE89TC5hcHBlbmQoImxpbmUiKTtPLmF0dHIoIngxIix5KFIpK1MpLmF0dHIoIngyIix5KFIpK1MpLmF0dHIoInkxIixpLnRpdGxlVG9wTWFyZ2luKS5hdHRyKCJ5MiIsRC1pLnRpdGxlVG9wTWFyZ2luKS5hdHRyKCJjbGFzcyIsInRvZGF5IiksayE9PSIiJiZPLmF0dHIoInN0eWxlIixrLnJlcGxhY2UoLywvZywiOyIpKX1vKEUsImRyYXdUb2RheSIpO2Z1bmN0aW9uIEEoUyl7bGV0IF89e30sST1bXTtmb3IobGV0IEQ9MCxrPVMubGVuZ3RoO0Q8azsrK0QpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF8sU1tEXSl8fChfW1NbRF1dPSEwLEkucHVzaChTW0RdKSk7cmV0dXJuIEl9byhBLCJjaGVja1VuaXF1ZSIpfSwiZHJhdyIpLE91ZT17c2V0Q29uZjokemUsZHJhdzpHemV9fSk7dmFyIFZ6ZSxCdWUsRnVlPU4oKCk9PnsidXNlIHN0cmljdCI7VnplPW8odD0+YAogIC5tZXJtYWlkLW1haW4tZm9udCB7CiAgICAgICAgZm9udC1mYW1pbHk6ICR7dC5mb250RmFtaWx5fTsKICB9CgogIC5leGNsdWRlLXJhbmdlIHsKICAgIGZpbGw6ICR7dC5leGNsdWRlQmtnQ29sb3J9OwogIH0KCiAgLnNlY3Rpb24gewogICAgc3Ryb2tlOiBub25lOwogICAgb3BhY2l0eTogMC4yOwogIH0KCiAgLnNlY3Rpb24wIHsKICAgIGZpbGw6ICR7dC5zZWN0aW9uQmtnQ29sb3J9OwogIH0KCiAgLnNlY3Rpb24yIHsKICAgIGZpbGw6ICR7dC5zZWN0aW9uQmtnQ29sb3IyfTsKICB9CgogIC5zZWN0aW9uMSwKICAuc2VjdGlvbjMgewogICAgZmlsbDogJHt0LmFsdFNlY3Rpb25Ca2dDb2xvcn07CiAgICBvcGFjaXR5OiAwLjI7CiAgfQoKICAuc2VjdGlvblRpdGxlMCB7CiAgICBmaWxsOiAke3QudGl0bGVDb2xvcn07CiAgfQoKICAuc2VjdGlvblRpdGxlMSB7CiAgICBmaWxsOiAke3QudGl0bGVDb2xvcn07CiAgfQoKICAuc2VjdGlvblRpdGxlMiB7CiAgICBmaWxsOiAke3QudGl0bGVDb2xvcn07CiAgfQoKICAuc2VjdGlvblRpdGxlMyB7CiAgICBmaWxsOiAke3QudGl0bGVDb2xvcn07CiAgfQoKICAuc2VjdGlvblRpdGxlIHsKICAgIHRleHQtYW5jaG9yOiBzdGFydDsKICAgIGZvbnQtZmFtaWx5OiAke3QuZm9udEZhbWlseX07CiAgfQoKCiAgLyogR3JpZCBhbmQgYXhpcyAqLwoKICAuZ3JpZCAudGljayB7CiAgICBzdHJva2U6ICR7dC5ncmlkQ29sb3J9OwogICAgb3BhY2l0eTogMC44OwogICAgc2hhcGUtcmVuZGVyaW5nOiBjcmlzcEVkZ2VzOwogIH0KCiAgLmdyaWQgLnRpY2sgdGV4dCB7CiAgICBmb250LWZhbWlseTogJHt0LmZvbnRGYW1pbHl9OwogICAgZmlsbDogJHt0LnRleHRDb2xvcn07CiAgfQoKICAuZ3JpZCBwYXRoIHsKICAgIHN0cm9rZS13aWR0aDogMDsKICB9CgoKICAvKiBUb2RheSBsaW5lICovCgogIC50b2RheSB7CiAgICBmaWxsOiBub25lOwogICAgc3Ryb2tlOiAke3QudG9kYXlMaW5lQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAycHg7CiAgfQoKCiAgLyogVGFzayBzdHlsaW5nICovCgogIC8qIERlZmF1bHQgdGFzayAqLwoKICAudGFzayB7CiAgICBzdHJva2Utd2lkdGg6IDI7CiAgfQoKICAudGFza1RleHQgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIGZvbnQtZmFtaWx5OiAke3QuZm9udEZhbWlseX07CiAgfQoKICAudGFza1RleHRPdXRzaWRlUmlnaHQgewogICAgZmlsbDogJHt0LnRhc2tUZXh0RGFya0NvbG9yfTsKICAgIHRleHQtYW5jaG9yOiBzdGFydDsKICAgIGZvbnQtZmFtaWx5OiAke3QuZm9udEZhbWlseX07CiAgfQoKICAudGFza1RleHRPdXRzaWRlTGVmdCB7CiAgICBmaWxsOiAke3QudGFza1RleHREYXJrQ29sb3J9OwogICAgdGV4dC1hbmNob3I6IGVuZDsKICB9CgoKICAvKiBTcGVjaWFsIGNhc2UgY2xpY2thYmxlICovCgogIC50YXNrLmNsaWNrYWJsZSB7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgfQoKICAudGFza1RleHQuY2xpY2thYmxlIHsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGZpbGw6ICR7dC50YXNrVGV4dENsaWNrYWJsZUNvbG9yfSAhaW1wb3J0YW50OwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgfQoKICAudGFza1RleHRPdXRzaWRlTGVmdC5jbGlja2FibGUgewogICAgY3Vyc29yOiBwb2ludGVyOwogICAgZmlsbDogJHt0LnRhc2tUZXh0Q2xpY2thYmxlQ29sb3J9ICFpbXBvcnRhbnQ7CiAgICBmb250LXdlaWdodDogYm9sZDsKICB9CgogIC50YXNrVGV4dE91dHNpZGVSaWdodC5jbGlja2FibGUgewogICAgY3Vyc29yOiBwb2ludGVyOwogICAgZmlsbDogJHt0LnRhc2tUZXh0Q2xpY2thYmxlQ29sb3J9ICFpbXBvcnRhbnQ7CiAgICBmb250LXdlaWdodDogYm9sZDsKICB9CgoKICAvKiBTcGVjaWZpYyB0YXNrIHNldHRpbmdzIGZvciB0aGUgc2VjdGlvbnMqLwoKICAudGFza1RleHQwLAogIC50YXNrVGV4dDEsCiAgLnRhc2tUZXh0MiwKICAudGFza1RleHQzIHsKICAgIGZpbGw6ICR7dC50YXNrVGV4dENvbG9yfTsKICB9CgogIC50YXNrMCwKICAudGFzazEsCiAgLnRhc2syLAogIC50YXNrMyB7CiAgICBmaWxsOiAke3QudGFza0JrZ0NvbG9yfTsKICAgIHN0cm9rZTogJHt0LnRhc2tCb3JkZXJDb2xvcn07CiAgfQoKICAudGFza1RleHRPdXRzaWRlMCwKICAudGFza1RleHRPdXRzaWRlMgogIHsKICAgIGZpbGw6ICR7dC50YXNrVGV4dE91dHNpZGVDb2xvcn07CiAgfQoKICAudGFza1RleHRPdXRzaWRlMSwKICAudGFza1RleHRPdXRzaWRlMyB7CiAgICBmaWxsOiAke3QudGFza1RleHRPdXRzaWRlQ29sb3J9OwogIH0KCgogIC8qIEFjdGl2ZSB0YXNrICovCgogIC5hY3RpdmUwLAogIC5hY3RpdmUxLAogIC5hY3RpdmUyLAogIC5hY3RpdmUzIHsKICAgIGZpbGw6ICR7dC5hY3RpdmVUYXNrQmtnQ29sb3J9OwogICAgc3Ryb2tlOiAke3QuYWN0aXZlVGFza0JvcmRlckNvbG9yfTsKICB9CgogIC5hY3RpdmVUZXh0MCwKICAuYWN0aXZlVGV4dDEsCiAgLmFjdGl2ZVRleHQyLAogIC5hY3RpdmVUZXh0MyB7CiAgICBmaWxsOiAke3QudGFza1RleHREYXJrQ29sb3J9ICFpbXBvcnRhbnQ7CiAgfQoKCiAgLyogQ29tcGxldGVkIHRhc2sgKi8KCiAgLmRvbmUwLAogIC5kb25lMSwKICAuZG9uZTIsCiAgLmRvbmUzIHsKICAgIHN0cm9rZTogJHt0LmRvbmVUYXNrQm9yZGVyQ29sb3J9OwogICAgZmlsbDogJHt0LmRvbmVUYXNrQmtnQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAyOwogIH0KCiAgLmRvbmVUZXh0MCwKICAuZG9uZVRleHQxLAogIC5kb25lVGV4dDIsCiAgLmRvbmVUZXh0MyB7CiAgICBmaWxsOiAke3QudGFza1RleHREYXJrQ29sb3J9ICFpbXBvcnRhbnQ7CiAgfQoKCiAgLyogVGFza3Mgb24gdGhlIGNyaXRpY2FsIGxpbmUgKi8KCiAgLmNyaXQwLAogIC5jcml0MSwKICAuY3JpdDIsCiAgLmNyaXQzIHsKICAgIHN0cm9rZTogJHt0LmNyaXRCb3JkZXJDb2xvcn07CiAgICBmaWxsOiAke3QuY3JpdEJrZ0NvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogMjsKICB9CgogIC5hY3RpdmVDcml0MCwKICAuYWN0aXZlQ3JpdDEsCiAgLmFjdGl2ZUNyaXQyLAogIC5hY3RpdmVDcml0MyB7CiAgICBzdHJva2U6ICR7dC5jcml0Qm9yZGVyQ29sb3J9OwogICAgZmlsbDogJHt0LmFjdGl2ZVRhc2tCa2dDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6IDI7CiAgfQoKICAuZG9uZUNyaXQwLAogIC5kb25lQ3JpdDEsCiAgLmRvbmVDcml0MiwKICAuZG9uZUNyaXQzIHsKICAgIHN0cm9rZTogJHt0LmNyaXRCb3JkZXJDb2xvcn07CiAgICBmaWxsOiAke3QuZG9uZVRhc2tCa2dDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6IDI7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBzaGFwZS1yZW5kZXJpbmc6IGNyaXNwRWRnZXM7CiAgfQoKICAubWlsZXN0b25lIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKSBzY2FsZSgwLjgsMC44KTsKICB9CgogIC5taWxlc3RvbmVUZXh0IHsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICB9CiAgLmRvbmVDcml0VGV4dDAsCiAgLmRvbmVDcml0VGV4dDEsCiAgLmRvbmVDcml0VGV4dDIsCiAgLmRvbmVDcml0VGV4dDMgewogICAgZmlsbDogJHt0LnRhc2tUZXh0RGFya0NvbG9yfSAhaW1wb3J0YW50OwogIH0KCiAgLmFjdGl2ZUNyaXRUZXh0MCwKICAuYWN0aXZlQ3JpdFRleHQxLAogIC5hY3RpdmVDcml0VGV4dDIsCiAgLmFjdGl2ZUNyaXRUZXh0MyB7CiAgICBmaWxsOiAke3QudGFza1RleHREYXJrQ29sb3J9ICFpbXBvcnRhbnQ7CiAgfQoKICAudGl0bGVUZXh0IHsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICBmb250LXNpemU6IDE4cHg7CiAgICBmaWxsOiAke3QudGl0bGVDb2xvcnx8dC50ZXh0Q29sb3J9OwogICAgZm9udC1mYW1pbHk6ICR7dC5mb250RmFtaWx5fTsKICB9CmAsImdldFN0eWxlcyIpLEJ1ZT1WemV9KTt2YXIgJHVlPXt9O2hyKCR1ZSx7ZGlhZ3JhbTooKT0+VXplfSk7dmFyIFV6ZSx6dWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtkdWUoKTtNdWUoKTtQdWUoKTtGdWUoKTtVemU9e3BhcnNlcjpmdWUsZGI6UnVlLHJlbmRlcmVyOk91ZSxzdHlsZXM6QnVlfX0pO3ZhciBVdWUsSHVlPU4oKCk9PnsidXNlIHN0cmljdCI7a3AoKTt2dCgpO1V1ZT17cGFyc2U6byhhc3luYyB0PT57bGV0IGU9YXdhaXQgdW8oImluZm8iLHQpO1kuZGVidWcoZSl9LCJwYXJzZSIpfX0pO3ZhciB2YixvTz1OKCgpPT57dmI9e25hbWU6Im1lcm1haWQiLHZlcnNpb246IjExLjYuMCIsZGVzY3JpcHRpb246Ik1hcmtkb3duLWlzaCBzeW50YXggZm9yIGdlbmVyYXRpbmcgZmxvd2NoYXJ0cywgbWluZG1hcHMsIHNlcXVlbmNlIGRpYWdyYW1zLCBjbGFzcyBkaWFncmFtcywgZ2FudHQgY2hhcnRzLCBnaXQgZ3JhcGhzIGFuZCBtb3JlLiIsdHlwZToibW9kdWxlIixtb2R1bGU6Ii4vZGlzdC9tZXJtYWlkLmNvcmUubWpzIix0eXBlczoiLi9kaXN0L21lcm1haWQuZC50cyIsZXhwb3J0czp7Ii4iOnt0eXBlczoiLi9kaXN0L21lcm1haWQuZC50cyIsaW1wb3J0OiIuL2Rpc3QvbWVybWFpZC5jb3JlLm1qcyIsZGVmYXVsdDoiLi9kaXN0L21lcm1haWQuY29yZS5tanMifSwiLi8qIjoiLi8qIn0sa2V5d29yZHM6WyJkaWFncmFtIiwibWFya2Rvd24iLCJmbG93Y2hhcnQiLCJzZXF1ZW5jZSBkaWFncmFtIiwiZ2FudHQiLCJjbGFzcyBkaWFncmFtIiwiZ2l0IGdyYXBoIiwibWluZG1hcCIsInBhY2tldCBkaWFncmFtIiwiYzQgZGlhZ3JhbSIsImVyIGRpYWdyYW0iLCJwaWUgY2hhcnQiLCJwaWUgZGlhZ3JhbSIsInF1YWRyYW50IGNoYXJ0IiwicmVxdWlyZW1lbnQgZGlhZ3JhbSIsImdyYXBoIl0sc2NyaXB0czp7Y2xlYW46InJpbXJhZiBkaXN0IixkZXY6InBucG0gLXcgZGV2IiwiZG9jczpjb2RlIjoidHlwZWRvYyBzcmMvZGVmYXVsdENvbmZpZy50cyBzcmMvY29uZmlnLnRzIHNyYy9tZXJtYWlkLnRzICYmIHByZXR0aWVyIC0td3JpdGUgLi9zcmMvZG9jcy9jb25maWcvc2V0dXAiLCJkb2NzOmJ1aWxkIjoicmltcmFmIC4uLy4uL2RvY3MgJiYgcG5wbSBkb2NzOmNvZGUgJiYgcG5wbSBkb2NzOnNwZWxsY2hlY2sgJiYgdHN4IHNjcmlwdHMvZG9jcy5jbGkubXRzIiwiZG9jczp2ZXJpZnkiOiJwbnBtIGRvY3M6Y29kZSAmJiBwbnBtIGRvY3M6c3BlbGxjaGVjayAmJiB0c3ggc2NyaXB0cy9kb2NzLmNsaS5tdHMgLS12ZXJpZnkiLCJkb2NzOnByZTp2aXRlcHJlc3MiOiJwbnBtIC0tZmlsdGVyIC4vc3JjL2RvY3MgcHJlZmV0Y2ggJiYgcmltcmFmIHNyYy92aXRlcHJlc3MgJiYgcG5wbSBkb2NzOmNvZGUgJiYgdHN4IHNjcmlwdHMvZG9jcy5jbGkubXRzIC0tdml0ZXByZXNzICYmIHBucG0gLS1maWx0ZXIgLi9zcmMvdml0ZXByZXNzIGluc3RhbGwgLS1uby1mcm96ZW4tbG9ja2ZpbGUgLS1pZ25vcmUtc2NyaXB0cyIsImRvY3M6YnVpbGQ6dml0ZXByZXNzIjoicG5wbSBkb2NzOnByZTp2aXRlcHJlc3MgJiYgKGNkIHNyYy92aXRlcHJlc3MgJiYgcG5wbSBydW4gYnVpbGQpICYmIGNweSAtLWZsYXQgc3JjL2RvY3MvbGFuZGluZy8gLi9zcmMvdml0ZXByZXNzLy52aXRlcHJlc3MvZGlzdC9sYW5kaW5nIiwiZG9jczpkZXYiOidwbnBtIGRvY3M6cHJlOnZpdGVwcmVzcyAmJiBjb25jdXJyZW50bHkgInBucG0gLS1maWx0ZXIgLi9zcmMvdml0ZXByZXNzIGRldiIgInRzeCBzY3JpcHRzL2RvY3MuY2xpLm10cyAtLXdhdGNoIC0tdml0ZXByZXNzIicsImRvY3M6ZGV2OmRvY2tlciI6J3BucG0gZG9jczpwcmU6dml0ZXByZXNzICYmIGNvbmN1cnJlbnRseSAicG5wbSAtLWZpbHRlciAuL3NyYy92aXRlcHJlc3MgZGV2OmRvY2tlciIgInRzeCBzY3JpcHRzL2RvY3MuY2xpLm10cyAtLXdhdGNoIC0tdml0ZXByZXNzIicsImRvY3M6c2VydmUiOiJwbnBtIGRvY3M6YnVpbGQ6dml0ZXByZXNzICYmIHZpdGVwcmVzcyBzZXJ2ZSBzcmMvdml0ZXByZXNzIiwiZG9jczpzcGVsbGNoZWNrIjonY3NwZWxsICJzcmMvZG9jcy8qKi8qLm1kIicsImRvY3M6cmVsZWFzZS12ZXJzaW9uIjoidHN4IHNjcmlwdHMvdXBkYXRlLXJlbGVhc2UtdmVyc2lvbi5tdHMiLCJkb2NzOnZlcmlmeS12ZXJzaW9uIjoidHN4IHNjcmlwdHMvdXBkYXRlLXJlbGVhc2UtdmVyc2lvbi5tdHMgLS12ZXJpZnkiLCJ0eXBlczpidWlsZC1jb25maWciOiJ0c3ggc2NyaXB0cy9jcmVhdGUtdHlwZXMtZnJvbS1qc29uLXNjaGVtYS5tdHMiLCJ0eXBlczp2ZXJpZnktY29uZmlnIjoidHN4IHNjcmlwdHMvY3JlYXRlLXR5cGVzLWZyb20tanNvbi1zY2hlbWEubXRzIC0tdmVyaWZ5IixjaGVja0NpcmNsZToibnB4IG1hZGdlIC0tY2lyY3VsYXIgLi9zcmMiLHByZXB1Ymxpc2hPbmx5OiJwbnBtIGRvY3M6dmVyaWZ5LXZlcnNpb24ifSxyZXBvc2l0b3J5Ont0eXBlOiJnaXQiLHVybDoiaHR0cHM6Ly9naXRodWIuY29tL21lcm1haWQtanMvbWVybWFpZCJ9LGF1dGhvcjoiS251dCBTdmVpZHF2aXN0IixsaWNlbnNlOiJNSVQiLHN0YW5kYXJkOntpZ25vcmU6WyIqKi9wYXJzZXIvKi5qcyIsImRpc3QvKiovKi5qcyIsImN5cHJlc3MvKiovKi5qcyJdLGdsb2JhbHM6WyJwYWdlIl19LGRlcGVuZGVuY2llczp7IkBicmFpbnRyZWUvc2FuaXRpemUtdXJsIjoiXjcuMC40IiwiQGljb25pZnkvdXRpbHMiOiJeMi4xLjMzIiwiQG1lcm1haWQtanMvcGFyc2VyIjoid29ya3NwYWNlOl4iLCJAdHlwZXMvZDMiOiJeNy40LjMiLGN5dG9zY2FwZToiXjMuMjkuMyIsImN5dG9zY2FwZS1jb3NlLWJpbGtlbnQiOiJeNC4xLjAiLCJjeXRvc2NhcGUtZmNvc2UiOiJeMi4yLjAiLGQzOiJeNy45LjAiLCJkMy1zYW5rZXkiOiJeMC4xMi4zIiwiZGFncmUtZDMtZXMiOiI3LjAuMTEiLGRheWpzOiJeMS4xMS4xMyIsZG9tcHVyaWZ5OiJeMy4yLjQiLGthdGV4OiJeMC4xNi45IixraHJvbWE6Il4yLjEuMCIsImxvZGFzaC1lcyI6Il40LjE3LjIxIixtYXJrZWQ6Il4xNS4wLjciLHJvdWdoanM6Il40LjYuNiIsc3R5bGlzOiJeNC4zLjYiLCJ0cy1kZWRlbnQiOiJeMi4yLjAiLHV1aWQ6Il4xMS4xLjAifSxkZXZEZXBlbmRlbmNpZXM6eyJAYWRvYmUvanNvbnNjaGVtYTJtZCI6Il44LjAuMiIsIkBpY29uaWZ5L3R5cGVzIjoiXjIuMC4wIiwiQHR5cGVzL2N5dG9zY2FwZSI6Il4zLjIxLjkiLCJAdHlwZXMvY3l0b3NjYXBlLWZjb3NlIjoiXjIuMi40IiwiQHR5cGVzL2QzLXNhbmtleSI6Il4wLjEyLjQiLCJAdHlwZXMvZDMtc2NhbGUiOiJeNC4wLjkiLCJAdHlwZXMvZDMtc2NhbGUtY2hyb21hdGljIjoiXjMuMS4wIiwiQHR5cGVzL2QzLXNlbGVjdGlvbiI6Il4zLjAuMTEiLCJAdHlwZXMvZDMtc2hhcGUiOiJeMy4xLjciLCJAdHlwZXMvanNkb20iOiJeMjEuMS43IiwiQHR5cGVzL2thdGV4IjoiXjAuMTYuNyIsIkB0eXBlcy9sb2Rhc2gtZXMiOiJeNC4xNy4xMiIsIkB0eXBlcy9taWNyb21hdGNoIjoiXjQuMC45IiwiQHR5cGVzL3N0eWxpcyI6Il40LjIuNyIsIkB0eXBlcy91dWlkIjoiXjEwLjAuMCIsYWp2OiJeOC4xNy4xIixjaG9raWRhcjoiXjQuMC4zIixjb25jdXJyZW50bHk6Il45LjEuMiIsImNzc3RyZWUtdmFsaWRhdG9yIjoiXjQuMC4xIixnbG9iYnk6Il4xNC4wLjIiLGppc29uOiJeMC40LjE4IiwianMtYmFzZTY0IjoiXjMuNy43Iixqc2RvbToiXjI2LjAuMCIsImpzb24tc2NoZW1hLXRvLXR5cGVzY3JpcHQiOiJeMTUuMC40IixtaWNyb21hdGNoOiJeNC4wLjgiLCJwYXRoLWJyb3dzZXJpZnkiOiJeMS4wLjEiLHByZXR0aWVyOiJeMy41LjIiLHJlbWFyazoiXjE1LjAuMSIsInJlbWFyay1mcm9udG1hdHRlciI6Il41LjAuMCIsInJlbWFyay1nZm0iOiJeNC4wLjEiLHJpbXJhZjoiXjYuMC4xIiwic3RhcnQtc2VydmVyLWFuZC10ZXN0IjoiXjIuMC4xMCIsInR5cGUtZmVzdCI6Il40LjM1LjAiLHR5cGVkb2M6Il4wLjI3LjgiLCJ0eXBlZG9jLXBsdWdpbi1tYXJrZG93biI6Il40LjQuMiIsdHlwZXNjcmlwdDoifjUuNy4zIiwidW5pc3QtdXRpbC1mbGF0bWFwIjoiXjEuMC4wIiwidW5pc3QtdXRpbC12aXNpdCI6Il41LjAuMCIsdml0ZXByZXNzOiJeMS4wLjIiLCJ2aXRlcHJlc3MtcGx1Z2luLXNlYXJjaCI6IjEuMC40LWFscGhhLjIyIn0sZmlsZXM6WyJkaXN0LyIsIlJFQURNRS5tZCJdLHB1Ymxpc2hDb25maWc6e2FjY2VzczoicHVibGljIn19fSk7dmFyIFh6ZSxqemUsV3VlLHF1ZT1OKCgpPT57InVzZSBzdHJpY3QiO29PKCk7WHplPXt2ZXJzaW9uOnZiLnZlcnNpb259LGp6ZT1vKCgpPT5YemUudmVyc2lvbiwiZ2V0VmVyc2lvbiIpLFd1ZT17Z2V0VmVyc2lvbjpqemV9fSk7dmFyIHNhLFZjPU4oKCk9PnsidXNlIHN0cmljdCI7ZHIoKTt6dCgpO3NhPW8odD0+e2xldHtzZWN1cml0eUxldmVsOmV9PW1lKCkscj1HZSgiYm9keSIpO2lmKGU9PT0ic2FuZGJveCIpe2xldCBhPUdlKGAjaSR7dH1gKS5ub2RlKCk/LmNvbnRlbnREb2N1bWVudD8/ZG9jdW1lbnQ7cj1HZShhLmJvZHkpfXJldHVybiByLnNlbGVjdChgIyR7dH1gKX0sInNlbGVjdFN2Z0VsZW1lbnQiKX0pO3ZhciBLemUsWXVlLFh1ZT1OKCgpPT57InVzZSBzdHJpY3QiO3Z0KCk7VmMoKTtFaSgpO0t6ZT1vKCh0LGUscik9PntZLmRlYnVnKGByZW5kZXJpbmcgaW5mbyBkaWFncmFtCmArdCk7bGV0IG49c2EoZSk7dm4obiwxMDAsNDAwLCEwKSxuLmFwcGVuZCgiZyIpLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDEwMCkuYXR0cigieSIsNDApLmF0dHIoImNsYXNzIiwidmVyc2lvbiIpLmF0dHIoImZvbnQtc2l6ZSIsMzIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQoYHYke3J9YCl9LCJkcmF3IiksWXVlPXtkcmF3Okt6ZX19KTt2YXIganVlPXt9O2hyKGp1ZSx7ZGlhZ3JhbTooKT0+UXplfSk7dmFyIFF6ZSxLdWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtIdWUoKTtxdWUoKTtYdWUoKTtRemU9e3BhcnNlcjpVdWUsZGI6V3VlLHJlbmRlcmVyOll1ZX19KTt2YXIgSnVlLGxPLG02LGNPLGVHZSx0R2UsckdlLG5HZSxpR2UsYUdlLHNHZSxnNix1Tz1OKCgpPT57InVzZSBzdHJpY3QiO3Z0KCk7bWkoKTtZYSgpO0p1ZT1vci5waWUsbE89e3NlY3Rpb25zOm5ldyBNYXAsc2hvd0RhdGE6ITEsY29uZmlnOkp1ZX0sbTY9bE8uc2VjdGlvbnMsY089bE8uc2hvd0RhdGEsZUdlPXN0cnVjdHVyZWRDbG9uZShKdWUpLHRHZT1vKCgpPT5zdHJ1Y3R1cmVkQ2xvbmUoZUdlKSwiZ2V0Q29uZmlnIiksckdlPW8oKCk9PnttNj1uZXcgTWFwLGNPPWxPLnNob3dEYXRhLEFyKCl9LCJjbGVhciIpLG5HZT1vKCh7bGFiZWw6dCx2YWx1ZTplfSk9PnttNi5oYXModCl8fChtNi5zZXQodCxlKSxZLmRlYnVnKGBhZGRlZCBuZXcgc2VjdGlvbjogJHt0fSwgd2l0aCB2YWx1ZTogJHtlfWApKX0sImFkZFNlY3Rpb24iKSxpR2U9bygoKT0+bTYsImdldFNlY3Rpb25zIiksYUdlPW8odD0+e2NPPXR9LCJzZXRTaG93RGF0YSIpLHNHZT1vKCgpPT5jTywiZ2V0U2hvd0RhdGEiKSxnNj17Z2V0Q29uZmlnOnRHZSxjbGVhcjpyR2Usc2V0RGlhZ3JhbVRpdGxlOiRyLGdldERpYWdyYW1UaXRsZTpJcixzZXRBY2NUaXRsZTpMcixnZXRBY2NUaXRsZTpScixzZXRBY2NEZXNjcmlwdGlvbjpOcixnZXRBY2NEZXNjcmlwdGlvbjpNcixhZGRTZWN0aW9uOm5HZSxnZXRTZWN0aW9uczppR2Usc2V0U2hvd0RhdGE6YUdlLGdldFNob3dEYXRhOnNHZX19KTt2YXIgb0dlLGVoZSx0aGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtrcCgpO3Z0KCk7VDEoKTt1TygpO29HZT1vKCh0LGUpPT57JGModCxlKSxlLnNldFNob3dEYXRhKHQuc2hvd0RhdGEpLHQuc2VjdGlvbnMubWFwKGUuYWRkU2VjdGlvbil9LCJwb3B1bGF0ZURiIiksZWhlPXtwYXJzZTpvKGFzeW5jIHQ9PntsZXQgZT1hd2FpdCB1bygicGllIix0KTtZLmRlYnVnKGUpLG9HZShlLGc2KX0sInBhcnNlIil9fSk7dmFyIGxHZSxyaGUsbmhlPU4oKCk9PnsidXNlIHN0cmljdCI7bEdlPW8odD0+YAogIC5waWVDaXJjbGV7CiAgICBzdHJva2U6ICR7dC5waWVTdHJva2VDb2xvcn07CiAgICBzdHJva2Utd2lkdGggOiAke3QucGllU3Ryb2tlV2lkdGh9OwogICAgb3BhY2l0eSA6ICR7dC5waWVPcGFjaXR5fTsKICB9CiAgLnBpZU91dGVyQ2lyY2xlewogICAgc3Ryb2tlOiAke3QucGllT3V0ZXJTdHJva2VDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6ICR7dC5waWVPdXRlclN0cm9rZVdpZHRofTsKICAgIGZpbGw6IG5vbmU7CiAgfQogIC5waWVUaXRsZVRleHQgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIGZvbnQtc2l6ZTogJHt0LnBpZVRpdGxlVGV4dFNpemV9OwogICAgZmlsbDogJHt0LnBpZVRpdGxlVGV4dENvbG9yfTsKICAgIGZvbnQtZmFtaWx5OiAke3QuZm9udEZhbWlseX07CiAgfQogIC5zbGljZSB7CiAgICBmb250LWZhbWlseTogJHt0LmZvbnRGYW1pbHl9OwogICAgZmlsbDogJHt0LnBpZVNlY3Rpb25UZXh0Q29sb3J9OwogICAgZm9udC1zaXplOiR7dC5waWVTZWN0aW9uVGV4dFNpemV9OwogICAgLy8gZmlsbDogd2hpdGU7CiAgfQogIC5sZWdlbmQgdGV4dCB7CiAgICBmaWxsOiAke3QucGllTGVnZW5kVGV4dENvbG9yfTsKICAgIGZvbnQtZmFtaWx5OiAke3QuZm9udEZhbWlseX07CiAgICBmb250LXNpemU6ICR7dC5waWVMZWdlbmRUZXh0U2l6ZX07CiAgfQpgLCJnZXRTdHlsZXMiKSxyaGU9bEdlfSk7dmFyIGNHZSx1R2UsaWhlLGFoZT1OKCgpPT57InVzZSBzdHJpY3QiO2RyKCk7enQoKTt2dCgpO1ZjKCk7RWkoKTtpcigpO2NHZT1vKHQ9PntsZXQgZT1bLi4udC5lbnRyaWVzKCldLm1hcChuPT4oe2xhYmVsOm5bMF0sdmFsdWU6blsxXX0pKS5zb3J0KChuLGkpPT5pLnZhbHVlLW4udmFsdWUpO3JldHVybiBJNSgpLnZhbHVlKG49Pm4udmFsdWUpKGUpfSwiY3JlYXRlUGllQXJjcyIpLHVHZT1vKCh0LGUscixuKT0+e1kuZGVidWcoYHJlbmRlcmluZyBwaWUgY2hhcnQKYCt0KTtsZXQgaT1uLmRiLGE9bWUoKSxzPUZpKGkuZ2V0Q29uZmlnKCksYS5waWUpLGw9NDAsdT0xOCxoPTQsZj00NTAsZD1mLHA9c2EoZSksbT1wLmFwcGVuZCgiZyIpO20uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrZC8yKyIsIitmLzIrIikiKTtsZXR7dGhlbWVWYXJpYWJsZXM6Z309YSxbeV09Qm8oZy5waWVPdXRlclN0cm9rZVdpZHRoKTt5Pz89MjtsZXQgdj1zLnRleHRQb3NpdGlvbix4PU1hdGgubWluKGQsZikvMi1sLGI9YmwoKS5pbm5lclJhZGl1cygwKS5vdXRlclJhZGl1cyh4KSx3PWJsKCkuaW5uZXJSYWRpdXMoeCp2KS5vdXRlclJhZGl1cyh4KnYpO20uYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsMCkuYXR0cigiY3kiLDApLmF0dHIoInIiLHgreS8yKS5hdHRyKCJjbGFzcyIsInBpZU91dGVyQ2lyY2xlIik7bGV0IEM9aS5nZXRTZWN0aW9ucygpLFQ9Y0dlKEMpLEU9W2cucGllMSxnLnBpZTIsZy5waWUzLGcucGllNCxnLnBpZTUsZy5waWU2LGcucGllNyxnLnBpZTgsZy5waWU5LGcucGllMTAsZy5waWUxMSxnLnBpZTEyXSxBPWd1KEUpO20uc2VsZWN0QWxsKCJteVNsaWNlcyIpLmRhdGEoVCkuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixiKS5hdHRyKCJmaWxsIixrPT5BKGsuZGF0YS5sYWJlbCkpLmF0dHIoImNsYXNzIiwicGllQ2lyY2xlIik7bGV0IFM9MDtDLmZvckVhY2goaz0+e1MrPWt9KSxtLnNlbGVjdEFsbCgibXlTbGljZXMiKS5kYXRhKFQpLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikudGV4dChrPT4oay5kYXRhLnZhbHVlL1MqMTAwKS50b0ZpeGVkKDApKyIlIikuYXR0cigidHJhbnNmb3JtIixrPT4idHJhbnNsYXRlKCIrdy5jZW50cm9pZChrKSsiKSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImNsYXNzIiwic2xpY2UiKSxtLmFwcGVuZCgidGV4dCIpLnRleHQoaS5nZXREaWFncmFtVGl0bGUoKSkuYXR0cigieCIsMCkuYXR0cigieSIsLShmLTUwKS8yKS5hdHRyKCJjbGFzcyIsInBpZVRpdGxlVGV4dCIpO2xldCBfPW0uc2VsZWN0QWxsKCIubGVnZW5kIikuZGF0YShBLmRvbWFpbigpKS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGVnZW5kIikuYXR0cigidHJhbnNmb3JtIiwoayxMKT0+e2xldCBSPXUraCxPPVIqQS5kb21haW4oKS5sZW5ndGgvMixNPTEyKnUsQj1MKlItTztyZXR1cm4idHJhbnNsYXRlKCIrTSsiLCIrQisiKSJ9KTtfLmFwcGVuZCgicmVjdCIpLmF0dHIoIndpZHRoIix1KS5hdHRyKCJoZWlnaHQiLHUpLnN0eWxlKCJmaWxsIixBKS5zdHlsZSgic3Ryb2tlIixBKSxfLmRhdGEoVCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsdStoKS5hdHRyKCJ5Iix1LWgpLnRleHQoaz0+e2xldHtsYWJlbDpMLHZhbHVlOlJ9PWsuZGF0YTtyZXR1cm4gaS5nZXRTaG93RGF0YSgpP2Ake0x9IFske1J9XWA6TH0pO2xldCBJPU1hdGgubWF4KC4uLl8uc2VsZWN0QWxsKCJ0ZXh0Iikubm9kZXMoKS5tYXAoaz0+az8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg/PzApKSxEPWQrbCt1K2grSTtwLmF0dHIoInZpZXdCb3giLGAwIDAgJHtEfSAke2Z9YCksdm4ocCxmLEQscy51c2VNYXhXaWR0aCl9LCJkcmF3IiksaWhlPXtkcmF3OnVHZX19KTt2YXIgc2hlPXt9O2hyKHNoZSx7ZGlhZ3JhbTooKT0+aEdlfSk7dmFyIGhHZSxvaGU9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt0aGUoKTt1TygpO25oZSgpO2FoZSgpO2hHZT17cGFyc2VyOmVoZSxkYjpnNixyZW5kZXJlcjppaGUsc3R5bGVzOnJoZX19KTt2YXIgaE8sdWhlLGhoZT1OKCgpPT57InVzZSBzdHJpY3QiO2hPPWZ1bmN0aW9uKCl7dmFyIHQ9byhmdW5jdGlvbih4ZSxxLHBlLHZlKXtmb3IocGU9cGV8fHt9LHZlPXhlLmxlbmd0aDt2ZS0tO3BlW3hlW3ZlXV09cSk7cmV0dXJuIHBlfSwibyIpLGU9WzEsM10scj1bMSw0XSxuPVsxLDVdLGk9WzEsNl0sYT1bMSw3XSxzPVsxLDQsNSwxMCwxMiwxMywxNCwxOCwyNSwzNSwzNywzOSw0MSw0Miw0OCw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw2MCw2MSw2Myw2NCw2NSw2Niw2N10sbD1bMSw0LDUsMTAsMTIsMTMsMTQsMTgsMjUsMjgsMzUsMzcsMzksNDEsNDIsNDgsNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNjAsNjEsNjMsNjQsNjUsNjYsNjddLHU9WzU1LDU2LDU3XSxoPVsyLDM2XSxmPVsxLDM3XSxkPVsxLDM2XSxwPVsxLDM4XSxtPVsxLDM1XSxnPVsxLDQzXSx5PVsxLDQxXSx2PVsxLDE0XSx4PVsxLDIzXSxiPVsxLDE4XSx3PVsxLDE5XSxDPVsxLDIwXSxUPVsxLDIxXSxFPVsxLDIyXSxBPVsxLDI0XSxTPVsxLDI1XSxfPVsxLDI2XSxJPVsxLDI3XSxEPVsxLDI4XSxrPVsxLDI5XSxMPVsxLDMyXSxSPVsxLDMzXSxPPVsxLDM0XSxNPVsxLDM5XSxCPVsxLDQwXSxGPVsxLDQyXSxQPVsxLDQ0XSx6PVsxLDYyXSwkPVsxLDYxXSxIPVs0LDUsOCwxMCwxMiwxMywxNCwxOCw0NCw0Nyw0OSw1NSw1Niw1Nyw2Myw2NCw2NSw2Niw2N10sUT1bMSw2NV0saj1bMSw2Nl0saWU9WzEsNjddLG5lPVsxLDY4XSxsZT1bMSw2OV0saGU9WzEsNzBdLEs9WzEsNzFdLFg9WzEsNzJdLHRlPVsxLDczXSxKPVsxLDc0XSxzZT1bMSw3NV0sdWU9WzEsNzZdLFo9WzQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE4XSxTZT1bMSw5MF0sY2U9WzEsOTFdLGFlPVsxLDkyXSxPZT1bMSw5OV0sZ2U9WzEsOTNdLHplPVsxLDk2XSxIZT1bMSw5NF0sJGU9WzEsOTVdLFJlPVsxLDk3XSxJZT1bMSw5OF0sYmU9WzEsMTAyXSxXPVsxMCw1NSw1Niw1N10sZGU9WzQsNSw2LDgsMTAsMTEsMTMsMTcsMTgsMTksMjAsNTUsNTYsNTddLHJlPXt0cmFjZTpvKGZ1bmN0aW9uKCl7fSwidHJhY2UiKSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixpZFN0cmluZ1Rva2VuOjMsQUxQSEE6NCxOVU06NSxOT0RFX1NUUklORzo2LERPV046NyxNSU5VUzo4LERFRkFVTFQ6OSxDT01NQToxMCxDT0xPTjoxMSxBTVA6MTIsQlJLVDoxMyxNVUxUOjE0LFVOSUNPREVfVEVYVDoxNSxzdHlsZUNvbXBvbmVudDoxNixVTklUOjE3LFNQQUNFOjE4LFNUWUxFOjE5LFBDVDoyMCxpZFN0cmluZzoyMSxzdHlsZToyMixzdHlsZXNPcHQ6MjMsY2xhc3NEZWZTdGF0ZW1lbnQ6MjQsQ0xBU1NERUY6MjUsc3RhcnQ6MjYsZW9sOjI3LFFVQURSQU5UOjI4LGRvY3VtZW50OjI5LGxpbmU6MzAsc3RhdGVtZW50OjMxLGF4aXNEZXRhaWxzOjMyLHF1YWRyYW50RGV0YWlsczozMyxwb2ludHM6MzQsdGl0bGU6MzUsdGl0bGVfdmFsdWU6MzYsYWNjX3RpdGxlOjM3LGFjY190aXRsZV92YWx1ZTozOCxhY2NfZGVzY3I6MzksYWNjX2Rlc2NyX3ZhbHVlOjQwLGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6NDEsc2VjdGlvbjo0Mix0ZXh0OjQzLHBvaW50X3N0YXJ0OjQ0LHBvaW50X3g6NDUscG9pbnRfeTo0NixjbGFzc19uYW1lOjQ3LCJYLUFYSVMiOjQ4LCJBWElTLVRFWFQtREVMSU1JVEVSIjo0OSwiWS1BWElTIjo1MCxRVUFEUkFOVF8xOjUxLFFVQURSQU5UXzI6NTIsUVVBRFJBTlRfMzo1MyxRVUFEUkFOVF80OjU0LE5FV0xJTkU6NTUsU0VNSTo1NixFT0Y6NTcsYWxwaGFOdW1Ub2tlbjo1OCx0ZXh0Tm9UYWdzVG9rZW46NTksU1RSOjYwLE1EX1NUUjo2MSxhbHBoYU51bTo2MixQVU5DVFVBVElPTjo2MyxQTFVTOjY0LEVRVUFMUzo2NSxET1Q6NjYsVU5ERVJTQ09SRTo2NywkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiQUxQSEEiLDU6Ik5VTSIsNjoiTk9ERV9TVFJJTkciLDc6IkRPV04iLDg6Ik1JTlVTIiw5OiJERUZBVUxUIiwxMDoiQ09NTUEiLDExOiJDT0xPTiIsMTI6IkFNUCIsMTM6IkJSS1QiLDE0OiJNVUxUIiwxNToiVU5JQ09ERV9URVhUIiwxNzoiVU5JVCIsMTg6IlNQQUNFIiwxOToiU1RZTEUiLDIwOiJQQ1QiLDI1OiJDTEFTU0RFRiIsMjg6IlFVQURSQU5UIiwzNToidGl0bGUiLDM2OiJ0aXRsZV92YWx1ZSIsMzc6ImFjY190aXRsZSIsMzg6ImFjY190aXRsZV92YWx1ZSIsMzk6ImFjY19kZXNjciIsNDA6ImFjY19kZXNjcl92YWx1ZSIsNDE6ImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiLDQyOiJzZWN0aW9uIiw0NDoicG9pbnRfc3RhcnQiLDQ1OiJwb2ludF94Iiw0NjoicG9pbnRfeSIsNDc6ImNsYXNzX25hbWUiLDQ4OiJYLUFYSVMiLDQ5OiJBWElTLVRFWFQtREVMSU1JVEVSIiw1MDoiWS1BWElTIiw1MToiUVVBRFJBTlRfMSIsNTI6IlFVQURSQU5UXzIiLDUzOiJRVUFEUkFOVF8zIiw1NDoiUVVBRFJBTlRfNCIsNTU6Ik5FV0xJTkUiLDU2OiJTRU1JIiw1NzoiRU9GIiw2MDoiU1RSIiw2MToiTURfU1RSIiw2MzoiUFVOQ1RVQVRJT04iLDY0OiJQTFVTIiw2NToiRVFVQUxTIiw2NjoiRE9UIiw2NzoiVU5ERVJTQ09SRSJ9LHByb2R1Y3Rpb25zXzpbMCxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMTYsMV0sWzE2LDFdLFsxNiwxXSxbMTYsMV0sWzE2LDFdLFsxNiwxXSxbMTYsMV0sWzE2LDFdLFsxNiwxXSxbMTYsMV0sWzIxLDFdLFsyMSwyXSxbMjIsMV0sWzIyLDJdLFsyMywxXSxbMjMsM10sWzI0LDVdLFsyNiwyXSxbMjYsMl0sWzI2LDJdLFsyOSwwXSxbMjksMl0sWzMwLDJdLFszMSwwXSxbMzEsMV0sWzMxLDJdLFszMSwxXSxbMzEsMV0sWzMxLDFdLFszMSwyXSxbMzEsMl0sWzMxLDJdLFszMSwxXSxbMzEsMV0sWzM0LDRdLFszNCw1XSxbMzQsNV0sWzM0LDZdLFszMiw0XSxbMzIsM10sWzMyLDJdLFszMiw0XSxbMzIsM10sWzMyLDJdLFszMywyXSxbMzMsMl0sWzMzLDJdLFszMywyXSxbMjcsMV0sWzI3LDFdLFsyNywxXSxbNDMsMV0sWzQzLDJdLFs0MywxXSxbNDMsMV0sWzYyLDFdLFs2MiwyXSxbNTgsMV0sWzU4LDFdLFs1OCwxXSxbNTgsMV0sWzU4LDFdLFs1OCwxXSxbNTgsMV0sWzU4LDFdLFs1OCwxXSxbNTgsMV0sWzU4LDFdLFs1OSwxXSxbNTksMV0sWzU5LDFdXSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24ocSxwZSx2ZSxQZSxfZSx3ZSxWZSl7dmFyIERlPXdlLmxlbmd0aC0xO3N3aXRjaChfZSl7Y2FzZSAyMzp0aGlzLiQ9d2VbRGVdO2JyZWFrO2Nhc2UgMjQ6dGhpcy4kPXdlW0RlLTFdKyIiK3dlW0RlXTticmVhaztjYXNlIDI2OnRoaXMuJD13ZVtEZS0xXSt3ZVtEZV07YnJlYWs7Y2FzZSAyNzp0aGlzLiQ9W3dlW0RlXS50cmltKCldO2JyZWFrO2Nhc2UgMjg6d2VbRGUtMl0ucHVzaCh3ZVtEZV0udHJpbSgpKSx0aGlzLiQ9d2VbRGUtMl07YnJlYWs7Y2FzZSAyOTp0aGlzLiQ9d2VbRGUtNF0sUGUuYWRkQ2xhc3Mod2VbRGUtMl0sd2VbRGVdKTticmVhaztjYXNlIDM3OnRoaXMuJD1bXTticmVhaztjYXNlIDQyOnRoaXMuJD13ZVtEZV0udHJpbSgpLFBlLnNldERpYWdyYW1UaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgNDM6dGhpcy4kPXdlW0RlXS50cmltKCksUGUuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDQ0OmNhc2UgNDU6dGhpcy4kPXdlW0RlXS50cmltKCksUGUuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDQ2OlBlLmFkZFNlY3Rpb24od2VbRGVdLnN1YnN0cig4KSksdGhpcy4kPXdlW0RlXS5zdWJzdHIoOCk7YnJlYWs7Y2FzZSA0NzpQZS5hZGRQb2ludCh3ZVtEZS0zXSwiIix3ZVtEZS0xXSx3ZVtEZV0sW10pO2JyZWFrO2Nhc2UgNDg6UGUuYWRkUG9pbnQod2VbRGUtNF0sd2VbRGUtM10sd2VbRGUtMV0sd2VbRGVdLFtdKTticmVhaztjYXNlIDQ5OlBlLmFkZFBvaW50KHdlW0RlLTRdLCIiLHdlW0RlLTJdLHdlW0RlLTFdLHdlW0RlXSk7YnJlYWs7Y2FzZSA1MDpQZS5hZGRQb2ludCh3ZVtEZS01XSx3ZVtEZS00XSx3ZVtEZS0yXSx3ZVtEZS0xXSx3ZVtEZV0pO2JyZWFrO2Nhc2UgNTE6UGUuc2V0WEF4aXNMZWZ0VGV4dCh3ZVtEZS0yXSksUGUuc2V0WEF4aXNSaWdodFRleHQod2VbRGVdKTticmVhaztjYXNlIDUyOndlW0RlLTFdLnRleHQrPSIgXHUyN0Y2ICIsUGUuc2V0WEF4aXNMZWZ0VGV4dCh3ZVtEZS0xXSk7YnJlYWs7Y2FzZSA1MzpQZS5zZXRYQXhpc0xlZnRUZXh0KHdlW0RlXSk7YnJlYWs7Y2FzZSA1NDpQZS5zZXRZQXhpc0JvdHRvbVRleHQod2VbRGUtMl0pLFBlLnNldFlBeGlzVG9wVGV4dCh3ZVtEZV0pO2JyZWFrO2Nhc2UgNTU6d2VbRGUtMV0udGV4dCs9IiBcdTI3RjYgIixQZS5zZXRZQXhpc0JvdHRvbVRleHQod2VbRGUtMV0pO2JyZWFrO2Nhc2UgNTY6UGUuc2V0WUF4aXNCb3R0b21UZXh0KHdlW0RlXSk7YnJlYWs7Y2FzZSA1NzpQZS5zZXRRdWFkcmFudDFUZXh0KHdlW0RlXSk7YnJlYWs7Y2FzZSA1ODpQZS5zZXRRdWFkcmFudDJUZXh0KHdlW0RlXSk7YnJlYWs7Y2FzZSA1OTpQZS5zZXRRdWFkcmFudDNUZXh0KHdlW0RlXSk7YnJlYWs7Y2FzZSA2MDpQZS5zZXRRdWFkcmFudDRUZXh0KHdlW0RlXSk7YnJlYWs7Y2FzZSA2NDp0aGlzLiQ9e3RleHQ6d2VbRGVdLHR5cGU6InRleHQifTticmVhaztjYXNlIDY1OnRoaXMuJD17dGV4dDp3ZVtEZS0xXS50ZXh0KyIiK3dlW0RlXSx0eXBlOndlW0RlLTFdLnR5cGV9O2JyZWFrO2Nhc2UgNjY6dGhpcy4kPXt0ZXh0OndlW0RlXSx0eXBlOiJ0ZXh0In07YnJlYWs7Y2FzZSA2Nzp0aGlzLiQ9e3RleHQ6d2VbRGVdLHR5cGU6Im1hcmtkb3duIn07YnJlYWs7Y2FzZSA2ODp0aGlzLiQ9d2VbRGVdO2JyZWFrO2Nhc2UgNjk6dGhpcy4kPXdlW0RlLTFdKyIiK3dlW0RlXTticmVha319LCJhbm9ueW1vdXMiKSx0YWJsZTpbezE4OmUsMjY6MSwyNzoyLDI4OnIsNTU6biw1NjppLDU3OmF9LHsxOlszXX0sezE4OmUsMjY6OCwyNzoyLDI4OnIsNTU6biw1NjppLDU3OmF9LHsxODplLDI2OjksMjc6MiwyODpyLDU1Om4sNTY6aSw1NzphfSx0KHMsWzIsMzNdLHsyOToxMH0pLHQobCxbMiw2MV0pLHQobCxbMiw2Ml0pLHQobCxbMiw2M10pLHsxOlsyLDMwXX0sezE6WzIsMzFdfSx0KHUsaCx7MzA6MTEsMzE6MTIsMjQ6MTMsMzI6MTUsMzM6MTYsMzQ6MTcsNDM6MzAsNTg6MzEsMTpbMiwzMl0sNDpmLDU6ZCwxMDpwLDEyOm0sMTM6ZywxNDp5LDE4OnYsMjU6eCwzNTpiLDM3OncsMzk6Qyw0MTpULDQyOkUsNDg6QSw1MDpTLDUxOl8sNTI6SSw1MzpELDU0OmssNjA6TCw2MTpSLDYzOk8sNjQ6TSw2NTpCLDY2OkYsNjc6UH0pLHQocyxbMiwzNF0pLHsyNzo0NSw1NTpuLDU2OmksNTc6YX0sdCh1LFsyLDM3XSksdCh1LGgsezI0OjEzLDMyOjE1LDMzOjE2LDM0OjE3LDQzOjMwLDU4OjMxLDMxOjQ2LDQ6Ziw1OmQsMTA6cCwxMjptLDEzOmcsMTQ6eSwxODp2LDI1OngsMzU6YiwzNzp3LDM5OkMsNDE6VCw0MjpFLDQ4OkEsNTA6Uyw1MTpfLDUyOkksNTM6RCw1NDprLDYwOkwsNjE6Uiw2MzpPLDY0Ok0sNjU6Qiw2NjpGLDY3OlB9KSx0KHUsWzIsMzldKSx0KHUsWzIsNDBdKSx0KHUsWzIsNDFdKSx7MzY6WzEsNDddfSx7Mzg6WzEsNDhdfSx7NDA6WzEsNDldfSx0KHUsWzIsNDVdKSx0KHUsWzIsNDZdKSx7MTg6WzEsNTBdfSx7NDpmLDU6ZCwxMDpwLDEyOm0sMTM6ZywxNDp5LDQzOjUxLDU4OjMxLDYwOkwsNjE6Uiw2MzpPLDY0Ok0sNjU6Qiw2NjpGLDY3OlB9LHs0OmYsNTpkLDEwOnAsMTI6bSwxMzpnLDE0OnksNDM6NTIsNTg6MzEsNjA6TCw2MTpSLDYzOk8sNjQ6TSw2NTpCLDY2OkYsNjc6UH0sezQ6Ziw1OmQsMTA6cCwxMjptLDEzOmcsMTQ6eSw0Mzo1Myw1ODozMSw2MDpMLDYxOlIsNjM6Tyw2NDpNLDY1OkIsNjY6Riw2NzpQfSx7NDpmLDU6ZCwxMDpwLDEyOm0sMTM6ZywxNDp5LDQzOjU0LDU4OjMxLDYwOkwsNjE6Uiw2MzpPLDY0Ok0sNjU6Qiw2NjpGLDY3OlB9LHs0OmYsNTpkLDEwOnAsMTI6bSwxMzpnLDE0OnksNDM6NTUsNTg6MzEsNjA6TCw2MTpSLDYzOk8sNjQ6TSw2NTpCLDY2OkYsNjc6UH0sezQ6Ziw1OmQsMTA6cCwxMjptLDEzOmcsMTQ6eSw0Mzo1Niw1ODozMSw2MDpMLDYxOlIsNjM6Tyw2NDpNLDY1OkIsNjY6Riw2NzpQfSx7NDpmLDU6ZCw4OnosMTA6cCwxMjptLDEzOmcsMTQ6eSwxODokLDQ0OlsxLDU3XSw0NzpbMSw1OF0sNTg6NjAsNTk6NTksNjM6Tyw2NDpNLDY1OkIsNjY6Riw2NzpQfSx0KEgsWzIsNjRdKSx0KEgsWzIsNjZdKSx0KEgsWzIsNjddKSx0KEgsWzIsNzBdKSx0KEgsWzIsNzFdKSx0KEgsWzIsNzJdKSx0KEgsWzIsNzNdKSx0KEgsWzIsNzRdKSx0KEgsWzIsNzVdKSx0KEgsWzIsNzZdKSx0KEgsWzIsNzddKSx0KEgsWzIsNzhdKSx0KEgsWzIsNzldKSx0KEgsWzIsODBdKSx0KHMsWzIsMzVdKSx0KHUsWzIsMzhdKSx0KHUsWzIsNDJdKSx0KHUsWzIsNDNdKSx0KHUsWzIsNDRdKSx7Mzo2NCw0OlEsNTpqLDY6aWUsNzpuZSw4OmxlLDk6aGUsMTA6SywxMTpYLDEyOnRlLDEzOkosMTQ6c2UsMTU6dWUsMjE6NjN9LHQodSxbMiw1M10sezU5OjU5LDU4OjYwLDQ6Ziw1OmQsODp6LDEwOnAsMTI6bSwxMzpnLDE0OnksMTg6JCw0OTpbMSw3N10sNjM6Tyw2NDpNLDY1OkIsNjY6Riw2NzpQfSksdCh1LFsyLDU2XSx7NTk6NTksNTg6NjAsNDpmLDU6ZCw4OnosMTA6cCwxMjptLDEzOmcsMTQ6eSwxODokLDQ5OlsxLDc4XSw2MzpPLDY0Ok0sNjU6Qiw2NjpGLDY3OlB9KSx0KHUsWzIsNTddLHs1OTo1OSw1ODo2MCw0OmYsNTpkLDg6eiwxMDpwLDEyOm0sMTM6ZywxNDp5LDE4OiQsNjM6Tyw2NDpNLDY1OkIsNjY6Riw2NzpQfSksdCh1LFsyLDU4XSx7NTk6NTksNTg6NjAsNDpmLDU6ZCw4OnosMTA6cCwxMjptLDEzOmcsMTQ6eSwxODokLDYzOk8sNjQ6TSw2NTpCLDY2OkYsNjc6UH0pLHQodSxbMiw1OV0sezU5OjU5LDU4OjYwLDQ6Ziw1OmQsODp6LDEwOnAsMTI6bSwxMzpnLDE0OnksMTg6JCw2MzpPLDY0Ok0sNjU6Qiw2NjpGLDY3OlB9KSx0KHUsWzIsNjBdLHs1OTo1OSw1ODo2MCw0OmYsNTpkLDg6eiwxMDpwLDEyOm0sMTM6ZywxNDp5LDE4OiQsNjM6Tyw2NDpNLDY1OkIsNjY6Riw2NzpQfSksezQ1OlsxLDc5XX0sezQ0OlsxLDgwXX0sdChILFsyLDY1XSksdChILFsyLDgxXSksdChILFsyLDgyXSksdChILFsyLDgzXSksezM6ODIsNDpRLDU6aiw2OmllLDc6bmUsODpsZSw5OmhlLDEwOkssMTE6WCwxMjp0ZSwxMzpKLDE0OnNlLDE1OnVlLDE4OlsxLDgxXX0sdChaLFsyLDIzXSksdChaLFsyLDFdKSx0KFosWzIsMl0pLHQoWixbMiwzXSksdChaLFsyLDRdKSx0KFosWzIsNV0pLHQoWixbMiw2XSksdChaLFsyLDddKSx0KFosWzIsOF0pLHQoWixbMiw5XSksdChaLFsyLDEwXSksdChaLFsyLDExXSksdChaLFsyLDEyXSksdCh1LFsyLDUyXSx7NTg6MzEsNDM6ODMsNDpmLDU6ZCwxMDpwLDEyOm0sMTM6ZywxNDp5LDYwOkwsNjE6Uiw2MzpPLDY0Ok0sNjU6Qiw2NjpGLDY3OlB9KSx0KHUsWzIsNTVdLHs1ODozMSw0Mzo4NCw0OmYsNTpkLDEwOnAsMTI6bSwxMzpnLDE0OnksNjA6TCw2MTpSLDYzOk8sNjQ6TSw2NTpCLDY2OkYsNjc6UH0pLHs0NjpbMSw4NV19LHs0NTpbMSw4Nl19LHs0OlNlLDU6Y2UsNjphZSw4Ok9lLDExOmdlLDEzOnplLDE2Ojg5LDE3OkhlLDE4OiRlLDE5OlJlLDIwOkllLDIyOjg4LDIzOjg3fSx0KFosWzIsMjRdKSx0KHUsWzIsNTFdLHs1OTo1OSw1ODo2MCw0OmYsNTpkLDg6eiwxMDpwLDEyOm0sMTM6ZywxNDp5LDE4OiQsNjM6Tyw2NDpNLDY1OkIsNjY6Riw2NzpQfSksdCh1LFsyLDU0XSx7NTk6NTksNTg6NjAsNDpmLDU6ZCw4OnosMTA6cCwxMjptLDEzOmcsMTQ6eSwxODokLDYzOk8sNjQ6TSw2NTpCLDY2OkYsNjc6UH0pLHQodSxbMiw0N10sezIyOjg4LDE2Ojg5LDIzOjEwMCw0OlNlLDU6Y2UsNjphZSw4Ok9lLDExOmdlLDEzOnplLDE3OkhlLDE4OiRlLDE5OlJlLDIwOkllfSksezQ2OlsxLDEwMV19LHQodSxbMiwyOV0sezEwOmJlfSksdChXLFsyLDI3XSx7MTY6MTAzLDQ6U2UsNTpjZSw2OmFlLDg6T2UsMTE6Z2UsMTM6emUsMTc6SGUsMTg6JGUsMTk6UmUsMjA6SWV9KSx0KGRlLFsyLDI1XSksdChkZSxbMiwxM10pLHQoZGUsWzIsMTRdKSx0KGRlLFsyLDE1XSksdChkZSxbMiwxNl0pLHQoZGUsWzIsMTddKSx0KGRlLFsyLDE4XSksdChkZSxbMiwxOV0pLHQoZGUsWzIsMjBdKSx0KGRlLFsyLDIxXSksdChkZSxbMiwyMl0pLHQodSxbMiw0OV0sezEwOmJlfSksdCh1LFsyLDQ4XSx7MjI6ODgsMTY6ODksMjM6MTA0LDQ6U2UsNTpjZSw2OmFlLDg6T2UsMTE6Z2UsMTM6emUsMTc6SGUsMTg6JGUsMTk6UmUsMjA6SWV9KSx7NDpTZSw1OmNlLDY6YWUsODpPZSwxMTpnZSwxMzp6ZSwxNjo4OSwxNzpIZSwxODokZSwxOTpSZSwyMDpJZSwyMjoxMDV9LHQoZGUsWzIsMjZdKSx0KHUsWzIsNTBdLHsxMDpiZX0pLHQoVyxbMiwyOF0sezE2OjEwMyw0OlNlLDU6Y2UsNjphZSw4Ok9lLDExOmdlLDEzOnplLDE3OkhlLDE4OiRlLDE5OlJlLDIwOkllfSldLGRlZmF1bHRBY3Rpb25zOns4OlsyLDMwXSw5OlsyLDMxXX0scGFyc2VFcnJvcjpvKGZ1bmN0aW9uKHEscGUpe2lmKHBlLnJlY292ZXJhYmxlKXRoaXMudHJhY2UocSk7ZWxzZXt2YXIgdmU9bmV3IEVycm9yKHEpO3Rocm93IHZlLmhhc2g9cGUsdmV9fSwicGFyc2VFcnJvciIpLHBhcnNlOm8oZnVuY3Rpb24ocSl7dmFyIHBlPXRoaXMsdmU9WzBdLFBlPVtdLF9lPVtudWxsXSx3ZT1bXSxWZT10aGlzLnRhYmxlLERlPSIiLHFlPTAsYXQ9MCxSdD0wLHN0PTIsVWU9MSxjdD13ZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxXZT1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLG90PXt5eTp7fX07Zm9yKHZhciBZdCBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LFl0KSYmKG90Lnl5W1l0XT10aGlzLnl5W1l0XSk7V2Uuc2V0SW5wdXQocSxvdC55eSksb3QueXkubGV4ZXI9V2Usb3QueXkucGFyc2VyPXRoaXMsdHlwZW9mIFdlLnl5bGxvYz4idSImJihXZS55eWxsb2M9e30pO3ZhciBidD1XZS55eWxsb2M7d2UucHVzaChidCk7dmFyIE10PVdlLm9wdGlvbnMmJldlLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBvdC55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1vdC55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiB4dChDZSl7dmUubGVuZ3RoPXZlLmxlbmd0aC0yKkNlLF9lLmxlbmd0aD1fZS5sZW5ndGgtQ2Usd2UubGVuZ3RoPXdlLmxlbmd0aC1DZX1vKHh0LCJwb3BTdGFjayIpO2Z1bmN0aW9uIHV0KCl7dmFyIENlO3JldHVybiBDZT1QZS5wb3AoKXx8V2UubGV4KCl8fFVlLHR5cGVvZiBDZSE9Im51bWJlciImJihDZSBpbnN0YW5jZW9mIEFycmF5JiYoUGU9Q2UsQ2U9UGUucG9wKCkpLENlPXBlLnN5bWJvbHNfW0NlXXx8Q2UpLENlfW8odXQsImxleCIpO2Zvcih2YXIgRXQsZnQseXQsbnQsZG4sVHQsT249e30sdG4sX3IsRHIsUG47Oyl7aWYoeXQ9dmVbdmUubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbeXRdP250PXRoaXMuZGVmYXVsdEFjdGlvbnNbeXRdOigoRXQ9PT1udWxsfHx0eXBlb2YgRXQ+InUiKSYmKEV0PXV0KCkpLG50PVZlW3l0XSYmVmVbeXRdW0V0XSksdHlwZW9mIG50PiJ1Inx8IW50Lmxlbmd0aHx8IW50WzBdKXt2YXIgQXQ9IiI7UG49W107Zm9yKHRuIGluIFZlW3l0XSl0aGlzLnRlcm1pbmFsc19bdG5dJiZ0bj5zdCYmUG4ucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW3RuXSsiJyIpO1dlLnNob3dQb3NpdGlvbj9BdD0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhxZSsxKStgOgpgK1dlLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArUG4uam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tFdF18fEV0KSsiJyI6QXQ9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisocWUrMSkrIjogVW5leHBlY3RlZCAiKyhFdD09VWU/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bRXRdfHxFdCkrIiciKSx0aGlzLnBhcnNlRXJyb3IoQXQse3RleHQ6V2UubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW0V0XXx8RXQsbGluZTpXZS55eWxpbmVubyxsb2M6YnQsZXhwZWN0ZWQ6UG59KX1pZihudFswXWluc3RhbmNlb2YgQXJyYXkmJm50Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIreXQrIiwgdG9rZW46ICIrRXQpO3N3aXRjaChudFswXSl7Y2FzZSAxOnZlLnB1c2goRXQpLF9lLnB1c2goV2UueXl0ZXh0KSx3ZS5wdXNoKFdlLnl5bGxvYyksdmUucHVzaChudFsxXSksRXQ9bnVsbCxmdD8oRXQ9ZnQsZnQ9bnVsbCk6KGF0PVdlLnl5bGVuZyxEZT1XZS55eXRleHQscWU9V2UueXlsaW5lbm8sYnQ9V2UueXlsbG9jLFJ0PjAmJlJ0LS0pO2JyZWFrO2Nhc2UgMjppZihfcj10aGlzLnByb2R1Y3Rpb25zX1tudFsxXV1bMV0sT24uJD1fZVtfZS5sZW5ndGgtX3JdLE9uLl8kPXtmaXJzdF9saW5lOndlW3dlLmxlbmd0aC0oX3J8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTp3ZVt3ZS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp3ZVt3ZS5sZW5ndGgtKF9yfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOndlW3dlLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sTXQmJihPbi5fJC5yYW5nZT1bd2Vbd2UubGVuZ3RoLShfcnx8MSldLnJhbmdlWzBdLHdlW3dlLmxlbmd0aC0xXS5yYW5nZVsxXV0pLFR0PXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShPbixbRGUsYXQscWUsb3QueXksbnRbMV0sX2Usd2VdLmNvbmNhdChjdCkpLHR5cGVvZiBUdDwidSIpcmV0dXJuIFR0O19yJiYodmU9dmUuc2xpY2UoMCwtMSpfcioyKSxfZT1fZS5zbGljZSgwLC0xKl9yKSx3ZT13ZS5zbGljZSgwLC0xKl9yKSksdmUucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1tudFsxXV1bMF0pLF9lLnB1c2goT24uJCksd2UucHVzaChPbi5fJCksRHI9VmVbdmVbdmUubGVuZ3RoLTJdXVt2ZVt2ZS5sZW5ndGgtMV1dLHZlLnB1c2goRHIpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9LCJwYXJzZSIpfSxvZT1mdW5jdGlvbigpe3ZhciB4ZT17RU9GOjEscGFyc2VFcnJvcjpvKGZ1bmN0aW9uKHBlLHZlKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHBlLHZlKTtlbHNlIHRocm93IG5ldyBFcnJvcihwZSl9LCJwYXJzZUVycm9yIiksc2V0SW5wdXQ6byhmdW5jdGlvbihxLHBlKXtyZXR1cm4gdGhpcy55eT1wZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9cSx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30sInNldElucHV0IiksaW5wdXQ6byhmdW5jdGlvbigpe3ZhciBxPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1xLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1xLHRoaXMubWF0Y2hlZCs9cTt2YXIgcGU9cS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIHBlPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxxfSwiaW5wdXQiKSx1bnB1dDpvKGZ1bmN0aW9uKHEpe3ZhciBwZT1xLmxlbmd0aCx2ZT1xLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9cSt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtcGUpLHRoaXMub2Zmc2V0LT1wZTt2YXIgUGU9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksdmUubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT12ZS5sZW5ndGgtMSk7dmFyIF9lPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp2ZT8odmUubGVuZ3RoPT09UGUubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStQZVtQZS5sZW5ndGgtdmUubGVuZ3RoXS5sZW5ndGgtdmVbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1wZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtfZVswXSxfZVswXSt0aGlzLnl5bGVuZy1wZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSwidW5wdXQiKSxtb3JlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSwibW9yZSIpLHJlamVjdDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSwicmVqZWN0IiksbGVzczpvKGZ1bmN0aW9uKHEpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShxKSl9LCJsZXNzIikscGFzdElucHV0Om8oZnVuY3Rpb24oKXt2YXIgcT10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKHEubGVuZ3RoPjIwPyIuLi4iOiIiKStxLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSwicGFzdElucHV0IiksdXBjb21pbmdJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIHE9dGhpcy5tYXRjaDtyZXR1cm4gcS5sZW5ndGg8MjAmJihxKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1xLmxlbmd0aCkpLChxLnN1YnN0cigwLDIwKSsocS5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sInVwY29taW5nSW5wdXQiKSxzaG93UG9zaXRpb246byhmdW5jdGlvbigpe3ZhciBxPXRoaXMucGFzdElucHV0KCkscGU9bmV3IEFycmF5KHEubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gcSt0aGlzLnVwY29taW5nSW5wdXQoKStgCmArcGUrIl4ifSwic2hvd1Bvc2l0aW9uIiksdGVzdF9tYXRjaDpvKGZ1bmN0aW9uKHEscGUpe3ZhciB2ZSxQZSxfZTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoX2U9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoX2UueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksUGU9cVswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksUGUmJih0aGlzLnl5bGluZW5vKz1QZS5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpQZT9QZVtQZS5sZW5ndGgtMV0ubGVuZ3RoLVBlW1BlLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK3FbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9cVswXSx0aGlzLm1hdGNoKz1xWzBdLHRoaXMubWF0Y2hlcz1xLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKHFbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPXFbMF0sdmU9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMscGUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksdmUpcmV0dXJuIHZlO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciB3ZSBpbiBfZSl0aGlzW3dlXT1fZVt3ZV07cmV0dXJuITF9cmV0dXJuITF9LCJ0ZXN0X21hdGNoIiksbmV4dDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIHEscGUsdmUsUGU7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgX2U9dGhpcy5fY3VycmVudFJ1bGVzKCksd2U9MDt3ZTxfZS5sZW5ndGg7d2UrKylpZih2ZT10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW19lW3dlXV0pLHZlJiYoIXBlfHx2ZVswXS5sZW5ndGg+cGVbMF0ubGVuZ3RoKSl7aWYocGU9dmUsUGU9d2UsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYocT10aGlzLnRlc3RfbWF0Y2godmUsX2Vbd2VdKSxxIT09ITEpcmV0dXJuIHE7aWYodGhpcy5fYmFja3RyYWNrKXtwZT0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBwZT8ocT10aGlzLnRlc3RfbWF0Y2gocGUsX2VbUGVdKSxxIT09ITE/cTohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sIm5leHQiKSxsZXg6byhmdW5jdGlvbigpe3ZhciBwZT10aGlzLm5leHQoKTtyZXR1cm4gcGV8fHRoaXMubGV4KCl9LCJsZXgiKSxiZWdpbjpvKGZ1bmN0aW9uKHBlKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2gocGUpfSwiYmVnaW4iKSxwb3BTdGF0ZTpvKGZ1bmN0aW9uKCl7dmFyIHBlPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIHBlPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSwicG9wU3RhdGUiKSxfY3VycmVudFJ1bGVzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSwiX2N1cnJlbnRSdWxlcyIpLHRvcFN0YXRlOm8oZnVuY3Rpb24ocGUpe3JldHVybiBwZT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKHBlfHwwKSxwZT49MD90aGlzLmNvbmRpdGlvblN0YWNrW3BlXToiSU5JVElBTCJ9LCJ0b3BTdGF0ZSIpLHB1c2hTdGF0ZTpvKGZ1bmN0aW9uKHBlKXt0aGlzLmJlZ2luKHBlKX0sInB1c2hTdGF0ZSIpLHN0YXRlU3RhY2tTaXplOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LCJzdGF0ZVN0YWNrU2l6ZSIpLG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKHBlLHZlLFBlLF9lKXt2YXIgd2U9X2U7c3dpdGNoKFBlKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOmJyZWFrO2Nhc2UgMjpyZXR1cm4gNTU7Y2FzZSAzOmJyZWFrO2Nhc2UgNDpyZXR1cm4gdGhpcy5iZWdpbigidGl0bGUiKSwzNTticmVhaztjYXNlIDU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwidGl0bGVfdmFsdWUiO2JyZWFrO2Nhc2UgNjpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMzc7YnJlYWs7Y2FzZSA3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7YnJlYWs7Y2FzZSA4OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwzOTticmVhaztjYXNlIDk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjticmVhaztjYXNlIDEwOnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDExOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDEyOnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDEzOnJldHVybiA0ODtjYXNlIDE0OnJldHVybiA1MDtjYXNlIDE1OnJldHVybiA0OTtjYXNlIDE2OnJldHVybiA1MTtjYXNlIDE3OnJldHVybiA1MjtjYXNlIDE4OnJldHVybiA1MztjYXNlIDE5OnJldHVybiA1NDtjYXNlIDIwOnJldHVybiAyNTtjYXNlIDIxOnRoaXMuYmVnaW4oIm1kX3N0cmluZyIpO2JyZWFrO2Nhc2UgMjI6cmV0dXJuIk1EX1NUUiI7Y2FzZSAyMzp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyNDp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDI1OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDI2OnJldHVybiJTVFIiO2Nhc2UgMjc6dGhpcy5iZWdpbigiY2xhc3NfbmFtZSIpO2JyZWFrO2Nhc2UgMjg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw0NzticmVhaztjYXNlIDI5OnJldHVybiB0aGlzLmJlZ2luKCJwb2ludF9zdGFydCIpLDQ0O2JyZWFrO2Nhc2UgMzA6cmV0dXJuIHRoaXMuYmVnaW4oInBvaW50X3giKSw0NTticmVhaztjYXNlIDMxOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDMyOnRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJwb2ludF95Iik7YnJlYWs7Y2FzZSAzMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDQ2O2JyZWFrO2Nhc2UgMzQ6cmV0dXJuIDI4O2Nhc2UgMzU6cmV0dXJuIDQ7Y2FzZSAzNjpyZXR1cm4gMTE7Y2FzZSAzNzpyZXR1cm4gNjQ7Y2FzZSAzODpyZXR1cm4gMTA7Y2FzZSAzOTpyZXR1cm4gNjU7Y2FzZSA0MDpyZXR1cm4gNjU7Y2FzZSA0MTpyZXR1cm4gMTQ7Y2FzZSA0MjpyZXR1cm4gMTM7Y2FzZSA0MzpyZXR1cm4gNjc7Y2FzZSA0NDpyZXR1cm4gNjY7Y2FzZSA0NTpyZXR1cm4gMTI7Y2FzZSA0NjpyZXR1cm4gODtjYXNlIDQ3OnJldHVybiA1O2Nhc2UgNDg6cmV0dXJuIDE4O2Nhc2UgNDk6cmV0dXJuIDU2O2Nhc2UgNTA6cmV0dXJuIDYzO2Nhc2UgNTE6cmV0dXJuIDU3fX0sImFub255bW91cyIpLHJ1bGVzOlsvXig/OiUlKD8hXHspW15cbl0qKS9pLC9eKD86W15cfV0lJVteXG5dKikvaSwvXig/OltcblxyXSspL2ksL14oPzolJVteXG5dKikvaSwvXig/OnRpdGxlXGIpL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/OiAqeC1heGlzICopL2ksL14oPzogKnktYXhpcyAqKS9pLC9eKD86ICotLSs+ICopL2ksL14oPzogKnF1YWRyYW50LTEgKikvaSwvXig/OiAqcXVhZHJhbnQtMiAqKS9pLC9eKD86ICpxdWFkcmFudC0zICopL2ksL14oPzogKnF1YWRyYW50LTQgKikvaSwvXig/OmNsYXNzRGVmXGIpL2ksL14oPzpbIl1bYF0pL2ksL14oPzpbXmAiXSspL2ksL14oPzpbYF1bIl0pL2ksL14oPzpbIl0pL2ksL14oPzpbIl0pL2ksL14oPzpbXiJdKikvaSwvXig/Ojo6OikvaSwvXig/Ol5cdyspL2ksL14oPzpccyo6XHMqXFtccyopL2ksL14oPzooMSl8KDAoLlxkKyk/KSkvaSwvXig/OlxzKlxdICopL2ksL14oPzpccyosXHMqKS9pLC9eKD86KDEpfCgwKC5cZCspPykpL2ksL14oPzogKnF1YWRyYW50Q2hhcnQgKikvaSwvXig/OltBLVphLXpdKykvaSwvXig/OjopL2ksL14oPzpcKykvaSwvXig/OiwpL2ksL14oPzo9KS9pLC9eKD86PSkvaSwvXig/OlwqKS9pLC9eKD86IykvaSwvXig/OltcX10pL2ksL14oPzpcLikvaSwvXig/OiYpL2ksL14oPzotKS9pLC9eKD86WzAtOV0rKS9pLC9eKD86XHMpL2ksL14oPzo7KS9pLC9eKD86WyEiIyQlJicqKywtLmA/XFxfL10pL2ksL14oPzokKS9pXSxjb25kaXRpb25zOntjbGFzc19uYW1lOntydWxlczpbMjhdLGluY2x1c2l2ZTohMX0scG9pbnRfeTp7cnVsZXM6WzMzXSxpbmNsdXNpdmU6ITF9LHBvaW50X3g6e3J1bGVzOlszMl0saW5jbHVzaXZlOiExfSxwb2ludF9zdGFydDp7cnVsZXM6WzMwLDMxXSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOlsxMSwxMl0saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOls5XSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzddLGluY2x1c2l2ZTohMX0sdGl0bGU6e3J1bGVzOls1XSxpbmNsdXNpdmU6ITF9LG1kX3N0cmluZzp7cnVsZXM6WzIyLDIzXSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzI1LDI2XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMiwzLDQsNiw4LDEwLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDI0LDI3LDI5LDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxXSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIHhlfSgpO3JlLmxleGVyPW9lO2Z1bmN0aW9uIFYoKXt0aGlzLnl5PXt9fXJldHVybiBvKFYsIlBhcnNlciIpLFYucHJvdG90eXBlPXJlLHJlLlBhcnNlcj1WLG5ldyBWfSgpO2hPLnBhcnNlcj1oTzt1aGU9aE99KTt2YXIgbXMseTYsZmhlPU4oKCk9PnsidXNlIHN0cmljdCI7ZHIoKTtZYSgpO3Z0KCk7X3koKTttcz1vaCgpLHk2PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5jbGFzc2VzPW5ldyBNYXA7dGhpcy5jb25maWc9dGhpcy5nZXREZWZhdWx0Q29uZmlnKCksdGhpcy50aGVtZUNvbmZpZz10aGlzLmdldERlZmF1bHRUaGVtZUNvbmZpZygpLHRoaXMuZGF0YT10aGlzLmdldERlZmF1bHREYXRhKCl9c3RhdGlje28odGhpcywiUXVhZHJhbnRCdWlsZGVyIil9Z2V0RGVmYXVsdERhdGEoKXtyZXR1cm57dGl0bGVUZXh0OiIiLHF1YWRyYW50MVRleHQ6IiIscXVhZHJhbnQyVGV4dDoiIixxdWFkcmFudDNUZXh0OiIiLHF1YWRyYW50NFRleHQ6IiIseEF4aXNMZWZ0VGV4dDoiIix4QXhpc1JpZ2h0VGV4dDoiIix5QXhpc0JvdHRvbVRleHQ6IiIseUF4aXNUb3BUZXh0OiIiLHBvaW50czpbXX19Z2V0RGVmYXVsdENvbmZpZygpe3JldHVybntzaG93WEF4aXM6ITAsc2hvd1lBeGlzOiEwLHNob3dUaXRsZTohMCxjaGFydEhlaWdodDpvci5xdWFkcmFudENoYXJ0Py5jaGFydFdpZHRofHw1MDAsY2hhcnRXaWR0aDpvci5xdWFkcmFudENoYXJ0Py5jaGFydEhlaWdodHx8NTAwLHRpdGxlUGFkZGluZzpvci5xdWFkcmFudENoYXJ0Py50aXRsZVBhZGRpbmd8fDEwLHRpdGxlRm9udFNpemU6b3IucXVhZHJhbnRDaGFydD8udGl0bGVGb250U2l6ZXx8MjAscXVhZHJhbnRQYWRkaW5nOm9yLnF1YWRyYW50Q2hhcnQ/LnF1YWRyYW50UGFkZGluZ3x8NSx4QXhpc0xhYmVsUGFkZGluZzpvci5xdWFkcmFudENoYXJ0Py54QXhpc0xhYmVsUGFkZGluZ3x8NSx5QXhpc0xhYmVsUGFkZGluZzpvci5xdWFkcmFudENoYXJ0Py55QXhpc0xhYmVsUGFkZGluZ3x8NSx4QXhpc0xhYmVsRm9udFNpemU6b3IucXVhZHJhbnRDaGFydD8ueEF4aXNMYWJlbEZvbnRTaXplfHwxNix5QXhpc0xhYmVsRm9udFNpemU6b3IucXVhZHJhbnRDaGFydD8ueUF4aXNMYWJlbEZvbnRTaXplfHwxNixxdWFkcmFudExhYmVsRm9udFNpemU6b3IucXVhZHJhbnRDaGFydD8ucXVhZHJhbnRMYWJlbEZvbnRTaXplfHwxNixxdWFkcmFudFRleHRUb3BQYWRkaW5nOm9yLnF1YWRyYW50Q2hhcnQ/LnF1YWRyYW50VGV4dFRvcFBhZGRpbmd8fDUscG9pbnRUZXh0UGFkZGluZzpvci5xdWFkcmFudENoYXJ0Py5wb2ludFRleHRQYWRkaW5nfHw1LHBvaW50TGFiZWxGb250U2l6ZTpvci5xdWFkcmFudENoYXJ0Py5wb2ludExhYmVsRm9udFNpemV8fDEyLHBvaW50UmFkaXVzOm9yLnF1YWRyYW50Q2hhcnQ/LnBvaW50UmFkaXVzfHw1LHhBeGlzUG9zaXRpb246b3IucXVhZHJhbnRDaGFydD8ueEF4aXNQb3NpdGlvbnx8InRvcCIseUF4aXNQb3NpdGlvbjpvci5xdWFkcmFudENoYXJ0Py55QXhpc1Bvc2l0aW9ufHwibGVmdCIscXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZVdpZHRoOm9yLnF1YWRyYW50Q2hhcnQ/LnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VXaWR0aHx8MSxxdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlV2lkdGg6b3IucXVhZHJhbnRDaGFydD8ucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZVdpZHRofHwyfX1nZXREZWZhdWx0VGhlbWVDb25maWcoKXtyZXR1cm57cXVhZHJhbnQxRmlsbDptcy5xdWFkcmFudDFGaWxsLHF1YWRyYW50MkZpbGw6bXMucXVhZHJhbnQyRmlsbCxxdWFkcmFudDNGaWxsOm1zLnF1YWRyYW50M0ZpbGwscXVhZHJhbnQ0RmlsbDptcy5xdWFkcmFudDRGaWxsLHF1YWRyYW50MVRleHRGaWxsOm1zLnF1YWRyYW50MVRleHRGaWxsLHF1YWRyYW50MlRleHRGaWxsOm1zLnF1YWRyYW50MlRleHRGaWxsLHF1YWRyYW50M1RleHRGaWxsOm1zLnF1YWRyYW50M1RleHRGaWxsLHF1YWRyYW50NFRleHRGaWxsOm1zLnF1YWRyYW50NFRleHRGaWxsLHF1YWRyYW50UG9pbnRGaWxsOm1zLnF1YWRyYW50UG9pbnRGaWxsLHF1YWRyYW50UG9pbnRUZXh0RmlsbDptcy5xdWFkcmFudFBvaW50VGV4dEZpbGwscXVhZHJhbnRYQXhpc1RleHRGaWxsOm1zLnF1YWRyYW50WEF4aXNUZXh0RmlsbCxxdWFkcmFudFlBeGlzVGV4dEZpbGw6bXMucXVhZHJhbnRZQXhpc1RleHRGaWxsLHF1YWRyYW50VGl0bGVGaWxsOm1zLnF1YWRyYW50VGl0bGVGaWxsLHF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsOm1zLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsLHF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsOm1zLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsfX1jbGVhcigpe3RoaXMuY29uZmlnPXRoaXMuZ2V0RGVmYXVsdENvbmZpZygpLHRoaXMudGhlbWVDb25maWc9dGhpcy5nZXREZWZhdWx0VGhlbWVDb25maWcoKSx0aGlzLmRhdGE9dGhpcy5nZXREZWZhdWx0RGF0YSgpLHRoaXMuY2xhc3Nlcz1uZXcgTWFwLFkuaW5mbygiY2xlYXIgY2FsbGVkIil9c2V0RGF0YShlKXt0aGlzLmRhdGE9ey4uLnRoaXMuZGF0YSwuLi5lfX1hZGRQb2ludHMoZSl7dGhpcy5kYXRhLnBvaW50cz1bLi4uZSwuLi50aGlzLmRhdGEucG9pbnRzXX1hZGRDbGFzcyhlLHIpe3RoaXMuY2xhc3Nlcy5zZXQoZSxyKX1zZXRDb25maWcoZSl7WS50cmFjZSgic2V0Q29uZmlnIGNhbGxlZCB3aXRoOiAiLGUpLHRoaXMuY29uZmlnPXsuLi50aGlzLmNvbmZpZywuLi5lfX1zZXRUaGVtZUNvbmZpZyhlKXtZLnRyYWNlKCJzZXRUaGVtZUNvbmZpZyBjYWxsZWQgd2l0aDogIixlKSx0aGlzLnRoZW1lQ29uZmlnPXsuLi50aGlzLnRoZW1lQ29uZmlnLC4uLmV9fWNhbGN1bGF0ZVNwYWNlKGUscixuLGkpe2xldCBhPXRoaXMuY29uZmlnLnhBeGlzTGFiZWxQYWRkaW5nKjIrdGhpcy5jb25maWcueEF4aXNMYWJlbEZvbnRTaXplLHM9e3RvcDplPT09InRvcCImJnI/YTowLGJvdHRvbTplPT09ImJvdHRvbSImJnI/YTowfSxsPXRoaXMuY29uZmlnLnlBeGlzTGFiZWxQYWRkaW5nKjIrdGhpcy5jb25maWcueUF4aXNMYWJlbEZvbnRTaXplLHU9e2xlZnQ6dGhpcy5jb25maWcueUF4aXNQb3NpdGlvbj09PSJsZWZ0IiYmbj9sOjAscmlnaHQ6dGhpcy5jb25maWcueUF4aXNQb3NpdGlvbj09PSJyaWdodCImJm4/bDowfSxoPXRoaXMuY29uZmlnLnRpdGxlRm9udFNpemUrdGhpcy5jb25maWcudGl0bGVQYWRkaW5nKjIsZj17dG9wOmk/aDowfSxkPXRoaXMuY29uZmlnLnF1YWRyYW50UGFkZGluZyt1LmxlZnQscD10aGlzLmNvbmZpZy5xdWFkcmFudFBhZGRpbmcrcy50b3ArZi50b3AsbT10aGlzLmNvbmZpZy5jaGFydFdpZHRoLXRoaXMuY29uZmlnLnF1YWRyYW50UGFkZGluZyoyLXUubGVmdC11LnJpZ2h0LGc9dGhpcy5jb25maWcuY2hhcnRIZWlnaHQtdGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nKjItcy50b3Atcy5ib3R0b20tZi50b3AseT1tLzIsdj1nLzI7cmV0dXJue3hBeGlzU3BhY2U6cyx5QXhpc1NwYWNlOnUsdGl0bGVTcGFjZTpmLHF1YWRyYW50U3BhY2U6e3F1YWRyYW50TGVmdDpkLHF1YWRyYW50VG9wOnAscXVhZHJhbnRXaWR0aDptLHF1YWRyYW50SGFsZldpZHRoOnkscXVhZHJhbnRIZWlnaHQ6ZyxxdWFkcmFudEhhbGZIZWlnaHQ6dn19fWdldEF4aXNMYWJlbHMoZSxyLG4saSl7bGV0e3F1YWRyYW50U3BhY2U6YSx0aXRsZVNwYWNlOnN9PWkse3F1YWRyYW50SGFsZkhlaWdodDpsLHF1YWRyYW50SGVpZ2h0OnUscXVhZHJhbnRMZWZ0OmgscXVhZHJhbnRIYWxmV2lkdGg6ZixxdWFkcmFudFRvcDpkLHF1YWRyYW50V2lkdGg6cH09YSxtPSEhdGhpcy5kYXRhLnhBeGlzUmlnaHRUZXh0LGc9ISF0aGlzLmRhdGEueUF4aXNUb3BUZXh0LHk9W107cmV0dXJuIHRoaXMuZGF0YS54QXhpc0xlZnRUZXh0JiZyJiZ5LnB1c2goe3RleHQ6dGhpcy5kYXRhLnhBeGlzTGVmdFRleHQsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50WEF4aXNUZXh0RmlsbCx4OmgrKG0/Zi8yOjApLHk6ZT09PSJ0b3AiP3RoaXMuY29uZmlnLnhBeGlzTGFiZWxQYWRkaW5nK3MudG9wOnRoaXMuY29uZmlnLnhBeGlzTGFiZWxQYWRkaW5nK2QrdSt0aGlzLmNvbmZpZy5xdWFkcmFudFBhZGRpbmcsZm9udFNpemU6dGhpcy5jb25maWcueEF4aXNMYWJlbEZvbnRTaXplLHZlcnRpY2FsUG9zOm0/ImNlbnRlciI6ImxlZnQiLGhvcml6b250YWxQb3M6InRvcCIscm90YXRpb246MH0pLHRoaXMuZGF0YS54QXhpc1JpZ2h0VGV4dCYmciYmeS5wdXNoKHt0ZXh0OnRoaXMuZGF0YS54QXhpc1JpZ2h0VGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRYQXhpc1RleHRGaWxsLHg6aCtmKyhtP2YvMjowKSx5OmU9PT0idG9wIj90aGlzLmNvbmZpZy54QXhpc0xhYmVsUGFkZGluZytzLnRvcDp0aGlzLmNvbmZpZy54QXhpc0xhYmVsUGFkZGluZytkK3UrdGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nLGZvbnRTaXplOnRoaXMuY29uZmlnLnhBeGlzTGFiZWxGb250U2l6ZSx2ZXJ0aWNhbFBvczptPyJjZW50ZXIiOiJsZWZ0Iixob3Jpem9udGFsUG9zOiJ0b3AiLHJvdGF0aW9uOjB9KSx0aGlzLmRhdGEueUF4aXNCb3R0b21UZXh0JiZuJiZ5LnB1c2goe3RleHQ6dGhpcy5kYXRhLnlBeGlzQm90dG9tVGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRZQXhpc1RleHRGaWxsLHg6dGhpcy5jb25maWcueUF4aXNQb3NpdGlvbj09PSJsZWZ0Ij90aGlzLmNvbmZpZy55QXhpc0xhYmVsUGFkZGluZzp0aGlzLmNvbmZpZy55QXhpc0xhYmVsUGFkZGluZytoK3ArdGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nLHk6ZCt1LShnP2wvMjowKSxmb250U2l6ZTp0aGlzLmNvbmZpZy55QXhpc0xhYmVsRm9udFNpemUsdmVydGljYWxQb3M6Zz8iY2VudGVyIjoibGVmdCIsaG9yaXpvbnRhbFBvczoidG9wIixyb3RhdGlvbjotOTB9KSx0aGlzLmRhdGEueUF4aXNUb3BUZXh0JiZuJiZ5LnB1c2goe3RleHQ6dGhpcy5kYXRhLnlBeGlzVG9wVGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRZQXhpc1RleHRGaWxsLHg6dGhpcy5jb25maWcueUF4aXNQb3NpdGlvbj09PSJsZWZ0Ij90aGlzLmNvbmZpZy55QXhpc0xhYmVsUGFkZGluZzp0aGlzLmNvbmZpZy55QXhpc0xhYmVsUGFkZGluZytoK3ArdGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nLHk6ZCtsLShnP2wvMjowKSxmb250U2l6ZTp0aGlzLmNvbmZpZy55QXhpc0xhYmVsRm9udFNpemUsdmVydGljYWxQb3M6Zz8iY2VudGVyIjoibGVmdCIsaG9yaXpvbnRhbFBvczoidG9wIixyb3RhdGlvbjotOTB9KSx5fWdldFF1YWRyYW50cyhlKXtsZXR7cXVhZHJhbnRTcGFjZTpyfT1lLHtxdWFkcmFudEhhbGZIZWlnaHQ6bixxdWFkcmFudExlZnQ6aSxxdWFkcmFudEhhbGZXaWR0aDphLHF1YWRyYW50VG9wOnN9PXIsbD1be3RleHQ6e3RleHQ6dGhpcy5kYXRhLnF1YWRyYW50MVRleHQsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50MVRleHRGaWxsLHg6MCx5OjAsZm9udFNpemU6dGhpcy5jb25maWcucXVhZHJhbnRMYWJlbEZvbnRTaXplLHZlcnRpY2FsUG9zOiJjZW50ZXIiLGhvcml6b250YWxQb3M6Im1pZGRsZSIscm90YXRpb246MH0seDppK2EseTpzLHdpZHRoOmEsaGVpZ2h0Om4sZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50MUZpbGx9LHt0ZXh0Ont0ZXh0OnRoaXMuZGF0YS5xdWFkcmFudDJUZXh0LGZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudDJUZXh0RmlsbCx4OjAseTowLGZvbnRTaXplOnRoaXMuY29uZmlnLnF1YWRyYW50TGFiZWxGb250U2l6ZSx2ZXJ0aWNhbFBvczoiY2VudGVyIixob3Jpem9udGFsUG9zOiJtaWRkbGUiLHJvdGF0aW9uOjB9LHg6aSx5OnMsd2lkdGg6YSxoZWlnaHQ6bixmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnQyRmlsbH0se3RleHQ6e3RleHQ6dGhpcy5kYXRhLnF1YWRyYW50M1RleHQsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50M1RleHRGaWxsLHg6MCx5OjAsZm9udFNpemU6dGhpcy5jb25maWcucXVhZHJhbnRMYWJlbEZvbnRTaXplLHZlcnRpY2FsUG9zOiJjZW50ZXIiLGhvcml6b250YWxQb3M6Im1pZGRsZSIscm90YXRpb246MH0seDppLHk6cytuLHdpZHRoOmEsaGVpZ2h0Om4sZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50M0ZpbGx9LHt0ZXh0Ont0ZXh0OnRoaXMuZGF0YS5xdWFkcmFudDRUZXh0LGZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudDRUZXh0RmlsbCx4OjAseTowLGZvbnRTaXplOnRoaXMuY29uZmlnLnF1YWRyYW50TGFiZWxGb250U2l6ZSx2ZXJ0aWNhbFBvczoiY2VudGVyIixob3Jpem9udGFsUG9zOiJtaWRkbGUiLHJvdGF0aW9uOjB9LHg6aSthLHk6cytuLHdpZHRoOmEsaGVpZ2h0Om4sZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50NEZpbGx9XTtmb3IobGV0IHUgb2YgbCl1LnRleHQueD11LngrdS53aWR0aC8yLHRoaXMuZGF0YS5wb2ludHMubGVuZ3RoPT09MD8odS50ZXh0Lnk9dS55K3UuaGVpZ2h0LzIsdS50ZXh0Lmhvcml6b250YWxQb3M9Im1pZGRsZSIpOih1LnRleHQueT11LnkrdGhpcy5jb25maWcucXVhZHJhbnRUZXh0VG9wUGFkZGluZyx1LnRleHQuaG9yaXpvbnRhbFBvcz0idG9wIik7cmV0dXJuIGx9Z2V0UXVhZHJhbnRQb2ludHMoZSl7bGV0e3F1YWRyYW50U3BhY2U6cn09ZSx7cXVhZHJhbnRIZWlnaHQ6bixxdWFkcmFudExlZnQ6aSxxdWFkcmFudFRvcDphLHF1YWRyYW50V2lkdGg6c309cixsPWdsKCkuZG9tYWluKFswLDFdKS5yYW5nZShbaSxzK2ldKSx1PWdsKCkuZG9tYWluKFswLDFdKS5yYW5nZShbbithLGFdKTtyZXR1cm4gdGhpcy5kYXRhLnBvaW50cy5tYXAoZj0+e2xldCBkPXRoaXMuY2xhc3Nlcy5nZXQoZi5jbGFzc05hbWUpO3JldHVybiBkJiYoZj17Li4uZCwuLi5mfSkse3g6bChmLngpLHk6dShmLnkpLGZpbGw6Zi5jb2xvcj8/dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudFBvaW50RmlsbCxyYWRpdXM6Zi5yYWRpdXM/P3RoaXMuY29uZmlnLnBvaW50UmFkaXVzLHRleHQ6e3RleHQ6Zi50ZXh0LGZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudFBvaW50VGV4dEZpbGwseDpsKGYueCkseTp1KGYueSkrdGhpcy5jb25maWcucG9pbnRUZXh0UGFkZGluZyx2ZXJ0aWNhbFBvczoiY2VudGVyIixob3Jpem9udGFsUG9zOiJ0b3AiLGZvbnRTaXplOnRoaXMuY29uZmlnLnBvaW50TGFiZWxGb250U2l6ZSxyb3RhdGlvbjowfSxzdHJva2VDb2xvcjpmLnN0cm9rZUNvbG9yPz90aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50UG9pbnRGaWxsLHN0cm9rZVdpZHRoOmYuc3Ryb2tlV2lkdGg/PyIwcHgifX0pfWdldEJvcmRlcnMoZSl7bGV0IHI9dGhpcy5jb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZVdpZHRoLzIse3F1YWRyYW50U3BhY2U6bn09ZSx7cXVhZHJhbnRIYWxmSGVpZ2h0OmkscXVhZHJhbnRIZWlnaHQ6YSxxdWFkcmFudExlZnQ6cyxxdWFkcmFudEhhbGZXaWR0aDpsLHF1YWRyYW50VG9wOnUscXVhZHJhbnRXaWR0aDpofT1uO3JldHVyblt7c3Ryb2tlRmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsLHN0cm9rZVdpZHRoOnRoaXMuY29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VXaWR0aCx4MTpzLXIseTE6dSx4MjpzK2grcix5Mjp1fSx7c3Ryb2tlRmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsLHN0cm9rZVdpZHRoOnRoaXMuY29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VXaWR0aCx4MTpzK2gseTE6dStyLHgyOnMraCx5Mjp1K2Etcn0se3N0cm9rZUZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbCxzdHJva2VXaWR0aDp0aGlzLmNvbmZpZy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlV2lkdGgseDE6cy1yLHkxOnUrYSx4MjpzK2grcix5Mjp1K2F9LHtzdHJva2VGaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGwsc3Ryb2tlV2lkdGg6dGhpcy5jb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZVdpZHRoLHgxOnMseTE6dStyLHgyOnMseTI6dSthLXJ9LHtzdHJva2VGaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGwsc3Ryb2tlV2lkdGg6dGhpcy5jb25maWcucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZVdpZHRoLHgxOnMrbCx5MTp1K3IseDI6cytsLHkyOnUrYS1yfSx7c3Ryb2tlRmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsLHN0cm9rZVdpZHRoOnRoaXMuY29uZmlnLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VXaWR0aCx4MTpzK3IseTE6dStpLHgyOnMraC1yLHkyOnUraX1dfWdldFRpdGxlKGUpe2lmKGUpcmV0dXJue3RleHQ6dGhpcy5kYXRhLnRpdGxlVGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRUaXRsZUZpbGwsZm9udFNpemU6dGhpcy5jb25maWcudGl0bGVGb250U2l6ZSxob3Jpem9udGFsUG9zOiJ0b3AiLHZlcnRpY2FsUG9zOiJjZW50ZXIiLHJvdGF0aW9uOjAseTp0aGlzLmNvbmZpZy50aXRsZVBhZGRpbmcseDp0aGlzLmNvbmZpZy5jaGFydFdpZHRoLzJ9fWJ1aWxkKCl7bGV0IGU9dGhpcy5jb25maWcuc2hvd1hBeGlzJiYhISh0aGlzLmRhdGEueEF4aXNMZWZ0VGV4dHx8dGhpcy5kYXRhLnhBeGlzUmlnaHRUZXh0KSxyPXRoaXMuY29uZmlnLnNob3dZQXhpcyYmISEodGhpcy5kYXRhLnlBeGlzVG9wVGV4dHx8dGhpcy5kYXRhLnlBeGlzQm90dG9tVGV4dCksbj10aGlzLmNvbmZpZy5zaG93VGl0bGUmJiEhdGhpcy5kYXRhLnRpdGxlVGV4dCxpPXRoaXMuZGF0YS5wb2ludHMubGVuZ3RoPjA/ImJvdHRvbSI6dGhpcy5jb25maWcueEF4aXNQb3NpdGlvbixhPXRoaXMuY2FsY3VsYXRlU3BhY2UoaSxlLHIsbik7cmV0dXJue3BvaW50czp0aGlzLmdldFF1YWRyYW50UG9pbnRzKGEpLHF1YWRyYW50czp0aGlzLmdldFF1YWRyYW50cyhhKSxheGlzTGFiZWxzOnRoaXMuZ2V0QXhpc0xhYmVscyhpLGUscixhKSxib3JkZXJMaW5lczp0aGlzLmdldEJvcmRlcnMoYSksdGl0bGU6dGhpcy5nZXRUaXRsZShuKX19fX0pO2Z1bmN0aW9uIGZPKHQpe3JldHVybiEvXiM/KFtcZEEtRmEtZl17Nn18W1xkQS1GYS1mXXszfSkkLy50ZXN0KHQpfWZ1bmN0aW9uIGRoZSh0KXtyZXR1cm4hL15cZCskLy50ZXN0KHQpfWZ1bmN0aW9uIHBoZSh0KXtyZXR1cm4hL15cZCtweCQvLnRlc3QodCl9dmFyIEFwLG1oZT1OKCgpPT57InVzZSBzdHJpY3QiO0FwPWNsYXNzIGV4dGVuZHMgRXJyb3J7c3RhdGlje28odGhpcywiSW52YWxpZFN0eWxlRXJyb3IiKX1jb25zdHJ1Y3RvcihlLHIsbil7c3VwZXIoYHZhbHVlIGZvciAke2V9ICR7cn0gaXMgaW52YWxpZCwgcGxlYXNlIHVzZSBhIHZhbGlkICR7bn1gKSx0aGlzLm5hbWU9IkludmFsaWRTdHlsZUVycm9yIn19O28oZk8sInZhbGlkYXRlSGV4Q29kZSIpO28oZGhlLCJ2YWxpZGF0ZU51bWJlciIpO28ocGhlLCJ2YWxpZGF0ZVNpemVJblBpeGVscyIpfSk7ZnVuY3Rpb24gWHUodCl7cmV0dXJuIFRyKHQudHJpbSgpLHBHZSl9ZnVuY3Rpb24gbUdlKHQpe2JhLnNldERhdGEoe3F1YWRyYW50MVRleHQ6WHUodC50ZXh0KX0pfWZ1bmN0aW9uIGdHZSh0KXtiYS5zZXREYXRhKHtxdWFkcmFudDJUZXh0Olh1KHQudGV4dCl9KX1mdW5jdGlvbiB5R2UodCl7YmEuc2V0RGF0YSh7cXVhZHJhbnQzVGV4dDpYdSh0LnRleHQpfSl9ZnVuY3Rpb24gdkdlKHQpe2JhLnNldERhdGEoe3F1YWRyYW50NFRleHQ6WHUodC50ZXh0KX0pfWZ1bmN0aW9uIHhHZSh0KXtiYS5zZXREYXRhKHt4QXhpc0xlZnRUZXh0Olh1KHQudGV4dCl9KX1mdW5jdGlvbiBiR2UodCl7YmEuc2V0RGF0YSh7eEF4aXNSaWdodFRleHQ6WHUodC50ZXh0KX0pfWZ1bmN0aW9uIHdHZSh0KXtiYS5zZXREYXRhKHt5QXhpc1RvcFRleHQ6WHUodC50ZXh0KX0pfWZ1bmN0aW9uIFRHZSh0KXtiYS5zZXREYXRhKHt5QXhpc0JvdHRvbVRleHQ6WHUodC50ZXh0KX0pfWZ1bmN0aW9uIGRPKHQpe2xldCBlPXt9O2ZvcihsZXQgciBvZiB0KXtsZXRbbixpXT1yLnRyaW0oKS5zcGxpdCgvXHMqOlxzKi8pO2lmKG49PT0icmFkaXVzIil7aWYoZGhlKGkpKXRocm93IG5ldyBBcChuLGksIm51bWJlciIpO2UucmFkaXVzPXBhcnNlSW50KGkpfWVsc2UgaWYobj09PSJjb2xvciIpe2lmKGZPKGkpKXRocm93IG5ldyBBcChuLGksImhleCBjb2RlIik7ZS5jb2xvcj1pfWVsc2UgaWYobj09PSJzdHJva2UtY29sb3IiKXtpZihmTyhpKSl0aHJvdyBuZXcgQXAobixpLCJoZXggY29kZSIpO2Uuc3Ryb2tlQ29sb3I9aX1lbHNlIGlmKG49PT0ic3Ryb2tlLXdpZHRoIil7aWYocGhlKGkpKXRocm93IG5ldyBBcChuLGksIm51bWJlciBvZiBwaXhlbHMgKGVnLiAxMHB4KSIpO2Uuc3Ryb2tlV2lkdGg9aX1lbHNlIHRocm93IG5ldyBFcnJvcihgc3R5bGUgbmFtZWQgJHtufSBpcyBub3Qgc3VwcG9ydGVkLmApfXJldHVybiBlfWZ1bmN0aW9uIGtHZSh0LGUscixuLGkpe2xldCBhPWRPKGkpO2JhLmFkZFBvaW50cyhbe3g6cix5Om4sdGV4dDpYdSh0LnRleHQpLGNsYXNzTmFtZTplLC4uLmF9XSl9ZnVuY3Rpb24gRUdlKHQsZSl7YmEuYWRkQ2xhc3ModCxkTyhlKSl9ZnVuY3Rpb24gU0dlKHQpe2JhLnNldENvbmZpZyh7Y2hhcnRXaWR0aDp0fSl9ZnVuY3Rpb24gQ0dlKHQpe2JhLnNldENvbmZpZyh7Y2hhcnRIZWlnaHQ6dH0pfWZ1bmN0aW9uIEFHZSgpe2xldCB0PW1lKCkse3RoZW1lVmFyaWFibGVzOmUscXVhZHJhbnRDaGFydDpyfT10O3JldHVybiByJiZiYS5zZXRDb25maWcociksYmEuc2V0VGhlbWVDb25maWcoe3F1YWRyYW50MUZpbGw6ZS5xdWFkcmFudDFGaWxsLHF1YWRyYW50MkZpbGw6ZS5xdWFkcmFudDJGaWxsLHF1YWRyYW50M0ZpbGw6ZS5xdWFkcmFudDNGaWxsLHF1YWRyYW50NEZpbGw6ZS5xdWFkcmFudDRGaWxsLHF1YWRyYW50MVRleHRGaWxsOmUucXVhZHJhbnQxVGV4dEZpbGwscXVhZHJhbnQyVGV4dEZpbGw6ZS5xdWFkcmFudDJUZXh0RmlsbCxxdWFkcmFudDNUZXh0RmlsbDplLnF1YWRyYW50M1RleHRGaWxsLHF1YWRyYW50NFRleHRGaWxsOmUucXVhZHJhbnQ0VGV4dEZpbGwscXVhZHJhbnRQb2ludEZpbGw6ZS5xdWFkcmFudFBvaW50RmlsbCxxdWFkcmFudFBvaW50VGV4dEZpbGw6ZS5xdWFkcmFudFBvaW50VGV4dEZpbGwscXVhZHJhbnRYQXhpc1RleHRGaWxsOmUucXVhZHJhbnRYQXhpc1RleHRGaWxsLHF1YWRyYW50WUF4aXNUZXh0RmlsbDplLnF1YWRyYW50WUF4aXNUZXh0RmlsbCxxdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbDplLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsLHF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsOmUucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGwscXVhZHJhbnRUaXRsZUZpbGw6ZS5xdWFkcmFudFRpdGxlRmlsbH0pLGJhLnNldERhdGEoe3RpdGxlVGV4dDpJcigpfSksYmEuYnVpbGQoKX12YXIgcEdlLGJhLF9HZSxnaGUseWhlPU4oKCk9PnsidXNlIHN0cmljdCI7enQoKTtncigpO21pKCk7ZmhlKCk7bWhlKCk7cEdlPW1lKCk7byhYdSwidGV4dFNhbml0aXplciIpO2JhPW5ldyB5NjtvKG1HZSwic2V0UXVhZHJhbnQxVGV4dCIpO28oZ0dlLCJzZXRRdWFkcmFudDJUZXh0Iik7byh5R2UsInNldFF1YWRyYW50M1RleHQiKTtvKHZHZSwic2V0UXVhZHJhbnQ0VGV4dCIpO28oeEdlLCJzZXRYQXhpc0xlZnRUZXh0Iik7byhiR2UsInNldFhBeGlzUmlnaHRUZXh0Iik7byh3R2UsInNldFlBeGlzVG9wVGV4dCIpO28oVEdlLCJzZXRZQXhpc0JvdHRvbVRleHQiKTtvKGRPLCJwYXJzZVN0eWxlcyIpO28oa0dlLCJhZGRQb2ludCIpO28oRUdlLCJhZGRDbGFzcyIpO28oU0dlLCJzZXRXaWR0aCIpO28oQ0dlLCJzZXRIZWlnaHQiKTtvKEFHZSwiZ2V0UXVhZHJhbnREYXRhIik7X0dlPW8oZnVuY3Rpb24oKXtiYS5jbGVhcigpLEFyKCl9LCJjbGVhciIpLGdoZT17c2V0V2lkdGg6U0dlLHNldEhlaWdodDpDR2Usc2V0UXVhZHJhbnQxVGV4dDptR2Usc2V0UXVhZHJhbnQyVGV4dDpnR2Usc2V0UXVhZHJhbnQzVGV4dDp5R2Usc2V0UXVhZHJhbnQ0VGV4dDp2R2Usc2V0WEF4aXNMZWZ0VGV4dDp4R2Usc2V0WEF4aXNSaWdodFRleHQ6YkdlLHNldFlBeGlzVG9wVGV4dDp3R2Usc2V0WUF4aXNCb3R0b21UZXh0OlRHZSxwYXJzZVN0eWxlczpkTyxhZGRQb2ludDprR2UsYWRkQ2xhc3M6RUdlLGdldFF1YWRyYW50RGF0YTpBR2UsY2xlYXI6X0dlLHNldEFjY1RpdGxlOkxyLGdldEFjY1RpdGxlOlJyLHNldERpYWdyYW1UaXRsZTokcixnZXREaWFncmFtVGl0bGU6SXIsZ2V0QWNjRGVzY3JpcHRpb246TXIsc2V0QWNjRGVzY3JpcHRpb246TnJ9fSk7dmFyIERHZSx2aGUseGhlPU4oKCk9PnsidXNlIHN0cmljdCI7ZHIoKTt6dCgpO3Z0KCk7RWkoKTtER2U9bygodCxlLHIsbik9PntmdW5jdGlvbiBpKFMpe3JldHVybiBTPT09InRvcCI/ImhhbmdpbmciOiJtaWRkbGUifW8oaSwiZ2V0RG9taW5hbnRCYXNlTGluZSIpO2Z1bmN0aW9uIGEoUyl7cmV0dXJuIFM9PT0ibGVmdCI/InN0YXJ0IjoibWlkZGxlIn1vKGEsImdldFRleHRBbmNob3IiKTtmdW5jdGlvbiBzKFMpe3JldHVybmB0cmFuc2xhdGUoJHtTLnh9LCAke1MueX0pIHJvdGF0ZSgke1Mucm90YXRpb258fDB9KWB9byhzLCJnZXRUcmFuc2Zvcm1hdGlvbiIpO2xldCBsPW1lKCk7WS5kZWJ1ZyhgUmVuZGVyaW5nIHF1YWRyYW50IGNoYXJ0CmArdCk7bGV0IHU9bC5zZWN1cml0eUxldmVsLGg7dT09PSJzYW5kYm94IiYmKGg9R2UoIiNpIitlKSk7bGV0IGQ9KHU9PT0ic2FuZGJveCI/R2UoaC5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KTpHZSgiYm9keSIpKS5zZWxlY3QoYFtpZD0iJHtlfSJdYCkscD1kLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibWFpbiIpLG09bC5xdWFkcmFudENoYXJ0Py5jaGFydFdpZHRoPz81MDAsZz1sLnF1YWRyYW50Q2hhcnQ/LmNoYXJ0SGVpZ2h0Pz81MDA7dm4oZCxnLG0sbC5xdWFkcmFudENoYXJ0Py51c2VNYXhXaWR0aD8/ITApLGQuYXR0cigidmlld0JveCIsIjAgMCAiK20rIiAiK2cpLG4uZGIuc2V0SGVpZ2h0KGcpLG4uZGIuc2V0V2lkdGgobSk7bGV0IHk9bi5kYi5nZXRRdWFkcmFudERhdGEoKSx2PXAuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJxdWFkcmFudHMiKSx4PXAuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJib3JkZXIiKSxiPXAuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJkYXRhLXBvaW50cyIpLHc9cC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVscyIpLEM9cC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRpdGxlIik7eS50aXRsZSYmQy5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJmaWxsIix5LnRpdGxlLmZpbGwpLmF0dHIoImZvbnQtc2l6ZSIseS50aXRsZS5mb250U2l6ZSkuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLGkoeS50aXRsZS5ob3Jpem9udGFsUG9zKSkuYXR0cigidGV4dC1hbmNob3IiLGEoeS50aXRsZS52ZXJ0aWNhbFBvcykpLmF0dHIoInRyYW5zZm9ybSIscyh5LnRpdGxlKSkudGV4dCh5LnRpdGxlLnRleHQpLHkuYm9yZGVyTGluZXMmJnguc2VsZWN0QWxsKCJsaW5lIikuZGF0YSh5LmJvcmRlckxpbmVzKS5lbnRlcigpLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIixTPT5TLngxKS5hdHRyKCJ5MSIsUz0+Uy55MSkuYXR0cigieDIiLFM9PlMueDIpLmF0dHIoInkyIixTPT5TLnkyKS5zdHlsZSgic3Ryb2tlIixTPT5TLnN0cm9rZUZpbGwpLnN0eWxlKCJzdHJva2Utd2lkdGgiLFM9PlMuc3Ryb2tlV2lkdGgpO2xldCBUPXYuc2VsZWN0QWxsKCJnLnF1YWRyYW50IikuZGF0YSh5LnF1YWRyYW50cykuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInF1YWRyYW50Iik7VC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IixTPT5TLngpLmF0dHIoInkiLFM9PlMueSkuYXR0cigid2lkdGgiLFM9PlMud2lkdGgpLmF0dHIoImhlaWdodCIsUz0+Uy5oZWlnaHQpLmF0dHIoImZpbGwiLFM9PlMuZmlsbCksVC5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJmaWxsIixTPT5TLnRleHQuZmlsbCkuYXR0cigiZm9udC1zaXplIixTPT5TLnRleHQuZm9udFNpemUpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIixTPT5pKFMudGV4dC5ob3Jpem9udGFsUG9zKSkuYXR0cigidGV4dC1hbmNob3IiLFM9PmEoUy50ZXh0LnZlcnRpY2FsUG9zKSkuYXR0cigidHJhbnNmb3JtIixTPT5zKFMudGV4dCkpLnRleHQoUz0+Uy50ZXh0LnRleHQpLHcuc2VsZWN0QWxsKCJnLmxhYmVsIikuZGF0YSh5LmF4aXNMYWJlbHMpLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLnRleHQoUz0+Uy50ZXh0KS5hdHRyKCJmaWxsIixTPT5TLmZpbGwpLmF0dHIoImZvbnQtc2l6ZSIsUz0+Uy5mb250U2l6ZSkuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLFM9PmkoUy5ob3Jpem9udGFsUG9zKSkuYXR0cigidGV4dC1hbmNob3IiLFM9PmEoUy52ZXJ0aWNhbFBvcykpLmF0dHIoInRyYW5zZm9ybSIsUz0+cyhTKSk7bGV0IEE9Yi5zZWxlY3RBbGwoImcuZGF0YS1wb2ludCIpLmRhdGEoeS5wb2ludHMpLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJkYXRhLXBvaW50Iik7QS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IixTPT5TLngpLmF0dHIoImN5IixTPT5TLnkpLmF0dHIoInIiLFM9PlMucmFkaXVzKS5hdHRyKCJmaWxsIixTPT5TLmZpbGwpLmF0dHIoInN0cm9rZSIsUz0+Uy5zdHJva2VDb2xvcikuYXR0cigic3Ryb2tlLXdpZHRoIixTPT5TLnN0cm9rZVdpZHRoKSxBLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLnRleHQoUz0+Uy50ZXh0LnRleHQpLmF0dHIoImZpbGwiLFM9PlMudGV4dC5maWxsKS5hdHRyKCJmb250LXNpemUiLFM9PlMudGV4dC5mb250U2l6ZSkuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLFM9PmkoUy50ZXh0Lmhvcml6b250YWxQb3MpKS5hdHRyKCJ0ZXh0LWFuY2hvciIsUz0+YShTLnRleHQudmVydGljYWxQb3MpKS5hdHRyKCJ0cmFuc2Zvcm0iLFM9PnMoUy50ZXh0KSl9LCJkcmF3IiksdmhlPXtkcmF3OkRHZX19KTt2YXIgYmhlPXt9O2hyKGJoZSx7ZGlhZ3JhbTooKT0+TEdlfSk7dmFyIExHZSx3aGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtoaGUoKTt5aGUoKTt4aGUoKTtMR2U9e3BhcnNlcjp1aGUsZGI6Z2hlLHJlbmRlcmVyOnZoZSxzdHlsZXM6bygoKT0+IiIsInN0eWxlcyIpfX0pO3ZhciBwTyxFaGUsU2hlPU4oKCk9PnsidXNlIHN0cmljdCI7cE89ZnVuY3Rpb24oKXt2YXIgdD1vKGZ1bmN0aW9uKE8sTSxCLEYpe2ZvcihCPUJ8fHt9LEY9Ty5sZW5ndGg7Ri0tO0JbT1tGXV09TSk7cmV0dXJuIEJ9LCJvIiksZT1bMSwxMCwxMiwxNCwxNiwxOCwxOSwyMSwyM10scj1bMiw2XSxuPVsxLDNdLGk9WzEsNV0sYT1bMSw2XSxzPVsxLDddLGw9WzEsNSwxMCwxMiwxNCwxNiwxOCwxOSwyMSwyMywzNCwzNSwzNl0sdT1bMSwyNV0saD1bMSwyNl0sZj1bMSwyOF0sZD1bMSwyOV0scD1bMSwzMF0sbT1bMSwzMV0sZz1bMSwzMl0seT1bMSwzM10sdj1bMSwzNF0seD1bMSwzNV0sYj1bMSwzNl0sdz1bMSwzN10sQz1bMSw0M10sVD1bMSw0Ml0sRT1bMSw0N10sQT1bMSw1MF0sUz1bMSwxMCwxMiwxNCwxNiwxOCwxOSwyMSwyMywzNCwzNSwzNl0sXz1bMSwxMCwxMiwxNCwxNiwxOCwxOSwyMSwyMywyNCwyNiwyNywyOCwzNCwzNSwzNl0sST1bMSwxMCwxMiwxNCwxNiwxOCwxOSwyMSwyMywyNCwyNiwyNywyOCwzNCwzNSwzNiw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MF0sRD1bMSw2NF0saz17dHJhY2U6byhmdW5jdGlvbigpe30sInRyYWNlIikseXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6Myxlb2w6NCxYWUNIQVJUOjUsY2hhcnRDb25maWc6Nixkb2N1bWVudDo3LENIQVJUX09SSUVOVEFUSU9OOjgsc3RhdGVtZW50OjksdGl0bGU6MTAsdGV4dDoxMSxYX0FYSVM6MTIscGFyc2VYQXhpczoxMyxZX0FYSVM6MTQscGFyc2VZQXhpczoxNSxMSU5FOjE2LHBsb3REYXRhOjE3LEJBUjoxOCxhY2NfdGl0bGU6MTksYWNjX3RpdGxlX3ZhbHVlOjIwLGFjY19kZXNjcjoyMSxhY2NfZGVzY3JfdmFsdWU6MjIsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZToyMyxTUVVBUkVfQlJBQ0VTX1NUQVJUOjI0LGNvbW1hU2VwYXJhdGVkTnVtYmVyczoyNSxTUVVBUkVfQlJBQ0VTX0VORDoyNixOVU1CRVJfV0lUSF9ERUNJTUFMOjI3LENPTU1BOjI4LHhBeGlzRGF0YToyOSxiYW5kRGF0YTozMCxBUlJPV19ERUxJTUlURVI6MzEsY29tbWFTZXBhcmF0ZWRUZXh0czozMix5QXhpc0RhdGE6MzMsTkVXTElORTozNCxTRU1JOjM1LEVPRjozNixhbHBoYU51bTozNyxTVFI6MzgsTURfU1RSOjM5LGFscGhhTnVtVG9rZW46NDAsQU1QOjQxLE5VTTo0MixBTFBIQTo0MyxQTFVTOjQ0LEVRVUFMUzo0NSxNVUxUOjQ2LERPVDo0NyxCUktUOjQ4LE1JTlVTOjQ5LFVOREVSU0NPUkU6NTAsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDU6IlhZQ0hBUlQiLDg6IkNIQVJUX09SSUVOVEFUSU9OIiwxMDoidGl0bGUiLDEyOiJYX0FYSVMiLDE0OiJZX0FYSVMiLDE2OiJMSU5FIiwxODoiQkFSIiwxOToiYWNjX3RpdGxlIiwyMDoiYWNjX3RpdGxlX3ZhbHVlIiwyMToiYWNjX2Rlc2NyIiwyMjoiYWNjX2Rlc2NyX3ZhbHVlIiwyMzoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMjQ6IlNRVUFSRV9CUkFDRVNfU1RBUlQiLDI2OiJTUVVBUkVfQlJBQ0VTX0VORCIsMjc6Ik5VTUJFUl9XSVRIX0RFQ0lNQUwiLDI4OiJDT01NQSIsMzE6IkFSUk9XX0RFTElNSVRFUiIsMzQ6Ik5FV0xJTkUiLDM1OiJTRU1JIiwzNjoiRU9GIiwzODoiU1RSIiwzOToiTURfU1RSIiw0MToiQU1QIiw0MjoiTlVNIiw0MzoiQUxQSEEiLDQ0OiJQTFVTIiw0NToiRVFVQUxTIiw0NjoiTVVMVCIsNDc6IkRPVCIsNDg6IkJSS1QiLDQ5OiJNSU5VUyIsNTA6IlVOREVSU0NPUkUifSxwcm9kdWN0aW9uc186WzAsWzMsMl0sWzMsM10sWzMsMl0sWzMsMV0sWzYsMV0sWzcsMF0sWzcsMl0sWzksMl0sWzksMl0sWzksMl0sWzksMl0sWzksMl0sWzksM10sWzksMl0sWzksM10sWzksMl0sWzksMl0sWzksMV0sWzE3LDNdLFsyNSwzXSxbMjUsMV0sWzEzLDFdLFsxMywyXSxbMTMsMV0sWzI5LDFdLFsyOSwzXSxbMzAsM10sWzMyLDNdLFszMiwxXSxbMTUsMV0sWzE1LDJdLFsxNSwxXSxbMzMsM10sWzQsMV0sWzQsMV0sWzQsMV0sWzExLDFdLFsxMSwxXSxbMTEsMV0sWzM3LDFdLFszNywyXSxbNDAsMV0sWzQwLDFdLFs0MCwxXSxbNDAsMV0sWzQwLDFdLFs0MCwxXSxbNDAsMV0sWzQwLDFdLFs0MCwxXSxbNDAsMV1dLHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbihNLEIsRixQLHosJCxIKXt2YXIgUT0kLmxlbmd0aC0xO3N3aXRjaCh6KXtjYXNlIDU6UC5zZXRPcmllbnRhdGlvbigkW1FdKTticmVhaztjYXNlIDk6UC5zZXREaWFncmFtVGl0bGUoJFtRXS50ZXh0LnRyaW0oKSk7YnJlYWs7Y2FzZSAxMjpQLnNldExpbmVEYXRhKHt0ZXh0OiIiLHR5cGU6InRleHQifSwkW1FdKTticmVhaztjYXNlIDEzOlAuc2V0TGluZURhdGEoJFtRLTFdLCRbUV0pO2JyZWFrO2Nhc2UgMTQ6UC5zZXRCYXJEYXRhKHt0ZXh0OiIiLHR5cGU6InRleHQifSwkW1FdKTticmVhaztjYXNlIDE1OlAuc2V0QmFyRGF0YSgkW1EtMV0sJFtRXSk7YnJlYWs7Y2FzZSAxNjp0aGlzLiQ9JFtRXS50cmltKCksUC5zZXRBY2NUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMTc6Y2FzZSAxODp0aGlzLiQ9JFtRXS50cmltKCksUC5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO2JyZWFrO2Nhc2UgMTk6dGhpcy4kPSRbUS0xXTticmVhaztjYXNlIDIwOnRoaXMuJD1bTnVtYmVyKCRbUS0yXSksLi4uJFtRXV07YnJlYWs7Y2FzZSAyMTp0aGlzLiQ9W051bWJlcigkW1FdKV07YnJlYWs7Y2FzZSAyMjpQLnNldFhBeGlzVGl0bGUoJFtRXSk7YnJlYWs7Y2FzZSAyMzpQLnNldFhBeGlzVGl0bGUoJFtRLTFdKTticmVhaztjYXNlIDI0OlAuc2V0WEF4aXNUaXRsZSh7dHlwZToidGV4dCIsdGV4dDoiIn0pO2JyZWFrO2Nhc2UgMjU6UC5zZXRYQXhpc0JhbmQoJFtRXSk7YnJlYWs7Y2FzZSAyNjpQLnNldFhBeGlzUmFuZ2VEYXRhKE51bWJlcigkW1EtMl0pLE51bWJlcigkW1FdKSk7YnJlYWs7Y2FzZSAyNzp0aGlzLiQ9JFtRLTFdO2JyZWFrO2Nhc2UgMjg6dGhpcy4kPVskW1EtMl0sLi4uJFtRXV07YnJlYWs7Y2FzZSAyOTp0aGlzLiQ9WyRbUV1dO2JyZWFrO2Nhc2UgMzA6UC5zZXRZQXhpc1RpdGxlKCRbUV0pO2JyZWFrO2Nhc2UgMzE6UC5zZXRZQXhpc1RpdGxlKCRbUS0xXSk7YnJlYWs7Y2FzZSAzMjpQLnNldFlBeGlzVGl0bGUoe3R5cGU6InRleHQiLHRleHQ6IiJ9KTticmVhaztjYXNlIDMzOlAuc2V0WUF4aXNSYW5nZURhdGEoTnVtYmVyKCRbUS0yXSksTnVtYmVyKCRbUV0pKTticmVhaztjYXNlIDM3OnRoaXMuJD17dGV4dDokW1FdLHR5cGU6InRleHQifTticmVhaztjYXNlIDM4OnRoaXMuJD17dGV4dDokW1FdLHR5cGU6InRleHQifTticmVhaztjYXNlIDM5OnRoaXMuJD17dGV4dDokW1FdLHR5cGU6Im1hcmtkb3duIn07YnJlYWs7Y2FzZSA0MDp0aGlzLiQ9JFtRXTticmVhaztjYXNlIDQxOnRoaXMuJD0kW1EtMV0rIiIrJFtRXTticmVha319LCJhbm9ueW1vdXMiKSx0YWJsZTpbdChlLHIsezM6MSw0OjIsNzo0LDU6biwzNDppLDM1OmEsMzY6c30pLHsxOlszXX0sdChlLHIsezQ6Miw3OjQsMzo4LDU6biwzNDppLDM1OmEsMzY6c30pLHQoZSxyLHs0OjIsNzo0LDY6OSwzOjEwLDU6biw4OlsxLDExXSwzNDppLDM1OmEsMzY6c30pLHsxOlsyLDRdLDk6MTIsMTA6WzEsMTNdLDEyOlsxLDE0XSwxNDpbMSwxNV0sMTY6WzEsMTZdLDE4OlsxLDE3XSwxOTpbMSwxOF0sMjE6WzEsMTldLDIzOlsxLDIwXX0sdChsLFsyLDM0XSksdChsLFsyLDM1XSksdChsLFsyLDM2XSksezE6WzIsMV19LHQoZSxyLHs0OjIsNzo0LDM6MjEsNTpuLDM0OmksMzU6YSwzNjpzfSksezE6WzIsM119LHQobCxbMiw1XSksdChlLFsyLDddLHs0OjIyLDM0OmksMzU6YSwzNjpzfSksezExOjIzLDM3OjI0LDM4OnUsMzk6aCw0MDoyNyw0MTpmLDQyOmQsNDM6cCw0NDptLDQ1OmcsNDY6eSw0Nzp2LDQ4OngsNDk6Yiw1MDp3fSx7MTE6MzksMTM6MzgsMjQ6QywyNzpULDI5OjQwLDMwOjQxLDM3OjI0LDM4OnUsMzk6aCw0MDoyNyw0MTpmLDQyOmQsNDM6cCw0NDptLDQ1OmcsNDY6eSw0Nzp2LDQ4OngsNDk6Yiw1MDp3fSx7MTE6NDUsMTU6NDQsMjc6RSwzMzo0NiwzNzoyNCwzODp1LDM5OmgsNDA6MjcsNDE6Ziw0MjpkLDQzOnAsNDQ6bSw0NTpnLDQ2OnksNDc6diw0ODp4LDQ5OmIsNTA6d30sezExOjQ5LDE3OjQ4LDI0OkEsMzc6MjQsMzg6dSwzOTpoLDQwOjI3LDQxOmYsNDI6ZCw0MzpwLDQ0Om0sNDU6Zyw0Njp5LDQ3OnYsNDg6eCw0OTpiLDUwOnd9LHsxMTo1MiwxNzo1MSwyNDpBLDM3OjI0LDM4OnUsMzk6aCw0MDoyNyw0MTpmLDQyOmQsNDM6cCw0NDptLDQ1OmcsNDY6eSw0Nzp2LDQ4OngsNDk6Yiw1MDp3fSx7MjA6WzEsNTNdfSx7MjI6WzEsNTRdfSx0KFMsWzIsMThdKSx7MTpbMiwyXX0sdChTLFsyLDhdKSx0KFMsWzIsOV0pLHQoXyxbMiwzN10sezQwOjU1LDQxOmYsNDI6ZCw0MzpwLDQ0Om0sNDU6Zyw0Njp5LDQ3OnYsNDg6eCw0OTpiLDUwOnd9KSx0KF8sWzIsMzhdKSx0KF8sWzIsMzldKSx0KEksWzIsNDBdKSx0KEksWzIsNDJdKSx0KEksWzIsNDNdKSx0KEksWzIsNDRdKSx0KEksWzIsNDVdKSx0KEksWzIsNDZdKSx0KEksWzIsNDddKSx0KEksWzIsNDhdKSx0KEksWzIsNDldKSx0KEksWzIsNTBdKSx0KEksWzIsNTFdKSx0KFMsWzIsMTBdKSx0KFMsWzIsMjJdLHszMDo0MSwyOTo1NiwyNDpDLDI3OlR9KSx0KFMsWzIsMjRdKSx0KFMsWzIsMjVdKSx7MzE6WzEsNTddfSx7MTE6NTksMzI6NTgsMzc6MjQsMzg6dSwzOTpoLDQwOjI3LDQxOmYsNDI6ZCw0MzpwLDQ0Om0sNDU6Zyw0Njp5LDQ3OnYsNDg6eCw0OTpiLDUwOnd9LHQoUyxbMiwxMV0pLHQoUyxbMiwzMF0sezMzOjYwLDI3OkV9KSx0KFMsWzIsMzJdKSx7MzE6WzEsNjFdfSx0KFMsWzIsMTJdKSx7MTc6NjIsMjQ6QX0sezI1OjYzLDI3OkR9LHQoUyxbMiwxNF0pLHsxNzo2NSwyNDpBfSx0KFMsWzIsMTZdKSx0KFMsWzIsMTddKSx0KEksWzIsNDFdKSx0KFMsWzIsMjNdKSx7Mjc6WzEsNjZdfSx7MjY6WzEsNjddfSx7MjY6WzIsMjldLDI4OlsxLDY4XX0sdChTLFsyLDMxXSksezI3OlsxLDY5XX0sdChTLFsyLDEzXSksezI2OlsxLDcwXX0sezI2OlsyLDIxXSwyODpbMSw3MV19LHQoUyxbMiwxNV0pLHQoUyxbMiwyNl0pLHQoUyxbMiwyN10pLHsxMTo1OSwzMjo3MiwzNzoyNCwzODp1LDM5OmgsNDA6MjcsNDE6Ziw0MjpkLDQzOnAsNDQ6bSw0NTpnLDQ2OnksNDc6diw0ODp4LDQ5OmIsNTA6d30sdChTLFsyLDMzXSksdChTLFsyLDE5XSksezI1OjczLDI3OkR9LHsyNjpbMiwyOF19LHsyNjpbMiwyMF19XSxkZWZhdWx0QWN0aW9uczp7ODpbMiwxXSwxMDpbMiwzXSwyMTpbMiwyXSw3MjpbMiwyOF0sNzM6WzIsMjBdfSxwYXJzZUVycm9yOm8oZnVuY3Rpb24oTSxCKXtpZihCLnJlY292ZXJhYmxlKXRoaXMudHJhY2UoTSk7ZWxzZXt2YXIgRj1uZXcgRXJyb3IoTSk7dGhyb3cgRi5oYXNoPUIsRn19LCJwYXJzZUVycm9yIikscGFyc2U6byhmdW5jdGlvbihNKXt2YXIgQj10aGlzLEY9WzBdLFA9W10sej1bbnVsbF0sJD1bXSxIPXRoaXMudGFibGUsUT0iIixqPTAsaWU9MCxuZT0wLGxlPTIsaGU9MSxLPSQuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksWD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLHRlPXt5eTp7fX07Zm9yKHZhciBKIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksSikmJih0ZS55eVtKXT10aGlzLnl5W0pdKTtYLnNldElucHV0KE0sdGUueXkpLHRlLnl5LmxleGVyPVgsdGUueXkucGFyc2VyPXRoaXMsdHlwZW9mIFgueXlsbG9jPiJ1IiYmKFgueXlsbG9jPXt9KTt2YXIgc2U9WC55eWxsb2M7JC5wdXNoKHNlKTt2YXIgdWU9WC5vcHRpb25zJiZYLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiB0ZS55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj10ZS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBaKHJlKXtGLmxlbmd0aD1GLmxlbmd0aC0yKnJlLHoubGVuZ3RoPXoubGVuZ3RoLXJlLCQubGVuZ3RoPSQubGVuZ3RoLXJlfW8oWiwicG9wU3RhY2siKTtmdW5jdGlvbiBTZSgpe3ZhciByZTtyZXR1cm4gcmU9UC5wb3AoKXx8WC5sZXgoKXx8aGUsdHlwZW9mIHJlIT0ibnVtYmVyIiYmKHJlIGluc3RhbmNlb2YgQXJyYXkmJihQPXJlLHJlPVAucG9wKCkpLHJlPUIuc3ltYm9sc19bcmVdfHxyZSkscmV9byhTZSwibGV4Iik7Zm9yKHZhciBjZSxhZSxPZSxnZSx6ZSxIZSwkZT17fSxSZSxJZSxiZSxXOzspe2lmKE9lPUZbRi5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1tPZV0/Z2U9dGhpcy5kZWZhdWx0QWN0aW9uc1tPZV06KChjZT09PW51bGx8fHR5cGVvZiBjZT4idSIpJiYoY2U9U2UoKSksZ2U9SFtPZV0mJkhbT2VdW2NlXSksdHlwZW9mIGdlPiJ1Inx8IWdlLmxlbmd0aHx8IWdlWzBdKXt2YXIgZGU9IiI7Vz1bXTtmb3IoUmUgaW4gSFtPZV0pdGhpcy50ZXJtaW5hbHNfW1JlXSYmUmU+bGUmJlcucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW1JlXSsiJyIpO1guc2hvd1Bvc2l0aW9uP2RlPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGorMSkrYDoKYCtYLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArVy5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW2NlXXx8Y2UpKyInIjpkZT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhqKzEpKyI6IFVuZXhwZWN0ZWQgIisoY2U9PWhlPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW2NlXXx8Y2UpKyInIiksdGhpcy5wYXJzZUVycm9yKGRlLHt0ZXh0OlgubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW2NlXXx8Y2UsbGluZTpYLnl5bGluZW5vLGxvYzpzZSxleHBlY3RlZDpXfSl9aWYoZ2VbMF1pbnN0YW5jZW9mIEFycmF5JiZnZS5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK09lKyIsIHRva2VuOiAiK2NlKTtzd2l0Y2goZ2VbMF0pe2Nhc2UgMTpGLnB1c2goY2UpLHoucHVzaChYLnl5dGV4dCksJC5wdXNoKFgueXlsbG9jKSxGLnB1c2goZ2VbMV0pLGNlPW51bGwsYWU/KGNlPWFlLGFlPW51bGwpOihpZT1YLnl5bGVuZyxRPVgueXl0ZXh0LGo9WC55eWxpbmVubyxzZT1YLnl5bGxvYyxuZT4wJiZuZS0tKTticmVhaztjYXNlIDI6aWYoSWU9dGhpcy5wcm9kdWN0aW9uc19bZ2VbMV1dWzFdLCRlLiQ9elt6Lmxlbmd0aC1JZV0sJGUuXyQ9e2ZpcnN0X2xpbmU6JFskLmxlbmd0aC0oSWV8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTokWyQubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46JFskLmxlbmd0aC0oSWV8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46JFskLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sdWUmJigkZS5fJC5yYW5nZT1bJFskLmxlbmd0aC0oSWV8fDEpXS5yYW5nZVswXSwkWyQubGVuZ3RoLTFdLnJhbmdlWzFdXSksSGU9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KCRlLFtRLGllLGosdGUueXksZ2VbMV0seiwkXS5jb25jYXQoSykpLHR5cGVvZiBIZTwidSIpcmV0dXJuIEhlO0llJiYoRj1GLnNsaWNlKDAsLTEqSWUqMiksej16LnNsaWNlKDAsLTEqSWUpLCQ9JC5zbGljZSgwLC0xKkllKSksRi5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW2dlWzFdXVswXSksei5wdXNoKCRlLiQpLCQucHVzaCgkZS5fJCksYmU9SFtGW0YubGVuZ3RoLTJdXVtGW0YubGVuZ3RoLTFdXSxGLnB1c2goYmUpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9LCJwYXJzZSIpfSxMPWZ1bmN0aW9uKCl7dmFyIE89e0VPRjoxLHBhcnNlRXJyb3I6byhmdW5jdGlvbihCLEYpe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoQixGKTtlbHNlIHRocm93IG5ldyBFcnJvcihCKX0sInBhcnNlRXJyb3IiKSxzZXRJbnB1dDpvKGZ1bmN0aW9uKE0sQil7cmV0dXJuIHRoaXMueXk9Qnx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9TSx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30sInNldElucHV0IiksaW5wdXQ6byhmdW5jdGlvbigpe3ZhciBNPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1NLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1NLHRoaXMubWF0Y2hlZCs9TTt2YXIgQj1NLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gQj8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksTX0sImlucHV0IiksdW5wdXQ6byhmdW5jdGlvbihNKXt2YXIgQj1NLmxlbmd0aCxGPU0uc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD1NK3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1CKSx0aGlzLm9mZnNldC09Qjt2YXIgUD10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxGLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09Ri5sZW5ndGgtMSk7dmFyIHo9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOkY/KEYubGVuZ3RoPT09UC5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK1BbUC5sZW5ndGgtRi5sZW5ndGhdLmxlbmd0aC1GWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tQn0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt6WzBdLHpbMF0rdGhpcy55eWxlbmctQl0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSwidW5wdXQiKSxtb3JlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSwibW9yZSIpLHJlamVjdDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSwicmVqZWN0IiksbGVzczpvKGZ1bmN0aW9uKE0pe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShNKSl9LCJsZXNzIikscGFzdElucHV0Om8oZnVuY3Rpb24oKXt2YXIgTT10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKE0ubGVuZ3RoPjIwPyIuLi4iOiIiKStNLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSwicGFzdElucHV0IiksdXBjb21pbmdJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIE09dGhpcy5tYXRjaDtyZXR1cm4gTS5sZW5ndGg8MjAmJihNKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1NLmxlbmd0aCkpLChNLnN1YnN0cigwLDIwKSsoTS5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sInVwY29taW5nSW5wdXQiKSxzaG93UG9zaXRpb246byhmdW5jdGlvbigpe3ZhciBNPXRoaXMucGFzdElucHV0KCksQj1uZXcgQXJyYXkoTS5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBNK3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtCKyJeIn0sInNob3dQb3NpdGlvbiIpLHRlc3RfbWF0Y2g6byhmdW5jdGlvbihNLEIpe3ZhciBGLFAsejtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoej17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih6Lnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLFA9TVswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksUCYmKHRoaXMueXlsaW5lbm8rPVAubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46UD9QW1AubGVuZ3RoLTFdLmxlbmd0aC1QW1AubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rTVswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1NWzBdLHRoaXMubWF0Y2grPU1bMF0sdGhpcy5tYXRjaGVzPU0sdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoTVswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9TVswXSxGPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLEIsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksRilyZXR1cm4gRjtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgJCBpbiB6KXRoaXNbJF09elskXTtyZXR1cm4hMX1yZXR1cm4hMX0sInRlc3RfbWF0Y2giKSxuZXh0Om8oZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgTSxCLEYsUDt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciB6PXRoaXMuX2N1cnJlbnRSdWxlcygpLCQ9MDskPHoubGVuZ3RoOyQrKylpZihGPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbelskXV0pLEYmJighQnx8RlswXS5sZW5ndGg+QlswXS5sZW5ndGgpKXtpZihCPUYsUD0kLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKE09dGhpcy50ZXN0X21hdGNoKEYselskXSksTSE9PSExKXJldHVybiBNO2lmKHRoaXMuX2JhY2t0cmFjayl7Qj0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBCPyhNPXRoaXMudGVzdF9tYXRjaChCLHpbUF0pLE0hPT0hMT9NOiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSwibmV4dCIpLGxleDpvKGZ1bmN0aW9uKCl7dmFyIEI9dGhpcy5uZXh0KCk7cmV0dXJuIEJ8fHRoaXMubGV4KCl9LCJsZXgiKSxiZWdpbjpvKGZ1bmN0aW9uKEIpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChCKX0sImJlZ2luIikscG9wU3RhdGU6byhmdW5jdGlvbigpe3ZhciBCPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIEI+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LCJwb3BTdGF0ZSIpLF9jdXJyZW50UnVsZXM6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LCJfY3VycmVudFJ1bGVzIiksdG9wU3RhdGU6byhmdW5jdGlvbihCKXtyZXR1cm4gQj10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKEJ8fDApLEI+PTA/dGhpcy5jb25kaXRpb25TdGFja1tCXToiSU5JVElBTCJ9LCJ0b3BTdGF0ZSIpLHB1c2hTdGF0ZTpvKGZ1bmN0aW9uKEIpe3RoaXMuYmVnaW4oQil9LCJwdXNoU3RhdGUiKSxzdGF0ZVN0YWNrU2l6ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSwic3RhdGVTdGFja1NpemUiKSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbihCLEYsUCx6KXt2YXIgJD16O3N3aXRjaChQKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOmJyZWFrO2Nhc2UgMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDM0O2JyZWFrO2Nhc2UgMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDM0O2JyZWFrO2Nhc2UgNDpyZXR1cm4gMzQ7Y2FzZSA1OmJyZWFrO2Nhc2UgNjpyZXR1cm4gMTA7Y2FzZSA3OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiYWNjX3RpdGxlIiksMTk7YnJlYWs7Y2FzZSA4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7YnJlYWs7Y2FzZSA5OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiYWNjX2Rlc2NyIiksMjE7YnJlYWs7Y2FzZSAxMDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2JyZWFrO2Nhc2UgMTE6dGhpcy5wdXNoU3RhdGUoImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDEyOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDEzOnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDE0OnJldHVybiA1O2Nhc2UgMTU6cmV0dXJuIDg7Y2FzZSAxNjpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImF4aXNfZGF0YSIpLCJYX0FYSVMiO2JyZWFrO2Nhc2UgMTc6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJheGlzX2RhdGEiKSwiWV9BWElTIjticmVhaztjYXNlIDE4OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiYXhpc19iYW5kX2RhdGEiKSwyNDticmVhaztjYXNlIDE5OnJldHVybiAzMTtjYXNlIDIwOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiZGF0YSIpLDE2O2JyZWFrO2Nhc2UgMjE6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJkYXRhIiksMTg7YnJlYWs7Y2FzZSAyMjpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImRhdGFfaW5uZXIiKSwyNDticmVhaztjYXNlIDIzOnJldHVybiAyNztjYXNlIDI0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMjY7YnJlYWs7Y2FzZSAyNTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyNjp0aGlzLnB1c2hTdGF0ZSgic3RyaW5nIik7YnJlYWs7Y2FzZSAyNzp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyODpyZXR1cm4iU1RSIjtjYXNlIDI5OnJldHVybiAyNDtjYXNlIDMwOnJldHVybiAyNjtjYXNlIDMxOnJldHVybiA0MztjYXNlIDMyOnJldHVybiJDT0xPTiI7Y2FzZSAzMzpyZXR1cm4gNDQ7Y2FzZSAzNDpyZXR1cm4gMjg7Y2FzZSAzNTpyZXR1cm4gNDU7Y2FzZSAzNjpyZXR1cm4gNDY7Y2FzZSAzNzpyZXR1cm4gNDg7Y2FzZSAzODpyZXR1cm4gNTA7Y2FzZSAzOTpyZXR1cm4gNDc7Y2FzZSA0MDpyZXR1cm4gNDE7Y2FzZSA0MTpyZXR1cm4gNDk7Y2FzZSA0MjpyZXR1cm4gNDI7Y2FzZSA0MzpicmVhaztjYXNlIDQ0OnJldHVybiAzNTtjYXNlIDQ1OnJldHVybiAzNn19LCJhbm9ueW1vdXMiKSxydWxlczpbL14oPzolJSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzooXHI/XG4pKS9pLC9eKD86KFxyP1xuKSkvaSwvXig/OltcblxyXSspL2ksL14oPzolJVteXG5dKikvaSwvXig/OnRpdGxlXGIpL2ksL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86XHspL2ksL14oPzpbXlx9XSopL2ksL14oPzp4eWNoYXJ0LWJldGFcYikvaSwvXig/Oig/OnZlcnRpY2FsfGhvcml6b250YWwpKS9pLC9eKD86eC1heGlzXGIpL2ksL14oPzp5LWF4aXNcYikvaSwvXig/OlxbKS9pLC9eKD86LS0+KS9pLC9eKD86bGluZVxiKS9pLC9eKD86YmFyXGIpL2ksL14oPzpcWykvaSwvXig/OlsrLV0/KD86XGQrKD86XC5cZCspP3xcLlxkKykpL2ksL14oPzpcXSkvaSwvXig/Oig/OmBcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx7IHRoaXNcLnB1c2hTdGF0ZVwobWRfc3RyaW5nXCk7IFx9XG48bWRfc3RyaW5nPlwoXD86XChcPyFgIlwpXC5cKVwrICAgICAgICAgICAgICAgICAgXHsgcmV0dXJuIE1EX1NUUjsgXH1cbjxtZF9zdHJpbmc+XChcPzpgKSkvaSwvXig/OlsiXSkvaSwvXig/OlsiXSkvaSwvXig/OlteIl0qKS9pLC9eKD86XFspL2ksL14oPzpcXSkvaSwvXig/OltBLVphLXpdKykvaSwvXig/OjopL2ksL14oPzpcKykvaSwvXig/OiwpL2ksL14oPzo9KS9pLC9eKD86XCopL2ksL14oPzojKS9pLC9eKD86W1xfXSkvaSwvXig/OlwuKS9pLC9eKD86JikvaSwvXig/Oi0pL2ksL14oPzpbMC05XSspL2ksL14oPzpccyspL2ksL14oPzo7KS9pLC9eKD86JCkvaV0sY29uZGl0aW9uczp7ZGF0YV9pbm5lcjp7cnVsZXM6WzAsMSw0LDUsNiw3LDksMTEsMTQsMTUsMTYsMTcsMjAsMjEsMjMsMjQsMjUsMjYsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDVdLGluY2x1c2l2ZTohMH0sZGF0YTp7cnVsZXM6WzAsMSwzLDQsNSw2LDcsOSwxMSwxNCwxNSwxNiwxNywyMCwyMSwyMiwyNSwyNiwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NV0saW5jbHVzaXZlOiEwfSxheGlzX2JhbmRfZGF0YTp7cnVsZXM6WzAsMSw0LDUsNiw3LDksMTEsMTQsMTUsMTYsMTcsMjAsMjEsMjQsMjUsMjYsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDVdLGluY2x1c2l2ZTohMH0sYXhpc19kYXRhOntydWxlczpbMCwxLDIsNCw1LDYsNyw5LDExLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIzLDI1LDI2LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1XSxpbmNsdXNpdmU6ITB9LGFjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOlsxMiwxM10saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOlsxMF0saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOls4XSxpbmNsdXNpdmU6ITF9LHRpdGxlOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LG1kX3N0cmluZzp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxzdHJpbmc6e3J1bGVzOlsyNywyOF0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDQsNSw2LDcsOSwxMSwxNCwxNSwxNiwxNywyMCwyMSwyNSwyNiwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NV0saW5jbHVzaXZlOiEwfX19O3JldHVybiBPfSgpO2subGV4ZXI9TDtmdW5jdGlvbiBSKCl7dGhpcy55eT17fX1yZXR1cm4gbyhSLCJQYXJzZXIiKSxSLnByb3RvdHlwZT1rLGsuUGFyc2VyPVIsbmV3IFJ9KCk7cE8ucGFyc2VyPXBPO0VoZT1wT30pO2Z1bmN0aW9uIG1PKHQpe3JldHVybiB0LnR5cGU9PT0iYmFyIn1mdW5jdGlvbiB2Nih0KXtyZXR1cm4gdC50eXBlPT09ImJhbmQifWZ1bmN0aW9uIFMxKHQpe3JldHVybiB0LnR5cGU9PT0ibGluZWFyIn12YXIgeDY9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKG1PLCJpc0JhclBsb3QiKTtvKHY2LCJpc0JhbmRBeGlzRGF0YSIpO28oUzEsImlzTGluZWFyQXhpc0RhdGEiKX0pO3ZhciBDMSxnTz1OKCgpPT57InVzZSBzdHJpY3QiO3RvKCk7QzE9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5wYXJlbnRHcm91cD1lfXN0YXRpY3tvKHRoaXMsIlRleHREaW1lbnNpb25DYWxjdWxhdG9yV2l0aEZvbnQiKX1nZXRNYXhEaW1lbnNpb24oZSxyKXtpZighdGhpcy5wYXJlbnRHcm91cClyZXR1cm57d2lkdGg6ZS5yZWR1Y2UoKGEscyk9Pk1hdGgubWF4KHMubGVuZ3RoLGEpLDApKnIsaGVpZ2h0OnJ9O2xldCBuPXt3aWR0aDowLGhlaWdodDowfSxpPXRoaXMucGFyZW50R3JvdXAuYXBwZW5kKCJnIikuYXR0cigidmlzaWJpbGl0eSIsImhpZGRlbiIpLmF0dHIoImZvbnQtc2l6ZSIscik7Zm9yKGxldCBhIG9mIGUpe2xldCBzPXNLKGksMSxhKSxsPXM/cy53aWR0aDphLmxlbmd0aCpyLHU9cz9zLmhlaWdodDpyO24ud2lkdGg9TWF0aC5tYXgobi53aWR0aCxsKSxuLmhlaWdodD1NYXRoLm1heChuLmhlaWdodCx1KX1yZXR1cm4gaS5yZW1vdmUoKSxufX19KTt2YXIgQTEseU89TigoKT0+eyJ1c2Ugc3RyaWN0IjtBMT1jbGFzc3tjb25zdHJ1Y3RvcihlLHIsbixpKXt0aGlzLmF4aXNDb25maWc9ZTt0aGlzLnRpdGxlPXI7dGhpcy50ZXh0RGltZW5zaW9uQ2FsY3VsYXRvcj1uO3RoaXMuYXhpc1RoZW1lQ29uZmlnPWk7dGhpcy5ib3VuZGluZ1JlY3Q9e3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH07dGhpcy5heGlzUG9zaXRpb249ImxlZnQiO3RoaXMuc2hvd1RpdGxlPSExO3RoaXMuc2hvd0xhYmVsPSExO3RoaXMuc2hvd1RpY2s9ITE7dGhpcy5zaG93QXhpc0xpbmU9ITE7dGhpcy5vdXRlclBhZGRpbmc9MDt0aGlzLnRpdGxlVGV4dEhlaWdodD0wO3RoaXMubGFiZWxUZXh0SGVpZ2h0PTA7dGhpcy5yYW5nZT1bMCwxMF0sdGhpcy5ib3VuZGluZ1JlY3Q9e3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH0sdGhpcy5heGlzUG9zaXRpb249ImxlZnQifXN0YXRpY3tvKHRoaXMsIkJhc2VBeGlzIil9c2V0UmFuZ2UoZSl7dGhpcy5yYW5nZT1lLHRoaXMuYXhpc1Bvc2l0aW9uPT09ImxlZnQifHx0aGlzLmF4aXNQb3NpdGlvbj09PSJyaWdodCI/dGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0PWVbMV0tZVswXTp0aGlzLmJvdW5kaW5nUmVjdC53aWR0aD1lWzFdLWVbMF0sdGhpcy5yZWNhbGN1bGF0ZVNjYWxlKCl9Z2V0UmFuZ2UoKXtyZXR1cm5bdGhpcy5yYW5nZVswXSt0aGlzLm91dGVyUGFkZGluZyx0aGlzLnJhbmdlWzFdLXRoaXMub3V0ZXJQYWRkaW5nXX1zZXRBeGlzUG9zaXRpb24oZSl7dGhpcy5heGlzUG9zaXRpb249ZSx0aGlzLnNldFJhbmdlKHRoaXMucmFuZ2UpfWdldFRpY2tEaXN0YW5jZSgpe2xldCBlPXRoaXMuZ2V0UmFuZ2UoKTtyZXR1cm4gTWF0aC5hYnMoZVswXS1lWzFdKS90aGlzLmdldFRpY2tWYWx1ZXMoKS5sZW5ndGh9Z2V0QXhpc091dGVyUGFkZGluZygpe3JldHVybiB0aGlzLm91dGVyUGFkZGluZ31nZXRMYWJlbERpbWVuc2lvbigpe3JldHVybiB0aGlzLnRleHREaW1lbnNpb25DYWxjdWxhdG9yLmdldE1heERpbWVuc2lvbih0aGlzLmdldFRpY2tWYWx1ZXMoKS5tYXAoZT0+ZS50b1N0cmluZygpKSx0aGlzLmF4aXNDb25maWcubGFiZWxGb250U2l6ZSl9cmVjYWxjdWxhdGVPdXRlclBhZGRpbmdUb0RyYXdCYXIoKXsuNyp0aGlzLmdldFRpY2tEaXN0YW5jZSgpPnRoaXMub3V0ZXJQYWRkaW5nKjImJih0aGlzLm91dGVyUGFkZGluZz1NYXRoLmZsb29yKC43KnRoaXMuZ2V0VGlja0Rpc3RhbmNlKCkvMikpLHRoaXMucmVjYWxjdWxhdGVTY2FsZSgpfWNhbGN1bGF0ZVNwYWNlSWZEcmF3bkhvcml6b250YWxseShlKXtsZXQgcj1lLmhlaWdodDtpZih0aGlzLmF4aXNDb25maWcuc2hvd0F4aXNMaW5lJiZyPnRoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoJiYoci09dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGgsdGhpcy5zaG93QXhpc0xpbmU9ITApLHRoaXMuYXhpc0NvbmZpZy5zaG93TGFiZWwpe2xldCBuPXRoaXMuZ2V0TGFiZWxEaW1lbnNpb24oKSxpPS4yKmUud2lkdGg7dGhpcy5vdXRlclBhZGRpbmc9TWF0aC5taW4obi53aWR0aC8yLGkpO2xldCBhPW4uaGVpZ2h0K3RoaXMuYXhpc0NvbmZpZy5sYWJlbFBhZGRpbmcqMjt0aGlzLmxhYmVsVGV4dEhlaWdodD1uLmhlaWdodCxhPD1yJiYoci09YSx0aGlzLnNob3dMYWJlbD0hMCl9aWYodGhpcy5heGlzQ29uZmlnLnNob3dUaWNrJiZyPj10aGlzLmF4aXNDb25maWcudGlja0xlbmd0aCYmKHRoaXMuc2hvd1RpY2s9ITAsci09dGhpcy5heGlzQ29uZmlnLnRpY2tMZW5ndGgpLHRoaXMuYXhpc0NvbmZpZy5zaG93VGl0bGUmJnRoaXMudGl0bGUpe2xldCBuPXRoaXMudGV4dERpbWVuc2lvbkNhbGN1bGF0b3IuZ2V0TWF4RGltZW5zaW9uKFt0aGlzLnRpdGxlXSx0aGlzLmF4aXNDb25maWcudGl0bGVGb250U2l6ZSksaT1uLmhlaWdodCt0aGlzLmF4aXNDb25maWcudGl0bGVQYWRkaW5nKjI7dGhpcy50aXRsZVRleHRIZWlnaHQ9bi5oZWlnaHQsaTw9ciYmKHItPWksdGhpcy5zaG93VGl0bGU9ITApfXRoaXMuYm91bmRpbmdSZWN0LndpZHRoPWUud2lkdGgsdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0PWUuaGVpZ2h0LXJ9Y2FsY3VsYXRlU3BhY2VJZkRyYXduVmVydGljYWwoZSl7bGV0IHI9ZS53aWR0aDtpZih0aGlzLmF4aXNDb25maWcuc2hvd0F4aXNMaW5lJiZyPnRoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoJiYoci09dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGgsdGhpcy5zaG93QXhpc0xpbmU9ITApLHRoaXMuYXhpc0NvbmZpZy5zaG93TGFiZWwpe2xldCBuPXRoaXMuZ2V0TGFiZWxEaW1lbnNpb24oKSxpPS4yKmUuaGVpZ2h0O3RoaXMub3V0ZXJQYWRkaW5nPU1hdGgubWluKG4uaGVpZ2h0LzIsaSk7bGV0IGE9bi53aWR0aCt0aGlzLmF4aXNDb25maWcubGFiZWxQYWRkaW5nKjI7YTw9ciYmKHItPWEsdGhpcy5zaG93TGFiZWw9ITApfWlmKHRoaXMuYXhpc0NvbmZpZy5zaG93VGljayYmcj49dGhpcy5heGlzQ29uZmlnLnRpY2tMZW5ndGgmJih0aGlzLnNob3dUaWNrPSEwLHItPXRoaXMuYXhpc0NvbmZpZy50aWNrTGVuZ3RoKSx0aGlzLmF4aXNDb25maWcuc2hvd1RpdGxlJiZ0aGlzLnRpdGxlKXtsZXQgbj10aGlzLnRleHREaW1lbnNpb25DYWxjdWxhdG9yLmdldE1heERpbWVuc2lvbihbdGhpcy50aXRsZV0sdGhpcy5heGlzQ29uZmlnLnRpdGxlRm9udFNpemUpLGk9bi5oZWlnaHQrdGhpcy5heGlzQ29uZmlnLnRpdGxlUGFkZGluZyoyO3RoaXMudGl0bGVUZXh0SGVpZ2h0PW4uaGVpZ2h0LGk8PXImJihyLT1pLHRoaXMuc2hvd1RpdGxlPSEwKX10aGlzLmJvdW5kaW5nUmVjdC53aWR0aD1lLndpZHRoLXIsdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0PWUuaGVpZ2h0fWNhbGN1bGF0ZVNwYWNlKGUpe3JldHVybiB0aGlzLmF4aXNQb3NpdGlvbj09PSJsZWZ0Inx8dGhpcy5heGlzUG9zaXRpb249PT0icmlnaHQiP3RoaXMuY2FsY3VsYXRlU3BhY2VJZkRyYXduVmVydGljYWwoZSk6dGhpcy5jYWxjdWxhdGVTcGFjZUlmRHJhd25Ib3Jpem9udGFsbHkoZSksdGhpcy5yZWNhbGN1bGF0ZVNjYWxlKCkse3dpZHRoOnRoaXMuYm91bmRpbmdSZWN0LndpZHRoLGhlaWdodDp0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHR9fXNldEJvdW5kaW5nQm94WFkoZSl7dGhpcy5ib3VuZGluZ1JlY3QueD1lLngsdGhpcy5ib3VuZGluZ1JlY3QueT1lLnl9Z2V0RHJhd2FibGVFbGVtZW50c0ZvckxlZnRBeGlzKCl7bGV0IGU9W107aWYodGhpcy5zaG93QXhpc0xpbmUpe2xldCByPXRoaXMuYm91bmRpbmdSZWN0LngrdGhpcy5ib3VuZGluZ1JlY3Qud2lkdGgtdGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGgvMjtlLnB1c2goe3R5cGU6InBhdGgiLGdyb3VwVGV4dHM6WyJsZWZ0LWF4aXMiLCJheGlzbC1saW5lIl0sZGF0YTpbe3BhdGg6YE0gJHtyfSwke3RoaXMuYm91bmRpbmdSZWN0Lnl9IEwgJHtyfSwke3RoaXMuYm91bmRpbmdSZWN0LnkrdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0fSBgLHN0cm9rZUZpbGw6dGhpcy5heGlzVGhlbWVDb25maWcuYXhpc0xpbmVDb2xvcixzdHJva2VXaWR0aDp0aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aH1dfSl9aWYodGhpcy5zaG93TGFiZWwmJmUucHVzaCh7dHlwZToidGV4dCIsZ3JvdXBUZXh0czpbImxlZnQtYXhpcyIsImxhYmVsIl0sZGF0YTp0aGlzLmdldFRpY2tWYWx1ZXMoKS5tYXAocj0+KHt0ZXh0OnIudG9TdHJpbmcoKSx4OnRoaXMuYm91bmRpbmdSZWN0LngrdGhpcy5ib3VuZGluZ1JlY3Qud2lkdGgtKHRoaXMuc2hvd0xhYmVsP3RoaXMuYXhpc0NvbmZpZy5sYWJlbFBhZGRpbmc6MCktKHRoaXMuc2hvd1RpY2s/dGhpcy5heGlzQ29uZmlnLnRpY2tMZW5ndGg6MCktKHRoaXMuc2hvd0F4aXNMaW5lP3RoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoOjApLHk6dGhpcy5nZXRTY2FsZVZhbHVlKHIpLGZpbGw6dGhpcy5heGlzVGhlbWVDb25maWcubGFiZWxDb2xvcixmb250U2l6ZTp0aGlzLmF4aXNDb25maWcubGFiZWxGb250U2l6ZSxyb3RhdGlvbjowLHZlcnRpY2FsUG9zOiJtaWRkbGUiLGhvcml6b250YWxQb3M6InJpZ2h0In0pKX0pLHRoaXMuc2hvd1RpY2spe2xldCByPXRoaXMuYm91bmRpbmdSZWN0LngrdGhpcy5ib3VuZGluZ1JlY3Qud2lkdGgtKHRoaXMuc2hvd0F4aXNMaW5lP3RoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoOjApO2UucHVzaCh7dHlwZToicGF0aCIsZ3JvdXBUZXh0czpbImxlZnQtYXhpcyIsInRpY2tzIl0sZGF0YTp0aGlzLmdldFRpY2tWYWx1ZXMoKS5tYXAobj0+KHtwYXRoOmBNICR7cn0sJHt0aGlzLmdldFNjYWxlVmFsdWUobil9IEwgJHtyLXRoaXMuYXhpc0NvbmZpZy50aWNrTGVuZ3RofSwke3RoaXMuZ2V0U2NhbGVWYWx1ZShuKX1gLHN0cm9rZUZpbGw6dGhpcy5heGlzVGhlbWVDb25maWcudGlja0NvbG9yLHN0cm9rZVdpZHRoOnRoaXMuYXhpc0NvbmZpZy50aWNrV2lkdGh9KSl9KX1yZXR1cm4gdGhpcy5zaG93VGl0bGUmJmUucHVzaCh7dHlwZToidGV4dCIsZ3JvdXBUZXh0czpbImxlZnQtYXhpcyIsInRpdGxlIl0sZGF0YTpbe3RleHQ6dGhpcy50aXRsZSx4OnRoaXMuYm91bmRpbmdSZWN0LngrdGhpcy5heGlzQ29uZmlnLnRpdGxlUGFkZGluZyx5OnRoaXMuYm91bmRpbmdSZWN0LnkrdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0LzIsZmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy50aXRsZUNvbG9yLGZvbnRTaXplOnRoaXMuYXhpc0NvbmZpZy50aXRsZUZvbnRTaXplLHJvdGF0aW9uOjI3MCx2ZXJ0aWNhbFBvczoidG9wIixob3Jpem9udGFsUG9zOiJjZW50ZXIifV19KSxlfWdldERyYXdhYmxlRWxlbWVudHNGb3JCb3R0b21BeGlzKCl7bGV0IGU9W107aWYodGhpcy5zaG93QXhpc0xpbmUpe2xldCByPXRoaXMuYm91bmRpbmdSZWN0LnkrdGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGgvMjtlLnB1c2goe3R5cGU6InBhdGgiLGdyb3VwVGV4dHM6WyJib3R0b20tYXhpcyIsImF4aXMtbGluZSJdLGRhdGE6W3twYXRoOmBNICR7dGhpcy5ib3VuZGluZ1JlY3QueH0sJHtyfSBMICR7dGhpcy5ib3VuZGluZ1JlY3QueCt0aGlzLmJvdW5kaW5nUmVjdC53aWR0aH0sJHtyfWAsc3Ryb2tlRmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy5heGlzTGluZUNvbG9yLHN0cm9rZVdpZHRoOnRoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRofV19KX1pZih0aGlzLnNob3dMYWJlbCYmZS5wdXNoKHt0eXBlOiJ0ZXh0Iixncm91cFRleHRzOlsiYm90dG9tLWF4aXMiLCJsYWJlbCJdLGRhdGE6dGhpcy5nZXRUaWNrVmFsdWVzKCkubWFwKHI9Pih7dGV4dDpyLnRvU3RyaW5nKCkseDp0aGlzLmdldFNjYWxlVmFsdWUocikseTp0aGlzLmJvdW5kaW5nUmVjdC55K3RoaXMuYXhpc0NvbmZpZy5sYWJlbFBhZGRpbmcrKHRoaXMuc2hvd1RpY2s/dGhpcy5heGlzQ29uZmlnLnRpY2tMZW5ndGg6MCkrKHRoaXMuc2hvd0F4aXNMaW5lP3RoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoOjApLGZpbGw6dGhpcy5heGlzVGhlbWVDb25maWcubGFiZWxDb2xvcixmb250U2l6ZTp0aGlzLmF4aXNDb25maWcubGFiZWxGb250U2l6ZSxyb3RhdGlvbjowLHZlcnRpY2FsUG9zOiJ0b3AiLGhvcml6b250YWxQb3M6ImNlbnRlciJ9KSl9KSx0aGlzLnNob3dUaWNrKXtsZXQgcj10aGlzLmJvdW5kaW5nUmVjdC55Kyh0aGlzLnNob3dBeGlzTGluZT90aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aDowKTtlLnB1c2goe3R5cGU6InBhdGgiLGdyb3VwVGV4dHM6WyJib3R0b20tYXhpcyIsInRpY2tzIl0sZGF0YTp0aGlzLmdldFRpY2tWYWx1ZXMoKS5tYXAobj0+KHtwYXRoOmBNICR7dGhpcy5nZXRTY2FsZVZhbHVlKG4pfSwke3J9IEwgJHt0aGlzLmdldFNjYWxlVmFsdWUobil9LCR7cit0aGlzLmF4aXNDb25maWcudGlja0xlbmd0aH1gLHN0cm9rZUZpbGw6dGhpcy5heGlzVGhlbWVDb25maWcudGlja0NvbG9yLHN0cm9rZVdpZHRoOnRoaXMuYXhpc0NvbmZpZy50aWNrV2lkdGh9KSl9KX1yZXR1cm4gdGhpcy5zaG93VGl0bGUmJmUucHVzaCh7dHlwZToidGV4dCIsZ3JvdXBUZXh0czpbImJvdHRvbS1heGlzIiwidGl0bGUiXSxkYXRhOlt7dGV4dDp0aGlzLnRpdGxlLHg6dGhpcy5yYW5nZVswXSsodGhpcy5yYW5nZVsxXS10aGlzLnJhbmdlWzBdKS8yLHk6dGhpcy5ib3VuZGluZ1JlY3QueSt0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQtdGhpcy5heGlzQ29uZmlnLnRpdGxlUGFkZGluZy10aGlzLnRpdGxlVGV4dEhlaWdodCxmaWxsOnRoaXMuYXhpc1RoZW1lQ29uZmlnLnRpdGxlQ29sb3IsZm9udFNpemU6dGhpcy5heGlzQ29uZmlnLnRpdGxlRm9udFNpemUscm90YXRpb246MCx2ZXJ0aWNhbFBvczoidG9wIixob3Jpem9udGFsUG9zOiJjZW50ZXIifV19KSxlfWdldERyYXdhYmxlRWxlbWVudHNGb3JUb3BBeGlzKCl7bGV0IGU9W107aWYodGhpcy5zaG93QXhpc0xpbmUpe2xldCByPXRoaXMuYm91bmRpbmdSZWN0LnkrdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0LXRoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoLzI7ZS5wdXNoKHt0eXBlOiJwYXRoIixncm91cFRleHRzOlsidG9wLWF4aXMiLCJheGlzLWxpbmUiXSxkYXRhOlt7cGF0aDpgTSAke3RoaXMuYm91bmRpbmdSZWN0Lnh9LCR7cn0gTCAke3RoaXMuYm91bmRpbmdSZWN0LngrdGhpcy5ib3VuZGluZ1JlY3Qud2lkdGh9LCR7cn1gLHN0cm9rZUZpbGw6dGhpcy5heGlzVGhlbWVDb25maWcuYXhpc0xpbmVDb2xvcixzdHJva2VXaWR0aDp0aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aH1dfSl9aWYodGhpcy5zaG93TGFiZWwmJmUucHVzaCh7dHlwZToidGV4dCIsZ3JvdXBUZXh0czpbInRvcC1heGlzIiwibGFiZWwiXSxkYXRhOnRoaXMuZ2V0VGlja1ZhbHVlcygpLm1hcChyPT4oe3RleHQ6ci50b1N0cmluZygpLHg6dGhpcy5nZXRTY2FsZVZhbHVlKHIpLHk6dGhpcy5ib3VuZGluZ1JlY3QueSsodGhpcy5zaG93VGl0bGU/dGhpcy50aXRsZVRleHRIZWlnaHQrdGhpcy5heGlzQ29uZmlnLnRpdGxlUGFkZGluZyoyOjApK3RoaXMuYXhpc0NvbmZpZy5sYWJlbFBhZGRpbmcsZmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy5sYWJlbENvbG9yLGZvbnRTaXplOnRoaXMuYXhpc0NvbmZpZy5sYWJlbEZvbnRTaXplLHJvdGF0aW9uOjAsdmVydGljYWxQb3M6InRvcCIsaG9yaXpvbnRhbFBvczoiY2VudGVyIn0pKX0pLHRoaXMuc2hvd1RpY2spe2xldCByPXRoaXMuYm91bmRpbmdSZWN0Lnk7ZS5wdXNoKHt0eXBlOiJwYXRoIixncm91cFRleHRzOlsidG9wLWF4aXMiLCJ0aWNrcyJdLGRhdGE6dGhpcy5nZXRUaWNrVmFsdWVzKCkubWFwKG49Pih7cGF0aDpgTSAke3RoaXMuZ2V0U2NhbGVWYWx1ZShuKX0sJHtyK3RoaXMuYm91bmRpbmdSZWN0LmhlaWdodC0odGhpcy5zaG93QXhpc0xpbmU/dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGg6MCl9IEwgJHt0aGlzLmdldFNjYWxlVmFsdWUobil9LCR7cit0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQtdGhpcy5heGlzQ29uZmlnLnRpY2tMZW5ndGgtKHRoaXMuc2hvd0F4aXNMaW5lP3RoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoOjApfWAsc3Ryb2tlRmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy50aWNrQ29sb3Isc3Ryb2tlV2lkdGg6dGhpcy5heGlzQ29uZmlnLnRpY2tXaWR0aH0pKX0pfXJldHVybiB0aGlzLnNob3dUaXRsZSYmZS5wdXNoKHt0eXBlOiJ0ZXh0Iixncm91cFRleHRzOlsidG9wLWF4aXMiLCJ0aXRsZSJdLGRhdGE6W3t0ZXh0OnRoaXMudGl0bGUseDp0aGlzLmJvdW5kaW5nUmVjdC54K3RoaXMuYm91bmRpbmdSZWN0LndpZHRoLzIseTp0aGlzLmJvdW5kaW5nUmVjdC55K3RoaXMuYXhpc0NvbmZpZy50aXRsZVBhZGRpbmcsZmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy50aXRsZUNvbG9yLGZvbnRTaXplOnRoaXMuYXhpc0NvbmZpZy50aXRsZUZvbnRTaXplLHJvdGF0aW9uOjAsdmVydGljYWxQb3M6InRvcCIsaG9yaXpvbnRhbFBvczoiY2VudGVyIn1dfSksZX1nZXREcmF3YWJsZUVsZW1lbnRzKCl7aWYodGhpcy5heGlzUG9zaXRpb249PT0ibGVmdCIpcmV0dXJuIHRoaXMuZ2V0RHJhd2FibGVFbGVtZW50c0ZvckxlZnRBeGlzKCk7aWYodGhpcy5heGlzUG9zaXRpb249PT0icmlnaHQiKXRocm93IEVycm9yKCJEcmF3aW5nIG9mIHJpZ2h0IGF4aXMgaXMgbm90IGltcGxlbWVudGVkIik7cmV0dXJuIHRoaXMuYXhpc1Bvc2l0aW9uPT09ImJvdHRvbSI/dGhpcy5nZXREcmF3YWJsZUVsZW1lbnRzRm9yQm90dG9tQXhpcygpOnRoaXMuYXhpc1Bvc2l0aW9uPT09InRvcCI/dGhpcy5nZXREcmF3YWJsZUVsZW1lbnRzRm9yVG9wQXhpcygpOltdfX19KTt2YXIgYjYsQ2hlPU4oKCk9PnsidXNlIHN0cmljdCI7ZHIoKTt2dCgpO3lPKCk7YjY9Y2xhc3MgZXh0ZW5kcyBBMXtzdGF0aWN7byh0aGlzLCJCYW5kQXhpcyIpfWNvbnN0cnVjdG9yKGUscixuLGksYSl7c3VwZXIoZSxpLGEsciksdGhpcy5jYXRlZ29yaWVzPW4sdGhpcy5zY2FsZT1MMCgpLmRvbWFpbih0aGlzLmNhdGVnb3JpZXMpLnJhbmdlKHRoaXMuZ2V0UmFuZ2UoKSl9c2V0UmFuZ2UoZSl7c3VwZXIuc2V0UmFuZ2UoZSl9cmVjYWxjdWxhdGVTY2FsZSgpe3RoaXMuc2NhbGU9TDAoKS5kb21haW4odGhpcy5jYXRlZ29yaWVzKS5yYW5nZSh0aGlzLmdldFJhbmdlKCkpLnBhZGRpbmdJbm5lcigxKS5wYWRkaW5nT3V0ZXIoMCkuYWxpZ24oLjUpLFkudHJhY2UoIkJhbmRBeGlzIGF4aXMgZmluYWwgY2F0ZWdvcmllcywgcmFuZ2U6ICIsdGhpcy5jYXRlZ29yaWVzLHRoaXMuZ2V0UmFuZ2UoKSl9Z2V0VGlja1ZhbHVlcygpe3JldHVybiB0aGlzLmNhdGVnb3JpZXN9Z2V0U2NhbGVWYWx1ZShlKXtyZXR1cm4gdGhpcy5zY2FsZShlKT8/dGhpcy5nZXRSYW5nZSgpWzBdfX19KTt2YXIgdzYsQWhlPU4oKCk9PnsidXNlIHN0cmljdCI7ZHIoKTt5TygpO3c2PWNsYXNzIGV4dGVuZHMgQTF7c3RhdGlje28odGhpcywiTGluZWFyQXhpcyIpfWNvbnN0cnVjdG9yKGUscixuLGksYSl7c3VwZXIoZSxpLGEsciksdGhpcy5kb21haW49bix0aGlzLnNjYWxlPWdsKCkuZG9tYWluKHRoaXMuZG9tYWluKS5yYW5nZSh0aGlzLmdldFJhbmdlKCkpfWdldFRpY2tWYWx1ZXMoKXtyZXR1cm4gdGhpcy5zY2FsZS50aWNrcygpfXJlY2FsY3VsYXRlU2NhbGUoKXtsZXQgZT1bLi4udGhpcy5kb21haW5dO3RoaXMuYXhpc1Bvc2l0aW9uPT09ImxlZnQiJiZlLnJldmVyc2UoKSx0aGlzLnNjYWxlPWdsKCkuZG9tYWluKGUpLnJhbmdlKHRoaXMuZ2V0UmFuZ2UoKSl9Z2V0U2NhbGVWYWx1ZShlKXtyZXR1cm4gdGhpcy5zY2FsZShlKX19fSk7ZnVuY3Rpb24gdk8odCxlLHIsbil7bGV0IGk9bmV3IEMxKG4pO3JldHVybiB2Nih0KT9uZXcgYjYoZSxyLHQuY2F0ZWdvcmllcyx0LnRpdGxlLGkpOm5ldyB3NihlLHIsW3QubWluLHQubWF4XSx0LnRpdGxlLGkpfXZhciBfaGU9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt4NigpO2dPKCk7Q2hlKCk7QWhlKCk7byh2TywiZ2V0QXhpcyIpfSk7ZnVuY3Rpb24gRGhlKHQsZSxyLG4pe2xldCBpPW5ldyBDMShuKTtyZXR1cm4gbmV3IHhPKGksdCxlLHIpfXZhciB4TyxMaGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtnTygpO3hPPWNsYXNze2NvbnN0cnVjdG9yKGUscixuLGkpe3RoaXMudGV4dERpbWVuc2lvbkNhbGN1bGF0b3I9ZTt0aGlzLmNoYXJ0Q29uZmlnPXI7dGhpcy5jaGFydERhdGE9bjt0aGlzLmNoYXJ0VGhlbWVDb25maWc9aTt0aGlzLmJvdW5kaW5nUmVjdD17eDowLHk6MCx3aWR0aDowLGhlaWdodDowfSx0aGlzLnNob3dDaGFydFRpdGxlPSExfXN0YXRpY3tvKHRoaXMsIkNoYXJ0VGl0bGUiKX1zZXRCb3VuZGluZ0JveFhZKGUpe3RoaXMuYm91bmRpbmdSZWN0Lng9ZS54LHRoaXMuYm91bmRpbmdSZWN0Lnk9ZS55fWNhbGN1bGF0ZVNwYWNlKGUpe2xldCByPXRoaXMudGV4dERpbWVuc2lvbkNhbGN1bGF0b3IuZ2V0TWF4RGltZW5zaW9uKFt0aGlzLmNoYXJ0RGF0YS50aXRsZV0sdGhpcy5jaGFydENvbmZpZy50aXRsZUZvbnRTaXplKSxuPU1hdGgubWF4KHIud2lkdGgsZS53aWR0aCksaT1yLmhlaWdodCsyKnRoaXMuY2hhcnRDb25maWcudGl0bGVQYWRkaW5nO3JldHVybiByLndpZHRoPD1uJiZyLmhlaWdodDw9aSYmdGhpcy5jaGFydENvbmZpZy5zaG93VGl0bGUmJnRoaXMuY2hhcnREYXRhLnRpdGxlJiYodGhpcy5ib3VuZGluZ1JlY3Qud2lkdGg9bix0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQ9aSx0aGlzLnNob3dDaGFydFRpdGxlPSEwKSx7d2lkdGg6dGhpcy5ib3VuZGluZ1JlY3Qud2lkdGgsaGVpZ2h0OnRoaXMuYm91bmRpbmdSZWN0LmhlaWdodH19Z2V0RHJhd2FibGVFbGVtZW50cygpe2xldCBlPVtdO3JldHVybiB0aGlzLnNob3dDaGFydFRpdGxlJiZlLnB1c2goe2dyb3VwVGV4dHM6WyJjaGFydC10aXRsZSJdLHR5cGU6InRleHQiLGRhdGE6W3tmb250U2l6ZTp0aGlzLmNoYXJ0Q29uZmlnLnRpdGxlRm9udFNpemUsdGV4dDp0aGlzLmNoYXJ0RGF0YS50aXRsZSx2ZXJ0aWNhbFBvczoibWlkZGxlIixob3Jpem9udGFsUG9zOiJjZW50ZXIiLHg6dGhpcy5ib3VuZGluZ1JlY3QueCt0aGlzLmJvdW5kaW5nUmVjdC53aWR0aC8yLHk6dGhpcy5ib3VuZGluZ1JlY3QueSt0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQvMixmaWxsOnRoaXMuY2hhcnRUaGVtZUNvbmZpZy50aXRsZUNvbG9yLHJvdGF0aW9uOjB9XX0pLGV9fTtvKERoZSwiZ2V0Q2hhcnRUaXRsZUNvbXBvbmVudCIpfSk7dmFyIFQ2LFJoZT1OKCgpPT57InVzZSBzdHJpY3QiO2RyKCk7VDY9Y2xhc3N7Y29uc3RydWN0b3IoZSxyLG4saSxhKXt0aGlzLnBsb3REYXRhPWU7dGhpcy54QXhpcz1yO3RoaXMueUF4aXM9bjt0aGlzLm9yaWVudGF0aW9uPWk7dGhpcy5wbG90SW5kZXg9YX1zdGF0aWN7byh0aGlzLCJMaW5lUGxvdCIpfWdldERyYXdhYmxlRWxlbWVudCgpe2xldCBlPXRoaXMucGxvdERhdGEuZGF0YS5tYXAobj0+W3RoaXMueEF4aXMuZ2V0U2NhbGVWYWx1ZShuWzBdKSx0aGlzLnlBeGlzLmdldFNjYWxlVmFsdWUoblsxXSldKSxyO3JldHVybiB0aGlzLm9yaWVudGF0aW9uPT09Imhvcml6b250YWwiP3I9d2woKS55KG49Pm5bMF0pLngobj0+blsxXSkoZSk6cj13bCgpLngobj0+blswXSkueShuPT5uWzFdKShlKSxyP1t7Z3JvdXBUZXh0czpbInBsb3QiLGBsaW5lLXBsb3QtJHt0aGlzLnBsb3RJbmRleH1gXSx0eXBlOiJwYXRoIixkYXRhOlt7cGF0aDpyLHN0cm9rZUZpbGw6dGhpcy5wbG90RGF0YS5zdHJva2VGaWxsLHN0cm9rZVdpZHRoOnRoaXMucGxvdERhdGEuc3Ryb2tlV2lkdGh9XX1dOltdfX19KTt2YXIgazYsTmhlPU4oKCk9PnsidXNlIHN0cmljdCI7azY9Y2xhc3N7Y29uc3RydWN0b3IoZSxyLG4saSxhLHMpe3RoaXMuYmFyRGF0YT1lO3RoaXMuYm91bmRpbmdSZWN0PXI7dGhpcy54QXhpcz1uO3RoaXMueUF4aXM9aTt0aGlzLm9yaWVudGF0aW9uPWE7dGhpcy5wbG90SW5kZXg9c31zdGF0aWN7byh0aGlzLCJCYXJQbG90Iil9Z2V0RHJhd2FibGVFbGVtZW50KCl7bGV0IGU9dGhpcy5iYXJEYXRhLmRhdGEubWFwKGE9Plt0aGlzLnhBeGlzLmdldFNjYWxlVmFsdWUoYVswXSksdGhpcy55QXhpcy5nZXRTY2FsZVZhbHVlKGFbMV0pXSksbj1NYXRoLm1pbih0aGlzLnhBeGlzLmdldEF4aXNPdXRlclBhZGRpbmcoKSoyLHRoaXMueEF4aXMuZ2V0VGlja0Rpc3RhbmNlKCkpKigxLS4wNSksaT1uLzI7cmV0dXJuIHRoaXMub3JpZW50YXRpb249PT0iaG9yaXpvbnRhbCI/W3tncm91cFRleHRzOlsicGxvdCIsYGJhci1wbG90LSR7dGhpcy5wbG90SW5kZXh9YF0sdHlwZToicmVjdCIsZGF0YTplLm1hcChhPT4oe3g6dGhpcy5ib3VuZGluZ1JlY3QueCx5OmFbMF0taSxoZWlnaHQ6bix3aWR0aDphWzFdLXRoaXMuYm91bmRpbmdSZWN0LngsZmlsbDp0aGlzLmJhckRhdGEuZmlsbCxzdHJva2VXaWR0aDowLHN0cm9rZUZpbGw6dGhpcy5iYXJEYXRhLmZpbGx9KSl9XTpbe2dyb3VwVGV4dHM6WyJwbG90IixgYmFyLXBsb3QtJHt0aGlzLnBsb3RJbmRleH1gXSx0eXBlOiJyZWN0IixkYXRhOmUubWFwKGE9Pih7eDphWzBdLWkseTphWzFdLHdpZHRoOm4saGVpZ2h0OnRoaXMuYm91bmRpbmdSZWN0LnkrdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0LWFbMV0sZmlsbDp0aGlzLmJhckRhdGEuZmlsbCxzdHJva2VXaWR0aDowLHN0cm9rZUZpbGw6dGhpcy5iYXJEYXRhLmZpbGx9KSl9XX19fSk7ZnVuY3Rpb24gTWhlKHQsZSxyKXtyZXR1cm4gbmV3IGJPKHQsZSxyKX12YXIgYk8sSWhlPU4oKCk9PnsidXNlIHN0cmljdCI7UmhlKCk7TmhlKCk7Yk89Y2xhc3N7Y29uc3RydWN0b3IoZSxyLG4pe3RoaXMuY2hhcnRDb25maWc9ZTt0aGlzLmNoYXJ0RGF0YT1yO3RoaXMuY2hhcnRUaGVtZUNvbmZpZz1uO3RoaXMuYm91bmRpbmdSZWN0PXt4OjAseTowLHdpZHRoOjAsaGVpZ2h0OjB9fXN0YXRpY3tvKHRoaXMsIkJhc2VQbG90Iil9c2V0QXhlcyhlLHIpe3RoaXMueEF4aXM9ZSx0aGlzLnlBeGlzPXJ9c2V0Qm91bmRpbmdCb3hYWShlKXt0aGlzLmJvdW5kaW5nUmVjdC54PWUueCx0aGlzLmJvdW5kaW5nUmVjdC55PWUueX1jYWxjdWxhdGVTcGFjZShlKXtyZXR1cm4gdGhpcy5ib3VuZGluZ1JlY3Qud2lkdGg9ZS53aWR0aCx0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQ9ZS5oZWlnaHQse3dpZHRoOnRoaXMuYm91bmRpbmdSZWN0LndpZHRoLGhlaWdodDp0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHR9fWdldERyYXdhYmxlRWxlbWVudHMoKXtpZighKHRoaXMueEF4aXMmJnRoaXMueUF4aXMpKXRocm93IEVycm9yKCJBeGVzIG11c3QgYmUgcGFzc2VkIHRvIHJlbmRlciBQbG90cyIpO2xldCBlPVtdO2ZvcihsZXRbcixuXW9mIHRoaXMuY2hhcnREYXRhLnBsb3RzLmVudHJpZXMoKSlzd2l0Y2gobi50eXBlKXtjYXNlImxpbmUiOntsZXQgaT1uZXcgVDYobix0aGlzLnhBeGlzLHRoaXMueUF4aXMsdGhpcy5jaGFydENvbmZpZy5jaGFydE9yaWVudGF0aW9uLHIpO2UucHVzaCguLi5pLmdldERyYXdhYmxlRWxlbWVudCgpKX1icmVhaztjYXNlImJhciI6e2xldCBpPW5ldyBrNihuLHRoaXMuYm91bmRpbmdSZWN0LHRoaXMueEF4aXMsdGhpcy55QXhpcyx0aGlzLmNoYXJ0Q29uZmlnLmNoYXJ0T3JpZW50YXRpb24scik7ZS5wdXNoKC4uLmkuZ2V0RHJhd2FibGVFbGVtZW50KCkpfWJyZWFrfXJldHVybiBlfX07byhNaGUsImdldFBsb3RDb21wb25lbnQiKX0pO3ZhciBFNixPaGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtfaGUoKTtMaGUoKTtJaGUoKTt4NigpO0U2PWNsYXNze2NvbnN0cnVjdG9yKGUscixuLGkpe3RoaXMuY2hhcnRDb25maWc9ZTt0aGlzLmNoYXJ0RGF0YT1yO3RoaXMuY29tcG9uZW50U3RvcmU9e3RpdGxlOkRoZShlLHIsbixpKSxwbG90Ok1oZShlLHIsbikseEF4aXM6dk8oci54QXhpcyxlLnhBeGlzLHt0aXRsZUNvbG9yOm4ueEF4aXNUaXRsZUNvbG9yLGxhYmVsQ29sb3I6bi54QXhpc0xhYmVsQ29sb3IsdGlja0NvbG9yOm4ueEF4aXNUaWNrQ29sb3IsYXhpc0xpbmVDb2xvcjpuLnhBeGlzTGluZUNvbG9yfSxpKSx5QXhpczp2TyhyLnlBeGlzLGUueUF4aXMse3RpdGxlQ29sb3I6bi55QXhpc1RpdGxlQ29sb3IsbGFiZWxDb2xvcjpuLnlBeGlzTGFiZWxDb2xvcix0aWNrQ29sb3I6bi55QXhpc1RpY2tDb2xvcixheGlzTGluZUNvbG9yOm4ueUF4aXNMaW5lQ29sb3J9LGkpfX1zdGF0aWN7byh0aGlzLCJPcmNoZXN0cmF0b3IiKX1jYWxjdWxhdGVWZXJ0aWNhbFNwYWNlKCl7bGV0IGU9dGhpcy5jaGFydENvbmZpZy53aWR0aCxyPXRoaXMuY2hhcnRDb25maWcuaGVpZ2h0LG49MCxpPTAsYT1NYXRoLmZsb29yKGUqdGhpcy5jaGFydENvbmZpZy5wbG90UmVzZXJ2ZWRTcGFjZVBlcmNlbnQvMTAwKSxzPU1hdGguZmxvb3Iocip0aGlzLmNoYXJ0Q29uZmlnLnBsb3RSZXNlcnZlZFNwYWNlUGVyY2VudC8xMDApLGw9dGhpcy5jb21wb25lbnRTdG9yZS5wbG90LmNhbGN1bGF0ZVNwYWNlKHt3aWR0aDphLGhlaWdodDpzfSk7ZS09bC53aWR0aCxyLT1sLmhlaWdodCxsPXRoaXMuY29tcG9uZW50U3RvcmUudGl0bGUuY2FsY3VsYXRlU3BhY2Uoe3dpZHRoOnRoaXMuY2hhcnRDb25maWcud2lkdGgsaGVpZ2h0OnJ9KSxpPWwuaGVpZ2h0LHItPWwuaGVpZ2h0LHRoaXMuY29tcG9uZW50U3RvcmUueEF4aXMuc2V0QXhpc1Bvc2l0aW9uKCJib3R0b20iKSxsPXRoaXMuY29tcG9uZW50U3RvcmUueEF4aXMuY2FsY3VsYXRlU3BhY2Uoe3dpZHRoOmUsaGVpZ2h0OnJ9KSxyLT1sLmhlaWdodCx0aGlzLmNvbXBvbmVudFN0b3JlLnlBeGlzLnNldEF4aXNQb3NpdGlvbigibGVmdCIpLGw9dGhpcy5jb21wb25lbnRTdG9yZS55QXhpcy5jYWxjdWxhdGVTcGFjZSh7d2lkdGg6ZSxoZWlnaHQ6cn0pLG49bC53aWR0aCxlLT1sLndpZHRoLGU+MCYmKGErPWUsZT0wKSxyPjAmJihzKz1yLHI9MCksdGhpcy5jb21wb25lbnRTdG9yZS5wbG90LmNhbGN1bGF0ZVNwYWNlKHt3aWR0aDphLGhlaWdodDpzfSksdGhpcy5jb21wb25lbnRTdG9yZS5wbG90LnNldEJvdW5kaW5nQm94WFkoe3g6bix5Oml9KSx0aGlzLmNvbXBvbmVudFN0b3JlLnhBeGlzLnNldFJhbmdlKFtuLG4rYV0pLHRoaXMuY29tcG9uZW50U3RvcmUueEF4aXMuc2V0Qm91bmRpbmdCb3hYWSh7eDpuLHk6aStzfSksdGhpcy5jb21wb25lbnRTdG9yZS55QXhpcy5zZXRSYW5nZShbaSxpK3NdKSx0aGlzLmNvbXBvbmVudFN0b3JlLnlBeGlzLnNldEJvdW5kaW5nQm94WFkoe3g6MCx5Oml9KSx0aGlzLmNoYXJ0RGF0YS5wbG90cy5zb21lKHU9Pm1PKHUpKSYmdGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5yZWNhbGN1bGF0ZU91dGVyUGFkZGluZ1RvRHJhd0JhcigpfWNhbGN1bGF0ZUhvcml6b250YWxTcGFjZSgpe2xldCBlPXRoaXMuY2hhcnRDb25maWcud2lkdGgscj10aGlzLmNoYXJ0Q29uZmlnLmhlaWdodCxuPTAsaT0wLGE9MCxzPU1hdGguZmxvb3IoZSp0aGlzLmNoYXJ0Q29uZmlnLnBsb3RSZXNlcnZlZFNwYWNlUGVyY2VudC8xMDApLGw9TWF0aC5mbG9vcihyKnRoaXMuY2hhcnRDb25maWcucGxvdFJlc2VydmVkU3BhY2VQZXJjZW50LzEwMCksdT10aGlzLmNvbXBvbmVudFN0b3JlLnBsb3QuY2FsY3VsYXRlU3BhY2Uoe3dpZHRoOnMsaGVpZ2h0Omx9KTtlLT11LndpZHRoLHItPXUuaGVpZ2h0LHU9dGhpcy5jb21wb25lbnRTdG9yZS50aXRsZS5jYWxjdWxhdGVTcGFjZSh7d2lkdGg6dGhpcy5jaGFydENvbmZpZy53aWR0aCxoZWlnaHQ6cn0pLG49dS5oZWlnaHQsci09dS5oZWlnaHQsdGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5zZXRBeGlzUG9zaXRpb24oImxlZnQiKSx1PXRoaXMuY29tcG9uZW50U3RvcmUueEF4aXMuY2FsY3VsYXRlU3BhY2Uoe3dpZHRoOmUsaGVpZ2h0OnJ9KSxlLT11LndpZHRoLGk9dS53aWR0aCx0aGlzLmNvbXBvbmVudFN0b3JlLnlBeGlzLnNldEF4aXNQb3NpdGlvbigidG9wIiksdT10aGlzLmNvbXBvbmVudFN0b3JlLnlBeGlzLmNhbGN1bGF0ZVNwYWNlKHt3aWR0aDplLGhlaWdodDpyfSksci09dS5oZWlnaHQsYT1uK3UuaGVpZ2h0LGU+MCYmKHMrPWUsZT0wKSxyPjAmJihsKz1yLHI9MCksdGhpcy5jb21wb25lbnRTdG9yZS5wbG90LmNhbGN1bGF0ZVNwYWNlKHt3aWR0aDpzLGhlaWdodDpsfSksdGhpcy5jb21wb25lbnRTdG9yZS5wbG90LnNldEJvdW5kaW5nQm94WFkoe3g6aSx5OmF9KSx0aGlzLmNvbXBvbmVudFN0b3JlLnlBeGlzLnNldFJhbmdlKFtpLGkrc10pLHRoaXMuY29tcG9uZW50U3RvcmUueUF4aXMuc2V0Qm91bmRpbmdCb3hYWSh7eDppLHk6bn0pLHRoaXMuY29tcG9uZW50U3RvcmUueEF4aXMuc2V0UmFuZ2UoW2EsYStsXSksdGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5zZXRCb3VuZGluZ0JveFhZKHt4OjAseTphfSksdGhpcy5jaGFydERhdGEucGxvdHMuc29tZShoPT5tTyhoKSkmJnRoaXMuY29tcG9uZW50U3RvcmUueEF4aXMucmVjYWxjdWxhdGVPdXRlclBhZGRpbmdUb0RyYXdCYXIoKX1jYWxjdWxhdGVTcGFjZSgpe3RoaXMuY2hhcnRDb25maWcuY2hhcnRPcmllbnRhdGlvbj09PSJob3Jpem9udGFsIj90aGlzLmNhbGN1bGF0ZUhvcml6b250YWxTcGFjZSgpOnRoaXMuY2FsY3VsYXRlVmVydGljYWxTcGFjZSgpfWdldERyYXdhYmxlRWxlbWVudCgpe3RoaXMuY2FsY3VsYXRlU3BhY2UoKTtsZXQgZT1bXTt0aGlzLmNvbXBvbmVudFN0b3JlLnBsb3Quc2V0QXhlcyh0aGlzLmNvbXBvbmVudFN0b3JlLnhBeGlzLHRoaXMuY29tcG9uZW50U3RvcmUueUF4aXMpO2ZvcihsZXQgciBvZiBPYmplY3QudmFsdWVzKHRoaXMuY29tcG9uZW50U3RvcmUpKWUucHVzaCguLi5yLmdldERyYXdhYmxlRWxlbWVudHMoKSk7cmV0dXJuIGV9fX0pO3ZhciBTNixQaGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtPaGUoKTtTNj1jbGFzc3tzdGF0aWN7byh0aGlzLCJYWUNoYXJ0QnVpbGRlciIpfXN0YXRpYyBidWlsZChlLHIsbixpKXtyZXR1cm4gbmV3IEU2KGUscixuLGkpLmdldERyYXdhYmxlRWxlbWVudCgpfX19KTtmdW5jdGlvbiBGaGUoKXtsZXQgdD1vaCgpLGU9Y3IoKTtyZXR1cm4gRmkodC54eUNoYXJ0LGUudGhlbWVWYXJpYWJsZXMueHlDaGFydCl9ZnVuY3Rpb24gJGhlKCl7bGV0IHQ9Y3IoKTtyZXR1cm4gRmkob3IueHlDaGFydCx0Lnh5Q2hhcnQpfWZ1bmN0aW9uIHpoZSgpe3JldHVybnt5QXhpczp7dHlwZToibGluZWFyIix0aXRsZToiIixtaW46MS8wLG1heDotMS8wfSx4QXhpczp7dHlwZToiYmFuZCIsdGl0bGU6IiIsY2F0ZWdvcmllczpbXX0sdGl0bGU6IiIscGxvdHM6W119fWZ1bmN0aW9uIGtPKHQpe2xldCBlPWNyKCk7cmV0dXJuIFRyKHQudHJpbSgpLGUpfWZ1bmN0aW9uIElHZSh0KXtCaGU9dH1mdW5jdGlvbiBPR2UodCl7dD09PSJob3Jpem9udGFsIj9iYi5jaGFydE9yaWVudGF0aW9uPSJob3Jpem9udGFsIjpiYi5jaGFydE9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCJ9ZnVuY3Rpb24gUEdlKHQpe2ZuLnhBeGlzLnRpdGxlPWtPKHQudGV4dCl9ZnVuY3Rpb24gR2hlKHQsZSl7Zm4ueEF4aXM9e3R5cGU6ImxpbmVhciIsdGl0bGU6Zm4ueEF4aXMudGl0bGUsbWluOnQsbWF4OmV9LEM2PSEwfWZ1bmN0aW9uIEJHZSh0KXtmbi54QXhpcz17dHlwZToiYmFuZCIsdGl0bGU6Zm4ueEF4aXMudGl0bGUsY2F0ZWdvcmllczp0Lm1hcChlPT5rTyhlLnRleHQpKX0sQzY9ITB9ZnVuY3Rpb24gRkdlKHQpe2ZuLnlBeGlzLnRpdGxlPWtPKHQudGV4dCl9ZnVuY3Rpb24gJEdlKHQsZSl7Zm4ueUF4aXM9e3R5cGU6ImxpbmVhciIsdGl0bGU6Zm4ueUF4aXMudGl0bGUsbWluOnQsbWF4OmV9LFRPPSEwfWZ1bmN0aW9uIHpHZSh0KXtsZXQgZT1NYXRoLm1pbiguLi50KSxyPU1hdGgubWF4KC4uLnQpLG49UzEoZm4ueUF4aXMpP2ZuLnlBeGlzLm1pbjoxLzAsaT1TMShmbi55QXhpcyk/Zm4ueUF4aXMubWF4Oi0xLzA7Zm4ueUF4aXM9e3R5cGU6ImxpbmVhciIsdGl0bGU6Zm4ueUF4aXMudGl0bGUsbWluOk1hdGgubWluKG4sZSksbWF4Ok1hdGgubWF4KGkscil9fWZ1bmN0aW9uIFZoZSh0KXtsZXQgZT1bXTtpZih0Lmxlbmd0aD09PTApcmV0dXJuIGU7aWYoIUM2KXtsZXQgcj1TMShmbi54QXhpcyk/Zm4ueEF4aXMubWluOjEvMCxuPVMxKGZuLnhBeGlzKT9mbi54QXhpcy5tYXg6LTEvMDtHaGUoTWF0aC5taW4ociwxKSxNYXRoLm1heChuLHQubGVuZ3RoKSl9aWYoVE98fHpHZSh0KSx2Nihmbi54QXhpcykmJihlPWZuLnhBeGlzLmNhdGVnb3JpZXMubWFwKChyLG4pPT5bcix0W25dXSkpLFMxKGZuLnhBeGlzKSl7bGV0IHI9Zm4ueEF4aXMubWluLG49Zm4ueEF4aXMubWF4LGk9KG4tcikvKHQubGVuZ3RoLTEpLGE9W107Zm9yKGxldCBzPXI7czw9bjtzKz1pKWEucHVzaChgJHtzfWApO2U9YS5tYXAoKHMsbCk9PltzLHRbbF1dKX1yZXR1cm4gZX1mdW5jdGlvbiBVaGUodCl7cmV0dXJuIHdPW3Q9PT0wPzA6dCV3Ty5sZW5ndGhdfWZ1bmN0aW9uIEdHZSh0LGUpe2xldCByPVZoZShlKTtmbi5wbG90cy5wdXNoKHt0eXBlOiJsaW5lIixzdHJva2VGaWxsOlVoZSh4Yiksc3Ryb2tlV2lkdGg6MixkYXRhOnJ9KSx4YisrfWZ1bmN0aW9uIFZHZSh0LGUpe2xldCByPVZoZShlKTtmbi5wbG90cy5wdXNoKHt0eXBlOiJiYXIiLGZpbGw6VWhlKHhiKSxkYXRhOnJ9KSx4YisrfWZ1bmN0aW9uIFVHZSgpe2lmKGZuLnBsb3RzLmxlbmd0aD09PTApdGhyb3cgRXJyb3IoIk5vIFBsb3QgdG8gcmVuZGVyLCBwbGVhc2UgcHJvdmlkZSBhIHBsb3Qgd2l0aCBzb21lIGRhdGEiKTtyZXR1cm4gZm4udGl0bGU9SXIoKSxTNi5idWlsZChiYixmbix3YixCaGUpfWZ1bmN0aW9uIEhHZSgpe3JldHVybiB3Yn1mdW5jdGlvbiBXR2UoKXtyZXR1cm4gYmJ9dmFyIHhiLEJoZSxiYix3Yixmbix3TyxDNixUTyxxR2UsSGhlLFdoZT1OKCgpPT57InVzZSBzdHJpY3QiO2ppKCk7WWEoKTtfeSgpO2lyKCk7Z3IoKTttaSgpO1BoZSgpO3g2KCk7eGI9MCxiYj0kaGUoKSx3Yj1GaGUoKSxmbj16aGUoKSx3Tz13Yi5wbG90Q29sb3JQYWxldHRlLnNwbGl0KCIsIikubWFwKHQ9PnQudHJpbSgpKSxDNj0hMSxUTz0hMTtvKEZoZSwiZ2V0Q2hhcnREZWZhdWx0VGhlbWVDb25maWciKTtvKCRoZSwiZ2V0Q2hhcnREZWZhdWx0Q29uZmlnIik7byh6aGUsImdldENoYXJ0RGVmYXVsdERhdGEiKTtvKGtPLCJ0ZXh0U2FuaXRpemVyIik7byhJR2UsInNldFRtcFNWR0ciKTtvKE9HZSwic2V0T3JpZW50YXRpb24iKTtvKFBHZSwic2V0WEF4aXNUaXRsZSIpO28oR2hlLCJzZXRYQXhpc1JhbmdlRGF0YSIpO28oQkdlLCJzZXRYQXhpc0JhbmQiKTtvKEZHZSwic2V0WUF4aXNUaXRsZSIpO28oJEdlLCJzZXRZQXhpc1JhbmdlRGF0YSIpO28oekdlLCJzZXRZQXhpc1JhbmdlRnJvbVBsb3REYXRhIik7byhWaGUsInRyYW5zZm9ybURhdGFXaXRob3V0Q2F0ZWdvcnkiKTtvKFVoZSwiZ2V0UGxvdENvbG9yRnJvbVBhbGV0dGUiKTtvKEdHZSwic2V0TGluZURhdGEiKTtvKFZHZSwic2V0QmFyRGF0YSIpO28oVUdlLCJnZXREcmF3YWJsZUVsZW0iKTtvKEhHZSwiZ2V0Q2hhcnRUaGVtZUNvbmZpZyIpO28oV0dlLCJnZXRDaGFydENvbmZpZyIpO3FHZT1vKGZ1bmN0aW9uKCl7QXIoKSx4Yj0wLGJiPSRoZSgpLGZuPXpoZSgpLHdiPUZoZSgpLHdPPXdiLnBsb3RDb2xvclBhbGV0dGUuc3BsaXQoIiwiKS5tYXAodD0+dC50cmltKCkpLEM2PSExLFRPPSExfSwiY2xlYXIiKSxIaGU9e2dldERyYXdhYmxlRWxlbTpVR2UsY2xlYXI6cUdlLHNldEFjY1RpdGxlOkxyLGdldEFjY1RpdGxlOlJyLHNldERpYWdyYW1UaXRsZTokcixnZXREaWFncmFtVGl0bGU6SXIsZ2V0QWNjRGVzY3JpcHRpb246TXIsc2V0QWNjRGVzY3JpcHRpb246TnIsc2V0T3JpZW50YXRpb246T0dlLHNldFhBeGlzVGl0bGU6UEdlLHNldFhBeGlzUmFuZ2VEYXRhOkdoZSxzZXRYQXhpc0JhbmQ6QkdlLHNldFlBeGlzVGl0bGU6RkdlLHNldFlBeGlzUmFuZ2VEYXRhOiRHZSxzZXRMaW5lRGF0YTpHR2Usc2V0QmFyRGF0YTpWR2Usc2V0VG1wU1ZHRzpJR2UsZ2V0Q2hhcnRUaGVtZUNvbmZpZzpIR2UsZ2V0Q2hhcnRDb25maWc6V0dlfX0pO3ZhciBZR2UscWhlLFloZT1OKCgpPT57InVzZSBzdHJpY3QiO3Z0KCk7VmMoKTtFaSgpO1lHZT1vKCh0LGUscixuKT0+e2xldCBpPW4uZGIsYT1pLmdldENoYXJ0VGhlbWVDb25maWcoKSxzPWkuZ2V0Q2hhcnRDb25maWcoKTtmdW5jdGlvbiBsKHYpe3JldHVybiB2PT09InRvcCI/InRleHQtYmVmb3JlLWVkZ2UiOiJtaWRkbGUifW8obCwiZ2V0RG9taW5hbnRCYXNlTGluZSIpO2Z1bmN0aW9uIHUodil7cmV0dXJuIHY9PT0ibGVmdCI/InN0YXJ0Ijp2PT09InJpZ2h0Ij8iZW5kIjoibWlkZGxlIn1vKHUsImdldFRleHRBbmNob3IiKTtmdW5jdGlvbiBoKHYpe3JldHVybmB0cmFuc2xhdGUoJHt2Lnh9LCAke3YueX0pIHJvdGF0ZSgke3Yucm90YXRpb258fDB9KWB9byhoLCJnZXRUZXh0VHJhbnNmb3JtYXRpb24iKSxZLmRlYnVnKGBSZW5kZXJpbmcgeHljaGFydCBjaGFydApgK3QpO2xldCBmPXNhKGUpLGQ9Zi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm1haW4iKSxwPWQuYXBwZW5kKCJyZWN0IikuYXR0cigid2lkdGgiLHMud2lkdGgpLmF0dHIoImhlaWdodCIscy5oZWlnaHQpLmF0dHIoImNsYXNzIiwiYmFja2dyb3VuZCIpO3ZuKGYscy5oZWlnaHQscy53aWR0aCwhMCksZi5hdHRyKCJ2aWV3Qm94IixgMCAwICR7cy53aWR0aH0gJHtzLmhlaWdodH1gKSxwLmF0dHIoImZpbGwiLGEuYmFja2dyb3VuZENvbG9yKSxpLnNldFRtcFNWR0coZi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm1lcm1haWQtdG1wLWdyb3VwIikpO2xldCBtPWkuZ2V0RHJhd2FibGVFbGVtKCksZz17fTtmdW5jdGlvbiB5KHYpe2xldCB4PWQsYj0iIjtmb3IobGV0W3ddb2Ygdi5lbnRyaWVzKCkpe2xldCBDPWQ7dz4wJiZnW2JdJiYoQz1nW2JdKSxiKz12W3ddLHg9Z1tiXSx4fHwoeD1nW2JdPUMuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLHZbd10pKX1yZXR1cm4geH1vKHksImdldEdyb3VwIik7Zm9yKGxldCB2IG9mIG0pe2lmKHYuZGF0YS5sZW5ndGg9PT0wKWNvbnRpbnVlO2xldCB4PXkodi5ncm91cFRleHRzKTtzd2l0Y2godi50eXBlKXtjYXNlInJlY3QiOnguc2VsZWN0QWxsKCJyZWN0IikuZGF0YSh2LmRhdGEpLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsYj0+Yi54KS5hdHRyKCJ5IixiPT5iLnkpLmF0dHIoIndpZHRoIixiPT5iLndpZHRoKS5hdHRyKCJoZWlnaHQiLGI9PmIuaGVpZ2h0KS5hdHRyKCJmaWxsIixiPT5iLmZpbGwpLmF0dHIoInN0cm9rZSIsYj0+Yi5zdHJva2VGaWxsKS5hdHRyKCJzdHJva2Utd2lkdGgiLGI9PmIuc3Ryb2tlV2lkdGgpO2JyZWFrO2Nhc2UidGV4dCI6eC5zZWxlY3RBbGwoInRleHQiKS5kYXRhKHYuZGF0YSkuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJmaWxsIixiPT5iLmZpbGwpLmF0dHIoImZvbnQtc2l6ZSIsYj0+Yi5mb250U2l6ZSkuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLGI9PmwoYi52ZXJ0aWNhbFBvcykpLmF0dHIoInRleHQtYW5jaG9yIixiPT51KGIuaG9yaXpvbnRhbFBvcykpLmF0dHIoInRyYW5zZm9ybSIsYj0+aChiKSkudGV4dChiPT5iLnRleHQpO2JyZWFrO2Nhc2UicGF0aCI6eC5zZWxlY3RBbGwoInBhdGgiKS5kYXRhKHYuZGF0YSkuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixiPT5iLnBhdGgpLmF0dHIoImZpbGwiLGI9PmIuZmlsbD9iLmZpbGw6Im5vbmUiKS5hdHRyKCJzdHJva2UiLGI9PmIuc3Ryb2tlRmlsbCkuYXR0cigic3Ryb2tlLXdpZHRoIixiPT5iLnN0cm9rZVdpZHRoKTticmVha319fSwiZHJhdyIpLHFoZT17ZHJhdzpZR2V9fSk7dmFyIFhoZT17fTtocihYaGUse2RpYWdyYW06KCk9PlhHZX0pO3ZhciBYR2UsamhlPU4oKCk9PnsidXNlIHN0cmljdCI7U2hlKCk7V2hlKCk7WWhlKCk7WEdlPXtwYXJzZXI6RWhlLGRiOkhoZSxyZW5kZXJlcjpxaGV9fSk7dmFyIEVPLFpoZSxKaGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtFTz1mdW5jdGlvbigpe3ZhciB0PW8oZnVuY3Rpb24ocmUsb2UsVix4ZSl7Zm9yKFY9Vnx8e30seGU9cmUubGVuZ3RoO3hlLS07VltyZVt4ZV1dPW9lKTtyZXR1cm4gVn0sIm8iKSxlPVsxLDNdLHI9WzEsNF0sbj1bMSw1XSxpPVsxLDZdLGE9WzUsNiw4LDksMTEsMTMsMjEsMjIsMjMsMjQsNDEsNDIsNDMsNDQsNDUsNDYsNTQsNzIsNzQsNzcsODksOTBdLHM9WzEsMjJdLGw9WzIsN10sdT1bMSwyNl0saD1bMSwyN10sZj1bMSwyOF0sZD1bMSwyOV0scD1bMSwzM10sbT1bMSwzNF0sZz1bMSwzNV0seT1bMSwzNl0sdj1bMSwzN10seD1bMSwzOF0sYj1bMSwyNF0sdz1bMSwzMV0sQz1bMSwzMl0sVD1bMSwzMF0sRT1bMSwzOV0sQT1bMSw0MF0sUz1bNSw4LDksMTEsMTMsMjEsMjIsMjMsMjQsNDEsNDIsNDMsNDQsNDUsNDYsNTQsNzIsNzQsNzcsODksOTBdLF89WzEsNjFdLEk9Wzg5LDkwXSxEPVs1LDgsOSwxMSwxMywyMSwyMiwyMywyNCwyNywyOSw0MSw0Miw0Myw0NCw0NSw0Niw1NCw2MSw2Myw3Miw3NCw3NSw3Niw3Nyw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MF0saz1bMjcsMjldLEw9WzEsNzBdLFI9WzEsNzFdLE89WzEsNzJdLE09WzEsNzNdLEI9WzEsNzRdLEY9WzEsNzVdLFA9WzEsNzZdLHo9WzEsODNdLCQ9WzEsODBdLEg9WzEsODRdLFE9WzEsODVdLGo9WzEsODZdLGllPVsxLDg3XSxuZT1bMSw4OF0sbGU9WzEsODldLGhlPVsxLDkwXSxLPVsxLDkxXSxYPVsxLDkyXSx0ZT1bNSw4LDksMTEsMTMsMjEsMjIsMjMsMjQsMjcsNDEsNDIsNDMsNDQsNDUsNDYsNTQsNzIsNzQsNzUsNzYsNzcsODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTBdLEo9WzYzLDY0XSxzZT1bMSwxMDFdLHVlPVs1LDgsOSwxMSwxMywyMSwyMiwyMywyNCw0MSw0Miw0Myw0NCw0NSw0Niw1NCw3Miw3NCw3Niw3Nyw4OSw5MF0sWj1bNSw4LDksMTEsMTMsMjEsMjIsMjMsMjQsNDEsNDIsNDMsNDQsNDUsNDYsNTQsNzIsNzQsNzUsNzYsNzcsODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTBdLFNlPVsxLDExMF0sY2U9WzEsMTA2XSxhZT1bMSwxMDddLE9lPVsxLDEwOF0sZ2U9WzEsMTA5XSx6ZT1bMSwxMTFdLEhlPVsxLDExNl0sJGU9WzEsMTE3XSxSZT1bMSwxMTRdLEllPVsxLDExNV0sYmU9e3RyYWNlOm8oZnVuY3Rpb24oKXt9LCJ0cmFjZSIpLHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsZGlyZWN0aXZlOjQsTkVXTElORTo1LFJEOjYsZGlhZ3JhbTo3LEVPRjo4LGFjY190aXRsZTo5LGFjY190aXRsZV92YWx1ZToxMCxhY2NfZGVzY3I6MTEsYWNjX2Rlc2NyX3ZhbHVlOjEyLGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6MTMscmVxdWlyZW1lbnREZWY6MTQsZWxlbWVudERlZjoxNSxyZWxhdGlvbnNoaXBEZWY6MTYsZGlyZWN0aW9uOjE3LHN0eWxlU3RhdGVtZW50OjE4LGNsYXNzRGVmU3RhdGVtZW50OjE5LGNsYXNzU3RhdGVtZW50OjIwLGRpcmVjdGlvbl90YjoyMSxkaXJlY3Rpb25fYnQ6MjIsZGlyZWN0aW9uX3JsOjIzLGRpcmVjdGlvbl9scjoyNCxyZXF1aXJlbWVudFR5cGU6MjUscmVxdWlyZW1lbnROYW1lOjI2LFNUUlVDVF9TVEFSVDoyNyxyZXF1aXJlbWVudEJvZHk6MjgsU1RZTEVfU0VQQVJBVE9SOjI5LGlkTGlzdDozMCxJRDozMSxDT0xPTlNFUDozMixpZDozMyxURVhUOjM0LHRleHQ6MzUsUklTSzozNixyaXNrTGV2ZWw6MzcsVkVSSUZZTVRIRDozOCx2ZXJpZnlUeXBlOjM5LFNUUlVDVF9TVE9QOjQwLFJFUVVJUkVNRU5UOjQxLEZVTkNUSU9OQUxfUkVRVUlSRU1FTlQ6NDIsSU5URVJGQUNFX1JFUVVJUkVNRU5UOjQzLFBFUkZPUk1BTkNFX1JFUVVJUkVNRU5UOjQ0LFBIWVNJQ0FMX1JFUVVJUkVNRU5UOjQ1LERFU0lHTl9DT05TVFJBSU5UOjQ2LExPV19SSVNLOjQ3LE1FRF9SSVNLOjQ4LEhJR0hfUklTSzo0OSxWRVJJRllfQU5BTFlTSVM6NTAsVkVSSUZZX0RFTU9OU1RSQVRJT046NTEsVkVSSUZZX0lOU1BFQ1RJT046NTIsVkVSSUZZX1RFU1Q6NTMsRUxFTUVOVDo1NCxlbGVtZW50TmFtZTo1NSxlbGVtZW50Qm9keTo1NixUWVBFOjU3LHR5cGU6NTgsRE9DUkVGOjU5LHJlZjo2MCxFTkRfQVJST1dfTDo2MSxyZWxhdGlvbnNoaXA6NjIsTElORTo2MyxFTkRfQVJST1dfUjo2NCxDT05UQUlOUzo2NSxDT1BJRVM6NjYsREVSSVZFUzo2NyxTQVRJU0ZJRVM6NjgsVkVSSUZJRVM6NjksUkVGSU5FUzo3MCxUUkFDRVM6NzEsQ0xBU1NERUY6NzIsc3R5bGVzT3B0OjczLENMQVNTOjc0LEFMUEhBOjc1LENPTU1BOjc2LFNUWUxFOjc3LHN0eWxlOjc4LHN0eWxlQ29tcG9uZW50Ojc5LE5VTTo4MCxDT0xPTjo4MSxVTklUOjgyLFNQQUNFOjgzLEJSS1Q6ODQsUENUOjg1LE1JTlVTOjg2LExBQkVMOjg3LFNFTUlDT0xPTjo4OCx1bnFTdHJpbmc6ODkscVN0cmluZzo5MCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNToiTkVXTElORSIsNjoiUkQiLDg6IkVPRiIsOToiYWNjX3RpdGxlIiwxMDoiYWNjX3RpdGxlX3ZhbHVlIiwxMToiYWNjX2Rlc2NyIiwxMjoiYWNjX2Rlc2NyX3ZhbHVlIiwxMzoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMjE6ImRpcmVjdGlvbl90YiIsMjI6ImRpcmVjdGlvbl9idCIsMjM6ImRpcmVjdGlvbl9ybCIsMjQ6ImRpcmVjdGlvbl9sciIsMjc6IlNUUlVDVF9TVEFSVCIsMjk6IlNUWUxFX1NFUEFSQVRPUiIsMzE6IklEIiwzMjoiQ09MT05TRVAiLDM0OiJURVhUIiwzNjoiUklTSyIsMzg6IlZFUklGWU1USEQiLDQwOiJTVFJVQ1RfU1RPUCIsNDE6IlJFUVVJUkVNRU5UIiw0MjoiRlVOQ1RJT05BTF9SRVFVSVJFTUVOVCIsNDM6IklOVEVSRkFDRV9SRVFVSVJFTUVOVCIsNDQ6IlBFUkZPUk1BTkNFX1JFUVVJUkVNRU5UIiw0NToiUEhZU0lDQUxfUkVRVUlSRU1FTlQiLDQ2OiJERVNJR05fQ09OU1RSQUlOVCIsNDc6IkxPV19SSVNLIiw0ODoiTUVEX1JJU0siLDQ5OiJISUdIX1JJU0siLDUwOiJWRVJJRllfQU5BTFlTSVMiLDUxOiJWRVJJRllfREVNT05TVFJBVElPTiIsNTI6IlZFUklGWV9JTlNQRUNUSU9OIiw1MzoiVkVSSUZZX1RFU1QiLDU0OiJFTEVNRU5UIiw1NzoiVFlQRSIsNTk6IkRPQ1JFRiIsNjE6IkVORF9BUlJPV19MIiw2MzoiTElORSIsNjQ6IkVORF9BUlJPV19SIiw2NToiQ09OVEFJTlMiLDY2OiJDT1BJRVMiLDY3OiJERVJJVkVTIiw2ODoiU0FUSVNGSUVTIiw2OToiVkVSSUZJRVMiLDcwOiJSRUZJTkVTIiw3MToiVFJBQ0VTIiw3MjoiQ0xBU1NERUYiLDc0OiJDTEFTUyIsNzU6IkFMUEhBIiw3NjoiQ09NTUEiLDc3OiJTVFlMRSIsODA6Ik5VTSIsODE6IkNPTE9OIiw4MjoiVU5JVCIsODM6IlNQQUNFIiw4NDoiQlJLVCIsODU6IlBDVCIsODY6Ik1JTlVTIiw4NzoiTEFCRUwiLDg4OiJTRU1JQ09MT04iLDg5OiJ1bnFTdHJpbmciLDkwOiJxU3RyaW5nIn0scHJvZHVjdGlvbnNfOlswLFszLDNdLFszLDJdLFszLDRdLFs0LDJdLFs0LDJdLFs0LDFdLFs3LDBdLFs3LDJdLFs3LDJdLFs3LDJdLFs3LDJdLFs3LDJdLFs3LDJdLFs3LDJdLFs3LDJdLFs3LDJdLFsxNywxXSxbMTcsMV0sWzE3LDFdLFsxNywxXSxbMTQsNV0sWzE0LDddLFsyOCw1XSxbMjgsNV0sWzI4LDVdLFsyOCw1XSxbMjgsMl0sWzI4LDFdLFsyNSwxXSxbMjUsMV0sWzI1LDFdLFsyNSwxXSxbMjUsMV0sWzI1LDFdLFszNywxXSxbMzcsMV0sWzM3LDFdLFszOSwxXSxbMzksMV0sWzM5LDFdLFszOSwxXSxbMTUsNV0sWzE1LDddLFs1Niw1XSxbNTYsNV0sWzU2LDJdLFs1NiwxXSxbMTYsNV0sWzE2LDVdLFs2MiwxXSxbNjIsMV0sWzYyLDFdLFs2MiwxXSxbNjIsMV0sWzYyLDFdLFs2MiwxXSxbMTksM10sWzIwLDNdLFsyMCwzXSxbMzAsMV0sWzMwLDNdLFszMCwxXSxbMzAsM10sWzE4LDNdLFs3MywxXSxbNzMsM10sWzc4LDFdLFs3OCwyXSxbNzksMV0sWzc5LDFdLFs3OSwxXSxbNzksMV0sWzc5LDFdLFs3OSwxXSxbNzksMV0sWzc5LDFdLFs3OSwxXSxbNzksMV0sWzI2LDFdLFsyNiwxXSxbMzMsMV0sWzMzLDFdLFszNSwxXSxbMzUsMV0sWzU1LDFdLFs1NSwxXSxbNTgsMV0sWzU4LDFdLFs2MCwxXSxbNjAsMV1dLHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbihvZSxWLHhlLHEscGUsdmUsUGUpe3ZhciBfZT12ZS5sZW5ndGgtMTtzd2l0Y2gocGUpe2Nhc2UgNDp0aGlzLiQ9dmVbX2VdLnRyaW0oKSxxLnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSA1OmNhc2UgNjp0aGlzLiQ9dmVbX2VdLnRyaW0oKSxxLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSA3OnRoaXMuJD1bXTticmVhaztjYXNlIDE3OnEuc2V0RGlyZWN0aW9uKCJUQiIpO2JyZWFrO2Nhc2UgMTg6cS5zZXREaXJlY3Rpb24oIkJUIik7YnJlYWs7Y2FzZSAxOTpxLnNldERpcmVjdGlvbigiUkwiKTticmVhaztjYXNlIDIwOnEuc2V0RGlyZWN0aW9uKCJMUiIpO2JyZWFrO2Nhc2UgMjE6cS5hZGRSZXF1aXJlbWVudCh2ZVtfZS0zXSx2ZVtfZS00XSk7YnJlYWs7Y2FzZSAyMjpxLmFkZFJlcXVpcmVtZW50KHZlW19lLTVdLHZlW19lLTZdKSxxLnNldENsYXNzKFt2ZVtfZS01XV0sdmVbX2UtM10pO2JyZWFrO2Nhc2UgMjM6cS5zZXROZXdSZXFJZCh2ZVtfZS0yXSk7YnJlYWs7Y2FzZSAyNDpxLnNldE5ld1JlcVRleHQodmVbX2UtMl0pO2JyZWFrO2Nhc2UgMjU6cS5zZXROZXdSZXFSaXNrKHZlW19lLTJdKTticmVhaztjYXNlIDI2OnEuc2V0TmV3UmVxVmVyaWZ5TWV0aG9kKHZlW19lLTJdKTticmVhaztjYXNlIDI5OnRoaXMuJD1xLlJlcXVpcmVtZW50VHlwZS5SRVFVSVJFTUVOVDticmVhaztjYXNlIDMwOnRoaXMuJD1xLlJlcXVpcmVtZW50VHlwZS5GVU5DVElPTkFMX1JFUVVJUkVNRU5UO2JyZWFrO2Nhc2UgMzE6dGhpcy4kPXEuUmVxdWlyZW1lbnRUeXBlLklOVEVSRkFDRV9SRVFVSVJFTUVOVDticmVhaztjYXNlIDMyOnRoaXMuJD1xLlJlcXVpcmVtZW50VHlwZS5QRVJGT1JNQU5DRV9SRVFVSVJFTUVOVDticmVhaztjYXNlIDMzOnRoaXMuJD1xLlJlcXVpcmVtZW50VHlwZS5QSFlTSUNBTF9SRVFVSVJFTUVOVDticmVhaztjYXNlIDM0OnRoaXMuJD1xLlJlcXVpcmVtZW50VHlwZS5ERVNJR05fQ09OU1RSQUlOVDticmVhaztjYXNlIDM1OnRoaXMuJD1xLlJpc2tMZXZlbC5MT1dfUklTSzticmVhaztjYXNlIDM2OnRoaXMuJD1xLlJpc2tMZXZlbC5NRURfUklTSzticmVhaztjYXNlIDM3OnRoaXMuJD1xLlJpc2tMZXZlbC5ISUdIX1JJU0s7YnJlYWs7Y2FzZSAzODp0aGlzLiQ9cS5WZXJpZnlUeXBlLlZFUklGWV9BTkFMWVNJUzticmVhaztjYXNlIDM5OnRoaXMuJD1xLlZlcmlmeVR5cGUuVkVSSUZZX0RFTU9OU1RSQVRJT047YnJlYWs7Y2FzZSA0MDp0aGlzLiQ9cS5WZXJpZnlUeXBlLlZFUklGWV9JTlNQRUNUSU9OO2JyZWFrO2Nhc2UgNDE6dGhpcy4kPXEuVmVyaWZ5VHlwZS5WRVJJRllfVEVTVDticmVhaztjYXNlIDQyOnEuYWRkRWxlbWVudCh2ZVtfZS0zXSk7YnJlYWs7Y2FzZSA0MzpxLmFkZEVsZW1lbnQodmVbX2UtNV0pLHEuc2V0Q2xhc3MoW3ZlW19lLTVdXSx2ZVtfZS0zXSk7YnJlYWs7Y2FzZSA0NDpxLnNldE5ld0VsZW1lbnRUeXBlKHZlW19lLTJdKTticmVhaztjYXNlIDQ1OnEuc2V0TmV3RWxlbWVudERvY1JlZih2ZVtfZS0yXSk7YnJlYWs7Y2FzZSA0ODpxLmFkZFJlbGF0aW9uc2hpcCh2ZVtfZS0yXSx2ZVtfZV0sdmVbX2UtNF0pO2JyZWFrO2Nhc2UgNDk6cS5hZGRSZWxhdGlvbnNoaXAodmVbX2UtMl0sdmVbX2UtNF0sdmVbX2VdKTticmVhaztjYXNlIDUwOnRoaXMuJD1xLlJlbGF0aW9uc2hpcHMuQ09OVEFJTlM7YnJlYWs7Y2FzZSA1MTp0aGlzLiQ9cS5SZWxhdGlvbnNoaXBzLkNPUElFUzticmVhaztjYXNlIDUyOnRoaXMuJD1xLlJlbGF0aW9uc2hpcHMuREVSSVZFUzticmVhaztjYXNlIDUzOnRoaXMuJD1xLlJlbGF0aW9uc2hpcHMuU0FUSVNGSUVTO2JyZWFrO2Nhc2UgNTQ6dGhpcy4kPXEuUmVsYXRpb25zaGlwcy5WRVJJRklFUzticmVhaztjYXNlIDU1OnRoaXMuJD1xLlJlbGF0aW9uc2hpcHMuUkVGSU5FUzticmVhaztjYXNlIDU2OnRoaXMuJD1xLlJlbGF0aW9uc2hpcHMuVFJBQ0VTO2JyZWFrO2Nhc2UgNTc6dGhpcy4kPXZlW19lLTJdLHEuZGVmaW5lQ2xhc3ModmVbX2UtMV0sdmVbX2VdKTticmVhaztjYXNlIDU4OnEuc2V0Q2xhc3ModmVbX2UtMV0sdmVbX2VdKTticmVhaztjYXNlIDU5OnEuc2V0Q2xhc3MoW3ZlW19lLTJdXSx2ZVtfZV0pO2JyZWFrO2Nhc2UgNjA6Y2FzZSA2Mjp0aGlzLiQ9W3ZlW19lXV07YnJlYWs7Y2FzZSA2MTpjYXNlIDYzOnRoaXMuJD12ZVtfZS0yXS5jb25jYXQoW3ZlW19lXV0pO2JyZWFrO2Nhc2UgNjQ6dGhpcy4kPXZlW19lLTJdLHEuc2V0Q3NzU3R5bGUodmVbX2UtMV0sdmVbX2VdKTticmVhaztjYXNlIDY1OnRoaXMuJD1bdmVbX2VdXTticmVhaztjYXNlIDY2OnZlW19lLTJdLnB1c2godmVbX2VdKSx0aGlzLiQ9dmVbX2UtMl07YnJlYWs7Y2FzZSA2ODp0aGlzLiQ9dmVbX2UtMV0rdmVbX2VdO2JyZWFrfX0sImFub255bW91cyIpLHRhYmxlOlt7MzoxLDQ6Miw2OmUsOTpyLDExOm4sMTM6aX0sezE6WzNdfSx7Mzo4LDQ6Miw1OlsxLDddLDY6ZSw5OnIsMTE6biwxMzppfSx7NTpbMSw5XX0sezEwOlsxLDEwXX0sezEyOlsxLDExXX0sdChhLFsyLDZdKSx7MzoxMiw0OjIsNjplLDk6ciwxMTpuLDEzOml9LHsxOlsyLDJdfSx7NDoxNyw1OnMsNzoxMyw4OmwsOTpyLDExOm4sMTM6aSwxNDoxNCwxNToxNSwxNjoxNiwxNzoxOCwxODoxOSwxOToyMCwyMDoyMSwyMTp1LDIyOmgsMjM6ZiwyNDpkLDI1OjIzLDMzOjI1LDQxOnAsNDI6bSw0MzpnLDQ0OnksNDU6diw0Njp4LDU0OmIsNzI6dyw3NDpDLDc3OlQsODk6RSw5MDpBfSx0KGEsWzIsNF0pLHQoYSxbMiw1XSksezE6WzIsMV19LHs4OlsxLDQxXX0sezQ6MTcsNTpzLDc6NDIsODpsLDk6ciwxMTpuLDEzOmksMTQ6MTQsMTU6MTUsMTY6MTYsMTc6MTgsMTg6MTksMTk6MjAsMjA6MjEsMjE6dSwyMjpoLDIzOmYsMjQ6ZCwyNToyMywzMzoyNSw0MTpwLDQyOm0sNDM6Zyw0NDp5LDQ1OnYsNDY6eCw1NDpiLDcyOncsNzQ6Qyw3NzpULDg5OkUsOTA6QX0sezQ6MTcsNTpzLDc6NDMsODpsLDk6ciwxMTpuLDEzOmksMTQ6MTQsMTU6MTUsMTY6MTYsMTc6MTgsMTg6MTksMTk6MjAsMjA6MjEsMjE6dSwyMjpoLDIzOmYsMjQ6ZCwyNToyMywzMzoyNSw0MTpwLDQyOm0sNDM6Zyw0NDp5LDQ1OnYsNDY6eCw1NDpiLDcyOncsNzQ6Qyw3NzpULDg5OkUsOTA6QX0sezQ6MTcsNTpzLDc6NDQsODpsLDk6ciwxMTpuLDEzOmksMTQ6MTQsMTU6MTUsMTY6MTYsMTc6MTgsMTg6MTksMTk6MjAsMjA6MjEsMjE6dSwyMjpoLDIzOmYsMjQ6ZCwyNToyMywzMzoyNSw0MTpwLDQyOm0sNDM6Zyw0NDp5LDQ1OnYsNDY6eCw1NDpiLDcyOncsNzQ6Qyw3NzpULDg5OkUsOTA6QX0sezQ6MTcsNTpzLDc6NDUsODpsLDk6ciwxMTpuLDEzOmksMTQ6MTQsMTU6MTUsMTY6MTYsMTc6MTgsMTg6MTksMTk6MjAsMjA6MjEsMjE6dSwyMjpoLDIzOmYsMjQ6ZCwyNToyMywzMzoyNSw0MTpwLDQyOm0sNDM6Zyw0NDp5LDQ1OnYsNDY6eCw1NDpiLDcyOncsNzQ6Qyw3NzpULDg5OkUsOTA6QX0sezQ6MTcsNTpzLDc6NDYsODpsLDk6ciwxMTpuLDEzOmksMTQ6MTQsMTU6MTUsMTY6MTYsMTc6MTgsMTg6MTksMTk6MjAsMjA6MjEsMjE6dSwyMjpoLDIzOmYsMjQ6ZCwyNToyMywzMzoyNSw0MTpwLDQyOm0sNDM6Zyw0NDp5LDQ1OnYsNDY6eCw1NDpiLDcyOncsNzQ6Qyw3NzpULDg5OkUsOTA6QX0sezQ6MTcsNTpzLDc6NDcsODpsLDk6ciwxMTpuLDEzOmksMTQ6MTQsMTU6MTUsMTY6MTYsMTc6MTgsMTg6MTksMTk6MjAsMjA6MjEsMjE6dSwyMjpoLDIzOmYsMjQ6ZCwyNToyMywzMzoyNSw0MTpwLDQyOm0sNDM6Zyw0NDp5LDQ1OnYsNDY6eCw1NDpiLDcyOncsNzQ6Qyw3NzpULDg5OkUsOTA6QX0sezQ6MTcsNTpzLDc6NDgsODpsLDk6ciwxMTpuLDEzOmksMTQ6MTQsMTU6MTUsMTY6MTYsMTc6MTgsMTg6MTksMTk6MjAsMjA6MjEsMjE6dSwyMjpoLDIzOmYsMjQ6ZCwyNToyMywzMzoyNSw0MTpwLDQyOm0sNDM6Zyw0NDp5LDQ1OnYsNDY6eCw1NDpiLDcyOncsNzQ6Qyw3NzpULDg5OkUsOTA6QX0sezQ6MTcsNTpzLDc6NDksODpsLDk6ciwxMTpuLDEzOmksMTQ6MTQsMTU6MTUsMTY6MTYsMTc6MTgsMTg6MTksMTk6MjAsMjA6MjEsMjE6dSwyMjpoLDIzOmYsMjQ6ZCwyNToyMywzMzoyNSw0MTpwLDQyOm0sNDM6Zyw0NDp5LDQ1OnYsNDY6eCw1NDpiLDcyOncsNzQ6Qyw3NzpULDg5OkUsOTA6QX0sezQ6MTcsNTpzLDc6NTAsODpsLDk6ciwxMTpuLDEzOmksMTQ6MTQsMTU6MTUsMTY6MTYsMTc6MTgsMTg6MTksMTk6MjAsMjA6MjEsMjE6dSwyMjpoLDIzOmYsMjQ6ZCwyNToyMywzMzoyNSw0MTpwLDQyOm0sNDM6Zyw0NDp5LDQ1OnYsNDY6eCw1NDpiLDcyOncsNzQ6Qyw3NzpULDg5OkUsOTA6QX0sezI2OjUxLDg5OlsxLDUyXSw5MDpbMSw1M119LHs1NTo1NCw4OTpbMSw1NV0sOTA6WzEsNTZdfSx7Mjk6WzEsNTldLDYxOlsxLDU3XSw2MzpbMSw1OF19LHQoUyxbMiwxN10pLHQoUyxbMiwxOF0pLHQoUyxbMiwxOV0pLHQoUyxbMiwyMF0pLHszMDo2MCwzMzo2Miw3NTpfLDg5OkUsOTA6QX0sezMwOjYzLDMzOjYyLDc1Ol8sODk6RSw5MDpBfSx7MzA6NjQsMzM6NjIsNzU6Xyw4OTpFLDkwOkF9LHQoSSxbMiwyOV0pLHQoSSxbMiwzMF0pLHQoSSxbMiwzMV0pLHQoSSxbMiwzMl0pLHQoSSxbMiwzM10pLHQoSSxbMiwzNF0pLHQoRCxbMiw4MV0pLHQoRCxbMiw4Ml0pLHsxOlsyLDNdfSx7ODpbMiw4XX0sezg6WzIsOV19LHs4OlsyLDEwXX0sezg6WzIsMTFdfSx7ODpbMiwxMl19LHs4OlsyLDEzXX0sezg6WzIsMTRdfSx7ODpbMiwxNV19LHs4OlsyLDE2XX0sezI3OlsxLDY1XSwyOTpbMSw2Nl19LHQoayxbMiw3OV0pLHQoayxbMiw4MF0pLHsyNzpbMSw2N10sMjk6WzEsNjhdfSx0KGssWzIsODVdKSx0KGssWzIsODZdKSx7NjI6NjksNjU6TCw2NjpSLDY3Ok8sNjg6TSw2OTpCLDcwOkYsNzE6UH0sezYyOjc3LDY1OkwsNjY6Uiw2NzpPLDY4Ok0sNjk6Qiw3MDpGLDcxOlB9LHszMDo3OCwzMzo2Miw3NTpfLDg5OkUsOTA6QX0sezczOjc5LDc1OnosNzY6JCw3ODo4MSw3OTo4Miw4MDpILDgxOlEsODI6aiw4MzppZSw4NDpuZSw4NTpsZSw4NjpoZSw4NzpLLDg4Olh9LHQodGUsWzIsNjBdKSx0KHRlLFsyLDYyXSksezczOjkzLDc1OnosNzY6JCw3ODo4MSw3OTo4Miw4MDpILDgxOlEsODI6aiw4MzppZSw4NDpuZSw4NTpsZSw4NjpoZSw4NzpLLDg4Olh9LHszMDo5NCwzMzo2Miw3NTpfLDc2OiQsODk6RSw5MDpBfSx7NTpbMSw5NV19LHszMDo5NiwzMzo2Miw3NTpfLDg5OkUsOTA6QX0sezU6WzEsOTddfSx7MzA6OTgsMzM6NjIsNzU6Xyw4OTpFLDkwOkF9LHs2MzpbMSw5OV19LHQoSixbMiw1MF0pLHQoSixbMiw1MV0pLHQoSixbMiw1Ml0pLHQoSixbMiw1M10pLHQoSixbMiw1NF0pLHQoSixbMiw1NV0pLHQoSixbMiw1Nl0pLHs2NDpbMSwxMDBdfSx0KFMsWzIsNTldLHs3NjokfSksdChTLFsyLDY0XSx7NzY6c2V9KSx7MzM6MTAzLDc1OlsxLDEwMl0sODk6RSw5MDpBfSx0KHVlLFsyLDY1XSx7Nzk6MTA0LDc1OnosODA6SCw4MTpRLDgyOmosODM6aWUsODQ6bmUsODU6bGUsODY6aGUsODc6Syw4ODpYfSksdChaLFsyLDY3XSksdChaLFsyLDY5XSksdChaLFsyLDcwXSksdChaLFsyLDcxXSksdChaLFsyLDcyXSksdChaLFsyLDczXSksdChaLFsyLDc0XSksdChaLFsyLDc1XSksdChaLFsyLDc2XSksdChaLFsyLDc3XSksdChaLFsyLDc4XSksdChTLFsyLDU3XSx7NzY6c2V9KSx0KFMsWzIsNThdLHs3NjokfSksezU6U2UsMjg6MTA1LDMxOmNlLDM0OmFlLDM2Ok9lLDM4OmdlLDQwOnplfSx7Mjc6WzEsMTEyXSw3NjokfSx7NTpIZSw0MDokZSw1NjoxMTMsNTc6UmUsNTk6SWV9LHsyNzpbMSwxMThdLDc2OiR9LHszMzoxMTksODk6RSw5MDpBfSx7MzM6MTIwLDg5OkUsOTA6QX0sezc1OnosNzg6MTIxLDc5OjgyLDgwOkgsODE6USw4MjpqLDgzOmllLDg0Om5lLDg1OmxlLDg2OmhlLDg3OkssODg6WH0sdCh0ZSxbMiw2MV0pLHQodGUsWzIsNjNdKSx0KFosWzIsNjhdKSx0KFMsWzIsMjFdKSx7MzI6WzEsMTIyXX0sezMyOlsxLDEyM119LHszMjpbMSwxMjRdfSx7MzI6WzEsMTI1XX0sezU6U2UsMjg6MTI2LDMxOmNlLDM0OmFlLDM2Ok9lLDM4OmdlLDQwOnplfSx0KFMsWzIsMjhdKSx7NTpbMSwxMjddfSx0KFMsWzIsNDJdKSx7MzI6WzEsMTI4XX0sezMyOlsxLDEyOV19LHs1OkhlLDQwOiRlLDU2OjEzMCw1NzpSZSw1OTpJZX0sdChTLFsyLDQ3XSksezU6WzEsMTMxXX0sdChTLFsyLDQ4XSksdChTLFsyLDQ5XSksdCh1ZSxbMiw2Nl0sezc5OjEwNCw3NTp6LDgwOkgsODE6USw4MjpqLDgzOmllLDg0Om5lLDg1OmxlLDg2OmhlLDg3OkssODg6WH0pLHszMzoxMzIsODk6RSw5MDpBfSx7MzU6MTMzLDg5OlsxLDEzNF0sOTA6WzEsMTM1XX0sezM3OjEzNiw0NzpbMSwxMzddLDQ4OlsxLDEzOF0sNDk6WzEsMTM5XX0sezM5OjE0MCw1MDpbMSwxNDFdLDUxOlsxLDE0Ml0sNTI6WzEsMTQzXSw1MzpbMSwxNDRdfSx0KFMsWzIsMjddKSx7NTpTZSwyODoxNDUsMzE6Y2UsMzQ6YWUsMzY6T2UsMzg6Z2UsNDA6emV9LHs1ODoxNDYsODk6WzEsMTQ3XSw5MDpbMSwxNDhdfSx7NjA6MTQ5LDg5OlsxLDE1MF0sOTA6WzEsMTUxXX0sdChTLFsyLDQ2XSksezU6SGUsNDA6JGUsNTY6MTUyLDU3OlJlLDU5OkllfSx7NTpbMSwxNTNdfSx7NTpbMSwxNTRdfSx7NTpbMiw4M119LHs1OlsyLDg0XX0sezU6WzEsMTU1XX0sezU6WzIsMzVdfSx7NTpbMiwzNl19LHs1OlsyLDM3XX0sezU6WzEsMTU2XX0sezU6WzIsMzhdfSx7NTpbMiwzOV19LHs1OlsyLDQwXX0sezU6WzIsNDFdfSx0KFMsWzIsMjJdKSx7NTpbMSwxNTddfSx7NTpbMiw4N119LHs1OlsyLDg4XX0sezU6WzEsMTU4XX0sezU6WzIsODldfSx7NTpbMiw5MF19LHQoUyxbMiw0M10pLHs1OlNlLDI4OjE1OSwzMTpjZSwzNDphZSwzNjpPZSwzODpnZSw0MDp6ZX0sezU6U2UsMjg6MTYwLDMxOmNlLDM0OmFlLDM2Ok9lLDM4OmdlLDQwOnplfSx7NTpTZSwyODoxNjEsMzE6Y2UsMzQ6YWUsMzY6T2UsMzg6Z2UsNDA6emV9LHs1OlNlLDI4OjE2MiwzMTpjZSwzNDphZSwzNjpPZSwzODpnZSw0MDp6ZX0sezU6SGUsNDA6JGUsNTY6MTYzLDU3OlJlLDU5OkllfSx7NTpIZSw0MDokZSw1NjoxNjQsNTc6UmUsNTk6SWV9LHQoUyxbMiwyM10pLHQoUyxbMiwyNF0pLHQoUyxbMiwyNV0pLHQoUyxbMiwyNl0pLHQoUyxbMiw0NF0pLHQoUyxbMiw0NV0pXSxkZWZhdWx0QWN0aW9uczp7ODpbMiwyXSwxMjpbMiwxXSw0MTpbMiwzXSw0MjpbMiw4XSw0MzpbMiw5XSw0NDpbMiwxMF0sNDU6WzIsMTFdLDQ2OlsyLDEyXSw0NzpbMiwxM10sNDg6WzIsMTRdLDQ5OlsyLDE1XSw1MDpbMiwxNl0sMTM0OlsyLDgzXSwxMzU6WzIsODRdLDEzNzpbMiwzNV0sMTM4OlsyLDM2XSwxMzk6WzIsMzddLDE0MTpbMiwzOF0sMTQyOlsyLDM5XSwxNDM6WzIsNDBdLDE0NDpbMiw0MV0sMTQ3OlsyLDg3XSwxNDg6WzIsODhdLDE1MDpbMiw4OV0sMTUxOlsyLDkwXX0scGFyc2VFcnJvcjpvKGZ1bmN0aW9uKG9lLFYpe2lmKFYucmVjb3ZlcmFibGUpdGhpcy50cmFjZShvZSk7ZWxzZXt2YXIgeGU9bmV3IEVycm9yKG9lKTt0aHJvdyB4ZS5oYXNoPVYseGV9fSwicGFyc2VFcnJvciIpLHBhcnNlOm8oZnVuY3Rpb24ob2Upe3ZhciBWPXRoaXMseGU9WzBdLHE9W10scGU9W251bGxdLHZlPVtdLFBlPXRoaXMudGFibGUsX2U9IiIsd2U9MCxWZT0wLERlPTAscWU9MixhdD0xLFJ0PXZlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHN0PU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksVWU9e3l5Ont9fTtmb3IodmFyIGN0IGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksY3QpJiYoVWUueXlbY3RdPXRoaXMueXlbY3RdKTtzdC5zZXRJbnB1dChvZSxVZS55eSksVWUueXkubGV4ZXI9c3QsVWUueXkucGFyc2VyPXRoaXMsdHlwZW9mIHN0Lnl5bGxvYz4idSImJihzdC55eWxsb2M9e30pO3ZhciBXZT1zdC55eWxsb2M7dmUucHVzaChXZSk7dmFyIG90PXN0Lm9wdGlvbnMmJnN0Lm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBVZS55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1VZS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBZdChEcil7eGUubGVuZ3RoPXhlLmxlbmd0aC0yKkRyLHBlLmxlbmd0aD1wZS5sZW5ndGgtRHIsdmUubGVuZ3RoPXZlLmxlbmd0aC1Ecn1vKFl0LCJwb3BTdGFjayIpO2Z1bmN0aW9uIGJ0KCl7dmFyIERyO3JldHVybiBEcj1xLnBvcCgpfHxzdC5sZXgoKXx8YXQsdHlwZW9mIERyIT0ibnVtYmVyIiYmKERyIGluc3RhbmNlb2YgQXJyYXkmJihxPURyLERyPXEucG9wKCkpLERyPVYuc3ltYm9sc19bRHJdfHxEciksRHJ9byhidCwibGV4Iik7Zm9yKHZhciBNdCx4dCx1dCxFdCxmdCx5dCxudD17fSxkbixUdCxPbix0bjs7KXtpZih1dD14ZVt4ZS5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1t1dF0/RXQ9dGhpcy5kZWZhdWx0QWN0aW9uc1t1dF06KChNdD09PW51bGx8fHR5cGVvZiBNdD4idSIpJiYoTXQ9YnQoKSksRXQ9UGVbdXRdJiZQZVt1dF1bTXRdKSx0eXBlb2YgRXQ+InUifHwhRXQubGVuZ3RofHwhRXRbMF0pe3ZhciBfcj0iIjt0bj1bXTtmb3IoZG4gaW4gUGVbdXRdKXRoaXMudGVybWluYWxzX1tkbl0mJmRuPnFlJiZ0bi5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bZG5dKyInIik7c3Quc2hvd1Bvc2l0aW9uP19yPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKHdlKzEpK2A6CmArc3Quc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCt0bi5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW010XXx8TXQpKyInIjpfcj0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyh3ZSsxKSsiOiBVbmV4cGVjdGVkICIrKE10PT1hdD8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tNdF18fE10KSsiJyIpLHRoaXMucGFyc2VFcnJvcihfcix7dGV4dDpzdC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bTXRdfHxNdCxsaW5lOnN0Lnl5bGluZW5vLGxvYzpXZSxleHBlY3RlZDp0bn0pfWlmKEV0WzBdaW5zdGFuY2VvZiBBcnJheSYmRXQubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIit1dCsiLCB0b2tlbjogIitNdCk7c3dpdGNoKEV0WzBdKXtjYXNlIDE6eGUucHVzaChNdCkscGUucHVzaChzdC55eXRleHQpLHZlLnB1c2goc3QueXlsbG9jKSx4ZS5wdXNoKEV0WzFdKSxNdD1udWxsLHh0PyhNdD14dCx4dD1udWxsKTooVmU9c3QueXlsZW5nLF9lPXN0Lnl5dGV4dCx3ZT1zdC55eWxpbmVubyxXZT1zdC55eWxsb2MsRGU+MCYmRGUtLSk7YnJlYWs7Y2FzZSAyOmlmKFR0PXRoaXMucHJvZHVjdGlvbnNfW0V0WzFdXVsxXSxudC4kPXBlW3BlLmxlbmd0aC1UdF0sbnQuXyQ9e2ZpcnN0X2xpbmU6dmVbdmUubGVuZ3RoLShUdHx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOnZlW3ZlLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnZlW3ZlLmxlbmd0aC0oVHR8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dmVbdmUubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxvdCYmKG50Ll8kLnJhbmdlPVt2ZVt2ZS5sZW5ndGgtKFR0fHwxKV0ucmFuZ2VbMF0sdmVbdmUubGVuZ3RoLTFdLnJhbmdlWzFdXSkseXQ9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KG50LFtfZSxWZSx3ZSxVZS55eSxFdFsxXSxwZSx2ZV0uY29uY2F0KFJ0KSksdHlwZW9mIHl0PCJ1IilyZXR1cm4geXQ7VHQmJih4ZT14ZS5zbGljZSgwLC0xKlR0KjIpLHBlPXBlLnNsaWNlKDAsLTEqVHQpLHZlPXZlLnNsaWNlKDAsLTEqVHQpKSx4ZS5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW0V0WzFdXVswXSkscGUucHVzaChudC4kKSx2ZS5wdXNoKG50Ll8kKSxPbj1QZVt4ZVt4ZS5sZW5ndGgtMl1dW3hlW3hlLmxlbmd0aC0xXV0seGUucHVzaChPbik7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH0sInBhcnNlIil9LFc9ZnVuY3Rpb24oKXt2YXIgcmU9e0VPRjoxLHBhcnNlRXJyb3I6byhmdW5jdGlvbihWLHhlKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKFYseGUpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKFYpfSwicGFyc2VFcnJvciIpLHNldElucHV0Om8oZnVuY3Rpb24ob2UsVil7cmV0dXJuIHRoaXMueXk9Vnx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9b2UsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LCJzZXRJbnB1dCIpLGlucHV0Om8oZnVuY3Rpb24oKXt2YXIgb2U9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPW9lLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1vZSx0aGlzLm1hdGNoZWQrPW9lO3ZhciBWPW9lLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gVj8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksb2V9LCJpbnB1dCIpLHVucHV0Om8oZnVuY3Rpb24ob2Upe3ZhciBWPW9lLmxlbmd0aCx4ZT1vZS5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PW9lK3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1WKSx0aGlzLm9mZnNldC09Vjt2YXIgcT10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSx4ZS5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPXhlLmxlbmd0aC0xKTt2YXIgcGU9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnhlPyh4ZS5sZW5ndGg9PT1xLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrcVtxLmxlbmd0aC14ZS5sZW5ndGhdLmxlbmd0aC14ZVswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLVZ9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bcGVbMF0scGVbMF0rdGhpcy55eWxlbmctVl0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSwidW5wdXQiKSxtb3JlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSwibW9yZSIpLHJlamVjdDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSwicmVqZWN0IiksbGVzczpvKGZ1bmN0aW9uKG9lKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2Uob2UpKX0sImxlc3MiKSxwYXN0SW5wdXQ6byhmdW5jdGlvbigpe3ZhciBvZT10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKG9lLmxlbmd0aD4yMD8iLi4uIjoiIikrb2Uuc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LCJwYXN0SW5wdXQiKSx1cGNvbWluZ0lucHV0Om8oZnVuY3Rpb24oKXt2YXIgb2U9dGhpcy5tYXRjaDtyZXR1cm4gb2UubGVuZ3RoPDIwJiYob2UrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLW9lLmxlbmd0aCkpLChvZS5zdWJzdHIoMCwyMCkrKG9lLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSwidXBjb21pbmdJbnB1dCIpLHNob3dQb3NpdGlvbjpvKGZ1bmN0aW9uKCl7dmFyIG9lPXRoaXMucGFzdElucHV0KCksVj1uZXcgQXJyYXkob2UubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gb2UrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK1YrIl4ifSwic2hvd1Bvc2l0aW9uIiksdGVzdF9tYXRjaDpvKGZ1bmN0aW9uKG9lLFYpe3ZhciB4ZSxxLHBlO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihwZT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihwZS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxxPW9lWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxxJiYodGhpcy55eWxpbmVubys9cS5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpxP3FbcS5sZW5ndGgtMV0ubGVuZ3RoLXFbcS5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitvZVswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1vZVswXSx0aGlzLm1hdGNoKz1vZVswXSx0aGlzLm1hdGNoZXM9b2UsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2Uob2VbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPW9lWzBdLHhlPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLFYsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSkseGUpcmV0dXJuIHhlO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciB2ZSBpbiBwZSl0aGlzW3ZlXT1wZVt2ZV07cmV0dXJuITF9cmV0dXJuITF9LCJ0ZXN0X21hdGNoIiksbmV4dDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIG9lLFYseGUscTt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBwZT10aGlzLl9jdXJyZW50UnVsZXMoKSx2ZT0wO3ZlPHBlLmxlbmd0aDt2ZSsrKWlmKHhlPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbcGVbdmVdXSkseGUmJighVnx8eGVbMF0ubGVuZ3RoPlZbMF0ubGVuZ3RoKSl7aWYoVj14ZSxxPXZlLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKG9lPXRoaXMudGVzdF9tYXRjaCh4ZSxwZVt2ZV0pLG9lIT09ITEpcmV0dXJuIG9lO2lmKHRoaXMuX2JhY2t0cmFjayl7Vj0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBWPyhvZT10aGlzLnRlc3RfbWF0Y2goVixwZVtxXSksb2UhPT0hMT9vZTohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sIm5leHQiKSxsZXg6byhmdW5jdGlvbigpe3ZhciBWPXRoaXMubmV4dCgpO3JldHVybiBWfHx0aGlzLmxleCgpfSwibGV4IiksYmVnaW46byhmdW5jdGlvbihWKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goVil9LCJiZWdpbiIpLHBvcFN0YXRlOm8oZnVuY3Rpb24oKXt2YXIgVj10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBWPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSwicG9wU3RhdGUiKSxfY3VycmVudFJ1bGVzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSwiX2N1cnJlbnRSdWxlcyIpLHRvcFN0YXRlOm8oZnVuY3Rpb24oVil7cmV0dXJuIFY9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhWfHwwKSxWPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbVl06IklOSVRJQUwifSwidG9wU3RhdGUiKSxwdXNoU3RhdGU6byhmdW5jdGlvbihWKXt0aGlzLmJlZ2luKFYpfSwicHVzaFN0YXRlIiksc3RhdGVTdGFja1NpemU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sInN0YXRlU3RhY2tTaXplIiksb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24oVix4ZSxxLHBlKXt2YXIgdmU9cGU7c3dpdGNoKHEpe2Nhc2UgMDpyZXR1cm4idGl0bGUiO2Nhc2UgMTpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksOTticmVhaztjYXNlIDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjticmVhaztjYXNlIDM6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDExO2JyZWFrO2Nhc2UgNDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2JyZWFrO2Nhc2UgNTp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSA2OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDc6cmV0dXJuImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiO2Nhc2UgODpyZXR1cm4gMjE7Y2FzZSA5OnJldHVybiAyMjtjYXNlIDEwOnJldHVybiAyMztjYXNlIDExOnJldHVybiAyNDtjYXNlIDEyOnJldHVybiA1O2Nhc2UgMTM6YnJlYWs7Y2FzZSAxNDpicmVhaztjYXNlIDE1OmJyZWFrO2Nhc2UgMTY6cmV0dXJuIDg7Y2FzZSAxNzpyZXR1cm4gNjtjYXNlIDE4OnJldHVybiAyNztjYXNlIDE5OnJldHVybiA0MDtjYXNlIDIwOnJldHVybiAyOTtjYXNlIDIxOnJldHVybiAzMjtjYXNlIDIyOnJldHVybiAzMTtjYXNlIDIzOnJldHVybiAzNDtjYXNlIDI0OnJldHVybiAzNjtjYXNlIDI1OnJldHVybiAzODtjYXNlIDI2OnJldHVybiA0MTtjYXNlIDI3OnJldHVybiA0MjtjYXNlIDI4OnJldHVybiA0MztjYXNlIDI5OnJldHVybiA0NDtjYXNlIDMwOnJldHVybiA0NTtjYXNlIDMxOnJldHVybiA0NjtjYXNlIDMyOnJldHVybiA0NztjYXNlIDMzOnJldHVybiA0ODtjYXNlIDM0OnJldHVybiA0OTtjYXNlIDM1OnJldHVybiA1MDtjYXNlIDM2OnJldHVybiA1MTtjYXNlIDM3OnJldHVybiA1MjtjYXNlIDM4OnJldHVybiA1MztjYXNlIDM5OnJldHVybiA1NDtjYXNlIDQwOnJldHVybiA2NTtjYXNlIDQxOnJldHVybiA2NjtjYXNlIDQyOnJldHVybiA2NztjYXNlIDQzOnJldHVybiA2ODtjYXNlIDQ0OnJldHVybiA2OTtjYXNlIDQ1OnJldHVybiA3MDtjYXNlIDQ2OnJldHVybiA3MTtjYXNlIDQ3OnJldHVybiA1NztjYXNlIDQ4OnJldHVybiA1OTtjYXNlIDQ5OnJldHVybiB0aGlzLmJlZ2luKCJzdHlsZSIpLDc3O2JyZWFrO2Nhc2UgNTA6cmV0dXJuIDc1O2Nhc2UgNTE6cmV0dXJuIDgxO2Nhc2UgNTI6cmV0dXJuIDg4O2Nhc2UgNTM6cmV0dXJuIlBFUkNFTlQiO2Nhc2UgNTQ6cmV0dXJuIDg2O2Nhc2UgNTU6cmV0dXJuIDg0O2Nhc2UgNTY6YnJlYWs7Y2FzZSA1Nzp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDU4OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDU5OnJldHVybiB0aGlzLmJlZ2luKCJzdHlsZSIpLDcyO2JyZWFrO2Nhc2UgNjA6cmV0dXJuIHRoaXMuYmVnaW4oInN0eWxlIiksNzQ7YnJlYWs7Y2FzZSA2MTpyZXR1cm4gNjE7Y2FzZSA2MjpyZXR1cm4gNjQ7Y2FzZSA2MzpyZXR1cm4gNjM7Y2FzZSA2NDp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDY1OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDY2OnJldHVybiJxU3RyaW5nIjtjYXNlIDY3OnJldHVybiB4ZS55eXRleHQ9eGUueXl0ZXh0LnRyaW0oKSw4OTticmVhaztjYXNlIDY4OnJldHVybiA3NTtjYXNlIDY5OnJldHVybiA4MDtjYXNlIDcwOnJldHVybiA3Nn19LCJhbm9ueW1vdXMiKSxydWxlczpbL14oPzp0aXRsZVxzW14jXG47XSspL2ksL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrVEJbXlxuXSopL2ksL14oPzouKmRpcmVjdGlvblxzK0JUW15cbl0qKS9pLC9eKD86LipkaXJlY3Rpb25ccytSTFteXG5dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrTFJbXlxuXSopL2ksL14oPzooXHI/XG4pKykvaSwvXig/OlxzKykvaSwvXig/OiNbXlxuXSopL2ksL14oPzolW15cbl0qKS9pLC9eKD86JCkvaSwvXig/OnJlcXVpcmVtZW50RGlhZ3JhbVxiKS9pLC9eKD86XHspL2ksL14oPzpcfSkvaSwvXig/Ojp7M30pL2ksL14oPzo6KS9pLC9eKD86aWRcYikvaSwvXig/OnRleHRcYikvaSwvXig/OnJpc2tcYikvaSwvXig/OnZlcmlmeU1ldGhvZFxiKS9pLC9eKD86cmVxdWlyZW1lbnRcYikvaSwvXig/OmZ1bmN0aW9uYWxSZXF1aXJlbWVudFxiKS9pLC9eKD86aW50ZXJmYWNlUmVxdWlyZW1lbnRcYikvaSwvXig/OnBlcmZvcm1hbmNlUmVxdWlyZW1lbnRcYikvaSwvXig/OnBoeXNpY2FsUmVxdWlyZW1lbnRcYikvaSwvXig/OmRlc2lnbkNvbnN0cmFpbnRcYikvaSwvXig/Omxvd1xiKS9pLC9eKD86bWVkaXVtXGIpL2ksL14oPzpoaWdoXGIpL2ksL14oPzphbmFseXNpc1xiKS9pLC9eKD86ZGVtb25zdHJhdGlvblxiKS9pLC9eKD86aW5zcGVjdGlvblxiKS9pLC9eKD86dGVzdFxiKS9pLC9eKD86ZWxlbWVudFxiKS9pLC9eKD86Y29udGFpbnNcYikvaSwvXig/OmNvcGllc1xiKS9pLC9eKD86ZGVyaXZlc1xiKS9pLC9eKD86c2F0aXNmaWVzXGIpL2ksL14oPzp2ZXJpZmllc1xiKS9pLC9eKD86cmVmaW5lc1xiKS9pLC9eKD86dHJhY2VzXGIpL2ksL14oPzp0eXBlXGIpL2ksL14oPzpkb2NyZWZcYikvaSwvXig/OnN0eWxlXGIpL2ksL14oPzpcdyspL2ksL14oPzo6KS9pLC9eKD86OykvaSwvXig/OiUpL2ksL14oPzotKS9pLC9eKD86IykvaSwvXig/OiApL2ksL14oPzpbIl0pL2ksL14oPzpcbikvaSwvXig/OmNsYXNzRGVmXGIpL2ksL14oPzpjbGFzc1xiKS9pLC9eKD86PC0pL2ksL14oPzotPikvaSwvXig/Oi0pL2ksL14oPzpbIl0pL2ksL14oPzpbIl0pL2ksL14oPzpbXiJdKikvaSwvXig/Oltcd11bXjosXHJcblx7XDxcPlwtXD1dKikvaSwvXig/Olx3KykvaSwvXig/OlswLTldKykvaSwvXig/OiwpL2ldLGNvbmRpdGlvbnM6e2FjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOls2LDcsNjgsNjksNzBdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbNCw2OCw2OSw3MF0saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOlsyLDY4LDY5LDcwXSxpbmNsdXNpdmU6ITF9LHN0eWxlOntydWxlczpbNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNjgsNjksNzBdLGluY2x1c2l2ZTohMX0sdW5xU3RyaW5nOntydWxlczpbNjgsNjksNzBdLGluY2x1c2l2ZTohMX0sdG9rZW46e3J1bGVzOls2OCw2OSw3MF0saW5jbHVzaXZlOiExfSxzdHJpbmc6e3J1bGVzOls2NSw2Niw2OCw2OSw3MF0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDMsNSw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTksNjAsNjEsNjIsNjMsNjQsNjcsNjgsNjksNzBdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gcmV9KCk7YmUubGV4ZXI9VztmdW5jdGlvbiBkZSgpe3RoaXMueXk9e319cmV0dXJuIG8oZGUsIlBhcnNlciIpLGRlLnByb3RvdHlwZT1iZSxiZS5QYXJzZXI9ZGUsbmV3IGRlfSgpO0VPLnBhcnNlcj1FTztaaGU9RU99KTt2YXIgQTYsZWZlPU4oKCk9PnsidXNlIHN0cmljdCI7enQoKTt2dCgpO21pKCk7QTY9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnJlbGF0aW9ucz1bXTt0aGlzLmxhdGVzdFJlcXVpcmVtZW50PXRoaXMuZ2V0SW5pdGlhbFJlcXVpcmVtZW50KCk7dGhpcy5yZXF1aXJlbWVudHM9bmV3IE1hcDt0aGlzLmxhdGVzdEVsZW1lbnQ9dGhpcy5nZXRJbml0aWFsRWxlbWVudCgpO3RoaXMuZWxlbWVudHM9bmV3IE1hcDt0aGlzLmNsYXNzZXM9bmV3IE1hcDt0aGlzLmRpcmVjdGlvbj0iVEIiO3RoaXMuUmVxdWlyZW1lbnRUeXBlPXtSRVFVSVJFTUVOVDoiUmVxdWlyZW1lbnQiLEZVTkNUSU9OQUxfUkVRVUlSRU1FTlQ6IkZ1bmN0aW9uYWwgUmVxdWlyZW1lbnQiLElOVEVSRkFDRV9SRVFVSVJFTUVOVDoiSW50ZXJmYWNlIFJlcXVpcmVtZW50IixQRVJGT1JNQU5DRV9SRVFVSVJFTUVOVDoiUGVyZm9ybWFuY2UgUmVxdWlyZW1lbnQiLFBIWVNJQ0FMX1JFUVVJUkVNRU5UOiJQaHlzaWNhbCBSZXF1aXJlbWVudCIsREVTSUdOX0NPTlNUUkFJTlQ6IkRlc2lnbiBDb25zdHJhaW50In07dGhpcy5SaXNrTGV2ZWw9e0xPV19SSVNLOiJMb3ciLE1FRF9SSVNLOiJNZWRpdW0iLEhJR0hfUklTSzoiSGlnaCJ9O3RoaXMuVmVyaWZ5VHlwZT17VkVSSUZZX0FOQUxZU0lTOiJBbmFseXNpcyIsVkVSSUZZX0RFTU9OU1RSQVRJT046IkRlbW9uc3RyYXRpb24iLFZFUklGWV9JTlNQRUNUSU9OOiJJbnNwZWN0aW9uIixWRVJJRllfVEVTVDoiVGVzdCJ9O3RoaXMuUmVsYXRpb25zaGlwcz17Q09OVEFJTlM6ImNvbnRhaW5zIixDT1BJRVM6ImNvcGllcyIsREVSSVZFUzoiZGVyaXZlcyIsU0FUSVNGSUVTOiJzYXRpc2ZpZXMiLFZFUklGSUVTOiJ2ZXJpZmllcyIsUkVGSU5FUzoicmVmaW5lcyIsVFJBQ0VTOiJ0cmFjZXMifTt0aGlzLnNldEFjY1RpdGxlPUxyO3RoaXMuZ2V0QWNjVGl0bGU9UnI7dGhpcy5zZXRBY2NEZXNjcmlwdGlvbj1Ocjt0aGlzLmdldEFjY0Rlc2NyaXB0aW9uPU1yO3RoaXMuc2V0RGlhZ3JhbVRpdGxlPSRyO3RoaXMuZ2V0RGlhZ3JhbVRpdGxlPUlyO3RoaXMuZ2V0Q29uZmlnPW8oKCk9Pm1lKCkucmVxdWlyZW1lbnQsImdldENvbmZpZyIpO3RoaXMuY2xlYXIoKSx0aGlzLnNldERpcmVjdGlvbj10aGlzLnNldERpcmVjdGlvbi5iaW5kKHRoaXMpLHRoaXMuYWRkUmVxdWlyZW1lbnQ9dGhpcy5hZGRSZXF1aXJlbWVudC5iaW5kKHRoaXMpLHRoaXMuc2V0TmV3UmVxSWQ9dGhpcy5zZXROZXdSZXFJZC5iaW5kKHRoaXMpLHRoaXMuc2V0TmV3UmVxUmlzaz10aGlzLnNldE5ld1JlcVJpc2suYmluZCh0aGlzKSx0aGlzLnNldE5ld1JlcVRleHQ9dGhpcy5zZXROZXdSZXFUZXh0LmJpbmQodGhpcyksdGhpcy5zZXROZXdSZXFWZXJpZnlNZXRob2Q9dGhpcy5zZXROZXdSZXFWZXJpZnlNZXRob2QuYmluZCh0aGlzKSx0aGlzLmFkZEVsZW1lbnQ9dGhpcy5hZGRFbGVtZW50LmJpbmQodGhpcyksdGhpcy5zZXROZXdFbGVtZW50VHlwZT10aGlzLnNldE5ld0VsZW1lbnRUeXBlLmJpbmQodGhpcyksdGhpcy5zZXROZXdFbGVtZW50RG9jUmVmPXRoaXMuc2V0TmV3RWxlbWVudERvY1JlZi5iaW5kKHRoaXMpLHRoaXMuYWRkUmVsYXRpb25zaGlwPXRoaXMuYWRkUmVsYXRpb25zaGlwLmJpbmQodGhpcyksdGhpcy5zZXRDc3NTdHlsZT10aGlzLnNldENzc1N0eWxlLmJpbmQodGhpcyksdGhpcy5zZXRDbGFzcz10aGlzLnNldENsYXNzLmJpbmQodGhpcyksdGhpcy5kZWZpbmVDbGFzcz10aGlzLmRlZmluZUNsYXNzLmJpbmQodGhpcyksdGhpcy5zZXRBY2NUaXRsZT10aGlzLnNldEFjY1RpdGxlLmJpbmQodGhpcyksdGhpcy5zZXRBY2NEZXNjcmlwdGlvbj10aGlzLnNldEFjY0Rlc2NyaXB0aW9uLmJpbmQodGhpcyl9c3RhdGlje28odGhpcywiUmVxdWlyZW1lbnREQiIpfWdldERpcmVjdGlvbigpe3JldHVybiB0aGlzLmRpcmVjdGlvbn1zZXREaXJlY3Rpb24oZSl7dGhpcy5kaXJlY3Rpb249ZX1yZXNldExhdGVzdFJlcXVpcmVtZW50KCl7dGhpcy5sYXRlc3RSZXF1aXJlbWVudD10aGlzLmdldEluaXRpYWxSZXF1aXJlbWVudCgpfXJlc2V0TGF0ZXN0RWxlbWVudCgpe3RoaXMubGF0ZXN0RWxlbWVudD10aGlzLmdldEluaXRpYWxFbGVtZW50KCl9Z2V0SW5pdGlhbFJlcXVpcmVtZW50KCl7cmV0dXJue3JlcXVpcmVtZW50SWQ6IiIsdGV4dDoiIixyaXNrOiIiLHZlcmlmeU1ldGhvZDoiIixuYW1lOiIiLHR5cGU6IiIsY3NzU3R5bGVzOltdLGNsYXNzZXM6WyJkZWZhdWx0Il19fWdldEluaXRpYWxFbGVtZW50KCl7cmV0dXJue25hbWU6IiIsdHlwZToiIixkb2NSZWY6IiIsY3NzU3R5bGVzOltdLGNsYXNzZXM6WyJkZWZhdWx0Il19fWFkZFJlcXVpcmVtZW50KGUscil7cmV0dXJuIHRoaXMucmVxdWlyZW1lbnRzLmhhcyhlKXx8dGhpcy5yZXF1aXJlbWVudHMuc2V0KGUse25hbWU6ZSx0eXBlOnIscmVxdWlyZW1lbnRJZDp0aGlzLmxhdGVzdFJlcXVpcmVtZW50LnJlcXVpcmVtZW50SWQsdGV4dDp0aGlzLmxhdGVzdFJlcXVpcmVtZW50LnRleHQscmlzazp0aGlzLmxhdGVzdFJlcXVpcmVtZW50LnJpc2ssdmVyaWZ5TWV0aG9kOnRoaXMubGF0ZXN0UmVxdWlyZW1lbnQudmVyaWZ5TWV0aG9kLGNzc1N0eWxlczpbXSxjbGFzc2VzOlsiZGVmYXVsdCJdfSksdGhpcy5yZXNldExhdGVzdFJlcXVpcmVtZW50KCksdGhpcy5yZXF1aXJlbWVudHMuZ2V0KGUpfWdldFJlcXVpcmVtZW50cygpe3JldHVybiB0aGlzLnJlcXVpcmVtZW50c31zZXROZXdSZXFJZChlKXt0aGlzLmxhdGVzdFJlcXVpcmVtZW50IT09dm9pZCAwJiYodGhpcy5sYXRlc3RSZXF1aXJlbWVudC5yZXF1aXJlbWVudElkPWUpfXNldE5ld1JlcVRleHQoZSl7dGhpcy5sYXRlc3RSZXF1aXJlbWVudCE9PXZvaWQgMCYmKHRoaXMubGF0ZXN0UmVxdWlyZW1lbnQudGV4dD1lKX1zZXROZXdSZXFSaXNrKGUpe3RoaXMubGF0ZXN0UmVxdWlyZW1lbnQhPT12b2lkIDAmJih0aGlzLmxhdGVzdFJlcXVpcmVtZW50LnJpc2s9ZSl9c2V0TmV3UmVxVmVyaWZ5TWV0aG9kKGUpe3RoaXMubGF0ZXN0UmVxdWlyZW1lbnQhPT12b2lkIDAmJih0aGlzLmxhdGVzdFJlcXVpcmVtZW50LnZlcmlmeU1ldGhvZD1lKX1hZGRFbGVtZW50KGUpe3JldHVybiB0aGlzLmVsZW1lbnRzLmhhcyhlKXx8KHRoaXMuZWxlbWVudHMuc2V0KGUse25hbWU6ZSx0eXBlOnRoaXMubGF0ZXN0RWxlbWVudC50eXBlLGRvY1JlZjp0aGlzLmxhdGVzdEVsZW1lbnQuZG9jUmVmLGNzc1N0eWxlczpbXSxjbGFzc2VzOlsiZGVmYXVsdCJdfSksWS5pbmZvKCJBZGRlZCBuZXcgZWxlbWVudDogIixlKSksdGhpcy5yZXNldExhdGVzdEVsZW1lbnQoKSx0aGlzLmVsZW1lbnRzLmdldChlKX1nZXRFbGVtZW50cygpe3JldHVybiB0aGlzLmVsZW1lbnRzfXNldE5ld0VsZW1lbnRUeXBlKGUpe3RoaXMubGF0ZXN0RWxlbWVudCE9PXZvaWQgMCYmKHRoaXMubGF0ZXN0RWxlbWVudC50eXBlPWUpfXNldE5ld0VsZW1lbnREb2NSZWYoZSl7dGhpcy5sYXRlc3RFbGVtZW50IT09dm9pZCAwJiYodGhpcy5sYXRlc3RFbGVtZW50LmRvY1JlZj1lKX1hZGRSZWxhdGlvbnNoaXAoZSxyLG4pe3RoaXMucmVsYXRpb25zLnB1c2goe3R5cGU6ZSxzcmM6cixkc3Q6bn0pfWdldFJlbGF0aW9uc2hpcHMoKXtyZXR1cm4gdGhpcy5yZWxhdGlvbnN9Y2xlYXIoKXt0aGlzLnJlbGF0aW9ucz1bXSx0aGlzLnJlc2V0TGF0ZXN0UmVxdWlyZW1lbnQoKSx0aGlzLnJlcXVpcmVtZW50cz1uZXcgTWFwLHRoaXMucmVzZXRMYXRlc3RFbGVtZW50KCksdGhpcy5lbGVtZW50cz1uZXcgTWFwLHRoaXMuY2xhc3Nlcz1uZXcgTWFwLEFyKCl9c2V0Q3NzU3R5bGUoZSxyKXtmb3IobGV0IG4gb2YgZSl7bGV0IGk9dGhpcy5yZXF1aXJlbWVudHMuZ2V0KG4pPz90aGlzLmVsZW1lbnRzLmdldChuKTtpZighcnx8IWkpcmV0dXJuO2ZvcihsZXQgYSBvZiByKWEuaW5jbHVkZXMoIiwiKT9pLmNzc1N0eWxlcy5wdXNoKC4uLmEuc3BsaXQoIiwiKSk6aS5jc3NTdHlsZXMucHVzaChhKX19c2V0Q2xhc3MoZSxyKXtmb3IobGV0IG4gb2YgZSl7bGV0IGk9dGhpcy5yZXF1aXJlbWVudHMuZ2V0KG4pPz90aGlzLmVsZW1lbnRzLmdldChuKTtpZihpKWZvcihsZXQgYSBvZiByKXtpLmNsYXNzZXMucHVzaChhKTtsZXQgcz10aGlzLmNsYXNzZXMuZ2V0KGEpPy5zdHlsZXM7cyYmaS5jc3NTdHlsZXMucHVzaCguLi5zKX19fWRlZmluZUNsYXNzKGUscil7Zm9yKGxldCBuIG9mIGUpe2xldCBpPXRoaXMuY2xhc3Nlcy5nZXQobik7aT09PXZvaWQgMCYmKGk9e2lkOm4sc3R5bGVzOltdLHRleHRTdHlsZXM6W119LHRoaXMuY2xhc3Nlcy5zZXQobixpKSksciYmci5mb3JFYWNoKGZ1bmN0aW9uKGEpe2lmKC9jb2xvci8uZXhlYyhhKSl7bGV0IHM9YS5yZXBsYWNlKCJmaWxsIiwiYmdGaWxsIik7aS50ZXh0U3R5bGVzLnB1c2gocyl9aS5zdHlsZXMucHVzaChhKX0pLHRoaXMucmVxdWlyZW1lbnRzLmZvckVhY2goYT0+e2EuY2xhc3Nlcy5pbmNsdWRlcyhuKSYmYS5jc3NTdHlsZXMucHVzaCguLi5yLmZsYXRNYXAocz0+cy5zcGxpdCgiLCIpKSl9KSx0aGlzLmVsZW1lbnRzLmZvckVhY2goYT0+e2EuY2xhc3Nlcy5pbmNsdWRlcyhuKSYmYS5jc3NTdHlsZXMucHVzaCguLi5yLmZsYXRNYXAocz0+cy5zcGxpdCgiLCIpKSl9KX19Z2V0Q2xhc3Nlcygpe3JldHVybiB0aGlzLmNsYXNzZXN9Z2V0RGF0YSgpe2xldCBlPW1lKCkscj1bXSxuPVtdO2ZvcihsZXQgaSBvZiB0aGlzLnJlcXVpcmVtZW50cy52YWx1ZXMoKSl7bGV0IGE9aTthLmlkPWkubmFtZSxhLmNzc1N0eWxlcz1pLmNzc1N0eWxlcyxhLmNzc0NsYXNzZXM9aS5jbGFzc2VzLmpvaW4oIiAiKSxhLnNoYXBlPSJyZXF1aXJlbWVudEJveCIsYS5sb29rPWUubG9vayxyLnB1c2goYSl9Zm9yKGxldCBpIG9mIHRoaXMuZWxlbWVudHMudmFsdWVzKCkpe2xldCBhPWk7YS5zaGFwZT0icmVxdWlyZW1lbnRCb3giLGEubG9vaz1lLmxvb2ssYS5pZD1pLm5hbWUsYS5jc3NTdHlsZXM9aS5jc3NTdHlsZXMsYS5jc3NDbGFzc2VzPWkuY2xhc3Nlcy5qb2luKCIgIiksci5wdXNoKGEpfWZvcihsZXQgaSBvZiB0aGlzLnJlbGF0aW9ucyl7bGV0IGE9MCxzPWkudHlwZT09PXRoaXMuUmVsYXRpb25zaGlwcy5DT05UQUlOUyxsPXtpZDpgJHtpLnNyY30tJHtpLmRzdH0tJHthfWAsc3RhcnQ6dGhpcy5yZXF1aXJlbWVudHMuZ2V0KGkuc3JjKT8ubmFtZT8/dGhpcy5lbGVtZW50cy5nZXQoaS5zcmMpPy5uYW1lLGVuZDp0aGlzLnJlcXVpcmVtZW50cy5nZXQoaS5kc3QpPy5uYW1lPz90aGlzLmVsZW1lbnRzLmdldChpLmRzdCk/Lm5hbWUsbGFiZWw6YCZsdDsmbHQ7JHtpLnR5cGV9Jmd0OyZndDtgLGNsYXNzZXM6InJlbGF0aW9uc2hpcExpbmUiLHN0eWxlOlsiZmlsbDpub25lIixzPyIiOiJzdHJva2UtZGFzaGFycmF5OiAxMCw3Il0sbGFiZWxwb3M6ImMiLHRoaWNrbmVzczoibm9ybWFsIix0eXBlOiJub3JtYWwiLHBhdHRlcm46cz8ibm9ybWFsIjoiZGFzaGVkIixhcnJvd1R5cGVTdGFydDpzPyJyZXF1aXJlbWVudF9jb250YWlucyI6IiIsYXJyb3dUeXBlRW5kOnM/IiI6InJlcXVpcmVtZW50X2Fycm93Iixsb29rOmUubG9va307bi5wdXNoKGwpLGErK31yZXR1cm57bm9kZXM6cixlZGdlczpuLG90aGVyOnt9LGNvbmZpZzplLGRpcmVjdGlvbjp0aGlzLmdldERpcmVjdGlvbigpfX19fSk7dmFyIFpHZSx0ZmUscmZlPU4oKCk9PnsidXNlIHN0cmljdCI7WkdlPW8odD0+YAoKICBtYXJrZXIgewogICAgZmlsbDogJHt0LnJlbGF0aW9uQ29sb3J9OwogICAgc3Ryb2tlOiAke3QucmVsYXRpb25Db2xvcn07CiAgfQoKICBtYXJrZXIuY3Jvc3MgewogICAgc3Ryb2tlOiAke3QubGluZUNvbG9yfTsKICB9CgogIHN2ZyB7CiAgICBmb250LWZhbWlseTogJHt0LmZvbnRGYW1pbHl9OwogICAgZm9udC1zaXplOiAke3QuZm9udFNpemV9OwogIH0KCiAgLnJlcUJveCB7CiAgICBmaWxsOiAke3QucmVxdWlyZW1lbnRCYWNrZ3JvdW5kfTsKICAgIGZpbGwtb3BhY2l0eTogMS4wOwogICAgc3Ryb2tlOiAke3QucmVxdWlyZW1lbnRCb3JkZXJDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6ICR7dC5yZXF1aXJlbWVudEJvcmRlclNpemV9OwogIH0KICAKICAucmVxVGl0bGUsIC5yZXFMYWJlbHsKICAgIGZpbGw6ICAke3QucmVxdWlyZW1lbnRUZXh0Q29sb3J9OwogIH0KICAucmVxTGFiZWxCb3ggewogICAgZmlsbDogJHt0LnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kfTsKICAgIGZpbGwtb3BhY2l0eTogMS4wOwogIH0KCiAgLnJlcS10aXRsZS1saW5lIHsKICAgIHN0cm9rZTogJHt0LnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAke3QucmVxdWlyZW1lbnRCb3JkZXJTaXplfTsKICB9CiAgLnJlbGF0aW9uc2hpcExpbmUgewogICAgc3Ryb2tlOiAke3QucmVsYXRpb25Db2xvcn07CiAgICBzdHJva2Utd2lkdGg6IDE7CiAgfQogIC5yZWxhdGlvbnNoaXBMYWJlbCB7CiAgICBmaWxsOiAke3QucmVsYXRpb25MYWJlbENvbG9yfTsKICB9CiAgLmRpdmlkZXIgewogICAgc3Ryb2tlOiAke3Qubm9kZUJvcmRlcn07CiAgICBzdHJva2Utd2lkdGg6IDE7CiAgfQogIC5sYWJlbCB7CiAgICBmb250LWZhbWlseTogJHt0LmZvbnRGYW1pbHl9OwogICAgY29sb3I6ICR7dC5ub2RlVGV4dENvbG9yfHx0LnRleHRDb2xvcn07CiAgfQogIC5sYWJlbCB0ZXh0LHNwYW4gewogICAgZmlsbDogJHt0Lm5vZGVUZXh0Q29sb3J8fHQudGV4dENvbG9yfTsKICAgIGNvbG9yOiAke3Qubm9kZVRleHRDb2xvcnx8dC50ZXh0Q29sb3J9OwogIH0KICAubGFiZWxCa2cgewogICAgYmFja2dyb3VuZC1jb2xvcjogJHt0LmVkZ2VMYWJlbEJhY2tncm91bmR9OwogIH0KCmAsImdldFN0eWxlcyIpLHRmZT1aR2V9KTt2YXIgU089e307aHIoU08se2RyYXc6KCk9PkpHZX0pO3ZhciBKR2UsbmZlPU4oKCk9PnsidXNlIHN0cmljdCI7enQoKTt2dCgpO2dtKCk7WWQoKTskbSgpO2lyKCk7SkdlPW8oYXN5bmMgZnVuY3Rpb24odCxlLHIsbil7WS5pbmZvKCJSRUYwOiIpLFkuaW5mbygiRHJhd2luZyByZXF1aXJlbWVudCBkaWFncmFtICh1bmlmaWVkKSIsZSk7bGV0e3NlY3VyaXR5TGV2ZWw6aSxzdGF0ZTphLGxheW91dDpzfT1tZSgpLGw9bi5kYi5nZXREYXRhKCksdT15YyhlLGkpO2wudHlwZT1uLnR5cGUsbC5sYXlvdXRBbGdvcml0aG09bmYocyksbC5ub2RlU3BhY2luZz1hPy5ub2RlU3BhY2luZz8/NTAsbC5yYW5rU3BhY2luZz1hPy5yYW5rU3BhY2luZz8/NTAsbC5tYXJrZXJzPVsicmVxdWlyZW1lbnRfY29udGFpbnMiLCJyZXF1aXJlbWVudF9hcnJvdyJdLGwuZGlhZ3JhbUlkPWUsYXdhaXQgQ2MobCx1KTtsZXQgaD04O0d0Lmluc2VydFRpdGxlKHUsInJlcXVpcmVtZW50RGlhZ3JhbVRpdGxlVGV4dCIsYT8udGl0bGVUb3BNYXJnaW4/PzI1LG4uZGIuZ2V0RGlhZ3JhbVRpdGxlKCkpLEFjKHUsaCwicmVxdWlyZW1lbnREaWFncmFtIixhPy51c2VNYXhXaWR0aD8/ITApfSwiZHJhdyIpfSk7dmFyIGlmZT17fTtocihpZmUse2RpYWdyYW06KCk9PmVWZX0pO3ZhciBlVmUsYWZlPU4oKCk9PnsidXNlIHN0cmljdCI7SmhlKCk7ZWZlKCk7cmZlKCk7bmZlKCk7ZVZlPXtwYXJzZXI6WmhlLGdldCBkYigpe3JldHVybiBuZXcgQTZ9LHJlbmRlcmVyOlNPLHN0eWxlczp0ZmV9fSk7dmFyIENPLGxmZSxjZmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtDTz1mdW5jdGlvbigpe3ZhciB0PW8oZnVuY3Rpb24oSyxYLHRlLEope2Zvcih0ZT10ZXx8e30sSj1LLmxlbmd0aDtKLS07dGVbS1tKXV09WCk7cmV0dXJuIHRlfSwibyIpLGU9WzEsMl0scj1bMSwzXSxuPVsxLDRdLGk9WzIsNF0sYT1bMSw5XSxzPVsxLDExXSxsPVsxLDEzXSx1PVsxLDE0XSxoPVsxLDE2XSxmPVsxLDE3XSxkPVsxLDE4XSxwPVsxLDI0XSxtPVsxLDI1XSxnPVsxLDI2XSx5PVsxLDI3XSx2PVsxLDI4XSx4PVsxLDI5XSxiPVsxLDMwXSx3PVsxLDMxXSxDPVsxLDMyXSxUPVsxLDMzXSxFPVsxLDM0XSxBPVsxLDM1XSxTPVsxLDM2XSxfPVsxLDM3XSxJPVsxLDM4XSxEPVsxLDM5XSxrPVsxLDQxXSxMPVsxLDQyXSxSPVsxLDQzXSxPPVsxLDQ0XSxNPVsxLDQ1XSxCPVsxLDQ2XSxGPVsxLDQsNSwxMywxNCwxNiwxOCwyMSwyMywyOSwzMCwzMSwzMywzNSwzNiwzNywzOCwzOSw0MSw0Myw0NCw0Niw0Nyw0OCw0OSw1MCw1Miw1Myw1NCw1OSw2MCw2MSw2Miw3MF0sUD1bNCw1LDE2LDUwLDUyLDUzXSx6PVs0LDUsMTMsMTQsMTYsMTgsMjEsMjMsMjksMzAsMzEsMzMsMzUsMzYsMzcsMzgsMzksNDEsNDMsNDQsNDYsNTAsNTIsNTMsNTQsNTksNjAsNjEsNjIsNzBdLCQ9WzQsNSwxMywxNCwxNiwxOCwyMSwyMywyOSwzMCwzMSwzMywzNSwzNiwzNywzOCwzOSw0MSw0Myw0NCw0Niw0OSw1MCw1Miw1Myw1NCw1OSw2MCw2MSw2Miw3MF0sSD1bNCw1LDEzLDE0LDE2LDE4LDIxLDIzLDI5LDMwLDMxLDMzLDM1LDM2LDM3LDM4LDM5LDQxLDQzLDQ0LDQ2LDQ4LDUwLDUyLDUzLDU0LDU5LDYwLDYxLDYyLDcwXSxRPVs0LDUsMTMsMTQsMTYsMTgsMjEsMjMsMjksMzAsMzEsMzMsMzUsMzYsMzcsMzgsMzksNDEsNDMsNDQsNDYsNDcsNTAsNTIsNTMsNTQsNTksNjAsNjEsNjIsNzBdLGo9WzY4LDY5LDcwXSxpZT1bMSwxMjJdLG5lPXt0cmFjZTpvKGZ1bmN0aW9uKCl7fSwidHJhY2UiKSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLFNQQUNFOjQsTkVXTElORTo1LFNEOjYsZG9jdW1lbnQ6NyxsaW5lOjgsc3RhdGVtZW50OjksYm94X3NlY3Rpb246MTAsYm94X2xpbmU6MTEscGFydGljaXBhbnRfc3RhdGVtZW50OjEyLGNyZWF0ZToxMyxib3g6MTQscmVzdE9mTGluZToxNSxlbmQ6MTYsc2lnbmFsOjE3LGF1dG9udW1iZXI6MTgsTlVNOjE5LG9mZjoyMCxhY3RpdmF0ZToyMSxhY3RvcjoyMixkZWFjdGl2YXRlOjIzLG5vdGVfc3RhdGVtZW50OjI0LGxpbmtzX3N0YXRlbWVudDoyNSxsaW5rX3N0YXRlbWVudDoyNixwcm9wZXJ0aWVzX3N0YXRlbWVudDoyNyxkZXRhaWxzX3N0YXRlbWVudDoyOCx0aXRsZToyOSxsZWdhY3lfdGl0bGU6MzAsYWNjX3RpdGxlOjMxLGFjY190aXRsZV92YWx1ZTozMixhY2NfZGVzY3I6MzMsYWNjX2Rlc2NyX3ZhbHVlOjM0LGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6MzUsbG9vcDozNixyZWN0OjM3LG9wdDozOCxhbHQ6MzksZWxzZV9zZWN0aW9uczo0MCxwYXI6NDEscGFyX3NlY3Rpb25zOjQyLHBhcl9vdmVyOjQzLGNyaXRpY2FsOjQ0LG9wdGlvbl9zZWN0aW9uczo0NSxicmVhazo0NixvcHRpb246NDcsYW5kOjQ4LGVsc2U6NDkscGFydGljaXBhbnQ6NTAsQVM6NTEscGFydGljaXBhbnRfYWN0b3I6NTIsZGVzdHJveTo1Myxub3RlOjU0LHBsYWNlbWVudDo1NSx0ZXh0Mjo1NixvdmVyOjU3LGFjdG9yX3BhaXI6NTgsbGlua3M6NTksbGluazo2MCxwcm9wZXJ0aWVzOjYxLGRldGFpbHM6NjIsc3BhY2VMaXN0OjYzLCIsIjo2NCxsZWZ0X29mOjY1LHJpZ2h0X29mOjY2LHNpZ25hbHR5cGU6NjcsIisiOjY4LCItIjo2OSxBQ1RPUjo3MCxTT0xJRF9PUEVOX0FSUk9XOjcxLERPVFRFRF9PUEVOX0FSUk9XOjcyLFNPTElEX0FSUk9XOjczLEJJRElSRUNUSU9OQUxfU09MSURfQVJST1c6NzQsRE9UVEVEX0FSUk9XOjc1LEJJRElSRUNUSU9OQUxfRE9UVEVEX0FSUk9XOjc2LFNPTElEX0NST1NTOjc3LERPVFRFRF9DUk9TUzo3OCxTT0xJRF9QT0lOVDo3OSxET1RURURfUE9JTlQ6ODAsVFhUOjgxLCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw0OiJTUEFDRSIsNToiTkVXTElORSIsNjoiU0QiLDEzOiJjcmVhdGUiLDE0OiJib3giLDE1OiJyZXN0T2ZMaW5lIiwxNjoiZW5kIiwxODoiYXV0b251bWJlciIsMTk6Ik5VTSIsMjA6Im9mZiIsMjE6ImFjdGl2YXRlIiwyMzoiZGVhY3RpdmF0ZSIsMjk6InRpdGxlIiwzMDoibGVnYWN5X3RpdGxlIiwzMToiYWNjX3RpdGxlIiwzMjoiYWNjX3RpdGxlX3ZhbHVlIiwzMzoiYWNjX2Rlc2NyIiwzNDoiYWNjX2Rlc2NyX3ZhbHVlIiwzNToiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMzY6Imxvb3AiLDM3OiJyZWN0IiwzODoib3B0IiwzOToiYWx0Iiw0MToicGFyIiw0MzoicGFyX292ZXIiLDQ0OiJjcml0aWNhbCIsNDY6ImJyZWFrIiw0Nzoib3B0aW9uIiw0ODoiYW5kIiw0OToiZWxzZSIsNTA6InBhcnRpY2lwYW50Iiw1MToiQVMiLDUyOiJwYXJ0aWNpcGFudF9hY3RvciIsNTM6ImRlc3Ryb3kiLDU0OiJub3RlIiw1Nzoib3ZlciIsNTk6ImxpbmtzIiw2MDoibGluayIsNjE6InByb3BlcnRpZXMiLDYyOiJkZXRhaWxzIiw2NDoiLCIsNjU6ImxlZnRfb2YiLDY2OiJyaWdodF9vZiIsNjg6IisiLDY5OiItIiw3MDoiQUNUT1IiLDcxOiJTT0xJRF9PUEVOX0FSUk9XIiw3MjoiRE9UVEVEX09QRU5fQVJST1ciLDczOiJTT0xJRF9BUlJPVyIsNzQ6IkJJRElSRUNUSU9OQUxfU09MSURfQVJST1ciLDc1OiJET1RURURfQVJST1ciLDc2OiJCSURJUkVDVElPTkFMX0RPVFRFRF9BUlJPVyIsNzc6IlNPTElEX0NST1NTIiw3ODoiRE9UVEVEX0NST1NTIiw3OToiU09MSURfUE9JTlQiLDgwOiJET1RURURfUE9JTlQiLDgxOiJUWFQifSxwcm9kdWN0aW9uc186WzAsWzMsMl0sWzMsMl0sWzMsMl0sWzcsMF0sWzcsMl0sWzgsMl0sWzgsMV0sWzgsMV0sWzEwLDBdLFsxMCwyXSxbMTEsMl0sWzExLDFdLFsxMSwxXSxbOSwxXSxbOSwyXSxbOSw0XSxbOSwyXSxbOSw0XSxbOSwzXSxbOSwzXSxbOSwyXSxbOSwzXSxbOSwzXSxbOSwyXSxbOSwyXSxbOSwyXSxbOSwyXSxbOSwyXSxbOSwxXSxbOSwxXSxbOSwyXSxbOSwyXSxbOSwxXSxbOSw0XSxbOSw0XSxbOSw0XSxbOSw0XSxbOSw0XSxbOSw0XSxbOSw0XSxbOSw0XSxbNDUsMV0sWzQ1LDRdLFs0MiwxXSxbNDIsNF0sWzQwLDFdLFs0MCw0XSxbMTIsNV0sWzEyLDNdLFsxMiw1XSxbMTIsM10sWzEyLDNdLFsyNCw0XSxbMjQsNF0sWzI1LDNdLFsyNiwzXSxbMjcsM10sWzI4LDNdLFs2MywyXSxbNjMsMV0sWzU4LDNdLFs1OCwxXSxbNTUsMV0sWzU1LDFdLFsxNyw1XSxbMTcsNV0sWzE3LDRdLFsyMiwxXSxbNjcsMV0sWzY3LDFdLFs2NywxXSxbNjcsMV0sWzY3LDFdLFs2NywxXSxbNjcsMV0sWzY3LDFdLFs2NywxXSxbNjcsMV0sWzU2LDFdXSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24oWCx0ZSxKLHNlLHVlLFosU2Upe3ZhciBjZT1aLmxlbmd0aC0xO3N3aXRjaCh1ZSl7Y2FzZSAzOnJldHVybiBzZS5hcHBseShaW2NlXSksWltjZV07YnJlYWs7Y2FzZSA0OmNhc2UgOTp0aGlzLiQ9W107YnJlYWs7Y2FzZSA1OmNhc2UgMTA6WltjZS0xXS5wdXNoKFpbY2VdKSx0aGlzLiQ9WltjZS0xXTticmVhaztjYXNlIDY6Y2FzZSA3OmNhc2UgMTE6Y2FzZSAxMjp0aGlzLiQ9WltjZV07YnJlYWs7Y2FzZSA4OmNhc2UgMTM6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMTU6WltjZV0udHlwZT0iY3JlYXRlUGFydGljaXBhbnQiLHRoaXMuJD1aW2NlXTticmVhaztjYXNlIDE2OlpbY2UtMV0udW5zaGlmdCh7dHlwZToiYm94U3RhcnQiLGJveERhdGE6c2UucGFyc2VCb3hEYXRhKFpbY2UtMl0pfSksWltjZS0xXS5wdXNoKHt0eXBlOiJib3hFbmQiLGJveFRleHQ6WltjZS0yXX0pLHRoaXMuJD1aW2NlLTFdO2JyZWFrO2Nhc2UgMTg6dGhpcy4kPXt0eXBlOiJzZXF1ZW5jZUluZGV4IixzZXF1ZW5jZUluZGV4Ok51bWJlcihaW2NlLTJdKSxzZXF1ZW5jZUluZGV4U3RlcDpOdW1iZXIoWltjZS0xXSksc2VxdWVuY2VWaXNpYmxlOiEwLHNpZ25hbFR5cGU6c2UuTElORVRZUEUuQVVUT05VTUJFUn07YnJlYWs7Y2FzZSAxOTp0aGlzLiQ9e3R5cGU6InNlcXVlbmNlSW5kZXgiLHNlcXVlbmNlSW5kZXg6TnVtYmVyKFpbY2UtMV0pLHNlcXVlbmNlSW5kZXhTdGVwOjEsc2VxdWVuY2VWaXNpYmxlOiEwLHNpZ25hbFR5cGU6c2UuTElORVRZUEUuQVVUT05VTUJFUn07YnJlYWs7Y2FzZSAyMDp0aGlzLiQ9e3R5cGU6InNlcXVlbmNlSW5kZXgiLHNlcXVlbmNlVmlzaWJsZTohMSxzaWduYWxUeXBlOnNlLkxJTkVUWVBFLkFVVE9OVU1CRVJ9O2JyZWFrO2Nhc2UgMjE6dGhpcy4kPXt0eXBlOiJzZXF1ZW5jZUluZGV4IixzZXF1ZW5jZVZpc2libGU6ITAsc2lnbmFsVHlwZTpzZS5MSU5FVFlQRS5BVVRPTlVNQkVSfTticmVhaztjYXNlIDIyOnRoaXMuJD17dHlwZToiYWN0aXZlU3RhcnQiLHNpZ25hbFR5cGU6c2UuTElORVRZUEUuQUNUSVZFX1NUQVJULGFjdG9yOlpbY2UtMV0uYWN0b3J9O2JyZWFrO2Nhc2UgMjM6dGhpcy4kPXt0eXBlOiJhY3RpdmVFbmQiLHNpZ25hbFR5cGU6c2UuTElORVRZUEUuQUNUSVZFX0VORCxhY3RvcjpaW2NlLTFdLmFjdG9yfTticmVhaztjYXNlIDI5OnNlLnNldERpYWdyYW1UaXRsZShaW2NlXS5zdWJzdHJpbmcoNikpLHRoaXMuJD1aW2NlXS5zdWJzdHJpbmcoNik7YnJlYWs7Y2FzZSAzMDpzZS5zZXREaWFncmFtVGl0bGUoWltjZV0uc3Vic3RyaW5nKDcpKSx0aGlzLiQ9WltjZV0uc3Vic3RyaW5nKDcpO2JyZWFrO2Nhc2UgMzE6dGhpcy4kPVpbY2VdLnRyaW0oKSxzZS5zZXRBY2NUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMzI6Y2FzZSAzMzp0aGlzLiQ9WltjZV0udHJpbSgpLHNlLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAzNDpaW2NlLTFdLnVuc2hpZnQoe3R5cGU6Imxvb3BTdGFydCIsbG9vcFRleHQ6c2UucGFyc2VNZXNzYWdlKFpbY2UtMl0pLHNpZ25hbFR5cGU6c2UuTElORVRZUEUuTE9PUF9TVEFSVH0pLFpbY2UtMV0ucHVzaCh7dHlwZToibG9vcEVuZCIsbG9vcFRleHQ6WltjZS0yXSxzaWduYWxUeXBlOnNlLkxJTkVUWVBFLkxPT1BfRU5EfSksdGhpcy4kPVpbY2UtMV07YnJlYWs7Y2FzZSAzNTpaW2NlLTFdLnVuc2hpZnQoe3R5cGU6InJlY3RTdGFydCIsY29sb3I6c2UucGFyc2VNZXNzYWdlKFpbY2UtMl0pLHNpZ25hbFR5cGU6c2UuTElORVRZUEUuUkVDVF9TVEFSVH0pLFpbY2UtMV0ucHVzaCh7dHlwZToicmVjdEVuZCIsY29sb3I6c2UucGFyc2VNZXNzYWdlKFpbY2UtMl0pLHNpZ25hbFR5cGU6c2UuTElORVRZUEUuUkVDVF9FTkR9KSx0aGlzLiQ9WltjZS0xXTticmVhaztjYXNlIDM2OlpbY2UtMV0udW5zaGlmdCh7dHlwZToib3B0U3RhcnQiLG9wdFRleHQ6c2UucGFyc2VNZXNzYWdlKFpbY2UtMl0pLHNpZ25hbFR5cGU6c2UuTElORVRZUEUuT1BUX1NUQVJUfSksWltjZS0xXS5wdXNoKHt0eXBlOiJvcHRFbmQiLG9wdFRleHQ6c2UucGFyc2VNZXNzYWdlKFpbY2UtMl0pLHNpZ25hbFR5cGU6c2UuTElORVRZUEUuT1BUX0VORH0pLHRoaXMuJD1aW2NlLTFdO2JyZWFrO2Nhc2UgMzc6WltjZS0xXS51bnNoaWZ0KHt0eXBlOiJhbHRTdGFydCIsYWx0VGV4dDpzZS5wYXJzZU1lc3NhZ2UoWltjZS0yXSksc2lnbmFsVHlwZTpzZS5MSU5FVFlQRS5BTFRfU1RBUlR9KSxaW2NlLTFdLnB1c2goe3R5cGU6ImFsdEVuZCIsc2lnbmFsVHlwZTpzZS5MSU5FVFlQRS5BTFRfRU5EfSksdGhpcy4kPVpbY2UtMV07YnJlYWs7Y2FzZSAzODpaW2NlLTFdLnVuc2hpZnQoe3R5cGU6InBhclN0YXJ0IixwYXJUZXh0OnNlLnBhcnNlTWVzc2FnZShaW2NlLTJdKSxzaWduYWxUeXBlOnNlLkxJTkVUWVBFLlBBUl9TVEFSVH0pLFpbY2UtMV0ucHVzaCh7dHlwZToicGFyRW5kIixzaWduYWxUeXBlOnNlLkxJTkVUWVBFLlBBUl9FTkR9KSx0aGlzLiQ9WltjZS0xXTticmVhaztjYXNlIDM5OlpbY2UtMV0udW5zaGlmdCh7dHlwZToicGFyU3RhcnQiLHBhclRleHQ6c2UucGFyc2VNZXNzYWdlKFpbY2UtMl0pLHNpZ25hbFR5cGU6c2UuTElORVRZUEUuUEFSX09WRVJfU1RBUlR9KSxaW2NlLTFdLnB1c2goe3R5cGU6InBhckVuZCIsc2lnbmFsVHlwZTpzZS5MSU5FVFlQRS5QQVJfRU5EfSksdGhpcy4kPVpbY2UtMV07YnJlYWs7Y2FzZSA0MDpaW2NlLTFdLnVuc2hpZnQoe3R5cGU6ImNyaXRpY2FsU3RhcnQiLGNyaXRpY2FsVGV4dDpzZS5wYXJzZU1lc3NhZ2UoWltjZS0yXSksc2lnbmFsVHlwZTpzZS5MSU5FVFlQRS5DUklUSUNBTF9TVEFSVH0pLFpbY2UtMV0ucHVzaCh7dHlwZToiY3JpdGljYWxFbmQiLHNpZ25hbFR5cGU6c2UuTElORVRZUEUuQ1JJVElDQUxfRU5EfSksdGhpcy4kPVpbY2UtMV07YnJlYWs7Y2FzZSA0MTpaW2NlLTFdLnVuc2hpZnQoe3R5cGU6ImJyZWFrU3RhcnQiLGJyZWFrVGV4dDpzZS5wYXJzZU1lc3NhZ2UoWltjZS0yXSksc2lnbmFsVHlwZTpzZS5MSU5FVFlQRS5CUkVBS19TVEFSVH0pLFpbY2UtMV0ucHVzaCh7dHlwZToiYnJlYWtFbmQiLG9wdFRleHQ6c2UucGFyc2VNZXNzYWdlKFpbY2UtMl0pLHNpZ25hbFR5cGU6c2UuTElORVRZUEUuQlJFQUtfRU5EfSksdGhpcy4kPVpbY2UtMV07YnJlYWs7Y2FzZSA0Mzp0aGlzLiQ9WltjZS0zXS5jb25jYXQoW3t0eXBlOiJvcHRpb24iLG9wdGlvblRleHQ6c2UucGFyc2VNZXNzYWdlKFpbY2UtMV0pLHNpZ25hbFR5cGU6c2UuTElORVRZUEUuQ1JJVElDQUxfT1BUSU9OfSxaW2NlXV0pO2JyZWFrO2Nhc2UgNDU6dGhpcy4kPVpbY2UtM10uY29uY2F0KFt7dHlwZToiYW5kIixwYXJUZXh0OnNlLnBhcnNlTWVzc2FnZShaW2NlLTFdKSxzaWduYWxUeXBlOnNlLkxJTkVUWVBFLlBBUl9BTkR9LFpbY2VdXSk7YnJlYWs7Y2FzZSA0Nzp0aGlzLiQ9WltjZS0zXS5jb25jYXQoW3t0eXBlOiJlbHNlIixhbHRUZXh0OnNlLnBhcnNlTWVzc2FnZShaW2NlLTFdKSxzaWduYWxUeXBlOnNlLkxJTkVUWVBFLkFMVF9FTFNFfSxaW2NlXV0pO2JyZWFrO2Nhc2UgNDg6WltjZS0zXS5kcmF3PSJwYXJ0aWNpcGFudCIsWltjZS0zXS50eXBlPSJhZGRQYXJ0aWNpcGFudCIsWltjZS0zXS5kZXNjcmlwdGlvbj1zZS5wYXJzZU1lc3NhZ2UoWltjZS0xXSksdGhpcy4kPVpbY2UtM107YnJlYWs7Y2FzZSA0OTpaW2NlLTFdLmRyYXc9InBhcnRpY2lwYW50IixaW2NlLTFdLnR5cGU9ImFkZFBhcnRpY2lwYW50Iix0aGlzLiQ9WltjZS0xXTticmVhaztjYXNlIDUwOlpbY2UtM10uZHJhdz0iYWN0b3IiLFpbY2UtM10udHlwZT0iYWRkUGFydGljaXBhbnQiLFpbY2UtM10uZGVzY3JpcHRpb249c2UucGFyc2VNZXNzYWdlKFpbY2UtMV0pLHRoaXMuJD1aW2NlLTNdO2JyZWFrO2Nhc2UgNTE6WltjZS0xXS5kcmF3PSJhY3RvciIsWltjZS0xXS50eXBlPSJhZGRQYXJ0aWNpcGFudCIsdGhpcy4kPVpbY2UtMV07YnJlYWs7Y2FzZSA1MjpaW2NlLTFdLnR5cGU9ImRlc3Ryb3lQYXJ0aWNpcGFudCIsdGhpcy4kPVpbY2UtMV07YnJlYWs7Y2FzZSA1Mzp0aGlzLiQ9W1pbY2UtMV0se3R5cGU6ImFkZE5vdGUiLHBsYWNlbWVudDpaW2NlLTJdLGFjdG9yOlpbY2UtMV0uYWN0b3IsdGV4dDpaW2NlXX1dO2JyZWFrO2Nhc2UgNTQ6WltjZS0yXT1bXS5jb25jYXQoWltjZS0xXSxaW2NlLTFdKS5zbGljZSgwLDIpLFpbY2UtMl1bMF09WltjZS0yXVswXS5hY3RvcixaW2NlLTJdWzFdPVpbY2UtMl1bMV0uYWN0b3IsdGhpcy4kPVtaW2NlLTFdLHt0eXBlOiJhZGROb3RlIixwbGFjZW1lbnQ6c2UuUExBQ0VNRU5ULk9WRVIsYWN0b3I6WltjZS0yXS5zbGljZSgwLDIpLHRleHQ6WltjZV19XTticmVhaztjYXNlIDU1OnRoaXMuJD1bWltjZS0xXSx7dHlwZToiYWRkTGlua3MiLGFjdG9yOlpbY2UtMV0uYWN0b3IsdGV4dDpaW2NlXX1dO2JyZWFrO2Nhc2UgNTY6dGhpcy4kPVtaW2NlLTFdLHt0eXBlOiJhZGRBTGluayIsYWN0b3I6WltjZS0xXS5hY3Rvcix0ZXh0OlpbY2VdfV07YnJlYWs7Y2FzZSA1Nzp0aGlzLiQ9W1pbY2UtMV0se3R5cGU6ImFkZFByb3BlcnRpZXMiLGFjdG9yOlpbY2UtMV0uYWN0b3IsdGV4dDpaW2NlXX1dO2JyZWFrO2Nhc2UgNTg6dGhpcy4kPVtaW2NlLTFdLHt0eXBlOiJhZGREZXRhaWxzIixhY3RvcjpaW2NlLTFdLmFjdG9yLHRleHQ6WltjZV19XTticmVhaztjYXNlIDYxOnRoaXMuJD1bWltjZS0yXSxaW2NlXV07YnJlYWs7Y2FzZSA2Mjp0aGlzLiQ9WltjZV07YnJlYWs7Y2FzZSA2Mzp0aGlzLiQ9c2UuUExBQ0VNRU5ULkxFRlRPRjticmVhaztjYXNlIDY0OnRoaXMuJD1zZS5QTEFDRU1FTlQuUklHSFRPRjticmVhaztjYXNlIDY1OnRoaXMuJD1bWltjZS00XSxaW2NlLTFdLHt0eXBlOiJhZGRNZXNzYWdlIixmcm9tOlpbY2UtNF0uYWN0b3IsdG86WltjZS0xXS5hY3RvcixzaWduYWxUeXBlOlpbY2UtM10sbXNnOlpbY2VdLGFjdGl2YXRlOiEwfSx7dHlwZToiYWN0aXZlU3RhcnQiLHNpZ25hbFR5cGU6c2UuTElORVRZUEUuQUNUSVZFX1NUQVJULGFjdG9yOlpbY2UtMV0uYWN0b3J9XTticmVhaztjYXNlIDY2OnRoaXMuJD1bWltjZS00XSxaW2NlLTFdLHt0eXBlOiJhZGRNZXNzYWdlIixmcm9tOlpbY2UtNF0uYWN0b3IsdG86WltjZS0xXS5hY3RvcixzaWduYWxUeXBlOlpbY2UtM10sbXNnOlpbY2VdfSx7dHlwZToiYWN0aXZlRW5kIixzaWduYWxUeXBlOnNlLkxJTkVUWVBFLkFDVElWRV9FTkQsYWN0b3I6WltjZS00XS5hY3Rvcn1dO2JyZWFrO2Nhc2UgNjc6dGhpcy4kPVtaW2NlLTNdLFpbY2UtMV0se3R5cGU6ImFkZE1lc3NhZ2UiLGZyb206WltjZS0zXS5hY3Rvcix0bzpaW2NlLTFdLmFjdG9yLHNpZ25hbFR5cGU6WltjZS0yXSxtc2c6WltjZV19XTticmVhaztjYXNlIDY4OnRoaXMuJD17dHlwZToiYWRkUGFydGljaXBhbnQiLGFjdG9yOlpbY2VdfTticmVhaztjYXNlIDY5OnRoaXMuJD1zZS5MSU5FVFlQRS5TT0xJRF9PUEVOO2JyZWFrO2Nhc2UgNzA6dGhpcy4kPXNlLkxJTkVUWVBFLkRPVFRFRF9PUEVOO2JyZWFrO2Nhc2UgNzE6dGhpcy4kPXNlLkxJTkVUWVBFLlNPTElEO2JyZWFrO2Nhc2UgNzI6dGhpcy4kPXNlLkxJTkVUWVBFLkJJRElSRUNUSU9OQUxfU09MSUQ7YnJlYWs7Y2FzZSA3Mzp0aGlzLiQ9c2UuTElORVRZUEUuRE9UVEVEO2JyZWFrO2Nhc2UgNzQ6dGhpcy4kPXNlLkxJTkVUWVBFLkJJRElSRUNUSU9OQUxfRE9UVEVEO2JyZWFrO2Nhc2UgNzU6dGhpcy4kPXNlLkxJTkVUWVBFLlNPTElEX0NST1NTO2JyZWFrO2Nhc2UgNzY6dGhpcy4kPXNlLkxJTkVUWVBFLkRPVFRFRF9DUk9TUzticmVhaztjYXNlIDc3OnRoaXMuJD1zZS5MSU5FVFlQRS5TT0xJRF9QT0lOVDticmVhaztjYXNlIDc4OnRoaXMuJD1zZS5MSU5FVFlQRS5ET1RURURfUE9JTlQ7YnJlYWs7Y2FzZSA3OTp0aGlzLiQ9c2UucGFyc2VNZXNzYWdlKFpbY2VdLnRyaW0oKS5zdWJzdHJpbmcoMSkpO2JyZWFrfX0sImFub255bW91cyIpLHRhYmxlOlt7MzoxLDQ6ZSw1OnIsNjpufSx7MTpbM119LHszOjUsNDplLDU6ciw2Om59LHszOjYsNDplLDU6ciw2Om59LHQoWzEsNCw1LDEzLDE0LDE4LDIxLDIzLDI5LDMwLDMxLDMzLDM1LDM2LDM3LDM4LDM5LDQxLDQzLDQ0LDQ2LDUwLDUyLDUzLDU0LDU5LDYwLDYxLDYyLDcwXSxpLHs3Ojd9KSx7MTpbMiwxXX0sezE6WzIsMl19LHsxOlsyLDNdLDQ6YSw1OnMsODo4LDk6MTAsMTI6MTIsMTM6bCwxNDp1LDE3OjE1LDE4OmgsMjE6ZiwyMjo0MCwyMzpkLDI0OjE5LDI1OjIwLDI2OjIxLDI3OjIyLDI4OjIzLDI5OnAsMzA6bSwzMTpnLDMzOnksMzU6diwzNjp4LDM3OmIsMzg6dywzOTpDLDQxOlQsNDM6RSw0NDpBLDQ2OlMsNTA6Xyw1MjpJLDUzOkQsNTQ6ayw1OTpMLDYwOlIsNjE6Tyw2MjpNLDcwOkJ9LHQoRixbMiw1XSksezk6NDcsMTI6MTIsMTM6bCwxNDp1LDE3OjE1LDE4OmgsMjE6ZiwyMjo0MCwyMzpkLDI0OjE5LDI1OjIwLDI2OjIxLDI3OjIyLDI4OjIzLDI5OnAsMzA6bSwzMTpnLDMzOnksMzU6diwzNjp4LDM3OmIsMzg6dywzOTpDLDQxOlQsNDM6RSw0NDpBLDQ2OlMsNTA6Xyw1MjpJLDUzOkQsNTQ6ayw1OTpMLDYwOlIsNjE6Tyw2MjpNLDcwOkJ9LHQoRixbMiw3XSksdChGLFsyLDhdKSx0KEYsWzIsMTRdKSx7MTI6NDgsNTA6Xyw1MjpJLDUzOkR9LHsxNTpbMSw0OV19LHs1OlsxLDUwXX0sezU6WzEsNTNdLDE5OlsxLDUxXSwyMDpbMSw1Ml19LHsyMjo1NCw3MDpCfSx7MjI6NTUsNzA6Qn0sezU6WzEsNTZdfSx7NTpbMSw1N119LHs1OlsxLDU4XX0sezU6WzEsNTldfSx7NTpbMSw2MF19LHQoRixbMiwyOV0pLHQoRixbMiwzMF0pLHszMjpbMSw2MV19LHszNDpbMSw2Ml19LHQoRixbMiwzM10pLHsxNTpbMSw2M119LHsxNTpbMSw2NF19LHsxNTpbMSw2NV19LHsxNTpbMSw2Nl19LHsxNTpbMSw2N119LHsxNTpbMSw2OF19LHsxNTpbMSw2OV19LHsxNTpbMSw3MF19LHsyMjo3MSw3MDpCfSx7MjI6NzIsNzA6Qn0sezIyOjczLDcwOkJ9LHs2Nzo3NCw3MTpbMSw3NV0sNzI6WzEsNzZdLDczOlsxLDc3XSw3NDpbMSw3OF0sNzU6WzEsNzldLDc2OlsxLDgwXSw3NzpbMSw4MV0sNzg6WzEsODJdLDc5OlsxLDgzXSw4MDpbMSw4NF19LHs1NTo4NSw1NzpbMSw4Nl0sNjU6WzEsODddLDY2OlsxLDg4XX0sezIyOjg5LDcwOkJ9LHsyMjo5MCw3MDpCfSx7MjI6OTEsNzA6Qn0sezIyOjkyLDcwOkJ9LHQoWzUsNTEsNjQsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODFdLFsyLDY4XSksdChGLFsyLDZdKSx0KEYsWzIsMTVdKSx0KFAsWzIsOV0sezEwOjkzfSksdChGLFsyLDE3XSksezU6WzEsOTVdLDE5OlsxLDk0XX0sezU6WzEsOTZdfSx0KEYsWzIsMjFdKSx7NTpbMSw5N119LHs1OlsxLDk4XX0sdChGLFsyLDI0XSksdChGLFsyLDI1XSksdChGLFsyLDI2XSksdChGLFsyLDI3XSksdChGLFsyLDI4XSksdChGLFsyLDMxXSksdChGLFsyLDMyXSksdCh6LGksezc6OTl9KSx0KHosaSx7NzoxMDB9KSx0KHosaSx7NzoxMDF9KSx0KCQsaSx7NDA6MTAyLDc6MTAzfSksdChILGksezQyOjEwNCw3OjEwNX0pLHQoSCxpLHs3OjEwNSw0MjoxMDZ9KSx0KFEsaSx7NDU6MTA3LDc6MTA4fSksdCh6LGksezc6MTA5fSksezU6WzEsMTExXSw1MTpbMSwxMTBdfSx7NTpbMSwxMTNdLDUxOlsxLDExMl19LHs1OlsxLDExNF19LHsyMjoxMTcsNjg6WzEsMTE1XSw2OTpbMSwxMTZdLDcwOkJ9LHQoaixbMiw2OV0pLHQoaixbMiw3MF0pLHQoaixbMiw3MV0pLHQoaixbMiw3Ml0pLHQoaixbMiw3M10pLHQoaixbMiw3NF0pLHQoaixbMiw3NV0pLHQoaixbMiw3Nl0pLHQoaixbMiw3N10pLHQoaixbMiw3OF0pLHsyMjoxMTgsNzA6Qn0sezIyOjEyMCw1ODoxMTksNzA6Qn0sezcwOlsyLDYzXX0sezcwOlsyLDY0XX0sezU2OjEyMSw4MTppZX0sezU2OjEyMyw4MTppZX0sezU2OjEyNCw4MTppZX0sezU2OjEyNSw4MTppZX0sezQ6WzEsMTI4XSw1OlsxLDEzMF0sMTE6MTI3LDEyOjEyOSwxNjpbMSwxMjZdLDUwOl8sNTI6SSw1MzpEfSx7NTpbMSwxMzFdfSx0KEYsWzIsMTldKSx0KEYsWzIsMjBdKSx0KEYsWzIsMjJdKSx0KEYsWzIsMjNdKSx7NDphLDU6cyw4OjgsOToxMCwxMjoxMiwxMzpsLDE0OnUsMTY6WzEsMTMyXSwxNzoxNSwxODpoLDIxOmYsMjI6NDAsMjM6ZCwyNDoxOSwyNToyMCwyNjoyMSwyNzoyMiwyODoyMywyOTpwLDMwOm0sMzE6ZywzMzp5LDM1OnYsMzY6eCwzNzpiLDM4OncsMzk6Qyw0MTpULDQzOkUsNDQ6QSw0NjpTLDUwOl8sNTI6SSw1MzpELDU0OmssNTk6TCw2MDpSLDYxOk8sNjI6TSw3MDpCfSx7NDphLDU6cyw4OjgsOToxMCwxMjoxMiwxMzpsLDE0OnUsMTY6WzEsMTMzXSwxNzoxNSwxODpoLDIxOmYsMjI6NDAsMjM6ZCwyNDoxOSwyNToyMCwyNjoyMSwyNzoyMiwyODoyMywyOTpwLDMwOm0sMzE6ZywzMzp5LDM1OnYsMzY6eCwzNzpiLDM4OncsMzk6Qyw0MTpULDQzOkUsNDQ6QSw0NjpTLDUwOl8sNTI6SSw1MzpELDU0OmssNTk6TCw2MDpSLDYxOk8sNjI6TSw3MDpCfSx7NDphLDU6cyw4OjgsOToxMCwxMjoxMiwxMzpsLDE0OnUsMTY6WzEsMTM0XSwxNzoxNSwxODpoLDIxOmYsMjI6NDAsMjM6ZCwyNDoxOSwyNToyMCwyNjoyMSwyNzoyMiwyODoyMywyOTpwLDMwOm0sMzE6ZywzMzp5LDM1OnYsMzY6eCwzNzpiLDM4OncsMzk6Qyw0MTpULDQzOkUsNDQ6QSw0NjpTLDUwOl8sNTI6SSw1MzpELDU0OmssNTk6TCw2MDpSLDYxOk8sNjI6TSw3MDpCfSx7MTY6WzEsMTM1XX0sezQ6YSw1OnMsODo4LDk6MTAsMTI6MTIsMTM6bCwxNDp1LDE2OlsyLDQ2XSwxNzoxNSwxODpoLDIxOmYsMjI6NDAsMjM6ZCwyNDoxOSwyNToyMCwyNjoyMSwyNzoyMiwyODoyMywyOTpwLDMwOm0sMzE6ZywzMzp5LDM1OnYsMzY6eCwzNzpiLDM4OncsMzk6Qyw0MTpULDQzOkUsNDQ6QSw0NjpTLDQ5OlsxLDEzNl0sNTA6Xyw1MjpJLDUzOkQsNTQ6ayw1OTpMLDYwOlIsNjE6Tyw2MjpNLDcwOkJ9LHsxNjpbMSwxMzddfSx7NDphLDU6cyw4OjgsOToxMCwxMjoxMiwxMzpsLDE0OnUsMTY6WzIsNDRdLDE3OjE1LDE4OmgsMjE6ZiwyMjo0MCwyMzpkLDI0OjE5LDI1OjIwLDI2OjIxLDI3OjIyLDI4OjIzLDI5OnAsMzA6bSwzMTpnLDMzOnksMzU6diwzNjp4LDM3OmIsMzg6dywzOTpDLDQxOlQsNDM6RSw0NDpBLDQ2OlMsNDg6WzEsMTM4XSw1MDpfLDUyOkksNTM6RCw1NDprLDU5OkwsNjA6Uiw2MTpPLDYyOk0sNzA6Qn0sezE2OlsxLDEzOV19LHsxNjpbMSwxNDBdfSx7NDphLDU6cyw4OjgsOToxMCwxMjoxMiwxMzpsLDE0OnUsMTY6WzIsNDJdLDE3OjE1LDE4OmgsMjE6ZiwyMjo0MCwyMzpkLDI0OjE5LDI1OjIwLDI2OjIxLDI3OjIyLDI4OjIzLDI5OnAsMzA6bSwzMTpnLDMzOnksMzU6diwzNjp4LDM3OmIsMzg6dywzOTpDLDQxOlQsNDM6RSw0NDpBLDQ2OlMsNDc6WzEsMTQxXSw1MDpfLDUyOkksNTM6RCw1NDprLDU5OkwsNjA6Uiw2MTpPLDYyOk0sNzA6Qn0sezQ6YSw1OnMsODo4LDk6MTAsMTI6MTIsMTM6bCwxNDp1LDE2OlsxLDE0Ml0sMTc6MTUsMTg6aCwyMTpmLDIyOjQwLDIzOmQsMjQ6MTksMjU6MjAsMjY6MjEsMjc6MjIsMjg6MjMsMjk6cCwzMDptLDMxOmcsMzM6eSwzNTp2LDM2OngsMzc6YiwzODp3LDM5OkMsNDE6VCw0MzpFLDQ0OkEsNDY6Uyw1MDpfLDUyOkksNTM6RCw1NDprLDU5OkwsNjA6Uiw2MTpPLDYyOk0sNzA6Qn0sezE1OlsxLDE0M119LHQoRixbMiw0OV0pLHsxNTpbMSwxNDRdfSx0KEYsWzIsNTFdKSx0KEYsWzIsNTJdKSx7MjI6MTQ1LDcwOkJ9LHsyMjoxNDYsNzA6Qn0sezU2OjE0Nyw4MTppZX0sezU2OjE0OCw4MTppZX0sezU2OjE0OSw4MTppZX0sezY0OlsxLDE1MF0sODE6WzIsNjJdfSx7NTpbMiw1NV19LHs1OlsyLDc5XX0sezU6WzIsNTZdfSx7NTpbMiw1N119LHs1OlsyLDU4XX0sdChGLFsyLDE2XSksdChQLFsyLDEwXSksezEyOjE1MSw1MDpfLDUyOkksNTM6RH0sdChQLFsyLDEyXSksdChQLFsyLDEzXSksdChGLFsyLDE4XSksdChGLFsyLDM0XSksdChGLFsyLDM1XSksdChGLFsyLDM2XSksdChGLFsyLDM3XSksezE1OlsxLDE1Ml19LHQoRixbMiwzOF0pLHsxNTpbMSwxNTNdfSx0KEYsWzIsMzldKSx0KEYsWzIsNDBdKSx7MTU6WzEsMTU0XX0sdChGLFsyLDQxXSksezU6WzEsMTU1XX0sezU6WzEsMTU2XX0sezU2OjE1Nyw4MTppZX0sezU2OjE1OCw4MTppZX0sezU6WzIsNjddfSx7NTpbMiw1M119LHs1OlsyLDU0XX0sezIyOjE1OSw3MDpCfSx0KFAsWzIsMTFdKSx0KCQsaSx7NzoxMDMsNDA6MTYwfSksdChILGksezc6MTA1LDQyOjE2MX0pLHQoUSxpLHs3OjEwOCw0NToxNjJ9KSx0KEYsWzIsNDhdKSx0KEYsWzIsNTBdKSx7NTpbMiw2NV19LHs1OlsyLDY2XX0sezgxOlsyLDYxXX0sezE2OlsyLDQ3XX0sezE2OlsyLDQ1XX0sezE2OlsyLDQzXX1dLGRlZmF1bHRBY3Rpb25zOns1OlsyLDFdLDY6WzIsMl0sODc6WzIsNjNdLDg4OlsyLDY0XSwxMjE6WzIsNTVdLDEyMjpbMiw3OV0sMTIzOlsyLDU2XSwxMjQ6WzIsNTddLDEyNTpbMiw1OF0sMTQ3OlsyLDY3XSwxNDg6WzIsNTNdLDE0OTpbMiw1NF0sMTU3OlsyLDY1XSwxNTg6WzIsNjZdLDE1OTpbMiw2MV0sMTYwOlsyLDQ3XSwxNjE6WzIsNDVdLDE2MjpbMiw0M119LHBhcnNlRXJyb3I6byhmdW5jdGlvbihYLHRlKXtpZih0ZS5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKFgpO2Vsc2V7dmFyIEo9bmV3IEVycm9yKFgpO3Rocm93IEouaGFzaD10ZSxKfX0sInBhcnNlRXJyb3IiKSxwYXJzZTpvKGZ1bmN0aW9uKFgpe3ZhciB0ZT10aGlzLEo9WzBdLHNlPVtdLHVlPVtudWxsXSxaPVtdLFNlPXRoaXMudGFibGUsY2U9IiIsYWU9MCxPZT0wLGdlPTAsemU9MixIZT0xLCRlPVouc2xpY2UuY2FsbChhcmd1bWVudHMsMSksUmU9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxJZT17eXk6e319O2Zvcih2YXIgYmUgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxiZSkmJihJZS55eVtiZV09dGhpcy55eVtiZV0pO1JlLnNldElucHV0KFgsSWUueXkpLEllLnl5LmxleGVyPVJlLEllLnl5LnBhcnNlcj10aGlzLHR5cGVvZiBSZS55eWxsb2M+InUiJiYoUmUueXlsbG9jPXt9KTt2YXIgVz1SZS55eWxsb2M7Wi5wdXNoKFcpO3ZhciBkZT1SZS5vcHRpb25zJiZSZS5vcHRpb25zLnJhbmdlczt0eXBlb2YgSWUueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9SWUueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gcmUoUnQpe0oubGVuZ3RoPUoubGVuZ3RoLTIqUnQsdWUubGVuZ3RoPXVlLmxlbmd0aC1SdCxaLmxlbmd0aD1aLmxlbmd0aC1SdH1vKHJlLCJwb3BTdGFjayIpO2Z1bmN0aW9uIG9lKCl7dmFyIFJ0O3JldHVybiBSdD1zZS5wb3AoKXx8UmUubGV4KCl8fEhlLHR5cGVvZiBSdCE9Im51bWJlciImJihSdCBpbnN0YW5jZW9mIEFycmF5JiYoc2U9UnQsUnQ9c2UucG9wKCkpLFJ0PXRlLnN5bWJvbHNfW1J0XXx8UnQpLFJ0fW8ob2UsImxleCIpO2Zvcih2YXIgVix4ZSxxLHBlLHZlLFBlLF9lPXt9LHdlLFZlLERlLHFlOzspe2lmKHE9SltKLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW3FdP3BlPXRoaXMuZGVmYXVsdEFjdGlvbnNbcV06KChWPT09bnVsbHx8dHlwZW9mIFY+InUiKSYmKFY9b2UoKSkscGU9U2VbcV0mJlNlW3FdW1ZdKSx0eXBlb2YgcGU+InUifHwhcGUubGVuZ3RofHwhcGVbMF0pe3ZhciBhdD0iIjtxZT1bXTtmb3Iod2UgaW4gU2VbcV0pdGhpcy50ZXJtaW5hbHNfW3dlXSYmd2U+emUmJnFlLnB1c2goIiciK3RoaXMudGVybWluYWxzX1t3ZV0rIiciKTtSZS5zaG93UG9zaXRpb24/YXQ9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYWUrMSkrYDoKYCtSZS5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK3FlLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bVl18fFYpKyInIjphdD0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhhZSsxKSsiOiBVbmV4cGVjdGVkICIrKFY9PUhlPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW1ZdfHxWKSsiJyIpLHRoaXMucGFyc2VFcnJvcihhdCx7dGV4dDpSZS5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bVl18fFYsbGluZTpSZS55eWxpbmVubyxsb2M6VyxleHBlY3RlZDpxZX0pfWlmKHBlWzBdaW5zdGFuY2VvZiBBcnJheSYmcGUubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitxKyIsIHRva2VuOiAiK1YpO3N3aXRjaChwZVswXSl7Y2FzZSAxOkoucHVzaChWKSx1ZS5wdXNoKFJlLnl5dGV4dCksWi5wdXNoKFJlLnl5bGxvYyksSi5wdXNoKHBlWzFdKSxWPW51bGwseGU/KFY9eGUseGU9bnVsbCk6KE9lPVJlLnl5bGVuZyxjZT1SZS55eXRleHQsYWU9UmUueXlsaW5lbm8sVz1SZS55eWxsb2MsZ2U+MCYmZ2UtLSk7YnJlYWs7Y2FzZSAyOmlmKFZlPXRoaXMucHJvZHVjdGlvbnNfW3BlWzFdXVsxXSxfZS4kPXVlW3VlLmxlbmd0aC1WZV0sX2UuXyQ9e2ZpcnN0X2xpbmU6WltaLmxlbmd0aC0oVmV8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpaW1oubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46WltaLmxlbmd0aC0oVmV8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46WltaLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sZGUmJihfZS5fJC5yYW5nZT1bWltaLmxlbmd0aC0oVmV8fDEpXS5yYW5nZVswXSxaW1oubGVuZ3RoLTFdLnJhbmdlWzFdXSksUGU9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KF9lLFtjZSxPZSxhZSxJZS55eSxwZVsxXSx1ZSxaXS5jb25jYXQoJGUpKSx0eXBlb2YgUGU8InUiKXJldHVybiBQZTtWZSYmKEo9Si5zbGljZSgwLC0xKlZlKjIpLHVlPXVlLnNsaWNlKDAsLTEqVmUpLFo9Wi5zbGljZSgwLC0xKlZlKSksSi5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW3BlWzFdXVswXSksdWUucHVzaChfZS4kKSxaLnB1c2goX2UuXyQpLERlPVNlW0pbSi5sZW5ndGgtMl1dW0pbSi5sZW5ndGgtMV1dLEoucHVzaChEZSk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH0sInBhcnNlIil9LGxlPWZ1bmN0aW9uKCl7dmFyIEs9e0VPRjoxLHBhcnNlRXJyb3I6byhmdW5jdGlvbih0ZSxKKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHRlLEopO2Vsc2UgdGhyb3cgbmV3IEVycm9yKHRlKX0sInBhcnNlRXJyb3IiKSxzZXRJbnB1dDpvKGZ1bmN0aW9uKFgsdGUpe3JldHVybiB0aGlzLnl5PXRlfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1YLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSwic2V0SW5wdXQiKSxpbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIFg9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPVgsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPVgsdGhpcy5tYXRjaGVkKz1YO3ZhciB0ZT1YLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gdGU/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLFh9LCJpbnB1dCIpLHVucHV0Om8oZnVuY3Rpb24oWCl7dmFyIHRlPVgubGVuZ3RoLEo9WC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PVgrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLXRlKSx0aGlzLm9mZnNldC09dGU7dmFyIHNlPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLEoubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1KLmxlbmd0aC0xKTt2YXIgdWU9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOko/KEoubGVuZ3RoPT09c2UubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStzZVtzZS5sZW5ndGgtSi5sZW5ndGhdLmxlbmd0aC1KWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tdGV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdWVbMF0sdWVbMF0rdGhpcy55eWxlbmctdGVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sInVucHV0IiksbW9yZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30sIm1vcmUiKSxyZWplY3Q6byhmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sInJlamVjdCIpLGxlc3M6byhmdW5jdGlvbihYKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoWCkpfSwibGVzcyIpLHBhc3RJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIFg9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihYLmxlbmd0aD4yMD8iLi4uIjoiIikrWC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sInBhc3RJbnB1dCIpLHVwY29taW5nSW5wdXQ6byhmdW5jdGlvbigpe3ZhciBYPXRoaXMubWF0Y2g7cmV0dXJuIFgubGVuZ3RoPDIwJiYoWCs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtWC5sZW5ndGgpKSwoWC5zdWJzdHIoMCwyMCkrKFgubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LCJ1cGNvbWluZ0lucHV0Iiksc2hvd1Bvc2l0aW9uOm8oZnVuY3Rpb24oKXt2YXIgWD10aGlzLnBhc3RJbnB1dCgpLHRlPW5ldyBBcnJheShYLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIFgrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK3RlKyJeIn0sInNob3dQb3NpdGlvbiIpLHRlc3RfbWF0Y2g6byhmdW5jdGlvbihYLHRlKXt2YXIgSixzZSx1ZTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYodWU9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodWUueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksc2U9WFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksc2UmJih0aGlzLnl5bGluZW5vKz1zZS5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpzZT9zZVtzZS5sZW5ndGgtMV0ubGVuZ3RoLXNlW3NlLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK1hbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9WFswXSx0aGlzLm1hdGNoKz1YWzBdLHRoaXMubWF0Y2hlcz1YLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKFhbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPVhbMF0sSj10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyx0ZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxKKXJldHVybiBKO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBaIGluIHVlKXRoaXNbWl09dWVbWl07cmV0dXJuITF9cmV0dXJuITF9LCJ0ZXN0X21hdGNoIiksbmV4dDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIFgsdGUsSixzZTt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciB1ZT10aGlzLl9jdXJyZW50UnVsZXMoKSxaPTA7Wjx1ZS5sZW5ndGg7WisrKWlmKEo9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1t1ZVtaXV0pLEomJighdGV8fEpbMF0ubGVuZ3RoPnRlWzBdLmxlbmd0aCkpe2lmKHRlPUosc2U9Wix0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihYPXRoaXMudGVzdF9tYXRjaChKLHVlW1pdKSxYIT09ITEpcmV0dXJuIFg7aWYodGhpcy5fYmFja3RyYWNrKXt0ZT0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiB0ZT8oWD10aGlzLnRlc3RfbWF0Y2godGUsdWVbc2VdKSxYIT09ITE/WDohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sIm5leHQiKSxsZXg6byhmdW5jdGlvbigpe3ZhciB0ZT10aGlzLm5leHQoKTtyZXR1cm4gdGV8fHRoaXMubGV4KCl9LCJsZXgiKSxiZWdpbjpvKGZ1bmN0aW9uKHRlKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2godGUpfSwiYmVnaW4iKSxwb3BTdGF0ZTpvKGZ1bmN0aW9uKCl7dmFyIHRlPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIHRlPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSwicG9wU3RhdGUiKSxfY3VycmVudFJ1bGVzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSwiX2N1cnJlbnRSdWxlcyIpLHRvcFN0YXRlOm8oZnVuY3Rpb24odGUpe3JldHVybiB0ZT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKHRlfHwwKSx0ZT49MD90aGlzLmNvbmRpdGlvblN0YWNrW3RlXToiSU5JVElBTCJ9LCJ0b3BTdGF0ZSIpLHB1c2hTdGF0ZTpvKGZ1bmN0aW9uKHRlKXt0aGlzLmJlZ2luKHRlKX0sInB1c2hTdGF0ZSIpLHN0YXRlU3RhY2tTaXplOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LCJzdGF0ZVN0YWNrU2l6ZSIpLG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKHRlLEosc2UsdWUpe3ZhciBaPXVlO3N3aXRjaChzZSl7Y2FzZSAwOnJldHVybiA1O2Nhc2UgMTpicmVhaztjYXNlIDI6YnJlYWs7Y2FzZSAzOmJyZWFrO2Nhc2UgNDpicmVhaztjYXNlIDU6YnJlYWs7Y2FzZSA2OnJldHVybiAxOTtjYXNlIDc6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSwxNDticmVhaztjYXNlIDg6cmV0dXJuIHRoaXMuYmVnaW4oIklEIiksNTA7YnJlYWs7Y2FzZSA5OnJldHVybiB0aGlzLmJlZ2luKCJJRCIpLDUyO2JyZWFrO2Nhc2UgMTA6cmV0dXJuIDEzO2Nhc2UgMTE6cmV0dXJuIHRoaXMuYmVnaW4oIklEIiksNTM7YnJlYWs7Y2FzZSAxMjpyZXR1cm4gSi55eXRleHQ9Si55eXRleHQudHJpbSgpLHRoaXMuYmVnaW4oIkFMSUFTIiksNzA7YnJlYWs7Y2FzZSAxMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJMSU5FIiksNTE7YnJlYWs7Y2FzZSAxNDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKSw1O2JyZWFrO2Nhc2UgMTU6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSwzNjticmVhaztjYXNlIDE2OnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksMzc7YnJlYWs7Y2FzZSAxNzpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDM4O2JyZWFrO2Nhc2UgMTg6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSwzOTticmVhaztjYXNlIDE5OnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksNDk7YnJlYWs7Y2FzZSAyMDpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDQxO2JyZWFrO2Nhc2UgMjE6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSw0MzticmVhaztjYXNlIDIyOnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksNDg7YnJlYWs7Y2FzZSAyMzpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDQ0O2JyZWFrO2Nhc2UgMjQ6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSw0NzticmVhaztjYXNlIDI1OnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksNDY7YnJlYWs7Y2FzZSAyNjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE1O2JyZWFrO2Nhc2UgMjc6cmV0dXJuIDE2O2Nhc2UgMjg6cmV0dXJuIDY1O2Nhc2UgMjk6cmV0dXJuIDY2O2Nhc2UgMzA6cmV0dXJuIDU5O2Nhc2UgMzE6cmV0dXJuIDYwO2Nhc2UgMzI6cmV0dXJuIDYxO2Nhc2UgMzM6cmV0dXJuIDYyO2Nhc2UgMzQ6cmV0dXJuIDU3O2Nhc2UgMzU6cmV0dXJuIDU0O2Nhc2UgMzY6cmV0dXJuIHRoaXMuYmVnaW4oIklEIiksMjE7YnJlYWs7Y2FzZSAzNzpyZXR1cm4gdGhpcy5iZWdpbigiSUQiKSwyMzticmVhaztjYXNlIDM4OnJldHVybiAyOTtjYXNlIDM5OnJldHVybiAzMDtjYXNlIDQwOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwzMTticmVhaztjYXNlIDQxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7YnJlYWs7Y2FzZSA0MjpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX2Rlc2NyIiksMzM7YnJlYWs7Y2FzZSA0MzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2JyZWFrO2Nhc2UgNDQ6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgNDU6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNDY6cmV0dXJuImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiO2Nhc2UgNDc6cmV0dXJuIDY7Y2FzZSA0ODpyZXR1cm4gMTg7Y2FzZSA0OTpyZXR1cm4gMjA7Y2FzZSA1MDpyZXR1cm4gNjQ7Y2FzZSA1MTpyZXR1cm4gNTtjYXNlIDUyOnJldHVybiBKLnl5dGV4dD1KLnl5dGV4dC50cmltKCksNzA7YnJlYWs7Y2FzZSA1MzpyZXR1cm4gNzM7Y2FzZSA1NDpyZXR1cm4gNzQ7Y2FzZSA1NTpyZXR1cm4gNzU7Y2FzZSA1NjpyZXR1cm4gNzY7Y2FzZSA1NzpyZXR1cm4gNzE7Y2FzZSA1ODpyZXR1cm4gNzI7Y2FzZSA1OTpyZXR1cm4gNzc7Y2FzZSA2MDpyZXR1cm4gNzg7Y2FzZSA2MTpyZXR1cm4gNzk7Y2FzZSA2MjpyZXR1cm4gODA7Y2FzZSA2MzpyZXR1cm4gODE7Y2FzZSA2NDpyZXR1cm4gNjg7Y2FzZSA2NTpyZXR1cm4gNjk7Y2FzZSA2NjpyZXR1cm4gNTtjYXNlIDY3OnJldHVybiJJTlZBTElEIn19LCJhbm9ueW1vdXMiKSxydWxlczpbL14oPzpbXG5dKykvaSwvXig/OlxzKykvaSwvXig/OigoPyFcbilccykrKS9pLC9eKD86I1teXG5dKikvaSwvXig/OiUoPyFceylbXlxuXSopL2ksL14oPzpbXlx9XSUlW15cbl0qKS9pLC9eKD86WzAtOV0rKD89WyBcbl0rKSkvaSwvXig/OmJveFxiKS9pLC9eKD86cGFydGljaXBhbnRcYikvaSwvXig/OmFjdG9yXGIpL2ksL14oPzpjcmVhdGVcYikvaSwvXig/OmRlc3Ryb3lcYikvaSwvXig/OlteXDwtPlwtPjpcbiw7XSs/KFtcLV0qW15cPC0+XC0+OlxuLDtdKz8pKj8oPz0oKD8hXG4pXHMpK2FzKD8hXG4pXHN8WyNcbjtdfCQpKS9pLC9eKD86YXNcYikvaSwvXig/Oig/OikpL2ksL14oPzpsb29wXGIpL2ksL14oPzpyZWN0XGIpL2ksL14oPzpvcHRcYikvaSwvXig/OmFsdFxiKS9pLC9eKD86ZWxzZVxiKS9pLC9eKD86cGFyXGIpL2ksL14oPzpwYXJfb3ZlclxiKS9pLC9eKD86YW5kXGIpL2ksL14oPzpjcml0aWNhbFxiKS9pLC9eKD86b3B0aW9uXGIpL2ksL14oPzpicmVha1xiKS9pLC9eKD86KD86WzpdPyg/Om5vKT93cmFwKT9bXiNcbjtdKikvaSwvXig/OmVuZFxiKS9pLC9eKD86bGVmdCBvZlxiKS9pLC9eKD86cmlnaHQgb2ZcYikvaSwvXig/OmxpbmtzXGIpL2ksL14oPzpsaW5rXGIpL2ksL14oPzpwcm9wZXJ0aWVzXGIpL2ksL14oPzpkZXRhaWxzXGIpL2ksL14oPzpvdmVyXGIpL2ksL14oPzpub3RlXGIpL2ksL14oPzphY3RpdmF0ZVxiKS9pLC9eKD86ZGVhY3RpdmF0ZVxiKS9pLC9eKD86dGl0bGVcc1teI1xuO10rKS9pLC9eKD86dGl0bGU6XHNbXiNcbjtdKykvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpbXH1dKS9pLC9eKD86W15cfV0qKS9pLC9eKD86c2VxdWVuY2VEaWFncmFtXGIpL2ksL14oPzphdXRvbnVtYmVyXGIpL2ksL14oPzpvZmZcYikvaSwvXig/OiwpL2ksL14oPzo7KS9pLC9eKD86W15cK1w8LT5cLT46XG4sO10rKCg/ISgteHwtLXh8LVwpfC0tXCkpKVtcLV0qW15cK1w8LT5cLT46XG4sO10rKSopL2ksL14oPzotPj4pL2ksL14oPzo8PC0+PikvaSwvXig/Oi0tPj4pL2ksL14oPzo8PC0tPj4pL2ksL14oPzotPikvaSwvXig/Oi0tPikvaSwvXig/Oi1beF0pL2ksL14oPzotLVt4XSkvaSwvXig/Oi1bXCldKS9pLC9eKD86LS1bXCldKS9pLC9eKD86Oig/Oig/Om5vKT93cmFwKT9bXiNcbjtdKykvaSwvXig/OlwrKS9pLC9eKD86LSkvaSwvXig/OiQpL2ksL14oPzouKS9pXSxjb25kaXRpb25zOnthY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbNDUsNDZdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbNDNdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbNDFdLGluY2x1c2l2ZTohMX0sSUQ6e3J1bGVzOlsyLDMsMTJdLGluY2x1c2l2ZTohMX0sQUxJQVM6e3J1bGVzOlsyLDMsMTMsMTRdLGluY2x1c2l2ZTohMX0sTElORTp7cnVsZXM6WzIsMywyNl0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDMsNCw1LDYsNyw4LDksMTAsMTEsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDIsNDQsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjddLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gS30oKTtuZS5sZXhlcj1sZTtmdW5jdGlvbiBoZSgpe3RoaXMueXk9e319cmV0dXJuIG8oaGUsIlBhcnNlciIpLGhlLnByb3RvdHlwZT1uZSxuZS5QYXJzZXI9aGUsbmV3IGhlfSgpO0NPLnBhcnNlcj1DTztsZmU9Q099KTt2YXIgaVZlLGFWZSxzVmUsXzYsdWZlPU4oKCk9PnsidXNlIHN0cmljdCI7enQoKTt2dCgpO3M2KCk7Z3IoKTttaSgpO2lWZT17U09MSUQ6MCxET1RURUQ6MSxOT1RFOjIsU09MSURfQ1JPU1M6MyxET1RURURfQ1JPU1M6NCxTT0xJRF9PUEVOOjUsRE9UVEVEX09QRU46NixMT09QX1NUQVJUOjEwLExPT1BfRU5EOjExLEFMVF9TVEFSVDoxMixBTFRfRUxTRToxMyxBTFRfRU5EOjE0LE9QVF9TVEFSVDoxNSxPUFRfRU5EOjE2LEFDVElWRV9TVEFSVDoxNyxBQ1RJVkVfRU5EOjE4LFBBUl9TVEFSVDoxOSxQQVJfQU5EOjIwLFBBUl9FTkQ6MjEsUkVDVF9TVEFSVDoyMixSRUNUX0VORDoyMyxTT0xJRF9QT0lOVDoyNCxET1RURURfUE9JTlQ6MjUsQVVUT05VTUJFUjoyNixDUklUSUNBTF9TVEFSVDoyNyxDUklUSUNBTF9PUFRJT046MjgsQ1JJVElDQUxfRU5EOjI5LEJSRUFLX1NUQVJUOjMwLEJSRUFLX0VORDozMSxQQVJfT1ZFUl9TVEFSVDozMixCSURJUkVDVElPTkFMX1NPTElEOjMzLEJJRElSRUNUSU9OQUxfRE9UVEVEOjM0fSxhVmU9e0ZJTExFRDowLE9QRU46MX0sc1ZlPXtMRUZUT0Y6MCxSSUdIVE9GOjEsT1ZFUjoyfSxfNj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuc3RhdGU9bmV3IHBmKCgpPT4oe3ByZXZBY3Rvcjp2b2lkIDAsYWN0b3JzOm5ldyBNYXAsY3JlYXRlZEFjdG9yczpuZXcgTWFwLGRlc3Ryb3llZEFjdG9yczpuZXcgTWFwLGJveGVzOltdLG1lc3NhZ2VzOltdLG5vdGVzOltdLHNlcXVlbmNlTnVtYmVyc0VuYWJsZWQ6ITEsd3JhcEVuYWJsZWQ6dm9pZCAwLGN1cnJlbnRCb3g6dm9pZCAwLGxhc3RDcmVhdGVkOnZvaWQgMCxsYXN0RGVzdHJveWVkOnZvaWQgMH0pKTt0aGlzLnNldEFjY1RpdGxlPUxyO3RoaXMuc2V0QWNjRGVzY3JpcHRpb249TnI7dGhpcy5zZXREaWFncmFtVGl0bGU9JHI7dGhpcy5nZXRBY2NUaXRsZT1Scjt0aGlzLmdldEFjY0Rlc2NyaXB0aW9uPU1yO3RoaXMuZ2V0RGlhZ3JhbVRpdGxlPUlyO3RoaXMuYXBwbHk9dGhpcy5hcHBseS5iaW5kKHRoaXMpLHRoaXMucGFyc2VCb3hEYXRhPXRoaXMucGFyc2VCb3hEYXRhLmJpbmQodGhpcyksdGhpcy5wYXJzZU1lc3NhZ2U9dGhpcy5wYXJzZU1lc3NhZ2UuYmluZCh0aGlzKSx0aGlzLmNsZWFyKCksdGhpcy5zZXRXcmFwKG1lKCkud3JhcCksdGhpcy5MSU5FVFlQRT1pVmUsdGhpcy5BUlJPV1RZUEU9YVZlLHRoaXMuUExBQ0VNRU5UPXNWZX1zdGF0aWN7byh0aGlzLCJTZXF1ZW5jZURCIil9YWRkQm94KGUpe3RoaXMuc3RhdGUucmVjb3Jkcy5ib3hlcy5wdXNoKHtuYW1lOmUudGV4dCx3cmFwOmUud3JhcD8/dGhpcy5hdXRvV3JhcCgpLGZpbGw6ZS5jb2xvcixhY3RvcktleXM6W119KSx0aGlzLnN0YXRlLnJlY29yZHMuY3VycmVudEJveD10aGlzLnN0YXRlLnJlY29yZHMuYm94ZXMuc2xpY2UoLTEpWzBdfWFkZEFjdG9yKGUscixuLGkpe2xldCBhPXRoaXMuc3RhdGUucmVjb3Jkcy5jdXJyZW50Qm94LHM9dGhpcy5zdGF0ZS5yZWNvcmRzLmFjdG9ycy5nZXQoZSk7aWYocyl7aWYodGhpcy5zdGF0ZS5yZWNvcmRzLmN1cnJlbnRCb3gmJnMuYm94JiZ0aGlzLnN0YXRlLnJlY29yZHMuY3VycmVudEJveCE9PXMuYm94KXRocm93IG5ldyBFcnJvcihgQSBzYW1lIHBhcnRpY2lwYW50IHNob3VsZCBvbmx5IGJlIGRlZmluZWQgaW4gb25lIEJveDogJHtzLm5hbWV9IGNhbid0IGJlIGluICcke3MuYm94Lm5hbWV9JyBhbmQgaW4gJyR7dGhpcy5zdGF0ZS5yZWNvcmRzLmN1cnJlbnRCb3gubmFtZX0nIGF0IHRoZSBzYW1lIHRpbWUuYCk7aWYoYT1zLmJveD9zLmJveDp0aGlzLnN0YXRlLnJlY29yZHMuY3VycmVudEJveCxzLmJveD1hLHMmJnI9PT1zLm5hbWUmJm49PW51bGwpcmV0dXJufWlmKG4/LnRleHQ9PW51bGwmJihuPXt0ZXh0OnIsdHlwZTppfSksKGk9PW51bGx8fG4udGV4dD09bnVsbCkmJihuPXt0ZXh0OnIsdHlwZTppfSksdGhpcy5zdGF0ZS5yZWNvcmRzLmFjdG9ycy5zZXQoZSx7Ym94OmEsbmFtZTpyLGRlc2NyaXB0aW9uOm4udGV4dCx3cmFwOm4ud3JhcD8/dGhpcy5hdXRvV3JhcCgpLHByZXZBY3Rvcjp0aGlzLnN0YXRlLnJlY29yZHMucHJldkFjdG9yLGxpbmtzOnt9LHByb3BlcnRpZXM6e30sYWN0b3JDbnQ6bnVsbCxyZWN0RGF0YTpudWxsLHR5cGU6aT8/InBhcnRpY2lwYW50In0pLHRoaXMuc3RhdGUucmVjb3Jkcy5wcmV2QWN0b3Ipe2xldCBsPXRoaXMuc3RhdGUucmVjb3Jkcy5hY3RvcnMuZ2V0KHRoaXMuc3RhdGUucmVjb3Jkcy5wcmV2QWN0b3IpO2wmJihsLm5leHRBY3Rvcj1lKX10aGlzLnN0YXRlLnJlY29yZHMuY3VycmVudEJveCYmdGhpcy5zdGF0ZS5yZWNvcmRzLmN1cnJlbnRCb3guYWN0b3JLZXlzLnB1c2goZSksdGhpcy5zdGF0ZS5yZWNvcmRzLnByZXZBY3Rvcj1lfWFjdGl2YXRpb25Db3VudChlKXtsZXQgcixuPTA7aWYoIWUpcmV0dXJuIDA7Zm9yKHI9MDtyPHRoaXMuc3RhdGUucmVjb3Jkcy5tZXNzYWdlcy5sZW5ndGg7cisrKXRoaXMuc3RhdGUucmVjb3Jkcy5tZXNzYWdlc1tyXS50eXBlPT09dGhpcy5MSU5FVFlQRS5BQ1RJVkVfU1RBUlQmJnRoaXMuc3RhdGUucmVjb3Jkcy5tZXNzYWdlc1tyXS5mcm9tPT09ZSYmbisrLHRoaXMuc3RhdGUucmVjb3Jkcy5tZXNzYWdlc1tyXS50eXBlPT09dGhpcy5MSU5FVFlQRS5BQ1RJVkVfRU5EJiZ0aGlzLnN0YXRlLnJlY29yZHMubWVzc2FnZXNbcl0uZnJvbT09PWUmJm4tLTtyZXR1cm4gbn1hZGRNZXNzYWdlKGUscixuLGkpe3RoaXMuc3RhdGUucmVjb3Jkcy5tZXNzYWdlcy5wdXNoKHtpZDp0aGlzLnN0YXRlLnJlY29yZHMubWVzc2FnZXMubGVuZ3RoLnRvU3RyaW5nKCksZnJvbTplLHRvOnIsbWVzc2FnZTpuLnRleHQsd3JhcDpuLndyYXA/P3RoaXMuYXV0b1dyYXAoKSxhbnN3ZXI6aX0pfWFkZFNpZ25hbChlLHIsbixpLGE9ITEpe2lmKGk9PT10aGlzLkxJTkVUWVBFLkFDVElWRV9FTkQmJnRoaXMuYWN0aXZhdGlvbkNvdW50KGU/PyIiKTwxKXtsZXQgbD1uZXcgRXJyb3IoIlRyeWluZyB0byBpbmFjdGl2YXRlIGFuIGluYWN0aXZlIHBhcnRpY2lwYW50ICgiK2UrIikiKTt0aHJvdyBsLmhhc2g9e3RleHQ6Ii0+Pi0iLHRva2VuOiItPj4tIixsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbIidBQ1RJVkVfUEFSVElDSVBBTlQnIl19LGx9cmV0dXJuIHRoaXMuc3RhdGUucmVjb3Jkcy5tZXNzYWdlcy5wdXNoKHtpZDp0aGlzLnN0YXRlLnJlY29yZHMubWVzc2FnZXMubGVuZ3RoLnRvU3RyaW5nKCksZnJvbTplLHRvOnIsbWVzc2FnZTpuPy50ZXh0Pz8iIix3cmFwOm4/LndyYXA/P3RoaXMuYXV0b1dyYXAoKSx0eXBlOmksYWN0aXZhdGU6YX0pLCEwfWhhc0F0TGVhc3RPbmVCb3goKXtyZXR1cm4gdGhpcy5zdGF0ZS5yZWNvcmRzLmJveGVzLmxlbmd0aD4wfWhhc0F0TGVhc3RPbmVCb3hXaXRoVGl0bGUoKXtyZXR1cm4gdGhpcy5zdGF0ZS5yZWNvcmRzLmJveGVzLnNvbWUoZT0+ZS5uYW1lKX1nZXRNZXNzYWdlcygpe3JldHVybiB0aGlzLnN0YXRlLnJlY29yZHMubWVzc2FnZXN9Z2V0Qm94ZXMoKXtyZXR1cm4gdGhpcy5zdGF0ZS5yZWNvcmRzLmJveGVzfWdldEFjdG9ycygpe3JldHVybiB0aGlzLnN0YXRlLnJlY29yZHMuYWN0b3JzfWdldENyZWF0ZWRBY3RvcnMoKXtyZXR1cm4gdGhpcy5zdGF0ZS5yZWNvcmRzLmNyZWF0ZWRBY3RvcnN9Z2V0RGVzdHJveWVkQWN0b3JzKCl7cmV0dXJuIHRoaXMuc3RhdGUucmVjb3Jkcy5kZXN0cm95ZWRBY3RvcnN9Z2V0QWN0b3IoZSl7cmV0dXJuIHRoaXMuc3RhdGUucmVjb3Jkcy5hY3RvcnMuZ2V0KGUpfWdldEFjdG9yS2V5cygpe3JldHVyblsuLi50aGlzLnN0YXRlLnJlY29yZHMuYWN0b3JzLmtleXMoKV19ZW5hYmxlU2VxdWVuY2VOdW1iZXJzKCl7dGhpcy5zdGF0ZS5yZWNvcmRzLnNlcXVlbmNlTnVtYmVyc0VuYWJsZWQ9ITB9ZGlzYWJsZVNlcXVlbmNlTnVtYmVycygpe3RoaXMuc3RhdGUucmVjb3Jkcy5zZXF1ZW5jZU51bWJlcnNFbmFibGVkPSExfXNob3dTZXF1ZW5jZU51bWJlcnMoKXtyZXR1cm4gdGhpcy5zdGF0ZS5yZWNvcmRzLnNlcXVlbmNlTnVtYmVyc0VuYWJsZWR9c2V0V3JhcChlKXt0aGlzLnN0YXRlLnJlY29yZHMud3JhcEVuYWJsZWQ9ZX1leHRyYWN0V3JhcChlKXtpZihlPT09dm9pZCAwKXJldHVybnt9O2U9ZS50cmltKCk7bGV0IHI9L146P3dyYXA6Ly5leGVjKGUpIT09bnVsbD8hMDovXjo/bm93cmFwOi8uZXhlYyhlKSE9PW51bGw/ITE6dm9pZCAwO3JldHVybntjbGVhbmVkVGV4dDoocj09PXZvaWQgMD9lOmUucmVwbGFjZSgvXjo/KD86bm8pP3dyYXA6LywiIikpLnRyaW0oKSx3cmFwOnJ9fWF1dG9XcmFwKCl7cmV0dXJuIHRoaXMuc3RhdGUucmVjb3Jkcy53cmFwRW5hYmxlZCE9PXZvaWQgMD90aGlzLnN0YXRlLnJlY29yZHMud3JhcEVuYWJsZWQ6bWUoKS5zZXF1ZW5jZT8ud3JhcD8/ITF9Y2xlYXIoKXt0aGlzLnN0YXRlLnJlc2V0KCksQXIoKX1wYXJzZU1lc3NhZ2UoZSl7bGV0IHI9ZS50cmltKCkse3dyYXA6bixjbGVhbmVkVGV4dDppfT10aGlzLmV4dHJhY3RXcmFwKHIpLGE9e3RleHQ6aSx3cmFwOm59O3JldHVybiBZLmRlYnVnKGBwYXJzZU1lc3NhZ2U6ICR7SlNPTi5zdHJpbmdpZnkoYSl9YCksYX1wYXJzZUJveERhdGEoZSl7bGV0IHI9L14oKD86cmdiYT98aHNsYT8pXHMqXCguKlwpfFx3KikoLiopJC8uZXhlYyhlKSxuPXI/LlsxXT9yWzFdLnRyaW0oKToidHJhbnNwYXJlbnQiLGk9cj8uWzJdP3JbMl0udHJpbSgpOnZvaWQgMDtpZih3aW5kb3c/LkNTUyl3aW5kb3cuQ1NTLnN1cHBvcnRzKCJjb2xvciIsbil8fChuPSJ0cmFuc3BhcmVudCIsaT1lLnRyaW0oKSk7ZWxzZXtsZXQgbD1uZXcgT3B0aW9uKCkuc3R5bGU7bC5jb2xvcj1uLGwuY29sb3IhPT1uJiYobj0idHJhbnNwYXJlbnQiLGk9ZS50cmltKCkpfWxldHt3cmFwOmEsY2xlYW5lZFRleHQ6c309dGhpcy5leHRyYWN0V3JhcChpKTtyZXR1cm57dGV4dDpzP1RyKHMsbWUoKSk6dm9pZCAwLGNvbG9yOm4sd3JhcDphfX1hZGROb3RlKGUscixuKXtsZXQgaT17YWN0b3I6ZSxwbGFjZW1lbnQ6cixtZXNzYWdlOm4udGV4dCx3cmFwOm4ud3JhcD8/dGhpcy5hdXRvV3JhcCgpfSxhPVtdLmNvbmNhdChlLGUpO3RoaXMuc3RhdGUucmVjb3Jkcy5ub3Rlcy5wdXNoKGkpLHRoaXMuc3RhdGUucmVjb3Jkcy5tZXNzYWdlcy5wdXNoKHtpZDp0aGlzLnN0YXRlLnJlY29yZHMubWVzc2FnZXMubGVuZ3RoLnRvU3RyaW5nKCksZnJvbTphWzBdLHRvOmFbMV0sbWVzc2FnZTpuLnRleHQsd3JhcDpuLndyYXA/P3RoaXMuYXV0b1dyYXAoKSx0eXBlOnRoaXMuTElORVRZUEUuTk9URSxwbGFjZW1lbnQ6cn0pfWFkZExpbmtzKGUscil7bGV0IG49dGhpcy5nZXRBY3RvcihlKTt0cnl7bGV0IGk9VHIoci50ZXh0LG1lKCkpO2k9aS5yZXBsYWNlKC8mZXF1YWxzOy9nLCI9IiksaT1pLnJlcGxhY2UoLyZhbXA7L2csIiYiKTtsZXQgYT1KU09OLnBhcnNlKGkpO3RoaXMuaW5zZXJ0TGlua3MobixhKX1jYXRjaChpKXtZLmVycm9yKCJlcnJvciB3aGlsZSBwYXJzaW5nIGFjdG9yIGxpbmsgdGV4dCIsaSl9fWFkZEFMaW5rKGUscil7bGV0IG49dGhpcy5nZXRBY3RvcihlKTt0cnl7bGV0IGk9e30sYT1UcihyLnRleHQsbWUoKSkscz1hLmluZGV4T2YoIkAiKTthPWEucmVwbGFjZSgvJmVxdWFsczsvZywiPSIpLGE9YS5yZXBsYWNlKC8mYW1wOy9nLCImIik7bGV0IGw9YS5zbGljZSgwLHMtMSkudHJpbSgpLHU9YS5zbGljZShzKzEpLnRyaW0oKTtpW2xdPXUsdGhpcy5pbnNlcnRMaW5rcyhuLGkpfWNhdGNoKGkpe1kuZXJyb3IoImVycm9yIHdoaWxlIHBhcnNpbmcgYWN0b3IgbGluayB0ZXh0IixpKX19aW5zZXJ0TGlua3MoZSxyKXtpZihlLmxpbmtzPT1udWxsKWUubGlua3M9cjtlbHNlIGZvcihsZXQgbiBpbiByKWUubGlua3Nbbl09cltuXX1hZGRQcm9wZXJ0aWVzKGUscil7bGV0IG49dGhpcy5nZXRBY3RvcihlKTt0cnl7bGV0IGk9VHIoci50ZXh0LG1lKCkpLGE9SlNPTi5wYXJzZShpKTt0aGlzLmluc2VydFByb3BlcnRpZXMobixhKX1jYXRjaChpKXtZLmVycm9yKCJlcnJvciB3aGlsZSBwYXJzaW5nIGFjdG9yIHByb3BlcnRpZXMgdGV4dCIsaSl9fWluc2VydFByb3BlcnRpZXMoZSxyKXtpZihlLnByb3BlcnRpZXM9PW51bGwpZS5wcm9wZXJ0aWVzPXI7ZWxzZSBmb3IobGV0IG4gaW4gcillLnByb3BlcnRpZXNbbl09cltuXX1ib3hFbmQoKXt0aGlzLnN0YXRlLnJlY29yZHMuY3VycmVudEJveD12b2lkIDB9YWRkRGV0YWlscyhlLHIpe2xldCBuPXRoaXMuZ2V0QWN0b3IoZSksaT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChyLnRleHQpO3RyeXtsZXQgYT1pLmlubmVySFRNTCxzPUpTT04ucGFyc2UoYSk7cy5wcm9wZXJ0aWVzJiZ0aGlzLmluc2VydFByb3BlcnRpZXMobixzLnByb3BlcnRpZXMpLHMubGlua3MmJnRoaXMuaW5zZXJ0TGlua3MobixzLmxpbmtzKX1jYXRjaChhKXtZLmVycm9yKCJlcnJvciB3aGlsZSBwYXJzaW5nIGFjdG9yIGRldGFpbHMgdGV4dCIsYSl9fWdldEFjdG9yUHJvcGVydHkoZSxyKXtpZihlPy5wcm9wZXJ0aWVzIT09dm9pZCAwKXJldHVybiBlLnByb3BlcnRpZXNbcl19YXBwbHkoZSl7aWYoQXJyYXkuaXNBcnJheShlKSllLmZvckVhY2gocj0+e3RoaXMuYXBwbHkocil9KTtlbHNlIHN3aXRjaChlLnR5cGUpe2Nhc2Uic2VxdWVuY2VJbmRleCI6dGhpcy5zdGF0ZS5yZWNvcmRzLm1lc3NhZ2VzLnB1c2goe2lkOnRoaXMuc3RhdGUucmVjb3Jkcy5tZXNzYWdlcy5sZW5ndGgudG9TdHJpbmcoKSxmcm9tOnZvaWQgMCx0bzp2b2lkIDAsbWVzc2FnZTp7c3RhcnQ6ZS5zZXF1ZW5jZUluZGV4LHN0ZXA6ZS5zZXF1ZW5jZUluZGV4U3RlcCx2aXNpYmxlOmUuc2VxdWVuY2VWaXNpYmxlfSx3cmFwOiExLHR5cGU6ZS5zaWduYWxUeXBlfSk7YnJlYWs7Y2FzZSJhZGRQYXJ0aWNpcGFudCI6dGhpcy5hZGRBY3RvcihlLmFjdG9yLGUuYWN0b3IsZS5kZXNjcmlwdGlvbixlLmRyYXcpO2JyZWFrO2Nhc2UiY3JlYXRlUGFydGljaXBhbnQiOmlmKHRoaXMuc3RhdGUucmVjb3Jkcy5hY3RvcnMuaGFzKGUuYWN0b3IpKXRocm93IG5ldyBFcnJvcigiSXQgaXMgbm90IHBvc3NpYmxlIHRvIGhhdmUgYWN0b3JzIHdpdGggdGhlIHNhbWUgaWQsIGV2ZW4gaWYgb25lIGlzIGRlc3Ryb3llZCBiZWZvcmUgdGhlIG5leHQgaXMgY3JlYXRlZC4gVXNlICdBUycgYWxpYXNlcyB0byBzaW11bGF0ZSB0aGUgYmVoYXZpb3IiKTt0aGlzLnN0YXRlLnJlY29yZHMubGFzdENyZWF0ZWQ9ZS5hY3Rvcix0aGlzLmFkZEFjdG9yKGUuYWN0b3IsZS5hY3RvcixlLmRlc2NyaXB0aW9uLGUuZHJhdyksdGhpcy5zdGF0ZS5yZWNvcmRzLmNyZWF0ZWRBY3RvcnMuc2V0KGUuYWN0b3IsdGhpcy5zdGF0ZS5yZWNvcmRzLm1lc3NhZ2VzLmxlbmd0aCk7YnJlYWs7Y2FzZSJkZXN0cm95UGFydGljaXBhbnQiOnRoaXMuc3RhdGUucmVjb3Jkcy5sYXN0RGVzdHJveWVkPWUuYWN0b3IsdGhpcy5zdGF0ZS5yZWNvcmRzLmRlc3Ryb3llZEFjdG9ycy5zZXQoZS5hY3Rvcix0aGlzLnN0YXRlLnJlY29yZHMubWVzc2FnZXMubGVuZ3RoKTticmVhaztjYXNlImFjdGl2ZVN0YXJ0Ijp0aGlzLmFkZFNpZ25hbChlLmFjdG9yLHZvaWQgMCx2b2lkIDAsZS5zaWduYWxUeXBlKTticmVhaztjYXNlImFjdGl2ZUVuZCI6dGhpcy5hZGRTaWduYWwoZS5hY3Rvcix2b2lkIDAsdm9pZCAwLGUuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJhZGROb3RlIjp0aGlzLmFkZE5vdGUoZS5hY3RvcixlLnBsYWNlbWVudCxlLnRleHQpO2JyZWFrO2Nhc2UiYWRkTGlua3MiOnRoaXMuYWRkTGlua3MoZS5hY3RvcixlLnRleHQpO2JyZWFrO2Nhc2UiYWRkQUxpbmsiOnRoaXMuYWRkQUxpbmsoZS5hY3RvcixlLnRleHQpO2JyZWFrO2Nhc2UiYWRkUHJvcGVydGllcyI6dGhpcy5hZGRQcm9wZXJ0aWVzKGUuYWN0b3IsZS50ZXh0KTticmVhaztjYXNlImFkZERldGFpbHMiOnRoaXMuYWRkRGV0YWlscyhlLmFjdG9yLGUudGV4dCk7YnJlYWs7Y2FzZSJhZGRNZXNzYWdlIjppZih0aGlzLnN0YXRlLnJlY29yZHMubGFzdENyZWF0ZWQpe2lmKGUudG8hPT10aGlzLnN0YXRlLnJlY29yZHMubGFzdENyZWF0ZWQpdGhyb3cgbmV3IEVycm9yKCJUaGUgY3JlYXRlZCBwYXJ0aWNpcGFudCAiK3RoaXMuc3RhdGUucmVjb3Jkcy5sYXN0Q3JlYXRlZC5uYW1lKyIgZG9lcyBub3QgaGF2ZSBhbiBhc3NvY2lhdGVkIGNyZWF0aW5nIG1lc3NhZ2UgYWZ0ZXIgaXRzIGRlY2xhcmF0aW9uLiBQbGVhc2UgY2hlY2sgdGhlIHNlcXVlbmNlIGRpYWdyYW0uIik7dGhpcy5zdGF0ZS5yZWNvcmRzLmxhc3RDcmVhdGVkPXZvaWQgMH1lbHNlIGlmKHRoaXMuc3RhdGUucmVjb3Jkcy5sYXN0RGVzdHJveWVkKXtpZihlLnRvIT09dGhpcy5zdGF0ZS5yZWNvcmRzLmxhc3REZXN0cm95ZWQmJmUuZnJvbSE9PXRoaXMuc3RhdGUucmVjb3Jkcy5sYXN0RGVzdHJveWVkKXRocm93IG5ldyBFcnJvcigiVGhlIGRlc3Ryb3llZCBwYXJ0aWNpcGFudCAiK3RoaXMuc3RhdGUucmVjb3Jkcy5sYXN0RGVzdHJveWVkLm5hbWUrIiBkb2VzIG5vdCBoYXZlIGFuIGFzc29jaWF0ZWQgZGVzdHJveWluZyBtZXNzYWdlIGFmdGVyIGl0cyBkZWNsYXJhdGlvbi4gUGxlYXNlIGNoZWNrIHRoZSBzZXF1ZW5jZSBkaWFncmFtLiIpO3RoaXMuc3RhdGUucmVjb3Jkcy5sYXN0RGVzdHJveWVkPXZvaWQgMH10aGlzLmFkZFNpZ25hbChlLmZyb20sZS50byxlLm1zZyxlLnNpZ25hbFR5cGUsZS5hY3RpdmF0ZSk7YnJlYWs7Y2FzZSJib3hTdGFydCI6dGhpcy5hZGRCb3goZS5ib3hEYXRhKTticmVhaztjYXNlImJveEVuZCI6dGhpcy5ib3hFbmQoKTticmVhaztjYXNlImxvb3BTdGFydCI6dGhpcy5hZGRTaWduYWwodm9pZCAwLHZvaWQgMCxlLmxvb3BUZXh0LGUuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJsb29wRW5kIjp0aGlzLmFkZFNpZ25hbCh2b2lkIDAsdm9pZCAwLHZvaWQgMCxlLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UicmVjdFN0YXJ0Ijp0aGlzLmFkZFNpZ25hbCh2b2lkIDAsdm9pZCAwLGUuY29sb3IsZS5zaWduYWxUeXBlKTticmVhaztjYXNlInJlY3RFbmQiOnRoaXMuYWRkU2lnbmFsKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGUuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJvcHRTdGFydCI6dGhpcy5hZGRTaWduYWwodm9pZCAwLHZvaWQgMCxlLm9wdFRleHQsZS5zaWduYWxUeXBlKTticmVhaztjYXNlIm9wdEVuZCI6dGhpcy5hZGRTaWduYWwodm9pZCAwLHZvaWQgMCx2b2lkIDAsZS5zaWduYWxUeXBlKTticmVhaztjYXNlImFsdFN0YXJ0Ijp0aGlzLmFkZFNpZ25hbCh2b2lkIDAsdm9pZCAwLGUuYWx0VGV4dCxlLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiZWxzZSI6dGhpcy5hZGRTaWduYWwodm9pZCAwLHZvaWQgMCxlLmFsdFRleHQsZS5zaWduYWxUeXBlKTticmVhaztjYXNlImFsdEVuZCI6dGhpcy5hZGRTaWduYWwodm9pZCAwLHZvaWQgMCx2b2lkIDAsZS5zaWduYWxUeXBlKTticmVhaztjYXNlInNldEFjY1RpdGxlIjpMcihlLnRleHQpO2JyZWFrO2Nhc2UicGFyU3RhcnQiOnRoaXMuYWRkU2lnbmFsKHZvaWQgMCx2b2lkIDAsZS5wYXJUZXh0LGUuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJhbmQiOnRoaXMuYWRkU2lnbmFsKHZvaWQgMCx2b2lkIDAsZS5wYXJUZXh0LGUuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJwYXJFbmQiOnRoaXMuYWRkU2lnbmFsKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGUuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJjcml0aWNhbFN0YXJ0Ijp0aGlzLmFkZFNpZ25hbCh2b2lkIDAsdm9pZCAwLGUuY3JpdGljYWxUZXh0LGUuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJvcHRpb24iOnRoaXMuYWRkU2lnbmFsKHZvaWQgMCx2b2lkIDAsZS5vcHRpb25UZXh0LGUuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJjcml0aWNhbEVuZCI6dGhpcy5hZGRTaWduYWwodm9pZCAwLHZvaWQgMCx2b2lkIDAsZS5zaWduYWxUeXBlKTticmVhaztjYXNlImJyZWFrU3RhcnQiOnRoaXMuYWRkU2lnbmFsKHZvaWQgMCx2b2lkIDAsZS5icmVha1RleHQsZS5zaWduYWxUeXBlKTticmVhaztjYXNlImJyZWFrRW5kIjp0aGlzLmFkZFNpZ25hbCh2b2lkIDAsdm9pZCAwLHZvaWQgMCxlLnNpZ25hbFR5cGUpO2JyZWFrfX1nZXRDb25maWcoKXtyZXR1cm4gbWUoKS5zZXF1ZW5jZX19fSk7dmFyIG9WZSxoZmUsZmZlPU4oKCk9PnsidXNlIHN0cmljdCI7b1ZlPW8odD0+YC5hY3RvciB7CiAgICBzdHJva2U6ICR7dC5hY3RvckJvcmRlcn07CiAgICBmaWxsOiAke3QuYWN0b3JCa2d9OwogIH0KCiAgdGV4dC5hY3RvciA+IHRzcGFuIHsKICAgIGZpbGw6ICR7dC5hY3RvclRleHRDb2xvcn07CiAgICBzdHJva2U6IG5vbmU7CiAgfQoKICAuYWN0b3ItbGluZSB7CiAgICBzdHJva2U6ICR7dC5hY3RvckxpbmVDb2xvcn07CiAgfQoKICAubWVzc2FnZUxpbmUwIHsKICAgIHN0cm9rZS13aWR0aDogMS41OwogICAgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsKICAgIHN0cm9rZTogJHt0LnNpZ25hbENvbG9yfTsKICB9CgogIC5tZXNzYWdlTGluZTEgewogICAgc3Ryb2tlLXdpZHRoOiAxLjU7CiAgICBzdHJva2UtZGFzaGFycmF5OiAyLCAyOwogICAgc3Ryb2tlOiAke3Quc2lnbmFsQ29sb3J9OwogIH0KCiAgI2Fycm93aGVhZCBwYXRoIHsKICAgIGZpbGw6ICR7dC5zaWduYWxDb2xvcn07CiAgICBzdHJva2U6ICR7dC5zaWduYWxDb2xvcn07CiAgfQoKICAuc2VxdWVuY2VOdW1iZXIgewogICAgZmlsbDogJHt0LnNlcXVlbmNlTnVtYmVyQ29sb3J9OwogIH0KCiAgI3NlcXVlbmNlbnVtYmVyIHsKICAgIGZpbGw6ICR7dC5zaWduYWxDb2xvcn07CiAgfQoKICAjY3Jvc3NoZWFkIHBhdGggewogICAgZmlsbDogJHt0LnNpZ25hbENvbG9yfTsKICAgIHN0cm9rZTogJHt0LnNpZ25hbENvbG9yfTsKICB9CgogIC5tZXNzYWdlVGV4dCB7CiAgICBmaWxsOiAke3Quc2lnbmFsVGV4dENvbG9yfTsKICAgIHN0cm9rZTogbm9uZTsKICB9CgogIC5sYWJlbEJveCB7CiAgICBzdHJva2U6ICR7dC5sYWJlbEJveEJvcmRlckNvbG9yfTsKICAgIGZpbGw6ICR7dC5sYWJlbEJveEJrZ0NvbG9yfTsKICB9CgogIC5sYWJlbFRleHQsIC5sYWJlbFRleHQgPiB0c3BhbiB7CiAgICBmaWxsOiAke3QubGFiZWxUZXh0Q29sb3J9OwogICAgc3Ryb2tlOiBub25lOwogIH0KCiAgLmxvb3BUZXh0LCAubG9vcFRleHQgPiB0c3BhbiB7CiAgICBmaWxsOiAke3QubG9vcFRleHRDb2xvcn07CiAgICBzdHJva2U6IG5vbmU7CiAgfQoKICAubG9vcExpbmUgewogICAgc3Ryb2tlLXdpZHRoOiAycHg7CiAgICBzdHJva2UtZGFzaGFycmF5OiAyLCAyOwogICAgc3Ryb2tlOiAke3QubGFiZWxCb3hCb3JkZXJDb2xvcn07CiAgICBmaWxsOiAke3QubGFiZWxCb3hCb3JkZXJDb2xvcn07CiAgfQoKICAubm90ZSB7CiAgICAvL3N0cm9rZTogI2RlY2M5MzsKICAgIHN0cm9rZTogJHt0Lm5vdGVCb3JkZXJDb2xvcn07CiAgICBmaWxsOiAke3Qubm90ZUJrZ0NvbG9yfTsKICB9CgogIC5ub3RlVGV4dCwgLm5vdGVUZXh0ID4gdHNwYW4gewogICAgZmlsbDogJHt0Lm5vdGVUZXh0Q29sb3J9OwogICAgc3Ryb2tlOiBub25lOwogIH0KCiAgLmFjdGl2YXRpb24wIHsKICAgIGZpbGw6ICR7dC5hY3RpdmF0aW9uQmtnQ29sb3J9OwogICAgc3Ryb2tlOiAke3QuYWN0aXZhdGlvbkJvcmRlckNvbG9yfTsKICB9CgogIC5hY3RpdmF0aW9uMSB7CiAgICBmaWxsOiAke3QuYWN0aXZhdGlvbkJrZ0NvbG9yfTsKICAgIHN0cm9rZTogJHt0LmFjdGl2YXRpb25Cb3JkZXJDb2xvcn07CiAgfQoKICAuYWN0aXZhdGlvbjIgewogICAgZmlsbDogJHt0LmFjdGl2YXRpb25Ca2dDb2xvcn07CiAgICBzdHJva2U6ICR7dC5hY3RpdmF0aW9uQm9yZGVyQ29sb3J9OwogIH0KCiAgLmFjdG9yUG9wdXBNZW51IHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB9CgogIC5hY3RvclBvcHVwTWVudVBhbmVsIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGZpbGw6ICR7dC5hY3RvckJrZ307CiAgICBib3gtc2hhZG93OiAwcHggOHB4IDE2cHggMHB4IHJnYmEoMCwwLDAsMC4yKTsKICAgIGZpbHRlcjogZHJvcC1zaGFkb3coM3B4IDVweCAycHggcmdiKDAgMCAwIC8gMC40KSk7Cn0KICAuYWN0b3ItbWFuIGxpbmUgewogICAgc3Ryb2tlOiAke3QuYWN0b3JCb3JkZXJ9OwogICAgZmlsbDogJHt0LmFjdG9yQmtnfTsKICB9CiAgLmFjdG9yLW1hbiBjaXJjbGUsIGxpbmUgewogICAgc3Ryb2tlOiAke3QuYWN0b3JCb3JkZXJ9OwogICAgZmlsbDogJHt0LmFjdG9yQmtnfTsKICAgIHN0cm9rZS13aWR0aDogMnB4OwogIH0KYCwiZ2V0U3R5bGVzIiksaGZlPW9WZX0pO3ZhciBBTyx2ZixwZmUsbWZlLGxWZSxkZmUsX08sY1ZlLHVWZSxUYixfcCxnZmUsVWMsRE8saFZlLGZWZSxkVmUscFZlLG1WZSxnVmUseVZlLHlmZSx2VmUseFZlLGJWZSx3VmUsVFZlLGtWZSxFVmUsdmZlLFNWZSxMTyxDVmUsaGkseGZlPU4oKCk9PnsidXNlIHN0cmljdCI7Z3IoKTtXdigpO2lyKCk7QU89U2EoejAoKSwxKTtqaSgpO3ZmPTE4KjIscGZlPSJhY3Rvci10b3AiLG1mZT0iYWN0b3ItYm90dG9tIixsVmU9ImFjdG9yLWJveCIsZGZlPSJhY3Rvci1tYW4iLF9PPW8oZnVuY3Rpb24odCxlKXtyZXR1cm4ga2QodCxlKX0sImRyYXdSZWN0IiksY1ZlPW8oZnVuY3Rpb24odCxlLHIsbixpKXtpZihlLmxpbmtzPT09dm9pZCAwfHxlLmxpbmtzPT09bnVsbHx8T2JqZWN0LmtleXMoZS5saW5rcykubGVuZ3RoPT09MClyZXR1cm57aGVpZ2h0OjAsd2lkdGg6MH07bGV0IGE9ZS5saW5rcyxzPWUuYWN0b3JDbnQsbD1lLnJlY3REYXRhO3ZhciB1PSJub25lIjtpJiYodT0iYmxvY2sgIWltcG9ydGFudCIpO2xldCBoPXQuYXBwZW5kKCJnIik7aC5hdHRyKCJpZCIsImFjdG9yIitzKyJfcG9wdXAiKSxoLmF0dHIoImNsYXNzIiwiYWN0b3JQb3B1cE1lbnUiKSxoLmF0dHIoImRpc3BsYXkiLHUpO3ZhciBmPSIiO2wuY2xhc3MhPT12b2lkIDAmJihmPSIgIitsLmNsYXNzKTtsZXQgZD1sLndpZHRoPnI/bC53aWR0aDpyLHA9aC5hcHBlbmQoInJlY3QiKTtpZihwLmF0dHIoImNsYXNzIiwiYWN0b3JQb3B1cE1lbnVQYW5lbCIrZikscC5hdHRyKCJ4IixsLngpLHAuYXR0cigieSIsbC5oZWlnaHQpLHAuYXR0cigiZmlsbCIsbC5maWxsKSxwLmF0dHIoInN0cm9rZSIsbC5zdHJva2UpLHAuYXR0cigid2lkdGgiLGQpLHAuYXR0cigiaGVpZ2h0IixsLmhlaWdodCkscC5hdHRyKCJyeCIsbC5yeCkscC5hdHRyKCJyeSIsbC5yeSksYSE9bnVsbCl7dmFyIG09MjA7Zm9yKGxldCB2IGluIGEpe3ZhciBnPWguYXBwZW5kKCJhIikseT0oMCxBTy5zYW5pdGl6ZVVybCkoYVt2XSk7Zy5hdHRyKCJ4bGluazpocmVmIix5KSxnLmF0dHIoInRhcmdldCIsIl9ibGFuayIpLENWZShuKSh2LGcsbC54KzEwLGwuaGVpZ2h0K20sZCwyMCx7Y2xhc3M6ImFjdG9yIn0sbiksbSs9MzB9fXJldHVybiBwLmF0dHIoImhlaWdodCIsbSkse2hlaWdodDpsLmhlaWdodCttLHdpZHRoOmR9fSwiZHJhd1BvcHVwIiksdVZlPW8oZnVuY3Rpb24odCl7cmV0dXJuInZhciBwdSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCciK3QrIicpOyBpZiAocHUgIT0gbnVsbCkgeyBwdS5zdHlsZS5kaXNwbGF5ID0gcHUuc3R5bGUuZGlzcGxheSA9PSAnYmxvY2snID8gJ25vbmUnIDogJ2Jsb2NrJzsgfSJ9LCJwb3B1cE1lbnVUb2dnbGUiKSxUYj1vKGFzeW5jIGZ1bmN0aW9uKHQsZSxyPW51bGwpe2xldCBuPXQuYXBwZW5kKCJmb3JlaWduT2JqZWN0IiksaT1hd2FpdCBtaChlLnRleHQsY3IoKSkscz1uLmFwcGVuZCgieGh0bWw6ZGl2IikuYXR0cigic3R5bGUiLCJ3aWR0aDogZml0LWNvbnRlbnQ7IikuYXR0cigieG1sbnMiLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIikuaHRtbChpKS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYobi5hdHRyKCJoZWlnaHQiLE1hdGgucm91bmQocy5oZWlnaHQpKS5hdHRyKCJ3aWR0aCIsTWF0aC5yb3VuZChzLndpZHRoKSksZS5jbGFzcz09PSJub3RlVGV4dCIpe2xldCBsPXQubm9kZSgpLmZpcnN0Q2hpbGQ7bC5zZXRBdHRyaWJ1dGUoImhlaWdodCIscy5oZWlnaHQrMiplLnRleHRNYXJnaW4pO2xldCB1PWwuZ2V0QkJveCgpO24uYXR0cigieCIsTWF0aC5yb3VuZCh1LngrdS53aWR0aC8yLXMud2lkdGgvMikpLmF0dHIoInkiLE1hdGgucm91bmQodS55K3UuaGVpZ2h0LzItcy5oZWlnaHQvMikpfWVsc2UgaWYocil7bGV0e3N0YXJ0eDpsLHN0b3B4OnUsc3RhcnR5Omh9PXI7aWYobD51KXtsZXQgZj1sO2w9dSx1PWZ9bi5hdHRyKCJ4IixNYXRoLnJvdW5kKGwrTWF0aC5hYnMobC11KS8yLXMud2lkdGgvMikpLGUuY2xhc3M9PT0ibG9vcFRleHQiP24uYXR0cigieSIsTWF0aC5yb3VuZChoKSk6bi5hdHRyKCJ5IixNYXRoLnJvdW5kKGgtcy5oZWlnaHQpKX1yZXR1cm5bbl19LCJkcmF3S2F0ZXgiKSxfcD1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9MCxuPTAsaT1lLnRleHQuc3BsaXQoWmUubGluZUJyZWFrUmVnZXgpLFthLHNdPUJvKGUuZm9udFNpemUpLGw9W10sdT0wLGg9bygoKT0+ZS55LCJ5ZnVuYyIpO2lmKGUudmFsaWduIT09dm9pZCAwJiZlLnRleHRNYXJnaW4hPT12b2lkIDAmJmUudGV4dE1hcmdpbj4wKXN3aXRjaChlLnZhbGlnbil7Y2FzZSJ0b3AiOmNhc2Uic3RhcnQiOmg9bygoKT0+TWF0aC5yb3VuZChlLnkrZS50ZXh0TWFyZ2luKSwieWZ1bmMiKTticmVhaztjYXNlIm1pZGRsZSI6Y2FzZSJjZW50ZXIiOmg9bygoKT0+TWF0aC5yb3VuZChlLnkrKHIrbitlLnRleHRNYXJnaW4pLzIpLCJ5ZnVuYyIpO2JyZWFrO2Nhc2UiYm90dG9tIjpjYXNlImVuZCI6aD1vKCgpPT5NYXRoLnJvdW5kKGUueSsocituKzIqZS50ZXh0TWFyZ2luKS1lLnRleHRNYXJnaW4pLCJ5ZnVuYyIpO2JyZWFrfWlmKGUuYW5jaG9yIT09dm9pZCAwJiZlLnRleHRNYXJnaW4hPT12b2lkIDAmJmUud2lkdGghPT12b2lkIDApc3dpdGNoKGUuYW5jaG9yKXtjYXNlImxlZnQiOmNhc2Uic3RhcnQiOmUueD1NYXRoLnJvdW5kKGUueCtlLnRleHRNYXJnaW4pLGUuYW5jaG9yPSJzdGFydCIsZS5kb21pbmFudEJhc2VsaW5lPSJtaWRkbGUiLGUuYWxpZ25tZW50QmFzZWxpbmU9Im1pZGRsZSI7YnJlYWs7Y2FzZSJtaWRkbGUiOmNhc2UiY2VudGVyIjplLng9TWF0aC5yb3VuZChlLngrZS53aWR0aC8yKSxlLmFuY2hvcj0ibWlkZGxlIixlLmRvbWluYW50QmFzZWxpbmU9Im1pZGRsZSIsZS5hbGlnbm1lbnRCYXNlbGluZT0ibWlkZGxlIjticmVhaztjYXNlInJpZ2h0IjpjYXNlImVuZCI6ZS54PU1hdGgucm91bmQoZS54K2Uud2lkdGgtZS50ZXh0TWFyZ2luKSxlLmFuY2hvcj0iZW5kIixlLmRvbWluYW50QmFzZWxpbmU9Im1pZGRsZSIsZS5hbGlnbm1lbnRCYXNlbGluZT0ibWlkZGxlIjticmVha31mb3IobGV0W2YsZF1vZiBpLmVudHJpZXMoKSl7ZS50ZXh0TWFyZ2luIT09dm9pZCAwJiZlLnRleHRNYXJnaW49PT0wJiZhIT09dm9pZCAwJiYodT1mKmEpO2xldCBwPXQuYXBwZW5kKCJ0ZXh0Iik7cC5hdHRyKCJ4IixlLngpLHAuYXR0cigieSIsaCgpKSxlLmFuY2hvciE9PXZvaWQgMCYmcC5hdHRyKCJ0ZXh0LWFuY2hvciIsZS5hbmNob3IpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIixlLmRvbWluYW50QmFzZWxpbmUpLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsZS5hbGlnbm1lbnRCYXNlbGluZSksZS5mb250RmFtaWx5IT09dm9pZCAwJiZwLnN0eWxlKCJmb250LWZhbWlseSIsZS5mb250RmFtaWx5KSxzIT09dm9pZCAwJiZwLnN0eWxlKCJmb250LXNpemUiLHMpLGUuZm9udFdlaWdodCE9PXZvaWQgMCYmcC5zdHlsZSgiZm9udC13ZWlnaHQiLGUuZm9udFdlaWdodCksZS5maWxsIT09dm9pZCAwJiZwLmF0dHIoImZpbGwiLGUuZmlsbCksZS5jbGFzcyE9PXZvaWQgMCYmcC5hdHRyKCJjbGFzcyIsZS5jbGFzcyksZS5keSE9PXZvaWQgMD9wLmF0dHIoImR5IixlLmR5KTp1IT09MCYmcC5hdHRyKCJkeSIsdSk7bGV0IG09ZHx8SDk7aWYoZS50c3Bhbil7bGV0IGc9cC5hcHBlbmQoInRzcGFuIik7Zy5hdHRyKCJ4IixlLngpLGUuZmlsbCE9PXZvaWQgMCYmZy5hdHRyKCJmaWxsIixlLmZpbGwpLGcudGV4dChtKX1lbHNlIHAudGV4dChtKTtlLnZhbGlnbiE9PXZvaWQgMCYmZS50ZXh0TWFyZ2luIT09dm9pZCAwJiZlLnRleHRNYXJnaW4+MCYmKG4rPShwLl9ncm91cHN8fHApWzBdWzBdLmdldEJCb3goKS5oZWlnaHQscj1uKSxsLnB1c2gocCl9cmV0dXJuIGx9LCJkcmF3VGV4dCIpLGdmZT1vKGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihpLGEscyxsLHUpe3JldHVybiBpKyIsIithKyIgIisoaStzKSsiLCIrYSsiICIrKGkrcykrIiwiKyhhK2wtdSkrIiAiKyhpK3MtdSoxLjIpKyIsIisoYStsKSsiICIraSsiLCIrKGErbCl9byhyLCJnZW5Qb2ludHMiKTtsZXQgbj10LmFwcGVuZCgicG9seWdvbiIpO3JldHVybiBuLmF0dHIoInBvaW50cyIscihlLngsZS55LGUud2lkdGgsZS5oZWlnaHQsNykpLG4uYXR0cigiY2xhc3MiLCJsYWJlbEJveCIpLGUueT1lLnkrZS5oZWlnaHQvMixfcCh0LGUpLG59LCJkcmF3TGFiZWwiKSxVYz0tMSxETz1vKCh0LGUscixuKT0+e3Quc2VsZWN0JiZyLmZvckVhY2goaT0+e2xldCBhPWUuZ2V0KGkpLHM9dC5zZWxlY3QoIiNhY3RvciIrYS5hY3RvckNudCk7IW4ubWlycm9yQWN0b3JzJiZhLnN0b3B5P3MuYXR0cigieTIiLGEuc3RvcHkrYS5oZWlnaHQvMik6bi5taXJyb3JBY3RvcnMmJnMuYXR0cigieTIiLGEuc3RvcHkpfSl9LCJmaXhMaWZlTGluZUhlaWdodHMiKSxoVmU9byhmdW5jdGlvbih0LGUscixuKXtsZXQgaT1uP2Uuc3RvcHk6ZS5zdGFydHksYT1lLngrZS53aWR0aC8yLHM9aStlLmhlaWdodCxsPXQuYXBwZW5kKCJnIikubG93ZXIoKTt2YXIgdT1sO258fChVYysrLE9iamVjdC5rZXlzKGUubGlua3N8fHt9KS5sZW5ndGgmJiFyLmZvcmNlTWVudXMmJnUuYXR0cigib25jbGljayIsdVZlKGBhY3RvciR7VWN9X3BvcHVwYCkpLmF0dHIoImN1cnNvciIsInBvaW50ZXIiKSx1LmFwcGVuZCgibGluZSIpLmF0dHIoImlkIiwiYWN0b3IiK1VjKS5hdHRyKCJ4MSIsYSkuYXR0cigieTEiLHMpLmF0dHIoIngyIixhKS5hdHRyKCJ5MiIsMmUzKS5hdHRyKCJjbGFzcyIsImFjdG9yLWxpbmUgMjAwIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMC41cHgiKS5hdHRyKCJzdHJva2UiLCIjOTk5IikuYXR0cigibmFtZSIsZS5uYW1lKSx1PWwuYXBwZW5kKCJnIiksZS5hY3RvckNudD1VYyxlLmxpbmtzIT1udWxsJiZ1LmF0dHIoImlkIiwicm9vdC0iK1VjKSk7bGV0IGg9VGwoKTt2YXIgZj0iYWN0b3IiO2UucHJvcGVydGllcz8uY2xhc3M/Zj1lLnByb3BlcnRpZXMuY2xhc3M6aC5maWxsPSIjZWFlYWVhIixuP2YrPWAgJHttZmV9YDpmKz1gICR7cGZlfWAsaC54PWUueCxoLnk9aSxoLndpZHRoPWUud2lkdGgsaC5oZWlnaHQ9ZS5oZWlnaHQsaC5jbGFzcz1mLGgucng9MyxoLnJ5PTMsaC5uYW1lPWUubmFtZTtsZXQgZD1fTyh1LGgpO2lmKGUucmVjdERhdGE9aCxlLnByb3BlcnRpZXM/Lmljb24pe2xldCBtPWUucHJvcGVydGllcy5pY29uLnRyaW0oKTttLmNoYXJBdCgwKT09PSJAIj9JcSh1LGgueCtoLndpZHRoLTIwLGgueSsxMCxtLnN1YnN0cigxKSk6TXEodSxoLngraC53aWR0aC0yMCxoLnkrMTAsbSl9TE8ocixwaShlLmRlc2NyaXB0aW9uKSkoZS5kZXNjcmlwdGlvbix1LGgueCxoLnksaC53aWR0aCxoLmhlaWdodCx7Y2xhc3M6YGFjdG9yICR7bFZlfWB9LHIpO2xldCBwPWUuaGVpZ2h0O2lmKGQubm9kZSl7bGV0IG09ZC5ub2RlKCkuZ2V0QkJveCgpO2UuaGVpZ2h0PW0uaGVpZ2h0LHA9bS5oZWlnaHR9cmV0dXJuIHB9LCJkcmF3QWN0b3JUeXBlUGFydGljaXBhbnQiKSxmVmU9byhmdW5jdGlvbih0LGUscixuKXtsZXQgaT1uP2Uuc3RvcHk6ZS5zdGFydHksYT1lLngrZS53aWR0aC8yLHM9aSs4MCxsPXQuYXBwZW5kKCJnIikubG93ZXIoKTtufHwoVWMrKyxsLmFwcGVuZCgibGluZSIpLmF0dHIoImlkIiwiYWN0b3IiK1VjKS5hdHRyKCJ4MSIsYSkuYXR0cigieTEiLHMpLmF0dHIoIngyIixhKS5hdHRyKCJ5MiIsMmUzKS5hdHRyKCJjbGFzcyIsImFjdG9yLWxpbmUgMjAwIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMC41cHgiKS5hdHRyKCJzdHJva2UiLCIjOTk5IikuYXR0cigibmFtZSIsZS5uYW1lKSxlLmFjdG9yQ250PVVjKTtsZXQgdT10LmFwcGVuZCgiZyIpLGg9ZGZlO24/aCs9YCAke21mZX1gOmgrPWAgJHtwZmV9YCx1LmF0dHIoImNsYXNzIixoKSx1LmF0dHIoIm5hbWUiLGUubmFtZSk7bGV0IGY9VGwoKTtmLng9ZS54LGYueT1pLGYuZmlsbD0iI2VhZWFlYSIsZi53aWR0aD1lLndpZHRoLGYuaGVpZ2h0PWUuaGVpZ2h0LGYuY2xhc3M9ImFjdG9yIixmLnJ4PTMsZi5yeT0zLHUuYXBwZW5kKCJsaW5lIikuYXR0cigiaWQiLCJhY3Rvci1tYW4tdG9yc28iK1VjKS5hdHRyKCJ4MSIsYSkuYXR0cigieTEiLGkrMjUpLmF0dHIoIngyIixhKS5hdHRyKCJ5MiIsaSs0NSksdS5hcHBlbmQoImxpbmUiKS5hdHRyKCJpZCIsImFjdG9yLW1hbi1hcm1zIitVYykuYXR0cigieDEiLGEtdmYvMikuYXR0cigieTEiLGkrMzMpLmF0dHIoIngyIixhK3ZmLzIpLmF0dHIoInkyIixpKzMzKSx1LmFwcGVuZCgibGluZSIpLmF0dHIoIngxIixhLXZmLzIpLmF0dHIoInkxIixpKzYwKS5hdHRyKCJ4MiIsYSkuYXR0cigieTIiLGkrNDUpLHUuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLGEpLmF0dHIoInkxIixpKzQ1KS5hdHRyKCJ4MiIsYSt2Zi8yLTIpLmF0dHIoInkyIixpKzYwKTtsZXQgZD11LmFwcGVuZCgiY2lyY2xlIik7ZC5hdHRyKCJjeCIsZS54K2Uud2lkdGgvMiksZC5hdHRyKCJjeSIsaSsxMCksZC5hdHRyKCJyIiwxNSksZC5hdHRyKCJ3aWR0aCIsZS53aWR0aCksZC5hdHRyKCJoZWlnaHQiLGUuaGVpZ2h0KTtsZXQgcD11Lm5vZGUoKS5nZXRCQm94KCk7cmV0dXJuIGUuaGVpZ2h0PXAuaGVpZ2h0LExPKHIscGkoZS5kZXNjcmlwdGlvbikpKGUuZGVzY3JpcHRpb24sdSxmLngsZi55KzM1LGYud2lkdGgsZi5oZWlnaHQse2NsYXNzOmBhY3RvciAke2RmZX1gfSxyKSxlLmhlaWdodH0sImRyYXdBY3RvclR5cGVBY3RvciIpLGRWZT1vKGFzeW5jIGZ1bmN0aW9uKHQsZSxyLG4pe3N3aXRjaChlLnR5cGUpe2Nhc2UiYWN0b3IiOnJldHVybiBhd2FpdCBmVmUodCxlLHIsbik7Y2FzZSJwYXJ0aWNpcGFudCI6cmV0dXJuIGF3YWl0IGhWZSh0LGUscixuKX19LCJkcmF3QWN0b3IiKSxwVmU9byhmdW5jdGlvbih0LGUscil7bGV0IGk9dC5hcHBlbmQoImciKTt5ZmUoaSxlKSxlLm5hbWUmJkxPKHIpKGUubmFtZSxpLGUueCxlLnkrKGUudGV4dE1heEhlaWdodHx8MCkvMixlLndpZHRoLDAse2NsYXNzOiJ0ZXh0In0sciksaS5sb3dlcigpfSwiZHJhd0JveCIpLG1WZT1vKGZ1bmN0aW9uKHQpe3JldHVybiB0LmFwcGVuZCgiZyIpfSwiYW5jaG9yRWxlbWVudCIpLGdWZT1vKGZ1bmN0aW9uKHQsZSxyLG4saSl7bGV0IGE9VGwoKSxzPWUuYW5jaG9yZWQ7YS54PWUuc3RhcnR4LGEueT1lLnN0YXJ0eSxhLmNsYXNzPSJhY3RpdmF0aW9uIitpJTMsYS53aWR0aD1lLnN0b3B4LWUuc3RhcnR4LGEuaGVpZ2h0PXItZS5zdGFydHksX08ocyxhKX0sImRyYXdBY3RpdmF0aW9uIikseVZlPW8oYXN5bmMgZnVuY3Rpb24odCxlLHIsbil7bGV0e2JveE1hcmdpbjppLGJveFRleHRNYXJnaW46YSxsYWJlbEJveEhlaWdodDpzLGxhYmVsQm94V2lkdGg6bCxtZXNzYWdlRm9udEZhbWlseTp1LG1lc3NhZ2VGb250U2l6ZTpoLG1lc3NhZ2VGb250V2VpZ2h0OmZ9PW4sZD10LmFwcGVuZCgiZyIpLHA9byhmdW5jdGlvbih5LHYseCxiKXtyZXR1cm4gZC5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIseSkuYXR0cigieTEiLHYpLmF0dHIoIngyIix4KS5hdHRyKCJ5MiIsYikuYXR0cigiY2xhc3MiLCJsb29wTGluZSIpfSwiZHJhd0xvb3BMaW5lIik7cChlLnN0YXJ0eCxlLnN0YXJ0eSxlLnN0b3B4LGUuc3RhcnR5KSxwKGUuc3RvcHgsZS5zdGFydHksZS5zdG9weCxlLnN0b3B5KSxwKGUuc3RhcnR4LGUuc3RvcHksZS5zdG9weCxlLnN0b3B5KSxwKGUuc3RhcnR4LGUuc3RhcnR5LGUuc3RhcnR4LGUuc3RvcHkpLGUuc2VjdGlvbnMhPT12b2lkIDAmJmUuc2VjdGlvbnMuZm9yRWFjaChmdW5jdGlvbih5KXtwKGUuc3RhcnR4LHkueSxlLnN0b3B4LHkueSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIzLCAzIil9KTtsZXQgbT1IdigpO20udGV4dD1yLG0ueD1lLnN0YXJ0eCxtLnk9ZS5zdGFydHksbS5mb250RmFtaWx5PXUsbS5mb250U2l6ZT1oLG0uZm9udFdlaWdodD1mLG0uYW5jaG9yPSJtaWRkbGUiLG0udmFsaWduPSJtaWRkbGUiLG0udHNwYW49ITEsbS53aWR0aD1sfHw1MCxtLmhlaWdodD1zfHwyMCxtLnRleHRNYXJnaW49YSxtLmNsYXNzPSJsYWJlbFRleHQiLGdmZShkLG0pLG09dmZlKCksbS50ZXh0PWUudGl0bGUsbS54PWUuc3RhcnR4K2wvMisoZS5zdG9weC1lLnN0YXJ0eCkvMixtLnk9ZS5zdGFydHkraSthLG0uYW5jaG9yPSJtaWRkbGUiLG0udmFsaWduPSJtaWRkbGUiLG0udGV4dE1hcmdpbj1hLG0uY2xhc3M9Imxvb3BUZXh0IixtLmZvbnRGYW1pbHk9dSxtLmZvbnRTaXplPWgsbS5mb250V2VpZ2h0PWYsbS53cmFwPSEwO2xldCBnPXBpKG0udGV4dCk/YXdhaXQgVGIoZCxtLGUpOl9wKGQsbSk7aWYoZS5zZWN0aW9uVGl0bGVzIT09dm9pZCAwKXtmb3IobGV0W3ksdl1vZiBPYmplY3QuZW50cmllcyhlLnNlY3Rpb25UaXRsZXMpKWlmKHYubWVzc2FnZSl7bS50ZXh0PXYubWVzc2FnZSxtLng9ZS5zdGFydHgrKGUuc3RvcHgtZS5zdGFydHgpLzIsbS55PWUuc2VjdGlvbnNbeV0ueStpK2EsbS5jbGFzcz0ibG9vcFRleHQiLG0uYW5jaG9yPSJtaWRkbGUiLG0udmFsaWduPSJtaWRkbGUiLG0udHNwYW49ITEsbS5mb250RmFtaWx5PXUsbS5mb250U2l6ZT1oLG0uZm9udFdlaWdodD1mLG0ud3JhcD1lLndyYXAscGkobS50ZXh0KT8oZS5zdGFydHk9ZS5zZWN0aW9uc1t5XS55LGF3YWl0IFRiKGQsbSxlKSk6X3AoZCxtKTtsZXQgeD1NYXRoLnJvdW5kKGcubWFwKGI9PihiLl9ncm91cHN8fGIpWzBdWzBdLmdldEJCb3goKS5oZWlnaHQpLnJlZHVjZSgoYix3KT0+Yit3KSk7ZS5zZWN0aW9uc1t5XS5oZWlnaHQrPXgtKGkrYSl9fXJldHVybiBlLmhlaWdodD1NYXRoLnJvdW5kKGUuc3RvcHktZS5zdGFydHkpLGR9LCJkcmF3TG9vcCIpLHlmZT1vKGZ1bmN0aW9uKHQsZSl7cTUodCxlKX0sImRyYXdCYWNrZ3JvdW5kUmVjdCIpLHZWZT1vKGZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJzeW1ib2wiKS5hdHRyKCJpZCIsImRhdGFiYXNlIikuYXR0cigiZmlsbC1ydWxlIiwiZXZlbm9kZCIpLmF0dHIoImNsaXAtcnVsZSIsImV2ZW5vZGQiKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJzY2FsZSguNSkiKS5hdHRyKCJkIiwiTTEyLjI1OC4wMDFsLjI1Ni4wMDQuMjU1LjAwNS4yNTMuMDA4LjI1MS4wMS4yNDkuMDEyLjI0Ny4wMTUuMjQ2LjAxNi4yNDIuMDE5LjI0MS4wMi4yMzkuMDIzLjIzNi4wMjQuMjMzLjAyNy4yMzEuMDI4LjIyOS4wMzEuMjI1LjAzMi4yMjMuMDM0LjIyLjAzNi4yMTcuMDM4LjIxNC4wNC4yMTEuMDQxLjIwOC4wNDMuMjA1LjA0NS4yMDEuMDQ2LjE5OC4wNDguMTk0LjA1LjE5MS4wNTEuMTg3LjA1My4xODMuMDU0LjE4LjA1Ni4xNzUuMDU3LjE3Mi4wNTkuMTY4LjA2LjE2My4wNjEuMTYuMDYzLjE1NS4wNjQuMTUuMDY2LjA3NC4wMzMuMDczLjAzMy4wNzEuMDM0LjA3LjAzNC4wNjkuMDM1LjA2OC4wMzUuMDY3LjAzNS4wNjYuMDM1LjA2NC4wMzYuMDY0LjAzNi4wNjIuMDM2LjA2LjAzNi4wNi4wMzcuMDU4LjAzNy4wNTguMDM3LjA1NS4wMzguMDU1LjAzOC4wNTMuMDM4LjA1Mi4wMzguMDUxLjAzOS4wNS4wMzkuMDQ4LjAzOS4wNDcuMDM5LjA0NS4wNC4wNDQuMDQuMDQzLjA0LjA0MS4wNC4wNC4wNDEuMDM5LjA0MS4wMzcuMDQxLjAzNi4wNDEuMDM0LjA0MS4wMzMuMDQyLjAzMi4wNDIuMDMuMDQyLjAyOS4wNDIuMDI3LjA0Mi4wMjYuMDQzLjAyNC4wNDMuMDIzLjA0My4wMjEuMDQzLjAyLjA0My4wMTguMDQ0LjAxNy4wNDMuMDE1LjA0NC4wMTMuMDQ0LjAxMi4wNDQuMDExLjA0NS4wMDkuMDQ0LjAwNy4wNDUuMDA2LjA0NS4wMDQuMDQ1LjAwMi4wNDUuMDAxLjA0NXYxN2wtLjAwMS4wNDUtLjAwMi4wNDUtLjAwNC4wNDUtLjAwNi4wNDUtLjAwNy4wNDUtLjAwOS4wNDQtLjAxMS4wNDUtLjAxMi4wNDQtLjAxMy4wNDQtLjAxNS4wNDQtLjAxNy4wNDMtLjAxOC4wNDQtLjAyLjA0My0uMDIxLjA0My0uMDIzLjA0My0uMDI0LjA0My0uMDI2LjA0My0uMDI3LjA0Mi0uMDI5LjA0Mi0uMDMuMDQyLS4wMzIuMDQyLS4wMzMuMDQyLS4wMzQuMDQxLS4wMzYuMDQxLS4wMzcuMDQxLS4wMzkuMDQxLS4wNC4wNDEtLjA0MS4wNC0uMDQzLjA0LS4wNDQuMDQtLjA0NS4wNC0uMDQ3LjAzOS0uMDQ4LjAzOS0uMDUuMDM5LS4wNTEuMDM5LS4wNTIuMDM4LS4wNTMuMDM4LS4wNTUuMDM4LS4wNTUuMDM4LS4wNTguMDM3LS4wNTguMDM3LS4wNi4wMzctLjA2LjAzNi0uMDYyLjAzNi0uMDY0LjAzNi0uMDY0LjAzNi0uMDY2LjAzNS0uMDY3LjAzNS0uMDY4LjAzNS0uMDY5LjAzNS0uMDcuMDM0LS4wNzEuMDM0LS4wNzMuMDMzLS4wNzQuMDMzLS4xNS4wNjYtLjE1NS4wNjQtLjE2LjA2My0uMTYzLjA2MS0uMTY4LjA2LS4xNzIuMDU5LS4xNzUuMDU3LS4xOC4wNTYtLjE4My4wNTQtLjE4Ny4wNTMtLjE5MS4wNTEtLjE5NC4wNS0uMTk4LjA0OC0uMjAxLjA0Ni0uMjA1LjA0NS0uMjA4LjA0My0uMjExLjA0MS0uMjE0LjA0LS4yMTcuMDM4LS4yMi4wMzYtLjIyMy4wMzQtLjIyNS4wMzItLjIyOS4wMzEtLjIzMS4wMjgtLjIzMy4wMjctLjIzNi4wMjQtLjIzOS4wMjMtLjI0MS4wMi0uMjQyLjAxOS0uMjQ2LjAxNi0uMjQ3LjAxNS0uMjQ5LjAxMi0uMjUxLjAxLS4yNTMuMDA4LS4yNTUuMDA1LS4yNTYuMDA0LS4yNTguMDAxLS4yNTgtLjAwMS0uMjU2LS4wMDQtLjI1NS0uMDA1LS4yNTMtLjAwOC0uMjUxLS4wMS0uMjQ5LS4wMTItLjI0Ny0uMDE1LS4yNDUtLjAxNi0uMjQzLS4wMTktLjI0MS0uMDItLjIzOC0uMDIzLS4yMzYtLjAyNC0uMjM0LS4wMjctLjIzMS0uMDI4LS4yMjgtLjAzMS0uMjI2LS4wMzItLjIyMy0uMDM0LS4yMi0uMDM2LS4yMTctLjAzOC0uMjE0LS4wNC0uMjExLS4wNDEtLjIwOC0uMDQzLS4yMDQtLjA0NS0uMjAxLS4wNDYtLjE5OC0uMDQ4LS4xOTUtLjA1LS4xOS0uMDUxLS4xODctLjA1My0uMTg0LS4wNTQtLjE3OS0uMDU2LS4xNzYtLjA1Ny0uMTcyLS4wNTktLjE2Ny0uMDYtLjE2NC0uMDYxLS4xNTktLjA2My0uMTU1LS4wNjQtLjE1MS0uMDY2LS4wNzQtLjAzMy0uMDcyLS4wMzMtLjA3Mi0uMDM0LS4wNy0uMDM0LS4wNjktLjAzNS0uMDY4LS4wMzUtLjA2Ny0uMDM1LS4wNjYtLjAzNS0uMDY0LS4wMzYtLjA2My0uMDM2LS4wNjItLjAzNi0uMDYxLS4wMzYtLjA2LS4wMzctLjA1OC0uMDM3LS4wNTctLjAzNy0uMDU2LS4wMzgtLjA1NS0uMDM4LS4wNTMtLjAzOC0uMDUyLS4wMzgtLjA1MS0uMDM5LS4wNDktLjAzOS0uMDQ5LS4wMzktLjA0Ni0uMDM5LS4wNDYtLjA0LS4wNDQtLjA0LS4wNDMtLjA0LS4wNDEtLjA0LS4wNC0uMDQxLS4wMzktLjA0MS0uMDM3LS4wNDEtLjAzNi0uMDQxLS4wMzQtLjA0MS0uMDMzLS4wNDItLjAzMi0uMDQyLS4wMy0uMDQyLS4wMjktLjA0Mi0uMDI3LS4wNDItLjAyNi0uMDQzLS4wMjQtLjA0My0uMDIzLS4wNDMtLjAyMS0uMDQzLS4wMi0uMDQzLS4wMTgtLjA0NC0uMDE3LS4wNDMtLjAxNS0uMDQ0LS4wMTMtLjA0NC0uMDEyLS4wNDQtLjAxMS0uMDQ1LS4wMDktLjA0NC0uMDA3LS4wNDUtLjAwNi0uMDQ1LS4wMDQtLjA0NS0uMDAyLS4wNDUtLjAwMS0uMDQ1di0xN2wuMDAxLS4wNDUuMDAyLS4wNDUuMDA0LS4wNDUuMDA2LS4wNDUuMDA3LS4wNDUuMDA5LS4wNDQuMDExLS4wNDUuMDEyLS4wNDQuMDEzLS4wNDQuMDE1LS4wNDQuMDE3LS4wNDMuMDE4LS4wNDQuMDItLjA0My4wMjEtLjA0My4wMjMtLjA0My4wMjQtLjA0My4wMjYtLjA0My4wMjctLjA0Mi4wMjktLjA0Mi4wMy0uMDQyLjAzMi0uMDQyLjAzMy0uMDQyLjAzNC0uMDQxLjAzNi0uMDQxLjAzNy0uMDQxLjAzOS0uMDQxLjA0LS4wNDEuMDQxLS4wNC4wNDMtLjA0LjA0NC0uMDQuMDQ2LS4wNC4wNDYtLjAzOS4wNDktLjAzOS4wNDktLjAzOS4wNTEtLjAzOS4wNTItLjAzOC4wNTMtLjAzOC4wNTUtLjAzOC4wNTYtLjAzOC4wNTctLjAzNy4wNTgtLjAzNy4wNi0uMDM3LjA2MS0uMDM2LjA2Mi0uMDM2LjA2My0uMDM2LjA2NC0uMDM2LjA2Ni0uMDM1LjA2Ny0uMDM1LjA2OC0uMDM1LjA2OS0uMDM1LjA3LS4wMzQuMDcyLS4wMzQuMDcyLS4wMzMuMDc0LS4wMzMuMTUxLS4wNjYuMTU1LS4wNjQuMTU5LS4wNjMuMTY0LS4wNjEuMTY3LS4wNi4xNzItLjA1OS4xNzYtLjA1Ny4xNzktLjA1Ni4xODQtLjA1NC4xODctLjA1My4xOS0uMDUxLjE5NS0uMDUuMTk4LS4wNDguMjAxLS4wNDYuMjA0LS4wNDUuMjA4LS4wNDMuMjExLS4wNDEuMjE0LS4wNC4yMTctLjAzOC4yMi0uMDM2LjIyMy0uMDM0LjIyNi0uMDMyLjIyOC0uMDMxLjIzMS0uMDI4LjIzNC0uMDI3LjIzNi0uMDI0LjIzOC0uMDIzLjI0MS0uMDIuMjQzLS4wMTkuMjQ1LS4wMTYuMjQ3LS4wMTUuMjQ5LS4wMTIuMjUxLS4wMS4yNTMtLjAwOC4yNTUtLjAwNS4yNTYtLjAwNC4yNTgtLjAwMS4yNTguMDAxem0tOS4yNTggMjAuNDk5di4wMWwuMDAxLjAyMS4wMDMuMDIxLjAwNC4wMjIuMDA1LjAyMS4wMDYuMDIyLjAwNy4wMjIuMDA5LjAyMy4wMS4wMjIuMDExLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE1LjAyMy4wMTYuMDI0LjAxNy4wMjMuMDE4LjAyNC4wMTkuMDI0LjAyMS4wMjQuMDIyLjAyNS4wMjMuMDI0LjAyNC4wMjUuMDUyLjA0OS4wNTYuMDUuMDYxLjA1MS4wNjYuMDUxLjA3LjA1MS4wNzUuMDUxLjA3OS4wNTIuMDg0LjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk3LjA1Mi4xMDIuMDUxLjEwNS4wNTIuMTEuMDUyLjExNC4wNTEuMTE5LjA1MS4xMjMuMDUxLjEyNy4wNS4xMzEuMDUuMTM1LjA1LjEzOS4wNDguMTQ0LjA0OS4xNDcuMDQ3LjE1Mi4wNDcuMTU1LjA0Ny4xNi4wNDUuMTYzLjA0NS4xNjcuMDQzLjE3MS4wNDMuMTc2LjA0MS4xNzguMDQxLjE4My4wMzkuMTg3LjAzOS4xOS4wMzcuMTk0LjAzNS4xOTcuMDM1LjIwMi4wMzMuMjA0LjAzMS4yMDkuMDMuMjEyLjAyOS4yMTYuMDI3LjIxOS4wMjUuMjIyLjAyNC4yMjYuMDIxLjIzLjAyLjIzMy4wMTguMjM2LjAxNi4yNC4wMTUuMjQzLjAxMi4yNDYuMDEuMjQ5LjAwOC4yNTMuMDA1LjI1Ni4wMDQuMjU5LjAwMS4yNi0uMDAxLjI1Ny0uMDA0LjI1NC0uMDA1LjI1LS4wMDguMjQ3LS4wMTEuMjQ0LS4wMTIuMjQxLS4wMTQuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMjEuMjI2LS4wMjEuMjI0LS4wMjQuMjItLjAyNi4yMTYtLjAyNy4yMTItLjAyOC4yMS0uMDMxLjIwNS0uMDMxLjIwMi0uMDM0LjE5OC0uMDM0LjE5NC0uMDM2LjE5MS0uMDM3LjE4Ny0uMDM5LjE4My0uMDQuMTc5LS4wNC4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0NC4xNjMtLjA0NS4xNi0uMDQ2LjE1NS0uMDQ2LjE1Mi0uMDQ3LjE0OC0uMDQ4LjE0My0uMDQ5LjEzOS0uMDQ5LjEzNi0uMDUuMTMxLS4wNS4xMjYtLjA1LjEyMy0uMDUxLjExOC0uMDUyLjExNC0uMDUxLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTMuMDgzLS4wNTEuMDc5LS4wNTIuMDc0LS4wNTIuMDctLjA1MS4wNjUtLjA1MS4wNi0uMDUxLjA1Ni0uMDUuMDUxLS4wNS4wMjMtLjAyNC4wMjMtLjAyNS4wMjEtLjAyNC4wMi0uMDI0LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDI0LjAxNS0uMDIzLjAxNC0uMDI0LjAxMy0uMDIzLjAxMi0uMDIzLjAxLS4wMjMuMDEtLjAyMi4wMDgtLjAyMi4wMDYtLjAyMi4wMDYtLjAyMi4wMDQtLjAyMi4wMDQtLjAyMS4wMDEtLjAyMS4wMDEtLjAyMXYtNC4xMjdsLS4wNzcuMDU1LS4wOC4wNTMtLjA4My4wNTQtLjA4NS4wNTMtLjA4Ny4wNTItLjA5LjA1Mi0uMDkzLjA1MS0uMDk1LjA1LS4wOTcuMDUtLjEuMDQ5LS4xMDIuMDQ5LS4xMDUuMDQ4LS4xMDYuMDQ3LS4xMDkuMDQ3LS4xMTEuMDQ2LS4xMTQuMDQ1LS4xMTUuMDQ1LS4xMTguMDQ0LS4xMi4wNDMtLjEyMi4wNDItLjEyNC4wNDItLjEyNi4wNDEtLjEyOC4wNC0uMTMuMDQtLjEzMi4wMzgtLjEzNC4wMzgtLjEzNS4wMzctLjEzOC4wMzctLjEzOS4wMzUtLjE0Mi4wMzUtLjE0My4wMzQtLjE0NC4wMzMtLjE0Ny4wMzItLjE0OC4wMzEtLjE1LjAzLS4xNTEuMDMtLjE1My4wMjktLjE1NC4wMjctLjE1Ni4wMjctLjE1OC4wMjYtLjE1OS4wMjUtLjE2MS4wMjQtLjE2Mi4wMjMtLjE2My4wMjItLjE2NS4wMjEtLjE2Ni4wMi0uMTY3LjAxOS0uMTY5LjAxOC0uMTY5LjAxNy0uMTcxLjAxNi0uMTczLjAxNS0uMTczLjAxNC0uMTc1LjAxMy0uMTc1LjAxMi0uMTc3LjAxMS0uMTc4LjAxLS4xNzkuMDA4LS4xNzkuMDA4LS4xODEuMDA2LS4xODIuMDA1LS4xODIuMDA0LS4xODQuMDAzLS4xODQuMDAyaC0uMzdsLS4xODQtLjAwMi0uMTg0LS4wMDMtLjE4Mi0uMDA0LS4xODItLjAwNS0uMTgxLS4wMDYtLjE3OS0uMDA4LS4xNzktLjAwOC0uMTc4LS4wMS0uMTc2LS4wMTEtLjE3Ni0uMDEyLS4xNzUtLjAxMy0uMTczLS4wMTQtLjE3Mi0uMDE1LS4xNzEtLjAxNi0uMTctLjAxNy0uMTY5LS4wMTgtLjE2Ny0uMDE5LS4xNjYtLjAyLS4xNjUtLjAyMS0uMTYzLS4wMjItLjE2Mi0uMDIzLS4xNjEtLjAyNC0uMTU5LS4wMjUtLjE1Ny0uMDI2LS4xNTYtLjAyNy0uMTU1LS4wMjctLjE1My0uMDI5LS4xNTEtLjAzLS4xNS0uMDMtLjE0OC0uMDMxLS4xNDYtLjAzMi0uMTQ1LS4wMzMtLjE0My0uMDM0LS4xNDEtLjAzNS0uMTQtLjAzNS0uMTM3LS4wMzctLjEzNi0uMDM3LS4xMzQtLjAzOC0uMTMyLS4wMzgtLjEzLS4wNC0uMTI4LS4wNC0uMTI2LS4wNDEtLjEyNC0uMDQyLS4xMjItLjA0Mi0uMTItLjA0NC0uMTE3LS4wNDMtLjExNi0uMDQ1LS4xMTMtLjA0NS0uMTEyLS4wNDYtLjEwOS0uMDQ3LS4xMDYtLjA0Ny0uMTA1LS4wNDgtLjEwMi0uMDQ5LS4xLS4wNDktLjA5Ny0uMDUtLjA5NS0uMDUtLjA5My0uMDUyLS4wOS0uMDUxLS4wODctLjA1Mi0uMDg1LS4wNTMtLjA4My0uMDU0LS4wOC0uMDU0LS4wNzctLjA1NHY0LjEyN3ptMC01LjY1NHYuMDExbC4wMDEuMDIxLjAwMy4wMjEuMDA0LjAyMS4wMDUuMDIyLjAwNi4wMjIuMDA3LjAyMi4wMDkuMDIyLjAxLjAyMi4wMTEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTUuMDI0LjAxNi4wMjMuMDE3LjAyNC4wMTguMDI0LjAxOS4wMjQuMDIxLjAyNC4wMjIuMDI0LjAyMy4wMjUuMDI0LjAyNC4wNTIuMDUuMDU2LjA1LjA2MS4wNS4wNjYuMDUxLjA3LjA1MS4wNzUuMDUyLjA3OS4wNTEuMDg0LjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk3LjA1Mi4xMDIuMDUyLjEwNS4wNTIuMTEuMDUxLjExNC4wNTEuMTE5LjA1Mi4xMjMuMDUuMTI3LjA1MS4xMzEuMDUuMTM1LjA0OS4xMzkuMDQ5LjE0NC4wNDguMTQ3LjA0OC4xNTIuMDQ3LjE1NS4wNDYuMTYuMDQ1LjE2My4wNDUuMTY3LjA0NC4xNzEuMDQyLjE3Ni4wNDIuMTc4LjA0LjE4My4wNC4xODcuMDM4LjE5LjAzNy4xOTQuMDM2LjE5Ny4wMzQuMjAyLjAzMy4yMDQuMDMyLjIwOS4wMy4yMTIuMDI4LjIxNi4wMjcuMjE5LjAyNS4yMjIuMDI0LjIyNi4wMjIuMjMuMDIuMjMzLjAxOC4yMzYuMDE2LjI0LjAxNC4yNDMuMDEyLjI0Ni4wMS4yNDkuMDA4LjI1My4wMDYuMjU2LjAwMy4yNTkuMDAxLjI2LS4wMDEuMjU3LS4wMDMuMjU0LS4wMDYuMjUtLjAwOC4yNDctLjAxLjI0NC0uMDEyLjI0MS0uMDE1LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIuMjI2LS4wMjIuMjI0LS4wMjQuMjItLjAyNS4yMTYtLjAyNy4yMTItLjAyOS4yMS0uMDMuMjA1LS4wMzIuMjAyLS4wMzMuMTk4LS4wMzUuMTk0LS4wMzYuMTkxLS4wMzcuMTg3LS4wMzkuMTgzLS4wMzkuMTc5LS4wNDEuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDQuMTYzLS4wNDUuMTYtLjA0NS4xNTUtLjA0Ny4xNTItLjA0Ny4xNDgtLjA0OC4xNDMtLjA0OC4xMzktLjA1LjEzNi0uMDQ5LjEzMS0uMDUuMTI2LS4wNTEuMTIzLS4wNTEuMTE4LS4wNTEuMTE0LS4wNTIuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1Mi4wODMtLjA1Mi4wNzktLjA1Mi4wNzQtLjA1MS4wNy0uMDUyLjA2NS0uMDUxLjA2LS4wNS4wNTYtLjA1MS4wNTEtLjA0OS4wMjMtLjAyNS4wMjMtLjAyNC4wMjEtLjAyNS4wMi0uMDI0LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDI0LjAxNS0uMDIzLjAxNC0uMDIzLjAxMy0uMDI0LjAxMi0uMDIyLjAxLS4wMjMuMDEtLjAyMy4wMDgtLjAyMi4wMDYtLjAyMi4wMDYtLjAyMi4wMDQtLjAyMS4wMDQtLjAyMi4wMDEtLjAyMS4wMDEtLjAyMXYtNC4xMzlsLS4wNzcuMDU0LS4wOC4wNTQtLjA4My4wNTQtLjA4NS4wNTItLjA4Ny4wNTMtLjA5LjA1MS0uMDkzLjA1MS0uMDk1LjA1MS0uMDk3LjA1LS4xLjA0OS0uMTAyLjA0OS0uMTA1LjA0OC0uMTA2LjA0Ny0uMTA5LjA0Ny0uMTExLjA0Ni0uMTE0LjA0NS0uMTE1LjA0NC0uMTE4LjA0NC0uMTIuMDQ0LS4xMjIuMDQyLS4xMjQuMDQyLS4xMjYuMDQxLS4xMjguMDQtLjEzLjAzOS0uMTMyLjAzOS0uMTM0LjAzOC0uMTM1LjAzNy0uMTM4LjAzNi0uMTM5LjAzNi0uMTQyLjAzNS0uMTQzLjAzMy0uMTQ0LjAzMy0uMTQ3LjAzMy0uMTQ4LjAzMS0uMTUuMDMtLjE1MS4wMy0uMTUzLjAyOC0uMTU0LjAyOC0uMTU2LjAyNy0uMTU4LjAyNi0uMTU5LjAyNS0uMTYxLjAyNC0uMTYyLjAyMy0uMTYzLjAyMi0uMTY1LjAyMS0uMTY2LjAyLS4xNjcuMDE5LS4xNjkuMDE4LS4xNjkuMDE3LS4xNzEuMDE2LS4xNzMuMDE1LS4xNzMuMDE0LS4xNzUuMDEzLS4xNzUuMDEyLS4xNzcuMDExLS4xNzguMDA5LS4xNzkuMDA5LS4xNzkuMDA3LS4xODEuMDA3LS4xODIuMDA1LS4xODIuMDA0LS4xODQuMDAzLS4xODQuMDAyaC0uMzdsLS4xODQtLjAwMi0uMTg0LS4wMDMtLjE4Mi0uMDA0LS4xODItLjAwNS0uMTgxLS4wMDctLjE3OS0uMDA3LS4xNzktLjAwOS0uMTc4LS4wMDktLjE3Ni0uMDExLS4xNzYtLjAxMi0uMTc1LS4wMTMtLjE3My0uMDE0LS4xNzItLjAxNS0uMTcxLS4wMTYtLjE3LS4wMTctLjE2OS0uMDE4LS4xNjctLjAxOS0uMTY2LS4wMi0uMTY1LS4wMjEtLjE2My0uMDIyLS4xNjItLjAyMy0uMTYxLS4wMjQtLjE1OS0uMDI1LS4xNTctLjAyNi0uMTU2LS4wMjctLjE1NS0uMDI4LS4xNTMtLjAyOC0uMTUxLS4wMy0uMTUtLjAzLS4xNDgtLjAzMS0uMTQ2LS4wMzMtLjE0NS0uMDMzLS4xNDMtLjAzMy0uMTQxLS4wMzUtLjE0LS4wMzYtLjEzNy0uMDM2LS4xMzYtLjAzNy0uMTM0LS4wMzgtLjEzMi0uMDM5LS4xMy0uMDM5LS4xMjgtLjA0LS4xMjYtLjA0MS0uMTI0LS4wNDItLjEyMi0uMDQzLS4xMi0uMDQzLS4xMTctLjA0NC0uMTE2LS4wNDQtLjExMy0uMDQ2LS4xMTItLjA0Ni0uMTA5LS4wNDYtLjEwNi0uMDQ3LS4xMDUtLjA0OC0uMTAyLS4wNDktLjEtLjA0OS0uMDk3LS4wNS0uMDk1LS4wNTEtLjA5My0uMDUxLS4wOS0uMDUxLS4wODctLjA1My0uMDg1LS4wNTItLjA4My0uMDU0LS4wOC0uMDU0LS4wNzctLjA1NHY0LjEzOXptMC01LjY2NnYuMDExbC4wMDEuMDIuMDAzLjAyMi4wMDQuMDIxLjAwNS4wMjIuMDA2LjAyMS4wMDcuMDIyLjAwOS4wMjMuMDEuMDIyLjAxMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNS4wMjMuMDE2LjAyNC4wMTcuMDI0LjAxOC4wMjMuMDE5LjAyNC4wMjEuMDI1LjAyMi4wMjQuMDIzLjAyNC4wMjQuMDI1LjA1Mi4wNS4wNTYuMDUuMDYxLjA1LjA2Ni4wNTEuMDcuMDUxLjA3NS4wNTIuMDc5LjA1MS4wODQuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTcuMDUyLjEwMi4wNTIuMTA1LjA1MS4xMS4wNTIuMTE0LjA1MS4xMTkuMDUxLjEyMy4wNTEuMTI3LjA1LjEzMS4wNS4xMzUuMDUuMTM5LjA0OS4xNDQuMDQ4LjE0Ny4wNDguMTUyLjA0Ny4xNTUuMDQ2LjE2LjA0NS4xNjMuMDQ1LjE2Ny4wNDMuMTcxLjA0My4xNzYuMDQyLjE3OC4wNC4xODMuMDQuMTg3LjAzOC4xOS4wMzcuMTk0LjAzNi4xOTcuMDM0LjIwMi4wMzMuMjA0LjAzMi4yMDkuMDMuMjEyLjAyOC4yMTYuMDI3LjIxOS4wMjUuMjIyLjAyNC4yMjYuMDIxLjIzLjAyLjIzMy4wMTguMjM2LjAxNy4yNC4wMTQuMjQzLjAxMi4yNDYuMDEuMjQ5LjAwOC4yNTMuMDA2LjI1Ni4wMDMuMjU5LjAwMS4yNi0uMDAxLjI1Ny0uMDAzLjI1NC0uMDA2LjI1LS4wMDguMjQ3LS4wMS4yNDQtLjAxMy4yNDEtLjAxNC4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyLjIyNi0uMDIyLjIyNC0uMDI0LjIyLS4wMjUuMjE2LS4wMjcuMjEyLS4wMjkuMjEtLjAzLjIwNS0uMDMyLjIwMi0uMDMzLjE5OC0uMDM1LjE5NC0uMDM2LjE5MS0uMDM3LjE4Ny0uMDM5LjE4My0uMDM5LjE3OS0uMDQxLjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQ0LjE2My0uMDQ1LjE2LS4wNDUuMTU1LS4wNDcuMTUyLS4wNDcuMTQ4LS4wNDguMTQzLS4wNDkuMTM5LS4wNDkuMTM2LS4wNDkuMTMxLS4wNTEuMTI2LS4wNS4xMjMtLjA1MS4xMTgtLjA1Mi4xMTQtLjA1MS4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUyLjA4My0uMDUyLjA3OS0uMDUyLjA3NC0uMDUyLjA3LS4wNTEuMDY1LS4wNTEuMDYtLjA1MS4wNTYtLjA1LjA1MS0uMDQ5LjAyMy0uMDI1LjAyMy0uMDI1LjAyMS0uMDI0LjAyLS4wMjQuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjQuMDE1LS4wMjMuMDE0LS4wMjQuMDEzLS4wMjMuMDEyLS4wMjMuMDEtLjAyMi4wMS0uMDIzLjAwOC0uMDIyLjAwNi0uMDIyLjAwNi0uMDIyLjAwNC0uMDIyLjAwNC0uMDIxLjAwMS0uMDIxLjAwMS0uMDIxdi00LjE1M2wtLjA3Ny4wNTQtLjA4LjA1NC0uMDgzLjA1My0uMDg1LjA1My0uMDg3LjA1My0uMDkuMDUxLS4wOTMuMDUxLS4wOTUuMDUxLS4wOTcuMDUtLjEuMDQ5LS4xMDIuMDQ4LS4xMDUuMDQ4LS4xMDYuMDQ4LS4xMDkuMDQ2LS4xMTEuMDQ2LS4xMTQuMDQ2LS4xMTUuMDQ0LS4xMTguMDQ0LS4xMi4wNDMtLjEyMi4wNDMtLjEyNC4wNDItLjEyNi4wNDEtLjEyOC4wNC0uMTMuMDM5LS4xMzIuMDM5LS4xMzQuMDM4LS4xMzUuMDM3LS4xMzguMDM2LS4xMzkuMDM2LS4xNDIuMDM0LS4xNDMuMDM0LS4xNDQuMDMzLS4xNDcuMDMyLS4xNDguMDMyLS4xNS4wMy0uMTUxLjAzLS4xNTMuMDI4LS4xNTQuMDI4LS4xNTYuMDI3LS4xNTguMDI2LS4xNTkuMDI0LS4xNjEuMDI0LS4xNjIuMDIzLS4xNjMuMDIzLS4xNjUuMDIxLS4xNjYuMDItLjE2Ny4wMTktLjE2OS4wMTgtLjE2OS4wMTctLjE3MS4wMTYtLjE3My4wMTUtLjE3My4wMTQtLjE3NS4wMTMtLjE3NS4wMTItLjE3Ny4wMS0uMTc4LjAxLS4xNzkuMDA5LS4xNzkuMDA3LS4xODEuMDA2LS4xODIuMDA2LS4xODIuMDA0LS4xODQuMDAzLS4xODQuMDAxLS4xODUuMDAxLS4xODUtLjAwMS0uMTg0LS4wMDEtLjE4NC0uMDAzLS4xODItLjAwNC0uMTgyLS4wMDYtLjE4MS0uMDA2LS4xNzktLjAwNy0uMTc5LS4wMDktLjE3OC0uMDEtLjE3Ni0uMDEtLjE3Ni0uMDEyLS4xNzUtLjAxMy0uMTczLS4wMTQtLjE3Mi0uMDE1LS4xNzEtLjAxNi0uMTctLjAxNy0uMTY5LS4wMTgtLjE2Ny0uMDE5LS4xNjYtLjAyLS4xNjUtLjAyMS0uMTYzLS4wMjMtLjE2Mi0uMDIzLS4xNjEtLjAyNC0uMTU5LS4wMjQtLjE1Ny0uMDI2LS4xNTYtLjAyNy0uMTU1LS4wMjgtLjE1My0uMDI4LS4xNTEtLjAzLS4xNS0uMDMtLjE0OC0uMDMyLS4xNDYtLjAzMi0uMTQ1LS4wMzMtLjE0My0uMDM0LS4xNDEtLjAzNC0uMTQtLjAzNi0uMTM3LS4wMzYtLjEzNi0uMDM3LS4xMzQtLjAzOC0uMTMyLS4wMzktLjEzLS4wMzktLjEyOC0uMDQxLS4xMjYtLjA0MS0uMTI0LS4wNDEtLjEyMi0uMDQzLS4xMi0uMDQzLS4xMTctLjA0NC0uMTE2LS4wNDQtLjExMy0uMDQ2LS4xMTItLjA0Ni0uMTA5LS4wNDYtLjEwNi0uMDQ4LS4xMDUtLjA0OC0uMTAyLS4wNDgtLjEtLjA1LS4wOTctLjA0OS0uMDk1LS4wNTEtLjA5My0uMDUxLS4wOS0uMDUyLS4wODctLjA1Mi0uMDg1LS4wNTMtLjA4My0uMDUzLS4wOC0uMDU0LS4wNzctLjA1NHY0LjE1M3ptOC43NC04LjE3OWwtLjI1Ny4wMDQtLjI1NC4wMDUtLjI1LjAwOC0uMjQ3LjAxMS0uMjQ0LjAxMi0uMjQxLjAxNC0uMjM3LjAxNi0uMjMzLjAxOC0uMjMxLjAyMS0uMjI2LjAyMi0uMjI0LjAyMy0uMjIuMDI2LS4yMTYuMDI3LS4yMTIuMDI4LS4yMS4wMzEtLjIwNS4wMzItLjIwMi4wMzMtLjE5OC4wMzQtLjE5NC4wMzYtLjE5MS4wMzgtLjE4Ny4wMzgtLjE4My4wNC0uMTc5LjA0MS0uMTc1LjA0Mi0uMTcyLjA0My0uMTY4LjA0My0uMTYzLjA0NS0uMTYuMDQ2LS4xNTUuMDQ2LS4xNTIuMDQ4LS4xNDguMDQ4LS4xNDMuMDQ4LS4xMzkuMDQ5LS4xMzYuMDUtLjEzMS4wNS0uMTI2LjA1MS0uMTIzLjA1MS0uMTE4LjA1MS0uMTE0LjA1Mi0uMTEuMDUyLS4xMDYuMDUyLS4xMDEuMDUyLS4wOTYuMDUyLS4wOTIuMDUyLS4wODguMDUyLS4wODMuMDUyLS4wNzkuMDUyLS4wNzQuMDUxLS4wNy4wNTItLjA2NS4wNTEtLjA2LjA1LS4wNTYuMDUtLjA1MS4wNS0uMDIzLjAyNS0uMDIzLjAyNC0uMDIxLjAyNC0uMDIuMDI1LS4wMTkuMDI0LS4wMTguMDI0LS4wMTcuMDIzLS4wMTUuMDI0LS4wMTQuMDIzLS4wMTMuMDIzLS4wMTIuMDIzLS4wMS4wMjMtLjAxLjAyMi0uMDA4LjAyMi0uMDA2LjAyMy0uMDA2LjAyMS0uMDA0LjAyMi0uMDA0LjAyMS0uMDAxLjAyMS0uMDAxLjAyMS4wMDEuMDIxLjAwMS4wMjEuMDA0LjAyMS4wMDQuMDIyLjAwNi4wMjEuMDA2LjAyMy4wMDguMDIyLjAxLjAyMi4wMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNC4wMjMuMDE1LjAyNC4wMTcuMDIzLjAxOC4wMjQuMDE5LjAyNC4wMi4wMjUuMDIxLjAyNC4wMjMuMDI0LjAyMy4wMjUuMDUxLjA1LjA1Ni4wNS4wNi4wNS4wNjUuMDUxLjA3LjA1Mi4wNzQuMDUxLjA3OS4wNTIuMDgzLjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk2LjA1Mi4xMDEuMDUyLjEwNi4wNTIuMTEuMDUyLjExNC4wNTIuMTE4LjA1MS4xMjMuMDUxLjEyNi4wNTEuMTMxLjA1LjEzNi4wNS4xMzkuMDQ5LjE0My4wNDguMTQ4LjA0OC4xNTIuMDQ4LjE1NS4wNDYuMTYuMDQ2LjE2My4wNDUuMTY4LjA0My4xNzIuMDQzLjE3NS4wNDIuMTc5LjA0MS4xODMuMDQuMTg3LjAzOC4xOTEuMDM4LjE5NC4wMzYuMTk4LjAzNC4yMDIuMDMzLjIwNS4wMzIuMjEuMDMxLjIxMi4wMjguMjE2LjAyNy4yMi4wMjYuMjI0LjAyMy4yMjYuMDIyLjIzMS4wMjEuMjMzLjAxOC4yMzcuMDE2LjI0MS4wMTQuMjQ0LjAxMi4yNDcuMDExLjI1LjAwOC4yNTQuMDA1LjI1Ny4wMDQuMjYuMDAxLjI2LS4wMDEuMjU3LS4wMDQuMjU0LS4wMDUuMjUtLjAwOC4yNDctLjAxMS4yNDQtLjAxMi4yNDEtLjAxNC4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyMS4yMjYtLjAyMi4yMjQtLjAyMy4yMi0uMDI2LjIxNi0uMDI3LjIxMi0uMDI4LjIxLS4wMzEuMjA1LS4wMzIuMjAyLS4wMzMuMTk4LS4wMzQuMTk0LS4wMzYuMTkxLS4wMzguMTg3LS4wMzguMTgzLS4wNC4xNzktLjA0MS4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0My4xNjMtLjA0NS4xNi0uMDQ2LjE1NS0uMDQ2LjE1Mi0uMDQ4LjE0OC0uMDQ4LjE0My0uMDQ4LjEzOS0uMDQ5LjEzNi0uMDUuMTMxLS4wNS4xMjYtLjA1MS4xMjMtLjA1MS4xMTgtLjA1MS4xMTQtLjA1Mi4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUyLjA4My0uMDUyLjA3OS0uMDUyLjA3NC0uMDUxLjA3LS4wNTIuMDY1LS4wNTEuMDYtLjA1LjA1Ni0uMDUuMDUxLS4wNS4wMjMtLjAyNS4wMjMtLjAyNC4wMjEtLjAyNC4wMi0uMDI1LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDIzLjAxNS0uMDI0LjAxNC0uMDIzLjAxMy0uMDIzLjAxMi0uMDIzLjAxLS4wMjMuMDEtLjAyMi4wMDgtLjAyMi4wMDYtLjAyMy4wMDYtLjAyMS4wMDQtLjAyMi4wMDQtLjAyMS4wMDEtLjAyMS4wMDEtLjAyMS0uMDAxLS4wMjEtLjAwMS0uMDIxLS4wMDQtLjAyMS0uMDA0LS4wMjItLjAwNi0uMDIxLS4wMDYtLjAyMy0uMDA4LS4wMjItLjAxLS4wMjItLjAxLS4wMjMtLjAxMi0uMDIzLS4wMTMtLjAyMy0uMDE0LS4wMjMtLjAxNS0uMDI0LS4wMTctLjAyMy0uMDE4LS4wMjQtLjAxOS0uMDI0LS4wMi0uMDI1LS4wMjEtLjAyNC0uMDIzLS4wMjQtLjAyMy0uMDI1LS4wNTEtLjA1LS4wNTYtLjA1LS4wNi0uMDUtLjA2NS0uMDUxLS4wNy0uMDUyLS4wNzQtLjA1MS0uMDc5LS4wNTItLjA4My0uMDUyLS4wODgtLjA1Mi0uMDkyLS4wNTItLjA5Ni0uMDUyLS4xMDEtLjA1Mi0uMTA2LS4wNTItLjExLS4wNTItLjExNC0uMDUyLS4xMTgtLjA1MS0uMTIzLS4wNTEtLjEyNi0uMDUxLS4xMzEtLjA1LS4xMzYtLjA1LS4xMzktLjA0OS0uMTQzLS4wNDgtLjE0OC0uMDQ4LS4xNTItLjA0OC0uMTU1LS4wNDYtLjE2LS4wNDYtLjE2My0uMDQ1LS4xNjgtLjA0My0uMTcyLS4wNDMtLjE3NS0uMDQyLS4xNzktLjA0MS0uMTgzLS4wNC0uMTg3LS4wMzgtLjE5MS0uMDM4LS4xOTQtLjAzNi0uMTk4LS4wMzQtLjIwMi0uMDMzLS4yMDUtLjAzMi0uMjEtLjAzMS0uMjEyLS4wMjgtLjIxNi0uMDI3LS4yMi0uMDI2LS4yMjQtLjAyMy0uMjI2LS4wMjItLjIzMS0uMDIxLS4yMzMtLjAxOC0uMjM3LS4wMTYtLjI0MS0uMDE0LS4yNDQtLjAxMi0uMjQ3LS4wMTEtLjI1LS4wMDgtLjI1NC0uMDA1LS4yNTctLjAwNC0uMjYtLjAwMS0uMjYuMDAxeiIpfSwiaW5zZXJ0RGF0YWJhc2VJY29uIikseFZlPW8oZnVuY3Rpb24odCl7dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoInN5bWJvbCIpLmF0dHIoImlkIiwiY29tcHV0ZXIiKS5hdHRyKCJ3aWR0aCIsIjI0IikuYXR0cigiaGVpZ2h0IiwiMjQiKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJzY2FsZSguNSkiKS5hdHRyKCJkIiwiTTIgMnYxM2gyMHYtMTNoLTIwem0xOCAxMWgtMTZ2LTloMTZ2OXptLTEwLjIyOCA2bC40NjYtMWgzLjUyNGwuNDY3IDFoLTQuNDU3em0xNC4yMjggM2gtMjRsMi02aDIuMTA0bC0xLjMzIDRoMTguNDVsLTEuMjk3LTRoMi4wNzNsMiA2em0tNS0xMGgtMTR2LTdoMTR2N3oiKX0sImluc2VydENvbXB1dGVySWNvbiIpLGJWZT1vKGZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJzeW1ib2wiKS5hdHRyKCJpZCIsImNsb2NrIikuYXR0cigid2lkdGgiLCIyNCIpLmF0dHIoImhlaWdodCIsIjI0IikuYXBwZW5kKCJwYXRoIikuYXR0cigidHJhbnNmb3JtIiwic2NhbGUoLjUpIikuYXR0cigiZCIsIk0xMiAyYzUuNTE0IDAgMTAgNC40ODYgMTAgMTBzLTQuNDg2IDEwLTEwIDEwLTEwLTQuNDg2LTEwLTEwIDQuNDg2LTEwIDEwLTEwem0wLTJjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJzNS4zNzMgMTIgMTIgMTIgMTItNS4zNzMgMTItMTItNS4zNzMtMTItMTItMTJ6bTUuODQ4IDEyLjQ1OWMuMjAyLjAzOC4yMDIuMzMzLjAwMS4zNzItMS45MDcuMzYxLTYuMDQ1IDEuMTExLTYuNTQ3IDEuMTExLS43MTkgMC0xLjMwMS0uNTgyLTEuMzAxLTEuMzAxIDAtLjUxMi43Ny01LjQ0NyAxLjEyNS03LjQ0NS4wMzQtLjE5Mi4zMTItLjE4MS4zNDMuMDE0bC45ODUgNi4yMzggNS4zOTQgMS4wMTF6Iil9LCJpbnNlcnRDbG9ja0ljb24iKSx3VmU9byhmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJhcnJvd2hlYWQiKS5hdHRyKCJyZWZYIiw3LjkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTIpLmF0dHIoIm1hcmtlckhlaWdodCIsMTIpLmF0dHIoIm9yaWVudCIsImF1dG8tc3RhcnQtcmV2ZXJzZSIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIC0xIDAgTCAxMCA1IEwgMCAxMCB6Iil9LCJpbnNlcnRBcnJvd0hlYWQiKSxUVmU9byhmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJmaWxsZWQtaGVhZCIpLmF0dHIoInJlZlgiLDE1LjUpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDE0LDcgTDksMSBaIil9LCJpbnNlcnRBcnJvd0ZpbGxlZEhlYWQiKSxrVmU9byhmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJzZXF1ZW5jZW51bWJlciIpLmF0dHIoInJlZlgiLDE1KS5hdHRyKCJyZWZZIiwxNSkuYXR0cigibWFya2VyV2lkdGgiLDYwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsMTUpLmF0dHIoImN5IiwxNSkuYXR0cigiciIsNil9LCJpbnNlcnRTZXF1ZW5jZU51bWJlciIpLEVWZT1vKGZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImNyb3NzaGVhZCIpLmF0dHIoIm1hcmtlcldpZHRoIiwxNSkuYXR0cigibWFya2VySGVpZ2h0Iiw4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXR0cigicmVmWCIsNCkuYXR0cigicmVmWSIsNC41KS5hcHBlbmQoInBhdGgiKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInN0cm9rZSIsIiMwMDAwMDAiKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjAsIDAiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxcHQiKS5hdHRyKCJkIiwiTSAxLDIgTCA2LDcgTSA2LDIgTCAxLDciKX0sImluc2VydEFycm93Q3Jvc3NIZWFkIiksdmZlPW8oZnVuY3Rpb24oKXtyZXR1cm57eDowLHk6MCxmaWxsOnZvaWQgMCxhbmNob3I6dm9pZCAwLHN0eWxlOiIjNjY2Iix3aWR0aDp2b2lkIDAsaGVpZ2h0OnZvaWQgMCx0ZXh0TWFyZ2luOjAscng6MCxyeTowLHRzcGFuOiEwLHZhbGlnbjp2b2lkIDB9fSwiZ2V0VGV4dE9iaiIpLFNWZT1vKGZ1bmN0aW9uKCl7cmV0dXJue3g6MCx5OjAsZmlsbDoiI0VERjJBRSIsc3Ryb2tlOiIjNjY2Iix3aWR0aDoxMDAsYW5jaG9yOiJzdGFydCIsaGVpZ2h0OjEwMCxyeDowLHJ5OjB9fSwiZ2V0Tm90ZVJlY3QiKSxMTz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoYSxzLGwsdSxoLGYsZCl7bGV0IHA9cy5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixsK2gvMikuYXR0cigieSIsdStmLzIrNSkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dChhKTtpKHAsZCl9byh0LCJieVRleHQiKTtmdW5jdGlvbiBlKGEscyxsLHUsaCxmLGQscCl7bGV0e2FjdG9yRm9udFNpemU6bSxhY3RvckZvbnRGYW1pbHk6ZyxhY3RvckZvbnRXZWlnaHQ6eX09cCxbdix4XT1CbyhtKSxiPWEuc3BsaXQoWmUubGluZUJyZWFrUmVnZXgpO2ZvcihsZXQgdz0wO3c8Yi5sZW5ndGg7dysrKXtsZXQgQz13KnYtdiooYi5sZW5ndGgtMSkvMixUPXMuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsbCtoLzIpLmF0dHIoInkiLHUpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnN0eWxlKCJmb250LXNpemUiLHgpLnN0eWxlKCJmb250LXdlaWdodCIseSkuc3R5bGUoImZvbnQtZmFtaWx5IixnKTtULmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixsK2gvMikuYXR0cigiZHkiLEMpLnRleHQoYlt3XSksVC5hdHRyKCJ5Iix1K2YvMikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLGkoVCxkKX19byhlLCJieVRzcGFuIik7ZnVuY3Rpb24gcihhLHMsbCx1LGgsZixkLHApe2xldCBtPXMuYXBwZW5kKCJzd2l0Y2giKSx5PW0uYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigieCIsbCkuYXR0cigieSIsdSkuYXR0cigid2lkdGgiLGgpLmF0dHIoImhlaWdodCIsZikuYXBwZW5kKCJ4aHRtbDpkaXYiKS5zdHlsZSgiZGlzcGxheSIsInRhYmxlIikuc3R5bGUoImhlaWdodCIsIjEwMCUiKS5zdHlsZSgid2lkdGgiLCIxMDAlIik7eS5hcHBlbmQoImRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUtY2VsbCIpLnN0eWxlKCJ0ZXh0LWFsaWduIiwiY2VudGVyIikuc3R5bGUoInZlcnRpY2FsLWFsaWduIiwibWlkZGxlIikudGV4dChhKSxlKGEsbSxsLHUsaCxmLGQscCksaSh5LGQpfW8ociwiYnlGbyIpO2FzeW5jIGZ1bmN0aW9uIG4oYSxzLGwsdSxoLGYsZCxwKXtsZXQgbT1hd2FpdCBpZChhLGNyKCkpLGc9cy5hcHBlbmQoInN3aXRjaCIpLHY9Zy5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ4IixsK2gvMi1tLndpZHRoLzIpLmF0dHIoInkiLHUrZi8yLW0uaGVpZ2h0LzIpLmF0dHIoIndpZHRoIixtLndpZHRoKS5hdHRyKCJoZWlnaHQiLG0uaGVpZ2h0KS5hcHBlbmQoInhodG1sOmRpdiIpLnN0eWxlKCJoZWlnaHQiLCIxMDAlIikuc3R5bGUoIndpZHRoIiwiMTAwJSIpO3YuYXBwZW5kKCJkaXYiKS5zdHlsZSgidGV4dC1hbGlnbiIsImNlbnRlciIpLnN0eWxlKCJ2ZXJ0aWNhbC1hbGlnbiIsIm1pZGRsZSIpLmh0bWwoYXdhaXQgbWgoYSxjcigpKSksZShhLGcsbCx1LGgsZixkLHApLGkodixkKX1vKG4sImJ5S2F0ZXgiKTtmdW5jdGlvbiBpKGEscyl7Zm9yKGxldCBsIGluIHMpcy5oYXNPd25Qcm9wZXJ0eShsKSYmYS5hdHRyKGwsc1tsXSl9cmV0dXJuIG8oaSwiX3NldFRleHRBdHRycyIpLGZ1bmN0aW9uKGEscz0hMSl7cmV0dXJuIHM/bjphLnRleHRQbGFjZW1lbnQ9PT0iZm8iP3I6YS50ZXh0UGxhY2VtZW50PT09Im9sZCI/dDplfX0oKSxDVmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGksYSxzLGwsdSxoLGYpe2xldCBkPWEuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIscykuYXR0cigieSIsbCkuc3R5bGUoInRleHQtYW5jaG9yIiwic3RhcnQiKS50ZXh0KGkpO24oZCxmKX1vKHQsImJ5VGV4dCIpO2Z1bmN0aW9uIGUoaSxhLHMsbCx1LGgsZixkKXtsZXR7YWN0b3JGb250U2l6ZTpwLGFjdG9yRm9udEZhbWlseTptLGFjdG9yRm9udFdlaWdodDpnfT1kLHk9aS5zcGxpdChaZS5saW5lQnJlYWtSZWdleCk7Zm9yKGxldCB2PTA7djx5Lmxlbmd0aDt2Kyspe2xldCB4PXYqcC1wKih5Lmxlbmd0aC0xKS8yLGI9YS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixzKS5hdHRyKCJ5IixsKS5zdHlsZSgidGV4dC1hbmNob3IiLCJzdGFydCIpLnN0eWxlKCJmb250LXNpemUiLHApLnN0eWxlKCJmb250LXdlaWdodCIsZykuc3R5bGUoImZvbnQtZmFtaWx5IixtKTtiLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixzKS5hdHRyKCJkeSIseCkudGV4dCh5W3ZdKSxiLmF0dHIoInkiLGwraC8yKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsImNlbnRyYWwiKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJjZW50cmFsIiksbihiLGYpfX1vKGUsImJ5VHNwYW4iKTtmdW5jdGlvbiByKGksYSxzLGwsdSxoLGYsZCl7bGV0IHA9YS5hcHBlbmQoInN3aXRjaCIpLGc9cC5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ4IixzKS5hdHRyKCJ5IixsKS5hdHRyKCJ3aWR0aCIsdSkuYXR0cigiaGVpZ2h0IixoKS5hcHBlbmQoInhodG1sOmRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUiKS5zdHlsZSgiaGVpZ2h0IiwiMTAwJSIpLnN0eWxlKCJ3aWR0aCIsIjEwMCUiKTtnLmFwcGVuZCgiZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS50ZXh0KGkpLGUoaSxwLHMsbCx1LGgsZixkKSxuKGcsZil9byhyLCJieUZvIik7ZnVuY3Rpb24gbihpLGEpe2ZvcihsZXQgcyBpbiBhKWEuaGFzT3duUHJvcGVydHkocykmJmkuYXR0cihzLGFbc10pfXJldHVybiBvKG4sIl9zZXRUZXh0QXR0cnMiKSxmdW5jdGlvbihpKXtyZXR1cm4gaS50ZXh0UGxhY2VtZW50PT09ImZvIj9yOmkudGV4dFBsYWNlbWVudD09PSJvbGQiP3Q6ZX19KCksaGk9e2RyYXdSZWN0Ol9PLGRyYXdUZXh0Ol9wLGRyYXdMYWJlbDpnZmUsZHJhd0FjdG9yOmRWZSxkcmF3Qm94OnBWZSxkcmF3UG9wdXA6Y1ZlLGFuY2hvckVsZW1lbnQ6bVZlLGRyYXdBY3RpdmF0aW9uOmdWZSxkcmF3TG9vcDp5VmUsZHJhd0JhY2tncm91bmRSZWN0OnlmZSxpbnNlcnRBcnJvd0hlYWQ6d1ZlLGluc2VydEFycm93RmlsbGVkSGVhZDpUVmUsaW5zZXJ0U2VxdWVuY2VOdW1iZXI6a1ZlLGluc2VydEFycm93Q3Jvc3NIZWFkOkVWZSxpbnNlcnREYXRhYmFzZUljb246dlZlLGluc2VydENvbXB1dGVySWNvbjp4VmUsaW5zZXJ0Q2xvY2tJY29uOmJWZSxnZXRUZXh0T2JqOnZmZSxnZXROb3RlUmVjdDpTVmUsZml4TGlmZUxpbmVIZWlnaHRzOkRPLHNhbml0aXplVXJsOkFPLnNhbml0aXplVXJsfX0pO2FzeW5jIGZ1bmN0aW9uIF9WZSh0LGUpe3J0LmJ1bXBWZXJ0aWNhbFBvcygxMCk7bGV0e3N0YXJ0eDpyLHN0b3B4Om4sbWVzc2FnZTppfT1lLGE9WmUuc3BsaXRCcmVha3MoaSkubGVuZ3RoLHM9cGkoaSksbD1zP2F3YWl0IGlkKGksbWUoKSk6R3QuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMoaSxEcChOZSkpO2lmKCFzKXtsZXQgZD1sLmhlaWdodC9hO2UuaGVpZ2h0Kz1kLHJ0LmJ1bXBWZXJ0aWNhbFBvcyhkKX1sZXQgdSxoPWwuaGVpZ2h0LTEwLGY9bC53aWR0aDtpZihyPT09bil7dT1ydC5nZXRWZXJ0aWNhbFBvcygpK2gsTmUucmlnaHRBbmdsZXN8fChoKz1OZS5ib3hNYXJnaW4sdT1ydC5nZXRWZXJ0aWNhbFBvcygpK2gpLGgrPTMwO2xldCBkPVplLmdldE1heChmLzIsTmUud2lkdGgvMik7cnQuaW5zZXJ0KHItZCxydC5nZXRWZXJ0aWNhbFBvcygpLTEwK2gsbitkLHJ0LmdldFZlcnRpY2FsUG9zKCkrMzAraCl9ZWxzZSBoKz1OZS5ib3hNYXJnaW4sdT1ydC5nZXRWZXJ0aWNhbFBvcygpK2gscnQuaW5zZXJ0KHIsdS0xMCxuLHUpO3JldHVybiBydC5idW1wVmVydGljYWxQb3MoaCksZS5oZWlnaHQrPWgsZS5zdG9weT1lLnN0YXJ0eStlLmhlaWdodCxydC5pbnNlcnQoZS5mcm9tQm91bmRzLGUuc3RhcnR5LGUudG9Cb3VuZHMsZS5zdG9weSksdX1mdW5jdGlvbiBIYyh0LGUscixuLGkpe3J0LmJ1bXBWZXJ0aWNhbFBvcyhyKTtsZXQgYT1uO2lmKGUuaWQmJmUubWVzc2FnZSYmdFtlLmlkXSl7bGV0IHM9dFtlLmlkXS53aWR0aCxsPURwKE5lKTtlLm1lc3NhZ2U9R3Qud3JhcExhYmVsKGBbJHtlLm1lc3NhZ2V9XWAscy0yKk5lLndyYXBQYWRkaW5nLGwpLGUud2lkdGg9cyxlLndyYXA9ITA7bGV0IHU9R3QuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMoZS5tZXNzYWdlLGwpLGg9WmUuZ2V0TWF4KHUuaGVpZ2h0LE5lLmxhYmVsQm94SGVpZ2h0KTthPW4raCxZLmRlYnVnKGAke2h9IC0gJHtlLm1lc3NhZ2V9YCl9aShlKSxydC5idW1wVmVydGljYWxQb3MoYSl9ZnVuY3Rpb24gUlZlKHQsZSxyLG4saSxhLHMpe2Z1bmN0aW9uIGwoaCxmKXtoLng8aS5nZXQodC5mcm9tKS54PyhydC5pbnNlcnQoZS5zdG9weC1mLGUuc3RhcnR5LGUuc3RhcnR4LGUuc3RvcHkraC5oZWlnaHQvMitOZS5ub3RlTWFyZ2luKSxlLnN0b3B4PWUuc3RvcHgrZik6KHJ0Lmluc2VydChlLnN0YXJ0eCxlLnN0YXJ0eSxlLnN0b3B4K2YsZS5zdG9weStoLmhlaWdodC8yK05lLm5vdGVNYXJnaW4pLGUuc3RvcHg9ZS5zdG9weC1mKX1vKGwsInJlY2VpdmVyQWRqdXN0bWVudCIpO2Z1bmN0aW9uIHUoaCxmKXtoLng8aS5nZXQodC50bykueD8ocnQuaW5zZXJ0KGUuc3RhcnR4LWYsZS5zdGFydHksZS5zdG9weCxlLnN0b3B5K2guaGVpZ2h0LzIrTmUubm90ZU1hcmdpbiksZS5zdGFydHg9ZS5zdGFydHgrZik6KHJ0Lmluc2VydChlLnN0b3B4LGUuc3RhcnR5LGUuc3RhcnR4K2YsZS5zdG9weStoLmhlaWdodC8yK05lLm5vdGVNYXJnaW4pLGUuc3RhcnR4PWUuc3RhcnR4LWYpfWlmKG8odSwic2VuZGVyQWRqdXN0bWVudCIpLGEuZ2V0KHQudG8pPT1uKXtsZXQgaD1pLmdldCh0LnRvKSxmPWgudHlwZT09ImFjdG9yIj92Zi8yKzM6aC53aWR0aC8yKzM7bChoLGYpLGguc3RhcnR5PXItaC5oZWlnaHQvMixydC5idW1wVmVydGljYWxQb3MoaC5oZWlnaHQvMil9ZWxzZSBpZihzLmdldCh0LmZyb20pPT1uKXtsZXQgaD1pLmdldCh0LmZyb20pO2lmKE5lLm1pcnJvckFjdG9ycyl7bGV0IGY9aC50eXBlPT0iYWN0b3IiP3ZmLzI6aC53aWR0aC8yO3UoaCxmKX1oLnN0b3B5PXItaC5oZWlnaHQvMixydC5idW1wVmVydGljYWxQb3MoaC5oZWlnaHQvMil9ZWxzZSBpZihzLmdldCh0LnRvKT09bil7bGV0IGg9aS5nZXQodC50byk7aWYoTmUubWlycm9yQWN0b3JzKXtsZXQgZj1oLnR5cGU9PSJhY3RvciI/dmYvMiszOmgud2lkdGgvMiszO2woaCxmKX1oLnN0b3B5PXItaC5oZWlnaHQvMixydC5idW1wVmVydGljYWxQb3MoaC5oZWlnaHQvMil9fWFzeW5jIGZ1bmN0aW9uIE1WZSh0LGUscil7bGV0IG49e307Zm9yKGxldCBpIG9mIGUpaWYodC5nZXQoaS50bykmJnQuZ2V0KGkuZnJvbSkpe2xldCBhPXQuZ2V0KGkudG8pO2lmKGkucGxhY2VtZW50PT09ci5kYi5QTEFDRU1FTlQuTEVGVE9GJiYhYS5wcmV2QWN0b3J8fGkucGxhY2VtZW50PT09ci5kYi5QTEFDRU1FTlQuUklHSFRPRiYmIWEubmV4dEFjdG9yKWNvbnRpbnVlO2xldCBzPWkucGxhY2VtZW50IT09dm9pZCAwLGw9IXMsdT1zP18xKE5lKTpEcChOZSksaD1pLndyYXA/R3Qud3JhcExhYmVsKGkubWVzc2FnZSxOZS53aWR0aC0yKk5lLndyYXBQYWRkaW5nLHUpOmkubWVzc2FnZSxkPShwaShoKT9hd2FpdCBpZChpLm1lc3NhZ2UsbWUoKSk6R3QuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMoaCx1KSkud2lkdGgrMipOZS53cmFwUGFkZGluZztsJiZpLmZyb209PT1hLm5leHRBY3Rvcj9uW2kudG9dPVplLmdldE1heChuW2kudG9dfHwwLGQpOmwmJmkuZnJvbT09PWEucHJldkFjdG9yP25baS5mcm9tXT1aZS5nZXRNYXgobltpLmZyb21dfHwwLGQpOmwmJmkuZnJvbT09PWkudG8/KG5baS5mcm9tXT1aZS5nZXRNYXgobltpLmZyb21dfHwwLGQvMiksbltpLnRvXT1aZS5nZXRNYXgobltpLnRvXXx8MCxkLzIpKTppLnBsYWNlbWVudD09PXIuZGIuUExBQ0VNRU5ULlJJR0hUT0Y/bltpLmZyb21dPVplLmdldE1heChuW2kuZnJvbV18fDAsZCk6aS5wbGFjZW1lbnQ9PT1yLmRiLlBMQUNFTUVOVC5MRUZUT0Y/blthLnByZXZBY3Rvcl09WmUuZ2V0TWF4KG5bYS5wcmV2QWN0b3JdfHwwLGQpOmkucGxhY2VtZW50PT09ci5kYi5QTEFDRU1FTlQuT1ZFUiYmKGEucHJldkFjdG9yJiYoblthLnByZXZBY3Rvcl09WmUuZ2V0TWF4KG5bYS5wcmV2QWN0b3JdfHwwLGQvMikpLGEubmV4dEFjdG9yJiYobltpLmZyb21dPVplLmdldE1heChuW2kuZnJvbV18fDAsZC8yKSkpfXJldHVybiBZLmRlYnVnKCJtYXhNZXNzYWdlV2lkdGhQZXJBY3RvcjoiLG4pLG59YXN5bmMgZnVuY3Rpb24gT1ZlKHQsZSxyKXtsZXQgbj0wO2ZvcihsZXQgYSBvZiB0LmtleXMoKSl7bGV0IHM9dC5nZXQoYSk7cy53cmFwJiYocy5kZXNjcmlwdGlvbj1HdC53cmFwTGFiZWwocy5kZXNjcmlwdGlvbixOZS53aWR0aC0yKk5lLndyYXBQYWRkaW5nLFJPKE5lKSkpO2xldCBsPXBpKHMuZGVzY3JpcHRpb24pP2F3YWl0IGlkKHMuZGVzY3JpcHRpb24sbWUoKSk6R3QuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMocy5kZXNjcmlwdGlvbixSTyhOZSkpO3Mud2lkdGg9cy53cmFwP05lLndpZHRoOlplLmdldE1heChOZS53aWR0aCxsLndpZHRoKzIqTmUud3JhcFBhZGRpbmcpLHMuaGVpZ2h0PXMud3JhcD9aZS5nZXRNYXgobC5oZWlnaHQsTmUuaGVpZ2h0KTpOZS5oZWlnaHQsbj1aZS5nZXRNYXgobixzLmhlaWdodCl9Zm9yKGxldCBhIGluIGUpe2xldCBzPXQuZ2V0KGEpO2lmKCFzKWNvbnRpbnVlO2xldCBsPXQuZ2V0KHMubmV4dEFjdG9yKTtpZighbCl7bGV0IGQ9ZVthXStOZS5hY3Rvck1hcmdpbi1zLndpZHRoLzI7cy5tYXJnaW49WmUuZ2V0TWF4KGQsTmUuYWN0b3JNYXJnaW4pO2NvbnRpbnVlfWxldCBoPWVbYV0rTmUuYWN0b3JNYXJnaW4tcy53aWR0aC8yLWwud2lkdGgvMjtzLm1hcmdpbj1aZS5nZXRNYXgoaCxOZS5hY3Rvck1hcmdpbil9bGV0IGk9MDtyZXR1cm4gci5mb3JFYWNoKGE9PntsZXQgcz1EcChOZSksbD1hLmFjdG9yS2V5cy5yZWR1Y2UoKGYsZCk9PmYrPXQuZ2V0KGQpLndpZHRoKyh0LmdldChkKS5tYXJnaW58fDApLDApO2wtPTIqTmUuYm94VGV4dE1hcmdpbixhLndyYXAmJihhLm5hbWU9R3Qud3JhcExhYmVsKGEubmFtZSxsLTIqTmUud3JhcFBhZGRpbmcscykpO2xldCB1PUd0LmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKGEubmFtZSxzKTtpPVplLmdldE1heCh1LmhlaWdodCxpKTtsZXQgaD1aZS5nZXRNYXgobCx1LndpZHRoKzIqTmUud3JhcFBhZGRpbmcpO2lmKGEubWFyZ2luPU5lLmJveFRleHRNYXJnaW4sbDxoKXtsZXQgZj0oaC1sKS8yO2EubWFyZ2luKz1mfX0pLHIuZm9yRWFjaChhPT5hLnRleHRNYXhIZWlnaHQ9aSksWmUuZ2V0TWF4KG4sTmUuaGVpZ2h0KX12YXIgTmUscnQsQVZlLERwLF8xLFJPLERWZSxMVmUsTk8sd2ZlLFRmZSxENixiZmUsTlZlLElWZSxQVmUsQlZlLEZWZSxrZmUsRWZlPU4oKCk9PnsidXNlIHN0cmljdCI7ZHIoKTt4ZmUoKTt2dCgpO2dyKCk7V3YoKTt6dCgpO3MwKCk7aXIoKTtFaSgpO05lPXt9LHJ0PXtkYXRhOntzdGFydHg6dm9pZCAwLHN0b3B4OnZvaWQgMCxzdGFydHk6dm9pZCAwLHN0b3B5OnZvaWQgMH0sdmVydGljYWxQb3M6MCxzZXF1ZW5jZUl0ZW1zOltdLGFjdGl2YXRpb25zOltdLG1vZGVsczp7Z2V0SGVpZ2h0Om8oZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5tYXguYXBwbHkobnVsbCx0aGlzLmFjdG9ycy5sZW5ndGg9PT0wP1swXTp0aGlzLmFjdG9ycy5tYXAodD0+dC5oZWlnaHR8fDApKSsodGhpcy5sb29wcy5sZW5ndGg9PT0wPzA6dGhpcy5sb29wcy5tYXAodD0+dC5oZWlnaHR8fDApLnJlZHVjZSgodCxlKT0+dCtlKSkrKHRoaXMubWVzc2FnZXMubGVuZ3RoPT09MD8wOnRoaXMubWVzc2FnZXMubWFwKHQ9PnQuaGVpZ2h0fHwwKS5yZWR1Y2UoKHQsZSk9PnQrZSkpKyh0aGlzLm5vdGVzLmxlbmd0aD09PTA/MDp0aGlzLm5vdGVzLm1hcCh0PT50LmhlaWdodHx8MCkucmVkdWNlKCh0LGUpPT50K2UpKX0sImdldEhlaWdodCIpLGNsZWFyOm8oZnVuY3Rpb24oKXt0aGlzLmFjdG9ycz1bXSx0aGlzLmJveGVzPVtdLHRoaXMubG9vcHM9W10sdGhpcy5tZXNzYWdlcz1bXSx0aGlzLm5vdGVzPVtdfSwiY2xlYXIiKSxhZGRCb3g6byhmdW5jdGlvbih0KXt0aGlzLmJveGVzLnB1c2godCl9LCJhZGRCb3giKSxhZGRBY3RvcjpvKGZ1bmN0aW9uKHQpe3RoaXMuYWN0b3JzLnB1c2godCl9LCJhZGRBY3RvciIpLGFkZExvb3A6byhmdW5jdGlvbih0KXt0aGlzLmxvb3BzLnB1c2godCl9LCJhZGRMb29wIiksYWRkTWVzc2FnZTpvKGZ1bmN0aW9uKHQpe3RoaXMubWVzc2FnZXMucHVzaCh0KX0sImFkZE1lc3NhZ2UiKSxhZGROb3RlOm8oZnVuY3Rpb24odCl7dGhpcy5ub3Rlcy5wdXNoKHQpfSwiYWRkTm90ZSIpLGxhc3RBY3RvcjpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWN0b3JzW3RoaXMuYWN0b3JzLmxlbmd0aC0xXX0sImxhc3RBY3RvciIpLGxhc3RMb29wOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb29wc1t0aGlzLmxvb3BzLmxlbmd0aC0xXX0sImxhc3RMb29wIiksbGFzdE1lc3NhZ2U6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VzW3RoaXMubWVzc2FnZXMubGVuZ3RoLTFdfSwibGFzdE1lc3NhZ2UiKSxsYXN0Tm90ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm90ZXNbdGhpcy5ub3Rlcy5sZW5ndGgtMV19LCJsYXN0Tm90ZSIpLGFjdG9yczpbXSxib3hlczpbXSxsb29wczpbXSxtZXNzYWdlczpbXSxub3RlczpbXX0saW5pdDpvKGZ1bmN0aW9uKCl7dGhpcy5zZXF1ZW5jZUl0ZW1zPVtdLHRoaXMuYWN0aXZhdGlvbnM9W10sdGhpcy5tb2RlbHMuY2xlYXIoKSx0aGlzLmRhdGE9e3N0YXJ0eDp2b2lkIDAsc3RvcHg6dm9pZCAwLHN0YXJ0eTp2b2lkIDAsc3RvcHk6dm9pZCAwfSx0aGlzLnZlcnRpY2FsUG9zPTAsVGZlKG1lKCkpfSwiaW5pdCIpLHVwZGF0ZVZhbDpvKGZ1bmN0aW9uKHQsZSxyLG4pe3RbZV09PT12b2lkIDA/dFtlXT1yOnRbZV09bihyLHRbZV0pfSwidXBkYXRlVmFsIiksdXBkYXRlQm91bmRzOm8oZnVuY3Rpb24odCxlLHIsbil7bGV0IGk9dGhpcyxhPTA7ZnVuY3Rpb24gcyhsKXtyZXR1cm4gbyhmdW5jdGlvbihoKXthKys7bGV0IGY9aS5zZXF1ZW5jZUl0ZW1zLmxlbmd0aC1hKzE7aS51cGRhdGVWYWwoaCwic3RhcnR5IixlLWYqTmUuYm94TWFyZ2luLE1hdGgubWluKSxpLnVwZGF0ZVZhbChoLCJzdG9weSIsbitmKk5lLmJveE1hcmdpbixNYXRoLm1heCksaS51cGRhdGVWYWwocnQuZGF0YSwic3RhcnR4Iix0LWYqTmUuYm94TWFyZ2luLE1hdGgubWluKSxpLnVwZGF0ZVZhbChydC5kYXRhLCJzdG9weCIscitmKk5lLmJveE1hcmdpbixNYXRoLm1heCksbCE9PSJhY3RpdmF0aW9uIiYmKGkudXBkYXRlVmFsKGgsInN0YXJ0eCIsdC1mKk5lLmJveE1hcmdpbixNYXRoLm1pbiksaS51cGRhdGVWYWwoaCwic3RvcHgiLHIrZipOZS5ib3hNYXJnaW4sTWF0aC5tYXgpLGkudXBkYXRlVmFsKHJ0LmRhdGEsInN0YXJ0eSIsZS1mKk5lLmJveE1hcmdpbixNYXRoLm1pbiksaS51cGRhdGVWYWwocnQuZGF0YSwic3RvcHkiLG4rZipOZS5ib3hNYXJnaW4sTWF0aC5tYXgpKX0sInVwZGF0ZUl0ZW1Cb3VuZHMiKX1vKHMsInVwZGF0ZUZuIiksdGhpcy5zZXF1ZW5jZUl0ZW1zLmZvckVhY2gocygpKSx0aGlzLmFjdGl2YXRpb25zLmZvckVhY2gocygiYWN0aXZhdGlvbiIpKX0sInVwZGF0ZUJvdW5kcyIpLGluc2VydDpvKGZ1bmN0aW9uKHQsZSxyLG4pe2xldCBpPVplLmdldE1pbih0LHIpLGE9WmUuZ2V0TWF4KHQscikscz1aZS5nZXRNaW4oZSxuKSxsPVplLmdldE1heChlLG4pO3RoaXMudXBkYXRlVmFsKHJ0LmRhdGEsInN0YXJ0eCIsaSxNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwocnQuZGF0YSwic3RhcnR5IixzLE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbChydC5kYXRhLCJzdG9weCIsYSxNYXRoLm1heCksdGhpcy51cGRhdGVWYWwocnQuZGF0YSwic3RvcHkiLGwsTWF0aC5tYXgpLHRoaXMudXBkYXRlQm91bmRzKGkscyxhLGwpfSwiaW5zZXJ0IiksbmV3QWN0aXZhdGlvbjpvKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj1yLmdldCh0LmZyb20pLGk9RDYodC5mcm9tKS5sZW5ndGh8fDAsYT1uLngrbi53aWR0aC8yKyhpLTEpKk5lLmFjdGl2YXRpb25XaWR0aC8yO3RoaXMuYWN0aXZhdGlvbnMucHVzaCh7c3RhcnR4OmEsc3RhcnR5OnRoaXMudmVydGljYWxQb3MrMixzdG9weDphK05lLmFjdGl2YXRpb25XaWR0aCxzdG9weTp2b2lkIDAsYWN0b3I6dC5mcm9tLGFuY2hvcmVkOmhpLmFuY2hvckVsZW1lbnQoZSl9KX0sIm5ld0FjdGl2YXRpb24iKSxlbmRBY3RpdmF0aW9uOm8oZnVuY3Rpb24odCl7bGV0IGU9dGhpcy5hY3RpdmF0aW9ucy5tYXAoZnVuY3Rpb24ocil7cmV0dXJuIHIuYWN0b3J9KS5sYXN0SW5kZXhPZih0LmZyb20pO3JldHVybiB0aGlzLmFjdGl2YXRpb25zLnNwbGljZShlLDEpWzBdfSwiZW5kQWN0aXZhdGlvbiIpLGNyZWF0ZUxvb3A6byhmdW5jdGlvbih0PXttZXNzYWdlOnZvaWQgMCx3cmFwOiExLHdpZHRoOnZvaWQgMH0sZSl7cmV0dXJue3N0YXJ0eDp2b2lkIDAsc3RhcnR5OnRoaXMudmVydGljYWxQb3Msc3RvcHg6dm9pZCAwLHN0b3B5OnZvaWQgMCx0aXRsZTp0Lm1lc3NhZ2Usd3JhcDp0LndyYXAsd2lkdGg6dC53aWR0aCxoZWlnaHQ6MCxmaWxsOmV9fSwiY3JlYXRlTG9vcCIpLG5ld0xvb3A6byhmdW5jdGlvbih0PXttZXNzYWdlOnZvaWQgMCx3cmFwOiExLHdpZHRoOnZvaWQgMH0sZSl7dGhpcy5zZXF1ZW5jZUl0ZW1zLnB1c2godGhpcy5jcmVhdGVMb29wKHQsZSkpfSwibmV3TG9vcCIpLGVuZExvb3A6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLnNlcXVlbmNlSXRlbXMucG9wKCl9LCJlbmRMb29wIiksaXNMb29wT3ZlcmxhcDpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VxdWVuY2VJdGVtcy5sZW5ndGg/dGhpcy5zZXF1ZW5jZUl0ZW1zW3RoaXMuc2VxdWVuY2VJdGVtcy5sZW5ndGgtMV0ub3ZlcmxhcDohMX0sImlzTG9vcE92ZXJsYXAiKSxhZGRTZWN0aW9uVG9Mb29wOm8oZnVuY3Rpb24odCl7bGV0IGU9dGhpcy5zZXF1ZW5jZUl0ZW1zLnBvcCgpO2Uuc2VjdGlvbnM9ZS5zZWN0aW9uc3x8W10sZS5zZWN0aW9uVGl0bGVzPWUuc2VjdGlvblRpdGxlc3x8W10sZS5zZWN0aW9ucy5wdXNoKHt5OnJ0LmdldFZlcnRpY2FsUG9zKCksaGVpZ2h0OjB9KSxlLnNlY3Rpb25UaXRsZXMucHVzaCh0KSx0aGlzLnNlcXVlbmNlSXRlbXMucHVzaChlKX0sImFkZFNlY3Rpb25Ub0xvb3AiKSxzYXZlVmVydGljYWxQb3M6byhmdW5jdGlvbigpe3RoaXMuaXNMb29wT3ZlcmxhcCgpJiYodGhpcy5zYXZlZFZlcnRpY2FsUG9zPXRoaXMudmVydGljYWxQb3MpfSwic2F2ZVZlcnRpY2FsUG9zIikscmVzZXRWZXJ0aWNhbFBvczpvKGZ1bmN0aW9uKCl7dGhpcy5pc0xvb3BPdmVybGFwKCkmJih0aGlzLnZlcnRpY2FsUG9zPXRoaXMuc2F2ZWRWZXJ0aWNhbFBvcyl9LCJyZXNldFZlcnRpY2FsUG9zIiksYnVtcFZlcnRpY2FsUG9zOm8oZnVuY3Rpb24odCl7dGhpcy52ZXJ0aWNhbFBvcz10aGlzLnZlcnRpY2FsUG9zK3QsdGhpcy5kYXRhLnN0b3B5PVplLmdldE1heCh0aGlzLmRhdGEuc3RvcHksdGhpcy52ZXJ0aWNhbFBvcyl9LCJidW1wVmVydGljYWxQb3MiKSxnZXRWZXJ0aWNhbFBvczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmVydGljYWxQb3N9LCJnZXRWZXJ0aWNhbFBvcyIpLGdldEJvdW5kczpvKGZ1bmN0aW9uKCl7cmV0dXJue2JvdW5kczp0aGlzLmRhdGEsbW9kZWxzOnRoaXMubW9kZWxzfX0sImdldEJvdW5kcyIpfSxBVmU9byhhc3luYyBmdW5jdGlvbih0LGUpe3J0LmJ1bXBWZXJ0aWNhbFBvcyhOZS5ib3hNYXJnaW4pLGUuaGVpZ2h0PU5lLmJveE1hcmdpbixlLnN0YXJ0eT1ydC5nZXRWZXJ0aWNhbFBvcygpO2xldCByPVRsKCk7ci54PWUuc3RhcnR4LHIueT1lLnN0YXJ0eSxyLndpZHRoPWUud2lkdGh8fE5lLndpZHRoLHIuY2xhc3M9Im5vdGUiO2xldCBuPXQuYXBwZW5kKCJnIiksaT1oaS5kcmF3UmVjdChuLHIpLGE9SHYoKTthLng9ZS5zdGFydHgsYS55PWUuc3RhcnR5LGEud2lkdGg9ci53aWR0aCxhLmR5PSIxZW0iLGEudGV4dD1lLm1lc3NhZ2UsYS5jbGFzcz0ibm90ZVRleHQiLGEuZm9udEZhbWlseT1OZS5ub3RlRm9udEZhbWlseSxhLmZvbnRTaXplPU5lLm5vdGVGb250U2l6ZSxhLmZvbnRXZWlnaHQ9TmUubm90ZUZvbnRXZWlnaHQsYS5hbmNob3I9TmUubm90ZUFsaWduLGEudGV4dE1hcmdpbj1OZS5ub3RlTWFyZ2luLGEudmFsaWduPSJjZW50ZXIiO2xldCBzPXBpKGEudGV4dCk/YXdhaXQgVGIobixhKTpfcChuLGEpLGw9TWF0aC5yb3VuZChzLm1hcCh1PT4odS5fZ3JvdXBzfHx1KVswXVswXS5nZXRCQm94KCkuaGVpZ2h0KS5yZWR1Y2UoKHUsaCk9PnUraCkpO2kuYXR0cigiaGVpZ2h0IixsKzIqTmUubm90ZU1hcmdpbiksZS5oZWlnaHQrPWwrMipOZS5ub3RlTWFyZ2luLHJ0LmJ1bXBWZXJ0aWNhbFBvcyhsKzIqTmUubm90ZU1hcmdpbiksZS5zdG9weT1lLnN0YXJ0eStsKzIqTmUubm90ZU1hcmdpbixlLnN0b3B4PWUuc3RhcnR4K3Iud2lkdGgscnQuaW5zZXJ0KGUuc3RhcnR4LGUuc3RhcnR5LGUuc3RvcHgsZS5zdG9weSkscnQubW9kZWxzLmFkZE5vdGUoZSl9LCJkcmF3Tm90ZSIpLERwPW8odD0+KHtmb250RmFtaWx5OnQubWVzc2FnZUZvbnRGYW1pbHksZm9udFNpemU6dC5tZXNzYWdlRm9udFNpemUsZm9udFdlaWdodDp0Lm1lc3NhZ2VGb250V2VpZ2h0fSksIm1lc3NhZ2VGb250IiksXzE9byh0PT4oe2ZvbnRGYW1pbHk6dC5ub3RlRm9udEZhbWlseSxmb250U2l6ZTp0Lm5vdGVGb250U2l6ZSxmb250V2VpZ2h0OnQubm90ZUZvbnRXZWlnaHR9KSwibm90ZUZvbnQiKSxSTz1vKHQ9Pih7Zm9udEZhbWlseTp0LmFjdG9yRm9udEZhbWlseSxmb250U2l6ZTp0LmFjdG9yRm9udFNpemUsZm9udFdlaWdodDp0LmFjdG9yRm9udFdlaWdodH0pLCJhY3RvckZvbnQiKTtvKF9WZSwiYm91bmRNZXNzYWdlIik7RFZlPW8oYXN5bmMgZnVuY3Rpb24odCxlLHIsbil7bGV0e3N0YXJ0eDppLHN0b3B4OmEsc3RhcnR5OnMsbWVzc2FnZTpsLHR5cGU6dSxzZXF1ZW5jZUluZGV4Omgsc2VxdWVuY2VWaXNpYmxlOmZ9PWUsZD1HdC5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhsLERwKE5lKSkscD1IdigpO3AueD1pLHAueT1zKzEwLHAud2lkdGg9YS1pLHAuY2xhc3M9Im1lc3NhZ2VUZXh0IixwLmR5PSIxZW0iLHAudGV4dD1sLHAuZm9udEZhbWlseT1OZS5tZXNzYWdlRm9udEZhbWlseSxwLmZvbnRTaXplPU5lLm1lc3NhZ2VGb250U2l6ZSxwLmZvbnRXZWlnaHQ9TmUubWVzc2FnZUZvbnRXZWlnaHQscC5hbmNob3I9TmUubWVzc2FnZUFsaWduLHAudmFsaWduPSJjZW50ZXIiLHAudGV4dE1hcmdpbj1OZS53cmFwUGFkZGluZyxwLnRzcGFuPSExLHBpKHAudGV4dCk/YXdhaXQgVGIodCxwLHtzdGFydHg6aSxzdG9weDphLHN0YXJ0eTpyfSk6X3AodCxwKTtsZXQgbT1kLndpZHRoLGc7aT09PWE/TmUucmlnaHRBbmdsZXM/Zz10LmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLGBNICAke2l9LCR7cn0gSCAke2krWmUuZ2V0TWF4KE5lLndpZHRoLzIsbS8yKX0gViAke3IrMjV9IEggJHtpfWApOmc9dC5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAiK2krIiwiK3IrIiBDICIrKGkrNjApKyIsIisoci0xMCkrIiAiKyhpKzYwKSsiLCIrKHIrMzApKyIgIitpKyIsIisocisyMCkpOihnPXQuYXBwZW5kKCJsaW5lIiksZy5hdHRyKCJ4MSIsaSksZy5hdHRyKCJ5MSIsciksZy5hdHRyKCJ4MiIsYSksZy5hdHRyKCJ5MiIscikpLHU9PT1uLmRiLkxJTkVUWVBFLkRPVFRFRHx8dT09PW4uZGIuTElORVRZUEUuRE9UVEVEX0NST1NTfHx1PT09bi5kYi5MSU5FVFlQRS5ET1RURURfUE9JTlR8fHU9PT1uLmRiLkxJTkVUWVBFLkRPVFRFRF9PUEVOfHx1PT09bi5kYi5MSU5FVFlQRS5CSURJUkVDVElPTkFMX0RPVFRFRD8oZy5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjMsIDMiKSxnLmF0dHIoImNsYXNzIiwibWVzc2FnZUxpbmUxIikpOmcuYXR0cigiY2xhc3MiLCJtZXNzYWdlTGluZTAiKTtsZXQgeT0iIjtOZS5hcnJvd01hcmtlckFic29sdXRlJiYoeT13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCx5PXkucmVwbGFjZSgvXCgvZywiXFwoIikseT15LnJlcGxhY2UoL1wpL2csIlxcKSIpKSxnLmF0dHIoInN0cm9rZS13aWR0aCIsMiksZy5hdHRyKCJzdHJva2UiLCJub25lIiksZy5zdHlsZSgiZmlsbCIsIm5vbmUiKSwodT09PW4uZGIuTElORVRZUEUuU09MSUR8fHU9PT1uLmRiLkxJTkVUWVBFLkRPVFRFRCkmJmcuYXR0cigibWFya2VyLWVuZCIsInVybCgiK3krIiNhcnJvd2hlYWQpIiksKHU9PT1uLmRiLkxJTkVUWVBFLkJJRElSRUNUSU9OQUxfU09MSUR8fHU9PT1uLmRiLkxJTkVUWVBFLkJJRElSRUNUSU9OQUxfRE9UVEVEKSYmKGcuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIreSsiI2Fycm93aGVhZCkiKSxnLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIit5KyIjYXJyb3doZWFkKSIpKSwodT09PW4uZGIuTElORVRZUEUuU09MSURfUE9JTlR8fHU9PT1uLmRiLkxJTkVUWVBFLkRPVFRFRF9QT0lOVCkmJmcuYXR0cigibWFya2VyLWVuZCIsInVybCgiK3krIiNmaWxsZWQtaGVhZCkiKSwodT09PW4uZGIuTElORVRZUEUuU09MSURfQ1JPU1N8fHU9PT1uLmRiLkxJTkVUWVBFLkRPVFRFRF9DUk9TUykmJmcuYXR0cigibWFya2VyLWVuZCIsInVybCgiK3krIiNjcm9zc2hlYWQpIiksKGZ8fE5lLnNob3dTZXF1ZW5jZU51bWJlcnMpJiYoZy5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIit5KyIjc2VxdWVuY2VudW1iZXIpIiksdC5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixpKS5hdHRyKCJ5IixyKzQpLmF0dHIoImZvbnQtZmFtaWx5Iiwic2Fucy1zZXJpZiIpLmF0dHIoImZvbnQtc2l6ZSIsIjEycHgiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImNsYXNzIiwic2VxdWVuY2VOdW1iZXIiKS50ZXh0KGgpKX0sImRyYXdNZXNzYWdlIiksTFZlPW8oZnVuY3Rpb24odCxlLHIsbixpLGEscyl7bGV0IGw9MCx1PTAsaCxmPTA7Zm9yKGxldCBkIG9mIG4pe2xldCBwPWUuZ2V0KGQpLG09cC5ib3g7aCYmaCE9bSYmKHN8fHJ0Lm1vZGVscy5hZGRCb3goaCksdSs9TmUuYm94TWFyZ2luK2gubWFyZ2luKSxtJiZtIT1oJiYoc3x8KG0ueD1sK3UsbS55PWkpLHUrPW0ubWFyZ2luKSxwLndpZHRoPXAud2lkdGh8fE5lLndpZHRoLHAuaGVpZ2h0PVplLmdldE1heChwLmhlaWdodHx8TmUuaGVpZ2h0LE5lLmhlaWdodCkscC5tYXJnaW49cC5tYXJnaW58fE5lLmFjdG9yTWFyZ2luLGY9WmUuZ2V0TWF4KGYscC5oZWlnaHQpLHIuZ2V0KHAubmFtZSkmJih1Kz1wLndpZHRoLzIpLHAueD1sK3UscC5zdGFydHk9cnQuZ2V0VmVydGljYWxQb3MoKSxydC5pbnNlcnQocC54LGkscC54K3Aud2lkdGgscC5oZWlnaHQpLGwrPXAud2lkdGgrdSxwLmJveCYmKHAuYm94LndpZHRoPWwrbS5tYXJnaW4tcC5ib3gueCksdT1wLm1hcmdpbixoPXAuYm94LHJ0Lm1vZGVscy5hZGRBY3RvcihwKX1oJiYhcyYmcnQubW9kZWxzLmFkZEJveChoKSxydC5idW1wVmVydGljYWxQb3MoZil9LCJhZGRBY3RvclJlbmRlcmluZ0RhdGEiKSxOTz1vKGFzeW5jIGZ1bmN0aW9uKHQsZSxyLG4pe2lmKG4pe2xldCBpPTA7cnQuYnVtcFZlcnRpY2FsUG9zKE5lLmJveE1hcmdpbioyKTtmb3IobGV0IGEgb2Ygcil7bGV0IHM9ZS5nZXQoYSk7cy5zdG9weXx8KHMuc3RvcHk9cnQuZ2V0VmVydGljYWxQb3MoKSk7bGV0IGw9YXdhaXQgaGkuZHJhd0FjdG9yKHQscyxOZSwhMCk7aT1aZS5nZXRNYXgoaSxsKX1ydC5idW1wVmVydGljYWxQb3MoaStOZS5ib3hNYXJnaW4pfWVsc2UgZm9yKGxldCBpIG9mIHIpe2xldCBhPWUuZ2V0KGkpO2F3YWl0IGhpLmRyYXdBY3Rvcih0LGEsTmUsITEpfX0sImRyYXdBY3RvcnMiKSx3ZmU9byhmdW5jdGlvbih0LGUscixuKXtsZXQgaT0wLGE9MDtmb3IobGV0IHMgb2Ygcil7bGV0IGw9ZS5nZXQocyksdT1JVmUobCksaD1oaS5kcmF3UG9wdXAodCxsLHUsTmUsTmUuZm9yY2VNZW51cyxuKTtoLmhlaWdodD5pJiYoaT1oLmhlaWdodCksaC53aWR0aCtsLng+YSYmKGE9aC53aWR0aCtsLngpfXJldHVybnttYXhIZWlnaHQ6aSxtYXhXaWR0aDphfX0sImRyYXdBY3RvcnNQb3B1cCIpLFRmZT1vKGZ1bmN0aW9uKHQpe0duKE5lLHQpLHQuZm9udEZhbWlseSYmKE5lLmFjdG9yRm9udEZhbWlseT1OZS5ub3RlRm9udEZhbWlseT1OZS5tZXNzYWdlRm9udEZhbWlseT10LmZvbnRGYW1pbHkpLHQuZm9udFNpemUmJihOZS5hY3RvckZvbnRTaXplPU5lLm5vdGVGb250U2l6ZT1OZS5tZXNzYWdlRm9udFNpemU9dC5mb250U2l6ZSksdC5mb250V2VpZ2h0JiYoTmUuYWN0b3JGb250V2VpZ2h0PU5lLm5vdGVGb250V2VpZ2h0PU5lLm1lc3NhZ2VGb250V2VpZ2h0PXQuZm9udFdlaWdodCl9LCJzZXRDb25mIiksRDY9byhmdW5jdGlvbih0KXtyZXR1cm4gcnQuYWN0aXZhdGlvbnMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLmFjdG9yPT09dH0pfSwiYWN0b3JBY3RpdmF0aW9ucyIpLGJmZT1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9ZS5nZXQodCksbj1ENih0KSxpPW4ucmVkdWNlKGZ1bmN0aW9uKHMsbCl7cmV0dXJuIFplLmdldE1pbihzLGwuc3RhcnR4KX0sci54K3Iud2lkdGgvMi0xKSxhPW4ucmVkdWNlKGZ1bmN0aW9uKHMsbCl7cmV0dXJuIFplLmdldE1heChzLGwuc3RvcHgpfSxyLngrci53aWR0aC8yKzEpO3JldHVybltpLGFdfSwiYWN0aXZhdGlvbkJvdW5kcyIpO28oSGMsImFkanVzdExvb3BIZWlnaHRGb3JXcmFwIik7byhSVmUsImFkanVzdENyZWF0ZWREZXN0cm95ZWREYXRhIik7TlZlPW8oYXN5bmMgZnVuY3Rpb24odCxlLHIsbil7bGV0e3NlY3VyaXR5TGV2ZWw6aSxzZXF1ZW5jZTphfT1tZSgpO05lPWE7bGV0IHM7aT09PSJzYW5kYm94IiYmKHM9R2UoIiNpIitlKSk7bGV0IGw9aT09PSJzYW5kYm94Ij9HZShzLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpOkdlKCJib2R5IiksdT1pPT09InNhbmRib3giP3Mubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQ6ZG9jdW1lbnQ7cnQuaW5pdCgpLFkuZGVidWcobi5kYik7bGV0IGg9aT09PSJzYW5kYm94Ij9sLnNlbGVjdChgW2lkPSIke2V9Il1gKTpHZShgW2lkPSIke2V9Il1gKSxmPW4uZGIuZ2V0QWN0b3JzKCksZD1uLmRiLmdldENyZWF0ZWRBY3RvcnMoKSxwPW4uZGIuZ2V0RGVzdHJveWVkQWN0b3JzKCksbT1uLmRiLmdldEJveGVzKCksZz1uLmRiLmdldEFjdG9yS2V5cygpLHk9bi5kYi5nZXRNZXNzYWdlcygpLHY9bi5kYi5nZXREaWFncmFtVGl0bGUoKSx4PW4uZGIuaGFzQXRMZWFzdE9uZUJveCgpLGI9bi5kYi5oYXNBdExlYXN0T25lQm94V2l0aFRpdGxlKCksdz1hd2FpdCBNVmUoZix5LG4pO2lmKE5lLmhlaWdodD1hd2FpdCBPVmUoZix3LG0pLGhpLmluc2VydENvbXB1dGVySWNvbihoKSxoaS5pbnNlcnREYXRhYmFzZUljb24oaCksaGkuaW5zZXJ0Q2xvY2tJY29uKGgpLHgmJihydC5idW1wVmVydGljYWxQb3MoTmUuYm94TWFyZ2luKSxiJiZydC5idW1wVmVydGljYWxQb3MobVswXS50ZXh0TWF4SGVpZ2h0KSksTmUuaGlkZVVudXNlZFBhcnRpY2lwYW50cz09PSEwKXtsZXQgRj1uZXcgU2V0O3kuZm9yRWFjaChQPT57Ri5hZGQoUC5mcm9tKSxGLmFkZChQLnRvKX0pLGc9Zy5maWx0ZXIoUD0+Ri5oYXMoUCkpfUxWZShoLGYsZCxnLDAseSwhMSk7bGV0IEM9YXdhaXQgRlZlKHksZix3LG4pO2hpLmluc2VydEFycm93SGVhZChoKSxoaS5pbnNlcnRBcnJvd0Nyb3NzSGVhZChoKSxoaS5pbnNlcnRBcnJvd0ZpbGxlZEhlYWQoaCksaGkuaW5zZXJ0U2VxdWVuY2VOdW1iZXIoaCk7ZnVuY3Rpb24gVChGLFApe2xldCB6PXJ0LmVuZEFjdGl2YXRpb24oRik7ei5zdGFydHkrMTg+UCYmKHouc3RhcnR5PVAtNixQKz0xMiksaGkuZHJhd0FjdGl2YXRpb24oaCx6LFAsTmUsRDYoRi5mcm9tKS5sZW5ndGgpLHJ0Lmluc2VydCh6LnN0YXJ0eCxQLTEwLHouc3RvcHgsUCl9byhULCJhY3RpdmVFbmQiKTtsZXQgRT0xLEE9MSxTPVtdLF89W10sST0wO2ZvcihsZXQgRiBvZiB5KXtsZXQgUCx6LCQ7c3dpdGNoKEYudHlwZSl7Y2FzZSBuLmRiLkxJTkVUWVBFLk5PVEU6cnQucmVzZXRWZXJ0aWNhbFBvcygpLHo9Ri5ub3RlTW9kZWwsYXdhaXQgQVZlKGgseik7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLkFDVElWRV9TVEFSVDpydC5uZXdBY3RpdmF0aW9uKEYsaCxmKTticmVhaztjYXNlIG4uZGIuTElORVRZUEUuQUNUSVZFX0VORDpUKEYscnQuZ2V0VmVydGljYWxQb3MoKSk7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLkxPT1BfU1RBUlQ6SGMoQyxGLE5lLmJveE1hcmdpbixOZS5ib3hNYXJnaW4rTmUuYm94VGV4dE1hcmdpbixIPT5ydC5uZXdMb29wKEgpKTticmVhaztjYXNlIG4uZGIuTElORVRZUEUuTE9PUF9FTkQ6UD1ydC5lbmRMb29wKCksYXdhaXQgaGkuZHJhd0xvb3AoaCxQLCJsb29wIixOZSkscnQuYnVtcFZlcnRpY2FsUG9zKFAuc3RvcHktcnQuZ2V0VmVydGljYWxQb3MoKSkscnQubW9kZWxzLmFkZExvb3AoUCk7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLlJFQ1RfU1RBUlQ6SGMoQyxGLE5lLmJveE1hcmdpbixOZS5ib3hNYXJnaW4sSD0+cnQubmV3TG9vcCh2b2lkIDAsSC5tZXNzYWdlKSk7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLlJFQ1RfRU5EOlA9cnQuZW5kTG9vcCgpLF8ucHVzaChQKSxydC5tb2RlbHMuYWRkTG9vcChQKSxydC5idW1wVmVydGljYWxQb3MoUC5zdG9weS1ydC5nZXRWZXJ0aWNhbFBvcygpKTticmVhaztjYXNlIG4uZGIuTElORVRZUEUuT1BUX1NUQVJUOkhjKEMsRixOZS5ib3hNYXJnaW4sTmUuYm94TWFyZ2luK05lLmJveFRleHRNYXJnaW4sSD0+cnQubmV3TG9vcChIKSk7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLk9QVF9FTkQ6UD1ydC5lbmRMb29wKCksYXdhaXQgaGkuZHJhd0xvb3AoaCxQLCJvcHQiLE5lKSxydC5idW1wVmVydGljYWxQb3MoUC5zdG9weS1ydC5nZXRWZXJ0aWNhbFBvcygpKSxydC5tb2RlbHMuYWRkTG9vcChQKTticmVhaztjYXNlIG4uZGIuTElORVRZUEUuQUxUX1NUQVJUOkhjKEMsRixOZS5ib3hNYXJnaW4sTmUuYm94TWFyZ2luK05lLmJveFRleHRNYXJnaW4sSD0+cnQubmV3TG9vcChIKSk7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLkFMVF9FTFNFOkhjKEMsRixOZS5ib3hNYXJnaW4rTmUuYm94VGV4dE1hcmdpbixOZS5ib3hNYXJnaW4sSD0+cnQuYWRkU2VjdGlvblRvTG9vcChIKSk7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLkFMVF9FTkQ6UD1ydC5lbmRMb29wKCksYXdhaXQgaGkuZHJhd0xvb3AoaCxQLCJhbHQiLE5lKSxydC5idW1wVmVydGljYWxQb3MoUC5zdG9weS1ydC5nZXRWZXJ0aWNhbFBvcygpKSxydC5tb2RlbHMuYWRkTG9vcChQKTticmVhaztjYXNlIG4uZGIuTElORVRZUEUuUEFSX1NUQVJUOmNhc2Ugbi5kYi5MSU5FVFlQRS5QQVJfT1ZFUl9TVEFSVDpIYyhDLEYsTmUuYm94TWFyZ2luLE5lLmJveE1hcmdpbitOZS5ib3hUZXh0TWFyZ2luLEg9PnJ0Lm5ld0xvb3AoSCkpLHJ0LnNhdmVWZXJ0aWNhbFBvcygpO2JyZWFrO2Nhc2Ugbi5kYi5MSU5FVFlQRS5QQVJfQU5EOkhjKEMsRixOZS5ib3hNYXJnaW4rTmUuYm94VGV4dE1hcmdpbixOZS5ib3hNYXJnaW4sSD0+cnQuYWRkU2VjdGlvblRvTG9vcChIKSk7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLlBBUl9FTkQ6UD1ydC5lbmRMb29wKCksYXdhaXQgaGkuZHJhd0xvb3AoaCxQLCJwYXIiLE5lKSxydC5idW1wVmVydGljYWxQb3MoUC5zdG9weS1ydC5nZXRWZXJ0aWNhbFBvcygpKSxydC5tb2RlbHMuYWRkTG9vcChQKTticmVhaztjYXNlIG4uZGIuTElORVRZUEUuQVVUT05VTUJFUjpFPUYubWVzc2FnZS5zdGFydHx8RSxBPUYubWVzc2FnZS5zdGVwfHxBLEYubWVzc2FnZS52aXNpYmxlP24uZGIuZW5hYmxlU2VxdWVuY2VOdW1iZXJzKCk6bi5kYi5kaXNhYmxlU2VxdWVuY2VOdW1iZXJzKCk7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLkNSSVRJQ0FMX1NUQVJUOkhjKEMsRixOZS5ib3hNYXJnaW4sTmUuYm94TWFyZ2luK05lLmJveFRleHRNYXJnaW4sSD0+cnQubmV3TG9vcChIKSk7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLkNSSVRJQ0FMX09QVElPTjpIYyhDLEYsTmUuYm94TWFyZ2luK05lLmJveFRleHRNYXJnaW4sTmUuYm94TWFyZ2luLEg9PnJ0LmFkZFNlY3Rpb25Ub0xvb3AoSCkpO2JyZWFrO2Nhc2Ugbi5kYi5MSU5FVFlQRS5DUklUSUNBTF9FTkQ6UD1ydC5lbmRMb29wKCksYXdhaXQgaGkuZHJhd0xvb3AoaCxQLCJjcml0aWNhbCIsTmUpLHJ0LmJ1bXBWZXJ0aWNhbFBvcyhQLnN0b3B5LXJ0LmdldFZlcnRpY2FsUG9zKCkpLHJ0Lm1vZGVscy5hZGRMb29wKFApO2JyZWFrO2Nhc2Ugbi5kYi5MSU5FVFlQRS5CUkVBS19TVEFSVDpIYyhDLEYsTmUuYm94TWFyZ2luLE5lLmJveE1hcmdpbitOZS5ib3hUZXh0TWFyZ2luLEg9PnJ0Lm5ld0xvb3AoSCkpO2JyZWFrO2Nhc2Ugbi5kYi5MSU5FVFlQRS5CUkVBS19FTkQ6UD1ydC5lbmRMb29wKCksYXdhaXQgaGkuZHJhd0xvb3AoaCxQLCJicmVhayIsTmUpLHJ0LmJ1bXBWZXJ0aWNhbFBvcyhQLnN0b3B5LXJ0LmdldFZlcnRpY2FsUG9zKCkpLHJ0Lm1vZGVscy5hZGRMb29wKFApO2JyZWFrO2RlZmF1bHQ6dHJ5eyQ9Ri5tc2dNb2RlbCwkLnN0YXJ0eT1ydC5nZXRWZXJ0aWNhbFBvcygpLCQuc2VxdWVuY2VJbmRleD1FLCQuc2VxdWVuY2VWaXNpYmxlPW4uZGIuc2hvd1NlcXVlbmNlTnVtYmVycygpO2xldCBIPWF3YWl0IF9WZShoLCQpO1JWZShGLCQsSCxJLGYsZCxwKSxTLnB1c2goe21lc3NhZ2VNb2RlbDokLGxpbmVTdGFydFk6SH0pLHJ0Lm1vZGVscy5hZGRNZXNzYWdlKCQpfWNhdGNoKEgpe1kuZXJyb3IoImVycm9yIHdoaWxlIGRyYXdpbmcgbWVzc2FnZSIsSCl9fVtuLmRiLkxJTkVUWVBFLlNPTElEX09QRU4sbi5kYi5MSU5FVFlQRS5ET1RURURfT1BFTixuLmRiLkxJTkVUWVBFLlNPTElELG4uZGIuTElORVRZUEUuRE9UVEVELG4uZGIuTElORVRZUEUuU09MSURfQ1JPU1Msbi5kYi5MSU5FVFlQRS5ET1RURURfQ1JPU1Msbi5kYi5MSU5FVFlQRS5TT0xJRF9QT0lOVCxuLmRiLkxJTkVUWVBFLkRPVFRFRF9QT0lOVCxuLmRiLkxJTkVUWVBFLkJJRElSRUNUSU9OQUxfU09MSUQsbi5kYi5MSU5FVFlQRS5CSURJUkVDVElPTkFMX0RPVFRFRF0uaW5jbHVkZXMoRi50eXBlKSYmKEU9RStBKSxJKyt9WS5kZWJ1ZygiY3JlYXRlZEFjdG9ycyIsZCksWS5kZWJ1ZygiZGVzdHJveWVkQWN0b3JzIixwKSxhd2FpdCBOTyhoLGYsZywhMSk7Zm9yKGxldCBGIG9mIFMpYXdhaXQgRFZlKGgsRi5tZXNzYWdlTW9kZWwsRi5saW5lU3RhcnRZLG4pO05lLm1pcnJvckFjdG9ycyYmYXdhaXQgTk8oaCxmLGcsITApLF8uZm9yRWFjaChGPT5oaS5kcmF3QmFja2dyb3VuZFJlY3QoaCxGKSksRE8oaCxmLGcsTmUpO2ZvcihsZXQgRiBvZiBydC5tb2RlbHMuYm94ZXMpRi5oZWlnaHQ9cnQuZ2V0VmVydGljYWxQb3MoKS1GLnkscnQuaW5zZXJ0KEYueCxGLnksRi54K0Yud2lkdGgsRi5oZWlnaHQpLEYuc3RhcnR4PUYueCxGLnN0YXJ0eT1GLnksRi5zdG9weD1GLnN0YXJ0eCtGLndpZHRoLEYuc3RvcHk9Ri5zdGFydHkrRi5oZWlnaHQsRi5zdHJva2U9InJnYigwLDAsMCwgMC41KSIsaGkuZHJhd0JveChoLEYsTmUpO3gmJnJ0LmJ1bXBWZXJ0aWNhbFBvcyhOZS5ib3hNYXJnaW4pO2xldCBEPXdmZShoLGYsZyx1KSx7Ym91bmRzOmt9PXJ0LmdldEJvdW5kcygpO2suc3RhcnR4PT09dm9pZCAwJiYoay5zdGFydHg9MCksay5zdGFydHk9PT12b2lkIDAmJihrLnN0YXJ0eT0wKSxrLnN0b3B4PT09dm9pZCAwJiYoay5zdG9weD0wKSxrLnN0b3B5PT09dm9pZCAwJiYoay5zdG9weT0wKTtsZXQgTD1rLnN0b3B5LWsuc3RhcnR5O0w8RC5tYXhIZWlnaHQmJihMPUQubWF4SGVpZ2h0KTtsZXQgUj1MKzIqTmUuZGlhZ3JhbU1hcmdpblk7TmUubWlycm9yQWN0b3JzJiYoUj1SLU5lLmJveE1hcmdpbitOZS5ib3R0b21NYXJnaW5BZGopO2xldCBPPWsuc3RvcHgtay5zdGFydHg7TzxELm1heFdpZHRoJiYoTz1ELm1heFdpZHRoKTtsZXQgTT1PKzIqTmUuZGlhZ3JhbU1hcmdpblg7diYmaC5hcHBlbmQoInRleHQiKS50ZXh0KHYpLmF0dHIoIngiLChrLnN0b3B4LWsuc3RhcnR4KS8yLTIqTmUuZGlhZ3JhbU1hcmdpblgpLmF0dHIoInkiLC0yNSksdm4oaCxSLE0sTmUudXNlTWF4V2lkdGgpO2xldCBCPXY/NDA6MDtoLmF0dHIoInZpZXdCb3giLGsuc3RhcnR4LU5lLmRpYWdyYW1NYXJnaW5YKyIgLSIrKE5lLmRpYWdyYW1NYXJnaW5ZK0IpKyIgIitNKyIgIisoUitCKSksWS5kZWJ1ZygibW9kZWxzOiIscnQubW9kZWxzKX0sImRyYXciKTtvKE1WZSwiZ2V0TWF4TWVzc2FnZVdpZHRoUGVyQWN0b3IiKTtJVmU9byhmdW5jdGlvbih0KXtsZXQgZT0wLHI9Uk8oTmUpO2ZvcihsZXQgbiBpbiB0LmxpbmtzKXtsZXQgYT1HdC5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhuLHIpLndpZHRoKzIqTmUud3JhcFBhZGRpbmcrMipOZS5ib3hNYXJnaW47ZTxhJiYoZT1hKX1yZXR1cm4gZX0sImdldFJlcXVpcmVkUG9wdXBXaWR0aCIpO28oT1ZlLCJjYWxjdWxhdGVBY3Rvck1hcmdpbnMiKTtQVmU9byhhc3luYyBmdW5jdGlvbih0LGUscil7bGV0IG49ZS5nZXQodC5mcm9tKSxpPWUuZ2V0KHQudG8pLGE9bi54LHM9aS54LGw9dC53cmFwJiZ0Lm1lc3NhZ2UsdT1waSh0Lm1lc3NhZ2UpP2F3YWl0IGlkKHQubWVzc2FnZSxtZSgpKTpHdC5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhsP0d0LndyYXBMYWJlbCh0Lm1lc3NhZ2UsTmUud2lkdGgsXzEoTmUpKTp0Lm1lc3NhZ2UsXzEoTmUpKSxoPXt3aWR0aDpsP05lLndpZHRoOlplLmdldE1heChOZS53aWR0aCx1LndpZHRoKzIqTmUubm90ZU1hcmdpbiksaGVpZ2h0OjAsc3RhcnR4Om4ueCxzdG9weDowLHN0YXJ0eTowLHN0b3B5OjAsbWVzc2FnZTp0Lm1lc3NhZ2V9O3JldHVybiB0LnBsYWNlbWVudD09PXIuZGIuUExBQ0VNRU5ULlJJR0hUT0Y/KGgud2lkdGg9bD9aZS5nZXRNYXgoTmUud2lkdGgsdS53aWR0aCk6WmUuZ2V0TWF4KG4ud2lkdGgvMitpLndpZHRoLzIsdS53aWR0aCsyKk5lLm5vdGVNYXJnaW4pLGguc3RhcnR4PWErKG4ud2lkdGgrTmUuYWN0b3JNYXJnaW4pLzIpOnQucGxhY2VtZW50PT09ci5kYi5QTEFDRU1FTlQuTEVGVE9GPyhoLndpZHRoPWw/WmUuZ2V0TWF4KE5lLndpZHRoLHUud2lkdGgrMipOZS5ub3RlTWFyZ2luKTpaZS5nZXRNYXgobi53aWR0aC8yK2kud2lkdGgvMix1LndpZHRoKzIqTmUubm90ZU1hcmdpbiksaC5zdGFydHg9YS1oLndpZHRoKyhuLndpZHRoLU5lLmFjdG9yTWFyZ2luKS8yKTp0LnRvPT09dC5mcm9tPyh1PUd0LmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKGw/R3Qud3JhcExhYmVsKHQubWVzc2FnZSxaZS5nZXRNYXgoTmUud2lkdGgsbi53aWR0aCksXzEoTmUpKTp0Lm1lc3NhZ2UsXzEoTmUpKSxoLndpZHRoPWw/WmUuZ2V0TWF4KE5lLndpZHRoLG4ud2lkdGgpOlplLmdldE1heChuLndpZHRoLE5lLndpZHRoLHUud2lkdGgrMipOZS5ub3RlTWFyZ2luKSxoLnN0YXJ0eD1hKyhuLndpZHRoLWgud2lkdGgpLzIpOihoLndpZHRoPU1hdGguYWJzKGErbi53aWR0aC8yLShzK2kud2lkdGgvMikpK05lLmFjdG9yTWFyZ2luLGguc3RhcnR4PWE8cz9hK24ud2lkdGgvMi1OZS5hY3Rvck1hcmdpbi8yOnMraS53aWR0aC8yLU5lLmFjdG9yTWFyZ2luLzIpLGwmJihoLm1lc3NhZ2U9R3Qud3JhcExhYmVsKHQubWVzc2FnZSxoLndpZHRoLTIqTmUud3JhcFBhZGRpbmcsXzEoTmUpKSksWS5kZWJ1ZyhgTk06WyR7aC5zdGFydHh9LCR7aC5zdG9weH0sJHtoLnN0YXJ0eX0sJHtoLnN0b3B5fToke2gud2lkdGh9LCR7aC5oZWlnaHR9PSR7dC5tZXNzYWdlfV1gKSxofSwiYnVpbGROb3RlTW9kZWwiKSxCVmU9byhmdW5jdGlvbih0LGUscil7aWYoIVtyLmRiLkxJTkVUWVBFLlNPTElEX09QRU4sci5kYi5MSU5FVFlQRS5ET1RURURfT1BFTixyLmRiLkxJTkVUWVBFLlNPTElELHIuZGIuTElORVRZUEUuRE9UVEVELHIuZGIuTElORVRZUEUuU09MSURfQ1JPU1Msci5kYi5MSU5FVFlQRS5ET1RURURfQ1JPU1Msci5kYi5MSU5FVFlQRS5TT0xJRF9QT0lOVCxyLmRiLkxJTkVUWVBFLkRPVFRFRF9QT0lOVCxyLmRiLkxJTkVUWVBFLkJJRElSRUNUSU9OQUxfU09MSUQsci5kYi5MSU5FVFlQRS5CSURJUkVDVElPTkFMX0RPVFRFRF0uaW5jbHVkZXModC50eXBlKSlyZXR1cm57fTtsZXRbbixpXT1iZmUodC5mcm9tLGUpLFthLHNdPWJmZSh0LnRvLGUpLGw9bjw9YSx1PWw/aTpuLGg9bD9hOnMsZj1NYXRoLmFicyhhLXMpPjIsZD1vKHk9Pmw/LXk6eSwiYWRqdXN0VmFsdWUiKTt0LmZyb209PT10LnRvP2g9dToodC5hY3RpdmF0ZSYmIWYmJihoKz1kKE5lLmFjdGl2YXRpb25XaWR0aC8yLTEpKSxbci5kYi5MSU5FVFlQRS5TT0xJRF9PUEVOLHIuZGIuTElORVRZUEUuRE9UVEVEX09QRU5dLmluY2x1ZGVzKHQudHlwZSl8fChoKz1kKDMpKSxbci5kYi5MSU5FVFlQRS5CSURJUkVDVElPTkFMX1NPTElELHIuZGIuTElORVRZUEUuQklESVJFQ1RJT05BTF9ET1RURURdLmluY2x1ZGVzKHQudHlwZSkmJih1LT1kKDMpKSk7bGV0IHA9W24saSxhLHNdLG09TWF0aC5hYnModS1oKTt0LndyYXAmJnQubWVzc2FnZSYmKHQubWVzc2FnZT1HdC53cmFwTGFiZWwodC5tZXNzYWdlLFplLmdldE1heChtKzIqTmUud3JhcFBhZGRpbmcsTmUud2lkdGgpLERwKE5lKSkpO2xldCBnPUd0LmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKHQubWVzc2FnZSxEcChOZSkpO3JldHVybnt3aWR0aDpaZS5nZXRNYXgodC53cmFwPzA6Zy53aWR0aCsyKk5lLndyYXBQYWRkaW5nLG0rMipOZS53cmFwUGFkZGluZyxOZS53aWR0aCksaGVpZ2h0OjAsc3RhcnR4OnUsc3RvcHg6aCxzdGFydHk6MCxzdG9weTowLG1lc3NhZ2U6dC5tZXNzYWdlLHR5cGU6dC50eXBlLHdyYXA6dC53cmFwLGZyb21Cb3VuZHM6TWF0aC5taW4uYXBwbHkobnVsbCxwKSx0b0JvdW5kczpNYXRoLm1heC5hcHBseShudWxsLHApfX0sImJ1aWxkTWVzc2FnZU1vZGVsIiksRlZlPW8oYXN5bmMgZnVuY3Rpb24odCxlLHIsbil7bGV0IGk9e30sYT1bXSxzLGwsdTtmb3IobGV0IGggb2YgdCl7c3dpdGNoKGgudHlwZSl7Y2FzZSBuLmRiLkxJTkVUWVBFLkxPT1BfU1RBUlQ6Y2FzZSBuLmRiLkxJTkVUWVBFLkFMVF9TVEFSVDpjYXNlIG4uZGIuTElORVRZUEUuT1BUX1NUQVJUOmNhc2Ugbi5kYi5MSU5FVFlQRS5QQVJfU1RBUlQ6Y2FzZSBuLmRiLkxJTkVUWVBFLlBBUl9PVkVSX1NUQVJUOmNhc2Ugbi5kYi5MSU5FVFlQRS5DUklUSUNBTF9TVEFSVDpjYXNlIG4uZGIuTElORVRZUEUuQlJFQUtfU1RBUlQ6YS5wdXNoKHtpZDpoLmlkLG1zZzpoLm1lc3NhZ2UsZnJvbTpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUix0bzpOdW1iZXIuTUlOX1NBRkVfSU5URUdFUix3aWR0aDowfSk7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLkFMVF9FTFNFOmNhc2Ugbi5kYi5MSU5FVFlQRS5QQVJfQU5EOmNhc2Ugbi5kYi5MSU5FVFlQRS5DUklUSUNBTF9PUFRJT046aC5tZXNzYWdlJiYocz1hLnBvcCgpLGlbcy5pZF09cyxpW2guaWRdPXMsYS5wdXNoKHMpKTticmVhaztjYXNlIG4uZGIuTElORVRZUEUuTE9PUF9FTkQ6Y2FzZSBuLmRiLkxJTkVUWVBFLkFMVF9FTkQ6Y2FzZSBuLmRiLkxJTkVUWVBFLk9QVF9FTkQ6Y2FzZSBuLmRiLkxJTkVUWVBFLlBBUl9FTkQ6Y2FzZSBuLmRiLkxJTkVUWVBFLkNSSVRJQ0FMX0VORDpjYXNlIG4uZGIuTElORVRZUEUuQlJFQUtfRU5EOnM9YS5wb3AoKSxpW3MuaWRdPXM7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLkFDVElWRV9TVEFSVDp7bGV0IGQ9ZS5nZXQoaC5mcm9tP2guZnJvbTpoLnRvLmFjdG9yKSxwPUQ2KGguZnJvbT9oLmZyb206aC50by5hY3RvcikubGVuZ3RoLG09ZC54K2Qud2lkdGgvMisocC0xKSpOZS5hY3RpdmF0aW9uV2lkdGgvMixnPXtzdGFydHg6bSxzdG9weDptK05lLmFjdGl2YXRpb25XaWR0aCxhY3RvcjpoLmZyb20sZW5hYmxlZDohMH07cnQuYWN0aXZhdGlvbnMucHVzaChnKX1icmVhaztjYXNlIG4uZGIuTElORVRZUEUuQUNUSVZFX0VORDp7bGV0IGQ9cnQuYWN0aXZhdGlvbnMubWFwKHA9PnAuYWN0b3IpLmxhc3RJbmRleE9mKGguZnJvbSk7cnQuYWN0aXZhdGlvbnMuc3BsaWNlKGQsMSkuc3BsaWNlKDAsMSl9YnJlYWt9aC5wbGFjZW1lbnQhPT12b2lkIDA/KGw9YXdhaXQgUFZlKGgsZSxuKSxoLm5vdGVNb2RlbD1sLGEuZm9yRWFjaChkPT57cz1kLHMuZnJvbT1aZS5nZXRNaW4ocy5mcm9tLGwuc3RhcnR4KSxzLnRvPVplLmdldE1heChzLnRvLGwuc3RhcnR4K2wud2lkdGgpLHMud2lkdGg9WmUuZ2V0TWF4KHMud2lkdGgsTWF0aC5hYnMocy5mcm9tLXMudG8pKS1OZS5sYWJlbEJveFdpZHRofSkpOih1PUJWZShoLGUsbiksaC5tc2dNb2RlbD11LHUuc3RhcnR4JiZ1LnN0b3B4JiZhLmxlbmd0aD4wJiZhLmZvckVhY2goZD0+e2lmKHM9ZCx1LnN0YXJ0eD09PXUuc3RvcHgpe2xldCBwPWUuZ2V0KGguZnJvbSksbT1lLmdldChoLnRvKTtzLmZyb209WmUuZ2V0TWluKHAueC11LndpZHRoLzIscC54LXAud2lkdGgvMixzLmZyb20pLHMudG89WmUuZ2V0TWF4KG0ueCt1LndpZHRoLzIsbS54K3Aud2lkdGgvMixzLnRvKSxzLndpZHRoPVplLmdldE1heChzLndpZHRoLE1hdGguYWJzKHMudG8tcy5mcm9tKSktTmUubGFiZWxCb3hXaWR0aH1lbHNlIHMuZnJvbT1aZS5nZXRNaW4odS5zdGFydHgscy5mcm9tKSxzLnRvPVplLmdldE1heCh1LnN0b3B4LHMudG8pLHMud2lkdGg9WmUuZ2V0TWF4KHMud2lkdGgsdS53aWR0aCktTmUubGFiZWxCb3hXaWR0aH0pKX1yZXR1cm4gcnQuYWN0aXZhdGlvbnM9W10sWS5kZWJ1ZygiTG9vcCB0eXBlIHdpZHRoczoiLGkpLGl9LCJjYWxjdWxhdGVMb29wQm91bmRzIiksa2ZlPXtib3VuZHM6cnQsZHJhd0FjdG9yczpOTyxkcmF3QWN0b3JzUG9wdXA6d2ZlLHNldENvbmY6VGZlLGRyYXc6TlZlfX0pO3ZhciBTZmU9e307aHIoU2ZlLHtkaWFncmFtOigpPT4kVmV9KTt2YXIgJFZlLENmZT1OKCgpPT57InVzZSBzdHJpY3QiO2NmZSgpO3VmZSgpO2ZmZSgpO3p0KCk7RWZlKCk7JFZlPXtwYXJzZXI6bGZlLGdldCBkYigpe3JldHVybiBuZXcgXzZ9LHJlbmRlcmVyOmtmZSxzdHlsZXM6aGZlLGluaXQ6byh0PT57dC5zZXF1ZW5jZXx8KHQuc2VxdWVuY2U9e30pLHQud3JhcCYmKHQuc2VxdWVuY2Uud3JhcD10LndyYXAsWXkoe3NlcXVlbmNlOnt3cmFwOnQud3JhcH19KSl9LCJpbml0Iil9fSk7dmFyIE1PLEw2LElPPU4oKCk9PnsidXNlIHN0cmljdCI7TU89ZnVuY3Rpb24oKXt2YXIgdD1vKGZ1bmN0aW9uKEllLGJlLFcsZGUpe2ZvcihXPVd8fHt9LGRlPUllLmxlbmd0aDtkZS0tO1dbSWVbZGVdXT1iZSk7cmV0dXJuIFd9LCJvIiksZT1bMSwxOF0scj1bMSwxOV0sbj1bMSwyMF0saT1bMSw0MV0sYT1bMSw0Ml0scz1bMSwyNl0sbD1bMSwyNF0sdT1bMSwyNV0saD1bMSwzMl0sZj1bMSwzM10sZD1bMSwzNF0scD1bMSw0NV0sbT1bMSwzNV0sZz1bMSwzNl0seT1bMSwzN10sdj1bMSwzOF0seD1bMSwyN10sYj1bMSwyOF0sdz1bMSwyOV0sQz1bMSwzMF0sVD1bMSwzMV0sRT1bMSw0NF0sQT1bMSw0Nl0sUz1bMSw0M10sXz1bMSw0N10sST1bMSw5XSxEPVsxLDgsOV0saz1bMSw1OF0sTD1bMSw1OV0sUj1bMSw2MF0sTz1bMSw2MV0sTT1bMSw2Ml0sQj1bMSw2M10sRj1bMSw2NF0sUD1bMSw4LDksNDFdLHo9WzEsNzZdLCQ9WzEsOCw5LDEyLDEzLDIyLDM5LDQxLDQ0LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDc3LDc5XSxIPVsxLDgsOSwxMiwxMywxNywyMCwyMiwzOSw0MSw0NCw0OCw1OCw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Nyw3OSw4NCw5OSwxMDEsMTAyXSxRPVsxMyw1OCw4NCw5OSwxMDEsMTAyXSxqPVsxMyw1OCw3MSw3Miw4NCw5OSwxMDEsMTAyXSxpZT1bMTMsNTgsNjYsNjcsNjgsNjksNzAsODQsOTksMTAxLDEwMl0sbmU9WzEsOThdLGxlPVsxLDExNV0saGU9WzEsMTA3XSxLPVsxLDExM10sWD1bMSwxMDhdLHRlPVsxLDEwOV0sSj1bMSwxMTBdLHNlPVsxLDExMV0sdWU9WzEsMTEyXSxaPVsxLDExNF0sU2U9WzIyLDU4LDU5LDgwLDg0LDg1LDg2LDg3LDg4LDg5XSxjZT1bMSw4LDksMzksNDEsNDRdLGFlPVsxLDgsOSwyMl0sT2U9WzEsMTQzXSxnZT1bMSw4LDksNTldLHplPVsxLDgsOSwyMiw1OCw1OSw4MCw4NCw4NSw4Niw4Nyw4OCw4OV0sSGU9e3RyYWNlOm8oZnVuY3Rpb24oKXt9LCJ0cmFjZSIpLHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsbWVybWFpZERvYzo0LHN0YXRlbWVudHM6NSxncmFwaENvbmZpZzo2LENMQVNTX0RJQUdSQU06NyxORVdMSU5FOjgsRU9GOjksc3RhdGVtZW50OjEwLGNsYXNzTGFiZWw6MTEsU1FTOjEyLFNUUjoxMyxTUUU6MTQsbmFtZXNwYWNlTmFtZToxNSxhbHBoYU51bVRva2VuOjE2LERPVDoxNyxjbGFzc05hbWU6MTgsY2xhc3NMaXRlcmFsTmFtZToxOSxHRU5FUklDVFlQRToyMCxyZWxhdGlvblN0YXRlbWVudDoyMSxMQUJFTDoyMixuYW1lc3BhY2VTdGF0ZW1lbnQ6MjMsY2xhc3NTdGF0ZW1lbnQ6MjQsbWVtYmVyU3RhdGVtZW50OjI1LGFubm90YXRpb25TdGF0ZW1lbnQ6MjYsY2xpY2tTdGF0ZW1lbnQ6Mjcsc3R5bGVTdGF0ZW1lbnQ6MjgsY3NzQ2xhc3NTdGF0ZW1lbnQ6Mjksbm90ZVN0YXRlbWVudDozMCxjbGFzc0RlZlN0YXRlbWVudDozMSxkaXJlY3Rpb246MzIsYWNjX3RpdGxlOjMzLGFjY190aXRsZV92YWx1ZTozNCxhY2NfZGVzY3I6MzUsYWNjX2Rlc2NyX3ZhbHVlOjM2LGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6MzcsbmFtZXNwYWNlSWRlbnRpZmllcjozOCxTVFJVQ1RfU1RBUlQ6MzksY2xhc3NTdGF0ZW1lbnRzOjQwLFNUUlVDVF9TVE9QOjQxLE5BTUVTUEFDRTo0MixjbGFzc0lkZW50aWZpZXI6NDMsU1RZTEVfU0VQQVJBVE9SOjQ0LG1lbWJlcnM6NDUsQ0xBU1M6NDYsQU5OT1RBVElPTl9TVEFSVDo0NyxBTk5PVEFUSU9OX0VORDo0OCxNRU1CRVI6NDksU0VQQVJBVE9SOjUwLHJlbGF0aW9uOjUxLE5PVEVfRk9SOjUyLG5vdGVUZXh0OjUzLE5PVEU6NTQsQ0xBU1NERUY6NTUsY2xhc3NMaXN0OjU2LHN0eWxlc09wdDo1NyxBTFBIQTo1OCxDT01NQTo1OSxkaXJlY3Rpb25fdGI6NjAsZGlyZWN0aW9uX2J0OjYxLGRpcmVjdGlvbl9ybDo2MixkaXJlY3Rpb25fbHI6NjMscmVsYXRpb25UeXBlOjY0LGxpbmVUeXBlOjY1LEFHR1JFR0FUSU9OOjY2LEVYVEVOU0lPTjo2NyxDT01QT1NJVElPTjo2OCxERVBFTkRFTkNZOjY5LExPTExJUE9QOjcwLExJTkU6NzEsRE9UVEVEX0xJTkU6NzIsQ0FMTEJBQ0s6NzMsTElOSzo3NCxMSU5LX1RBUkdFVDo3NSxDTElDSzo3NixDQUxMQkFDS19OQU1FOjc3LENBTExCQUNLX0FSR1M6NzgsSFJFRjo3OSxTVFlMRTo4MCxDU1NDTEFTUzo4MSxzdHlsZTo4MixzdHlsZUNvbXBvbmVudDo4MyxOVU06ODQsQ09MT046ODUsVU5JVDo4NixTUEFDRTo4NyxCUktUOjg4LFBDVDo4OSxjb21tZW50VG9rZW46OTAsdGV4dFRva2VuOjkxLGdyYXBoQ29kZVRva2Vuczo5Mix0ZXh0Tm9UYWdzVG9rZW46OTMsVEFHU1RBUlQ6OTQsVEFHRU5EOjk1LCI9PSI6OTYsIi0tIjo5NyxERUZBVUxUOjk4LE1JTlVTOjk5LGtleXdvcmRzOjEwMCxVTklDT0RFX1RFWFQ6MTAxLEJRVU9URV9TVFI6MTAyLCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw3OiJDTEFTU19ESUFHUkFNIiw4OiJORVdMSU5FIiw5OiJFT0YiLDEyOiJTUVMiLDEzOiJTVFIiLDE0OiJTUUUiLDE3OiJET1QiLDIwOiJHRU5FUklDVFlQRSIsMjI6IkxBQkVMIiwzMzoiYWNjX3RpdGxlIiwzNDoiYWNjX3RpdGxlX3ZhbHVlIiwzNToiYWNjX2Rlc2NyIiwzNjoiYWNjX2Rlc2NyX3ZhbHVlIiwzNzoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMzk6IlNUUlVDVF9TVEFSVCIsNDE6IlNUUlVDVF9TVE9QIiw0MjoiTkFNRVNQQUNFIiw0NDoiU1RZTEVfU0VQQVJBVE9SIiw0NjoiQ0xBU1MiLDQ3OiJBTk5PVEFUSU9OX1NUQVJUIiw0ODoiQU5OT1RBVElPTl9FTkQiLDQ5OiJNRU1CRVIiLDUwOiJTRVBBUkFUT1IiLDUyOiJOT1RFX0ZPUiIsNTQ6Ik5PVEUiLDU1OiJDTEFTU0RFRiIsNTg6IkFMUEhBIiw1OToiQ09NTUEiLDYwOiJkaXJlY3Rpb25fdGIiLDYxOiJkaXJlY3Rpb25fYnQiLDYyOiJkaXJlY3Rpb25fcmwiLDYzOiJkaXJlY3Rpb25fbHIiLDY2OiJBR0dSRUdBVElPTiIsNjc6IkVYVEVOU0lPTiIsNjg6IkNPTVBPU0lUSU9OIiw2OToiREVQRU5ERU5DWSIsNzA6IkxPTExJUE9QIiw3MToiTElORSIsNzI6IkRPVFRFRF9MSU5FIiw3MzoiQ0FMTEJBQ0siLDc0OiJMSU5LIiw3NToiTElOS19UQVJHRVQiLDc2OiJDTElDSyIsNzc6IkNBTExCQUNLX05BTUUiLDc4OiJDQUxMQkFDS19BUkdTIiw3OToiSFJFRiIsODA6IlNUWUxFIiw4MToiQ1NTQ0xBU1MiLDg0OiJOVU0iLDg1OiJDT0xPTiIsODY6IlVOSVQiLDg3OiJTUEFDRSIsODg6IkJSS1QiLDg5OiJQQ1QiLDkyOiJncmFwaENvZGVUb2tlbnMiLDk0OiJUQUdTVEFSVCIsOTU6IlRBR0VORCIsOTY6Ij09Iiw5NzoiLS0iLDk4OiJERUZBVUxUIiw5OToiTUlOVVMiLDEwMDoia2V5d29yZHMiLDEwMToiVU5JQ09ERV9URVhUIiwxMDI6IkJRVU9URV9TVFIifSxwcm9kdWN0aW9uc186WzAsWzMsMV0sWzMsMV0sWzQsMV0sWzYsNF0sWzUsMV0sWzUsMl0sWzUsM10sWzExLDNdLFsxNSwxXSxbMTUsM10sWzE1LDJdLFsxOCwxXSxbMTgsM10sWzE4LDFdLFsxOCwyXSxbMTgsMl0sWzE4LDJdLFsxMCwxXSxbMTAsMl0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwyXSxbMTAsMl0sWzEwLDFdLFsyMyw0XSxbMjMsNV0sWzM4LDJdLFs0MCwxXSxbNDAsMl0sWzQwLDNdLFsyNCwxXSxbMjQsM10sWzI0LDRdLFsyNCw2XSxbNDMsMl0sWzQzLDNdLFsyNiw0XSxbNDUsMV0sWzQ1LDJdLFsyNSwxXSxbMjUsMl0sWzI1LDFdLFsyNSwxXSxbMjEsM10sWzIxLDRdLFsyMSw0XSxbMjEsNV0sWzMwLDNdLFszMCwyXSxbMzEsM10sWzU2LDFdLFs1NiwzXSxbMzIsMV0sWzMyLDFdLFszMiwxXSxbMzIsMV0sWzUxLDNdLFs1MSwyXSxbNTEsMl0sWzUxLDFdLFs2NCwxXSxbNjQsMV0sWzY0LDFdLFs2NCwxXSxbNjQsMV0sWzY1LDFdLFs2NSwxXSxbMjcsM10sWzI3LDRdLFsyNywzXSxbMjcsNF0sWzI3LDRdLFsyNyw1XSxbMjcsM10sWzI3LDRdLFsyNyw0XSxbMjcsNV0sWzI3LDRdLFsyNyw1XSxbMjcsNV0sWzI3LDZdLFsyOCwzXSxbMjksM10sWzU3LDFdLFs1NywzXSxbODIsMV0sWzgyLDJdLFs4MywxXSxbODMsMV0sWzgzLDFdLFs4MywxXSxbODMsMV0sWzgzLDFdLFs4MywxXSxbODMsMV0sWzgzLDFdLFs5MCwxXSxbOTAsMV0sWzkxLDFdLFs5MSwxXSxbOTEsMV0sWzkxLDFdLFs5MSwxXSxbOTEsMV0sWzkxLDFdLFs5MywxXSxbOTMsMV0sWzkzLDFdLFs5MywxXSxbMTYsMV0sWzE2LDFdLFsxNiwxXSxbMTYsMV0sWzE5LDFdLFs1MywxXV0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKGJlLFcsZGUscmUsb2UsVix4ZSl7dmFyIHE9Vi5sZW5ndGgtMTtzd2l0Y2gob2Upe2Nhc2UgODp0aGlzLiQ9VltxLTFdO2JyZWFrO2Nhc2UgOTpjYXNlIDEyOmNhc2UgMTQ6dGhpcy4kPVZbcV07YnJlYWs7Y2FzZSAxMDpjYXNlIDEzOnRoaXMuJD1WW3EtMl0rIi4iK1ZbcV07YnJlYWs7Y2FzZSAxMTpjYXNlIDE1OnRoaXMuJD1WW3EtMV0rVltxXTticmVhaztjYXNlIDE2OmNhc2UgMTc6dGhpcy4kPVZbcS0xXSsifiIrVltxXSsifiI7YnJlYWs7Y2FzZSAxODpyZS5hZGRSZWxhdGlvbihWW3FdKTticmVhaztjYXNlIDE5OlZbcS0xXS50aXRsZT1yZS5jbGVhbnVwTGFiZWwoVltxXSkscmUuYWRkUmVsYXRpb24oVltxLTFdKTticmVhaztjYXNlIDMwOnRoaXMuJD1WW3FdLnRyaW0oKSxyZS5zZXRBY2NUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMzE6Y2FzZSAzMjp0aGlzLiQ9VltxXS50cmltKCkscmUuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDMzOnJlLmFkZENsYXNzZXNUb05hbWVzcGFjZShWW3EtM10sVltxLTFdKTticmVhaztjYXNlIDM0OnJlLmFkZENsYXNzZXNUb05hbWVzcGFjZShWW3EtNF0sVltxLTFdKTticmVhaztjYXNlIDM1OnRoaXMuJD1WW3FdLHJlLmFkZE5hbWVzcGFjZShWW3FdKTticmVhaztjYXNlIDM2OnRoaXMuJD1bVltxXV07YnJlYWs7Y2FzZSAzNzp0aGlzLiQ9W1ZbcS0xXV07YnJlYWs7Y2FzZSAzODpWW3FdLnVuc2hpZnQoVltxLTJdKSx0aGlzLiQ9VltxXTticmVhaztjYXNlIDQwOnJlLnNldENzc0NsYXNzKFZbcS0yXSxWW3FdKTticmVhaztjYXNlIDQxOnJlLmFkZE1lbWJlcnMoVltxLTNdLFZbcS0xXSk7YnJlYWs7Y2FzZSA0MjpyZS5zZXRDc3NDbGFzcyhWW3EtNV0sVltxLTNdKSxyZS5hZGRNZW1iZXJzKFZbcS01XSxWW3EtMV0pO2JyZWFrO2Nhc2UgNDM6dGhpcy4kPVZbcV0scmUuYWRkQ2xhc3MoVltxXSk7YnJlYWs7Y2FzZSA0NDp0aGlzLiQ9VltxLTFdLHJlLmFkZENsYXNzKFZbcS0xXSkscmUuc2V0Q2xhc3NMYWJlbChWW3EtMV0sVltxXSk7YnJlYWs7Y2FzZSA0NTpyZS5hZGRBbm5vdGF0aW9uKFZbcV0sVltxLTJdKTticmVhaztjYXNlIDQ2OmNhc2UgNTk6dGhpcy4kPVtWW3FdXTticmVhaztjYXNlIDQ3OlZbcV0ucHVzaChWW3EtMV0pLHRoaXMuJD1WW3FdO2JyZWFrO2Nhc2UgNDg6YnJlYWs7Y2FzZSA0OTpyZS5hZGRNZW1iZXIoVltxLTFdLHJlLmNsZWFudXBMYWJlbChWW3FdKSk7YnJlYWs7Y2FzZSA1MDpicmVhaztjYXNlIDUxOmJyZWFrO2Nhc2UgNTI6dGhpcy4kPXtpZDE6VltxLTJdLGlkMjpWW3FdLHJlbGF0aW9uOlZbcS0xXSxyZWxhdGlvblRpdGxlMToibm9uZSIscmVsYXRpb25UaXRsZTI6Im5vbmUifTticmVhaztjYXNlIDUzOnRoaXMuJD17aWQxOlZbcS0zXSxpZDI6VltxXSxyZWxhdGlvbjpWW3EtMV0scmVsYXRpb25UaXRsZTE6VltxLTJdLHJlbGF0aW9uVGl0bGUyOiJub25lIn07YnJlYWs7Y2FzZSA1NDp0aGlzLiQ9e2lkMTpWW3EtM10saWQyOlZbcV0scmVsYXRpb246VltxLTJdLHJlbGF0aW9uVGl0bGUxOiJub25lIixyZWxhdGlvblRpdGxlMjpWW3EtMV19O2JyZWFrO2Nhc2UgNTU6dGhpcy4kPXtpZDE6VltxLTRdLGlkMjpWW3FdLHJlbGF0aW9uOlZbcS0yXSxyZWxhdGlvblRpdGxlMTpWW3EtM10scmVsYXRpb25UaXRsZTI6VltxLTFdfTticmVhaztjYXNlIDU2OnJlLmFkZE5vdGUoVltxXSxWW3EtMV0pO2JyZWFrO2Nhc2UgNTc6cmUuYWRkTm90ZShWW3FdKTticmVhaztjYXNlIDU4OnRoaXMuJD1WW3EtMl0scmUuZGVmaW5lQ2xhc3MoVltxLTFdLFZbcV0pO2JyZWFrO2Nhc2UgNjA6dGhpcy4kPVZbcS0yXS5jb25jYXQoW1ZbcV1dKTticmVhaztjYXNlIDYxOnJlLnNldERpcmVjdGlvbigiVEIiKTticmVhaztjYXNlIDYyOnJlLnNldERpcmVjdGlvbigiQlQiKTticmVhaztjYXNlIDYzOnJlLnNldERpcmVjdGlvbigiUkwiKTticmVhaztjYXNlIDY0OnJlLnNldERpcmVjdGlvbigiTFIiKTticmVhaztjYXNlIDY1OnRoaXMuJD17dHlwZTE6VltxLTJdLHR5cGUyOlZbcV0sbGluZVR5cGU6VltxLTFdfTticmVhaztjYXNlIDY2OnRoaXMuJD17dHlwZTE6Im5vbmUiLHR5cGUyOlZbcV0sbGluZVR5cGU6VltxLTFdfTticmVhaztjYXNlIDY3OnRoaXMuJD17dHlwZTE6VltxLTFdLHR5cGUyOiJub25lIixsaW5lVHlwZTpWW3FdfTticmVhaztjYXNlIDY4OnRoaXMuJD17dHlwZTE6Im5vbmUiLHR5cGUyOiJub25lIixsaW5lVHlwZTpWW3FdfTticmVhaztjYXNlIDY5OnRoaXMuJD1yZS5yZWxhdGlvblR5cGUuQUdHUkVHQVRJT047YnJlYWs7Y2FzZSA3MDp0aGlzLiQ9cmUucmVsYXRpb25UeXBlLkVYVEVOU0lPTjticmVhaztjYXNlIDcxOnRoaXMuJD1yZS5yZWxhdGlvblR5cGUuQ09NUE9TSVRJT047YnJlYWs7Y2FzZSA3Mjp0aGlzLiQ9cmUucmVsYXRpb25UeXBlLkRFUEVOREVOQ1k7YnJlYWs7Y2FzZSA3Mzp0aGlzLiQ9cmUucmVsYXRpb25UeXBlLkxPTExJUE9QO2JyZWFrO2Nhc2UgNzQ6dGhpcy4kPXJlLmxpbmVUeXBlLkxJTkU7YnJlYWs7Y2FzZSA3NTp0aGlzLiQ9cmUubGluZVR5cGUuRE9UVEVEX0xJTkU7YnJlYWs7Y2FzZSA3NjpjYXNlIDgyOnRoaXMuJD1WW3EtMl0scmUuc2V0Q2xpY2tFdmVudChWW3EtMV0sVltxXSk7YnJlYWs7Y2FzZSA3NzpjYXNlIDgzOnRoaXMuJD1WW3EtM10scmUuc2V0Q2xpY2tFdmVudChWW3EtMl0sVltxLTFdKSxyZS5zZXRUb29sdGlwKFZbcS0yXSxWW3FdKTticmVhaztjYXNlIDc4OnRoaXMuJD1WW3EtMl0scmUuc2V0TGluayhWW3EtMV0sVltxXSk7YnJlYWs7Y2FzZSA3OTp0aGlzLiQ9VltxLTNdLHJlLnNldExpbmsoVltxLTJdLFZbcS0xXSxWW3FdKTticmVhaztjYXNlIDgwOnRoaXMuJD1WW3EtM10scmUuc2V0TGluayhWW3EtMl0sVltxLTFdKSxyZS5zZXRUb29sdGlwKFZbcS0yXSxWW3FdKTticmVhaztjYXNlIDgxOnRoaXMuJD1WW3EtNF0scmUuc2V0TGluayhWW3EtM10sVltxLTJdLFZbcV0pLHJlLnNldFRvb2x0aXAoVltxLTNdLFZbcS0xXSk7YnJlYWs7Y2FzZSA4NDp0aGlzLiQ9VltxLTNdLHJlLnNldENsaWNrRXZlbnQoVltxLTJdLFZbcS0xXSxWW3FdKTticmVhaztjYXNlIDg1OnRoaXMuJD1WW3EtNF0scmUuc2V0Q2xpY2tFdmVudChWW3EtM10sVltxLTJdLFZbcS0xXSkscmUuc2V0VG9vbHRpcChWW3EtM10sVltxXSk7YnJlYWs7Y2FzZSA4Njp0aGlzLiQ9VltxLTNdLHJlLnNldExpbmsoVltxLTJdLFZbcV0pO2JyZWFrO2Nhc2UgODc6dGhpcy4kPVZbcS00XSxyZS5zZXRMaW5rKFZbcS0zXSxWW3EtMV0sVltxXSk7YnJlYWs7Y2FzZSA4ODp0aGlzLiQ9VltxLTRdLHJlLnNldExpbmsoVltxLTNdLFZbcS0xXSkscmUuc2V0VG9vbHRpcChWW3EtM10sVltxXSk7YnJlYWs7Y2FzZSA4OTp0aGlzLiQ9VltxLTVdLHJlLnNldExpbmsoVltxLTRdLFZbcS0yXSxWW3FdKSxyZS5zZXRUb29sdGlwKFZbcS00XSxWW3EtMV0pO2JyZWFrO2Nhc2UgOTA6dGhpcy4kPVZbcS0yXSxyZS5zZXRDc3NTdHlsZShWW3EtMV0sVltxXSk7YnJlYWs7Y2FzZSA5MTpyZS5zZXRDc3NDbGFzcyhWW3EtMV0sVltxXSk7YnJlYWs7Y2FzZSA5Mjp0aGlzLiQ9W1ZbcV1dO2JyZWFrO2Nhc2UgOTM6VltxLTJdLnB1c2goVltxXSksdGhpcy4kPVZbcS0yXTticmVhaztjYXNlIDk1OnRoaXMuJD1WW3EtMV0rVltxXTticmVha319LCJhbm9ueW1vdXMiKSx0YWJsZTpbezM6MSw0OjIsNTozLDY6NCw3OlsxLDZdLDEwOjUsMTY6MzksMTg6MjEsMTk6NDAsMjE6NywyMzo4LDI0OjksMjU6MTAsMjY6MTEsMjc6MTIsMjg6MTMsMjk6MTQsMzA6MTUsMzE6MTYsMzI6MTcsMzM6ZSwzNTpyLDM3Om4sMzg6MjIsNDI6aSw0MzoyMyw0NjphLDQ3OnMsNDk6bCw1MDp1LDUyOmgsNTQ6Ziw1NTpkLDU4OnAsNjA6bSw2MTpnLDYyOnksNjM6diw3Mzp4LDc0OmIsNzY6dyw4MDpDLDgxOlQsODQ6RSw5OTpBLDEwMTpTLDEwMjpffSx7MTpbM119LHsxOlsyLDFdfSx7MTpbMiwyXX0sezE6WzIsM119LHQoSSxbMiw1XSx7ODpbMSw0OF19KSx7ODpbMSw0OV19LHQoRCxbMiwxOF0sezIyOlsxLDUwXX0pLHQoRCxbMiwyMF0pLHQoRCxbMiwyMV0pLHQoRCxbMiwyMl0pLHQoRCxbMiwyM10pLHQoRCxbMiwyNF0pLHQoRCxbMiwyNV0pLHQoRCxbMiwyNl0pLHQoRCxbMiwyN10pLHQoRCxbMiwyOF0pLHQoRCxbMiwyOV0pLHszNDpbMSw1MV19LHszNjpbMSw1Ml19LHQoRCxbMiwzMl0pLHQoRCxbMiw0OF0sezUxOjUzLDY0OjU2LDY1OjU3LDEzOlsxLDU0XSwyMjpbMSw1NV0sNjY6ayw2NzpMLDY4OlIsNjk6Tyw3MDpNLDcxOkIsNzI6Rn0pLHszOTpbMSw2NV19LHQoUCxbMiwzOV0sezM5OlsxLDY3XSw0NDpbMSw2Nl19KSx0KEQsWzIsNTBdKSx0KEQsWzIsNTFdKSx7MTY6NjgsNTg6cCw4NDpFLDk5OkEsMTAxOlN9LHsxNjozOSwxODo2OSwxOTo0MCw1ODpwLDg0OkUsOTk6QSwxMDE6UywxMDI6X30sezE2OjM5LDE4OjcwLDE5OjQwLDU4OnAsODQ6RSw5OTpBLDEwMTpTLDEwMjpffSx7MTY6MzksMTg6NzEsMTk6NDAsNTg6cCw4NDpFLDk5OkEsMTAxOlMsMTAyOl99LHs1ODpbMSw3Ml19LHsxMzpbMSw3M119LHsxNjozOSwxODo3NCwxOTo0MCw1ODpwLDg0OkUsOTk6QSwxMDE6UywxMDI6X30sezEzOnosNTM6NzV9LHs1Njo3Nyw1ODpbMSw3OF19LHQoRCxbMiw2MV0pLHQoRCxbMiw2Ml0pLHQoRCxbMiw2M10pLHQoRCxbMiw2NF0pLHQoJCxbMiwxMl0sezE2OjM5LDE5OjQwLDE4OjgwLDE3OlsxLDc5XSwyMDpbMSw4MV0sNTg6cCw4NDpFLDk5OkEsMTAxOlMsMTAyOl99KSx0KCQsWzIsMTRdLHsyMDpbMSw4Ml19KSx7MTU6ODMsMTY6ODQsNTg6cCw4NDpFLDk5OkEsMTAxOlN9LHsxNjozOSwxODo4NSwxOTo0MCw1ODpwLDg0OkUsOTk6QSwxMDE6UywxMDI6X30sdChILFsyLDExOF0pLHQoSCxbMiwxMTldKSx0KEgsWzIsMTIwXSksdChILFsyLDEyMV0pLHQoWzEsOCw5LDEyLDEzLDIwLDIyLDM5LDQxLDQ0LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDc3LDc5XSxbMiwxMjJdKSx0KEksWzIsNl0sezEwOjUsMjE6NywyMzo4LDI0OjksMjU6MTAsMjY6MTEsMjc6MTIsMjg6MTMsMjk6MTQsMzA6MTUsMzE6MTYsMzI6MTcsMTg6MjEsMzg6MjIsNDM6MjMsMTY6MzksMTk6NDAsNTo4NiwzMzplLDM1OnIsMzc6biw0MjppLDQ2OmEsNDc6cyw0OTpsLDUwOnUsNTI6aCw1NDpmLDU1OmQsNTg6cCw2MDptLDYxOmcsNjI6eSw2Mzp2LDczOngsNzQ6Yiw3Njp3LDgwOkMsODE6VCw4NDpFLDk5OkEsMTAxOlMsMTAyOl99KSx7NTo4NywxMDo1LDE2OjM5LDE4OjIxLDE5OjQwLDIxOjcsMjM6OCwyNDo5LDI1OjEwLDI2OjExLDI3OjEyLDI4OjEzLDI5OjE0LDMwOjE1LDMxOjE2LDMyOjE3LDMzOmUsMzU6ciwzNzpuLDM4OjIyLDQyOmksNDM6MjMsNDY6YSw0NzpzLDQ5OmwsNTA6dSw1MjpoLDU0OmYsNTU6ZCw1ODpwLDYwOm0sNjE6Zyw2Mjp5LDYzOnYsNzM6eCw3NDpiLDc2OncsODA6Qyw4MTpULDg0OkUsOTk6QSwxMDE6UywxMDI6X30sdChELFsyLDE5XSksdChELFsyLDMwXSksdChELFsyLDMxXSksezEzOlsxLDg5XSwxNjozOSwxODo4OCwxOTo0MCw1ODpwLDg0OkUsOTk6QSwxMDE6UywxMDI6X30sezUxOjkwLDY0OjU2LDY1OjU3LDY2OmssNjc6TCw2ODpSLDY5Ok8sNzA6TSw3MTpCLDcyOkZ9LHQoRCxbMiw0OV0pLHs2NTo5MSw3MTpCLDcyOkZ9LHQoUSxbMiw2OF0sezY0OjkyLDY2OmssNjc6TCw2ODpSLDY5Ok8sNzA6TX0pLHQoaixbMiw2OV0pLHQoaixbMiw3MF0pLHQoaixbMiw3MV0pLHQoaixbMiw3Ml0pLHQoaixbMiw3M10pLHQoaWUsWzIsNzRdKSx0KGllLFsyLDc1XSksezg6WzEsOTRdLDI0Ojk1LDQwOjkzLDQzOjIzLDQ2OmF9LHsxNjo5Niw1ODpwLDg0OkUsOTk6QSwxMDE6U30sezQ1Ojk3LDQ5Om5lfSx7NDg6WzEsOTldfSx7MTM6WzEsMTAwXX0sezEzOlsxLDEwMV19LHs3NzpbMSwxMDJdLDc5OlsxLDEwM119LHsyMjpsZSw1NzoxMDQsNTg6aGUsODA6Syw4MjoxMDUsODM6MTA2LDg0OlgsODU6dGUsODY6Siw4NzpzZSw4ODp1ZSw4OTpafSx7NTg6WzEsMTE2XX0sezEzOnosNTM6MTE3fSx0KEQsWzIsNTddKSx0KEQsWzIsMTIzXSksezIyOmxlLDU3OjExOCw1ODpoZSw1OTpbMSwxMTldLDgwOkssODI6MTA1LDgzOjEwNiw4NDpYLDg1OnRlLDg2OkosODc6c2UsODg6dWUsODk6Wn0sdChTZSxbMiw1OV0pLHsxNjozOSwxODoxMjAsMTk6NDAsNTg6cCw4NDpFLDk5OkEsMTAxOlMsMTAyOl99LHQoJCxbMiwxNV0pLHQoJCxbMiwxNl0pLHQoJCxbMiwxN10pLHszOTpbMiwzNV19LHsxNToxMjIsMTY6ODQsMTc6WzEsMTIxXSwzOTpbMiw5XSw1ODpwLDg0OkUsOTk6QSwxMDE6U30sdChjZSxbMiw0M10sezExOjEyMywxMjpbMSwxMjRdfSksdChJLFsyLDddKSx7OTpbMSwxMjVdfSx0KGFlLFsyLDUyXSksezE2OjM5LDE4OjEyNiwxOTo0MCw1ODpwLDg0OkUsOTk6QSwxMDE6UywxMDI6X30sezEzOlsxLDEyOF0sMTY6MzksMTg6MTI3LDE5OjQwLDU4OnAsODQ6RSw5OTpBLDEwMTpTLDEwMjpffSx0KFEsWzIsNjddLHs2NDoxMjksNjY6ayw2NzpMLDY4OlIsNjk6Tyw3MDpNfSksdChRLFsyLDY2XSksezQxOlsxLDEzMF19LHsyNDo5NSw0MDoxMzEsNDM6MjMsNDY6YX0sezg6WzEsMTMyXSw0MTpbMiwzNl19LHQoUCxbMiw0MF0sezM5OlsxLDEzM119KSx7NDE6WzEsMTM0XX0sezQxOlsyLDQ2XSw0NToxMzUsNDk6bmV9LHsxNjozOSwxODoxMzYsMTk6NDAsNTg6cCw4NDpFLDk5OkEsMTAxOlMsMTAyOl99LHQoRCxbMiw3Nl0sezEzOlsxLDEzN119KSx0KEQsWzIsNzhdLHsxMzpbMSwxMzldLDc1OlsxLDEzOF19KSx0KEQsWzIsODJdLHsxMzpbMSwxNDBdLDc4OlsxLDE0MV19KSx7MTM6WzEsMTQyXX0sdChELFsyLDkwXSx7NTk6T2V9KSx0KGdlLFsyLDkyXSx7ODM6MTQ0LDIyOmxlLDU4OmhlLDgwOkssODQ6WCw4NTp0ZSw4NjpKLDg3OnNlLDg4OnVlLDg5Olp9KSx0KHplLFsyLDk0XSksdCh6ZSxbMiw5Nl0pLHQoemUsWzIsOTddKSx0KHplLFsyLDk4XSksdCh6ZSxbMiw5OV0pLHQoemUsWzIsMTAwXSksdCh6ZSxbMiwxMDFdKSx0KHplLFsyLDEwMl0pLHQoemUsWzIsMTAzXSksdCh6ZSxbMiwxMDRdKSx0KEQsWzIsOTFdKSx0KEQsWzIsNTZdKSx0KEQsWzIsNThdLHs1OTpPZX0pLHs1ODpbMSwxNDVdfSx0KCQsWzIsMTNdKSx7MTU6MTQ2LDE2Ojg0LDU4OnAsODQ6RSw5OTpBLDEwMTpTfSx7Mzk6WzIsMTFdfSx0KGNlLFsyLDQ0XSksezEzOlsxLDE0N119LHsxOlsyLDRdfSx0KGFlLFsyLDU0XSksdChhZSxbMiw1M10pLHsxNjozOSwxODoxNDgsMTk6NDAsNTg6cCw4NDpFLDk5OkEsMTAxOlMsMTAyOl99LHQoUSxbMiw2NV0pLHQoRCxbMiwzM10pLHs0MTpbMSwxNDldfSx7MjQ6OTUsNDA6MTUwLDQxOlsyLDM3XSw0MzoyMyw0NjphfSx7NDU6MTUxLDQ5Om5lfSx0KFAsWzIsNDFdKSx7NDE6WzIsNDddfSx0KEQsWzIsNDVdKSx0KEQsWzIsNzddKSx0KEQsWzIsNzldKSx0KEQsWzIsODBdLHs3NTpbMSwxNTJdfSksdChELFsyLDgzXSksdChELFsyLDg0XSx7MTM6WzEsMTUzXX0pLHQoRCxbMiw4Nl0sezEzOlsxLDE1NV0sNzU6WzEsMTU0XX0pLHsyMjpsZSw1ODpoZSw4MDpLLDgyOjE1Niw4MzoxMDYsODQ6WCw4NTp0ZSw4NjpKLDg3OnNlLDg4OnVlLDg5Olp9LHQoemUsWzIsOTVdKSx0KFNlLFsyLDYwXSksezM5OlsyLDEwXX0sezE0OlsxLDE1N119LHQoYWUsWzIsNTVdKSx0KEQsWzIsMzRdKSx7NDE6WzIsMzhdfSx7NDE6WzEsMTU4XX0sdChELFsyLDgxXSksdChELFsyLDg1XSksdChELFsyLDg3XSksdChELFsyLDg4XSx7NzU6WzEsMTU5XX0pLHQoZ2UsWzIsOTNdLHs4MzoxNDQsMjI6bGUsNTg6aGUsODA6Syw4NDpYLDg1OnRlLDg2OkosODc6c2UsODg6dWUsODk6Wn0pLHQoY2UsWzIsOF0pLHQoUCxbMiw0Ml0pLHQoRCxbMiw4OV0pXSxkZWZhdWx0QWN0aW9uczp7MjpbMiwxXSwzOlsyLDJdLDQ6WzIsM10sODM6WzIsMzVdLDEyMjpbMiwxMV0sMTI1OlsyLDRdLDEzNTpbMiw0N10sMTQ2OlsyLDEwXSwxNTA6WzIsMzhdfSxwYXJzZUVycm9yOm8oZnVuY3Rpb24oYmUsVyl7aWYoVy5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKGJlKTtlbHNle3ZhciBkZT1uZXcgRXJyb3IoYmUpO3Rocm93IGRlLmhhc2g9VyxkZX19LCJwYXJzZUVycm9yIikscGFyc2U6byhmdW5jdGlvbihiZSl7dmFyIFc9dGhpcyxkZT1bMF0scmU9W10sb2U9W251bGxdLFY9W10seGU9dGhpcy50YWJsZSxxPSIiLHBlPTAsdmU9MCxQZT0wLF9lPTIsd2U9MSxWZT1WLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLERlPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlcikscWU9e3l5Ont9fTtmb3IodmFyIGF0IGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksYXQpJiYocWUueXlbYXRdPXRoaXMueXlbYXRdKTtEZS5zZXRJbnB1dChiZSxxZS55eSkscWUueXkubGV4ZXI9RGUscWUueXkucGFyc2VyPXRoaXMsdHlwZW9mIERlLnl5bGxvYz4idSImJihEZS55eWxsb2M9e30pO3ZhciBSdD1EZS55eWxsb2M7Vi5wdXNoKFJ0KTt2YXIgc3Q9RGUub3B0aW9ucyYmRGUub3B0aW9ucy5yYW5nZXM7dHlwZW9mIHFlLnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPXFlLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIFVlKFR0KXtkZS5sZW5ndGg9ZGUubGVuZ3RoLTIqVHQsb2UubGVuZ3RoPW9lLmxlbmd0aC1UdCxWLmxlbmd0aD1WLmxlbmd0aC1UdH1vKFVlLCJwb3BTdGFjayIpO2Z1bmN0aW9uIGN0KCl7dmFyIFR0O3JldHVybiBUdD1yZS5wb3AoKXx8RGUubGV4KCl8fHdlLHR5cGVvZiBUdCE9Im51bWJlciImJihUdCBpbnN0YW5jZW9mIEFycmF5JiYocmU9VHQsVHQ9cmUucG9wKCkpLFR0PVcuc3ltYm9sc19bVHRdfHxUdCksVHR9byhjdCwibGV4Iik7Zm9yKHZhciBXZSxvdCxZdCxidCxNdCx4dCx1dD17fSxFdCxmdCx5dCxudDs7KXtpZihZdD1kZVtkZS5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1tZdF0/YnQ9dGhpcy5kZWZhdWx0QWN0aW9uc1tZdF06KChXZT09PW51bGx8fHR5cGVvZiBXZT4idSIpJiYoV2U9Y3QoKSksYnQ9eGVbWXRdJiZ4ZVtZdF1bV2VdKSx0eXBlb2YgYnQ+InUifHwhYnQubGVuZ3RofHwhYnRbMF0pe3ZhciBkbj0iIjtudD1bXTtmb3IoRXQgaW4geGVbWXRdKXRoaXMudGVybWluYWxzX1tFdF0mJkV0Pl9lJiZudC5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bRXRdKyInIik7RGUuc2hvd1Bvc2l0aW9uP2RuPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKHBlKzEpK2A6CmArRGUuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtudC5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW1dlXXx8V2UpKyInIjpkbj0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhwZSsxKSsiOiBVbmV4cGVjdGVkICIrKFdlPT13ZT8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tXZV18fFdlKSsiJyIpLHRoaXMucGFyc2VFcnJvcihkbix7dGV4dDpEZS5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bV2VdfHxXZSxsaW5lOkRlLnl5bGluZW5vLGxvYzpSdCxleHBlY3RlZDpudH0pfWlmKGJ0WzBdaW5zdGFuY2VvZiBBcnJheSYmYnQubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitZdCsiLCB0b2tlbjogIitXZSk7c3dpdGNoKGJ0WzBdKXtjYXNlIDE6ZGUucHVzaChXZSksb2UucHVzaChEZS55eXRleHQpLFYucHVzaChEZS55eWxsb2MpLGRlLnB1c2goYnRbMV0pLFdlPW51bGwsb3Q/KFdlPW90LG90PW51bGwpOih2ZT1EZS55eWxlbmcscT1EZS55eXRleHQscGU9RGUueXlsaW5lbm8sUnQ9RGUueXlsbG9jLFBlPjAmJlBlLS0pO2JyZWFrO2Nhc2UgMjppZihmdD10aGlzLnByb2R1Y3Rpb25zX1tidFsxXV1bMV0sdXQuJD1vZVtvZS5sZW5ndGgtZnRdLHV0Ll8kPXtmaXJzdF9saW5lOlZbVi5sZW5ndGgtKGZ0fHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6VltWLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOlZbVi5sZW5ndGgtKGZ0fHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOlZbVi5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LHN0JiYodXQuXyQucmFuZ2U9W1ZbVi5sZW5ndGgtKGZ0fHwxKV0ucmFuZ2VbMF0sVltWLmxlbmd0aC0xXS5yYW5nZVsxXV0pLHh0PXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseSh1dCxbcSx2ZSxwZSxxZS55eSxidFsxXSxvZSxWXS5jb25jYXQoVmUpKSx0eXBlb2YgeHQ8InUiKXJldHVybiB4dDtmdCYmKGRlPWRlLnNsaWNlKDAsLTEqZnQqMiksb2U9b2Uuc2xpY2UoMCwtMSpmdCksVj1WLnNsaWNlKDAsLTEqZnQpKSxkZS5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW2J0WzFdXVswXSksb2UucHVzaCh1dC4kKSxWLnB1c2godXQuXyQpLHl0PXhlW2RlW2RlLmxlbmd0aC0yXV1bZGVbZGUubGVuZ3RoLTFdXSxkZS5wdXNoKHl0KTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfSwicGFyc2UiKX0sJGU9ZnVuY3Rpb24oKXt2YXIgSWU9e0VPRjoxLHBhcnNlRXJyb3I6byhmdW5jdGlvbihXLGRlKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKFcsZGUpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKFcpfSwicGFyc2VFcnJvciIpLHNldElucHV0Om8oZnVuY3Rpb24oYmUsVyl7cmV0dXJuIHRoaXMueXk9V3x8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9YmUsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LCJzZXRJbnB1dCIpLGlucHV0Om8oZnVuY3Rpb24oKXt2YXIgYmU9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPWJlLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1iZSx0aGlzLm1hdGNoZWQrPWJlO3ZhciBXPWJlLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gVz8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksYmV9LCJpbnB1dCIpLHVucHV0Om8oZnVuY3Rpb24oYmUpe3ZhciBXPWJlLmxlbmd0aCxkZT1iZS5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PWJlK3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1XKSx0aGlzLm9mZnNldC09Vzt2YXIgcmU9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksZGUubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1kZS5sZW5ndGgtMSk7dmFyIG9lPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpkZT8oZGUubGVuZ3RoPT09cmUubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStyZVtyZS5sZW5ndGgtZGUubGVuZ3RoXS5sZW5ndGgtZGVbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1XfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W29lWzBdLG9lWzBdK3RoaXMueXlsZW5nLVddKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sInVucHV0IiksbW9yZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30sIm1vcmUiKSxyZWplY3Q6byhmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sInJlamVjdCIpLGxlc3M6byhmdW5jdGlvbihiZSl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKGJlKSl9LCJsZXNzIikscGFzdElucHV0Om8oZnVuY3Rpb24oKXt2YXIgYmU9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihiZS5sZW5ndGg+MjA/Ii4uLiI6IiIpK2JlLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSwicGFzdElucHV0IiksdXBjb21pbmdJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIGJlPXRoaXMubWF0Y2g7cmV0dXJuIGJlLmxlbmd0aDwyMCYmKGJlKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1iZS5sZW5ndGgpKSwoYmUuc3Vic3RyKDAsMjApKyhiZS5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sInVwY29taW5nSW5wdXQiKSxzaG93UG9zaXRpb246byhmdW5jdGlvbigpe3ZhciBiZT10aGlzLnBhc3RJbnB1dCgpLFc9bmV3IEFycmF5KGJlLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIGJlK3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtXKyJeIn0sInNob3dQb3NpdGlvbiIpLHRlc3RfbWF0Y2g6byhmdW5jdGlvbihiZSxXKXt2YXIgZGUscmUsb2U7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKG9lPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKG9lLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLHJlPWJlWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxyZSYmKHRoaXMueXlsaW5lbm8rPXJlLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnJlP3JlW3JlLmxlbmd0aC0xXS5sZW5ndGgtcmVbcmUubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rYmVbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9YmVbMF0sdGhpcy5tYXRjaCs9YmVbMF0sdGhpcy5tYXRjaGVzPWJlLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKGJlWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1iZVswXSxkZT10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxXLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLGRlKXJldHVybiBkZTtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgViBpbiBvZSl0aGlzW1ZdPW9lW1ZdO3JldHVybiExfXJldHVybiExfSwidGVzdF9tYXRjaCIpLG5leHQ6byhmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBiZSxXLGRlLHJlO3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIG9lPXRoaXMuX2N1cnJlbnRSdWxlcygpLFY9MDtWPG9lLmxlbmd0aDtWKyspaWYoZGU9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tvZVtWXV0pLGRlJiYoIVd8fGRlWzBdLmxlbmd0aD5XWzBdLmxlbmd0aCkpe2lmKFc9ZGUscmU9Vix0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihiZT10aGlzLnRlc3RfbWF0Y2goZGUsb2VbVl0pLGJlIT09ITEpcmV0dXJuIGJlO2lmKHRoaXMuX2JhY2t0cmFjayl7Vz0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBXPyhiZT10aGlzLnRlc3RfbWF0Y2goVyxvZVtyZV0pLGJlIT09ITE/YmU6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LCJuZXh0IiksbGV4Om8oZnVuY3Rpb24oKXt2YXIgVz10aGlzLm5leHQoKTtyZXR1cm4gV3x8dGhpcy5sZXgoKX0sImxleCIpLGJlZ2luOm8oZnVuY3Rpb24oVyl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKFcpfSwiYmVnaW4iKSxwb3BTdGF0ZTpvKGZ1bmN0aW9uKCl7dmFyIFc9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gVz4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sInBvcFN0YXRlIiksX2N1cnJlbnRSdWxlczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sIl9jdXJyZW50UnVsZXMiKSx0b3BTdGF0ZTpvKGZ1bmN0aW9uKFcpe3JldHVybiBXPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoV3x8MCksVz49MD90aGlzLmNvbmRpdGlvblN0YWNrW1ddOiJJTklUSUFMIn0sInRvcFN0YXRlIikscHVzaFN0YXRlOm8oZnVuY3Rpb24oVyl7dGhpcy5iZWdpbihXKX0sInB1c2hTdGF0ZSIpLHN0YXRlU3RhY2tTaXplOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LCJzdGF0ZVN0YWNrU2l6ZSIpLG9wdGlvbnM6e30scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKFcsZGUscmUsb2Upe3ZhciBWPW9lO3N3aXRjaChyZSl7Y2FzZSAwOnJldHVybiA2MDtjYXNlIDE6cmV0dXJuIDYxO2Nhc2UgMjpyZXR1cm4gNjI7Y2FzZSAzOnJldHVybiA2MztjYXNlIDQ6YnJlYWs7Y2FzZSA1OmJyZWFrO2Nhc2UgNjpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMzM7YnJlYWs7Y2FzZSA3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7YnJlYWs7Y2FzZSA4OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwzNTticmVhaztjYXNlIDk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjticmVhaztjYXNlIDEwOnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDExOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDEyOnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDEzOnJldHVybiA4O2Nhc2UgMTQ6YnJlYWs7Y2FzZSAxNTpyZXR1cm4gNztjYXNlIDE2OnJldHVybiA3O2Nhc2UgMTc6cmV0dXJuIkVER0VfU1RBVEUiO2Nhc2UgMTg6dGhpcy5iZWdpbigiY2FsbGJhY2tfbmFtZSIpO2JyZWFrO2Nhc2UgMTk6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjA6dGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImNhbGxiYWNrX2FyZ3MiKTticmVhaztjYXNlIDIxOnJldHVybiA3NztjYXNlIDIyOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDIzOnJldHVybiA3ODtjYXNlIDI0OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDI1OnJldHVybiJTVFIiO2Nhc2UgMjY6dGhpcy5iZWdpbigic3RyaW5nIik7YnJlYWs7Y2FzZSAyNzpyZXR1cm4gODA7Y2FzZSAyODpyZXR1cm4gNTU7Y2FzZSAyOTpyZXR1cm4gdGhpcy5iZWdpbigibmFtZXNwYWNlIiksNDI7YnJlYWs7Y2FzZSAzMDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDg7YnJlYWs7Y2FzZSAzMTpicmVhaztjYXNlIDMyOnJldHVybiB0aGlzLmJlZ2luKCJuYW1lc3BhY2UtYm9keSIpLDM5O2JyZWFrO2Nhc2UgMzM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw0MTticmVhaztjYXNlIDM0OnJldHVybiJFT0ZfSU5fU1RSVUNUIjtjYXNlIDM1OnJldHVybiA4O2Nhc2UgMzY6YnJlYWs7Y2FzZSAzNzpyZXR1cm4iRURHRV9TVEFURSI7Y2FzZSAzODpyZXR1cm4gdGhpcy5iZWdpbigiY2xhc3MiKSw0NjticmVhaztjYXNlIDM5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksODticmVhaztjYXNlIDQwOmJyZWFrO2Nhc2UgNDE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCksNDE7YnJlYWs7Y2FzZSA0MjpyZXR1cm4gdGhpcy5iZWdpbigiY2xhc3MtYm9keSIpLDM5O2JyZWFrO2Nhc2UgNDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw0MTticmVhaztjYXNlIDQ0OnJldHVybiJFT0ZfSU5fU1RSVUNUIjtjYXNlIDQ1OnJldHVybiJFREdFX1NUQVRFIjtjYXNlIDQ2OnJldHVybiJPUEVOX0lOX1NUUlVDVCI7Y2FzZSA0NzpicmVhaztjYXNlIDQ4OnJldHVybiJNRU1CRVIiO2Nhc2UgNDk6cmV0dXJuIDgxO2Nhc2UgNTA6cmV0dXJuIDczO2Nhc2UgNTE6cmV0dXJuIDc0O2Nhc2UgNTI6cmV0dXJuIDc2O2Nhc2UgNTM6cmV0dXJuIDUyO2Nhc2UgNTQ6cmV0dXJuIDU0O2Nhc2UgNTU6cmV0dXJuIDQ3O2Nhc2UgNTY6cmV0dXJuIDQ4O2Nhc2UgNTc6cmV0dXJuIDc5O2Nhc2UgNTg6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNTk6cmV0dXJuIkdFTkVSSUNUWVBFIjtjYXNlIDYwOnRoaXMuYmVnaW4oImdlbmVyaWMiKTticmVhaztjYXNlIDYxOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDYyOnJldHVybiJCUVVPVEVfU1RSIjtjYXNlIDYzOnRoaXMuYmVnaW4oImJxc3RyaW5nIik7YnJlYWs7Y2FzZSA2NDpyZXR1cm4gNzU7Y2FzZSA2NTpyZXR1cm4gNzU7Y2FzZSA2NjpyZXR1cm4gNzU7Y2FzZSA2NzpyZXR1cm4gNzU7Y2FzZSA2ODpyZXR1cm4gNjc7Y2FzZSA2OTpyZXR1cm4gNjc7Y2FzZSA3MDpyZXR1cm4gNjk7Y2FzZSA3MTpyZXR1cm4gNjk7Y2FzZSA3MjpyZXR1cm4gNjg7Y2FzZSA3MzpyZXR1cm4gNjY7Y2FzZSA3NDpyZXR1cm4gNzA7Y2FzZSA3NTpyZXR1cm4gNzE7Y2FzZSA3NjpyZXR1cm4gNzI7Y2FzZSA3NzpyZXR1cm4gMjI7Y2FzZSA3ODpyZXR1cm4gNDQ7Y2FzZSA3OTpyZXR1cm4gOTk7Y2FzZSA4MDpyZXR1cm4gMTc7Y2FzZSA4MTpyZXR1cm4iUExVUyI7Y2FzZSA4MjpyZXR1cm4gODU7Y2FzZSA4MzpyZXR1cm4gNTk7Y2FzZSA4NDpyZXR1cm4gODg7Y2FzZSA4NTpyZXR1cm4gODg7Y2FzZSA4NjpyZXR1cm4gODk7Y2FzZSA4NzpyZXR1cm4iRVFVQUxTIjtjYXNlIDg4OnJldHVybiJFUVVBTFMiO2Nhc2UgODk6cmV0dXJuIDU4O2Nhc2UgOTA6cmV0dXJuIDEyO2Nhc2UgOTE6cmV0dXJuIDE0O2Nhc2UgOTI6cmV0dXJuIlBVTkNUVUFUSU9OIjtjYXNlIDkzOnJldHVybiA4NDtjYXNlIDk0OnJldHVybiAxMDE7Y2FzZSA5NTpyZXR1cm4gODc7Y2FzZSA5NjpyZXR1cm4gODc7Y2FzZSA5NzpyZXR1cm4gOX19LCJhbm9ueW1vdXMiKSxydWxlczpbL14oPzouKmRpcmVjdGlvblxzK1RCW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK0JUW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK1JMW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK0xSW15cbl0qKS8sL14oPzolJSg/IVx7KSpbXlxuXSooXHI/XG4/KSspLywvXig/OiUlW15cbl0qKFxyP1xuKSopLywvXig/OmFjY1RpdGxlXHMqOlxzKikvLC9eKD86KD8hXG58fCkqW15cbl0qKS8sL14oPzphY2NEZXNjclxzKjpccyopLywvXig/Oig/IVxufHwpKlteXG5dKikvLC9eKD86YWNjRGVzY3Jccypce1xzKikvLC9eKD86W1x9XSkvLC9eKD86W15cfV0qKS8sL14oPzpccyooXHI/XG4pKykvLC9eKD86XHMrKS8sL14oPzpjbGFzc0RpYWdyYW0tdjJcYikvLC9eKD86Y2xhc3NEaWFncmFtXGIpLywvXig/OlxbXCpcXSkvLC9eKD86Y2FsbFtcc10rKS8sL14oPzpcKFtcc10qXCkpLywvXig/OlwoKS8sL14oPzpbXihdKikvLC9eKD86XCkpLywvXig/OlteKV0qKS8sL14oPzpbIl0pLywvXig/OlteIl0qKS8sL14oPzpbIl0pLywvXig/OnN0eWxlXGIpLywvXig/OmNsYXNzRGVmXGIpLywvXig/Om5hbWVzcGFjZVxiKS8sL14oPzpccyooXHI/XG4pKykvLC9eKD86XHMrKS8sL14oPzpbe10pLywvXig/Olt9XSkvLC9eKD86JCkvLC9eKD86XHMqKFxyP1xuKSspLywvXig/OlxzKykvLC9eKD86XFtcKlxdKS8sL14oPzpjbGFzc1xiKS8sL14oPzpccyooXHI/XG4pKykvLC9eKD86XHMrKS8sL14oPzpbfV0pLywvXig/Olt7XSkvLC9eKD86W31dKS8sL14oPzokKS8sL14oPzpcW1wqXF0pLywvXig/Olt7XSkvLC9eKD86W1xuXSkvLC9eKD86W157fVxuXSopLywvXig/OmNzc0NsYXNzXGIpLywvXig/OmNhbGxiYWNrXGIpLywvXig/OmxpbmtcYikvLC9eKD86Y2xpY2tcYikvLC9eKD86bm90ZSBmb3JcYikvLC9eKD86bm90ZVxiKS8sL14oPzo8PCkvLC9eKD86Pj4pLywvXig/OmhyZWZcYikvLC9eKD86W35dKS8sL14oPzpbXn5dKikvLC9eKD86fikvLC9eKD86W2BdKS8sL14oPzpbXmBdKykvLC9eKD86W2BdKS8sL14oPzpfc2VsZlxiKS8sL14oPzpfYmxhbmtcYikvLC9eKD86X3BhcmVudFxiKS8sL14oPzpfdG9wXGIpLywvXig/OlxzKjxcfCkvLC9eKD86XHMqXHw+KS8sL14oPzpccyo+KS8sL14oPzpccyo8KS8sL14oPzpccypcKikvLC9eKD86XHMqb1xiKS8sL14oPzpccypcKFwpKS8sL14oPzotLSkvLC9eKD86XC5cLikvLC9eKD86OnsxfVteOlxuO10rKS8sL14oPzo6ezN9KS8sL14oPzotKS8sL14oPzpcLikvLC9eKD86XCspLywvXig/OjopLywvXig/OiwpLywvXig/OiMpLywvXig/OiMpLywvXig/OiUpLywvXig/Oj0pLywvXig/Oj0pLywvXig/Olx3KykvLC9eKD86XFspLywvXig/OlxdKS8sL14oPzpbISIjJCUmJyorLC0uYD9cXC9dKS8sL14oPzpbMC05XSspLywvXig/OltcdTAwQUFcdTAwQjVcdTAwQkFcdTAwQzAtXHUwMEQ2XHUwMEQ4LVx1MDBGNl18W1x1MDBGOC1cdTAyQzFcdTAyQzYtXHUwMkQxXHUwMkUwLVx1MDJFNFx1MDJFQ1x1MDJFRVx1MDM3MC1cdTAzNzRcdTAzNzZcdTAzNzddfFtcdTAzN0EtXHUwMzdEXHUwMzg2XHUwMzg4LVx1MDM4QVx1MDM4Q1x1MDM4RS1cdTAzQTFcdTAzQTMtXHUwM0Y1XXxbXHUwM0Y3LVx1MDQ4MVx1MDQ4QS1cdTA1MjdcdTA1MzEtXHUwNTU2XHUwNTU5XHUwNTYxLVx1MDU4N1x1MDVEMC1cdTA1RUFdfFtcdTA1RjAtXHUwNUYyXHUwNjIwLVx1MDY0QVx1MDY2RVx1MDY2Rlx1MDY3MS1cdTA2RDNcdTA2RDVcdTA2RTVcdTA2RTZcdTA2RUVdfFtcdTA2RUZcdTA2RkEtXHUwNkZDXHUwNkZGXHUwNzEwXHUwNzEyLVx1MDcyRlx1MDc0RC1cdTA3QTVcdTA3QjFcdTA3Q0EtXHUwN0VBXXxbXHUwN0Y0XHUwN0Y1XHUwN0ZBXHUwODAwLVx1MDgxNVx1MDgxQVx1MDgyNFx1MDgyOFx1MDg0MC1cdTA4NThcdTA4QTBdfFtcdTA4QTItXHUwOEFDXHUwOTA0LVx1MDkzOVx1MDkzRFx1MDk1MFx1MDk1OC1cdTA5NjFcdTA5NzEtXHUwOTc3XXxbXHUwOTc5LVx1MDk3Rlx1MDk4NS1cdTA5OENcdTA5OEZcdTA5OTBcdTA5OTMtXHUwOUE4XHUwOUFBLVx1MDlCMFx1MDlCMl18W1x1MDlCNi1cdTA5QjlcdTA5QkRcdTA5Q0VcdTA5RENcdTA5RERcdTA5REYtXHUwOUUxXHUwOUYwXHUwOUYxXHUwQTA1LVx1MEEwQV18W1x1MEEwRlx1MEExMFx1MEExMy1cdTBBMjhcdTBBMkEtXHUwQTMwXHUwQTMyXHUwQTMzXHUwQTM1XHUwQTM2XHUwQTM4XHUwQTM5XXxbXHUwQTU5LVx1MEE1Q1x1MEE1RVx1MEE3Mi1cdTBBNzRcdTBBODUtXHUwQThEXHUwQThGLVx1MEE5MVx1MEE5My1cdTBBQThdfFtcdTBBQUEtXHUwQUIwXHUwQUIyXHUwQUIzXHUwQUI1LVx1MEFCOVx1MEFCRFx1MEFEMFx1MEFFMFx1MEFFMVx1MEIwNS1cdTBCMENdfFtcdTBCMEZcdTBCMTBcdTBCMTMtXHUwQjI4XHUwQjJBLVx1MEIzMFx1MEIzMlx1MEIzM1x1MEIzNS1cdTBCMzlcdTBCM0RcdTBCNUNdfFtcdTBCNURcdTBCNUYtXHUwQjYxXHUwQjcxXHUwQjgzXHUwQjg1LVx1MEI4QVx1MEI4RS1cdTBCOTBcdTBCOTItXHUwQjk1XHUwQjk5XXxbXHUwQjlBXHUwQjlDXHUwQjlFXHUwQjlGXHUwQkEzXHUwQkE0XHUwQkE4LVx1MEJBQVx1MEJBRS1cdTBCQjlcdTBCRDBdfFtcdTBDMDUtXHUwQzBDXHUwQzBFLVx1MEMxMFx1MEMxMi1cdTBDMjhcdTBDMkEtXHUwQzMzXHUwQzM1LVx1MEMzOVx1MEMzRF18W1x1MEM1OFx1MEM1OVx1MEM2MFx1MEM2MVx1MEM4NS1cdTBDOENcdTBDOEUtXHUwQzkwXHUwQzkyLVx1MENBOFx1MENBQS1cdTBDQjNdfFtcdTBDQjUtXHUwQ0I5XHUwQ0JEXHUwQ0RFXHUwQ0UwXHUwQ0UxXHUwQ0YxXHUwQ0YyXHUwRDA1LVx1MEQwQ1x1MEQwRS1cdTBEMTBdfFtcdTBEMTItXHUwRDNBXHUwRDNEXHUwRDRFXHUwRDYwXHUwRDYxXHUwRDdBLVx1MEQ3Rlx1MEQ4NS1cdTBEOTZcdTBEOUEtXHUwREIxXXxbXHUwREIzLVx1MERCQlx1MERCRFx1MERDMC1cdTBEQzZcdTBFMDEtXHUwRTMwXHUwRTMyXHUwRTMzXHUwRTQwLVx1MEU0Nlx1MEU4MV18W1x1MEU4Mlx1MEU4NFx1MEU4N1x1MEU4OFx1MEU4QVx1MEU4RFx1MEU5NC1cdTBFOTdcdTBFOTktXHUwRTlGXHUwRUExLVx1MEVBM118W1x1MEVBNVx1MEVBN1x1MEVBQVx1MEVBQlx1MEVBRC1cdTBFQjBcdTBFQjJcdTBFQjNcdTBFQkRcdTBFQzAtXHUwRUM0XHUwRUM2XXxbXHUwRURDLVx1MEVERlx1MEYwMFx1MEY0MC1cdTBGNDdcdTBGNDktXHUwRjZDXHUwRjg4LVx1MEY4Q1x1MTAwMC1cdTEwMkFdfFtcdTEwM0ZcdTEwNTAtXHUxMDU1XHUxMDVBLVx1MTA1RFx1MTA2MVx1MTA2NVx1MTA2Nlx1MTA2RS1cdTEwNzBcdTEwNzUtXHUxMDgxXXxbXHUxMDhFXHUxMEEwLVx1MTBDNVx1MTBDN1x1MTBDRFx1MTBEMC1cdTEwRkFcdTEwRkMtXHUxMjQ4XHUxMjRBLVx1MTI0RF18W1x1MTI1MC1cdTEyNTZcdTEyNThcdTEyNUEtXHUxMjVEXHUxMjYwLVx1MTI4OFx1MTI4QS1cdTEyOERcdTEyOTAtXHUxMkIwXXxbXHUxMkIyLVx1MTJCNVx1MTJCOC1cdTEyQkVcdTEyQzBcdTEyQzItXHUxMkM1XHUxMkM4LVx1MTJENlx1MTJEOC1cdTEzMTBdfFtcdTEzMTItXHUxMzE1XHUxMzE4LVx1MTM1QVx1MTM4MC1cdTEzOEZcdTEzQTAtXHUxM0Y0XHUxNDAxLVx1MTY2Q118W1x1MTY2Ri1cdTE2N0ZcdTE2ODEtXHUxNjlBXHUxNkEwLVx1MTZFQVx1MTcwMC1cdTE3MENcdTE3MEUtXHUxNzExXXxbXHUxNzIwLVx1MTczMVx1MTc0MC1cdTE3NTFcdTE3NjAtXHUxNzZDXHUxNzZFLVx1MTc3MFx1MTc4MC1cdTE3QjNcdTE3RDddfFtcdTE3RENcdTE4MjAtXHUxODc3XHUxODgwLVx1MThBOFx1MThBQVx1MThCMC1cdTE4RjVcdTE5MDAtXHUxOTFDXXxbXHUxOTUwLVx1MTk2RFx1MTk3MC1cdTE5NzRcdTE5ODAtXHUxOUFCXHUxOUMxLVx1MTlDN1x1MUEwMC1cdTFBMTZdfFtcdTFBMjAtXHUxQTU0XHUxQUE3XHUxQjA1LVx1MUIzM1x1MUI0NS1cdTFCNEJcdTFCODMtXHUxQkEwXHUxQkFFXHUxQkFGXXxbXHUxQkJBLVx1MUJFNVx1MUMwMC1cdTFDMjNcdTFDNEQtXHUxQzRGXHUxQzVBLVx1MUM3RFx1MUNFOS1cdTFDRUNdfFtcdTFDRUUtXHUxQ0YxXHUxQ0Y1XHUxQ0Y2XHUxRDAwLVx1MURCRlx1MUUwMC1cdTFGMTVcdTFGMTgtXHUxRjFEXXxbXHUxRjIwLVx1MUY0NVx1MUY0OC1cdTFGNERcdTFGNTAtXHUxRjU3XHUxRjU5XHUxRjVCXHUxRjVEXHUxRjVGLVx1MUY3RF18W1x1MUY4MC1cdTFGQjRcdTFGQjYtXHUxRkJDXHUxRkJFXHUxRkMyLVx1MUZDNFx1MUZDNi1cdTFGQ0NcdTFGRDAtXHUxRkQzXXxbXHUxRkQ2LVx1MUZEQlx1MUZFMC1cdTFGRUNcdTFGRjItXHUxRkY0XHUxRkY2LVx1MUZGQ1x1MjA3MVx1MjA3Rl18W1x1MjA5MC1cdTIwOUNcdTIxMDJcdTIxMDdcdTIxMEEtXHUyMTEzXHUyMTE1XHUyMTE5LVx1MjExRFx1MjEyNFx1MjEyNlx1MjEyOF18W1x1MjEyQS1cdTIxMkRcdTIxMkYtXHUyMTM5XHUyMTNDLVx1MjEzRlx1MjE0NS1cdTIxNDlcdTIxNEVcdTIxODNcdTIxODRdfFtcdTJDMDAtXHUyQzJFXHUyQzMwLVx1MkM1RVx1MkM2MC1cdTJDRTRcdTJDRUItXHUyQ0VFXHUyQ0YyXHUyQ0YzXXxbXHUyRDAwLVx1MkQyNVx1MkQyN1x1MkQyRFx1MkQzMC1cdTJENjdcdTJENkZcdTJEODAtXHUyRDk2XHUyREEwLVx1MkRBNl18W1x1MkRBOC1cdTJEQUVcdTJEQjAtXHUyREI2XHUyREI4LVx1MkRCRVx1MkRDMC1cdTJEQzZcdTJEQzgtXHUyRENFXXxbXHUyREQwLVx1MkRENlx1MkREOC1cdTJEREVcdTJFMkZcdTMwMDVcdTMwMDZcdTMwMzEtXHUzMDM1XHUzMDNCXHUzMDNDXXxbXHUzMDQxLVx1MzA5Nlx1MzA5RC1cdTMwOUZcdTMwQTEtXHUzMEZBXHUzMEZDLVx1MzBGRlx1MzEwNS1cdTMxMkRdfFtcdTMxMzEtXHUzMThFXHUzMUEwLVx1MzFCQVx1MzFGMC1cdTMxRkZcdTM0MDAtXHU0REI1XHU0RTAwLVx1OUZDQ118W1x1QTAwMC1cdUE0OENcdUE0RDAtXHVBNEZEXHVBNTAwLVx1QTYwQ1x1QTYxMC1cdUE2MUZcdUE2MkFcdUE2MkJdfFtcdUE2NDAtXHVBNjZFXHVBNjdGLVx1QTY5N1x1QTZBMC1cdUE2RTVcdUE3MTctXHVBNzFGXHVBNzIyLVx1QTc4OF18W1x1QTc4Qi1cdUE3OEVcdUE3OTAtXHVBNzkzXHVBN0EwLVx1QTdBQVx1QTdGOC1cdUE4MDFcdUE4MDMtXHVBODA1XXxbXHVBODA3LVx1QTgwQVx1QTgwQy1cdUE4MjJcdUE4NDAtXHVBODczXHVBODgyLVx1QThCM1x1QThGMi1cdUE4RjdcdUE4RkJdfFtcdUE5MEEtXHVBOTI1XHVBOTMwLVx1QTk0Nlx1QTk2MC1cdUE5N0NcdUE5ODQtXHVBOUIyXHVBOUNGXHVBQTAwLVx1QUEyOF18W1x1QUE0MC1cdUFBNDJcdUFBNDQtXHVBQTRCXHVBQTYwLVx1QUE3Nlx1QUE3QVx1QUE4MC1cdUFBQUZcdUFBQjFcdUFBQjVdfFtcdUFBQjZcdUFBQjktXHVBQUJEXHVBQUMwXHVBQUMyXHVBQURCLVx1QUFERFx1QUFFMC1cdUFBRUFcdUFBRjItXHVBQUY0XXxbXHVBQjAxLVx1QUIwNlx1QUIwOS1cdUFCMEVcdUFCMTEtXHVBQjE2XHVBQjIwLVx1QUIyNlx1QUIyOC1cdUFCMkVdfFtcdUFCQzAtXHVBQkUyXHVBQzAwLVx1RDdBM1x1RDdCMC1cdUQ3QzZcdUQ3Q0ItXHVEN0ZCXHVGOTAwLVx1RkE2RF18W1x1RkE3MC1cdUZBRDlcdUZCMDAtXHVGQjA2XHVGQjEzLVx1RkIxN1x1RkIxRFx1RkIxRi1cdUZCMjhcdUZCMkEtXHVGQjM2XXxbXHVGQjM4LVx1RkIzQ1x1RkIzRVx1RkI0MFx1RkI0MVx1RkI0M1x1RkI0NFx1RkI0Ni1cdUZCQjFcdUZCRDMtXHVGRDNEXXxbXHVGRDUwLVx1RkQ4Rlx1RkQ5Mi1cdUZEQzdcdUZERjAtXHVGREZCXHVGRTcwLVx1RkU3NFx1RkU3Ni1cdUZFRkNdfFtcdUZGMjEtXHVGRjNBXHVGRjQxLVx1RkY1QVx1RkY2Ni1cdUZGQkVcdUZGQzItXHVGRkM3XHVGRkNBLVx1RkZDRl18W1x1RkZEMi1cdUZGRDdcdUZGREEtXHVGRkRDXSkvLC9eKD86XHMpLywvXig/OlxzKS8sL14oPzokKS9dLGNvbmRpdGlvbnM6eyJuYW1lc3BhY2UtYm9keSI6e3J1bGVzOlsyNiwzMywzNCwzNSwzNiwzNywzOCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw2MCw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5N10saW5jbHVzaXZlOiExfSxuYW1lc3BhY2U6e3J1bGVzOlsyNiwyOSwzMCwzMSwzMiw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw2MCw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5N10saW5jbHVzaXZlOiExfSwiY2xhc3MtYm9keSI6e3J1bGVzOlsyNiw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw2MCw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5N10saW5jbHVzaXZlOiExfSxjbGFzczp7cnVsZXM6WzI2LDM5LDQwLDQxLDQyLDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDYwLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk3XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOlsxMSwxMiwyNiw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw2MCw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5N10saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOls5LDI2LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDYwLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk3XSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzcsMjYsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNjAsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTddLGluY2x1c2l2ZTohMX0sY2FsbGJhY2tfYXJnczp7cnVsZXM6WzIyLDIzLDI2LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDYwLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk3XSxpbmNsdXNpdmU6ITF9LGNhbGxiYWNrX25hbWU6e3J1bGVzOlsxOSwyMCwyMSwyNiw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw2MCw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5N10saW5jbHVzaXZlOiExfSxocmVmOntydWxlczpbMjYsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNjAsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTddLGluY2x1c2l2ZTohMX0sc3RydWN0OntydWxlczpbMjYsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNjAsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTddLGluY2x1c2l2ZTohMX0sZ2VuZXJpYzp7cnVsZXM6WzI2LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk3XSxpbmNsdXNpdmU6ITF9LGJxc3RyaW5nOntydWxlczpbMjYsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTddLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbMjQsMjUsMjYsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNjAsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTddLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw1LDYsOCwxMCwxMywxNCwxNSwxNiwxNywxOCwyNiwyNywyOCwyOSwzOCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw2MCw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5Niw5N10saW5jbHVzaXZlOiEwfX19O3JldHVybiBJZX0oKTtIZS5sZXhlcj0kZTtmdW5jdGlvbiBSZSgpe3RoaXMueXk9e319cmV0dXJuIG8oUmUsIlBhcnNlciIpLFJlLnByb3RvdHlwZT1IZSxIZS5QYXJzZXI9UmUsbmV3IFJlfSgpO01PLnBhcnNlcj1NTztMNj1NT30pO3ZhciBEZmUsa2IsTGZlPU4oKCk9PnsidXNlIHN0cmljdCI7enQoKTtncigpO0RmZT1bIiMiLCIrIiwifiIsIi0iLCIiXSxrYj1jbGFzc3tzdGF0aWN7byh0aGlzLCJDbGFzc01lbWJlciIpfWNvbnN0cnVjdG9yKGUscil7dGhpcy5tZW1iZXJUeXBlPXIsdGhpcy52aXNpYmlsaXR5PSIiLHRoaXMuY2xhc3NpZmllcj0iIix0aGlzLnRleHQ9IiI7bGV0IG49VHIoZSxtZSgpKTt0aGlzLnBhcnNlTWVtYmVyKG4pfWdldERpc3BsYXlEZXRhaWxzKCl7bGV0IGU9dGhpcy52aXNpYmlsaXR5K2VjKHRoaXMuaWQpO3RoaXMubWVtYmVyVHlwZT09PSJtZXRob2QiJiYoZSs9YCgke2VjKHRoaXMucGFyYW1ldGVycy50cmltKCkpfSlgLHRoaXMucmV0dXJuVHlwZSYmKGUrPSIgOiAiK2VjKHRoaXMucmV0dXJuVHlwZSkpKSxlPWUudHJpbSgpO2xldCByPXRoaXMucGFyc2VDbGFzc2lmaWVyKCk7cmV0dXJue2Rpc3BsYXlUZXh0OmUsY3NzU3R5bGU6cn19cGFyc2VNZW1iZXIoZSl7bGV0IHI9IiI7aWYodGhpcy5tZW1iZXJUeXBlPT09Im1ldGhvZCIpe2xldCBhPS8oWyMrfi1dKT8oLispXCgoLiopXCkoW1xzJCpdKT8oLiopKFskKl0pPy8uZXhlYyhlKTtpZihhKXtsZXQgcz1hWzFdP2FbMV0udHJpbSgpOiIiO2lmKERmZS5pbmNsdWRlcyhzKSYmKHRoaXMudmlzaWJpbGl0eT1zKSx0aGlzLmlkPWFbMl0sdGhpcy5wYXJhbWV0ZXJzPWFbM10/YVszXS50cmltKCk6IiIscj1hWzRdP2FbNF0udHJpbSgpOiIiLHRoaXMucmV0dXJuVHlwZT1hWzVdP2FbNV0udHJpbSgpOiIiLHI9PT0iIil7bGV0IGw9dGhpcy5yZXR1cm5UeXBlLnN1YnN0cmluZyh0aGlzLnJldHVyblR5cGUubGVuZ3RoLTEpOy9bJCpdLy5leGVjKGwpJiYocj1sLHRoaXMucmV0dXJuVHlwZT10aGlzLnJldHVyblR5cGUuc3Vic3RyaW5nKDAsdGhpcy5yZXR1cm5UeXBlLmxlbmd0aC0xKSl9fX1lbHNle2xldCBpPWUubGVuZ3RoLGE9ZS5zdWJzdHJpbmcoMCwxKSxzPWUuc3Vic3RyaW5nKGktMSk7RGZlLmluY2x1ZGVzKGEpJiYodGhpcy52aXNpYmlsaXR5PWEpLC9bJCpdLy5leGVjKHMpJiYocj1zKSx0aGlzLmlkPWUuc3Vic3RyaW5nKHRoaXMudmlzaWJpbGl0eT09PSIiPzA6MSxyPT09IiI/aTppLTEpfXRoaXMuY2xhc3NpZmllcj1yLHRoaXMuaWQ9dGhpcy5pZC5zdGFydHNXaXRoKCIgIik/IiAiK3RoaXMuaWQudHJpbSgpOnRoaXMuaWQudHJpbSgpO2xldCBuPWAke3RoaXMudmlzaWJpbGl0eT8iXFwiK3RoaXMudmlzaWJpbGl0eToiIn0ke2VjKHRoaXMuaWQpfSR7dGhpcy5tZW1iZXJUeXBlPT09Im1ldGhvZCI/YCgke2VjKHRoaXMucGFyYW1ldGVycyl9KSR7dGhpcy5yZXR1cm5UeXBlPyIgOiAiK2VjKHRoaXMucmV0dXJuVHlwZSk6IiJ9YDoiIn1gO3RoaXMudGV4dD1uLnJlcGxhY2VBbGwoIjwiLCImbHQ7IikucmVwbGFjZUFsbCgiPiIsIiZndDsiKSx0aGlzLnRleHQuc3RhcnRzV2l0aCgiXFwmbHQ7IikmJih0aGlzLnRleHQ9dGhpcy50ZXh0LnJlcGxhY2UoIlxcJmx0OyIsIn4iKSl9cGFyc2VDbGFzc2lmaWVyKCl7c3dpdGNoKHRoaXMuY2xhc3NpZmllcil7Y2FzZSIqIjpyZXR1cm4iZm9udC1zdHlsZTppdGFsaWM7IjtjYXNlIiQiOnJldHVybiJ0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOyI7ZGVmYXVsdDpyZXR1cm4iIn19fX0pO3ZhciBSNixSZmUsTHAsRDEsT089TigoKT0+eyJ1c2Ugc3RyaWN0IjtkcigpO3Z0KCk7enQoKTtncigpO2lyKCk7bWkoKTtMZmUoKTtSNj0iY2xhc3NJZC0iLFJmZT0wLExwPW8odD0+WmUuc2FuaXRpemVUZXh0KHQsbWUoKSksInNhbml0aXplVGV4dCIpLEQxPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5yZWxhdGlvbnM9W107dGhpcy5jbGFzc2VzPW5ldyBNYXA7dGhpcy5zdHlsZUNsYXNzZXM9bmV3IE1hcDt0aGlzLm5vdGVzPVtdO3RoaXMuaW50ZXJmYWNlcz1bXTt0aGlzLm5hbWVzcGFjZXM9bmV3IE1hcDt0aGlzLm5hbWVzcGFjZUNvdW50ZXI9MDt0aGlzLmZ1bmN0aW9ucz1bXTt0aGlzLmxpbmVUeXBlPXtMSU5FOjAsRE9UVEVEX0xJTkU6MX07dGhpcy5yZWxhdGlvblR5cGU9e0FHR1JFR0FUSU9OOjAsRVhURU5TSU9OOjEsQ09NUE9TSVRJT046MixERVBFTkRFTkNZOjMsTE9MTElQT1A6NH07dGhpcy5zZXR1cFRvb2xUaXBzPW8oZT0+e2xldCByPUdlKCIubWVybWFpZFRvb2x0aXAiKTsoci5fZ3JvdXBzfHxyKVswXVswXT09PW51bGwmJihyPUdlKCJib2R5IikuYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsIm1lcm1haWRUb29sdGlwIikuc3R5bGUoIm9wYWNpdHkiLDApKSxHZShlKS5zZWxlY3QoInN2ZyIpLnNlbGVjdEFsbCgiZy5ub2RlIikub24oIm1vdXNlb3ZlciIsYT0+e2xldCBzPUdlKGEuY3VycmVudFRhcmdldCk7aWYocy5hdHRyKCJ0aXRsZSIpPT09bnVsbClyZXR1cm47bGV0IHU9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyLnRyYW5zaXRpb24oKS5kdXJhdGlvbigyMDApLnN0eWxlKCJvcGFjaXR5IiwiLjkiKSxyLnRleHQocy5hdHRyKCJ0aXRsZSIpKS5zdHlsZSgibGVmdCIsd2luZG93LnNjcm9sbFgrdS5sZWZ0Kyh1LnJpZ2h0LXUubGVmdCkvMisicHgiKS5zdHlsZSgidG9wIix3aW5kb3cuc2Nyb2xsWSt1LnRvcC0xNCtkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCsicHgiKSxyLmh0bWwoci5odG1sKCkucmVwbGFjZSgvJmx0O2JyXC8mZ3Q7L2csIjxici8+IikpLHMuY2xhc3NlZCgiaG92ZXIiLCEwKX0pLm9uKCJtb3VzZW91dCIsYT0+e3IudHJhbnNpdGlvbigpLmR1cmF0aW9uKDUwMCkuc3R5bGUoIm9wYWNpdHkiLDApLEdlKGEuY3VycmVudFRhcmdldCkuY2xhc3NlZCgiaG92ZXIiLCExKX0pfSwic2V0dXBUb29sVGlwcyIpO3RoaXMuZGlyZWN0aW9uPSJUQiI7dGhpcy5zZXRBY2NUaXRsZT1Mcjt0aGlzLmdldEFjY1RpdGxlPVJyO3RoaXMuc2V0QWNjRGVzY3JpcHRpb249TnI7dGhpcy5nZXRBY2NEZXNjcmlwdGlvbj1Ncjt0aGlzLnNldERpYWdyYW1UaXRsZT0kcjt0aGlzLmdldERpYWdyYW1UaXRsZT1Jcjt0aGlzLmdldENvbmZpZz1vKCgpPT5tZSgpLmNsYXNzLCJnZXRDb25maWciKTt0aGlzLmZ1bmN0aW9ucy5wdXNoKHRoaXMuc2V0dXBUb29sVGlwcy5iaW5kKHRoaXMpKSx0aGlzLmNsZWFyKCksdGhpcy5hZGRSZWxhdGlvbj10aGlzLmFkZFJlbGF0aW9uLmJpbmQodGhpcyksdGhpcy5hZGRDbGFzc2VzVG9OYW1lc3BhY2U9dGhpcy5hZGRDbGFzc2VzVG9OYW1lc3BhY2UuYmluZCh0aGlzKSx0aGlzLmFkZE5hbWVzcGFjZT10aGlzLmFkZE5hbWVzcGFjZS5iaW5kKHRoaXMpLHRoaXMuc2V0Q3NzQ2xhc3M9dGhpcy5zZXRDc3NDbGFzcy5iaW5kKHRoaXMpLHRoaXMuYWRkTWVtYmVycz10aGlzLmFkZE1lbWJlcnMuYmluZCh0aGlzKSx0aGlzLmFkZENsYXNzPXRoaXMuYWRkQ2xhc3MuYmluZCh0aGlzKSx0aGlzLnNldENsYXNzTGFiZWw9dGhpcy5zZXRDbGFzc0xhYmVsLmJpbmQodGhpcyksdGhpcy5hZGRBbm5vdGF0aW9uPXRoaXMuYWRkQW5ub3RhdGlvbi5iaW5kKHRoaXMpLHRoaXMuYWRkTWVtYmVyPXRoaXMuYWRkTWVtYmVyLmJpbmQodGhpcyksdGhpcy5jbGVhbnVwTGFiZWw9dGhpcy5jbGVhbnVwTGFiZWwuYmluZCh0aGlzKSx0aGlzLmFkZE5vdGU9dGhpcy5hZGROb3RlLmJpbmQodGhpcyksdGhpcy5kZWZpbmVDbGFzcz10aGlzLmRlZmluZUNsYXNzLmJpbmQodGhpcyksdGhpcy5zZXREaXJlY3Rpb249dGhpcy5zZXREaXJlY3Rpb24uYmluZCh0aGlzKSx0aGlzLnNldExpbms9dGhpcy5zZXRMaW5rLmJpbmQodGhpcyksdGhpcy5iaW5kRnVuY3Rpb25zPXRoaXMuYmluZEZ1bmN0aW9ucy5iaW5kKHRoaXMpLHRoaXMuY2xlYXI9dGhpcy5jbGVhci5iaW5kKHRoaXMpLHRoaXMuc2V0VG9vbHRpcD10aGlzLnNldFRvb2x0aXAuYmluZCh0aGlzKSx0aGlzLnNldENsaWNrRXZlbnQ9dGhpcy5zZXRDbGlja0V2ZW50LmJpbmQodGhpcyksdGhpcy5zZXRDc3NTdHlsZT10aGlzLnNldENzc1N0eWxlLmJpbmQodGhpcyl9c3RhdGlje28odGhpcywiQ2xhc3NEQiIpfXNwbGl0Q2xhc3NOYW1lQW5kVHlwZShlKXtsZXQgcj1aZS5zYW5pdGl6ZVRleHQoZSxtZSgpKSxuPSIiLGk9cjtpZihyLmluZGV4T2YoIn4iKT4wKXtsZXQgYT1yLnNwbGl0KCJ+Iik7aT1McChhWzBdKSxuPUxwKGFbMV0pfXJldHVybntjbGFzc05hbWU6aSx0eXBlOm59fXNldENsYXNzTGFiZWwoZSxyKXtsZXQgbj1aZS5zYW5pdGl6ZVRleHQoZSxtZSgpKTtyJiYocj1McChyKSk7bGV0e2NsYXNzTmFtZTppfT10aGlzLnNwbGl0Q2xhc3NOYW1lQW5kVHlwZShuKTt0aGlzLmNsYXNzZXMuZ2V0KGkpLmxhYmVsPXIsdGhpcy5jbGFzc2VzLmdldChpKS50ZXh0PWAke3J9JHt0aGlzLmNsYXNzZXMuZ2V0KGkpLnR5cGU/YDwke3RoaXMuY2xhc3Nlcy5nZXQoaSkudHlwZX0+YDoiIn1gfWFkZENsYXNzKGUpe2xldCByPVplLnNhbml0aXplVGV4dChlLG1lKCkpLHtjbGFzc05hbWU6bix0eXBlOml9PXRoaXMuc3BsaXRDbGFzc05hbWVBbmRUeXBlKHIpO2lmKHRoaXMuY2xhc3Nlcy5oYXMobikpcmV0dXJuO2xldCBhPVplLnNhbml0aXplVGV4dChuLG1lKCkpO3RoaXMuY2xhc3Nlcy5zZXQoYSx7aWQ6YSx0eXBlOmksbGFiZWw6YSx0ZXh0OmAke2F9JHtpP2AmbHQ7JHtpfSZndDtgOiIifWAsc2hhcGU6ImNsYXNzQm94Iixjc3NDbGFzc2VzOiJkZWZhdWx0IixtZXRob2RzOltdLG1lbWJlcnM6W10sYW5ub3RhdGlvbnM6W10sc3R5bGVzOltdLGRvbUlkOlI2K2ErIi0iK1JmZX0pLFJmZSsrfWFkZEludGVyZmFjZShlLHIpe2xldCBuPXtpZDpgaW50ZXJmYWNlJHt0aGlzLmludGVyZmFjZXMubGVuZ3RofWAsbGFiZWw6ZSxjbGFzc0lkOnJ9O3RoaXMuaW50ZXJmYWNlcy5wdXNoKG4pfWxvb2tVcERvbUlkKGUpe2xldCByPVplLnNhbml0aXplVGV4dChlLG1lKCkpO2lmKHRoaXMuY2xhc3Nlcy5oYXMocikpcmV0dXJuIHRoaXMuY2xhc3Nlcy5nZXQocikuZG9tSWQ7dGhyb3cgbmV3IEVycm9yKCJDbGFzcyBub3QgZm91bmQ6ICIrcil9Y2xlYXIoKXt0aGlzLnJlbGF0aW9ucz1bXSx0aGlzLmNsYXNzZXM9bmV3IE1hcCx0aGlzLm5vdGVzPVtdLHRoaXMuaW50ZXJmYWNlcz1bXSx0aGlzLmZ1bmN0aW9ucz1bXSx0aGlzLmZ1bmN0aW9ucy5wdXNoKHRoaXMuc2V0dXBUb29sVGlwcy5iaW5kKHRoaXMpKSx0aGlzLm5hbWVzcGFjZXM9bmV3IE1hcCx0aGlzLm5hbWVzcGFjZUNvdW50ZXI9MCx0aGlzLmRpcmVjdGlvbj0iVEIiLEFyKCl9Z2V0Q2xhc3MoZSl7cmV0dXJuIHRoaXMuY2xhc3Nlcy5nZXQoZSl9Z2V0Q2xhc3Nlcygpe3JldHVybiB0aGlzLmNsYXNzZXN9Z2V0UmVsYXRpb25zKCl7cmV0dXJuIHRoaXMucmVsYXRpb25zfWdldE5vdGVzKCl7cmV0dXJuIHRoaXMubm90ZXN9YWRkUmVsYXRpb24oZSl7WS5kZWJ1ZygiQWRkaW5nIHJlbGF0aW9uOiAiK0pTT04uc3RyaW5naWZ5KGUpKTtsZXQgcj1bdGhpcy5yZWxhdGlvblR5cGUuTE9MTElQT1AsdGhpcy5yZWxhdGlvblR5cGUuQUdHUkVHQVRJT04sdGhpcy5yZWxhdGlvblR5cGUuQ09NUE9TSVRJT04sdGhpcy5yZWxhdGlvblR5cGUuREVQRU5ERU5DWSx0aGlzLnJlbGF0aW9uVHlwZS5FWFRFTlNJT05dO2UucmVsYXRpb24udHlwZTE9PT10aGlzLnJlbGF0aW9uVHlwZS5MT0xMSVBPUCYmIXIuaW5jbHVkZXMoZS5yZWxhdGlvbi50eXBlMik/KHRoaXMuYWRkQ2xhc3MoZS5pZDIpLHRoaXMuYWRkSW50ZXJmYWNlKGUuaWQxLGUuaWQyKSxlLmlkMT1gaW50ZXJmYWNlJHt0aGlzLmludGVyZmFjZXMubGVuZ3RoLTF9YCk6ZS5yZWxhdGlvbi50eXBlMj09PXRoaXMucmVsYXRpb25UeXBlLkxPTExJUE9QJiYhci5pbmNsdWRlcyhlLnJlbGF0aW9uLnR5cGUxKT8odGhpcy5hZGRDbGFzcyhlLmlkMSksdGhpcy5hZGRJbnRlcmZhY2UoZS5pZDIsZS5pZDEpLGUuaWQyPWBpbnRlcmZhY2Uke3RoaXMuaW50ZXJmYWNlcy5sZW5ndGgtMX1gKToodGhpcy5hZGRDbGFzcyhlLmlkMSksdGhpcy5hZGRDbGFzcyhlLmlkMikpLGUuaWQxPXRoaXMuc3BsaXRDbGFzc05hbWVBbmRUeXBlKGUuaWQxKS5jbGFzc05hbWUsZS5pZDI9dGhpcy5zcGxpdENsYXNzTmFtZUFuZFR5cGUoZS5pZDIpLmNsYXNzTmFtZSxlLnJlbGF0aW9uVGl0bGUxPVplLnNhbml0aXplVGV4dChlLnJlbGF0aW9uVGl0bGUxLnRyaW0oKSxtZSgpKSxlLnJlbGF0aW9uVGl0bGUyPVplLnNhbml0aXplVGV4dChlLnJlbGF0aW9uVGl0bGUyLnRyaW0oKSxtZSgpKSx0aGlzLnJlbGF0aW9ucy5wdXNoKGUpfWFkZEFubm90YXRpb24oZSxyKXtsZXQgbj10aGlzLnNwbGl0Q2xhc3NOYW1lQW5kVHlwZShlKS5jbGFzc05hbWU7dGhpcy5jbGFzc2VzLmdldChuKS5hbm5vdGF0aW9ucy5wdXNoKHIpfWFkZE1lbWJlcihlLHIpe3RoaXMuYWRkQ2xhc3MoZSk7bGV0IG49dGhpcy5zcGxpdENsYXNzTmFtZUFuZFR5cGUoZSkuY2xhc3NOYW1lLGk9dGhpcy5jbGFzc2VzLmdldChuKTtpZih0eXBlb2Ygcj09InN0cmluZyIpe2xldCBhPXIudHJpbSgpO2Euc3RhcnRzV2l0aCgiPDwiKSYmYS5lbmRzV2l0aCgiPj4iKT9pLmFubm90YXRpb25zLnB1c2goTHAoYS5zdWJzdHJpbmcoMixhLmxlbmd0aC0yKSkpOmEuaW5kZXhPZigiKSIpPjA/aS5tZXRob2RzLnB1c2gobmV3IGtiKGEsIm1ldGhvZCIpKTphJiZpLm1lbWJlcnMucHVzaChuZXcga2IoYSwiYXR0cmlidXRlIikpfX1hZGRNZW1iZXJzKGUscil7QXJyYXkuaXNBcnJheShyKSYmKHIucmV2ZXJzZSgpLHIuZm9yRWFjaChuPT50aGlzLmFkZE1lbWJlcihlLG4pKSl9YWRkTm90ZShlLHIpe2xldCBuPXtpZDpgbm90ZSR7dGhpcy5ub3Rlcy5sZW5ndGh9YCxjbGFzczpyLHRleHQ6ZX07dGhpcy5ub3Rlcy5wdXNoKG4pfWNsZWFudXBMYWJlbChlKXtyZXR1cm4gZS5zdGFydHNXaXRoKCI6IikmJihlPWUuc3Vic3RyaW5nKDEpKSxMcChlLnRyaW0oKSl9c2V0Q3NzQ2xhc3MoZSxyKXtlLnNwbGl0KCIsIikuZm9yRWFjaChuPT57bGV0IGk9bjsvXGQvLmV4ZWMoblswXSkmJihpPVI2K2kpO2xldCBhPXRoaXMuY2xhc3Nlcy5nZXQoaSk7YSYmKGEuY3NzQ2xhc3Nlcys9IiAiK3IpfSl9ZGVmaW5lQ2xhc3MoZSxyKXtmb3IobGV0IG4gb2YgZSl7bGV0IGk9dGhpcy5zdHlsZUNsYXNzZXMuZ2V0KG4pO2k9PT12b2lkIDAmJihpPXtpZDpuLHN0eWxlczpbXSx0ZXh0U3R5bGVzOltdfSx0aGlzLnN0eWxlQ2xhc3Nlcy5zZXQobixpKSksciYmci5mb3JFYWNoKGE9PntpZigvY29sb3IvLmV4ZWMoYSkpe2xldCBzPWEucmVwbGFjZSgiZmlsbCIsImJnRmlsbCIpO2kudGV4dFN0eWxlcy5wdXNoKHMpfWkuc3R5bGVzLnB1c2goYSl9KSx0aGlzLmNsYXNzZXMuZm9yRWFjaChhPT57YS5jc3NDbGFzc2VzLmluY2x1ZGVzKG4pJiZhLnN0eWxlcy5wdXNoKC4uLnIuZmxhdE1hcChzPT5zLnNwbGl0KCIsIikpKX0pfX1zZXRUb29sdGlwKGUscil7ZS5zcGxpdCgiLCIpLmZvckVhY2gobj0+e3IhPT12b2lkIDAmJih0aGlzLmNsYXNzZXMuZ2V0KG4pLnRvb2x0aXA9THAocikpfSl9Z2V0VG9vbHRpcChlLHIpe3JldHVybiByJiZ0aGlzLm5hbWVzcGFjZXMuaGFzKHIpP3RoaXMubmFtZXNwYWNlcy5nZXQocikuY2xhc3Nlcy5nZXQoZSkudG9vbHRpcDp0aGlzLmNsYXNzZXMuZ2V0KGUpLnRvb2x0aXB9c2V0TGluayhlLHIsbil7bGV0IGk9bWUoKTtlLnNwbGl0KCIsIikuZm9yRWFjaChhPT57bGV0IHM9YTsvXGQvLmV4ZWMoYVswXSkmJihzPVI2K3MpO2xldCBsPXRoaXMuY2xhc3Nlcy5nZXQocyk7bCYmKGwubGluaz1HdC5mb3JtYXRVcmwocixpKSxpLnNlY3VyaXR5TGV2ZWw9PT0ic2FuZGJveCI/bC5saW5rVGFyZ2V0PSJfdG9wIjp0eXBlb2Ygbj09InN0cmluZyI/bC5saW5rVGFyZ2V0PUxwKG4pOmwubGlua1RhcmdldD0iX2JsYW5rIil9KSx0aGlzLnNldENzc0NsYXNzKGUsImNsaWNrYWJsZSIpfXNldENsaWNrRXZlbnQoZSxyLG4pe2Uuc3BsaXQoIiwiKS5mb3JFYWNoKGk9Pnt0aGlzLnNldENsaWNrRnVuYyhpLHIsbiksdGhpcy5jbGFzc2VzLmdldChpKS5oYXZlQ2FsbGJhY2s9ITB9KSx0aGlzLnNldENzc0NsYXNzKGUsImNsaWNrYWJsZSIpfXNldENsaWNrRnVuYyhlLHIsbil7bGV0IGk9WmUuc2FuaXRpemVUZXh0KGUsbWUoKSk7aWYobWUoKS5zZWN1cml0eUxldmVsIT09Imxvb3NlInx8cj09PXZvaWQgMClyZXR1cm47bGV0IHM9aTtpZih0aGlzLmNsYXNzZXMuaGFzKHMpKXtsZXQgbD10aGlzLmxvb2tVcERvbUlkKHMpLHU9W107aWYodHlwZW9mIG49PSJzdHJpbmciKXt1PW4uc3BsaXQoLywoPz0oPzooPzpbXiJdKiIpezJ9KSpbXiJdKiQpLyk7Zm9yKGxldCBoPTA7aDx1Lmxlbmd0aDtoKyspe2xldCBmPXVbaF0udHJpbSgpO2Yuc3RhcnRzV2l0aCgnIicpJiZmLmVuZHNXaXRoKCciJykmJihmPWYuc3Vic3RyKDEsZi5sZW5ndGgtMikpLHVbaF09Zn19dS5sZW5ndGg9PT0wJiZ1LnB1c2gobCksdGhpcy5mdW5jdGlvbnMucHVzaCgoKT0+e2xldCBoPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtpZD0iJHtsfSJdYCk7aCE9PW51bGwmJmguYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCgpPT57R3QucnVuRnVuYyhyLC4uLnUpfSwhMSl9KX19YmluZEZ1bmN0aW9ucyhlKXt0aGlzLmZ1bmN0aW9ucy5mb3JFYWNoKHI9PntyKGUpfSl9Z2V0RGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuZGlyZWN0aW9ufXNldERpcmVjdGlvbihlKXt0aGlzLmRpcmVjdGlvbj1lfWFkZE5hbWVzcGFjZShlKXt0aGlzLm5hbWVzcGFjZXMuaGFzKGUpfHwodGhpcy5uYW1lc3BhY2VzLnNldChlLHtpZDplLGNsYXNzZXM6bmV3IE1hcCxjaGlsZHJlbjp7fSxkb21JZDpSNitlKyItIit0aGlzLm5hbWVzcGFjZUNvdW50ZXJ9KSx0aGlzLm5hbWVzcGFjZUNvdW50ZXIrKyl9Z2V0TmFtZXNwYWNlKGUpe3JldHVybiB0aGlzLm5hbWVzcGFjZXMuZ2V0KGUpfWdldE5hbWVzcGFjZXMoKXtyZXR1cm4gdGhpcy5uYW1lc3BhY2VzfWFkZENsYXNzZXNUb05hbWVzcGFjZShlLHIpe2lmKHRoaXMubmFtZXNwYWNlcy5oYXMoZSkpZm9yKGxldCBuIG9mIHIpe2xldHtjbGFzc05hbWU6aX09dGhpcy5zcGxpdENsYXNzTmFtZUFuZFR5cGUobik7dGhpcy5jbGFzc2VzLmdldChpKS5wYXJlbnQ9ZSx0aGlzLm5hbWVzcGFjZXMuZ2V0KGUpLmNsYXNzZXMuc2V0KGksdGhpcy5jbGFzc2VzLmdldChpKSl9fXNldENzc1N0eWxlKGUscil7bGV0IG49dGhpcy5jbGFzc2VzLmdldChlKTtpZighKCFyfHwhbikpZm9yKGxldCBpIG9mIHIpaS5pbmNsdWRlcygiLCIpP24uc3R5bGVzLnB1c2goLi4uaS5zcGxpdCgiLCIpKTpuLnN0eWxlcy5wdXNoKGkpfWdldEFycm93TWFya2VyKGUpe2xldCByO3N3aXRjaChlKXtjYXNlIDA6cj0iYWdncmVnYXRpb24iO2JyZWFrO2Nhc2UgMTpyPSJleHRlbnNpb24iO2JyZWFrO2Nhc2UgMjpyPSJjb21wb3NpdGlvbiI7YnJlYWs7Y2FzZSAzOnI9ImRlcGVuZGVuY3kiO2JyZWFrO2Nhc2UgNDpyPSJsb2xsaXBvcCI7YnJlYWs7ZGVmYXVsdDpyPSJub25lIn1yZXR1cm4gcn1nZXREYXRhKCl7bGV0IGU9W10scj1bXSxuPW1lKCk7Zm9yKGxldCBhIG9mIHRoaXMubmFtZXNwYWNlcy5rZXlzKCkpe2xldCBzPXRoaXMubmFtZXNwYWNlcy5nZXQoYSk7aWYocyl7bGV0IGw9e2lkOnMuaWQsbGFiZWw6cy5pZCxpc0dyb3VwOiEwLHBhZGRpbmc6bi5jbGFzcy5wYWRkaW5nPz8xNixzaGFwZToicmVjdCIsY3NzU3R5bGVzOlsiZmlsbDogbm9uZSIsInN0cm9rZTogYmxhY2siXSxsb29rOm4ubG9va307ZS5wdXNoKGwpfX1mb3IobGV0IGEgb2YgdGhpcy5jbGFzc2VzLmtleXMoKSl7bGV0IHM9dGhpcy5jbGFzc2VzLmdldChhKTtpZihzKXtsZXQgbD1zO2wucGFyZW50SWQ9cy5wYXJlbnQsbC5sb29rPW4ubG9vayxlLnB1c2gobCl9fWxldCBpPTA7Zm9yKGxldCBhIG9mIHRoaXMubm90ZXMpe2krKztsZXQgcz17aWQ6YS5pZCxsYWJlbDphLnRleHQsaXNHcm91cDohMSxzaGFwZToibm90ZSIscGFkZGluZzpuLmNsYXNzLnBhZGRpbmc/PzYsY3NzU3R5bGVzOlsidGV4dC1hbGlnbjogbGVmdCIsIndoaXRlLXNwYWNlOiBub3dyYXAiLGBmaWxsOiAke24udGhlbWVWYXJpYWJsZXMubm90ZUJrZ0NvbG9yfWAsYHN0cm9rZTogJHtuLnRoZW1lVmFyaWFibGVzLm5vdGVCb3JkZXJDb2xvcn1gXSxsb29rOm4ubG9va307ZS5wdXNoKHMpO2xldCBsPXRoaXMuY2xhc3Nlcy5nZXQoYS5jbGFzcyk/LmlkPz8iIjtpZihsKXtsZXQgdT17aWQ6YGVkZ2VOb3RlJHtpfWAsc3RhcnQ6YS5pZCxlbmQ6bCx0eXBlOiJub3JtYWwiLHRoaWNrbmVzczoibm9ybWFsIixjbGFzc2VzOiJyZWxhdGlvbiIsYXJyb3dUeXBlU3RhcnQ6Im5vbmUiLGFycm93VHlwZUVuZDoibm9uZSIsYXJyb3doZWFkU3R5bGU6IiIsbGFiZWxTdHlsZTpbIiJdLHN0eWxlOlsiZmlsbDogbm9uZSJdLHBhdHRlcm46ImRvdHRlZCIsbG9vazpuLmxvb2t9O3IucHVzaCh1KX19Zm9yKGxldCBhIG9mIHRoaXMuaW50ZXJmYWNlcyl7bGV0IHM9e2lkOmEuaWQsbGFiZWw6YS5sYWJlbCxpc0dyb3VwOiExLHNoYXBlOiJyZWN0Iixjc3NTdHlsZXM6WyJvcGFjaXR5OiAwOyJdLGxvb2s6bi5sb29rfTtlLnB1c2gocyl9aT0wO2ZvcihsZXQgYSBvZiB0aGlzLnJlbGF0aW9ucyl7aSsrO2xldCBzPXtpZDokaChhLmlkMSxhLmlkMix7cHJlZml4OiJpZCIsY291bnRlcjppfSksc3RhcnQ6YS5pZDEsZW5kOmEuaWQyLHR5cGU6Im5vcm1hbCIsbGFiZWw6YS50aXRsZSxsYWJlbHBvczoiYyIsdGhpY2tuZXNzOiJub3JtYWwiLGNsYXNzZXM6InJlbGF0aW9uIixhcnJvd1R5cGVTdGFydDp0aGlzLmdldEFycm93TWFya2VyKGEucmVsYXRpb24udHlwZTEpLGFycm93VHlwZUVuZDp0aGlzLmdldEFycm93TWFya2VyKGEucmVsYXRpb24udHlwZTIpLHN0YXJ0TGFiZWxSaWdodDphLnJlbGF0aW9uVGl0bGUxPT09Im5vbmUiPyIiOmEucmVsYXRpb25UaXRsZTEsZW5kTGFiZWxMZWZ0OmEucmVsYXRpb25UaXRsZTI9PT0ibm9uZSI/IiI6YS5yZWxhdGlvblRpdGxlMixhcnJvd2hlYWRTdHlsZToiIixsYWJlbFN0eWxlOlsiZGlzcGxheTogaW5saW5lLWJsb2NrIl0sc3R5bGU6YS5zdHlsZXx8IiIscGF0dGVybjphLnJlbGF0aW9uLmxpbmVUeXBlPT0xPyJkYXNoZWQiOiJzb2xpZCIsbG9vazpuLmxvb2t9O3IucHVzaChzKX1yZXR1cm57bm9kZXM6ZSxlZGdlczpyLG90aGVyOnt9LGNvbmZpZzpuLGRpcmVjdGlvbjp0aGlzLmdldERpcmVjdGlvbigpfX19fSk7dmFyIFVWZSxONixQTz1OKCgpPT57InVzZSBzdHJpY3QiO1VWZT1vKHQ9PmBnLmNsYXNzR3JvdXAgdGV4dCB7CiAgZmlsbDogJHt0Lm5vZGVCb3JkZXJ8fHQuY2xhc3NUZXh0fTsKICBzdHJva2U6IG5vbmU7CiAgZm9udC1mYW1pbHk6ICR7dC5mb250RmFtaWx5fTsKICBmb250LXNpemU6IDEwcHg7CgogIC50aXRsZSB7CiAgICBmb250LXdlaWdodDogYm9sZGVyOwogIH0KCn0KCi5ub2RlTGFiZWwsIC5lZGdlTGFiZWwgewogIGNvbG9yOiAke3QuY2xhc3NUZXh0fTsKfQouZWRnZUxhYmVsIC5sYWJlbCByZWN0IHsKICBmaWxsOiAke3QubWFpbkJrZ307Cn0KLmxhYmVsIHRleHQgewogIGZpbGw6ICR7dC5jbGFzc1RleHR9Owp9CgoubGFiZWxCa2cgewogIGJhY2tncm91bmQ6ICR7dC5tYWluQmtnfTsKfQouZWRnZUxhYmVsIC5sYWJlbCBzcGFuIHsKICBiYWNrZ3JvdW5kOiAke3QubWFpbkJrZ307Cn0KCi5jbGFzc1RpdGxlIHsKICBmb250LXdlaWdodDogYm9sZGVyOwp9Ci5ub2RlIHJlY3QsCiAgLm5vZGUgY2lyY2xlLAogIC5ub2RlIGVsbGlwc2UsCiAgLm5vZGUgcG9seWdvbiwKICAubm9kZSBwYXRoIHsKICAgIGZpbGw6ICR7dC5tYWluQmtnfTsKICAgIHN0cm9rZTogJHt0Lm5vZGVCb3JkZXJ9OwogICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgfQoKCi5kaXZpZGVyIHsKICBzdHJva2U6ICR7dC5ub2RlQm9yZGVyfTsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCmcuY2xpY2thYmxlIHsKICBjdXJzb3I6IHBvaW50ZXI7Cn0KCmcuY2xhc3NHcm91cCByZWN0IHsKICBmaWxsOiAke3QubWFpbkJrZ307CiAgc3Ryb2tlOiAke3Qubm9kZUJvcmRlcn07Cn0KCmcuY2xhc3NHcm91cCBsaW5lIHsKICBzdHJva2U6ICR7dC5ub2RlQm9yZGVyfTsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCi5jbGFzc0xhYmVsIC5ib3ggewogIHN0cm9rZTogbm9uZTsKICBzdHJva2Utd2lkdGg6IDA7CiAgZmlsbDogJHt0Lm1haW5Ca2d9OwogIG9wYWNpdHk6IDAuNTsKfQoKLmNsYXNzTGFiZWwgLmxhYmVsIHsKICBmaWxsOiAke3Qubm9kZUJvcmRlcn07CiAgZm9udC1zaXplOiAxMHB4Owp9CgoucmVsYXRpb24gewogIHN0cm9rZTogJHt0LmxpbmVDb2xvcn07CiAgc3Ryb2tlLXdpZHRoOiAxOwogIGZpbGw6IG5vbmU7Cn0KCi5kYXNoZWQtbGluZXsKICBzdHJva2UtZGFzaGFycmF5OiAzOwp9CgouZG90dGVkLWxpbmV7CiAgc3Ryb2tlLWRhc2hhcnJheTogMSAyOwp9CgojY29tcG9zaXRpb25TdGFydCwgLmNvbXBvc2l0aW9uIHsKICBmaWxsOiAke3QubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZTogJHt0LmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNjb21wb3NpdGlvbkVuZCwgLmNvbXBvc2l0aW9uIHsKICBmaWxsOiAke3QubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZTogJHt0LmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNkZXBlbmRlbmN5U3RhcnQsIC5kZXBlbmRlbmN5IHsKICBmaWxsOiAke3QubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZTogJHt0LmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNkZXBlbmRlbmN5U3RhcnQsIC5kZXBlbmRlbmN5IHsKICBmaWxsOiAke3QubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZTogJHt0LmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNleHRlbnNpb25TdGFydCwgLmV4dGVuc2lvbiB7CiAgZmlsbDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICBzdHJva2U6ICR7dC5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgojZXh0ZW5zaW9uRW5kLCAuZXh0ZW5zaW9uIHsKICBmaWxsOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogIHN0cm9rZTogJHt0LmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNhZ2dyZWdhdGlvblN0YXJ0LCAuYWdncmVnYXRpb24gewogIGZpbGw6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlOiAke3QubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZS13aWR0aDogMTsKfQoKI2FnZ3JlZ2F0aW9uRW5kLCAuYWdncmVnYXRpb24gewogIGZpbGw6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlOiAke3QubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZS13aWR0aDogMTsKfQoKI2xvbGxpcG9wU3RhcnQsIC5sb2xsaXBvcCB7CiAgZmlsbDogJHt0Lm1haW5Ca2d9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlOiAke3QubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZS13aWR0aDogMTsKfQoKI2xvbGxpcG9wRW5kLCAubG9sbGlwb3AgewogIGZpbGw6ICR7dC5tYWluQmtnfSAhaW1wb3J0YW50OwogIHN0cm9rZTogJHt0LmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCi5lZGdlVGVybWluYWxzIHsKICBmb250LXNpemU6IDExcHg7CiAgbGluZS1oZWlnaHQ6IGluaXRpYWw7Cn0KCi5jbGFzc1RpdGxlVGV4dCB7CiAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICBmb250LXNpemU6IDE4cHg7CiAgZmlsbDogJHt0LnRleHRDb2xvcn07Cn0KYCwiZ2V0U3R5bGVzIiksTjY9VVZlfSk7dmFyIEhWZSxXVmUscVZlLE02LEJPPU4oKCk9PnsidXNlIHN0cmljdCI7enQoKTt2dCgpO2dtKCk7WWQoKTskbSgpO2lyKCk7SFZlPW8oKHQsZT0iVEIiKT0+e2lmKCF0LmRvYylyZXR1cm4gZTtsZXQgcj1lO2ZvcihsZXQgbiBvZiB0LmRvYyluLnN0bXQ9PT0iZGlyIiYmKHI9bi52YWx1ZSk7cmV0dXJuIHJ9LCJnZXREaXIiKSxXVmU9byhmdW5jdGlvbih0LGUpe3JldHVybiBlLmRiLmdldENsYXNzZXMoKX0sImdldENsYXNzZXMiKSxxVmU9byhhc3luYyBmdW5jdGlvbih0LGUscixuKXtZLmluZm8oIlJFRjA6IiksWS5pbmZvKCJEcmF3aW5nIGNsYXNzIGRpYWdyYW0gKHYzKSIsZSk7bGV0e3NlY3VyaXR5TGV2ZWw6aSxzdGF0ZTphLGxheW91dDpzfT1tZSgpLGw9bi5kYi5nZXREYXRhKCksdT15YyhlLGkpO2wudHlwZT1uLnR5cGUsbC5sYXlvdXRBbGdvcml0aG09bmYocyksbC5ub2RlU3BhY2luZz1hPy5ub2RlU3BhY2luZ3x8NTAsbC5yYW5rU3BhY2luZz1hPy5yYW5rU3BhY2luZ3x8NTAsbC5tYXJrZXJzPVsiYWdncmVnYXRpb24iLCJleHRlbnNpb24iLCJjb21wb3NpdGlvbiIsImRlcGVuZGVuY3kiLCJsb2xsaXBvcCJdLGwuZGlhZ3JhbUlkPWUsYXdhaXQgQ2MobCx1KTtsZXQgaD04O0d0Lmluc2VydFRpdGxlKHUsImNsYXNzRGlhZ3JhbVRpdGxlVGV4dCIsYT8udGl0bGVUb3BNYXJnaW4/PzI1LG4uZGIuZ2V0RGlhZ3JhbVRpdGxlKCkpLEFjKHUsaCwiY2xhc3NEaWFncmFtIixhPy51c2VNYXhXaWR0aD8/ITApfSwiZHJhdyIpLE02PXtnZXRDbGFzc2VzOldWZSxkcmF3OnFWZSxnZXREaXI6SFZlfX0pO3ZhciBOZmU9e307aHIoTmZlLHtkaWFncmFtOigpPT5ZVmV9KTt2YXIgWVZlLE1mZT1OKCgpPT57InVzZSBzdHJpY3QiO0lPKCk7T08oKTtQTygpO0JPKCk7WVZlPXtwYXJzZXI6TDYsZ2V0IGRiKCl7cmV0dXJuIG5ldyBEMX0scmVuZGVyZXI6TTYsc3R5bGVzOk42LGluaXQ6byh0PT57dC5jbGFzc3x8KHQuY2xhc3M9e30pLHQuY2xhc3MuYXJyb3dNYXJrZXJBYnNvbHV0ZT10LmFycm93TWFya2VyQWJzb2x1dGV9LCJpbml0Iil9fSk7dmFyIFBmZT17fTtocihQZmUse2RpYWdyYW06KCk9PlFWZX0pO3ZhciBRVmUsQmZlPU4oKCk9PnsidXNlIHN0cmljdCI7SU8oKTtPTygpO1BPKCk7Qk8oKTtRVmU9e3BhcnNlcjpMNixnZXQgZGIoKXtyZXR1cm4gbmV3IEQxfSxyZW5kZXJlcjpNNixzdHlsZXM6TjYsaW5pdDpvKHQ9Pnt0LmNsYXNzfHwodC5jbGFzcz17fSksdC5jbGFzcy5hcnJvd01hcmtlckFic29sdXRlPXQuYXJyb3dNYXJrZXJBYnNvbHV0ZX0sImluaXQiKX19KTt2YXIgRk8sSTYsJE89TigoKT0+eyJ1c2Ugc3RyaWN0IjtGTz1mdW5jdGlvbigpe3ZhciB0PW8oZnVuY3Rpb24oRixQLHosJCl7Zm9yKHo9enx8e30sJD1GLmxlbmd0aDskLS07eltGWyRdXT1QKTtyZXR1cm4gen0sIm8iKSxlPVsxLDJdLHI9WzEsM10sbj1bMSw0XSxpPVsyLDRdLGE9WzEsOV0scz1bMSwxMV0sbD1bMSwxNl0sdT1bMSwxN10saD1bMSwxOF0sZj1bMSwxOV0sZD1bMSwzMl0scD1bMSwyMF0sbT1bMSwyMV0sZz1bMSwyMl0seT1bMSwyM10sdj1bMSwyNF0seD1bMSwyNl0sYj1bMSwyN10sdz1bMSwyOF0sQz1bMSwyOV0sVD1bMSwzMF0sRT1bMSwzMV0sQT1bMSwzNF0sUz1bMSwzNV0sXz1bMSwzNl0sST1bMSwzN10sRD1bMSwzM10saz1bMSw0LDUsMTYsMTcsMTksMjEsMjIsMjQsMjUsMjYsMjcsMjgsMjksMzMsMzUsMzcsMzgsNDIsNDUsNDgsNDksNTAsNTEsNTRdLEw9WzEsNCw1LDE0LDE1LDE2LDE3LDE5LDIxLDIyLDI0LDI1LDI2LDI3LDI4LDI5LDMzLDM1LDM3LDM4LDQyLDQ1LDQ4LDQ5LDUwLDUxLDU0XSxSPVs0LDUsMTYsMTcsMTksMjEsMjIsMjQsMjUsMjYsMjcsMjgsMjksMzMsMzUsMzcsMzgsNDIsNDUsNDgsNDksNTAsNTEsNTRdLE89e3RyYWNlOm8oZnVuY3Rpb24oKXt9LCJ0cmFjZSIpLHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsU1BBQ0U6NCxOTDo1LFNEOjYsZG9jdW1lbnQ6NyxsaW5lOjgsc3RhdGVtZW50OjksY2xhc3NEZWZTdGF0ZW1lbnQ6MTAsc3R5bGVTdGF0ZW1lbnQ6MTEsY3NzQ2xhc3NTdGF0ZW1lbnQ6MTIsaWRTdGF0ZW1lbnQ6MTMsREVTQ1I6MTQsIi0tPiI6MTUsSElERV9FTVBUWToxNixzY2FsZToxNyxXSURUSDoxOCxDT01QT1NJVF9TVEFURToxOSxTVFJVQ1RfU1RBUlQ6MjAsU1RSVUNUX1NUT1A6MjEsU1RBVEVfREVTQ1I6MjIsQVM6MjMsSUQ6MjQsRk9SSzoyNSxKT0lOOjI2LENIT0lDRToyNyxDT05DVVJSRU5UOjI4LG5vdGU6Mjksbm90ZVBvc2l0aW9uOjMwLE5PVEVfVEVYVDozMSxkaXJlY3Rpb246MzIsYWNjX3RpdGxlOjMzLGFjY190aXRsZV92YWx1ZTozNCxhY2NfZGVzY3I6MzUsYWNjX2Rlc2NyX3ZhbHVlOjM2LGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6MzcsY2xhc3NEZWY6MzgsQ0xBU1NERUZfSUQ6MzksQ0xBU1NERUZfU1RZTEVPUFRTOjQwLERFRkFVTFQ6NDEsc3R5bGU6NDIsU1RZTEVfSURTOjQzLFNUWUxFREVGX1NUWUxFT1BUUzo0NCxjbGFzczo0NSxDTEFTU0VOVElUWV9JRFM6NDYsU1RZTEVDTEFTUzo0NyxkaXJlY3Rpb25fdGI6NDgsZGlyZWN0aW9uX2J0OjQ5LGRpcmVjdGlvbl9ybDo1MCxkaXJlY3Rpb25fbHI6NTEsZW9sOjUyLCI7Ijo1MyxFREdFX1NUQVRFOjU0LFNUWUxFX1NFUEFSQVRPUjo1NSxsZWZ0X29mOjU2LHJpZ2h0X29mOjU3LCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw0OiJTUEFDRSIsNToiTkwiLDY6IlNEIiwxNDoiREVTQ1IiLDE1OiItLT4iLDE2OiJISURFX0VNUFRZIiwxNzoic2NhbGUiLDE4OiJXSURUSCIsMTk6IkNPTVBPU0lUX1NUQVRFIiwyMDoiU1RSVUNUX1NUQVJUIiwyMToiU1RSVUNUX1NUT1AiLDIyOiJTVEFURV9ERVNDUiIsMjM6IkFTIiwyNDoiSUQiLDI1OiJGT1JLIiwyNjoiSk9JTiIsMjc6IkNIT0lDRSIsMjg6IkNPTkNVUlJFTlQiLDI5OiJub3RlIiwzMToiTk9URV9URVhUIiwzMzoiYWNjX3RpdGxlIiwzNDoiYWNjX3RpdGxlX3ZhbHVlIiwzNToiYWNjX2Rlc2NyIiwzNjoiYWNjX2Rlc2NyX3ZhbHVlIiwzNzoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMzg6ImNsYXNzRGVmIiwzOToiQ0xBU1NERUZfSUQiLDQwOiJDTEFTU0RFRl9TVFlMRU9QVFMiLDQxOiJERUZBVUxUIiw0Mjoic3R5bGUiLDQzOiJTVFlMRV9JRFMiLDQ0OiJTVFlMRURFRl9TVFlMRU9QVFMiLDQ1OiJjbGFzcyIsNDY6IkNMQVNTRU5USVRZX0lEUyIsNDc6IlNUWUxFQ0xBU1MiLDQ4OiJkaXJlY3Rpb25fdGIiLDQ5OiJkaXJlY3Rpb25fYnQiLDUwOiJkaXJlY3Rpb25fcmwiLDUxOiJkaXJlY3Rpb25fbHIiLDUzOiI7Iiw1NDoiRURHRV9TVEFURSIsNTU6IlNUWUxFX1NFUEFSQVRPUiIsNTY6ImxlZnRfb2YiLDU3OiJyaWdodF9vZiJ9LHByb2R1Y3Rpb25zXzpbMCxbMywyXSxbMywyXSxbMywyXSxbNywwXSxbNywyXSxbOCwyXSxbOCwxXSxbOCwxXSxbOSwxXSxbOSwxXSxbOSwxXSxbOSwxXSxbOSwyXSxbOSwzXSxbOSw0XSxbOSwxXSxbOSwyXSxbOSwxXSxbOSw0XSxbOSwzXSxbOSw2XSxbOSwxXSxbOSwxXSxbOSwxXSxbOSwxXSxbOSw0XSxbOSw0XSxbOSwxXSxbOSwyXSxbOSwyXSxbOSwxXSxbMTAsM10sWzEwLDNdLFsxMSwzXSxbMTIsM10sWzMyLDFdLFszMiwxXSxbMzIsMV0sWzMyLDFdLFs1MiwxXSxbNTIsMV0sWzEzLDFdLFsxMywxXSxbMTMsM10sWzEzLDNdLFszMCwxXSxbMzAsMV1dLHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbihQLHosJCxILFEsaixpZSl7dmFyIG5lPWoubGVuZ3RoLTE7c3dpdGNoKFEpe2Nhc2UgMzpyZXR1cm4gSC5zZXRSb290RG9jKGpbbmVdKSxqW25lXTticmVhaztjYXNlIDQ6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgNTpqW25lXSE9Im5sIiYmKGpbbmUtMV0ucHVzaChqW25lXSksdGhpcy4kPWpbbmUtMV0pO2JyZWFrO2Nhc2UgNjpjYXNlIDc6dGhpcy4kPWpbbmVdO2JyZWFrO2Nhc2UgODp0aGlzLiQ9Im5sIjticmVhaztjYXNlIDEyOnRoaXMuJD1qW25lXTticmVhaztjYXNlIDEzOmxldCBYPWpbbmUtMV07WC5kZXNjcmlwdGlvbj1ILnRyaW1Db2xvbihqW25lXSksdGhpcy4kPVg7YnJlYWs7Y2FzZSAxNDp0aGlzLiQ9e3N0bXQ6InJlbGF0aW9uIixzdGF0ZTE6altuZS0yXSxzdGF0ZTI6altuZV19O2JyZWFrO2Nhc2UgMTU6bGV0IHRlPUgudHJpbUNvbG9uKGpbbmVdKTt0aGlzLiQ9e3N0bXQ6InJlbGF0aW9uIixzdGF0ZTE6altuZS0zXSxzdGF0ZTI6altuZS0xXSxkZXNjcmlwdGlvbjp0ZX07YnJlYWs7Y2FzZSAxOTp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpqW25lLTNdLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOiIiLGRvYzpqW25lLTFdfTticmVhaztjYXNlIDIwOnZhciBsZT1qW25lXSxoZT1qW25lLTJdLnRyaW0oKTtpZihqW25lXS5tYXRjaCgiOiIpKXt2YXIgSz1qW25lXS5zcGxpdCgiOiIpO2xlPUtbMF0saGU9W2hlLEtbMV1dfXRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmxlLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOmhlfTticmVhaztjYXNlIDIxOnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmpbbmUtM10sdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246altuZS01XSxkb2M6altuZS0xXX07YnJlYWs7Y2FzZSAyMjp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpqW25lXSx0eXBlOiJmb3JrIn07YnJlYWs7Y2FzZSAyMzp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpqW25lXSx0eXBlOiJqb2luIn07YnJlYWs7Y2FzZSAyNDp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpqW25lXSx0eXBlOiJjaG9pY2UifTticmVhaztjYXNlIDI1OnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOkguZ2V0RGl2aWRlcklkKCksdHlwZToiZGl2aWRlciJ9O2JyZWFrO2Nhc2UgMjY6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6altuZS0xXS50cmltKCksbm90ZTp7cG9zaXRpb246altuZS0yXS50cmltKCksdGV4dDpqW25lXS50cmltKCl9fTticmVhaztjYXNlIDI5OnRoaXMuJD1qW25lXS50cmltKCksSC5zZXRBY2NUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMzA6Y2FzZSAzMTp0aGlzLiQ9altuZV0udHJpbSgpLEguc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDMyOmNhc2UgMzM6dGhpcy4kPXtzdG10OiJjbGFzc0RlZiIsaWQ6altuZS0xXS50cmltKCksY2xhc3NlczpqW25lXS50cmltKCl9O2JyZWFrO2Nhc2UgMzQ6dGhpcy4kPXtzdG10OiJzdHlsZSIsaWQ6altuZS0xXS50cmltKCksc3R5bGVDbGFzczpqW25lXS50cmltKCl9O2JyZWFrO2Nhc2UgMzU6dGhpcy4kPXtzdG10OiJhcHBseUNsYXNzIixpZDpqW25lLTFdLnRyaW0oKSxzdHlsZUNsYXNzOmpbbmVdLnRyaW0oKX07YnJlYWs7Y2FzZSAzNjpILnNldERpcmVjdGlvbigiVEIiKSx0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IlRCIn07YnJlYWs7Y2FzZSAzNzpILnNldERpcmVjdGlvbigiQlQiKSx0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IkJUIn07YnJlYWs7Y2FzZSAzODpILnNldERpcmVjdGlvbigiUkwiKSx0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IlJMIn07YnJlYWs7Y2FzZSAzOTpILnNldERpcmVjdGlvbigiTFIiKSx0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IkxSIn07YnJlYWs7Y2FzZSA0MjpjYXNlIDQzOnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmpbbmVdLnRyaW0oKSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjoiIn07YnJlYWs7Y2FzZSA0NDp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpqW25lLTJdLnRyaW0oKSxjbGFzc2VzOltqW25lXS50cmltKCldLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOiIifTticmVhaztjYXNlIDQ1OnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmpbbmUtMl0udHJpbSgpLGNsYXNzZXM6W2pbbmVdLnRyaW0oKV0sdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246IiJ9O2JyZWFrfX0sImFub255bW91cyIpLHRhYmxlOlt7MzoxLDQ6ZSw1OnIsNjpufSx7MTpbM119LHszOjUsNDplLDU6ciw2Om59LHszOjYsNDplLDU6ciw2Om59LHQoWzEsNCw1LDE2LDE3LDE5LDIyLDI0LDI1LDI2LDI3LDI4LDI5LDMzLDM1LDM3LDM4LDQyLDQ1LDQ4LDQ5LDUwLDUxLDU0XSxpLHs3Ojd9KSx7MTpbMiwxXX0sezE6WzIsMl19LHsxOlsyLDNdLDQ6YSw1OnMsODo4LDk6MTAsMTA6MTIsMTE6MTMsMTI6MTQsMTM6MTUsMTY6bCwxNzp1LDE5OmgsMjI6ZiwyNDpkLDI1OnAsMjY6bSwyNzpnLDI4OnksMjk6diwzMjoyNSwzMzp4LDM1OmIsMzc6dywzODpDLDQyOlQsNDU6RSw0ODpBLDQ5OlMsNTA6Xyw1MTpJLDU0OkR9LHQoayxbMiw1XSksezk6MzgsMTA6MTIsMTE6MTMsMTI6MTQsMTM6MTUsMTY6bCwxNzp1LDE5OmgsMjI6ZiwyNDpkLDI1OnAsMjY6bSwyNzpnLDI4OnksMjk6diwzMjoyNSwzMzp4LDM1OmIsMzc6dywzODpDLDQyOlQsNDU6RSw0ODpBLDQ5OlMsNTA6Xyw1MTpJLDU0OkR9LHQoayxbMiw3XSksdChrLFsyLDhdKSx0KGssWzIsOV0pLHQoayxbMiwxMF0pLHQoayxbMiwxMV0pLHQoayxbMiwxMl0sezE0OlsxLDM5XSwxNTpbMSw0MF19KSx0KGssWzIsMTZdKSx7MTg6WzEsNDFdfSx0KGssWzIsMThdLHsyMDpbMSw0Ml19KSx7MjM6WzEsNDNdfSx0KGssWzIsMjJdKSx0KGssWzIsMjNdKSx0KGssWzIsMjRdKSx0KGssWzIsMjVdKSx7MzA6NDQsMzE6WzEsNDVdLDU2OlsxLDQ2XSw1NzpbMSw0N119LHQoayxbMiwyOF0pLHszNDpbMSw0OF19LHszNjpbMSw0OV19LHQoayxbMiwzMV0pLHszOTpbMSw1MF0sNDE6WzEsNTFdfSx7NDM6WzEsNTJdfSx7NDY6WzEsNTNdfSx0KEwsWzIsNDJdLHs1NTpbMSw1NF19KSx0KEwsWzIsNDNdLHs1NTpbMSw1NV19KSx0KGssWzIsMzZdKSx0KGssWzIsMzddKSx0KGssWzIsMzhdKSx0KGssWzIsMzldKSx0KGssWzIsNl0pLHQoayxbMiwxM10pLHsxMzo1NiwyNDpkLDU0OkR9LHQoayxbMiwxN10pLHQoUixpLHs3OjU3fSksezI0OlsxLDU4XX0sezI0OlsxLDU5XX0sezIzOlsxLDYwXX0sezI0OlsyLDQ2XX0sezI0OlsyLDQ3XX0sdChrLFsyLDI5XSksdChrLFsyLDMwXSksezQwOlsxLDYxXX0sezQwOlsxLDYyXX0sezQ0OlsxLDYzXX0sezQ3OlsxLDY0XX0sezI0OlsxLDY1XX0sezI0OlsxLDY2XX0sdChrLFsyLDE0XSx7MTQ6WzEsNjddfSksezQ6YSw1OnMsODo4LDk6MTAsMTA6MTIsMTE6MTMsMTI6MTQsMTM6MTUsMTY6bCwxNzp1LDE5OmgsMjE6WzEsNjhdLDIyOmYsMjQ6ZCwyNTpwLDI2Om0sMjc6ZywyODp5LDI5OnYsMzI6MjUsMzM6eCwzNTpiLDM3OncsMzg6Qyw0MjpULDQ1OkUsNDg6QSw0OTpTLDUwOl8sNTE6SSw1NDpEfSx0KGssWzIsMjBdLHsyMDpbMSw2OV19KSx7MzE6WzEsNzBdfSx7MjQ6WzEsNzFdfSx0KGssWzIsMzJdKSx0KGssWzIsMzNdKSx0KGssWzIsMzRdKSx0KGssWzIsMzVdKSx0KEwsWzIsNDRdKSx0KEwsWzIsNDVdKSx0KGssWzIsMTVdKSx0KGssWzIsMTldKSx0KFIsaSx7Nzo3Mn0pLHQoayxbMiwyNl0pLHQoayxbMiwyN10pLHs0OmEsNTpzLDg6OCw5OjEwLDEwOjEyLDExOjEzLDEyOjE0LDEzOjE1LDE2OmwsMTc6dSwxOTpoLDIxOlsxLDczXSwyMjpmLDI0OmQsMjU6cCwyNjptLDI3OmcsMjg6eSwyOTp2LDMyOjI1LDMzOngsMzU6YiwzNzp3LDM4OkMsNDI6VCw0NTpFLDQ4OkEsNDk6Uyw1MDpfLDUxOkksNTQ6RH0sdChrLFsyLDIxXSldLGRlZmF1bHRBY3Rpb25zOns1OlsyLDFdLDY6WzIsMl0sNDY6WzIsNDZdLDQ3OlsyLDQ3XX0scGFyc2VFcnJvcjpvKGZ1bmN0aW9uKFAseil7aWYoei5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKFApO2Vsc2V7dmFyICQ9bmV3IEVycm9yKFApO3Rocm93ICQuaGFzaD16LCR9fSwicGFyc2VFcnJvciIpLHBhcnNlOm8oZnVuY3Rpb24oUCl7dmFyIHo9dGhpcywkPVswXSxIPVtdLFE9W251bGxdLGo9W10saWU9dGhpcy50YWJsZSxuZT0iIixsZT0wLGhlPTAsSz0wLFg9Mix0ZT0xLEo9ai5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxzZT1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLHVlPXt5eTp7fX07Zm9yKHZhciBaIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksWikmJih1ZS55eVtaXT10aGlzLnl5W1pdKTtzZS5zZXRJbnB1dChQLHVlLnl5KSx1ZS55eS5sZXhlcj1zZSx1ZS55eS5wYXJzZXI9dGhpcyx0eXBlb2Ygc2UueXlsbG9jPiJ1IiYmKHNlLnl5bGxvYz17fSk7dmFyIFNlPXNlLnl5bGxvYztqLnB1c2goU2UpO3ZhciBjZT1zZS5vcHRpb25zJiZzZS5vcHRpb25zLnJhbmdlczt0eXBlb2YgdWUueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9dWUueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gYWUoeGUpeyQubGVuZ3RoPSQubGVuZ3RoLTIqeGUsUS5sZW5ndGg9US5sZW5ndGgteGUsai5sZW5ndGg9ai5sZW5ndGgteGV9byhhZSwicG9wU3RhY2siKTtmdW5jdGlvbiBPZSgpe3ZhciB4ZTtyZXR1cm4geGU9SC5wb3AoKXx8c2UubGV4KCl8fHRlLHR5cGVvZiB4ZSE9Im51bWJlciImJih4ZSBpbnN0YW5jZW9mIEFycmF5JiYoSD14ZSx4ZT1ILnBvcCgpKSx4ZT16LnN5bWJvbHNfW3hlXXx8eGUpLHhlfW8oT2UsImxleCIpO2Zvcih2YXIgZ2UsemUsSGUsJGUsUmUsSWUsYmU9e30sVyxkZSxyZSxvZTs7KXtpZihIZT0kWyQubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbSGVdPyRlPXRoaXMuZGVmYXVsdEFjdGlvbnNbSGVdOigoZ2U9PT1udWxsfHx0eXBlb2YgZ2U+InUiKSYmKGdlPU9lKCkpLCRlPWllW0hlXSYmaWVbSGVdW2dlXSksdHlwZW9mICRlPiJ1Inx8ISRlLmxlbmd0aHx8ISRlWzBdKXt2YXIgVj0iIjtvZT1bXTtmb3IoVyBpbiBpZVtIZV0pdGhpcy50ZXJtaW5hbHNfW1ddJiZXPlgmJm9lLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tXXSsiJyIpO3NlLnNob3dQb3NpdGlvbj9WPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGxlKzEpK2A6CmArc2Uuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtvZS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW2dlXXx8Z2UpKyInIjpWPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGxlKzEpKyI6IFVuZXhwZWN0ZWQgIisoZ2U9PXRlPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW2dlXXx8Z2UpKyInIiksdGhpcy5wYXJzZUVycm9yKFYse3RleHQ6c2UubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW2dlXXx8Z2UsbGluZTpzZS55eWxpbmVubyxsb2M6U2UsZXhwZWN0ZWQ6b2V9KX1pZigkZVswXWluc3RhbmNlb2YgQXJyYXkmJiRlLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrSGUrIiwgdG9rZW46ICIrZ2UpO3N3aXRjaCgkZVswXSl7Y2FzZSAxOiQucHVzaChnZSksUS5wdXNoKHNlLnl5dGV4dCksai5wdXNoKHNlLnl5bGxvYyksJC5wdXNoKCRlWzFdKSxnZT1udWxsLHplPyhnZT16ZSx6ZT1udWxsKTooaGU9c2UueXlsZW5nLG5lPXNlLnl5dGV4dCxsZT1zZS55eWxpbmVubyxTZT1zZS55eWxsb2MsSz4wJiZLLS0pO2JyZWFrO2Nhc2UgMjppZihkZT10aGlzLnByb2R1Y3Rpb25zX1skZVsxXV1bMV0sYmUuJD1RW1EubGVuZ3RoLWRlXSxiZS5fJD17Zmlyc3RfbGluZTpqW2oubGVuZ3RoLShkZXx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmpbai5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjpqW2oubGVuZ3RoLShkZXx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpqW2oubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxjZSYmKGJlLl8kLnJhbmdlPVtqW2oubGVuZ3RoLShkZXx8MSldLnJhbmdlWzBdLGpbai5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxJZT10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoYmUsW25lLGhlLGxlLHVlLnl5LCRlWzFdLFEsal0uY29uY2F0KEopKSx0eXBlb2YgSWU8InUiKXJldHVybiBJZTtkZSYmKCQ9JC5zbGljZSgwLC0xKmRlKjIpLFE9US5zbGljZSgwLC0xKmRlKSxqPWouc2xpY2UoMCwtMSpkZSkpLCQucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1skZVsxXV1bMF0pLFEucHVzaChiZS4kKSxqLnB1c2goYmUuXyQpLHJlPWllWyRbJC5sZW5ndGgtMl1dWyRbJC5sZW5ndGgtMV1dLCQucHVzaChyZSk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH0sInBhcnNlIil9LE09ZnVuY3Rpb24oKXt2YXIgRj17RU9GOjEscGFyc2VFcnJvcjpvKGZ1bmN0aW9uKHosJCl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcih6LCQpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKHopfSwicGFyc2VFcnJvciIpLHNldElucHV0Om8oZnVuY3Rpb24oUCx6KXtyZXR1cm4gdGhpcy55eT16fHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1QLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSwic2V0SW5wdXQiKSxpbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIFA9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPVAsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPVAsdGhpcy5tYXRjaGVkKz1QO3ZhciB6PVAubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiB6Pyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxQfSwiaW5wdXQiKSx1bnB1dDpvKGZ1bmN0aW9uKFApe3ZhciB6PVAubGVuZ3RoLCQ9UC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PVArdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLXopLHRoaXMub2Zmc2V0LT16O3ZhciBIPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLCQubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT0kLmxlbmd0aC0xKTt2YXIgUT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46JD8oJC5sZW5ndGg9PT1ILmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrSFtILmxlbmd0aC0kLmxlbmd0aF0ubGVuZ3RoLSRbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi16fSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W1FbMF0sUVswXSt0aGlzLnl5bGVuZy16XSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LCJ1bnB1dCIpLG1vcmU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LCJtb3JlIikscmVqZWN0Om8oZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LCJyZWplY3QiKSxsZXNzOm8oZnVuY3Rpb24oUCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKFApKX0sImxlc3MiKSxwYXN0SW5wdXQ6byhmdW5jdGlvbigpe3ZhciBQPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oUC5sZW5ndGg+MjA/Ii4uLiI6IiIpK1Auc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LCJwYXN0SW5wdXQiKSx1cGNvbWluZ0lucHV0Om8oZnVuY3Rpb24oKXt2YXIgUD10aGlzLm1hdGNoO3JldHVybiBQLmxlbmd0aDwyMCYmKFArPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLVAubGVuZ3RoKSksKFAuc3Vic3RyKDAsMjApKyhQLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSwidXBjb21pbmdJbnB1dCIpLHNob3dQb3NpdGlvbjpvKGZ1bmN0aW9uKCl7dmFyIFA9dGhpcy5wYXN0SW5wdXQoKSx6PW5ldyBBcnJheShQLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIFArdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK3orIl4ifSwic2hvd1Bvc2l0aW9uIiksdGVzdF9tYXRjaDpvKGZ1bmN0aW9uKFAseil7dmFyICQsSCxRO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihRPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKFEueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksSD1QWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxIJiYodGhpcy55eWxpbmVubys9SC5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpIP0hbSC5sZW5ndGgtMV0ubGVuZ3RoLUhbSC5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitQWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPVBbMF0sdGhpcy5tYXRjaCs9UFswXSx0aGlzLm1hdGNoZXM9UCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShQWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1QWzBdLCQ9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMseix0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSwkKXJldHVybiAkO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBqIGluIFEpdGhpc1tqXT1RW2pdO3JldHVybiExfXJldHVybiExfSwidGVzdF9tYXRjaCIpLG5leHQ6byhmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBQLHosJCxIO3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIFE9dGhpcy5fY3VycmVudFJ1bGVzKCksaj0wO2o8US5sZW5ndGg7aisrKWlmKCQ9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tRW2pdXSksJCYmKCF6fHwkWzBdLmxlbmd0aD56WzBdLmxlbmd0aCkpe2lmKHo9JCxIPWosdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoUD10aGlzLnRlc3RfbWF0Y2goJCxRW2pdKSxQIT09ITEpcmV0dXJuIFA7aWYodGhpcy5fYmFja3RyYWNrKXt6PSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIHo/KFA9dGhpcy50ZXN0X21hdGNoKHosUVtIXSksUCE9PSExP1A6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LCJuZXh0IiksbGV4Om8oZnVuY3Rpb24oKXt2YXIgej10aGlzLm5leHQoKTtyZXR1cm4genx8dGhpcy5sZXgoKX0sImxleCIpLGJlZ2luOm8oZnVuY3Rpb24oeil7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKHopfSwiYmVnaW4iKSxwb3BTdGF0ZTpvKGZ1bmN0aW9uKCl7dmFyIHo9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gej4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sInBvcFN0YXRlIiksX2N1cnJlbnRSdWxlczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sIl9jdXJyZW50UnVsZXMiKSx0b3BTdGF0ZTpvKGZ1bmN0aW9uKHope3JldHVybiB6PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoenx8MCksej49MD90aGlzLmNvbmRpdGlvblN0YWNrW3pdOiJJTklUSUFMIn0sInRvcFN0YXRlIikscHVzaFN0YXRlOm8oZnVuY3Rpb24oeil7dGhpcy5iZWdpbih6KX0sInB1c2hTdGF0ZSIpLHN0YXRlU3RhY2tTaXplOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LCJzdGF0ZVN0YWNrU2l6ZSIpLG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKHosJCxILFEpe3ZhciBqPVE7c3dpdGNoKEgpe2Nhc2UgMDpyZXR1cm4gNDE7Y2FzZSAxOnJldHVybiA0ODtjYXNlIDI6cmV0dXJuIDQ5O2Nhc2UgMzpyZXR1cm4gNTA7Y2FzZSA0OnJldHVybiA1MTtjYXNlIDU6YnJlYWs7Y2FzZSA2OmJyZWFrO2Nhc2UgNzpyZXR1cm4gNTtjYXNlIDg6YnJlYWs7Y2FzZSA5OmJyZWFrO2Nhc2UgMTA6YnJlYWs7Y2FzZSAxMTpicmVhaztjYXNlIDEyOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiU0NBTEUiKSwxNzticmVhaztjYXNlIDEzOnJldHVybiAxODtjYXNlIDE0OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE1OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwzMzticmVhaztjYXNlIDE2OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7YnJlYWs7Y2FzZSAxNzpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX2Rlc2NyIiksMzU7YnJlYWs7Y2FzZSAxODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2JyZWFrO2Nhc2UgMTk6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgMjA6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjE6cmV0dXJuImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiO2Nhc2UgMjI6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJDTEFTU0RFRiIpLDM4O2JyZWFrO2Nhc2UgMjM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiQ0xBU1NERUZJRCIpLCJERUZBVUxUX0NMQVNTREVGX0lEIjticmVhaztjYXNlIDI0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIkNMQVNTREVGSUQiKSwzOTticmVhaztjYXNlIDI1OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNDA7YnJlYWs7Y2FzZSAyNjpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIkNMQVNTIiksNDU7YnJlYWs7Y2FzZSAyNzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJDTEFTU19TVFlMRSIpLDQ2O2JyZWFrO2Nhc2UgMjg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw0NzticmVhaztjYXNlIDI5OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiU1RZTEUiKSw0MjticmVhaztjYXNlIDMwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIlNUWUxFREVGX1NUWUxFUyIpLDQzO2JyZWFrO2Nhc2UgMzE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw0NDticmVhaztjYXNlIDMyOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiU0NBTEUiKSwxNzticmVhaztjYXNlIDMzOnJldHVybiAxODtjYXNlIDM0OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDM1OnRoaXMucHVzaFN0YXRlKCJTVEFURSIpO2JyZWFrO2Nhc2UgMzY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwkLnl5dGV4dD0kLnl5dGV4dC5zbGljZSgwLC04KS50cmltKCksMjU7YnJlYWs7Y2FzZSAzNzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCQueXl0ZXh0PSQueXl0ZXh0LnNsaWNlKDAsLTgpLnRyaW0oKSwyNjticmVhaztjYXNlIDM4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksJC55eXRleHQ9JC55eXRleHQuc2xpY2UoMCwtMTApLnRyaW0oKSwyNzticmVhaztjYXNlIDM5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksJC55eXRleHQ9JC55eXRleHQuc2xpY2UoMCwtOCkudHJpbSgpLDI1O2JyZWFrO2Nhc2UgNDA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwkLnl5dGV4dD0kLnl5dGV4dC5zbGljZSgwLC04KS50cmltKCksMjY7YnJlYWs7Y2FzZSA0MTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCQueXl0ZXh0PSQueXl0ZXh0LnNsaWNlKDAsLTEwKS50cmltKCksMjc7YnJlYWs7Y2FzZSA0MjpyZXR1cm4gNDg7Y2FzZSA0MzpyZXR1cm4gNDk7Y2FzZSA0NDpyZXR1cm4gNTA7Y2FzZSA0NTpyZXR1cm4gNTE7Y2FzZSA0Njp0aGlzLnB1c2hTdGF0ZSgiU1RBVEVfU1RSSU5HIik7YnJlYWs7Y2FzZSA0NzpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIlNUQVRFX0lEIiksIkFTIjticmVhaztjYXNlIDQ4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksIklEIjticmVhaztjYXNlIDQ5OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDUwOnJldHVybiJTVEFURV9ERVNDUiI7Y2FzZSA1MTpyZXR1cm4gMTk7Y2FzZSA1Mjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA1MzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJzdHJ1Y3QiKSwyMDticmVhaztjYXNlIDU0OmJyZWFrO2Nhc2UgNTU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwyMTticmVhaztjYXNlIDU2OmJyZWFrO2Nhc2UgNTc6cmV0dXJuIHRoaXMuYmVnaW4oIk5PVEUiKSwyOTticmVhaztjYXNlIDU4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIk5PVEVfSUQiKSw1NjticmVhaztjYXNlIDU5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIk5PVEVfSUQiKSw1NzticmVhaztjYXNlIDYwOnRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiRkxPQVRJTkdfTk9URSIpO2JyZWFrO2Nhc2UgNjE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiRkxPQVRJTkdfTk9URV9JRCIpLCJBUyI7YnJlYWs7Y2FzZSA2MjpicmVhaztjYXNlIDYzOnJldHVybiJOT1RFX1RFWFQiO2Nhc2UgNjQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiSUQiO2JyZWFrO2Nhc2UgNjU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiTk9URV9URVhUIiksMjQ7YnJlYWs7Y2FzZSA2NjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCQueXl0ZXh0PSQueXl0ZXh0LnN1YnN0cigyKS50cmltKCksMzE7YnJlYWs7Y2FzZSA2NzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCQueXl0ZXh0PSQueXl0ZXh0LnNsaWNlKDAsLTgpLnRyaW0oKSwzMTticmVhaztjYXNlIDY4OnJldHVybiA2O2Nhc2UgNjk6cmV0dXJuIDY7Y2FzZSA3MDpyZXR1cm4gMTY7Y2FzZSA3MTpyZXR1cm4gNTQ7Y2FzZSA3MjpyZXR1cm4gMjQ7Y2FzZSA3MzpyZXR1cm4gJC55eXRleHQ9JC55eXRleHQudHJpbSgpLDE0O2JyZWFrO2Nhc2UgNzQ6cmV0dXJuIDE1O2Nhc2UgNzU6cmV0dXJuIDI4O2Nhc2UgNzY6cmV0dXJuIDU1O2Nhc2UgNzc6cmV0dXJuIDU7Y2FzZSA3ODpyZXR1cm4iSU5WQUxJRCJ9fSwiYW5vbnltb3VzIikscnVsZXM6Wy9eKD86ZGVmYXVsdFxiKS9pLC9eKD86LipkaXJlY3Rpb25ccytUQlteXG5dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrQlRbXlxuXSopL2ksL14oPzouKmRpcmVjdGlvblxzK1JMW15cbl0qKS9pLC9eKD86LipkaXJlY3Rpb25ccytMUlteXG5dKikvaSwvXig/OiUlKD8hXHspW15cbl0qKS9pLC9eKD86W15cfV0lJVteXG5dKikvaSwvXig/Oltcbl0rKS9pLC9eKD86W1xzXSspL2ksL14oPzooKD8hXG4pXHMpKykvaSwvXig/OiNbXlxuXSopL2ksL14oPzolW15cbl0qKS9pLC9eKD86c2NhbGVccyspL2ksL14oPzpcZCspL2ksL14oPzpccyt3aWR0aFxiKS9pLC9eKD86YWNjVGl0bGVccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccypce1xzKikvaSwvXig/OltcfV0pL2ksL14oPzpbXlx9XSopL2ksL14oPzpjbGFzc0RlZlxzKykvaSwvXig/OkRFRkFVTFRccyspL2ksL14oPzpcdytccyspL2ksL14oPzpbXlxuXSopL2ksL14oPzpjbGFzc1xzKykvaSwvXig/OihcdyspKygoLFxzKlx3KykqKSkvaSwvXig/OlteXG5dKikvaSwvXig/OnN0eWxlXHMrKS9pLC9eKD86W1x3LF0rXHMrKS9pLC9eKD86W15cbl0qKS9pLC9eKD86c2NhbGVccyspL2ksL14oPzpcZCspL2ksL14oPzpccyt3aWR0aFxiKS9pLC9eKD86c3RhdGVccyspL2ksL14oPzouKjw8Zm9yaz4+KS9pLC9eKD86Lio8PGpvaW4+PikvaSwvXig/Oi4qPDxjaG9pY2U+PikvaSwvXig/Oi4qXFtcW2ZvcmtcXVxdKS9pLC9eKD86LipcW1xbam9pblxdXF0pL2ksL14oPzouKlxbXFtjaG9pY2VcXVxdKS9pLC9eKD86LipkaXJlY3Rpb25ccytUQlteXG5dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrQlRbXlxuXSopL2ksL14oPzouKmRpcmVjdGlvblxzK1JMW15cbl0qKS9pLC9eKD86LipkaXJlY3Rpb25ccytMUlteXG5dKikvaSwvXig/OlsiXSkvaSwvXig/OlxzKmFzXHMrKS9pLC9eKD86W15cblx7XSopL2ksL14oPzpbIl0pL2ksL14oPzpbXiJdKikvaSwvXig/OlteXG5cc1x7XSspL2ksL14oPzpcbikvaSwvXig/Olx7KS9pLC9eKD86JSUoPyFceylbXlxuXSopL2ksL14oPzpcfSkvaSwvXig/Oltcbl0pL2ksL14oPzpub3RlXHMrKS9pLC9eKD86bGVmdCBvZlxiKS9pLC9eKD86cmlnaHQgb2ZcYikvaSwvXig/OiIpL2ksL14oPzpccyphc1xzKikvaSwvXig/OlsiXSkvaSwvXig/OlteIl0qKS9pLC9eKD86W15cbl0qKS9pLC9eKD86XHMqW146XG5cc1wtXSspL2ksL14oPzpccyo6W146XG47XSspL2ksL14oPzpbXHNcU10qP2VuZCBub3RlXGIpL2ksL14oPzpzdGF0ZURpYWdyYW1ccyspL2ksL14oPzpzdGF0ZURpYWdyYW0tdjJccyspL2ksL14oPzpoaWRlIGVtcHR5IGRlc2NyaXB0aW9uXGIpL2ksL14oPzpcW1wqXF0pL2ksL14oPzpbXjpcblxzXC1ce10rKS9pLC9eKD86XHMqOlteOlxuO10rKS9pLC9eKD86LS0+KS9pLC9eKD86LS0pL2ksL14oPzo6OjopL2ksL14oPzokKS9pLC9eKD86LikvaV0sY29uZGl0aW9uczp7TElORTp7cnVsZXM6WzksMTBdLGluY2x1c2l2ZTohMX0sc3RydWN0OntydWxlczpbOSwxMCwyMiwyNiwyOSwzNSw0Miw0Myw0NCw0NSw1NCw1NSw1Niw1Nyw3MSw3Miw3Myw3NCw3NV0saW5jbHVzaXZlOiExfSxGTE9BVElOR19OT1RFX0lEOntydWxlczpbNjRdLGluY2x1c2l2ZTohMX0sRkxPQVRJTkdfTk9URTp7cnVsZXM6WzYxLDYyLDYzXSxpbmNsdXNpdmU6ITF9LE5PVEVfVEVYVDp7cnVsZXM6WzY2LDY3XSxpbmNsdXNpdmU6ITF9LE5PVEVfSUQ6e3J1bGVzOls2NV0saW5jbHVzaXZlOiExfSxOT1RFOntydWxlczpbNTgsNTksNjBdLGluY2x1c2l2ZTohMX0sU1RZTEVERUZfU1RZTEVPUFRTOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LFNUWUxFREVGX1NUWUxFUzp7cnVsZXM6WzMxXSxpbmNsdXNpdmU6ITF9LFNUWUxFX0lEUzp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxTVFlMRTp7cnVsZXM6WzMwXSxpbmNsdXNpdmU6ITF9LENMQVNTX1NUWUxFOntydWxlczpbMjhdLGluY2x1c2l2ZTohMX0sQ0xBU1M6e3J1bGVzOlsyN10saW5jbHVzaXZlOiExfSxDTEFTU0RFRklEOntydWxlczpbMjVdLGluY2x1c2l2ZTohMX0sQ0xBU1NERUY6e3J1bGVzOlsyMywyNF0saW5jbHVzaXZlOiExfSxhY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbMjAsMjFdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbMThdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbMTZdLGluY2x1c2l2ZTohMX0sU0NBTEU6e3J1bGVzOlsxMywxNCwzMywzNF0saW5jbHVzaXZlOiExfSxBTElBUzp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxTVEFURV9JRDp7cnVsZXM6WzQ4XSxpbmNsdXNpdmU6ITF9LFNUQVRFX1NUUklORzp7cnVsZXM6WzQ5LDUwXSxpbmNsdXNpdmU6ITF9LEZPUktfU1RBVEU6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sU1RBVEU6e3J1bGVzOls5LDEwLDM2LDM3LDM4LDM5LDQwLDQxLDQ2LDQ3LDUxLDUyLDUzXSxpbmNsdXNpdmU6ITF9LElEOntydWxlczpbOSwxMF0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDIsMyw0LDUsNiw3LDgsMTAsMTEsMTIsMTUsMTcsMTksMjIsMjYsMjksMzIsMzUsNTMsNTcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzYsNzcsNzhdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gRn0oKTtPLmxleGVyPU07ZnVuY3Rpb24gQigpe3RoaXMueXk9e319cmV0dXJuIG8oQiwiUGFyc2VyIiksQi5wcm90b3R5cGU9TyxPLlBhcnNlcj1CLG5ldyBCfSgpO0ZPLnBhcnNlcj1GTztJNj1GT30pO3ZhciB6ZmUsTzYsek8sTDEsRWIsR2ZlLFZmZSxVZmUsUnAsUDYsR08sVk8sVU8sSE8sV08sQjYsRjYsSGZlLFdmZSxxTyxZTyxxZmUsWWZlLFIxLHRVZSxYZmUsWE8sclVlLG5VZSxqZmUsS2ZlLGlVZSxRZmUsYVVlLFpmZSxqTyxLTyxKZmUsJDYsZWRlLFFPLHo2PU4oKCk9PnsidXNlIHN0cmljdCI7emZlPSJUQiIsTzY9IlRCIix6Tz0iZGlyIixMMT0ic3RhdGUiLEViPSJyZWxhdGlvbiIsR2ZlPSJjbGFzc0RlZiIsVmZlPSJzdHlsZSIsVWZlPSJhcHBseUNsYXNzIixScD0iZGVmYXVsdCIsUDY9ImRpdmlkZXIiLEdPPSJmaWxsOm5vbmUiLFZPPSJmaWxsOiAjMzMzIixVTz0iYyIsSE89InRleHQiLFdPPSJub3JtYWwiLEI2PSJyZWN0IixGNj0icmVjdFdpdGhUaXRsZSIsSGZlPSJzdGF0ZVN0YXJ0IixXZmU9InN0YXRlRW5kIixxTz0iZGl2aWRlciIsWU89InJvdW5kZWRXaXRoVGl0bGUiLHFmZT0ibm90ZSIsWWZlPSJub3RlR3JvdXAiLFIxPSJzdGF0ZWRpYWdyYW0iLHRVZT0ic3RhdGUiLFhmZT1gJHtSMX0tJHt0VWV9YCxYTz0idHJhbnNpdGlvbiIsclVlPSJub3RlIixuVWU9Im5vdGUtZWRnZSIsamZlPWAke1hPfSAke25VZX1gLEtmZT1gJHtSMX0tJHtyVWV9YCxpVWU9ImNsdXN0ZXIiLFFmZT1gJHtSMX0tJHtpVWV9YCxhVWU9ImNsdXN0ZXItYWx0IixaZmU9YCR7UjF9LSR7YVVlfWAsak89InBhcmVudCIsS089Im5vdGUiLEpmZT0ic3RhdGUiLCQ2PSItLS0tIixlZGU9YCR7JDZ9JHtLT31gLFFPPWAkeyQ2fSR7ak99YH0pO2Z1bmN0aW9uIFpPKHQ9IiIsZT0wLHI9IiIsbj0kNil7bGV0IGk9ciE9PW51bGwmJnIubGVuZ3RoPjA/YCR7bn0ke3J9YDoiIjtyZXR1cm5gJHtKZmV9LSR7dH0ke2l9LSR7ZX1gfWZ1bmN0aW9uIEc2KHQsZSxyKXtpZighZS5pZHx8ZS5pZD09PSI8L2pvaW4+PC9mb3JrPiJ8fGUuaWQ9PT0iPC9jaG9pY2U+IilyZXR1cm47ZS5jc3NDbGFzc2VzJiYoQXJyYXkuaXNBcnJheShlLmNzc0NvbXBpbGVkU3R5bGVzKXx8KGUuY3NzQ29tcGlsZWRTdHlsZXM9W10pLGUuY3NzQ2xhc3Nlcy5zcGxpdCgiICIpLmZvckVhY2goaT0+e2lmKHIuZ2V0KGkpKXtsZXQgYT1yLmdldChpKTtlLmNzc0NvbXBpbGVkU3R5bGVzPVsuLi5lLmNzc0NvbXBpbGVkU3R5bGVzLC4uLmEuc3R5bGVzXX19KSk7bGV0IG49dC5maW5kKGk9PmkuaWQ9PT1lLmlkKTtuP09iamVjdC5hc3NpZ24obixlKTp0LnB1c2goZSl9ZnVuY3Rpb24gb1VlKHQpe3JldHVybiB0Py5jbGFzc2VzPy5qb2luKCIgIik/PyIifWZ1bmN0aW9uIGxVZSh0KXtyZXR1cm4gdD8uc3R5bGVzPz9bXX12YXIgVjYseGYsc1VlLHRkZSxOMSxyZGUsbmRlPU4oKCk9PnsidXNlIHN0cmljdCI7enQoKTt2dCgpO2dyKCk7ejYoKTtWNj1uZXcgTWFwLHhmPTA7byhaTywic3RhdGVEb21JZCIpO3NVZT1vKCh0LGUscixuLGksYSxzLGwpPT57WS50cmFjZSgiaXRlbXMiLGUpLGUuZm9yRWFjaCh1PT57c3dpdGNoKHUuc3RtdCl7Y2FzZSBMMTpOMSh0LHUscixuLGksYSxzLGwpO2JyZWFrO2Nhc2UgUnA6TjEodCx1LHIsbixpLGEscyxsKTticmVhaztjYXNlIEViOntOMSh0LHUuc3RhdGUxLHIsbixpLGEscyxsKSxOMSh0LHUuc3RhdGUyLHIsbixpLGEscyxsKTtsZXQgaD17aWQ6ImVkZ2UiK3hmLHN0YXJ0OnUuc3RhdGUxLmlkLGVuZDp1LnN0YXRlMi5pZCxhcnJvd2hlYWQ6Im5vcm1hbCIsYXJyb3dUeXBlRW5kOiJhcnJvd19iYXJiIixzdHlsZTpHTyxsYWJlbFN0eWxlOiIiLGxhYmVsOlplLnNhbml0aXplVGV4dCh1LmRlc2NyaXB0aW9uLG1lKCkpLGFycm93aGVhZFN0eWxlOlZPLGxhYmVscG9zOlVPLGxhYmVsVHlwZTpITyx0aGlja25lc3M6V08sY2xhc3NlczpYTyxsb29rOnN9O2kucHVzaChoKSx4ZisrfWJyZWFrfX0pfSwic2V0dXBEb2MiKSx0ZGU9bygodCxlPU82KT0+e2xldCByPWU7aWYodC5kb2MpZm9yKGxldCBuIG9mIHQuZG9jKW4uc3RtdD09PSJkaXIiJiYocj1uLnZhbHVlKTtyZXR1cm4gcn0sImdldERpciIpO28oRzYsImluc2VydE9yVXBkYXRlTm9kZSIpO28ob1VlLCJnZXRDbGFzc2VzRnJvbURiSW5mbyIpO28obFVlLCJnZXRTdHlsZXNGcm9tRGJJbmZvIik7TjE9bygodCxlLHIsbixpLGEscyxsKT0+e2xldCB1PWUuaWQsaD1yLmdldCh1KSxmPW9VZShoKSxkPWxVZShoKTtpZihZLmluZm8oImRhdGFGZXRjaGVyIHBhcnNlZEl0ZW0iLGUsaCxkKSx1IT09InJvb3QiKXtsZXQgcD1CNjtlLnN0YXJ0PT09ITA/cD1IZmU6ZS5zdGFydD09PSExJiYocD1XZmUpLGUudHlwZSE9PVJwJiYocD1lLnR5cGUpLFY2LmdldCh1KXx8VjYuc2V0KHUse2lkOnUsc2hhcGU6cCxkZXNjcmlwdGlvbjpaZS5zYW5pdGl6ZVRleHQodSxtZSgpKSxjc3NDbGFzc2VzOmAke2Z9ICR7WGZlfWAsY3NzU3R5bGVzOmR9KTtsZXQgbT1WNi5nZXQodSk7ZS5kZXNjcmlwdGlvbiYmKEFycmF5LmlzQXJyYXkobS5kZXNjcmlwdGlvbik/KG0uc2hhcGU9RjYsbS5kZXNjcmlwdGlvbi5wdXNoKGUuZGVzY3JpcHRpb24pKTptLmRlc2NyaXB0aW9uPy5sZW5ndGg+MD8obS5zaGFwZT1GNixtLmRlc2NyaXB0aW9uPT09dT9tLmRlc2NyaXB0aW9uPVtlLmRlc2NyaXB0aW9uXTptLmRlc2NyaXB0aW9uPVttLmRlc2NyaXB0aW9uLGUuZGVzY3JpcHRpb25dKToobS5zaGFwZT1CNixtLmRlc2NyaXB0aW9uPWUuZGVzY3JpcHRpb24pLG0uZGVzY3JpcHRpb249WmUuc2FuaXRpemVUZXh0T3JBcnJheShtLmRlc2NyaXB0aW9uLG1lKCkpKSxtLmRlc2NyaXB0aW9uPy5sZW5ndGg9PT0xJiZtLnNoYXBlPT09RjYmJihtLnR5cGU9PT0iZ3JvdXAiP20uc2hhcGU9WU86bS5zaGFwZT1CNiksIW0udHlwZSYmZS5kb2MmJihZLmluZm8oIlNldHRpbmcgY2x1c3RlciBmb3IgWENYIix1LHRkZShlKSksbS50eXBlPSJncm91cCIsbS5pc0dyb3VwPSEwLG0uZGlyPXRkZShlKSxtLnNoYXBlPWUudHlwZT09PVA2P3FPOllPLG0uY3NzQ2xhc3Nlcz1gJHttLmNzc0NsYXNzZXN9ICR7UWZlfSAke2E/WmZlOiIifWApO2xldCBnPXtsYWJlbFN0eWxlOiIiLHNoYXBlOm0uc2hhcGUsbGFiZWw6bS5kZXNjcmlwdGlvbixjc3NDbGFzc2VzOm0uY3NzQ2xhc3Nlcyxjc3NDb21waWxlZFN0eWxlczpbXSxjc3NTdHlsZXM6bS5jc3NTdHlsZXMsaWQ6dSxkaXI6bS5kaXIsZG9tSWQ6Wk8odSx4ZiksdHlwZTptLnR5cGUsaXNHcm91cDptLnR5cGU9PT0iZ3JvdXAiLHBhZGRpbmc6OCxyeDoxMCxyeToxMCxsb29rOnN9O2lmKGcuc2hhcGU9PT1xTyYmKGcubGFiZWw9IiIpLHQmJnQuaWQhPT0icm9vdCImJihZLnRyYWNlKCJTZXR0aW5nIG5vZGUgIix1LCIgdG8gYmUgY2hpbGQgb2YgaXRzIHBhcmVudCAiLHQuaWQpLGcucGFyZW50SWQ9dC5pZCksZy5jZW50ZXJMYWJlbD0hMCxlLm5vdGUpe2xldCB5PXtsYWJlbFN0eWxlOiIiLHNoYXBlOnFmZSxsYWJlbDplLm5vdGUudGV4dCxjc3NDbGFzc2VzOktmZSxjc3NTdHlsZXM6W10sY3NzQ29tcGlsZXNTdHlsZXM6W10saWQ6dStlZGUrIi0iK3hmLGRvbUlkOlpPKHUseGYsS08pLHR5cGU6bS50eXBlLGlzR3JvdXA6bS50eXBlPT09Imdyb3VwIixwYWRkaW5nOm1lKCkuZmxvd2NoYXJ0LnBhZGRpbmcsbG9vazpzLHBvc2l0aW9uOmUubm90ZS5wb3NpdGlvbn0sdj11K1FPLHg9e2xhYmVsU3R5bGU6IiIsc2hhcGU6WWZlLGxhYmVsOmUubm90ZS50ZXh0LGNzc0NsYXNzZXM6bS5jc3NDbGFzc2VzLGNzc1N0eWxlczpbXSxpZDp1K1FPLGRvbUlkOlpPKHUseGYsak8pLHR5cGU6Imdyb3VwIixpc0dyb3VwOiEwLHBhZGRpbmc6MTYsbG9vazpzLHBvc2l0aW9uOmUubm90ZS5wb3NpdGlvbn07eGYrKyx4LmlkPXYseS5wYXJlbnRJZD12LEc2KG4seCxsKSxHNihuLHksbCksRzYobixnLGwpO2xldCBiPXUsdz15LmlkO2Uubm90ZS5wb3NpdGlvbj09PSJsZWZ0IG9mIiYmKGI9eS5pZCx3PXUpLGkucHVzaCh7aWQ6YisiLSIrdyxzdGFydDpiLGVuZDp3LGFycm93aGVhZDoibm9uZSIsYXJyb3dUeXBlRW5kOiIiLHN0eWxlOkdPLGxhYmVsU3R5bGU6IiIsY2xhc3NlczpqZmUsYXJyb3doZWFkU3R5bGU6Vk8sbGFiZWxwb3M6VU8sbGFiZWxUeXBlOkhPLHRoaWNrbmVzczpXTyxsb29rOnN9KX1lbHNlIEc2KG4sZyxsKX1lLmRvYyYmKFkudHJhY2UoIkFkZGluZyBub2RlcyBjaGlsZHJlbiAiKSxzVWUoZSxlLmRvYyxyLG4saSwhYSxzLGwpKX0sImRhdGFGZXRjaGVyIikscmRlPW8oKCk9PntWNi5jbGVhcigpLHhmPTB9LCJyZXNldCIpfSk7dmFyIEpPLGNVZSx1VWUsaWRlLGVQPU4oKCk9PnsidXNlIHN0cmljdCI7enQoKTt2dCgpO2dtKCk7WWQoKTskbSgpO2lyKCk7ejYoKTtKTz1vKCh0LGU9TzYpPT57aWYoIXQuZG9jKXJldHVybiBlO2xldCByPWU7Zm9yKGxldCBuIG9mIHQuZG9jKW4uc3RtdD09PSJkaXIiJiYocj1uLnZhbHVlKTtyZXR1cm4gcn0sImdldERpciIpLGNVZT1vKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZGIuZ2V0Q2xhc3NlcygpfSwiZ2V0Q2xhc3NlcyIpLHVVZT1vKGFzeW5jIGZ1bmN0aW9uKHQsZSxyLG4pe1kuaW5mbygiUkVGMDoiKSxZLmluZm8oIkRyYXdpbmcgc3RhdGUgZGlhZ3JhbSAodjIpIixlKTtsZXR7c2VjdXJpdHlMZXZlbDppLHN0YXRlOmEsbGF5b3V0OnN9PW1lKCk7bi5kYi5leHRyYWN0KG4uZGIuZ2V0Um9vdERvY1YyKCkpO2xldCBsPW4uZGIuZ2V0RGF0YSgpLHU9eWMoZSxpKTtsLnR5cGU9bi50eXBlLGwubGF5b3V0QWxnb3JpdGhtPXMsbC5ub2RlU3BhY2luZz1hPy5ub2RlU3BhY2luZ3x8NTAsbC5yYW5rU3BhY2luZz1hPy5yYW5rU3BhY2luZ3x8NTAsbC5tYXJrZXJzPVsiYmFyYiJdLGwuZGlhZ3JhbUlkPWUsYXdhaXQgQ2MobCx1KTtsZXQgaD04O0d0Lmluc2VydFRpdGxlKHUsInN0YXRlZGlhZ3JhbVRpdGxlVGV4dCIsYT8udGl0bGVUb3BNYXJnaW4/PzI1LG4uZGIuZ2V0RGlhZ3JhbVRpdGxlKCkpLEFjKHUsaCxSMSxhPy51c2VNYXhXaWR0aD8/ITApfSwiZHJhdyIpLGlkZT17Z2V0Q2xhc3NlczpjVWUsZHJhdzp1VWUsZ2V0RGlyOkpPfX0pO2Z1bmN0aW9uIHVkZSgpe3JldHVybiBuZXcgTWFwfXZhciB0UCxhZGUsc2RlLG9kZSxsZGUsY2RlLGhVZSxmVWUsaGRlLFU2LFFvLEg2PU4oKCk9PnsidXNlIHN0cmljdCI7enQoKTt2dCgpO2lyKCk7Z3IoKTttaSgpO25kZSgpO2VQKCk7ejYoKTt0UD0iWypdIixhZGU9InN0YXJ0IixzZGU9dFAsb2RlPSJlbmQiLGxkZT0iY29sb3IiLGNkZT0iZmlsbCIsaFVlPSJiZ0ZpbGwiLGZVZT0iLCI7byh1ZGUsIm5ld0NsYXNzZXNMaXN0Iik7aGRlPW8oKCk9Pih7cmVsYXRpb25zOltdLHN0YXRlczpuZXcgTWFwLGRvY3VtZW50czp7fX0pLCJuZXdEb2MiKSxVNj1vKHQ9PkpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodCkpLCJjbG9uZSIpLFFvPWNsYXNze3N0YXRpY3tvKHRoaXMsIlN0YXRlREIiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLmNsZWFyKCksdGhpcy52ZXJzaW9uPWUsdGhpcy5zZXRSb290RG9jPXRoaXMuc2V0Um9vdERvYy5iaW5kKHRoaXMpLHRoaXMuZ2V0RGl2aWRlcklkPXRoaXMuZ2V0RGl2aWRlcklkLmJpbmQodGhpcyksdGhpcy5zZXREaXJlY3Rpb249dGhpcy5zZXREaXJlY3Rpb24uYmluZCh0aGlzKSx0aGlzLnRyaW1Db2xvbj10aGlzLnRyaW1Db2xvbi5iaW5kKHRoaXMpfXZlcnNpb247bm9kZXM9W107ZWRnZXM9W107cm9vdERvYz1bXTtjbGFzc2VzPXVkZSgpO2RvY3VtZW50cz17cm9vdDpoZGUoKX07Y3VycmVudERvY3VtZW50PXRoaXMuZG9jdW1lbnRzLnJvb3Q7c3RhcnRFbmRDb3VudD0wO2RpdmlkZXJDbnQ9MDtzdGF0aWMgcmVsYXRpb25UeXBlPXtBR0dSRUdBVElPTjowLEVYVEVOU0lPTjoxLENPTVBPU0lUSU9OOjIsREVQRU5ERU5DWTozfTtzZXRSb290RG9jKGUpe1kuaW5mbygiU2V0dGluZyByb290IGRvYyIsZSksdGhpcy5yb290RG9jPWUsdGhpcy52ZXJzaW9uPT09MT90aGlzLmV4dHJhY3QoZSk6dGhpcy5leHRyYWN0KHRoaXMuZ2V0Um9vdERvY1YyKCkpfWdldFJvb3REb2MoKXtyZXR1cm4gdGhpcy5yb290RG9jfWRvY1RyYW5zbGF0b3IoZSxyLG4pe2lmKHIuc3RtdD09PUViKXRoaXMuZG9jVHJhbnNsYXRvcihlLHIuc3RhdGUxLCEwKSx0aGlzLmRvY1RyYW5zbGF0b3IoZSxyLnN0YXRlMiwhMSk7ZWxzZSBpZihyLnN0bXQ9PT1MMSYmKHIuaWQ9PT0iWypdIj8oci5pZD1uP2UuaWQrIl9zdGFydCI6ZS5pZCsiX2VuZCIsci5zdGFydD1uKTpyLmlkPXIuaWQudHJpbSgpKSxyLmRvYyl7bGV0IGk9W10sYT1bXSxzO2ZvcihzPTA7czxyLmRvYy5sZW5ndGg7cysrKWlmKHIuZG9jW3NdLnR5cGU9PT1QNil7bGV0IGw9VTYoci5kb2Nbc10pO2wuZG9jPVU2KGEpLGkucHVzaChsKSxhPVtdfWVsc2UgYS5wdXNoKHIuZG9jW3NdKTtpZihpLmxlbmd0aD4wJiZhLmxlbmd0aD4wKXtsZXQgbD17c3RtdDpMMSxpZDpYOSgpLHR5cGU6ImRpdmlkZXIiLGRvYzpVNihhKX07aS5wdXNoKFU2KGwpKSxyLmRvYz1pfXIuZG9jLmZvckVhY2gobD0+dGhpcy5kb2NUcmFuc2xhdG9yKHIsbCwhMCkpfX1nZXRSb290RG9jVjIoKXtyZXR1cm4gdGhpcy5kb2NUcmFuc2xhdG9yKHtpZDoicm9vdCJ9LHtpZDoicm9vdCIsZG9jOnRoaXMucm9vdERvY30sITApLHtpZDoicm9vdCIsZG9jOnRoaXMucm9vdERvY319ZXh0cmFjdChlKXtsZXQgcjtlLmRvYz9yPWUuZG9jOnI9ZSxZLmluZm8ociksdGhpcy5jbGVhcighMCksWS5pbmZvKCJFeHRyYWN0IGluaXRpYWwgZG9jdW1lbnQ6IixyKSxyLmZvckVhY2gocz0+e3N3aXRjaChZLndhcm4oIlN0YXRlbWVudCIscy5zdG10KSxzLnN0bXQpe2Nhc2UgTDE6dGhpcy5hZGRTdGF0ZShzLmlkLnRyaW0oKSxzLnR5cGUscy5kb2Mscy5kZXNjcmlwdGlvbixzLm5vdGUscy5jbGFzc2VzLHMuc3R5bGVzLHMudGV4dFN0eWxlcyk7YnJlYWs7Y2FzZSBFYjp0aGlzLmFkZFJlbGF0aW9uKHMuc3RhdGUxLHMuc3RhdGUyLHMuZGVzY3JpcHRpb24pO2JyZWFrO2Nhc2UgR2ZlOnRoaXMuYWRkU3R5bGVDbGFzcyhzLmlkLnRyaW0oKSxzLmNsYXNzZXMpO2JyZWFrO2Nhc2UgVmZlOntsZXQgbD1zLmlkLnRyaW0oKS5zcGxpdCgiLCIpLHU9cy5zdHlsZUNsYXNzLnNwbGl0KCIsIik7bC5mb3JFYWNoKGg9PntsZXQgZj10aGlzLmdldFN0YXRlKGgpO2lmKGY9PT12b2lkIDApe2xldCBkPWgudHJpbSgpO3RoaXMuYWRkU3RhdGUoZCksZj10aGlzLmdldFN0YXRlKGQpfWYuc3R5bGVzPXUubWFwKGQ9PmQucmVwbGFjZSgvOy9nLCIiKT8udHJpbSgpKX0pfWJyZWFrO2Nhc2UgVWZlOnRoaXMuc2V0Q3NzQ2xhc3Mocy5pZC50cmltKCkscy5zdHlsZUNsYXNzKTticmVha319KTtsZXQgbj10aGlzLmdldFN0YXRlcygpLGE9bWUoKS5sb29rO3JkZSgpLE4xKHZvaWQgMCx0aGlzLmdldFJvb3REb2NWMigpLG4sdGhpcy5ub2Rlcyx0aGlzLmVkZ2VzLCEwLGEsdGhpcy5jbGFzc2VzKSx0aGlzLm5vZGVzLmZvckVhY2gocz0+e2lmKEFycmF5LmlzQXJyYXkocy5sYWJlbCkpe2lmKHMuZGVzY3JpcHRpb249cy5sYWJlbC5zbGljZSgxKSxzLmlzR3JvdXAmJnMuZGVzY3JpcHRpb24ubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKCJHcm91cCBub2RlcyBjYW4gb25seSBoYXZlIGxhYmVsLiBSZW1vdmUgdGhlIGFkZGl0aW9uYWwgZGVzY3JpcHRpb24gZm9yIG5vZGUgWyIrcy5pZCsiXSIpO3MubGFiZWw9cy5sYWJlbFswXX19KX1hZGRTdGF0ZShlLHI9UnAsbj1udWxsLGk9bnVsbCxhPW51bGwscz1udWxsLGw9bnVsbCx1PW51bGwpe2xldCBoPWU/LnRyaW0oKTtpZih0aGlzLmN1cnJlbnREb2N1bWVudC5zdGF0ZXMuaGFzKGgpPyh0aGlzLmN1cnJlbnREb2N1bWVudC5zdGF0ZXMuZ2V0KGgpLmRvY3x8KHRoaXMuY3VycmVudERvY3VtZW50LnN0YXRlcy5nZXQoaCkuZG9jPW4pLHRoaXMuY3VycmVudERvY3VtZW50LnN0YXRlcy5nZXQoaCkudHlwZXx8KHRoaXMuY3VycmVudERvY3VtZW50LnN0YXRlcy5nZXQoaCkudHlwZT1yKSk6KFkuaW5mbygiQWRkaW5nIHN0YXRlICIsaCxpKSx0aGlzLmN1cnJlbnREb2N1bWVudC5zdGF0ZXMuc2V0KGgse2lkOmgsZGVzY3JpcHRpb25zOltdLHR5cGU6cixkb2M6bixub3RlOmEsY2xhc3NlczpbXSxzdHlsZXM6W10sdGV4dFN0eWxlczpbXX0pKSxpJiYoWS5pbmZvKCJTZXR0aW5nIHN0YXRlIGRlc2NyaXB0aW9uIixoLGkpLHR5cGVvZiBpPT0ic3RyaW5nIiYmdGhpcy5hZGREZXNjcmlwdGlvbihoLGkudHJpbSgpKSx0eXBlb2YgaT09Im9iamVjdCImJmkuZm9yRWFjaChmPT50aGlzLmFkZERlc2NyaXB0aW9uKGgsZi50cmltKCkpKSksYSl7bGV0IGY9dGhpcy5jdXJyZW50RG9jdW1lbnQuc3RhdGVzLmdldChoKTtmLm5vdGU9YSxmLm5vdGUudGV4dD1aZS5zYW5pdGl6ZVRleHQoZi5ub3RlLnRleHQsbWUoKSl9cyYmKFkuaW5mbygiU2V0dGluZyBzdGF0ZSBjbGFzc2VzIixoLHMpLCh0eXBlb2Ygcz09InN0cmluZyI/W3NdOnMpLmZvckVhY2goZD0+dGhpcy5zZXRDc3NDbGFzcyhoLGQudHJpbSgpKSkpLGwmJihZLmluZm8oIlNldHRpbmcgc3RhdGUgc3R5bGVzIixoLGwpLCh0eXBlb2YgbD09InN0cmluZyI/W2xdOmwpLmZvckVhY2goZD0+dGhpcy5zZXRTdHlsZShoLGQudHJpbSgpKSkpLHUmJihZLmluZm8oIlNldHRpbmcgc3RhdGUgc3R5bGVzIixoLGwpLCh0eXBlb2YgdT09InN0cmluZyI/W3VdOnUpLmZvckVhY2goZD0+dGhpcy5zZXRUZXh0U3R5bGUoaCxkLnRyaW0oKSkpKX1jbGVhcihlKXt0aGlzLm5vZGVzPVtdLHRoaXMuZWRnZXM9W10sdGhpcy5kb2N1bWVudHM9e3Jvb3Q6aGRlKCl9LHRoaXMuY3VycmVudERvY3VtZW50PXRoaXMuZG9jdW1lbnRzLnJvb3QsdGhpcy5zdGFydEVuZENvdW50PTAsdGhpcy5jbGFzc2VzPXVkZSgpLGV8fEFyKCl9Z2V0U3RhdGUoZSl7cmV0dXJuIHRoaXMuY3VycmVudERvY3VtZW50LnN0YXRlcy5nZXQoZSl9Z2V0U3RhdGVzKCl7cmV0dXJuIHRoaXMuY3VycmVudERvY3VtZW50LnN0YXRlc31sb2dEb2N1bWVudHMoKXtZLmluZm8oIkRvY3VtZW50cyA9ICIsdGhpcy5kb2N1bWVudHMpfWdldFJlbGF0aW9ucygpe3JldHVybiB0aGlzLmN1cnJlbnREb2N1bWVudC5yZWxhdGlvbnN9c3RhcnRJZElmTmVlZGVkKGU9IiIpe2xldCByPWU7cmV0dXJuIGU9PT10UCYmKHRoaXMuc3RhcnRFbmRDb3VudCsrLHI9YCR7YWRlfSR7dGhpcy5zdGFydEVuZENvdW50fWApLHJ9c3RhcnRUeXBlSWZOZWVkZWQoZT0iIixyPVJwKXtyZXR1cm4gZT09PXRQP2FkZTpyfWVuZElkSWZOZWVkZWQoZT0iIil7bGV0IHI9ZTtyZXR1cm4gZT09PXNkZSYmKHRoaXMuc3RhcnRFbmRDb3VudCsrLHI9YCR7b2RlfSR7dGhpcy5zdGFydEVuZENvdW50fWApLHJ9ZW5kVHlwZUlmTmVlZGVkKGU9IiIscj1ScCl7cmV0dXJuIGU9PT1zZGU/b2RlOnJ9YWRkUmVsYXRpb25PYmpzKGUscixuKXtsZXQgaT10aGlzLnN0YXJ0SWRJZk5lZWRlZChlLmlkLnRyaW0oKSksYT10aGlzLnN0YXJ0VHlwZUlmTmVlZGVkKGUuaWQudHJpbSgpLGUudHlwZSkscz10aGlzLnN0YXJ0SWRJZk5lZWRlZChyLmlkLnRyaW0oKSksbD10aGlzLnN0YXJ0VHlwZUlmTmVlZGVkKHIuaWQudHJpbSgpLHIudHlwZSk7dGhpcy5hZGRTdGF0ZShpLGEsZS5kb2MsZS5kZXNjcmlwdGlvbixlLm5vdGUsZS5jbGFzc2VzLGUuc3R5bGVzLGUudGV4dFN0eWxlcyksdGhpcy5hZGRTdGF0ZShzLGwsci5kb2Msci5kZXNjcmlwdGlvbixyLm5vdGUsci5jbGFzc2VzLHIuc3R5bGVzLHIudGV4dFN0eWxlcyksdGhpcy5jdXJyZW50RG9jdW1lbnQucmVsYXRpb25zLnB1c2goe2lkMTppLGlkMjpzLHJlbGF0aW9uVGl0bGU6WmUuc2FuaXRpemVUZXh0KG4sbWUoKSl9KX1hZGRSZWxhdGlvbihlLHIsbil7aWYodHlwZW9mIGU9PSJvYmplY3QiKXRoaXMuYWRkUmVsYXRpb25PYmpzKGUscixuKTtlbHNle2xldCBpPXRoaXMuc3RhcnRJZElmTmVlZGVkKGUudHJpbSgpKSxhPXRoaXMuc3RhcnRUeXBlSWZOZWVkZWQoZSkscz10aGlzLmVuZElkSWZOZWVkZWQoci50cmltKCkpLGw9dGhpcy5lbmRUeXBlSWZOZWVkZWQocik7dGhpcy5hZGRTdGF0ZShpLGEpLHRoaXMuYWRkU3RhdGUocyxsKSx0aGlzLmN1cnJlbnREb2N1bWVudC5yZWxhdGlvbnMucHVzaCh7aWQxOmksaWQyOnMsdGl0bGU6WmUuc2FuaXRpemVUZXh0KG4sbWUoKSl9KX19YWRkRGVzY3JpcHRpb24oZSxyKXtsZXQgbj10aGlzLmN1cnJlbnREb2N1bWVudC5zdGF0ZXMuZ2V0KGUpLGk9ci5zdGFydHNXaXRoKCI6Iik/ci5yZXBsYWNlKCI6IiwiIikudHJpbSgpOnI7bi5kZXNjcmlwdGlvbnMucHVzaChaZS5zYW5pdGl6ZVRleHQoaSxtZSgpKSl9Y2xlYW51cExhYmVsKGUpe3JldHVybiBlLnN1YnN0cmluZygwLDEpPT09IjoiP2Uuc3Vic3RyKDIpLnRyaW0oKTplLnRyaW0oKX1nZXREaXZpZGVySWQoKXtyZXR1cm4gdGhpcy5kaXZpZGVyQ250KyssImRpdmlkZXItaWQtIit0aGlzLmRpdmlkZXJDbnR9YWRkU3R5bGVDbGFzcyhlLHI9IiIpe3RoaXMuY2xhc3Nlcy5oYXMoZSl8fHRoaXMuY2xhc3Nlcy5zZXQoZSx7aWQ6ZSxzdHlsZXM6W10sdGV4dFN0eWxlczpbXX0pO2xldCBuPXRoaXMuY2xhc3Nlcy5nZXQoZSk7cj8uc3BsaXQoZlVlKS5mb3JFYWNoKGk9PntsZXQgYT1pLnJlcGxhY2UoLyhbXjtdKik7LywiJDEiKS50cmltKCk7aWYoUmVnRXhwKGxkZSkuZXhlYyhpKSl7bGV0IGw9YS5yZXBsYWNlKGNkZSxoVWUpLnJlcGxhY2UobGRlLGNkZSk7bi50ZXh0U3R5bGVzLnB1c2gobCl9bi5zdHlsZXMucHVzaChhKX0pfWdldENsYXNzZXMoKXtyZXR1cm4gdGhpcy5jbGFzc2VzfXNldENzc0NsYXNzKGUscil7ZS5zcGxpdCgiLCIpLmZvckVhY2gobj0+e2xldCBpPXRoaXMuZ2V0U3RhdGUobik7aWYoaT09PXZvaWQgMCl7bGV0IGE9bi50cmltKCk7dGhpcy5hZGRTdGF0ZShhKSxpPXRoaXMuZ2V0U3RhdGUoYSl9aS5jbGFzc2VzLnB1c2gocil9KX1zZXRTdHlsZShlLHIpe2xldCBuPXRoaXMuZ2V0U3RhdGUoZSk7biE9PXZvaWQgMCYmbi5zdHlsZXMucHVzaChyKX1zZXRUZXh0U3R5bGUoZSxyKXtsZXQgbj10aGlzLmdldFN0YXRlKGUpO24hPT12b2lkIDAmJm4udGV4dFN0eWxlcy5wdXNoKHIpfWdldERpcmVjdGlvblN0YXRlbWVudCgpe3JldHVybiB0aGlzLnJvb3REb2MuZmluZChlPT5lLnN0bXQ9PT16Tyl9Z2V0RGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0RGlyZWN0aW9uU3RhdGVtZW50KCk/LnZhbHVlPz96ZmV9c2V0RGlyZWN0aW9uKGUpe2xldCByPXRoaXMuZ2V0RGlyZWN0aW9uU3RhdGVtZW50KCk7cj9yLnZhbHVlPWU6dGhpcy5yb290RG9jLnVuc2hpZnQoe3N0bXQ6ek8sdmFsdWU6ZX0pfXRyaW1Db2xvbihlKXtyZXR1cm4gZSYmZVswXT09PSI6Ij9lLnN1YnN0cigxKS50cmltKCk6ZS50cmltKCl9Z2V0RGF0YSgpe2xldCBlPW1lKCk7cmV0dXJue25vZGVzOnRoaXMubm9kZXMsZWRnZXM6dGhpcy5lZGdlcyxvdGhlcjp7fSxjb25maWc6ZSxkaXJlY3Rpb246Sk8odGhpcy5nZXRSb290RG9jVjIoKSl9fWdldENvbmZpZygpe3JldHVybiBtZSgpLnN0YXRlfWdldEFjY1RpdGxlPVJyO3NldEFjY1RpdGxlPUxyO2dldEFjY0Rlc2NyaXB0aW9uPU1yO3NldEFjY0Rlc2NyaXB0aW9uPU5yO3NldERpYWdyYW1UaXRsZT0kcjtnZXREaWFncmFtVGl0bGU9SXJ9fSk7dmFyIGRVZSxXNixyUD1OKCgpPT57InVzZSBzdHJpY3QiO2RVZT1vKHQ9PmAKZGVmcyAjc3RhdGVkaWFncmFtLWJhcmJFbmQgewogICAgZmlsbDogJHt0LnRyYW5zaXRpb25Db2xvcn07CiAgICBzdHJva2U6ICR7dC50cmFuc2l0aW9uQ29sb3J9OwogIH0KZy5zdGF0ZUdyb3VwIHRleHQgewogIGZpbGw6ICR7dC5ub2RlQm9yZGVyfTsKICBzdHJva2U6IG5vbmU7CiAgZm9udC1zaXplOiAxMHB4Owp9Cmcuc3RhdGVHcm91cCB0ZXh0IHsKICBmaWxsOiAke3QudGV4dENvbG9yfTsKICBzdHJva2U6IG5vbmU7CiAgZm9udC1zaXplOiAxMHB4OwoKfQpnLnN0YXRlR3JvdXAgLnN0YXRlLXRpdGxlIHsKICBmb250LXdlaWdodDogYm9sZGVyOwogIGZpbGw6ICR7dC5zdGF0ZUxhYmVsQ29sb3J9Owp9CgpnLnN0YXRlR3JvdXAgcmVjdCB7CiAgZmlsbDogJHt0Lm1haW5Ca2d9OwogIHN0cm9rZTogJHt0Lm5vZGVCb3JkZXJ9Owp9CgpnLnN0YXRlR3JvdXAgbGluZSB7CiAgc3Ryb2tlOiAke3QubGluZUNvbG9yfTsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCi50cmFuc2l0aW9uIHsKICBzdHJva2U6ICR7dC50cmFuc2l0aW9uQ29sb3J9OwogIHN0cm9rZS13aWR0aDogMTsKICBmaWxsOiBub25lOwp9Cgouc3RhdGVHcm91cCAuY29tcG9zaXQgewogIGZpbGw6ICR7dC5iYWNrZ3JvdW5kfTsKICBib3JkZXItYm90dG9tOiAxcHgKfQoKLnN0YXRlR3JvdXAgLmFsdC1jb21wb3NpdCB7CiAgZmlsbDogI2UwZTBlMDsKICBib3JkZXItYm90dG9tOiAxcHgKfQoKLnN0YXRlLW5vdGUgewogIHN0cm9rZTogJHt0Lm5vdGVCb3JkZXJDb2xvcn07CiAgZmlsbDogJHt0Lm5vdGVCa2dDb2xvcn07CgogIHRleHQgewogICAgZmlsbDogJHt0Lm5vdGVUZXh0Q29sb3J9OwogICAgc3Ryb2tlOiBub25lOwogICAgZm9udC1zaXplOiAxMHB4OwogIH0KfQoKLnN0YXRlTGFiZWwgLmJveCB7CiAgc3Ryb2tlOiBub25lOwogIHN0cm9rZS13aWR0aDogMDsKICBmaWxsOiAke3QubWFpbkJrZ307CiAgb3BhY2l0eTogMC41Owp9CgouZWRnZUxhYmVsIC5sYWJlbCByZWN0IHsKICBmaWxsOiAke3QubGFiZWxCYWNrZ3JvdW5kQ29sb3J9OwogIG9wYWNpdHk6IDAuNTsKfQouZWRnZUxhYmVsIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAke3QuZWRnZUxhYmVsQmFja2dyb3VuZH07CiAgcCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3QuZWRnZUxhYmVsQmFja2dyb3VuZH07CiAgfQogIHJlY3QgewogICAgb3BhY2l0eTogMC41OwogICAgYmFja2dyb3VuZC1jb2xvcjogJHt0LmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgZmlsbDogJHt0LmVkZ2VMYWJlbEJhY2tncm91bmR9OwogIH0KICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KLmVkZ2VMYWJlbCAubGFiZWwgdGV4dCB7CiAgZmlsbDogJHt0LnRyYW5zaXRpb25MYWJlbENvbG9yfHx0LnRlcnRpYXJ5VGV4dENvbG9yfTsKfQoubGFiZWwgZGl2IC5lZGdlTGFiZWwgewogIGNvbG9yOiAke3QudHJhbnNpdGlvbkxhYmVsQ29sb3J8fHQudGVydGlhcnlUZXh0Q29sb3J9Owp9Cgouc3RhdGVMYWJlbCB0ZXh0IHsKICBmaWxsOiAke3Quc3RhdGVMYWJlbENvbG9yfTsKICBmb250LXNpemU6IDEwcHg7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCi5ub2RlIGNpcmNsZS5zdGF0ZS1zdGFydCB7CiAgZmlsbDogJHt0LnNwZWNpYWxTdGF0ZUNvbG9yfTsKICBzdHJva2U6ICR7dC5zcGVjaWFsU3RhdGVDb2xvcn07Cn0KCi5ub2RlIC5mb3JrLWpvaW4gewogIGZpbGw6ICR7dC5zcGVjaWFsU3RhdGVDb2xvcn07CiAgc3Ryb2tlOiAke3Quc3BlY2lhbFN0YXRlQ29sb3J9Owp9Cgoubm9kZSBjaXJjbGUuc3RhdGUtZW5kIHsKICBmaWxsOiAke3QuaW5uZXJFbmRCYWNrZ3JvdW5kfTsKICBzdHJva2U6ICR7dC5iYWNrZ3JvdW5kfTsKICBzdHJva2Utd2lkdGg6IDEuNQp9Ci5lbmQtc3RhdGUtaW5uZXIgewogIGZpbGw6ICR7dC5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0LmJhY2tncm91bmR9OwogIC8vIHN0cm9rZTogJHt0LmJhY2tncm91bmR9OwogIHN0cm9rZS13aWR0aDogMS41Cn0KCi5ub2RlIHJlY3QgewogIGZpbGw6ICR7dC5zdGF0ZUJrZ3x8dC5tYWluQmtnfTsKICBzdHJva2U6ICR7dC5zdGF0ZUJvcmRlcnx8dC5ub2RlQm9yZGVyfTsKICBzdHJva2Utd2lkdGg6IDFweDsKfQoubm9kZSBwb2x5Z29uIHsKICBmaWxsOiAke3QubWFpbkJrZ307CiAgc3Ryb2tlOiAke3Quc3RhdGVCb3JkZXJ8fHQubm9kZUJvcmRlcn07OwogIHN0cm9rZS13aWR0aDogMXB4Owp9CiNzdGF0ZWRpYWdyYW0tYmFyYkVuZCB7CiAgZmlsbDogJHt0LmxpbmVDb2xvcn07Cn0KCi5zdGF0ZWRpYWdyYW0tY2x1c3RlciByZWN0IHsKICBmaWxsOiAke3QuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kfTsKICBzdHJva2U6ICR7dC5zdGF0ZUJvcmRlcnx8dC5ub2RlQm9yZGVyfTsKICBzdHJva2Utd2lkdGg6IDFweDsKfQoKLmNsdXN0ZXItbGFiZWwsIC5ub2RlTGFiZWwgewogIGNvbG9yOiAke3Quc3RhdGVMYWJlbENvbG9yfTsKICAvLyBsaW5lLWhlaWdodDogMTsKfQoKLnN0YXRlZGlhZ3JhbS1jbHVzdGVyIHJlY3Qub3V0ZXIgewogIHJ4OiA1cHg7CiAgcnk6IDVweDsKfQouc3RhdGVkaWFncmFtLXN0YXRlIC5kaXZpZGVyIHsKICBzdHJva2U6ICR7dC5zdGF0ZUJvcmRlcnx8dC5ub2RlQm9yZGVyfTsKfQoKLnN0YXRlZGlhZ3JhbS1zdGF0ZSAudGl0bGUtc3RhdGUgewogIHJ4OiA1cHg7CiAgcnk6IDVweDsKfQouc3RhdGVkaWFncmFtLWNsdXN0ZXIuc3RhdGVkaWFncmFtLWNsdXN0ZXIgLmlubmVyIHsKICBmaWxsOiAke3QuY29tcG9zaXRlQmFja2dyb3VuZHx8dC5iYWNrZ3JvdW5kfTsKfQouc3RhdGVkaWFncmFtLWNsdXN0ZXIuc3RhdGVkaWFncmFtLWNsdXN0ZXItYWx0IC5pbm5lciB7CiAgZmlsbDogJHt0LmFsdEJhY2tncm91bmQ/dC5hbHRCYWNrZ3JvdW5kOiIjZWZlZmVmIn07Cn0KCi5zdGF0ZWRpYWdyYW0tY2x1c3RlciAuaW5uZXIgewogIHJ4OjA7CiAgcnk6MDsKfQoKLnN0YXRlZGlhZ3JhbS1zdGF0ZSByZWN0LmJhc2ljIHsKICByeDogNXB4OwogIHJ5OiA1cHg7Cn0KLnN0YXRlZGlhZ3JhbS1zdGF0ZSByZWN0LmRpdmlkZXIgewogIHN0cm9rZS1kYXNoYXJyYXk6IDEwLDEwOwogIGZpbGw6ICR7dC5hbHRCYWNrZ3JvdW5kP3QuYWx0QmFja2dyb3VuZDoiI2VmZWZlZiJ9Owp9Cgoubm90ZS1lZGdlIHsKICBzdHJva2UtZGFzaGFycmF5OiA1Owp9Cgouc3RhdGVkaWFncmFtLW5vdGUgcmVjdCB7CiAgZmlsbDogJHt0Lm5vdGVCa2dDb2xvcn07CiAgc3Ryb2tlOiAke3Qubm90ZUJvcmRlckNvbG9yfTsKICBzdHJva2Utd2lkdGg6IDFweDsKICByeDogMDsKICByeTogMDsKfQouc3RhdGVkaWFncmFtLW5vdGUgcmVjdCB7CiAgZmlsbDogJHt0Lm5vdGVCa2dDb2xvcn07CiAgc3Ryb2tlOiAke3Qubm90ZUJvcmRlckNvbG9yfTsKICBzdHJva2Utd2lkdGg6IDFweDsKICByeDogMDsKICByeTogMDsKfQoKLnN0YXRlZGlhZ3JhbS1ub3RlIHRleHQgewogIGZpbGw6ICR7dC5ub3RlVGV4dENvbG9yfTsKfQoKLnN0YXRlZGlhZ3JhbS1ub3RlIC5ub2RlTGFiZWwgewogIGNvbG9yOiAke3Qubm90ZVRleHRDb2xvcn07Cn0KLnN0YXRlZGlhZ3JhbSAuZWRnZUxhYmVsIHsKICBjb2xvcjogcmVkOyAvLyAke3Qubm90ZVRleHRDb2xvcn07Cn0KCiNkZXBlbmRlbmN5U3RhcnQsICNkZXBlbmRlbmN5RW5kIHsKICBmaWxsOiAke3QubGluZUNvbG9yfTsKICBzdHJva2U6ICR7dC5saW5lQ29sb3J9OwogIHN0cm9rZS13aWR0aDogMTsKfQoKLnN0YXRlZGlhZ3JhbVRpdGxlVGV4dCB7CiAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICBmb250LXNpemU6IDE4cHg7CiAgZmlsbDogJHt0LnRleHRDb2xvcn07Cn0KYCwiZ2V0U3R5bGVzIiksVzY9ZFVlfSk7dmFyIG5QLHBVZSxtVWUsZmRlLGdVZSxkZGUscGRlPU4oKCk9PnsidXNlIHN0cmljdCI7blA9e30scFVlPW8oKHQsZSk9PntuUFt0XT1lfSwic2V0IiksbVVlPW8odD0+blBbdF0sImdldCIpLGZkZT1vKCgpPT5PYmplY3Qua2V5cyhuUCksImtleXMiKSxnVWU9bygoKT0+ZmRlKCkubGVuZ3RoLCJzaXplIiksZGRlPXtnZXQ6bVVlLHNldDpwVWUsa2V5czpmZGUsc2l6ZTpnVWV9fSk7dmFyIHlVZSx2VWUseFVlLGJVZSxnZGUsd1VlLFRVZSxrVWUsRVVlLGlQLG1kZSx5ZGUsdmRlPU4oKCk9PnsidXNlIHN0cmljdCI7ZHIoKTtwZGUoKTtINigpO2lyKCk7Z3IoKTt6dCgpO3Z0KCk7eVVlPW8odD0+dC5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImNsYXNzIiwic3RhcnQtc3RhdGUiKS5hdHRyKCJyIixtZSgpLnN0YXRlLnNpemVVbml0KS5hdHRyKCJjeCIsbWUoKS5zdGF0ZS5wYWRkaW5nK21lKCkuc3RhdGUuc2l6ZVVuaXQpLmF0dHIoImN5IixtZSgpLnN0YXRlLnBhZGRpbmcrbWUoKS5zdGF0ZS5zaXplVW5pdCksImRyYXdTdGFydFN0YXRlIiksdlVlPW8odD0+dC5hcHBlbmQoImxpbmUiKS5zdHlsZSgic3Ryb2tlIiwiZ3JleSIpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMyIpLmF0dHIoIngxIixtZSgpLnN0YXRlLnRleHRIZWlnaHQpLmF0dHIoImNsYXNzIiwiZGl2aWRlciIpLmF0dHIoIngyIixtZSgpLnN0YXRlLnRleHRIZWlnaHQqMikuYXR0cigieTEiLDApLmF0dHIoInkyIiwwKSwiZHJhd0RpdmlkZXIiKSx4VWU9bygodCxlKT0+e2xldCByPXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMiptZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInkiLG1lKCkuc3RhdGUudGV4dEhlaWdodCsyKm1lKCkuc3RhdGUucGFkZGluZykuYXR0cigiZm9udC1zaXplIixtZSgpLnN0YXRlLmZvbnRTaXplKS5hdHRyKCJjbGFzcyIsInN0YXRlLXRpdGxlIikudGV4dChlLmlkKSxuPXIubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gdC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ4IixtZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInkiLG1lKCkuc3RhdGUucGFkZGluZykuYXR0cigid2lkdGgiLG4ud2lkdGgrMiptZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoImhlaWdodCIsbi5oZWlnaHQrMiptZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInJ4IixtZSgpLnN0YXRlLnJhZGl1cykscn0sImRyYXdTaW1wbGVTdGF0ZSIpLGJVZT1vKCh0LGUpPT57bGV0IHI9byhmdW5jdGlvbihwLG0sZyl7bGV0IHk9cC5hcHBlbmQoInRzcGFuIikuYXR0cigieCIsMiptZSgpLnN0YXRlLnBhZGRpbmcpLnRleHQobSk7Z3x8eS5hdHRyKCJkeSIsbWUoKS5zdGF0ZS50ZXh0SGVpZ2h0KX0sImFkZFRzcGFuIiksaT10LmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDIqbWUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5IixtZSgpLnN0YXRlLnRleHRIZWlnaHQrMS4zKm1lKCkuc3RhdGUucGFkZGluZykuYXR0cigiZm9udC1zaXplIixtZSgpLnN0YXRlLmZvbnRTaXplKS5hdHRyKCJjbGFzcyIsInN0YXRlLXRpdGxlIikudGV4dChlLmRlc2NyaXB0aW9uc1swXSkubm9kZSgpLmdldEJCb3goKSxhPWkuaGVpZ2h0LHM9dC5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixtZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInkiLGErbWUoKS5zdGF0ZS5wYWRkaW5nKi40K21lKCkuc3RhdGUuZGl2aWRlck1hcmdpbittZSgpLnN0YXRlLnRleHRIZWlnaHQpLmF0dHIoImNsYXNzIiwic3RhdGUtZGVzY3JpcHRpb24iKSxsPSEwLHU9ITA7ZS5kZXNjcmlwdGlvbnMuZm9yRWFjaChmdW5jdGlvbihwKXtsfHwocihzLHAsdSksdT0hMSksbD0hMX0pO2xldCBoPXQuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLG1lKCkuc3RhdGUucGFkZGluZykuYXR0cigieTEiLG1lKCkuc3RhdGUucGFkZGluZythK21lKCkuc3RhdGUuZGl2aWRlck1hcmdpbi8yKS5hdHRyKCJ5MiIsbWUoKS5zdGF0ZS5wYWRkaW5nK2ErbWUoKS5zdGF0ZS5kaXZpZGVyTWFyZ2luLzIpLmF0dHIoImNsYXNzIiwiZGVzY3ItZGl2aWRlciIpLGY9cy5ub2RlKCkuZ2V0QkJveCgpLGQ9TWF0aC5tYXgoZi53aWR0aCxpLndpZHRoKTtyZXR1cm4gaC5hdHRyKCJ4MiIsZCszKm1lKCkuc3RhdGUucGFkZGluZyksdC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ4IixtZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInkiLG1lKCkuc3RhdGUucGFkZGluZykuYXR0cigid2lkdGgiLGQrMiptZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoImhlaWdodCIsZi5oZWlnaHQrYSsyKm1lKCkuc3RhdGUucGFkZGluZykuYXR0cigicngiLG1lKCkuc3RhdGUucmFkaXVzKSx0fSwiZHJhd0Rlc2NyU3RhdGUiKSxnZGU9bygodCxlLHIpPT57bGV0IG49bWUoKS5zdGF0ZS5wYWRkaW5nLGk9MiptZSgpLnN0YXRlLnBhZGRpbmcsYT10Lm5vZGUoKS5nZXRCQm94KCkscz1hLndpZHRoLGw9YS54LHU9dC5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IixtZSgpLnN0YXRlLnRpdGxlU2hpZnQpLmF0dHIoImZvbnQtc2l6ZSIsbWUoKS5zdGF0ZS5mb250U2l6ZSkuYXR0cigiY2xhc3MiLCJzdGF0ZS10aXRsZSIpLnRleHQoZS5pZCksZj11Lm5vZGUoKS5nZXRCQm94KCkud2lkdGgraSxkPU1hdGgubWF4KGYscyk7ZD09PXMmJihkPWQraSk7bGV0IHAsbT10Lm5vZGUoKS5nZXRCQm94KCk7ZS5kb2MscD1sLW4sZj5zJiYocD0ocy1kKS8yK24pLE1hdGguYWJzKGwtbS54KTxuJiZmPnMmJihwPWwtKGYtcykvMik7bGV0IGc9MS1tZSgpLnN0YXRlLnRleHRIZWlnaHQ7cmV0dXJuIHQuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIscCkuYXR0cigieSIsZykuYXR0cigiY2xhc3MiLHI/ImFsdC1jb21wb3NpdCI6ImNvbXBvc2l0IikuYXR0cigid2lkdGgiLGQpLmF0dHIoImhlaWdodCIsbS5oZWlnaHQrbWUoKS5zdGF0ZS50ZXh0SGVpZ2h0K21lKCkuc3RhdGUudGl0bGVTaGlmdCsxKS5hdHRyKCJyeCIsIjAiKSx1LmF0dHIoIngiLHArbiksZjw9cyYmdS5hdHRyKCJ4IixsKyhkLWkpLzItZi8yK24pLHQuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIscCkuYXR0cigieSIsbWUoKS5zdGF0ZS50aXRsZVNoaWZ0LW1lKCkuc3RhdGUudGV4dEhlaWdodC1tZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoIndpZHRoIixkKS5hdHRyKCJoZWlnaHQiLG1lKCkuc3RhdGUudGV4dEhlaWdodCozKS5hdHRyKCJyeCIsbWUoKS5zdGF0ZS5yYWRpdXMpLHQuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIscCkuYXR0cigieSIsbWUoKS5zdGF0ZS50aXRsZVNoaWZ0LW1lKCkuc3RhdGUudGV4dEhlaWdodC1tZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoIndpZHRoIixkKS5hdHRyKCJoZWlnaHQiLG0uaGVpZ2h0KzMrMiptZSgpLnN0YXRlLnRleHRIZWlnaHQpLmF0dHIoInJ4IixtZSgpLnN0YXRlLnJhZGl1cyksdH0sImFkZFRpdGxlQW5kQm94Iiksd1VlPW8odD0+KHQuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjbGFzcyIsImVuZC1zdGF0ZS1vdXRlciIpLmF0dHIoInIiLG1lKCkuc3RhdGUuc2l6ZVVuaXQrbWUoKS5zdGF0ZS5taW5pUGFkZGluZykuYXR0cigiY3giLG1lKCkuc3RhdGUucGFkZGluZyttZSgpLnN0YXRlLnNpemVVbml0K21lKCkuc3RhdGUubWluaVBhZGRpbmcpLmF0dHIoImN5IixtZSgpLnN0YXRlLnBhZGRpbmcrbWUoKS5zdGF0ZS5zaXplVW5pdCttZSgpLnN0YXRlLm1pbmlQYWRkaW5nKSx0LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY2xhc3MiLCJlbmQtc3RhdGUtaW5uZXIiKS5hdHRyKCJyIixtZSgpLnN0YXRlLnNpemVVbml0KS5hdHRyKCJjeCIsbWUoKS5zdGF0ZS5wYWRkaW5nK21lKCkuc3RhdGUuc2l6ZVVuaXQrMikuYXR0cigiY3kiLG1lKCkuc3RhdGUucGFkZGluZyttZSgpLnN0YXRlLnNpemVVbml0KzIpKSwiZHJhd0VuZFN0YXRlIiksVFVlPW8oKHQsZSk9PntsZXQgcj1tZSgpLnN0YXRlLmZvcmtXaWR0aCxuPW1lKCkuc3RhdGUuZm9ya0hlaWdodDtpZihlLnBhcmVudElkKXtsZXQgaT1yO3I9bixuPWl9cmV0dXJuIHQuYXBwZW5kKCJyZWN0Iikuc3R5bGUoInN0cm9rZSIsImJsYWNrIikuc3R5bGUoImZpbGwiLCJibGFjayIpLmF0dHIoIndpZHRoIixyKS5hdHRyKCJoZWlnaHQiLG4pLmF0dHIoIngiLG1lKCkuc3RhdGUucGFkZGluZykuYXR0cigieSIsbWUoKS5zdGF0ZS5wYWRkaW5nKX0sImRyYXdGb3JrSm9pblN0YXRlIiksa1VlPW8oKHQsZSxyLG4pPT57bGV0IGk9MCxhPW4uYXBwZW5kKCJ0ZXh0Iik7YS5zdHlsZSgidGV4dC1hbmNob3IiLCJzdGFydCIpLGEuYXR0cigiY2xhc3MiLCJub3RlVGV4dCIpO2xldCBzPXQucmVwbGFjZSgvXHJcbi9nLCI8YnIvPiIpO3M9cy5yZXBsYWNlKC9cbi9nLCI8YnIvPiIpO2xldCBsPXMuc3BsaXQoWmUubGluZUJyZWFrUmVnZXgpLHU9MS4yNSptZSgpLnN0YXRlLm5vdGVNYXJnaW47Zm9yKGxldCBoIG9mIGwpe2xldCBmPWgudHJpbSgpO2lmKGYubGVuZ3RoPjApe2xldCBkPWEuYXBwZW5kKCJ0c3BhbiIpO2lmKGQudGV4dChmKSx1PT09MCl7bGV0IHA9ZC5ub2RlKCkuZ2V0QkJveCgpO3UrPXAuaGVpZ2h0fWkrPXUsZC5hdHRyKCJ4IixlK21lKCkuc3RhdGUubm90ZU1hcmdpbiksZC5hdHRyKCJ5IixyK2krMS4yNSptZSgpLnN0YXRlLm5vdGVNYXJnaW4pfX1yZXR1cm57dGV4dFdpZHRoOmEubm9kZSgpLmdldEJCb3goKS53aWR0aCx0ZXh0SGVpZ2h0Oml9fSwiX2RyYXdMb25nVGV4dCIpLEVVZT1vKCh0LGUpPT57ZS5hdHRyKCJjbGFzcyIsInN0YXRlLW5vdGUiKTtsZXQgcj1lLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLDApLmF0dHIoInkiLG1lKCkuc3RhdGUucGFkZGluZyksbj1lLmFwcGVuZCgiZyIpLHt0ZXh0V2lkdGg6aSx0ZXh0SGVpZ2h0OmF9PWtVZSh0LDAsMCxuKTtyZXR1cm4gci5hdHRyKCJoZWlnaHQiLGErMiptZSgpLnN0YXRlLm5vdGVNYXJnaW4pLHIuYXR0cigid2lkdGgiLGkrbWUoKS5zdGF0ZS5ub3RlTWFyZ2luKjIpLHJ9LCJkcmF3Tm90ZSIpLGlQPW8oZnVuY3Rpb24odCxlKXtsZXQgcj1lLmlkLG49e2lkOnIsbGFiZWw6ZS5pZCx3aWR0aDowLGhlaWdodDowfSxpPXQuYXBwZW5kKCJnIikuYXR0cigiaWQiLHIpLmF0dHIoImNsYXNzIiwic3RhdGVHcm91cCIpO2UudHlwZT09PSJzdGFydCImJnlVZShpKSxlLnR5cGU9PT0iZW5kIiYmd1VlKGkpLChlLnR5cGU9PT0iZm9yayJ8fGUudHlwZT09PSJqb2luIikmJlRVZShpLGUpLGUudHlwZT09PSJub3RlIiYmRVVlKGUubm90ZS50ZXh0LGkpLGUudHlwZT09PSJkaXZpZGVyIiYmdlVlKGkpLGUudHlwZT09PSJkZWZhdWx0IiYmZS5kZXNjcmlwdGlvbnMubGVuZ3RoPT09MCYmeFVlKGksZSksZS50eXBlPT09ImRlZmF1bHQiJiZlLmRlc2NyaXB0aW9ucy5sZW5ndGg+MCYmYlVlKGksZSk7bGV0IGE9aS5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiBuLndpZHRoPWEud2lkdGgrMiptZSgpLnN0YXRlLnBhZGRpbmcsbi5oZWlnaHQ9YS5oZWlnaHQrMiptZSgpLnN0YXRlLnBhZGRpbmcsZGRlLnNldChyLG4pLG59LCJkcmF3U3RhdGUiKSxtZGU9MCx5ZGU9byhmdW5jdGlvbih0LGUscil7bGV0IG49byhmdW5jdGlvbih1KXtzd2l0Y2godSl7Y2FzZSBRby5yZWxhdGlvblR5cGUuQUdHUkVHQVRJT046cmV0dXJuImFnZ3JlZ2F0aW9uIjtjYXNlIFFvLnJlbGF0aW9uVHlwZS5FWFRFTlNJT046cmV0dXJuImV4dGVuc2lvbiI7Y2FzZSBRby5yZWxhdGlvblR5cGUuQ09NUE9TSVRJT046cmV0dXJuImNvbXBvc2l0aW9uIjtjYXNlIFFvLnJlbGF0aW9uVHlwZS5ERVBFTkRFTkNZOnJldHVybiJkZXBlbmRlbmN5In19LCJnZXRSZWxhdGlvblR5cGUiKTtlLnBvaW50cz1lLnBvaW50cy5maWx0ZXIodT0+IU51bWJlci5pc05hTih1LnkpKTtsZXQgaT1lLnBvaW50cyxhPXdsKCkueChmdW5jdGlvbih1KXtyZXR1cm4gdS54fSkueShmdW5jdGlvbih1KXtyZXR1cm4gdS55fSkuY3VydmUoRG8pLHM9dC5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixhKGkpKS5hdHRyKCJpZCIsImVkZ2UiK21kZSkuYXR0cigiY2xhc3MiLCJ0cmFuc2l0aW9uIiksbD0iIjtpZihtZSgpLnN0YXRlLmFycm93TWFya2VyQWJzb2x1dGUmJihsPXdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCsiLy8iK3dpbmRvdy5sb2NhdGlvbi5ob3N0K3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSt3aW5kb3cubG9jYXRpb24uc2VhcmNoLGw9bC5yZXBsYWNlKC9cKC9nLCJcXCgiKSxsPWwucmVwbGFjZSgvXCkvZywiXFwpIikpLHMuYXR0cigibWFya2VyLWVuZCIsInVybCgiK2wrIiMiK24oUW8ucmVsYXRpb25UeXBlLkRFUEVOREVOQ1kpKyJFbmQpIiksci50aXRsZSE9PXZvaWQgMCl7bGV0IHU9dC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInN0YXRlTGFiZWwiKSx7eDpoLHk6Zn09R3QuY2FsY0xhYmVsUG9zaXRpb24oZS5wb2ludHMpLGQ9WmUuZ2V0Um93cyhyLnRpdGxlKSxwPTAsbT1bXSxnPTAseT0wO2ZvcihsZXQgYj0wO2I8PWQubGVuZ3RoO2IrKyl7bGV0IHc9dS5hcHBlbmQoInRleHQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQoZFtiXSkuYXR0cigieCIsaCkuYXR0cigieSIsZitwKSxDPXcubm9kZSgpLmdldEJCb3goKTtnPU1hdGgubWF4KGcsQy53aWR0aCkseT1NYXRoLm1pbih5LEMueCksWS5pbmZvKEMueCxoLGYrcCkscD09PTAmJihwPXcubm9kZSgpLmdldEJCb3goKS5oZWlnaHQsWS5pbmZvKCJUaXRsZSBoZWlnaHQiLHAsZikpLG0ucHVzaCh3KX1sZXQgdj1wKmQubGVuZ3RoO2lmKGQubGVuZ3RoPjEpe2xldCBiPShkLmxlbmd0aC0xKSpwKi41O20uZm9yRWFjaCgodyxDKT0+dy5hdHRyKCJ5IixmK0MqcC1iKSksdj1wKmQubGVuZ3RofWxldCB4PXUubm9kZSgpLmdldEJCb3goKTt1Lmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoImNsYXNzIiwiYm94IikuYXR0cigieCIsaC1nLzItbWUoKS5zdGF0ZS5wYWRkaW5nLzIpLmF0dHIoInkiLGYtdi8yLW1lKCkuc3RhdGUucGFkZGluZy8yLTMuNSkuYXR0cigid2lkdGgiLGcrbWUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLHYrbWUoKS5zdGF0ZS5wYWRkaW5nKSxZLmluZm8oeCl9bWRlKyt9LCJkcmF3RWRnZSIpfSk7dmFyIGZvLGFQLFNVZSxDVWUsQVVlLF9VZSx4ZGUsYmRlLHdkZT1OKCgpPT57InVzZSBzdHJpY3QiO2RyKCk7Z1IoKTtWbygpO3Z0KCk7Z3IoKTt2ZGUoKTt6dCgpO0VpKCk7YVA9e30sU1VlPW8oZnVuY3Rpb24oKXt9LCJzZXRDb25mIiksQ1VlPW8oZnVuY3Rpb24odCl7dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiZGVwZW5kZW5jeUVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOSw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpfSwiaW5zZXJ0TWFya2VycyIpLEFVZT1vKGZ1bmN0aW9uKHQsZSxyLG4pe2ZvPW1lKCkuc3RhdGU7bGV0IGk9bWUoKS5zZWN1cml0eUxldmVsLGE7aT09PSJzYW5kYm94IiYmKGE9R2UoIiNpIitlKSk7bGV0IHM9aT09PSJzYW5kYm94Ij9HZShhLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpOkdlKCJib2R5IiksbD1pPT09InNhbmRib3giP2Eubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQ6ZG9jdW1lbnQ7WS5kZWJ1ZygiUmVuZGVyaW5nIGRpYWdyYW0gIit0KTtsZXQgdT1zLnNlbGVjdChgW2lkPScke2V9J11gKTtDVWUodSk7bGV0IGg9bi5kYi5nZXRSb290RG9jKCk7eGRlKGgsdSx2b2lkIDAsITEscyxsLG4pO2xldCBmPWZvLnBhZGRpbmcsZD11Lm5vZGUoKS5nZXRCQm94KCkscD1kLndpZHRoK2YqMixtPWQuaGVpZ2h0K2YqMixnPXAqMS43NTt2bih1LG0sZyxmby51c2VNYXhXaWR0aCksdS5hdHRyKCJ2aWV3Qm94IixgJHtkLngtZm8ucGFkZGluZ30gICR7ZC55LWZvLnBhZGRpbmd9IGArcCsiICIrbSl9LCJkcmF3IiksX1VlPW8odD0+dD90Lmxlbmd0aCpmby5mb250U2l6ZUZhY3RvcjoxLCJnZXRMYWJlbFdpZHRoIikseGRlPW8oKHQsZSxyLG4saSxhLHMpPT57bGV0IGw9bmV3IHNuKHtjb21wb3VuZDohMCxtdWx0aWdyYXBoOiEwfSksdSxoPSEwO2Zvcih1PTA7dTx0Lmxlbmd0aDt1KyspaWYodFt1XS5zdG10PT09InJlbGF0aW9uIil7aD0hMTticmVha31yP2wuc2V0R3JhcGgoe3JhbmtkaXI6IkxSIixtdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwLHJhbmtlcjoidGlnaHQtdHJlZSIscmFua3NlcDpoPzE6Zm8uZWRnZUxlbmd0aEZhY3Rvcixub2RlU2VwOmg/MTo1MCxpc011bHRpR3JhcGg6ITB9KTpsLnNldEdyYXBoKHtyYW5rZGlyOiJUQiIsbXVsdGlncmFwaDohMCxjb21wb3VuZDohMCxyYW5rc2VwOmg/MTpmby5lZGdlTGVuZ3RoRmFjdG9yLG5vZGVTZXA6aD8xOjUwLHJhbmtlcjoidGlnaHQtdHJlZSIsaXNNdWx0aUdyYXBoOiEwfSksbC5zZXREZWZhdWx0RWRnZUxhYmVsKGZ1bmN0aW9uKCl7cmV0dXJue319KTtsZXQgZj1zLmRiLmdldFN0YXRlcygpLGQ9cy5kYi5nZXRSZWxhdGlvbnMoKSxwPU9iamVjdC5rZXlzKGYpLG09ITA7Zm9yKGxldCBiIG9mIHApe2xldCB3PWZbYl07ciYmKHcucGFyZW50SWQ9cik7bGV0IEM7aWYody5kb2Mpe2xldCBUPWUuYXBwZW5kKCJnIikuYXR0cigiaWQiLHcuaWQpLmF0dHIoImNsYXNzIiwic3RhdGVHcm91cCIpO2lmKEM9eGRlKHcuZG9jLFQsdy5pZCwhbixpLGEscyksbSl7VD1nZGUoVCx3LG4pO2xldCBFPVQubm9kZSgpLmdldEJCb3goKTtDLndpZHRoPUUud2lkdGgsQy5oZWlnaHQ9RS5oZWlnaHQrZm8ucGFkZGluZy8yLGFQW3cuaWRdPXt5OmZvLmNvbXBvc2l0VGl0bGVTaXplfX1lbHNle2xldCBFPVQubm9kZSgpLmdldEJCb3goKTtDLndpZHRoPUUud2lkdGgsQy5oZWlnaHQ9RS5oZWlnaHR9fWVsc2UgQz1pUChlLHcsbCk7aWYody5ub3RlKXtsZXQgVD17ZGVzY3JpcHRpb25zOltdLGlkOncuaWQrIi1ub3RlIixub3RlOncubm90ZSx0eXBlOiJub3RlIn0sRT1pUChlLFQsbCk7dy5ub3RlLnBvc2l0aW9uPT09ImxlZnQgb2YiPyhsLnNldE5vZGUoQy5pZCsiLW5vdGUiLEUpLGwuc2V0Tm9kZShDLmlkLEMpKToobC5zZXROb2RlKEMuaWQsQyksbC5zZXROb2RlKEMuaWQrIi1ub3RlIixFKSksbC5zZXRQYXJlbnQoQy5pZCxDLmlkKyItZ3JvdXAiKSxsLnNldFBhcmVudChDLmlkKyItbm90ZSIsQy5pZCsiLWdyb3VwIil9ZWxzZSBsLnNldE5vZGUoQy5pZCxDKX1ZLmRlYnVnKCJDb3VudD0iLGwubm9kZUNvdW50KCksbCk7bGV0IGc9MDtkLmZvckVhY2goZnVuY3Rpb24oYil7ZysrLFkuZGVidWcoIlNldHRpbmcgZWRnZSIsYiksbC5zZXRFZGdlKGIuaWQxLGIuaWQyLHtyZWxhdGlvbjpiLHdpZHRoOl9VZShiLnRpdGxlKSxoZWlnaHQ6Zm8ubGFiZWxIZWlnaHQqWmUuZ2V0Um93cyhiLnRpdGxlKS5sZW5ndGgsbGFiZWxwb3M6ImMifSwiaWQiK2cpfSksUjIobCksWS5kZWJ1ZygiR3JhcGggYWZ0ZXIgbGF5b3V0IixsLm5vZGVzKCkpO2xldCB5PWUubm9kZSgpO2wubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe2IhPT12b2lkIDAmJmwubm9kZShiKSE9PXZvaWQgMD8oWS53YXJuKCJOb2RlICIrYisiOiAiK0pTT04uc3RyaW5naWZ5KGwubm9kZShiKSkpLGkuc2VsZWN0KCIjIit5LmlkKyIgIyIrYikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKGwubm9kZShiKS54LWwubm9kZShiKS53aWR0aC8yKSsiLCIrKGwubm9kZShiKS55KyhhUFtiXT9hUFtiXS55OjApLWwubm9kZShiKS5oZWlnaHQvMikrIiApIiksaS5zZWxlY3QoIiMiK3kuaWQrIiAjIitiKS5hdHRyKCJkYXRhLXgtc2hpZnQiLGwubm9kZShiKS54LWwubm9kZShiKS53aWR0aC8yKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIiMiK3kuaWQrIiAjIitiKyIgLmRpdmlkZXIiKS5mb3JFYWNoKEM9PntsZXQgVD1DLnBhcmVudEVsZW1lbnQsRT0wLEE9MDtUJiYoVC5wYXJlbnRFbGVtZW50JiYoRT1ULnBhcmVudEVsZW1lbnQuZ2V0QkJveCgpLndpZHRoKSxBPXBhcnNlSW50KFQuZ2V0QXR0cmlidXRlKCJkYXRhLXgtc2hpZnQiKSwxMCksTnVtYmVyLmlzTmFOKEEpJiYoQT0wKSksQy5zZXRBdHRyaWJ1dGUoIngxIiwwLUErOCksQy5zZXRBdHRyaWJ1dGUoIngyIixFLUEtOCl9KSk6WS5kZWJ1ZygiTm8gTm9kZSAiK2IrIjogIitKU09OLnN0cmluZ2lmeShsLm5vZGUoYikpKX0pO2xldCB2PXkuZ2V0QkJveCgpO2wuZWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe2IhPT12b2lkIDAmJmwuZWRnZShiKSE9PXZvaWQgMCYmKFkuZGVidWcoIkVkZ2UgIitiLnYrIiAtPiAiK2IudysiOiAiK0pTT04uc3RyaW5naWZ5KGwuZWRnZShiKSkpLHlkZShlLGwuZWRnZShiKSxsLmVkZ2UoYikucmVsYXRpb24pKX0pLHY9eS5nZXRCQm94KCk7bGV0IHg9e2lkOnJ8fCJyb290IixsYWJlbDpyfHwicm9vdCIsd2lkdGg6MCxoZWlnaHQ6MH07cmV0dXJuIHgud2lkdGg9di53aWR0aCsyKmZvLnBhZGRpbmcseC5oZWlnaHQ9di5oZWlnaHQrMipmby5wYWRkaW5nLFkuZGVidWcoIkRvYyByZW5kZXJlZCIseCxsKSx4fSwicmVuZGVyRG9jIiksYmRlPXtzZXRDb25mOlNVZSxkcmF3OkFVZX19KTt2YXIgVGRlPXt9O2hyKFRkZSx7ZGlhZ3JhbTooKT0+RFVlfSk7dmFyIERVZSxrZGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjskTygpO0g2KCk7clAoKTt3ZGUoKTtEVWU9e3BhcnNlcjpJNixnZXQgZGIoKXtyZXR1cm4gbmV3IFFvKDEpfSxyZW5kZXJlcjpiZGUsc3R5bGVzOlc2LGluaXQ6byh0PT57dC5zdGF0ZXx8KHQuc3RhdGU9e30pLHQuc3RhdGUuYXJyb3dNYXJrZXJBYnNvbHV0ZT10LmFycm93TWFya2VyQWJzb2x1dGV9LCJpbml0Iil9fSk7dmFyIENkZT17fTtocihDZGUse2RpYWdyYW06KCk9Pk1VZX0pO3ZhciBNVWUsQWRlPU4oKCk9PnsidXNlIHN0cmljdCI7JE8oKTtINigpO3JQKCk7ZVAoKTtNVWU9e3BhcnNlcjpJNixnZXQgZGIoKXtyZXR1cm4gbmV3IFFvKDIpfSxyZW5kZXJlcjppZGUsc3R5bGVzOlc2LGluaXQ6byh0PT57dC5zdGF0ZXx8KHQuc3RhdGU9e30pLHQuc3RhdGUuYXJyb3dNYXJrZXJBYnNvbHV0ZT10LmFycm93TWFya2VyQWJzb2x1dGV9LCJpbml0Iil9fSk7dmFyIHNQLExkZSxSZGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtzUD1mdW5jdGlvbigpe3ZhciB0PW8oZnVuY3Rpb24oZCxwLG0sZyl7Zm9yKG09bXx8e30sZz1kLmxlbmd0aDtnLS07bVtkW2ddXT1wKTtyZXR1cm4gbX0sIm8iKSxlPVs2LDgsMTAsMTEsMTIsMTQsMTYsMTcsMThdLHI9WzEsOV0sbj1bMSwxMF0saT1bMSwxMV0sYT1bMSwxMl0scz1bMSwxM10sbD1bMSwxNF0sdT17dHJhY2U6byhmdW5jdGlvbigpe30sInRyYWNlIikseXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6Myxqb3VybmV5OjQsZG9jdW1lbnQ6NSxFT0Y6NixsaW5lOjcsU1BBQ0U6OCxzdGF0ZW1lbnQ6OSxORVdMSU5FOjEwLHRpdGxlOjExLGFjY190aXRsZToxMixhY2NfdGl0bGVfdmFsdWU6MTMsYWNjX2Rlc2NyOjE0LGFjY19kZXNjcl92YWx1ZToxNSxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjE2LHNlY3Rpb246MTcsdGFza05hbWU6MTgsdGFza0RhdGE6MTksJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6ImpvdXJuZXkiLDY6IkVPRiIsODoiU1BBQ0UiLDEwOiJORVdMSU5FIiwxMToidGl0bGUiLDEyOiJhY2NfdGl0bGUiLDEzOiJhY2NfdGl0bGVfdmFsdWUiLDE0OiJhY2NfZGVzY3IiLDE1OiJhY2NfZGVzY3JfdmFsdWUiLDE2OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwxNzoic2VjdGlvbiIsMTg6InRhc2tOYW1lIiwxOToidGFza0RhdGEifSxwcm9kdWN0aW9uc186WzAsWzMsM10sWzUsMF0sWzUsMl0sWzcsMl0sWzcsMV0sWzcsMV0sWzcsMV0sWzksMV0sWzksMl0sWzksMl0sWzksMV0sWzksMV0sWzksMl1dLHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbihwLG0sZyx5LHYseCxiKXt2YXIgdz14Lmxlbmd0aC0xO3N3aXRjaCh2KXtjYXNlIDE6cmV0dXJuIHhbdy0xXTtjYXNlIDI6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMzp4W3ctMV0ucHVzaCh4W3ddKSx0aGlzLiQ9eFt3LTFdO2JyZWFrO2Nhc2UgNDpjYXNlIDU6dGhpcy4kPXhbd107YnJlYWs7Y2FzZSA2OmNhc2UgNzp0aGlzLiQ9W107YnJlYWs7Y2FzZSA4Onkuc2V0RGlhZ3JhbVRpdGxlKHhbd10uc3Vic3RyKDYpKSx0aGlzLiQ9eFt3XS5zdWJzdHIoNik7YnJlYWs7Y2FzZSA5OnRoaXMuJD14W3ddLnRyaW0oKSx5LnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAxMDpjYXNlIDExOnRoaXMuJD14W3ddLnRyaW0oKSx5LnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAxMjp5LmFkZFNlY3Rpb24oeFt3XS5zdWJzdHIoOCkpLHRoaXMuJD14W3ddLnN1YnN0cig4KTticmVhaztjYXNlIDEzOnkuYWRkVGFzayh4W3ctMV0seFt3XSksdGhpcy4kPSJ0YXNrIjticmVha319LCJhbm9ueW1vdXMiKSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LHQoZSxbMiwyXSx7NTozfSksezY6WzEsNF0sNzo1LDg6WzEsNl0sOTo3LDEwOlsxLDhdLDExOnIsMTI6biwxNDppLDE2OmEsMTc6cywxODpsfSx0KGUsWzIsN10sezE6WzIsMV19KSx0KGUsWzIsM10pLHs5OjE1LDExOnIsMTI6biwxNDppLDE2OmEsMTc6cywxODpsfSx0KGUsWzIsNV0pLHQoZSxbMiw2XSksdChlLFsyLDhdKSx7MTM6WzEsMTZdfSx7MTU6WzEsMTddfSx0KGUsWzIsMTFdKSx0KGUsWzIsMTJdKSx7MTk6WzEsMThdfSx0KGUsWzIsNF0pLHQoZSxbMiw5XSksdChlLFsyLDEwXSksdChlLFsyLDEzXSldLGRlZmF1bHRBY3Rpb25zOnt9LHBhcnNlRXJyb3I6byhmdW5jdGlvbihwLG0pe2lmKG0ucmVjb3ZlcmFibGUpdGhpcy50cmFjZShwKTtlbHNle3ZhciBnPW5ldyBFcnJvcihwKTt0aHJvdyBnLmhhc2g9bSxnfX0sInBhcnNlRXJyb3IiKSxwYXJzZTpvKGZ1bmN0aW9uKHApe3ZhciBtPXRoaXMsZz1bMF0seT1bXSx2PVtudWxsXSx4PVtdLGI9dGhpcy50YWJsZSx3PSIiLEM9MCxUPTAsRT0wLEE9MixTPTEsXz14LnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLEk9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxEPXt5eTp7fX07Zm9yKHZhciBrIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksaykmJihELnl5W2tdPXRoaXMueXlba10pO0kuc2V0SW5wdXQocCxELnl5KSxELnl5LmxleGVyPUksRC55eS5wYXJzZXI9dGhpcyx0eXBlb2YgSS55eWxsb2M+InUiJiYoSS55eWxsb2M9e30pO3ZhciBMPUkueXlsbG9jO3gucHVzaChMKTt2YXIgUj1JLm9wdGlvbnMmJkkub3B0aW9ucy5yYW5nZXM7dHlwZW9mIEQueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9RC55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBPKEspe2cubGVuZ3RoPWcubGVuZ3RoLTIqSyx2Lmxlbmd0aD12Lmxlbmd0aC1LLHgubGVuZ3RoPXgubGVuZ3RoLUt9byhPLCJwb3BTdGFjayIpO2Z1bmN0aW9uIE0oKXt2YXIgSztyZXR1cm4gSz15LnBvcCgpfHxJLmxleCgpfHxTLHR5cGVvZiBLIT0ibnVtYmVyIiYmKEsgaW5zdGFuY2VvZiBBcnJheSYmKHk9SyxLPXkucG9wKCkpLEs9bS5zeW1ib2xzX1tLXXx8SyksS31vKE0sImxleCIpO2Zvcih2YXIgQixGLFAseiwkLEgsUT17fSxqLGllLG5lLGxlOzspe2lmKFA9Z1tnLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW1BdP3o9dGhpcy5kZWZhdWx0QWN0aW9uc1tQXTooKEI9PT1udWxsfHx0eXBlb2YgQj4idSIpJiYoQj1NKCkpLHo9YltQXSYmYltQXVtCXSksdHlwZW9mIHo+InUifHwhei5sZW5ndGh8fCF6WzBdKXt2YXIgaGU9IiI7bGU9W107Zm9yKGogaW4gYltQXSl0aGlzLnRlcm1pbmFsc19bal0mJmo+QSYmbGUucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW2pdKyInIik7SS5zaG93UG9zaXRpb24/aGU9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoQysxKStgOgpgK0kuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtsZS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW0JdfHxCKSsiJyI6aGU9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoQysxKSsiOiBVbmV4cGVjdGVkICIrKEI9PVM/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bQl18fEIpKyInIiksdGhpcy5wYXJzZUVycm9yKGhlLHt0ZXh0OkkubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW0JdfHxCLGxpbmU6SS55eWxpbmVubyxsb2M6TCxleHBlY3RlZDpsZX0pfWlmKHpbMF1pbnN0YW5jZW9mIEFycmF5JiZ6Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrUCsiLCB0b2tlbjogIitCKTtzd2l0Y2goelswXSl7Y2FzZSAxOmcucHVzaChCKSx2LnB1c2goSS55eXRleHQpLHgucHVzaChJLnl5bGxvYyksZy5wdXNoKHpbMV0pLEI9bnVsbCxGPyhCPUYsRj1udWxsKTooVD1JLnl5bGVuZyx3PUkueXl0ZXh0LEM9SS55eWxpbmVubyxMPUkueXlsbG9jLEU+MCYmRS0tKTticmVhaztjYXNlIDI6aWYoaWU9dGhpcy5wcm9kdWN0aW9uc19belsxXV1bMV0sUS4kPXZbdi5sZW5ndGgtaWVdLFEuXyQ9e2ZpcnN0X2xpbmU6eFt4Lmxlbmd0aC0oaWV8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTp4W3gubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46eFt4Lmxlbmd0aC0oaWV8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46eFt4Lmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sUiYmKFEuXyQucmFuZ2U9W3hbeC5sZW5ndGgtKGllfHwxKV0ucmFuZ2VbMF0seFt4Lmxlbmd0aC0xXS5yYW5nZVsxXV0pLEg9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KFEsW3csVCxDLEQueXkselsxXSx2LHhdLmNvbmNhdChfKSksdHlwZW9mIEg8InUiKXJldHVybiBIO2llJiYoZz1nLnNsaWNlKDAsLTEqaWUqMiksdj12LnNsaWNlKDAsLTEqaWUpLHg9eC5zbGljZSgwLC0xKmllKSksZy5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW3pbMV1dWzBdKSx2LnB1c2goUS4kKSx4LnB1c2goUS5fJCksbmU9YltnW2cubGVuZ3RoLTJdXVtnW2cubGVuZ3RoLTFdXSxnLnB1c2gobmUpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9LCJwYXJzZSIpfSxoPWZ1bmN0aW9uKCl7dmFyIGQ9e0VPRjoxLHBhcnNlRXJyb3I6byhmdW5jdGlvbihtLGcpe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IobSxnKTtlbHNlIHRocm93IG5ldyBFcnJvcihtKX0sInBhcnNlRXJyb3IiKSxzZXRJbnB1dDpvKGZ1bmN0aW9uKHAsbSl7cmV0dXJuIHRoaXMueXk9bXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9cCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30sInNldElucHV0IiksaW5wdXQ6byhmdW5jdGlvbigpe3ZhciBwPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1wLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1wLHRoaXMubWF0Y2hlZCs9cDt2YXIgbT1wLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gbT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSkscH0sImlucHV0IiksdW5wdXQ6byhmdW5jdGlvbihwKXt2YXIgbT1wLmxlbmd0aCxnPXAuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD1wK3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1tKSx0aGlzLm9mZnNldC09bTt2YXIgeT10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxnLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09Zy5sZW5ndGgtMSk7dmFyIHY9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmc/KGcubGVuZ3RoPT09eS5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3lbeS5sZW5ndGgtZy5sZW5ndGhdLmxlbmd0aC1nWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tbX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt2WzBdLHZbMF0rdGhpcy55eWxlbmctbV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSwidW5wdXQiKSxtb3JlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSwibW9yZSIpLHJlamVjdDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSwicmVqZWN0IiksbGVzczpvKGZ1bmN0aW9uKHApe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShwKSl9LCJsZXNzIikscGFzdElucHV0Om8oZnVuY3Rpb24oKXt2YXIgcD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKHAubGVuZ3RoPjIwPyIuLi4iOiIiKStwLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSwicGFzdElucHV0IiksdXBjb21pbmdJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIHA9dGhpcy5tYXRjaDtyZXR1cm4gcC5sZW5ndGg8MjAmJihwKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1wLmxlbmd0aCkpLChwLnN1YnN0cigwLDIwKSsocC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sInVwY29taW5nSW5wdXQiKSxzaG93UG9zaXRpb246byhmdW5jdGlvbigpe3ZhciBwPXRoaXMucGFzdElucHV0KCksbT1uZXcgQXJyYXkocC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBwK3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCttKyJeIn0sInNob3dQb3NpdGlvbiIpLHRlc3RfbWF0Y2g6byhmdW5jdGlvbihwLG0pe3ZhciBnLHksdjtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYodj17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih2Lnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLHk9cFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZykseSYmKHRoaXMueXlsaW5lbm8rPXkubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46eT95W3kubGVuZ3RoLTFdLmxlbmd0aC15W3kubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rcFswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1wWzBdLHRoaXMubWF0Y2grPXBbMF0sdGhpcy5tYXRjaGVzPXAsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UocFswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9cFswXSxnPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLG0sdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksZylyZXR1cm4gZztpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgeCBpbiB2KXRoaXNbeF09dlt4XTtyZXR1cm4hMX1yZXR1cm4hMX0sInRlc3RfbWF0Y2giKSxuZXh0Om8oZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgcCxtLGcseTt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciB2PXRoaXMuX2N1cnJlbnRSdWxlcygpLHg9MDt4PHYubGVuZ3RoO3grKylpZihnPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbdlt4XV0pLGcmJighbXx8Z1swXS5sZW5ndGg+bVswXS5sZW5ndGgpKXtpZihtPWcseT14LHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKHA9dGhpcy50ZXN0X21hdGNoKGcsdlt4XSkscCE9PSExKXJldHVybiBwO2lmKHRoaXMuX2JhY2t0cmFjayl7bT0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBtPyhwPXRoaXMudGVzdF9tYXRjaChtLHZbeV0pLHAhPT0hMT9wOiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSwibmV4dCIpLGxleDpvKGZ1bmN0aW9uKCl7dmFyIG09dGhpcy5uZXh0KCk7cmV0dXJuIG18fHRoaXMubGV4KCl9LCJsZXgiKSxiZWdpbjpvKGZ1bmN0aW9uKG0pe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChtKX0sImJlZ2luIikscG9wU3RhdGU6byhmdW5jdGlvbigpe3ZhciBtPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIG0+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LCJwb3BTdGF0ZSIpLF9jdXJyZW50UnVsZXM6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LCJfY3VycmVudFJ1bGVzIiksdG9wU3RhdGU6byhmdW5jdGlvbihtKXtyZXR1cm4gbT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKG18fDApLG0+PTA/dGhpcy5jb25kaXRpb25TdGFja1ttXToiSU5JVElBTCJ9LCJ0b3BTdGF0ZSIpLHB1c2hTdGF0ZTpvKGZ1bmN0aW9uKG0pe3RoaXMuYmVnaW4obSl9LCJwdXNoU3RhdGUiKSxzdGF0ZVN0YWNrU2l6ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSwic3RhdGVTdGFja1NpemUiKSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbihtLGcseSx2KXt2YXIgeD12O3N3aXRjaCh5KXtjYXNlIDA6YnJlYWs7Y2FzZSAxOmJyZWFrO2Nhc2UgMjpyZXR1cm4gMTA7Y2FzZSAzOmJyZWFrO2Nhc2UgNDpicmVhaztjYXNlIDU6cmV0dXJuIDQ7Y2FzZSA2OnJldHVybiAxMTtjYXNlIDc6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDEyO2JyZWFrO2Nhc2UgODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2JyZWFrO2Nhc2UgOTpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX2Rlc2NyIiksMTQ7YnJlYWs7Y2FzZSAxMDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2JyZWFrO2Nhc2UgMTE6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgMTI6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTM6cmV0dXJuImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiO2Nhc2UgMTQ6cmV0dXJuIDE3O2Nhc2UgMTU6cmV0dXJuIDE4O2Nhc2UgMTY6cmV0dXJuIDE5O2Nhc2UgMTc6cmV0dXJuIjoiO2Nhc2UgMTg6cmV0dXJuIDY7Y2FzZSAxOTpyZXR1cm4iSU5WQUxJRCJ9fSwiYW5vbnltb3VzIikscnVsZXM6Wy9eKD86JSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzpbXG5dKykvaSwvXig/OlxzKykvaSwvXig/OiNbXlxuXSopL2ksL14oPzpqb3VybmV5XGIpL2ksL14oPzp0aXRsZVxzW14jXG47XSspL2ksL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/OnNlY3Rpb25cc1teIzpcbjtdKykvaSwvXig/OlteIzpcbjtdKykvaSwvXig/OjpbXiNcbjtdKykvaSwvXig/OjopL2ksL14oPzokKS9pLC9eKD86LikvaV0sY29uZGl0aW9uczp7YWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzEyLDEzXSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzEwXSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzhdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw1LDYsNyw5LDExLDE0LDE1LDE2LDE3LDE4LDE5XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIGR9KCk7dS5sZXhlcj1oO2Z1bmN0aW9uIGYoKXt0aGlzLnl5PXt9fXJldHVybiBvKGYsIlBhcnNlciIpLGYucHJvdG90eXBlPXUsdS5QYXJzZXI9ZixuZXcgZn0oKTtzUC5wYXJzZXI9c1A7TGRlPXNQfSk7dmFyIE0xLG9QLFNiLENiLEJVZSxGVWUsJFVlLHpVZSxHVWUsVlVlLFVVZSxOZGUsSFVlLGxQLE1kZT1OKCgpPT57InVzZSBzdHJpY3QiO3p0KCk7bWkoKTtNMT0iIixvUD1bXSxTYj1bXSxDYj1bXSxCVWU9byhmdW5jdGlvbigpe29QLmxlbmd0aD0wLFNiLmxlbmd0aD0wLE0xPSIiLENiLmxlbmd0aD0wLEFyKCl9LCJjbGVhciIpLEZVZT1vKGZ1bmN0aW9uKHQpe00xPXQsb1AucHVzaCh0KX0sImFkZFNlY3Rpb24iKSwkVWU9byhmdW5jdGlvbigpe3JldHVybiBvUH0sImdldFNlY3Rpb25zIikselVlPW8oZnVuY3Rpb24oKXtsZXQgdD1OZGUoKSxlPTEwMCxyPTA7Zm9yKDshdCYmcjxlOyl0PU5kZSgpLHIrKztyZXR1cm4gU2IucHVzaCguLi5DYiksU2J9LCJnZXRUYXNrcyIpLEdVZT1vKGZ1bmN0aW9uKCl7bGV0IHQ9W107cmV0dXJuIFNiLmZvckVhY2gocj0+e3IucGVvcGxlJiZ0LnB1c2goLi4uci5wZW9wbGUpfSksWy4uLm5ldyBTZXQodCldLnNvcnQoKX0sInVwZGF0ZUFjdG9ycyIpLFZVZT1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9ZS5zdWJzdHIoMSkuc3BsaXQoIjoiKSxuPTAsaT1bXTtyLmxlbmd0aD09PTE/KG49TnVtYmVyKHJbMF0pLGk9W10pOihuPU51bWJlcihyWzBdKSxpPXJbMV0uc3BsaXQoIiwiKSk7bGV0IGE9aS5tYXAobD0+bC50cmltKCkpLHM9e3NlY3Rpb246TTEsdHlwZTpNMSxwZW9wbGU6YSx0YXNrOnQsc2NvcmU6bn07Q2IucHVzaChzKX0sImFkZFRhc2siKSxVVWU9byhmdW5jdGlvbih0KXtsZXQgZT17c2VjdGlvbjpNMSx0eXBlOk0xLGRlc2NyaXB0aW9uOnQsdGFzazp0LGNsYXNzZXM6W119O1NiLnB1c2goZSl9LCJhZGRUYXNrT3JnIiksTmRlPW8oZnVuY3Rpb24oKXtsZXQgdD1vKGZ1bmN0aW9uKHIpe3JldHVybiBDYltyXS5wcm9jZXNzZWR9LCJjb21waWxlVGFzayIpLGU9ITA7Zm9yKGxldFtyLG5db2YgQ2IuZW50cmllcygpKXQociksZT1lJiZuLnByb2Nlc3NlZDtyZXR1cm4gZX0sImNvbXBpbGVUYXNrcyIpLEhVZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIEdVZSgpfSwiZ2V0QWN0b3JzIiksbFA9e2dldENvbmZpZzpvKCgpPT5tZSgpLmpvdXJuZXksImdldENvbmZpZyIpLGNsZWFyOkJVZSxzZXREaWFncmFtVGl0bGU6JHIsZ2V0RGlhZ3JhbVRpdGxlOklyLHNldEFjY1RpdGxlOkxyLGdldEFjY1RpdGxlOlJyLHNldEFjY0Rlc2NyaXB0aW9uOk5yLGdldEFjY0Rlc2NyaXB0aW9uOk1yLGFkZFNlY3Rpb246RlVlLGdldFNlY3Rpb25zOiRVZSxnZXRUYXNrczp6VWUsYWRkVGFzazpWVWUsYWRkVGFza09yZzpVVWUsZ2V0QWN0b3JzOkhVZX19KTt2YXIgV1VlLElkZSxPZGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtXVWU9byh0PT5gLmxhYmVsIHsKICAgIGZvbnQtZmFtaWx5OiAke3QuZm9udEZhbWlseX07CiAgICBjb2xvcjogJHt0LnRleHRDb2xvcn07CiAgfQogIC5tb3V0aCB7CiAgICBzdHJva2U6ICM2NjY7CiAgfQoKICBsaW5lIHsKICAgIHN0cm9rZTogJHt0LnRleHRDb2xvcn0KICB9CgogIC5sZWdlbmQgewogICAgZmlsbDogJHt0LnRleHRDb2xvcn07CiAgICBmb250LWZhbWlseTogJHt0LmZvbnRGYW1pbHl9OwogIH0KCiAgLmxhYmVsIHRleHQgewogICAgZmlsbDogIzMzMzsKICB9CiAgLmxhYmVsIHsKICAgIGNvbG9yOiAke3QudGV4dENvbG9yfQogIH0KCiAgLmZhY2UgewogICAgJHt0LmZhY2VDb2xvcj9gZmlsbDogJHt0LmZhY2VDb2xvcn1gOiJmaWxsOiAjRkZGOERDIn07CiAgICBzdHJva2U6ICM5OTk7CiAgfQoKICAubm9kZSByZWN0LAogIC5ub2RlIGNpcmNsZSwKICAubm9kZSBlbGxpcHNlLAogIC5ub2RlIHBvbHlnb24sCiAgLm5vZGUgcGF0aCB7CiAgICBmaWxsOiAke3QubWFpbkJrZ307CiAgICBzdHJva2U6ICR7dC5ub2RlQm9yZGVyfTsKICAgIHN0cm9rZS13aWR0aDogMXB4OwogIH0KCiAgLm5vZGUgLmxhYmVsIHsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICB9CiAgLm5vZGUuY2xpY2thYmxlIHsKICAgIGN1cnNvcjogcG9pbnRlcjsKICB9CgogIC5hcnJvd2hlYWRQYXRoIHsKICAgIGZpbGw6ICR7dC5hcnJvd2hlYWRDb2xvcn07CiAgfQoKICAuZWRnZVBhdGggLnBhdGggewogICAgc3Ryb2tlOiAke3QubGluZUNvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogMS41cHg7CiAgfQoKICAuZmxvd2NoYXJ0LWxpbmsgewogICAgc3Ryb2tlOiAke3QubGluZUNvbG9yfTsKICAgIGZpbGw6IG5vbmU7CiAgfQoKICAuZWRnZUxhYmVsIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICR7dC5lZGdlTGFiZWxCYWNrZ3JvdW5kfTsKICAgIHJlY3QgewogICAgICBvcGFjaXR5OiAwLjU7CiAgICB9CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgfQoKICAuY2x1c3RlciByZWN0IHsKICB9CgogIC5jbHVzdGVyIHRleHQgewogICAgZmlsbDogJHt0LnRpdGxlQ29sb3J9OwogIH0KCiAgZGl2Lm1lcm1haWRUb29sdGlwIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIG1heC13aWR0aDogMjAwcHg7CiAgICBwYWRkaW5nOiAycHg7CiAgICBmb250LWZhbWlseTogJHt0LmZvbnRGYW1pbHl9OwogICAgZm9udC1zaXplOiAxMnB4OwogICAgYmFja2dyb3VuZDogJHt0LnRlcnRpYXJ5Q29sb3J9OwogICAgYm9yZGVyOiAxcHggc29saWQgJHt0LmJvcmRlcjJ9OwogICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB6LWluZGV4OiAxMDA7CiAgfQoKICAudGFzay10eXBlLTAsIC5zZWN0aW9uLXR5cGUtMCAgewogICAgJHt0LmZpbGxUeXBlMD9gZmlsbDogJHt0LmZpbGxUeXBlMH1gOiIifTsKICB9CiAgLnRhc2stdHlwZS0xLCAuc2VjdGlvbi10eXBlLTEgIHsKICAgICR7dC5maWxsVHlwZTA/YGZpbGw6ICR7dC5maWxsVHlwZTF9YDoiIn07CiAgfQogIC50YXNrLXR5cGUtMiwgLnNlY3Rpb24tdHlwZS0yICB7CiAgICAke3QuZmlsbFR5cGUwP2BmaWxsOiAke3QuZmlsbFR5cGUyfWA6IiJ9OwogIH0KICAudGFzay10eXBlLTMsIC5zZWN0aW9uLXR5cGUtMyAgewogICAgJHt0LmZpbGxUeXBlMD9gZmlsbDogJHt0LmZpbGxUeXBlM31gOiIifTsKICB9CiAgLnRhc2stdHlwZS00LCAuc2VjdGlvbi10eXBlLTQgIHsKICAgICR7dC5maWxsVHlwZTA/YGZpbGw6ICR7dC5maWxsVHlwZTR9YDoiIn07CiAgfQogIC50YXNrLXR5cGUtNSwgLnNlY3Rpb24tdHlwZS01ICB7CiAgICAke3QuZmlsbFR5cGUwP2BmaWxsOiAke3QuZmlsbFR5cGU1fWA6IiJ9OwogIH0KICAudGFzay10eXBlLTYsIC5zZWN0aW9uLXR5cGUtNiAgewogICAgJHt0LmZpbGxUeXBlMD9gZmlsbDogJHt0LmZpbGxUeXBlNn1gOiIifTsKICB9CiAgLnRhc2stdHlwZS03LCAuc2VjdGlvbi10eXBlLTcgIHsKICAgICR7dC5maWxsVHlwZTA/YGZpbGw6ICR7dC5maWxsVHlwZTd9YDoiIn07CiAgfQoKICAuYWN0b3ItMCB7CiAgICAke3QuYWN0b3IwP2BmaWxsOiAke3QuYWN0b3IwfWA6IiJ9OwogIH0KICAuYWN0b3ItMSB7CiAgICAke3QuYWN0b3IxP2BmaWxsOiAke3QuYWN0b3IxfWA6IiJ9OwogIH0KICAuYWN0b3ItMiB7CiAgICAke3QuYWN0b3IyP2BmaWxsOiAke3QuYWN0b3IyfWA6IiJ9OwogIH0KICAuYWN0b3ItMyB7CiAgICAke3QuYWN0b3IzP2BmaWxsOiAke3QuYWN0b3IzfWA6IiJ9OwogIH0KICAuYWN0b3ItNCB7CiAgICAke3QuYWN0b3I0P2BmaWxsOiAke3QuYWN0b3I0fWA6IiJ9OwogIH0KICAuYWN0b3ItNSB7CiAgICAke3QuYWN0b3I1P2BmaWxsOiAke3QuYWN0b3I1fWA6IiJ9OwogIH0KYCwiZ2V0U3R5bGVzIiksSWRlPVdVZX0pO3ZhciBjUCxxVWUsQmRlLEZkZSxZVWUsWFVlLFBkZSxqVWUsS1VlLCRkZSxRVWUsSTEsemRlPU4oKCk9PnsidXNlIHN0cmljdCI7ZHIoKTtXdigpO2NQPW8oZnVuY3Rpb24odCxlKXtyZXR1cm4ga2QodCxlKX0sImRyYXdSZWN0IikscVVlPW8oZnVuY3Rpb24odCxlKXtsZXQgbj10LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLGUuY3gpLmF0dHIoImN5IixlLmN5KS5hdHRyKCJjbGFzcyIsImZhY2UiKS5hdHRyKCJyIiwxNSkuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJvdmVyZmxvdyIsInZpc2libGUiKSxpPXQuYXBwZW5kKCJnIik7aS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IixlLmN4LTE1LzMpLmF0dHIoImN5IixlLmN5LTE1LzMpLmF0dHIoInIiLDEuNSkuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJmaWxsIiwiIzY2NiIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKSxpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLGUuY3grMTUvMykuYXR0cigiY3kiLGUuY3ktMTUvMykuYXR0cigiciIsMS41KS5hdHRyKCJzdHJva2Utd2lkdGgiLDIpLmF0dHIoImZpbGwiLCIjNjY2IikuYXR0cigic3Ryb2tlIiwiIzY2NiIpO2Z1bmN0aW9uIGEodSl7bGV0IGg9YmwoKS5zdGFydEFuZ2xlKE1hdGguUEkvMikuZW5kQW5nbGUoMyooTWF0aC5QSS8yKSkuaW5uZXJSYWRpdXMoNy41KS5vdXRlclJhZGl1cyg2LjgxODE4MTgxODE4MTgxNzUpO3UuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJtb3V0aCIpLmF0dHIoImQiLGgpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2UuY3grIiwiKyhlLmN5KzIpKyIpIil9byhhLCJzbWlsZSIpO2Z1bmN0aW9uIHModSl7bGV0IGg9YmwoKS5zdGFydEFuZ2xlKDMqTWF0aC5QSS8yKS5lbmRBbmdsZSg1KihNYXRoLlBJLzIpKS5pbm5lclJhZGl1cyg3LjUpLm91dGVyUmFkaXVzKDYuODE4MTgxODE4MTgxODE3NSk7dS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigiZCIsaCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrZS5jeCsiLCIrKGUuY3krNykrIikiKX1vKHMsInNhZCIpO2Z1bmN0aW9uIGwodSl7dS5hcHBlbmQoImxpbmUiKS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigic3Ryb2tlIiwyKS5hdHRyKCJ4MSIsZS5jeC01KS5hdHRyKCJ5MSIsZS5jeSs3KS5hdHRyKCJ4MiIsZS5jeCs1KS5hdHRyKCJ5MiIsZS5jeSs3KS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IikuYXR0cigic3Ryb2tlIiwiIzY2NiIpfXJldHVybiBvKGwsImFtYml2YWxlbnQiKSxlLnNjb3JlPjM/YShpKTplLnNjb3JlPDM/cyhpKTpsKGkpLG59LCJkcmF3RmFjZSIpLEJkZT1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9dC5hcHBlbmQoImNpcmNsZSIpO3JldHVybiByLmF0dHIoImN4IixlLmN4KSxyLmF0dHIoImN5IixlLmN5KSxyLmF0dHIoImNsYXNzIiwiYWN0b3ItIitlLnBvcyksci5hdHRyKCJmaWxsIixlLmZpbGwpLHIuYXR0cigic3Ryb2tlIixlLnN0cm9rZSksci5hdHRyKCJyIixlLnIpLHIuY2xhc3MhPT12b2lkIDAmJnIuYXR0cigiY2xhc3MiLHIuY2xhc3MpLGUudGl0bGUhPT12b2lkIDAmJnIuYXBwZW5kKCJ0aXRsZSIpLnRleHQoZS50aXRsZSkscn0sImRyYXdDaXJjbGUiKSxGZGU9byhmdW5jdGlvbih0LGUpe3JldHVybiBOcSh0LGUpfSwiZHJhd1RleHQiKSxZVWU9byhmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIoaSxhLHMsbCx1KXtyZXR1cm4gaSsiLCIrYSsiICIrKGkrcykrIiwiK2ErIiAiKyhpK3MpKyIsIisoYStsLXUpKyIgIisoaStzLXUqMS4yKSsiLCIrKGErbCkrIiAiK2krIiwiKyhhK2wpfW8ociwiZ2VuUG9pbnRzIik7bGV0IG49dC5hcHBlbmQoInBvbHlnb24iKTtuLmF0dHIoInBvaW50cyIscihlLngsZS55LDUwLDIwLDcpKSxuLmF0dHIoImNsYXNzIiwibGFiZWxCb3giKSxlLnk9ZS55K2UubGFiZWxNYXJnaW4sZS54PWUueCsuNSplLmxhYmVsTWFyZ2luLEZkZSh0LGUpfSwiZHJhd0xhYmVsIiksWFVlPW8oZnVuY3Rpb24odCxlLHIpe2xldCBuPXQuYXBwZW5kKCJnIiksaT1UbCgpO2kueD1lLngsaS55PWUueSxpLmZpbGw9ZS5maWxsLGkud2lkdGg9ci53aWR0aCplLnRhc2tDb3VudCtyLmRpYWdyYW1NYXJnaW5YKihlLnRhc2tDb3VudC0xKSxpLmhlaWdodD1yLmhlaWdodCxpLmNsYXNzPSJqb3VybmV5LXNlY3Rpb24gc2VjdGlvbi10eXBlLSIrZS5udW0saS5yeD0zLGkucnk9MyxjUChuLGkpLCRkZShyKShlLnRleHQsbixpLngsaS55LGkud2lkdGgsaS5oZWlnaHQse2NsYXNzOiJqb3VybmV5LXNlY3Rpb24gc2VjdGlvbi10eXBlLSIrZS5udW19LHIsZS5jb2xvdXIpfSwiZHJhd1NlY3Rpb24iKSxQZGU9LTEsalVlPW8oZnVuY3Rpb24odCxlLHIpe2xldCBuPWUueCtyLndpZHRoLzIsaT10LmFwcGVuZCgiZyIpO1BkZSsrO2xldCBhPTMwMCs1KjMwO2kuYXBwZW5kKCJsaW5lIikuYXR0cigiaWQiLCJ0YXNrIitQZGUpLmF0dHIoIngxIixuKS5hdHRyKCJ5MSIsZS55KS5hdHRyKCJ4MiIsbikuYXR0cigieTIiLGEpLmF0dHIoImNsYXNzIiwidGFzay1saW5lIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IikuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIsIjQgMiIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKSxxVWUoaSx7Y3g6bixjeTozMDArKDUtZS5zY29yZSkqMzAsc2NvcmU6ZS5zY29yZX0pO2xldCBzPVRsKCk7cy54PWUueCxzLnk9ZS55LHMuZmlsbD1lLmZpbGwscy53aWR0aD1yLndpZHRoLHMuaGVpZ2h0PXIuaGVpZ2h0LHMuY2xhc3M9InRhc2sgdGFzay10eXBlLSIrZS5udW0scy5yeD0zLHMucnk9MyxjUChpLHMpO2xldCBsPWUueCsxNDtlLnBlb3BsZS5mb3JFYWNoKHU9PntsZXQgaD1lLmFjdG9yc1t1XS5jb2xvcixmPXtjeDpsLGN5OmUueSxyOjcsZmlsbDpoLHN0cm9rZToiIzAwMCIsdGl0bGU6dSxwb3M6ZS5hY3RvcnNbdV0ucG9zaXRpb259O0JkZShpLGYpLGwrPTEwfSksJGRlKHIpKGUudGFzayxpLHMueCxzLnkscy53aWR0aCxzLmhlaWdodCx7Y2xhc3M6InRhc2sifSxyLGUuY29sb3VyKX0sImRyYXdUYXNrIiksS1VlPW8oZnVuY3Rpb24odCxlKXtxNSh0LGUpfSwiZHJhd0JhY2tncm91bmRSZWN0IiksJGRlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChpLGEscyxsLHUsaCxmLGQpe2xldCBwPWEuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIscyt1LzIpLmF0dHIoInkiLGwraC8yKzUpLnN0eWxlKCJmb250LWNvbG9yIixkKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KGkpO24ocCxmKX1vKHQsImJ5VGV4dCIpO2Z1bmN0aW9uIGUoaSxhLHMsbCx1LGgsZixkLHApe2xldHt0YXNrRm9udFNpemU6bSx0YXNrRm9udEZhbWlseTpnfT1kLHk9aS5zcGxpdCgvPGJyXHMqXC8/Pi9naSk7Zm9yKGxldCB2PTA7djx5Lmxlbmd0aDt2Kyspe2xldCB4PXYqbS1tKih5Lmxlbmd0aC0xKS8yLGI9YS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixzK3UvMikuYXR0cigieSIsbCkuYXR0cigiZmlsbCIscCkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuc3R5bGUoImZvbnQtc2l6ZSIsbSkuc3R5bGUoImZvbnQtZmFtaWx5IixnKTtiLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixzK3UvMikuYXR0cigiZHkiLHgpLnRleHQoeVt2XSksYi5hdHRyKCJ5IixsK2gvMikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLG4oYixmKX19byhlLCJieVRzcGFuIik7ZnVuY3Rpb24gcihpLGEscyxsLHUsaCxmLGQpe2xldCBwPWEuYXBwZW5kKCJzd2l0Y2giKSxnPXAuYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigieCIscykuYXR0cigieSIsbCkuYXR0cigid2lkdGgiLHUpLmF0dHIoImhlaWdodCIsaCkuYXR0cigicG9zaXRpb24iLCJmaXhlZCIpLmFwcGVuZCgieGh0bWw6ZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZSIpLnN0eWxlKCJoZWlnaHQiLCIxMDAlIikuc3R5bGUoIndpZHRoIiwiMTAwJSIpO2cuYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS50ZXh0KGkpLGUoaSxwLHMsbCx1LGgsZixkKSxuKGcsZil9byhyLCJieUZvIik7ZnVuY3Rpb24gbihpLGEpe2ZvcihsZXQgcyBpbiBhKXMgaW4gYSYmaS5hdHRyKHMsYVtzXSl9cmV0dXJuIG8obiwiX3NldFRleHRBdHRycyIpLGZ1bmN0aW9uKGkpe3JldHVybiBpLnRleHRQbGFjZW1lbnQ9PT0iZm8iP3I6aS50ZXh0UGxhY2VtZW50PT09Im9sZCI/dDplfX0oKSxRVWU9byhmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJhcnJvd2hlYWQiKS5hdHRyKCJyZWZYIiw1KS5hdHRyKCJyZWZZIiwyKS5hdHRyKCJtYXJrZXJXaWR0aCIsNikuYXR0cigibWFya2VySGVpZ2h0Iiw0KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCwwIFYgNCBMNiwyIFoiKX0sImluaXRHcmFwaGljcyIpLEkxPXtkcmF3UmVjdDpjUCxkcmF3Q2lyY2xlOkJkZSxkcmF3U2VjdGlvbjpYVWUsZHJhd1RleHQ6RmRlLGRyYXdMYWJlbDpZVWUsZHJhd1Rhc2s6alVlLGRyYXdCYWNrZ3JvdW5kUmVjdDpLVWUsaW5pdEdyYXBoaWNzOlFVZX19KTtmdW5jdGlvbiBKVWUodCl7bGV0IGU9bWUoKS5qb3VybmV5LHI9NjA7T2JqZWN0LmtleXMoanUpLmZvckVhY2gobj0+e2xldCBpPWp1W25dLmNvbG9yLGE9e2N4OjIwLGN5OnIscjo3LGZpbGw6aSxzdHJva2U6IiMwMDAiLHBvczpqdVtuXS5wb3NpdGlvbn07STEuZHJhd0NpcmNsZSh0LGEpO2xldCBzPXt4OjQwLHk6cis3LGZpbGw6IiM2NjYiLHRleHQ6bix0ZXh0TWFyZ2luOmUuYm94VGV4dE1hcmdpbnw1fTtJMS5kcmF3VGV4dCh0LHMpLHIrPTIwfSl9dmFyIFpVZSxqdSxxNixOcCxlSGUsWm8sdVAsR2RlLHRIZSxoUCxWZGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtkcigpO3pkZSgpO3p0KCk7RWkoKTtaVWU9byhmdW5jdGlvbih0KXtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3E2W3JdPXRbcl19KX0sInNldENvbmYiKSxqdT17fTtvKEpVZSwiZHJhd0FjdG9yTGVnZW5kIik7cTY9bWUoKS5qb3VybmV5LE5wPXE2LmxlZnRNYXJnaW4sZUhlPW8oZnVuY3Rpb24odCxlLHIsbil7bGV0IGk9bWUoKS5qb3VybmV5LGE9bWUoKS5zZWN1cml0eUxldmVsLHM7YT09PSJzYW5kYm94IiYmKHM9R2UoIiNpIitlKSk7bGV0IGw9YT09PSJzYW5kYm94Ij9HZShzLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpOkdlKCJib2R5Iik7Wm8uaW5pdCgpO2xldCB1PWwuc2VsZWN0KCIjIitlKTtJMS5pbml0R3JhcGhpY3ModSk7bGV0IGg9bi5kYi5nZXRUYXNrcygpLGY9bi5kYi5nZXREaWFncmFtVGl0bGUoKSxkPW4uZGIuZ2V0QWN0b3JzKCk7Zm9yKGxldCB4IGluIGp1KWRlbGV0ZSBqdVt4XTtsZXQgcD0wO2QuZm9yRWFjaCh4PT57anVbeF09e2NvbG9yOmkuYWN0b3JDb2xvdXJzW3AlaS5hY3RvckNvbG91cnMubGVuZ3RoXSxwb3NpdGlvbjpwfSxwKyt9KSxKVWUodSksWm8uaW5zZXJ0KDAsMCxOcCxPYmplY3Qua2V5cyhqdSkubGVuZ3RoKjUwKSx0SGUodSxoLDApO2xldCBtPVpvLmdldEJvdW5kcygpO2YmJnUuYXBwZW5kKCJ0ZXh0IikudGV4dChmKS5hdHRyKCJ4IixOcCkuYXR0cigiZm9udC1zaXplIiwiNGV4IikuYXR0cigiZm9udC13ZWlnaHQiLCJib2xkIikuYXR0cigieSIsMjUpO2xldCBnPW0uc3RvcHktbS5zdGFydHkrMippLmRpYWdyYW1NYXJnaW5ZLHk9TnArbS5zdG9weCsyKmkuZGlhZ3JhbU1hcmdpblg7dm4odSxnLHksaS51c2VNYXhXaWR0aCksdS5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsTnApLmF0dHIoInkxIixpLmhlaWdodCo0KS5hdHRyKCJ4MiIseS1OcC00KS5hdHRyKCJ5MiIsaS5oZWlnaHQqNCkuYXR0cigic3Ryb2tlLXdpZHRoIiw0KS5hdHRyKCJzdHJva2UiLCJibGFjayIpLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoI2Fycm93aGVhZCkiKTtsZXQgdj1mPzcwOjA7dS5hdHRyKCJ2aWV3Qm94IixgJHttLnN0YXJ0eH0gLTI1ICR7eX0gJHtnK3Z9YCksdS5hdHRyKCJwcmVzZXJ2ZUFzcGVjdFJhdGlvIiwieE1pbllNaW4gbWVldCIpLHUuYXR0cigiaGVpZ2h0IixnK3YrMjUpfSwiZHJhdyIpLFpvPXtkYXRhOntzdGFydHg6dm9pZCAwLHN0b3B4OnZvaWQgMCxzdGFydHk6dm9pZCAwLHN0b3B5OnZvaWQgMH0sdmVydGljYWxQb3M6MCxzZXF1ZW5jZUl0ZW1zOltdLGluaXQ6byhmdW5jdGlvbigpe3RoaXMuc2VxdWVuY2VJdGVtcz1bXSx0aGlzLmRhdGE9e3N0YXJ0eDp2b2lkIDAsc3RvcHg6dm9pZCAwLHN0YXJ0eTp2b2lkIDAsc3RvcHk6dm9pZCAwfSx0aGlzLnZlcnRpY2FsUG9zPTB9LCJpbml0IiksdXBkYXRlVmFsOm8oZnVuY3Rpb24odCxlLHIsbil7dFtlXT09PXZvaWQgMD90W2VdPXI6dFtlXT1uKHIsdFtlXSl9LCJ1cGRhdGVWYWwiKSx1cGRhdGVCb3VuZHM6byhmdW5jdGlvbih0LGUscixuKXtsZXQgaT1tZSgpLmpvdXJuZXksYT10aGlzLHM9MDtmdW5jdGlvbiBsKHUpe3JldHVybiBvKGZ1bmN0aW9uKGYpe3MrKztsZXQgZD1hLnNlcXVlbmNlSXRlbXMubGVuZ3RoLXMrMTthLnVwZGF0ZVZhbChmLCJzdGFydHkiLGUtZCppLmJveE1hcmdpbixNYXRoLm1pbiksYS51cGRhdGVWYWwoZiwic3RvcHkiLG4rZCppLmJveE1hcmdpbixNYXRoLm1heCksYS51cGRhdGVWYWwoWm8uZGF0YSwic3RhcnR4Iix0LWQqaS5ib3hNYXJnaW4sTWF0aC5taW4pLGEudXBkYXRlVmFsKFpvLmRhdGEsInN0b3B4IixyK2QqaS5ib3hNYXJnaW4sTWF0aC5tYXgpLHUhPT0iYWN0aXZhdGlvbiImJihhLnVwZGF0ZVZhbChmLCJzdGFydHgiLHQtZCppLmJveE1hcmdpbixNYXRoLm1pbiksYS51cGRhdGVWYWwoZiwic3RvcHgiLHIrZCppLmJveE1hcmdpbixNYXRoLm1heCksYS51cGRhdGVWYWwoWm8uZGF0YSwic3RhcnR5IixlLWQqaS5ib3hNYXJnaW4sTWF0aC5taW4pLGEudXBkYXRlVmFsKFpvLmRhdGEsInN0b3B5IixuK2QqaS5ib3hNYXJnaW4sTWF0aC5tYXgpKX0sInVwZGF0ZUl0ZW1Cb3VuZHMiKX1vKGwsInVwZGF0ZUZuIiksdGhpcy5zZXF1ZW5jZUl0ZW1zLmZvckVhY2gobCgpKX0sInVwZGF0ZUJvdW5kcyIpLGluc2VydDpvKGZ1bmN0aW9uKHQsZSxyLG4pe2xldCBpPU1hdGgubWluKHQsciksYT1NYXRoLm1heCh0LHIpLHM9TWF0aC5taW4oZSxuKSxsPU1hdGgubWF4KGUsbik7dGhpcy51cGRhdGVWYWwoWm8uZGF0YSwic3RhcnR4IixpLE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbChaby5kYXRhLCJzdGFydHkiLHMsTWF0aC5taW4pLHRoaXMudXBkYXRlVmFsKFpvLmRhdGEsInN0b3B4IixhLE1hdGgubWF4KSx0aGlzLnVwZGF0ZVZhbChaby5kYXRhLCJzdG9weSIsbCxNYXRoLm1heCksdGhpcy51cGRhdGVCb3VuZHMoaSxzLGEsbCl9LCJpbnNlcnQiKSxidW1wVmVydGljYWxQb3M6byhmdW5jdGlvbih0KXt0aGlzLnZlcnRpY2FsUG9zPXRoaXMudmVydGljYWxQb3MrdCx0aGlzLmRhdGEuc3RvcHk9dGhpcy52ZXJ0aWNhbFBvc30sImJ1bXBWZXJ0aWNhbFBvcyIpLGdldFZlcnRpY2FsUG9zOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52ZXJ0aWNhbFBvc30sImdldFZlcnRpY2FsUG9zIiksZ2V0Qm91bmRzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhfSwiZ2V0Qm91bmRzIil9LHVQPXE2LnNlY3Rpb25GaWxscyxHZGU9cTYuc2VjdGlvbkNvbG91cnMsdEhlPW8oZnVuY3Rpb24odCxlLHIpe2xldCBuPW1lKCkuam91cm5leSxpPSIiLGE9bi5oZWlnaHQqMituLmRpYWdyYW1NYXJnaW5ZLHM9cithLGw9MCx1PSIjQ0NDIixoPSJibGFjayIsZj0wO2ZvcihsZXRbZCxwXW9mIGUuZW50cmllcygpKXtpZihpIT09cC5zZWN0aW9uKXt1PXVQW2wldVAubGVuZ3RoXSxmPWwldVAubGVuZ3RoLGg9R2RlW2wlR2RlLmxlbmd0aF07bGV0IGc9MCx5PXAuc2VjdGlvbjtmb3IobGV0IHg9ZDt4PGUubGVuZ3RoJiZlW3hdLnNlY3Rpb249PXk7eCsrKWc9ZysxO2xldCB2PXt4OmQqbi50YXNrTWFyZ2luK2Qqbi53aWR0aCtOcCx5OjUwLHRleHQ6cC5zZWN0aW9uLGZpbGw6dSxudW06Zixjb2xvdXI6aCx0YXNrQ291bnQ6Z307STEuZHJhd1NlY3Rpb24odCx2LG4pLGk9cC5zZWN0aW9uLGwrK31sZXQgbT1wLnBlb3BsZS5yZWR1Y2UoKGcseSk9PihqdVt5XSYmKGdbeV09anVbeV0pLGcpLHt9KTtwLng9ZCpuLnRhc2tNYXJnaW4rZCpuLndpZHRoK05wLHAueT1zLHAud2lkdGg9bi5kaWFncmFtTWFyZ2luWCxwLmhlaWdodD1uLmRpYWdyYW1NYXJnaW5ZLHAuY29sb3VyPWgscC5maWxsPXUscC5udW09ZixwLmFjdG9ycz1tLEkxLmRyYXdUYXNrKHQscCxuKSxaby5pbnNlcnQocC54LHAueSxwLngrcC53aWR0aCtuLnRhc2tNYXJnaW4sMzAwKzUqMzApfX0sImRyYXdUYXNrcyIpLGhQPXtzZXRDb25mOlpVZSxkcmF3OmVIZX19KTt2YXIgVWRlPXt9O2hyKFVkZSx7ZGlhZ3JhbTooKT0+ckhlfSk7dmFyIHJIZSxIZGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtSZGUoKTtNZGUoKTtPZGUoKTtWZGUoKTtySGU9e3BhcnNlcjpMZGUsZGI6bFAscmVuZGVyZXI6aFAsc3R5bGVzOklkZSxpbml0Om8odD0+e2hQLnNldENvbmYodC5qb3VybmV5KSxsUC5jbGVhcigpfSwiaW5pdCIpfX0pO3ZhciBkUCxRZGUsWmRlPU4oKCk9PnsidXNlIHN0cmljdCI7ZFA9ZnVuY3Rpb24oKXt2YXIgdD1vKGZ1bmN0aW9uKHAsbSxnLHkpe2ZvcihnPWd8fHt9LHk9cC5sZW5ndGg7eS0tO2dbcFt5XV09bSk7cmV0dXJuIGd9LCJvIiksZT1bNiw4LDEwLDExLDEyLDE0LDE2LDE3LDIwLDIxXSxyPVsxLDldLG49WzEsMTBdLGk9WzEsMTFdLGE9WzEsMTJdLHM9WzEsMTNdLGw9WzEsMTZdLHU9WzEsMTddLGg9e3RyYWNlOm8oZnVuY3Rpb24oKXt9LCJ0cmFjZSIpLHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsdGltZWxpbmU6NCxkb2N1bWVudDo1LEVPRjo2LGxpbmU6NyxTUEFDRTo4LHN0YXRlbWVudDo5LE5FV0xJTkU6MTAsdGl0bGU6MTEsYWNjX3RpdGxlOjEyLGFjY190aXRsZV92YWx1ZToxMyxhY2NfZGVzY3I6MTQsYWNjX2Rlc2NyX3ZhbHVlOjE1LGFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWU6MTYsc2VjdGlvbjoxNyxwZXJpb2Rfc3RhdGVtZW50OjE4LGV2ZW50X3N0YXRlbWVudDoxOSxwZXJpb2Q6MjAsZXZlbnQ6MjEsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6InRpbWVsaW5lIiw2OiJFT0YiLDg6IlNQQUNFIiwxMDoiTkVXTElORSIsMTE6InRpdGxlIiwxMjoiYWNjX3RpdGxlIiwxMzoiYWNjX3RpdGxlX3ZhbHVlIiwxNDoiYWNjX2Rlc2NyIiwxNToiYWNjX2Rlc2NyX3ZhbHVlIiwxNjoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMTc6InNlY3Rpb24iLDIwOiJwZXJpb2QiLDIxOiJldmVudCJ9LHByb2R1Y3Rpb25zXzpbMCxbMywzXSxbNSwwXSxbNSwyXSxbNywyXSxbNywxXSxbNywxXSxbNywxXSxbOSwxXSxbOSwyXSxbOSwyXSxbOSwxXSxbOSwxXSxbOSwxXSxbOSwxXSxbMTgsMV0sWzE5LDFdXSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24obSxnLHksdix4LGIsdyl7dmFyIEM9Yi5sZW5ndGgtMTtzd2l0Y2goeCl7Y2FzZSAxOnJldHVybiBiW0MtMV07Y2FzZSAyOnRoaXMuJD1bXTticmVhaztjYXNlIDM6YltDLTFdLnB1c2goYltDXSksdGhpcy4kPWJbQy0xXTticmVhaztjYXNlIDQ6Y2FzZSA1OnRoaXMuJD1iW0NdO2JyZWFrO2Nhc2UgNjpjYXNlIDc6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgODp2LmdldENvbW1vbkRiKCkuc2V0RGlhZ3JhbVRpdGxlKGJbQ10uc3Vic3RyKDYpKSx0aGlzLiQ9YltDXS5zdWJzdHIoNik7YnJlYWs7Y2FzZSA5OnRoaXMuJD1iW0NdLnRyaW0oKSx2LmdldENvbW1vbkRiKCkuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDEwOmNhc2UgMTE6dGhpcy4kPWJbQ10udHJpbSgpLHYuZ2V0Q29tbW9uRGIoKS5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO2JyZWFrO2Nhc2UgMTI6di5hZGRTZWN0aW9uKGJbQ10uc3Vic3RyKDgpKSx0aGlzLiQ9YltDXS5zdWJzdHIoOCk7YnJlYWs7Y2FzZSAxNTp2LmFkZFRhc2soYltDXSwwLCIiKSx0aGlzLiQ9YltDXTticmVhaztjYXNlIDE2OnYuYWRkRXZlbnQoYltDXS5zdWJzdHIoMikpLHRoaXMuJD1iW0NdO2JyZWFrfX0sImFub255bW91cyIpLHRhYmxlOlt7MzoxLDQ6WzEsMl19LHsxOlszXX0sdChlLFsyLDJdLHs1OjN9KSx7NjpbMSw0XSw3OjUsODpbMSw2XSw5OjcsMTA6WzEsOF0sMTE6ciwxMjpuLDE0OmksMTY6YSwxNzpzLDE4OjE0LDE5OjE1LDIwOmwsMjE6dX0sdChlLFsyLDddLHsxOlsyLDFdfSksdChlLFsyLDNdKSx7OToxOCwxMTpyLDEyOm4sMTQ6aSwxNjphLDE3OnMsMTg6MTQsMTk6MTUsMjA6bCwyMTp1fSx0KGUsWzIsNV0pLHQoZSxbMiw2XSksdChlLFsyLDhdKSx7MTM6WzEsMTldfSx7MTU6WzEsMjBdfSx0KGUsWzIsMTFdKSx0KGUsWzIsMTJdKSx0KGUsWzIsMTNdKSx0KGUsWzIsMTRdKSx0KGUsWzIsMTVdKSx0KGUsWzIsMTZdKSx0KGUsWzIsNF0pLHQoZSxbMiw5XSksdChlLFsyLDEwXSldLGRlZmF1bHRBY3Rpb25zOnt9LHBhcnNlRXJyb3I6byhmdW5jdGlvbihtLGcpe2lmKGcucmVjb3ZlcmFibGUpdGhpcy50cmFjZShtKTtlbHNle3ZhciB5PW5ldyBFcnJvcihtKTt0aHJvdyB5Lmhhc2g9Zyx5fX0sInBhcnNlRXJyb3IiKSxwYXJzZTpvKGZ1bmN0aW9uKG0pe3ZhciBnPXRoaXMseT1bMF0sdj1bXSx4PVtudWxsXSxiPVtdLHc9dGhpcy50YWJsZSxDPSIiLFQ9MCxFPTAsQT0wLFM9MixfPTEsST1iLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLEQ9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxrPXt5eTp7fX07Zm9yKHZhciBMIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksTCkmJihrLnl5W0xdPXRoaXMueXlbTF0pO0Quc2V0SW5wdXQobSxrLnl5KSxrLnl5LmxleGVyPUQsay55eS5wYXJzZXI9dGhpcyx0eXBlb2YgRC55eWxsb2M+InUiJiYoRC55eWxsb2M9e30pO3ZhciBSPUQueXlsbG9jO2IucHVzaChSKTt2YXIgTz1ELm9wdGlvbnMmJkQub3B0aW9ucy5yYW5nZXM7dHlwZW9mIGsueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9ay55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBNKFgpe3kubGVuZ3RoPXkubGVuZ3RoLTIqWCx4Lmxlbmd0aD14Lmxlbmd0aC1YLGIubGVuZ3RoPWIubGVuZ3RoLVh9byhNLCJwb3BTdGFjayIpO2Z1bmN0aW9uIEIoKXt2YXIgWDtyZXR1cm4gWD12LnBvcCgpfHxELmxleCgpfHxfLHR5cGVvZiBYIT0ibnVtYmVyIiYmKFggaW5zdGFuY2VvZiBBcnJheSYmKHY9WCxYPXYucG9wKCkpLFg9Zy5zeW1ib2xzX1tYXXx8WCksWH1vKEIsImxleCIpO2Zvcih2YXIgRixQLHosJCxILFEsaj17fSxpZSxuZSxsZSxoZTs7KXtpZih6PXlbeS5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1t6XT8kPXRoaXMuZGVmYXVsdEFjdGlvbnNbel06KChGPT09bnVsbHx8dHlwZW9mIEY+InUiKSYmKEY9QigpKSwkPXdbel0mJndbel1bRl0pLHR5cGVvZiAkPiJ1Inx8ISQubGVuZ3RofHwhJFswXSl7dmFyIEs9IiI7aGU9W107Zm9yKGllIGluIHdbel0pdGhpcy50ZXJtaW5hbHNfW2llXSYmaWU+UyYmaGUucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW2llXSsiJyIpO0Quc2hvd1Bvc2l0aW9uP0s9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoVCsxKStgOgpgK0Quc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtoZS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW0ZdfHxGKSsiJyI6Sz0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhUKzEpKyI6IFVuZXhwZWN0ZWQgIisoRj09Xz8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tGXXx8RikrIiciKSx0aGlzLnBhcnNlRXJyb3IoSyx7dGV4dDpELm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tGXXx8RixsaW5lOkQueXlsaW5lbm8sbG9jOlIsZXhwZWN0ZWQ6aGV9KX1pZigkWzBdaW5zdGFuY2VvZiBBcnJheSYmJC5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK3orIiwgdG9rZW46ICIrRik7c3dpdGNoKCRbMF0pe2Nhc2UgMTp5LnB1c2goRikseC5wdXNoKEQueXl0ZXh0KSxiLnB1c2goRC55eWxsb2MpLHkucHVzaCgkWzFdKSxGPW51bGwsUD8oRj1QLFA9bnVsbCk6KEU9RC55eWxlbmcsQz1ELnl5dGV4dCxUPUQueXlsaW5lbm8sUj1ELnl5bGxvYyxBPjAmJkEtLSk7YnJlYWs7Y2FzZSAyOmlmKG5lPXRoaXMucHJvZHVjdGlvbnNfWyRbMV1dWzFdLGouJD14W3gubGVuZ3RoLW5lXSxqLl8kPXtmaXJzdF9saW5lOmJbYi5sZW5ndGgtKG5lfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6YltiLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmJbYi5sZW5ndGgtKG5lfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmJbYi5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LE8mJihqLl8kLnJhbmdlPVtiW2IubGVuZ3RoLShuZXx8MSldLnJhbmdlWzBdLGJbYi5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxRPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShqLFtDLEUsVCxrLnl5LCRbMV0seCxiXS5jb25jYXQoSSkpLHR5cGVvZiBRPCJ1IilyZXR1cm4gUTtuZSYmKHk9eS5zbGljZSgwLC0xKm5lKjIpLHg9eC5zbGljZSgwLC0xKm5lKSxiPWIuc2xpY2UoMCwtMSpuZSkpLHkucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1skWzFdXVswXSkseC5wdXNoKGouJCksYi5wdXNoKGouXyQpLGxlPXdbeVt5Lmxlbmd0aC0yXV1beVt5Lmxlbmd0aC0xXV0seS5wdXNoKGxlKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfSwicGFyc2UiKX0sZj1mdW5jdGlvbigpe3ZhciBwPXtFT0Y6MSxwYXJzZUVycm9yOm8oZnVuY3Rpb24oZyx5KXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKGcseSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoZyl9LCJwYXJzZUVycm9yIiksc2V0SW5wdXQ6byhmdW5jdGlvbihtLGcpe3JldHVybiB0aGlzLnl5PWd8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PW0sdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LCJzZXRJbnB1dCIpLGlucHV0Om8oZnVuY3Rpb24oKXt2YXIgbT10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9bSx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9bSx0aGlzLm1hdGNoZWQrPW07dmFyIGc9bS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIGc/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLG19LCJpbnB1dCIpLHVucHV0Om8oZnVuY3Rpb24obSl7dmFyIGc9bS5sZW5ndGgseT1tLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9bSt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtZyksdGhpcy5vZmZzZXQtPWc7dmFyIHY9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSkseS5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPXkubGVuZ3RoLTEpO3ZhciB4PXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp5Pyh5Lmxlbmd0aD09PXYubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKSt2W3YubGVuZ3RoLXkubGVuZ3RoXS5sZW5ndGgteVswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWd9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1beFswXSx4WzBdK3RoaXMueXlsZW5nLWddKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sInVucHV0IiksbW9yZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30sIm1vcmUiKSxyZWplY3Q6byhmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sInJlamVjdCIpLGxlc3M6byhmdW5jdGlvbihtKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UobSkpfSwibGVzcyIpLHBhc3RJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIG09dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihtLmxlbmd0aD4yMD8iLi4uIjoiIikrbS5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sInBhc3RJbnB1dCIpLHVwY29taW5nSW5wdXQ6byhmdW5jdGlvbigpe3ZhciBtPXRoaXMubWF0Y2g7cmV0dXJuIG0ubGVuZ3RoPDIwJiYobSs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtbS5sZW5ndGgpKSwobS5zdWJzdHIoMCwyMCkrKG0ubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LCJ1cGNvbWluZ0lucHV0Iiksc2hvd1Bvc2l0aW9uOm8oZnVuY3Rpb24oKXt2YXIgbT10aGlzLnBhc3RJbnB1dCgpLGc9bmV3IEFycmF5KG0ubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gbSt0aGlzLnVwY29taW5nSW5wdXQoKStgCmArZysiXiJ9LCJzaG93UG9zaXRpb24iKSx0ZXN0X21hdGNoOm8oZnVuY3Rpb24obSxnKXt2YXIgeSx2LHg7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKHg9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoeC55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSx2PW1bMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLHYmJih0aGlzLnl5bGluZW5vKz12Lmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnY/dlt2Lmxlbmd0aC0xXS5sZW5ndGgtdlt2Lmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK21bMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9bVswXSx0aGlzLm1hdGNoKz1tWzBdLHRoaXMubWF0Y2hlcz1tLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKG1bMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPW1bMF0seT10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxnLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLHkpcmV0dXJuIHk7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIGIgaW4geCl0aGlzW2JdPXhbYl07cmV0dXJuITF9cmV0dXJuITF9LCJ0ZXN0X21hdGNoIiksbmV4dDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIG0sZyx5LHY7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgeD10aGlzLl9jdXJyZW50UnVsZXMoKSxiPTA7Yjx4Lmxlbmd0aDtiKyspaWYoeT10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW3hbYl1dKSx5JiYoIWd8fHlbMF0ubGVuZ3RoPmdbMF0ubGVuZ3RoKSl7aWYoZz15LHY9Yix0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihtPXRoaXMudGVzdF9tYXRjaCh5LHhbYl0pLG0hPT0hMSlyZXR1cm4gbTtpZih0aGlzLl9iYWNrdHJhY2spe2c9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gZz8obT10aGlzLnRlc3RfbWF0Y2goZyx4W3ZdKSxtIT09ITE/bTohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sIm5leHQiKSxsZXg6byhmdW5jdGlvbigpe3ZhciBnPXRoaXMubmV4dCgpO3JldHVybiBnfHx0aGlzLmxleCgpfSwibGV4IiksYmVnaW46byhmdW5jdGlvbihnKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goZyl9LCJiZWdpbiIpLHBvcFN0YXRlOm8oZnVuY3Rpb24oKXt2YXIgZz10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBnPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSwicG9wU3RhdGUiKSxfY3VycmVudFJ1bGVzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSwiX2N1cnJlbnRSdWxlcyIpLHRvcFN0YXRlOm8oZnVuY3Rpb24oZyl7cmV0dXJuIGc9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhnfHwwKSxnPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbZ106IklOSVRJQUwifSwidG9wU3RhdGUiKSxwdXNoU3RhdGU6byhmdW5jdGlvbihnKXt0aGlzLmJlZ2luKGcpfSwicHVzaFN0YXRlIiksc3RhdGVTdGFja1NpemU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sInN0YXRlU3RhY2tTaXplIiksb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24oZyx5LHYseCl7dmFyIGI9eDtzd2l0Y2godil7Y2FzZSAwOmJyZWFrO2Nhc2UgMTpicmVhaztjYXNlIDI6cmV0dXJuIDEwO2Nhc2UgMzpicmVhaztjYXNlIDQ6YnJlYWs7Y2FzZSA1OnJldHVybiA0O2Nhc2UgNjpyZXR1cm4gMTE7Y2FzZSA3OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwxMjticmVhaztjYXNlIDg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjticmVhaztjYXNlIDk6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDE0O2JyZWFrO2Nhc2UgMTA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjticmVhaztjYXNlIDExOnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDEyOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDEzOnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDE0OnJldHVybiAxNztjYXNlIDE1OnJldHVybiAyMTtjYXNlIDE2OnJldHVybiAyMDtjYXNlIDE3OnJldHVybiA2O2Nhc2UgMTg6cmV0dXJuIklOVkFMSUQifX0sImFub255bW91cyIpLHJ1bGVzOlsvXig/OiUoPyFceylbXlxuXSopL2ksL14oPzpbXlx9XSUlW15cbl0qKS9pLC9eKD86W1xuXSspL2ksL14oPzpccyspL2ksL14oPzojW15cbl0qKS9pLC9eKD86dGltZWxpbmVcYikvaSwvXig/OnRpdGxlXHNbXlxuXSspL2ksL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/OnNlY3Rpb25cc1teOlxuXSspL2ksL14oPzo6XHNbXjpcbl0rKS9pLC9eKD86W14jOlxuXSspL2ksL14oPzokKS9pLC9eKD86LikvaV0sY29uZGl0aW9uczp7YWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzEyLDEzXSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzEwXSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzhdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw1LDYsNyw5LDExLDE0LDE1LDE2LDE3LDE4XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIHB9KCk7aC5sZXhlcj1mO2Z1bmN0aW9uIGQoKXt0aGlzLnl5PXt9fXJldHVybiBvKGQsIlBhcnNlciIpLGQucHJvdG90eXBlPWgsaC5QYXJzZXI9ZCxuZXcgZH0oKTtkUC5wYXJzZXI9ZFA7UWRlPWRQfSk7dmFyIG1QPXt9O2hyKG1QLHthZGRFdmVudDooKT0+b3BlLGFkZFNlY3Rpb246KCk9Pm5wZSxhZGRUYXNrOigpPT5zcGUsYWRkVGFza09yZzooKT0+bHBlLGNsZWFyOigpPT5ycGUsZGVmYXVsdDooKT0+aEhlLGdldENvbW1vbkRiOigpPT50cGUsZ2V0U2VjdGlvbnM6KCk9PmlwZSxnZXRUYXNrczooKT0+YXBlfSk7dmFyIE8xLGVwZSxwUCxZNixQMSx0cGUscnBlLG5wZSxpcGUsYXBlLHNwZSxvcGUsbHBlLEpkZSxoSGUsY3BlPU4oKCk9PnsidXNlIHN0cmljdCI7bWkoKTtPMT0iIixlcGU9MCxwUD1bXSxZNj1bXSxQMT1bXSx0cGU9bygoKT0+cXksImdldENvbW1vbkRiIikscnBlPW8oZnVuY3Rpb24oKXtwUC5sZW5ndGg9MCxZNi5sZW5ndGg9MCxPMT0iIixQMS5sZW5ndGg9MCxBcigpfSwiY2xlYXIiKSxucGU9byhmdW5jdGlvbih0KXtPMT10LHBQLnB1c2godCl9LCJhZGRTZWN0aW9uIiksaXBlPW8oZnVuY3Rpb24oKXtyZXR1cm4gcFB9LCJnZXRTZWN0aW9ucyIpLGFwZT1vKGZ1bmN0aW9uKCl7bGV0IHQ9SmRlKCksZT0xMDAscj0wO2Zvcig7IXQmJnI8ZTspdD1KZGUoKSxyKys7cmV0dXJuIFk2LnB1c2goLi4uUDEpLFk2fSwiZ2V0VGFza3MiKSxzcGU9byhmdW5jdGlvbih0LGUscil7bGV0IG49e2lkOmVwZSsrLHNlY3Rpb246TzEsdHlwZTpPMSx0YXNrOnQsc2NvcmU6ZXx8MCxldmVudHM6cj9bcl06W119O1AxLnB1c2gobil9LCJhZGRUYXNrIiksb3BlPW8oZnVuY3Rpb24odCl7UDEuZmluZChyPT5yLmlkPT09ZXBlLTEpLmV2ZW50cy5wdXNoKHQpfSwiYWRkRXZlbnQiKSxscGU9byhmdW5jdGlvbih0KXtsZXQgZT17c2VjdGlvbjpPMSx0eXBlOk8xLGRlc2NyaXB0aW9uOnQsdGFzazp0LGNsYXNzZXM6W119O1k2LnB1c2goZSl9LCJhZGRUYXNrT3JnIiksSmRlPW8oZnVuY3Rpb24oKXtsZXQgdD1vKGZ1bmN0aW9uKHIpe3JldHVybiBQMVtyXS5wcm9jZXNzZWR9LCJjb21waWxlVGFzayIpLGU9ITA7Zm9yKGxldFtyLG5db2YgUDEuZW50cmllcygpKXQociksZT1lJiZuLnByb2Nlc3NlZDtyZXR1cm4gZX0sImNvbXBpbGVUYXNrcyIpLGhIZT17Y2xlYXI6cnBlLGdldENvbW1vbkRiOnRwZSxhZGRTZWN0aW9uOm5wZSxnZXRTZWN0aW9uczppcGUsZ2V0VGFza3M6YXBlLGFkZFRhc2s6c3BlLGFkZFRhc2tPcmc6bHBlLGFkZEV2ZW50Om9wZX19KTtmdW5jdGlvbiBkcGUodCxlKXt0LmVhY2goZnVuY3Rpb24oKXt2YXIgcj1HZSh0aGlzKSxuPXIudGV4dCgpLnNwbGl0KC8oXHMrfDxicj4pLykucmV2ZXJzZSgpLGksYT1bXSxzPTEuMSxsPXIuYXR0cigieSIpLHU9cGFyc2VGbG9hdChyLmF0dHIoImR5IikpLGg9ci50ZXh0KG51bGwpLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IixsKS5hdHRyKCJkeSIsdSsiZW0iKTtmb3IobGV0IGY9MDtmPG4ubGVuZ3RoO2YrKylpPW5bbi5sZW5ndGgtMS1mXSxhLnB1c2goaSksaC50ZXh0KGEuam9pbigiICIpLnRyaW0oKSksKGgubm9kZSgpLmdldENvbXB1dGVkVGV4dExlbmd0aCgpPmV8fGk9PT0iPGJyPiIpJiYoYS5wb3AoKSxoLnRleHQoYS5qb2luKCIgIikudHJpbSgpKSxpPT09Ijxicj4iP2E9WyIiXTphPVtpXSxoPXIuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLDApLmF0dHIoInkiLGwpLmF0dHIoImR5IixzKyJlbSIpLnRleHQoaSkpfSl9dmFyIGZIZSxYNixkSGUscEhlLGhwZSxtSGUsZ0hlLHVwZSx5SGUsdkhlLHhIZSxnUCxmcGUsYkhlLHdIZSxUSGUsa0hlLGJmLHBwZT1OKCgpPT57InVzZSBzdHJpY3QiO2RyKCk7ZkhlPTEyLFg2PW8oZnVuY3Rpb24odCxlKXtsZXQgcj10LmFwcGVuZCgicmVjdCIpO3JldHVybiByLmF0dHIoIngiLGUueCksci5hdHRyKCJ5IixlLnkpLHIuYXR0cigiZmlsbCIsZS5maWxsKSxyLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLHIuYXR0cigid2lkdGgiLGUud2lkdGgpLHIuYXR0cigiaGVpZ2h0IixlLmhlaWdodCksci5hdHRyKCJyeCIsZS5yeCksci5hdHRyKCJyeSIsZS5yeSksZS5jbGFzcyE9PXZvaWQgMCYmci5hdHRyKCJjbGFzcyIsZS5jbGFzcykscn0sImRyYXdSZWN0IiksZEhlPW8oZnVuY3Rpb24odCxlKXtsZXQgbj10LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLGUuY3gpLmF0dHIoImN5IixlLmN5KS5hdHRyKCJjbGFzcyIsImZhY2UiKS5hdHRyKCJyIiwxNSkuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJvdmVyZmxvdyIsInZpc2libGUiKSxpPXQuYXBwZW5kKCJnIik7aS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IixlLmN4LTE1LzMpLmF0dHIoImN5IixlLmN5LTE1LzMpLmF0dHIoInIiLDEuNSkuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJmaWxsIiwiIzY2NiIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKSxpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLGUuY3grMTUvMykuYXR0cigiY3kiLGUuY3ktMTUvMykuYXR0cigiciIsMS41KS5hdHRyKCJzdHJva2Utd2lkdGgiLDIpLmF0dHIoImZpbGwiLCIjNjY2IikuYXR0cigic3Ryb2tlIiwiIzY2NiIpO2Z1bmN0aW9uIGEodSl7bGV0IGg9YmwoKS5zdGFydEFuZ2xlKE1hdGguUEkvMikuZW5kQW5nbGUoMyooTWF0aC5QSS8yKSkuaW5uZXJSYWRpdXMoNy41KS5vdXRlclJhZGl1cyg2LjgxODE4MTgxODE4MTgxNzUpO3UuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJtb3V0aCIpLmF0dHIoImQiLGgpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2UuY3grIiwiKyhlLmN5KzIpKyIpIil9byhhLCJzbWlsZSIpO2Z1bmN0aW9uIHModSl7bGV0IGg9YmwoKS5zdGFydEFuZ2xlKDMqTWF0aC5QSS8yKS5lbmRBbmdsZSg1KihNYXRoLlBJLzIpKS5pbm5lclJhZGl1cyg3LjUpLm91dGVyUmFkaXVzKDYuODE4MTgxODE4MTgxODE3NSk7dS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigiZCIsaCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrZS5jeCsiLCIrKGUuY3krNykrIikiKX1vKHMsInNhZCIpO2Z1bmN0aW9uIGwodSl7dS5hcHBlbmQoImxpbmUiKS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigic3Ryb2tlIiwyKS5hdHRyKCJ4MSIsZS5jeC01KS5hdHRyKCJ5MSIsZS5jeSs3KS5hdHRyKCJ4MiIsZS5jeCs1KS5hdHRyKCJ5MiIsZS5jeSs3KS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IikuYXR0cigic3Ryb2tlIiwiIzY2NiIpfXJldHVybiBvKGwsImFtYml2YWxlbnQiKSxlLnNjb3JlPjM/YShpKTplLnNjb3JlPDM/cyhpKTpsKGkpLG59LCJkcmF3RmFjZSIpLHBIZT1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9dC5hcHBlbmQoImNpcmNsZSIpO3JldHVybiByLmF0dHIoImN4IixlLmN4KSxyLmF0dHIoImN5IixlLmN5KSxyLmF0dHIoImNsYXNzIiwiYWN0b3ItIitlLnBvcyksci5hdHRyKCJmaWxsIixlLmZpbGwpLHIuYXR0cigic3Ryb2tlIixlLnN0cm9rZSksci5hdHRyKCJyIixlLnIpLHIuY2xhc3MhPT12b2lkIDAmJnIuYXR0cigiY2xhc3MiLHIuY2xhc3MpLGUudGl0bGUhPT12b2lkIDAmJnIuYXBwZW5kKCJ0aXRsZSIpLnRleHQoZS50aXRsZSkscn0sImRyYXdDaXJjbGUiKSxocGU9byhmdW5jdGlvbih0LGUpe2xldCByPWUudGV4dC5yZXBsYWNlKC88YnJccypcLz8+L2dpLCIgIiksbj10LmFwcGVuZCgidGV4dCIpO24uYXR0cigieCIsZS54KSxuLmF0dHIoInkiLGUueSksbi5hdHRyKCJjbGFzcyIsImxlZ2VuZCIpLG4uc3R5bGUoInRleHQtYW5jaG9yIixlLmFuY2hvciksZS5jbGFzcyE9PXZvaWQgMCYmbi5hdHRyKCJjbGFzcyIsZS5jbGFzcyk7bGV0IGk9bi5hcHBlbmQoInRzcGFuIik7cmV0dXJuIGkuYXR0cigieCIsZS54K2UudGV4dE1hcmdpbioyKSxpLnRleHQociksbn0sImRyYXdUZXh0IiksbUhlPW8oZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKGksYSxzLGwsdSl7cmV0dXJuIGkrIiwiK2ErIiAiKyhpK3MpKyIsIithKyIgIisoaStzKSsiLCIrKGErbC11KSsiICIrKGkrcy11KjEuMikrIiwiKyhhK2wpKyIgIitpKyIsIisoYStsKX1vKHIsImdlblBvaW50cyIpO2xldCBuPXQuYXBwZW5kKCJwb2x5Z29uIik7bi5hdHRyKCJwb2ludHMiLHIoZS54LGUueSw1MCwyMCw3KSksbi5hdHRyKCJjbGFzcyIsImxhYmVsQm94IiksZS55PWUueStlLmxhYmVsTWFyZ2luLGUueD1lLngrLjUqZS5sYWJlbE1hcmdpbixocGUodCxlKX0sImRyYXdMYWJlbCIpLGdIZT1vKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj10LmFwcGVuZCgiZyIpLGk9Z1AoKTtpLng9ZS54LGkueT1lLnksaS5maWxsPWUuZmlsbCxpLndpZHRoPXIud2lkdGgsaS5oZWlnaHQ9ci5oZWlnaHQsaS5jbGFzcz0iam91cm5leS1zZWN0aW9uIHNlY3Rpb24tdHlwZS0iK2UubnVtLGkucng9MyxpLnJ5PTMsWDYobixpKSxmcGUocikoZS50ZXh0LG4saS54LGkueSxpLndpZHRoLGkuaGVpZ2h0LHtjbGFzczoiam91cm5leS1zZWN0aW9uIHNlY3Rpb24tdHlwZS0iK2UubnVtfSxyLGUuY29sb3VyKX0sImRyYXdTZWN0aW9uIiksdXBlPS0xLHlIZT1vKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj1lLngrci53aWR0aC8yLGk9dC5hcHBlbmQoImciKTt1cGUrKztsZXQgYT0zMDArNSozMDtpLmFwcGVuZCgibGluZSIpLmF0dHIoImlkIiwidGFzayIrdXBlKS5hdHRyKCJ4MSIsbikuYXR0cigieTEiLGUueSkuYXR0cigieDIiLG4pLmF0dHIoInkyIixhKS5hdHRyKCJjbGFzcyIsInRhc2stbGluZSIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFweCIpLmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLCI0IDIiKS5hdHRyKCJzdHJva2UiLCIjNjY2IiksZEhlKGkse2N4Om4sY3k6MzAwKyg1LWUuc2NvcmUpKjMwLHNjb3JlOmUuc2NvcmV9KTtsZXQgcz1nUCgpO3MueD1lLngscy55PWUueSxzLmZpbGw9ZS5maWxsLHMud2lkdGg9ci53aWR0aCxzLmhlaWdodD1yLmhlaWdodCxzLmNsYXNzPSJ0YXNrIHRhc2stdHlwZS0iK2UubnVtLHMucng9MyxzLnJ5PTMsWDYoaSxzKSxmcGUocikoZS50YXNrLGkscy54LHMueSxzLndpZHRoLHMuaGVpZ2h0LHtjbGFzczoidGFzayJ9LHIsZS5jb2xvdXIpfSwiZHJhd1Rhc2siKSx2SGU9byhmdW5jdGlvbih0LGUpe1g2KHQse3g6ZS5zdGFydHgseTplLnN0YXJ0eSx3aWR0aDplLnN0b3B4LWUuc3RhcnR4LGhlaWdodDplLnN0b3B5LWUuc3RhcnR5LGZpbGw6ZS5maWxsLGNsYXNzOiJyZWN0In0pLmxvd2VyKCl9LCJkcmF3QmFja2dyb3VuZFJlY3QiKSx4SGU9byhmdW5jdGlvbigpe3JldHVybnt4OjAseTowLGZpbGw6dm9pZCAwLCJ0ZXh0LWFuY2hvciI6InN0YXJ0Iix3aWR0aDoxMDAsaGVpZ2h0OjEwMCx0ZXh0TWFyZ2luOjAscng6MCxyeTowfX0sImdldFRleHRPYmoiKSxnUD1vKGZ1bmN0aW9uKCl7cmV0dXJue3g6MCx5OjAsd2lkdGg6MTAwLGFuY2hvcjoic3RhcnQiLGhlaWdodDoxMDAscng6MCxyeTowfX0sImdldE5vdGVSZWN0IiksZnBlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChpLGEscyxsLHUsaCxmLGQpe2xldCBwPWEuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIscyt1LzIpLmF0dHIoInkiLGwraC8yKzUpLnN0eWxlKCJmb250LWNvbG9yIixkKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KGkpO24ocCxmKX1vKHQsImJ5VGV4dCIpO2Z1bmN0aW9uIGUoaSxhLHMsbCx1LGgsZixkLHApe2xldHt0YXNrRm9udFNpemU6bSx0YXNrRm9udEZhbWlseTpnfT1kLHk9aS5zcGxpdCgvPGJyXHMqXC8/Pi9naSk7Zm9yKGxldCB2PTA7djx5Lmxlbmd0aDt2Kyspe2xldCB4PXYqbS1tKih5Lmxlbmd0aC0xKS8yLGI9YS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixzK3UvMikuYXR0cigieSIsbCkuYXR0cigiZmlsbCIscCkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuc3R5bGUoImZvbnQtc2l6ZSIsbSkuc3R5bGUoImZvbnQtZmFtaWx5IixnKTtiLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixzK3UvMikuYXR0cigiZHkiLHgpLnRleHQoeVt2XSksYi5hdHRyKCJ5IixsK2gvMikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLG4oYixmKX19byhlLCJieVRzcGFuIik7ZnVuY3Rpb24gcihpLGEscyxsLHUsaCxmLGQpe2xldCBwPWEuYXBwZW5kKCJzd2l0Y2giKSxnPXAuYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigieCIscykuYXR0cigieSIsbCkuYXR0cigid2lkdGgiLHUpLmF0dHIoImhlaWdodCIsaCkuYXR0cigicG9zaXRpb24iLCJmaXhlZCIpLmFwcGVuZCgieGh0bWw6ZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZSIpLnN0eWxlKCJoZWlnaHQiLCIxMDAlIikuc3R5bGUoIndpZHRoIiwiMTAwJSIpO2cuYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS50ZXh0KGkpLGUoaSxwLHMsbCx1LGgsZixkKSxuKGcsZil9byhyLCJieUZvIik7ZnVuY3Rpb24gbihpLGEpe2ZvcihsZXQgcyBpbiBhKXMgaW4gYSYmaS5hdHRyKHMsYVtzXSl9cmV0dXJuIG8obiwiX3NldFRleHRBdHRycyIpLGZ1bmN0aW9uKGkpe3JldHVybiBpLnRleHRQbGFjZW1lbnQ9PT0iZm8iP3I6aS50ZXh0UGxhY2VtZW50PT09Im9sZCI/dDplfX0oKSxiSGU9byhmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJhcnJvd2hlYWQiKS5hdHRyKCJyZWZYIiw1KS5hdHRyKCJyZWZZIiwyKS5hdHRyKCJtYXJrZXJXaWR0aCIsNikuYXR0cigibWFya2VySGVpZ2h0Iiw0KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCwwIFYgNCBMNiwyIFoiKX0sImluaXRHcmFwaGljcyIpO28oZHBlLCJ3cmFwIik7d0hlPW8oZnVuY3Rpb24odCxlLHIsbil7bGV0IGk9ciVmSGUtMSxhPXQuYXBwZW5kKCJnIik7ZS5zZWN0aW9uPWksYS5hdHRyKCJjbGFzcyIsKGUuY2xhc3M/ZS5jbGFzcysiICI6IiIpKyJ0aW1lbGluZS1ub2RlICIrKCJzZWN0aW9uLSIraSkpO2xldCBzPWEuYXBwZW5kKCJnIiksbD1hLmFwcGVuZCgiZyIpLGg9bC5hcHBlbmQoInRleHQiKS50ZXh0KGUuZGVzY3IpLmF0dHIoImR5IiwiMWVtIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmNhbGwoZHBlLGUud2lkdGgpLm5vZGUoKS5nZXRCQm94KCksZj1uLmZvbnRTaXplPy5yZXBsYWNlP24uZm9udFNpemUucmVwbGFjZSgicHgiLCIiKTpuLmZvbnRTaXplO3JldHVybiBlLmhlaWdodD1oLmhlaWdodCtmKjEuMSouNStlLnBhZGRpbmcsZS5oZWlnaHQ9TWF0aC5tYXgoZS5oZWlnaHQsZS5tYXhIZWlnaHQpLGUud2lkdGg9ZS53aWR0aCsyKmUucGFkZGluZyxsLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2Uud2lkdGgvMisiLCAiK2UucGFkZGluZy8yKyIpIiksa0hlKHMsZSxpLG4pLGV9LCJkcmF3Tm9kZSIpLFRIZT1vKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj10LmFwcGVuZCgiZyIpLGE9bi5hcHBlbmQoInRleHQiKS50ZXh0KGUuZGVzY3IpLmF0dHIoImR5IiwiMWVtIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmNhbGwoZHBlLGUud2lkdGgpLm5vZGUoKS5nZXRCQm94KCkscz1yLmZvbnRTaXplPy5yZXBsYWNlP3IuZm9udFNpemUucmVwbGFjZSgicHgiLCIiKTpyLmZvbnRTaXplO3JldHVybiBuLnJlbW92ZSgpLGEuaGVpZ2h0K3MqMS4xKi41K2UucGFkZGluZ30sImdldFZpcnR1YWxOb2RlSGVpZ2h0Iiksa0hlPW8oZnVuY3Rpb24odCxlLHIpe3QuYXBwZW5kKCJwYXRoIikuYXR0cigiaWQiLCJub2RlLSIrZS5pZCkuYXR0cigiY2xhc3MiLCJub2RlLWJrZyBub2RlLSIrZS50eXBlKS5hdHRyKCJkIixgTTAgJHtlLmhlaWdodC01fSB2JHstZS5oZWlnaHQrMio1fSBxMCwtNSA1LC01IGgke2Uud2lkdGgtMio1fSBxNSwwIDUsNSB2JHtlLmhlaWdodC01fSBIMCBaYCksdC5hcHBlbmQoImxpbmUiKS5hdHRyKCJjbGFzcyIsIm5vZGUtbGluZS0iK3IpLmF0dHIoIngxIiwwKS5hdHRyKCJ5MSIsZS5oZWlnaHQpLmF0dHIoIngyIixlLndpZHRoKS5hdHRyKCJ5MiIsZS5oZWlnaHQpfSwiZGVmYXVsdEJrZyIpLGJmPXtkcmF3UmVjdDpYNixkcmF3Q2lyY2xlOnBIZSxkcmF3U2VjdGlvbjpnSGUsZHJhd1RleHQ6aHBlLGRyYXdMYWJlbDptSGUsZHJhd1Rhc2s6eUhlLGRyYXdCYWNrZ3JvdW5kUmVjdDp2SGUsZ2V0VGV4dE9iajp4SGUsZ2V0Tm90ZVJlY3Q6Z1AsaW5pdEdyYXBoaWNzOmJIZSxkcmF3Tm9kZTp3SGUsZ2V0VmlydHVhbE5vZGVIZWlnaHQ6VEhlfX0pO3ZhciBFSGUsbXBlLFNIZSxncGUseXBlPU4oKCk9PnsidXNlIHN0cmljdCI7ZHIoKTtwcGUoKTt2dCgpO3p0KCk7RWkoKTtFSGU9byhmdW5jdGlvbih0LGUscixuKXtsZXQgaT1tZSgpLGE9aS5sZWZ0TWFyZ2luPz81MDtZLmRlYnVnKCJ0aW1lbGluZSIsbi5kYik7bGV0IHM9aS5zZWN1cml0eUxldmVsLGw7cz09PSJzYW5kYm94IiYmKGw9R2UoIiNpIitlKSk7bGV0IGg9KHM9PT0ic2FuZGJveCI/R2UobC5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KTpHZSgiYm9keSIpKS5zZWxlY3QoIiMiK2UpO2guYXBwZW5kKCJnIik7bGV0IGY9bi5kYi5nZXRUYXNrcygpLGQ9bi5kYi5nZXRDb21tb25EYigpLmdldERpYWdyYW1UaXRsZSgpO1kuZGVidWcoInRhc2siLGYpLGJmLmluaXRHcmFwaGljcyhoKTtsZXQgcD1uLmRiLmdldFNlY3Rpb25zKCk7WS5kZWJ1Zygic2VjdGlvbnMiLHApO2xldCBtPTAsZz0wLHk9MCx2PTAseD01MCthLGI9NTA7dj01MDtsZXQgdz0wLEM9ITA7cC5mb3JFYWNoKGZ1bmN0aW9uKF8pe2xldCBJPXtudW1iZXI6dyxkZXNjcjpfLHNlY3Rpb246dyx3aWR0aDoxNTAscGFkZGluZzoyMCxtYXhIZWlnaHQ6bX0sRD1iZi5nZXRWaXJ0dWFsTm9kZUhlaWdodChoLEksaSk7WS5kZWJ1Zygic2VjdGlvbkhlaWdodCBiZWZvcmUgZHJhdyIsRCksbT1NYXRoLm1heChtLEQrMjApfSk7bGV0IFQ9MCxFPTA7WS5kZWJ1ZygidGFza3MubGVuZ3RoIixmLmxlbmd0aCk7Zm9yKGxldFtfLEldb2YgZi5lbnRyaWVzKCkpe2xldCBEPXtudW1iZXI6XyxkZXNjcjpJLHNlY3Rpb246SS5zZWN0aW9uLHdpZHRoOjE1MCxwYWRkaW5nOjIwLG1heEhlaWdodDpnfSxrPWJmLmdldFZpcnR1YWxOb2RlSGVpZ2h0KGgsRCxpKTtZLmRlYnVnKCJ0YXNrSGVpZ2h0IGJlZm9yZSBkcmF3IixrKSxnPU1hdGgubWF4KGcsaysyMCksVD1NYXRoLm1heChULEkuZXZlbnRzLmxlbmd0aCk7bGV0IEw9MDtmb3IobGV0IFIgb2YgSS5ldmVudHMpe2xldCBPPXtkZXNjcjpSLHNlY3Rpb246SS5zZWN0aW9uLG51bWJlcjpJLnNlY3Rpb24sd2lkdGg6MTUwLHBhZGRpbmc6MjAsbWF4SGVpZ2h0OjUwfTtMKz1iZi5nZXRWaXJ0dWFsTm9kZUhlaWdodChoLE8saSl9RT1NYXRoLm1heChFLEwpfVkuZGVidWcoIm1heFNlY3Rpb25IZWlnaHQgYmVmb3JlIGRyYXciLG0pLFkuZGVidWcoIm1heFRhc2tIZWlnaHQgYmVmb3JlIGRyYXciLGcpLHAmJnAubGVuZ3RoPjA/cC5mb3JFYWNoKF89PntsZXQgST1mLmZpbHRlcihSPT5SLnNlY3Rpb249PT1fKSxEPXtudW1iZXI6dyxkZXNjcjpfLHNlY3Rpb246dyx3aWR0aDoyMDAqTWF0aC5tYXgoSS5sZW5ndGgsMSktNTAscGFkZGluZzoyMCxtYXhIZWlnaHQ6bX07WS5kZWJ1Zygic2VjdGlvbk5vZGUiLEQpO2xldCBrPWguYXBwZW5kKCJnIiksTD1iZi5kcmF3Tm9kZShrLEQsdyxpKTtZLmRlYnVnKCJzZWN0aW9uTm9kZSBvdXRwdXQiLEwpLGsuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7eH0sICR7dn0pYCksYis9bSs1MCxJLmxlbmd0aD4wJiZtcGUoaCxJLHcseCxiLGcsaSxULEUsbSwhMSkseCs9MjAwKk1hdGgubWF4KEkubGVuZ3RoLDEpLGI9dix3Kyt9KTooQz0hMSxtcGUoaCxmLHcseCxiLGcsaSxULEUsbSwhMCkpO2xldCBBPWgubm9kZSgpLmdldEJCb3goKTtZLmRlYnVnKCJib3VuZHMiLEEpLGQmJmguYXBwZW5kKCJ0ZXh0IikudGV4dChkKS5hdHRyKCJ4IixBLndpZHRoLzItYSkuYXR0cigiZm9udC1zaXplIiwiNGV4IikuYXR0cigiZm9udC13ZWlnaHQiLCJib2xkIikuYXR0cigieSIsMjApLHk9Qz9tK2crMTUwOmcrMTAwLGguYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsaW5lV3JhcHBlciIpLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIixhKS5hdHRyKCJ5MSIseSkuYXR0cigieDIiLEEud2lkdGgrMyphKS5hdHRyKCJ5MiIseSkuYXR0cigic3Ryb2tlLXdpZHRoIiw0KS5hdHRyKCJzdHJva2UiLCJibGFjayIpLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoI2Fycm93aGVhZCkiKSxBbyh2b2lkIDAsaCxpLnRpbWVsaW5lPy5wYWRkaW5nPz81MCxpLnRpbWVsaW5lPy51c2VNYXhXaWR0aD8/ITEpfSwiZHJhdyIpLG1wZT1vKGZ1bmN0aW9uKHQsZSxyLG4saSxhLHMsbCx1LGgsZil7Zm9yKGxldCBkIG9mIGUpe2xldCBwPXtkZXNjcjpkLnRhc2ssc2VjdGlvbjpyLG51bWJlcjpyLHdpZHRoOjE1MCxwYWRkaW5nOjIwLG1heEhlaWdodDphfTtZLmRlYnVnKCJ0YXNrTm9kZSIscCk7bGV0IG09dC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRhc2tXcmFwcGVyIikseT1iZi5kcmF3Tm9kZShtLHAscixzKS5oZWlnaHQ7aWYoWS5kZWJ1ZygidGFza0hlaWdodCBhZnRlciBkcmF3Iix5KSxtLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke259LCAke2l9KWApLGE9TWF0aC5tYXgoYSx5KSxkLmV2ZW50cyl7bGV0IHY9dC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxpbmVXcmFwcGVyIikseD1hO2krPTEwMCx4PXgrU0hlKHQsZC5ldmVudHMscixuLGkscyksaS09MTAwLHYuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLG4rMTkwLzIpLmF0dHIoInkxIixpK2EpLmF0dHIoIngyIixuKzE5MC8yKS5hdHRyKCJ5MiIsaSthKyhmP2E6aCkrdSsxMjApLmF0dHIoInN0cm9rZS13aWR0aCIsMikuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCNhcnJvd2hlYWQpIikuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIsIjUsNSIpfW49bisyMDAsZiYmIXMudGltZWxpbmU/LmRpc2FibGVNdWx0aWNvbG9yJiZyKyt9aT1pLTEwfSwiZHJhd1Rhc2tzIiksU0hlPW8oZnVuY3Rpb24odCxlLHIsbixpLGEpe2xldCBzPTAsbD1pO2k9aSsxMDA7Zm9yKGxldCB1IG9mIGUpe2xldCBoPXtkZXNjcjp1LHNlY3Rpb246cixudW1iZXI6cix3aWR0aDoxNTAscGFkZGluZzoyMCxtYXhIZWlnaHQ6NTB9O1kuZGVidWcoImV2ZW50Tm9kZSIsaCk7bGV0IGY9dC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImV2ZW50V3JhcHBlciIpLHA9YmYuZHJhd05vZGUoZixoLHIsYSkuaGVpZ2h0O3M9cytwLGYuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7bn0sICR7aX0pYCksaT1pKzEwK3B9cmV0dXJuIGk9bCxzfSwiZHJhd0V2ZW50cyIpLGdwZT17c2V0Q29uZjpvKCgpPT57fSwic2V0Q29uZiIpLGRyYXc6RUhlfX0pO3ZhciBDSGUsQUhlLHZwZSx4cGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtZcygpO0NIZT1vKHQ9PntsZXQgZT0iIjtmb3IobGV0IHI9MDtyPHQuVEhFTUVfQ09MT1JfTElNSVQ7cisrKXRbImxpbmVDb2xvciIrcl09dFsibGluZUNvbG9yIityXXx8dFsiY1NjYWxlSW52IityXSxjYSh0WyJsaW5lQ29sb3IiK3JdKT90WyJsaW5lQ29sb3IiK3JdPUR0KHRbImxpbmVDb2xvciIrcl0sMjApOnRbImxpbmVDb2xvciIrcl09T3QodFsibGluZUNvbG9yIityXSwyMCk7Zm9yKGxldCByPTA7cjx0LlRIRU1FX0NPTE9SX0xJTUlUO3IrKyl7bGV0IG49IiIrKDE3LTMqcik7ZSs9YAogICAgLnNlY3Rpb24tJHtyLTF9IHJlY3QsIC5zZWN0aW9uLSR7ci0xfSBwYXRoLCAuc2VjdGlvbi0ke3ItMX0gY2lyY2xlLCAuc2VjdGlvbi0ke3ItMX0gcGF0aCAgewogICAgICBmaWxsOiAke3RbImNTY2FsZSIrcl19OwogICAgfQogICAgLnNlY3Rpb24tJHtyLTF9IHRleHQgewogICAgIGZpbGw6ICR7dFsiY1NjYWxlTGFiZWwiK3JdfTsKICAgIH0KICAgIC5ub2RlLWljb24tJHtyLTF9IHsKICAgICAgZm9udC1zaXplOiA0MHB4OwogICAgICBjb2xvcjogJHt0WyJjU2NhbGVMYWJlbCIrcl19OwogICAgfQogICAgLnNlY3Rpb24tZWRnZS0ke3ItMX17CiAgICAgIHN0cm9rZTogJHt0WyJjU2NhbGUiK3JdfTsKICAgIH0KICAgIC5lZGdlLWRlcHRoLSR7ci0xfXsKICAgICAgc3Ryb2tlLXdpZHRoOiAke259OwogICAgfQogICAgLnNlY3Rpb24tJHtyLTF9IGxpbmUgewogICAgICBzdHJva2U6ICR7dFsiY1NjYWxlSW52IityXX0gOwogICAgICBzdHJva2Utd2lkdGg6IDM7CiAgICB9CgogICAgLmxpbmVXcmFwcGVyIGxpbmV7CiAgICAgIHN0cm9rZTogJHt0WyJjU2NhbGVMYWJlbCIrcl19IDsKICAgIH0KCiAgICAuZGlzYWJsZWQsIC5kaXNhYmxlZCBjaXJjbGUsIC5kaXNhYmxlZCB0ZXh0IHsKICAgICAgZmlsbDogbGlnaHRncmF5OwogICAgfQogICAgLmRpc2FibGVkIHRleHQgewogICAgICBmaWxsOiAjZWZlZmVmOwogICAgfQogICAgYH1yZXR1cm4gZX0sImdlblNlY3Rpb25zIiksQUhlPW8odD0+YAogIC5lZGdlIHsKICAgIHN0cm9rZS13aWR0aDogMzsKICB9CiAgJHtDSGUodCl9CiAgLnNlY3Rpb24tcm9vdCByZWN0LCAuc2VjdGlvbi1yb290IHBhdGgsIC5zZWN0aW9uLXJvb3QgY2lyY2xlICB7CiAgICBmaWxsOiAke3QuZ2l0MH07CiAgfQogIC5zZWN0aW9uLXJvb3QgdGV4dCB7CiAgICBmaWxsOiAke3QuZ2l0QnJhbmNoTGFiZWwwfTsKICB9CiAgLmljb24tY29udGFpbmVyIHsKICAgIGhlaWdodDoxMDAlOwogICAgZGlzcGxheTogZmxleDsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICB9CiAgLmVkZ2UgewogICAgZmlsbDogbm9uZTsKICB9CiAgLmV2ZW50V3JhcHBlciAgewogICBmaWx0ZXI6IGJyaWdodG5lc3MoMTIwJSk7CiAgfQpgLCJnZXRTdHlsZXMiKSx2cGU9QUhlfSk7dmFyIGJwZT17fTtocihicGUse2RpYWdyYW06KCk9Pl9IZX0pO3ZhciBfSGUsd3BlPU4oKCk9PnsidXNlIHN0cmljdCI7WmRlKCk7Y3BlKCk7eXBlKCk7eHBlKCk7X0hlPXtkYjptUCxyZW5kZXJlcjpncGUscGFyc2VyOlFkZSxzdHlsZXM6dnBlfX0pO3ZhciB5UCxFcGUsU3BlPU4oKCk9PnsidXNlIHN0cmljdCI7eVA9ZnVuY3Rpb24oKXt2YXIgdD1vKGZ1bmN0aW9uKEMsVCxFLEEpe2ZvcihFPUV8fHt9LEE9Qy5sZW5ndGg7QS0tO0VbQ1tBXV09VCk7cmV0dXJuIEV9LCJvIiksZT1bMSw0XSxyPVsxLDEzXSxuPVsxLDEyXSxpPVsxLDE1XSxhPVsxLDE2XSxzPVsxLDIwXSxsPVsxLDE5XSx1PVs2LDcsOF0saD1bMSwyNl0sZj1bMSwyNF0sZD1bMSwyNV0scD1bNiw3LDExXSxtPVsxLDYsMTMsMTUsMTYsMTksMjJdLGc9WzEsMzNdLHk9WzEsMzRdLHY9WzEsNiw3LDExLDEzLDE1LDE2LDE5LDIyXSx4PXt0cmFjZTpvKGZ1bmN0aW9uKCl7fSwidHJhY2UiKSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLG1pbmRNYXA6NCxzcGFjZUxpbmVzOjUsU1BBQ0VMSU5FOjYsTkw6NyxNSU5ETUFQOjgsZG9jdW1lbnQ6OSxzdG9wOjEwLEVPRjoxMSxzdGF0ZW1lbnQ6MTIsU1BBQ0VMSVNUOjEzLG5vZGU6MTQsSUNPTjoxNSxDTEFTUzoxNixub2RlV2l0aElkOjE3LG5vZGVXaXRob3V0SWQ6MTgsTk9ERV9EU1RBUlQ6MTksTk9ERV9ERVNDUjoyMCxOT0RFX0RFTkQ6MjEsTk9ERV9JRDoyMiwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNjoiU1BBQ0VMSU5FIiw3OiJOTCIsODoiTUlORE1BUCIsMTE6IkVPRiIsMTM6IlNQQUNFTElTVCIsMTU6IklDT04iLDE2OiJDTEFTUyIsMTk6Ik5PREVfRFNUQVJUIiwyMDoiTk9ERV9ERVNDUiIsMjE6Ik5PREVfREVORCIsMjI6Ik5PREVfSUQifSxwcm9kdWN0aW9uc186WzAsWzMsMV0sWzMsMl0sWzUsMV0sWzUsMl0sWzUsMl0sWzQsMl0sWzQsM10sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDJdLFsxMCwyXSxbOSwzXSxbOSwyXSxbMTIsMl0sWzEyLDJdLFsxMiwyXSxbMTIsMV0sWzEyLDFdLFsxMiwxXSxbMTIsMV0sWzEyLDFdLFsxNCwxXSxbMTQsMV0sWzE4LDNdLFsxNywxXSxbMTcsNF1dLHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbihULEUsQSxTLF8sSSxEKXt2YXIgaz1JLmxlbmd0aC0xO3N3aXRjaChfKXtjYXNlIDY6Y2FzZSA3OnJldHVybiBTO2Nhc2UgODpTLmdldExvZ2dlcigpLnRyYWNlKCJTdG9wIE5MICIpO2JyZWFrO2Nhc2UgOTpTLmdldExvZ2dlcigpLnRyYWNlKCJTdG9wIEVPRiAiKTticmVhaztjYXNlIDExOlMuZ2V0TG9nZ2VyKCkudHJhY2UoIlN0b3AgTkwyICIpO2JyZWFrO2Nhc2UgMTI6Uy5nZXRMb2dnZXIoKS50cmFjZSgiU3RvcCBFT0YyICIpO2JyZWFrO2Nhc2UgMTU6Uy5nZXRMb2dnZXIoKS5pbmZvKCJOb2RlOiAiLElba10uaWQpLFMuYWRkTm9kZShJW2stMV0ubGVuZ3RoLElba10uaWQsSVtrXS5kZXNjcixJW2tdLnR5cGUpO2JyZWFrO2Nhc2UgMTY6Uy5nZXRMb2dnZXIoKS50cmFjZSgiSWNvbjogIixJW2tdKSxTLmRlY29yYXRlTm9kZSh7aWNvbjpJW2tdfSk7YnJlYWs7Y2FzZSAxNzpjYXNlIDIxOlMuZGVjb3JhdGVOb2RlKHtjbGFzczpJW2tdfSk7YnJlYWs7Y2FzZSAxODpTLmdldExvZ2dlcigpLnRyYWNlKCJTUEFDRUxJU1QiKTticmVhaztjYXNlIDE5OlMuZ2V0TG9nZ2VyKCkudHJhY2UoIk5vZGU6ICIsSVtrXS5pZCksUy5hZGROb2RlKDAsSVtrXS5pZCxJW2tdLmRlc2NyLElba10udHlwZSk7YnJlYWs7Y2FzZSAyMDpTLmRlY29yYXRlTm9kZSh7aWNvbjpJW2tdfSk7YnJlYWs7Y2FzZSAyNTpTLmdldExvZ2dlcigpLnRyYWNlKCJub2RlIGZvdW5kIC4uIixJW2stMl0pLHRoaXMuJD17aWQ6SVtrLTFdLGRlc2NyOklbay0xXSx0eXBlOlMuZ2V0VHlwZShJW2stMl0sSVtrXSl9O2JyZWFrO2Nhc2UgMjY6dGhpcy4kPXtpZDpJW2tdLGRlc2NyOklba10sdHlwZTpTLm5vZGVUeXBlLkRFRkFVTFR9O2JyZWFrO2Nhc2UgMjc6Uy5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBmb3VuZCAuLiIsSVtrLTNdKSx0aGlzLiQ9e2lkOklbay0zXSxkZXNjcjpJW2stMV0sdHlwZTpTLmdldFR5cGUoSVtrLTJdLElba10pfTticmVha319LCJhbm9ueW1vdXMiKSx0YWJsZTpbezM6MSw0OjIsNTozLDY6WzEsNV0sODplfSx7MTpbM119LHsxOlsyLDFdfSx7NDo2LDY6WzEsN10sNzpbMSw4XSw4OmV9LHs2OnIsNzpbMSwxMF0sOTo5LDEyOjExLDEzOm4sMTQ6MTQsMTU6aSwxNjphLDE3OjE3LDE4OjE4LDE5OnMsMjI6bH0sdCh1LFsyLDNdKSx7MTpbMiwyXX0sdCh1LFsyLDRdKSx0KHUsWzIsNV0pLHsxOlsyLDZdLDY6ciwxMjoyMSwxMzpuLDE0OjE0LDE1OmksMTY6YSwxNzoxNywxODoxOCwxOTpzLDIyOmx9LHs2OnIsOToyMiwxMjoxMSwxMzpuLDE0OjE0LDE1OmksMTY6YSwxNzoxNywxODoxOCwxOTpzLDIyOmx9LHs2OmgsNzpmLDEwOjIzLDExOmR9LHQocCxbMiwyMl0sezE3OjE3LDE4OjE4LDE0OjI3LDE1OlsxLDI4XSwxNjpbMSwyOV0sMTk6cywyMjpsfSksdChwLFsyLDE4XSksdChwLFsyLDE5XSksdChwLFsyLDIwXSksdChwLFsyLDIxXSksdChwLFsyLDIzXSksdChwLFsyLDI0XSksdChwLFsyLDI2XSx7MTk6WzEsMzBdfSksezIwOlsxLDMxXX0sezY6aCw3OmYsMTA6MzIsMTE6ZH0sezE6WzIsN10sNjpyLDEyOjIxLDEzOm4sMTQ6MTQsMTU6aSwxNjphLDE3OjE3LDE4OjE4LDE5OnMsMjI6bH0sdChtLFsyLDE0XSx7NzpnLDExOnl9KSx0KHYsWzIsOF0pLHQodixbMiw5XSksdCh2LFsyLDEwXSksdChwLFsyLDE1XSksdChwLFsyLDE2XSksdChwLFsyLDE3XSksezIwOlsxLDM1XX0sezIxOlsxLDM2XX0sdChtLFsyLDEzXSx7NzpnLDExOnl9KSx0KHYsWzIsMTFdKSx0KHYsWzIsMTJdKSx7MjE6WzEsMzddfSx0KHAsWzIsMjVdKSx0KHAsWzIsMjddKV0sZGVmYXVsdEFjdGlvbnM6ezI6WzIsMV0sNjpbMiwyXX0scGFyc2VFcnJvcjpvKGZ1bmN0aW9uKFQsRSl7aWYoRS5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKFQpO2Vsc2V7dmFyIEE9bmV3IEVycm9yKFQpO3Rocm93IEEuaGFzaD1FLEF9fSwicGFyc2VFcnJvciIpLHBhcnNlOm8oZnVuY3Rpb24oVCl7dmFyIEU9dGhpcyxBPVswXSxTPVtdLF89W251bGxdLEk9W10sRD10aGlzLnRhYmxlLGs9IiIsTD0wLFI9MCxPPTAsTT0yLEI9MSxGPUkuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksUD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLHo9e3l5Ont9fTtmb3IodmFyICQgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSwkKSYmKHoueXlbJF09dGhpcy55eVskXSk7UC5zZXRJbnB1dChULHoueXkpLHoueXkubGV4ZXI9UCx6Lnl5LnBhcnNlcj10aGlzLHR5cGVvZiBQLnl5bGxvYz4idSImJihQLnl5bGxvYz17fSk7dmFyIEg9UC55eWxsb2M7SS5wdXNoKEgpO3ZhciBRPVAub3B0aW9ucyYmUC5vcHRpb25zLnJhbmdlczt0eXBlb2Ygei55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj16Lnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIGooYWUpe0EubGVuZ3RoPUEubGVuZ3RoLTIqYWUsXy5sZW5ndGg9Xy5sZW5ndGgtYWUsSS5sZW5ndGg9SS5sZW5ndGgtYWV9byhqLCJwb3BTdGFjayIpO2Z1bmN0aW9uIGllKCl7dmFyIGFlO3JldHVybiBhZT1TLnBvcCgpfHxQLmxleCgpfHxCLHR5cGVvZiBhZSE9Im51bWJlciImJihhZSBpbnN0YW5jZW9mIEFycmF5JiYoUz1hZSxhZT1TLnBvcCgpKSxhZT1FLnN5bWJvbHNfW2FlXXx8YWUpLGFlfW8oaWUsImxleCIpO2Zvcih2YXIgbmUsbGUsaGUsSyxYLHRlLEo9e30sc2UsdWUsWixTZTs7KXtpZihoZT1BW0EubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbaGVdP0s9dGhpcy5kZWZhdWx0QWN0aW9uc1toZV06KChuZT09PW51bGx8fHR5cGVvZiBuZT4idSIpJiYobmU9aWUoKSksSz1EW2hlXSYmRFtoZV1bbmVdKSx0eXBlb2YgSz4idSJ8fCFLLmxlbmd0aHx8IUtbMF0pe3ZhciBjZT0iIjtTZT1bXTtmb3Ioc2UgaW4gRFtoZV0pdGhpcy50ZXJtaW5hbHNfW3NlXSYmc2U+TSYmU2UucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW3NlXSsiJyIpO1Auc2hvd1Bvc2l0aW9uP2NlPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKEwrMSkrYDoKYCtQLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArU2Uuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tuZV18fG5lKSsiJyI6Y2U9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoTCsxKSsiOiBVbmV4cGVjdGVkICIrKG5lPT1CPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW25lXXx8bmUpKyInIiksdGhpcy5wYXJzZUVycm9yKGNlLHt0ZXh0OlAubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW25lXXx8bmUsbGluZTpQLnl5bGluZW5vLGxvYzpILGV4cGVjdGVkOlNlfSl9aWYoS1swXWluc3RhbmNlb2YgQXJyYXkmJksubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitoZSsiLCB0b2tlbjogIituZSk7c3dpdGNoKEtbMF0pe2Nhc2UgMTpBLnB1c2gobmUpLF8ucHVzaChQLnl5dGV4dCksSS5wdXNoKFAueXlsbG9jKSxBLnB1c2goS1sxXSksbmU9bnVsbCxsZT8obmU9bGUsbGU9bnVsbCk6KFI9UC55eWxlbmcsaz1QLnl5dGV4dCxMPVAueXlsaW5lbm8sSD1QLnl5bGxvYyxPPjAmJk8tLSk7YnJlYWs7Y2FzZSAyOmlmKHVlPXRoaXMucHJvZHVjdGlvbnNfW0tbMV1dWzFdLEouJD1fW18ubGVuZ3RoLXVlXSxKLl8kPXtmaXJzdF9saW5lOklbSS5sZW5ndGgtKHVlfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6SVtJLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOklbSS5sZW5ndGgtKHVlfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOklbSS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LFEmJihKLl8kLnJhbmdlPVtJW0kubGVuZ3RoLSh1ZXx8MSldLnJhbmdlWzBdLElbSS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx0ZT10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoSixbayxSLEwsei55eSxLWzFdLF8sSV0uY29uY2F0KEYpKSx0eXBlb2YgdGU8InUiKXJldHVybiB0ZTt1ZSYmKEE9QS5zbGljZSgwLC0xKnVlKjIpLF89Xy5zbGljZSgwLC0xKnVlKSxJPUkuc2xpY2UoMCwtMSp1ZSkpLEEucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1tLWzFdXVswXSksXy5wdXNoKEouJCksSS5wdXNoKEouXyQpLFo9RFtBW0EubGVuZ3RoLTJdXVtBW0EubGVuZ3RoLTFdXSxBLnB1c2goWik7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH0sInBhcnNlIil9LGI9ZnVuY3Rpb24oKXt2YXIgQz17RU9GOjEscGFyc2VFcnJvcjpvKGZ1bmN0aW9uKEUsQSl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihFLEEpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKEUpfSwicGFyc2VFcnJvciIpLHNldElucHV0Om8oZnVuY3Rpb24oVCxFKXtyZXR1cm4gdGhpcy55eT1FfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1ULHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSwic2V0SW5wdXQiKSxpbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIFQ9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPVQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPVQsdGhpcy5tYXRjaGVkKz1UO3ZhciBFPVQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBFPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxUfSwiaW5wdXQiKSx1bnB1dDpvKGZ1bmN0aW9uKFQpe3ZhciBFPVQubGVuZ3RoLEE9VC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PVQrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLUUpLHRoaXMub2Zmc2V0LT1FO3ZhciBTPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLEEubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1BLmxlbmd0aC0xKTt2YXIgXz10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46QT8oQS5sZW5ndGg9PT1TLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrU1tTLmxlbmd0aC1BLmxlbmd0aF0ubGVuZ3RoLUFbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1FfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W19bMF0sX1swXSt0aGlzLnl5bGVuZy1FXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LCJ1bnB1dCIpLG1vcmU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LCJtb3JlIikscmVqZWN0Om8oZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LCJyZWplY3QiKSxsZXNzOm8oZnVuY3Rpb24oVCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKFQpKX0sImxlc3MiKSxwYXN0SW5wdXQ6byhmdW5jdGlvbigpe3ZhciBUPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oVC5sZW5ndGg+MjA/Ii4uLiI6IiIpK1Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LCJwYXN0SW5wdXQiKSx1cGNvbWluZ0lucHV0Om8oZnVuY3Rpb24oKXt2YXIgVD10aGlzLm1hdGNoO3JldHVybiBULmxlbmd0aDwyMCYmKFQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLVQubGVuZ3RoKSksKFQuc3Vic3RyKDAsMjApKyhULmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSwidXBjb21pbmdJbnB1dCIpLHNob3dQb3NpdGlvbjpvKGZ1bmN0aW9uKCl7dmFyIFQ9dGhpcy5wYXN0SW5wdXQoKSxFPW5ldyBBcnJheShULmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIFQrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK0UrIl4ifSwic2hvd1Bvc2l0aW9uIiksdGVzdF9tYXRjaDpvKGZ1bmN0aW9uKFQsRSl7dmFyIEEsUyxfO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihfPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKF8ueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksUz1UWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxTJiYodGhpcy55eWxpbmVubys9Uy5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpTP1NbUy5sZW5ndGgtMV0ubGVuZ3RoLVNbUy5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitUWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPVRbMF0sdGhpcy5tYXRjaCs9VFswXSx0aGlzLm1hdGNoZXM9VCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShUWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1UWzBdLEE9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsRSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxBKXJldHVybiBBO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBJIGluIF8pdGhpc1tJXT1fW0ldO3JldHVybiExfXJldHVybiExfSwidGVzdF9tYXRjaCIpLG5leHQ6byhmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBULEUsQSxTO3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIF89dGhpcy5fY3VycmVudFJ1bGVzKCksST0wO0k8Xy5sZW5ndGg7SSsrKWlmKEE9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tfW0ldXSksQSYmKCFFfHxBWzBdLmxlbmd0aD5FWzBdLmxlbmd0aCkpe2lmKEU9QSxTPUksdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoVD10aGlzLnRlc3RfbWF0Y2goQSxfW0ldKSxUIT09ITEpcmV0dXJuIFQ7aWYodGhpcy5fYmFja3RyYWNrKXtFPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIEU/KFQ9dGhpcy50ZXN0X21hdGNoKEUsX1tTXSksVCE9PSExP1Q6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LCJuZXh0IiksbGV4Om8oZnVuY3Rpb24oKXt2YXIgRT10aGlzLm5leHQoKTtyZXR1cm4gRXx8dGhpcy5sZXgoKX0sImxleCIpLGJlZ2luOm8oZnVuY3Rpb24oRSl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKEUpfSwiYmVnaW4iKSxwb3BTdGF0ZTpvKGZ1bmN0aW9uKCl7dmFyIEU9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gRT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sInBvcFN0YXRlIiksX2N1cnJlbnRSdWxlczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sIl9jdXJyZW50UnVsZXMiKSx0b3BTdGF0ZTpvKGZ1bmN0aW9uKEUpe3JldHVybiBFPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoRXx8MCksRT49MD90aGlzLmNvbmRpdGlvblN0YWNrW0VdOiJJTklUSUFMIn0sInRvcFN0YXRlIikscHVzaFN0YXRlOm8oZnVuY3Rpb24oRSl7dGhpcy5iZWdpbihFKX0sInB1c2hTdGF0ZSIpLHN0YXRlU3RhY2tTaXplOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LCJzdGF0ZVN0YWNrU2l6ZSIpLG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKEUsQSxTLF8pe3ZhciBJPV87c3dpdGNoKFMpe2Nhc2UgMDpyZXR1cm4gRS5nZXRMb2dnZXIoKS50cmFjZSgiRm91bmQgY29tbWVudCIsQS55eXRleHQpLDY7YnJlYWs7Y2FzZSAxOnJldHVybiA4O2Nhc2UgMjp0aGlzLmJlZ2luKCJDTEFTUyIpO2JyZWFrO2Nhc2UgMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE2O2JyZWFrO2Nhc2UgNDp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA1OkUuZ2V0TG9nZ2VyKCkudHJhY2UoIkJlZ2luIGljb24iKSx0aGlzLmJlZ2luKCJJQ09OIik7YnJlYWs7Y2FzZSA2OnJldHVybiBFLmdldExvZ2dlcigpLnRyYWNlKCJTUEFDRUxJTkUiKSw2O2JyZWFrO2Nhc2UgNzpyZXR1cm4gNztjYXNlIDg6cmV0dXJuIDE1O2Nhc2UgOTpFLmdldExvZ2dlcigpLnRyYWNlKCJlbmQgaWNvbiIpLHRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDEwOnJldHVybiBFLmdldExvZ2dlcigpLnRyYWNlKCJFeHBsb2Rpbmcgbm9kZSIpLHRoaXMuYmVnaW4oIk5PREUiKSwxOTticmVhaztjYXNlIDExOnJldHVybiBFLmdldExvZ2dlcigpLnRyYWNlKCJDbG91ZCIpLHRoaXMuYmVnaW4oIk5PREUiKSwxOTticmVhaztjYXNlIDEyOnJldHVybiBFLmdldExvZ2dlcigpLnRyYWNlKCJFeHBsb3Npb24gQmFuZyIpLHRoaXMuYmVnaW4oIk5PREUiKSwxOTticmVhaztjYXNlIDEzOnJldHVybiBFLmdldExvZ2dlcigpLnRyYWNlKCJDbG91ZCBCYW5nIiksdGhpcy5iZWdpbigiTk9ERSIpLDE5O2JyZWFrO2Nhc2UgMTQ6cmV0dXJuIHRoaXMuYmVnaW4oIk5PREUiKSwxOTticmVhaztjYXNlIDE1OnJldHVybiB0aGlzLmJlZ2luKCJOT0RFIiksMTk7YnJlYWs7Y2FzZSAxNjpyZXR1cm4gdGhpcy5iZWdpbigiTk9ERSIpLDE5O2JyZWFrO2Nhc2UgMTc6cmV0dXJuIHRoaXMuYmVnaW4oIk5PREUiKSwxOTticmVhaztjYXNlIDE4OnJldHVybiAxMztjYXNlIDE5OnJldHVybiAyMjtjYXNlIDIwOnJldHVybiAxMTtjYXNlIDIxOnRoaXMuYmVnaW4oIk5TVFIyIik7YnJlYWs7Y2FzZSAyMjpyZXR1cm4iTk9ERV9ERVNDUiI7Y2FzZSAyMzp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyNDpFLmdldExvZ2dlcigpLnRyYWNlKCJTdGFydGluZyBOU1RSIiksdGhpcy5iZWdpbigiTlNUUiIpO2JyZWFrO2Nhc2UgMjU6cmV0dXJuIEUuZ2V0TG9nZ2VyKCkudHJhY2UoImRlc2NyaXB0aW9uOiIsQS55eXRleHQpLCJOT0RFX0RFU0NSIjticmVhaztjYXNlIDI2OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDI3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksRS5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgKSkiKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDI4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksRS5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgKSIpLCJOT0RFX0RFTkQiO2JyZWFrO2Nhc2UgMjk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxFLmdldExvZ2dlcigpLnRyYWNlKCJub2RlIGVuZCAuLi4iLEEueXl0ZXh0KSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDMwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksRS5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgKCgiKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDMxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksRS5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgKC0iKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDMyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksRS5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgKC0iKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDMzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksRS5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgKCgiKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDM0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksRS5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgKCgiKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDM1OnJldHVybiBFLmdldExvZ2dlcigpLnRyYWNlKCJMb25nIGRlc2NyaXB0aW9uOiIsQS55eXRleHQpLDIwO2JyZWFrO2Nhc2UgMzY6cmV0dXJuIEUuZ2V0TG9nZ2VyKCkudHJhY2UoIkxvbmcgZGVzY3JpcHRpb246IixBLnl5dGV4dCksMjA7YnJlYWt9fSwiYW5vbnltb3VzIikscnVsZXM6Wy9eKD86XHMqJSUuKikvaSwvXig/Om1pbmRtYXBcYikvaSwvXig/Ojo6OikvaSwvXig/Oi4rKS9pLC9eKD86XG4pL2ksL14oPzo6Omljb25cKCkvaSwvXig/Oltcc10rW1xuXSkvaSwvXig/Oltcbl0rKS9pLC9eKD86W15cKV0rKS9pLC9eKD86XCkpL2ksL14oPzotXCkpL2ksL14oPzpcKC0pL2ksL14oPzpcKVwpKS9pLC9eKD86XCkpL2ksL14oPzpcKFwoKS9pLC9eKD86XHtceykvaSwvXig/OlwoKS9pLC9eKD86XFspL2ksL14oPzpbXHNdKykvaSwvXig/OlteXChcW1xuXClce1x9XSspL2ksL14oPzokKS9pLC9eKD86WyJdW2BdKS9pLC9eKD86W15gIl0rKS9pLC9eKD86W2BdWyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSspL2ksL14oPzpbIl0pL2ksL14oPzpbXCldXCkpL2ksL14oPzpbXCldKS9pLC9eKD86W1xdXSkvaSwvXig/Olx9XH0pL2ksL14oPzpcKC0pL2ksL14oPzotXCkpL2ksL14oPzpcKFwoKS9pLC9eKD86XCgpL2ksL14oPzpbXlwpXF1cKFx9XSspL2ksL14oPzouKyg/IVwoXCgpKS9pXSxjb25kaXRpb25zOntDTEFTUzp7cnVsZXM6WzMsNF0saW5jbHVzaXZlOiExfSxJQ09OOntydWxlczpbOCw5XSxpbmNsdXNpdmU6ITF9LE5TVFIyOntydWxlczpbMjIsMjNdLGluY2x1c2l2ZTohMX0sTlNUUjp7cnVsZXM6WzI1LDI2XSxpbmNsdXNpdmU6ITF9LE5PREU6e3J1bGVzOlsyMSwyNCwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNl0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDIsNSw2LDcsMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjBdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gQ30oKTt4LmxleGVyPWI7ZnVuY3Rpb24gdygpe3RoaXMueXk9e319cmV0dXJuIG8odywiUGFyc2VyIiksdy5wcm90b3R5cGU9eCx4LlBhcnNlcj13LG5ldyB3fSgpO3lQLnBhcnNlcj15UDtFcGU9eVB9KTt2YXIgJGwsQ3BlLHZQLE5IZSxNSGUsSUhlLE9IZSxWaSxQSGUsQkhlLEZIZSwkSGUsekhlLEdIZSxWSGUsQXBlLF9wZT1OKCgpPT57InVzZSBzdHJpY3QiO3p0KCk7Z3IoKTt2dCgpO1lhKCk7JGw9W10sQ3BlPTAsdlA9e30sTkhlPW8oKCk9PnskbD1bXSxDcGU9MCx2UD17fX0sImNsZWFyIiksTUhlPW8oZnVuY3Rpb24odCl7Zm9yKGxldCBlPSRsLmxlbmd0aC0xO2U+PTA7ZS0tKWlmKCRsW2VdLmxldmVsPHQpcmV0dXJuICRsW2VdO3JldHVybiBudWxsfSwiZ2V0UGFyZW50IiksSUhlPW8oKCk9PiRsLmxlbmd0aD4wPyRsWzBdOm51bGwsImdldE1pbmRtYXAiKSxPSGU9bygodCxlLHIsbik9PntZLmluZm8oImFkZE5vZGUiLHQsZSxyLG4pO2xldCBpPW1lKCksYT1pLm1pbmRtYXA/LnBhZGRpbmc/P29yLm1pbmRtYXAucGFkZGluZztzd2l0Y2gobil7Y2FzZSBWaS5ST1VOREVEX1JFQ1Q6Y2FzZSBWaS5SRUNUOmNhc2UgVmkuSEVYQUdPTjphKj0yfWxldCBzPXtpZDpDcGUrKyxub2RlSWQ6VHIoZSxpKSxsZXZlbDp0LGRlc2NyOlRyKHIsaSksdHlwZTpuLGNoaWxkcmVuOltdLHdpZHRoOmkubWluZG1hcD8ubWF4Tm9kZVdpZHRoPz9vci5taW5kbWFwLm1heE5vZGVXaWR0aCxwYWRkaW5nOmF9LGw9TUhlKHQpO2lmKGwpbC5jaGlsZHJlbi5wdXNoKHMpLCRsLnB1c2gocyk7ZWxzZSBpZigkbC5sZW5ndGg9PT0wKSRsLnB1c2gocyk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGNhbiBiZSBvbmx5IG9uZSByb290LiBObyBwYXJlbnQgY291bGQgYmUgZm91bmQgZm9yICgiJytzLmRlc2NyKyciKScpfSwiYWRkTm9kZSIpLFZpPXtERUZBVUxUOjAsTk9fQk9SREVSOjAsUk9VTkRFRF9SRUNUOjEsUkVDVDoyLENJUkNMRTozLENMT1VEOjQsQkFORzo1LEhFWEFHT046Nn0sUEhlPW8oKHQsZSk9Pntzd2l0Y2goWS5kZWJ1ZygiSW4gZ2V0IHR5cGUiLHQsZSksdCl7Y2FzZSJbIjpyZXR1cm4gVmkuUkVDVDtjYXNlIigiOnJldHVybiBlPT09IikiP1ZpLlJPVU5ERURfUkVDVDpWaS5DTE9VRDtjYXNlIigoIjpyZXR1cm4gVmkuQ0lSQ0xFO2Nhc2UiKSI6cmV0dXJuIFZpLkNMT1VEO2Nhc2UiKSkiOnJldHVybiBWaS5CQU5HO2Nhc2Uie3siOnJldHVybiBWaS5IRVhBR09OO2RlZmF1bHQ6cmV0dXJuIFZpLkRFRkFVTFR9fSwiZ2V0VHlwZSIpLEJIZT1vKCh0LGUpPT57dlBbdF09ZX0sInNldEVsZW1lbnRGb3JJZCIpLEZIZT1vKHQ9PntpZighdClyZXR1cm47bGV0IGU9bWUoKSxyPSRsWyRsLmxlbmd0aC0xXTt0Lmljb24mJihyLmljb249VHIodC5pY29uLGUpKSx0LmNsYXNzJiYoci5jbGFzcz1Ucih0LmNsYXNzLGUpKX0sImRlY29yYXRlTm9kZSIpLCRIZT1vKHQ9Pntzd2l0Y2godCl7Y2FzZSBWaS5ERUZBVUxUOnJldHVybiJuby1ib3JkZXIiO2Nhc2UgVmkuUkVDVDpyZXR1cm4icmVjdCI7Y2FzZSBWaS5ST1VOREVEX1JFQ1Q6cmV0dXJuInJvdW5kZWQtcmVjdCI7Y2FzZSBWaS5DSVJDTEU6cmV0dXJuImNpcmNsZSI7Y2FzZSBWaS5DTE9VRDpyZXR1cm4iY2xvdWQiO2Nhc2UgVmkuQkFORzpyZXR1cm4iYmFuZyI7Y2FzZSBWaS5IRVhBR09OOnJldHVybiJoZXhnb24iO2RlZmF1bHQ6cmV0dXJuIm5vLWJvcmRlciJ9fSwidHlwZTJTdHIiKSx6SGU9bygoKT0+WSwiZ2V0TG9nZ2VyIiksR0hlPW8odD0+dlBbdF0sImdldEVsZW1lbnRCeUlkIiksVkhlPXtjbGVhcjpOSGUsYWRkTm9kZTpPSGUsZ2V0TWluZG1hcDpJSGUsbm9kZVR5cGU6VmksZ2V0VHlwZTpQSGUsc2V0RWxlbWVudEZvcklkOkJIZSxkZWNvcmF0ZU5vZGU6RkhlLHR5cGUyU3RyOiRIZSxnZXRMb2dnZXI6ekhlLGdldEVsZW1lbnRCeUlkOkdIZX0sQXBlPVZIZX0pO2Z1bmN0aW9uIFdpKHQpeyJAYmFiZWwvaGVscGVycyAtIHR5cGVvZiI7cmV0dXJuIFdpPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJnR5cGVvZiBTeW1ib2wuaXRlcmF0b3I9PSJzeW1ib2wiP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJnR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxXaSh0KX1mdW5jdGlvbiBNZih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIERwZSh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbi5rZXksbil9fWZ1bmN0aW9uIElmKHQsZSxyKXtyZXR1cm4gZSYmRHBlKHQucHJvdG90eXBlLGUpLHImJkRwZSh0LHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHR9ZnVuY3Rpb24gWDBlKHQsZSxyKXtyZXR1cm4gZSBpbiB0P09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTp0W2VdPXIsdH1mdW5jdGlvbiBfaSh0LGUpe3JldHVybiBISGUodCl8fHFIZSh0LGUpfHxaUCh0LGUpfHxYSGUoKX1mdW5jdGlvbiBqMGUodCl7cmV0dXJuIFVIZSh0KXx8V0hlKHQpfHxaUCh0KXx8WUhlKCl9ZnVuY3Rpb24gVUhlKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIE9QKHQpfWZ1bmN0aW9uIEhIZSh0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0fWZ1bmN0aW9uIFdIZSh0KXtpZih0eXBlb2YgU3ltYm9sPCJ1IiYmdFtTeW1ib2wuaXRlcmF0b3JdIT1udWxsfHx0WyJAQGl0ZXJhdG9yIl0hPW51bGwpcmV0dXJuIEFycmF5LmZyb20odCl9ZnVuY3Rpb24gcUhlKHQsZSl7dmFyIHI9dD09bnVsbD9udWxsOnR5cGVvZiBTeW1ib2w8InUiJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZihyIT1udWxsKXt2YXIgbj1bXSxpPSEwLGE9ITEscyxsO3RyeXtmb3Iocj1yLmNhbGwodCk7IShpPShzPXIubmV4dCgpKS5kb25lKSYmKG4ucHVzaChzLnZhbHVlKSwhKGUmJm4ubGVuZ3RoPT09ZSkpO2k9ITApO31jYXRjaCh1KXthPSEwLGw9dX1maW5hbGx5e3RyeXshaSYmci5yZXR1cm4hPW51bGwmJnIucmV0dXJuKCl9ZmluYWxseXtpZihhKXRocm93IGx9fXJldHVybiBufX1mdW5jdGlvbiBaUCh0LGUpe2lmKHQpe2lmKHR5cGVvZiB0PT0ic3RyaW5nIilyZXR1cm4gT1AodCxlKTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkuc2xpY2UoOCwtMSk7aWYocj09PSJPYmplY3QiJiZ0LmNvbnN0cnVjdG9yJiYocj10LmNvbnN0cnVjdG9yLm5hbWUpLHI9PT0iTWFwInx8cj09PSJTZXQiKXJldHVybiBBcnJheS5mcm9tKHQpO2lmKHI9PT0iQXJndW1lbnRzInx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QocikpcmV0dXJuIE9QKHQsZSl9fWZ1bmN0aW9uIE9QKHQsZSl7KGU9PW51bGx8fGU+dC5sZW5ndGgpJiYoZT10Lmxlbmd0aCk7Zm9yKHZhciByPTAsbj1uZXcgQXJyYXkoZSk7cjxlO3IrKyluW3JdPXRbcl07cmV0dXJuIG59ZnVuY3Rpb24gWUhlKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuCkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5gKX1mdW5jdGlvbiBYSGUoKXt0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLgpJbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuYCl9ZnVuY3Rpb24gbW8odCxlKXt2YXIgcj10eXBlb2YgU3ltYm9sPCJ1IiYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYoIXIpe2lmKEFycmF5LmlzQXJyYXkodCl8fChyPVpQKHQpKXx8ZSYmdCYmdHlwZW9mIHQubGVuZ3RoPT0ibnVtYmVyIil7ciYmKHQ9cik7dmFyIG49MCxpPW8oZnVuY3Rpb24oKXt9LCJGIik7cmV0dXJue3M6aSxuOm8oZnVuY3Rpb24oKXtyZXR1cm4gbj49dC5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOnRbbisrXX19LCJuIiksZTpvKGZ1bmN0aW9uKHUpe3Rocm93IHV9LCJlIiksZjppfX10aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuCkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5gKX12YXIgYT0hMCxzPSExLGw7cmV0dXJue3M6byhmdW5jdGlvbigpe3I9ci5jYWxsKHQpfSwicyIpLG46byhmdW5jdGlvbigpe3ZhciB1PXIubmV4dCgpO3JldHVybiBhPXUuZG9uZSx1fSwibiIpLGU6byhmdW5jdGlvbih1KXtzPSEwLGw9dX0sImUiKSxmOm8oZnVuY3Rpb24oKXt0cnl7IWEmJnIucmV0dXJuIT1udWxsJiZyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBsfX0sImYiKX19ZnVuY3Rpb24geVdlKHQpe3ZhciBlPXR5cGVvZiB0O3JldHVybiB0IT1udWxsJiYoZT09Im9iamVjdCJ8fGU9PSJmdW5jdGlvbiIpfWZ1bmN0aW9uIHZXZSh0LGUpe3JldHVybiBlPXtleHBvcnRzOnt9fSx0KGUsZS5leHBvcnRzKSxlLmV4cG9ydHN9ZnVuY3Rpb24gU1dlKHQpe2Zvcih2YXIgZT10Lmxlbmd0aDtlLS0mJkVXZS50ZXN0KHQuY2hhckF0KGUpKTspO3JldHVybiBlfWZ1bmN0aW9uIF9XZSh0KXtyZXR1cm4gdCYmdC5zbGljZSgwLENXZSh0KSsxKS5yZXBsYWNlKEFXZSwiIil9ZnVuY3Rpb24gTVdlKHQpe3ZhciBlPVJXZS5jYWxsKHQsQWIpLHI9dFtBYl07dHJ5e3RbQWJdPXZvaWQgMDt2YXIgbj0hMH1jYXRjaHt9dmFyIGk9TldlLmNhbGwodCk7cmV0dXJuIG4mJihlP3RbQWJdPXI6ZGVsZXRlIHRbQWJdKSxpfWZ1bmN0aW9uIEJXZSh0KXtyZXR1cm4gUFdlLmNhbGwodCl9ZnVuY3Rpb24gR1dlKHQpe3JldHVybiB0PT1udWxsP3Q9PT12b2lkIDA/eldlOiRXZTpOcGUmJk5wZSBpbiBPYmplY3QodCk/SVdlKHQpOkZXZSh0KX1mdW5jdGlvbiBWV2UodCl7cmV0dXJuIHQhPW51bGwmJnR5cGVvZiB0PT0ib2JqZWN0In1mdW5jdGlvbiBXV2UodCl7cmV0dXJuIHR5cGVvZiB0PT0ic3ltYm9sInx8VVdlKHQpJiZhbWUodCk9PUhXZX1mdW5jdGlvbiBLV2UodCl7aWYodHlwZW9mIHQ9PSJudW1iZXIiKXJldHVybiB0O2lmKHI0KHQpKXJldHVybiBNcGU7aWYoenAodCkpe3ZhciBlPXR5cGVvZiB0LnZhbHVlT2Y9PSJmdW5jdGlvbiI/dC52YWx1ZU9mKCk6dDt0PXpwKGUpP2UrIiI6ZX1pZih0eXBlb2YgdCE9InN0cmluZyIpcmV0dXJuIHQ9PT0wP3Q6K3Q7dD1EV2UodCk7dmFyIHI9WVdlLnRlc3QodCk7cmV0dXJuIHJ8fFhXZS50ZXN0KHQpP2pXZSh0LnNsaWNlKDIpLHI/Mjo4KTpxV2UudGVzdCh0KT9NcGU6K3R9ZnVuY3Rpb24gZXFlKHQsZSxyKXt2YXIgbixpLGEscyxsLHUsaD0wLGY9ITEsZD0hMSxwPSEwO2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoUVdlKTtlPUlwZShlKXx8MCx6cChyKSYmKGY9ISFyLmxlYWRpbmcsZD0ibWF4V2FpdCJpbiByLGE9ZD9aV2UoSXBlKHIubWF4V2FpdCl8fDAsZSk6YSxwPSJ0cmFpbGluZyJpbiByPyEhci50cmFpbGluZzpwKTtmdW5jdGlvbiBtKEUpe3ZhciBBPW4sUz1pO3JldHVybiBuPWk9dm9pZCAwLGg9RSxzPXQuYXBwbHkoUyxBKSxzfW8obSwiaW52b2tlRnVuYyIpO2Z1bmN0aW9uIGcoRSl7cmV0dXJuIGg9RSxsPXNldFRpbWVvdXQoeCxlKSxmP20oRSk6c31vKGcsImxlYWRpbmdFZGdlIik7ZnVuY3Rpb24geShFKXt2YXIgQT1FLXUsUz1FLWgsXz1lLUE7cmV0dXJuIGQ/SldlKF8sYS1TKTpffW8oeSwicmVtYWluaW5nV2FpdCIpO2Z1bmN0aW9uIHYoRSl7dmFyIEE9RS11LFM9RS1oO3JldHVybiB1PT09dm9pZCAwfHxBPj1lfHxBPDB8fGQmJlM+PWF9byh2LCJzaG91bGRJbnZva2UiKTtmdW5jdGlvbiB4KCl7dmFyIEU9eFAoKTtpZih2KEUpKXJldHVybiBiKEUpO2w9c2V0VGltZW91dCh4LHkoRSkpfW8oeCwidGltZXJFeHBpcmVkIik7ZnVuY3Rpb24gYihFKXtyZXR1cm4gbD12b2lkIDAscCYmbj9tKEUpOihuPWk9dm9pZCAwLHMpfW8oYiwidHJhaWxpbmdFZGdlIik7ZnVuY3Rpb24gdygpe2whPT12b2lkIDAmJmNsZWFyVGltZW91dChsKSxoPTAsbj11PWk9bD12b2lkIDB9byh3LCJjYW5jZWwiKTtmdW5jdGlvbiBDKCl7cmV0dXJuIGw9PT12b2lkIDA/czpiKHhQKCkpfW8oQywiZmx1c2giKTtmdW5jdGlvbiBUKCl7dmFyIEU9eFAoKSxBPXYoRSk7aWYobj1hcmd1bWVudHMsaT10aGlzLHU9RSxBKXtpZihsPT09dm9pZCAwKXJldHVybiBnKHUpO2lmKGQpcmV0dXJuIGNsZWFyVGltZW91dChsKSxsPXNldFRpbWVvdXQoeCxlKSxtKHUpfXJldHVybiBsPT09dm9pZCAwJiYobD1zZXRUaW1lb3V0KHgsZSkpLHN9cmV0dXJuIG8oVCwiZGVib3VuY2VkIiksVC5jYW5jZWw9dyxULmZsdXNoPUMsVH1mdW5jdGlvbiBJUyh0LGUscixuLGksYSl7dmFyIHM7cmV0dXJuIHNpKHQpP3M9dDpzPVExW3RdfHxRMS5ldWNsaWRlYW4sZT09PTAmJnNpKHQpP3MoaSxhKTpzKGUscixuLGksYSl9ZnVuY3Rpb24gcVllKHQsZSl7aWYoT1ModCkpcmV0dXJuITE7dmFyIHI9dHlwZW9mIHQ7cmV0dXJuIHI9PSJudW1iZXIifHxyPT0ic3ltYm9sInx8cj09ImJvb2xlYW4ifHx0PT1udWxsfHxyNCh0KT8hMDpXWWUudGVzdCh0KXx8IUhZZS50ZXN0KHQpfHxlIT1udWxsJiZ0IGluIE9iamVjdChlKX1mdW5jdGlvbiBaWWUodCl7aWYoIXpwKHQpKXJldHVybiExO3ZhciBlPWFtZSh0KTtyZXR1cm4gZT09alllfHxlPT1LWWV8fGU9PVhZZXx8ZT09UVllfWZ1bmN0aW9uIHRYZSh0KXtyZXR1cm4hIWUwZSYmZTBlIGluIHR9ZnVuY3Rpb24gYVhlKHQpe2lmKHQhPW51bGwpe3RyeXtyZXR1cm4gaVhlLmNhbGwodCl9Y2F0Y2h7fXRyeXtyZXR1cm4gdCsiIn1jYXRjaHt9fXJldHVybiIifWZ1bmN0aW9uIHBYZSh0KXtpZighenAodCl8fHJYZSh0KSlyZXR1cm4hMTt2YXIgZT1KWWUodCk/ZFhlOmxYZTtyZXR1cm4gZS50ZXN0KHNYZSh0KSl9ZnVuY3Rpb24gZ1hlKHQsZSl7cmV0dXJuIHQ/LltlXX1mdW5jdGlvbiB2WGUodCxlKXt2YXIgcj15WGUodCxlKTtyZXR1cm4gbVhlKHIpP3I6dm9pZCAwfWZ1bmN0aW9uIGJYZSgpe3RoaXMuX19kYXRhX189amI/amIobnVsbCk6e30sdGhpcy5zaXplPTB9ZnVuY3Rpb24gVFhlKHQpe3ZhciBlPXRoaXMuaGFzKHQpJiZkZWxldGUgdGhpcy5fX2RhdGFfX1t0XTtyZXR1cm4gdGhpcy5zaXplLT1lPzE6MCxlfWZ1bmN0aW9uIEFYZSh0KXt2YXIgZT10aGlzLl9fZGF0YV9fO2lmKGpiKXt2YXIgcj1lW3RdO3JldHVybiByPT09RVhlP3ZvaWQgMDpyfXJldHVybiBDWGUuY2FsbChlLHQpP2VbdF06dm9pZCAwfWZ1bmN0aW9uIFJYZSh0KXt2YXIgZT10aGlzLl9fZGF0YV9fO3JldHVybiBqYj9lW3RdIT09dm9pZCAwOkxYZS5jYWxsKGUsdCl9ZnVuY3Rpb24gSVhlKHQsZSl7dmFyIHI9dGhpcy5fX2RhdGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyh0KT8wOjEsclt0XT1qYiYmZT09PXZvaWQgMD9NWGU6ZSx0aGlzfWZ1bmN0aW9uIHR5KHQpe3ZhciBlPS0xLHI9dD09bnVsbD8wOnQubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytlPHI7KXt2YXIgbj10W2VdO3RoaXMuc2V0KG5bMF0sblsxXSl9fWZ1bmN0aW9uIFBYZSgpe3RoaXMuX19kYXRhX189W10sdGhpcy5zaXplPTB9ZnVuY3Rpb24gRlhlKHQsZSl7cmV0dXJuIHQ9PT1lfHx0IT09dCYmZSE9PWV9ZnVuY3Rpb24gJFhlKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoO3ItLTspaWYoTG1lKHRbcl1bMF0sZSkpcmV0dXJuIHI7cmV0dXJuLTF9ZnVuY3Rpb24gVlhlKHQpe3ZhciBlPXRoaXMuX19kYXRhX18scj1QUyhlLHQpO2lmKHI8MClyZXR1cm4hMTt2YXIgbj1lLmxlbmd0aC0xO3JldHVybiByPT1uP2UucG9wKCk6R1hlLmNhbGwoZSxyLDEpLC0tdGhpcy5zaXplLCEwfWZ1bmN0aW9uIEhYZSh0KXt2YXIgZT10aGlzLl9fZGF0YV9fLHI9UFMoZSx0KTtyZXR1cm4gcjwwP3ZvaWQgMDplW3JdWzFdfWZ1bmN0aW9uIHFYZSh0KXtyZXR1cm4gUFModGhpcy5fX2RhdGFfXyx0KT4tMX1mdW5jdGlvbiBYWGUodCxlKXt2YXIgcj10aGlzLl9fZGF0YV9fLG49UFMocix0KTtyZXR1cm4gbjwwPygrK3RoaXMuc2l6ZSxyLnB1c2goW3QsZV0pKTpyW25dWzFdPWUsdGhpc31mdW5jdGlvbiByeSh0KXt2YXIgZT0tMSxyPXQ9PW51bGw/MDp0Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrZTxyOyl7dmFyIG49dFtlXTt0aGlzLnNldChuWzBdLG5bMV0pfX1mdW5jdGlvbiBKWGUoKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyB0MGUsbWFwOm5ldyhaWGV8fEtYZSksc3RyaW5nOm5ldyB0MGV9fWZ1bmN0aW9uIHRqZSh0KXt2YXIgZT10eXBlb2YgdDtyZXR1cm4gZT09InN0cmluZyJ8fGU9PSJudW1iZXIifHxlPT0ic3ltYm9sInx8ZT09ImJvb2xlYW4iP3QhPT0iX19wcm90b19fIjp0PT09bnVsbH1mdW5jdGlvbiBuamUodCxlKXt2YXIgcj10Ll9fZGF0YV9fO3JldHVybiByamUoZSk/clt0eXBlb2YgZT09InN0cmluZyI/InN0cmluZyI6Imhhc2giXTpyLm1hcH1mdW5jdGlvbiBpamUodCl7dmFyIGU9QlModGhpcyx0KS5kZWxldGUodCk7cmV0dXJuIHRoaXMuc2l6ZS09ZT8xOjAsZX1mdW5jdGlvbiBzamUodCl7cmV0dXJuIEJTKHRoaXMsdCkuZ2V0KHQpfWZ1bmN0aW9uIGxqZSh0KXtyZXR1cm4gQlModGhpcyx0KS5oYXModCl9ZnVuY3Rpb24gdWplKHQsZSl7dmFyIHI9QlModGhpcyx0KSxuPXIuc2l6ZTtyZXR1cm4gci5zZXQodCxlKSx0aGlzLnNpemUrPXIuc2l6ZT09bj8wOjEsdGhpc31mdW5jdGlvbiBueSh0KXt2YXIgZT0tMSxyPXQ9PW51bGw/MDp0Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrZTxyOyl7dmFyIG49dFtlXTt0aGlzLnNldChuWzBdLG5bMV0pfX1mdW5jdGlvbiBjQih0LGUpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24ifHxlIT1udWxsJiZ0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKGZqZSk7dmFyIHI9byhmdW5jdGlvbigpe3ZhciBuPWFyZ3VtZW50cyxpPWU/ZS5hcHBseSh0aGlzLG4pOm5bMF0sYT1yLmNhY2hlO2lmKGEuaGFzKGkpKXJldHVybiBhLmdldChpKTt2YXIgcz10LmFwcGx5KHRoaXMsbik7cmV0dXJuIHIuY2FjaGU9YS5zZXQoaSxzKXx8YSxzfSwibWVtb2l6ZWQiKTtyZXR1cm4gci5jYWNoZT1uZXcoY0IuQ2FjaGV8fFJtZSkscn1mdW5jdGlvbiBtamUodCl7dmFyIGU9ZGplKHQsZnVuY3Rpb24obil7cmV0dXJuIHIuc2l6ZT09PXBqZSYmci5jbGVhcigpLG59KSxyPWUuY2FjaGU7cmV0dXJuIGV9ZnVuY3Rpb24gYmplKHQsZSl7Zm9yKHZhciByPS0xLG49dD09bnVsbD8wOnQubGVuZ3RoLGk9QXJyYXkobik7KytyPG47KWlbcl09ZSh0W3JdLHIsdCk7cmV0dXJuIGl9ZnVuY3Rpb24gSW1lKHQpe2lmKHR5cGVvZiB0PT0ic3RyaW5nIilyZXR1cm4gdDtpZihPUyh0KSlyZXR1cm4gTW1lKHQsSW1lKSsiIjtpZihyNCh0KSlyZXR1cm4gbjBlP24wZS5jYWxsKHQpOiIiO3ZhciBlPXQrIiI7cmV0dXJuIGU9PSIwIiYmMS90PT0td2plPyItMCI6ZX1mdW5jdGlvbiBramUodCl7cmV0dXJuIHQ9PW51bGw/IiI6VGplKHQpfWZ1bmN0aW9uIEVqZSh0LGUpe3JldHVybiBPUyh0KT90OllZZSh0LGUpP1t0XTpObWUoT21lKHQpKX1mdW5jdGlvbiBDamUodCl7aWYodHlwZW9mIHQ9PSJzdHJpbmcifHxyNCh0KSlyZXR1cm4gdDt2YXIgZT10KyIiO3JldHVybiBlPT0iMCImJjEvdD09LVNqZT8iLTAiOmV9ZnVuY3Rpb24gQWplKHQsZSl7ZT1QbWUoZSx0KTtmb3IodmFyIHI9MCxuPWUubGVuZ3RoO3QhPW51bGwmJnI8bjspdD10W3VCKGVbcisrXSldO3JldHVybiByJiZyPT1uP3Q6dm9pZCAwfWZ1bmN0aW9uIERqZSh0LGUscil7dmFyIG49dD09bnVsbD92b2lkIDA6X2plKHQsZSk7cmV0dXJuIG49PT12b2lkIDA/cjpufWZ1bmN0aW9uIE5qZSh0LGUscil7ZT09Il9fcHJvdG9fXyImJmkwZT9pMGUodCxlLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpyLHdyaXRhYmxlOiEwfSk6dFtlXT1yfWZ1bmN0aW9uIFBqZSh0LGUscil7dmFyIG49dFtlXTsoIShPamUuY2FsbCh0LGUpJiZMbWUobixyKSl8fHI9PT12b2lkIDAmJiEoZSBpbiB0KSkmJk1qZSh0LGUscil9ZnVuY3Rpb24gemplKHQsZSl7dmFyIHI9dHlwZW9mIHQ7cmV0dXJuIGU9ZT8/RmplLCEhZSYmKHI9PSJudW1iZXIifHxyIT0ic3ltYm9sIiYmJGplLnRlc3QodCkpJiZ0Pi0xJiZ0JTE9PTAmJnQ8ZX1mdW5jdGlvbiBWamUodCxlLHIsbil7aWYoIXpwKHQpKXJldHVybiB0O2U9UG1lKGUsdCk7Zm9yKHZhciBpPS0xLGE9ZS5sZW5ndGgscz1hLTEsbD10O2whPW51bGwmJisraTxhOyl7dmFyIHU9dUIoZVtpXSksaD1yO2lmKHU9PT0iX19wcm90b19fInx8dT09PSJjb25zdHJ1Y3RvciJ8fHU9PT0icHJvdG90eXBlIilyZXR1cm4gdDtpZihpIT1zKXt2YXIgZj1sW3VdO2g9bj9uKGYsdSxsKTp2b2lkIDAsaD09PXZvaWQgMCYmKGg9enAoZik/ZjpHamUoZVtpKzFdKT9bXTp7fSl9QmplKGwsdSxoKSxsPWxbdV19cmV0dXJuIHR9ZnVuY3Rpb24gSGplKHQsZSxyKXtyZXR1cm4gdD09bnVsbD90OlVqZSh0LGUscil9ZnVuY3Rpb24gcWplKHQsZSl7dmFyIHI9LTEsbj10Lmxlbmd0aDtmb3IoZXx8KGU9QXJyYXkobikpOysrcjxuOyllW3JdPXRbcl07cmV0dXJuIGV9ZnVuY3Rpb24gWGplKHQpe3JldHVybiBPUyh0KT9NbWUodCx1Qik6cjQodCk/W3RdOllqZShObWUoT21lKHQpKSl9ZnVuY3Rpb24gZkIodCxlLHIsbil7Zm9yKHZhciBpPVtdLGE9bmV3IEoxLHM9dC5jeSgpLGw9cy5oYXNDb21wb3VuZE5vZGVzKCksdT0wO3U8dC5sZW5ndGg7dSsrKXt2YXIgaD10W3VdO3I/aS5wdXNoKGgpOmwmJm4oaSxhLGgpfWZvcig7aS5sZW5ndGg+MDspe3ZhciBmPWkuc2hpZnQoKTtlKGYpLGEuYWRkKGYuaWQoKSksbCYmbihpLGEsZil9cmV0dXJuIHR9ZnVuY3Rpb24gRm1lKHQsZSxyKXtpZihyLmlzUGFyZW50KCkpZm9yKHZhciBuPXIuX3ByaXZhdGUuY2hpbGRyZW4saT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgYT1uW2ldO2UuaGFzKGEuaWQoKSl8fHQucHVzaChhKX19ZnVuY3Rpb24gJG1lKHQsZSxyKXtpZihyLmlzQ2hpbGQoKSl7dmFyIG49ci5fcHJpdmF0ZS5wYXJlbnQ7ZS5oYXMobi5pZCgpKXx8dC5wdXNoKG4pfX1mdW5jdGlvbiBkS2UodCxlLHIpeyRtZSh0LGUsciksRm1lKHQsZSxyKX1mdW5jdGlvbiBTUCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHI9dGhpcztpZihlPT09dm9pZCAwJiYoZT0hMCksci5sZW5ndGghPT0wKWlmKHIuaXNOb2RlKCkmJiFyLnJlbW92ZWQoKSl7Zm9yKHZhciBuPTAsaT1yWzBdLGE9aS5fcHJpdmF0ZS5lZGdlcyxzPTA7czxhLmxlbmd0aDtzKyspe3ZhciBsPWFbc107IWUmJmwuaXNMb29wKCl8fChuKz10KGksbCkpfXJldHVybiBufWVsc2UgcmV0dXJufX1mdW5jdGlvbiBGMSh0LGUpe3JldHVybiBmdW5jdGlvbihyKXtmb3IodmFyIG4saT10aGlzLm5vZGVzKCksYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgcz1pW2FdLGw9c1t0XShyKTtsIT09dm9pZCAwJiYobj09PXZvaWQgMHx8ZShsLG4pKSYmKG49bCl9cmV0dXJuIG59fWZ1bmN0aW9uIExiKCl7cmV0dXJuITF9ZnVuY3Rpb24gclMoKXtyZXR1cm4hMH1mdW5jdGlvbiAkUygpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06TktlLGU9YXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAscj0wO3I8dTBlLmxlbmd0aDtyKyspe3ZhciBuPXUwZVtyXTt0aGlzW25dPXRbbl18fFhtZVtuXX10aGlzLmNvbnRleHQ9ZXx8dGhpcy5jb250ZXh0LHRoaXMubGlzdGVuZXJzPVtdLHRoaXMuZW1pdHRpbmc9MH1mdW5jdGlvbiBKbWUodCxlLHIpe3ZhciBuPXIuX3ByaXZhdGUsaT1uLnN0eWxlQ2FjaGU9bi5zdHlsZUNhY2hlfHxbXSxhO3JldHVybihhPWlbdF0pIT1udWxsfHwoYT1pW3RdPWUocikpLGF9ZnVuY3Rpb24gelModCxlKXtyZXR1cm4gdD1fZih0KSxvKGZ1bmN0aW9uKG4pe3JldHVybiBKbWUodCxlLG4pfSwiY2FjaGVkU3R5bGVGdW5jdGlvbiIpfWZ1bmN0aW9uIEdTKHQsZSl7dD1fZih0KTt2YXIgcj1vKGZ1bmN0aW9uKGkpe3JldHVybiBlLmNhbGwoaSl9LCJzZWxmRm4iKTtyZXR1cm4gbyhmdW5jdGlvbigpe3ZhciBpPXRoaXNbMF07aWYoaSlyZXR1cm4gSm1lKHQscixpKX0sImNhY2hlZFByb3RvdHlwZVN0eWxlRnVuY3Rpb24iKX1mdW5jdGlvbiBBUCh0LGUpe3ZhciByPXQuX3ByaXZhdGUsbj1yLmRhdGEucGFyZW50P3QucGFyZW50cygpOm51bGw7aWYobilmb3IodmFyIGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIGE9bltpXTtpZighZShhKSlyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBkQih0KXt2YXIgZT10Lm9rLHI9dC5lZGdlT2tWaWFOb2RlfHx0Lm9rLG49dC5wYXJlbnRPa3x8dC5vaztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaT10aGlzLmN5KCk7aWYoIWkuc3R5bGVFbmFibGVkKCkpcmV0dXJuITA7dmFyIGE9dGhpc1swXSxzPWkuaGFzQ29tcG91bmROb2RlcygpO2lmKGEpe3ZhciBsPWEuX3ByaXZhdGU7aWYoIWUoYSkpcmV0dXJuITE7aWYoYS5pc05vZGUoKSlyZXR1cm4hc3x8QVAoYSxuKTt2YXIgdT1sLnNvdXJjZSxoPWwudGFyZ2V0O3JldHVybiByKHUpJiYoIXN8fEFQKHUscikpJiYodT09PWh8fHIoaCkmJighc3x8QVAoaCxyKSkpfX19ZnVuY3Rpb24gZjBlKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cyxyPVtdO2lmKGUubGVuZ3RoPT09Mil7dmFyIG49ZVswXSxpPWVbMV07dGhpcy5vbih0LmV2ZW50LG4saSl9ZWxzZSBpZihlLmxlbmd0aD09PTEmJnNpKGVbMF0pKXt2YXIgYT1lWzBdO3RoaXMub24odC5ldmVudCxhKX1lbHNlIGlmKGUubGVuZ3RoPT09MHx8ZS5sZW5ndGg9PT0xJiZFbihlWzBdKSl7Zm9yKHZhciBzPWUubGVuZ3RoPT09MT9lWzBdOm51bGwsbD0wO2w8dGhpcy5sZW5ndGg7bCsrKXt2YXIgdT10aGlzW2xdLGg9IXQuYWJsZUZpZWxkfHx1Ll9wcml2YXRlW3QuYWJsZUZpZWxkXSxmPXUuX3ByaXZhdGVbdC5maWVsZF0hPXQudmFsdWU7aWYodC5vdmVycmlkZUFibGUpe3ZhciBkPXQub3ZlcnJpZGVBYmxlKHUpO2lmKGQhPT12b2lkIDAmJihoPWQsIWQpKXJldHVybiB0aGlzfWgmJih1Ll9wcml2YXRlW3QuZmllbGRdPXQudmFsdWUsZiYmci5wdXNoKHUpKX12YXIgcD10aGlzLnNwYXduKHIpO3AudXBkYXRlU3R5bGUoKSxwLmVtaXQodC5ldmVudCkscyYmcC5lbWl0KHMpfXJldHVybiB0aGlzfX1mdW5jdGlvbiBheSh0KXtDZlt0LmZpZWxkXT1mdW5jdGlvbigpe3ZhciBlPXRoaXNbMF07aWYoZSl7aWYodC5vdmVycmlkZUZpZWxkKXt2YXIgcj10Lm92ZXJyaWRlRmllbGQoZSk7aWYociE9PXZvaWQgMClyZXR1cm4gcn1yZXR1cm4gZS5fcHJpdmF0ZVt0LmZpZWxkXX19LENmW3Qub25dPWYwZSh7ZXZlbnQ6dC5vbixmaWVsZDp0LmZpZWxkLGFibGVGaWVsZDp0LmFibGVGaWVsZCxvdmVycmlkZUFibGU6dC5vdmVycmlkZUFibGUsdmFsdWU6ITB9KSxDZlt0Lm9mZl09ZjBlKHtldmVudDp0Lm9mZixmaWVsZDp0LmZpZWxkLGFibGVGaWVsZDp0LmFibGVGaWVsZCxvdmVycmlkZUFibGU6dC5vdmVycmlkZUFibGUsdmFsdWU6ITF9KX1mdW5jdGlvbiBnMGUodCl7cmV0dXJuIG8oZnVuY3Rpb24ocil7Zm9yKHZhciBuPVtdLGk9MDtpPHRoaXMubGVuZ3RoO2krKyl7dmFyIGE9dGhpc1tpXSxzPWEuX3ByaXZhdGVbdC5hdHRyXTtzJiZuLnB1c2gocyl9cmV0dXJuIHRoaXMuc3Bhd24obiwhMCkuZmlsdGVyKHIpfSwic291cmNlSW1wbCIpfWZ1bmN0aW9uIHkwZSh0KXtyZXR1cm4gbyhmdW5jdGlvbihyKXt2YXIgbj1bXSxpPXRoaXMuX3ByaXZhdGUuY3ksYT10fHx7fTtadChyKSYmKHI9aS4kKHIpKTtmb3IodmFyIHM9MDtzPHIubGVuZ3RoO3MrKylmb3IodmFyIGw9cltzXS5fcHJpdmF0ZS5lZGdlcyx1PTA7dTxsLmxlbmd0aDt1Kyspe3ZhciBoPWxbdV0sZj1oLl9wcml2YXRlLmRhdGEsZD10aGlzLmhhc0VsZW1lbnRXaXRoSWQoZi5zb3VyY2UpJiZyLmhhc0VsZW1lbnRXaXRoSWQoZi50YXJnZXQpLHA9ci5oYXNFbGVtZW50V2l0aElkKGYuc291cmNlKSYmdGhpcy5oYXNFbGVtZW50V2l0aElkKGYudGFyZ2V0KSxtPWR8fHA7bSYmKChhLnRoaXNJc1NyY3x8YS50aGlzSXNUZ3QpJiYoYS50aGlzSXNTcmMmJiFkfHxhLnRoaXNJc1RndCYmIXApfHxuLnB1c2goaCkpfXJldHVybiB0aGlzLnNwYXduKG4sITApfSwiZWRnZXNXaXRoSW1wbCIpfWZ1bmN0aW9uIHYwZSh0KXt2YXIgZT17Y29kaXJlY3RlZDohMX07cmV0dXJuIHQ9cnIoe30sZSx0KSxvKGZ1bmN0aW9uKG4pe2Zvcih2YXIgaT1bXSxhPXRoaXMuZWRnZXMoKSxzPXQsbD0wO2w8YS5sZW5ndGg7bCsrKWZvcih2YXIgdT1hW2xdLGg9dS5fcHJpdmF0ZSxmPWguc291cmNlLGQ9Zi5fcHJpdmF0ZS5kYXRhLmlkLHA9aC5kYXRhLnRhcmdldCxtPWYuX3ByaXZhdGUuZWRnZXMsZz0wO2c8bS5sZW5ndGg7ZysrKXt2YXIgeT1tW2ddLHY9eS5fcHJpdmF0ZS5kYXRhLHg9di50YXJnZXQsYj12LnNvdXJjZSx3PXg9PT1wJiZiPT09ZCxDPWQ9PT14JiZwPT09Yjsocy5jb2RpcmVjdGVkJiZ3fHwhcy5jb2RpcmVjdGVkJiYod3x8QykpJiZpLnB1c2goeSl9cmV0dXJuIHRoaXMuc3Bhd24oaSwhMCkuZmlsdGVyKG4pfSwicGFyYWxsZWxFZGdlc0ltcGwiKX1mdW5jdGlvbiBVS2UodCxlLHIsbil7dmFyIGk9NCxhPS4wMDEscz0xZS03LGw9MTAsdT0xMSxoPTEvKHUtMSksZj10eXBlb2YgRmxvYXQzMkFycmF5PCJ1IjtpZihhcmd1bWVudHMubGVuZ3RoIT09NClyZXR1cm4hMTtmb3IodmFyIGQ9MDtkPDQ7KytkKWlmKHR5cGVvZiBhcmd1bWVudHNbZF0hPSJudW1iZXIifHxpc05hTihhcmd1bWVudHNbZF0pfHwhaXNGaW5pdGUoYXJndW1lbnRzW2RdKSlyZXR1cm4hMTt0PU1hdGgubWluKHQsMSkscj1NYXRoLm1pbihyLDEpLHQ9TWF0aC5tYXgodCwwKSxyPU1hdGgubWF4KHIsMCk7dmFyIHA9Zj9uZXcgRmxvYXQzMkFycmF5KHUpOm5ldyBBcnJheSh1KTtmdW5jdGlvbiBtKEksRCl7cmV0dXJuIDEtMypEKzMqSX1vKG0sIkEiKTtmdW5jdGlvbiBnKEksRCl7cmV0dXJuIDMqRC02Kkl9byhnLCJCIik7ZnVuY3Rpb24geShJKXtyZXR1cm4gMypJfW8oeSwiQyIpO2Z1bmN0aW9uIHYoSSxELGspe3JldHVybigobShELGspKkkrZyhELGspKSpJK3koRCkpKkl9byh2LCJjYWxjQmV6aWVyIik7ZnVuY3Rpb24geChJLEQsayl7cmV0dXJuIDMqbShELGspKkkqSSsyKmcoRCxrKSpJK3koRCl9byh4LCJnZXRTbG9wZSIpO2Z1bmN0aW9uIGIoSSxEKXtmb3IodmFyIGs9MDtrPGk7KytrKXt2YXIgTD14KEQsdCxyKTtpZihMPT09MClyZXR1cm4gRDt2YXIgUj12KEQsdCxyKS1JO0QtPVIvTH1yZXR1cm4gRH1vKGIsIm5ld3RvblJhcGhzb25JdGVyYXRlIik7ZnVuY3Rpb24gdygpe2Zvcih2YXIgST0wO0k8dTsrK0kpcFtJXT12KEkqaCx0LHIpfW8odywiY2FsY1NhbXBsZVZhbHVlcyIpO2Z1bmN0aW9uIEMoSSxELGspe3ZhciBMLFIsTz0wO2RvIFI9RCsoay1EKS8yLEw9dihSLHQsciktSSxMPjA/az1SOkQ9Ujt3aGlsZShNYXRoLmFicyhMKT5zJiYrK088bCk7cmV0dXJuIFJ9byhDLCJiaW5hcnlTdWJkaXZpZGUiKTtmdW5jdGlvbiBUKEkpe2Zvcih2YXIgRD0wLGs9MSxMPXUtMTtrIT09TCYmcFtrXTw9STsrK2spRCs9aDstLWs7dmFyIFI9KEktcFtrXSkvKHBbaysxXS1wW2tdKSxPPUQrUipoLE09eChPLHQscik7cmV0dXJuIE0+PWE/YihJLE8pOk09PT0wP086QyhJLEQsRCtoKX1vKFQsImdldFRGb3JYIik7dmFyIEU9ITE7ZnVuY3Rpb24gQSgpe0U9ITAsKHQhPT1lfHxyIT09bikmJncoKX1vKEEsInByZWNvbXB1dGUiKTt2YXIgUz1vKGZ1bmN0aW9uKEQpe3JldHVybiBFfHxBKCksdD09PWUmJnI9PT1uP0Q6RD09PTA/MDpEPT09MT8xOnYoVChEKSxlLG4pfSwiZiIpO1MuZ2V0Q29udHJvbFBvaW50cz1mdW5jdGlvbigpe3JldHVyblt7eDp0LHk6ZX0se3g6cix5Om59XX07dmFyIF89ImdlbmVyYXRlQmV6aWVyKCIrW3QsZSxyLG5dKyIpIjtyZXR1cm4gUy50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBffSxTfWZ1bmN0aW9uIHgwZSh0LGUscixuLGkpe2lmKG49PT0xfHxlPT09cilyZXR1cm4gcjt2YXIgYT1pKGUscixuKTtyZXR1cm4gdD09bnVsbHx8KCh0LnJvdW5kVmFsdWV8fHQuY29sb3IpJiYoYT1NYXRoLnJvdW5kKGEpKSx0Lm1pbiE9PXZvaWQgMCYmKGE9TWF0aC5tYXgoYSx0Lm1pbikpLHQubWF4IT09dm9pZCAwJiYoYT1NYXRoLm1pbihhLHQubWF4KSkpLGF9ZnVuY3Rpb24gYjBlKHQsZSl7cmV0dXJuIHQucGZWYWx1ZSE9bnVsbHx8dC52YWx1ZSE9bnVsbD90LnBmVmFsdWUhPW51bGwmJihlPT1udWxsfHxlLnR5cGUudW5pdHMhPT0iJSIpP3QucGZWYWx1ZTp0LnZhbHVlOnR9ZnVuY3Rpb24gJDEodCxlLHIsbixpKXt2YXIgYT1pIT1udWxsP2kudHlwZTpudWxsO3I8MD9yPTA6cj4xJiYocj0xKTt2YXIgcz1iMGUodCxpKSxsPWIwZShlLGkpO2lmKEN0KHMpJiZDdChsKSlyZXR1cm4geDBlKGEscyxsLHIsbik7aWYoRW4ocykmJkVuKGwpKXtmb3IodmFyIHU9W10saD0wO2g8bC5sZW5ndGg7aCsrKXt2YXIgZj1zW2hdLGQ9bFtoXTtpZihmIT1udWxsJiZkIT1udWxsKXt2YXIgcD14MGUoYSxmLGQscixuKTt1LnB1c2gocCl9ZWxzZSB1LnB1c2goZCl9cmV0dXJuIHV9fWZ1bmN0aW9uIFdLZSh0LGUscixuKXt2YXIgaT0hbixhPXQuX3ByaXZhdGUscz1lLl9wcml2YXRlLGw9cy5lYXNpbmcsdT1zLnN0YXJ0VGltZSxoPW4/dDp0LmN5KCksZj1oLnN0eWxlKCk7aWYoIXMuZWFzaW5nSW1wbClpZihsPT1udWxsKXMuZWFzaW5nSW1wbD1kUy5saW5lYXI7ZWxzZXt2YXIgZDtpZihadChsKSl7dmFyIHA9Zi5wYXJzZSgidHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24iLGwpO2Q9cC52YWx1ZX1lbHNlIGQ9bDt2YXIgbSxnO1p0KGQpPyhtPWQsZz1bXSk6KG09ZFsxXSxnPWQuc2xpY2UoMikubWFwKGZ1bmN0aW9uKFApe3JldHVybitQfSkpLGcubGVuZ3RoPjA/KG09PT0ic3ByaW5nIiYmZy5wdXNoKHMuZHVyYXRpb24pLHMuZWFzaW5nSW1wbD1kU1ttXS5hcHBseShudWxsLGcpKTpzLmVhc2luZ0ltcGw9ZFNbbV19dmFyIHk9cy5lYXNpbmdJbXBsLHY7aWYocy5kdXJhdGlvbj09PTA/dj0xOnY9KHItdSkvcy5kdXJhdGlvbixzLmFwcGx5aW5nJiYodj1zLnByb2dyZXNzKSx2PDA/dj0wOnY+MSYmKHY9MSkscy5kZWxheT09bnVsbCl7dmFyIHg9cy5zdGFydFBvc2l0aW9uLGI9cy5wb3NpdGlvbjtpZihiJiZpJiYhdC5sb2NrZWQoKSl7dmFyIHc9e307UmIoeC54LGIueCkmJih3Lng9JDEoeC54LGIueCx2LHkpKSxSYih4LnksYi55KSYmKHcueT0kMSh4LnksYi55LHYseSkpLHQucG9zaXRpb24odyl9dmFyIEM9cy5zdGFydFBhbixUPXMucGFuLEU9YS5wYW4sQT1UIT1udWxsJiZuO0EmJihSYihDLngsVC54KSYmKEUueD0kMShDLngsVC54LHYseSkpLFJiKEMueSxULnkpJiYoRS55PSQxKEMueSxULnksdix5KSksdC5lbWl0KCJwYW4iKSk7dmFyIFM9cy5zdGFydFpvb20sXz1zLnpvb20sST1fIT1udWxsJiZuO0kmJihSYihTLF8pJiYoYS56b29tPVliKGEubWluWm9vbSwkMShTLF8sdix5KSxhLm1heFpvb20pKSx0LmVtaXQoInpvb20iKSksKEF8fEkpJiZ0LmVtaXQoInZpZXdwb3J0Iik7dmFyIEQ9cy5zdHlsZTtpZihEJiZELmxlbmd0aD4wJiZpKXtmb3IodmFyIGs9MDtrPEQubGVuZ3RoO2srKyl7dmFyIEw9RFtrXSxSPUwubmFtZSxPPUwsTT1zLnN0YXJ0U3R5bGVbUl0sQj1mLnByb3BlcnRpZXNbTS5uYW1lXSxGPSQxKE0sTyx2LHksQik7Zi5vdmVycmlkZUJ5cGFzcyh0LFIsRil9dC5lbWl0KCJzdHlsZSIpfX1yZXR1cm4gcy5wcm9ncmVzcz12LHZ9ZnVuY3Rpb24gUmIodCxlKXtyZXR1cm4gdD09bnVsbHx8ZT09bnVsbD8hMTpDdCh0KSYmQ3QoZSk/ITA6ISEodCYmZSl9ZnVuY3Rpb24gcUtlKHQsZSxyLG4pe3ZhciBpPWUuX3ByaXZhdGU7aS5zdGFydGVkPSEwLGkuc3RhcnRUaW1lPXItaS5wcm9ncmVzcyppLmR1cmF0aW9ufWZ1bmN0aW9uIHcwZSh0LGUpe3ZhciByPWUuX3ByaXZhdGUuYW5pRWxlcyxuPVtdO2Z1bmN0aW9uIGkoZixkKXt2YXIgcD1mLl9wcml2YXRlLG09cC5hbmltYXRpb24uY3VycmVudCxnPXAuYW5pbWF0aW9uLnF1ZXVlLHk9ITE7aWYobS5sZW5ndGg9PT0wKXt2YXIgdj1nLnNoaWZ0KCk7diYmbS5wdXNoKHYpfWZvcih2YXIgeD1vKGZ1bmN0aW9uKEUpe2Zvcih2YXIgQT1FLmxlbmd0aC0xO0E+PTA7QS0tKXt2YXIgUz1FW0FdO1MoKX1FLnNwbGljZSgwLEUubGVuZ3RoKX0sImNhbGxiYWNrcyIpLGI9bS5sZW5ndGgtMTtiPj0wO2ItLSl7dmFyIHc9bVtiXSxDPXcuX3ByaXZhdGU7aWYoQy5zdG9wcGVkKXttLnNwbGljZShiLDEpLEMuaG9va2VkPSExLEMucGxheWluZz0hMSxDLnN0YXJ0ZWQ9ITEseChDLmZyYW1lcyk7Y29udGludWV9IUMucGxheWluZyYmIUMuYXBwbHlpbmd8fChDLnBsYXlpbmcmJkMuYXBwbHlpbmcmJihDLmFwcGx5aW5nPSExKSxDLnN0YXJ0ZWR8fHFLZShmLHcsdCksV0tlKGYsdyx0LGQpLEMuYXBwbHlpbmcmJihDLmFwcGx5aW5nPSExKSx4KEMuZnJhbWVzKSxDLnN0ZXAhPW51bGwmJkMuc3RlcCh0KSx3LmNvbXBsZXRlZCgpJiYobS5zcGxpY2UoYiwxKSxDLmhvb2tlZD0hMSxDLnBsYXlpbmc9ITEsQy5zdGFydGVkPSExLHgoQy5jb21wbGV0ZXMpKSx5PSEwKX1yZXR1cm4hZCYmbS5sZW5ndGg9PT0wJiZnLmxlbmd0aD09PTAmJm4ucHVzaChmKSx5fW8oaSwic3RlcE9uZSIpO2Zvcih2YXIgYT0hMSxzPTA7czxyLmxlbmd0aDtzKyspe3ZhciBsPXJbc10sdT1pKGwpO2E9YXx8dX12YXIgaD1pKGUsITApOyhhfHxoKSYmKHIubGVuZ3RoPjA/ZS5ub3RpZnkoImRyYXciLHIpOmUubm90aWZ5KCJkcmF3IikpLHIudW5tZXJnZShuKSxlLmVtaXQoInN0ZXAiKX1mdW5jdGlvbiB0Z2UodCl7dGhpcy5vcHRpb25zPXJyKHt9LGVRZSx0UWUsdCl9ZnVuY3Rpb24gcmdlKHQpe3RoaXMub3B0aW9ucz1ycih7fSxyUWUsdCl9ZnVuY3Rpb24gbmdlKHQpe3RoaXMub3B0aW9ucz1ycih7fSxuUWUsdCl9ZnVuY3Rpb24gSFModCl7dGhpcy5vcHRpb25zPXJyKHt9LGlRZSx0KSx0aGlzLm9wdGlvbnMubGF5b3V0PXRoaXM7dmFyIGU9dGhpcy5vcHRpb25zLmVsZXMubm9kZXMoKSxyPXRoaXMub3B0aW9ucy5lbGVzLmVkZ2VzKCksbj1yLmZpbHRlcihmdW5jdGlvbihpKXt2YXIgYT1pLnNvdXJjZSgpLmRhdGEoImlkIikscz1pLnRhcmdldCgpLmRhdGEoImlkIiksbD1lLnNvbWUoZnVuY3Rpb24oaCl7cmV0dXJuIGguZGF0YSgiaWQiKT09PWF9KSx1PWUuc29tZShmdW5jdGlvbihoKXtyZXR1cm4gaC5kYXRhKCJpZCIpPT09c30pO3JldHVybiFsfHwhdX0pO3RoaXMub3B0aW9ucy5lbGVzPXRoaXMub3B0aW9ucy5lbGVzLm5vdChuKX1mdW5jdGlvbiBhZ2UodCl7dGhpcy5vcHRpb25zPXJyKHt9LHdRZSx0KX1mdW5jdGlvbiBnQih0KXt0aGlzLm9wdGlvbnM9cnIoe30sVFFlLHQpfWZ1bmN0aW9uIHNnZSh0KXt0aGlzLm9wdGlvbnM9cnIoe30sa1FlLHQpfWZ1bmN0aW9uIG9nZSh0KXt0aGlzLm9wdGlvbnM9cnIoe30sRVFlLHQpfWZ1bmN0aW9uIGxnZSh0KXt0aGlzLm9wdGlvbnM9dCx0aGlzLm5vdGlmaWNhdGlvbnM9MH1mdW5jdGlvbiBoZ2UodCxlKXtlLnJhZGl1cz09PTA/dC5saW5lVG8oZS5jeCxlLmN5KTp0LmFyYyhlLmN4LGUuY3ksZS5yYWRpdXMsZS5zdGFydEFuZ2xlLGUuZW5kQW5nbGUsZS5jb3VudGVyQ2xvY2t3aXNlKX1mdW5jdGlvbiB2Qih0LGUscixuKXt2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06ITA7cmV0dXJuIG49PT0wfHxlLnJhZGl1cz09PTA/e2N4OmUueCxjeTplLnkscmFkaXVzOjAsc3RhcnRYOmUueCxzdGFydFk6ZS55LHN0b3BYOmUueCxzdG9wWTplLnksc3RhcnRBbmdsZTp2b2lkIDAsZW5kQW5nbGU6dm9pZCAwLGNvdW50ZXJDbG9ja3dpc2U6dm9pZCAwfTooQVFlKHQsZSxyLG4saSkse2N4OkhQLGN5OldQLHJhZGl1czpCcCxzdGFydFg6Y2dlLHN0YXJ0WTp1Z2Usc3RvcFg6cVAsc3RvcFk6WVAsc3RhcnRBbmdsZTpxYy5hbmcrTWF0aC5QSS8yKkZwLGVuZEFuZ2xlOkpvLmFuZy1NYXRoLlBJLzIqRnAsY291bnRlckNsb2Nrd2lzZTpnU30pfWZ1bmN0aW9uIGZnZSh0KXt2YXIgZT1bXTtpZih0IT1udWxsKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrPTIpe3ZhciBuPXRbcl0saT10W3IrMV07ZS5wdXNoKHt4Om4seTppfSl9cmV0dXJuIGV9fWZ1bmN0aW9uIF9RZSh0LGUscil7Zm9yKHZhciBuPW8oZnVuY3Rpb24oaCxmLGQscCl7cmV0dXJuIG9hKGgsZixkLHApfSwicWJlemllckF0JDEiKSxpPWUuX3ByaXZhdGUsYT1pLnJzdHlsZS5iZXppZXJQdHMscz0wO3M8dC5iZXppZXJQcm9qUGN0cy5sZW5ndGg7cysrKXt2YXIgbD10LmJlemllclByb2pQY3RzW3NdO2EucHVzaCh7eDpuKHJbMF0sclsyXSxyWzRdLGwpLHk6bihyWzFdLHJbM10scls1XSxsKX0pfX1mdW5jdGlvbiBpWmUodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTt0LmxpbmVUbyhuLngsbi55KX19ZnVuY3Rpb24gYVplKHQsZSxyKXtmb3IodmFyIG4saT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgYT1lW2ldO2k9PT0wJiYobj1hKSx0LmxpbmVUbyhhLngsYS55KX10LnF1YWRyYXRpY0N1cnZlVG8oci54LHIueSxuLngsbi55KX1mdW5jdGlvbiAkMGUodCxlLHIpe3QuYmVnaW5QYXRoJiZ0LmJlZ2luUGF0aCgpO2Zvcih2YXIgbj1lLGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIGE9bltpXTt0LmxpbmVUbyhhLngsYS55KX12YXIgcz1yLGw9clswXTt0Lm1vdmVUbyhsLngsbC55KTtmb3IodmFyIGk9MTtpPHMubGVuZ3RoO2krKyl7dmFyIGE9c1tpXTt0LmxpbmVUbyhhLngsYS55KX10LmNsb3NlUGF0aCYmdC5jbG9zZVBhdGgoKX1mdW5jdGlvbiBzWmUodCxlLHIsbixpKXt0LmJlZ2luUGF0aCYmdC5iZWdpblBhdGgoKSx0LmFyYyhyLG4saSwwLE1hdGguUEkqMiwhMSk7dmFyIGE9ZSxzPWFbMF07dC5tb3ZlVG8ocy54LHMueSk7Zm9yKHZhciBsPTA7bDxhLmxlbmd0aDtsKyspe3ZhciB1PWFbbF07dC5saW5lVG8odS54LHUueSl9dC5jbG9zZVBhdGgmJnQuY2xvc2VQYXRoKCl9ZnVuY3Rpb24gb1plKHQsZSxyLG4pe3QuYXJjKGUscixuLDAsTWF0aC5QSSoyLCExKX1mdW5jdGlvbiBSUCh0LGUscixuLGkpe3ZhciBhPWFyZ3VtZW50cy5sZW5ndGg+NSYmYXJndW1lbnRzWzVdIT09dm9pZCAwP2FyZ3VtZW50c1s1XTo1LHM9YXJndW1lbnRzLmxlbmd0aD42P2FyZ3VtZW50c1s2XTp2b2lkIDA7dC5iZWdpblBhdGgoKSx0Lm1vdmVUbyhlK2EsciksdC5saW5lVG8oZStuLWEsciksdC5xdWFkcmF0aWNDdXJ2ZVRvKGUrbixyLGUrbixyK2EpLHQubGluZVRvKGUrbixyK2ktYSksdC5xdWFkcmF0aWNDdXJ2ZVRvKGUrbixyK2ksZStuLWEscitpKSx0LmxpbmVUbyhlK2EscitpKSx0LnF1YWRyYXRpY0N1cnZlVG8oZSxyK2ksZSxyK2ktYSksdC5saW5lVG8oZSxyK2EpLHQucXVhZHJhdGljQ3VydmVUbyhlLHIsZSthLHIpLHQuY2xvc2VQYXRoKCkscz90LnN0cm9rZSgpOnQuZmlsbCgpfWZ1bmN0aW9uIHowZSh0LGUscil7dmFyIG49dC5jcmVhdGVTaGFkZXIoZSk7aWYodC5zaGFkZXJTb3VyY2UobixyKSx0LmNvbXBpbGVTaGFkZXIobiksIXQuZ2V0U2hhZGVyUGFyYW1ldGVyKG4sdC5DT01QSUxFX1NUQVRVUykpdGhyb3cgbmV3IEVycm9yKHQuZ2V0U2hhZGVySW5mb0xvZyhuKSk7cmV0dXJuIG59ZnVuY3Rpb24gcFplKHQsZSxyKXt2YXIgbj16MGUodCx0LlZFUlRFWF9TSEFERVIsZSksaT16MGUodCx0LkZSQUdNRU5UX1NIQURFUixyKSxhPXQuY3JlYXRlUHJvZ3JhbSgpO2lmKHQuYXR0YWNoU2hhZGVyKGEsbiksdC5hdHRhY2hTaGFkZXIoYSxpKSx0LmxpbmtQcm9ncmFtKGEpLCF0LmdldFByb2dyYW1QYXJhbWV0ZXIoYSx0LkxJTktfU1RBVFVTKSl0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBpbml0aWFsaXplIHNoYWRlcnMiKTtyZXR1cm4gYX1mdW5jdGlvbiBtWmUodCxlLHIpe3I9PT12b2lkIDAmJihyPWUpO3ZhciBuPXQubWFrZU9mZnNjcmVlbkNhbnZhcyhlLHIpLGk9bi5jb250ZXh0PW4uZ2V0Q29udGV4dCgiMmQiKTtyZXR1cm4gbi5jbGVhcj1mdW5jdGlvbigpe3JldHVybiBpLmNsZWFyUmVjdCgwLDAsbi53aWR0aCxuLmhlaWdodCl9LG4uY2xlYXIoKSxufWZ1bmN0aW9uIHdCKHQpe3ZhciBlPXQucGl4ZWxSYXRpbyxyPXQuY3kuem9vbSgpLG49dC5jeS5wYW4oKTtyZXR1cm57em9vbTpyKmUscGFuOnt4Om4ueCplLHk6bi55KmV9fX1mdW5jdGlvbiBOUCh0LGUscixuLGkpe3ZhciBhPW4qcitlLngscz1pKnIrZS55O3JldHVybiBzPU1hdGgucm91bmQodC5jYW52YXNIZWlnaHQtcyksW2Esc119ZnVuY3Rpb24gb1ModCxlLHIpe3ZhciBuPXRbMF0vMjU1LGk9dFsxXS8yNTUsYT10WzJdLzI1NSxzPWUsbD1yfHxuZXcgQXJyYXkoNCk7cmV0dXJuIGxbMF09bipzLGxbMV09aSpzLGxbMl09YSpzLGxbM109cyxsfWZ1bmN0aW9uIGxTKHQsZSl7dmFyIHI9ZXx8bmV3IEFycmF5KDQpO3JldHVybiByWzBdPSh0Pj4wJjI1NSkvMjU1LHJbMV09KHQ+PjgmMjU1KS8yNTUsclsyXT0odD4+MTYmMjU1KS8yNTUsclszXT0odD4+MjQmMjU1KS8yNTUscn1mdW5jdGlvbiBnWmUodCl7cmV0dXJuIHRbMF0rKHRbMV08PDgpKyh0WzJdPDwxNikrKHRbM108PDI0KX1mdW5jdGlvbiB5WmUodCxlKXt2YXIgcj10LmNyZWF0ZVRleHR1cmUoKTtyZXR1cm4gci5idWZmZXI9ZnVuY3Rpb24obil7dC5iaW5kVGV4dHVyZSh0LlRFWFRVUkVfMkQsciksdC50ZXhQYXJhbWV0ZXJpKHQuVEVYVFVSRV8yRCx0LlRFWFRVUkVfV1JBUF9TLHQuQ0xBTVBfVE9fRURHRSksdC50ZXhQYXJhbWV0ZXJpKHQuVEVYVFVSRV8yRCx0LlRFWFRVUkVfV1JBUF9ULHQuQ0xBTVBfVE9fRURHRSksdC50ZXhQYXJhbWV0ZXJpKHQuVEVYVFVSRV8yRCx0LlRFWFRVUkVfTUFHX0ZJTFRFUix0LkxJTkVBUiksdC50ZXhQYXJhbWV0ZXJpKHQuVEVYVFVSRV8yRCx0LlRFWFRVUkVfTUlOX0ZJTFRFUix0LkxJTkVBUl9NSVBNQVBfTkVBUkVTVCksdC5waXhlbFN0b3JlaSh0LlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwhMCksdC50ZXhJbWFnZTJEKHQuVEVYVFVSRV8yRCwwLHQuUkdCQSx0LlJHQkEsdC5VTlNJR05FRF9CWVRFLG4pLHQuZ2VuZXJhdGVNaXBtYXAodC5URVhUVVJFXzJEKSx0LmJpbmRUZXh0dXJlKHQuVEVYVFVSRV8yRCxudWxsKX0sci5kZWxldGVUZXh0dXJlPWZ1bmN0aW9uKCl7dC5kZWxldGVUZXh0dXJlKHIpfSxyfWZ1bmN0aW9uIFNnZSh0LGUpe3N3aXRjaChlKXtjYXNlImZsb2F0IjpyZXR1cm5bMSx0LkZMT0FULDRdO2Nhc2UidmVjMiI6cmV0dXJuWzIsdC5GTE9BVCw0XTtjYXNlInZlYzMiOnJldHVyblszLHQuRkxPQVQsNF07Y2FzZSJ2ZWM0IjpyZXR1cm5bNCx0LkZMT0FULDRdO2Nhc2UiaW50IjpyZXR1cm5bMSx0LklOVCw0XTtjYXNlIml2ZWMyIjpyZXR1cm5bMix0LklOVCw0XX19ZnVuY3Rpb24gQ2dlKHQsZSxyKXtzd2l0Y2goZSl7Y2FzZSB0LkZMT0FUOnJldHVybiBuZXcgRmxvYXQzMkFycmF5KHIpO2Nhc2UgdC5JTlQ6cmV0dXJuIG5ldyBJbnQzMkFycmF5KHIpfX1mdW5jdGlvbiB2WmUodCxlLHIsbixpLGEpe3N3aXRjaChlKXtjYXNlIHQuRkxPQVQ6cmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoci5idWZmZXIsYSpuLGkpO2Nhc2UgdC5JTlQ6cmV0dXJuIG5ldyBJbnQzMkFycmF5KHIuYnVmZmVyLGEqbixpKX19ZnVuY3Rpb24geFplKHQsZSxyLG4pe3ZhciBpPVNnZSh0LGUpLGE9X2koaSwyKSxzPWFbMF0sbD1hWzFdLHU9Q2dlKHQsbCxuKSxoPXQuY3JlYXRlQnVmZmVyKCk7cmV0dXJuIHQuYmluZEJ1ZmZlcih0LkFSUkFZX0JVRkZFUixoKSx0LmJ1ZmZlckRhdGEodC5BUlJBWV9CVUZGRVIsdSx0LlNUQVRJQ19EUkFXKSxsPT09dC5GTE9BVD90LnZlcnRleEF0dHJpYlBvaW50ZXIocixzLGwsITEsMCwwKTpsPT09dC5JTlQmJnQudmVydGV4QXR0cmliSVBvaW50ZXIocixzLGwsMCwwKSx0LmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHIpLHQuYmluZEJ1ZmZlcih0LkFSUkFZX0JVRkZFUixudWxsKSxofWZ1bmN0aW9uIHBvKHQsZSxyLG4pe3ZhciBpPVNnZSh0LHIpLGE9X2koaSwzKSxzPWFbMF0sbD1hWzFdLHU9YVsyXSxoPUNnZSh0LGwsZSpzKSxmPXMqdSxkPXQuY3JlYXRlQnVmZmVyKCk7dC5iaW5kQnVmZmVyKHQuQVJSQVlfQlVGRkVSLGQpLHQuYnVmZmVyRGF0YSh0LkFSUkFZX0JVRkZFUixlKmYsdC5EWU5BTUlDX0RSQVcpLHQuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkobiksbD09PXQuRkxPQVQ/dC52ZXJ0ZXhBdHRyaWJQb2ludGVyKG4scyxsLCExLGYsMCk6bD09PXQuSU5UJiZ0LnZlcnRleEF0dHJpYklQb2ludGVyKG4scyxsLGYsMCksdC52ZXJ0ZXhBdHRyaWJEaXZpc29yKG4sMSksdC5iaW5kQnVmZmVyKHQuQVJSQVlfQlVGRkVSLG51bGwpO2Zvcih2YXIgcD1uZXcgQXJyYXkoZSksbT0wO208ZTttKyspcFttXT12WmUodCxsLGgsZixzLG0pO3JldHVybiBkLmRhdGFBcnJheT1oLGQuc3RyaWRlPWYsZC5zaXplPXMsZC5nZXRWaWV3PWZ1bmN0aW9uKGcpe3JldHVybiBwW2ddfSxkLnNldFBvaW50PWZ1bmN0aW9uKGcseSx2KXt2YXIgeD1wW2ddO3hbMF09eSx4WzFdPXZ9LGQuYnVmZmVyU3ViRGF0YT1mdW5jdGlvbihnKXt0LmJpbmRCdWZmZXIodC5BUlJBWV9CVUZGRVIsZCksZz90LmJ1ZmZlclN1YkRhdGEodC5BUlJBWV9CVUZGRVIsMCxoLDAsZypzKTp0LmJ1ZmZlclN1YkRhdGEodC5BUlJBWV9CVUZGRVIsMCxoKX0sZH1mdW5jdGlvbiBiWmUodCl7dmFyIGU9dC5jcmVhdGVGcmFtZWJ1ZmZlcigpO3QuYmluZEZyYW1lYnVmZmVyKHQuRlJBTUVCVUZGRVIsZSk7dmFyIHI9dC5jcmVhdGVUZXh0dXJlKCk7cmV0dXJuIHQuYmluZFRleHR1cmUodC5URVhUVVJFXzJELHIpLHQudGV4UGFyYW1ldGVyaSh0LlRFWFRVUkVfMkQsdC5URVhUVVJFX01JTl9GSUxURVIsdC5MSU5FQVIpLHQudGV4UGFyYW1ldGVyaSh0LlRFWFRVUkVfMkQsdC5URVhUVVJFX1dSQVBfUyx0LkNMQU1QX1RPX0VER0UpLHQudGV4UGFyYW1ldGVyaSh0LlRFWFRVUkVfMkQsdC5URVhUVVJFX1dSQVBfVCx0LkNMQU1QX1RPX0VER0UpLHQuZnJhbWVidWZmZXJUZXh0dXJlMkQodC5GUkFNRUJVRkZFUix0LkNPTE9SX0FUVEFDSE1FTlQwLHQuVEVYVFVSRV8yRCxyLDApLHQuYmluZEZyYW1lYnVmZmVyKHQuRlJBTUVCVUZGRVIsbnVsbCksZS5zZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRTaXplcz1mdW5jdGlvbihuLGkpe3QuYmluZFRleHR1cmUodC5URVhUVVJFXzJELHIpLHQudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsMCx0LlJHQkEsbixpLDAsdC5SR0JBLHQuVU5TSUdORURfQllURSxudWxsKX0sZX1mdW5jdGlvbiBHYigpe3ZhciB0PW5ldyBHMGUoOSk7cmV0dXJuIEcwZSE9RmxvYXQzMkFycmF5JiYodFsxXT0wLHRbMl09MCx0WzNdPTAsdFs1XT0wLHRbNl09MCx0WzddPTApLHRbMF09MSx0WzRdPTEsdFs4XT0xLHR9ZnVuY3Rpb24gQWdlKHQpe3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0xLHRbNV09MCx0WzZdPTAsdFs3XT0wLHRbOF09MSx0fWZ1bmN0aW9uIHdaZSh0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLHM9ZVszXSxsPWVbNF0sdT1lWzVdLGg9ZVs2XSxmPWVbN10sZD1lWzhdLHA9clswXSxtPXJbMV0sZz1yWzJdLHk9clszXSx2PXJbNF0seD1yWzVdLGI9cls2XSx3PXJbN10sQz1yWzhdO3JldHVybiB0WzBdPXAqbittKnMrZypoLHRbMV09cCppK20qbCtnKmYsdFsyXT1wKmErbSp1K2cqZCx0WzNdPXkqbit2KnMreCpoLHRbNF09eSppK3YqbCt4KmYsdFs1XT15KmErdip1K3gqZCx0WzZdPWIqbit3KnMrQypoLHRbN109YippK3cqbCtDKmYsdFs4XT1iKmErdyp1K0MqZCx0fWZ1bmN0aW9uIERTKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0scz1lWzNdLGw9ZVs0XSx1PWVbNV0saD1lWzZdLGY9ZVs3XSxkPWVbOF0scD1yWzBdLG09clsxXTtyZXR1cm4gdFswXT1uLHRbMV09aSx0WzJdPWEsdFszXT1zLHRbNF09bCx0WzVdPXUsdFs2XT1wKm4rbSpzK2gsdFs3XT1wKmkrbSpsK2YsdFs4XT1wKmErbSp1K2QsdH1mdW5jdGlvbiBfZ2UodCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxzPWVbM10sbD1lWzRdLHU9ZVs1XSxoPWVbNl0sZj1lWzddLGQ9ZVs4XSxwPU1hdGguc2luKHIpLG09TWF0aC5jb3Mocik7cmV0dXJuIHRbMF09bSpuK3Aqcyx0WzFdPW0qaStwKmwsdFsyXT1tKmErcCp1LHRbM109bSpzLXAqbix0WzRdPW0qbC1wKmksdFs1XT1tKnUtcCphLHRbNl09aCx0WzddPWYsdFs4XT1kLHR9ZnVuY3Rpb24gVEIodCxlLHIpe3ZhciBuPXJbMF0saT1yWzFdO3JldHVybiB0WzBdPW4qZVswXSx0WzFdPW4qZVsxXSx0WzJdPW4qZVsyXSx0WzNdPWkqZVszXSx0WzRdPWkqZVs0XSx0WzVdPWkqZVs1XSx0WzZdPWVbNl0sdFs3XT1lWzddLHRbOF09ZVs4XSx0fWZ1bmN0aW9uIFRaZSh0LGUscil7cmV0dXJuIHRbMF09Mi9lLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09LTIvcix0WzVdPTAsdFs2XT0tMSx0WzddPTEsdFs4XT0xLHR9ZnVuY3Rpb24gU1plKHQsZSl7cmV0dXJuIHQuaW50ZXJzZWN0aW9uP3QuaW50ZXJzZWN0aW9uKGUpOm5ldyBTZXQoajBlKHQpLmZpbHRlcihmdW5jdGlvbihyKXtyZXR1cm4gZS5oYXMocil9KSl9ZnVuY3Rpb24gSDBlKHQsZSl7cmV0dXJuInJnYmEoIi5jb25jYXQodFswXSwiLCAiKS5jb25jYXQodFsxXSwiLCAiKS5jb25jYXQodFsyXSwiLCAiKS5jb25jYXQoZSwiKSIpfWZ1bmN0aW9uIERaZSh0KXt2YXIgZT10JiZ0LnN0eWxlJiZ0LnN0eWxlLmJhY2tncm91bmRDb2xvcnx8IndoaXRlIjtyZXR1cm4gdG1lKGUpfWZ1bmN0aW9uIExaZSh0KXt7dmFyIGU9dC5yZW5kZXI7dC5yZW5kZXI9ZnVuY3Rpb24oYSl7YT1hfHx7fTt2YXIgcz10LmN5O3Qud2ViZ2wmJihzLnpvb20oKT5iZ2U/KFJaZSh0KSxlLmNhbGwodCxhKSk6KE5aZSh0KSxSZ2UodCxhLFZiLlNDUkVFTikpKX19e3ZhciByPXQubWF0Y2hDYW52YXNTaXplO3QubWF0Y2hDYW52YXNTaXplPWZ1bmN0aW9uKGEpe3IuY2FsbCh0LGEpLHQucGlja2luZ0ZyYW1lQnVmZmVyLnNldEZyYW1lYnVmZmVyQXR0YWNobWVudFNpemVzKHQuY2FudmFzV2lkdGgsdC5jYW52YXNIZWlnaHQpLHQucGlja2luZ0ZyYW1lQnVmZmVyLm5lZWRzRHJhdz0hMH19dC5maW5kTmVhcmVzdEVsZW1lbnRzPWZ1bmN0aW9uKGEscyxsLHUpe3JldHVybiBGWmUodCxhLHMpfTt7dmFyIG49dC5pbnZhbGlkYXRlQ2FjaGVkWlNvcnRlZEVsZXM7dC5pbnZhbGlkYXRlQ2FjaGVkWlNvcnRlZEVsZXM9ZnVuY3Rpb24oKXtuLmNhbGwodCksdC5waWNraW5nRnJhbWVCdWZmZXIubmVlZHNEcmF3PSEwfX17dmFyIGk9dC5ub3RpZnk7dC5ub3RpZnk9ZnVuY3Rpb24oYSxzKXtpLmNhbGwodCxhLHMpLGE9PT0idmlld3BvcnQifHxhPT09ImJvdW5kcyI/dC5waWNraW5nRnJhbWVCdWZmZXIubmVlZHNEcmF3PSEwOmE9PT0iYmFja2dyb3VuZCImJnQuZWxlRHJhd2luZy5pbnZhbGlkYXRlKHMse3R5cGU6Im5vZGUtYm9keSJ9KX19fWZ1bmN0aW9uIFJaZSh0KXt2YXIgZT10LmRhdGEuY29udGV4dHNbdC5XRUJHTF07ZS5jbGVhcihlLkNPTE9SX0JVRkZFUl9CSVR8ZS5ERVBUSF9CVUZGRVJfQklUKX1mdW5jdGlvbiBOWmUodCl7dmFyIGU9byhmdW5jdGlvbihuKXtuLnNhdmUoKSxuLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksbi5jbGVhclJlY3QoMCwwLHQuY2FudmFzV2lkdGgsdC5jYW52YXNIZWlnaHQpLG4ucmVzdG9yZSgpfSwiY2xlYXIiKTtlKHQuZGF0YS5jb250ZXh0c1t0Lk5PREVdKSxlKHQuZGF0YS5jb250ZXh0c1t0LkRSQUddKX1mdW5jdGlvbiBNWmUodCl7dmFyIGU9dC5jYW52YXNXaWR0aCxyPXQuY2FudmFzSGVpZ2h0LG49d0IodCksaT1uLnBhbixhPW4uem9vbSxzPUdiKCk7RFMocyxzLFtpLngsaS55XSksVEIocyxzLFthLGFdKTt2YXIgbD1HYigpO1RaZShsLGUscik7dmFyIHU9R2IoKTtyZXR1cm4gd1plKHUsbCxzKSx1fWZ1bmN0aW9uIExnZSh0LGUpe3ZhciByPXQuY2FudmFzV2lkdGgsbj10LmNhbnZhc0hlaWdodCxpPXdCKHQpLGE9aS5wYW4scz1pLnpvb207ZS5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLGUuY2xlYXJSZWN0KDAsMCxyLG4pLGUudHJhbnNsYXRlKGEueCxhLnkpLGUuc2NhbGUocyxzKX1mdW5jdGlvbiBJWmUodCxlKXt0LmRyYXdTZWxlY3Rpb25SZWN0YW5nbGUoZSxmdW5jdGlvbihyKXtyZXR1cm4gTGdlKHQscil9KX1mdW5jdGlvbiBPWmUodCl7dmFyIGU9dC5kYXRhLmNvbnRleHRzW3QuTk9ERV07ZS5zYXZlKCksTGdlKHQsZSksZS5zdHJva2VTdHlsZT0icmdiYSgwLCAwLCAwLCAwLjMpIixlLmJlZ2luUGF0aCgpLGUubW92ZVRvKC0xZTMsMCksZS5saW5lVG8oMWUzLDApLGUuc3Ryb2tlKCksZS5iZWdpblBhdGgoKSxlLm1vdmVUbygwLC0xZTMpLGUubGluZVRvKDAsMWUzKSxlLnN0cm9rZSgpLGUucmVzdG9yZSgpfWZ1bmN0aW9uIFBaZSh0KXt2YXIgZT1vKGZ1bmN0aW9uKGksYSxzKXtmb3IodmFyIGw9aS5hdGxhc01hbmFnZXIuZ2V0UmVuZGVyVHlwZU9wdHMoYSksdT10LmRhdGEuY29udGV4dHNbdC5OT0RFXSxoPS4xMjUsZj1sLmF0bGFzQ29sbGVjdGlvbi5hdGxhc2VzLGQ9MDtkPGYubGVuZ3RoO2QrKyl7dmFyIHA9ZltkXSxtPXAuY2FudmFzLGc9bS53aWR0aCx5PW0uaGVpZ2h0LHY9ZypkLHg9bS5oZWlnaHQqczt1LnNhdmUoKSx1LnNjYWxlKGgsaCksdS5kcmF3SW1hZ2UobSx2LHgpLHUuc3Ryb2tlU3R5bGU9ImJsYWNrIix1LnJlY3Qodix4LGcseSksdS5zdHJva2UoKSx1LnJlc3RvcmUoKX19LCJkcmF3Iikscj0wO2UodC5lbGVEcmF3aW5nLCJub2RlLWJvZHkiLHIrKyksZSh0LmVsZURyYXdpbmcsIm5vZGUtbGFiZWwiLHIrKyl9ZnVuY3Rpb24gQlplKHQsZSxyLG4saSl7dmFyIGEscyxsLHUsaD13Qih0KSxmPWgucGFuLGQ9aC56b29tO2lmKG49PT12b2lkIDB8fGk9PT12b2lkIDApe3ZhciBwPU5QKHQsZixkLGUsciksbT1faShwLDIpLGc9bVswXSx5PW1bMV0sdj02O2E9Zy12LzIscz15LXYvMixsPXYsdT12fWVsc2V7dmFyIHg9TlAodCxmLGQsZSxyKSxiPV9pKHgsMiksdz1iWzBdLEM9YlsxXSxUPU5QKHQsZixkLG4saSksRT1faShULDIpLEE9RVswXSxTPUVbMV07YT13LHM9UyxsPU1hdGguYWJzKEEtdyksdT1NYXRoLmFicyhTLUMpfWlmKGw9PT0wfHx1PT09MClyZXR1cm5bXTt2YXIgXz10LmRhdGEuY29udGV4dHNbdC5XRUJHTF07Xy5iaW5kRnJhbWVidWZmZXIoXy5GUkFNRUJVRkZFUix0LnBpY2tpbmdGcmFtZUJ1ZmZlciksdC5waWNraW5nRnJhbWVCdWZmZXIubmVlZHNEcmF3JiYoXy52aWV3cG9ydCgwLDAsXy5jYW52YXMud2lkdGgsXy5jYW52YXMuaGVpZ2h0KSxSZ2UodCxudWxsLFZiLlBJQ0tJTkcpLHQucGlja2luZ0ZyYW1lQnVmZmVyLm5lZWRzRHJhdz0hMSk7dmFyIEk9bCp1LEQ9bmV3IFVpbnQ4QXJyYXkoSSo0KTtfLnJlYWRQaXhlbHMoYSxzLGwsdSxfLlJHQkEsXy5VTlNJR05FRF9CWVRFLEQpLF8uYmluZEZyYW1lYnVmZmVyKF8uRlJBTUVCVUZGRVIsbnVsbCk7Zm9yKHZhciBrPW5ldyBTZXQsTD0wO0w8STtMKyspe3ZhciBSPUQuc2xpY2UoTCo0LEwqNCs0KSxPPWdaZShSKS0xO08+PTAmJmsuYWRkKE8pfXJldHVybiBrfWZ1bmN0aW9uIEZaZSh0LGUscil7dmFyIG49QlplKHQsZSxyKSxpPXQuZ2V0Q2FjaGVkWlNvcnRlZEVsZXMoKSxhLHMsbD1tbyhuKSx1O3RyeXtmb3IobC5zKCk7ISh1PWwubigpKS5kb25lOyl7dmFyIGg9dS52YWx1ZSxmPWlbaF07aWYoIWEmJmYuaXNOb2RlKCkmJihhPWYpLCFzJiZmLmlzRWRnZSgpJiYocz1mKSxhJiZzKWJyZWFrfX1jYXRjaChkKXtsLmUoZCl9ZmluYWxseXtsLmYoKX1yZXR1cm5bYSxzXS5maWx0ZXIoQm9vbGVhbil9ZnVuY3Rpb24gUmdlKHQsZSxyKXt2YXIgbixpO3Qud2ViZ2xEZWJ1ZyYmKGk9W10sbj1wZXJmb3JtYW5jZS5ub3coKSk7dmFyIGE9dC5lbGVEcmF3aW5nLHM9MDtpZihyLnNjcmVlbiYmdC5kYXRhLmNhbnZhc05lZWRzUmVkcmF3W3QuU0VMRUNUX0JPWF0mJklaZSh0LGUpLHQuZGF0YS5jYW52YXNOZWVkc1JlZHJhd1t0Lk5PREVdfHxyLnBpY2tpbmcpe3ZhciBsPW8oZnVuY3Rpb24oayxMKXtMKz0xLGsuaXNOb2RlKCk/KGEuZHJhd1RleHR1cmUoayxMLCJub2RlLXVuZGVybGF5IiksYS5kcmF3VGV4dHVyZShrLEwsIm5vZGUtYm9keSIpLGEuZHJhd1RleHR1cmUoayxMLCJub2RlLWxhYmVsIiksYS5kcmF3VGV4dHVyZShrLEwsIm5vZGUtb3ZlcmxheSIpKTooYS5kcmF3RWRnZUxpbmUoayxMKSxhLmRyYXdFZGdlQXJyb3coayxMLCJzb3VyY2UiKSxhLmRyYXdFZGdlQXJyb3coayxMLCJ0YXJnZXQiKSxhLmRyYXdUZXh0dXJlKGssTCwiZWRnZS1sYWJlbCIpKX0sImRyYXciKSx1PXQuZGF0YS5jb250ZXh0c1t0LldFQkdMXTtyLnNjcmVlbj8odS5jbGVhckNvbG9yKDAsMCwwLDApLHUuZW5hYmxlKHUuQkxFTkQpLHUuYmxlbmRGdW5jKHUuT05FLHUuT05FX01JTlVTX1NSQ19BTFBIQSkpOnUuZGlzYWJsZSh1LkJMRU5EKSx1LmNsZWFyKHUuQ09MT1JfQlVGRkVSX0JJVHx1LkRFUFRIX0JVRkZFUl9CSVQpLHUudmlld3BvcnQoMCwwLHUuY2FudmFzLndpZHRoLHUuY2FudmFzLmhlaWdodCk7dmFyIGg9TVplKHQpLGY9dC5nZXRDYWNoZWRaU29ydGVkRWxlcygpO2lmKHM9Zi5sZW5ndGgsYS5zdGFydEZyYW1lKGgsaSxyKSxyLnNjcmVlbil7Zm9yKHZhciBkPTA7ZDxmLm5vbmRyYWcubGVuZ3RoO2QrKylsKGYubm9uZHJhZ1tkXSxkKTtmb3IodmFyIHA9MDtwPGYuZHJhZy5sZW5ndGg7cCsrKWwoZi5kcmFnW3BdLC0xKX1lbHNlIGlmKHIucGlja2luZylmb3IodmFyIG09MDttPGYubGVuZ3RoO20rKylsKGZbbV0sbSk7YS5lbmRGcmFtZSgpLHQuZGF0YS5nYyYmKGNvbnNvbGUubG9nKCJHYXJiYWdlIENvbGxlY3QhIiksdC5kYXRhLmdjPSExLGEuZ2MoKSksci5zY3JlZW4mJnQud2ViZ2xEZWJ1Z1Nob3dBdGxhc2VzJiYoT1plKHQpLFBaZSh0KSksdC5kYXRhLmNhbnZhc05lZWRzUmVkcmF3W3QuTk9ERV09ITEsdC5kYXRhLmNhbnZhc05lZWRzUmVkcmF3W3QuRFJBR109ITF9aWYodC53ZWJnbERlYnVnKXt2YXIgZz1wZXJmb3JtYW5jZS5ub3coKSx5PSEwLHY9MCx4PTAsYj1tbyhpKSx3O3RyeXtmb3IoYi5zKCk7ISh3PWIubigpKS5kb25lOyl7dmFyIEM9dy52YWx1ZTt2KysseCs9Qy5jb3VudH19Y2F0Y2goRCl7Yi5lKEQpfWZpbmFsbHl7Yi5mKCl9dmFyIFQ9TWF0aC5jZWlsKGctbiksRT0iIi5jb25jYXQocywiIGVsZW1lbnRzLCAiKS5jb25jYXQoeCwiIHJlY3RhbmdsZXMsICIpLmNvbmNhdCh2LCIgYmF0Y2hlcyIpO2lmKHkpY29uc29sZS5sb2coIldlYkdMICgiLmNvbmNhdChyLm5hbWUsIikgLSAiKS5jb25jYXQoRSkpO2Vsc2V7Y29uc29sZS5sb2coIldlYkdMIHJlbmRlciAoIi5jb25jYXQoci5uYW1lLCIpIC0gZnJhbWUgdGltZSAiKS5jb25jYXQoVCwibXMiKSksY29uc29sZS5sb2coIiAgIi5jb25jYXQoRSkpLGNvbnNvbGUubG9nKCJUZXh0dXJlIEF0bGFzZXMgVXNlZDoiKTt2YXIgQT1hLmdldEF0bGFzRGVidWdJbmZvKCksUz1tbyhBKSxfO3RyeXtmb3IoUy5zKCk7IShfPVMubigpKS5kb25lOyl7dmFyIEk9Xy52YWx1ZTtjb25zb2xlLmxvZygiICAiLmNvbmNhdChJLnR5cGUsIjogIikuY29uY2F0KEkua2V5Q291bnQsIiBrZXlzLCAiKS5jb25jYXQoSS5hdGxhc0NvdW50LCIgYXRsYXNlcyIpKX19Y2F0Y2goRCl7Uy5lKEQpfWZpbmFsbHl7Uy5mKCl9Y29uc29sZS5sb2coIiIpfX19ZnVuY3Rpb24gJFplKHQsZSl7Zm9yKHZhciByPWF0b2IodCksbj1uZXcgQXJyYXlCdWZmZXIoci5sZW5ndGgpLGk9bmV3IFVpbnQ4QXJyYXkobiksYT0wO2E8ci5sZW5ndGg7YSsrKWlbYV09ci5jaGFyQ29kZUF0KGEpO3JldHVybiBuZXcgQmxvYihbbl0se3R5cGU6ZX0pfWZ1bmN0aW9uIFkwZSh0KXt2YXIgZT10LmluZGV4T2YoIiwiKTtyZXR1cm4gdC5zdWJzdHIoZSsxKX1mdW5jdGlvbiBNZ2UodCxlLHIpe3ZhciBuPW8oZnVuY3Rpb24oKXtyZXR1cm4gZS50b0RhdGFVUkwocix0LnF1YWxpdHkpfSwiZ2V0QjY0VXJpIik7c3dpdGNoKHQub3V0cHV0KXtjYXNlImJsb2ItcHJvbWlzZSI6cmV0dXJuIG5ldyBleShmdW5jdGlvbihpLGEpe3RyeXtlLnRvQmxvYihmdW5jdGlvbihzKXtzIT1udWxsP2kocyk6YShuZXcgRXJyb3IoImBjYW52YXMudG9CbG9iKClgIHNlbnQgYSBudWxsIHZhbHVlIGluIGl0cyBjYWxsYmFjayIpKX0scix0LnF1YWxpdHkpfWNhdGNoKHMpe2Eocyl9fSk7Y2FzZSJibG9iIjpyZXR1cm4gJFplKFkwZShuKCkpLHIpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gWTBlKG4oKSk7Y2FzZSJiYXNlNjR1cmkiOmRlZmF1bHQ6cmV0dXJuIG4oKX19ZnVuY3Rpb24gT2dlKHQpe3ZhciBlPXRoaXMscj1lLmN5LndpbmRvdygpLG49ci5kb2N1bWVudDt0LndlYmdsJiYoRXIuQ0FOVkFTX0xBWUVSUz1lLkNBTlZBU19MQVlFUlM9NCxjb25zb2xlLmxvZygid2ViZ2wgcmVuZGVyaW5nIGVuYWJsZWQiKSksZS5kYXRhPXtjYW52YXNlczpuZXcgQXJyYXkoRXIuQ0FOVkFTX0xBWUVSUyksY29udGV4dHM6bmV3IEFycmF5KEVyLkNBTlZBU19MQVlFUlMpLGNhbnZhc05lZWRzUmVkcmF3Om5ldyBBcnJheShFci5DQU5WQVNfTEFZRVJTKSxidWZmZXJDYW52YXNlczpuZXcgQXJyYXkoRXIuQlVGRkVSX0NPVU5UKSxidWZmZXJDb250ZXh0czpuZXcgQXJyYXkoRXIuQ0FOVkFTX0xBWUVSUyl9O3ZhciBpPSItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLGE9InJnYmEoMCwwLDAsMCkiO2UuZGF0YS5jYW52YXNDb250YWluZXI9bi5jcmVhdGVFbGVtZW50KCJkaXYiKTt2YXIgcz1lLmRhdGEuY2FudmFzQ29udGFpbmVyLnN0eWxlO2UuZGF0YS5jYW52YXNDb250YWluZXIuc3R5bGVbaV09YSxzLnBvc2l0aW9uPSJyZWxhdGl2ZSIscy56SW5kZXg9IjAiLHMub3ZlcmZsb3c9ImhpZGRlbiI7dmFyIGw9dC5jeS5jb250YWluZXIoKTtsLmFwcGVuZENoaWxkKGUuZGF0YS5jYW52YXNDb250YWluZXIpLGwuc3R5bGVbaV09YTt2YXIgdT17Ii13ZWJraXQtdXNlci1zZWxlY3QiOiJub25lIiwiLW1vei11c2VyLXNlbGVjdCI6Ii1tb3otbm9uZSIsInVzZXItc2VsZWN0Ijoibm9uZSIsIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciI6InJnYmEoMCwwLDAsMCkiLCJvdXRsaW5lLXN0eWxlIjoibm9uZSJ9O2lXZSgpJiYodVsiLW1zLXRvdWNoLWFjdGlvbiJdPSJub25lIix1WyJ0b3VjaC1hY3Rpb24iXT0ibm9uZSIpO2Zvcih2YXIgaD0wO2g8RXIuQ0FOVkFTX0xBWUVSUztoKyspe3ZhciBmPWUuZGF0YS5jYW52YXNlc1toXT1uLmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLGQ9RXIuQ0FOVkFTX1RZUEVTW2hdO2UuZGF0YS5jb250ZXh0c1toXT1mLmdldENvbnRleHQoZCksZS5kYXRhLmNvbnRleHRzW2hdfHxhaSgiQ291bGQgbm90IGNyZWF0ZSBjYW52YXMgb2YgdHlwZSAiK2QpLE9iamVjdC5rZXlzKHUpLmZvckVhY2goZnVuY3Rpb24oSyl7Zi5zdHlsZVtLXT11W0tdfSksZi5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGYuc2V0QXR0cmlidXRlKCJkYXRhLWlkIiwibGF5ZXIiK2gpLGYuc3R5bGUuekluZGV4PVN0cmluZyhFci5DQU5WQVNfTEFZRVJTLWgpLGUuZGF0YS5jYW52YXNDb250YWluZXIuYXBwZW5kQ2hpbGQoZiksZS5kYXRhLmNhbnZhc05lZWRzUmVkcmF3W2hdPSExfWUuZGF0YS50b3BDYW52YXM9ZS5kYXRhLmNhbnZhc2VzWzBdLGUuZGF0YS5jYW52YXNlc1tFci5OT0RFXS5zZXRBdHRyaWJ1dGUoImRhdGEtaWQiLCJsYXllciIrRXIuTk9ERSsiLW5vZGUiKSxlLmRhdGEuY2FudmFzZXNbRXIuU0VMRUNUX0JPWF0uc2V0QXR0cmlidXRlKCJkYXRhLWlkIiwibGF5ZXIiK0VyLlNFTEVDVF9CT1grIi1zZWxlY3Rib3giKSxlLmRhdGEuY2FudmFzZXNbRXIuRFJBR10uc2V0QXR0cmlidXRlKCJkYXRhLWlkIiwibGF5ZXIiK0VyLkRSQUcrIi1kcmFnIiksZS5kYXRhLmNhbnZhc2VzW0VyLldFQkdMXSYmZS5kYXRhLmNhbnZhc2VzW0VyLldFQkdMXS5zZXRBdHRyaWJ1dGUoImRhdGEtaWQiLCJsYXllciIrRXIuV0VCR0wrIi13ZWJnbCIpO2Zvcih2YXIgaD0wO2g8RXIuQlVGRkVSX0NPVU5UO2grKyllLmRhdGEuYnVmZmVyQ2FudmFzZXNbaF09bi5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxlLmRhdGEuYnVmZmVyQ29udGV4dHNbaF09ZS5kYXRhLmJ1ZmZlckNhbnZhc2VzW2hdLmdldENvbnRleHQoIjJkIiksZS5kYXRhLmJ1ZmZlckNhbnZhc2VzW2hdLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsZS5kYXRhLmJ1ZmZlckNhbnZhc2VzW2hdLnNldEF0dHJpYnV0ZSgiZGF0YS1pZCIsImJ1ZmZlciIraCksZS5kYXRhLmJ1ZmZlckNhbnZhc2VzW2hdLnN0eWxlLnpJbmRleD1TdHJpbmcoLWgtMSksZS5kYXRhLmJ1ZmZlckNhbnZhc2VzW2hdLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiI7ZS5wYXRoc0VuYWJsZWQ9ITA7dmFyIHA9SHMoKSxtPW8oZnVuY3Rpb24oWCl7cmV0dXJue3g6KFgueDErWC54MikvMix5OihYLnkxK1gueTIpLzJ9fSwiZ2V0Qm94Q2VudGVyIiksZz1vKGZ1bmN0aW9uKFgpe3JldHVybnt4Oi1YLncvMix5Oi1YLmgvMn19LCJnZXRDZW50ZXJPZmZzZXQiKSx5PW8oZnVuY3Rpb24oWCl7dmFyIHRlPVhbMF0uX3ByaXZhdGUsSj10ZS5vbGRCYWNrZ3JvdW5kVGltZXN0YW1wPT09dGUuYmFja2dyb3VuZFRpbWVzdGFtcDtyZXR1cm4hSn0sImJhY2tncm91bmRUaW1lc3RhbXBIYXNDaGFuZ2VkIiksdj1vKGZ1bmN0aW9uKFgpe3JldHVybiBYWzBdLl9wcml2YXRlLm5vZGVLZXl9LCJnZXRTdHlsZUtleSIpLHg9byhmdW5jdGlvbihYKXtyZXR1cm4gWFswXS5fcHJpdmF0ZS5sYWJlbFN0eWxlS2V5fSwiZ2V0TGFiZWxLZXkiKSxiPW8oZnVuY3Rpb24oWCl7cmV0dXJuIFhbMF0uX3ByaXZhdGUuc291cmNlTGFiZWxTdHlsZUtleX0sImdldFNvdXJjZUxhYmVsS2V5Iiksdz1vKGZ1bmN0aW9uKFgpe3JldHVybiBYWzBdLl9wcml2YXRlLnRhcmdldExhYmVsU3R5bGVLZXl9LCJnZXRUYXJnZXRMYWJlbEtleSIpLEM9byhmdW5jdGlvbihYLHRlLEosc2UsdWUpe3JldHVybiBlLmRyYXdFbGVtZW50KFgsdGUsSiwhMSwhMSx1ZSl9LCJkcmF3RWxlbWVudCIpLFQ9byhmdW5jdGlvbihYLHRlLEosc2UsdWUpe3JldHVybiBlLmRyYXdFbGVtZW50VGV4dChYLHRlLEosc2UsIm1haW4iLHVlKX0sImRyYXdMYWJlbCIpLEU9byhmdW5jdGlvbihYLHRlLEosc2UsdWUpe3JldHVybiBlLmRyYXdFbGVtZW50VGV4dChYLHRlLEosc2UsInNvdXJjZSIsdWUpfSwiZHJhd1NvdXJjZUxhYmVsIiksQT1vKGZ1bmN0aW9uKFgsdGUsSixzZSx1ZSl7cmV0dXJuIGUuZHJhd0VsZW1lbnRUZXh0KFgsdGUsSixzZSwidGFyZ2V0Iix1ZSl9LCJkcmF3VGFyZ2V0TGFiZWwiKSxTPW8oZnVuY3Rpb24oWCl7cmV0dXJuIFguYm91bmRpbmdCb3goKSxYWzBdLl9wcml2YXRlLmJvZHlCb3VuZHN9LCJnZXRFbGVtZW50Qm94IiksXz1vKGZ1bmN0aW9uKFgpe3JldHVybiBYLmJvdW5kaW5nQm94KCksWFswXS5fcHJpdmF0ZS5sYWJlbEJvdW5kcy5tYWlufHxwfSwiZ2V0TGFiZWxCb3giKSxJPW8oZnVuY3Rpb24oWCl7cmV0dXJuIFguYm91bmRpbmdCb3goKSxYWzBdLl9wcml2YXRlLmxhYmVsQm91bmRzLnNvdXJjZXx8cH0sImdldFNvdXJjZUxhYmVsQm94IiksRD1vKGZ1bmN0aW9uKFgpe3JldHVybiBYLmJvdW5kaW5nQm94KCksWFswXS5fcHJpdmF0ZS5sYWJlbEJvdW5kcy50YXJnZXR8fHB9LCJnZXRUYXJnZXRMYWJlbEJveCIpLGs9byhmdW5jdGlvbihYLHRlKXtyZXR1cm4gdGV9LCJpc0xhYmVsVmlzaWJsZUF0U2NhbGUiKSxMPW8oZnVuY3Rpb24oWCl7cmV0dXJuIG0oUyhYKSl9LCJnZXRFbGVtZW50Um90YXRpb25Qb2ludCIpLFI9byhmdW5jdGlvbihYLHRlLEope3ZhciBzZT1YP1grIi0iOiIiO3JldHVybnt4OnRlLngrSi5wc3R5bGUoc2UrInRleHQtbWFyZ2luLXgiKS5wZlZhbHVlLHk6dGUueStKLnBzdHlsZShzZSsidGV4dC1tYXJnaW4teSIpLnBmVmFsdWV9fSwiYWRkVGV4dE1hcmdpbiIpLE89byhmdW5jdGlvbihYLHRlLEope3ZhciBzZT1YWzBdLl9wcml2YXRlLnJzY3JhdGNoO3JldHVybnt4OnNlW3RlXSx5OnNlW0pdfX0sImdldFJzUHQiKSxNPW8oZnVuY3Rpb24oWCl7cmV0dXJuIFIoIiIsTyhYLCJsYWJlbFgiLCJsYWJlbFkiKSxYKX0sImdldExhYmVsUm90YXRpb25Qb2ludCIpLEI9byhmdW5jdGlvbihYKXtyZXR1cm4gUigic291cmNlIixPKFgsInNvdXJjZUxhYmVsWCIsInNvdXJjZUxhYmVsWSIpLFgpfSwiZ2V0U291cmNlTGFiZWxSb3RhdGlvblBvaW50IiksRj1vKGZ1bmN0aW9uKFgpe3JldHVybiBSKCJ0YXJnZXQiLE8oWCwidGFyZ2V0TGFiZWxYIiwidGFyZ2V0TGFiZWxZIiksWCl9LCJnZXRUYXJnZXRMYWJlbFJvdGF0aW9uUG9pbnQiKSxQPW8oZnVuY3Rpb24oWCl7cmV0dXJuIGcoUyhYKSl9LCJnZXRFbGVtZW50Um90YXRpb25PZmZzZXQiKSx6PW8oZnVuY3Rpb24oWCl7cmV0dXJuIGcoSShYKSl9LCJnZXRTb3VyY2VMYWJlbFJvdGF0aW9uT2Zmc2V0IiksJD1vKGZ1bmN0aW9uKFgpe3JldHVybiBnKEQoWCkpfSwiZ2V0VGFyZ2V0TGFiZWxSb3RhdGlvbk9mZnNldCIpLEg9byhmdW5jdGlvbihYKXt2YXIgdGU9XyhYKSxKPWcoXyhYKSk7aWYoWC5pc05vZGUoKSl7c3dpdGNoKFgucHN0eWxlKCJ0ZXh0LWhhbGlnbiIpLnZhbHVlKXtjYXNlImxlZnQiOkoueD0tdGUudy0odGUubGVmdFBhZHx8MCk7YnJlYWs7Y2FzZSJyaWdodCI6Si54PS0odGUucmlnaHRQYWR8fDApO2JyZWFrfXN3aXRjaChYLnBzdHlsZSgidGV4dC12YWxpZ24iKS52YWx1ZSl7Y2FzZSJ0b3AiOkoueT0tdGUuaC0odGUudG9wUGFkfHwwKTticmVhaztjYXNlImJvdHRvbSI6Si55PS0odGUuYm90UGFkfHwwKTticmVha319cmV0dXJuIEp9LCJnZXRMYWJlbFJvdGF0aW9uT2Zmc2V0IiksUT1lLmRhdGEuZWxlVHhyQ2FjaGU9bmV3IEZiKGUse2dldEtleTp2LGRvZXNFbGVJbnZhbGlkYXRlS2V5OnksZHJhd0VsZW1lbnQ6QyxnZXRCb3VuZGluZ0JveDpTLGdldFJvdGF0aW9uUG9pbnQ6TCxnZXRSb3RhdGlvbk9mZnNldDpQLGFsbG93RWRnZVR4ckNhY2hpbmc6ITEsYWxsb3dQYXJlbnRUeHJDYWNoaW5nOiExfSksaj1lLmRhdGEubGJsVHhyQ2FjaGU9bmV3IEZiKGUse2dldEtleTp4LGRyYXdFbGVtZW50OlQsZ2V0Qm91bmRpbmdCb3g6XyxnZXRSb3RhdGlvblBvaW50Ok0sZ2V0Um90YXRpb25PZmZzZXQ6SCxpc1Zpc2libGU6a30pLGllPWUuZGF0YS5zbGJUeHJDYWNoZT1uZXcgRmIoZSx7Z2V0S2V5OmIsZHJhd0VsZW1lbnQ6RSxnZXRCb3VuZGluZ0JveDpJLGdldFJvdGF0aW9uUG9pbnQ6QixnZXRSb3RhdGlvbk9mZnNldDp6LGlzVmlzaWJsZTprfSksbmU9ZS5kYXRhLnRsYlR4ckNhY2hlPW5ldyBGYihlLHtnZXRLZXk6dyxkcmF3RWxlbWVudDpBLGdldEJvdW5kaW5nQm94OkQsZ2V0Um90YXRpb25Qb2ludDpGLGdldFJvdGF0aW9uT2Zmc2V0OiQsaXNWaXNpYmxlOmt9KSxsZT1lLmRhdGEubHlyVHhyQ2FjaGU9bmV3IHdnZShlKTtlLm9uVXBkYXRlRWxlQ2FsY3MobyhmdW5jdGlvbihYLHRlKXtRLmludmFsaWRhdGVFbGVtZW50cyh0ZSksai5pbnZhbGlkYXRlRWxlbWVudHModGUpLGllLmludmFsaWRhdGVFbGVtZW50cyh0ZSksbmUuaW52YWxpZGF0ZUVsZW1lbnRzKHRlKSxsZS5pbnZhbGlkYXRlRWxlbWVudHModGUpO2Zvcih2YXIgSj0wO0o8dGUubGVuZ3RoO0orKyl7dmFyIHNlPXRlW0pdLl9wcml2YXRlO3NlLm9sZEJhY2tncm91bmRUaW1lc3RhbXA9c2UuYmFja2dyb3VuZFRpbWVzdGFtcH19LCJpbnZhbGlkYXRlVGV4dHVyZUNhY2hlcyIpKTt2YXIgaGU9byhmdW5jdGlvbihYKXtmb3IodmFyIHRlPTA7dGU8WC5sZW5ndGg7dGUrKylsZS5lbnF1ZXVlRWxlbWVudFJlZmluZW1lbnQoWFt0ZV0uZWxlKX0sInJlZmluZUluTGF5ZXJzIik7US5vbkRlcXVldWUoaGUpLGoub25EZXF1ZXVlKGhlKSxpZS5vbkRlcXVldWUoaGUpLG5lLm9uRGVxdWV1ZShoZSksdC53ZWJnbCYmZS5pbml0V2ViZ2wodCx7Z2V0U3R5bGVLZXk6dixnZXRMYWJlbEtleTp4LGRyYXdFbGVtZW50OkMsZHJhd0xhYmVsOlQsZ2V0RWxlbWVudEJveDpTLGdldExhYmVsQm94Ol8sZ2V0RWxlbWVudFJvdGF0aW9uUG9pbnQ6TCxnZXRFbGVtZW50Um90YXRpb25PZmZzZXQ6UCxnZXRMYWJlbFJvdGF0aW9uUG9pbnQ6TSxnZXRMYWJlbFJvdGF0aW9uT2Zmc2V0Okh9KX1mdW5jdGlvbiBGZ2UodCxlLHIpe3ZhciBuPXIsaT1vKGZ1bmN0aW9uKFMpe3VuKCJDYW4gbm90IHJlZ2lzdGVyIGAiK2UrImAgZm9yIGAiK3QrImAgc2luY2UgYCIrUysiYCBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgcHJvdG90eXBlIGFuZCBjYW4gbm90IGJlIG92ZXJyaWRkZW4iKX0sIm92ZXJyaWRlRXJyIik7aWYodD09PSJjb3JlIil7aWYoSmIucHJvdG90eXBlW2VdKXJldHVybiBpKGUpO0piLnByb3RvdHlwZVtlXT1yfWVsc2UgaWYodD09PSJjb2xsZWN0aW9uIil7aWYoa2EucHJvdG90eXBlW2VdKXJldHVybiBpKGUpO2thLnByb3RvdHlwZVtlXT1yfWVsc2UgaWYodD09PSJsYXlvdXQiKXtmb3IodmFyIGE9byhmdW5jdGlvbihTKXt0aGlzLm9wdGlvbnM9UyxyLmNhbGwodGhpcyxTKSxVcih0aGlzLl9wcml2YXRlKXx8KHRoaXMuX3ByaXZhdGU9e30pLHRoaXMuX3ByaXZhdGUuY3k9Uy5jeSx0aGlzLl9wcml2YXRlLmxpc3RlbmVycz1bXSx0aGlzLmNyZWF0ZUVtaXR0ZXIoKX0sIkxheW91dCIpLHM9YS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShyLnByb3RvdHlwZSksbD1bXSx1PTA7dTxsLmxlbmd0aDt1Kyspe3ZhciBoPWxbdV07c1toXT1zW2hdfHxmdW5jdGlvbigpe3JldHVybiB0aGlzfX1zLnN0YXJ0JiYhcy5ydW4/cy5ydW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGFydCgpLHRoaXN9OiFzLnN0YXJ0JiZzLnJ1biYmKHMuc3RhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ydW4oKSx0aGlzfSk7dmFyIGY9ci5wcm90b3R5cGUuc3RvcDtzLnN0b3A9ZnVuY3Rpb24oKXt2YXIgQT10aGlzLm9wdGlvbnM7aWYoQSYmQS5hbmltYXRlKXt2YXIgUz10aGlzLmFuaW1hdGlvbnM7aWYoUylmb3IodmFyIF89MDtfPFMubGVuZ3RoO18rKylTW19dLnN0b3AoKX1yZXR1cm4gZj9mLmNhbGwodGhpcyk6dGhpcy5lbWl0KCJsYXlvdXRzdG9wIiksdGhpc30scy5kZXN0cm95fHwocy5kZXN0cm95PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxzLmN5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuY3l9O3ZhciBkPW8oZnVuY3Rpb24oUyl7cmV0dXJuIFMuX3ByaXZhdGUuY3l9LCJnZXRDeSIpLHA9e2FkZEV2ZW50RmllbGRzOm8oZnVuY3Rpb24oUyxfKXtfLmxheW91dD1TLF8uY3k9ZChTKSxfLnRhcmdldD1TfSwiYWRkRXZlbnRGaWVsZHMiKSxidWJibGU6byhmdW5jdGlvbigpe3JldHVybiEwfSwiYnViYmxlIikscGFyZW50Om8oZnVuY3Rpb24oUyl7cmV0dXJuIGQoUyl9LCJwYXJlbnQiKX07cnIocyx7Y3JlYXRlRW1pdHRlcjpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuZW1pdHRlcj1uZXcgJFMocCx0aGlzKSx0aGlzfSwiY3JlYXRlRW1pdHRlciIpLGVtaXR0ZXI6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmVtaXR0ZXJ9LCJlbWl0dGVyIiksb246byhmdW5jdGlvbihTLF8pe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5vbihTLF8pLHRoaXN9LCJvbiIpLG9uZTpvKGZ1bmN0aW9uKFMsXyl7cmV0dXJuIHRoaXMuZW1pdHRlcigpLm9uZShTLF8pLHRoaXN9LCJvbmUiKSxvbmNlOm8oZnVuY3Rpb24oUyxfKXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkub25lKFMsXyksdGhpc30sIm9uY2UiKSxyZW1vdmVMaXN0ZW5lcjpvKGZ1bmN0aW9uKFMsXyl7cmV0dXJuIHRoaXMuZW1pdHRlcigpLnJlbW92ZUxpc3RlbmVyKFMsXyksdGhpc30sInJlbW92ZUxpc3RlbmVyIikscmVtb3ZlQWxsTGlzdGVuZXJzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkucmVtb3ZlQWxsTGlzdGVuZXJzKCksdGhpc30sInJlbW92ZUFsbExpc3RlbmVycyIpLGVtaXQ6byhmdW5jdGlvbihTLF8pe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5lbWl0KFMsXyksdGhpc30sImVtaXQiKX0pLGNuLmV2ZW50QWxpYXNlc09uKHMpLG49YX1lbHNlIGlmKHQ9PT0icmVuZGVyZXIiJiZlIT09Im51bGwiJiZlIT09ImJhc2UiKXt2YXIgbT0kZ2UoInJlbmRlcmVyIiwiYmFzZSIpLGc9bS5wcm90b3R5cGUseT1yLHY9ci5wcm90b3R5cGUseD1vKGZ1bmN0aW9uKCl7bS5hcHBseSh0aGlzLGFyZ3VtZW50cykseS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LCJSZW5kZXJlciIpLGI9eC5wcm90b3R5cGU7Zm9yKHZhciB3IGluIGcpe3ZhciBDPWdbd10sVD12W3ddIT1udWxsO2lmKFQpcmV0dXJuIGkodyk7Ylt3XT1DfWZvcih2YXIgRSBpbiB2KWJbRV09dltFXTtnLmNsaWVudEZ1bmN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKEEpe2JbQV09YltBXXx8ZnVuY3Rpb24oKXthaSgiUmVuZGVyZXIgZG9lcyBub3QgaW1wbGVtZW50IGByZW5kZXJlci4iK0ErIigpYCBvbiBpdHMgcHJvdG90eXBlIil9fSksbj14fWVsc2UgaWYodD09PSJfX3Byb3RvX18ifHx0PT09ImNvbnN0cnVjdG9yInx8dD09PSJwcm90b3R5cGUiKXJldHVybiBhaSh0KyIgaXMgYW4gaWxsZWdhbCB0eXBlIHRvIGJlIHJlZ2lzdGVyZWQsIHBvc3NpYmx5IGxlYWQgdG8gcHJvdG90eXBlIHBvbGx1dGlvbnMiKTtyZXR1cm4gcm1lKHttYXA6UGdlLGtleXM6W3QsZV0sdmFsdWU6bn0pfWZ1bmN0aW9uICRnZSh0LGUpe3JldHVybiBubWUoe21hcDpQZ2Usa2V5czpbdCxlXX0pfWZ1bmN0aW9uIEhaZSh0LGUscixuLGkpe3JldHVybiBybWUoe21hcDpCZ2Usa2V5czpbdCxlLHIsbl0sdmFsdWU6aX0pfWZ1bmN0aW9uIFdaZSh0LGUscixuKXtyZXR1cm4gbm1lKHttYXA6QmdlLGtleXM6W3QsZSxyLG5dfSl9dmFyIFVpLExwZSxqSGUsSzBlLEtIZSxRSGUsZTQsWnQsc2ksRW4sVXIsWkhlLEN0LEpIZSx2Uyxnbyx0NCxRMGUsSlAsWjBlLGVXZSxBZix0V2UscldlLG5XZSxpV2UsVWIsZUIsTFMsSjBlLFJwZSxIaSxhV2Usc1dlLG9XZSxsV2UsY1dlLHVXZSxlbWUsaFdlLHJyLGZXZSxkV2UscFdlLG1XZSx0bWUsZ1dlLHJtZSxubWUsenAsSWIseFdlLGJXZSx3V2UsVFdlLFJTLGtXZSx4UCxFV2UsQ1dlLEFXZSxEV2UsTFdlLGoxLGltZSxSV2UsTldlLEFiLElXZSxPV2UsUFdlLEZXZSwkV2UseldlLE5wZSxhbWUsVVdlLEhXZSxyNCxNcGUscVdlLFlXZSxYV2UsaldlLElwZSxRV2UsWldlLEpXZSxuNCxiUCxzbWUsdHFlLHhTLFF1LFYxLG9tZSxPYixsbWUsSGIsV2IscnFlLHdmLGo2LG5xZSxfZixjbWUsaXFlLE9wZSxhcWUsc3FlLHRCLHVtZSxiUyxQcGUsckIsYWksaG1lLHVuLG9xZSxZYyxscWUsZm1lLGNxZSxkbWUsbGEsRGYsbkIsdXFlLEdsLGtmLGhxZSxYYyxmcWUsZHFlLEoxLE5TLEJwZSxxYixwcWUsaTQsbXFlLGdxZSx5cWUsdnFlLHhxZSxicWUsd3FlLFRxZSxrcWUsRXFlLFNxZSx3UCxDcWUsQXFlLE1TLHBtZSxVMSxfcWUsRHFlLExxZSxScWUsTnFlLEs2LGlCLG1tZSxHcCxPcCxNcWUsb2EsVzEsSXFlLFliLEhzLE9xZSxQcWUsQnFlLGdtZSxGcWUsY1MsdVMsRnBlLGFCLEsxLCRxZSx5bWUsdm1lLHpxZSxHcWUsVnFlLFVxZSxIcWUsV3FlLFVzLFp1LHFxZSx3UyxUUyxZcWUsJHAsUGIsVFAsRWYsWGIsWHFlLFE2LGdzLHhtZSxQUCxWcCxibWUsc0IsanFlLEJQLEtxZSxRcWUsJHBlLHExLHpwZSxZMSxacWUsRlAsSnFlLGVZZSx0WWUsclllLHdtZSxuWWUsaVllLGFZZSxzWWUsb1llLGxZZSxjWWUsR3BlLHVZZSxoWWUsVG1lLFZwZSxVcGUsZlllLGRZZSxfYixRMSxwWWUsb0Isa1Msa1Asa21lLEVtZSxtWWUsZ1llLHlZZSxIcGUsV3BlLHZZZSx4WWUsYlllLHdZZSxUWWUscXBlLGtZZSxFWWUsU1llLENZZSxZcGUsWjYsQVllLF9ZZSxYcGUsRFllLExZZSxSWWUsTlllLE1ZZSxJWWUsanBlLE9ZZSxLcGUsUFllLEJZZSxGWWUsSjYsJFllLGVTLHpZZSxTbWUsQ21lLEFtZSxfbWUsSnUsUXBlLERtZSxacGUsSnBlLEdZZSxleSwkUCxVcCxWWWUsVVllLE9TLEhZZSxXWWUsWVllLFhZZSxqWWUsS1llLFFZZSxKWWUsZVhlLEVQLGUwZSxyWGUsblhlLGlYZSxzWGUsb1hlLGxYZSxjWGUsdVhlLGhYZSxmWGUsZFhlLG1YZSx5WGUsbEIseFhlLGpiLHdYZSxrWGUsRVhlLFNYZSxDWGUsX1hlLERYZSxMWGUsTlhlLE1YZSxPWGUsdDBlLEJYZSxMbWUsUFMselhlLEdYZSxVWGUsV1hlLFlYZSxqWGUsS1hlLFFYZSxaWGUsZWplLHJqZSxCUyxhamUsb2plLGNqZSxoamUsUm1lLGZqZSxkamUscGplLGdqZSx5amUsdmplLHhqZSxObWUsTW1lLHdqZSxyMGUsbjBlLFRqZSxPbWUsUG1lLFNqZSx1QixfamUsTGplLFJqZSxpMGUsTWplLElqZSxPamUsQmplLEZqZSwkamUsR2plLFVqZSxXamUsWWplLGpqZSxLamUsUWplLGNuLFpqZSxoUyxWcixtbiwkdCx6UCxKamUsZUtlLHRLZSxCMSxUZixHUCxyS2UsbktlLGlLZSxhS2Usc0tlLEJtZSxvS2UsbEtlLGhCLGNLZSxmaSx6bix1S2UsaEtlLGZLZSxMZixSZixTZix0bCxaMSxLYix6bWUscEtlLEZTLFZsLEdtZSxWbWUsYTBlLG1LZSxYMSxPZixlbCx6bCxQcCxEYix0UyxDUCxnS2UseUtlLFVtZSxIbWUsczBlLFFiLG8wZSxsMGUsdktlLEJiLGE0LFdtZSx4S2UsYktlLHdLZSxUS2Usa0tlLEVLZSxTS2UsQ0tlLEFLZSxjMGUsX0tlLERLZSxMS2UscW1lLFltZSxSS2UsWG1lLHUwZSxOS2UsTmYsam1lLGgwZSxNS2UsSUtlLG5TLEttZSxRbWUsUXIsT0tlLFptZSxFUyxQS2UsQktlLGZTLFRhLGl5LEZLZSwkS2UsektlLEdLZSxDZiwkYSxkMGUscDBlLG0wZSxrYSxNbixWS2UsSEtlLE5uLGRTLFlLZSxYS2UsaVMsZWdlLFZQLHBTLGpLZSxLS2UsVVAsbVMsR2EsJGIsUUtlLHM0LHBCLGpjLFZTLG1CLHdhLFVTLEZhLHphLFpLZSxKS2UsSHAsWmIsSmIsU1MsZVFlLHRRZSx6MSxUMGUsclFlLG5RZSxfUCxpUWUsYVFlLHNRZSxvUWUsbFFlLGNRZSxpZ2UsdVFlLGhRZSxmUWUsazBlLGRRZSxwUWUsQ1MsbVFlLGdRZSx5UWUsdlFlLHhRZSxiUWUsRTBlLHdRZSxUUWUsa1FlLEVRZSxTUWUsUzBlLEMwZSx5QixxcCxBUyxIUCxXUCxxYyxKbyxBMGUsXzBlLEZwLGdTLEt1LE1wLEJwLFdjLEcxLGFTLGNnZSx1Z2UscVAsWVAsRDBlLEwwZSxDUWUsQVFlLFZhLG80LHhCLEtjLGRnZSxwZ2UsRFFlLG1nZSxSMGUsTjBlLFdTLHFTLGdnZSx5Z2Usc3ksZWgsbDQsTTBlLExRZSx2Z2Usb3ksRFAseGdlLFJRZSxJMGUsc1MseVMsWFAsYmdlLE5RZSxNUWUsSVFlLE9RZSxQUWUsQlFlLEZRZSwkUWUselFlLEdRZSxWUWUsVVFlLEhRZSxIMSxXUWUsRmIscWkscVFlLHpiLF9TLFlRZSxYUWUsalFlLEtRZSxRUWUsWlFlLEpRZSxlWmUsTzBlLHRaZSxQMGUsclplLHdnZSxFYSxCMGUsblplLFRnZSxGMGUsUWMsbFplLGNaZSx1WmUsaFplLGZaZSxMUCx0aCxrZ2UsYkIsWXAsbHksRWdlLHlzLGRaZSxOYixHMGUsVmIsTWIsa1plLEVaZSxDWmUsTVAsVjBlLFUwZSxJUCxBWmUsX1plLERnZSxQZixXMGUscTBlLGpQLEtQLE5nZSxJcCxjNCxJZ2UselplLEVyLEdaZSxWWmUsVVplLFBnZSxCZ2UsUVAsemdlLFdwLHFaZSxybCxrQj1OKCgpPT57InVzZSBzdHJpY3QiO28oV2ksIl90eXBlb2YiKTtvKE1mLCJfY2xhc3NDYWxsQ2hlY2siKTtvKERwZSwiX2RlZmluZVByb3BlcnRpZXMiKTtvKElmLCJfY3JlYXRlQ2xhc3MiKTtvKFgwZSwiX2RlZmluZVByb3BlcnR5JDEiKTtvKF9pLCJfc2xpY2VkVG9BcnJheSIpO28oajBlLCJfdG9Db25zdW1hYmxlQXJyYXkiKTtvKFVIZSwiX2FycmF5V2l0aG91dEhvbGVzIik7byhISGUsIl9hcnJheVdpdGhIb2xlcyIpO28oV0hlLCJfaXRlcmFibGVUb0FycmF5Iik7byhxSGUsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIpO28oWlAsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIpO28oT1AsIl9hcnJheUxpa2VUb0FycmF5Iik7byhZSGUsIl9ub25JdGVyYWJsZVNwcmVhZCIpO28oWEhlLCJfbm9uSXRlcmFibGVSZXN0Iik7byhtbywiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiKTtVaT10eXBlb2Ygd2luZG93PiJ1Ij9udWxsOndpbmRvdyxMcGU9VWk/VWkubmF2aWdhdG9yOm51bGw7VWkmJlVpLmRvY3VtZW50O2pIZT1XaSgiIiksSzBlPVdpKHt9KSxLSGU9V2koZnVuY3Rpb24oKXt9KSxRSGU9dHlwZW9mIEhUTUxFbGVtZW50PiJ1Ij8idW5kZWZpbmVkIjpXaShIVE1MRWxlbWVudCksZTQ9byhmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5pbnN0YW5jZVN0cmluZyYmc2koZS5pbnN0YW5jZVN0cmluZyk/ZS5pbnN0YW5jZVN0cmluZygpOm51bGx9LCJpbnN0YW5jZVN0ciIpLFp0PW8oZnVuY3Rpb24oZSl7cmV0dXJuIGUhPW51bGwmJldpKGUpPT1qSGV9LCJzdHJpbmciKSxzaT1vKGZ1bmN0aW9uKGUpe3JldHVybiBlIT1udWxsJiZXaShlKT09PUtIZX0sImZuIiksRW49byhmdW5jdGlvbihlKXtyZXR1cm4hZ28oZSkmJihBcnJheS5pc0FycmF5P0FycmF5LmlzQXJyYXkoZSk6ZSE9bnVsbCYmZSBpbnN0YW5jZW9mIEFycmF5KX0sImFycmF5IiksVXI9byhmdW5jdGlvbihlKXtyZXR1cm4gZSE9bnVsbCYmV2koZSk9PT1LMGUmJiFFbihlKSYmZS5jb25zdHJ1Y3Rvcj09PU9iamVjdH0sInBsYWluT2JqZWN0IiksWkhlPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGUhPW51bGwmJldpKGUpPT09SzBlfSwib2JqZWN0IiksQ3Q9byhmdW5jdGlvbihlKXtyZXR1cm4gZSE9bnVsbCYmV2koZSk9PT1XaSgxKSYmIWlzTmFOKGUpfSwibnVtYmVyIiksSkhlPW8oZnVuY3Rpb24oZSl7cmV0dXJuIEN0KGUpJiZNYXRoLmZsb29yKGUpPT09ZX0sImludGVnZXIiKSx2Uz1vKGZ1bmN0aW9uKGUpe2lmKFFIZSE9PSJ1bmRlZmluZWQiKXJldHVybiBlIT1udWxsJiZlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnR9LCJodG1sRWxlbWVudCIpLGdvPW8oZnVuY3Rpb24oZSl7cmV0dXJuIHQ0KGUpfHxRMGUoZSl9LCJlbGVtZW50T3JDb2xsZWN0aW9uIiksdDQ9byhmdW5jdGlvbihlKXtyZXR1cm4gZTQoZSk9PT0iY29sbGVjdGlvbiImJmUuX3ByaXZhdGUuc2luZ2xlfSwiZWxlbWVudCIpLFEwZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBlNChlKT09PSJjb2xsZWN0aW9uIiYmIWUuX3ByaXZhdGUuc2luZ2xlfSwiY29sbGVjdGlvbiIpLEpQPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGU0KGUpPT09ImNvcmUifSwiY29yZSIpLFowZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBlNChlKT09PSJzdHlsZXNoZWV0In0sInN0eWxlc2hlZXQiKSxlV2U9byhmdW5jdGlvbihlKXtyZXR1cm4gZTQoZSk9PT0iZXZlbnQifSwiZXZlbnQiKSxBZj1vKGZ1bmN0aW9uKGUpe3JldHVybiBlPT1udWxsPyEwOiEhKGU9PT0iInx8ZS5tYXRjaCgvXlxzKyQvKSl9LCJlbXB0eVN0cmluZyIpLHRXZT1vKGZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgSFRNTEVsZW1lbnQ+InUiPyExOmUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudH0sImRvbUVsZW1lbnQiKSxyV2U9byhmdW5jdGlvbihlKXtyZXR1cm4gVXIoZSkmJkN0KGUueDEpJiZDdChlLngyKSYmQ3QoZS55MSkmJkN0KGUueTIpfSwiYm91bmRpbmdCb3giKSxuV2U9byhmdW5jdGlvbihlKXtyZXR1cm4gWkhlKGUpJiZzaShlLnRoZW4pfSwicHJvbWlzZSIpLGlXZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIExwZSYmTHBlLnVzZXJBZ2VudC5tYXRjaCgvbXNpZXx0cmlkZW50fGVkZ2UvaSl9LCJtcyIpLFViPW8oZnVuY3Rpb24oZSxyKXtyfHwocj1vKGZ1bmN0aW9uKCl7aWYoYXJndW1lbnRzLmxlbmd0aD09PTEpcmV0dXJuIGFyZ3VtZW50c1swXTtpZihhcmd1bWVudHMubGVuZ3RoPT09MClyZXR1cm4idW5kZWZpbmVkIjtmb3IodmFyIGE9W10scz0wO3M8YXJndW1lbnRzLmxlbmd0aDtzKyspYS5wdXNoKGFyZ3VtZW50c1tzXSk7cmV0dXJuIGEuam9pbigiJCIpfSwia2V5Rm4iKSk7dmFyIG49byhmdW5jdGlvbiBpKCl7dmFyIGE9dGhpcyxzPWFyZ3VtZW50cyxsLHU9ci5hcHBseShhLHMpLGg9aS5jYWNoZTtyZXR1cm4obD1oW3VdKXx8KGw9aFt1XT1lLmFwcGx5KGEscykpLGx9LCJtZW1vaXplZEZuIik7cmV0dXJuIG4uY2FjaGU9e30sbn0sIm1lbW9pemUiKSxlQj1VYihmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKC8oW0EtWl0pL2csZnVuY3Rpb24oZSl7cmV0dXJuIi0iK2UudG9Mb3dlckNhc2UoKX0pfSksTFM9VWIoZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvKC1cdykvZyxmdW5jdGlvbihlKXtyZXR1cm4gZVsxXS50b1VwcGVyQ2FzZSgpfSl9KSxKMGU9VWIoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlWzBdLnRvVXBwZXJDYXNlKCkrZS5zdWJzdHJpbmcoMSl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrIiQiK2V9KSxScGU9byhmdW5jdGlvbihlKXtyZXR1cm4gQWYoZSk/ZTplLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Uuc3Vic3RyaW5nKDEpfSwiY2FwaXRhbGl6ZSIpLEhpPSIoPzpbLStdPyg/Oig/OlxcZCt8XFxkKlxcLlxcZCspKD86W0VlXVsrLV0/XFxkKyk/KSkiLGFXZT0icmdiW2FdP1xcKCgiK0hpKyJbJV0/KVxccyosXFxzKigiK0hpKyJbJV0/KVxccyosXFxzKigiK0hpKyJbJV0/KSg/OlxccyosXFxzKigiK0hpKyIpKT9cXCkiLHNXZT0icmdiW2FdP1xcKCg/OiIrSGkrIlslXT8pXFxzKixcXHMqKD86IitIaSsiWyVdPylcXHMqLFxccyooPzoiK0hpKyJbJV0/KSg/OlxccyosXFxzKig/OiIrSGkrIikpP1xcKSIsb1dlPSJoc2xbYV0/XFwoKCIrSGkrIilcXHMqLFxccyooIitIaSsiWyVdKVxccyosXFxzKigiK0hpKyJbJV0pKD86XFxzKixcXHMqKCIrSGkrIikpP1xcKSIsbFdlPSJoc2xbYV0/XFwoKD86IitIaSsiKVxccyosXFxzKig/OiIrSGkrIlslXSlcXHMqLFxccyooPzoiK0hpKyJbJV0pKD86XFxzKixcXHMqKD86IitIaSsiKSk/XFwpIixjV2U9IlxcI1swLTlhLWZBLUZdezN9Iix1V2U9IlxcI1swLTlhLWZBLUZdezZ9IixlbWU9byhmdW5jdGlvbihlLHIpe3JldHVybiBlPHI/LTE6ZT5yPzE6MH0sImFzY2VuZGluZyIpLGhXZT1vKGZ1bmN0aW9uKGUscil7cmV0dXJuLTEqZW1lKGUscil9LCJkZXNjZW5kaW5nIikscnI9T2JqZWN0LmFzc2lnbiE9bnVsbD9PYmplY3QuYXNzaWduLmJpbmQoT2JqZWN0KTpmdW5jdGlvbih0KXtmb3IodmFyIGU9YXJndW1lbnRzLHI9MTtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtpZihuIT1udWxsKWZvcih2YXIgaT1PYmplY3Qua2V5cyhuKSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBzPWlbYV07dFtzXT1uW3NdfX1yZXR1cm4gdH0sZldlPW8oZnVuY3Rpb24oZSl7aWYoISghKGUubGVuZ3RoPT09NHx8ZS5sZW5ndGg9PT03KXx8ZVswXSE9PSIjIikpe3ZhciByPWUubGVuZ3RoPT09NCxuLGksYSxzPTE2O3JldHVybiByPyhuPXBhcnNlSW50KGVbMV0rZVsxXSxzKSxpPXBhcnNlSW50KGVbMl0rZVsyXSxzKSxhPXBhcnNlSW50KGVbM10rZVszXSxzKSk6KG49cGFyc2VJbnQoZVsxXStlWzJdLHMpLGk9cGFyc2VJbnQoZVszXStlWzRdLHMpLGE9cGFyc2VJbnQoZVs1XStlWzZdLHMpKSxbbixpLGFdfX0sImhleDJ0dXBsZSIpLGRXZT1vKGZ1bmN0aW9uKGUpe3ZhciByLG4saSxhLHMsbCx1LGg7ZnVuY3Rpb24gZihnLHksdil7cmV0dXJuIHY8MCYmKHYrPTEpLHY+MSYmKHYtPTEpLHY8MS82P2crKHktZykqNip2OnY8MS8yP3k6djwyLzM/ZysoeS1nKSooMi8zLXYpKjY6Z31vKGYsImh1ZTJyZ2IiKTt2YXIgZD1uZXcgUmVnRXhwKCJeIitvV2UrIiQiKS5leGVjKGUpO2lmKGQpe2lmKG49cGFyc2VJbnQoZFsxXSksbjwwP249KDM2MC0gLTEqbiUzNjApJTM2MDpuPjM2MCYmKG49biUzNjApLG4vPTM2MCxpPXBhcnNlRmxvYXQoZFsyXSksaTwwfHxpPjEwMHx8KGk9aS8xMDAsYT1wYXJzZUZsb2F0KGRbM10pLGE8MHx8YT4xMDApfHwoYT1hLzEwMCxzPWRbNF0scyE9PXZvaWQgMCYmKHM9cGFyc2VGbG9hdChzKSxzPDB8fHM+MSkpKXJldHVybjtpZihpPT09MClsPXU9aD1NYXRoLnJvdW5kKGEqMjU1KTtlbHNle3ZhciBwPWE8LjU/YSooMStpKTphK2ktYSppLG09MiphLXA7bD1NYXRoLnJvdW5kKDI1NSpmKG0scCxuKzEvMykpLHU9TWF0aC5yb3VuZCgyNTUqZihtLHAsbikpLGg9TWF0aC5yb3VuZCgyNTUqZihtLHAsbi0xLzMpKX1yPVtsLHUsaCxzXX1yZXR1cm4gcn0sImhzbDJ0dXBsZSIpLHBXZT1vKGZ1bmN0aW9uKGUpe3ZhciByLG49bmV3IFJlZ0V4cCgiXiIrYVdlKyIkIikuZXhlYyhlKTtpZihuKXtyPVtdO2Zvcih2YXIgaT1bXSxhPTE7YTw9MzthKyspe3ZhciBzPW5bYV07aWYoc1tzLmxlbmd0aC0xXT09PSIlIiYmKGlbYV09ITApLHM9cGFyc2VGbG9hdChzKSxpW2FdJiYocz1zLzEwMCoyNTUpLHM8MHx8cz4yNTUpcmV0dXJuO3IucHVzaChNYXRoLmZsb29yKHMpKX12YXIgbD1pWzFdfHxpWzJdfHxpWzNdLHU9aVsxXSYmaVsyXSYmaVszXTtpZihsJiYhdSlyZXR1cm47dmFyIGg9bls0XTtpZihoIT09dm9pZCAwKXtpZihoPXBhcnNlRmxvYXQoaCksaDwwfHxoPjEpcmV0dXJuO3IucHVzaChoKX19cmV0dXJuIHJ9LCJyZ2IydHVwbGUiKSxtV2U9byhmdW5jdGlvbihlKXtyZXR1cm4gZ1dlW2UudG9Mb3dlckNhc2UoKV19LCJjb2xvcm5hbWUydHVwbGUiKSx0bWU9byhmdW5jdGlvbihlKXtyZXR1cm4oRW4oZSk/ZTpudWxsKXx8bVdlKGUpfHxmV2UoZSl8fHBXZShlKXx8ZFdlKGUpfSwiY29sb3IydHVwbGUiKSxnV2U9e3RyYW5zcGFyZW50OlswLDAsMCwwXSxhbGljZWJsdWU6WzI0MCwyNDgsMjU1XSxhbnRpcXVld2hpdGU6WzI1MCwyMzUsMjE1XSxhcXVhOlswLDI1NSwyNTVdLGFxdWFtYXJpbmU6WzEyNywyNTUsMjEyXSxhenVyZTpbMjQwLDI1NSwyNTVdLGJlaWdlOlsyNDUsMjQ1LDIyMF0sYmlzcXVlOlsyNTUsMjI4LDE5Nl0sYmxhY2s6WzAsMCwwXSxibGFuY2hlZGFsbW9uZDpbMjU1LDIzNSwyMDVdLGJsdWU6WzAsMCwyNTVdLGJsdWV2aW9sZXQ6WzEzOCw0MywyMjZdLGJyb3duOlsxNjUsNDIsNDJdLGJ1cmx5d29vZDpbMjIyLDE4NCwxMzVdLGNhZGV0Ymx1ZTpbOTUsMTU4LDE2MF0sY2hhcnRyZXVzZTpbMTI3LDI1NSwwXSxjaG9jb2xhdGU6WzIxMCwxMDUsMzBdLGNvcmFsOlsyNTUsMTI3LDgwXSxjb3JuZmxvd2VyYmx1ZTpbMTAwLDE0OSwyMzddLGNvcm5zaWxrOlsyNTUsMjQ4LDIyMF0sY3JpbXNvbjpbMjIwLDIwLDYwXSxjeWFuOlswLDI1NSwyNTVdLGRhcmtibHVlOlswLDAsMTM5XSxkYXJrY3lhbjpbMCwxMzksMTM5XSxkYXJrZ29sZGVucm9kOlsxODQsMTM0LDExXSxkYXJrZ3JheTpbMTY5LDE2OSwxNjldLGRhcmtncmVlbjpbMCwxMDAsMF0sZGFya2dyZXk6WzE2OSwxNjksMTY5XSxkYXJra2hha2k6WzE4OSwxODMsMTA3XSxkYXJrbWFnZW50YTpbMTM5LDAsMTM5XSxkYXJrb2xpdmVncmVlbjpbODUsMTA3LDQ3XSxkYXJrb3JhbmdlOlsyNTUsMTQwLDBdLGRhcmtvcmNoaWQ6WzE1Myw1MCwyMDRdLGRhcmtyZWQ6WzEzOSwwLDBdLGRhcmtzYWxtb246WzIzMywxNTAsMTIyXSxkYXJrc2VhZ3JlZW46WzE0MywxODgsMTQzXSxkYXJrc2xhdGVibHVlOls3Miw2MSwxMzldLGRhcmtzbGF0ZWdyYXk6WzQ3LDc5LDc5XSxkYXJrc2xhdGVncmV5Ols0Nyw3OSw3OV0sZGFya3R1cnF1b2lzZTpbMCwyMDYsMjA5XSxkYXJrdmlvbGV0OlsxNDgsMCwyMTFdLGRlZXBwaW5rOlsyNTUsMjAsMTQ3XSxkZWVwc2t5Ymx1ZTpbMCwxOTEsMjU1XSxkaW1ncmF5OlsxMDUsMTA1LDEwNV0sZGltZ3JleTpbMTA1LDEwNSwxMDVdLGRvZGdlcmJsdWU6WzMwLDE0NCwyNTVdLGZpcmVicmljazpbMTc4LDM0LDM0XSxmbG9yYWx3aGl0ZTpbMjU1LDI1MCwyNDBdLGZvcmVzdGdyZWVuOlszNCwxMzksMzRdLGZ1Y2hzaWE6WzI1NSwwLDI1NV0sZ2FpbnNib3JvOlsyMjAsMjIwLDIyMF0sZ2hvc3R3aGl0ZTpbMjQ4LDI0OCwyNTVdLGdvbGQ6WzI1NSwyMTUsMF0sZ29sZGVucm9kOlsyMTgsMTY1LDMyXSxncmF5OlsxMjgsMTI4LDEyOF0sZ3JleTpbMTI4LDEyOCwxMjhdLGdyZWVuOlswLDEyOCwwXSxncmVlbnllbGxvdzpbMTczLDI1NSw0N10saG9uZXlkZXc6WzI0MCwyNTUsMjQwXSxob3RwaW5rOlsyNTUsMTA1LDE4MF0saW5kaWFucmVkOlsyMDUsOTIsOTJdLGluZGlnbzpbNzUsMCwxMzBdLGl2b3J5OlsyNTUsMjU1LDI0MF0sa2hha2k6WzI0MCwyMzAsMTQwXSxsYXZlbmRlcjpbMjMwLDIzMCwyNTBdLGxhdmVuZGVyYmx1c2g6WzI1NSwyNDAsMjQ1XSxsYXduZ3JlZW46WzEyNCwyNTIsMF0sbGVtb25jaGlmZm9uOlsyNTUsMjUwLDIwNV0sbGlnaHRibHVlOlsxNzMsMjE2LDIzMF0sbGlnaHRjb3JhbDpbMjQwLDEyOCwxMjhdLGxpZ2h0Y3lhbjpbMjI0LDI1NSwyNTVdLGxpZ2h0Z29sZGVucm9keWVsbG93OlsyNTAsMjUwLDIxMF0sbGlnaHRncmF5OlsyMTEsMjExLDIxMV0sbGlnaHRncmVlbjpbMTQ0LDIzOCwxNDRdLGxpZ2h0Z3JleTpbMjExLDIxMSwyMTFdLGxpZ2h0cGluazpbMjU1LDE4MiwxOTNdLGxpZ2h0c2FsbW9uOlsyNTUsMTYwLDEyMl0sbGlnaHRzZWFncmVlbjpbMzIsMTc4LDE3MF0sbGlnaHRza3libHVlOlsxMzUsMjA2LDI1MF0sbGlnaHRzbGF0ZWdyYXk6WzExOSwxMzYsMTUzXSxsaWdodHNsYXRlZ3JleTpbMTE5LDEzNiwxNTNdLGxpZ2h0c3RlZWxibHVlOlsxNzYsMTk2LDIyMl0sbGlnaHR5ZWxsb3c6WzI1NSwyNTUsMjI0XSxsaW1lOlswLDI1NSwwXSxsaW1lZ3JlZW46WzUwLDIwNSw1MF0sbGluZW46WzI1MCwyNDAsMjMwXSxtYWdlbnRhOlsyNTUsMCwyNTVdLG1hcm9vbjpbMTI4LDAsMF0sbWVkaXVtYXF1YW1hcmluZTpbMTAyLDIwNSwxNzBdLG1lZGl1bWJsdWU6WzAsMCwyMDVdLG1lZGl1bW9yY2hpZDpbMTg2LDg1LDIxMV0sbWVkaXVtcHVycGxlOlsxNDcsMTEyLDIxOV0sbWVkaXVtc2VhZ3JlZW46WzYwLDE3OSwxMTNdLG1lZGl1bXNsYXRlYmx1ZTpbMTIzLDEwNCwyMzhdLG1lZGl1bXNwcmluZ2dyZWVuOlswLDI1MCwxNTRdLG1lZGl1bXR1cnF1b2lzZTpbNzIsMjA5LDIwNF0sbWVkaXVtdmlvbGV0cmVkOlsxOTksMjEsMTMzXSxtaWRuaWdodGJsdWU6WzI1LDI1LDExMl0sbWludGNyZWFtOlsyNDUsMjU1LDI1MF0sbWlzdHlyb3NlOlsyNTUsMjI4LDIyNV0sbW9jY2FzaW46WzI1NSwyMjgsMTgxXSxuYXZham93aGl0ZTpbMjU1LDIyMiwxNzNdLG5hdnk6WzAsMCwxMjhdLG9sZGxhY2U6WzI1MywyNDUsMjMwXSxvbGl2ZTpbMTI4LDEyOCwwXSxvbGl2ZWRyYWI6WzEwNywxNDIsMzVdLG9yYW5nZTpbMjU1LDE2NSwwXSxvcmFuZ2VyZWQ6WzI1NSw2OSwwXSxvcmNoaWQ6WzIxOCwxMTIsMjE0XSxwYWxlZ29sZGVucm9kOlsyMzgsMjMyLDE3MF0scGFsZWdyZWVuOlsxNTIsMjUxLDE1Ml0scGFsZXR1cnF1b2lzZTpbMTc1LDIzOCwyMzhdLHBhbGV2aW9sZXRyZWQ6WzIxOSwxMTIsMTQ3XSxwYXBheWF3aGlwOlsyNTUsMjM5LDIxM10scGVhY2hwdWZmOlsyNTUsMjE4LDE4NV0scGVydTpbMjA1LDEzMyw2M10scGluazpbMjU1LDE5MiwyMDNdLHBsdW06WzIyMSwxNjAsMjIxXSxwb3dkZXJibHVlOlsxNzYsMjI0LDIzMF0scHVycGxlOlsxMjgsMCwxMjhdLHJlZDpbMjU1LDAsMF0scm9zeWJyb3duOlsxODgsMTQzLDE0M10scm95YWxibHVlOls2NSwxMDUsMjI1XSxzYWRkbGVicm93bjpbMTM5LDY5LDE5XSxzYWxtb246WzI1MCwxMjgsMTE0XSxzYW5keWJyb3duOlsyNDQsMTY0LDk2XSxzZWFncmVlbjpbNDYsMTM5LDg3XSxzZWFzaGVsbDpbMjU1LDI0NSwyMzhdLHNpZW5uYTpbMTYwLDgyLDQ1XSxzaWx2ZXI6WzE5MiwxOTIsMTkyXSxza3libHVlOlsxMzUsMjA2LDIzNV0sc2xhdGVibHVlOlsxMDYsOTAsMjA1XSxzbGF0ZWdyYXk6WzExMiwxMjgsMTQ0XSxzbGF0ZWdyZXk6WzExMiwxMjgsMTQ0XSxzbm93OlsyNTUsMjUwLDI1MF0sc3ByaW5nZ3JlZW46WzAsMjU1LDEyN10sc3RlZWxibHVlOls3MCwxMzAsMTgwXSx0YW46WzIxMCwxODAsMTQwXSx0ZWFsOlswLDEyOCwxMjhdLHRoaXN0bGU6WzIxNiwxOTEsMjE2XSx0b21hdG86WzI1NSw5OSw3MV0sdHVycXVvaXNlOls2NCwyMjQsMjA4XSx2aW9sZXQ6WzIzOCwxMzAsMjM4XSx3aGVhdDpbMjQ1LDIyMiwxNzldLHdoaXRlOlsyNTUsMjU1LDI1NV0sd2hpdGVzbW9rZTpbMjQ1LDI0NSwyNDVdLHllbGxvdzpbMjU1LDI1NSwwXSx5ZWxsb3dncmVlbjpbMTU0LDIwNSw1MF19LHJtZT1vKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj1lLm1hcCxuPWUua2V5cyxpPW4ubGVuZ3RoLGE9MDthPGk7YSsrKXt2YXIgcz1uW2FdO2lmKFVyKHMpKXRocm93IEVycm9yKCJUcmllZCB0byBzZXQgbWFwIHdpdGggb2JqZWN0IGtleSIpO2E8bi5sZW5ndGgtMT8ocltzXT09bnVsbCYmKHJbc109e30pLHI9cltzXSk6cltzXT1lLnZhbHVlfX0sInNldE1hcCIpLG5tZT1vKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj1lLm1hcCxuPWUua2V5cyxpPW4ubGVuZ3RoLGE9MDthPGk7YSsrKXt2YXIgcz1uW2FdO2lmKFVyKHMpKXRocm93IEVycm9yKCJUcmllZCB0byBnZXQgbWFwIHdpdGggb2JqZWN0IGtleSIpO2lmKHI9cltzXSxyPT1udWxsKXJldHVybiByfXJldHVybiByfSwiZ2V0TWFwIik7byh5V2UsImlzT2JqZWN0Iik7enA9eVdlLEliPXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHNlbGY8InUiP3NlbGY6e307byh2V2UsImNyZWF0ZUNvbW1vbmpzTW9kdWxlIik7eFdlPXR5cGVvZiBJYj09Im9iamVjdCImJkliJiZJYi5PYmplY3Q9PT1PYmplY3QmJkliLGJXZT14V2Usd1dlPXR5cGVvZiBzZWxmPT0ib2JqZWN0IiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsVFdlPWJXZXx8d1dlfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLFJTPVRXZSxrV2U9byhmdW5jdGlvbigpe3JldHVybiBSUy5EYXRlLm5vdygpfSwibm93IikseFA9a1dlLEVXZT0vXHMvO28oU1dlLCJ0cmltbWVkRW5kSW5kZXgiKTtDV2U9U1dlLEFXZT0vXlxzKy87byhfV2UsImJhc2VUcmltIik7RFdlPV9XZSxMV2U9UlMuU3ltYm9sLGoxPUxXZSxpbWU9T2JqZWN0LnByb3RvdHlwZSxSV2U9aW1lLmhhc093blByb3BlcnR5LE5XZT1pbWUudG9TdHJpbmcsQWI9ajE/ajEudG9TdHJpbmdUYWc6dm9pZCAwO28oTVdlLCJnZXRSYXdUYWciKTtJV2U9TVdlLE9XZT1PYmplY3QucHJvdG90eXBlLFBXZT1PV2UudG9TdHJpbmc7byhCV2UsIm9iamVjdFRvU3RyaW5nIik7RldlPUJXZSwkV2U9IltvYmplY3QgTnVsbF0iLHpXZT0iW29iamVjdCBVbmRlZmluZWRdIixOcGU9ajE/ajEudG9TdHJpbmdUYWc6dm9pZCAwO28oR1dlLCJiYXNlR2V0VGFnIik7YW1lPUdXZTtvKFZXZSwiaXNPYmplY3RMaWtlIik7VVdlPVZXZSxIV2U9IltvYmplY3QgU3ltYm9sXSI7byhXV2UsImlzU3ltYm9sIik7cjQ9V1dlLE1wZT1OYU4scVdlPS9eWy0rXTB4WzAtOWEtZl0rJC9pLFlXZT0vXjBiWzAxXSskL2ksWFdlPS9eMG9bMC03XSskL2ksaldlPXBhcnNlSW50O28oS1dlLCJ0b051bWJlciIpO0lwZT1LV2UsUVdlPSJFeHBlY3RlZCBhIGZ1bmN0aW9uIixaV2U9TWF0aC5tYXgsSldlPU1hdGgubWluO28oZXFlLCJkZWJvdW5jZSIpO240PWVxZSxiUD1VaT9VaS5wZXJmb3JtYW5jZTpudWxsLHNtZT1iUCYmYlAubm93P2Z1bmN0aW9uKCl7cmV0dXJuIGJQLm5vdygpfTpmdW5jdGlvbigpe3JldHVybiBEYXRlLm5vdygpfSx0cWU9ZnVuY3Rpb24oKXtpZihVaSl7aWYoVWkucmVxdWVzdEFuaW1hdGlvbkZyYW1lKXJldHVybiBmdW5jdGlvbih0KXtVaS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodCl9O2lmKFVpLm1velJlcXVlc3RBbmltYXRpb25GcmFtZSlyZXR1cm4gZnVuY3Rpb24odCl7VWkubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lKHQpfTtpZihVaS53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUpcmV0dXJuIGZ1bmN0aW9uKHQpe1VpLndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSh0KX07aWYoVWkubXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWUpcmV0dXJuIGZ1bmN0aW9uKHQpe1VpLm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lKHQpfX1yZXR1cm4gZnVuY3Rpb24odCl7dCYmc2V0VGltZW91dChmdW5jdGlvbigpe3Qoc21lKCkpfSwxZTMvNjApfX0oKSx4Uz1vKGZ1bmN0aW9uKGUpe3JldHVybiB0cWUoZSl9LCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiKSxRdT1zbWUsVjE9OTI2MSxvbWU9NjU1OTksT2I9NTM4MSxsbWU9byhmdW5jdGlvbihlKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOlYxLG49cixpO2k9ZS5uZXh0KCksIWkuZG9uZTspbj1uKm9tZStpLnZhbHVlfDA7cmV0dXJuIG59LCJoYXNoSXRlcmFibGVJbnRzIiksSGI9byhmdW5jdGlvbihlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06VjE7cmV0dXJuIHIqb21lK2V8MH0sImhhc2hJbnQiKSxXYj1vKGZ1bmN0aW9uKGUpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpPYjtyZXR1cm4ocjw8NSkrcitlfDB9LCJoYXNoSW50QWx0IikscnFlPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gZSoyMDk3MTUyK3J9LCJjb21iaW5lSGFzaGVzIiksd2Y9byhmdW5jdGlvbihlKXtyZXR1cm4gZVswXSoyMDk3MTUyK2VbMV19LCJjb21iaW5lSGFzaGVzQXJyYXkiKSxqNj1vKGZ1bmN0aW9uKGUscil7cmV0dXJuW0hiKGVbMF0sclswXSksV2IoZVsxXSxyWzFdKV19LCJoYXNoQXJyYXlzIiksbnFlPW8oZnVuY3Rpb24oZSxyKXt2YXIgbj17dmFsdWU6MCxkb25lOiExfSxpPTAsYT1lLmxlbmd0aCxzPXtuZXh0Om8oZnVuY3Rpb24oKXtyZXR1cm4gaTxhP24udmFsdWU9ZVtpKytdOm4uZG9uZT0hMCxufSwibmV4dCIpfTtyZXR1cm4gbG1lKHMscil9LCJoYXNoSW50c0FycmF5IiksX2Y9byhmdW5jdGlvbihlLHIpe3ZhciBuPXt2YWx1ZTowLGRvbmU6ITF9LGk9MCxhPWUubGVuZ3RoLHM9e25leHQ6byhmdW5jdGlvbigpe3JldHVybiBpPGE/bi52YWx1ZT1lLmNoYXJDb2RlQXQoaSsrKTpuLmRvbmU9ITAsbn0sIm5leHQiKX07cmV0dXJuIGxtZShzLHIpfSwiaGFzaFN0cmluZyIpLGNtZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIGlxZShhcmd1bWVudHMpfSwiaGFzaFN0cmluZ3MiKSxpcWU9byhmdW5jdGlvbihlKXtmb3IodmFyIHIsbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgaT1lW25dO249PT0wP3I9X2YoaSk6cj1fZihpLHIpfXJldHVybiByfSwiaGFzaFN0cmluZ3NBcnJheSIpLE9wZT0hMCxhcWU9Y29uc29sZS53YXJuIT1udWxsLHNxZT1jb25zb2xlLnRyYWNlIT1udWxsLHRCPU51bWJlci5NQVhfU0FGRV9JTlRFR0VSfHw5MDA3MTk5MjU0NzQwOTkxLHVtZT1vKGZ1bmN0aW9uKCl7cmV0dXJuITB9LCJ0cnVlaWZ5IiksYlM9byhmdW5jdGlvbigpe3JldHVybiExfSwiZmFsc2lmeSIpLFBwZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIDB9LCJ6ZXJvaWZ5IiksckI9byhmdW5jdGlvbigpe30sIm5vb3AiKSxhaT1vKGZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcihlKX0sImVycm9yIiksaG1lPW8oZnVuY3Rpb24oZSl7aWYoZSE9PXZvaWQgMClPcGU9ISFlO2Vsc2UgcmV0dXJuIE9wZX0sIndhcm5pbmdzIiksdW49byhmdW5jdGlvbihlKXtobWUoKSYmKGFxZT9jb25zb2xlLndhcm4oZSk6KGNvbnNvbGUubG9nKGUpLHNxZSYmY29uc29sZS50cmFjZSgpKSl9LCJ3YXJuIiksb3FlPW8oZnVuY3Rpb24oZSl7cmV0dXJuIHJyKHt9LGUpfSwiY2xvbmUiKSxZYz1vKGZ1bmN0aW9uKGUpe3JldHVybiBlPT1udWxsP2U6RW4oZSk/ZS5zbGljZSgpOlVyKGUpP29xZShlKTplfSwiY29weSIpLGxxZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNsaWNlKCl9LCJjb3B5QXJyYXkiKSxmbWU9byhmdW5jdGlvbihlLHIpe2ZvcihyPWU9IiI7ZSsrPDM2O3IrPWUqNTEmNTI/KGVeMTU/OF5NYXRoLnJhbmRvbSgpKihlXjIwPzE2OjQpOjQpLnRvU3RyaW5nKDE2KToiLSIpO3JldHVybiByfSwidXVpZCIpLGNxZT17fSxkbWU9byhmdW5jdGlvbigpe3JldHVybiBjcWV9LCJzdGF0aWNFbXB0eU9iamVjdCIpLGxhPW8oZnVuY3Rpb24oZSl7dmFyIHI9T2JqZWN0LmtleXMoZSk7cmV0dXJuIGZ1bmN0aW9uKG4pe2Zvcih2YXIgaT17fSxhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBzPXJbYV0sbD1uPy5bc107aVtzXT1sPT09dm9pZCAwP2Vbc106bH1yZXR1cm4gaX19LCJkZWZhdWx0cyIpLERmPW8oZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaT1lLmxlbmd0aC0xO2k+PTAmJiEoZVtpXT09PXImJihlLnNwbGljZShpLDEpLG4pKTtpLS0pO30sInJlbW92ZUZyb21BcnJheSIpLG5CPW8oZnVuY3Rpb24oZSl7ZS5zcGxpY2UoMCxlLmxlbmd0aCl9LCJjbGVhckFycmF5IiksdXFlPW8oZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXTtlLnB1c2goaSl9fSwicHVzaCIpLEdsPW8oZnVuY3Rpb24oZSxyLG4pe3JldHVybiBuJiYocj1KMGUobixyKSksZVtyXX0sImdldFByZWZpeGVkUHJvcGVydHkiKSxrZj1vKGZ1bmN0aW9uKGUscixuLGkpe24mJihyPUowZShuLHIpKSxlW3JdPWl9LCJzZXRQcmVmaXhlZFByb3BlcnR5IiksaHFlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe01mKHRoaXMsdCksdGhpcy5fb2JqPXt9fXJldHVybiBvKHQsIk9iamVjdE1hcCIpLElmKHQsW3trZXk6InNldCIsdmFsdWU6byhmdW5jdGlvbihyLG4pe3JldHVybiB0aGlzLl9vYmpbcl09bix0aGlzfSwic2V0Iil9LHtrZXk6ImRlbGV0ZSIsdmFsdWU6byhmdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fb2JqW3JdPXZvaWQgMCx0aGlzfSwiX2RlbGV0ZSIpfSx7a2V5OiJjbGVhciIsdmFsdWU6byhmdW5jdGlvbigpe3RoaXMuX29iaj17fX0sImNsZWFyIil9LHtrZXk6ImhhcyIsdmFsdWU6byhmdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fb2JqW3JdIT09dm9pZCAwfSwiaGFzIil9LHtrZXk6ImdldCIsdmFsdWU6byhmdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fb2JqW3JdfSwiZ2V0Iil9XSksdH0oKSxYYz10eXBlb2YgTWFwPCJ1Ij9NYXA6aHFlLGZxZT0idW5kZWZpbmVkIixkcWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe2lmKE1mKHRoaXMsdCksdGhpcy5fb2JqPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5zaXplPTAsZSE9bnVsbCl7dmFyIHI7ZS5pbnN0YW5jZVN0cmluZyE9bnVsbCYmZS5pbnN0YW5jZVN0cmluZygpPT09dGhpcy5pbnN0YW5jZVN0cmluZygpP3I9ZS50b0FycmF5KCk6cj1lO2Zvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKXRoaXMuYWRkKHJbbl0pfX1yZXR1cm4gbyh0LCJPYmplY3RTZXQiKSxJZih0LFt7a2V5OiJpbnN0YW5jZVN0cmluZyIsdmFsdWU6byhmdW5jdGlvbigpe3JldHVybiJzZXQifSwiaW5zdGFuY2VTdHJpbmciKX0se2tleToiYWRkIix2YWx1ZTpvKGZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX29iajtuW3JdIT09MSYmKG5bcl09MSx0aGlzLnNpemUrKyl9LCJhZGQiKX0se2tleToiZGVsZXRlIix2YWx1ZTpvKGZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX29iajtuW3JdPT09MSYmKG5bcl09MCx0aGlzLnNpemUtLSl9LCJfZGVsZXRlIil9LHtrZXk6ImNsZWFyIix2YWx1ZTpvKGZ1bmN0aW9uKCl7dGhpcy5fb2JqPU9iamVjdC5jcmVhdGUobnVsbCl9LCJjbGVhciIpfSx7a2V5OiJoYXMiLHZhbHVlOm8oZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX29ialtyXT09PTF9LCJoYXMiKX0se2tleToidG9BcnJheSIsdmFsdWU6byhmdW5jdGlvbigpe3ZhciByPXRoaXM7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX29iaikuZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVybiByLmhhcyhuKX0pfSwidG9BcnJheSIpfSx7a2V5OiJmb3JFYWNoIix2YWx1ZTpvKGZ1bmN0aW9uKHIsbil7cmV0dXJuIHRoaXMudG9BcnJheSgpLmZvckVhY2gocixuKX0sImZvckVhY2giKX1dKSx0fSgpLEoxPSh0eXBlb2YgU2V0PiJ1Ij8idW5kZWZpbmVkIjpXaShTZXQpKSE9PWZxZT9TZXQ6ZHFlLE5TPW8oZnVuY3Rpb24oZSxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ITA7aWYoZT09PXZvaWQgMHx8cj09PXZvaWQgMHx8IUpQKGUpKXthaSgiQW4gZWxlbWVudCBtdXN0IGhhdmUgYSBjb3JlIHJlZmVyZW5jZSBhbmQgcGFyYW1ldGVycyBzZXQiKTtyZXR1cm59dmFyIGk9ci5ncm91cDtpZihpPT1udWxsJiYoci5kYXRhJiZyLmRhdGEuc291cmNlIT1udWxsJiZyLmRhdGEudGFyZ2V0IT1udWxsP2k9ImVkZ2VzIjppPSJub2RlcyIpLGkhPT0ibm9kZXMiJiZpIT09ImVkZ2VzIil7YWkoIkFuIGVsZW1lbnQgbXVzdCBiZSBvZiB0eXBlIGBub2Rlc2Agb3IgYGVkZ2VzYDsgeW91IHNwZWNpZmllZCBgIitpKyJgIik7cmV0dXJufXRoaXMubGVuZ3RoPTEsdGhpc1swXT10aGlzO3ZhciBhPXRoaXMuX3ByaXZhdGU9e2N5OmUsc2luZ2xlOiEwLGRhdGE6ci5kYXRhfHx7fSxwb3NpdGlvbjpyLnBvc2l0aW9ufHx7eDowLHk6MH0sYXV0b1dpZHRoOnZvaWQgMCxhdXRvSGVpZ2h0OnZvaWQgMCxhdXRvUGFkZGluZzp2b2lkIDAsY29tcG91bmRCb3VuZHNDbGVhbjohMSxsaXN0ZW5lcnM6W10sZ3JvdXA6aSxzdHlsZTp7fSxyc3R5bGU6e30sc3R5bGVDeHRzOltdLHN0eWxlS2V5czp7fSxyZW1vdmVkOiEwLHNlbGVjdGVkOiEhci5zZWxlY3RlZCxzZWxlY3RhYmxlOnIuc2VsZWN0YWJsZT09PXZvaWQgMD8hMDohIXIuc2VsZWN0YWJsZSxsb2NrZWQ6ISFyLmxvY2tlZCxncmFiYmVkOiExLGdyYWJiYWJsZTpyLmdyYWJiYWJsZT09PXZvaWQgMD8hMDohIXIuZ3JhYmJhYmxlLHBhbm5hYmxlOnIucGFubmFibGU9PT12b2lkIDA/aT09PSJlZGdlcyI6ISFyLnBhbm5hYmxlLGFjdGl2ZTohMSxjbGFzc2VzOm5ldyBKMSxhbmltYXRpb246e2N1cnJlbnQ6W10scXVldWU6W119LHJzY3JhdGNoOnt9LHNjcmF0Y2g6ci5zY3JhdGNofHx7fSxlZGdlczpbXSxjaGlsZHJlbjpbXSxwYXJlbnQ6ci5wYXJlbnQmJnIucGFyZW50LmlzTm9kZSgpP3IucGFyZW50Om51bGwsdHJhdmVyc2FsQ2FjaGU6e30sYmFja2dyb3VuZGluZzohMSxiYkNhY2hlOm51bGwsYmJDYWNoZVNoaWZ0Ont4OjAseTowfSxib2R5Qm91bmRzOm51bGwsb3ZlcmxheUJvdW5kczpudWxsLGxhYmVsQm91bmRzOnthbGw6bnVsbCxzb3VyY2U6bnVsbCx0YXJnZXQ6bnVsbCxtYWluOm51bGx9LGFycm93Qm91bmRzOntzb3VyY2U6bnVsbCx0YXJnZXQ6bnVsbCwibWlkLXNvdXJjZSI6bnVsbCwibWlkLXRhcmdldCI6bnVsbH19O2lmKGEucG9zaXRpb24ueD09bnVsbCYmKGEucG9zaXRpb24ueD0wKSxhLnBvc2l0aW9uLnk9PW51bGwmJihhLnBvc2l0aW9uLnk9MCksci5yZW5kZXJlZFBvc2l0aW9uKXt2YXIgcz1yLnJlbmRlcmVkUG9zaXRpb24sbD1lLnBhbigpLHU9ZS56b29tKCk7YS5wb3NpdGlvbj17eDoocy54LWwueCkvdSx5OihzLnktbC55KS91fX12YXIgaD1bXTtFbihyLmNsYXNzZXMpP2g9ci5jbGFzc2VzOlp0KHIuY2xhc3NlcykmJihoPXIuY2xhc3Nlcy5zcGxpdCgvXHMrLykpO2Zvcih2YXIgZj0wLGQ9aC5sZW5ndGg7ZjxkO2YrKyl7dmFyIHA9aFtmXTshcHx8cD09PSIifHxhLmNsYXNzZXMuYWRkKHApfXRoaXMuY3JlYXRlRW1pdHRlcigpO3ZhciBtPXIuc3R5bGV8fHIuY3NzO20mJih1bigiU2V0dGluZyBhIGBzdHlsZWAgYnlwYXNzIGF0IGVsZW1lbnQgY3JlYXRpb24gc2hvdWxkIGJlIGRvbmUgb25seSB3aGVuIGFic29sdXRlbHkgbmVjZXNzYXJ5LiAgVHJ5IHRvIHVzZSB0aGUgc3R5bGVzaGVldCBpbnN0ZWFkLiIpLHRoaXMuc3R5bGUobSkpLChuPT09dm9pZCAwfHxuKSYmdGhpcy5yZXN0b3JlKCl9LCJFbGVtZW50IiksQnBlPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGU9e2JmczplLmJmc3x8IWUuZGZzLGRmczplLmRmc3x8IWUuYmZzfSxvKGZ1bmN0aW9uKG4saSxhKXt2YXIgcztVcihuKSYmIWdvKG4pJiYocz1uLG49cy5yb290c3x8cy5yb290LGk9cy52aXNpdCxhPXMuZGlyZWN0ZWQpLGE9YXJndW1lbnRzLmxlbmd0aD09PTImJiFzaShpKT9pOmEsaT1zaShpKT9pOmZ1bmN0aW9uKCl7fTtmb3IodmFyIGw9dGhpcy5fcHJpdmF0ZS5jeSx1PW49WnQobik/dGhpcy5maWx0ZXIobik6bixoPVtdLGY9W10sZD17fSxwPXt9LG09e30sZz0wLHksdj10aGlzLmJ5R3JvdXAoKSx4PXYubm9kZXMsYj12LmVkZ2VzLHc9MDt3PHUubGVuZ3RoO3crKyl7dmFyIEM9dVt3XSxUPUMuaWQoKTtDLmlzTm9kZSgpJiYoaC51bnNoaWZ0KEMpLGUuYmZzJiYobVtUXT0hMCxmLnB1c2goQykpLHBbVF09MCl9Zm9yKHZhciBFPW8oZnVuY3Rpb24oKXt2YXIgTD1lLmJmcz9oLnNoaWZ0KCk6aC5wb3AoKSxSPUwuaWQoKTtpZihlLmRmcyl7aWYobVtSXSlyZXR1cm4iY29udGludWUiO21bUl09ITAsZi5wdXNoKEwpfXZhciBPPXBbUl0sTT1kW1JdLEI9TSE9bnVsbD9NLnNvdXJjZSgpOm51bGwsRj1NIT1udWxsP00udGFyZ2V0KCk6bnVsbCxQPU09PW51bGw/dm9pZCAwOkwuc2FtZShCKT9GWzBdOkJbMF0sej12b2lkIDA7aWYoej1pKEwsTSxQLGcrKyxPKSx6PT09ITApcmV0dXJuIHk9TCwiYnJlYWsiO2lmKHo9PT0hMSlyZXR1cm4iYnJlYWsiO2Zvcih2YXIgJD1MLmNvbm5lY3RlZEVkZ2VzKCkuZmlsdGVyKGZ1bmN0aW9uKG5lKXtyZXR1cm4oIWF8fG5lLnNvdXJjZSgpLnNhbWUoTCkpJiZiLmhhcyhuZSl9KSxIPTA7SDwkLmxlbmd0aDtIKyspe3ZhciBRPSRbSF0saj1RLmNvbm5lY3RlZE5vZGVzKCkuZmlsdGVyKGZ1bmN0aW9uKG5lKXtyZXR1cm4hbmUuc2FtZShMKSYmeC5oYXMobmUpfSksaWU9ai5pZCgpO2oubGVuZ3RoIT09MCYmIW1baWVdJiYoaj1qWzBdLGgucHVzaChqKSxlLmJmcyYmKG1baWVdPSEwLGYucHVzaChqKSksZFtpZV09USxwW2llXT1wW1JdKzEpfX0sIl9sb29wIik7aC5sZW5ndGghPT0wOyl7dmFyIEE9RSgpO2lmKEEhPT0iY29udGludWUiJiZBPT09ImJyZWFrIilicmVha31mb3IodmFyIFM9bC5jb2xsZWN0aW9uKCksXz0wO188Zi5sZW5ndGg7XysrKXt2YXIgST1mW19dLEQ9ZFtJLmlkKCldO0QhPW51bGwmJlMucHVzaChEKSxTLnB1c2goSSl9cmV0dXJue3BhdGg6bC5jb2xsZWN0aW9uKFMpLGZvdW5kOmwuY29sbGVjdGlvbih5KX19LCJzZWFyY2hGbiIpfSwiZGVmaW5lU2VhcmNoIikscWI9e2JyZWFkdGhGaXJzdFNlYXJjaDpCcGUoe2JmczohMH0pLGRlcHRoRmlyc3RTZWFyY2g6QnBlKHtkZnM6ITB9KX07cWIuYmZzPXFiLmJyZWFkdGhGaXJzdFNlYXJjaDtxYi5kZnM9cWIuZGVwdGhGaXJzdFNlYXJjaDtwcWU9dldlKGZ1bmN0aW9uKHQsZSl7KGZ1bmN0aW9uKCl7dmFyIHIsbixpLGEscyxsLHUsaCxmLGQscCxtLGcseSx2O2k9TWF0aC5mbG9vcixkPU1hdGgubWluLG49byhmdW5jdGlvbih4LGIpe3JldHVybiB4PGI/LTE6eD5iPzE6MH0sImRlZmF1bHRDbXAiKSxmPW8oZnVuY3Rpb24oeCxiLHcsQyxUKXt2YXIgRTtpZih3PT1udWxsJiYodz0wKSxUPT1udWxsJiYoVD1uKSx3PDApdGhyb3cgbmV3IEVycm9yKCJsbyBtdXN0IGJlIG5vbi1uZWdhdGl2ZSIpO2ZvcihDPT1udWxsJiYoQz14Lmxlbmd0aCk7dzxDOylFPWkoKHcrQykvMiksVChiLHhbRV0pPDA/Qz1FOnc9RSsxO3JldHVybltdLnNwbGljZS5hcHBseSh4LFt3LHctd10uY29uY2F0KGIpKSxifSwiaW5zb3J0IiksbD1vKGZ1bmN0aW9uKHgsYix3KXtyZXR1cm4gdz09bnVsbCYmKHc9bikseC5wdXNoKGIpLHkoeCwwLHgubGVuZ3RoLTEsdyl9LCJoZWFwcHVzaCIpLHM9byhmdW5jdGlvbih4LGIpe3ZhciB3LEM7cmV0dXJuIGI9PW51bGwmJihiPW4pLHc9eC5wb3AoKSx4Lmxlbmd0aD8oQz14WzBdLHhbMF09dyx2KHgsMCxiKSk6Qz13LEN9LCJoZWFwcG9wIiksaD1vKGZ1bmN0aW9uKHgsYix3KXt2YXIgQztyZXR1cm4gdz09bnVsbCYmKHc9biksQz14WzBdLHhbMF09Yix2KHgsMCx3KSxDfSwiaGVhcHJlcGxhY2UiKSx1PW8oZnVuY3Rpb24oeCxiLHcpe3ZhciBDO3JldHVybiB3PT1udWxsJiYodz1uKSx4Lmxlbmd0aCYmdyh4WzBdLGIpPDAmJihDPVt4WzBdLGJdLGI9Q1swXSx4WzBdPUNbMV0sdih4LDAsdykpLGJ9LCJoZWFwcHVzaHBvcCIpLGE9byhmdW5jdGlvbih4LGIpe3ZhciB3LEMsVCxFLEEsUztmb3IoYj09bnVsbCYmKGI9biksRT1mdW5jdGlvbigpe1M9W107Zm9yKHZhciBfPTAsST1pKHgubGVuZ3RoLzIpOzA8PUk/XzxJOl8+STswPD1JP18rKzpfLS0pUy5wdXNoKF8pO3JldHVybiBTfS5hcHBseSh0aGlzKS5yZXZlcnNlKCksQT1bXSxDPTAsVD1FLmxlbmd0aDtDPFQ7QysrKXc9RVtDXSxBLnB1c2godih4LHcsYikpO3JldHVybiBBfSwiaGVhcGlmeSIpLGc9byhmdW5jdGlvbih4LGIsdyl7dmFyIEM7aWYodz09bnVsbCYmKHc9biksQz14LmluZGV4T2YoYiksQyE9PS0xKXJldHVybiB5KHgsMCxDLHcpLHYoeCxDLHcpfSwidXBkYXRlSXRlbSIpLHA9byhmdW5jdGlvbih4LGIsdyl7dmFyIEMsVCxFLEEsUztpZih3PT1udWxsJiYodz1uKSxUPXguc2xpY2UoMCxiKSwhVC5sZW5ndGgpcmV0dXJuIFQ7Zm9yKGEoVCx3KSxTPXguc2xpY2UoYiksRT0wLEE9Uy5sZW5ndGg7RTxBO0UrKylDPVNbRV0sdShULEMsdyk7cmV0dXJuIFQuc29ydCh3KS5yZXZlcnNlKCl9LCJubGFyZ2VzdCIpLG09byhmdW5jdGlvbih4LGIsdyl7dmFyIEMsVCxFLEEsUyxfLEksRCxrO2lmKHc9PW51bGwmJih3PW4pLGIqMTA8PXgubGVuZ3RoKXtpZihFPXguc2xpY2UoMCxiKS5zb3J0KHcpLCFFLmxlbmd0aClyZXR1cm4gRTtmb3IoVD1FW0UubGVuZ3RoLTFdLEk9eC5zbGljZShiKSxBPTAsXz1JLmxlbmd0aDtBPF87QSsrKUM9SVtBXSx3KEMsVCk8MCYmKGYoRSxDLDAsbnVsbCx3KSxFLnBvcCgpLFQ9RVtFLmxlbmd0aC0xXSk7cmV0dXJuIEV9Zm9yKGEoeCx3KSxrPVtdLFM9MCxEPWQoYix4Lmxlbmd0aCk7MDw9RD9TPEQ6Uz5EOzA8PUQ/KytTOi0tUylrLnB1c2gocyh4LHcpKTtyZXR1cm4ga30sIm5zbWFsbGVzdCIpLHk9byhmdW5jdGlvbih4LGIsdyxDKXt2YXIgVCxFLEE7Zm9yKEM9PW51bGwmJihDPW4pLFQ9eFt3XTt3PmI7KXtpZihBPXctMT4+MSxFPXhbQV0sQyhULEUpPDApe3hbd109RSx3PUE7Y29udGludWV9YnJlYWt9cmV0dXJuIHhbd109VH0sIl9zaWZ0ZG93biIpLHY9byhmdW5jdGlvbih4LGIsdyl7dmFyIEMsVCxFLEEsUztmb3Iodz09bnVsbCYmKHc9biksVD14Lmxlbmd0aCxTPWIsRT14W2JdLEM9MipiKzE7QzxUOylBPUMrMSxBPFQmJiEodyh4W0NdLHhbQV0pPDApJiYoQz1BKSx4W2JdPXhbQ10sYj1DLEM9MipiKzE7cmV0dXJuIHhbYl09RSx5KHgsUyxiLHcpfSwiX3NpZnR1cCIpLHI9ZnVuY3Rpb24oKXt4LnB1c2g9bCx4LnBvcD1zLHgucmVwbGFjZT1oLHgucHVzaHBvcD11LHguaGVhcGlmeT1hLHgudXBkYXRlSXRlbT1nLHgubmxhcmdlc3Q9cCx4Lm5zbWFsbGVzdD1tO2Z1bmN0aW9uIHgoYil7dGhpcy5jbXA9Yj8/bix0aGlzLm5vZGVzPVtdfXJldHVybiBvKHgsIkhlYXAiKSx4LnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGIpe3JldHVybiBsKHRoaXMubm9kZXMsYix0aGlzLmNtcCl9LHgucHJvdG90eXBlLnBvcD1mdW5jdGlvbigpe3JldHVybiBzKHRoaXMubm9kZXMsdGhpcy5jbXApfSx4LnByb3RvdHlwZS5wZWVrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZXNbMF19LHgucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLm5vZGVzLmluZGV4T2YoYikhPT0tMX0seC5wcm90b3R5cGUucmVwbGFjZT1mdW5jdGlvbihiKXtyZXR1cm4gaCh0aGlzLm5vZGVzLGIsdGhpcy5jbXApfSx4LnByb3RvdHlwZS5wdXNocG9wPWZ1bmN0aW9uKGIpe3JldHVybiB1KHRoaXMubm9kZXMsYix0aGlzLmNtcCl9LHgucHJvdG90eXBlLmhlYXBpZnk9ZnVuY3Rpb24oKXtyZXR1cm4gYSh0aGlzLm5vZGVzLHRoaXMuY21wKX0seC5wcm90b3R5cGUudXBkYXRlSXRlbT1mdW5jdGlvbihiKXtyZXR1cm4gZyh0aGlzLm5vZGVzLGIsdGhpcy5jbXApfSx4LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVzPVtdfSx4LnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVzLmxlbmd0aD09PTB9LHgucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2Rlcy5sZW5ndGh9LHgucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGI7cmV0dXJuIGI9bmV3IHgsYi5ub2Rlcz10aGlzLm5vZGVzLnNsaWNlKDApLGJ9LHgucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2Rlcy5zbGljZSgwKX0seC5wcm90b3R5cGUuaW5zZXJ0PXgucHJvdG90eXBlLnB1c2gseC5wcm90b3R5cGUudG9wPXgucHJvdG90eXBlLnBlZWsseC5wcm90b3R5cGUuZnJvbnQ9eC5wcm90b3R5cGUucGVlayx4LnByb3RvdHlwZS5oYXM9eC5wcm90b3R5cGUuY29udGFpbnMseC5wcm90b3R5cGUuY29weT14LnByb3RvdHlwZS5jbG9uZSx4fSgpLGZ1bmN0aW9uKHgsYil7cmV0dXJuIHQuZXhwb3J0cz1iKCl9KHRoaXMsZnVuY3Rpb24oKXtyZXR1cm4gcn0pfSkuY2FsbChJYil9KSxpND1wcWUsbXFlPWxhKHtyb290Om51bGwsd2VpZ2h0Om8oZnVuY3Rpb24oZSl7cmV0dXJuIDF9LCJ3ZWlnaHQiKSxkaXJlY3RlZDohMX0pLGdxZT17ZGlqa3N0cmE6byhmdW5jdGlvbihlKXtpZighVXIoZSkpe3ZhciByPWFyZ3VtZW50cztlPXtyb290OnJbMF0sd2VpZ2h0OnJbMV0sZGlyZWN0ZWQ6clsyXX19dmFyIG49bXFlKGUpLGk9bi5yb290LGE9bi53ZWlnaHQscz1uLmRpcmVjdGVkLGw9dGhpcyx1PWEsaD1adChpKT90aGlzLmZpbHRlcihpKVswXTppWzBdLGY9e30sZD17fSxwPXt9LG09dGhpcy5ieUdyb3VwKCksZz1tLm5vZGVzLHk9bS5lZGdlczt5LnVubWVyZ2VCeShmdW5jdGlvbihPKXtyZXR1cm4gTy5pc0xvb3AoKX0pO2Zvcih2YXIgdj1vKGZ1bmN0aW9uKE0pe3JldHVybiBmW00uaWQoKV19LCJnZXREaXN0IikseD1vKGZ1bmN0aW9uKE0sQil7ZltNLmlkKCldPUIsYi51cGRhdGVJdGVtKE0pfSwic2V0RGlzdCIpLGI9bmV3IGk0KGZ1bmN0aW9uKE8sTSl7cmV0dXJuIHYoTyktdihNKX0pLHc9MDt3PGcubGVuZ3RoO3crKyl7dmFyIEM9Z1t3XTtmW0MuaWQoKV09Qy5zYW1lKGgpPzA6MS8wLGIucHVzaChDKX1mb3IodmFyIFQ9byhmdW5jdGlvbihNLEIpe2Zvcih2YXIgRj0ocz9NLmVkZ2VzVG8oQik6TS5lZGdlc1dpdGgoQikpLmludGVyc2VjdCh5KSxQPTEvMCx6LCQ9MDskPEYubGVuZ3RoOyQrKyl7dmFyIEg9RlskXSxRPXUoSCk7KFE8UHx8IXopJiYoUD1RLHo9SCl9cmV0dXJue2VkZ2U6eixkaXN0OlB9fSwiZGlzdEJldHdlZW4iKTtiLnNpemUoKT4wOyl7dmFyIEU9Yi5wb3AoKSxBPXYoRSksUz1FLmlkKCk7aWYocFtTXT1BLEEhPT0xLzApZm9yKHZhciBfPUUubmVpZ2hib3Job29kKCkuaW50ZXJzZWN0KGcpLEk9MDtJPF8ubGVuZ3RoO0krKyl7dmFyIEQ9X1tJXSxrPUQuaWQoKSxMPVQoRSxEKSxSPUErTC5kaXN0O1I8dihEKSYmKHgoRCxSKSxkW2tdPXtub2RlOkUsZWRnZTpMLmVkZ2V9KX19cmV0dXJue2Rpc3RhbmNlVG86byhmdW5jdGlvbihNKXt2YXIgQj1adChNKT9nLmZpbHRlcihNKVswXTpNWzBdO3JldHVybiBwW0IuaWQoKV19LCJkaXN0YW5jZVRvIikscGF0aFRvOm8oZnVuY3Rpb24oTSl7dmFyIEI9WnQoTSk/Zy5maWx0ZXIoTSlbMF06TVswXSxGPVtdLFA9Qix6PVAuaWQoKTtpZihCLmxlbmd0aD4wKWZvcihGLnVuc2hpZnQoQik7ZFt6XTspe3ZhciAkPWRbel07Ri51bnNoaWZ0KCQuZWRnZSksRi51bnNoaWZ0KCQubm9kZSksUD0kLm5vZGUsej1QLmlkKCl9cmV0dXJuIGwuc3Bhd24oRil9LCJwYXRoVG8iKX19LCJkaWprc3RyYSIpfSx5cWU9e2tydXNrYWw6byhmdW5jdGlvbihlKXtlPWV8fGZ1bmN0aW9uKHcpe3JldHVybiAxfTtmb3IodmFyIHI9dGhpcy5ieUdyb3VwKCksbj1yLm5vZGVzLGk9ci5lZGdlcyxhPW4ubGVuZ3RoLHM9bmV3IEFycmF5KGEpLGw9bix1PW8oZnVuY3Rpb24oQyl7Zm9yKHZhciBUPTA7VDxzLmxlbmd0aDtUKyspe3ZhciBFPXNbVF07aWYoRS5oYXMoQykpcmV0dXJuIFR9fSwiZmluZFNldEluZGV4IiksaD0wO2g8YTtoKyspc1toXT10aGlzLnNwYXduKG5baF0pO2Zvcih2YXIgZj1pLnNvcnQoZnVuY3Rpb24odyxDKXtyZXR1cm4gZSh3KS1lKEMpfSksZD0wO2Q8Zi5sZW5ndGg7ZCsrKXt2YXIgcD1mW2RdLG09cC5zb3VyY2UoKVswXSxnPXAudGFyZ2V0KClbMF0seT11KG0pLHY9dShnKSx4PXNbeV0sYj1zW3ZdO3khPT12JiYobC5tZXJnZShwKSx4Lm1lcmdlKGIpLHMuc3BsaWNlKHYsMSkpfXJldHVybiBsfSwia3J1c2thbCIpfSx2cWU9bGEoe3Jvb3Q6bnVsbCxnb2FsOm51bGwsd2VpZ2h0Om8oZnVuY3Rpb24oZSl7cmV0dXJuIDF9LCJ3ZWlnaHQiKSxoZXVyaXN0aWM6byhmdW5jdGlvbihlKXtyZXR1cm4gMH0sImhldXJpc3RpYyIpLGRpcmVjdGVkOiExfSkseHFlPXthU3RhcjpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuY3koKSxuPXZxZShlKSxpPW4ucm9vdCxhPW4uZ29hbCxzPW4uaGV1cmlzdGljLGw9bi5kaXJlY3RlZCx1PW4ud2VpZ2h0O2k9ci5jb2xsZWN0aW9uKGkpWzBdLGE9ci5jb2xsZWN0aW9uKGEpWzBdO3ZhciBoPWkuaWQoKSxmPWEuaWQoKSxkPXt9LHA9e30sbT17fSxnPW5ldyBpNChmdW5jdGlvbih6LCQpe3JldHVybiBwW3ouaWQoKV0tcFskLmlkKCldfSkseT1uZXcgSjEsdj17fSx4PXt9LGI9byhmdW5jdGlvbigkLEgpe2cucHVzaCgkKSx5LmFkZChIKX0sImFkZFRvT3BlblNldCIpLHcsQyxUPW8oZnVuY3Rpb24oKXt3PWcucG9wKCksQz13LmlkKCkseS5kZWxldGUoQyl9LCJwb3BGcm9tT3BlblNldCIpLEU9byhmdW5jdGlvbigkKXtyZXR1cm4geS5oYXMoJCl9LCJpc0luT3BlblNldCIpO2IoaSxoKSxkW2hdPTAscFtoXT1zKGkpO2Zvcih2YXIgQT0wO2cuc2l6ZSgpPjA7KXtpZihUKCksQSsrLEM9PT1mKXtmb3IodmFyIFM9W10sXz1hLEk9ZixEPXhbSV07Uy51bnNoaWZ0KF8pLEQhPW51bGwmJlMudW5zaGlmdChEKSxfPXZbSV0sXyE9bnVsbDspST1fLmlkKCksRD14W0ldO3JldHVybntmb3VuZDohMCxkaXN0YW5jZTpkW0NdLHBhdGg6dGhpcy5zcGF3bihTKSxzdGVwczpBfX1tW0NdPSEwO2Zvcih2YXIgaz13Ll9wcml2YXRlLmVkZ2VzLEw9MDtMPGsubGVuZ3RoO0wrKyl7dmFyIFI9a1tMXTtpZih0aGlzLmhhc0VsZW1lbnRXaXRoSWQoUi5pZCgpKSYmIShsJiZSLmRhdGEoInNvdXJjZSIpIT09Qykpe3ZhciBPPVIuc291cmNlKCksTT1SLnRhcmdldCgpLEI9Ty5pZCgpIT09Qz9POk0sRj1CLmlkKCk7aWYodGhpcy5oYXNFbGVtZW50V2l0aElkKEYpJiYhbVtGXSl7dmFyIFA9ZFtDXSt1KFIpO2lmKCFFKEYpKXtkW0ZdPVAscFtGXT1QK3MoQiksYihCLEYpLHZbRl09dyx4W0ZdPVI7Y29udGludWV9UDxkW0ZdJiYoZFtGXT1QLHBbRl09UCtzKEIpLHZbRl09dyx4W0ZdPVIpfX19fXJldHVybntmb3VuZDohMSxkaXN0YW5jZTp2b2lkIDAscGF0aDp2b2lkIDAsc3RlcHM6QX19LCJhU3RhciIpfSxicWU9bGEoe3dlaWdodDpvKGZ1bmN0aW9uKGUpe3JldHVybiAxfSwid2VpZ2h0IiksZGlyZWN0ZWQ6ITF9KSx3cWU9e2Zsb3lkV2Fyc2hhbGw6byhmdW5jdGlvbihlKXtmb3IodmFyIHI9dGhpcy5jeSgpLG49YnFlKGUpLGk9bi53ZWlnaHQsYT1uLmRpcmVjdGVkLHM9aSxsPXRoaXMuYnlHcm91cCgpLHU9bC5ub2RlcyxoPWwuZWRnZXMsZj11Lmxlbmd0aCxkPWYqZixwPW8oZnVuY3Rpb24oUSl7cmV0dXJuIHUuaW5kZXhPZihRKX0sImluZGV4T2YiKSxtPW8oZnVuY3Rpb24oUSl7cmV0dXJuIHVbUV19LCJhdEluZGV4IiksZz1uZXcgQXJyYXkoZCkseT0wO3k8ZDt5Kyspe3ZhciB2PXklZix4PSh5LXYpL2Y7eD09PXY/Z1t5XT0wOmdbeV09MS8wfWZvcih2YXIgYj1uZXcgQXJyYXkoZCksdz1uZXcgQXJyYXkoZCksQz0wO0M8aC5sZW5ndGg7QysrKXt2YXIgVD1oW0NdLEU9VC5zb3VyY2UoKVswXSxBPVQudGFyZ2V0KClbMF07aWYoRSE9PUEpe3ZhciBTPXAoRSksXz1wKEEpLEk9UypmK18sRD1zKFQpO2lmKGdbSV0+RCYmKGdbSV09RCxiW0ldPV8sd1tJXT1UKSwhYSl7dmFyIGs9XypmK1M7IWEmJmdba10+RCYmKGdba109RCxiW2tdPVMsd1trXT1UKX19fWZvcih2YXIgTD0wO0w8ZjtMKyspZm9yKHZhciBSPTA7UjxmO1IrKylmb3IodmFyIE89UipmK0wsTT0wO008ZjtNKyspe3ZhciBCPVIqZitNLEY9TCpmK007Z1tPXStnW0ZdPGdbQl0mJihnW0JdPWdbT10rZ1tGXSxiW0JdPWJbT10pfXZhciBQPW8oZnVuY3Rpb24oUSl7cmV0dXJuKFp0KFEpP3IuZmlsdGVyKFEpOlEpWzBdfSwiZ2V0QXJnRWxlIiksej1vKGZ1bmN0aW9uKFEpe3JldHVybiBwKFAoUSkpfSwiaW5kZXhPZkFyZ0VsZSIpLCQ9e2Rpc3RhbmNlOm8oZnVuY3Rpb24oUSxqKXt2YXIgaWU9eihRKSxuZT16KGopO3JldHVybiBnW2llKmYrbmVdfSwiZGlzdGFuY2UiKSxwYXRoOm8oZnVuY3Rpb24oUSxqKXt2YXIgaWU9eihRKSxuZT16KGopLGxlPW0oaWUpO2lmKGllPT09bmUpcmV0dXJuIGxlLmNvbGxlY3Rpb24oKTtpZihiW2llKmYrbmVdPT1udWxsKXJldHVybiByLmNvbGxlY3Rpb24oKTt2YXIgaGU9ci5jb2xsZWN0aW9uKCksSz1pZSxYO2ZvcihoZS5tZXJnZShsZSk7aWUhPT1uZTspSz1pZSxpZT1iW2llKmYrbmVdLFg9d1tLKmYraWVdLGhlLm1lcmdlKFgpLGhlLm1lcmdlKG0oaWUpKTtyZXR1cm4gaGV9LCJwYXRoIil9O3JldHVybiAkfSwiZmxveWRXYXJzaGFsbCIpfSxUcWU9bGEoe3dlaWdodDpvKGZ1bmN0aW9uKGUpe3JldHVybiAxfSwid2VpZ2h0IiksZGlyZWN0ZWQ6ITEscm9vdDpudWxsfSksa3FlPXtiZWxsbWFuRm9yZDpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMsbj1UcWUoZSksaT1uLndlaWdodCxhPW4uZGlyZWN0ZWQscz1uLnJvb3QsbD1pLHU9dGhpcyxoPXRoaXMuY3koKSxmPXRoaXMuYnlHcm91cCgpLGQ9Zi5lZGdlcyxwPWYubm9kZXMsbT1wLmxlbmd0aCxnPW5ldyBYYyx5PSExLHY9W107cz1oLmNvbGxlY3Rpb24ocylbMF0sZC51bm1lcmdlQnkoZnVuY3Rpb24oY2Upe3JldHVybiBjZS5pc0xvb3AoKX0pO2Zvcih2YXIgeD1kLmxlbmd0aCxiPW8oZnVuY3Rpb24oYWUpe3ZhciBPZT1nLmdldChhZS5pZCgpKTtyZXR1cm4gT2V8fChPZT17fSxnLnNldChhZS5pZCgpLE9lKSksT2V9LCJnZXRJbmZvIiksdz1vKGZ1bmN0aW9uKGFlKXtyZXR1cm4oWnQoYWUpP2guJChhZSk6YWUpWzBdfSwiZ2V0Tm9kZUZyb21UbyIpLEM9byhmdW5jdGlvbihhZSl7cmV0dXJuIGIodyhhZSkpLmRpc3R9LCJkaXN0YW5jZVRvIiksVD1vKGZ1bmN0aW9uKGFlKXtmb3IodmFyIE9lPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpzLGdlPXcoYWUpLHplPVtdLEhlPWdlOzspe2lmKEhlPT1udWxsKXJldHVybiByLnNwYXduKCk7dmFyICRlPWIoSGUpLFJlPSRlLmVkZ2UsSWU9JGUucHJlZDtpZih6ZS51bnNoaWZ0KEhlWzBdKSxIZS5zYW1lKE9lKSYmemUubGVuZ3RoPjApYnJlYWs7UmUhPW51bGwmJnplLnVuc2hpZnQoUmUpLEhlPUllfXJldHVybiB1LnNwYXduKHplKX0sInBhdGhUbyIpLEU9MDtFPG07RSsrKXt2YXIgQT1wW0VdLFM9YihBKTtBLnNhbWUocyk/Uy5kaXN0PTA6Uy5kaXN0PTEvMCxTLnByZWQ9bnVsbCxTLmVkZ2U9bnVsbH1mb3IodmFyIF89ITEsST1vKGZ1bmN0aW9uKGFlLE9lLGdlLHplLEhlLCRlKXt2YXIgUmU9emUuZGlzdCskZTtSZTxIZS5kaXN0JiYhZ2Uuc2FtZSh6ZS5lZGdlKSYmKEhlLmRpc3Q9UmUsSGUucHJlZD1hZSxIZS5lZGdlPWdlLF89ITApfSwiY2hlY2tGb3JFZGdlUmVwbGFjZW1lbnQiKSxEPTE7RDxtO0QrKyl7Xz0hMTtmb3IodmFyIGs9MDtrPHg7aysrKXt2YXIgTD1kW2tdLFI9TC5zb3VyY2UoKSxPPUwudGFyZ2V0KCksTT1sKEwpLEI9YihSKSxGPWIoTyk7SShSLE8sTCxCLEYsTSksYXx8SShPLFIsTCxGLEIsTSl9aWYoIV8pYnJlYWt9aWYoXylmb3IodmFyIFA9W10sej0wO3o8eDt6Kyspe3ZhciAkPWRbel0sSD0kLnNvdXJjZSgpLFE9JC50YXJnZXQoKSxqPWwoJCksaWU9YihIKS5kaXN0LG5lPWIoUSkuZGlzdDtpZihpZStqPG5lfHwhYSYmbmUrajxpZSlpZih5fHwodW4oIkdyYXBoIGNvbnRhaW5zIGEgbmVnYXRpdmUgd2VpZ2h0IGN5Y2xlIGZvciBCZWxsbWFuLUZvcmQiKSx5PSEwKSxlLmZpbmROZWdhdGl2ZVdlaWdodEN5Y2xlcyE9PSExKXt2YXIgbGU9W107aWUrajxuZSYmbGUucHVzaChIKSwhYSYmbmUrajxpZSYmbGUucHVzaChRKTtmb3IodmFyIGhlPWxlLmxlbmd0aCxLPTA7SzxoZTtLKyspe3ZhciBYPWxlW0tdLHRlPVtYXTt0ZS5wdXNoKGIoWCkuZWRnZSk7Zm9yKHZhciBKPWIoWCkucHJlZDt0ZS5pbmRleE9mKEopPT09LTE7KXRlLnB1c2goSiksdGUucHVzaChiKEopLmVkZ2UpLEo9YihKKS5wcmVkO3RlPXRlLnNsaWNlKHRlLmluZGV4T2YoSikpO2Zvcih2YXIgc2U9dGVbMF0uaWQoKSx1ZT0wLFo9MjtaPHRlLmxlbmd0aDtaKz0yKXRlW1pdLmlkKCk8c2UmJihzZT10ZVtaXS5pZCgpLHVlPVopO3RlPXRlLnNsaWNlKHVlKS5jb25jYXQodGUuc2xpY2UoMCx1ZSkpLHRlLnB1c2godGVbMF0pO3ZhciBTZT10ZS5tYXAoZnVuY3Rpb24oY2Upe3JldHVybiBjZS5pZCgpfSkuam9pbigiLCIpO1AuaW5kZXhPZihTZSk9PT0tMSYmKHYucHVzaCh1LnNwYXduKHRlKSksUC5wdXNoKFNlKSl9fWVsc2UgYnJlYWt9cmV0dXJue2Rpc3RhbmNlVG86QyxwYXRoVG86VCxoYXNOZWdhdGl2ZVdlaWdodEN5Y2xlOnksbmVnYXRpdmVXZWlnaHRDeWNsZXM6dn19LCJiZWxsbWFuRm9yZCIpfSxFcWU9TWF0aC5zcXJ0KDIpLFNxZT1vKGZ1bmN0aW9uKGUscixuKXtuLmxlbmd0aD09PTAmJmFpKCJLYXJnZXItU3RlaW4gbXVzdCBiZSBydW4gb24gYSBjb25uZWN0ZWQgKHN1YilncmFwaCIpO2Zvcih2YXIgaT1uW2VdLGE9aVsxXSxzPWlbMl0sbD1yW2FdLHU9cltzXSxoPW4sZj1oLmxlbmd0aC0xO2Y+PTA7Zi0tKXt2YXIgZD1oW2ZdLHA9ZFsxXSxtPWRbMl07KHJbcF09PT1sJiZyW21dPT09dXx8cltwXT09PXUmJnJbbV09PT1sKSYmaC5zcGxpY2UoZiwxKX1mb3IodmFyIGc9MDtnPGgubGVuZ3RoO2crKyl7dmFyIHk9aFtnXTt5WzFdPT09dT8oaFtnXT15LnNsaWNlKCksaFtnXVsxXT1sKTp5WzJdPT09dSYmKGhbZ109eS5zbGljZSgpLGhbZ11bMl09bCl9Zm9yKHZhciB2PTA7djxyLmxlbmd0aDt2Kyspclt2XT09PXUmJihyW3ZdPWwpO3JldHVybiBofSwiY29sbGFwc2UiKSx3UD1vKGZ1bmN0aW9uKGUscixuLGkpe2Zvcig7bj5pOyl7dmFyIGE9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKnIubGVuZ3RoKTtyPVNxZShhLGUsciksbi0tfXJldHVybiByfSwiY29udHJhY3RVbnRpbCIpLENxZT17a2FyZ2VyU3RlaW46byhmdW5jdGlvbigpe3ZhciBlPXRoaXMscj10aGlzLmJ5R3JvdXAoKSxuPXIubm9kZXMsaT1yLmVkZ2VzO2kudW5tZXJnZUJ5KGZ1bmN0aW9uKEYpe3JldHVybiBGLmlzTG9vcCgpfSk7dmFyIGE9bi5sZW5ndGgscz1pLmxlbmd0aCxsPU1hdGguY2VpbChNYXRoLnBvdyhNYXRoLmxvZyhhKS9NYXRoLkxOMiwyKSksdT1NYXRoLmZsb29yKGEvRXFlKTtpZihhPDIpe2FpKCJBdCBsZWFzdCAyIG5vZGVzIGFyZSByZXF1aXJlZCBmb3IgS2FyZ2VyLVN0ZWluIGFsZ29yaXRobSIpO3JldHVybn1mb3IodmFyIGg9W10sZj0wO2Y8cztmKyspe3ZhciBkPWlbZl07aC5wdXNoKFtmLG4uaW5kZXhPZihkLnNvdXJjZSgpKSxuLmluZGV4T2YoZC50YXJnZXQoKSldKX1mb3IodmFyIHA9MS8wLG09W10sZz1uZXcgQXJyYXkoYSkseT1uZXcgQXJyYXkoYSksdj1uZXcgQXJyYXkoYSkseD1vKGZ1bmN0aW9uKFAseil7Zm9yKHZhciAkPTA7JDxhOyQrKyl6WyRdPVBbJF19LCJjb3B5Tm9kZXNNYXAiKSxiPTA7Yjw9bDtiKyspe2Zvcih2YXIgdz0wO3c8YTt3KyspeVt3XT13O3ZhciBDPXdQKHksaC5zbGljZSgpLGEsdSksVD1DLnNsaWNlKCk7eCh5LHYpO3ZhciBFPXdQKHksQyx1LDIpLEE9d1AodixULHUsMik7RS5sZW5ndGg8PUEubGVuZ3RoJiZFLmxlbmd0aDxwPyhwPUUubGVuZ3RoLG09RSx4KHksZykpOkEubGVuZ3RoPD1FLmxlbmd0aCYmQS5sZW5ndGg8cCYmKHA9QS5sZW5ndGgsbT1BLHgodixnKSl9Zm9yKHZhciBTPXRoaXMuc3Bhd24obS5tYXAoZnVuY3Rpb24oRil7cmV0dXJuIGlbRlswXV19KSksXz10aGlzLnNwYXduKCksST10aGlzLnNwYXduKCksRD1nWzBdLGs9MDtrPGcubGVuZ3RoO2srKyl7dmFyIEw9Z1trXSxSPW5ba107TD09PUQ/Xy5tZXJnZShSKTpJLm1lcmdlKFIpfXZhciBPPW8oZnVuY3Rpb24oUCl7dmFyIHo9ZS5zcGF3bigpO3JldHVybiBQLmZvckVhY2goZnVuY3Rpb24oJCl7ei5tZXJnZSgkKSwkLmNvbm5lY3RlZEVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihIKXtlLmNvbnRhaW5zKEgpJiYhUy5jb250YWlucyhIKSYmei5tZXJnZShIKX0pfSksen0sImNvbnN0cnVjdENvbXBvbmVudCIpLE09W08oXyksTyhJKV0sQj17Y3V0OlMsY29tcG9uZW50czpNLHBhcnRpdGlvbjE6XyxwYXJ0aXRpb24yOkl9O3JldHVybiBCfSwia2FyZ2VyU3RlaW4iKX0sQXFlPW8oZnVuY3Rpb24oZSl7cmV0dXJue3g6ZS54LHk6ZS55fX0sImNvcHlQb3NpdGlvbiIpLE1TPW8oZnVuY3Rpb24oZSxyLG4pe3JldHVybnt4OmUueCpyK24ueCx5OmUueSpyK24ueX19LCJtb2RlbFRvUmVuZGVyZWRQb3NpdGlvbiIpLHBtZT1vKGZ1bmN0aW9uKGUscixuKXtyZXR1cm57eDooZS54LW4ueCkvcix5OihlLnktbi55KS9yfX0sInJlbmRlcmVkVG9Nb2RlbFBvc2l0aW9uIiksVTE9byhmdW5jdGlvbihlKXtyZXR1cm57eDplWzBdLHk6ZVsxXX19LCJhcnJheTJwb2ludCIpLF9xZT1vKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06MCxuPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTplLmxlbmd0aCxpPTEvMCxhPXI7YTxuO2ErKyl7dmFyIHM9ZVthXTtpc0Zpbml0ZShzKSYmKGk9TWF0aC5taW4ocyxpKSl9cmV0dXJuIGl9LCJtaW4iKSxEcWU9byhmdW5jdGlvbihlKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOjAsbj1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ZS5sZW5ndGgsaT0tMS8wLGE9cjthPG47YSsrKXt2YXIgcz1lW2FdO2lzRmluaXRlKHMpJiYoaT1NYXRoLm1heChzLGkpKX1yZXR1cm4gaX0sIm1heCIpLExxZT1vKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06MCxuPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTplLmxlbmd0aCxpPTAsYT0wLHM9cjtzPG47cysrKXt2YXIgbD1lW3NdO2lzRmluaXRlKGwpJiYoaSs9bCxhKyspfXJldHVybiBpL2F9LCJtZWFuIiksUnFlPW8oZnVuY3Rpb24oZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOjAsbj1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ZS5sZW5ndGgsaT1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106ITAsYT1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06ITAscz1hcmd1bWVudHMubGVuZ3RoPjUmJmFyZ3VtZW50c1s1XSE9PXZvaWQgMD9hcmd1bWVudHNbNV06ITA7aT9lPWUuc2xpY2UocixuKToobjxlLmxlbmd0aCYmZS5zcGxpY2UobixlLmxlbmd0aC1uKSxyPjAmJmUuc3BsaWNlKDAscikpO2Zvcih2YXIgbD0wLHU9ZS5sZW5ndGgtMTt1Pj0wO3UtLSl7dmFyIGg9ZVt1XTtzP2lzRmluaXRlKGgpfHwoZVt1XT0tMS8wLGwrKyk6ZS5zcGxpY2UodSwxKX1hJiZlLnNvcnQoZnVuY3Rpb24ocCxtKXtyZXR1cm4gcC1tfSk7dmFyIGY9ZS5sZW5ndGgsZD1NYXRoLmZsb29yKGYvMik7cmV0dXJuIGYlMiE9PTA/ZVtkKzErbF06KGVbZC0xK2xdK2VbZCtsXSkvMn0sIm1lZGlhbiIpLE5xZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLlBJKmUvMTgwfSwiZGVnMnJhZCIpLEs2PW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gTWF0aC5hdGFuMihyLGUpLU1hdGguUEkvMn0sImdldEFuZ2xlRnJvbURpc3AiKSxpQj1NYXRoLmxvZzJ8fGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KS9NYXRoLmxvZygyKX0sbW1lPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGU+MD8xOmU8MD8tMTowfSwic2lnbnVtIiksR3A9byhmdW5jdGlvbihlLHIpe3JldHVybiBNYXRoLnNxcnQoT3AoZSxyKSl9LCJkaXN0IiksT3A9byhmdW5jdGlvbihlLHIpe3ZhciBuPXIueC1lLngsaT1yLnktZS55O3JldHVybiBuKm4raSppfSwic3FkaXN0IiksTXFlPW8oZnVuY3Rpb24oZSl7Zm9yKHZhciByPWUubGVuZ3RoLG49MCxpPTA7aTxyO2krKyluKz1lW2ldO2Zvcih2YXIgYT0wO2E8cjthKyspZVthXT1lW2FdL247cmV0dXJuIGV9LCJpblBsYWNlU3VtTm9ybWFsaXplIiksb2E9byhmdW5jdGlvbihlLHIsbixpKXtyZXR1cm4oMS1pKSooMS1pKSplKzIqKDEtaSkqaSpyK2kqaSpufSwicWJlemllckF0IiksVzE9byhmdW5jdGlvbihlLHIsbixpKXtyZXR1cm57eDpvYShlLngsci54LG4ueCxpKSx5Om9hKGUueSxyLnksbi55LGkpfX0sInFiZXppZXJQdEF0IiksSXFlPW8oZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9e3g6ci54LWUueCx5OnIueS1lLnl9LHM9R3AoZSxyKSxsPXt4OmEueC9zLHk6YS55L3N9O3JldHVybiBuPW4/PzAsaT1pPz9uKnMse3g6ZS54K2wueCppLHk6ZS55K2wueSppfX0sImxpbmVBdCIpLFliPW8oZnVuY3Rpb24oZSxyLG4pe3JldHVybiBNYXRoLm1heChlLE1hdGgubWluKG4scikpfSwiYm91bmQiKSxIcz1vKGZ1bmN0aW9uKGUpe2lmKGU9PW51bGwpcmV0dXJue3gxOjEvMCx5MToxLzAseDI6LTEvMCx5MjotMS8wLHc6MCxoOjB9O2lmKGUueDEhPW51bGwmJmUueTEhPW51bGwpe2lmKGUueDIhPW51bGwmJmUueTIhPW51bGwmJmUueDI+PWUueDEmJmUueTI+PWUueTEpcmV0dXJue3gxOmUueDEseTE6ZS55MSx4MjplLngyLHkyOmUueTIsdzplLngyLWUueDEsaDplLnkyLWUueTF9O2lmKGUudyE9bnVsbCYmZS5oIT1udWxsJiZlLnc+PTAmJmUuaD49MClyZXR1cm57eDE6ZS54MSx5MTplLnkxLHgyOmUueDErZS53LHkyOmUueTErZS5oLHc6ZS53LGg6ZS5ofX19LCJtYWtlQm91bmRpbmdCb3giKSxPcWU9byhmdW5jdGlvbihlKXtyZXR1cm57eDE6ZS54MSx4MjplLngyLHc6ZS53LHkxOmUueTEseTI6ZS55MixoOmUuaH19LCJjb3B5Qm91bmRpbmdCb3giKSxQcWU9byhmdW5jdGlvbihlKXtlLngxPTEvMCxlLnkxPTEvMCxlLngyPS0xLzAsZS55Mj0tMS8wLGUudz0wLGUuaD0wfSwiY2xlYXJCb3VuZGluZ0JveCIpLEJxZT1vKGZ1bmN0aW9uKGUscixuKXtyZXR1cm57eDE6ZS54MStyLHgyOmUueDIrcix5MTplLnkxK24seTI6ZS55MituLHc6ZS53LGg6ZS5ofX0sInNoaWZ0Qm91bmRpbmdCb3giKSxnbWU9byhmdW5jdGlvbihlLHIpe2UueDE9TWF0aC5taW4oZS54MSxyLngxKSxlLngyPU1hdGgubWF4KGUueDIsci54MiksZS53PWUueDItZS54MSxlLnkxPU1hdGgubWluKGUueTEsci55MSksZS55Mj1NYXRoLm1heChlLnkyLHIueTIpLGUuaD1lLnkyLWUueTF9LCJ1cGRhdGVCb3VuZGluZ0JveCIpLEZxZT1vKGZ1bmN0aW9uKGUscixuKXtlLngxPU1hdGgubWluKGUueDEsciksZS54Mj1NYXRoLm1heChlLngyLHIpLGUudz1lLngyLWUueDEsZS55MT1NYXRoLm1pbihlLnkxLG4pLGUueTI9TWF0aC5tYXgoZS55MixuKSxlLmg9ZS55Mi1lLnkxfSwiZXhwYW5kQm91bmRpbmdCb3hCeVBvaW50IiksY1M9byhmdW5jdGlvbihlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06MDtyZXR1cm4gZS54MS09cixlLngyKz1yLGUueTEtPXIsZS55Mis9cixlLnc9ZS54Mi1lLngxLGUuaD1lLnkyLWUueTEsZX0sImV4cGFuZEJvdW5kaW5nQm94IiksdVM9byhmdW5jdGlvbihlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06WzBdLG4saSxhLHM7aWYoci5sZW5ndGg9PT0xKW49aT1hPXM9clswXTtlbHNlIGlmKHIubGVuZ3RoPT09MiluPWE9clswXSxzPWk9clsxXTtlbHNlIGlmKHIubGVuZ3RoPT09NCl7dmFyIGw9X2kociw0KTtuPWxbMF0saT1sWzFdLGE9bFsyXSxzPWxbM119cmV0dXJuIGUueDEtPXMsZS54Mis9aSxlLnkxLT1uLGUueTIrPWEsZS53PWUueDItZS54MSxlLmg9ZS55Mi1lLnkxLGV9LCJleHBhbmRCb3VuZGluZ0JveFNpZGVzIiksRnBlPW8oZnVuY3Rpb24oZSxyKXtlLngxPXIueDEsZS55MT1yLnkxLGUueDI9ci54MixlLnkyPXIueTIsZS53PWUueDItZS54MSxlLmg9ZS55Mi1lLnkxfSwiYXNzaWduQm91bmRpbmdCb3giKSxhQj1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIShlLngxPnIueDJ8fHIueDE+ZS54Mnx8ZS54MjxyLngxfHxyLngyPGUueDF8fGUueTI8ci55MXx8ci55MjxlLnkxfHxlLnkxPnIueTJ8fHIueTE+ZS55Mil9LCJib3VuZGluZ0JveGVzSW50ZXJzZWN0IiksSzE9byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIGUueDE8PXImJnI8PWUueDImJmUueTE8PW4mJm48PWUueTJ9LCJpbkJvdW5kaW5nQm94IiksJHFlPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gSzEoZSxyLngsci55KX0sInBvaW50SW5Cb3VuZGluZ0JveCIpLHltZT1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIEsxKGUsci54MSxyLnkxKSYmSzEoZSxyLngyLHIueTIpfSwiYm91bmRpbmdCb3hJbkJvdW5kaW5nQm94Iiksdm1lPW8oZnVuY3Rpb24oZSxyLG4saSxhLHMsbCl7dmFyIHU9YXJndW1lbnRzLmxlbmd0aD43JiZhcmd1bWVudHNbN10hPT12b2lkIDA/YXJndW1lbnRzWzddOiJhdXRvIixoPXU9PT0iYXV0byI/VnAoYSxzKTp1LGY9YS8yLGQ9cy8yO2g9TWF0aC5taW4oaCxmLGQpO3ZhciBwPWghPT1mLG09aCE9PWQsZztpZihwKXt2YXIgeT1uLWYraC1sLHY9aS1kLWwseD1uK2YtaCtsLGI9djtpZihnPUVmKGUscixuLGkseSx2LHgsYiwhMSksZy5sZW5ndGg+MClyZXR1cm4gZ31pZihtKXt2YXIgdz1uK2YrbCxDPWktZCtoLWwsVD13LEU9aStkLWgrbDtpZihnPUVmKGUscixuLGksdyxDLFQsRSwhMSksZy5sZW5ndGg+MClyZXR1cm4gZ31pZihwKXt2YXIgQT1uLWYraC1sLFM9aStkK2wsXz1uK2YtaCtsLEk9UztpZihnPUVmKGUscixuLGksQSxTLF8sSSwhMSksZy5sZW5ndGg+MClyZXR1cm4gZ31pZihtKXt2YXIgRD1uLWYtbCxrPWktZCtoLWwsTD1ELFI9aStkLWgrbDtpZihnPUVmKGUscixuLGksRCxrLEwsUiwhMSksZy5sZW5ndGg+MClyZXR1cm4gZ312YXIgTzt7dmFyIE09bi1mK2gsQj1pLWQraDtpZihPPVBiKGUscixuLGksTSxCLGgrbCksTy5sZW5ndGg+MCYmT1swXTw9TSYmT1sxXTw9QilyZXR1cm5bT1swXSxPWzFdXX17dmFyIEY9bitmLWgsUD1pLWQraDtpZihPPVBiKGUscixuLGksRixQLGgrbCksTy5sZW5ndGg+MCYmT1swXT49RiYmT1sxXTw9UClyZXR1cm5bT1swXSxPWzFdXX17dmFyIHo9bitmLWgsJD1pK2QtaDtpZihPPVBiKGUscixuLGkseiwkLGgrbCksTy5sZW5ndGg+MCYmT1swXT49eiYmT1sxXT49JClyZXR1cm5bT1swXSxPWzFdXX17dmFyIEg9bi1mK2gsUT1pK2QtaDtpZihPPVBiKGUscixuLGksSCxRLGgrbCksTy5sZW5ndGg+MCYmT1swXTw9SCYmT1sxXT49USlyZXR1cm5bT1swXSxPWzFdXX1yZXR1cm5bXX0sInJvdW5kUmVjdGFuZ2xlSW50ZXJzZWN0TGluZSIpLHpxZT1vKGZ1bmN0aW9uKGUscixuLGksYSxzLGwpe3ZhciB1PWwsaD1NYXRoLm1pbihuLGEpLGY9TWF0aC5tYXgobixhKSxkPU1hdGgubWluKGkscykscD1NYXRoLm1heChpLHMpO3JldHVybiBoLXU8PWUmJmU8PWYrdSYmZC11PD1yJiZyPD1wK3V9LCJpbkxpbmVWaWNpbml0eSIpLEdxZT1vKGZ1bmN0aW9uKGUscixuLGksYSxzLGwsdSxoKXt2YXIgZj17eDE6TWF0aC5taW4obixsLGEpLWgseDI6TWF0aC5tYXgobixsLGEpK2gseTE6TWF0aC5taW4oaSx1LHMpLWgseTI6TWF0aC5tYXgoaSx1LHMpK2h9O3JldHVybiEoZTxmLngxfHxlPmYueDJ8fHI8Zi55MXx8cj5mLnkyKX0sImluQmV6aWVyVmljaW5pdHkiKSxWcWU9byhmdW5jdGlvbihlLHIsbixpKXtuLT1pO3ZhciBhPXIqci00KmUqbjtpZihhPDApcmV0dXJuW107dmFyIHM9TWF0aC5zcXJ0KGEpLGw9MiplLHU9KC1yK3MpL2wsaD0oLXItcykvbDtyZXR1cm5bdSxoXX0sInNvbHZlUXVhZHJhdGljIiksVXFlPW8oZnVuY3Rpb24oZSxyLG4saSxhKXt2YXIgcz0xZS01O2U9PT0wJiYoZT1zKSxyLz1lLG4vPWUsaS89ZTt2YXIgbCx1LGgsZixkLHAsbSxnO2lmKHU9KDMqbi1yKnIpLzksaD0tKDI3KmkpK3IqKDkqbi0yKihyKnIpKSxoLz01NCxsPXUqdSp1K2gqaCxhWzFdPTAsbT1yLzMsbD4wKXtkPWgrTWF0aC5zcXJ0KGwpLGQ9ZDwwPy1NYXRoLnBvdygtZCwxLzMpOk1hdGgucG93KGQsMS8zKSxwPWgtTWF0aC5zcXJ0KGwpLHA9cDwwPy1NYXRoLnBvdygtcCwxLzMpOk1hdGgucG93KHAsMS8zKSxhWzBdPS1tK2QrcCxtKz0oZCtwKS8yLGFbNF09YVsyXT0tbSxtPU1hdGguc3FydCgzKSooLXArZCkvMixhWzNdPW0sYVs1XT0tbTtyZXR1cm59aWYoYVs1XT1hWzNdPTAsbD09PTApe2c9aDwwPy1NYXRoLnBvdygtaCwxLzMpOk1hdGgucG93KGgsMS8zKSxhWzBdPS1tKzIqZyxhWzRdPWFbMl09LShnK20pO3JldHVybn11PS11LGY9dSp1KnUsZj1NYXRoLmFjb3MoaC9NYXRoLnNxcnQoZikpLGc9MipNYXRoLnNxcnQodSksYVswXT0tbStnKk1hdGguY29zKGYvMyksYVsyXT0tbStnKk1hdGguY29zKChmKzIqTWF0aC5QSSkvMyksYVs0XT0tbStnKk1hdGguY29zKChmKzQqTWF0aC5QSSkvMyl9LCJzb2x2ZUN1YmljIiksSHFlPW8oZnVuY3Rpb24oZSxyLG4saSxhLHMsbCx1KXt2YXIgaD0xKm4qbi00Km4qYSsyKm4qbCs0KmEqYS00KmEqbCtsKmwraSppLTQqaSpzKzIqaSp1KzQqcypzLTQqcyp1K3UqdSxmPTEqOSpuKmEtMypuKm4tMypuKmwtNiphKmErMyphKmwrOSppKnMtMyppKmktMyppKnUtNipzKnMrMypzKnUsZD0xKjMqbipuLTYqbiphK24qbC1uKmUrMiphKmErMiphKmUtbCplKzMqaSppLTYqaSpzK2kqdS1pKnIrMipzKnMrMipzKnItdSpyLHA9MSpuKmEtbipuK24qZS1hKmUraSpzLWkqaStpKnItcypyLG09W107VXFlKGgsZixkLHAsbSk7Zm9yKHZhciBnPTFlLTcseT1bXSx2PTA7djw2O3YrPTIpTWF0aC5hYnMobVt2KzFdKTxnJiZtW3ZdPj0wJiZtW3ZdPD0xJiZ5LnB1c2gobVt2XSk7eS5wdXNoKDEpLHkucHVzaCgwKTtmb3IodmFyIHg9LTEsYix3LEMsVD0wO1Q8eS5sZW5ndGg7VCsrKWI9TWF0aC5wb3coMS15W1RdLDIpKm4rMiooMS15W1RdKSp5W1RdKmEreVtUXSp5W1RdKmwsdz1NYXRoLnBvdygxLXlbVF0sMikqaSsyKigxLXlbVF0pKnlbVF0qcyt5W1RdKnlbVF0qdSxDPU1hdGgucG93KGItZSwyKStNYXRoLnBvdyh3LXIsMikseD49MD9DPHgmJih4PUMpOng9QztyZXR1cm4geH0sInNxZGlzdFRvUXVhZHJhdGljQmV6aWVyIiksV3FlPW8oZnVuY3Rpb24oZSxyLG4saSxhLHMpe3ZhciBsPVtlLW4sci1pXSx1PVthLW4scy1pXSxoPXVbMF0qdVswXSt1WzFdKnVbMV0sZj1sWzBdKmxbMF0rbFsxXSpsWzFdLGQ9bFswXSp1WzBdK2xbMV0qdVsxXSxwPWQqZC9oO3JldHVybiBkPDA/ZjpwPmg/KGUtYSkqKGUtYSkrKHItcykqKHItcyk6Zi1wfSwic3FkaXN0VG9GaW5pdGVMaW5lIiksVXM9byhmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpLGEscyxsLHUsaD0wLGY9MDtmPG4ubGVuZ3RoLzI7ZisrKWlmKGk9bltmKjJdLGE9bltmKjIrMV0sZisxPG4ubGVuZ3RoLzI/KHM9blsoZisxKSoyXSxsPW5bKGYrMSkqMisxXSk6KHM9blsoZisxLW4ubGVuZ3RoLzIpKjJdLGw9blsoZisxLW4ubGVuZ3RoLzIpKjIrMV0pLCEoaT09ZSYmcz09ZSkpaWYoaT49ZSYmZT49c3x8aTw9ZSYmZTw9cyl1PShlLWkpLyhzLWkpKihsLWEpK2EsdT5yJiZoKys7ZWxzZSBjb250aW51ZTtyZXR1cm4gaCUyIT09MH0sInBvaW50SW5zaWRlUG9seWdvblBvaW50cyIpLFp1PW8oZnVuY3Rpb24oZSxyLG4saSxhLHMsbCx1LGgpe3ZhciBmPW5ldyBBcnJheShuLmxlbmd0aCksZDt1WzBdIT1udWxsPyhkPU1hdGguYXRhbih1WzFdL3VbMF0pLHVbMF08MD9kPWQrTWF0aC5QSS8yOmQ9LWQtTWF0aC5QSS8yKTpkPXU7Zm9yKHZhciBwPU1hdGguY29zKC1kKSxtPU1hdGguc2luKC1kKSxnPTA7ZzxmLmxlbmd0aC8yO2crKylmW2cqMl09cy8yKihuW2cqMl0qcC1uW2cqMisxXSptKSxmW2cqMisxXT1sLzIqKG5bZyoyKzFdKnArbltnKjJdKm0pLGZbZyoyXSs9aSxmW2cqMisxXSs9YTt2YXIgeTtpZihoPjApe3ZhciB2PVRTKGYsLWgpO3k9d1Modil9ZWxzZSB5PWY7cmV0dXJuIFVzKGUscix5KX0sInBvaW50SW5zaWRlUG9seWdvbiIpLHFxZT1vKGZ1bmN0aW9uKGUscixuLGksYSxzLGwsdSl7Zm9yKHZhciBoPW5ldyBBcnJheShuLmxlbmd0aCoyKSxmPTA7Zjx1Lmxlbmd0aDtmKyspe3ZhciBkPXVbZl07aFtmKjQrMF09ZC5zdGFydFgsaFtmKjQrMV09ZC5zdGFydFksaFtmKjQrMl09ZC5zdG9wWCxoW2YqNCszXT1kLnN0b3BZO3ZhciBwPU1hdGgucG93KGQuY3gtZSwyKStNYXRoLnBvdyhkLmN5LXIsMik7aWYocDw9TWF0aC5wb3coZC5yYWRpdXMsMikpcmV0dXJuITB9cmV0dXJuIFVzKGUscixoKX0sInBvaW50SW5zaWRlUm91bmRQb2x5Z29uIiksd1M9byhmdW5jdGlvbihlKXtmb3IodmFyIHI9bmV3IEFycmF5KGUubGVuZ3RoLzIpLG4saSxhLHMsbCx1LGgsZixkPTA7ZDxlLmxlbmd0aC80O2QrKyl7bj1lW2QqNF0saT1lW2QqNCsxXSxhPWVbZCo0KzJdLHM9ZVtkKjQrM10sZDxlLmxlbmd0aC80LTE/KGw9ZVsoZCsxKSo0XSx1PWVbKGQrMSkqNCsxXSxoPWVbKGQrMSkqNCsyXSxmPWVbKGQrMSkqNCszXSk6KGw9ZVswXSx1PWVbMV0saD1lWzJdLGY9ZVszXSk7dmFyIHA9RWYobixpLGEscyxsLHUsaCxmLCEwKTtyW2QqMl09cFswXSxyW2QqMisxXT1wWzFdfXJldHVybiByfSwiam9pbkxpbmVzIiksVFM9byhmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj1uZXcgQXJyYXkoZS5sZW5ndGgqMiksaSxhLHMsbCx1PTA7dTxlLmxlbmd0aC8yO3UrKyl7aT1lW3UqMl0sYT1lW3UqMisxXSx1PGUubGVuZ3RoLzItMT8ocz1lWyh1KzEpKjJdLGw9ZVsodSsxKSoyKzFdKToocz1lWzBdLGw9ZVsxXSk7dmFyIGg9bC1hLGY9LShzLWkpLGQ9TWF0aC5zcXJ0KGgqaCtmKmYpLHA9aC9kLG09Zi9kO25bdSo0XT1pK3AqcixuW3UqNCsxXT1hK20qcixuW3UqNCsyXT1zK3AqcixuW3UqNCszXT1sK20qcn1yZXR1cm4gbn0sImV4cGFuZFBvbHlnb24iKSxZcWU9byhmdW5jdGlvbihlLHIsbixpLGEscyl7dmFyIGw9bi1lLHU9aS1yO2wvPWEsdS89czt2YXIgaD1NYXRoLnNxcnQobCpsK3UqdSksZj1oLTE7aWYoZjwwKXJldHVybltdO3ZhciBkPWYvaDtyZXR1cm5bKG4tZSkqZCtlLChpLXIpKmQrcl19LCJpbnRlcnNlY3RMaW5lRWxsaXBzZSIpLCRwPW8oZnVuY3Rpb24oZSxyLG4saSxhLHMsbCl7cmV0dXJuIGUtPWEsci09cyxlLz1uLzIrbCxyLz1pLzIrbCxlKmUrcipyPD0xfSwiY2hlY2tJbkVsbGlwc2UiKSxQYj1vKGZ1bmN0aW9uKGUscixuLGksYSxzLGwpe3ZhciB1PVtuLWUsaS1yXSxoPVtlLWEsci1zXSxmPXVbMF0qdVswXSt1WzFdKnVbMV0sZD0yKihoWzBdKnVbMF0raFsxXSp1WzFdKSxwPWhbMF0qaFswXStoWzFdKmhbMV0tbCpsLG09ZCpkLTQqZipwO2lmKG08MClyZXR1cm5bXTt2YXIgZz0oLWQrTWF0aC5zcXJ0KG0pKS8oMipmKSx5PSgtZC1NYXRoLnNxcnQobSkpLygyKmYpLHY9TWF0aC5taW4oZyx5KSx4PU1hdGgubWF4KGcseSksYj1bXTtpZih2Pj0wJiZ2PD0xJiZiLnB1c2godikseD49MCYmeDw9MSYmYi5wdXNoKHgpLGIubGVuZ3RoPT09MClyZXR1cm5bXTt2YXIgdz1iWzBdKnVbMF0rZSxDPWJbMF0qdVsxXStyO2lmKGIubGVuZ3RoPjEpe2lmKGJbMF09PWJbMV0pcmV0dXJuW3csQ107dmFyIFQ9YlsxXSp1WzBdK2UsRT1iWzFdKnVbMV0rcjtyZXR1cm5bdyxDLFQsRV19ZWxzZSByZXR1cm5bdyxDXX0sImludGVyc2VjdExpbmVDaXJjbGUiKSxUUD1vKGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gcjw9ZSYmZTw9bnx8bjw9ZSYmZTw9cj9lOmU8PXImJnI8PW58fG48PXImJnI8PWU/cjpufSwibWlkT2ZUaHJlZSIpLEVmPW8oZnVuY3Rpb24oZSxyLG4saSxhLHMsbCx1LGgpe3ZhciBmPWUtYSxkPW4tZSxwPWwtYSxtPXItcyxnPWktcix5PXUtcyx2PXAqbS15KmYseD1kKm0tZypmLGI9eSpkLXAqZztpZihiIT09MCl7dmFyIHc9di9iLEM9eC9iLFQ9LjAwMSxFPTAtVCxBPTErVDtyZXR1cm4gRTw9dyYmdzw9QSYmRTw9QyYmQzw9QT9bZSt3KmQscit3KmddOmg/W2UrdypkLHIrdypnXTpbXX1lbHNlIHJldHVybiB2PT09MHx8eD09PTA/VFAoZSxuLGwpPT09bD9bbCx1XTpUUChlLG4sYSk9PT1hP1thLHNdOlRQKGEsbCxuKT09PW4/W24saV06W106W119LCJmaW5pdGVMaW5lc0ludGVyc2VjdCIpLFhiPW8oZnVuY3Rpb24oZSxyLG4saSxhLHMsbCx1KXt2YXIgaD1bXSxmLGQ9bmV3IEFycmF5KG4ubGVuZ3RoKSxwPSEwO3M9PW51bGwmJihwPSExKTt2YXIgbTtpZihwKXtmb3IodmFyIGc9MDtnPGQubGVuZ3RoLzI7ZysrKWRbZyoyXT1uW2cqMl0qcytpLGRbZyoyKzFdPW5bZyoyKzFdKmwrYTtpZih1PjApe3ZhciB5PVRTKGQsLXUpO209d1MoeSl9ZWxzZSBtPWR9ZWxzZSBtPW47Zm9yKHZhciB2LHgsYix3LEM9MDtDPG0ubGVuZ3RoLzI7QysrKXY9bVtDKjJdLHg9bVtDKjIrMV0sQzxtLmxlbmd0aC8yLTE/KGI9bVsoQysxKSoyXSx3PW1bKEMrMSkqMisxXSk6KGI9bVswXSx3PW1bMV0pLGY9RWYoZSxyLGksYSx2LHgsYix3KSxmLmxlbmd0aCE9PTAmJmgucHVzaChmWzBdLGZbMV0pO3JldHVybiBofSwicG9seWdvbkludGVyc2VjdExpbmUiKSxYcWU9byhmdW5jdGlvbihlLHIsbixpLGEscyxsLHUsaCl7dmFyIGY9W10sZCxwPW5ldyBBcnJheShuLmxlbmd0aCoyKTtoLmZvckVhY2goZnVuY3Rpb24oYix3KXt3PT09MD8ocFtwLmxlbmd0aC0yXT1iLnN0YXJ0WCxwW3AubGVuZ3RoLTFdPWIuc3RhcnRZKToocFt3KjQtMl09Yi5zdGFydFgscFt3KjQtMV09Yi5zdGFydFkpLHBbdyo0XT1iLnN0b3BYLHBbdyo0KzFdPWIuc3RvcFksZD1QYihlLHIsaSxhLGIuY3gsYi5jeSxiLnJhZGl1cyksZC5sZW5ndGghPT0wJiZmLnB1c2goZFswXSxkWzFdKX0pO2Zvcih2YXIgbT0wO208cC5sZW5ndGgvNDttKyspZD1FZihlLHIsaSxhLHBbbSo0XSxwW20qNCsxXSxwW20qNCsyXSxwW20qNCszXSwhMSksZC5sZW5ndGghPT0wJiZmLnB1c2goZFswXSxkWzFdKTtpZihmLmxlbmd0aD4yKXtmb3IodmFyIGc9W2ZbMF0sZlsxXV0seT1NYXRoLnBvdyhnWzBdLWUsMikrTWF0aC5wb3coZ1sxXS1yLDIpLHY9MTt2PGYubGVuZ3RoLzI7disrKXt2YXIgeD1NYXRoLnBvdyhmW3YqMl0tZSwyKStNYXRoLnBvdyhmW3YqMisxXS1yLDIpO3g8PXkmJihnWzBdPWZbdioyXSxnWzFdPWZbdioyKzFdLHk9eCl9cmV0dXJuIGd9cmV0dXJuIGZ9LCJyb3VuZFBvbHlnb25JbnRlcnNlY3RMaW5lIiksUTY9byhmdW5jdGlvbihlLHIsbil7dmFyIGk9W2VbMF0tclswXSxlWzFdLXJbMV1dLGE9TWF0aC5zcXJ0KGlbMF0qaVswXStpWzFdKmlbMV0pLHM9KGEtbikvYTtyZXR1cm4gczwwJiYocz0xZS01KSxbclswXStzKmlbMF0sclsxXStzKmlbMV1dfSwic2hvcnRlbkludGVyc2VjdGlvbiIpLGdzPW8oZnVuY3Rpb24oZSxyKXt2YXIgbj1QUChlLHIpO3JldHVybiBuPXhtZShuKSxufSwiZ2VuZXJhdGVVbml0TmdvblBvaW50c0ZpdFRvU3F1YXJlIikseG1lPW8oZnVuY3Rpb24oZSl7Zm9yKHZhciByLG4saT1lLmxlbmd0aC8yLGE9MS8wLHM9MS8wLGw9LTEvMCx1PS0xLzAsaD0wO2g8aTtoKyspcj1lWzIqaF0sbj1lWzIqaCsxXSxhPU1hdGgubWluKGEsciksbD1NYXRoLm1heChsLHIpLHM9TWF0aC5taW4ocyxuKSx1PU1hdGgubWF4KHUsbik7Zm9yKHZhciBmPTIvKGwtYSksZD0yLyh1LXMpLHA9MDtwPGk7cCsrKXI9ZVsyKnBdPWVbMipwXSpmLG49ZVsyKnArMV09ZVsyKnArMV0qZCxhPU1hdGgubWluKGEsciksbD1NYXRoLm1heChsLHIpLHM9TWF0aC5taW4ocyxuKSx1PU1hdGgubWF4KHUsbik7aWYoczwtMSlmb3IodmFyIG09MDttPGk7bSsrKW49ZVsyKm0rMV09ZVsyKm0rMV0rKC0xLXMpO3JldHVybiBlfSwiZml0UG9seWdvblRvU3F1YXJlIiksUFA9byhmdW5jdGlvbihlLHIpe3ZhciBuPTEvZSoyKk1hdGguUEksaT1lJTI9PT0wP01hdGguUEkvMituLzI6TWF0aC5QSS8yO2krPXI7Zm9yKHZhciBhPW5ldyBBcnJheShlKjIpLHMsbD0wO2w8ZTtsKyspcz1sKm4raSxhWzIqbF09TWF0aC5jb3MocyksYVsyKmwrMV09TWF0aC5zaW4oLXMpO3JldHVybiBhfSwiZ2VuZXJhdGVVbml0TmdvblBvaW50cyIpLFZwPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gTWF0aC5taW4oZS80LHIvNCw4KX0sImdldFJvdW5kUmVjdGFuZ2xlUmFkaXVzIiksYm1lPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gTWF0aC5taW4oZS8xMCxyLzEwLDgpfSwiZ2V0Um91bmRQb2x5Z29uUmFkaXVzIiksc0I9byhmdW5jdGlvbigpe3JldHVybiA4fSwiZ2V0Q3V0UmVjdGFuZ2xlQ29ybmVyTGVuZ3RoIiksanFlPW8oZnVuY3Rpb24oZSxyLG4pe3JldHVybltlLTIqcituLDIqKHItZSksZV19LCJiZXppZXJQdHNUb1F1YWRDb2VmZiIpLEJQPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm57aGVpZ2h0T2Zmc2V0Ok1hdGgubWluKDE1LC4wNSpyKSx3aWR0aE9mZnNldDpNYXRoLm1pbigxMDAsLjI1KmUpLGN0cmxQdE9mZnNldFBjdDouMDV9fSwiZ2V0QmFycmVsQ3VydmVDb25zdGFudHMiKSxLcWU9bGEoe2RhbXBpbmdGYWN0b3I6LjgscHJlY2lzaW9uOjFlLTYsaXRlcmF0aW9uczoyMDAsd2VpZ2h0Om8oZnVuY3Rpb24oZSl7cmV0dXJuIDF9LCJ3ZWlnaHQiKX0pLFFxZT17cGFnZVJhbms6byhmdW5jdGlvbihlKXtmb3IodmFyIHI9S3FlKGUpLG49ci5kYW1waW5nRmFjdG9yLGk9ci5wcmVjaXNpb24sYT1yLml0ZXJhdGlvbnMscz1yLndlaWdodCxsPXRoaXMuX3ByaXZhdGUuY3ksdT10aGlzLmJ5R3JvdXAoKSxoPXUubm9kZXMsZj11LmVkZ2VzLGQ9aC5sZW5ndGgscD1kKmQsbT1mLmxlbmd0aCxnPW5ldyBBcnJheShwKSx5PW5ldyBBcnJheShkKSx2PSgxLW4pL2QseD0wO3g8ZDt4Kyspe2Zvcih2YXIgYj0wO2I8ZDtiKyspe3ZhciB3PXgqZCtiO2dbd109MH15W3hdPTB9Zm9yKHZhciBDPTA7QzxtO0MrKyl7dmFyIFQ9ZltDXSxFPVQuZGF0YSgic291cmNlIiksQT1ULmRhdGEoInRhcmdldCIpO2lmKEUhPT1BKXt2YXIgUz1oLmluZGV4T2ZJZChFKSxfPWguaW5kZXhPZklkKEEpLEk9cyhUKSxEPV8qZCtTO2dbRF0rPUkseVtTXSs9SX19Zm9yKHZhciBrPTEvZCt2LEw9MDtMPGQ7TCsrKWlmKHlbTF09PT0wKWZvcih2YXIgUj0wO1I8ZDtSKyspe3ZhciBPPVIqZCtMO2dbT109a31lbHNlIGZvcih2YXIgTT0wO008ZDtNKyspe3ZhciBCPU0qZCtMO2dbQl09Z1tCXS95W0xdK3Z9Zm9yKHZhciBGPW5ldyBBcnJheShkKSxQPW5ldyBBcnJheShkKSx6LCQ9MDskPGQ7JCsrKUZbJF09MTtmb3IodmFyIEg9MDtIPGE7SCsrKXtmb3IodmFyIFE9MDtRPGQ7USsrKVBbUV09MDtmb3IodmFyIGo9MDtqPGQ7aisrKWZvcih2YXIgaWU9MDtpZTxkO2llKyspe3ZhciBuZT1qKmQraWU7UFtqXSs9Z1tuZV0qRltpZV19TXFlKFApLHo9RixGPVAsUD16O2Zvcih2YXIgbGU9MCxoZT0wO2hlPGQ7aGUrKyl7dmFyIEs9eltoZV0tRltoZV07bGUrPUsqS31pZihsZTxpKWJyZWFrfXZhciBYPXtyYW5rOm8oZnVuY3Rpb24oSil7cmV0dXJuIEo9bC5jb2xsZWN0aW9uKEopWzBdLEZbaC5pbmRleE9mKEopXX0sInJhbmsiKX07cmV0dXJuIFh9LCJwYWdlUmFuayIpfSwkcGU9bGEoe3Jvb3Q6bnVsbCx3ZWlnaHQ6byhmdW5jdGlvbihlKXtyZXR1cm4gMX0sIndlaWdodCIpLGRpcmVjdGVkOiExLGFscGhhOjB9KSxxMT17ZGVncmVlQ2VudHJhbGl0eU5vcm1hbGl6ZWQ6byhmdW5jdGlvbihlKXtlPSRwZShlKTt2YXIgcj10aGlzLmN5KCksbj10aGlzLm5vZGVzKCksaT1uLmxlbmd0aDtpZihlLmRpcmVjdGVkKXtmb3IodmFyIGY9e30sZD17fSxwPTAsbT0wLGc9MDtnPGk7ZysrKXt2YXIgeT1uW2ddLHY9eS5pZCgpO2Uucm9vdD15O3ZhciB4PXRoaXMuZGVncmVlQ2VudHJhbGl0eShlKTtwPHguaW5kZWdyZWUmJihwPXguaW5kZWdyZWUpLG08eC5vdXRkZWdyZWUmJihtPXgub3V0ZGVncmVlKSxmW3ZdPXguaW5kZWdyZWUsZFt2XT14Lm91dGRlZ3JlZX1yZXR1cm57aW5kZWdyZWU6byhmdW5jdGlvbih3KXtyZXR1cm4gcD09MD8wOihadCh3KSYmKHc9ci5maWx0ZXIodykpLGZbdy5pZCgpXS9wKX0sImluZGVncmVlIiksb3V0ZGVncmVlOm8oZnVuY3Rpb24odyl7cmV0dXJuIG09PT0wPzA6KFp0KHcpJiYodz1yLmZpbHRlcih3KSksZFt3LmlkKCldL20pfSwib3V0ZGVncmVlIil9fWVsc2V7Zm9yKHZhciBhPXt9LHM9MCxsPTA7bDxpO2wrKyl7dmFyIHU9bltsXTtlLnJvb3Q9dTt2YXIgaD10aGlzLmRlZ3JlZUNlbnRyYWxpdHkoZSk7czxoLmRlZ3JlZSYmKHM9aC5kZWdyZWUpLGFbdS5pZCgpXT1oLmRlZ3JlZX1yZXR1cm57ZGVncmVlOm8oZnVuY3Rpb24odyl7cmV0dXJuIHM9PT0wPzA6KFp0KHcpJiYodz1yLmZpbHRlcih3KSksYVt3LmlkKCldL3MpfSwiZGVncmVlIil9fX0sImRlZ3JlZUNlbnRyYWxpdHlOb3JtYWxpemVkIiksZGVncmVlQ2VudHJhbGl0eTpvKGZ1bmN0aW9uKGUpe2U9JHBlKGUpO3ZhciByPXRoaXMuY3koKSxuPXRoaXMsaT1lLGE9aS5yb290LHM9aS53ZWlnaHQsbD1pLmRpcmVjdGVkLHU9aS5hbHBoYTtpZihhPXIuY29sbGVjdGlvbihhKVswXSxsKXtmb3IodmFyIG09YS5jb25uZWN0ZWRFZGdlcygpLGc9bS5maWx0ZXIoZnVuY3Rpb24oRSl7cmV0dXJuIEUudGFyZ2V0KCkuc2FtZShhKSYmbi5oYXMoRSl9KSx5PW0uZmlsdGVyKGZ1bmN0aW9uKEUpe3JldHVybiBFLnNvdXJjZSgpLnNhbWUoYSkmJm4uaGFzKEUpfSksdj1nLmxlbmd0aCx4PXkubGVuZ3RoLGI9MCx3PTAsQz0wO0M8Zy5sZW5ndGg7QysrKWIrPXMoZ1tDXSk7Zm9yKHZhciBUPTA7VDx5Lmxlbmd0aDtUKyspdys9cyh5W1RdKTtyZXR1cm57aW5kZWdyZWU6TWF0aC5wb3codiwxLXUpKk1hdGgucG93KGIsdSksb3V0ZGVncmVlOk1hdGgucG93KHgsMS11KSpNYXRoLnBvdyh3LHUpfX1lbHNle2Zvcih2YXIgaD1hLmNvbm5lY3RlZEVkZ2VzKCkuaW50ZXJzZWN0aW9uKG4pLGY9aC5sZW5ndGgsZD0wLHA9MDtwPGgubGVuZ3RoO3ArKylkKz1zKGhbcF0pO3JldHVybntkZWdyZWU6TWF0aC5wb3coZiwxLXUpKk1hdGgucG93KGQsdSl9fX0sImRlZ3JlZUNlbnRyYWxpdHkiKX07cTEuZGM9cTEuZGVncmVlQ2VudHJhbGl0eTtxMS5kY249cTEuZGVncmVlQ2VudHJhbGl0eU5vcm1hbGlzZWQ9cTEuZGVncmVlQ2VudHJhbGl0eU5vcm1hbGl6ZWQ7enBlPWxhKHtoYXJtb25pYzohMCx3ZWlnaHQ6byhmdW5jdGlvbigpe3JldHVybiAxfSwid2VpZ2h0IiksZGlyZWN0ZWQ6ITEscm9vdDpudWxsfSksWTE9e2Nsb3NlbmVzc0NlbnRyYWxpdHlOb3JtYWxpemVkOm8oZnVuY3Rpb24oZSl7Zm9yKHZhciByPXpwZShlKSxuPXIuaGFybW9uaWMsaT1yLndlaWdodCxhPXIuZGlyZWN0ZWQscz10aGlzLmN5KCksbD17fSx1PTAsaD10aGlzLm5vZGVzKCksZj10aGlzLmZsb3lkV2Fyc2hhbGwoe3dlaWdodDppLGRpcmVjdGVkOmF9KSxkPTA7ZDxoLmxlbmd0aDtkKyspe2Zvcih2YXIgcD0wLG09aFtkXSxnPTA7ZzxoLmxlbmd0aDtnKyspaWYoZCE9PWcpe3ZhciB5PWYuZGlzdGFuY2UobSxoW2ddKTtuP3ArPTEveTpwKz15fW58fChwPTEvcCksdTxwJiYodT1wKSxsW20uaWQoKV09cH1yZXR1cm57Y2xvc2VuZXNzOm8oZnVuY3Rpb24oeCl7cmV0dXJuIHU9PTA/MDooWnQoeCk/eD1zLmZpbHRlcih4KVswXS5pZCgpOng9eC5pZCgpLGxbeF0vdSl9LCJjbG9zZW5lc3MiKX19LCJjbG9zZW5lc3NDZW50cmFsaXR5Tm9ybWFsaXplZCIpLGNsb3NlbmVzc0NlbnRyYWxpdHk6byhmdW5jdGlvbihlKXt2YXIgcj16cGUoZSksbj1yLnJvb3QsaT1yLndlaWdodCxhPXIuZGlyZWN0ZWQscz1yLmhhcm1vbmljO249dGhpcy5maWx0ZXIobilbMF07Zm9yKHZhciBsPXRoaXMuZGlqa3N0cmEoe3Jvb3Q6bix3ZWlnaHQ6aSxkaXJlY3RlZDphfSksdT0wLGg9dGhpcy5ub2RlcygpLGY9MDtmPGgubGVuZ3RoO2YrKyl7dmFyIGQ9aFtmXTtpZighZC5zYW1lKG4pKXt2YXIgcD1sLmRpc3RhbmNlVG8oZCk7cz91Kz0xL3A6dSs9cH19cmV0dXJuIHM/dToxL3V9LCJjbG9zZW5lc3NDZW50cmFsaXR5Iil9O1kxLmNjPVkxLmNsb3NlbmVzc0NlbnRyYWxpdHk7WTEuY2NuPVkxLmNsb3NlbmVzc0NlbnRyYWxpdHlOb3JtYWxpc2VkPVkxLmNsb3NlbmVzc0NlbnRyYWxpdHlOb3JtYWxpemVkO1pxZT1sYSh7d2VpZ2h0Om51bGwsZGlyZWN0ZWQ6ITF9KSxGUD17YmV0d2Vlbm5lc3NDZW50cmFsaXR5Om8oZnVuY3Rpb24oZSl7Zm9yKHZhciByPVpxZShlKSxuPXIuZGlyZWN0ZWQsaT1yLndlaWdodCxhPWkhPW51bGwscz10aGlzLmN5KCksbD10aGlzLm5vZGVzKCksdT17fSxoPXt9LGY9MCxkPXtzZXQ6byhmdW5jdGlvbih3LEMpe2hbd109QyxDPmYmJihmPUMpfSwic2V0IiksZ2V0Om8oZnVuY3Rpb24odyl7cmV0dXJuIGhbd119LCJnZXQiKX0scD0wO3A8bC5sZW5ndGg7cCsrKXt2YXIgbT1sW3BdLGc9bS5pZCgpO24/dVtnXT1tLm91dGdvZXJzKCkubm9kZXMoKTp1W2ddPW0ub3Blbk5laWdoYm9yaG9vZCgpLm5vZGVzKCksZC5zZXQoZywwKX1mb3IodmFyIHk9byhmdW5jdGlvbih3KXtmb3IodmFyIEM9bFt3XS5pZCgpLFQ9W10sRT17fSxBPXt9LFM9e30sXz1uZXcgaTQoZnVuY3Rpb24oaWUsbmUpe3JldHVybiBTW2llXS1TW25lXX0pLEk9MDtJPGwubGVuZ3RoO0krKyl7dmFyIEQ9bFtJXS5pZCgpO0VbRF09W10sQVtEXT0wLFNbRF09MS8wfWZvcihBW0NdPTEsU1tDXT0wLF8ucHVzaChDKTshXy5lbXB0eSgpOyl7dmFyIGs9Xy5wb3AoKTtpZihULnB1c2goayksYSlmb3IodmFyIEw9MDtMPHVba10ubGVuZ3RoO0wrKyl7dmFyIFI9dVtrXVtMXSxPPXMuZ2V0RWxlbWVudEJ5SWQoayksTT12b2lkIDA7Ty5lZGdlc1RvKFIpLmxlbmd0aD4wP009Ty5lZGdlc1RvKFIpWzBdOk09Ui5lZGdlc1RvKE8pWzBdO3ZhciBCPWkoTSk7Uj1SLmlkKCksU1tSXT5TW2tdK0ImJihTW1JdPVNba10rQixfLm5vZGVzLmluZGV4T2YoUik8MD9fLnB1c2goUik6Xy51cGRhdGVJdGVtKFIpLEFbUl09MCxFW1JdPVtdKSxTW1JdPT1TW2tdK0ImJihBW1JdPUFbUl0rQVtrXSxFW1JdLnB1c2goaykpfWVsc2UgZm9yKHZhciBGPTA7Rjx1W2tdLmxlbmd0aDtGKyspe3ZhciBQPXVba11bRl0uaWQoKTtTW1BdPT0xLzAmJihfLnB1c2goUCksU1tQXT1TW2tdKzEpLFNbUF09PVNba10rMSYmKEFbUF09QVtQXStBW2tdLEVbUF0ucHVzaChrKSl9fWZvcih2YXIgej17fSwkPTA7JDxsLmxlbmd0aDskKyspeltsWyRdLmlkKCldPTA7Zm9yKDtULmxlbmd0aD4wOyl7Zm9yKHZhciBIPVQucG9wKCksUT0wO1E8RVtIXS5sZW5ndGg7USsrKXt2YXIgaj1FW0hdW1FdO3pbal09eltqXStBW2pdL0FbSF0qKDEreltIXSl9SCE9bFt3XS5pZCgpJiZkLnNldChILGQuZ2V0KEgpK3pbSF0pfX0sIl9sb29wIiksdj0wO3Y8bC5sZW5ndGg7disrKXkodik7dmFyIHg9e2JldHdlZW5uZXNzOm8oZnVuY3Rpb24odyl7dmFyIEM9cy5jb2xsZWN0aW9uKHcpLmlkKCk7cmV0dXJuIGQuZ2V0KEMpfSwiYmV0d2Vlbm5lc3MiKSxiZXR3ZWVubmVzc05vcm1hbGl6ZWQ6byhmdW5jdGlvbih3KXtpZihmPT0wKXJldHVybiAwO3ZhciBDPXMuY29sbGVjdGlvbih3KS5pZCgpO3JldHVybiBkLmdldChDKS9mfSwiYmV0d2Vlbm5lc3NOb3JtYWxpemVkIil9O3JldHVybiB4LmJldHdlZW5uZXNzTm9ybWFsaXNlZD14LmJldHdlZW5uZXNzTm9ybWFsaXplZCx4fSwiYmV0d2Vlbm5lc3NDZW50cmFsaXR5Iil9O0ZQLmJjPUZQLmJldHdlZW5uZXNzQ2VudHJhbGl0eTtKcWU9bGEoe2V4cGFuZEZhY3RvcjoyLGluZmxhdGVGYWN0b3I6MixtdWx0RmFjdG9yOjEsbWF4SXRlcmF0aW9uczoyMCxhdHRyaWJ1dGVzOltmdW5jdGlvbih0KXtyZXR1cm4gMX1dfSksZVllPW8oZnVuY3Rpb24oZSl7cmV0dXJuIEpxZShlKX0sInNldE9wdGlvbnMiKSx0WWU9byhmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj0wLGk9MDtpPHIubGVuZ3RoO2krKyluKz1yW2ldKGUpO3JldHVybiBufSwiZ2V0U2ltaWxhcml0eSIpLHJZZT1vKGZ1bmN0aW9uKGUscixuKXtmb3IodmFyIGk9MDtpPHI7aSsrKWVbaSpyK2ldPW59LCJhZGRMb29wcyIpLHdtZT1vKGZ1bmN0aW9uKGUscil7Zm9yKHZhciBuLGk9MDtpPHI7aSsrKXtuPTA7Zm9yKHZhciBhPTA7YTxyO2ErKyluKz1lW2EqcitpXTtmb3IodmFyIHM9MDtzPHI7cysrKWVbcypyK2ldPWVbcypyK2ldL259fSwibm9ybWFsaXplIiksblllPW8oZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaT1uZXcgQXJyYXkobipuKSxhPTA7YTxuO2ErKyl7Zm9yKHZhciBzPTA7czxuO3MrKylpW2EqbitzXT0wO2Zvcih2YXIgbD0wO2w8bjtsKyspZm9yKHZhciB1PTA7dTxuO3UrKylpW2Eqbit1XSs9ZVthKm4rbF0qcltsKm4rdV19cmV0dXJuIGl9LCJtbXVsdCIpLGlZZT1vKGZ1bmN0aW9uKGUscixuKXtmb3IodmFyIGk9ZS5zbGljZSgwKSxhPTE7YTxuO2ErKyllPW5ZZShlLGkscik7cmV0dXJuIGV9LCJleHBhbmQiKSxhWWU9byhmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPW5ldyBBcnJheShyKnIpLGE9MDthPHIqcjthKyspaVthXT1NYXRoLnBvdyhlW2FdLG4pO3JldHVybiB3bWUoaSxyKSxpfSwiaW5mbGF0ZSIpLHNZZT1vKGZ1bmN0aW9uKGUscixuLGkpe2Zvcih2YXIgYT0wO2E8bjthKyspe3ZhciBzPU1hdGgucm91bmQoZVthXSpNYXRoLnBvdygxMCxpKSkvTWF0aC5wb3coMTAsaSksbD1NYXRoLnJvdW5kKHJbYV0qTWF0aC5wb3coMTAsaSkpL01hdGgucG93KDEwLGkpO2lmKHMhPT1sKXJldHVybiExfXJldHVybiEwfSwiaGFzQ29udmVyZ2VkIiksb1llPW8oZnVuY3Rpb24oZSxyLG4saSl7Zm9yKHZhciBhPVtdLHM9MDtzPHI7cysrKXtmb3IodmFyIGw9W10sdT0wO3U8cjt1KyspTWF0aC5yb3VuZChlW3Mqcit1XSoxZTMpLzFlMz4wJiZsLnB1c2goblt1XSk7bC5sZW5ndGghPT0wJiZhLnB1c2goaS5jb2xsZWN0aW9uKGwpKX1yZXR1cm4gYX0sImFzc2lnbiIpLGxZZT1vKGZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspaWYoIXJbbl18fGVbbl0uaWQoKSE9PXJbbl0uaWQoKSlyZXR1cm4hMTtyZXR1cm4hMH0sImlzRHVwbGljYXRlIiksY1llPW8oZnVuY3Rpb24oZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspZm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspciE9biYmbFllKGVbcl0sZVtuXSkmJmUuc3BsaWNlKG4sMSk7cmV0dXJuIGV9LCJyZW1vdmVEdXBsaWNhdGVzIiksR3BlPW8oZnVuY3Rpb24oZSl7Zm9yKHZhciByPXRoaXMubm9kZXMoKSxuPXRoaXMuZWRnZXMoKSxpPXRoaXMuY3koKSxhPWVZZShlKSxzPXt9LGw9MDtsPHIubGVuZ3RoO2wrKylzW3JbbF0uaWQoKV09bDtmb3IodmFyIHU9ci5sZW5ndGgsaD11KnUsZj1uZXcgQXJyYXkoaCksZCxwPTA7cDxoO3ArKylmW3BdPTA7Zm9yKHZhciBtPTA7bTxuLmxlbmd0aDttKyspe3ZhciBnPW5bbV0seT1zW2cuc291cmNlKCkuaWQoKV0sdj1zW2cudGFyZ2V0KCkuaWQoKV0seD10WWUoZyxhLmF0dHJpYnV0ZXMpO2ZbeSp1K3ZdKz14LGZbdip1K3ldKz14fXJZZShmLHUsYS5tdWx0RmFjdG9yKSx3bWUoZix1KTtmb3IodmFyIGI9ITAsdz0wO2ImJnc8YS5tYXhJdGVyYXRpb25zOyliPSExLGQ9aVllKGYsdSxhLmV4cGFuZEZhY3RvciksZj1hWWUoZCx1LGEuaW5mbGF0ZUZhY3Rvciksc1llKGYsZCxoLDQpfHwoYj0hMCksdysrO3ZhciBDPW9ZZShmLHUscixpKTtyZXR1cm4gQz1jWWUoQyksQ30sIm1hcmtvdkNsdXN0ZXJpbmciKSx1WWU9e21hcmtvdkNsdXN0ZXJpbmc6R3BlLG1jbDpHcGV9LGhZZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBlfSwiaWRlbnRpdHkiKSxUbWU9byhmdW5jdGlvbihlLHIpe3JldHVybiBNYXRoLmFicyhyLWUpfSwiYWJzRGlmZiIpLFZwZT1vKGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gZStUbWUocixuKX0sImFkZEFic0RpZmYiKSxVcGU9byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIGUrTWF0aC5wb3cobi1yLDIpfSwiYWRkU3F1YXJlZERpZmYiKSxmWWU9byhmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5zcXJ0KGUpfSwic3FydCIpLGRZZT1vKGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gTWF0aC5tYXgoZSxUbWUocixuKSl9LCJtYXhBYnNEaWZmIiksX2I9byhmdW5jdGlvbihlLHIsbixpLGEpe2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoPjUmJmFyZ3VtZW50c1s1XSE9PXZvaWQgMD9hcmd1bWVudHNbNV06aFllLGw9aSx1LGgsZj0wO2Y8ZTtmKyspdT1yKGYpLGg9bihmKSxsPWEobCx1LGgpO3JldHVybiBzKGwpfSwiZ2V0RGlzdGFuY2UiKSxRMT17ZXVjbGlkZWFuOm8oZnVuY3Rpb24oZSxyLG4pe3JldHVybiBlPj0yP19iKGUscixuLDAsVXBlLGZZZSk6X2IoZSxyLG4sMCxWcGUpfSwiZXVjbGlkZWFuIiksc3F1YXJlZEV1Y2xpZGVhbjpvKGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gX2IoZSxyLG4sMCxVcGUpfSwic3F1YXJlZEV1Y2xpZGVhbiIpLG1hbmhhdHRhbjpvKGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gX2IoZSxyLG4sMCxWcGUpfSwibWFuaGF0dGFuIiksbWF4Om8oZnVuY3Rpb24oZSxyLG4pe3JldHVybiBfYihlLHIsbiwtMS8wLGRZZSl9LCJtYXgiKX07UTFbInNxdWFyZWQtZXVjbGlkZWFuIl09UTEuc3F1YXJlZEV1Y2xpZGVhbjtRMS5zcXVhcmVkZXVjbGlkZWFuPVExLnNxdWFyZWRFdWNsaWRlYW47byhJUywiY2x1c3RlcmluZ0Rpc3RhbmNlIik7cFllPWxhKHtrOjIsbToyLHNlbnNpdGl2aXR5VGhyZXNob2xkOjFlLTQsZGlzdGFuY2U6ImV1Y2xpZGVhbiIsbWF4SXRlcmF0aW9uczoxMCxhdHRyaWJ1dGVzOltdLHRlc3RNb2RlOiExLHRlc3RDZW50cm9pZHM6bnVsbH0pLG9CPW8oZnVuY3Rpb24oZSl7cmV0dXJuIHBZZShlKX0sInNldE9wdGlvbnMiKSxrUz1vKGZ1bmN0aW9uKGUscixuLGksYSl7dmFyIHM9YSE9PSJrTWVkb2lkcyIsbD1zP2Z1bmN0aW9uKGQpe3JldHVybiBuW2RdfTpmdW5jdGlvbihkKXtyZXR1cm4gaVtkXShuKX0sdT1vKGZ1bmN0aW9uKHApe3JldHVybiBpW3BdKHIpfSwiZ2V0USIpLGg9bixmPXI7cmV0dXJuIElTKGUsaS5sZW5ndGgsbCx1LGgsZil9LCJnZXREaXN0Iiksa1A9byhmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPW4ubGVuZ3RoLGE9bmV3IEFycmF5KGkpLHM9bmV3IEFycmF5KGkpLGw9bmV3IEFycmF5KHIpLHU9bnVsbCxoPTA7aDxpO2grKylhW2hdPWUubWluKG5baF0pLnZhbHVlLHNbaF09ZS5tYXgobltoXSkudmFsdWU7Zm9yKHZhciBmPTA7ZjxyO2YrKyl7dT1bXTtmb3IodmFyIGQ9MDtkPGk7ZCsrKXVbZF09TWF0aC5yYW5kb20oKSooc1tkXS1hW2RdKSthW2RdO2xbZl09dX1yZXR1cm4gbH0sInJhbmRvbUNlbnRyb2lkcyIpLGttZT1vKGZ1bmN0aW9uKGUscixuLGksYSl7Zm9yKHZhciBzPTEvMCxsPTAsdT0wO3U8ci5sZW5ndGg7dSsrKXt2YXIgaD1rUyhuLGUsclt1XSxpLGEpO2g8cyYmKHM9aCxsPXUpfXJldHVybiBsfSwiY2xhc3NpZnkiKSxFbWU9byhmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPVtdLGE9bnVsbCxzPTA7czxyLmxlbmd0aDtzKyspYT1yW3NdLG5bYS5pZCgpXT09PWUmJmkucHVzaChhKTtyZXR1cm4gaX0sImJ1aWxkQ2x1c3RlciIpLG1ZZT1vKGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gTWF0aC5hYnMoci1lKTw9bn0sImhhdmVWYWx1ZXNDb252ZXJnZWQiKSxnWWU9byhmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspZm9yKHZhciBhPTA7YTxlW2ldLmxlbmd0aDthKyspe3ZhciBzPU1hdGguYWJzKGVbaV1bYV0tcltpXVthXSk7aWYocz5uKXJldHVybiExfXJldHVybiEwfSwiaGF2ZU1hdHJpY2VzQ29udmVyZ2VkIikseVllPW8oZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaT0wO2k8bjtpKyspaWYoZT09PXJbaV0pcmV0dXJuITA7cmV0dXJuITF9LCJzZWVuQmVmb3JlIiksSHBlPW8oZnVuY3Rpb24oZSxyKXt2YXIgbj1uZXcgQXJyYXkocik7aWYoZS5sZW5ndGg8NTApZm9yKHZhciBpPTA7aTxyO2krKyl7Zm9yKHZhciBhPWVbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmUubGVuZ3RoKV07eVllKGEsbixpKTspYT1lW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSplLmxlbmd0aCldO25baV09YX1lbHNlIGZvcih2YXIgcz0wO3M8cjtzKyspbltzXT1lW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSplLmxlbmd0aCldO3JldHVybiBufSwicmFuZG9tTWVkb2lkcyIpLFdwZT1vKGZ1bmN0aW9uKGUscixuKXtmb3IodmFyIGk9MCxhPTA7YTxyLmxlbmd0aDthKyspaSs9a1MoIm1hbmhhdHRhbiIsclthXSxlLG4sImtNZWRvaWRzIik7cmV0dXJuIGl9LCJmaW5kQ29zdCIpLHZZZT1vKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuY3koKSxuPXRoaXMubm9kZXMoKSxpPW51bGwsYT1vQihlKSxzPW5ldyBBcnJheShhLmspLGw9e30sdTthLnRlc3RNb2RlP3R5cGVvZiBhLnRlc3RDZW50cm9pZHM9PSJudW1iZXIiPyhhLnRlc3RDZW50cm9pZHMsdT1rUChuLGEuayxhLmF0dHJpYnV0ZXMpKTpXaShhLnRlc3RDZW50cm9pZHMpPT09Im9iamVjdCI/dT1hLnRlc3RDZW50cm9pZHM6dT1rUChuLGEuayxhLmF0dHJpYnV0ZXMpOnU9a1AobixhLmssYS5hdHRyaWJ1dGVzKTtmb3IodmFyIGg9ITAsZj0wO2gmJmY8YS5tYXhJdGVyYXRpb25zOyl7Zm9yKHZhciBkPTA7ZDxuLmxlbmd0aDtkKyspaT1uW2RdLGxbaS5pZCgpXT1rbWUoaSx1LGEuZGlzdGFuY2UsYS5hdHRyaWJ1dGVzLCJrTWVhbnMiKTtoPSExO2Zvcih2YXIgcD0wO3A8YS5rO3ArKyl7dmFyIG09RW1lKHAsbixsKTtpZihtLmxlbmd0aCE9PTApe2Zvcih2YXIgZz1hLmF0dHJpYnV0ZXMubGVuZ3RoLHk9dVtwXSx2PW5ldyBBcnJheShnKSx4PW5ldyBBcnJheShnKSxiPTA7YjxnO2IrKyl7eFtiXT0wO2Zvcih2YXIgdz0wO3c8bS5sZW5ndGg7dysrKWk9bVt3XSx4W2JdKz1hLmF0dHJpYnV0ZXNbYl0oaSk7dltiXT14W2JdL20ubGVuZ3RoLG1ZZSh2W2JdLHlbYl0sYS5zZW5zaXRpdml0eVRocmVzaG9sZCl8fChoPSEwKX11W3BdPXYsc1twXT1yLmNvbGxlY3Rpb24obSl9fWYrK31yZXR1cm4gc30sImtNZWFucyIpLHhZZT1vKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuY3koKSxuPXRoaXMubm9kZXMoKSxpPW51bGwsYT1vQihlKSxzPW5ldyBBcnJheShhLmspLGwsdT17fSxoLGY9bmV3IEFycmF5KGEuayk7YS50ZXN0TW9kZT90eXBlb2YgYS50ZXN0Q2VudHJvaWRzPT0ibnVtYmVyInx8KFdpKGEudGVzdENlbnRyb2lkcyk9PT0ib2JqZWN0Ij9sPWEudGVzdENlbnRyb2lkczpsPUhwZShuLGEuaykpOmw9SHBlKG4sYS5rKTtmb3IodmFyIGQ9ITAscD0wO2QmJnA8YS5tYXhJdGVyYXRpb25zOyl7Zm9yKHZhciBtPTA7bTxuLmxlbmd0aDttKyspaT1uW21dLHVbaS5pZCgpXT1rbWUoaSxsLGEuZGlzdGFuY2UsYS5hdHRyaWJ1dGVzLCJrTWVkb2lkcyIpO2Q9ITE7Zm9yKHZhciBnPTA7ZzxsLmxlbmd0aDtnKyspe3ZhciB5PUVtZShnLG4sdSk7aWYoeS5sZW5ndGghPT0wKXtmW2ddPVdwZShsW2ddLHksYS5hdHRyaWJ1dGVzKTtmb3IodmFyIHY9MDt2PHkubGVuZ3RoO3YrKyloPVdwZSh5W3ZdLHksYS5hdHRyaWJ1dGVzKSxoPGZbZ10mJihmW2ddPWgsbFtnXT15W3ZdLGQ9ITApO3NbZ109ci5jb2xsZWN0aW9uKHkpfX1wKyt9cmV0dXJuIHN9LCJrTWVkb2lkcyIpLGJZZT1vKGZ1bmN0aW9uKGUscixuLGksYSl7Zm9yKHZhciBzLGwsdT0wO3U8ci5sZW5ndGg7dSsrKWZvcih2YXIgaD0wO2g8ZS5sZW5ndGg7aCsrKWlbdV1baF09TWF0aC5wb3coblt1XVtoXSxhLm0pO2Zvcih2YXIgZj0wO2Y8ZS5sZW5ndGg7ZisrKWZvcih2YXIgZD0wO2Q8YS5hdHRyaWJ1dGVzLmxlbmd0aDtkKyspe3M9MCxsPTA7Zm9yKHZhciBwPTA7cDxyLmxlbmd0aDtwKyspcys9aVtwXVtmXSphLmF0dHJpYnV0ZXNbZF0ocltwXSksbCs9aVtwXVtmXTtlW2ZdW2RdPXMvbH19LCJ1cGRhdGVDZW50cm9pZHMiKSx3WWU9byhmdW5jdGlvbihlLHIsbixpLGEpe2Zvcih2YXIgcz0wO3M8ZS5sZW5ndGg7cysrKXJbc109ZVtzXS5zbGljZSgpO2Zvcih2YXIgbCx1LGgsZj0yLyhhLm0tMSksZD0wO2Q8bi5sZW5ndGg7ZCsrKWZvcih2YXIgcD0wO3A8aS5sZW5ndGg7cCsrKXtsPTA7Zm9yKHZhciBtPTA7bTxuLmxlbmd0aDttKyspdT1rUyhhLmRpc3RhbmNlLGlbcF0sbltkXSxhLmF0dHJpYnV0ZXMsImNtZWFucyIpLGg9a1MoYS5kaXN0YW5jZSxpW3BdLG5bbV0sYS5hdHRyaWJ1dGVzLCJjbWVhbnMiKSxsKz1NYXRoLnBvdyh1L2gsZik7ZVtwXVtkXT0xL2x9fSwidXBkYXRlTWVtYmVyc2hpcCIpLFRZZT1vKGZ1bmN0aW9uKGUscixuLGkpe2Zvcih2YXIgYT1uZXcgQXJyYXkobi5rKSxzPTA7czxhLmxlbmd0aDtzKyspYVtzXT1bXTtmb3IodmFyIGwsdSxoPTA7aDxyLmxlbmd0aDtoKyspe2w9LTEvMCx1PS0xO2Zvcih2YXIgZj0wO2Y8clswXS5sZW5ndGg7ZisrKXJbaF1bZl0+bCYmKGw9cltoXVtmXSx1PWYpO2FbdV0ucHVzaChlW2hdKX1mb3IodmFyIGQ9MDtkPGEubGVuZ3RoO2QrKylhW2RdPWkuY29sbGVjdGlvbihhW2RdKTtyZXR1cm4gYX0sImFzc2lnbiIpLHFwZT1vKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuY3koKSxuPXRoaXMubm9kZXMoKSxpPW9CKGUpLGEscyxsLHUsaDt1PW5ldyBBcnJheShuLmxlbmd0aCk7Zm9yKHZhciBmPTA7ZjxuLmxlbmd0aDtmKyspdVtmXT1uZXcgQXJyYXkoaS5rKTtsPW5ldyBBcnJheShuLmxlbmd0aCk7Zm9yKHZhciBkPTA7ZDxuLmxlbmd0aDtkKyspbFtkXT1uZXcgQXJyYXkoaS5rKTtmb3IodmFyIHA9MDtwPG4ubGVuZ3RoO3ArKyl7Zm9yKHZhciBtPTAsZz0wO2c8aS5rO2crKylsW3BdW2ddPU1hdGgucmFuZG9tKCksbSs9bFtwXVtnXTtmb3IodmFyIHk9MDt5PGkuazt5KyspbFtwXVt5XT1sW3BdW3ldL219cz1uZXcgQXJyYXkoaS5rKTtmb3IodmFyIHY9MDt2PGkuazt2Kyspc1t2XT1uZXcgQXJyYXkoaS5hdHRyaWJ1dGVzLmxlbmd0aCk7aD1uZXcgQXJyYXkobi5sZW5ndGgpO2Zvcih2YXIgeD0wO3g8bi5sZW5ndGg7eCsrKWhbeF09bmV3IEFycmF5KGkuayk7Zm9yKHZhciBiPSEwLHc9MDtiJiZ3PGkubWF4SXRlcmF0aW9uczspYj0hMSxiWWUocyxuLGwsaCxpKSx3WWUobCx1LHMsbixpKSxnWWUobCx1LGkuc2Vuc2l0aXZpdHlUaHJlc2hvbGQpfHwoYj0hMCksdysrO3JldHVybiBhPVRZZShuLGwsaSxyKSx7Y2x1c3RlcnM6YSxkZWdyZWVPZk1lbWJlcnNoaXA6bH19LCJmdXp6eUNNZWFucyIpLGtZZT17a01lYW5zOnZZZSxrTWVkb2lkczp4WWUsZnV6enlDTWVhbnM6cXBlLGZjbTpxcGV9LEVZZT1sYSh7ZGlzdGFuY2U6ImV1Y2xpZGVhbiIsbGlua2FnZToibWluIixtb2RlOiJ0aHJlc2hvbGQiLHRocmVzaG9sZDoxLzAsYWRkRGVuZHJvZ3JhbTohMSxkZW5kcm9ncmFtRGVwdGg6MCxhdHRyaWJ1dGVzOltdfSksU1llPXtzaW5nbGU6Im1pbiIsY29tcGxldGU6Im1heCJ9LENZZT1vKGZ1bmN0aW9uKGUpe3ZhciByPUVZZShlKSxuPVNZZVtyLmxpbmthZ2VdO3JldHVybiBuIT1udWxsJiYoci5saW5rYWdlPW4pLHJ9LCJzZXRPcHRpb25zIiksWXBlPW8oZnVuY3Rpb24oZSxyLG4saSxhKXtmb3IodmFyIHM9MCxsPTEvMCx1LGg9YS5hdHRyaWJ1dGVzLGY9byhmdW5jdGlvbihfLEkpe3JldHVybiBJUyhhLmRpc3RhbmNlLGgubGVuZ3RoLGZ1bmN0aW9uKEQpe3JldHVybiBoW0RdKF8pfSxmdW5jdGlvbihEKXtyZXR1cm4gaFtEXShJKX0sXyxJKX0sImdldERpc3QiKSxkPTA7ZDxlLmxlbmd0aDtkKyspe3ZhciBwPWVbZF0ua2V5LG09bltwXVtpW3BdXTttPGwmJihzPXAsbD1tKX1pZihhLm1vZGU9PT0idGhyZXNob2xkIiYmbD49YS50aHJlc2hvbGR8fGEubW9kZT09PSJkZW5kcm9ncmFtIiYmZS5sZW5ndGg9PT0xKXJldHVybiExO3ZhciBnPXJbc10seT1yW2lbc11dLHY7YS5tb2RlPT09ImRlbmRyb2dyYW0iP3Y9e2xlZnQ6ZyxyaWdodDp5LGtleTpnLmtleX06dj17dmFsdWU6Zy52YWx1ZS5jb25jYXQoeS52YWx1ZSksa2V5Omcua2V5fSxlW2cuaW5kZXhdPXYsZS5zcGxpY2UoeS5pbmRleCwxKSxyW2cua2V5XT12O2Zvcih2YXIgeD0wO3g8ZS5sZW5ndGg7eCsrKXt2YXIgYj1lW3hdO2cua2V5PT09Yi5rZXk/dT0xLzA6YS5saW5rYWdlPT09Im1pbiI/KHU9bltnLmtleV1bYi5rZXldLG5bZy5rZXldW2Iua2V5XT5uW3kua2V5XVtiLmtleV0mJih1PW5beS5rZXldW2Iua2V5XSkpOmEubGlua2FnZT09PSJtYXgiPyh1PW5bZy5rZXldW2Iua2V5XSxuW2cua2V5XVtiLmtleV08blt5LmtleV1bYi5rZXldJiYodT1uW3kua2V5XVtiLmtleV0pKTphLmxpbmthZ2U9PT0ibWVhbiI/dT0obltnLmtleV1bYi5rZXldKmcuc2l6ZStuW3kua2V5XVtiLmtleV0qeS5zaXplKS8oZy5zaXplK3kuc2l6ZSk6YS5tb2RlPT09ImRlbmRyb2dyYW0iP3U9ZihiLnZhbHVlLGcudmFsdWUpOnU9ZihiLnZhbHVlWzBdLGcudmFsdWVbMF0pLG5bZy5rZXldW2Iua2V5XT1uW2Iua2V5XVtnLmtleV09dX1mb3IodmFyIHc9MDt3PGUubGVuZ3RoO3crKyl7dmFyIEM9ZVt3XS5rZXk7aWYoaVtDXT09PWcua2V5fHxpW0NdPT09eS5rZXkpe2Zvcih2YXIgVD1DLEU9MDtFPGUubGVuZ3RoO0UrKyl7dmFyIEE9ZVtFXS5rZXk7bltDXVtBXTxuW0NdW1RdJiYoVD1BKX1pW0NdPVR9ZVt3XS5pbmRleD13fXJldHVybiBnLmtleT15LmtleT1nLmluZGV4PXkuaW5kZXg9bnVsbCwhMH0sIm1lcmdlQ2xvc2VzdCIpLFo2PW8oZnVuY3Rpb24gdChlLHIsbil7ZSYmKGUudmFsdWU/ci5wdXNoKGUudmFsdWUpOihlLmxlZnQmJnQoZS5sZWZ0LHIpLGUucmlnaHQmJnQoZS5yaWdodCxyKSkpfSwiZ2V0QWxsQ2hpbGRyZW4iKSxBWWU9byhmdW5jdGlvbiB0KGUscil7aWYoIWUpcmV0dXJuIiI7aWYoZS5sZWZ0JiZlLnJpZ2h0KXt2YXIgbj10KGUubGVmdCxyKSxpPXQoZS5yaWdodCxyKSxhPXIuYWRkKHtncm91cDoibm9kZXMiLGRhdGE6e2lkOm4rIiwiK2l9fSk7cmV0dXJuIHIuYWRkKHtncm91cDoiZWRnZXMiLGRhdGE6e3NvdXJjZTpuLHRhcmdldDphLmlkKCl9fSksci5hZGQoe2dyb3VwOiJlZGdlcyIsZGF0YTp7c291cmNlOmksdGFyZ2V0OmEuaWQoKX19KSxhLmlkKCl9ZWxzZSBpZihlLnZhbHVlKXJldHVybiBlLnZhbHVlLmlkKCl9LCJidWlsZERlbmRyb2dyYW0iKSxfWWU9byhmdW5jdGlvbiB0KGUscixuKXtpZighZSlyZXR1cm5bXTt2YXIgaT1bXSxhPVtdLHM9W107cmV0dXJuIHI9PT0wPyhlLmxlZnQmJlo2KGUubGVmdCxpKSxlLnJpZ2h0JiZaNihlLnJpZ2h0LGEpLHM9aS5jb25jYXQoYSksW24uY29sbGVjdGlvbihzKV0pOnI9PT0xP2UudmFsdWU/W24uY29sbGVjdGlvbihlLnZhbHVlKV06KGUubGVmdCYmWjYoZS5sZWZ0LGkpLGUucmlnaHQmJlo2KGUucmlnaHQsYSksW24uY29sbGVjdGlvbihpKSxuLmNvbGxlY3Rpb24oYSldKTplLnZhbHVlP1tuLmNvbGxlY3Rpb24oZS52YWx1ZSldOihlLmxlZnQmJihpPXQoZS5sZWZ0LHItMSxuKSksZS5yaWdodCYmKGE9dChlLnJpZ2h0LHItMSxuKSksaS5jb25jYXQoYSkpfSwiYnVpbGRDbHVzdGVyc0Zyb21UcmVlIiksWHBlPW8oZnVuY3Rpb24oZSl7Zm9yKHZhciByPXRoaXMuY3koKSxuPXRoaXMubm9kZXMoKSxpPUNZZShlKSxhPWkuYXR0cmlidXRlcyxzPW8oZnVuY3Rpb24odyxDKXtyZXR1cm4gSVMoaS5kaXN0YW5jZSxhLmxlbmd0aCxmdW5jdGlvbihUKXtyZXR1cm4gYVtUXSh3KX0sZnVuY3Rpb24oVCl7cmV0dXJuIGFbVF0oQyl9LHcsQyl9LCJnZXREaXN0IiksbD1bXSx1PVtdLGg9W10sZj1bXSxkPTA7ZDxuLmxlbmd0aDtkKyspe3ZhciBwPXt2YWx1ZTppLm1vZGU9PT0iZGVuZHJvZ3JhbSI/bltkXTpbbltkXV0sa2V5OmQsaW5kZXg6ZH07bFtkXT1wLGZbZF09cCx1W2RdPVtdLGhbZF09MH1mb3IodmFyIG09MDttPGwubGVuZ3RoO20rKylmb3IodmFyIGc9MDtnPD1tO2crKyl7dmFyIHk9dm9pZCAwO2kubW9kZT09PSJkZW5kcm9ncmFtIj95PW09PT1nPzEvMDpzKGxbbV0udmFsdWUsbFtnXS52YWx1ZSk6eT1tPT09Zz8xLzA6cyhsW21dLnZhbHVlWzBdLGxbZ10udmFsdWVbMF0pLHVbbV1bZ109eSx1W2ddW21dPXkseTx1W21dW2hbbV1dJiYoaFttXT1nKX1mb3IodmFyIHY9WXBlKGwsZix1LGgsaSk7djspdj1ZcGUobCxmLHUsaCxpKTt2YXIgeDtyZXR1cm4gaS5tb2RlPT09ImRlbmRyb2dyYW0iPyh4PV9ZZShsWzBdLGkuZGVuZHJvZ3JhbURlcHRoLHIpLGkuYWRkRGVuZHJvZ3JhbSYmQVllKGxbMF0scikpOih4PW5ldyBBcnJheShsLmxlbmd0aCksbC5mb3JFYWNoKGZ1bmN0aW9uKGIsdyl7Yi5rZXk9Yi5pbmRleD1udWxsLHhbd109ci5jb2xsZWN0aW9uKGIudmFsdWUpfSkpLHh9LCJoaWVyYXJjaGljYWxDbHVzdGVyaW5nIiksRFllPXtoaWVyYXJjaGljYWxDbHVzdGVyaW5nOlhwZSxoY2E6WHBlfSxMWWU9bGEoe2Rpc3RhbmNlOiJldWNsaWRlYW4iLHByZWZlcmVuY2U6Im1lZGlhbiIsZGFtcGluZzouOCxtYXhJdGVyYXRpb25zOjFlMyxtaW5JdGVyYXRpb25zOjEwMCxhdHRyaWJ1dGVzOltdfSksUlllPW8oZnVuY3Rpb24oZSl7dmFyIHI9ZS5kYW1waW5nLG49ZS5wcmVmZXJlbmNlOy41PD1yJiZyPDF8fGFpKCJEYW1waW5nIG11c3QgcmFuZ2Ugb24gWzAuNSwgMSkuICBHb3Q6ICIuY29uY2F0KHIpKTt2YXIgaT1bIm1lZGlhbiIsIm1lYW4iLCJtaW4iLCJtYXgiXTtyZXR1cm4gaS5zb21lKGZ1bmN0aW9uKGEpe3JldHVybiBhPT09bn0pfHxDdChuKXx8YWkoIlByZWZlcmVuY2UgbXVzdCBiZSBvbmUgb2YgWyIuY29uY2F0KGkubWFwKGZ1bmN0aW9uKGEpe3JldHVybiInIi5jb25jYXQoYSwiJyIpfSkuam9pbigiLCAiKSwiXSBvciBhIG51bWJlci4gIEdvdDogIikuY29uY2F0KG4pKSxMWWUoZSl9LCJzZXRPcHRpb25zIiksTlllPW8oZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9byhmdW5jdGlvbihsLHUpe3JldHVybiBpW3VdKGwpfSwiYXR0ciIpO3JldHVybi1JUyhlLGkubGVuZ3RoLGZ1bmN0aW9uKHMpe3JldHVybiBhKHIscyl9LGZ1bmN0aW9uKHMpe3JldHVybiBhKG4scyl9LHIsbil9LCJnZXRTaW1pbGFyaXR5IiksTVllPW8oZnVuY3Rpb24oZSxyKXt2YXIgbj1udWxsO3JldHVybiByPT09Im1lZGlhbiI/bj1ScWUoZSk6cj09PSJtZWFuIj9uPUxxZShlKTpyPT09Im1pbiI/bj1fcWUoZSk6cj09PSJtYXgiP249RHFlKGUpOm49cixufSwiZ2V0UHJlZmVyZW5jZSIpLElZZT1vKGZ1bmN0aW9uKGUscixuKXtmb3IodmFyIGk9W10sYT0wO2E8ZTthKyspclthKmUrYV0rblthKmUrYV0+MCYmaS5wdXNoKGEpO3JldHVybiBpfSwiZmluZEV4ZW1wbGFycyIpLGpwZT1vKGZ1bmN0aW9uKGUscixuKXtmb3IodmFyIGk9W10sYT0wO2E8ZTthKyspe2Zvcih2YXIgcz0tMSxsPS0xLzAsdT0wO3U8bi5sZW5ndGg7dSsrKXt2YXIgaD1uW3VdO3JbYSplK2hdPmwmJihzPWgsbD1yW2EqZStoXSl9cz4wJiZpLnB1c2gocyl9Zm9yKHZhciBmPTA7ZjxuLmxlbmd0aDtmKyspaVtuW2ZdXT1uW2ZdO3JldHVybiBpfSwiYXNzaWduQ2x1c3RlcnMiKSxPWWU9byhmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPWpwZShlLHIsbiksYT0wO2E8bi5sZW5ndGg7YSsrKXtmb3IodmFyIHM9W10sbD0wO2w8aS5sZW5ndGg7bCsrKWlbbF09PT1uW2FdJiZzLnB1c2gobCk7Zm9yKHZhciB1PS0xLGg9LTEvMCxmPTA7ZjxzLmxlbmd0aDtmKyspe2Zvcih2YXIgZD0wLHA9MDtwPHMubGVuZ3RoO3ArKylkKz1yW3NbcF0qZStzW2ZdXTtkPmgmJih1PWYsaD1kKX1uW2FdPXNbdV19cmV0dXJuIGk9anBlKGUscixuKSxpfSwiYXNzaWduIiksS3BlPW8oZnVuY3Rpb24oZSl7Zm9yKHZhciByPXRoaXMuY3koKSxuPXRoaXMubm9kZXMoKSxpPVJZZShlKSxhPXt9LHM9MDtzPG4ubGVuZ3RoO3MrKylhW25bc10uaWQoKV09czt2YXIgbCx1LGgsZixkLHA7bD1uLmxlbmd0aCx1PWwqbCxoPW5ldyBBcnJheSh1KTtmb3IodmFyIG09MDttPHU7bSsrKWhbbV09LTEvMDtmb3IodmFyIGc9MDtnPGw7ZysrKWZvcih2YXIgeT0wO3k8bDt5KyspZyE9PXkmJihoW2cqbCt5XT1OWWUoaS5kaXN0YW5jZSxuW2ddLG5beV0saS5hdHRyaWJ1dGVzKSk7Zj1NWWUoaCxpLnByZWZlcmVuY2UpO2Zvcih2YXIgdj0wO3Y8bDt2KyspaFt2Kmwrdl09ZjtkPW5ldyBBcnJheSh1KTtmb3IodmFyIHg9MDt4PHU7eCsrKWRbeF09MDtwPW5ldyBBcnJheSh1KTtmb3IodmFyIGI9MDtiPHU7YisrKXBbYl09MDtmb3IodmFyIHc9bmV3IEFycmF5KGwpLEM9bmV3IEFycmF5KGwpLFQ9bmV3IEFycmF5KGwpLEU9MDtFPGw7RSsrKXdbRV09MCxDW0VdPTAsVFtFXT0wO2Zvcih2YXIgQT1uZXcgQXJyYXkobCppLm1pbkl0ZXJhdGlvbnMpLFM9MDtTPEEubGVuZ3RoO1MrKylBW1NdPTA7dmFyIF87Zm9yKF89MDtfPGkubWF4SXRlcmF0aW9ucztfKyspe2Zvcih2YXIgST0wO0k8bDtJKyspe2Zvcih2YXIgRD0tMS8wLGs9LTEvMCxMPS0xLFI9MCxPPTA7TzxsO08rKyl3W09dPWRbSSpsK09dLFI9cFtJKmwrT10raFtJKmwrT10sUj49RD8oaz1ELEQ9UixMPU8pOlI+ayYmKGs9Uik7Zm9yKHZhciBNPTA7TTxsO00rKylkW0kqbCtNXT0oMS1pLmRhbXBpbmcpKihoW0kqbCtNXS1EKStpLmRhbXBpbmcqd1tNXTtkW0kqbCtMXT0oMS1pLmRhbXBpbmcpKihoW0kqbCtMXS1rKStpLmRhbXBpbmcqd1tMXX1mb3IodmFyIEI9MDtCPGw7QisrKXtmb3IodmFyIEY9MCxQPTA7UDxsO1ArKyl3W1BdPXBbUCpsK0JdLENbUF09TWF0aC5tYXgoMCxkW1AqbCtCXSksRis9Q1tQXTtGLT1DW0JdLENbQl09ZFtCKmwrQl0sRis9Q1tCXTtmb3IodmFyIHo9MDt6PGw7eisrKXBbeipsK0JdPSgxLWkuZGFtcGluZykqTWF0aC5taW4oMCxGLUNbel0pK2kuZGFtcGluZyp3W3pdO3BbQipsK0JdPSgxLWkuZGFtcGluZykqKEYtQ1tCXSkraS5kYW1waW5nKndbQl19Zm9yKHZhciAkPTAsSD0wO0g8bDtIKyspe3ZhciBRPXBbSCpsK0hdK2RbSCpsK0hdPjA/MTowO0FbXyVpLm1pbkl0ZXJhdGlvbnMqbCtIXT1RLCQrPVF9aWYoJD4wJiYoXz49aS5taW5JdGVyYXRpb25zLTF8fF89PWkubWF4SXRlcmF0aW9ucy0xKSl7Zm9yKHZhciBqPTAsaWU9MDtpZTxsO2llKyspe1RbaWVdPTA7Zm9yKHZhciBuZT0wO25lPGkubWluSXRlcmF0aW9ucztuZSsrKVRbaWVdKz1BW25lKmwraWVdOyhUW2llXT09PTB8fFRbaWVdPT09aS5taW5JdGVyYXRpb25zKSYmaisrfWlmKGo9PT1sKWJyZWFrfX1mb3IodmFyIGxlPUlZZShsLGQscCksaGU9T1llKGwsaCxsZSksSz17fSxYPTA7WDxsZS5sZW5ndGg7WCsrKUtbbGVbWF1dPVtdO2Zvcih2YXIgdGU9MDt0ZTxuLmxlbmd0aDt0ZSsrKXt2YXIgSj1hW25bdGVdLmlkKCldLHNlPWhlW0pdO3NlIT1udWxsJiZLW3NlXS5wdXNoKG5bdGVdKX1mb3IodmFyIHVlPW5ldyBBcnJheShsZS5sZW5ndGgpLFo9MDtaPGxlLmxlbmd0aDtaKyspdWVbWl09ci5jb2xsZWN0aW9uKEtbbGVbWl1dKTtyZXR1cm4gdWV9LCJhZmZpbml0eVByb3BhZ2F0aW9uIiksUFllPXthZmZpbml0eVByb3BhZ2F0aW9uOktwZSxhcDpLcGV9LEJZZT1sYSh7cm9vdDp2b2lkIDAsZGlyZWN0ZWQ6ITF9KSxGWWU9e2hpZXJob2x6ZXI6byhmdW5jdGlvbihlKXtpZighVXIoZSkpe3ZhciByPWFyZ3VtZW50cztlPXtyb290OnJbMF0sZGlyZWN0ZWQ6clsxXX19dmFyIG49QlllKGUpLGk9bi5yb290LGE9bi5kaXJlY3RlZCxzPXRoaXMsbD0hMSx1LGgsZjtpJiYoZj1adChpKT90aGlzLmZpbHRlcihpKVswXS5pZCgpOmlbMF0uaWQoKSk7dmFyIGQ9e30scD17fTthP3MuZm9yRWFjaChmdW5jdGlvbihiKXt2YXIgdz1iLmlkKCk7aWYoYi5pc05vZGUoKSl7dmFyIEM9Yi5pbmRlZ3JlZSghMCksVD1iLm91dGRlZ3JlZSghMCksRT1DLVQsQT1ULUM7RT09MT91P2w9ITA6dT13OkE9PTE/aD9sPSEwOmg9dzooQT4xfHxFPjEpJiYobD0hMCksZFt3XT1bXSxiLm91dGdvZXJzKCkuZm9yRWFjaChmdW5jdGlvbihTKXtTLmlzRWRnZSgpJiZkW3ddLnB1c2goUy5pZCgpKX0pfWVsc2UgcFt3XT1bdm9pZCAwLGIudGFyZ2V0KCkuaWQoKV19KTpzLmZvckVhY2goZnVuY3Rpb24oYil7dmFyIHc9Yi5pZCgpO2lmKGIuaXNOb2RlKCkpe3ZhciBDPWIuZGVncmVlKCEwKTtDJTImJih1P2g/bD0hMDpoPXc6dT13KSxkW3ddPVtdLGIuY29ubmVjdGVkRWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKFQpe3JldHVybiBkW3ddLnB1c2goVC5pZCgpKX0pfWVsc2UgcFt3XT1bYi5zb3VyY2UoKS5pZCgpLGIudGFyZ2V0KCkuaWQoKV19KTt2YXIgbT17Zm91bmQ6ITEsdHJhaWw6dm9pZCAwfTtpZihsKXJldHVybiBtO2lmKGgmJnUpaWYoYSl7aWYoZiYmaCE9ZilyZXR1cm4gbTtmPWh9ZWxzZXtpZihmJiZoIT1mJiZ1IT1mKXJldHVybiBtO2Z8fChmPWgpfWVsc2UgZnx8KGY9c1swXS5pZCgpKTt2YXIgZz1vKGZ1bmN0aW9uKHcpe2Zvcih2YXIgQz13LFQ9W3ddLEUsQSxTO2RbQ10ubGVuZ3RoOylFPWRbQ10uc2hpZnQoKSxBPXBbRV1bMF0sUz1wW0VdWzFdLEMhPVM/KGRbU109ZFtTXS5maWx0ZXIoZnVuY3Rpb24oXyl7cmV0dXJuIF8hPUV9KSxDPVMpOiFhJiZDIT1BJiYoZFtBXT1kW0FdLmZpbHRlcihmdW5jdGlvbihfKXtyZXR1cm4gXyE9RX0pLEM9QSksVC51bnNoaWZ0KEUpLFQudW5zaGlmdChDKTtyZXR1cm4gVH0sIndhbGsiKSx5PVtdLHY9W107Zm9yKHY9ZyhmKTt2Lmxlbmd0aCE9MTspZFt2WzBdXS5sZW5ndGg9PTA/KHkudW5zaGlmdChzLmdldEVsZW1lbnRCeUlkKHYuc2hpZnQoKSkpLHkudW5zaGlmdChzLmdldEVsZW1lbnRCeUlkKHYuc2hpZnQoKSkpKTp2PWcodi5zaGlmdCgpKS5jb25jYXQodik7eS51bnNoaWZ0KHMuZ2V0RWxlbWVudEJ5SWQodi5zaGlmdCgpKSk7Zm9yKHZhciB4IGluIGQpaWYoZFt4XS5sZW5ndGgpcmV0dXJuIG07cmV0dXJuIG0uZm91bmQ9ITAsbS50cmFpbD10aGlzLnNwYXduKHksITApLG19LCJoaWVyaG9semVyIil9LEo2PW8oZnVuY3Rpb24oKXt2YXIgZT10aGlzLHI9e30sbj0wLGk9MCxhPVtdLHM9W10sbD17fSx1PW8oZnVuY3Rpb24ocCxtKXtmb3IodmFyIGc9cy5sZW5ndGgtMSx5PVtdLHY9ZS5zcGF3bigpO3NbZ10ueCE9cHx8c1tnXS55IT1tOyl5LnB1c2gocy5wb3AoKS5lZGdlKSxnLS07eS5wdXNoKHMucG9wKCkuZWRnZSkseS5mb3JFYWNoKGZ1bmN0aW9uKHgpe3ZhciBiPXguY29ubmVjdGVkTm9kZXMoKS5pbnRlcnNlY3Rpb24oZSk7di5tZXJnZSh4KSxiLmZvckVhY2goZnVuY3Rpb24odyl7dmFyIEM9dy5pZCgpLFQ9dy5jb25uZWN0ZWRFZGdlcygpLmludGVyc2VjdGlvbihlKTt2Lm1lcmdlKHcpLHJbQ10uY3V0VmVydGV4P3YubWVyZ2UoVC5maWx0ZXIoZnVuY3Rpb24oRSl7cmV0dXJuIEUuaXNMb29wKCl9KSk6di5tZXJnZShUKX0pfSksYS5wdXNoKHYpfSwiYnVpbGRDb21wb25lbnQiKSxoPW8oZnVuY3Rpb24gZChwLG0sZyl7cD09PWcmJihpKz0xKSxyW21dPXtpZDpuLGxvdzpuKyssY3V0VmVydGV4OiExfTt2YXIgeT1lLmdldEVsZW1lbnRCeUlkKG0pLmNvbm5lY3RlZEVkZ2VzKCkuaW50ZXJzZWN0aW9uKGUpO2lmKHkuc2l6ZSgpPT09MClhLnB1c2goZS5zcGF3bihlLmdldEVsZW1lbnRCeUlkKG0pKSk7ZWxzZXt2YXIgdix4LGIsdzt5LmZvckVhY2goZnVuY3Rpb24oQyl7dj1DLnNvdXJjZSgpLmlkKCkseD1DLnRhcmdldCgpLmlkKCksYj12PT09bT94OnYsYiE9PWcmJih3PUMuaWQoKSxsW3ddfHwobFt3XT0hMCxzLnB1c2goe3g6bSx5OmIsZWRnZTpDfSkpLGIgaW4gcj9yW21dLmxvdz1NYXRoLm1pbihyW21dLmxvdyxyW2JdLmlkKTooZChwLGIsbSksclttXS5sb3c9TWF0aC5taW4oclttXS5sb3cscltiXS5sb3cpLHJbbV0uaWQ8PXJbYl0ubG93JiYoclttXS5jdXRWZXJ0ZXg9ITAsdShtLGIpKSkpfSl9fSwiYmljb25uZWN0ZWRTZWFyY2giKTtlLmZvckVhY2goZnVuY3Rpb24oZCl7aWYoZC5pc05vZGUoKSl7dmFyIHA9ZC5pZCgpO3AgaW4gcnx8KGk9MCxoKHAscCkscltwXS5jdXRWZXJ0ZXg9aT4xKX19KTt2YXIgZj1PYmplY3Qua2V5cyhyKS5maWx0ZXIoZnVuY3Rpb24oZCl7cmV0dXJuIHJbZF0uY3V0VmVydGV4fSkubWFwKGZ1bmN0aW9uKGQpe3JldHVybiBlLmdldEVsZW1lbnRCeUlkKGQpfSk7cmV0dXJue2N1dDplLnNwYXduKGYpLGNvbXBvbmVudHM6YX19LCJob3Bjcm9mdFRhcmphbkJpY29ubmVjdGVkIiksJFllPXtob3Bjcm9mdFRhcmphbkJpY29ubmVjdGVkOko2LGh0YmM6SjYsaHRiOko2LGhvcGNyb2Z0VGFyamFuQmljb25uZWN0ZWRDb21wb25lbnRzOko2fSxlUz1vKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPXt9LG49MCxpPVtdLGE9W10scz1lLnNwYXduKGUpLGw9byhmdW5jdGlvbiB1KGgpe2EucHVzaChoKSxyW2hdPXtpbmRleDpuLGxvdzpuKyssZXhwbG9yZWQ6ITF9O3ZhciBmPWUuZ2V0RWxlbWVudEJ5SWQoaCkuY29ubmVjdGVkRWRnZXMoKS5pbnRlcnNlY3Rpb24oZSk7aWYoZi5mb3JFYWNoKGZ1bmN0aW9uKHkpe3ZhciB2PXkudGFyZ2V0KCkuaWQoKTt2IT09aCYmKHYgaW4gcnx8dSh2KSxyW3ZdLmV4cGxvcmVkfHwocltoXS5sb3c9TWF0aC5taW4ocltoXS5sb3csclt2XS5sb3cpKSl9KSxyW2hdLmluZGV4PT09cltoXS5sb3cpe2Zvcih2YXIgZD1lLnNwYXduKCk7Oyl7dmFyIHA9YS5wb3AoKTtpZihkLm1lcmdlKGUuZ2V0RWxlbWVudEJ5SWQocCkpLHJbcF0ubG93PXJbaF0uaW5kZXgscltwXS5leHBsb3JlZD0hMCxwPT09aClicmVha312YXIgbT1kLmVkZ2VzV2l0aChkKSxnPWQubWVyZ2UobSk7aS5wdXNoKGcpLHM9cy5kaWZmZXJlbmNlKGcpfX0sInN0cm9uZ2x5Q29ubmVjdGVkU2VhcmNoIik7cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbih1KXtpZih1LmlzTm9kZSgpKXt2YXIgaD11LmlkKCk7aCBpbiByfHxsKGgpfX0pLHtjdXQ6cyxjb21wb25lbnRzOml9fSwidGFyamFuU3Ryb25nbHlDb25uZWN0ZWQiKSx6WWU9e3RhcmphblN0cm9uZ2x5Q29ubmVjdGVkOmVTLHRzYzplUyx0c2NjOmVTLHRhcmphblN0cm9uZ2x5Q29ubmVjdGVkQ29tcG9uZW50czplU30sU21lPXt9O1txYixncWUseXFlLHhxZSx3cWUsa3FlLENxZSxRcWUscTEsWTEsRlAsdVllLGtZZSxEWWUsUFllLEZZZSwkWWUselllXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JyKFNtZSx0KX0pO0NtZT0wLEFtZT0xLF9tZT0yLEp1PW8oZnVuY3Rpb24gdChlKXtpZighKHRoaXMgaW5zdGFuY2VvZiB0KSlyZXR1cm4gbmV3IHQoZSk7dGhpcy5pZD0iVGhlbmFibGUvMS4wLjciLHRoaXMuc3RhdGU9Q21lLHRoaXMuZnVsZmlsbFZhbHVlPXZvaWQgMCx0aGlzLnJlamVjdFJlYXNvbj12b2lkIDAsdGhpcy5vbkZ1bGZpbGxlZD1bXSx0aGlzLm9uUmVqZWN0ZWQ9W10sdGhpcy5wcm94eT17dGhlbjp0aGlzLnRoZW4uYmluZCh0aGlzKX0sdHlwZW9mIGU9PSJmdW5jdGlvbiImJmUuY2FsbCh0aGlzLHRoaXMuZnVsZmlsbC5iaW5kKHRoaXMpLHRoaXMucmVqZWN0LmJpbmQodGhpcykpfSwiYXBpIik7SnUucHJvdG90eXBlPXtmdWxmaWxsOm8oZnVuY3Rpb24oZSl7cmV0dXJuIFFwZSh0aGlzLEFtZSwiZnVsZmlsbFZhbHVlIixlKX0sImZ1bGZpbGwiKSxyZWplY3Q6byhmdW5jdGlvbihlKXtyZXR1cm4gUXBlKHRoaXMsX21lLCJyZWplY3RSZWFzb24iLGUpfSwicmVqZWN0IiksdGhlbjpvKGZ1bmN0aW9uKGUscil7dmFyIG49dGhpcyxpPW5ldyBKdTtyZXR1cm4gbi5vbkZ1bGZpbGxlZC5wdXNoKEpwZShlLGksImZ1bGZpbGwiKSksbi5vblJlamVjdGVkLnB1c2goSnBlKHIsaSwicmVqZWN0IikpLERtZShuKSxpLnByb3h5fSwidGhlbiIpfTtRcGU9byhmdW5jdGlvbihlLHIsbixpKXtyZXR1cm4gZS5zdGF0ZT09PUNtZSYmKGUuc3RhdGU9cixlW25dPWksRG1lKGUpKSxlfSwiZGVsaXZlciIpLERtZT1vKGZ1bmN0aW9uKGUpe2Uuc3RhdGU9PT1BbWU/WnBlKGUsIm9uRnVsZmlsbGVkIixlLmZ1bGZpbGxWYWx1ZSk6ZS5zdGF0ZT09PV9tZSYmWnBlKGUsIm9uUmVqZWN0ZWQiLGUucmVqZWN0UmVhc29uKX0sImV4ZWN1dGUiKSxacGU9byhmdW5jdGlvbihlLHIsbil7aWYoZVtyXS5sZW5ndGghPT0wKXt2YXIgaT1lW3JdO2Vbcl09W107dmFyIGE9byhmdW5jdGlvbigpe2Zvcih2YXIgbD0wO2w8aS5sZW5ndGg7bCsrKWlbbF0obil9LCJmdW5jIik7dHlwZW9mIHNldEltbWVkaWF0ZT09ImZ1bmN0aW9uIj9zZXRJbW1lZGlhdGUoYSk6c2V0VGltZW91dChhLDApfX0sImV4ZWN1dGVfaGFuZGxlcnMiKSxKcGU9byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIGZ1bmN0aW9uKGkpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXJbbl0uY2FsbChyLGkpO2Vsc2V7dmFyIGE7dHJ5e2E9ZShpKX1jYXRjaChzKXtyLnJlamVjdChzKTtyZXR1cm59R1llKHIsYSl9fX0sInJlc29sdmVyIiksR1llPW8oZnVuY3Rpb24gdChlLHIpe2lmKGU9PT1yfHxlLnByb3h5PT09cil7ZS5yZWplY3QobmV3IFR5cGVFcnJvcigiY2Fubm90IHJlc29sdmUgcHJvbWlzZSB3aXRoIGl0c2VsZiIpKTtyZXR1cm59dmFyIG47aWYoV2kocik9PT0ib2JqZWN0IiYmciE9PW51bGx8fHR5cGVvZiByPT0iZnVuY3Rpb24iKXRyeXtuPXIudGhlbn1jYXRjaChhKXtlLnJlamVjdChhKTtyZXR1cm59aWYodHlwZW9mIG49PSJmdW5jdGlvbiIpe3ZhciBpPSExO3RyeXtuLmNhbGwocixmdW5jdGlvbihhKXtpfHwoaT0hMCxhPT09cj9lLnJlamVjdChuZXcgVHlwZUVycm9yKCJjaXJjdWxhciB0aGVuYWJsZSBjaGFpbiIpKTp0KGUsYSkpfSxmdW5jdGlvbihhKXtpfHwoaT0hMCxlLnJlamVjdChhKSl9KX1jYXRjaChhKXtpfHxlLnJlamVjdChhKX1yZXR1cm59ZS5mdWxmaWxsKHIpfSwicmVzb2x2ZSIpO0p1LmFsbD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEp1KGZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPW5ldyBBcnJheSh0Lmxlbmd0aCksaT0wLGE9byhmdW5jdGlvbih1LGgpe25bdV09aCxpKyssaT09PXQubGVuZ3RoJiZlKG4pfSwiZnVsZmlsbCIpLHM9MDtzPHQubGVuZ3RoO3MrKykoZnVuY3Rpb24obCl7dmFyIHU9dFtsXSxoPXUhPW51bGwmJnUudGhlbiE9bnVsbDtpZihoKXUudGhlbihmdW5jdGlvbihkKXthKGwsZCl9LGZ1bmN0aW9uKGQpe3IoZCl9KTtlbHNle3ZhciBmPXU7YShsLGYpfX0pKHMpfSl9O0p1LnJlc29sdmU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBKdShmdW5jdGlvbihlLHIpe2UodCl9KX07SnUucmVqZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgSnUoZnVuY3Rpb24oZSxyKXtyKHQpfSl9O2V5PXR5cGVvZiBQcm9taXNlPCJ1Ij9Qcm9taXNlOkp1LCRQPW8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPUpQKGUpLGE9IWkscz10aGlzLl9wcml2YXRlPXJyKHtkdXJhdGlvbjoxZTN9LHIsbik7aWYocy50YXJnZXQ9ZSxzLnN0eWxlPXMuc3R5bGV8fHMuY3NzLHMuc3RhcnRlZD0hMSxzLnBsYXlpbmc9ITEscy5ob29rZWQ9ITEscy5hcHBseWluZz0hMSxzLnByb2dyZXNzPTAscy5jb21wbGV0ZXM9W10scy5mcmFtZXM9W10scy5jb21wbGV0ZSYmc2kocy5jb21wbGV0ZSkmJnMuY29tcGxldGVzLnB1c2gocy5jb21wbGV0ZSksYSl7dmFyIGw9ZS5wb3NpdGlvbigpO3Muc3RhcnRQb3NpdGlvbj1zLnN0YXJ0UG9zaXRpb258fHt4OmwueCx5OmwueX0scy5zdGFydFN0eWxlPXMuc3RhcnRTdHlsZXx8ZS5jeSgpLnN0eWxlKCkuZ2V0QW5pbWF0aW9uU3RhcnRTdHlsZShlLHMuc3R5bGUpfWlmKGkpe3ZhciB1PWUucGFuKCk7cy5zdGFydFBhbj17eDp1LngseTp1Lnl9LHMuc3RhcnRab29tPWUuem9vbSgpfXRoaXMubGVuZ3RoPTEsdGhpc1swXT10aGlzfSwiQW5pbWF0aW9uIiksVXA9JFAucHJvdG90eXBlO3JyKFVwLHtpbnN0YW5jZVN0cmluZzpvKGZ1bmN0aW9uKCl7cmV0dXJuImFuaW1hdGlvbiJ9LCJpbnN0YW5jZVN0cmluZyIpLGhvb2s6byhmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3ByaXZhdGU7aWYoIWUuaG9va2VkKXt2YXIgcixuPWUudGFyZ2V0Ll9wcml2YXRlLmFuaW1hdGlvbjtlLnF1ZXVlP3I9bi5xdWV1ZTpyPW4uY3VycmVudCxyLnB1c2godGhpcyksZ28oZS50YXJnZXQpJiZlLnRhcmdldC5jeSgpLmFkZFRvQW5pbWF0aW9uUG9vbChlLnRhcmdldCksZS5ob29rZWQ9ITB9cmV0dXJuIHRoaXN9LCJob29rIikscGxheTpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZS5wcm9ncmVzcz09PTEmJihlLnByb2dyZXNzPTApLGUucGxheWluZz0hMCxlLnN0YXJ0ZWQ9ITEsZS5zdG9wcGVkPSExLHRoaXMuaG9vaygpLHRoaXN9LCJwbGF5IikscGxheWluZzpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUucGxheWluZ30sInBsYXlpbmciKSxhcHBseTpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZS5hcHBseWluZz0hMCxlLnN0YXJ0ZWQ9ITEsZS5zdG9wcGVkPSExLHRoaXMuaG9vaygpLHRoaXN9LCJhcHBseSIpLGFwcGx5aW5nOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5hcHBseWluZ30sImFwcGx5aW5nIikscGF1c2U6byhmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3ByaXZhdGU7cmV0dXJuIGUucGxheWluZz0hMSxlLnN0YXJ0ZWQ9ITEsdGhpc30sInBhdXNlIiksc3RvcDpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZS5wbGF5aW5nPSExLGUuc3RhcnRlZD0hMSxlLnN0b3BwZWQ9ITAsdGhpc30sInN0b3AiKSxyZXdpbmQ6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb2dyZXNzKDApfSwicmV3aW5kIiksZmFzdGZvcndhcmQ6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb2dyZXNzKDEpfSwiZmFzdGZvcndhcmQiKSx0aW1lOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZT09PXZvaWQgMD9yLnByb2dyZXNzKnIuZHVyYXRpb246dGhpcy5wcm9ncmVzcyhlL3IuZHVyYXRpb24pfSwidGltZSIpLHByb2dyZXNzOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fcHJpdmF0ZSxuPXIucGxheWluZztyZXR1cm4gZT09PXZvaWQgMD9yLnByb2dyZXNzOihuJiZ0aGlzLnBhdXNlKCksci5wcm9ncmVzcz1lLHIuc3RhcnRlZD0hMSxuJiZ0aGlzLnBsYXkoKSx0aGlzKX0sInByb2dyZXNzIiksY29tcGxldGVkOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5wcm9ncmVzcz09PTF9LCJjb21wbGV0ZWQiKSxyZXZlcnNlOm8oZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9wcml2YXRlLHI9ZS5wbGF5aW5nO3ImJnRoaXMucGF1c2UoKSxlLnByb2dyZXNzPTEtZS5wcm9ncmVzcyxlLnN0YXJ0ZWQ9ITE7dmFyIG49byhmdW5jdGlvbihoLGYpe3ZhciBkPWVbaF07ZCE9bnVsbCYmKGVbaF09ZVtmXSxlW2ZdPWQpfSwic3dhcCIpO2lmKG4oInpvb20iLCJzdGFydFpvb20iKSxuKCJwYW4iLCJzdGFydFBhbiIpLG4oInBvc2l0aW9uIiwic3RhcnRQb3NpdGlvbiIpLGUuc3R5bGUpZm9yKHZhciBpPTA7aTxlLnN0eWxlLmxlbmd0aDtpKyspe3ZhciBhPWUuc3R5bGVbaV0scz1hLm5hbWUsbD1lLnN0YXJ0U3R5bGVbc107ZS5zdGFydFN0eWxlW3NdPWEsZS5zdHlsZVtpXT1sfXJldHVybiByJiZ0aGlzLnBsYXkoKSx0aGlzfSwicmV2ZXJzZSIpLHByb21pc2U6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLl9wcml2YXRlLG47c3dpdGNoKGUpe2Nhc2UiZnJhbWUiOm49ci5mcmFtZXM7YnJlYWs7ZGVmYXVsdDpjYXNlImNvbXBsZXRlIjpjYXNlImNvbXBsZXRlZCI6bj1yLmNvbXBsZXRlc31yZXR1cm4gbmV3IGV5KGZ1bmN0aW9uKGksYSl7bi5wdXNoKGZ1bmN0aW9uKCl7aSgpfSl9KX0sInByb21pc2UiKX0pO1VwLmNvbXBsZXRlPVVwLmNvbXBsZXRlZDtVcC5ydW49VXAucGxheTtVcC5ydW5uaW5nPVVwLnBsYXlpbmc7VlllPXthbmltYXRlZDpvKGZ1bmN0aW9uKCl7cmV0dXJuIG8oZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49ci5sZW5ndGghPT12b2lkIDAsaT1uP3I6W3JdLGE9dGhpcy5fcHJpdmF0ZS5jeXx8dGhpcztpZighYS5zdHlsZUVuYWJsZWQoKSlyZXR1cm4hMTt2YXIgcz1pWzBdO2lmKHMpcmV0dXJuIHMuX3ByaXZhdGUuYW5pbWF0aW9uLmN1cnJlbnQubGVuZ3RoPjB9LCJhbmltYXRlZEltcGwiKX0sImFuaW1hdGVkIiksY2xlYXJRdWV1ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIG8oZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49ci5sZW5ndGghPT12b2lkIDAsaT1uP3I6W3JdLGE9dGhpcy5fcHJpdmF0ZS5jeXx8dGhpcztpZighYS5zdHlsZUVuYWJsZWQoKSlyZXR1cm4gdGhpcztmb3IodmFyIHM9MDtzPGkubGVuZ3RoO3MrKyl7dmFyIGw9aVtzXTtsLl9wcml2YXRlLmFuaW1hdGlvbi5xdWV1ZT1bXX1yZXR1cm4gdGhpc30sImNsZWFyUXVldWVJbXBsIil9LCJjbGVhclF1ZXVlIiksZGVsYXk6byhmdW5jdGlvbigpe3JldHVybiBvKGZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5fcHJpdmF0ZS5jeXx8dGhpcztyZXR1cm4gaS5zdHlsZUVuYWJsZWQoKT90aGlzLmFuaW1hdGUoe2RlbGF5OnIsZHVyYXRpb246cixjb21wbGV0ZTpufSk6dGhpc30sImRlbGF5SW1wbCIpfSwiZGVsYXkiKSxkZWxheUFuaW1hdGlvbjpvKGZ1bmN0aW9uKCl7cmV0dXJuIG8oZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLl9wcml2YXRlLmN5fHx0aGlzO3JldHVybiBpLnN0eWxlRW5hYmxlZCgpP3RoaXMuYW5pbWF0aW9uKHtkZWxheTpyLGR1cmF0aW9uOnIsY29tcGxldGU6bn0pOnRoaXN9LCJkZWxheUFuaW1hdGlvbkltcGwiKX0sImRlbGF5QW5pbWF0aW9uIiksYW5pbWF0aW9uOm8oZnVuY3Rpb24oKXtyZXR1cm4gbyhmdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMsYT1pLmxlbmd0aCE9PXZvaWQgMCxzPWE/aTpbaV0sbD10aGlzLl9wcml2YXRlLmN5fHx0aGlzLHU9IWEsaD0hdTtpZighbC5zdHlsZUVuYWJsZWQoKSlyZXR1cm4gdGhpczt2YXIgZj1sLnN0eWxlKCk7cj1ycih7fSxyLG4pO3ZhciBkPU9iamVjdC5rZXlzKHIpLmxlbmd0aD09PTA7aWYoZClyZXR1cm4gbmV3ICRQKHNbMF0scik7c3dpdGNoKHIuZHVyYXRpb249PT12b2lkIDAmJihyLmR1cmF0aW9uPTQwMCksci5kdXJhdGlvbil7Y2FzZSJzbG93IjpyLmR1cmF0aW9uPTYwMDticmVhaztjYXNlImZhc3QiOnIuZHVyYXRpb249MjAwO2JyZWFrfWlmKGgmJihyLnN0eWxlPWYuZ2V0UHJvcHNMaXN0KHIuc3R5bGV8fHIuY3NzKSxyLmNzcz12b2lkIDApLGgmJnIucmVuZGVyZWRQb3NpdGlvbiE9bnVsbCl7dmFyIHA9ci5yZW5kZXJlZFBvc2l0aW9uLG09bC5wYW4oKSxnPWwuem9vbSgpO3IucG9zaXRpb249cG1lKHAsZyxtKX1pZih1JiZyLnBhbkJ5IT1udWxsKXt2YXIgeT1yLnBhbkJ5LHY9bC5wYW4oKTtyLnBhbj17eDp2LngreS54LHk6di55K3kueX19dmFyIHg9ci5jZW50ZXJ8fHIuY2VudHJlO2lmKHUmJnghPW51bGwpe3ZhciBiPWwuZ2V0Q2VudGVyUGFuKHguZWxlcyxyLnpvb20pO2IhPW51bGwmJihyLnBhbj1iKX1pZih1JiZyLmZpdCE9bnVsbCl7dmFyIHc9ci5maXQsQz1sLmdldEZpdFZpZXdwb3J0KHcuZWxlc3x8dy5ib3VuZGluZ0JveCx3LnBhZGRpbmcpO0MhPW51bGwmJihyLnBhbj1DLnBhbixyLnpvb209Qy56b29tKX1pZih1JiZVcihyLnpvb20pKXt2YXIgVD1sLmdldFpvb21lZFZpZXdwb3J0KHIuem9vbSk7VCE9bnVsbD8oVC56b29tZWQmJihyLnpvb209VC56b29tKSxULnBhbm5lZCYmKHIucGFuPVQucGFuKSk6ci56b29tPW51bGx9cmV0dXJuIG5ldyAkUChzWzBdLHIpfSwiYW5pbWF0aW9uSW1wbCIpfSwiYW5pbWF0aW9uIiksYW5pbWF0ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIG8oZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLGE9aS5sZW5ndGghPT12b2lkIDAscz1hP2k6W2ldLGw9dGhpcy5fcHJpdmF0ZS5jeXx8dGhpcztpZighbC5zdHlsZUVuYWJsZWQoKSlyZXR1cm4gdGhpcztuJiYocj1ycih7fSxyLG4pKTtmb3IodmFyIHU9MDt1PHMubGVuZ3RoO3UrKyl7dmFyIGg9c1t1XSxmPWguYW5pbWF0ZWQoKSYmKHIucXVldWU9PT12b2lkIDB8fHIucXVldWUpLGQ9aC5hbmltYXRpb24ocixmP3txdWV1ZTohMH06dm9pZCAwKTtkLnBsYXkoKX1yZXR1cm4gdGhpc30sImFuaW1hdGVJbXBsIil9LCJhbmltYXRlIiksc3RvcDpvKGZ1bmN0aW9uKCl7cmV0dXJuIG8oZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLGE9aS5sZW5ndGghPT12b2lkIDAscz1hP2k6W2ldLGw9dGhpcy5fcHJpdmF0ZS5jeXx8dGhpcztpZighbC5zdHlsZUVuYWJsZWQoKSlyZXR1cm4gdGhpcztmb3IodmFyIHU9MDt1PHMubGVuZ3RoO3UrKyl7Zm9yKHZhciBoPXNbdV0sZj1oLl9wcml2YXRlLGQ9Zi5hbmltYXRpb24uY3VycmVudCxwPTA7cDxkLmxlbmd0aDtwKyspe3ZhciBtPWRbcF0sZz1tLl9wcml2YXRlO24mJihnLmR1cmF0aW9uPTApfXImJihmLmFuaW1hdGlvbi5xdWV1ZT1bXSksbnx8KGYuYW5pbWF0aW9uLmN1cnJlbnQ9W10pfXJldHVybiBsLm5vdGlmeSgiZHJhdyIpLHRoaXN9LCJzdG9wSW1wbCIpfSwic3RvcCIpfSxVWWU9QXJyYXkuaXNBcnJheSxPUz1VWWUsSFllPS9cLnxcWyg/OlteW1xdXSp8KFsiJ10pKD86KD8hXDEpW15cXF18XFwuKSo/XDEpXF0vLFdZZT0vXlx3KiQvO28ocVllLCJpc0tleSIpO1lZZT1xWWUsWFllPSJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dIixqWWU9IltvYmplY3QgRnVuY3Rpb25dIixLWWU9IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIixRWWU9IltvYmplY3QgUHJveHldIjtvKFpZZSwiaXNGdW5jdGlvbiIpO0pZZT1aWWUsZVhlPVJTWyJfX2NvcmUtanNfc2hhcmVkX18iXSxFUD1lWGUsZTBlPWZ1bmN0aW9uKCl7dmFyIHQ9L1teLl0rJC8uZXhlYyhFUCYmRVAua2V5cyYmRVAua2V5cy5JRV9QUk9UT3x8IiIpO3JldHVybiB0PyJTeW1ib2woc3JjKV8xLiIrdDoiIn0oKTtvKHRYZSwiaXNNYXNrZWQiKTtyWGU9dFhlLG5YZT1GdW5jdGlvbi5wcm90b3R5cGUsaVhlPW5YZS50b1N0cmluZztvKGFYZSwidG9Tb3VyY2UiKTtzWGU9YVhlLG9YZT0vW1xcXiQuKis/KClbXF17fXxdL2csbFhlPS9eXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXSQvLGNYZT1GdW5jdGlvbi5wcm90b3R5cGUsdVhlPU9iamVjdC5wcm90b3R5cGUsaFhlPWNYZS50b1N0cmluZyxmWGU9dVhlLmhhc093blByb3BlcnR5LGRYZT1SZWdFeHAoIl4iK2hYZS5jYWxsKGZYZSkucmVwbGFjZShvWGUsIlxcJCYiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCIkMS4qPyIpKyIkIik7byhwWGUsImJhc2VJc05hdGl2ZSIpO21YZT1wWGU7byhnWGUsImdldFZhbHVlJDEiKTt5WGU9Z1hlO28odlhlLCJnZXROYXRpdmUiKTtsQj12WGUseFhlPWxCKE9iamVjdCwiY3JlYXRlIiksamI9eFhlO28oYlhlLCJoYXNoQ2xlYXIiKTt3WGU9YlhlO28oVFhlLCJoYXNoRGVsZXRlIik7a1hlPVRYZSxFWGU9Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iLFNYZT1PYmplY3QucHJvdG90eXBlLENYZT1TWGUuaGFzT3duUHJvcGVydHk7byhBWGUsImhhc2hHZXQiKTtfWGU9QVhlLERYZT1PYmplY3QucHJvdG90eXBlLExYZT1EWGUuaGFzT3duUHJvcGVydHk7byhSWGUsImhhc2hIYXMiKTtOWGU9UlhlLE1YZT0iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI7byhJWGUsImhhc2hTZXQiKTtPWGU9SVhlO28odHksIkhhc2giKTt0eS5wcm90b3R5cGUuY2xlYXI9d1hlO3R5LnByb3RvdHlwZS5kZWxldGU9a1hlO3R5LnByb3RvdHlwZS5nZXQ9X1hlO3R5LnByb3RvdHlwZS5oYXM9TlhlO3R5LnByb3RvdHlwZS5zZXQ9T1hlO3QwZT10eTtvKFBYZSwibGlzdENhY2hlQ2xlYXIiKTtCWGU9UFhlO28oRlhlLCJlcSIpO0xtZT1GWGU7bygkWGUsImFzc29jSW5kZXhPZiIpO1BTPSRYZSx6WGU9QXJyYXkucHJvdG90eXBlLEdYZT16WGUuc3BsaWNlO28oVlhlLCJsaXN0Q2FjaGVEZWxldGUiKTtVWGU9VlhlO28oSFhlLCJsaXN0Q2FjaGVHZXQiKTtXWGU9SFhlO28ocVhlLCJsaXN0Q2FjaGVIYXMiKTtZWGU9cVhlO28oWFhlLCJsaXN0Q2FjaGVTZXQiKTtqWGU9WFhlO28ocnksIkxpc3RDYWNoZSIpO3J5LnByb3RvdHlwZS5jbGVhcj1CWGU7cnkucHJvdG90eXBlLmRlbGV0ZT1VWGU7cnkucHJvdG90eXBlLmdldD1XWGU7cnkucHJvdG90eXBlLmhhcz1ZWGU7cnkucHJvdG90eXBlLnNldD1qWGU7S1hlPXJ5LFFYZT1sQihSUywiTWFwIiksWlhlPVFYZTtvKEpYZSwibWFwQ2FjaGVDbGVhciIpO2VqZT1KWGU7byh0amUsImlzS2V5YWJsZSIpO3JqZT10amU7byhuamUsImdldE1hcERhdGEiKTtCUz1uamU7byhpamUsIm1hcENhY2hlRGVsZXRlIik7YWplPWlqZTtvKHNqZSwibWFwQ2FjaGVHZXQiKTtvamU9c2plO28obGplLCJtYXBDYWNoZUhhcyIpO2NqZT1samU7byh1amUsIm1hcENhY2hlU2V0Iik7aGplPXVqZTtvKG55LCJNYXBDYWNoZSIpO255LnByb3RvdHlwZS5jbGVhcj1lamU7bnkucHJvdG90eXBlLmRlbGV0ZT1hamU7bnkucHJvdG90eXBlLmdldD1vamU7bnkucHJvdG90eXBlLmhhcz1jamU7bnkucHJvdG90eXBlLnNldD1oamU7Um1lPW55LGZqZT0iRXhwZWN0ZWQgYSBmdW5jdGlvbiI7byhjQiwibWVtb2l6ZSIpO2NCLkNhY2hlPVJtZTtkamU9Y0IscGplPTUwMDtvKG1qZSwibWVtb2l6ZUNhcHBlZCIpO2dqZT1tamUseWplPS9bXi5bXF1dK3xcWyg/OigtP1xkKyg/OlwuXGQrKT8pfChbIiddKSgoPzooPyFcMilbXlxcXXxcXC4pKj8pXDIpXF18KD89KD86XC58XFtcXSkoPzpcLnxcW1xdfCQpKS9nLHZqZT0vXFwoXFwpPy9nLHhqZT1namUoZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIHQuY2hhckNvZGVBdCgwKT09PTQ2JiZlLnB1c2goIiIpLHQucmVwbGFjZSh5amUsZnVuY3Rpb24ocixuLGksYSl7ZS5wdXNoKGk/YS5yZXBsYWNlKHZqZSwiJDEiKTpufHxyKX0pLGV9KSxObWU9eGplO28oYmplLCJhcnJheU1hcCIpO01tZT1iamUsd2plPTEvMCxyMGU9ajE/ajEucHJvdG90eXBlOnZvaWQgMCxuMGU9cjBlP3IwZS50b1N0cmluZzp2b2lkIDA7byhJbWUsImJhc2VUb1N0cmluZyIpO1RqZT1JbWU7byhramUsInRvU3RyaW5nJDEiKTtPbWU9a2plO28oRWplLCJjYXN0UGF0aCIpO1BtZT1FamUsU2plPTEvMDtvKENqZSwidG9LZXkiKTt1Qj1DamU7byhBamUsImJhc2VHZXQiKTtfamU9QWplO28oRGplLCJnZXQiKTtMamU9RGplLFJqZT1mdW5jdGlvbigpe3RyeXt2YXIgdD1sQihPYmplY3QsImRlZmluZVByb3BlcnR5Iik7cmV0dXJuIHQoe30sIiIse30pLHR9Y2F0Y2h7fX0oKSxpMGU9UmplO28oTmplLCJiYXNlQXNzaWduVmFsdWUiKTtNamU9TmplLElqZT1PYmplY3QucHJvdG90eXBlLE9qZT1JamUuaGFzT3duUHJvcGVydHk7byhQamUsImFzc2lnblZhbHVlIik7QmplPVBqZSxGamU9OTAwNzE5OTI1NDc0MDk5MSwkamU9L14oPzowfFsxLTldXGQqKSQvO28oemplLCJpc0luZGV4Iik7R2plPXpqZTtvKFZqZSwiYmFzZVNldCIpO1VqZT1WamU7byhIamUsInNldCIpO1dqZT1IamU7byhxamUsImNvcHlBcnJheSIpO1lqZT1xamU7byhYamUsInRvUGF0aCIpO2pqZT1YamUsS2plPXtkYXRhOm8oZnVuY3Rpb24oZSl7dmFyIHI9e2ZpZWxkOiJkYXRhIixiaW5kaW5nRXZlbnQ6ImRhdGEiLGFsbG93QmluZGluZzohMSxhbGxvd1NldHRpbmc6ITEsYWxsb3dHZXR0aW5nOiExLHNldHRpbmdFdmVudDoiZGF0YSIsc2V0dGluZ1RyaWdnZXJzRXZlbnQ6ITEsdHJpZ2dlckZuTmFtZToidHJpZ2dlciIsaW1tdXRhYmxlS2V5czp7fSx1cGRhdGVTdHlsZTohMSxiZWZvcmVHZXQ6byhmdW5jdGlvbihpKXt9LCJiZWZvcmVHZXQiKSxiZWZvcmVTZXQ6byhmdW5jdGlvbihpLGEpe30sImJlZm9yZVNldCIpLG9uU2V0Om8oZnVuY3Rpb24oaSl7fSwib25TZXQiKSxjYW5TZXQ6byhmdW5jdGlvbihpKXtyZXR1cm4hMH0sImNhblNldCIpfTtyZXR1cm4gZT1ycih7fSxyLGUpLG8oZnVuY3Rpb24oaSxhKXt2YXIgcz1lLGw9dGhpcyx1PWwubGVuZ3RoIT09dm9pZCAwLGg9dT9sOltsXSxmPXU/bFswXTpsO2lmKFp0KGkpKXt2YXIgZD1pLmluZGV4T2YoIi4iKSE9PS0xLHA9ZCYmamplKGkpO2lmKHMuYWxsb3dHZXR0aW5nJiZhPT09dm9pZCAwKXt2YXIgbTtyZXR1cm4gZiYmKHMuYmVmb3JlR2V0KGYpLHAmJmYuX3ByaXZhdGVbcy5maWVsZF1baV09PT12b2lkIDA/bT1MamUoZi5fcHJpdmF0ZVtzLmZpZWxkXSxwKTptPWYuX3ByaXZhdGVbcy5maWVsZF1baV0pLG19ZWxzZSBpZihzLmFsbG93U2V0dGluZyYmYSE9PXZvaWQgMCl7dmFyIGc9IXMuaW1tdXRhYmxlS2V5c1tpXTtpZihnKXt2YXIgeT1YMGUoe30saSxhKTtzLmJlZm9yZVNldChsLHkpO2Zvcih2YXIgdj0wLHg9aC5sZW5ndGg7djx4O3YrKyl7dmFyIGI9aFt2XTtzLmNhblNldChiKSYmKHAmJmYuX3ByaXZhdGVbcy5maWVsZF1baV09PT12b2lkIDA/V2plKGIuX3ByaXZhdGVbcy5maWVsZF0scCxhKTpiLl9wcml2YXRlW3MuZmllbGRdW2ldPWEpfXMudXBkYXRlU3R5bGUmJmwudXBkYXRlU3R5bGUoKSxzLm9uU2V0KGwpLHMuc2V0dGluZ1RyaWdnZXJzRXZlbnQmJmxbcy50cmlnZ2VyRm5OYW1lXShzLnNldHRpbmdFdmVudCl9fX1lbHNlIGlmKHMuYWxsb3dTZXR0aW5nJiZVcihpKSl7dmFyIHc9aSxDLFQsRT1PYmplY3Qua2V5cyh3KTtzLmJlZm9yZVNldChsLHcpO2Zvcih2YXIgQT0wO0E8RS5sZW5ndGg7QSsrKXtDPUVbQV0sVD13W0NdO3ZhciBTPSFzLmltbXV0YWJsZUtleXNbQ107aWYoUylmb3IodmFyIF89MDtfPGgubGVuZ3RoO18rKyl7dmFyIEk9aFtfXTtzLmNhblNldChJKSYmKEkuX3ByaXZhdGVbcy5maWVsZF1bQ109VCl9fXMudXBkYXRlU3R5bGUmJmwudXBkYXRlU3R5bGUoKSxzLm9uU2V0KGwpLHMuc2V0dGluZ1RyaWdnZXJzRXZlbnQmJmxbcy50cmlnZ2VyRm5OYW1lXShzLnNldHRpbmdFdmVudCl9ZWxzZSBpZihzLmFsbG93QmluZGluZyYmc2koaSkpe3ZhciBEPWk7bC5vbihzLmJpbmRpbmdFdmVudCxEKX1lbHNlIGlmKHMuYWxsb3dHZXR0aW5nJiZpPT09dm9pZCAwKXt2YXIgaztyZXR1cm4gZiYmKHMuYmVmb3JlR2V0KGYpLGs9Zi5fcHJpdmF0ZVtzLmZpZWxkXSksa31yZXR1cm4gbH0sImRhdGFJbXBsIil9LCJkYXRhIikscmVtb3ZlRGF0YTpvKGZ1bmN0aW9uKGUpe3ZhciByPXtmaWVsZDoiZGF0YSIsZXZlbnQ6ImRhdGEiLHRyaWdnZXJGbk5hbWU6InRyaWdnZXIiLHRyaWdnZXJFdmVudDohMSxpbW11dGFibGVLZXlzOnt9fTtyZXR1cm4gZT1ycih7fSxyLGUpLG8oZnVuY3Rpb24oaSl7dmFyIGE9ZSxzPXRoaXMsbD1zLmxlbmd0aCE9PXZvaWQgMCx1PWw/czpbc107aWYoWnQoaSkpe2Zvcih2YXIgaD1pLnNwbGl0KC9ccysvKSxmPWgubGVuZ3RoLGQ9MDtkPGY7ZCsrKXt2YXIgcD1oW2RdO2lmKCFBZihwKSl7dmFyIG09IWEuaW1tdXRhYmxlS2V5c1twXTtpZihtKWZvcih2YXIgZz0wLHk9dS5sZW5ndGg7Zzx5O2crKyl1W2ddLl9wcml2YXRlW2EuZmllbGRdW3BdPXZvaWQgMH19YS50cmlnZ2VyRXZlbnQmJnNbYS50cmlnZ2VyRm5OYW1lXShhLmV2ZW50KX1lbHNlIGlmKGk9PT12b2lkIDApe2Zvcih2YXIgdj0wLHg9dS5sZW5ndGg7djx4O3YrKylmb3IodmFyIGI9dVt2XS5fcHJpdmF0ZVthLmZpZWxkXSx3PU9iamVjdC5rZXlzKGIpLEM9MDtDPHcubGVuZ3RoO0MrKyl7dmFyIFQ9d1tDXSxFPSFhLmltbXV0YWJsZUtleXNbVF07RSYmKGJbVF09dm9pZCAwKX1hLnRyaWdnZXJFdmVudCYmc1thLnRyaWdnZXJGbk5hbWVdKGEuZXZlbnQpfXJldHVybiBzfSwicmVtb3ZlRGF0YUltcGwiKX0sInJlbW92ZURhdGEiKX0sUWplPXtldmVudEFsaWFzZXNPbjpvKGZ1bmN0aW9uKGUpe3ZhciByPWU7ci5hZGRMaXN0ZW5lcj1yLmxpc3Rlbj1yLmJpbmQ9ci5vbixyLnVubGlzdGVuPXIudW5iaW5kPXIub2ZmPXIucmVtb3ZlTGlzdGVuZXIsci50cmlnZ2VyPXIuZW1pdCxyLnBvbj1yLnByb21pc2VPbj1mdW5jdGlvbihuLGkpe3ZhciBhPXRoaXMscz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7cmV0dXJuIG5ldyBleShmdW5jdGlvbihsLHUpe3ZhciBoPW8oZnVuY3Rpb24obSl7YS5vZmYuYXBwbHkoYSxkKSxsKG0pfSwiY2FsbGJhY2siKSxmPXMuY29uY2F0KFtoXSksZD1mLmNvbmNhdChbXSk7YS5vbi5hcHBseShhLGYpfSl9fSwiZXZlbnRBbGlhc2VzT24iKX0sY249e307W1ZZZSxLamUsUWplXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JyKGNuLHQpfSk7WmplPXthbmltYXRlOmNuLmFuaW1hdGUoKSxhbmltYXRpb246Y24uYW5pbWF0aW9uKCksYW5pbWF0ZWQ6Y24uYW5pbWF0ZWQoKSxjbGVhclF1ZXVlOmNuLmNsZWFyUXVldWUoKSxkZWxheTpjbi5kZWxheSgpLGRlbGF5QW5pbWF0aW9uOmNuLmRlbGF5QW5pbWF0aW9uKCksc3RvcDpjbi5zdG9wKCl9LGhTPXtjbGFzc2VzOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcztpZihlPT09dm9pZCAwKXt2YXIgbj1bXTtyZXR1cm4gclswXS5fcHJpdmF0ZS5jbGFzc2VzLmZvckVhY2goZnVuY3Rpb24oZyl7cmV0dXJuIG4ucHVzaChnKX0pLG59ZWxzZSBFbihlKXx8KGU9KGV8fCIiKS5tYXRjaCgvXFMrL2cpfHxbXSk7Zm9yKHZhciBpPVtdLGE9bmV3IEoxKGUpLHM9MDtzPHIubGVuZ3RoO3MrKyl7Zm9yKHZhciBsPXJbc10sdT1sLl9wcml2YXRlLGg9dS5jbGFzc2VzLGY9ITEsZD0wO2Q8ZS5sZW5ndGg7ZCsrKXt2YXIgcD1lW2RdLG09aC5oYXMocCk7aWYoIW0pe2Y9ITA7YnJlYWt9fWZ8fChmPWguc2l6ZSE9PWUubGVuZ3RoKSxmJiYodS5jbGFzc2VzPWEsaS5wdXNoKGwpKX1yZXR1cm4gaS5sZW5ndGg+MCYmdGhpcy5zcGF3bihpKS51cGRhdGVTdHlsZSgpLmVtaXQoImNsYXNzIikscn0sImNsYXNzZXMiKSxhZGRDbGFzczpvKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRvZ2dsZUNsYXNzKGUsITApfSwiYWRkQ2xhc3MiKSxoYXNDbGFzczpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXNbMF07cmV0dXJuIHIhPW51bGwmJnIuX3ByaXZhdGUuY2xhc3Nlcy5oYXMoZSl9LCJoYXNDbGFzcyIpLHRvZ2dsZUNsYXNzOm8oZnVuY3Rpb24oZSxyKXtFbihlKXx8KGU9ZS5tYXRjaCgvXFMrL2cpfHxbXSk7Zm9yKHZhciBuPXRoaXMsaT1yPT09dm9pZCAwLGE9W10scz0wLGw9bi5sZW5ndGg7czxsO3MrKylmb3IodmFyIHU9bltzXSxoPXUuX3ByaXZhdGUuY2xhc3NlcyxmPSExLGQ9MDtkPGUubGVuZ3RoO2QrKyl7dmFyIHA9ZVtkXSxtPWguaGFzKHApLGc9ITE7cnx8aSYmIW0/KGguYWRkKHApLGc9ITApOighcnx8aSYmbSkmJihoLmRlbGV0ZShwKSxnPSEwKSwhZiYmZyYmKGEucHVzaCh1KSxmPSEwKX1yZXR1cm4gYS5sZW5ndGg+MCYmdGhpcy5zcGF3bihhKS51cGRhdGVTdHlsZSgpLmVtaXQoImNsYXNzIiksbn0sInRvZ2dsZUNsYXNzIikscmVtb3ZlQ2xhc3M6byhmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50b2dnbGVDbGFzcyhlLCExKX0sInJlbW92ZUNsYXNzIiksZmxhc2hDbGFzczpvKGZ1bmN0aW9uKGUscil7dmFyIG49dGhpcztpZihyPT1udWxsKXI9MjUwO2Vsc2UgaWYocj09PTApcmV0dXJuIG47cmV0dXJuIG4uYWRkQ2xhc3MoZSksc2V0VGltZW91dChmdW5jdGlvbigpe24ucmVtb3ZlQ2xhc3MoZSl9LHIpLG59LCJmbGFzaENsYXNzIil9O2hTLmNsYXNzTmFtZT1oUy5jbGFzc05hbWVzPWhTLmNsYXNzZXM7VnI9e21ldGFDaGFyOiJbXFwhXFxcIlxcI1xcJFxcJVxcJlxcJ1xcKFxcKVxcKlxcK1xcLFxcLlxcL1xcOlxcO1xcPFxcPVxcPlxcP1xcQFxcW1xcXVxcXlxcYFxce1xcfFxcfVxcfl0iLGNvbXBhcmF0b3JPcDoiPXxcXCE9fD58Pj18PHw8PXxcXCQ9fFxcXj18XFwqPSIsYm9vbE9wOiJcXD98XFwhfFxcXiIsc3RyaW5nOmAiKD86XFxcXCJ8W14iXSkqInwnKD86XFxcXCd8W14nXSkqJ2AsbnVtYmVyOkhpLG1ldGE6ImRlZ3JlZXxpbmRlZ3JlZXxvdXRkZWdyZWUiLHNlcGFyYXRvcjoiXFxzKixcXHMqIixkZXNjZW5kYW50OiJcXHMrIixjaGlsZDoiXFxzKz5cXHMrIixzdWJqZWN0OiJcXCQiLGdyb3VwOiJub2RlfGVkZ2V8XFwqIixkaXJlY3RlZEVkZ2U6IlxccystPlxccysiLHVuZGlyZWN0ZWRFZGdlOiJcXHMrPC0+XFxzKyJ9O1ZyLnZhcmlhYmxlPSIoPzpbXFx3LS5dfCg/OlxcXFwiK1ZyLm1ldGFDaGFyKyIpKSsiO1ZyLmNsYXNzTmFtZT0iKD86W1xcdy1dfCg/OlxcXFwiK1ZyLm1ldGFDaGFyKyIpKSsiO1ZyLnZhbHVlPVZyLnN0cmluZysifCIrVnIubnVtYmVyO1ZyLmlkPVZyLnZhcmlhYmxlOyhmdW5jdGlvbigpe3ZhciB0LGUscjtmb3IodD1Wci5jb21wYXJhdG9yT3Auc3BsaXQoInwiKSxyPTA7cjx0Lmxlbmd0aDtyKyspZT10W3JdLFZyLmNvbXBhcmF0b3JPcCs9InxAIitlO2Zvcih0PVZyLmNvbXBhcmF0b3JPcC5zcGxpdCgifCIpLHI9MDtyPHQubGVuZ3RoO3IrKyllPXRbcl0sIShlLmluZGV4T2YoIiEiKT49MCkmJmUhPT0iPSImJihWci5jb21wYXJhdG9yT3ArPSJ8XFwhIitlKX0pKCk7bW49byhmdW5jdGlvbigpe3JldHVybntjaGVja3M6W119fSwibmV3UXVlcnkiKSwkdD17R1JPVVA6MCxDT0xMRUNUSU9OOjEsRklMVEVSOjIsREFUQV9DT01QQVJFOjMsREFUQV9FWElTVDo0LERBVEFfQk9PTDo1LE1FVEFfQ09NUEFSRTo2LFNUQVRFOjcsSUQ6OCxDTEFTUzo5LFVORElSRUNURURfRURHRToxMCxESVJFQ1RFRF9FREdFOjExLE5PREVfU09VUkNFOjEyLE5PREVfVEFSR0VUOjEzLE5PREVfTkVJR0hCT1I6MTQsQ0hJTEQ6MTUsREVTQ0VOREFOVDoxNixQQVJFTlQ6MTcsQU5DRVNUT1I6MTgsQ09NUE9VTkRfU1BMSVQ6MTksVFJVRToyMH0selA9W3tzZWxlY3RvcjoiOnNlbGVjdGVkIixtYXRjaGVzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2VsZWN0ZWQoKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6dW5zZWxlY3RlZCIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiFlLnNlbGVjdGVkKCl9LCJtYXRjaGVzIil9LHtzZWxlY3RvcjoiOnNlbGVjdGFibGUiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4gZS5zZWxlY3RhYmxlKCl9LCJtYXRjaGVzIil9LHtzZWxlY3RvcjoiOnVuc2VsZWN0YWJsZSIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiFlLnNlbGVjdGFibGUoKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6bG9ja2VkIixtYXRjaGVzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIGUubG9ja2VkKCl9LCJtYXRjaGVzIil9LHtzZWxlY3RvcjoiOnVubG9ja2VkIixtYXRjaGVzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIWUubG9ja2VkKCl9LCJtYXRjaGVzIil9LHtzZWxlY3RvcjoiOnZpc2libGUiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4gZS52aXNpYmxlKCl9LCJtYXRjaGVzIil9LHtzZWxlY3RvcjoiOmhpZGRlbiIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiFlLnZpc2libGUoKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6dHJhbnNwYXJlbnQiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4gZS50cmFuc3BhcmVudCgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjpncmFiYmVkIixtYXRjaGVzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ3JhYmJlZCgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjpmcmVlIixtYXRjaGVzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIWUuZ3JhYmJlZCgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjpyZW1vdmVkIixtYXRjaGVzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVtb3ZlZCgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjppbnNpZGUiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4hZS5yZW1vdmVkKCl9LCJtYXRjaGVzIil9LHtzZWxlY3RvcjoiOmdyYWJiYWJsZSIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLmdyYWJiYWJsZSgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6Ijp1bmdyYWJiYWJsZSIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiFlLmdyYWJiYWJsZSgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjphbmltYXRlZCIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLmFuaW1hdGVkKCl9LCJtYXRjaGVzIil9LHtzZWxlY3RvcjoiOnVuYW5pbWF0ZWQiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4hZS5hbmltYXRlZCgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjpwYXJlbnQiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4gZS5pc1BhcmVudCgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjpjaGlsZGxlc3MiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4gZS5pc0NoaWxkbGVzcygpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjpjaGlsZCIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlzQ2hpbGQoKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6b3JwaGFuIixtYXRjaGVzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIGUuaXNPcnBoYW4oKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6bm9ub3JwaGFuIixtYXRjaGVzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIGUuaXNDaGlsZCgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6Ijpjb21wb3VuZCIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlzTm9kZSgpP2UuaXNQYXJlbnQoKTplLnNvdXJjZSgpLmlzUGFyZW50KCl8fGUudGFyZ2V0KCkuaXNQYXJlbnQoKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6bG9vcCIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlzTG9vcCgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjpzaW1wbGUiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4gZS5pc1NpbXBsZSgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjphY3RpdmUiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4gZS5hY3RpdmUoKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6aW5hY3RpdmUiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4hZS5hY3RpdmUoKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6YmFja2dyb3VuZGluZyIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLmJhY2tncm91bmRpbmcoKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6bm9uYmFja2dyb3VuZGluZyIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiFlLmJhY2tncm91bmRpbmcoKX0sIm1hdGNoZXMiKX1dLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gaFdlKHQuc2VsZWN0b3IsZS5zZWxlY3Rvcil9KSxKamU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9e30sZSxyPTA7cjx6UC5sZW5ndGg7cisrKWU9elBbcl0sdFtlLnNlbGVjdG9yXT1lLm1hdGNoZXM7cmV0dXJuIHR9KCksZUtlPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gSmplW2VdKHIpfSwic3RhdGVTZWxlY3Rvck1hdGNoZXMiKSx0S2U9IigiK3pQLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5zZWxlY3Rvcn0pLmpvaW4oInwiKSsiKSIsQjE9byhmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKG5ldyBSZWdFeHAoIlxcXFwoIitWci5tZXRhQ2hhcisiKSIsImciKSxmdW5jdGlvbihyLG4pe3JldHVybiBufSl9LCJjbGVhbk1ldGFDaGFycyIpLFRmPW8oZnVuY3Rpb24oZSxyLG4pe2VbZS5sZW5ndGgtMV09bn0sInJlcGxhY2VMYXN0UXVlcnkiKSxHUD1be25hbWU6Imdyb3VwIixxdWVyeTohMCxyZWdleDoiKCIrVnIuZ3JvdXArIikiLHBvcHVsYXRlOm8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPV9pKG4sMSksYT1pWzBdO3IuY2hlY2tzLnB1c2goe3R5cGU6JHQuR1JPVVAsdmFsdWU6YT09PSIqIj9hOmErInMifSl9LCJwb3B1bGF0ZSIpfSx7bmFtZToic3RhdGUiLHF1ZXJ5OiEwLHJlZ2V4OnRLZSxwb3B1bGF0ZTpvKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1faShuLDEpLGE9aVswXTtyLmNoZWNrcy5wdXNoKHt0eXBlOiR0LlNUQVRFLHZhbHVlOmF9KX0sInBvcHVsYXRlIil9LHtuYW1lOiJpZCIscXVlcnk6ITAscmVnZXg6IlxcIygiK1ZyLmlkKyIpIixwb3B1bGF0ZTpvKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1faShuLDEpLGE9aVswXTtyLmNoZWNrcy5wdXNoKHt0eXBlOiR0LklELHZhbHVlOkIxKGEpfSl9LCJwb3B1bGF0ZSIpfSx7bmFtZToiY2xhc3NOYW1lIixxdWVyeTohMCxyZWdleDoiXFwuKCIrVnIuY2xhc3NOYW1lKyIpIixwb3B1bGF0ZTpvKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1faShuLDEpLGE9aVswXTtyLmNoZWNrcy5wdXNoKHt0eXBlOiR0LkNMQVNTLHZhbHVlOkIxKGEpfSl9LCJwb3B1bGF0ZSIpfSx7bmFtZToiZGF0YUV4aXN0cyIscXVlcnk6ITAscmVnZXg6IlxcW1xccyooIitWci52YXJpYWJsZSsiKVxccypcXF0iLHBvcHVsYXRlOm8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPV9pKG4sMSksYT1pWzBdO3IuY2hlY2tzLnB1c2goe3R5cGU6JHQuREFUQV9FWElTVCxmaWVsZDpCMShhKX0pfSwicG9wdWxhdGUiKX0se25hbWU6ImRhdGFDb21wYXJlIixxdWVyeTohMCxyZWdleDoiXFxbXFxzKigiK1ZyLnZhcmlhYmxlKyIpXFxzKigiK1ZyLmNvbXBhcmF0b3JPcCsiKVxccyooIitWci52YWx1ZSsiKVxccypcXF0iLHBvcHVsYXRlOm8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPV9pKG4sMyksYT1pWzBdLHM9aVsxXSxsPWlbMl0sdT1uZXcgUmVnRXhwKCJeIitWci5zdHJpbmcrIiQiKS5leGVjKGwpIT1udWxsO3U/bD1sLnN1YnN0cmluZygxLGwubGVuZ3RoLTEpOmw9cGFyc2VGbG9hdChsKSxyLmNoZWNrcy5wdXNoKHt0eXBlOiR0LkRBVEFfQ09NUEFSRSxmaWVsZDpCMShhKSxvcGVyYXRvcjpzLHZhbHVlOmx9KX0sInBvcHVsYXRlIil9LHtuYW1lOiJkYXRhQm9vbCIscXVlcnk6ITAscmVnZXg6IlxcW1xccyooIitWci5ib29sT3ArIilcXHMqKCIrVnIudmFyaWFibGUrIilcXHMqXFxdIixwb3B1bGF0ZTpvKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1faShuLDIpLGE9aVswXSxzPWlbMV07ci5jaGVja3MucHVzaCh7dHlwZTokdC5EQVRBX0JPT0wsZmllbGQ6QjEocyksb3BlcmF0b3I6YX0pfSwicG9wdWxhdGUiKX0se25hbWU6Im1ldGFDb21wYXJlIixxdWVyeTohMCxyZWdleDoiXFxbXFxbXFxzKigiK1ZyLm1ldGErIilcXHMqKCIrVnIuY29tcGFyYXRvck9wKyIpXFxzKigiK1ZyLm51bWJlcisiKVxccypcXF1cXF0iLHBvcHVsYXRlOm8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPV9pKG4sMyksYT1pWzBdLHM9aVsxXSxsPWlbMl07ci5jaGVja3MucHVzaCh7dHlwZTokdC5NRVRBX0NPTVBBUkUsZmllbGQ6QjEoYSksb3BlcmF0b3I6cyx2YWx1ZTpwYXJzZUZsb2F0KGwpfSl9LCJwb3B1bGF0ZSIpfSx7bmFtZToibmV4dFF1ZXJ5IixzZXBhcmF0b3I6ITAscmVnZXg6VnIuc2VwYXJhdG9yLHBvcHVsYXRlOm8oZnVuY3Rpb24oZSxyKXt2YXIgbj1lLmN1cnJlbnRTdWJqZWN0LGk9ZS5lZGdlQ291bnQsYT1lLmNvbXBvdW5kQ291bnQscz1lW2UubGVuZ3RoLTFdO24hPW51bGwmJihzLnN1YmplY3Q9bixlLmN1cnJlbnRTdWJqZWN0PW51bGwpLHMuZWRnZUNvdW50PWkscy5jb21wb3VuZENvdW50PWEsZS5lZGdlQ291bnQ9MCxlLmNvbXBvdW5kQ291bnQ9MDt2YXIgbD1lW2UubGVuZ3RoKytdPW1uKCk7cmV0dXJuIGx9LCJwb3B1bGF0ZSIpfSx7bmFtZToiZGlyZWN0ZWRFZGdlIixzZXBhcmF0b3I6ITAscmVnZXg6VnIuZGlyZWN0ZWRFZGdlLHBvcHVsYXRlOm8oZnVuY3Rpb24oZSxyKXtpZihlLmN1cnJlbnRTdWJqZWN0PT1udWxsKXt2YXIgbj1tbigpLGk9cixhPW1uKCk7cmV0dXJuIG4uY2hlY2tzLnB1c2goe3R5cGU6JHQuRElSRUNURURfRURHRSxzb3VyY2U6aSx0YXJnZXQ6YX0pLFRmKGUscixuKSxlLmVkZ2VDb3VudCsrLGF9ZWxzZXt2YXIgcz1tbigpLGw9cix1PW1uKCk7cmV0dXJuIHMuY2hlY2tzLnB1c2goe3R5cGU6JHQuTk9ERV9TT1VSQ0Usc291cmNlOmwsdGFyZ2V0OnV9KSxUZihlLHIscyksZS5lZGdlQ291bnQrKyx1fX0sInBvcHVsYXRlIil9LHtuYW1lOiJ1bmRpcmVjdGVkRWRnZSIsc2VwYXJhdG9yOiEwLHJlZ2V4OlZyLnVuZGlyZWN0ZWRFZGdlLHBvcHVsYXRlOm8oZnVuY3Rpb24oZSxyKXtpZihlLmN1cnJlbnRTdWJqZWN0PT1udWxsKXt2YXIgbj1tbigpLGk9cixhPW1uKCk7cmV0dXJuIG4uY2hlY2tzLnB1c2goe3R5cGU6JHQuVU5ESVJFQ1RFRF9FREdFLG5vZGVzOltpLGFdfSksVGYoZSxyLG4pLGUuZWRnZUNvdW50KyssYX1lbHNle3ZhciBzPW1uKCksbD1yLHU9bW4oKTtyZXR1cm4gcy5jaGVja3MucHVzaCh7dHlwZTokdC5OT0RFX05FSUdIQk9SLG5vZGU6bCxuZWlnaGJvcjp1fSksVGYoZSxyLHMpLHV9fSwicG9wdWxhdGUiKX0se25hbWU6ImNoaWxkIixzZXBhcmF0b3I6ITAscmVnZXg6VnIuY2hpbGQscG9wdWxhdGU6byhmdW5jdGlvbihlLHIpe2lmKGUuY3VycmVudFN1YmplY3Q9PW51bGwpe3ZhciBuPW1uKCksaT1tbigpLGE9ZVtlLmxlbmd0aC0xXTtyZXR1cm4gbi5jaGVja3MucHVzaCh7dHlwZTokdC5DSElMRCxwYXJlbnQ6YSxjaGlsZDppfSksVGYoZSxyLG4pLGUuY29tcG91bmRDb3VudCsrLGl9ZWxzZSBpZihlLmN1cnJlbnRTdWJqZWN0PT09cil7dmFyIHM9bW4oKSxsPWVbZS5sZW5ndGgtMV0sdT1tbigpLGg9bW4oKSxmPW1uKCksZD1tbigpO3JldHVybiBzLmNoZWNrcy5wdXNoKHt0eXBlOiR0LkNPTVBPVU5EX1NQTElULGxlZnQ6bCxyaWdodDp1LHN1YmplY3Q6aH0pLGguY2hlY2tzPXIuY2hlY2tzLHIuY2hlY2tzPVt7dHlwZTokdC5UUlVFfV0sZC5jaGVja3MucHVzaCh7dHlwZTokdC5UUlVFfSksdS5jaGVja3MucHVzaCh7dHlwZTokdC5QQVJFTlQscGFyZW50OmQsY2hpbGQ6Zn0pLFRmKGUsbCxzKSxlLmN1cnJlbnRTdWJqZWN0PWgsZS5jb21wb3VuZENvdW50KyssZn1lbHNle3ZhciBwPW1uKCksbT1tbigpLGc9W3t0eXBlOiR0LlBBUkVOVCxwYXJlbnQ6cCxjaGlsZDptfV07cmV0dXJuIHAuY2hlY2tzPXIuY2hlY2tzLHIuY2hlY2tzPWcsZS5jb21wb3VuZENvdW50KyssbX19LCJwb3B1bGF0ZSIpfSx7bmFtZToiZGVzY2VuZGFudCIsc2VwYXJhdG9yOiEwLHJlZ2V4OlZyLmRlc2NlbmRhbnQscG9wdWxhdGU6byhmdW5jdGlvbihlLHIpe2lmKGUuY3VycmVudFN1YmplY3Q9PW51bGwpe3ZhciBuPW1uKCksaT1tbigpLGE9ZVtlLmxlbmd0aC0xXTtyZXR1cm4gbi5jaGVja3MucHVzaCh7dHlwZTokdC5ERVNDRU5EQU5ULGFuY2VzdG9yOmEsZGVzY2VuZGFudDppfSksVGYoZSxyLG4pLGUuY29tcG91bmRDb3VudCsrLGl9ZWxzZSBpZihlLmN1cnJlbnRTdWJqZWN0PT09cil7dmFyIHM9bW4oKSxsPWVbZS5sZW5ndGgtMV0sdT1tbigpLGg9bW4oKSxmPW1uKCksZD1tbigpO3JldHVybiBzLmNoZWNrcy5wdXNoKHt0eXBlOiR0LkNPTVBPVU5EX1NQTElULGxlZnQ6bCxyaWdodDp1LHN1YmplY3Q6aH0pLGguY2hlY2tzPXIuY2hlY2tzLHIuY2hlY2tzPVt7dHlwZTokdC5UUlVFfV0sZC5jaGVja3MucHVzaCh7dHlwZTokdC5UUlVFfSksdS5jaGVja3MucHVzaCh7dHlwZTokdC5BTkNFU1RPUixhbmNlc3RvcjpkLGRlc2NlbmRhbnQ6Zn0pLFRmKGUsbCxzKSxlLmN1cnJlbnRTdWJqZWN0PWgsZS5jb21wb3VuZENvdW50KyssZn1lbHNle3ZhciBwPW1uKCksbT1tbigpLGc9W3t0eXBlOiR0LkFOQ0VTVE9SLGFuY2VzdG9yOnAsZGVzY2VuZGFudDptfV07cmV0dXJuIHAuY2hlY2tzPXIuY2hlY2tzLHIuY2hlY2tzPWcsZS5jb21wb3VuZENvdW50KyssbX19LCJwb3B1bGF0ZSIpfSx7bmFtZToic3ViamVjdCIsbW9kaWZpZXI6ITAscmVnZXg6VnIuc3ViamVjdCxwb3B1bGF0ZTpvKGZ1bmN0aW9uKGUscil7aWYoZS5jdXJyZW50U3ViamVjdCE9bnVsbCYmZS5jdXJyZW50U3ViamVjdCE9PXIpcmV0dXJuIHVuKCJSZWRlZmluaXRpb24gb2Ygc3ViamVjdCBpbiBzZWxlY3RvciBgIitlLnRvU3RyaW5nKCkrImAiKSwhMTtlLmN1cnJlbnRTdWJqZWN0PXI7dmFyIG49ZVtlLmxlbmd0aC0xXSxpPW4uY2hlY2tzWzBdLGE9aT09bnVsbD9udWxsOmkudHlwZTthPT09JHQuRElSRUNURURfRURHRT9pLnR5cGU9JHQuTk9ERV9UQVJHRVQ6YT09PSR0LlVORElSRUNURURfRURHRSYmKGkudHlwZT0kdC5OT0RFX05FSUdIQk9SLGkubm9kZT1pLm5vZGVzWzFdLGkubmVpZ2hib3I9aS5ub2Rlc1swXSxpLm5vZGVzPW51bGwpfSwicG9wdWxhdGUiKX1dO0dQLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQucmVnZXhPYmo9bmV3IFJlZ0V4cCgiXiIrdC5yZWdleCl9KTtyS2U9byhmdW5jdGlvbihlKXtmb3IodmFyIHIsbixpLGE9MDthPEdQLmxlbmd0aDthKyspe3ZhciBzPUdQW2FdLGw9cy5uYW1lLHU9ZS5tYXRjaChzLnJlZ2V4T2JqKTtpZih1IT1udWxsKXtuPXUscj1zLGk9bDt2YXIgaD11WzBdO2U9ZS5zdWJzdHJpbmcoaC5sZW5ndGgpO2JyZWFrfX1yZXR1cm57ZXhwcjpyLG1hdGNoOm4sbmFtZTppLHJlbWFpbmluZzplfX0sImNvbnN1bWVFeHByIiksbktlPW8oZnVuY3Rpb24oZSl7dmFyIHI9ZS5tYXRjaCgvXlxzKy8pO2lmKHIpe3ZhciBuPXJbMF07ZT1lLnN1YnN0cmluZyhuLmxlbmd0aCl9cmV0dXJuIGV9LCJjb25zdW1lV2hpdGVzcGFjZSIpLGlLZT1vKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMsbj1yLmlucHV0VGV4dD1lLGk9clswXT1tbigpO2ZvcihyLmxlbmd0aD0xLG49bktlKG4pOzspe3ZhciBhPXJLZShuKTtpZihhLmV4cHI9PW51bGwpcmV0dXJuIHVuKCJUaGUgc2VsZWN0b3IgYCIrZSsiYGlzIGludmFsaWQiKSwhMTt2YXIgcz1hLm1hdGNoLnNsaWNlKDEpLGw9YS5leHByLnBvcHVsYXRlKHIsaSxzKTtpZihsPT09ITEpcmV0dXJuITE7aWYobCE9bnVsbCYmKGk9bCksbj1hLnJlbWFpbmluZyxuLm1hdGNoKC9eXHMqJC8pKWJyZWFrfXZhciB1PXJbci5sZW5ndGgtMV07ci5jdXJyZW50U3ViamVjdCE9bnVsbCYmKHUuc3ViamVjdD1yLmN1cnJlbnRTdWJqZWN0KSx1LmVkZ2VDb3VudD1yLmVkZ2VDb3VudCx1LmNvbXBvdW5kQ291bnQ9ci5jb21wb3VuZENvdW50O2Zvcih2YXIgaD0wO2g8ci5sZW5ndGg7aCsrKXt2YXIgZj1yW2hdO2lmKGYuY29tcG91bmRDb3VudD4wJiZmLmVkZ2VDb3VudD4wKXJldHVybiB1bigiVGhlIHNlbGVjdG9yIGAiK2UrImAgaXMgaW52YWxpZCBiZWNhdXNlIGl0IHVzZXMgYm90aCBhIGNvbXBvdW5kIHNlbGVjdG9yIGFuZCBhbiBlZGdlIHNlbGVjdG9yIiksITE7aWYoZi5lZGdlQ291bnQ+MSlyZXR1cm4gdW4oIlRoZSBzZWxlY3RvciBgIitlKyJgIGlzIGludmFsaWQgYmVjYXVzZSBpdCB1c2VzIG11bHRpcGxlIGVkZ2Ugc2VsZWN0b3JzIiksITE7Zi5lZGdlQ291bnQ9PT0xJiZ1bigiVGhlIHNlbGVjdG9yIGAiK2UrImAgaXMgZGVwcmVjYXRlZC4gIEVkZ2Ugc2VsZWN0b3JzIGRvIG5vdCB0YWtlIGVmZmVjdCBvbiBjaGFuZ2VzIHRvIHNvdXJjZSBhbmQgdGFyZ2V0IG5vZGVzIGFmdGVyIGFuIGVkZ2UgaXMgYWRkZWQsIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLiAgVXNlIGEgY2xhc3Mgb3IgZGF0YSBzZWxlY3RvciBvbiBlZGdlcyBpbnN0ZWFkLCB1cGRhdGluZyB0aGUgY2xhc3Mgb3IgZGF0YSBvZiBhbiBlZGdlIHdoZW4geW91ciBhcHAgZGV0ZWN0cyBhIGNoYW5nZSBpbiBzb3VyY2Ugb3IgdGFyZ2V0IG5vZGVzLiIpfXJldHVybiEwfSwicGFyc2UiKSxhS2U9byhmdW5jdGlvbigpe2lmKHRoaXMudG9TdHJpbmdDYWNoZSE9bnVsbClyZXR1cm4gdGhpcy50b1N0cmluZ0NhY2hlO2Zvcih2YXIgZT1vKGZ1bmN0aW9uKGYpe3JldHVybiBmPz8iIn0sImNsZWFuIikscj1vKGZ1bmN0aW9uKGYpe3JldHVybiBadChmKT8nIicrZisnIic6ZShmKX0sImNsZWFuVmFsIiksbj1vKGZ1bmN0aW9uKGYpe3JldHVybiIgIitmKyIgIn0sInNwYWNlIiksaT1vKGZ1bmN0aW9uKGYsZCl7dmFyIHA9Zi50eXBlLG09Zi52YWx1ZTtzd2l0Y2gocCl7Y2FzZSAkdC5HUk9VUDp7dmFyIGc9ZShtKTtyZXR1cm4gZy5zdWJzdHJpbmcoMCxnLmxlbmd0aC0xKX1jYXNlICR0LkRBVEFfQ09NUEFSRTp7dmFyIHk9Zi5maWVsZCx2PWYub3BlcmF0b3I7cmV0dXJuIlsiK3krbihlKHYpKStyKG0pKyJdIn1jYXNlICR0LkRBVEFfQk9PTDp7dmFyIHg9Zi5vcGVyYXRvcixiPWYuZmllbGQ7cmV0dXJuIlsiK2UoeCkrYisiXSJ9Y2FzZSAkdC5EQVRBX0VYSVNUOnt2YXIgdz1mLmZpZWxkO3JldHVybiJbIit3KyJdIn1jYXNlICR0Lk1FVEFfQ09NUEFSRTp7dmFyIEM9Zi5vcGVyYXRvcixUPWYuZmllbGQ7cmV0dXJuIltbIitUK24oZShDKSkrcihtKSsiXV0ifWNhc2UgJHQuU1RBVEU6cmV0dXJuIG07Y2FzZSAkdC5JRDpyZXR1cm4iIyIrbTtjYXNlICR0LkNMQVNTOnJldHVybiIuIittO2Nhc2UgJHQuUEFSRU5UOmNhc2UgJHQuQ0hJTEQ6cmV0dXJuIGEoZi5wYXJlbnQsZCkrbigiPiIpK2EoZi5jaGlsZCxkKTtjYXNlICR0LkFOQ0VTVE9SOmNhc2UgJHQuREVTQ0VOREFOVDpyZXR1cm4gYShmLmFuY2VzdG9yLGQpKyIgIithKGYuZGVzY2VuZGFudCxkKTtjYXNlICR0LkNPTVBPVU5EX1NQTElUOnt2YXIgRT1hKGYubGVmdCxkKSxBPWEoZi5zdWJqZWN0LGQpLFM9YShmLnJpZ2h0LGQpO3JldHVybiBFKyhFLmxlbmd0aD4wPyIgIjoiIikrQStTfWNhc2UgJHQuVFJVRTpyZXR1cm4iIn19LCJjaGVja1RvU3RyaW5nIiksYT1vKGZ1bmN0aW9uKGYsZCl7cmV0dXJuIGYuY2hlY2tzLnJlZHVjZShmdW5jdGlvbihwLG0sZyl7cmV0dXJuIHArKGQ9PT1mJiZnPT09MD8iJCI6IiIpK2kobSxkKX0sIiIpfSwicXVlcnlUb1N0cmluZyIpLHM9IiIsbD0wO2w8dGhpcy5sZW5ndGg7bCsrKXt2YXIgdT10aGlzW2xdO3MrPWEodSx1LnN1YmplY3QpLHRoaXMubGVuZ3RoPjEmJmw8dGhpcy5sZW5ndGgtMSYmKHMrPSIsICIpfXJldHVybiB0aGlzLnRvU3RyaW5nQ2FjaGU9cyxzfSwidG9TdHJpbmciKSxzS2U9e3BhcnNlOmlLZSx0b1N0cmluZzphS2V9LEJtZT1vKGZ1bmN0aW9uKGUscixuKXt2YXIgaSxhPVp0KGUpLHM9Q3QoZSksbD1adChuKSx1LGgsZj0hMSxkPSExLHA9ITE7c3dpdGNoKHIuaW5kZXhPZigiISIpPj0wJiYocj1yLnJlcGxhY2UoIiEiLCIiKSxkPSEwKSxyLmluZGV4T2YoIkAiKT49MCYmKHI9ci5yZXBsYWNlKCJAIiwiIiksZj0hMCksKGF8fGx8fGYpJiYodT0hYSYmIXM/IiI6IiIrZSxoPSIiK24pLGYmJihlPXU9dS50b0xvd2VyQ2FzZSgpLG49aD1oLnRvTG93ZXJDYXNlKCkpLHIpe2Nhc2UiKj0iOmk9dS5pbmRleE9mKGgpPj0wO2JyZWFrO2Nhc2UiJD0iOmk9dS5pbmRleE9mKGgsdS5sZW5ndGgtaC5sZW5ndGgpPj0wO2JyZWFrO2Nhc2UiXj0iOmk9dS5pbmRleE9mKGgpPT09MDticmVhaztjYXNlIj0iOmk9ZT09PW47YnJlYWs7Y2FzZSI+IjpwPSEwLGk9ZT5uO2JyZWFrO2Nhc2UiPj0iOnA9ITAsaT1lPj1uO2JyZWFrO2Nhc2UiPCI6cD0hMCxpPWU8bjticmVhaztjYXNlIjw9IjpwPSEwLGk9ZTw9bjticmVhaztkZWZhdWx0Omk9ITE7YnJlYWt9cmV0dXJuIGQmJihlIT1udWxsfHwhcCkmJihpPSFpKSxpfSwidmFsQ21wIiksb0tlPW8oZnVuY3Rpb24oZSxyKXtzd2l0Y2gocil7Y2FzZSI/IjpyZXR1cm4hIWU7Y2FzZSIhIjpyZXR1cm4hZTtjYXNlIl4iOnJldHVybiBlPT09dm9pZCAwfX0sImJvb2xDbXAiKSxsS2U9byhmdW5jdGlvbihlKXtyZXR1cm4gZSE9PXZvaWQgMH0sImV4aXN0Q21wIiksaEI9byhmdW5jdGlvbihlLHIpe3JldHVybiBlLmRhdGEocil9LCJkYXRhIiksY0tlPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gZVtyXSgpfSwibWV0YSIpLGZpPVtdLHpuPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gZS5jaGVja3MuZXZlcnkoZnVuY3Rpb24obil7cmV0dXJuIGZpW24udHlwZV0obixyKX0pfSwibWF0Y2hlcyIpO2ZpWyR0LkdST1VQXT1mdW5jdGlvbih0LGUpe3ZhciByPXQudmFsdWU7cmV0dXJuIHI9PT0iKiJ8fHI9PT1lLmdyb3VwKCl9O2ZpWyR0LlNUQVRFXT1mdW5jdGlvbih0LGUpe3ZhciByPXQudmFsdWU7cmV0dXJuIGVLZShyLGUpfTtmaVskdC5JRF09ZnVuY3Rpb24odCxlKXt2YXIgcj10LnZhbHVlO3JldHVybiBlLmlkKCk9PT1yfTtmaVskdC5DTEFTU109ZnVuY3Rpb24odCxlKXt2YXIgcj10LnZhbHVlO3JldHVybiBlLmhhc0NsYXNzKHIpfTtmaVskdC5NRVRBX0NPTVBBUkVdPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5maWVsZCxuPXQub3BlcmF0b3IsaT10LnZhbHVlO3JldHVybiBCbWUoY0tlKGUsciksbixpKX07ZmlbJHQuREFUQV9DT01QQVJFXT1mdW5jdGlvbih0LGUpe3ZhciByPXQuZmllbGQsbj10Lm9wZXJhdG9yLGk9dC52YWx1ZTtyZXR1cm4gQm1lKGhCKGUsciksbixpKX07ZmlbJHQuREFUQV9CT09MXT1mdW5jdGlvbih0LGUpe3ZhciByPXQuZmllbGQsbj10Lm9wZXJhdG9yO3JldHVybiBvS2UoaEIoZSxyKSxuKX07ZmlbJHQuREFUQV9FWElTVF09ZnVuY3Rpb24odCxlKXt2YXIgcj10LmZpZWxkO3JldHVybiB0Lm9wZXJhdG9yLGxLZShoQihlLHIpKX07ZmlbJHQuVU5ESVJFQ1RFRF9FREdFXT1mdW5jdGlvbih0LGUpe3ZhciByPXQubm9kZXNbMF0sbj10Lm5vZGVzWzFdLGk9ZS5zb3VyY2UoKSxhPWUudGFyZ2V0KCk7cmV0dXJuIHpuKHIsaSkmJnpuKG4sYSl8fHpuKG4saSkmJnpuKHIsYSl9O2ZpWyR0Lk5PREVfTkVJR0hCT1JdPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHpuKHQubm9kZSxlKSYmZS5uZWlnaGJvcmhvb2QoKS5zb21lKGZ1bmN0aW9uKHIpe3JldHVybiByLmlzTm9kZSgpJiZ6bih0Lm5laWdoYm9yLHIpfSl9O2ZpWyR0LkRJUkVDVEVEX0VER0VdPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHpuKHQuc291cmNlLGUuc291cmNlKCkpJiZ6bih0LnRhcmdldCxlLnRhcmdldCgpKX07ZmlbJHQuTk9ERV9TT1VSQ0VdPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHpuKHQuc291cmNlLGUpJiZlLm91dGdvZXJzKCkuc29tZShmdW5jdGlvbihyKXtyZXR1cm4gci5pc05vZGUoKSYmem4odC50YXJnZXQscil9KX07ZmlbJHQuTk9ERV9UQVJHRVRdPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHpuKHQudGFyZ2V0LGUpJiZlLmluY29tZXJzKCkuc29tZShmdW5jdGlvbihyKXtyZXR1cm4gci5pc05vZGUoKSYmem4odC5zb3VyY2Uscil9KX07ZmlbJHQuQ0hJTERdPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHpuKHQuY2hpbGQsZSkmJnpuKHQucGFyZW50LGUucGFyZW50KCkpfTtmaVskdC5QQVJFTlRdPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHpuKHQucGFyZW50LGUpJiZlLmNoaWxkcmVuKCkuc29tZShmdW5jdGlvbihyKXtyZXR1cm4gem4odC5jaGlsZCxyKX0pfTtmaVskdC5ERVNDRU5EQU5UXT1mdW5jdGlvbih0LGUpe3JldHVybiB6bih0LmRlc2NlbmRhbnQsZSkmJmUuYW5jZXN0b3JzKCkuc29tZShmdW5jdGlvbihyKXtyZXR1cm4gem4odC5hbmNlc3RvcixyKX0pfTtmaVskdC5BTkNFU1RPUl09ZnVuY3Rpb24odCxlKXtyZXR1cm4gem4odC5hbmNlc3RvcixlKSYmZS5kZXNjZW5kYW50cygpLnNvbWUoZnVuY3Rpb24ocil7cmV0dXJuIHpuKHQuZGVzY2VuZGFudCxyKX0pfTtmaVskdC5DT01QT1VORF9TUExJVF09ZnVuY3Rpb24odCxlKXtyZXR1cm4gem4odC5zdWJqZWN0LGUpJiZ6bih0LmxlZnQsZSkmJnpuKHQucmlnaHQsZSl9O2ZpWyR0LlRSVUVdPWZ1bmN0aW9uKCl7cmV0dXJuITB9O2ZpWyR0LkNPTExFQ1RJT05dPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC52YWx1ZTtyZXR1cm4gci5oYXMoZSl9O2ZpWyR0LkZJTFRFUl09ZnVuY3Rpb24odCxlKXt2YXIgcj10LnZhbHVlO3JldHVybiByKGUpfTt1S2U9byhmdW5jdGlvbihlKXt2YXIgcj10aGlzO2lmKHIubGVuZ3RoPT09MSYmclswXS5jaGVja3MubGVuZ3RoPT09MSYmclswXS5jaGVja3NbMF0udHlwZT09PSR0LklEKXJldHVybiBlLmdldEVsZW1lbnRCeUlkKHJbMF0uY2hlY2tzWzBdLnZhbHVlKS5jb2xsZWN0aW9uKCk7dmFyIG49byhmdW5jdGlvbihhKXtmb3IodmFyIHM9MDtzPHIubGVuZ3RoO3MrKyl7dmFyIGw9cltzXTtpZih6bihsLGEpKXJldHVybiEwfXJldHVybiExfSwic2VsZWN0b3JGdW5jdGlvbiIpO3JldHVybiByLnRleHQoKT09bnVsbCYmKG49byhmdW5jdGlvbigpe3JldHVybiEwfSwic2VsZWN0b3JGdW5jdGlvbiIpKSxlLmZpbHRlcihuKX0sImZpbHRlciIpLGhLZT1vKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj10aGlzLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXTtpZih6bihpLGUpKXJldHVybiEwfXJldHVybiExfSwibWF0Y2hlcyIpLGZLZT17bWF0Y2hlczpoS2UsZmlsdGVyOnVLZX0sTGY9byhmdW5jdGlvbihlKXt0aGlzLmlucHV0VGV4dD1lLHRoaXMuY3VycmVudFN1YmplY3Q9bnVsbCx0aGlzLmNvbXBvdW5kQ291bnQ9MCx0aGlzLmVkZ2VDb3VudD0wLHRoaXMubGVuZ3RoPTAsZT09bnVsbHx8WnQoZSkmJmUubWF0Y2goL15ccyokLyl8fChnbyhlKT90aGlzLmFkZFF1ZXJ5KHtjaGVja3M6W3t0eXBlOiR0LkNPTExFQ1RJT04sdmFsdWU6ZS5jb2xsZWN0aW9uKCl9XX0pOnNpKGUpP3RoaXMuYWRkUXVlcnkoe2NoZWNrczpbe3R5cGU6JHQuRklMVEVSLHZhbHVlOmV9XX0pOlp0KGUpP3RoaXMucGFyc2UoZSl8fCh0aGlzLmludmFsaWQ9ITApOmFpKCJBIHNlbGVjdG9yIG11c3QgYmUgY3JlYXRlZCBmcm9tIGEgc3RyaW5nOyBmb3VuZCAiKSl9LCJTZWxlY3RvciIpLFJmPUxmLnByb3RvdHlwZTtbc0tlLGZLZV0uZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gcnIoUmYsdCl9KTtSZi50ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5wdXRUZXh0fTtSZi5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofTtSZi5lcT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpc1t0XX07UmYuc2FtZVRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIXRoaXMuaW52YWxpZCYmIXQuaW52YWxpZCYmdGhpcy50ZXh0KCk9PT10LnRleHQoKX07UmYuYWRkUXVlcnk9ZnVuY3Rpb24odCl7dGhpc1t0aGlzLmxlbmd0aCsrXT10fTtSZi5zZWxlY3Rvcj1SZi50b1N0cmluZztTZj17YWxsQXJlOm8oZnVuY3Rpb24oZSl7dmFyIHI9bmV3IExmKGUpO3JldHVybiB0aGlzLmV2ZXJ5KGZ1bmN0aW9uKG4pe3JldHVybiByLm1hdGNoZXMobil9KX0sImFsbEFyZSIpLGlzOm8oZnVuY3Rpb24oZSl7dmFyIHI9bmV3IExmKGUpO3JldHVybiB0aGlzLnNvbWUoZnVuY3Rpb24obil7cmV0dXJuIHIubWF0Y2hlcyhuKX0pfSwiaXMiKSxzb21lOm8oZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49MDtuPHRoaXMubGVuZ3RoO24rKyl7dmFyIGk9cj9lLmFwcGx5KHIsW3RoaXNbbl0sbix0aGlzXSk6ZSh0aGlzW25dLG4sdGhpcyk7aWYoaSlyZXR1cm4hMH1yZXR1cm4hMX0sInNvbWUiKSxldmVyeTpvKGZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPTA7bjx0aGlzLmxlbmd0aDtuKyspe3ZhciBpPXI/ZS5hcHBseShyLFt0aGlzW25dLG4sdGhpc10pOmUodGhpc1tuXSxuLHRoaXMpO2lmKCFpKXJldHVybiExfXJldHVybiEwfSwiZXZlcnkiKSxzYW1lOm8oZnVuY3Rpb24oZSl7aWYodGhpcz09PWUpcmV0dXJuITA7ZT10aGlzLmN5KCkuY29sbGVjdGlvbihlKTt2YXIgcj10aGlzLmxlbmd0aCxuPWUubGVuZ3RoO3JldHVybiByIT09bj8hMTpyPT09MT90aGlzWzBdPT09ZVswXTp0aGlzLmV2ZXJ5KGZ1bmN0aW9uKGkpe3JldHVybiBlLmhhc0VsZW1lbnRXaXRoSWQoaS5pZCgpKX0pfSwic2FtZSIpLGFueVNhbWU6byhmdW5jdGlvbihlKXtyZXR1cm4gZT10aGlzLmN5KCkuY29sbGVjdGlvbihlKSx0aGlzLnNvbWUoZnVuY3Rpb24ocil7cmV0dXJuIGUuaGFzRWxlbWVudFdpdGhJZChyLmlkKCkpfSl9LCJhbnlTYW1lIiksYWxsQXJlTmVpZ2hib3JzOm8oZnVuY3Rpb24oZSl7ZT10aGlzLmN5KCkuY29sbGVjdGlvbihlKTt2YXIgcj10aGlzLm5laWdoYm9yaG9vZCgpO3JldHVybiBlLmV2ZXJ5KGZ1bmN0aW9uKG4pe3JldHVybiByLmhhc0VsZW1lbnRXaXRoSWQobi5pZCgpKX0pfSwiYWxsQXJlTmVpZ2hib3JzIiksY29udGFpbnM6byhmdW5jdGlvbihlKXtlPXRoaXMuY3koKS5jb2xsZWN0aW9uKGUpO3ZhciByPXRoaXM7cmV0dXJuIGUuZXZlcnkoZnVuY3Rpb24obil7cmV0dXJuIHIuaGFzRWxlbWVudFdpdGhJZChuLmlkKCkpfSl9LCJjb250YWlucyIpfTtTZi5hbGxBcmVOZWlnaGJvdXJzPVNmLmFsbEFyZU5laWdoYm9ycztTZi5oYXM9U2YuY29udGFpbnM7U2YuZXF1YWw9U2YuZXF1YWxzPVNmLnNhbWU7dGw9byhmdW5jdGlvbihlLHIpe3JldHVybiBvKGZ1bmN0aW9uKGksYSxzLGwpe3ZhciB1PWksaD10aGlzLGY7aWYodT09bnVsbD9mPSIiOmdvKHUpJiZ1Lmxlbmd0aD09PTEmJihmPXUuaWQoKSksaC5sZW5ndGg9PT0xJiZmKXt2YXIgZD1oWzBdLl9wcml2YXRlLHA9ZC50cmF2ZXJzYWxDYWNoZT1kLnRyYXZlcnNhbENhY2hlfHx7fSxtPXBbcl09cFtyXXx8W10sZz1fZihmKSx5PW1bZ107cmV0dXJuIHl8fChtW2ddPWUuY2FsbChoLGksYSxzLGwpKX1lbHNlIHJldHVybiBlLmNhbGwoaCxpLGEscyxsKX0sInRyYXZlcnNhbENhY2hlIil9LCJjYWNoZSIpLFoxPXtwYXJlbnQ6byhmdW5jdGlvbihlKXt2YXIgcj1bXTtpZih0aGlzLmxlbmd0aD09PTEpe3ZhciBuPXRoaXNbMF0uX3ByaXZhdGUucGFyZW50O2lmKG4pcmV0dXJuIG59Zm9yKHZhciBpPTA7aTx0aGlzLmxlbmd0aDtpKyspe3ZhciBhPXRoaXNbaV0scz1hLl9wcml2YXRlLnBhcmVudDtzJiZyLnB1c2gocyl9cmV0dXJuIHRoaXMuc3Bhd24ociwhMCkuZmlsdGVyKGUpfSwicGFyZW50IikscGFyZW50czpvKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj1bXSxuPXRoaXMucGFyZW50KCk7bi5ub25lbXB0eSgpOyl7Zm9yKHZhciBpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciBhPW5baV07ci5wdXNoKGEpfW49bi5wYXJlbnQoKX1yZXR1cm4gdGhpcy5zcGF3bihyLCEwKS5maWx0ZXIoZSl9LCJwYXJlbnRzIiksY29tbW9uQW5jZXN0b3JzOm8oZnVuY3Rpb24oZSl7Zm9yKHZhciByLG49MDtuPHRoaXMubGVuZ3RoO24rKyl7dmFyIGk9dGhpc1tuXSxhPWkucGFyZW50cygpO3I9cnx8YSxyPXIuaW50ZXJzZWN0KGEpfXJldHVybiByLmZpbHRlcihlKX0sImNvbW1vbkFuY2VzdG9ycyIpLG9ycGhhbnM6byhmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zdGRGaWx0ZXIoZnVuY3Rpb24ocil7cmV0dXJuIHIuaXNPcnBoYW4oKX0pLmZpbHRlcihlKX0sIm9ycGhhbnMiKSxub25vcnBoYW5zOm8oZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuc3RkRmlsdGVyKGZ1bmN0aW9uKHIpe3JldHVybiByLmlzQ2hpbGQoKX0pLmZpbHRlcihlKX0sIm5vbm9ycGhhbnMiKSxjaGlsZHJlbjp0bChmdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj0wO3I8dGhpcy5sZW5ndGg7cisrKWZvcih2YXIgbj10aGlzW3JdLGk9bi5fcHJpdmF0ZS5jaGlsZHJlbixhPTA7YTxpLmxlbmd0aDthKyspZS5wdXNoKGlbYV0pO3JldHVybiB0aGlzLnNwYXduKGUsITApLmZpbHRlcih0KX0sImNoaWxkcmVuIiksc2libGluZ3M6byhmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wYXJlbnQoKS5jaGlsZHJlbigpLm5vdCh0aGlzKS5maWx0ZXIoZSl9LCJzaWJsaW5ncyIpLGlzUGFyZW50Om8oZnVuY3Rpb24oKXt2YXIgZT10aGlzWzBdO2lmKGUpcmV0dXJuIGUuaXNOb2RlKCkmJmUuX3ByaXZhdGUuY2hpbGRyZW4ubGVuZ3RoIT09MH0sImlzUGFyZW50IiksaXNDaGlsZGxlc3M6byhmdW5jdGlvbigpe3ZhciBlPXRoaXNbMF07aWYoZSlyZXR1cm4gZS5pc05vZGUoKSYmZS5fcHJpdmF0ZS5jaGlsZHJlbi5sZW5ndGg9PT0wfSwiaXNDaGlsZGxlc3MiKSxpc0NoaWxkOm8oZnVuY3Rpb24oKXt2YXIgZT10aGlzWzBdO2lmKGUpcmV0dXJuIGUuaXNOb2RlKCkmJmUuX3ByaXZhdGUucGFyZW50IT1udWxsfSwiaXNDaGlsZCIpLGlzT3JwaGFuOm8oZnVuY3Rpb24oKXt2YXIgZT10aGlzWzBdO2lmKGUpcmV0dXJuIGUuaXNOb2RlKCkmJmUuX3ByaXZhdGUucGFyZW50PT1udWxsfSwiaXNPcnBoYW4iKSxkZXNjZW5kYW50czpvKGZ1bmN0aW9uKGUpe3ZhciByPVtdO2Z1bmN0aW9uIG4oaSl7Zm9yKHZhciBhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBzPWlbYV07ci5wdXNoKHMpLHMuY2hpbGRyZW4oKS5ub25lbXB0eSgpJiZuKHMuY2hpbGRyZW4oKSl9fXJldHVybiBvKG4sImFkZCIpLG4odGhpcy5jaGlsZHJlbigpKSx0aGlzLnNwYXduKHIsITApLmZpbHRlcihlKX0sImRlc2NlbmRhbnRzIil9O28oZkIsImZvckVhY2hDb21wb3VuZCIpO28oRm1lLCJhZGRDaGlsZHJlbiIpO1oxLmZvckVhY2hEb3duPWZ1bmN0aW9uKHQpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMDtyZXR1cm4gZkIodGhpcyx0LGUsRm1lKX07bygkbWUsImFkZFBhcmVudCIpO1oxLmZvckVhY2hVcD1mdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITA7cmV0dXJuIGZCKHRoaXMsdCxlLCRtZSl9O28oZEtlLCJhZGRQYXJlbnRBbmRDaGlsZHJlbiIpO1oxLmZvckVhY2hVcEFuZERvd249ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiEwO3JldHVybiBmQih0aGlzLHQsZSxkS2UpfTtaMS5hbmNlc3RvcnM9WjEucGFyZW50cztLYj16bWU9e2RhdGE6Y24uZGF0YSh7ZmllbGQ6ImRhdGEiLGJpbmRpbmdFdmVudDoiZGF0YSIsYWxsb3dCaW5kaW5nOiEwLGFsbG93U2V0dGluZzohMCxzZXR0aW5nRXZlbnQ6ImRhdGEiLHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiEwLHRyaWdnZXJGbk5hbWU6InRyaWdnZXIiLGFsbG93R2V0dGluZzohMCxpbW11dGFibGVLZXlzOntpZDohMCxzb3VyY2U6ITAsdGFyZ2V0OiEwLHBhcmVudDohMH0sdXBkYXRlU3R5bGU6ITB9KSxyZW1vdmVEYXRhOmNuLnJlbW92ZURhdGEoe2ZpZWxkOiJkYXRhIixldmVudDoiZGF0YSIsdHJpZ2dlckZuTmFtZToidHJpZ2dlciIsdHJpZ2dlckV2ZW50OiEwLGltbXV0YWJsZUtleXM6e2lkOiEwLHNvdXJjZTohMCx0YXJnZXQ6ITAscGFyZW50OiEwfSx1cGRhdGVTdHlsZTohMH0pLHNjcmF0Y2g6Y24uZGF0YSh7ZmllbGQ6InNjcmF0Y2giLGJpbmRpbmdFdmVudDoic2NyYXRjaCIsYWxsb3dCaW5kaW5nOiEwLGFsbG93U2V0dGluZzohMCxzZXR0aW5nRXZlbnQ6InNjcmF0Y2giLHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiEwLHRyaWdnZXJGbk5hbWU6InRyaWdnZXIiLGFsbG93R2V0dGluZzohMCx1cGRhdGVTdHlsZTohMH0pLHJlbW92ZVNjcmF0Y2g6Y24ucmVtb3ZlRGF0YSh7ZmllbGQ6InNjcmF0Y2giLGV2ZW50OiJzY3JhdGNoIix0cmlnZ2VyRm5OYW1lOiJ0cmlnZ2VyIix0cmlnZ2VyRXZlbnQ6ITAsdXBkYXRlU3R5bGU6ITB9KSxyc2NyYXRjaDpjbi5kYXRhKHtmaWVsZDoicnNjcmF0Y2giLGFsbG93QmluZGluZzohMSxhbGxvd1NldHRpbmc6ITAsc2V0dGluZ1RyaWdnZXJzRXZlbnQ6ITEsYWxsb3dHZXR0aW5nOiEwfSkscmVtb3ZlUnNjcmF0Y2g6Y24ucmVtb3ZlRGF0YSh7ZmllbGQ6InJzY3JhdGNoIix0cmlnZ2VyRXZlbnQ6ITF9KSxpZDpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpc1swXTtpZihlKXJldHVybiBlLl9wcml2YXRlLmRhdGEuaWR9LCJpZCIpfTtLYi5hdHRyPUtiLmRhdGE7S2IucmVtb3ZlQXR0cj1LYi5yZW1vdmVEYXRhO3BLZT16bWUsRlM9e307byhTUCwiZGVmaW5lRGVncmVlRnVuY3Rpb24iKTtycihGUyx7ZGVncmVlOlNQKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc291cmNlKCkuc2FtZShlLnRhcmdldCgpKT8yOjF9KSxpbmRlZ3JlZTpTUChmdW5jdGlvbih0LGUpe3JldHVybiBlLnRhcmdldCgpLnNhbWUodCk/MTowfSksb3V0ZGVncmVlOlNQKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc291cmNlKCkuc2FtZSh0KT8xOjB9KX0pO28oRjEsImRlZmluZURlZ3JlZUJvdW5kc0Z1bmN0aW9uIik7cnIoRlMse21pbkRlZ3JlZTpGMSgiZGVncmVlIixmdW5jdGlvbih0LGUpe3JldHVybiB0PGV9KSxtYXhEZWdyZWU6RjEoImRlZ3JlZSIsZnVuY3Rpb24odCxlKXtyZXR1cm4gdD5lfSksbWluSW5kZWdyZWU6RjEoImluZGVncmVlIixmdW5jdGlvbih0LGUpe3JldHVybiB0PGV9KSxtYXhJbmRlZ3JlZTpGMSgiaW5kZWdyZWUiLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+ZX0pLG1pbk91dGRlZ3JlZTpGMSgib3V0ZGVncmVlIixmdW5jdGlvbih0LGUpe3JldHVybiB0PGV9KSxtYXhPdXRkZWdyZWU6RjEoIm91dGRlZ3JlZSIsZnVuY3Rpb24odCxlKXtyZXR1cm4gdD5lfSl9KTtycihGUyx7dG90YWxEZWdyZWU6byhmdW5jdGlvbihlKXtmb3IodmFyIHI9MCxuPXRoaXMubm9kZXMoKSxpPTA7aTxuLmxlbmd0aDtpKyspcis9bltpXS5kZWdyZWUoZSk7cmV0dXJuIHJ9LCJ0b3RhbERlZ3JlZSIpfSk7Vm1lPW8oZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgYT1lW2ldO2lmKCFhLmxvY2tlZCgpKXt2YXIgcz1hLl9wcml2YXRlLnBvc2l0aW9uLGw9e3g6ci54IT1udWxsP3IueC1zLng6MCx5OnIueSE9bnVsbD9yLnktcy55OjB9O2EuaXNQYXJlbnQoKSYmIShsLng9PT0wJiZsLnk9PT0wKSYmYS5jaGlsZHJlbigpLnNoaWZ0KGwsbiksYS5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKX19fSwiYmVmb3JlUG9zaXRpb25TZXQiKSxhMGU9e2ZpZWxkOiJwb3NpdGlvbiIsYmluZGluZ0V2ZW50OiJwb3NpdGlvbiIsYWxsb3dCaW5kaW5nOiEwLGFsbG93U2V0dGluZzohMCxzZXR0aW5nRXZlbnQ6InBvc2l0aW9uIixzZXR0aW5nVHJpZ2dlcnNFdmVudDohMCx0cmlnZ2VyRm5OYW1lOiJlbWl0QW5kTm90aWZ5IixhbGxvd0dldHRpbmc6ITAsdmFsaWRLZXlzOlsieCIsInkiXSxiZWZvcmVHZXQ6byhmdW5jdGlvbihlKXtlLnVwZGF0ZUNvbXBvdW5kQm91bmRzKCl9LCJiZWZvcmVHZXQiKSxiZWZvcmVTZXQ6byhmdW5jdGlvbihlLHIpe1ZtZShlLHIsITEpfSwiYmVmb3JlU2V0Iiksb25TZXQ6byhmdW5jdGlvbihlKXtlLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpfSwib25TZXQiKSxjYW5TZXQ6byhmdW5jdGlvbihlKXtyZXR1cm4hZS5sb2NrZWQoKX0sImNhblNldCIpfTtWbD1HbWU9e3Bvc2l0aW9uOmNuLmRhdGEoYTBlKSxzaWxlbnRQb3NpdGlvbjpjbi5kYXRhKHJyKHt9LGEwZSx7YWxsb3dCaW5kaW5nOiExLGFsbG93U2V0dGluZzohMCxzZXR0aW5nVHJpZ2dlcnNFdmVudDohMSxhbGxvd0dldHRpbmc6ITEsYmVmb3JlU2V0Om8oZnVuY3Rpb24oZSxyKXtWbWUoZSxyLCEwKX0sImJlZm9yZVNldCIpLG9uU2V0Om8oZnVuY3Rpb24oZSl7ZS5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKX0sIm9uU2V0Iil9KSkscG9zaXRpb25zOm8oZnVuY3Rpb24oZSxyKXtpZihVcihlKSlyP3RoaXMuc2lsZW50UG9zaXRpb24oZSk6dGhpcy5wb3NpdGlvbihlKTtlbHNlIGlmKHNpKGUpKXt2YXIgbj1lLGk9dGhpcy5jeSgpO2kuc3RhcnRCYXRjaCgpO2Zvcih2YXIgYT0wO2E8dGhpcy5sZW5ndGg7YSsrKXt2YXIgcz10aGlzW2FdLGw9dm9pZCAwOyhsPW4ocyxhKSkmJihyP3Muc2lsZW50UG9zaXRpb24obCk6cy5wb3NpdGlvbihsKSl9aS5lbmRCYXRjaCgpfXJldHVybiB0aGlzfSwicG9zaXRpb25zIiksc2lsZW50UG9zaXRpb25zOm8oZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucG9zaXRpb25zKGUsITApfSwic2lsZW50UG9zaXRpb25zIiksc2hpZnQ6byhmdW5jdGlvbihlLHIsbil7dmFyIGk7aWYoVXIoZSk/KGk9e3g6Q3QoZS54KT9lLng6MCx5OkN0KGUueSk/ZS55OjB9LG49cik6WnQoZSkmJkN0KHIpJiYoaT17eDowLHk6MH0saVtlXT1yKSxpIT1udWxsKXt2YXIgYT10aGlzLmN5KCk7YS5zdGFydEJhdGNoKCk7Zm9yKHZhciBzPTA7czx0aGlzLmxlbmd0aDtzKyspe3ZhciBsPXRoaXNbc107aWYoIShhLmhhc0NvbXBvdW5kTm9kZXMoKSYmbC5pc0NoaWxkKCkmJmwuYW5jZXN0b3JzKCkuYW55U2FtZSh0aGlzKSkpe3ZhciB1PWwucG9zaXRpb24oKSxoPXt4OnUueCtpLngseTp1LnkraS55fTtuP2wuc2lsZW50UG9zaXRpb24oaCk6bC5wb3NpdGlvbihoKX19YS5lbmRCYXRjaCgpfXJldHVybiB0aGlzfSwic2hpZnQiKSxzaWxlbnRTaGlmdDpvKGZ1bmN0aW9uKGUscil7cmV0dXJuIFVyKGUpP3RoaXMuc2hpZnQoZSwhMCk6WnQoZSkmJkN0KHIpJiZ0aGlzLnNoaWZ0KGUsciwhMCksdGhpc30sInNpbGVudFNoaWZ0IikscmVuZGVyZWRQb3NpdGlvbjpvKGZ1bmN0aW9uKGUscil7dmFyIG49dGhpc1swXSxpPXRoaXMuY3koKSxhPWkuem9vbSgpLHM9aS5wYW4oKSxsPVVyKGUpP2U6dm9pZCAwLHU9bCE9PXZvaWQgMHx8ciE9PXZvaWQgMCYmWnQoZSk7aWYobiYmbi5pc05vZGUoKSlpZih1KWZvcih2YXIgaD0wO2g8dGhpcy5sZW5ndGg7aCsrKXt2YXIgZj10aGlzW2hdO3IhPT12b2lkIDA/Zi5wb3NpdGlvbihlLChyLXNbZV0pL2EpOmwhPT12b2lkIDAmJmYucG9zaXRpb24ocG1lKGwsYSxzKSl9ZWxzZXt2YXIgZD1uLnBvc2l0aW9uKCk7cmV0dXJuIGw9TVMoZCxhLHMpLGU9PT12b2lkIDA/bDpsW2VdfWVsc2UgaWYoIXUpcmV0dXJuO3JldHVybiB0aGlzfSwicmVuZGVyZWRQb3NpdGlvbiIpLHJlbGF0aXZlUG9zaXRpb246byhmdW5jdGlvbihlLHIpe3ZhciBuPXRoaXNbMF0saT10aGlzLmN5KCksYT1VcihlKT9lOnZvaWQgMCxzPWEhPT12b2lkIDB8fHIhPT12b2lkIDAmJlp0KGUpLGw9aS5oYXNDb21wb3VuZE5vZGVzKCk7aWYobiYmbi5pc05vZGUoKSlpZihzKWZvcih2YXIgdT0wO3U8dGhpcy5sZW5ndGg7dSsrKXt2YXIgaD10aGlzW3VdLGY9bD9oLnBhcmVudCgpOm51bGwsZD1mJiZmLmxlbmd0aD4wLHA9ZDtkJiYoZj1mWzBdKTt2YXIgbT1wP2YucG9zaXRpb24oKTp7eDowLHk6MH07ciE9PXZvaWQgMD9oLnBvc2l0aW9uKGUscittW2VdKTphIT09dm9pZCAwJiZoLnBvc2l0aW9uKHt4OmEueCttLngseTphLnkrbS55fSl9ZWxzZXt2YXIgZz1uLnBvc2l0aW9uKCkseT1sP24ucGFyZW50KCk6bnVsbCx2PXkmJnkubGVuZ3RoPjAseD12O3YmJih5PXlbMF0pO3ZhciBiPXg/eS5wb3NpdGlvbigpOnt4OjAseTowfTtyZXR1cm4gYT17eDpnLngtYi54LHk6Zy55LWIueX0sZT09PXZvaWQgMD9hOmFbZV19ZWxzZSBpZighcylyZXR1cm47cmV0dXJuIHRoaXN9LCJyZWxhdGl2ZVBvc2l0aW9uIil9O1ZsLm1vZGVsUG9zaXRpb249VmwucG9pbnQ9VmwucG9zaXRpb247VmwubW9kZWxQb3NpdGlvbnM9VmwucG9pbnRzPVZsLnBvc2l0aW9ucztWbC5yZW5kZXJlZFBvaW50PVZsLnJlbmRlcmVkUG9zaXRpb247VmwucmVsYXRpdmVQb2ludD1WbC5yZWxhdGl2ZVBvc2l0aW9uO21LZT1HbWU7WDE9T2Y9e307T2YucmVuZGVyZWRCb3VuZGluZ0JveD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmJvdW5kaW5nQm94KHQpLHI9dGhpcy5jeSgpLG49ci56b29tKCksaT1yLnBhbigpLGE9ZS54MSpuK2kueCxzPWUueDIqbitpLngsbD1lLnkxKm4raS55LHU9ZS55MipuK2kueTtyZXR1cm57eDE6YSx4MjpzLHkxOmwseTI6dSx3OnMtYSxoOnUtbH19O09mLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZT1mdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMSxlPXRoaXMuY3koKTtyZXR1cm4hZS5zdHlsZUVuYWJsZWQoKXx8IWUuaGFzQ29tcG91bmROb2RlcygpP3RoaXM6KHRoaXMuZm9yRWFjaFVwKGZ1bmN0aW9uKHIpe2lmKHIuaXNQYXJlbnQoKSl7dmFyIG49ci5fcHJpdmF0ZTtuLmNvbXBvdW5kQm91bmRzQ2xlYW49ITEsbi5iYkNhY2hlPW51bGwsdHx8ci5lbWl0QW5kTm90aWZ5KCJib3VuZHMiKX19KSx0aGlzKX07T2YudXBkYXRlQ29tcG91bmRCb3VuZHM9ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06ITEsZT10aGlzLmN5KCk7aWYoIWUuc3R5bGVFbmFibGVkKCl8fCFlLmhhc0NvbXBvdW5kTm9kZXMoKSlyZXR1cm4gdGhpcztpZighdCYmZS5iYXRjaGluZygpKXJldHVybiB0aGlzO2Z1bmN0aW9uIHIocyl7aWYoIXMuaXNQYXJlbnQoKSlyZXR1cm47dmFyIGw9cy5fcHJpdmF0ZSx1PXMuY2hpbGRyZW4oKSxoPXMucHN0eWxlKCJjb21wb3VuZC1zaXppbmctd3J0LWxhYmVscyIpLnZhbHVlPT09ImluY2x1ZGUiLGY9e3dpZHRoOnt2YWw6cy5wc3R5bGUoIm1pbi13aWR0aCIpLnBmVmFsdWUsbGVmdDpzLnBzdHlsZSgibWluLXdpZHRoLWJpYXMtbGVmdCIpLHJpZ2h0OnMucHN0eWxlKCJtaW4td2lkdGgtYmlhcy1yaWdodCIpfSxoZWlnaHQ6e3ZhbDpzLnBzdHlsZSgibWluLWhlaWdodCIpLnBmVmFsdWUsdG9wOnMucHN0eWxlKCJtaW4taGVpZ2h0LWJpYXMtdG9wIiksYm90dG9tOnMucHN0eWxlKCJtaW4taGVpZ2h0LWJpYXMtYm90dG9tIil9fSxkPXUuYm91bmRpbmdCb3goe2luY2x1ZGVMYWJlbHM6aCxpbmNsdWRlT3ZlcmxheXM6ITEsdXNlQ2FjaGU6ITF9KSxwPWwucG9zaXRpb247KGQudz09PTB8fGQuaD09PTApJiYoZD17dzpzLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlLGg6cy5wc3R5bGUoImhlaWdodCIpLnBmVmFsdWV9LGQueDE9cC54LWQudy8yLGQueDI9cC54K2Qudy8yLGQueTE9cC55LWQuaC8yLGQueTI9cC55K2QuaC8yKTtmdW5jdGlvbiBtKF8sSSxEKXt2YXIgaz0wLEw9MCxSPUkrRDtyZXR1cm4gXz4wJiZSPjAmJihrPUkvUipfLEw9RC9SKl8pLHtiaWFzRGlmZjprLGJpYXNDb21wbGVtZW50RGlmZjpMfX1vKG0sImNvbXB1dGVCaWFzVmFsdWVzIik7ZnVuY3Rpb24gZyhfLEksRCxrKXtpZihELnVuaXRzPT09IiUiKXN3aXRjaChrKXtjYXNlIndpZHRoIjpyZXR1cm4gXz4wP0QucGZWYWx1ZSpfOjA7Y2FzZSJoZWlnaHQiOnJldHVybiBJPjA/RC5wZlZhbHVlKkk6MDtjYXNlImF2ZXJhZ2UiOnJldHVybiBfPjAmJkk+MD9ELnBmVmFsdWUqKF8rSSkvMjowO2Nhc2UibWluIjpyZXR1cm4gXz4wJiZJPjA/Xz5JP0QucGZWYWx1ZSpJOkQucGZWYWx1ZSpfOjA7Y2FzZSJtYXgiOnJldHVybiBfPjAmJkk+MD9fPkk/RC5wZlZhbHVlKl86RC5wZlZhbHVlKkk6MDtkZWZhdWx0OnJldHVybiAwfWVsc2UgcmV0dXJuIEQudW5pdHM9PT0icHgiP0QucGZWYWx1ZTowfW8oZywiY29tcHV0ZVBhZGRpbmdWYWx1ZXMiKTt2YXIgeT1mLndpZHRoLmxlZnQudmFsdWU7Zi53aWR0aC5sZWZ0LnVuaXRzPT09InB4IiYmZi53aWR0aC52YWw+MCYmKHk9eSoxMDAvZi53aWR0aC52YWwpO3ZhciB2PWYud2lkdGgucmlnaHQudmFsdWU7Zi53aWR0aC5yaWdodC51bml0cz09PSJweCImJmYud2lkdGgudmFsPjAmJih2PXYqMTAwL2Yud2lkdGgudmFsKTt2YXIgeD1mLmhlaWdodC50b3AudmFsdWU7Zi5oZWlnaHQudG9wLnVuaXRzPT09InB4IiYmZi5oZWlnaHQudmFsPjAmJih4PXgqMTAwL2YuaGVpZ2h0LnZhbCk7dmFyIGI9Zi5oZWlnaHQuYm90dG9tLnZhbHVlO2YuaGVpZ2h0LmJvdHRvbS51bml0cz09PSJweCImJmYuaGVpZ2h0LnZhbD4wJiYoYj1iKjEwMC9mLmhlaWdodC52YWwpO3ZhciB3PW0oZi53aWR0aC52YWwtZC53LHksdiksQz13LmJpYXNEaWZmLFQ9dy5iaWFzQ29tcGxlbWVudERpZmYsRT1tKGYuaGVpZ2h0LnZhbC1kLmgseCxiKSxBPUUuYmlhc0RpZmYsUz1FLmJpYXNDb21wbGVtZW50RGlmZjtsLmF1dG9QYWRkaW5nPWcoZC53LGQuaCxzLnBzdHlsZSgicGFkZGluZyIpLHMucHN0eWxlKCJwYWRkaW5nLXJlbGF0aXZlLXRvIikudmFsdWUpLGwuYXV0b1dpZHRoPU1hdGgubWF4KGQudyxmLndpZHRoLnZhbCkscC54PSgtQytkLngxK2QueDIrVCkvMixsLmF1dG9IZWlnaHQ9TWF0aC5tYXgoZC5oLGYuaGVpZ2h0LnZhbCkscC55PSgtQStkLnkxK2QueTIrUykvMn1vKHIsInVwZGF0ZSIpO2Zvcih2YXIgbj0wO248dGhpcy5sZW5ndGg7bisrKXt2YXIgaT10aGlzW25dLGE9aS5fcHJpdmF0ZTsoIWEuY29tcG91bmRCb3VuZHNDbGVhbnx8dCkmJihyKGkpLGUuYmF0Y2hpbmcoKXx8KGEuY29tcG91bmRCb3VuZHNDbGVhbj0hMCkpfXJldHVybiB0aGlzfTtlbD1vKGZ1bmN0aW9uKGUpe3JldHVybiBlPT09MS8wfHxlPT09LTEvMD8wOmV9LCJub25pbmYiKSx6bD1vKGZ1bmN0aW9uKGUscixuLGksYSl7aS1yPT09MHx8YS1uPT09MHx8cj09bnVsbHx8bj09bnVsbHx8aT09bnVsbHx8YT09bnVsbHx8KGUueDE9cjxlLngxP3I6ZS54MSxlLngyPWk+ZS54Mj9pOmUueDIsZS55MT1uPGUueTE/bjplLnkxLGUueTI9YT5lLnkyP2E6ZS55MixlLnc9ZS54Mi1lLngxLGUuaD1lLnkyLWUueTEpfSwidXBkYXRlQm91bmRzIiksUHA9byhmdW5jdGlvbihlLHIpe3JldHVybiByPT1udWxsP2U6emwoZSxyLngxLHIueTEsci54MixyLnkyKX0sInVwZGF0ZUJvdW5kc0Zyb21Cb3giKSxEYj1vKGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gR2woZSxyLG4pfSwicHJlZml4ZWRQcm9wZXJ0eSIpLHRTPW8oZnVuY3Rpb24oZSxyLG4pe2lmKCFyLmN5KCkuaGVhZGxlc3MoKSl7dmFyIGk9ci5fcHJpdmF0ZSxhPWkucnN0eWxlLHM9YS5hcnJvd1dpZHRoLzIsbD1yLnBzdHlsZShuKyItYXJyb3ctc2hhcGUiKS52YWx1ZSx1LGg7aWYobCE9PSJub25lIil7bj09PSJzb3VyY2UiPyh1PWEuc3JjWCxoPWEuc3JjWSk6bj09PSJ0YXJnZXQiPyh1PWEudGd0WCxoPWEudGd0WSk6KHU9YS5taWRYLGg9YS5taWRZKTt2YXIgZj1pLmFycm93Qm91bmRzPWkuYXJyb3dCb3VuZHN8fHt9LGQ9ZltuXT1mW25dfHx7fTtkLngxPXUtcyxkLnkxPWgtcyxkLngyPXUrcyxkLnkyPWgrcyxkLnc9ZC54Mi1kLngxLGQuaD1kLnkyLWQueTEsY1MoZCwxKSx6bChlLGQueDEsZC55MSxkLngyLGQueTIpfX19LCJ1cGRhdGVCb3VuZHNGcm9tQXJyb3ciKSxDUD1vKGZ1bmN0aW9uKGUscixuKXtpZighci5jeSgpLmhlYWRsZXNzKCkpe3ZhciBpO24/aT1uKyItIjppPSIiO3ZhciBhPXIuX3ByaXZhdGUscz1hLnJzdHlsZSxsPXIucHN0eWxlKGkrImxhYmVsIikuc3RyVmFsdWU7aWYobCl7dmFyIHU9ci5wc3R5bGUoInRleHQtaGFsaWduIiksaD1yLnBzdHlsZSgidGV4dC12YWxpZ24iKSxmPURiKHMsImxhYmVsV2lkdGgiLG4pLGQ9RGIocywibGFiZWxIZWlnaHQiLG4pLHA9RGIocywibGFiZWxYIixuKSxtPURiKHMsImxhYmVsWSIsbiksZz1yLnBzdHlsZShpKyJ0ZXh0LW1hcmdpbi14IikucGZWYWx1ZSx5PXIucHN0eWxlKGkrInRleHQtbWFyZ2luLXkiKS5wZlZhbHVlLHY9ci5pc0VkZ2UoKSx4PXIucHN0eWxlKGkrInRleHQtcm90YXRpb24iKSxiPXIucHN0eWxlKCJ0ZXh0LW91dGxpbmUtd2lkdGgiKS5wZlZhbHVlLHc9ci5wc3R5bGUoInRleHQtYm9yZGVyLXdpZHRoIikucGZWYWx1ZSxDPXcvMixUPXIucHN0eWxlKCJ0ZXh0LWJhY2tncm91bmQtcGFkZGluZyIpLnBmVmFsdWUsRT0yLEE9ZCxTPWYsXz1TLzIsST1BLzIsRCxrLEwsUjtpZih2KUQ9cC1fLGs9cCtfLEw9bS1JLFI9bStJO2Vsc2V7c3dpdGNoKHUudmFsdWUpe2Nhc2UibGVmdCI6RD1wLVMsaz1wO2JyZWFrO2Nhc2UiY2VudGVyIjpEPXAtXyxrPXArXzticmVhaztjYXNlInJpZ2h0IjpEPXAsaz1wK1M7YnJlYWt9c3dpdGNoKGgudmFsdWUpe2Nhc2UidG9wIjpMPW0tQSxSPW07YnJlYWs7Y2FzZSJjZW50ZXIiOkw9bS1JLFI9bStJO2JyZWFrO2Nhc2UiYm90dG9tIjpMPW0sUj1tK0E7YnJlYWt9fXZhciBPPWctTWF0aC5tYXgoYixDKS1ULUUsTT1nK01hdGgubWF4KGIsQykrVCtFLEI9eS1NYXRoLm1heChiLEMpLVQtRSxGPXkrTWF0aC5tYXgoYixDKStUK0U7RCs9TyxrKz1NLEwrPUIsUis9Rjt2YXIgUD1ufHwibWFpbiIsej1hLmxhYmVsQm91bmRzLCQ9eltQXT16W1BdfHx7fTskLngxPUQsJC55MT1MLCQueDI9aywkLnkyPVIsJC53PWstRCwkLmg9Ui1MLCQubGVmdFBhZD1PLCQucmlnaHRQYWQ9TSwkLnRvcFBhZD1CLCQuYm90UGFkPUY7dmFyIEg9diYmeC5zdHJWYWx1ZT09PSJhdXRvcm90YXRlIixRPXgucGZWYWx1ZSE9bnVsbCYmeC5wZlZhbHVlIT09MDtpZihIfHxRKXt2YXIgaj1IP0RiKGEucnN0eWxlLCJsYWJlbEFuZ2xlIixuKTp4LnBmVmFsdWUsaWU9TWF0aC5jb3MoaiksbmU9TWF0aC5zaW4oaiksbGU9KEQraykvMixoZT0oTCtSKS8yO2lmKCF2KXtzd2l0Y2godS52YWx1ZSl7Y2FzZSJsZWZ0IjpsZT1rO2JyZWFrO2Nhc2UicmlnaHQiOmxlPUQ7YnJlYWt9c3dpdGNoKGgudmFsdWUpe2Nhc2UidG9wIjpoZT1SO2JyZWFrO2Nhc2UiYm90dG9tIjpoZT1MO2JyZWFrfX12YXIgSz1vKGZ1bmN0aW9uKGNlLGFlKXtyZXR1cm4gY2U9Y2UtbGUsYWU9YWUtaGUse3g6Y2UqaWUtYWUqbmUrbGUseTpjZSpuZSthZSppZStoZX19LCJyb3RhdGUiKSxYPUsoRCxMKSx0ZT1LKEQsUiksSj1LKGssTCksc2U9SyhrLFIpO0Q9TWF0aC5taW4oWC54LHRlLngsSi54LHNlLngpLGs9TWF0aC5tYXgoWC54LHRlLngsSi54LHNlLngpLEw9TWF0aC5taW4oWC55LHRlLnksSi55LHNlLnkpLFI9TWF0aC5tYXgoWC55LHRlLnksSi55LHNlLnkpfXZhciB1ZT1QKyJSb3QiLFo9elt1ZV09elt1ZV18fHt9O1oueDE9RCxaLnkxPUwsWi54Mj1rLFoueTI9UixaLnc9ay1ELFouaD1SLUwsemwoZSxELEwsayxSKSx6bChhLmxhYmVsQm91bmRzLmFsbCxELEwsayxSKX1yZXR1cm4gZX19LCJ1cGRhdGVCb3VuZHNGcm9tTGFiZWwiKSxnS2U9byhmdW5jdGlvbihlLHIpe2lmKCFyLmN5KCkuaGVhZGxlc3MoKSl7dmFyIG49ci5wc3R5bGUoIm91dGxpbmUtb3BhY2l0eSIpLnZhbHVlLGk9ci5wc3R5bGUoIm91dGxpbmUtd2lkdGgiKS52YWx1ZTtpZihuPjAmJmk+MCl7dmFyIGE9ci5wc3R5bGUoIm91dGxpbmUtb2Zmc2V0IikudmFsdWUscz1yLnBzdHlsZSgic2hhcGUiKS52YWx1ZSxsPWkrYSx1PShlLncrbCoyKS9lLncsaD0oZS5oK2wqMikvZS5oLGY9MCxkPTA7WyJkaWFtb25kIiwicGVudGFnb24iLCJyb3VuZC10cmlhbmdsZSJdLmluY2x1ZGVzKHMpPyh1PShlLncrbCoyLjQpL2UudyxkPS1sLzMuNik6WyJjb25jYXZlLWhleGFnb24iLCJyaG9tYm9pZCIsInJpZ2h0LXJob21ib2lkIl0uaW5jbHVkZXMocyk/dT0oZS53K2wqMi40KS9lLnc6cz09PSJzdGFyIj8odT0oZS53K2wqMi44KS9lLncsaD0oZS5oK2wqMi42KS9lLmgsZD0tbC8zLjgpOnM9PT0idHJpYW5nbGUiPyh1PShlLncrbCoyLjgpL2UudyxoPShlLmgrbCoyLjQpL2UuaCxkPS1sLzEuNCk6cz09PSJ2ZWUiJiYodT0oZS53K2wqNC40KS9lLncsaD0oZS5oK2wqMy44KS9lLmgsZD0tbCouNSk7dmFyIHA9ZS5oKmgtZS5oLG09ZS53KnUtZS53O2lmKHVTKGUsW01hdGguY2VpbChwLzIpLE1hdGguY2VpbChtLzIpXSksZiE9MHx8ZCE9PTApe3ZhciBnPUJxZShlLGYsZCk7Z21lKGUsZyl9fX19LCJ1cGRhdGVCb3VuZHNGcm9tT3V0bGluZSIpLHlLZT1vKGZ1bmN0aW9uKGUscil7dmFyIG49ZS5fcHJpdmF0ZS5jeSxpPW4uc3R5bGVFbmFibGVkKCksYT1uLmhlYWRsZXNzKCkscz1IcygpLGw9ZS5fcHJpdmF0ZSx1PWUuaXNOb2RlKCksaD1lLmlzRWRnZSgpLGYsZCxwLG0sZyx5LHY9bC5yc3R5bGUseD11JiZpP2UucHN0eWxlKCJib3VuZHMtZXhwYW5zaW9uIikucGZWYWx1ZTpbMF0sYj1vKGZ1bmN0aW9uKFNlKXtyZXR1cm4gU2UucHN0eWxlKCJkaXNwbGF5IikudmFsdWUhPT0ibm9uZSJ9LCJpc0Rpc3BsYXllZCIpLHc9IWl8fGIoZSkmJighaHx8YihlLnNvdXJjZSgpKSYmYihlLnRhcmdldCgpKSk7aWYodyl7dmFyIEM9MCxUPTA7aSYmci5pbmNsdWRlT3ZlcmxheXMmJihDPWUucHN0eWxlKCJvdmVybGF5LW9wYWNpdHkiKS52YWx1ZSxDIT09MCYmKFQ9ZS5wc3R5bGUoIm92ZXJsYXktcGFkZGluZyIpLnZhbHVlKSk7dmFyIEU9MCxBPTA7aSYmci5pbmNsdWRlVW5kZXJsYXlzJiYoRT1lLnBzdHlsZSgidW5kZXJsYXktb3BhY2l0eSIpLnZhbHVlLEUhPT0wJiYoQT1lLnBzdHlsZSgidW5kZXJsYXktcGFkZGluZyIpLnZhbHVlKSk7dmFyIFM9TWF0aC5tYXgoVCxBKSxfPTAsST0wO2lmKGkmJihfPWUucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUsST1fLzIpLHUmJnIuaW5jbHVkZU5vZGVzKXt2YXIgRD1lLnBvc2l0aW9uKCk7Zz1ELngseT1ELnk7dmFyIGs9ZS5vdXRlcldpZHRoKCksTD1rLzIsUj1lLm91dGVySGVpZ2h0KCksTz1SLzI7Zj1nLUwsZD1nK0wscD15LU8sbT15K08semwocyxmLHAsZCxtKSxpJiZyLmluY2x1ZGVPdXRsaW5lcyYmZ0tlKHMsZSl9ZWxzZSBpZihoJiZyLmluY2x1ZGVFZGdlcylpZihpJiYhYSl7dmFyIE09ZS5wc3R5bGUoImN1cnZlLXN0eWxlIikuc3RyVmFsdWU7aWYoZj1NYXRoLm1pbih2LnNyY1gsdi5taWRYLHYudGd0WCksZD1NYXRoLm1heCh2LnNyY1gsdi5taWRYLHYudGd0WCkscD1NYXRoLm1pbih2LnNyY1ksdi5taWRZLHYudGd0WSksbT1NYXRoLm1heCh2LnNyY1ksdi5taWRZLHYudGd0WSksZi09SSxkKz1JLHAtPUksbSs9SSx6bChzLGYscCxkLG0pLE09PT0iaGF5c3RhY2siKXt2YXIgQj12LmhheXN0YWNrUHRzO2lmKEImJkIubGVuZ3RoPT09Mil7aWYoZj1CWzBdLngscD1CWzBdLnksZD1CWzFdLngsbT1CWzFdLnksZj5kKXt2YXIgRj1mO2Y9ZCxkPUZ9aWYocD5tKXt2YXIgUD1wO3A9bSxtPVB9emwocyxmLUkscC1JLGQrSSxtK0kpfX1lbHNlIGlmKE09PT0iYmV6aWVyInx8TT09PSJ1bmJ1bmRsZWQtYmV6aWVyInx8TS5lbmRzV2l0aCgic2VnbWVudHMiKXx8TS5lbmRzV2l0aCgidGF4aSIpKXt2YXIgejtzd2l0Y2goTSl7Y2FzZSJiZXppZXIiOmNhc2UidW5idW5kbGVkLWJlemllciI6ej12LmJlemllclB0czticmVhaztjYXNlInNlZ21lbnRzIjpjYXNlInRheGkiOmNhc2Uicm91bmQtc2VnbWVudHMiOmNhc2Uicm91bmQtdGF4aSI6ej12LmxpbmVQdHM7YnJlYWt9aWYoeiE9bnVsbClmb3IodmFyICQ9MDskPHoubGVuZ3RoOyQrKyl7dmFyIEg9elskXTtmPUgueC1JLGQ9SC54K0kscD1ILnktSSxtPUgueStJLHpsKHMsZixwLGQsbSl9fX1lbHNle3ZhciBRPWUuc291cmNlKCksaj1RLnBvc2l0aW9uKCksaWU9ZS50YXJnZXQoKSxuZT1pZS5wb3NpdGlvbigpO2lmKGY9ai54LGQ9bmUueCxwPWoueSxtPW5lLnksZj5kKXt2YXIgbGU9ZjtmPWQsZD1sZX1pZihwPm0pe3ZhciBoZT1wO3A9bSxtPWhlfWYtPUksZCs9SSxwLT1JLG0rPUksemwocyxmLHAsZCxtKX1pZihpJiZyLmluY2x1ZGVFZGdlcyYmaCYmKHRTKHMsZSwibWlkLXNvdXJjZSIpLHRTKHMsZSwibWlkLXRhcmdldCIpLHRTKHMsZSwic291cmNlIiksdFMocyxlLCJ0YXJnZXQiKSksaSl7dmFyIEs9ZS5wc3R5bGUoImdob3N0IikudmFsdWU9PT0ieWVzIjtpZihLKXt2YXIgWD1lLnBzdHlsZSgiZ2hvc3Qtb2Zmc2V0LXgiKS5wZlZhbHVlLHRlPWUucHN0eWxlKCJnaG9zdC1vZmZzZXQteSIpLnBmVmFsdWU7emwocyxzLngxK1gscy55MSt0ZSxzLngyK1gscy55Mit0ZSl9fXZhciBKPWwuYm9keUJvdW5kcz1sLmJvZHlCb3VuZHN8fHt9O0ZwZShKLHMpLHVTKEoseCksY1MoSiwxKSxpJiYoZj1zLngxLGQ9cy54MixwPXMueTEsbT1zLnkyLHpsKHMsZi1TLHAtUyxkK1MsbStTKSk7dmFyIHNlPWwub3ZlcmxheUJvdW5kcz1sLm92ZXJsYXlCb3VuZHN8fHt9O0ZwZShzZSxzKSx1UyhzZSx4KSxjUyhzZSwxKTt2YXIgdWU9bC5sYWJlbEJvdW5kcz1sLmxhYmVsQm91bmRzfHx7fTt1ZS5hbGwhPW51bGw/UHFlKHVlLmFsbCk6dWUuYWxsPUhzKCksaSYmci5pbmNsdWRlTGFiZWxzJiYoci5pbmNsdWRlTWFpbkxhYmVscyYmQ1AocyxlLG51bGwpLGgmJihyLmluY2x1ZGVTb3VyY2VMYWJlbHMmJkNQKHMsZSwic291cmNlIiksci5pbmNsdWRlVGFyZ2V0TGFiZWxzJiZDUChzLGUsInRhcmdldCIpKSl9cmV0dXJuIHMueDE9ZWwocy54MSkscy55MT1lbChzLnkxKSxzLngyPWVsKHMueDIpLHMueTI9ZWwocy55Mikscy53PWVsKHMueDItcy54MSkscy5oPWVsKHMueTItcy55MSkscy53PjAmJnMuaD4wJiZ3JiYodVMocyx4KSxjUyhzLDEpKSxzfSwiYm91bmRpbmdCb3hJbXBsIiksVW1lPW8oZnVuY3Rpb24oZSl7dmFyIHI9MCxuPW8oZnVuY3Rpb24ocyl7cmV0dXJuKHM/MTowKTw8cisrfSwidGYiKSxpPTA7cmV0dXJuIGkrPW4oZS5pbmN1ZGVOb2RlcyksaSs9bihlLmluY2x1ZGVFZGdlcyksaSs9bihlLmluY2x1ZGVMYWJlbHMpLGkrPW4oZS5pbmNsdWRlTWFpbkxhYmVscyksaSs9bihlLmluY2x1ZGVTb3VyY2VMYWJlbHMpLGkrPW4oZS5pbmNsdWRlVGFyZ2V0TGFiZWxzKSxpKz1uKGUuaW5jbHVkZU92ZXJsYXlzKSxpKz1uKGUuaW5jbHVkZU91dGxpbmVzKSxpfSwiZ2V0S2V5IiksSG1lPW8oZnVuY3Rpb24oZSl7aWYoZS5pc0VkZ2UoKSl7dmFyIHI9ZS5zb3VyY2UoKS5wb3NpdGlvbigpLG49ZS50YXJnZXQoKS5wb3NpdGlvbigpLGk9byhmdW5jdGlvbihzKXtyZXR1cm4gTWF0aC5yb3VuZChzKX0sInIiKTtyZXR1cm4gbnFlKFtpKHIueCksaShyLnkpLGkobi54KSxpKG4ueSldKX1lbHNlIHJldHVybiAwfSwiZ2V0Qm91bmRpbmdCb3hQb3NLZXkiKSxzMGU9byhmdW5jdGlvbihlLHIpe3ZhciBuPWUuX3ByaXZhdGUsaSxhPWUuaXNFZGdlKCkscz1yPT1udWxsP28wZTpVbWUociksbD1zPT09bzBlLHU9SG1lKGUpLGg9bi5iYkNhY2hlUG9zS2V5PT09dSxmPXIudXNlQ2FjaGUmJmgsZD1vKGZ1bmN0aW9uKHkpe3JldHVybiB5Ll9wcml2YXRlLmJiQ2FjaGU9PW51bGx8fHkuX3ByaXZhdGUuc3R5bGVEaXJ0eX0sImlzRGlydHkiKSxwPSFmfHxkKGUpfHxhJiYoZChlLnNvdXJjZSgpKXx8ZChlLnRhcmdldCgpKSk7aWYocD8oaHx8ZS5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoZiksaT15S2UoZSxRYiksbi5iYkNhY2hlPWksbi5iYkNhY2hlUG9zS2V5PXUpOmk9bi5iYkNhY2hlLCFsKXt2YXIgbT1lLmlzTm9kZSgpO2k9SHMoKSwoci5pbmNsdWRlTm9kZXMmJm18fHIuaW5jbHVkZUVkZ2VzJiYhbSkmJihyLmluY2x1ZGVPdmVybGF5cz9QcChpLG4ub3ZlcmxheUJvdW5kcyk6UHAoaSxuLmJvZHlCb3VuZHMpKSxyLmluY2x1ZGVMYWJlbHMmJihyLmluY2x1ZGVNYWluTGFiZWxzJiYoIWF8fHIuaW5jbHVkZVNvdXJjZUxhYmVscyYmci5pbmNsdWRlVGFyZ2V0TGFiZWxzKT9QcChpLG4ubGFiZWxCb3VuZHMuYWxsKTooci5pbmNsdWRlTWFpbkxhYmVscyYmUHAoaSxuLmxhYmVsQm91bmRzLm1haW5Sb3QpLHIuaW5jbHVkZVNvdXJjZUxhYmVscyYmUHAoaSxuLmxhYmVsQm91bmRzLnNvdXJjZVJvdCksci5pbmNsdWRlVGFyZ2V0TGFiZWxzJiZQcChpLG4ubGFiZWxCb3VuZHMudGFyZ2V0Um90KSkpLGkudz1pLngyLWkueDEsaS5oPWkueTItaS55MX1yZXR1cm4gaX0sImNhY2hlZEJvdW5kaW5nQm94SW1wbCIpLFFiPXtpbmNsdWRlTm9kZXM6ITAsaW5jbHVkZUVkZ2VzOiEwLGluY2x1ZGVMYWJlbHM6ITAsaW5jbHVkZU1haW5MYWJlbHM6ITAsaW5jbHVkZVNvdXJjZUxhYmVsczohMCxpbmNsdWRlVGFyZ2V0TGFiZWxzOiEwLGluY2x1ZGVPdmVybGF5czohMCxpbmNsdWRlVW5kZXJsYXlzOiEwLGluY2x1ZGVPdXRsaW5lczohMCx1c2VDYWNoZTohMH0sbzBlPVVtZShRYiksbDBlPWxhKFFiKTtPZi5ib3VuZGluZ0JveD1mdW5jdGlvbih0KXt2YXIgZTtpZih0aGlzLmxlbmd0aD09PTEmJnRoaXNbMF0uX3ByaXZhdGUuYmJDYWNoZSE9bnVsbCYmIXRoaXNbMF0uX3ByaXZhdGUuc3R5bGVEaXJ0eSYmKHQ9PT12b2lkIDB8fHQudXNlQ2FjaGU9PT12b2lkIDB8fHQudXNlQ2FjaGU9PT0hMCkpdD09PXZvaWQgMD90PVFiOnQ9bDBlKHQpLGU9czBlKHRoaXNbMF0sdCk7ZWxzZXtlPUhzKCksdD10fHxRYjt2YXIgcj1sMGUodCksbj10aGlzLGk9bi5jeSgpLGE9aS5zdHlsZUVuYWJsZWQoKTtpZihhKWZvcih2YXIgcz0wO3M8bi5sZW5ndGg7cysrKXt2YXIgbD1uW3NdLHU9bC5fcHJpdmF0ZSxoPUhtZShsKSxmPXUuYmJDYWNoZVBvc0tleT09PWgsZD1yLnVzZUNhY2hlJiZmJiYhdS5zdHlsZURpcnR5O2wucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKGQpfXRoaXMudXBkYXRlQ29tcG91bmRCb3VuZHMoIXQudXNlQ2FjaGUpO2Zvcih2YXIgcD0wO3A8bi5sZW5ndGg7cCsrKXt2YXIgbT1uW3BdO1BwKGUsczBlKG0scikpfX1yZXR1cm4gZS54MT1lbChlLngxKSxlLnkxPWVsKGUueTEpLGUueDI9ZWwoZS54MiksZS55Mj1lbChlLnkyKSxlLnc9ZWwoZS54Mi1lLngxKSxlLmg9ZWwoZS55Mi1lLnkxKSxlfTtPZi5kaXJ0eUJvdW5kaW5nQm94Q2FjaGU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PHRoaXMubGVuZ3RoO3QrKyl7dmFyIGU9dGhpc1t0XS5fcHJpdmF0ZTtlLmJiQ2FjaGU9bnVsbCxlLmJiQ2FjaGVQb3NLZXk9bnVsbCxlLmJvZHlCb3VuZHM9bnVsbCxlLm92ZXJsYXlCb3VuZHM9bnVsbCxlLmxhYmVsQm91bmRzLmFsbD1udWxsLGUubGFiZWxCb3VuZHMuc291cmNlPW51bGwsZS5sYWJlbEJvdW5kcy50YXJnZXQ9bnVsbCxlLmxhYmVsQm91bmRzLm1haW49bnVsbCxlLmxhYmVsQm91bmRzLnNvdXJjZVJvdD1udWxsLGUubGFiZWxCb3VuZHMudGFyZ2V0Um90PW51bGwsZS5sYWJlbEJvdW5kcy5tYWluUm90PW51bGwsZS5hcnJvd0JvdW5kcy5zb3VyY2U9bnVsbCxlLmFycm93Qm91bmRzLnRhcmdldD1udWxsLGUuYXJyb3dCb3VuZHNbIm1pZC1zb3VyY2UiXT1udWxsLGUuYXJyb3dCb3VuZHNbIm1pZC10YXJnZXQiXT1udWxsfXJldHVybiB0aGlzLmVtaXRBbmROb3RpZnkoImJvdW5kcyIpLHRoaXN9O09mLmJvdW5kaW5nQm94QXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5ub2RlcygpLHI9dGhpcy5jeSgpLG49ci5oYXNDb21wb3VuZE5vZGVzKCksaT1yLmNvbGxlY3Rpb24oKTtpZihuJiYoaT1lLmZpbHRlcihmdW5jdGlvbihoKXtyZXR1cm4gaC5pc1BhcmVudCgpfSksZT1lLm5vdChpKSksVXIodCkpe3ZhciBhPXQ7dD1vKGZ1bmN0aW9uKCl7cmV0dXJuIGF9LCJmbiIpfXZhciBzPW8oZnVuY3Rpb24oZixkKXtyZXR1cm4gZi5fcHJpdmF0ZS5iYkF0T2xkUG9zPXQoZixkKX0sInN0b3JlT2xkUG9zIiksbD1vKGZ1bmN0aW9uKGYpe3JldHVybiBmLl9wcml2YXRlLmJiQXRPbGRQb3N9LCJnZXRPbGRQb3MiKTtyLnN0YXJ0QmF0Y2goKSxlLmZvckVhY2gocykuc2lsZW50UG9zaXRpb25zKHQpLG4mJihpLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpLGkuZGlydHlCb3VuZGluZ0JveENhY2hlKCksaS51cGRhdGVDb21wb3VuZEJvdW5kcyghMCkpO3ZhciB1PU9xZSh0aGlzLmJvdW5kaW5nQm94KHt1c2VDYWNoZTohMX0pKTtyZXR1cm4gZS5zaWxlbnRQb3NpdGlvbnMobCksbiYmKGkuZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlKCksaS5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKSxpLnVwZGF0ZUNvbXBvdW5kQm91bmRzKCEwKSksci5lbmRCYXRjaCgpLHV9O1gxLmJvdW5kaW5nYm94PVgxLmJiPVgxLmJvdW5kaW5nQm94O1gxLnJlbmRlcmVkQm91bmRpbmdib3g9WDEucmVuZGVyZWRCb3VuZGluZ0JveDt2S2U9T2Y7QmI9YTQ9e307V21lPW8oZnVuY3Rpb24oZSl7ZS51cHBlcmNhc2VOYW1lPVJwZShlLm5hbWUpLGUuYXV0b05hbWU9ImF1dG8iK2UudXBwZXJjYXNlTmFtZSxlLmxhYmVsTmFtZT0ibGFiZWwiK2UudXBwZXJjYXNlTmFtZSxlLm91dGVyTmFtZT0ib3V0ZXIiK2UudXBwZXJjYXNlTmFtZSxlLnVwcGVyY2FzZU91dGVyTmFtZT1ScGUoZS5vdXRlck5hbWUpLEJiW2UubmFtZV09byhmdW5jdGlvbigpe3ZhciBuPXRoaXNbMF0saT1uLl9wcml2YXRlLGE9aS5jeSxzPWEuX3ByaXZhdGUuc3R5bGVFbmFibGVkO2lmKG4paWYocyl7aWYobi5pc1BhcmVudCgpKXJldHVybiBuLnVwZGF0ZUNvbXBvdW5kQm91bmRzKCksaVtlLmF1dG9OYW1lXXx8MDt2YXIgbD1uLnBzdHlsZShlLm5hbWUpO3N3aXRjaChsLnN0clZhbHVlKXtjYXNlImxhYmVsIjpyZXR1cm4gbi5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoKSxpLnJzdHlsZVtlLmxhYmVsTmFtZV18fDA7ZGVmYXVsdDpyZXR1cm4gbC5wZlZhbHVlfX1lbHNlIHJldHVybiAxfSwiZGltSW1wbCIpLEJiWyJvdXRlciIrZS51cHBlcmNhc2VOYW1lXT1vKGZ1bmN0aW9uKCl7dmFyIG49dGhpc1swXSxpPW4uX3ByaXZhdGUsYT1pLmN5LHM9YS5fcHJpdmF0ZS5zdHlsZUVuYWJsZWQ7aWYobilpZihzKXt2YXIgbD1uW2UubmFtZV0oKSx1PW4ucHN0eWxlKCJib3JkZXItd2lkdGgiKS5wZlZhbHVlLGg9MipuLnBhZGRpbmcoKTtyZXR1cm4gbCt1K2h9ZWxzZSByZXR1cm4gMX0sIm91dGVyRGltSW1wbCIpLEJiWyJyZW5kZXJlZCIrZS51cHBlcmNhc2VOYW1lXT1vKGZ1bmN0aW9uKCl7dmFyIG49dGhpc1swXTtpZihuKXt2YXIgaT1uW2UubmFtZV0oKTtyZXR1cm4gaSp0aGlzLmN5KCkuem9vbSgpfX0sInJlbmRlcmVkRGltSW1wbCIpLEJiWyJyZW5kZXJlZCIrZS51cHBlcmNhc2VPdXRlck5hbWVdPW8oZnVuY3Rpb24oKXt2YXIgbj10aGlzWzBdO2lmKG4pe3ZhciBpPW5bZS5vdXRlck5hbWVdKCk7cmV0dXJuIGkqdGhpcy5jeSgpLnpvb20oKX19LCJyZW5kZXJlZE91dGVyRGltSW1wbCIpfSwiZGVmaW5lRGltRm5zIik7V21lKHtuYW1lOiJ3aWR0aCJ9KTtXbWUoe25hbWU6ImhlaWdodCJ9KTthNC5wYWRkaW5nPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpc1swXSxlPXQuX3ByaXZhdGU7cmV0dXJuIHQuaXNQYXJlbnQoKT8odC51cGRhdGVDb21wb3VuZEJvdW5kcygpLGUuYXV0b1BhZGRpbmchPT12b2lkIDA/ZS5hdXRvUGFkZGluZzp0LnBzdHlsZSgicGFkZGluZyIpLnBmVmFsdWUpOnQucHN0eWxlKCJwYWRkaW5nIikucGZWYWx1ZX07YTQucGFkZGVkSGVpZ2h0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpc1swXTtyZXR1cm4gdC5oZWlnaHQoKSsyKnQucGFkZGluZygpfTthNC5wYWRkZWRXaWR0aD1mdW5jdGlvbigpe3ZhciB0PXRoaXNbMF07cmV0dXJuIHQud2lkdGgoKSsyKnQucGFkZGluZygpfTt4S2U9YTQsYktlPW8oZnVuY3Rpb24oZSxyKXtpZihlLmlzRWRnZSgpKXJldHVybiByKGUpfSwiaWZFZGdlIiksd0tlPW8oZnVuY3Rpb24oZSxyKXtpZihlLmlzRWRnZSgpKXt2YXIgbj1lLmN5KCk7cmV0dXJuIE1TKHIoZSksbi56b29tKCksbi5wYW4oKSl9fSwiaWZFZGdlUmVuZGVyZWRQb3NpdGlvbiIpLFRLZT1vKGZ1bmN0aW9uKGUscil7aWYoZS5pc0VkZ2UoKSl7dmFyIG49ZS5jeSgpLGk9bi5wYW4oKSxhPW4uem9vbSgpO3JldHVybiByKGUpLm1hcChmdW5jdGlvbihzKXtyZXR1cm4gTVMocyxhLGkpfSl9fSwiaWZFZGdlUmVuZGVyZWRQb3NpdGlvbnMiKSxrS2U9byhmdW5jdGlvbihlKXtyZXR1cm4gZS5yZW5kZXJlcigpLmdldENvbnRyb2xQb2ludHMoZSl9LCJjb250cm9sUG9pbnRzIiksRUtlPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVuZGVyZXIoKS5nZXRTZWdtZW50UG9pbnRzKGUpfSwic2VnbWVudFBvaW50cyIpLFNLZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlbmRlcmVyKCkuZ2V0U291cmNlRW5kcG9pbnQoZSl9LCJzb3VyY2VFbmRwb2ludCIpLENLZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlbmRlcmVyKCkuZ2V0VGFyZ2V0RW5kcG9pbnQoZSl9LCJ0YXJnZXRFbmRwb2ludCIpLEFLZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlbmRlcmVyKCkuZ2V0RWRnZU1pZHBvaW50KGUpfSwibWlkcG9pbnQiKSxjMGU9e2NvbnRyb2xQb2ludHM6e2dldDprS2UsbXVsdDohMH0sc2VnbWVudFBvaW50czp7Z2V0OkVLZSxtdWx0OiEwfSxzb3VyY2VFbmRwb2ludDp7Z2V0OlNLZX0sdGFyZ2V0RW5kcG9pbnQ6e2dldDpDS2V9LG1pZHBvaW50OntnZXQ6QUtlfX0sX0tlPW8oZnVuY3Rpb24oZSl7cmV0dXJuInJlbmRlcmVkIitlWzBdLnRvVXBwZXJDYXNlKCkrZS5zdWJzdHIoMSl9LCJyZW5kZXJlZE5hbWUiKSxES2U9T2JqZWN0LmtleXMoYzBlKS5yZWR1Y2UoZnVuY3Rpb24odCxlKXt2YXIgcj1jMGVbZV0sbj1fS2UoZSk7cmV0dXJuIHRbZV09ZnVuY3Rpb24oKXtyZXR1cm4gYktlKHRoaXMsci5nZXQpfSxyLm11bHQ/dFtuXT1mdW5jdGlvbigpe3JldHVybiBUS2UodGhpcyxyLmdldCl9OnRbbl09ZnVuY3Rpb24oKXtyZXR1cm4gd0tlKHRoaXMsci5nZXQpfSx0fSx7fSksTEtlPXJyKHt9LG1LZSx2S2UseEtlLERLZSk7cW1lPW8oZnVuY3Rpb24oZSxyKXt0aGlzLnJlY3ljbGUoZSxyKX0sIkV2ZW50Iik7byhMYiwicmV0dXJuRmFsc2UiKTtvKHJTLCJyZXR1cm5UcnVlIik7cW1lLnByb3RvdHlwZT17aW5zdGFuY2VTdHJpbmc6byhmdW5jdGlvbigpe3JldHVybiJldmVudCJ9LCJpbnN0YW5jZVN0cmluZyIpLHJlY3ljbGU6byhmdW5jdGlvbihlLHIpe2lmKHRoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD10aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1MYixlIT1udWxsJiZlLnByZXZlbnREZWZhdWx0Pyh0aGlzLnR5cGU9ZS50eXBlLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWUuZGVmYXVsdFByZXZlbnRlZD9yUzpMYik6ZSE9bnVsbCYmZS50eXBlP3I9ZTp0aGlzLnR5cGU9ZSxyIT1udWxsJiYodGhpcy5vcmlnaW5hbEV2ZW50PXIub3JpZ2luYWxFdmVudCx0aGlzLnR5cGU9ci50eXBlIT1udWxsP3IudHlwZTp0aGlzLnR5cGUsdGhpcy5jeT1yLmN5LHRoaXMudGFyZ2V0PXIudGFyZ2V0LHRoaXMucG9zaXRpb249ci5wb3NpdGlvbix0aGlzLnJlbmRlcmVkUG9zaXRpb249ci5yZW5kZXJlZFBvc2l0aW9uLHRoaXMubmFtZXNwYWNlPXIubmFtZXNwYWNlLHRoaXMubGF5b3V0PXIubGF5b3V0KSx0aGlzLmN5IT1udWxsJiZ0aGlzLnBvc2l0aW9uIT1udWxsJiZ0aGlzLnJlbmRlcmVkUG9zaXRpb249PW51bGwpe3ZhciBuPXRoaXMucG9zaXRpb24saT10aGlzLmN5Lnpvb20oKSxhPXRoaXMuY3kucGFuKCk7dGhpcy5yZW5kZXJlZFBvc2l0aW9uPXt4Om4ueCppK2EueCx5Om4ueSppK2EueX19dGhpcy50aW1lU3RhbXA9ZSYmZS50aW1lU3RhbXB8fERhdGUubm93KCl9LCJyZWN5Y2xlIikscHJldmVudERlZmF1bHQ6byhmdW5jdGlvbigpe3RoaXMuaXNEZWZhdWx0UHJldmVudGVkPXJTO3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudDtlJiZlLnByZXZlbnREZWZhdWx0JiZlLnByZXZlbnREZWZhdWx0KCl9LCJwcmV2ZW50RGVmYXVsdCIpLHN0b3BQcm9wYWdhdGlvbjpvKGZ1bmN0aW9uKCl7dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1yUzt2YXIgZT10aGlzLm9yaWdpbmFsRXZlbnQ7ZSYmZS5zdG9wUHJvcGFnYXRpb24mJmUuc3RvcFByb3BhZ2F0aW9uKCl9LCJzdG9wUHJvcGFnYXRpb24iKSxzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246byhmdW5jdGlvbigpe3RoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9clMsdGhpcy5zdG9wUHJvcGFnYXRpb24oKX0sInN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiIpLGlzRGVmYXVsdFByZXZlbnRlZDpMYixpc1Byb3BhZ2F0aW9uU3RvcHBlZDpMYixpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDpMYn07WW1lPS9eKFteLl0rKShcLig/OlteLl0rKSk/JC8sUktlPSIuKiIsWG1lPXtxdWFsaWZpZXJDb21wYXJlOm8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gZT09PXJ9LCJxdWFsaWZpZXJDb21wYXJlIiksZXZlbnRNYXRjaGVzOm8oZnVuY3Rpb24oKXtyZXR1cm4hMH0sImV2ZW50TWF0Y2hlcyIpLGFkZEV2ZW50RmllbGRzOm8oZnVuY3Rpb24oKXt9LCJhZGRFdmVudEZpZWxkcyIpLGNhbGxiYWNrQ29udGV4dDpvKGZ1bmN0aW9uKGUpe3JldHVybiBlfSwiY2FsbGJhY2tDb250ZXh0IiksYmVmb3JlRW1pdDpvKGZ1bmN0aW9uKCl7fSwiYmVmb3JlRW1pdCIpLGFmdGVyRW1pdDpvKGZ1bmN0aW9uKCl7fSwiYWZ0ZXJFbWl0IiksYnViYmxlOm8oZnVuY3Rpb24oKXtyZXR1cm4hMX0sImJ1YmJsZSIpLHBhcmVudDpvKGZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LCJwYXJlbnQiKSxjb250ZXh0Om51bGx9LHUwZT1PYmplY3Qua2V5cyhYbWUpLE5LZT17fTtvKCRTLCJFbWl0dGVyIik7TmY9JFMucHJvdG90eXBlLGptZT1vKGZ1bmN0aW9uKGUscixuLGksYSxzLGwpe3NpKGkpJiYoYT1pLGk9bnVsbCksbCYmKHM9PW51bGw/cz1sOnM9cnIoe30scyxsKSk7Zm9yKHZhciB1PUVuKG4pP246bi5zcGxpdCgvXHMrLyksaD0wO2g8dS5sZW5ndGg7aCsrKXt2YXIgZj11W2hdO2lmKCFBZihmKSl7dmFyIGQ9Zi5tYXRjaChZbWUpO2lmKGQpe3ZhciBwPWRbMV0sbT1kWzJdP2RbMl06bnVsbCxnPXIoZSxmLHAsbSxpLGEscyk7aWYoZz09PSExKWJyZWFrfX19fSwiZm9yRWFjaEV2ZW50IiksaDBlPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gZS5hZGRFdmVudEZpZWxkcyhlLmNvbnRleHQsciksbmV3IHFtZShyLnR5cGUscil9LCJtYWtlRXZlbnRPYmoiKSxNS2U9byhmdW5jdGlvbihlLHIsbil7aWYoZVdlKG4pKXtyKGUsbik7cmV0dXJufWVsc2UgaWYoVXIobikpe3IoZSxoMGUoZSxuKSk7cmV0dXJufWZvcih2YXIgaT1FbihuKT9uOm4uc3BsaXQoL1xzKy8pLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIHM9aVthXTtpZighQWYocykpe3ZhciBsPXMubWF0Y2goWW1lKTtpZihsKXt2YXIgdT1sWzFdLGg9bFsyXT9sWzJdOm51bGwsZj1oMGUoZSx7dHlwZTp1LG5hbWVzcGFjZTpoLHRhcmdldDplLmNvbnRleHR9KTtyKGUsZil9fX19LCJmb3JFYWNoRXZlbnRPYmoiKTtOZi5vbj1OZi5hZGRMaXN0ZW5lcj1mdW5jdGlvbih0LGUscixuLGkpe3JldHVybiBqbWUodGhpcyxmdW5jdGlvbihhLHMsbCx1LGgsZixkKXtzaShmKSYmYS5saXN0ZW5lcnMucHVzaCh7ZXZlbnQ6cyxjYWxsYmFjazpmLHR5cGU6bCxuYW1lc3BhY2U6dSxxdWFsaWZpZXI6aCxjb25mOmR9KX0sdCxlLHIsbixpKSx0aGlzfTtOZi5vbmU9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRoaXMub24odCxlLHIsbix7b25lOiEwfSl9O05mLnJlbW92ZUxpc3RlbmVyPU5mLm9mZj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzO3RoaXMuZW1pdHRpbmchPT0wJiYodGhpcy5saXN0ZW5lcnM9bHFlKHRoaXMubGlzdGVuZXJzKSk7Zm9yKHZhciBhPXRoaXMubGlzdGVuZXJzLHM9byhmdW5jdGlvbihoKXt2YXIgZj1hW2hdO2ptZShpLGZ1bmN0aW9uKGQscCxtLGcseSx2KXtpZigoZi50eXBlPT09bXx8dD09PSIqIikmJighZyYmZi5uYW1lc3BhY2UhPT0iLioifHxmLm5hbWVzcGFjZT09PWcpJiYoIXl8fGQucXVhbGlmaWVyQ29tcGFyZShmLnF1YWxpZmllcix5KSkmJighdnx8Zi5jYWxsYmFjaz09PXYpKXJldHVybiBhLnNwbGljZShoLDEpLCExfSx0LGUscixuKX0sIl9sb29wIiksbD1hLmxlbmd0aC0xO2w+PTA7bC0tKXMobCk7cmV0dXJuIHRoaXN9O05mLnJlbW92ZUFsbExpc3RlbmVycz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlbW92ZUxpc3RlbmVyKCIqIil9O05mLmVtaXQ9TmYudHJpZ2dlcj1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5saXN0ZW5lcnMsaT1uLmxlbmd0aDtyZXR1cm4gdGhpcy5lbWl0dGluZysrLEVuKGUpfHwoZT1bZV0pLE1LZSh0aGlzLGZ1bmN0aW9uKGEscyl7ciE9bnVsbCYmKG49W3tldmVudDpzLmV2ZW50LHR5cGU6cy50eXBlLG5hbWVzcGFjZTpzLm5hbWVzcGFjZSxjYWxsYmFjazpyfV0saT1uLmxlbmd0aCk7Zm9yKHZhciBsPW8oZnVuY3Rpb24oZil7dmFyIGQ9bltmXTtpZihkLnR5cGU9PT1zLnR5cGUmJighZC5uYW1lc3BhY2V8fGQubmFtZXNwYWNlPT09cy5uYW1lc3BhY2V8fGQubmFtZXNwYWNlPT09UktlKSYmYS5ldmVudE1hdGNoZXMoYS5jb250ZXh0LGQscykpe3ZhciBwPVtzXTtlIT1udWxsJiZ1cWUocCxlKSxhLmJlZm9yZUVtaXQoYS5jb250ZXh0LGQscyksZC5jb25mJiZkLmNvbmYub25lJiYoYS5saXN0ZW5lcnM9YS5saXN0ZW5lcnMuZmlsdGVyKGZ1bmN0aW9uKHkpe3JldHVybiB5IT09ZH0pKTt2YXIgbT1hLmNhbGxiYWNrQ29udGV4dChhLmNvbnRleHQsZCxzKSxnPWQuY2FsbGJhY2suYXBwbHkobSxwKTthLmFmdGVyRW1pdChhLmNvbnRleHQsZCxzKSxnPT09ITEmJihzLnN0b3BQcm9wYWdhdGlvbigpLHMucHJldmVudERlZmF1bHQoKSl9fSwiX2xvb3AyIiksdT0wO3U8aTt1KyspbCh1KTthLmJ1YmJsZShhLmNvbnRleHQpJiYhcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpJiZhLnBhcmVudChhLmNvbnRleHQpLmVtaXQocyxlKX0sdCksdGhpcy5lbWl0dGluZy0tLHRoaXN9O0lLZT17cXVhbGlmaWVyQ29tcGFyZTpvKGZ1bmN0aW9uKGUscil7cmV0dXJuIGU9PW51bGx8fHI9PW51bGw/ZT09bnVsbCYmcj09bnVsbDplLnNhbWVUZXh0KHIpfSwicXVhbGlmaWVyQ29tcGFyZSIpLGV2ZW50TWF0Y2hlczpvKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1yLnF1YWxpZmllcjtyZXR1cm4gaSE9bnVsbD9lIT09bi50YXJnZXQmJnQ0KG4udGFyZ2V0KSYmaS5tYXRjaGVzKG4udGFyZ2V0KTohMH0sImV2ZW50TWF0Y2hlcyIpLGFkZEV2ZW50RmllbGRzOm8oZnVuY3Rpb24oZSxyKXtyLmN5PWUuY3koKSxyLnRhcmdldD1lfSwiYWRkRXZlbnRGaWVsZHMiKSxjYWxsYmFja0NvbnRleHQ6byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIHIucXVhbGlmaWVyIT1udWxsP24udGFyZ2V0OmV9LCJjYWxsYmFja0NvbnRleHQiKSxiZWZvcmVFbWl0Om8oZnVuY3Rpb24oZSxyKXtyLmNvbmYmJnIuY29uZi5vbmNlJiZyLmNvbmYub25jZUNvbGxlY3Rpb24ucmVtb3ZlTGlzdGVuZXIoci5ldmVudCxyLnF1YWxpZmllcixyLmNhbGxiYWNrKX0sImJlZm9yZUVtaXQiKSxidWJibGU6byhmdW5jdGlvbigpe3JldHVybiEwfSwiYnViYmxlIikscGFyZW50Om8oZnVuY3Rpb24oZSl7cmV0dXJuIGUuaXNDaGlsZCgpP2UucGFyZW50KCk6ZS5jeSgpfSwicGFyZW50Iil9LG5TPW8oZnVuY3Rpb24oZSl7cmV0dXJuIFp0KGUpP25ldyBMZihlKTplfSwiYXJnU2VsZWN0b3IiKSxLbWU9e2NyZWF0ZUVtaXR0ZXI6byhmdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8dGhpcy5sZW5ndGg7ZSsrKXt2YXIgcj10aGlzW2VdLG49ci5fcHJpdmF0ZTtuLmVtaXR0ZXJ8fChuLmVtaXR0ZXI9bmV3ICRTKElLZSxyKSl9cmV0dXJuIHRoaXN9LCJjcmVhdGVFbWl0dGVyIiksZW1pdHRlcjpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuZW1pdHRlcn0sImVtaXR0ZXIiKSxvbjpvKGZ1bmN0aW9uKGUscixuKXtmb3IodmFyIGk9blMociksYT0wO2E8dGhpcy5sZW5ndGg7YSsrKXt2YXIgcz10aGlzW2FdO3MuZW1pdHRlcigpLm9uKGUsaSxuKX1yZXR1cm4gdGhpc30sIm9uIikscmVtb3ZlTGlzdGVuZXI6byhmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPW5TKHIpLGE9MDthPHRoaXMubGVuZ3RoO2ErKyl7dmFyIHM9dGhpc1thXTtzLmVtaXR0ZXIoKS5yZW1vdmVMaXN0ZW5lcihlLGksbil9cmV0dXJuIHRoaXN9LCJyZW1vdmVMaXN0ZW5lciIpLHJlbW92ZUFsbExpc3RlbmVyczpvKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aDtlKyspe3ZhciByPXRoaXNbZV07ci5lbWl0dGVyKCkucmVtb3ZlQWxsTGlzdGVuZXJzKCl9cmV0dXJuIHRoaXN9LCJyZW1vdmVBbGxMaXN0ZW5lcnMiKSxvbmU6byhmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPW5TKHIpLGE9MDthPHRoaXMubGVuZ3RoO2ErKyl7dmFyIHM9dGhpc1thXTtzLmVtaXR0ZXIoKS5vbmUoZSxpLG4pfXJldHVybiB0aGlzfSwib25lIiksb25jZTpvKGZ1bmN0aW9uKGUscixuKXtmb3IodmFyIGk9blMociksYT0wO2E8dGhpcy5sZW5ndGg7YSsrKXt2YXIgcz10aGlzW2FdO3MuZW1pdHRlcigpLm9uKGUsaSxuLHtvbmNlOiEwLG9uY2VDb2xsZWN0aW9uOnRoaXN9KX19LCJvbmNlIiksZW1pdDpvKGZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPTA7bjx0aGlzLmxlbmd0aDtuKyspe3ZhciBpPXRoaXNbbl07aS5lbWl0dGVyKCkuZW1pdChlLHIpfXJldHVybiB0aGlzfSwiZW1pdCIpLGVtaXRBbmROb3RpZnk6byhmdW5jdGlvbihlLHIpe2lmKHRoaXMubGVuZ3RoIT09MClyZXR1cm4gdGhpcy5jeSgpLm5vdGlmeShlLHRoaXMpLHRoaXMuZW1pdChlLHIpLHRoaXN9LCJlbWl0QW5kTm90aWZ5Iil9O2NuLmV2ZW50QWxpYXNlc09uKEttZSk7UW1lPXtub2RlczpvKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbihyKXtyZXR1cm4gci5pc05vZGUoKX0pLmZpbHRlcihlKX0sIm5vZGVzIiksZWRnZXM6byhmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24ocil7cmV0dXJuIHIuaXNFZGdlKCl9KS5maWx0ZXIoZSl9LCJlZGdlcyIpLGJ5R3JvdXA6byhmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLnNwYXduKCkscj10aGlzLnNwYXduKCksbj0wO248dGhpcy5sZW5ndGg7bisrKXt2YXIgaT10aGlzW25dO2kuaXNOb2RlKCk/ZS5wdXNoKGkpOnIucHVzaChpKX1yZXR1cm57bm9kZXM6ZSxlZGdlczpyfX0sImJ5R3JvdXAiKSxmaWx0ZXI6byhmdW5jdGlvbihlLHIpe2lmKGU9PT12b2lkIDApcmV0dXJuIHRoaXM7aWYoWnQoZSl8fGdvKGUpKXJldHVybiBuZXcgTGYoZSkuZmlsdGVyKHRoaXMpO2lmKHNpKGUpKXtmb3IodmFyIG49dGhpcy5zcGF3bigpLGk9dGhpcyxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBzPWlbYV0sbD1yP2UuYXBwbHkocixbcyxhLGldKTplKHMsYSxpKTtsJiZuLnB1c2gocyl9cmV0dXJuIG59cmV0dXJuIHRoaXMuc3Bhd24oKX0sImZpbHRlciIpLG5vdDpvKGZ1bmN0aW9uKGUpe2lmKGUpe1p0KGUpJiYoZT10aGlzLmZpbHRlcihlKSk7Zm9yKHZhciByPXRoaXMuc3Bhd24oKSxuPTA7bjx0aGlzLmxlbmd0aDtuKyspe3ZhciBpPXRoaXNbbl0sYT1lLmhhcyhpKTthfHxyLnB1c2goaSl9cmV0dXJuIHJ9ZWxzZSByZXR1cm4gdGhpc30sIm5vdCIpLGFic29sdXRlQ29tcGxlbWVudDpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jeSgpO3JldHVybiBlLm11dGFibGVFbGVtZW50cygpLm5vdCh0aGlzKX0sImFic29sdXRlQ29tcGxlbWVudCIpLGludGVyc2VjdDpvKGZ1bmN0aW9uKGUpe2lmKFp0KGUpKXt2YXIgcj1lO3JldHVybiB0aGlzLmZpbHRlcihyKX1mb3IodmFyIG49dGhpcy5zcGF3bigpLGk9dGhpcyxhPWUscz10aGlzLmxlbmd0aDxlLmxlbmd0aCxsPXM/aTphLHU9cz9hOmksaD0wO2g8bC5sZW5ndGg7aCsrKXt2YXIgZj1sW2hdO3UuaGFzKGYpJiZuLnB1c2goZil9cmV0dXJuIG59LCJpbnRlcnNlY3QiKSx4b3I6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLl9wcml2YXRlLmN5O1p0KGUpJiYoZT1yLiQoZSkpO3ZhciBuPXRoaXMuc3Bhd24oKSxpPXRoaXMsYT1lLHM9byhmdW5jdGlvbih1LGgpe2Zvcih2YXIgZj0wO2Y8dS5sZW5ndGg7ZisrKXt2YXIgZD11W2ZdLHA9ZC5fcHJpdmF0ZS5kYXRhLmlkLG09aC5oYXNFbGVtZW50V2l0aElkKHApO218fG4ucHVzaChkKX19LCJhZGQiKTtyZXR1cm4gcyhpLGEpLHMoYSxpKSxufSwieG9yIiksZGlmZjpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuX3ByaXZhdGUuY3k7WnQoZSkmJihlPXIuJChlKSk7dmFyIG49dGhpcy5zcGF3bigpLGk9dGhpcy5zcGF3bigpLGE9dGhpcy5zcGF3bigpLHM9dGhpcyxsPWUsdT1vKGZ1bmN0aW9uKGYsZCxwKXtmb3IodmFyIG09MDttPGYubGVuZ3RoO20rKyl7dmFyIGc9ZlttXSx5PWcuX3ByaXZhdGUuZGF0YS5pZCx2PWQuaGFzRWxlbWVudFdpdGhJZCh5KTt2P2EubWVyZ2UoZyk6cC5wdXNoKGcpfX0sImFkZCIpO3JldHVybiB1KHMsbCxuKSx1KGwscyxpKSx7bGVmdDpuLHJpZ2h0OmksYm90aDphfX0sImRpZmYiKSxhZGQ6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLl9wcml2YXRlLmN5O2lmKCFlKXJldHVybiB0aGlzO2lmKFp0KGUpKXt2YXIgbj1lO2U9ci5tdXRhYmxlRWxlbWVudHMoKS5maWx0ZXIobil9Zm9yKHZhciBpPXRoaXMuc3Bhd25TZWxmKCksYT0wO2E8ZS5sZW5ndGg7YSsrKXt2YXIgcz1lW2FdLGw9IXRoaXMuaGFzKHMpO2wmJmkucHVzaChzKX1yZXR1cm4gaX0sImFkZCIpLG1lcmdlOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fcHJpdmF0ZSxuPXIuY3k7aWYoIWUpcmV0dXJuIHRoaXM7aWYoZSYmWnQoZSkpe3ZhciBpPWU7ZT1uLm11dGFibGVFbGVtZW50cygpLmZpbHRlcihpKX1mb3IodmFyIGE9ci5tYXAscz0wO3M8ZS5sZW5ndGg7cysrKXt2YXIgbD1lW3NdLHU9bC5fcHJpdmF0ZS5kYXRhLmlkLGg9IWEuaGFzKHUpO2lmKGgpe3ZhciBmPXRoaXMubGVuZ3RoKys7dGhpc1tmXT1sLGEuc2V0KHUse2VsZTpsLGluZGV4OmZ9KX19cmV0dXJuIHRoaXN9LCJtZXJnZSIpLHVubWVyZ2VBdDpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXNbZV0sbj1yLmlkKCksaT10aGlzLl9wcml2YXRlLGE9aS5tYXA7dGhpc1tlXT12b2lkIDAsYS5kZWxldGUobik7dmFyIHM9ZT09PXRoaXMubGVuZ3RoLTE7aWYodGhpcy5sZW5ndGg+MSYmIXMpe3ZhciBsPXRoaXMubGVuZ3RoLTEsdT10aGlzW2xdLGg9dS5fcHJpdmF0ZS5kYXRhLmlkO3RoaXNbbF09dm9pZCAwLHRoaXNbZV09dSxhLnNldChoLHtlbGU6dSxpbmRleDplfSl9cmV0dXJuIHRoaXMubGVuZ3RoLS0sdGhpc30sInVubWVyZ2VBdCIpLHVubWVyZ2VPbmU6byhmdW5jdGlvbihlKXtlPWVbMF07dmFyIHI9dGhpcy5fcHJpdmF0ZSxuPWUuX3ByaXZhdGUuZGF0YS5pZCxpPXIubWFwLGE9aS5nZXQobik7aWYoIWEpcmV0dXJuIHRoaXM7dmFyIHM9YS5pbmRleDtyZXR1cm4gdGhpcy51bm1lcmdlQXQocyksdGhpc30sInVubWVyZ2VPbmUiKSx1bm1lcmdlOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fcHJpdmF0ZS5jeTtpZighZSlyZXR1cm4gdGhpcztpZihlJiZadChlKSl7dmFyIG49ZTtlPXIubXV0YWJsZUVsZW1lbnRzKCkuZmlsdGVyKG4pfWZvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKXRoaXMudW5tZXJnZU9uZShlW2ldKTtyZXR1cm4gdGhpc30sInVubWVyZ2UiKSx1bm1lcmdlQnk6byhmdW5jdGlvbihlKXtmb3IodmFyIHI9dGhpcy5sZW5ndGgtMTtyPj0wO3ItLSl7dmFyIG49dGhpc1tyXTtlKG4pJiZ0aGlzLnVubWVyZ2VBdChyKX1yZXR1cm4gdGhpc30sInVubWVyZ2VCeSIpLG1hcDpvKGZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPVtdLGk9dGhpcyxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBzPWlbYV0sbD1yP2UuYXBwbHkocixbcyxhLGldKTplKHMsYSxpKTtuLnB1c2gobCl9cmV0dXJuIG59LCJtYXAiKSxyZWR1Y2U6byhmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj1yLGk9dGhpcyxhPTA7YTxpLmxlbmd0aDthKyspbj1lKG4saVthXSxhLGkpO3JldHVybiBufSwicmVkdWNlIiksbWF4Om8oZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49LTEvMCxpLGE9dGhpcyxzPTA7czxhLmxlbmd0aDtzKyspe3ZhciBsPWFbc10sdT1yP2UuYXBwbHkocixbbCxzLGFdKTplKGwscyxhKTt1Pm4mJihuPXUsaT1sKX1yZXR1cm57dmFsdWU6bixlbGU6aX19LCJtYXgiKSxtaW46byhmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj0xLzAsaSxhPXRoaXMscz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgbD1hW3NdLHU9cj9lLmFwcGx5KHIsW2wscyxhXSk6ZShsLHMsYSk7dTxuJiYobj11LGk9bCl9cmV0dXJue3ZhbHVlOm4sZWxlOml9fSwibWluIil9LFFyPVFtZTtRci51PVFyWyJ8Il09UXJbIisiXT1Rci51bmlvbj1Rci5vcj1Rci5hZGQ7UXJbIlxcIl09UXJbIiEiXT1RclsiLSJdPVFyLmRpZmZlcmVuY2U9UXIucmVsYXRpdmVDb21wbGVtZW50PVFyLnN1YnRyYWN0PVFyLm5vdDtRci5uPVFyWyImIl09UXJbIi4iXT1Rci5hbmQ9UXIuaW50ZXJzZWN0aW9uPVFyLmludGVyc2VjdDtRclsiXiJdPVFyWyIoKykiXT1RclsiKC0pIl09UXIuc3ltbWV0cmljRGlmZmVyZW5jZT1Rci5zeW1kaWZmPVFyLnhvcjtRci5mbkZpbHRlcj1Rci5maWx0ZXJGbj1Rci5zdGRGaWx0ZXI9UXIuZmlsdGVyO1FyLmNvbXBsZW1lbnQ9UXIuYWJzY29tcD1Rci5hYnNvbHV0ZUNvbXBsZW1lbnQ7T0tlPXtpc05vZGU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmdyb3VwKCk9PT0ibm9kZXMifSwiaXNOb2RlIiksaXNFZGdlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncm91cCgpPT09ImVkZ2VzIn0sImlzRWRnZSIpLGlzTG9vcDpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNFZGdlKCkmJnRoaXMuc291cmNlKClbMF09PT10aGlzLnRhcmdldCgpWzBdfSwiaXNMb29wIiksaXNTaW1wbGU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzRWRnZSgpJiZ0aGlzLnNvdXJjZSgpWzBdIT09dGhpcy50YXJnZXQoKVswXX0sImlzU2ltcGxlIiksZ3JvdXA6byhmdW5jdGlvbigpe3ZhciBlPXRoaXNbMF07aWYoZSlyZXR1cm4gZS5fcHJpdmF0ZS5ncm91cH0sImdyb3VwIil9LFptZT1vKGZ1bmN0aW9uKGUscil7dmFyIG49ZS5jeSgpLGk9bi5oYXNDb21wb3VuZE5vZGVzKCk7ZnVuY3Rpb24gYShmKXt2YXIgZD1mLnBzdHlsZSgiei1jb21wb3VuZC1kZXB0aCIpO3JldHVybiBkLnZhbHVlPT09ImF1dG8iP2k/Zi56RGVwdGgoKTowOmQudmFsdWU9PT0iYm90dG9tIj8tMTpkLnZhbHVlPT09InRvcCI/dEI6MH1vKGEsImdldERlcHRoIik7dmFyIHM9YShlKS1hKHIpO2lmKHMhPT0wKXJldHVybiBzO2Z1bmN0aW9uIGwoZil7dmFyIGQ9Zi5wc3R5bGUoInotaW5kZXgtY29tcGFyZSIpO3JldHVybiBkLnZhbHVlPT09ImF1dG8iJiZmLmlzTm9kZSgpPzE6MH1vKGwsImdldEVsZURlcHRoIik7dmFyIHU9bChlKS1sKHIpO2lmKHUhPT0wKXJldHVybiB1O3ZhciBoPWUucHN0eWxlKCJ6LWluZGV4IikudmFsdWUtci5wc3R5bGUoInotaW5kZXgiKS52YWx1ZTtyZXR1cm4gaCE9PTA/aDplLnBvb2xJbmRleCgpLXIucG9vbEluZGV4KCl9LCJ6SW5kZXhTb3J0IiksRVM9e2ZvckVhY2g6byhmdW5jdGlvbihlLHIpe2lmKHNpKGUpKWZvcih2YXIgbj10aGlzLmxlbmd0aCxpPTA7aTxuO2krKyl7dmFyIGE9dGhpc1tpXSxzPXI/ZS5hcHBseShyLFthLGksdGhpc10pOmUoYSxpLHRoaXMpO2lmKHM9PT0hMSlicmVha31yZXR1cm4gdGhpc30sImZvckVhY2giKSx0b0FycmF5Om8oZnVuY3Rpb24oKXtmb3IodmFyIGU9W10scj0wO3I8dGhpcy5sZW5ndGg7cisrKWUucHVzaCh0aGlzW3JdKTtyZXR1cm4gZX0sInRvQXJyYXkiKSxzbGljZTpvKGZ1bmN0aW9uKGUscil7dmFyIG49W10saT10aGlzLmxlbmd0aDtyPT1udWxsJiYocj1pKSxlPT1udWxsJiYoZT0wKSxlPDAmJihlPWkrZSkscjwwJiYocj1pK3IpO2Zvcih2YXIgYT1lO2E+PTAmJmE8ciYmYTxpO2ErKyluLnB1c2godGhpc1thXSk7cmV0dXJuIHRoaXMuc3Bhd24obil9LCJzbGljZSIpLHNpemU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aH0sInNpemUiKSxlcTpvKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzW2VdfHx0aGlzLnNwYXduKCl9LCJlcSIpLGZpcnN0Om8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1swXXx8dGhpcy5zcGF3bigpfSwiZmlyc3QiKSxsYXN0Om8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1t0aGlzLmxlbmd0aC0xXXx8dGhpcy5zcGF3bigpfSwibGFzdCIpLGVtcHR5Om8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGg9PT0wfSwiZW1wdHkiKSxub25lbXB0eTpvKGZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZW1wdHkoKX0sIm5vbmVtcHR5Iiksc29ydDpvKGZ1bmN0aW9uKGUpe2lmKCFzaShlKSlyZXR1cm4gdGhpczt2YXIgcj10aGlzLnRvQXJyYXkoKS5zb3J0KGUpO3JldHVybiB0aGlzLnNwYXduKHIpfSwic29ydCIpLHNvcnRCeVpJbmRleDpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc29ydChabWUpfSwic29ydEJ5WkluZGV4IiksekRlcHRoOm8oZnVuY3Rpb24oKXt2YXIgZT10aGlzWzBdO2lmKGUpe3ZhciByPWUuX3ByaXZhdGUsbj1yLmdyb3VwO2lmKG49PT0ibm9kZXMiKXt2YXIgaT1yLmRhdGEucGFyZW50P2UucGFyZW50cygpLnNpemUoKTowO3JldHVybiBlLmlzUGFyZW50KCk/aTp0Qi0xfWVsc2V7dmFyIGE9ci5zb3VyY2Uscz1yLnRhcmdldCxsPWEuekRlcHRoKCksdT1zLnpEZXB0aCgpO3JldHVybiBNYXRoLm1heChsLHUsMCl9fX0sInpEZXB0aCIpfTtFUy5lYWNoPUVTLmZvckVhY2g7UEtlPW8oZnVuY3Rpb24oKXt2YXIgZT0idW5kZWZpbmVkIixyPSh0eXBlb2YgU3ltYm9sPiJ1Ij8idW5kZWZpbmVkIjpXaShTeW1ib2wpKSE9ZSYmV2koU3ltYm9sLml0ZXJhdG9yKSE9ZTtyJiYoRVNbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3ZhciBuPXRoaXMsaT17dmFsdWU6dm9pZCAwLGRvbmU6ITF9LGE9MCxzPXRoaXMubGVuZ3RoO3JldHVybiBYMGUoe25leHQ6byhmdW5jdGlvbigpe3JldHVybiBhPHM/aS52YWx1ZT1uW2ErK106KGkudmFsdWU9dm9pZCAwLGkuZG9uZT0hMCksaX0sIm5leHQiKX0sU3ltYm9sLml0ZXJhdG9yLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KX0pfSwiZGVmaW5lU3ltYm9sSXRlcmF0b3IiKTtQS2UoKTtCS2U9bGEoe25vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczohMX0pLGZTPXtsYXlvdXREaW1lbnNpb25zOm8oZnVuY3Rpb24oZSl7ZT1CS2UoZSk7dmFyIHI7aWYoIXRoaXMudGFrZXNVcFNwYWNlKCkpcj17dzowLGg6MH07ZWxzZSBpZihlLm5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVscyl7dmFyIG49dGhpcy5ib3VuZGluZ0JveCgpO3I9e3c6bi53LGg6bi5ofX1lbHNlIHI9e3c6dGhpcy5vdXRlcldpZHRoKCksaDp0aGlzLm91dGVySGVpZ2h0KCl9O3JldHVybihyLnc9PT0wfHxyLmg9PT0wKSYmKHIudz1yLmg9MSkscn0sImxheW91dERpbWVuc2lvbnMiKSxsYXlvdXRQb3NpdGlvbnM6byhmdW5jdGlvbihlLHIsbil7dmFyIGk9dGhpcy5ub2RlcygpLmZpbHRlcihmdW5jdGlvbihUKXtyZXR1cm4hVC5pc1BhcmVudCgpfSksYT10aGlzLmN5KCkscz1yLmVsZXMsbD1vKGZ1bmN0aW9uKEUpe3JldHVybiBFLmlkKCl9LCJnZXRNZW1vaXplS2V5IiksdT1VYihuLGwpO2UuZW1pdCh7dHlwZToibGF5b3V0c3RhcnQiLGxheW91dDplfSksZS5hbmltYXRpb25zPVtdO3ZhciBoPW8oZnVuY3Rpb24oRSxBLFMpe3ZhciBfPXt4OkEueDErQS53LzIseTpBLnkxK0EuaC8yfSxJPXt4OihTLngtXy54KSpFLHk6KFMueS1fLnkpKkV9O3JldHVybnt4Ol8ueCtJLngseTpfLnkrSS55fX0sImNhbGN1bGF0ZVNwYWNpbmciKSxmPXIuc3BhY2luZ0ZhY3RvciYmci5zcGFjaW5nRmFjdG9yIT09MSxkPW8oZnVuY3Rpb24oKXtpZighZilyZXR1cm4gbnVsbDtmb3IodmFyIEU9SHMoKSxBPTA7QTxpLmxlbmd0aDtBKyspe3ZhciBTPWlbQV0sXz11KFMsQSk7RnFlKEUsXy54LF8ueSl9cmV0dXJuIEV9LCJzcGFjaW5nQmIiKSxwPWQoKSxtPVViKGZ1bmN0aW9uKFQsRSl7dmFyIEE9dShULEUpO2lmKGYpe3ZhciBTPU1hdGguYWJzKHIuc3BhY2luZ0ZhY3Rvcik7QT1oKFMscCxBKX1yZXR1cm4gci50cmFuc2Zvcm0hPW51bGwmJihBPXIudHJhbnNmb3JtKFQsQSkpLEF9LGwpO2lmKHIuYW5pbWF0ZSl7Zm9yKHZhciBnPTA7ZzxpLmxlbmd0aDtnKyspe3ZhciB5PWlbZ10sdj1tKHksZykseD1yLmFuaW1hdGVGaWx0ZXI9PW51bGx8fHIuYW5pbWF0ZUZpbHRlcih5LGcpO2lmKHgpe3ZhciBiPXkuYW5pbWF0aW9uKHtwb3NpdGlvbjp2LGR1cmF0aW9uOnIuYW5pbWF0aW9uRHVyYXRpb24sZWFzaW5nOnIuYW5pbWF0aW9uRWFzaW5nfSk7ZS5hbmltYXRpb25zLnB1c2goYil9ZWxzZSB5LnBvc2l0aW9uKHYpfWlmKHIuZml0KXt2YXIgdz1hLmFuaW1hdGlvbih7Zml0Ontib3VuZGluZ0JveDpzLmJvdW5kaW5nQm94QXQobSkscGFkZGluZzpyLnBhZGRpbmd9LGR1cmF0aW9uOnIuYW5pbWF0aW9uRHVyYXRpb24sZWFzaW5nOnIuYW5pbWF0aW9uRWFzaW5nfSk7ZS5hbmltYXRpb25zLnB1c2godyl9ZWxzZSBpZihyLnpvb20hPT12b2lkIDAmJnIucGFuIT09dm9pZCAwKXt2YXIgQz1hLmFuaW1hdGlvbih7em9vbTpyLnpvb20scGFuOnIucGFuLGR1cmF0aW9uOnIuYW5pbWF0aW9uRHVyYXRpb24sZWFzaW5nOnIuYW5pbWF0aW9uRWFzaW5nfSk7ZS5hbmltYXRpb25zLnB1c2goQyl9ZS5hbmltYXRpb25zLmZvckVhY2goZnVuY3Rpb24oVCl7cmV0dXJuIFQucGxheSgpfSksZS5vbmUoImxheW91dHJlYWR5IixyLnJlYWR5KSxlLmVtaXQoe3R5cGU6ImxheW91dHJlYWR5IixsYXlvdXQ6ZX0pLGV5LmFsbChlLmFuaW1hdGlvbnMubWFwKGZ1bmN0aW9uKFQpe3JldHVybiBULnByb21pc2UoKX0pKS50aGVuKGZ1bmN0aW9uKCl7ZS5vbmUoImxheW91dHN0b3AiLHIuc3RvcCksZS5lbWl0KHt0eXBlOiJsYXlvdXRzdG9wIixsYXlvdXQ6ZX0pfSl9ZWxzZSBpLnBvc2l0aW9ucyhtKSxyLmZpdCYmYS5maXQoci5lbGVzLHIucGFkZGluZyksci56b29tIT1udWxsJiZhLnpvb20oci56b29tKSxyLnBhbiYmYS5wYW4oci5wYW4pLGUub25lKCJsYXlvdXRyZWFkeSIsci5yZWFkeSksZS5lbWl0KHt0eXBlOiJsYXlvdXRyZWFkeSIsbGF5b3V0OmV9KSxlLm9uZSgibGF5b3V0c3RvcCIsci5zdG9wKSxlLmVtaXQoe3R5cGU6ImxheW91dHN0b3AiLGxheW91dDplfSk7cmV0dXJuIHRoaXN9LCJsYXlvdXRQb3NpdGlvbnMiKSxsYXlvdXQ6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLmN5KCk7cmV0dXJuIHIubWFrZUxheW91dChycih7fSxlLHtlbGVzOnRoaXN9KSl9LCJsYXlvdXQiKX07ZlMuY3JlYXRlTGF5b3V0PWZTLm1ha2VMYXlvdXQ9ZlMubGF5b3V0O28oSm1lLCJzdHlsZUNhY2hlIik7byh6UywiY2FjaGVTdHlsZUZ1bmN0aW9uIik7byhHUywiY2FjaGVQcm90b3R5cGVTdHlsZUZ1bmN0aW9uIik7VGE9e3JlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZTpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuY3koKSxuPXIucmVuZGVyZXIoKSxpPXIuc3R5bGVFbmFibGVkKCk7cmV0dXJuIG4mJmkmJm4ucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKHRoaXMsZSksdGhpc30sInJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSIpLGRpcnR5U3R5bGVDYWNoZTpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jeSgpLHI9byhmdW5jdGlvbihhKXtyZXR1cm4gYS5fcHJpdmF0ZS5zdHlsZUNhY2hlPW51bGx9LCJkaXJ0eSIpO2lmKGUuaGFzQ29tcG91bmROb2RlcygpKXt2YXIgbjtuPXRoaXMuc3Bhd25TZWxmKCkubWVyZ2UodGhpcy5kZXNjZW5kYW50cygpKS5tZXJnZSh0aGlzLnBhcmVudHMoKSksbi5tZXJnZShuLmNvbm5lY3RlZEVkZ2VzKCkpLG4uZm9yRWFjaChyKX1lbHNlIHRoaXMuZm9yRWFjaChmdW5jdGlvbihpKXtyKGkpLGkuY29ubmVjdGVkRWRnZXMoKS5mb3JFYWNoKHIpfSk7cmV0dXJuIHRoaXN9LCJkaXJ0eVN0eWxlQ2FjaGUiKSx1cGRhdGVTdHlsZTpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuX3ByaXZhdGUuY3k7aWYoIXIuc3R5bGVFbmFibGVkKCkpcmV0dXJuIHRoaXM7aWYoci5iYXRjaGluZygpKXt2YXIgbj1yLl9wcml2YXRlLmJhdGNoU3R5bGVFbGVzO3JldHVybiBuLm1lcmdlKHRoaXMpLHRoaXN9dmFyIGk9ci5oYXNDb21wb3VuZE5vZGVzKCksYT10aGlzO2U9ISEoZXx8ZT09PXZvaWQgMCksaSYmKGE9dGhpcy5zcGF3blNlbGYoKS5tZXJnZSh0aGlzLmRlc2NlbmRhbnRzKCkpLm1lcmdlKHRoaXMucGFyZW50cygpKSk7dmFyIHM9YTtyZXR1cm4gZT9zLmVtaXRBbmROb3RpZnkoInN0eWxlIik6cy5lbWl0KCJzdHlsZSIpLGEuZm9yRWFjaChmdW5jdGlvbihsKXtyZXR1cm4gbC5fcHJpdmF0ZS5zdHlsZURpcnR5PSEwfSksdGhpc30sInVwZGF0ZVN0eWxlIiksY2xlYW5TdHlsZTpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jeSgpO2lmKGUuc3R5bGVFbmFibGVkKCkpZm9yKHZhciByPTA7cjx0aGlzLmxlbmd0aDtyKyspe3ZhciBuPXRoaXNbcl07bi5fcHJpdmF0ZS5zdHlsZURpcnR5JiYobi5fcHJpdmF0ZS5zdHlsZURpcnR5PSExLGUuc3R5bGUoKS5hcHBseShuKSl9fSwiY2xlYW5TdHlsZSIpLHBhcnNlZFN0eWxlOm8oZnVuY3Rpb24oZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiEwLG49dGhpc1swXSxpPW4uY3koKTtpZihpLnN0eWxlRW5hYmxlZCgpJiZuKXtuLl9wcml2YXRlLnN0eWxlRGlydHkmJihuLl9wcml2YXRlLnN0eWxlRGlydHk9ITEsaS5zdHlsZSgpLmFwcGx5KG4pKTt2YXIgYT1uLl9wcml2YXRlLnN0eWxlW2VdO3JldHVybiBhPz8ocj9pLnN0eWxlKCkuZ2V0RGVmYXVsdFByb3BlcnR5KGUpOm51bGwpfX0sInBhcnNlZFN0eWxlIiksbnVtZXJpY1N0eWxlOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpc1swXTtpZihyLmN5KCkuc3R5bGVFbmFibGVkKCkmJnIpe3ZhciBuPXIucHN0eWxlKGUpO3JldHVybiBuLnBmVmFsdWUhPT12b2lkIDA/bi5wZlZhbHVlOm4udmFsdWV9fSwibnVtZXJpY1N0eWxlIiksbnVtZXJpY1N0eWxlVW5pdHM6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzWzBdO2lmKHIuY3koKS5zdHlsZUVuYWJsZWQoKSYmcilyZXR1cm4gci5wc3R5bGUoZSkudW5pdHN9LCJudW1lcmljU3R5bGVVbml0cyIpLHJlbmRlcmVkU3R5bGU6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLmN5KCk7aWYoIXIuc3R5bGVFbmFibGVkKCkpcmV0dXJuIHRoaXM7dmFyIG49dGhpc1swXTtpZihuKXJldHVybiByLnN0eWxlKCkuZ2V0UmVuZGVyZWRTdHlsZShuLGUpfSwicmVuZGVyZWRTdHlsZSIpLHN0eWxlOm8oZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLmN5KCk7aWYoIW4uc3R5bGVFbmFibGVkKCkpcmV0dXJuIHRoaXM7dmFyIGk9ITEsYT1uLnN0eWxlKCk7aWYoVXIoZSkpe3ZhciBzPWU7YS5hcHBseUJ5cGFzcyh0aGlzLHMsaSksdGhpcy5lbWl0QW5kTm90aWZ5KCJzdHlsZSIpfWVsc2UgaWYoWnQoZSkpaWYocj09PXZvaWQgMCl7dmFyIGw9dGhpc1swXTtyZXR1cm4gbD9hLmdldFN0eWxlUHJvcGVydHlWYWx1ZShsLGUpOnZvaWQgMH1lbHNlIGEuYXBwbHlCeXBhc3ModGhpcyxlLHIsaSksdGhpcy5lbWl0QW5kTm90aWZ5KCJzdHlsZSIpO2Vsc2UgaWYoZT09PXZvaWQgMCl7dmFyIHU9dGhpc1swXTtyZXR1cm4gdT9hLmdldFJhd1N0eWxlKHUpOnZvaWQgMH1yZXR1cm4gdGhpc30sInN0eWxlIikscmVtb3ZlU3R5bGU6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLmN5KCk7aWYoIXIuc3R5bGVFbmFibGVkKCkpcmV0dXJuIHRoaXM7dmFyIG49ITEsaT1yLnN0eWxlKCksYT10aGlzO2lmKGU9PT12b2lkIDApZm9yKHZhciBzPTA7czxhLmxlbmd0aDtzKyspe3ZhciBsPWFbc107aS5yZW1vdmVBbGxCeXBhc3NlcyhsLG4pfWVsc2V7ZT1lLnNwbGl0KC9ccysvKTtmb3IodmFyIHU9MDt1PGEubGVuZ3RoO3UrKyl7dmFyIGg9YVt1XTtpLnJlbW92ZUJ5cGFzc2VzKGgsZSxuKX19cmV0dXJuIHRoaXMuZW1pdEFuZE5vdGlmeSgic3R5bGUiKSx0aGlzfSwicmVtb3ZlU3R5bGUiKSxzaG93Om8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jc3MoImRpc3BsYXkiLCJlbGVtZW50IiksdGhpc30sInNob3ciKSxoaWRlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jc3MoImRpc3BsYXkiLCJub25lIiksdGhpc30sImhpZGUiKSxlZmZlY3RpdmVPcGFjaXR5Om8oZnVuY3Rpb24oKXt2YXIgZT10aGlzLmN5KCk7aWYoIWUuc3R5bGVFbmFibGVkKCkpcmV0dXJuIDE7dmFyIHI9ZS5oYXNDb21wb3VuZE5vZGVzKCksbj10aGlzWzBdO2lmKG4pe3ZhciBpPW4uX3ByaXZhdGUsYT1uLnBzdHlsZSgib3BhY2l0eSIpLnZhbHVlO2lmKCFyKXJldHVybiBhO3ZhciBzPWkuZGF0YS5wYXJlbnQ/bi5wYXJlbnRzKCk6bnVsbDtpZihzKWZvcih2YXIgbD0wO2w8cy5sZW5ndGg7bCsrKXt2YXIgdT1zW2xdLGg9dS5wc3R5bGUoIm9wYWNpdHkiKS52YWx1ZTthPWgqYX1yZXR1cm4gYX19LCJlZmZlY3RpdmVPcGFjaXR5IiksdHJhbnNwYXJlbnQ6byhmdW5jdGlvbigpe3ZhciBlPXRoaXMuY3koKTtpZighZS5zdHlsZUVuYWJsZWQoKSlyZXR1cm4hMTt2YXIgcj10aGlzWzBdLG49ci5jeSgpLmhhc0NvbXBvdW5kTm9kZXMoKTtpZihyKXJldHVybiBuP3IuZWZmZWN0aXZlT3BhY2l0eSgpPT09MDpyLnBzdHlsZSgib3BhY2l0eSIpLnZhbHVlPT09MH0sInRyYW5zcGFyZW50IiksYmFja2dyb3VuZGluZzpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jeSgpO2lmKCFlLnN0eWxlRW5hYmxlZCgpKXJldHVybiExO3ZhciByPXRoaXNbMF07cmV0dXJuISFyLl9wcml2YXRlLmJhY2tncm91bmRpbmd9LCJiYWNrZ3JvdW5kaW5nIil9O28oQVAsImNoZWNrQ29tcG91bmQiKTtvKGRCLCJkZWZpbmVEZXJpdmVkU3RhdGVGdW5jdGlvbiIpO2l5PXpTKCJlbGVUYWtlc1VwU3BhY2UiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnBzdHlsZSgiZGlzcGxheSIpLnZhbHVlPT09ImVsZW1lbnQiJiZ0LndpZHRoKCkhPT0wJiYodC5pc05vZGUoKT90LmhlaWdodCgpIT09MDohMCl9KTtUYS50YWtlc1VwU3BhY2U9R1MoInRha2VzVXBTcGFjZSIsZEIoe29rOml5fSkpO0ZLZT16UygiZWxlSW50ZXJhY3RpdmUiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnBzdHlsZSgiZXZlbnRzIikudmFsdWU9PT0ieWVzIiYmdC5wc3R5bGUoInZpc2liaWxpdHkiKS52YWx1ZT09PSJ2aXNpYmxlIiYmaXkodCl9KSwkS2U9elMoInBhcmVudEludGVyYWN0aXZlIixmdW5jdGlvbih0KXtyZXR1cm4gdC5wc3R5bGUoInZpc2liaWxpdHkiKS52YWx1ZT09PSJ2aXNpYmxlIiYmaXkodCl9KTtUYS5pbnRlcmFjdGl2ZT1HUygiaW50ZXJhY3RpdmUiLGRCKHtvazpGS2UscGFyZW50T2s6JEtlLGVkZ2VPa1ZpYU5vZGU6aXl9KSk7VGEubm9uaW50ZXJhY3RpdmU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzWzBdO2lmKHQpcmV0dXJuIXQuaW50ZXJhY3RpdmUoKX07ektlPXpTKCJlbGVWaXNpYmxlIixmdW5jdGlvbih0KXtyZXR1cm4gdC5wc3R5bGUoInZpc2liaWxpdHkiKS52YWx1ZT09PSJ2aXNpYmxlIiYmdC5wc3R5bGUoIm9wYWNpdHkiKS5wZlZhbHVlIT09MCYmaXkodCl9KSxHS2U9aXk7VGEudmlzaWJsZT1HUygidmlzaWJsZSIsZEIoe29rOnpLZSxlZGdlT2tWaWFOb2RlOkdLZX0pKTtUYS5oaWRkZW49ZnVuY3Rpb24oKXt2YXIgdD10aGlzWzBdO2lmKHQpcmV0dXJuIXQudmlzaWJsZSgpfTtUYS5pc0J1bmRsZWRCZXppZXI9R1MoImlzQnVuZGxlZEJlemllciIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jeSgpLnN0eWxlRW5hYmxlZCgpPyF0aGlzLnJlbW92ZWQoKSYmdGhpcy5wc3R5bGUoImN1cnZlLXN0eWxlIikudmFsdWU9PT0iYmV6aWVyIiYmdGhpcy50YWtlc1VwU3BhY2UoKTohMX0pO1RhLmJ5cGFzcz1UYS5jc3M9VGEuc3R5bGU7VGEucmVuZGVyZWRDc3M9VGEucmVuZGVyZWRTdHlsZTtUYS5yZW1vdmVCeXBhc3M9VGEucmVtb3ZlQ3NzPVRhLnJlbW92ZVN0eWxlO1RhLnBzdHlsZT1UYS5wYXJzZWRTdHlsZTtDZj17fTtvKGYwZSwiZGVmaW5lU3dpdGNoRnVuY3Rpb24iKTtvKGF5LCJkZWZpbmVTd2l0Y2hTZXQiKTtheSh7ZmllbGQ6ImxvY2tlZCIsb3ZlcnJpZGVGaWVsZDpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLmN5KCkuYXV0b2xvY2soKT8hMDp2b2lkIDB9LCJvdmVycmlkZUZpZWxkIiksb246ImxvY2siLG9mZjoidW5sb2NrIn0pO2F5KHtmaWVsZDoiZ3JhYmJhYmxlIixvdmVycmlkZUZpZWxkOm8oZnVuY3Rpb24oZSl7cmV0dXJuIGUuY3koKS5hdXRvdW5ncmFiaWZ5KCl8fGUucGFubmFibGUoKT8hMTp2b2lkIDB9LCJvdmVycmlkZUZpZWxkIiksb246ImdyYWJpZnkiLG9mZjoidW5ncmFiaWZ5In0pO2F5KHtmaWVsZDoic2VsZWN0ZWQiLGFibGVGaWVsZDoic2VsZWN0YWJsZSIsb3ZlcnJpZGVBYmxlOm8oZnVuY3Rpb24oZSl7cmV0dXJuIGUuY3koKS5hdXRvdW5zZWxlY3RpZnkoKT8hMTp2b2lkIDB9LCJvdmVycmlkZUFibGUiKSxvbjoic2VsZWN0IixvZmY6InVuc2VsZWN0In0pO2F5KHtmaWVsZDoic2VsZWN0YWJsZSIsb3ZlcnJpZGVGaWVsZDpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLmN5KCkuYXV0b3Vuc2VsZWN0aWZ5KCk/ITE6dm9pZCAwfSwib3ZlcnJpZGVGaWVsZCIpLG9uOiJzZWxlY3RpZnkiLG9mZjoidW5zZWxlY3RpZnkifSk7Q2YuZGVzZWxlY3Q9Q2YudW5zZWxlY3Q7Q2YuZ3JhYmJlZD1mdW5jdGlvbigpe3ZhciB0PXRoaXNbMF07aWYodClyZXR1cm4gdC5fcHJpdmF0ZS5ncmFiYmVkfTtheSh7ZmllbGQ6ImFjdGl2ZSIsb246ImFjdGl2YXRlIixvZmY6InVuYWN0aXZhdGUifSk7YXkoe2ZpZWxkOiJwYW5uYWJsZSIsb246InBhbmlmeSIsb2ZmOiJ1bnBhbmlmeSJ9KTtDZi5pbmFjdGl2ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXNbMF07aWYodClyZXR1cm4hdC5fcHJpdmF0ZS5hY3RpdmV9OyRhPXt9LGQwZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBvKGZ1bmN0aW9uKG4pe2Zvcih2YXIgaT10aGlzLGE9W10scz0wO3M8aS5sZW5ndGg7cysrKXt2YXIgbD1pW3NdO2lmKGwuaXNOb2RlKCkpe2Zvcih2YXIgdT0hMSxoPWwuY29ubmVjdGVkRWRnZXMoKSxmPTA7ZjxoLmxlbmd0aDtmKyspe3ZhciBkPWhbZl0scD1kLnNvdXJjZSgpLG09ZC50YXJnZXQoKTtpZihlLm5vSW5jb21pbmdFZGdlcyYmbT09PWwmJnAhPT1sfHxlLm5vT3V0Z29pbmdFZGdlcyYmcD09PWwmJm0hPT1sKXt1PSEwO2JyZWFrfX11fHxhLnB1c2gobCl9fXJldHVybiB0aGlzLnNwYXduKGEsITApLmZpbHRlcihuKX0sImRhZ0V4dHJlbWl0eUltcGwiKX0sImRlZmluZURhZ0V4dHJlbWl0eSIpLHAwZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihyKXtmb3IodmFyIG49dGhpcyxpPVtdLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIHM9blthXTtpZihzLmlzTm9kZSgpKWZvcih2YXIgbD1zLmNvbm5lY3RlZEVkZ2VzKCksdT0wO3U8bC5sZW5ndGg7dSsrKXt2YXIgaD1sW3VdLGY9aC5zb3VyY2UoKSxkPWgudGFyZ2V0KCk7ZS5vdXRnb2luZyYmZj09PXM/KGkucHVzaChoKSxpLnB1c2goZCkpOmUuaW5jb21pbmcmJmQ9PT1zJiYoaS5wdXNoKGgpLGkucHVzaChmKSl9fXJldHVybiB0aGlzLnNwYXduKGksITApLmZpbHRlcihyKX19LCJkZWZpbmVEYWdPbmVIb3AiKSxtMGU9byhmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24ocil7Zm9yKHZhciBuPXRoaXMsaT1bXSxhPXt9Ozspe3ZhciBzPWUub3V0Z29pbmc/bi5vdXRnb2VycygpOm4uaW5jb21lcnMoKTtpZihzLmxlbmd0aD09PTApYnJlYWs7Zm9yKHZhciBsPSExLHU9MDt1PHMubGVuZ3RoO3UrKyl7dmFyIGg9c1t1XSxmPWguaWQoKTthW2ZdfHwoYVtmXT0hMCxpLnB1c2goaCksbD0hMCl9aWYoIWwpYnJlYWs7bj1zfXJldHVybiB0aGlzLnNwYXduKGksITApLmZpbHRlcihyKX19LCJkZWZpbmVEYWdBbGxIb3BzIik7JGEuY2xlYXJUcmF2ZXJzYWxDYWNoZT1mdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8dGhpcy5sZW5ndGg7dCsrKXRoaXNbdF0uX3ByaXZhdGUudHJhdmVyc2FsQ2FjaGU9bnVsbH07cnIoJGEse3Jvb3RzOmQwZSh7bm9JbmNvbWluZ0VkZ2VzOiEwfSksbGVhdmVzOmQwZSh7bm9PdXRnb2luZ0VkZ2VzOiEwfSksb3V0Z29lcnM6dGwocDBlKHtvdXRnb2luZzohMH0pLCJvdXRnb2VycyIpLHN1Y2Nlc3NvcnM6bTBlKHtvdXRnb2luZzohMH0pLGluY29tZXJzOnRsKHAwZSh7aW5jb21pbmc6ITB9KSwiaW5jb21lcnMiKSxwcmVkZWNlc3NvcnM6bTBlKHtpbmNvbWluZzohMH0pfSk7cnIoJGEse25laWdoYm9yaG9vZDp0bChmdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj10aGlzLm5vZGVzKCksbj0wO248ci5sZW5ndGg7bisrKWZvcih2YXIgaT1yW25dLGE9aS5jb25uZWN0ZWRFZGdlcygpLHM9MDtzPGEubGVuZ3RoO3MrKyl7dmFyIGw9YVtzXSx1PWwuc291cmNlKCksaD1sLnRhcmdldCgpLGY9aT09PXU/aDp1O2YubGVuZ3RoPjAmJmUucHVzaChmWzBdKSxlLnB1c2gobFswXSl9cmV0dXJuIHRoaXMuc3Bhd24oZSwhMCkuZmlsdGVyKHQpfSwibmVpZ2hib3Job29kIiksY2xvc2VkTmVpZ2hib3Job29kOm8oZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubmVpZ2hib3Job29kKCkuYWRkKHRoaXMpLmZpbHRlcihlKX0sImNsb3NlZE5laWdoYm9yaG9vZCIpLG9wZW5OZWlnaGJvcmhvb2Q6byhmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5uZWlnaGJvcmhvb2QoZSl9LCJvcGVuTmVpZ2hib3Job29kIil9KTskYS5uZWlnaGJvdXJob29kPSRhLm5laWdoYm9yaG9vZDskYS5jbG9zZWROZWlnaGJvdXJob29kPSRhLmNsb3NlZE5laWdoYm9yaG9vZDskYS5vcGVuTmVpZ2hib3VyaG9vZD0kYS5vcGVuTmVpZ2hib3Job29kO3JyKCRhLHtzb3VyY2U6dGwobyhmdW5jdGlvbihlKXt2YXIgcj10aGlzWzBdLG47cmV0dXJuIHImJihuPXIuX3ByaXZhdGUuc291cmNlfHxyLmN5KCkuY29sbGVjdGlvbigpKSxuJiZlP24uZmlsdGVyKGUpOm59LCJzb3VyY2VJbXBsIiksInNvdXJjZSIpLHRhcmdldDp0bChvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXNbMF0sbjtyZXR1cm4gciYmKG49ci5fcHJpdmF0ZS50YXJnZXR8fHIuY3koKS5jb2xsZWN0aW9uKCkpLG4mJmU/bi5maWx0ZXIoZSk6bn0sInRhcmdldEltcGwiKSwidGFyZ2V0Iiksc291cmNlczpnMGUoe2F0dHI6InNvdXJjZSJ9KSx0YXJnZXRzOmcwZSh7YXR0cjoidGFyZ2V0In0pfSk7byhnMGUsImRlZmluZVNvdXJjZUZ1bmN0aW9uIik7cnIoJGEse2VkZ2VzV2l0aDp0bCh5MGUoKSwiZWRnZXNXaXRoIiksZWRnZXNUbzp0bCh5MGUoe3RoaXNJc1NyYzohMH0pLCJlZGdlc1RvIil9KTtvKHkwZSwiZGVmaW5lRWRnZXNXaXRoRnVuY3Rpb24iKTtycigkYSx7Y29ubmVjdGVkRWRnZXM6dGwoZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9dGhpcyxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl07aWYoaS5pc05vZGUoKSlmb3IodmFyIGE9aS5fcHJpdmF0ZS5lZGdlcyxzPTA7czxhLmxlbmd0aDtzKyspe3ZhciBsPWFbc107ZS5wdXNoKGwpfX1yZXR1cm4gdGhpcy5zcGF3bihlLCEwKS5maWx0ZXIodCl9LCJjb25uZWN0ZWRFZGdlcyIpLGNvbm5lY3RlZE5vZGVzOnRsKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxyPXRoaXMsbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dO2kuaXNFZGdlKCkmJihlLnB1c2goaS5zb3VyY2UoKVswXSksZS5wdXNoKGkudGFyZ2V0KClbMF0pKX1yZXR1cm4gdGhpcy5zcGF3bihlLCEwKS5maWx0ZXIodCl9LCJjb25uZWN0ZWROb2RlcyIpLHBhcmFsbGVsRWRnZXM6dGwodjBlKCksInBhcmFsbGVsRWRnZXMiKSxjb2RpcmVjdGVkRWRnZXM6dGwodjBlKHtjb2RpcmVjdGVkOiEwfSksImNvZGlyZWN0ZWRFZGdlcyIpfSk7byh2MGUsImRlZmluZVBhcmFsbGVsRWRnZXNGdW5jdGlvbiIpO3JyKCRhLHtjb21wb25lbnRzOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcyxuPXIuY3koKSxpPW4uY29sbGVjdGlvbigpLGE9ZT09bnVsbD9yLm5vZGVzKCk6ZS5ub2RlcygpLHM9W107ZSE9bnVsbCYmYS5lbXB0eSgpJiYoYT1lLnNvdXJjZXMoKSk7dmFyIGw9byhmdW5jdGlvbihmLGQpe2kubWVyZ2UoZiksYS51bm1lcmdlKGYpLGQubWVyZ2UoZil9LCJ2aXNpdEluQ29tcG9uZW50Iik7aWYoYS5lbXB0eSgpKXJldHVybiByLnNwYXduKCk7dmFyIHU9byhmdW5jdGlvbigpe3ZhciBmPW4uY29sbGVjdGlvbigpO3MucHVzaChmKTt2YXIgZD1hWzBdO2woZCxmKSxyLmJmcyh7ZGlyZWN0ZWQ6ITEscm9vdHM6ZCx2aXNpdDpvKGZ1bmN0aW9uKG0pe3JldHVybiBsKG0sZil9LCJ2aXNpdCIpfSksZi5mb3JFYWNoKGZ1bmN0aW9uKHApe3AuY29ubmVjdGVkRWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKG0pe3IuaGFzKG0pJiZmLmhhcyhtLnNvdXJjZSgpKSYmZi5oYXMobS50YXJnZXQoKSkmJmYubWVyZ2UobSl9KX0pfSwiX2xvb3AiKTtkbyB1KCk7d2hpbGUoYS5sZW5ndGg+MCk7cmV0dXJuIHN9LCJjb21wb25lbnRzIiksY29tcG9uZW50Om8oZnVuY3Rpb24oKXt2YXIgZT10aGlzWzBdO3JldHVybiBlLmN5KCkubXV0YWJsZUVsZW1lbnRzKCkuY29tcG9uZW50cyhlKVswXX0sImNvbXBvbmVudCIpfSk7JGEuY29tcG9uZW50c09mPSRhLmNvbXBvbmVudHM7a2E9byhmdW5jdGlvbihlLHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTohMSxpPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTohMTtpZihlPT09dm9pZCAwKXthaSgiQSBjb2xsZWN0aW9uIG11c3QgaGF2ZSBhIHJlZmVyZW5jZSB0byB0aGUgY29yZSIpO3JldHVybn12YXIgYT1uZXcgWGMscz0hMTtpZighcilyPVtdO2Vsc2UgaWYoci5sZW5ndGg+MCYmVXIoclswXSkmJiF0NChyWzBdKSl7cz0hMDtmb3IodmFyIGw9W10sdT1uZXcgSjEsaD0wLGY9ci5sZW5ndGg7aDxmO2grKyl7dmFyIGQ9cltoXTtkLmRhdGE9PW51bGwmJihkLmRhdGE9e30pO3ZhciBwPWQuZGF0YTtpZihwLmlkPT1udWxsKXAuaWQ9Zm1lKCk7ZWxzZSBpZihlLmhhc0VsZW1lbnRXaXRoSWQocC5pZCl8fHUuaGFzKHAuaWQpKWNvbnRpbnVlO3ZhciBtPW5ldyBOUyhlLGQsITEpO2wucHVzaChtKSx1LmFkZChwLmlkKX1yPWx9dGhpcy5sZW5ndGg9MDtmb3IodmFyIGc9MCx5PXIubGVuZ3RoO2c8eTtnKyspe3ZhciB2PXJbZ11bMF07aWYodiE9bnVsbCl7dmFyIHg9di5fcHJpdmF0ZS5kYXRhLmlkOyghbnx8IWEuaGFzKHgpKSYmKG4mJmEuc2V0KHgse2luZGV4OnRoaXMubGVuZ3RoLGVsZTp2fSksdGhpc1t0aGlzLmxlbmd0aF09dix0aGlzLmxlbmd0aCsrKX19dGhpcy5fcHJpdmF0ZT17ZWxlczp0aGlzLGN5OmUsZ2V0IG1hcCgpe3JldHVybiB0aGlzLmxhenlNYXA9PW51bGwmJnRoaXMucmVidWlsZE1hcCgpLHRoaXMubGF6eU1hcH0sc2V0IG1hcChiKXt0aGlzLmxhenlNYXA9Yn0scmVidWlsZE1hcDpvKGZ1bmN0aW9uKCl7Zm9yKHZhciB3PXRoaXMubGF6eU1hcD1uZXcgWGMsQz10aGlzLmVsZXMsVD0wO1Q8Qy5sZW5ndGg7VCsrKXt2YXIgRT1DW1RdO3cuc2V0KEUuaWQoKSx7aW5kZXg6VCxlbGU6RX0pfX0sInJlYnVpbGRNYXAiKX0sbiYmKHRoaXMuX3ByaXZhdGUubWFwPWEpLHMmJiFpJiZ0aGlzLnJlc3RvcmUoKX0sIkNvbGxlY3Rpb24iKSxNbj1OUy5wcm90b3R5cGU9a2EucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoQXJyYXkucHJvdG90eXBlKTtNbi5pbnN0YW5jZVN0cmluZz1mdW5jdGlvbigpe3JldHVybiJjb2xsZWN0aW9uIn07TW4uc3Bhd249ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IGthKHRoaXMuY3koKSx0LGUpfTtNbi5zcGF3blNlbGY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zcGF3bih0aGlzKX07TW4uY3k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5jeX07TW4ucmVuZGVyZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5jeS5yZW5kZXJlcigpfTtNbi5lbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbMF19O01uLmNvbGxlY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm4gUTBlKHRoaXMpP3RoaXM6bmV3IGthKHRoaXMuX3ByaXZhdGUuY3ksW3RoaXNdKX07TW4udW5pcXVlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBrYSh0aGlzLl9wcml2YXRlLmN5LHRoaXMsITApfTtNbi5oYXNFbGVtZW50V2l0aElkPWZ1bmN0aW9uKHQpe3JldHVybiB0PSIiK3QsdGhpcy5fcHJpdmF0ZS5tYXAuaGFzKHQpfTtNbi5nZXRFbGVtZW50QnlJZD1mdW5jdGlvbih0KXt0PSIiK3Q7dmFyIGU9dGhpcy5fcHJpdmF0ZS5jeSxyPXRoaXMuX3ByaXZhdGUubWFwLmdldCh0KTtyZXR1cm4gcj9yLmVsZTpuZXcga2EoZSl9O01uLiRpZD1Nbi5nZXRFbGVtZW50QnlJZDtNbi5wb29sSW5kZXg9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wcml2YXRlLmN5LGU9dC5fcHJpdmF0ZS5lbGVtZW50cyxyPXRoaXNbMF0uX3ByaXZhdGUuZGF0YS5pZDtyZXR1cm4gZS5fcHJpdmF0ZS5tYXAuZ2V0KHIpLmluZGV4fTtNbi5pbmRleE9mPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0uX3ByaXZhdGUuZGF0YS5pZDtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5tYXAuZ2V0KGUpLmluZGV4fTtNbi5pbmRleE9mSWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9IiIrdCx0aGlzLl9wcml2YXRlLm1hcC5nZXQodCkuaW5kZXh9O01uLmpzb249ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5lbGVtZW50KCkscj10aGlzLmN5KCk7aWYoZT09bnVsbCYmdClyZXR1cm4gdGhpcztpZihlIT1udWxsKXt2YXIgbj1lLl9wcml2YXRlO2lmKFVyKHQpKXtpZihyLnN0YXJ0QmF0Y2goKSx0LmRhdGEpe2UuZGF0YSh0LmRhdGEpO3ZhciBpPW4uZGF0YTtpZihlLmlzRWRnZSgpKXt2YXIgYT0hMSxzPXt9LGw9dC5kYXRhLnNvdXJjZSx1PXQuZGF0YS50YXJnZXQ7bCE9bnVsbCYmbCE9aS5zb3VyY2UmJihzLnNvdXJjZT0iIitsLGE9ITApLHUhPW51bGwmJnUhPWkudGFyZ2V0JiYocy50YXJnZXQ9IiIrdSxhPSEwKSxhJiYoZT1lLm1vdmUocykpfWVsc2V7dmFyIGg9InBhcmVudCJpbiB0LmRhdGEsZj10LmRhdGEucGFyZW50O2gmJihmIT1udWxsfHxpLnBhcmVudCE9bnVsbCkmJmYhPWkucGFyZW50JiYoZj09PXZvaWQgMCYmKGY9bnVsbCksZiE9bnVsbCYmKGY9IiIrZiksZT1lLm1vdmUoe3BhcmVudDpmfSkpfX10LnBvc2l0aW9uJiZlLnBvc2l0aW9uKHQucG9zaXRpb24pO3ZhciBkPW8oZnVuY3Rpb24oeSx2LHgpe3ZhciBiPXRbeV07YiE9bnVsbCYmYiE9PW5beV0mJihiP2Vbdl0oKTplW3hdKCkpfSwiY2hlY2tTd2l0Y2giKTtyZXR1cm4gZCgicmVtb3ZlZCIsInJlbW92ZSIsInJlc3RvcmUiKSxkKCJzZWxlY3RlZCIsInNlbGVjdCIsInVuc2VsZWN0IiksZCgic2VsZWN0YWJsZSIsInNlbGVjdGlmeSIsInVuc2VsZWN0aWZ5IiksZCgibG9ja2VkIiwibG9jayIsInVubG9jayIpLGQoImdyYWJiYWJsZSIsImdyYWJpZnkiLCJ1bmdyYWJpZnkiKSxkKCJwYW5uYWJsZSIsInBhbmlmeSIsInVucGFuaWZ5IiksdC5jbGFzc2VzIT1udWxsJiZlLmNsYXNzZXModC5jbGFzc2VzKSxyLmVuZEJhdGNoKCksdGhpc31lbHNlIGlmKHQ9PT12b2lkIDApe3ZhciBwPXtkYXRhOlljKG4uZGF0YSkscG9zaXRpb246WWMobi5wb3NpdGlvbiksZ3JvdXA6bi5ncm91cCxyZW1vdmVkOm4ucmVtb3ZlZCxzZWxlY3RlZDpuLnNlbGVjdGVkLHNlbGVjdGFibGU6bi5zZWxlY3RhYmxlLGxvY2tlZDpuLmxvY2tlZCxncmFiYmFibGU6bi5ncmFiYmFibGUscGFubmFibGU6bi5wYW5uYWJsZSxjbGFzc2VzOm51bGx9O3AuY2xhc3Nlcz0iIjt2YXIgbT0wO3JldHVybiBuLmNsYXNzZXMuZm9yRWFjaChmdW5jdGlvbihnKXtyZXR1cm4gcC5jbGFzc2VzKz1tKys9PT0wP2c6IiAiK2d9KSxwfX19O01uLmpzb25zPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9MDtlPHRoaXMubGVuZ3RoO2UrKyl7dmFyIHI9dGhpc1tlXSxuPXIuanNvbigpO3QucHVzaChuKX1yZXR1cm4gdH07TW4uY2xvbmU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5jeSgpLGU9W10scj0wO3I8dGhpcy5sZW5ndGg7cisrKXt2YXIgbj10aGlzW3JdLGk9bi5qc29uKCksYT1uZXcgTlModCxpLCExKTtlLnB1c2goYSl9cmV0dXJuIG5ldyBrYSh0LGUpfTtNbi5jb3B5PU1uLmNsb25lO01uLnJlc3RvcmU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOiEwLGU9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiEwLHI9dGhpcyxuPXIuY3koKSxpPW4uX3ByaXZhdGUsYT1bXSxzPVtdLGwsdT0wLGg9ci5sZW5ndGg7dTxoO3UrKyl7dmFyIGY9clt1XTtlJiYhZi5yZW1vdmVkKCl8fChmLmlzTm9kZSgpP2EucHVzaChmKTpzLnB1c2goZikpfWw9YS5jb25jYXQocyk7dmFyIGQscD1vKGZ1bmN0aW9uKCl7bC5zcGxpY2UoZCwxKSxkLS19LCJyZW1vdmVGcm9tRWxlbWVudHMiKTtmb3IoZD0wO2Q8bC5sZW5ndGg7ZCsrKXt2YXIgbT1sW2RdLGc9bS5fcHJpdmF0ZSx5PWcuZGF0YTtpZihtLmNsZWFyVHJhdmVyc2FsQ2FjaGUoKSwhKCFlJiYhZy5yZW1vdmVkKSl7aWYoeS5pZD09PXZvaWQgMCl5LmlkPWZtZSgpO2Vsc2UgaWYoQ3QoeS5pZCkpeS5pZD0iIit5LmlkO2Vsc2UgaWYoQWYoeS5pZCl8fCFadCh5LmlkKSl7YWkoIkNhbiBub3QgY3JlYXRlIGVsZW1lbnQgd2l0aCBpbnZhbGlkIHN0cmluZyBJRCBgIit5LmlkKyJgIikscCgpO2NvbnRpbnVlfWVsc2UgaWYobi5oYXNFbGVtZW50V2l0aElkKHkuaWQpKXthaSgiQ2FuIG5vdCBjcmVhdGUgc2Vjb25kIGVsZW1lbnQgd2l0aCBJRCBgIit5LmlkKyJgIikscCgpO2NvbnRpbnVlfX12YXIgdj15LmlkO2lmKG0uaXNOb2RlKCkpe3ZhciB4PWcucG9zaXRpb247eC54PT1udWxsJiYoeC54PTApLHgueT09bnVsbCYmKHgueT0wKX1pZihtLmlzRWRnZSgpKXtmb3IodmFyIGI9bSx3PVsic291cmNlIiwidGFyZ2V0Il0sQz13Lmxlbmd0aCxUPSExLEU9MDtFPEM7RSsrKXt2YXIgQT13W0VdLFM9eVtBXTtDdChTKSYmKFM9eVtBXT0iIit5W0FdKSxTPT1udWxsfHxTPT09IiI/KGFpKCJDYW4gbm90IGNyZWF0ZSBlZGdlIGAiK3YrImAgd2l0aCB1bnNwZWNpZmllZCAiK0EpLFQ9ITApOm4uaGFzRWxlbWVudFdpdGhJZChTKXx8KGFpKCJDYW4gbm90IGNyZWF0ZSBlZGdlIGAiK3YrImAgd2l0aCBub25leGlzdGFudCAiK0ErIiBgIitTKyJgIiksVD0hMCl9aWYoVCl7cCgpO2NvbnRpbnVlfXZhciBfPW4uZ2V0RWxlbWVudEJ5SWQoeS5zb3VyY2UpLEk9bi5nZXRFbGVtZW50QnlJZCh5LnRhcmdldCk7Xy5zYW1lKEkpP18uX3ByaXZhdGUuZWRnZXMucHVzaChiKTooXy5fcHJpdmF0ZS5lZGdlcy5wdXNoKGIpLEkuX3ByaXZhdGUuZWRnZXMucHVzaChiKSksYi5fcHJpdmF0ZS5zb3VyY2U9XyxiLl9wcml2YXRlLnRhcmdldD1JfWcubWFwPW5ldyBYYyxnLm1hcC5zZXQodix7ZWxlOm0saW5kZXg6MH0pLGcucmVtb3ZlZD0hMSxlJiZuLmFkZFRvUG9vbChtKX1mb3IodmFyIEQ9MDtEPGEubGVuZ3RoO0QrKyl7dmFyIGs9YVtEXSxMPWsuX3ByaXZhdGUuZGF0YTtDdChMLnBhcmVudCkmJihMLnBhcmVudD0iIitMLnBhcmVudCk7dmFyIFI9TC5wYXJlbnQsTz1SIT1udWxsO2lmKE98fGsuX3ByaXZhdGUucGFyZW50KXt2YXIgTT1rLl9wcml2YXRlLnBhcmVudD9uLmNvbGxlY3Rpb24oKS5tZXJnZShrLl9wcml2YXRlLnBhcmVudCk6bi5nZXRFbGVtZW50QnlJZChSKTtpZihNLmVtcHR5KCkpTC5wYXJlbnQ9dm9pZCAwO2Vsc2UgaWYoTVswXS5yZW1vdmVkKCkpdW4oIk5vZGUgYWRkZWQgd2l0aCBtaXNzaW5nIHBhcmVudCwgcmVmZXJlbmNlIHRvIHBhcmVudCByZW1vdmVkIiksTC5wYXJlbnQ9dm9pZCAwLGsuX3ByaXZhdGUucGFyZW50PW51bGw7ZWxzZXtmb3IodmFyIEI9ITEsRj1NOyFGLmVtcHR5KCk7KXtpZihrLnNhbWUoRikpe0I9ITAsTC5wYXJlbnQ9dm9pZCAwO2JyZWFrfUY9Ri5wYXJlbnQoKX1CfHwoTVswXS5fcHJpdmF0ZS5jaGlsZHJlbi5wdXNoKGspLGsuX3ByaXZhdGUucGFyZW50PU1bMF0saS5oYXNDb21wb3VuZE5vZGVzPSEwKX19fWlmKGwubGVuZ3RoPjApe2Zvcih2YXIgUD1sLmxlbmd0aD09PXIubGVuZ3RoP3I6bmV3IGthKG4sbCksej0wO3o8UC5sZW5ndGg7eisrKXt2YXIgJD1QW3pdOyQuaXNOb2RlKCl8fCgkLnBhcmFsbGVsRWRnZXMoKS5jbGVhclRyYXZlcnNhbENhY2hlKCksJC5zb3VyY2UoKS5jbGVhclRyYXZlcnNhbENhY2hlKCksJC50YXJnZXQoKS5jbGVhclRyYXZlcnNhbENhY2hlKCkpfXZhciBIO2kuaGFzQ29tcG91bmROb2Rlcz9IPW4uY29sbGVjdGlvbigpLm1lcmdlKFApLm1lcmdlKFAuY29ubmVjdGVkTm9kZXMoKSkubWVyZ2UoUC5wYXJlbnQoKSk6SD1QLEguZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlKCkuZGlydHlCb3VuZGluZ0JveENhY2hlKCkudXBkYXRlU3R5bGUodCksdD9QLmVtaXRBbmROb3RpZnkoImFkZCIpOmUmJlAuZW1pdCgiYWRkIil9cmV0dXJuIHJ9O01uLnJlbW92ZWQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzWzBdO3JldHVybiB0JiZ0Ll9wcml2YXRlLnJlbW92ZWR9O01uLmluc2lkZT1mdW5jdGlvbigpe3ZhciB0PXRoaXNbMF07cmV0dXJuIHQmJiF0Ll9wcml2YXRlLnJlbW92ZWR9O01uLnJlbW92ZT1mdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMCxlPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMCxyPXRoaXMsbj1bXSxpPXt9LGE9ci5fcHJpdmF0ZS5jeTtmdW5jdGlvbiBzKFIpe2Zvcih2YXIgTz1SLl9wcml2YXRlLmVkZ2VzLE09MDtNPE8ubGVuZ3RoO00rKyl1KE9bTV0pfW8ocywiYWRkQ29ubmVjdGVkRWRnZXMiKTtmdW5jdGlvbiBsKFIpe2Zvcih2YXIgTz1SLl9wcml2YXRlLmNoaWxkcmVuLE09MDtNPE8ubGVuZ3RoO00rKyl1KE9bTV0pfW8obCwiYWRkQ2hpbGRyZW4iKTtmdW5jdGlvbiB1KFIpe3ZhciBPPWlbUi5pZCgpXTtlJiZSLnJlbW92ZWQoKXx8T3x8KGlbUi5pZCgpXT0hMCxSLmlzTm9kZSgpPyhuLnB1c2goUikscyhSKSxsKFIpKTpuLnVuc2hpZnQoUikpfW8odSwiYWRkIik7Zm9yKHZhciBoPTAsZj1yLmxlbmd0aDtoPGY7aCsrKXt2YXIgZD1yW2hdO3UoZCl9ZnVuY3Rpb24gcChSLE8pe3ZhciBNPVIuX3ByaXZhdGUuZWRnZXM7RGYoTSxPKSxSLmNsZWFyVHJhdmVyc2FsQ2FjaGUoKX1vKHAsInJlbW92ZUVkZ2VSZWYiKTtmdW5jdGlvbiBtKFIpe1IuY2xlYXJUcmF2ZXJzYWxDYWNoZSgpfW8obSwicmVtb3ZlUGFyYWxsZWxSZWYiKTt2YXIgZz1bXTtnLmlkcz17fTtmdW5jdGlvbiB5KFIsTyl7Tz1PWzBdLFI9UlswXTt2YXIgTT1SLl9wcml2YXRlLmNoaWxkcmVuLEI9Ui5pZCgpO0RmKE0sTyksTy5fcHJpdmF0ZS5wYXJlbnQ9bnVsbCxnLmlkc1tCXXx8KGcuaWRzW0JdPSEwLGcucHVzaChSKSl9byh5LCJyZW1vdmVDaGlsZFJlZiIpLHIuZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlKCksZSYmYS5yZW1vdmVGcm9tUG9vbChuKTtmb3IodmFyIHY9MDt2PG4ubGVuZ3RoO3YrKyl7dmFyIHg9blt2XTtpZih4LmlzRWRnZSgpKXt2YXIgYj14LnNvdXJjZSgpWzBdLHc9eC50YXJnZXQoKVswXTtwKGIseCkscCh3LHgpO2Zvcih2YXIgQz14LnBhcmFsbGVsRWRnZXMoKSxUPTA7VDxDLmxlbmd0aDtUKyspe3ZhciBFPUNbVF07bShFKSxFLmlzQnVuZGxlZEJlemllcigpJiZFLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpfX1lbHNle3ZhciBBPXgucGFyZW50KCk7QS5sZW5ndGghPT0wJiZ5KEEseCl9ZSYmKHguX3ByaXZhdGUucmVtb3ZlZD0hMCl9dmFyIFM9YS5fcHJpdmF0ZS5lbGVtZW50czthLl9wcml2YXRlLmhhc0NvbXBvdW5kTm9kZXM9ITE7Zm9yKHZhciBfPTA7XzxTLmxlbmd0aDtfKyspe3ZhciBJPVNbX107aWYoSS5pc1BhcmVudCgpKXthLl9wcml2YXRlLmhhc0NvbXBvdW5kTm9kZXM9ITA7YnJlYWt9fXZhciBEPW5ldyBrYSh0aGlzLmN5KCksbik7RC5zaXplKCk+MCYmKHQ/RC5lbWl0QW5kTm90aWZ5KCJyZW1vdmUiKTplJiZELmVtaXQoInJlbW92ZSIpKTtmb3IodmFyIGs9MDtrPGcubGVuZ3RoO2srKyl7dmFyIEw9Z1trXTsoIWV8fCFMLnJlbW92ZWQoKSkmJkwudXBkYXRlU3R5bGUoKX1yZXR1cm4gRH07TW4ubW92ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9wcml2YXRlLmN5LHI9dGhpcyxuPSExLGk9ITEsYT1vKGZ1bmN0aW9uKGcpe3JldHVybiBnPT1udWxsP2c6IiIrZ30sInRvU3RyaW5nIik7aWYodC5zb3VyY2UhPT12b2lkIDB8fHQudGFyZ2V0IT09dm9pZCAwKXt2YXIgcz1hKHQuc291cmNlKSxsPWEodC50YXJnZXQpLHU9cyE9bnVsbCYmZS5oYXNFbGVtZW50V2l0aElkKHMpLGg9bCE9bnVsbCYmZS5oYXNFbGVtZW50V2l0aElkKGwpOyh1fHxoKSYmKGUuYmF0Y2goZnVuY3Rpb24oKXtyLnJlbW92ZShuLGkpLHIuZW1pdEFuZE5vdGlmeSgibW92ZW91dCIpO2Zvcih2YXIgbT0wO208ci5sZW5ndGg7bSsrKXt2YXIgZz1yW21dLHk9Zy5fcHJpdmF0ZS5kYXRhO2cuaXNFZGdlKCkmJih1JiYoeS5zb3VyY2U9cyksaCYmKHkudGFyZ2V0PWwpKX1yLnJlc3RvcmUobixpKX0pLHIuZW1pdEFuZE5vdGlmeSgibW92ZSIpKX1lbHNlIGlmKHQucGFyZW50IT09dm9pZCAwKXt2YXIgZj1hKHQucGFyZW50KSxkPWY9PT1udWxsfHxlLmhhc0VsZW1lbnRXaXRoSWQoZik7aWYoZCl7dmFyIHA9Zj09PW51bGw/dm9pZCAwOmY7ZS5iYXRjaChmdW5jdGlvbigpe3ZhciBtPXIucmVtb3ZlKG4saSk7bS5lbWl0QW5kTm90aWZ5KCJtb3Zlb3V0Iik7Zm9yKHZhciBnPTA7ZzxyLmxlbmd0aDtnKyspe3ZhciB5PXJbZ10sdj15Ll9wcml2YXRlLmRhdGE7eS5pc05vZGUoKSYmKHYucGFyZW50PXApfW0ucmVzdG9yZShuLGkpfSksci5lbWl0QW5kTm90aWZ5KCJtb3ZlIil9fXJldHVybiB0aGlzfTtbU21lLFpqZSxoUyxTZixaMSxwS2UsRlMsTEtlLEttZSxRbWUsT0tlLEVTLGZTLFRhLENmLCRhXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JyKE1uLHQpfSk7VktlPXthZGQ6byhmdW5jdGlvbihlKXt2YXIgcixuPXRoaXM7aWYoZ28oZSkpe3ZhciBpPWU7aWYoaS5fcHJpdmF0ZS5jeT09PW4pcj1pLnJlc3RvcmUoKTtlbHNle2Zvcih2YXIgYT1bXSxzPTA7czxpLmxlbmd0aDtzKyspe3ZhciBsPWlbc107YS5wdXNoKGwuanNvbigpKX1yPW5ldyBrYShuLGEpfX1lbHNlIGlmKEVuKGUpKXt2YXIgdT1lO3I9bmV3IGthKG4sdSl9ZWxzZSBpZihVcihlKSYmKEVuKGUubm9kZXMpfHxFbihlLmVkZ2VzKSkpe2Zvcih2YXIgaD1lLGY9W10sZD1bIm5vZGVzIiwiZWRnZXMiXSxwPTAsbT1kLmxlbmd0aDtwPG07cCsrKXt2YXIgZz1kW3BdLHk9aFtnXTtpZihFbih5KSlmb3IodmFyIHY9MCx4PXkubGVuZ3RoO3Y8eDt2Kyspe3ZhciBiPXJyKHtncm91cDpnfSx5W3ZdKTtmLnB1c2goYil9fXI9bmV3IGthKG4sZil9ZWxzZXt2YXIgdz1lO3I9bmV3IE5TKG4sdykuY29sbGVjdGlvbigpfXJldHVybiByfSwiYWRkIikscmVtb3ZlOm8oZnVuY3Rpb24oZSl7aWYoIWdvKGUpKXtpZihadChlKSl7dmFyIHI9ZTtlPXRoaXMuJChyKX19cmV0dXJuIGUucmVtb3ZlKCl9LCJyZW1vdmUiKX07byhVS2UsImdlbmVyYXRlQ3ViaWNCZXppZXIiKTtIS2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KG4pe3JldHVybi1uLnRlbnNpb24qbi54LW4uZnJpY3Rpb24qbi52fW8odCwic3ByaW5nQWNjZWxlcmF0aW9uRm9yU3RhdGUiKTtmdW5jdGlvbiBlKG4saSxhKXt2YXIgcz17eDpuLngrYS5keCppLHY6bi52K2EuZHYqaSx0ZW5zaW9uOm4udGVuc2lvbixmcmljdGlvbjpuLmZyaWN0aW9ufTtyZXR1cm57ZHg6cy52LGR2OnQocyl9fW8oZSwic3ByaW5nRXZhbHVhdGVTdGF0ZVdpdGhEZXJpdmF0aXZlIik7ZnVuY3Rpb24gcihuLGkpe3ZhciBhPXtkeDpuLnYsZHY6dChuKX0scz1lKG4saSouNSxhKSxsPWUobixpKi41LHMpLHU9ZShuLGksbCksaD0xLzYqKGEuZHgrMioocy5keCtsLmR4KSt1LmR4KSxmPTEvNiooYS5kdisyKihzLmR2K2wuZHYpK3UuZHYpO3JldHVybiBuLng9bi54K2gqaSxuLnY9bi52K2YqaSxufXJldHVybiBvKHIsInNwcmluZ0ludGVncmF0ZVN0YXRlIiksbyhmdW5jdGlvbiBuKGksYSxzKXt2YXIgbD17eDotMSx2OjAsdGVuc2lvbjpudWxsLGZyaWN0aW9uOm51bGx9LHU9WzBdLGg9MCxmPTEvMWU0LGQ9MTYvMWUzLHAsbSxnO2ZvcihpPXBhcnNlRmxvYXQoaSl8fDUwMCxhPXBhcnNlRmxvYXQoYSl8fDIwLHM9c3x8bnVsbCxsLnRlbnNpb249aSxsLmZyaWN0aW9uPWEscD1zIT09bnVsbCxwPyhoPW4oaSxhKSxtPWgvcypkKTptPWQ7Zz1yKGd8fGwsbSksdS5wdXNoKDErZy54KSxoKz0xNixNYXRoLmFicyhnLngpPmYmJk1hdGguYWJzKGcudik+ZjspO3JldHVybiBwP2Z1bmN0aW9uKHkpe3JldHVybiB1W3kqKHUubGVuZ3RoLTEpfDBdfTpofSwic3ByaW5nUks0RmFjdG9yeSIpfSgpLE5uPW8oZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9VUtlKGUscixuLGkpO3JldHVybiBmdW5jdGlvbihzLGwsdSl7cmV0dXJuIHMrKGwtcykqYSh1KX19LCJjdWJpY0JlemllciIpLGRTPXtsaW5lYXI6byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIGUrKHItZSkqbn0sImxpbmVhciIpLGVhc2U6Tm4oLjI1LC4xLC4yNSwxKSwiZWFzZS1pbiI6Tm4oLjQyLDAsMSwxKSwiZWFzZS1vdXQiOk5uKDAsMCwuNTgsMSksImVhc2UtaW4tb3V0IjpObiguNDIsMCwuNTgsMSksImVhc2UtaW4tc2luZSI6Tm4oLjQ3LDAsLjc0NSwuNzE1KSwiZWFzZS1vdXQtc2luZSI6Tm4oLjM5LC41NzUsLjU2NSwxKSwiZWFzZS1pbi1vdXQtc2luZSI6Tm4oLjQ0NSwuMDUsLjU1LC45NSksImVhc2UtaW4tcXVhZCI6Tm4oLjU1LC4wODUsLjY4LC41MyksImVhc2Utb3V0LXF1YWQiOk5uKC4yNSwuNDYsLjQ1LC45NCksImVhc2UtaW4tb3V0LXF1YWQiOk5uKC40NTUsLjAzLC41MTUsLjk1NSksImVhc2UtaW4tY3ViaWMiOk5uKC41NSwuMDU1LC42NzUsLjE5KSwiZWFzZS1vdXQtY3ViaWMiOk5uKC4yMTUsLjYxLC4zNTUsMSksImVhc2UtaW4tb3V0LWN1YmljIjpObiguNjQ1LC4wNDUsLjM1NSwxKSwiZWFzZS1pbi1xdWFydCI6Tm4oLjg5NSwuMDMsLjY4NSwuMjIpLCJlYXNlLW91dC1xdWFydCI6Tm4oLjE2NSwuODQsLjQ0LDEpLCJlYXNlLWluLW91dC1xdWFydCI6Tm4oLjc3LDAsLjE3NSwxKSwiZWFzZS1pbi1xdWludCI6Tm4oLjc1NSwuMDUsLjg1NSwuMDYpLCJlYXNlLW91dC1xdWludCI6Tm4oLjIzLDEsLjMyLDEpLCJlYXNlLWluLW91dC1xdWludCI6Tm4oLjg2LDAsLjA3LDEpLCJlYXNlLWluLWV4cG8iOk5uKC45NSwuMDUsLjc5NSwuMDM1KSwiZWFzZS1vdXQtZXhwbyI6Tm4oLjE5LDEsLjIyLDEpLCJlYXNlLWluLW91dC1leHBvIjpObigxLDAsMCwxKSwiZWFzZS1pbi1jaXJjIjpObiguNiwuMDQsLjk4LC4zMzUpLCJlYXNlLW91dC1jaXJjIjpObiguMDc1LC44MiwuMTY1LDEpLCJlYXNlLWluLW91dC1jaXJjIjpObiguNzg1LC4xMzUsLjE1LC44Niksc3ByaW5nOm8oZnVuY3Rpb24oZSxyLG4pe2lmKG49PT0wKXJldHVybiBkUy5saW5lYXI7dmFyIGk9SEtlKGUscixuKTtyZXR1cm4gZnVuY3Rpb24oYSxzLGwpe3JldHVybiBhKyhzLWEpKmkobCl9fSwic3ByaW5nIiksImN1YmljLWJlemllciI6Tm59O28oeDBlLCJnZXRFYXNlZFZhbHVlIik7byhiMGUsImdldFZhbHVlIik7bygkMSwiZWFzZSIpO28oV0tlLCJzdGVwJDEiKTtvKFJiLCJ2YWxpZCIpO28ocUtlLCJzdGFydEFuaW1hdGlvbiIpO28odzBlLCJzdGVwQWxsIik7WUtlPXthbmltYXRlOmNuLmFuaW1hdGUoKSxhbmltYXRpb246Y24uYW5pbWF0aW9uKCksYW5pbWF0ZWQ6Y24uYW5pbWF0ZWQoKSxjbGVhclF1ZXVlOmNuLmNsZWFyUXVldWUoKSxkZWxheTpjbi5kZWxheSgpLGRlbGF5QW5pbWF0aW9uOmNuLmRlbGF5QW5pbWF0aW9uKCksc3RvcDpjbi5zdG9wKCksYWRkVG9BbmltYXRpb25Qb29sOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcztyLnN0eWxlRW5hYmxlZCgpJiZyLl9wcml2YXRlLmFuaUVsZXMubWVyZ2UoZSl9LCJhZGRUb0FuaW1hdGlvblBvb2wiKSxzdG9wQW5pbWF0aW9uTG9vcDpvKGZ1bmN0aW9uKCl7dGhpcy5fcHJpdmF0ZS5hbmltYXRpb25zUnVubmluZz0hMX0sInN0b3BBbmltYXRpb25Mb29wIiksc3RhcnRBbmltYXRpb25Mb29wOm8oZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKGUuX3ByaXZhdGUuYW5pbWF0aW9uc1J1bm5pbmc9ITAsIWUuc3R5bGVFbmFibGVkKCkpcmV0dXJuO2Z1bmN0aW9uIHIoKXtlLl9wcml2YXRlLmFuaW1hdGlvbnNSdW5uaW5nJiZ4UyhvKGZ1bmN0aW9uKGEpe3cwZShhLGUpLHIoKX0sImFuaW1hdGlvblN0ZXAiKSl9byhyLCJoZWFkbGVzc1N0ZXAiKTt2YXIgbj1lLnJlbmRlcmVyKCk7biYmbi5iZWZvcmVSZW5kZXI/bi5iZWZvcmVSZW5kZXIobyhmdW5jdGlvbihhLHMpe3cwZShzLGUpfSwicmVuZGVyZXJBbmltYXRpb25TdGVwIiksbi5iZWZvcmVSZW5kZXJQcmlvcml0aWVzLmFuaW1hdGlvbnMpOnIoKX0sInN0YXJ0QW5pbWF0aW9uTG9vcCIpfSxYS2U9e3F1YWxpZmllckNvbXBhcmU6byhmdW5jdGlvbihlLHIpe3JldHVybiBlPT1udWxsfHxyPT1udWxsP2U9PW51bGwmJnI9PW51bGw6ZS5zYW1lVGV4dChyKX0sInF1YWxpZmllckNvbXBhcmUiKSxldmVudE1hdGNoZXM6byhmdW5jdGlvbihlLHIsbil7dmFyIGk9ci5xdWFsaWZpZXI7cmV0dXJuIGkhPW51bGw/ZSE9PW4udGFyZ2V0JiZ0NChuLnRhcmdldCkmJmkubWF0Y2hlcyhuLnRhcmdldCk6ITB9LCJldmVudE1hdGNoZXMiKSxhZGRFdmVudEZpZWxkczpvKGZ1bmN0aW9uKGUscil7ci5jeT1lLHIudGFyZ2V0PWV9LCJhZGRFdmVudEZpZWxkcyIpLGNhbGxiYWNrQ29udGV4dDpvKGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gci5xdWFsaWZpZXIhPW51bGw/bi50YXJnZXQ6ZX0sImNhbGxiYWNrQ29udGV4dCIpfSxpUz1vKGZ1bmN0aW9uKGUpe3JldHVybiBadChlKT9uZXcgTGYoZSk6ZX0sImFyZ1NlbGVjdG9yIiksZWdlPXtjcmVhdGVFbWl0dGVyOm8oZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9wcml2YXRlO3JldHVybiBlLmVtaXR0ZXJ8fChlLmVtaXR0ZXI9bmV3ICRTKFhLZSx0aGlzKSksdGhpc30sImNyZWF0ZUVtaXR0ZXIiKSxlbWl0dGVyOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbWl0dGVyfSwiZW1pdHRlciIpLG9uOm8oZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5vbihlLGlTKHIpLG4pLHRoaXN9LCJvbiIpLHJlbW92ZUxpc3RlbmVyOm8oZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5yZW1vdmVMaXN0ZW5lcihlLGlTKHIpLG4pLHRoaXN9LCJyZW1vdmVMaXN0ZW5lciIpLHJlbW92ZUFsbExpc3RlbmVyczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW1pdHRlcigpLnJlbW92ZUFsbExpc3RlbmVycygpLHRoaXN9LCJyZW1vdmVBbGxMaXN0ZW5lcnMiKSxvbmU6byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIHRoaXMuZW1pdHRlcigpLm9uZShlLGlTKHIpLG4pLHRoaXN9LCJvbmUiKSxvbmNlOm8oZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5vbmUoZSxpUyhyKSxuKSx0aGlzfSwib25jZSIpLGVtaXQ6byhmdW5jdGlvbihlLHIpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5lbWl0KGUsciksdGhpc30sImVtaXQiKSxlbWl0QW5kTm90aWZ5Om8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gdGhpcy5lbWl0KGUpLHRoaXMubm90aWZ5KGUsciksdGhpc30sImVtaXRBbmROb3RpZnkiKX07Y24uZXZlbnRBbGlhc2VzT24oZWdlKTtWUD17cG5nOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fcHJpdmF0ZS5yZW5kZXJlcjtyZXR1cm4gZT1lfHx7fSxyLnBuZyhlKX0sInBuZyIpLGpwZzpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuX3ByaXZhdGUucmVuZGVyZXI7cmV0dXJuIGU9ZXx8e30sZS5iZz1lLmJnfHwiI2ZmZiIsci5qcGcoZSl9LCJqcGciKX07VlAuanBlZz1WUC5qcGc7cFM9e2xheW91dDpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXM7aWYoZT09bnVsbCl7YWkoIkxheW91dCBvcHRpb25zIG11c3QgYmUgc3BlY2lmaWVkIHRvIG1ha2UgYSBsYXlvdXQiKTtyZXR1cm59aWYoZS5uYW1lPT1udWxsKXthaSgiQSBgbmFtZWAgbXVzdCBiZSBzcGVjaWZpZWQgdG8gbWFrZSBhIGxheW91dCIpO3JldHVybn12YXIgbj1lLm5hbWUsaT1yLmV4dGVuc2lvbigibGF5b3V0IixuKTtpZihpPT1udWxsKXthaSgiTm8gc3VjaCBsYXlvdXQgYCIrbisiYCBmb3VuZC4gIERpZCB5b3UgZm9yZ2V0IHRvIGltcG9ydCBpdCBhbmQgYGN5dG9zY2FwZS51c2UoKWAgaXQ/Iik7cmV0dXJufXZhciBhO1p0KGUuZWxlcyk/YT1yLiQoZS5lbGVzKTphPWUuZWxlcyE9bnVsbD9lLmVsZXM6ci4kKCk7dmFyIHM9bmV3IGkocnIoe30sZSx7Y3k6cixlbGVzOmF9KSk7cmV0dXJuIHN9LCJsYXlvdXQiKX07cFMuY3JlYXRlTGF5b3V0PXBTLm1ha2VMYXlvdXQ9cFMubGF5b3V0O2pLZT17bm90aWZ5Om8oZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLl9wcml2YXRlO2lmKHRoaXMuYmF0Y2hpbmcoKSl7bi5iYXRjaE5vdGlmaWNhdGlvbnM9bi5iYXRjaE5vdGlmaWNhdGlvbnN8fHt9O3ZhciBpPW4uYmF0Y2hOb3RpZmljYXRpb25zW2VdPW4uYmF0Y2hOb3RpZmljYXRpb25zW2VdfHx0aGlzLmNvbGxlY3Rpb24oKTtyIT1udWxsJiZpLm1lcmdlKHIpO3JldHVybn1pZihuLm5vdGlmaWNhdGlvbnNFbmFibGVkKXt2YXIgYT10aGlzLnJlbmRlcmVyKCk7dGhpcy5kZXN0cm95ZWQoKXx8IWF8fGEubm90aWZ5KGUscil9fSwibm90aWZ5Iiksbm90aWZpY2F0aW9uczpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuX3ByaXZhdGU7cmV0dXJuIGU9PT12b2lkIDA/ci5ub3RpZmljYXRpb25zRW5hYmxlZDooci5ub3RpZmljYXRpb25zRW5hYmxlZD0hIWUsdGhpcyl9LCJub3RpZmljYXRpb25zIiksbm9Ob3RpZmljYXRpb25zOm8oZnVuY3Rpb24oZSl7dGhpcy5ub3RpZmljYXRpb25zKCExKSxlKCksdGhpcy5ub3RpZmljYXRpb25zKCEwKX0sIm5vTm90aWZpY2F0aW9ucyIpLGJhdGNoaW5nOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5iYXRjaENvdW50PjB9LCJiYXRjaGluZyIpLHN0YXJ0QmF0Y2g6byhmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3ByaXZhdGU7cmV0dXJuIGUuYmF0Y2hDb3VudD09bnVsbCYmKGUuYmF0Y2hDb3VudD0wKSxlLmJhdGNoQ291bnQ9PT0wJiYoZS5iYXRjaFN0eWxlRWxlcz10aGlzLmNvbGxlY3Rpb24oKSxlLmJhdGNoTm90aWZpY2F0aW9ucz17fSksZS5iYXRjaENvdW50KyssdGhpc30sInN0YXJ0QmF0Y2giKSxlbmRCYXRjaDpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcHJpdmF0ZTtpZihlLmJhdGNoQ291bnQ9PT0wKXJldHVybiB0aGlzO2lmKGUuYmF0Y2hDb3VudC0tLGUuYmF0Y2hDb3VudD09PTApe2UuYmF0Y2hTdHlsZUVsZXMudXBkYXRlU3R5bGUoKTt2YXIgcj10aGlzLnJlbmRlcmVyKCk7T2JqZWN0LmtleXMoZS5iYXRjaE5vdGlmaWNhdGlvbnMpLmZvckVhY2goZnVuY3Rpb24obil7dmFyIGk9ZS5iYXRjaE5vdGlmaWNhdGlvbnNbbl07aS5lbXB0eSgpP3Iubm90aWZ5KG4pOnIubm90aWZ5KG4saSl9KX1yZXR1cm4gdGhpc30sImVuZEJhdGNoIiksYmF0Y2g6byhmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zdGFydEJhdGNoKCksZSgpLHRoaXMuZW5kQmF0Y2goKSx0aGlzfSwiYmF0Y2giKSxiYXRjaERhdGE6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzO3JldHVybiB0aGlzLmJhdGNoKGZ1bmN0aW9uKCl7Zm9yKHZhciBuPU9iamVjdC5rZXlzKGUpLGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIGE9bltpXSxzPWVbYV0sbD1yLmdldEVsZW1lbnRCeUlkKGEpO2wuZGF0YShzKX19KX0sImJhdGNoRGF0YSIpfSxLS2U9bGEoe2hpZGVFZGdlc09uVmlld3BvcnQ6ITEsdGV4dHVyZU9uVmlld3BvcnQ6ITEsbW90aW9uQmx1cjohMSxtb3Rpb25CbHVyT3BhY2l0eTouMDUscGl4ZWxSYXRpbzp2b2lkIDAsZGVza3RvcFRhcFRocmVzaG9sZDo0LHRvdWNoVGFwVGhyZXNob2xkOjgsd2hlZWxTZW5zaXRpdml0eToxLGRlYnVnOiExLHNob3dGcHM6ITEsd2ViZ2w6ITEsd2ViZ2xEZWJ1ZzohMSx3ZWJnbERlYnVnU2hvd0F0bGFzZXM6ITEsd2ViZ2xUZXhTaXplOjIwNDgsd2ViZ2xUZXhSb3dzOjEyLHdlYmdsQmF0Y2hTaXplOjIwNDgsd2ViZ2xUZXhQZXJCYXRjaDoxNCx3ZWJnbEJnQ29sb3I6WzI1NSwyNTUsMjU1XX0pLFVQPXtyZW5kZXJUbzpvKGZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPXRoaXMuX3ByaXZhdGUucmVuZGVyZXI7cmV0dXJuIGEucmVuZGVyVG8oZSxyLG4saSksdGhpc30sInJlbmRlclRvIikscmVuZGVyZXI6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLnJlbmRlcmVyfSwicmVuZGVyZXIiKSxmb3JjZVJlbmRlcjpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm90aWZ5KCJkcmF3IiksdGhpc30sImZvcmNlUmVuZGVyIikscmVzaXplOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnZhbGlkYXRlU2l6ZSgpLHRoaXMuZW1pdEFuZE5vdGlmeSgicmVzaXplIiksdGhpc30sInJlc2l6ZSIpLGluaXRSZW5kZXJlcjpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMsbj1yLmV4dGVuc2lvbigicmVuZGVyZXIiLGUubmFtZSk7aWYobj09bnVsbCl7YWkoIkNhbiBub3QgaW5pdGlhbGlzZTogTm8gc3VjaCByZW5kZXJlciBgIi5jb25jYXQoZS5uYW1lLCJgIGZvdW5kLiBEaWQgeW91IGZvcmdldCB0byBpbXBvcnQgaXQgYW5kIGBjeXRvc2NhcGUudXNlKClgIGl0PyIpKTtyZXR1cm59ZS53aGVlbFNlbnNpdGl2aXR5IT09dm9pZCAwJiZ1bigiWW91IGhhdmUgc2V0IGEgY3VzdG9tIHdoZWVsIHNlbnNpdGl2aXR5LiAgVGhpcyB3aWxsIG1ha2UgeW91ciBhcHAgem9vbSB1bm5hdHVyYWxseSB3aGVuIHVzaW5nIG1haW5zdHJlYW0gbWljZS4gIFlvdSBzaG91bGQgY2hhbmdlIHRoaXMgdmFsdWUgZnJvbSB0aGUgZGVmYXVsdCBvbmx5IGlmIHlvdSBjYW4gZ3VhcmFudGVlIHRoYXQgYWxsIHlvdXIgdXNlcnMgd2lsbCB1c2UgdGhlIHNhbWUgaGFyZHdhcmUgYW5kIE9TIGNvbmZpZ3VyYXRpb24gYXMgeW91ciBjdXJyZW50IG1hY2hpbmUuIik7dmFyIGk9S0tlKGUpO2kuY3k9cixyLl9wcml2YXRlLnJlbmRlcmVyPW5ldyBuKGkpLHRoaXMubm90aWZ5KCJpbml0Iil9LCJpbml0UmVuZGVyZXIiKSxkZXN0cm95UmVuZGVyZXI6byhmdW5jdGlvbigpe3ZhciBlPXRoaXM7ZS5ub3RpZnkoImRlc3Ryb3kiKTt2YXIgcj1lLmNvbnRhaW5lcigpO2lmKHIpZm9yKHIuX2N5cmVnPW51bGw7ci5jaGlsZE5vZGVzLmxlbmd0aD4wOylyLnJlbW92ZUNoaWxkKHIuY2hpbGROb2Rlc1swXSk7ZS5fcHJpdmF0ZS5yZW5kZXJlcj1udWxsLGUubXV0YWJsZUVsZW1lbnRzKCkuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgaT1uLl9wcml2YXRlO2kucnNjcmF0Y2g9e30saS5yc3R5bGU9e30saS5hbmltYXRpb24uY3VycmVudD1bXSxpLmFuaW1hdGlvbi5xdWV1ZT1bXX0pfSwiZGVzdHJveVJlbmRlcmVyIiksb25SZW5kZXI6byhmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vbigicmVuZGVyIixlKX0sIm9uUmVuZGVyIiksb2ZmUmVuZGVyOm8oZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub2ZmKCJyZW5kZXIiLGUpfSwib2ZmUmVuZGVyIil9O1VQLmludmFsaWRhdGVEaW1lbnNpb25zPVVQLnJlc2l6ZTttUz17Y29sbGVjdGlvbjpvKGZ1bmN0aW9uKGUscil7cmV0dXJuIFp0KGUpP3RoaXMuJChlKTpnbyhlKT9lLmNvbGxlY3Rpb24oKTpFbihlKT8ocnx8KHI9e30pLG5ldyBrYSh0aGlzLGUsci51bmlxdWUsci5yZW1vdmVkKSk6bmV3IGthKHRoaXMpfSwiY29sbGVjdGlvbiIpLG5vZGVzOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy4kKGZ1bmN0aW9uKG4pe3JldHVybiBuLmlzTm9kZSgpfSk7cmV0dXJuIGU/ci5maWx0ZXIoZSk6cn0sIm5vZGVzIiksZWRnZXM6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLiQoZnVuY3Rpb24obil7cmV0dXJuIG4uaXNFZGdlKCl9KTtyZXR1cm4gZT9yLmZpbHRlcihlKTpyfSwiZWRnZXMiKSwkOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fcHJpdmF0ZS5lbGVtZW50cztyZXR1cm4gZT9yLmZpbHRlcihlKTpyLnNwYXduU2VsZigpfSwiJCIpLG11dGFibGVFbGVtZW50czpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuZWxlbWVudHN9LCJtdXRhYmxlRWxlbWVudHMiKX07bVMuZWxlbWVudHM9bVMuZmlsdGVyPW1TLiQ7R2E9e30sJGI9InQiLFFLZT0iZiI7R2EuYXBwbHk9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMscj1lLl9wcml2YXRlLG49ci5jeSxpPW4uY29sbGVjdGlvbigpLGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIHM9dFthXSxsPWUuZ2V0Q29udGV4dE1ldGEocyk7aWYoIWwuZW1wdHkpe3ZhciB1PWUuZ2V0Q29udGV4dFN0eWxlKGwpLGg9ZS5hcHBseUNvbnRleHRTdHlsZShsLHUscyk7cy5fcHJpdmF0ZS5hcHBsaWVkSW5pdFN0eWxlP2UudXBkYXRlVHJhbnNpdGlvbnMocyxoLmRpZmZQcm9wcyk6cy5fcHJpdmF0ZS5hcHBsaWVkSW5pdFN0eWxlPSEwO3ZhciBmPWUudXBkYXRlU3R5bGVIaW50cyhzKTtmJiZpLnB1c2gocyl9fXJldHVybiBpfTtHYS5nZXRQcm9wZXJ0aWVzRGlmZj1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMsbj1yLl9wcml2YXRlLnByb3BEaWZmcz1yLl9wcml2YXRlLnByb3BEaWZmc3x8e30saT10KyItIitlLGE9bltpXTtpZihhKXJldHVybiBhO2Zvcih2YXIgcz1bXSxsPXt9LHU9MDt1PHIubGVuZ3RoO3UrKyl7dmFyIGg9clt1XSxmPXRbdV09PT0kYixkPWVbdV09PT0kYixwPWYhPT1kLG09aC5tYXBwZWRQcm9wZXJ0aWVzLmxlbmd0aD4wO2lmKHB8fGQmJm0pe3ZhciBnPXZvaWQgMDtwJiZtfHxwP2c9aC5wcm9wZXJ0aWVzOm0mJihnPWgubWFwcGVkUHJvcGVydGllcyk7Zm9yKHZhciB5PTA7eTxnLmxlbmd0aDt5Kyspe2Zvcih2YXIgdj1nW3ldLHg9di5uYW1lLGI9ITEsdz11KzE7dzxyLmxlbmd0aDt3Kyspe3ZhciBDPXJbd10sVD1lW3ddPT09JGI7aWYoVCYmKGI9Qy5wcm9wZXJ0aWVzW3YubmFtZV0hPW51bGwsYikpYnJlYWt9IWxbeF0mJiFiJiYobFt4XT0hMCxzLnB1c2goeCkpfX19cmV0dXJuIG5baV09cyxzfTtHYS5nZXRDb250ZXh0TWV0YT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcyxyPSIiLG4saT10Ll9wcml2YXRlLnN0eWxlQ3h0S2V5fHwiIixhPTA7YTxlLmxlbmd0aDthKyspe3ZhciBzPWVbYV0sbD1zLnNlbGVjdG9yJiZzLnNlbGVjdG9yLm1hdGNoZXModCk7bD9yKz0kYjpyKz1RS2V9cmV0dXJuIG49ZS5nZXRQcm9wZXJ0aWVzRGlmZihpLHIpLHQuX3ByaXZhdGUuc3R5bGVDeHRLZXk9cix7a2V5OnIsZGlmZlByb3BOYW1lczpuLGVtcHR5Om4ubGVuZ3RoPT09MH19O0dhLmdldENvbnRleHRTdHlsZT1mdW5jdGlvbih0KXt2YXIgZT10LmtleSxyPXRoaXMsbj10aGlzLl9wcml2YXRlLmNvbnRleHRTdHlsZXM9dGhpcy5fcHJpdmF0ZS5jb250ZXh0U3R5bGVzfHx7fTtpZihuW2VdKXJldHVybiBuW2VdO2Zvcih2YXIgaT17X3ByaXZhdGU6e2tleTplfX0sYT0wO2E8ci5sZW5ndGg7YSsrKXt2YXIgcz1yW2FdLGw9ZVthXT09PSRiO2lmKGwpZm9yKHZhciB1PTA7dTxzLnByb3BlcnRpZXMubGVuZ3RoO3UrKyl7dmFyIGg9cy5wcm9wZXJ0aWVzW3VdO2lbaC5uYW1lXT1ofX1yZXR1cm4gbltlXT1pLGl9O0dhLmFwcGx5Q29udGV4dFN0eWxlPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dGhpcyxpPXQuZGlmZlByb3BOYW1lcyxhPXt9LHM9bi50eXBlcyxsPTA7bDxpLmxlbmd0aDtsKyspe3ZhciB1PWlbbF0saD1lW3VdLGY9ci5wc3R5bGUodSk7aWYoIWgpaWYoZilmLmJ5cGFzcz9oPXtuYW1lOnUsZGVsZXRlQnlwYXNzZWQ6ITB9Omg9e25hbWU6dSxkZWxldGU6ITB9O2Vsc2UgY29udGludWU7aWYoZiE9PWgpe2lmKGgubWFwcGVkPT09cy5mbiYmZiE9bnVsbCYmZi5tYXBwaW5nIT1udWxsJiZmLm1hcHBpbmcudmFsdWU9PT1oLnZhbHVlKXt2YXIgZD1mLm1hcHBpbmcscD1kLmZuVmFsdWU9aC52YWx1ZShyKTtpZihwPT09ZC5wcmV2Rm5WYWx1ZSljb250aW51ZX12YXIgbT1hW3VdPXtwcmV2OmZ9O24uYXBwbHlQYXJzZWRQcm9wZXJ0eShyLGgpLG0ubmV4dD1yLnBzdHlsZSh1KSxtLm5leHQmJm0ubmV4dC5ieXBhc3MmJihtLm5leHQ9bS5uZXh0LmJ5cGFzc2VkKX19cmV0dXJue2RpZmZQcm9wczphfX07R2EudXBkYXRlU3R5bGVIaW50cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9wcml2YXRlLHI9dGhpcyxuPXIucHJvcGVydHlHcm91cE5hbWVzLGk9ci5wcm9wZXJ0eUdyb3VwS2V5cyxhPW8oZnVuY3Rpb24odGUsSixzZSl7cmV0dXJuIHIuZ2V0UHJvcGVydGllc0hhc2godGUsSixzZSl9LCJwcm9wSGFzaCIpLHM9ZS5zdHlsZUtleTtpZih0LnJlbW92ZWQoKSlyZXR1cm4hMTt2YXIgbD1lLmdyb3VwPT09Im5vZGVzIix1PXQuX3ByaXZhdGUuc3R5bGU7bj1PYmplY3Qua2V5cyh1KTtmb3IodmFyIGg9MDtoPGkubGVuZ3RoO2grKyl7dmFyIGY9aVtoXTtlLnN0eWxlS2V5c1tmXT1bVjEsT2JdfWZvcih2YXIgZD1vKGZ1bmN0aW9uKHRlLEope3JldHVybiBlLnN0eWxlS2V5c1tKXVswXT1IYih0ZSxlLnN0eWxlS2V5c1tKXVswXSl9LCJ1cGRhdGVHcktleTEiKSxwPW8oZnVuY3Rpb24odGUsSil7cmV0dXJuIGUuc3R5bGVLZXlzW0pdWzFdPVdiKHRlLGUuc3R5bGVLZXlzW0pdWzFdKX0sInVwZGF0ZUdyS2V5MiIpLG09byhmdW5jdGlvbih0ZSxKKXtkKHRlLEopLHAodGUsSil9LCJ1cGRhdGVHcktleSIpLGc9byhmdW5jdGlvbih0ZSxKKXtmb3IodmFyIHNlPTA7c2U8dGUubGVuZ3RoO3NlKyspe3ZhciB1ZT10ZS5jaGFyQ29kZUF0KHNlKTtkKHVlLEopLHAodWUsSil9fSwidXBkYXRlR3JLZXlXU3RyIikseT0yZTksdj1vKGZ1bmN0aW9uKHRlKXtyZXR1cm4tMTI4PHRlJiZ0ZTwxMjgmJk1hdGguZmxvb3IodGUpIT09dGU/eS0odGUqMTAyNHwwKTp0ZX0sImNsZWFuTnVtIikseD0wO3g8bi5sZW5ndGg7eCsrKXt2YXIgYj1uW3hdLHc9dVtiXTtpZih3IT1udWxsKXt2YXIgQz10aGlzLnByb3BlcnRpZXNbYl0sVD1DLnR5cGUsRT1DLmdyb3VwS2V5LEE9dm9pZCAwO0MuaGFzaE92ZXJyaWRlIT1udWxsP0E9Qy5oYXNoT3ZlcnJpZGUodCx3KTp3LnBmVmFsdWUhPW51bGwmJihBPXcucGZWYWx1ZSk7dmFyIFM9Qy5lbnVtcz09bnVsbD93LnZhbHVlOm51bGwsXz1BIT1udWxsLEk9UyE9bnVsbCxEPV98fEksaz13LnVuaXRzO2lmKFQubnVtYmVyJiZEJiYhVC5tdWx0aXBsZSl7dmFyIEw9Xz9BOlM7bSh2KEwpLEUpLCFfJiZrIT1udWxsJiZnKGssRSl9ZWxzZSBnKHcuc3RyVmFsdWUsRSl9fWZvcih2YXIgUj1bVjEsT2JdLE89MDtPPGkubGVuZ3RoO08rKyl7dmFyIE09aVtPXSxCPWUuc3R5bGVLZXlzW01dO1JbMF09SGIoQlswXSxSWzBdKSxSWzFdPVdiKEJbMV0sUlsxXSl9ZS5zdHlsZUtleT1ycWUoUlswXSxSWzFdKTt2YXIgRj1lLnN0eWxlS2V5cztlLmxhYmVsRGltc0tleT13ZihGLmxhYmVsRGltZW5zaW9ucyk7dmFyIFA9YSh0LFsibGFiZWwiXSxGLmxhYmVsRGltZW5zaW9ucyk7aWYoZS5sYWJlbEtleT13ZihQKSxlLmxhYmVsU3R5bGVLZXk9d2YoajYoRi5jb21tb25MYWJlbCxQKSksIWwpe3ZhciB6PWEodCxbInNvdXJjZS1sYWJlbCJdLEYubGFiZWxEaW1lbnNpb25zKTtlLnNvdXJjZUxhYmVsS2V5PXdmKHopLGUuc291cmNlTGFiZWxTdHlsZUtleT13ZihqNihGLmNvbW1vbkxhYmVsLHopKTt2YXIgJD1hKHQsWyJ0YXJnZXQtbGFiZWwiXSxGLmxhYmVsRGltZW5zaW9ucyk7ZS50YXJnZXRMYWJlbEtleT13ZigkKSxlLnRhcmdldExhYmVsU3R5bGVLZXk9d2YoajYoRi5jb21tb25MYWJlbCwkKSl9aWYobCl7dmFyIEg9ZS5zdHlsZUtleXMsUT1ILm5vZGVCb2R5LGo9SC5ub2RlQm9yZGVyLGllPUgubm9kZU91dGxpbmUsbmU9SC5iYWNrZ3JvdW5kSW1hZ2UsbGU9SC5jb21wb3VuZCxoZT1ILnBpZSxLPVtRLGosaWUsbmUsbGUsaGVdLmZpbHRlcihmdW5jdGlvbihYKXtyZXR1cm4gWCE9bnVsbH0pLnJlZHVjZShqNixbVjEsT2JdKTtlLm5vZGVLZXk9d2YoSyksZS5oYXNQaWU9aGUhPW51bGwmJmhlWzBdIT09VjEmJmhlWzFdIT09T2J9cmV0dXJuIHMhPT1lLnN0eWxlS2V5fTtHYS5jbGVhclN0eWxlSGludHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fcHJpdmF0ZTtlLnN0eWxlQ3h0S2V5PSIiLGUuc3R5bGVLZXlzPXt9LGUuc3R5bGVLZXk9bnVsbCxlLmxhYmVsS2V5PW51bGwsZS5sYWJlbFN0eWxlS2V5PW51bGwsZS5zb3VyY2VMYWJlbEtleT1udWxsLGUuc291cmNlTGFiZWxTdHlsZUtleT1udWxsLGUudGFyZ2V0TGFiZWxLZXk9bnVsbCxlLnRhcmdldExhYmVsU3R5bGVLZXk9bnVsbCxlLm5vZGVLZXk9bnVsbCxlLmhhc1BpZT1udWxsfTtHYS5hcHBseVBhcnNlZFByb3BlcnR5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxuPWUsaT10Ll9wcml2YXRlLnN0eWxlLGEscz1yLnR5cGVzLGw9ci5wcm9wZXJ0aWVzW24ubmFtZV0udHlwZSx1PW4uYnlwYXNzLGg9aVtuLm5hbWVdLGY9aCYmaC5ieXBhc3MsZD10Ll9wcml2YXRlLHA9Im1hcHBpbmciLG09byhmdW5jdGlvbihRKXtyZXR1cm4gUT09bnVsbD9udWxsOlEucGZWYWx1ZSE9bnVsbD9RLnBmVmFsdWU6US52YWx1ZX0sImdldFZhbCIpLGc9byhmdW5jdGlvbigpe3ZhciBRPW0oaCksaj1tKG4pO3IuY2hlY2tUcmlnZ2Vycyh0LG4ubmFtZSxRLGopfSwiY2hlY2tUcmlnZ2VycyIpO2lmKGUubmFtZT09PSJjdXJ2ZS1zdHlsZSImJnQuaXNFZGdlKCkmJihlLnZhbHVlIT09ImJlemllciImJnQuaXNMb29wKCl8fGUudmFsdWU9PT0iaGF5c3RhY2siJiYodC5zb3VyY2UoKS5pc1BhcmVudCgpfHx0LnRhcmdldCgpLmlzUGFyZW50KCkpKSYmKG49ZT10aGlzLnBhcnNlKGUubmFtZSwiYmV6aWVyIix1KSksbi5kZWxldGUpcmV0dXJuIGlbbi5uYW1lXT12b2lkIDAsZygpLCEwO2lmKG4uZGVsZXRlQnlwYXNzZWQpcmV0dXJuIGg/aC5ieXBhc3M/KGguYnlwYXNzZWQ9dm9pZCAwLGcoKSwhMCk6ITE6KGcoKSwhMCk7aWYobi5kZWxldGVCeXBhc3MpcmV0dXJuIGg/aC5ieXBhc3M/KGlbbi5uYW1lXT1oLmJ5cGFzc2VkLGcoKSwhMCk6ITE6KGcoKSwhMCk7dmFyIHk9byhmdW5jdGlvbigpe3VuKCJEbyBub3QgYXNzaWduIG1hcHBpbmdzIHRvIGVsZW1lbnRzIHdpdGhvdXQgY29ycmVzcG9uZGluZyBkYXRhIChpLmUuIGVsZSBgIit0LmlkKCkrImAgaGFzIG5vIG1hcHBpbmcgZm9yIHByb3BlcnR5IGAiK24ubmFtZSsiYCB3aXRoIGRhdGEgZmllbGQgYCIrbi5maWVsZCsiYCk7IHRyeSBhIGBbIituLmZpZWxkKyJdYCBzZWxlY3RvciB0byBsaW1pdCBzY29wZSB0byBlbGVtZW50cyB3aXRoIGAiK24uZmllbGQrImAgZGVmaW5lZCIpfSwicHJpbnRNYXBwaW5nRXJyIik7c3dpdGNoKG4ubWFwcGVkKXtjYXNlIHMubWFwRGF0YTp7Zm9yKHZhciB2PW4uZmllbGQuc3BsaXQoIi4iKSx4PWQuZGF0YSxiPTA7Yjx2Lmxlbmd0aCYmeDtiKyspe3ZhciB3PXZbYl07eD14W3ddfWlmKHg9PW51bGwpcmV0dXJuIHkoKSwhMTt2YXIgQztpZihDdCh4KSl7dmFyIFQ9bi5maWVsZE1heC1uLmZpZWxkTWluO1Q9PT0wP0M9MDpDPSh4LW4uZmllbGRNaW4pL1R9ZWxzZSByZXR1cm4gdW4oIkRvIG5vdCB1c2UgY29udGludW91cyBtYXBwZXJzIHdpdGhvdXQgc3BlY2lmeWluZyBudW1lcmljIGRhdGEgKGkuZS4gYCIrbi5maWVsZCsiOiAiK3grImAgZm9yIGAiK3QuaWQoKSsiYCBpcyBub24tbnVtZXJpYykiKSwhMTtpZihDPDA/Qz0wOkM+MSYmKEM9MSksbC5jb2xvcil7dmFyIEU9bi52YWx1ZU1pblswXSxBPW4udmFsdWVNYXhbMF0sUz1uLnZhbHVlTWluWzFdLF89bi52YWx1ZU1heFsxXSxJPW4udmFsdWVNaW5bMl0sRD1uLnZhbHVlTWF4WzJdLGs9bi52YWx1ZU1pblszXT09bnVsbD8xOm4udmFsdWVNaW5bM10sTD1uLnZhbHVlTWF4WzNdPT1udWxsPzE6bi52YWx1ZU1heFszXSxSPVtNYXRoLnJvdW5kKEUrKEEtRSkqQyksTWF0aC5yb3VuZChTKyhfLVMpKkMpLE1hdGgucm91bmQoSSsoRC1JKSpDKSxNYXRoLnJvdW5kKGsrKEwtaykqQyldO2E9e2J5cGFzczpuLmJ5cGFzcyxuYW1lOm4ubmFtZSx2YWx1ZTpSLHN0clZhbHVlOiJyZ2IoIitSWzBdKyIsICIrUlsxXSsiLCAiK1JbMl0rIikifX1lbHNlIGlmKGwubnVtYmVyKXt2YXIgTz1uLnZhbHVlTWluKyhuLnZhbHVlTWF4LW4udmFsdWVNaW4pKkM7YT10aGlzLnBhcnNlKG4ubmFtZSxPLG4uYnlwYXNzLHApfWVsc2UgcmV0dXJuITE7aWYoIWEpcmV0dXJuIHkoKSwhMTthLm1hcHBpbmc9bixuPWE7YnJlYWt9Y2FzZSBzLmRhdGE6e2Zvcih2YXIgTT1uLmZpZWxkLnNwbGl0KCIuIiksQj1kLmRhdGEsRj0wO0Y8TS5sZW5ndGgmJkI7RisrKXt2YXIgUD1NW0ZdO0I9QltQXX1pZihCIT1udWxsJiYoYT10aGlzLnBhcnNlKG4ubmFtZSxCLG4uYnlwYXNzLHApKSwhYSlyZXR1cm4geSgpLCExO2EubWFwcGluZz1uLG49YTticmVha31jYXNlIHMuZm46e3ZhciB6PW4udmFsdWUsJD1uLmZuVmFsdWUhPW51bGw/bi5mblZhbHVlOnoodCk7aWYobi5wcmV2Rm5WYWx1ZT0kLCQ9PW51bGwpcmV0dXJuIHVuKCJDdXN0b20gZnVuY3Rpb24gbWFwcGVycyBtYXkgbm90IHJldHVybiBudWxsIChpLmUuIGAiK24ubmFtZSsiYCBmb3IgZWxlIGAiK3QuaWQoKSsiYCBpcyBudWxsKSIpLCExO2lmKGE9dGhpcy5wYXJzZShuLm5hbWUsJCxuLmJ5cGFzcyxwKSwhYSlyZXR1cm4gdW4oIkN1c3RvbSBmdW5jdGlvbiBtYXBwZXJzIG1heSBub3QgcmV0dXJuIGludmFsaWQgdmFsdWVzIGZvciB0aGUgcHJvcGVydHkgdHlwZSAoaS5lLiBgIituLm5hbWUrImAgZm9yIGVsZSBgIit0LmlkKCkrImAgaXMgaW52YWxpZCkiKSwhMTthLm1hcHBpbmc9WWMobiksbj1hO2JyZWFrfWNhc2Ugdm9pZCAwOmJyZWFrO2RlZmF1bHQ6cmV0dXJuITF9cmV0dXJuIHU/KGY/bi5ieXBhc3NlZD1oLmJ5cGFzc2VkOm4uYnlwYXNzZWQ9aCxpW24ubmFtZV09bik6Zj9oLmJ5cGFzc2VkPW46aVtuLm5hbWVdPW4sZygpLCEwfTtHYS5jbGVhbkVsZW1lbnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07aWYodGhpcy5jbGVhclN0eWxlSGludHMobiksbi5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKSxuLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpLCFlKW4uX3ByaXZhdGUuc3R5bGU9e307ZWxzZSBmb3IodmFyIGk9bi5fcHJpdmF0ZS5zdHlsZSxhPU9iamVjdC5rZXlzKGkpLHM9MDtzPGEubGVuZ3RoO3MrKyl7dmFyIGw9YVtzXSx1PWlbbF07dSE9bnVsbCYmKHUuYnlwYXNzP3UuYnlwYXNzZWQ9bnVsbDppW2xdPW51bGwpfX19O0dhLnVwZGF0ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3ByaXZhdGUuY3ksZT10Lm11dGFibGVFbGVtZW50cygpO2UudXBkYXRlU3R5bGUoKX07R2EudXBkYXRlVHJhbnNpdGlvbnM9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLG49dC5fcHJpdmF0ZSxpPXQucHN0eWxlKCJ0cmFuc2l0aW9uLXByb3BlcnR5IikudmFsdWUsYT10LnBzdHlsZSgidHJhbnNpdGlvbi1kdXJhdGlvbiIpLnBmVmFsdWUscz10LnBzdHlsZSgidHJhbnNpdGlvbi1kZWxheSIpLnBmVmFsdWU7aWYoaS5sZW5ndGg+MCYmYT4wKXtmb3IodmFyIGw9e30sdT0hMSxoPTA7aDxpLmxlbmd0aDtoKyspe3ZhciBmPWlbaF0sZD10LnBzdHlsZShmKSxwPWVbZl07aWYocCl7dmFyIG09cC5wcmV2LGc9bSx5PXAubmV4dCE9bnVsbD9wLm5leHQ6ZCx2PSExLHg9dm9pZCAwLGI9MWUtNjtnJiYoQ3QoZy5wZlZhbHVlKSYmQ3QoeS5wZlZhbHVlKT8odj15LnBmVmFsdWUtZy5wZlZhbHVlLHg9Zy5wZlZhbHVlK2Iqdik6Q3QoZy52YWx1ZSkmJkN0KHkudmFsdWUpPyh2PXkudmFsdWUtZy52YWx1ZSx4PWcudmFsdWUrYip2KTpFbihnLnZhbHVlKSYmRW4oeS52YWx1ZSkmJih2PWcudmFsdWVbMF0hPT15LnZhbHVlWzBdfHxnLnZhbHVlWzFdIT09eS52YWx1ZVsxXXx8Zy52YWx1ZVsyXSE9PXkudmFsdWVbMl0seD1nLnN0clZhbHVlKSx2JiYobFtmXT15LnN0clZhbHVlLHRoaXMuYXBwbHlCeXBhc3ModCxmLHgpLHU9ITApKX19aWYoIXUpcmV0dXJuO24udHJhbnNpdGlvbmluZz0hMCxuZXcgZXkoZnVuY3Rpb24odyl7cz4wP3QuZGVsYXlBbmltYXRpb24ocykucGxheSgpLnByb21pc2UoKS50aGVuKHcpOncoKX0pLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gdC5hbmltYXRpb24oe3N0eWxlOmwsZHVyYXRpb246YSxlYXNpbmc6dC5wc3R5bGUoInRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uIikudmFsdWUscXVldWU6ITF9KS5wbGF5KCkucHJvbWlzZSgpfSkudGhlbihmdW5jdGlvbigpe3IucmVtb3ZlQnlwYXNzZXModCxpKSx0LmVtaXRBbmROb3RpZnkoInN0eWxlIiksbi50cmFuc2l0aW9uaW5nPSExfSl9ZWxzZSBuLnRyYW5zaXRpb25pbmcmJih0aGlzLnJlbW92ZUJ5cGFzc2VzKHQsaSksdC5lbWl0QW5kTm90aWZ5KCJzdHlsZSIpLG4udHJhbnNpdGlvbmluZz0hMSl9O0dhLmNoZWNrVHJpZ2dlcj1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIHM9dGhpcy5wcm9wZXJ0aWVzW2VdLGw9aShzKTtsIT1udWxsJiZsKHIsbikmJmEocyl9O0dhLmNoZWNrWk9yZGVyVHJpZ2dlcj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzO3RoaXMuY2hlY2tUcmlnZ2VyKHQsZSxyLG4sZnVuY3Rpb24oYSl7cmV0dXJuIGEudHJpZ2dlcnNaT3JkZXJ9LGZ1bmN0aW9uKCl7aS5fcHJpdmF0ZS5jeS5ub3RpZnkoInpvcmRlciIsdCl9KX07R2EuY2hlY2tCb3VuZHNUcmlnZ2VyPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuY2hlY2tUcmlnZ2VyKHQsZSxyLG4sZnVuY3Rpb24oaSl7cmV0dXJuIGkudHJpZ2dlcnNCb3VuZHN9LGZ1bmN0aW9uKGkpe3QuZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlKCksdC5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKSxpLnRyaWdnZXJzQm91bmRzT2ZQYXJhbGxlbEJlemllcnMmJmU9PT0iY3VydmUtc3R5bGUiJiYocj09PSJiZXppZXIifHxuPT09ImJlemllciIpJiZ0LnBhcmFsbGVsRWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EuZGlydHlCb3VuZGluZ0JveENhY2hlKCl9KSxpLnRyaWdnZXJzQm91bmRzT2ZDb25uZWN0ZWRFZGdlcyYmZT09PSJkaXNwbGF5IiYmKHI9PT0ibm9uZSJ8fG49PT0ibm9uZSIpJiZ0LmNvbm5lY3RlZEVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihhKXthLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpfSl9KX07R2EuY2hlY2tUcmlnZ2Vycz1mdW5jdGlvbih0LGUscixuKXt0LmRpcnR5U3R5bGVDYWNoZSgpLHRoaXMuY2hlY2taT3JkZXJUcmlnZ2VyKHQsZSxyLG4pLHRoaXMuY2hlY2tCb3VuZHNUcmlnZ2VyKHQsZSxyLG4pfTtzND17fTtzNC5hcHBseUJ5cGFzcz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLGE9W10scz0hMDtpZihlPT09IioifHxlPT09IioqIil7aWYociE9PXZvaWQgMClmb3IodmFyIGw9MDtsPGkucHJvcGVydGllcy5sZW5ndGg7bCsrKXt2YXIgdT1pLnByb3BlcnRpZXNbbF0saD11Lm5hbWUsZj10aGlzLnBhcnNlKGgsciwhMCk7ZiYmYS5wdXNoKGYpfX1lbHNlIGlmKFp0KGUpKXt2YXIgZD10aGlzLnBhcnNlKGUsciwhMCk7ZCYmYS5wdXNoKGQpfWVsc2UgaWYoVXIoZSkpe3ZhciBwPWU7bj1yO2Zvcih2YXIgbT1PYmplY3Qua2V5cyhwKSxnPTA7ZzxtLmxlbmd0aDtnKyspe3ZhciB5PW1bZ10sdj1wW3ldO2lmKHY9PT12b2lkIDAmJih2PXBbTFMoeSldKSx2IT09dm9pZCAwKXt2YXIgeD10aGlzLnBhcnNlKHksdiwhMCk7eCYmYS5wdXNoKHgpfX19ZWxzZSByZXR1cm4hMTtpZihhLmxlbmd0aD09PTApcmV0dXJuITE7Zm9yKHZhciBiPSExLHc9MDt3PHQubGVuZ3RoO3crKyl7Zm9yKHZhciBDPXRbd10sVD17fSxFPXZvaWQgMCxBPTA7QTxhLmxlbmd0aDtBKyspe3ZhciBTPWFbQV07aWYobil7dmFyIF89Qy5wc3R5bGUoUy5uYW1lKTtFPVRbUy5uYW1lXT17cHJldjpffX1iPXRoaXMuYXBwbHlQYXJzZWRQcm9wZXJ0eShDLFljKFMpKXx8YixuJiYoRS5uZXh0PUMucHN0eWxlKFMubmFtZSkpfWImJnRoaXMudXBkYXRlU3R5bGVIaW50cyhDKSxuJiZ0aGlzLnVwZGF0ZVRyYW5zaXRpb25zKEMsVCxzKX1yZXR1cm4gYn07czQub3ZlcnJpZGVCeXBhc3M9ZnVuY3Rpb24odCxlLHIpe2U9ZUIoZSk7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXRbbl0sYT1pLl9wcml2YXRlLnN0eWxlW2VdLHM9dGhpcy5wcm9wZXJ0aWVzW2VdLnR5cGUsbD1zLmNvbG9yLHU9cy5tdXRpcGxlLGg9YT9hLnBmVmFsdWUhPW51bGw/YS5wZlZhbHVlOmEudmFsdWU6bnVsbDshYXx8IWEuYnlwYXNzP3RoaXMuYXBwbHlCeXBhc3MoaSxlLHIpOihhLnZhbHVlPXIsYS5wZlZhbHVlIT1udWxsJiYoYS5wZlZhbHVlPXIpLGw/YS5zdHJWYWx1ZT0icmdiKCIrci5qb2luKCIsIikrIikiOnU/YS5zdHJWYWx1ZT1yLmpvaW4oIiAiKTphLnN0clZhbHVlPSIiK3IsdGhpcy51cGRhdGVTdHlsZUhpbnRzKGkpKSx0aGlzLmNoZWNrVHJpZ2dlcnMoaSxlLGgscil9fTtzNC5yZW1vdmVBbGxCeXBhc3Nlcz1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnJlbW92ZUJ5cGFzc2VzKHQsdGhpcy5wcm9wZXJ0eU5hbWVzLGUpfTtzNC5yZW1vdmVCeXBhc3Nlcz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPSEwLGk9MDtpPHQubGVuZ3RoO2krKyl7Zm9yKHZhciBhPXRbaV0scz17fSxsPTA7bDxlLmxlbmd0aDtsKyspe3ZhciB1PWVbbF0saD10aGlzLnByb3BlcnRpZXNbdV0sZj1hLnBzdHlsZShoLm5hbWUpO2lmKCEoIWZ8fCFmLmJ5cGFzcykpe3ZhciBkPSIiLHA9dGhpcy5wYXJzZSh1LGQsITApLG09c1toLm5hbWVdPXtwcmV2OmZ9O3RoaXMuYXBwbHlQYXJzZWRQcm9wZXJ0eShhLHApLG0ubmV4dD1hLnBzdHlsZShoLm5hbWUpfX10aGlzLnVwZGF0ZVN0eWxlSGludHMoYSksciYmdGhpcy51cGRhdGVUcmFuc2l0aW9ucyhhLHMsbil9fTtwQj17fTtwQi5nZXRFbVNpemVJblBpeGVscz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY29udGFpbmVyQ3NzKCJmb250LXNpemUiKTtyZXR1cm4gdCE9bnVsbD9wYXJzZUZsb2F0KHQpOjF9O3BCLmNvbnRhaW5lckNzcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9wcml2YXRlLmN5LHI9ZS5jb250YWluZXIoKSxuPWUud2luZG93KCk7aWYobiYmciYmbi5nZXRDb21wdXRlZFN0eWxlKXJldHVybiBuLmdldENvbXB1dGVkU3R5bGUocikuZ2V0UHJvcGVydHlWYWx1ZSh0KX07amM9e307amMuZ2V0UmVuZGVyZWRTdHlsZT1mdW5jdGlvbih0LGUpe3JldHVybiBlP3RoaXMuZ2V0U3R5bGVQcm9wZXJ0eVZhbHVlKHQsZSwhMCk6dGhpcy5nZXRSYXdTdHlsZSh0LCEwKX07amMuZ2V0UmF3U3R5bGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzO2lmKHQ9dFswXSx0KXtmb3IodmFyIG49e30saT0wO2k8ci5wcm9wZXJ0aWVzLmxlbmd0aDtpKyspe3ZhciBhPXIucHJvcGVydGllc1tpXSxzPXIuZ2V0U3R5bGVQcm9wZXJ0eVZhbHVlKHQsYS5uYW1lLGUpO3MhPW51bGwmJihuW2EubmFtZV09cyxuW0xTKGEubmFtZSldPXMpfXJldHVybiBufX07amMuZ2V0SW5kZXhlZFN0eWxlPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQucHN0eWxlKGUpW3JdW25dO3JldHVybiBpPz90LmN5KCkuc3R5bGUoKS5nZXREZWZhdWx0UHJvcGVydHkoZSlbcl1bMF19O2pjLmdldFN0eWxlUHJvcGVydHlWYWx1ZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcztpZih0PXRbMF0sdCl7dmFyIGk9bi5wcm9wZXJ0aWVzW2VdO2kuYWxpYXMmJihpPWkucG9pbnRzVG8pO3ZhciBhPWkudHlwZSxzPXQucHN0eWxlKGkubmFtZSk7aWYocyl7dmFyIGw9cy52YWx1ZSx1PXMudW5pdHMsaD1zLnN0clZhbHVlO2lmKHImJmEubnVtYmVyJiZsIT1udWxsJiZDdChsKSl7dmFyIGY9dC5jeSgpLnpvb20oKSxkPW8oZnVuY3Rpb24odil7cmV0dXJuIHYqZn0sImdldFJlbmRlcmVkVmFsdWUiKSxwPW8oZnVuY3Rpb24odix4KXtyZXR1cm4gZCh2KSt4fSwiZ2V0VmFsdWVTdHJpbmdXaXRoVW5pdHMiKSxtPUVuKGwpLGc9bT91LmV2ZXJ5KGZ1bmN0aW9uKHkpe3JldHVybiB5IT1udWxsfSk6dSE9bnVsbDtyZXR1cm4gZz9tP2wubWFwKGZ1bmN0aW9uKHksdil7cmV0dXJuIHAoeSx1W3ZdKX0pLmpvaW4oIiAiKTpwKGwsdSk6bT9sLm1hcChmdW5jdGlvbih5KXtyZXR1cm4gWnQoeSk/eToiIitkKHkpfSkuam9pbigiICIpOiIiK2QobCl9ZWxzZSBpZihoIT1udWxsKXJldHVybiBofXJldHVybiBudWxsfX07amMuZ2V0QW5pbWF0aW9uU3RhcnRTdHlsZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj17fSxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBpPWVbbl0sYT1pLm5hbWUscz10LnBzdHlsZShhKTtzIT09dm9pZCAwJiYoVXIocyk/cz10aGlzLnBhcnNlKGEscy5zdHJWYWx1ZSk6cz10aGlzLnBhcnNlKGEscykpLHMmJihyW2FdPXMpfXJldHVybiByfTtqYy5nZXRQcm9wc0xpc3Q9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPVtdLG49dCxpPWUucHJvcGVydGllcztpZihuKWZvcih2YXIgYT1PYmplY3Qua2V5cyhuKSxzPTA7czxhLmxlbmd0aDtzKyspe3ZhciBsPWFbc10sdT1uW2xdLGg9aVtsXXx8aVtlQihsKV0sZj10aGlzLnBhcnNlKGgubmFtZSx1KTtmJiZyLnB1c2goZil9cmV0dXJuIHJ9O2pjLmdldE5vbkRlZmF1bHRQcm9wZXJ0aWVzSGFzaD1mdW5jdGlvbih0LGUscil7dmFyIG49ci5zbGljZSgpLGksYSxzLGwsdSxoO2Zvcih1PTA7dTxlLmxlbmd0aDt1KyspaWYoaT1lW3VdLGE9dC5wc3R5bGUoaSwhMSksYSE9bnVsbClpZihhLnBmVmFsdWUhPW51bGwpblswXT1IYihsLG5bMF0pLG5bMV09V2IobCxuWzFdKTtlbHNlIGZvcihzPWEuc3RyVmFsdWUsaD0wO2g8cy5sZW5ndGg7aCsrKWw9cy5jaGFyQ29kZUF0KGgpLG5bMF09SGIobCxuWzBdKSxuWzFdPVdiKGwsblsxXSk7cmV0dXJuIG59O2pjLmdldFByb3BlcnRpZXNIYXNoPWpjLmdldE5vbkRlZmF1bHRQcm9wZXJ0aWVzSGFzaDtWUz17fTtWUy5hcHBlbmRGcm9tSnNvbj1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcyxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl0saT1uLnNlbGVjdG9yLGE9bi5zdHlsZXx8bi5jc3Mscz1PYmplY3Qua2V5cyhhKTtlLnNlbGVjdG9yKGkpO2Zvcih2YXIgbD0wO2w8cy5sZW5ndGg7bCsrKXt2YXIgdT1zW2xdLGg9YVt1XTtlLmNzcyh1LGgpfX1yZXR1cm4gZX07VlMuZnJvbUpzb249ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gZS5yZXNldFRvRGVmYXVsdCgpLGUuYXBwZW5kRnJvbUpzb24odCksZX07VlMuanNvbj1mdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPXRoaXMuZGVmYXVsdExlbmd0aDtlPHRoaXMubGVuZ3RoO2UrKyl7Zm9yKHZhciByPXRoaXNbZV0sbj1yLnNlbGVjdG9yLGk9ci5wcm9wZXJ0aWVzLGE9e30scz0wO3M8aS5sZW5ndGg7cysrKXt2YXIgbD1pW3NdO2FbbC5uYW1lXT1sLnN0clZhbHVlfXQucHVzaCh7c2VsZWN0b3I6bj9uLnRvU3RyaW5nKCk6ImNvcmUiLHN0eWxlOmF9KX1yZXR1cm4gdH07bUI9e307bUIuYXBwZW5kRnJvbVN0cmluZz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9dGhpcyxuPSIiK3QsaSxhLHM7bj1uLnJlcGxhY2UoL1svXVsqXShcc3wuKSs/WypdWy9dL2csIiIpO2Z1bmN0aW9uIGwoKXtuLmxlbmd0aD5pLmxlbmd0aD9uPW4uc3Vic3RyKGkubGVuZ3RoKTpuPSIifW8obCwicmVtb3ZlU2VsQW5kQmxvY2tGcm9tUmVtYWluaW5nIik7ZnVuY3Rpb24gdSgpe2EubGVuZ3RoPnMubGVuZ3RoP2E9YS5zdWJzdHIocy5sZW5ndGgpOmE9IiJ9Zm9yKG8odSwicmVtb3ZlUHJvcEFuZFZhbEZyb21SZW0iKTs7KXt2YXIgaD1uLm1hdGNoKC9eXHMqJC8pO2lmKGgpYnJlYWs7dmFyIGY9bi5tYXRjaCgvXlxzKigoPzoufFxzKSs/KVxzKlx7KCg/Oi58XHMpKz8pXH0vKTtpZighZil7dW4oIkhhbHRpbmcgc3R5bGVzaGVldCBwYXJzaW5nOiBTdHJpbmcgc3R5bGVzaGVldCBjb250YWlucyBtb3JlIHRvIHBhcnNlIGJ1dCBubyBzZWxlY3RvciBhbmQgYmxvY2sgZm91bmQgaW46ICIrbik7YnJlYWt9aT1mWzBdO3ZhciBkPWZbMV07aWYoZCE9PSJjb3JlIil7dmFyIHA9bmV3IExmKGQpO2lmKHAuaW52YWxpZCl7dW4oIlNraXBwaW5nIHBhcnNpbmcgb2YgYmxvY2s6IEludmFsaWQgc2VsZWN0b3IgZm91bmQgaW4gc3RyaW5nIHN0eWxlc2hlZXQ6ICIrZCksbCgpO2NvbnRpbnVlfX12YXIgbT1mWzJdLGc9ITE7YT1tO2Zvcih2YXIgeT1bXTs7KXt2YXIgdj1hLm1hdGNoKC9eXHMqJC8pO2lmKHYpYnJlYWs7dmFyIHg9YS5tYXRjaCgvXlxzKiguKz8pXHMqOlxzKiguKz8pKD86XHMqO3xccyokKS8pO2lmKCF4KXt1bigiU2tpcHBpbmcgcGFyc2luZyBvZiBibG9jazogSW52YWxpZCBmb3JtYXR0aW5nIG9mIHN0eWxlIHByb3BlcnR5IGFuZCB2YWx1ZSBkZWZpbml0aW9ucyBmb3VuZCBpbjoiK20pLGc9ITA7YnJlYWt9cz14WzBdO3ZhciBiPXhbMV0sdz14WzJdLEM9ZS5wcm9wZXJ0aWVzW2JdO2lmKCFDKXt1bigiU2tpcHBpbmcgcHJvcGVydHk6IEludmFsaWQgcHJvcGVydHkgbmFtZSBpbjogIitzKSx1KCk7Y29udGludWV9dmFyIFQ9ci5wYXJzZShiLHcpO2lmKCFUKXt1bigiU2tpcHBpbmcgcHJvcGVydHk6IEludmFsaWQgcHJvcGVydHkgZGVmaW5pdGlvbiBpbjogIitzKSx1KCk7Y29udGludWV9eS5wdXNoKHtuYW1lOmIsdmFsOnd9KSx1KCl9aWYoZyl7bCgpO2JyZWFrfXIuc2VsZWN0b3IoZCk7Zm9yKHZhciBFPTA7RTx5Lmxlbmd0aDtFKyspe3ZhciBBPXlbRV07ci5jc3MoQS5uYW1lLEEudmFsKX1sKCl9cmV0dXJuIHJ9O21CLmZyb21TdHJpbmc9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gZS5yZXNldFRvRGVmYXVsdCgpLGUuYXBwZW5kRnJvbVN0cmluZyh0KSxlfTt3YT17fTsoZnVuY3Rpb24oKXt2YXIgdD1IaSxlPXNXZSxyPWxXZSxuPWNXZSxpPXVXZSxhPW8oZnVuY3Rpb24oSyl7cmV0dXJuIl4iK0srIlxccypcXChcXHMqKFtcXHdcXC5dKylcXHMqXFwpJCJ9LCJkYXRhIikscz1vKGZ1bmN0aW9uKEspe3ZhciBYPXQrInxcXHcrfCIrZSsifCIrcisifCIrbisifCIraTtyZXR1cm4iXiIrSysiXFxzKlxcKChbXFx3XFwuXSspXFxzKlxcLFxccyooIit0KyIpXFxzKlxcLFxccyooIit0KyIpXFxzKixcXHMqKCIrWCsiKVxccypcXCxcXHMqKCIrWCsiKVxcKSQifSwibWFwRGF0YSIpLGw9W2BedXJsXFxzKlxcKFxccypbJyJdPyguKz8pWyciXT9cXHMqXFwpJGAsIl4obm9uZSkkIiwiXiguKykkIl07d2EudHlwZXM9e3RpbWU6e251bWJlcjohMCxtaW46MCx1bml0czoic3xtcyIsaW1wbGljaXRVbml0czoibXMifSxwZXJjZW50OntudW1iZXI6ITAsbWluOjAsbWF4OjEwMCx1bml0czoiJSIsaW1wbGljaXRVbml0czoiJSJ9LHBlcmNlbnRhZ2VzOntudW1iZXI6ITAsbWluOjAsbWF4OjEwMCx1bml0czoiJSIsaW1wbGljaXRVbml0czoiJSIsbXVsdGlwbGU6ITB9LHplcm9PbmVOdW1iZXI6e251bWJlcjohMCxtaW46MCxtYXg6MSx1bml0bGVzczohMH0semVyb09uZU51bWJlcnM6e251bWJlcjohMCxtaW46MCxtYXg6MSx1bml0bGVzczohMCxtdWx0aXBsZTohMH0sbk9uZU9uZU51bWJlcjp7bnVtYmVyOiEwLG1pbjotMSxtYXg6MSx1bml0bGVzczohMH0sbm9uTmVnYXRpdmVJbnQ6e251bWJlcjohMCxtaW46MCxpbnRlZ2VyOiEwLHVuaXRsZXNzOiEwfSxub25OZWdhdGl2ZU51bWJlcjp7bnVtYmVyOiEwLG1pbjowLHVuaXRsZXNzOiEwfSxwb3NpdGlvbjp7ZW51bXM6WyJwYXJlbnQiLCJvcmlnaW4iXX0sbm9kZVNpemU6e251bWJlcjohMCxtaW46MCxlbnVtczpbImxhYmVsIl19LG51bWJlcjp7bnVtYmVyOiEwLHVuaXRsZXNzOiEwfSxudW1iZXJzOntudW1iZXI6ITAsdW5pdGxlc3M6ITAsbXVsdGlwbGU6ITB9LHBvc2l0aXZlTnVtYmVyOntudW1iZXI6ITAsdW5pdGxlc3M6ITAsbWluOjAsc3RyaWN0TWluOiEwfSxzaXplOntudW1iZXI6ITAsbWluOjB9LGJpZGlyZWN0aW9uYWxTaXplOntudW1iZXI6ITB9LGJpZGlyZWN0aW9uYWxTaXplTWF5YmVQZXJjZW50OntudW1iZXI6ITAsYWxsb3dQZXJjZW50OiEwfSxiaWRpcmVjdGlvbmFsU2l6ZXM6e251bWJlcjohMCxtdWx0aXBsZTohMH0sc2l6ZU1heWJlUGVyY2VudDp7bnVtYmVyOiEwLG1pbjowLGFsbG93UGVyY2VudDohMH0sYXhpc0RpcmVjdGlvbjp7ZW51bXM6WyJob3Jpem9udGFsIiwibGVmdHdhcmQiLCJyaWdodHdhcmQiLCJ2ZXJ0aWNhbCIsInVwd2FyZCIsImRvd253YXJkIiwiYXV0byJdfSxwYWRkaW5nUmVsYXRpdmVUbzp7ZW51bXM6WyJ3aWR0aCIsImhlaWdodCIsImF2ZXJhZ2UiLCJtaW4iLCJtYXgiXX0sYmdXSDp7bnVtYmVyOiEwLG1pbjowLGFsbG93UGVyY2VudDohMCxlbnVtczpbImF1dG8iXSxtdWx0aXBsZTohMH0sYmdQb3M6e251bWJlcjohMCxhbGxvd1BlcmNlbnQ6ITAsbXVsdGlwbGU6ITB9LGJnUmVsYXRpdmVUbzp7ZW51bXM6WyJpbm5lciIsImluY2x1ZGUtcGFkZGluZyJdLG11bHRpcGxlOiEwfSxiZ1JlcGVhdDp7ZW51bXM6WyJyZXBlYXQiLCJyZXBlYXQteCIsInJlcGVhdC15Iiwibm8tcmVwZWF0Il0sbXVsdGlwbGU6ITB9LGJnRml0OntlbnVtczpbIm5vbmUiLCJjb250YWluIiwiY292ZXIiXSxtdWx0aXBsZTohMH0sYmdDcm9zc09yaWdpbjp7ZW51bXM6WyJhbm9ueW1vdXMiLCJ1c2UtY3JlZGVudGlhbHMiLCJudWxsIl0sbXVsdGlwbGU6ITB9LGJnQ2xpcDp7ZW51bXM6WyJub25lIiwibm9kZSJdLG11bHRpcGxlOiEwfSxiZ0NvbnRhaW5tZW50OntlbnVtczpbImluc2lkZSIsIm92ZXIiXSxtdWx0aXBsZTohMH0sY29sb3I6e2NvbG9yOiEwfSxjb2xvcnM6e2NvbG9yOiEwLG11bHRpcGxlOiEwfSxmaWxsOntlbnVtczpbInNvbGlkIiwibGluZWFyLWdyYWRpZW50IiwicmFkaWFsLWdyYWRpZW50Il19LGJvb2w6e2VudW1zOlsieWVzIiwibm8iXX0sYm9vbHM6e2VudW1zOlsieWVzIiwibm8iXSxtdWx0aXBsZTohMH0sbGluZVN0eWxlOntlbnVtczpbInNvbGlkIiwiZG90dGVkIiwiZGFzaGVkIl19LGxpbmVDYXA6e2VudW1zOlsiYnV0dCIsInJvdW5kIiwic3F1YXJlIl19LGxpbmVQb3NpdGlvbjp7ZW51bXM6WyJjZW50ZXIiLCJpbnNpZGUiLCJvdXRzaWRlIl19LGxpbmVKb2luOntlbnVtczpbInJvdW5kIiwiYmV2ZWwiLCJtaXRlciJdfSxib3JkZXJTdHlsZTp7ZW51bXM6WyJzb2xpZCIsImRvdHRlZCIsImRhc2hlZCIsImRvdWJsZSJdfSxjdXJ2ZVN0eWxlOntlbnVtczpbImJlemllciIsInVuYnVuZGxlZC1iZXppZXIiLCJoYXlzdGFjayIsInNlZ21lbnRzIiwic3RyYWlnaHQiLCJzdHJhaWdodC10cmlhbmdsZSIsInRheGkiLCJyb3VuZC1zZWdtZW50cyIsInJvdW5kLXRheGkiXX0scmFkaXVzVHlwZTp7ZW51bXM6WyJhcmMtcmFkaXVzIiwiaW5mbHVlbmNlLXJhZGl1cyJdLG11bHRpcGxlOiEwfSxmb250RmFtaWx5OntyZWdleDonXihbXFx3LSBcXCJdKyg/OlxccyosXFxzKltcXHctIFxcIl0rKSopJCd9LGZvbnRTdHlsZTp7ZW51bXM6WyJpdGFsaWMiLCJub3JtYWwiLCJvYmxpcXVlIl19LGZvbnRXZWlnaHQ6e2VudW1zOlsibm9ybWFsIiwiYm9sZCIsImJvbGRlciIsImxpZ2h0ZXIiLCIxMDAiLCIyMDAiLCIzMDAiLCI0MDAiLCI1MDAiLCI2MDAiLCI4MDAiLCI5MDAiLDEwMCwyMDAsMzAwLDQwMCw1MDAsNjAwLDcwMCw4MDAsOTAwXX0sdGV4dERlY29yYXRpb246e2VudW1zOlsibm9uZSIsInVuZGVybGluZSIsIm92ZXJsaW5lIiwibGluZS10aHJvdWdoIl19LHRleHRUcmFuc2Zvcm06e2VudW1zOlsibm9uZSIsInVwcGVyY2FzZSIsImxvd2VyY2FzZSJdfSx0ZXh0V3JhcDp7ZW51bXM6WyJub25lIiwid3JhcCIsImVsbGlwc2lzIl19LHRleHRPdmVyZmxvd1dyYXA6e2VudW1zOlsid2hpdGVzcGFjZSIsImFueXdoZXJlIl19LHRleHRCYWNrZ3JvdW5kU2hhcGU6e2VudW1zOlsicmVjdGFuZ2xlIiwicm91bmRyZWN0YW5nbGUiLCJyb3VuZC1yZWN0YW5nbGUiXX0sbm9kZVNoYXBlOntlbnVtczpbInJlY3RhbmdsZSIsInJvdW5kcmVjdGFuZ2xlIiwicm91bmQtcmVjdGFuZ2xlIiwiY3V0cmVjdGFuZ2xlIiwiY3V0LXJlY3RhbmdsZSIsImJvdHRvbXJvdW5kcmVjdGFuZ2xlIiwiYm90dG9tLXJvdW5kLXJlY3RhbmdsZSIsImJhcnJlbCIsImVsbGlwc2UiLCJ0cmlhbmdsZSIsInJvdW5kLXRyaWFuZ2xlIiwic3F1YXJlIiwicGVudGFnb24iLCJyb3VuZC1wZW50YWdvbiIsImhleGFnb24iLCJyb3VuZC1oZXhhZ29uIiwiY29uY2F2ZWhleGFnb24iLCJjb25jYXZlLWhleGFnb24iLCJoZXB0YWdvbiIsInJvdW5kLWhlcHRhZ29uIiwib2N0YWdvbiIsInJvdW5kLW9jdGFnb24iLCJ0YWciLCJyb3VuZC10YWciLCJzdGFyIiwiZGlhbW9uZCIsInJvdW5kLWRpYW1vbmQiLCJ2ZWUiLCJyaG9tYm9pZCIsInJpZ2h0LXJob21ib2lkIiwicG9seWdvbiJdfSxvdmVybGF5U2hhcGU6e2VudW1zOlsicm91bmRyZWN0YW5nbGUiLCJyb3VuZC1yZWN0YW5nbGUiLCJlbGxpcHNlIl19LGNvcm5lclJhZGl1czp7bnVtYmVyOiEwLG1pbjowLHVuaXRzOiJweHxlbSIsaW1wbGljaXRVbml0czoicHgiLGVudW1zOlsiYXV0byJdfSxjb21wb3VuZEluY2x1ZGVMYWJlbHM6e2VudW1zOlsiaW5jbHVkZSIsImV4Y2x1ZGUiXX0sYXJyb3dTaGFwZTp7ZW51bXM6WyJ0ZWUiLCJ0cmlhbmdsZSIsInRyaWFuZ2xlLXRlZSIsImNpcmNsZS10cmlhbmdsZSIsInRyaWFuZ2xlLWNyb3NzIiwidHJpYW5nbGUtYmFja2N1cnZlIiwidmVlIiwic3F1YXJlIiwiY2lyY2xlIiwiZGlhbW9uZCIsImNoZXZyb24iLCJub25lIl19LGFycm93RmlsbDp7ZW51bXM6WyJmaWxsZWQiLCJob2xsb3ciXX0sYXJyb3dXaWR0aDp7bnVtYmVyOiEwLHVuaXRzOiIlfHB4fGVtIixpbXBsaWNpdFVuaXRzOiJweCIsZW51bXM6WyJtYXRjaC1saW5lIl19LGRpc3BsYXk6e2VudW1zOlsiZWxlbWVudCIsIm5vbmUiXX0sdmlzaWJpbGl0eTp7ZW51bXM6WyJoaWRkZW4iLCJ2aXNpYmxlIl19LHpDb21wb3VuZERlcHRoOntlbnVtczpbImJvdHRvbSIsIm9ycGhhbiIsImF1dG8iLCJ0b3AiXX0sekluZGV4Q29tcGFyZTp7ZW51bXM6WyJhdXRvIiwibWFudWFsIl19LHZhbGlnbjp7ZW51bXM6WyJ0b3AiLCJjZW50ZXIiLCJib3R0b20iXX0saGFsaWduOntlbnVtczpbImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdfSxqdXN0aWZpY2F0aW9uOntlbnVtczpbImxlZnQiLCJjZW50ZXIiLCJyaWdodCIsImF1dG8iXX0sdGV4dDp7c3RyaW5nOiEwfSxkYXRhOnttYXBwaW5nOiEwLHJlZ2V4OmEoImRhdGEiKX0sbGF5b3V0RGF0YTp7bWFwcGluZzohMCxyZWdleDphKCJsYXlvdXREYXRhIil9LHNjcmF0Y2g6e21hcHBpbmc6ITAscmVnZXg6YSgic2NyYXRjaCIpfSxtYXBEYXRhOnttYXBwaW5nOiEwLHJlZ2V4OnMoIm1hcERhdGEiKX0sbWFwTGF5b3V0RGF0YTp7bWFwcGluZzohMCxyZWdleDpzKCJtYXBMYXlvdXREYXRhIil9LG1hcFNjcmF0Y2g6e21hcHBpbmc6ITAscmVnZXg6cygibWFwU2NyYXRjaCIpfSxmbjp7bWFwcGluZzohMCxmbjohMH0sdXJsOntyZWdleGVzOmwsc2luZ2xlUmVnZXhNYXRjaFZhbHVlOiEwfSx1cmxzOntyZWdleGVzOmwsc2luZ2xlUmVnZXhNYXRjaFZhbHVlOiEwLG11bHRpcGxlOiEwfSxwcm9wTGlzdDp7cHJvcExpc3Q6ITB9LGFuZ2xlOntudW1iZXI6ITAsdW5pdHM6ImRlZ3xyYWQiLGltcGxpY2l0VW5pdHM6InJhZCJ9LHRleHRSb3RhdGlvbjp7bnVtYmVyOiEwLHVuaXRzOiJkZWd8cmFkIixpbXBsaWNpdFVuaXRzOiJyYWQiLGVudW1zOlsibm9uZSIsImF1dG9yb3RhdGUiXX0scG9seWdvblBvaW50TGlzdDp7bnVtYmVyOiEwLG11bHRpcGxlOiEwLGV2ZW5NdWx0aXBsZTohMCxtaW46LTEsbWF4OjEsdW5pdGxlc3M6ITB9LGVkZ2VEaXN0YW5jZXM6e2VudW1zOlsiaW50ZXJzZWN0aW9uIiwibm9kZS1wb3NpdGlvbiIsImVuZHBvaW50cyJdfSxlZGdlRW5kcG9pbnQ6e251bWJlcjohMCxtdWx0aXBsZTohMCx1bml0czoiJXxweHxlbXxkZWd8cmFkIixpbXBsaWNpdFVuaXRzOiJweCIsZW51bXM6WyJpbnNpZGUtdG8tbm9kZSIsIm91dHNpZGUtdG8tbm9kZSIsIm91dHNpZGUtdG8tbm9kZS1vci1sYWJlbCIsIm91dHNpZGUtdG8tbGluZSIsIm91dHNpZGUtdG8tbGluZS1vci1sYWJlbCJdLHNpbmdsZUVudW06ITAsdmFsaWRhdGU6byhmdW5jdGlvbihLLFgpe3N3aXRjaChLLmxlbmd0aCl7Y2FzZSAyOnJldHVybiBYWzBdIT09ImRlZyImJlhbMF0hPT0icmFkIiYmWFsxXSE9PSJkZWciJiZYWzFdIT09InJhZCI7Y2FzZSAxOnJldHVybiBadChLWzBdKXx8WFswXT09PSJkZWcifHxYWzBdPT09InJhZCI7ZGVmYXVsdDpyZXR1cm4hMX19LCJ2YWxpZGF0ZSIpfSxlYXNpbmc6e3JlZ2V4ZXM6WyJeKHNwcmluZylcXHMqXFwoXFxzKigiK3QrIilcXHMqLFxccyooIit0KyIpXFxzKlxcKSQiLCJeKGN1YmljLWJlemllcilcXHMqXFwoXFxzKigiK3QrIilcXHMqLFxccyooIit0KyIpXFxzKixcXHMqKCIrdCsiKVxccyosXFxzKigiK3QrIilcXHMqXFwpJCJdLGVudW1zOlsibGluZWFyIiwiZWFzZSIsImVhc2UtaW4iLCJlYXNlLW91dCIsImVhc2UtaW4tb3V0IiwiZWFzZS1pbi1zaW5lIiwiZWFzZS1vdXQtc2luZSIsImVhc2UtaW4tb3V0LXNpbmUiLCJlYXNlLWluLXF1YWQiLCJlYXNlLW91dC1xdWFkIiwiZWFzZS1pbi1vdXQtcXVhZCIsImVhc2UtaW4tY3ViaWMiLCJlYXNlLW91dC1jdWJpYyIsImVhc2UtaW4tb3V0LWN1YmljIiwiZWFzZS1pbi1xdWFydCIsImVhc2Utb3V0LXF1YXJ0IiwiZWFzZS1pbi1vdXQtcXVhcnQiLCJlYXNlLWluLXF1aW50IiwiZWFzZS1vdXQtcXVpbnQiLCJlYXNlLWluLW91dC1xdWludCIsImVhc2UtaW4tZXhwbyIsImVhc2Utb3V0LWV4cG8iLCJlYXNlLWluLW91dC1leHBvIiwiZWFzZS1pbi1jaXJjIiwiZWFzZS1vdXQtY2lyYyIsImVhc2UtaW4tb3V0LWNpcmMiXX0sZ3JhZGllbnREaXJlY3Rpb246e2VudW1zOlsidG8tYm90dG9tIiwidG8tdG9wIiwidG8tbGVmdCIsInRvLXJpZ2h0IiwidG8tYm90dG9tLXJpZ2h0IiwidG8tYm90dG9tLWxlZnQiLCJ0by10b3AtcmlnaHQiLCJ0by10b3AtbGVmdCIsInRvLXJpZ2h0LWJvdHRvbSIsInRvLWxlZnQtYm90dG9tIiwidG8tcmlnaHQtdG9wIiwidG8tbGVmdC10b3AiXX0sYm91bmRzRXhwYW5zaW9uOntudW1iZXI6ITAsbXVsdGlwbGU6ITAsbWluOjAsdmFsaWRhdGU6byhmdW5jdGlvbihLKXt2YXIgWD1LLmxlbmd0aDtyZXR1cm4gWD09PTF8fFg9PT0yfHxYPT09NH0sInZhbGlkYXRlIil9fTt2YXIgdT17emVyb05vblplcm86byhmdW5jdGlvbihLLFgpe3JldHVybihLPT1udWxsfHxYPT1udWxsKSYmSyE9PVh8fEs9PTAmJlghPTA/ITA6SyE9MCYmWD09MH0sInplcm9Ob25aZXJvIiksYW55Om8oZnVuY3Rpb24oSyxYKXtyZXR1cm4gSyE9WH0sImFueSIpLGVtcHR5Tm9uRW1wdHk6byhmdW5jdGlvbihLLFgpe3ZhciB0ZT1BZihLKSxKPUFmKFgpO3JldHVybiB0ZSYmIUp8fCF0ZSYmSn0sImVtcHR5Tm9uRW1wdHkiKX0saD13YS50eXBlcyxmPVt7bmFtZToibGFiZWwiLHR5cGU6aC50ZXh0LHRyaWdnZXJzQm91bmRzOnUuYW55LHRyaWdnZXJzWk9yZGVyOnUuZW1wdHlOb25FbXB0eX0se25hbWU6InRleHQtcm90YXRpb24iLHR5cGU6aC50ZXh0Um90YXRpb24sdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJ0ZXh0LW1hcmdpbi14Iix0eXBlOmguYmlkaXJlY3Rpb25hbFNpemUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJ0ZXh0LW1hcmdpbi15Iix0eXBlOmguYmlkaXJlY3Rpb25hbFNpemUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9XSxkPVt7bmFtZToic291cmNlLWxhYmVsIix0eXBlOmgudGV4dCx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InNvdXJjZS10ZXh0LXJvdGF0aW9uIix0eXBlOmgudGV4dFJvdGF0aW9uLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToic291cmNlLXRleHQtbWFyZ2luLXgiLHR5cGU6aC5iaWRpcmVjdGlvbmFsU2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InNvdXJjZS10ZXh0LW1hcmdpbi15Iix0eXBlOmguYmlkaXJlY3Rpb25hbFNpemUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJzb3VyY2UtdGV4dC1vZmZzZXQiLHR5cGU6aC5zaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fV0scD1be25hbWU6InRhcmdldC1sYWJlbCIsdHlwZTpoLnRleHQsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJ0YXJnZXQtdGV4dC1yb3RhdGlvbiIsdHlwZTpoLnRleHRSb3RhdGlvbix0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InRhcmdldC10ZXh0LW1hcmdpbi14Iix0eXBlOmguYmlkaXJlY3Rpb25hbFNpemUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJ0YXJnZXQtdGV4dC1tYXJnaW4teSIsdHlwZTpoLmJpZGlyZWN0aW9uYWxTaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToidGFyZ2V0LXRleHQtb2Zmc2V0Iix0eXBlOmguc2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX1dLG09W3tuYW1lOiJmb250LWZhbWlseSIsdHlwZTpoLmZvbnRGYW1pbHksdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJmb250LXN0eWxlIix0eXBlOmguZm9udFN0eWxlLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToiZm9udC13ZWlnaHQiLHR5cGU6aC5mb250V2VpZ2h0LHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToiZm9udC1zaXplIix0eXBlOmguc2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InRleHQtdHJhbnNmb3JtIix0eXBlOmgudGV4dFRyYW5zZm9ybSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InRleHQtd3JhcCIsdHlwZTpoLnRleHRXcmFwLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToidGV4dC1vdmVyZmxvdy13cmFwIix0eXBlOmgudGV4dE92ZXJmbG93V3JhcCx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InRleHQtbWF4LXdpZHRoIix0eXBlOmguc2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InRleHQtb3V0bGluZS13aWR0aCIsdHlwZTpoLnNpemUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJsaW5lLWhlaWdodCIsdHlwZTpoLnBvc2l0aXZlTnVtYmVyLHRyaWdnZXJzQm91bmRzOnUuYW55fV0sZz1be25hbWU6InRleHQtdmFsaWduIix0eXBlOmgudmFsaWduLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToidGV4dC1oYWxpZ24iLHR5cGU6aC5oYWxpZ24sdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJjb2xvciIsdHlwZTpoLmNvbG9yfSx7bmFtZToidGV4dC1vdXRsaW5lLWNvbG9yIix0eXBlOmguY29sb3J9LHtuYW1lOiJ0ZXh0LW91dGxpbmUtb3BhY2l0eSIsdHlwZTpoLnplcm9PbmVOdW1iZXJ9LHtuYW1lOiJ0ZXh0LWJhY2tncm91bmQtY29sb3IiLHR5cGU6aC5jb2xvcn0se25hbWU6InRleHQtYmFja2dyb3VuZC1vcGFjaXR5Iix0eXBlOmguemVyb09uZU51bWJlcn0se25hbWU6InRleHQtYmFja2dyb3VuZC1wYWRkaW5nIix0eXBlOmguc2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InRleHQtYm9yZGVyLW9wYWNpdHkiLHR5cGU6aC56ZXJvT25lTnVtYmVyfSx7bmFtZToidGV4dC1ib3JkZXItY29sb3IiLHR5cGU6aC5jb2xvcn0se25hbWU6InRleHQtYm9yZGVyLXdpZHRoIix0eXBlOmguc2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InRleHQtYm9yZGVyLXN0eWxlIix0eXBlOmguYm9yZGVyU3R5bGUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJ0ZXh0LWJhY2tncm91bmQtc2hhcGUiLHR5cGU6aC50ZXh0QmFja2dyb3VuZFNoYXBlLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToidGV4dC1qdXN0aWZpY2F0aW9uIix0eXBlOmguanVzdGlmaWNhdGlvbn1dLHk9W3tuYW1lOiJldmVudHMiLHR5cGU6aC5ib29sLHRyaWdnZXJzWk9yZGVyOnUuYW55fSx7bmFtZToidGV4dC1ldmVudHMiLHR5cGU6aC5ib29sLHRyaWdnZXJzWk9yZGVyOnUuYW55fV0sdj1be25hbWU6ImRpc3BsYXkiLHR5cGU6aC5kaXNwbGF5LHRyaWdnZXJzWk9yZGVyOnUuYW55LHRyaWdnZXJzQm91bmRzOnUuYW55LHRyaWdnZXJzQm91bmRzT2ZDb25uZWN0ZWRFZGdlczohMH0se25hbWU6InZpc2liaWxpdHkiLHR5cGU6aC52aXNpYmlsaXR5LHRyaWdnZXJzWk9yZGVyOnUuYW55fSx7bmFtZToib3BhY2l0eSIsdHlwZTpoLnplcm9PbmVOdW1iZXIsdHJpZ2dlcnNaT3JkZXI6dS56ZXJvTm9uWmVyb30se25hbWU6InRleHQtb3BhY2l0eSIsdHlwZTpoLnplcm9PbmVOdW1iZXJ9LHtuYW1lOiJtaW4tem9vbWVkLWZvbnQtc2l6ZSIsdHlwZTpoLnNpemV9LHtuYW1lOiJ6LWNvbXBvdW5kLWRlcHRoIix0eXBlOmguekNvbXBvdW5kRGVwdGgsdHJpZ2dlcnNaT3JkZXI6dS5hbnl9LHtuYW1lOiJ6LWluZGV4LWNvbXBhcmUiLHR5cGU6aC56SW5kZXhDb21wYXJlLHRyaWdnZXJzWk9yZGVyOnUuYW55fSx7bmFtZToiei1pbmRleCIsdHlwZTpoLm51bWJlcix0cmlnZ2Vyc1pPcmRlcjp1LmFueX1dLHg9W3tuYW1lOiJvdmVybGF5LXBhZGRpbmciLHR5cGU6aC5zaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToib3ZlcmxheS1jb2xvciIsdHlwZTpoLmNvbG9yfSx7bmFtZToib3ZlcmxheS1vcGFjaXR5Iix0eXBlOmguemVyb09uZU51bWJlcix0cmlnZ2Vyc0JvdW5kczp1Lnplcm9Ob25aZXJvfSx7bmFtZToib3ZlcmxheS1zaGFwZSIsdHlwZTpoLm92ZXJsYXlTaGFwZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6Im92ZXJsYXktY29ybmVyLXJhZGl1cyIsdHlwZTpoLmNvcm5lclJhZGl1c31dLGI9W3tuYW1lOiJ1bmRlcmxheS1wYWRkaW5nIix0eXBlOmguc2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InVuZGVybGF5LWNvbG9yIix0eXBlOmguY29sb3J9LHtuYW1lOiJ1bmRlcmxheS1vcGFjaXR5Iix0eXBlOmguemVyb09uZU51bWJlcix0cmlnZ2Vyc0JvdW5kczp1Lnplcm9Ob25aZXJvfSx7bmFtZToidW5kZXJsYXktc2hhcGUiLHR5cGU6aC5vdmVybGF5U2hhcGUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJ1bmRlcmxheS1jb3JuZXItcmFkaXVzIix0eXBlOmguY29ybmVyUmFkaXVzfV0sdz1be25hbWU6InRyYW5zaXRpb24tcHJvcGVydHkiLHR5cGU6aC5wcm9wTGlzdH0se25hbWU6InRyYW5zaXRpb24tZHVyYXRpb24iLHR5cGU6aC50aW1lfSx7bmFtZToidHJhbnNpdGlvbi1kZWxheSIsdHlwZTpoLnRpbWV9LHtuYW1lOiJ0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbiIsdHlwZTpoLmVhc2luZ31dLEM9byhmdW5jdGlvbihLLFgpe3JldHVybiBYLnZhbHVlPT09ImxhYmVsIj8tSy5wb29sSW5kZXgoKTpYLnBmVmFsdWV9LCJub2RlU2l6ZUhhc2hPdmVycmlkZSIpLFQ9W3tuYW1lOiJoZWlnaHQiLHR5cGU6aC5ub2RlU2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueSxoYXNoT3ZlcnJpZGU6Q30se25hbWU6IndpZHRoIix0eXBlOmgubm9kZVNpemUsdHJpZ2dlcnNCb3VuZHM6dS5hbnksaGFzaE92ZXJyaWRlOkN9LHtuYW1lOiJzaGFwZSIsdHlwZTpoLm5vZGVTaGFwZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InNoYXBlLXBvbHlnb24tcG9pbnRzIix0eXBlOmgucG9seWdvblBvaW50TGlzdCx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6ImNvcm5lci1yYWRpdXMiLHR5cGU6aC5jb3JuZXJSYWRpdXN9LHtuYW1lOiJiYWNrZ3JvdW5kLWNvbG9yIix0eXBlOmguY29sb3J9LHtuYW1lOiJiYWNrZ3JvdW5kLWZpbGwiLHR5cGU6aC5maWxsfSx7bmFtZToiYmFja2dyb3VuZC1vcGFjaXR5Iix0eXBlOmguemVyb09uZU51bWJlcn0se25hbWU6ImJhY2tncm91bmQtYmxhY2tlbiIsdHlwZTpoLm5PbmVPbmVOdW1iZXJ9LHtuYW1lOiJiYWNrZ3JvdW5kLWdyYWRpZW50LXN0b3AtY29sb3JzIix0eXBlOmguY29sb3JzfSx7bmFtZToiYmFja2dyb3VuZC1ncmFkaWVudC1zdG9wLXBvc2l0aW9ucyIsdHlwZTpoLnBlcmNlbnRhZ2VzfSx7bmFtZToiYmFja2dyb3VuZC1ncmFkaWVudC1kaXJlY3Rpb24iLHR5cGU6aC5ncmFkaWVudERpcmVjdGlvbn0se25hbWU6InBhZGRpbmciLHR5cGU6aC5zaXplTWF5YmVQZXJjZW50LHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToicGFkZGluZy1yZWxhdGl2ZS10byIsdHlwZTpoLnBhZGRpbmdSZWxhdGl2ZVRvLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToiYm91bmRzLWV4cGFuc2lvbiIsdHlwZTpoLmJvdW5kc0V4cGFuc2lvbix0cmlnZ2Vyc0JvdW5kczp1LmFueX1dLEU9W3tuYW1lOiJib3JkZXItY29sb3IiLHR5cGU6aC5jb2xvcn0se25hbWU6ImJvcmRlci1vcGFjaXR5Iix0eXBlOmguemVyb09uZU51bWJlcn0se25hbWU6ImJvcmRlci13aWR0aCIsdHlwZTpoLnNpemUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJib3JkZXItc3R5bGUiLHR5cGU6aC5ib3JkZXJTdHlsZX0se25hbWU6ImJvcmRlci1jYXAiLHR5cGU6aC5saW5lQ2FwfSx7bmFtZToiYm9yZGVyLWpvaW4iLHR5cGU6aC5saW5lSm9pbn0se25hbWU6ImJvcmRlci1kYXNoLXBhdHRlcm4iLHR5cGU6aC5udW1iZXJzfSx7bmFtZToiYm9yZGVyLWRhc2gtb2Zmc2V0Iix0eXBlOmgubnVtYmVyfSx7bmFtZToiYm9yZGVyLXBvc2l0aW9uIix0eXBlOmgubGluZVBvc2l0aW9ufV0sQT1be25hbWU6Im91dGxpbmUtY29sb3IiLHR5cGU6aC5jb2xvcn0se25hbWU6Im91dGxpbmUtb3BhY2l0eSIsdHlwZTpoLnplcm9PbmVOdW1iZXJ9LHtuYW1lOiJvdXRsaW5lLXdpZHRoIix0eXBlOmguc2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6Im91dGxpbmUtc3R5bGUiLHR5cGU6aC5ib3JkZXJTdHlsZX0se25hbWU6Im91dGxpbmUtb2Zmc2V0Iix0eXBlOmguc2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX1dLFM9W3tuYW1lOiJiYWNrZ3JvdW5kLWltYWdlIix0eXBlOmgudXJsc30se25hbWU6ImJhY2tncm91bmQtaW1hZ2UtY3Jvc3NvcmlnaW4iLHR5cGU6aC5iZ0Nyb3NzT3JpZ2lufSx7bmFtZToiYmFja2dyb3VuZC1pbWFnZS1vcGFjaXR5Iix0eXBlOmguemVyb09uZU51bWJlcnN9LHtuYW1lOiJiYWNrZ3JvdW5kLWltYWdlLWNvbnRhaW5tZW50Iix0eXBlOmguYmdDb250YWlubWVudH0se25hbWU6ImJhY2tncm91bmQtaW1hZ2Utc21vb3RoaW5nIix0eXBlOmguYm9vbHN9LHtuYW1lOiJiYWNrZ3JvdW5kLXBvc2l0aW9uLXgiLHR5cGU6aC5iZ1Bvc30se25hbWU6ImJhY2tncm91bmQtcG9zaXRpb24teSIsdHlwZTpoLmJnUG9zfSx7bmFtZToiYmFja2dyb3VuZC13aWR0aC1yZWxhdGl2ZS10byIsdHlwZTpoLmJnUmVsYXRpdmVUb30se25hbWU6ImJhY2tncm91bmQtaGVpZ2h0LXJlbGF0aXZlLXRvIix0eXBlOmguYmdSZWxhdGl2ZVRvfSx7bmFtZToiYmFja2dyb3VuZC1yZXBlYXQiLHR5cGU6aC5iZ1JlcGVhdH0se25hbWU6ImJhY2tncm91bmQtZml0Iix0eXBlOmguYmdGaXR9LHtuYW1lOiJiYWNrZ3JvdW5kLWNsaXAiLHR5cGU6aC5iZ0NsaXB9LHtuYW1lOiJiYWNrZ3JvdW5kLXdpZHRoIix0eXBlOmguYmdXSH0se25hbWU6ImJhY2tncm91bmQtaGVpZ2h0Iix0eXBlOmguYmdXSH0se25hbWU6ImJhY2tncm91bmQtb2Zmc2V0LXgiLHR5cGU6aC5iZ1Bvc30se25hbWU6ImJhY2tncm91bmQtb2Zmc2V0LXkiLHR5cGU6aC5iZ1Bvc31dLF89W3tuYW1lOiJwb3NpdGlvbiIsdHlwZTpoLnBvc2l0aW9uLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToiY29tcG91bmQtc2l6aW5nLXdydC1sYWJlbHMiLHR5cGU6aC5jb21wb3VuZEluY2x1ZGVMYWJlbHMsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJtaW4td2lkdGgiLHR5cGU6aC5zaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToibWluLXdpZHRoLWJpYXMtbGVmdCIsdHlwZTpoLnNpemVNYXliZVBlcmNlbnQsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJtaW4td2lkdGgtYmlhcy1yaWdodCIsdHlwZTpoLnNpemVNYXliZVBlcmNlbnQsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJtaW4taGVpZ2h0Iix0eXBlOmguc2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6Im1pbi1oZWlnaHQtYmlhcy10b3AiLHR5cGU6aC5zaXplTWF5YmVQZXJjZW50LHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToibWluLWhlaWdodC1iaWFzLWJvdHRvbSIsdHlwZTpoLnNpemVNYXliZVBlcmNlbnQsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9XSxJPVt7bmFtZToibGluZS1zdHlsZSIsdHlwZTpoLmxpbmVTdHlsZX0se25hbWU6ImxpbmUtY29sb3IiLHR5cGU6aC5jb2xvcn0se25hbWU6ImxpbmUtZmlsbCIsdHlwZTpoLmZpbGx9LHtuYW1lOiJsaW5lLWNhcCIsdHlwZTpoLmxpbmVDYXB9LHtuYW1lOiJsaW5lLW9wYWNpdHkiLHR5cGU6aC56ZXJvT25lTnVtYmVyfSx7bmFtZToibGluZS1kYXNoLXBhdHRlcm4iLHR5cGU6aC5udW1iZXJzfSx7bmFtZToibGluZS1kYXNoLW9mZnNldCIsdHlwZTpoLm51bWJlcn0se25hbWU6ImxpbmUtb3V0bGluZS13aWR0aCIsdHlwZTpoLnNpemV9LHtuYW1lOiJsaW5lLW91dGxpbmUtY29sb3IiLHR5cGU6aC5jb2xvcn0se25hbWU6ImxpbmUtZ3JhZGllbnQtc3RvcC1jb2xvcnMiLHR5cGU6aC5jb2xvcnN9LHtuYW1lOiJsaW5lLWdyYWRpZW50LXN0b3AtcG9zaXRpb25zIix0eXBlOmgucGVyY2VudGFnZXN9LHtuYW1lOiJjdXJ2ZS1zdHlsZSIsdHlwZTpoLmN1cnZlU3R5bGUsdHJpZ2dlcnNCb3VuZHM6dS5hbnksdHJpZ2dlcnNCb3VuZHNPZlBhcmFsbGVsQmV6aWVyczohMH0se25hbWU6ImhheXN0YWNrLXJhZGl1cyIsdHlwZTpoLnplcm9PbmVOdW1iZXIsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJzb3VyY2UtZW5kcG9pbnQiLHR5cGU6aC5lZGdlRW5kcG9pbnQsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJ0YXJnZXQtZW5kcG9pbnQiLHR5cGU6aC5lZGdlRW5kcG9pbnQsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJjb250cm9sLXBvaW50LXN0ZXAtc2l6ZSIsdHlwZTpoLnNpemUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJjb250cm9sLXBvaW50LWRpc3RhbmNlcyIsdHlwZTpoLmJpZGlyZWN0aW9uYWxTaXplcyx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6ImNvbnRyb2wtcG9pbnQtd2VpZ2h0cyIsdHlwZTpoLm51bWJlcnMsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJzZWdtZW50LWRpc3RhbmNlcyIsdHlwZTpoLmJpZGlyZWN0aW9uYWxTaXplcyx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InNlZ21lbnQtd2VpZ2h0cyIsdHlwZTpoLm51bWJlcnMsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJzZWdtZW50LXJhZGlpIix0eXBlOmgubnVtYmVycyx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InJhZGl1cy10eXBlIix0eXBlOmgucmFkaXVzVHlwZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InRheGktdHVybiIsdHlwZTpoLmJpZGlyZWN0aW9uYWxTaXplTWF5YmVQZXJjZW50LHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToidGF4aS10dXJuLW1pbi1kaXN0YW5jZSIsdHlwZTpoLnNpemUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJ0YXhpLWRpcmVjdGlvbiIsdHlwZTpoLmF4aXNEaXJlY3Rpb24sdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJ0YXhpLXJhZGl1cyIsdHlwZTpoLm51bWJlcix0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6ImVkZ2UtZGlzdGFuY2VzIix0eXBlOmguZWRnZURpc3RhbmNlcyx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6ImFycm93LXNjYWxlIix0eXBlOmgucG9zaXRpdmVOdW1iZXIsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJsb29wLWRpcmVjdGlvbiIsdHlwZTpoLmFuZ2xlLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToibG9vcC1zd2VlcCIsdHlwZTpoLmFuZ2xlLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToic291cmNlLWRpc3RhbmNlLWZyb20tbm9kZSIsdHlwZTpoLnNpemUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJ0YXJnZXQtZGlzdGFuY2UtZnJvbS1ub2RlIix0eXBlOmguc2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX1dLEQ9W3tuYW1lOiJnaG9zdCIsdHlwZTpoLmJvb2wsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJnaG9zdC1vZmZzZXQteCIsdHlwZTpoLmJpZGlyZWN0aW9uYWxTaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToiZ2hvc3Qtb2Zmc2V0LXkiLHR5cGU6aC5iaWRpcmVjdGlvbmFsU2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6Imdob3N0LW9wYWNpdHkiLHR5cGU6aC56ZXJvT25lTnVtYmVyfV0saz1be25hbWU6InNlbGVjdGlvbi1ib3gtY29sb3IiLHR5cGU6aC5jb2xvcn0se25hbWU6InNlbGVjdGlvbi1ib3gtb3BhY2l0eSIsdHlwZTpoLnplcm9PbmVOdW1iZXJ9LHtuYW1lOiJzZWxlY3Rpb24tYm94LWJvcmRlci1jb2xvciIsdHlwZTpoLmNvbG9yfSx7bmFtZToic2VsZWN0aW9uLWJveC1ib3JkZXItd2lkdGgiLHR5cGU6aC5zaXplfSx7bmFtZToiYWN0aXZlLWJnLWNvbG9yIix0eXBlOmguY29sb3J9LHtuYW1lOiJhY3RpdmUtYmctb3BhY2l0eSIsdHlwZTpoLnplcm9PbmVOdW1iZXJ9LHtuYW1lOiJhY3RpdmUtYmctc2l6ZSIsdHlwZTpoLnNpemV9LHtuYW1lOiJvdXRzaWRlLXRleHR1cmUtYmctY29sb3IiLHR5cGU6aC5jb2xvcn0se25hbWU6Im91dHNpZGUtdGV4dHVyZS1iZy1vcGFjaXR5Iix0eXBlOmguemVyb09uZU51bWJlcn1dLEw9W107d2EucGllQmFja2dyb3VuZE49MTYsTC5wdXNoKHtuYW1lOiJwaWUtc2l6ZSIsdHlwZTpoLnNpemVNYXliZVBlcmNlbnR9KTtmb3IodmFyIFI9MTtSPD13YS5waWVCYWNrZ3JvdW5kTjtSKyspTC5wdXNoKHtuYW1lOiJwaWUtIitSKyItYmFja2dyb3VuZC1jb2xvciIsdHlwZTpoLmNvbG9yfSksTC5wdXNoKHtuYW1lOiJwaWUtIitSKyItYmFja2dyb3VuZC1zaXplIix0eXBlOmgucGVyY2VudH0pLEwucHVzaCh7bmFtZToicGllLSIrUisiLWJhY2tncm91bmQtb3BhY2l0eSIsdHlwZTpoLnplcm9PbmVOdW1iZXJ9KTt2YXIgTz1bXSxNPXdhLmFycm93UHJlZml4ZXM9WyJzb3VyY2UiLCJtaWQtc291cmNlIiwidGFyZ2V0IiwibWlkLXRhcmdldCJdO1t7bmFtZToiYXJyb3ctc2hhcGUiLHR5cGU6aC5hcnJvd1NoYXBlLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToiYXJyb3ctY29sb3IiLHR5cGU6aC5jb2xvcn0se25hbWU6ImFycm93LWZpbGwiLHR5cGU6aC5hcnJvd0ZpbGx9LHtuYW1lOiJhcnJvdy13aWR0aCIsdHlwZTpoLmFycm93V2lkdGh9XS5mb3JFYWNoKGZ1bmN0aW9uKGhlKXtNLmZvckVhY2goZnVuY3Rpb24oSyl7dmFyIFg9SysiLSIraGUubmFtZSx0ZT1oZS50eXBlLEo9aGUudHJpZ2dlcnNCb3VuZHM7Ty5wdXNoKHtuYW1lOlgsdHlwZTp0ZSx0cmlnZ2Vyc0JvdW5kczpKfSl9KX0se30pO3ZhciBCPXdhLnByb3BlcnRpZXM9W10uY29uY2F0KHksdyx2LHgsYixELGcsbSxmLGQscCxULEUsQSxTLEwsXyxJLE8sayksRj13YS5wcm9wZXJ0eUdyb3Vwcz17YmVoYXZpb3I6eSx0cmFuc2l0aW9uOncsdmlzaWJpbGl0eTp2LG92ZXJsYXk6eCx1bmRlcmxheTpiLGdob3N0OkQsY29tbW9uTGFiZWw6ZyxsYWJlbERpbWVuc2lvbnM6bSxtYWluTGFiZWw6Zixzb3VyY2VMYWJlbDpkLHRhcmdldExhYmVsOnAsbm9kZUJvZHk6VCxub2RlQm9yZGVyOkUsbm9kZU91dGxpbmU6QSxiYWNrZ3JvdW5kSW1hZ2U6UyxwaWU6TCxjb21wb3VuZDpfLGVkZ2VMaW5lOkksZWRnZUFycm93Ok8sY29yZTprfSxQPXdhLnByb3BlcnR5R3JvdXBOYW1lcz17fSx6PXdhLnByb3BlcnR5R3JvdXBLZXlzPU9iamVjdC5rZXlzKEYpO3ouZm9yRWFjaChmdW5jdGlvbihoZSl7UFtoZV09RltoZV0ubWFwKGZ1bmN0aW9uKEspe3JldHVybiBLLm5hbWV9KSxGW2hlXS5mb3JFYWNoKGZ1bmN0aW9uKEspe3JldHVybiBLLmdyb3VwS2V5PWhlfSl9KTt2YXIgJD13YS5hbGlhc2VzPVt7bmFtZToiY29udGVudCIscG9pbnRzVG86ImxhYmVsIn0se25hbWU6ImNvbnRyb2wtcG9pbnQtZGlzdGFuY2UiLHBvaW50c1RvOiJjb250cm9sLXBvaW50LWRpc3RhbmNlcyJ9LHtuYW1lOiJjb250cm9sLXBvaW50LXdlaWdodCIscG9pbnRzVG86ImNvbnRyb2wtcG9pbnQtd2VpZ2h0cyJ9LHtuYW1lOiJzZWdtZW50LWRpc3RhbmNlIixwb2ludHNUbzoic2VnbWVudC1kaXN0YW5jZXMifSx7bmFtZToic2VnbWVudC13ZWlnaHQiLHBvaW50c1RvOiJzZWdtZW50LXdlaWdodHMifSx7bmFtZToic2VnbWVudC1yYWRpdXMiLHBvaW50c1RvOiJzZWdtZW50LXJhZGlpIn0se25hbWU6ImVkZ2UtdGV4dC1yb3RhdGlvbiIscG9pbnRzVG86InRleHQtcm90YXRpb24ifSx7bmFtZToicGFkZGluZy1sZWZ0Iixwb2ludHNUbzoicGFkZGluZyJ9LHtuYW1lOiJwYWRkaW5nLXJpZ2h0Iixwb2ludHNUbzoicGFkZGluZyJ9LHtuYW1lOiJwYWRkaW5nLXRvcCIscG9pbnRzVG86InBhZGRpbmcifSx7bmFtZToicGFkZGluZy1ib3R0b20iLHBvaW50c1RvOiJwYWRkaW5nIn1dO3dhLnByb3BlcnR5TmFtZXM9Qi5tYXAoZnVuY3Rpb24oaGUpe3JldHVybiBoZS5uYW1lfSk7Zm9yKHZhciBIPTA7SDxCLmxlbmd0aDtIKyspe3ZhciBRPUJbSF07QltRLm5hbWVdPVF9Zm9yKHZhciBqPTA7ajwkLmxlbmd0aDtqKyspe3ZhciBpZT0kW2pdLG5lPUJbaWUucG9pbnRzVG9dLGxlPXtuYW1lOmllLm5hbWUsYWxpYXM6ITAscG9pbnRzVG86bmV9O0IucHVzaChsZSksQltpZS5uYW1lXT1sZX19KSgpO3dhLmdldERlZmF1bHRQcm9wZXJ0eT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5nZXREZWZhdWx0UHJvcGVydGllcygpW3RdfTt3YS5nZXREZWZhdWx0UHJvcGVydGllcz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3ByaXZhdGU7aWYodC5kZWZhdWx0UHJvcGVydGllcyE9bnVsbClyZXR1cm4gdC5kZWZhdWx0UHJvcGVydGllcztmb3IodmFyIGU9cnIoeyJzZWxlY3Rpb24tYm94LWNvbG9yIjoiI2RkZCIsInNlbGVjdGlvbi1ib3gtb3BhY2l0eSI6LjY1LCJzZWxlY3Rpb24tYm94LWJvcmRlci1jb2xvciI6IiNhYWEiLCJzZWxlY3Rpb24tYm94LWJvcmRlci13aWR0aCI6MSwiYWN0aXZlLWJnLWNvbG9yIjoiYmxhY2siLCJhY3RpdmUtYmctb3BhY2l0eSI6LjE1LCJhY3RpdmUtYmctc2l6ZSI6MzAsIm91dHNpZGUtdGV4dHVyZS1iZy1jb2xvciI6IiMwMDAiLCJvdXRzaWRlLXRleHR1cmUtYmctb3BhY2l0eSI6LjEyNSxldmVudHM6InllcyIsInRleHQtZXZlbnRzIjoibm8iLCJ0ZXh0LXZhbGlnbiI6InRvcCIsInRleHQtaGFsaWduIjoiY2VudGVyIiwidGV4dC1qdXN0aWZpY2F0aW9uIjoiYXV0byIsImxpbmUtaGVpZ2h0IjoxLGNvbG9yOiIjMDAwIiwidGV4dC1vdXRsaW5lLWNvbG9yIjoiIzAwMCIsInRleHQtb3V0bGluZS13aWR0aCI6MCwidGV4dC1vdXRsaW5lLW9wYWNpdHkiOjEsInRleHQtb3BhY2l0eSI6MSwidGV4dC1kZWNvcmF0aW9uIjoibm9uZSIsInRleHQtdHJhbnNmb3JtIjoibm9uZSIsInRleHQtd3JhcCI6Im5vbmUiLCJ0ZXh0LW92ZXJmbG93LXdyYXAiOiJ3aGl0ZXNwYWNlIiwidGV4dC1tYXgtd2lkdGgiOjk5OTksInRleHQtYmFja2dyb3VuZC1jb2xvciI6IiMwMDAiLCJ0ZXh0LWJhY2tncm91bmQtb3BhY2l0eSI6MCwidGV4dC1iYWNrZ3JvdW5kLXNoYXBlIjoicmVjdGFuZ2xlIiwidGV4dC1iYWNrZ3JvdW5kLXBhZGRpbmciOjAsInRleHQtYm9yZGVyLW9wYWNpdHkiOjAsInRleHQtYm9yZGVyLXdpZHRoIjowLCJ0ZXh0LWJvcmRlci1zdHlsZSI6InNvbGlkIiwidGV4dC1ib3JkZXItY29sb3IiOiIjMDAwIiwiZm9udC1mYW1pbHkiOiJIZWx2ZXRpY2EgTmV1ZSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmIiwiZm9udC1zdHlsZSI6Im5vcm1hbCIsImZvbnQtd2VpZ2h0Ijoibm9ybWFsIiwiZm9udC1zaXplIjoxNiwibWluLXpvb21lZC1mb250LXNpemUiOjAsInRleHQtcm90YXRpb24iOiJub25lIiwic291cmNlLXRleHQtcm90YXRpb24iOiJub25lIiwidGFyZ2V0LXRleHQtcm90YXRpb24iOiJub25lIix2aXNpYmlsaXR5OiJ2aXNpYmxlIixkaXNwbGF5OiJlbGVtZW50IixvcGFjaXR5OjEsInotY29tcG91bmQtZGVwdGgiOiJhdXRvIiwiei1pbmRleC1jb21wYXJlIjoiYXV0byIsInotaW5kZXgiOjAsbGFiZWw6IiIsInRleHQtbWFyZ2luLXgiOjAsInRleHQtbWFyZ2luLXkiOjAsInNvdXJjZS1sYWJlbCI6IiIsInNvdXJjZS10ZXh0LW9mZnNldCI6MCwic291cmNlLXRleHQtbWFyZ2luLXgiOjAsInNvdXJjZS10ZXh0LW1hcmdpbi15IjowLCJ0YXJnZXQtbGFiZWwiOiIiLCJ0YXJnZXQtdGV4dC1vZmZzZXQiOjAsInRhcmdldC10ZXh0LW1hcmdpbi14IjowLCJ0YXJnZXQtdGV4dC1tYXJnaW4teSI6MCwib3ZlcmxheS1vcGFjaXR5IjowLCJvdmVybGF5LWNvbG9yIjoiIzAwMCIsIm92ZXJsYXktcGFkZGluZyI6MTAsIm92ZXJsYXktc2hhcGUiOiJyb3VuZC1yZWN0YW5nbGUiLCJvdmVybGF5LWNvcm5lci1yYWRpdXMiOiJhdXRvIiwidW5kZXJsYXktb3BhY2l0eSI6MCwidW5kZXJsYXktY29sb3IiOiIjMDAwIiwidW5kZXJsYXktcGFkZGluZyI6MTAsInVuZGVybGF5LXNoYXBlIjoicm91bmQtcmVjdGFuZ2xlIiwidW5kZXJsYXktY29ybmVyLXJhZGl1cyI6ImF1dG8iLCJ0cmFuc2l0aW9uLXByb3BlcnR5Ijoibm9uZSIsInRyYW5zaXRpb24tZHVyYXRpb24iOjAsInRyYW5zaXRpb24tZGVsYXkiOjAsInRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uIjoibGluZWFyIiwiYmFja2dyb3VuZC1ibGFja2VuIjowLCJiYWNrZ3JvdW5kLWNvbG9yIjoiIzk5OSIsImJhY2tncm91bmQtZmlsbCI6InNvbGlkIiwiYmFja2dyb3VuZC1vcGFjaXR5IjoxLCJiYWNrZ3JvdW5kLWltYWdlIjoibm9uZSIsImJhY2tncm91bmQtaW1hZ2UtY3Jvc3NvcmlnaW4iOiJhbm9ueW1vdXMiLCJiYWNrZ3JvdW5kLWltYWdlLW9wYWNpdHkiOjEsImJhY2tncm91bmQtaW1hZ2UtY29udGFpbm1lbnQiOiJpbnNpZGUiLCJiYWNrZ3JvdW5kLWltYWdlLXNtb290aGluZyI6InllcyIsImJhY2tncm91bmQtcG9zaXRpb24teCI6IjUwJSIsImJhY2tncm91bmQtcG9zaXRpb24teSI6IjUwJSIsImJhY2tncm91bmQtb2Zmc2V0LXgiOjAsImJhY2tncm91bmQtb2Zmc2V0LXkiOjAsImJhY2tncm91bmQtd2lkdGgtcmVsYXRpdmUtdG8iOiJpbmNsdWRlLXBhZGRpbmciLCJiYWNrZ3JvdW5kLWhlaWdodC1yZWxhdGl2ZS10byI6ImluY2x1ZGUtcGFkZGluZyIsImJhY2tncm91bmQtcmVwZWF0Ijoibm8tcmVwZWF0IiwiYmFja2dyb3VuZC1maXQiOiJub25lIiwiYmFja2dyb3VuZC1jbGlwIjoibm9kZSIsImJhY2tncm91bmQtd2lkdGgiOiJhdXRvIiwiYmFja2dyb3VuZC1oZWlnaHQiOiJhdXRvIiwiYm9yZGVyLWNvbG9yIjoiIzAwMCIsImJvcmRlci1vcGFjaXR5IjoxLCJib3JkZXItd2lkdGgiOjAsImJvcmRlci1zdHlsZSI6InNvbGlkIiwiYm9yZGVyLWRhc2gtcGF0dGVybiI6WzQsMl0sImJvcmRlci1kYXNoLW9mZnNldCI6MCwiYm9yZGVyLWNhcCI6ImJ1dHQiLCJib3JkZXItam9pbiI6Im1pdGVyIiwiYm9yZGVyLXBvc2l0aW9uIjoiY2VudGVyIiwib3V0bGluZS1jb2xvciI6IiM5OTkiLCJvdXRsaW5lLW9wYWNpdHkiOjEsIm91dGxpbmUtd2lkdGgiOjAsIm91dGxpbmUtb2Zmc2V0IjowLCJvdXRsaW5lLXN0eWxlIjoic29saWQiLGhlaWdodDozMCx3aWR0aDozMCxzaGFwZToiZWxsaXBzZSIsInNoYXBlLXBvbHlnb24tcG9pbnRzIjoiLTEsIC0xLCAgIDEsIC0xLCAgIDEsIDEsICAgLTEsIDEiLCJjb3JuZXItcmFkaXVzIjoiYXV0byIsImJvdW5kcy1leHBhbnNpb24iOjAsImJhY2tncm91bmQtZ3JhZGllbnQtZGlyZWN0aW9uIjoidG8tYm90dG9tIiwiYmFja2dyb3VuZC1ncmFkaWVudC1zdG9wLWNvbG9ycyI6IiM5OTkiLCJiYWNrZ3JvdW5kLWdyYWRpZW50LXN0b3AtcG9zaXRpb25zIjoiMCUiLGdob3N0OiJubyIsImdob3N0LW9mZnNldC15IjowLCJnaG9zdC1vZmZzZXQteCI6MCwiZ2hvc3Qtb3BhY2l0eSI6MCxwYWRkaW5nOjAsInBhZGRpbmctcmVsYXRpdmUtdG8iOiJ3aWR0aCIscG9zaXRpb246Im9yaWdpbiIsImNvbXBvdW5kLXNpemluZy13cnQtbGFiZWxzIjoiaW5jbHVkZSIsIm1pbi13aWR0aCI6MCwibWluLXdpZHRoLWJpYXMtbGVmdCI6MCwibWluLXdpZHRoLWJpYXMtcmlnaHQiOjAsIm1pbi1oZWlnaHQiOjAsIm1pbi1oZWlnaHQtYmlhcy10b3AiOjAsIm1pbi1oZWlnaHQtYmlhcy1ib3R0b20iOjB9LHsicGllLXNpemUiOiIxMDAlIn0sW3tuYW1lOiJwaWUte3tpfX0tYmFja2dyb3VuZC1jb2xvciIsdmFsdWU6ImJsYWNrIn0se25hbWU6InBpZS17e2l9fS1iYWNrZ3JvdW5kLXNpemUiLHZhbHVlOiIwJSJ9LHtuYW1lOiJwaWUte3tpfX0tYmFja2dyb3VuZC1vcGFjaXR5Iix2YWx1ZToxfV0ucmVkdWNlKGZ1bmN0aW9uKHUsaCl7Zm9yKHZhciBmPTE7Zjw9d2EucGllQmFja2dyb3VuZE47ZisrKXt2YXIgZD1oLm5hbWUucmVwbGFjZSgie3tpfX0iLGYpLHA9aC52YWx1ZTt1W2RdPXB9cmV0dXJuIHV9LHt9KSx7ImxpbmUtc3R5bGUiOiJzb2xpZCIsImxpbmUtY29sb3IiOiIjOTk5IiwibGluZS1maWxsIjoic29saWQiLCJsaW5lLWNhcCI6ImJ1dHQiLCJsaW5lLW9wYWNpdHkiOjEsImxpbmUtb3V0bGluZS13aWR0aCI6MCwibGluZS1vdXRsaW5lLWNvbG9yIjoiIzAwMCIsImxpbmUtZ3JhZGllbnQtc3RvcC1jb2xvcnMiOiIjOTk5IiwibGluZS1ncmFkaWVudC1zdG9wLXBvc2l0aW9ucyI6IjAlIiwiY29udHJvbC1wb2ludC1zdGVwLXNpemUiOjQwLCJjb250cm9sLXBvaW50LXdlaWdodHMiOi41LCJzZWdtZW50LXdlaWdodHMiOi41LCJzZWdtZW50LWRpc3RhbmNlcyI6MjAsInNlZ21lbnQtcmFkaWkiOjE1LCJyYWRpdXMtdHlwZSI6ImFyYy1yYWRpdXMiLCJ0YXhpLXR1cm4iOiI1MCUiLCJ0YXhpLXJhZGl1cyI6MTUsInRheGktdHVybi1taW4tZGlzdGFuY2UiOjEwLCJ0YXhpLWRpcmVjdGlvbiI6ImF1dG8iLCJlZGdlLWRpc3RhbmNlcyI6ImludGVyc2VjdGlvbiIsImN1cnZlLXN0eWxlIjoiaGF5c3RhY2siLCJoYXlzdGFjay1yYWRpdXMiOjAsImFycm93LXNjYWxlIjoxLCJsb29wLWRpcmVjdGlvbiI6Ii00NWRlZyIsImxvb3Atc3dlZXAiOiItOTBkZWciLCJzb3VyY2UtZGlzdGFuY2UtZnJvbS1ub2RlIjowLCJ0YXJnZXQtZGlzdGFuY2UtZnJvbS1ub2RlIjowLCJzb3VyY2UtZW5kcG9pbnQiOiJvdXRzaWRlLXRvLW5vZGUiLCJ0YXJnZXQtZW5kcG9pbnQiOiJvdXRzaWRlLXRvLW5vZGUiLCJsaW5lLWRhc2gtcGF0dGVybiI6WzYsM10sImxpbmUtZGFzaC1vZmZzZXQiOjB9LFt7bmFtZToiYXJyb3ctc2hhcGUiLHZhbHVlOiJub25lIn0se25hbWU6ImFycm93LWNvbG9yIix2YWx1ZToiIzk5OSJ9LHtuYW1lOiJhcnJvdy1maWxsIix2YWx1ZToiZmlsbGVkIn0se25hbWU6ImFycm93LXdpZHRoIix2YWx1ZToxfV0ucmVkdWNlKGZ1bmN0aW9uKHUsaCl7cmV0dXJuIHdhLmFycm93UHJlZml4ZXMuZm9yRWFjaChmdW5jdGlvbihmKXt2YXIgZD1mKyItIitoLm5hbWUscD1oLnZhbHVlO3VbZF09cH0pLHV9LHt9KSkscj17fSxuPTA7bjx0aGlzLnByb3BlcnRpZXMubGVuZ3RoO24rKyl7dmFyIGk9dGhpcy5wcm9wZXJ0aWVzW25dO2lmKCFpLnBvaW50c1RvKXt2YXIgYT1pLm5hbWUscz1lW2FdLGw9dGhpcy5wYXJzZShhLHMpO3JbYV09bH19cmV0dXJuIHQuZGVmYXVsdFByb3BlcnRpZXM9cix0LmRlZmF1bHRQcm9wZXJ0aWVzfTt3YS5hZGREZWZhdWx0U3R5bGVzaGVldD1mdW5jdGlvbigpe3RoaXMuc2VsZWN0b3IoIjpwYXJlbnQiKS5jc3Moe3NoYXBlOiJyZWN0YW5nbGUiLHBhZGRpbmc6MTAsImJhY2tncm91bmQtY29sb3IiOiIjZWVlIiwiYm9yZGVyLWNvbG9yIjoiI2NjYyIsImJvcmRlci13aWR0aCI6MX0pLnNlbGVjdG9yKCJlZGdlIikuY3NzKHt3aWR0aDozfSkuc2VsZWN0b3IoIjpsb29wIikuY3NzKHsiY3VydmUtc3R5bGUiOiJiZXppZXIifSkuc2VsZWN0b3IoImVkZ2U6Y29tcG91bmQiKS5jc3MoeyJjdXJ2ZS1zdHlsZSI6ImJlemllciIsInNvdXJjZS1lbmRwb2ludCI6Im91dHNpZGUtdG8tbGluZSIsInRhcmdldC1lbmRwb2ludCI6Im91dHNpZGUtdG8tbGluZSJ9KS5zZWxlY3RvcigiOnNlbGVjdGVkIikuY3NzKHsiYmFja2dyb3VuZC1jb2xvciI6IiMwMTY5RDkiLCJsaW5lLWNvbG9yIjoiIzAxNjlEOSIsInNvdXJjZS1hcnJvdy1jb2xvciI6IiMwMTY5RDkiLCJ0YXJnZXQtYXJyb3ctY29sb3IiOiIjMDE2OUQ5IiwibWlkLXNvdXJjZS1hcnJvdy1jb2xvciI6IiMwMTY5RDkiLCJtaWQtdGFyZ2V0LWFycm93LWNvbG9yIjoiIzAxNjlEOSJ9KS5zZWxlY3RvcigiOnBhcmVudDpzZWxlY3RlZCIpLmNzcyh7ImJhY2tncm91bmQtY29sb3IiOiIjQ0NFMUY5IiwiYm9yZGVyLWNvbG9yIjoiI2FlYzhlNSJ9KS5zZWxlY3RvcigiOmFjdGl2ZSIpLmNzcyh7Im92ZXJsYXktY29sb3IiOiJibGFjayIsIm92ZXJsYXktcGFkZGluZyI6MTAsIm92ZXJsYXktb3BhY2l0eSI6LjI1fSksdGhpcy5kZWZhdWx0TGVuZ3RoPXRoaXMubGVuZ3RofTtVUz17fTtVUy5wYXJzZT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzO2lmKHNpKGUpKXJldHVybiBpLnBhcnNlSW1wbFdhcm4odCxlLHIsbik7dmFyIGE9bj09PSJtYXBwaW5nInx8bj09PSEwfHxuPT09ITF8fG49PW51bGw/ImRvbnRjYXJlIjpuLHM9cj8idCI6ImYiLGw9IiIrZSx1PWNtZSh0LGwscyxhKSxoPWkucHJvcENhY2hlPWkucHJvcENhY2hlfHxbXSxmO3JldHVybihmPWhbdV0pfHwoZj1oW3VdPWkucGFyc2VJbXBsV2Fybih0LGUscixuKSksKHJ8fG49PT0ibWFwcGluZyIpJiYoZj1ZYyhmKSxmJiYoZi52YWx1ZT1ZYyhmLnZhbHVlKSkpLGZ9O1VTLnBhcnNlSW1wbFdhcm49ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5wYXJzZUltcGwodCxlLHIsbik7cmV0dXJuIWkmJmUhPW51bGwmJnVuKCJUaGUgc3R5bGUgcHJvcGVydHkgYCIuY29uY2F0KHQsIjogIikuY29uY2F0KGUsImAgaXMgaW52YWxpZCIpKSxpJiYoaS5uYW1lPT09IndpZHRoInx8aS5uYW1lPT09ImhlaWdodCIpJiZlPT09ImxhYmVsIiYmdW4oIlRoZSBzdHlsZSB2YWx1ZSBvZiBgbGFiZWxgIGlzIGRlcHJlY2F0ZWQgZm9yIGAiK2kubmFtZSsiYCIpLGl9O1VTLnBhcnNlSW1wbD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzO3Q9ZUIodCk7dmFyIGE9aS5wcm9wZXJ0aWVzW3RdLHM9ZSxsPWkudHlwZXM7aWYoIWF8fGU9PT12b2lkIDApcmV0dXJuIG51bGw7YS5hbGlhcyYmKGE9YS5wb2ludHNUbyx0PWEubmFtZSk7dmFyIHU9WnQoZSk7dSYmKGU9ZS50cmltKCkpO3ZhciBoPWEudHlwZTtpZighaClyZXR1cm4gbnVsbDtpZihyJiYoZT09PSIifHxlPT09bnVsbCkpcmV0dXJue25hbWU6dCx2YWx1ZTplLGJ5cGFzczohMCxkZWxldGVCeXBhc3M6ITB9O2lmKHNpKGUpKXJldHVybntuYW1lOnQsdmFsdWU6ZSxzdHJWYWx1ZToiZm4iLG1hcHBlZDpsLmZuLGJ5cGFzczpyfTt2YXIgZixkO2lmKCEoIXV8fG58fGUubGVuZ3RoPDd8fGVbMV0hPT0iYSIpKXtpZihlLmxlbmd0aD49NyYmZVswXT09PSJkIiYmKGY9bmV3IFJlZ0V4cChsLmRhdGEucmVnZXgpLmV4ZWMoZSkpKXtpZihyKXJldHVybiExO3ZhciBwPWwuZGF0YTtyZXR1cm57bmFtZTp0LHZhbHVlOmYsc3RyVmFsdWU6IiIrZSxtYXBwZWQ6cCxmaWVsZDpmWzFdLGJ5cGFzczpyfX1lbHNlIGlmKGUubGVuZ3RoPj0xMCYmZVswXT09PSJtIiYmKGQ9bmV3IFJlZ0V4cChsLm1hcERhdGEucmVnZXgpLmV4ZWMoZSkpKXtpZihyfHxoLm11bHRpcGxlKXJldHVybiExO3ZhciBtPWwubWFwRGF0YTtpZighKGguY29sb3J8fGgubnVtYmVyKSlyZXR1cm4hMTt2YXIgZz10aGlzLnBhcnNlKHQsZFs0XSk7aWYoIWd8fGcubWFwcGVkKXJldHVybiExO3ZhciB5PXRoaXMucGFyc2UodCxkWzVdKTtpZigheXx8eS5tYXBwZWQpcmV0dXJuITE7aWYoZy5wZlZhbHVlPT09eS5wZlZhbHVlfHxnLnN0clZhbHVlPT09eS5zdHJWYWx1ZSlyZXR1cm4gdW4oImAiK3QrIjogIitlKyJgIGlzIG5vdCBhIHZhbGlkIG1hcHBlciBiZWNhdXNlIHRoZSBvdXRwdXQgcmFuZ2UgaXMgemVybzsgY29udmVydGluZyB0byBgIit0KyI6ICIrZy5zdHJWYWx1ZSsiYCIpLHRoaXMucGFyc2UodCxnLnN0clZhbHVlKTtpZihoLmNvbG9yKXt2YXIgdj1nLnZhbHVlLHg9eS52YWx1ZSxiPXZbMF09PT14WzBdJiZ2WzFdPT09eFsxXSYmdlsyXT09PXhbMl0mJih2WzNdPT09eFszXXx8KHZbM109PW51bGx8fHZbM109PT0xKSYmKHhbM109PW51bGx8fHhbM109PT0xKSk7aWYoYilyZXR1cm4hMX1yZXR1cm57bmFtZTp0LHZhbHVlOmQsc3RyVmFsdWU6IiIrZSxtYXBwZWQ6bSxmaWVsZDpkWzFdLGZpZWxkTWluOnBhcnNlRmxvYXQoZFsyXSksZmllbGRNYXg6cGFyc2VGbG9hdChkWzNdKSx2YWx1ZU1pbjpnLnZhbHVlLHZhbHVlTWF4OnkudmFsdWUsYnlwYXNzOnJ9fX1pZihoLm11bHRpcGxlJiZuIT09Im11bHRpcGxlIil7dmFyIHc7aWYodT93PWUuc3BsaXQoL1xzKy8pOkVuKGUpP3c9ZTp3PVtlXSxoLmV2ZW5NdWx0aXBsZSYmdy5sZW5ndGglMiE9PTApcmV0dXJuIG51bGw7Zm9yKHZhciBDPVtdLFQ9W10sRT1bXSxBPSIiLFM9ITEsXz0wO188dy5sZW5ndGg7XysrKXt2YXIgST1pLnBhcnNlKHQsd1tfXSxyLCJtdWx0aXBsZSIpO1M9U3x8WnQoSS52YWx1ZSksQy5wdXNoKEkudmFsdWUpLEUucHVzaChJLnBmVmFsdWUhPW51bGw/SS5wZlZhbHVlOkkudmFsdWUpLFQucHVzaChJLnVuaXRzKSxBKz0oXz4wPyIgIjoiIikrSS5zdHJWYWx1ZX1yZXR1cm4gaC52YWxpZGF0ZSYmIWgudmFsaWRhdGUoQyxUKT9udWxsOmguc2luZ2xlRW51bSYmUz9DLmxlbmd0aD09PTEmJlp0KENbMF0pP3tuYW1lOnQsdmFsdWU6Q1swXSxzdHJWYWx1ZTpDWzBdLGJ5cGFzczpyfTpudWxsOntuYW1lOnQsdmFsdWU6QyxwZlZhbHVlOkUsc3RyVmFsdWU6QSxieXBhc3M6cix1bml0czpUfX12YXIgRD1vKGZ1bmN0aW9uKCl7Zm9yKHZhciBLPTA7SzxoLmVudW1zLmxlbmd0aDtLKyspe3ZhciBYPWguZW51bXNbS107aWYoWD09PWUpcmV0dXJue25hbWU6dCx2YWx1ZTplLHN0clZhbHVlOiIiK2UsYnlwYXNzOnJ9fXJldHVybiBudWxsfSwiY2hlY2tFbnVtcyIpO2lmKGgubnVtYmVyKXt2YXIgayxMPSJweCI7aWYoaC51bml0cyYmKGs9aC51bml0cyksaC5pbXBsaWNpdFVuaXRzJiYoTD1oLmltcGxpY2l0VW5pdHMpLCFoLnVuaXRsZXNzKWlmKHUpe3ZhciBSPSJweHxlbSIrKGguYWxsb3dQZXJjZW50PyJ8XFwlIjoiIik7ayYmKFI9ayk7dmFyIE89ZS5tYXRjaCgiXigiK0hpKyIpKCIrUisiKT8kIik7TyYmKGU9T1sxXSxrPU9bMl18fEwpfWVsc2UoIWt8fGguaW1wbGljaXRVbml0cykmJihrPUwpO2lmKGU9cGFyc2VGbG9hdChlKSxpc05hTihlKSYmaC5lbnVtcz09PXZvaWQgMClyZXR1cm4gbnVsbDtpZihpc05hTihlKSYmaC5lbnVtcyE9PXZvaWQgMClyZXR1cm4gZT1zLEQoKTtpZihoLmludGVnZXImJiFKSGUoZSl8fGgubWluIT09dm9pZCAwJiYoZTxoLm1pbnx8aC5zdHJpY3RNaW4mJmU9PT1oLm1pbil8fGgubWF4IT09dm9pZCAwJiYoZT5oLm1heHx8aC5zdHJpY3RNYXgmJmU9PT1oLm1heCkpcmV0dXJuIG51bGw7dmFyIE09e25hbWU6dCx2YWx1ZTplLHN0clZhbHVlOiIiK2UrKGt8fCIiKSx1bml0czprLGJ5cGFzczpyfTtyZXR1cm4gaC51bml0bGVzc3x8ayE9PSJweCImJmshPT0iZW0iP00ucGZWYWx1ZT1lOk0ucGZWYWx1ZT1rPT09InB4Inx8IWs/ZTp0aGlzLmdldEVtU2l6ZUluUGl4ZWxzKCkqZSwoaz09PSJtcyJ8fGs9PT0icyIpJiYoTS5wZlZhbHVlPWs9PT0ibXMiP2U6MWUzKmUpLChrPT09ImRlZyJ8fGs9PT0icmFkIikmJihNLnBmVmFsdWU9az09PSJyYWQiP2U6TnFlKGUpKSxrPT09IiUiJiYoTS5wZlZhbHVlPWUvMTAwKSxNfWVsc2UgaWYoaC5wcm9wTGlzdCl7dmFyIEI9W10sRj0iIitlO2lmKEYhPT0ibm9uZSIpe2Zvcih2YXIgUD1GLnNwbGl0KC9ccyosXHMqfFxzKy8pLHo9MDt6PFAubGVuZ3RoO3orKyl7dmFyICQ9UFt6XS50cmltKCk7aS5wcm9wZXJ0aWVzWyRdP0IucHVzaCgkKTp1bigiYCIrJCsiYCBpcyBub3QgYSB2YWxpZCBwcm9wZXJ0eSBuYW1lIil9aWYoQi5sZW5ndGg9PT0wKXJldHVybiBudWxsfXJldHVybntuYW1lOnQsdmFsdWU6QixzdHJWYWx1ZTpCLmxlbmd0aD09PTA/Im5vbmUiOkIuam9pbigiICIpLGJ5cGFzczpyfX1lbHNlIGlmKGguY29sb3Ipe3ZhciBIPXRtZShlKTtyZXR1cm4gSD97bmFtZTp0LHZhbHVlOkgscGZWYWx1ZTpILHN0clZhbHVlOiJyZ2IoIitIWzBdKyIsIitIWzFdKyIsIitIWzJdKyIpIixieXBhc3M6cn06bnVsbH1lbHNlIGlmKGgucmVnZXh8fGgucmVnZXhlcyl7aWYoaC5lbnVtcyl7dmFyIFE9RCgpO2lmKFEpcmV0dXJuIFF9Zm9yKHZhciBqPWgucmVnZXhlcz9oLnJlZ2V4ZXM6W2gucmVnZXhdLGllPTA7aWU8ai5sZW5ndGg7aWUrKyl7dmFyIG5lPW5ldyBSZWdFeHAoaltpZV0pLGxlPW5lLmV4ZWMoZSk7aWYobGUpcmV0dXJue25hbWU6dCx2YWx1ZTpoLnNpbmdsZVJlZ2V4TWF0Y2hWYWx1ZT9sZVsxXTpsZSxzdHJWYWx1ZToiIitlLGJ5cGFzczpyfX1yZXR1cm4gbnVsbH1lbHNlIHJldHVybiBoLnN0cmluZz97bmFtZTp0LHZhbHVlOiIiK2Usc3RyVmFsdWU6IiIrZSxieXBhc3M6cn06aC5lbnVtcz9EKCk6bnVsbH07RmE9byhmdW5jdGlvbiB0KGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHQpKXJldHVybiBuZXcgdChlKTtpZighSlAoZSkpe2FpKCJBIHN0eWxlIG11c3QgaGF2ZSBhIGNvcmUgcmVmZXJlbmNlIik7cmV0dXJufXRoaXMuX3ByaXZhdGU9e2N5OmUsY29yZVN0eWxlOnt9fSx0aGlzLmxlbmd0aD0wLHRoaXMucmVzZXRUb0RlZmF1bHQoKX0sIlN0eWxlIiksemE9RmEucHJvdG90eXBlO3phLmluc3RhbmNlU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuInN0eWxlIn07emEuY2xlYXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fcHJpdmF0ZSxlPXQuY3kscj1lLmVsZW1lbnRzKCksbj0wO248dGhpcy5sZW5ndGg7bisrKXRoaXNbbl09dm9pZCAwO3JldHVybiB0aGlzLmxlbmd0aD0wLHQuY29udGV4dFN0eWxlcz17fSx0LnByb3BEaWZmcz17fSx0aGlzLmNsZWFuRWxlbWVudHMociwhMCksci5mb3JFYWNoKGZ1bmN0aW9uKGkpe3ZhciBhPWlbMF0uX3ByaXZhdGU7YS5zdHlsZURpcnR5PSEwLGEuYXBwbGllZEluaXRTdHlsZT0hMX0pLHRoaXN9O3phLnJlc2V0VG9EZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xlYXIoKSx0aGlzLmFkZERlZmF1bHRTdHlsZXNoZWV0KCksdGhpc307emEuY29yZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5jb3JlU3R5bGVbdF18fHRoaXMuZ2V0RGVmYXVsdFByb3BlcnR5KHQpfTt6YS5zZWxlY3Rvcj1mdW5jdGlvbih0KXt2YXIgZT10PT09ImNvcmUiP251bGw6bmV3IExmKHQpLHI9dGhpcy5sZW5ndGgrKztyZXR1cm4gdGhpc1tyXT17c2VsZWN0b3I6ZSxwcm9wZXJ0aWVzOltdLG1hcHBlZFByb3BlcnRpZXM6W10saW5kZXg6cn0sdGhpc307emEuY3NzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPWFyZ3VtZW50cztpZihlLmxlbmd0aD09PTEpZm9yKHZhciByPWVbMF0sbj0wO248dC5wcm9wZXJ0aWVzLmxlbmd0aDtuKyspe3ZhciBpPXQucHJvcGVydGllc1tuXSxhPXJbaS5uYW1lXTthPT09dm9pZCAwJiYoYT1yW0xTKGkubmFtZSldKSxhIT09dm9pZCAwJiZ0aGlzLmNzc1J1bGUoaS5uYW1lLGEpfWVsc2UgZS5sZW5ndGg9PT0yJiZ0aGlzLmNzc1J1bGUoZVswXSxlWzFdKTtyZXR1cm4gdGhpc307emEuc3R5bGU9emEuY3NzO3phLmNzc1J1bGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLnBhcnNlKHQsZSk7aWYocil7dmFyIG49dGhpcy5sZW5ndGgtMTt0aGlzW25dLnByb3BlcnRpZXMucHVzaChyKSx0aGlzW25dLnByb3BlcnRpZXNbci5uYW1lXT1yLHIubmFtZS5tYXRjaCgvcGllLShcZCspLWJhY2tncm91bmQtc2l6ZS8pJiZyLnZhbHVlJiYodGhpcy5fcHJpdmF0ZS5oYXNQaWU9ITApLHIubWFwcGVkJiZ0aGlzW25dLm1hcHBlZFByb3BlcnRpZXMucHVzaChyKTt2YXIgaT0hdGhpc1tuXS5zZWxlY3RvcjtpJiYodGhpcy5fcHJpdmF0ZS5jb3JlU3R5bGVbci5uYW1lXT1yKX1yZXR1cm4gdGhpc307emEuYXBwZW5kPWZ1bmN0aW9uKHQpe3JldHVybiBaMGUodCk/dC5hcHBlbmRUb1N0eWxlKHRoaXMpOkVuKHQpP3RoaXMuYXBwZW5kRnJvbUpzb24odCk6WnQodCkmJnRoaXMuYXBwZW5kRnJvbVN0cmluZyh0KSx0aGlzfTtGYS5mcm9tSnNvbj1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBGYSh0KTtyZXR1cm4gci5mcm9tSnNvbihlKSxyfTtGYS5mcm9tU3RyaW5nPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBGYSh0KS5mcm9tU3RyaW5nKGUpfTtbR2EsczQscEIsamMsVlMsbUIsd2EsVVNdLmZvckVhY2goZnVuY3Rpb24odCl7cnIoemEsdCl9KTtGYS50eXBlcz16YS50eXBlcztGYS5wcm9wZXJ0aWVzPXphLnByb3BlcnRpZXM7RmEucHJvcGVydHlHcm91cHM9emEucHJvcGVydHlHcm91cHM7RmEucHJvcGVydHlHcm91cE5hbWVzPXphLnByb3BlcnR5R3JvdXBOYW1lcztGYS5wcm9wZXJ0eUdyb3VwS2V5cz16YS5wcm9wZXJ0eUdyb3VwS2V5cztaS2U9e3N0eWxlOm8oZnVuY3Rpb24oZSl7aWYoZSl7dmFyIHI9dGhpcy5zZXRTdHlsZShlKTtyLnVwZGF0ZSgpfXJldHVybiB0aGlzLl9wcml2YXRlLnN0eWxlfSwic3R5bGUiKSxzZXRTdHlsZTpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuX3ByaXZhdGU7cmV0dXJuIFowZShlKT9yLnN0eWxlPWUuZ2VuZXJhdGVTdHlsZSh0aGlzKTpFbihlKT9yLnN0eWxlPUZhLmZyb21Kc29uKHRoaXMsZSk6WnQoZSk/ci5zdHlsZT1GYS5mcm9tU3RyaW5nKHRoaXMsZSk6ci5zdHlsZT1GYSh0aGlzKSxyLnN0eWxlfSwic2V0U3R5bGUiKSx1cGRhdGVTdHlsZTpvKGZ1bmN0aW9uKCl7dGhpcy5tdXRhYmxlRWxlbWVudHMoKS51cGRhdGVTdHlsZSgpfSwidXBkYXRlU3R5bGUiKX0sSktlPSJzaW5nbGUiLEhwPXthdXRvbG9jazpvKGZ1bmN0aW9uKGUpe2lmKGUhPT12b2lkIDApdGhpcy5fcHJpdmF0ZS5hdXRvbG9jaz0hIWU7ZWxzZSByZXR1cm4gdGhpcy5fcHJpdmF0ZS5hdXRvbG9jaztyZXR1cm4gdGhpc30sImF1dG9sb2NrIiksYXV0b3VuZ3JhYmlmeTpvKGZ1bmN0aW9uKGUpe2lmKGUhPT12b2lkIDApdGhpcy5fcHJpdmF0ZS5hdXRvdW5ncmFiaWZ5PSEhZTtlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLmF1dG91bmdyYWJpZnk7cmV0dXJuIHRoaXN9LCJhdXRvdW5ncmFiaWZ5IiksYXV0b3Vuc2VsZWN0aWZ5Om8oZnVuY3Rpb24oZSl7aWYoZSE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLmF1dG91bnNlbGVjdGlmeT0hIWU7ZWxzZSByZXR1cm4gdGhpcy5fcHJpdmF0ZS5hdXRvdW5zZWxlY3RpZnk7cmV0dXJuIHRoaXN9LCJhdXRvdW5zZWxlY3RpZnkiKSxzZWxlY3Rpb25UeXBlOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fcHJpdmF0ZTtpZihyLnNlbGVjdGlvblR5cGU9PW51bGwmJihyLnNlbGVjdGlvblR5cGU9SktlKSxlIT09dm9pZCAwKShlPT09ImFkZGl0aXZlInx8ZT09PSJzaW5nbGUiKSYmKHIuc2VsZWN0aW9uVHlwZT1lKTtlbHNlIHJldHVybiByLnNlbGVjdGlvblR5cGU7cmV0dXJuIHRoaXN9LCJzZWxlY3Rpb25UeXBlIikscGFubmluZ0VuYWJsZWQ6byhmdW5jdGlvbihlKXtpZihlIT09dm9pZCAwKXRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWQ9ISFlO2Vsc2UgcmV0dXJuIHRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWQ7cmV0dXJuIHRoaXN9LCJwYW5uaW5nRW5hYmxlZCIpLHVzZXJQYW5uaW5nRW5hYmxlZDpvKGZ1bmN0aW9uKGUpe2lmKGUhPT12b2lkIDApdGhpcy5fcHJpdmF0ZS51c2VyUGFubmluZ0VuYWJsZWQ9ISFlO2Vsc2UgcmV0dXJuIHRoaXMuX3ByaXZhdGUudXNlclBhbm5pbmdFbmFibGVkO3JldHVybiB0aGlzfSwidXNlclBhbm5pbmdFbmFibGVkIiksem9vbWluZ0VuYWJsZWQ6byhmdW5jdGlvbihlKXtpZihlIT09dm9pZCAwKXRoaXMuX3ByaXZhdGUuem9vbWluZ0VuYWJsZWQ9ISFlO2Vsc2UgcmV0dXJuIHRoaXMuX3ByaXZhdGUuem9vbWluZ0VuYWJsZWQ7cmV0dXJuIHRoaXN9LCJ6b29taW5nRW5hYmxlZCIpLHVzZXJab29taW5nRW5hYmxlZDpvKGZ1bmN0aW9uKGUpe2lmKGUhPT12b2lkIDApdGhpcy5fcHJpdmF0ZS51c2VyWm9vbWluZ0VuYWJsZWQ9ISFlO2Vsc2UgcmV0dXJuIHRoaXMuX3ByaXZhdGUudXNlclpvb21pbmdFbmFibGVkO3JldHVybiB0aGlzfSwidXNlclpvb21pbmdFbmFibGVkIiksYm94U2VsZWN0aW9uRW5hYmxlZDpvKGZ1bmN0aW9uKGUpe2lmKGUhPT12b2lkIDApdGhpcy5fcHJpdmF0ZS5ib3hTZWxlY3Rpb25FbmFibGVkPSEhZTtlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLmJveFNlbGVjdGlvbkVuYWJsZWQ7cmV0dXJuIHRoaXN9LCJib3hTZWxlY3Rpb25FbmFibGVkIikscGFuOm8oZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMscj10aGlzLl9wcml2YXRlLnBhbixuLGksYSxzLGw7c3dpdGNoKGUubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIHI7Y2FzZSAxOmlmKFp0KGVbMF0pKXJldHVybiBuPWVbMF0scltuXTtpZihVcihlWzBdKSl7aWYoIXRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWQpcmV0dXJuIHRoaXM7YT1lWzBdLHM9YS54LGw9YS55LEN0KHMpJiYoci54PXMpLEN0KGwpJiYoci55PWwpLHRoaXMuZW1pdCgicGFuIHZpZXdwb3J0Iil9YnJlYWs7Y2FzZSAyOmlmKCF0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkKXJldHVybiB0aGlzO249ZVswXSxpPWVbMV0sKG49PT0ieCJ8fG49PT0ieSIpJiZDdChpKSYmKHJbbl09aSksdGhpcy5lbWl0KCJwYW4gdmlld3BvcnQiKTticmVha31yZXR1cm4gdGhpcy5ub3RpZnkoInZpZXdwb3J0IiksdGhpc30sInBhbiIpLHBhbkJ5Om8oZnVuY3Rpb24oZSxyKXt2YXIgbj1hcmd1bWVudHMsaT10aGlzLl9wcml2YXRlLnBhbixhLHMsbCx1LGg7aWYoIXRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWQpcmV0dXJuIHRoaXM7c3dpdGNoKG4ubGVuZ3RoKXtjYXNlIDE6VXIoZSkmJihsPW5bMF0sdT1sLngsaD1sLnksQ3QodSkmJihpLngrPXUpLEN0KGgpJiYoaS55Kz1oKSx0aGlzLmVtaXQoInBhbiB2aWV3cG9ydCIpKTticmVhaztjYXNlIDI6YT1lLHM9ciwoYT09PSJ4Inx8YT09PSJ5IikmJkN0KHMpJiYoaVthXSs9cyksdGhpcy5lbWl0KCJwYW4gdmlld3BvcnQiKTticmVha31yZXR1cm4gdGhpcy5ub3RpZnkoInZpZXdwb3J0IiksdGhpc30sInBhbkJ5IiksZ2M6byhmdW5jdGlvbigpe3RoaXMubm90aWZ5KCJnYyIpfSwiZ2MiKSxmaXQ6byhmdW5jdGlvbihlLHIpe3ZhciBuPXRoaXMuZ2V0Rml0Vmlld3BvcnQoZSxyKTtpZihuKXt2YXIgaT10aGlzLl9wcml2YXRlO2kuem9vbT1uLnpvb20saS5wYW49bi5wYW4sdGhpcy5lbWl0KCJwYW4gem9vbSB2aWV3cG9ydCIpLHRoaXMubm90aWZ5KCJ2aWV3cG9ydCIpfXJldHVybiB0aGlzfSwiZml0IiksZ2V0Rml0Vmlld3BvcnQ6byhmdW5jdGlvbihlLHIpe2lmKEN0KGUpJiZyPT09dm9pZCAwJiYocj1lLGU9dm9pZCAwKSwhKCF0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkfHwhdGhpcy5fcHJpdmF0ZS56b29taW5nRW5hYmxlZCkpe3ZhciBuO2lmKFp0KGUpKXt2YXIgaT1lO2U9dGhpcy4kKGkpfWVsc2UgaWYocldlKGUpKXt2YXIgYT1lO249e3gxOmEueDEseTE6YS55MSx4MjphLngyLHkyOmEueTJ9LG4udz1uLngyLW4ueDEsbi5oPW4ueTItbi55MX1lbHNlIGdvKGUpfHwoZT10aGlzLm11dGFibGVFbGVtZW50cygpKTtpZighKGdvKGUpJiZlLmVtcHR5KCkpKXtuPW58fGUuYm91bmRpbmdCb3goKTt2YXIgcz10aGlzLndpZHRoKCksbD10aGlzLmhlaWdodCgpLHU7aWYocj1DdChyKT9yOjAsIWlzTmFOKHMpJiYhaXNOYU4obCkmJnM+MCYmbD4wJiYhaXNOYU4obi53KSYmIWlzTmFOKG4uaCkmJm4udz4wJiZuLmg+MCl7dT1NYXRoLm1pbigocy0yKnIpL24udywobC0yKnIpL24uaCksdT11PnRoaXMuX3ByaXZhdGUubWF4Wm9vbT90aGlzLl9wcml2YXRlLm1heFpvb206dSx1PXU8dGhpcy5fcHJpdmF0ZS5taW5ab29tP3RoaXMuX3ByaXZhdGUubWluWm9vbTp1O3ZhciBoPXt4OihzLXUqKG4ueDErbi54MikpLzIseToobC11KihuLnkxK24ueTIpKS8yfTtyZXR1cm57em9vbTp1LHBhbjpofX19fX0sImdldEZpdFZpZXdwb3J0Iiksem9vbVJhbmdlOm8oZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLl9wcml2YXRlO2lmKHI9PW51bGwpe3ZhciBpPWU7ZT1pLm1pbixyPWkubWF4fXJldHVybiBDdChlKSYmQ3QocikmJmU8PXI/KG4ubWluWm9vbT1lLG4ubWF4Wm9vbT1yKTpDdChlKSYmcj09PXZvaWQgMCYmZTw9bi5tYXhab29tP24ubWluWm9vbT1lOkN0KHIpJiZlPT09dm9pZCAwJiZyPj1uLm1pblpvb20mJihuLm1heFpvb209ciksdGhpc30sInpvb21SYW5nZSIpLG1pblpvb206byhmdW5jdGlvbihlKXtyZXR1cm4gZT09PXZvaWQgMD90aGlzLl9wcml2YXRlLm1pblpvb206dGhpcy56b29tUmFuZ2Uoe21pbjplfSl9LCJtaW5ab29tIiksbWF4Wm9vbTpvKGZ1bmN0aW9uKGUpe3JldHVybiBlPT09dm9pZCAwP3RoaXMuX3ByaXZhdGUubWF4Wm9vbTp0aGlzLnpvb21SYW5nZSh7bWF4OmV9KX0sIm1heFpvb20iKSxnZXRab29tZWRWaWV3cG9ydDpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuX3ByaXZhdGUsbj1yLnBhbixpPXIuem9vbSxhLHMsbD0hMTtpZihyLnpvb21pbmdFbmFibGVkfHwobD0hMCksQ3QoZSk/cz1lOlVyKGUpJiYocz1lLmxldmVsLGUucG9zaXRpb24hPW51bGw/YT1NUyhlLnBvc2l0aW9uLGksbik6ZS5yZW5kZXJlZFBvc2l0aW9uIT1udWxsJiYoYT1lLnJlbmRlcmVkUG9zaXRpb24pLGEhPW51bGwmJiFyLnBhbm5pbmdFbmFibGVkJiYobD0hMCkpLHM9cz5yLm1heFpvb20/ci5tYXhab29tOnMscz1zPHIubWluWm9vbT9yLm1pblpvb206cyxsfHwhQ3Qocyl8fHM9PT1pfHxhIT1udWxsJiYoIUN0KGEueCl8fCFDdChhLnkpKSlyZXR1cm4gbnVsbDtpZihhIT1udWxsKXt2YXIgdT1uLGg9aSxmPXMsZD17eDotZi9oKihhLngtdS54KSthLngseTotZi9oKihhLnktdS55KSthLnl9O3JldHVybnt6b29tZWQ6ITAscGFubmVkOiEwLHpvb206ZixwYW46ZH19ZWxzZSByZXR1cm57em9vbWVkOiEwLHBhbm5lZDohMSx6b29tOnMscGFuOm59fSwiZ2V0Wm9vbWVkVmlld3BvcnQiKSx6b29tOm8oZnVuY3Rpb24oZSl7aWYoZT09PXZvaWQgMClyZXR1cm4gdGhpcy5fcHJpdmF0ZS56b29tO3ZhciByPXRoaXMuZ2V0Wm9vbWVkVmlld3BvcnQoZSksbj10aGlzLl9wcml2YXRlO3JldHVybiByPT1udWxsfHwhci56b29tZWQ/dGhpczoobi56b29tPXIuem9vbSxyLnBhbm5lZCYmKG4ucGFuLng9ci5wYW4ueCxuLnBhbi55PXIucGFuLnkpLHRoaXMuZW1pdCgiem9vbSIrKHIucGFubmVkPyIgcGFuIjoiIikrIiB2aWV3cG9ydCIpLHRoaXMubm90aWZ5KCJ2aWV3cG9ydCIpLHRoaXMpfSwiem9vbSIpLHZpZXdwb3J0Om8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fcHJpdmF0ZSxuPSEwLGk9ITAsYT1bXSxzPSExLGw9ITE7aWYoIWUpcmV0dXJuIHRoaXM7aWYoQ3QoZS56b29tKXx8KG49ITEpLFVyKGUucGFuKXx8KGk9ITEpLCFuJiYhaSlyZXR1cm4gdGhpcztpZihuKXt2YXIgdT1lLnpvb207dTxyLm1pblpvb218fHU+ci5tYXhab29tfHwhci56b29taW5nRW5hYmxlZD9zPSEwOihyLnpvb209dSxhLnB1c2goInpvb20iKSl9aWYoaSYmKCFzfHwhZS5jYW5jZWxPbkZhaWxlZFpvb20pJiZyLnBhbm5pbmdFbmFibGVkKXt2YXIgaD1lLnBhbjtDdChoLngpJiYoci5wYW4ueD1oLngsbD0hMSksQ3QoaC55KSYmKHIucGFuLnk9aC55LGw9ITEpLGx8fGEucHVzaCgicGFuIil9cmV0dXJuIGEubGVuZ3RoPjAmJihhLnB1c2goInZpZXdwb3J0IiksdGhpcy5lbWl0KGEuam9pbigiICIpKSx0aGlzLm5vdGlmeSgidmlld3BvcnQiKSksdGhpc30sInZpZXdwb3J0IiksY2VudGVyOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5nZXRDZW50ZXJQYW4oZSk7cmV0dXJuIHImJih0aGlzLl9wcml2YXRlLnBhbj1yLHRoaXMuZW1pdCgicGFuIHZpZXdwb3J0IiksdGhpcy5ub3RpZnkoInZpZXdwb3J0IikpLHRoaXN9LCJjZW50ZXIiKSxnZXRDZW50ZXJQYW46byhmdW5jdGlvbihlLHIpe2lmKHRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWQpe2lmKFp0KGUpKXt2YXIgbj1lO2U9dGhpcy5tdXRhYmxlRWxlbWVudHMoKS5maWx0ZXIobil9ZWxzZSBnbyhlKXx8KGU9dGhpcy5tdXRhYmxlRWxlbWVudHMoKSk7aWYoZS5sZW5ndGghPT0wKXt2YXIgaT1lLmJvdW5kaW5nQm94KCksYT10aGlzLndpZHRoKCkscz10aGlzLmhlaWdodCgpO3I9cj09PXZvaWQgMD90aGlzLl9wcml2YXRlLnpvb206cjt2YXIgbD17eDooYS1yKihpLngxK2kueDIpKS8yLHk6KHMtciooaS55MStpLnkyKSkvMn07cmV0dXJuIGx9fX0sImdldENlbnRlclBhbiIpLHJlc2V0Om8oZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5fcHJpdmF0ZS5wYW5uaW5nRW5hYmxlZHx8IXRoaXMuX3ByaXZhdGUuem9vbWluZ0VuYWJsZWQ/dGhpczoodGhpcy52aWV3cG9ydCh7cGFuOnt4OjAseTowfSx6b29tOjF9KSx0aGlzKX0sInJlc2V0IiksaW52YWxpZGF0ZVNpemU6byhmdW5jdGlvbigpe3RoaXMuX3ByaXZhdGUuc2l6ZUNhY2hlPW51bGx9LCJpbnZhbGlkYXRlU2l6ZSIpLHNpemU6byhmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3ByaXZhdGUscj1lLmNvbnRhaW5lcixuPXRoaXM7cmV0dXJuIGUuc2l6ZUNhY2hlPWUuc2l6ZUNhY2hlfHwocj9mdW5jdGlvbigpe3ZhciBpPW4ud2luZG93KCkuZ2V0Q29tcHV0ZWRTdHlsZShyKSxhPW8oZnVuY3Rpb24obCl7cmV0dXJuIHBhcnNlRmxvYXQoaS5nZXRQcm9wZXJ0eVZhbHVlKGwpKX0sInZhbCIpO3JldHVybnt3aWR0aDpyLmNsaWVudFdpZHRoLWEoInBhZGRpbmctbGVmdCIpLWEoInBhZGRpbmctcmlnaHQiKSxoZWlnaHQ6ci5jbGllbnRIZWlnaHQtYSgicGFkZGluZy10b3AiKS1hKCJwYWRkaW5nLWJvdHRvbSIpfX0oKTp7d2lkdGg6MSxoZWlnaHQ6MX0pfSwic2l6ZSIpLHdpZHRoOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaXplKCkud2lkdGh9LCJ3aWR0aCIpLGhlaWdodDpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2l6ZSgpLmhlaWdodH0sImhlaWdodCIpLGV4dGVudDpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcHJpdmF0ZS5wYW4scj10aGlzLl9wcml2YXRlLnpvb20sbj10aGlzLnJlbmRlcmVkRXh0ZW50KCksaT17eDE6KG4ueDEtZS54KS9yLHgyOihuLngyLWUueCkvcix5MToobi55MS1lLnkpL3IseTI6KG4ueTItZS55KS9yfTtyZXR1cm4gaS53PWkueDItaS54MSxpLmg9aS55Mi1pLnkxLGl9LCJleHRlbnQiKSxyZW5kZXJlZEV4dGVudDpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy53aWR0aCgpLHI9dGhpcy5oZWlnaHQoKTtyZXR1cm57eDE6MCx5MTowLHgyOmUseTI6cix3OmUsaDpyfX0sInJlbmRlcmVkRXh0ZW50IiksbXVsdGlDbGlja0RlYm91bmNlVGltZTpvKGZ1bmN0aW9uKGUpe2lmKGUpdGhpcy5fcHJpdmF0ZS5tdWx0aUNsaWNrRGVib3VuY2VUaW1lPWU7ZWxzZSByZXR1cm4gdGhpcy5fcHJpdmF0ZS5tdWx0aUNsaWNrRGVib3VuY2VUaW1lO3JldHVybiB0aGlzfSwibXVsdGlDbGlja0RlYm91bmNlVGltZSIpfTtIcC5jZW50cmU9SHAuY2VudGVyO0hwLmF1dG9sb2NrTm9kZXM9SHAuYXV0b2xvY2s7SHAuYXV0b3VuZ3JhYmlmeU5vZGVzPUhwLmF1dG91bmdyYWJpZnk7WmI9e2RhdGE6Y24uZGF0YSh7ZmllbGQ6ImRhdGEiLGJpbmRpbmdFdmVudDoiZGF0YSIsYWxsb3dCaW5kaW5nOiEwLGFsbG93U2V0dGluZzohMCxzZXR0aW5nRXZlbnQ6ImRhdGEiLHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiEwLHRyaWdnZXJGbk5hbWU6InRyaWdnZXIiLGFsbG93R2V0dGluZzohMCx1cGRhdGVTdHlsZTohMH0pLHJlbW92ZURhdGE6Y24ucmVtb3ZlRGF0YSh7ZmllbGQ6ImRhdGEiLGV2ZW50OiJkYXRhIix0cmlnZ2VyRm5OYW1lOiJ0cmlnZ2VyIix0cmlnZ2VyRXZlbnQ6ITAsdXBkYXRlU3R5bGU6ITB9KSxzY3JhdGNoOmNuLmRhdGEoe2ZpZWxkOiJzY3JhdGNoIixiaW5kaW5nRXZlbnQ6InNjcmF0Y2giLGFsbG93QmluZGluZzohMCxhbGxvd1NldHRpbmc6ITAsc2V0dGluZ0V2ZW50OiJzY3JhdGNoIixzZXR0aW5nVHJpZ2dlcnNFdmVudDohMCx0cmlnZ2VyRm5OYW1lOiJ0cmlnZ2VyIixhbGxvd0dldHRpbmc6ITAsdXBkYXRlU3R5bGU6ITB9KSxyZW1vdmVTY3JhdGNoOmNuLnJlbW92ZURhdGEoe2ZpZWxkOiJzY3JhdGNoIixldmVudDoic2NyYXRjaCIsdHJpZ2dlckZuTmFtZToidHJpZ2dlciIsdHJpZ2dlckV2ZW50OiEwLHVwZGF0ZVN0eWxlOiEwfSl9O1piLmF0dHI9WmIuZGF0YTtaYi5yZW1vdmVBdHRyPVpiLnJlbW92ZURhdGE7SmI9byhmdW5jdGlvbihlKXt2YXIgcj10aGlzO2U9cnIoe30sZSk7dmFyIG49ZS5jb250YWluZXI7biYmIXZTKG4pJiZ2UyhuWzBdKSYmKG49blswXSk7dmFyIGk9bj9uLl9jeXJlZzpudWxsO2k9aXx8e30saSYmaS5jeSYmKGkuY3kuZGVzdHJveSgpLGk9e30pO3ZhciBhPWkucmVhZGllcz1pLnJlYWRpZXN8fFtdO24mJihuLl9jeXJlZz1pKSxpLmN5PXI7dmFyIHM9VWkhPT12b2lkIDAmJm4hPT12b2lkIDAmJiFlLmhlYWRsZXNzLGw9ZTtsLmxheW91dD1ycih7bmFtZTpzPyJncmlkIjoibnVsbCJ9LGwubGF5b3V0KSxsLnJlbmRlcmVyPXJyKHtuYW1lOnM/ImNhbnZhcyI6Im51bGwifSxsLnJlbmRlcmVyKTt2YXIgdT1vKGZ1bmN0aW9uKGcseSx2KXtyZXR1cm4geSE9PXZvaWQgMD95OnYhPT12b2lkIDA/djpnfSwiZGVmVmFsIiksaD10aGlzLl9wcml2YXRlPXtjb250YWluZXI6bixyZWFkeTohMSxvcHRpb25zOmwsZWxlbWVudHM6bmV3IGthKHRoaXMpLGxpc3RlbmVyczpbXSxhbmlFbGVzOm5ldyBrYSh0aGlzKSxkYXRhOmwuZGF0YXx8e30sc2NyYXRjaDp7fSxsYXlvdXQ6bnVsbCxyZW5kZXJlcjpudWxsLGRlc3Ryb3llZDohMSxub3RpZmljYXRpb25zRW5hYmxlZDohMCxtaW5ab29tOjFlLTUwLG1heFpvb206MWU1MCx6b29taW5nRW5hYmxlZDp1KCEwLGwuem9vbWluZ0VuYWJsZWQpLHVzZXJab29taW5nRW5hYmxlZDp1KCEwLGwudXNlclpvb21pbmdFbmFibGVkKSxwYW5uaW5nRW5hYmxlZDp1KCEwLGwucGFubmluZ0VuYWJsZWQpLHVzZXJQYW5uaW5nRW5hYmxlZDp1KCEwLGwudXNlclBhbm5pbmdFbmFibGVkKSxib3hTZWxlY3Rpb25FbmFibGVkOnUoITAsbC5ib3hTZWxlY3Rpb25FbmFibGVkKSxhdXRvbG9jazp1KCExLGwuYXV0b2xvY2ssbC5hdXRvbG9ja05vZGVzKSxhdXRvdW5ncmFiaWZ5OnUoITEsbC5hdXRvdW5ncmFiaWZ5LGwuYXV0b3VuZ3JhYmlmeU5vZGVzKSxhdXRvdW5zZWxlY3RpZnk6dSghMSxsLmF1dG91bnNlbGVjdGlmeSksc3R5bGVFbmFibGVkOmwuc3R5bGVFbmFibGVkPT09dm9pZCAwP3M6bC5zdHlsZUVuYWJsZWQsem9vbTpDdChsLnpvb20pP2wuem9vbToxLHBhbjp7eDpVcihsLnBhbikmJkN0KGwucGFuLngpP2wucGFuLng6MCx5OlVyKGwucGFuKSYmQ3QobC5wYW4ueSk/bC5wYW4ueTowfSxhbmltYXRpb246e2N1cnJlbnQ6W10scXVldWU6W119LGhhc0NvbXBvdW5kTm9kZXM6ITEsbXVsdGlDbGlja0RlYm91bmNlVGltZTp1KDI1MCxsLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUpfTt0aGlzLmNyZWF0ZUVtaXR0ZXIoKSx0aGlzLnNlbGVjdGlvblR5cGUobC5zZWxlY3Rpb25UeXBlKSx0aGlzLnpvb21SYW5nZSh7bWluOmwubWluWm9vbSxtYXg6bC5tYXhab29tfSk7dmFyIGY9byhmdW5jdGlvbihnLHkpe3ZhciB2PWcuc29tZShuV2UpO2lmKHYpcmV0dXJuIGV5LmFsbChnKS50aGVuKHkpO3koZyl9LCJsb2FkRXh0RGF0YSIpO2guc3R5bGVFbmFibGVkJiZyLnNldFN0eWxlKFtdKTt2YXIgZD1ycih7fSxsLGwucmVuZGVyZXIpO3IuaW5pdFJlbmRlcmVyKGQpO3ZhciBwPW8oZnVuY3Rpb24oZyx5LHYpe3Iubm90aWZpY2F0aW9ucyghMSk7dmFyIHg9ci5tdXRhYmxlRWxlbWVudHMoKTt4Lmxlbmd0aD4wJiZ4LnJlbW92ZSgpLGchPW51bGwmJihVcihnKXx8RW4oZykpJiZyLmFkZChnKSxyLm9uZSgibGF5b3V0cmVhZHkiLGZ1bmN0aW9uKHcpe3Iubm90aWZpY2F0aW9ucyghMCksci5lbWl0KHcpLHIub25lKCJsb2FkIix5KSxyLmVtaXRBbmROb3RpZnkoImxvYWQiKX0pLm9uZSgibGF5b3V0c3RvcCIsZnVuY3Rpb24oKXtyLm9uZSgiZG9uZSIsdiksci5lbWl0KCJkb25lIil9KTt2YXIgYj1ycih7fSxyLl9wcml2YXRlLm9wdGlvbnMubGF5b3V0KTtiLmVsZXM9ci5lbGVtZW50cygpLHIubGF5b3V0KGIpLnJ1bigpfSwic2V0RWxlc0FuZExheW91dCIpO2YoW2wuc3R5bGUsbC5lbGVtZW50c10sZnVuY3Rpb24obSl7dmFyIGc9bVswXSx5PW1bMV07aC5zdHlsZUVuYWJsZWQmJnIuc3R5bGUoKS5hcHBlbmQoZykscCh5LGZ1bmN0aW9uKCl7ci5zdGFydEFuaW1hdGlvbkxvb3AoKSxoLnJlYWR5PSEwLHNpKGwucmVhZHkpJiZyLm9uKCJyZWFkeSIsbC5yZWFkeSk7Zm9yKHZhciB2PTA7djxhLmxlbmd0aDt2Kyspe3ZhciB4PWFbdl07ci5vbigicmVhZHkiLHgpfWkmJihpLnJlYWRpZXM9W10pLHIuZW1pdCgicmVhZHkiKX0sbC5kb25lKX0pfSwiQ29yZSIpLFNTPUpiLnByb3RvdHlwZTtycihTUyx7aW5zdGFuY2VTdHJpbmc6byhmdW5jdGlvbigpe3JldHVybiJjb3JlIn0sImluc3RhbmNlU3RyaW5nIiksaXNSZWFkeTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUucmVhZHl9LCJpc1JlYWR5IiksZGVzdHJveWVkOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5kZXN0cm95ZWR9LCJkZXN0cm95ZWQiKSxyZWFkeTpvKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmlzUmVhZHkoKT90aGlzLmVtaXR0ZXIoKS5lbWl0KCJyZWFkeSIsW10sZSk6dGhpcy5vbigicmVhZHkiLGUpLHRoaXN9LCJyZWFkeSIpLGRlc3Ryb3k6byhmdW5jdGlvbigpe3ZhciBlPXRoaXM7aWYoIWUuZGVzdHJveWVkKCkpcmV0dXJuIGUuc3RvcEFuaW1hdGlvbkxvb3AoKSxlLmRlc3Ryb3lSZW5kZXJlcigpLHRoaXMuZW1pdCgiZGVzdHJveSIpLGUuX3ByaXZhdGUuZGVzdHJveWVkPSEwLGV9LCJkZXN0cm95IiksaGFzRWxlbWVudFdpdGhJZDpvKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wcml2YXRlLmVsZW1lbnRzLmhhc0VsZW1lbnRXaXRoSWQoZSl9LCJoYXNFbGVtZW50V2l0aElkIiksZ2V0RWxlbWVudEJ5SWQ6byhmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbGVtZW50cy5nZXRFbGVtZW50QnlJZChlKX0sImdldEVsZW1lbnRCeUlkIiksaGFzQ29tcG91bmROb2RlczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuaGFzQ29tcG91bmROb2Rlc30sImhhc0NvbXBvdW5kTm9kZXMiKSxoZWFkbGVzczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUucmVuZGVyZXIuaXNIZWFkbGVzcygpfSwiaGVhZGxlc3MiKSxzdHlsZUVuYWJsZWQ6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLnN0eWxlRW5hYmxlZH0sInN0eWxlRW5hYmxlZCIpLGFkZFRvUG9vbDpvKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wcml2YXRlLmVsZW1lbnRzLm1lcmdlKGUpLHRoaXN9LCJhZGRUb1Bvb2wiKSxyZW1vdmVGcm9tUG9vbDpvKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wcml2YXRlLmVsZW1lbnRzLnVubWVyZ2UoZSksdGhpc30sInJlbW92ZUZyb21Qb29sIiksY29udGFpbmVyOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5jb250YWluZXJ8fG51bGx9LCJjb250YWluZXIiKSx3aW5kb3c6byhmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3ByaXZhdGUuY29udGFpbmVyO2lmKGU9PW51bGwpcmV0dXJuIFVpO3ZhciByPXRoaXMuX3ByaXZhdGUuY29udGFpbmVyLm93bmVyRG9jdW1lbnQ7cmV0dXJuIHI9PT12b2lkIDB8fHI9PW51bGw/VWk6ci5kZWZhdWx0Vmlld3x8VWl9LCJ3aW5kb3ciKSxtb3VudDpvKGZ1bmN0aW9uKGUpe2lmKGUhPW51bGwpe3ZhciByPXRoaXMsbj1yLl9wcml2YXRlLGk9bi5vcHRpb25zO3JldHVybiF2UyhlKSYmdlMoZVswXSkmJihlPWVbMF0pLHIuc3RvcEFuaW1hdGlvbkxvb3AoKSxyLmRlc3Ryb3lSZW5kZXJlcigpLG4uY29udGFpbmVyPWUsbi5zdHlsZUVuYWJsZWQ9ITAsci5pbnZhbGlkYXRlU2l6ZSgpLHIuaW5pdFJlbmRlcmVyKHJyKHt9LGksaS5yZW5kZXJlcix7bmFtZTppLnJlbmRlcmVyLm5hbWU9PT0ibnVsbCI/ImNhbnZhcyI6aS5yZW5kZXJlci5uYW1lfSkpLHIuc3RhcnRBbmltYXRpb25Mb29wKCksci5zdHlsZShpLnN0eWxlKSxyLmVtaXQoIm1vdW50Iikscn19LCJtb3VudCIpLHVubW91bnQ6byhmdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIGUuc3RvcEFuaW1hdGlvbkxvb3AoKSxlLmRlc3Ryb3lSZW5kZXJlcigpLGUuaW5pdFJlbmRlcmVyKHtuYW1lOiJudWxsIn0pLGUuZW1pdCgidW5tb3VudCIpLGV9LCJ1bm1vdW50Iiksb3B0aW9uczpvKGZ1bmN0aW9uKCl7cmV0dXJuIFljKHRoaXMuX3ByaXZhdGUub3B0aW9ucyl9LCJvcHRpb25zIiksanNvbjpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMsbj1yLl9wcml2YXRlLGk9ci5tdXRhYmxlRWxlbWVudHMoKSxhPW8oZnVuY3Rpb24oQyl7cmV0dXJuIHIuZ2V0RWxlbWVudEJ5SWQoQy5pZCgpKX0sImdldEZyZXNoUmVmIik7aWYoVXIoZSkpe2lmKHIuc3RhcnRCYXRjaCgpLGUuZWxlbWVudHMpe3ZhciBzPXt9LGw9byhmdW5jdGlvbihDLFQpe2Zvcih2YXIgRT1bXSxBPVtdLFM9MDtTPEMubGVuZ3RoO1MrKyl7dmFyIF89Q1tTXTtpZighXy5kYXRhLmlkKXt1bigiY3kuanNvbigpIGNhbm5vdCBoYW5kbGUgZWxlbWVudHMgd2l0aG91dCBhbiBJRCBhdHRyaWJ1dGUiKTtjb250aW51ZX12YXIgST0iIitfLmRhdGEuaWQsRD1yLmdldEVsZW1lbnRCeUlkKEkpO3NbSV09ITAsRC5sZW5ndGghPT0wP0EucHVzaCh7ZWxlOkQsanNvbjpffSk6KFQmJihfLmdyb3VwPVQpLEUucHVzaChfKSl9ci5hZGQoRSk7Zm9yKHZhciBrPTA7azxBLmxlbmd0aDtrKyspe3ZhciBMPUFba10sUj1MLmVsZSxPPUwuanNvbjtSLmpzb24oTyl9fSwidXBkYXRlRWxlcyIpO2lmKEVuKGUuZWxlbWVudHMpKWwoZS5lbGVtZW50cyk7ZWxzZSBmb3IodmFyIHU9WyJub2RlcyIsImVkZ2VzIl0saD0wO2g8dS5sZW5ndGg7aCsrKXt2YXIgZj11W2hdLGQ9ZS5lbGVtZW50c1tmXTtFbihkKSYmbChkLGYpfXZhciBwPXIuY29sbGVjdGlvbigpO2kuZmlsdGVyKGZ1bmN0aW9uKHcpe3JldHVybiFzW3cuaWQoKV19KS5mb3JFYWNoKGZ1bmN0aW9uKHcpe3cuaXNQYXJlbnQoKT9wLm1lcmdlKHcpOncucmVtb3ZlKCl9KSxwLmZvckVhY2goZnVuY3Rpb24odyl7cmV0dXJuIHcuY2hpbGRyZW4oKS5tb3ZlKHtwYXJlbnQ6bnVsbH0pfSkscC5mb3JFYWNoKGZ1bmN0aW9uKHcpe3JldHVybiBhKHcpLnJlbW92ZSgpfSl9ZS5zdHlsZSYmci5zdHlsZShlLnN0eWxlKSxlLnpvb20hPW51bGwmJmUuem9vbSE9PW4uem9vbSYmci56b29tKGUuem9vbSksZS5wYW4mJihlLnBhbi54IT09bi5wYW4ueHx8ZS5wYW4ueSE9PW4ucGFuLnkpJiZyLnBhbihlLnBhbiksZS5kYXRhJiZyLmRhdGEoZS5kYXRhKTtmb3IodmFyIG09WyJtaW5ab29tIiwibWF4Wm9vbSIsInpvb21pbmdFbmFibGVkIiwidXNlclpvb21pbmdFbmFibGVkIiwicGFubmluZ0VuYWJsZWQiLCJ1c2VyUGFubmluZ0VuYWJsZWQiLCJib3hTZWxlY3Rpb25FbmFibGVkIiwiYXV0b2xvY2siLCJhdXRvdW5ncmFiaWZ5IiwiYXV0b3Vuc2VsZWN0aWZ5IiwibXVsdGlDbGlja0RlYm91bmNlVGltZSJdLGc9MDtnPG0ubGVuZ3RoO2crKyl7dmFyIHk9bVtnXTtlW3ldIT1udWxsJiZyW3ldKGVbeV0pfXJldHVybiByLmVuZEJhdGNoKCksdGhpc31lbHNle3ZhciB2PSEhZSx4PXt9O3Y/eC5lbGVtZW50cz10aGlzLmVsZW1lbnRzKCkubWFwKGZ1bmN0aW9uKHcpe3JldHVybiB3Lmpzb24oKX0pOih4LmVsZW1lbnRzPXt9LGkuZm9yRWFjaChmdW5jdGlvbih3KXt2YXIgQz13Lmdyb3VwKCk7eC5lbGVtZW50c1tDXXx8KHguZWxlbWVudHNbQ109W10pLHguZWxlbWVudHNbQ10ucHVzaCh3Lmpzb24oKSl9KSksdGhpcy5fcHJpdmF0ZS5zdHlsZUVuYWJsZWQmJih4LnN0eWxlPXIuc3R5bGUoKS5qc29uKCkpLHguZGF0YT1ZYyhyLmRhdGEoKSk7dmFyIGI9bi5vcHRpb25zO3JldHVybiB4Lnpvb21pbmdFbmFibGVkPW4uem9vbWluZ0VuYWJsZWQseC51c2VyWm9vbWluZ0VuYWJsZWQ9bi51c2VyWm9vbWluZ0VuYWJsZWQseC56b29tPW4uem9vbSx4Lm1pblpvb209bi5taW5ab29tLHgubWF4Wm9vbT1uLm1heFpvb20seC5wYW5uaW5nRW5hYmxlZD1uLnBhbm5pbmdFbmFibGVkLHgudXNlclBhbm5pbmdFbmFibGVkPW4udXNlclBhbm5pbmdFbmFibGVkLHgucGFuPVljKG4ucGFuKSx4LmJveFNlbGVjdGlvbkVuYWJsZWQ9bi5ib3hTZWxlY3Rpb25FbmFibGVkLHgucmVuZGVyZXI9WWMoYi5yZW5kZXJlcikseC5oaWRlRWRnZXNPblZpZXdwb3J0PWIuaGlkZUVkZ2VzT25WaWV3cG9ydCx4LnRleHR1cmVPblZpZXdwb3J0PWIudGV4dHVyZU9uVmlld3BvcnQseC53aGVlbFNlbnNpdGl2aXR5PWIud2hlZWxTZW5zaXRpdml0eSx4Lm1vdGlvbkJsdXI9Yi5tb3Rpb25CbHVyLHgubXVsdGlDbGlja0RlYm91bmNlVGltZT1iLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUseH19LCJqc29uIil9KTtTUy4kaWQ9U1MuZ2V0RWxlbWVudEJ5SWQ7W1ZLZSxZS2UsZWdlLFZQLHBTLGpLZSxVUCxtUyxaS2UsSHAsWmJdLmZvckVhY2goZnVuY3Rpb24odCl7cnIoU1MsdCl9KTtlUWU9e2ZpdDohMCxkaXJlY3RlZDohMSxwYWRkaW5nOjMwLGNpcmNsZTohMSxncmlkOiExLHNwYWNpbmdGYWN0b3I6MS43NSxib3VuZGluZ0JveDp2b2lkIDAsYXZvaWRPdmVybGFwOiEwLG5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczohMSxyb290czp2b2lkIDAsZGVwdGhTb3J0OnZvaWQgMCxhbmltYXRlOiExLGFuaW1hdGlvbkR1cmF0aW9uOjUwMCxhbmltYXRpb25FYXNpbmc6dm9pZCAwLGFuaW1hdGVGaWx0ZXI6byhmdW5jdGlvbihlLHIpe3JldHVybiEwfSwiYW5pbWF0ZUZpbHRlciIpLHJlYWR5OnZvaWQgMCxzdG9wOnZvaWQgMCx0cmFuc2Zvcm06byhmdW5jdGlvbihlLHIpe3JldHVybiByfSwidHJhbnNmb3JtIil9LHRRZT17bWF4aW1hbDohMSxhY3ljbGljOiExfSx6MT1vKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNjcmF0Y2goImJyZWFkdGhmaXJzdCIpfSwiZ2V0SW5mbyIpLFQwZT1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIGUuc2NyYXRjaCgiYnJlYWR0aGZpcnN0IixyKX0sInNldEluZm8iKTtvKHRnZSwiQnJlYWR0aEZpcnN0TGF5b3V0Iik7dGdlLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMsZT10LmN5LHI9dC5lbGVzLG49ci5ub2RlcygpLmZpbHRlcihmdW5jdGlvbihhZSl7cmV0dXJuIGFlLmlzQ2hpbGRsZXNzKCl9KSxpPXIsYT10LmRpcmVjdGVkLHM9dC5hY3ljbGljfHx0Lm1heGltYWx8fHQubWF4aW1hbEFkanVzdG1lbnRzPjAsbD0hIXQuYm91bmRpbmdCb3gsdT1lLmV4dGVudCgpLGg9SHMobD90LmJvdW5kaW5nQm94Ont4MTp1LngxLHkxOnUueTEsdzp1LncsaDp1Lmh9KSxmO2lmKGdvKHQucm9vdHMpKWY9dC5yb290cztlbHNlIGlmKEVuKHQucm9vdHMpKXtmb3IodmFyIGQ9W10scD0wO3A8dC5yb290cy5sZW5ndGg7cCsrKXt2YXIgbT10LnJvb3RzW3BdLGc9ZS5nZXRFbGVtZW50QnlJZChtKTtkLnB1c2goZyl9Zj1lLmNvbGxlY3Rpb24oZCl9ZWxzZSBpZihadCh0LnJvb3RzKSlmPWUuJCh0LnJvb3RzKTtlbHNlIGlmKGEpZj1uLnJvb3RzKCk7ZWxzZXt2YXIgeT1yLmNvbXBvbmVudHMoKTtmPWUuY29sbGVjdGlvbigpO2Zvcih2YXIgdj1vKGZ1bmN0aW9uKE9lKXt2YXIgZ2U9eVtPZV0semU9Z2UubWF4RGVncmVlKCExKSxIZT1nZS5maWx0ZXIoZnVuY3Rpb24oJGUpe3JldHVybiAkZS5kZWdyZWUoITEpPT09emV9KTtmPWYuYWRkKEhlKX0sIl9sb29wIikseD0wO3g8eS5sZW5ndGg7eCsrKXYoeCl9dmFyIGI9W10sdz17fSxDPW8oZnVuY3Rpb24oT2UsZ2Upe2JbZ2VdPT1udWxsJiYoYltnZV09W10pO3ZhciB6ZT1iW2dlXS5sZW5ndGg7YltnZV0ucHVzaChPZSksVDBlKE9lLHtpbmRleDp6ZSxkZXB0aDpnZX0pfSwiYWRkVG9EZXB0aCIpLFQ9byhmdW5jdGlvbihPZSxnZSl7dmFyIHplPXoxKE9lKSxIZT16ZS5kZXB0aCwkZT16ZS5pbmRleDtiW0hlXVskZV09bnVsbCxPZS5pc0NoaWxkbGVzcygpJiZDKE9lLGdlKX0sImNoYW5nZURlcHRoIik7aS5iZnMoe3Jvb3RzOmYsZGlyZWN0ZWQ6dC5kaXJlY3RlZCx2aXNpdDpvKGZ1bmN0aW9uKE9lLGdlLHplLEhlLCRlKXt2YXIgUmU9T2VbMF0sSWU9UmUuaWQoKTtSZS5pc0NoaWxkbGVzcygpJiZDKFJlLCRlKSx3W0llXT0hMH0sInZpc2l0Iil9KTtmb3IodmFyIEU9W10sQT0wO0E8bi5sZW5ndGg7QSsrKXt2YXIgUz1uW0FdO3dbUy5pZCgpXXx8RS5wdXNoKFMpfXZhciBfPW8oZnVuY3Rpb24oT2Upe2Zvcih2YXIgZ2U9YltPZV0semU9MDt6ZTxnZS5sZW5ndGg7emUrKyl7dmFyIEhlPWdlW3plXTtpZihIZT09bnVsbCl7Z2Uuc3BsaWNlKHplLDEpLHplLS07Y29udGludWV9VDBlKEhlLHtkZXB0aDpPZSxpbmRleDp6ZX0pfX0sImFzc2lnbkRlcHRoc0F0IiksST1vKGZ1bmN0aW9uKE9lLGdlKXtmb3IodmFyIHplPXoxKE9lKSxIZT1PZS5pbmNvbWVycygpLmZpbHRlcihmdW5jdGlvbihyZSl7cmV0dXJuIHJlLmlzTm9kZSgpJiZyLmhhcyhyZSl9KSwkZT0tMSxSZT1PZS5pZCgpLEllPTA7SWU8SGUubGVuZ3RoO0llKyspe3ZhciBiZT1IZVtJZV0sVz16MShiZSk7JGU9TWF0aC5tYXgoJGUsVy5kZXB0aCl9aWYoemUuZGVwdGg8PSRlKXtpZighdC5hY3ljbGljJiZnZVtSZV0pcmV0dXJuIG51bGw7dmFyIGRlPSRlKzE7cmV0dXJuIFQoT2UsZGUpLGdlW1JlXT1kZSwhMH1yZXR1cm4hMX0sImFkanVzdE1heGltYWxseSIpO2lmKGEmJnMpe3ZhciBEPVtdLGs9e30sTD1vKGZ1bmN0aW9uKE9lKXtyZXR1cm4gRC5wdXNoKE9lKX0sImVucXVldWUiKSxSPW8oZnVuY3Rpb24oKXtyZXR1cm4gRC5zaGlmdCgpfSwiZGVxdWV1ZSIpO2ZvcihuLmZvckVhY2goZnVuY3Rpb24oYWUpe3JldHVybiBELnB1c2goYWUpfSk7RC5sZW5ndGg+MDspe3ZhciBPPVIoKSxNPUkoTyxrKTtpZihNKU8ub3V0Z29lcnMoKS5maWx0ZXIoZnVuY3Rpb24oYWUpe3JldHVybiBhZS5pc05vZGUoKSYmci5oYXMoYWUpfSkuZm9yRWFjaChMKTtlbHNlIGlmKE09PT1udWxsKXt1bigiRGV0ZWN0ZWQgZG91YmxlIG1heGltYWwgc2hpZnQgZm9yIG5vZGUgYCIrTy5pZCgpKyJgLiAgQmFpbGluZyBtYXhpbWFsIGFkanVzdG1lbnQgZHVlIHRvIGN5Y2xlLiAgVXNlIGBvcHRpb25zLm1heGltYWw6IHRydWVgIG9ubHkgb24gREFHcy4iKTticmVha319fXZhciBCPTA7aWYodC5hdm9pZE92ZXJsYXApZm9yKHZhciBGPTA7RjxuLmxlbmd0aDtGKyspe3ZhciBQPW5bRl0sej1QLmxheW91dERpbWVuc2lvbnModCksJD16LncsSD16Lmg7Qj1NYXRoLm1heChCLCQsSCl9dmFyIFE9e30saj1vKGZ1bmN0aW9uKE9lKXtpZihRW09lLmlkKCldKXJldHVybiBRW09lLmlkKCldO2Zvcih2YXIgZ2U9ejEoT2UpLmRlcHRoLHplPU9lLm5laWdoYm9yaG9vZCgpLEhlPTAsJGU9MCxSZT0wO1JlPHplLmxlbmd0aDtSZSsrKXt2YXIgSWU9emVbUmVdO2lmKCEoSWUuaXNFZGdlKCl8fEllLmlzUGFyZW50KCl8fCFuLmhhcyhJZSkpKXt2YXIgYmU9ejEoSWUpO2lmKGJlIT1udWxsKXt2YXIgVz1iZS5pbmRleCxkZT1iZS5kZXB0aDtpZighKFc9PW51bGx8fGRlPT1udWxsKSl7dmFyIHJlPWJbZGVdLmxlbmd0aDtkZTxnZSYmKEhlKz1XL3JlLCRlKyspfX19fXJldHVybiAkZT1NYXRoLm1heCgxLCRlKSxIZT1IZS8kZSwkZT09PTAmJihIZT0wKSxRW09lLmlkKCldPUhlLEhlfSwiZ2V0V2VpZ2h0ZWRQZXJjZW50IiksaWU9byhmdW5jdGlvbihPZSxnZSl7dmFyIHplPWooT2UpLEhlPWooZ2UpLCRlPXplLUhlO3JldHVybiAkZT09PTA/ZW1lKE9lLmlkKCksZ2UuaWQoKSk6JGV9LCJzb3J0Rm4iKTt0LmRlcHRoU29ydCE9PXZvaWQgMCYmKGllPXQuZGVwdGhTb3J0KTtmb3IodmFyIG5lPWIubGVuZ3RoLGxlPTA7bGU8bmU7bGUrKyliW2xlXS5zb3J0KGllKSxfKGxlKTtmb3IodmFyIGhlPVtdLEs9MDtLPEUubGVuZ3RoO0srKyloZS5wdXNoKEVbS10pO3ZhciBYPW8oZnVuY3Rpb24oKXtmb3IodmFyIE9lPTA7T2U8bmU7T2UrKylfKE9lKX0sImFzc2lnbkRlcHRocyIpO2hlLmxlbmd0aCYmKGIudW5zaGlmdChoZSksbmU9Yi5sZW5ndGgsWCgpKTtmb3IodmFyIHRlPTAsSj0wO0o8bmU7SisrKXRlPU1hdGgubWF4KGJbSl0ubGVuZ3RoLHRlKTt2YXIgc2U9e3g6aC54MStoLncvMix5OmgueTEraC5oLzJ9LHVlPW4ucmVkdWNlKGZ1bmN0aW9uKGFlLE9lKXtyZXR1cm4gZnVuY3Rpb24oZ2Upe3JldHVybnt3OmFlLnc9PT0tMT9nZS53OihhZS53K2dlLncpLzIsaDphZS5oPT09LTE/Z2UuaDooYWUuaCtnZS5oKS8yfX0oT2UuYm91bmRpbmdCb3goe2luY2x1ZGVMYWJlbHM6dC5ub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHN9KSl9LHt3Oi0xLGg6LTF9KSxaPU1hdGgubWF4KG5lPT09MT8wOmw/KGguaC10LnBhZGRpbmcqMi11ZS5oKS8obmUtMSk6KGguaC10LnBhZGRpbmcqMi11ZS5oKS8obmUrMSksQiksU2U9Yi5yZWR1Y2UoZnVuY3Rpb24oYWUsT2Upe3JldHVybiBNYXRoLm1heChhZSxPZS5sZW5ndGgpfSwwKSxjZT1vKGZ1bmN0aW9uKE9lKXt2YXIgZ2U9ejEoT2UpLHplPWdlLmRlcHRoLEhlPWdlLmluZGV4O2lmKHQuY2lyY2xlKXt2YXIgJGU9TWF0aC5taW4oaC53LzIvbmUsaC5oLzIvbmUpOyRlPU1hdGgubWF4KCRlLEIpO3ZhciBSZT0kZSp6ZSskZS0obmU+MCYmYlswXS5sZW5ndGg8PTM/JGUvMjowKSxJZT0yKk1hdGguUEkvYlt6ZV0ubGVuZ3RoKkhlO3JldHVybiB6ZT09PTAmJmJbMF0ubGVuZ3RoPT09MSYmKFJlPTEpLHt4OnNlLngrUmUqTWF0aC5jb3MoSWUpLHk6c2UueStSZSpNYXRoLnNpbihJZSl9fWVsc2V7dmFyIGJlPWJbemVdLmxlbmd0aCxXPU1hdGgubWF4KGJlPT09MT8wOmw/KGgudy10LnBhZGRpbmcqMi11ZS53KS8oKHQuZ3JpZD9TZTpiZSktMSk6KGgudy10LnBhZGRpbmcqMi11ZS53KS8oKHQuZ3JpZD9TZTpiZSkrMSksQiksZGU9e3g6c2UueCsoSGUrMS0oYmUrMSkvMikqVyx5OnNlLnkrKHplKzEtKG5lKzEpLzIpKlp9O3JldHVybiBkZX19LCJnZXRQb3NpdGlvbiIpO3JldHVybiByLm5vZGVzKCkubGF5b3V0UG9zaXRpb25zKHRoaXMsdCxjZSksdGhpc307clFlPXtmaXQ6ITAscGFkZGluZzozMCxib3VuZGluZ0JveDp2b2lkIDAsYXZvaWRPdmVybGFwOiEwLG5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczohMSxzcGFjaW5nRmFjdG9yOnZvaWQgMCxyYWRpdXM6dm9pZCAwLHN0YXJ0QW5nbGU6My8yKk1hdGguUEksc3dlZXA6dm9pZCAwLGNsb2Nrd2lzZTohMCxzb3J0OnZvaWQgMCxhbmltYXRlOiExLGFuaW1hdGlvbkR1cmF0aW9uOjUwMCxhbmltYXRpb25FYXNpbmc6dm9pZCAwLGFuaW1hdGVGaWx0ZXI6byhmdW5jdGlvbihlLHIpe3JldHVybiEwfSwiYW5pbWF0ZUZpbHRlciIpLHJlYWR5OnZvaWQgMCxzdG9wOnZvaWQgMCx0cmFuc2Zvcm06byhmdW5jdGlvbihlLHIpe3JldHVybiByfSwidHJhbnNmb3JtIil9O28ocmdlLCJDaXJjbGVMYXlvdXQiKTtyZ2UucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucyxlPXQscj10LmN5LG49ZS5lbGVzLGk9ZS5jb3VudGVyY2xvY2t3aXNlIT09dm9pZCAwPyFlLmNvdW50ZXJjbG9ja3dpc2U6ZS5jbG9ja3dpc2UsYT1uLm5vZGVzKCkubm90KCI6cGFyZW50Iik7ZS5zb3J0JiYoYT1hLnNvcnQoZS5zb3J0KSk7Zm9yKHZhciBzPUhzKGUuYm91bmRpbmdCb3g/ZS5ib3VuZGluZ0JveDp7eDE6MCx5MTowLHc6ci53aWR0aCgpLGg6ci5oZWlnaHQoKX0pLGw9e3g6cy54MStzLncvMix5OnMueTErcy5oLzJ9LHU9ZS5zd2VlcD09PXZvaWQgMD8yKk1hdGguUEktMipNYXRoLlBJL2EubGVuZ3RoOmUuc3dlZXAsaD11L01hdGgubWF4KDEsYS5sZW5ndGgtMSksZixkPTAscD0wO3A8YS5sZW5ndGg7cCsrKXt2YXIgbT1hW3BdLGc9bS5sYXlvdXREaW1lbnNpb25zKGUpLHk9Zy53LHY9Zy5oO2Q9TWF0aC5tYXgoZCx5LHYpfWlmKEN0KGUucmFkaXVzKT9mPWUucmFkaXVzOmEubGVuZ3RoPD0xP2Y9MDpmPU1hdGgubWluKHMuaCxzLncpLzItZCxhLmxlbmd0aD4xJiZlLmF2b2lkT3ZlcmxhcCl7ZCo9MS43NTt2YXIgeD1NYXRoLmNvcyhoKS1NYXRoLmNvcygwKSxiPU1hdGguc2luKGgpLU1hdGguc2luKDApLHc9TWF0aC5zcXJ0KGQqZC8oeCp4K2IqYikpO2Y9TWF0aC5tYXgodyxmKX12YXIgQz1vKGZ1bmN0aW9uKEUsQSl7dmFyIFM9ZS5zdGFydEFuZ2xlK0EqaCooaT8xOi0xKSxfPWYqTWF0aC5jb3MoUyksST1mKk1hdGguc2luKFMpLEQ9e3g6bC54K18seTpsLnkrSX07cmV0dXJuIER9LCJnZXRQb3MiKTtyZXR1cm4gbi5ub2RlcygpLmxheW91dFBvc2l0aW9ucyh0aGlzLGUsQyksdGhpc307blFlPXtmaXQ6ITAscGFkZGluZzozMCxzdGFydEFuZ2xlOjMvMipNYXRoLlBJLHN3ZWVwOnZvaWQgMCxjbG9ja3dpc2U6ITAsZXF1aWRpc3RhbnQ6ITEsbWluTm9kZVNwYWNpbmc6MTAsYm91bmRpbmdCb3g6dm9pZCAwLGF2b2lkT3ZlcmxhcDohMCxub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6ITEsaGVpZ2h0OnZvaWQgMCx3aWR0aDp2b2lkIDAsc3BhY2luZ0ZhY3Rvcjp2b2lkIDAsY29uY2VudHJpYzpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRlZ3JlZSgpfSwiY29uY2VudHJpYyIpLGxldmVsV2lkdGg6byhmdW5jdGlvbihlKXtyZXR1cm4gZS5tYXhEZWdyZWUoKS80fSwibGV2ZWxXaWR0aCIpLGFuaW1hdGU6ITEsYW5pbWF0aW9uRHVyYXRpb246NTAwLGFuaW1hdGlvbkVhc2luZzp2b2lkIDAsYW5pbWF0ZUZpbHRlcjpvKGZ1bmN0aW9uKGUscil7cmV0dXJuITB9LCJhbmltYXRlRmlsdGVyIikscmVhZHk6dm9pZCAwLHN0b3A6dm9pZCAwLHRyYW5zZm9ybTpvKGZ1bmN0aW9uKGUscil7cmV0dXJuIHJ9LCJ0cmFuc2Zvcm0iKX07byhuZ2UsIkNvbmNlbnRyaWNMYXlvdXQiKTtuZ2UucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLm9wdGlvbnMsZT10LHI9ZS5jb3VudGVyY2xvY2t3aXNlIT09dm9pZCAwPyFlLmNvdW50ZXJjbG9ja3dpc2U6ZS5jbG9ja3dpc2Usbj10LmN5LGk9ZS5lbGVzLGE9aS5ub2RlcygpLm5vdCgiOnBhcmVudCIpLHM9SHMoZS5ib3VuZGluZ0JveD9lLmJvdW5kaW5nQm94Ont4MTowLHkxOjAsdzpuLndpZHRoKCksaDpuLmhlaWdodCgpfSksbD17eDpzLngxK3Mudy8yLHk6cy55MStzLmgvMn0sdT1bXSxoPTAsZj0wO2Y8YS5sZW5ndGg7ZisrKXt2YXIgZD1hW2ZdLHA9dm9pZCAwO3A9ZS5jb25jZW50cmljKGQpLHUucHVzaCh7dmFsdWU6cCxub2RlOmR9KSxkLl9wcml2YXRlLnNjcmF0Y2guY29uY2VudHJpYz1wfWEudXBkYXRlU3R5bGUoKTtmb3IodmFyIG09MDttPGEubGVuZ3RoO20rKyl7dmFyIGc9YVttXSx5PWcubGF5b3V0RGltZW5zaW9ucyhlKTtoPU1hdGgubWF4KGgseS53LHkuaCl9dS5zb3J0KGZ1bmN0aW9uKHVlLFope3JldHVybiBaLnZhbHVlLXVlLnZhbHVlfSk7Zm9yKHZhciB2PWUubGV2ZWxXaWR0aChhKSx4PVtbXV0sYj14WzBdLHc9MDt3PHUubGVuZ3RoO3crKyl7dmFyIEM9dVt3XTtpZihiLmxlbmd0aD4wKXt2YXIgVD1NYXRoLmFicyhiWzBdLnZhbHVlLUMudmFsdWUpO1Q+PXYmJihiPVtdLHgucHVzaChiKSl9Yi5wdXNoKEMpfXZhciBFPWgrZS5taW5Ob2RlU3BhY2luZztpZighZS5hdm9pZE92ZXJsYXApe3ZhciBBPXgubGVuZ3RoPjAmJnhbMF0ubGVuZ3RoPjEsUz1NYXRoLm1pbihzLncscy5oKS8yLUUsXz1TLyh4Lmxlbmd0aCtBPzE6MCk7RT1NYXRoLm1pbihFLF8pfWZvcih2YXIgST0wLEQ9MDtEPHgubGVuZ3RoO0QrKyl7dmFyIGs9eFtEXSxMPWUuc3dlZXA9PT12b2lkIDA/MipNYXRoLlBJLTIqTWF0aC5QSS9rLmxlbmd0aDplLnN3ZWVwLFI9ay5kVGhldGE9TC9NYXRoLm1heCgxLGsubGVuZ3RoLTEpO2lmKGsubGVuZ3RoPjEmJmUuYXZvaWRPdmVybGFwKXt2YXIgTz1NYXRoLmNvcyhSKS1NYXRoLmNvcygwKSxNPU1hdGguc2luKFIpLU1hdGguc2luKDApLEI9TWF0aC5zcXJ0KEUqRS8oTypPK00qTSkpO0k9TWF0aC5tYXgoQixJKX1rLnI9SSxJKz1FfWlmKGUuZXF1aWRpc3RhbnQpe2Zvcih2YXIgRj0wLFA9MCx6PTA7ejx4Lmxlbmd0aDt6Kyspe3ZhciAkPXhbel0sSD0kLnItUDtGPU1hdGgubWF4KEYsSCl9UD0wO2Zvcih2YXIgUT0wO1E8eC5sZW5ndGg7USsrKXt2YXIgaj14W1FdO1E9PT0wJiYoUD1qLnIpLGoucj1QLFArPUZ9fWZvcih2YXIgaWU9e30sbmU9MDtuZTx4Lmxlbmd0aDtuZSsrKWZvcih2YXIgbGU9eFtuZV0saGU9bGUuZFRoZXRhLEs9bGUucixYPTA7WDxsZS5sZW5ndGg7WCsrKXt2YXIgdGU9bGVbWF0sSj1lLnN0YXJ0QW5nbGUrKHI/MTotMSkqaGUqWCxzZT17eDpsLngrSypNYXRoLmNvcyhKKSx5OmwueStLKk1hdGguc2luKEopfTtpZVt0ZS5ub2RlLmlkKCldPXNlfXJldHVybiBpLm5vZGVzKCkubGF5b3V0UG9zaXRpb25zKHRoaXMsZSxmdW5jdGlvbih1ZSl7dmFyIFo9dWUuaWQoKTtyZXR1cm4gaWVbWl19KSx0aGlzfTtpUWU9e3JlYWR5Om8oZnVuY3Rpb24oKXt9LCJyZWFkeSIpLHN0b3A6byhmdW5jdGlvbigpe30sInN0b3AiKSxhbmltYXRlOiEwLGFuaW1hdGlvbkVhc2luZzp2b2lkIDAsYW5pbWF0aW9uRHVyYXRpb246dm9pZCAwLGFuaW1hdGVGaWx0ZXI6byhmdW5jdGlvbihlLHIpe3JldHVybiEwfSwiYW5pbWF0ZUZpbHRlciIpLGFuaW1hdGlvblRocmVzaG9sZDoyNTAscmVmcmVzaDoyMCxmaXQ6ITAscGFkZGluZzozMCxib3VuZGluZ0JveDp2b2lkIDAsbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiExLHJhbmRvbWl6ZTohMSxjb21wb25lbnRTcGFjaW5nOjQwLG5vZGVSZXB1bHNpb246byhmdW5jdGlvbihlKXtyZXR1cm4gMjA0OH0sIm5vZGVSZXB1bHNpb24iKSxub2RlT3ZlcmxhcDo0LGlkZWFsRWRnZUxlbmd0aDpvKGZ1bmN0aW9uKGUpe3JldHVybiAzMn0sImlkZWFsRWRnZUxlbmd0aCIpLGVkZ2VFbGFzdGljaXR5Om8oZnVuY3Rpb24oZSl7cmV0dXJuIDMyfSwiZWRnZUVsYXN0aWNpdHkiKSxuZXN0aW5nRmFjdG9yOjEuMixncmF2aXR5OjEsbnVtSXRlcjoxZTMsaW5pdGlhbFRlbXA6MWUzLGNvb2xpbmdGYWN0b3I6Ljk5LG1pblRlbXA6MX07byhIUywiQ29zZUxheW91dCIpO0hTLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMsZT10LmN5LHI9dGhpcztyLnN0b3BwZWQ9ITEsKHQuYW5pbWF0ZT09PSEwfHx0LmFuaW1hdGU9PT0hMSkmJnIuZW1pdCh7dHlwZToibGF5b3V0c3RhcnQiLGxheW91dDpyfSksdC5kZWJ1Zz09PSEwP19QPSEwOl9QPSExO3ZhciBuPWFRZShlLHIsdCk7X1AmJmxRZShuKSx0LnJhbmRvbWl6ZSYmY1FlKG4pO3ZhciBpPVF1KCksYT1vKGZ1bmN0aW9uKCl7dVFlKG4sZSx0KSx0LmZpdD09PSEwJiZlLmZpdCh0LnBhZGRpbmcpfSwicmVmcmVzaCIpLHM9byhmdW5jdGlvbihwKXtyZXR1cm4hKHIuc3RvcHBlZHx8cD49dC5udW1JdGVyfHwoaFFlKG4sdCksbi50ZW1wZXJhdHVyZT1uLnRlbXBlcmF0dXJlKnQuY29vbGluZ0ZhY3RvcixuLnRlbXBlcmF0dXJlPHQubWluVGVtcCkpfSwibWFpbkxvb3AiKSxsPW8oZnVuY3Rpb24oKXtpZih0LmFuaW1hdGU9PT0hMHx8dC5hbmltYXRlPT09ITEpYSgpLHIub25lKCJsYXlvdXRzdG9wIix0LnN0b3ApLHIuZW1pdCh7dHlwZToibGF5b3V0c3RvcCIsbGF5b3V0OnJ9KTtlbHNle3ZhciBwPXQuZWxlcy5ub2RlcygpLG09aWdlKG4sdCxwKTtwLmxheW91dFBvc2l0aW9ucyhyLHQsbSl9fSwiZG9uZSIpLHU9MCxoPSEwO2lmKHQuYW5pbWF0ZT09PSEwKXt2YXIgZj1vKGZ1bmN0aW9uIGQoKXtmb3IodmFyIHA9MDtoJiZwPHQucmVmcmVzaDspaD1zKHUpLHUrKyxwKys7aWYoIWgpRTBlKG4sdCksbCgpO2Vsc2V7dmFyIG09UXUoKTttLWk+PXQuYW5pbWF0aW9uVGhyZXNob2xkJiZhKCkseFMoZCl9fSwiZnJhbWUiKTtmKCl9ZWxzZXtmb3IoO2g7KWg9cyh1KSx1Kys7RTBlKG4sdCksbCgpfXJldHVybiB0aGlzfTtIUy5wcm90b3R5cGUuc3RvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0b3BwZWQ9ITAsdGhpcy50aHJlYWQmJnRoaXMudGhyZWFkLnN0b3AoKSx0aGlzLmVtaXQoImxheW91dHN0b3AiKSx0aGlzfTtIUy5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRocmVhZCYmdGhpcy50aHJlYWQuc3RvcCgpLHRoaXN9O2FRZT1vKGZ1bmN0aW9uKGUscixuKXtmb3IodmFyIGk9bi5lbGVzLmVkZ2VzKCksYT1uLmVsZXMubm9kZXMoKSxzPUhzKG4uYm91bmRpbmdCb3g/bi5ib3VuZGluZ0JveDp7eDE6MCx5MTowLHc6ZS53aWR0aCgpLGg6ZS5oZWlnaHQoKX0pLGw9e2lzQ29tcG91bmQ6ZS5oYXNDb21wb3VuZE5vZGVzKCksbGF5b3V0Tm9kZXM6W10saWRUb0luZGV4Ont9LG5vZGVTaXplOmEuc2l6ZSgpLGdyYXBoU2V0OltdLGluZGV4VG9HcmFwaDpbXSxsYXlvdXRFZGdlczpbXSxlZGdlU2l6ZTppLnNpemUoKSx0ZW1wZXJhdHVyZTpuLmluaXRpYWxUZW1wLGNsaWVudFdpZHRoOnMudyxjbGllbnRIZWlnaHQ6cy5oLGJvdW5kaW5nQm94OnN9LHU9bi5lbGVzLmNvbXBvbmVudHMoKSxoPXt9LGY9MDtmPHUubGVuZ3RoO2YrKylmb3IodmFyIGQ9dVtmXSxwPTA7cDxkLmxlbmd0aDtwKyspe3ZhciBtPWRbcF07aFttLmlkKCldPWZ9Zm9yKHZhciBmPTA7ZjxsLm5vZGVTaXplO2YrKyl7dmFyIGc9YVtmXSx5PWcubGF5b3V0RGltZW5zaW9ucyhuKSx2PXt9O3YuaXNMb2NrZWQ9Zy5sb2NrZWQoKSx2LmlkPWcuZGF0YSgiaWQiKSx2LnBhcmVudElkPWcuZGF0YSgicGFyZW50Iiksdi5jbXB0SWQ9aFtnLmlkKCldLHYuY2hpbGRyZW49W10sdi5wb3NpdGlvblg9Zy5wb3NpdGlvbigieCIpLHYucG9zaXRpb25ZPWcucG9zaXRpb24oInkiKSx2Lm9mZnNldFg9MCx2Lm9mZnNldFk9MCx2LmhlaWdodD15Lncsdi53aWR0aD15Lmgsdi5tYXhYPXYucG9zaXRpb25YK3Yud2lkdGgvMix2Lm1pblg9di5wb3NpdGlvblgtdi53aWR0aC8yLHYubWF4WT12LnBvc2l0aW9uWSt2LmhlaWdodC8yLHYubWluWT12LnBvc2l0aW9uWS12LmhlaWdodC8yLHYucGFkTGVmdD1wYXJzZUZsb2F0KGcuc3R5bGUoInBhZGRpbmciKSksdi5wYWRSaWdodD1wYXJzZUZsb2F0KGcuc3R5bGUoInBhZGRpbmciKSksdi5wYWRUb3A9cGFyc2VGbG9hdChnLnN0eWxlKCJwYWRkaW5nIikpLHYucGFkQm90dG9tPXBhcnNlRmxvYXQoZy5zdHlsZSgicGFkZGluZyIpKSx2Lm5vZGVSZXB1bHNpb249c2kobi5ub2RlUmVwdWxzaW9uKT9uLm5vZGVSZXB1bHNpb24oZyk6bi5ub2RlUmVwdWxzaW9uLGwubGF5b3V0Tm9kZXMucHVzaCh2KSxsLmlkVG9JbmRleFt2LmlkXT1mfWZvcih2YXIgeD1bXSxiPTAsdz0tMSxDPVtdLGY9MDtmPGwubm9kZVNpemU7ZisrKXt2YXIgZz1sLmxheW91dE5vZGVzW2ZdLFQ9Zy5wYXJlbnRJZDtUIT1udWxsP2wubGF5b3V0Tm9kZXNbbC5pZFRvSW5kZXhbVF1dLmNoaWxkcmVuLnB1c2goZy5pZCk6KHhbKyt3XT1nLmlkLEMucHVzaChnLmlkKSl9Zm9yKGwuZ3JhcGhTZXQucHVzaChDKTtiPD13Oyl7dmFyIEU9eFtiKytdLEE9bC5pZFRvSW5kZXhbRV0sbT1sLmxheW91dE5vZGVzW0FdLFM9bS5jaGlsZHJlbjtpZihTLmxlbmd0aD4wKXtsLmdyYXBoU2V0LnB1c2goUyk7Zm9yKHZhciBmPTA7ZjxTLmxlbmd0aDtmKyspeFsrK3ddPVNbZl19fWZvcih2YXIgZj0wO2Y8bC5ncmFwaFNldC5sZW5ndGg7ZisrKWZvcih2YXIgXz1sLmdyYXBoU2V0W2ZdLHA9MDtwPF8ubGVuZ3RoO3ArKyl7dmFyIEk9bC5pZFRvSW5kZXhbX1twXV07bC5pbmRleFRvR3JhcGhbSV09Zn1mb3IodmFyIGY9MDtmPGwuZWRnZVNpemU7ZisrKXt2YXIgRD1pW2ZdLGs9e307ay5pZD1ELmRhdGEoImlkIiksay5zb3VyY2VJZD1ELmRhdGEoInNvdXJjZSIpLGsudGFyZ2V0SWQ9RC5kYXRhKCJ0YXJnZXQiKTt2YXIgTD1zaShuLmlkZWFsRWRnZUxlbmd0aCk/bi5pZGVhbEVkZ2VMZW5ndGgoRCk6bi5pZGVhbEVkZ2VMZW5ndGgsUj1zaShuLmVkZ2VFbGFzdGljaXR5KT9uLmVkZ2VFbGFzdGljaXR5KEQpOm4uZWRnZUVsYXN0aWNpdHksTz1sLmlkVG9JbmRleFtrLnNvdXJjZUlkXSxNPWwuaWRUb0luZGV4W2sudGFyZ2V0SWRdLEI9bC5pbmRleFRvR3JhcGhbT10sRj1sLmluZGV4VG9HcmFwaFtNXTtpZihCIT1GKXtmb3IodmFyIFA9c1FlKGsuc291cmNlSWQsay50YXJnZXRJZCxsKSx6PWwuZ3JhcGhTZXRbUF0sJD0wLHY9bC5sYXlvdXROb2Rlc1tPXTt6LmluZGV4T2Yodi5pZCk9PT0tMTspdj1sLmxheW91dE5vZGVzW2wuaWRUb0luZGV4W3YucGFyZW50SWRdXSwkKys7Zm9yKHY9bC5sYXlvdXROb2Rlc1tNXTt6LmluZGV4T2Yodi5pZCk9PT0tMTspdj1sLmxheW91dE5vZGVzW2wuaWRUb0luZGV4W3YucGFyZW50SWRdXSwkKys7TCo9JCpuLm5lc3RpbmdGYWN0b3J9ay5pZGVhbExlbmd0aD1MLGsuZWxhc3RpY2l0eT1SLGwubGF5b3V0RWRnZXMucHVzaChrKX1yZXR1cm4gbH0sImNyZWF0ZUxheW91dEluZm8iKSxzUWU9byhmdW5jdGlvbihlLHIsbil7dmFyIGk9b1FlKGUsciwwLG4pO3JldHVybiAyPmkuY291bnQ/MDppLmdyYXBofSwiZmluZExDQSIpLG9RZT1vKGZ1bmN0aW9uIHQoZSxyLG4saSl7dmFyIGE9aS5ncmFwaFNldFtuXTtpZigtMTxhLmluZGV4T2YoZSkmJi0xPGEuaW5kZXhPZihyKSlyZXR1cm57Y291bnQ6MixncmFwaDpufTtmb3IodmFyIHM9MCxsPTA7bDxhLmxlbmd0aDtsKyspe3ZhciB1PWFbbF0saD1pLmlkVG9JbmRleFt1XSxmPWkubGF5b3V0Tm9kZXNbaF0uY2hpbGRyZW47aWYoZi5sZW5ndGghPT0wKXt2YXIgZD1pLmluZGV4VG9HcmFwaFtpLmlkVG9JbmRleFtmWzBdXV0scD10KGUscixkLGkpO2lmKHAuY291bnQhPT0wKWlmKHAuY291bnQ9PT0xKXtpZihzKysscz09PTIpYnJlYWt9ZWxzZSByZXR1cm4gcH19cmV0dXJue2NvdW50OnMsZ3JhcGg6bn19LCJmaW5kTENBX2F1eCIpLGNRZT1vKGZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPWUuY2xpZW50V2lkdGgsaT1lLmNsaWVudEhlaWdodCxhPTA7YTxlLm5vZGVTaXplO2ErKyl7dmFyIHM9ZS5sYXlvdXROb2Rlc1thXTtzLmNoaWxkcmVuLmxlbmd0aD09PTAmJiFzLmlzTG9ja2VkJiYocy5wb3NpdGlvblg9TWF0aC5yYW5kb20oKSpuLHMucG9zaXRpb25ZPU1hdGgucmFuZG9tKCkqaSl9fSwicmFuZG9taXplUG9zaXRpb25zIiksaWdlPW8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPWUuYm91bmRpbmdCb3gsYT17eDE6MS8wLHgyOi0xLzAseTE6MS8wLHkyOi0xLzB9O3JldHVybiByLmJvdW5kaW5nQm94JiYobi5mb3JFYWNoKGZ1bmN0aW9uKHMpe3ZhciBsPWUubGF5b3V0Tm9kZXNbZS5pZFRvSW5kZXhbcy5kYXRhKCJpZCIpXV07YS54MT1NYXRoLm1pbihhLngxLGwucG9zaXRpb25YKSxhLngyPU1hdGgubWF4KGEueDIsbC5wb3NpdGlvblgpLGEueTE9TWF0aC5taW4oYS55MSxsLnBvc2l0aW9uWSksYS55Mj1NYXRoLm1heChhLnkyLGwucG9zaXRpb25ZKX0pLGEudz1hLngyLWEueDEsYS5oPWEueTItYS55MSksZnVuY3Rpb24ocyxsKXt2YXIgdT1lLmxheW91dE5vZGVzW2UuaWRUb0luZGV4W3MuZGF0YSgiaWQiKV1dO2lmKHIuYm91bmRpbmdCb3gpe3ZhciBoPSh1LnBvc2l0aW9uWC1hLngxKS9hLncsZj0odS5wb3NpdGlvblktYS55MSkvYS5oO3JldHVybnt4OmkueDEraCppLncseTppLnkxK2YqaS5ofX1lbHNlIHJldHVybnt4OnUucG9zaXRpb25YLHk6dS5wb3NpdGlvbll9fX0sImdldFNjYWxlSW5Cb3VuZHNGbiIpLHVRZT1vKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1uLmxheW91dCxhPW4uZWxlcy5ub2RlcygpLHM9aWdlKGUsbixhKTthLnBvc2l0aW9ucyhzKSxlLnJlYWR5IT09ITAmJihlLnJlYWR5PSEwLGkub25lKCJsYXlvdXRyZWFkeSIsbi5yZWFkeSksaS5lbWl0KHt0eXBlOiJsYXlvdXRyZWFkeSIsbGF5b3V0OnRoaXN9KSl9LCJyZWZyZXNoUG9zaXRpb25zIiksaFFlPW8oZnVuY3Rpb24oZSxyLG4pe2ZRZShlLHIpLG1RZShlKSxnUWUoZSxyKSx5UWUoZSksdlFlKGUpfSwic3RlcCIpLGZRZT1vKGZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPTA7bjxlLmdyYXBoU2V0Lmxlbmd0aDtuKyspZm9yKHZhciBpPWUuZ3JhcGhTZXRbbl0sYT1pLmxlbmd0aCxzPTA7czxhO3MrKylmb3IodmFyIGw9ZS5sYXlvdXROb2Rlc1tlLmlkVG9JbmRleFtpW3NdXV0sdT1zKzE7dTxhO3UrKyl7dmFyIGg9ZS5sYXlvdXROb2Rlc1tlLmlkVG9JbmRleFtpW3VdXV07ZFFlKGwsaCxlLHIpfX0sImNhbGN1bGF0ZU5vZGVGb3JjZXMiKSxrMGU9byhmdW5jdGlvbihlKXtyZXR1cm4tZSsyKmUqTWF0aC5yYW5kb20oKX0sInJhbmRvbURpc3RhbmNlIiksZFFlPW8oZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9ZS5jbXB0SWQscz1yLmNtcHRJZDtpZighKGEhPT1zJiYhbi5pc0NvbXBvdW5kKSl7dmFyIGw9ci5wb3NpdGlvblgtZS5wb3NpdGlvblgsdT1yLnBvc2l0aW9uWS1lLnBvc2l0aW9uWSxoPTE7bD09PTAmJnU9PT0wJiYobD1rMGUoaCksdT1rMGUoaCkpO3ZhciBmPXBRZShlLHIsbCx1KTtpZihmPjApdmFyIGQ9aS5ub2RlT3ZlcmxhcCpmLHA9TWF0aC5zcXJ0KGwqbCt1KnUpLG09ZCpsL3AsZz1kKnUvcDtlbHNlIHZhciB5PUNTKGUsbCx1KSx2PUNTKHIsLTEqbCwtMSp1KSx4PXYueC15LngsYj12LnkteS55LHc9eCp4K2IqYixwPU1hdGguc3FydCh3KSxkPShlLm5vZGVSZXB1bHNpb24rci5ub2RlUmVwdWxzaW9uKS93LG09ZCp4L3AsZz1kKmIvcDtlLmlzTG9ja2VkfHwoZS5vZmZzZXRYLT1tLGUub2Zmc2V0WS09Zyksci5pc0xvY2tlZHx8KHIub2Zmc2V0WCs9bSxyLm9mZnNldFkrPWcpfX0sIm5vZGVSZXB1bHNpb24iKSxwUWU9byhmdW5jdGlvbihlLHIsbixpKXtpZihuPjApdmFyIGE9ZS5tYXhYLXIubWluWDtlbHNlIHZhciBhPXIubWF4WC1lLm1pblg7aWYoaT4wKXZhciBzPWUubWF4WS1yLm1pblk7ZWxzZSB2YXIgcz1yLm1heFktZS5taW5ZO3JldHVybiBhPj0wJiZzPj0wP01hdGguc3FydChhKmErcypzKTowfSwibm9kZXNPdmVybGFwIiksQ1M9byhmdW5jdGlvbihlLHIsbil7dmFyIGk9ZS5wb3NpdGlvblgsYT1lLnBvc2l0aW9uWSxzPWUuaGVpZ2h0fHwxLGw9ZS53aWR0aHx8MSx1PW4vcixoPXMvbCxmPXt9O3JldHVybiByPT09MCYmMDxufHxyPT09MCYmMD5uPyhmLng9aSxmLnk9YStzLzIsZik6MDxyJiYtMSpoPD11JiZ1PD1oPyhmLng9aStsLzIsZi55PWErbCpuLzIvcixmKTowPnImJi0xKmg8PXUmJnU8PWg/KGYueD1pLWwvMixmLnk9YS1sKm4vMi9yLGYpOjA8biYmKHU8PS0xKmh8fHU+PWgpPyhmLng9aStzKnIvMi9uLGYueT1hK3MvMixmKTooMD5uJiYodTw9LTEqaHx8dT49aCkmJihmLng9aS1zKnIvMi9uLGYueT1hLXMvMiksZil9LCJmaW5kQ2xpcHBpbmdQb2ludCIpLG1RZT1vKGZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPTA7bjxlLmVkZ2VTaXplO24rKyl7dmFyIGk9ZS5sYXlvdXRFZGdlc1tuXSxhPWUuaWRUb0luZGV4W2kuc291cmNlSWRdLHM9ZS5sYXlvdXROb2Rlc1thXSxsPWUuaWRUb0luZGV4W2kudGFyZ2V0SWRdLHU9ZS5sYXlvdXROb2Rlc1tsXSxoPXUucG9zaXRpb25YLXMucG9zaXRpb25YLGY9dS5wb3NpdGlvblktcy5wb3NpdGlvblk7aWYoIShoPT09MCYmZj09PTApKXt2YXIgZD1DUyhzLGgsZikscD1DUyh1LC0xKmgsLTEqZiksbT1wLngtZC54LGc9cC55LWQueSx5PU1hdGguc3FydChtKm0rZypnKSx2PU1hdGgucG93KGkuaWRlYWxMZW5ndGgteSwyKS9pLmVsYXN0aWNpdHk7aWYoeSE9PTApdmFyIHg9diptL3ksYj12KmcveTtlbHNlIHZhciB4PTAsYj0wO3MuaXNMb2NrZWR8fChzLm9mZnNldFgrPXgscy5vZmZzZXRZKz1iKSx1LmlzTG9ja2VkfHwodS5vZmZzZXRYLT14LHUub2Zmc2V0WS09Yil9fX0sImNhbGN1bGF0ZUVkZ2VGb3JjZXMiKSxnUWU9byhmdW5jdGlvbihlLHIpe2lmKHIuZ3Jhdml0eSE9PTApZm9yKHZhciBuPTEsaT0wO2k8ZS5ncmFwaFNldC5sZW5ndGg7aSsrKXt2YXIgYT1lLmdyYXBoU2V0W2ldLHM9YS5sZW5ndGg7aWYoaT09PTApdmFyIGw9ZS5jbGllbnRIZWlnaHQvMix1PWUuY2xpZW50V2lkdGgvMjtlbHNlIHZhciBoPWUubGF5b3V0Tm9kZXNbZS5pZFRvSW5kZXhbYVswXV1dLGY9ZS5sYXlvdXROb2Rlc1tlLmlkVG9JbmRleFtoLnBhcmVudElkXV0sbD1mLnBvc2l0aW9uWCx1PWYucG9zaXRpb25ZO2Zvcih2YXIgZD0wO2Q8cztkKyspe3ZhciBwPWUubGF5b3V0Tm9kZXNbZS5pZFRvSW5kZXhbYVtkXV1dO2lmKCFwLmlzTG9ja2VkKXt2YXIgbT1sLXAucG9zaXRpb25YLGc9dS1wLnBvc2l0aW9uWSx5PU1hdGguc3FydChtKm0rZypnKTtpZih5Pm4pe3ZhciB2PXIuZ3Jhdml0eSptL3kseD1yLmdyYXZpdHkqZy95O3Aub2Zmc2V0WCs9dixwLm9mZnNldFkrPXh9fX19fSwiY2FsY3VsYXRlR3Jhdml0eUZvcmNlcyIpLHlRZT1vKGZ1bmN0aW9uKGUscil7dmFyIG49W10saT0wLGE9LTE7Zm9yKG4ucHVzaC5hcHBseShuLGUuZ3JhcGhTZXRbMF0pLGErPWUuZ3JhcGhTZXRbMF0ubGVuZ3RoO2k8PWE7KXt2YXIgcz1uW2krK10sbD1lLmlkVG9JbmRleFtzXSx1PWUubGF5b3V0Tm9kZXNbbF0saD11LmNoaWxkcmVuO2lmKDA8aC5sZW5ndGgmJiF1LmlzTG9ja2VkKXtmb3IodmFyIGY9dS5vZmZzZXRYLGQ9dS5vZmZzZXRZLHA9MDtwPGgubGVuZ3RoO3ArKyl7dmFyIG09ZS5sYXlvdXROb2Rlc1tlLmlkVG9JbmRleFtoW3BdXV07bS5vZmZzZXRYKz1mLG0ub2Zmc2V0WSs9ZCxuWysrYV09aFtwXX11Lm9mZnNldFg9MCx1Lm9mZnNldFk9MH19fSwicHJvcGFnYXRlRm9yY2VzIiksdlFlPW8oZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49MDtuPGUubm9kZVNpemU7bisrKXt2YXIgaT1lLmxheW91dE5vZGVzW25dOzA8aS5jaGlsZHJlbi5sZW5ndGgmJihpLm1heFg9dm9pZCAwLGkubWluWD12b2lkIDAsaS5tYXhZPXZvaWQgMCxpLm1pblk9dm9pZCAwKX1mb3IodmFyIG49MDtuPGUubm9kZVNpemU7bisrKXt2YXIgaT1lLmxheW91dE5vZGVzW25dO2lmKCEoMDxpLmNoaWxkcmVuLmxlbmd0aHx8aS5pc0xvY2tlZCkpe3ZhciBhPXhRZShpLm9mZnNldFgsaS5vZmZzZXRZLGUudGVtcGVyYXR1cmUpO2kucG9zaXRpb25YKz1hLngsaS5wb3NpdGlvblkrPWEueSxpLm9mZnNldFg9MCxpLm9mZnNldFk9MCxpLm1pblg9aS5wb3NpdGlvblgtaS53aWR0aCxpLm1heFg9aS5wb3NpdGlvblgraS53aWR0aCxpLm1pblk9aS5wb3NpdGlvblktaS5oZWlnaHQsaS5tYXhZPWkucG9zaXRpb25ZK2kuaGVpZ2h0LGJRZShpLGUpfX1mb3IodmFyIG49MDtuPGUubm9kZVNpemU7bisrKXt2YXIgaT1lLmxheW91dE5vZGVzW25dOzA8aS5jaGlsZHJlbi5sZW5ndGgmJiFpLmlzTG9ja2VkJiYoaS5wb3NpdGlvblg9KGkubWF4WCtpLm1pblgpLzIsaS5wb3NpdGlvblk9KGkubWF4WStpLm1pblkpLzIsaS53aWR0aD1pLm1heFgtaS5taW5YLGkuaGVpZ2h0PWkubWF4WS1pLm1pblkpfX0sInVwZGF0ZVBvc2l0aW9ucyIpLHhRZT1vKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1NYXRoLnNxcnQoZSplK3Iqcik7aWYoaT5uKXZhciBhPXt4Om4qZS9pLHk6bipyL2l9O2Vsc2UgdmFyIGE9e3g6ZSx5OnJ9O3JldHVybiBhfSwibGltaXRGb3JjZSIpLGJRZT1vKGZ1bmN0aW9uIHQoZSxyKXt2YXIgbj1lLnBhcmVudElkO2lmKG4hPW51bGwpe3ZhciBpPXIubGF5b3V0Tm9kZXNbci5pZFRvSW5kZXhbbl1dLGE9ITE7aWYoKGkubWF4WD09bnVsbHx8ZS5tYXhYK2kucGFkUmlnaHQ+aS5tYXhYKSYmKGkubWF4WD1lLm1heFgraS5wYWRSaWdodCxhPSEwKSwoaS5taW5YPT1udWxsfHxlLm1pblgtaS5wYWRMZWZ0PGkubWluWCkmJihpLm1pblg9ZS5taW5YLWkucGFkTGVmdCxhPSEwKSwoaS5tYXhZPT1udWxsfHxlLm1heFkraS5wYWRCb3R0b20+aS5tYXhZKSYmKGkubWF4WT1lLm1heFkraS5wYWRCb3R0b20sYT0hMCksKGkubWluWT09bnVsbHx8ZS5taW5ZLWkucGFkVG9wPGkubWluWSkmJihpLm1pblk9ZS5taW5ZLWkucGFkVG9wLGE9ITApLGEpcmV0dXJuIHQoaSxyKX19LCJ1cGRhdGVBbmNlc3RyeUJvdW5kYXJpZXMiKSxFMGU9byhmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj1lLmxheW91dE5vZGVzLGk9W10sYT0wO2E8bi5sZW5ndGg7YSsrKXt2YXIgcz1uW2FdLGw9cy5jbXB0SWQsdT1pW2xdPWlbbF18fFtdO3UucHVzaChzKX1mb3IodmFyIGg9MCxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBmPWlbYV07aWYoZil7Zi54MT0xLzAsZi54Mj0tMS8wLGYueTE9MS8wLGYueTI9LTEvMDtmb3IodmFyIGQ9MDtkPGYubGVuZ3RoO2QrKyl7dmFyIHA9ZltkXTtmLngxPU1hdGgubWluKGYueDEscC5wb3NpdGlvblgtcC53aWR0aC8yKSxmLngyPU1hdGgubWF4KGYueDIscC5wb3NpdGlvblgrcC53aWR0aC8yKSxmLnkxPU1hdGgubWluKGYueTEscC5wb3NpdGlvblktcC5oZWlnaHQvMiksZi55Mj1NYXRoLm1heChmLnkyLHAucG9zaXRpb25ZK3AuaGVpZ2h0LzIpfWYudz1mLngyLWYueDEsZi5oPWYueTItZi55MSxoKz1mLncqZi5ofX1pLnNvcnQoZnVuY3Rpb24oYix3KXtyZXR1cm4gdy53KncuaC1iLncqYi5ofSk7Zm9yKHZhciBtPTAsZz0wLHk9MCx2PTAseD1NYXRoLnNxcnQoaCkqZS5jbGllbnRXaWR0aC9lLmNsaWVudEhlaWdodCxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBmPWlbYV07aWYoZil7Zm9yKHZhciBkPTA7ZDxmLmxlbmd0aDtkKyspe3ZhciBwPWZbZF07cC5pc0xvY2tlZHx8KHAucG9zaXRpb25YKz1tLWYueDEscC5wb3NpdGlvblkrPWctZi55MSl9bSs9Zi53K3IuY29tcG9uZW50U3BhY2luZyx5Kz1mLncrci5jb21wb25lbnRTcGFjaW5nLHY9TWF0aC5tYXgodixmLmgpLHk+eCYmKGcrPXYrci5jb21wb25lbnRTcGFjaW5nLG09MCx5PTAsdj0wKX19fSwic2VwYXJhdGVDb21wb25lbnRzIiksd1FlPXtmaXQ6ITAscGFkZGluZzozMCxib3VuZGluZ0JveDp2b2lkIDAsYXZvaWRPdmVybGFwOiEwLGF2b2lkT3ZlcmxhcFBhZGRpbmc6MTAsbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiExLHNwYWNpbmdGYWN0b3I6dm9pZCAwLGNvbmRlbnNlOiExLHJvd3M6dm9pZCAwLGNvbHM6dm9pZCAwLHBvc2l0aW9uOm8oZnVuY3Rpb24oZSl7fSwicG9zaXRpb24iKSxzb3J0OnZvaWQgMCxhbmltYXRlOiExLGFuaW1hdGlvbkR1cmF0aW9uOjUwMCxhbmltYXRpb25FYXNpbmc6dm9pZCAwLGFuaW1hdGVGaWx0ZXI6byhmdW5jdGlvbihlLHIpe3JldHVybiEwfSwiYW5pbWF0ZUZpbHRlciIpLHJlYWR5OnZvaWQgMCxzdG9wOnZvaWQgMCx0cmFuc2Zvcm06byhmdW5jdGlvbihlLHIpe3JldHVybiByfSwidHJhbnNmb3JtIil9O28oYWdlLCJHcmlkTGF5b3V0Iik7YWdlLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMsZT10LHI9dC5jeSxuPWUuZWxlcyxpPW4ubm9kZXMoKS5ub3QoIjpwYXJlbnQiKTtlLnNvcnQmJihpPWkuc29ydChlLnNvcnQpKTt2YXIgYT1IcyhlLmJvdW5kaW5nQm94P2UuYm91bmRpbmdCb3g6e3gxOjAseTE6MCx3OnIud2lkdGgoKSxoOnIuaGVpZ2h0KCl9KTtpZihhLmg9PT0wfHxhLnc9PT0wKW4ubm9kZXMoKS5sYXlvdXRQb3NpdGlvbnModGhpcyxlLGZ1bmN0aW9uKFEpe3JldHVybnt4OmEueDEseTphLnkxfX0pO2Vsc2V7dmFyIHM9aS5zaXplKCksbD1NYXRoLnNxcnQocyphLmgvYS53KSx1PU1hdGgucm91bmQobCksaD1NYXRoLnJvdW5kKGEudy9hLmgqbCksZj1vKGZ1bmN0aW9uKGope2lmKGo9PW51bGwpcmV0dXJuIE1hdGgubWluKHUsaCk7dmFyIGllPU1hdGgubWluKHUsaCk7aWU9PXU/dT1qOmg9an0sInNtYWxsIiksZD1vKGZ1bmN0aW9uKGope2lmKGo9PW51bGwpcmV0dXJuIE1hdGgubWF4KHUsaCk7dmFyIGllPU1hdGgubWF4KHUsaCk7aWU9PXU/dT1qOmg9an0sImxhcmdlIikscD1lLnJvd3MsbT1lLmNvbHMhPW51bGw/ZS5jb2xzOmUuY29sdW1ucztpZihwIT1udWxsJiZtIT1udWxsKXU9cCxoPW07ZWxzZSBpZihwIT1udWxsJiZtPT1udWxsKXU9cCxoPU1hdGguY2VpbChzL3UpO2Vsc2UgaWYocD09bnVsbCYmbSE9bnVsbCloPW0sdT1NYXRoLmNlaWwocy9oKTtlbHNlIGlmKGgqdT5zKXt2YXIgZz1mKCkseT1kKCk7KGctMSkqeT49cz9mKGctMSk6KHktMSkqZz49cyYmZCh5LTEpfWVsc2UgZm9yKDtoKnU8czspe3ZhciB2PWYoKSx4PWQoKTsoeCsxKSp2Pj1zP2QoeCsxKTpmKHYrMSl9dmFyIGI9YS53L2gsdz1hLmgvdTtpZihlLmNvbmRlbnNlJiYoYj0wLHc9MCksZS5hdm9pZE92ZXJsYXApZm9yKHZhciBDPTA7QzxpLmxlbmd0aDtDKyspe3ZhciBUPWlbQ10sRT1ULl9wcml2YXRlLnBvc2l0aW9uOyhFLng9PW51bGx8fEUueT09bnVsbCkmJihFLng9MCxFLnk9MCk7dmFyIEE9VC5sYXlvdXREaW1lbnNpb25zKGUpLFM9ZS5hdm9pZE92ZXJsYXBQYWRkaW5nLF89QS53K1MsST1BLmgrUztiPU1hdGgubWF4KGIsXyksdz1NYXRoLm1heCh3LEkpfWZvcih2YXIgRD17fSxrPW8oZnVuY3Rpb24oaixpZSl7cmV0dXJuISFEWyJjLSIraisiLSIraWVdfSwidXNlZCIpLEw9byhmdW5jdGlvbihqLGllKXtEWyJjLSIraisiLSIraWVdPSEwfSwidXNlIiksUj0wLE89MCxNPW8oZnVuY3Rpb24oKXtPKyssTz49aCYmKE89MCxSKyspfSwibW92ZVRvTmV4dENlbGwiKSxCPXt9LEY9MDtGPGkubGVuZ3RoO0YrKyl7dmFyIFA9aVtGXSx6PWUucG9zaXRpb24oUCk7aWYoeiYmKHoucm93IT09dm9pZCAwfHx6LmNvbCE9PXZvaWQgMCkpe3ZhciAkPXtyb3c6ei5yb3csY29sOnouY29sfTtpZigkLmNvbD09PXZvaWQgMClmb3IoJC5jb2w9MDtrKCQucm93LCQuY29sKTspJC5jb2wrKztlbHNlIGlmKCQucm93PT09dm9pZCAwKWZvcigkLnJvdz0wO2soJC5yb3csJC5jb2wpOykkLnJvdysrO0JbUC5pZCgpXT0kLEwoJC5yb3csJC5jb2wpfX12YXIgSD1vKGZ1bmN0aW9uKGosaWUpe3ZhciBuZSxsZTtpZihqLmxvY2tlZCgpfHxqLmlzUGFyZW50KCkpcmV0dXJuITE7dmFyIGhlPUJbai5pZCgpXTtpZihoZSluZT1oZS5jb2wqYitiLzIrYS54MSxsZT1oZS5yb3cqdyt3LzIrYS55MTtlbHNle2Zvcig7ayhSLE8pOylNKCk7bmU9TypiK2IvMithLngxLGxlPVIqdyt3LzIrYS55MSxMKFIsTyksTSgpfXJldHVybnt4Om5lLHk6bGV9fSwiZ2V0UG9zIik7aS5sYXlvdXRQb3NpdGlvbnModGhpcyxlLEgpfXJldHVybiB0aGlzfTtUUWU9e3JlYWR5Om8oZnVuY3Rpb24oKXt9LCJyZWFkeSIpLHN0b3A6byhmdW5jdGlvbigpe30sInN0b3AiKX07byhnQiwiTnVsbExheW91dCIpO2dCLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMsZT10LmVsZXMscj10aGlzO3JldHVybiB0LmN5LHIuZW1pdCgibGF5b3V0c3RhcnQiKSxlLm5vZGVzKCkucG9zaXRpb25zKGZ1bmN0aW9uKCl7cmV0dXJue3g6MCx5OjB9fSksci5vbmUoImxheW91dHJlYWR5Iix0LnJlYWR5KSxyLmVtaXQoImxheW91dHJlYWR5Iiksci5vbmUoImxheW91dHN0b3AiLHQuc3RvcCksci5lbWl0KCJsYXlvdXRzdG9wIiksdGhpc307Z0IucHJvdG90eXBlLnN0b3A9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc307a1FlPXtwb3NpdGlvbnM6dm9pZCAwLHpvb206dm9pZCAwLHBhbjp2b2lkIDAsZml0OiEwLHBhZGRpbmc6MzAsc3BhY2luZ0ZhY3Rvcjp2b2lkIDAsYW5pbWF0ZTohMSxhbmltYXRpb25EdXJhdGlvbjo1MDAsYW5pbWF0aW9uRWFzaW5nOnZvaWQgMCxhbmltYXRlRmlsdGVyOm8oZnVuY3Rpb24oZSxyKXtyZXR1cm4hMH0sImFuaW1hdGVGaWx0ZXIiKSxyZWFkeTp2b2lkIDAsc3RvcDp2b2lkIDAsdHJhbnNmb3JtOm8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gcn0sInRyYW5zZm9ybSIpfTtvKHNnZSwiUHJlc2V0TGF5b3V0Iik7c2dlLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMsZT10LmVsZXMscj1lLm5vZGVzKCksbj1zaSh0LnBvc2l0aW9ucyk7ZnVuY3Rpb24gaShhKXtpZih0LnBvc2l0aW9ucz09bnVsbClyZXR1cm4gQXFlKGEucG9zaXRpb24oKSk7aWYobilyZXR1cm4gdC5wb3NpdGlvbnMoYSk7dmFyIHM9dC5wb3NpdGlvbnNbYS5fcHJpdmF0ZS5kYXRhLmlkXTtyZXR1cm4gcz8/bnVsbH1yZXR1cm4gbyhpLCJnZXRQb3NpdGlvbiIpLHIubGF5b3V0UG9zaXRpb25zKHRoaXMsdCxmdW5jdGlvbihhLHMpe3ZhciBsPWkoYSk7cmV0dXJuIGEubG9ja2VkKCl8fGw9PW51bGw/ITE6bH0pLHRoaXN9O0VRZT17Zml0OiEwLHBhZGRpbmc6MzAsYm91bmRpbmdCb3g6dm9pZCAwLGFuaW1hdGU6ITEsYW5pbWF0aW9uRHVyYXRpb246NTAwLGFuaW1hdGlvbkVhc2luZzp2b2lkIDAsYW5pbWF0ZUZpbHRlcjpvKGZ1bmN0aW9uKGUscil7cmV0dXJuITB9LCJhbmltYXRlRmlsdGVyIikscmVhZHk6dm9pZCAwLHN0b3A6dm9pZCAwLHRyYW5zZm9ybTpvKGZ1bmN0aW9uKGUscil7cmV0dXJuIHJ9LCJ0cmFuc2Zvcm0iKX07byhvZ2UsIlJhbmRvbUxheW91dCIpO29nZS5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLGU9dC5jeSxyPXQuZWxlcyxuPUhzKHQuYm91bmRpbmdCb3g/dC5ib3VuZGluZ0JveDp7eDE6MCx5MTowLHc6ZS53aWR0aCgpLGg6ZS5oZWlnaHQoKX0pLGk9byhmdW5jdGlvbihzLGwpe3JldHVybnt4Om4ueDErTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpKm4udykseTpuLnkxK01hdGgucm91bmQoTWF0aC5yYW5kb20oKSpuLmgpfX0sImdldFBvcyIpO3JldHVybiByLm5vZGVzKCkubGF5b3V0UG9zaXRpb25zKHRoaXMsdCxpKSx0aGlzfTtTUWU9W3tuYW1lOiJicmVhZHRoZmlyc3QiLGltcGw6dGdlfSx7bmFtZToiY2lyY2xlIixpbXBsOnJnZX0se25hbWU6ImNvbmNlbnRyaWMiLGltcGw6bmdlfSx7bmFtZToiY29zZSIsaW1wbDpIU30se25hbWU6ImdyaWQiLGltcGw6YWdlfSx7bmFtZToibnVsbCIsaW1wbDpnQn0se25hbWU6InByZXNldCIsaW1wbDpzZ2V9LHtuYW1lOiJyYW5kb20iLGltcGw6b2dlfV07byhsZ2UsIk51bGxSZW5kZXJlciIpO1MwZT1vKGZ1bmN0aW9uKCl7fSwibm9vcCIpLEMwZT1vKGZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJBIGhlYWRsZXNzIGluc3RhbmNlIGNhbiBub3QgcmVuZGVyIGltYWdlcyIpfSwidGhyb3dJbWdFcnIiKTtsZ2UucHJvdG90eXBlPXtyZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGU6UzBlLG5vdGlmeTpvKGZ1bmN0aW9uKCl7dGhpcy5ub3RpZmljYXRpb25zKyt9LCJub3RpZnkiKSxpbml0OlMwZSxpc0hlYWRsZXNzOm8oZnVuY3Rpb24oKXtyZXR1cm4hMH0sImlzSGVhZGxlc3MiKSxwbmc6QzBlLGpwZzpDMGV9O3lCPXt9O3lCLmFycm93U2hhcGVXaWR0aD0uMzt5Qi5yZWdpc3RlckFycm93U2hhcGVzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5hcnJvd1NoYXBlcz17fSxlPXRoaXMscj1vKGZ1bmN0aW9uKGgsZixkLHAsbSxnLHkpe3ZhciB2PW0ueC1kLzIteSx4PW0ueCtkLzIreSxiPW0ueS1kLzIteSx3PW0ueStkLzIreSxDPXY8PWgmJmg8PXgmJmI8PWYmJmY8PXc7cmV0dXJuIEN9LCJiYkNvbGxpZGUiKSxuPW8oZnVuY3Rpb24oaCxmLGQscCxtKXt2YXIgZz1oKk1hdGguY29zKHApLWYqTWF0aC5zaW4ocCkseT1oKk1hdGguc2luKHApK2YqTWF0aC5jb3MocCksdj1nKmQseD15KmQsYj12K20ueCx3PXgrbS55O3JldHVybnt4OmIseTp3fX0sInRyYW5zZm9ybSIpLGk9byhmdW5jdGlvbihoLGYsZCxwKXtmb3IodmFyIG09W10sZz0wO2c8aC5sZW5ndGg7Zys9Mil7dmFyIHk9aFtnXSx2PWhbZysxXTttLnB1c2gobih5LHYsZixkLHApKX1yZXR1cm4gbX0sInRyYW5zZm9ybVBvaW50cyIpLGE9byhmdW5jdGlvbihoKXtmb3IodmFyIGY9W10sZD0wO2Q8aC5sZW5ndGg7ZCsrKXt2YXIgcD1oW2RdO2YucHVzaChwLngscC55KX1yZXR1cm4gZn0sInBvaW50c1RvQXJyIikscz1vKGZ1bmN0aW9uKGgpe3JldHVybiBoLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlKmgucHN0eWxlKCJhcnJvdy1zY2FsZSIpLnBmVmFsdWUqMn0sInN0YW5kYXJkR2FwIiksbD1vKGZ1bmN0aW9uKGgsZil7WnQoZikmJihmPXRbZl0pLHRbaF09cnIoe25hbWU6aCxwb2ludHM6Wy0uMTUsLS4zLC4xNSwtLjMsLjE1LC4zLC0uMTUsLjNdLGNvbGxpZGU6byhmdW5jdGlvbihwLG0sZyx5LHYseCl7dmFyIGI9YShpKHRoaXMucG9pbnRzLGcrMip4LHksdikpLHc9VXMocCxtLGIpO3JldHVybiB3fSwiY29sbGlkZSIpLHJvdWdoQ29sbGlkZTpyLGRyYXc6byhmdW5jdGlvbihwLG0sZyx5KXt2YXIgdj1pKHRoaXMucG9pbnRzLG0sZyx5KTtlLmFycm93U2hhcGVJbXBsKCJwb2x5Z29uIikocCx2KX0sImRyYXciKSxzcGFjaW5nOm8oZnVuY3Rpb24ocCl7cmV0dXJuIDB9LCJzcGFjaW5nIiksZ2FwOnN9LGYpfSwiZGVmaW5lQXJyb3dTaGFwZSIpO2woIm5vbmUiLHtjb2xsaWRlOmJTLHJvdWdoQ29sbGlkZTpiUyxkcmF3OnJCLHNwYWNpbmc6UHBlLGdhcDpQcGV9KSxsKCJ0cmlhbmdsZSIse3BvaW50czpbLS4xNSwtLjMsMCwwLC4xNSwtLjNdfSksbCgiYXJyb3ciLCJ0cmlhbmdsZSIpLGwoInRyaWFuZ2xlLWJhY2tjdXJ2ZSIse3BvaW50czp0LnRyaWFuZ2xlLnBvaW50cyxjb250cm9sUG9pbnQ6WzAsLS4xNV0scm91Z2hDb2xsaWRlOnIsZHJhdzpvKGZ1bmN0aW9uKGgsZixkLHAsbSl7dmFyIGc9aSh0aGlzLnBvaW50cyxmLGQscCkseT10aGlzLmNvbnRyb2xQb2ludCx2PW4oeVswXSx5WzFdLGYsZCxwKTtlLmFycm93U2hhcGVJbXBsKHRoaXMubmFtZSkoaCxnLHYpfSwiZHJhdyIpLGdhcDpvKGZ1bmN0aW9uKGgpe3JldHVybiBzKGgpKi44fSwiZ2FwIil9KSxsKCJ0cmlhbmdsZS10ZWUiLHtwb2ludHM6WzAsMCwuMTUsLS4zLC0uMTUsLS4zLDAsMF0scG9pbnRzVGVlOlstLjE1LC0uNCwtLjE1LC0uNSwuMTUsLS41LC4xNSwtLjRdLGNvbGxpZGU6byhmdW5jdGlvbihoLGYsZCxwLG0sZyx5KXt2YXIgdj1hKGkodGhpcy5wb2ludHMsZCsyKnkscCxtKSkseD1hKGkodGhpcy5wb2ludHNUZWUsZCsyKnkscCxtKSksYj1VcyhoLGYsdil8fFVzKGgsZix4KTtyZXR1cm4gYn0sImNvbGxpZGUiKSxkcmF3Om8oZnVuY3Rpb24oaCxmLGQscCxtKXt2YXIgZz1pKHRoaXMucG9pbnRzLGYsZCxwKSx5PWkodGhpcy5wb2ludHNUZWUsZixkLHApO2UuYXJyb3dTaGFwZUltcGwodGhpcy5uYW1lKShoLGcseSl9LCJkcmF3Iil9KSxsKCJjaXJjbGUtdHJpYW5nbGUiLHtyYWRpdXM6LjE1LHBvaW50c1RyOlswLC0uMTUsLjE1LC0uNDUsLS4xNSwtLjQ1LDAsLS4xNV0sY29sbGlkZTpvKGZ1bmN0aW9uKGgsZixkLHAsbSxnLHkpe3ZhciB2PW0seD1NYXRoLnBvdyh2LngtaCwyKStNYXRoLnBvdyh2LnktZiwyKTw9TWF0aC5wb3coKGQrMip5KSp0aGlzLnJhZGl1cywyKSxiPWEoaSh0aGlzLnBvaW50cyxkKzIqeSxwLG0pKTtyZXR1cm4gVXMoaCxmLGIpfHx4fSwiY29sbGlkZSIpLGRyYXc6byhmdW5jdGlvbihoLGYsZCxwLG0pe3ZhciBnPWkodGhpcy5wb2ludHNUcixmLGQscCk7ZS5hcnJvd1NoYXBlSW1wbCh0aGlzLm5hbWUpKGgsZyxwLngscC55LHRoaXMucmFkaXVzKmYpfSwiZHJhdyIpLHNwYWNpbmc6byhmdW5jdGlvbihoKXtyZXR1cm4gZS5nZXRBcnJvd1dpZHRoKGgucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUsaC5wc3R5bGUoImFycm93LXNjYWxlIikudmFsdWUpKnRoaXMucmFkaXVzfSwic3BhY2luZyIpfSksbCgidHJpYW5nbGUtY3Jvc3MiLHtwb2ludHM6WzAsMCwuMTUsLS4zLC0uMTUsLS4zLDAsMF0sYmFzZUNyb3NzTGluZVB0czpbLS4xNSwtLjQsLS4xNSwtLjQsLjE1LC0uNCwuMTUsLS40XSxjcm9zc0xpbmVQdHM6byhmdW5jdGlvbihoLGYpe3ZhciBkPXRoaXMuYmFzZUNyb3NzTGluZVB0cy5zbGljZSgpLHA9Zi9oLG09MyxnPTU7cmV0dXJuIGRbbV09ZFttXS1wLGRbZ109ZFtnXS1wLGR9LCJjcm9zc0xpbmVQdHMiKSxjb2xsaWRlOm8oZnVuY3Rpb24oaCxmLGQscCxtLGcseSl7dmFyIHY9YShpKHRoaXMucG9pbnRzLGQrMip5LHAsbSkpLHg9YShpKHRoaXMuY3Jvc3NMaW5lUHRzKGQsZyksZCsyKnkscCxtKSksYj1VcyhoLGYsdil8fFVzKGgsZix4KTtyZXR1cm4gYn0sImNvbGxpZGUiKSxkcmF3Om8oZnVuY3Rpb24oaCxmLGQscCxtKXt2YXIgZz1pKHRoaXMucG9pbnRzLGYsZCxwKSx5PWkodGhpcy5jcm9zc0xpbmVQdHMoZixtKSxmLGQscCk7ZS5hcnJvd1NoYXBlSW1wbCh0aGlzLm5hbWUpKGgsZyx5KX0sImRyYXciKX0pLGwoInZlZSIse3BvaW50czpbLS4xNSwtLjMsMCwwLC4xNSwtLjMsMCwtLjE1XSxnYXA6byhmdW5jdGlvbihoKXtyZXR1cm4gcyhoKSouNTI1fSwiZ2FwIil9KSxsKCJjaXJjbGUiLHtyYWRpdXM6LjE1LGNvbGxpZGU6byhmdW5jdGlvbihoLGYsZCxwLG0sZyx5KXt2YXIgdj1tLHg9TWF0aC5wb3codi54LWgsMikrTWF0aC5wb3codi55LWYsMik8PU1hdGgucG93KChkKzIqeSkqdGhpcy5yYWRpdXMsMik7cmV0dXJuIHh9LCJjb2xsaWRlIiksZHJhdzpvKGZ1bmN0aW9uKGgsZixkLHAsbSl7ZS5hcnJvd1NoYXBlSW1wbCh0aGlzLm5hbWUpKGgscC54LHAueSx0aGlzLnJhZGl1cypmKX0sImRyYXciKSxzcGFjaW5nOm8oZnVuY3Rpb24oaCl7cmV0dXJuIGUuZ2V0QXJyb3dXaWR0aChoLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlLGgucHN0eWxlKCJhcnJvdy1zY2FsZSIpLnZhbHVlKSp0aGlzLnJhZGl1c30sInNwYWNpbmciKX0pLGwoInRlZSIse3BvaW50czpbLS4xNSwwLC0uMTUsLS4xLC4xNSwtLjEsLjE1LDBdLHNwYWNpbmc6byhmdW5jdGlvbihoKXtyZXR1cm4gMX0sInNwYWNpbmciKSxnYXA6byhmdW5jdGlvbihoKXtyZXR1cm4gMX0sImdhcCIpfSksbCgic3F1YXJlIix7cG9pbnRzOlstLjE1LDAsLjE1LDAsLjE1LC0uMywtLjE1LC0uM119KSxsKCJkaWFtb25kIix7cG9pbnRzOlstLjE1LC0uMTUsMCwtLjMsLjE1LC0uMTUsMCwwXSxnYXA6byhmdW5jdGlvbihoKXtyZXR1cm4gaC5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSpoLnBzdHlsZSgiYXJyb3ctc2NhbGUiKS52YWx1ZX0sImdhcCIpfSksbCgiY2hldnJvbiIse3BvaW50czpbMCwwLC0uMTUsLS4xNSwtLjEsLS4yLDAsLS4xLC4xLC0uMiwuMTUsLS4xNV0sZ2FwOm8oZnVuY3Rpb24oaCl7cmV0dXJuIC45NSpoLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlKmgucHN0eWxlKCJhcnJvdy1zY2FsZSIpLnZhbHVlfSwiZ2FwIil9KX07cXA9e307cXAucHJvamVjdEludG9WaWV3cG9ydD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuY3ksbj10aGlzLmZpbmRDb250YWluZXJDbGllbnRDb29yZHMoKSxpPW5bMF0sYT1uWzFdLHM9bls0XSxsPXIucGFuKCksdT1yLnpvb20oKSxoPSgodC1pKS9zLWwueCkvdSxmPSgoZS1hKS9zLWwueSkvdTtyZXR1cm5baCxmXX07cXAuZmluZENvbnRhaW5lckNsaWVudENvb3Jkcz1mdW5jdGlvbigpe2lmKHRoaXMuY29udGFpbmVyQkIpcmV0dXJuIHRoaXMuY29udGFpbmVyQkI7dmFyIHQ9dGhpcy5jb250YWluZXIsZT10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHI9dGhpcy5jeS53aW5kb3coKS5nZXRDb21wdXRlZFN0eWxlKHQpLG49byhmdW5jdGlvbih4KXtyZXR1cm4gcGFyc2VGbG9hdChyLmdldFByb3BlcnR5VmFsdWUoeCkpfSwic3R5bGVWYWx1ZSIpLGk9e2xlZnQ6bigicGFkZGluZy1sZWZ0IikscmlnaHQ6bigicGFkZGluZy1yaWdodCIpLHRvcDpuKCJwYWRkaW5nLXRvcCIpLGJvdHRvbTpuKCJwYWRkaW5nLWJvdHRvbSIpfSxhPXtsZWZ0Om4oImJvcmRlci1sZWZ0LXdpZHRoIikscmlnaHQ6bigiYm9yZGVyLXJpZ2h0LXdpZHRoIiksdG9wOm4oImJvcmRlci10b3Atd2lkdGgiKSxib3R0b206bigiYm9yZGVyLWJvdHRvbS13aWR0aCIpfSxzPXQuY2xpZW50V2lkdGgsbD10LmNsaWVudEhlaWdodCx1PWkubGVmdCtpLnJpZ2h0LGg9aS50b3AraS5ib3R0b20sZj1hLmxlZnQrYS5yaWdodCxkPWUud2lkdGgvKHMrZikscD1zLXUsbT1sLWgsZz1lLmxlZnQraS5sZWZ0K2EubGVmdCx5PWUudG9wK2kudG9wK2EudG9wO3JldHVybiB0aGlzLmNvbnRhaW5lckJCPVtnLHkscCxtLGRdfTtxcC5pbnZhbGlkYXRlQ29udGFpbmVyQ2xpZW50Q29vcmRzQ2FjaGU9ZnVuY3Rpb24oKXt0aGlzLmNvbnRhaW5lckJCPW51bGx9O3FwLmZpbmROZWFyZXN0RWxlbWVudD1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdGhpcy5maW5kTmVhcmVzdEVsZW1lbnRzKHQsZSxyLG4pWzBdfTtxcC5maW5kTmVhcmVzdEVsZW1lbnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMsYT10aGlzLHM9YS5nZXRDYWNoZWRaU29ydGVkRWxlcygpLGw9W10sdT1hLmN5Lnpvb20oKSxoPWEuY3kuaGFzQ29tcG91bmROb2RlcygpLGY9KG4/MjQ6OCkvdSxkPShuPzg6MikvdSxwPShuPzg6MikvdSxtPTEvMCxnLHk7ciYmKHM9cy5pbnRlcmFjdGl2ZSk7ZnVuY3Rpb24gdihBLFMpe2lmKEEuaXNOb2RlKCkpe2lmKHkpcmV0dXJuO3k9QSxsLnB1c2goQSl9aWYoQS5pc0VkZ2UoKSYmKFM9PW51bGx8fFM8bSkpaWYoZyl7aWYoZy5wc3R5bGUoInotY29tcG91bmQtZGVwdGgiKS52YWx1ZT09PUEucHN0eWxlKCJ6LWNvbXBvdW5kLWRlcHRoIikudmFsdWUmJmcucHN0eWxlKCJ6LWNvbXBvdW5kLWRlcHRoIikudmFsdWU9PT1BLnBzdHlsZSgiei1jb21wb3VuZC1kZXB0aCIpLnZhbHVlKXtmb3IodmFyIF89MDtfPGwubGVuZ3RoO18rKylpZihsW19dLmlzRWRnZSgpKXtsW19dPUEsZz1BLG09Uz8/bTticmVha319fWVsc2UgbC5wdXNoKEEpLGc9QSxtPVM/P219byh2LCJhZGRFbGUiKTtmdW5jdGlvbiB4KEEpe3ZhciBTPUEub3V0ZXJXaWR0aCgpKzIqZCxfPUEub3V0ZXJIZWlnaHQoKSsyKmQsST1TLzIsRD1fLzIsaz1BLnBvc2l0aW9uKCksTD1BLnBzdHlsZSgiY29ybmVyLXJhZGl1cyIpLnZhbHVlPT09ImF1dG8iPyJhdXRvIjpBLnBzdHlsZSgiY29ybmVyLXJhZGl1cyIpLnBmVmFsdWUsUj1BLl9wcml2YXRlLnJzY3JhdGNoO2lmKGsueC1JPD10JiZ0PD1rLngrSSYmay55LUQ8PWUmJmU8PWsueStEKXt2YXIgTz1hLm5vZGVTaGFwZXNbaS5nZXROb2RlU2hhcGUoQSldO2lmKE8uY2hlY2tQb2ludCh0LGUsMCxTLF8say54LGsueSxMLFIpKXJldHVybiB2KEEsMCksITB9fW8oeCwiY2hlY2tOb2RlIik7ZnVuY3Rpb24gYihBKXt2YXIgUz1BLl9wcml2YXRlLF89Uy5yc2NyYXRjaCxJPUEucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUsRD1BLnBzdHlsZSgiYXJyb3ctc2NhbGUiKS52YWx1ZSxrPUkvMitmLEw9ayprLFI9ayoyLEY9Uy5zb3VyY2UsUD1TLnRhcmdldCxPO2lmKF8uZWRnZVR5cGU9PT0ic2VnbWVudHMifHxfLmVkZ2VUeXBlPT09InN0cmFpZ2h0Inx8Xy5lZGdlVHlwZT09PSJoYXlzdGFjayIpe2Zvcih2YXIgTT1fLmFsbHB0cyxCPTA7QiszPE0ubGVuZ3RoO0IrPTIpaWYoenFlKHQsZSxNW0JdLE1bQisxXSxNW0IrMl0sTVtCKzNdLFIpJiZMPihPPVdxZSh0LGUsTVtCXSxNW0IrMV0sTVtCKzJdLE1bQiszXSkpKXJldHVybiB2KEEsTyksITB9ZWxzZSBpZihfLmVkZ2VUeXBlPT09ImJlemllciJ8fF8uZWRnZVR5cGU9PT0ibXVsdGliZXppZXIifHxfLmVkZ2VUeXBlPT09InNlbGYifHxfLmVkZ2VUeXBlPT09ImNvbXBvdW5kIil7Zm9yKHZhciBNPV8uYWxscHRzLEI9MDtCKzU8Xy5hbGxwdHMubGVuZ3RoO0IrPTQpaWYoR3FlKHQsZSxNW0JdLE1bQisxXSxNW0IrMl0sTVtCKzNdLE1bQis0XSxNW0IrNV0sUikmJkw+KE89SHFlKHQsZSxNW0JdLE1bQisxXSxNW0IrMl0sTVtCKzNdLE1bQis0XSxNW0IrNV0pKSlyZXR1cm4gdihBLE8pLCEwfWZvcih2YXIgRj1GfHxTLnNvdXJjZSxQPVB8fFMudGFyZ2V0LHo9aS5nZXRBcnJvd1dpZHRoKEksRCksJD1be25hbWU6InNvdXJjZSIseDpfLmFycm93U3RhcnRYLHk6Xy5hcnJvd1N0YXJ0WSxhbmdsZTpfLnNyY0Fycm93QW5nbGV9LHtuYW1lOiJ0YXJnZXQiLHg6Xy5hcnJvd0VuZFgseTpfLmFycm93RW5kWSxhbmdsZTpfLnRndEFycm93QW5nbGV9LHtuYW1lOiJtaWQtc291cmNlIix4Ol8ubWlkWCx5Ol8ubWlkWSxhbmdsZTpfLm1pZHNyY0Fycm93QW5nbGV9LHtuYW1lOiJtaWQtdGFyZ2V0Iix4Ol8ubWlkWCx5Ol8ubWlkWSxhbmdsZTpfLm1pZHRndEFycm93QW5nbGV9XSxCPTA7QjwkLmxlbmd0aDtCKyspe3ZhciBIPSRbQl0sUT1hLmFycm93U2hhcGVzW0EucHN0eWxlKEgubmFtZSsiLWFycm93LXNoYXBlIikudmFsdWVdLGo9QS5wc3R5bGUoIndpZHRoIikucGZWYWx1ZTtpZihRLnJvdWdoQ29sbGlkZSh0LGUseixILmFuZ2xlLHt4OkgueCx5OkgueX0saixmKSYmUS5jb2xsaWRlKHQsZSx6LEguYW5nbGUse3g6SC54LHk6SC55fSxqLGYpKXJldHVybiB2KEEpLCEwfWgmJmwubGVuZ3RoPjAmJih4KEYpLHgoUCkpfW8oYiwiY2hlY2tFZGdlIik7ZnVuY3Rpb24gdyhBLFMsXyl7cmV0dXJuIEdsKEEsUyxfKX1vKHcsInByZXByb3AiKTtmdW5jdGlvbiBDKEEsUyl7dmFyIF89QS5fcHJpdmF0ZSxJPXAsRDtTP0Q9UysiLSI6RD0iIixBLmJvdW5kaW5nQm94KCk7dmFyIGs9Xy5sYWJlbEJvdW5kc1tTfHwibWFpbiJdLEw9QS5wc3R5bGUoRCsibGFiZWwiKS52YWx1ZSxSPUEucHN0eWxlKCJ0ZXh0LWV2ZW50cyIpLnN0clZhbHVlPT09InllcyI7aWYoISghUnx8IUwpKXt2YXIgTz13KF8ucnNjcmF0Y2gsImxhYmVsWCIsUyksTT13KF8ucnNjcmF0Y2gsImxhYmVsWSIsUyksQj13KF8ucnNjcmF0Y2gsImxhYmVsQW5nbGUiLFMpLEY9QS5wc3R5bGUoRCsidGV4dC1tYXJnaW4teCIpLnBmVmFsdWUsUD1BLnBzdHlsZShEKyJ0ZXh0LW1hcmdpbi15IikucGZWYWx1ZSx6PWsueDEtSS1GLCQ9ay54MitJLUYsSD1rLnkxLUktUCxRPWsueTIrSS1QO2lmKEIpe3ZhciBqPU1hdGguY29zKEIpLGllPU1hdGguc2luKEIpLG5lPW8oZnVuY3Rpb24oc2UsdWUpe3JldHVybiBzZT1zZS1PLHVlPXVlLU0se3g6c2Uqai11ZSppZStPLHk6c2UqaWUrdWUqaitNfX0sInJvdGF0ZSIpLGxlPW5lKHosSCksaGU9bmUoeixRKSxLPW5lKCQsSCksWD1uZSgkLFEpLHRlPVtsZS54K0YsbGUueStQLEsueCtGLEsueStQLFgueCtGLFgueStQLGhlLngrRixoZS55K1BdO2lmKFVzKHQsZSx0ZSkpcmV0dXJuIHYoQSksITB9ZWxzZSBpZihLMShrLHQsZSkpcmV0dXJuIHYoQSksITB9fW8oQywiY2hlY2tMYWJlbCIpO2Zvcih2YXIgVD1zLmxlbmd0aC0xO1Q+PTA7VC0tKXt2YXIgRT1zW1RdO0UuaXNOb2RlKCk/eChFKXx8QyhFKTpiKEUpfHxDKEUpfHxDKEUsInNvdXJjZSIpfHxDKEUsInRhcmdldCIpfXJldHVybiBsfTtxcC5nZXRBbGxJbkJveD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLmdldENhY2hlZFpTb3J0ZWRFbGVzKCkuaW50ZXJhY3RpdmUsYT1bXSxzPU1hdGgubWluKHQsciksbD1NYXRoLm1heCh0LHIpLHU9TWF0aC5taW4oZSxuKSxoPU1hdGgubWF4KGUsbik7dD1zLHI9bCxlPXUsbj1oO2Zvcih2YXIgZj1Icyh7eDE6dCx5MTplLHgyOnIseTI6bn0pLGQ9MDtkPGkubGVuZ3RoO2QrKyl7dmFyIHA9aVtkXTtpZihwLmlzTm9kZSgpKXt2YXIgbT1wLGc9bS5ib3VuZGluZ0JveCh7aW5jbHVkZU5vZGVzOiEwLGluY2x1ZGVFZGdlczohMSxpbmNsdWRlTGFiZWxzOiExfSk7YUIoZixnKSYmIXltZShnLGYpJiZhLnB1c2gobSl9ZWxzZXt2YXIgeT1wLHY9eS5fcHJpdmF0ZSx4PXYucnNjcmF0Y2g7aWYoeC5zdGFydFghPW51bGwmJnguc3RhcnRZIT1udWxsJiYhSzEoZix4LnN0YXJ0WCx4LnN0YXJ0WSl8fHguZW5kWCE9bnVsbCYmeC5lbmRZIT1udWxsJiYhSzEoZix4LmVuZFgseC5lbmRZKSljb250aW51ZTtpZih4LmVkZ2VUeXBlPT09ImJlemllciJ8fHguZWRnZVR5cGU9PT0ibXVsdGliZXppZXIifHx4LmVkZ2VUeXBlPT09InNlbGYifHx4LmVkZ2VUeXBlPT09ImNvbXBvdW5kInx8eC5lZGdlVHlwZT09PSJzZWdtZW50cyJ8fHguZWRnZVR5cGU9PT0iaGF5c3RhY2siKXtmb3IodmFyIGI9di5yc3R5bGUuYmV6aWVyUHRzfHx2LnJzdHlsZS5saW5lUHRzfHx2LnJzdHlsZS5oYXlzdGFja1B0cyx3PSEwLEM9MDtDPGIubGVuZ3RoO0MrKylpZighJHFlKGYsYltDXSkpe3c9ITE7YnJlYWt9dyYmYS5wdXNoKHkpfWVsc2UoeC5lZGdlVHlwZT09PSJoYXlzdGFjayJ8fHguZWRnZVR5cGU9PT0ic3RyYWlnaHQiKSYmYS5wdXNoKHkpfX1yZXR1cm4gYX07QVM9e307QVMuY2FsY3VsYXRlQXJyb3dBbmdsZXM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fcHJpdmF0ZS5yc2NyYXRjaCxyPWUuZWRnZVR5cGU9PT0iaGF5c3RhY2siLG49ZS5lZGdlVHlwZT09PSJiZXppZXIiLGk9ZS5lZGdlVHlwZT09PSJtdWx0aWJlemllciIsYT1lLmVkZ2VUeXBlPT09InNlZ21lbnRzIixzPWUuZWRnZVR5cGU9PT0iY29tcG91bmQiLGw9ZS5lZGdlVHlwZT09PSJzZWxmIix1LGgsZixkLHAsbSx4LGI7aWYocj8oZj1lLmhheXN0YWNrUHRzWzBdLGQ9ZS5oYXlzdGFja1B0c1sxXSxwPWUuaGF5c3RhY2tQdHNbMl0sbT1lLmhheXN0YWNrUHRzWzNdKTooZj1lLmFycm93U3RhcnRYLGQ9ZS5hcnJvd1N0YXJ0WSxwPWUuYXJyb3dFbmRYLG09ZS5hcnJvd0VuZFkpLHg9ZS5taWRYLGI9ZS5taWRZLGEpdT1mLWUuc2VncHRzWzBdLGg9ZC1lLnNlZ3B0c1sxXTtlbHNlIGlmKGl8fHN8fGx8fG4pe3ZhciBnPWUuYWxscHRzLHk9b2EoZ1swXSxnWzJdLGdbNF0sLjEpLHY9b2EoZ1sxXSxnWzNdLGdbNV0sLjEpO3U9Zi15LGg9ZC12fWVsc2UgdT1mLXgsaD1kLWI7ZS5zcmNBcnJvd0FuZ2xlPUs2KHUsaCk7dmFyIHg9ZS5taWRYLGI9ZS5taWRZO2lmKHImJih4PShmK3ApLzIsYj0oZCttKS8yKSx1PXAtZixoPW0tZCxhKXt2YXIgZz1lLmFsbHB0cztpZihnLmxlbmd0aC8yJTI9PT0wKXt2YXIgdz1nLmxlbmd0aC8yLEM9dy0yO3U9Z1t3XS1nW0NdLGg9Z1t3KzFdLWdbQysxXX1lbHNlIGlmKGUuaXNSb3VuZCl1PWUubWlkVmVjdG9yWzFdLGg9LWUubWlkVmVjdG9yWzBdO2Vsc2V7dmFyIHc9Zy5sZW5ndGgvMi0xLEM9dy0yO3U9Z1t3XS1nW0NdLGg9Z1t3KzFdLWdbQysxXX19ZWxzZSBpZihpfHxzfHxsKXt2YXIgZz1lLmFsbHB0cyxUPWUuY3RybHB0cyxFLEEsUyxfO2lmKFQubGVuZ3RoLzIlMj09PTApe3ZhciBJPWcubGVuZ3RoLzItMSxEPUkrMixrPUQrMjtFPW9hKGdbSV0sZ1tEXSxnW2tdLDApLEE9b2EoZ1tJKzFdLGdbRCsxXSxnW2srMV0sMCksUz1vYShnW0ldLGdbRF0sZ1trXSwxZS00KSxfPW9hKGdbSSsxXSxnW0QrMV0sZ1trKzFdLDFlLTQpfWVsc2V7dmFyIEQ9Zy5sZW5ndGgvMi0xLEk9RC0yLGs9RCsyO0U9b2EoZ1tJXSxnW0RdLGdba10sLjQ5OTkpLEE9b2EoZ1tJKzFdLGdbRCsxXSxnW2srMV0sLjQ5OTkpLFM9b2EoZ1tJXSxnW0RdLGdba10sLjUpLF89b2EoZ1tJKzFdLGdbRCsxXSxnW2srMV0sLjUpfXU9Uy1FLGg9Xy1BfWlmKGUubWlkdGd0QXJyb3dBbmdsZT1LNih1LGgpLGUubWlkRGlzcFg9dSxlLm1pZERpc3BZPWgsdSo9LTEsaCo9LTEsYSl7dmFyIGc9ZS5hbGxwdHM7aWYoZy5sZW5ndGgvMiUyIT09MCl7aWYoIWUuaXNSb3VuZCl7dmFyIHc9Zy5sZW5ndGgvMi0xLEw9dysyO3U9LShnW0xdLWdbd10pLGg9LShnW0wrMV0tZ1t3KzFdKX19fWlmKGUubWlkc3JjQXJyb3dBbmdsZT1LNih1LGgpLGEpdT1wLWUuc2VncHRzW2Uuc2VncHRzLmxlbmd0aC0yXSxoPW0tZS5zZWdwdHNbZS5zZWdwdHMubGVuZ3RoLTFdO2Vsc2UgaWYoaXx8c3x8bHx8bil7dmFyIGc9ZS5hbGxwdHMsUj1nLmxlbmd0aCx5PW9hKGdbUi02XSxnW1ItNF0sZ1tSLTJdLC45KSx2PW9hKGdbUi01XSxnW1ItM10sZ1tSLTFdLC45KTt1PXAteSxoPW0tdn1lbHNlIHU9cC14LGg9bS1iO2UudGd0QXJyb3dBbmdsZT1LNih1LGgpfTtBUy5nZXRBcnJvd1dpZHRoPUFTLmdldEFycm93SGVpZ2h0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5hcnJvd1dpZHRoQ2FjaGU9dGhpcy5hcnJvd1dpZHRoQ2FjaGV8fHt9LG49clt0KyIsICIrZV07cmV0dXJuIG58fChuPU1hdGgubWF4KE1hdGgucG93KHQqMTMuMzcsLjkpLDI5KSplLHJbdCsiLCAiK2VdPW4sbil9O3FjPXt9LEpvPXt9LEwwZT1vKGZ1bmN0aW9uKGUscixuKXtuLng9ci54LWUueCxuLnk9ci55LWUueSxuLmxlbj1NYXRoLnNxcnQobi54Km4ueCtuLnkqbi55KSxuLm54PW4ueC9uLmxlbixuLm55PW4ueS9uLmxlbixuLmFuZz1NYXRoLmF0YW4yKG4ubnksbi5ueCl9LCJhc1ZlYyIpLENRZT1vKGZ1bmN0aW9uKGUscil7ci54PWUueCotMSxyLnk9ZS55Ki0xLHIubng9ZS5ueCotMSxyLm55PWUubnkqLTEsci5hbmc9ZS5hbmc+MD8tKE1hdGguUEktZS5hbmcpOk1hdGguUEkrZS5hbmd9LCJpbnZlcnRWZWMiKSxBUWU9byhmdW5jdGlvbihlLHIsbixpLGEpe2lmKGUhPT1EMGU/TDBlKHIsZSxxYyk6Q1FlKEpvLHFjKSxMMGUocixuLEpvKSxBMGU9cWMubngqSm8ubnktcWMubnkqSm8ubngsXzBlPXFjLm54KkpvLm54LXFjLm55Ki1Kby5ueSxLdT1NYXRoLmFzaW4oTWF0aC5tYXgoLTEsTWF0aC5taW4oMSxBMGUpKSksTWF0aC5hYnMoS3UpPDFlLTYpe0hQPXIueCxXUD1yLnksQnA9RzE9MDtyZXR1cm59RnA9MSxnUz0hMSxfMGU8MD9LdTwwP0t1PU1hdGguUEkrS3U6KEt1PU1hdGguUEktS3UsRnA9LTEsZ1M9ITApOkt1PjAmJihGcD0tMSxnUz0hMCksci5yYWRpdXMhPT12b2lkIDA/RzE9ci5yYWRpdXM6RzE9aSxNcD1LdS8yLGFTPU1hdGgubWluKHFjLmxlbi8yLEpvLmxlbi8yKSxhPyhXYz1NYXRoLmFicyhNYXRoLmNvcyhNcCkqRzEvTWF0aC5zaW4oTXApKSxXYz5hUz8oV2M9YVMsQnA9TWF0aC5hYnMoV2MqTWF0aC5zaW4oTXApL01hdGguY29zKE1wKSkpOkJwPUcxKTooV2M9TWF0aC5taW4oYVMsRzEpLEJwPU1hdGguYWJzKFdjKk1hdGguc2luKE1wKS9NYXRoLmNvcyhNcCkpKSxxUD1yLngrSm8ubngqV2MsWVA9ci55K0pvLm55KldjLEhQPXFQLUpvLm55KkJwKkZwLFdQPVlQK0pvLm54KkJwKkZwLGNnZT1yLngrcWMubngqV2MsdWdlPXIueStxYy5ueSpXYyxEMGU9cn0sImNhbGNDb3JuZXJBcmMiKTtvKGhnZSwiZHJhd1ByZXBhcmVkUm91bmRDb3JuZXIiKTtvKHZCLCJnZXRSb3VuZENvcm5lciIpO1ZhPXt9O1ZhLmZpbmRNaWRwdFB0c0V0Yz1mdW5jdGlvbih0LGUpe3ZhciByPWUucG9zUHRzLG49ZS5pbnRlcnNlY3Rpb25QdHMsaT1lLnZlY3Rvck5vcm1JbnZlcnNlLGEscz10LnBzdHlsZSgic291cmNlLWVuZHBvaW50IiksbD10LnBzdHlsZSgidGFyZ2V0LWVuZHBvaW50IiksdT1zLnVuaXRzIT1udWxsJiZsLnVuaXRzIT1udWxsLGg9byhmdW5jdGlvbihULEUsQSxTKXt2YXIgXz1TLUUsST1BLVQsRD1NYXRoLnNxcnQoSSpJK18qXyk7cmV0dXJue3g6LV8vRCx5OkkvRH19LCJyZWNhbGNWZWN0b3JOb3JtSW52ZXJzZSIpLGY9dC5wc3R5bGUoImVkZ2UtZGlzdGFuY2VzIikudmFsdWU7c3dpdGNoKGYpe2Nhc2Uibm9kZS1wb3NpdGlvbiI6YT1yO2JyZWFrO2Nhc2UiaW50ZXJzZWN0aW9uIjphPW47YnJlYWs7Y2FzZSJlbmRwb2ludHMiOntpZih1KXt2YXIgZD10aGlzLm1hbnVhbEVuZHB0VG9QeCh0LnNvdXJjZSgpWzBdLHMpLHA9X2koZCwyKSxtPXBbMF0sZz1wWzFdLHk9dGhpcy5tYW51YWxFbmRwdFRvUHgodC50YXJnZXQoKVswXSxsKSx2PV9pKHksMikseD12WzBdLGI9dlsxXSx3PXt4MTptLHkxOmcseDI6eCx5MjpifTtpPWgobSxnLHgsYiksYT13fWVsc2UgdW4oIkVkZ2UgIi5jb25jYXQodC5pZCgpLCIgaGFzIGVkZ2UtZGlzdGFuY2VzOmVuZHBvaW50cyBzcGVjaWZpZWQgd2l0aG91dCBtYW51YWwgZW5kcG9pbnRzIHNwZWNpZmllZCB2aWEgc291cmNlLWVuZHBvaW50IGFuZCB0YXJnZXQtZW5kcG9pbnQuICBGYWxsaW5nIGJhY2sgb24gZWRnZS1kaXN0YW5jZXM6aW50ZXJzZWN0aW9uIChkZWZhdWx0KS4iKSksYT1uO2JyZWFrfX1yZXR1cm57bWlkcHRQdHM6YSx2ZWN0b3JOb3JtSW52ZXJzZTppfX07VmEuZmluZEhheXN0YWNrUG9pbnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgcj10W2VdLG49ci5fcHJpdmF0ZSxpPW4ucnNjcmF0Y2g7aWYoIWkuaGF5c3RhY2spe3ZhciBhPU1hdGgucmFuZG9tKCkqMipNYXRoLlBJO2kuc291cmNlPXt4Ok1hdGguY29zKGEpLHk6TWF0aC5zaW4oYSl9LGE9TWF0aC5yYW5kb20oKSoyKk1hdGguUEksaS50YXJnZXQ9e3g6TWF0aC5jb3MoYSkseTpNYXRoLnNpbihhKX19dmFyIHM9bi5zb3VyY2UsbD1uLnRhcmdldCx1PXMucG9zaXRpb24oKSxoPWwucG9zaXRpb24oKSxmPXMud2lkdGgoKSxkPWwud2lkdGgoKSxwPXMuaGVpZ2h0KCksbT1sLmhlaWdodCgpLGc9ci5wc3R5bGUoImhheXN0YWNrLXJhZGl1cyIpLnZhbHVlLHk9Zy8yO2kuaGF5c3RhY2tQdHM9aS5hbGxwdHM9W2kuc291cmNlLngqZip5K3UueCxpLnNvdXJjZS55KnAqeSt1LnksaS50YXJnZXQueCpkKnkraC54LGkudGFyZ2V0LnkqbSp5K2gueV0saS5taWRYPShpLmFsbHB0c1swXStpLmFsbHB0c1syXSkvMixpLm1pZFk9KGkuYWxscHRzWzFdK2kuYWxscHRzWzNdKS8yLGkuZWRnZVR5cGU9ImhheXN0YWNrIixpLmhheXN0YWNrPSEwLHRoaXMuc3RvcmVFZGdlUHJvamVjdGlvbnMociksdGhpcy5jYWxjdWxhdGVBcnJvd0FuZ2xlcyhyKSx0aGlzLnJlY2FsY3VsYXRlRWRnZUxhYmVsUHJvamVjdGlvbnMociksdGhpcy5jYWxjdWxhdGVMYWJlbEFuZ2xlcyhyKX19O1ZhLmZpbmRTZWdtZW50c1BvaW50cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX3ByaXZhdGUucnNjcmF0Y2gsbj10LnBzdHlsZSgic2VnbWVudC13ZWlnaHRzIiksaT10LnBzdHlsZSgic2VnbWVudC1kaXN0YW5jZXMiKSxhPXQucHN0eWxlKCJzZWdtZW50LXJhZGlpIikscz10LnBzdHlsZSgicmFkaXVzLXR5cGUiKSxsPU1hdGgubWluKG4ucGZWYWx1ZS5sZW5ndGgsaS5wZlZhbHVlLmxlbmd0aCksdT1hLnBmVmFsdWVbYS5wZlZhbHVlLmxlbmd0aC0xXSxoPXMucGZWYWx1ZVtzLnBmVmFsdWUubGVuZ3RoLTFdO3IuZWRnZVR5cGU9InNlZ21lbnRzIixyLnNlZ3B0cz1bXSxyLnJhZGlpPVtdLHIuaXNBcmNSYWRpdXM9W107Zm9yKHZhciBmPTA7ZjxsO2YrKyl7dmFyIGQ9bi5wZlZhbHVlW2ZdLHA9aS5wZlZhbHVlW2ZdLG09MS1kLGc9ZCx5PXRoaXMuZmluZE1pZHB0UHRzRXRjKHQsZSksdj15Lm1pZHB0UHRzLHg9eS52ZWN0b3JOb3JtSW52ZXJzZSxiPXt4OnYueDEqbSt2LngyKmcseTp2LnkxKm0rdi55MipnfTtyLnNlZ3B0cy5wdXNoKGIueCt4LngqcCxiLnkreC55KnApLHIucmFkaWkucHVzaChhLnBmVmFsdWVbZl0hPT12b2lkIDA/YS5wZlZhbHVlW2ZdOnUpLHIuaXNBcmNSYWRpdXMucHVzaCgocy5wZlZhbHVlW2ZdIT09dm9pZCAwP3MucGZWYWx1ZVtmXTpoKT09PSJhcmMtcmFkaXVzIil9fTtWYS5maW5kTG9vcFBvaW50cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10Ll9wcml2YXRlLnJzY3JhdGNoLGE9ZS5kaXJDb3VudHMscz1lLnNyY1BvcyxsPXQucHN0eWxlKCJjb250cm9sLXBvaW50LWRpc3RhbmNlcyIpLHU9bD9sLnBmVmFsdWVbMF06dm9pZCAwLGg9dC5wc3R5bGUoImxvb3AtZGlyZWN0aW9uIikucGZWYWx1ZSxmPXQucHN0eWxlKCJsb29wLXN3ZWVwIikucGZWYWx1ZSxkPXQucHN0eWxlKCJjb250cm9sLXBvaW50LXN0ZXAtc2l6ZSIpLnBmVmFsdWU7aS5lZGdlVHlwZT0ic2VsZiI7dmFyIHA9cixtPWQ7biYmKHA9MCxtPXUpO3ZhciBnPWgtTWF0aC5QSS8yLHk9Zy1mLzIsdj1nK2YvMix4PWgrIl8iK2Y7cD1hW3hdPT09dm9pZCAwP2FbeF09MDorK2FbeF0saS5jdHJscHRzPVtzLngrTWF0aC5jb3MoeSkqMS40Km0qKHAvMysxKSxzLnkrTWF0aC5zaW4oeSkqMS40Km0qKHAvMysxKSxzLngrTWF0aC5jb3ModikqMS40Km0qKHAvMysxKSxzLnkrTWF0aC5zaW4odikqMS40Km0qKHAvMysxKV19O1ZhLmZpbmRDb21wb3VuZExvb3BQb2ludHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dC5fcHJpdmF0ZS5yc2NyYXRjaDtpLmVkZ2VUeXBlPSJjb21wb3VuZCI7dmFyIGE9ZS5zcmNQb3Mscz1lLnRndFBvcyxsPWUuc3JjVyx1PWUuc3JjSCxoPWUudGd0VyxmPWUudGd0SCxkPXQucHN0eWxlKCJjb250cm9sLXBvaW50LXN0ZXAtc2l6ZSIpLnBmVmFsdWUscD10LnBzdHlsZSgiY29udHJvbC1wb2ludC1kaXN0YW5jZXMiKSxtPXA/cC5wZlZhbHVlWzBdOnZvaWQgMCxnPXIseT1kO24mJihnPTAseT1tKTt2YXIgdj01MCx4PXt4OmEueC1sLzIseTphLnktdS8yfSxiPXt4OnMueC1oLzIseTpzLnktZi8yfSx3PXt4Ok1hdGgubWluKHgueCxiLngpLHk6TWF0aC5taW4oeC55LGIueSl9LEM9LjUsVD1NYXRoLm1heChDLE1hdGgubG9nKGwqLjAxKSksRT1NYXRoLm1heChDLE1hdGgubG9nKGgqLjAxKSk7aS5jdHJscHRzPVt3Lngsdy55LSgxK01hdGgucG93KHYsMS4xMikvMTAwKSp5KihnLzMrMSkqVCx3LngtKDErTWF0aC5wb3codiwxLjEyKS8xMDApKnkqKGcvMysxKSpFLHcueV19O1ZhLmZpbmRTdHJhaWdodEVkZ2VQb2ludHM9ZnVuY3Rpb24odCl7dC5fcHJpdmF0ZS5yc2NyYXRjaC5lZGdlVHlwZT0ic3RyYWlnaHQifTtWYS5maW5kQmV6aWVyUG9pbnRzPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9dC5fcHJpdmF0ZS5yc2NyYXRjaCxzPXQucHN0eWxlKCJjb250cm9sLXBvaW50LXN0ZXAtc2l6ZSIpLnBmVmFsdWUsbD10LnBzdHlsZSgiY29udHJvbC1wb2ludC1kaXN0YW5jZXMiKSx1PXQucHN0eWxlKCJjb250cm9sLXBvaW50LXdlaWdodHMiKSxoPWwmJnU/TWF0aC5taW4obC52YWx1ZS5sZW5ndGgsdS52YWx1ZS5sZW5ndGgpOjEsZj1sP2wucGZWYWx1ZVswXTp2b2lkIDAsZD11LnZhbHVlWzBdLHA9bjthLmVkZ2VUeXBlPXA/Im11bHRpYmV6aWVyIjoiYmV6aWVyIixhLmN0cmxwdHM9W107Zm9yKHZhciBtPTA7bTxoO20rKyl7dmFyIGc9KC41LWUuZWxlcy5sZW5ndGgvMityKSpzKihpPy0xOjEpLHk9dm9pZCAwLHY9bW1lKGcpO3AmJihmPWw/bC5wZlZhbHVlW21dOnMsZD11LnZhbHVlW21dKSxuP3k9Zjp5PWYhPT12b2lkIDA/dipmOnZvaWQgMDt2YXIgeD15IT09dm9pZCAwP3k6ZyxiPTEtZCx3PWQsQz10aGlzLmZpbmRNaWRwdFB0c0V0Yyh0LGUpLFQ9Qy5taWRwdFB0cyxFPUMudmVjdG9yTm9ybUludmVyc2UsQT17eDpULngxKmIrVC54Mip3LHk6VC55MSpiK1QueTIqd307YS5jdHJscHRzLnB1c2goQS54K0UueCp4LEEueStFLnkqeCl9fTtWYS5maW5kVGF4aVBvaW50cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX3ByaXZhdGUucnNjcmF0Y2g7ci5lZGdlVHlwZT0ic2VnbWVudHMiO3ZhciBuPSJ2ZXJ0aWNhbCIsaT0iaG9yaXpvbnRhbCIsYT0ibGVmdHdhcmQiLHM9InJpZ2h0d2FyZCIsbD0iZG93bndhcmQiLHU9InVwd2FyZCIsaD0iYXV0byIsZj1lLnBvc1B0cyxkPWUuc3JjVyxwPWUuc3JjSCxtPWUudGd0VyxnPWUudGd0SCx5PXQucHN0eWxlKCJlZGdlLWRpc3RhbmNlcyIpLnZhbHVlLHY9eSE9PSJub2RlLXBvc2l0aW9uIix4PXQucHN0eWxlKCJ0YXhpLWRpcmVjdGlvbiIpLnZhbHVlLGI9eCx3PXQucHN0eWxlKCJ0YXhpLXR1cm4iKSxDPXcudW5pdHM9PT0iJSIsVD13LnBmVmFsdWUsRT1UPDAsQT10LnBzdHlsZSgidGF4aS10dXJuLW1pbi1kaXN0YW5jZSIpLnBmVmFsdWUsUz12PyhkK20pLzI6MCxfPXY/KHArZykvMjowLEk9Zi54Mi1mLngxLEQ9Zi55Mi1mLnkxLGs9byhmdW5jdGlvbihxLHBlKXtyZXR1cm4gcT4wP01hdGgubWF4KHEtcGUsMCk6TWF0aC5taW4ocStwZSwwKX0sInN1YkRXSCIpLEw9ayhJLFMpLFI9ayhELF8pLE89ITE7Yj09PWg/eD1NYXRoLmFicyhMKT5NYXRoLmFicyhSKT9pOm46Yj09PXV8fGI9PT1sPyh4PW4sTz0hMCk6KGI9PT1hfHxiPT09cykmJih4PWksTz0hMCk7dmFyIE09eD09PW4sQj1NP1I6TCxGPU0/RDpJLFA9bW1lKEYpLHo9ITE7IShPJiYoQ3x8RSkpJiYoYj09PWwmJkY8MHx8Yj09PXUmJkY+MHx8Yj09PWEmJkY+MHx8Yj09PXMmJkY8MCkmJihQKj0tMSxCPVAqTWF0aC5hYnMoQiksej0hMCk7dmFyICQ7aWYoQyl7dmFyIEg9VDwwPzErVDpUOyQ9SCpCfWVsc2V7dmFyIFE9VDwwP0I6MDskPVErVCpQfXZhciBqPW8oZnVuY3Rpb24ocSl7cmV0dXJuIE1hdGguYWJzKHEpPEF8fE1hdGguYWJzKHEpPj1NYXRoLmFicyhCKX0sImdldElzVG9vQ2xvc2UiKSxpZT1qKCQpLG5lPWooTWF0aC5hYnMoQiktTWF0aC5hYnMoJCkpLGxlPWllfHxuZTtpZihsZSYmIXopaWYoTSl7dmFyIGhlPU1hdGguYWJzKEYpPD1wLzIsSz1NYXRoLmFicyhJKTw9bS8yO2lmKGhlKXt2YXIgWD0oZi54MStmLngyKS8yLHRlPWYueTEsSj1mLnkyO3Iuc2VncHRzPVtYLHRlLFgsSl19ZWxzZSBpZihLKXt2YXIgc2U9KGYueTErZi55MikvMix1ZT1mLngxLFo9Zi54MjtyLnNlZ3B0cz1bdWUsc2UsWixzZV19ZWxzZSByLnNlZ3B0cz1bZi54MSxmLnkyXX1lbHNle3ZhciBTZT1NYXRoLmFicyhGKTw9ZC8yLGNlPU1hdGguYWJzKEQpPD1nLzI7aWYoU2Upe3ZhciBhZT0oZi55MStmLnkyKS8yLE9lPWYueDEsZ2U9Zi54MjtyLnNlZ3B0cz1bT2UsYWUsZ2UsYWVdfWVsc2UgaWYoY2Upe3ZhciB6ZT0oZi54MStmLngyKS8yLEhlPWYueTEsJGU9Zi55MjtyLnNlZ3B0cz1bemUsSGUsemUsJGVdfWVsc2Ugci5zZWdwdHM9W2YueDIsZi55MV19ZWxzZSBpZihNKXt2YXIgUmU9Zi55MSskKyh2P3AvMipQOjApLEllPWYueDEsYmU9Zi54MjtyLnNlZ3B0cz1bSWUsUmUsYmUsUmVdfWVsc2V7dmFyIFc9Zi54MSskKyh2P2QvMipQOjApLGRlPWYueTEscmU9Zi55MjtyLnNlZ3B0cz1bVyxkZSxXLHJlXX1pZihyLmlzUm91bmQpe3ZhciBvZT10LnBzdHlsZSgidGF4aS1yYWRpdXMiKS52YWx1ZSxWPXQucHN0eWxlKCJyYWRpdXMtdHlwZSIpLnZhbHVlWzBdPT09ImFyYy1yYWRpdXMiO3IucmFkaWk9bmV3IEFycmF5KHIuc2VncHRzLmxlbmd0aC8yKS5maWxsKG9lKSxyLmlzQXJjUmFkaXVzPW5ldyBBcnJheShyLnNlZ3B0cy5sZW5ndGgvMikuZmlsbChWKX19O1ZhLnRyeVRvQ29ycmVjdEludmFsaWRQb2ludHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9wcml2YXRlLnJzY3JhdGNoO2lmKHIuZWRnZVR5cGU9PT0iYmV6aWVyIil7dmFyIG49ZS5zcmNQb3MsaT1lLnRndFBvcyxhPWUuc3JjVyxzPWUuc3JjSCxsPWUudGd0Vyx1PWUudGd0SCxoPWUuc3JjU2hhcGUsZj1lLnRndFNoYXBlLGQ9ZS5zcmNDb3JuZXJSYWRpdXMscD1lLnRndENvcm5lclJhZGl1cyxtPWUuc3JjUnMsZz1lLnRndFJzLHk9IUN0KHIuc3RhcnRYKXx8IUN0KHIuc3RhcnRZKSx2PSFDdChyLmFycm93U3RhcnRYKXx8IUN0KHIuYXJyb3dTdGFydFkpLHg9IUN0KHIuZW5kWCl8fCFDdChyLmVuZFkpLGI9IUN0KHIuYXJyb3dFbmRYKXx8IUN0KHIuYXJyb3dFbmRZKSx3PTMsQz10aGlzLmdldEFycm93V2lkdGgodC5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSx0LnBzdHlsZSgiYXJyb3ctc2NhbGUiKS52YWx1ZSkqdGhpcy5hcnJvd1NoYXBlV2lkdGgsVD13KkMsRT1HcCh7eDpyLmN0cmxwdHNbMF0seTpyLmN0cmxwdHNbMV19LHt4OnIuc3RhcnRYLHk6ci5zdGFydFl9KSxBPUU8VCxTPUdwKHt4OnIuY3RybHB0c1swXSx5OnIuY3RybHB0c1sxXX0se3g6ci5lbmRYLHk6ci5lbmRZfSksXz1TPFQsST0hMTtpZih5fHx2fHxBKXtJPSEwO3ZhciBEPXt4OnIuY3RybHB0c1swXS1uLngseTpyLmN0cmxwdHNbMV0tbi55fSxrPU1hdGguc3FydChELngqRC54K0QueSpELnkpLEw9e3g6RC54L2sseTpELnkva30sUj1NYXRoLm1heChhLHMpLE89e3g6ci5jdHJscHRzWzBdK0wueCoyKlIseTpyLmN0cmxwdHNbMV0rTC55KjIqUn0sTT1oLmludGVyc2VjdExpbmUobi54LG4ueSxhLHMsTy54LE8ueSwwLGQsbSk7QT8oci5jdHJscHRzWzBdPXIuY3RybHB0c1swXStMLngqKFQtRSksci5jdHJscHRzWzFdPXIuY3RybHB0c1sxXStMLnkqKFQtRSkpOihyLmN0cmxwdHNbMF09TVswXStMLngqVCxyLmN0cmxwdHNbMV09TVsxXStMLnkqVCl9aWYoeHx8Ynx8Xyl7ST0hMDt2YXIgQj17eDpyLmN0cmxwdHNbMF0taS54LHk6ci5jdHJscHRzWzFdLWkueX0sRj1NYXRoLnNxcnQoQi54KkIueCtCLnkqQi55KSxQPXt4OkIueC9GLHk6Qi55L0Z9LHo9TWF0aC5tYXgoYSxzKSwkPXt4OnIuY3RybHB0c1swXStQLngqMip6LHk6ci5jdHJscHRzWzFdK1AueSoyKnp9LEg9Zi5pbnRlcnNlY3RMaW5lKGkueCxpLnksbCx1LCQueCwkLnksMCxwLGcpO18/KHIuY3RybHB0c1swXT1yLmN0cmxwdHNbMF0rUC54KihULVMpLHIuY3RybHB0c1sxXT1yLmN0cmxwdHNbMV0rUC55KihULVMpKTooci5jdHJscHRzWzBdPUhbMF0rUC54KlQsci5jdHJscHRzWzFdPUhbMV0rUC55KlQpfUkmJnRoaXMuZmluZEVuZHBvaW50cyh0KX19O1ZhLnN0b3JlQWxscHRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX3ByaXZhdGUucnNjcmF0Y2g7aWYoZS5lZGdlVHlwZT09PSJtdWx0aWJlemllciJ8fGUuZWRnZVR5cGU9PT0iYmV6aWVyInx8ZS5lZGdlVHlwZT09PSJzZWxmInx8ZS5lZGdlVHlwZT09PSJjb21wb3VuZCIpe2UuYWxscHRzPVtdLGUuYWxscHRzLnB1c2goZS5zdGFydFgsZS5zdGFydFkpO2Zvcih2YXIgcj0wO3IrMTxlLmN0cmxwdHMubGVuZ3RoO3IrPTIpZS5hbGxwdHMucHVzaChlLmN0cmxwdHNbcl0sZS5jdHJscHRzW3IrMV0pLHIrMzxlLmN0cmxwdHMubGVuZ3RoJiZlLmFsbHB0cy5wdXNoKChlLmN0cmxwdHNbcl0rZS5jdHJscHRzW3IrMl0pLzIsKGUuY3RybHB0c1tyKzFdK2UuY3RybHB0c1tyKzNdKS8yKTtlLmFsbHB0cy5wdXNoKGUuZW5kWCxlLmVuZFkpO3ZhciBuLGk7ZS5jdHJscHRzLmxlbmd0aC8yJTI9PT0wPyhuPWUuYWxscHRzLmxlbmd0aC8yLTEsZS5taWRYPWUuYWxscHRzW25dLGUubWlkWT1lLmFsbHB0c1tuKzFdKToobj1lLmFsbHB0cy5sZW5ndGgvMi0zLGk9LjUsZS5taWRYPW9hKGUuYWxscHRzW25dLGUuYWxscHRzW24rMl0sZS5hbGxwdHNbbis0XSxpKSxlLm1pZFk9b2EoZS5hbGxwdHNbbisxXSxlLmFsbHB0c1tuKzNdLGUuYWxscHRzW24rNV0saSkpfWVsc2UgaWYoZS5lZGdlVHlwZT09PSJzdHJhaWdodCIpZS5hbGxwdHM9W2Uuc3RhcnRYLGUuc3RhcnRZLGUuZW5kWCxlLmVuZFldLGUubWlkWD0oZS5zdGFydFgrZS5lbmRYK2UuYXJyb3dTdGFydFgrZS5hcnJvd0VuZFgpLzQsZS5taWRZPShlLnN0YXJ0WStlLmVuZFkrZS5hcnJvd1N0YXJ0WStlLmFycm93RW5kWSkvNDtlbHNlIGlmKGUuZWRnZVR5cGU9PT0ic2VnbWVudHMiKXtpZihlLmFsbHB0cz1bXSxlLmFsbHB0cy5wdXNoKGUuc3RhcnRYLGUuc3RhcnRZKSxlLmFsbHB0cy5wdXNoLmFwcGx5KGUuYWxscHRzLGUuc2VncHRzKSxlLmFsbHB0cy5wdXNoKGUuZW5kWCxlLmVuZFkpLGUuaXNSb3VuZCl7ZS5yb3VuZENvcm5lcnM9W107Zm9yKHZhciBhPTI7YSszPGUuYWxscHRzLmxlbmd0aDthKz0yKXt2YXIgcz1lLnJhZGlpW2EvMi0xXSxsPWUuaXNBcmNSYWRpdXNbYS8yLTFdO2Uucm91bmRDb3JuZXJzLnB1c2godkIoe3g6ZS5hbGxwdHNbYS0yXSx5OmUuYWxscHRzW2EtMV19LHt4OmUuYWxscHRzW2FdLHk6ZS5hbGxwdHNbYSsxXSxyYWRpdXM6c30se3g6ZS5hbGxwdHNbYSsyXSx5OmUuYWxscHRzW2ErM119LHMsbCkpfX1pZihlLnNlZ3B0cy5sZW5ndGglND09PTApe3ZhciB1PWUuc2VncHRzLmxlbmd0aC8yLGg9dS0yO2UubWlkWD0oZS5zZWdwdHNbaF0rZS5zZWdwdHNbdV0pLzIsZS5taWRZPShlLnNlZ3B0c1toKzFdK2Uuc2VncHRzW3UrMV0pLzJ9ZWxzZXt2YXIgZj1lLnNlZ3B0cy5sZW5ndGgvMi0xO2lmKCFlLmlzUm91bmQpZS5taWRYPWUuc2VncHRzW2ZdLGUubWlkWT1lLnNlZ3B0c1tmKzFdO2Vsc2V7dmFyIGQ9e3g6ZS5zZWdwdHNbZl0seTplLnNlZ3B0c1tmKzFdfSxwPWUucm91bmRDb3JuZXJzW2YvMl0sbT1bZC54LXAuY3gsZC55LXAuY3ldLGc9cC5yYWRpdXMvTWF0aC5zcXJ0KE1hdGgucG93KG1bMF0sMikrTWF0aC5wb3cobVsxXSwyKSk7bT1tLm1hcChmdW5jdGlvbih5KXtyZXR1cm4geSpnfSksZS5taWRYPXAuY3grbVswXSxlLm1pZFk9cC5jeSttWzFdLGUubWlkVmVjdG9yPW19fX19O1ZhLmNoZWNrRm9ySW52YWxpZEVkZ2VXYXJuaW5nPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0uX3ByaXZhdGUucnNjcmF0Y2g7ZS5ub2Rlc092ZXJsYXB8fEN0KGUuc3RhcnRYKSYmQ3QoZS5zdGFydFkpJiZDdChlLmVuZFgpJiZDdChlLmVuZFkpP2UubG9nZ2VkRXJyPSExOmUubG9nZ2VkRXJyfHwoZS5sb2dnZWRFcnI9ITAsdW4oIkVkZ2UgYCIrdC5pZCgpKyJgIGhhcyBpbnZhbGlkIGVuZHBvaW50cyBhbmQgc28gaXQgaXMgaW1wb3NzaWJsZSB0byBkcmF3LiAgQWRqdXN0IHlvdXIgZWRnZSBzdHlsZSAoZS5nLiBjb250cm9sIHBvaW50cykgYWNjb3JkaW5nbHkgb3IgdXNlIGFuIGFsdGVybmF0aXZlIGVkZ2UgdHlwZS4gIFRoaXMgaXMgZXhwZWN0ZWQgYmVoYXZpb3VyIHdoZW4gdGhlIHNvdXJjZSBub2RlIGFuZCB0aGUgdGFyZ2V0IG5vZGUgb3ZlcmxhcC4iKSl9O1ZhLmZpbmRFZGdlQ29udHJvbFBvaW50cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKCEoIXR8fHQubGVuZ3RoPT09MCkpe2Zvcih2YXIgcj10aGlzLG49ci5jeSxpPW4uaGFzQ29tcG91bmROb2RlcygpLGE9e21hcDpuZXcgWGMsZ2V0Om8oZnVuY3Rpb24oQSl7dmFyIFM9dGhpcy5tYXAuZ2V0KEFbMF0pO3JldHVybiBTIT1udWxsP1MuZ2V0KEFbMV0pOm51bGx9LCJnZXQiKSxzZXQ6byhmdW5jdGlvbihBLFMpe3ZhciBfPXRoaXMubWFwLmdldChBWzBdKTtfPT1udWxsJiYoXz1uZXcgWGMsdGhpcy5tYXAuc2V0KEFbMF0sXykpLF8uc2V0KEFbMV0sUyl9LCJzZXQiKX0scz1bXSxsPVtdLHU9MDt1PHQubGVuZ3RoO3UrKyl7dmFyIGg9dFt1XSxmPWguX3ByaXZhdGUsZD1oLnBzdHlsZSgiY3VydmUtc3R5bGUiKS52YWx1ZTtpZighKGgucmVtb3ZlZCgpfHwhaC50YWtlc1VwU3BhY2UoKSkpe2lmKGQ9PT0iaGF5c3RhY2siKXtsLnB1c2goaCk7Y29udGludWV9dmFyIHA9ZD09PSJ1bmJ1bmRsZWQtYmV6aWVyInx8ZC5lbmRzV2l0aCgic2VnbWVudHMiKXx8ZD09PSJzdHJhaWdodCJ8fGQ9PT0ic3RyYWlnaHQtdHJpYW5nbGUifHxkLmVuZHNXaXRoKCJ0YXhpIiksbT1kPT09InVuYnVuZGxlZC1iZXppZXIifHxkPT09ImJlemllciIsZz1mLnNvdXJjZSx5PWYudGFyZ2V0LHY9Zy5wb29sSW5kZXgoKSx4PXkucG9vbEluZGV4KCksYj1bdix4XS5zb3J0KCksdz1hLmdldChiKTt3PT1udWxsJiYodz17ZWxlczpbXX0sYS5zZXQoYix3KSxzLnB1c2goYikpLHcuZWxlcy5wdXNoKGgpLHAmJih3Lmhhc1VuYnVuZGxlZD0hMCksbSYmKHcuaGFzQmV6aWVyPSEwKX19Zm9yKHZhciBDPW8oZnVuY3Rpb24oQSl7dmFyIFM9c1tBXSxfPWEuZ2V0KFMpLEk9dm9pZCAwO2lmKCFfLmhhc1VuYnVuZGxlZCl7dmFyIEQ9Xy5lbGVzWzBdLnBhcmFsbGVsRWRnZXMoKS5maWx0ZXIoZnVuY3Rpb24oVyl7cmV0dXJuIFcuaXNCdW5kbGVkQmV6aWVyKCl9KTtuQihfLmVsZXMpLEQuZm9yRWFjaChmdW5jdGlvbihXKXtyZXR1cm4gXy5lbGVzLnB1c2goVyl9KSxfLmVsZXMuc29ydChmdW5jdGlvbihXLGRlKXtyZXR1cm4gVy5wb29sSW5kZXgoKS1kZS5wb29sSW5kZXgoKX0pfXZhciBrPV8uZWxlc1swXSxMPWsuc291cmNlKCksUj1rLnRhcmdldCgpO2lmKEwucG9vbEluZGV4KCk+Ui5wb29sSW5kZXgoKSl7dmFyIE89TDtMPVIsUj1PfXZhciBNPV8uc3JjUG9zPUwucG9zaXRpb24oKSxCPV8udGd0UG9zPVIucG9zaXRpb24oKSxGPV8uc3JjVz1MLm91dGVyV2lkdGgoKSxQPV8uc3JjSD1MLm91dGVySGVpZ2h0KCksej1fLnRndFc9Ui5vdXRlcldpZHRoKCksJD1fLnRndEg9Ui5vdXRlckhlaWdodCgpLEg9Xy5zcmNTaGFwZT1yLm5vZGVTaGFwZXNbZS5nZXROb2RlU2hhcGUoTCldLFE9Xy50Z3RTaGFwZT1yLm5vZGVTaGFwZXNbZS5nZXROb2RlU2hhcGUoUildLGo9Xy5zcmNDb3JuZXJSYWRpdXM9TC5wc3R5bGUoImNvcm5lci1yYWRpdXMiKS52YWx1ZT09PSJhdXRvIj8iYXV0byI6TC5wc3R5bGUoImNvcm5lci1yYWRpdXMiKS5wZlZhbHVlLGllPV8udGd0Q29ybmVyUmFkaXVzPVIucHN0eWxlKCJjb3JuZXItcmFkaXVzIikudmFsdWU9PT0iYXV0byI/ImF1dG8iOlIucHN0eWxlKCJjb3JuZXItcmFkaXVzIikucGZWYWx1ZSxuZT1fLnRndFJzPVIuX3ByaXZhdGUucnNjcmF0Y2gsbGU9Xy5zcmNScz1MLl9wcml2YXRlLnJzY3JhdGNoO18uZGlyQ291bnRzPXtub3J0aDowLHdlc3Q6MCxzb3V0aDowLGVhc3Q6MCxub3J0aHdlc3Q6MCxzb3V0aHdlc3Q6MCxub3J0aGVhc3Q6MCxzb3V0aGVhc3Q6MH07Zm9yKHZhciBoZT0wO2hlPF8uZWxlcy5sZW5ndGg7aGUrKyl7dmFyIEs9Xy5lbGVzW2hlXSxYPUtbMF0uX3ByaXZhdGUucnNjcmF0Y2gsdGU9Sy5wc3R5bGUoImN1cnZlLXN0eWxlIikudmFsdWUsSj10ZT09PSJ1bmJ1bmRsZWQtYmV6aWVyInx8dGUuZW5kc1dpdGgoInNlZ21lbnRzIil8fHRlLmVuZHNXaXRoKCJ0YXhpIiksc2U9IUwuc2FtZShLLnNvdXJjZSgpKTtpZighXy5jYWxjdWxhdGVkSW50ZXJzZWN0aW9uJiZMIT09UiYmKF8uaGFzQmV6aWVyfHxfLmhhc1VuYnVuZGxlZCkpe18uY2FsY3VsYXRlZEludGVyc2VjdGlvbj0hMDt2YXIgdWU9SC5pbnRlcnNlY3RMaW5lKE0ueCxNLnksRixQLEIueCxCLnksMCxqLGxlKSxaPV8uc3JjSW50bj11ZSxTZT1RLmludGVyc2VjdExpbmUoQi54LEIueSx6LCQsTS54LE0ueSwwLGllLG5lKSxjZT1fLnRndEludG49U2UsYWU9Xy5pbnRlcnNlY3Rpb25QdHM9e3gxOnVlWzBdLHgyOlNlWzBdLHkxOnVlWzFdLHkyOlNlWzFdfSxPZT1fLnBvc1B0cz17eDE6TS54LHgyOkIueCx5MTpNLnkseTI6Qi55fSxnZT1TZVsxXS11ZVsxXSx6ZT1TZVswXS11ZVswXSxIZT1NYXRoLnNxcnQoemUqemUrZ2UqZ2UpLCRlPV8udmVjdG9yPXt4OnplLHk6Z2V9LFJlPV8udmVjdG9yTm9ybT17eDokZS54L0hlLHk6JGUueS9IZX0sSWU9e3g6LVJlLnkseTpSZS54fTtfLm5vZGVzT3ZlcmxhcD0hQ3QoSGUpfHxRLmNoZWNrUG9pbnQodWVbMF0sdWVbMV0sMCx6LCQsQi54LEIueSxpZSxuZSl8fEguY2hlY2tQb2ludChTZVswXSxTZVsxXSwwLEYsUCxNLngsTS55LGosbGUpLF8udmVjdG9yTm9ybUludmVyc2U9SWUsST17bm9kZXNPdmVybGFwOl8ubm9kZXNPdmVybGFwLGRpckNvdW50czpfLmRpckNvdW50cyxjYWxjdWxhdGVkSW50ZXJzZWN0aW9uOiEwLGhhc0JlemllcjpfLmhhc0JlemllcixoYXNVbmJ1bmRsZWQ6Xy5oYXNVbmJ1bmRsZWQsZWxlczpfLmVsZXMsc3JjUG9zOkIsc3JjUnM6bmUsdGd0UG9zOk0sdGd0UnM6bGUsc3JjVzp6LHNyY0g6JCx0Z3RXOkYsdGd0SDpQLHNyY0ludG46Y2UsdGd0SW50bjpaLHNyY1NoYXBlOlEsdGd0U2hhcGU6SCxwb3NQdHM6e3gxOk9lLngyLHkxOk9lLnkyLHgyOk9lLngxLHkyOk9lLnkxfSxpbnRlcnNlY3Rpb25QdHM6e3gxOmFlLngyLHkxOmFlLnkyLHgyOmFlLngxLHkyOmFlLnkxfSx2ZWN0b3I6e3g6LSRlLngseTotJGUueX0sdmVjdG9yTm9ybTp7eDotUmUueCx5Oi1SZS55fSx2ZWN0b3JOb3JtSW52ZXJzZTp7eDotSWUueCx5Oi1JZS55fX19dmFyIGJlPXNlP0k6XztYLm5vZGVzT3ZlcmxhcD1iZS5ub2Rlc092ZXJsYXAsWC5zcmNJbnRuPWJlLnNyY0ludG4sWC50Z3RJbnRuPWJlLnRndEludG4sWC5pc1JvdW5kPXRlLnN0YXJ0c1dpdGgoInJvdW5kIiksaSYmKEwuaXNQYXJlbnQoKXx8TC5pc0NoaWxkKCl8fFIuaXNQYXJlbnQoKXx8Ui5pc0NoaWxkKCkpJiYoTC5wYXJlbnRzKCkuYW55U2FtZShSKXx8Ui5wYXJlbnRzKCkuYW55U2FtZShMKXx8TC5zYW1lKFIpJiZMLmlzUGFyZW50KCkpP2UuZmluZENvbXBvdW5kTG9vcFBvaW50cyhLLGJlLGhlLEopOkw9PT1SP2UuZmluZExvb3BQb2ludHMoSyxiZSxoZSxKKTp0ZS5lbmRzV2l0aCgic2VnbWVudHMiKT9lLmZpbmRTZWdtZW50c1BvaW50cyhLLGJlKTp0ZS5lbmRzV2l0aCgidGF4aSIpP2UuZmluZFRheGlQb2ludHMoSyxiZSk6dGU9PT0ic3RyYWlnaHQifHwhSiYmXy5lbGVzLmxlbmd0aCUyPT09MSYmaGU9PT1NYXRoLmZsb29yKF8uZWxlcy5sZW5ndGgvMik/ZS5maW5kU3RyYWlnaHRFZGdlUG9pbnRzKEspOmUuZmluZEJlemllclBvaW50cyhLLGJlLGhlLEosc2UpLGUuZmluZEVuZHBvaW50cyhLKSxlLnRyeVRvQ29ycmVjdEludmFsaWRQb2ludHMoSyxiZSksZS5jaGVja0ZvckludmFsaWRFZGdlV2FybmluZyhLKSxlLnN0b3JlQWxscHRzKEspLGUuc3RvcmVFZGdlUHJvamVjdGlvbnMoSyksZS5jYWxjdWxhdGVBcnJvd0FuZ2xlcyhLKSxlLnJlY2FsY3VsYXRlRWRnZUxhYmVsUHJvamVjdGlvbnMoSyksZS5jYWxjdWxhdGVMYWJlbEFuZ2xlcyhLKX19LCJfbG9vcCIpLFQ9MDtUPHMubGVuZ3RoO1QrKylDKFQpO3RoaXMuZmluZEhheXN0YWNrUG9pbnRzKGwpfX07byhmZ2UsImdldFB0cyIpO1ZhLmdldFNlZ21lbnRQb2ludHM9ZnVuY3Rpb24odCl7dmFyIGU9dFswXS5fcHJpdmF0ZS5yc2NyYXRjaDt0aGlzLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSh0KTt2YXIgcj1lLmVkZ2VUeXBlO2lmKHI9PT0ic2VnbWVudHMiKXJldHVybiBmZ2UoZS5zZWdwdHMpfTtWYS5nZXRDb250cm9sUG9pbnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0uX3ByaXZhdGUucnNjcmF0Y2g7dGhpcy5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUodCk7dmFyIHI9ZS5lZGdlVHlwZTtpZihyPT09ImJlemllciJ8fHI9PT0ibXVsdGliZXppZXIifHxyPT09InNlbGYifHxyPT09ImNvbXBvdW5kIilyZXR1cm4gZmdlKGUuY3RybHB0cyl9O1ZhLmdldEVkZ2VNaWRwb2ludD1mdW5jdGlvbih0KXt2YXIgZT10WzBdLl9wcml2YXRlLnJzY3JhdGNoO3JldHVybiB0aGlzLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSh0KSx7eDplLm1pZFgseTplLm1pZFl9fTtvND17fTtvNC5tYW51YWxFbmRwdFRvUHg9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLG49dC5wb3NpdGlvbigpLGk9dC5vdXRlcldpZHRoKCksYT10Lm91dGVySGVpZ2h0KCkscz10Ll9wcml2YXRlLnJzY3JhdGNoO2lmKGUudmFsdWUubGVuZ3RoPT09Mil7dmFyIGw9W2UucGZWYWx1ZVswXSxlLnBmVmFsdWVbMV1dO3JldHVybiBlLnVuaXRzWzBdPT09IiUiJiYobFswXT1sWzBdKmkpLGUudW5pdHNbMV09PT0iJSImJihsWzFdPWxbMV0qYSksbFswXSs9bi54LGxbMV0rPW4ueSxsfWVsc2V7dmFyIHU9ZS5wZlZhbHVlWzBdO3U9LU1hdGguUEkvMit1O3ZhciBoPTIqTWF0aC5tYXgoaSxhKSxmPVtuLngrTWF0aC5jb3ModSkqaCxuLnkrTWF0aC5zaW4odSkqaF07cmV0dXJuIHIubm9kZVNoYXBlc1t0aGlzLmdldE5vZGVTaGFwZSh0KV0uaW50ZXJzZWN0TGluZShuLngsbi55LGksYSxmWzBdLGZbMV0sMCx0LnBzdHlsZSgiY29ybmVyLXJhZGl1cyIpLnZhbHVlPT09ImF1dG8iPyJhdXRvIjp0LnBzdHlsZSgiY29ybmVyLXJhZGl1cyIpLnBmVmFsdWUscyl9fTtvNC5maW5kRW5kcG9pbnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscixuPXQuc291cmNlKClbMF0saT10LnRhcmdldCgpWzBdLGE9bi5wb3NpdGlvbigpLHM9aS5wb3NpdGlvbigpLGw9dC5wc3R5bGUoInRhcmdldC1hcnJvdy1zaGFwZSIpLnZhbHVlLHU9dC5wc3R5bGUoInNvdXJjZS1hcnJvdy1zaGFwZSIpLnZhbHVlLGg9dC5wc3R5bGUoInRhcmdldC1kaXN0YW5jZS1mcm9tLW5vZGUiKS5wZlZhbHVlLGY9dC5wc3R5bGUoInNvdXJjZS1kaXN0YW5jZS1mcm9tLW5vZGUiKS5wZlZhbHVlLGQ9bi5fcHJpdmF0ZS5yc2NyYXRjaCxwPWkuX3ByaXZhdGUucnNjcmF0Y2gsbT10LnBzdHlsZSgiY3VydmUtc3R5bGUiKS52YWx1ZSxnPXQuX3ByaXZhdGUucnNjcmF0Y2gseT1nLmVkZ2VUeXBlLHY9bT09PSJ0YXhpIix4PXk9PT0ic2VsZiJ8fHk9PT0iY29tcG91bmQiLGI9eT09PSJiZXppZXIifHx5PT09Im11bHRpYmV6aWVyInx8eCx3PXkhPT0iYmV6aWVyIixDPXk9PT0ic3RyYWlnaHQifHx5PT09InNlZ21lbnRzIixUPXk9PT0ic2VnbWVudHMiLEU9Ynx8d3x8QyxBPXh8fHYsUz10LnBzdHlsZSgic291cmNlLWVuZHBvaW50IiksXz1BPyJvdXRzaWRlLXRvLW5vZGUiOlMudmFsdWUsST1uLnBzdHlsZSgiY29ybmVyLXJhZGl1cyIpLnZhbHVlPT09ImF1dG8iPyJhdXRvIjpuLnBzdHlsZSgiY29ybmVyLXJhZGl1cyIpLnBmVmFsdWUsRD10LnBzdHlsZSgidGFyZ2V0LWVuZHBvaW50Iiksaz1BPyJvdXRzaWRlLXRvLW5vZGUiOkQudmFsdWUsTD1pLnBzdHlsZSgiY29ybmVyLXJhZGl1cyIpLnZhbHVlPT09ImF1dG8iPyJhdXRvIjppLnBzdHlsZSgiY29ybmVyLXJhZGl1cyIpLnBmVmFsdWU7Zy5zcmNNYW5FbmRwdD1TLGcudGd0TWFuRW5kcHQ9RDt2YXIgUixPLE0sQjtpZihiKXt2YXIgRj1bZy5jdHJscHRzWzBdLGcuY3RybHB0c1sxXV0sUD13P1tnLmN0cmxwdHNbZy5jdHJscHRzLmxlbmd0aC0yXSxnLmN0cmxwdHNbZy5jdHJscHRzLmxlbmd0aC0xXV06RjtSPVAsTz1GfWVsc2UgaWYoQyl7dmFyIHo9VD9nLnNlZ3B0cy5zbGljZSgwLDIpOltzLngscy55XSwkPVQ/Zy5zZWdwdHMuc2xpY2UoZy5zZWdwdHMubGVuZ3RoLTIpOlthLngsYS55XTtSPSQsTz16fWlmKGs9PT0iaW5zaWRlLXRvLW5vZGUiKXI9W3MueCxzLnldO2Vsc2UgaWYoRC51bml0cylyPXRoaXMubWFudWFsRW5kcHRUb1B4KGksRCk7ZWxzZSBpZihrPT09Im91dHNpZGUtdG8tbGluZSIpcj1nLnRndEludG47ZWxzZSBpZihrPT09Im91dHNpZGUtdG8tbm9kZSJ8fGs9PT0ib3V0c2lkZS10by1ub2RlLW9yLWxhYmVsIj9NPVI6KGs9PT0ib3V0c2lkZS10by1saW5lInx8az09PSJvdXRzaWRlLXRvLWxpbmUtb3ItbGFiZWwiKSYmKE09W2EueCxhLnldKSxyPWUubm9kZVNoYXBlc1t0aGlzLmdldE5vZGVTaGFwZShpKV0uaW50ZXJzZWN0TGluZShzLngscy55LGkub3V0ZXJXaWR0aCgpLGkub3V0ZXJIZWlnaHQoKSxNWzBdLE1bMV0sMCxMLHApLGs9PT0ib3V0c2lkZS10by1ub2RlLW9yLWxhYmVsInx8az09PSJvdXRzaWRlLXRvLWxpbmUtb3ItbGFiZWwiKXt2YXIgSD1pLl9wcml2YXRlLnJzY3JhdGNoLFE9SC5sYWJlbFdpZHRoLGo9SC5sYWJlbEhlaWdodCxpZT1ILmxhYmVsWCxuZT1ILmxhYmVsWSxsZT1RLzIsaGU9ai8yLEs9aS5wc3R5bGUoInRleHQtdmFsaWduIikudmFsdWU7Sz09PSJ0b3AiP25lLT1oZTpLPT09ImJvdHRvbSImJihuZSs9aGUpO3ZhciBYPWkucHN0eWxlKCJ0ZXh0LWhhbGlnbiIpLnZhbHVlO1g9PT0ibGVmdCI/aWUtPWxlOlg9PT0icmlnaHQiJiYoaWUrPWxlKTt2YXIgdGU9WGIoTVswXSxNWzFdLFtpZS1sZSxuZS1oZSxpZStsZSxuZS1oZSxpZStsZSxuZStoZSxpZS1sZSxuZStoZV0scy54LHMueSk7aWYodGUubGVuZ3RoPjApe3ZhciBKPWEsc2U9T3AoSixVMShyKSksdWU9T3AoSixVMSh0ZSkpLFo9c2U7aWYodWU8c2UmJihyPXRlLFo9dWUpLHRlLmxlbmd0aD4yKXt2YXIgU2U9T3AoSix7eDp0ZVsyXSx5OnRlWzNdfSk7U2U8WiYmKHI9W3RlWzJdLHRlWzNdXSl9fX12YXIgY2U9UTYocixSLGUuYXJyb3dTaGFwZXNbbF0uc3BhY2luZyh0KStoKSxhZT1RNihyLFIsZS5hcnJvd1NoYXBlc1tsXS5nYXAodCkraCk7aWYoZy5lbmRYPWFlWzBdLGcuZW5kWT1hZVsxXSxnLmFycm93RW5kWD1jZVswXSxnLmFycm93RW5kWT1jZVsxXSxfPT09Imluc2lkZS10by1ub2RlIilyPVthLngsYS55XTtlbHNlIGlmKFMudW5pdHMpcj10aGlzLm1hbnVhbEVuZHB0VG9QeChuLFMpO2Vsc2UgaWYoXz09PSJvdXRzaWRlLXRvLWxpbmUiKXI9Zy5zcmNJbnRuO2Vsc2UgaWYoXz09PSJvdXRzaWRlLXRvLW5vZGUifHxfPT09Im91dHNpZGUtdG8tbm9kZS1vci1sYWJlbCI/Qj1POihfPT09Im91dHNpZGUtdG8tbGluZSJ8fF89PT0ib3V0c2lkZS10by1saW5lLW9yLWxhYmVsIikmJihCPVtzLngscy55XSkscj1lLm5vZGVTaGFwZXNbdGhpcy5nZXROb2RlU2hhcGUobildLmludGVyc2VjdExpbmUoYS54LGEueSxuLm91dGVyV2lkdGgoKSxuLm91dGVySGVpZ2h0KCksQlswXSxCWzFdLDAsSSxkKSxfPT09Im91dHNpZGUtdG8tbm9kZS1vci1sYWJlbCJ8fF89PT0ib3V0c2lkZS10by1saW5lLW9yLWxhYmVsIil7dmFyIE9lPW4uX3ByaXZhdGUucnNjcmF0Y2gsZ2U9T2UubGFiZWxXaWR0aCx6ZT1PZS5sYWJlbEhlaWdodCxIZT1PZS5sYWJlbFgsJGU9T2UubGFiZWxZLFJlPWdlLzIsSWU9emUvMixiZT1uLnBzdHlsZSgidGV4dC12YWxpZ24iKS52YWx1ZTtiZT09PSJ0b3AiPyRlLT1JZTpiZT09PSJib3R0b20iJiYoJGUrPUllKTt2YXIgVz1uLnBzdHlsZSgidGV4dC1oYWxpZ24iKS52YWx1ZTtXPT09ImxlZnQiP0hlLT1SZTpXPT09InJpZ2h0IiYmKEhlKz1SZSk7dmFyIGRlPVhiKEJbMF0sQlsxXSxbSGUtUmUsJGUtSWUsSGUrUmUsJGUtSWUsSGUrUmUsJGUrSWUsSGUtUmUsJGUrSWVdLGEueCxhLnkpO2lmKGRlLmxlbmd0aD4wKXt2YXIgcmU9cyxvZT1PcChyZSxVMShyKSksVj1PcChyZSxVMShkZSkpLHhlPW9lO2lmKFY8b2UmJihyPVtkZVswXSxkZVsxXV0seGU9ViksZGUubGVuZ3RoPjIpe3ZhciBxPU9wKHJlLHt4OmRlWzJdLHk6ZGVbM119KTtxPHhlJiYocj1bZGVbMl0sZGVbM11dKX19fXZhciBwZT1RNihyLE8sZS5hcnJvd1NoYXBlc1t1XS5zcGFjaW5nKHQpK2YpLHZlPVE2KHIsTyxlLmFycm93U2hhcGVzW3VdLmdhcCh0KStmKTtnLnN0YXJ0WD12ZVswXSxnLnN0YXJ0WT12ZVsxXSxnLmFycm93U3RhcnRYPXBlWzBdLGcuYXJyb3dTdGFydFk9cGVbMV0sRSYmKCFDdChnLnN0YXJ0WCl8fCFDdChnLnN0YXJ0WSl8fCFDdChnLmVuZFgpfHwhQ3QoZy5lbmRZKT9nLmJhZExpbmU9ITA6Zy5iYWRMaW5lPSExKX07bzQuZ2V0U291cmNlRW5kcG9pbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dFswXS5fcHJpdmF0ZS5yc2NyYXRjaDtzd2l0Y2godGhpcy5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUodCksZS5lZGdlVHlwZSl7Y2FzZSJoYXlzdGFjayI6cmV0dXJue3g6ZS5oYXlzdGFja1B0c1swXSx5OmUuaGF5c3RhY2tQdHNbMV19O2RlZmF1bHQ6cmV0dXJue3g6ZS5hcnJvd1N0YXJ0WCx5OmUuYXJyb3dTdGFydFl9fX07bzQuZ2V0VGFyZ2V0RW5kcG9pbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dFswXS5fcHJpdmF0ZS5yc2NyYXRjaDtzd2l0Y2godGhpcy5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUodCksZS5lZGdlVHlwZSl7Y2FzZSJoYXlzdGFjayI6cmV0dXJue3g6ZS5oYXlzdGFja1B0c1syXSx5OmUuaGF5c3RhY2tQdHNbM119O2RlZmF1bHQ6cmV0dXJue3g6ZS5hcnJvd0VuZFgseTplLmFycm93RW5kWX19fTt4Qj17fTtvKF9RZSwicHVzaEJlemllclB0cyIpO3hCLnN0b3JlRWRnZVByb2plY3Rpb25zPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX3ByaXZhdGUscj1lLnJzY3JhdGNoLG49ci5lZGdlVHlwZTtpZihlLnJzdHlsZS5iZXppZXJQdHM9bnVsbCxlLnJzdHlsZS5saW5lUHRzPW51bGwsZS5yc3R5bGUuaGF5c3RhY2tQdHM9bnVsbCxuPT09Im11bHRpYmV6aWVyInx8bj09PSJiZXppZXIifHxuPT09InNlbGYifHxuPT09ImNvbXBvdW5kIil7ZS5yc3R5bGUuYmV6aWVyUHRzPVtdO2Zvcih2YXIgaT0wO2krNTxyLmFsbHB0cy5sZW5ndGg7aSs9NClfUWUodGhpcyx0LHIuYWxscHRzLnNsaWNlKGksaSs2KSl9ZWxzZSBpZihuPT09InNlZ21lbnRzIilmb3IodmFyIGE9ZS5yc3R5bGUubGluZVB0cz1bXSxpPTA7aSsxPHIuYWxscHRzLmxlbmd0aDtpKz0yKWEucHVzaCh7eDpyLmFsbHB0c1tpXSx5OnIuYWxscHRzW2krMV19KTtlbHNlIGlmKG49PT0iaGF5c3RhY2siKXt2YXIgcz1yLmhheXN0YWNrUHRzO2UucnN0eWxlLmhheXN0YWNrUHRzPVt7eDpzWzBdLHk6c1sxXX0se3g6c1syXSx5OnNbM119XX1lLnJzdHlsZS5hcnJvd1dpZHRoPXRoaXMuZ2V0QXJyb3dXaWR0aCh0LnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlLHQucHN0eWxlKCJhcnJvdy1zY2FsZSIpLnZhbHVlKSp0aGlzLmFycm93U2hhcGVXaWR0aH07eEIucmVjYWxjdWxhdGVFZGdlUHJvamVjdGlvbnM9ZnVuY3Rpb24odCl7dGhpcy5maW5kRWRnZUNvbnRyb2xQb2ludHModCl9O0tjPXt9O0tjLnJlY2FsY3VsYXRlTm9kZUxhYmVsUHJvamVjdGlvbj1mdW5jdGlvbih0KXt2YXIgZT10LnBzdHlsZSgibGFiZWwiKS5zdHJWYWx1ZTtpZighQWYoZSkpe3ZhciByLG4saT10Ll9wcml2YXRlLGE9dC53aWR0aCgpLHM9dC5oZWlnaHQoKSxsPXQucGFkZGluZygpLHU9dC5wb3NpdGlvbigpLGg9dC5wc3R5bGUoInRleHQtaGFsaWduIikuc3RyVmFsdWUsZj10LnBzdHlsZSgidGV4dC12YWxpZ24iKS5zdHJWYWx1ZSxkPWkucnNjcmF0Y2gscD1pLnJzdHlsZTtzd2l0Y2goaCl7Y2FzZSJsZWZ0IjpyPXUueC1hLzItbDticmVhaztjYXNlInJpZ2h0IjpyPXUueCthLzIrbDticmVhaztkZWZhdWx0OnI9dS54fXN3aXRjaChmKXtjYXNlInRvcCI6bj11Lnktcy8yLWw7YnJlYWs7Y2FzZSJib3R0b20iOm49dS55K3MvMitsO2JyZWFrO2RlZmF1bHQ6bj11Lnl9ZC5sYWJlbFg9cixkLmxhYmVsWT1uLHAubGFiZWxYPXIscC5sYWJlbFk9bix0aGlzLmNhbGN1bGF0ZUxhYmVsQW5nbGVzKHQpLHRoaXMuYXBwbHlMYWJlbERpbWVuc2lvbnModCl9fTtkZ2U9byhmdW5jdGlvbihlLHIpe3ZhciBuPU1hdGguYXRhbihyL2UpO3JldHVybiBlPT09MCYmbjwwJiYobj1uKi0xKSxufSwibGluZUFuZ2xlRnJvbURlbHRhIikscGdlPW8oZnVuY3Rpb24oZSxyKXt2YXIgbj1yLngtZS54LGk9ci55LWUueTtyZXR1cm4gZGdlKG4saSl9LCJsaW5lQW5nbGUiKSxEUWU9byhmdW5jdGlvbihlLHIsbixpKXt2YXIgYT1ZYigwLGktLjAwMSwxKSxzPVliKDAsaSsuMDAxLDEpLGw9VzEoZSxyLG4sYSksdT1XMShlLHIsbixzKTtyZXR1cm4gcGdlKGwsdSl9LCJiZXppZXJBbmdsZSIpO0tjLnJlY2FsY3VsYXRlRWRnZUxhYmVsUHJvamVjdGlvbnM9ZnVuY3Rpb24odCl7dmFyIGUscj10Ll9wcml2YXRlLG49ci5yc2NyYXRjaCxpPXRoaXMsYT17bWlkOnQucHN0eWxlKCJsYWJlbCIpLnN0clZhbHVlLHNvdXJjZTp0LnBzdHlsZSgic291cmNlLWxhYmVsIikuc3RyVmFsdWUsdGFyZ2V0OnQucHN0eWxlKCJ0YXJnZXQtbGFiZWwiKS5zdHJWYWx1ZX07aWYoYS5taWR8fGEuc291cmNlfHxhLnRhcmdldCl7ZT17eDpuLm1pZFgseTpuLm1pZFl9O3ZhciBzPW8oZnVuY3Rpb24oZCxwLG0pe2tmKHIucnNjcmF0Y2gsZCxwLG0pLGtmKHIucnN0eWxlLGQscCxtKX0sInNldFJzIik7cygibGFiZWxYIixudWxsLGUueCkscygibGFiZWxZIixudWxsLGUueSk7dmFyIGw9ZGdlKG4ubWlkRGlzcFgsbi5taWREaXNwWSk7cygibGFiZWxBdXRvQW5nbGUiLG51bGwsbCk7dmFyIHU9byhmdW5jdGlvbiBmKCl7aWYoZi5jYWNoZSlyZXR1cm4gZi5jYWNoZTtmb3IodmFyIGQ9W10scD0wO3ArNTxuLmFsbHB0cy5sZW5ndGg7cCs9NCl7dmFyIG09e3g6bi5hbGxwdHNbcF0seTpuLmFsbHB0c1twKzFdfSxnPXt4Om4uYWxscHRzW3ArMl0seTpuLmFsbHB0c1twKzNdfSx5PXt4Om4uYWxscHRzW3ArNF0seTpuLmFsbHB0c1twKzVdfTtkLnB1c2goe3AwOm0scDE6ZyxwMjp5LHN0YXJ0RGlzdDowLGxlbmd0aDowLHNlZ21lbnRzOltdfSl9dmFyIHY9ci5yc3R5bGUuYmV6aWVyUHRzLHg9aS5iZXppZXJQcm9qUGN0cy5sZW5ndGg7ZnVuY3Rpb24gYihBLFMsXyxJLEQpe3ZhciBrPUdwKFMsXyksTD1BLnNlZ21lbnRzW0Euc2VnbWVudHMubGVuZ3RoLTFdLFI9e3AwOlMscDE6Xyx0MDpJLHQxOkQsc3RhcnREaXN0Okw/TC5zdGFydERpc3QrTC5sZW5ndGg6MCxsZW5ndGg6a307QS5zZWdtZW50cy5wdXNoKFIpLEEubGVuZ3RoKz1rfW8oYiwiYWRkU2VnbWVudCIpO2Zvcih2YXIgdz0wO3c8ZC5sZW5ndGg7dysrKXt2YXIgQz1kW3ddLFQ9ZFt3LTFdO1QmJihDLnN0YXJ0RGlzdD1ULnN0YXJ0RGlzdCtULmxlbmd0aCksYihDLEMucDAsdlt3KnhdLDAsaS5iZXppZXJQcm9qUGN0c1swXSk7Zm9yKHZhciBFPTA7RTx4LTE7RSsrKWIoQyx2W3cqeCtFXSx2W3cqeCtFKzFdLGkuYmV6aWVyUHJvalBjdHNbRV0saS5iZXppZXJQcm9qUGN0c1tFKzFdKTtiKEMsdlt3KngreC0xXSxDLnAyLGkuYmV6aWVyUHJvalBjdHNbeC0xXSwxKX1yZXR1cm4gZi5jYWNoZT1kfSwiY3JlYXRlQ29udHJvbFBvaW50SW5mbyIpLGg9byhmdW5jdGlvbihkKXt2YXIgcCxtPWQ9PT0ic291cmNlIjtpZihhW2RdKXt2YXIgZz10LnBzdHlsZShkKyItdGV4dC1vZmZzZXQiKS5wZlZhbHVlO3N3aXRjaChuLmVkZ2VUeXBlKXtjYXNlInNlbGYiOmNhc2UiY29tcG91bmQiOmNhc2UiYmV6aWVyIjpjYXNlIm11bHRpYmV6aWVyIjp7Zm9yKHZhciB5PXUoKSx2LHg9MCxiPTAsdz0wO3c8eS5sZW5ndGg7dysrKXtmb3IodmFyIEM9eVttP3c6eS5sZW5ndGgtMS13XSxUPTA7VDxDLnNlZ21lbnRzLmxlbmd0aDtUKyspe3ZhciBFPUMuc2VnbWVudHNbbT9UOkMuc2VnbWVudHMubGVuZ3RoLTEtVF0sQT13PT09eS5sZW5ndGgtMSYmVD09PUMuc2VnbWVudHMubGVuZ3RoLTE7aWYoeD1iLGIrPUUubGVuZ3RoLGI+PWd8fEEpe3Y9e2NwOkMsc2VnbWVudDpFfTticmVha319aWYodilicmVha312YXIgUz12LmNwLF89di5zZWdtZW50LEk9KGcteCkvXy5sZW5ndGgsRD1fLnQxLV8udDAsaz1tP18udDArRCpJOl8udDEtRCpJO2s9WWIoMCxrLDEpLGU9VzEoUy5wMCxTLnAxLFMucDIsaykscD1EUWUoUy5wMCxTLnAxLFMucDIsayk7YnJlYWt9Y2FzZSJzdHJhaWdodCI6Y2FzZSJzZWdtZW50cyI6Y2FzZSJoYXlzdGFjayI6e2Zvcih2YXIgTD0wLFIsTyxNLEIsRj1uLmFsbHB0cy5sZW5ndGgsUD0wO1ArMzxGJiYobT8oTT17eDpuLmFsbHB0c1tQXSx5Om4uYWxscHRzW1ArMV19LEI9e3g6bi5hbGxwdHNbUCsyXSx5Om4uYWxscHRzW1ArM119KTooTT17eDpuLmFsbHB0c1tGLTItUF0seTpuLmFsbHB0c1tGLTEtUF19LEI9e3g6bi5hbGxwdHNbRi00LVBdLHk6bi5hbGxwdHNbRi0zLVBdfSksUj1HcChNLEIpLE89TCxMKz1SLCEoTD49ZykpO1ArPTIpO3ZhciB6PWctTywkPXovUjskPVliKDAsJCwxKSxlPUlxZShNLEIsJCkscD1wZ2UoTSxCKTticmVha319cygibGFiZWxYIixkLGUueCkscygibGFiZWxZIixkLGUueSkscygibGFiZWxBdXRvQW5nbGUiLGQscCl9fSwiY2FsY3VsYXRlRW5kUHJvamVjdGlvbiIpO2goInNvdXJjZSIpLGgoInRhcmdldCIpLHRoaXMuYXBwbHlMYWJlbERpbWVuc2lvbnModCl9fTtLYy5hcHBseUxhYmVsRGltZW5zaW9ucz1mdW5jdGlvbih0KXt0aGlzLmFwcGx5UHJlZml4ZWRMYWJlbERpbWVuc2lvbnModCksdC5pc0VkZ2UoKSYmKHRoaXMuYXBwbHlQcmVmaXhlZExhYmVsRGltZW5zaW9ucyh0LCJzb3VyY2UiKSx0aGlzLmFwcGx5UHJlZml4ZWRMYWJlbERpbWVuc2lvbnModCwidGFyZ2V0IikpfTtLYy5hcHBseVByZWZpeGVkTGFiZWxEaW1lbnNpb25zPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fcHJpdmF0ZSxuPXRoaXMuZ2V0TGFiZWxUZXh0KHQsZSksaT10aGlzLmNhbGN1bGF0ZUxhYmVsRGltZW5zaW9ucyh0LG4pLGE9dC5wc3R5bGUoImxpbmUtaGVpZ2h0IikucGZWYWx1ZSxzPXQucHN0eWxlKCJ0ZXh0LXdyYXAiKS5zdHJWYWx1ZSxsPUdsKHIucnNjcmF0Y2gsImxhYmVsV3JhcENhY2hlZExpbmVzIixlKXx8W10sdT1zIT09IndyYXAiPzE6TWF0aC5tYXgobC5sZW5ndGgsMSksaD1pLmhlaWdodC91LGY9aCphLGQ9aS53aWR0aCxwPWkuaGVpZ2h0Kyh1LTEpKihhLTEpKmg7a2Yoci5yc3R5bGUsImxhYmVsV2lkdGgiLGUsZCksa2Yoci5yc2NyYXRjaCwibGFiZWxXaWR0aCIsZSxkKSxrZihyLnJzdHlsZSwibGFiZWxIZWlnaHQiLGUscCksa2Yoci5yc2NyYXRjaCwibGFiZWxIZWlnaHQiLGUscCksa2Yoci5yc2NyYXRjaCwibGFiZWxMaW5lSGVpZ2h0IixlLGYpfTtLYy5nZXRMYWJlbFRleHQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9wcml2YXRlLG49ZT9lKyItIjoiIixpPXQucHN0eWxlKG4rImxhYmVsIikuc3RyVmFsdWUsYT10LnBzdHlsZSgidGV4dC10cmFuc2Zvcm0iKS52YWx1ZSxzPW8oZnVuY3Rpb24oUSxqKXtyZXR1cm4gaj8oa2Yoci5yc2NyYXRjaCxRLGUsaiksaik6R2woci5yc2NyYXRjaCxRLGUpfSwicnNjcmF0Y2giKTtpZighaSlyZXR1cm4iIjthPT0ibm9uZSJ8fChhPT0idXBwZXJjYXNlIj9pPWkudG9VcHBlckNhc2UoKTphPT0ibG93ZXJjYXNlIiYmKGk9aS50b0xvd2VyQ2FzZSgpKSk7dmFyIGw9dC5wc3R5bGUoInRleHQtd3JhcCIpLnZhbHVlO2lmKGw9PT0id3JhcCIpe3ZhciB1PXMoImxhYmVsS2V5Iik7aWYodSE9bnVsbCYmcygibGFiZWxXcmFwS2V5Iik9PT11KXJldHVybiBzKCJsYWJlbFdyYXBDYWNoZWRUZXh0Iik7Zm9yKHZhciBoPSJcdTIwMEIiLGY9aS5zcGxpdChgCmApLGQ9dC5wc3R5bGUoInRleHQtbWF4LXdpZHRoIikucGZWYWx1ZSxwPXQucHN0eWxlKCJ0ZXh0LW92ZXJmbG93LXdyYXAiKS52YWx1ZSxtPXA9PT0iYW55d2hlcmUiLGc9W10seT0vW1xzXHUyMDBiXSt8JC9nLHY9MDt2PGYubGVuZ3RoO3YrKyl7dmFyIHg9Zlt2XSxiPXRoaXMuY2FsY3VsYXRlTGFiZWxEaW1lbnNpb25zKHQseCksdz1iLndpZHRoO2lmKG0pe3ZhciBDPXguc3BsaXQoIiIpLmpvaW4oaCk7eD1DfWlmKHc+ZCl7dmFyIFQ9eC5tYXRjaEFsbCh5KSxFPSIiLEE9MCxTPW1vKFQpLF87dHJ5e2ZvcihTLnMoKTshKF89Uy5uKCkpLmRvbmU7KXt2YXIgST1fLnZhbHVlLEQ9SVswXSxrPXguc3Vic3RyaW5nKEEsSS5pbmRleCk7QT1JLmluZGV4K0QubGVuZ3RoO3ZhciBMPUUubGVuZ3RoPT09MD9rOkUraytELFI9dGhpcy5jYWxjdWxhdGVMYWJlbERpbWVuc2lvbnModCxMKSxPPVIud2lkdGg7Tzw9ZD9FKz1rK0Q6KEUmJmcucHVzaChFKSxFPWsrRCl9fWNhdGNoKEgpe1MuZShIKX1maW5hbGx5e1MuZigpfUUubWF0Y2goL15bXHNcdTIwMGJdKyQvKXx8Zy5wdXNoKEUpfWVsc2UgZy5wdXNoKHgpfXMoImxhYmVsV3JhcENhY2hlZExpbmVzIixnKSxpPXMoImxhYmVsV3JhcENhY2hlZFRleHQiLGcuam9pbihgCmApKSxzKCJsYWJlbFdyYXBLZXkiLHUpfWVsc2UgaWYobD09PSJlbGxpcHNpcyIpe3ZhciBNPXQucHN0eWxlKCJ0ZXh0LW1heC13aWR0aCIpLnBmVmFsdWUsQj0iIixGPSJcdTIwMjYiLFA9ITE7aWYodGhpcy5jYWxjdWxhdGVMYWJlbERpbWVuc2lvbnModCxpKS53aWR0aDxNKXJldHVybiBpO2Zvcih2YXIgej0wO3o8aS5sZW5ndGg7eisrKXt2YXIgJD10aGlzLmNhbGN1bGF0ZUxhYmVsRGltZW5zaW9ucyh0LEIraVt6XStGKS53aWR0aDtpZigkPk0pYnJlYWs7Qis9aVt6XSx6PT09aS5sZW5ndGgtMSYmKFA9ITApfXJldHVybiBQfHwoQis9RiksQn1yZXR1cm4gaX07S2MuZ2V0TGFiZWxKdXN0aWZpY2F0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXQucHN0eWxlKCJ0ZXh0LWp1c3RpZmljYXRpb24iKS5zdHJWYWx1ZSxyPXQucHN0eWxlKCJ0ZXh0LWhhbGlnbiIpLnN0clZhbHVlO2lmKGU9PT0iYXV0byIpaWYodC5pc05vZGUoKSlzd2l0Y2gocil7Y2FzZSJsZWZ0IjpyZXR1cm4icmlnaHQiO2Nhc2UicmlnaHQiOnJldHVybiJsZWZ0IjtkZWZhdWx0OnJldHVybiJjZW50ZXIifWVsc2UgcmV0dXJuImNlbnRlciI7ZWxzZSByZXR1cm4gZX07S2MuY2FsY3VsYXRlTGFiZWxEaW1lbnNpb25zPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxuPXIuY3kud2luZG93KCksaT1uLmRvY3VtZW50LGE9X2YoZSx0Ll9wcml2YXRlLmxhYmVsRGltc0tleSkscz1yLmxhYmVsRGltQ2FjaGV8fChyLmxhYmVsRGltQ2FjaGU9W10pLGw9c1thXTtpZihsIT1udWxsKXJldHVybiBsO3ZhciB1PTAsaD10LnBzdHlsZSgiZm9udC1zdHlsZSIpLnN0clZhbHVlLGY9dC5wc3R5bGUoImZvbnQtc2l6ZSIpLnBmVmFsdWUsZD10LnBzdHlsZSgiZm9udC1mYW1pbHkiKS5zdHJWYWx1ZSxwPXQucHN0eWxlKCJmb250LXdlaWdodCIpLnN0clZhbHVlLG09dGhpcy5sYWJlbENhbGNDYW52YXMsZz10aGlzLmxhYmVsQ2FsY0NhbnZhc0NvbnRleHQ7aWYoIW0pe209dGhpcy5sYWJlbENhbGNDYW52YXM9aS5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxnPXRoaXMubGFiZWxDYWxjQ2FudmFzQ29udGV4dD1tLmdldENvbnRleHQoIjJkIik7dmFyIHk9bS5zdHlsZTt5LnBvc2l0aW9uPSJhYnNvbHV0ZSIseS5sZWZ0PSItOTk5OXB4Iix5LnRvcD0iLTk5OTlweCIseS56SW5kZXg9Ii0xIix5LnZpc2liaWxpdHk9ImhpZGRlbiIseS5wb2ludGVyRXZlbnRzPSJub25lIn1nLmZvbnQ9IiIuY29uY2F0KGgsIiAiKS5jb25jYXQocCwiICIpLmNvbmNhdChmLCJweCAiKS5jb25jYXQoZCk7Zm9yKHZhciB2PTAseD0wLGI9ZS5zcGxpdChgCmApLHc9MDt3PGIubGVuZ3RoO3crKyl7dmFyIEM9Ylt3XSxUPWcubWVhc3VyZVRleHQoQyksRT1NYXRoLmNlaWwoVC53aWR0aCksQT1mO3Y9TWF0aC5tYXgoRSx2KSx4Kz1BfXJldHVybiB2Kz11LHgrPXUsc1thXT17d2lkdGg6dixoZWlnaHQ6eH19O0tjLmNhbGN1bGF0ZUxhYmVsQW5nbGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9wcml2YXRlLG49ci5yc2NyYXRjaCxpPXQuaXNFZGdlKCksYT1lP2UrIi0iOiIiLHM9dC5wc3R5bGUoYSsidGV4dC1yb3RhdGlvbiIpLGw9cy5zdHJWYWx1ZTtyZXR1cm4gbD09PSJub25lIj8wOmkmJmw9PT0iYXV0b3JvdGF0ZSI/bi5sYWJlbEF1dG9BbmdsZTpsPT09ImF1dG9yb3RhdGUiPzA6cy5wZlZhbHVlfTtLYy5jYWxjdWxhdGVMYWJlbEFuZ2xlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9dC5pc0VkZ2UoKSxuPXQuX3ByaXZhdGUsaT1uLnJzY3JhdGNoO2kubGFiZWxBbmdsZT1lLmNhbGN1bGF0ZUxhYmVsQW5nbGUodCksciYmKGkuc291cmNlTGFiZWxBbmdsZT1lLmNhbGN1bGF0ZUxhYmVsQW5nbGUodCwic291cmNlIiksaS50YXJnZXRMYWJlbEFuZ2xlPWUuY2FsY3VsYXRlTGFiZWxBbmdsZSh0LCJ0YXJnZXQiKSl9O21nZT17fSxSMGU9MjgsTjBlPSExO21nZS5nZXROb2RlU2hhcGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPXQucHN0eWxlKCJzaGFwZSIpLnZhbHVlO2lmKHI9PT0iY3V0cmVjdGFuZ2xlIiYmKHQud2lkdGgoKTxSMGV8fHQuaGVpZ2h0KCk8UjBlKSlyZXR1cm4gTjBlfHwodW4oIlRoZSBgY3V0cmVjdGFuZ2xlYCBub2RlIHNoYXBlIGNhbiBub3QgYmUgdXNlZCBhdCBzbWFsbCBzaXplcyBzbyBgcmVjdGFuZ2xlYCBpcyB1c2VkIGluc3RlYWQiKSxOMGU9ITApLCJyZWN0YW5nbGUiO2lmKHQuaXNQYXJlbnQoKSlyZXR1cm4gcj09PSJyZWN0YW5nbGUifHxyPT09InJvdW5kcmVjdGFuZ2xlInx8cj09PSJyb3VuZC1yZWN0YW5nbGUifHxyPT09ImN1dHJlY3RhbmdsZSJ8fHI9PT0iY3V0LXJlY3RhbmdsZSJ8fHI9PT0iYmFycmVsIj9yOiJyZWN0YW5nbGUiO2lmKHI9PT0icG9seWdvbiIpe3ZhciBuPXQucHN0eWxlKCJzaGFwZS1wb2x5Z29uLXBvaW50cyIpLnZhbHVlO3JldHVybiBlLm5vZGVTaGFwZXMubWFrZVBvbHlnb24obikubmFtZX1yZXR1cm4gcn07V1M9e307V1MucmVnaXN0ZXJDYWxjdWxhdGlvbkxpc3RlbmVycz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY3ksZT10LmNvbGxlY3Rpb24oKSxyPXRoaXMsbj1vKGZ1bmN0aW9uKHMpe3ZhciBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMDtpZihlLm1lcmdlKHMpLGwpZm9yKHZhciB1PTA7dTxzLmxlbmd0aDt1Kyspe3ZhciBoPXNbdV0sZj1oLl9wcml2YXRlLGQ9Zi5yc3R5bGU7ZC5jbGVhbj0hMSxkLmNsZWFuQ29ubmVjdGVkPSExfX0sImVucXVldWUiKTtyLmJpbmRlcih0KS5vbigiYm91bmRzLiogZGlydHkuKiIsbyhmdW5jdGlvbihzKXt2YXIgbD1zLnRhcmdldDtuKGwpfSwib25EaXJ0eUJvdW5kcyIpKS5vbigic3R5bGUuKiBiYWNrZ3JvdW5kLioiLG8oZnVuY3Rpb24ocyl7dmFyIGw9cy50YXJnZXQ7bihsLCExKX0sIm9uRGlydHlTdHlsZSIpKTt2YXIgaT1vKGZ1bmN0aW9uKHMpe2lmKHMpe3ZhciBsPXIub25VcGRhdGVFbGVDYWxjc0ZucztlLmNsZWFuU3R5bGUoKTtmb3IodmFyIHU9MDt1PGUubGVuZ3RoO3UrKyl7dmFyIGg9ZVt1XSxmPWguX3ByaXZhdGUucnN0eWxlO2guaXNOb2RlKCkmJiFmLmNsZWFuQ29ubmVjdGVkJiYobihoLmNvbm5lY3RlZEVkZ2VzKCkpLGYuY2xlYW5Db25uZWN0ZWQ9ITApfWlmKGwpZm9yKHZhciBkPTA7ZDxsLmxlbmd0aDtkKyspe3ZhciBwPWxbZF07cChzLGUpfXIucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKGUpLGU9dC5jb2xsZWN0aW9uKCl9fSwidXBkYXRlRWxlQ2FsY3MiKTtyLmZsdXNoUmVuZGVyZWRTdHlsZVF1ZXVlPWZ1bmN0aW9uKCl7aSghMCl9LHIuYmVmb3JlUmVuZGVyKGksci5iZWZvcmVSZW5kZXJQcmlvcml0aWVzLmVsZUNhbGNzKX07V1Mub25VcGRhdGVFbGVDYWxjcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm9uVXBkYXRlRWxlQ2FsY3NGbnM9dGhpcy5vblVwZGF0ZUVsZUNhbGNzRm5zfHxbXTtlLnB1c2godCl9O1dTLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZT1mdW5jdGlvbih0LGUpe3ZhciByPW8oZnVuY3Rpb24oQyl7cmV0dXJuIEMuX3ByaXZhdGUucnN0eWxlLmNsZWFuQ29ubmVjdGVkfSwiaXNDbGVhbkNvbm5lY3RlZCIpLG49W10saT1bXTtpZighdGhpcy5kZXN0cm95ZWQpe2U9PT12b2lkIDAmJihlPSEwKTtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIHM9dFthXSxsPXMuX3ByaXZhdGUsdT1sLnJzdHlsZTtzLmlzRWRnZSgpJiYoIXIocy5zb3VyY2UoKSl8fCFyKHMudGFyZ2V0KCkpKSYmKHUuY2xlYW49ITEpLCEoZSYmdS5jbGVhbnx8cy5yZW1vdmVkKCkpJiZzLnBzdHlsZSgiZGlzcGxheSIpLnZhbHVlIT09Im5vbmUiJiYobC5ncm91cD09PSJub2RlcyI/aS5wdXNoKHMpOm4ucHVzaChzKSx1LmNsZWFuPSEwKX1mb3IodmFyIGg9MDtoPGkubGVuZ3RoO2grKyl7dmFyIGY9aVtoXSxkPWYuX3ByaXZhdGUscD1kLnJzdHlsZSxtPWYucG9zaXRpb24oKTt0aGlzLnJlY2FsY3VsYXRlTm9kZUxhYmVsUHJvamVjdGlvbihmKSxwLm5vZGVYPW0ueCxwLm5vZGVZPW0ueSxwLm5vZGVXPWYucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUscC5ub2RlSD1mLnBzdHlsZSgiaGVpZ2h0IikucGZWYWx1ZX10aGlzLnJlY2FsY3VsYXRlRWRnZVByb2plY3Rpb25zKG4pO2Zvcih2YXIgZz0wO2c8bi5sZW5ndGg7ZysrKXt2YXIgeT1uW2ddLHY9eS5fcHJpdmF0ZSx4PXYucnN0eWxlLGI9di5yc2NyYXRjaDt4LnNyY1g9Yi5hcnJvd1N0YXJ0WCx4LnNyY1k9Yi5hcnJvd1N0YXJ0WSx4LnRndFg9Yi5hcnJvd0VuZFgseC50Z3RZPWIuYXJyb3dFbmRZLHgubWlkWD1iLm1pZFgseC5taWRZPWIubWlkWSx4LmxhYmVsQW5nbGU9Yi5sYWJlbEFuZ2xlLHguc291cmNlTGFiZWxBbmdsZT1iLnNvdXJjZUxhYmVsQW5nbGUseC50YXJnZXRMYWJlbEFuZ2xlPWIudGFyZ2V0TGFiZWxBbmdsZX19fTtxUz17fTtxUy51cGRhdGVDYWNoZWRHcmFiYmVkRWxlcz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY2FjaGVkWlNvcnRlZEVsZXM7aWYodCl7dC5kcmFnPVtdLHQubm9uZHJhZz1bXTtmb3IodmFyIGU9W10scj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdLGk9bi5fcHJpdmF0ZS5yc2NyYXRjaDtuLmdyYWJiZWQoKSYmIW4uaXNQYXJlbnQoKT9lLnB1c2gobik6aS5pbkRyYWdMYXllcj90LmRyYWcucHVzaChuKTp0Lm5vbmRyYWcucHVzaChuKX1mb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTt0LmRyYWcucHVzaChuKX19fTtxUy5pbnZhbGlkYXRlQ2FjaGVkWlNvcnRlZEVsZXM9ZnVuY3Rpb24oKXt0aGlzLmNhY2hlZFpTb3J0ZWRFbGVzPW51bGx9O3FTLmdldENhY2hlZFpTb3J0ZWRFbGVzPWZ1bmN0aW9uKHQpe2lmKHR8fCF0aGlzLmNhY2hlZFpTb3J0ZWRFbGVzKXt2YXIgZT10aGlzLmN5Lm11dGFibGVFbGVtZW50cygpLnRvQXJyYXkoKTtlLnNvcnQoWm1lKSxlLmludGVyYWN0aXZlPWUuZmlsdGVyKGZ1bmN0aW9uKHIpe3JldHVybiByLmludGVyYWN0aXZlKCl9KSx0aGlzLmNhY2hlZFpTb3J0ZWRFbGVzPWUsdGhpcy51cGRhdGVDYWNoZWRHcmFiYmVkRWxlcygpfWVsc2UgZT10aGlzLmNhY2hlZFpTb3J0ZWRFbGVzO3JldHVybiBlfTtnZ2U9e307W3FwLEFTLFZhLG80LHhCLEtjLG1nZSxXUyxxU10uZm9yRWFjaChmdW5jdGlvbih0KXtycihnZ2UsdCl9KTt5Z2U9e307eWdlLmdldENhY2hlZEltYWdlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLGk9bi5pbWFnZUNhY2hlPW4uaW1hZ2VDYWNoZXx8e30sYT1pW3RdO2lmKGEpcmV0dXJuIGEuaW1hZ2UuY29tcGxldGV8fGEuaW1hZ2UuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsciksYS5pbWFnZTthPWlbdF09aVt0XXx8e307dmFyIHM9YS5pbWFnZT1uZXcgSW1hZ2U7cy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixyKSxzLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixmdW5jdGlvbigpe3MuZXJyb3I9ITB9KTt2YXIgbD0iZGF0YToiLHU9dC5zdWJzdHJpbmcoMCxsLmxlbmd0aCkudG9Mb3dlckNhc2UoKT09PWw7cmV0dXJuIHV8fChlPWU9PT0ibnVsbCI/bnVsbDplLHMuY3Jvc3NPcmlnaW49ZSkscy5zcmM9dCxzfTtzeT17fTtzeS5yZWdpc3RlckJpbmRpbmc9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9QXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGFyZ3VtZW50cyxbMV0pO2lmKEFycmF5LmlzQXJyYXkodCkpe2Zvcih2YXIgYT1bXSxzPTA7czx0Lmxlbmd0aDtzKyspe3ZhciBsPXRbc107aWYobCE9PXZvaWQgMCl7dmFyIHU9dGhpcy5iaW5kZXIobCk7YS5wdXNoKHUub24uYXBwbHkodSxpKSl9fXJldHVybiBhfXZhciB1PXRoaXMuYmluZGVyKHQpO3JldHVybiB1Lm9uLmFwcGx5KHUsaSl9O3N5LmJpbmRlcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9ZS5jeS53aW5kb3coKSxuPXQ9PT1yfHx0PT09ci5kb2N1bWVudHx8dD09PXIuZG9jdW1lbnQuYm9keXx8dFdlKHQpO2lmKGUuc3VwcG9ydHNQYXNzaXZlRXZlbnRzPT1udWxsKXt2YXIgaT0hMTt0cnl7dmFyIGE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJwYXNzaXZlIix7Z2V0Om8oZnVuY3Rpb24oKXtyZXR1cm4gaT0hMCwhMH0sImdldCIpfSk7ci5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0IixudWxsLGEpfWNhdGNoe31lLnN1cHBvcnRzUGFzc2l2ZUV2ZW50cz1pfXZhciBzPW8oZnVuY3Rpb24odSxoLGYpe3ZhciBkPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIG4mJmUuc3VwcG9ydHNQYXNzaXZlRXZlbnRzJiYoZFsyXT17Y2FwdHVyZTpmPz8hMSxwYXNzaXZlOiExLG9uY2U6ITF9KSxlLmJpbmRpbmdzLnB1c2goe3RhcmdldDp0LGFyZ3M6ZH0pLCh0LmFkZEV2ZW50TGlzdGVuZXJ8fHQub24pLmFwcGx5KHQsZCksdGhpc30sIm9uIik7cmV0dXJue29uOnMsYWRkRXZlbnRMaXN0ZW5lcjpzLGFkZExpc3RlbmVyOnMsYmluZDpzfX07c3kubm9kZUlzRHJhZ2dhYmxlPWZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0LmlzTm9kZSgpJiYhdC5sb2NrZWQoKSYmdC5ncmFiYmFibGUoKX07c3kubm9kZUlzR3JhYmJhYmxlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm5vZGVJc0RyYWdnYWJsZSh0KSYmdC5pbnRlcmFjdGl2ZSgpfTtzeS5sb2FkPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXQuY3kud2luZG93KCkscj1vKGZ1bmN0aW9uKFcpe3JldHVybiBXLnNlbGVjdGVkKCl9LCJpc1NlbGVjdGVkIiksbj1vKGZ1bmN0aW9uKFcpe3ZhciBkZT1XLmdldFJvb3ROb2RlKCk7aWYoZGUmJmRlLm5vZGVUeXBlPT09MTEmJmRlLmhvc3QhPT12b2lkIDApcmV0dXJuIGRlfSwiZ2V0U2hhZG93Um9vdCIpLGk9byhmdW5jdGlvbihXLGRlLHJlLG9lKXtXPT1udWxsJiYoVz10LmN5KTtmb3IodmFyIFY9MDtWPGRlLmxlbmd0aDtWKyspe3ZhciB4ZT1kZVtWXTtXLmVtaXQoe29yaWdpbmFsRXZlbnQ6cmUsdHlwZTp4ZSxwb3NpdGlvbjpvZX0pfX0sInRyaWdnZXJFdmVudHMiKSxhPW8oZnVuY3Rpb24oVyl7cmV0dXJuIFcuc2hpZnRLZXl8fFcubWV0YUtleXx8Vy5jdHJsS2V5fSwiaXNNdWx0U2VsS2V5RG93biIpLHM9byhmdW5jdGlvbihXLGRlKXt2YXIgcmU9ITA7aWYodC5jeS5oYXNDb21wb3VuZE5vZGVzKCkmJlcmJlcucGFubmFibGUoKSlmb3IodmFyIG9lPTA7ZGUmJm9lPGRlLmxlbmd0aDtvZSsrKXt2YXIgVz1kZVtvZV07aWYoVy5pc05vZGUoKSYmVy5pc1BhcmVudCgpJiYhVy5wYW5uYWJsZSgpKXtyZT0hMTticmVha319ZWxzZSByZT0hMDtyZXR1cm4gcmV9LCJhbGxvd1Bhbm5pbmdQYXNzdGhyb3VnaCIpLGw9byhmdW5jdGlvbihXKXtXWzBdLl9wcml2YXRlLmdyYWJiZWQ9ITB9LCJzZXRHcmFiYmVkIiksdT1vKGZ1bmN0aW9uKFcpe1dbMF0uX3ByaXZhdGUuZ3JhYmJlZD0hMX0sInNldEZyZWVkIiksaD1vKGZ1bmN0aW9uKFcpe1dbMF0uX3ByaXZhdGUucnNjcmF0Y2guaW5EcmFnTGF5ZXI9ITB9LCJzZXRJbkRyYWdMYXllciIpLGY9byhmdW5jdGlvbihXKXtXWzBdLl9wcml2YXRlLnJzY3JhdGNoLmluRHJhZ0xheWVyPSExfSwic2V0T3V0RHJhZ0xheWVyIiksZD1vKGZ1bmN0aW9uKFcpe1dbMF0uX3ByaXZhdGUucnNjcmF0Y2guaXNHcmFiVGFyZ2V0PSEwfSwic2V0R3JhYlRhcmdldCIpLHA9byhmdW5jdGlvbihXKXtXWzBdLl9wcml2YXRlLnJzY3JhdGNoLmlzR3JhYlRhcmdldD0hMX0sInJlbW92ZUdyYWJUYXJnZXQiKSxtPW8oZnVuY3Rpb24oVyxkZSl7dmFyIHJlPWRlLmFkZFRvTGlzdCxvZT1yZS5oYXMoVyk7IW9lJiZXLmdyYWJiYWJsZSgpJiYhVy5sb2NrZWQoKSYmKHJlLm1lcmdlKFcpLGwoVykpfSwiYWRkVG9EcmFnTGlzdCIpLGc9byhmdW5jdGlvbihXLGRlKXtpZihXLmN5KCkuaGFzQ29tcG91bmROb2RlcygpJiYhKGRlLmluRHJhZ0xheWVyPT1udWxsJiZkZS5hZGRUb0xpc3Q9PW51bGwpKXt2YXIgcmU9Vy5kZXNjZW5kYW50cygpO2RlLmluRHJhZ0xheWVyJiYocmUuZm9yRWFjaChoKSxyZS5jb25uZWN0ZWRFZGdlcygpLmZvckVhY2goaCkpLGRlLmFkZFRvTGlzdCYmbShyZSxkZSl9fSwiYWRkRGVzY2VuZGFudHNUb0RyYWciKSx5PW8oZnVuY3Rpb24oVyxkZSl7ZGU9ZGV8fHt9O3ZhciByZT1XLmN5KCkuaGFzQ29tcG91bmROb2RlcygpO2RlLmluRHJhZ0xheWVyJiYoVy5mb3JFYWNoKGgpLFcubmVpZ2hib3Job29kKCkuc3RkRmlsdGVyKGZ1bmN0aW9uKG9lKXtyZXR1cm4hcmV8fG9lLmlzRWRnZSgpfSkuZm9yRWFjaChoKSksZGUuYWRkVG9MaXN0JiZXLmZvckVhY2goZnVuY3Rpb24ob2Upe20ob2UsZGUpfSksZyhXLGRlKSxiKFcse2luRHJhZ0xheWVyOmRlLmluRHJhZ0xheWVyfSksdC51cGRhdGVDYWNoZWRHcmFiYmVkRWxlcygpfSwiYWRkTm9kZXNUb0RyYWciKSx2PXkseD1vKGZ1bmN0aW9uKFcpe1cmJih0LmdldENhY2hlZFpTb3J0ZWRFbGVzKCkuZm9yRWFjaChmdW5jdGlvbihkZSl7dShkZSksZihkZSkscChkZSl9KSx0LnVwZGF0ZUNhY2hlZEdyYWJiZWRFbGVzKCkpfSwiZnJlZURyYWdnZWRFbGVtZW50cyIpLGI9byhmdW5jdGlvbihXLGRlKXtpZighKGRlLmluRHJhZ0xheWVyPT1udWxsJiZkZS5hZGRUb0xpc3Q9PW51bGwpJiZXLmN5KCkuaGFzQ29tcG91bmROb2RlcygpKXt2YXIgcmU9Vy5hbmNlc3RvcnMoKS5vcnBoYW5zKCk7aWYoIXJlLnNhbWUoVykpe3ZhciBvZT1yZS5kZXNjZW5kYW50cygpLnNwYXduU2VsZigpLm1lcmdlKHJlKS51bm1lcmdlKFcpLnVubWVyZ2UoVy5kZXNjZW5kYW50cygpKSxWPW9lLmNvbm5lY3RlZEVkZ2VzKCk7ZGUuaW5EcmFnTGF5ZXImJihWLmZvckVhY2goaCksb2UuZm9yRWFjaChoKSksZGUuYWRkVG9MaXN0JiZvZS5mb3JFYWNoKGZ1bmN0aW9uKHhlKXttKHhlLGRlKX0pfX19LCJ1cGRhdGVBbmNlc3RvcnNJbkRyYWdMYXllciIpLHc9byhmdW5jdGlvbigpe2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPW51bGwmJmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1ciE9bnVsbCYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyKCl9LCJibHVyQWN0aXZlRG9tRWxlbWVudCIpLEM9dHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXI8InUiLFQ9dHlwZW9mIFJlc2l6ZU9ic2VydmVyPCJ1IjtDPyh0LnJlbW92ZU9ic2VydmVyPW5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKGJlKXtmb3IodmFyIFc9MDtXPGJlLmxlbmd0aDtXKyspe3ZhciBkZT1iZVtXXSxyZT1kZS5yZW1vdmVkTm9kZXM7aWYocmUpZm9yKHZhciBvZT0wO29lPHJlLmxlbmd0aDtvZSsrKXt2YXIgVj1yZVtvZV07aWYoVj09PXQuY29udGFpbmVyKXt0LmRlc3Ryb3koKTticmVha319fX0pLHQuY29udGFpbmVyLnBhcmVudE5vZGUmJnQucmVtb3ZlT2JzZXJ2ZXIub2JzZXJ2ZSh0LmNvbnRhaW5lci5wYXJlbnROb2RlLHtjaGlsZExpc3Q6ITB9KSk6dC5yZWdpc3RlckJpbmRpbmcodC5jb250YWluZXIsIkRPTU5vZGVSZW1vdmVkIixmdW5jdGlvbihiZSl7dC5kZXN0cm95KCl9KTt2YXIgRT1uNChmdW5jdGlvbigpe3QuY3kucmVzaXplKCl9LDEwMCk7QyYmKHQuc3R5bGVPYnNlcnZlcj1uZXcgTXV0YXRpb25PYnNlcnZlcihFKSx0LnN0eWxlT2JzZXJ2ZXIub2JzZXJ2ZSh0LmNvbnRhaW5lcix7YXR0cmlidXRlczohMH0pKSx0LnJlZ2lzdGVyQmluZGluZyhlLCJyZXNpemUiLEUpLFQmJih0LnJlc2l6ZU9ic2VydmVyPW5ldyBSZXNpemVPYnNlcnZlcihFKSx0LnJlc2l6ZU9ic2VydmVyLm9ic2VydmUodC5jb250YWluZXIpKTt2YXIgQT1vKGZ1bmN0aW9uKFcsZGUpe2Zvcig7VyE9bnVsbDspZGUoVyksVz1XLnBhcmVudE5vZGV9LCJmb3JFYWNoVXAiKSxTPW8oZnVuY3Rpb24oKXt0LmludmFsaWRhdGVDb250YWluZXJDbGllbnRDb29yZHNDYWNoZSgpfSwiaW52YWxpZGF0ZUNvb3JkcyIpO0EodC5jb250YWluZXIsZnVuY3Rpb24oYmUpe3QucmVnaXN0ZXJCaW5kaW5nKGJlLCJ0cmFuc2l0aW9uZW5kIixTKSx0LnJlZ2lzdGVyQmluZGluZyhiZSwiYW5pbWF0aW9uZW5kIixTKSx0LnJlZ2lzdGVyQmluZGluZyhiZSwic2Nyb2xsIixTKX0pLHQucmVnaXN0ZXJCaW5kaW5nKHQuY29udGFpbmVyLCJjb250ZXh0bWVudSIsZnVuY3Rpb24oYmUpe2JlLnByZXZlbnREZWZhdWx0KCl9KTt2YXIgXz1vKGZ1bmN0aW9uKCl7cmV0dXJuIHQuc2VsZWN0aW9uWzRdIT09MH0sImluQm94U2VsZWN0aW9uIiksST1vKGZ1bmN0aW9uKFcpe2Zvcih2YXIgZGU9dC5maW5kQ29udGFpbmVyQ2xpZW50Q29vcmRzKCkscmU9ZGVbMF0sb2U9ZGVbMV0sVj1kZVsyXSx4ZT1kZVszXSxxPVcudG91Y2hlcz9XLnRvdWNoZXM6W1ddLHBlPSExLHZlPTA7dmU8cS5sZW5ndGg7dmUrKyl7dmFyIFBlPXFbdmVdO2lmKHJlPD1QZS5jbGllbnRYJiZQZS5jbGllbnRYPD1yZStWJiZvZTw9UGUuY2xpZW50WSYmUGUuY2xpZW50WTw9b2UreGUpe3BlPSEwO2JyZWFrfX1pZighcGUpcmV0dXJuITE7Zm9yKHZhciBfZT10LmNvbnRhaW5lcix3ZT1XLnRhcmdldCxWZT13ZS5wYXJlbnROb2RlLERlPSExO1ZlOyl7aWYoVmU9PT1fZSl7RGU9ITA7YnJlYWt9VmU9VmUucGFyZW50Tm9kZX1yZXR1cm4hIURlfSwiZXZlbnRJbkNvbnRhaW5lciIpO3QucmVnaXN0ZXJCaW5kaW5nKHQuY29udGFpbmVyLCJtb3VzZWRvd24iLG8oZnVuY3Rpb24oVyl7aWYoSShXKSYmISh0LmhvdmVyRGF0YS53aGljaD09PTEmJlcud2hpY2ghPT0xKSl7Vy5wcmV2ZW50RGVmYXVsdCgpLHcoKSx0LmhvdmVyRGF0YS5jYXB0dXJlPSEwLHQuaG92ZXJEYXRhLndoaWNoPVcud2hpY2g7dmFyIGRlPXQuY3kscmU9W1cuY2xpZW50WCxXLmNsaWVudFldLG9lPXQucHJvamVjdEludG9WaWV3cG9ydChyZVswXSxyZVsxXSksVj10LnNlbGVjdGlvbix4ZT10LmZpbmROZWFyZXN0RWxlbWVudHMob2VbMF0sb2VbMV0sITAsITEpLHE9eGVbMF0scGU9dC5kcmFnRGF0YS5wb3NzaWJsZURyYWdFbGVtZW50czt0LmhvdmVyRGF0YS5tZG93blBvcz1vZSx0LmhvdmVyRGF0YS5tZG93bkdQb3M9cmU7dmFyIHZlPW8oZnVuY3Rpb24oKXt0LmhvdmVyRGF0YS50YXBob2xkQ2FuY2VsbGVkPSExLGNsZWFyVGltZW91dCh0LmhvdmVyRGF0YS50YXBob2xkVGltZW91dCksdC5ob3ZlckRhdGEudGFwaG9sZFRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe2lmKCF0LmhvdmVyRGF0YS50YXBob2xkQ2FuY2VsbGVkKXt2YXIgcWU9dC5ob3ZlckRhdGEuZG93bjtxZT9xZS5lbWl0KHtvcmlnaW5hbEV2ZW50OlcsdHlwZToidGFwaG9sZCIscG9zaXRpb246e3g6b2VbMF0seTpvZVsxXX19KTpkZS5lbWl0KHtvcmlnaW5hbEV2ZW50OlcsdHlwZToidGFwaG9sZCIscG9zaXRpb246e3g6b2VbMF0seTpvZVsxXX19KX19LHQudGFwaG9sZER1cmF0aW9uKX0sImNoZWNrRm9yVGFwaG9sZCIpO2lmKFcud2hpY2g9PTMpe3QuaG92ZXJEYXRhLmN4dFN0YXJ0ZWQ9ITA7dmFyIFBlPXtvcmlnaW5hbEV2ZW50OlcsdHlwZToiY3h0dGFwc3RhcnQiLHBvc2l0aW9uOnt4Om9lWzBdLHk6b2VbMV19fTtxPyhxLmFjdGl2YXRlKCkscS5lbWl0KFBlKSx0LmhvdmVyRGF0YS5kb3duPXEpOmRlLmVtaXQoUGUpLHQuaG92ZXJEYXRhLmRvd25UaW1lPW5ldyBEYXRlKCkuZ2V0VGltZSgpLHQuaG92ZXJEYXRhLmN4dERyYWdnZWQ9ITF9ZWxzZSBpZihXLndoaWNoPT0xKXtxJiZxLmFjdGl2YXRlKCk7e2lmKHEhPW51bGwmJnQubm9kZUlzR3JhYmJhYmxlKHEpKXt2YXIgX2U9byhmdW5jdGlvbihxZSl7cmV0dXJue29yaWdpbmFsRXZlbnQ6Vyx0eXBlOnFlLHBvc2l0aW9uOnt4Om9lWzBdLHk6b2VbMV19fX0sIm1ha2VFdmVudCIpLHdlPW8oZnVuY3Rpb24ocWUpe3FlLmVtaXQoX2UoImdyYWIiKSl9LCJ0cmlnZ2VyR3JhYiIpO2lmKGQocSksIXEuc2VsZWN0ZWQoKSlwZT10LmRyYWdEYXRhLnBvc3NpYmxlRHJhZ0VsZW1lbnRzPWRlLmNvbGxlY3Rpb24oKSx2KHEse2FkZFRvTGlzdDpwZX0pLHEuZW1pdChfZSgiZ3JhYm9uIikpLmVtaXQoX2UoImdyYWIiKSk7ZWxzZXtwZT10LmRyYWdEYXRhLnBvc3NpYmxlRHJhZ0VsZW1lbnRzPWRlLmNvbGxlY3Rpb24oKTt2YXIgVmU9ZGUuJChmdW5jdGlvbihEZSl7cmV0dXJuIERlLmlzTm9kZSgpJiZEZS5zZWxlY3RlZCgpJiZ0Lm5vZGVJc0dyYWJiYWJsZShEZSl9KTt5KFZlLHthZGRUb0xpc3Q6cGV9KSxxLmVtaXQoX2UoImdyYWJvbiIpKSxWZS5mb3JFYWNoKHdlKX10LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx0LnJlZHJhd0hpbnQoImRyYWciLCEwKX10LmhvdmVyRGF0YS5kb3duPXEsdC5ob3ZlckRhdGEuZG93bnM9eGUsdC5ob3ZlckRhdGEuZG93blRpbWU9bmV3IERhdGUoKS5nZXRUaW1lKCl9aShxLFsibW91c2Vkb3duIiwidGFwc3RhcnQiLCJ2bW91c2Vkb3duIl0sVyx7eDpvZVswXSx5Om9lWzFdfSkscT09bnVsbD8oVls0XT0xLHQuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj17eDpvZVswXSx5Om9lWzFdfSx0LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLHQucmVkcmF3KCkpOnEucGFubmFibGUoKSYmKFZbNF09MSksdmUoKX1WWzBdPVZbMl09b2VbMF0sVlsxXT1WWzNdPW9lWzFdfX0sIm1vdXNlZG93bkhhbmRsZXIiKSwhMSk7dmFyIEQ9bih0LmNvbnRhaW5lcik7dC5yZWdpc3RlckJpbmRpbmcoW2UsRF0sIm1vdXNlbW92ZSIsbyhmdW5jdGlvbihXKXt2YXIgZGU9dC5ob3ZlckRhdGEuY2FwdHVyZTtpZighKCFkZSYmIUkoVykpKXt2YXIgcmU9ITEsb2U9dC5jeSxWPW9lLnpvb20oKSx4ZT1bVy5jbGllbnRYLFcuY2xpZW50WV0scT10LnByb2plY3RJbnRvVmlld3BvcnQoeGVbMF0seGVbMV0pLHBlPXQuaG92ZXJEYXRhLm1kb3duUG9zLHZlPXQuaG92ZXJEYXRhLm1kb3duR1BvcyxQZT10LnNlbGVjdGlvbixfZT1udWxsOyF0LmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXMmJiF0LmhvdmVyRGF0YS5kcmFnZ2luZyYmIXQuaG92ZXJEYXRhLnNlbGVjdGluZyYmKF9lPXQuZmluZE5lYXJlc3RFbGVtZW50KHFbMF0scVsxXSwhMCwhMSkpO3ZhciB3ZT10LmhvdmVyRGF0YS5sYXN0LFZlPXQuaG92ZXJEYXRhLmRvd24sRGU9W3FbMF0tUGVbMl0scVsxXS1QZVszXV0scWU9dC5kcmFnRGF0YS5wb3NzaWJsZURyYWdFbGVtZW50cyxhdDtpZih2ZSl7dmFyIFJ0PXhlWzBdLXZlWzBdLHN0PVJ0KlJ0LFVlPXhlWzFdLXZlWzFdLGN0PVVlKlVlLFdlPXN0K2N0O3QuaG92ZXJEYXRhLmlzT3ZlclRocmVzaG9sZERyYWc9YXQ9V2U+PXQuZGVza3RvcFRhcFRocmVzaG9sZDJ9dmFyIG90PWEoVyk7YXQmJih0LmhvdmVyRGF0YS50YXBob2xkQ2FuY2VsbGVkPSEwKTt2YXIgWXQ9byhmdW5jdGlvbigpe3ZhciBUdD10LmhvdmVyRGF0YS5kcmFnRGVsdGE9dC5ob3ZlckRhdGEuZHJhZ0RlbHRhfHxbXTtUdC5sZW5ndGg9PT0wPyhUdC5wdXNoKERlWzBdKSxUdC5wdXNoKERlWzFdKSk6KFR0WzBdKz1EZVswXSxUdFsxXSs9RGVbMV0pfSwidXBkYXRlRHJhZ0RlbHRhIik7cmU9ITAsaShfZSxbIm1vdXNlbW92ZSIsInZtb3VzZW1vdmUiLCJ0YXBkcmFnIl0sVyx7eDpxWzBdLHk6cVsxXX0pO3ZhciBidD1vKGZ1bmN0aW9uKCl7dC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCx0LmhvdmVyRGF0YS5zZWxlY3Rpbmd8fG9lLmVtaXQoe29yaWdpbmFsRXZlbnQ6Vyx0eXBlOiJib3hzdGFydCIscG9zaXRpb246e3g6cVswXSx5OnFbMV19fSksUGVbNF09MSx0LmhvdmVyRGF0YS5zZWxlY3Rpbmc9ITAsdC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx0LnJlZHJhdygpfSwiZ29JbnRvQm94TW9kZSIpO2lmKHQuaG92ZXJEYXRhLndoaWNoPT09Myl7aWYoYXQpe3ZhciBNdD17b3JpZ2luYWxFdmVudDpXLHR5cGU6ImN4dGRyYWciLHBvc2l0aW9uOnt4OnFbMF0seTpxWzFdfX07VmU/VmUuZW1pdChNdCk6b2UuZW1pdChNdCksdC5ob3ZlckRhdGEuY3h0RHJhZ2dlZD0hMCwoIXQuaG92ZXJEYXRhLmN4dE92ZXJ8fF9lIT09dC5ob3ZlckRhdGEuY3h0T3ZlcikmJih0LmhvdmVyRGF0YS5jeHRPdmVyJiZ0LmhvdmVyRGF0YS5jeHRPdmVyLmVtaXQoe29yaWdpbmFsRXZlbnQ6Vyx0eXBlOiJjeHRkcmFnb3V0Iixwb3NpdGlvbjp7eDpxWzBdLHk6cVsxXX19KSx0LmhvdmVyRGF0YS5jeHRPdmVyPV9lLF9lJiZfZS5lbWl0KHtvcmlnaW5hbEV2ZW50OlcsdHlwZToiY3h0ZHJhZ292ZXIiLHBvc2l0aW9uOnt4OnFbMF0seTpxWzFdfX0pKX19ZWxzZSBpZih0LmhvdmVyRGF0YS5kcmFnZ2luZyl7aWYocmU9ITAsb2UucGFubmluZ0VuYWJsZWQoKSYmb2UudXNlclBhbm5pbmdFbmFibGVkKCkpe3ZhciB4dDtpZih0LmhvdmVyRGF0YS5qdXN0U3RhcnRlZFBhbil7dmFyIHV0PXQuaG92ZXJEYXRhLm1kb3duUG9zO3h0PXt4OihxWzBdLXV0WzBdKSpWLHk6KHFbMV0tdXRbMV0pKlZ9LHQuaG92ZXJEYXRhLmp1c3RTdGFydGVkUGFuPSExfWVsc2UgeHQ9e3g6RGVbMF0qVix5OkRlWzFdKlZ9O29lLnBhbkJ5KHh0KSxvZS5lbWl0KCJkcmFncGFuIiksdC5ob3ZlckRhdGEuZHJhZ2dlZD0hMH1xPXQucHJvamVjdEludG9WaWV3cG9ydChXLmNsaWVudFgsVy5jbGllbnRZKX1lbHNlIGlmKFBlWzRdPT0xJiYoVmU9PW51bGx8fFZlLnBhbm5hYmxlKCkpKXtpZihhdCl7aWYoIXQuaG92ZXJEYXRhLmRyYWdnaW5nJiZvZS5ib3hTZWxlY3Rpb25FbmFibGVkKCkmJihvdHx8IW9lLnBhbm5pbmdFbmFibGVkKCl8fCFvZS51c2VyUGFubmluZ0VuYWJsZWQoKSkpYnQoKTtlbHNlIGlmKCF0LmhvdmVyRGF0YS5zZWxlY3RpbmcmJm9lLnBhbm5pbmdFbmFibGVkKCkmJm9lLnVzZXJQYW5uaW5nRW5hYmxlZCgpKXt2YXIgRXQ9cyhWZSx0LmhvdmVyRGF0YS5kb3ducyk7RXQmJih0LmhvdmVyRGF0YS5kcmFnZ2luZz0hMCx0LmhvdmVyRGF0YS5qdXN0U3RhcnRlZFBhbj0hMCxQZVs0XT0wLHQuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj1VMShwZSksdC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx0LnJlZHJhdygpKX1WZSYmVmUucGFubmFibGUoKSYmVmUuYWN0aXZlKCkmJlZlLnVuYWN0aXZhdGUoKX19ZWxzZXtpZihWZSYmVmUucGFubmFibGUoKSYmVmUuYWN0aXZlKCkmJlZlLnVuYWN0aXZhdGUoKSwoIVZlfHwhVmUuZ3JhYmJlZCgpKSYmX2UhPXdlJiYod2UmJmkod2UsWyJtb3VzZW91dCIsInRhcGRyYWdvdXQiXSxXLHt4OnFbMF0seTpxWzFdfSksX2UmJmkoX2UsWyJtb3VzZW92ZXIiLCJ0YXBkcmFnb3ZlciJdLFcse3g6cVswXSx5OnFbMV19KSx0LmhvdmVyRGF0YS5sYXN0PV9lKSxWZSlpZihhdCl7aWYob2UuYm94U2VsZWN0aW9uRW5hYmxlZCgpJiZvdClWZSYmVmUuZ3JhYmJlZCgpJiYoeChxZSksVmUuZW1pdCgiZnJlZW9uIikscWUuZW1pdCgiZnJlZSIpLHQuZHJhZ0RhdGEuZGlkRHJhZyYmKFZlLmVtaXQoImRyYWdmcmVlb24iKSxxZS5lbWl0KCJkcmFnZnJlZSIpKSksYnQoKTtlbHNlIGlmKFZlJiZWZS5ncmFiYmVkKCkmJnQubm9kZUlzRHJhZ2dhYmxlKFZlKSl7dmFyIGZ0PSF0LmRyYWdEYXRhLmRpZERyYWc7ZnQmJnQucmVkcmF3SGludCgiZWxlcyIsITApLHQuZHJhZ0RhdGEuZGlkRHJhZz0hMCx0LmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXN8fHkocWUse2luRHJhZ0xheWVyOiEwfSk7dmFyIHl0PXt4OjAseTowfTtpZihDdChEZVswXSkmJkN0KERlWzFdKSYmKHl0LngrPURlWzBdLHl0LnkrPURlWzFdLGZ0KSl7dmFyIG50PXQuaG92ZXJEYXRhLmRyYWdEZWx0YTtudCYmQ3QobnRbMF0pJiZDdChudFsxXSkmJih5dC54Kz1udFswXSx5dC55Kz1udFsxXSl9dC5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzPSEwLHFlLnNpbGVudFNoaWZ0KHl0KS5lbWl0KCJwb3NpdGlvbiBkcmFnIiksdC5yZWRyYXdIaW50KCJkcmFnIiwhMCksdC5yZWRyYXcoKX19ZWxzZSBZdCgpO3JlPSEwfWlmKFBlWzJdPXFbMF0sUGVbM109cVsxXSxyZSlyZXR1cm4gVy5zdG9wUHJvcGFnYXRpb24mJlcuc3RvcFByb3BhZ2F0aW9uKCksVy5wcmV2ZW50RGVmYXVsdCYmVy5wcmV2ZW50RGVmYXVsdCgpLCExfX0sIm1vdXNlbW92ZUhhbmRsZXIiKSwhMSk7dmFyIGssTCxSO3QucmVnaXN0ZXJCaW5kaW5nKGUsIm1vdXNldXAiLG8oZnVuY3Rpb24oVyl7aWYoISh0LmhvdmVyRGF0YS53aGljaD09PTEmJlcud2hpY2ghPT0xJiZ0LmhvdmVyRGF0YS5jYXB0dXJlKSl7dmFyIGRlPXQuaG92ZXJEYXRhLmNhcHR1cmU7aWYoZGUpe3QuaG92ZXJEYXRhLmNhcHR1cmU9ITE7dmFyIHJlPXQuY3ksb2U9dC5wcm9qZWN0SW50b1ZpZXdwb3J0KFcuY2xpZW50WCxXLmNsaWVudFkpLFY9dC5zZWxlY3Rpb24seGU9dC5maW5kTmVhcmVzdEVsZW1lbnQob2VbMF0sb2VbMV0sITAsITEpLHE9dC5kcmFnRGF0YS5wb3NzaWJsZURyYWdFbGVtZW50cyxwZT10LmhvdmVyRGF0YS5kb3duLHZlPWEoVyk7aWYodC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uJiYodC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx0LnJlZHJhdygpKSx0LmhvdmVyRGF0YS50YXBob2xkQ2FuY2VsbGVkPSEwLHQuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAscGUmJnBlLnVuYWN0aXZhdGUoKSx0LmhvdmVyRGF0YS53aGljaD09PTMpe3ZhciBQZT17b3JpZ2luYWxFdmVudDpXLHR5cGU6ImN4dHRhcGVuZCIscG9zaXRpb246e3g6b2VbMF0seTpvZVsxXX19O2lmKHBlP3BlLmVtaXQoUGUpOnJlLmVtaXQoUGUpLCF0LmhvdmVyRGF0YS5jeHREcmFnZ2VkKXt2YXIgX2U9e29yaWdpbmFsRXZlbnQ6Vyx0eXBlOiJjeHR0YXAiLHBvc2l0aW9uOnt4Om9lWzBdLHk6b2VbMV19fTtwZT9wZS5lbWl0KF9lKTpyZS5lbWl0KF9lKX10LmhvdmVyRGF0YS5jeHREcmFnZ2VkPSExLHQuaG92ZXJEYXRhLndoaWNoPW51bGx9ZWxzZSBpZih0LmhvdmVyRGF0YS53aGljaD09PTEpe2lmKGkoeGUsWyJtb3VzZXVwIiwidGFwZW5kIiwidm1vdXNldXAiXSxXLHt4Om9lWzBdLHk6b2VbMV19KSwhdC5kcmFnRGF0YS5kaWREcmFnJiYhdC5ob3ZlckRhdGEuZHJhZ2dlZCYmIXQuaG92ZXJEYXRhLnNlbGVjdGluZyYmIXQuaG92ZXJEYXRhLmlzT3ZlclRocmVzaG9sZERyYWcmJihpKHBlLFsiY2xpY2siLCJ0YXAiLCJ2Y2xpY2siXSxXLHt4Om9lWzBdLHk6b2VbMV19KSxMPSExLFcudGltZVN0YW1wLVI8PXJlLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUoKT8oayYmY2xlYXJUaW1lb3V0KGspLEw9ITAsUj1udWxsLGkocGUsWyJkYmxjbGljayIsImRibHRhcCIsInZkYmxjbGljayJdLFcse3g6b2VbMF0seTpvZVsxXX0pKTooaz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7THx8aShwZSxbIm9uZWNsaWNrIiwib25ldGFwIiwidm9uZWNsaWNrIl0sVyx7eDpvZVswXSx5Om9lWzFdfSl9LHJlLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUoKSksUj1XLnRpbWVTdGFtcCkpLHBlPT1udWxsJiYhdC5kcmFnRGF0YS5kaWREcmFnJiYhdC5ob3ZlckRhdGEuc2VsZWN0aW5nJiYhdC5ob3ZlckRhdGEuZHJhZ2dlZCYmIWEoVykmJihyZS4kKHIpLnVuc2VsZWN0KFsidGFwdW5zZWxlY3QiXSkscS5sZW5ndGg+MCYmdC5yZWRyYXdIaW50KCJlbGVzIiwhMCksdC5kcmFnRGF0YS5wb3NzaWJsZURyYWdFbGVtZW50cz1xPXJlLmNvbGxlY3Rpb24oKSkseGU9PXBlJiYhdC5kcmFnRGF0YS5kaWREcmFnJiYhdC5ob3ZlckRhdGEuc2VsZWN0aW5nJiZ4ZSE9bnVsbCYmeGUuX3ByaXZhdGUuc2VsZWN0YWJsZSYmKHQuaG92ZXJEYXRhLmRyYWdnaW5nfHwocmUuc2VsZWN0aW9uVHlwZSgpPT09ImFkZGl0aXZlInx8dmU/eGUuc2VsZWN0ZWQoKT94ZS51bnNlbGVjdChbInRhcHVuc2VsZWN0Il0pOnhlLnNlbGVjdChbInRhcHNlbGVjdCJdKTp2ZXx8KHJlLiQocikudW5tZXJnZSh4ZSkudW5zZWxlY3QoWyJ0YXB1bnNlbGVjdCJdKSx4ZS5zZWxlY3QoWyJ0YXBzZWxlY3QiXSkpKSx0LnJlZHJhd0hpbnQoImVsZXMiLCEwKSksdC5ob3ZlckRhdGEuc2VsZWN0aW5nKXt2YXIgd2U9cmUuY29sbGVjdGlvbih0LmdldEFsbEluQm94KFZbMF0sVlsxXSxWWzJdLFZbM10pKTt0LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLHdlLmxlbmd0aD4wJiZ0LnJlZHJhd0hpbnQoImVsZXMiLCEwKSxyZS5lbWl0KHt0eXBlOiJib3hlbmQiLG9yaWdpbmFsRXZlbnQ6Vyxwb3NpdGlvbjp7eDpvZVswXSx5Om9lWzFdfX0pO3ZhciBWZT1vKGZ1bmN0aW9uKGF0KXtyZXR1cm4gYXQuc2VsZWN0YWJsZSgpJiYhYXQuc2VsZWN0ZWQoKX0sImVsZVdvdWxkQmVTZWxlY3RlZCIpO3JlLnNlbGVjdGlvblR5cGUoKT09PSJhZGRpdGl2ZSJ8fHZlfHxyZS4kKHIpLnVubWVyZ2Uod2UpLnVuc2VsZWN0KCksd2UuZW1pdCgiYm94Iikuc3RkRmlsdGVyKFZlKS5zZWxlY3QoKS5lbWl0KCJib3hzZWxlY3QiKSx0LnJlZHJhdygpfWlmKHQuaG92ZXJEYXRhLmRyYWdnaW5nJiYodC5ob3ZlckRhdGEuZHJhZ2dpbmc9ITEsdC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx0LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx0LnJlZHJhdygpKSwhVls0XSl7dC5yZWRyYXdIaW50KCJkcmFnIiwhMCksdC5yZWRyYXdIaW50KCJlbGVzIiwhMCk7dmFyIERlPXBlJiZwZS5ncmFiYmVkKCk7eChxKSxEZSYmKHBlLmVtaXQoImZyZWVvbiIpLHEuZW1pdCgiZnJlZSIpLHQuZHJhZ0RhdGEuZGlkRHJhZyYmKHBlLmVtaXQoImRyYWdmcmVlb24iKSxxLmVtaXQoImRyYWdmcmVlIikpKX19Vls0XT0wLHQuaG92ZXJEYXRhLmRvd249bnVsbCx0LmhvdmVyRGF0YS5jeHRTdGFydGVkPSExLHQuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcz0hMSx0LmhvdmVyRGF0YS5zZWxlY3Rpbmc9ITEsdC5ob3ZlckRhdGEuaXNPdmVyVGhyZXNob2xkRHJhZz0hMSx0LmRyYWdEYXRhLmRpZERyYWc9ITEsdC5ob3ZlckRhdGEuZHJhZ2dlZD0hMSx0LmhvdmVyRGF0YS5kcmFnRGVsdGE9W10sdC5ob3ZlckRhdGEubWRvd25Qb3M9bnVsbCx0LmhvdmVyRGF0YS5tZG93bkdQb3M9bnVsbCx0LmhvdmVyRGF0YS53aGljaD1udWxsfX19LCJtb3VzZXVwSGFuZGxlciIpLCExKTt2YXIgTz1vKGZ1bmN0aW9uKFcpe2lmKCF0LnNjcm9sbGluZ1BhZ2Upe3ZhciBkZT10LmN5LHJlPWRlLnpvb20oKSxvZT1kZS5wYW4oKSxWPXQucHJvamVjdEludG9WaWV3cG9ydChXLmNsaWVudFgsVy5jbGllbnRZKSx4ZT1bVlswXSpyZStvZS54LFZbMV0qcmUrb2UueV07aWYodC5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzfHx0LmhvdmVyRGF0YS5kcmFnZ2luZ3x8dC5ob3ZlckRhdGEuY3h0U3RhcnRlZHx8XygpKXtXLnByZXZlbnREZWZhdWx0KCk7cmV0dXJufWlmKGRlLnBhbm5pbmdFbmFibGVkKCkmJmRlLnVzZXJQYW5uaW5nRW5hYmxlZCgpJiZkZS56b29taW5nRW5hYmxlZCgpJiZkZS51c2VyWm9vbWluZ0VuYWJsZWQoKSl7Vy5wcmV2ZW50RGVmYXVsdCgpLHQuZGF0YS53aGVlbFpvb21pbmc9ITAsY2xlYXJUaW1lb3V0KHQuZGF0YS53aGVlbFRpbWVvdXQpLHQuZGF0YS53aGVlbFRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe3QuZGF0YS53aGVlbFpvb21pbmc9ITEsdC5yZWRyYXdIaW50KCJlbGVzIiwhMCksdC5yZWRyYXcoKX0sMTUwKTt2YXIgcTtXLmRlbHRhWSE9bnVsbD9xPVcuZGVsdGFZLy0yNTA6Vy53aGVlbERlbHRhWSE9bnVsbD9xPVcud2hlZWxEZWx0YVkvMWUzOnE9Vy53aGVlbERlbHRhLzFlMyxxPXEqdC53aGVlbFNlbnNpdGl2aXR5O3ZhciBwZT1XLmRlbHRhTW9kZT09PTE7cGUmJihxKj0zMyk7dmFyIHZlPWRlLnpvb20oKSpNYXRoLnBvdygxMCxxKTtXLnR5cGU9PT0iZ2VzdHVyZWNoYW5nZSImJih2ZT10Lmdlc3R1cmVTdGFydFpvb20qVy5zY2FsZSksZGUuem9vbSh7bGV2ZWw6dmUscmVuZGVyZWRQb3NpdGlvbjp7eDp4ZVswXSx5OnhlWzFdfX0pLGRlLmVtaXQoVy50eXBlPT09Imdlc3R1cmVjaGFuZ2UiPyJwaW5jaHpvb20iOiJzY3JvbGx6b29tIil9fX0sIndoZWVsSGFuZGxlciIpO3QucmVnaXN0ZXJCaW5kaW5nKHQuY29udGFpbmVyLCJ3aGVlbCIsTywhMCksdC5yZWdpc3RlckJpbmRpbmcoZSwic2Nyb2xsIixvKGZ1bmN0aW9uKFcpe3Quc2Nyb2xsaW5nUGFnZT0hMCxjbGVhclRpbWVvdXQodC5zY3JvbGxpbmdQYWdlVGltZW91dCksdC5zY3JvbGxpbmdQYWdlVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC5zY3JvbGxpbmdQYWdlPSExfSwyNTApfSwic2Nyb2xsSGFuZGxlciIpLCEwKSx0LnJlZ2lzdGVyQmluZGluZyh0LmNvbnRhaW5lciwiZ2VzdHVyZXN0YXJ0IixvKGZ1bmN0aW9uKFcpe3QuZ2VzdHVyZVN0YXJ0Wm9vbT10LmN5Lnpvb20oKSx0Lmhhc1RvdWNoU3RhcnRlZHx8Vy5wcmV2ZW50RGVmYXVsdCgpfSwiZ2VzdHVyZVN0YXJ0SGFuZGxlciIpLCEwKSx0LnJlZ2lzdGVyQmluZGluZyh0LmNvbnRhaW5lciwiZ2VzdHVyZWNoYW5nZSIsZnVuY3Rpb24oYmUpe3QuaGFzVG91Y2hTdGFydGVkfHxPKGJlKX0sITApLHQucmVnaXN0ZXJCaW5kaW5nKHQuY29udGFpbmVyLCJtb3VzZW91dCIsbyhmdW5jdGlvbihXKXt2YXIgZGU9dC5wcm9qZWN0SW50b1ZpZXdwb3J0KFcuY2xpZW50WCxXLmNsaWVudFkpO3QuY3kuZW1pdCh7b3JpZ2luYWxFdmVudDpXLHR5cGU6Im1vdXNlb3V0Iixwb3NpdGlvbjp7eDpkZVswXSx5OmRlWzFdfX0pfSwibW91c2VPdXRIYW5kbGVyIiksITEpLHQucmVnaXN0ZXJCaW5kaW5nKHQuY29udGFpbmVyLCJtb3VzZW92ZXIiLG8oZnVuY3Rpb24oVyl7dmFyIGRlPXQucHJvamVjdEludG9WaWV3cG9ydChXLmNsaWVudFgsVy5jbGllbnRZKTt0LmN5LmVtaXQoe29yaWdpbmFsRXZlbnQ6Vyx0eXBlOiJtb3VzZW92ZXIiLHBvc2l0aW9uOnt4OmRlWzBdLHk6ZGVbMV19fSl9LCJtb3VzZU92ZXJIYW5kbGVyIiksITEpO3ZhciBNLEIsRixQLHosJCxILFEsaixpZSxuZSxsZSxoZSxLPW8oZnVuY3Rpb24oVyxkZSxyZSxvZSl7cmV0dXJuIE1hdGguc3FydCgocmUtVykqKHJlLVcpKyhvZS1kZSkqKG9lLWRlKSl9LCJkaXN0YW5jZSIpLFg9byhmdW5jdGlvbihXLGRlLHJlLG9lKXtyZXR1cm4ocmUtVykqKHJlLVcpKyhvZS1kZSkqKG9lLWRlKX0sImRpc3RhbmNlU3EiKSx0ZTt0LnJlZ2lzdGVyQmluZGluZyh0LmNvbnRhaW5lciwidG91Y2hzdGFydCIsdGU9byhmdW5jdGlvbihXKXtpZih0Lmhhc1RvdWNoU3RhcnRlZD0hMCwhIUkoVykpe3coKSx0LnRvdWNoRGF0YS5jYXB0dXJlPSEwLHQuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDA7dmFyIGRlPXQuY3kscmU9dC50b3VjaERhdGEubm93LG9lPXQudG91Y2hEYXRhLmVhcmxpZXI7aWYoVy50b3VjaGVzWzBdKXt2YXIgVj10LnByb2plY3RJbnRvVmlld3BvcnQoVy50b3VjaGVzWzBdLmNsaWVudFgsVy50b3VjaGVzWzBdLmNsaWVudFkpO3JlWzBdPVZbMF0scmVbMV09VlsxXX1pZihXLnRvdWNoZXNbMV0pe3ZhciBWPXQucHJvamVjdEludG9WaWV3cG9ydChXLnRvdWNoZXNbMV0uY2xpZW50WCxXLnRvdWNoZXNbMV0uY2xpZW50WSk7cmVbMl09VlswXSxyZVszXT1WWzFdfWlmKFcudG91Y2hlc1syXSl7dmFyIFY9dC5wcm9qZWN0SW50b1ZpZXdwb3J0KFcudG91Y2hlc1syXS5jbGllbnRYLFcudG91Y2hlc1syXS5jbGllbnRZKTtyZVs0XT1WWzBdLHJlWzVdPVZbMV19aWYoVy50b3VjaGVzWzFdKXt0LnRvdWNoRGF0YS5zaW5nbGVUb3VjaE1vdmVkPSEwLHgodC5kcmFnRGF0YS50b3VjaERyYWdFbGVzKTt2YXIgeGU9dC5maW5kQ29udGFpbmVyQ2xpZW50Q29vcmRzKCk7aj14ZVswXSxpZT14ZVsxXSxuZT14ZVsyXSxsZT14ZVszXSxNPVcudG91Y2hlc1swXS5jbGllbnRYLWosQj1XLnRvdWNoZXNbMF0uY2xpZW50WS1pZSxGPVcudG91Y2hlc1sxXS5jbGllbnRYLWosUD1XLnRvdWNoZXNbMV0uY2xpZW50WS1pZSxoZT0wPD1NJiZNPD1uZSYmMDw9RiYmRjw9bmUmJjA8PUImJkI8PWxlJiYwPD1QJiZQPD1sZTt2YXIgcT1kZS5wYW4oKSxwZT1kZS56b29tKCk7ej1LKE0sQixGLFApLCQ9WChNLEIsRixQKSxIPVsoTStGKS8yLChCK1ApLzJdLFE9WyhIWzBdLXEueCkvcGUsKEhbMV0tcS55KS9wZV07dmFyIHZlPTIwMCxQZT12ZSp2ZTtpZigkPFBlJiYhVy50b3VjaGVzWzJdKXt2YXIgX2U9dC5maW5kTmVhcmVzdEVsZW1lbnQocmVbMF0scmVbMV0sITAsITApLHdlPXQuZmluZE5lYXJlc3RFbGVtZW50KHJlWzJdLHJlWzNdLCEwLCEwKTtfZSYmX2UuaXNOb2RlKCk/KF9lLmFjdGl2YXRlKCkuZW1pdCh7b3JpZ2luYWxFdmVudDpXLHR5cGU6ImN4dHRhcHN0YXJ0Iixwb3NpdGlvbjp7eDpyZVswXSx5OnJlWzFdfX0pLHQudG91Y2hEYXRhLnN0YXJ0PV9lKTp3ZSYmd2UuaXNOb2RlKCk/KHdlLmFjdGl2YXRlKCkuZW1pdCh7b3JpZ2luYWxFdmVudDpXLHR5cGU6ImN4dHRhcHN0YXJ0Iixwb3NpdGlvbjp7eDpyZVswXSx5OnJlWzFdfX0pLHQudG91Y2hEYXRhLnN0YXJ0PXdlKTpkZS5lbWl0KHtvcmlnaW5hbEV2ZW50OlcsdHlwZToiY3h0dGFwc3RhcnQiLHBvc2l0aW9uOnt4OnJlWzBdLHk6cmVbMV19fSksdC50b3VjaERhdGEuc3RhcnQmJih0LnRvdWNoRGF0YS5zdGFydC5fcHJpdmF0ZS5ncmFiYmVkPSExKSx0LnRvdWNoRGF0YS5jeHQ9ITAsdC50b3VjaERhdGEuY3h0RHJhZ2dlZD0hMSx0LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249dm9pZCAwLHQucmVkcmF3KCk7cmV0dXJufX1pZihXLnRvdWNoZXNbMl0pZGUuYm94U2VsZWN0aW9uRW5hYmxlZCgpJiZXLnByZXZlbnREZWZhdWx0KCk7ZWxzZSBpZighVy50b3VjaGVzWzFdKXtpZihXLnRvdWNoZXNbMF0pe3ZhciBWZT10LmZpbmROZWFyZXN0RWxlbWVudHMocmVbMF0scmVbMV0sITAsITApLERlPVZlWzBdO2lmKERlIT1udWxsJiYoRGUuYWN0aXZhdGUoKSx0LnRvdWNoRGF0YS5zdGFydD1EZSx0LnRvdWNoRGF0YS5zdGFydHM9VmUsdC5ub2RlSXNHcmFiYmFibGUoRGUpKSl7dmFyIHFlPXQuZHJhZ0RhdGEudG91Y2hEcmFnRWxlcz1kZS5jb2xsZWN0aW9uKCksYXQ9bnVsbDt0LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx0LnJlZHJhd0hpbnQoImRyYWciLCEwKSxEZS5zZWxlY3RlZCgpPyhhdD1kZS4kKGZ1bmN0aW9uKFdlKXtyZXR1cm4gV2Uuc2VsZWN0ZWQoKSYmdC5ub2RlSXNHcmFiYmFibGUoV2UpfSkseShhdCx7YWRkVG9MaXN0OnFlfSkpOnYoRGUse2FkZFRvTGlzdDpxZX0pLGQoRGUpO3ZhciBSdD1vKGZ1bmN0aW9uKG90KXtyZXR1cm57b3JpZ2luYWxFdmVudDpXLHR5cGU6b3QscG9zaXRpb246e3g6cmVbMF0seTpyZVsxXX19fSwibWFrZUV2ZW50Iik7RGUuZW1pdChSdCgiZ3JhYm9uIikpLGF0P2F0LmZvckVhY2goZnVuY3Rpb24oV2Upe1dlLmVtaXQoUnQoImdyYWIiKSl9KTpEZS5lbWl0KFJ0KCJncmFiIikpfWkoRGUsWyJ0b3VjaHN0YXJ0IiwidGFwc3RhcnQiLCJ2bW91c2Vkb3duIl0sVyx7eDpyZVswXSx5OnJlWzFdfSksRGU9PW51bGwmJih0LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249e3g6VlswXSx5OlZbMV19LHQucmVkcmF3SGludCgic2VsZWN0IiwhMCksdC5yZWRyYXcoKSksdC50b3VjaERhdGEuc2luZ2xlVG91Y2hNb3ZlZD0hMSx0LnRvdWNoRGF0YS5zaW5nbGVUb3VjaFN0YXJ0VGltZT0rbmV3IERhdGUsY2xlYXJUaW1lb3V0KHQudG91Y2hEYXRhLnRhcGhvbGRUaW1lb3V0KSx0LnRvdWNoRGF0YS50YXBob2xkVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC50b3VjaERhdGEuc2luZ2xlVG91Y2hNb3ZlZD09PSExJiYhdC5waW5jaGluZyYmIXQudG91Y2hEYXRhLnNlbGVjdGluZyYmaSh0LnRvdWNoRGF0YS5zdGFydCxbInRhcGhvbGQiXSxXLHt4OnJlWzBdLHk6cmVbMV19KX0sdC50YXBob2xkRHVyYXRpb24pfX1pZihXLnRvdWNoZXMubGVuZ3RoPj0xKXtmb3IodmFyIHN0PXQudG91Y2hEYXRhLnN0YXJ0UG9zaXRpb249W251bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXSxVZT0wO1VlPHJlLmxlbmd0aDtVZSsrKXN0W1VlXT1vZVtVZV09cmVbVWVdO3ZhciBjdD1XLnRvdWNoZXNbMF07dC50b3VjaERhdGEuc3RhcnRHUG9zaXRpb249W2N0LmNsaWVudFgsY3QuY2xpZW50WV19fX0sInRvdWNoc3RhcnRIYW5kbGVyIiksITEpO3ZhciBKO3QucmVnaXN0ZXJCaW5kaW5nKGUsInRvdWNobW92ZSIsSj1vKGZ1bmN0aW9uKFcpe3ZhciBkZT10LnRvdWNoRGF0YS5jYXB0dXJlO2lmKCEoIWRlJiYhSShXKSkpe3ZhciByZT10LnNlbGVjdGlvbixvZT10LmN5LFY9dC50b3VjaERhdGEubm93LHhlPXQudG91Y2hEYXRhLmVhcmxpZXIscT1vZS56b29tKCk7aWYoVy50b3VjaGVzWzBdKXt2YXIgcGU9dC5wcm9qZWN0SW50b1ZpZXdwb3J0KFcudG91Y2hlc1swXS5jbGllbnRYLFcudG91Y2hlc1swXS5jbGllbnRZKTtWWzBdPXBlWzBdLFZbMV09cGVbMV19aWYoVy50b3VjaGVzWzFdKXt2YXIgcGU9dC5wcm9qZWN0SW50b1ZpZXdwb3J0KFcudG91Y2hlc1sxXS5jbGllbnRYLFcudG91Y2hlc1sxXS5jbGllbnRZKTtWWzJdPXBlWzBdLFZbM109cGVbMV19aWYoVy50b3VjaGVzWzJdKXt2YXIgcGU9dC5wcm9qZWN0SW50b1ZpZXdwb3J0KFcudG91Y2hlc1syXS5jbGllbnRYLFcudG91Y2hlc1syXS5jbGllbnRZKTtWWzRdPXBlWzBdLFZbNV09cGVbMV19dmFyIHZlPXQudG91Y2hEYXRhLnN0YXJ0R1Bvc2l0aW9uLFBlO2lmKGRlJiZXLnRvdWNoZXNbMF0mJnZlKXtmb3IodmFyIF9lPVtdLHdlPTA7d2U8Vi5sZW5ndGg7d2UrKylfZVt3ZV09Vlt3ZV0teGVbd2VdO3ZhciBWZT1XLnRvdWNoZXNbMF0uY2xpZW50WC12ZVswXSxEZT1WZSpWZSxxZT1XLnRvdWNoZXNbMF0uY2xpZW50WS12ZVsxXSxhdD1xZSpxZSxSdD1EZSthdDtQZT1SdD49dC50b3VjaFRhcFRocmVzaG9sZDJ9aWYoZGUmJnQudG91Y2hEYXRhLmN4dCl7Vy5wcmV2ZW50RGVmYXVsdCgpO3ZhciBzdD1XLnRvdWNoZXNbMF0uY2xpZW50WC1qLFVlPVcudG91Y2hlc1swXS5jbGllbnRZLWllLGN0PVcudG91Y2hlc1sxXS5jbGllbnRYLWosV2U9Vy50b3VjaGVzWzFdLmNsaWVudFktaWUsb3Q9WChzdCxVZSxjdCxXZSksWXQ9b3QvJCxidD0xNTAsTXQ9YnQqYnQseHQ9MS41LHV0PXh0Knh0O2lmKFl0Pj11dHx8b3Q+PU10KXt0LnRvdWNoRGF0YS5jeHQ9ITEsdC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCx0LnJlZHJhd0hpbnQoInNlbGVjdCIsITApO3ZhciBFdD17b3JpZ2luYWxFdmVudDpXLHR5cGU6ImN4dHRhcGVuZCIscG9zaXRpb246e3g6VlswXSx5OlZbMV19fTt0LnRvdWNoRGF0YS5zdGFydD8odC50b3VjaERhdGEuc3RhcnQudW5hY3RpdmF0ZSgpLmVtaXQoRXQpLHQudG91Y2hEYXRhLnN0YXJ0PW51bGwpOm9lLmVtaXQoRXQpfX1pZihkZSYmdC50b3VjaERhdGEuY3h0KXt2YXIgRXQ9e29yaWdpbmFsRXZlbnQ6Vyx0eXBlOiJjeHRkcmFnIixwb3NpdGlvbjp7eDpWWzBdLHk6VlsxXX19O3QuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAsdC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx0LnRvdWNoRGF0YS5zdGFydD90LnRvdWNoRGF0YS5zdGFydC5lbWl0KEV0KTpvZS5lbWl0KEV0KSx0LnRvdWNoRGF0YS5zdGFydCYmKHQudG91Y2hEYXRhLnN0YXJ0Ll9wcml2YXRlLmdyYWJiZWQ9ITEpLHQudG91Y2hEYXRhLmN4dERyYWdnZWQ9ITA7dmFyIGZ0PXQuZmluZE5lYXJlc3RFbGVtZW50KFZbMF0sVlsxXSwhMCwhMCk7KCF0LnRvdWNoRGF0YS5jeHRPdmVyfHxmdCE9PXQudG91Y2hEYXRhLmN4dE92ZXIpJiYodC50b3VjaERhdGEuY3h0T3ZlciYmdC50b3VjaERhdGEuY3h0T3Zlci5lbWl0KHtvcmlnaW5hbEV2ZW50OlcsdHlwZToiY3h0ZHJhZ291dCIscG9zaXRpb246e3g6VlswXSx5OlZbMV19fSksdC50b3VjaERhdGEuY3h0T3Zlcj1mdCxmdCYmZnQuZW1pdCh7b3JpZ2luYWxFdmVudDpXLHR5cGU6ImN4dGRyYWdvdmVyIixwb3NpdGlvbjp7eDpWWzBdLHk6VlsxXX19KSl9ZWxzZSBpZihkZSYmVy50b3VjaGVzWzJdJiZvZS5ib3hTZWxlY3Rpb25FbmFibGVkKCkpVy5wcmV2ZW50RGVmYXVsdCgpLHQuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAsdGhpcy5sYXN0VGhyZWVUb3VjaD0rbmV3IERhdGUsdC50b3VjaERhdGEuc2VsZWN0aW5nfHxvZS5lbWl0KHtvcmlnaW5hbEV2ZW50OlcsdHlwZToiYm94c3RhcnQiLHBvc2l0aW9uOnt4OlZbMF0seTpWWzFdfX0pLHQudG91Y2hEYXRhLnNlbGVjdGluZz0hMCx0LnRvdWNoRGF0YS5kaWRTZWxlY3Q9ITAscmVbNF09MSwhcmV8fHJlLmxlbmd0aD09PTB8fHJlWzBdPT09dm9pZCAwPyhyZVswXT0oVlswXStWWzJdK1ZbNF0pLzMscmVbMV09KFZbMV0rVlszXStWWzVdKS8zLHJlWzJdPShWWzBdK1ZbMl0rVls0XSkvMysxLHJlWzNdPShWWzFdK1ZbM10rVls1XSkvMysxKToocmVbMl09KFZbMF0rVlsyXStWWzRdKS8zLHJlWzNdPShWWzFdK1ZbM10rVls1XSkvMyksdC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx0LnJlZHJhdygpO2Vsc2UgaWYoZGUmJlcudG91Y2hlc1sxXSYmIXQudG91Y2hEYXRhLmRpZFNlbGVjdCYmb2Uuem9vbWluZ0VuYWJsZWQoKSYmb2UucGFubmluZ0VuYWJsZWQoKSYmb2UudXNlclpvb21pbmdFbmFibGVkKCkmJm9lLnVzZXJQYW5uaW5nRW5hYmxlZCgpKXtXLnByZXZlbnREZWZhdWx0KCksdC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCx0LnJlZHJhd0hpbnQoInNlbGVjdCIsITApO3ZhciB5dD10LmRyYWdEYXRhLnRvdWNoRHJhZ0VsZXM7aWYoeXQpe3QucmVkcmF3SGludCgiZHJhZyIsITApO2Zvcih2YXIgbnQ9MDtudDx5dC5sZW5ndGg7bnQrKyl7dmFyIGRuPXl0W250XS5fcHJpdmF0ZTtkbi5ncmFiYmVkPSExLGRuLnJzY3JhdGNoLmluRHJhZ0xheWVyPSExfX12YXIgVHQ9dC50b3VjaERhdGEuc3RhcnQsc3Q9Vy50b3VjaGVzWzBdLmNsaWVudFgtaixVZT1XLnRvdWNoZXNbMF0uY2xpZW50WS1pZSxjdD1XLnRvdWNoZXNbMV0uY2xpZW50WC1qLFdlPVcudG91Y2hlc1sxXS5jbGllbnRZLWllLE9uPUsoc3QsVWUsY3QsV2UpLHRuPU9uL3o7aWYoaGUpe3ZhciBfcj1zdC1NLERyPVVlLUIsUG49Y3QtRixBdD1XZS1QLENlPShfcitQbikvMix0dD0oRHIrQXQpLzIsU3Q9b2Uuem9vbSgpLG1yPVN0KnRuLHJuPW9lLnBhbigpLGduPVFbMF0qU3Qrcm4ueCxacj1RWzFdKlN0K3JuLnksTmk9e3g6LW1yL1N0Kihnbi1ybi54LUNlKStnbix5Oi1tci9TdCooWnItcm4ueS10dCkrWnJ9O2lmKFR0JiZUdC5hY3RpdmUoKSl7dmFyIHl0PXQuZHJhZ0RhdGEudG91Y2hEcmFnRWxlczt4KHl0KSx0LnJlZHJhd0hpbnQoImRyYWciLCEwKSx0LnJlZHJhd0hpbnQoImVsZXMiLCEwKSxUdC51bmFjdGl2YXRlKCkuZW1pdCgiZnJlZW9uIikseXQuZW1pdCgiZnJlZSIpLHQuZHJhZ0RhdGEuZGlkRHJhZyYmKFR0LmVtaXQoImRyYWdmcmVlb24iKSx5dC5lbWl0KCJkcmFnZnJlZSIpKX1vZS52aWV3cG9ydCh7em9vbTptcixwYW46TmksY2FuY2VsT25GYWlsZWRab29tOiEwfSksb2UuZW1pdCgicGluY2h6b29tIiksej1PbixNPXN0LEI9VWUsRj1jdCxQPVdlLHQucGluY2hpbmc9ITB9aWYoVy50b3VjaGVzWzBdKXt2YXIgcGU9dC5wcm9qZWN0SW50b1ZpZXdwb3J0KFcudG91Y2hlc1swXS5jbGllbnRYLFcudG91Y2hlc1swXS5jbGllbnRZKTtWWzBdPXBlWzBdLFZbMV09cGVbMV19aWYoVy50b3VjaGVzWzFdKXt2YXIgcGU9dC5wcm9qZWN0SW50b1ZpZXdwb3J0KFcudG91Y2hlc1sxXS5jbGllbnRYLFcudG91Y2hlc1sxXS5jbGllbnRZKTtWWzJdPXBlWzBdLFZbM109cGVbMV19aWYoVy50b3VjaGVzWzJdKXt2YXIgcGU9dC5wcm9qZWN0SW50b1ZpZXdwb3J0KFcudG91Y2hlc1syXS5jbGllbnRYLFcudG91Y2hlc1syXS5jbGllbnRZKTtWWzRdPXBlWzBdLFZbNV09cGVbMV19fWVsc2UgaWYoVy50b3VjaGVzWzBdJiYhdC50b3VjaERhdGEuZGlkU2VsZWN0KXt2YXIgWm49dC50b3VjaERhdGEuc3RhcnQsU249dC50b3VjaERhdGEubGFzdCxmdDtpZighdC5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzJiYhdC5zd2lwZVBhbm5pbmcmJihmdD10LmZpbmROZWFyZXN0RWxlbWVudChWWzBdLFZbMV0sITAsITApKSxkZSYmWm4hPW51bGwmJlcucHJldmVudERlZmF1bHQoKSxkZSYmWm4hPW51bGwmJnQubm9kZUlzRHJhZ2dhYmxlKFpuKSlpZihQZSl7dmFyIHl0PXQuZHJhZ0RhdGEudG91Y2hEcmFnRWxlcyxIcj0hdC5kcmFnRGF0YS5kaWREcmFnO0hyJiZ5KHl0LHtpbkRyYWdMYXllcjohMH0pLHQuZHJhZ0RhdGEuZGlkRHJhZz0hMDt2YXIgZXQ9e3g6MCx5OjB9O2lmKEN0KF9lWzBdKSYmQ3QoX2VbMV0pJiYoZXQueCs9X2VbMF0sZXQueSs9X2VbMV0sSHIpKXt0LnJlZHJhd0hpbnQoImVsZXMiLCEwKTt2YXIgbXQ9dC50b3VjaERhdGEuZHJhZ0RlbHRhO210JiZDdChtdFswXSkmJkN0KG10WzFdKSYmKGV0LngrPW10WzBdLGV0LnkrPW10WzFdKX10LmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXM9ITAseXQuc2lsZW50U2hpZnQoZXQpLmVtaXQoInBvc2l0aW9uIGRyYWciKSx0LnJlZHJhd0hpbnQoImRyYWciLCEwKSx0LnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uWzBdPT14ZVswXSYmdC50b3VjaERhdGEuc3RhcnRQb3NpdGlvblsxXT09eGVbMV0mJnQucmVkcmF3SGludCgiZWxlcyIsITApLHQucmVkcmF3KCl9ZWxzZXt2YXIgbXQ9dC50b3VjaERhdGEuZHJhZ0RlbHRhPXQudG91Y2hEYXRhLmRyYWdEZWx0YXx8W107bXQubGVuZ3RoPT09MD8obXQucHVzaChfZVswXSksbXQucHVzaChfZVsxXSkpOihtdFswXSs9X2VbMF0sbXRbMV0rPV9lWzFdKX1pZihpKFpufHxmdCxbInRvdWNobW92ZSIsInRhcGRyYWciLCJ2bW91c2Vtb3ZlIl0sVyx7eDpWWzBdLHk6VlsxXX0pLCghWm58fCFabi5ncmFiYmVkKCkpJiZmdCE9U24mJihTbiYmU24uZW1pdCh7b3JpZ2luYWxFdmVudDpXLHR5cGU6InRhcGRyYWdvdXQiLHBvc2l0aW9uOnt4OlZbMF0seTpWWzFdfX0pLGZ0JiZmdC5lbWl0KHtvcmlnaW5hbEV2ZW50OlcsdHlwZToidGFwZHJhZ292ZXIiLHBvc2l0aW9uOnt4OlZbMF0seTpWWzFdfX0pKSx0LnRvdWNoRGF0YS5sYXN0PWZ0LGRlKWZvcih2YXIgbnQ9MDtudDxWLmxlbmd0aDtudCsrKVZbbnRdJiZ0LnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uW250XSYmUGUmJih0LnRvdWNoRGF0YS5zaW5nbGVUb3VjaE1vdmVkPSEwKTtpZihkZSYmKFpuPT1udWxsfHxabi5wYW5uYWJsZSgpKSYmb2UucGFubmluZ0VuYWJsZWQoKSYmb2UudXNlclBhbm5pbmdFbmFibGVkKCkpe3ZhciBLdD1zKFpuLHQudG91Y2hEYXRhLnN0YXJ0cyk7S3QmJihXLnByZXZlbnREZWZhdWx0KCksdC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9ufHwodC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPVUxKHQudG91Y2hEYXRhLnN0YXJ0UG9zaXRpb24pKSx0LnN3aXBlUGFubmluZz8ob2UucGFuQnkoe3g6X2VbMF0qcSx5Ol9lWzFdKnF9KSxvZS5lbWl0KCJkcmFncGFuIikpOlBlJiYodC5zd2lwZVBhbm5pbmc9ITAsb2UucGFuQnkoe3g6VmUqcSx5OnFlKnF9KSxvZS5lbWl0KCJkcmFncGFuIiksWm4mJihabi51bmFjdGl2YXRlKCksdC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx0LnRvdWNoRGF0YS5zdGFydD1udWxsKSkpO3ZhciBwZT10LnByb2plY3RJbnRvVmlld3BvcnQoVy50b3VjaGVzWzBdLmNsaWVudFgsVy50b3VjaGVzWzBdLmNsaWVudFkpO1ZbMF09cGVbMF0sVlsxXT1wZVsxXX19Zm9yKHZhciB3ZT0wO3dlPFYubGVuZ3RoO3dlKyspeGVbd2VdPVZbd2VdO2RlJiZXLnRvdWNoZXMubGVuZ3RoPjAmJiF0LmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXMmJiF0LnN3aXBlUGFubmluZyYmdC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uIT1udWxsJiYodC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCx0LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLHQucmVkcmF3KCkpfX0sInRvdWNobW92ZUhhbmRsZXIiKSwhMSk7dmFyIHNlO3QucmVnaXN0ZXJCaW5kaW5nKGUsInRvdWNoY2FuY2VsIixzZT1vKGZ1bmN0aW9uKFcpe3ZhciBkZT10LnRvdWNoRGF0YS5zdGFydDt0LnRvdWNoRGF0YS5jYXB0dXJlPSExLGRlJiZkZS51bmFjdGl2YXRlKCl9LCJ0b3VjaGNhbmNlbEhhbmRsZXIiKSk7dmFyIHVlLFosU2UsY2U7aWYodC5yZWdpc3RlckJpbmRpbmcoZSwidG91Y2hlbmQiLHVlPW8oZnVuY3Rpb24oVyl7dmFyIGRlPXQudG91Y2hEYXRhLnN0YXJ0LHJlPXQudG91Y2hEYXRhLmNhcHR1cmU7aWYocmUpVy50b3VjaGVzLmxlbmd0aD09PTAmJih0LnRvdWNoRGF0YS5jYXB0dXJlPSExKSxXLnByZXZlbnREZWZhdWx0KCk7ZWxzZSByZXR1cm47dmFyIG9lPXQuc2VsZWN0aW9uO3Quc3dpcGVQYW5uaW5nPSExLHQuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcz0hMTt2YXIgVj10LmN5LHhlPVYuem9vbSgpLHE9dC50b3VjaERhdGEubm93LHBlPXQudG91Y2hEYXRhLmVhcmxpZXI7aWYoVy50b3VjaGVzWzBdKXt2YXIgdmU9dC5wcm9qZWN0SW50b1ZpZXdwb3J0KFcudG91Y2hlc1swXS5jbGllbnRYLFcudG91Y2hlc1swXS5jbGllbnRZKTtxWzBdPXZlWzBdLHFbMV09dmVbMV19aWYoVy50b3VjaGVzWzFdKXt2YXIgdmU9dC5wcm9qZWN0SW50b1ZpZXdwb3J0KFcudG91Y2hlc1sxXS5jbGllbnRYLFcudG91Y2hlc1sxXS5jbGllbnRZKTtxWzJdPXZlWzBdLHFbM109dmVbMV19aWYoVy50b3VjaGVzWzJdKXt2YXIgdmU9dC5wcm9qZWN0SW50b1ZpZXdwb3J0KFcudG91Y2hlc1syXS5jbGllbnRYLFcudG91Y2hlc1syXS5jbGllbnRZKTtxWzRdPXZlWzBdLHFbNV09dmVbMV19ZGUmJmRlLnVuYWN0aXZhdGUoKTt2YXIgUGU7aWYodC50b3VjaERhdGEuY3h0KXtpZihQZT17b3JpZ2luYWxFdmVudDpXLHR5cGU6ImN4dHRhcGVuZCIscG9zaXRpb246e3g6cVswXSx5OnFbMV19fSxkZT9kZS5lbWl0KFBlKTpWLmVtaXQoUGUpLCF0LnRvdWNoRGF0YS5jeHREcmFnZ2VkKXt2YXIgX2U9e29yaWdpbmFsRXZlbnQ6Vyx0eXBlOiJjeHR0YXAiLHBvc2l0aW9uOnt4OnFbMF0seTpxWzFdfX07ZGU/ZGUuZW1pdChfZSk6Vi5lbWl0KF9lKX10LnRvdWNoRGF0YS5zdGFydCYmKHQudG91Y2hEYXRhLnN0YXJ0Ll9wcml2YXRlLmdyYWJiZWQ9ITEpLHQudG91Y2hEYXRhLmN4dD0hMSx0LnRvdWNoRGF0YS5zdGFydD1udWxsLHQucmVkcmF3KCk7cmV0dXJufWlmKCFXLnRvdWNoZXNbMl0mJlYuYm94U2VsZWN0aW9uRW5hYmxlZCgpJiZ0LnRvdWNoRGF0YS5zZWxlY3Rpbmcpe3QudG91Y2hEYXRhLnNlbGVjdGluZz0hMTt2YXIgd2U9Vi5jb2xsZWN0aW9uKHQuZ2V0QWxsSW5Cb3gob2VbMF0sb2VbMV0sb2VbMl0sb2VbM10pKTtvZVswXT12b2lkIDAsb2VbMV09dm9pZCAwLG9lWzJdPXZvaWQgMCxvZVszXT12b2lkIDAsb2VbNF09MCx0LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLFYuZW1pdCh7dHlwZToiYm94ZW5kIixvcmlnaW5hbEV2ZW50OlcscG9zaXRpb246e3g6cVswXSx5OnFbMV19fSk7dmFyIFZlPW8oZnVuY3Rpb24oTXQpe3JldHVybiBNdC5zZWxlY3RhYmxlKCkmJiFNdC5zZWxlY3RlZCgpfSwiZWxlV291bGRCZVNlbGVjdGVkIik7d2UuZW1pdCgiYm94Iikuc3RkRmlsdGVyKFZlKS5zZWxlY3QoKS5lbWl0KCJib3hzZWxlY3QiKSx3ZS5ub25lbXB0eSgpJiZ0LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx0LnJlZHJhdygpfWlmKGRlPy51bmFjdGl2YXRlKCksVy50b3VjaGVzWzJdKXQuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAsdC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKTtlbHNlIGlmKCFXLnRvdWNoZXNbMV0pe2lmKCFXLnRvdWNoZXNbMF0pe2lmKCFXLnRvdWNoZXNbMF0pe3QuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAsdC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKTt2YXIgRGU9dC5kcmFnRGF0YS50b3VjaERyYWdFbGVzO2lmKGRlIT1udWxsKXt2YXIgcWU9ZGUuX3ByaXZhdGUuZ3JhYmJlZDt4KERlKSx0LnJlZHJhd0hpbnQoImRyYWciLCEwKSx0LnJlZHJhd0hpbnQoImVsZXMiLCEwKSxxZSYmKGRlLmVtaXQoImZyZWVvbiIpLERlLmVtaXQoImZyZWUiKSx0LmRyYWdEYXRhLmRpZERyYWcmJihkZS5lbWl0KCJkcmFnZnJlZW9uIiksRGUuZW1pdCgiZHJhZ2ZyZWUiKSkpLGkoZGUsWyJ0b3VjaGVuZCIsInRhcGVuZCIsInZtb3VzZXVwIiwidGFwZHJhZ291dCJdLFcse3g6cVswXSx5OnFbMV19KSxkZS51bmFjdGl2YXRlKCksdC50b3VjaERhdGEuc3RhcnQ9bnVsbH1lbHNle3ZhciBhdD10LmZpbmROZWFyZXN0RWxlbWVudChxWzBdLHFbMV0sITAsITApO2koYXQsWyJ0b3VjaGVuZCIsInRhcGVuZCIsInZtb3VzZXVwIiwidGFwZHJhZ291dCJdLFcse3g6cVswXSx5OnFbMV19KX12YXIgUnQ9dC50b3VjaERhdGEuc3RhcnRQb3NpdGlvblswXS1xWzBdLHN0PVJ0KlJ0LFVlPXQudG91Y2hEYXRhLnN0YXJ0UG9zaXRpb25bMV0tcVsxXSxjdD1VZSpVZSxXZT1zdCtjdCxvdD1XZSp4ZSp4ZTt0LnRvdWNoRGF0YS5zaW5nbGVUb3VjaE1vdmVkfHwoZGV8fFYuJCgiOnNlbGVjdGVkIikudW5zZWxlY3QoWyJ0YXB1bnNlbGVjdCJdKSxpKGRlLFsidGFwIiwidmNsaWNrIl0sVyx7eDpxWzBdLHk6cVsxXX0pLFo9ITEsVy50aW1lU3RhbXAtY2U8PVYubXVsdGlDbGlja0RlYm91bmNlVGltZSgpPyhTZSYmY2xlYXJUaW1lb3V0KFNlKSxaPSEwLGNlPW51bGwsaShkZSxbImRibHRhcCIsInZkYmxjbGljayJdLFcse3g6cVswXSx5OnFbMV19KSk6KFNlPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtafHxpKGRlLFsib25ldGFwIiwidm9uZWNsaWNrIl0sVyx7eDpxWzBdLHk6cVsxXX0pfSxWLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUoKSksY2U9Vy50aW1lU3RhbXApKSxkZSE9bnVsbCYmIXQuZHJhZ0RhdGEuZGlkRHJhZyYmZGUuX3ByaXZhdGUuc2VsZWN0YWJsZSYmb3Q8dC50b3VjaFRhcFRocmVzaG9sZDImJiF0LnBpbmNoaW5nJiYoVi5zZWxlY3Rpb25UeXBlKCk9PT0ic2luZ2xlIj8oVi4kKHIpLnVubWVyZ2UoZGUpLnVuc2VsZWN0KFsidGFwdW5zZWxlY3QiXSksZGUuc2VsZWN0KFsidGFwc2VsZWN0Il0pKTpkZS5zZWxlY3RlZCgpP2RlLnVuc2VsZWN0KFsidGFwdW5zZWxlY3QiXSk6ZGUuc2VsZWN0KFsidGFwc2VsZWN0Il0pLHQucmVkcmF3SGludCgiZWxlcyIsITApKSx0LnRvdWNoRGF0YS5zaW5nbGVUb3VjaE1vdmVkPSEwfX19Zm9yKHZhciBZdD0wO1l0PHEubGVuZ3RoO1l0KyspcGVbWXRdPXFbWXRdO3QuZHJhZ0RhdGEuZGlkRHJhZz0hMSxXLnRvdWNoZXMubGVuZ3RoPT09MCYmKHQudG91Y2hEYXRhLmRyYWdEZWx0YT1bXSx0LnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uPVtudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0sdC50b3VjaERhdGEuc3RhcnRHUG9zaXRpb249bnVsbCx0LnRvdWNoRGF0YS5kaWRTZWxlY3Q9ITEpLFcudG91Y2hlcy5sZW5ndGg8MiYmKFcudG91Y2hlcy5sZW5ndGg9PT0xJiYodC50b3VjaERhdGEuc3RhcnRHUG9zaXRpb249W1cudG91Y2hlc1swXS5jbGllbnRYLFcudG91Y2hlc1swXS5jbGllbnRZXSksdC5waW5jaGluZz0hMSx0LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx0LnJlZHJhdygpKX0sInRvdWNoZW5kSGFuZGxlciIpLCExKSx0eXBlb2YgVG91Y2hFdmVudD4idSIpe3ZhciBhZT1bXSxPZT1vKGZ1bmN0aW9uKFcpe3JldHVybntjbGllbnRYOlcuY2xpZW50WCxjbGllbnRZOlcuY2xpZW50WSxmb3JjZToxLGlkZW50aWZpZXI6Vy5wb2ludGVySWQscGFnZVg6Vy5wYWdlWCxwYWdlWTpXLnBhZ2VZLHJhZGl1c1g6Vy53aWR0aC8yLHJhZGl1c1k6Vy5oZWlnaHQvMixzY3JlZW5YOlcuc2NyZWVuWCxzY3JlZW5ZOlcuc2NyZWVuWSx0YXJnZXQ6Vy50YXJnZXR9fSwibWFrZVRvdWNoIiksZ2U9byhmdW5jdGlvbihXKXtyZXR1cm57ZXZlbnQ6Vyx0b3VjaDpPZShXKX19LCJtYWtlUG9pbnRlciIpLHplPW8oZnVuY3Rpb24oVyl7YWUucHVzaChnZShXKSl9LCJhZGRQb2ludGVyIiksSGU9byhmdW5jdGlvbihXKXtmb3IodmFyIGRlPTA7ZGU8YWUubGVuZ3RoO2RlKyspe3ZhciByZT1hZVtkZV07aWYocmUuZXZlbnQucG9pbnRlcklkPT09Vy5wb2ludGVySWQpe2FlLnNwbGljZShkZSwxKTtyZXR1cm59fX0sInJlbW92ZVBvaW50ZXIiKSwkZT1vKGZ1bmN0aW9uKFcpe3ZhciBkZT1hZS5maWx0ZXIoZnVuY3Rpb24ocmUpe3JldHVybiByZS5ldmVudC5wb2ludGVySWQ9PT1XLnBvaW50ZXJJZH0pWzBdO2RlLmV2ZW50PVcsZGUudG91Y2g9T2UoVyl9LCJ1cGRhdGVQb2ludGVyIiksUmU9byhmdW5jdGlvbihXKXtXLnRvdWNoZXM9YWUubWFwKGZ1bmN0aW9uKGRlKXtyZXR1cm4gZGUudG91Y2h9KX0sImFkZFRvdWNoZXNUb0V2ZW50IiksSWU9byhmdW5jdGlvbihXKXtyZXR1cm4gVy5wb2ludGVyVHlwZT09PSJtb3VzZSJ8fFcucG9pbnRlclR5cGU9PT00fSwicG9pbnRlcklzTW91c2UiKTt0LnJlZ2lzdGVyQmluZGluZyh0LmNvbnRhaW5lciwicG9pbnRlcmRvd24iLGZ1bmN0aW9uKGJlKXtJZShiZSl8fChiZS5wcmV2ZW50RGVmYXVsdCgpLHplKGJlKSxSZShiZSksdGUoYmUpKX0pLHQucmVnaXN0ZXJCaW5kaW5nKHQuY29udGFpbmVyLCJwb2ludGVydXAiLGZ1bmN0aW9uKGJlKXtJZShiZSl8fChIZShiZSksUmUoYmUpLHVlKGJlKSl9KSx0LnJlZ2lzdGVyQmluZGluZyh0LmNvbnRhaW5lciwicG9pbnRlcmNhbmNlbCIsZnVuY3Rpb24oYmUpe0llKGJlKXx8KEhlKGJlKSxSZShiZSksc2UoYmUpKX0pLHQucmVnaXN0ZXJCaW5kaW5nKHQuY29udGFpbmVyLCJwb2ludGVybW92ZSIsZnVuY3Rpb24oYmUpe0llKGJlKXx8KGJlLnByZXZlbnREZWZhdWx0KCksJGUoYmUpLFJlKGJlKSxKKGJlKSl9KX19O2VoPXt9O2VoLmdlbmVyYXRlUG9seWdvbj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLm5vZGVTaGFwZXNbdF09e3JlbmRlcmVyOnRoaXMsbmFtZTp0LHBvaW50czplLGRyYXc6byhmdW5jdGlvbihuLGksYSxzLGwsdSl7dGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKCJwb2x5Z29uIixuLGksYSxzLGwsdGhpcy5wb2ludHMpfSwiZHJhdyIpLGludGVyc2VjdExpbmU6byhmdW5jdGlvbihuLGksYSxzLGwsdSxoLGYpe3JldHVybiBYYihsLHUsdGhpcy5wb2ludHMsbixpLGEvMixzLzIsaCl9LCJpbnRlcnNlY3RMaW5lIiksY2hlY2tQb2ludDpvKGZ1bmN0aW9uKG4saSxhLHMsbCx1LGgsZil7cmV0dXJuIFp1KG4saSx0aGlzLnBvaW50cyx1LGgscyxsLFswLC0xXSxhKX0sImNoZWNrUG9pbnQiKX19O2VoLmdlbmVyYXRlRWxsaXBzZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVTaGFwZXMuZWxsaXBzZT17cmVuZGVyZXI6dGhpcyxuYW1lOiJlbGxpcHNlIixkcmF3Om8oZnVuY3Rpb24oZSxyLG4saSxhLHMpe3RoaXMucmVuZGVyZXIubm9kZVNoYXBlSW1wbCh0aGlzLm5hbWUsZSxyLG4saSxhKX0sImRyYXciKSxpbnRlcnNlY3RMaW5lOm8oZnVuY3Rpb24oZSxyLG4saSxhLHMsbCx1KXtyZXR1cm4gWXFlKGEscyxlLHIsbi8yK2wsaS8yK2wpfSwiaW50ZXJzZWN0TGluZSIpLGNoZWNrUG9pbnQ6byhmdW5jdGlvbihlLHIsbixpLGEscyxsLHUpe3JldHVybiAkcChlLHIsaSxhLHMsbCxuKX0sImNoZWNrUG9pbnQiKX19O2VoLmdlbmVyYXRlUm91bmRQb2x5Z29uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMubm9kZVNoYXBlc1t0XT17cmVuZGVyZXI6dGhpcyxuYW1lOnQscG9pbnRzOmUsZ2V0T3JDcmVhdGVDb3JuZXJzOm8oZnVuY3Rpb24obixpLGEscyxsLHUsaCl7aWYodVtoXSE9PXZvaWQgMCYmdVtoKyItY3giXT09PW4mJnVbaCsiLWN5Il09PT1pKXJldHVybiB1W2hdO3VbaF09bmV3IEFycmF5KGUubGVuZ3RoLzIpLHVbaCsiLWN4Il09bix1W2grIi1jeSJdPWk7dmFyIGY9YS8yLGQ9cy8yO2w9bD09PSJhdXRvIj9ibWUoYSxzKTpsO2Zvcih2YXIgcD1uZXcgQXJyYXkoZS5sZW5ndGgvMiksbT0wO208ZS5sZW5ndGgvMjttKyspcFttXT17eDpuK2YqZVttKjJdLHk6aStkKmVbbSoyKzFdfTt2YXIgZyx5LHYseCxiPXAubGVuZ3RoO2Zvcih5PXBbYi0xXSxnPTA7ZzxiO2crKyl2PXBbZyViXSx4PXBbKGcrMSklYl0sdVtoXVtnXT12Qih5LHYseCxsKSx5PXYsdj14O3JldHVybiB1W2hdfSwiZ2V0T3JDcmVhdGVDb3JuZXJzIiksZHJhdzpvKGZ1bmN0aW9uKG4saSxhLHMsbCx1LGgpe3RoaXMucmVuZGVyZXIubm9kZVNoYXBlSW1wbCgicm91bmQtcG9seWdvbiIsbixpLGEscyxsLHRoaXMucG9pbnRzLHRoaXMuZ2V0T3JDcmVhdGVDb3JuZXJzKGksYSxzLGwsdSxoLCJkcmF3Q29ybmVycyIpKX0sImRyYXciKSxpbnRlcnNlY3RMaW5lOm8oZnVuY3Rpb24obixpLGEscyxsLHUsaCxmLGQpe3JldHVybiBYcWUobCx1LHRoaXMucG9pbnRzLG4saSxhLHMsaCx0aGlzLmdldE9yQ3JlYXRlQ29ybmVycyhuLGksYSxzLGYsZCwiY29ybmVycyIpKX0sImludGVyc2VjdExpbmUiKSxjaGVja1BvaW50Om8oZnVuY3Rpb24obixpLGEscyxsLHUsaCxmLGQpe3JldHVybiBxcWUobixpLHRoaXMucG9pbnRzLHUsaCxzLGwsdGhpcy5nZXRPckNyZWF0ZUNvcm5lcnModSxoLHMsbCxmLGQsImNvcm5lcnMiKSl9LCJjaGVja1BvaW50Iil9fTtlaC5nZW5lcmF0ZVJvdW5kUmVjdGFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZVNoYXBlc1sicm91bmQtcmVjdGFuZ2xlIl09dGhpcy5ub2RlU2hhcGVzLnJvdW5kcmVjdGFuZ2xlPXtyZW5kZXJlcjp0aGlzLG5hbWU6InJvdW5kLXJlY3RhbmdsZSIscG9pbnRzOmdzKDQsMCksZHJhdzpvKGZ1bmN0aW9uKGUscixuLGksYSxzKXt0aGlzLnJlbmRlcmVyLm5vZGVTaGFwZUltcGwodGhpcy5uYW1lLGUscixuLGksYSx0aGlzLnBvaW50cyxzKX0sImRyYXciKSxpbnRlcnNlY3RMaW5lOm8oZnVuY3Rpb24oZSxyLG4saSxhLHMsbCx1KXtyZXR1cm4gdm1lKGEscyxlLHIsbixpLGwsdSl9LCJpbnRlcnNlY3RMaW5lIiksY2hlY2tQb2ludDpvKGZ1bmN0aW9uKGUscixuLGksYSxzLGwsdSl7dmFyIGg9aS8yLGY9YS8yO3U9dT09PSJhdXRvIj9WcChpLGEpOnUsdT1NYXRoLm1pbihoLGYsdSk7dmFyIGQ9dSoyO3JldHVybiEhKFp1KGUscix0aGlzLnBvaW50cyxzLGwsaSxhLWQsWzAsLTFdLG4pfHxadShlLHIsdGhpcy5wb2ludHMscyxsLGktZCxhLFswLC0xXSxuKXx8JHAoZSxyLGQsZCxzLWgrdSxsLWYrdSxuKXx8JHAoZSxyLGQsZCxzK2gtdSxsLWYrdSxuKXx8JHAoZSxyLGQsZCxzK2gtdSxsK2YtdSxuKXx8JHAoZSxyLGQsZCxzLWgrdSxsK2YtdSxuKSl9LCJjaGVja1BvaW50Iil9fTtlaC5nZW5lcmF0ZUN1dFJlY3RhbmdsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVTaGFwZXNbImN1dC1yZWN0YW5nbGUiXT10aGlzLm5vZGVTaGFwZXMuY3V0cmVjdGFuZ2xlPXtyZW5kZXJlcjp0aGlzLG5hbWU6ImN1dC1yZWN0YW5nbGUiLGNvcm5lckxlbmd0aDpzQigpLHBvaW50czpncyg0LDApLGRyYXc6byhmdW5jdGlvbihlLHIsbixpLGEscyl7dGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKHRoaXMubmFtZSxlLHIsbixpLGEsbnVsbCxzKX0sImRyYXciKSxnZW5lcmF0ZUN1dFRyaWFuZ2xlUHRzOm8oZnVuY3Rpb24oZSxyLG4saSxhKXt2YXIgcz1hPT09ImF1dG8iP3RoaXMuY29ybmVyTGVuZ3RoOmEsbD1yLzIsdT1lLzIsaD1uLXUsZj1uK3UsZD1pLWwscD1pK2w7cmV0dXJue3RvcExlZnQ6W2gsZCtzLGgrcyxkLGgrcyxkK3NdLHRvcFJpZ2h0OltmLXMsZCxmLGQrcyxmLXMsZCtzXSxib3R0b21SaWdodDpbZixwLXMsZi1zLHAsZi1zLHAtc10sYm90dG9tTGVmdDpbaCtzLHAsaCxwLXMsaCtzLHAtc119fSwiZ2VuZXJhdGVDdXRUcmlhbmdsZVB0cyIpLGludGVyc2VjdExpbmU6byhmdW5jdGlvbihlLHIsbixpLGEscyxsLHUpe3ZhciBoPXRoaXMuZ2VuZXJhdGVDdXRUcmlhbmdsZVB0cyhuKzIqbCxpKzIqbCxlLHIsdSksZj1bXS5jb25jYXQuYXBwbHkoW10sW2gudG9wTGVmdC5zcGxpY2UoMCw0KSxoLnRvcFJpZ2h0LnNwbGljZSgwLDQpLGguYm90dG9tUmlnaHQuc3BsaWNlKDAsNCksaC5ib3R0b21MZWZ0LnNwbGljZSgwLDQpXSk7cmV0dXJuIFhiKGEscyxmLGUscil9LCJpbnRlcnNlY3RMaW5lIiksY2hlY2tQb2ludDpvKGZ1bmN0aW9uKGUscixuLGksYSxzLGwsdSl7dmFyIGg9dT09PSJhdXRvIj90aGlzLmNvcm5lckxlbmd0aDp1O2lmKFp1KGUscix0aGlzLnBvaW50cyxzLGwsaSxhLTIqaCxbMCwtMV0sbil8fFp1KGUscix0aGlzLnBvaW50cyxzLGwsaS0yKmgsYSxbMCwtMV0sbikpcmV0dXJuITA7dmFyIGY9dGhpcy5nZW5lcmF0ZUN1dFRyaWFuZ2xlUHRzKGksYSxzLGwpO3JldHVybiBVcyhlLHIsZi50b3BMZWZ0KXx8VXMoZSxyLGYudG9wUmlnaHQpfHxVcyhlLHIsZi5ib3R0b21SaWdodCl8fFVzKGUscixmLmJvdHRvbUxlZnQpfSwiY2hlY2tQb2ludCIpfX07ZWguZ2VuZXJhdGVCYXJyZWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlU2hhcGVzLmJhcnJlbD17cmVuZGVyZXI6dGhpcyxuYW1lOiJiYXJyZWwiLHBvaW50czpncyg0LDApLGRyYXc6byhmdW5jdGlvbihlLHIsbixpLGEscyl7dGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKHRoaXMubmFtZSxlLHIsbixpLGEpfSwiZHJhdyIpLGludGVyc2VjdExpbmU6byhmdW5jdGlvbihlLHIsbixpLGEscyxsLHUpe3ZhciBoPS4xNSxmPS41LGQ9Ljg1LHA9dGhpcy5nZW5lcmF0ZUJhcnJlbEJlemllclB0cyhuKzIqbCxpKzIqbCxlLHIpLG09byhmdW5jdGlvbih2KXt2YXIgeD1XMSh7eDp2WzBdLHk6dlsxXX0se3g6dlsyXSx5OnZbM119LHt4OnZbNF0seTp2WzVdfSxoKSxiPVcxKHt4OnZbMF0seTp2WzFdfSx7eDp2WzJdLHk6dlszXX0se3g6dls0XSx5OnZbNV19LGYpLHc9VzEoe3g6dlswXSx5OnZbMV19LHt4OnZbMl0seTp2WzNdfSx7eDp2WzRdLHk6dls1XX0sZCk7cmV0dXJuW3ZbMF0sdlsxXSx4LngseC55LGIueCxiLnksdy54LHcueSx2WzRdLHZbNV1dfSwiYXBwcm94aW1hdGVCYXJyZWxDdXJ2ZVB0cyIpLGc9W10uY29uY2F0KG0ocC50b3BMZWZ0KSxtKHAudG9wUmlnaHQpLG0ocC5ib3R0b21SaWdodCksbShwLmJvdHRvbUxlZnQpKTtyZXR1cm4gWGIoYSxzLGcsZSxyKX0sImludGVyc2VjdExpbmUiKSxnZW5lcmF0ZUJhcnJlbEJlemllclB0czpvKGZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPXIvMixzPWUvMixsPW4tcyx1PW4rcyxoPWktYSxmPWkrYSxkPUJQKGUscikscD1kLmhlaWdodE9mZnNldCxtPWQud2lkdGhPZmZzZXQsZz1kLmN0cmxQdE9mZnNldFBjdCplLHk9e3RvcExlZnQ6W2wsaCtwLGwrZyxoLGwrbSxoXSx0b3BSaWdodDpbdS1tLGgsdS1nLGgsdSxoK3BdLGJvdHRvbVJpZ2h0Olt1LGYtcCx1LWcsZix1LW0sZl0sYm90dG9tTGVmdDpbbCttLGYsbCtnLGYsbCxmLXBdfTtyZXR1cm4geS50b3BMZWZ0LmlzVG9wPSEwLHkudG9wUmlnaHQuaXNUb3A9ITAseS5ib3R0b21MZWZ0LmlzQm90dG9tPSEwLHkuYm90dG9tUmlnaHQuaXNCb3R0b209ITAseX0sImdlbmVyYXRlQmFycmVsQmV6aWVyUHRzIiksY2hlY2tQb2ludDpvKGZ1bmN0aW9uKGUscixuLGksYSxzLGwsdSl7dmFyIGg9QlAoaSxhKSxmPWguaGVpZ2h0T2Zmc2V0LGQ9aC53aWR0aE9mZnNldDtpZihadShlLHIsdGhpcy5wb2ludHMscyxsLGksYS0yKmYsWzAsLTFdLG4pfHxadShlLHIsdGhpcy5wb2ludHMscyxsLGktMipkLGEsWzAsLTFdLG4pKXJldHVybiEwO2Zvcih2YXIgcD10aGlzLmdlbmVyYXRlQmFycmVsQmV6aWVyUHRzKGksYSxzLGwpLG09byhmdW5jdGlvbihTLF8sSSl7dmFyIEQ9SVs0XSxrPUlbMl0sTD1JWzBdLFI9SVs1XSxPPUlbMV0sTT1NYXRoLm1pbihELEwpLEI9TWF0aC5tYXgoRCxMKSxGPU1hdGgubWluKFIsTyksUD1NYXRoLm1heChSLE8pO2lmKE08PVMmJlM8PUImJkY8PV8mJl88PVApe3ZhciB6PWpxZShELGssTCksJD1WcWUoelswXSx6WzFdLHpbMl0sUyksSD0kLmZpbHRlcihmdW5jdGlvbihRKXtyZXR1cm4gMDw9USYmUTw9MX0pO2lmKEgubGVuZ3RoPjApcmV0dXJuIEhbMF19cmV0dXJuIG51bGx9LCJnZXRDdXJ2ZVQiKSxnPU9iamVjdC5rZXlzKHApLHk9MDt5PGcubGVuZ3RoO3krKyl7dmFyIHY9Z1t5XSx4PXBbdl0sYj1tKGUscix4KTtpZihiIT1udWxsKXt2YXIgdz14WzVdLEM9eFszXSxUPXhbMV0sRT1vYSh3LEMsVCxiKTtpZih4LmlzVG9wJiZFPD1yfHx4LmlzQm90dG9tJiZyPD1FKXJldHVybiEwfX1yZXR1cm4hMX0sImNoZWNrUG9pbnQiKX19O2VoLmdlbmVyYXRlQm90dG9tUm91bmRyZWN0YW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlU2hhcGVzWyJib3R0b20tcm91bmQtcmVjdGFuZ2xlIl09dGhpcy5ub2RlU2hhcGVzLmJvdHRvbXJvdW5kcmVjdGFuZ2xlPXtyZW5kZXJlcjp0aGlzLG5hbWU6ImJvdHRvbS1yb3VuZC1yZWN0YW5nbGUiLHBvaW50czpncyg0LDApLGRyYXc6byhmdW5jdGlvbihlLHIsbixpLGEscyl7dGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKHRoaXMubmFtZSxlLHIsbixpLGEsdGhpcy5wb2ludHMscyl9LCJkcmF3IiksaW50ZXJzZWN0TGluZTpvKGZ1bmN0aW9uKGUscixuLGksYSxzLGwsdSl7dmFyIGg9ZS0obi8yK2wpLGY9ci0oaS8yK2wpLGQ9ZixwPWUrKG4vMitsKSxtPUVmKGEscyxlLHIsaCxmLHAsZCwhMSk7cmV0dXJuIG0ubGVuZ3RoPjA/bTp2bWUoYSxzLGUscixuLGksbCx1KX0sImludGVyc2VjdExpbmUiKSxjaGVja1BvaW50Om8oZnVuY3Rpb24oZSxyLG4saSxhLHMsbCx1KXt1PXU9PT0iYXV0byI/VnAoaSxhKTp1O3ZhciBoPTIqdTtpZihadShlLHIsdGhpcy5wb2ludHMscyxsLGksYS1oLFswLC0xXSxuKXx8WnUoZSxyLHRoaXMucG9pbnRzLHMsbCxpLWgsYSxbMCwtMV0sbikpcmV0dXJuITA7dmFyIGY9aS8yKzIqbixkPWEvMisyKm4scD1bcy1mLGwtZCxzLWYsbCxzK2YsbCxzK2YsbC1kXTtyZXR1cm4hIShVcyhlLHIscCl8fCRwKGUscixoLGgscytpLzItdSxsK2EvMi11LG4pfHwkcChlLHIsaCxoLHMtaS8yK3UsbCthLzItdSxuKSl9LCJjaGVja1BvaW50Iil9fTtlaC5yZWdpc3Rlck5vZGVTaGFwZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm5vZGVTaGFwZXM9e30sZT10aGlzO3RoaXMuZ2VuZXJhdGVFbGxpcHNlKCksdGhpcy5nZW5lcmF0ZVBvbHlnb24oInRyaWFuZ2xlIixncygzLDApKSx0aGlzLmdlbmVyYXRlUm91bmRQb2x5Z29uKCJyb3VuZC10cmlhbmdsZSIsZ3MoMywwKSksdGhpcy5nZW5lcmF0ZVBvbHlnb24oInJlY3RhbmdsZSIsZ3MoNCwwKSksdC5zcXVhcmU9dC5yZWN0YW5nbGUsdGhpcy5nZW5lcmF0ZVJvdW5kUmVjdGFuZ2xlKCksdGhpcy5nZW5lcmF0ZUN1dFJlY3RhbmdsZSgpLHRoaXMuZ2VuZXJhdGVCYXJyZWwoKSx0aGlzLmdlbmVyYXRlQm90dG9tUm91bmRyZWN0YW5nbGUoKTt7dmFyIHI9WzAsMSwxLDAsMCwtMSwtMSwwXTt0aGlzLmdlbmVyYXRlUG9seWdvbigiZGlhbW9uZCIsciksdGhpcy5nZW5lcmF0ZVJvdW5kUG9seWdvbigicm91bmQtZGlhbW9uZCIscil9dGhpcy5nZW5lcmF0ZVBvbHlnb24oInBlbnRhZ29uIixncyg1LDApKSx0aGlzLmdlbmVyYXRlUm91bmRQb2x5Z29uKCJyb3VuZC1wZW50YWdvbiIsZ3MoNSwwKSksdGhpcy5nZW5lcmF0ZVBvbHlnb24oImhleGFnb24iLGdzKDYsMCkpLHRoaXMuZ2VuZXJhdGVSb3VuZFBvbHlnb24oInJvdW5kLWhleGFnb24iLGdzKDYsMCkpLHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJoZXB0YWdvbiIsZ3MoNywwKSksdGhpcy5nZW5lcmF0ZVJvdW5kUG9seWdvbigicm91bmQtaGVwdGFnb24iLGdzKDcsMCkpLHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJvY3RhZ29uIixncyg4LDApKSx0aGlzLmdlbmVyYXRlUm91bmRQb2x5Z29uKCJyb3VuZC1vY3RhZ29uIixncyg4LDApKTt2YXIgbj1uZXcgQXJyYXkoMjApO3t2YXIgaT1QUCg1LDApLGE9UFAoNSxNYXRoLlBJLzUpLHM9LjUqKDMtTWF0aC5zcXJ0KDUpKTtzKj0xLjU3O2Zvcih2YXIgbD0wO2w8YS5sZW5ndGgvMjtsKyspYVtsKjJdKj1zLGFbbCoyKzFdKj1zO2Zvcih2YXIgbD0wO2w8MjAvNDtsKyspbltsKjRdPWlbbCoyXSxuW2wqNCsxXT1pW2wqMisxXSxuW2wqNCsyXT1hW2wqMl0sbltsKjQrM109YVtsKjIrMV19bj14bWUobiksdGhpcy5nZW5lcmF0ZVBvbHlnb24oInN0YXIiLG4pLHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJ2ZWUiLFstMSwtMSwwLC0uMzMzLDEsLTEsMCwxXSksdGhpcy5nZW5lcmF0ZVBvbHlnb24oInJob21ib2lkIixbLTEsLTEsLjMzMywtMSwxLDEsLS4zMzMsMV0pLHRoaXMuZ2VuZXJhdGVQb2x5Z29uKCJyaWdodC1yaG9tYm9pZCIsWy0uMzMzLC0xLDEsLTEsLjMzMywxLC0xLDFdKSx0aGlzLm5vZGVTaGFwZXMuY29uY2F2ZWhleGFnb249dGhpcy5nZW5lcmF0ZVBvbHlnb24oImNvbmNhdmUtaGV4YWdvbiIsWy0xLC0uOTUsLS43NSwwLC0xLC45NSwxLC45NSwuNzUsMCwxLC0uOTVdKTt7dmFyIHU9Wy0xLC0xLC4yNSwtMSwxLDAsLjI1LDEsLTEsMV07dGhpcy5nZW5lcmF0ZVBvbHlnb24oInRhZyIsdSksdGhpcy5nZW5lcmF0ZVJvdW5kUG9seWdvbigicm91bmQtdGFnIix1KX10Lm1ha2VQb2x5Z29uPWZ1bmN0aW9uKGgpe3ZhciBmPWguam9pbigiJCIpLGQ9InBvbHlnb24tIitmLHA7cmV0dXJuKHA9dGhpc1tkXSk/cDplLmdlbmVyYXRlUG9seWdvbihkLGgpfX07bDQ9e307bDQudGltZVRvUmVuZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVkcmF3VG90YWxUaW1lL3RoaXMucmVkcmF3Q291bnR9O2w0LnJlZHJhdz1mdW5jdGlvbih0KXt0PXR8fGRtZSgpO3ZhciBlPXRoaXM7ZS5hdmVyYWdlUmVkcmF3VGltZT09PXZvaWQgMCYmKGUuYXZlcmFnZVJlZHJhd1RpbWU9MCksZS5sYXN0UmVkcmF3VGltZT09PXZvaWQgMCYmKGUubGFzdFJlZHJhd1RpbWU9MCksZS5sYXN0RHJhd1RpbWU9PT12b2lkIDAmJihlLmxhc3REcmF3VGltZT0wKSxlLnJlcXVlc3RlZEZyYW1lPSEwLGUucmVuZGVyT3B0aW9ucz10fTtsNC5iZWZvcmVSZW5kZXI9ZnVuY3Rpb24odCxlKXtpZighdGhpcy5kZXN0cm95ZWQpe2U9PW51bGwmJmFpKCJQcmlvcml0eSBpcyBub3Qgb3B0aW9uYWwgZm9yIGJlZm9yZVJlbmRlciIpO3ZhciByPXRoaXMuYmVmb3JlUmVuZGVyQ2FsbGJhY2tzO3IucHVzaCh7Zm46dCxwcmlvcml0eTplfSksci5zb3J0KGZ1bmN0aW9uKG4saSl7cmV0dXJuIGkucHJpb3JpdHktbi5wcmlvcml0eX0pfX07TTBlPW8oZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaT1lLmJlZm9yZVJlbmRlckNhbGxiYWNrcyxhPTA7YTxpLmxlbmd0aDthKyspaVthXS5mbihyLG4pfSwiYmVmb3JlUmVuZGVyQ2FsbGJhY2tzIik7bDQuc3RhcnRSZW5kZXJMb29wPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXQuY3k7aWYoIXQucmVuZGVyTG9vcFN0YXJ0ZWQpe3QucmVuZGVyTG9vcFN0YXJ0ZWQ9ITA7dmFyIHI9byhmdW5jdGlvbiBuKGkpe2lmKCF0LmRlc3Ryb3llZCl7aWYoIWUuYmF0Y2hpbmcoKSlpZih0LnJlcXVlc3RlZEZyYW1lJiYhdC5za2lwRnJhbWUpe00wZSh0LCEwLGkpO3ZhciBhPVF1KCk7dC5yZW5kZXIodC5yZW5kZXJPcHRpb25zKTt2YXIgcz10Lmxhc3REcmF3VGltZT1RdSgpO3QuYXZlcmFnZVJlZHJhd1RpbWU9PT12b2lkIDAmJih0LmF2ZXJhZ2VSZWRyYXdUaW1lPXMtYSksdC5yZWRyYXdDb3VudD09PXZvaWQgMCYmKHQucmVkcmF3Q291bnQ9MCksdC5yZWRyYXdDb3VudCsrLHQucmVkcmF3VG90YWxUaW1lPT09dm9pZCAwJiYodC5yZWRyYXdUb3RhbFRpbWU9MCk7dmFyIGw9cy1hO3QucmVkcmF3VG90YWxUaW1lKz1sLHQubGFzdFJlZHJhd1RpbWU9bCx0LmF2ZXJhZ2VSZWRyYXdUaW1lPXQuYXZlcmFnZVJlZHJhd1RpbWUvMitsLzIsdC5yZXF1ZXN0ZWRGcmFtZT0hMX1lbHNlIE0wZSh0LCExLGkpO3Quc2tpcEZyYW1lPSExLHhTKG4pfX0sInJlbmRlckZuIik7eFMocil9fTtMUWU9byhmdW5jdGlvbihlKXt0aGlzLmluaXQoZSl9LCJCYXNlUmVuZGVyZXIiKSx2Z2U9TFFlLG95PXZnZS5wcm90b3R5cGU7b3kuY2xpZW50RnVuY3Rpb25zPVsicmVkcmF3SGludCIsInJlbmRlciIsInJlbmRlclRvIiwibWF0Y2hDYW52YXNTaXplIiwibm9kZVNoYXBlSW1wbCIsImFycm93U2hhcGVJbXBsIl07b3kuaW5pdD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2Uub3B0aW9ucz10LGUuY3k9dC5jeTt2YXIgcj1lLmNvbnRhaW5lcj10LmN5LmNvbnRhaW5lcigpLG49ZS5jeS53aW5kb3coKTtpZihuKXt2YXIgaT1uLmRvY3VtZW50LGE9aS5oZWFkLHM9Il9fX19fX19fX19jeXRvc2NhcGVfc3R5bGVzaGVldCIsbD0iX19fX19fX19fX2N5dG9zY2FwZV9jb250YWluZXIiLHU9aS5nZXRFbGVtZW50QnlJZChzKSE9bnVsbDtpZihyLmNsYXNzTmFtZS5pbmRleE9mKGwpPDAmJihyLmNsYXNzTmFtZT0oci5jbGFzc05hbWV8fCIiKSsiICIrbCksIXUpe3ZhciBoPWkuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtoLmlkPXMsaC50ZXh0Q29udGVudD0iLiIrbCsiIHsgcG9zaXRpb246IHJlbGF0aXZlOyB9IixhLmluc2VydEJlZm9yZShoLGEuY2hpbGRyZW5bMF0pfXZhciBmPW4uZ2V0Q29tcHV0ZWRTdHlsZShyKSxkPWYuZ2V0UHJvcGVydHlWYWx1ZSgicG9zaXRpb24iKTtkPT09InN0YXRpYyImJnVuKCJBIEN5dG9zY2FwZSBjb250YWluZXIgaGFzIHN0eWxlIHBvc2l0aW9uOnN0YXRpYyBhbmQgc28gY2FuIG5vdCB1c2UgVUkgZXh0ZW5zaW9ucyBwcm9wZXJseSIpfWUuc2VsZWN0aW9uPVt2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsMF0sZS5iZXppZXJQcm9qUGN0cz1bLjA1LC4yMjUsLjQsLjUsLjYsLjc3NSwuOTVdLGUuaG92ZXJEYXRhPXtkb3duOm51bGwsbGFzdDpudWxsLGRvd25UaW1lOm51bGwsdHJpZ2dlck1vZGU6bnVsbCxkcmFnZ2luZzohMSxpbml0aWFsUGFuOltudWxsLG51bGxdLGNhcHR1cmU6ITF9LGUuZHJhZ0RhdGE9e3Bvc3NpYmxlRHJhZ0VsZW1lbnRzOltdfSxlLnRvdWNoRGF0YT17c3RhcnQ6bnVsbCxjYXB0dXJlOiExLHN0YXJ0UG9zaXRpb246W251bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXSxzaW5nbGVUb3VjaFN0YXJ0VGltZTpudWxsLHNpbmdsZVRvdWNoTW92ZWQ6ITAsbm93OltudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0sZWFybGllcjpbbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdfSxlLnJlZHJhd3M9MCxlLnNob3dGcHM9dC5zaG93RnBzLGUuZGVidWc9dC5kZWJ1ZyxlLndlYmdsPXQud2ViZ2wsZS5oaWRlRWRnZXNPblZpZXdwb3J0PXQuaGlkZUVkZ2VzT25WaWV3cG9ydCxlLnRleHR1cmVPblZpZXdwb3J0PXQudGV4dHVyZU9uVmlld3BvcnQsZS53aGVlbFNlbnNpdGl2aXR5PXQud2hlZWxTZW5zaXRpdml0eSxlLm1vdGlvbkJsdXJFbmFibGVkPXQubW90aW9uQmx1cixlLmZvcmNlZFBpeGVsUmF0aW89Q3QodC5waXhlbFJhdGlvKT90LnBpeGVsUmF0aW86bnVsbCxlLm1vdGlvbkJsdXI9dC5tb3Rpb25CbHVyLGUubW90aW9uQmx1ck9wYWNpdHk9dC5tb3Rpb25CbHVyT3BhY2l0eSxlLm1vdGlvbkJsdXJUcmFuc3BhcmVuY3k9MS1lLm1vdGlvbkJsdXJPcGFjaXR5LGUubW90aW9uQmx1clB4UmF0aW89MSxlLm1iUHhSQmx1cnJ5PTEsZS5taW5NYkxvd1F1YWxGcmFtZXM9NCxlLmZ1bGxRdWFsaXR5TWI9ITEsZS5jbGVhcmVkRm9yTW90aW9uQmx1cj1bXSxlLmRlc2t0b3BUYXBUaHJlc2hvbGQ9dC5kZXNrdG9wVGFwVGhyZXNob2xkLGUuZGVza3RvcFRhcFRocmVzaG9sZDI9dC5kZXNrdG9wVGFwVGhyZXNob2xkKnQuZGVza3RvcFRhcFRocmVzaG9sZCxlLnRvdWNoVGFwVGhyZXNob2xkPXQudG91Y2hUYXBUaHJlc2hvbGQsZS50b3VjaFRhcFRocmVzaG9sZDI9dC50b3VjaFRhcFRocmVzaG9sZCp0LnRvdWNoVGFwVGhyZXNob2xkLGUudGFwaG9sZER1cmF0aW9uPTUwMCxlLmJpbmRpbmdzPVtdLGUuYmVmb3JlUmVuZGVyQ2FsbGJhY2tzPVtdLGUuYmVmb3JlUmVuZGVyUHJpb3JpdGllcz17YW5pbWF0aW9uczo0MDAsZWxlQ2FsY3M6MzAwLGVsZVR4ckRlcToyMDAsbHlyVHhyRGVxOjE1MCxseXJUeHJTa2lwOjEwMH0sZS5yZWdpc3Rlck5vZGVTaGFwZXMoKSxlLnJlZ2lzdGVyQXJyb3dTaGFwZXMoKSxlLnJlZ2lzdGVyQ2FsY3VsYXRpb25MaXN0ZW5lcnMoKX07b3kubm90aWZ5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxuPXIuY3k7aWYoIXRoaXMuZGVzdHJveWVkKXtpZih0PT09ImluaXQiKXtyLmxvYWQoKTtyZXR1cm59aWYodD09PSJkZXN0cm95Iil7ci5kZXN0cm95KCk7cmV0dXJufSh0PT09ImFkZCJ8fHQ9PT0icmVtb3ZlInx8dD09PSJtb3ZlIiYmbi5oYXNDb21wb3VuZE5vZGVzKCl8fHQ9PT0ibG9hZCJ8fHQ9PT0iem9yZGVyInx8dD09PSJtb3VudCIpJiZyLmludmFsaWRhdGVDYWNoZWRaU29ydGVkRWxlcygpLHQ9PT0idmlld3BvcnQiJiZyLnJlZHJhd0hpbnQoInNlbGVjdCIsITApLHQ9PT0iZ2MiJiZyLnJlZHJhd0hpbnQoImdjIiwhMCksKHQ9PT0ibG9hZCJ8fHQ9PT0icmVzaXplInx8dD09PSJtb3VudCIpJiYoci5pbnZhbGlkYXRlQ29udGFpbmVyQ2xpZW50Q29vcmRzQ2FjaGUoKSxyLm1hdGNoQ2FudmFzU2l6ZShyLmNvbnRhaW5lcikpLHIucmVkcmF3SGludCgiZWxlcyIsITApLHIucmVkcmF3SGludCgiZHJhZyIsITApLHRoaXMuc3RhcnRSZW5kZXJMb29wKCksdGhpcy5yZWRyYXcoKX19O295LmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3QuZGVzdHJveWVkPSEwLHQuY3kuc3RvcEFuaW1hdGlvbkxvb3AoKTtmb3IodmFyIGU9MDtlPHQuYmluZGluZ3MubGVuZ3RoO2UrKyl7dmFyIHI9dC5iaW5kaW5nc1tlXSxuPXIsaT1uLnRhcmdldDsoaS5vZmZ8fGkucmVtb3ZlRXZlbnRMaXN0ZW5lcikuYXBwbHkoaSxuLmFyZ3MpfWlmKHQuYmluZGluZ3M9W10sdC5iZWZvcmVSZW5kZXJDYWxsYmFja3M9W10sdC5vblVwZGF0ZUVsZUNhbGNzRm5zPVtdLHQucmVtb3ZlT2JzZXJ2ZXImJnQucmVtb3ZlT2JzZXJ2ZXIuZGlzY29ubmVjdCgpLHQuc3R5bGVPYnNlcnZlciYmdC5zdHlsZU9ic2VydmVyLmRpc2Nvbm5lY3QoKSx0LnJlc2l6ZU9ic2VydmVyJiZ0LnJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKSx0LmxhYmVsQ2FsY0Rpdil0cnl7ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0LmxhYmVsQ2FsY0Rpdil9Y2F0Y2h7fX07b3kuaXNIZWFkbGVzcz1mdW5jdGlvbigpe3JldHVybiExfTtbeUIsZ2dlLHlnZSxzeSxlaCxsNF0uZm9yRWFjaChmdW5jdGlvbih0KXtycihveSx0KX0pO0RQPTFlMy82MCx4Z2U9e3NldHVwRGVxdWV1ZWluZzpvKGZ1bmN0aW9uKGUpe3JldHVybiBvKGZ1bmN0aW9uKCl7dmFyIG49dGhpcyxpPXRoaXMucmVuZGVyZXI7aWYoIW4uZGVxdWV1ZWluZ1NldHVwKXtuLmRlcXVldWVpbmdTZXR1cD0hMDt2YXIgYT1uNChmdW5jdGlvbigpe2kucmVkcmF3SGludCgiZWxlcyIsITApLGkucmVkcmF3SGludCgiZHJhZyIsITApLGkucmVkcmF3KCl9LGUuZGVxUmVkcmF3VGhyZXNob2xkKSxzPW8oZnVuY3Rpb24oaCxmKXt2YXIgZD1RdSgpLHA9aS5hdmVyYWdlUmVkcmF3VGltZSxtPWkubGFzdFJlZHJhd1RpbWUsZz1bXSx5PWkuY3kuZXh0ZW50KCksdj1pLmdldFBpeGVsUmF0aW8oKTtmb3IoaHx8aS5mbHVzaFJlbmRlcmVkU3R5bGVRdWV1ZSgpOzspe3ZhciB4PVF1KCksYj14LWQsdz14LWY7aWYobTxEUCl7dmFyIEM9RFAtKGg/cDowKTtpZih3Pj1lLmRlcUZhc3RDb3N0KkMpYnJlYWt9ZWxzZSBpZihoKXtpZihiPj1lLmRlcUNvc3QqbXx8Yj49ZS5kZXFBdmdDb3N0KnApYnJlYWt9ZWxzZSBpZih3Pj1lLmRlcU5vRHJhd0Nvc3QqRFApYnJlYWs7dmFyIFQ9ZS5kZXEobix2LHkpO2lmKFQubGVuZ3RoPjApZm9yKHZhciBFPTA7RTxULmxlbmd0aDtFKyspZy5wdXNoKFRbRV0pO2Vsc2UgYnJlYWt9Zy5sZW5ndGg+MCYmKGUub25EZXFkKG4sZyksIWgmJmUuc2hvdWxkUmVkcmF3KG4sZyx2LHkpJiZhKCkpfSwiZGVxdWV1ZSIpLGw9ZS5wcmlvcml0eXx8ckI7aS5iZWZvcmVSZW5kZXIocyxsKG4pKX19LCJzZXR1cERlcXVldWVpbmdJbXBsIil9LCJzZXR1cERlcXVldWVpbmciKX0sUlFlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06YlM7TWYodGhpcyx0KSx0aGlzLmlkc0J5S2V5PW5ldyBYYyx0aGlzLmtleUZvcklkPW5ldyBYYyx0aGlzLmNhY2hlc0J5THZsPW5ldyBYYyx0aGlzLmx2bHM9W10sdGhpcy5nZXRLZXk9ZSx0aGlzLmRvZXNFbGVJbnZhbGlkYXRlS2V5PXJ9cmV0dXJuIG8odCwiRWxlbWVudFRleHR1cmVDYWNoZUxvb2t1cCIpLElmKHQsW3trZXk6ImdldElkc0ZvciIsdmFsdWU6byhmdW5jdGlvbihyKXtyPT1udWxsJiZhaSgiQ2FuIG5vdCBnZXQgaWQgbGlzdCBmb3IgbnVsbCBrZXkiKTt2YXIgbj10aGlzLmlkc0J5S2V5LGk9dGhpcy5pZHNCeUtleS5nZXQocik7cmV0dXJuIGl8fChpPW5ldyBKMSxuLnNldChyLGkpKSxpfSwiZ2V0SWRzRm9yIil9LHtrZXk6ImFkZElkRm9yS2V5Iix2YWx1ZTpvKGZ1bmN0aW9uKHIsbil7ciE9bnVsbCYmdGhpcy5nZXRJZHNGb3IocikuYWRkKG4pfSwiYWRkSWRGb3JLZXkiKX0se2tleToiZGVsZXRlSWRGb3JLZXkiLHZhbHVlOm8oZnVuY3Rpb24ocixuKXtyIT1udWxsJiZ0aGlzLmdldElkc0ZvcihyKS5kZWxldGUobil9LCJkZWxldGVJZEZvcktleSIpfSx7a2V5OiJnZXROdW1iZXJPZklkc0ZvcktleSIsdmFsdWU6byhmdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD8wOnRoaXMuZ2V0SWRzRm9yKHIpLnNpemV9LCJnZXROdW1iZXJPZklkc0ZvcktleSIpfSx7a2V5OiJ1cGRhdGVLZXlNYXBwaW5nRm9yIix2YWx1ZTpvKGZ1bmN0aW9uKHIpe3ZhciBuPXIuaWQoKSxpPXRoaXMua2V5Rm9ySWQuZ2V0KG4pLGE9dGhpcy5nZXRLZXkocik7dGhpcy5kZWxldGVJZEZvcktleShpLG4pLHRoaXMuYWRkSWRGb3JLZXkoYSxuKSx0aGlzLmtleUZvcklkLnNldChuLGEpfSwidXBkYXRlS2V5TWFwcGluZ0ZvciIpfSx7a2V5OiJkZWxldGVLZXlNYXBwaW5nRm9yIix2YWx1ZTpvKGZ1bmN0aW9uKHIpe3ZhciBuPXIuaWQoKSxpPXRoaXMua2V5Rm9ySWQuZ2V0KG4pO3RoaXMuZGVsZXRlSWRGb3JLZXkoaSxuKSx0aGlzLmtleUZvcklkLmRlbGV0ZShuKX0sImRlbGV0ZUtleU1hcHBpbmdGb3IiKX0se2tleToia2V5SGFzQ2hhbmdlZEZvciIsdmFsdWU6byhmdW5jdGlvbihyKXt2YXIgbj1yLmlkKCksaT10aGlzLmtleUZvcklkLmdldChuKSxhPXRoaXMuZ2V0S2V5KHIpO3JldHVybiBpIT09YX0sImtleUhhc0NoYW5nZWRGb3IiKX0se2tleToiaXNJbnZhbGlkIix2YWx1ZTpvKGZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLmtleUhhc0NoYW5nZWRGb3Iocil8fHRoaXMuZG9lc0VsZUludmFsaWRhdGVLZXkocil9LCJpc0ludmFsaWQiKX0se2tleToiZ2V0Q2FjaGVzQXQiLHZhbHVlOm8oZnVuY3Rpb24ocil7dmFyIG49dGhpcy5jYWNoZXNCeUx2bCxpPXRoaXMubHZscyxhPW4uZ2V0KHIpO3JldHVybiBhfHwoYT1uZXcgWGMsbi5zZXQocixhKSxpLnB1c2gocikpLGF9LCJnZXRDYWNoZXNBdCIpfSx7a2V5OiJnZXRDYWNoZSIsdmFsdWU6byhmdW5jdGlvbihyLG4pe3JldHVybiB0aGlzLmdldENhY2hlc0F0KG4pLmdldChyKX0sImdldENhY2hlIil9LHtrZXk6ImdldCIsdmFsdWU6byhmdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuZ2V0S2V5KHIpLGE9dGhpcy5nZXRDYWNoZShpLG4pO3JldHVybiBhIT1udWxsJiZ0aGlzLnVwZGF0ZUtleU1hcHBpbmdGb3IociksYX0sImdldCIpfSx7a2V5OiJnZXRGb3JDYWNoZWRLZXkiLHZhbHVlOm8oZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLmtleUZvcklkLmdldChyLmlkKCkpLGE9dGhpcy5nZXRDYWNoZShpLG4pO3JldHVybiBhfSwiZ2V0Rm9yQ2FjaGVkS2V5Iil9LHtrZXk6Imhhc0NhY2hlIix2YWx1ZTpvKGZ1bmN0aW9uKHIsbil7cmV0dXJuIHRoaXMuZ2V0Q2FjaGVzQXQobikuaGFzKHIpfSwiaGFzQ2FjaGUiKX0se2tleToiaGFzIix2YWx1ZTpvKGZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5nZXRLZXkocik7cmV0dXJuIHRoaXMuaGFzQ2FjaGUoaSxuKX0sImhhcyIpfSx7a2V5OiJzZXRDYWNoZSIsdmFsdWU6byhmdW5jdGlvbihyLG4saSl7aS5rZXk9cix0aGlzLmdldENhY2hlc0F0KG4pLnNldChyLGkpfSwic2V0Q2FjaGUiKX0se2tleToic2V0Iix2YWx1ZTpvKGZ1bmN0aW9uKHIsbixpKXt2YXIgYT10aGlzLmdldEtleShyKTt0aGlzLnNldENhY2hlKGEsbixpKSx0aGlzLnVwZGF0ZUtleU1hcHBpbmdGb3Iocil9LCJzZXQiKX0se2tleToiZGVsZXRlQ2FjaGUiLHZhbHVlOm8oZnVuY3Rpb24ocixuKXt0aGlzLmdldENhY2hlc0F0KG4pLmRlbGV0ZShyKX0sImRlbGV0ZUNhY2hlIil9LHtrZXk6ImRlbGV0ZSIsdmFsdWU6byhmdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuZ2V0S2V5KHIpO3RoaXMuZGVsZXRlQ2FjaGUoaSxuKX0sIl9kZWxldGUiKX0se2tleToiaW52YWxpZGF0ZUtleSIsdmFsdWU6byhmdW5jdGlvbihyKXt2YXIgbj10aGlzO3RoaXMubHZscy5mb3JFYWNoKGZ1bmN0aW9uKGkpe3JldHVybiBuLmRlbGV0ZUNhY2hlKHIsaSl9KX0sImludmFsaWRhdGVLZXkiKX0se2tleToiaW52YWxpZGF0ZSIsdmFsdWU6byhmdW5jdGlvbihyKXt2YXIgbj1yLmlkKCksaT10aGlzLmtleUZvcklkLmdldChuKTt0aGlzLmRlbGV0ZUtleU1hcHBpbmdGb3Iocik7dmFyIGE9dGhpcy5kb2VzRWxlSW52YWxpZGF0ZUtleShyKTtyZXR1cm4gYSYmdGhpcy5pbnZhbGlkYXRlS2V5KGkpLGF8fHRoaXMuZ2V0TnVtYmVyT2ZJZHNGb3JLZXkoaSk9PT0wfSwiaW52YWxpZGF0ZSIpfV0pLHR9KCksSTBlPTI1LHNTPTUwLHlTPS00LFhQPTMsYmdlPTcuOTksTlFlPTgsTVFlPTEwMjQsSVFlPTEwMjQsT1FlPTEwMjQsUFFlPS4yLEJRZT0uOCxGUWU9MTAsJFFlPS4xNSx6UWU9LjEsR1FlPS45LFZRZT0uOSxVUWU9MTAwLEhRZT0xLEgxPXtkZXF1ZXVlOiJkZXF1ZXVlIixkb3duc2NhbGU6ImRvd25zY2FsZSIsaGlnaFF1YWxpdHk6ImhpZ2hRdWFsaXR5In0sV1FlPWxhKHtnZXRLZXk6bnVsbCxkb2VzRWxlSW52YWxpZGF0ZUtleTpiUyxkcmF3RWxlbWVudDpudWxsLGdldEJvdW5kaW5nQm94Om51bGwsZ2V0Um90YXRpb25Qb2ludDpudWxsLGdldFJvdGF0aW9uT2Zmc2V0Om51bGwsaXNWaXNpYmxlOnVtZSxhbGxvd0VkZ2VUeHJDYWNoaW5nOiEwLGFsbG93UGFyZW50VHhyQ2FjaGluZzohMH0pLEZiPW8oZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzO24ucmVuZGVyZXI9ZSxuLm9uRGVxdWV1ZXM9W107dmFyIGk9V1FlKHIpO3JyKG4saSksbi5sb29rdXA9bmV3IFJRZShpLmdldEtleSxpLmRvZXNFbGVJbnZhbGlkYXRlS2V5KSxuLnNldHVwRGVxdWV1ZWluZygpfSwiRWxlbWVudFRleHR1cmVDYWNoZSIpLHFpPUZiLnByb3RvdHlwZTtxaS5yZWFzb25zPUgxO3FpLmdldFRleHR1cmVRdWV1ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiBlLmVsZUltZ0NhY2hlcz1lLmVsZUltZ0NhY2hlc3x8e30sZS5lbGVJbWdDYWNoZXNbdF09ZS5lbGVJbWdDYWNoZXNbdF18fFtdfTtxaS5nZXRSZXRpcmVkVGV4dHVyZVF1ZXVlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj1lLmVsZUltZ0NhY2hlcy5yZXRpcmVkPWUuZWxlSW1nQ2FjaGVzLnJldGlyZWR8fHt9LG49clt0XT1yW3RdfHxbXTtyZXR1cm4gbn07cWkuZ2V0RWxlbWVudFF1ZXVlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXQuZWxlQ2FjaGVRdWV1ZT10LmVsZUNhY2hlUXVldWV8fG5ldyBpNChmdW5jdGlvbihyLG4pe3JldHVybiBuLnJlcXMtci5yZXFzfSk7cmV0dXJuIGV9O3FpLmdldEVsZW1lbnRLZXlUb1F1ZXVlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXQuZWxlS2V5VG9DYWNoZVF1ZXVlPXQuZWxlS2V5VG9DYWNoZVF1ZXVlfHx7fTtyZXR1cm4gZX07cWkuZ2V0RWxlbWVudD1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPXRoaXMscz10aGlzLnJlbmRlcmVyLGw9cy5jeS56b29tKCksdT10aGlzLmxvb2t1cDtpZighZXx8ZS53PT09MHx8ZS5oPT09MHx8aXNOYU4oZS53KXx8aXNOYU4oZS5oKXx8IXQudmlzaWJsZSgpfHx0LnJlbW92ZWQoKXx8IWEuYWxsb3dFZGdlVHhyQ2FjaGluZyYmdC5pc0VkZ2UoKXx8IWEuYWxsb3dQYXJlbnRUeHJDYWNoaW5nJiZ0LmlzUGFyZW50KCkpcmV0dXJuIG51bGw7aWYobj09bnVsbCYmKG49TWF0aC5jZWlsKGlCKGwqcikpKSxuPHlTKW49eVM7ZWxzZSBpZihsPj1iZ2V8fG4+WFApcmV0dXJuIG51bGw7dmFyIGg9TWF0aC5wb3coMixuKSxmPWUuaCpoLGQ9ZS53KmgscD1zLmVsZVRleHRCaWdnZXJUaGFuTWluKHQsaCk7aWYoIXRoaXMuaXNWaXNpYmxlKHQscCkpcmV0dXJuIG51bGw7dmFyIG09dS5nZXQodCxuKTtpZihtJiZtLmludmFsaWRhdGVkJiYobS5pbnZhbGlkYXRlZD0hMSxtLnRleHR1cmUuaW52YWxpZGF0ZWRXaWR0aC09bS53aWR0aCksbSlyZXR1cm4gbTt2YXIgZztpZihmPD1JMGU/Zz1JMGU6Zjw9c1M/Zz1zUzpnPU1hdGguY2VpbChmL3NTKSpzUyxmPk9RZXx8ZD5JUWUpcmV0dXJuIG51bGw7dmFyIHk9YS5nZXRUZXh0dXJlUXVldWUoZyksdj15W3kubGVuZ3RoLTJdLHg9byhmdW5jdGlvbigpe3JldHVybiBhLnJlY3ljbGVUZXh0dXJlKGcsZCl8fGEuYWRkVGV4dHVyZShnLGQpfSwiYWRkTmV3VHhyIik7dnx8KHY9eVt5Lmxlbmd0aC0xXSksdnx8KHY9eCgpKSx2LndpZHRoLXYudXNlZFdpZHRoPGQmJih2PXgoKSk7Zm9yKHZhciBiPW8oZnVuY3Rpb24oTSl7cmV0dXJuIE0mJk0uc2NhbGVkTGFiZWxTaG93bj09PXB9LCJzY2FsYWJsZUZyb20iKSx3PWkmJmk9PT1IMS5kZXF1ZXVlLEM9aSYmaT09PUgxLmhpZ2hRdWFsaXR5LFQ9aSYmaT09PUgxLmRvd25zY2FsZSxFLEE9bisxO0E8PVhQO0ErKyl7dmFyIFM9dS5nZXQodCxBKTtpZihTKXtFPVM7YnJlYWt9fXZhciBfPUUmJkUubGV2ZWw9PT1uKzE/RTpudWxsLEk9byhmdW5jdGlvbigpe3YuY29udGV4dC5kcmF3SW1hZ2UoXy50ZXh0dXJlLmNhbnZhcyxfLngsMCxfLndpZHRoLF8uaGVpZ2h0LHYudXNlZFdpZHRoLDAsZCxmKX0sImRvd25zY2FsZSIpO2lmKHYuY29udGV4dC5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLHYuY29udGV4dC5jbGVhclJlY3Qodi51c2VkV2lkdGgsMCxkLGcpLGIoXykpSSgpO2Vsc2UgaWYoYihFKSlpZihDKXtmb3IodmFyIEQ9RS5sZXZlbDtEPm47RC0tKV89YS5nZXRFbGVtZW50KHQsZSxyLEQsSDEuZG93bnNjYWxlKTtJKCl9ZWxzZSByZXR1cm4gYS5xdWV1ZUVsZW1lbnQodCxFLmxldmVsLTEpLEU7ZWxzZXt2YXIgaztpZighdyYmIUMmJiFUKWZvcih2YXIgTD1uLTE7TD49eVM7TC0tKXt2YXIgUj11LmdldCh0LEwpO2lmKFIpe2s9UjticmVha319aWYoYihrKSlyZXR1cm4gYS5xdWV1ZUVsZW1lbnQodCxuKSxrO3YuY29udGV4dC50cmFuc2xhdGUodi51c2VkV2lkdGgsMCksdi5jb250ZXh0LnNjYWxlKGgsaCksdGhpcy5kcmF3RWxlbWVudCh2LmNvbnRleHQsdCxlLHAsITEpLHYuY29udGV4dC5zY2FsZSgxL2gsMS9oKSx2LmNvbnRleHQudHJhbnNsYXRlKC12LnVzZWRXaWR0aCwwKX1yZXR1cm4gbT17eDp2LnVzZWRXaWR0aCx0ZXh0dXJlOnYsbGV2ZWw6bixzY2FsZTpoLHdpZHRoOmQsaGVpZ2h0OmYsc2NhbGVkTGFiZWxTaG93bjpwfSx2LnVzZWRXaWR0aCs9TWF0aC5jZWlsKGQrTlFlKSx2LmVsZUNhY2hlcy5wdXNoKG0pLHUuc2V0KHQsbixtKSxhLmNoZWNrVGV4dHVyZUZ1bGxuZXNzKHYpLG19O3FpLmludmFsaWRhdGVFbGVtZW50cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl0aGlzLmludmFsaWRhdGVFbGVtZW50KHRbZV0pfTtxaS5pbnZhbGlkYXRlRWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9ZS5sb29rdXAsbj1bXSxpPXIuaXNJbnZhbGlkKHQpO2lmKGkpe2Zvcih2YXIgYT15UzthPD1YUDthKyspe3ZhciBzPXIuZ2V0Rm9yQ2FjaGVkS2V5KHQsYSk7cyYmbi5wdXNoKHMpfXZhciBsPXIuaW52YWxpZGF0ZSh0KTtpZihsKWZvcih2YXIgdT0wO3U8bi5sZW5ndGg7dSsrKXt2YXIgaD1uW3VdLGY9aC50ZXh0dXJlO2YuaW52YWxpZGF0ZWRXaWR0aCs9aC53aWR0aCxoLmludmFsaWRhdGVkPSEwLGUuY2hlY2tUZXh0dXJlVXRpbGl0eShmKX1lLnJlbW92ZUZyb21RdWV1ZSh0KX19O3FpLmNoZWNrVGV4dHVyZVV0aWxpdHk9ZnVuY3Rpb24odCl7dC5pbnZhbGlkYXRlZFdpZHRoPj1QUWUqdC53aWR0aCYmdGhpcy5yZXRpcmVUZXh0dXJlKHQpfTtxaS5jaGVja1RleHR1cmVGdWxsbmVzcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9ZS5nZXRUZXh0dXJlUXVldWUodC5oZWlnaHQpO3QudXNlZFdpZHRoL3Qud2lkdGg+QlFlJiZ0LmZ1bGxuZXNzQ2hlY2tzPj1GUWU/RGYocix0KTp0LmZ1bGxuZXNzQ2hlY2tzKyt9O3FpLnJldGlyZVRleHR1cmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPXQuaGVpZ2h0LG49ZS5nZXRUZXh0dXJlUXVldWUociksaT10aGlzLmxvb2t1cDtEZihuLHQpLHQucmV0aXJlZD0hMDtmb3IodmFyIGE9dC5lbGVDYWNoZXMscz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgbD1hW3NdO2kuZGVsZXRlQ2FjaGUobC5rZXksbC5sZXZlbCl9bkIoYSk7dmFyIHU9ZS5nZXRSZXRpcmVkVGV4dHVyZVF1ZXVlKHIpO3UucHVzaCh0KX07cWkuYWRkVGV4dHVyZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMsbj1yLmdldFRleHR1cmVRdWV1ZSh0KSxpPXt9O3JldHVybiBuLnB1c2goaSksaS5lbGVDYWNoZXM9W10saS5oZWlnaHQ9dCxpLndpZHRoPU1hdGgubWF4KE1RZSxlKSxpLnVzZWRXaWR0aD0wLGkuaW52YWxpZGF0ZWRXaWR0aD0wLGkuZnVsbG5lc3NDaGVja3M9MCxpLmNhbnZhcz1yLnJlbmRlcmVyLm1ha2VPZmZzY3JlZW5DYW52YXMoaS53aWR0aCxpLmhlaWdodCksaS5jb250ZXh0PWkuY2FudmFzLmdldENvbnRleHQoIjJkIiksaX07cWkucmVjeWNsZVRleHR1cmU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dGhpcyxuPXIuZ2V0VGV4dHVyZVF1ZXVlKHQpLGk9ci5nZXRSZXRpcmVkVGV4dHVyZVF1ZXVlKHQpLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIHM9aVthXTtpZihzLndpZHRoPj1lKXJldHVybiBzLnJldGlyZWQ9ITEscy51c2VkV2lkdGg9MCxzLmludmFsaWRhdGVkV2lkdGg9MCxzLmZ1bGxuZXNzQ2hlY2tzPTAsbkIocy5lbGVDYWNoZXMpLHMuY29udGV4dC5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLHMuY29udGV4dC5jbGVhclJlY3QoMCwwLHMud2lkdGgscy5oZWlnaHQpLERmKGkscyksbi5wdXNoKHMpLHN9fTtxaS5xdWV1ZUVsZW1lbnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLG49ci5nZXRFbGVtZW50UXVldWUoKSxpPXIuZ2V0RWxlbWVudEtleVRvUXVldWUoKSxhPXRoaXMuZ2V0S2V5KHQpLHM9aVthXTtpZihzKXMubGV2ZWw9TWF0aC5tYXgocy5sZXZlbCxlKSxzLmVsZXMubWVyZ2UodCkscy5yZXFzKyssbi51cGRhdGVJdGVtKHMpO2Vsc2V7dmFyIGw9e2VsZXM6dC5zcGF3bigpLm1lcmdlKHQpLGxldmVsOmUscmVxczoxLGtleTphfTtuLnB1c2gobCksaVthXT1sfX07cWkuZGVxdWV1ZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcyxyPWUuZ2V0RWxlbWVudFF1ZXVlKCksbj1lLmdldEVsZW1lbnRLZXlUb1F1ZXVlKCksaT1bXSxhPWUubG9va3VwLHM9MDtzPEhRZSYmci5zaXplKCk+MDtzKyspe3ZhciBsPXIucG9wKCksdT1sLmtleSxoPWwuZWxlc1swXSxmPWEuaGFzQ2FjaGUoaCxsLmxldmVsKTtpZihuW3VdPW51bGwsZiljb250aW51ZTtpLnB1c2gobCk7dmFyIGQ9ZS5nZXRCb3VuZGluZ0JveChoKTtlLmdldEVsZW1lbnQoaCxkLHQsbC5sZXZlbCxIMS5kZXF1ZXVlKX1yZXR1cm4gaX07cWkucmVtb3ZlRnJvbVF1ZXVlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj1lLmdldEVsZW1lbnRRdWV1ZSgpLG49ZS5nZXRFbGVtZW50S2V5VG9RdWV1ZSgpLGk9dGhpcy5nZXRLZXkodCksYT1uW2ldO2EhPW51bGwmJihhLmVsZXMubGVuZ3RoPT09MT8oYS5yZXFzPXRCLHIudXBkYXRlSXRlbShhKSxyLnBvcCgpLG5baV09bnVsbCk6YS5lbGVzLnVubWVyZ2UodCkpfTtxaS5vbkRlcXVldWU9ZnVuY3Rpb24odCl7dGhpcy5vbkRlcXVldWVzLnB1c2godCl9O3FpLm9mZkRlcXVldWU9ZnVuY3Rpb24odCl7RGYodGhpcy5vbkRlcXVldWVzLHQpfTtxaS5zZXR1cERlcXVldWVpbmc9eGdlLnNldHVwRGVxdWV1ZWluZyh7ZGVxUmVkcmF3VGhyZXNob2xkOlVRZSxkZXFDb3N0OiRRZSxkZXFBdmdDb3N0OnpRZSxkZXFOb0RyYXdDb3N0OkdRZSxkZXFGYXN0Q29zdDpWUWUsZGVxOm8oZnVuY3Rpb24oZSxyLG4pe3JldHVybiBlLmRlcXVldWUocixuKX0sImRlcSIpLG9uRGVxZDpvKGZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPTA7bjxlLm9uRGVxdWV1ZXMubGVuZ3RoO24rKyl7dmFyIGk9ZS5vbkRlcXVldWVzW25dO2kocil9fSwib25EZXFkIiksc2hvdWxkUmVkcmF3Om8oZnVuY3Rpb24oZSxyLG4saSl7Zm9yKHZhciBhPTA7YTxyLmxlbmd0aDthKyspZm9yKHZhciBzPXJbYV0uZWxlcyxsPTA7bDxzLmxlbmd0aDtsKyspe3ZhciB1PXNbbF0uYm91bmRpbmdCb3goKTtpZihhQih1LGkpKXJldHVybiEwfXJldHVybiExfSwic2hvdWxkUmVkcmF3IikscHJpb3JpdHk6byhmdW5jdGlvbihlKXtyZXR1cm4gZS5yZW5kZXJlci5iZWZvcmVSZW5kZXJQcmlvcml0aWVzLmVsZVR4ckRlcX0sInByaW9yaXR5Iil9KTtxUWU9MSx6Yj0tNCxfUz0yLFlRZT0zLjk5LFhRZT01MCxqUWU9NTAsS1FlPS4xNSxRUWU9LjEsWlFlPS45LEpRZT0uOSxlWmU9MSxPMGU9MjUwLHRaZT00ZTMqNGUzLFAwZT0zMjc2NyxyWmU9ITAsd2dlPW8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcyxuPXIucmVuZGVyZXI9ZSxpPW4uY3k7ci5sYXllcnNCeUxldmVsPXt9LHIuZmlyc3RHZXQ9ITAsci5sYXN0SW52YWxpZGF0aW9uVGltZT1RdSgpLTIqTzBlLHIuc2tpcHBpbmc9ITEsci5lbGVUeHJEZXFzPWkuY29sbGVjdGlvbigpLHIuc2NoZWR1bGVFbGVtZW50UmVmaW5lbWVudD1uNChmdW5jdGlvbigpe3IucmVmaW5lRWxlbWVudFRleHR1cmVzKHIuZWxlVHhyRGVxcyksci5lbGVUeHJEZXFzLnVubWVyZ2Uoci5lbGVUeHJEZXFzKX0salFlKSxuLmJlZm9yZVJlbmRlcihmdW5jdGlvbihzLGwpe2wtci5sYXN0SW52YWxpZGF0aW9uVGltZTw9TzBlP3Iuc2tpcHBpbmc9ITA6ci5za2lwcGluZz0hMX0sbi5iZWZvcmVSZW5kZXJQcmlvcml0aWVzLmx5clR4clNraXApO3ZhciBhPW8oZnVuY3Rpb24obCx1KXtyZXR1cm4gdS5yZXFzLWwucmVxc30sInFTb3J0Iik7ci5sYXllcnNRdWV1ZT1uZXcgaTQoYSksci5zZXR1cERlcXVldWVpbmcoKX0sIkxheWVyZWRUZXh0dXJlQ2FjaGUiKSxFYT13Z2UucHJvdG90eXBlLEIwZT0wLG5aZT1NYXRoLnBvdygyLDUzKS0xO0VhLm1ha2VMYXllcj1mdW5jdGlvbih0LGUpe3ZhciByPU1hdGgucG93KDIsZSksbj1NYXRoLmNlaWwodC53KnIpLGk9TWF0aC5jZWlsKHQuaCpyKSxhPXRoaXMucmVuZGVyZXIubWFrZU9mZnNjcmVlbkNhbnZhcyhuLGkpLHM9e2lkOkIwZT0rK0IwZSVuWmUsYmI6dCxsZXZlbDplLHdpZHRoOm4saGVpZ2h0OmksY2FudmFzOmEsY29udGV4dDphLmdldENvbnRleHQoIjJkIiksZWxlczpbXSxlbGVzUXVldWU6W10scmVxczowfSxsPXMuY29udGV4dCx1PS1zLmJiLngxLGg9LXMuYmIueTE7cmV0dXJuIGwuc2NhbGUocixyKSxsLnRyYW5zbGF0ZSh1LGgpLHN9O0VhLmdldExheWVycz1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcyxpPW4ucmVuZGVyZXIsYT1pLmN5LHM9YS56b29tKCksbD1uLmZpcnN0R2V0O2lmKG4uZmlyc3RHZXQ9ITEscj09bnVsbCl7aWYocj1NYXRoLmNlaWwoaUIocyplKSkscjx6YilyPXpiO2Vsc2UgaWYocz49WVFlfHxyPl9TKXJldHVybiBudWxsfW4udmFsaWRhdGVMYXllcnNFbGVzT3JkZXJpbmcocix0KTt2YXIgdT1uLmxheWVyc0J5TGV2ZWwsaD1NYXRoLnBvdygyLHIpLGY9dVtyXT11W3JdfHxbXSxkLHA9bi5sZXZlbElzQ29tcGxldGUocix0KSxtLGc9byhmdW5jdGlvbigpe3ZhciBJPW8oZnVuY3Rpb24oTyl7aWYobi52YWxpZGF0ZUxheWVyc0VsZXNPcmRlcmluZyhPLHQpLG4ubGV2ZWxJc0NvbXBsZXRlKE8sdCkpcmV0dXJuIG09dVtPXSwhMH0sImNhblVzZUFzVG1wTHZsIiksRD1vKGZ1bmN0aW9uKE8pe2lmKCFtKWZvcih2YXIgTT1yK087emI8PU0mJk08PV9TJiYhSShNKTtNKz1PKTt9LCJjaGVja0x2bHMiKTtEKDEpLEQoLTEpO2Zvcih2YXIgaz1mLmxlbmd0aC0xO2s+PTA7ay0tKXt2YXIgTD1mW2tdO0wuaW52YWxpZCYmRGYoZixMKX19LCJjaGVja1RlbXBMZXZlbHMiKTtpZighcClnKCk7ZWxzZSByZXR1cm4gZjt2YXIgeT1vKGZ1bmN0aW9uKCl7aWYoIWQpe2Q9SHMoKTtmb3IodmFyIEk9MDtJPHQubGVuZ3RoO0krKylnbWUoZCx0W0ldLmJvdW5kaW5nQm94KCkpfXJldHVybiBkfSwiZ2V0QmIiKSx2PW8oZnVuY3Rpb24oSSl7ST1JfHx7fTt2YXIgRD1JLmFmdGVyO3koKTt2YXIgaz1NYXRoLmNlaWwoZC53KmgpLEw9TWF0aC5jZWlsKGQuaCpoKTtpZihrPlAwZXx8TD5QMGUpcmV0dXJuIG51bGw7dmFyIFI9aypMO2lmKFI+dFplKXJldHVybiBudWxsO3ZhciBPPW4ubWFrZUxheWVyKGQscik7aWYoRCE9bnVsbCl7dmFyIE09Zi5pbmRleE9mKEQpKzE7Zi5zcGxpY2UoTSwwLE8pfWVsc2UoSS5pbnNlcnQ9PT12b2lkIDB8fEkuaW5zZXJ0KSYmZi51bnNoaWZ0KE8pO3JldHVybiBPfSwibWFrZUxheWVyIik7aWYobi5za2lwcGluZyYmIWwpcmV0dXJuIG51bGw7Zm9yKHZhciB4PW51bGwsYj10Lmxlbmd0aC9xUWUsdz0hbCxDPTA7Qzx0Lmxlbmd0aDtDKyspe3ZhciBUPXRbQ10sRT1ULl9wcml2YXRlLnJzY3JhdGNoLEE9RS5pbWdMYXllckNhY2hlcz1FLmltZ0xheWVyQ2FjaGVzfHx7fSxTPUFbcl07aWYoUyl7eD1TO2NvbnRpbnVlfWlmKCgheHx8eC5lbGVzLmxlbmd0aD49Ynx8IXltZSh4LmJiLFQuYm91bmRpbmdCb3goKSkpJiYoeD12KHtpbnNlcnQ6ITAsYWZ0ZXI6eH0pLCF4KSlyZXR1cm4gbnVsbDttfHx3P24ucXVldWVMYXllcih4LFQpOm4uZHJhd0VsZUluTGF5ZXIoeCxULHIsZSkseC5lbGVzLnB1c2goVCksQVtyXT14fXJldHVybiBtfHwodz9udWxsOmYpfTtFYS5nZXRFbGVMZXZlbEZvckxheWVyTGV2ZWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdH07RWEuZHJhd0VsZUluTGF5ZXI9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcyxhPXRoaXMucmVuZGVyZXIscz10LmNvbnRleHQsbD1lLmJvdW5kaW5nQm94KCk7bC53PT09MHx8bC5oPT09MHx8IWUudmlzaWJsZSgpfHwocj1pLmdldEVsZUxldmVsRm9yTGF5ZXJMZXZlbChyLG4pLGEuc2V0SW1nU21vb3RoaW5nKHMsITEpLGEuZHJhd0NhY2hlZEVsZW1lbnQocyxlLG51bGwsbnVsbCxyLHJaZSksYS5zZXRJbWdTbW9vdGhpbmcocywhMCkpfTtFYS5sZXZlbElzQ29tcGxldGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLG49ci5sYXllcnNCeUxldmVsW3RdO2lmKCFufHxuLmxlbmd0aD09PTApcmV0dXJuITE7Zm9yKHZhciBpPTAsYT0wO2E8bi5sZW5ndGg7YSsrKXt2YXIgcz1uW2FdO2lmKHMucmVxcz4wfHxzLmludmFsaWQpcmV0dXJuITE7aSs9cy5lbGVzLmxlbmd0aH1yZXR1cm4gaT09PWUubGVuZ3RofTtFYS52YWxpZGF0ZUxheWVyc0VsZXNPcmRlcmluZz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGF5ZXJzQnlMZXZlbFt0XTtpZihyKWZvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKXtmb3IodmFyIGk9cltuXSxhPS0xLHM9MDtzPGUubGVuZ3RoO3MrKylpZihpLmVsZXNbMF09PT1lW3NdKXthPXM7YnJlYWt9aWYoYTwwKXt0aGlzLmludmFsaWRhdGVMYXllcihpKTtjb250aW51ZX1mb3IodmFyIGw9YSxzPTA7czxpLmVsZXMubGVuZ3RoO3MrKylpZihpLmVsZXNbc10hPT1lW2wrc10pe3RoaXMuaW52YWxpZGF0ZUxheWVyKGkpO2JyZWFrfX19O0VhLnVwZGF0ZUVsZW1lbnRzSW5MYXllcnM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dGhpcyxuPXQ0KHRbMF0pLGk9MDtpPHQubGVuZ3RoO2krKylmb3IodmFyIGE9bj9udWxsOnRbaV0scz1uP3RbaV06dFtpXS5lbGUsbD1zLl9wcml2YXRlLnJzY3JhdGNoLHU9bC5pbWdMYXllckNhY2hlcz1sLmltZ0xheWVyQ2FjaGVzfHx7fSxoPXpiO2g8PV9TO2grKyl7dmFyIGY9dVtoXTtmJiYoYSYmci5nZXRFbGVMZXZlbEZvckxheWVyTGV2ZWwoZi5sZXZlbCkhPT1hLmxldmVsfHxlKGYscyxhKSl9fTtFYS5oYXZlTGF5ZXJzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMsZT0hMSxyPXpiO3I8PV9TO3IrKyl7dmFyIG49dC5sYXllcnNCeUxldmVsW3JdO2lmKG4mJm4ubGVuZ3RoPjApe2U9ITA7YnJlYWt9fXJldHVybiBlfTtFYS5pbnZhbGlkYXRlRWxlbWVudHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0Lmxlbmd0aCE9PTAmJihlLmxhc3RJbnZhbGlkYXRpb25UaW1lPVF1KCksISh0Lmxlbmd0aD09PTB8fCFlLmhhdmVMYXllcnMoKSkmJmUudXBkYXRlRWxlbWVudHNJbkxheWVycyh0LG8oZnVuY3Rpb24obixpLGEpe2UuaW52YWxpZGF0ZUxheWVyKG4pfSwiaW52YWxBc3NvY0xheWVycyIpKSl9O0VhLmludmFsaWRhdGVMYXllcj1mdW5jdGlvbih0KXtpZih0aGlzLmxhc3RJbnZhbGlkYXRpb25UaW1lPVF1KCksIXQuaW52YWxpZCl7dmFyIGU9dC5sZXZlbCxyPXQuZWxlcyxuPXRoaXMubGF5ZXJzQnlMZXZlbFtlXTtEZihuLHQpLHQuZWxlc1F1ZXVlPVtdLHQuaW52YWxpZD0hMCx0LnJlcGxhY2VtZW50JiYodC5yZXBsYWNlbWVudC5pbnZhbGlkPSEwKTtmb3IodmFyIGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGE9cltpXS5fcHJpdmF0ZS5yc2NyYXRjaC5pbWdMYXllckNhY2hlczthJiYoYVtlXT1udWxsKX19fTtFYS5yZWZpbmVFbGVtZW50VGV4dHVyZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztlLnVwZGF0ZUVsZW1lbnRzSW5MYXllcnModCxvKGZ1bmN0aW9uKG4saSxhKXt2YXIgcz1uLnJlcGxhY2VtZW50O2lmKHN8fChzPW4ucmVwbGFjZW1lbnQ9ZS5tYWtlTGF5ZXIobi5iYixuLmxldmVsKSxzLnJlcGxhY2VzPW4scy5lbGVzPW4uZWxlcyksIXMucmVxcylmb3IodmFyIGw9MDtsPHMuZWxlcy5sZW5ndGg7bCsrKWUucXVldWVMYXllcihzLHMuZWxlc1tsXSl9LCJyZWZpbmVFYWNoRWxlIikpfTtFYS5lbnF1ZXVlRWxlbWVudFJlZmluZW1lbnQ9ZnVuY3Rpb24odCl7dGhpcy5lbGVUeHJEZXFzLm1lcmdlKHQpLHRoaXMuc2NoZWR1bGVFbGVtZW50UmVmaW5lbWVudCgpfTtFYS5xdWV1ZUxheWVyPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxuPXIubGF5ZXJzUXVldWUsaT10LmVsZXNRdWV1ZSxhPWkuaGFzSWQ9aS5oYXNJZHx8e307aWYoIXQucmVwbGFjZW1lbnQpe2lmKGUpe2lmKGFbZS5pZCgpXSlyZXR1cm47aS5wdXNoKGUpLGFbZS5pZCgpXT0hMH10LnJlcXM/KHQucmVxcysrLG4udXBkYXRlSXRlbSh0KSk6KHQucmVxcz0xLG4ucHVzaCh0KSl9fTtFYS5kZXF1ZXVlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLHI9ZS5sYXllcnNRdWV1ZSxuPVtdLGk9MDtpPGVaZSYmci5zaXplKCkhPT0wOyl7dmFyIGE9ci5wZWVrKCk7aWYoYS5yZXBsYWNlbWVudCl7ci5wb3AoKTtjb250aW51ZX1pZihhLnJlcGxhY2VzJiZhIT09YS5yZXBsYWNlcy5yZXBsYWNlbWVudCl7ci5wb3AoKTtjb250aW51ZX1pZihhLmludmFsaWQpe3IucG9wKCk7Y29udGludWV9dmFyIHM9YS5lbGVzUXVldWUuc2hpZnQoKTtzJiYoZS5kcmF3RWxlSW5MYXllcihhLHMsYS5sZXZlbCx0KSxpKyspLG4ubGVuZ3RoPT09MCYmbi5wdXNoKCEwKSxhLmVsZXNRdWV1ZS5sZW5ndGg9PT0wJiYoci5wb3AoKSxhLnJlcXM9MCxhLnJlcGxhY2VzJiZlLmFwcGx5TGF5ZXJSZXBsYWNlbWVudChhKSxlLnJlcXVlc3RSZWRyYXcoKSl9cmV0dXJuIG59O0VhLmFwcGx5TGF5ZXJSZXBsYWNlbWVudD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9ZS5sYXllcnNCeUxldmVsW3QubGV2ZWxdLG49dC5yZXBsYWNlcyxpPXIuaW5kZXhPZihuKTtpZighKGk8MHx8bi5pbnZhbGlkKSl7cltpXT10O2Zvcih2YXIgYT0wO2E8dC5lbGVzLmxlbmd0aDthKyspe3ZhciBzPXQuZWxlc1thXS5fcHJpdmF0ZSxsPXMuaW1nTGF5ZXJDYWNoZXM9cy5pbWdMYXllckNhY2hlc3x8e307bCYmKGxbdC5sZXZlbF09dCl9ZS5yZXF1ZXN0UmVkcmF3KCl9fTtFYS5yZXF1ZXN0UmVkcmF3PW40KGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5yZW5kZXJlcjt0LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx0LnJlZHJhd0hpbnQoImRyYWciLCEwKSx0LnJlZHJhdygpfSwxMDApO0VhLnNldHVwRGVxdWV1ZWluZz14Z2Uuc2V0dXBEZXF1ZXVlaW5nKHtkZXFSZWRyYXdUaHJlc2hvbGQ6WFFlLGRlcUNvc3Q6S1FlLGRlcUF2Z0Nvc3Q6UVFlLGRlcU5vRHJhd0Nvc3Q6WlFlLGRlcUZhc3RDb3N0OkpRZSxkZXE6byhmdW5jdGlvbihlLHIpe3JldHVybiBlLmRlcXVldWUocil9LCJkZXEiKSxvbkRlcWQ6ckIsc2hvdWxkUmVkcmF3OnVtZSxwcmlvcml0eTpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlbmRlcmVyLmJlZm9yZVJlbmRlclByaW9yaXRpZXMubHlyVHhyRGVxfSwicHJpb3JpdHkiKX0pO1RnZT17fTtvKGlaZSwicG9seWdvbiIpO28oYVplLCJ0cmlhbmdsZUJhY2tjdXJ2ZSIpO28oJDBlLCJ0cmlhbmdsZVRlZSIpO28oc1plLCJjaXJjbGVUcmlhbmdsZSIpO28ob1plLCJjaXJjbGUiKTtUZ2UuYXJyb3dTaGFwZUltcGw9ZnVuY3Rpb24odCl7cmV0dXJuKEYwZXx8KEYwZT17cG9seWdvbjppWmUsInRyaWFuZ2xlLWJhY2tjdXJ2ZSI6YVplLCJ0cmlhbmdsZS10ZWUiOiQwZSwiY2lyY2xlLXRyaWFuZ2xlIjpzWmUsInRyaWFuZ2xlLWNyb3NzIjokMGUsY2lyY2xlOm9aZX0pKVt0XX07UWM9e307UWMuZHJhd0VsZW1lbnQ9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBzPXRoaXM7ZS5pc05vZGUoKT9zLmRyYXdOb2RlKHQsZSxyLG4saSxhKTpzLmRyYXdFZGdlKHQsZSxyLG4saSxhKX07UWMuZHJhd0VsZW1lbnRPdmVybGF5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcztlLmlzTm9kZSgpP3IuZHJhd05vZGVPdmVybGF5KHQsZSk6ci5kcmF3RWRnZU92ZXJsYXkodCxlKX07UWMuZHJhd0VsZW1lbnRVbmRlcmxheT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXM7ZS5pc05vZGUoKT9yLmRyYXdOb2RlVW5kZXJsYXkodCxlKTpyLmRyYXdFZGdlVW5kZXJsYXkodCxlKX07UWMuZHJhd0NhY2hlZEVsZW1lbnRQb3J0aW9uPWZ1bmN0aW9uKHQsZSxyLG4saSxhLHMsbCl7dmFyIHU9dGhpcyxoPXIuZ2V0Qm91bmRpbmdCb3goZSk7aWYoIShoLnc9PT0wfHxoLmg9PT0wKSl7dmFyIGY9ci5nZXRFbGVtZW50KGUsaCxuLGksYSk7aWYoZiE9bnVsbCl7dmFyIGQ9bCh1LGUpO2lmKGQ9PT0wKXJldHVybjt2YXIgcD1zKHUsZSksbT1oLngxLGc9aC55MSx5PWgudyx2PWguaCx4LGIsdyxDLFQ7aWYocCE9PTApe3ZhciBFPXIuZ2V0Um90YXRpb25Qb2ludChlKTt3PUUueCxDPUUueSx0LnRyYW5zbGF0ZSh3LEMpLHQucm90YXRlKHApLFQ9dS5nZXRJbWdTbW9vdGhpbmcodCksVHx8dS5zZXRJbWdTbW9vdGhpbmcodCwhMCk7dmFyIEE9ci5nZXRSb3RhdGlvbk9mZnNldChlKTt4PUEueCxiPUEueX1lbHNlIHg9bSxiPWc7dmFyIFM7ZCE9PTEmJihTPXQuZ2xvYmFsQWxwaGEsdC5nbG9iYWxBbHBoYT1TKmQpLHQuZHJhd0ltYWdlKGYudGV4dHVyZS5jYW52YXMsZi54LDAsZi53aWR0aCxmLmhlaWdodCx4LGIseSx2KSxkIT09MSYmKHQuZ2xvYmFsQWxwaGE9UykscCE9PTAmJih0LnJvdGF0ZSgtcCksdC50cmFuc2xhdGUoLXcsLUMpLFR8fHUuc2V0SW1nU21vb3RoaW5nKHQsITEpKX1lbHNlIHIuZHJhd0VsZW1lbnQodCxlKX19O2xaZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIDB9LCJnZXRaZXJvUm90YXRpb24iKSxjWmU9byhmdW5jdGlvbihlLHIpe3JldHVybiBlLmdldFRleHRBbmdsZShyLG51bGwpfSwiZ2V0TGFiZWxSb3RhdGlvbiIpLHVaZT1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIGUuZ2V0VGV4dEFuZ2xlKHIsInNvdXJjZSIpfSwiZ2V0U291cmNlTGFiZWxSb3RhdGlvbiIpLGhaZT1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIGUuZ2V0VGV4dEFuZ2xlKHIsInRhcmdldCIpfSwiZ2V0VGFyZ2V0TGFiZWxSb3RhdGlvbiIpLGZaZT1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIHIuZWZmZWN0aXZlT3BhY2l0eSgpfSwiZ2V0T3BhY2l0eSIpLExQPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gci5wc3R5bGUoInRleHQtb3BhY2l0eSIpLnBmVmFsdWUqci5lZmZlY3RpdmVPcGFjaXR5KCl9LCJnZXRUZXh0T3BhY2l0eSIpO1FjLmRyYXdDYWNoZWRFbGVtZW50PWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgcz10aGlzLGw9cy5kYXRhLHU9bC5lbGVUeHJDYWNoZSxoPWwubGJsVHhyQ2FjaGUsZj1sLnNsYlR4ckNhY2hlLGQ9bC50bGJUeHJDYWNoZSxwPWUuYm91bmRpbmdCb3goKSxtPWE9PT0hMD91LnJlYXNvbnMuaGlnaFF1YWxpdHk6bnVsbDtpZighKHAudz09PTB8fHAuaD09PTB8fCFlLnZpc2libGUoKSkmJighbnx8YUIocCxuKSkpe3ZhciBnPWUuaXNFZGdlKCkseT1lLmVsZW1lbnQoKS5fcHJpdmF0ZS5yc2NyYXRjaC5iYWRMaW5lO3MuZHJhd0VsZW1lbnRVbmRlcmxheSh0LGUpLHMuZHJhd0NhY2hlZEVsZW1lbnRQb3J0aW9uKHQsZSx1LHIsaSxtLGxaZSxmWmUpLCghZ3x8IXkpJiZzLmRyYXdDYWNoZWRFbGVtZW50UG9ydGlvbih0LGUsaCxyLGksbSxjWmUsTFApLGcmJiF5JiYocy5kcmF3Q2FjaGVkRWxlbWVudFBvcnRpb24odCxlLGYscixpLG0sdVplLExQKSxzLmRyYXdDYWNoZWRFbGVtZW50UG9ydGlvbih0LGUsZCxyLGksbSxoWmUsTFApKSxzLmRyYXdFbGVtZW50T3ZlcmxheSh0LGUpfX07UWMuZHJhd0VsZW1lbnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMsbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgaT1lW25dO3IuZHJhd0VsZW1lbnQodCxpKX19O1FjLmRyYXdDYWNoZWRFbGVtZW50cz1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9dGhpcyxhPTA7YTxlLmxlbmd0aDthKyspe3ZhciBzPWVbYV07aS5kcmF3Q2FjaGVkRWxlbWVudCh0LHMscixuKX19O1FjLmRyYXdDYWNoZWROb2Rlcz1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9dGhpcyxhPTA7YTxlLmxlbmd0aDthKyspe3ZhciBzPWVbYV07cy5pc05vZGUoKSYmaS5kcmF3Q2FjaGVkRWxlbWVudCh0LHMscixuKX19O1FjLmRyYXdMYXllcmVkRWxlbWVudHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcyxhPWkuZGF0YS5seXJUeHJDYWNoZS5nZXRMYXllcnMoZSxyKTtpZihhKWZvcih2YXIgcz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgbD1hW3NdLHU9bC5iYjt1Lnc9PT0wfHx1Lmg9PT0wfHx0LmRyYXdJbWFnZShsLmNhbnZhcyx1LngxLHUueTEsdS53LHUuaCl9ZWxzZSBpLmRyYXdDYWNoZWRFbGVtZW50cyh0LGUscixuKX07dGg9e307dGguZHJhd0VkZ2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTohMCxpPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTohMCxhPWFyZ3VtZW50cy5sZW5ndGg+NSYmYXJndW1lbnRzWzVdIT09dm9pZCAwP2FyZ3VtZW50c1s1XTohMCxzPXRoaXMsbD1lLl9wcml2YXRlLnJzY3JhdGNoO2lmKCEoYSYmIWUudmlzaWJsZSgpKSYmIShsLmJhZExpbmV8fGwuYWxscHRzPT1udWxsfHxpc05hTihsLmFsbHB0c1swXSkpKXt2YXIgdTtyJiYodT1yLHQudHJhbnNsYXRlKC11LngxLC11LnkxKSk7dmFyIGg9YT9lLnBzdHlsZSgib3BhY2l0eSIpLnZhbHVlOjEsZj1hP2UucHN0eWxlKCJsaW5lLW9wYWNpdHkiKS52YWx1ZToxLGQ9ZS5wc3R5bGUoImN1cnZlLXN0eWxlIikudmFsdWUscD1lLnBzdHlsZSgibGluZS1zdHlsZSIpLnZhbHVlLG09ZS5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSxnPWUucHN0eWxlKCJsaW5lLWNhcCIpLnZhbHVlLHk9ZS5wc3R5bGUoImxpbmUtb3V0bGluZS13aWR0aCIpLnZhbHVlLHY9ZS5wc3R5bGUoImxpbmUtb3V0bGluZS1jb2xvciIpLnZhbHVlLHg9aCpmLGI9aCpmLHc9byhmdW5jdGlvbigpe3ZhciBPPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTp4O2Q9PT0ic3RyYWlnaHQtdHJpYW5nbGUiPyhzLmVsZVN0cm9rZVN0eWxlKHQsZSxPKSxzLmRyYXdFZGdlVHJpYW5nbGVQYXRoKGUsdCxsLmFsbHB0cykpOih0LmxpbmVXaWR0aD1tLHQubGluZUNhcD1nLHMuZWxlU3Ryb2tlU3R5bGUodCxlLE8pLHMuZHJhd0VkZ2VQYXRoKGUsdCxsLmFsbHB0cyxwKSx0LmxpbmVDYXA9ImJ1dHQiKX0sImRyYXdMaW5lIiksQz1vKGZ1bmN0aW9uKCl7dmFyIE89YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOng7aWYodC5saW5lV2lkdGg9bSt5LHQubGluZUNhcD1nLHk+MClzLmNvbG9yU3Ryb2tlU3R5bGUodCx2WzBdLHZbMV0sdlsyXSxPKTtlbHNle3QubGluZUNhcD0iYnV0dCI7cmV0dXJufWQ9PT0ic3RyYWlnaHQtdHJpYW5nbGUiP3MuZHJhd0VkZ2VUcmlhbmdsZVBhdGgoZSx0LGwuYWxscHRzKToocy5kcmF3RWRnZVBhdGgoZSx0LGwuYWxscHRzLHApLHQubGluZUNhcD0iYnV0dCIpfSwiZHJhd0xpbmVPdXRsaW5lIiksVD1vKGZ1bmN0aW9uKCl7aSYmcy5kcmF3RWRnZU92ZXJsYXkodCxlKX0sImRyYXdPdmVybGF5IiksRT1vKGZ1bmN0aW9uKCl7aSYmcy5kcmF3RWRnZVVuZGVybGF5KHQsZSl9LCJkcmF3VW5kZXJsYXkiKSxBPW8oZnVuY3Rpb24oKXt2YXIgTz1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06YjtzLmRyYXdBcnJvd2hlYWRzKHQsZSxPKX0sImRyYXdBcnJvd3MiKSxTPW8oZnVuY3Rpb24oKXtzLmRyYXdFbGVtZW50VGV4dCh0LGUsbnVsbCxuKX0sImRyYXdUZXh0Iik7dC5saW5lSm9pbj0icm91bmQiO3ZhciBfPWUucHN0eWxlKCJnaG9zdCIpLnZhbHVlPT09InllcyI7aWYoXyl7dmFyIEk9ZS5wc3R5bGUoImdob3N0LW9mZnNldC14IikucGZWYWx1ZSxEPWUucHN0eWxlKCJnaG9zdC1vZmZzZXQteSIpLnBmVmFsdWUsaz1lLnBzdHlsZSgiZ2hvc3Qtb3BhY2l0eSIpLnZhbHVlLEw9eCprO3QudHJhbnNsYXRlKEksRCksdyhMKSxBKEwpLHQudHJhbnNsYXRlKC1JLC1EKX1lbHNlIEMoKTtFKCksdygpLEEoKSxUKCksUygpLHImJnQudHJhbnNsYXRlKHUueDEsdS55MSl9fTtrZ2U9byhmdW5jdGlvbihlKXtpZighWyJvdmVybGF5IiwidW5kZXJsYXkiXS5pbmNsdWRlcyhlKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RhdGUiKTtyZXR1cm4gZnVuY3Rpb24ocixuKXtpZihuLnZpc2libGUoKSl7dmFyIGk9bi5wc3R5bGUoIiIuY29uY2F0KGUsIi1vcGFjaXR5IikpLnZhbHVlO2lmKGkhPT0wKXt2YXIgYT10aGlzLHM9YS51c2VQYXRocygpLGw9bi5fcHJpdmF0ZS5yc2NyYXRjaCx1PW4ucHN0eWxlKCIiLmNvbmNhdChlLCItcGFkZGluZyIpKS5wZlZhbHVlLGg9Mip1LGY9bi5wc3R5bGUoIiIuY29uY2F0KGUsIi1jb2xvciIpKS52YWx1ZTtyLmxpbmVXaWR0aD1oLGwuZWRnZVR5cGU9PT0ic2VsZiImJiFzP3IubGluZUNhcD0iYnV0dCI6ci5saW5lQ2FwPSJyb3VuZCIsYS5jb2xvclN0cm9rZVN0eWxlKHIsZlswXSxmWzFdLGZbMl0saSksYS5kcmF3RWRnZVBhdGgobixyLGwuYWxscHRzLCJzb2xpZCIpfX19fSwiZHJhd0VkZ2VPdmVybGF5VW5kZXJsYXkiKTt0aC5kcmF3RWRnZU92ZXJsYXk9a2dlKCJvdmVybGF5Iik7dGguZHJhd0VkZ2VVbmRlcmxheT1rZ2UoInVuZGVybGF5Iik7dGguZHJhd0VkZ2VQYXRoPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQuX3ByaXZhdGUucnNjcmF0Y2gsYT1lLHMsbD0hMSx1PXRoaXMudXNlUGF0aHMoKSxoPXQucHN0eWxlKCJsaW5lLWRhc2gtcGF0dGVybiIpLnBmVmFsdWUsZj10LnBzdHlsZSgibGluZS1kYXNoLW9mZnNldCIpLnBmVmFsdWU7aWYodSl7dmFyIGQ9ci5qb2luKCIkIikscD1pLnBhdGhDYWNoZUtleSYmaS5wYXRoQ2FjaGVLZXk9PT1kO3A/KHM9ZT1pLnBhdGhDYWNoZSxsPSEwKToocz1lPW5ldyBQYXRoMkQsaS5wYXRoQ2FjaGVLZXk9ZCxpLnBhdGhDYWNoZT1zKX1pZihhLnNldExpbmVEYXNoKXN3aXRjaChuKXtjYXNlImRvdHRlZCI6YS5zZXRMaW5lRGFzaChbMSwxXSk7YnJlYWs7Y2FzZSJkYXNoZWQiOmEuc2V0TGluZURhc2goaCksYS5saW5lRGFzaE9mZnNldD1mO2JyZWFrO2Nhc2Uic29saWQiOmEuc2V0TGluZURhc2goW10pO2JyZWFrfWlmKCFsJiYhaS5iYWRMaW5lKXN3aXRjaChlLmJlZ2luUGF0aCYmZS5iZWdpblBhdGgoKSxlLm1vdmVUbyhyWzBdLHJbMV0pLGkuZWRnZVR5cGUpe2Nhc2UiYmV6aWVyIjpjYXNlInNlbGYiOmNhc2UiY29tcG91bmQiOmNhc2UibXVsdGliZXppZXIiOmZvcih2YXIgbT0yO20rMzxyLmxlbmd0aDttKz00KWUucXVhZHJhdGljQ3VydmVUbyhyW21dLHJbbSsxXSxyW20rMl0sclttKzNdKTticmVhaztjYXNlInN0cmFpZ2h0IjpjYXNlImhheXN0YWNrIjpmb3IodmFyIGc9MjtnKzE8ci5sZW5ndGg7Zys9MillLmxpbmVUbyhyW2ddLHJbZysxXSk7YnJlYWs7Y2FzZSJzZWdtZW50cyI6aWYoaS5pc1JvdW5kKXt2YXIgeT1tbyhpLnJvdW5kQ29ybmVycyksdjt0cnl7Zm9yKHkucygpOyEodj15Lm4oKSkuZG9uZTspe3ZhciB4PXYudmFsdWU7aGdlKGUseCl9fWNhdGNoKHcpe3kuZSh3KX1maW5hbGx5e3kuZigpfWUubGluZVRvKHJbci5sZW5ndGgtMl0scltyLmxlbmd0aC0xXSl9ZWxzZSBmb3IodmFyIGI9MjtiKzE8ci5sZW5ndGg7Yis9MillLmxpbmVUbyhyW2JdLHJbYisxXSk7YnJlYWt9ZT1hLHU/ZS5zdHJva2Uocyk6ZS5zdHJva2UoKSxlLnNldExpbmVEYXNoJiZlLnNldExpbmVEYXNoKFtdKX07dGguZHJhd0VkZ2VUcmlhbmdsZVBhdGg9ZnVuY3Rpb24odCxlLHIpe2UuZmlsbFN0eWxlPWUuc3Ryb2tlU3R5bGU7Zm9yKHZhciBuPXQucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUsaT0wO2krMTxyLmxlbmd0aDtpKz0yKXt2YXIgYT1bcltpKzJdLXJbaV0scltpKzNdLXJbaSsxXV0scz1NYXRoLnNxcnQoYVswXSphWzBdK2FbMV0qYVsxXSksbD1bYVsxXS9zLC1hWzBdL3NdLHU9W2xbMF0qbi8yLGxbMV0qbi8yXTtlLmJlZ2luUGF0aCgpLGUubW92ZVRvKHJbaV0tdVswXSxyW2krMV0tdVsxXSksZS5saW5lVG8ocltpXSt1WzBdLHJbaSsxXSt1WzFdKSxlLmxpbmVUbyhyW2krMl0scltpKzNdKSxlLmNsb3NlUGF0aCgpLGUuZmlsbCgpfX07dGguZHJhd0Fycm93aGVhZHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUuX3ByaXZhdGUucnNjcmF0Y2gsaT1uLmVkZ2VUeXBlPT09ImhheXN0YWNrIjtpfHx0aGlzLmRyYXdBcnJvd2hlYWQodCxlLCJzb3VyY2UiLG4uYXJyb3dTdGFydFgsbi5hcnJvd1N0YXJ0WSxuLnNyY0Fycm93QW5nbGUsciksdGhpcy5kcmF3QXJyb3doZWFkKHQsZSwibWlkLXRhcmdldCIsbi5taWRYLG4ubWlkWSxuLm1pZHRndEFycm93QW5nbGUsciksdGhpcy5kcmF3QXJyb3doZWFkKHQsZSwibWlkLXNvdXJjZSIsbi5taWRYLG4ubWlkWSxuLm1pZHNyY0Fycm93QW5nbGUsciksaXx8dGhpcy5kcmF3QXJyb3doZWFkKHQsZSwidGFyZ2V0IixuLmFycm93RW5kWCxuLmFycm93RW5kWSxuLnRndEFycm93QW5nbGUscil9O3RoLmRyYXdBcnJvd2hlYWQ9ZnVuY3Rpb24odCxlLHIsbixpLGEscyl7aWYoIShpc05hTihuKXx8bj09bnVsbHx8aXNOYU4oaSl8fGk9PW51bGx8fGlzTmFOKGEpfHxhPT1udWxsKSl7dmFyIGw9dGhpcyx1PWUucHN0eWxlKHIrIi1hcnJvdy1zaGFwZSIpLnZhbHVlO2lmKHUhPT0ibm9uZSIpe3ZhciBoPWUucHN0eWxlKHIrIi1hcnJvdy1maWxsIikudmFsdWU9PT0iaG9sbG93Ij8iYm90aCI6ImZpbGxlZCIsZj1lLnBzdHlsZShyKyItYXJyb3ctZmlsbCIpLnZhbHVlLGQ9ZS5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSxwPWUucHN0eWxlKHIrIi1hcnJvdy13aWR0aCIpLG09cC52YWx1ZT09PSJtYXRjaC1saW5lIj9kOnAucGZWYWx1ZTtwLnVuaXRzPT09IiUiJiYobSo9ZCk7dmFyIGc9ZS5wc3R5bGUoIm9wYWNpdHkiKS52YWx1ZTtzPT09dm9pZCAwJiYocz1nKTt2YXIgeT10Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbjsocyE9PTF8fGY9PT0iaG9sbG93IikmJih0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0iZGVzdGluYXRpb24tb3V0IixsLmNvbG9yRmlsbFN0eWxlKHQsMjU1LDI1NSwyNTUsMSksbC5jb2xvclN0cm9rZVN0eWxlKHQsMjU1LDI1NSwyNTUsMSksbC5kcmF3QXJyb3dTaGFwZShlLHQsaCxkLHUsbSxuLGksYSksdC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249eSk7dmFyIHY9ZS5wc3R5bGUocisiLWFycm93LWNvbG9yIikudmFsdWU7bC5jb2xvckZpbGxTdHlsZSh0LHZbMF0sdlsxXSx2WzJdLHMpLGwuY29sb3JTdHJva2VTdHlsZSh0LHZbMF0sdlsxXSx2WzJdLHMpLGwuZHJhd0Fycm93U2hhcGUoZSx0LGYsZCx1LG0sbixpLGEpfX19O3RoLmRyYXdBcnJvd1NoYXBlPWZ1bmN0aW9uKHQsZSxyLG4saSxhLHMsbCx1KXt2YXIgaD10aGlzLGY9dGhpcy51c2VQYXRocygpJiZpIT09InRyaWFuZ2xlLWNyb3NzIixkPSExLHAsbT1lLGc9e3g6cyx5Omx9LHk9dC5wc3R5bGUoImFycm93LXNjYWxlIikudmFsdWUsdj10aGlzLmdldEFycm93V2lkdGgobix5KSx4PWguYXJyb3dTaGFwZXNbaV07aWYoZil7dmFyIGI9aC5hcnJvd1BhdGhDYWNoZT1oLmFycm93UGF0aENhY2hlfHxbXSx3PV9mKGkpLEM9Ylt3XTtDIT1udWxsPyhwPWU9QyxkPSEwKToocD1lPW5ldyBQYXRoMkQsYlt3XT1wKX1kfHwoZS5iZWdpblBhdGgmJmUuYmVnaW5QYXRoKCksZj94LmRyYXcoZSwxLDAse3g6MCx5OjB9LDEpOnguZHJhdyhlLHYsdSxnLG4pLGUuY2xvc2VQYXRoJiZlLmNsb3NlUGF0aCgpKSxlPW0sZiYmKGUudHJhbnNsYXRlKHMsbCksZS5yb3RhdGUodSksZS5zY2FsZSh2LHYpKSwocj09PSJmaWxsZWQifHxyPT09ImJvdGgiKSYmKGY/ZS5maWxsKHApOmUuZmlsbCgpKSwocj09PSJob2xsb3cifHxyPT09ImJvdGgiKSYmKGUubGluZVdpZHRoPWEvKGY/djoxKSxlLmxpbmVKb2luPSJtaXRlciIsZj9lLnN0cm9rZShwKTplLnN0cm9rZSgpKSxmJiYoZS5zY2FsZSgxL3YsMS92KSxlLnJvdGF0ZSgtdSksZS50cmFuc2xhdGUoLXMsLWwpKX07YkI9e307YkIuc2FmZURyYXdJbWFnZT1mdW5jdGlvbih0LGUscixuLGksYSxzLGwsdSxoKXtpZighKGk8PTB8fGE8PTB8fHU8PTB8fGg8PTApKXRyeXt0LmRyYXdJbWFnZShlLHIsbixpLGEscyxsLHUsaCl9Y2F0Y2goZil7dW4oZil9fTtiQi5kcmF3SW5zY3JpYmVkSW1hZ2U9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT10aGlzLHM9ci5wb3NpdGlvbigpLGw9cy54LHU9cy55LGg9ci5jeSgpLnN0eWxlKCksZj1oLmdldEluZGV4ZWRTdHlsZS5iaW5kKGgpLGQ9ZihyLCJiYWNrZ3JvdW5kLWZpdCIsInZhbHVlIixuKSxwPWYociwiYmFja2dyb3VuZC1yZXBlYXQiLCJ2YWx1ZSIsbiksbT1yLndpZHRoKCksZz1yLmhlaWdodCgpLHk9ci5wYWRkaW5nKCkqMix2PW0rKGYociwiYmFja2dyb3VuZC13aWR0aC1yZWxhdGl2ZS10byIsInZhbHVlIixuKT09PSJpbm5lciI/MDp5KSx4PWcrKGYociwiYmFja2dyb3VuZC1oZWlnaHQtcmVsYXRpdmUtdG8iLCJ2YWx1ZSIsbik9PT0iaW5uZXIiPzA6eSksYj1yLl9wcml2YXRlLnJzY3JhdGNoLHc9ZihyLCJiYWNrZ3JvdW5kLWNsaXAiLCJ2YWx1ZSIsbiksQz13PT09Im5vZGUiLFQ9ZihyLCJiYWNrZ3JvdW5kLWltYWdlLW9wYWNpdHkiLCJ2YWx1ZSIsbikqaSxFPWYociwiYmFja2dyb3VuZC1pbWFnZS1zbW9vdGhpbmciLCJ2YWx1ZSIsbiksQT1yLnBzdHlsZSgiY29ybmVyLXJhZGl1cyIpLnZhbHVlO0EhPT0iYXV0byImJihBPXIucHN0eWxlKCJjb3JuZXItcmFkaXVzIikucGZWYWx1ZSk7dmFyIFM9ZS53aWR0aHx8ZS5jYWNoZWRXLF89ZS5oZWlnaHR8fGUuY2FjaGVkSDsoUz09bnVsbHx8Xz09bnVsbCkmJihkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpLFM9ZS5jYWNoZWRXPWUud2lkdGh8fGUub2Zmc2V0V2lkdGgsXz1lLmNhY2hlZEg9ZS5oZWlnaHR8fGUub2Zmc2V0SGVpZ2h0LGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZSkpO3ZhciBJPVMsRD1fO2lmKGYociwiYmFja2dyb3VuZC13aWR0aCIsInZhbHVlIixuKSE9PSJhdXRvIiYmKGYociwiYmFja2dyb3VuZC13aWR0aCIsInVuaXRzIixuKT09PSIlIj9JPWYociwiYmFja2dyb3VuZC13aWR0aCIsInBmVmFsdWUiLG4pKnY6ST1mKHIsImJhY2tncm91bmQtd2lkdGgiLCJwZlZhbHVlIixuKSksZihyLCJiYWNrZ3JvdW5kLWhlaWdodCIsInZhbHVlIixuKSE9PSJhdXRvIiYmKGYociwiYmFja2dyb3VuZC1oZWlnaHQiLCJ1bml0cyIsbik9PT0iJSI/RD1mKHIsImJhY2tncm91bmQtaGVpZ2h0IiwicGZWYWx1ZSIsbikqeDpEPWYociwiYmFja2dyb3VuZC1oZWlnaHQiLCJwZlZhbHVlIixuKSksIShJPT09MHx8RD09PTApKXtpZihkPT09ImNvbnRhaW4iKXt2YXIgaz1NYXRoLm1pbih2L0kseC9EKTtJKj1rLEQqPWt9ZWxzZSBpZihkPT09ImNvdmVyIil7dmFyIGs9TWF0aC5tYXgodi9JLHgvRCk7SSo9ayxEKj1rfXZhciBMPWwtdi8yLFI9ZihyLCJiYWNrZ3JvdW5kLXBvc2l0aW9uLXgiLCJ1bml0cyIsbiksTz1mKHIsImJhY2tncm91bmQtcG9zaXRpb24teCIsInBmVmFsdWUiLG4pO1I9PT0iJSI/TCs9KHYtSSkqTzpMKz1PO3ZhciBNPWYociwiYmFja2dyb3VuZC1vZmZzZXQteCIsInVuaXRzIixuKSxCPWYociwiYmFja2dyb3VuZC1vZmZzZXQteCIsInBmVmFsdWUiLG4pO009PT0iJSI/TCs9KHYtSSkqQjpMKz1CO3ZhciBGPXUteC8yLFA9ZihyLCJiYWNrZ3JvdW5kLXBvc2l0aW9uLXkiLCJ1bml0cyIsbiksej1mKHIsImJhY2tncm91bmQtcG9zaXRpb24teSIsInBmVmFsdWUiLG4pO1A9PT0iJSI/Ris9KHgtRCkqejpGKz16O3ZhciAkPWYociwiYmFja2dyb3VuZC1vZmZzZXQteSIsInVuaXRzIixuKSxIPWYociwiYmFja2dyb3VuZC1vZmZzZXQteSIsInBmVmFsdWUiLG4pOyQ9PT0iJSI/Ris9KHgtRCkqSDpGKz1ILGIucGF0aENhY2hlJiYoTC09bCxGLT11LGw9MCx1PTApO3ZhciBRPXQuZ2xvYmFsQWxwaGE7dC5nbG9iYWxBbHBoYT1UO3ZhciBqPWEuZ2V0SW1nU21vb3RoaW5nKHQpLGllPSExO2lmKEU9PT0ibm8iJiZqPyhhLnNldEltZ1Ntb290aGluZyh0LCExKSxpZT0hMCk6RT09PSJ5ZXMiJiYhaiYmKGEuc2V0SW1nU21vb3RoaW5nKHQsITApLGllPSEwKSxwPT09Im5vLXJlcGVhdCIpQyYmKHQuc2F2ZSgpLGIucGF0aENhY2hlP3QuY2xpcChiLnBhdGhDYWNoZSk6KGEubm9kZVNoYXBlc1thLmdldE5vZGVTaGFwZShyKV0uZHJhdyh0LGwsdSx2LHgsQSxiKSx0LmNsaXAoKSkpLGEuc2FmZURyYXdJbWFnZSh0LGUsMCwwLFMsXyxMLEYsSSxEKSxDJiZ0LnJlc3RvcmUoKTtlbHNle3ZhciBuZT10LmNyZWF0ZVBhdHRlcm4oZSxwKTt0LmZpbGxTdHlsZT1uZSxhLm5vZGVTaGFwZXNbYS5nZXROb2RlU2hhcGUocildLmRyYXcodCxsLHUsdix4LEEsYiksdC50cmFuc2xhdGUoTCxGKSx0LmZpbGwoKSx0LnRyYW5zbGF0ZSgtTCwtRil9dC5nbG9iYWxBbHBoYT1RLGllJiZhLnNldEltZ1Ntb290aGluZyh0LGopfX07WXA9e307WXAuZWxlVGV4dEJpZ2dlclRoYW5NaW49ZnVuY3Rpb24odCxlKXtpZighZSl7dmFyIHI9dC5jeSgpLnpvb20oKSxuPXRoaXMuZ2V0UGl4ZWxSYXRpbygpLGk9TWF0aC5jZWlsKGlCKHIqbikpO2U9TWF0aC5wb3coMixpKX12YXIgYT10LnBzdHlsZSgiZm9udC1zaXplIikucGZWYWx1ZSplLHM9dC5wc3R5bGUoIm1pbi16b29tZWQtZm9udC1zaXplIikucGZWYWx1ZTtyZXR1cm4hKGE8cyl9O1lwLmRyYXdFbGVtZW50VGV4dD1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPWFyZ3VtZW50cy5sZW5ndGg+NSYmYXJndW1lbnRzWzVdIT09dm9pZCAwP2FyZ3VtZW50c1s1XTohMCxzPXRoaXM7aWYobj09bnVsbCl7aWYoYSYmIXMuZWxlVGV4dEJpZ2dlclRoYW5NaW4oZSkpcmV0dXJufWVsc2UgaWYobj09PSExKXJldHVybjtpZihlLmlzTm9kZSgpKXt2YXIgbD1lLnBzdHlsZSgibGFiZWwiKTtpZighbHx8IWwudmFsdWUpcmV0dXJuO3ZhciB1PXMuZ2V0TGFiZWxKdXN0aWZpY2F0aW9uKGUpO3QudGV4dEFsaWduPXUsdC50ZXh0QmFzZWxpbmU9ImJvdHRvbSJ9ZWxzZXt2YXIgaD1lLmVsZW1lbnQoKS5fcHJpdmF0ZS5yc2NyYXRjaC5iYWRMaW5lLGY9ZS5wc3R5bGUoImxhYmVsIiksZD1lLnBzdHlsZSgic291cmNlLWxhYmVsIikscD1lLnBzdHlsZSgidGFyZ2V0LWxhYmVsIik7aWYoaHx8KCFmfHwhZi52YWx1ZSkmJighZHx8IWQudmFsdWUpJiYoIXB8fCFwLnZhbHVlKSlyZXR1cm47dC50ZXh0QWxpZ249ImNlbnRlciIsdC50ZXh0QmFzZWxpbmU9ImJvdHRvbSJ9dmFyIG09IXIsZztyJiYoZz1yLHQudHJhbnNsYXRlKC1nLngxLC1nLnkxKSksaT09bnVsbD8ocy5kcmF3VGV4dCh0LGUsbnVsbCxtLGEpLGUuaXNFZGdlKCkmJihzLmRyYXdUZXh0KHQsZSwic291cmNlIixtLGEpLHMuZHJhd1RleHQodCxlLCJ0YXJnZXQiLG0sYSkpKTpzLmRyYXdUZXh0KHQsZSxpLG0sYSksciYmdC50cmFuc2xhdGUoZy54MSxnLnkxKX07WXAuZ2V0Rm9udENhY2hlPWZ1bmN0aW9uKHQpe3ZhciBlO3RoaXMuZm9udENhY2hlcz10aGlzLmZvbnRDYWNoZXN8fFtdO2Zvcih2YXIgcj0wO3I8dGhpcy5mb250Q2FjaGVzLmxlbmd0aDtyKyspaWYoZT10aGlzLmZvbnRDYWNoZXNbcl0sZS5jb250ZXh0PT09dClyZXR1cm4gZTtyZXR1cm4gZT17Y29udGV4dDp0fSx0aGlzLmZvbnRDYWNoZXMucHVzaChlKSxlfTtZcC5zZXR1cFRleHRTdHlsZT1mdW5jdGlvbih0LGUpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTohMCxuPWUucHN0eWxlKCJmb250LXN0eWxlIikuc3RyVmFsdWUsaT1lLnBzdHlsZSgiZm9udC1zaXplIikucGZWYWx1ZSsicHgiLGE9ZS5wc3R5bGUoImZvbnQtZmFtaWx5Iikuc3RyVmFsdWUscz1lLnBzdHlsZSgiZm9udC13ZWlnaHQiKS5zdHJWYWx1ZSxsPXI/ZS5lZmZlY3RpdmVPcGFjaXR5KCkqZS5wc3R5bGUoInRleHQtb3BhY2l0eSIpLnZhbHVlOjEsdT1lLnBzdHlsZSgidGV4dC1vdXRsaW5lLW9wYWNpdHkiKS52YWx1ZSpsLGg9ZS5wc3R5bGUoImNvbG9yIikudmFsdWUsZj1lLnBzdHlsZSgidGV4dC1vdXRsaW5lLWNvbG9yIikudmFsdWU7dC5mb250PW4rIiAiK3MrIiAiK2krIiAiK2EsdC5saW5lSm9pbj0icm91bmQiLHRoaXMuY29sb3JGaWxsU3R5bGUodCxoWzBdLGhbMV0saFsyXSxsKSx0aGlzLmNvbG9yU3Ryb2tlU3R5bGUodCxmWzBdLGZbMV0sZlsyXSx1KX07byhSUCwicm91bmRSZWN0Iik7WXAuZ2V0VGV4dEFuZ2xlPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10Ll9wcml2YXRlLGk9bi5yc2NyYXRjaCxhPWU/ZSsiLSI6IiIscz10LnBzdHlsZShhKyJ0ZXh0LXJvdGF0aW9uIik7aWYocy5zdHJWYWx1ZT09PSJhdXRvcm90YXRlIil7dmFyIGw9R2woaSwibGFiZWxBbmdsZSIsZSk7cj10LmlzRWRnZSgpP2w6MH1lbHNlIHMuc3RyVmFsdWU9PT0ibm9uZSI/cj0wOnI9cy5wZlZhbHVlO3JldHVybiByfTtZcC5kcmF3VGV4dD1mdW5jdGlvbih0LGUscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiEwLGk9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOiEwLGE9ZS5fcHJpdmF0ZSxzPWEucnNjcmF0Y2gsbD1pP2UuZWZmZWN0aXZlT3BhY2l0eSgpOjE7aWYoIShpJiYobD09PTB8fGUucHN0eWxlKCJ0ZXh0LW9wYWNpdHkiKS52YWx1ZT09PTApKSl7cj09PSJtYWluIiYmKHI9bnVsbCk7dmFyIHU9R2wocywibGFiZWxYIixyKSxoPUdsKHMsImxhYmVsWSIsciksZixkLHA9dGhpcy5nZXRMYWJlbFRleHQoZSxyKTtpZihwIT1udWxsJiZwIT09IiImJiFpc05hTih1KSYmIWlzTmFOKGgpKXt0aGlzLnNldHVwVGV4dFN0eWxlKHQsZSxpKTt2YXIgbT1yP3IrIi0iOiIiLGc9R2wocywibGFiZWxXaWR0aCIscikseT1HbChzLCJsYWJlbEhlaWdodCIsciksdj1lLnBzdHlsZShtKyJ0ZXh0LW1hcmdpbi14IikucGZWYWx1ZSx4PWUucHN0eWxlKG0rInRleHQtbWFyZ2luLXkiKS5wZlZhbHVlLGI9ZS5pc0VkZ2UoKSx3PWUucHN0eWxlKCJ0ZXh0LWhhbGlnbiIpLnZhbHVlLEM9ZS5wc3R5bGUoInRleHQtdmFsaWduIikudmFsdWU7YiYmKHc9ImNlbnRlciIsQz0iY2VudGVyIiksdSs9dixoKz14O3ZhciBUO3N3aXRjaChuP1Q9dGhpcy5nZXRUZXh0QW5nbGUoZSxyKTpUPTAsVCE9PTAmJihmPXUsZD1oLHQudHJhbnNsYXRlKGYsZCksdC5yb3RhdGUoVCksdT0wLGg9MCksQyl7Y2FzZSJ0b3AiOmJyZWFrO2Nhc2UiY2VudGVyIjpoKz15LzI7YnJlYWs7Y2FzZSJib3R0b20iOmgrPXk7YnJlYWt9dmFyIEU9ZS5wc3R5bGUoInRleHQtYmFja2dyb3VuZC1vcGFjaXR5IikudmFsdWUsQT1lLnBzdHlsZSgidGV4dC1ib3JkZXItb3BhY2l0eSIpLnZhbHVlLFM9ZS5wc3R5bGUoInRleHQtYm9yZGVyLXdpZHRoIikucGZWYWx1ZSxfPWUucHN0eWxlKCJ0ZXh0LWJhY2tncm91bmQtcGFkZGluZyIpLnBmVmFsdWUsST1lLnBzdHlsZSgidGV4dC1iYWNrZ3JvdW5kLXNoYXBlIikuc3RyVmFsdWUsRD1JLmluZGV4T2YoInJvdW5kIik9PT0wLGs9MjtpZihFPjB8fFM+MCYmQT4wKXt2YXIgTD11LV87c3dpdGNoKHcpe2Nhc2UibGVmdCI6TC09ZzticmVhaztjYXNlImNlbnRlciI6TC09Zy8yO2JyZWFrfXZhciBSPWgteS1fLE89ZysyKl8sTT15KzIqXztpZihFPjApe3ZhciBCPXQuZmlsbFN0eWxlLEY9ZS5wc3R5bGUoInRleHQtYmFja2dyb3VuZC1jb2xvciIpLnZhbHVlO3QuZmlsbFN0eWxlPSJyZ2JhKCIrRlswXSsiLCIrRlsxXSsiLCIrRlsyXSsiLCIrRSpsKyIpIixEP1JQKHQsTCxSLE8sTSxrKTp0LmZpbGxSZWN0KEwsUixPLE0pLHQuZmlsbFN0eWxlPUJ9aWYoUz4wJiZBPjApe3ZhciBQPXQuc3Ryb2tlU3R5bGUsej10LmxpbmVXaWR0aCwkPWUucHN0eWxlKCJ0ZXh0LWJvcmRlci1jb2xvciIpLnZhbHVlLEg9ZS5wc3R5bGUoInRleHQtYm9yZGVyLXN0eWxlIikudmFsdWU7aWYodC5zdHJva2VTdHlsZT0icmdiYSgiKyRbMF0rIiwiKyRbMV0rIiwiKyRbMl0rIiwiK0EqbCsiKSIsdC5saW5lV2lkdGg9Uyx0LnNldExpbmVEYXNoKXN3aXRjaChIKXtjYXNlImRvdHRlZCI6dC5zZXRMaW5lRGFzaChbMSwxXSk7YnJlYWs7Y2FzZSJkYXNoZWQiOnQuc2V0TGluZURhc2goWzQsMl0pO2JyZWFrO2Nhc2UiZG91YmxlIjp0LmxpbmVXaWR0aD1TLzQsdC5zZXRMaW5lRGFzaChbXSk7YnJlYWs7Y2FzZSJzb2xpZCI6dC5zZXRMaW5lRGFzaChbXSk7YnJlYWt9aWYoRD9SUCh0LEwsUixPLE0saywic3Ryb2tlIik6dC5zdHJva2VSZWN0KEwsUixPLE0pLEg9PT0iZG91YmxlIil7dmFyIFE9Uy8yO0Q/UlAodCxMK1EsUitRLE8tUSoyLE0tUSoyLGssInN0cm9rZSIpOnQuc3Ryb2tlUmVjdChMK1EsUitRLE8tUSoyLE0tUSoyKX10LnNldExpbmVEYXNoJiZ0LnNldExpbmVEYXNoKFtdKSx0LmxpbmVXaWR0aD16LHQuc3Ryb2tlU3R5bGU9UH19dmFyIGo9MiplLnBzdHlsZSgidGV4dC1vdXRsaW5lLXdpZHRoIikucGZWYWx1ZTtpZihqPjAmJih0LmxpbmVXaWR0aD1qKSxlLnBzdHlsZSgidGV4dC13cmFwIikudmFsdWU9PT0id3JhcCIpe3ZhciBpZT1HbChzLCJsYWJlbFdyYXBDYWNoZWRMaW5lcyIsciksbmU9R2wocywibGFiZWxMaW5lSGVpZ2h0IixyKSxsZT1nLzIsaGU9dGhpcy5nZXRMYWJlbEp1c3RpZmljYXRpb24oZSk7c3dpdGNoKGhlPT09ImF1dG8ifHwodz09PSJsZWZ0Ij9oZT09PSJsZWZ0Ij91Kz0tZzpoZT09PSJjZW50ZXIiJiYodSs9LWxlKTp3PT09ImNlbnRlciI/aGU9PT0ibGVmdCI/dSs9LWxlOmhlPT09InJpZ2h0IiYmKHUrPWxlKTp3PT09InJpZ2h0IiYmKGhlPT09ImNlbnRlciI/dSs9bGU6aGU9PT0icmlnaHQiJiYodSs9ZykpKSxDKXtjYXNlInRvcCI6aC09KGllLmxlbmd0aC0xKSpuZTticmVhaztjYXNlImNlbnRlciI6Y2FzZSJib3R0b20iOmgtPShpZS5sZW5ndGgtMSkqbmU7YnJlYWt9Zm9yKHZhciBLPTA7SzxpZS5sZW5ndGg7SysrKWo+MCYmdC5zdHJva2VUZXh0KGllW0tdLHUsaCksdC5maWxsVGV4dChpZVtLXSx1LGgpLGgrPW5lfWVsc2Ugaj4wJiZ0LnN0cm9rZVRleHQocCx1LGgpLHQuZmlsbFRleHQocCx1LGgpO1QhPT0wJiYodC5yb3RhdGUoLVQpLHQudHJhbnNsYXRlKC1mLC1kKSl9fX07bHk9e307bHkuZHJhd05vZGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTohMCxpPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTohMCxhPWFyZ3VtZW50cy5sZW5ndGg+NSYmYXJndW1lbnRzWzVdIT09dm9pZCAwP2FyZ3VtZW50c1s1XTohMCxzPXRoaXMsbCx1LGg9ZS5fcHJpdmF0ZSxmPWgucnNjcmF0Y2gsZD1lLnBvc2l0aW9uKCk7aWYoISghQ3QoZC54KXx8IUN0KGQueSkpJiYhKGEmJiFlLnZpc2libGUoKSkpe3ZhciBwPWE/ZS5lZmZlY3RpdmVPcGFjaXR5KCk6MSxtPXMudXNlUGF0aHMoKSxnLHk9ITEsdj1lLnBhZGRpbmcoKTtsPWUud2lkdGgoKSsyKnYsdT1lLmhlaWdodCgpKzIqdjt2YXIgeDtyJiYoeD1yLHQudHJhbnNsYXRlKC14LngxLC14LnkxKSk7Zm9yKHZhciBiPWUucHN0eWxlKCJiYWNrZ3JvdW5kLWltYWdlIiksdz1iLnZhbHVlLEM9bmV3IEFycmF5KHcubGVuZ3RoKSxUPW5ldyBBcnJheSh3Lmxlbmd0aCksRT0wLEE9MDtBPHcubGVuZ3RoO0ErKyl7dmFyIFM9d1tBXSxfPUNbQV09UyE9bnVsbCYmUyE9PSJub25lIjtpZihfKXt2YXIgST1lLmN5KCkuc3R5bGUoKS5nZXRJbmRleGVkU3R5bGUoZSwiYmFja2dyb3VuZC1pbWFnZS1jcm9zc29yaWdpbiIsInZhbHVlIixBKTtFKyssVFtBXT1zLmdldENhY2hlZEltYWdlKFMsSSxmdW5jdGlvbigpe2guYmFja2dyb3VuZFRpbWVzdGFtcD1EYXRlLm5vdygpLGUuZW1pdEFuZE5vdGlmeSgiYmFja2dyb3VuZCIpfSl9fXZhciBEPWUucHN0eWxlKCJiYWNrZ3JvdW5kLWJsYWNrZW4iKS52YWx1ZSxrPWUucHN0eWxlKCJib3JkZXItd2lkdGgiKS5wZlZhbHVlLEw9ZS5wc3R5bGUoImJhY2tncm91bmQtb3BhY2l0eSIpLnZhbHVlKnAsUj1lLnBzdHlsZSgiYm9yZGVyLWNvbG9yIikudmFsdWUsTz1lLnBzdHlsZSgiYm9yZGVyLXN0eWxlIikudmFsdWUsTT1lLnBzdHlsZSgiYm9yZGVyLWpvaW4iKS52YWx1ZSxCPWUucHN0eWxlKCJib3JkZXItY2FwIikudmFsdWUsRj1lLnBzdHlsZSgiYm9yZGVyLXBvc2l0aW9uIikudmFsdWUsUD1lLnBzdHlsZSgiYm9yZGVyLWRhc2gtcGF0dGVybiIpLnBmVmFsdWUsej1lLnBzdHlsZSgiYm9yZGVyLWRhc2gtb2Zmc2V0IikucGZWYWx1ZSwkPWUucHN0eWxlKCJib3JkZXItb3BhY2l0eSIpLnZhbHVlKnAsSD1lLnBzdHlsZSgib3V0bGluZS13aWR0aCIpLnBmVmFsdWUsUT1lLnBzdHlsZSgib3V0bGluZS1jb2xvciIpLnZhbHVlLGo9ZS5wc3R5bGUoIm91dGxpbmUtc3R5bGUiKS52YWx1ZSxpZT1lLnBzdHlsZSgib3V0bGluZS1vcGFjaXR5IikudmFsdWUqcCxuZT1lLnBzdHlsZSgib3V0bGluZS1vZmZzZXQiKS52YWx1ZSxsZT1lLnBzdHlsZSgiY29ybmVyLXJhZGl1cyIpLnZhbHVlO2xlIT09ImF1dG8iJiYobGU9ZS5wc3R5bGUoImNvcm5lci1yYWRpdXMiKS5wZlZhbHVlKTt2YXIgaGU9byhmdW5jdGlvbigpe3ZhciBvZT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06TDtzLmVsZUZpbGxTdHlsZSh0LGUsb2UpfSwic2V0dXBTaGFwZUNvbG9yIiksSz1vKGZ1bmN0aW9uKCl7dmFyIG9lPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTokO3MuY29sb3JTdHJva2VTdHlsZSh0LFJbMF0sUlsxXSxSWzJdLG9lKX0sInNldHVwQm9yZGVyQ29sb3IiKSxYPW8oZnVuY3Rpb24oKXt2YXIgb2U9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOmllO3MuY29sb3JTdHJva2VTdHlsZSh0LFFbMF0sUVsxXSxRWzJdLG9lKX0sInNldHVwT3V0bGluZUNvbG9yIiksdGU9byhmdW5jdGlvbihvZSxWLHhlLHEpe3ZhciBwZT1zLm5vZGVQYXRoQ2FjaGU9cy5ub2RlUGF0aENhY2hlfHxbXSx2ZT1jbWUoeGU9PT0icG9seWdvbiI/eGUrIiwiK3Euam9pbigiLCIpOnhlLCIiK1YsIiIrb2UsIiIrbGUpLFBlPXBlW3ZlXSxfZSx3ZT0hMTtyZXR1cm4gUGUhPW51bGw/KF9lPVBlLHdlPSEwLGYucGF0aENhY2hlPV9lKTooX2U9bmV3IFBhdGgyRCxwZVt2ZV09Zi5wYXRoQ2FjaGU9X2UpLHtwYXRoOl9lLGNhY2hlSGl0OndlfX0sImdldFBhdGgiKSxKPWUucHN0eWxlKCJzaGFwZSIpLnN0clZhbHVlLHNlPWUucHN0eWxlKCJzaGFwZS1wb2x5Z29uLXBvaW50cyIpLnBmVmFsdWU7aWYobSl7dC50cmFuc2xhdGUoZC54LGQueSk7dmFyIHVlPXRlKGwsdSxKLHNlKTtnPXVlLnBhdGgseT11ZS5jYWNoZUhpdH12YXIgWj1vKGZ1bmN0aW9uKCl7aWYoIXkpe3ZhciBvZT1kO20mJihvZT17eDowLHk6MH0pLHMubm9kZVNoYXBlc1tzLmdldE5vZGVTaGFwZShlKV0uZHJhdyhnfHx0LG9lLngsb2UueSxsLHUsbGUsZil9bT90LmZpbGwoZyk6dC5maWxsKCl9LCJkcmF3U2hhcGUiKSxTZT1vKGZ1bmN0aW9uKCl7Zm9yKHZhciBvZT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06cCxWPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMCx4ZT1oLmJhY2tncm91bmRpbmcscT0wLHBlPTA7cGU8VC5sZW5ndGg7cGUrKyl7dmFyIHZlPWUuY3koKS5zdHlsZSgpLmdldEluZGV4ZWRTdHlsZShlLCJiYWNrZ3JvdW5kLWltYWdlLWNvbnRhaW5tZW50IiwidmFsdWUiLHBlKTtpZihWJiZ2ZT09PSJvdmVyInx8IVYmJnZlPT09Imluc2lkZSIpe3ErKztjb250aW51ZX1DW3BlXSYmVFtwZV0uY29tcGxldGUmJiFUW3BlXS5lcnJvciYmKHErKyxzLmRyYXdJbnNjcmliZWRJbWFnZSh0LFRbcGVdLGUscGUsb2UpKX1oLmJhY2tncm91bmRpbmc9cSE9PUUseGUhPT1oLmJhY2tncm91bmRpbmcmJmUudXBkYXRlU3R5bGUoITEpfSwiZHJhd0ltYWdlcyIpLGNlPW8oZnVuY3Rpb24oKXt2YXIgb2U9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOiExLFY9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOnA7cy5oYXNQaWUoZSkmJihzLmRyYXdQaWUodCxlLFYpLG9lJiYobXx8cy5ub2RlU2hhcGVzW3MuZ2V0Tm9kZVNoYXBlKGUpXS5kcmF3KHQsZC54LGQueSxsLHUsbGUsZikpKX0sImRyYXdQaWUiKSxhZT1vKGZ1bmN0aW9uKCl7dmFyIG9lPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTpwLFY9KEQ+MD9EOi1EKSpvZSx4ZT1EPjA/MDoyNTU7RCE9PTAmJihzLmNvbG9yRmlsbFN0eWxlKHQseGUseGUseGUsViksbT90LmZpbGwoZyk6dC5maWxsKCkpfSwiZGFya2VuIiksT2U9byhmdW5jdGlvbigpe2lmKGs+MCl7aWYodC5saW5lV2lkdGg9ayx0LmxpbmVDYXA9Qix0LmxpbmVKb2luPU0sdC5zZXRMaW5lRGFzaClzd2l0Y2goTyl7Y2FzZSJkb3R0ZWQiOnQuc2V0TGluZURhc2goWzEsMV0pO2JyZWFrO2Nhc2UiZGFzaGVkIjp0LnNldExpbmVEYXNoKFApLHQubGluZURhc2hPZmZzZXQ9ejticmVhaztjYXNlInNvbGlkIjpjYXNlImRvdWJsZSI6dC5zZXRMaW5lRGFzaChbXSk7YnJlYWt9aWYoRiE9PSJjZW50ZXIiKXtpZih0LnNhdmUoKSx0LmxpbmVXaWR0aCo9MixGPT09Imluc2lkZSIpbT90LmNsaXAoZyk6dC5jbGlwKCk7ZWxzZXt2YXIgb2U9bmV3IFBhdGgyRDtvZS5yZWN0KC1sLzItaywtdS8yLWssbCsyKmssdSsyKmspLG9lLmFkZFBhdGgoZyksdC5jbGlwKG9lLCJldmVub2RkIil9bT90LnN0cm9rZShnKTp0LnN0cm9rZSgpLHQucmVzdG9yZSgpfWVsc2UgbT90LnN0cm9rZShnKTp0LnN0cm9rZSgpO2lmKE89PT0iZG91YmxlIil7dC5saW5lV2lkdGg9ay8zO3ZhciBWPXQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uO3QuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPSJkZXN0aW5hdGlvbi1vdXQiLG0/dC5zdHJva2UoZyk6dC5zdHJva2UoKSx0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj1WfXQuc2V0TGluZURhc2gmJnQuc2V0TGluZURhc2goW10pfX0sImRyYXdCb3JkZXIiKSxnZT1vKGZ1bmN0aW9uKCl7aWYoSD4wKXtpZih0LmxpbmVXaWR0aD1ILHQubGluZUNhcD0iYnV0dCIsdC5zZXRMaW5lRGFzaClzd2l0Y2goail7Y2FzZSJkb3R0ZWQiOnQuc2V0TGluZURhc2goWzEsMV0pO2JyZWFrO2Nhc2UiZGFzaGVkIjp0LnNldExpbmVEYXNoKFs0LDJdKTticmVhaztjYXNlInNvbGlkIjpjYXNlImRvdWJsZSI6dC5zZXRMaW5lRGFzaChbXSk7YnJlYWt9dmFyIG9lPWQ7bSYmKG9lPXt4OjAseTowfSk7dmFyIFY9cy5nZXROb2RlU2hhcGUoZSkseGU9aztGPT09Imluc2lkZSImJih4ZT0wKSxGPT09Im91dHNpZGUiJiYoeGUqPTIpO3ZhciBxPShsK3hlKyhIK25lKSkvbCxwZT0odSt4ZSsoSCtuZSkpL3UsdmU9bCpxLFBlPXUqcGUsX2U9cy5ub2RlU2hhcGVzW1ZdLnBvaW50cyx3ZTtpZihtKXt2YXIgVmU9dGUodmUsUGUsVixfZSk7d2U9VmUucGF0aH1pZihWPT09ImVsbGlwc2UiKXMuZHJhd0VsbGlwc2VQYXRoKHdlfHx0LG9lLngsb2UueSx2ZSxQZSk7ZWxzZSBpZihbInJvdW5kLWRpYW1vbmQiLCJyb3VuZC1oZXB0YWdvbiIsInJvdW5kLWhleGFnb24iLCJyb3VuZC1vY3RhZ29uIiwicm91bmQtcGVudGFnb24iLCJyb3VuZC1wb2x5Z29uIiwicm91bmQtdHJpYW5nbGUiLCJyb3VuZC10YWciXS5pbmNsdWRlcyhWKSl7dmFyIERlPTAscWU9MCxhdD0wO1Y9PT0icm91bmQtZGlhbW9uZCI/RGU9KHhlK25lK0gpKjEuNDpWPT09InJvdW5kLWhlcHRhZ29uIj8oRGU9KHhlK25lK0gpKjEuMDc1LGF0PS0oeGUvMituZStIKS8zNSk6Vj09PSJyb3VuZC1oZXhhZ29uIj9EZT0oeGUrbmUrSCkqMS4xMjpWPT09InJvdW5kLXBlbnRhZ29uIj8oRGU9KHhlK25lK0gpKjEuMTMsYXQ9LSh4ZS8yK25lK0gpLzE1KTpWPT09InJvdW5kLXRhZyI/KERlPSh4ZStuZStIKSoxLjEyLHFlPSh4ZS8yK0grbmUpKi4wNyk6Vj09PSJyb3VuZC10cmlhbmdsZSImJihEZT0oeGUrbmUrSCkqKE1hdGguUEkvMiksYXQ9LSh4ZStuZS8yK0gpL01hdGguUEkpLERlIT09MCYmKHE9KGwrRGUpL2wsdmU9bCpxLFsicm91bmQtaGV4YWdvbiIsInJvdW5kLXRhZyJdLmluY2x1ZGVzKFYpfHwocGU9KHUrRGUpL3UsUGU9dSpwZSkpLGxlPWxlPT09ImF1dG8iP2JtZSh2ZSxQZSk6bGU7Zm9yKHZhciBSdD12ZS8yLHN0PVBlLzIsVWU9bGUrKHhlK0grbmUpLzIsY3Q9bmV3IEFycmF5KF9lLmxlbmd0aC8yKSxXZT1uZXcgQXJyYXkoX2UubGVuZ3RoLzIpLG90PTA7b3Q8X2UubGVuZ3RoLzI7b3QrKyljdFtvdF09e3g6b2UueCtxZStSdCpfZVtvdCoyXSx5Om9lLnkrYXQrc3QqX2Vbb3QqMisxXX07dmFyIFl0LGJ0LE10LHh0LHV0PWN0Lmxlbmd0aDtmb3IoYnQ9Y3RbdXQtMV0sWXQ9MDtZdDx1dDtZdCsrKU10PWN0W1l0JXV0XSx4dD1jdFsoWXQrMSkldXRdLFdlW1l0XT12QihidCxNdCx4dCxVZSksYnQ9TXQsTXQ9eHQ7cy5kcmF3Um91bmRQb2x5Z29uUGF0aCh3ZXx8dCxvZS54K3FlLG9lLnkrYXQsbCpxLHUqcGUsX2UsV2UpfWVsc2UgaWYoWyJyb3VuZHJlY3RhbmdsZSIsInJvdW5kLXJlY3RhbmdsZSJdLmluY2x1ZGVzKFYpKWxlPWxlPT09ImF1dG8iP1ZwKHZlLFBlKTpsZSxzLmRyYXdSb3VuZFJlY3RhbmdsZVBhdGgod2V8fHQsb2UueCxvZS55LHZlLFBlLGxlKyh4ZStIK25lKS8yKTtlbHNlIGlmKFsiY3V0cmVjdGFuZ2xlIiwiY3V0LXJlY3RhbmdsZSJdLmluY2x1ZGVzKFYpKWxlPWxlPT09ImF1dG8iP3NCKCk6bGUscy5kcmF3Q3V0UmVjdGFuZ2xlUGF0aCh3ZXx8dCxvZS54LG9lLnksdmUsUGUsbnVsbCxsZSsoeGUrSCtuZSkvNCk7ZWxzZSBpZihbImJvdHRvbXJvdW5kcmVjdGFuZ2xlIiwiYm90dG9tLXJvdW5kLXJlY3RhbmdsZSJdLmluY2x1ZGVzKFYpKWxlPWxlPT09ImF1dG8iP1ZwKHZlLFBlKTpsZSxzLmRyYXdCb3R0b21Sb3VuZFJlY3RhbmdsZVBhdGgod2V8fHQsb2UueCxvZS55LHZlLFBlLGxlKyh4ZStIK25lKS8yKTtlbHNlIGlmKFY9PT0iYmFycmVsIilzLmRyYXdCYXJyZWxQYXRoKHdlfHx0LG9lLngsb2UueSx2ZSxQZSk7ZWxzZSBpZihWLnN0YXJ0c1dpdGgoInBvbHlnb24iKXx8WyJyaG9tYm9pZCIsInJpZ2h0LXJob21ib2lkIiwicm91bmQtdGFnIiwidGFnIiwidmVlIl0uaW5jbHVkZXMoVikpe3ZhciBFdD0oeGUrSCtuZSkvbDtfZT13UyhUUyhfZSxFdCkpLHMuZHJhd1BvbHlnb25QYXRoKHdlfHx0LG9lLngsb2UueSxsLHUsX2UpfWVsc2V7dmFyIGZ0PSh4ZStIK25lKS9sO19lPXdTKFRTKF9lLC1mdCkpLHMuZHJhd1BvbHlnb25QYXRoKHdlfHx0LG9lLngsb2UueSxsLHUsX2UpfWlmKG0/dC5zdHJva2Uod2UpOnQuc3Ryb2tlKCksaj09PSJkb3VibGUiKXt0LmxpbmVXaWR0aD14ZS8zO3ZhciB5dD10Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbjt0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0iZGVzdGluYXRpb24tb3V0IixtP3Quc3Ryb2tlKHdlKTp0LnN0cm9rZSgpLHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPXl0fXQuc2V0TGluZURhc2gmJnQuc2V0TGluZURhc2goW10pfX0sImRyYXdPdXRsaW5lIiksemU9byhmdW5jdGlvbigpe2kmJnMuZHJhd05vZGVPdmVybGF5KHQsZSxkLGwsdSl9LCJkcmF3T3ZlcmxheSIpLEhlPW8oZnVuY3Rpb24oKXtpJiZzLmRyYXdOb2RlVW5kZXJsYXkodCxlLGQsbCx1KX0sImRyYXdVbmRlcmxheSIpLCRlPW8oZnVuY3Rpb24oKXtzLmRyYXdFbGVtZW50VGV4dCh0LGUsbnVsbCxuKX0sImRyYXdUZXh0IiksUmU9ZS5wc3R5bGUoImdob3N0IikudmFsdWU9PT0ieWVzIjtpZihSZSl7dmFyIEllPWUucHN0eWxlKCJnaG9zdC1vZmZzZXQteCIpLnBmVmFsdWUsYmU9ZS5wc3R5bGUoImdob3N0LW9mZnNldC15IikucGZWYWx1ZSxXPWUucHN0eWxlKCJnaG9zdC1vcGFjaXR5IikudmFsdWUsZGU9VypwO3QudHJhbnNsYXRlKEllLGJlKSxYKCksZ2UoKSxoZShXKkwpLFooKSxTZShkZSwhMCksSyhXKiQpLE9lKCksY2UoRCE9PTB8fGshPT0wKSxTZShkZSwhMSksYWUoZGUpLHQudHJhbnNsYXRlKC1JZSwtYmUpfW0mJnQudHJhbnNsYXRlKC1kLngsLWQueSksSGUoKSxtJiZ0LnRyYW5zbGF0ZShkLngsZC55KSxYKCksZ2UoKSxoZSgpLFooKSxTZShwLCEwKSxLKCksT2UoKSxjZShEIT09MHx8ayE9PTApLFNlKHAsITEpLGFlKCksbSYmdC50cmFuc2xhdGUoLWQueCwtZC55KSwkZSgpLHplKCksciYmdC50cmFuc2xhdGUoeC54MSx4LnkxKX19O0VnZT1vKGZ1bmN0aW9uKGUpe2lmKCFbIm92ZXJsYXkiLCJ1bmRlcmxheSJdLmluY2x1ZGVzKGUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdGF0ZSIpO3JldHVybiBmdW5jdGlvbihyLG4saSxhLHMpe3ZhciBsPXRoaXM7aWYobi52aXNpYmxlKCkpe3ZhciB1PW4ucHN0eWxlKCIiLmNvbmNhdChlLCItcGFkZGluZyIpKS5wZlZhbHVlLGg9bi5wc3R5bGUoIiIuY29uY2F0KGUsIi1vcGFjaXR5IikpLnZhbHVlLGY9bi5wc3R5bGUoIiIuY29uY2F0KGUsIi1jb2xvciIpKS52YWx1ZSxkPW4ucHN0eWxlKCIiLmNvbmNhdChlLCItc2hhcGUiKSkudmFsdWUscD1uLnBzdHlsZSgiIi5jb25jYXQoZSwiLWNvcm5lci1yYWRpdXMiKSkudmFsdWU7aWYoaD4wKXtpZihpPWl8fG4ucG9zaXRpb24oKSxhPT1udWxsfHxzPT1udWxsKXt2YXIgbT1uLnBhZGRpbmcoKTthPW4ud2lkdGgoKSsyKm0scz1uLmhlaWdodCgpKzIqbX1sLmNvbG9yRmlsbFN0eWxlKHIsZlswXSxmWzFdLGZbMl0saCksbC5ub2RlU2hhcGVzW2RdLmRyYXcocixpLngsaS55LGErdSoyLHMrdSoyLHApLHIuZmlsbCgpfX19fSwiZHJhd05vZGVPdmVybGF5VW5kZXJsYXkiKTtseS5kcmF3Tm9kZU92ZXJsYXk9RWdlKCJvdmVybGF5Iik7bHkuZHJhd05vZGVVbmRlcmxheT1FZ2UoInVuZGVybGF5Iik7bHkuaGFzUGllPWZ1bmN0aW9uKHQpe3JldHVybiB0PXRbMF0sdC5fcHJpdmF0ZS5oYXNQaWV9O2x5LmRyYXdQaWU9ZnVuY3Rpb24odCxlLHIsbil7ZT1lWzBdLG49bnx8ZS5wb3NpdGlvbigpO3ZhciBpPWUuY3koKS5zdHlsZSgpLGE9ZS5wc3R5bGUoInBpZS1zaXplIikscz1uLngsbD1uLnksdT1lLndpZHRoKCksaD1lLmhlaWdodCgpLGY9TWF0aC5taW4odSxoKS8yLGQ9MCxwPXRoaXMudXNlUGF0aHMoKTtwJiYocz0wLGw9MCksYS51bml0cz09PSIlIj9mPWYqYS5wZlZhbHVlOmEucGZWYWx1ZSE9PXZvaWQgMCYmKGY9YS5wZlZhbHVlLzIpO2Zvcih2YXIgbT0xO208PWkucGllQmFja2dyb3VuZE47bSsrKXt2YXIgZz1lLnBzdHlsZSgicGllLSIrbSsiLWJhY2tncm91bmQtc2l6ZSIpLnZhbHVlLHk9ZS5wc3R5bGUoInBpZS0iK20rIi1iYWNrZ3JvdW5kLWNvbG9yIikudmFsdWUsdj1lLnBzdHlsZSgicGllLSIrbSsiLWJhY2tncm91bmQtb3BhY2l0eSIpLnZhbHVlKnIseD1nLzEwMDt4K2Q+MSYmKHg9MS1kKTt2YXIgYj0xLjUqTWF0aC5QSSsyKk1hdGguUEkqZCx3PTIqTWF0aC5QSSp4LEM9Yit3O2c9PT0wfHxkPj0xfHxkK3g+MXx8KHQuYmVnaW5QYXRoKCksdC5tb3ZlVG8ocyxsKSx0LmFyYyhzLGwsZixiLEMpLHQuY2xvc2VQYXRoKCksdGhpcy5jb2xvckZpbGxTdHlsZSh0LHlbMF0seVsxXSx5WzJdLHYpLHQuZmlsbCgpLGQrPXgpfX07eXM9e30sZFplPTEwMDt5cy5nZXRQaXhlbFJhdGlvPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5kYXRhLmNvbnRleHRzWzBdO2lmKHRoaXMuZm9yY2VkUGl4ZWxSYXRpbyE9bnVsbClyZXR1cm4gdGhpcy5mb3JjZWRQaXhlbFJhdGlvO3ZhciBlPXRoaXMuY3kud2luZG93KCkscj10LmJhY2tpbmdTdG9yZVBpeGVsUmF0aW98fHQud2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpb3x8dC5tb3pCYWNraW5nU3RvcmVQaXhlbFJhdGlvfHx0Lm1zQmFja2luZ1N0b3JlUGl4ZWxSYXRpb3x8dC5vQmFja2luZ1N0b3JlUGl4ZWxSYXRpb3x8dC5iYWNraW5nU3RvcmVQaXhlbFJhdGlvfHwxO3JldHVybihlLmRldmljZVBpeGVsUmF0aW98fDEpL3J9O3lzLnBhaW50Q2FjaGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMucGFpbnRDYWNoZXM9dGhpcy5wYWludENhY2hlc3x8W10scj0hMCxuLGk9MDtpPGUubGVuZ3RoO2krKylpZihuPWVbaV0sbi5jb250ZXh0PT09dCl7cj0hMTticmVha31yZXR1cm4gciYmKG49e2NvbnRleHQ6dH0sZS5wdXNoKG4pKSxufTt5cy5jcmVhdGVHcmFkaWVudFN0eWxlRm9yPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGEscz10aGlzLnVzZVBhdGhzKCksbD1yLnBzdHlsZShlKyItZ3JhZGllbnQtc3RvcC1jb2xvcnMiKS52YWx1ZSx1PXIucHN0eWxlKGUrIi1ncmFkaWVudC1zdG9wLXBvc2l0aW9ucyIpLnBmVmFsdWU7aWYobj09PSJyYWRpYWwtZ3JhZGllbnQiKWlmKHIuaXNFZGdlKCkpe3ZhciBoPXIuc291cmNlRW5kcG9pbnQoKSxmPXIudGFyZ2V0RW5kcG9pbnQoKSxkPXIubWlkcG9pbnQoKSxwPUdwKGgsZCksbT1HcChmLGQpO2E9dC5jcmVhdGVSYWRpYWxHcmFkaWVudChkLngsZC55LDAsZC54LGQueSxNYXRoLm1heChwLG0pKX1lbHNle3ZhciBnPXM/e3g6MCx5OjB9OnIucG9zaXRpb24oKSx5PXIucGFkZGVkV2lkdGgoKSx2PXIucGFkZGVkSGVpZ2h0KCk7YT10LmNyZWF0ZVJhZGlhbEdyYWRpZW50KGcueCxnLnksMCxnLngsZy55LE1hdGgubWF4KHksdikpfWVsc2UgaWYoci5pc0VkZ2UoKSl7dmFyIHg9ci5zb3VyY2VFbmRwb2ludCgpLGI9ci50YXJnZXRFbmRwb2ludCgpO2E9dC5jcmVhdGVMaW5lYXJHcmFkaWVudCh4LngseC55LGIueCxiLnkpfWVsc2V7dmFyIHc9cz97eDowLHk6MH06ci5wb3NpdGlvbigpLEM9ci5wYWRkZWRXaWR0aCgpLFQ9ci5wYWRkZWRIZWlnaHQoKSxFPUMvMixBPVQvMixTPXIucHN0eWxlKCJiYWNrZ3JvdW5kLWdyYWRpZW50LWRpcmVjdGlvbiIpLnZhbHVlO3N3aXRjaChTKXtjYXNlInRvLWJvdHRvbSI6YT10LmNyZWF0ZUxpbmVhckdyYWRpZW50KHcueCx3LnktQSx3Lngsdy55K0EpO2JyZWFrO2Nhc2UidG8tdG9wIjphPXQuY3JlYXRlTGluZWFyR3JhZGllbnQody54LHcueStBLHcueCx3LnktQSk7YnJlYWs7Y2FzZSJ0by1sZWZ0IjphPXQuY3JlYXRlTGluZWFyR3JhZGllbnQody54K0Usdy55LHcueC1FLHcueSk7YnJlYWs7Y2FzZSJ0by1yaWdodCI6YT10LmNyZWF0ZUxpbmVhckdyYWRpZW50KHcueC1FLHcueSx3LngrRSx3LnkpO2JyZWFrO2Nhc2UidG8tYm90dG9tLXJpZ2h0IjpjYXNlInRvLXJpZ2h0LWJvdHRvbSI6YT10LmNyZWF0ZUxpbmVhckdyYWRpZW50KHcueC1FLHcueS1BLHcueCtFLHcueStBKTticmVhaztjYXNlInRvLXRvcC1yaWdodCI6Y2FzZSJ0by1yaWdodC10b3AiOmE9dC5jcmVhdGVMaW5lYXJHcmFkaWVudCh3LngtRSx3LnkrQSx3LngrRSx3LnktQSk7YnJlYWs7Y2FzZSJ0by1ib3R0b20tbGVmdCI6Y2FzZSJ0by1sZWZ0LWJvdHRvbSI6YT10LmNyZWF0ZUxpbmVhckdyYWRpZW50KHcueCtFLHcueS1BLHcueC1FLHcueStBKTticmVhaztjYXNlInRvLXRvcC1sZWZ0IjpjYXNlInRvLWxlZnQtdG9wIjphPXQuY3JlYXRlTGluZWFyR3JhZGllbnQody54K0Usdy55K0Esdy54LUUsdy55LUEpO2JyZWFrfX1pZighYSlyZXR1cm4gbnVsbDtmb3IodmFyIF89dS5sZW5ndGg9PT1sLmxlbmd0aCxJPWwubGVuZ3RoLEQ9MDtEPEk7RCsrKWEuYWRkQ29sb3JTdG9wKF8/dVtEXTpELyhJLTEpLCJyZ2JhKCIrbFtEXVswXSsiLCIrbFtEXVsxXSsiLCIrbFtEXVsyXSsiLCIraSsiKSIpO3JldHVybiBhfTt5cy5ncmFkaWVudEZpbGxTdHlsZT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLmNyZWF0ZUdyYWRpZW50U3R5bGVGb3IodCwiYmFja2dyb3VuZCIsZSxyLG4pO2lmKCFpKXJldHVybiBudWxsO3QuZmlsbFN0eWxlPWl9O3lzLmNvbG9yRmlsbFN0eWxlPWZ1bmN0aW9uKHQsZSxyLG4saSl7dC5maWxsU3R5bGU9InJnYmEoIitlKyIsIityKyIsIituKyIsIitpKyIpIn07eXMuZWxlRmlsbFN0eWxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lLnBzdHlsZSgiYmFja2dyb3VuZC1maWxsIikudmFsdWU7aWYobj09PSJsaW5lYXItZ3JhZGllbnQifHxuPT09InJhZGlhbC1ncmFkaWVudCIpdGhpcy5ncmFkaWVudEZpbGxTdHlsZSh0LGUsbixyKTtlbHNle3ZhciBpPWUucHN0eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIikudmFsdWU7dGhpcy5jb2xvckZpbGxTdHlsZSh0LGlbMF0saVsxXSxpWzJdLHIpfX07eXMuZ3JhZGllbnRTdHJva2VTdHlsZT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLmNyZWF0ZUdyYWRpZW50U3R5bGVGb3IodCwibGluZSIsZSxyLG4pO2lmKCFpKXJldHVybiBudWxsO3Quc3Ryb2tlU3R5bGU9aX07eXMuY29sb3JTdHJva2VTdHlsZT1mdW5jdGlvbih0LGUscixuLGkpe3Quc3Ryb2tlU3R5bGU9InJnYmEoIitlKyIsIityKyIsIituKyIsIitpKyIpIn07eXMuZWxlU3Ryb2tlU3R5bGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUucHN0eWxlKCJsaW5lLWZpbGwiKS52YWx1ZTtpZihuPT09ImxpbmVhci1ncmFkaWVudCJ8fG49PT0icmFkaWFsLWdyYWRpZW50Iil0aGlzLmdyYWRpZW50U3Ryb2tlU3R5bGUodCxlLG4scik7ZWxzZXt2YXIgaT1lLnBzdHlsZSgibGluZS1jb2xvciIpLnZhbHVlO3RoaXMuY29sb3JTdHJva2VTdHlsZSh0LGlbMF0saVsxXSxpWzJdLHIpfX07eXMubWF0Y2hDYW52YXNTaXplPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj1lLmRhdGEsbj1lLmZpbmRDb250YWluZXJDbGllbnRDb29yZHMoKSxpPW5bMl0sYT1uWzNdLHM9ZS5nZXRQaXhlbFJhdGlvKCksbD1lLm1vdGlvbkJsdXJQeFJhdGlvOyh0PT09ZS5kYXRhLmJ1ZmZlckNhbnZhc2VzW2UuTU9USU9OQkxVUl9CVUZGRVJfTk9ERV18fHQ9PT1lLmRhdGEuYnVmZmVyQ2FudmFzZXNbZS5NT1RJT05CTFVSX0JVRkZFUl9EUkFHXSkmJihzPWwpO3ZhciB1PWkqcyxoPWEqcyxmO2lmKCEodT09PWUuY2FudmFzV2lkdGgmJmg9PT1lLmNhbnZhc0hlaWdodCkpe2UuZm9udENhY2hlcz1udWxsO3ZhciBkPXIuY2FudmFzQ29udGFpbmVyO2Quc3R5bGUud2lkdGg9aSsicHgiLGQuc3R5bGUuaGVpZ2h0PWErInB4Ijtmb3IodmFyIHA9MDtwPGUuQ0FOVkFTX0xBWUVSUztwKyspZj1yLmNhbnZhc2VzW3BdLGYud2lkdGg9dSxmLmhlaWdodD1oLGYuc3R5bGUud2lkdGg9aSsicHgiLGYuc3R5bGUuaGVpZ2h0PWErInB4Ijtmb3IodmFyIHA9MDtwPGUuQlVGRkVSX0NPVU5UO3ArKylmPXIuYnVmZmVyQ2FudmFzZXNbcF0sZi53aWR0aD11LGYuaGVpZ2h0PWgsZi5zdHlsZS53aWR0aD1pKyJweCIsZi5zdHlsZS5oZWlnaHQ9YSsicHgiO2UudGV4dHVyZU11bHQ9MSxzPD0xJiYoZj1yLmJ1ZmZlckNhbnZhc2VzW2UuVEVYVFVSRV9CVUZGRVJdLGUudGV4dHVyZU11bHQ9MixmLndpZHRoPXUqZS50ZXh0dXJlTXVsdCxmLmhlaWdodD1oKmUudGV4dHVyZU11bHQpLGUuY2FudmFzV2lkdGg9dSxlLmNhbnZhc0hlaWdodD1oLGUucGl4ZWxSYXRpbz1zfX07eXMucmVuZGVyVG89ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5yZW5kZXIoe2ZvcmNlZENvbnRleHQ6dCxmb3JjZWRab29tOmUsZm9yY2VkUGFuOnIsZHJhd0FsbExheWVyczohMCxmb3JjZWRQeFJhdGlvOm59KX07eXMuY2xlYXJDYW52YXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dC5kYXRhO2Z1bmN0aW9uIHIobil7bi5jbGVhclJlY3QoMCwwLHQuY2FudmFzV2lkdGgsdC5jYW52YXNIZWlnaHQpfW8ociwiY2xlYXIiKSxyKGUuY29udGV4dHNbdC5OT0RFXSkscihlLmNvbnRleHRzW3QuRFJBR10pfTt5cy5yZW5kZXI9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0PXR8fGRtZSgpO3ZhciByPWUuY3ksbj10LmZvcmNlZENvbnRleHQsaT10LmRyYXdBbGxMYXllcnMsYT10LmRyYXdPbmx5Tm9kZUxheWVyLHM9dC5mb3JjZWRab29tLGw9dC5mb3JjZWRQYW4sdT10LmZvcmNlZFB4UmF0aW89PT12b2lkIDA/dGhpcy5nZXRQaXhlbFJhdGlvKCk6dC5mb3JjZWRQeFJhdGlvLGg9ZS5kYXRhLGY9aC5jYW52YXNOZWVkc1JlZHJhdyxkPWUudGV4dHVyZU9uVmlld3BvcnQmJiFuJiYoZS5waW5jaGluZ3x8ZS5ob3ZlckRhdGEuZHJhZ2dpbmd8fGUuc3dpcGVQYW5uaW5nfHxlLmRhdGEud2hlZWxab29taW5nKSxwPXQubW90aW9uQmx1ciE9PXZvaWQgMD90Lm1vdGlvbkJsdXI6ZS5tb3Rpb25CbHVyLG09ZS5tb3Rpb25CbHVyUHhSYXRpbyxnPXIuaGFzQ29tcG91bmROb2RlcygpLHk9ZS5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzLHY9ISEoZS5ob3ZlckRhdGEuc2VsZWN0aW5nfHxlLnRvdWNoRGF0YS5zZWxlY3RpbmcpO3A9cCYmIW4mJmUubW90aW9uQmx1ckVuYWJsZWQmJiF2O3ZhciB4PXA7bnx8KGUucHJldlB4UmF0aW8hPT11JiYoZS5pbnZhbGlkYXRlQ29udGFpbmVyQ2xpZW50Q29vcmRzQ2FjaGUoKSxlLm1hdGNoQ2FudmFzU2l6ZShlLmNvbnRhaW5lciksZS5yZWRyYXdIaW50KCJlbGVzIiwhMCksZS5yZWRyYXdIaW50KCJkcmFnIiwhMCkpLGUucHJldlB4UmF0aW89dSksIW4mJmUubW90aW9uQmx1clRpbWVvdXQmJmNsZWFyVGltZW91dChlLm1vdGlvbkJsdXJUaW1lb3V0KSxwJiYoZS5tYkZyYW1lcz09bnVsbCYmKGUubWJGcmFtZXM9MCksZS5tYkZyYW1lcysrLGUubWJGcmFtZXM8MyYmKHg9ITEpLGUubWJGcmFtZXM+ZS5taW5NYkxvd1F1YWxGcmFtZXMmJihlLm1vdGlvbkJsdXJQeFJhdGlvPWUubWJQeFJCbHVycnkpKSxlLmNsZWFyaW5nTW90aW9uQmx1ciYmKGUubW90aW9uQmx1clB4UmF0aW89MSksZS50ZXh0dXJlRHJhd0xhc3RGcmFtZSYmIWQmJihmW2UuTk9ERV09ITAsZltlLlNFTEVDVF9CT1hdPSEwKTt2YXIgYj1yLnN0eWxlKCksdz1yLnpvb20oKSxDPXMhPT12b2lkIDA/czp3LFQ9ci5wYW4oKSxFPXt4OlQueCx5OlQueX0sQT17em9vbTp3LHBhbjp7eDpULngseTpULnl9fSxTPWUucHJldlZpZXdwb3J0LF89Uz09PXZvaWQgMHx8QS56b29tIT09Uy56b29tfHxBLnBhbi54IT09Uy5wYW4ueHx8QS5wYW4ueSE9PVMucGFuLnk7IV8mJiEoeSYmIWcpJiYoZS5tb3Rpb25CbHVyUHhSYXRpbz0xKSxsJiYoRT1sKSxDKj11LEUueCo9dSxFLnkqPXU7dmFyIEk9ZS5nZXRDYWNoZWRaU29ydGVkRWxlcygpO2Z1bmN0aW9uIEQoSyxYLHRlLEosc2Upe3ZhciB1ZT1LLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbjtLLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0iZGVzdGluYXRpb24tb3V0IixlLmNvbG9yRmlsbFN0eWxlKEssMjU1LDI1NSwyNTUsZS5tb3Rpb25CbHVyVHJhbnNwYXJlbmN5KSxLLmZpbGxSZWN0KFgsdGUsSixzZSksSy5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249dWV9byhELCJtYmNsZWFyIik7ZnVuY3Rpb24gayhLLFgpe3ZhciB0ZSxKLHNlLHVlOyFlLmNsZWFyaW5nTW90aW9uQmx1ciYmKEs9PT1oLmJ1ZmZlckNvbnRleHRzW2UuTU9USU9OQkxVUl9CVUZGRVJfTk9ERV18fEs9PT1oLmJ1ZmZlckNvbnRleHRzW2UuTU9USU9OQkxVUl9CVUZGRVJfRFJBR10pPyh0ZT17eDpULngqbSx5OlQueSptfSxKPXcqbSxzZT1lLmNhbnZhc1dpZHRoKm0sdWU9ZS5jYW52YXNIZWlnaHQqbSk6KHRlPUUsSj1DLHNlPWUuY2FudmFzV2lkdGgsdWU9ZS5jYW52YXNIZWlnaHQpLEsuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxYPT09Im1vdGlvbkJsdXIiP0QoSywwLDAsc2UsdWUpOiFuJiYoWD09PXZvaWQgMHx8WCkmJksuY2xlYXJSZWN0KDAsMCxzZSx1ZSksaXx8KEsudHJhbnNsYXRlKHRlLngsdGUueSksSy5zY2FsZShKLEopKSxsJiZLLnRyYW5zbGF0ZShsLngsbC55KSxzJiZLLnNjYWxlKHMscyl9aWYobyhrLCJzZXRDb250ZXh0VHJhbnNmb3JtIiksZHx8KGUudGV4dHVyZURyYXdMYXN0RnJhbWU9ITEpLGQpe2lmKGUudGV4dHVyZURyYXdMYXN0RnJhbWU9ITAsIWUudGV4dHVyZUNhY2hlKXtlLnRleHR1cmVDYWNoZT17fSxlLnRleHR1cmVDYWNoZS5iYj1yLm11dGFibGVFbGVtZW50cygpLmJvdW5kaW5nQm94KCksZS50ZXh0dXJlQ2FjaGUudGV4dHVyZT1lLmRhdGEuYnVmZmVyQ2FudmFzZXNbZS5URVhUVVJFX0JVRkZFUl07dmFyIEw9ZS5kYXRhLmJ1ZmZlckNvbnRleHRzW2UuVEVYVFVSRV9CVUZGRVJdO0wuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxMLmNsZWFyUmVjdCgwLDAsZS5jYW52YXNXaWR0aCplLnRleHR1cmVNdWx0LGUuY2FudmFzSGVpZ2h0KmUudGV4dHVyZU11bHQpLGUucmVuZGVyKHtmb3JjZWRDb250ZXh0OkwsZHJhd09ubHlOb2RlTGF5ZXI6ITAsZm9yY2VkUHhSYXRpbzp1KmUudGV4dHVyZU11bHR9KTt2YXIgQT1lLnRleHR1cmVDYWNoZS52aWV3cG9ydD17em9vbTpyLnpvb20oKSxwYW46ci5wYW4oKSx3aWR0aDplLmNhbnZhc1dpZHRoLGhlaWdodDplLmNhbnZhc0hlaWdodH07QS5tcGFuPXt4OigwLUEucGFuLngpL0Euem9vbSx5OigwLUEucGFuLnkpL0Euem9vbX19ZltlLkRSQUddPSExLGZbZS5OT0RFXT0hMTt2YXIgUj1oLmNvbnRleHRzW2UuTk9ERV0sTz1lLnRleHR1cmVDYWNoZS50ZXh0dXJlLEE9ZS50ZXh0dXJlQ2FjaGUudmlld3BvcnQ7Ui5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLHA/RChSLDAsMCxBLndpZHRoLEEuaGVpZ2h0KTpSLmNsZWFyUmVjdCgwLDAsQS53aWR0aCxBLmhlaWdodCk7dmFyIE09Yi5jb3JlKCJvdXRzaWRlLXRleHR1cmUtYmctY29sb3IiKS52YWx1ZSxCPWIuY29yZSgib3V0c2lkZS10ZXh0dXJlLWJnLW9wYWNpdHkiKS52YWx1ZTtlLmNvbG9yRmlsbFN0eWxlKFIsTVswXSxNWzFdLE1bMl0sQiksUi5maWxsUmVjdCgwLDAsQS53aWR0aCxBLmhlaWdodCk7dmFyIHc9ci56b29tKCk7ayhSLCExKSxSLmNsZWFyUmVjdChBLm1wYW4ueCxBLm1wYW4ueSxBLndpZHRoL0Euem9vbS91LEEuaGVpZ2h0L0Euem9vbS91KSxSLmRyYXdJbWFnZShPLEEubXBhbi54LEEubXBhbi55LEEud2lkdGgvQS56b29tL3UsQS5oZWlnaHQvQS56b29tL3UpfWVsc2UgZS50ZXh0dXJlT25WaWV3cG9ydCYmIW4mJihlLnRleHR1cmVDYWNoZT1udWxsKTt2YXIgRj1yLmV4dGVudCgpLFA9ZS5waW5jaGluZ3x8ZS5ob3ZlckRhdGEuZHJhZ2dpbmd8fGUuc3dpcGVQYW5uaW5nfHxlLmRhdGEud2hlZWxab29taW5nfHxlLmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXN8fGUuY3kuYW5pbWF0ZWQoKSx6PWUuaGlkZUVkZ2VzT25WaWV3cG9ydCYmUCwkPVtdO2lmKCRbZS5OT0RFXT0hZltlLk5PREVdJiZwJiYhZS5jbGVhcmVkRm9yTW90aW9uQmx1cltlLk5PREVdfHxlLmNsZWFyaW5nTW90aW9uQmx1ciwkW2UuTk9ERV0mJihlLmNsZWFyZWRGb3JNb3Rpb25CbHVyW2UuTk9ERV09ITApLCRbZS5EUkFHXT0hZltlLkRSQUddJiZwJiYhZS5jbGVhcmVkRm9yTW90aW9uQmx1cltlLkRSQUddfHxlLmNsZWFyaW5nTW90aW9uQmx1ciwkW2UuRFJBR10mJihlLmNsZWFyZWRGb3JNb3Rpb25CbHVyW2UuRFJBR109ITApLGZbZS5OT0RFXXx8aXx8YXx8JFtlLk5PREVdKXt2YXIgSD1wJiYhJFtlLk5PREVdJiZtIT09MSxSPW58fChIP2UuZGF0YS5idWZmZXJDb250ZXh0c1tlLk1PVElPTkJMVVJfQlVGRkVSX05PREVdOmguY29udGV4dHNbZS5OT0RFXSksUT1wJiYhSD8ibW90aW9uQmx1ciI6dm9pZCAwO2soUixRKSx6P2UuZHJhd0NhY2hlZE5vZGVzKFIsSS5ub25kcmFnLHUsRik6ZS5kcmF3TGF5ZXJlZEVsZW1lbnRzKFIsSS5ub25kcmFnLHUsRiksZS5kZWJ1ZyYmZS5kcmF3RGVidWdQb2ludHMoUixJLm5vbmRyYWcpLCFpJiYhcCYmKGZbZS5OT0RFXT0hMSl9aWYoIWEmJihmW2UuRFJBR118fGl8fCRbZS5EUkFHXSkpe3ZhciBIPXAmJiEkW2UuRFJBR10mJm0hPT0xLFI9bnx8KEg/ZS5kYXRhLmJ1ZmZlckNvbnRleHRzW2UuTU9USU9OQkxVUl9CVUZGRVJfRFJBR106aC5jb250ZXh0c1tlLkRSQUddKTtrKFIscCYmIUg/Im1vdGlvbkJsdXIiOnZvaWQgMCksej9lLmRyYXdDYWNoZWROb2RlcyhSLEkuZHJhZyx1LEYpOmUuZHJhd0NhY2hlZEVsZW1lbnRzKFIsSS5kcmFnLHUsRiksZS5kZWJ1ZyYmZS5kcmF3RGVidWdQb2ludHMoUixJLmRyYWcpLCFpJiYhcCYmKGZbZS5EUkFHXT0hMSl9aWYodGhpcy5kcmF3U2VsZWN0aW9uUmVjdGFuZ2xlKHQsaykscCYmbSE9PTEpe3ZhciBqPWguY29udGV4dHNbZS5OT0RFXSxpZT1lLmRhdGEuYnVmZmVyQ2FudmFzZXNbZS5NT1RJT05CTFVSX0JVRkZFUl9OT0RFXSxuZT1oLmNvbnRleHRzW2UuRFJBR10sbGU9ZS5kYXRhLmJ1ZmZlckNhbnZhc2VzW2UuTU9USU9OQkxVUl9CVUZGRVJfRFJBR10saGU9byhmdW5jdGlvbihYLHRlLEope1guc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxKfHwheD9YLmNsZWFyUmVjdCgwLDAsZS5jYW52YXNXaWR0aCxlLmNhbnZhc0hlaWdodCk6RChYLDAsMCxlLmNhbnZhc1dpZHRoLGUuY2FudmFzSGVpZ2h0KTt2YXIgc2U9bTtYLmRyYXdJbWFnZSh0ZSwwLDAsZS5jYW52YXNXaWR0aCpzZSxlLmNhbnZhc0hlaWdodCpzZSwwLDAsZS5jYW52YXNXaWR0aCxlLmNhbnZhc0hlaWdodCl9LCJkcmF3TW90aW9uQmx1ciIpOyhmW2UuTk9ERV18fCRbZS5OT0RFXSkmJihoZShqLGllLCRbZS5OT0RFXSksZltlLk5PREVdPSExKSwoZltlLkRSQUddfHwkW2UuRFJBR10pJiYoaGUobmUsbGUsJFtlLkRSQUddKSxmW2UuRFJBR109ITEpfWUucHJldlZpZXdwb3J0PUEsZS5jbGVhcmluZ01vdGlvbkJsdXImJihlLmNsZWFyaW5nTW90aW9uQmx1cj0hMSxlLm1vdGlvbkJsdXJDbGVhcmVkPSEwLGUubW90aW9uQmx1cj0hMCkscCYmKGUubW90aW9uQmx1clRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe2UubW90aW9uQmx1clRpbWVvdXQ9bnVsbCxlLmNsZWFyZWRGb3JNb3Rpb25CbHVyW2UuTk9ERV09ITEsZS5jbGVhcmVkRm9yTW90aW9uQmx1cltlLkRSQUddPSExLGUubW90aW9uQmx1cj0hMSxlLmNsZWFyaW5nTW90aW9uQmx1cj0hZCxlLm1iRnJhbWVzPTAsZltlLk5PREVdPSEwLGZbZS5EUkFHXT0hMCxlLnJlZHJhdygpfSxkWmUpKSxufHxyLmVtaXQoInJlbmRlciIpfTt5cy5kcmF3U2VsZWN0aW9uUmVjdGFuZ2xlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxuPXIuY3ksaT1yLmRhdGEsYT1uLnN0eWxlKCkscz10LmRyYXdPbmx5Tm9kZUxheWVyLGw9dC5kcmF3QWxsTGF5ZXJzLHU9aS5jYW52YXNOZWVkc1JlZHJhdyxoPXQuZm9yY2VkQ29udGV4dDtpZihyLnNob3dGcHN8fCFzJiZ1W3IuU0VMRUNUX0JPWF0mJiFsKXt2YXIgZj1ofHxpLmNvbnRleHRzW3IuU0VMRUNUX0JPWF07aWYoZShmKSxyLnNlbGVjdGlvbls0XT09MSYmKHIuaG92ZXJEYXRhLnNlbGVjdGluZ3x8ci50b3VjaERhdGEuc2VsZWN0aW5nKSl7dmFyIGQ9ci5jeS56b29tKCkscD1hLmNvcmUoInNlbGVjdGlvbi1ib3gtYm9yZGVyLXdpZHRoIikudmFsdWUvZDtmLmxpbmVXaWR0aD1wLGYuZmlsbFN0eWxlPSJyZ2JhKCIrYS5jb3JlKCJzZWxlY3Rpb24tYm94LWNvbG9yIikudmFsdWVbMF0rIiwiK2EuY29yZSgic2VsZWN0aW9uLWJveC1jb2xvciIpLnZhbHVlWzFdKyIsIithLmNvcmUoInNlbGVjdGlvbi1ib3gtY29sb3IiKS52YWx1ZVsyXSsiLCIrYS5jb3JlKCJzZWxlY3Rpb24tYm94LW9wYWNpdHkiKS52YWx1ZSsiKSIsZi5maWxsUmVjdChyLnNlbGVjdGlvblswXSxyLnNlbGVjdGlvblsxXSxyLnNlbGVjdGlvblsyXS1yLnNlbGVjdGlvblswXSxyLnNlbGVjdGlvblszXS1yLnNlbGVjdGlvblsxXSkscD4wJiYoZi5zdHJva2VTdHlsZT0icmdiYSgiK2EuY29yZSgic2VsZWN0aW9uLWJveC1ib3JkZXItY29sb3IiKS52YWx1ZVswXSsiLCIrYS5jb3JlKCJzZWxlY3Rpb24tYm94LWJvcmRlci1jb2xvciIpLnZhbHVlWzFdKyIsIithLmNvcmUoInNlbGVjdGlvbi1ib3gtYm9yZGVyLWNvbG9yIikudmFsdWVbMl0rIiwiK2EuY29yZSgic2VsZWN0aW9uLWJveC1vcGFjaXR5IikudmFsdWUrIikiLGYuc3Ryb2tlUmVjdChyLnNlbGVjdGlvblswXSxyLnNlbGVjdGlvblsxXSxyLnNlbGVjdGlvblsyXS1yLnNlbGVjdGlvblswXSxyLnNlbGVjdGlvblszXS1yLnNlbGVjdGlvblsxXSkpfWlmKGkuYmdBY3RpdmVQb3Npc3Rpb24mJiFyLmhvdmVyRGF0YS5zZWxlY3Rpbmcpe3ZhciBkPXIuY3kuem9vbSgpLG09aS5iZ0FjdGl2ZVBvc2lzdGlvbjtmLmZpbGxTdHlsZT0icmdiYSgiK2EuY29yZSgiYWN0aXZlLWJnLWNvbG9yIikudmFsdWVbMF0rIiwiK2EuY29yZSgiYWN0aXZlLWJnLWNvbG9yIikudmFsdWVbMV0rIiwiK2EuY29yZSgiYWN0aXZlLWJnLWNvbG9yIikudmFsdWVbMl0rIiwiK2EuY29yZSgiYWN0aXZlLWJnLW9wYWNpdHkiKS52YWx1ZSsiKSIsZi5iZWdpblBhdGgoKSxmLmFyYyhtLngsbS55LGEuY29yZSgiYWN0aXZlLWJnLXNpemUiKS5wZlZhbHVlL2QsMCwyKk1hdGguUEkpLGYuZmlsbCgpfXZhciBnPXIubGFzdFJlZHJhd1RpbWU7aWYoci5zaG93RnBzJiZnKXtnPU1hdGgucm91bmQoZyk7dmFyIHk9TWF0aC5yb3VuZCgxZTMvZyksdj0iMSBmcmFtZSA9ICIrZysiIG1zID0gIit5KyIgZnBzIjtpZihmLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksZi5maWxsU3R5bGU9InJnYmEoMjU1LCAwLCAwLCAwLjc1KSIsZi5zdHJva2VTdHlsZT0icmdiYSgyNTUsIDAsIDAsIDAuNzUpIixmLmZvbnQ9IjMwcHggQXJpYWwiLCFOYil7dmFyIHg9Zi5tZWFzdXJlVGV4dCh2KTtOYj14LmFjdHVhbEJvdW5kaW5nQm94QXNjZW50fWYuZmlsbFRleHQodiwwLE5iKTt2YXIgYj02MDtmLnN0cm9rZVJlY3QoMCxOYisxMCwyNTAsMjApLGYuZmlsbFJlY3QoMCxOYisxMCwyNTAqTWF0aC5taW4oeS9iLDEpLDIwKX1sfHwodVtyLlNFTEVDVF9CT1hdPSExKX19O28oejBlLCJjb21waWxlU2hhZGVyIik7byhwWmUsImNyZWF0ZVByb2dyYW0iKTtvKG1aZSwiY3JlYXRlVGV4dHVyZUNhbnZhcyIpO28od0IsImdldEVmZmVjdGl2ZVBhblpvb20iKTtvKE5QLCJtb2RlbFRvUmVuZGVyZWRQb3NpdGlvbiIpO28ob1MsInRvV2ViR0xDb2xvciIpO28obFMsImluZGV4VG9WZWM0Iik7byhnWmUsInZlYzRUb0luZGV4Iik7byh5WmUsImNyZWF0ZVRleHR1cmUiKTtvKFNnZSwiZ2V0VHlwZUluZm8iKTtvKENnZSwiY3JlYXRlVHlwZWRBcnJheSIpO28odlplLCJjcmVhdGVUeXBlZEFycmF5VmlldyIpO28oeFplLCJjcmVhdGVCdWZmZXJTdGF0aWNEcmF3Iik7byhwbywiY3JlYXRlQnVmZmVyRHluYW1pY0RyYXciKTtvKGJaZSwiY3JlYXRlUGlja2luZ0ZyYW1lQnVmZmVyIik7RzBlPXR5cGVvZiBGbG9hdDMyQXJyYXk8InUiP0Zsb2F0MzJBcnJheTpBcnJheTtNYXRoLmh5cG90fHwoTWF0aC5oeXBvdD1mdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9YXJndW1lbnRzLmxlbmd0aDtlLS07KXQrPWFyZ3VtZW50c1tlXSphcmd1bWVudHNbZV07cmV0dXJuIE1hdGguc3FydCh0KX0pO28oR2IsImNyZWF0ZSIpO28oQWdlLCJpZGVudGl0eSIpO28od1plLCJtdWx0aXBseSIpO28oRFMsInRyYW5zbGF0ZSIpO28oX2dlLCJyb3RhdGUiKTtvKFRCLCJzY2FsZSIpO28oVFplLCJwcm9qZWN0aW9uIik7VmI9e1NDUkVFTjp7bmFtZToic2NyZWVuIixzY3JlZW46ITB9LFBJQ0tJTkc6e25hbWU6InBpY2tpbmciLHBpY2tpbmc6ITB9fSxNYj1sYSh7Z2V0S2V5Om51bGwsZHJhd0VsZW1lbnQ6bnVsbCxnZXRCb3VuZGluZ0JveDpudWxsLGdldFJvdGF0aW9uOm51bGwsZ2V0Um90YXRpb25Qb2ludDpudWxsLGdldFJvdGF0aW9uT2Zmc2V0Om51bGwsaXNWaXNpYmxlOm51bGwsZ2V0UGFkZGluZzpudWxsfSksa1plPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIpe01mKHRoaXMsdCksdGhpcy5kZWJ1Z0lEPU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoxZTQpLHRoaXMucj1lLHRoaXMuYXRsYXNTaXplPXIud2ViZ2xUZXhTaXplLHRoaXMucm93cz1yLndlYmdsVGV4Um93cyx0aGlzLmVuYWJsZVdyYXBwaW5nPXIuZW5hYmxlV3JhcHBpbmcsdGhpcy50ZXhIZWlnaHQ9TWF0aC5mbG9vcih0aGlzLmF0bGFzU2l6ZS90aGlzLnJvd3MpLHRoaXMubWF4VGV4V2lkdGg9dGhpcy5hdGxhc1NpemUsdGhpcy50ZXh0dXJlPW51bGwsdGhpcy5jYW52YXM9bnVsbCx0aGlzLm5lZWRzQnVmZmVyPSEwLHRoaXMuZnJlZVBvaW50ZXI9e3g6MCxyb3c6MH0sdGhpcy5rZXlUb0xvY2F0aW9uPW5ldyBNYXAsdGhpcy5jYW52YXM9ci5jcmVhdGVUZXh0dXJlQ2FudmFzKGUsdGhpcy5hdGxhc1NpemUsdGhpcy5hdGxhc1NpemUpLHRoaXMuc2NyYXRjaD1yLmNyZWF0ZVRleHR1cmVDYW52YXMoZSx0aGlzLmF0bGFzU2l6ZSx0aGlzLnRleEhlaWdodCwic2NyYXRjaCIpfXJldHVybiBvKHQsIkF0bGFzIiksSWYodCxbe2tleToiZ2V0S2V5cyIsdmFsdWU6byhmdW5jdGlvbigpe3JldHVybiBuZXcgU2V0KHRoaXMua2V5VG9Mb2NhdGlvbi5rZXlzKCkpfSwiZ2V0S2V5cyIpfSx7a2V5OiJnZXRTY2FsZSIsdmFsdWU6byhmdW5jdGlvbihyKXt2YXIgbj1yLncsaT1yLmgsYT10aGlzLnRleEhlaWdodCxzPXRoaXMubWF4VGV4V2lkdGgsbD1hL2ksdT1uKmwsaD1pKmw7cmV0dXJuIHU+cyYmKGw9cy9uLHU9bipsLGg9aSpsKSx7c2NhbGU6bCx0ZXhXOnUsdGV4SDpofX0sImdldFNjYWxlIil9LHtrZXk6ImRyYXciLHZhbHVlOm8oZnVuY3Rpb24ocixuLGkpe3ZhciBhPXRoaXMscz10aGlzLmF0bGFzU2l6ZSxsPXRoaXMucm93cyx1PXRoaXMudGV4SGVpZ2h0LGg9dGhpcy5nZXRTY2FsZShuKSxmPWguc2NhbGUsZD1oLnRleFcscD1oLnRleEgsbT1bbnVsbCxudWxsXSxnPW8oZnVuY3Rpb24odyxDKXtpZihpJiZDKXt2YXIgVD1DLmNvbnRleHQsRT13LngsQT13LnJvdyxTPUUsXz11KkE7VC5zYXZlKCksVC50cmFuc2xhdGUoUyxfKSxULnNjYWxlKGYsZiksaShULG4pLFQucmVzdG9yZSgpfX0sImRyYXdBdCIpLHk9byhmdW5jdGlvbigpe2coYS5mcmVlUG9pbnRlcixhLmNhbnZhcyksbVswXT17eDphLmZyZWVQb2ludGVyLngseTphLmZyZWVQb2ludGVyLnJvdyp1LHc6ZCxoOnB9LG1bMV09e3g6YS5mcmVlUG9pbnRlci54K2QseTphLmZyZWVQb2ludGVyLnJvdyp1LHc6MCxoOnB9LGEuZnJlZVBvaW50ZXIueCs9ZCxhLmZyZWVQb2ludGVyLng9PXMmJihhLmZyZWVQb2ludGVyLng9MCxhLmZyZWVQb2ludGVyLnJvdysrKX0sImRyYXdOb3JtYWwiKSx2PW8oZnVuY3Rpb24oKXt2YXIgdz1hLnNjcmF0Y2gsQz1hLmNhbnZhczt3LmNsZWFyKCksZyh7eDowLHJvdzowfSx3KTt2YXIgVD1zLWEuZnJlZVBvaW50ZXIueCxFPWQtVCxBPXU7e3ZhciBTPWEuZnJlZVBvaW50ZXIueCxfPWEuZnJlZVBvaW50ZXIucm93KnUsST1UO0MuY29udGV4dC5kcmF3SW1hZ2UodywwLDAsSSxBLFMsXyxJLEEpLG1bMF09e3g6Uyx5Ol8sdzpJLGg6cH19e3ZhciBEPVQsaz0oYS5mcmVlUG9pbnRlci5yb3crMSkqdSxMPUU7QyYmQy5jb250ZXh0LmRyYXdJbWFnZSh3LEQsMCxMLEEsMCxrLEwsQSksbVsxXT17eDowLHk6ayx3OkwsaDpwfX1hLmZyZWVQb2ludGVyLng9RSxhLmZyZWVQb2ludGVyLnJvdysrfSwiZHJhd1dyYXBwZWQiKSx4PW8oZnVuY3Rpb24oKXthLmZyZWVQb2ludGVyLng9MCxhLmZyZWVQb2ludGVyLnJvdysrfSwibW92ZVRvU3RhcnRPZk5leHRSb3ciKTtpZih0aGlzLmZyZWVQb2ludGVyLngrZDw9cyl5KCk7ZWxzZXtpZih0aGlzLmZyZWVQb2ludGVyLnJvdz49bC0xKXJldHVybiExO3RoaXMuZnJlZVBvaW50ZXIueD09PXM/KHgoKSx5KCkpOnRoaXMuZW5hYmxlV3JhcHBpbmc/digpOih4KCkseSgpKX1yZXR1cm4gdGhpcy5rZXlUb0xvY2F0aW9uLnNldChyLG0pLHRoaXMubmVlZHNCdWZmZXI9ITAsbX0sImRyYXciKX0se2tleToiZ2V0T2Zmc2V0cyIsdmFsdWU6byhmdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5rZXlUb0xvY2F0aW9uLmdldChyKX0sImdldE9mZnNldHMiKX0se2tleToiaXNFbXB0eSIsdmFsdWU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmZyZWVQb2ludGVyLng9PT0wJiZ0aGlzLmZyZWVQb2ludGVyLnJvdz09PTB9LCJpc0VtcHR5Iil9LHtrZXk6ImNhbkZpdCIsdmFsdWU6byhmdW5jdGlvbihyKXt2YXIgbj10aGlzLmF0bGFzU2l6ZSxpPXRoaXMucm93cyxhPXRoaXMuZ2V0U2NhbGUocikscz1hLnRleFc7cmV0dXJuIHRoaXMuZnJlZVBvaW50ZXIueCtzPm4/dGhpcy5mcmVlUG9pbnRlci5yb3c8aS0xOiEwfSwiY2FuRml0Iil9LHtrZXk6ImJ1ZmZlcklmTmVlZGVkIix2YWx1ZTpvKGZ1bmN0aW9uKHIpe3RoaXMudGV4dHVyZXx8KHRoaXMudGV4dHVyZT15WmUocix0aGlzLmRlYnVnSUQpKSx0aGlzLm5lZWRzQnVmZmVyJiYodGhpcy50ZXh0dXJlLmJ1ZmZlcih0aGlzLmNhbnZhcyksdGhpcy5uZWVkc0J1ZmZlcj0hMSl9LCJidWZmZXJJZk5lZWRlZCIpfSx7a2V5OiJkaXNwb3NlIix2YWx1ZTpvKGZ1bmN0aW9uKCl7dGhpcy50ZXh0dXJlJiYodGhpcy50ZXh0dXJlLmRlbGV0ZVRleHR1cmUoKSx0aGlzLnRleHR1cmU9bnVsbCx0aGlzLm5lZWRzQnVmZmVyPSEwKX0sImRpc3Bvc2UiKX1dKSx0fSgpLEVaZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxyKXtNZih0aGlzLHQpLHRoaXMucj1lLHRoaXMub3B0cz1yLHRoaXMua2V5VG9JZHM9bmV3IE1hcCx0aGlzLmlkVG9LZXk9bmV3IE1hcCx0aGlzLmF0bGFzZXM9W10sdGhpcy5zdHlsZUtleVRvQXRsYXM9bmV3IE1hcCx0aGlzLnN0eWxlS2V5TmVlZHNSZWRyYXc9bmV3IFNldCx0aGlzLmZvcmNlR0M9ITF9cmV0dXJuIG8odCwiQXRsYXNDb2xsZWN0aW9uIiksSWYodCxbe2tleToiZ2V0S2V5cyIsdmFsdWU6byhmdW5jdGlvbigpe3JldHVybiBuZXcgU2V0KHRoaXMuc3R5bGVLZXlUb0F0bGFzLmtleXMoKSl9LCJnZXRLZXlzIil9LHtrZXk6ImdldElkc0ZvciIsdmFsdWU6byhmdW5jdGlvbihyKXt2YXIgbj10aGlzLmtleVRvSWRzLmdldChyKTtyZXR1cm4gbnx8KG49bmV3IFNldCx0aGlzLmtleVRvSWRzLnNldChyLG4pKSxufSwiZ2V0SWRzRm9yIil9LHtrZXk6Il9jcmVhdGVBdGxhcyIsdmFsdWU6byhmdW5jdGlvbigpe3ZhciByPXRoaXMucixuPXRoaXMub3B0cztyZXR1cm4gbmV3IGtaZShyLG4pfSwiX2NyZWF0ZUF0bGFzIil9LHtrZXk6Il9nZXRTY3JhdGNoQ2FudmFzIix2YWx1ZTpvKGZ1bmN0aW9uKCl7aWYoIXRoaXMuc2NyYXRjaCl7dmFyIHI9dGhpcy5yLG49dGhpcy5vcHRzLGk9bi53ZWJnbFRleFNpemUsYT1NYXRoLmZsb29yKGkvbi53ZWJnbFRleFJvd3MpO3RoaXMuc2NyYXRjaD1uLmNyZWF0ZVRleHR1cmVDYW52YXMocixpLGEsInNjcmF0Y2giKX1yZXR1cm4gdGhpcy5zY3JhdGNofSwiX2dldFNjcmF0Y2hDYW52YXMiKX0se2tleToiZHJhdyIsdmFsdWU6byhmdW5jdGlvbihyLG4saSxhKXtpZih0aGlzLnN0eWxlS2V5TmVlZHNSZWRyYXcuaGFzKG4pKXt0aGlzLnN0eWxlS2V5TmVlZHNSZWRyYXcuZGVsZXRlKG4pLHRoaXMuZGVsZXRlS2V5KHIsbik7dmFyIHM9dGhpcy5zdHlsZUtleVRvQXRsYXMuZ2V0KG4pO3MmJihzLmZvcmNlR0M9ITApLHRoaXMuc3R5bGVLZXlUb0F0bGFzLmRlbGV0ZShuKX12YXIgbD10aGlzLnN0eWxlS2V5VG9BdGxhcy5nZXQobik7cmV0dXJuIGx8fChsPXRoaXMuYXRsYXNlc1t0aGlzLmF0bGFzZXMubGVuZ3RoLTFdLCghbHx8IWwuY2FuRml0KGkpKSYmKGw9dGhpcy5fY3JlYXRlQXRsYXMoKSx0aGlzLmF0bGFzZXMucHVzaChsKSksbC5kcmF3KG4saSxhKSx0aGlzLnN0eWxlS2V5VG9BdGxhcy5zZXQobixsKSx0aGlzLmdldElkc0ZvcihuKS5hZGQociksdGhpcy5pZFRvS2V5LnNldChyLG4pKSxsfSwiZHJhdyIpfSx7a2V5OiJnZXRBdGxhcyIsdmFsdWU6byhmdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5zdHlsZUtleVRvQXRsYXMuZ2V0KHIpfSwiZ2V0QXRsYXMiKX0se2tleToiaGFzQXRsYXMiLHZhbHVlOm8oZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuc3R5bGVLZXlUb0F0bGFzLmhhcyhyKX0sImhhc0F0bGFzIil9LHtrZXk6ImRlbGV0ZUtleSIsdmFsdWU6byhmdW5jdGlvbihyLG4pe3RoaXMuaWRUb0tleS5kZWxldGUociksdGhpcy5nZXRJZHNGb3IobikuZGVsZXRlKHIpfSwiZGVsZXRlS2V5Iil9LHtrZXk6ImNoZWNrS2V5SXNJbnZhbGlkIix2YWx1ZTpvKGZ1bmN0aW9uKHIsbil7aWYoIXRoaXMuaWRUb0tleS5oYXMocikpcmV0dXJuITE7dmFyIGk9dGhpcy5pZFRvS2V5LmdldChyKTtyZXR1cm4gaSE9bj8odGhpcy5kZWxldGVLZXkocixpKSwhMCk6ITF9LCJjaGVja0tleUlzSW52YWxpZCIpfSx7a2V5OiJfZ2V0S2V5c1RvQ29sbGVjdCIsdmFsdWU6byhmdW5jdGlvbigpe3ZhciByPW5ldyBTZXQsbj1tbyh0aGlzLnN0eWxlS2V5VG9BdGxhcy5rZXlzKCkpLGk7dHJ5e2ZvcihuLnMoKTshKGk9bi5uKCkpLmRvbmU7KXt2YXIgYT1pLnZhbHVlO3RoaXMuZ2V0SWRzRm9yKGEpLnNpemU9PTAmJnIuYWRkKGEpfX1jYXRjaChzKXtuLmUocyl9ZmluYWxseXtuLmYoKX1yZXR1cm4gcn0sIl9nZXRLZXlzVG9Db2xsZWN0Iil9LHtrZXk6ImdjIix2YWx1ZTpvKGZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPXRoaXMuYXRsYXNlcy5zb21lKGZ1bmN0aW9uKHApe3JldHVybiBwLmZvcmNlR0N9KSxpPXRoaXMuX2dldEtleXNUb0NvbGxlY3QoKTtpZihpLnNpemU9PT0wJiYhbil7Y29uc29sZS5sb2coIm5vdGhpbmcgdG8gZ2FyYmFnZSBjb2xsZWN0Iik7cmV0dXJufXZhciBhPVtdLHM9bmV3IE1hcCxsPW51bGwsdT1tbyh0aGlzLmF0bGFzZXMpLGg7dHJ5e3ZhciBmPW8oZnVuY3Rpb24oKXt2YXIgbT1oLnZhbHVlLGc9bS5nZXRLZXlzKCkseT1TWmUoaSxnKTtpZih5LnNpemU9PT0wJiYhbS5mb3JjZUdDKXJldHVybiBhLnB1c2gobSksZy5mb3JFYWNoKGZ1bmN0aW9uKEEpe3JldHVybiBzLnNldChBLG0pfSksImNvbnRpbnVlIjtsfHwobD1yLl9jcmVhdGVBdGxhcygpLGEucHVzaChsKSk7dmFyIHY9bW8oZykseDt0cnl7Zm9yKHYucygpOyEoeD12Lm4oKSkuZG9uZTspe3ZhciBiPXgudmFsdWU7aWYoIXkuaGFzKGIpKXt2YXIgdz1tLmdldE9mZnNldHMoYiksQz1faSh3LDIpLFQ9Q1swXSxFPUNbMV07bC5jYW5GaXQoe3c6VC53K0UudyxoOlQuaH0pfHwobD1yLl9jcmVhdGVBdGxhcygpLGEucHVzaChsKSksci5fY29weVRleHR1cmVUb05ld0F0bGFzKGIsbSxsKSxzLnNldChiLGwpfX19Y2F0Y2goQSl7di5lKEEpfWZpbmFsbHl7di5mKCl9fSwiX2xvb3AiKTtmb3IodS5zKCk7IShoPXUubigpKS5kb25lOyl2YXIgZD1mKCl9Y2F0Y2gocCl7dS5lKHApfWZpbmFsbHl7dS5mKCl9dGhpcy5hdGxhc2VzPWEsdGhpcy5zdHlsZUtleVRvQXRsYXM9c30sImdjIil9LHtrZXk6Il9jb3B5VGV4dHVyZVRvTmV3QXRsYXMiLHZhbHVlOm8oZnVuY3Rpb24ocixuLGkpe3ZhciBhPW4uZ2V0T2Zmc2V0cyhyKSxzPV9pKGEsMiksbD1zWzBdLHU9c1sxXTtpZih1Lnc9PT0wKWkuZHJhdyhyLGwsZnVuY3Rpb24ocCl7cC5kcmF3SW1hZ2Uobi5jYW52YXMsbC54LGwueSxsLncsbC5oLDAsMCxsLncsbC5oKX0pO2Vsc2V7dmFyIGg9dGhpcy5fZ2V0U2NyYXRjaENhbnZhcygpO2guY2xlYXIoKSxoLmNvbnRleHQuZHJhd0ltYWdlKG4uY2FudmFzLGwueCxsLnksbC53LGwuaCwwLDAsbC53LGwuaCksaC5jb250ZXh0LmRyYXdJbWFnZShuLmNhbnZhcyx1LngsdS55LHUudyx1LmgsbC53LDAsdS53LHUuaCk7dmFyIGY9bC53K3UudyxkPWwuaDtpLmRyYXcocix7dzpmLGg6ZH0sZnVuY3Rpb24ocCl7cC5kcmF3SW1hZ2UoaCwwLDAsZixkLDAsMCxmLGQpfSl9fSwiX2NvcHlUZXh0dXJlVG9OZXdBdGxhcyIpfSx7a2V5OiJnZXRDb3VudHMiLHZhbHVlOm8oZnVuY3Rpb24oKXtyZXR1cm57a2V5Q291bnQ6dGhpcy5zdHlsZUtleVRvQXRsYXMuc2l6ZSxhdGxhc0NvdW50Om5ldyBTZXQodGhpcy5zdHlsZUtleVRvQXRsYXMudmFsdWVzKCkpLnNpemV9fSwiZ2V0Q291bnRzIil9XSksdH0oKTtvKFNaZSwiaW50ZXJzZWN0aW9uIik7Q1plPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIpe01mKHRoaXMsdCksdGhpcy5yPWU7dmFyIG49cjt0aGlzLmdsb2JhbE9wdGlvbnM9bix0aGlzLm1heEF0bGFzZXM9bi53ZWJnbFRleFBlckJhdGNoLHRoaXMuYXRsYXNTaXplPW4ud2ViZ2xUZXhTaXplLHRoaXMucmVuZGVyVHlwZXM9bmV3IE1hcCx0aGlzLm1heEF0bGFzZXNQZXJCYXRjaD1yLndlYmdsVGV4UGVyQmF0Y2gsdGhpcy5iYXRjaEF0bGFzZXM9W10sdGhpcy5fY2FjaGVTY3JhdGNoQ2FudmFzKG4pfXJldHVybiBvKHQsIkF0bGFzTWFuYWdlciIpLElmKHQsW3trZXk6Il9jYWNoZVNjcmF0Y2hDYW52YXMiLHZhbHVlOm8oZnVuY3Rpb24ocil7dmFyIG49LTEsaT0tMSxhPW51bGwscz1yLmNyZWF0ZVRleHR1cmVDYW52YXM7ci5jcmVhdGVUZXh0dXJlQ2FudmFzPWZ1bmN0aW9uKGwsdSxoLGYpe3JldHVybiBmPygoIWF8fHUhPW58fGghPWkpJiYobj11LGk9aCxhPXMobCx1LGgpKSxhKTpzKGwsdSxoKX19LCJfY2FjaGVTY3JhdGNoQ2FudmFzIil9LHtrZXk6ImFkZFJlbmRlclR5cGUiLHZhbHVlOm8oZnVuY3Rpb24ocixuKXt2YXIgaT1uZXcgRVplKHRoaXMucix0aGlzLmdsb2JhbE9wdGlvbnMpLGE9bjt0aGlzLnJlbmRlclR5cGVzLnNldChyLHJyKHt0eXBlOnIsYXRsYXNDb2xsZWN0aW9uOml9LGEpKX0sImFkZFJlbmRlclR5cGUiKX0se2tleToiZ2V0UmVuZGVyVHlwZXMiLHZhbHVlOm8oZnVuY3Rpb24oKXtyZXR1cm4gajBlKHRoaXMucmVuZGVyVHlwZXMudmFsdWVzKCkpfSwiZ2V0UmVuZGVyVHlwZXMiKX0se2tleToiZ2V0UmVuZGVyVHlwZU9wdHMiLHZhbHVlOm8oZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMucmVuZGVyVHlwZXMuZ2V0KHIpfSwiZ2V0UmVuZGVyVHlwZU9wdHMiKX0se2tleToiaW52YWxpZGF0ZSIsdmFsdWU6byhmdW5jdGlvbihyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06e30saT1uLmZvcmNlUmVkcmF3LGE9aT09PXZvaWQgMD8hMTppLHM9bi5maWx0ZXJFbGUsbD1zPT09dm9pZCAwP2Z1bmN0aW9uKCl7cmV0dXJuITB9OnMsdT1uLmZpbHRlclR5cGUsaD11PT09dm9pZCAwP2Z1bmN0aW9uKCl7cmV0dXJuITB9OnUsZj0hMSxkPW1vKHIpLHA7dHJ5e2ZvcihkLnMoKTshKHA9ZC5uKCkpLmRvbmU7KXt2YXIgbT1wLnZhbHVlO2lmKGwobSkpe3ZhciBnPW0uaWQoKSx5PW1vKHRoaXMuZ2V0UmVuZGVyVHlwZXMoKSksdjt0cnl7Zm9yKHkucygpOyEodj15Lm4oKSkuZG9uZTspe3ZhciB4PXYudmFsdWU7aWYoaCh4LnR5cGUpKXt2YXIgYj14LmdldEtleShtKTthPyh4LmF0bGFzQ29sbGVjdGlvbi5kZWxldGVLZXkoZyxiKSx4LmF0bGFzQ29sbGVjdGlvbi5zdHlsZUtleU5lZWRzUmVkcmF3LmFkZChiKSxmPSEwKTpmfD14LmF0bGFzQ29sbGVjdGlvbi5jaGVja0tleUlzSW52YWxpZChnLGIpfX19Y2F0Y2godyl7eS5lKHcpfWZpbmFsbHl7eS5mKCl9fX19Y2F0Y2godyl7ZC5lKHcpfWZpbmFsbHl7ZC5mKCl9cmV0dXJuIGZ9LCJpbnZhbGlkYXRlIil9LHtrZXk6ImdjIix2YWx1ZTpvKGZ1bmN0aW9uKCl7dmFyIHI9bW8odGhpcy5nZXRSZW5kZXJUeXBlcygpKSxuO3RyeXtmb3Ioci5zKCk7IShuPXIubigpKS5kb25lOyl7dmFyIGk9bi52YWx1ZTtpLmF0bGFzQ29sbGVjdGlvbi5nYygpfX1jYXRjaChhKXtyLmUoYSl9ZmluYWxseXtyLmYoKX19LCJnYyIpfSx7a2V5OiJpc1JlbmRlcmFibGUiLHZhbHVlOm8oZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLmdldFJlbmRlclR5cGVPcHRzKG4pO3JldHVybiBpJiZpLmlzVmlzaWJsZShyKX0sImlzUmVuZGVyYWJsZSIpfSx7a2V5OiJzdGFydEJhdGNoIix2YWx1ZTpvKGZ1bmN0aW9uKCl7dGhpcy5iYXRjaEF0bGFzZXM9W119LCJzdGFydEJhdGNoIil9LHtrZXk6ImdldEF0bGFzQ291bnQiLHZhbHVlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iYXRjaEF0bGFzZXMubGVuZ3RofSwiZ2V0QXRsYXNDb3VudCIpfSx7a2V5OiJnZXRBdGxhc2VzIix2YWx1ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYmF0Y2hBdGxhc2VzfSwiZ2V0QXRsYXNlcyIpfSx7a2V5OiJnZXRPckNyZWF0ZUF0bGFzIix2YWx1ZTpvKGZ1bmN0aW9uKHIsbixpKXt2YXIgYT10aGlzLnJlbmRlclR5cGVzLmdldChpKSxzPWEuZ2V0S2V5KHIpLGw9ci5pZCgpO3JldHVybiBhLmF0bGFzQ29sbGVjdGlvbi5kcmF3KGwscyxuLGZ1bmN0aW9uKHUpe2EuZHJhd0VsZW1lbnQodSxyLG4sITAsITApfSl9LCJnZXRPckNyZWF0ZUF0bGFzIil9LHtrZXk6ImdldEF0bGFzSW5kZXhGb3JCYXRjaCIsdmFsdWU6byhmdW5jdGlvbihyKXt2YXIgbj10aGlzLmJhdGNoQXRsYXNlcy5pbmRleE9mKHIpO2lmKG48MCl7aWYodGhpcy5iYXRjaEF0bGFzZXMubGVuZ3RoPT09dGhpcy5tYXhBdGxhc2VzUGVyQmF0Y2gpcmV0dXJuO3RoaXMuYmF0Y2hBdGxhc2VzLnB1c2gociksbj10aGlzLmJhdGNoQXRsYXNlcy5sZW5ndGgtMX1yZXR1cm4gbn0sImdldEF0bGFzSW5kZXhGb3JCYXRjaCIpfSx7a2V5OiJnZXRJbmRleEFycmF5Iix2YWx1ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIEFycmF5LmZyb20oe2xlbmd0aDp0aGlzLm1heEF0bGFzZXN9LGZ1bmN0aW9uKHIsbil7cmV0dXJuIG59KX0sImdldEluZGV4QXJyYXkiKX0se2tleToiZ2V0QXRsYXNJbmZvIix2YWx1ZTpvKGZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5yZW5kZXJUeXBlcy5nZXQobiksYT1pLmdldEJvdW5kaW5nQm94KHIpLHM9dGhpcy5nZXRPckNyZWF0ZUF0bGFzKHIsYSxuKSxsPXRoaXMuZ2V0QXRsYXNJbmRleEZvckJhdGNoKHMpO2lmKGwhPT12b2lkIDApe3ZhciB1PWkuZ2V0S2V5KHIpLGg9cy5nZXRPZmZzZXRzKHUpLGY9X2koaCwyKSxkPWZbMF0scD1mWzFdO3JldHVybnthdGxhc0lEOmwsdGV4OmQsdGV4MTpkLHRleDI6cCxiYjphLHR5cGU6bixzdHlsZUtleTp1fX19LCJnZXRBdGxhc0luZm8iKX0se2tleToiY2FuQWRkVG9DdXJyZW50QmF0Y2giLHZhbHVlOm8oZnVuY3Rpb24ocixuKXtpZih0aGlzLmJhdGNoQXRsYXNlcy5sZW5ndGg9PT10aGlzLm1heEF0bGFzZXNQZXJCYXRjaCl7dmFyIGk9dGhpcy5yZW5kZXJUeXBlcy5nZXQobiksYT1pLmdldEtleShyKSxzPWkuYXRsYXNDb2xsZWN0aW9uLmdldEF0bGFzKGEpO3JldHVybiBzJiZ0aGlzLmJhdGNoQXRsYXNlcy5pbmNsdWRlcyhzKX1yZXR1cm4hMH0sImNhbkFkZFRvQ3VycmVudEJhdGNoIil9LHtrZXk6InNldFRyYW5zZm9ybU1hdHJpeCIsdmFsdWU6byhmdW5jdGlvbihyLG4saSl7dmFyIGE9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiEwLHM9bi5iYixsPW4udHlwZSx1PW4udGV4MSxoPW4udGV4MixmPXRoaXMuZ2V0UmVuZGVyVHlwZU9wdHMobCksZD1mLmdldFBhZGRpbmc/Zi5nZXRQYWRkaW5nKGkpOjAscD11LncvKHUudytoLncpO2F8fChwPTEtcCk7dmFyIG09dGhpcy5nZXRBZGp1c3RlZEJCKHMsZCxhLHApLGcseTtBZ2Uocik7dmFyIHY9Zi5nZXRSb3RhdGlvbj9mLmdldFJvdGF0aW9uKGkpOjA7aWYodiE9PTApe3ZhciB4PWYuZ2V0Um90YXRpb25Qb2ludChpKSxiPXgueCx3PXgueTtEUyhyLHIsW2Isd10pLF9nZShyLHIsdik7dmFyIEM9Zi5nZXRSb3RhdGlvbk9mZnNldChpKTtnPUMueCttLnhPZmZzZXQseT1DLnl9ZWxzZSBnPW0ueDEseT1tLnkxO0RTKHIscixbZyx5XSksVEIocixyLFttLncsbS5oXSl9LCJzZXRUcmFuc2Zvcm1NYXRyaXgiKX0se2tleToiZ2V0VHJhbnNmb3JtTWF0cml4Iix2YWx1ZTpvKGZ1bmN0aW9uKHIsbil7dmFyIGk9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOiEwLGE9R2IoKTtyZXR1cm4gdGhpcy5zZXRUcmFuc2Zvcm1NYXRyaXgoYSxyLG4saSksYX0sImdldFRyYW5zZm9ybU1hdHJpeCIpfSx7a2V5OiJnZXRBZGp1c3RlZEJCIix2YWx1ZTpvKGZ1bmN0aW9uKHIsbixpLGEpe3ZhciBzPXIueDEsbD1yLnkxLHU9ci53LGg9ci5oO24mJihzLT1uLGwtPW4sdSs9MipuLGgrPTIqbik7dmFyIGY9MCxkPXUqYTtyZXR1cm4gaSYmYTwxP3U9ZDohaSYmYTwxJiYoZj11LWQscys9Zix1PWQpLHt4MTpzLHkxOmwsdzp1LGgseE9mZnNldDpmfX0sImdldEFkanVzdGVkQkIiKX0se2tleToiZ2V0RGVidWdJbmZvIix2YWx1ZTpvKGZ1bmN0aW9uKCl7dmFyIHI9W10sbj1tbyh0aGlzLnJlbmRlclR5cGVzKSxpO3RyeXtmb3Iobi5zKCk7IShpPW4ubigpKS5kb25lOyl7dmFyIGE9X2koaS52YWx1ZSwyKSxzPWFbMF0sbD1hWzFdLHU9bC5hdGxhc0NvbGxlY3Rpb24uZ2V0Q291bnRzKCksaD11LmtleUNvdW50LGY9dS5hdGxhc0NvdW50O3IucHVzaCh7dHlwZTpzLGtleUNvdW50OmgsYXRsYXNDb3VudDpmfSl9fWNhdGNoKGQpe24uZShkKX1maW5hbGx5e24uZigpfXJldHVybiByfSwiZ2V0RGVidWdJbmZvIil9XSksdH0oKSxNUD0wLFYwZT0xLFUwZT0yLElQPTMsQVplPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIsbil7TWYodGhpcyx0KSx0aGlzLnI9ZSx0aGlzLmdsPXIsdGhpcy5tYXhJbnN0YW5jZXM9bi53ZWJnbEJhdGNoU2l6ZSx0aGlzLm1heEF0bGFzZXM9bi53ZWJnbFRleFBlckJhdGNoLHRoaXMuYXRsYXNTaXplPW4ud2ViZ2xUZXhTaXplLHRoaXMuYmdDb2xvcj1uLmJnQ29sb3Isbi5lbmFibGVXcmFwcGluZz0hMCxuLmNyZWF0ZVRleHR1cmVDYW52YXM9bVplLHRoaXMuYXRsYXNNYW5hZ2VyPW5ldyBDWmUoZSxuKSx0aGlzLnByb2dyYW09dGhpcy5jcmVhdGVTaGFkZXJQcm9ncmFtKFZiLlNDUkVFTiksdGhpcy5waWNraW5nUHJvZ3JhbT10aGlzLmNyZWF0ZVNoYWRlclByb2dyYW0oVmIuUElDS0lORyksdGhpcy52YW89dGhpcy5jcmVhdGVWQU8oKSx0aGlzLmRlYnVnSW5mbz1bXX1yZXR1cm4gbyh0LCJFbGVtZW50RHJhd2luZ1dlYkdMIiksSWYodCxbe2tleToiYWRkVGV4dHVyZVJlbmRlclR5cGUiLHZhbHVlOm8oZnVuY3Rpb24ocixuKXt0aGlzLmF0bGFzTWFuYWdlci5hZGRSZW5kZXJUeXBlKHIsbil9LCJhZGRUZXh0dXJlUmVuZGVyVHlwZSIpfSx7a2V5OiJpbnZhbGlkYXRlIix2YWx1ZTpvKGZ1bmN0aW9uKHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fSxpPW4udHlwZSxhPXRoaXMuYXRsYXNNYW5hZ2VyO3JldHVybiBpP2EuaW52YWxpZGF0ZShyLHtmaWx0ZXJUeXBlOm8oZnVuY3Rpb24obCl7cmV0dXJuIGw9PT1pfSwiZmlsdGVyVHlwZSIpLGZvcmNlUmVkcmF3OiEwfSk6YS5pbnZhbGlkYXRlKHIpfSwiaW52YWxpZGF0ZSIpfSx7a2V5OiJnYyIsdmFsdWU6byhmdW5jdGlvbigpe3RoaXMuYXRsYXNNYW5hZ2VyLmdjKCl9LCJnYyIpfSx7a2V5OiJjcmVhdGVTaGFkZXJQcm9ncmFtIix2YWx1ZTpvKGZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuZ2wsaT1gI3ZlcnNpb24gMzAwIGVzCiAgICAgIHByZWNpc2lvbiBoaWdocCBmbG9hdDsKCiAgICAgIHVuaWZvcm0gbWF0MyB1UGFuWm9vbU1hdHJpeDsKICAgICAgdW5pZm9ybSBpbnQgIHVBdGxhc1NpemU7CiAgICAgIAogICAgICAvLyBpbnN0YW5jZWQKICAgICAgaW4gdmVjMiBhUG9zaXRpb247IAoKICAgICAgLy8gd2hhdCBhcmUgd2UgcmVuZGVyaW5nPwogICAgICBpbiBpbnQgYVZlcnRUeXBlOwoKICAgICAgLy8gZm9yIHBpY2tpbmcKICAgICAgaW4gdmVjNCBhSW5kZXg7CiAgICAgIAogICAgICAvLyBGb3IgdGV4dHVyZXMKICAgICAgaW4gaW50IGFBdGxhc0lkOyAvLyB3aGljaCBzaGFkZXIgdW5pdC9hdGxhcyB0byB1c2UKICAgICAgaW4gdmVjNCBhVGV4MTsgLy8geC95L3cvaCBvZiB0ZXh0dXJlIGluIGF0bGFzCiAgICAgIGluIHZlYzQgYVRleDI7IAoKICAgICAgLy8gZm9yIGFueSB0cmFuc2Zvcm1zIHRoYXQgYXJlIG5lZWRlZAogICAgICBpbiB2ZWM0IGFTY2FsZVJvdGF0ZTE7ICAvLyB2ZWN0b3JzIHVzZSBmZXdlciBhdHRyaWJ1dGVzIHRoYW4gbWF0cmljZXMKICAgICAgaW4gdmVjMiBhVHJhbnNsYXRlMTsKICAgICAgaW4gdmVjNCBhU2NhbGVSb3RhdGUyOwogICAgICBpbiB2ZWMyIGFUcmFuc2xhdGUyOwoKICAgICAgLy8gZm9yIGVkZ2VzCiAgICAgIGluIHZlYzQgYVBvaW50QVBvaW50QjsKICAgICAgaW4gdmVjNCBhUG9pbnRDUG9pbnREOwogICAgICBpbiBmbG9hdCBhTGluZVdpZHRoOwogICAgICBpbiB2ZWM0IGFFZGdlQ29sb3I7CgogICAgICBvdXQgdmVjMiB2VGV4Q29vcmQ7CiAgICAgIG91dCB2ZWM0IHZFZGdlQ29sb3I7CiAgICAgIGZsYXQgb3V0IGludCB2QXRsYXNJZDsKICAgICAgZmxhdCBvdXQgdmVjNCB2SW5kZXg7CiAgICAgIGZsYXQgb3V0IGludCB2VmVydFR5cGU7CgogICAgICB2b2lkIG1haW4odm9pZCkgewogICAgICAgIGludCB2aWQgPSBnbF9WZXJ0ZXhJRDsKICAgICAgICB2ZWMyIHBvc2l0aW9uID0gYVBvc2l0aW9uOwoKICAgICAgICBpZihhVmVydFR5cGUgPT0gYC5jb25jYXQoTVAsYCkgewogICAgICAgICAgZmxvYXQgdGV4WDsKICAgICAgICAgIGZsb2F0IHRleFk7CiAgICAgICAgICBmbG9hdCB0ZXhXOwogICAgICAgICAgZmxvYXQgdGV4SDsKICAgICAgICAgIG1hdDMgIHRleE1hdHJpeDsKCiAgICAgICAgICBpbnQgdmlkID0gZ2xfVmVydGV4SUQ7CiAgICAgICAgICBpZih2aWQgPD0gNSkgewogICAgICAgICAgICB0ZXhYID0gYVRleDEueDsKICAgICAgICAgICAgdGV4WSA9IGFUZXgxLnk7CiAgICAgICAgICAgIHRleFcgPSBhVGV4MS56OwogICAgICAgICAgICB0ZXhIID0gYVRleDEudzsKICAgICAgICAgICAgdGV4TWF0cml4ID0gbWF0MygKICAgICAgICAgICAgICB2ZWMzKGFTY2FsZVJvdGF0ZTEueHksIDAuMCksCiAgICAgICAgICAgICAgdmVjMyhhU2NhbGVSb3RhdGUyLnp3LCAwLjApLAogICAgICAgICAgICAgIHZlYzMoYVRyYW5zbGF0ZTEsICAgICAgMS4wKQogICAgICAgICAgICApOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGV4WCA9IGFUZXgyLng7CiAgICAgICAgICAgIHRleFkgPSBhVGV4Mi55OwogICAgICAgICAgICB0ZXhXID0gYVRleDIuejsKICAgICAgICAgICAgdGV4SCA9IGFUZXgyLnc7CiAgICAgICAgICAgIHRleE1hdHJpeCA9IG1hdDMoCiAgICAgICAgICAgICAgdmVjMyhhU2NhbGVSb3RhdGUyLnh5LCAwLjApLAogICAgICAgICAgICAgIHZlYzMoYVNjYWxlUm90YXRlMi56dywgMC4wKSwKICAgICAgICAgICAgICB2ZWMzKGFUcmFuc2xhdGUyLCAgICAgIDEuMCkKICAgICAgICAgICAgKTsKICAgICAgICAgIH0KCiAgICAgICAgICBpZih2aWQgPT0gMSB8fCB2aWQgPT0gMiB8fCB2aWQgPT0gNCB8fCB2aWQgPT0gNyB8fCB2aWQgPT0gOCB8fCB2aWQgPT0gMTApIHsKICAgICAgICAgICAgdGV4WCArPSB0ZXhXOwogICAgICAgICAgfQogICAgICAgICAgaWYodmlkID09IDIgfHwgdmlkID09IDQgfHwgdmlkID09IDUgfHwgdmlkID09IDggfHwgdmlkID09IDEwIHx8IHZpZCA9PSAxMSkgewogICAgICAgICAgICB0ZXhZICs9IHRleEg7CiAgICAgICAgICB9CgogICAgICAgICAgZmxvYXQgZCA9IGZsb2F0KHVBdGxhc1NpemUpOwogICAgICAgICAgdlRleENvb3JkID0gdmVjMih0ZXhYIC8gZCwgdGV4WSAvIGQpOyAvLyB0ZXggY29vcmRzIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxCgogICAgICAgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KHVQYW5ab29tTWF0cml4ICogdGV4TWF0cml4ICogdmVjMyhwb3NpdGlvbiwgMS4wKSwgMS4wKTsKICAgICAgICB9IAogICAgICAgIGVsc2UgaWYoYVZlcnRUeXBlID09IGApLmNvbmNhdChWMGUsYCAmJiB2aWQgPCA2KSB7CiAgICAgICAgICB2ZWMyIHNvdXJjZSA9IGFQb2ludEFQb2ludEIueHk7CiAgICAgICAgICB2ZWMyIHRhcmdldCA9IGFQb2ludEFQb2ludEIuenc7CgogICAgICAgICAgLy8gYWRqdXN0IHRoZSBnZW9tZXRyeSBzbyB0aGF0IHRoZSBsaW5lIGlzIGNlbnRlcmVkIG9uIHRoZSBlZGdlCiAgICAgICAgICBwb3NpdGlvbi55ID0gcG9zaXRpb24ueSAtIDAuNTsKCiAgICAgICAgICB2ZWMyIHhCYXNpcyA9IHRhcmdldCAtIHNvdXJjZTsKICAgICAgICAgIHZlYzIgeUJhc2lzID0gbm9ybWFsaXplKHZlYzIoLXhCYXNpcy55LCB4QmFzaXMueCkpOwogICAgICAgICAgdmVjMiBwb2ludCA9IHNvdXJjZSArIHhCYXNpcyAqIHBvc2l0aW9uLnggKyB5QmFzaXMgKiBhTGluZVdpZHRoICogcG9zaXRpb24ueTsKCiAgICAgICAgICBnbF9Qb3NpdGlvbiA9IHZlYzQodVBhblpvb21NYXRyaXggKiB2ZWMzKHBvaW50LCAxLjApLCAxLjApOwogICAgICAgICAgdkVkZ2VDb2xvciA9IGFFZGdlQ29sb3I7CiAgICAgICAgfSAKICAgICAgICBlbHNlIGlmKGFWZXJ0VHlwZSA9PSBgKS5jb25jYXQoVTBlLGAgJiYgdmlkIDwgNikgewogICAgICAgICAgdmVjMiBwb2ludEEgPSBhUG9pbnRBUG9pbnRCLnh5OwogICAgICAgICAgdmVjMiBwb2ludEIgPSBhUG9pbnRBUG9pbnRCLnp3OwogICAgICAgICAgdmVjMiBwb2ludEMgPSBhUG9pbnRDUG9pbnRELnh5OwogICAgICAgICAgdmVjMiBwb2ludEQgPSBhUG9pbnRDUG9pbnRELnp3OwoKICAgICAgICAgIC8vIGFkanVzdCB0aGUgZ2VvbWV0cnkgc28gdGhhdCB0aGUgbGluZSBpcyBjZW50ZXJlZCBvbiB0aGUgZWRnZQogICAgICAgICAgcG9zaXRpb24ueSA9IHBvc2l0aW9uLnkgLSAwLjU7CgogICAgICAgICAgdmVjMiBwMCA9IHBvaW50QTsKICAgICAgICAgIHZlYzIgcDEgPSBwb2ludEI7CiAgICAgICAgICB2ZWMyIHAyID0gcG9pbnRDOwogICAgICAgICAgdmVjMiBwb3MgPSBwb3NpdGlvbjsKICAgICAgICAgIGlmKHBvc2l0aW9uLnggPT0gMS4wKSB7CiAgICAgICAgICAgIHAwID0gcG9pbnREOwogICAgICAgICAgICBwMSA9IHBvaW50QzsKICAgICAgICAgICAgcDIgPSBwb2ludEI7CiAgICAgICAgICAgIHBvcyA9IHZlYzIoMC4wLCAtcG9zaXRpb24ueSk7CiAgICAgICAgICB9CgogICAgICAgICAgdmVjMiBwMDEgPSBwMSAtIHAwOwogICAgICAgICAgdmVjMiBwMTIgPSBwMiAtIHAxOwogICAgICAgICAgdmVjMiBwMjEgPSBwMSAtIHAyOwoKICAgICAgICAgIC8vIEZpbmQgdGhlIG5vcm1hbCB2ZWN0b3IuCiAgICAgICAgICB2ZWMyIHRhbmdlbnQgPSBub3JtYWxpemUobm9ybWFsaXplKHAxMikgKyBub3JtYWxpemUocDAxKSk7CiAgICAgICAgICB2ZWMyIG5vcm1hbCA9IHZlYzIoLXRhbmdlbnQueSwgdGFuZ2VudC54KTsKCiAgICAgICAgICAvLyBGaW5kIHRoZSB2ZWN0b3IgcGVycGVuZGljdWxhciB0byBwMCAtPiBwMS4KICAgICAgICAgIHZlYzIgcDAxTm9ybSA9IG5vcm1hbGl6ZSh2ZWMyKC1wMDEueSwgcDAxLngpKTsKCiAgICAgICAgICAvLyBEZXRlcm1pbmUgdGhlIGJlbmQgZGlyZWN0aW9uLgogICAgICAgICAgZmxvYXQgc2lnbWEgPSBzaWduKGRvdChwMDEgKyBwMjEsIG5vcm1hbCkpOwogICAgICAgICAgZmxvYXQgd2lkdGggPSBhTGluZVdpZHRoOwoKICAgICAgICAgIGlmKHNpZ24ocG9zLnkpID09IC1zaWdtYSkgewogICAgICAgICAgICAvLyBUaGlzIGlzIGFuIGludGVyc2VjdGluZyB2ZXJ0ZXguIEFkanVzdCB0aGUgcG9zaXRpb24gc28gdGhhdCB0aGVyZSdzIG5vIG92ZXJsYXAuCiAgICAgICAgICAgIHZlYzIgcG9pbnQgPSAwLjUgKiB3aWR0aCAqIG5vcm1hbCAqIC1zaWdtYSAvIGRvdChub3JtYWwsIHAwMU5vcm0pOwogICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IHZlYzQodVBhblpvb21NYXRyaXggKiB2ZWMzKHAxICsgcG9pbnQsIDEuMCksIDEuMCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBUaGlzIGlzIGEgbm9uLWludGVyc2VjdGluZyB2ZXJ0ZXguIFRyZWF0IGl0IGxpa2UgYSBtaXRyZSBqb2luLgogICAgICAgICAgICB2ZWMyIHBvaW50ID0gMC41ICogd2lkdGggKiBub3JtYWwgKiBzaWdtYSAqIGRvdChub3JtYWwsIHAwMU5vcm0pOwogICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IHZlYzQodVBhblpvb21NYXRyaXggKiB2ZWMzKHAxICsgcG9pbnQsIDEuMCksIDEuMCk7CiAgICAgICAgICB9CgogICAgICAgICAgdkVkZ2VDb2xvciA9IGFFZGdlQ29sb3I7CiAgICAgICAgfSAKICAgICAgICBlbHNlIGlmKGFWZXJ0VHlwZSA9PSBgKS5jb25jYXQoSVAsYCAmJiB2aWQgPCAzKSB7CiAgICAgICAgICAvLyBtYXNzYWdlIHRoZSBmaXJzdCB0cmlhbmdsZSBpbnRvIGFuIGVkZ2UgYXJyb3cKICAgICAgICAgIGlmKHZpZCA9PSAwKQogICAgICAgICAgICBwb3NpdGlvbiA9IHZlYzIoLTAuMTUsIC0wLjMpOwogICAgICAgICAgaWYodmlkID09IDEpCiAgICAgICAgICAgIHBvc2l0aW9uID0gdmVjMiggMC4wLCAgIDAuMCk7CiAgICAgICAgICBpZih2aWQgPT0gMikKICAgICAgICAgICAgcG9zaXRpb24gPSB2ZWMyKCAwLjE1LCAtMC4zKTsKCiAgICAgICAgICBtYXQzIHRyYW5zZm9ybSA9IG1hdDMoCiAgICAgICAgICAgIHZlYzMoYVNjYWxlUm90YXRlMS54eSwgMC4wKSwKICAgICAgICAgICAgdmVjMyhhU2NhbGVSb3RhdGUxLnp3LCAwLjApLAogICAgICAgICAgICB2ZWMzKGFUcmFuc2xhdGUxLCAgICAgIDEuMCkKICAgICAgICAgICk7CiAgICAgICAgICBnbF9Qb3NpdGlvbiA9IHZlYzQodVBhblpvb21NYXRyaXggKiB0cmFuc2Zvcm0gKiB2ZWMzKHBvc2l0aW9uLCAxLjApLCAxLjApOwogICAgICAgICAgdkVkZ2VDb2xvciA9IGFFZGdlQ29sb3I7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgyLjAsIDAuMCwgMC4wLCAxLjApOyAvLyBkaXNjYXJkIHZlcnRleCBieSBwdXR0aW5nIGl0IG91dHNpZGUgd2ViZ2wgY2xpcCBzcGFjZQogICAgICAgIH0KCiAgICAgICAgdkF0bGFzSWQgPSBhQXRsYXNJZDsKICAgICAgICB2SW5kZXggPSBhSW5kZXg7CiAgICAgICAgdlZlcnRUeXBlID0gYVZlcnRUeXBlOwogICAgICB9CiAgICBgKSxhPXRoaXMuYXRsYXNNYW5hZ2VyLmdldEluZGV4QXJyYXkoKSxzPWAjdmVyc2lvbiAzMDAgZXMKICAgICAgcHJlY2lzaW9uIGhpZ2hwIGZsb2F0OwoKICAgICAgLy8gZGVmaW5lIHRleHR1cmUgdW5pdCBmb3IgZWFjaCBub2RlIGluIHRoZSBiYXRjaAogICAgICBgLmNvbmNhdChhLm1hcChmdW5jdGlvbihoKXtyZXR1cm4idW5pZm9ybSBzYW1wbGVyMkQgdVRleHR1cmUiLmNvbmNhdChoLCI7Iil9KS5qb2luKGAKCWApLGAKCiAgICAgIHVuaWZvcm0gdmVjNCB1QkdDb2xvcjsKCiAgICAgIGluIHZlYzIgdlRleENvb3JkOwogICAgICBpbiB2ZWM0IHZFZGdlQ29sb3I7CiAgICAgIGZsYXQgaW4gaW50IHZBdGxhc0lkOwogICAgICBmbGF0IGluIHZlYzQgdkluZGV4OwogICAgICBmbGF0IGluIGludCB2VmVydFR5cGU7CgogICAgICBvdXQgdmVjNCBvdXRDb2xvcjsKCiAgICAgIHZvaWQgbWFpbih2b2lkKSB7CiAgICAgICAgaWYodlZlcnRUeXBlID09IGApLmNvbmNhdChNUCxgKSB7CiAgICAgICAgICBgKS5jb25jYXQoYS5tYXAoZnVuY3Rpb24oaCl7cmV0dXJuImlmKHZBdGxhc0lkID09ICIuY29uY2F0KGgsIikgb3V0Q29sb3IgPSB0ZXh0dXJlKHVUZXh0dXJlIikuY29uY2F0KGgsIiwgdlRleENvb3JkKTsiKX0pLmpvaW4oYAoJZWxzZSBgKSxgCiAgICAgICAgfSBlbHNlIGlmKHZWZXJ0VHlwZSA9PSBgKS5jb25jYXQoSVAsYCkgewogICAgICAgICAgLy8gYmxlbmQgYXJyb3cgY29sb3Igd2l0aCBiYWNrZ3JvdW5kICh1c2luZyBwcmVtdWx0aXBsaWVkIGFscGhhKQogICAgICAgICAgb3V0Q29sb3IucmdiID0gdkVkZ2VDb2xvci5yZ2IgKyAodUJHQ29sb3IucmdiICogKDEuMCAtIHZFZGdlQ29sb3IuYSkpOyAKICAgICAgICAgIG91dENvbG9yLmEgPSAxLjA7IC8vIG1ha2Ugb3BhcXVlLCBtYXNrcyBvdXQgbGluZSB1bmRlciBhcnJvdwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBvdXRDb2xvciA9IHZFZGdlQ29sb3I7CiAgICAgICAgfQoKICAgICAgICBgKS5jb25jYXQoci5waWNraW5nP2BpZihvdXRDb2xvci5hID09IDAuMCkgZGlzY2FyZDsKICAgICAgICAgICAgIGVsc2Ugb3V0Q29sb3IgPSB2SW5kZXg7YDoiIixgCiAgICAgIH0KICAgIGApLGw9cFplKG4saSxzKTtsLmFQb3NpdGlvbj1uLmdldEF0dHJpYkxvY2F0aW9uKGwsImFQb3NpdGlvbiIpLGwuYUluZGV4PW4uZ2V0QXR0cmliTG9jYXRpb24obCwiYUluZGV4IiksbC5hVmVydFR5cGU9bi5nZXRBdHRyaWJMb2NhdGlvbihsLCJhVmVydFR5cGUiKSxsLmFBdGxhc0lkPW4uZ2V0QXR0cmliTG9jYXRpb24obCwiYUF0bGFzSWQiKSxsLmFUZXgxPW4uZ2V0QXR0cmliTG9jYXRpb24obCwiYVRleDEiKSxsLmFUZXgyPW4uZ2V0QXR0cmliTG9jYXRpb24obCwiYVRleDIiKSxsLmFTY2FsZVJvdGF0ZTE9bi5nZXRBdHRyaWJMb2NhdGlvbihsLCJhU2NhbGVSb3RhdGUxIiksbC5hVHJhbnNsYXRlMT1uLmdldEF0dHJpYkxvY2F0aW9uKGwsImFUcmFuc2xhdGUxIiksbC5hU2NhbGVSb3RhdGUyPW4uZ2V0QXR0cmliTG9jYXRpb24obCwiYVNjYWxlUm90YXRlMiIpLGwuYVRyYW5zbGF0ZTI9bi5nZXRBdHRyaWJMb2NhdGlvbihsLCJhVHJhbnNsYXRlMiIpLGwuYVBvaW50QVBvaW50Qj1uLmdldEF0dHJpYkxvY2F0aW9uKGwsImFQb2ludEFQb2ludEIiKSxsLmFQb2ludENQb2ludEQ9bi5nZXRBdHRyaWJMb2NhdGlvbihsLCJhUG9pbnRDUG9pbnREIiksbC5hTGluZVdpZHRoPW4uZ2V0QXR0cmliTG9jYXRpb24obCwiYUxpbmVXaWR0aCIpLGwuYUVkZ2VDb2xvcj1uLmdldEF0dHJpYkxvY2F0aW9uKGwsImFFZGdlQ29sb3IiKSxsLnVQYW5ab29tTWF0cml4PW4uZ2V0VW5pZm9ybUxvY2F0aW9uKGwsInVQYW5ab29tTWF0cml4IiksbC51QXRsYXNTaXplPW4uZ2V0VW5pZm9ybUxvY2F0aW9uKGwsInVBdGxhc1NpemUiKSxsLnVCR0NvbG9yPW4uZ2V0VW5pZm9ybUxvY2F0aW9uKGwsInVCR0NvbG9yIiksbC51VGV4dHVyZXM9W107Zm9yKHZhciB1PTA7dTx0aGlzLmF0bGFzTWFuYWdlci5tYXhBdGxhc2VzO3UrKylsLnVUZXh0dXJlcy5wdXNoKG4uZ2V0VW5pZm9ybUxvY2F0aW9uKGwsInVUZXh0dXJlIi5jb25jYXQodSkpKTtyZXR1cm4gbH0sImNyZWF0ZVNoYWRlclByb2dyYW0iKX0se2tleToiY3JlYXRlVkFPIix2YWx1ZTpvKGZ1bmN0aW9uKCl7dmFyIHI9WzAsMCwxLDAsMSwxLDAsMCwxLDEsMCwxXSxuPVtdLmNvbmNhdChyLHIpO3RoaXMudmVydGV4Q291bnQ9bi5sZW5ndGgvMjt2YXIgaT10aGlzLm1heEluc3RhbmNlcyxhPXRoaXMuZ2wscz10aGlzLnByb2dyYW0sbD1hLmNyZWF0ZVZlcnRleEFycmF5KCk7cmV0dXJuIGEuYmluZFZlcnRleEFycmF5KGwpLHhaZShhLCJ2ZWMyIixzLmFQb3NpdGlvbixuKSx0aGlzLmluZGV4QnVmZmVyPXBvKGEsaSwidmVjNCIscy5hSW5kZXgpLHRoaXMudmVydFR5cGVCdWZmZXI9cG8oYSxpLCJpbnQiLHMuYVZlcnRUeXBlKSx0aGlzLmF0bGFzSWRCdWZmZXI9cG8oYSxpLCJpbnQiLHMuYUF0bGFzSWQpLHRoaXMudGV4MUJ1ZmZlcj1wbyhhLGksInZlYzQiLHMuYVRleDEpLHRoaXMudGV4MkJ1ZmZlcj1wbyhhLGksInZlYzQiLHMuYVRleDIpLHRoaXMuc2NhbGVSb3RhdGUxQnVmZmVyPXBvKGEsaSwidmVjNCIscy5hU2NhbGVSb3RhdGUxKSx0aGlzLnRyYW5zbGF0ZTFCdWZmZXI9cG8oYSxpLCJ2ZWMyIixzLmFUcmFuc2xhdGUxKSx0aGlzLnNjYWxlUm90YXRlMkJ1ZmZlcj1wbyhhLGksInZlYzQiLHMuYVNjYWxlUm90YXRlMiksdGhpcy50cmFuc2xhdGUyQnVmZmVyPXBvKGEsaSwidmVjMiIscy5hVHJhbnNsYXRlMiksdGhpcy5wb2ludEFQb2ludEJCdWZmZXI9cG8oYSxpLCJ2ZWM0IixzLmFQb2ludEFQb2ludEIpLHRoaXMucG9pbnRDUG9pbnREQnVmZmVyPXBvKGEsaSwidmVjNCIscy5hUG9pbnRDUG9pbnREKSx0aGlzLmxpbmVXaWR0aEJ1ZmZlcj1wbyhhLGksImZsb2F0IixzLmFMaW5lV2lkdGgpLHRoaXMuZWRnZUNvbG9yQnVmZmVyPXBvKGEsaSwidmVjNCIscy5hRWRnZUNvbG9yKSxhLmJpbmRWZXJ0ZXhBcnJheShudWxsKSxsfSwiY3JlYXRlVkFPIil9LHtrZXk6ImJ1ZmZlcnMiLGdldDpvKGZ1bmN0aW9uKCl7dmFyIHI9dGhpcztyZXR1cm4gdGhpcy5fYnVmZmVyc3x8KHRoaXMuX2J1ZmZlcnM9T2JqZWN0LmtleXModGhpcykuZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVybiBuLmVuZHNXaXRoKCJCdWZmZXIiKX0pLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gcltuXX0pKSx0aGlzLl9idWZmZXJzfSwiZ2V0Iil9LHtrZXk6InN0YXJ0RnJhbWUiLHZhbHVlOm8oZnVuY3Rpb24ocixuKXt2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06VmIuU0NSRUVOO3RoaXMucGFuWm9vbU1hdHJpeD1yLHRoaXMuZGVidWdJbmZvPW4sdGhpcy5yZW5kZXJUYXJnZXQ9aSx0aGlzLnN0YXJ0QmF0Y2goKX0sInN0YXJ0RnJhbWUiKX0se2tleToic3RhcnRCYXRjaCIsdmFsdWU6byhmdW5jdGlvbigpe3RoaXMuaW5zdGFuY2VDb3VudD0wLHRoaXMuYXRsYXNNYW5hZ2VyLnN0YXJ0QmF0Y2goKX0sInN0YXJ0QmF0Y2giKX0se2tleToiZW5kRnJhbWUiLHZhbHVlOm8oZnVuY3Rpb24oKXt0aGlzLmVuZEJhdGNoKCl9LCJlbmRGcmFtZSIpfSx7a2V5OiJnZXRUZW1wTWF0cml4Iix2YWx1ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGVtcE1hdHJpeD10aGlzLnRlbXBNYXRyaXh8fEdiKCl9LCJnZXRUZW1wTWF0cml4Iil9LHtrZXk6ImRyYXdUZXh0dXJlIix2YWx1ZTpvKGZ1bmN0aW9uKHIsbixpKXt2YXIgYT10aGlzLmF0bGFzTWFuYWdlcjtpZihhLmlzUmVuZGVyYWJsZShyLGkpKXthLmNhbkFkZFRvQ3VycmVudEJhdGNoKHIsaSl8fHRoaXMuZW5kQmF0Y2goKTt2YXIgcz10aGlzLmluc3RhbmNlQ291bnQ7dGhpcy52ZXJ0VHlwZUJ1ZmZlci5nZXRWaWV3KHMpWzBdPU1QO3ZhciBsPXRoaXMuaW5kZXhCdWZmZXIuZ2V0VmlldyhzKTtsUyhuLGwpO3ZhciB1PWEuZ2V0QXRsYXNJbmZvKHIsaSx1KSxoPXUuYXRsYXNJRCxmPXUudGV4MSxkPXUudGV4MixwPXRoaXMuYXRsYXNJZEJ1ZmZlci5nZXRWaWV3KHMpO3BbMF09aDt2YXIgbT10aGlzLnRleDFCdWZmZXIuZ2V0VmlldyhzKTttWzBdPWYueCxtWzFdPWYueSxtWzJdPWYudyxtWzNdPWYuaDt2YXIgZz10aGlzLnRleDJCdWZmZXIuZ2V0VmlldyhzKTtnWzBdPWQueCxnWzFdPWQueSxnWzJdPWQudyxnWzNdPWQuaDtmb3IodmFyIHk9dGhpcy5nZXRUZW1wTWF0cml4KCksdj0wLHg9WzEsMl07djx4Lmxlbmd0aDt2Kyspe3ZhciBiPXhbdl07YS5zZXRUcmFuc2Zvcm1NYXRyaXgoeSx1LHIsYj09PTEpO3ZhciB3PXRoaXNbInNjYWxlUm90YXRlIi5jb25jYXQoYiwiQnVmZmVyIildLmdldFZpZXcocyk7d1swXT15WzBdLHdbMV09eVsxXSx3WzJdPXlbM10sd1szXT15WzRdO3ZhciBDPXRoaXNbInRyYW5zbGF0ZSIuY29uY2F0KGIsIkJ1ZmZlciIpXS5nZXRWaWV3KHMpO0NbMF09eVs2XSxDWzFdPXlbN119dGhpcy5pbnN0YW5jZUNvdW50KyssdGhpcy5pbnN0YW5jZUNvdW50Pj10aGlzLm1heEluc3RhbmNlcyYmdGhpcy5lbmRCYXRjaCgpfX0sImRyYXdUZXh0dXJlIil9LHtrZXk6ImRyYXdFZGdlQXJyb3ciLHZhbHVlOm8oZnVuY3Rpb24ocixuLGkpe3ZhciBhPXIuX3ByaXZhdGUucnNjcmF0Y2gscyxsLHU7aWYoaT09PSJzb3VyY2UiPyhzPWEuYXJyb3dTdGFydFgsbD1hLmFycm93U3RhcnRZLHU9YS5zcmNBcnJvd0FuZ2xlKToocz1hLmFycm93RW5kWCxsPWEuYXJyb3dFbmRZLHU9YS50Z3RBcnJvd0FuZ2xlKSwhKGlzTmFOKHMpfHxzPT1udWxsfHxpc05hTihsKXx8bD09bnVsbHx8aXNOYU4odSl8fHU9PW51bGwpKXt2YXIgaD1yLnBzdHlsZShpKyItYXJyb3ctc2hhcGUiKS52YWx1ZTtpZihoIT09Im5vbmUiKXt2YXIgZj1yLnBzdHlsZShpKyItYXJyb3ctY29sb3IiKS52YWx1ZSxkPXIucHN0eWxlKCJvcGFjaXR5IikudmFsdWUscD1yLnBzdHlsZSgibGluZS1vcGFjaXR5IikudmFsdWUsbT1kKnAsZz1yLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlLHk9ci5wc3R5bGUoImFycm93LXNjYWxlIikudmFsdWUsdj10aGlzLnIuZ2V0QXJyb3dXaWR0aChnLHkpLHg9dGhpcy5nZXRUZW1wTWF0cml4KCk7QWdlKHgpLERTKHgseCxbcyxsXSksVEIoeCx4LFt2LHZdKSxfZ2UoeCx4LHUpO3ZhciBiPXRoaXMuaW5zdGFuY2VDb3VudDt0aGlzLnZlcnRUeXBlQnVmZmVyLmdldFZpZXcoYilbMF09SVA7dmFyIHc9dGhpcy5pbmRleEJ1ZmZlci5nZXRWaWV3KGIpO2xTKG4sdyk7dmFyIEM9dGhpcy5lZGdlQ29sb3JCdWZmZXIuZ2V0VmlldyhiKTtvUyhmLG0sQyk7dmFyIFQ9dGhpcy5zY2FsZVJvdGF0ZTFCdWZmZXIuZ2V0VmlldyhiKTtUWzBdPXhbMF0sVFsxXT14WzFdLFRbMl09eFszXSxUWzNdPXhbNF07dmFyIEU9dGhpcy50cmFuc2xhdGUxQnVmZmVyLmdldFZpZXcoYik7RVswXT14WzZdLEVbMV09eFs3XSx0aGlzLmluc3RhbmNlQ291bnQrKyx0aGlzLmluc3RhbmNlQ291bnQ+PXRoaXMubWF4SW5zdGFuY2VzJiZ0aGlzLmVuZEJhdGNoKCl9fX0sImRyYXdFZGdlQXJyb3ciKX0se2tleToiZHJhd0VkZ2VMaW5lIix2YWx1ZTpvKGZ1bmN0aW9uKHIsbil7dmFyIGk9ci5wc3R5bGUoIm9wYWNpdHkiKS52YWx1ZSxhPXIucHN0eWxlKCJsaW5lLW9wYWNpdHkiKS52YWx1ZSxzPXIucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUsbD1yLnBzdHlsZSgibGluZS1jb2xvciIpLnZhbHVlLHU9aSphLGg9dGhpcy5nZXRFZGdlUG9pbnRzKHIpO2lmKGgubGVuZ3RoLzIrdGhpcy5pbnN0YW5jZUNvdW50PnRoaXMubWF4SW5zdGFuY2VzJiZ0aGlzLmVuZEJhdGNoKCksaC5sZW5ndGg9PTQpe3ZhciBmPXRoaXMuaW5zdGFuY2VDb3VudDt0aGlzLnZlcnRUeXBlQnVmZmVyLmdldFZpZXcoZilbMF09VjBlO3ZhciBkPXRoaXMuaW5kZXhCdWZmZXIuZ2V0VmlldyhmKTtsUyhuLGQpO3ZhciBwPXRoaXMuZWRnZUNvbG9yQnVmZmVyLmdldFZpZXcoZik7b1MobCx1LHApO3ZhciBtPXRoaXMubGluZVdpZHRoQnVmZmVyLmdldFZpZXcoZik7bVswXT1zO3ZhciBnPXRoaXMucG9pbnRBUG9pbnRCQnVmZmVyLmdldFZpZXcoZik7Z1swXT1oWzBdLGdbMV09aFsxXSxnWzJdPWhbMl0sZ1szXT1oWzNdLHRoaXMuaW5zdGFuY2VDb3VudCsrLHRoaXMuaW5zdGFuY2VDb3VudD49dGhpcy5tYXhJbnN0YW5jZXMmJnRoaXMuZW5kQmF0Y2goKX1lbHNlIGZvcih2YXIgeT0wO3k8aC5sZW5ndGgtMjt5Kz0yKXt2YXIgdj10aGlzLmluc3RhbmNlQ291bnQ7dGhpcy52ZXJ0VHlwZUJ1ZmZlci5nZXRWaWV3KHYpWzBdPVUwZTt2YXIgeD10aGlzLmluZGV4QnVmZmVyLmdldFZpZXcodik7bFMobix4KTt2YXIgYj10aGlzLmVkZ2VDb2xvckJ1ZmZlci5nZXRWaWV3KHYpO29TKGwsdSxiKTt2YXIgdz10aGlzLmxpbmVXaWR0aEJ1ZmZlci5nZXRWaWV3KHYpO3dbMF09czt2YXIgQz1oW3ktMl0sVD1oW3ktMV0sRT1oW3ldLEE9aFt5KzFdLFM9aFt5KzJdLF89aFt5KzNdLEk9aFt5KzRdLEQ9aFt5KzVdO3k9PTAmJihDPTIqRS1TKy4wMDEsVD0yKkEtXysuMDAxKSx5PT1oLmxlbmd0aC00JiYoST0yKlMtRSsuMDAxLEQ9MipfLUErLjAwMSk7dmFyIGs9dGhpcy5wb2ludEFQb2ludEJCdWZmZXIuZ2V0Vmlldyh2KTtrWzBdPUMsa1sxXT1ULGtbMl09RSxrWzNdPUE7dmFyIEw9dGhpcy5wb2ludENQb2ludERCdWZmZXIuZ2V0Vmlldyh2KTtMWzBdPVMsTFsxXT1fLExbMl09SSxMWzNdPUQsdGhpcy5pbnN0YW5jZUNvdW50KyssdGhpcy5pbnN0YW5jZUNvdW50Pj10aGlzLm1heEluc3RhbmNlcyYmdGhpcy5lbmRCYXRjaCgpfX0sImRyYXdFZGdlTGluZSIpfSx7a2V5OiJnZXRFZGdlUG9pbnRzIix2YWx1ZTpvKGZ1bmN0aW9uKHIpe3ZhciBuPXIuX3ByaXZhdGUucnNjcmF0Y2gsaT1uLmFsbHB0cztpZihpLmxlbmd0aD09NClyZXR1cm4gaTt2YXIgYT10aGlzLmdldE51bVNlZ21lbnRzKHIpO3JldHVybiB0aGlzLmdldEN1cnZlU2VnbWVudFBvaW50cyhpLGEpfSwiZ2V0RWRnZVBvaW50cyIpfSx7a2V5OiJnZXROdW1TZWdtZW50cyIsdmFsdWU6byhmdW5jdGlvbihyKXt2YXIgbj0xNTtyZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgobiw1KSx0aGlzLm1heEluc3RhbmNlcyl9LCJnZXROdW1TZWdtZW50cyIpfSx7a2V5OiJnZXRDdXJ2ZVNlZ21lbnRQb2ludHMiLHZhbHVlOm8oZnVuY3Rpb24ocixuKXtpZihyLmxlbmd0aD09NClyZXR1cm4gcjtmb3IodmFyIGk9QXJyYXkoKG4rMSkqMiksYT0wO2E8PW47YSsrKWlmKGE9PTApaVswXT1yWzBdLGlbMV09clsxXTtlbHNlIGlmKGE9PW4paVthKjJdPXJbci5sZW5ndGgtMl0saVthKjIrMV09cltyLmxlbmd0aC0xXTtlbHNle3ZhciBzPWEvbjt0aGlzLnNldEN1cnZlUG9pbnQocixzLGksYSoyKX1yZXR1cm4gaX0sImdldEN1cnZlU2VnbWVudFBvaW50cyIpfSx7a2V5OiJzZXRDdXJ2ZVBvaW50Iix2YWx1ZTpvKGZ1bmN0aW9uKHIsbixpLGEpe2lmKHIubGVuZ3RoPD0yKWlbYV09clswXSxpW2ErMV09clsxXTtlbHNle2Zvcih2YXIgcz1BcnJheShyLmxlbmd0aC0yKSxsPTA7bDxzLmxlbmd0aDtsKz0yKXt2YXIgdT0oMS1uKSpyW2xdK24qcltsKzJdLGg9KDEtbikqcltsKzFdK24qcltsKzNdO3NbbF09dSxzW2wrMV09aH1yZXR1cm4gdGhpcy5zZXRDdXJ2ZVBvaW50KHMsbixpLGEpfX0sInNldEN1cnZlUG9pbnQiKX0se2tleToiZW5kQmF0Y2giLHZhbHVlOm8oZnVuY3Rpb24oKXt2YXIgcj10aGlzLmdsLG49dGhpcy52YW8saT10aGlzLnZlcnRleENvdW50LGE9dGhpcy5pbnN0YW5jZUNvdW50O2lmKGEhPT0wKXt2YXIgcz10aGlzLnJlbmRlclRhcmdldC5waWNraW5nP3RoaXMucGlja2luZ1Byb2dyYW06dGhpcy5wcm9ncmFtO3IudXNlUHJvZ3JhbShzKSxyLmJpbmRWZXJ0ZXhBcnJheShuKTt2YXIgbD1tbyh0aGlzLmJ1ZmZlcnMpLHU7dHJ5e2ZvcihsLnMoKTshKHU9bC5uKCkpLmRvbmU7KXt2YXIgaD11LnZhbHVlO2guYnVmZmVyU3ViRGF0YShhKX19Y2F0Y2goZyl7bC5lKGcpfWZpbmFsbHl7bC5mKCl9Zm9yKHZhciBmPXRoaXMuYXRsYXNNYW5hZ2VyLmdldEF0bGFzZXMoKSxkPTA7ZDxmLmxlbmd0aDtkKyspZltkXS5idWZmZXJJZk5lZWRlZChyKTtmb3IodmFyIHA9MDtwPGYubGVuZ3RoO3ArKylyLmFjdGl2ZVRleHR1cmUoci5URVhUVVJFMCtwKSxyLmJpbmRUZXh0dXJlKHIuVEVYVFVSRV8yRCxmW3BdLnRleHR1cmUpLHIudW5pZm9ybTFpKHMudVRleHR1cmVzW3BdLHApO3IudW5pZm9ybU1hdHJpeDNmdihzLnVQYW5ab29tTWF0cml4LCExLHRoaXMucGFuWm9vbU1hdHJpeCksci51bmlmb3JtMWkocy51QXRsYXNTaXplLHRoaXMuYXRsYXNNYW5hZ2VyLmF0bGFzU2l6ZSk7dmFyIG09b1ModGhpcy5iZ0NvbG9yLDEpO3IudW5pZm9ybTRmdihzLnVCR0NvbG9yLG0pLHIuZHJhd0FycmF5c0luc3RhbmNlZChyLlRSSUFOR0xFUywwLGksYSksci5iaW5kVmVydGV4QXJyYXkobnVsbCksci5iaW5kVGV4dHVyZShyLlRFWFRVUkVfMkQsbnVsbCksdGhpcy5kZWJ1Z0luZm8mJnRoaXMuZGVidWdJbmZvLnB1c2goe2NvdW50OmEsYXRsYXNDb3VudDpmLmxlbmd0aH0pLHRoaXMuc3RhcnRCYXRjaCgpfX0sImVuZEJhdGNoIil9LHtrZXk6ImdldERlYnVnSW5mbyIsdmFsdWU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmRlYnVnSW5mb30sImdldERlYnVnSW5mbyIpfSx7a2V5OiJnZXRBdGxhc0RlYnVnSW5mbyIsdmFsdWU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmF0bGFzTWFuYWdlci5nZXREZWJ1Z0luZm8oKX0sImdldEF0bGFzRGVidWdJbmZvIil9XSksdH0oKTtvKEgwZSwiZmlsbFN0eWxlIik7X1plPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXtNZih0aGlzLHQpLHRoaXMucj1lfXJldHVybiBvKHQsIk92ZXJsYXlVbmRlcmxheVJlbmRlcmVyIiksSWYodCxbe2tleToiZ2V0U3R5bGVLZXkiLHZhbHVlOm8oZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLmdldFN0eWxlKHIsbiksYT1pLnNoYXBlLHM9aS5vcGFjaXR5LGw9aS5jb2xvcjtpZighYSlyZXR1cm4gbnVsbDt2YXIgdT1uLndpZHRoKCksaD1uLmhlaWdodCgpLGY9SDBlKGwscyk7cmV0dXJuIF9mKCIiLmNvbmNhdChhLCItIikuY29uY2F0KHUsIi0iKS5jb25jYXQoaCwiLSIpLmNvbmNhdChmKSl9LCJnZXRTdHlsZUtleSIpfSx7a2V5OiJpc1Zpc2libGUiLHZhbHVlOm8oZnVuY3Rpb24ocixuKXt2YXIgaT1uLnBzdHlsZSgiIi5jb25jYXQociwiLW9wYWNpdHkiKSkudmFsdWU7cmV0dXJuIGk+MH0sImlzVmlzaWJsZSIpfSx7a2V5OiJnZXRTdHlsZSIsdmFsdWU6byhmdW5jdGlvbihyLG4pe3ZhciBpPW4ucHN0eWxlKCIiLmNvbmNhdChyLCItb3BhY2l0eSIpKS52YWx1ZSxhPW4ucHN0eWxlKCIiLmNvbmNhdChyLCItY29sb3IiKSkudmFsdWUscz1uLnBzdHlsZSgiIi5jb25jYXQociwiLXNoYXBlIikpLnZhbHVlO3JldHVybntvcGFjaXR5OmksY29sb3I6YSxzaGFwZTpzfX0sImdldFN0eWxlIil9LHtrZXk6ImdldFBhZGRpbmciLHZhbHVlOm8oZnVuY3Rpb24ocixuKXtyZXR1cm4gbi5wc3R5bGUoIiIuY29uY2F0KHIsIi1wYWRkaW5nIikpLnBmVmFsdWV9LCJnZXRQYWRkaW5nIil9LHtrZXk6ImRyYXciLHZhbHVlOm8oZnVuY3Rpb24ocixuLGksYSl7aWYodGhpcy5pc1Zpc2libGUocixpKSl7dmFyIHM9dGhpcy5yLGw9YS53LHU9YS5oLGg9bC8yLGY9dS8yLGQ9dGhpcy5nZXRTdHlsZShyLGkpLHA9ZC5zaGFwZSxtPWQuY29sb3IsZz1kLm9wYWNpdHk7bi5zYXZlKCksbi5maWxsU3R5bGU9SDBlKG0sZykscD09PSJyb3VuZC1yZWN0YW5nbGUifHxwPT09InJvdW5kcmVjdGFuZ2xlIj9zLmRyYXdSb3VuZFJlY3RhbmdsZVBhdGgobixoLGYsbCx1LCJhdXRvIik6cD09PSJlbGxpcHNlIiYmcy5kcmF3RWxsaXBzZVBhdGgobixoLGYsbCx1KSxuLmZpbGwoKSxuLnJlc3RvcmUoKX19LCJkcmF3Iil9XSksdH0oKTtvKERaZSwiZ2V0QkdDb2xvciIpO0RnZT17fTtEZ2UuaW5pdFdlYmdsPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxuPXIuZGF0YS5jb250ZXh0c1tyLldFQkdMXSxpPXQuY3kuY29udGFpbmVyKCk7dC5iZ0NvbG9yPURaZShpKSx0LndlYmdsVGV4U2l6ZT1NYXRoLm1pbih0LndlYmdsVGV4U2l6ZSxuLmdldFBhcmFtZXRlcihuLk1BWF9URVhUVVJFX1NJWkUpKSx0LndlYmdsVGV4Um93cz1NYXRoLm1pbih0LndlYmdsVGV4Um93cyw1NCksdC53ZWJnbEJhdGNoU2l6ZT1NYXRoLm1pbih0LndlYmdsQmF0Y2hTaXplLDE2Mzg0KSx0LndlYmdsVGV4UGVyQmF0Y2g9TWF0aC5taW4odC53ZWJnbFRleFBlckJhdGNoLG4uZ2V0UGFyYW1ldGVyKG4uTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpKSxyLndlYmdsRGVidWc9dC53ZWJnbERlYnVnLHIud2ViZ2xEZWJ1Z1Nob3dBdGxhc2VzPXQud2ViZ2xEZWJ1Z1Nob3dBdGxhc2VzLGNvbnNvbGUubG9nKCJtYXggdGV4dHVyZSB1bml0cyIsbi5nZXRQYXJhbWV0ZXIobi5NQVhfVEVYVFVSRV9JTUFHRV9VTklUUykpLGNvbnNvbGUubG9nKCJtYXggdGV4dHVyZSBzaXplIixuLmdldFBhcmFtZXRlcihuLk1BWF9URVhUVVJFX1NJWkUpKSxjb25zb2xlLmxvZygid2ViZ2wgb3B0aW9ucyIsdCksci5waWNraW5nRnJhbWVCdWZmZXI9YlplKG4pLHIucGlja2luZ0ZyYW1lQnVmZmVyLm5lZWRzRHJhdz0hMDt2YXIgYT1vKGZ1bmN0aW9uKGYpe3JldHVybiByLmdldFRleHRBbmdsZShmLG51bGwpfSwiZ2V0TGFiZWxSb3RhdGlvbiIpLHM9byhmdW5jdGlvbihmKXt2YXIgZD1mLnBzdHlsZSgibGFiZWwiKTtyZXR1cm4gZCYmZC52YWx1ZX0sImlzTGFiZWxWaXNpYmxlIik7ci5lbGVEcmF3aW5nPW5ldyBBWmUocixuLHQpO3ZhciBsPW5ldyBfWmUocik7ci5lbGVEcmF3aW5nLmFkZFRleHR1cmVSZW5kZXJUeXBlKCJub2RlLWJvZHkiLE1iKHtnZXRLZXk6ZS5nZXRTdHlsZUtleSxnZXRCb3VuZGluZ0JveDplLmdldEVsZW1lbnRCb3gsZHJhd0VsZW1lbnQ6ZS5kcmF3RWxlbWVudCxpc1Zpc2libGU6byhmdW5jdGlvbihmKXtyZXR1cm4gZi52aXNpYmxlKCl9LCJpc1Zpc2libGUiKX0pKSxyLmVsZURyYXdpbmcuYWRkVGV4dHVyZVJlbmRlclR5cGUoIm5vZGUtbGFiZWwiLE1iKHtnZXRLZXk6ZS5nZXRMYWJlbEtleSxnZXRCb3VuZGluZ0JveDplLmdldExhYmVsQm94LGRyYXdFbGVtZW50OmUuZHJhd0xhYmVsLGdldFJvdGF0aW9uOmEsZ2V0Um90YXRpb25Qb2ludDplLmdldExhYmVsUm90YXRpb25Qb2ludCxnZXRSb3RhdGlvbk9mZnNldDplLmdldExhYmVsUm90YXRpb25PZmZzZXQsaXNWaXNpYmxlOnN9KSksci5lbGVEcmF3aW5nLmFkZFRleHR1cmVSZW5kZXJUeXBlKCJub2RlLW92ZXJsYXkiLE1iKHtnZXRCb3VuZGluZ0JveDplLmdldEVsZW1lbnRCb3gsZ2V0S2V5Om8oZnVuY3Rpb24oZil7cmV0dXJuIGwuZ2V0U3R5bGVLZXkoIm92ZXJsYXkiLGYpfSwiZ2V0S2V5IiksZHJhd0VsZW1lbnQ6byhmdW5jdGlvbihmLGQscCl7cmV0dXJuIGwuZHJhdygib3ZlcmxheSIsZixkLHApfSwiZHJhd0VsZW1lbnQiKSxpc1Zpc2libGU6byhmdW5jdGlvbihmKXtyZXR1cm4gbC5pc1Zpc2libGUoIm92ZXJsYXkiLGYpfSwiaXNWaXNpYmxlIiksZ2V0UGFkZGluZzpvKGZ1bmN0aW9uKGYpe3JldHVybiBsLmdldFBhZGRpbmcoIm92ZXJsYXkiLGYpfSwiZ2V0UGFkZGluZyIpfSkpLHIuZWxlRHJhd2luZy5hZGRUZXh0dXJlUmVuZGVyVHlwZSgibm9kZS11bmRlcmxheSIsTWIoe2dldEJvdW5kaW5nQm94OmUuZ2V0RWxlbWVudEJveCxnZXRLZXk6byhmdW5jdGlvbihmKXtyZXR1cm4gbC5nZXRTdHlsZUtleSgidW5kZXJsYXkiLGYpfSwiZ2V0S2V5IiksZHJhd0VsZW1lbnQ6byhmdW5jdGlvbihmLGQscCl7cmV0dXJuIGwuZHJhdygidW5kZXJsYXkiLGYsZCxwKX0sImRyYXdFbGVtZW50IiksaXNWaXNpYmxlOm8oZnVuY3Rpb24oZil7cmV0dXJuIGwuaXNWaXNpYmxlKCJ1bmRlcmxheSIsZil9LCJpc1Zpc2libGUiKSxnZXRQYWRkaW5nOm8oZnVuY3Rpb24oZil7cmV0dXJuIGwuZ2V0UGFkZGluZygidW5kZXJsYXkiLGYpfSwiZ2V0UGFkZGluZyIpfSkpLHIuZWxlRHJhd2luZy5hZGRUZXh0dXJlUmVuZGVyVHlwZSgiZWRnZS1sYWJlbCIsTWIoe2dldEtleTplLmdldExhYmVsS2V5LGdldEJvdW5kaW5nQm94OmUuZ2V0TGFiZWxCb3gsZHJhd0VsZW1lbnQ6ZS5kcmF3TGFiZWwsZ2V0Um90YXRpb246YSxnZXRSb3RhdGlvblBvaW50OmUuZ2V0TGFiZWxSb3RhdGlvblBvaW50LGdldFJvdGF0aW9uT2Zmc2V0OmUuZ2V0TGFiZWxSb3RhdGlvbk9mZnNldCxpc1Zpc2libGU6c30pKTt2YXIgdT1uNChmdW5jdGlvbigpe2NvbnNvbGUubG9nKCJnYXJiYWdlIGNvbGxlY3QgZmxhZyBzZXQiKSxyLmRhdGEuZ2M9ITB9LDFlNCk7ci5vblVwZGF0ZUVsZUNhbGNzKGZ1bmN0aW9uKGgsZil7dmFyIGQ9ITE7ZiYmZi5sZW5ndGg+MCYmKGR8PXIuZWxlRHJhd2luZy5pbnZhbGlkYXRlKGYpKSxkJiZ1KCl9KSxMWmUocil9O28oTFplLCJvdmVycmlkZUNhbnZhc1JlbmRlcmVyRnVuY3Rpb25zIik7byhSWmUsImNsZWFyV2ViZ2wiKTtvKE5aZSwiY2xlYXJDYW52YXMiKTtvKE1aZSwiY3JlYXRlUGFuWm9vbU1hdHJpeCIpO28oTGdlLCJzZXRDb250ZXh0VHJhbnNmb3JtIik7byhJWmUsImRyYXdTZWxlY3Rpb25SZWN0YW5nbGUiKTtvKE9aZSwiZHJhd0F4ZXMiKTtvKFBaZSwiZHJhd0F0bGFzZXMiKTtvKEJaZSwiZ2V0UGlja2luZ0luZGV4ZXMiKTtvKEZaZSwiZmluZE5lYXJlc3RFbGVtZW50c1dlYmdsIik7byhSZ2UsInJlbmRlcldlYmdsIik7UGY9e307UGYuZHJhd1BvbHlnb25QYXRoPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgcz1uLzIsbD1pLzI7dC5iZWdpblBhdGgmJnQuYmVnaW5QYXRoKCksdC5tb3ZlVG8oZStzKmFbMF0scitsKmFbMV0pO2Zvcih2YXIgdT0xO3U8YS5sZW5ndGgvMjt1KyspdC5saW5lVG8oZStzKmFbdSoyXSxyK2wqYVt1KjIrMV0pO3QuY2xvc2VQYXRoKCl9O1BmLmRyYXdSb3VuZFBvbHlnb25QYXRoPWZ1bmN0aW9uKHQsZSxyLG4saSxhLHMpe3MuZm9yRWFjaChmdW5jdGlvbihsKXtyZXR1cm4gaGdlKHQsbCl9KSx0LmNsb3NlUGF0aCgpfTtQZi5kcmF3Um91bmRSZWN0YW5nbGVQYXRoPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgcz1uLzIsbD1pLzIsdT1hPT09ImF1dG8iP1ZwKG4saSk6TWF0aC5taW4oYSxsLHMpO3QuYmVnaW5QYXRoJiZ0LmJlZ2luUGF0aCgpLHQubW92ZVRvKGUsci1sKSx0LmFyY1RvKGUrcyxyLWwsZStzLHIsdSksdC5hcmNUbyhlK3MscitsLGUscitsLHUpLHQuYXJjVG8oZS1zLHIrbCxlLXMscix1KSx0LmFyY1RvKGUtcyxyLWwsZSxyLWwsdSksdC5saW5lVG8oZSxyLWwpLHQuY2xvc2VQYXRoKCl9O1BmLmRyYXdCb3R0b21Sb3VuZFJlY3RhbmdsZVBhdGg9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBzPW4vMixsPWkvMix1PWE9PT0iYXV0byI/VnAobixpKTphO3QuYmVnaW5QYXRoJiZ0LmJlZ2luUGF0aCgpLHQubW92ZVRvKGUsci1sKSx0LmxpbmVUbyhlK3Msci1sKSx0LmxpbmVUbyhlK3MsciksdC5hcmNUbyhlK3MscitsLGUscitsLHUpLHQuYXJjVG8oZS1zLHIrbCxlLXMscix1KSx0LmxpbmVUbyhlLXMsci1sKSx0LmxpbmVUbyhlLHItbCksdC5jbG9zZVBhdGgoKX07UGYuZHJhd0N1dFJlY3RhbmdsZVBhdGg9ZnVuY3Rpb24odCxlLHIsbixpLGEscyl7dmFyIGw9bi8yLHU9aS8yLGg9cz09PSJhdXRvIj9zQigpOnM7dC5iZWdpblBhdGgmJnQuYmVnaW5QYXRoKCksdC5tb3ZlVG8oZS1sK2gsci11KSx0LmxpbmVUbyhlK2wtaCxyLXUpLHQubGluZVRvKGUrbCxyLXUraCksdC5saW5lVG8oZStsLHIrdS1oKSx0LmxpbmVUbyhlK2wtaCxyK3UpLHQubGluZVRvKGUtbCtoLHIrdSksdC5saW5lVG8oZS1sLHIrdS1oKSx0LmxpbmVUbyhlLWwsci11K2gpLHQuY2xvc2VQYXRoKCl9O1BmLmRyYXdCYXJyZWxQYXRoPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9bi8yLHM9aS8yLGw9ZS1hLHU9ZSthLGg9ci1zLGY9citzLGQ9QlAobixpKSxwPWQud2lkdGhPZmZzZXQsbT1kLmhlaWdodE9mZnNldCxnPWQuY3RybFB0T2Zmc2V0UGN0KnA7dC5iZWdpblBhdGgmJnQuYmVnaW5QYXRoKCksdC5tb3ZlVG8obCxoK20pLHQubGluZVRvKGwsZi1tKSx0LnF1YWRyYXRpY0N1cnZlVG8obCtnLGYsbCtwLGYpLHQubGluZVRvKHUtcCxmKSx0LnF1YWRyYXRpY0N1cnZlVG8odS1nLGYsdSxmLW0pLHQubGluZVRvKHUsaCttKSx0LnF1YWRyYXRpY0N1cnZlVG8odS1nLGgsdS1wLGgpLHQubGluZVRvKGwrcCxoKSx0LnF1YWRyYXRpY0N1cnZlVG8obCtnLGgsbCxoK20pLHQuY2xvc2VQYXRoKCl9O1cwZT1NYXRoLnNpbigwKSxxMGU9TWF0aC5jb3MoMCksalA9e30sS1A9e30sTmdlPU1hdGguUEkvNDA7Zm9yKElwPTAqTWF0aC5QSTtJcDwyKk1hdGguUEk7SXArPU5nZSlqUFtJcF09TWF0aC5zaW4oSXApLEtQW0lwXT1NYXRoLmNvcyhJcCk7UGYuZHJhd0VsbGlwc2VQYXRoPWZ1bmN0aW9uKHQsZSxyLG4saSl7aWYodC5iZWdpblBhdGgmJnQuYmVnaW5QYXRoKCksdC5lbGxpcHNlKXQuZWxsaXBzZShlLHIsbi8yLGkvMiwwLDAsMipNYXRoLlBJKTtlbHNlIGZvcih2YXIgYSxzLGw9bi8yLHU9aS8yLGg9MCpNYXRoLlBJO2g8MipNYXRoLlBJO2grPU5nZSlhPWUtbCpqUFtoXSpXMGUrbCpLUFtoXSpxMGUscz1yK3UqS1BbaF0qVzBlK3UqalBbaF0qcTBlLGg9PT0wP3QubW92ZVRvKGEscyk6dC5saW5lVG8oYSxzKTt0LmNsb3NlUGF0aCgpfTtjND17fTtjNC5jcmVhdGVCdWZmZXI9ZnVuY3Rpb24odCxlKXt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtyZXR1cm4gci53aWR0aD10LHIuaGVpZ2h0PWUsW3Isci5nZXRDb250ZXh0KCIyZCIpXX07YzQuYnVmZmVyQ2FudmFzSW1hZ2U9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jeSxyPWUubXV0YWJsZUVsZW1lbnRzKCksbj1yLmJvdW5kaW5nQm94KCksaT10aGlzLmZpbmRDb250YWluZXJDbGllbnRDb29yZHMoKSxhPXQuZnVsbD9NYXRoLmNlaWwobi53KTppWzJdLHM9dC5mdWxsP01hdGguY2VpbChuLmgpOmlbM10sbD1DdCh0Lm1heFdpZHRoKXx8Q3QodC5tYXhIZWlnaHQpLHU9dGhpcy5nZXRQaXhlbFJhdGlvKCksaD0xO2lmKHQuc2NhbGUhPT12b2lkIDApYSo9dC5zY2FsZSxzKj10LnNjYWxlLGg9dC5zY2FsZTtlbHNlIGlmKGwpe3ZhciBmPTEvMCxkPTEvMDtDdCh0Lm1heFdpZHRoKSYmKGY9aCp0Lm1heFdpZHRoL2EpLEN0KHQubWF4SGVpZ2h0KSYmKGQ9aCp0Lm1heEhlaWdodC9zKSxoPU1hdGgubWluKGYsZCksYSo9aCxzKj1ofWx8fChhKj11LHMqPXUsaCo9dSk7dmFyIHA9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7cC53aWR0aD1hLHAuaGVpZ2h0PXMscC5zdHlsZS53aWR0aD1hKyJweCIscC5zdHlsZS5oZWlnaHQ9cysicHgiO3ZhciBtPXAuZ2V0Q29udGV4dCgiMmQiKTtpZihhPjAmJnM+MCl7bS5jbGVhclJlY3QoMCwwLGEscyksbS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249InNvdXJjZS1vdmVyIjt2YXIgZz10aGlzLmdldENhY2hlZFpTb3J0ZWRFbGVzKCk7aWYodC5mdWxsKW0udHJhbnNsYXRlKC1uLngxKmgsLW4ueTEqaCksbS5zY2FsZShoLGgpLHRoaXMuZHJhd0VsZW1lbnRzKG0sZyksbS5zY2FsZSgxL2gsMS9oKSxtLnRyYW5zbGF0ZShuLngxKmgsbi55MSpoKTtlbHNle3ZhciB5PWUucGFuKCksdj17eDp5LngqaCx5OnkueSpofTtoKj1lLnpvb20oKSxtLnRyYW5zbGF0ZSh2Lngsdi55KSxtLnNjYWxlKGgsaCksdGhpcy5kcmF3RWxlbWVudHMobSxnKSxtLnNjYWxlKDEvaCwxL2gpLG0udHJhbnNsYXRlKC12LngsLXYueSl9dC5iZyYmKG0uZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPSJkZXN0aW5hdGlvbi1vdmVyIixtLmZpbGxTdHlsZT10LmJnLG0ucmVjdCgwLDAsYSxzKSxtLmZpbGwoKSl9cmV0dXJuIHB9O28oJFplLCJiNjRUb0Jsb2IiKTtvKFkwZSwiYjY0VXJpVG9CNjQiKTtvKE1nZSwib3V0cHV0Iik7YzQucG5nPWZ1bmN0aW9uKHQpe3JldHVybiBNZ2UodCx0aGlzLmJ1ZmZlckNhbnZhc0ltYWdlKHQpLCJpbWFnZS9wbmciKX07YzQuanBnPWZ1bmN0aW9uKHQpe3JldHVybiBNZ2UodCx0aGlzLmJ1ZmZlckNhbnZhc0ltYWdlKHQpLCJpbWFnZS9qcGVnIil9O0lnZT17fTtJZ2Uubm9kZVNoYXBlSW1wbD1mdW5jdGlvbih0LGUscixuLGksYSxzLGwpe3N3aXRjaCh0KXtjYXNlImVsbGlwc2UiOnJldHVybiB0aGlzLmRyYXdFbGxpcHNlUGF0aChlLHIsbixpLGEpO2Nhc2UicG9seWdvbiI6cmV0dXJuIHRoaXMuZHJhd1BvbHlnb25QYXRoKGUscixuLGksYSxzKTtjYXNlInJvdW5kLXBvbHlnb24iOnJldHVybiB0aGlzLmRyYXdSb3VuZFBvbHlnb25QYXRoKGUscixuLGksYSxzLGwpO2Nhc2Uicm91bmRyZWN0YW5nbGUiOmNhc2Uicm91bmQtcmVjdGFuZ2xlIjpyZXR1cm4gdGhpcy5kcmF3Um91bmRSZWN0YW5nbGVQYXRoKGUscixuLGksYSxsKTtjYXNlImN1dHJlY3RhbmdsZSI6Y2FzZSJjdXQtcmVjdGFuZ2xlIjpyZXR1cm4gdGhpcy5kcmF3Q3V0UmVjdGFuZ2xlUGF0aChlLHIsbixpLGEscyxsKTtjYXNlImJvdHRvbXJvdW5kcmVjdGFuZ2xlIjpjYXNlImJvdHRvbS1yb3VuZC1yZWN0YW5nbGUiOnJldHVybiB0aGlzLmRyYXdCb3R0b21Sb3VuZFJlY3RhbmdsZVBhdGgoZSxyLG4saSxhLGwpO2Nhc2UiYmFycmVsIjpyZXR1cm4gdGhpcy5kcmF3QmFycmVsUGF0aChlLHIsbixpLGEpfX07elplPU9nZSxFcj1PZ2UucHJvdG90eXBlO0VyLkNBTlZBU19MQVlFUlM9MztFci5TRUxFQ1RfQk9YPTA7RXIuRFJBRz0xO0VyLk5PREU9MjtFci5XRUJHTD0zO0VyLkNBTlZBU19UWVBFUz1bIjJkIiwiMmQiLCIyZCIsIndlYmdsMiJdO0VyLkJVRkZFUl9DT1VOVD0zO0VyLlRFWFRVUkVfQlVGRkVSPTA7RXIuTU9USU9OQkxVUl9CVUZGRVJfTk9ERT0xO0VyLk1PVElPTkJMVVJfQlVGRkVSX0RSQUc9MjtvKE9nZSwiQ2FudmFzUmVuZGVyZXIiKTtFci5yZWRyYXdIaW50PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcztzd2l0Y2godCl7Y2FzZSJlbGVzIjpyLmRhdGEuY2FudmFzTmVlZHNSZWRyYXdbRXIuTk9ERV09ZTticmVhaztjYXNlImRyYWciOnIuZGF0YS5jYW52YXNOZWVkc1JlZHJhd1tFci5EUkFHXT1lO2JyZWFrO2Nhc2Uic2VsZWN0IjpyLmRhdGEuY2FudmFzTmVlZHNSZWRyYXdbRXIuU0VMRUNUX0JPWF09ZTticmVhaztjYXNlImdjIjpyLmRhdGEuZ2M9ITA7YnJlYWt9fTtHWmU9dHlwZW9mIFBhdGgyRDwidSI7RXIucGF0aDJkRW5hYmxlZD1mdW5jdGlvbih0KXtpZih0PT09dm9pZCAwKXJldHVybiB0aGlzLnBhdGhzRW5hYmxlZDt0aGlzLnBhdGhzRW5hYmxlZD0hIXR9O0VyLnVzZVBhdGhzPWZ1bmN0aW9uKCl7cmV0dXJuIEdaZSYmdGhpcy5wYXRoc0VuYWJsZWR9O0VyLnNldEltZ1Ntb290aGluZz1mdW5jdGlvbih0LGUpe3QuaW1hZ2VTbW9vdGhpbmdFbmFibGVkIT1udWxsP3QuaW1hZ2VTbW9vdGhpbmdFbmFibGVkPWU6KHQud2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkPWUsdC5tb3pJbWFnZVNtb290aGluZ0VuYWJsZWQ9ZSx0Lm1zSW1hZ2VTbW9vdGhpbmdFbmFibGVkPWUpfTtFci5nZXRJbWdTbW9vdGhpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaW1hZ2VTbW9vdGhpbmdFbmFibGVkIT1udWxsP3QuaW1hZ2VTbW9vdGhpbmdFbmFibGVkOnQud2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkfHx0Lm1vekltYWdlU21vb3RoaW5nRW5hYmxlZHx8dC5tc0ltYWdlU21vb3RoaW5nRW5hYmxlZH07RXIubWFrZU9mZnNjcmVlbkNhbnZhcz1mdW5jdGlvbih0LGUpe3ZhciByO2lmKCh0eXBlb2YgT2Zmc2NyZWVuQ2FudmFzPiJ1Ij8idW5kZWZpbmVkIjpXaShPZmZzY3JlZW5DYW52YXMpKSE9PSJ1bmRlZmluZWQiKXI9bmV3IE9mZnNjcmVlbkNhbnZhcyh0LGUpO2Vsc2V7dmFyIG49dGhpcy5jeS53aW5kb3coKSxpPW4uZG9jdW1lbnQ7cj1pLmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLHIud2lkdGg9dCxyLmhlaWdodD1lfXJldHVybiByfTtbVGdlLFFjLHRoLGJCLFlwLGx5LHlzLERnZSxQZixjNCxJZ2VdLmZvckVhY2goZnVuY3Rpb24odCl7cnIoRXIsdCl9KTtWWmU9W3tuYW1lOiJudWxsIixpbXBsOmxnZX0se25hbWU6ImJhc2UiLGltcGw6dmdlfSx7bmFtZToiY2FudmFzIixpbXBsOnpaZX1dLFVaZT1be3R5cGU6ImxheW91dCIsZXh0ZW5zaW9uczpTUWV9LHt0eXBlOiJyZW5kZXJlciIsZXh0ZW5zaW9uczpWWmV9XSxQZ2U9e30sQmdlPXt9O28oRmdlLCJzZXRFeHRlbnNpb24iKTtvKCRnZSwiZ2V0RXh0ZW5zaW9uIik7byhIWmUsInNldE1vZHVsZSIpO28oV1plLCJnZXRNb2R1bGUiKTtRUD1vKGZ1bmN0aW9uKCl7aWYoYXJndW1lbnRzLmxlbmd0aD09PTIpcmV0dXJuICRnZS5hcHBseShudWxsLGFyZ3VtZW50cyk7aWYoYXJndW1lbnRzLmxlbmd0aD09PTMpcmV0dXJuIEZnZS5hcHBseShudWxsLGFyZ3VtZW50cyk7aWYoYXJndW1lbnRzLmxlbmd0aD09PTQpcmV0dXJuIFdaZS5hcHBseShudWxsLGFyZ3VtZW50cyk7aWYoYXJndW1lbnRzLmxlbmd0aD09PTUpcmV0dXJuIEhaZS5hcHBseShudWxsLGFyZ3VtZW50cyk7YWkoIkludmFsaWQgZXh0ZW5zaW9uIGFjY2VzcyBzeW50YXgiKX0sImV4dGVuc2lvbiIpO0piLnByb3RvdHlwZS5leHRlbnNpb249UVA7VVplLmZvckVhY2goZnVuY3Rpb24odCl7dC5leHRlbnNpb25zLmZvckVhY2goZnVuY3Rpb24oZSl7RmdlKHQudHlwZSxlLm5hbWUsZS5pbXBsKX0pfSk7emdlPW8oZnVuY3Rpb24gdCgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHQpKXJldHVybiBuZXcgdDt0aGlzLmxlbmd0aD0wfSwiU3R5bGVzaGVldCIpLFdwPXpnZS5wcm90b3R5cGU7V3AuaW5zdGFuY2VTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4ic3R5bGVzaGVldCJ9O1dwLnNlbGVjdG9yPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGVuZ3RoKys7cmV0dXJuIHRoaXNbZV09e3NlbGVjdG9yOnQscHJvcGVydGllczpbXX0sdGhpc307V3AuY3NzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sZW5ndGgtMTtpZihadCh0KSl0aGlzW3JdLnByb3BlcnRpZXMucHVzaCh7bmFtZTp0LHZhbHVlOmV9KTtlbHNlIGlmKFVyKHQpKWZvcih2YXIgbj10LGk9T2JqZWN0LmtleXMobiksYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgcz1pW2FdLGw9bltzXTtpZihsIT1udWxsKXt2YXIgdT1GYS5wcm9wZXJ0aWVzW3NdfHxGYS5wcm9wZXJ0aWVzW0xTKHMpXTtpZih1IT1udWxsKXt2YXIgaD11Lm5hbWUsZj1sO3RoaXNbcl0ucHJvcGVydGllcy5wdXNoKHtuYW1lOmgsdmFsdWU6Zn0pfX19cmV0dXJuIHRoaXN9O1dwLnN0eWxlPVdwLmNzcztXcC5nZW5lcmF0ZVN0eWxlPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBGYSh0KTtyZXR1cm4gdGhpcy5hcHBlbmRUb1N0eWxlKGUpfTtXcC5hcHBlbmRUb1N0eWxlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dGhpcy5sZW5ndGg7ZSsrKXt2YXIgcj10aGlzW2VdLG49ci5zZWxlY3RvcixpPXIucHJvcGVydGllczt0LnNlbGVjdG9yKG4pO2Zvcih2YXIgYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgcz1pW2FdO3QuY3NzKHMubmFtZSxzLnZhbHVlKX19cmV0dXJuIHR9O3FaZT0iMy4zMS4wIixybD1vKGZ1bmN0aW9uKGUpe2lmKGU9PT12b2lkIDAmJihlPXt9KSxVcihlKSlyZXR1cm4gbmV3IEpiKGUpO2lmKFp0KGUpKXJldHVybiBRUC5hcHBseShRUCxhcmd1bWVudHMpfSwiY3l0b3NjYXBlIik7cmwudXNlPWZ1bmN0aW9uKHQpe3ZhciBlPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4gZS51bnNoaWZ0KHJsKSx0LmFwcGx5KG51bGwsZSksdGhpc307cmwud2FybmluZ3M9ZnVuY3Rpb24odCl7cmV0dXJuIGhtZSh0KX07cmwudmVyc2lvbj1xWmU7cmwuc3R5bGVzaGVldD1ybC5TdHlsZXNoZWV0PXpnZX0pO3ZhciBTQj1NaSgodTQsRUIpPT57InVzZSBzdHJpY3QiO28oZnVuY3Rpb24oZSxyKXt0eXBlb2YgdTQ9PSJvYmplY3QiJiZ0eXBlb2YgRUI9PSJvYmplY3QiP0VCLmV4cG9ydHM9cigpOnR5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJmRlZmluZS5hbWQ/ZGVmaW5lKFtdLHIpOnR5cGVvZiB1ND09Im9iamVjdCI/dTQubGF5b3V0QmFzZT1yKCk6ZS5sYXlvdXRCYXNlPXIoKX0sIndlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIikodTQsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9e307ZnVuY3Rpb24gcihuKXtpZihlW25dKXJldHVybiBlW25dLmV4cG9ydHM7dmFyIGk9ZVtuXT17aTpuLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIHRbbl0uY2FsbChpLmV4cG9ydHMsaSxpLmV4cG9ydHMsciksaS5sPSEwLGkuZXhwb3J0c31yZXR1cm4gbyhyLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiksci5tPXQsci5jPWUsci5pPWZ1bmN0aW9uKG4pe3JldHVybiBufSxyLmQ9ZnVuY3Rpb24obixpLGEpe3IubyhuLGkpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkobixpLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCxnZXQ6YX0pfSxyLm49ZnVuY3Rpb24obil7dmFyIGk9biYmbi5fX2VzTW9kdWxlP28oZnVuY3Rpb24oKXtyZXR1cm4gbi5kZWZhdWx0fSwiZ2V0RGVmYXVsdCIpOm8oZnVuY3Rpb24oKXtyZXR1cm4gbn0sImdldE1vZHVsZUV4cG9ydHMiKTtyZXR1cm4gci5kKGksImEiLGkpLGl9LHIubz1mdW5jdGlvbihuLGkpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixpKX0sci5wPSIiLHIoci5zPTI2KX0oW2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe31vKG4sIkxheW91dENvbnN0YW50cyIpLG4uUVVBTElUWT0xLG4uREVGQVVMVF9DUkVBVEVfQkVORFNfQVNfTkVFREVEPSExLG4uREVGQVVMVF9JTkNSRU1FTlRBTD0hMSxuLkRFRkFVTFRfQU5JTUFUSU9OX09OX0xBWU9VVD0hMCxuLkRFRkFVTFRfQU5JTUFUSU9OX0RVUklOR19MQVlPVVQ9ITEsbi5ERUZBVUxUX0FOSU1BVElPTl9QRVJJT0Q9NTAsbi5ERUZBVUxUX1VOSUZPUk1fTEVBRl9OT0RFX1NJWkVTPSExLG4uREVGQVVMVF9HUkFQSF9NQVJHSU49MTUsbi5OT0RFX0RJTUVOU0lPTlNfSU5DTFVERV9MQUJFTFM9ITEsbi5TSU1QTEVfTk9ERV9TSVpFPTQwLG4uU0lNUExFX05PREVfSEFMRl9TSVpFPW4uU0lNUExFX05PREVfU0laRS8yLG4uRU1QVFlfQ09NUE9VTkRfTk9ERV9TSVpFPTQwLG4uTUlOX0VER0VfTEVOR1RIPTEsbi5XT1JMRF9CT1VOREFSWT0xZTYsbi5JTklUSUFMX1dPUkxEX0JPVU5EQVJZPW4uV09STERfQk9VTkRBUlkvMWUzLG4uV09STERfQ0VOVEVSX1g9MTIwMCxuLldPUkxEX0NFTlRFUl9ZPTkwMCx0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDIpLGk9cig4KSxhPXIoOSk7ZnVuY3Rpb24gcyh1LGgsZil7bi5jYWxsKHRoaXMsZiksdGhpcy5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXQ9ITEsdGhpcy52R3JhcGhPYmplY3Q9Zix0aGlzLmJlbmRwb2ludHM9W10sdGhpcy5zb3VyY2U9dSx0aGlzLnRhcmdldD1ofW8ocywiTEVkZ2UiKSxzLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKTtmb3IodmFyIGwgaW4gbilzW2xdPW5bbF07cy5wcm90b3R5cGUuZ2V0U291cmNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc291cmNlfSxzLnByb3RvdHlwZS5nZXRUYXJnZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50YXJnZXR9LHMucHJvdG90eXBlLmlzSW50ZXJHcmFwaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW50ZXJHcmFwaH0scy5wcm90b3R5cGUuZ2V0TGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSxzLnByb3RvdHlwZS5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXR9LHMucHJvdG90eXBlLmdldEJlbmRwb2ludHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iZW5kcG9pbnRzfSxzLnByb3RvdHlwZS5nZXRMY2E9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sY2F9LHMucHJvdG90eXBlLmdldFNvdXJjZUluTGNhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc291cmNlSW5MY2F9LHMucHJvdG90eXBlLmdldFRhcmdldEluTGNhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGFyZ2V0SW5MY2F9LHMucHJvdG90eXBlLmdldE90aGVyRW5kPWZ1bmN0aW9uKHUpe2lmKHRoaXMuc291cmNlPT09dSlyZXR1cm4gdGhpcy50YXJnZXQ7aWYodGhpcy50YXJnZXQ9PT11KXJldHVybiB0aGlzLnNvdXJjZTt0aHJvdyJOb2RlIGlzIG5vdCBpbmNpZGVudCB3aXRoIHRoaXMgZWRnZSJ9LHMucHJvdG90eXBlLmdldE90aGVyRW5kSW5HcmFwaD1mdW5jdGlvbih1LGgpe2Zvcih2YXIgZj10aGlzLmdldE90aGVyRW5kKHUpLGQ9aC5nZXRHcmFwaE1hbmFnZXIoKS5nZXRSb290KCk7Oyl7aWYoZi5nZXRPd25lcigpPT1oKXJldHVybiBmO2lmKGYuZ2V0T3duZXIoKT09ZClicmVhaztmPWYuZ2V0T3duZXIoKS5nZXRQYXJlbnQoKX1yZXR1cm4gbnVsbH0scy5wcm90b3R5cGUudXBkYXRlTGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIHU9bmV3IEFycmF5KDQpO3RoaXMuaXNPdmVybGFwaW5nU291cmNlQW5kVGFyZ2V0PWkuZ2V0SW50ZXJzZWN0aW9uKHRoaXMudGFyZ2V0LmdldFJlY3QoKSx0aGlzLnNvdXJjZS5nZXRSZWN0KCksdSksdGhpcy5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXR8fCh0aGlzLmxlbmd0aFg9dVswXS11WzJdLHRoaXMubGVuZ3RoWT11WzFdLXVbM10sTWF0aC5hYnModGhpcy5sZW5ndGhYKTwxJiYodGhpcy5sZW5ndGhYPWEuc2lnbih0aGlzLmxlbmd0aFgpKSxNYXRoLmFicyh0aGlzLmxlbmd0aFkpPDEmJih0aGlzLmxlbmd0aFk9YS5zaWduKHRoaXMubGVuZ3RoWSkpLHRoaXMubGVuZ3RoPU1hdGguc3FydCh0aGlzLmxlbmd0aFgqdGhpcy5sZW5ndGhYK3RoaXMubGVuZ3RoWSp0aGlzLmxlbmd0aFkpKX0scy5wcm90b3R5cGUudXBkYXRlTGVuZ3RoU2ltcGxlPWZ1bmN0aW9uKCl7dGhpcy5sZW5ndGhYPXRoaXMudGFyZ2V0LmdldENlbnRlclgoKS10aGlzLnNvdXJjZS5nZXRDZW50ZXJYKCksdGhpcy5sZW5ndGhZPXRoaXMudGFyZ2V0LmdldENlbnRlclkoKS10aGlzLnNvdXJjZS5nZXRDZW50ZXJZKCksTWF0aC5hYnModGhpcy5sZW5ndGhYKTwxJiYodGhpcy5sZW5ndGhYPWEuc2lnbih0aGlzLmxlbmd0aFgpKSxNYXRoLmFicyh0aGlzLmxlbmd0aFkpPDEmJih0aGlzLmxlbmd0aFk9YS5zaWduKHRoaXMubGVuZ3RoWSkpLHRoaXMubGVuZ3RoPU1hdGguc3FydCh0aGlzLmxlbmd0aFgqdGhpcy5sZW5ndGhYK3RoaXMubGVuZ3RoWSp0aGlzLmxlbmd0aFkpfSx0LmV4cG9ydHM9c30sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGkpe3RoaXMudkdyYXBoT2JqZWN0PWl9byhuLCJMR3JhcGhPYmplY3QiKSx0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDIpLGk9cigxMCksYT1yKDEzKSxzPXIoMCksbD1yKDE2KSx1PXIoNCk7ZnVuY3Rpb24gaChkLHAsbSxnKXttPT1udWxsJiZnPT1udWxsJiYoZz1wKSxuLmNhbGwodGhpcyxnKSxkLmdyYXBoTWFuYWdlciE9bnVsbCYmKGQ9ZC5ncmFwaE1hbmFnZXIpLHRoaXMuZXN0aW1hdGVkU2l6ZT1pLk1JTl9WQUxVRSx0aGlzLmluY2x1c2lvblRyZWVEZXB0aD1pLk1BWF9WQUxVRSx0aGlzLnZHcmFwaE9iamVjdD1nLHRoaXMuZWRnZXM9W10sdGhpcy5ncmFwaE1hbmFnZXI9ZCxtIT1udWxsJiZwIT1udWxsP3RoaXMucmVjdD1uZXcgYShwLngscC55LG0ud2lkdGgsbS5oZWlnaHQpOnRoaXMucmVjdD1uZXcgYX1vKGgsIkxOb2RlIiksaC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSk7Zm9yKHZhciBmIGluIG4paFtmXT1uW2ZdO2gucHJvdG90eXBlLmdldEVkZ2VzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXN9LGgucHJvdG90eXBlLmdldENoaWxkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hpbGR9LGgucHJvdG90eXBlLmdldE93bmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJ9LGgucHJvdG90eXBlLmdldFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC53aWR0aH0saC5wcm90b3R5cGUuc2V0V2lkdGg9ZnVuY3Rpb24oZCl7dGhpcy5yZWN0LndpZHRoPWR9LGgucHJvdG90eXBlLmdldEhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3QuaGVpZ2h0fSxoLnByb3RvdHlwZS5zZXRIZWlnaHQ9ZnVuY3Rpb24oZCl7dGhpcy5yZWN0LmhlaWdodD1kfSxoLnByb3RvdHlwZS5nZXRDZW50ZXJYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC54K3RoaXMucmVjdC53aWR0aC8yfSxoLnByb3RvdHlwZS5nZXRDZW50ZXJZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC55K3RoaXMucmVjdC5oZWlnaHQvMn0saC5wcm90b3R5cGUuZ2V0Q2VudGVyPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB1KHRoaXMucmVjdC54K3RoaXMucmVjdC53aWR0aC8yLHRoaXMucmVjdC55K3RoaXMucmVjdC5oZWlnaHQvMil9LGgucHJvdG90eXBlLmdldExvY2F0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB1KHRoaXMucmVjdC54LHRoaXMucmVjdC55KX0saC5wcm90b3R5cGUuZ2V0UmVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3R9LGgucHJvdG90eXBlLmdldERpYWdvbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLnJlY3Qud2lkdGgqdGhpcy5yZWN0LndpZHRoK3RoaXMucmVjdC5oZWlnaHQqdGhpcy5yZWN0LmhlaWdodCl9LGgucHJvdG90eXBlLmdldEhhbGZUaGVEaWFnb25hbD1mdW5jdGlvbigpe3JldHVybiBNYXRoLnNxcnQodGhpcy5yZWN0LmhlaWdodCp0aGlzLnJlY3QuaGVpZ2h0K3RoaXMucmVjdC53aWR0aCp0aGlzLnJlY3Qud2lkdGgpLzJ9LGgucHJvdG90eXBlLnNldFJlY3Q9ZnVuY3Rpb24oZCxwKXt0aGlzLnJlY3QueD1kLngsdGhpcy5yZWN0Lnk9ZC55LHRoaXMucmVjdC53aWR0aD1wLndpZHRoLHRoaXMucmVjdC5oZWlnaHQ9cC5oZWlnaHR9LGgucHJvdG90eXBlLnNldENlbnRlcj1mdW5jdGlvbihkLHApe3RoaXMucmVjdC54PWQtdGhpcy5yZWN0LndpZHRoLzIsdGhpcy5yZWN0Lnk9cC10aGlzLnJlY3QuaGVpZ2h0LzJ9LGgucHJvdG90eXBlLnNldExvY2F0aW9uPWZ1bmN0aW9uKGQscCl7dGhpcy5yZWN0Lng9ZCx0aGlzLnJlY3QueT1wfSxoLnByb3RvdHlwZS5tb3ZlQnk9ZnVuY3Rpb24oZCxwKXt0aGlzLnJlY3QueCs9ZCx0aGlzLnJlY3QueSs9cH0saC5wcm90b3R5cGUuZ2V0RWRnZUxpc3RUb05vZGU9ZnVuY3Rpb24oZCl7dmFyIHA9W10sbSxnPXRoaXM7cmV0dXJuIGcuZWRnZXMuZm9yRWFjaChmdW5jdGlvbih5KXtpZih5LnRhcmdldD09ZCl7aWYoeS5zb3VyY2UhPWcpdGhyb3ciSW5jb3JyZWN0IGVkZ2Ugc291cmNlISI7cC5wdXNoKHkpfX0pLHB9LGgucHJvdG90eXBlLmdldEVkZ2VzQmV0d2Vlbj1mdW5jdGlvbihkKXt2YXIgcD1bXSxtLGc9dGhpcztyZXR1cm4gZy5lZGdlcy5mb3JFYWNoKGZ1bmN0aW9uKHkpe2lmKCEoeS5zb3VyY2U9PWd8fHkudGFyZ2V0PT1nKSl0aHJvdyJJbmNvcnJlY3QgZWRnZSBzb3VyY2UgYW5kL29yIHRhcmdldCI7KHkudGFyZ2V0PT1kfHx5LnNvdXJjZT09ZCkmJnAucHVzaCh5KX0pLHB9LGgucHJvdG90eXBlLmdldE5laWdoYm9yc0xpc3Q9ZnVuY3Rpb24oKXt2YXIgZD1uZXcgU2V0LHA9dGhpcztyZXR1cm4gcC5lZGdlcy5mb3JFYWNoKGZ1bmN0aW9uKG0pe2lmKG0uc291cmNlPT1wKWQuYWRkKG0udGFyZ2V0KTtlbHNle2lmKG0udGFyZ2V0IT1wKXRocm93IkluY29ycmVjdCBpbmNpZGVuY3khIjtkLmFkZChtLnNvdXJjZSl9fSksZH0saC5wcm90b3R5cGUud2l0aENoaWxkcmVuPWZ1bmN0aW9uKCl7dmFyIGQ9bmV3IFNldCxwLG07aWYoZC5hZGQodGhpcyksdGhpcy5jaGlsZCE9bnVsbClmb3IodmFyIGc9dGhpcy5jaGlsZC5nZXROb2RlcygpLHk9MDt5PGcubGVuZ3RoO3krKylwPWdbeV0sbT1wLndpdGhDaGlsZHJlbigpLG0uZm9yRWFjaChmdW5jdGlvbih2KXtkLmFkZCh2KX0pO3JldHVybiBkfSxoLnByb3RvdHlwZS5nZXROb09mQ2hpbGRyZW49ZnVuY3Rpb24oKXt2YXIgZD0wLHA7aWYodGhpcy5jaGlsZD09bnVsbClkPTE7ZWxzZSBmb3IodmFyIG09dGhpcy5jaGlsZC5nZXROb2RlcygpLGc9MDtnPG0ubGVuZ3RoO2crKylwPW1bZ10sZCs9cC5nZXROb09mQ2hpbGRyZW4oKTtyZXR1cm4gZD09MCYmKGQ9MSksZH0saC5wcm90b3R5cGUuZ2V0RXN0aW1hdGVkU2l6ZT1mdW5jdGlvbigpe2lmKHRoaXMuZXN0aW1hdGVkU2l6ZT09aS5NSU5fVkFMVUUpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7cmV0dXJuIHRoaXMuZXN0aW1hdGVkU2l6ZX0saC5wcm90b3R5cGUuY2FsY0VzdGltYXRlZFNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZD09bnVsbD90aGlzLmVzdGltYXRlZFNpemU9KHRoaXMucmVjdC53aWR0aCt0aGlzLnJlY3QuaGVpZ2h0KS8yOih0aGlzLmVzdGltYXRlZFNpemU9dGhpcy5jaGlsZC5jYWxjRXN0aW1hdGVkU2l6ZSgpLHRoaXMucmVjdC53aWR0aD10aGlzLmVzdGltYXRlZFNpemUsdGhpcy5yZWN0LmhlaWdodD10aGlzLmVzdGltYXRlZFNpemUsdGhpcy5lc3RpbWF0ZWRTaXplKX0saC5wcm90b3R5cGUuc2NhdHRlcj1mdW5jdGlvbigpe3ZhciBkLHAsbT0tcy5JTklUSUFMX1dPUkxEX0JPVU5EQVJZLGc9cy5JTklUSUFMX1dPUkxEX0JPVU5EQVJZO2Q9cy5XT1JMRF9DRU5URVJfWCtsLm5leHREb3VibGUoKSooZy1tKSttO3ZhciB5PS1zLklOSVRJQUxfV09STERfQk9VTkRBUlksdj1zLklOSVRJQUxfV09STERfQk9VTkRBUlk7cD1zLldPUkxEX0NFTlRFUl9ZK2wubmV4dERvdWJsZSgpKih2LXkpK3ksdGhpcy5yZWN0Lng9ZCx0aGlzLnJlY3QueT1wfSxoLnByb3RvdHlwZS51cGRhdGVCb3VuZHM9ZnVuY3Rpb24oKXtpZih0aGlzLmdldENoaWxkKCk9PW51bGwpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7aWYodGhpcy5nZXRDaGlsZCgpLmdldE5vZGVzKCkubGVuZ3RoIT0wKXt2YXIgZD10aGlzLmdldENoaWxkKCk7aWYoZC51cGRhdGVCb3VuZHMoITApLHRoaXMucmVjdC54PWQuZ2V0TGVmdCgpLHRoaXMucmVjdC55PWQuZ2V0VG9wKCksdGhpcy5zZXRXaWR0aChkLmdldFJpZ2h0KCktZC5nZXRMZWZ0KCkpLHRoaXMuc2V0SGVpZ2h0KGQuZ2V0Qm90dG9tKCktZC5nZXRUb3AoKSkscy5OT0RFX0RJTUVOU0lPTlNfSU5DTFVERV9MQUJFTFMpe3ZhciBwPWQuZ2V0UmlnaHQoKS1kLmdldExlZnQoKSxtPWQuZ2V0Qm90dG9tKCktZC5nZXRUb3AoKTt0aGlzLmxhYmVsV2lkdGg+cCYmKHRoaXMucmVjdC54LT0odGhpcy5sYWJlbFdpZHRoLXApLzIsdGhpcy5zZXRXaWR0aCh0aGlzLmxhYmVsV2lkdGgpKSx0aGlzLmxhYmVsSGVpZ2h0Pm0mJih0aGlzLmxhYmVsUG9zPT0iY2VudGVyIj90aGlzLnJlY3QueS09KHRoaXMubGFiZWxIZWlnaHQtbSkvMjp0aGlzLmxhYmVsUG9zPT0idG9wIiYmKHRoaXMucmVjdC55LT10aGlzLmxhYmVsSGVpZ2h0LW0pLHRoaXMuc2V0SGVpZ2h0KHRoaXMubGFiZWxIZWlnaHQpKX19fSxoLnByb3RvdHlwZS5nZXRJbmNsdXNpb25UcmVlRGVwdGg9ZnVuY3Rpb24oKXtpZih0aGlzLmluY2x1c2lvblRyZWVEZXB0aD09aS5NQVhfVkFMVUUpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7cmV0dXJuIHRoaXMuaW5jbHVzaW9uVHJlZURlcHRofSxoLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oZCl7dmFyIHA9dGhpcy5yZWN0Lng7cD5zLldPUkxEX0JPVU5EQVJZP3A9cy5XT1JMRF9CT1VOREFSWTpwPC1zLldPUkxEX0JPVU5EQVJZJiYocD0tcy5XT1JMRF9CT1VOREFSWSk7dmFyIG09dGhpcy5yZWN0Lnk7bT5zLldPUkxEX0JPVU5EQVJZP209cy5XT1JMRF9CT1VOREFSWTptPC1zLldPUkxEX0JPVU5EQVJZJiYobT0tcy5XT1JMRF9CT1VOREFSWSk7dmFyIGc9bmV3IHUocCxtKSx5PWQuaW52ZXJzZVRyYW5zZm9ybVBvaW50KGcpO3RoaXMuc2V0TG9jYXRpb24oeS54LHkueSl9LGgucHJvdG90eXBlLmdldExlZnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0Lnh9LGgucHJvdG90eXBlLmdldFJpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC54K3RoaXMucmVjdC53aWR0aH0saC5wcm90b3R5cGUuZ2V0VG9wPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC55fSxoLnByb3RvdHlwZS5nZXRCb3R0b209ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0LnkrdGhpcy5yZWN0LmhlaWdodH0saC5wcm90b3R5cGUuZ2V0UGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXI9PW51bGw/bnVsbDp0aGlzLm93bmVyLmdldFBhcmVudCgpfSx0LmV4cG9ydHM9aH0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGksYSl7aT09bnVsbCYmYT09bnVsbD8odGhpcy54PTAsdGhpcy55PTApOih0aGlzLng9aSx0aGlzLnk9YSl9byhuLCJQb2ludEQiKSxuLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueH0sbi5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnl9LG4ucHJvdG90eXBlLnNldFg9ZnVuY3Rpb24oaSl7dGhpcy54PWl9LG4ucHJvdG90eXBlLnNldFk9ZnVuY3Rpb24oaSl7dGhpcy55PWl9LG4ucHJvdG90eXBlLmdldERpZmZlcmVuY2U9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyBEaW1lbnNpb25EKHRoaXMueC1pLngsdGhpcy55LWkueSl9LG4ucHJvdG90eXBlLmdldENvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcy54LHRoaXMueSl9LG4ucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbihpKXtyZXR1cm4gdGhpcy54Kz1pLndpZHRoLHRoaXMueSs9aS5oZWlnaHQsdGhpc30sdC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49cigyKSxpPXIoMTApLGE9cigwKSxzPXIoNiksbD1yKDMpLHU9cigxKSxoPXIoMTMpLGY9cigxMiksZD1yKDExKTtmdW5jdGlvbiBwKGcseSx2KXtuLmNhbGwodGhpcyx2KSx0aGlzLmVzdGltYXRlZFNpemU9aS5NSU5fVkFMVUUsdGhpcy5tYXJnaW49YS5ERUZBVUxUX0dSQVBIX01BUkdJTix0aGlzLmVkZ2VzPVtdLHRoaXMubm9kZXM9W10sdGhpcy5pc0Nvbm5lY3RlZD0hMSx0aGlzLnBhcmVudD1nLHkhPW51bGwmJnkgaW5zdGFuY2VvZiBzP3RoaXMuZ3JhcGhNYW5hZ2VyPXk6eSE9bnVsbCYmeSBpbnN0YW5jZW9mIExheW91dCYmKHRoaXMuZ3JhcGhNYW5hZ2VyPXkuZ3JhcGhNYW5hZ2VyKX1vKHAsIkxHcmFwaCIpLHAucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpO2Zvcih2YXIgbSBpbiBuKXBbbV09blttXTtwLnByb3RvdHlwZS5nZXROb2Rlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVzfSxwLnByb3RvdHlwZS5nZXRFZGdlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2VzfSxwLnByb3RvdHlwZS5nZXRHcmFwaE1hbmFnZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXJ9LHAucHJvdG90eXBlLmdldFBhcmVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudH0scC5wcm90b3R5cGUuZ2V0TGVmdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxlZnR9LHAucHJvdG90eXBlLmdldFJpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmlnaHR9LHAucHJvdG90eXBlLmdldFRvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvcH0scC5wcm90b3R5cGUuZ2V0Qm90dG9tPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYm90dG9tfSxwLnByb3RvdHlwZS5pc0Nvbm5lY3RlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzQ29ubmVjdGVkfSxwLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyx5LHYpe2lmKHk9PW51bGwmJnY9PW51bGwpe3ZhciB4PWc7aWYodGhpcy5ncmFwaE1hbmFnZXI9PW51bGwpdGhyb3ciR3JhcGggaGFzIG5vIGdyYXBoIG1nciEiO2lmKHRoaXMuZ2V0Tm9kZXMoKS5pbmRleE9mKHgpPi0xKXRocm93Ik5vZGUgYWxyZWFkeSBpbiBncmFwaCEiO3JldHVybiB4Lm93bmVyPXRoaXMsdGhpcy5nZXROb2RlcygpLnB1c2goeCkseH1lbHNle3ZhciBiPWc7aWYoISh0aGlzLmdldE5vZGVzKCkuaW5kZXhPZih5KT4tMSYmdGhpcy5nZXROb2RlcygpLmluZGV4T2Yodik+LTEpKXRocm93IlNvdXJjZSBvciB0YXJnZXQgbm90IGluIGdyYXBoISI7aWYoISh5Lm93bmVyPT12Lm93bmVyJiZ5Lm93bmVyPT10aGlzKSl0aHJvdyJCb3RoIG93bmVycyBtdXN0IGJlIHRoaXMgZ3JhcGghIjtyZXR1cm4geS5vd25lciE9di5vd25lcj9udWxsOihiLnNvdXJjZT15LGIudGFyZ2V0PXYsYi5pc0ludGVyR3JhcGg9ITEsdGhpcy5nZXRFZGdlcygpLnB1c2goYikseS5lZGdlcy5wdXNoKGIpLHYhPXkmJnYuZWRnZXMucHVzaChiKSxiKX19LHAucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihnKXt2YXIgeT1nO2lmKGcgaW5zdGFuY2VvZiBsKXtpZih5PT1udWxsKXRocm93Ik5vZGUgaXMgbnVsbCEiO2lmKCEoeS5vd25lciE9bnVsbCYmeS5vd25lcj09dGhpcykpdGhyb3ciT3duZXIgZ3JhcGggaXMgaW52YWxpZCEiO2lmKHRoaXMuZ3JhcGhNYW5hZ2VyPT1udWxsKXRocm93Ik93bmVyIGdyYXBoIG1hbmFnZXIgaXMgaW52YWxpZCEiO2Zvcih2YXIgdj15LmVkZ2VzLnNsaWNlKCkseCxiPXYubGVuZ3RoLHc9MDt3PGI7dysrKXg9dlt3XSx4LmlzSW50ZXJHcmFwaD90aGlzLmdyYXBoTWFuYWdlci5yZW1vdmUoeCk6eC5zb3VyY2Uub3duZXIucmVtb3ZlKHgpO3ZhciBDPXRoaXMubm9kZXMuaW5kZXhPZih5KTtpZihDPT0tMSl0aHJvdyJOb2RlIG5vdCBpbiBvd25lciBub2RlIGxpc3QhIjt0aGlzLm5vZGVzLnNwbGljZShDLDEpfWVsc2UgaWYoZyBpbnN0YW5jZW9mIHUpe3ZhciB4PWc7aWYoeD09bnVsbCl0aHJvdyJFZGdlIGlzIG51bGwhIjtpZighKHguc291cmNlIT1udWxsJiZ4LnRhcmdldCE9bnVsbCkpdGhyb3ciU291cmNlIGFuZC9vciB0YXJnZXQgaXMgbnVsbCEiO2lmKCEoeC5zb3VyY2Uub3duZXIhPW51bGwmJngudGFyZ2V0Lm93bmVyIT1udWxsJiZ4LnNvdXJjZS5vd25lcj09dGhpcyYmeC50YXJnZXQub3duZXI9PXRoaXMpKXRocm93IlNvdXJjZSBhbmQvb3IgdGFyZ2V0IG93bmVyIGlzIGludmFsaWQhIjt2YXIgVD14LnNvdXJjZS5lZGdlcy5pbmRleE9mKHgpLEU9eC50YXJnZXQuZWRnZXMuaW5kZXhPZih4KTtpZighKFQ+LTEmJkU+LTEpKXRocm93IlNvdXJjZSBhbmQvb3IgdGFyZ2V0IGRvZXNuJ3Qga25vdyB0aGlzIGVkZ2UhIjt4LnNvdXJjZS5lZGdlcy5zcGxpY2UoVCwxKSx4LnRhcmdldCE9eC5zb3VyY2UmJngudGFyZ2V0LmVkZ2VzLnNwbGljZShFLDEpO3ZhciBDPXguc291cmNlLm93bmVyLmdldEVkZ2VzKCkuaW5kZXhPZih4KTtpZihDPT0tMSl0aHJvdyJOb3QgaW4gb3duZXIncyBlZGdlIGxpc3QhIjt4LnNvdXJjZS5vd25lci5nZXRFZGdlcygpLnNwbGljZShDLDEpfX0scC5wcm90b3R5cGUudXBkYXRlTGVmdFRvcD1mdW5jdGlvbigpe2Zvcih2YXIgZz1pLk1BWF9WQUxVRSx5PWkuTUFYX1ZBTFVFLHYseCxiLHc9dGhpcy5nZXROb2RlcygpLEM9dy5sZW5ndGgsVD0wO1Q8QztUKyspe3ZhciBFPXdbVF07dj1FLmdldFRvcCgpLHg9RS5nZXRMZWZ0KCksZz52JiYoZz12KSx5PngmJih5PXgpfXJldHVybiBnPT1pLk1BWF9WQUxVRT9udWxsOih3WzBdLmdldFBhcmVudCgpLnBhZGRpbmdMZWZ0IT1udWxsP2I9d1swXS5nZXRQYXJlbnQoKS5wYWRkaW5nTGVmdDpiPXRoaXMubWFyZ2luLHRoaXMubGVmdD15LWIsdGhpcy50b3A9Zy1iLG5ldyBmKHRoaXMubGVmdCx0aGlzLnRvcCkpfSxwLnByb3RvdHlwZS51cGRhdGVCb3VuZHM9ZnVuY3Rpb24oZyl7Zm9yKHZhciB5PWkuTUFYX1ZBTFVFLHY9LWkuTUFYX1ZBTFVFLHg9aS5NQVhfVkFMVUUsYj0taS5NQVhfVkFMVUUsdyxDLFQsRSxBLFM9dGhpcy5ub2RlcyxfPVMubGVuZ3RoLEk9MDtJPF87SSsrKXt2YXIgRD1TW0ldO2cmJkQuY2hpbGQhPW51bGwmJkQudXBkYXRlQm91bmRzKCksdz1ELmdldExlZnQoKSxDPUQuZ2V0UmlnaHQoKSxUPUQuZ2V0VG9wKCksRT1ELmdldEJvdHRvbSgpLHk+dyYmKHk9dyksdjxDJiYodj1DKSx4PlQmJih4PVQpLGI8RSYmKGI9RSl9dmFyIGs9bmV3IGgoeSx4LHYteSxiLXgpO3k9PWkuTUFYX1ZBTFVFJiYodGhpcy5sZWZ0PXRoaXMucGFyZW50LmdldExlZnQoKSx0aGlzLnJpZ2h0PXRoaXMucGFyZW50LmdldFJpZ2h0KCksdGhpcy50b3A9dGhpcy5wYXJlbnQuZ2V0VG9wKCksdGhpcy5ib3R0b209dGhpcy5wYXJlbnQuZ2V0Qm90dG9tKCkpLFNbMF0uZ2V0UGFyZW50KCkucGFkZGluZ0xlZnQhPW51bGw/QT1TWzBdLmdldFBhcmVudCgpLnBhZGRpbmdMZWZ0OkE9dGhpcy5tYXJnaW4sdGhpcy5sZWZ0PWsueC1BLHRoaXMucmlnaHQ9ay54K2sud2lkdGgrQSx0aGlzLnRvcD1rLnktQSx0aGlzLmJvdHRvbT1rLnkray5oZWlnaHQrQX0scC5jYWxjdWxhdGVCb3VuZHM9ZnVuY3Rpb24oZyl7Zm9yKHZhciB5PWkuTUFYX1ZBTFVFLHY9LWkuTUFYX1ZBTFVFLHg9aS5NQVhfVkFMVUUsYj0taS5NQVhfVkFMVUUsdyxDLFQsRSxBPWcubGVuZ3RoLFM9MDtTPEE7UysrKXt2YXIgXz1nW1NdO3c9Xy5nZXRMZWZ0KCksQz1fLmdldFJpZ2h0KCksVD1fLmdldFRvcCgpLEU9Xy5nZXRCb3R0b20oKSx5PncmJih5PXcpLHY8QyYmKHY9QykseD5UJiYoeD1UKSxiPEUmJihiPUUpfXZhciBJPW5ldyBoKHkseCx2LXksYi14KTtyZXR1cm4gSX0scC5wcm90b3R5cGUuZ2V0SW5jbHVzaW9uVHJlZURlcHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM9PXRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKT8xOnRoaXMucGFyZW50LmdldEluY2x1c2lvblRyZWVEZXB0aCgpfSxwLnByb3RvdHlwZS5nZXRFc3RpbWF0ZWRTaXplPWZ1bmN0aW9uKCl7aWYodGhpcy5lc3RpbWF0ZWRTaXplPT1pLk1JTl9WQUxVRSl0aHJvdyJhc3NlcnQgZmFpbGVkIjtyZXR1cm4gdGhpcy5lc3RpbWF0ZWRTaXplfSxwLnByb3RvdHlwZS5jYWxjRXN0aW1hdGVkU2l6ZT1mdW5jdGlvbigpe2Zvcih2YXIgZz0wLHk9dGhpcy5ub2Rlcyx2PXkubGVuZ3RoLHg9MDt4PHY7eCsrKXt2YXIgYj15W3hdO2crPWIuY2FsY0VzdGltYXRlZFNpemUoKX1yZXR1cm4gZz09MD90aGlzLmVzdGltYXRlZFNpemU9YS5FTVBUWV9DT01QT1VORF9OT0RFX1NJWkU6dGhpcy5lc3RpbWF0ZWRTaXplPWcvTWF0aC5zcXJ0KHRoaXMubm9kZXMubGVuZ3RoKSx0aGlzLmVzdGltYXRlZFNpemV9LHAucHJvdG90eXBlLnVwZGF0ZUNvbm5lY3RlZD1mdW5jdGlvbigpe3ZhciBnPXRoaXM7aWYodGhpcy5ub2Rlcy5sZW5ndGg9PTApe3RoaXMuaXNDb25uZWN0ZWQ9ITA7cmV0dXJufXZhciB5PW5ldyBkLHY9bmV3IFNldCx4PXRoaXMubm9kZXNbMF0sYix3LEM9eC53aXRoQ2hpbGRyZW4oKTtmb3IoQy5mb3JFYWNoKGZ1bmN0aW9uKEkpe3kucHVzaChJKSx2LmFkZChJKX0pO3kubGVuZ3RoIT09MDspe3g9eS5zaGlmdCgpLGI9eC5nZXRFZGdlcygpO2Zvcih2YXIgVD1iLmxlbmd0aCxFPTA7RTxUO0UrKyl7dmFyIEE9YltFXTtpZih3PUEuZ2V0T3RoZXJFbmRJbkdyYXBoKHgsdGhpcyksdyE9bnVsbCYmIXYuaGFzKHcpKXt2YXIgUz13LndpdGhDaGlsZHJlbigpO1MuZm9yRWFjaChmdW5jdGlvbihJKXt5LnB1c2goSSksdi5hZGQoSSl9KX19fWlmKHRoaXMuaXNDb25uZWN0ZWQ9ITEsdi5zaXplPj10aGlzLm5vZGVzLmxlbmd0aCl7dmFyIF89MDt2LmZvckVhY2goZnVuY3Rpb24oSSl7SS5vd25lcj09ZyYmXysrfSksXz09dGhpcy5ub2Rlcy5sZW5ndGgmJih0aGlzLmlzQ29ubmVjdGVkPSEwKX19LHQuZXhwb3J0cz1wfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGk9cigxKTtmdW5jdGlvbiBhKHMpe249cig1KSx0aGlzLmxheW91dD1zLHRoaXMuZ3JhcGhzPVtdLHRoaXMuZWRnZXM9W119byhhLCJMR3JhcGhNYW5hZ2VyIiksYS5wcm90b3R5cGUuYWRkUm9vdD1mdW5jdGlvbigpe3ZhciBzPXRoaXMubGF5b3V0Lm5ld0dyYXBoKCksbD10aGlzLmxheW91dC5uZXdOb2RlKG51bGwpLHU9dGhpcy5hZGQocyxsKTtyZXR1cm4gdGhpcy5zZXRSb290R3JhcGgodSksdGhpcy5yb290R3JhcGh9LGEucHJvdG90eXBlLmFkZD1mdW5jdGlvbihzLGwsdSxoLGYpe2lmKHU9PW51bGwmJmg9PW51bGwmJmY9PW51bGwpe2lmKHM9PW51bGwpdGhyb3ciR3JhcGggaXMgbnVsbCEiO2lmKGw9PW51bGwpdGhyb3ciUGFyZW50IG5vZGUgaXMgbnVsbCEiO2lmKHRoaXMuZ3JhcGhzLmluZGV4T2Yocyk+LTEpdGhyb3ciR3JhcGggYWxyZWFkeSBpbiB0aGlzIGdyYXBoIG1nciEiO2lmKHRoaXMuZ3JhcGhzLnB1c2gocykscy5wYXJlbnQhPW51bGwpdGhyb3ciQWxyZWFkeSBoYXMgYSBwYXJlbnQhIjtpZihsLmNoaWxkIT1udWxsKXRocm93IkFscmVhZHkgaGFzIGEgY2hpbGQhIjtyZXR1cm4gcy5wYXJlbnQ9bCxsLmNoaWxkPXMsc31lbHNle2Y9dSxoPWwsdT1zO3ZhciBkPWguZ2V0T3duZXIoKSxwPWYuZ2V0T3duZXIoKTtpZighKGQhPW51bGwmJmQuZ2V0R3JhcGhNYW5hZ2VyKCk9PXRoaXMpKXRocm93IlNvdXJjZSBub3QgaW4gdGhpcyBncmFwaCBtZ3IhIjtpZighKHAhPW51bGwmJnAuZ2V0R3JhcGhNYW5hZ2VyKCk9PXRoaXMpKXRocm93IlRhcmdldCBub3QgaW4gdGhpcyBncmFwaCBtZ3IhIjtpZihkPT1wKXJldHVybiB1LmlzSW50ZXJHcmFwaD0hMSxkLmFkZCh1LGgsZik7aWYodS5pc0ludGVyR3JhcGg9ITAsdS5zb3VyY2U9aCx1LnRhcmdldD1mLHRoaXMuZWRnZXMuaW5kZXhPZih1KT4tMSl0aHJvdyJFZGdlIGFscmVhZHkgaW4gaW50ZXItZ3JhcGggZWRnZSBsaXN0ISI7aWYodGhpcy5lZGdlcy5wdXNoKHUpLCEodS5zb3VyY2UhPW51bGwmJnUudGFyZ2V0IT1udWxsKSl0aHJvdyJFZGdlIHNvdXJjZSBhbmQvb3IgdGFyZ2V0IGlzIG51bGwhIjtpZighKHUuc291cmNlLmVkZ2VzLmluZGV4T2YodSk9PS0xJiZ1LnRhcmdldC5lZGdlcy5pbmRleE9mKHUpPT0tMSkpdGhyb3ciRWRnZSBhbHJlYWR5IGluIHNvdXJjZSBhbmQvb3IgdGFyZ2V0IGluY2lkZW5jeSBsaXN0ISI7cmV0dXJuIHUuc291cmNlLmVkZ2VzLnB1c2godSksdS50YXJnZXQuZWRnZXMucHVzaCh1KSx1fX0sYS5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHMpe2lmKHMgaW5zdGFuY2VvZiBuKXt2YXIgbD1zO2lmKGwuZ2V0R3JhcGhNYW5hZ2VyKCkhPXRoaXMpdGhyb3ciR3JhcGggbm90IGluIHRoaXMgZ3JhcGggbWdyIjtpZighKGw9PXRoaXMucm9vdEdyYXBofHxsLnBhcmVudCE9bnVsbCYmbC5wYXJlbnQuZ3JhcGhNYW5hZ2VyPT10aGlzKSl0aHJvdyJJbnZhbGlkIHBhcmVudCBub2RlISI7dmFyIHU9W107dT11LmNvbmNhdChsLmdldEVkZ2VzKCkpO2Zvcih2YXIgaCxmPXUubGVuZ3RoLGQ9MDtkPGY7ZCsrKWg9dVtkXSxsLnJlbW92ZShoKTt2YXIgcD1bXTtwPXAuY29uY2F0KGwuZ2V0Tm9kZXMoKSk7dmFyIG07Zj1wLmxlbmd0aDtmb3IodmFyIGQ9MDtkPGY7ZCsrKW09cFtkXSxsLnJlbW92ZShtKTtsPT10aGlzLnJvb3RHcmFwaCYmdGhpcy5zZXRSb290R3JhcGgobnVsbCk7dmFyIGc9dGhpcy5ncmFwaHMuaW5kZXhPZihsKTt0aGlzLmdyYXBocy5zcGxpY2UoZywxKSxsLnBhcmVudD1udWxsfWVsc2UgaWYocyBpbnN0YW5jZW9mIGkpe2lmKGg9cyxoPT1udWxsKXRocm93IkVkZ2UgaXMgbnVsbCEiO2lmKCFoLmlzSW50ZXJHcmFwaCl0aHJvdyJOb3QgYW4gaW50ZXItZ3JhcGggZWRnZSEiO2lmKCEoaC5zb3VyY2UhPW51bGwmJmgudGFyZ2V0IT1udWxsKSl0aHJvdyJTb3VyY2UgYW5kL29yIHRhcmdldCBpcyBudWxsISI7aWYoIShoLnNvdXJjZS5lZGdlcy5pbmRleE9mKGgpIT0tMSYmaC50YXJnZXQuZWRnZXMuaW5kZXhPZihoKSE9LTEpKXRocm93IlNvdXJjZSBhbmQvb3IgdGFyZ2V0IGRvZXNuJ3Qga25vdyB0aGlzIGVkZ2UhIjt2YXIgZz1oLnNvdXJjZS5lZGdlcy5pbmRleE9mKGgpO2lmKGguc291cmNlLmVkZ2VzLnNwbGljZShnLDEpLGc9aC50YXJnZXQuZWRnZXMuaW5kZXhPZihoKSxoLnRhcmdldC5lZGdlcy5zcGxpY2UoZywxKSwhKGguc291cmNlLm93bmVyIT1udWxsJiZoLnNvdXJjZS5vd25lci5nZXRHcmFwaE1hbmFnZXIoKSE9bnVsbCkpdGhyb3ciRWRnZSBvd25lciBncmFwaCBvciBvd25lciBncmFwaCBtYW5hZ2VyIGlzIG51bGwhIjtpZihoLnNvdXJjZS5vd25lci5nZXRHcmFwaE1hbmFnZXIoKS5lZGdlcy5pbmRleE9mKGgpPT0tMSl0aHJvdyJOb3QgaW4gb3duZXIgZ3JhcGggbWFuYWdlcidzIGVkZ2UgbGlzdCEiO3ZhciBnPWguc291cmNlLm93bmVyLmdldEdyYXBoTWFuYWdlcigpLmVkZ2VzLmluZGV4T2YoaCk7aC5zb3VyY2Uub3duZXIuZ2V0R3JhcGhNYW5hZ2VyKCkuZWRnZXMuc3BsaWNlKGcsMSl9fSxhLnByb3RvdHlwZS51cGRhdGVCb3VuZHM9ZnVuY3Rpb24oKXt0aGlzLnJvb3RHcmFwaC51cGRhdGVCb3VuZHMoITApfSxhLnByb3RvdHlwZS5nZXRHcmFwaHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaHN9LGEucHJvdG90eXBlLmdldEFsbE5vZGVzPWZ1bmN0aW9uKCl7aWYodGhpcy5hbGxOb2Rlcz09bnVsbCl7Zm9yKHZhciBzPVtdLGw9dGhpcy5nZXRHcmFwaHMoKSx1PWwubGVuZ3RoLGg9MDtoPHU7aCsrKXM9cy5jb25jYXQobFtoXS5nZXROb2RlcygpKTt0aGlzLmFsbE5vZGVzPXN9cmV0dXJuIHRoaXMuYWxsTm9kZXN9LGEucHJvdG90eXBlLnJlc2V0QWxsTm9kZXM9ZnVuY3Rpb24oKXt0aGlzLmFsbE5vZGVzPW51bGx9LGEucHJvdG90eXBlLnJlc2V0QWxsRWRnZXM9ZnVuY3Rpb24oKXt0aGlzLmFsbEVkZ2VzPW51bGx9LGEucHJvdG90eXBlLnJlc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb249ZnVuY3Rpb24oKXt0aGlzLmFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPW51bGx9LGEucHJvdG90eXBlLmdldEFsbEVkZ2VzPWZ1bmN0aW9uKCl7aWYodGhpcy5hbGxFZGdlcz09bnVsbCl7Zm9yKHZhciBzPVtdLGw9dGhpcy5nZXRHcmFwaHMoKSx1PWwubGVuZ3RoLGg9MDtoPGwubGVuZ3RoO2grKylzPXMuY29uY2F0KGxbaF0uZ2V0RWRnZXMoKSk7cz1zLmNvbmNhdCh0aGlzLmVkZ2VzKSx0aGlzLmFsbEVkZ2VzPXN9cmV0dXJuIHRoaXMuYWxsRWRnZXN9LGEucHJvdG90eXBlLmdldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb259LGEucHJvdG90eXBlLnNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPWZ1bmN0aW9uKHMpe2lmKHRoaXMuYWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24hPW51bGwpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7dGhpcy5hbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbj1zfSxhLnByb3RvdHlwZS5nZXRSb290PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdEdyYXBofSxhLnByb3RvdHlwZS5zZXRSb290R3JhcGg9ZnVuY3Rpb24ocyl7aWYocy5nZXRHcmFwaE1hbmFnZXIoKSE9dGhpcyl0aHJvdyJSb290IG5vdCBpbiB0aGlzIGdyYXBoIG1nciEiO3RoaXMucm9vdEdyYXBoPXMscy5wYXJlbnQ9PW51bGwmJihzLnBhcmVudD10aGlzLmxheW91dC5uZXdOb2RlKCJSb290IG5vZGUiKSl9LGEucHJvdG90eXBlLmdldExheW91dD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxheW91dH0sYS5wcm90b3R5cGUuaXNPbmVBbmNlc3Rvck9mT3RoZXI9ZnVuY3Rpb24ocyxsKXtpZighKHMhPW51bGwmJmwhPW51bGwpKXRocm93ImFzc2VydCBmYWlsZWQiO2lmKHM9PWwpcmV0dXJuITA7dmFyIHU9cy5nZXRPd25lcigpLGg7ZG97aWYoaD11LmdldFBhcmVudCgpLGg9PW51bGwpYnJlYWs7aWYoaD09bClyZXR1cm4hMDtpZih1PWguZ2V0T3duZXIoKSx1PT1udWxsKWJyZWFrfXdoaWxlKCEwKTt1PWwuZ2V0T3duZXIoKTtkb3tpZihoPXUuZ2V0UGFyZW50KCksaD09bnVsbClicmVhaztpZihoPT1zKXJldHVybiEwO2lmKHU9aC5nZXRPd25lcigpLHU9PW51bGwpYnJlYWt9d2hpbGUoITApO3JldHVybiExfSxhLnByb3RvdHlwZS5jYWxjTG93ZXN0Q29tbW9uQW5jZXN0b3JzPWZ1bmN0aW9uKCl7Zm9yKHZhciBzLGwsdSxoLGYsZD10aGlzLmdldEFsbEVkZ2VzKCkscD1kLmxlbmd0aCxtPTA7bTxwO20rKyl7aWYocz1kW21dLGw9cy5zb3VyY2UsdT1zLnRhcmdldCxzLmxjYT1udWxsLHMuc291cmNlSW5MY2E9bCxzLnRhcmdldEluTGNhPXUsbD09dSl7cy5sY2E9bC5nZXRPd25lcigpO2NvbnRpbnVlfWZvcihoPWwuZ2V0T3duZXIoKTtzLmxjYT09bnVsbDspe2ZvcihzLnRhcmdldEluTGNhPXUsZj11LmdldE93bmVyKCk7cy5sY2E9PW51bGw7KXtpZihmPT1oKXtzLmxjYT1mO2JyZWFrfWlmKGY9PXRoaXMucm9vdEdyYXBoKWJyZWFrO2lmKHMubGNhIT1udWxsKXRocm93ImFzc2VydCBmYWlsZWQiO3MudGFyZ2V0SW5MY2E9Zi5nZXRQYXJlbnQoKSxmPXMudGFyZ2V0SW5MY2EuZ2V0T3duZXIoKX1pZihoPT10aGlzLnJvb3RHcmFwaClicmVhaztzLmxjYT09bnVsbCYmKHMuc291cmNlSW5MY2E9aC5nZXRQYXJlbnQoKSxoPXMuc291cmNlSW5MY2EuZ2V0T3duZXIoKSl9aWYocy5sY2E9PW51bGwpdGhyb3ciYXNzZXJ0IGZhaWxlZCJ9fSxhLnByb3RvdHlwZS5jYWxjTG93ZXN0Q29tbW9uQW5jZXN0b3I9ZnVuY3Rpb24ocyxsKXtpZihzPT1sKXJldHVybiBzLmdldE93bmVyKCk7dmFyIHU9cy5nZXRPd25lcigpO2Rve2lmKHU9PW51bGwpYnJlYWs7dmFyIGg9bC5nZXRPd25lcigpO2Rve2lmKGg9PW51bGwpYnJlYWs7aWYoaD09dSlyZXR1cm4gaDtoPWguZ2V0UGFyZW50KCkuZ2V0T3duZXIoKX13aGlsZSghMCk7dT11LmdldFBhcmVudCgpLmdldE93bmVyKCl9d2hpbGUoITApO3JldHVybiB1fSxhLnByb3RvdHlwZS5jYWxjSW5jbHVzaW9uVHJlZURlcHRocz1mdW5jdGlvbihzLGwpe3M9PW51bGwmJmw9PW51bGwmJihzPXRoaXMucm9vdEdyYXBoLGw9MSk7Zm9yKHZhciB1LGg9cy5nZXROb2RlcygpLGY9aC5sZW5ndGgsZD0wO2Q8ZjtkKyspdT1oW2RdLHUuaW5jbHVzaW9uVHJlZURlcHRoPWwsdS5jaGlsZCE9bnVsbCYmdGhpcy5jYWxjSW5jbHVzaW9uVHJlZURlcHRocyh1LmNoaWxkLGwrMSl9LGEucHJvdG90eXBlLmluY2x1ZGVzSW52YWxpZEVkZ2U9ZnVuY3Rpb24oKXtmb3IodmFyIHMsbD10aGlzLmVkZ2VzLmxlbmd0aCx1PTA7dTxsO3UrKylpZihzPXRoaXMuZWRnZXNbdV0sdGhpcy5pc09uZUFuY2VzdG9yT2ZPdGhlcihzLnNvdXJjZSxzLnRhcmdldCkpcmV0dXJuITA7cmV0dXJuITF9LHQuZXhwb3J0cz1hfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMCk7ZnVuY3Rpb24gaSgpe31vKGksIkZETGF5b3V0Q29uc3RhbnRzIik7Zm9yKHZhciBhIGluIG4paVthXT1uW2FdO2kuTUFYX0lURVJBVElPTlM9MjUwMCxpLkRFRkFVTFRfRURHRV9MRU5HVEg9NTAsaS5ERUZBVUxUX1NQUklOR19TVFJFTkdUSD0uNDUsaS5ERUZBVUxUX1JFUFVMU0lPTl9TVFJFTkdUSD00NTAwLGkuREVGQVVMVF9HUkFWSVRZX1NUUkVOR1RIPS40LGkuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1NUUkVOR1RIPTEsaS5ERUZBVUxUX0dSQVZJVFlfUkFOR0VfRkFDVE9SPTMuOCxpLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9SQU5HRV9GQUNUT1I9MS41LGkuREVGQVVMVF9VU0VfU01BUlRfSURFQUxfRURHRV9MRU5HVEhfQ0FMQ1VMQVRJT049ITAsaS5ERUZBVUxUX1VTRV9TTUFSVF9SRVBVTFNJT05fUkFOR0VfQ0FMQ1VMQVRJT049ITAsaS5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMPS4zLGkuQ09PTElOR19BREFQVEFUSU9OX0ZBQ1RPUj0uMzMsaS5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQ9MWUzLGkuQURBUFRBVElPTl9VUFBFUl9OT0RFX0xJTUlUPTVlMyxpLk1BWF9OT0RFX0RJU1BMQUNFTUVOVF9JTkNSRU1FTlRBTD0xMDAsaS5NQVhfTk9ERV9ESVNQTEFDRU1FTlQ9aS5NQVhfTk9ERV9ESVNQTEFDRU1FTlRfSU5DUkVNRU5UQUwqMyxpLk1JTl9SRVBVTFNJT05fRElTVD1pLkRFRkFVTFRfRURHRV9MRU5HVEgvMTAsaS5DT05WRVJHRU5DRV9DSEVDS19QRVJJT0Q9MTAwLGkuUEVSX0xFVkVMX0lERUFMX0VER0VfTEVOR1RIX0ZBQ1RPUj0uMSxpLk1JTl9FREdFX0xFTkdUSD0xLGkuR1JJRF9DQUxDVUxBVElPTl9DSEVDS19QRVJJT0Q9MTAsdC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxMik7ZnVuY3Rpb24gaSgpe31vKGksIklHZW9tZXRyeSIpLGkuY2FsY1NlcGFyYXRpb25BbW91bnQ9ZnVuY3Rpb24oYSxzLGwsdSl7aWYoIWEuaW50ZXJzZWN0cyhzKSl0aHJvdyJhc3NlcnQgZmFpbGVkIjt2YXIgaD1uZXcgQXJyYXkoMik7dGhpcy5kZWNpZGVEaXJlY3Rpb25zRm9yT3ZlcmxhcHBpbmdOb2RlcyhhLHMsaCksbFswXT1NYXRoLm1pbihhLmdldFJpZ2h0KCkscy5nZXRSaWdodCgpKS1NYXRoLm1heChhLngscy54KSxsWzFdPU1hdGgubWluKGEuZ2V0Qm90dG9tKCkscy5nZXRCb3R0b20oKSktTWF0aC5tYXgoYS55LHMueSksYS5nZXRYKCk8PXMuZ2V0WCgpJiZhLmdldFJpZ2h0KCk+PXMuZ2V0UmlnaHQoKT9sWzBdKz1NYXRoLm1pbihzLmdldFgoKS1hLmdldFgoKSxhLmdldFJpZ2h0KCktcy5nZXRSaWdodCgpKTpzLmdldFgoKTw9YS5nZXRYKCkmJnMuZ2V0UmlnaHQoKT49YS5nZXRSaWdodCgpJiYobFswXSs9TWF0aC5taW4oYS5nZXRYKCktcy5nZXRYKCkscy5nZXRSaWdodCgpLWEuZ2V0UmlnaHQoKSkpLGEuZ2V0WSgpPD1zLmdldFkoKSYmYS5nZXRCb3R0b20oKT49cy5nZXRCb3R0b20oKT9sWzFdKz1NYXRoLm1pbihzLmdldFkoKS1hLmdldFkoKSxhLmdldEJvdHRvbSgpLXMuZ2V0Qm90dG9tKCkpOnMuZ2V0WSgpPD1hLmdldFkoKSYmcy5nZXRCb3R0b20oKT49YS5nZXRCb3R0b20oKSYmKGxbMV0rPU1hdGgubWluKGEuZ2V0WSgpLXMuZ2V0WSgpLHMuZ2V0Qm90dG9tKCktYS5nZXRCb3R0b20oKSkpO3ZhciBmPU1hdGguYWJzKChzLmdldENlbnRlclkoKS1hLmdldENlbnRlclkoKSkvKHMuZ2V0Q2VudGVyWCgpLWEuZ2V0Q2VudGVyWCgpKSk7cy5nZXRDZW50ZXJZKCk9PT1hLmdldENlbnRlclkoKSYmcy5nZXRDZW50ZXJYKCk9PT1hLmdldENlbnRlclgoKSYmKGY9MSk7dmFyIGQ9ZipsWzBdLHA9bFsxXS9mO2xbMF08cD9wPWxbMF06ZD1sWzFdLGxbMF09LTEqaFswXSoocC8yK3UpLGxbMV09LTEqaFsxXSooZC8yK3UpfSxpLmRlY2lkZURpcmVjdGlvbnNGb3JPdmVybGFwcGluZ05vZGVzPWZ1bmN0aW9uKGEscyxsKXthLmdldENlbnRlclgoKTxzLmdldENlbnRlclgoKT9sWzBdPS0xOmxbMF09MSxhLmdldENlbnRlclkoKTxzLmdldENlbnRlclkoKT9sWzFdPS0xOmxbMV09MX0saS5nZXRJbnRlcnNlY3Rpb24yPWZ1bmN0aW9uKGEscyxsKXt2YXIgdT1hLmdldENlbnRlclgoKSxoPWEuZ2V0Q2VudGVyWSgpLGY9cy5nZXRDZW50ZXJYKCksZD1zLmdldENlbnRlclkoKTtpZihhLmludGVyc2VjdHMocykpcmV0dXJuIGxbMF09dSxsWzFdPWgsbFsyXT1mLGxbM109ZCwhMDt2YXIgcD1hLmdldFgoKSxtPWEuZ2V0WSgpLGc9YS5nZXRSaWdodCgpLHk9YS5nZXRYKCksdj1hLmdldEJvdHRvbSgpLHg9YS5nZXRSaWdodCgpLGI9YS5nZXRXaWR0aEhhbGYoKSx3PWEuZ2V0SGVpZ2h0SGFsZigpLEM9cy5nZXRYKCksVD1zLmdldFkoKSxFPXMuZ2V0UmlnaHQoKSxBPXMuZ2V0WCgpLFM9cy5nZXRCb3R0b20oKSxfPXMuZ2V0UmlnaHQoKSxJPXMuZ2V0V2lkdGhIYWxmKCksRD1zLmdldEhlaWdodEhhbGYoKSxrPSExLEw9ITE7aWYodT09PWYpe2lmKGg+ZClyZXR1cm4gbFswXT11LGxbMV09bSxsWzJdPWYsbFszXT1TLCExO2lmKGg8ZClyZXR1cm4gbFswXT11LGxbMV09dixsWzJdPWYsbFszXT1ULCExfWVsc2UgaWYoaD09PWQpe2lmKHU+ZilyZXR1cm4gbFswXT1wLGxbMV09aCxsWzJdPUUsbFszXT1kLCExO2lmKHU8ZilyZXR1cm4gbFswXT1nLGxbMV09aCxsWzJdPUMsbFszXT1kLCExfWVsc2V7dmFyIFI9YS5oZWlnaHQvYS53aWR0aCxPPXMuaGVpZ2h0L3Mud2lkdGgsTT0oZC1oKS8oZi11KSxCPXZvaWQgMCxGPXZvaWQgMCxQPXZvaWQgMCx6PXZvaWQgMCwkPXZvaWQgMCxIPXZvaWQgMDtpZigtUj09PU0/dT5mPyhsWzBdPXksbFsxXT12LGs9ITApOihsWzBdPWcsbFsxXT1tLGs9ITApOlI9PT1NJiYodT5mPyhsWzBdPXAsbFsxXT1tLGs9ITApOihsWzBdPXgsbFsxXT12LGs9ITApKSwtTz09PU0/Zj51PyhsWzJdPUEsbFszXT1TLEw9ITApOihsWzJdPUUsbFszXT1ULEw9ITApOk89PT1NJiYoZj51PyhsWzJdPUMsbFszXT1ULEw9ITApOihsWzJdPV8sbFszXT1TLEw9ITApKSxrJiZMKXJldHVybiExO2lmKHU+Zj9oPmQ/KEI9dGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbihSLE0sNCksRj10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKE8sTSwyKSk6KEI9dGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbigtUixNLDMpLEY9dGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbigtTyxNLDEpKTpoPmQ/KEI9dGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbigtUixNLDEpLEY9dGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbigtTyxNLDMpKTooQj10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKFIsTSwyKSxGPXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oTyxNLDQpKSwhaylzd2l0Y2goQil7Y2FzZSAxOno9bSxQPXUrLXcvTSxsWzBdPVAsbFsxXT16O2JyZWFrO2Nhc2UgMjpQPXgsej1oK2IqTSxsWzBdPVAsbFsxXT16O2JyZWFrO2Nhc2UgMzp6PXYsUD11K3cvTSxsWzBdPVAsbFsxXT16O2JyZWFrO2Nhc2UgNDpQPXksej1oKy1iKk0sbFswXT1QLGxbMV09ejticmVha31pZighTClzd2l0Y2goRil7Y2FzZSAxOkg9VCwkPWYrLUQvTSxsWzJdPSQsbFszXT1IO2JyZWFrO2Nhc2UgMjokPV8sSD1kK0kqTSxsWzJdPSQsbFszXT1IO2JyZWFrO2Nhc2UgMzpIPVMsJD1mK0QvTSxsWzJdPSQsbFszXT1IO2JyZWFrO2Nhc2UgNDokPUEsSD1kKy1JKk0sbFsyXT0kLGxbM109SDticmVha319cmV0dXJuITF9LGkuZ2V0Q2FyZGluYWxEaXJlY3Rpb249ZnVuY3Rpb24oYSxzLGwpe3JldHVybiBhPnM/bDoxK2wlNH0saS5nZXRJbnRlcnNlY3Rpb249ZnVuY3Rpb24oYSxzLGwsdSl7aWYodT09bnVsbClyZXR1cm4gdGhpcy5nZXRJbnRlcnNlY3Rpb24yKGEscyxsKTt2YXIgaD1hLngsZj1hLnksZD1zLngscD1zLnksbT1sLngsZz1sLnkseT11Lngsdj11LnkseD12b2lkIDAsYj12b2lkIDAsdz12b2lkIDAsQz12b2lkIDAsVD12b2lkIDAsRT12b2lkIDAsQT12b2lkIDAsUz12b2lkIDAsXz12b2lkIDA7cmV0dXJuIHc9cC1mLFQ9aC1kLEE9ZCpmLWgqcCxDPXYtZyxFPW0teSxTPXkqZy1tKnYsXz13KkUtQypULF89PT0wP251bGw6KHg9KFQqUy1FKkEpL18sYj0oQypBLXcqUykvXyxuZXcgbih4LGIpKX0saS5hbmdsZU9mVmVjdG9yPWZ1bmN0aW9uKGEscyxsLHUpe3ZhciBoPXZvaWQgMDtyZXR1cm4gYSE9PWw/KGg9TWF0aC5hdGFuKCh1LXMpLyhsLWEpKSxsPGE/aCs9TWF0aC5QSTp1PHMmJihoKz10aGlzLlRXT19QSSkpOnU8cz9oPXRoaXMuT05FX0FORF9IQUxGX1BJOmg9dGhpcy5IQUxGX1BJLGh9LGkuZG9JbnRlcnNlY3Q9ZnVuY3Rpb24oYSxzLGwsdSl7dmFyIGg9YS54LGY9YS55LGQ9cy54LHA9cy55LG09bC54LGc9bC55LHk9dS54LHY9dS55LHg9KGQtaCkqKHYtZyktKHktbSkqKHAtZik7aWYoeD09PTApcmV0dXJuITE7dmFyIGI9KCh2LWcpKih5LWgpKyhtLXkpKih2LWYpKS94LHc9KChmLXApKih5LWgpKyhkLWgpKih2LWYpKS94O3JldHVybiAwPGImJmI8MSYmMDx3JiZ3PDF9LGkuSEFMRl9QST0uNSpNYXRoLlBJLGkuT05FX0FORF9IQUxGX1BJPTEuNSpNYXRoLlBJLGkuVFdPX1BJPTIqTWF0aC5QSSxpLlRIUkVFX1BJPTMqTWF0aC5QSSx0LmV4cG9ydHM9aX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKCl7fW8obiwiSU1hdGgiKSxuLnNpZ249ZnVuY3Rpb24oaSl7cmV0dXJuIGk+MD8xOmk8MD8tMTowfSxuLmZsb29yPWZ1bmN0aW9uKGkpe3JldHVybiBpPDA/TWF0aC5jZWlsKGkpOk1hdGguZmxvb3IoaSl9LG4uY2VpbD1mdW5jdGlvbihpKXtyZXR1cm4gaTwwP01hdGguZmxvb3IoaSk6TWF0aC5jZWlsKGkpfSx0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKCl7fW8obiwiSW50ZWdlciIpLG4uTUFYX1ZBTFVFPTIxNDc0ODM2NDcsbi5NSU5fVkFMVUU9LTIxNDc0ODM2NDgsdC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49ZnVuY3Rpb24oKXtmdW5jdGlvbiBoKGYsZCl7Zm9yKHZhciBwPTA7cDxkLmxlbmd0aDtwKyspe3ZhciBtPWRbcF07bS5lbnVtZXJhYmxlPW0uZW51bWVyYWJsZXx8ITEsbS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG0mJihtLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZixtLmtleSxtKX19cmV0dXJuIG8oaCwiZGVmaW5lUHJvcGVydGllcyIpLGZ1bmN0aW9uKGYsZCxwKXtyZXR1cm4gZCYmaChmLnByb3RvdHlwZSxkKSxwJiZoKGYscCksZn19KCk7ZnVuY3Rpb24gaShoLGYpe2lmKCEoaCBpbnN0YW5jZW9mIGYpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfW8oaSwiX2NsYXNzQ2FsbENoZWNrIik7dmFyIGE9byhmdW5jdGlvbihmKXtyZXR1cm57dmFsdWU6ZixuZXh0Om51bGwscHJldjpudWxsfX0sIm5vZGVGcm9tIikscz1vKGZ1bmN0aW9uKGYsZCxwLG0pe3JldHVybiBmIT09bnVsbD9mLm5leHQ9ZDptLmhlYWQ9ZCxwIT09bnVsbD9wLnByZXY9ZDptLnRhaWw9ZCxkLnByZXY9ZixkLm5leHQ9cCxtLmxlbmd0aCsrLGR9LCJhZGQiKSxsPW8oZnVuY3Rpb24oZixkKXt2YXIgcD1mLnByZXYsbT1mLm5leHQ7cmV0dXJuIHAhPT1udWxsP3AubmV4dD1tOmQuaGVhZD1tLG0hPT1udWxsP20ucHJldj1wOmQudGFpbD1wLGYucHJldj1mLm5leHQ9bnVsbCxkLmxlbmd0aC0tLGZ9LCJfcmVtb3ZlIiksdT1mdW5jdGlvbigpe2Z1bmN0aW9uIGgoZil7dmFyIGQ9dGhpcztpKHRoaXMsaCksdGhpcy5sZW5ndGg9MCx0aGlzLmhlYWQ9bnVsbCx0aGlzLnRhaWw9bnVsbCxmPy5mb3JFYWNoKGZ1bmN0aW9uKHApe3JldHVybiBkLnB1c2gocCl9KX1yZXR1cm4gbyhoLCJMaW5rZWRMaXN0IiksbihoLFt7a2V5OiJzaXplIix2YWx1ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSwic2l6ZSIpfSx7a2V5OiJpbnNlcnRCZWZvcmUiLHZhbHVlOm8oZnVuY3Rpb24oZCxwKXtyZXR1cm4gcyhwLnByZXYsYShkKSxwLHRoaXMpfSwiaW5zZXJ0QmVmb3JlIil9LHtrZXk6Imluc2VydEFmdGVyIix2YWx1ZTpvKGZ1bmN0aW9uKGQscCl7cmV0dXJuIHMocCxhKGQpLHAubmV4dCx0aGlzKX0sImluc2VydEFmdGVyIil9LHtrZXk6Imluc2VydE5vZGVCZWZvcmUiLHZhbHVlOm8oZnVuY3Rpb24oZCxwKXtyZXR1cm4gcyhwLnByZXYsZCxwLHRoaXMpfSwiaW5zZXJ0Tm9kZUJlZm9yZSIpfSx7a2V5OiJpbnNlcnROb2RlQWZ0ZXIiLHZhbHVlOm8oZnVuY3Rpb24oZCxwKXtyZXR1cm4gcyhwLGQscC5uZXh0LHRoaXMpfSwiaW5zZXJ0Tm9kZUFmdGVyIil9LHtrZXk6InB1c2giLHZhbHVlOm8oZnVuY3Rpb24oZCl7cmV0dXJuIHModGhpcy50YWlsLGEoZCksbnVsbCx0aGlzKX0sInB1c2giKX0se2tleToidW5zaGlmdCIsdmFsdWU6byhmdW5jdGlvbihkKXtyZXR1cm4gcyhudWxsLGEoZCksdGhpcy5oZWFkLHRoaXMpfSwidW5zaGlmdCIpfSx7a2V5OiJyZW1vdmUiLHZhbHVlOm8oZnVuY3Rpb24oZCl7cmV0dXJuIGwoZCx0aGlzKX0sInJlbW92ZSIpfSx7a2V5OiJwb3AiLHZhbHVlOm8oZnVuY3Rpb24oKXtyZXR1cm4gbCh0aGlzLnRhaWwsdGhpcykudmFsdWV9LCJwb3AiKX0se2tleToicG9wTm9kZSIsdmFsdWU6byhmdW5jdGlvbigpe3JldHVybiBsKHRoaXMudGFpbCx0aGlzKX0sInBvcE5vZGUiKX0se2tleToic2hpZnQiLHZhbHVlOm8oZnVuY3Rpb24oKXtyZXR1cm4gbCh0aGlzLmhlYWQsdGhpcykudmFsdWV9LCJzaGlmdCIpfSx7a2V5OiJzaGlmdE5vZGUiLHZhbHVlOm8oZnVuY3Rpb24oKXtyZXR1cm4gbCh0aGlzLmhlYWQsdGhpcyl9LCJzaGlmdE5vZGUiKX0se2tleToiZ2V0X29iamVjdF9hdCIsdmFsdWU6byhmdW5jdGlvbihkKXtpZihkPD10aGlzLmxlbmd0aCgpKXtmb3IodmFyIHA9MSxtPXRoaXMuaGVhZDtwPGQ7KW09bS5uZXh0LHArKztyZXR1cm4gbS52YWx1ZX19LCJnZXRfb2JqZWN0X2F0Iil9LHtrZXk6InNldF9vYmplY3RfYXQiLHZhbHVlOm8oZnVuY3Rpb24oZCxwKXtpZihkPD10aGlzLmxlbmd0aCgpKXtmb3IodmFyIG09MSxnPXRoaXMuaGVhZDttPGQ7KWc9Zy5uZXh0LG0rKztnLnZhbHVlPXB9fSwic2V0X29iamVjdF9hdCIpfV0pLGh9KCk7dC5leHBvcnRzPXV9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihpLGEscyl7dGhpcy54PW51bGwsdGhpcy55PW51bGwsaT09bnVsbCYmYT09bnVsbCYmcz09bnVsbD8odGhpcy54PTAsdGhpcy55PTApOnR5cGVvZiBpPT0ibnVtYmVyIiYmdHlwZW9mIGE9PSJudW1iZXIiJiZzPT1udWxsPyh0aGlzLng9aSx0aGlzLnk9YSk6aS5jb25zdHJ1Y3Rvci5uYW1lPT0iUG9pbnQiJiZhPT1udWxsJiZzPT1udWxsJiYocz1pLHRoaXMueD1zLngsdGhpcy55PXMueSl9byhuLCJQb2ludCIpLG4ucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54fSxuLnByb3RvdHlwZS5nZXRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueX0sbi5wcm90b3R5cGUuZ2V0TG9jYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcy54LHRoaXMueSl9LG4ucHJvdG90eXBlLnNldExvY2F0aW9uPWZ1bmN0aW9uKGksYSxzKXtpLmNvbnN0cnVjdG9yLm5hbWU9PSJQb2ludCImJmE9PW51bGwmJnM9PW51bGw/KHM9aSx0aGlzLnNldExvY2F0aW9uKHMueCxzLnkpKTp0eXBlb2YgaT09Im51bWJlciImJnR5cGVvZiBhPT0ibnVtYmVyIiYmcz09bnVsbCYmKHBhcnNlSW50KGkpPT1pJiZwYXJzZUludChhKT09YT90aGlzLm1vdmUoaSxhKToodGhpcy54PU1hdGguZmxvb3IoaSsuNSksdGhpcy55PU1hdGguZmxvb3IoYSsuNSkpKX0sbi5wcm90b3R5cGUubW92ZT1mdW5jdGlvbihpLGEpe3RoaXMueD1pLHRoaXMueT1hfSxuLnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24oaSxhKXt0aGlzLngrPWksdGhpcy55Kz1hfSxuLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oaSl7aWYoaS5jb25zdHJ1Y3Rvci5uYW1lPT0iUG9pbnQiKXt2YXIgYT1pO3JldHVybiB0aGlzLng9PWEueCYmdGhpcy55PT1hLnl9cmV0dXJuIHRoaXM9PWl9LG4ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKCkuY29uc3RydWN0b3IubmFtZSsiW3g9Iit0aGlzLngrIix5PSIrdGhpcy55KyJdIn0sdC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihpLGEscyxsKXt0aGlzLng9MCx0aGlzLnk9MCx0aGlzLndpZHRoPTAsdGhpcy5oZWlnaHQ9MCxpIT1udWxsJiZhIT1udWxsJiZzIT1udWxsJiZsIT1udWxsJiYodGhpcy54PWksdGhpcy55PWEsdGhpcy53aWR0aD1zLHRoaXMuaGVpZ2h0PWwpfW8obiwiUmVjdGFuZ2xlRCIpLG4ucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54fSxuLnByb3RvdHlwZS5zZXRYPWZ1bmN0aW9uKGkpe3RoaXMueD1pfSxuLnByb3RvdHlwZS5nZXRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueX0sbi5wcm90b3R5cGUuc2V0WT1mdW5jdGlvbihpKXt0aGlzLnk9aX0sbi5wcm90b3R5cGUuZ2V0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53aWR0aH0sbi5wcm90b3R5cGUuc2V0V2lkdGg9ZnVuY3Rpb24oaSl7dGhpcy53aWR0aD1pfSxuLnByb3RvdHlwZS5nZXRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oZWlnaHR9LG4ucHJvdG90eXBlLnNldEhlaWdodD1mdW5jdGlvbihpKXt0aGlzLmhlaWdodD1pfSxuLnByb3RvdHlwZS5nZXRSaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLngrdGhpcy53aWR0aH0sbi5wcm90b3R5cGUuZ2V0Qm90dG9tPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueSt0aGlzLmhlaWdodH0sbi5wcm90b3R5cGUuaW50ZXJzZWN0cz1mdW5jdGlvbihpKXtyZXR1cm4hKHRoaXMuZ2V0UmlnaHQoKTxpLnh8fHRoaXMuZ2V0Qm90dG9tKCk8aS55fHxpLmdldFJpZ2h0KCk8dGhpcy54fHxpLmdldEJvdHRvbSgpPHRoaXMueSl9LG4ucHJvdG90eXBlLmdldENlbnRlclg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54K3RoaXMud2lkdGgvMn0sbi5wcm90b3R5cGUuZ2V0TWluWD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFgoKX0sbi5wcm90b3R5cGUuZ2V0TWF4WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFgoKSt0aGlzLndpZHRofSxuLnByb3RvdHlwZS5nZXRDZW50ZXJZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueSt0aGlzLmhlaWdodC8yfSxuLnByb3RvdHlwZS5nZXRNaW5ZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0WSgpfSxuLnByb3RvdHlwZS5nZXRNYXhZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0WSgpK3RoaXMuaGVpZ2h0fSxuLnByb3RvdHlwZS5nZXRXaWR0aEhhbGY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53aWR0aC8yfSxuLnByb3RvdHlwZS5nZXRIZWlnaHRIYWxmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGVpZ2h0LzJ9LHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJnR5cGVvZiBTeW1ib2wuaXRlcmF0b3I9PSJzeW1ib2wiP2Z1bmN0aW9uKGEpe3JldHVybiB0eXBlb2YgYX06ZnVuY3Rpb24oYSl7cmV0dXJuIGEmJnR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJmEuY29uc3RydWN0b3I9PT1TeW1ib2wmJmEhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBhfTtmdW5jdGlvbiBpKCl7fW8oaSwiVW5pcXVlSURHZW5lcmV0b3IiKSxpLmxhc3RJRD0wLGkuY3JlYXRlSUQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGkuaXNQcmltaXRpdmUoYSk/YTooYS51bmlxdWVJRCE9bnVsbHx8KGEudW5pcXVlSUQ9aS5nZXRTdHJpbmcoKSxpLmxhc3RJRCsrKSxhLnVuaXF1ZUlEKX0saS5nZXRTdHJpbmc9ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PW51bGwmJihhPWkubGFzdElEKSwiT2JqZWN0IyIrYX0saS5pc1ByaW1pdGl2ZT1mdW5jdGlvbihhKXt2YXIgcz10eXBlb2YgYT4idSI/InVuZGVmaW5lZCI6bihhKTtyZXR1cm4gYT09bnVsbHx8cyE9Im9iamVjdCImJnMhPSJmdW5jdGlvbiJ9LHQuZXhwb3J0cz1pfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4obSl7aWYoQXJyYXkuaXNBcnJheShtKSl7Zm9yKHZhciBnPTAseT1BcnJheShtLmxlbmd0aCk7ZzxtLmxlbmd0aDtnKyspeVtnXT1tW2ddO3JldHVybiB5fWVsc2UgcmV0dXJuIEFycmF5LmZyb20obSl9byhuLCJfdG9Db25zdW1hYmxlQXJyYXkiKTt2YXIgaT1yKDApLGE9cig2KSxzPXIoMyksbD1yKDEpLHU9cig1KSxoPXIoNCksZj1yKDE3KSxkPXIoMjcpO2Z1bmN0aW9uIHAobSl7ZC5jYWxsKHRoaXMpLHRoaXMubGF5b3V0UXVhbGl0eT1pLlFVQUxJVFksdGhpcy5jcmVhdGVCZW5kc0FzTmVlZGVkPWkuREVGQVVMVF9DUkVBVEVfQkVORFNfQVNfTkVFREVELHRoaXMuaW5jcmVtZW50YWw9aS5ERUZBVUxUX0lOQ1JFTUVOVEFMLHRoaXMuYW5pbWF0aW9uT25MYXlvdXQ9aS5ERUZBVUxUX0FOSU1BVElPTl9PTl9MQVlPVVQsdGhpcy5hbmltYXRpb25EdXJpbmdMYXlvdXQ9aS5ERUZBVUxUX0FOSU1BVElPTl9EVVJJTkdfTEFZT1VULHRoaXMuYW5pbWF0aW9uUGVyaW9kPWkuREVGQVVMVF9BTklNQVRJT05fUEVSSU9ELHRoaXMudW5pZm9ybUxlYWZOb2RlU2l6ZXM9aS5ERUZBVUxUX1VOSUZPUk1fTEVBRl9OT0RFX1NJWkVTLHRoaXMuZWRnZVRvRHVtbXlOb2Rlcz1uZXcgTWFwLHRoaXMuZ3JhcGhNYW5hZ2VyPW5ldyBhKHRoaXMpLHRoaXMuaXNMYXlvdXRGaW5pc2hlZD0hMSx0aGlzLmlzU3ViTGF5b3V0PSExLHRoaXMuaXNSZW1vdGVVc2U9ITEsbSE9bnVsbCYmKHRoaXMuaXNSZW1vdGVVc2U9bSl9byhwLCJMYXlvdXQiKSxwLlJBTkRPTV9TRUVEPTEscC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkLnByb3RvdHlwZSkscC5wcm90b3R5cGUuZ2V0R3JhcGhNYW5hZ2VyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyfSxwLnByb3RvdHlwZS5nZXRBbGxOb2Rlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxOb2RlcygpfSxwLnByb3RvdHlwZS5nZXRBbGxFZGdlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxFZGdlcygpfSxwLnByb3RvdHlwZS5nZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbigpfSxwLnByb3RvdHlwZS5uZXdHcmFwaE1hbmFnZXI9ZnVuY3Rpb24oKXt2YXIgbT1uZXcgYSh0aGlzKTtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXI9bSxtfSxwLnByb3RvdHlwZS5uZXdHcmFwaD1mdW5jdGlvbihtKXtyZXR1cm4gbmV3IHUobnVsbCx0aGlzLmdyYXBoTWFuYWdlcixtKX0scC5wcm90b3R5cGUubmV3Tm9kZT1mdW5jdGlvbihtKXtyZXR1cm4gbmV3IHModGhpcy5ncmFwaE1hbmFnZXIsbSl9LHAucHJvdG90eXBlLm5ld0VkZ2U9ZnVuY3Rpb24obSl7cmV0dXJuIG5ldyBsKG51bGwsbnVsbCxtKX0scC5wcm90b3R5cGUuY2hlY2tMYXlvdXRTdWNjZXNzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKT09bnVsbHx8dGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmdldE5vZGVzKCkubGVuZ3RoPT0wfHx0aGlzLmdyYXBoTWFuYWdlci5pbmNsdWRlc0ludmFsaWRFZGdlKCl9LHAucHJvdG90eXBlLnJ1bkxheW91dD1mdW5jdGlvbigpe3RoaXMuaXNMYXlvdXRGaW5pc2hlZD0hMSx0aGlzLnRpbGluZ1ByZUxheW91dCYmdGhpcy50aWxpbmdQcmVMYXlvdXQoKSx0aGlzLmluaXRQYXJhbWV0ZXJzKCk7dmFyIG07cmV0dXJuIHRoaXMuY2hlY2tMYXlvdXRTdWNjZXNzKCk/bT0hMTptPXRoaXMubGF5b3V0KCksaS5BTklNQVRFPT09ImR1cmluZyI/ITE6KG0mJih0aGlzLmlzU3ViTGF5b3V0fHx0aGlzLmRvUG9zdExheW91dCgpKSx0aGlzLnRpbGluZ1Bvc3RMYXlvdXQmJnRoaXMudGlsaW5nUG9zdExheW91dCgpLHRoaXMuaXNMYXlvdXRGaW5pc2hlZD0hMCxtKX0scC5wcm90b3R5cGUuZG9Qb3N0TGF5b3V0PWZ1bmN0aW9uKCl7dGhpcy5pbmNyZW1lbnRhbHx8dGhpcy50cmFuc2Zvcm0oKSx0aGlzLnVwZGF0ZSgpfSxwLnByb3RvdHlwZS51cGRhdGUyPWZ1bmN0aW9uKCl7aWYodGhpcy5jcmVhdGVCZW5kc0FzTmVlZGVkJiYodGhpcy5jcmVhdGVCZW5kcG9pbnRzRnJvbUR1bW15Tm9kZXMoKSx0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbEVkZ2VzKCkpLCF0aGlzLmlzUmVtb3RlVXNlKXtmb3IodmFyIG0sZz10aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxFZGdlcygpLHk9MDt5PGcubGVuZ3RoO3krKyltPWdbeV07Zm9yKHZhciB2LHg9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmdldE5vZGVzKCkseT0wO3k8eC5sZW5ndGg7eSsrKXY9eFt5XTt0aGlzLnVwZGF0ZSh0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkpfX0scC5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKG0pe2lmKG09PW51bGwpdGhpcy51cGRhdGUyKCk7ZWxzZSBpZihtIGluc3RhbmNlb2Ygcyl7dmFyIGc9bTtpZihnLmdldENoaWxkKCkhPW51bGwpZm9yKHZhciB5PWcuZ2V0Q2hpbGQoKS5nZXROb2RlcygpLHY9MDt2PHkubGVuZ3RoO3YrKyl1cGRhdGUoeVt2XSk7aWYoZy52R3JhcGhPYmplY3QhPW51bGwpe3ZhciB4PWcudkdyYXBoT2JqZWN0O3gudXBkYXRlKGcpfX1lbHNlIGlmKG0gaW5zdGFuY2VvZiBsKXt2YXIgYj1tO2lmKGIudkdyYXBoT2JqZWN0IT1udWxsKXt2YXIgdz1iLnZHcmFwaE9iamVjdDt3LnVwZGF0ZShiKX19ZWxzZSBpZihtIGluc3RhbmNlb2YgdSl7dmFyIEM9bTtpZihDLnZHcmFwaE9iamVjdCE9bnVsbCl7dmFyIFQ9Qy52R3JhcGhPYmplY3Q7VC51cGRhdGUoQyl9fX0scC5wcm90b3R5cGUuaW5pdFBhcmFtZXRlcnM9ZnVuY3Rpb24oKXt0aGlzLmlzU3ViTGF5b3V0fHwodGhpcy5sYXlvdXRRdWFsaXR5PWkuUVVBTElUWSx0aGlzLmFuaW1hdGlvbkR1cmluZ0xheW91dD1pLkRFRkFVTFRfQU5JTUFUSU9OX0RVUklOR19MQVlPVVQsdGhpcy5hbmltYXRpb25QZXJpb2Q9aS5ERUZBVUxUX0FOSU1BVElPTl9QRVJJT0QsdGhpcy5hbmltYXRpb25PbkxheW91dD1pLkRFRkFVTFRfQU5JTUFUSU9OX09OX0xBWU9VVCx0aGlzLmluY3JlbWVudGFsPWkuREVGQVVMVF9JTkNSRU1FTlRBTCx0aGlzLmNyZWF0ZUJlbmRzQXNOZWVkZWQ9aS5ERUZBVUxUX0NSRUFURV9CRU5EU19BU19ORUVERUQsdGhpcy51bmlmb3JtTGVhZk5vZGVTaXplcz1pLkRFRkFVTFRfVU5JRk9STV9MRUFGX05PREVfU0laRVMpLHRoaXMuYW5pbWF0aW9uRHVyaW5nTGF5b3V0JiYodGhpcy5hbmltYXRpb25PbkxheW91dD0hMSl9LHAucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihtKXtpZihtPT1udWxsKXRoaXMudHJhbnNmb3JtKG5ldyBoKDAsMCkpO2Vsc2V7dmFyIGc9bmV3IGYseT10aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkudXBkYXRlTGVmdFRvcCgpO2lmKHkhPW51bGwpe2cuc2V0V29ybGRPcmdYKG0ueCksZy5zZXRXb3JsZE9yZ1kobS55KSxnLnNldERldmljZU9yZ1goeS54KSxnLnNldERldmljZU9yZ1koeS55KTtmb3IodmFyIHY9dGhpcy5nZXRBbGxOb2RlcygpLHgsYj0wO2I8di5sZW5ndGg7YisrKXg9dltiXSx4LnRyYW5zZm9ybShnKX19fSxwLnByb3RvdHlwZS5wb3NpdGlvbk5vZGVzUmFuZG9tbHk9ZnVuY3Rpb24obSl7aWYobT09bnVsbCl0aGlzLnBvc2l0aW9uTm9kZXNSYW5kb21seSh0aGlzLmdldEdyYXBoTWFuYWdlcigpLmdldFJvb3QoKSksdGhpcy5nZXRHcmFwaE1hbmFnZXIoKS5nZXRSb290KCkudXBkYXRlQm91bmRzKCEwKTtlbHNlIGZvcih2YXIgZyx5LHY9bS5nZXROb2RlcygpLHg9MDt4PHYubGVuZ3RoO3grKylnPXZbeF0seT1nLmdldENoaWxkKCkseT09bnVsbHx8eS5nZXROb2RlcygpLmxlbmd0aD09MD9nLnNjYXR0ZXIoKToodGhpcy5wb3NpdGlvbk5vZGVzUmFuZG9tbHkoeSksZy51cGRhdGVCb3VuZHMoKSl9LHAucHJvdG90eXBlLmdldEZsYXRGb3Jlc3Q9ZnVuY3Rpb24oKXtmb3IodmFyIG09W10sZz0hMCx5PXRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXROb2RlcygpLHY9ITAseD0wO3g8eS5sZW5ndGg7eCsrKXlbeF0uZ2V0Q2hpbGQoKSE9bnVsbCYmKHY9ITEpO2lmKCF2KXJldHVybiBtO3ZhciBiPW5ldyBTZXQsdz1bXSxDPW5ldyBNYXAsVD1bXTtmb3IoVD1ULmNvbmNhdCh5KTtULmxlbmd0aD4wJiZnOyl7Zm9yKHcucHVzaChUWzBdKTt3Lmxlbmd0aD4wJiZnOyl7dmFyIEU9d1swXTt3LnNwbGljZSgwLDEpLGIuYWRkKEUpO2Zvcih2YXIgQT1FLmdldEVkZ2VzKCkseD0wO3g8QS5sZW5ndGg7eCsrKXt2YXIgUz1BW3hdLmdldE90aGVyRW5kKEUpO2lmKEMuZ2V0KEUpIT1TKWlmKCFiLmhhcyhTKSl3LnB1c2goUyksQy5zZXQoUyxFKTtlbHNle2c9ITE7YnJlYWt9fX1pZighZyltPVtdO2Vsc2V7dmFyIF89W10uY29uY2F0KG4oYikpO20ucHVzaChfKTtmb3IodmFyIHg9MDt4PF8ubGVuZ3RoO3grKyl7dmFyIEk9X1t4XSxEPVQuaW5kZXhPZihJKTtEPi0xJiZULnNwbGljZShELDEpfWI9bmV3IFNldCxDPW5ldyBNYXB9fXJldHVybiBtfSxwLnByb3RvdHlwZS5jcmVhdGVEdW1teU5vZGVzRm9yQmVuZHBvaW50cz1mdW5jdGlvbihtKXtmb3IodmFyIGc9W10seT1tLnNvdXJjZSx2PXRoaXMuZ3JhcGhNYW5hZ2VyLmNhbGNMb3dlc3RDb21tb25BbmNlc3RvcihtLnNvdXJjZSxtLnRhcmdldCkseD0wO3g8bS5iZW5kcG9pbnRzLmxlbmd0aDt4Kyspe3ZhciBiPXRoaXMubmV3Tm9kZShudWxsKTtiLnNldFJlY3QobmV3IFBvaW50KDAsMCksbmV3IERpbWVuc2lvbigxLDEpKSx2LmFkZChiKTt2YXIgdz10aGlzLm5ld0VkZ2UobnVsbCk7dGhpcy5ncmFwaE1hbmFnZXIuYWRkKHcseSxiKSxnLmFkZChiKSx5PWJ9dmFyIHc9dGhpcy5uZXdFZGdlKG51bGwpO3JldHVybiB0aGlzLmdyYXBoTWFuYWdlci5hZGQodyx5LG0udGFyZ2V0KSx0aGlzLmVkZ2VUb0R1bW15Tm9kZXMuc2V0KG0sZyksbS5pc0ludGVyR3JhcGgoKT90aGlzLmdyYXBoTWFuYWdlci5yZW1vdmUobSk6di5yZW1vdmUobSksZ30scC5wcm90b3R5cGUuY3JlYXRlQmVuZHBvaW50c0Zyb21EdW1teU5vZGVzPWZ1bmN0aW9uKCl7dmFyIG09W107bT1tLmNvbmNhdCh0aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxFZGdlcygpKSxtPVtdLmNvbmNhdChuKHRoaXMuZWRnZVRvRHVtbXlOb2Rlcy5rZXlzKCkpKS5jb25jYXQobSk7Zm9yKHZhciBnPTA7ZzxtLmxlbmd0aDtnKyspe3ZhciB5PW1bZ107aWYoeS5iZW5kcG9pbnRzLmxlbmd0aD4wKXtmb3IodmFyIHY9dGhpcy5lZGdlVG9EdW1teU5vZGVzLmdldCh5KSx4PTA7eDx2Lmxlbmd0aDt4Kyspe3ZhciBiPXZbeF0sdz1uZXcgaChiLmdldENlbnRlclgoKSxiLmdldENlbnRlclkoKSksQz15LmJlbmRwb2ludHMuZ2V0KHgpO0MueD13LngsQy55PXcueSxiLmdldE93bmVyKCkucmVtb3ZlKGIpfXRoaXMuZ3JhcGhNYW5hZ2VyLmFkZCh5LHkuc291cmNlLHkudGFyZ2V0KX19fSxwLnRyYW5zZm9ybT1mdW5jdGlvbihtLGcseSx2KXtpZih5IT1udWxsJiZ2IT1udWxsKXt2YXIgeD1nO2lmKG08PTUwKXt2YXIgYj1nL3k7eC09KGctYikvNTAqKDUwLW0pfWVsc2V7dmFyIHc9Zyp2O3grPSh3LWcpLzUwKihtLTUwKX1yZXR1cm4geH1lbHNle3ZhciBDLFQ7cmV0dXJuIG08PTUwPyhDPTkqZy81MDAsVD1nLzEwKTooQz05KmcvNTAsVD0tOCpnKSxDKm0rVH19LHAuZmluZENlbnRlck9mVHJlZT1mdW5jdGlvbihtKXt2YXIgZz1bXTtnPWcuY29uY2F0KG0pO3ZhciB5PVtdLHY9bmV3IE1hcCx4PSExLGI9bnVsbDsoZy5sZW5ndGg9PTF8fGcubGVuZ3RoPT0yKSYmKHg9ITAsYj1nWzBdKTtmb3IodmFyIHc9MDt3PGcubGVuZ3RoO3crKyl7dmFyIEM9Z1t3XSxUPUMuZ2V0TmVpZ2hib3JzTGlzdCgpLnNpemU7di5zZXQoQyxDLmdldE5laWdoYm9yc0xpc3QoKS5zaXplKSxUPT0xJiZ5LnB1c2goQyl9dmFyIEU9W107Zm9yKEU9RS5jb25jYXQoeSk7IXg7KXt2YXIgQT1bXTtBPUEuY29uY2F0KEUpLEU9W107Zm9yKHZhciB3PTA7dzxnLmxlbmd0aDt3Kyspe3ZhciBDPWdbd10sUz1nLmluZGV4T2YoQyk7Uz49MCYmZy5zcGxpY2UoUywxKTt2YXIgXz1DLmdldE5laWdoYm9yc0xpc3QoKTtfLmZvckVhY2goZnVuY3Rpb24oayl7aWYoeS5pbmRleE9mKGspPDApe3ZhciBMPXYuZ2V0KGspLFI9TC0xO1I9PTEmJkUucHVzaChrKSx2LnNldChrLFIpfX0pfXk9eS5jb25jYXQoRSksKGcubGVuZ3RoPT0xfHxnLmxlbmd0aD09MikmJih4PSEwLGI9Z1swXSl9cmV0dXJuIGJ9LHAucHJvdG90eXBlLnNldEdyYXBoTWFuYWdlcj1mdW5jdGlvbihtKXt0aGlzLmdyYXBoTWFuYWdlcj1tfSx0LmV4cG9ydHM9cH0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKCl7fW8obiwiUmFuZG9tU2VlZCIpLG4uc2VlZD0xLG4ueD0wLG4ubmV4dERvdWJsZT1mdW5jdGlvbigpe3JldHVybiBuLng9TWF0aC5zaW4obi5zZWVkKyspKjFlNCxuLngtTWF0aC5mbG9vcihuLngpfSx0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDQpO2Z1bmN0aW9uIGkoYSxzKXt0aGlzLmx3b3JsZE9yZ1g9MCx0aGlzLmx3b3JsZE9yZ1k9MCx0aGlzLmxkZXZpY2VPcmdYPTAsdGhpcy5sZGV2aWNlT3JnWT0wLHRoaXMubHdvcmxkRXh0WD0xLHRoaXMubHdvcmxkRXh0WT0xLHRoaXMubGRldmljZUV4dFg9MSx0aGlzLmxkZXZpY2VFeHRZPTF9byhpLCJUcmFuc2Zvcm0iKSxpLnByb3RvdHlwZS5nZXRXb3JsZE9yZ1g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sd29ybGRPcmdYfSxpLnByb3RvdHlwZS5zZXRXb3JsZE9yZ1g9ZnVuY3Rpb24oYSl7dGhpcy5sd29ybGRPcmdYPWF9LGkucHJvdG90eXBlLmdldFdvcmxkT3JnWT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmx3b3JsZE9yZ1l9LGkucHJvdG90eXBlLnNldFdvcmxkT3JnWT1mdW5jdGlvbihhKXt0aGlzLmx3b3JsZE9yZ1k9YX0saS5wcm90b3R5cGUuZ2V0V29ybGRFeHRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubHdvcmxkRXh0WH0saS5wcm90b3R5cGUuc2V0V29ybGRFeHRYPWZ1bmN0aW9uKGEpe3RoaXMubHdvcmxkRXh0WD1hfSxpLnByb3RvdHlwZS5nZXRXb3JsZEV4dFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sd29ybGRFeHRZfSxpLnByb3RvdHlwZS5zZXRXb3JsZEV4dFk9ZnVuY3Rpb24oYSl7dGhpcy5sd29ybGRFeHRZPWF9LGkucHJvdG90eXBlLmdldERldmljZU9yZ1g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZGV2aWNlT3JnWH0saS5wcm90b3R5cGUuc2V0RGV2aWNlT3JnWD1mdW5jdGlvbihhKXt0aGlzLmxkZXZpY2VPcmdYPWF9LGkucHJvdG90eXBlLmdldERldmljZU9yZ1k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZGV2aWNlT3JnWX0saS5wcm90b3R5cGUuc2V0RGV2aWNlT3JnWT1mdW5jdGlvbihhKXt0aGlzLmxkZXZpY2VPcmdZPWF9LGkucHJvdG90eXBlLmdldERldmljZUV4dFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZGV2aWNlRXh0WH0saS5wcm90b3R5cGUuc2V0RGV2aWNlRXh0WD1mdW5jdGlvbihhKXt0aGlzLmxkZXZpY2VFeHRYPWF9LGkucHJvdG90eXBlLmdldERldmljZUV4dFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZGV2aWNlRXh0WX0saS5wcm90b3R5cGUuc2V0RGV2aWNlRXh0WT1mdW5jdGlvbihhKXt0aGlzLmxkZXZpY2VFeHRZPWF9LGkucHJvdG90eXBlLnRyYW5zZm9ybVg9ZnVuY3Rpb24oYSl7dmFyIHM9MCxsPXRoaXMubHdvcmxkRXh0WDtyZXR1cm4gbCE9MCYmKHM9dGhpcy5sZGV2aWNlT3JnWCsoYS10aGlzLmx3b3JsZE9yZ1gpKnRoaXMubGRldmljZUV4dFgvbCksc30saS5wcm90b3R5cGUudHJhbnNmb3JtWT1mdW5jdGlvbihhKXt2YXIgcz0wLGw9dGhpcy5sd29ybGRFeHRZO3JldHVybiBsIT0wJiYocz10aGlzLmxkZXZpY2VPcmdZKyhhLXRoaXMubHdvcmxkT3JnWSkqdGhpcy5sZGV2aWNlRXh0WS9sKSxzfSxpLnByb3RvdHlwZS5pbnZlcnNlVHJhbnNmb3JtWD1mdW5jdGlvbihhKXt2YXIgcz0wLGw9dGhpcy5sZGV2aWNlRXh0WDtyZXR1cm4gbCE9MCYmKHM9dGhpcy5sd29ybGRPcmdYKyhhLXRoaXMubGRldmljZU9yZ1gpKnRoaXMubHdvcmxkRXh0WC9sKSxzfSxpLnByb3RvdHlwZS5pbnZlcnNlVHJhbnNmb3JtWT1mdW5jdGlvbihhKXt2YXIgcz0wLGw9dGhpcy5sZGV2aWNlRXh0WTtyZXR1cm4gbCE9MCYmKHM9dGhpcy5sd29ybGRPcmdZKyhhLXRoaXMubGRldmljZU9yZ1kpKnRoaXMubHdvcmxkRXh0WS9sKSxzfSxpLnByb3RvdHlwZS5pbnZlcnNlVHJhbnNmb3JtUG9pbnQ9ZnVuY3Rpb24oYSl7dmFyIHM9bmV3IG4odGhpcy5pbnZlcnNlVHJhbnNmb3JtWChhLngpLHRoaXMuaW52ZXJzZVRyYW5zZm9ybVkoYS55KSk7cmV0dXJuIHN9LHQuZXhwb3J0cz1pfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZCl7aWYoQXJyYXkuaXNBcnJheShkKSl7Zm9yKHZhciBwPTAsbT1BcnJheShkLmxlbmd0aCk7cDxkLmxlbmd0aDtwKyspbVtwXT1kW3BdO3JldHVybiBtfWVsc2UgcmV0dXJuIEFycmF5LmZyb20oZCl9byhuLCJfdG9Db25zdW1hYmxlQXJyYXkiKTt2YXIgaT1yKDE1KSxhPXIoNykscz1yKDApLGw9cig4KSx1PXIoOSk7ZnVuY3Rpb24gaCgpe2kuY2FsbCh0aGlzKSx0aGlzLnVzZVNtYXJ0SWRlYWxFZGdlTGVuZ3RoQ2FsY3VsYXRpb249YS5ERUZBVUxUX1VTRV9TTUFSVF9JREVBTF9FREdFX0xFTkdUSF9DQUxDVUxBVElPTix0aGlzLmlkZWFsRWRnZUxlbmd0aD1hLkRFRkFVTFRfRURHRV9MRU5HVEgsdGhpcy5zcHJpbmdDb25zdGFudD1hLkRFRkFVTFRfU1BSSU5HX1NUUkVOR1RILHRoaXMucmVwdWxzaW9uQ29uc3RhbnQ9YS5ERUZBVUxUX1JFUFVMU0lPTl9TVFJFTkdUSCx0aGlzLmdyYXZpdHlDb25zdGFudD1hLkRFRkFVTFRfR1JBVklUWV9TVFJFTkdUSCx0aGlzLmNvbXBvdW5kR3Jhdml0eUNvbnN0YW50PWEuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1NUUkVOR1RILHRoaXMuZ3Jhdml0eVJhbmdlRmFjdG9yPWEuREVGQVVMVF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUix0aGlzLmNvbXBvdW5kR3Jhdml0eVJhbmdlRmFjdG9yPWEuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUix0aGlzLmRpc3BsYWNlbWVudFRocmVzaG9sZFBlck5vZGU9MyphLkRFRkFVTFRfRURHRV9MRU5HVEgvMTAwLHRoaXMuY29vbGluZ0ZhY3Rvcj1hLkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUwsdGhpcy5pbml0aWFsQ29vbGluZ0ZhY3Rvcj1hLkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUwsdGhpcy50b3RhbERpc3BsYWNlbWVudD0wLHRoaXMub2xkVG90YWxEaXNwbGFjZW1lbnQ9MCx0aGlzLm1heEl0ZXJhdGlvbnM9YS5NQVhfSVRFUkFUSU9OU31vKGgsIkZETGF5b3V0IiksaC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSk7Zm9yKHZhciBmIGluIGkpaFtmXT1pW2ZdO2gucHJvdG90eXBlLmluaXRQYXJhbWV0ZXJzPWZ1bmN0aW9uKCl7aS5wcm90b3R5cGUuaW5pdFBhcmFtZXRlcnMuY2FsbCh0aGlzLGFyZ3VtZW50cyksdGhpcy50b3RhbEl0ZXJhdGlvbnM9MCx0aGlzLm5vdEFuaW1hdGVkSXRlcmF0aW9ucz0wLHRoaXMudXNlRlJHcmlkVmFyaWFudD1hLkRFRkFVTFRfVVNFX1NNQVJUX1JFUFVMU0lPTl9SQU5HRV9DQUxDVUxBVElPTix0aGlzLmdyaWQ9W119LGgucHJvdG90eXBlLmNhbGNJZGVhbEVkZ2VMZW5ndGhzPWZ1bmN0aW9uKCl7Zm9yKHZhciBkLHAsbSxnLHksdix4PXRoaXMuZ2V0R3JhcGhNYW5hZ2VyKCkuZ2V0QWxsRWRnZXMoKSxiPTA7Yjx4Lmxlbmd0aDtiKyspZD14W2JdLGQuaWRlYWxMZW5ndGg9dGhpcy5pZGVhbEVkZ2VMZW5ndGgsZC5pc0ludGVyR3JhcGgmJihtPWQuZ2V0U291cmNlKCksZz1kLmdldFRhcmdldCgpLHk9ZC5nZXRTb3VyY2VJbkxjYSgpLmdldEVzdGltYXRlZFNpemUoKSx2PWQuZ2V0VGFyZ2V0SW5MY2EoKS5nZXRFc3RpbWF0ZWRTaXplKCksdGhpcy51c2VTbWFydElkZWFsRWRnZUxlbmd0aENhbGN1bGF0aW9uJiYoZC5pZGVhbExlbmd0aCs9eSt2LTIqcy5TSU1QTEVfTk9ERV9TSVpFKSxwPWQuZ2V0TGNhKCkuZ2V0SW5jbHVzaW9uVHJlZURlcHRoKCksZC5pZGVhbExlbmd0aCs9YS5ERUZBVUxUX0VER0VfTEVOR1RIKmEuUEVSX0xFVkVMX0lERUFMX0VER0VfTEVOR1RIX0ZBQ1RPUioobS5nZXRJbmNsdXNpb25UcmVlRGVwdGgoKStnLmdldEluY2x1c2lvblRyZWVEZXB0aCgpLTIqcCkpfSxoLnByb3RvdHlwZS5pbml0U3ByaW5nRW1iZWRkZXI9ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmdldEFsbE5vZGVzKCkubGVuZ3RoO3RoaXMuaW5jcmVtZW50YWw/KGQ+YS5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQmJih0aGlzLmNvb2xpbmdGYWN0b3I9TWF0aC5tYXgodGhpcy5jb29saW5nRmFjdG9yKmEuQ09PTElOR19BREFQVEFUSU9OX0ZBQ1RPUix0aGlzLmNvb2xpbmdGYWN0b3ItKGQtYS5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQpLyhhLkFEQVBUQVRJT05fVVBQRVJfTk9ERV9MSU1JVC1hLkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVCkqdGhpcy5jb29saW5nRmFjdG9yKigxLWEuQ09PTElOR19BREFQVEFUSU9OX0ZBQ1RPUikpKSx0aGlzLm1heE5vZGVEaXNwbGFjZW1lbnQ9YS5NQVhfTk9ERV9ESVNQTEFDRU1FTlRfSU5DUkVNRU5UQUwpOihkPmEuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUP3RoaXMuY29vbGluZ0ZhY3Rvcj1NYXRoLm1heChhLkNPT0xJTkdfQURBUFRBVElPTl9GQUNUT1IsMS0oZC1hLkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVCkvKGEuQURBUFRBVElPTl9VUFBFUl9OT0RFX0xJTUlULWEuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUKSooMS1hLkNPT0xJTkdfQURBUFRBVElPTl9GQUNUT1IpKTp0aGlzLmNvb2xpbmdGYWN0b3I9MSx0aGlzLmluaXRpYWxDb29saW5nRmFjdG9yPXRoaXMuY29vbGluZ0ZhY3Rvcix0aGlzLm1heE5vZGVEaXNwbGFjZW1lbnQ9YS5NQVhfTk9ERV9ESVNQTEFDRU1FTlQpLHRoaXMubWF4SXRlcmF0aW9ucz1NYXRoLm1heCh0aGlzLmdldEFsbE5vZGVzKCkubGVuZ3RoKjUsdGhpcy5tYXhJdGVyYXRpb25zKSx0aGlzLnRvdGFsRGlzcGxhY2VtZW50VGhyZXNob2xkPXRoaXMuZGlzcGxhY2VtZW50VGhyZXNob2xkUGVyTm9kZSp0aGlzLmdldEFsbE5vZGVzKCkubGVuZ3RoLHRoaXMucmVwdWxzaW9uUmFuZ2U9dGhpcy5jYWxjUmVwdWxzaW9uUmFuZ2UoKX0saC5wcm90b3R5cGUuY2FsY1NwcmluZ0ZvcmNlcz1mdW5jdGlvbigpe2Zvcih2YXIgZD10aGlzLmdldEFsbEVkZ2VzKCkscCxtPTA7bTxkLmxlbmd0aDttKyspcD1kW21dLHRoaXMuY2FsY1NwcmluZ0ZvcmNlKHAscC5pZGVhbExlbmd0aCl9LGgucHJvdG90eXBlLmNhbGNSZXB1bHNpb25Gb3JjZXM9ZnVuY3Rpb24oKXt2YXIgZD1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06ITAscD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITEsbSxnLHksdix4PXRoaXMuZ2V0QWxsTm9kZXMoKSxiO2lmKHRoaXMudXNlRlJHcmlkVmFyaWFudClmb3IodGhpcy50b3RhbEl0ZXJhdGlvbnMlYS5HUklEX0NBTENVTEFUSU9OX0NIRUNLX1BFUklPRD09MSYmZCYmdGhpcy51cGRhdGVHcmlkKCksYj1uZXcgU2V0LG09MDttPHgubGVuZ3RoO20rKyl5PXhbbV0sdGhpcy5jYWxjdWxhdGVSZXB1bHNpb25Gb3JjZU9mQU5vZGUoeSxiLGQscCksYi5hZGQoeSk7ZWxzZSBmb3IobT0wO208eC5sZW5ndGg7bSsrKWZvcih5PXhbbV0sZz1tKzE7Zzx4Lmxlbmd0aDtnKyspdj14W2ddLHkuZ2V0T3duZXIoKT09di5nZXRPd25lcigpJiZ0aGlzLmNhbGNSZXB1bHNpb25Gb3JjZSh5LHYpfSxoLnByb3RvdHlwZS5jYWxjR3Jhdml0YXRpb25hbEZvcmNlcz1mdW5jdGlvbigpe2Zvcih2YXIgZCxwPXRoaXMuZ2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oKSxtPTA7bTxwLmxlbmd0aDttKyspZD1wW21dLHRoaXMuY2FsY0dyYXZpdGF0aW9uYWxGb3JjZShkKX0saC5wcm90b3R5cGUubW92ZU5vZGVzPWZ1bmN0aW9uKCl7Zm9yKHZhciBkPXRoaXMuZ2V0QWxsTm9kZXMoKSxwLG09MDttPGQubGVuZ3RoO20rKylwPWRbbV0scC5tb3ZlKCl9LGgucHJvdG90eXBlLmNhbGNTcHJpbmdGb3JjZT1mdW5jdGlvbihkLHApe3ZhciBtPWQuZ2V0U291cmNlKCksZz1kLmdldFRhcmdldCgpLHksdix4LGI7aWYodGhpcy51bmlmb3JtTGVhZk5vZGVTaXplcyYmbS5nZXRDaGlsZCgpPT1udWxsJiZnLmdldENoaWxkKCk9PW51bGwpZC51cGRhdGVMZW5ndGhTaW1wbGUoKTtlbHNlIGlmKGQudXBkYXRlTGVuZ3RoKCksZC5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXQpcmV0dXJuO3k9ZC5nZXRMZW5ndGgoKSx5IT0wJiYodj10aGlzLnNwcmluZ0NvbnN0YW50Kih5LXApLHg9diooZC5sZW5ndGhYL3kpLGI9diooZC5sZW5ndGhZL3kpLG0uc3ByaW5nRm9yY2VYKz14LG0uc3ByaW5nRm9yY2VZKz1iLGcuc3ByaW5nRm9yY2VYLT14LGcuc3ByaW5nRm9yY2VZLT1iKX0saC5wcm90b3R5cGUuY2FsY1JlcHVsc2lvbkZvcmNlPWZ1bmN0aW9uKGQscCl7dmFyIG09ZC5nZXRSZWN0KCksZz1wLmdldFJlY3QoKSx5PW5ldyBBcnJheSgyKSx2PW5ldyBBcnJheSg0KSx4LGIsdyxDLFQsRSxBO2lmKG0uaW50ZXJzZWN0cyhnKSl7bC5jYWxjU2VwYXJhdGlvbkFtb3VudChtLGcseSxhLkRFRkFVTFRfRURHRV9MRU5HVEgvMiksRT0yKnlbMF0sQT0yKnlbMV07dmFyIFM9ZC5ub09mQ2hpbGRyZW4qcC5ub09mQ2hpbGRyZW4vKGQubm9PZkNoaWxkcmVuK3Aubm9PZkNoaWxkcmVuKTtkLnJlcHVsc2lvbkZvcmNlWC09UypFLGQucmVwdWxzaW9uRm9yY2VZLT1TKkEscC5yZXB1bHNpb25Gb3JjZVgrPVMqRSxwLnJlcHVsc2lvbkZvcmNlWSs9UypBfWVsc2UgdGhpcy51bmlmb3JtTGVhZk5vZGVTaXplcyYmZC5nZXRDaGlsZCgpPT1udWxsJiZwLmdldENoaWxkKCk9PW51bGw/KHg9Zy5nZXRDZW50ZXJYKCktbS5nZXRDZW50ZXJYKCksYj1nLmdldENlbnRlclkoKS1tLmdldENlbnRlclkoKSk6KGwuZ2V0SW50ZXJzZWN0aW9uKG0sZyx2KSx4PXZbMl0tdlswXSxiPXZbM10tdlsxXSksTWF0aC5hYnMoeCk8YS5NSU5fUkVQVUxTSU9OX0RJU1QmJih4PXUuc2lnbih4KSphLk1JTl9SRVBVTFNJT05fRElTVCksTWF0aC5hYnMoYik8YS5NSU5fUkVQVUxTSU9OX0RJU1QmJihiPXUuc2lnbihiKSphLk1JTl9SRVBVTFNJT05fRElTVCksdz14KngrYipiLEM9TWF0aC5zcXJ0KHcpLFQ9dGhpcy5yZXB1bHNpb25Db25zdGFudCpkLm5vT2ZDaGlsZHJlbipwLm5vT2ZDaGlsZHJlbi93LEU9VCp4L0MsQT1UKmIvQyxkLnJlcHVsc2lvbkZvcmNlWC09RSxkLnJlcHVsc2lvbkZvcmNlWS09QSxwLnJlcHVsc2lvbkZvcmNlWCs9RSxwLnJlcHVsc2lvbkZvcmNlWSs9QX0saC5wcm90b3R5cGUuY2FsY0dyYXZpdGF0aW9uYWxGb3JjZT1mdW5jdGlvbihkKXt2YXIgcCxtLGcseSx2LHgsYix3O3A9ZC5nZXRPd25lcigpLG09KHAuZ2V0UmlnaHQoKStwLmdldExlZnQoKSkvMixnPShwLmdldFRvcCgpK3AuZ2V0Qm90dG9tKCkpLzIseT1kLmdldENlbnRlclgoKS1tLHY9ZC5nZXRDZW50ZXJZKCktZyx4PU1hdGguYWJzKHkpK2QuZ2V0V2lkdGgoKS8yLGI9TWF0aC5hYnModikrZC5nZXRIZWlnaHQoKS8yLGQuZ2V0T3duZXIoKT09dGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpPyh3PXAuZ2V0RXN0aW1hdGVkU2l6ZSgpKnRoaXMuZ3Jhdml0eVJhbmdlRmFjdG9yLCh4Pnd8fGI+dykmJihkLmdyYXZpdGF0aW9uRm9yY2VYPS10aGlzLmdyYXZpdHlDb25zdGFudCp5LGQuZ3Jhdml0YXRpb25Gb3JjZVk9LXRoaXMuZ3Jhdml0eUNvbnN0YW50KnYpKToodz1wLmdldEVzdGltYXRlZFNpemUoKSp0aGlzLmNvbXBvdW5kR3Jhdml0eVJhbmdlRmFjdG9yLCh4Pnd8fGI+dykmJihkLmdyYXZpdGF0aW9uRm9yY2VYPS10aGlzLmdyYXZpdHlDb25zdGFudCp5KnRoaXMuY29tcG91bmRHcmF2aXR5Q29uc3RhbnQsZC5ncmF2aXRhdGlvbkZvcmNlWT0tdGhpcy5ncmF2aXR5Q29uc3RhbnQqdip0aGlzLmNvbXBvdW5kR3Jhdml0eUNvbnN0YW50KSl9LGgucHJvdG90eXBlLmlzQ29udmVyZ2VkPWZ1bmN0aW9uKCl7dmFyIGQscD0hMTtyZXR1cm4gdGhpcy50b3RhbEl0ZXJhdGlvbnM+dGhpcy5tYXhJdGVyYXRpb25zLzMmJihwPU1hdGguYWJzKHRoaXMudG90YWxEaXNwbGFjZW1lbnQtdGhpcy5vbGRUb3RhbERpc3BsYWNlbWVudCk8MiksZD10aGlzLnRvdGFsRGlzcGxhY2VtZW50PHRoaXMudG90YWxEaXNwbGFjZW1lbnRUaHJlc2hvbGQsdGhpcy5vbGRUb3RhbERpc3BsYWNlbWVudD10aGlzLnRvdGFsRGlzcGxhY2VtZW50LGR8fHB9LGgucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24oKXt0aGlzLmFuaW1hdGlvbkR1cmluZ0xheW91dCYmIXRoaXMuaXNTdWJMYXlvdXQmJih0aGlzLm5vdEFuaW1hdGVkSXRlcmF0aW9ucz09dGhpcy5hbmltYXRpb25QZXJpb2Q/KHRoaXMudXBkYXRlKCksdGhpcy5ub3RBbmltYXRlZEl0ZXJhdGlvbnM9MCk6dGhpcy5ub3RBbmltYXRlZEl0ZXJhdGlvbnMrKyl9LGgucHJvdG90eXBlLmNhbGNOb09mQ2hpbGRyZW5Gb3JBbGxOb2Rlcz1mdW5jdGlvbigpe2Zvcih2YXIgZCxwPXRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCksbT0wO208cC5sZW5ndGg7bSsrKWQ9cFttXSxkLm5vT2ZDaGlsZHJlbj1kLmdldE5vT2ZDaGlsZHJlbigpfSxoLnByb3RvdHlwZS5jYWxjR3JpZD1mdW5jdGlvbihkKXt2YXIgcD0wLG09MDtwPXBhcnNlSW50KE1hdGguY2VpbCgoZC5nZXRSaWdodCgpLWQuZ2V0TGVmdCgpKS90aGlzLnJlcHVsc2lvblJhbmdlKSksbT1wYXJzZUludChNYXRoLmNlaWwoKGQuZ2V0Qm90dG9tKCktZC5nZXRUb3AoKSkvdGhpcy5yZXB1bHNpb25SYW5nZSkpO2Zvcih2YXIgZz1uZXcgQXJyYXkocCkseT0wO3k8cDt5KyspZ1t5XT1uZXcgQXJyYXkobSk7Zm9yKHZhciB5PTA7eTxwO3krKylmb3IodmFyIHY9MDt2PG07disrKWdbeV1bdl09bmV3IEFycmF5O3JldHVybiBnfSxoLnByb3RvdHlwZS5hZGROb2RlVG9HcmlkPWZ1bmN0aW9uKGQscCxtKXt2YXIgZz0wLHk9MCx2PTAseD0wO2c9cGFyc2VJbnQoTWF0aC5mbG9vcigoZC5nZXRSZWN0KCkueC1wKS90aGlzLnJlcHVsc2lvblJhbmdlKSkseT1wYXJzZUludChNYXRoLmZsb29yKChkLmdldFJlY3QoKS53aWR0aCtkLmdldFJlY3QoKS54LXApL3RoaXMucmVwdWxzaW9uUmFuZ2UpKSx2PXBhcnNlSW50KE1hdGguZmxvb3IoKGQuZ2V0UmVjdCgpLnktbSkvdGhpcy5yZXB1bHNpb25SYW5nZSkpLHg9cGFyc2VJbnQoTWF0aC5mbG9vcigoZC5nZXRSZWN0KCkuaGVpZ2h0K2QuZ2V0UmVjdCgpLnktbSkvdGhpcy5yZXB1bHNpb25SYW5nZSkpO2Zvcih2YXIgYj1nO2I8PXk7YisrKWZvcih2YXIgdz12O3c8PXg7dysrKXRoaXMuZ3JpZFtiXVt3XS5wdXNoKGQpLGQuc2V0R3JpZENvb3JkaW5hdGVzKGcseSx2LHgpfSxoLnByb3RvdHlwZS51cGRhdGVHcmlkPWZ1bmN0aW9uKCl7dmFyIGQscCxtPXRoaXMuZ2V0QWxsTm9kZXMoKTtmb3IodGhpcy5ncmlkPXRoaXMuY2FsY0dyaWQodGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpKSxkPTA7ZDxtLmxlbmd0aDtkKyspcD1tW2RdLHRoaXMuYWRkTm9kZVRvR3JpZChwLHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXRMZWZ0KCksdGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmdldFRvcCgpKX0saC5wcm90b3R5cGUuY2FsY3VsYXRlUmVwdWxzaW9uRm9yY2VPZkFOb2RlPWZ1bmN0aW9uKGQscCxtLGcpe2lmKHRoaXMudG90YWxJdGVyYXRpb25zJWEuR1JJRF9DQUxDVUxBVElPTl9DSEVDS19QRVJJT0Q9PTEmJm18fGcpe3ZhciB5PW5ldyBTZXQ7ZC5zdXJyb3VuZGluZz1uZXcgQXJyYXk7Zm9yKHZhciB2LHg9dGhpcy5ncmlkLGI9ZC5zdGFydFgtMTtiPGQuZmluaXNoWCsyO2IrKylmb3IodmFyIHc9ZC5zdGFydFktMTt3PGQuZmluaXNoWSsyO3crKylpZighKGI8MHx8dzwwfHxiPj14Lmxlbmd0aHx8dz49eFswXS5sZW5ndGgpKXtmb3IodmFyIEM9MDtDPHhbYl1bd10ubGVuZ3RoO0MrKylpZih2PXhbYl1bd11bQ10sIShkLmdldE93bmVyKCkhPXYuZ2V0T3duZXIoKXx8ZD09dikmJiFwLmhhcyh2KSYmIXkuaGFzKHYpKXt2YXIgVD1NYXRoLmFicyhkLmdldENlbnRlclgoKS12LmdldENlbnRlclgoKSktKGQuZ2V0V2lkdGgoKS8yK3YuZ2V0V2lkdGgoKS8yKSxFPU1hdGguYWJzKGQuZ2V0Q2VudGVyWSgpLXYuZ2V0Q2VudGVyWSgpKS0oZC5nZXRIZWlnaHQoKS8yK3YuZ2V0SGVpZ2h0KCkvMik7VDw9dGhpcy5yZXB1bHNpb25SYW5nZSYmRTw9dGhpcy5yZXB1bHNpb25SYW5nZSYmeS5hZGQodil9fWQuc3Vycm91bmRpbmc9W10uY29uY2F0KG4oeSkpfWZvcihiPTA7YjxkLnN1cnJvdW5kaW5nLmxlbmd0aDtiKyspdGhpcy5jYWxjUmVwdWxzaW9uRm9yY2UoZCxkLnN1cnJvdW5kaW5nW2JdKX0saC5wcm90b3R5cGUuY2FsY1JlcHVsc2lvblJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LHQuZXhwb3J0cz1ofSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMSksaT1yKDcpO2Z1bmN0aW9uIGEobCx1LGgpe24uY2FsbCh0aGlzLGwsdSxoKSx0aGlzLmlkZWFsTGVuZ3RoPWkuREVGQVVMVF9FREdFX0xFTkdUSH1vKGEsIkZETGF5b3V0RWRnZSIpLGEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpO2Zvcih2YXIgcyBpbiBuKWFbc109bltzXTt0LmV4cG9ydHM9YX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDMpO2Z1bmN0aW9uIGkocyxsLHUsaCl7bi5jYWxsKHRoaXMscyxsLHUsaCksdGhpcy5zcHJpbmdGb3JjZVg9MCx0aGlzLnNwcmluZ0ZvcmNlWT0wLHRoaXMucmVwdWxzaW9uRm9yY2VYPTAsdGhpcy5yZXB1bHNpb25Gb3JjZVk9MCx0aGlzLmdyYXZpdGF0aW9uRm9yY2VYPTAsdGhpcy5ncmF2aXRhdGlvbkZvcmNlWT0wLHRoaXMuZGlzcGxhY2VtZW50WD0wLHRoaXMuZGlzcGxhY2VtZW50WT0wLHRoaXMuc3RhcnRYPTAsdGhpcy5maW5pc2hYPTAsdGhpcy5zdGFydFk9MCx0aGlzLmZpbmlzaFk9MCx0aGlzLnN1cnJvdW5kaW5nPVtdfW8oaSwiRkRMYXlvdXROb2RlIiksaS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSk7Zm9yKHZhciBhIGluIG4paVthXT1uW2FdO2kucHJvdG90eXBlLnNldEdyaWRDb29yZGluYXRlcz1mdW5jdGlvbihzLGwsdSxoKXt0aGlzLnN0YXJ0WD1zLHRoaXMuZmluaXNoWD1sLHRoaXMuc3RhcnRZPXUsdGhpcy5maW5pc2hZPWh9LHQuZXhwb3J0cz1pfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oaSxhKXt0aGlzLndpZHRoPTAsdGhpcy5oZWlnaHQ9MCxpIT09bnVsbCYmYSE9PW51bGwmJih0aGlzLmhlaWdodD1hLHRoaXMud2lkdGg9aSl9byhuLCJEaW1lbnNpb25EIiksbi5wcm90b3R5cGUuZ2V0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53aWR0aH0sbi5wcm90b3R5cGUuc2V0V2lkdGg9ZnVuY3Rpb24oaSl7dGhpcy53aWR0aD1pfSxuLnByb3RvdHlwZS5nZXRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oZWlnaHR9LG4ucHJvdG90eXBlLnNldEhlaWdodD1mdW5jdGlvbihpKXt0aGlzLmhlaWdodD1pfSx0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDE0KTtmdW5jdGlvbiBpKCl7dGhpcy5tYXA9e30sdGhpcy5rZXlzPVtdfW8oaSwiSGFzaE1hcCIpLGkucHJvdG90eXBlLnB1dD1mdW5jdGlvbihhLHMpe3ZhciBsPW4uY3JlYXRlSUQoYSk7dGhpcy5jb250YWlucyhsKXx8KHRoaXMubWFwW2xdPXMsdGhpcy5rZXlzLnB1c2goYSkpfSxpLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbihhKXt2YXIgcz1uLmNyZWF0ZUlEKGEpO3JldHVybiB0aGlzLm1hcFthXSE9bnVsbH0saS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGEpe3ZhciBzPW4uY3JlYXRlSUQoYSk7cmV0dXJuIHRoaXMubWFwW3NdfSxpLnByb3RvdHlwZS5rZXlTZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5rZXlzfSx0LmV4cG9ydHM9aX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDE0KTtmdW5jdGlvbiBpKCl7dGhpcy5zZXQ9e319byhpLCJIYXNoU2V0IiksaS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGEpe3ZhciBzPW4uY3JlYXRlSUQoYSk7dGhpcy5jb250YWlucyhzKXx8KHRoaXMuc2V0W3NdPWEpfSxpLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oYSl7ZGVsZXRlIHRoaXMuc2V0W24uY3JlYXRlSUQoYSldfSxpLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuc2V0PXt9fSxpLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5zZXRbbi5jcmVhdGVJRChhKV09PWF9LGkucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaXplKCk9PT0wfSxpLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuc2V0KS5sZW5ndGh9LGkucHJvdG90eXBlLmFkZEFsbFRvPWZ1bmN0aW9uKGEpe2Zvcih2YXIgcz1PYmplY3Qua2V5cyh0aGlzLnNldCksbD1zLmxlbmd0aCx1PTA7dTxsO3UrKylhLnB1c2godGhpcy5zZXRbc1t1XV0pfSxpLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuc2V0KS5sZW5ndGh9LGkucHJvdG90eXBlLmFkZEFsbD1mdW5jdGlvbihhKXtmb3IodmFyIHM9YS5sZW5ndGgsbD0wO2w8cztsKyspe3ZhciB1PWFbbF07dGhpcy5hZGQodSl9fSx0LmV4cG9ydHM9aX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1mdW5jdGlvbigpe2Z1bmN0aW9uIGwodSxoKXtmb3IodmFyIGY9MDtmPGgubGVuZ3RoO2YrKyl7dmFyIGQ9aFtmXTtkLmVudW1lcmFibGU9ZC5lbnVtZXJhYmxlfHwhMSxkLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZCYmKGQud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1LGQua2V5LGQpfX1yZXR1cm4gbyhsLCJkZWZpbmVQcm9wZXJ0aWVzIiksZnVuY3Rpb24odSxoLGYpe3JldHVybiBoJiZsKHUucHJvdG90eXBlLGgpLGYmJmwodSxmKSx1fX0oKTtmdW5jdGlvbiBpKGwsdSl7aWYoIShsIGluc3RhbmNlb2YgdSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9byhpLCJfY2xhc3NDYWxsQ2hlY2siKTt2YXIgYT1yKDExKSxzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbCh1LGgpe2kodGhpcyxsKSwoaCE9PW51bGx8fGghPT12b2lkIDApJiYodGhpcy5jb21wYXJlRnVuY3Rpb249dGhpcy5fZGVmYXVsdENvbXBhcmVGdW5jdGlvbik7dmFyIGY9dm9pZCAwO3UgaW5zdGFuY2VvZiBhP2Y9dS5zaXplKCk6Zj11Lmxlbmd0aCx0aGlzLl9xdWlja3NvcnQodSwwLGYtMSl9cmV0dXJuIG8obCwiUXVpY2tzb3J0IiksbihsLFt7a2V5OiJfcXVpY2tzb3J0Iix2YWx1ZTpvKGZ1bmN0aW9uKGgsZixkKXtpZihmPGQpe3ZhciBwPXRoaXMuX3BhcnRpdGlvbihoLGYsZCk7dGhpcy5fcXVpY2tzb3J0KGgsZixwKSx0aGlzLl9xdWlja3NvcnQoaCxwKzEsZCl9fSwiX3F1aWNrc29ydCIpfSx7a2V5OiJfcGFydGl0aW9uIix2YWx1ZTpvKGZ1bmN0aW9uKGgsZixkKXtmb3IodmFyIHA9dGhpcy5fZ2V0KGgsZiksbT1mLGc9ZDs7KXtmb3IoO3RoaXMuY29tcGFyZUZ1bmN0aW9uKHAsdGhpcy5fZ2V0KGgsZykpOylnLS07Zm9yKDt0aGlzLmNvbXBhcmVGdW5jdGlvbih0aGlzLl9nZXQoaCxtKSxwKTspbSsrO2lmKG08Zyl0aGlzLl9zd2FwKGgsbSxnKSxtKyssZy0tO2Vsc2UgcmV0dXJuIGd9fSwiX3BhcnRpdGlvbiIpfSx7a2V5OiJfZ2V0Iix2YWx1ZTpvKGZ1bmN0aW9uKGgsZil7cmV0dXJuIGggaW5zdGFuY2VvZiBhP2guZ2V0X29iamVjdF9hdChmKTpoW2ZdfSwiX2dldCIpfSx7a2V5OiJfc2V0Iix2YWx1ZTpvKGZ1bmN0aW9uKGgsZixkKXtoIGluc3RhbmNlb2YgYT9oLnNldF9vYmplY3RfYXQoZixkKTpoW2ZdPWR9LCJfc2V0Iil9LHtrZXk6Il9zd2FwIix2YWx1ZTpvKGZ1bmN0aW9uKGgsZixkKXt2YXIgcD10aGlzLl9nZXQoaCxmKTt0aGlzLl9zZXQoaCxmLHRoaXMuX2dldChoLGQpKSx0aGlzLl9zZXQoaCxkLHApfSwiX3N3YXAiKX0se2tleToiX2RlZmF1bHRDb21wYXJlRnVuY3Rpb24iLHZhbHVlOm8oZnVuY3Rpb24oaCxmKXtyZXR1cm4gZj5ofSwiX2RlZmF1bHRDb21wYXJlRnVuY3Rpb24iKX1dKSxsfSgpO3QuZXhwb3J0cz1zfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcyhsLHUpe2Zvcih2YXIgaD0wO2g8dS5sZW5ndGg7aCsrKXt2YXIgZj11W2hdO2YuZW51bWVyYWJsZT1mLmVudW1lcmFibGV8fCExLGYuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBmJiYoZi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsZi5rZXksZil9fXJldHVybiBvKHMsImRlZmluZVByb3BlcnRpZXMiKSxmdW5jdGlvbihsLHUsaCl7cmV0dXJuIHUmJnMobC5wcm90b3R5cGUsdSksaCYmcyhsLGgpLGx9fSgpO2Z1bmN0aW9uIGkocyxsKXtpZighKHMgaW5zdGFuY2VvZiBsKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1vKGksIl9jbGFzc0NhbGxDaGVjayIpO3ZhciBhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcyhsLHUpe3ZhciBoPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXToxLGY9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOi0xLGQ9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOi0xO2kodGhpcyxzKSx0aGlzLnNlcXVlbmNlMT1sLHRoaXMuc2VxdWVuY2UyPXUsdGhpcy5tYXRjaF9zY29yZT1oLHRoaXMubWlzbWF0Y2hfcGVuYWx0eT1mLHRoaXMuZ2FwX3BlbmFsdHk9ZCx0aGlzLmlNYXg9bC5sZW5ndGgrMSx0aGlzLmpNYXg9dS5sZW5ndGgrMSx0aGlzLmdyaWQ9bmV3IEFycmF5KHRoaXMuaU1heCk7Zm9yKHZhciBwPTA7cDx0aGlzLmlNYXg7cCsrKXt0aGlzLmdyaWRbcF09bmV3IEFycmF5KHRoaXMuak1heCk7Zm9yKHZhciBtPTA7bTx0aGlzLmpNYXg7bSsrKXRoaXMuZ3JpZFtwXVttXT0wfXRoaXMudHJhY2ViYWNrR3JpZD1uZXcgQXJyYXkodGhpcy5pTWF4KTtmb3IodmFyIGc9MDtnPHRoaXMuaU1heDtnKyspe3RoaXMudHJhY2ViYWNrR3JpZFtnXT1uZXcgQXJyYXkodGhpcy5qTWF4KTtmb3IodmFyIHk9MDt5PHRoaXMuak1heDt5KyspdGhpcy50cmFjZWJhY2tHcmlkW2ddW3ldPVtudWxsLG51bGwsbnVsbF19dGhpcy5hbGlnbm1lbnRzPVtdLHRoaXMuc2NvcmU9LTEsdGhpcy5jb21wdXRlR3JpZHMoKX1yZXR1cm4gbyhzLCJOZWVkbGVtYW5XdW5zY2giKSxuKHMsW3trZXk6ImdldFNjb3JlIix2YWx1ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2NvcmV9LCJnZXRTY29yZSIpfSx7a2V5OiJnZXRBbGlnbm1lbnRzIix2YWx1ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWxpZ25tZW50c30sImdldEFsaWdubWVudHMiKX0se2tleToiY29tcHV0ZUdyaWRzIix2YWx1ZTpvKGZ1bmN0aW9uKCl7Zm9yKHZhciB1PTE7dTx0aGlzLmpNYXg7dSsrKXRoaXMuZ3JpZFswXVt1XT10aGlzLmdyaWRbMF1bdS0xXSt0aGlzLmdhcF9wZW5hbHR5LHRoaXMudHJhY2ViYWNrR3JpZFswXVt1XT1bITEsITEsITBdO2Zvcih2YXIgaD0xO2g8dGhpcy5pTWF4O2grKyl0aGlzLmdyaWRbaF1bMF09dGhpcy5ncmlkW2gtMV1bMF0rdGhpcy5nYXBfcGVuYWx0eSx0aGlzLnRyYWNlYmFja0dyaWRbaF1bMF09WyExLCEwLCExXTtmb3IodmFyIGY9MTtmPHRoaXMuaU1heDtmKyspZm9yKHZhciBkPTE7ZDx0aGlzLmpNYXg7ZCsrKXt2YXIgcD12b2lkIDA7dGhpcy5zZXF1ZW5jZTFbZi0xXT09PXRoaXMuc2VxdWVuY2UyW2QtMV0/cD10aGlzLmdyaWRbZi0xXVtkLTFdK3RoaXMubWF0Y2hfc2NvcmU6cD10aGlzLmdyaWRbZi0xXVtkLTFdK3RoaXMubWlzbWF0Y2hfcGVuYWx0eTt2YXIgbT10aGlzLmdyaWRbZi0xXVtkXSt0aGlzLmdhcF9wZW5hbHR5LGc9dGhpcy5ncmlkW2ZdW2QtMV0rdGhpcy5nYXBfcGVuYWx0eSx5PVtwLG0sZ10sdj10aGlzLmFycmF5QWxsTWF4SW5kZXhlcyh5KTt0aGlzLmdyaWRbZl1bZF09eVt2WzBdXSx0aGlzLnRyYWNlYmFja0dyaWRbZl1bZF09W3YuaW5jbHVkZXMoMCksdi5pbmNsdWRlcygxKSx2LmluY2x1ZGVzKDIpXX10aGlzLnNjb3JlPXRoaXMuZ3JpZFt0aGlzLmlNYXgtMV1bdGhpcy5qTWF4LTFdfSwiY29tcHV0ZUdyaWRzIil9LHtrZXk6ImFsaWdubWVudFRyYWNlYmFjayIsdmFsdWU6byhmdW5jdGlvbigpe3ZhciB1PVtdO2Zvcih1LnB1c2goe3BvczpbdGhpcy5zZXF1ZW5jZTEubGVuZ3RoLHRoaXMuc2VxdWVuY2UyLmxlbmd0aF0sc2VxMToiIixzZXEyOiIifSk7dVswXTspe3ZhciBoPXVbMF0sZj10aGlzLnRyYWNlYmFja0dyaWRbaC5wb3NbMF1dW2gucG9zWzFdXTtmWzBdJiZ1LnB1c2goe3BvczpbaC5wb3NbMF0tMSxoLnBvc1sxXS0xXSxzZXExOnRoaXMuc2VxdWVuY2UxW2gucG9zWzBdLTFdK2guc2VxMSxzZXEyOnRoaXMuc2VxdWVuY2UyW2gucG9zWzFdLTFdK2guc2VxMn0pLGZbMV0mJnUucHVzaCh7cG9zOltoLnBvc1swXS0xLGgucG9zWzFdXSxzZXExOnRoaXMuc2VxdWVuY2UxW2gucG9zWzBdLTFdK2guc2VxMSxzZXEyOiItIitoLnNlcTJ9KSxmWzJdJiZ1LnB1c2goe3BvczpbaC5wb3NbMF0saC5wb3NbMV0tMV0sc2VxMToiLSIraC5zZXExLHNlcTI6dGhpcy5zZXF1ZW5jZTJbaC5wb3NbMV0tMV0raC5zZXEyfSksaC5wb3NbMF09PT0wJiZoLnBvc1sxXT09PTAmJnRoaXMuYWxpZ25tZW50cy5wdXNoKHtzZXF1ZW5jZTE6aC5zZXExLHNlcXVlbmNlMjpoLnNlcTJ9KSx1LnNoaWZ0KCl9cmV0dXJuIHRoaXMuYWxpZ25tZW50c30sImFsaWdubWVudFRyYWNlYmFjayIpfSx7a2V5OiJnZXRBbGxJbmRleGVzIix2YWx1ZTpvKGZ1bmN0aW9uKHUsaCl7Zm9yKHZhciBmPVtdLGQ9LTE7KGQ9dS5pbmRleE9mKGgsZCsxKSkhPT0tMTspZi5wdXNoKGQpO3JldHVybiBmfSwiZ2V0QWxsSW5kZXhlcyIpfSx7a2V5OiJhcnJheUFsbE1heEluZGV4ZXMiLHZhbHVlOm8oZnVuY3Rpb24odSl7cmV0dXJuIHRoaXMuZ2V0QWxsSW5kZXhlcyh1LE1hdGgubWF4LmFwcGx5KG51bGwsdSkpfSwiYXJyYXlBbGxNYXhJbmRleGVzIil9XSksc30oKTt0LmV4cG9ydHM9YX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1vKGZ1bmN0aW9uKCl7fSwibGF5b3V0QmFzZSIpO24uRkRMYXlvdXQ9cigxOCksbi5GRExheW91dENvbnN0YW50cz1yKDcpLG4uRkRMYXlvdXRFZGdlPXIoMTkpLG4uRkRMYXlvdXROb2RlPXIoMjApLG4uRGltZW5zaW9uRD1yKDIxKSxuLkhhc2hNYXA9cigyMiksbi5IYXNoU2V0PXIoMjMpLG4uSUdlb21ldHJ5PXIoOCksbi5JTWF0aD1yKDkpLG4uSW50ZWdlcj1yKDEwKSxuLlBvaW50PXIoMTIpLG4uUG9pbnREPXIoNCksbi5SYW5kb21TZWVkPXIoMTYpLG4uUmVjdGFuZ2xlRD1yKDEzKSxuLlRyYW5zZm9ybT1yKDE3KSxuLlVuaXF1ZUlER2VuZXJldG9yPXIoMTQpLG4uUXVpY2tzb3J0PXIoMjQpLG4uTGlua2VkTGlzdD1yKDExKSxuLkxHcmFwaE9iamVjdD1yKDIpLG4uTEdyYXBoPXIoNSksbi5MRWRnZT1yKDEpLG4uTEdyYXBoTWFuYWdlcj1yKDYpLG4uTE5vZGU9cigzKSxuLkxheW91dD1yKDE1KSxuLkxheW91dENvbnN0YW50cz1yKDApLG4uTmVlZGxlbWFuV3Vuc2NoPXIoMjUpLHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXt0aGlzLmxpc3RlbmVycz1bXX1vKG4sIkVtaXR0ZXIiKTt2YXIgaT1uLnByb3RvdHlwZTtpLmFkZExpc3RlbmVyPWZ1bmN0aW9uKGEscyl7dGhpcy5saXN0ZW5lcnMucHVzaCh7ZXZlbnQ6YSxjYWxsYmFjazpzfSl9LGkucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24oYSxzKXtmb3IodmFyIGw9dGhpcy5saXN0ZW5lcnMubGVuZ3RoO2w+PTA7bC0tKXt2YXIgdT10aGlzLmxpc3RlbmVyc1tsXTt1LmV2ZW50PT09YSYmdS5jYWxsYmFjaz09PXMmJnRoaXMubGlzdGVuZXJzLnNwbGljZShsLDEpfX0saS5lbWl0PWZ1bmN0aW9uKGEscyl7Zm9yKHZhciBsPTA7bDx0aGlzLmxpc3RlbmVycy5sZW5ndGg7bCsrKXt2YXIgdT10aGlzLmxpc3RlbmVyc1tsXTthPT09dS5ldmVudCYmdS5jYWxsYmFjayhzKX19LHQuZXhwb3J0cz1ufV0pfSl9KTt2YXIgQUI9TWkoKGg0LENCKT0+eyJ1c2Ugc3RyaWN0IjtvKGZ1bmN0aW9uKGUscil7dHlwZW9mIGg0PT0ib2JqZWN0IiYmdHlwZW9mIENCPT0ib2JqZWN0Ij9DQi5leHBvcnRzPXIoU0IoKSk6dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZD9kZWZpbmUoWyJsYXlvdXQtYmFzZSJdLHIpOnR5cGVvZiBoND09Im9iamVjdCI/aDQuY29zZUJhc2U9cihTQigpKTplLmNvc2VCYXNlPXIoZS5sYXlvdXRCYXNlKX0sIndlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIikoaDQsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByPXt9O2Z1bmN0aW9uIG4oaSl7aWYocltpXSlyZXR1cm4gcltpXS5leHBvcnRzO3ZhciBhPXJbaV09e2ksbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gZVtpXS5jYWxsKGEuZXhwb3J0cyxhLGEuZXhwb3J0cyxuKSxhLmw9ITAsYS5leHBvcnRzfXJldHVybiBvKG4sIl9fd2VicGFja19yZXF1aXJlX18iKSxuLm09ZSxuLmM9cixuLmk9ZnVuY3Rpb24oaSl7cmV0dXJuIGl9LG4uZD1mdW5jdGlvbihpLGEscyl7bi5vKGksYSl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLGEse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLGdldDpzfSl9LG4ubj1mdW5jdGlvbihpKXt2YXIgYT1pJiZpLl9fZXNNb2R1bGU/byhmdW5jdGlvbigpe3JldHVybiBpLmRlZmF1bHR9LCJnZXREZWZhdWx0Iik6byhmdW5jdGlvbigpe3JldHVybiBpfSwiZ2V0TW9kdWxlRXhwb3J0cyIpO3JldHVybiBuLmQoYSwiYSIsYSksYX0sbi5vPWZ1bmN0aW9uKGksYSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLGEpfSxuLnA9IiIsbihuLnM9Nyl9KFtmdW5jdGlvbihlLHIpe2UuZXhwb3J0cz10fSxmdW5jdGlvbihlLHIsbil7InVzZSBzdHJpY3QiO3ZhciBpPW4oMCkuRkRMYXlvdXRDb25zdGFudHM7ZnVuY3Rpb24gYSgpe31vKGEsIkNvU0VDb25zdGFudHMiKTtmb3IodmFyIHMgaW4gaSlhW3NdPWlbc107YS5ERUZBVUxUX1VTRV9NVUxUSV9MRVZFTF9TQ0FMSU5HPSExLGEuREVGQVVMVF9SQURJQUxfU0VQQVJBVElPTj1pLkRFRkFVTFRfRURHRV9MRU5HVEgsYS5ERUZBVUxUX0NPTVBPTkVOVF9TRVBFUkFUSU9OPTYwLGEuVElMRT0hMCxhLlRJTElOR19QQURESU5HX1ZFUlRJQ0FMPTEwLGEuVElMSU5HX1BBRERJTkdfSE9SSVpPTlRBTD0xMCxhLlRSRUVfUkVEVUNUSU9OX09OX0lOQ1JFTUVOVEFMPSExLGUuZXhwb3J0cz1hfSxmdW5jdGlvbihlLHIsbil7InVzZSBzdHJpY3QiO3ZhciBpPW4oMCkuRkRMYXlvdXRFZGdlO2Z1bmN0aW9uIGEobCx1LGgpe2kuY2FsbCh0aGlzLGwsdSxoKX1vKGEsIkNvU0VFZGdlIiksYS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSk7Zm9yKHZhciBzIGluIGkpYVtzXT1pW3NdO2UuZXhwb3J0cz1hfSxmdW5jdGlvbihlLHIsbil7InVzZSBzdHJpY3QiO3ZhciBpPW4oMCkuTEdyYXBoO2Z1bmN0aW9uIGEobCx1LGgpe2kuY2FsbCh0aGlzLGwsdSxoKX1vKGEsIkNvU0VHcmFwaCIpLGEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaS5wcm90b3R5cGUpO2Zvcih2YXIgcyBpbiBpKWFbc109aVtzXTtlLmV4cG9ydHM9YX0sZnVuY3Rpb24oZSxyLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgaT1uKDApLkxHcmFwaE1hbmFnZXI7ZnVuY3Rpb24gYShsKXtpLmNhbGwodGhpcyxsKX1vKGEsIkNvU0VHcmFwaE1hbmFnZXIiKSxhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKTtmb3IodmFyIHMgaW4gaSlhW3NdPWlbc107ZS5leHBvcnRzPWF9LGZ1bmN0aW9uKGUscixuKXsidXNlIHN0cmljdCI7dmFyIGk9bigwKS5GRExheW91dE5vZGUsYT1uKDApLklNYXRoO2Z1bmN0aW9uIHModSxoLGYsZCl7aS5jYWxsKHRoaXMsdSxoLGYsZCl9byhzLCJDb1NFTm9kZSIpLHMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaS5wcm90b3R5cGUpO2Zvcih2YXIgbCBpbiBpKXNbbF09aVtsXTtzLnByb3RvdHlwZS5tb3ZlPWZ1bmN0aW9uKCl7dmFyIHU9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0TGF5b3V0KCk7dGhpcy5kaXNwbGFjZW1lbnRYPXUuY29vbGluZ0ZhY3RvcioodGhpcy5zcHJpbmdGb3JjZVgrdGhpcy5yZXB1bHNpb25Gb3JjZVgrdGhpcy5ncmF2aXRhdGlvbkZvcmNlWCkvdGhpcy5ub09mQ2hpbGRyZW4sdGhpcy5kaXNwbGFjZW1lbnRZPXUuY29vbGluZ0ZhY3RvcioodGhpcy5zcHJpbmdGb3JjZVkrdGhpcy5yZXB1bHNpb25Gb3JjZVkrdGhpcy5ncmF2aXRhdGlvbkZvcmNlWSkvdGhpcy5ub09mQ2hpbGRyZW4sTWF0aC5hYnModGhpcy5kaXNwbGFjZW1lbnRYKT51LmNvb2xpbmdGYWN0b3IqdS5tYXhOb2RlRGlzcGxhY2VtZW50JiYodGhpcy5kaXNwbGFjZW1lbnRYPXUuY29vbGluZ0ZhY3Rvcip1Lm1heE5vZGVEaXNwbGFjZW1lbnQqYS5zaWduKHRoaXMuZGlzcGxhY2VtZW50WCkpLE1hdGguYWJzKHRoaXMuZGlzcGxhY2VtZW50WSk+dS5jb29saW5nRmFjdG9yKnUubWF4Tm9kZURpc3BsYWNlbWVudCYmKHRoaXMuZGlzcGxhY2VtZW50WT11LmNvb2xpbmdGYWN0b3IqdS5tYXhOb2RlRGlzcGxhY2VtZW50KmEuc2lnbih0aGlzLmRpc3BsYWNlbWVudFkpKSx0aGlzLmNoaWxkPT1udWxsP3RoaXMubW92ZUJ5KHRoaXMuZGlzcGxhY2VtZW50WCx0aGlzLmRpc3BsYWNlbWVudFkpOnRoaXMuY2hpbGQuZ2V0Tm9kZXMoKS5sZW5ndGg9PTA/dGhpcy5tb3ZlQnkodGhpcy5kaXNwbGFjZW1lbnRYLHRoaXMuZGlzcGxhY2VtZW50WSk6dGhpcy5wcm9wb2dhdGVEaXNwbGFjZW1lbnRUb0NoaWxkcmVuKHRoaXMuZGlzcGxhY2VtZW50WCx0aGlzLmRpc3BsYWNlbWVudFkpLHUudG90YWxEaXNwbGFjZW1lbnQrPU1hdGguYWJzKHRoaXMuZGlzcGxhY2VtZW50WCkrTWF0aC5hYnModGhpcy5kaXNwbGFjZW1lbnRZKSx0aGlzLnNwcmluZ0ZvcmNlWD0wLHRoaXMuc3ByaW5nRm9yY2VZPTAsdGhpcy5yZXB1bHNpb25Gb3JjZVg9MCx0aGlzLnJlcHVsc2lvbkZvcmNlWT0wLHRoaXMuZ3Jhdml0YXRpb25Gb3JjZVg9MCx0aGlzLmdyYXZpdGF0aW9uRm9yY2VZPTAsdGhpcy5kaXNwbGFjZW1lbnRYPTAsdGhpcy5kaXNwbGFjZW1lbnRZPTB9LHMucHJvdG90eXBlLnByb3BvZ2F0ZURpc3BsYWNlbWVudFRvQ2hpbGRyZW49ZnVuY3Rpb24odSxoKXtmb3IodmFyIGY9dGhpcy5nZXRDaGlsZCgpLmdldE5vZGVzKCksZCxwPTA7cDxmLmxlbmd0aDtwKyspZD1mW3BdLGQuZ2V0Q2hpbGQoKT09bnVsbD8oZC5tb3ZlQnkodSxoKSxkLmRpc3BsYWNlbWVudFgrPXUsZC5kaXNwbGFjZW1lbnRZKz1oKTpkLnByb3BvZ2F0ZURpc3BsYWNlbWVudFRvQ2hpbGRyZW4odSxoKX0scy5wcm90b3R5cGUuc2V0UHJlZDE9ZnVuY3Rpb24odSl7dGhpcy5wcmVkMT11fSxzLnByb3RvdHlwZS5nZXRQcmVkMT1mdW5jdGlvbigpe3JldHVybiBwcmVkMX0scy5wcm90b3R5cGUuZ2V0UHJlZDI9ZnVuY3Rpb24oKXtyZXR1cm4gcHJlZDJ9LHMucHJvdG90eXBlLnNldE5leHQ9ZnVuY3Rpb24odSl7dGhpcy5uZXh0PXV9LHMucHJvdG90eXBlLmdldE5leHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV4dH0scy5wcm90b3R5cGUuc2V0UHJvY2Vzc2VkPWZ1bmN0aW9uKHUpe3RoaXMucHJvY2Vzc2VkPXV9LHMucHJvdG90eXBlLmlzUHJvY2Vzc2VkPWZ1bmN0aW9uKCl7cmV0dXJuIHByb2Nlc3NlZH0sZS5leHBvcnRzPXN9LGZ1bmN0aW9uKGUscixuKXsidXNlIHN0cmljdCI7dmFyIGk9bigwKS5GRExheW91dCxhPW4oNCkscz1uKDMpLGw9big1KSx1PW4oMiksaD1uKDEpLGY9bigwKS5GRExheW91dENvbnN0YW50cyxkPW4oMCkuTGF5b3V0Q29uc3RhbnRzLHA9bigwKS5Qb2ludCxtPW4oMCkuUG9pbnRELGc9bigwKS5MYXlvdXQseT1uKDApLkludGVnZXIsdj1uKDApLklHZW9tZXRyeSx4PW4oMCkuTEdyYXBoLGI9bigwKS5UcmFuc2Zvcm07ZnVuY3Rpb24gdygpe2kuY2FsbCh0aGlzKSx0aGlzLnRvQmVUaWxlZD17fX1vKHcsIkNvU0VMYXlvdXQiKSx3LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKTtmb3IodmFyIEMgaW4gaSl3W0NdPWlbQ107dy5wcm90b3R5cGUubmV3R3JhcGhNYW5hZ2VyPWZ1bmN0aW9uKCl7dmFyIFQ9bmV3IGEodGhpcyk7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyPVQsVH0sdy5wcm90b3R5cGUubmV3R3JhcGg9ZnVuY3Rpb24oVCl7cmV0dXJuIG5ldyBzKG51bGwsdGhpcy5ncmFwaE1hbmFnZXIsVCl9LHcucHJvdG90eXBlLm5ld05vZGU9ZnVuY3Rpb24oVCl7cmV0dXJuIG5ldyBsKHRoaXMuZ3JhcGhNYW5hZ2VyLFQpfSx3LnByb3RvdHlwZS5uZXdFZGdlPWZ1bmN0aW9uKFQpe3JldHVybiBuZXcgdShudWxsLG51bGwsVCl9LHcucHJvdG90eXBlLmluaXRQYXJhbWV0ZXJzPWZ1bmN0aW9uKCl7aS5wcm90b3R5cGUuaW5pdFBhcmFtZXRlcnMuY2FsbCh0aGlzLGFyZ3VtZW50cyksdGhpcy5pc1N1YkxheW91dHx8KGguREVGQVVMVF9FREdFX0xFTkdUSDwxMD90aGlzLmlkZWFsRWRnZUxlbmd0aD0xMDp0aGlzLmlkZWFsRWRnZUxlbmd0aD1oLkRFRkFVTFRfRURHRV9MRU5HVEgsdGhpcy51c2VTbWFydElkZWFsRWRnZUxlbmd0aENhbGN1bGF0aW9uPWguREVGQVVMVF9VU0VfU01BUlRfSURFQUxfRURHRV9MRU5HVEhfQ0FMQ1VMQVRJT04sdGhpcy5zcHJpbmdDb25zdGFudD1mLkRFRkFVTFRfU1BSSU5HX1NUUkVOR1RILHRoaXMucmVwdWxzaW9uQ29uc3RhbnQ9Zi5ERUZBVUxUX1JFUFVMU0lPTl9TVFJFTkdUSCx0aGlzLmdyYXZpdHlDb25zdGFudD1mLkRFRkFVTFRfR1JBVklUWV9TVFJFTkdUSCx0aGlzLmNvbXBvdW5kR3Jhdml0eUNvbnN0YW50PWYuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1NUUkVOR1RILHRoaXMuZ3Jhdml0eVJhbmdlRmFjdG9yPWYuREVGQVVMVF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUix0aGlzLmNvbXBvdW5kR3Jhdml0eVJhbmdlRmFjdG9yPWYuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUix0aGlzLnBydW5lZE5vZGVzQWxsPVtdLHRoaXMuZ3Jvd1RyZWVJdGVyYXRpb25zPTAsdGhpcy5hZnRlckdyb3d0aEl0ZXJhdGlvbnM9MCx0aGlzLmlzVHJlZUdyb3dpbmc9ITEsdGhpcy5pc0dyb3d0aEZpbmlzaGVkPSExLHRoaXMuY29vbGluZ0N5Y2xlPTAsdGhpcy5tYXhDb29saW5nQ3ljbGU9dGhpcy5tYXhJdGVyYXRpb25zL2YuQ09OVkVSR0VOQ0VfQ0hFQ0tfUEVSSU9ELHRoaXMuZmluYWxUZW1wZXJhdHVyZT1mLkNPTlZFUkdFTkNFX0NIRUNLX1BFUklPRC90aGlzLm1heEl0ZXJhdGlvbnMsdGhpcy5jb29saW5nQWRqdXN0ZXI9MSl9LHcucHJvdG90eXBlLmxheW91dD1mdW5jdGlvbigpe3ZhciBUPWQuREVGQVVMVF9DUkVBVEVfQkVORFNfQVNfTkVFREVEO3JldHVybiBUJiYodGhpcy5jcmVhdGVCZW5kcG9pbnRzKCksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxFZGdlcygpKSx0aGlzLmxldmVsPTAsdGhpcy5jbGFzc2ljTGF5b3V0KCl9LHcucHJvdG90eXBlLmNsYXNzaWNMYXlvdXQ9ZnVuY3Rpb24oKXtpZih0aGlzLm5vZGVzV2l0aEdyYXZpdHk9dGhpcy5jYWxjdWxhdGVOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvblRvKCksdGhpcy5ncmFwaE1hbmFnZXIuc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24odGhpcy5ub2Rlc1dpdGhHcmF2aXR5KSx0aGlzLmNhbGNOb09mQ2hpbGRyZW5Gb3JBbGxOb2RlcygpLHRoaXMuZ3JhcGhNYW5hZ2VyLmNhbGNMb3dlc3RDb21tb25BbmNlc3RvcnMoKSx0aGlzLmdyYXBoTWFuYWdlci5jYWxjSW5jbHVzaW9uVHJlZURlcHRocygpLHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5jYWxjRXN0aW1hdGVkU2l6ZSgpLHRoaXMuY2FsY0lkZWFsRWRnZUxlbmd0aHMoKSx0aGlzLmluY3JlbWVudGFsKXtpZihoLlRSRUVfUkVEVUNUSU9OX09OX0lOQ1JFTUVOVEFMKXt0aGlzLnJlZHVjZVRyZWVzKCksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbigpO3ZhciBFPW5ldyBTZXQodGhpcy5nZXRBbGxOb2RlcygpKSxBPXRoaXMubm9kZXNXaXRoR3Jhdml0eS5maWx0ZXIoZnVuY3Rpb24oSSl7cmV0dXJuIEUuaGFzKEkpfSk7dGhpcy5ncmFwaE1hbmFnZXIuc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oQSl9fWVsc2V7dmFyIFQ9dGhpcy5nZXRGbGF0Rm9yZXN0KCk7aWYoVC5sZW5ndGg+MCl0aGlzLnBvc2l0aW9uTm9kZXNSYWRpYWxseShUKTtlbHNle3RoaXMucmVkdWNlVHJlZXMoKSx0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKCk7dmFyIEU9bmV3IFNldCh0aGlzLmdldEFsbE5vZGVzKCkpLEE9dGhpcy5ub2Rlc1dpdGhHcmF2aXR5LmZpbHRlcihmdW5jdGlvbihTKXtyZXR1cm4gRS5oYXMoUyl9KTt0aGlzLmdyYXBoTWFuYWdlci5zZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbihBKSx0aGlzLnBvc2l0aW9uTm9kZXNSYW5kb21seSgpfX1yZXR1cm4gdGhpcy5pbml0U3ByaW5nRW1iZWRkZXIoKSx0aGlzLnJ1blNwcmluZ0VtYmVkZGVyKCksITB9LHcucHJvdG90eXBlLnRpY2s9ZnVuY3Rpb24oKXtpZih0aGlzLnRvdGFsSXRlcmF0aW9ucysrLHRoaXMudG90YWxJdGVyYXRpb25zPT09dGhpcy5tYXhJdGVyYXRpb25zJiYhdGhpcy5pc1RyZWVHcm93aW5nJiYhdGhpcy5pc0dyb3d0aEZpbmlzaGVkKWlmKHRoaXMucHJ1bmVkTm9kZXNBbGwubGVuZ3RoPjApdGhpcy5pc1RyZWVHcm93aW5nPSEwO2Vsc2UgcmV0dXJuITA7aWYodGhpcy50b3RhbEl0ZXJhdGlvbnMlZi5DT05WRVJHRU5DRV9DSEVDS19QRVJJT0Q9PTAmJiF0aGlzLmlzVHJlZUdyb3dpbmcmJiF0aGlzLmlzR3Jvd3RoRmluaXNoZWQpe2lmKHRoaXMuaXNDb252ZXJnZWQoKSlpZih0aGlzLnBydW5lZE5vZGVzQWxsLmxlbmd0aD4wKXRoaXMuaXNUcmVlR3Jvd2luZz0hMDtlbHNlIHJldHVybiEwO3RoaXMuY29vbGluZ0N5Y2xlKyssdGhpcy5sYXlvdXRRdWFsaXR5PT0wP3RoaXMuY29vbGluZ0FkanVzdGVyPXRoaXMuY29vbGluZ0N5Y2xlOnRoaXMubGF5b3V0UXVhbGl0eT09MSYmKHRoaXMuY29vbGluZ0FkanVzdGVyPXRoaXMuY29vbGluZ0N5Y2xlLzMpLHRoaXMuY29vbGluZ0ZhY3Rvcj1NYXRoLm1heCh0aGlzLmluaXRpYWxDb29saW5nRmFjdG9yLU1hdGgucG93KHRoaXMuY29vbGluZ0N5Y2xlLE1hdGgubG9nKDEwMCoodGhpcy5pbml0aWFsQ29vbGluZ0ZhY3Rvci10aGlzLmZpbmFsVGVtcGVyYXR1cmUpKS9NYXRoLmxvZyh0aGlzLm1heENvb2xpbmdDeWNsZSkpLzEwMCp0aGlzLmNvb2xpbmdBZGp1c3Rlcix0aGlzLmZpbmFsVGVtcGVyYXR1cmUpLHRoaXMuYW5pbWF0aW9uUGVyaW9kPU1hdGguY2VpbCh0aGlzLmluaXRpYWxBbmltYXRpb25QZXJpb2QqTWF0aC5zcXJ0KHRoaXMuY29vbGluZ0ZhY3RvcikpfWlmKHRoaXMuaXNUcmVlR3Jvd2luZyl7aWYodGhpcy5ncm93VHJlZUl0ZXJhdGlvbnMlMTA9PTApaWYodGhpcy5wcnVuZWROb2Rlc0FsbC5sZW5ndGg+MCl7dGhpcy5ncmFwaE1hbmFnZXIudXBkYXRlQm91bmRzKCksdGhpcy51cGRhdGVHcmlkKCksdGhpcy5ncm93VHJlZSh0aGlzLnBydW5lZE5vZGVzQWxsKSx0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKCk7dmFyIFQ9bmV3IFNldCh0aGlzLmdldEFsbE5vZGVzKCkpLEU9dGhpcy5ub2Rlc1dpdGhHcmF2aXR5LmZpbHRlcihmdW5jdGlvbihfKXtyZXR1cm4gVC5oYXMoXyl9KTt0aGlzLmdyYXBoTWFuYWdlci5zZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbihFKSx0aGlzLmdyYXBoTWFuYWdlci51cGRhdGVCb3VuZHMoKSx0aGlzLnVwZGF0ZUdyaWQoKSx0aGlzLmNvb2xpbmdGYWN0b3I9Zi5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMfWVsc2UgdGhpcy5pc1RyZWVHcm93aW5nPSExLHRoaXMuaXNHcm93dGhGaW5pc2hlZD0hMDt0aGlzLmdyb3dUcmVlSXRlcmF0aW9ucysrfWlmKHRoaXMuaXNHcm93dGhGaW5pc2hlZCl7aWYodGhpcy5pc0NvbnZlcmdlZCgpKXJldHVybiEwO3RoaXMuYWZ0ZXJHcm93dGhJdGVyYXRpb25zJTEwPT0wJiYodGhpcy5ncmFwaE1hbmFnZXIudXBkYXRlQm91bmRzKCksdGhpcy51cGRhdGVHcmlkKCkpLHRoaXMuY29vbGluZ0ZhY3Rvcj1mLkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUwqKCgxMDAtdGhpcy5hZnRlckdyb3d0aEl0ZXJhdGlvbnMpLzEwMCksdGhpcy5hZnRlckdyb3d0aEl0ZXJhdGlvbnMrK312YXIgQT0hdGhpcy5pc1RyZWVHcm93aW5nJiYhdGhpcy5pc0dyb3d0aEZpbmlzaGVkLFM9dGhpcy5ncm93VHJlZUl0ZXJhdGlvbnMlMTA9PTEmJnRoaXMuaXNUcmVlR3Jvd2luZ3x8dGhpcy5hZnRlckdyb3d0aEl0ZXJhdGlvbnMlMTA9PTEmJnRoaXMuaXNHcm93dGhGaW5pc2hlZDtyZXR1cm4gdGhpcy50b3RhbERpc3BsYWNlbWVudD0wLHRoaXMuZ3JhcGhNYW5hZ2VyLnVwZGF0ZUJvdW5kcygpLHRoaXMuY2FsY1NwcmluZ0ZvcmNlcygpLHRoaXMuY2FsY1JlcHVsc2lvbkZvcmNlcyhBLFMpLHRoaXMuY2FsY0dyYXZpdGF0aW9uYWxGb3JjZXMoKSx0aGlzLm1vdmVOb2RlcygpLHRoaXMuYW5pbWF0ZSgpLCExfSx3LnByb3RvdHlwZS5nZXRQb3NpdGlvbnNEYXRhPWZ1bmN0aW9uKCl7Zm9yKHZhciBUPXRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCksRT17fSxBPTA7QTxULmxlbmd0aDtBKyspe3ZhciBTPVRbQV0ucmVjdCxfPVRbQV0uaWQ7RVtfXT17aWQ6Xyx4OlMuZ2V0Q2VudGVyWCgpLHk6Uy5nZXRDZW50ZXJZKCksdzpTLndpZHRoLGg6Uy5oZWlnaHR9fXJldHVybiBFfSx3LnByb3RvdHlwZS5ydW5TcHJpbmdFbWJlZGRlcj1mdW5jdGlvbigpe3RoaXMuaW5pdGlhbEFuaW1hdGlvblBlcmlvZD0yNSx0aGlzLmFuaW1hdGlvblBlcmlvZD10aGlzLmluaXRpYWxBbmltYXRpb25QZXJpb2Q7dmFyIFQ9ITE7aWYoZi5BTklNQVRFPT09ImR1cmluZyIpdGhpcy5lbWl0KCJsYXlvdXRzdGFydGVkIik7ZWxzZXtmb3IoOyFUOylUPXRoaXMudGljaygpO3RoaXMuZ3JhcGhNYW5hZ2VyLnVwZGF0ZUJvdW5kcygpfX0sdy5wcm90b3R5cGUuY2FsY3VsYXRlTm9kZXNUb0FwcGx5R3Jhdml0YXRpb25Ubz1mdW5jdGlvbigpe3ZhciBUPVtdLEUsQT10aGlzLmdyYXBoTWFuYWdlci5nZXRHcmFwaHMoKSxTPUEubGVuZ3RoLF87Zm9yKF89MDtfPFM7XysrKUU9QVtfXSxFLnVwZGF0ZUNvbm5lY3RlZCgpLEUuaXNDb25uZWN0ZWR8fChUPVQuY29uY2F0KEUuZ2V0Tm9kZXMoKSkpO3JldHVybiBUfSx3LnByb3RvdHlwZS5jcmVhdGVCZW5kcG9pbnRzPWZ1bmN0aW9uKCl7dmFyIFQ9W107VD1ULmNvbmNhdCh0aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxFZGdlcygpKTt2YXIgRT1uZXcgU2V0LEE7Zm9yKEE9MDtBPFQubGVuZ3RoO0ErKyl7dmFyIFM9VFtBXTtpZighRS5oYXMoUykpe3ZhciBfPVMuZ2V0U291cmNlKCksST1TLmdldFRhcmdldCgpO2lmKF89PUkpUy5nZXRCZW5kcG9pbnRzKCkucHVzaChuZXcgbSksUy5nZXRCZW5kcG9pbnRzKCkucHVzaChuZXcgbSksdGhpcy5jcmVhdGVEdW1teU5vZGVzRm9yQmVuZHBvaW50cyhTKSxFLmFkZChTKTtlbHNle3ZhciBEPVtdO2lmKEQ9RC5jb25jYXQoXy5nZXRFZGdlTGlzdFRvTm9kZShJKSksRD1ELmNvbmNhdChJLmdldEVkZ2VMaXN0VG9Ob2RlKF8pKSwhRS5oYXMoRFswXSkpe2lmKEQubGVuZ3RoPjEpe3ZhciBrO2ZvcihrPTA7azxELmxlbmd0aDtrKyspe3ZhciBMPURba107TC5nZXRCZW5kcG9pbnRzKCkucHVzaChuZXcgbSksdGhpcy5jcmVhdGVEdW1teU5vZGVzRm9yQmVuZHBvaW50cyhMKX19RC5mb3JFYWNoKGZ1bmN0aW9uKFIpe0UuYWRkKFIpfSl9fX1pZihFLnNpemU9PVQubGVuZ3RoKWJyZWFrfX0sdy5wcm90b3R5cGUucG9zaXRpb25Ob2Rlc1JhZGlhbGx5PWZ1bmN0aW9uKFQpe2Zvcih2YXIgRT1uZXcgcCgwLDApLEE9TWF0aC5jZWlsKE1hdGguc3FydChULmxlbmd0aCkpLFM9MCxfPTAsST0wLEQ9bmV3IG0oMCwwKSxrPTA7azxULmxlbmd0aDtrKyspe2slQT09MCYmKEk9MCxfPVMsayE9MCYmKF8rPWguREVGQVVMVF9DT01QT05FTlRfU0VQRVJBVElPTiksUz0wKTt2YXIgTD1UW2tdLFI9Zy5maW5kQ2VudGVyT2ZUcmVlKEwpO0UueD1JLEUueT1fLEQ9dy5yYWRpYWxMYXlvdXQoTCxSLEUpLEQueT5TJiYoUz1NYXRoLmZsb29yKEQueSkpLEk9TWF0aC5mbG9vcihELngraC5ERUZBVUxUX0NPTVBPTkVOVF9TRVBFUkFUSU9OKX10aGlzLnRyYW5zZm9ybShuZXcgbShkLldPUkxEX0NFTlRFUl9YLUQueC8yLGQuV09STERfQ0VOVEVSX1ktRC55LzIpKX0sdy5yYWRpYWxMYXlvdXQ9ZnVuY3Rpb24oVCxFLEEpe3ZhciBTPU1hdGgubWF4KHRoaXMubWF4RGlhZ29uYWxJblRyZWUoVCksaC5ERUZBVUxUX1JBRElBTF9TRVBBUkFUSU9OKTt3LmJyYW5jaFJhZGlhbExheW91dChFLG51bGwsMCwzNTksMCxTKTt2YXIgXz14LmNhbGN1bGF0ZUJvdW5kcyhUKSxJPW5ldyBiO0kuc2V0RGV2aWNlT3JnWChfLmdldE1pblgoKSksSS5zZXREZXZpY2VPcmdZKF8uZ2V0TWluWSgpKSxJLnNldFdvcmxkT3JnWChBLngpLEkuc2V0V29ybGRPcmdZKEEueSk7Zm9yKHZhciBEPTA7RDxULmxlbmd0aDtEKyspe3ZhciBrPVRbRF07ay50cmFuc2Zvcm0oSSl9dmFyIEw9bmV3IG0oXy5nZXRNYXhYKCksXy5nZXRNYXhZKCkpO3JldHVybiBJLmludmVyc2VUcmFuc2Zvcm1Qb2ludChMKX0sdy5icmFuY2hSYWRpYWxMYXlvdXQ9ZnVuY3Rpb24oVCxFLEEsUyxfLEkpe3ZhciBEPShTLUErMSkvMjtEPDAmJihEKz0xODApO3ZhciBrPShEK0EpJTM2MCxMPWsqdi5UV09fUEkvMzYwLFI9TWF0aC5jb3MoTCksTz1fKk1hdGguY29zKEwpLE09XypNYXRoLnNpbihMKTtULnNldENlbnRlcihPLE0pO3ZhciBCPVtdO0I9Qi5jb25jYXQoVC5nZXRFZGdlcygpKTt2YXIgRj1CLmxlbmd0aDtFIT1udWxsJiZGLS07Zm9yKHZhciBQPTAsej1CLmxlbmd0aCwkLEg9VC5nZXRFZGdlc0JldHdlZW4oRSk7SC5sZW5ndGg+MTspe3ZhciBRPUhbMF07SC5zcGxpY2UoMCwxKTt2YXIgaj1CLmluZGV4T2YoUSk7aj49MCYmQi5zcGxpY2UoaiwxKSx6LS0sRi0tfUUhPW51bGw/JD0oQi5pbmRleE9mKEhbMF0pKzEpJXo6JD0wO2Zvcih2YXIgaWU9TWF0aC5hYnMoUy1BKS9GLG5lPSQ7UCE9RjtuZT0rK25lJXope3ZhciBsZT1CW25lXS5nZXRPdGhlckVuZChUKTtpZihsZSE9RSl7dmFyIGhlPShBK1AqaWUpJTM2MCxLPShoZStpZSklMzYwO3cuYnJhbmNoUmFkaWFsTGF5b3V0KGxlLFQsaGUsSyxfK0ksSSksUCsrfX19LHcubWF4RGlhZ29uYWxJblRyZWU9ZnVuY3Rpb24oVCl7Zm9yKHZhciBFPXkuTUlOX1ZBTFVFLEE9MDtBPFQubGVuZ3RoO0ErKyl7dmFyIFM9VFtBXSxfPVMuZ2V0RGlhZ29uYWwoKTtfPkUmJihFPV8pfXJldHVybiBFfSx3LnByb3RvdHlwZS5jYWxjUmVwdWxzaW9uUmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gMioodGhpcy5sZXZlbCsxKSp0aGlzLmlkZWFsRWRnZUxlbmd0aH0sdy5wcm90b3R5cGUuZ3JvdXBaZXJvRGVncmVlTWVtYmVycz1mdW5jdGlvbigpe3ZhciBUPXRoaXMsRT17fTt0aGlzLm1lbWJlckdyb3Vwcz17fSx0aGlzLmlkVG9EdW1teU5vZGU9e307Zm9yKHZhciBBPVtdLFM9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsTm9kZXMoKSxfPTA7XzxTLmxlbmd0aDtfKyspe3ZhciBJPVNbX10sRD1JLmdldFBhcmVudCgpO3RoaXMuZ2V0Tm9kZURlZ3JlZVdpdGhDaGlsZHJlbihJKT09PTAmJihELmlkPT1udWxsfHwhdGhpcy5nZXRUb0JlVGlsZWQoRCkpJiZBLnB1c2goSSl9Zm9yKHZhciBfPTA7XzxBLmxlbmd0aDtfKyspe3ZhciBJPUFbX10saz1JLmdldFBhcmVudCgpLmlkO3R5cGVvZiBFW2tdPiJ1IiYmKEVba109W10pLEVba109RVtrXS5jb25jYXQoSSl9T2JqZWN0LmtleXMoRSkuZm9yRWFjaChmdW5jdGlvbihMKXtpZihFW0xdLmxlbmd0aD4xKXt2YXIgUj0iRHVtbXlDb21wb3VuZF8iK0w7VC5tZW1iZXJHcm91cHNbUl09RVtMXTt2YXIgTz1FW0xdWzBdLmdldFBhcmVudCgpLE09bmV3IGwoVC5ncmFwaE1hbmFnZXIpO00uaWQ9UixNLnBhZGRpbmdMZWZ0PU8ucGFkZGluZ0xlZnR8fDAsTS5wYWRkaW5nUmlnaHQ9Ty5wYWRkaW5nUmlnaHR8fDAsTS5wYWRkaW5nQm90dG9tPU8ucGFkZGluZ0JvdHRvbXx8MCxNLnBhZGRpbmdUb3A9Ty5wYWRkaW5nVG9wfHwwLFQuaWRUb0R1bW15Tm9kZVtSXT1NO3ZhciBCPVQuZ2V0R3JhcGhNYW5hZ2VyKCkuYWRkKFQubmV3R3JhcGgoKSxNKSxGPU8uZ2V0Q2hpbGQoKTtGLmFkZChNKTtmb3IodmFyIFA9MDtQPEVbTF0ubGVuZ3RoO1ArKyl7dmFyIHo9RVtMXVtQXTtGLnJlbW92ZSh6KSxCLmFkZCh6KX19fSl9LHcucHJvdG90eXBlLmNsZWFyQ29tcG91bmRzPWZ1bmN0aW9uKCl7dmFyIFQ9e30sRT17fTt0aGlzLnBlcmZvcm1ERlNPbkNvbXBvdW5kcygpO2Zvcih2YXIgQT0wO0E8dGhpcy5jb21wb3VuZE9yZGVyLmxlbmd0aDtBKyspRVt0aGlzLmNvbXBvdW5kT3JkZXJbQV0uaWRdPXRoaXMuY29tcG91bmRPcmRlcltBXSxUW3RoaXMuY29tcG91bmRPcmRlcltBXS5pZF09W10uY29uY2F0KHRoaXMuY29tcG91bmRPcmRlcltBXS5nZXRDaGlsZCgpLmdldE5vZGVzKCkpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlbW92ZSh0aGlzLmNvbXBvdW5kT3JkZXJbQV0uZ2V0Q2hpbGQoKSksdGhpcy5jb21wb3VuZE9yZGVyW0FdLmNoaWxkPW51bGw7dGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxOb2RlcygpLHRoaXMudGlsZUNvbXBvdW5kTWVtYmVycyhULEUpfSx3LnByb3RvdHlwZS5jbGVhclplcm9EZWdyZWVNZW1iZXJzPWZ1bmN0aW9uKCl7dmFyIFQ9dGhpcyxFPXRoaXMudGlsZWRaZXJvRGVncmVlUGFjaz1bXTtPYmplY3Qua2V5cyh0aGlzLm1lbWJlckdyb3VwcykuZm9yRWFjaChmdW5jdGlvbihBKXt2YXIgUz1ULmlkVG9EdW1teU5vZGVbQV07RVtBXT1ULnRpbGVOb2RlcyhULm1lbWJlckdyb3Vwc1tBXSxTLnBhZGRpbmdMZWZ0K1MucGFkZGluZ1JpZ2h0KSxTLnJlY3Qud2lkdGg9RVtBXS53aWR0aCxTLnJlY3QuaGVpZ2h0PUVbQV0uaGVpZ2h0fSl9LHcucHJvdG90eXBlLnJlcG9wdWxhdGVDb21wb3VuZHM9ZnVuY3Rpb24oKXtmb3IodmFyIFQ9dGhpcy5jb21wb3VuZE9yZGVyLmxlbmd0aC0xO1Q+PTA7VC0tKXt2YXIgRT10aGlzLmNvbXBvdW5kT3JkZXJbVF0sQT1FLmlkLFM9RS5wYWRkaW5nTGVmdCxfPUUucGFkZGluZ1RvcDt0aGlzLmFkanVzdExvY2F0aW9ucyh0aGlzLnRpbGVkTWVtYmVyUGFja1tBXSxFLnJlY3QueCxFLnJlY3QueSxTLF8pfX0sdy5wcm90b3R5cGUucmVwb3B1bGF0ZVplcm9EZWdyZWVNZW1iZXJzPWZ1bmN0aW9uKCl7dmFyIFQ9dGhpcyxFPXRoaXMudGlsZWRaZXJvRGVncmVlUGFjaztPYmplY3Qua2V5cyhFKS5mb3JFYWNoKGZ1bmN0aW9uKEEpe3ZhciBTPVQuaWRUb0R1bW15Tm9kZVtBXSxfPVMucGFkZGluZ0xlZnQsST1TLnBhZGRpbmdUb3A7VC5hZGp1c3RMb2NhdGlvbnMoRVtBXSxTLnJlY3QueCxTLnJlY3QueSxfLEkpfSl9LHcucHJvdG90eXBlLmdldFRvQmVUaWxlZD1mdW5jdGlvbihUKXt2YXIgRT1ULmlkO2lmKHRoaXMudG9CZVRpbGVkW0VdIT1udWxsKXJldHVybiB0aGlzLnRvQmVUaWxlZFtFXTt2YXIgQT1ULmdldENoaWxkKCk7aWYoQT09bnVsbClyZXR1cm4gdGhpcy50b0JlVGlsZWRbRV09ITEsITE7Zm9yKHZhciBTPUEuZ2V0Tm9kZXMoKSxfPTA7XzxTLmxlbmd0aDtfKyspe3ZhciBJPVNbX107aWYodGhpcy5nZXROb2RlRGVncmVlKEkpPjApcmV0dXJuIHRoaXMudG9CZVRpbGVkW0VdPSExLCExO2lmKEkuZ2V0Q2hpbGQoKT09bnVsbCl7dGhpcy50b0JlVGlsZWRbSS5pZF09ITE7Y29udGludWV9aWYoIXRoaXMuZ2V0VG9CZVRpbGVkKEkpKXJldHVybiB0aGlzLnRvQmVUaWxlZFtFXT0hMSwhMX1yZXR1cm4gdGhpcy50b0JlVGlsZWRbRV09ITAsITB9LHcucHJvdG90eXBlLmdldE5vZGVEZWdyZWU9ZnVuY3Rpb24oVCl7Zm9yKHZhciBFPVQuaWQsQT1ULmdldEVkZ2VzKCksUz0wLF89MDtfPEEubGVuZ3RoO18rKyl7dmFyIEk9QVtfXTtJLmdldFNvdXJjZSgpLmlkIT09SS5nZXRUYXJnZXQoKS5pZCYmKFM9UysxKX1yZXR1cm4gU30sdy5wcm90b3R5cGUuZ2V0Tm9kZURlZ3JlZVdpdGhDaGlsZHJlbj1mdW5jdGlvbihUKXt2YXIgRT10aGlzLmdldE5vZGVEZWdyZWUoVCk7aWYoVC5nZXRDaGlsZCgpPT1udWxsKXJldHVybiBFO2Zvcih2YXIgQT1ULmdldENoaWxkKCkuZ2V0Tm9kZXMoKSxTPTA7UzxBLmxlbmd0aDtTKyspe3ZhciBfPUFbU107RSs9dGhpcy5nZXROb2RlRGVncmVlV2l0aENoaWxkcmVuKF8pfXJldHVybiBFfSx3LnByb3RvdHlwZS5wZXJmb3JtREZTT25Db21wb3VuZHM9ZnVuY3Rpb24oKXt0aGlzLmNvbXBvdW5kT3JkZXI9W10sdGhpcy5maWxsQ29tcGV4T3JkZXJCeURGUyh0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuZ2V0Tm9kZXMoKSl9LHcucHJvdG90eXBlLmZpbGxDb21wZXhPcmRlckJ5REZTPWZ1bmN0aW9uKFQpe2Zvcih2YXIgRT0wO0U8VC5sZW5ndGg7RSsrKXt2YXIgQT1UW0VdO0EuZ2V0Q2hpbGQoKSE9bnVsbCYmdGhpcy5maWxsQ29tcGV4T3JkZXJCeURGUyhBLmdldENoaWxkKCkuZ2V0Tm9kZXMoKSksdGhpcy5nZXRUb0JlVGlsZWQoQSkmJnRoaXMuY29tcG91bmRPcmRlci5wdXNoKEEpfX0sdy5wcm90b3R5cGUuYWRqdXN0TG9jYXRpb25zPWZ1bmN0aW9uKFQsRSxBLFMsXyl7RSs9UyxBKz1fO2Zvcih2YXIgST1FLEQ9MDtEPFQucm93cy5sZW5ndGg7RCsrKXt2YXIgaz1ULnJvd3NbRF07RT1JO2Zvcih2YXIgTD0wLFI9MDtSPGsubGVuZ3RoO1IrKyl7dmFyIE89a1tSXTtPLnJlY3QueD1FLE8ucmVjdC55PUEsRSs9Ty5yZWN0LndpZHRoK1QuaG9yaXpvbnRhbFBhZGRpbmcsTy5yZWN0LmhlaWdodD5MJiYoTD1PLnJlY3QuaGVpZ2h0KX1BKz1MK1QudmVydGljYWxQYWRkaW5nfX0sdy5wcm90b3R5cGUudGlsZUNvbXBvdW5kTWVtYmVycz1mdW5jdGlvbihULEUpe3ZhciBBPXRoaXM7dGhpcy50aWxlZE1lbWJlclBhY2s9W10sT2JqZWN0LmtleXMoVCkuZm9yRWFjaChmdW5jdGlvbihTKXt2YXIgXz1FW1NdO0EudGlsZWRNZW1iZXJQYWNrW1NdPUEudGlsZU5vZGVzKFRbU10sXy5wYWRkaW5nTGVmdCtfLnBhZGRpbmdSaWdodCksXy5yZWN0LndpZHRoPUEudGlsZWRNZW1iZXJQYWNrW1NdLndpZHRoLF8ucmVjdC5oZWlnaHQ9QS50aWxlZE1lbWJlclBhY2tbU10uaGVpZ2h0fSl9LHcucHJvdG90eXBlLnRpbGVOb2Rlcz1mdW5jdGlvbihULEUpe3ZhciBBPWguVElMSU5HX1BBRERJTkdfVkVSVElDQUwsUz1oLlRJTElOR19QQURESU5HX0hPUklaT05UQUwsXz17cm93czpbXSxyb3dXaWR0aDpbXSxyb3dIZWlnaHQ6W10sd2lkdGg6MCxoZWlnaHQ6RSx2ZXJ0aWNhbFBhZGRpbmc6QSxob3Jpem9udGFsUGFkZGluZzpTfTtULnNvcnQoZnVuY3Rpb24oayxMKXtyZXR1cm4gay5yZWN0LndpZHRoKmsucmVjdC5oZWlnaHQ+TC5yZWN0LndpZHRoKkwucmVjdC5oZWlnaHQ/LTE6ay5yZWN0LndpZHRoKmsucmVjdC5oZWlnaHQ8TC5yZWN0LndpZHRoKkwucmVjdC5oZWlnaHQ/MTowfSk7Zm9yKHZhciBJPTA7STxULmxlbmd0aDtJKyspe3ZhciBEPVRbSV07Xy5yb3dzLmxlbmd0aD09MD90aGlzLmluc2VydE5vZGVUb1JvdyhfLEQsMCxFKTp0aGlzLmNhbkFkZEhvcml6b250YWwoXyxELnJlY3Qud2lkdGgsRC5yZWN0LmhlaWdodCk/dGhpcy5pbnNlcnROb2RlVG9Sb3coXyxELHRoaXMuZ2V0U2hvcnRlc3RSb3dJbmRleChfKSxFKTp0aGlzLmluc2VydE5vZGVUb1JvdyhfLEQsXy5yb3dzLmxlbmd0aCxFKSx0aGlzLnNoaWZ0VG9MYXN0Um93KF8pfXJldHVybiBffSx3LnByb3RvdHlwZS5pbnNlcnROb2RlVG9Sb3c9ZnVuY3Rpb24oVCxFLEEsUyl7dmFyIF89UztpZihBPT1ULnJvd3MubGVuZ3RoKXt2YXIgST1bXTtULnJvd3MucHVzaChJKSxULnJvd1dpZHRoLnB1c2goXyksVC5yb3dIZWlnaHQucHVzaCgwKX12YXIgRD1ULnJvd1dpZHRoW0FdK0UucmVjdC53aWR0aDtULnJvd3NbQV0ubGVuZ3RoPjAmJihEKz1ULmhvcml6b250YWxQYWRkaW5nKSxULnJvd1dpZHRoW0FdPUQsVC53aWR0aDxEJiYoVC53aWR0aD1EKTt2YXIgaz1FLnJlY3QuaGVpZ2h0O0E+MCYmKGsrPVQudmVydGljYWxQYWRkaW5nKTt2YXIgTD0wO2s+VC5yb3dIZWlnaHRbQV0mJihMPVQucm93SGVpZ2h0W0FdLFQucm93SGVpZ2h0W0FdPWssTD1ULnJvd0hlaWdodFtBXS1MKSxULmhlaWdodCs9TCxULnJvd3NbQV0ucHVzaChFKX0sdy5wcm90b3R5cGUuZ2V0U2hvcnRlc3RSb3dJbmRleD1mdW5jdGlvbihUKXtmb3IodmFyIEU9LTEsQT1OdW1iZXIuTUFYX1ZBTFVFLFM9MDtTPFQucm93cy5sZW5ndGg7UysrKVQucm93V2lkdGhbU108QSYmKEU9UyxBPVQucm93V2lkdGhbU10pO3JldHVybiBFfSx3LnByb3RvdHlwZS5nZXRMb25nZXN0Um93SW5kZXg9ZnVuY3Rpb24oVCl7Zm9yKHZhciBFPS0xLEE9TnVtYmVyLk1JTl9WQUxVRSxTPTA7UzxULnJvd3MubGVuZ3RoO1MrKylULnJvd1dpZHRoW1NdPkEmJihFPVMsQT1ULnJvd1dpZHRoW1NdKTtyZXR1cm4gRX0sdy5wcm90b3R5cGUuY2FuQWRkSG9yaXpvbnRhbD1mdW5jdGlvbihULEUsQSl7dmFyIFM9dGhpcy5nZXRTaG9ydGVzdFJvd0luZGV4KFQpO2lmKFM8MClyZXR1cm4hMDt2YXIgXz1ULnJvd1dpZHRoW1NdO2lmKF8rVC5ob3Jpem9udGFsUGFkZGluZytFPD1ULndpZHRoKXJldHVybiEwO3ZhciBJPTA7VC5yb3dIZWlnaHRbU108QSYmUz4wJiYoST1BK1QudmVydGljYWxQYWRkaW5nLVQucm93SGVpZ2h0W1NdKTt2YXIgRDtULndpZHRoLV8+PUUrVC5ob3Jpem9udGFsUGFkZGluZz9EPShULmhlaWdodCtJKS8oXytFK1QuaG9yaXpvbnRhbFBhZGRpbmcpOkQ9KFQuaGVpZ2h0K0kpL1Qud2lkdGgsST1BK1QudmVydGljYWxQYWRkaW5nO3ZhciBrO3JldHVybiBULndpZHRoPEU/az0oVC5oZWlnaHQrSSkvRTprPShULmhlaWdodCtJKS9ULndpZHRoLGs8MSYmKGs9MS9rKSxEPDEmJihEPTEvRCksRDxrfSx3LnByb3RvdHlwZS5zaGlmdFRvTGFzdFJvdz1mdW5jdGlvbihUKXt2YXIgRT10aGlzLmdldExvbmdlc3RSb3dJbmRleChUKSxBPVQucm93V2lkdGgubGVuZ3RoLTEsUz1ULnJvd3NbRV0sXz1TW1MubGVuZ3RoLTFdLEk9Xy53aWR0aCtULmhvcml6b250YWxQYWRkaW5nO2lmKFQud2lkdGgtVC5yb3dXaWR0aFtBXT5JJiZFIT1BKXtTLnNwbGljZSgtMSwxKSxULnJvd3NbQV0ucHVzaChfKSxULnJvd1dpZHRoW0VdPVQucm93V2lkdGhbRV0tSSxULnJvd1dpZHRoW0FdPVQucm93V2lkdGhbQV0rSSxULndpZHRoPVQucm93V2lkdGhbaW5zdGFuY2UuZ2V0TG9uZ2VzdFJvd0luZGV4KFQpXTtmb3IodmFyIEQ9TnVtYmVyLk1JTl9WQUxVRSxrPTA7azxTLmxlbmd0aDtrKyspU1trXS5oZWlnaHQ+RCYmKEQ9U1trXS5oZWlnaHQpO0U+MCYmKEQrPVQudmVydGljYWxQYWRkaW5nKTt2YXIgTD1ULnJvd0hlaWdodFtFXStULnJvd0hlaWdodFtBXTtULnJvd0hlaWdodFtFXT1ELFQucm93SGVpZ2h0W0FdPF8uaGVpZ2h0K1QudmVydGljYWxQYWRkaW5nJiYoVC5yb3dIZWlnaHRbQV09Xy5oZWlnaHQrVC52ZXJ0aWNhbFBhZGRpbmcpO3ZhciBSPVQucm93SGVpZ2h0W0VdK1Qucm93SGVpZ2h0W0FdO1QuaGVpZ2h0Kz1SLUwsdGhpcy5zaGlmdFRvTGFzdFJvdyhUKX19LHcucHJvdG90eXBlLnRpbGluZ1ByZUxheW91dD1mdW5jdGlvbigpe2guVElMRSYmKHRoaXMuZ3JvdXBaZXJvRGVncmVlTWVtYmVycygpLHRoaXMuY2xlYXJDb21wb3VuZHMoKSx0aGlzLmNsZWFyWmVyb0RlZ3JlZU1lbWJlcnMoKSl9LHcucHJvdG90eXBlLnRpbGluZ1Bvc3RMYXlvdXQ9ZnVuY3Rpb24oKXtoLlRJTEUmJih0aGlzLnJlcG9wdWxhdGVaZXJvRGVncmVlTWVtYmVycygpLHRoaXMucmVwb3B1bGF0ZUNvbXBvdW5kcygpKX0sdy5wcm90b3R5cGUucmVkdWNlVHJlZXM9ZnVuY3Rpb24oKXtmb3IodmFyIFQ9W10sRT0hMCxBO0U7KXt2YXIgUz10aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxOb2RlcygpLF89W107RT0hMTtmb3IodmFyIEk9MDtJPFMubGVuZ3RoO0krKylBPVNbSV0sQS5nZXRFZGdlcygpLmxlbmd0aD09MSYmIUEuZ2V0RWRnZXMoKVswXS5pc0ludGVyR3JhcGgmJkEuZ2V0Q2hpbGQoKT09bnVsbCYmKF8ucHVzaChbQSxBLmdldEVkZ2VzKClbMF0sQS5nZXRPd25lcigpXSksRT0hMCk7aWYoRT09ITApe2Zvcih2YXIgRD1bXSxrPTA7azxfLmxlbmd0aDtrKyspX1trXVswXS5nZXRFZGdlcygpLmxlbmd0aD09MSYmKEQucHVzaChfW2tdKSxfW2tdWzBdLmdldE93bmVyKCkucmVtb3ZlKF9ba11bMF0pKTtULnB1c2goRCksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxOb2RlcygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsRWRnZXMoKX19dGhpcy5wcnVuZWROb2Rlc0FsbD1UfSx3LnByb3RvdHlwZS5ncm93VHJlZT1mdW5jdGlvbihUKXtmb3IodmFyIEU9VC5sZW5ndGgsQT1UW0UtMV0sUyxfPTA7XzxBLmxlbmd0aDtfKyspUz1BW19dLHRoaXMuZmluZFBsYWNlZm9yUHJ1bmVkTm9kZShTKSxTWzJdLmFkZChTWzBdKSxTWzJdLmFkZChTWzFdLFNbMV0uc291cmNlLFNbMV0udGFyZ2V0KTtULnNwbGljZShULmxlbmd0aC0xLDEpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsTm9kZXMoKSx0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbEVkZ2VzKCl9LHcucHJvdG90eXBlLmZpbmRQbGFjZWZvclBydW5lZE5vZGU9ZnVuY3Rpb24oVCl7dmFyIEUsQSxTPVRbMF07Uz09VFsxXS5zb3VyY2U/QT1UWzFdLnRhcmdldDpBPVRbMV0uc291cmNlO3ZhciBfPUEuc3RhcnRYLEk9QS5maW5pc2hYLEQ9QS5zdGFydFksaz1BLmZpbmlzaFksTD0wLFI9MCxPPTAsTT0wLEI9W0wsTyxSLE1dO2lmKEQ+MClmb3IodmFyIEY9XztGPD1JO0YrKylCWzBdKz10aGlzLmdyaWRbRl1bRC0xXS5sZW5ndGgrdGhpcy5ncmlkW0ZdW0RdLmxlbmd0aC0xO2lmKEk8dGhpcy5ncmlkLmxlbmd0aC0xKWZvcih2YXIgRj1EO0Y8PWs7RisrKUJbMV0rPXRoaXMuZ3JpZFtJKzFdW0ZdLmxlbmd0aCt0aGlzLmdyaWRbSV1bRl0ubGVuZ3RoLTE7aWYoazx0aGlzLmdyaWRbMF0ubGVuZ3RoLTEpZm9yKHZhciBGPV87Rjw9STtGKyspQlsyXSs9dGhpcy5ncmlkW0ZdW2srMV0ubGVuZ3RoK3RoaXMuZ3JpZFtGXVtrXS5sZW5ndGgtMTtpZihfPjApZm9yKHZhciBGPUQ7Rjw9aztGKyspQlszXSs9dGhpcy5ncmlkW18tMV1bRl0ubGVuZ3RoK3RoaXMuZ3JpZFtfXVtGXS5sZW5ndGgtMTtmb3IodmFyIFA9eS5NQVhfVkFMVUUseiwkLEg9MDtIPEIubGVuZ3RoO0grKylCW0hdPFA/KFA9QltIXSx6PTEsJD1IKTpCW0hdPT1QJiZ6Kys7aWYoej09MyYmUD09MClCWzBdPT0wJiZCWzFdPT0wJiZCWzJdPT0wP0U9MTpCWzBdPT0wJiZCWzFdPT0wJiZCWzNdPT0wP0U9MDpCWzBdPT0wJiZCWzJdPT0wJiZCWzNdPT0wP0U9MzpCWzFdPT0wJiZCWzJdPT0wJiZCWzNdPT0wJiYoRT0yKTtlbHNlIGlmKHo9PTImJlA9PTApe3ZhciBRPU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoyKTtCWzBdPT0wJiZCWzFdPT0wP1E9PTA/RT0wOkU9MTpCWzBdPT0wJiZCWzJdPT0wP1E9PTA/RT0wOkU9MjpCWzBdPT0wJiZCWzNdPT0wP1E9PTA/RT0wOkU9MzpCWzFdPT0wJiZCWzJdPT0wP1E9PTA/RT0xOkU9MjpCWzFdPT0wJiZCWzNdPT0wP1E9PTA/RT0xOkU9MzpRPT0wP0U9MjpFPTN9ZWxzZSBpZih6PT00JiZQPT0wKXt2YXIgUT1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqNCk7RT1RfWVsc2UgRT0kO0U9PTA/Uy5zZXRDZW50ZXIoQS5nZXRDZW50ZXJYKCksQS5nZXRDZW50ZXJZKCktQS5nZXRIZWlnaHQoKS8yLWYuREVGQVVMVF9FREdFX0xFTkdUSC1TLmdldEhlaWdodCgpLzIpOkU9PTE/Uy5zZXRDZW50ZXIoQS5nZXRDZW50ZXJYKCkrQS5nZXRXaWR0aCgpLzIrZi5ERUZBVUxUX0VER0VfTEVOR1RIK1MuZ2V0V2lkdGgoKS8yLEEuZ2V0Q2VudGVyWSgpKTpFPT0yP1Muc2V0Q2VudGVyKEEuZ2V0Q2VudGVyWCgpLEEuZ2V0Q2VudGVyWSgpK0EuZ2V0SGVpZ2h0KCkvMitmLkRFRkFVTFRfRURHRV9MRU5HVEgrUy5nZXRIZWlnaHQoKS8yKTpTLnNldENlbnRlcihBLmdldENlbnRlclgoKS1BLmdldFdpZHRoKCkvMi1mLkRFRkFVTFRfRURHRV9MRU5HVEgtUy5nZXRXaWR0aCgpLzIsQS5nZXRDZW50ZXJZKCkpfSxlLmV4cG9ydHM9d30sZnVuY3Rpb24oZSxyLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgaT17fTtpLmxheW91dEJhc2U9bigwKSxpLkNvU0VDb25zdGFudHM9bigxKSxpLkNvU0VFZGdlPW4oMiksaS5Db1NFR3JhcGg9bigzKSxpLkNvU0VHcmFwaE1hbmFnZXI9big0KSxpLkNvU0VMYXlvdXQ9big2KSxpLkNvU0VOb2RlPW4oNSksZS5leHBvcnRzPWl9XSl9KX0pO3ZhciBHZ2U9TWkoKGY0LF9CKT0+eyJ1c2Ugc3RyaWN0IjtvKGZ1bmN0aW9uKGUscil7dHlwZW9mIGY0PT0ib2JqZWN0IiYmdHlwZW9mIF9CPT0ib2JqZWN0Ij9fQi5leHBvcnRzPXIoQUIoKSk6dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZD9kZWZpbmUoWyJjb3NlLWJhc2UiXSxyKTp0eXBlb2YgZjQ9PSJvYmplY3QiP2Y0LmN5dG9zY2FwZUNvc2VCaWxrZW50PXIoQUIoKSk6ZS5jeXRvc2NhcGVDb3NlQmlsa2VudD1yKGUuY29zZUJhc2UpfSwid2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iKShmNCxmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHI9e307ZnVuY3Rpb24gbihpKXtpZihyW2ldKXJldHVybiByW2ldLmV4cG9ydHM7dmFyIGE9cltpXT17aSxsOiExLGV4cG9ydHM6e319O3JldHVybiBlW2ldLmNhbGwoYS5leHBvcnRzLGEsYS5leHBvcnRzLG4pLGEubD0hMCxhLmV4cG9ydHN9cmV0dXJuIG8obiwiX193ZWJwYWNrX3JlcXVpcmVfXyIpLG4ubT1lLG4uYz1yLG4uaT1mdW5jdGlvbihpKXtyZXR1cm4gaX0sbi5kPWZ1bmN0aW9uKGksYSxzKXtuLm8oaSxhKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KGksYSx7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsZ2V0OnN9KX0sbi5uPWZ1bmN0aW9uKGkpe3ZhciBhPWkmJmkuX19lc01vZHVsZT9vKGZ1bmN0aW9uKCl7cmV0dXJuIGkuZGVmYXVsdH0sImdldERlZmF1bHQiKTpvKGZ1bmN0aW9uKCl7cmV0dXJuIGl9LCJnZXRNb2R1bGVFeHBvcnRzIik7cmV0dXJuIG4uZChhLCJhIixhKSxhfSxuLm89ZnVuY3Rpb24oaSxhKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGksYSl9LG4ucD0iIixuKG4ucz0xKX0oW2Z1bmN0aW9uKGUscil7ZS5leHBvcnRzPXR9LGZ1bmN0aW9uKGUscixuKXsidXNlIHN0cmljdCI7dmFyIGk9bigwKS5sYXlvdXRCYXNlLkxheW91dENvbnN0YW50cyxhPW4oMCkubGF5b3V0QmFzZS5GRExheW91dENvbnN0YW50cyxzPW4oMCkuQ29TRUNvbnN0YW50cyxsPW4oMCkuQ29TRUxheW91dCx1PW4oMCkuQ29TRU5vZGUsaD1uKDApLmxheW91dEJhc2UuUG9pbnRELGY9bigwKS5sYXlvdXRCYXNlLkRpbWVuc2lvbkQsZD17cmVhZHk6byhmdW5jdGlvbigpe30sInJlYWR5Iiksc3RvcDpvKGZ1bmN0aW9uKCl7fSwic3RvcCIpLHF1YWxpdHk6ImRlZmF1bHQiLG5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczohMSxyZWZyZXNoOjMwLGZpdDohMCxwYWRkaW5nOjEwLHJhbmRvbWl6ZTohMCxub2RlUmVwdWxzaW9uOjQ1MDAsaWRlYWxFZGdlTGVuZ3RoOjUwLGVkZ2VFbGFzdGljaXR5Oi40NSxuZXN0aW5nRmFjdG9yOi4xLGdyYXZpdHk6LjI1LG51bUl0ZXI6MjUwMCx0aWxlOiEwLGFuaW1hdGU6ImVuZCIsYW5pbWF0aW9uRHVyYXRpb246NTAwLHRpbGluZ1BhZGRpbmdWZXJ0aWNhbDoxMCx0aWxpbmdQYWRkaW5nSG9yaXpvbnRhbDoxMCxncmF2aXR5UmFuZ2VDb21wb3VuZDoxLjUsZ3Jhdml0eUNvbXBvdW5kOjEsZ3Jhdml0eVJhbmdlOjMuOCxpbml0aWFsRW5lcmd5T25JbmNyZW1lbnRhbDouNX07ZnVuY3Rpb24gcCh2LHgpe3ZhciBiPXt9O2Zvcih2YXIgdyBpbiB2KWJbd109dlt3XTtmb3IodmFyIHcgaW4geCliW3ddPXhbd107cmV0dXJuIGJ9byhwLCJleHRlbmQiKTtmdW5jdGlvbiBtKHYpe3RoaXMub3B0aW9ucz1wKGQsdiksZyh0aGlzLm9wdGlvbnMpfW8obSwiX0NvU0VMYXlvdXQiKTt2YXIgZz1vKGZ1bmN0aW9uKHgpe3gubm9kZVJlcHVsc2lvbiE9bnVsbCYmKHMuREVGQVVMVF9SRVBVTFNJT05fU1RSRU5HVEg9YS5ERUZBVUxUX1JFUFVMU0lPTl9TVFJFTkdUSD14Lm5vZGVSZXB1bHNpb24pLHguaWRlYWxFZGdlTGVuZ3RoIT1udWxsJiYocy5ERUZBVUxUX0VER0VfTEVOR1RIPWEuREVGQVVMVF9FREdFX0xFTkdUSD14LmlkZWFsRWRnZUxlbmd0aCkseC5lZGdlRWxhc3RpY2l0eSE9bnVsbCYmKHMuREVGQVVMVF9TUFJJTkdfU1RSRU5HVEg9YS5ERUZBVUxUX1NQUklOR19TVFJFTkdUSD14LmVkZ2VFbGFzdGljaXR5KSx4Lm5lc3RpbmdGYWN0b3IhPW51bGwmJihzLlBFUl9MRVZFTF9JREVBTF9FREdFX0xFTkdUSF9GQUNUT1I9YS5QRVJfTEVWRUxfSURFQUxfRURHRV9MRU5HVEhfRkFDVE9SPXgubmVzdGluZ0ZhY3RvcikseC5ncmF2aXR5IT1udWxsJiYocy5ERUZBVUxUX0dSQVZJVFlfU1RSRU5HVEg9YS5ERUZBVUxUX0dSQVZJVFlfU1RSRU5HVEg9eC5ncmF2aXR5KSx4Lm51bUl0ZXIhPW51bGwmJihzLk1BWF9JVEVSQVRJT05TPWEuTUFYX0lURVJBVElPTlM9eC5udW1JdGVyKSx4LmdyYXZpdHlSYW5nZSE9bnVsbCYmKHMuREVGQVVMVF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUj1hLkRFRkFVTFRfR1JBVklUWV9SQU5HRV9GQUNUT1I9eC5ncmF2aXR5UmFuZ2UpLHguZ3Jhdml0eUNvbXBvdW5kIT1udWxsJiYocy5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfU1RSRU5HVEg9YS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfU1RSRU5HVEg9eC5ncmF2aXR5Q29tcG91bmQpLHguZ3Jhdml0eVJhbmdlQ29tcG91bmQhPW51bGwmJihzLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9SQU5HRV9GQUNUT1I9YS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfUkFOR0VfRkFDVE9SPXguZ3Jhdml0eVJhbmdlQ29tcG91bmQpLHguaW5pdGlhbEVuZXJneU9uSW5jcmVtZW50YWwhPW51bGwmJihzLkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUw9YS5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMPXguaW5pdGlhbEVuZXJneU9uSW5jcmVtZW50YWwpLHgucXVhbGl0eT09ImRyYWZ0Ij9pLlFVQUxJVFk9MDp4LnF1YWxpdHk9PSJwcm9vZiI/aS5RVUFMSVRZPTI6aS5RVUFMSVRZPTEscy5OT0RFX0RJTUVOU0lPTlNfSU5DTFVERV9MQUJFTFM9YS5OT0RFX0RJTUVOU0lPTlNfSU5DTFVERV9MQUJFTFM9aS5OT0RFX0RJTUVOU0lPTlNfSU5DTFVERV9MQUJFTFM9eC5ub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHMscy5ERUZBVUxUX0lOQ1JFTUVOVEFMPWEuREVGQVVMVF9JTkNSRU1FTlRBTD1pLkRFRkFVTFRfSU5DUkVNRU5UQUw9IXgucmFuZG9taXplLHMuQU5JTUFURT1hLkFOSU1BVEU9aS5BTklNQVRFPXguYW5pbWF0ZSxzLlRJTEU9eC50aWxlLHMuVElMSU5HX1BBRERJTkdfVkVSVElDQUw9dHlwZW9mIHgudGlsaW5nUGFkZGluZ1ZlcnRpY2FsPT0iZnVuY3Rpb24iP3gudGlsaW5nUGFkZGluZ1ZlcnRpY2FsLmNhbGwoKTp4LnRpbGluZ1BhZGRpbmdWZXJ0aWNhbCxzLlRJTElOR19QQURESU5HX0hPUklaT05UQUw9dHlwZW9mIHgudGlsaW5nUGFkZGluZ0hvcml6b250YWw9PSJmdW5jdGlvbiI/eC50aWxpbmdQYWRkaW5nSG9yaXpvbnRhbC5jYWxsKCk6eC50aWxpbmdQYWRkaW5nSG9yaXpvbnRhbH0sImdldFVzZXJPcHRpb25zIik7bS5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dmFyIHYseCxiPXRoaXMub3B0aW9ucyx3PXRoaXMuaWRUb0xOb2RlPXt9LEM9dGhpcy5sYXlvdXQ9bmV3IGwsVD10aGlzO1Quc3RvcHBlZD0hMSx0aGlzLmN5PXRoaXMub3B0aW9ucy5jeSx0aGlzLmN5LnRyaWdnZXIoe3R5cGU6ImxheW91dHN0YXJ0IixsYXlvdXQ6dGhpc30pO3ZhciBFPUMubmV3R3JhcGhNYW5hZ2VyKCk7dGhpcy5nbT1FO3ZhciBBPXRoaXMub3B0aW9ucy5lbGVzLm5vZGVzKCksUz10aGlzLm9wdGlvbnMuZWxlcy5lZGdlcygpO3RoaXMucm9vdD1FLmFkZFJvb3QoKSx0aGlzLnByb2Nlc3NDaGlsZHJlbkxpc3QodGhpcy5yb290LHRoaXMuZ2V0VG9wTW9zdE5vZGVzKEEpLEMpO2Zvcih2YXIgXz0wO188Uy5sZW5ndGg7XysrKXt2YXIgST1TW19dLEQ9dGhpcy5pZFRvTE5vZGVbSS5kYXRhKCJzb3VyY2UiKV0saz10aGlzLmlkVG9MTm9kZVtJLmRhdGEoInRhcmdldCIpXTtpZihEIT09ayYmRC5nZXRFZGdlc0JldHdlZW4oaykubGVuZ3RoPT0wKXt2YXIgTD1FLmFkZChDLm5ld0VkZ2UoKSxELGspO0wuaWQ9SS5pZCgpfX12YXIgUj1vKGZ1bmN0aW9uKEIsRil7dHlwZW9mIEI9PSJudW1iZXIiJiYoQj1GKTt2YXIgUD1CLmRhdGEoImlkIiksej1ULmlkVG9MTm9kZVtQXTtyZXR1cm57eDp6LmdldFJlY3QoKS5nZXRDZW50ZXJYKCkseTp6LmdldFJlY3QoKS5nZXRDZW50ZXJZKCl9fSwiZ2V0UG9zaXRpb25zIiksTz1vKGZ1bmN0aW9uIE0oKXtmb3IodmFyIEI9byhmdW5jdGlvbigpe2IuZml0JiZiLmN5LmZpdChiLmVsZXMsYi5wYWRkaW5nKSx2fHwodj0hMCxULmN5Lm9uZSgibGF5b3V0cmVhZHkiLGIucmVhZHkpLFQuY3kudHJpZ2dlcih7dHlwZToibGF5b3V0cmVhZHkiLGxheW91dDpUfSkpfSwiYWZ0ZXJSZXBvc2l0aW9uIiksRj1ULm9wdGlvbnMucmVmcmVzaCxQLHo9MDt6PEYmJiFQO3orKylQPVQuc3RvcHBlZHx8VC5sYXlvdXQudGljaygpO2lmKFApe0MuY2hlY2tMYXlvdXRTdWNjZXNzKCkmJiFDLmlzU3ViTGF5b3V0JiZDLmRvUG9zdExheW91dCgpLEMudGlsaW5nUG9zdExheW91dCYmQy50aWxpbmdQb3N0TGF5b3V0KCksQy5pc0xheW91dEZpbmlzaGVkPSEwLFQub3B0aW9ucy5lbGVzLm5vZGVzKCkucG9zaXRpb25zKFIpLEIoKSxULmN5Lm9uZSgibGF5b3V0c3RvcCIsVC5vcHRpb25zLnN0b3ApLFQuY3kudHJpZ2dlcih7dHlwZToibGF5b3V0c3RvcCIsbGF5b3V0OlR9KSx4JiZjYW5jZWxBbmltYXRpb25GcmFtZSh4KSx2PSExO3JldHVybn12YXIgJD1ULmxheW91dC5nZXRQb3NpdGlvbnNEYXRhKCk7Yi5lbGVzLm5vZGVzKCkucG9zaXRpb25zKGZ1bmN0aW9uKEgsUSl7aWYodHlwZW9mIEg9PSJudW1iZXIiJiYoSD1RKSwhSC5pc1BhcmVudCgpKXtmb3IodmFyIGo9SC5pZCgpLGllPSRbal0sbmU9SDtpZT09bnVsbCYmKGllPSRbbmUuZGF0YSgicGFyZW50IildfHwkWyJEdW1teUNvbXBvdW5kXyIrbmUuZGF0YSgicGFyZW50IildLCRbal09aWUsbmU9bmUucGFyZW50KClbMF0sbmUhPW51bGwpOyk7cmV0dXJuIGllIT1udWxsP3t4OmllLngseTppZS55fTp7eDpILnBvc2l0aW9uKCJ4IikseTpILnBvc2l0aW9uKCJ5Iil9fX0pLEIoKSx4PXJlcXVlc3RBbmltYXRpb25GcmFtZShNKX0sIml0ZXJhdGVBbmltYXRlZCIpO3JldHVybiBDLmFkZExpc3RlbmVyKCJsYXlvdXRzdGFydGVkIixmdW5jdGlvbigpe1Qub3B0aW9ucy5hbmltYXRlPT09ImR1cmluZyImJih4PXJlcXVlc3RBbmltYXRpb25GcmFtZShPKSl9KSxDLnJ1bkxheW91dCgpLHRoaXMub3B0aW9ucy5hbmltYXRlIT09ImR1cmluZyImJihULm9wdGlvbnMuZWxlcy5ub2RlcygpLm5vdCgiOnBhcmVudCIpLmxheW91dFBvc2l0aW9ucyhULFQub3B0aW9ucyxSKSx2PSExKSx0aGlzfSxtLnByb3RvdHlwZS5nZXRUb3BNb3N0Tm9kZXM9ZnVuY3Rpb24odil7Zm9yKHZhciB4PXt9LGI9MDtiPHYubGVuZ3RoO2IrKyl4W3ZbYl0uaWQoKV09ITA7dmFyIHc9di5maWx0ZXIoZnVuY3Rpb24oQyxUKXt0eXBlb2YgQz09Im51bWJlciImJihDPVQpO2Zvcih2YXIgRT1DLnBhcmVudCgpWzBdO0UhPW51bGw7KXtpZih4W0UuaWQoKV0pcmV0dXJuITE7RT1FLnBhcmVudCgpWzBdfXJldHVybiEwfSk7cmV0dXJuIHd9LG0ucHJvdG90eXBlLnByb2Nlc3NDaGlsZHJlbkxpc3Q9ZnVuY3Rpb24odix4LGIpe2Zvcih2YXIgdz14Lmxlbmd0aCxDPTA7Qzx3O0MrKyl7dmFyIFQ9eFtDXSxFPVQuY2hpbGRyZW4oKSxBLFM9VC5sYXlvdXREaW1lbnNpb25zKHtub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6dGhpcy5vcHRpb25zLm5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsc30pO2lmKFQub3V0ZXJXaWR0aCgpIT1udWxsJiZULm91dGVySGVpZ2h0KCkhPW51bGw/QT12LmFkZChuZXcgdShiLmdyYXBoTWFuYWdlcixuZXcgaChULnBvc2l0aW9uKCJ4IiktUy53LzIsVC5wb3NpdGlvbigieSIpLVMuaC8yKSxuZXcgZihwYXJzZUZsb2F0KFMudykscGFyc2VGbG9hdChTLmgpKSkpOkE9di5hZGQobmV3IHUodGhpcy5ncmFwaE1hbmFnZXIpKSxBLmlkPVQuZGF0YSgiaWQiKSxBLnBhZGRpbmdMZWZ0PXBhcnNlSW50KFQuY3NzKCJwYWRkaW5nIikpLEEucGFkZGluZ1RvcD1wYXJzZUludChULmNzcygicGFkZGluZyIpKSxBLnBhZGRpbmdSaWdodD1wYXJzZUludChULmNzcygicGFkZGluZyIpKSxBLnBhZGRpbmdCb3R0b209cGFyc2VJbnQoVC5jc3MoInBhZGRpbmciKSksdGhpcy5vcHRpb25zLm5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVscyYmVC5pc1BhcmVudCgpKXt2YXIgXz1ULmJvdW5kaW5nQm94KHtpbmNsdWRlTGFiZWxzOiEwLGluY2x1ZGVOb2RlczohMX0pLncsST1ULmJvdW5kaW5nQm94KHtpbmNsdWRlTGFiZWxzOiEwLGluY2x1ZGVOb2RlczohMX0pLmgsRD1ULmNzcygidGV4dC1oYWxpZ24iKTtBLmxhYmVsV2lkdGg9XyxBLmxhYmVsSGVpZ2h0PUksQS5sYWJlbFBvcz1EfWlmKHRoaXMuaWRUb0xOb2RlW1QuZGF0YSgiaWQiKV09QSxpc05hTihBLnJlY3QueCkmJihBLnJlY3QueD0wKSxpc05hTihBLnJlY3QueSkmJihBLnJlY3QueT0wKSxFIT1udWxsJiZFLmxlbmd0aD4wKXt2YXIgaztrPWIuZ2V0R3JhcGhNYW5hZ2VyKCkuYWRkKGIubmV3R3JhcGgoKSxBKSx0aGlzLnByb2Nlc3NDaGlsZHJlbkxpc3QoayxFLGIpfX19LG0ucHJvdG90eXBlLnN0b3A9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdG9wcGVkPSEwLHRoaXN9O3ZhciB5PW8oZnVuY3Rpb24oeCl7eCgibGF5b3V0IiwiY29zZS1iaWxrZW50IixtKX0sInJlZ2lzdGVyIik7dHlwZW9mIGN5dG9zY2FwZTwidSImJnkoY3l0b3NjYXBlKSxlLmV4cG9ydHM9eX1dKX0pfSk7ZnVuY3Rpb24gSlplKHQsZSxyLG4saSl7cmV0dXJuIHQuaW5zZXJ0KCJwb2x5Z29uIiwiOmZpcnN0LWNoaWxkIikuYXR0cigicG9pbnRzIixuLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS54KyIsIithLnl9KS5qb2luKCIgIikpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhpLndpZHRoLWUpLzIrIiwgIityKyIpIil9dmFyIFlaZSxYWmUsalplLEtaZSxRWmUsWlplLGVKZSx0SmUsVmdlLFVnZSxIZ2U9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt0bygpO2lyKCk7WVplPTEyLFhaZT1vKGZ1bmN0aW9uKHQsZSxyLG4pe2UuYXBwZW5kKCJwYXRoIikuYXR0cigiaWQiLCJub2RlLSIrci5pZCkuYXR0cigiY2xhc3MiLCJub2RlLWJrZyBub2RlLSIrdC50eXBlMlN0cihyLnR5cGUpKS5hdHRyKCJkIixgTTAgJHtyLmhlaWdodC01fSB2JHstci5oZWlnaHQrMio1fSBxMCwtNSA1LC01IGgke3Iud2lkdGgtMio1fSBxNSwwIDUsNSB2JHtyLmhlaWdodC01fSBIMCBaYCksZS5hcHBlbmQoImxpbmUiKS5hdHRyKCJjbGFzcyIsIm5vZGUtbGluZS0iK24pLmF0dHIoIngxIiwwKS5hdHRyKCJ5MSIsci5oZWlnaHQpLmF0dHIoIngyIixyLndpZHRoKS5hdHRyKCJ5MiIsci5oZWlnaHQpfSwiZGVmYXVsdEJrZyIpLGpaZT1vKGZ1bmN0aW9uKHQsZSxyKXtlLmFwcGVuZCgicmVjdCIpLmF0dHIoImlkIiwibm9kZS0iK3IuaWQpLmF0dHIoImNsYXNzIiwibm9kZS1ia2cgbm9kZS0iK3QudHlwZTJTdHIoci50eXBlKSkuYXR0cigiaGVpZ2h0IixyLmhlaWdodCkuYXR0cigid2lkdGgiLHIud2lkdGgpfSwicmVjdEJrZyIpLEtaZT1vKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj1yLndpZHRoLGk9ci5oZWlnaHQsYT0uMTUqbixzPS4yNSpuLGw9LjM1Km4sdT0uMipuO2UuYXBwZW5kKCJwYXRoIikuYXR0cigiaWQiLCJub2RlLSIrci5pZCkuYXR0cigiY2xhc3MiLCJub2RlLWJrZyBub2RlLSIrdC50eXBlMlN0cihyLnR5cGUpKS5hdHRyKCJkIixgTTAgMCBhJHthfSwke2F9IDAgMCwxICR7biouMjV9LCR7LTEqbiouMX0KICAgICAgYSR7bH0sJHtsfSAxIDAsMSAke24qLjR9LCR7LTEqbiouMX0KICAgICAgYSR7c30sJHtzfSAxIDAsMSAke24qLjM1fSwkezEqbiouMn0KCiAgICAgIGEke2F9LCR7YX0gMSAwLDEgJHtuKi4xNX0sJHsxKmkqLjM1fQogICAgICBhJHt1fSwke3V9IDEgMCwxICR7LTEqbiouMTV9LCR7MSppKi42NX0KCiAgICAgIGEke3N9LCR7YX0gMSAwLDEgJHstMSpuKi4yNX0sJHtuKi4xNX0KICAgICAgYSR7bH0sJHtsfSAxIDAsMSAkey0xKm4qLjV9LDAKICAgICAgYSR7YX0sJHthfSAxIDAsMSAkey0xKm4qLjI1fSwkey0xKm4qLjE1fQoKICAgICAgYSR7YX0sJHthfSAxIDAsMSAkey0xKm4qLjF9LCR7LTEqaSouMzV9CiAgICAgIGEke3V9LCR7dX0gMSAwLDEgJHtuKi4xfSwkey0xKmkqLjY1fQoKICAgIEgwIFYwIFpgKX0sImNsb3VkQmtnIiksUVplPW8oZnVuY3Rpb24odCxlLHIpe2xldCBuPXIud2lkdGgsaT1yLmhlaWdodCxhPS4xNSpuO2UuYXBwZW5kKCJwYXRoIikuYXR0cigiaWQiLCJub2RlLSIrci5pZCkuYXR0cigiY2xhc3MiLCJub2RlLWJrZyBub2RlLSIrdC50eXBlMlN0cihyLnR5cGUpKS5hdHRyKCJkIixgTTAgMCBhJHthfSwke2F9IDEgMCwwICR7biouMjV9LCR7LTEqaSouMX0KICAgICAgYSR7YX0sJHthfSAxIDAsMCAke24qLjI1fSwwCiAgICAgIGEke2F9LCR7YX0gMSAwLDAgJHtuKi4yNX0sMAogICAgICBhJHthfSwke2F9IDEgMCwwICR7biouMjV9LCR7MSppKi4xfQoKICAgICAgYSR7YX0sJHthfSAxIDAsMCAke24qLjE1fSwkezEqaSouMzN9CiAgICAgIGEke2EqLjh9LCR7YSouOH0gMSAwLDAgMCwkezEqaSouMzR9CiAgICAgIGEke2F9LCR7YX0gMSAwLDAgJHstMSpuKi4xNX0sJHsxKmkqLjMzfQoKICAgICAgYSR7YX0sJHthfSAxIDAsMCAkey0xKm4qLjI1fSwke2kqLjE1fQogICAgICBhJHthfSwke2F9IDEgMCwwICR7LTEqbiouMjV9LDAKICAgICAgYSR7YX0sJHthfSAxIDAsMCAkey0xKm4qLjI1fSwwCiAgICAgIGEke2F9LCR7YX0gMSAwLDAgJHstMSpuKi4yNX0sJHstMSppKi4xNX0KCiAgICAgIGEke2F9LCR7YX0gMSAwLDAgJHstMSpuKi4xfSwkey0xKmkqLjMzfQogICAgICBhJHthKi44fSwke2EqLjh9IDEgMCwwIDAsJHstMSppKi4zNH0KICAgICAgYSR7YX0sJHthfSAxIDAsMCAke24qLjF9LCR7LTEqaSouMzN9CgogICAgSDAgVjAgWmApfSwiYmFuZ0JrZyIpLFpaZT1vKGZ1bmN0aW9uKHQsZSxyKXtlLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiaWQiLCJub2RlLSIrci5pZCkuYXR0cigiY2xhc3MiLCJub2RlLWJrZyBub2RlLSIrdC50eXBlMlN0cihyLnR5cGUpKS5hdHRyKCJyIixyLndpZHRoLzIpfSwiY2lyY2xlQmtnIik7byhKWmUsImluc2VydFBvbHlnb25TaGFwZSIpO2VKZT1vKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj1yLmhlaWdodCxhPW4vNCxzPXIud2lkdGgtci5wYWRkaW5nKzIqYSxsPVt7eDphLHk6MH0se3g6cy1hLHk6MH0se3g6cyx5Oi1uLzJ9LHt4OnMtYSx5Oi1ufSx7eDphLHk6LW59LHt4OjAseTotbi8yfV07SlplKGUscyxuLGwscil9LCJoZXhhZ29uQmtnIiksdEplPW8oZnVuY3Rpb24odCxlLHIpe2UuYXBwZW5kKCJyZWN0IikuYXR0cigiaWQiLCJub2RlLSIrci5pZCkuYXR0cigiY2xhc3MiLCJub2RlLWJrZyBub2RlLSIrdC50eXBlMlN0cihyLnR5cGUpKS5hdHRyKCJoZWlnaHQiLHIuaGVpZ2h0KS5hdHRyKCJyeCIsci5wYWRkaW5nKS5hdHRyKCJyeSIsci5wYWRkaW5nKS5hdHRyKCJ3aWR0aCIsci53aWR0aCl9LCJyb3VuZGVkUmVjdEJrZyIpLFZnZT1vKGFzeW5jIGZ1bmN0aW9uKHQsZSxyLG4saSl7bGV0IGE9aS5odG1sTGFiZWxzLHM9biUoWVplLTEpLGw9ZS5hcHBlbmQoImciKTtyLnNlY3Rpb249cztsZXQgdT0ic2VjdGlvbi0iK3M7czwwJiYodSs9IiBzZWN0aW9uLXJvb3QiKSxsLmF0dHIoImNsYXNzIiwoci5jbGFzcz9yLmNsYXNzKyIgIjoiIikrIm1pbmRtYXAtbm9kZSAiK3UpO2xldCBoPWwuYXBwZW5kKCJnIiksZj1sLmFwcGVuZCgiZyIpLGQ9ci5kZXNjci5yZXBsYWNlKC8oPGJyXC8qPikvZyxgCmApO2F3YWl0IEhuKGYsZCx7dXNlSHRtbExhYmVsczphLHdpZHRoOnIud2lkdGgsY2xhc3NlczoibWluZG1hcC1ub2RlLWxhYmVsIn0saSksYXx8Zi5hdHRyKCJkeSIsIjFlbSIpLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKTtsZXQgcD1mLm5vZGUoKS5nZXRCQm94KCksW21dPUJvKGkuZm9udFNpemUpO2lmKHIuaGVpZ2h0PXAuaGVpZ2h0K20qMS4xKi41K3IucGFkZGluZyxyLndpZHRoPXAud2lkdGgrMipyLnBhZGRpbmcsci5pY29uKWlmKHIudHlwZT09PXQubm9kZVR5cGUuQ0lSQ0xFKXIuaGVpZ2h0Kz01MCxyLndpZHRoKz01MCxsLmFwcGVuZCgiZm9yZWlnbk9iamVjdCIpLmF0dHIoImhlaWdodCIsIjUwcHgiKS5hdHRyKCJ3aWR0aCIsci53aWR0aCkuYXR0cigic3R5bGUiLCJ0ZXh0LWFsaWduOiBjZW50ZXI7IikuYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsImljb24tY29udGFpbmVyIikuYXBwZW5kKCJpIikuYXR0cigiY2xhc3MiLCJub2RlLWljb24tIitzKyIgIityLmljb24pLGYuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrci53aWR0aC8yKyIsICIrKHIuaGVpZ2h0LzItMS41KnIucGFkZGluZykrIikiKTtlbHNle3Iud2lkdGgrPTUwO2xldCBnPXIuaGVpZ2h0O3IuaGVpZ2h0PU1hdGgubWF4KGcsNjApO2xldCB5PU1hdGguYWJzKHIuaGVpZ2h0LWcpO2wuYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigid2lkdGgiLCI2MHB4IikuYXR0cigiaGVpZ2h0IixyLmhlaWdodCkuYXR0cigic3R5bGUiLCJ0ZXh0LWFsaWduOiBjZW50ZXI7bWFyZ2luLXRvcDoiK3kvMisicHg7IikuYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsImljb24tY29udGFpbmVyIikuYXBwZW5kKCJpIikuYXR0cigiY2xhc3MiLCJub2RlLWljb24tIitzKyIgIityLmljb24pLGYuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKDI1K3Iud2lkdGgvMikrIiwgIisoeS8yK3IucGFkZGluZy8yKSsiKSIpfWVsc2UgaWYoYSl7bGV0IGc9KHIud2lkdGgtcC53aWR0aCkvMix5PShyLmhlaWdodC1wLmhlaWdodCkvMjtmLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2crIiwgIit5KyIpIil9ZWxzZXtsZXQgZz1yLndpZHRoLzIseT1yLnBhZGRpbmcvMjtmLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2crIiwgIit5KyIpIil9c3dpdGNoKHIudHlwZSl7Y2FzZSB0Lm5vZGVUeXBlLkRFRkFVTFQ6WFplKHQsaCxyLHMpO2JyZWFrO2Nhc2UgdC5ub2RlVHlwZS5ST1VOREVEX1JFQ1Q6dEplKHQsaCxyLHMpO2JyZWFrO2Nhc2UgdC5ub2RlVHlwZS5SRUNUOmpaZSh0LGgscixzKTticmVhaztjYXNlIHQubm9kZVR5cGUuQ0lSQ0xFOmguYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrci53aWR0aC8yKyIsICIrICtyLmhlaWdodC8yKyIpIiksWlplKHQsaCxyLHMpO2JyZWFrO2Nhc2UgdC5ub2RlVHlwZS5DTE9VRDpLWmUodCxoLHIscyk7YnJlYWs7Y2FzZSB0Lm5vZGVUeXBlLkJBTkc6UVplKHQsaCxyLHMpO2JyZWFrO2Nhc2UgdC5ub2RlVHlwZS5IRVhBR09OOmVKZSh0LGgscixzKTticmVha31yZXR1cm4gdC5zZXRFbGVtZW50Rm9ySWQoci5pZCxsKSxyLmhlaWdodH0sImRyYXdOb2RlIiksVWdlPW8oZnVuY3Rpb24odCxlKXtsZXQgcj10LmdldEVsZW1lbnRCeUlkKGUuaWQpLG49ZS54fHwwLGk9ZS55fHwwO3IuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrbisiLCIraSsiKSIpfSwicG9zaXRpb25Ob2RlIil9KTthc3luYyBmdW5jdGlvbiBxZ2UodCxlLHIsbixpKXthd2FpdCBWZ2UodCxlLHIsbixpKSxyLmNoaWxkcmVuJiZhd2FpdCBQcm9taXNlLmFsbChyLmNoaWxkcmVuLm1hcCgoYSxzKT0+cWdlKHQsZSxhLG48MD9zOm4saSkpKX1mdW5jdGlvbiBySmUodCxlKXtlLmVkZ2VzKCkubWFwKChyLG4pPT57bGV0IGk9ci5kYXRhKCk7aWYoclswXS5fcHJpdmF0ZS5ib2R5Qm91bmRzKXtsZXQgYT1yWzBdLl9wcml2YXRlLnJzY3JhdGNoO1kudHJhY2UoIkVkZ2U6ICIsbixpKSx0Lmluc2VydCgicGF0aCIpLmF0dHIoImQiLGBNICR7YS5zdGFydFh9LCR7YS5zdGFydFl9IEwgJHthLm1pZFh9LCR7YS5taWRZfSBMJHthLmVuZFh9LCR7YS5lbmRZfSBgKS5hdHRyKCJjbGFzcyIsImVkZ2Ugc2VjdGlvbi1lZGdlLSIraS5zZWN0aW9uKyIgZWRnZS1kZXB0aC0iK2kuZGVwdGgpfX0pfWZ1bmN0aW9uIFlnZSh0LGUscixuKXtlLmFkZCh7Z3JvdXA6Im5vZGVzIixkYXRhOntpZDp0LmlkLnRvU3RyaW5nKCksbGFiZWxUZXh0OnQuZGVzY3IsaGVpZ2h0OnQuaGVpZ2h0LHdpZHRoOnQud2lkdGgsbGV2ZWw6bixub2RlSWQ6dC5pZCxwYWRkaW5nOnQucGFkZGluZyx0eXBlOnQudHlwZX0scG9zaXRpb246e3g6dC54LHk6dC55fX0pLHQuY2hpbGRyZW4mJnQuY2hpbGRyZW4uZm9yRWFjaChpPT57WWdlKGksZSxyLG4rMSksZS5hZGQoe2dyb3VwOiJlZGdlcyIsZGF0YTp7aWQ6YCR7dC5pZH1fJHtpLmlkfWAsc291cmNlOnQuaWQsdGFyZ2V0OmkuaWQsZGVwdGg6bixzZWN0aW9uOmkuc2VjdGlvbn19KX0pfWZ1bmN0aW9uIG5KZSh0LGUpe3JldHVybiBuZXcgUHJvbWlzZShyPT57bGV0IG49R2UoImJvZHkiKS5hcHBlbmQoImRpdiIpLmF0dHIoImlkIiwiY3kiKS5hdHRyKCJzdHlsZSIsImRpc3BsYXk6bm9uZSIpLGk9cmwoe2NvbnRhaW5lcjpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY3kiKSxzdHlsZTpbe3NlbGVjdG9yOiJlZGdlIixzdHlsZTp7ImN1cnZlLXN0eWxlIjoiYmV6aWVyIn19XX0pO24ucmVtb3ZlKCksWWdlKHQsaSxlLDApLGkubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EubGF5b3V0RGltZW5zaW9ucz0oKT0+e2xldCBzPWEuZGF0YSgpO3JldHVybnt3OnMud2lkdGgsaDpzLmhlaWdodH19fSksaS5sYXlvdXQoe25hbWU6ImNvc2UtYmlsa2VudCIscXVhbGl0eToicHJvb2YiLHN0eWxlRW5hYmxlZDohMSxhbmltYXRlOiExfSkucnVuKCksaS5yZWFkeShhPT57WS5pbmZvKCJSZWFkeSIsYSkscihpKX0pfSl9ZnVuY3Rpb24gaUplKHQsZSl7ZS5ub2RlcygpLm1hcCgocixuKT0+e2xldCBpPXIuZGF0YSgpO2kueD1yLnBvc2l0aW9uKCkueCxpLnk9ci5wb3NpdGlvbigpLnksVWdlKHQsaSk7bGV0IGE9dC5nZXRFbGVtZW50QnlJZChpLm5vZGVJZCk7WS5pbmZvKCJJZDoiLG4sIlBvc2l0aW9uOiAoIixyLnBvc2l0aW9uKCkueCwiLCAiLHIucG9zaXRpb24oKS55LCIpIixpKSxhLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3IucG9zaXRpb24oKS54LWkud2lkdGgvMn0sICR7ci5wb3NpdGlvbigpLnktaS5oZWlnaHQvMn0pYCksYS5hdHRyKCJhdHRyIixgYXBhLSR7bn0pYCl9KX12YXIgV2dlLGFKZSxYZ2UsamdlPU4oKCk9PnsidXNlIHN0cmljdCI7a0IoKTtXZ2U9U2EoR2dlKCksMSk7ZHIoKTt6dCgpO3Z0KCk7VmMoKTtFaSgpO0hnZSgpO1lhKCk7cmwudXNlKFdnZS5kZWZhdWx0KTtvKHFnZSwiZHJhd05vZGVzIik7byhySmUsImRyYXdFZGdlcyIpO28oWWdlLCJhZGROb2RlcyIpO28obkplLCJsYXlvdXRNaW5kbWFwIik7byhpSmUsInBvc2l0aW9uTm9kZXMiKTthSmU9byhhc3luYyh0LGUscixuKT0+e1kuZGVidWcoYFJlbmRlcmluZyBtaW5kbWFwIGRpYWdyYW0KYCt0KTtsZXQgaT1uLmRiLGE9aS5nZXRNaW5kbWFwKCk7aWYoIWEpcmV0dXJuO2xldCBzPW1lKCk7cy5odG1sTGFiZWxzPSExO2xldCBsPXNhKGUpLHU9bC5hcHBlbmQoImciKTt1LmF0dHIoImNsYXNzIiwibWluZG1hcC1lZGdlcyIpO2xldCBoPWwuYXBwZW5kKCJnIik7aC5hdHRyKCJjbGFzcyIsIm1pbmRtYXAtbm9kZXMiKSxhd2FpdCBxZ2UoaSxoLGEsLTEscyk7bGV0IGY9YXdhaXQgbkplKGEscyk7ckplKHUsZiksaUplKGksZiksQW8odm9pZCAwLGwscy5taW5kbWFwPy5wYWRkaW5nPz9vci5taW5kbWFwLnBhZGRpbmcscy5taW5kbWFwPy51c2VNYXhXaWR0aD8/b3IubWluZG1hcC51c2VNYXhXaWR0aCl9LCJkcmF3IiksWGdlPXtkcmF3OmFKZX19KTt2YXIgc0plLG9KZSxLZ2UsUWdlPU4oKCk9PnsidXNlIHN0cmljdCI7WXMoKTtzSmU9byh0PT57bGV0IGU9IiI7Zm9yKGxldCByPTA7cjx0LlRIRU1FX0NPTE9SX0xJTUlUO3IrKyl0WyJsaW5lQ29sb3IiK3JdPXRbImxpbmVDb2xvciIrcl18fHRbImNTY2FsZUludiIrcl0sY2EodFsibGluZUNvbG9yIityXSk/dFsibGluZUNvbG9yIityXT1EdCh0WyJsaW5lQ29sb3IiK3JdLDIwKTp0WyJsaW5lQ29sb3IiK3JdPU90KHRbImxpbmVDb2xvciIrcl0sMjApO2ZvcihsZXQgcj0wO3I8dC5USEVNRV9DT0xPUl9MSU1JVDtyKyspe2xldCBuPSIiKygxNy0zKnIpO2UrPWAKICAgIC5zZWN0aW9uLSR7ci0xfSByZWN0LCAuc2VjdGlvbi0ke3ItMX0gcGF0aCwgLnNlY3Rpb24tJHtyLTF9IGNpcmNsZSwgLnNlY3Rpb24tJHtyLTF9IHBvbHlnb24sIC5zZWN0aW9uLSR7ci0xfSBwYXRoICB7CiAgICAgIGZpbGw6ICR7dFsiY1NjYWxlIityXX07CiAgICB9CiAgICAuc2VjdGlvbi0ke3ItMX0gdGV4dCB7CiAgICAgZmlsbDogJHt0WyJjU2NhbGVMYWJlbCIrcl19OwogICAgfQogICAgLm5vZGUtaWNvbi0ke3ItMX0gewogICAgICBmb250LXNpemU6IDQwcHg7CiAgICAgIGNvbG9yOiAke3RbImNTY2FsZUxhYmVsIityXX07CiAgICB9CiAgICAuc2VjdGlvbi1lZGdlLSR7ci0xfXsKICAgICAgc3Ryb2tlOiAke3RbImNTY2FsZSIrcl19OwogICAgfQogICAgLmVkZ2UtZGVwdGgtJHtyLTF9ewogICAgICBzdHJva2Utd2lkdGg6ICR7bn07CiAgICB9CiAgICAuc2VjdGlvbi0ke3ItMX0gbGluZSB7CiAgICAgIHN0cm9rZTogJHt0WyJjU2NhbGVJbnYiK3JdfSA7CiAgICAgIHN0cm9rZS13aWR0aDogMzsKICAgIH0KCiAgICAuZGlzYWJsZWQsIC5kaXNhYmxlZCBjaXJjbGUsIC5kaXNhYmxlZCB0ZXh0IHsKICAgICAgZmlsbDogbGlnaHRncmF5OwogICAgfQogICAgLmRpc2FibGVkIHRleHQgewogICAgICBmaWxsOiAjZWZlZmVmOwogICAgfQogICAgYH1yZXR1cm4gZX0sImdlblNlY3Rpb25zIiksb0plPW8odD0+YAogIC5lZGdlIHsKICAgIHN0cm9rZS13aWR0aDogMzsKICB9CiAgJHtzSmUodCl9CiAgLnNlY3Rpb24tcm9vdCByZWN0LCAuc2VjdGlvbi1yb290IHBhdGgsIC5zZWN0aW9uLXJvb3QgY2lyY2xlLCAuc2VjdGlvbi1yb290IHBvbHlnb24gIHsKICAgIGZpbGw6ICR7dC5naXQwfTsKICB9CiAgLnNlY3Rpb24tcm9vdCB0ZXh0IHsKICAgIGZpbGw6ICR7dC5naXRCcmFuY2hMYWJlbDB9OwogIH0KICAuaWNvbi1jb250YWluZXIgewogICAgaGVpZ2h0OjEwMCU7CiAgICBkaXNwbGF5OiBmbGV4OwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogIH0KICAuZWRnZSB7CiAgICBmaWxsOiBub25lOwogIH0KICAubWluZG1hcC1ub2RlLWxhYmVsIHsKICAgIGR5OiAxZW07CiAgICBhbGlnbm1lbnQtYmFzZWxpbmU6IG1pZGRsZTsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICBkb21pbmFudC1iYXNlbGluZTogbWlkZGxlOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KYCwiZ2V0U3R5bGVzIiksS2dlPW9KZX0pO3ZhciBaZ2U9e307aHIoWmdlLHtkaWFncmFtOigpPT5sSmV9KTt2YXIgbEplLEpnZT1OKCgpPT57InVzZSBzdHJpY3QiO1NwZSgpO19wZSgpO2pnZSgpO1FnZSgpO2xKZT17ZGI6QXBlLHJlbmRlcmVyOlhnZSxwYXJzZXI6RXBlLHN0eWxlczpLZ2V9fSk7dmFyIERCLHIxZSxuMWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtEQj1mdW5jdGlvbigpe3ZhciB0PW8oZnVuY3Rpb24oQSxTLF8sSSl7Zm9yKF89X3x8e30sST1BLmxlbmd0aDtJLS07X1tBW0ldXT1TKTtyZXR1cm4gX30sIm8iKSxlPVsxLDRdLHI9WzEsMTNdLG49WzEsMTJdLGk9WzEsMTVdLGE9WzEsMTZdLHM9WzEsMjBdLGw9WzEsMTldLHU9WzYsNyw4XSxoPVsxLDI2XSxmPVsxLDI0XSxkPVsxLDI1XSxwPVs2LDcsMTFdLG09WzEsMzFdLGc9WzYsNywxMSwyNF0seT1bMSw2LDEzLDE2LDE3LDIwLDIzXSx2PVsxLDM1XSx4PVsxLDM2XSxiPVsxLDYsNywxMSwxMywxNiwxNywyMCwyM10sdz1bMSwzOF0sQz17dHJhY2U6byhmdW5jdGlvbigpe30sInRyYWNlIikseXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxtaW5kTWFwOjQsc3BhY2VMaW5lczo1LFNQQUNFTElORTo2LE5MOjcsS0FOQkFOOjgsZG9jdW1lbnQ6OSxzdG9wOjEwLEVPRjoxMSxzdGF0ZW1lbnQ6MTIsU1BBQ0VMSVNUOjEzLG5vZGU6MTQsc2hhcGVEYXRhOjE1LElDT046MTYsQ0xBU1M6MTcsbm9kZVdpdGhJZDoxOCxub2RlV2l0aG91dElkOjE5LE5PREVfRFNUQVJUOjIwLE5PREVfREVTQ1I6MjEsTk9ERV9ERU5EOjIyLE5PREVfSUQ6MjMsU0hBUEVfREFUQToyNCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNjoiU1BBQ0VMSU5FIiw3OiJOTCIsODoiS0FOQkFOIiwxMToiRU9GIiwxMzoiU1BBQ0VMSVNUIiwxNjoiSUNPTiIsMTc6IkNMQVNTIiwyMDoiTk9ERV9EU1RBUlQiLDIxOiJOT0RFX0RFU0NSIiwyMjoiTk9ERV9ERU5EIiwyMzoiTk9ERV9JRCIsMjQ6IlNIQVBFX0RBVEEifSxwcm9kdWN0aW9uc186WzAsWzMsMV0sWzMsMl0sWzUsMV0sWzUsMl0sWzUsMl0sWzQsMl0sWzQsM10sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDJdLFsxMCwyXSxbOSwzXSxbOSwyXSxbMTIsM10sWzEyLDJdLFsxMiwyXSxbMTIsMl0sWzEyLDFdLFsxMiwyXSxbMTIsMV0sWzEyLDFdLFsxMiwxXSxbMTIsMV0sWzE0LDFdLFsxNCwxXSxbMTksM10sWzE4LDFdLFsxOCw0XSxbMTUsMl0sWzE1LDFdXSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24oUyxfLEksRCxrLEwsUil7dmFyIE89TC5sZW5ndGgtMTtzd2l0Y2goayl7Y2FzZSA2OmNhc2UgNzpyZXR1cm4gRDtjYXNlIDg6RC5nZXRMb2dnZXIoKS50cmFjZSgiU3RvcCBOTCAiKTticmVhaztjYXNlIDk6RC5nZXRMb2dnZXIoKS50cmFjZSgiU3RvcCBFT0YgIik7YnJlYWs7Y2FzZSAxMTpELmdldExvZ2dlcigpLnRyYWNlKCJTdG9wIE5MMiAiKTticmVhaztjYXNlIDEyOkQuZ2V0TG9nZ2VyKCkudHJhY2UoIlN0b3AgRU9GMiAiKTticmVhaztjYXNlIDE1OkQuZ2V0TG9nZ2VyKCkuaW5mbygiTm9kZTogIixMW08tMV0uaWQpLEQuYWRkTm9kZShMW08tMl0ubGVuZ3RoLExbTy0xXS5pZCxMW08tMV0uZGVzY3IsTFtPLTFdLnR5cGUsTFtPXSk7YnJlYWs7Y2FzZSAxNjpELmdldExvZ2dlcigpLmluZm8oIk5vZGU6ICIsTFtPXS5pZCksRC5hZGROb2RlKExbTy0xXS5sZW5ndGgsTFtPXS5pZCxMW09dLmRlc2NyLExbT10udHlwZSk7YnJlYWs7Y2FzZSAxNzpELmdldExvZ2dlcigpLnRyYWNlKCJJY29uOiAiLExbT10pLEQuZGVjb3JhdGVOb2RlKHtpY29uOkxbT119KTticmVhaztjYXNlIDE4OmNhc2UgMjM6RC5kZWNvcmF0ZU5vZGUoe2NsYXNzOkxbT119KTticmVhaztjYXNlIDE5OkQuZ2V0TG9nZ2VyKCkudHJhY2UoIlNQQUNFTElTVCIpO2JyZWFrO2Nhc2UgMjA6RC5nZXRMb2dnZXIoKS50cmFjZSgiTm9kZTogIixMW08tMV0uaWQpLEQuYWRkTm9kZSgwLExbTy0xXS5pZCxMW08tMV0uZGVzY3IsTFtPLTFdLnR5cGUsTFtPXSk7YnJlYWs7Y2FzZSAyMTpELmdldExvZ2dlcigpLnRyYWNlKCJOb2RlOiAiLExbT10uaWQpLEQuYWRkTm9kZSgwLExbT10uaWQsTFtPXS5kZXNjcixMW09dLnR5cGUpO2JyZWFrO2Nhc2UgMjI6RC5kZWNvcmF0ZU5vZGUoe2ljb246TFtPXX0pO2JyZWFrO2Nhc2UgMjc6RC5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBmb3VuZCAuLiIsTFtPLTJdKSx0aGlzLiQ9e2lkOkxbTy0xXSxkZXNjcjpMW08tMV0sdHlwZTpELmdldFR5cGUoTFtPLTJdLExbT10pfTticmVhaztjYXNlIDI4OnRoaXMuJD17aWQ6TFtPXSxkZXNjcjpMW09dLHR5cGU6MH07YnJlYWs7Y2FzZSAyOTpELmdldExvZ2dlcigpLnRyYWNlKCJub2RlIGZvdW5kIC4uIixMW08tM10pLHRoaXMuJD17aWQ6TFtPLTNdLGRlc2NyOkxbTy0xXSx0eXBlOkQuZ2V0VHlwZShMW08tMl0sTFtPXSl9O2JyZWFrO2Nhc2UgMzA6dGhpcy4kPUxbTy0xXStMW09dO2JyZWFrO2Nhc2UgMzE6dGhpcy4kPUxbT107YnJlYWt9fSwiYW5vbnltb3VzIiksdGFibGU6W3szOjEsNDoyLDU6Myw2OlsxLDVdLDg6ZX0sezE6WzNdfSx7MTpbMiwxXX0sezQ6Niw2OlsxLDddLDc6WzEsOF0sODplfSx7NjpyLDc6WzEsMTBdLDk6OSwxMjoxMSwxMzpuLDE0OjE0LDE2OmksMTc6YSwxODoxNywxOToxOCwyMDpzLDIzOmx9LHQodSxbMiwzXSksezE6WzIsMl19LHQodSxbMiw0XSksdCh1LFsyLDVdKSx7MTpbMiw2XSw2OnIsMTI6MjEsMTM6biwxNDoxNCwxNjppLDE3OmEsMTg6MTcsMTk6MTgsMjA6cywyMzpsfSx7NjpyLDk6MjIsMTI6MTEsMTM6biwxNDoxNCwxNjppLDE3OmEsMTg6MTcsMTk6MTgsMjA6cywyMzpsfSx7NjpoLDc6ZiwxMDoyMywxMTpkfSx0KHAsWzIsMjRdLHsxODoxNywxOToxOCwxNDoyNywxNjpbMSwyOF0sMTc6WzEsMjldLDIwOnMsMjM6bH0pLHQocCxbMiwxOV0pLHQocCxbMiwyMV0sezE1OjMwLDI0Om19KSx0KHAsWzIsMjJdKSx0KHAsWzIsMjNdKSx0KGcsWzIsMjVdKSx0KGcsWzIsMjZdKSx0KGcsWzIsMjhdLHsyMDpbMSwzMl19KSx7MjE6WzEsMzNdfSx7NjpoLDc6ZiwxMDozNCwxMTpkfSx7MTpbMiw3XSw2OnIsMTI6MjEsMTM6biwxNDoxNCwxNjppLDE3OmEsMTg6MTcsMTk6MTgsMjA6cywyMzpsfSx0KHksWzIsMTRdLHs3OnYsMTE6eH0pLHQoYixbMiw4XSksdChiLFsyLDldKSx0KGIsWzIsMTBdKSx0KHAsWzIsMTZdLHsxNTozNywyNDptfSksdChwLFsyLDE3XSksdChwLFsyLDE4XSksdChwLFsyLDIwXSx7MjQ6d30pLHQoZyxbMiwzMV0pLHsyMTpbMSwzOV19LHsyMjpbMSw0MF19LHQoeSxbMiwxM10sezc6diwxMTp4fSksdChiLFsyLDExXSksdChiLFsyLDEyXSksdChwLFsyLDE1XSx7MjQ6d30pLHQoZyxbMiwzMF0pLHsyMjpbMSw0MV19LHQoZyxbMiwyN10pLHQoZyxbMiwyOV0pXSxkZWZhdWx0QWN0aW9uczp7MjpbMiwxXSw2OlsyLDJdfSxwYXJzZUVycm9yOm8oZnVuY3Rpb24oUyxfKXtpZihfLnJlY292ZXJhYmxlKXRoaXMudHJhY2UoUyk7ZWxzZXt2YXIgST1uZXcgRXJyb3IoUyk7dGhyb3cgSS5oYXNoPV8sSX19LCJwYXJzZUVycm9yIikscGFyc2U6byhmdW5jdGlvbihTKXt2YXIgXz10aGlzLEk9WzBdLEQ9W10saz1bbnVsbF0sTD1bXSxSPXRoaXMudGFibGUsTz0iIixNPTAsQj0wLEY9MCxQPTIsej0xLCQ9TC5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxIPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksUT17eXk6e319O2Zvcih2YXIgaiBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGopJiYoUS55eVtqXT10aGlzLnl5W2pdKTtILnNldElucHV0KFMsUS55eSksUS55eS5sZXhlcj1ILFEueXkucGFyc2VyPXRoaXMsdHlwZW9mIEgueXlsbG9jPiJ1IiYmKEgueXlsbG9jPXt9KTt2YXIgaWU9SC55eWxsb2M7TC5wdXNoKGllKTt2YXIgbmU9SC5vcHRpb25zJiZILm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBRLnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPVEueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gbGUoemUpe0kubGVuZ3RoPUkubGVuZ3RoLTIqemUsay5sZW5ndGg9ay5sZW5ndGgtemUsTC5sZW5ndGg9TC5sZW5ndGgtemV9byhsZSwicG9wU3RhY2siKTtmdW5jdGlvbiBoZSgpe3ZhciB6ZTtyZXR1cm4gemU9RC5wb3AoKXx8SC5sZXgoKXx8eix0eXBlb2YgemUhPSJudW1iZXIiJiYoemUgaW5zdGFuY2VvZiBBcnJheSYmKEQ9emUsemU9RC5wb3AoKSksemU9Xy5zeW1ib2xzX1t6ZV18fHplKSx6ZX1vKGhlLCJsZXgiKTtmb3IodmFyIEssWCx0ZSxKLHNlLHVlLFo9e30sU2UsY2UsYWUsT2U7Oyl7aWYodGU9SVtJLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW3RlXT9KPXRoaXMuZGVmYXVsdEFjdGlvbnNbdGVdOigoSz09PW51bGx8fHR5cGVvZiBLPiJ1IikmJihLPWhlKCkpLEo9Ult0ZV0mJlJbdGVdW0tdKSx0eXBlb2YgSj4idSJ8fCFKLmxlbmd0aHx8IUpbMF0pe3ZhciBnZT0iIjtPZT1bXTtmb3IoU2UgaW4gUlt0ZV0pdGhpcy50ZXJtaW5hbHNfW1NlXSYmU2U+UCYmT2UucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW1NlXSsiJyIpO0guc2hvd1Bvc2l0aW9uP2dlPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKE0rMSkrYDoKYCtILnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArT2Uuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tLXXx8SykrIiciOmdlPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKE0rMSkrIjogVW5leHBlY3RlZCAiKyhLPT16PyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW0tdfHxLKSsiJyIpLHRoaXMucGFyc2VFcnJvcihnZSx7dGV4dDpILm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tLXXx8SyxsaW5lOkgueXlsaW5lbm8sbG9jOmllLGV4cGVjdGVkOk9lfSl9aWYoSlswXWluc3RhbmNlb2YgQXJyYXkmJkoubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIit0ZSsiLCB0b2tlbjogIitLKTtzd2l0Y2goSlswXSl7Y2FzZSAxOkkucHVzaChLKSxrLnB1c2goSC55eXRleHQpLEwucHVzaChILnl5bGxvYyksSS5wdXNoKEpbMV0pLEs9bnVsbCxYPyhLPVgsWD1udWxsKTooQj1ILnl5bGVuZyxPPUgueXl0ZXh0LE09SC55eWxpbmVubyxpZT1ILnl5bGxvYyxGPjAmJkYtLSk7YnJlYWs7Y2FzZSAyOmlmKGNlPXRoaXMucHJvZHVjdGlvbnNfW0pbMV1dWzFdLFouJD1rW2subGVuZ3RoLWNlXSxaLl8kPXtmaXJzdF9saW5lOkxbTC5sZW5ndGgtKGNlfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6TFtMLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOkxbTC5sZW5ndGgtKGNlfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOkxbTC5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LG5lJiYoWi5fJC5yYW5nZT1bTFtMLmxlbmd0aC0oY2V8fDEpXS5yYW5nZVswXSxMW0wubGVuZ3RoLTFdLnJhbmdlWzFdXSksdWU9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KFosW08sQixNLFEueXksSlsxXSxrLExdLmNvbmNhdCgkKSksdHlwZW9mIHVlPCJ1IilyZXR1cm4gdWU7Y2UmJihJPUkuc2xpY2UoMCwtMSpjZSoyKSxrPWsuc2xpY2UoMCwtMSpjZSksTD1MLnNsaWNlKDAsLTEqY2UpKSxJLnB1c2godGhpcy5wcm9kdWN0aW9uc19bSlsxXV1bMF0pLGsucHVzaChaLiQpLEwucHVzaChaLl8kKSxhZT1SW0lbSS5sZW5ndGgtMl1dW0lbSS5sZW5ndGgtMV1dLEkucHVzaChhZSk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH0sInBhcnNlIil9LFQ9ZnVuY3Rpb24oKXt2YXIgQT17RU9GOjEscGFyc2VFcnJvcjpvKGZ1bmN0aW9uKF8sSSl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihfLEkpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKF8pfSwicGFyc2VFcnJvciIpLHNldElucHV0Om8oZnVuY3Rpb24oUyxfKXtyZXR1cm4gdGhpcy55eT1ffHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1TLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSwic2V0SW5wdXQiKSxpbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIFM9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPVMsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPVMsdGhpcy5tYXRjaGVkKz1TO3ZhciBfPVMubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBfPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxTfSwiaW5wdXQiKSx1bnB1dDpvKGZ1bmN0aW9uKFMpe3ZhciBfPVMubGVuZ3RoLEk9Uy5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PVMrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLV8pLHRoaXMub2Zmc2V0LT1fO3ZhciBEPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLEkubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1JLmxlbmd0aC0xKTt2YXIgaz10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46ST8oSS5sZW5ndGg9PT1ELmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrRFtELmxlbmd0aC1JLmxlbmd0aF0ubGVuZ3RoLUlbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1ffSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2tbMF0sa1swXSt0aGlzLnl5bGVuZy1fXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LCJ1bnB1dCIpLG1vcmU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LCJtb3JlIikscmVqZWN0Om8oZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LCJyZWplY3QiKSxsZXNzOm8oZnVuY3Rpb24oUyl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKFMpKX0sImxlc3MiKSxwYXN0SW5wdXQ6byhmdW5jdGlvbigpe3ZhciBTPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oUy5sZW5ndGg+MjA/Ii4uLiI6IiIpK1Muc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LCJwYXN0SW5wdXQiKSx1cGNvbWluZ0lucHV0Om8oZnVuY3Rpb24oKXt2YXIgUz10aGlzLm1hdGNoO3JldHVybiBTLmxlbmd0aDwyMCYmKFMrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLVMubGVuZ3RoKSksKFMuc3Vic3RyKDAsMjApKyhTLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSwidXBjb21pbmdJbnB1dCIpLHNob3dQb3NpdGlvbjpvKGZ1bmN0aW9uKCl7dmFyIFM9dGhpcy5wYXN0SW5wdXQoKSxfPW5ldyBBcnJheShTLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIFMrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK18rIl4ifSwic2hvd1Bvc2l0aW9uIiksdGVzdF9tYXRjaDpvKGZ1bmN0aW9uKFMsXyl7dmFyIEksRCxrO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihrPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGsueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksRD1TWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxEJiYodGhpcy55eWxpbmVubys9RC5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpEP0RbRC5sZW5ndGgtMV0ubGVuZ3RoLURbRC5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitTWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPVNbMF0sdGhpcy5tYXRjaCs9U1swXSx0aGlzLm1hdGNoZXM9Uyx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShTWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1TWzBdLEk9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsXyx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxJKXJldHVybiBJO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBMIGluIGspdGhpc1tMXT1rW0xdO3JldHVybiExfXJldHVybiExfSwidGVzdF9tYXRjaCIpLG5leHQ6byhmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBTLF8sSSxEO3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIGs9dGhpcy5fY3VycmVudFJ1bGVzKCksTD0wO0w8ay5sZW5ndGg7TCsrKWlmKEk9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1trW0xdXSksSSYmKCFffHxJWzBdLmxlbmd0aD5fWzBdLmxlbmd0aCkpe2lmKF89SSxEPUwsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoUz10aGlzLnRlc3RfbWF0Y2goSSxrW0xdKSxTIT09ITEpcmV0dXJuIFM7aWYodGhpcy5fYmFja3RyYWNrKXtfPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIF8/KFM9dGhpcy50ZXN0X21hdGNoKF8sa1tEXSksUyE9PSExP1M6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LCJuZXh0IiksbGV4Om8oZnVuY3Rpb24oKXt2YXIgXz10aGlzLm5leHQoKTtyZXR1cm4gX3x8dGhpcy5sZXgoKX0sImxleCIpLGJlZ2luOm8oZnVuY3Rpb24oXyl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKF8pfSwiYmVnaW4iKSxwb3BTdGF0ZTpvKGZ1bmN0aW9uKCl7dmFyIF89dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gXz4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sInBvcFN0YXRlIiksX2N1cnJlbnRSdWxlczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sIl9jdXJyZW50UnVsZXMiKSx0b3BTdGF0ZTpvKGZ1bmN0aW9uKF8pe3JldHVybiBfPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoX3x8MCksXz49MD90aGlzLmNvbmRpdGlvblN0YWNrW19dOiJJTklUSUFMIn0sInRvcFN0YXRlIikscHVzaFN0YXRlOm8oZnVuY3Rpb24oXyl7dGhpcy5iZWdpbihfKX0sInB1c2hTdGF0ZSIpLHN0YXRlU3RhY2tTaXplOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LCJzdGF0ZVN0YWNrU2l6ZSIpLG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKF8sSSxELGspe3ZhciBMPWs7c3dpdGNoKEQpe2Nhc2UgMDpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInNoYXBlRGF0YSIpLEkueXl0ZXh0PSIiLDI0O2JyZWFrO2Nhc2UgMTpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInNoYXBlRGF0YVN0ciIpLDI0O2JyZWFrO2Nhc2UgMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDI0O2JyZWFrO2Nhc2UgMzpsZXQgUj0vXG5ccyovZztyZXR1cm4gSS55eXRleHQ9SS55eXRleHQucmVwbGFjZShSLCI8YnIvPiIpLDI0O2JyZWFrO2Nhc2UgNDpyZXR1cm4gMjQ7Y2FzZSA1OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDY6cmV0dXJuIF8uZ2V0TG9nZ2VyKCkudHJhY2UoIkZvdW5kIGNvbW1lbnQiLEkueXl0ZXh0KSw2O2JyZWFrO2Nhc2UgNzpyZXR1cm4gODtjYXNlIDg6dGhpcy5iZWdpbigiQ0xBU1MiKTticmVhaztjYXNlIDk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNzticmVhaztjYXNlIDEwOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDExOl8uZ2V0TG9nZ2VyKCkudHJhY2UoIkJlZ2luIGljb24iKSx0aGlzLmJlZ2luKCJJQ09OIik7YnJlYWs7Y2FzZSAxMjpyZXR1cm4gXy5nZXRMb2dnZXIoKS50cmFjZSgiU1BBQ0VMSU5FIiksNjticmVhaztjYXNlIDEzOnJldHVybiA3O2Nhc2UgMTQ6cmV0dXJuIDE2O2Nhc2UgMTU6Xy5nZXRMb2dnZXIoKS50cmFjZSgiZW5kIGljb24iKSx0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxNjpyZXR1cm4gXy5nZXRMb2dnZXIoKS50cmFjZSgiRXhwbG9kaW5nIG5vZGUiKSx0aGlzLmJlZ2luKCJOT0RFIiksMjA7YnJlYWs7Y2FzZSAxNzpyZXR1cm4gXy5nZXRMb2dnZXIoKS50cmFjZSgiQ2xvdWQiKSx0aGlzLmJlZ2luKCJOT0RFIiksMjA7YnJlYWs7Y2FzZSAxODpyZXR1cm4gXy5nZXRMb2dnZXIoKS50cmFjZSgiRXhwbG9zaW9uIEJhbmciKSx0aGlzLmJlZ2luKCJOT0RFIiksMjA7YnJlYWs7Y2FzZSAxOTpyZXR1cm4gXy5nZXRMb2dnZXIoKS50cmFjZSgiQ2xvdWQgQmFuZyIpLHRoaXMuYmVnaW4oIk5PREUiKSwyMDticmVhaztjYXNlIDIwOnJldHVybiB0aGlzLmJlZ2luKCJOT0RFIiksMjA7YnJlYWs7Y2FzZSAyMTpyZXR1cm4gdGhpcy5iZWdpbigiTk9ERSIpLDIwO2JyZWFrO2Nhc2UgMjI6cmV0dXJuIHRoaXMuYmVnaW4oIk5PREUiKSwyMDticmVhaztjYXNlIDIzOnJldHVybiB0aGlzLmJlZ2luKCJOT0RFIiksMjA7YnJlYWs7Y2FzZSAyNDpyZXR1cm4gMTM7Y2FzZSAyNTpyZXR1cm4gMjM7Y2FzZSAyNjpyZXR1cm4gMTE7Y2FzZSAyNzp0aGlzLmJlZ2luKCJOU1RSMiIpO2JyZWFrO2Nhc2UgMjg6cmV0dXJuIk5PREVfREVTQ1IiO2Nhc2UgMjk6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMzA6Xy5nZXRMb2dnZXIoKS50cmFjZSgiU3RhcnRpbmcgTlNUUiIpLHRoaXMuYmVnaW4oIk5TVFIiKTticmVhaztjYXNlIDMxOnJldHVybiBfLmdldExvZ2dlcigpLnRyYWNlKCJkZXNjcmlwdGlvbjoiLEkueXl0ZXh0KSwiTk9ERV9ERVNDUiI7YnJlYWs7Y2FzZSAzMjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAzMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLF8uZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICkpIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSAzNDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLF8uZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICkiKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDM1OnJldHVybiB0aGlzLnBvcFN0YXRlKCksXy5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgLi4uIixJLnl5dGV4dCksIk5PREVfREVORCI7YnJlYWs7Y2FzZSAzNjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLF8uZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICgoIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSAzNzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLF8uZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICgtIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSAzODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLF8uZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICgtIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSAzOTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLF8uZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICgoIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSA0MDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLF8uZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICgoIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSA0MTpyZXR1cm4gXy5nZXRMb2dnZXIoKS50cmFjZSgiTG9uZyBkZXNjcmlwdGlvbjoiLEkueXl0ZXh0KSwyMTticmVhaztjYXNlIDQyOnJldHVybiBfLmdldExvZ2dlcigpLnRyYWNlKCJMb25nIGRlc2NyaXB0aW9uOiIsSS55eXRleHQpLDIxO2JyZWFrfX0sImFub255bW91cyIpLHJ1bGVzOlsvXig/OkBceykvaSwvXig/OlsiXSkvaSwvXig/OlsiXSkvaSwvXig/OlteXCJdKykvaSwvXig/OltefV4iXSspL2ksL14oPzpcfSkvaSwvXig/OlxzKiUlLiopL2ksL14oPzprYW5iYW5cYikvaSwvXig/Ojo6OikvaSwvXig/Oi4rKS9pLC9eKD86XG4pL2ksL14oPzo6Omljb25cKCkvaSwvXig/Oltcc10rW1xuXSkvaSwvXig/Oltcbl0rKS9pLC9eKD86W15cKV0rKS9pLC9eKD86XCkpL2ksL14oPzotXCkpL2ksL14oPzpcKC0pL2ksL14oPzpcKVwpKS9pLC9eKD86XCkpL2ksL14oPzpcKFwoKS9pLC9eKD86XHtceykvaSwvXig/OlwoKS9pLC9eKD86XFspL2ksL14oPzpbXHNdKykvaSwvXig/OlteXChcW1xuXClce1x9QF0rKS9pLC9eKD86JCkvaSwvXig/OlsiXVtgXSkvaSwvXig/OlteYCJdKykvaSwvXig/OltgXVsiXSkvaSwvXig/OlsiXSkvaSwvXig/OlteIl0rKS9pLC9eKD86WyJdKS9pLC9eKD86W1wpXVwpKS9pLC9eKD86W1wpXSkvaSwvXig/OltcXV0pL2ksL14oPzpcfVx9KS9pLC9eKD86XCgtKS9pLC9eKD86LVwpKS9pLC9eKD86XChcKCkvaSwvXig/OlwoKS9pLC9eKD86W15cKVxdXChcfV0rKS9pLC9eKD86LisoPyFcKFwoKSkvaV0sY29uZGl0aW9uczp7c2hhcGVEYXRhRW5kQnJhY2tldDp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxzaGFwZURhdGFTdHI6e3J1bGVzOlsyLDNdLGluY2x1c2l2ZTohMX0sc2hhcGVEYXRhOntydWxlczpbMSw0LDVdLGluY2x1c2l2ZTohMX0sQ0xBU1M6e3J1bGVzOls5LDEwXSxpbmNsdXNpdmU6ITF9LElDT046e3J1bGVzOlsxNCwxNV0saW5jbHVzaXZlOiExfSxOU1RSMjp7cnVsZXM6WzI4LDI5XSxpbmNsdXNpdmU6ITF9LE5TVFI6e3J1bGVzOlszMSwzMl0saW5jbHVzaXZlOiExfSxOT0RFOntydWxlczpbMjcsMzAsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDJdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsNiw3LDgsMTEsMTIsMTMsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjZdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gQX0oKTtDLmxleGVyPVQ7ZnVuY3Rpb24gRSgpe3RoaXMueXk9e319cmV0dXJuIG8oRSwiUGFyc2VyIiksRS5wcm90b3R5cGU9QyxDLlBhcnNlcj1FLG5ldyBFfSgpO0RCLnBhcnNlcj1EQjtyMWU9REJ9KTt2YXIgbmwsUkIsTEIsTkIsZkplLGRKZSxpMWUscEplLG1KZSxZaSxnSmUseUplLHZKZSx4SmUsYkplLHdKZSxUSmUsYTFlLHMxZT1OKCgpPT57InVzZSBzdHJpY3QiO3p0KCk7Z3IoKTt2dCgpO1lhKCk7RXcoKTtubD1bXSxSQj1bXSxMQj0wLE5CPXt9LGZKZT1vKCgpPT57bmw9W10sUkI9W10sTEI9MCxOQj17fX0sImNsZWFyIiksZEplPW8odD0+e2lmKG5sLmxlbmd0aD09PTApcmV0dXJuIG51bGw7bGV0IGU9bmxbMF0ubGV2ZWwscj1udWxsO2ZvcihsZXQgbj1ubC5sZW5ndGgtMTtuPj0wO24tLSlpZihubFtuXS5sZXZlbD09PWUmJiFyJiYocj1ubFtuXSksbmxbbl0ubGV2ZWw8ZSl0aHJvdyBuZXcgRXJyb3IoJ0l0ZW1zIHdpdGhvdXQgc2VjdGlvbiBkZXRlY3RlZCwgZm91bmQgc2VjdGlvbiAoIicrbmxbbl0ubGFiZWwrJyIpJyk7cmV0dXJuIHQ9PT1yPy5sZXZlbD9udWxsOnJ9LCJnZXRTZWN0aW9uIiksaTFlPW8oZnVuY3Rpb24oKXtyZXR1cm4gUkJ9LCJnZXRTZWN0aW9ucyIpLHBKZT1vKGZ1bmN0aW9uKCl7bGV0IHQ9W10sZT1bXSxyPWkxZSgpLG49bWUoKTtmb3IobGV0IGkgb2Ygcil7bGV0IGE9e2lkOmkuaWQsbGFiZWw6VHIoaS5sYWJlbD8/IiIsbiksaXNHcm91cDohMCx0aWNrZXQ6aS50aWNrZXQsc2hhcGU6ImthbmJhblNlY3Rpb24iLGxldmVsOmkubGV2ZWwsbG9vazpuLmxvb2t9O2UucHVzaChhKTtsZXQgcz1ubC5maWx0ZXIobD0+bC5wYXJlbnRJZD09PWkuaWQpO2ZvcihsZXQgbCBvZiBzKXtsZXQgdT17aWQ6bC5pZCxwYXJlbnRJZDppLmlkLGxhYmVsOlRyKGwubGFiZWw/PyIiLG4pLGlzR3JvdXA6ITEsdGlja2V0Omw/LnRpY2tldCxwcmlvcml0eTpsPy5wcmlvcml0eSxhc3NpZ25lZDpsPy5hc3NpZ25lZCxpY29uOmw/Lmljb24sc2hhcGU6ImthbmJhbkl0ZW0iLGxldmVsOmwubGV2ZWwscng6NSxyeTo1LGNzc1N0eWxlczpbInRleHQtYWxpZ246IGxlZnQiXX07ZS5wdXNoKHUpfX1yZXR1cm57bm9kZXM6ZSxlZGdlczp0LG90aGVyOnt9LGNvbmZpZzptZSgpfX0sImdldERhdGEiKSxtSmU9bygodCxlLHIsbixpKT0+e2xldCBhPW1lKCkscz1hLm1pbmRtYXA/LnBhZGRpbmc/P29yLm1pbmRtYXAucGFkZGluZztzd2l0Y2gobil7Y2FzZSBZaS5ST1VOREVEX1JFQ1Q6Y2FzZSBZaS5SRUNUOmNhc2UgWWkuSEVYQUdPTjpzKj0yfWxldCBsPXtpZDpUcihlLGEpfHwia2JuIitMQisrLGxldmVsOnQsbGFiZWw6VHIocixhKSx3aWR0aDphLm1pbmRtYXA/Lm1heE5vZGVXaWR0aD8/b3IubWluZG1hcC5tYXhOb2RlV2lkdGgscGFkZGluZzpzLGlzR3JvdXA6ITF9O2lmKGkhPT12b2lkIDApe2xldCBoO2kuaW5jbHVkZXMoYApgKT9oPWkrYApgOmg9YHsKYCtpK2AKfWA7bGV0IGY9Y20oaCx7c2NoZW1hOmxtfSk7aWYoZi5zaGFwZSYmKGYuc2hhcGUhPT1mLnNoYXBlLnRvTG93ZXJDYXNlKCl8fGYuc2hhcGUuaW5jbHVkZXMoIl8iKSkpdGhyb3cgbmV3IEVycm9yKGBObyBzdWNoIHNoYXBlOiAke2Yuc2hhcGV9LiBTaGFwZSBuYW1lcyBzaG91bGQgYmUgbG93ZXJjYXNlLmApO2Y/LnNoYXBlJiZmLnNoYXBlPT09ImthbmJhbkl0ZW0iJiYobC5zaGFwZT1mPy5zaGFwZSksZj8ubGFiZWwmJihsLmxhYmVsPWY/LmxhYmVsKSxmPy5pY29uJiYobC5pY29uPWY/Lmljb24udG9TdHJpbmcoKSksZj8uYXNzaWduZWQmJihsLmFzc2lnbmVkPWY/LmFzc2lnbmVkLnRvU3RyaW5nKCkpLGY/LnRpY2tldCYmKGwudGlja2V0PWY/LnRpY2tldC50b1N0cmluZygpKSxmPy5wcmlvcml0eSYmKGwucHJpb3JpdHk9Zj8ucHJpb3JpdHkpfWxldCB1PWRKZSh0KTt1P2wucGFyZW50SWQ9dS5pZHx8ImtibiIrTEIrKzpSQi5wdXNoKGwpLG5sLnB1c2gobCl9LCJhZGROb2RlIiksWWk9e0RFRkFVTFQ6MCxOT19CT1JERVI6MCxST1VOREVEX1JFQ1Q6MSxSRUNUOjIsQ0lSQ0xFOjMsQ0xPVUQ6NCxCQU5HOjUsSEVYQUdPTjo2fSxnSmU9bygodCxlKT0+e3N3aXRjaChZLmRlYnVnKCJJbiBnZXQgdHlwZSIsdCxlKSx0KXtjYXNlIlsiOnJldHVybiBZaS5SRUNUO2Nhc2UiKCI6cmV0dXJuIGU9PT0iKSI/WWkuUk9VTkRFRF9SRUNUOllpLkNMT1VEO2Nhc2UiKCgiOnJldHVybiBZaS5DSVJDTEU7Y2FzZSIpIjpyZXR1cm4gWWkuQ0xPVUQ7Y2FzZSIpKSI6cmV0dXJuIFlpLkJBTkc7Y2FzZSJ7eyI6cmV0dXJuIFlpLkhFWEFHT047ZGVmYXVsdDpyZXR1cm4gWWkuREVGQVVMVH19LCJnZXRUeXBlIikseUplPW8oKHQsZSk9PntOQlt0XT1lfSwic2V0RWxlbWVudEZvcklkIiksdkplPW8odD0+e2lmKCF0KXJldHVybjtsZXQgZT1tZSgpLHI9bmxbbmwubGVuZ3RoLTFdO3QuaWNvbiYmKHIuaWNvbj1Ucih0Lmljb24sZSkpLHQuY2xhc3MmJihyLmNzc0NsYXNzZXM9VHIodC5jbGFzcyxlKSl9LCJkZWNvcmF0ZU5vZGUiKSx4SmU9byh0PT57c3dpdGNoKHQpe2Nhc2UgWWkuREVGQVVMVDpyZXR1cm4ibm8tYm9yZGVyIjtjYXNlIFlpLlJFQ1Q6cmV0dXJuInJlY3QiO2Nhc2UgWWkuUk9VTkRFRF9SRUNUOnJldHVybiJyb3VuZGVkLXJlY3QiO2Nhc2UgWWkuQ0lSQ0xFOnJldHVybiJjaXJjbGUiO2Nhc2UgWWkuQ0xPVUQ6cmV0dXJuImNsb3VkIjtjYXNlIFlpLkJBTkc6cmV0dXJuImJhbmciO2Nhc2UgWWkuSEVYQUdPTjpyZXR1cm4iaGV4Z29uIjtkZWZhdWx0OnJldHVybiJuby1ib3JkZXIifX0sInR5cGUyU3RyIiksYkplPW8oKCk9PlksImdldExvZ2dlciIpLHdKZT1vKHQ9Pk5CW3RdLCJnZXRFbGVtZW50QnlJZCIpLFRKZT17Y2xlYXI6ZkplLGFkZE5vZGU6bUplLGdldFNlY3Rpb25zOmkxZSxnZXREYXRhOnBKZSxub2RlVHlwZTpZaSxnZXRUeXBlOmdKZSxzZXRFbGVtZW50Rm9ySWQ6eUplLGRlY29yYXRlTm9kZTp2SmUsdHlwZTJTdHI6eEplLGdldExvZ2dlcjpiSmUsZ2V0RWxlbWVudEJ5SWQ6d0plfSxhMWU9VEplfSk7dmFyIGtKZSxvMWUsbDFlPU4oKCk9PnsidXNlIHN0cmljdCI7enQoKTt2dCgpO1ZjKCk7RWkoKTtZYSgpO0h3KCk7ZVQoKTtrSmU9byhhc3luYyh0LGUscixuKT0+e1kuZGVidWcoYFJlbmRlcmluZyBrYW5iYW4gZGlhZ3JhbQpgK3QpO2xldCBhPW4uZGIuZ2V0RGF0YSgpLHM9bWUoKTtzLmh0bWxMYWJlbHM9ITE7bGV0IGw9c2EoZSksdT1sLmFwcGVuZCgiZyIpO3UuYXR0cigiY2xhc3MiLCJzZWN0aW9ucyIpO2xldCBoPWwuYXBwZW5kKCJnIik7aC5hdHRyKCJjbGFzcyIsIml0ZW1zIik7bGV0IGY9YS5ub2Rlcy5maWx0ZXIodj0+di5pc0dyb3VwKSxkPTAscD0xMCxtPVtdLGc9MjU7Zm9yKGxldCB2IG9mIGYpe2xldCB4PXM/LmthbmJhbj8uc2VjdGlvbldpZHRofHwyMDA7ZD1kKzEsdi54PXgqZCsoZC0xKSpwLzIsdi53aWR0aD14LHYueT0wLHYuaGVpZ2h0PXgqMyx2LnJ4PTUsdi5yeT01LHYuY3NzQ2xhc3Nlcz12LmNzc0NsYXNzZXMrIiBzZWN0aW9uLSIrZDtsZXQgYj1hd2FpdCB5bSh1LHYpO2c9TWF0aC5tYXgoZyxiPy5sYWJlbEJCb3g/LmhlaWdodCksbS5wdXNoKGIpfWxldCB5PTA7Zm9yKGxldCB2IG9mIGYpe2xldCB4PW1beV07eT15KzE7bGV0IGI9cz8ua2FuYmFuPy5zZWN0aW9uV2lkdGh8fDIwMCx3PS1iKjMvMitnLEM9dyxUPWEubm9kZXMuZmlsdGVyKFM9PlMucGFyZW50SWQ9PT12LmlkKTtmb3IobGV0IFMgb2YgVCl7aWYoUy5pc0dyb3VwKXRocm93IG5ldyBFcnJvcigiR3JvdXBzIHdpdGhpbiBncm91cHMgYXJlIG5vdCBhbGxvd2VkIGluIEthbmJhbiBkaWFncmFtcyIpO1MueD12LngsUy53aWR0aD1iLTEuNSpwO2xldCBJPShhd2FpdCB2bShoLFMse2NvbmZpZzpzfSkpLm5vZGUoKS5nZXRCQm94KCk7Uy55PUMrSS5oZWlnaHQvMixhd2FpdCBrMihTKSxDPVMueStJLmhlaWdodC8yK3AvMn1sZXQgRT14LmNsdXN0ZXIuc2VsZWN0KCJyZWN0IiksQT1NYXRoLm1heChDLXcrMypwLDUwKSsoZy0yNSk7RS5hdHRyKCJoZWlnaHQiLEEpfUFvKHZvaWQgMCxsLHMubWluZG1hcD8ucGFkZGluZz8/b3Iua2FuYmFuLnBhZGRpbmcscy5taW5kbWFwPy51c2VNYXhXaWR0aD8/b3Iua2FuYmFuLnVzZU1heFdpZHRoKX0sImRyYXciKSxvMWU9e2RyYXc6a0plfX0pO3ZhciBFSmUsU0plLGMxZSx1MWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtZcygpO0VKZT1vKHQ9PntsZXQgZT0iIjtmb3IobGV0IG49MDtuPHQuVEhFTUVfQ09MT1JfTElNSVQ7bisrKXRbImxpbmVDb2xvciIrbl09dFsibGluZUNvbG9yIituXXx8dFsiY1NjYWxlSW52IituXSxjYSh0WyJsaW5lQ29sb3IiK25dKT90WyJsaW5lQ29sb3IiK25dPUR0KHRbImxpbmVDb2xvciIrbl0sMjApOnRbImxpbmVDb2xvciIrbl09T3QodFsibGluZUNvbG9yIituXSwyMCk7bGV0IHI9bygobixpKT0+dC5kYXJrTW9kZT9PdChuLGkpOkR0KG4saSksImFkanVzdGVyIik7Zm9yKGxldCBuPTA7bjx0LlRIRU1FX0NPTE9SX0xJTUlUO24rKyl7bGV0IGk9IiIrKDE3LTMqbik7ZSs9YAogICAgLnNlY3Rpb24tJHtuLTF9IHJlY3QsIC5zZWN0aW9uLSR7bi0xfSBwYXRoLCAuc2VjdGlvbi0ke24tMX0gY2lyY2xlLCAuc2VjdGlvbi0ke24tMX0gcG9seWdvbiwgLnNlY3Rpb24tJHtuLTF9IHBhdGggIHsKICAgICAgZmlsbDogJHtyKHRbImNTY2FsZSIrbl0sMTApfTsKICAgICAgc3Ryb2tlOiAke3IodFsiY1NjYWxlIituXSwxMCl9OwoKICAgIH0KICAgIC5zZWN0aW9uLSR7bi0xfSB0ZXh0IHsKICAgICBmaWxsOiAke3RbImNTY2FsZUxhYmVsIituXX07CiAgICB9CiAgICAubm9kZS1pY29uLSR7bi0xfSB7CiAgICAgIGZvbnQtc2l6ZTogNDBweDsKICAgICAgY29sb3I6ICR7dFsiY1NjYWxlTGFiZWwiK25dfTsKICAgIH0KICAgIC5zZWN0aW9uLWVkZ2UtJHtuLTF9ewogICAgICBzdHJva2U6ICR7dFsiY1NjYWxlIituXX07CiAgICB9CiAgICAuZWRnZS1kZXB0aC0ke24tMX17CiAgICAgIHN0cm9rZS13aWR0aDogJHtpfTsKICAgIH0KICAgIC5zZWN0aW9uLSR7bi0xfSBsaW5lIHsKICAgICAgc3Ryb2tlOiAke3RbImNTY2FsZUludiIrbl19IDsKICAgICAgc3Ryb2tlLXdpZHRoOiAzOwogICAgfQoKICAgIC5kaXNhYmxlZCwgLmRpc2FibGVkIGNpcmNsZSwgLmRpc2FibGVkIHRleHQgewogICAgICBmaWxsOiBsaWdodGdyYXk7CiAgICB9CiAgICAuZGlzYWJsZWQgdGV4dCB7CiAgICAgIGZpbGw6ICNlZmVmZWY7CiAgICB9CgogIC5ub2RlIHJlY3QsCiAgLm5vZGUgY2lyY2xlLAogIC5ub2RlIGVsbGlwc2UsCiAgLm5vZGUgcG9seWdvbiwKICAubm9kZSBwYXRoIHsKICAgIGZpbGw6ICR7dC5iYWNrZ3JvdW5kfTsKICAgIHN0cm9rZTogJHt0Lm5vZGVCb3JkZXJ9OwogICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgfQoKICAua2FuYmFuLXRpY2tldC1saW5rIHsKICAgIGZpbGw6ICR7dC5iYWNrZ3JvdW5kfTsKICAgIHN0cm9rZTogJHt0Lm5vZGVCb3JkZXJ9OwogICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgfQogICAgYH1yZXR1cm4gZX0sImdlblNlY3Rpb25zIiksU0plPW8odD0+YAogIC5lZGdlIHsKICAgIHN0cm9rZS13aWR0aDogMzsKICB9CiAgJHtFSmUodCl9CiAgLnNlY3Rpb24tcm9vdCByZWN0LCAuc2VjdGlvbi1yb290IHBhdGgsIC5zZWN0aW9uLXJvb3QgY2lyY2xlLCAuc2VjdGlvbi1yb290IHBvbHlnb24gIHsKICAgIGZpbGw6ICR7dC5naXQwfTsKICB9CiAgLnNlY3Rpb24tcm9vdCB0ZXh0IHsKICAgIGZpbGw6ICR7dC5naXRCcmFuY2hMYWJlbDB9OwogIH0KICAuaWNvbi1jb250YWluZXIgewogICAgaGVpZ2h0OjEwMCU7CiAgICBkaXNwbGF5OiBmbGV4OwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogIH0KICAuZWRnZSB7CiAgICBmaWxsOiBub25lOwogIH0KICAuY2x1c3Rlci1sYWJlbCwgLmxhYmVsIHsKICAgIGNvbG9yOiAke3QudGV4dENvbG9yfTsKICAgIGZpbGw6ICR7dC50ZXh0Q29sb3J9OwogICAgfQogIC5rYW5iYW4tbGFiZWwgewogICAgZHk6IDFlbTsKICAgIGFsaWdubWVudC1iYXNlbGluZTogbWlkZGxlOwogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIGRvbWluYW50LWJhc2VsaW5lOiBtaWRkbGU7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgfQpgLCJnZXRTdHlsZXMiKSxjMWU9U0plfSk7dmFyIGgxZT17fTtocihoMWUse2RpYWdyYW06KCk9PkNKZX0pO3ZhciBDSmUsZjFlPU4oKCk9PnsidXNlIHN0cmljdCI7bjFlKCk7czFlKCk7bDFlKCk7dTFlKCk7Q0plPXtkYjphMWUscmVuZGVyZXI6bzFlLHBhcnNlcjpyMWUsc3R5bGVzOmMxZX19KTt2YXIgTUIsZDQsbTFlPU4oKCk9PnsidXNlIHN0cmljdCI7TUI9ZnVuY3Rpb24oKXt2YXIgdD1vKGZ1bmN0aW9uKGwsdSxoLGYpe2ZvcihoPWh8fHt9LGY9bC5sZW5ndGg7Zi0tO2hbbFtmXV09dSk7cmV0dXJuIGh9LCJvIiksZT1bMSw5XSxyPVsxLDEwXSxuPVsxLDUsMTAsMTJdLGk9e3RyYWNlOm8oZnVuY3Rpb24oKXt9LCJ0cmFjZSIpLHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsU0FOS0VZOjQsTkVXTElORTo1LGNzdjo2LG9wdF9lb2Y6NyxyZWNvcmQ6OCxjc3ZfdGFpbDo5LEVPRjoxMCwiZmllbGRbc291cmNlXSI6MTEsQ09NTUE6MTIsImZpZWxkW3RhcmdldF0iOjEzLCJmaWVsZFt2YWx1ZV0iOjE0LGZpZWxkOjE1LGVzY2FwZWQ6MTYsbm9uX2VzY2FwZWQ6MTcsRFFVT1RFOjE4LEVTQ0FQRURfVEVYVDoxOSxOT05fRVNDQVBFRF9URVhUOjIwLCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw0OiJTQU5LRVkiLDU6Ik5FV0xJTkUiLDEwOiJFT0YiLDExOiJmaWVsZFtzb3VyY2VdIiwxMjoiQ09NTUEiLDEzOiJmaWVsZFt0YXJnZXRdIiwxNDoiZmllbGRbdmFsdWVdIiwxODoiRFFVT1RFIiwxOToiRVNDQVBFRF9URVhUIiwyMDoiTk9OX0VTQ0FQRURfVEVYVCJ9LHByb2R1Y3Rpb25zXzpbMCxbMyw0XSxbNiwyXSxbOSwyXSxbOSwwXSxbNywxXSxbNywwXSxbOCw1XSxbMTUsMV0sWzE1LDFdLFsxNiwzXSxbMTcsMV1dLHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbih1LGgsZixkLHAsbSxnKXt2YXIgeT1tLmxlbmd0aC0xO3N3aXRjaChwKXtjYXNlIDc6bGV0IHY9ZC5maW5kT3JDcmVhdGVOb2RlKG1beS00XS50cmltKCkucmVwbGFjZUFsbCgnIiInLCciJykpLHg9ZC5maW5kT3JDcmVhdGVOb2RlKG1beS0yXS50cmltKCkucmVwbGFjZUFsbCgnIiInLCciJykpLGI9cGFyc2VGbG9hdChtW3ldLnRyaW0oKSk7ZC5hZGRMaW5rKHYseCxiKTticmVhaztjYXNlIDg6Y2FzZSA5OmNhc2UgMTE6dGhpcy4kPW1beV07YnJlYWs7Y2FzZSAxMDp0aGlzLiQ9bVt5LTFdO2JyZWFrfX0sImFub255bW91cyIpLHRhYmxlOlt7MzoxLDQ6WzEsMl19LHsxOlszXX0sezU6WzEsM119LHs2OjQsODo1LDE1OjYsMTY6NywxNzo4LDE4OmUsMjA6cn0sezE6WzIsNl0sNzoxMSwxMDpbMSwxMl19LHQocixbMiw0XSx7OToxMyw1OlsxLDE0XX0pLHsxMjpbMSwxNV19LHQobixbMiw4XSksdChuLFsyLDldKSx7MTk6WzEsMTZdfSx0KG4sWzIsMTFdKSx7MTpbMiwxXX0sezE6WzIsNV19LHQocixbMiwyXSksezY6MTcsODo1LDE1OjYsMTY6NywxNzo4LDE4OmUsMjA6cn0sezE1OjE4LDE2OjcsMTc6OCwxODplLDIwOnJ9LHsxODpbMSwxOV19LHQocixbMiwzXSksezEyOlsxLDIwXX0sdChuLFsyLDEwXSksezE1OjIxLDE2OjcsMTc6OCwxODplLDIwOnJ9LHQoWzEsNSwxMF0sWzIsN10pXSxkZWZhdWx0QWN0aW9uczp7MTE6WzIsMV0sMTI6WzIsNV19LHBhcnNlRXJyb3I6byhmdW5jdGlvbih1LGgpe2lmKGgucmVjb3ZlcmFibGUpdGhpcy50cmFjZSh1KTtlbHNle3ZhciBmPW5ldyBFcnJvcih1KTt0aHJvdyBmLmhhc2g9aCxmfX0sInBhcnNlRXJyb3IiKSxwYXJzZTpvKGZ1bmN0aW9uKHUpe3ZhciBoPXRoaXMsZj1bMF0sZD1bXSxwPVtudWxsXSxtPVtdLGc9dGhpcy50YWJsZSx5PSIiLHY9MCx4PTAsYj0wLHc9MixDPTEsVD1tLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLEU9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxBPXt5eTp7fX07Zm9yKHZhciBTIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksUykmJihBLnl5W1NdPXRoaXMueXlbU10pO0Uuc2V0SW5wdXQodSxBLnl5KSxBLnl5LmxleGVyPUUsQS55eS5wYXJzZXI9dGhpcyx0eXBlb2YgRS55eWxsb2M+InUiJiYoRS55eWxsb2M9e30pO3ZhciBfPUUueXlsbG9jO20ucHVzaChfKTt2YXIgST1FLm9wdGlvbnMmJkUub3B0aW9ucy5yYW5nZXM7dHlwZW9mIEEueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9QS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBEKGllKXtmLmxlbmd0aD1mLmxlbmd0aC0yKmllLHAubGVuZ3RoPXAubGVuZ3RoLWllLG0ubGVuZ3RoPW0ubGVuZ3RoLWllfW8oRCwicG9wU3RhY2siKTtmdW5jdGlvbiBrKCl7dmFyIGllO3JldHVybiBpZT1kLnBvcCgpfHxFLmxleCgpfHxDLHR5cGVvZiBpZSE9Im51bWJlciImJihpZSBpbnN0YW5jZW9mIEFycmF5JiYoZD1pZSxpZT1kLnBvcCgpKSxpZT1oLnN5bWJvbHNfW2llXXx8aWUpLGllfW8oaywibGV4Iik7Zm9yKHZhciBMLFIsTyxNLEIsRixQPXt9LHosJCxILFE7Oyl7aWYoTz1mW2YubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbT10/TT10aGlzLmRlZmF1bHRBY3Rpb25zW09dOigoTD09PW51bGx8fHR5cGVvZiBMPiJ1IikmJihMPWsoKSksTT1nW09dJiZnW09dW0xdKSx0eXBlb2YgTT4idSJ8fCFNLmxlbmd0aHx8IU1bMF0pe3ZhciBqPSIiO1E9W107Zm9yKHogaW4gZ1tPXSl0aGlzLnRlcm1pbmFsc19bel0mJno+dyYmUS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bel0rIiciKTtFLnNob3dQb3NpdGlvbj9qPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKHYrMSkrYDoKYCtFLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArUS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW0xdfHxMKSsiJyI6aj0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyh2KzEpKyI6IFVuZXhwZWN0ZWQgIisoTD09Qz8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tMXXx8TCkrIiciKSx0aGlzLnBhcnNlRXJyb3Ioaix7dGV4dDpFLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tMXXx8TCxsaW5lOkUueXlsaW5lbm8sbG9jOl8sZXhwZWN0ZWQ6UX0pfWlmKE1bMF1pbnN0YW5jZW9mIEFycmF5JiZNLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrTysiLCB0b2tlbjogIitMKTtzd2l0Y2goTVswXSl7Y2FzZSAxOmYucHVzaChMKSxwLnB1c2goRS55eXRleHQpLG0ucHVzaChFLnl5bGxvYyksZi5wdXNoKE1bMV0pLEw9bnVsbCxSPyhMPVIsUj1udWxsKTooeD1FLnl5bGVuZyx5PUUueXl0ZXh0LHY9RS55eWxpbmVubyxfPUUueXlsbG9jLGI+MCYmYi0tKTticmVhaztjYXNlIDI6aWYoJD10aGlzLnByb2R1Y3Rpb25zX1tNWzFdXVsxXSxQLiQ9cFtwLmxlbmd0aC0kXSxQLl8kPXtmaXJzdF9saW5lOm1bbS5sZW5ndGgtKCR8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTptW20ubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46bVttLmxlbmd0aC0oJHx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjptW20ubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxJJiYoUC5fJC5yYW5nZT1bbVttLmxlbmd0aC0oJHx8MSldLnJhbmdlWzBdLG1bbS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxGPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShQLFt5LHgsdixBLnl5LE1bMV0scCxtXS5jb25jYXQoVCkpLHR5cGVvZiBGPCJ1IilyZXR1cm4gRjskJiYoZj1mLnNsaWNlKDAsLTEqJCoyKSxwPXAuc2xpY2UoMCwtMSokKSxtPW0uc2xpY2UoMCwtMSokKSksZi5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW01bMV1dWzBdKSxwLnB1c2goUC4kKSxtLnB1c2goUC5fJCksSD1nW2ZbZi5sZW5ndGgtMl1dW2ZbZi5sZW5ndGgtMV1dLGYucHVzaChIKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfSwicGFyc2UiKX0sYT1mdW5jdGlvbigpe3ZhciBsPXtFT0Y6MSxwYXJzZUVycm9yOm8oZnVuY3Rpb24oaCxmKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKGgsZik7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoaCl9LCJwYXJzZUVycm9yIiksc2V0SW5wdXQ6byhmdW5jdGlvbih1LGgpe3JldHVybiB0aGlzLnl5PWh8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXUsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LCJzZXRJbnB1dCIpLGlucHV0Om8oZnVuY3Rpb24oKXt2YXIgdT10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9dSx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9dSx0aGlzLm1hdGNoZWQrPXU7dmFyIGg9dS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIGg/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLHV9LCJpbnB1dCIpLHVucHV0Om8oZnVuY3Rpb24odSl7dmFyIGg9dS5sZW5ndGgsZj11LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9dSt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtaCksdGhpcy5vZmZzZXQtPWg7dmFyIGQ9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksZi5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPWYubGVuZ3RoLTEpO3ZhciBwPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpmPyhmLmxlbmd0aD09PWQubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStkW2QubGVuZ3RoLWYubGVuZ3RoXS5sZW5ndGgtZlswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWh9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bcFswXSxwWzBdK3RoaXMueXlsZW5nLWhdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sInVucHV0IiksbW9yZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30sIm1vcmUiKSxyZWplY3Q6byhmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sInJlamVjdCIpLGxlc3M6byhmdW5jdGlvbih1KXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UodSkpfSwibGVzcyIpLHBhc3RJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIHU9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybih1Lmxlbmd0aD4yMD8iLi4uIjoiIikrdS5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sInBhc3RJbnB1dCIpLHVwY29taW5nSW5wdXQ6byhmdW5jdGlvbigpe3ZhciB1PXRoaXMubWF0Y2g7cmV0dXJuIHUubGVuZ3RoPDIwJiYodSs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtdS5sZW5ndGgpKSwodS5zdWJzdHIoMCwyMCkrKHUubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LCJ1cGNvbWluZ0lucHV0Iiksc2hvd1Bvc2l0aW9uOm8oZnVuY3Rpb24oKXt2YXIgdT10aGlzLnBhc3RJbnB1dCgpLGg9bmV3IEFycmF5KHUubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gdSt0aGlzLnVwY29taW5nSW5wdXQoKStgCmAraCsiXiJ9LCJzaG93UG9zaXRpb24iKSx0ZXN0X21hdGNoOm8oZnVuY3Rpb24odSxoKXt2YXIgZixkLHA7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKHA9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYocC55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxkPXVbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLGQmJih0aGlzLnl5bGluZW5vKz1kLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOmQ/ZFtkLmxlbmd0aC0xXS5sZW5ndGgtZFtkLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK3VbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9dVswXSx0aGlzLm1hdGNoKz11WzBdLHRoaXMubWF0Y2hlcz11LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKHVbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPXVbMF0sZj10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxoLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLGYpcmV0dXJuIGY7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIG0gaW4gcCl0aGlzW21dPXBbbV07cmV0dXJuITF9cmV0dXJuITF9LCJ0ZXN0X21hdGNoIiksbmV4dDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIHUsaCxmLGQ7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgcD10aGlzLl9jdXJyZW50UnVsZXMoKSxtPTA7bTxwLmxlbmd0aDttKyspaWYoZj10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW3BbbV1dKSxmJiYoIWh8fGZbMF0ubGVuZ3RoPmhbMF0ubGVuZ3RoKSl7aWYoaD1mLGQ9bSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZih1PXRoaXMudGVzdF9tYXRjaChmLHBbbV0pLHUhPT0hMSlyZXR1cm4gdTtpZih0aGlzLl9iYWNrdHJhY2spe2g9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gaD8odT10aGlzLnRlc3RfbWF0Y2goaCxwW2RdKSx1IT09ITE/dTohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sIm5leHQiKSxsZXg6byhmdW5jdGlvbigpe3ZhciBoPXRoaXMubmV4dCgpO3JldHVybiBofHx0aGlzLmxleCgpfSwibGV4IiksYmVnaW46byhmdW5jdGlvbihoKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goaCl9LCJiZWdpbiIpLHBvcFN0YXRlOm8oZnVuY3Rpb24oKXt2YXIgaD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBoPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSwicG9wU3RhdGUiKSxfY3VycmVudFJ1bGVzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSwiX2N1cnJlbnRSdWxlcyIpLHRvcFN0YXRlOm8oZnVuY3Rpb24oaCl7cmV0dXJuIGg9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhofHwwKSxoPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbaF06IklOSVRJQUwifSwidG9wU3RhdGUiKSxwdXNoU3RhdGU6byhmdW5jdGlvbihoKXt0aGlzLmJlZ2luKGgpfSwicHVzaFN0YXRlIiksc3RhdGVTdGFja1NpemU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sInN0YXRlU3RhY2tTaXplIiksb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24oaCxmLGQscCl7dmFyIG09cDtzd2l0Y2goZCl7Y2FzZSAwOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiY3N2IiksNDticmVhaztjYXNlIDE6cmV0dXJuIDEwO2Nhc2UgMjpyZXR1cm4gNTtjYXNlIDM6cmV0dXJuIDEyO2Nhc2UgNDpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImVzY2FwZWRfdGV4dCIpLDE4O2JyZWFrO2Nhc2UgNTpyZXR1cm4gMjA7Y2FzZSA2OnJldHVybiB0aGlzLnBvcFN0YXRlKCJlc2NhcGVkX3RleHQiKSwxODticmVhaztjYXNlIDc6cmV0dXJuIDE5fX0sImFub255bW91cyIpLHJ1bGVzOlsvXig/OnNhbmtleS1iZXRhXGIpL2ksL14oPzokKS9pLC9eKD86KChcdTAwMERcdTAwMEEpfChcdTAwMEEpKSkvaSwvXig/OihcdTAwMkMpKS9pLC9eKD86KFx1MDAyMikpL2ksL14oPzooW1x1MDAyMC1cdTAwMjFcdTAwMjMtXHUwMDJCXHUwMDJELVx1MDA3RV0pKikvaSwvXig/OihcdTAwMjIpKD8hKFx1MDAyMikpKS9pLC9eKD86KChbXHUwMDIwLVx1MDAyMVx1MDAyMy1cdTAwMkJcdTAwMkQtXHUwMDdFXSl8KFx1MDAyQyl8KFx1MDAwRCl8KFx1MDAwQSl8KFx1MDAyMikoXHUwMDIyKSkqKS9pXSxjb25kaXRpb25zOntjc3Y6e3J1bGVzOlsxLDIsMyw0LDUsNiw3XSxpbmNsdXNpdmU6ITF9LGVzY2FwZWRfdGV4dDp7cnVsZXM6WzYsN10saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDIsMyw0LDUsNiw3XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIGx9KCk7aS5sZXhlcj1hO2Z1bmN0aW9uIHMoKXt0aGlzLnl5PXt9fXJldHVybiBvKHMsIlBhcnNlciIpLHMucHJvdG90eXBlPWksaS5QYXJzZXI9cyxuZXcgc30oKTtNQi5wYXJzZXI9TUI7ZDQ9TUJ9KTt2YXIgWFMsalMsWVMsTEplLElCLFJKZSxPQixOSmUsTUplLElKZSxPSmUsZzFlLHkxZT1OKCgpPT57InVzZSBzdHJpY3QiO3p0KCk7Z3IoKTttaSgpO1hTPVtdLGpTPVtdLFlTPW5ldyBNYXAsTEplPW8oKCk9PntYUz1bXSxqUz1bXSxZUz1uZXcgTWFwLEFyKCl9LCJjbGVhciIpLElCPWNsYXNze2NvbnN0cnVjdG9yKGUscixuPTApe3RoaXMuc291cmNlPWU7dGhpcy50YXJnZXQ9cjt0aGlzLnZhbHVlPW59c3RhdGlje28odGhpcywiU2Fua2V5TGluayIpfX0sUkplPW8oKHQsZSxyKT0+e1hTLnB1c2gobmV3IElCKHQsZSxyKSl9LCJhZGRMaW5rIiksT0I9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5JRD1lfXN0YXRpY3tvKHRoaXMsIlNhbmtleU5vZGUiKX19LE5KZT1vKHQ9Pnt0PVplLnNhbml0aXplVGV4dCh0LG1lKCkpO2xldCBlPVlTLmdldCh0KTtyZXR1cm4gZT09PXZvaWQgMCYmKGU9bmV3IE9CKHQpLFlTLnNldCh0LGUpLGpTLnB1c2goZSkpLGV9LCJmaW5kT3JDcmVhdGVOb2RlIiksTUplPW8oKCk9PmpTLCJnZXROb2RlcyIpLElKZT1vKCgpPT5YUywiZ2V0TGlua3MiKSxPSmU9bygoKT0+KHtub2RlczpqUy5tYXAodD0+KHtpZDp0LklEfSkpLGxpbmtzOlhTLm1hcCh0PT4oe3NvdXJjZTp0LnNvdXJjZS5JRCx0YXJnZXQ6dC50YXJnZXQuSUQsdmFsdWU6dC52YWx1ZX0pKX0pLCJnZXRHcmFwaCIpLGcxZT17bm9kZXNNYXA6WVMsZ2V0Q29uZmlnOm8oKCk9Pm1lKCkuc2Fua2V5LCJnZXRDb25maWciKSxnZXROb2RlczpNSmUsZ2V0TGlua3M6SUplLGdldEdyYXBoOk9KZSxhZGRMaW5rOlJKZSxmaW5kT3JDcmVhdGVOb2RlOk5KZSxnZXRBY2NUaXRsZTpScixzZXRBY2NUaXRsZTpMcixnZXRBY2NEZXNjcmlwdGlvbjpNcixzZXRBY2NEZXNjcmlwdGlvbjpOcixnZXREaWFncmFtVGl0bGU6SXIsc2V0RGlhZ3JhbVRpdGxlOiRyLGNsZWFyOkxKZX19KTtmdW5jdGlvbiBwNCh0LGUpe2xldCByO2lmKGU9PT12b2lkIDApZm9yKGxldCBuIG9mIHQpbiE9bnVsbCYmKHI8bnx8cj09PXZvaWQgMCYmbj49bikmJihyPW4pO2Vsc2V7bGV0IG49LTE7Zm9yKGxldCBpIG9mIHQpKGk9ZShpLCsrbix0KSkhPW51bGwmJihyPGl8fHI9PT12b2lkIDAmJmk+PWkpJiYocj1pKX1yZXR1cm4gcn12YXIgdjFlPU4oKCk9PnsidXNlIHN0cmljdCI7byhwNCwibWF4Iil9KTtmdW5jdGlvbiBjeSh0LGUpe2xldCByO2lmKGU9PT12b2lkIDApZm9yKGxldCBuIG9mIHQpbiE9bnVsbCYmKHI+bnx8cj09PXZvaWQgMCYmbj49bikmJihyPW4pO2Vsc2V7bGV0IG49LTE7Zm9yKGxldCBpIG9mIHQpKGk9ZShpLCsrbix0KSkhPW51bGwmJihyPml8fHI9PT12b2lkIDAmJmk+PWkpJiYocj1pKX1yZXR1cm4gcn12YXIgeDFlPU4oKCk9PnsidXNlIHN0cmljdCI7byhjeSwibWluIil9KTtmdW5jdGlvbiB1eSh0LGUpe2xldCByPTA7aWYoZT09PXZvaWQgMClmb3IobGV0IG4gb2YgdCkobj0rbikmJihyKz1uKTtlbHNle2xldCBuPS0xO2ZvcihsZXQgaSBvZiB0KShpPStlKGksKytuLHQpKSYmKHIrPWkpfXJldHVybiByfXZhciBiMWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKHV5LCJzdW0iKX0pO3ZhciBQQj1OKCgpPT57InVzZSBzdHJpY3QiO3YxZSgpO3gxZSgpO2IxZSgpfSk7ZnVuY3Rpb24gUEplKHQpe3JldHVybiB0LnRhcmdldC5kZXB0aH1mdW5jdGlvbiBCQih0KXtyZXR1cm4gdC5kZXB0aH1mdW5jdGlvbiBGQih0LGUpe3JldHVybiBlLTEtdC5oZWlnaHR9ZnVuY3Rpb24gbTQodCxlKXtyZXR1cm4gdC5zb3VyY2VMaW5rcy5sZW5ndGg/dC5kZXB0aDplLTF9ZnVuY3Rpb24gJEIodCl7cmV0dXJuIHQudGFyZ2V0TGlua3MubGVuZ3RoP3QuZGVwdGg6dC5zb3VyY2VMaW5rcy5sZW5ndGg/Y3kodC5zb3VyY2VMaW5rcyxQSmUpLTE6MH12YXIgekI9TigoKT0+eyJ1c2Ugc3RyaWN0IjtQQigpO28oUEplLCJ0YXJnZXREZXB0aCIpO28oQkIsImxlZnQiKTtvKEZCLCJyaWdodCIpO28obTQsImp1c3RpZnkiKTtvKCRCLCJjZW50ZXIiKX0pO2Z1bmN0aW9uIGh5KHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX12YXIgdzFlPU4oKCk9PnsidXNlIHN0cmljdCI7byhoeSwiY29uc3RhbnQiKX0pO2Z1bmN0aW9uIFQxZSh0LGUpe3JldHVybiBLUyh0LnNvdXJjZSxlLnNvdXJjZSl8fHQuaW5kZXgtZS5pbmRleH1mdW5jdGlvbiBrMWUodCxlKXtyZXR1cm4gS1ModC50YXJnZXQsZS50YXJnZXQpfHx0LmluZGV4LWUuaW5kZXh9ZnVuY3Rpb24gS1ModCxlKXtyZXR1cm4gdC55MC1lLnkwfWZ1bmN0aW9uIEdCKHQpe3JldHVybiB0LnZhbHVlfWZ1bmN0aW9uIEJKZSh0KXtyZXR1cm4gdC5pbmRleH1mdW5jdGlvbiBGSmUodCl7cmV0dXJuIHQubm9kZXN9ZnVuY3Rpb24gJEplKHQpe3JldHVybiB0LmxpbmtzfWZ1bmN0aW9uIEUxZSh0LGUpe2xldCByPXQuZ2V0KGUpO2lmKCFyKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIitlKTtyZXR1cm4gcn1mdW5jdGlvbiBTMWUoe25vZGVzOnR9KXtmb3IobGV0IGUgb2YgdCl7bGV0IHI9ZS55MCxuPXI7Zm9yKGxldCBpIG9mIGUuc291cmNlTGlua3MpaS55MD1yK2kud2lkdGgvMixyKz1pLndpZHRoO2ZvcihsZXQgaSBvZiBlLnRhcmdldExpbmtzKWkueTE9bitpLndpZHRoLzIsbis9aS53aWR0aH19ZnVuY3Rpb24gUVMoKXtsZXQgdD0wLGU9MCxyPTEsbj0xLGk9MjQsYT04LHMsbD1CSmUsdT1tNCxoLGYsZD1GSmUscD0kSmUsbT02O2Z1bmN0aW9uIGcoKXtsZXQgTz17bm9kZXM6ZC5hcHBseShudWxsLGFyZ3VtZW50cyksbGlua3M6cC5hcHBseShudWxsLGFyZ3VtZW50cyl9O3JldHVybiB5KE8pLHYoTykseChPKSxiKE8pLFQoTyksUzFlKE8pLE99byhnLCJzYW5rZXkiKSxnLnVwZGF0ZT1mdW5jdGlvbihPKXtyZXR1cm4gUzFlKE8pLE99LGcubm9kZUlkPWZ1bmN0aW9uKE8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPXR5cGVvZiBPPT0iZnVuY3Rpb24iP086aHkoTyksZyk6bH0sZy5ub2RlQWxpZ249ZnVuY3Rpb24oTyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dHlwZW9mIE89PSJmdW5jdGlvbiI/TzpoeShPKSxnKTp1fSxnLm5vZGVTb3J0PWZ1bmN0aW9uKE8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPU8sZyk6aH0sZy5ub2RlV2lkdGg9ZnVuY3Rpb24oTyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K08sZyk6aX0sZy5ub2RlUGFkZGluZz1mdW5jdGlvbihPKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1zPStPLGcpOmF9LGcubm9kZXM9ZnVuY3Rpb24oTyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9dHlwZW9mIE89PSJmdW5jdGlvbiI/TzpoeShPKSxnKTpkfSxnLmxpbmtzPWZ1bmN0aW9uKE8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPXR5cGVvZiBPPT0iZnVuY3Rpb24iP086aHkoTyksZyk6cH0sZy5saW5rU29ydD1mdW5jdGlvbihPKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1PLGcpOmZ9LGcuc2l6ZT1mdW5jdGlvbihPKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lPTAscj0rT1swXSxuPStPWzFdLGcpOltyLXQsbi1lXX0sZy5leHRlbnQ9ZnVuY3Rpb24oTyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K09bMF1bMF0scj0rT1sxXVswXSxlPStPWzBdWzFdLG49K09bMV1bMV0sZyk6W1t0LGVdLFtyLG5dXX0sZy5pdGVyYXRpb25zPWZ1bmN0aW9uKE8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPStPLGcpOm19O2Z1bmN0aW9uIHkoe25vZGVzOk8sbGlua3M6TX0pe2ZvcihsZXRbRixQXW9mIE8uZW50cmllcygpKVAuaW5kZXg9RixQLnNvdXJjZUxpbmtzPVtdLFAudGFyZ2V0TGlua3M9W107bGV0IEI9bmV3IE1hcChPLm1hcCgoRixQKT0+W2woRixQLE8pLEZdKSk7Zm9yKGxldFtGLFBdb2YgTS5lbnRyaWVzKCkpe1AuaW5kZXg9RjtsZXR7c291cmNlOnosdGFyZ2V0OiR9PVA7dHlwZW9mIHohPSJvYmplY3QiJiYoej1QLnNvdXJjZT1FMWUoQix6KSksdHlwZW9mICQhPSJvYmplY3QiJiYoJD1QLnRhcmdldD1FMWUoQiwkKSksei5zb3VyY2VMaW5rcy5wdXNoKFApLCQudGFyZ2V0TGlua3MucHVzaChQKX1pZihmIT1udWxsKWZvcihsZXR7c291cmNlTGlua3M6Rix0YXJnZXRMaW5rczpQfW9mIE8pRi5zb3J0KGYpLFAuc29ydChmKX1vKHksImNvbXB1dGVOb2RlTGlua3MiKTtmdW5jdGlvbiB2KHtub2RlczpPfSl7Zm9yKGxldCBNIG9mIE8pTS52YWx1ZT1NLmZpeGVkVmFsdWU9PT12b2lkIDA/TWF0aC5tYXgodXkoTS5zb3VyY2VMaW5rcyxHQiksdXkoTS50YXJnZXRMaW5rcyxHQikpOk0uZml4ZWRWYWx1ZX1vKHYsImNvbXB1dGVOb2RlVmFsdWVzIik7ZnVuY3Rpb24geCh7bm9kZXM6T30pe2xldCBNPU8ubGVuZ3RoLEI9bmV3IFNldChPKSxGPW5ldyBTZXQsUD0wO2Zvcig7Qi5zaXplOyl7Zm9yKGxldCB6IG9mIEIpe3ouZGVwdGg9UDtmb3IobGV0e3RhcmdldDokfW9mIHouc291cmNlTGlua3MpRi5hZGQoJCl9aWYoKytQPk0pdGhyb3cgbmV3IEVycm9yKCJjaXJjdWxhciBsaW5rIik7Qj1GLEY9bmV3IFNldH19byh4LCJjb21wdXRlTm9kZURlcHRocyIpO2Z1bmN0aW9uIGIoe25vZGVzOk99KXtsZXQgTT1PLmxlbmd0aCxCPW5ldyBTZXQoTyksRj1uZXcgU2V0LFA9MDtmb3IoO0Iuc2l6ZTspe2ZvcihsZXQgeiBvZiBCKXt6LmhlaWdodD1QO2ZvcihsZXR7c291cmNlOiR9b2Ygei50YXJnZXRMaW5rcylGLmFkZCgkKX1pZigrK1A+TSl0aHJvdyBuZXcgRXJyb3IoImNpcmN1bGFyIGxpbmsiKTtCPUYsRj1uZXcgU2V0fX1vKGIsImNvbXB1dGVOb2RlSGVpZ2h0cyIpO2Z1bmN0aW9uIHcoe25vZGVzOk99KXtsZXQgTT1wNChPLFA9PlAuZGVwdGgpKzEsQj0oci10LWkpLyhNLTEpLEY9bmV3IEFycmF5KE0pO2ZvcihsZXQgUCBvZiBPKXtsZXQgej1NYXRoLm1heCgwLE1hdGgubWluKE0tMSxNYXRoLmZsb29yKHUuY2FsbChudWxsLFAsTSkpKSk7UC5sYXllcj16LFAueDA9dCt6KkIsUC54MT1QLngwK2ksRlt6XT9GW3pdLnB1c2goUCk6Rlt6XT1bUF19aWYoaClmb3IobGV0IFAgb2YgRilQLnNvcnQoaCk7cmV0dXJuIEZ9byh3LCJjb21wdXRlTm9kZUxheWVycyIpO2Z1bmN0aW9uIEMoTyl7bGV0IE09Y3koTyxCPT4obi1lLShCLmxlbmd0aC0xKSpzKS91eShCLEdCKSk7Zm9yKGxldCBCIG9mIE8pe2xldCBGPWU7Zm9yKGxldCBQIG9mIEIpe1AueTA9RixQLnkxPUYrUC52YWx1ZSpNLEY9UC55MStzO2ZvcihsZXQgeiBvZiBQLnNvdXJjZUxpbmtzKXoud2lkdGg9ei52YWx1ZSpNfUY9KG4tRitzKS8oQi5sZW5ndGgrMSk7Zm9yKGxldCBQPTA7UDxCLmxlbmd0aDsrK1Ape2xldCB6PUJbUF07ei55MCs9RiooUCsxKSx6LnkxKz1GKihQKzEpfWsoQil9fW8oQywiaW5pdGlhbGl6ZU5vZGVCcmVhZHRocyIpO2Z1bmN0aW9uIFQoTyl7bGV0IE09dyhPKTtzPU1hdGgubWluKGEsKG4tZSkvKHA0KE0sQj0+Qi5sZW5ndGgpLTEpKSxDKE0pO2ZvcihsZXQgQj0wO0I8bTsrK0Ipe2xldCBGPU1hdGgucG93KC45OSxCKSxQPU1hdGgubWF4KDEtRiwoQisxKS9tKTtBKE0sRixQKSxFKE0sRixQKX19byhULCJjb21wdXRlTm9kZUJyZWFkdGhzIik7ZnVuY3Rpb24gRShPLE0sQil7Zm9yKGxldCBGPTEsUD1PLmxlbmd0aDtGPFA7KytGKXtsZXQgej1PW0ZdO2ZvcihsZXQgJCBvZiB6KXtsZXQgSD0wLFE9MDtmb3IobGV0e3NvdXJjZTppZSx2YWx1ZTpuZX1vZiAkLnRhcmdldExpbmtzKXtsZXQgbGU9bmUqKCQubGF5ZXItaWUubGF5ZXIpO0grPUwoaWUsJCkqbGUsUSs9bGV9aWYoIShRPjApKWNvbnRpbnVlO2xldCBqPShIL1EtJC55MCkqTTskLnkwKz1qLCQueTErPWosRCgkKX1oPT09dm9pZCAwJiZ6LnNvcnQoS1MpLFMoeixCKX19byhFLCJyZWxheExlZnRUb1JpZ2h0Iik7ZnVuY3Rpb24gQShPLE0sQil7Zm9yKGxldCBGPU8ubGVuZ3RoLFA9Ri0yO1A+PTA7LS1QKXtsZXQgej1PW1BdO2ZvcihsZXQgJCBvZiB6KXtsZXQgSD0wLFE9MDtmb3IobGV0e3RhcmdldDppZSx2YWx1ZTpuZX1vZiAkLnNvdXJjZUxpbmtzKXtsZXQgbGU9bmUqKGllLmxheWVyLSQubGF5ZXIpO0grPVIoJCxpZSkqbGUsUSs9bGV9aWYoIShRPjApKWNvbnRpbnVlO2xldCBqPShIL1EtJC55MCkqTTskLnkwKz1qLCQueTErPWosRCgkKX1oPT09dm9pZCAwJiZ6LnNvcnQoS1MpLFMoeixCKX19byhBLCJyZWxheFJpZ2h0VG9MZWZ0Iik7ZnVuY3Rpb24gUyhPLE0pe2xldCBCPU8ubGVuZ3RoPj4xLEY9T1tCXTtJKE8sRi55MC1zLEItMSxNKSxfKE8sRi55MStzLEIrMSxNKSxJKE8sbixPLmxlbmd0aC0xLE0pLF8oTyxlLDAsTSl9byhTLCJyZXNvbHZlQ29sbGlzaW9ucyIpO2Z1bmN0aW9uIF8oTyxNLEIsRil7Zm9yKDtCPE8ubGVuZ3RoOysrQil7bGV0IFA9T1tCXSx6PShNLVAueTApKkY7ej4xZS02JiYoUC55MCs9eixQLnkxKz16KSxNPVAueTErc319byhfLCJyZXNvbHZlQ29sbGlzaW9uc1RvcFRvQm90dG9tIik7ZnVuY3Rpb24gSShPLE0sQixGKXtmb3IoO0I+PTA7LS1CKXtsZXQgUD1PW0JdLHo9KFAueTEtTSkqRjt6PjFlLTYmJihQLnkwLT16LFAueTEtPXopLE09UC55MC1zfX1vKEksInJlc29sdmVDb2xsaXNpb25zQm90dG9tVG9Ub3AiKTtmdW5jdGlvbiBEKHtzb3VyY2VMaW5rczpPLHRhcmdldExpbmtzOk19KXtpZihmPT09dm9pZCAwKXtmb3IobGV0e3NvdXJjZTp7c291cmNlTGlua3M6Qn19b2YgTSlCLnNvcnQoazFlKTtmb3IobGV0e3RhcmdldDp7dGFyZ2V0TGlua3M6Qn19b2YgTylCLnNvcnQoVDFlKX19byhELCJyZW9yZGVyTm9kZUxpbmtzIik7ZnVuY3Rpb24gayhPKXtpZihmPT09dm9pZCAwKWZvcihsZXR7c291cmNlTGlua3M6TSx0YXJnZXRMaW5rczpCfW9mIE8pTS5zb3J0KGsxZSksQi5zb3J0KFQxZSl9byhrLCJyZW9yZGVyTGlua3MiKTtmdW5jdGlvbiBMKE8sTSl7bGV0IEI9Ty55MC0oTy5zb3VyY2VMaW5rcy5sZW5ndGgtMSkqcy8yO2ZvcihsZXR7dGFyZ2V0OkYsd2lkdGg6UH1vZiBPLnNvdXJjZUxpbmtzKXtpZihGPT09TSlicmVhaztCKz1QK3N9Zm9yKGxldHtzb3VyY2U6Rix3aWR0aDpQfW9mIE0udGFyZ2V0TGlua3Mpe2lmKEY9PT1PKWJyZWFrO0ItPVB9cmV0dXJuIEJ9byhMLCJ0YXJnZXRUb3AiKTtmdW5jdGlvbiBSKE8sTSl7bGV0IEI9TS55MC0oTS50YXJnZXRMaW5rcy5sZW5ndGgtMSkqcy8yO2ZvcihsZXR7c291cmNlOkYsd2lkdGg6UH1vZiBNLnRhcmdldExpbmtzKXtpZihGPT09TylicmVhaztCKz1QK3N9Zm9yKGxldHt0YXJnZXQ6Rix3aWR0aDpQfW9mIE8uc291cmNlTGlua3Mpe2lmKEY9PT1NKWJyZWFrO0ItPVB9cmV0dXJuIEJ9cmV0dXJuIG8oUiwic291cmNlVG9wIiksZ312YXIgQzFlPU4oKCk9PnsidXNlIHN0cmljdCI7UEIoKTt6QigpO3cxZSgpO28oVDFlLCJhc2NlbmRpbmdTb3VyY2VCcmVhZHRoIik7byhrMWUsImFzY2VuZGluZ1RhcmdldEJyZWFkdGgiKTtvKEtTLCJhc2NlbmRpbmdCcmVhZHRoIik7byhHQiwidmFsdWUiKTtvKEJKZSwiZGVmYXVsdElkIik7byhGSmUsImRlZmF1bHROb2RlcyIpO28oJEplLCJkZWZhdWx0TGlua3MiKTtvKEUxZSwiZmluZCIpO28oUzFlLCJjb21wdXRlTGlua0JyZWFkdGhzIik7byhRUywiU2Fua2V5Iil9KTtmdW5jdGlvbiBIQigpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIifWZ1bmN0aW9uIEExZSgpe3JldHVybiBuZXcgSEJ9dmFyIFZCLFVCLFhwLHpKZSxXQixfMWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtWQj1NYXRoLlBJLFVCPTIqVkIsWHA9MWUtNix6SmU9VUItWHA7byhIQiwiUGF0aCIpO28oQTFlLCJwYXRoIik7SEIucHJvdG90eXBlPUExZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkhCLG1vdmVUbzpvKGZ1bmN0aW9uKHQsZSl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStlKX0sIm1vdmVUbyIpLGNsb3NlUGF0aDpvKGZ1bmN0aW9uKCl7dGhpcy5feDEhPT1udWxsJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fKz0iWiIpfSwiY2xvc2VQYXRoIiksbGluZVRvOm8oZnVuY3Rpb24odCxlKXt0aGlzLl8rPSJMIisodGhpcy5feDE9K3QpKyIsIisodGhpcy5feTE9K2UpfSwibGluZVRvIikscXVhZHJhdGljQ3VydmVUbzpvKGZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuXys9IlEiKyArdCsiLCIrICtlKyIsIisodGhpcy5feDE9K3IpKyIsIisodGhpcy5feTE9K24pfSwicXVhZHJhdGljQ3VydmVUbyIpLGJlemllckN1cnZlVG86byhmdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5fKz0iQyIrICt0KyIsIisgK2UrIiwiKyArcisiLCIrICtuKyIsIisodGhpcy5feDE9K2kpKyIsIisodGhpcy5feTE9K2EpfSwiYmV6aWVyQ3VydmVUbyIpLGFyY1RvOm8oZnVuY3Rpb24odCxlLHIsbixpKXt0PSt0LGU9K2Uscj0rcixuPStuLGk9K2k7dmFyIGE9dGhpcy5feDEscz10aGlzLl95MSxsPXItdCx1PW4tZSxoPWEtdCxmPXMtZSxkPWgqaCtmKmY7aWYoaTwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK2kpO2lmKHRoaXMuX3gxPT09bnVsbCl0aGlzLl8rPSJNIisodGhpcy5feDE9dCkrIiwiKyh0aGlzLl95MT1lKTtlbHNlIGlmKGQ+WHApaWYoIShNYXRoLmFicyhmKmwtdSpoKT5YcCl8fCFpKXRoaXMuXys9IkwiKyh0aGlzLl94MT10KSsiLCIrKHRoaXMuX3kxPWUpO2Vsc2V7dmFyIHA9ci1hLG09bi1zLGc9bCpsK3UqdSx5PXAqcCttKm0sdj1NYXRoLnNxcnQoZykseD1NYXRoLnNxcnQoZCksYj1pKk1hdGgudGFuKChWQi1NYXRoLmFjb3MoKGcrZC15KS8oMip2KngpKSkvMiksdz1iL3gsQz1iL3Y7TWF0aC5hYnMody0xKT5YcCYmKHRoaXMuXys9IkwiKyh0K3cqaCkrIiwiKyhlK3cqZikpLHRoaXMuXys9IkEiK2krIiwiK2krIiwwLDAsIisgKyhmKnA+aCptKSsiLCIrKHRoaXMuX3gxPXQrQypsKSsiLCIrKHRoaXMuX3kxPWUrQyp1KX19LCJhcmNUbyIpLGFyYzpvKGZ1bmN0aW9uKHQsZSxyLG4saSxhKXt0PSt0LGU9K2Uscj0rcixhPSEhYTt2YXIgcz1yKk1hdGguY29zKG4pLGw9cipNYXRoLnNpbihuKSx1PXQrcyxoPWUrbCxmPTFeYSxkPWE/bi1pOmktbjtpZihyPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrcik7dGhpcy5feDE9PT1udWxsP3RoaXMuXys9Ik0iK3UrIiwiK2g6KE1hdGguYWJzKHRoaXMuX3gxLXUpPlhwfHxNYXRoLmFicyh0aGlzLl95MS1oKT5YcCkmJih0aGlzLl8rPSJMIit1KyIsIitoKSxyJiYoZDwwJiYoZD1kJVVCK1VCKSxkPnpKZT90aGlzLl8rPSJBIityKyIsIityKyIsMCwxLCIrZisiLCIrKHQtcykrIiwiKyhlLWwpKyJBIityKyIsIityKyIsMCwxLCIrZisiLCIrKHRoaXMuX3gxPXUpKyIsIisodGhpcy5feTE9aCk6ZD5YcCYmKHRoaXMuXys9IkEiK3IrIiwiK3IrIiwwLCIrICsoZD49VkIpKyIsIitmKyIsIisodGhpcy5feDE9dCtyKk1hdGguY29zKGkpKSsiLCIrKHRoaXMuX3kxPWUrcipNYXRoLnNpbihpKSkpKX0sImFyYyIpLHJlY3Q6byhmdW5jdGlvbih0LGUscixuKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K3QpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K2UpKyJoIisgK3IrInYiKyArbisiaCIrLXIrIloifSwicmVjdCIpLHRvU3RyaW5nOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffSwidG9TdHJpbmciKX07V0I9QTFlfSk7dmFyIEQxZT1OKCgpPT57InVzZSBzdHJpY3QiO18xZSgpfSk7ZnVuY3Rpb24gWlModCl7cmV0dXJuIG8oZnVuY3Rpb24oKXtyZXR1cm4gdH0sImNvbnN0YW50Iil9dmFyIEwxZT1OKCgpPT57InVzZSBzdHJpY3QiO28oWlMsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIFIxZSh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiBOMWUodCl7cmV0dXJuIHRbMV19dmFyIE0xZT1OKCgpPT57InVzZSBzdHJpY3QiO28oUjFlLCJ4Iik7byhOMWUsInkiKX0pO3ZhciBJMWUsTzFlPU4oKCk9PnsidXNlIHN0cmljdCI7STFlPUFycmF5LnByb3RvdHlwZS5zbGljZX0pO2Z1bmN0aW9uIEdKZSh0KXtyZXR1cm4gdC5zb3VyY2V9ZnVuY3Rpb24gVkplKHQpe3JldHVybiB0LnRhcmdldH1mdW5jdGlvbiBVSmUodCl7dmFyIGU9R0plLHI9VkplLG49UjFlLGk9TjFlLGE9bnVsbDtmdW5jdGlvbiBzKCl7dmFyIGwsdT1JMWUuY2FsbChhcmd1bWVudHMpLGg9ZS5hcHBseSh0aGlzLHUpLGY9ci5hcHBseSh0aGlzLHUpO2lmKGF8fChhPWw9V0IoKSksdChhLCtuLmFwcGx5KHRoaXMsKHVbMF09aCx1KSksK2kuYXBwbHkodGhpcyx1KSwrbi5hcHBseSh0aGlzLCh1WzBdPWYsdSkpLCtpLmFwcGx5KHRoaXMsdSkpLGwpcmV0dXJuIGE9bnVsbCxsKyIifHxudWxsfXJldHVybiBvKHMsImxpbmsiKSxzLnNvdXJjZT1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1sLHMpOmV9LHMudGFyZ2V0PWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWwscyk6cn0scy54PWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBsPT0iZnVuY3Rpb24iP2w6WlMoK2wpLHMpOm59LHMueT1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2YgbD09ImZ1bmN0aW9uIj9sOlpTKCtsKSxzKTppfSxzLmNvbnRleHQ9ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9bD8/bnVsbCxzKTphfSxzfWZ1bmN0aW9uIEhKZSh0LGUscixuLGkpe3QubW92ZVRvKGUsciksdC5iZXppZXJDdXJ2ZVRvKGU9KGUrbikvMixyLGUsaSxuLGkpfWZ1bmN0aW9uIHFCKCl7cmV0dXJuIFVKZShISmUpfXZhciBQMWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtEMWUoKTtPMWUoKTtMMWUoKTtNMWUoKTtvKEdKZSwibGlua1NvdXJjZSIpO28oVkplLCJsaW5rVGFyZ2V0Iik7byhVSmUsImxpbmsiKTtvKEhKZSwiY3VydmVIb3Jpem9udGFsIik7byhxQiwibGlua0hvcml6b250YWwiKX0pO3ZhciBCMWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtQMWUoKX0pO2Z1bmN0aW9uIFdKZSh0KXtyZXR1cm5bdC5zb3VyY2UueDEsdC55MF19ZnVuY3Rpb24gcUplKHQpe3JldHVyblt0LnRhcmdldC54MCx0LnkxXX1mdW5jdGlvbiBKUygpe3JldHVybiBxQigpLnNvdXJjZShXSmUpLnRhcmdldChxSmUpfXZhciBGMWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtCMWUoKTtvKFdKZSwiaG9yaXpvbnRhbFNvdXJjZSIpO28ocUplLCJob3Jpem9udGFsVGFyZ2V0Iik7byhKUywiZGVmYXVsdCIpfSk7dmFyICQxZT1OKCgpPT57InVzZSBzdHJpY3QiO0MxZSgpO3pCKCk7RjFlKCl9KTt2YXIgZzQsejFlPU4oKCk9PnsidXNlIHN0cmljdCI7ZzQ9Y2xhc3MgdHtzdGF0aWN7byh0aGlzLCJVaWQiKX1zdGF0aWN7dGhpcy5jb3VudD0wfXN0YXRpYyBuZXh0KGUpe3JldHVybiBuZXcgdChlKyArK3QuY291bnQpfWNvbnN0cnVjdG9yKGUpe3RoaXMuaWQ9ZSx0aGlzLmhyZWY9YCMke2V9YH10b1N0cmluZygpe3JldHVybiJ1cmwoIit0aGlzLmhyZWYrIikifX19KTt2YXIgWUplLFhKZSxHMWUsVjFlPU4oKCk9PnsidXNlIHN0cmljdCI7enQoKTtkcigpOyQxZSgpO0VpKCk7ejFlKCk7WUplPXtsZWZ0OkJCLHJpZ2h0OkZCLGNlbnRlcjokQixqdXN0aWZ5Om00fSxYSmU9byhmdW5jdGlvbih0LGUscixuKXtsZXR7c2VjdXJpdHlMZXZlbDppLHNhbmtleTphfT1tZSgpLHM9QTMuc2Fua2V5LGw7aT09PSJzYW5kYm94IiYmKGw9R2UoIiNpIitlKSk7bGV0IHU9aT09PSJzYW5kYm94Ij9HZShsLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpOkdlKCJib2R5IiksaD1pPT09InNhbmRib3giP3Uuc2VsZWN0KGBbaWQ9IiR7ZX0iXWApOkdlKGBbaWQ9IiR7ZX0iXWApLGY9YT8ud2lkdGg/P3Mud2lkdGgsZD1hPy5oZWlnaHQ/P3Mud2lkdGgscD1hPy51c2VNYXhXaWR0aD8/cy51c2VNYXhXaWR0aCxtPWE/Lm5vZGVBbGlnbm1lbnQ/P3Mubm9kZUFsaWdubWVudCxnPWE/LnByZWZpeD8/cy5wcmVmaXgseT1hPy5zdWZmaXg/P3Muc3VmZml4LHY9YT8uc2hvd1ZhbHVlcz8/cy5zaG93VmFsdWVzLHg9bi5kYi5nZXRHcmFwaCgpLGI9WUplW21dO1FTKCkubm9kZUlkKEk9PkkuaWQpLm5vZGVXaWR0aCgxMCkubm9kZVBhZGRpbmcoMTArKHY/MTU6MCkpLm5vZGVBbGlnbihiKS5leHRlbnQoW1swLDBdLFtmLGRdXSkoeCk7bGV0IFQ9Z3UoZTkpO2guYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJub2RlcyIpLnNlbGVjdEFsbCgiLm5vZGUiKS5kYXRhKHgubm9kZXMpLmpvaW4oImciKS5hdHRyKCJjbGFzcyIsIm5vZGUiKS5hdHRyKCJpZCIsST0+KEkudWlkPWc0Lm5leHQoIm5vZGUtIikpLmlkKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKEkpe3JldHVybiJ0cmFuc2xhdGUoIitJLngwKyIsIitJLnkwKyIpIn0pLmF0dHIoIngiLEk9PkkueDApLmF0dHIoInkiLEk9PkkueTApLmFwcGVuZCgicmVjdCIpLmF0dHIoImhlaWdodCIsST0+SS55MS1JLnkwKS5hdHRyKCJ3aWR0aCIsST0+SS54MS1JLngwKS5hdHRyKCJmaWxsIixJPT5UKEkuaWQpKTtsZXQgRT1vKCh7aWQ6SSx2YWx1ZTpEfSk9PnY/YCR7SX0KJHtnfSR7TWF0aC5yb3VuZChEKjEwMCkvMTAwfSR7eX1gOkksImdldFRleHQiKTtoLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZS1sYWJlbHMiKS5hdHRyKCJmb250LXNpemUiLDE0KS5zZWxlY3RBbGwoInRleHQiKS5kYXRhKHgubm9kZXMpLmpvaW4oInRleHQiKS5hdHRyKCJ4IixJPT5JLngwPGYvMj9JLngxKzY6SS54MC02KS5hdHRyKCJ5IixJPT4oSS55MStJLnkwKS8yKS5hdHRyKCJkeSIsYCR7dj8iMCI6IjAuMzUifWVtYCkuYXR0cigidGV4dC1hbmNob3IiLEk9PkkueDA8Zi8yPyJzdGFydCI6ImVuZCIpLnRleHQoRSk7bGV0IEE9aC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxpbmtzIikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsLjUpLnNlbGVjdEFsbCgiLmxpbmsiKS5kYXRhKHgubGlua3MpLmpvaW4oImciKS5hdHRyKCJjbGFzcyIsImxpbmsiKS5zdHlsZSgibWl4LWJsZW5kLW1vZGUiLCJtdWx0aXBseSIpLFM9YT8ubGlua0NvbG9yPz8iZ3JhZGllbnQiO2lmKFM9PT0iZ3JhZGllbnQiKXtsZXQgST1BLmFwcGVuZCgibGluZWFyR3JhZGllbnQiKS5hdHRyKCJpZCIsRD0+KEQudWlkPWc0Lm5leHQoImxpbmVhckdyYWRpZW50LSIpKS5pZCkuYXR0cigiZ3JhZGllbnRVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigieDEiLEQ9PkQuc291cmNlLngxKS5hdHRyKCJ4MiIsRD0+RC50YXJnZXQueDApO0kuYXBwZW5kKCJzdG9wIikuYXR0cigib2Zmc2V0IiwiMCUiKS5hdHRyKCJzdG9wLWNvbG9yIixEPT5UKEQuc291cmNlLmlkKSksSS5hcHBlbmQoInN0b3AiKS5hdHRyKCJvZmZzZXQiLCIxMDAlIikuYXR0cigic3RvcC1jb2xvciIsRD0+VChELnRhcmdldC5pZCkpfWxldCBfO3N3aXRjaChTKXtjYXNlImdyYWRpZW50IjpfPW8oST0+SS51aWQsImNvbG9yaW5nIik7YnJlYWs7Y2FzZSJzb3VyY2UiOl89byhJPT5UKEkuc291cmNlLmlkKSwiY29sb3JpbmciKTticmVhaztjYXNlInRhcmdldCI6Xz1vKEk9PlQoSS50YXJnZXQuaWQpLCJjb2xvcmluZyIpO2JyZWFrO2RlZmF1bHQ6Xz1TfUEuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsSlMoKSkuYXR0cigic3Ryb2tlIixfKS5hdHRyKCJzdHJva2Utd2lkdGgiLEk9Pk1hdGgubWF4KDEsSS53aWR0aCkpLEFvKHZvaWQgMCxoLDAscCl9LCJkcmF3IiksRzFlPXtkcmF3OlhKZX19KTt2YXIgVTFlLEgxZT1OKCgpPT57InVzZSBzdHJpY3QiO1UxZT1vKHQ9PnQucmVwbGFjZUFsbCgvXlteXFNcblxyXSt8W15cU1xuXHJdKyQvZywiIikucmVwbGFjZUFsbCgvKFtcblxyXSkrL2csYApgKS50cmltKCksInByZXBhcmVUZXh0Rm9yUGFyc2luZyIpfSk7dmFyIGpKZSxXMWUscTFlPU4oKCk9PnsidXNlIHN0cmljdCI7akplPW8odD0+YC5sYWJlbCB7CiAgICAgIGZvbnQtZmFtaWx5OiAke3QuZm9udEZhbWlseX07CiAgICB9YCwiZ2V0U3R5bGVzIiksVzFlPWpKZX0pO3ZhciBZMWU9e307aHIoWTFlLHtkaWFncmFtOigpPT5RSmV9KTt2YXIgS0plLFFKZSxYMWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjttMWUoKTt5MWUoKTtWMWUoKTtIMWUoKTtxMWUoKTtLSmU9ZDQucGFyc2UuYmluZChkNCk7ZDQucGFyc2U9dD0+S0plKFUxZSh0KSk7UUplPXtzdHlsZXM6VzFlLHBhcnNlcjpkNCxkYjpnMWUscmVuZGVyZXI6RzFlfX0pO3ZhciBRMWUsWUIsdGV0LHJldCxuZXQsaWV0LGFldCxCZixYQj1OKCgpPT57InVzZSBzdHJpY3QiO2ppKCk7WWEoKTtpcigpO21pKCk7UTFlPXtwYWNrZXQ6W119LFlCPXN0cnVjdHVyZWRDbG9uZShRMWUpLHRldD1vci5wYWNrZXQscmV0PW8oKCk9PntsZXQgdD1GaSh7Li4udGV0LC4uLmNyKCkucGFja2V0fSk7cmV0dXJuIHQuc2hvd0JpdHMmJih0LnBhZGRpbmdZKz0xMCksdH0sImdldENvbmZpZyIpLG5ldD1vKCgpPT5ZQi5wYWNrZXQsImdldFBhY2tldCIpLGlldD1vKHQ9Pnt0Lmxlbmd0aD4wJiZZQi5wYWNrZXQucHVzaCh0KX0sInB1c2hXb3JkIiksYWV0PW8oKCk9PntBcigpLFlCPXN0cnVjdHVyZWRDbG9uZShRMWUpfSwiY2xlYXIiKSxCZj17cHVzaFdvcmQ6aWV0LGdldFBhY2tldDpuZXQsZ2V0Q29uZmlnOnJldCxjbGVhcjphZXQsc2V0QWNjVGl0bGU6THIsZ2V0QWNjVGl0bGU6UnIsc2V0RGlhZ3JhbVRpdGxlOiRyLGdldERpYWdyYW1UaXRsZTpJcixnZXRBY2NEZXNjcmlwdGlvbjpNcixzZXRBY2NEZXNjcmlwdGlvbjpOcn19KTt2YXIgc2V0LG9ldCxjZXQsWjFlLEoxZT1OKCgpPT57InVzZSBzdHJpY3QiO2twKCk7dnQoKTtUMSgpO1hCKCk7c2V0PTFlNCxvZXQ9byh0PT57JGModCxCZik7bGV0IGU9LTEscj1bXSxuPTEse2JpdHNQZXJSb3c6aX09QmYuZ2V0Q29uZmlnKCk7Zm9yKGxldHtzdGFydDphLGVuZDpzLGxhYmVsOmx9b2YgdC5ibG9ja3Mpe2lmKHMmJnM8YSl0aHJvdyBuZXcgRXJyb3IoYFBhY2tldCBibG9jayAke2F9IC0gJHtzfSBpcyBpbnZhbGlkLiBFbmQgbXVzdCBiZSBncmVhdGVyIHRoYW4gc3RhcnQuYCk7aWYoYSE9PWUrMSl0aHJvdyBuZXcgRXJyb3IoYFBhY2tldCBibG9jayAke2F9IC0gJHtzPz9hfSBpcyBub3QgY29udGlndW91cy4gSXQgc2hvdWxkIHN0YXJ0IGZyb20gJHtlKzF9LmApO2ZvcihlPXM/P2EsWS5kZWJ1ZyhgUGFja2V0IGJsb2NrICR7YX0gLSAke2V9IHdpdGggbGFiZWwgJHtsfWApO3IubGVuZ3RoPD1pKzEmJkJmLmdldFBhY2tldCgpLmxlbmd0aDxzZXQ7KXtsZXRbdSxoXT1jZXQoe3N0YXJ0OmEsZW5kOnMsbGFiZWw6bH0sbixpKTtpZihyLnB1c2godSksdS5lbmQrMT09PW4qaSYmKEJmLnB1c2hXb3JkKHIpLHI9W10sbisrKSwhaClicmVhazsoe3N0YXJ0OmEsZW5kOnMsbGFiZWw6bH09aCl9fUJmLnB1c2hXb3JkKHIpfSwicG9wdWxhdGUiKSxjZXQ9bygodCxlLHIpPT57aWYodC5lbmQ9PT12b2lkIDAmJih0LmVuZD10LnN0YXJ0KSx0LnN0YXJ0PnQuZW5kKXRocm93IG5ldyBFcnJvcihgQmxvY2sgc3RhcnQgJHt0LnN0YXJ0fSBpcyBncmVhdGVyIHRoYW4gYmxvY2sgZW5kICR7dC5lbmR9LmApO3JldHVybiB0LmVuZCsxPD1lKnI/W3Qsdm9pZCAwXTpbe3N0YXJ0OnQuc3RhcnQsZW5kOmUqci0xLGxhYmVsOnQubGFiZWx9LHtzdGFydDplKnIsZW5kOnQuZW5kLGxhYmVsOnQubGFiZWx9XX0sImdldE5leHRGaXR0aW5nQmxvY2siKSxaMWU9e3BhcnNlOm8oYXN5bmMgdD0+e2xldCBlPWF3YWl0IHVvKCJwYWNrZXQiLHQpO1kuZGVidWcoZSksb2V0KGUpfSwicGFyc2UiKX19KTt2YXIgdWV0LGhldCxleWUsdHllPU4oKCk9PnsidXNlIHN0cmljdCI7VmMoKTtFaSgpO3VldD1vKCh0LGUscixuKT0+e2xldCBpPW4uZGIsYT1pLmdldENvbmZpZygpLHtyb3dIZWlnaHQ6cyxwYWRkaW5nWTpsLGJpdFdpZHRoOnUsYml0c1BlclJvdzpofT1hLGY9aS5nZXRQYWNrZXQoKSxkPWkuZ2V0RGlhZ3JhbVRpdGxlKCkscD1zK2wsbT1wKihmLmxlbmd0aCsxKS0oZD8wOnMpLGc9dSpoKzIseT1zYShlKTt5LmF0dHIoInZpZXdib3giLGAwIDAgJHtnfSAke219YCksdm4oeSxtLGcsYS51c2VNYXhXaWR0aCk7Zm9yKGxldFt2LHhdb2YgZi5lbnRyaWVzKCkpaGV0KHkseCx2LGEpO3kuYXBwZW5kKCJ0ZXh0IikudGV4dChkKS5hdHRyKCJ4IixnLzIpLmF0dHIoInkiLG0tcC8yKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiY2xhc3MiLCJwYWNrZXRUaXRsZSIpfSwiZHJhdyIpLGhldD1vKCh0LGUscix7cm93SGVpZ2h0Om4scGFkZGluZ1g6aSxwYWRkaW5nWTphLGJpdFdpZHRoOnMsYml0c1BlclJvdzpsLHNob3dCaXRzOnV9KT0+e2xldCBoPXQuYXBwZW5kKCJnIiksZj1yKihuK2EpK2E7Zm9yKGxldCBkIG9mIGUpe2xldCBwPWQuc3RhcnQlbCpzKzEsbT0oZC5lbmQtZC5zdGFydCsxKSpzLWk7aWYoaC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IixwKS5hdHRyKCJ5IixmKS5hdHRyKCJ3aWR0aCIsbSkuYXR0cigiaGVpZ2h0IixuKS5hdHRyKCJjbGFzcyIsInBhY2tldEJsb2NrIiksaC5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixwK20vMikuYXR0cigieSIsZituLzIpLmF0dHIoImNsYXNzIiwicGFja2V0TGFiZWwiKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dChkLmxhYmVsKSwhdSljb250aW51ZTtsZXQgZz1kLmVuZD09PWQuc3RhcnQseT1mLTI7aC5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixwKyhnP20vMjowKSkuYXR0cigieSIseSkuYXR0cigiY2xhc3MiLCJwYWNrZXRCeXRlIHN0YXJ0IikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJhdXRvIikuYXR0cigidGV4dC1hbmNob3IiLGc/Im1pZGRsZSI6InN0YXJ0IikudGV4dChkLnN0YXJ0KSxnfHxoLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLHArbSkuYXR0cigieSIseSkuYXR0cigiY2xhc3MiLCJwYWNrZXRCeXRlIGVuZCIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwiYXV0byIpLmF0dHIoInRleHQtYW5jaG9yIiwiZW5kIikudGV4dChkLmVuZCl9fSwiZHJhd1dvcmQiKSxleWU9e2RyYXc6dWV0fX0pO3ZhciBmZXQscnllLG55ZT1OKCgpPT57InVzZSBzdHJpY3QiO2lyKCk7ZmV0PXtieXRlRm9udFNpemU6IjEwcHgiLHN0YXJ0Qnl0ZUNvbG9yOiJibGFjayIsZW5kQnl0ZUNvbG9yOiJibGFjayIsbGFiZWxDb2xvcjoiYmxhY2siLGxhYmVsRm9udFNpemU6IjEycHgiLHRpdGxlQ29sb3I6ImJsYWNrIix0aXRsZUZvbnRTaXplOiIxNHB4IixibG9ja1N0cm9rZUNvbG9yOiJibGFjayIsYmxvY2tTdHJva2VXaWR0aDoiMSIsYmxvY2tGaWxsQ29sb3I6IiNlZmVmZWYifSxyeWU9bygoe3BhY2tldDp0fT17fSk9PntsZXQgZT1GaShmZXQsdCk7cmV0dXJuYAoJLnBhY2tldEJ5dGUgewoJCWZvbnQtc2l6ZTogJHtlLmJ5dGVGb250U2l6ZX07Cgl9CgkucGFja2V0Qnl0ZS5zdGFydCB7CgkJZmlsbDogJHtlLnN0YXJ0Qnl0ZUNvbG9yfTsKCX0KCS5wYWNrZXRCeXRlLmVuZCB7CgkJZmlsbDogJHtlLmVuZEJ5dGVDb2xvcn07Cgl9CgkucGFja2V0TGFiZWwgewoJCWZpbGw6ICR7ZS5sYWJlbENvbG9yfTsKCQlmb250LXNpemU6ICR7ZS5sYWJlbEZvbnRTaXplfTsKCX0KCS5wYWNrZXRUaXRsZSB7CgkJZmlsbDogJHtlLnRpdGxlQ29sb3J9OwoJCWZvbnQtc2l6ZTogJHtlLnRpdGxlRm9udFNpemV9OwoJfQoJLnBhY2tldEJsb2NrIHsKCQlzdHJva2U6ICR7ZS5ibG9ja1N0cm9rZUNvbG9yfTsKCQlzdHJva2Utd2lkdGg6ICR7ZS5ibG9ja1N0cm9rZVdpZHRofTsKCQlmaWxsOiAke2UuYmxvY2tGaWxsQ29sb3J9OwoJfQoJYH0sInN0eWxlcyIpfSk7dmFyIGl5ZT17fTtocihpeWUse2RpYWdyYW06KCk9PmRldH0pO3ZhciBkZXQsYXllPU4oKCk9PnsidXNlIHN0cmljdCI7WEIoKTtKMWUoKTt0eWUoKTtueWUoKTtkZXQ9e3BhcnNlcjpaMWUsZGI6QmYscmVuZGVyZXI6ZXllLHN0eWxlczpyeWV9fSk7dmFyIGZ5LGx5ZSxqcCxnZXQseWV0LGN5ZSx2ZXQseGV0LGJldCx3ZXQsVGV0LGtldCxFZXQsS3AsakI9TigoKT0+eyJ1c2Ugc3RyaWN0IjtqaSgpO1lhKCk7aXIoKTttaSgpO2Z5PXtzaG93TGVnZW5kOiEwLHRpY2tzOjUsbWF4Om51bGwsbWluOjAsZ3JhdGljdWxlOiJjaXJjbGUifSxseWU9e2F4ZXM6W10sY3VydmVzOltdLG9wdGlvbnM6Znl9LGpwPXN0cnVjdHVyZWRDbG9uZShseWUpLGdldD1vci5yYWRhcix5ZXQ9bygoKT0+Rmkoey4uLmdldCwuLi5jcigpLnJhZGFyfSksImdldENvbmZpZyIpLGN5ZT1vKCgpPT5qcC5heGVzLCJnZXRBeGVzIiksdmV0PW8oKCk9PmpwLmN1cnZlcywiZ2V0Q3VydmVzIikseGV0PW8oKCk9PmpwLm9wdGlvbnMsImdldE9wdGlvbnMiKSxiZXQ9byh0PT57anAuYXhlcz10Lm1hcChlPT4oe25hbWU6ZS5uYW1lLGxhYmVsOmUubGFiZWw/P2UubmFtZX0pKX0sInNldEF4ZXMiKSx3ZXQ9byh0PT57anAuY3VydmVzPXQubWFwKGU9Pih7bmFtZTplLm5hbWUsbGFiZWw6ZS5sYWJlbD8/ZS5uYW1lLGVudHJpZXM6VGV0KGUuZW50cmllcyl9KSl9LCJzZXRDdXJ2ZXMiKSxUZXQ9byh0PT57aWYodFswXS5heGlzPT1udWxsKXJldHVybiB0Lm1hcChyPT5yLnZhbHVlKTtsZXQgZT1jeWUoKTtpZihlLmxlbmd0aD09PTApdGhyb3cgbmV3IEVycm9yKCJBeGVzIG11c3QgYmUgcG9wdWxhdGVkIGJlZm9yZSBjdXJ2ZXMgZm9yIHJlZmVyZW5jZSBlbnRyaWVzIik7cmV0dXJuIGUubWFwKHI9PntsZXQgbj10LmZpbmQoaT0+aS5heGlzPy4kcmVmVGV4dD09PXIubmFtZSk7aWYobj09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIk1pc3NpbmcgZW50cnkgZm9yIGF4aXMgIityLmxhYmVsKTtyZXR1cm4gbi52YWx1ZX0pfSwiY29tcHV0ZUN1cnZlRW50cmllcyIpLGtldD1vKHQ9PntsZXQgZT10LnJlZHVjZSgocixuKT0+KHJbbi5uYW1lXT1uLHIpLHt9KTtqcC5vcHRpb25zPXtzaG93TGVnZW5kOmUuc2hvd0xlZ2VuZD8udmFsdWU/P2Z5LnNob3dMZWdlbmQsdGlja3M6ZS50aWNrcz8udmFsdWU/P2Z5LnRpY2tzLG1heDplLm1heD8udmFsdWU/P2Z5Lm1heCxtaW46ZS5taW4/LnZhbHVlPz9meS5taW4sZ3JhdGljdWxlOmUuZ3JhdGljdWxlPy52YWx1ZT8/ZnkuZ3JhdGljdWxlfX0sInNldE9wdGlvbnMiKSxFZXQ9bygoKT0+e0FyKCksanA9c3RydWN0dXJlZENsb25lKGx5ZSl9LCJjbGVhciIpLEtwPXtnZXRBeGVzOmN5ZSxnZXRDdXJ2ZXM6dmV0LGdldE9wdGlvbnM6eGV0LHNldEF4ZXM6YmV0LHNldEN1cnZlczp3ZXQsc2V0T3B0aW9uczprZXQsZ2V0Q29uZmlnOnlldCxjbGVhcjpFZXQsc2V0QWNjVGl0bGU6THIsZ2V0QWNjVGl0bGU6UnIsc2V0RGlhZ3JhbVRpdGxlOiRyLGdldERpYWdyYW1UaXRsZTpJcixnZXRBY2NEZXNjcmlwdGlvbjpNcixzZXRBY2NEZXNjcmlwdGlvbjpOcn19KTt2YXIgQ2V0LHV5ZSxoeWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtrcCgpO3Z0KCk7VDEoKTtqQigpO0NldD1vKHQ9PnskYyh0LEtwKTtsZXR7YXhlczplLGN1cnZlczpyLG9wdGlvbnM6bn09dDtLcC5zZXRBeGVzKGUpLEtwLnNldEN1cnZlcyhyKSxLcC5zZXRPcHRpb25zKG4pfSwicG9wdWxhdGUiKSx1eWU9e3BhcnNlOm8oYXN5bmMgdD0+e2xldCBlPWF3YWl0IHVvKCJyYWRhciIsdCk7WS5kZWJ1ZyhlKSxDZXQoZSl9LCJwYXJzZSIpfX0pO2Z1bmN0aW9uIFJldCh0LGUscixuLGksYSxzKXtsZXQgbD1lLmxlbmd0aCx1PU1hdGgubWluKHMud2lkdGgscy5oZWlnaHQpLzI7ci5mb3JFYWNoKChoLGYpPT57aWYoaC5lbnRyaWVzLmxlbmd0aCE9PWwpcmV0dXJuO2xldCBkPWguZW50cmllcy5tYXAoKHAsbSk9PntsZXQgZz0yKk1hdGguUEkqbS9sLU1hdGguUEkvMix5PU5ldChwLG4saSx1KSx2PXkqTWF0aC5jb3MoZykseD15Kk1hdGguc2luKGcpO3JldHVybnt4OnYseTp4fX0pO2E9PT0iY2lyY2xlIj90LmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLE1ldChkLHMuY3VydmVUZW5zaW9uKSkuYXR0cigiY2xhc3MiLGByYWRhckN1cnZlLSR7Zn1gKTphPT09InBvbHlnb24iJiZ0LmFwcGVuZCgicG9seWdvbiIpLmF0dHIoInBvaW50cyIsZC5tYXAocD0+YCR7cC54fSwke3AueX1gKS5qb2luKCIgIikpLmF0dHIoImNsYXNzIixgcmFkYXJDdXJ2ZS0ke2Z9YCl9KX1mdW5jdGlvbiBOZXQodCxlLHIsbil7bGV0IGk9TWF0aC5taW4oTWF0aC5tYXgodCxlKSxyKTtyZXR1cm4gbiooaS1lKS8oci1lKX1mdW5jdGlvbiBNZXQodCxlKXtsZXQgcj10Lmxlbmd0aCxuPWBNJHt0WzBdLnh9LCR7dFswXS55fWA7Zm9yKGxldCBpPTA7aTxyO2krKyl7bGV0IGE9dFsoaS0xK3IpJXJdLHM9dFtpXSxsPXRbKGkrMSklcl0sdT10WyhpKzIpJXJdLGg9e3g6cy54KyhsLngtYS54KSplLHk6cy55KyhsLnktYS55KSplfSxmPXt4OmwueC0odS54LXMueCkqZSx5OmwueS0odS55LXMueSkqZX07bis9YCBDJHtoLnh9LCR7aC55fSAke2YueH0sJHtmLnl9ICR7bC54fSwke2wueX1gfXJldHVybmAke259IFpgfWZ1bmN0aW9uIElldCh0LGUscixuKXtpZighcilyZXR1cm47bGV0IGk9KG4ud2lkdGgvMituLm1hcmdpblJpZ2h0KSozLzQsYT0tKG4uaGVpZ2h0LzIrbi5tYXJnaW5Ub3ApKjMvNCxzPTIwO2UuZm9yRWFjaCgobCx1KT0+e2xldCBoPXQuYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7aX0sICR7YSt1KnN9KWApO2guYXBwZW5kKCJyZWN0IikuYXR0cigid2lkdGgiLDEyKS5hdHRyKCJoZWlnaHQiLDEyKS5hdHRyKCJjbGFzcyIsYHJhZGFyTGVnZW5kQm94LSR7dX1gKSxoLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDE2KS5hdHRyKCJ5IiwwKS5hdHRyKCJjbGFzcyIsInJhZGFyTGVnZW5kVGV4dCIpLnRleHQobC5sYWJlbCl9KX12YXIgQWV0LF9ldCxEZXQsTGV0LGZ5ZSxkeWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtWYygpO0FldD1vKCh0LGUscixuKT0+e2xldCBpPW4uZGIsYT1pLmdldEF4ZXMoKSxzPWkuZ2V0Q3VydmVzKCksbD1pLmdldE9wdGlvbnMoKSx1PWkuZ2V0Q29uZmlnKCksaD1pLmdldERpYWdyYW1UaXRsZSgpLGY9c2EoZSksZD1fZXQoZix1KSxwPWwubWF4Pz9NYXRoLm1heCguLi5zLm1hcCh5PT5NYXRoLm1heCguLi55LmVudHJpZXMpKSksbT1sLm1pbixnPU1hdGgubWluKHUud2lkdGgsdS5oZWlnaHQpLzI7RGV0KGQsYSxnLGwudGlja3MsbC5ncmF0aWN1bGUpLExldChkLGEsZyx1KSxSZXQoZCxhLHMsbSxwLGwuZ3JhdGljdWxlLHUpLElldChkLHMsbC5zaG93TGVnZW5kLHUpLGQuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJyYWRhclRpdGxlIikudGV4dChoKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwtdS5oZWlnaHQvMi11Lm1hcmdpblRvcCl9LCJkcmF3IiksX2V0PW8oKHQsZSk9PntsZXQgcj1lLndpZHRoK2UubWFyZ2luTGVmdCtlLm1hcmdpblJpZ2h0LG49ZS5oZWlnaHQrZS5tYXJnaW5Ub3ArZS5tYXJnaW5Cb3R0b20saT17eDplLm1hcmdpbkxlZnQrZS53aWR0aC8yLHk6ZS5tYXJnaW5Ub3ArZS5oZWlnaHQvMn07cmV0dXJuIHQuYXR0cigidmlld2JveCIsYDAgMCAke3J9ICR7bn1gKS5hdHRyKCJ3aWR0aCIscikuYXR0cigiaGVpZ2h0IixuKSx0LmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke2kueH0sICR7aS55fSlgKX0sImRyYXdGcmFtZSIpLERldD1vKCh0LGUscixuLGkpPT57aWYoaT09PSJjaXJjbGUiKWZvcihsZXQgYT0wO2E8bjthKyspe2xldCBzPXIqKGErMSkvbjt0LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiciIscykuYXR0cigiY2xhc3MiLCJyYWRhckdyYXRpY3VsZSIpfWVsc2UgaWYoaT09PSJwb2x5Z29uIil7bGV0IGE9ZS5sZW5ndGg7Zm9yKGxldCBzPTA7czxuO3MrKyl7bGV0IGw9cioocysxKS9uLHU9ZS5tYXAoKGgsZik9PntsZXQgZD0yKmYqTWF0aC5QSS9hLU1hdGguUEkvMixwPWwqTWF0aC5jb3MoZCksbT1sKk1hdGguc2luKGQpO3JldHVybmAke3B9LCR7bX1gfSkuam9pbigiICIpO3QuYXBwZW5kKCJwb2x5Z29uIikuYXR0cigicG9pbnRzIix1KS5hdHRyKCJjbGFzcyIsInJhZGFyR3JhdGljdWxlIil9fX0sImRyYXdHcmF0aWN1bGUiKSxMZXQ9bygodCxlLHIsbik9PntsZXQgaT1lLmxlbmd0aDtmb3IobGV0IGE9MDthPGk7YSsrKXtsZXQgcz1lW2FdLmxhYmVsLGw9MiphKk1hdGguUEkvaS1NYXRoLlBJLzI7dC5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsMCkuYXR0cigieTEiLDApLmF0dHIoIngyIixyKm4uYXhpc1NjYWxlRmFjdG9yKk1hdGguY29zKGwpKS5hdHRyKCJ5MiIscipuLmF4aXNTY2FsZUZhY3RvcipNYXRoLnNpbihsKSkuYXR0cigiY2xhc3MiLCJyYWRhckF4aXNMaW5lIiksdC5hcHBlbmQoInRleHQiKS50ZXh0KHMpLmF0dHIoIngiLHIqbi5heGlzTGFiZWxGYWN0b3IqTWF0aC5jb3MobCkpLmF0dHIoInkiLHIqbi5heGlzTGFiZWxGYWN0b3IqTWF0aC5zaW4obCkpLmF0dHIoImNsYXNzIiwicmFkYXJBeGlzTGFiZWwiKX19LCJkcmF3QXhlcyIpO28oUmV0LCJkcmF3Q3VydmVzIik7byhOZXQsInJlbGF0aXZlUmFkaXVzIik7byhNZXQsImNsb3NlZFJvdW5kQ3VydmUiKTtvKElldCwiZHJhd0xlZ2VuZCIpO2Z5ZT17ZHJhdzpBZXR9fSk7dmFyIE9ldCxQZXQscHllLG15ZT1OKCgpPT57InVzZSBzdHJpY3QiO2lyKCk7X3koKTtqaSgpO09ldD1vKCh0LGUpPT57bGV0IHI9IiI7Zm9yKGxldCBuPTA7bjx0LlRIRU1FX0NPTE9SX0xJTUlUO24rKyl7bGV0IGk9dFtgY1NjYWxlJHtufWBdO3IrPWAKCQkucmFkYXJDdXJ2ZS0ke259IHsKCQkJY29sb3I6ICR7aX07CgkJCWZpbGw6ICR7aX07CgkJCWZpbGwtb3BhY2l0eTogJHtlLmN1cnZlT3BhY2l0eX07CgkJCXN0cm9rZTogJHtpfTsKCQkJc3Ryb2tlLXdpZHRoOiAke2UuY3VydmVTdHJva2VXaWR0aH07CgkJfQoJCS5yYWRhckxlZ2VuZEJveC0ke259IHsKCQkJZmlsbDogJHtpfTsKCQkJZmlsbC1vcGFjaXR5OiAke2UuY3VydmVPcGFjaXR5fTsKCQkJc3Ryb2tlOiAke2l9OwoJCX0KCQlgfXJldHVybiByfSwiZ2VuSW5kZXhTdHlsZXMiKSxQZXQ9byh0PT57bGV0IGU9b2goKSxyPWNyKCksbj1GaShlLHIudGhlbWVWYXJpYWJsZXMpLGk9Rmkobi5yYWRhcix0KTtyZXR1cm57dGhlbWVWYXJpYWJsZXM6bixyYWRhck9wdGlvbnM6aX19LCJidWlsZFJhZGFyU3R5bGVPcHRpb25zIikscHllPW8oKHtyYWRhcjp0fT17fSk9PntsZXR7dGhlbWVWYXJpYWJsZXM6ZSxyYWRhck9wdGlvbnM6cn09UGV0KHQpO3JldHVybmAKCS5yYWRhclRpdGxlIHsKCQlmb250LXNpemU6ICR7ZS5mb250U2l6ZX07CgkJY29sb3I6ICR7ZS50aXRsZUNvbG9yfTsKCQlkb21pbmFudC1iYXNlbGluZTogaGFuZ2luZzsKCQl0ZXh0LWFuY2hvcjogbWlkZGxlOwoJfQoJLnJhZGFyQXhpc0xpbmUgewoJCXN0cm9rZTogJHtyLmF4aXNDb2xvcn07CgkJc3Ryb2tlLXdpZHRoOiAke3IuYXhpc1N0cm9rZVdpZHRofTsKCX0KCS5yYWRhckF4aXNMYWJlbCB7CgkJZG9taW5hbnQtYmFzZWxpbmU6IG1pZGRsZTsKCQl0ZXh0LWFuY2hvcjogbWlkZGxlOwoJCWZvbnQtc2l6ZTogJHtyLmF4aXNMYWJlbEZvbnRTaXplfXB4OwoJCWNvbG9yOiAke3IuYXhpc0NvbG9yfTsKCX0KCS5yYWRhckdyYXRpY3VsZSB7CgkJZmlsbDogJHtyLmdyYXRpY3VsZUNvbG9yfTsKCQlmaWxsLW9wYWNpdHk6ICR7ci5ncmF0aWN1bGVPcGFjaXR5fTsKCQlzdHJva2U6ICR7ci5ncmF0aWN1bGVDb2xvcn07CgkJc3Ryb2tlLXdpZHRoOiAke3IuZ3JhdGljdWxlU3Ryb2tlV2lkdGh9OwoJfQoJLnJhZGFyTGVnZW5kVGV4dCB7CgkJdGV4dC1hbmNob3I6IHN0YXJ0OwoJCWZvbnQtc2l6ZTogJHtyLmxlZ2VuZEZvbnRTaXplfXB4OwoJCWRvbWluYW50LWJhc2VsaW5lOiBoYW5naW5nOwoJfQoJJHtPZXQoZSxyKX0KCWB9LCJzdHlsZXMiKX0pO3ZhciBneWU9e307aHIoZ3llLHtkaWFncmFtOigpPT5CZXR9KTt2YXIgQmV0LHl5ZT1OKCgpPT57InVzZSBzdHJpY3QiO2pCKCk7aHllKCk7ZHllKCk7bXllKCk7QmV0PXtwYXJzZXI6dXllLGRiOktwLHJlbmRlcmVyOmZ5ZSxzdHlsZXM6cHllfX0pO3ZhciBLQixieWUsd3llPU4oKCk9PnsidXNlIHN0cmljdCI7S0I9ZnVuY3Rpb24oKXt2YXIgdD1vKGZ1bmN0aW9uKHcsQyxULEUpe2ZvcihUPVR8fHt9LEU9dy5sZW5ndGg7RS0tO1Rbd1tFXV09Qyk7cmV0dXJuIFR9LCJvIiksZT1bMSw3XSxyPVsxLDEzXSxuPVsxLDE0XSxpPVsxLDE1XSxhPVsxLDE5XSxzPVsxLDE2XSxsPVsxLDE3XSx1PVsxLDE4XSxoPVs4LDMwXSxmPVs4LDIxLDI4LDI5LDMwLDMxLDMyLDQwLDQ0LDQ3XSxkPVsxLDIzXSxwPVsxLDI0XSxtPVs4LDE1LDE2LDIxLDI4LDI5LDMwLDMxLDMyLDQwLDQ0LDQ3XSxnPVs4LDE1LDE2LDIxLDI3LDI4LDI5LDMwLDMxLDMyLDQwLDQ0LDQ3XSx5PVsxLDQ5XSx2PXt0cmFjZTpvKGZ1bmN0aW9uKCl7fSwidHJhY2UiKSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzcGFjZUxpbmVzOjMsU1BBQ0VMSU5FOjQsTkw6NSxzZXBhcmF0b3I6NixTUEFDRTo3LEVPRjo4LHN0YXJ0OjksQkxPQ0tfRElBR1JBTV9LRVk6MTAsZG9jdW1lbnQ6MTEsc3RvcDoxMixzdGF0ZW1lbnQ6MTMsbGluazoxNCxMSU5LOjE1LFNUQVJUX0xJTks6MTYsTElOS19MQUJFTDoxNyxTVFI6MTgsbm9kZVN0YXRlbWVudDoxOSxjb2x1bW5zU3RhdGVtZW50OjIwLFNQQUNFX0JMT0NLOjIxLGJsb2NrU3RhdGVtZW50OjIyLGNsYXNzRGVmU3RhdGVtZW50OjIzLGNzc0NsYXNzU3RhdGVtZW50OjI0LHN0eWxlU3RhdGVtZW50OjI1LG5vZGU6MjYsU0laRToyNyxDT0xVTU5TOjI4LCJpZC1ibG9jayI6MjksZW5kOjMwLGJsb2NrOjMxLE5PREVfSUQ6MzIsbm9kZVNoYXBlTkxhYmVsOjMzLGRpckxpc3Q6MzQsRElSOjM1LE5PREVfRFNUQVJUOjM2LE5PREVfREVORDozNyxCTE9DS19BUlJPV19TVEFSVDozOCxCTE9DS19BUlJPV19FTkQ6MzksY2xhc3NEZWY6NDAsQ0xBU1NERUZfSUQ6NDEsQ0xBU1NERUZfU1RZTEVPUFRTOjQyLERFRkFVTFQ6NDMsY2xhc3M6NDQsQ0xBU1NFTlRJVFlfSURTOjQ1LFNUWUxFQ0xBU1M6NDYsc3R5bGU6NDcsU1RZTEVfRU5USVRZX0lEUzo0OCxTVFlMRV9ERUZJTklUSU9OX0RBVEE6NDksJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6IlNQQUNFTElORSIsNToiTkwiLDc6IlNQQUNFIiw4OiJFT0YiLDEwOiJCTE9DS19ESUFHUkFNX0tFWSIsMTU6IkxJTksiLDE2OiJTVEFSVF9MSU5LIiwxNzoiTElOS19MQUJFTCIsMTg6IlNUUiIsMjE6IlNQQUNFX0JMT0NLIiwyNzoiU0laRSIsMjg6IkNPTFVNTlMiLDI5OiJpZC1ibG9jayIsMzA6ImVuZCIsMzE6ImJsb2NrIiwzMjoiTk9ERV9JRCIsMzU6IkRJUiIsMzY6Ik5PREVfRFNUQVJUIiwzNzoiTk9ERV9ERU5EIiwzODoiQkxPQ0tfQVJST1dfU1RBUlQiLDM5OiJCTE9DS19BUlJPV19FTkQiLDQwOiJjbGFzc0RlZiIsNDE6IkNMQVNTREVGX0lEIiw0MjoiQ0xBU1NERUZfU1RZTEVPUFRTIiw0MzoiREVGQVVMVCIsNDQ6ImNsYXNzIiw0NToiQ0xBU1NFTlRJVFlfSURTIiw0NjoiU1RZTEVDTEFTUyIsNDc6InN0eWxlIiw0ODoiU1RZTEVfRU5USVRZX0lEUyIsNDk6IlNUWUxFX0RFRklOSVRJT05fREFUQSJ9LHByb2R1Y3Rpb25zXzpbMCxbMywxXSxbMywyXSxbMywyXSxbNiwxXSxbNiwxXSxbNiwxXSxbOSwzXSxbMTIsMV0sWzEyLDFdLFsxMiwyXSxbMTIsMl0sWzExLDFdLFsxMSwyXSxbMTQsMV0sWzE0LDRdLFsxMywxXSxbMTMsMV0sWzEzLDFdLFsxMywxXSxbMTMsMV0sWzEzLDFdLFsxMywxXSxbMTksM10sWzE5LDJdLFsxOSwxXSxbMjAsMV0sWzIyLDRdLFsyMiwzXSxbMjYsMV0sWzI2LDJdLFszNCwxXSxbMzQsMl0sWzMzLDNdLFszMyw0XSxbMjMsM10sWzIzLDNdLFsyNCwzXSxbMjUsM11dLHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbihDLFQsRSxBLFMsXyxJKXt2YXIgRD1fLmxlbmd0aC0xO3N3aXRjaChTKXtjYXNlIDQ6QS5nZXRMb2dnZXIoKS5kZWJ1ZygiUnVsZTogc2VwYXJhdG9yIChOTCkgIik7YnJlYWs7Y2FzZSA1OkEuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IHNlcGFyYXRvciAoU3BhY2UpICIpO2JyZWFrO2Nhc2UgNjpBLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiBzZXBhcmF0b3IgKEVPRikgIik7YnJlYWs7Y2FzZSA3OkEuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IGhpZXJhcmNoeTogIixfW0QtMV0pLEEuc2V0SGllcmFyY2h5KF9bRC0xXSk7YnJlYWs7Y2FzZSA4OkEuZ2V0TG9nZ2VyKCkuZGVidWcoIlN0b3AgTkwgIik7YnJlYWs7Y2FzZSA5OkEuZ2V0TG9nZ2VyKCkuZGVidWcoIlN0b3AgRU9GICIpO2JyZWFrO2Nhc2UgMTA6QS5nZXRMb2dnZXIoKS5kZWJ1ZygiU3RvcCBOTDIgIik7YnJlYWs7Y2FzZSAxMTpBLmdldExvZ2dlcigpLmRlYnVnKCJTdG9wIEVPRjIgIik7YnJlYWs7Y2FzZSAxMjpBLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiBzdGF0ZW1lbnQ6ICIsX1tEXSksdHlwZW9mIF9bRF0ubGVuZ3RoPT0ibnVtYmVyIj90aGlzLiQ9X1tEXTp0aGlzLiQ9W19bRF1dO2JyZWFrO2Nhc2UgMTM6QS5nZXRMb2dnZXIoKS5kZWJ1ZygiUnVsZTogc3RhdGVtZW50ICMyOiAiLF9bRC0xXSksdGhpcy4kPVtfW0QtMV1dLmNvbmNhdChfW0RdKTticmVhaztjYXNlIDE0OkEuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IGxpbms6ICIsX1tEXSxDKSx0aGlzLiQ9e2VkZ2VUeXBlU3RyOl9bRF0sbGFiZWw6IiJ9O2JyZWFrO2Nhc2UgMTU6QS5nZXRMb2dnZXIoKS5kZWJ1ZygiUnVsZTogTEFCRUwgbGluazogIixfW0QtM10sX1tELTFdLF9bRF0pLHRoaXMuJD17ZWRnZVR5cGVTdHI6X1tEXSxsYWJlbDpfW0QtMV19O2JyZWFrO2Nhc2UgMTg6bGV0IGs9cGFyc2VJbnQoX1tEXSksTD1BLmdlbmVyYXRlSWQoKTt0aGlzLiQ9e2lkOkwsdHlwZToic3BhY2UiLGxhYmVsOiIiLHdpZHRoOmssY2hpbGRyZW46W119O2JyZWFrO2Nhc2UgMjM6QS5nZXRMb2dnZXIoKS5kZWJ1ZygiUnVsZTogKG5vZGVTdGF0ZW1lbnQgbGluayBub2RlKSAiLF9bRC0yXSxfW0QtMV0sX1tEXSwiIHR5cGVzdHI6ICIsX1tELTFdLmVkZ2VUeXBlU3RyKTtsZXQgUj1BLmVkZ2VTdHJUb0VkZ2VEYXRhKF9bRC0xXS5lZGdlVHlwZVN0cik7dGhpcy4kPVt7aWQ6X1tELTJdLmlkLGxhYmVsOl9bRC0yXS5sYWJlbCx0eXBlOl9bRC0yXS50eXBlLGRpcmVjdGlvbnM6X1tELTJdLmRpcmVjdGlvbnN9LHtpZDpfW0QtMl0uaWQrIi0iK19bRF0uaWQsc3RhcnQ6X1tELTJdLmlkLGVuZDpfW0RdLmlkLGxhYmVsOl9bRC0xXS5sYWJlbCx0eXBlOiJlZGdlIixkaXJlY3Rpb25zOl9bRF0uZGlyZWN0aW9ucyxhcnJvd1R5cGVFbmQ6UixhcnJvd1R5cGVTdGFydDoiYXJyb3dfb3BlbiJ9LHtpZDpfW0RdLmlkLGxhYmVsOl9bRF0ubGFiZWwsdHlwZTpBLnR5cGVTdHIyVHlwZShfW0RdLnR5cGVTdHIpLGRpcmVjdGlvbnM6X1tEXS5kaXJlY3Rpb25zfV07YnJlYWs7Y2FzZSAyNDpBLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiBub2RlU3RhdGVtZW50IChhYmM4OCBub2RlIHNpemUpICIsX1tELTFdLF9bRF0pLHRoaXMuJD17aWQ6X1tELTFdLmlkLGxhYmVsOl9bRC0xXS5sYWJlbCx0eXBlOkEudHlwZVN0cjJUeXBlKF9bRC0xXS50eXBlU3RyKSxkaXJlY3Rpb25zOl9bRC0xXS5kaXJlY3Rpb25zLHdpZHRoSW5Db2x1bW5zOnBhcnNlSW50KF9bRF0sMTApfTticmVhaztjYXNlIDI1OkEuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IG5vZGVTdGF0ZW1lbnQgKG5vZGUpICIsX1tEXSksdGhpcy4kPXtpZDpfW0RdLmlkLGxhYmVsOl9bRF0ubGFiZWwsdHlwZTpBLnR5cGVTdHIyVHlwZShfW0RdLnR5cGVTdHIpLGRpcmVjdGlvbnM6X1tEXS5kaXJlY3Rpb25zLHdpZHRoSW5Db2x1bW5zOjF9O2JyZWFrO2Nhc2UgMjY6QS5nZXRMb2dnZXIoKS5kZWJ1ZygiQVBBMTIzIix0aGlzP3RoaXM6Im5hIiksQS5nZXRMb2dnZXIoKS5kZWJ1ZygiQ09MVU1OUzogIixfW0RdKSx0aGlzLiQ9e3R5cGU6ImNvbHVtbi1zZXR0aW5nIixjb2x1bW5zOl9bRF09PT0iYXV0byI/LTE6cGFyc2VJbnQoX1tEXSl9O2JyZWFrO2Nhc2UgMjc6QS5nZXRMb2dnZXIoKS5kZWJ1ZygiUnVsZTogaWQtYmxvY2sgc3RhdGVtZW50IDogIixfW0QtMl0sX1tELTFdKTtsZXQgTz1BLmdlbmVyYXRlSWQoKTt0aGlzLiQ9ey4uLl9bRC0yXSx0eXBlOiJjb21wb3NpdGUiLGNoaWxkcmVuOl9bRC0xXX07YnJlYWs7Y2FzZSAyODpBLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiBibG9ja1N0YXRlbWVudCA6ICIsX1tELTJdLF9bRC0xXSxfW0RdKTtsZXQgTT1BLmdlbmVyYXRlSWQoKTt0aGlzLiQ9e2lkOk0sdHlwZToiY29tcG9zaXRlIixsYWJlbDoiIixjaGlsZHJlbjpfW0QtMV19O2JyZWFrO2Nhc2UgMjk6QS5nZXRMb2dnZXIoKS5kZWJ1ZygiUnVsZTogbm9kZSAoTk9ERV9JRCBzZXBhcmF0b3IpOiAiLF9bRF0pLHRoaXMuJD17aWQ6X1tEXX07YnJlYWs7Y2FzZSAzMDpBLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiBub2RlIChOT0RFX0lEIG5vZGVTaGFwZU5MYWJlbCBzZXBhcmF0b3IpOiAiLF9bRC0xXSxfW0RdKSx0aGlzLiQ9e2lkOl9bRC0xXSxsYWJlbDpfW0RdLmxhYmVsLHR5cGVTdHI6X1tEXS50eXBlU3RyLGRpcmVjdGlvbnM6X1tEXS5kaXJlY3Rpb25zfTticmVhaztjYXNlIDMxOkEuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IGRpckxpc3Q6ICIsX1tEXSksdGhpcy4kPVtfW0RdXTticmVhaztjYXNlIDMyOkEuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IGRpckxpc3Q6ICIsX1tELTFdLF9bRF0pLHRoaXMuJD1bX1tELTFdXS5jb25jYXQoX1tEXSk7YnJlYWs7Y2FzZSAzMzpBLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiBub2RlU2hhcGVOTGFiZWw6ICIsX1tELTJdLF9bRC0xXSxfW0RdKSx0aGlzLiQ9e3R5cGVTdHI6X1tELTJdK19bRF0sbGFiZWw6X1tELTFdfTticmVhaztjYXNlIDM0OkEuZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IEJMT0NLX0FSUk9XIG5vZGVTaGFwZU5MYWJlbDogIixfW0QtM10sX1tELTJdLCIgIzM6IixfW0QtMV0sX1tEXSksdGhpcy4kPXt0eXBlU3RyOl9bRC0zXStfW0RdLGxhYmVsOl9bRC0yXSxkaXJlY3Rpb25zOl9bRC0xXX07YnJlYWs7Y2FzZSAzNTpjYXNlIDM2OnRoaXMuJD17dHlwZToiY2xhc3NEZWYiLGlkOl9bRC0xXS50cmltKCksY3NzOl9bRF0udHJpbSgpfTticmVhaztjYXNlIDM3OnRoaXMuJD17dHlwZToiYXBwbHlDbGFzcyIsaWQ6X1tELTFdLnRyaW0oKSxzdHlsZUNsYXNzOl9bRF0udHJpbSgpfTticmVhaztjYXNlIDM4OnRoaXMuJD17dHlwZToiYXBwbHlTdHlsZXMiLGlkOl9bRC0xXS50cmltKCksc3R5bGVzU3RyOl9bRF0udHJpbSgpfTticmVha319LCJhbm9ueW1vdXMiKSx0YWJsZTpbezk6MSwxMDpbMSwyXX0sezE6WzNdfSx7MTE6MywxMzo0LDE5OjUsMjA6NiwyMTplLDIyOjgsMjM6OSwyNDoxMCwyNToxMSwyNjoxMiwyODpyLDI5Om4sMzE6aSwzMjphLDQwOnMsNDQ6bCw0Nzp1fSx7ODpbMSwyMF19LHQoaCxbMiwxMl0sezEzOjQsMTk6NSwyMDo2LDIyOjgsMjM6OSwyNDoxMCwyNToxMSwyNjoxMiwxMToyMSwyMTplLDI4OnIsMjk6biwzMTppLDMyOmEsNDA6cyw0NDpsLDQ3OnV9KSx0KGYsWzIsMTZdLHsxNDoyMiwxNTpkLDE2OnB9KSx0KGYsWzIsMTddKSx0KGYsWzIsMThdKSx0KGYsWzIsMTldKSx0KGYsWzIsMjBdKSx0KGYsWzIsMjFdKSx0KGYsWzIsMjJdKSx0KG0sWzIsMjVdLHsyNzpbMSwyNV19KSx0KGYsWzIsMjZdKSx7MTk6MjYsMjY6MTIsMzI6YX0sezExOjI3LDEzOjQsMTk6NSwyMDo2LDIxOmUsMjI6OCwyMzo5LDI0OjEwLDI1OjExLDI2OjEyLDI4OnIsMjk6biwzMTppLDMyOmEsNDA6cyw0NDpsLDQ3OnV9LHs0MTpbMSwyOF0sNDM6WzEsMjldfSx7NDU6WzEsMzBdfSx7NDg6WzEsMzFdfSx0KGcsWzIsMjldLHszMzozMiwzNjpbMSwzM10sMzg6WzEsMzRdfSksezE6WzIsN119LHQoaCxbMiwxM10pLHsyNjozNSwzMjphfSx7MzI6WzIsMTRdfSx7MTc6WzEsMzZdfSx0KG0sWzIsMjRdKSx7MTE6MzcsMTM6NCwxNDoyMiwxNTpkLDE2OnAsMTk6NSwyMDo2LDIxOmUsMjI6OCwyMzo5LDI0OjEwLDI1OjExLDI2OjEyLDI4OnIsMjk6biwzMTppLDMyOmEsNDA6cyw0NDpsLDQ3OnV9LHszMDpbMSwzOF19LHs0MjpbMSwzOV19LHs0MjpbMSw0MF19LHs0NjpbMSw0MV19LHs0OTpbMSw0Ml19LHQoZyxbMiwzMF0pLHsxODpbMSw0M119LHsxODpbMSw0NF19LHQobSxbMiwyM10pLHsxODpbMSw0NV19LHszMDpbMSw0Nl19LHQoZixbMiwyOF0pLHQoZixbMiwzNV0pLHQoZixbMiwzNl0pLHQoZixbMiwzN10pLHQoZixbMiwzOF0pLHszNzpbMSw0N119LHszNDo0OCwzNTp5fSx7MTU6WzEsNTBdfSx0KGYsWzIsMjddKSx0KGcsWzIsMzNdKSx7Mzk6WzEsNTFdfSx7MzQ6NTIsMzU6eSwzOTpbMiwzMV19LHszMjpbMiwxNV19LHQoZyxbMiwzNF0pLHszOTpbMiwzMl19XSxkZWZhdWx0QWN0aW9uczp7MjA6WzIsN10sMjM6WzIsMTRdLDUwOlsyLDE1XSw1MjpbMiwzMl19LHBhcnNlRXJyb3I6byhmdW5jdGlvbihDLFQpe2lmKFQucmVjb3ZlcmFibGUpdGhpcy50cmFjZShDKTtlbHNle3ZhciBFPW5ldyBFcnJvcihDKTt0aHJvdyBFLmhhc2g9VCxFfX0sInBhcnNlRXJyb3IiKSxwYXJzZTpvKGZ1bmN0aW9uKEMpe3ZhciBUPXRoaXMsRT1bMF0sQT1bXSxTPVtudWxsXSxfPVtdLEk9dGhpcy50YWJsZSxEPSIiLGs9MCxMPTAsUj0wLE89MixNPTEsQj1fLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLEY9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxQPXt5eTp7fX07Zm9yKHZhciB6IGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXkseikmJihQLnl5W3pdPXRoaXMueXlbel0pO0Yuc2V0SW5wdXQoQyxQLnl5KSxQLnl5LmxleGVyPUYsUC55eS5wYXJzZXI9dGhpcyx0eXBlb2YgRi55eWxsb2M+InUiJiYoRi55eWxsb2M9e30pO3ZhciAkPUYueXlsbG9jO18ucHVzaCgkKTt2YXIgSD1GLm9wdGlvbnMmJkYub3B0aW9ucy5yYW5nZXM7dHlwZW9mIFAueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9UC55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBRKGNlKXtFLmxlbmd0aD1FLmxlbmd0aC0yKmNlLFMubGVuZ3RoPVMubGVuZ3RoLWNlLF8ubGVuZ3RoPV8ubGVuZ3RoLWNlfW8oUSwicG9wU3RhY2siKTtmdW5jdGlvbiBqKCl7dmFyIGNlO3JldHVybiBjZT1BLnBvcCgpfHxGLmxleCgpfHxNLHR5cGVvZiBjZSE9Im51bWJlciImJihjZSBpbnN0YW5jZW9mIEFycmF5JiYoQT1jZSxjZT1BLnBvcCgpKSxjZT1ULnN5bWJvbHNfW2NlXXx8Y2UpLGNlfW8oaiwibGV4Iik7Zm9yKHZhciBpZSxuZSxsZSxoZSxLLFgsdGU9e30sSixzZSx1ZSxaOzspe2lmKGxlPUVbRS5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1tsZV0/aGU9dGhpcy5kZWZhdWx0QWN0aW9uc1tsZV06KChpZT09PW51bGx8fHR5cGVvZiBpZT4idSIpJiYoaWU9aigpKSxoZT1JW2xlXSYmSVtsZV1baWVdKSx0eXBlb2YgaGU+InUifHwhaGUubGVuZ3RofHwhaGVbMF0pe3ZhciBTZT0iIjtaPVtdO2ZvcihKIGluIElbbGVdKXRoaXMudGVybWluYWxzX1tKXSYmSj5PJiZaLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tKXSsiJyIpO0Yuc2hvd1Bvc2l0aW9uP1NlPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGsrMSkrYDoKYCtGLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArWi5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW2llXXx8aWUpKyInIjpTZT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhrKzEpKyI6IFVuZXhwZWN0ZWQgIisoaWU9PU0/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19baWVdfHxpZSkrIiciKSx0aGlzLnBhcnNlRXJyb3IoU2Use3RleHQ6Ri5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19baWVdfHxpZSxsaW5lOkYueXlsaW5lbm8sbG9jOiQsZXhwZWN0ZWQ6Wn0pfWlmKGhlWzBdaW5zdGFuY2VvZiBBcnJheSYmaGUubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitsZSsiLCB0b2tlbjogIitpZSk7c3dpdGNoKGhlWzBdKXtjYXNlIDE6RS5wdXNoKGllKSxTLnB1c2goRi55eXRleHQpLF8ucHVzaChGLnl5bGxvYyksRS5wdXNoKGhlWzFdKSxpZT1udWxsLG5lPyhpZT1uZSxuZT1udWxsKTooTD1GLnl5bGVuZyxEPUYueXl0ZXh0LGs9Ri55eWxpbmVubywkPUYueXlsbG9jLFI+MCYmUi0tKTticmVhaztjYXNlIDI6aWYoc2U9dGhpcy5wcm9kdWN0aW9uc19baGVbMV1dWzFdLHRlLiQ9U1tTLmxlbmd0aC1zZV0sdGUuXyQ9e2ZpcnN0X2xpbmU6X1tfLmxlbmd0aC0oc2V8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpfW18ubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46X1tfLmxlbmd0aC0oc2V8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46X1tfLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sSCYmKHRlLl8kLnJhbmdlPVtfW18ubGVuZ3RoLShzZXx8MSldLnJhbmdlWzBdLF9bXy5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxYPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseSh0ZSxbRCxMLGssUC55eSxoZVsxXSxTLF9dLmNvbmNhdChCKSksdHlwZW9mIFg8InUiKXJldHVybiBYO3NlJiYoRT1FLnNsaWNlKDAsLTEqc2UqMiksUz1TLnNsaWNlKDAsLTEqc2UpLF89Xy5zbGljZSgwLC0xKnNlKSksRS5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW2hlWzFdXVswXSksUy5wdXNoKHRlLiQpLF8ucHVzaCh0ZS5fJCksdWU9SVtFW0UubGVuZ3RoLTJdXVtFW0UubGVuZ3RoLTFdXSxFLnB1c2godWUpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9LCJwYXJzZSIpfSx4PWZ1bmN0aW9uKCl7dmFyIHc9e0VPRjoxLHBhcnNlRXJyb3I6byhmdW5jdGlvbihULEUpe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoVCxFKTtlbHNlIHRocm93IG5ldyBFcnJvcihUKX0sInBhcnNlRXJyb3IiKSxzZXRJbnB1dDpvKGZ1bmN0aW9uKEMsVCl7cmV0dXJuIHRoaXMueXk9VHx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9Qyx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30sInNldElucHV0IiksaW5wdXQ6byhmdW5jdGlvbigpe3ZhciBDPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1DLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1DLHRoaXMubWF0Y2hlZCs9Qzt2YXIgVD1DLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gVD8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksQ30sImlucHV0IiksdW5wdXQ6byhmdW5jdGlvbihDKXt2YXIgVD1DLmxlbmd0aCxFPUMuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD1DK3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1UKSx0aGlzLm9mZnNldC09VDt2YXIgQT10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxFLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09RS5sZW5ndGgtMSk7dmFyIFM9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOkU/KEUubGVuZ3RoPT09QS5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK0FbQS5sZW5ndGgtRS5sZW5ndGhdLmxlbmd0aC1FWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tVH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtTWzBdLFNbMF0rdGhpcy55eWxlbmctVF0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSwidW5wdXQiKSxtb3JlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSwibW9yZSIpLHJlamVjdDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSwicmVqZWN0IiksbGVzczpvKGZ1bmN0aW9uKEMpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShDKSl9LCJsZXNzIikscGFzdElucHV0Om8oZnVuY3Rpb24oKXt2YXIgQz10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKEMubGVuZ3RoPjIwPyIuLi4iOiIiKStDLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSwicGFzdElucHV0IiksdXBjb21pbmdJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIEM9dGhpcy5tYXRjaDtyZXR1cm4gQy5sZW5ndGg8MjAmJihDKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1DLmxlbmd0aCkpLChDLnN1YnN0cigwLDIwKSsoQy5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sInVwY29taW5nSW5wdXQiKSxzaG93UG9zaXRpb246byhmdW5jdGlvbigpe3ZhciBDPXRoaXMucGFzdElucHV0KCksVD1uZXcgQXJyYXkoQy5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBDK3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtUKyJeIn0sInNob3dQb3NpdGlvbiIpLHRlc3RfbWF0Y2g6byhmdW5jdGlvbihDLFQpe3ZhciBFLEEsUztpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoUz17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihTLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLEE9Q1swXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksQSYmKHRoaXMueXlsaW5lbm8rPUEubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46QT9BW0EubGVuZ3RoLTFdLmxlbmd0aC1BW0EubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rQ1swXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1DWzBdLHRoaXMubWF0Y2grPUNbMF0sdGhpcy5tYXRjaGVzPUMsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoQ1swXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9Q1swXSxFPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLFQsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksRSlyZXR1cm4gRTtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgXyBpbiBTKXRoaXNbX109U1tfXTtyZXR1cm4hMX1yZXR1cm4hMX0sInRlc3RfbWF0Y2giKSxuZXh0Om8oZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgQyxULEUsQTt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBTPXRoaXMuX2N1cnJlbnRSdWxlcygpLF89MDtfPFMubGVuZ3RoO18rKylpZihFPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbU1tfXV0pLEUmJighVHx8RVswXS5sZW5ndGg+VFswXS5sZW5ndGgpKXtpZihUPUUsQT1fLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKEM9dGhpcy50ZXN0X21hdGNoKEUsU1tfXSksQyE9PSExKXJldHVybiBDO2lmKHRoaXMuX2JhY2t0cmFjayl7VD0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBUPyhDPXRoaXMudGVzdF9tYXRjaChULFNbQV0pLEMhPT0hMT9DOiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSwibmV4dCIpLGxleDpvKGZ1bmN0aW9uKCl7dmFyIFQ9dGhpcy5uZXh0KCk7cmV0dXJuIFR8fHRoaXMubGV4KCl9LCJsZXgiKSxiZWdpbjpvKGZ1bmN0aW9uKFQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChUKX0sImJlZ2luIikscG9wU3RhdGU6byhmdW5jdGlvbigpe3ZhciBUPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIFQ+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LCJwb3BTdGF0ZSIpLF9jdXJyZW50UnVsZXM6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LCJfY3VycmVudFJ1bGVzIiksdG9wU3RhdGU6byhmdW5jdGlvbihUKXtyZXR1cm4gVD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKFR8fDApLFQ+PTA/dGhpcy5jb25kaXRpb25TdGFja1tUXToiSU5JVElBTCJ9LCJ0b3BTdGF0ZSIpLHB1c2hTdGF0ZTpvKGZ1bmN0aW9uKFQpe3RoaXMuYmVnaW4oVCl9LCJwdXNoU3RhdGUiKSxzdGF0ZVN0YWNrU2l6ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSwic3RhdGVTdGFja1NpemUiKSxvcHRpb25zOnt9LHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbihULEUsQSxTKXt2YXIgXz1TO3N3aXRjaChBKXtjYXNlIDA6cmV0dXJuIDEwO2Nhc2UgMTpyZXR1cm4gVC5nZXRMb2dnZXIoKS5kZWJ1ZygiRm91bmQgc3BhY2UtYmxvY2siKSwzMTticmVhaztjYXNlIDI6cmV0dXJuIFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkZvdW5kIG5sLWJsb2NrIiksMzE7YnJlYWs7Y2FzZSAzOnJldHVybiBULmdldExvZ2dlcigpLmRlYnVnKCJGb3VuZCBzcGFjZS1ibG9jayIpLDI5O2JyZWFrO2Nhc2UgNDpULmdldExvZ2dlcigpLmRlYnVnKCIuIixFLnl5dGV4dCk7YnJlYWs7Y2FzZSA1OlQuZ2V0TG9nZ2VyKCkuZGVidWcoIl8iLEUueXl0ZXh0KTticmVhaztjYXNlIDY6cmV0dXJuIDU7Y2FzZSA3OnJldHVybiBFLnl5dGV4dD0tMSwyODticmVhaztjYXNlIDg6cmV0dXJuIEUueXl0ZXh0PUUueXl0ZXh0LnJlcGxhY2UoL2NvbHVtbnNccysvLCIiKSxULmdldExvZ2dlcigpLmRlYnVnKCJDT0xVTU5TIChMRVgpIixFLnl5dGV4dCksMjg7YnJlYWs7Y2FzZSA5OnRoaXMucHVzaFN0YXRlKCJtZF9zdHJpbmciKTticmVhaztjYXNlIDEwOnJldHVybiJNRF9TVFIiO2Nhc2UgMTE6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTI6dGhpcy5wdXNoU3RhdGUoInN0cmluZyIpO2JyZWFrO2Nhc2UgMTM6VC5nZXRMb2dnZXIoKS5kZWJ1ZygiTEVYOiBQT1BQSU5HIFNUUjoiLEUueXl0ZXh0KSx0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxNDpyZXR1cm4gVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTEVYOiBTVFIgZW5kOiIsRS55eXRleHQpLCJTVFIiO2JyZWFrO2Nhc2UgMTU6cmV0dXJuIEUueXl0ZXh0PUUueXl0ZXh0LnJlcGxhY2UoL3NwYWNlXDovLCIiKSxULmdldExvZ2dlcigpLmRlYnVnKCJTUEFDRSBOVU0gKExFWCkiLEUueXl0ZXh0KSwyMTticmVhaztjYXNlIDE2OnJldHVybiBFLnl5dGV4dD0iMSIsVC5nZXRMb2dnZXIoKS5kZWJ1ZygiQ09MVU1OUyAoTEVYKSIsRS55eXRleHQpLDIxO2JyZWFrO2Nhc2UgMTc6cmV0dXJuIDQzO2Nhc2UgMTg6cmV0dXJuIkxJTktTVFlMRSI7Y2FzZSAxOTpyZXR1cm4iSU5URVJQT0xBVEUiO2Nhc2UgMjA6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJDTEFTU0RFRiIpLDQwO2JyZWFrO2Nhc2UgMjE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiQ0xBU1NERUZJRCIpLCJERUZBVUxUX0NMQVNTREVGX0lEIjticmVhaztjYXNlIDIyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIkNMQVNTREVGSUQiKSw0MTticmVhaztjYXNlIDIzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNDI7YnJlYWs7Y2FzZSAyNDpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIkNMQVNTIiksNDQ7YnJlYWs7Y2FzZSAyNTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJDTEFTU19TVFlMRSIpLDQ1O2JyZWFrO2Nhc2UgMjY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw0NjticmVhaztjYXNlIDI3OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiU1RZTEVfU1RNTlQiKSw0NzticmVhaztjYXNlIDI4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIlNUWUxFX0RFRklOSVRJT04iKSw0ODticmVhaztjYXNlIDI5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNDk7YnJlYWs7Y2FzZSAzMDpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImFjY190aXRsZSIpLCJhY2NfdGl0bGUiO2JyZWFrO2Nhc2UgMzE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjticmVhaztjYXNlIDMyOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiYWNjX2Rlc2NyIiksImFjY19kZXNjciI7YnJlYWs7Y2FzZSAzMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2JyZWFrO2Nhc2UgMzQ6dGhpcy5wdXNoU3RhdGUoImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDM1OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDM2OnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDM3OnJldHVybiAzMDtjYXNlIDM4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiAoKCIpLCJOT0RFX0RFTkQiO2JyZWFrO2Nhc2UgMzk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxULmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ICgoIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSA0MDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogKSkiKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDQxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiAoKCIpLCJOT0RFX0RFTkQiO2JyZWFrO2Nhc2UgNDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxULmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ICgoIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSA0MzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogKC0iKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDQ0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiAtKSIpLCJOT0RFX0RFTkQiO2JyZWFrO2Nhc2UgNDU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxULmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ICgoIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSA0NjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogXV0iKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDQ3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiAoIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSA0ODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogXSkiKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDQ5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiAvXSIpLCJOT0RFX0RFTkQiO2JyZWFrO2Nhc2UgNTA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxULmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IC9dIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSA1MTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogKV0iKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDUyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiApIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSA1MzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogXT4iKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDU0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBdIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSA1NTpyZXR1cm4gVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4YTogLSkiKSx0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2JyZWFrO2Nhc2UgNTY6cmV0dXJuIFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleGE6ICgtIiksdGhpcy5wdXNoU3RhdGUoIk5PREUiKSwzNjticmVhaztjYXNlIDU3OnJldHVybiBULmdldExvZ2dlcigpLmRlYnVnKCJMZXhhOiApKSIpLHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7YnJlYWs7Y2FzZSA1ODpyZXR1cm4gVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4YTogKSIpLHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7YnJlYWs7Y2FzZSA1OTpyZXR1cm4gVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiAoKCgiKSx0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2JyZWFrO2Nhc2UgNjA6cmV0dXJuIFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleGE6ICkiKSx0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2JyZWFrO2Nhc2UgNjE6cmV0dXJuIFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleGE6ICkiKSx0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2JyZWFrO2Nhc2UgNjI6cmV0dXJuIFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleGE6ICkiKSx0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2JyZWFrO2Nhc2UgNjM6cmV0dXJuIFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleGM6ID4iKSx0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2JyZWFrO2Nhc2UgNjQ6cmV0dXJuIFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleGE6IChbIiksdGhpcy5wdXNoU3RhdGUoIk5PREUiKSwzNjticmVhaztjYXNlIDY1OnJldHVybiBULmdldExvZ2dlcigpLmRlYnVnKCJMZXhhOiApIiksdGhpcy5wdXNoU3RhdGUoIk5PREUiKSwzNjticmVhaztjYXNlIDY2OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2JyZWFrO2Nhc2UgNjc6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7YnJlYWs7Y2FzZSA2ODpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIk5PREUiKSwzNjticmVhaztjYXNlIDY5OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2JyZWFrO2Nhc2UgNzA6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7YnJlYWs7Y2FzZSA3MTpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIk5PREUiKSwzNjticmVhaztjYXNlIDcyOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2JyZWFrO2Nhc2UgNzM6cmV0dXJuIFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleGE6IFsiKSx0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2JyZWFrO2Nhc2UgNzQ6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJCTE9DS19BUlJPVyIpLFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxFWCBBUlIgU1RBUlQiKSwzODticmVhaztjYXNlIDc1OnJldHVybiBULmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IE5PREVfSUQiLEUueXl0ZXh0KSwzMjticmVhaztjYXNlIDc2OnJldHVybiBULmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IEVPRiIsRS55eXRleHQpLDg7YnJlYWs7Y2FzZSA3Nzp0aGlzLnB1c2hTdGF0ZSgibWRfc3RyaW5nIik7YnJlYWs7Y2FzZSA3ODp0aGlzLnB1c2hTdGF0ZSgibWRfc3RyaW5nIik7YnJlYWs7Y2FzZSA3OTpyZXR1cm4iTk9ERV9ERVNDUiI7Y2FzZSA4MDp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA4MTpULmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IFN0YXJ0aW5nIHN0cmluZyIpLHRoaXMucHVzaFN0YXRlKCJzdHJpbmciKTticmVhaztjYXNlIDgyOlQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxFWCBBUlI6IFN0YXJ0aW5nIHN0cmluZyIpLHRoaXMucHVzaFN0YXRlKCJzdHJpbmciKTticmVhaztjYXNlIDgzOnJldHVybiBULmdldExvZ2dlcigpLmRlYnVnKCJMRVg6IE5PREVfREVTQ1I6IixFLnl5dGV4dCksIk5PREVfREVTQ1IiO2JyZWFrO2Nhc2UgODQ6VC5nZXRMb2dnZXIoKS5kZWJ1ZygiTEVYIFBPUFBJTkciKSx0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA4NTpULmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ID0+QkFFIiksdGhpcy5wdXNoU3RhdGUoIkFSUk9XX0RJUiIpO2JyZWFrO2Nhc2UgODY6cmV0dXJuIEUueXl0ZXh0PUUueXl0ZXh0LnJlcGxhY2UoL14sXHMqLywiIiksVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4IChyaWdodCk6IGRpcjoiLEUueXl0ZXh0KSwiRElSIjticmVhaztjYXNlIDg3OnJldHVybiBFLnl5dGV4dD1FLnl5dGV4dC5yZXBsYWNlKC9eLFxzKi8sIiIpLFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleCAobGVmdCk6IixFLnl5dGV4dCksIkRJUiI7YnJlYWs7Y2FzZSA4ODpyZXR1cm4gRS55eXRleHQ9RS55eXRleHQucmVwbGFjZSgvXixccyovLCIiKSxULmdldExvZ2dlcigpLmRlYnVnKCJMZXggKHgpOiIsRS55eXRleHQpLCJESVIiO2JyZWFrO2Nhc2UgODk6cmV0dXJuIEUueXl0ZXh0PUUueXl0ZXh0LnJlcGxhY2UoL14sXHMqLywiIiksVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4ICh5KToiLEUueXl0ZXh0KSwiRElSIjticmVhaztjYXNlIDkwOnJldHVybiBFLnl5dGV4dD1FLnl5dGV4dC5yZXBsYWNlKC9eLFxzKi8sIiIpLFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleCAodXApOiIsRS55eXRleHQpLCJESVIiO2JyZWFrO2Nhc2UgOTE6cmV0dXJuIEUueXl0ZXh0PUUueXl0ZXh0LnJlcGxhY2UoL14sXHMqLywiIiksVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4IChkb3duKToiLEUueXl0ZXh0KSwiRElSIjticmVhaztjYXNlIDkyOnJldHVybiBFLnl5dGV4dD0iXT4iLFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleCAoQVJST1dfRElSIGVuZCk6IixFLnl5dGV4dCksdGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKSwiQkxPQ0tfQVJST1dfRU5EIjticmVhaztjYXNlIDkzOnJldHVybiBULmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IExJTksiLCIjIitFLnl5dGV4dCsiIyIpLDE1O2JyZWFrO2Nhc2UgOTQ6cmV0dXJuIFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogTElOSyIsRS55eXRleHQpLDE1O2JyZWFrO2Nhc2UgOTU6cmV0dXJuIFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogTElOSyIsRS55eXRleHQpLDE1O2JyZWFrO2Nhc2UgOTY6cmV0dXJuIFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogTElOSyIsRS55eXRleHQpLDE1O2JyZWFrO2Nhc2UgOTc6cmV0dXJuIFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogU1RBUlRfTElOSyIsRS55eXRleHQpLHRoaXMucHVzaFN0YXRlKCJMTEFCRUwiKSwxNjticmVhaztjYXNlIDk4OnJldHVybiBULmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IFNUQVJUX0xJTksiLEUueXl0ZXh0KSx0aGlzLnB1c2hTdGF0ZSgiTExBQkVMIiksMTY7YnJlYWs7Y2FzZSA5OTpyZXR1cm4gVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBTVEFSVF9MSU5LIixFLnl5dGV4dCksdGhpcy5wdXNoU3RhdGUoIkxMQUJFTCIpLDE2O2JyZWFrO2Nhc2UgMTAwOnRoaXMucHVzaFN0YXRlKCJtZF9zdHJpbmciKTticmVhaztjYXNlIDEwMTpyZXR1cm4gVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBTdGFydGluZyBzdHJpbmciKSx0aGlzLnB1c2hTdGF0ZSgic3RyaW5nIiksIkxJTktfTEFCRUwiO2JyZWFrO2Nhc2UgMTAyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBMSU5LIiwiIyIrRS55eXRleHQrIiMiKSwxNTticmVhaztjYXNlIDEwMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogTElOSyIsRS55eXRleHQpLDE1O2JyZWFrO2Nhc2UgMTA0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksVC5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBMSU5LIixFLnl5dGV4dCksMTU7YnJlYWs7Y2FzZSAxMDU6cmV0dXJuIFQuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogQ09MT04iLEUueXl0ZXh0KSxFLnl5dGV4dD1FLnl5dGV4dC5zbGljZSgxKSwyNzticmVha319LCJhbm9ueW1vdXMiKSxydWxlczpbL14oPzpibG9jay1iZXRhXGIpLywvXig/OmJsb2NrXHMrKS8sL14oPzpibG9ja1xuKykvLC9eKD86YmxvY2s6KS8sL14oPzpbXHNdKykvLC9eKD86W1xuXSspLywvXig/OigoXHUwMDBEXHUwMDBBKXwoXHUwMDBBKSkpLywvXig/OmNvbHVtbnNccythdXRvXGIpLywvXig/OmNvbHVtbnNccytbXGRdKykvLC9eKD86WyJdW2BdKS8sL14oPzpbXmAiXSspLywvXig/OltgXVsiXSkvLC9eKD86WyJdKS8sL14oPzpbIl0pLywvXig/OlteIl0qKS8sL14oPzpzcGFjZVs6XVxkKykvLC9eKD86c3BhY2VcYikvLC9eKD86ZGVmYXVsdFxiKS8sL14oPzpsaW5rU3R5bGVcYikvLC9eKD86aW50ZXJwb2xhdGVcYikvLC9eKD86Y2xhc3NEZWZccyspLywvXig/OkRFRkFVTFRccyspLywvXig/Olx3K1xzKykvLC9eKD86W15cbl0qKS8sL14oPzpjbGFzc1xzKykvLC9eKD86KFx3KykrKCgsXHMqXHcrKSopKS8sL14oPzpbXlxuXSopLywvXig/OnN0eWxlXHMrKS8sL14oPzooXHcrKSsoKCxccypcdyspKikpLywvXig/OlteXG5dKikvLC9eKD86YWNjVGl0bGVccyo6XHMqKS8sL14oPzooPyFcbnx8KSpbXlxuXSopLywvXig/OmFjY0Rlc2NyXHMqOlxzKikvLC9eKD86KD8hXG58fCkqW15cbl0qKS8sL14oPzphY2NEZXNjclxzKlx7XHMqKS8sL14oPzpbXH1dKS8sL14oPzpbXlx9XSopLywvXig/OmVuZFxiXHMqKS8sL14oPzpcKFwoXCgpLywvXig/OlwpXClcKSkvLC9eKD86W1wpXVwpKS8sL14oPzpcfVx9KS8sL14oPzpcfSkvLC9eKD86XCgtKS8sL14oPzotXCkpLywvXig/OlwoXCgpLywvXig/OlxdXF0pLywvXig/OlwoKS8sL14oPzpcXVwpKS8sL14oPzpcXFxdKS8sL14oPzpcL1xdKS8sL14oPzpcKVxdKS8sL14oPzpbXCldKS8sL14oPzpcXT4pLywvXig/OltcXV0pLywvXig/Oi1cKSkvLC9eKD86XCgtKS8sL14oPzpcKVwpKS8sL14oPzpcKSkvLC9eKD86XChcKFwoKS8sL14oPzpcKFwoKS8sL14oPzpce1x7KS8sL14oPzpceykvLC9eKD86PikvLC9eKD86XChcWykvLC9eKD86XCgpLywvXig/OlxbXFspLywvXig/OlxbXHwpLywvXig/OlxbXCgpLywvXig/OlwpXClcKSkvLC9eKD86XFtcXCkvLC9eKD86XFtcLykvLC9eKD86XFtcXCkvLC9eKD86XFspLywvXig/OjxcWykvLC9eKD86W15cKFxbXG5cLVwpXHtcfVxzXDxcPjpdKykvLC9eKD86JCkvLC9eKD86WyJdW2BdKS8sL14oPzpbIl1bYF0pLywvXig/OlteYCJdKykvLC9eKD86W2BdWyJdKS8sL14oPzpbIl0pLywvXig/OlsiXSkvLC9eKD86W14iXSspLywvXig/OlsiXSkvLC9eKD86XF0+XHMqXCgpLywvXig/Oiw/XHMqcmlnaHRccyopLywvXig/Oiw/XHMqbGVmdFxzKikvLC9eKD86LD9ccyp4XHMqKS8sL14oPzosP1xzKnlccyopLywvXig/Oiw/XHMqdXBccyopLywvXig/Oiw/XHMqZG93blxzKikvLC9eKD86XClccyopLywvXig/OlxzKlt4bzxdPy0tK1steG8+XVxzKikvLC9eKD86XHMqW3hvPF0/PT0rWz14bz5dXHMqKS8sL14oPzpccypbeG88XT8tP1wuKy1beG8+XT9ccyopLywvXig/OlxzKn5+W1x+XStccyopLywvXig/OlxzKlt4bzxdPy0tXHMqKS8sL14oPzpccypbeG88XT89PVxzKikvLC9eKD86XHMqW3hvPF0/LVwuXHMqKS8sL14oPzpbIl1bYF0pLywvXig/OlsiXSkvLC9eKD86XHMqW3hvPF0/LS0rWy14bz5dXHMqKS8sL14oPzpccypbeG88XT89PStbPXhvPl1ccyopLywvXig/OlxzKlt4bzxdPy0/XC4rLVt4bz5dP1xzKikvLC9eKD86OlxkKykvXSxjb25kaXRpb25zOntTVFlMRV9ERUZJTklUSU9OOntydWxlczpbMjldLGluY2x1c2l2ZTohMX0sU1RZTEVfU1RNTlQ6e3J1bGVzOlsyOF0saW5jbHVzaXZlOiExfSxDTEFTU0RFRklEOntydWxlczpbMjNdLGluY2x1c2l2ZTohMX0sQ0xBU1NERUY6e3J1bGVzOlsyMSwyMl0saW5jbHVzaXZlOiExfSxDTEFTU19TVFlMRTp7cnVsZXM6WzI2XSxpbmNsdXNpdmU6ITF9LENMQVNTOntydWxlczpbMjVdLGluY2x1c2l2ZTohMX0sTExBQkVMOntydWxlczpbMTAwLDEwMSwxMDIsMTAzLDEwNF0saW5jbHVzaXZlOiExfSxBUlJPV19ESVI6e3J1bGVzOls4Niw4Nyw4OCw4OSw5MCw5MSw5Ml0saW5jbHVzaXZlOiExfSxCTE9DS19BUlJPVzp7cnVsZXM6Wzc3LDgyLDg1XSxpbmNsdXNpdmU6ITF9LE5PREU6e3J1bGVzOlszOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw3OCw4MV0saW5jbHVzaXZlOiExfSxtZF9zdHJpbmc6e3J1bGVzOlsxMCwxMSw3OSw4MF0saW5jbHVzaXZlOiExfSxzcGFjZTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxzdHJpbmc6e3J1bGVzOlsxMywxNCw4Myw4NF0saW5jbHVzaXZlOiExfSxhY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbMzUsMzZdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbMzNdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbMzFdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw1LDYsNyw4LDksMTIsMTUsMTYsMTcsMTgsMTksMjAsMjQsMjcsMzAsMzIsMzQsMzcsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsOTMsOTQsOTUsOTYsOTcsOTgsOTksMTA1XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIHd9KCk7di5sZXhlcj14O2Z1bmN0aW9uIGIoKXt0aGlzLnl5PXt9fXJldHVybiBvKGIsIlBhcnNlciIpLGIucHJvdG90eXBlPXYsdi5QYXJzZXI9YixuZXcgYn0oKTtLQi5wYXJzZXI9S0I7YnllPUtCfSk7ZnVuY3Rpb24gWWV0KHQpe3N3aXRjaChZLmRlYnVnKCJ0eXBlU3RyMlR5cGUiLHQpLHQpe2Nhc2UiW10iOnJldHVybiJzcXVhcmUiO2Nhc2UiKCkiOnJldHVybiBZLmRlYnVnKCJ3ZSBoYXZlIGEgcm91bmQiKSwicm91bmQiO2Nhc2UiKCgpKSI6cmV0dXJuImNpcmNsZSI7Y2FzZSI+XSI6cmV0dXJuInJlY3RfbGVmdF9pbnZfYXJyb3ciO2Nhc2Uie30iOnJldHVybiJkaWFtb25kIjtjYXNlInt7fX0iOnJldHVybiJoZXhhZ29uIjtjYXNlIihbXSkiOnJldHVybiJzdGFkaXVtIjtjYXNlIltbXV0iOnJldHVybiJzdWJyb3V0aW5lIjtjYXNlIlsoKV0iOnJldHVybiJjeWxpbmRlciI7Y2FzZSIoKCgpKSkiOnJldHVybiJkb3VibGVjaXJjbGUiO2Nhc2UiWy8vXSI6cmV0dXJuImxlYW5fcmlnaHQiO2Nhc2UiW1xcXFxdIjpyZXR1cm4ibGVhbl9sZWZ0IjtjYXNlIlsvXFxdIjpyZXR1cm4idHJhcGV6b2lkIjtjYXNlIltcXC9dIjpyZXR1cm4iaW52X3RyYXBlem9pZCI7Y2FzZSI8W10+IjpyZXR1cm4iYmxvY2tfYXJyb3ciO2RlZmF1bHQ6cmV0dXJuIm5hIn19ZnVuY3Rpb24gWGV0KHQpe3N3aXRjaChZLmRlYnVnKCJ0eXBlU3RyMlR5cGUiLHQpLHQpe2Nhc2UiPT0iOnJldHVybiJ0aGljayI7ZGVmYXVsdDpyZXR1cm4ibm9ybWFsIn19ZnVuY3Rpb24gamV0KHQpe3N3aXRjaCh0LnRyaW0oKSl7Y2FzZSItLXgiOnJldHVybiJhcnJvd19jcm9zcyI7Y2FzZSItLW8iOnJldHVybiJhcnJvd19jaXJjbGUiO2RlZmF1bHQ6cmV0dXJuImFycm93X3BvaW50In19dmFyIFVsLFpCLFFCLFR5ZSxreWUsemV0LFN5ZSxHZXQsZUMsVmV0LFVldCxIZXQsV2V0LEN5ZSxKQix5NCxxZXQsRXllLEtldCxRZXQsWmV0LEpldCxldHQsdHR0LHJ0dCxudHQsaXR0LGF0dCxzdHQsQXllLF95ZT1OKCgpPT57InVzZSBzdHJpY3QiO2dMKCk7amkoKTt6dCgpO3Z0KCk7Z3IoKTttaSgpO1VsPW5ldyBNYXAsWkI9W10sUUI9bmV3IE1hcCxUeWU9ImNvbG9yIixreWU9ImZpbGwiLHpldD0iYmdGaWxsIixTeWU9IiwiLEdldD1tZSgpLGVDPW5ldyBNYXAsVmV0PW8odD0+WmUuc2FuaXRpemVUZXh0KHQsR2V0KSwic2FuaXRpemVUZXh0IiksVWV0PW8oZnVuY3Rpb24odCxlPSIiKXtsZXQgcj1lQy5nZXQodCk7cnx8KHI9e2lkOnQsc3R5bGVzOltdLHRleHRTdHlsZXM6W119LGVDLnNldCh0LHIpKSxlPy5zcGxpdChTeWUpLmZvckVhY2gobj0+e2xldCBpPW4ucmVwbGFjZSgvKFteO10qKTsvLCIkMSIpLnRyaW0oKTtpZihSZWdFeHAoVHllKS5leGVjKG4pKXtsZXQgcz1pLnJlcGxhY2Uoa3llLHpldCkucmVwbGFjZShUeWUsa3llKTtyLnRleHRTdHlsZXMucHVzaChzKX1yLnN0eWxlcy5wdXNoKGkpfSl9LCJhZGRTdHlsZUNsYXNzIiksSGV0PW8oZnVuY3Rpb24odCxlPSIiKXtsZXQgcj1VbC5nZXQodCk7ZSE9bnVsbCYmKHIuc3R5bGVzPWUuc3BsaXQoU3llKSl9LCJhZGRTdHlsZTJOb2RlIiksV2V0PW8oZnVuY3Rpb24odCxlKXt0LnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbihyKXtsZXQgbj1VbC5nZXQocik7aWYobj09PXZvaWQgMCl7bGV0IGk9ci50cmltKCk7bj17aWQ6aSx0eXBlOiJuYSIsY2hpbGRyZW46W119LFVsLnNldChpLG4pfW4uY2xhc3Nlc3x8KG4uY2xhc3Nlcz1bXSksbi5jbGFzc2VzLnB1c2goZSl9KX0sInNldENzc0NsYXNzIiksQ3llPW8oKHQsZSk9PntsZXQgcj10LmZsYXQoKSxuPVtdO2ZvcihsZXQgaSBvZiByKXtpZihpLmxhYmVsJiYoaS5sYWJlbD1WZXQoaS5sYWJlbCkpLGkudHlwZT09PSJjbGFzc0RlZiIpe1VldChpLmlkLGkuY3NzKTtjb250aW51ZX1pZihpLnR5cGU9PT0iYXBwbHlDbGFzcyIpe1dldChpLmlkLGk/LnN0eWxlQ2xhc3M/PyIiKTtjb250aW51ZX1pZihpLnR5cGU9PT0iYXBwbHlTdHlsZXMiKXtpPy5zdHlsZXNTdHImJkhldChpLmlkLGk/LnN0eWxlc1N0cik7Y29udGludWV9aWYoaS50eXBlPT09ImNvbHVtbi1zZXR0aW5nIillLmNvbHVtbnM9aS5jb2x1bW5zPz8tMTtlbHNlIGlmKGkudHlwZT09PSJlZGdlIil7bGV0IGE9KFFCLmdldChpLmlkKT8/MCkrMTtRQi5zZXQoaS5pZCxhKSxpLmlkPWErIi0iK2kuaWQsWkIucHVzaChpKX1lbHNle2kubGFiZWx8fChpLnR5cGU9PT0iY29tcG9zaXRlIj9pLmxhYmVsPSIiOmkubGFiZWw9aS5pZCk7bGV0IGE9VWwuZ2V0KGkuaWQpO2lmKGE9PT12b2lkIDA/VWwuc2V0KGkuaWQsaSk6KGkudHlwZSE9PSJuYSImJihhLnR5cGU9aS50eXBlKSxpLmxhYmVsIT09aS5pZCYmKGEubGFiZWw9aS5sYWJlbCkpLGkuY2hpbGRyZW4mJkN5ZShpLmNoaWxkcmVuLGkpLGkudHlwZT09PSJzcGFjZSIpe2xldCBzPWkud2lkdGg/PzE7Zm9yKGxldCBsPTA7bDxzO2wrKyl7bGV0IHU9YW4oaSk7dS5pZD11LmlkKyItIitsLFVsLnNldCh1LmlkLHUpLG4ucHVzaCh1KX19ZWxzZSBhPT09dm9pZCAwJiZuLnB1c2goaSl9fWUuY2hpbGRyZW49bn0sInBvcHVsYXRlQmxvY2tEYXRhYmFzZSIpLEpCPVtdLHk0PXtpZDoicm9vdCIsdHlwZToiY29tcG9zaXRlIixjaGlsZHJlbjpbXSxjb2x1bW5zOi0xfSxxZXQ9bygoKT0+e1kuZGVidWcoIkNsZWFyIGNhbGxlZCIpLEFyKCkseTQ9e2lkOiJyb290Iix0eXBlOiJjb21wb3NpdGUiLGNoaWxkcmVuOltdLGNvbHVtbnM6LTF9LFVsPW5ldyBNYXAoW1sicm9vdCIseTRdXSksSkI9W10sZUM9bmV3IE1hcCxaQj1bXSxRQj1uZXcgTWFwfSwiY2xlYXIiKTtvKFlldCwidHlwZVN0cjJUeXBlIik7byhYZXQsImVkZ2VUeXBlU3RyMlR5cGUiKTtvKGpldCwiZWRnZVN0clRvRWRnZURhdGEiKTtFeWU9MCxLZXQ9bygoKT0+KEV5ZSsrLCJpZC0iK01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLDEyKSsiLSIrRXllKSwiZ2VuZXJhdGVJZCIpLFFldD1vKHQ9Pnt5NC5jaGlsZHJlbj10LEN5ZSh0LHk0KSxKQj15NC5jaGlsZHJlbn0sInNldEhpZXJhcmNoeSIpLFpldD1vKHQ9PntsZXQgZT1VbC5nZXQodCk7cmV0dXJuIGU/ZS5jb2x1bW5zP2UuY29sdW1uczplLmNoaWxkcmVuP2UuY2hpbGRyZW4ubGVuZ3RoOi0xOi0xfSwiZ2V0Q29sdW1ucyIpLEpldD1vKCgpPT5bLi4uVWwudmFsdWVzKCldLCJnZXRCbG9ja3NGbGF0IiksZXR0PW8oKCk9PkpCfHxbXSwiZ2V0QmxvY2tzIiksdHR0PW8oKCk9PlpCLCJnZXRFZGdlcyIpLHJ0dD1vKHQ9PlVsLmdldCh0KSwiZ2V0QmxvY2siKSxudHQ9byh0PT57VWwuc2V0KHQuaWQsdCl9LCJzZXRCbG9jayIpLGl0dD1vKCgpPT5jb25zb2xlLCJnZXRMb2dnZXIiKSxhdHQ9byhmdW5jdGlvbigpe3JldHVybiBlQ30sImdldENsYXNzZXMiKSxzdHQ9e2dldENvbmZpZzpvKCgpPT5jcigpLmJsb2NrLCJnZXRDb25maWciKSx0eXBlU3RyMlR5cGU6WWV0LGVkZ2VUeXBlU3RyMlR5cGU6WGV0LGVkZ2VTdHJUb0VkZ2VEYXRhOmpldCxnZXRMb2dnZXI6aXR0LGdldEJsb2Nrc0ZsYXQ6SmV0LGdldEJsb2NrczpldHQsZ2V0RWRnZXM6dHR0LHNldEhpZXJhcmNoeTpRZXQsZ2V0QmxvY2s6cnR0LHNldEJsb2NrOm50dCxnZXRDb2x1bW5zOlpldCxnZXRDbGFzc2VzOmF0dCxjbGVhcjpxZXQsZ2VuZXJhdGVJZDpLZXR9LEF5ZT1zdHR9KTt2YXIgdEMsb3R0LER5ZSxMeWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtZcygpO3RDPW8oKHQsZSk9PntsZXQgcj1LZixuPXIodCwiciIpLGk9cih0LCJnIiksYT1yKHQsImIiKTtyZXR1cm4gcWEobixpLGEsZSl9LCJmYWRlIiksb3R0PW8odD0+YC5sYWJlbCB7CiAgICBmb250LWZhbWlseTogJHt0LmZvbnRGYW1pbHl9OwogICAgY29sb3I6ICR7dC5ub2RlVGV4dENvbG9yfHx0LnRleHRDb2xvcn07CiAgfQogIC5jbHVzdGVyLWxhYmVsIHRleHQgewogICAgZmlsbDogJHt0LnRpdGxlQ29sb3J9OwogIH0KICAuY2x1c3Rlci1sYWJlbCBzcGFuLHAgewogICAgY29sb3I6ICR7dC50aXRsZUNvbG9yfTsKICB9CgoKCiAgLmxhYmVsIHRleHQsc3BhbixwIHsKICAgIGZpbGw6ICR7dC5ub2RlVGV4dENvbG9yfHx0LnRleHRDb2xvcn07CiAgICBjb2xvcjogJHt0Lm5vZGVUZXh0Q29sb3J8fHQudGV4dENvbG9yfTsKICB9CgogIC5ub2RlIHJlY3QsCiAgLm5vZGUgY2lyY2xlLAogIC5ub2RlIGVsbGlwc2UsCiAgLm5vZGUgcG9seWdvbiwKICAubm9kZSBwYXRoIHsKICAgIGZpbGw6ICR7dC5tYWluQmtnfTsKICAgIHN0cm9rZTogJHt0Lm5vZGVCb3JkZXJ9OwogICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgfQogIC5mbG93Y2hhcnQtbGFiZWwgdGV4dCB7CiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogIH0KICAvLyAuZmxvd2NoYXJ0LWxhYmVsIC50ZXh0LW91dGVyLXRzcGFuIHsKICAvLyAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgLy8gfQogIC8vIC5mbG93Y2hhcnQtbGFiZWwgLnRleHQtaW5uZXItdHNwYW4gewogIC8vICAgdGV4dC1hbmNob3I6IHN0YXJ0OwogIC8vIH0KCiAgLm5vZGUgLmxhYmVsIHsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICB9CiAgLm5vZGUuY2xpY2thYmxlIHsKICAgIGN1cnNvcjogcG9pbnRlcjsKICB9CgogIC5hcnJvd2hlYWRQYXRoIHsKICAgIGZpbGw6ICR7dC5hcnJvd2hlYWRDb2xvcn07CiAgfQoKICAuZWRnZVBhdGggLnBhdGggewogICAgc3Ryb2tlOiAke3QubGluZUNvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogMi4wcHg7CiAgfQoKICAuZmxvd2NoYXJ0LWxpbmsgewogICAgc3Ryb2tlOiAke3QubGluZUNvbG9yfTsKICAgIGZpbGw6IG5vbmU7CiAgfQoKICAuZWRnZUxhYmVsIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICR7dC5lZGdlTGFiZWxCYWNrZ3JvdW5kfTsKICAgIHJlY3QgewogICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7dC5lZGdlTGFiZWxCYWNrZ3JvdW5kfTsKICAgICAgZmlsbDogJHt0LmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgfQogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KCiAgLyogRm9yIGh0bWwgbGFiZWxzIG9ubHkgKi8KICAubGFiZWxCa2cgewogICAgYmFja2dyb3VuZC1jb2xvcjogJHt0Qyh0LmVkZ2VMYWJlbEJhY2tncm91bmQsLjUpfTsKICAgIC8vIGJhY2tncm91bmQtY29sb3I6CiAgfQoKICAubm9kZSAuY2x1c3RlciB7CiAgICAvLyBmaWxsOiAke3RDKHQubWFpbkJrZywuNSl9OwogICAgZmlsbDogJHt0Qyh0LmNsdXN0ZXJCa2csLjUpfTsKICAgIHN0cm9rZTogJHt0Qyh0LmNsdXN0ZXJCb3JkZXIsLjIpfTsKICAgIGJveC1zaGFkb3c6IHJnYmEoNTAsIDUwLCA5MywgMC4yNSkgMHB4IDEzcHggMjdweCAtNXB4LCByZ2JhKDAsIDAsIDAsIDAuMykgMHB4IDhweCAxNnB4IC04cHg7CiAgICBzdHJva2Utd2lkdGg6IDFweDsKICB9CgogIC5jbHVzdGVyIHRleHQgewogICAgZmlsbDogJHt0LnRpdGxlQ29sb3J9OwogIH0KCiAgLmNsdXN0ZXIgc3BhbixwIHsKICAgIGNvbG9yOiAke3QudGl0bGVDb2xvcn07CiAgfQogIC8qIC5jbHVzdGVyIGRpdiB7CiAgICBjb2xvcjogJHt0LnRpdGxlQ29sb3J9OwogIH0gKi8KCiAgZGl2Lm1lcm1haWRUb29sdGlwIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIG1heC13aWR0aDogMjAwcHg7CiAgICBwYWRkaW5nOiAycHg7CiAgICBmb250LWZhbWlseTogJHt0LmZvbnRGYW1pbHl9OwogICAgZm9udC1zaXplOiAxMnB4OwogICAgYmFja2dyb3VuZDogJHt0LnRlcnRpYXJ5Q29sb3J9OwogICAgYm9yZGVyOiAxcHggc29saWQgJHt0LmJvcmRlcjJ9OwogICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB6LWluZGV4OiAxMDA7CiAgfQoKICAuZmxvd2NoYXJ0VGl0bGVUZXh0IHsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICBmb250LXNpemU6IDE4cHg7CiAgICBmaWxsOiAke3QudGV4dENvbG9yfTsKICB9CmAsImdldFN0eWxlcyIpLER5ZT1vdHR9KTt2YXIgbHR0LGN0dCx1dHQsaHR0LGZ0dCxkdHQscHR0LG10dCxndHQseXR0LHZ0dCxSeWUsTnllPU4oKCk9PnsidXNlIHN0cmljdCI7dnQoKTtsdHQ9bygodCxlLHIsbik9PntlLmZvckVhY2goaT0+e3Z0dFtpXSh0LHIsbil9KX0sImluc2VydE1hcmtlcnMiKSxjdHQ9bygodCxlLHIpPT57WS50cmFjZSgiTWFraW5nIG1hcmtlcnMgZm9yICIsciksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItZXh0ZW5zaW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBleHRlbnNpb24gIitlKS5hdHRyKCJyZWZYIiwxOCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDcgTDE4LDEzIFYgMSBaIiksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItZXh0ZW5zaW9uRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgZXh0ZW5zaW9uICIrZSkuYXR0cigicmVmWCIsMSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSwxIFYgMTMgTDE4LDcgWiIpfSwiZXh0ZW5zaW9uIiksdXR0PW8oKHQsZSxyKT0+e3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWNvbXBvc2l0aW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBjb21wb3NpdGlvbiAiK2UpLmF0dHIoInJlZlgiLDE4KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1jb21wb3NpdGlvbkVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGNvbXBvc2l0aW9uICIrZSkuYXR0cigicmVmWCIsMSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpfSwiY29tcG9zaXRpb24iKSxodHQ9bygodCxlLHIpPT57dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItYWdncmVnYXRpb25TdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGFnZ3JlZ2F0aW9uICIrZSkuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWFnZ3JlZ2F0aW9uRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgYWdncmVnYXRpb24gIitlKS5hdHRyKCJyZWZYIiwxKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIil9LCJhZ2dyZWdhdGlvbiIpLGZ0dD1vKCh0LGUscik9Pnt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1kZXBlbmRlbmN5U3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBkZXBlbmRlbmN5ICIrZSkuYXR0cigicmVmWCIsNikuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSA1LDcgTDksMTMgTDEsNyBMOSwxIFoiKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1kZXBlbmRlbmN5RW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgZGVwZW5kZW5jeSAiK2UpLmF0dHIoInJlZlgiLDEzKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpfSwiZGVwZW5kZW5jeSIpLGR0dD1vKCh0LGUscik9Pnt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1sb2xsaXBvcFN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgbG9sbGlwb3AgIitlKS5hdHRyKCJyZWZYIiwxMykuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInN0cm9rZSIsImJsYWNrIikuYXR0cigiZmlsbCIsInRyYW5zcGFyZW50IikuYXR0cigiY3giLDcpLmF0dHIoImN5Iiw3KS5hdHRyKCJyIiw2KSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1sb2xsaXBvcEVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGxvbGxpcG9wICIrZSkuYXR0cigicmVmWCIsMSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInN0cm9rZSIsImJsYWNrIikuYXR0cigiZmlsbCIsInRyYW5zcGFyZW50IikuYXR0cigiY3giLDcpLmF0dHIoImN5Iiw3KS5hdHRyKCJyIiw2KX0sImxvbGxpcG9wIikscHR0PW8oKHQsZSxyKT0+e3QuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLXBvaW50RW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgIitlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsNikuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMikuYXR0cigibWFya2VySGVpZ2h0IiwxMikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgMCBMIDEwIDUgTCAwIDEwIHoiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIiksdC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItcG9pbnRTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyICIrZSkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDQuNSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMikuYXR0cigibWFya2VySGVpZ2h0IiwxMikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgNSBMIDEwIDEwIEwgMTAgMCB6IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpfSwicG9pbnQiKSxtdHQ9bygodCxlLHIpPT57dC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItY2lyY2xlRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgIitlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsMTEpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTEpLmF0dHIoIm1hcmtlckhlaWdodCIsMTEpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IiwiNSIpLmF0dHIoImN5IiwiNSIpLmF0dHIoInIiLCI1IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpLHQuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWNpcmNsZVN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgIitlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsLTEpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTEpLmF0dHIoIm1hcmtlckhlaWdodCIsMTEpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IiwiNSIpLmF0dHIoImN5IiwiNSIpLmF0dHIoInIiLCI1IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpfSwiY2lyY2xlIiksZ3R0PW8oKHQsZSxyKT0+e3QuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWNyb3NzRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgY3Jvc3MgIitlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDExIDExIikuYXR0cigicmVmWCIsMTIpLmF0dHIoInJlZlkiLDUuMikuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMSkuYXR0cigibWFya2VySGVpZ2h0IiwxMSkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDEsMSBsIDksOSBNIDEwLDEgbCAtOSw5IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwyKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpLHQuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWNyb3NzU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBjcm9zcyAiK2UpLmF0dHIoInZpZXdCb3giLCIwIDAgMTEgMTEiKS5hdHRyKCJyZWZYIiwtMSkuYXR0cigicmVmWSIsNS4yKS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDExKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDExKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSwxIGwgOSw5IE0gMTAsMSBsIC05LDkiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDIpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIil9LCJjcm9zcyIpLHl0dD1vKCh0LGUscik9Pnt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1iYXJiRW5kIikuYXR0cigicmVmWCIsMTkpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwxNCkuYXR0cigibWFya2VyVW5pdHMiLCJzdHJva2VXaWR0aCIpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOSw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpfSwiYmFyYiIpLHZ0dD17ZXh0ZW5zaW9uOmN0dCxjb21wb3NpdGlvbjp1dHQsYWdncmVnYXRpb246aHR0LGRlcGVuZGVuY3k6ZnR0LGxvbGxpcG9wOmR0dCxwb2ludDpwdHQsY2lyY2xlOm10dCxjcm9zczpndHQsYmFyYjp5dHR9LFJ5ZT1sdHR9KTtmdW5jdGlvbiB4dHQodCxlKXtpZih0PT09MHx8IU51bWJlci5pc0ludGVnZXIodCkpdGhyb3cgbmV3IEVycm9yKCJDb2x1bW5zIG11c3QgYmUgYW4gaW50ZWdlciAhPT0gMC4iKTtpZihlPDB8fCFOdW1iZXIuaXNJbnRlZ2VyKGUpKXRocm93IG5ldyBFcnJvcigiUG9zaXRpb24gbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLiIrZSk7aWYodDwwKXJldHVybntweDplLHB5OjB9O2lmKHQ9PT0xKXJldHVybntweDowLHB5OmV9O2xldCByPWUldCxuPU1hdGguZmxvb3IoZS90KTtyZXR1cm57cHg6cixweTpufX1mdW5jdGlvbiBlRih0LGUscj0wLG49MCl7WS5kZWJ1Zygic2V0QmxvY2tTaXplcyBhYmM5NSAoc3RhcnQpIix0LmlkLHQ/LnNpemU/LngsImJsb2NrIHdpZHRoID0iLHQ/LnNpemUsInNpZWJsaW5nV2lkdGgiLHIpLHQ/LnNpemU/LndpZHRofHwodC5zaXplPXt3aWR0aDpyLGhlaWdodDpuLHg6MCx5OjB9KTtsZXQgaT0wLGE9MDtpZih0LmNoaWxkcmVuPy5sZW5ndGg+MCl7Zm9yKGxldCBtIG9mIHQuY2hpbGRyZW4pZUYobSxlKTtsZXQgcz1idHQodCk7aT1zLndpZHRoLGE9cy5oZWlnaHQsWS5kZWJ1Zygic2V0QmxvY2tTaXplcyBhYmM5NSBtYXhXaWR0aCBvZiIsdC5pZCwiOnMgY2hpbGRyZW4gaXMgIixpLGEpO2ZvcihsZXQgbSBvZiB0LmNoaWxkcmVuKW0uc2l6ZSYmKFkuZGVidWcoYGFiYzk1IFNldHRpbmcgc2l6ZSBvZiBjaGlsZHJlbiBvZiAke3QuaWR9IGlkPSR7bS5pZH0gJHtpfSAke2F9ICR7SlNPTi5zdHJpbmdpZnkobS5zaXplKX1gKSxtLnNpemUud2lkdGg9aSoobS53aWR0aEluQ29sdW1ucz8/MSkrYmkqKChtLndpZHRoSW5Db2x1bW5zPz8xKS0xKSxtLnNpemUuaGVpZ2h0PWEsbS5zaXplLng9MCxtLnNpemUueT0wLFkuZGVidWcoYGFiYzk1IHVwZGF0aW5nIHNpemUgb2YgJHt0LmlkfSBjaGlsZHJlbiBjaGlsZDoke20uaWR9IG1heFdpZHRoOiR7aX0gbWF4SGVpZ2h0OiR7YX1gKSk7Zm9yKGxldCBtIG9mIHQuY2hpbGRyZW4pZUYobSxlLGksYSk7bGV0IGw9dC5jb2x1bW5zPz8tMSx1PTA7Zm9yKGxldCBtIG9mIHQuY2hpbGRyZW4pdSs9bS53aWR0aEluQ29sdW1ucz8/MTtsZXQgaD10LmNoaWxkcmVuLmxlbmd0aDtsPjAmJmw8dSYmKGg9bCk7bGV0IGY9TWF0aC5jZWlsKHUvaCksZD1oKihpK2JpKStiaSxwPWYqKGErYmkpK2JpO2lmKGQ8cil7WS5kZWJ1ZyhgRGV0ZWN0ZWQgdG8gc21hbGwgc2llYmxpbmc6IGFiYzk1ICR7dC5pZH0gc2llYmxpbmdXaWR0aCAke3J9IHNpZWJsaW5nSGVpZ2h0ICR7bn0gd2lkdGggJHtkfWApLGQ9cixwPW47bGV0IG09KHItaCpiaS1iaSkvaCxnPShuLWYqYmktYmkpL2Y7WS5kZWJ1ZygiU2l6ZSBpbmRhdGEgYWJjODgiLHQuaWQsImNoaWxkV2lkdGgiLG0sIm1heFdpZHRoIixpKSxZLmRlYnVnKCJTaXplIGluZGF0YSBhYmM4OCIsdC5pZCwiY2hpbGRIZWlnaHQiLGcsIm1heEhlaWdodCIsYSksWS5kZWJ1ZygiU2l6ZSBpbmRhdGEgYWJjODggeFNpemUiLGgsInBhZGRpbmciLGJpKTtmb3IobGV0IHkgb2YgdC5jaGlsZHJlbil5LnNpemUmJih5LnNpemUud2lkdGg9bSx5LnNpemUuaGVpZ2h0PWcseS5zaXplLng9MCx5LnNpemUueT0wKX1pZihZLmRlYnVnKGBhYmM5NSAoZmluYWxlIGNhbGMpICR7dC5pZH0geFNpemUgJHtofSB5U2l6ZSAke2Z9IGNvbHVtbnMgJHtsfSR7dC5jaGlsZHJlbi5sZW5ndGh9IHdpZHRoPSR7TWF0aC5tYXgoZCx0LnNpemU/LndpZHRofHwwKX1gKSxkPCh0Py5zaXplPy53aWR0aHx8MCkpe2Q9dD8uc2l6ZT8ud2lkdGh8fDA7bGV0IG09bD4wP01hdGgubWluKHQuY2hpbGRyZW4ubGVuZ3RoLGwpOnQuY2hpbGRyZW4ubGVuZ3RoO2lmKG0+MCl7bGV0IGc9KGQtbSpiaS1iaSkvbTtZLmRlYnVnKCJhYmM5NSAoZ3Jvd2luZyB0byBmaXQpIHdpZHRoIix0LmlkLGQsdC5zaXplPy53aWR0aCxnKTtmb3IobGV0IHkgb2YgdC5jaGlsZHJlbil5LnNpemUmJih5LnNpemUud2lkdGg9Zyl9fXQuc2l6ZT17d2lkdGg6ZCxoZWlnaHQ6cCx4OjAseTowfX1ZLmRlYnVnKCJzZXRCbG9ja1NpemVzIGFiYzk0IChkb25lKSIsdC5pZCx0Py5zaXplPy54LHQ/LnNpemU/LndpZHRoLHQ/LnNpemU/LnksdD8uc2l6ZT8uaGVpZ2h0KX1mdW5jdGlvbiBNeWUodCxlKXtZLmRlYnVnKGBhYmM4NSBsYXlvdXQgYmxvY2tzICg9PmxheW91dEJsb2NrcykgJHt0LmlkfSB4OiAke3Q/LnNpemU/Lnh9IHk6ICR7dD8uc2l6ZT8ueX0gd2lkdGg6ICR7dD8uc2l6ZT8ud2lkdGh9YCk7bGV0IHI9dC5jb2x1bW5zPz8tMTtpZihZLmRlYnVnKCJsYXlvdXRCbG9ja3MgY29sdW1ucyBhYmM5NSIsdC5pZCwiPT4iLHIsdCksdC5jaGlsZHJlbiYmdC5jaGlsZHJlbi5sZW5ndGg+MCl7bGV0IG49dD8uY2hpbGRyZW5bMF0/LnNpemU/LndpZHRoPz8wLGk9dC5jaGlsZHJlbi5sZW5ndGgqbisodC5jaGlsZHJlbi5sZW5ndGgtMSkqYmk7WS5kZWJ1Zygid2lkdGhPZkNoaWxkcmVuIDg4IixpLCJwb3NYIik7bGV0IGE9MDtZLmRlYnVnKCJhYmM5MSBibG9jaz8uc2l6ZT8ueCIsdC5pZCx0Py5zaXplPy54KTtsZXQgcz10Py5zaXplPy54P3Q/LnNpemU/LngrKC10Py5zaXplPy53aWR0aC8yfHwwKTotYmksbD0wO2ZvcihsZXQgdSBvZiB0LmNoaWxkcmVuKXtsZXQgaD10O2lmKCF1LnNpemUpY29udGludWU7bGV0e3dpZHRoOmYsaGVpZ2h0OmR9PXUuc2l6ZSx7cHg6cCxweTptfT14dHQocixhKTtpZihtIT1sJiYobD1tLHM9dD8uc2l6ZT8ueD90Py5zaXplPy54KygtdD8uc2l6ZT8ud2lkdGgvMnx8MCk6LWJpLFkuZGVidWcoIk5ldyByb3cgaW4gbGF5b3V0IGZvciBibG9jayIsdC5pZCwiIGFuZCBjaGlsZCAiLHUuaWQsbCkpLFkuZGVidWcoYGFiYzg5IGxheW91dCBibG9ja3MgKGNoaWxkKSBpZDogJHt1LmlkfSBQb3M6ICR7YX0gKHB4LCBweSkgJHtwfSwke219ICgke2g/LnNpemU/Lnh9LCR7aD8uc2l6ZT8ueX0pIHBhcmVudDogJHtoLmlkfSB3aWR0aDogJHtmfSR7Yml9YCksaC5zaXplKXtsZXQgZz1mLzI7dS5zaXplLng9cytiaStnLFkuZGVidWcoYGFiYzkxIGxheW91dCBibG9ja3MgKGNhbGMpIHB4LCBweWlkOiR7dS5pZH0gc3RhcnRpbmdQb3M9WCR7c30gbmV3IHN0YXJ0aW5nUG9zWCR7dS5zaXplLnh9ICR7Z30gcGFkZGluZz0ke2JpfSB3aWR0aD0ke2Z9IGhhbGZXaWR0aD0ke2d9ID0+IHg6JHt1LnNpemUueH0geToke3Uuc2l6ZS55fSAke3Uud2lkdGhJbkNvbHVtbnN9ICh3aWR0aCAqIChjaGlsZD8udyB8fCAxKSkgLyAyICR7ZioodT8ud2lkdGhJbkNvbHVtbnM/PzEpLzJ9YCkscz11LnNpemUueCtnLHUuc2l6ZS55PWguc2l6ZS55LWguc2l6ZS5oZWlnaHQvMittKihkK2JpKStkLzIrYmksWS5kZWJ1ZyhgYWJjODggbGF5b3V0IGJsb2NrcyAoY2FsYykgcHgsIHB5aWQ6JHt1LmlkfXN0YXJ0aW5nUG9zWCR7c30ke2JpfSR7Z309Png6JHt1LnNpemUueH15OiR7dS5zaXplLnl9JHt1LndpZHRoSW5Db2x1bW5zfSh3aWR0aCAqIChjaGlsZD8udyB8fCAxKSkgLyAyJHtmKih1Py53aWR0aEluQ29sdW1ucz8/MSkvMn1gKX11LmNoaWxkcmVuJiZNeWUodSxlKSxhKz11Py53aWR0aEluQ29sdW1ucz8/MSxZLmRlYnVnKCJhYmM4OCBjb2x1bW5zUG9zIix1LGEpfX1ZLmRlYnVnKGBsYXlvdXQgYmxvY2tzICg8PT1sYXlvdXRCbG9ja3MpICR7dC5pZH0geDogJHt0Py5zaXplPy54fSB5OiAke3Q/LnNpemU/Lnl9IHdpZHRoOiAke3Q/LnNpemU/LndpZHRofWApfWZ1bmN0aW9uIEl5ZSh0LHttaW5YOmUsbWluWTpyLG1heFg6bixtYXhZOml9PXttaW5YOjAsbWluWTowLG1heFg6MCxtYXhZOjB9KXtpZih0LnNpemUmJnQuaWQhPT0icm9vdCIpe2xldHt4OmEseTpzLHdpZHRoOmwsaGVpZ2h0OnV9PXQuc2l6ZTthLWwvMjxlJiYoZT1hLWwvMikscy11LzI8ciYmKHI9cy11LzIpLGErbC8yPm4mJihuPWErbC8yKSxzK3UvMj5pJiYoaT1zK3UvMil9aWYodC5jaGlsZHJlbilmb3IobGV0IGEgb2YgdC5jaGlsZHJlbikoe21pblg6ZSxtaW5ZOnIsbWF4WDpuLG1heFk6aX09SXllKGEse21pblg6ZSxtaW5ZOnIsbWF4WDpuLG1heFk6aX0pKTtyZXR1cm57bWluWDplLG1pblk6cixtYXhYOm4sbWF4WTppfX1mdW5jdGlvbiBPeWUodCl7bGV0IGU9dC5nZXRCbG9jaygicm9vdCIpO2lmKCFlKXJldHVybjtlRihlLHQsMCwwKSxNeWUoZSx0KSxZLmRlYnVnKCJnZXRCbG9ja3MiLEpTT04uc3RyaW5naWZ5KGUsbnVsbCwyKSk7bGV0e21pblg6cixtaW5ZOm4sbWF4WDppLG1heFk6YX09SXllKGUpLHM9YS1uLGw9aS1yO3JldHVybnt4OnIseTpuLHdpZHRoOmwsaGVpZ2h0OnN9fXZhciBiaSxidHQsUHllPU4oKCk9PnsidXNlIHN0cmljdCI7dnQoKTt6dCgpO2JpPW1lKCk/LmJsb2NrPy5wYWRkaW5nPz84O28oeHR0LCJjYWxjdWxhdGVCbG9ja1Bvc2l0aW9uIik7YnR0PW8odD0+e2xldCBlPTAscj0wO2ZvcihsZXQgbiBvZiB0LmNoaWxkcmVuKXtsZXR7d2lkdGg6aSxoZWlnaHQ6YSx4OnMseTpsfT1uLnNpemU/P3t3aWR0aDowLGhlaWdodDowLHg6MCx5OjB9O1kuZGVidWcoImdldE1heENoaWxkU2l6ZSBhYmM5NSBjaGlsZDoiLG4uaWQsIndpZHRoOiIsaSwiaGVpZ2h0OiIsYSwieDoiLHMsInk6IixsLG4udHlwZSksbi50eXBlIT09InNwYWNlIiYmKGk+ZSYmKGU9aS8odC53aWR0aEluQ29sdW1ucz8/MSkpLGE+ciYmKHI9YSkpfXJldHVybnt3aWR0aDplLGhlaWdodDpyfX0sImdldE1heENoaWxkU2l6ZSIpO28oZUYsInNldEJsb2NrU2l6ZXMiKTtvKE15ZSwibGF5b3V0QmxvY2tzIik7byhJeWUsImZpbmRCb3VuZHMiKTtvKE95ZSwibGF5b3V0Iil9KTtmdW5jdGlvbiBCeWUodCxlKXtlJiZ0LmF0dHIoInN0eWxlIixlKX1mdW5jdGlvbiB3dHQodCl7bGV0IGU9R2UoZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImZvcmVpZ25PYmplY3QiKSkscj1lLmFwcGVuZCgieGh0bWw6ZGl2Iiksbj10LmxhYmVsLGk9dC5pc05vZGU/Im5vZGVMYWJlbCI6ImVkZ2VMYWJlbCIsYT1yLmFwcGVuZCgic3BhbiIpO3JldHVybiBhLmh0bWwobiksQnllKGEsdC5sYWJlbFN0eWxlKSxhLmF0dHIoImNsYXNzIixpKSxCeWUocix0LmxhYmVsU3R5bGUpLHIuc3R5bGUoImRpc3BsYXkiLCJpbmxpbmUtYmxvY2siKSxyLnN0eWxlKCJ3aGl0ZS1zcGFjZSIsIm5vd3JhcCIpLHIuYXR0cigieG1sbnMiLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiksZS5ub2RlKCl9dmFyIFR0dCx2cyxyQz1OKCgpPT57InVzZSBzdHJpY3QiO2RyKCk7dnQoKTt6dCgpO2dyKCk7aXIoKTt0bygpO28oQnllLCJhcHBseVN0eWxlIik7byh3dHQsImFkZEh0bWxMYWJlbCIpO1R0dD1vKCh0LGUscixuKT0+e2xldCBpPXR8fCIiO2lmKHR5cGVvZiBpPT0ib2JqZWN0IiYmKGk9aVswXSksZnIobWUoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe2k9aS5yZXBsYWNlKC9cXG58XG4vZywiPGJyIC8+IiksWS5kZWJ1ZygidmVydGV4VGV4dCIraSk7bGV0IGE9e2lzTm9kZTpuLGxhYmVsOkREKG5hKGkpKSxsYWJlbFN0eWxlOmUucmVwbGFjZSgiZmlsbDoiLCJjb2xvcjoiKX07cmV0dXJuIHd0dChhKX1lbHNle2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iik7YS5zZXRBdHRyaWJ1dGUoInN0eWxlIixlLnJlcGxhY2UoImNvbG9yOiIsImZpbGw6IikpO2xldCBzPVtdO3R5cGVvZiBpPT0ic3RyaW5nIj9zPWkuc3BsaXQoL1xcbnxcbnw8YnJccypcLz8+L2dpKTpBcnJheS5pc0FycmF5KGkpP3M9aTpzPVtdO2ZvcihsZXQgbCBvZiBzKXtsZXQgdT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidHNwYW4iKTt1LnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLCJ4bWw6c3BhY2UiLCJwcmVzZXJ2ZSIpLHUuc2V0QXR0cmlidXRlKCJkeSIsIjFlbSIpLHUuc2V0QXR0cmlidXRlKCJ4IiwiMCIpLHI/dS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwidGl0bGUtcm93Iik6dS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwicm93IiksdS50ZXh0Q29udGVudD1sLnRyaW0oKSxhLmFwcGVuZENoaWxkKHUpfXJldHVybiBhfX0sImNyZWF0ZUxhYmVsIiksdnM9VHR0fSk7dmFyICR5ZSxrdHQsRnllLHp5ZT1OKCgpPT57InVzZSBzdHJpY3QiO3Z0KCk7JHllPW8oKHQsZSxyLG4saSk9PntlLmFycm93VHlwZVN0YXJ0JiZGeWUodCwic3RhcnQiLGUuYXJyb3dUeXBlU3RhcnQscixuLGkpLGUuYXJyb3dUeXBlRW5kJiZGeWUodCwiZW5kIixlLmFycm93VHlwZUVuZCxyLG4saSl9LCJhZGRFZGdlTWFya2VycyIpLGt0dD17YXJyb3dfY3Jvc3M6ImNyb3NzIixhcnJvd19wb2ludDoicG9pbnQiLGFycm93X2JhcmI6ImJhcmIiLGFycm93X2NpcmNsZToiY2lyY2xlIixhZ2dyZWdhdGlvbjoiYWdncmVnYXRpb24iLGV4dGVuc2lvbjoiZXh0ZW5zaW9uIixjb21wb3NpdGlvbjoiY29tcG9zaXRpb24iLGRlcGVuZGVuY3k6ImRlcGVuZGVuY3kiLGxvbGxpcG9wOiJsb2xsaXBvcCJ9LEZ5ZT1vKCh0LGUscixuLGksYSk9PntsZXQgcz1rdHRbcl07aWYoIXMpe1kud2FybihgVW5rbm93biBhcnJvdyB0eXBlOiAke3J9YCk7cmV0dXJufWxldCBsPWU9PT0ic3RhcnQiPyJTdGFydCI6IkVuZCI7dC5hdHRyKGBtYXJrZXItJHtlfWAsYHVybCgke259IyR7aX1fJHthfS0ke3N9JHtsfSlgKX0sImFkZEVkZ2VNYXJrZXIiKX0pO2Z1bmN0aW9uIG5DKHQsZSl7bWUoKS5mbG93Y2hhcnQuaHRtbExhYmVscyYmdCYmKHQuc3R5bGUud2lkdGg9ZS5sZW5ndGgqOSsicHgiLHQuc3R5bGUuaGVpZ2h0PSIxMnB4Iil9dmFyIHRGLFVhLFZ5ZSxVeWUsRXR0LFN0dCxHeWUsSHllLFd5ZT1OKCgpPT57InVzZSBzdHJpY3QiO3Z0KCk7ckMoKTt0bygpO2RyKCk7enQoKTtpcigpO2dyKCk7SkQoKTt3MigpO3p5ZSgpO3RGPXt9LFVhPXt9LFZ5ZT1vKCh0LGUpPT57bGV0IHI9bWUoKSxuPWZyKHIuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpLGk9ZS5sYWJlbFR5cGU9PT0ibWFya2Rvd24iP0huKHQsZS5sYWJlbCx7c3R5bGU6ZS5sYWJlbFN0eWxlLHVzZUh0bWxMYWJlbHM6bixhZGRTdmdCYWNrZ3JvdW5kOiEwfSxyKTp2cyhlLmxhYmVsLGUubGFiZWxTdHlsZSksYT10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZUxhYmVsIikscz1hLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKTtzLm5vZGUoKS5hcHBlbmRDaGlsZChpKTtsZXQgbD1pLmdldEJCb3goKTtpZihuKXtsZXQgaD1pLmNoaWxkcmVuWzBdLGY9R2UoaSk7bD1oLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGYuYXR0cigid2lkdGgiLGwud2lkdGgpLGYuYXR0cigiaGVpZ2h0IixsLmhlaWdodCl9cy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistbC53aWR0aC8yKyIsICIrLWwuaGVpZ2h0LzIrIikiKSx0RltlLmlkXT1hLGUud2lkdGg9bC53aWR0aCxlLmhlaWdodD1sLmhlaWdodDtsZXQgdTtpZihlLnN0YXJ0TGFiZWxMZWZ0KXtsZXQgaD12cyhlLnN0YXJ0TGFiZWxMZWZ0LGUubGFiZWxTdHlsZSksZj10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZVRlcm1pbmFscyIpLGQ9Zi5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImlubmVyIik7dT1kLm5vZGUoKS5hcHBlbmRDaGlsZChoKTtsZXQgcD1oLmdldEJCb3goKTtkLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1wLndpZHRoLzIrIiwgIistcC5oZWlnaHQvMisiKSIpLFVhW2UuaWRdfHwoVWFbZS5pZF09e30pLFVhW2UuaWRdLnN0YXJ0TGVmdD1mLG5DKHUsZS5zdGFydExhYmVsTGVmdCl9aWYoZS5zdGFydExhYmVsUmlnaHQpe2xldCBoPXZzKGUuc3RhcnRMYWJlbFJpZ2h0LGUubGFiZWxTdHlsZSksZj10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZVRlcm1pbmFscyIpLGQ9Zi5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImlubmVyIik7dT1mLm5vZGUoKS5hcHBlbmRDaGlsZChoKSxkLm5vZGUoKS5hcHBlbmRDaGlsZChoKTtsZXQgcD1oLmdldEJCb3goKTtkLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1wLndpZHRoLzIrIiwgIistcC5oZWlnaHQvMisiKSIpLFVhW2UuaWRdfHwoVWFbZS5pZF09e30pLFVhW2UuaWRdLnN0YXJ0UmlnaHQ9ZixuQyh1LGUuc3RhcnRMYWJlbFJpZ2h0KX1pZihlLmVuZExhYmVsTGVmdCl7bGV0IGg9dnMoZS5lbmRMYWJlbExlZnQsZS5sYWJlbFN0eWxlKSxmPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlVGVybWluYWxzIiksZD1mLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiaW5uZXIiKTt1PWQubm9kZSgpLmFwcGVuZENoaWxkKGgpO2xldCBwPWguZ2V0QkJveCgpO2QuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLXAud2lkdGgvMisiLCAiKy1wLmhlaWdodC8yKyIpIiksZi5ub2RlKCkuYXBwZW5kQ2hpbGQoaCksVWFbZS5pZF18fChVYVtlLmlkXT17fSksVWFbZS5pZF0uZW5kTGVmdD1mLG5DKHUsZS5lbmRMYWJlbExlZnQpfWlmKGUuZW5kTGFiZWxSaWdodCl7bGV0IGg9dnMoZS5lbmRMYWJlbFJpZ2h0LGUubGFiZWxTdHlsZSksZj10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZVRlcm1pbmFscyIpLGQ9Zi5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImlubmVyIik7dT1kLm5vZGUoKS5hcHBlbmRDaGlsZChoKTtsZXQgcD1oLmdldEJCb3goKTtkLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1wLndpZHRoLzIrIiwgIistcC5oZWlnaHQvMisiKSIpLGYubm9kZSgpLmFwcGVuZENoaWxkKGgpLFVhW2UuaWRdfHwoVWFbZS5pZF09e30pLFVhW2UuaWRdLmVuZFJpZ2h0PWYsbkModSxlLmVuZExhYmVsUmlnaHQpfXJldHVybiBpfSwiaW5zZXJ0RWRnZUxhYmVsIik7byhuQywic2V0VGVybWluYWxXaWR0aCIpO1V5ZT1vKCh0LGUpPT57WS5kZWJ1ZygiTW92aW5nIGxhYmVsIGFiYzg4ICIsdC5pZCx0LmxhYmVsLHRGW3QuaWRdLGUpO2xldCByPWUudXBkYXRlZFBhdGg/ZS51cGRhdGVkUGF0aDplLm9yaWdpbmFsUGF0aCxuPW1lKCkse3N1YkdyYXBoVGl0bGVUb3RhbE1hcmdpbjppfT1SdShuKTtpZih0LmxhYmVsKXtsZXQgYT10Rlt0LmlkXSxzPXQueCxsPXQueTtpZihyKXtsZXQgdT1HdC5jYWxjTGFiZWxQb3NpdGlvbihyKTtZLmRlYnVnKCJNb3ZpbmcgbGFiZWwgIit0LmxhYmVsKyIgZnJvbSAoIixzLCIsIixsLCIpIHRvICgiLHUueCwiLCIsdS55LCIpIGFiYzg4IiksZS51cGRhdGVkUGF0aCYmKHM9dS54LGw9dS55KX1hLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3N9LCAke2wraS8yfSlgKX1pZih0LnN0YXJ0TGFiZWxMZWZ0KXtsZXQgYT1VYVt0LmlkXS5zdGFydExlZnQscz10LngsbD10Lnk7aWYocil7bGV0IHU9R3QuY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbih0LmFycm93VHlwZVN0YXJ0PzEwOjAsInN0YXJ0X2xlZnQiLHIpO3M9dS54LGw9dS55fWEuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7c30sICR7bH0pYCl9aWYodC5zdGFydExhYmVsUmlnaHQpe2xldCBhPVVhW3QuaWRdLnN0YXJ0UmlnaHQscz10LngsbD10Lnk7aWYocil7bGV0IHU9R3QuY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbih0LmFycm93VHlwZVN0YXJ0PzEwOjAsInN0YXJ0X3JpZ2h0IixyKTtzPXUueCxsPXUueX1hLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3N9LCAke2x9KWApfWlmKHQuZW5kTGFiZWxMZWZ0KXtsZXQgYT1VYVt0LmlkXS5lbmRMZWZ0LHM9dC54LGw9dC55O2lmKHIpe2xldCB1PUd0LmNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb24odC5hcnJvd1R5cGVFbmQ/MTA6MCwiZW5kX2xlZnQiLHIpO3M9dS54LGw9dS55fWEuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7c30sICR7bH0pYCl9aWYodC5lbmRMYWJlbFJpZ2h0KXtsZXQgYT1VYVt0LmlkXS5lbmRSaWdodCxzPXQueCxsPXQueTtpZihyKXtsZXQgdT1HdC5jYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uKHQuYXJyb3dUeXBlRW5kPzEwOjAsImVuZF9yaWdodCIscik7cz11LngsbD11Lnl9YS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtzfSwgJHtsfSlgKX19LCJwb3NpdGlvbkVkZ2VMYWJlbCIpLEV0dD1vKCh0LGUpPT57bGV0IHI9dC54LG49dC55LGk9TWF0aC5hYnMoZS54LXIpLGE9TWF0aC5hYnMoZS55LW4pLHM9dC53aWR0aC8yLGw9dC5oZWlnaHQvMjtyZXR1cm4gaT49c3x8YT49bH0sIm91dHNpZGVOb2RlIiksU3R0PW8oKHQsZSxyKT0+e1kuZGVidWcoYGludGVyc2VjdGlvbiBjYWxjIGFiYzg5OgogIG91dHNpZGVQb2ludDogJHtKU09OLnN0cmluZ2lmeShlKX0KICBpbnNpZGVQb2ludCA6ICR7SlNPTi5zdHJpbmdpZnkocil9CiAgbm9kZSAgICAgICAgOiB4OiR7dC54fSB5OiR7dC55fSB3OiR7dC53aWR0aH0gaDoke3QuaGVpZ2h0fWApO2xldCBuPXQueCxpPXQueSxhPU1hdGguYWJzKG4tci54KSxzPXQud2lkdGgvMixsPXIueDxlLng/cy1hOnMrYSx1PXQuaGVpZ2h0LzIsaD1NYXRoLmFicyhlLnktci55KSxmPU1hdGguYWJzKGUueC1yLngpO2lmKE1hdGguYWJzKGktZS55KSpzPk1hdGguYWJzKG4tZS54KSp1KXtsZXQgZD1yLnk8ZS55P2UueS11LWk6aS11LWUueTtsPWYqZC9oO2xldCBwPXt4OnIueDxlLng/ci54K2w6ci54LWYrbCx5OnIueTxlLnk/ci55K2gtZDpyLnktaCtkfTtyZXR1cm4gbD09PTAmJihwLng9ZS54LHAueT1lLnkpLGY9PT0wJiYocC54PWUueCksaD09PTAmJihwLnk9ZS55KSxZLmRlYnVnKGBhYmM4OSB0b3BwL2JvdHQgY2FsYywgUSAke2h9LCBxICR7ZH0sIFIgJHtmfSwgciAke2x9YCxwKSxwfWVsc2V7ci54PGUueD9sPWUueC1zLW46bD1uLXMtZS54O2xldCBkPWgqbC9mLHA9ci54PGUueD9yLngrZi1sOnIueC1mK2wsbT1yLnk8ZS55P3IueStkOnIueS1kO3JldHVybiBZLmRlYnVnKGBzaWRlcyBjYWxjIGFiYzg5LCBRICR7aH0sIHEgJHtkfSwgUiAke2Z9LCByICR7bH1gLHtfeDpwLF95Om19KSxsPT09MCYmKHA9ZS54LG09ZS55KSxmPT09MCYmKHA9ZS54KSxoPT09MCYmKG09ZS55KSx7eDpwLHk6bX19fSwiaW50ZXJzZWN0aW9uIiksR3llPW8oKHQsZSk9PntZLmRlYnVnKCJhYmM4OCBjdXRQYXRoQXRJbnRlcnNlY3QiLHQsZSk7bGV0IHI9W10sbj10WzBdLGk9ITE7cmV0dXJuIHQuZm9yRWFjaChhPT57aWYoIUV0dChlLGEpJiYhaSl7bGV0IHM9U3R0KGUsbixhKSxsPSExO3IuZm9yRWFjaCh1PT57bD1sfHx1Lng9PT1zLngmJnUueT09PXMueX0pLHIuc29tZSh1PT51Lng9PT1zLngmJnUueT09PXMueSl8fHIucHVzaChzKSxpPSEwfWVsc2Ugbj1hLGl8fHIucHVzaChhKX0pLHJ9LCJjdXRQYXRoQXRJbnRlcnNlY3QiKSxIeWU9byhmdW5jdGlvbih0LGUscixuLGksYSxzKXtsZXQgbD1yLnBvaW50cztZLmRlYnVnKCJhYmM4OCBJbnNlcnRFZGdlOiBlZGdlPSIsciwiZT0iLGUpO2xldCB1PSExLGg9YS5ub2RlKGUudik7dmFyIGY9YS5ub2RlKGUudyk7Zj8uaW50ZXJzZWN0JiZoPy5pbnRlcnNlY3QmJihsPWwuc2xpY2UoMSxyLnBvaW50cy5sZW5ndGgtMSksbC51bnNoaWZ0KGguaW50ZXJzZWN0KGxbMF0pKSxsLnB1c2goZi5pbnRlcnNlY3QobFtsLmxlbmd0aC0xXSkpKSxyLnRvQ2x1c3RlciYmKFkuZGVidWcoInRvIGNsdXN0ZXIgYWJjODgiLG5bci50b0NsdXN0ZXJdKSxsPUd5ZShyLnBvaW50cyxuW3IudG9DbHVzdGVyXS5ub2RlKSx1PSEwKSxyLmZyb21DbHVzdGVyJiYoWS5kZWJ1ZygiZnJvbSBjbHVzdGVyIGFiYzg4IixuW3IuZnJvbUNsdXN0ZXJdKSxsPUd5ZShsLnJldmVyc2UoKSxuW3IuZnJvbUNsdXN0ZXJdLm5vZGUpLnJldmVyc2UoKSx1PSEwKTtsZXQgZD1sLmZpbHRlcihDPT4hTnVtYmVyLmlzTmFOKEMueSkpLHA9RG87ci5jdXJ2ZSYmKGk9PT0iZ3JhcGgifHxpPT09ImZsb3djaGFydCIpJiYocD1yLmN1cnZlKTtsZXR7eDptLHk6Z309cXcocikseT13bCgpLngobSkueShnKS5jdXJ2ZShwKSx2O3N3aXRjaChyLnRoaWNrbmVzcyl7Y2FzZSJub3JtYWwiOnY9ImVkZ2UtdGhpY2tuZXNzLW5vcm1hbCI7YnJlYWs7Y2FzZSJ0aGljayI6dj0iZWRnZS10aGlja25lc3MtdGhpY2siO2JyZWFrO2Nhc2UiaW52aXNpYmxlIjp2PSJlZGdlLXRoaWNrbmVzcy10aGljayI7YnJlYWs7ZGVmYXVsdDp2PSIifXN3aXRjaChyLnBhdHRlcm4pe2Nhc2Uic29saWQiOnYrPSIgZWRnZS1wYXR0ZXJuLXNvbGlkIjticmVhaztjYXNlImRvdHRlZCI6dis9IiBlZGdlLXBhdHRlcm4tZG90dGVkIjticmVhaztjYXNlImRhc2hlZCI6dis9IiBlZGdlLXBhdHRlcm4tZGFzaGVkIjticmVha31sZXQgeD10LmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLHkoZCkpLmF0dHIoImlkIixyLmlkKS5hdHRyKCJjbGFzcyIsIiAiK3YrKHIuY2xhc3Nlcz8iICIrci5jbGFzc2VzOiIiKSkuYXR0cigic3R5bGUiLHIuc3R5bGUpLGI9IiI7KG1lKCkuZmxvd2NoYXJ0LmFycm93TWFya2VyQWJzb2x1dGV8fG1lKCkuc3RhdGUuYXJyb3dNYXJrZXJBYnNvbHV0ZSkmJihiPXdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCsiLy8iK3dpbmRvdy5sb2NhdGlvbi5ob3N0K3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSt3aW5kb3cubG9jYXRpb24uc2VhcmNoLGI9Yi5yZXBsYWNlKC9cKC9nLCJcXCgiKSxiPWIucmVwbGFjZSgvXCkvZywiXFwpIikpLCR5ZSh4LHIsYixzLGkpO2xldCB3PXt9O3JldHVybiB1JiYody51cGRhdGVkUGF0aD1sKSx3Lm9yaWdpbmFsUGF0aD1yLnBvaW50cyx3fSwiaW5zZXJ0RWRnZSIpfSk7dmFyIEN0dCxxeWUsWXllPU4oKCk9PnsidXNlIHN0cmljdCI7Q3R0PW8odD0+e2xldCBlPW5ldyBTZXQ7Zm9yKGxldCByIG9mIHQpc3dpdGNoKHIpe2Nhc2UieCI6ZS5hZGQoInJpZ2h0IiksZS5hZGQoImxlZnQiKTticmVhaztjYXNlInkiOmUuYWRkKCJ1cCIpLGUuYWRkKCJkb3duIik7YnJlYWs7ZGVmYXVsdDplLmFkZChyKTticmVha31yZXR1cm4gZX0sImV4cGFuZEFuZERlZHVwbGljYXRlRGlyZWN0aW9ucyIpLHF5ZT1vKCh0LGUscik9PntsZXQgbj1DdHQodCksaT0yLGE9ZS5oZWlnaHQrMipyLnBhZGRpbmcscz1hL2ksbD1lLndpZHRoKzIqcytyLnBhZGRpbmcsdT1yLnBhZGRpbmcvMjtyZXR1cm4gbi5oYXMoInJpZ2h0IikmJm4uaGFzKCJsZWZ0IikmJm4uaGFzKCJ1cCIpJiZuLmhhcygiZG93biIpP1t7eDowLHk6MH0se3g6cyx5OjB9LHt4OmwvMix5OjIqdX0se3g6bC1zLHk6MH0se3g6bCx5OjB9LHt4OmwseTotYS8zfSx7eDpsKzIqdSx5Oi1hLzJ9LHt4OmwseTotMiphLzN9LHt4OmwseTotYX0se3g6bC1zLHk6LWF9LHt4OmwvMix5Oi1hLTIqdX0se3g6cyx5Oi1hfSx7eDowLHk6LWF9LHt4OjAseTotMiphLzN9LHt4Oi0yKnUseTotYS8yfSx7eDowLHk6LWEvM31dOm4uaGFzKCJyaWdodCIpJiZuLmhhcygibGVmdCIpJiZuLmhhcygidXAiKT9be3g6cyx5OjB9LHt4Omwtcyx5OjB9LHt4OmwseTotYS8yfSx7eDpsLXMseTotYX0se3g6cyx5Oi1hfSx7eDowLHk6LWEvMn1dOm4uaGFzKCJyaWdodCIpJiZuLmhhcygibGVmdCIpJiZuLmhhcygiZG93biIpP1t7eDowLHk6MH0se3g6cyx5Oi1hfSx7eDpsLXMseTotYX0se3g6bCx5OjB9XTpuLmhhcygicmlnaHQiKSYmbi5oYXMoInVwIikmJm4uaGFzKCJkb3duIik/W3t4OjAseTowfSx7eDpsLHk6LXN9LHt4OmwseTotYStzfSx7eDowLHk6LWF9XTpuLmhhcygibGVmdCIpJiZuLmhhcygidXAiKSYmbi5oYXMoImRvd24iKT9be3g6bCx5OjB9LHt4OjAseTotc30se3g6MCx5Oi1hK3N9LHt4OmwseTotYX1dOm4uaGFzKCJyaWdodCIpJiZuLmhhcygibGVmdCIpP1t7eDpzLHk6MH0se3g6cyx5Oi11fSx7eDpsLXMseTotdX0se3g6bC1zLHk6MH0se3g6bCx5Oi1hLzJ9LHt4Omwtcyx5Oi1hfSx7eDpsLXMseTotYSt1fSx7eDpzLHk6LWErdX0se3g6cyx5Oi1hfSx7eDowLHk6LWEvMn1dOm4uaGFzKCJ1cCIpJiZuLmhhcygiZG93biIpP1t7eDpsLzIseTowfSx7eDowLHk6LXV9LHt4OnMseTotdX0se3g6cyx5Oi1hK3V9LHt4OjAseTotYSt1fSx7eDpsLzIseTotYX0se3g6bCx5Oi1hK3V9LHt4Omwtcyx5Oi1hK3V9LHt4Omwtcyx5Oi11fSx7eDpsLHk6LXV9XTpuLmhhcygicmlnaHQiKSYmbi5oYXMoInVwIik/W3t4OjAseTowfSx7eDpsLHk6LXN9LHt4OjAseTotYX1dOm4uaGFzKCJyaWdodCIpJiZuLmhhcygiZG93biIpP1t7eDowLHk6MH0se3g6bCx5OjB9LHt4OjAseTotYX1dOm4uaGFzKCJsZWZ0IikmJm4uaGFzKCJ1cCIpP1t7eDpsLHk6MH0se3g6MCx5Oi1zfSx7eDpsLHk6LWF9XTpuLmhhcygibGVmdCIpJiZuLmhhcygiZG93biIpP1t7eDpsLHk6MH0se3g6MCx5OjB9LHt4OmwseTotYX1dOm4uaGFzKCJyaWdodCIpP1t7eDpzLHk6LXV9LHt4OnMseTotdX0se3g6bC1zLHk6LXV9LHt4Omwtcyx5OjB9LHt4OmwseTotYS8yfSx7eDpsLXMseTotYX0se3g6bC1zLHk6LWErdX0se3g6cyx5Oi1hK3V9LHt4OnMseTotYSt1fV06bi5oYXMoImxlZnQiKT9be3g6cyx5OjB9LHt4OnMseTotdX0se3g6bC1zLHk6LXV9LHt4Omwtcyx5Oi1hK3V9LHt4OnMseTotYSt1fSx7eDpzLHk6LWF9LHt4OjAseTotYS8yfV06bi5oYXMoInVwIik/W3t4OnMseTotdX0se3g6cyx5Oi1hK3V9LHt4OjAseTotYSt1fSx7eDpsLzIseTotYX0se3g6bCx5Oi1hK3V9LHt4Omwtcyx5Oi1hK3V9LHt4Omwtcyx5Oi11fV06bi5oYXMoImRvd24iKT9be3g6bC8yLHk6MH0se3g6MCx5Oi11fSx7eDpzLHk6LXV9LHt4OnMseTotYSt1fSx7eDpsLXMseTotYSt1fSx7eDpsLXMseTotdX0se3g6bCx5Oi11fV06W3t4OjAseTowfV19LCJnZXRBcnJvd1BvaW50cyIpfSk7ZnVuY3Rpb24gQXR0KHQsZSl7cmV0dXJuIHQuaW50ZXJzZWN0KGUpfXZhciBYeWUsanllPU4oKCk9PnsidXNlIHN0cmljdCI7byhBdHQsImludGVyc2VjdE5vZGUiKTtYeWU9QXR0fSk7ZnVuY3Rpb24gX3R0KHQsZSxyLG4pe3ZhciBpPXQueCxhPXQueSxzPWktbi54LGw9YS1uLnksdT1NYXRoLnNxcnQoZSplKmwqbCtyKnIqcypzKSxoPU1hdGguYWJzKGUqcipzL3UpO24ueDxpJiYoaD0taCk7dmFyIGY9TWF0aC5hYnMoZSpyKmwvdSk7cmV0dXJuIG4ueTxhJiYoZj0tZikse3g6aStoLHk6YStmfX12YXIgaUMsckY9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKF90dCwiaW50ZXJzZWN0RWxsaXBzZSIpO2lDPV90dH0pO2Z1bmN0aW9uIER0dCh0LGUscil7cmV0dXJuIGlDKHQsZSxlLHIpfXZhciBLeWUsUXllPU4oKCk9PnsidXNlIHN0cmljdCI7ckYoKTtvKER0dCwiaW50ZXJzZWN0Q2lyY2xlIik7S3llPUR0dH0pO2Z1bmN0aW9uIEx0dCh0LGUscixuKXt2YXIgaSxhLHMsbCx1LGgsZixkLHAsbSxnLHksdix4LGI7aWYoaT1lLnktdC55LHM9dC54LWUueCx1PWUueCp0LnktdC54KmUueSxwPWkqci54K3Mqci55K3UsbT1pKm4ueCtzKm4ueSt1LCEocCE9PTAmJm0hPT0wJiZaeWUocCxtKSkmJihhPW4ueS1yLnksbD1yLngtbi54LGg9bi54KnIueS1yLngqbi55LGY9YSp0LngrbCp0LnkraCxkPWEqZS54K2wqZS55K2gsIShmIT09MCYmZCE9PTAmJlp5ZShmLGQpKSYmKGc9aSpsLWEqcyxnIT09MCkpKXJldHVybiB5PU1hdGguYWJzKGcvMiksdj1zKmgtbCp1LHg9djwwPyh2LXkpL2c6KHYreSkvZyx2PWEqdS1pKmgsYj12PDA/KHYteSkvZzoodit5KS9nLHt4LHk6Yn19ZnVuY3Rpb24gWnllKHQsZSl7cmV0dXJuIHQqZT4wfXZhciBKeWUsZXZlPU4oKCk9PnsidXNlIHN0cmljdCI7byhMdHQsImludGVyc2VjdExpbmUiKTtvKFp5ZSwic2FtZVNpZ24iKTtKeWU9THR0fSk7ZnVuY3Rpb24gUnR0KHQsZSxyKXt2YXIgbj10LngsaT10LnksYT1bXSxzPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxsPU51bWJlci5QT1NJVElWRV9JTkZJTklUWTt0eXBlb2YgZS5mb3JFYWNoPT0iZnVuY3Rpb24iP2UuZm9yRWFjaChmdW5jdGlvbihnKXtzPU1hdGgubWluKHMsZy54KSxsPU1hdGgubWluKGwsZy55KX0pOihzPU1hdGgubWluKHMsZS54KSxsPU1hdGgubWluKGwsZS55KSk7Zm9yKHZhciB1PW4tdC53aWR0aC8yLXMsaD1pLXQuaGVpZ2h0LzItbCxmPTA7ZjxlLmxlbmd0aDtmKyspe3ZhciBkPWVbZl0scD1lW2Y8ZS5sZW5ndGgtMT9mKzE6MF0sbT1KeWUodCxyLHt4OnUrZC54LHk6aCtkLnl9LHt4OnUrcC54LHk6aCtwLnl9KTttJiZhLnB1c2gobSl9cmV0dXJuIGEubGVuZ3RoPyhhLmxlbmd0aD4xJiZhLnNvcnQoZnVuY3Rpb24oZyx5KXt2YXIgdj1nLngtci54LHg9Zy55LXIueSxiPU1hdGguc3FydCh2KnYreCp4KSx3PXkueC1yLngsQz15Lnktci55LFQ9TWF0aC5zcXJ0KHcqdytDKkMpO3JldHVybiBiPFQ/LTE6Yj09PVQ/MDoxfSksYVswXSk6dH12YXIgdHZlLHJ2ZT1OKCgpPT57InVzZSBzdHJpY3QiO2V2ZSgpO3R2ZT1SdHQ7byhSdHQsImludGVyc2VjdFBvbHlnb24iKX0pO3ZhciBOdHQsbnZlLGl2ZT1OKCgpPT57InVzZSBzdHJpY3QiO050dD1vKCh0LGUpPT57dmFyIHI9dC54LG49dC55LGk9ZS54LXIsYT1lLnktbixzPXQud2lkdGgvMixsPXQuaGVpZ2h0LzIsdSxoO3JldHVybiBNYXRoLmFicyhhKSpzPk1hdGguYWJzKGkpKmw/KGE8MCYmKGw9LWwpLHU9YT09PTA/MDpsKmkvYSxoPWwpOihpPDAmJihzPS1zKSx1PXMsaD1pPT09MD8wOnMqYS9pKSx7eDpyK3UseTpuK2h9fSwiaW50ZXJzZWN0UmVjdCIpLG52ZT1OdHR9KTt2YXIgSW4sbkY9TigoKT0+eyJ1c2Ugc3RyaWN0IjtqeWUoKTtReWUoKTtyRigpO3J2ZSgpO2l2ZSgpO0luPXtub2RlOlh5ZSxjaXJjbGU6S3llLGVsbGlwc2U6aUMscG9seWdvbjp0dmUscmVjdDpudmV9fSk7ZnVuY3Rpb24gSGwodCxlLHIsbil7cmV0dXJuIHQuaW5zZXJ0KCJwb2x5Z29uIiwiOmZpcnN0LWNoaWxkIikuYXR0cigicG9pbnRzIixuLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gaS54KyIsIitpLnl9KS5qb2luKCIgIikpLmF0dHIoImNsYXNzIiwibGFiZWwtY29udGFpbmVyIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWUvMisiLCIrci8yKyIpIil9dmFyIERpLFFuLGlGPU4oKCk9PnsidXNlIHN0cmljdCI7ckMoKTt0bygpO3p0KCk7ZHIoKTtncigpO2lyKCk7RGk9byhhc3luYyh0LGUscixuKT0+e2xldCBpPW1lKCksYSxzPWUudXNlSHRtbExhYmVsc3x8ZnIoaS5mbG93Y2hhcnQuaHRtbExhYmVscyk7cj9hPXI6YT0ibm9kZSBkZWZhdWx0IjtsZXQgbD10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIixhKS5hdHRyKCJpZCIsZS5kb21JZHx8ZS5pZCksdT1sLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKS5hdHRyKCJzdHlsZSIsZS5sYWJlbFN0eWxlKSxoO2UubGFiZWxUZXh0PT09dm9pZCAwP2g9IiI6aD10eXBlb2YgZS5sYWJlbFRleHQ9PSJzdHJpbmciP2UubGFiZWxUZXh0OmUubGFiZWxUZXh0WzBdO2xldCBmPXUubm9kZSgpLGQ7ZS5sYWJlbFR5cGU9PT0ibWFya2Rvd24iP2Q9SG4odSxUcihuYShoKSxpKSx7dXNlSHRtbExhYmVsczpzLHdpZHRoOmUud2lkdGh8fGkuZmxvd2NoYXJ0LndyYXBwaW5nV2lkdGgsY2xhc3NlczoibWFya2Rvd24tbm9kZS1sYWJlbCJ9LGkpOmQ9Zi5hcHBlbmRDaGlsZCh2cyhUcihuYShoKSxpKSxlLmxhYmVsU3R5bGUsITEsbikpO2xldCBwPWQuZ2V0QkJveCgpLG09ZS5wYWRkaW5nLzI7aWYoZnIoaS5mbG93Y2hhcnQuaHRtbExhYmVscykpe2xldCBnPWQuY2hpbGRyZW5bMF0seT1HZShkKSx2PWcuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImltZyIpO2lmKHYpe2xldCB4PWgucmVwbGFjZSgvPGltZ1tePl0qPi9nLCIiKS50cmltKCk9PT0iIjthd2FpdCBQcm9taXNlLmFsbChbLi4udl0ubWFwKGI9Pm5ldyBQcm9taXNlKHc9PntmdW5jdGlvbiBDKCl7aWYoYi5zdHlsZS5kaXNwbGF5PSJmbGV4IixiLnN0eWxlLmZsZXhEaXJlY3Rpb249ImNvbHVtbiIseCl7bGV0IFQ9aS5mb250U2l6ZT9pLmZvbnRTaXplOndpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmZvbnRTaXplLEE9cGFyc2VJbnQoVCwxMCkqNSsicHgiO2Iuc3R5bGUubWluV2lkdGg9QSxiLnN0eWxlLm1heFdpZHRoPUF9ZWxzZSBiLnN0eWxlLndpZHRoPSIxMDAlIjt3KGIpfW8oQywic2V0dXBJbWFnZSIpLHNldFRpbWVvdXQoKCk9PntiLmNvbXBsZXRlJiZDKCl9KSxiLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixDKSxiLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLEMpfSkpKX1wPWcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkseS5hdHRyKCJ3aWR0aCIscC53aWR0aCkseS5hdHRyKCJoZWlnaHQiLHAuaGVpZ2h0KX1yZXR1cm4gcz91LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1wLndpZHRoLzIrIiwgIistcC5oZWlnaHQvMisiKSIpOnUuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsICIrLXAuaGVpZ2h0LzIrIikiKSxlLmNlbnRlckxhYmVsJiZ1LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1wLndpZHRoLzIrIiwgIistcC5oZWlnaHQvMisiKSIpLHUuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikse3NoYXBlU3ZnOmwsYmJveDpwLGhhbGZQYWRkaW5nOm0sbGFiZWw6dX19LCJsYWJlbEhlbHBlciIpLFFuPW8oKHQsZSk9PntsZXQgcj1lLm5vZGUoKS5nZXRCQm94KCk7dC53aWR0aD1yLndpZHRoLHQuaGVpZ2h0PXIuaGVpZ2h0fSwidXBkYXRlTm9kZUJvdW5kcyIpO28oSGwsImluc2VydFBvbHlnb25TaGFwZSIpfSk7dmFyIE10dCxhdmUsc3ZlPU4oKCk9PnsidXNlIHN0cmljdCI7aUYoKTt2dCgpO3p0KCk7bkYoKTtNdHQ9byhhc3luYyh0LGUpPT57ZS51c2VIdG1sTGFiZWxzfHxtZSgpLmZsb3djaGFydC5odG1sTGFiZWxzfHwoZS5jZW50ZXJMYWJlbD0hMCk7bGV0e3NoYXBlU3ZnOm4sYmJveDppLGhhbGZQYWRkaW5nOmF9PWF3YWl0IERpKHQsZSwibm9kZSAiK2UuY2xhc3NlcywhMCk7WS5pbmZvKCJDbGFzc2VzID0gIixlLmNsYXNzZXMpO2xldCBzPW4uaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIHMuYXR0cigicngiLGUucngpLmF0dHIoInJ5IixlLnJ5KS5hdHRyKCJ4IiwtaS53aWR0aC8yLWEpLmF0dHIoInkiLC1pLmhlaWdodC8yLWEpLmF0dHIoIndpZHRoIixpLndpZHRoK2UucGFkZGluZykuYXR0cigiaGVpZ2h0IixpLmhlaWdodCtlLnBhZGRpbmcpLFFuKGUscyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24obCl7cmV0dXJuIEluLnJlY3QoZSxsKX0sbn0sIm5vdGUiKSxhdmU9TXR0fSk7ZnVuY3Rpb24gYUYodCxlLHIsbil7bGV0IGk9W10sYT1vKGw9PntpLnB1c2gobCwwKX0sImFkZEJvcmRlciIpLHM9byhsPT57aS5wdXNoKDAsbCl9LCJza2lwQm9yZGVyIik7ZS5pbmNsdWRlcygidCIpPyhZLmRlYnVnKCJhZGQgdG9wIGJvcmRlciIpLGEocikpOnMociksZS5pbmNsdWRlcygiciIpPyhZLmRlYnVnKCJhZGQgcmlnaHQgYm9yZGVyIiksYShuKSk6cyhuKSxlLmluY2x1ZGVzKCJiIik/KFkuZGVidWcoImFkZCBib3R0b20gYm9yZGVyIiksYShyKSk6cyhyKSxlLmluY2x1ZGVzKCJsIik/KFkuZGVidWcoImFkZCBsZWZ0IGJvcmRlciIpLGEobikpOnMobiksdC5hdHRyKCJzdHJva2UtZGFzaGFycmF5IixpLmpvaW4oIiAiKSl9dmFyIG92ZSx5byxsdmUsSXR0LE90dCxQdHQsQnR0LEZ0dCwkdHQsenR0LEd0dCxWdHQsVXR0LEh0dCxXdHQscXR0LFl0dCxYdHQsanR0LEt0dCxRdHQsWnR0LGN2ZSxKdHQsZXJ0LHV2ZSxhQyxzRixodmUsZnZlPU4oKCk9PnsidXNlIHN0cmljdCI7ZHIoKTt6dCgpO2dyKCk7dnQoKTtZeWUoKTtyQygpO25GKCk7c3ZlKCk7aUYoKTtvdmU9byh0PT50PyIgIit0OiIiLCJmb3JtYXRDbGFzcyIpLHlvPW8oKHQsZSk9PmAke2V8fCJub2RlIGRlZmF1bHQifSR7b3ZlKHQuY2xhc3Nlcyl9ICR7b3ZlKHQuY2xhc3MpfWAsImdldENsYXNzZXNGcm9tTm9kZSIpLGx2ZT1vKGFzeW5jKHQsZSk9PntsZXR7c2hhcGVTdmc6cixiYm94Om59PWF3YWl0IERpKHQsZSx5byhlLHZvaWQgMCksITApLGk9bi53aWR0aCtlLnBhZGRpbmcsYT1uLmhlaWdodCtlLnBhZGRpbmcscz1pK2EsbD1be3g6cy8yLHk6MH0se3g6cyx5Oi1zLzJ9LHt4OnMvMix5Oi1zfSx7eDowLHk6LXMvMn1dO1kuaW5mbygiUXVlc3Rpb24gbWFpbiAoQ2lyY2xlKSIpO2xldCB1PUhsKHIscyxzLGwpO3JldHVybiB1LmF0dHIoInN0eWxlIixlLnN0eWxlKSxRbihlLHUpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGgpe3JldHVybiBZLndhcm4oIkludGVyc2VjdCBjYWxsZWQiKSxJbi5wb2x5Z29uKGUsbCxoKX0scn0sInF1ZXN0aW9uIiksSXR0PW8oKHQsZSk9PntsZXQgcj10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZSBkZWZhdWx0IikuYXR0cigiaWQiLGUuZG9tSWR8fGUuaWQpLG49MjgsaT1be3g6MCx5Om4vMn0se3g6bi8yLHk6MH0se3g6MCx5Oi1uLzJ9LHt4Oi1uLzIseTowfV07cmV0dXJuIHIuaW5zZXJ0KCJwb2x5Z29uIiwiOmZpcnN0LWNoaWxkIikuYXR0cigicG9pbnRzIixpLm1hcChmdW5jdGlvbihzKXtyZXR1cm4gcy54KyIsIitzLnl9KS5qb2luKCIgIikpLmF0dHIoImNsYXNzIiwic3RhdGUtc3RhcnQiKS5hdHRyKCJyIiw3KS5hdHRyKCJ3aWR0aCIsMjgpLmF0dHIoImhlaWdodCIsMjgpLGUud2lkdGg9MjgsZS5oZWlnaHQ9MjgsZS5pbnRlcnNlY3Q9ZnVuY3Rpb24ocyl7cmV0dXJuIEluLmNpcmNsZShlLDE0LHMpfSxyfSwiY2hvaWNlIiksT3R0PW8oYXN5bmModCxlKT0+e2xldHtzaGFwZVN2ZzpyLGJib3g6bn09YXdhaXQgRGkodCxlLHlvKGUsdm9pZCAwKSwhMCksaT00LGE9bi5oZWlnaHQrZS5wYWRkaW5nLHM9YS9pLGw9bi53aWR0aCsyKnMrZS5wYWRkaW5nLHU9W3t4OnMseTowfSx7eDpsLXMseTowfSx7eDpsLHk6LWEvMn0se3g6bC1zLHk6LWF9LHt4OnMseTotYX0se3g6MCx5Oi1hLzJ9XSxoPUhsKHIsbCxhLHUpO3JldHVybiBoLmF0dHIoInN0eWxlIixlLnN0eWxlKSxRbihlLGgpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGYpe3JldHVybiBJbi5wb2x5Z29uKGUsdSxmKX0scn0sImhleGFnb24iKSxQdHQ9byhhc3luYyh0LGUpPT57bGV0e3NoYXBlU3ZnOnIsYmJveDpufT1hd2FpdCBEaSh0LGUsdm9pZCAwLCEwKSxpPTIsYT1uLmhlaWdodCsyKmUucGFkZGluZyxzPWEvaSxsPW4ud2lkdGgrMipzK2UucGFkZGluZyx1PXF5ZShlLmRpcmVjdGlvbnMsbixlKSxoPUhsKHIsbCxhLHUpO3JldHVybiBoLmF0dHIoInN0eWxlIixlLnN0eWxlKSxRbihlLGgpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGYpe3JldHVybiBJbi5wb2x5Z29uKGUsdSxmKX0scn0sImJsb2NrX2Fycm93IiksQnR0PW8oYXN5bmModCxlKT0+e2xldHtzaGFwZVN2ZzpyLGJib3g6bn09YXdhaXQgRGkodCxlLHlvKGUsdm9pZCAwKSwhMCksaT1uLndpZHRoK2UucGFkZGluZyxhPW4uaGVpZ2h0K2UucGFkZGluZyxzPVt7eDotYS8yLHk6MH0se3g6aSx5OjB9LHt4OmkseTotYX0se3g6LWEvMix5Oi1hfSx7eDowLHk6LWEvMn1dO3JldHVybiBIbChyLGksYSxzKS5hdHRyKCJzdHlsZSIsZS5zdHlsZSksZS53aWR0aD1pK2EsZS5oZWlnaHQ9YSxlLmludGVyc2VjdD1mdW5jdGlvbih1KXtyZXR1cm4gSW4ucG9seWdvbihlLHMsdSl9LHJ9LCJyZWN0X2xlZnRfaW52X2Fycm93IiksRnR0PW8oYXN5bmModCxlKT0+e2xldHtzaGFwZVN2ZzpyLGJib3g6bn09YXdhaXQgRGkodCxlLHlvKGUpLCEwKSxpPW4ud2lkdGgrZS5wYWRkaW5nLGE9bi5oZWlnaHQrZS5wYWRkaW5nLHM9W3t4Oi0yKmEvNix5OjB9LHt4OmktYS82LHk6MH0se3g6aSsyKmEvNix5Oi1hfSx7eDphLzYseTotYX1dLGw9SGwocixpLGEscyk7cmV0dXJuIGwuYXR0cigic3R5bGUiLGUuc3R5bGUpLFFuKGUsbCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odSl7cmV0dXJuIEluLnBvbHlnb24oZSxzLHUpfSxyfSwibGVhbl9yaWdodCIpLCR0dD1vKGFzeW5jKHQsZSk9PntsZXR7c2hhcGVTdmc6cixiYm94Om59PWF3YWl0IERpKHQsZSx5byhlLHZvaWQgMCksITApLGk9bi53aWR0aCtlLnBhZGRpbmcsYT1uLmhlaWdodCtlLnBhZGRpbmcscz1be3g6MiphLzYseTowfSx7eDppK2EvNix5OjB9LHt4OmktMiphLzYseTotYX0se3g6LWEvNix5Oi1hfV0sbD1IbChyLGksYSxzKTtyZXR1cm4gbC5hdHRyKCJzdHlsZSIsZS5zdHlsZSksUW4oZSxsKSxlLmludGVyc2VjdD1mdW5jdGlvbih1KXtyZXR1cm4gSW4ucG9seWdvbihlLHMsdSl9LHJ9LCJsZWFuX2xlZnQiKSx6dHQ9byhhc3luYyh0LGUpPT57bGV0e3NoYXBlU3ZnOnIsYmJveDpufT1hd2FpdCBEaSh0LGUseW8oZSx2b2lkIDApLCEwKSxpPW4ud2lkdGgrZS5wYWRkaW5nLGE9bi5oZWlnaHQrZS5wYWRkaW5nLHM9W3t4Oi0yKmEvNix5OjB9LHt4OmkrMiphLzYseTowfSx7eDppLWEvNix5Oi1hfSx7eDphLzYseTotYX1dLGw9SGwocixpLGEscyk7cmV0dXJuIGwuYXR0cigic3R5bGUiLGUuc3R5bGUpLFFuKGUsbCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odSl7cmV0dXJuIEluLnBvbHlnb24oZSxzLHUpfSxyfSwidHJhcGV6b2lkIiksR3R0PW8oYXN5bmModCxlKT0+e2xldHtzaGFwZVN2ZzpyLGJib3g6bn09YXdhaXQgRGkodCxlLHlvKGUsdm9pZCAwKSwhMCksaT1uLndpZHRoK2UucGFkZGluZyxhPW4uaGVpZ2h0K2UucGFkZGluZyxzPVt7eDphLzYseTowfSx7eDppLWEvNix5OjB9LHt4OmkrMiphLzYseTotYX0se3g6LTIqYS82LHk6LWF9XSxsPUhsKHIsaSxhLHMpO3JldHVybiBsLmF0dHIoInN0eWxlIixlLnN0eWxlKSxRbihlLGwpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHUpe3JldHVybiBJbi5wb2x5Z29uKGUscyx1KX0scn0sImludl90cmFwZXpvaWQiKSxWdHQ9byhhc3luYyh0LGUpPT57bGV0e3NoYXBlU3ZnOnIsYmJveDpufT1hd2FpdCBEaSh0LGUseW8oZSx2b2lkIDApLCEwKSxpPW4ud2lkdGgrZS5wYWRkaW5nLGE9bi5oZWlnaHQrZS5wYWRkaW5nLHM9W3t4OjAseTowfSx7eDppK2EvMix5OjB9LHt4OmkseTotYS8yfSx7eDppK2EvMix5Oi1hfSx7eDowLHk6LWF9XSxsPUhsKHIsaSxhLHMpO3JldHVybiBsLmF0dHIoInN0eWxlIixlLnN0eWxlKSxRbihlLGwpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHUpe3JldHVybiBJbi5wb2x5Z29uKGUscyx1KX0scn0sInJlY3RfcmlnaHRfaW52X2Fycm93IiksVXR0PW8oYXN5bmModCxlKT0+e2xldHtzaGFwZVN2ZzpyLGJib3g6bn09YXdhaXQgRGkodCxlLHlvKGUsdm9pZCAwKSwhMCksaT1uLndpZHRoK2UucGFkZGluZyxhPWkvMixzPWEvKDIuNStpLzUwKSxsPW4uaGVpZ2h0K3MrZS5wYWRkaW5nLHU9Ik0gMCwiK3MrIiBhICIrYSsiLCIrcysiIDAsMCwwICIraSsiIDAgYSAiK2ErIiwiK3MrIiAwLDAsMCAiKy1pKyIgMCBsIDAsIitsKyIgYSAiK2ErIiwiK3MrIiAwLDAsMCAiK2krIiAwIGwgMCwiKy1sLGg9ci5hdHRyKCJsYWJlbC1vZmZzZXQteSIscykuaW5zZXJ0KCJwYXRoIiwiOmZpcnN0LWNoaWxkIikuYXR0cigic3R5bGUiLGUuc3R5bGUpLmF0dHIoImQiLHUpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1pLzIrIiwiKy0obC8yK3MpKyIpIik7cmV0dXJuIFFuKGUsaCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oZil7bGV0IGQ9SW4ucmVjdChlLGYpLHA9ZC54LWUueDtpZihhIT0wJiYoTWF0aC5hYnMocCk8ZS53aWR0aC8yfHxNYXRoLmFicyhwKT09ZS53aWR0aC8yJiZNYXRoLmFicyhkLnktZS55KT5lLmhlaWdodC8yLXMpKXtsZXQgbT1zKnMqKDEtcCpwLyhhKmEpKTttIT0wJiYobT1NYXRoLnNxcnQobSkpLG09cy1tLGYueS1lLnk+MCYmKG09LW0pLGQueSs9bX1yZXR1cm4gZH0scn0sImN5bGluZGVyIiksSHR0PW8oYXN5bmModCxlKT0+e2xldHtzaGFwZVN2ZzpyLGJib3g6bixoYWxmUGFkZGluZzppfT1hd2FpdCBEaSh0LGUsIm5vZGUgIitlLmNsYXNzZXMrIiAiK2UuY2xhc3MsITApLGE9ci5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxzPWUucG9zaXRpb25lZD9lLndpZHRoOm4ud2lkdGgrZS5wYWRkaW5nLGw9ZS5wb3NpdGlvbmVkP2UuaGVpZ2h0Om4uaGVpZ2h0K2UucGFkZGluZyx1PWUucG9zaXRpb25lZD8tcy8yOi1uLndpZHRoLzItaSxoPWUucG9zaXRpb25lZD8tbC8yOi1uLmhlaWdodC8yLWk7aWYoYS5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInN0eWxlIixlLnN0eWxlKS5hdHRyKCJyeCIsZS5yeCkuYXR0cigicnkiLGUucnkpLmF0dHIoIngiLHUpLmF0dHIoInkiLGgpLmF0dHIoIndpZHRoIixzKS5hdHRyKCJoZWlnaHQiLGwpLGUucHJvcHMpe2xldCBmPW5ldyBTZXQoT2JqZWN0LmtleXMoZS5wcm9wcykpO2UucHJvcHMuYm9yZGVycyYmKGFGKGEsZS5wcm9wcy5ib3JkZXJzLHMsbCksZi5kZWxldGUoImJvcmRlcnMiKSksZi5mb3JFYWNoKGQ9PntZLndhcm4oYFVua25vd24gbm9kZSBwcm9wZXJ0eSAke2R9YCl9KX1yZXR1cm4gUW4oZSxhKSxlLmludGVyc2VjdD1mdW5jdGlvbihmKXtyZXR1cm4gSW4ucmVjdChlLGYpfSxyfSwicmVjdCIpLFd0dD1vKGFzeW5jKHQsZSk9PntsZXR7c2hhcGVTdmc6cixiYm94Om4saGFsZlBhZGRpbmc6aX09YXdhaXQgRGkodCxlLCJub2RlICIrZS5jbGFzc2VzLCEwKSxhPXIuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikscz1lLnBvc2l0aW9uZWQ/ZS53aWR0aDpuLndpZHRoK2UucGFkZGluZyxsPWUucG9zaXRpb25lZD9lLmhlaWdodDpuLmhlaWdodCtlLnBhZGRpbmcsdT1lLnBvc2l0aW9uZWQ/LXMvMjotbi53aWR0aC8yLWksaD1lLnBvc2l0aW9uZWQ/LWwvMjotbi5oZWlnaHQvMi1pO2lmKGEuYXR0cigiY2xhc3MiLCJiYXNpYyBjbHVzdGVyIGNvbXBvc2l0ZSBsYWJlbC1jb250YWluZXIiKS5hdHRyKCJzdHlsZSIsZS5zdHlsZSkuYXR0cigicngiLGUucngpLmF0dHIoInJ5IixlLnJ5KS5hdHRyKCJ4Iix1KS5hdHRyKCJ5IixoKS5hdHRyKCJ3aWR0aCIscykuYXR0cigiaGVpZ2h0IixsKSxlLnByb3BzKXtsZXQgZj1uZXcgU2V0KE9iamVjdC5rZXlzKGUucHJvcHMpKTtlLnByb3BzLmJvcmRlcnMmJihhRihhLGUucHJvcHMuYm9yZGVycyxzLGwpLGYuZGVsZXRlKCJib3JkZXJzIikpLGYuZm9yRWFjaChkPT57WS53YXJuKGBVbmtub3duIG5vZGUgcHJvcGVydHkgJHtkfWApfSl9cmV0dXJuIFFuKGUsYSksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oZil7cmV0dXJuIEluLnJlY3QoZSxmKX0scn0sImNvbXBvc2l0ZSIpLHF0dD1vKGFzeW5jKHQsZSk9PntsZXR7c2hhcGVTdmc6cn09YXdhaXQgRGkodCxlLCJsYWJlbCIsITApO1kudHJhY2UoIkNsYXNzZXMgPSAiLGUuY2xhc3MpO2xldCBuPXIuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksaT0wLGE9MDtpZihuLmF0dHIoIndpZHRoIixpKS5hdHRyKCJoZWlnaHQiLGEpLHIuYXR0cigiY2xhc3MiLCJsYWJlbCBlZGdlTGFiZWwiKSxlLnByb3BzKXtsZXQgcz1uZXcgU2V0KE9iamVjdC5rZXlzKGUucHJvcHMpKTtlLnByb3BzLmJvcmRlcnMmJihhRihuLGUucHJvcHMuYm9yZGVycyxpLGEpLHMuZGVsZXRlKCJib3JkZXJzIikpLHMuZm9yRWFjaChsPT57WS53YXJuKGBVbmtub3duIG5vZGUgcHJvcGVydHkgJHtsfWApfSl9cmV0dXJuIFFuKGUsbiksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24ocyl7cmV0dXJuIEluLnJlY3QoZSxzKX0scn0sImxhYmVsUmVjdCIpO28oYUYsImFwcGx5Tm9kZVByb3BlcnR5Qm9yZGVycyIpO1l0dD1vKCh0LGUpPT57bGV0IHI7ZS5jbGFzc2VzP3I9Im5vZGUgIitlLmNsYXNzZXM6cj0ibm9kZSBkZWZhdWx0IjtsZXQgbj10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIixyKS5hdHRyKCJpZCIsZS5kb21JZHx8ZS5pZCksaT1uLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLGE9bi5pbnNlcnQoImxpbmUiKSxzPW4uaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLGw9ZS5sYWJlbFRleHQuZmxhdD9lLmxhYmVsVGV4dC5mbGF0KCk6ZS5sYWJlbFRleHQsdT0iIjt0eXBlb2YgbD09Im9iamVjdCI/dT1sWzBdOnU9bCxZLmluZm8oIkxhYmVsIHRleHQgYWJjNzkiLHUsbCx0eXBlb2YgbD09Im9iamVjdCIpO2xldCBoPXMubm9kZSgpLmFwcGVuZENoaWxkKHZzKHUsZS5sYWJlbFN0eWxlLCEwLCEwKSksZj17d2lkdGg6MCxoZWlnaHQ6MH07aWYoZnIobWUoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe2xldCB5PWguY2hpbGRyZW5bMF0sdj1HZShoKTtmPXkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdi5hdHRyKCJ3aWR0aCIsZi53aWR0aCksdi5hdHRyKCJoZWlnaHQiLGYuaGVpZ2h0KX1ZLmluZm8oIlRleHQgMiIsbCk7bGV0IGQ9bC5zbGljZSgxLGwubGVuZ3RoKSxwPWguZ2V0QkJveCgpLG09cy5ub2RlKCkuYXBwZW5kQ2hpbGQodnMoZC5qb2luP2Quam9pbigiPGJyLz4iKTpkLGUubGFiZWxTdHlsZSwhMCwhMCkpO2lmKGZyKG1lKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtsZXQgeT1tLmNoaWxkcmVuWzBdLHY9R2UobSk7Zj15LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHYuYXR0cigid2lkdGgiLGYud2lkdGgpLHYuYXR0cigiaGVpZ2h0IixmLmhlaWdodCl9bGV0IGc9ZS5wYWRkaW5nLzI7cmV0dXJuIEdlKG0pLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIisoZi53aWR0aD5wLndpZHRoPzA6KHAud2lkdGgtZi53aWR0aCkvMikrIiwgIisocC5oZWlnaHQrZys1KSsiKSIpLEdlKGgpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIisoZi53aWR0aDxwLndpZHRoPzA6LShwLndpZHRoLWYud2lkdGgpLzIpKyIsIDApIiksZj1zLm5vZGUoKS5nZXRCQm94KCkscy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistZi53aWR0aC8yKyIsICIrKC1mLmhlaWdodC8yLWcrMykrIikiKSxpLmF0dHIoImNsYXNzIiwib3V0ZXIgdGl0bGUtc3RhdGUiKS5hdHRyKCJ4IiwtZi53aWR0aC8yLWcpLmF0dHIoInkiLC1mLmhlaWdodC8yLWcpLmF0dHIoIndpZHRoIixmLndpZHRoK2UucGFkZGluZykuYXR0cigiaGVpZ2h0IixmLmhlaWdodCtlLnBhZGRpbmcpLGEuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDEiLC1mLndpZHRoLzItZykuYXR0cigieDIiLGYud2lkdGgvMitnKS5hdHRyKCJ5MSIsLWYuaGVpZ2h0LzItZytwLmhlaWdodCtnKS5hdHRyKCJ5MiIsLWYuaGVpZ2h0LzItZytwLmhlaWdodCtnKSxRbihlLGkpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHkpe3JldHVybiBJbi5yZWN0KGUseSl9LG59LCJyZWN0V2l0aFRpdGxlIiksWHR0PW8oYXN5bmModCxlKT0+e2xldHtzaGFwZVN2ZzpyLGJib3g6bn09YXdhaXQgRGkodCxlLHlvKGUsdm9pZCAwKSwhMCksaT1uLmhlaWdodCtlLnBhZGRpbmcsYT1uLndpZHRoK2kvNCtlLnBhZGRpbmcscz1yLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInN0eWxlIixlLnN0eWxlKS5hdHRyKCJyeCIsaS8yKS5hdHRyKCJyeSIsaS8yKS5hdHRyKCJ4IiwtYS8yKS5hdHRyKCJ5IiwtaS8yKS5hdHRyKCJ3aWR0aCIsYSkuYXR0cigiaGVpZ2h0IixpKTtyZXR1cm4gUW4oZSxzKSxlLmludGVyc2VjdD1mdW5jdGlvbihsKXtyZXR1cm4gSW4ucmVjdChlLGwpfSxyfSwic3RhZGl1bSIpLGp0dD1vKGFzeW5jKHQsZSk9PntsZXR7c2hhcGVTdmc6cixiYm94Om4saGFsZlBhZGRpbmc6aX09YXdhaXQgRGkodCxlLHlvKGUsdm9pZCAwKSwhMCksYT1yLmluc2VydCgiY2lyY2xlIiwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIGEuYXR0cigic3R5bGUiLGUuc3R5bGUpLmF0dHIoInJ4IixlLnJ4KS5hdHRyKCJyeSIsZS5yeSkuYXR0cigiciIsbi53aWR0aC8yK2kpLmF0dHIoIndpZHRoIixuLndpZHRoK2UucGFkZGluZykuYXR0cigiaGVpZ2h0IixuLmhlaWdodCtlLnBhZGRpbmcpLFkuaW5mbygiQ2lyY2xlIG1haW4iKSxRbihlLGEpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHMpe3JldHVybiBZLmluZm8oIkNpcmNsZSBpbnRlcnNlY3QiLGUsbi53aWR0aC8yK2kscyksSW4uY2lyY2xlKGUsbi53aWR0aC8yK2kscyl9LHJ9LCJjaXJjbGUiKSxLdHQ9byhhc3luYyh0LGUpPT57bGV0e3NoYXBlU3ZnOnIsYmJveDpuLGhhbGZQYWRkaW5nOml9PWF3YWl0IERpKHQsZSx5byhlLHZvaWQgMCksITApLGE9NSxzPXIuaW5zZXJ0KCJnIiwiOmZpcnN0LWNoaWxkIiksbD1zLmluc2VydCgiY2lyY2xlIiksdT1zLmluc2VydCgiY2lyY2xlIik7cmV0dXJuIHMuYXR0cigiY2xhc3MiLGUuY2xhc3MpLGwuYXR0cigic3R5bGUiLGUuc3R5bGUpLmF0dHIoInJ4IixlLnJ4KS5hdHRyKCJyeSIsZS5yeSkuYXR0cigiciIsbi53aWR0aC8yK2krYSkuYXR0cigid2lkdGgiLG4ud2lkdGgrZS5wYWRkaW5nK2EqMikuYXR0cigiaGVpZ2h0IixuLmhlaWdodCtlLnBhZGRpbmcrYSoyKSx1LmF0dHIoInN0eWxlIixlLnN0eWxlKS5hdHRyKCJyeCIsZS5yeCkuYXR0cigicnkiLGUucnkpLmF0dHIoInIiLG4ud2lkdGgvMitpKS5hdHRyKCJ3aWR0aCIsbi53aWR0aCtlLnBhZGRpbmcpLmF0dHIoImhlaWdodCIsbi5oZWlnaHQrZS5wYWRkaW5nKSxZLmluZm8oIkRvdWJsZUNpcmNsZSBtYWluIiksUW4oZSxsKSxlLmludGVyc2VjdD1mdW5jdGlvbihoKXtyZXR1cm4gWS5pbmZvKCJEb3VibGVDaXJjbGUgaW50ZXJzZWN0IixlLG4ud2lkdGgvMitpK2EsaCksSW4uY2lyY2xlKGUsbi53aWR0aC8yK2krYSxoKX0scn0sImRvdWJsZWNpcmNsZSIpLFF0dD1vKGFzeW5jKHQsZSk9PntsZXR7c2hhcGVTdmc6cixiYm94Om59PWF3YWl0IERpKHQsZSx5byhlLHZvaWQgMCksITApLGk9bi53aWR0aCtlLnBhZGRpbmcsYT1uLmhlaWdodCtlLnBhZGRpbmcscz1be3g6MCx5OjB9LHt4OmkseTowfSx7eDppLHk6LWF9LHt4OjAseTotYX0se3g6MCx5OjB9LHt4Oi04LHk6MH0se3g6aSs4LHk6MH0se3g6aSs4LHk6LWF9LHt4Oi04LHk6LWF9LHt4Oi04LHk6MH1dLGw9SGwocixpLGEscyk7cmV0dXJuIGwuYXR0cigic3R5bGUiLGUuc3R5bGUpLFFuKGUsbCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odSl7cmV0dXJuIEluLnBvbHlnb24oZSxzLHUpfSxyfSwic3Vicm91dGluZSIpLFp0dD1vKCh0LGUpPT57bGV0IHI9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCIpLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxuPXIuaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gbi5hdHRyKCJjbGFzcyIsInN0YXRlLXN0YXJ0IikuYXR0cigiciIsNykuYXR0cigid2lkdGgiLDE0KS5hdHRyKCJoZWlnaHQiLDE0KSxRbihlLG4pLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGkpe3JldHVybiBJbi5jaXJjbGUoZSw3LGkpfSxyfSwic3RhcnQiKSxjdmU9bygodCxlLHIpPT57bGV0IG49dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCIpLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxpPTcwLGE9MTA7cj09PSJMUiImJihpPTEwLGE9NzApO2xldCBzPW4uYXBwZW5kKCJyZWN0IikuYXR0cigieCIsLTEqaS8yKS5hdHRyKCJ5IiwtMSphLzIpLmF0dHIoIndpZHRoIixpKS5hdHRyKCJoZWlnaHQiLGEpLmF0dHIoImNsYXNzIiwiZm9yay1qb2luIik7cmV0dXJuIFFuKGUscyksZS5oZWlnaHQ9ZS5oZWlnaHQrZS5wYWRkaW5nLzIsZS53aWR0aD1lLndpZHRoK2UucGFkZGluZy8yLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGwpe3JldHVybiBJbi5yZWN0KGUsbCl9LG59LCJmb3JrSm9pbiIpLEp0dD1vKCh0LGUpPT57bGV0IHI9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCIpLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxuPXIuaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKSxpPXIuaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gaS5hdHRyKCJjbGFzcyIsInN0YXRlLXN0YXJ0IikuYXR0cigiciIsNykuYXR0cigid2lkdGgiLDE0KS5hdHRyKCJoZWlnaHQiLDE0KSxuLmF0dHIoImNsYXNzIiwic3RhdGUtZW5kIikuYXR0cigiciIsNSkuYXR0cigid2lkdGgiLDEwKS5hdHRyKCJoZWlnaHQiLDEwKSxRbihlLGkpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGEpe3JldHVybiBJbi5jaXJjbGUoZSw3LGEpfSxyfSwiZW5kIiksZXJ0PW8oKHQsZSk9PntsZXQgcj1lLnBhZGRpbmcvMixuPTQsaT04LGE7ZS5jbGFzc2VzP2E9Im5vZGUgIitlLmNsYXNzZXM6YT0ibm9kZSBkZWZhdWx0IjtsZXQgcz10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIixhKS5hdHRyKCJpZCIsZS5kb21JZHx8ZS5pZCksbD1zLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLHU9cy5pbnNlcnQoImxpbmUiKSxoPXMuaW5zZXJ0KCJsaW5lIiksZj0wLGQ9bixwPXMuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLG09MCxnPWUuY2xhc3NEYXRhLmFubm90YXRpb25zPy5bMF0seT1lLmNsYXNzRGF0YS5hbm5vdGF0aW9uc1swXT8iXHhBQiIrZS5jbGFzc0RhdGEuYW5ub3RhdGlvbnNbMF0rIlx4QkIiOiIiLHY9cC5ub2RlKCkuYXBwZW5kQ2hpbGQodnMoeSxlLmxhYmVsU3R5bGUsITAsITApKSx4PXYuZ2V0QkJveCgpO2lmKGZyKG1lKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtsZXQgUz12LmNoaWxkcmVuWzBdLF89R2Uodik7eD1TLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLF8uYXR0cigid2lkdGgiLHgud2lkdGgpLF8uYXR0cigiaGVpZ2h0Iix4LmhlaWdodCl9ZS5jbGFzc0RhdGEuYW5ub3RhdGlvbnNbMF0mJihkKz14LmhlaWdodCtuLGYrPXgud2lkdGgpO2xldCBiPWUuY2xhc3NEYXRhLmxhYmVsO2UuY2xhc3NEYXRhLnR5cGUhPT12b2lkIDAmJmUuY2xhc3NEYXRhLnR5cGUhPT0iIiYmKG1lKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHM/Yis9IiZsdDsiK2UuY2xhc3NEYXRhLnR5cGUrIiZndDsiOmIrPSI8IitlLmNsYXNzRGF0YS50eXBlKyI+Iik7bGV0IHc9cC5ub2RlKCkuYXBwZW5kQ2hpbGQodnMoYixlLmxhYmVsU3R5bGUsITAsITApKTtHZSh3KS5hdHRyKCJjbGFzcyIsImNsYXNzVGl0bGUiKTtsZXQgQz13LmdldEJCb3goKTtpZihmcihtZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7bGV0IFM9dy5jaGlsZHJlblswXSxfPUdlKHcpO0M9Uy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxfLmF0dHIoIndpZHRoIixDLndpZHRoKSxfLmF0dHIoImhlaWdodCIsQy5oZWlnaHQpfWQrPUMuaGVpZ2h0K24sQy53aWR0aD5mJiYoZj1DLndpZHRoKTtsZXQgVD1bXTtlLmNsYXNzRGF0YS5tZW1iZXJzLmZvckVhY2goUz0+e2xldCBfPVMuZ2V0RGlzcGxheURldGFpbHMoKSxJPV8uZGlzcGxheVRleHQ7bWUoKS5mbG93Y2hhcnQuaHRtbExhYmVscyYmKEk9SS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKSk7bGV0IEQ9cC5ub2RlKCkuYXBwZW5kQ2hpbGQodnMoSSxfLmNzc1N0eWxlP18uY3NzU3R5bGU6ZS5sYWJlbFN0eWxlLCEwLCEwKSksaz1ELmdldEJCb3goKTtpZihmcihtZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7bGV0IEw9RC5jaGlsZHJlblswXSxSPUdlKEQpO2s9TC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxSLmF0dHIoIndpZHRoIixrLndpZHRoKSxSLmF0dHIoImhlaWdodCIsay5oZWlnaHQpfWsud2lkdGg+ZiYmKGY9ay53aWR0aCksZCs9ay5oZWlnaHQrbixULnB1c2goRCl9KSxkKz1pO2xldCBFPVtdO2lmKGUuY2xhc3NEYXRhLm1ldGhvZHMuZm9yRWFjaChTPT57bGV0IF89Uy5nZXREaXNwbGF5RGV0YWlscygpLEk9Xy5kaXNwbGF5VGV4dDttZSgpLmZsb3djaGFydC5odG1sTGFiZWxzJiYoST1JLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpKTtsZXQgRD1wLm5vZGUoKS5hcHBlbmRDaGlsZCh2cyhJLF8uY3NzU3R5bGU/Xy5jc3NTdHlsZTplLmxhYmVsU3R5bGUsITAsITApKSxrPUQuZ2V0QkJveCgpO2lmKGZyKG1lKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtsZXQgTD1ELmNoaWxkcmVuWzBdLFI9R2UoRCk7az1MLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFIuYXR0cigid2lkdGgiLGsud2lkdGgpLFIuYXR0cigiaGVpZ2h0IixrLmhlaWdodCl9ay53aWR0aD5mJiYoZj1rLndpZHRoKSxkKz1rLmhlaWdodCtuLEUucHVzaChEKX0pLGQrPWksZyl7bGV0IFM9KGYteC53aWR0aCkvMjtHZSh2KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrKC0xKmYvMitTKSsiLCAiKy0xKmQvMisiKSIpLG09eC5oZWlnaHQrbn1sZXQgQT0oZi1DLndpZHRoKS8yO3JldHVybiBHZSh3KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrKC0xKmYvMitBKSsiLCAiKygtMSpkLzIrbSkrIikiKSxtKz1DLmhlaWdodCtuLHUuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDEiLC1mLzItcikuYXR0cigieDIiLGYvMityKS5hdHRyKCJ5MSIsLWQvMi1yK2krbSkuYXR0cigieTIiLC1kLzItcitpK20pLG0rPWksVC5mb3JFYWNoKFM9PntHZShTKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrLWYvMisiLCAiKygtMSpkLzIrbStpLzIpKyIpIik7bGV0IF89Uz8uZ2V0QkJveCgpO20rPShfPy5oZWlnaHQ/PzApK259KSxtKz1pLGguYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDEiLC1mLzItcikuYXR0cigieDIiLGYvMityKS5hdHRyKCJ5MSIsLWQvMi1yK2krbSkuYXR0cigieTIiLC1kLzItcitpK20pLG0rPWksRS5mb3JFYWNoKFM9PntHZShTKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrLWYvMisiLCAiKygtMSpkLzIrbSkrIikiKTtsZXQgXz1TPy5nZXRCQm94KCk7bSs9KF8/LmhlaWdodD8/MCkrbn0pLGwuYXR0cigic3R5bGUiLGUuc3R5bGUpLmF0dHIoImNsYXNzIiwib3V0ZXIgdGl0bGUtc3RhdGUiKS5hdHRyKCJ4IiwtZi8yLXIpLmF0dHIoInkiLC0oZC8yKS1yKS5hdHRyKCJ3aWR0aCIsZitlLnBhZGRpbmcpLmF0dHIoImhlaWdodCIsZCtlLnBhZGRpbmcpLFFuKGUsbCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oUyl7cmV0dXJuIEluLnJlY3QoZSxTKX0sc30sImNsYXNzX2JveCIpLHV2ZT17cmhvbWJ1czpsdmUsY29tcG9zaXRlOld0dCxxdWVzdGlvbjpsdmUscmVjdDpIdHQsbGFiZWxSZWN0OnF0dCxyZWN0V2l0aFRpdGxlOll0dCxjaG9pY2U6SXR0LGNpcmNsZTpqdHQsZG91YmxlY2lyY2xlOkt0dCxzdGFkaXVtOlh0dCxoZXhhZ29uOk90dCxibG9ja19hcnJvdzpQdHQscmVjdF9sZWZ0X2ludl9hcnJvdzpCdHQsbGVhbl9yaWdodDpGdHQsbGVhbl9sZWZ0OiR0dCx0cmFwZXpvaWQ6enR0LGludl90cmFwZXpvaWQ6R3R0LHJlY3RfcmlnaHRfaW52X2Fycm93OlZ0dCxjeWxpbmRlcjpVdHQsc3RhcnQ6WnR0LGVuZDpKdHQsbm90ZTphdmUsc3Vicm91dGluZTpRdHQsZm9yazpjdmUsam9pbjpjdmUsY2xhc3NfYm94OmVydH0sYUM9e30sc0Y9byhhc3luYyh0LGUscik9PntsZXQgbixpO2lmKGUubGluayl7bGV0IGE7bWUoKS5zZWN1cml0eUxldmVsPT09InNhbmRib3giP2E9Il90b3AiOmUubGlua1RhcmdldCYmKGE9ZS5saW5rVGFyZ2V0fHwiX2JsYW5rIiksbj10Lmluc2VydCgic3ZnOmEiKS5hdHRyKCJ4bGluazpocmVmIixlLmxpbmspLmF0dHIoInRhcmdldCIsYSksaT1hd2FpdCB1dmVbZS5zaGFwZV0obixlLHIpfWVsc2UgaT1hd2FpdCB1dmVbZS5zaGFwZV0odCxlLHIpLG49aTtyZXR1cm4gZS50b29sdGlwJiZpLmF0dHIoInRpdGxlIixlLnRvb2x0aXApLGUuY2xhc3MmJmkuYXR0cigiY2xhc3MiLCJub2RlIGRlZmF1bHQgIitlLmNsYXNzKSxhQ1tlLmlkXT1uLGUuaGF2ZUNhbGxiYWNrJiZhQ1tlLmlkXS5hdHRyKCJjbGFzcyIsYUNbZS5pZF0uYXR0cigiY2xhc3MiKSsiIGNsaWNrYWJsZSIpLG59LCJpbnNlcnROb2RlIiksaHZlPW8odD0+e2xldCBlPWFDW3QuaWRdO1kudHJhY2UoIlRyYW5zZm9ybWluZyBub2RlIix0LmRpZmYsdCwidHJhbnNsYXRlKCIrKHQueC10LndpZHRoLzItNSkrIiwgIit0LndpZHRoLzIrIikiKTtsZXQgcj04LG49dC5kaWZmfHwwO3JldHVybiB0LmNsdXN0ZXJOb2RlP2UuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKHQueCtuLXQud2lkdGgvMikrIiwgIisodC55LXQuaGVpZ2h0LzItcikrIikiKTplLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3QueCsiLCAiK3QueSsiKSIpLG59LCJwb3NpdGlvbk5vZGUiKX0pO2Z1bmN0aW9uIGR2ZSh0LGUscj0hMSl7bGV0IG49dCxpPSJkZWZhdWx0Ijsobj8uY2xhc3Nlcz8ubGVuZ3RofHwwKT4wJiYoaT0obj8uY2xhc3Nlcz8/W10pLmpvaW4oIiAiKSksaT1pKyIgZmxvd2NoYXJ0LWxhYmVsIjtsZXQgYT0wLHM9IiIsbDtzd2l0Y2gobi50eXBlKXtjYXNlInJvdW5kIjphPTUscz0icmVjdCI7YnJlYWs7Y2FzZSJjb21wb3NpdGUiOmE9MCxzPSJjb21wb3NpdGUiLGw9MDticmVhaztjYXNlInNxdWFyZSI6cz0icmVjdCI7YnJlYWs7Y2FzZSJkaWFtb25kIjpzPSJxdWVzdGlvbiI7YnJlYWs7Y2FzZSJoZXhhZ29uIjpzPSJoZXhhZ29uIjticmVhaztjYXNlImJsb2NrX2Fycm93IjpzPSJibG9ja19hcnJvdyI7YnJlYWs7Y2FzZSJvZGQiOnM9InJlY3RfbGVmdF9pbnZfYXJyb3ciO2JyZWFrO2Nhc2UibGVhbl9yaWdodCI6cz0ibGVhbl9yaWdodCI7YnJlYWs7Y2FzZSJsZWFuX2xlZnQiOnM9ImxlYW5fbGVmdCI7YnJlYWs7Y2FzZSJ0cmFwZXpvaWQiOnM9InRyYXBlem9pZCI7YnJlYWs7Y2FzZSJpbnZfdHJhcGV6b2lkIjpzPSJpbnZfdHJhcGV6b2lkIjticmVhaztjYXNlInJlY3RfbGVmdF9pbnZfYXJyb3ciOnM9InJlY3RfbGVmdF9pbnZfYXJyb3ciO2JyZWFrO2Nhc2UiY2lyY2xlIjpzPSJjaXJjbGUiO2JyZWFrO2Nhc2UiZWxsaXBzZSI6cz0iZWxsaXBzZSI7YnJlYWs7Y2FzZSJzdGFkaXVtIjpzPSJzdGFkaXVtIjticmVhaztjYXNlInN1YnJvdXRpbmUiOnM9InN1YnJvdXRpbmUiO2JyZWFrO2Nhc2UiY3lsaW5kZXIiOnM9ImN5bGluZGVyIjticmVhaztjYXNlImdyb3VwIjpzPSJyZWN0IjticmVhaztjYXNlImRvdWJsZWNpcmNsZSI6cz0iZG91YmxlY2lyY2xlIjticmVhaztkZWZhdWx0OnM9InJlY3QifWxldCB1PVk5KG4/LnN0eWxlcz8/W10pLGg9bi5sYWJlbCxmPW4uc2l6ZT8/e3dpZHRoOjAsaGVpZ2h0OjAseDowLHk6MH07cmV0dXJue2xhYmVsU3R5bGU6dS5sYWJlbFN0eWxlLHNoYXBlOnMsbGFiZWxUZXh0Omgscng6YSxyeTphLGNsYXNzOmksc3R5bGU6dS5zdHlsZSxpZDpuLmlkLGRpcmVjdGlvbnM6bi5kaXJlY3Rpb25zLHdpZHRoOmYud2lkdGgsaGVpZ2h0OmYuaGVpZ2h0LHg6Zi54LHk6Zi55LHBvc2l0aW9uZWQ6cixpbnRlcnNlY3Q6dm9pZCAwLHR5cGU6bi50eXBlLHBhZGRpbmc6bD8/Y3IoKT8uYmxvY2s/LnBhZGRpbmc/PzB9fWFzeW5jIGZ1bmN0aW9uIHRydCh0LGUscil7bGV0IG49ZHZlKGUsciwhMSk7aWYobi50eXBlPT09Imdyb3VwIilyZXR1cm47bGV0IGk9Y3IoKSxhPWF3YWl0IHNGKHQsbix7Y29uZmlnOml9KSxzPWEubm9kZSgpLmdldEJCb3goKSxsPXIuZ2V0QmxvY2sobi5pZCk7bC5zaXplPXt3aWR0aDpzLndpZHRoLGhlaWdodDpzLmhlaWdodCx4OjAseTowLG5vZGU6YX0sci5zZXRCbG9jayhsKSxhLnJlbW92ZSgpfWFzeW5jIGZ1bmN0aW9uIHJydCh0LGUscil7bGV0IG49ZHZlKGUsciwhMCk7aWYoci5nZXRCbG9jayhuLmlkKS50eXBlIT09InNwYWNlIil7bGV0IGE9Y3IoKTthd2FpdCBzRih0LG4se2NvbmZpZzphfSksZS5pbnRlcnNlY3Q9bj8uaW50ZXJzZWN0LGh2ZShuKX19YXN5bmMgZnVuY3Rpb24gb0YodCxlLHIsbil7Zm9yKGxldCBpIG9mIGUpYXdhaXQgbih0LGksciksaS5jaGlsZHJlbiYmYXdhaXQgb0YodCxpLmNoaWxkcmVuLHIsbil9YXN5bmMgZnVuY3Rpb24gcHZlKHQsZSxyKXthd2FpdCBvRih0LGUscix0cnQpfWFzeW5jIGZ1bmN0aW9uIG12ZSh0LGUscil7YXdhaXQgb0YodCxlLHIscnJ0KX1hc3luYyBmdW5jdGlvbiBndmUodCxlLHIsbixpKXtsZXQgYT1uZXcgc24oe211bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITB9KTthLnNldEdyYXBoKHtyYW5rZGlyOiJUQiIsbm9kZXNlcDoxMCxyYW5rc2VwOjEwLG1hcmdpbng6OCxtYXJnaW55Ojh9KTtmb3IobGV0IHMgb2YgcilzLnNpemUmJmEuc2V0Tm9kZShzLmlkLHt3aWR0aDpzLnNpemUud2lkdGgsaGVpZ2h0OnMuc2l6ZS5oZWlnaHQsaW50ZXJzZWN0OnMuaW50ZXJzZWN0fSk7Zm9yKGxldCBzIG9mIGUpaWYocy5zdGFydCYmcy5lbmQpe2xldCBsPW4uZ2V0QmxvY2socy5zdGFydCksdT1uLmdldEJsb2NrKHMuZW5kKTtpZihsPy5zaXplJiZ1Py5zaXplKXtsZXQgaD1sLnNpemUsZj11LnNpemUsZD1be3g6aC54LHk6aC55fSx7eDpoLngrKGYueC1oLngpLzIseTpoLnkrKGYueS1oLnkpLzJ9LHt4OmYueCx5OmYueX1dO0h5ZSh0LHt2OnMuc3RhcnQsdzpzLmVuZCxuYW1lOnMuaWR9LHsuLi5zLGFycm93VHlwZUVuZDpzLmFycm93VHlwZUVuZCxhcnJvd1R5cGVTdGFydDpzLmFycm93VHlwZVN0YXJ0LHBvaW50czpkLGNsYXNzZXM6ImVkZ2UtdGhpY2tuZXNzLW5vcm1hbCBlZGdlLXBhdHRlcm4tc29saWQgZmxvd2NoYXJ0LWxpbmsgTFMtYTEgTEUtYjEifSx2b2lkIDAsImJsb2NrIixhLGkpLHMubGFiZWwmJihhd2FpdCBWeWUodCx7Li4ucyxsYWJlbDpzLmxhYmVsLGxhYmVsU3R5bGU6InN0cm9rZTogIzMzMzsgc3Ryb2tlLXdpZHRoOiAxLjVweDtmaWxsOm5vbmU7IixhcnJvd1R5cGVFbmQ6cy5hcnJvd1R5cGVFbmQsYXJyb3dUeXBlU3RhcnQ6cy5hcnJvd1R5cGVTdGFydCxwb2ludHM6ZCxjbGFzc2VzOiJlZGdlLXRoaWNrbmVzcy1ub3JtYWwgZWRnZS1wYXR0ZXJuLXNvbGlkIGZsb3djaGFydC1saW5rIExTLWExIExFLWIxIn0pLFV5ZSh7Li4ucyx4OmRbMV0ueCx5OmRbMV0ueX0se29yaWdpbmFsUGF0aDpkfSkpfX19dmFyIHl2ZT1OKCgpPT57InVzZSBzdHJpY3QiO1ZvKCk7amkoKTtXeWUoKTtmdmUoKTtpcigpO28oZHZlLCJnZXROb2RlRnJvbUJsb2NrIik7byh0cnQsImNhbGN1bGF0ZUJsb2NrU2l6ZSIpO28ocnJ0LCJpbnNlcnRCbG9ja1Bvc2l0aW9uZWQiKTtvKG9GLCJwZXJmb3JtT3BlcmF0aW9ucyIpO28ocHZlLCJjYWxjdWxhdGVCbG9ja1NpemVzIik7byhtdmUsImluc2VydEJsb2NrcyIpO28oZ3ZlLCJpbnNlcnRFZGdlcyIpfSk7dmFyIG5ydCxpcnQsdnZlLHh2ZT1OKCgpPT57InVzZSBzdHJpY3QiO2RyKCk7amkoKTtOeWUoKTt2dCgpO0VpKCk7UHllKCk7eXZlKCk7bnJ0PW8oZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5kYi5nZXRDbGFzc2VzKCl9LCJnZXRDbGFzc2VzIiksaXJ0PW8oYXN5bmMgZnVuY3Rpb24odCxlLHIsbil7bGV0e3NlY3VyaXR5TGV2ZWw6aSxibG9jazphfT1jcigpLHM9bi5kYixsO2k9PT0ic2FuZGJveCImJihsPUdlKCIjaSIrZSkpO2xldCB1PWk9PT0ic2FuZGJveCI/R2UobC5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KTpHZSgiYm9keSIpLGg9aT09PSJzYW5kYm94Ij91LnNlbGVjdChgW2lkPSIke2V9Il1gKTpHZShgW2lkPSIke2V9Il1gKTtSeWUoaCxbInBvaW50IiwiY2lyY2xlIiwiY3Jvc3MiXSxuLnR5cGUsZSk7bGV0IGQ9cy5nZXRCbG9ja3MoKSxwPXMuZ2V0QmxvY2tzRmxhdCgpLG09cy5nZXRFZGdlcygpLGc9aC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImJsb2NrIik7YXdhaXQgcHZlKGcsZCxzKTtsZXQgeT1PeWUocyk7aWYoYXdhaXQgbXZlKGcsZCxzKSxhd2FpdCBndmUoZyxtLHAscyxlKSx5KXtsZXQgdj15LHg9TWF0aC5tYXgoMSxNYXRoLnJvdW5kKC4xMjUqKHYud2lkdGgvdi5oZWlnaHQpKSksYj12LmhlaWdodCt4KzEwLHc9di53aWR0aCsxMCx7dXNlTWF4V2lkdGg6Q309YTt2bihoLGIsdywhIUMpLFkuZGVidWcoIkhlcmUgQm91bmRzIix5LHYpLGguYXR0cigidmlld0JveCIsYCR7di54LTV9ICR7di55LTV9ICR7di53aWR0aCsxMH0gJHt2LmhlaWdodCsxMH1gKX19LCJkcmF3IiksdnZlPXtkcmF3OmlydCxnZXRDbGFzc2VzOm5ydH19KTt2YXIgYnZlPXt9O2hyKGJ2ZSx7ZGlhZ3JhbTooKT0+YXJ0fSk7dmFyIGFydCx3dmU9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt3eWUoKTtfeWUoKTtMeWUoKTt4dmUoKTthcnQ9e3BhcnNlcjpieWUsZGI6QXllLHJlbmRlcmVyOnZ2ZSxzdHlsZXM6RHllfX0pO3ZhciBsRixjRix2NCxFdmUsdUYsSGEsWmMseDQsU3ZlLGNydCxiNCxDdmUsQXZlLF92ZSxEdmUsTHZlLHNDLEZmLG9DPU4oKCk9PnsidXNlIHN0cmljdCI7bEY9e0w6ImxlZnQiLFI6InJpZ2h0IixUOiJ0b3AiLEI6ImJvdHRvbSJ9LGNGPXtMOm8odD0+YCR7dH0sJHt0LzJ9IDAsJHt0fSAwLDBgLCJMIiksUjpvKHQ9PmAwLCR7dC8yfSAke3R9LDAgJHt0fSwke3R9YCwiUiIpLFQ6byh0PT5gMCwwICR7dH0sMCAke3QvMn0sJHt0fWAsIlQiKSxCOm8odD0+YCR7dC8yfSwwICR7dH0sJHt0fSAwLCR7dH1gLCJCIil9LHY0PXtMOm8oKHQsZSk9PnQtZSsyLCJMIiksUjpvKCh0LGUpPT50LTIsIlIiKSxUOm8oKHQsZSk9PnQtZSsyLCJUIiksQjpvKCh0LGUpPT50LTIsIkIiKX0sRXZlPW8oZnVuY3Rpb24odCl7cmV0dXJuIEhhKHQpP3Q9PT0iTCI/IlIiOiJMIjp0PT09IlQiPyJCIjoiVCJ9LCJnZXRPcHBvc2l0ZUFyY2hpdGVjdHVyZURpcmVjdGlvbiIpLHVGPW8oZnVuY3Rpb24odCl7bGV0IGU9dDtyZXR1cm4gZT09PSJMInx8ZT09PSJSInx8ZT09PSJUInx8ZT09PSJCIn0sImlzQXJjaGl0ZWN0dXJlRGlyZWN0aW9uIiksSGE9byhmdW5jdGlvbih0KXtsZXQgZT10O3JldHVybiBlPT09IkwifHxlPT09IlIifSwiaXNBcmNoaXRlY3R1cmVEaXJlY3Rpb25YIiksWmM9byhmdW5jdGlvbih0KXtsZXQgZT10O3JldHVybiBlPT09IlQifHxlPT09IkIifSwiaXNBcmNoaXRlY3R1cmVEaXJlY3Rpb25ZIikseDQ9byhmdW5jdGlvbih0LGUpe2xldCByPUhhKHQpJiZaYyhlKSxuPVpjKHQpJiZIYShlKTtyZXR1cm4gcnx8bn0sImlzQXJjaGl0ZWN0dXJlRGlyZWN0aW9uWFkiKSxTdmU9byhmdW5jdGlvbih0KXtsZXQgZT10WzBdLHI9dFsxXSxuPUhhKGUpJiZaYyhyKSxpPVpjKGUpJiZIYShyKTtyZXR1cm4gbnx8aX0sImlzQXJjaGl0ZWN0dXJlUGFpclhZIiksY3J0PW8oZnVuY3Rpb24odCl7cmV0dXJuIHQhPT0iTEwiJiZ0IT09IlJSIiYmdCE9PSJUVCImJnQhPT0iQkIifSwiaXNWYWxpZEFyY2hpdGVjdHVyZURpcmVjdGlvblBhaXIiKSxiND1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9YCR7dH0ke2V9YDtyZXR1cm4gY3J0KHIpP3I6dm9pZCAwfSwiZ2V0QXJjaGl0ZWN0dXJlRGlyZWN0aW9uUGFpciIpLEN2ZT1vKGZ1bmN0aW9uKFt0LGVdLHIpe2xldCBuPXJbMF0saT1yWzFdO3JldHVybiBIYShuKT9aYyhpKT9bdCsobj09PSJMIj8tMToxKSxlKyhpPT09IlQiPzE6LTEpXTpbdCsobj09PSJMIj8tMToxKSxlXTpIYShpKT9bdCsoaT09PSJMIj8xOi0xKSxlKyhuPT09IlQiPzE6LTEpXTpbdCxlKyhuPT09IlQiPzE6LTEpXX0sInNoaWZ0UG9zaXRpb25CeUFyY2hpdGVjdHVyZURpcmVjdGlvblBhaXIiKSxBdmU9byhmdW5jdGlvbih0KXtyZXR1cm4gdD09PSJMVCJ8fHQ9PT0iVEwiP1sxLDFdOnQ9PT0iQkwifHx0PT09IkxCIj9bMSwtMV06dD09PSJCUiJ8fHQ9PT0iUkIiP1stMSwtMV06Wy0xLDFdfSwiZ2V0QXJjaGl0ZWN0dXJlRGlyZWN0aW9uWFlGYWN0b3JzIiksX3ZlPW8oZnVuY3Rpb24odCxlKXtyZXR1cm4geDQodCxlKT8iYmVuZCI6SGEodCk/Imhvcml6b250YWwiOiJ2ZXJ0aWNhbCJ9LCJnZXRBcmNoaXRlY3R1cmVEaXJlY3Rpb25BbGlnbm1lbnQiKSxEdmU9byhmdW5jdGlvbih0KXtyZXR1cm4gdC50eXBlPT09InNlcnZpY2UifSwiaXNBcmNoaXRlY3R1cmVTZXJ2aWNlIiksTHZlPW8oZnVuY3Rpb24odCl7cmV0dXJuIHQudHlwZT09PSJqdW5jdGlvbiJ9LCJpc0FyY2hpdGVjdHVyZUp1bmN0aW9uIiksc0M9byh0PT50LmRhdGEoKSwiZWRnZURhdGEiKSxGZj1vKHQ9PnQuZGF0YSgpLCJub2RlRGF0YSIpfSk7ZnVuY3Rpb24gTGkodCl7bGV0IGU9bWUoKS5hcmNoaXRlY3R1cmU7cmV0dXJuIGU/Llt0XT9lW3RdOlJ2ZVt0XX12YXIgUnZlLHZyLHVydCxocnQsZnJ0LGRydCxwcnQsbXJ0LGhGLGdydCx5cnQsdnJ0LHhydCxicnQsd3J0LFRydCxRcCx3ND1OKCgpPT57InVzZSBzdHJpY3QiO1lhKCk7enQoKTtzNigpO21pKCk7b0MoKTtSdmU9b3IuYXJjaGl0ZWN0dXJlLHZyPW5ldyBwZigoKT0+KHtub2Rlczp7fSxncm91cHM6e30sZWRnZXM6W10scmVnaXN0ZXJlZElkczp7fSxjb25maWc6UnZlLGRhdGFTdHJ1Y3R1cmVzOnZvaWQgMCxlbGVtZW50czp7fX0pKSx1cnQ9bygoKT0+e3ZyLnJlc2V0KCksQXIoKX0sImNsZWFyIiksaHJ0PW8oZnVuY3Rpb24oe2lkOnQsaWNvbjplLGluOnIsdGl0bGU6bixpY29uVGV4dDppfSl7aWYodnIucmVjb3Jkcy5yZWdpc3RlcmVkSWRzW3RdIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgVGhlIHNlcnZpY2UgaWQgWyR7dH1dIGlzIGFscmVhZHkgaW4gdXNlIGJ5IGFub3RoZXIgJHt2ci5yZWNvcmRzLnJlZ2lzdGVyZWRJZHNbdF19YCk7aWYociE9PXZvaWQgMCl7aWYodD09PXIpdGhyb3cgbmV3IEVycm9yKGBUaGUgc2VydmljZSBbJHt0fV0gY2Fubm90IGJlIHBsYWNlZCB3aXRoaW4gaXRzZWxmYCk7aWYodnIucmVjb3Jkcy5yZWdpc3RlcmVkSWRzW3JdPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgVGhlIHNlcnZpY2UgWyR7dH1dJ3MgcGFyZW50IGRvZXMgbm90IGV4aXN0LiBQbGVhc2UgbWFrZSBzdXJlIHRoZSBwYXJlbnQgaXMgY3JlYXRlZCBiZWZvcmUgdGhpcyBzZXJ2aWNlYCk7aWYodnIucmVjb3Jkcy5yZWdpc3RlcmVkSWRzW3JdPT09Im5vZGUiKXRocm93IG5ldyBFcnJvcihgVGhlIHNlcnZpY2UgWyR7dH1dJ3MgcGFyZW50IGlzIG5vdCBhIGdyb3VwYCl9dnIucmVjb3Jkcy5yZWdpc3RlcmVkSWRzW3RdPSJub2RlIix2ci5yZWNvcmRzLm5vZGVzW3RdPXtpZDp0LHR5cGU6InNlcnZpY2UiLGljb246ZSxpY29uVGV4dDppLHRpdGxlOm4sZWRnZXM6W10saW46cn19LCJhZGRTZXJ2aWNlIiksZnJ0PW8oKCk9Pk9iamVjdC52YWx1ZXModnIucmVjb3Jkcy5ub2RlcykuZmlsdGVyKER2ZSksImdldFNlcnZpY2VzIiksZHJ0PW8oZnVuY3Rpb24oe2lkOnQsaW46ZX0pe3ZyLnJlY29yZHMucmVnaXN0ZXJlZElkc1t0XT0ibm9kZSIsdnIucmVjb3Jkcy5ub2Rlc1t0XT17aWQ6dCx0eXBlOiJqdW5jdGlvbiIsZWRnZXM6W10saW46ZX19LCJhZGRKdW5jdGlvbiIpLHBydD1vKCgpPT5PYmplY3QudmFsdWVzKHZyLnJlY29yZHMubm9kZXMpLmZpbHRlcihMdmUpLCJnZXRKdW5jdGlvbnMiKSxtcnQ9bygoKT0+T2JqZWN0LnZhbHVlcyh2ci5yZWNvcmRzLm5vZGVzKSwiZ2V0Tm9kZXMiKSxoRj1vKHQ9PnZyLnJlY29yZHMubm9kZXNbdF0sImdldE5vZGUiKSxncnQ9byhmdW5jdGlvbih7aWQ6dCxpY29uOmUsaW46cix0aXRsZTpufSl7aWYodnIucmVjb3Jkcy5yZWdpc3RlcmVkSWRzW3RdIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgVGhlIGdyb3VwIGlkIFske3R9XSBpcyBhbHJlYWR5IGluIHVzZSBieSBhbm90aGVyICR7dnIucmVjb3Jkcy5yZWdpc3RlcmVkSWRzW3RdfWApO2lmKHIhPT12b2lkIDApe2lmKHQ9PT1yKXRocm93IG5ldyBFcnJvcihgVGhlIGdyb3VwIFske3R9XSBjYW5ub3QgYmUgcGxhY2VkIHdpdGhpbiBpdHNlbGZgKTtpZih2ci5yZWNvcmRzLnJlZ2lzdGVyZWRJZHNbcl09PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBUaGUgZ3JvdXAgWyR7dH1dJ3MgcGFyZW50IGRvZXMgbm90IGV4aXN0LiBQbGVhc2UgbWFrZSBzdXJlIHRoZSBwYXJlbnQgaXMgY3JlYXRlZCBiZWZvcmUgdGhpcyBncm91cGApO2lmKHZyLnJlY29yZHMucmVnaXN0ZXJlZElkc1tyXT09PSJub2RlIil0aHJvdyBuZXcgRXJyb3IoYFRoZSBncm91cCBbJHt0fV0ncyBwYXJlbnQgaXMgbm90IGEgZ3JvdXBgKX12ci5yZWNvcmRzLnJlZ2lzdGVyZWRJZHNbdF09Imdyb3VwIix2ci5yZWNvcmRzLmdyb3Vwc1t0XT17aWQ6dCxpY29uOmUsdGl0bGU6bixpbjpyfX0sImFkZEdyb3VwIikseXJ0PW8oKCk9Pk9iamVjdC52YWx1ZXModnIucmVjb3Jkcy5ncm91cHMpLCJnZXRHcm91cHMiKSx2cnQ9byhmdW5jdGlvbih7bGhzSWQ6dCxyaHNJZDplLGxoc0RpcjpyLHJoc0RpcjpuLGxoc0ludG86aSxyaHNJbnRvOmEsbGhzR3JvdXA6cyxyaHNHcm91cDpsLHRpdGxlOnV9KXtpZighdUYocikpdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRpcmVjdGlvbiBnaXZlbiBmb3IgbGVmdCBoYW5kIHNpZGUgb2YgZWRnZSAke3R9LS0ke2V9LiBFeHBlY3RlZCAoTCxSLFQsQikgZ290ICR7cn1gKTtpZighdUYobikpdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRpcmVjdGlvbiBnaXZlbiBmb3IgcmlnaHQgaGFuZCBzaWRlIG9mIGVkZ2UgJHt0fS0tJHtlfS4gRXhwZWN0ZWQgKEwsUixULEIpIGdvdCAke259YCk7aWYodnIucmVjb3Jkcy5ub2Rlc1t0XT09PXZvaWQgMCYmdnIucmVjb3Jkcy5ncm91cHNbdF09PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBUaGUgbGVmdC1oYW5kIGlkIFske3R9XSBkb2VzIG5vdCB5ZXQgZXhpc3QuIFBsZWFzZSBjcmVhdGUgdGhlIHNlcnZpY2UvZ3JvdXAgYmVmb3JlIGRlY2xhcmluZyBhbiBlZGdlIHRvIGl0LmApO2lmKHZyLnJlY29yZHMubm9kZXNbZV09PT12b2lkIDAmJnZyLnJlY29yZHMuZ3JvdXBzW3RdPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgVGhlIHJpZ2h0LWhhbmQgaWQgWyR7ZX1dIGRvZXMgbm90IHlldCBleGlzdC4gUGxlYXNlIGNyZWF0ZSB0aGUgc2VydmljZS9ncm91cCBiZWZvcmUgZGVjbGFyaW5nIGFuIGVkZ2UgdG8gaXQuYCk7bGV0IGg9dnIucmVjb3Jkcy5ub2Rlc1t0XS5pbixmPXZyLnJlY29yZHMubm9kZXNbZV0uaW47aWYocyYmaCYmZiYmaD09Zil0aHJvdyBuZXcgRXJyb3IoYFRoZSBsZWZ0LWhhbmQgaWQgWyR7dH1dIGlzIG1vZGlmaWVkIHRvIHRyYXZlcnNlIHRoZSBncm91cCBib3VuZGFyeSwgYnV0IHRoZSBlZGdlIGRvZXMgbm90IHBhc3MgdGhyb3VnaCB0d28gZ3JvdXBzLmApO2lmKGwmJmgmJmYmJmg9PWYpdGhyb3cgbmV3IEVycm9yKGBUaGUgcmlnaHQtaGFuZCBpZCBbJHtlfV0gaXMgbW9kaWZpZWQgdG8gdHJhdmVyc2UgdGhlIGdyb3VwIGJvdW5kYXJ5LCBidXQgdGhlIGVkZ2UgZG9lcyBub3QgcGFzcyB0aHJvdWdoIHR3byBncm91cHMuYCk7bGV0IGQ9e2xoc0lkOnQsbGhzRGlyOnIsbGhzSW50bzppLGxoc0dyb3VwOnMscmhzSWQ6ZSxyaHNEaXI6bixyaHNJbnRvOmEscmhzR3JvdXA6bCx0aXRsZTp1fTt2ci5yZWNvcmRzLmVkZ2VzLnB1c2goZCksdnIucmVjb3Jkcy5ub2Rlc1t0XSYmdnIucmVjb3Jkcy5ub2Rlc1tlXSYmKHZyLnJlY29yZHMubm9kZXNbdF0uZWRnZXMucHVzaCh2ci5yZWNvcmRzLmVkZ2VzW3ZyLnJlY29yZHMuZWRnZXMubGVuZ3RoLTFdKSx2ci5yZWNvcmRzLm5vZGVzW2VdLmVkZ2VzLnB1c2godnIucmVjb3Jkcy5lZGdlc1t2ci5yZWNvcmRzLmVkZ2VzLmxlbmd0aC0xXSkpfSwiYWRkRWRnZSIpLHhydD1vKCgpPT52ci5yZWNvcmRzLmVkZ2VzLCJnZXRFZGdlcyIpLGJydD1vKCgpPT57aWYodnIucmVjb3Jkcy5kYXRhU3RydWN0dXJlcz09PXZvaWQgMCl7bGV0IHQ9e30sZT1PYmplY3QuZW50cmllcyh2ci5yZWNvcmRzLm5vZGVzKS5yZWR1Y2UoKGwsW3UsaF0pPT4obFt1XT1oLmVkZ2VzLnJlZHVjZSgoZixkKT0+e2xldCBwPWhGKGQubGhzSWQpPy5pbixtPWhGKGQucmhzSWQpPy5pbjtpZihwJiZtJiZwIT09bSl7bGV0IGc9X3ZlKGQubGhzRGlyLGQucmhzRGlyKTtnIT09ImJlbmQiJiYodFtwXT8/PXt9LHRbcF1bbV09Zyx0W21dPz89e30sdFttXVtwXT1nKX1pZihkLmxoc0lkPT09dSl7bGV0IGc9YjQoZC5saHNEaXIsZC5yaHNEaXIpO2cmJihmW2ddPWQucmhzSWQpfWVsc2V7bGV0IGc9YjQoZC5yaHNEaXIsZC5saHNEaXIpO2cmJihmW2ddPWQubGhzSWQpfXJldHVybiBmfSx7fSksbCkse30pLHI9T2JqZWN0LmtleXMoZSlbMF0sbj17W3JdOjF9LGk9T2JqZWN0LmtleXMoZSkucmVkdWNlKChsLHUpPT51PT09cj9sOnsuLi5sLFt1XToxfSx7fSksYT1vKGw9PntsZXQgdT17W2xdOlswLDBdfSxoPVtsXTtmb3IoO2gubGVuZ3RoPjA7KXtsZXQgZj1oLnNoaWZ0KCk7aWYoZil7bltmXT0xLGRlbGV0ZSBpW2ZdO2xldCBkPWVbZl0sW3AsbV09dVtmXTtPYmplY3QuZW50cmllcyhkKS5mb3JFYWNoKChbZyx5XSk9PntuW3ldfHwodVt5XT1DdmUoW3AsbV0sZyksaC5wdXNoKHkpKX0pfX1yZXR1cm4gdX0sIkJGUyIpLHM9W2EocildO2Zvcig7T2JqZWN0LmtleXMoaSkubGVuZ3RoPjA7KXMucHVzaChhKE9iamVjdC5rZXlzKGkpWzBdKSk7dnIucmVjb3Jkcy5kYXRhU3RydWN0dXJlcz17YWRqTGlzdDplLHNwYXRpYWxNYXBzOnMsZ3JvdXBBbGlnbm1lbnRzOnR9fXJldHVybiB2ci5yZWNvcmRzLmRhdGFTdHJ1Y3R1cmVzfSwiZ2V0RGF0YVN0cnVjdHVyZXMiKSx3cnQ9bygodCxlKT0+e3ZyLnJlY29yZHMuZWxlbWVudHNbdF09ZX0sInNldEVsZW1lbnRGb3JJZCIpLFRydD1vKHQ9PnZyLnJlY29yZHMuZWxlbWVudHNbdF0sImdldEVsZW1lbnRCeUlkIiksUXA9e2NsZWFyOnVydCxzZXREaWFncmFtVGl0bGU6JHIsZ2V0RGlhZ3JhbVRpdGxlOklyLHNldEFjY1RpdGxlOkxyLGdldEFjY1RpdGxlOlJyLHNldEFjY0Rlc2NyaXB0aW9uOk5yLGdldEFjY0Rlc2NyaXB0aW9uOk1yLGFkZFNlcnZpY2U6aHJ0LGdldFNlcnZpY2VzOmZydCxhZGRKdW5jdGlvbjpkcnQsZ2V0SnVuY3Rpb25zOnBydCxnZXROb2RlczptcnQsZ2V0Tm9kZTpoRixhZGRHcm91cDpncnQsZ2V0R3JvdXBzOnlydCxhZGRFZGdlOnZydCxnZXRFZGdlczp4cnQsc2V0RWxlbWVudEZvcklkOndydCxnZXRFbGVtZW50QnlJZDpUcnQsZ2V0RGF0YVN0cnVjdHVyZXM6YnJ0fTtvKExpLCJnZXRDb25maWdGaWVsZCIpfSk7dmFyIGtydCxOdmUsTXZlPU4oKCk9PnsidXNlIHN0cmljdCI7a3AoKTt2dCgpO1QxKCk7dzQoKTtrcnQ9bygodCxlKT0+eyRjKHQsZSksdC5ncm91cHMubWFwKGUuYWRkR3JvdXApLHQuc2VydmljZXMubWFwKHI9PmUuYWRkU2VydmljZSh7Li4ucix0eXBlOiJzZXJ2aWNlIn0pKSx0Lmp1bmN0aW9ucy5tYXAocj0+ZS5hZGRKdW5jdGlvbih7Li4ucix0eXBlOiJqdW5jdGlvbiJ9KSksdC5lZGdlcy5tYXAoZS5hZGRFZGdlKX0sInBvcHVsYXRlRGIiKSxOdmU9e3BhcnNlOm8oYXN5bmMgdD0+e2xldCBlPWF3YWl0IHVvKCJhcmNoaXRlY3R1cmUiLHQpO1kuZGVidWcoZSksa3J0KGUsUXApfSwicGFyc2UiKX19KTt2YXIgRXJ0LEl2ZSxPdmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtFcnQ9byh0PT5gCiAgLmVkZ2UgewogICAgc3Ryb2tlLXdpZHRoOiAke3QuYXJjaEVkZ2VXaWR0aH07CiAgICBzdHJva2U6ICR7dC5hcmNoRWRnZUNvbG9yfTsKICAgIGZpbGw6IG5vbmU7CiAgfQoKICAuYXJyb3cgewogICAgZmlsbDogJHt0LmFyY2hFZGdlQXJyb3dDb2xvcn07CiAgfQoKICAubm9kZS1ia2cgewogICAgZmlsbDogbm9uZTsKICAgIHN0cm9rZTogJHt0LmFyY2hHcm91cEJvcmRlckNvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogJHt0LmFyY2hHcm91cEJvcmRlcldpZHRofTsKICAgIHN0cm9rZS1kYXNoYXJyYXk6IDg7CiAgfQogIC5ub2RlLWljb24tdGV4dCB7CiAgICBkaXNwbGF5OiBmbGV4OyAKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgfQogIAogIC5ub2RlLWljb24tdGV4dCA+IGRpdiB7CiAgICBjb2xvcjogI2ZmZjsKICAgIG1hcmdpbjogMXB4OwogICAgaGVpZ2h0OiBmaXQtY29udGVudDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBkaXNwbGF5OiAtd2Via2l0LWJveDsKICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7CiAgfQpgLCJnZXRTdHlsZXMiKSxJdmU9RXJ0fSk7dmFyIGRGPU1pKChUNCxmRik9PnsidXNlIHN0cmljdCI7byhmdW5jdGlvbihlLHIpe3R5cGVvZiBUND09Im9iamVjdCImJnR5cGVvZiBmRj09Im9iamVjdCI/ZkYuZXhwb3J0cz1yKCk6dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZD9kZWZpbmUoW10scik6dHlwZW9mIFQ0PT0ib2JqZWN0Ij9UNC5sYXlvdXRCYXNlPXIoKTplLmxheW91dEJhc2U9cigpfSwid2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iKShUNCxmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT17fTtmdW5jdGlvbiByKG4pe2lmKGVbbl0pcmV0dXJuIGVbbl0uZXhwb3J0czt2YXIgaT1lW25dPXtpOm4sbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gdFtuXS5jYWxsKGkuZXhwb3J0cyxpLGkuZXhwb3J0cyxyKSxpLmw9ITAsaS5leHBvcnRzfXJldHVybiBvKHIsIl9fd2VicGFja19yZXF1aXJlX18iKSxyLm09dCxyLmM9ZSxyLmk9ZnVuY3Rpb24obil7cmV0dXJuIG59LHIuZD1mdW5jdGlvbihuLGksYSl7ci5vKG4saSl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGkse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLGdldDphfSl9LHIubj1mdW5jdGlvbihuKXt2YXIgaT1uJiZuLl9fZXNNb2R1bGU/byhmdW5jdGlvbigpe3JldHVybiBuLmRlZmF1bHR9LCJnZXREZWZhdWx0Iik6byhmdW5jdGlvbigpe3JldHVybiBufSwiZ2V0TW9kdWxlRXhwb3J0cyIpO3JldHVybiByLmQoaSwiYSIsaSksaX0sci5vPWZ1bmN0aW9uKG4saSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLGkpfSxyLnA9IiIscihyLnM9MjgpfShbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKCl7fW8obiwiTGF5b3V0Q29uc3RhbnRzIiksbi5RVUFMSVRZPTEsbi5ERUZBVUxUX0NSRUFURV9CRU5EU19BU19ORUVERUQ9ITEsbi5ERUZBVUxUX0lOQ1JFTUVOVEFMPSExLG4uREVGQVVMVF9BTklNQVRJT05fT05fTEFZT1VUPSEwLG4uREVGQVVMVF9BTklNQVRJT05fRFVSSU5HX0xBWU9VVD0hMSxuLkRFRkFVTFRfQU5JTUFUSU9OX1BFUklPRD01MCxuLkRFRkFVTFRfVU5JRk9STV9MRUFGX05PREVfU0laRVM9ITEsbi5ERUZBVUxUX0dSQVBIX01BUkdJTj0xNSxuLk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUz0hMSxuLlNJTVBMRV9OT0RFX1NJWkU9NDAsbi5TSU1QTEVfTk9ERV9IQUxGX1NJWkU9bi5TSU1QTEVfTk9ERV9TSVpFLzIsbi5FTVBUWV9DT01QT1VORF9OT0RFX1NJWkU9NDAsbi5NSU5fRURHRV9MRU5HVEg9MSxuLldPUkxEX0JPVU5EQVJZPTFlNixuLklOSVRJQUxfV09STERfQk9VTkRBUlk9bi5XT1JMRF9CT1VOREFSWS8xZTMsbi5XT1JMRF9DRU5URVJfWD0xMjAwLG4uV09STERfQ0VOVEVSX1k9OTAwLHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMiksaT1yKDgpLGE9cig5KTtmdW5jdGlvbiBzKHUsaCxmKXtuLmNhbGwodGhpcyxmKSx0aGlzLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldD0hMSx0aGlzLnZHcmFwaE9iamVjdD1mLHRoaXMuYmVuZHBvaW50cz1bXSx0aGlzLnNvdXJjZT11LHRoaXMudGFyZ2V0PWh9byhzLCJMRWRnZSIpLHMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpO2Zvcih2YXIgbCBpbiBuKXNbbF09bltsXTtzLnByb3RvdHlwZS5nZXRTb3VyY2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zb3VyY2V9LHMucHJvdG90eXBlLmdldFRhcmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRhcmdldH0scy5wcm90b3R5cGUuaXNJbnRlckdyYXBoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbnRlckdyYXBofSxzLnByb3RvdHlwZS5nZXRMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGh9LHMucHJvdG90eXBlLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldH0scy5wcm90b3R5cGUuZ2V0QmVuZHBvaW50cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJlbmRwb2ludHN9LHMucHJvdG90eXBlLmdldExjYT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxjYX0scy5wcm90b3R5cGUuZ2V0U291cmNlSW5MY2E9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zb3VyY2VJbkxjYX0scy5wcm90b3R5cGUuZ2V0VGFyZ2V0SW5MY2E9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50YXJnZXRJbkxjYX0scy5wcm90b3R5cGUuZ2V0T3RoZXJFbmQ9ZnVuY3Rpb24odSl7aWYodGhpcy5zb3VyY2U9PT11KXJldHVybiB0aGlzLnRhcmdldDtpZih0aGlzLnRhcmdldD09PXUpcmV0dXJuIHRoaXMuc291cmNlO3Rocm93Ik5vZGUgaXMgbm90IGluY2lkZW50IHdpdGggdGhpcyBlZGdlIn0scy5wcm90b3R5cGUuZ2V0T3RoZXJFbmRJbkdyYXBoPWZ1bmN0aW9uKHUsaCl7Zm9yKHZhciBmPXRoaXMuZ2V0T3RoZXJFbmQodSksZD1oLmdldEdyYXBoTWFuYWdlcigpLmdldFJvb3QoKTs7KXtpZihmLmdldE93bmVyKCk9PWgpcmV0dXJuIGY7aWYoZi5nZXRPd25lcigpPT1kKWJyZWFrO2Y9Zi5nZXRPd25lcigpLmdldFBhcmVudCgpfXJldHVybiBudWxsfSxzLnByb3RvdHlwZS51cGRhdGVMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgdT1uZXcgQXJyYXkoNCk7dGhpcy5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXQ9aS5nZXRJbnRlcnNlY3Rpb24odGhpcy50YXJnZXQuZ2V0UmVjdCgpLHRoaXMuc291cmNlLmdldFJlY3QoKSx1KSx0aGlzLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldHx8KHRoaXMubGVuZ3RoWD11WzBdLXVbMl0sdGhpcy5sZW5ndGhZPXVbMV0tdVszXSxNYXRoLmFicyh0aGlzLmxlbmd0aFgpPDEmJih0aGlzLmxlbmd0aFg9YS5zaWduKHRoaXMubGVuZ3RoWCkpLE1hdGguYWJzKHRoaXMubGVuZ3RoWSk8MSYmKHRoaXMubGVuZ3RoWT1hLnNpZ24odGhpcy5sZW5ndGhZKSksdGhpcy5sZW5ndGg9TWF0aC5zcXJ0KHRoaXMubGVuZ3RoWCp0aGlzLmxlbmd0aFgrdGhpcy5sZW5ndGhZKnRoaXMubGVuZ3RoWSkpfSxzLnByb3RvdHlwZS51cGRhdGVMZW5ndGhTaW1wbGU9ZnVuY3Rpb24oKXt0aGlzLmxlbmd0aFg9dGhpcy50YXJnZXQuZ2V0Q2VudGVyWCgpLXRoaXMuc291cmNlLmdldENlbnRlclgoKSx0aGlzLmxlbmd0aFk9dGhpcy50YXJnZXQuZ2V0Q2VudGVyWSgpLXRoaXMuc291cmNlLmdldENlbnRlclkoKSxNYXRoLmFicyh0aGlzLmxlbmd0aFgpPDEmJih0aGlzLmxlbmd0aFg9YS5zaWduKHRoaXMubGVuZ3RoWCkpLE1hdGguYWJzKHRoaXMubGVuZ3RoWSk8MSYmKHRoaXMubGVuZ3RoWT1hLnNpZ24odGhpcy5sZW5ndGhZKSksdGhpcy5sZW5ndGg9TWF0aC5zcXJ0KHRoaXMubGVuZ3RoWCp0aGlzLmxlbmd0aFgrdGhpcy5sZW5ndGhZKnRoaXMubGVuZ3RoWSl9LHQuZXhwb3J0cz1zfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oaSl7dGhpcy52R3JhcGhPYmplY3Q9aX1vKG4sIkxHcmFwaE9iamVjdCIpLHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMiksaT1yKDEwKSxhPXIoMTMpLHM9cigwKSxsPXIoMTYpLHU9cig1KTtmdW5jdGlvbiBoKGQscCxtLGcpe209PW51bGwmJmc9PW51bGwmJihnPXApLG4uY2FsbCh0aGlzLGcpLGQuZ3JhcGhNYW5hZ2VyIT1udWxsJiYoZD1kLmdyYXBoTWFuYWdlciksdGhpcy5lc3RpbWF0ZWRTaXplPWkuTUlOX1ZBTFVFLHRoaXMuaW5jbHVzaW9uVHJlZURlcHRoPWkuTUFYX1ZBTFVFLHRoaXMudkdyYXBoT2JqZWN0PWcsdGhpcy5lZGdlcz1bXSx0aGlzLmdyYXBoTWFuYWdlcj1kLG0hPW51bGwmJnAhPW51bGw/dGhpcy5yZWN0PW5ldyBhKHAueCxwLnksbS53aWR0aCxtLmhlaWdodCk6dGhpcy5yZWN0PW5ldyBhfW8oaCwiTE5vZGUiKSxoLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKTtmb3IodmFyIGYgaW4gbiloW2ZdPW5bZl07aC5wcm90b3R5cGUuZ2V0RWRnZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGdlc30saC5wcm90b3R5cGUuZ2V0Q2hpbGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZH0saC5wcm90b3R5cGUuZ2V0T3duZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lcn0saC5wcm90b3R5cGUuZ2V0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0LndpZHRofSxoLnByb3RvdHlwZS5zZXRXaWR0aD1mdW5jdGlvbihkKXt0aGlzLnJlY3Qud2lkdGg9ZH0saC5wcm90b3R5cGUuZ2V0SGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC5oZWlnaHR9LGgucHJvdG90eXBlLnNldEhlaWdodD1mdW5jdGlvbihkKXt0aGlzLnJlY3QuaGVpZ2h0PWR9LGgucHJvdG90eXBlLmdldENlbnRlclg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0LngrdGhpcy5yZWN0LndpZHRoLzJ9LGgucHJvdG90eXBlLmdldENlbnRlclk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0LnkrdGhpcy5yZWN0LmhlaWdodC8yfSxoLnByb3RvdHlwZS5nZXRDZW50ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHUodGhpcy5yZWN0LngrdGhpcy5yZWN0LndpZHRoLzIsdGhpcy5yZWN0LnkrdGhpcy5yZWN0LmhlaWdodC8yKX0saC5wcm90b3R5cGUuZ2V0TG9jYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHUodGhpcy5yZWN0LngsdGhpcy5yZWN0LnkpfSxoLnByb3RvdHlwZS5nZXRSZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdH0saC5wcm90b3R5cGUuZ2V0RGlhZ29uYWw9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMucmVjdC53aWR0aCp0aGlzLnJlY3Qud2lkdGgrdGhpcy5yZWN0LmhlaWdodCp0aGlzLnJlY3QuaGVpZ2h0KX0saC5wcm90b3R5cGUuZ2V0SGFsZlRoZURpYWdvbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLnJlY3QuaGVpZ2h0KnRoaXMucmVjdC5oZWlnaHQrdGhpcy5yZWN0LndpZHRoKnRoaXMucmVjdC53aWR0aCkvMn0saC5wcm90b3R5cGUuc2V0UmVjdD1mdW5jdGlvbihkLHApe3RoaXMucmVjdC54PWQueCx0aGlzLnJlY3QueT1kLnksdGhpcy5yZWN0LndpZHRoPXAud2lkdGgsdGhpcy5yZWN0LmhlaWdodD1wLmhlaWdodH0saC5wcm90b3R5cGUuc2V0Q2VudGVyPWZ1bmN0aW9uKGQscCl7dGhpcy5yZWN0Lng9ZC10aGlzLnJlY3Qud2lkdGgvMix0aGlzLnJlY3QueT1wLXRoaXMucmVjdC5oZWlnaHQvMn0saC5wcm90b3R5cGUuc2V0TG9jYXRpb249ZnVuY3Rpb24oZCxwKXt0aGlzLnJlY3QueD1kLHRoaXMucmVjdC55PXB9LGgucHJvdG90eXBlLm1vdmVCeT1mdW5jdGlvbihkLHApe3RoaXMucmVjdC54Kz1kLHRoaXMucmVjdC55Kz1wfSxoLnByb3RvdHlwZS5nZXRFZGdlTGlzdFRvTm9kZT1mdW5jdGlvbihkKXt2YXIgcD1bXSxtLGc9dGhpcztyZXR1cm4gZy5lZGdlcy5mb3JFYWNoKGZ1bmN0aW9uKHkpe2lmKHkudGFyZ2V0PT1kKXtpZih5LnNvdXJjZSE9Zyl0aHJvdyJJbmNvcnJlY3QgZWRnZSBzb3VyY2UhIjtwLnB1c2goeSl9fSkscH0saC5wcm90b3R5cGUuZ2V0RWRnZXNCZXR3ZWVuPWZ1bmN0aW9uKGQpe3ZhciBwPVtdLG0sZz10aGlzO3JldHVybiBnLmVkZ2VzLmZvckVhY2goZnVuY3Rpb24oeSl7aWYoISh5LnNvdXJjZT09Z3x8eS50YXJnZXQ9PWcpKXRocm93IkluY29ycmVjdCBlZGdlIHNvdXJjZSBhbmQvb3IgdGFyZ2V0IjsoeS50YXJnZXQ9PWR8fHkuc291cmNlPT1kKSYmcC5wdXNoKHkpfSkscH0saC5wcm90b3R5cGUuZ2V0TmVpZ2hib3JzTGlzdD1mdW5jdGlvbigpe3ZhciBkPW5ldyBTZXQscD10aGlzO3JldHVybiBwLmVkZ2VzLmZvckVhY2goZnVuY3Rpb24obSl7aWYobS5zb3VyY2U9PXApZC5hZGQobS50YXJnZXQpO2Vsc2V7aWYobS50YXJnZXQhPXApdGhyb3ciSW5jb3JyZWN0IGluY2lkZW5jeSEiO2QuYWRkKG0uc291cmNlKX19KSxkfSxoLnByb3RvdHlwZS53aXRoQ2hpbGRyZW49ZnVuY3Rpb24oKXt2YXIgZD1uZXcgU2V0LHAsbTtpZihkLmFkZCh0aGlzKSx0aGlzLmNoaWxkIT1udWxsKWZvcih2YXIgZz10aGlzLmNoaWxkLmdldE5vZGVzKCkseT0wO3k8Zy5sZW5ndGg7eSsrKXA9Z1t5XSxtPXAud2l0aENoaWxkcmVuKCksbS5mb3JFYWNoKGZ1bmN0aW9uKHYpe2QuYWRkKHYpfSk7cmV0dXJuIGR9LGgucHJvdG90eXBlLmdldE5vT2ZDaGlsZHJlbj1mdW5jdGlvbigpe3ZhciBkPTAscDtpZih0aGlzLmNoaWxkPT1udWxsKWQ9MTtlbHNlIGZvcih2YXIgbT10aGlzLmNoaWxkLmdldE5vZGVzKCksZz0wO2c8bS5sZW5ndGg7ZysrKXA9bVtnXSxkKz1wLmdldE5vT2ZDaGlsZHJlbigpO3JldHVybiBkPT0wJiYoZD0xKSxkfSxoLnByb3RvdHlwZS5nZXRFc3RpbWF0ZWRTaXplPWZ1bmN0aW9uKCl7aWYodGhpcy5lc3RpbWF0ZWRTaXplPT1pLk1JTl9WQUxVRSl0aHJvdyJhc3NlcnQgZmFpbGVkIjtyZXR1cm4gdGhpcy5lc3RpbWF0ZWRTaXplfSxoLnByb3RvdHlwZS5jYWxjRXN0aW1hdGVkU2l6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkPT1udWxsP3RoaXMuZXN0aW1hdGVkU2l6ZT0odGhpcy5yZWN0LndpZHRoK3RoaXMucmVjdC5oZWlnaHQpLzI6KHRoaXMuZXN0aW1hdGVkU2l6ZT10aGlzLmNoaWxkLmNhbGNFc3RpbWF0ZWRTaXplKCksdGhpcy5yZWN0LndpZHRoPXRoaXMuZXN0aW1hdGVkU2l6ZSx0aGlzLnJlY3QuaGVpZ2h0PXRoaXMuZXN0aW1hdGVkU2l6ZSx0aGlzLmVzdGltYXRlZFNpemUpfSxoLnByb3RvdHlwZS5zY2F0dGVyPWZ1bmN0aW9uKCl7dmFyIGQscCxtPS1zLklOSVRJQUxfV09STERfQk9VTkRBUlksZz1zLklOSVRJQUxfV09STERfQk9VTkRBUlk7ZD1zLldPUkxEX0NFTlRFUl9YK2wubmV4dERvdWJsZSgpKihnLW0pK207dmFyIHk9LXMuSU5JVElBTF9XT1JMRF9CT1VOREFSWSx2PXMuSU5JVElBTF9XT1JMRF9CT1VOREFSWTtwPXMuV09STERfQ0VOVEVSX1krbC5uZXh0RG91YmxlKCkqKHYteSkreSx0aGlzLnJlY3QueD1kLHRoaXMucmVjdC55PXB9LGgucHJvdG90eXBlLnVwZGF0ZUJvdW5kcz1mdW5jdGlvbigpe2lmKHRoaXMuZ2V0Q2hpbGQoKT09bnVsbCl0aHJvdyJhc3NlcnQgZmFpbGVkIjtpZih0aGlzLmdldENoaWxkKCkuZ2V0Tm9kZXMoKS5sZW5ndGghPTApe3ZhciBkPXRoaXMuZ2V0Q2hpbGQoKTtpZihkLnVwZGF0ZUJvdW5kcyghMCksdGhpcy5yZWN0Lng9ZC5nZXRMZWZ0KCksdGhpcy5yZWN0Lnk9ZC5nZXRUb3AoKSx0aGlzLnNldFdpZHRoKGQuZ2V0UmlnaHQoKS1kLmdldExlZnQoKSksdGhpcy5zZXRIZWlnaHQoZC5nZXRCb3R0b20oKS1kLmdldFRvcCgpKSxzLk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUyl7dmFyIHA9ZC5nZXRSaWdodCgpLWQuZ2V0TGVmdCgpLG09ZC5nZXRCb3R0b20oKS1kLmdldFRvcCgpO3RoaXMubGFiZWxXaWR0aCYmKHRoaXMubGFiZWxQb3NIb3Jpem9udGFsPT0ibGVmdCI/KHRoaXMucmVjdC54LT10aGlzLmxhYmVsV2lkdGgsdGhpcy5zZXRXaWR0aChwK3RoaXMubGFiZWxXaWR0aCkpOnRoaXMubGFiZWxQb3NIb3Jpem9udGFsPT0iY2VudGVyIiYmdGhpcy5sYWJlbFdpZHRoPnA/KHRoaXMucmVjdC54LT0odGhpcy5sYWJlbFdpZHRoLXApLzIsdGhpcy5zZXRXaWR0aCh0aGlzLmxhYmVsV2lkdGgpKTp0aGlzLmxhYmVsUG9zSG9yaXpvbnRhbD09InJpZ2h0IiYmdGhpcy5zZXRXaWR0aChwK3RoaXMubGFiZWxXaWR0aCkpLHRoaXMubGFiZWxIZWlnaHQmJih0aGlzLmxhYmVsUG9zVmVydGljYWw9PSJ0b3AiPyh0aGlzLnJlY3QueS09dGhpcy5sYWJlbEhlaWdodCx0aGlzLnNldEhlaWdodChtK3RoaXMubGFiZWxIZWlnaHQpKTp0aGlzLmxhYmVsUG9zVmVydGljYWw9PSJjZW50ZXIiJiZ0aGlzLmxhYmVsSGVpZ2h0Pm0/KHRoaXMucmVjdC55LT0odGhpcy5sYWJlbEhlaWdodC1tKS8yLHRoaXMuc2V0SGVpZ2h0KHRoaXMubGFiZWxIZWlnaHQpKTp0aGlzLmxhYmVsUG9zVmVydGljYWw9PSJib3R0b20iJiZ0aGlzLnNldEhlaWdodChtK3RoaXMubGFiZWxIZWlnaHQpKX19fSxoLnByb3RvdHlwZS5nZXRJbmNsdXNpb25UcmVlRGVwdGg9ZnVuY3Rpb24oKXtpZih0aGlzLmluY2x1c2lvblRyZWVEZXB0aD09aS5NQVhfVkFMVUUpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7cmV0dXJuIHRoaXMuaW5jbHVzaW9uVHJlZURlcHRofSxoLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oZCl7dmFyIHA9dGhpcy5yZWN0Lng7cD5zLldPUkxEX0JPVU5EQVJZP3A9cy5XT1JMRF9CT1VOREFSWTpwPC1zLldPUkxEX0JPVU5EQVJZJiYocD0tcy5XT1JMRF9CT1VOREFSWSk7dmFyIG09dGhpcy5yZWN0Lnk7bT5zLldPUkxEX0JPVU5EQVJZP209cy5XT1JMRF9CT1VOREFSWTptPC1zLldPUkxEX0JPVU5EQVJZJiYobT0tcy5XT1JMRF9CT1VOREFSWSk7dmFyIGc9bmV3IHUocCxtKSx5PWQuaW52ZXJzZVRyYW5zZm9ybVBvaW50KGcpO3RoaXMuc2V0TG9jYXRpb24oeS54LHkueSl9LGgucHJvdG90eXBlLmdldExlZnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0Lnh9LGgucHJvdG90eXBlLmdldFJpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC54K3RoaXMucmVjdC53aWR0aH0saC5wcm90b3R5cGUuZ2V0VG9wPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC55fSxoLnByb3RvdHlwZS5nZXRCb3R0b209ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0LnkrdGhpcy5yZWN0LmhlaWdodH0saC5wcm90b3R5cGUuZ2V0UGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXI9PW51bGw/bnVsbDp0aGlzLm93bmVyLmdldFBhcmVudCgpfSx0LmV4cG9ydHM9aH0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDApO2Z1bmN0aW9uIGkoKXt9byhpLCJGRExheW91dENvbnN0YW50cyIpO2Zvcih2YXIgYSBpbiBuKWlbYV09blthXTtpLk1BWF9JVEVSQVRJT05TPTI1MDAsaS5ERUZBVUxUX0VER0VfTEVOR1RIPTUwLGkuREVGQVVMVF9TUFJJTkdfU1RSRU5HVEg9LjQ1LGkuREVGQVVMVF9SRVBVTFNJT05fU1RSRU5HVEg9NDUwMCxpLkRFRkFVTFRfR1JBVklUWV9TVFJFTkdUSD0uNCxpLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9TVFJFTkdUSD0xLGkuREVGQVVMVF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUj0zLjgsaS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfUkFOR0VfRkFDVE9SPTEuNSxpLkRFRkFVTFRfVVNFX1NNQVJUX0lERUFMX0VER0VfTEVOR1RIX0NBTENVTEFUSU9OPSEwLGkuREVGQVVMVF9VU0VfU01BUlRfUkVQVUxTSU9OX1JBTkdFX0NBTENVTEFUSU9OPSEwLGkuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTD0uMyxpLkNPT0xJTkdfQURBUFRBVElPTl9GQUNUT1I9LjMzLGkuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUPTFlMyxpLkFEQVBUQVRJT05fVVBQRVJfTk9ERV9MSU1JVD01ZTMsaS5NQVhfTk9ERV9ESVNQTEFDRU1FTlRfSU5DUkVNRU5UQUw9MTAwLGkuTUFYX05PREVfRElTUExBQ0VNRU5UPWkuTUFYX05PREVfRElTUExBQ0VNRU5UX0lOQ1JFTUVOVEFMKjMsaS5NSU5fUkVQVUxTSU9OX0RJU1Q9aS5ERUZBVUxUX0VER0VfTEVOR1RILzEwLGkuQ09OVkVSR0VOQ0VfQ0hFQ0tfUEVSSU9EPTEwMCxpLlBFUl9MRVZFTF9JREVBTF9FREdFX0xFTkdUSF9GQUNUT1I9LjEsaS5NSU5fRURHRV9MRU5HVEg9MSxpLkdSSURfQ0FMQ1VMQVRJT05fQ0hFQ0tfUEVSSU9EPTEwLHQuZXhwb3J0cz1pfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oaSxhKXtpPT1udWxsJiZhPT1udWxsPyh0aGlzLng9MCx0aGlzLnk9MCk6KHRoaXMueD1pLHRoaXMueT1hKX1vKG4sIlBvaW50RCIpLG4ucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54fSxuLnByb3RvdHlwZS5nZXRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueX0sbi5wcm90b3R5cGUuc2V0WD1mdW5jdGlvbihpKXt0aGlzLng9aX0sbi5wcm90b3R5cGUuc2V0WT1mdW5jdGlvbihpKXt0aGlzLnk9aX0sbi5wcm90b3R5cGUuZ2V0RGlmZmVyZW5jZT1mdW5jdGlvbihpKXtyZXR1cm4gbmV3IERpbWVuc2lvbkQodGhpcy54LWkueCx0aGlzLnktaS55KX0sbi5wcm90b3R5cGUuZ2V0Q29weT1mdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzLngsdGhpcy55KX0sbi5wcm90b3R5cGUudHJhbnNsYXRlPWZ1bmN0aW9uKGkpe3JldHVybiB0aGlzLngrPWkud2lkdGgsdGhpcy55Kz1pLmhlaWdodCx0aGlzfSx0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDIpLGk9cigxMCksYT1yKDApLHM9cig3KSxsPXIoMyksdT1yKDEpLGg9cigxMyksZj1yKDEyKSxkPXIoMTEpO2Z1bmN0aW9uIHAoZyx5LHYpe24uY2FsbCh0aGlzLHYpLHRoaXMuZXN0aW1hdGVkU2l6ZT1pLk1JTl9WQUxVRSx0aGlzLm1hcmdpbj1hLkRFRkFVTFRfR1JBUEhfTUFSR0lOLHRoaXMuZWRnZXM9W10sdGhpcy5ub2Rlcz1bXSx0aGlzLmlzQ29ubmVjdGVkPSExLHRoaXMucGFyZW50PWcseSE9bnVsbCYmeSBpbnN0YW5jZW9mIHM/dGhpcy5ncmFwaE1hbmFnZXI9eTp5IT1udWxsJiZ5IGluc3RhbmNlb2YgTGF5b3V0JiYodGhpcy5ncmFwaE1hbmFnZXI9eS5ncmFwaE1hbmFnZXIpfW8ocCwiTEdyYXBoIikscC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSk7Zm9yKHZhciBtIGluIG4pcFttXT1uW21dO3AucHJvdG90eXBlLmdldE5vZGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZXN9LHAucHJvdG90eXBlLmdldEVkZ2VzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXN9LHAucHJvdG90eXBlLmdldEdyYXBoTWFuYWdlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdyYXBoTWFuYWdlcn0scC5wcm90b3R5cGUuZ2V0UGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50fSxwLnByb3RvdHlwZS5nZXRMZWZ0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVmdH0scC5wcm90b3R5cGUuZ2V0UmlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yaWdodH0scC5wcm90b3R5cGUuZ2V0VG9wPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9wfSxwLnByb3RvdHlwZS5nZXRCb3R0b209ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ib3R0b219LHAucHJvdG90eXBlLmlzQ29ubmVjdGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNDb25uZWN0ZWR9LHAucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnLHksdil7aWYoeT09bnVsbCYmdj09bnVsbCl7dmFyIHg9ZztpZih0aGlzLmdyYXBoTWFuYWdlcj09bnVsbCl0aHJvdyJHcmFwaCBoYXMgbm8gZ3JhcGggbWdyISI7aWYodGhpcy5nZXROb2RlcygpLmluZGV4T2YoeCk+LTEpdGhyb3ciTm9kZSBhbHJlYWR5IGluIGdyYXBoISI7cmV0dXJuIHgub3duZXI9dGhpcyx0aGlzLmdldE5vZGVzKCkucHVzaCh4KSx4fWVsc2V7dmFyIGI9ZztpZighKHRoaXMuZ2V0Tm9kZXMoKS5pbmRleE9mKHkpPi0xJiZ0aGlzLmdldE5vZGVzKCkuaW5kZXhPZih2KT4tMSkpdGhyb3ciU291cmNlIG9yIHRhcmdldCBub3QgaW4gZ3JhcGghIjtpZighKHkub3duZXI9PXYub3duZXImJnkub3duZXI9PXRoaXMpKXRocm93IkJvdGggb3duZXJzIG11c3QgYmUgdGhpcyBncmFwaCEiO3JldHVybiB5Lm93bmVyIT12Lm93bmVyP251bGw6KGIuc291cmNlPXksYi50YXJnZXQ9dixiLmlzSW50ZXJHcmFwaD0hMSx0aGlzLmdldEVkZ2VzKCkucHVzaChiKSx5LmVkZ2VzLnB1c2goYiksdiE9eSYmdi5lZGdlcy5wdXNoKGIpLGIpfX0scC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKGcpe3ZhciB5PWc7aWYoZyBpbnN0YW5jZW9mIGwpe2lmKHk9PW51bGwpdGhyb3ciTm9kZSBpcyBudWxsISI7aWYoISh5Lm93bmVyIT1udWxsJiZ5Lm93bmVyPT10aGlzKSl0aHJvdyJPd25lciBncmFwaCBpcyBpbnZhbGlkISI7aWYodGhpcy5ncmFwaE1hbmFnZXI9PW51bGwpdGhyb3ciT3duZXIgZ3JhcGggbWFuYWdlciBpcyBpbnZhbGlkISI7Zm9yKHZhciB2PXkuZWRnZXMuc2xpY2UoKSx4LGI9di5sZW5ndGgsdz0wO3c8Yjt3KyspeD12W3ddLHguaXNJbnRlckdyYXBoP3RoaXMuZ3JhcGhNYW5hZ2VyLnJlbW92ZSh4KTp4LnNvdXJjZS5vd25lci5yZW1vdmUoeCk7dmFyIEM9dGhpcy5ub2Rlcy5pbmRleE9mKHkpO2lmKEM9PS0xKXRocm93Ik5vZGUgbm90IGluIG93bmVyIG5vZGUgbGlzdCEiO3RoaXMubm9kZXMuc3BsaWNlKEMsMSl9ZWxzZSBpZihnIGluc3RhbmNlb2YgdSl7dmFyIHg9ZztpZih4PT1udWxsKXRocm93IkVkZ2UgaXMgbnVsbCEiO2lmKCEoeC5zb3VyY2UhPW51bGwmJngudGFyZ2V0IT1udWxsKSl0aHJvdyJTb3VyY2UgYW5kL29yIHRhcmdldCBpcyBudWxsISI7aWYoISh4LnNvdXJjZS5vd25lciE9bnVsbCYmeC50YXJnZXQub3duZXIhPW51bGwmJnguc291cmNlLm93bmVyPT10aGlzJiZ4LnRhcmdldC5vd25lcj09dGhpcykpdGhyb3ciU291cmNlIGFuZC9vciB0YXJnZXQgb3duZXIgaXMgaW52YWxpZCEiO3ZhciBUPXguc291cmNlLmVkZ2VzLmluZGV4T2YoeCksRT14LnRhcmdldC5lZGdlcy5pbmRleE9mKHgpO2lmKCEoVD4tMSYmRT4tMSkpdGhyb3ciU291cmNlIGFuZC9vciB0YXJnZXQgZG9lc24ndCBrbm93IHRoaXMgZWRnZSEiO3guc291cmNlLmVkZ2VzLnNwbGljZShULDEpLHgudGFyZ2V0IT14LnNvdXJjZSYmeC50YXJnZXQuZWRnZXMuc3BsaWNlKEUsMSk7dmFyIEM9eC5zb3VyY2Uub3duZXIuZ2V0RWRnZXMoKS5pbmRleE9mKHgpO2lmKEM9PS0xKXRocm93Ik5vdCBpbiBvd25lcidzIGVkZ2UgbGlzdCEiO3guc291cmNlLm93bmVyLmdldEVkZ2VzKCkuc3BsaWNlKEMsMSl9fSxwLnByb3RvdHlwZS51cGRhdGVMZWZ0VG9wPWZ1bmN0aW9uKCl7Zm9yKHZhciBnPWkuTUFYX1ZBTFVFLHk9aS5NQVhfVkFMVUUsdix4LGIsdz10aGlzLmdldE5vZGVzKCksQz13Lmxlbmd0aCxUPTA7VDxDO1QrKyl7dmFyIEU9d1tUXTt2PUUuZ2V0VG9wKCkseD1FLmdldExlZnQoKSxnPnYmJihnPXYpLHk+eCYmKHk9eCl9cmV0dXJuIGc9PWkuTUFYX1ZBTFVFP251bGw6KHdbMF0uZ2V0UGFyZW50KCkucGFkZGluZ0xlZnQhPW51bGw/Yj13WzBdLmdldFBhcmVudCgpLnBhZGRpbmdMZWZ0OmI9dGhpcy5tYXJnaW4sdGhpcy5sZWZ0PXktYix0aGlzLnRvcD1nLWIsbmV3IGYodGhpcy5sZWZ0LHRoaXMudG9wKSl9LHAucHJvdG90eXBlLnVwZGF0ZUJvdW5kcz1mdW5jdGlvbihnKXtmb3IodmFyIHk9aS5NQVhfVkFMVUUsdj0taS5NQVhfVkFMVUUseD1pLk1BWF9WQUxVRSxiPS1pLk1BWF9WQUxVRSx3LEMsVCxFLEEsUz10aGlzLm5vZGVzLF89Uy5sZW5ndGgsST0wO0k8XztJKyspe3ZhciBEPVNbSV07ZyYmRC5jaGlsZCE9bnVsbCYmRC51cGRhdGVCb3VuZHMoKSx3PUQuZ2V0TGVmdCgpLEM9RC5nZXRSaWdodCgpLFQ9RC5nZXRUb3AoKSxFPUQuZ2V0Qm90dG9tKCkseT53JiYoeT13KSx2PEMmJih2PUMpLHg+VCYmKHg9VCksYjxFJiYoYj1FKX12YXIgaz1uZXcgaCh5LHgsdi15LGIteCk7eT09aS5NQVhfVkFMVUUmJih0aGlzLmxlZnQ9dGhpcy5wYXJlbnQuZ2V0TGVmdCgpLHRoaXMucmlnaHQ9dGhpcy5wYXJlbnQuZ2V0UmlnaHQoKSx0aGlzLnRvcD10aGlzLnBhcmVudC5nZXRUb3AoKSx0aGlzLmJvdHRvbT10aGlzLnBhcmVudC5nZXRCb3R0b20oKSksU1swXS5nZXRQYXJlbnQoKS5wYWRkaW5nTGVmdCE9bnVsbD9BPVNbMF0uZ2V0UGFyZW50KCkucGFkZGluZ0xlZnQ6QT10aGlzLm1hcmdpbix0aGlzLmxlZnQ9ay54LUEsdGhpcy5yaWdodD1rLngray53aWR0aCtBLHRoaXMudG9wPWsueS1BLHRoaXMuYm90dG9tPWsueStrLmhlaWdodCtBfSxwLmNhbGN1bGF0ZUJvdW5kcz1mdW5jdGlvbihnKXtmb3IodmFyIHk9aS5NQVhfVkFMVUUsdj0taS5NQVhfVkFMVUUseD1pLk1BWF9WQUxVRSxiPS1pLk1BWF9WQUxVRSx3LEMsVCxFLEE9Zy5sZW5ndGgsUz0wO1M8QTtTKyspe3ZhciBfPWdbU107dz1fLmdldExlZnQoKSxDPV8uZ2V0UmlnaHQoKSxUPV8uZ2V0VG9wKCksRT1fLmdldEJvdHRvbSgpLHk+dyYmKHk9dyksdjxDJiYodj1DKSx4PlQmJih4PVQpLGI8RSYmKGI9RSl9dmFyIEk9bmV3IGgoeSx4LHYteSxiLXgpO3JldHVybiBJfSxwLnByb3RvdHlwZS5nZXRJbmNsdXNpb25UcmVlRGVwdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcz09dGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpPzE6dGhpcy5wYXJlbnQuZ2V0SW5jbHVzaW9uVHJlZURlcHRoKCl9LHAucHJvdG90eXBlLmdldEVzdGltYXRlZFNpemU9ZnVuY3Rpb24oKXtpZih0aGlzLmVzdGltYXRlZFNpemU9PWkuTUlOX1ZBTFVFKXRocm93ImFzc2VydCBmYWlsZWQiO3JldHVybiB0aGlzLmVzdGltYXRlZFNpemV9LHAucHJvdG90eXBlLmNhbGNFc3RpbWF0ZWRTaXplPWZ1bmN0aW9uKCl7Zm9yKHZhciBnPTAseT10aGlzLm5vZGVzLHY9eS5sZW5ndGgseD0wO3g8djt4Kyspe3ZhciBiPXlbeF07Zys9Yi5jYWxjRXN0aW1hdGVkU2l6ZSgpfXJldHVybiBnPT0wP3RoaXMuZXN0aW1hdGVkU2l6ZT1hLkVNUFRZX0NPTVBPVU5EX05PREVfU0laRTp0aGlzLmVzdGltYXRlZFNpemU9Zy9NYXRoLnNxcnQodGhpcy5ub2Rlcy5sZW5ndGgpLHRoaXMuZXN0aW1hdGVkU2l6ZX0scC5wcm90b3R5cGUudXBkYXRlQ29ubmVjdGVkPWZ1bmN0aW9uKCl7dmFyIGc9dGhpcztpZih0aGlzLm5vZGVzLmxlbmd0aD09MCl7dGhpcy5pc0Nvbm5lY3RlZD0hMDtyZXR1cm59dmFyIHk9bmV3IGQsdj1uZXcgU2V0LHg9dGhpcy5ub2Rlc1swXSxiLHcsQz14LndpdGhDaGlsZHJlbigpO2ZvcihDLmZvckVhY2goZnVuY3Rpb24oSSl7eS5wdXNoKEkpLHYuYWRkKEkpfSk7eS5sZW5ndGghPT0wOyl7eD15LnNoaWZ0KCksYj14LmdldEVkZ2VzKCk7Zm9yKHZhciBUPWIubGVuZ3RoLEU9MDtFPFQ7RSsrKXt2YXIgQT1iW0VdO2lmKHc9QS5nZXRPdGhlckVuZEluR3JhcGgoeCx0aGlzKSx3IT1udWxsJiYhdi5oYXModykpe3ZhciBTPXcud2l0aENoaWxkcmVuKCk7Uy5mb3JFYWNoKGZ1bmN0aW9uKEkpe3kucHVzaChJKSx2LmFkZChJKX0pfX19aWYodGhpcy5pc0Nvbm5lY3RlZD0hMSx2LnNpemU+PXRoaXMubm9kZXMubGVuZ3RoKXt2YXIgXz0wO3YuZm9yRWFjaChmdW5jdGlvbihJKXtJLm93bmVyPT1nJiZfKyt9KSxfPT10aGlzLm5vZGVzLmxlbmd0aCYmKHRoaXMuaXNDb25uZWN0ZWQ9ITApfX0sdC5leHBvcnRzPXB9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saT1yKDEpO2Z1bmN0aW9uIGEocyl7bj1yKDYpLHRoaXMubGF5b3V0PXMsdGhpcy5ncmFwaHM9W10sdGhpcy5lZGdlcz1bXX1vKGEsIkxHcmFwaE1hbmFnZXIiKSxhLnByb3RvdHlwZS5hZGRSb290PWZ1bmN0aW9uKCl7dmFyIHM9dGhpcy5sYXlvdXQubmV3R3JhcGgoKSxsPXRoaXMubGF5b3V0Lm5ld05vZGUobnVsbCksdT10aGlzLmFkZChzLGwpO3JldHVybiB0aGlzLnNldFJvb3RHcmFwaCh1KSx0aGlzLnJvb3RHcmFwaH0sYS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHMsbCx1LGgsZil7aWYodT09bnVsbCYmaD09bnVsbCYmZj09bnVsbCl7aWYocz09bnVsbCl0aHJvdyJHcmFwaCBpcyBudWxsISI7aWYobD09bnVsbCl0aHJvdyJQYXJlbnQgbm9kZSBpcyBudWxsISI7aWYodGhpcy5ncmFwaHMuaW5kZXhPZihzKT4tMSl0aHJvdyJHcmFwaCBhbHJlYWR5IGluIHRoaXMgZ3JhcGggbWdyISI7aWYodGhpcy5ncmFwaHMucHVzaChzKSxzLnBhcmVudCE9bnVsbCl0aHJvdyJBbHJlYWR5IGhhcyBhIHBhcmVudCEiO2lmKGwuY2hpbGQhPW51bGwpdGhyb3ciQWxyZWFkeSBoYXMgYSBjaGlsZCEiO3JldHVybiBzLnBhcmVudD1sLGwuY2hpbGQ9cyxzfWVsc2V7Zj11LGg9bCx1PXM7dmFyIGQ9aC5nZXRPd25lcigpLHA9Zi5nZXRPd25lcigpO2lmKCEoZCE9bnVsbCYmZC5nZXRHcmFwaE1hbmFnZXIoKT09dGhpcykpdGhyb3ciU291cmNlIG5vdCBpbiB0aGlzIGdyYXBoIG1nciEiO2lmKCEocCE9bnVsbCYmcC5nZXRHcmFwaE1hbmFnZXIoKT09dGhpcykpdGhyb3ciVGFyZ2V0IG5vdCBpbiB0aGlzIGdyYXBoIG1nciEiO2lmKGQ9PXApcmV0dXJuIHUuaXNJbnRlckdyYXBoPSExLGQuYWRkKHUsaCxmKTtpZih1LmlzSW50ZXJHcmFwaD0hMCx1LnNvdXJjZT1oLHUudGFyZ2V0PWYsdGhpcy5lZGdlcy5pbmRleE9mKHUpPi0xKXRocm93IkVkZ2UgYWxyZWFkeSBpbiBpbnRlci1ncmFwaCBlZGdlIGxpc3QhIjtpZih0aGlzLmVkZ2VzLnB1c2godSksISh1LnNvdXJjZSE9bnVsbCYmdS50YXJnZXQhPW51bGwpKXRocm93IkVkZ2Ugc291cmNlIGFuZC9vciB0YXJnZXQgaXMgbnVsbCEiO2lmKCEodS5zb3VyY2UuZWRnZXMuaW5kZXhPZih1KT09LTEmJnUudGFyZ2V0LmVkZ2VzLmluZGV4T2YodSk9PS0xKSl0aHJvdyJFZGdlIGFscmVhZHkgaW4gc291cmNlIGFuZC9vciB0YXJnZXQgaW5jaWRlbmN5IGxpc3QhIjtyZXR1cm4gdS5zb3VyY2UuZWRnZXMucHVzaCh1KSx1LnRhcmdldC5lZGdlcy5wdXNoKHUpLHV9fSxhLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24ocyl7aWYocyBpbnN0YW5jZW9mIG4pe3ZhciBsPXM7aWYobC5nZXRHcmFwaE1hbmFnZXIoKSE9dGhpcyl0aHJvdyJHcmFwaCBub3QgaW4gdGhpcyBncmFwaCBtZ3IiO2lmKCEobD09dGhpcy5yb290R3JhcGh8fGwucGFyZW50IT1udWxsJiZsLnBhcmVudC5ncmFwaE1hbmFnZXI9PXRoaXMpKXRocm93IkludmFsaWQgcGFyZW50IG5vZGUhIjt2YXIgdT1bXTt1PXUuY29uY2F0KGwuZ2V0RWRnZXMoKSk7Zm9yKHZhciBoLGY9dS5sZW5ndGgsZD0wO2Q8ZjtkKyspaD11W2RdLGwucmVtb3ZlKGgpO3ZhciBwPVtdO3A9cC5jb25jYXQobC5nZXROb2RlcygpKTt2YXIgbTtmPXAubGVuZ3RoO2Zvcih2YXIgZD0wO2Q8ZjtkKyspbT1wW2RdLGwucmVtb3ZlKG0pO2w9PXRoaXMucm9vdEdyYXBoJiZ0aGlzLnNldFJvb3RHcmFwaChudWxsKTt2YXIgZz10aGlzLmdyYXBocy5pbmRleE9mKGwpO3RoaXMuZ3JhcGhzLnNwbGljZShnLDEpLGwucGFyZW50PW51bGx9ZWxzZSBpZihzIGluc3RhbmNlb2YgaSl7aWYoaD1zLGg9PW51bGwpdGhyb3ciRWRnZSBpcyBudWxsISI7aWYoIWguaXNJbnRlckdyYXBoKXRocm93Ik5vdCBhbiBpbnRlci1ncmFwaCBlZGdlISI7aWYoIShoLnNvdXJjZSE9bnVsbCYmaC50YXJnZXQhPW51bGwpKXRocm93IlNvdXJjZSBhbmQvb3IgdGFyZ2V0IGlzIG51bGwhIjtpZighKGguc291cmNlLmVkZ2VzLmluZGV4T2YoaCkhPS0xJiZoLnRhcmdldC5lZGdlcy5pbmRleE9mKGgpIT0tMSkpdGhyb3ciU291cmNlIGFuZC9vciB0YXJnZXQgZG9lc24ndCBrbm93IHRoaXMgZWRnZSEiO3ZhciBnPWguc291cmNlLmVkZ2VzLmluZGV4T2YoaCk7aWYoaC5zb3VyY2UuZWRnZXMuc3BsaWNlKGcsMSksZz1oLnRhcmdldC5lZGdlcy5pbmRleE9mKGgpLGgudGFyZ2V0LmVkZ2VzLnNwbGljZShnLDEpLCEoaC5zb3VyY2Uub3duZXIhPW51bGwmJmguc291cmNlLm93bmVyLmdldEdyYXBoTWFuYWdlcigpIT1udWxsKSl0aHJvdyJFZGdlIG93bmVyIGdyYXBoIG9yIG93bmVyIGdyYXBoIG1hbmFnZXIgaXMgbnVsbCEiO2lmKGguc291cmNlLm93bmVyLmdldEdyYXBoTWFuYWdlcigpLmVkZ2VzLmluZGV4T2YoaCk9PS0xKXRocm93Ik5vdCBpbiBvd25lciBncmFwaCBtYW5hZ2VyJ3MgZWRnZSBsaXN0ISI7dmFyIGc9aC5zb3VyY2Uub3duZXIuZ2V0R3JhcGhNYW5hZ2VyKCkuZWRnZXMuaW5kZXhPZihoKTtoLnNvdXJjZS5vd25lci5nZXRHcmFwaE1hbmFnZXIoKS5lZGdlcy5zcGxpY2UoZywxKX19LGEucHJvdG90eXBlLnVwZGF0ZUJvdW5kcz1mdW5jdGlvbigpe3RoaXMucm9vdEdyYXBoLnVwZGF0ZUJvdW5kcyghMCl9LGEucHJvdG90eXBlLmdldEdyYXBocz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdyYXBoc30sYS5wcm90b3R5cGUuZ2V0QWxsTm9kZXM9ZnVuY3Rpb24oKXtpZih0aGlzLmFsbE5vZGVzPT1udWxsKXtmb3IodmFyIHM9W10sbD10aGlzLmdldEdyYXBocygpLHU9bC5sZW5ndGgsaD0wO2g8dTtoKyspcz1zLmNvbmNhdChsW2hdLmdldE5vZGVzKCkpO3RoaXMuYWxsTm9kZXM9c31yZXR1cm4gdGhpcy5hbGxOb2Rlc30sYS5wcm90b3R5cGUucmVzZXRBbGxOb2Rlcz1mdW5jdGlvbigpe3RoaXMuYWxsTm9kZXM9bnVsbH0sYS5wcm90b3R5cGUucmVzZXRBbGxFZGdlcz1mdW5jdGlvbigpe3RoaXMuYWxsRWRnZXM9bnVsbH0sYS5wcm90b3R5cGUucmVzZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbj1mdW5jdGlvbigpe3RoaXMuYWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb249bnVsbH0sYS5wcm90b3R5cGUuZ2V0QWxsRWRnZXM9ZnVuY3Rpb24oKXtpZih0aGlzLmFsbEVkZ2VzPT1udWxsKXtmb3IodmFyIHM9W10sbD10aGlzLmdldEdyYXBocygpLHU9bC5sZW5ndGgsaD0wO2g8bC5sZW5ndGg7aCsrKXM9cy5jb25jYXQobFtoXS5nZXRFZGdlcygpKTtzPXMuY29uY2F0KHRoaXMuZWRnZXMpLHRoaXMuYWxsRWRnZXM9c31yZXR1cm4gdGhpcy5hbGxFZGdlc30sYS5wcm90b3R5cGUuZ2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbn0sYS5wcm90b3R5cGUuc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb249ZnVuY3Rpb24ocyl7aWYodGhpcy5hbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbiE9bnVsbCl0aHJvdyJhc3NlcnQgZmFpbGVkIjt0aGlzLmFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPXN9LGEucHJvdG90eXBlLmdldFJvb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb290R3JhcGh9LGEucHJvdG90eXBlLnNldFJvb3RHcmFwaD1mdW5jdGlvbihzKXtpZihzLmdldEdyYXBoTWFuYWdlcigpIT10aGlzKXRocm93IlJvb3Qgbm90IGluIHRoaXMgZ3JhcGggbWdyISI7dGhpcy5yb290R3JhcGg9cyxzLnBhcmVudD09bnVsbCYmKHMucGFyZW50PXRoaXMubGF5b3V0Lm5ld05vZGUoIlJvb3Qgbm9kZSIpKX0sYS5wcm90b3R5cGUuZ2V0TGF5b3V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGF5b3V0fSxhLnByb3RvdHlwZS5pc09uZUFuY2VzdG9yT2ZPdGhlcj1mdW5jdGlvbihzLGwpe2lmKCEocyE9bnVsbCYmbCE9bnVsbCkpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7aWYocz09bClyZXR1cm4hMDt2YXIgdT1zLmdldE93bmVyKCksaDtkb3tpZihoPXUuZ2V0UGFyZW50KCksaD09bnVsbClicmVhaztpZihoPT1sKXJldHVybiEwO2lmKHU9aC5nZXRPd25lcigpLHU9PW51bGwpYnJlYWt9d2hpbGUoITApO3U9bC5nZXRPd25lcigpO2Rve2lmKGg9dS5nZXRQYXJlbnQoKSxoPT1udWxsKWJyZWFrO2lmKGg9PXMpcmV0dXJuITA7aWYodT1oLmdldE93bmVyKCksdT09bnVsbClicmVha313aGlsZSghMCk7cmV0dXJuITF9LGEucHJvdG90eXBlLmNhbGNMb3dlc3RDb21tb25BbmNlc3RvcnM9ZnVuY3Rpb24oKXtmb3IodmFyIHMsbCx1LGgsZixkPXRoaXMuZ2V0QWxsRWRnZXMoKSxwPWQubGVuZ3RoLG09MDttPHA7bSsrKXtpZihzPWRbbV0sbD1zLnNvdXJjZSx1PXMudGFyZ2V0LHMubGNhPW51bGwscy5zb3VyY2VJbkxjYT1sLHMudGFyZ2V0SW5MY2E9dSxsPT11KXtzLmxjYT1sLmdldE93bmVyKCk7Y29udGludWV9Zm9yKGg9bC5nZXRPd25lcigpO3MubGNhPT1udWxsOyl7Zm9yKHMudGFyZ2V0SW5MY2E9dSxmPXUuZ2V0T3duZXIoKTtzLmxjYT09bnVsbDspe2lmKGY9PWgpe3MubGNhPWY7YnJlYWt9aWYoZj09dGhpcy5yb290R3JhcGgpYnJlYWs7aWYocy5sY2EhPW51bGwpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7cy50YXJnZXRJbkxjYT1mLmdldFBhcmVudCgpLGY9cy50YXJnZXRJbkxjYS5nZXRPd25lcigpfWlmKGg9PXRoaXMucm9vdEdyYXBoKWJyZWFrO3MubGNhPT1udWxsJiYocy5zb3VyY2VJbkxjYT1oLmdldFBhcmVudCgpLGg9cy5zb3VyY2VJbkxjYS5nZXRPd25lcigpKX1pZihzLmxjYT09bnVsbCl0aHJvdyJhc3NlcnQgZmFpbGVkIn19LGEucHJvdG90eXBlLmNhbGNMb3dlc3RDb21tb25BbmNlc3Rvcj1mdW5jdGlvbihzLGwpe2lmKHM9PWwpcmV0dXJuIHMuZ2V0T3duZXIoKTt2YXIgdT1zLmdldE93bmVyKCk7ZG97aWYodT09bnVsbClicmVhazt2YXIgaD1sLmdldE93bmVyKCk7ZG97aWYoaD09bnVsbClicmVhaztpZihoPT11KXJldHVybiBoO2g9aC5nZXRQYXJlbnQoKS5nZXRPd25lcigpfXdoaWxlKCEwKTt1PXUuZ2V0UGFyZW50KCkuZ2V0T3duZXIoKX13aGlsZSghMCk7cmV0dXJuIHV9LGEucHJvdG90eXBlLmNhbGNJbmNsdXNpb25UcmVlRGVwdGhzPWZ1bmN0aW9uKHMsbCl7cz09bnVsbCYmbD09bnVsbCYmKHM9dGhpcy5yb290R3JhcGgsbD0xKTtmb3IodmFyIHUsaD1zLmdldE5vZGVzKCksZj1oLmxlbmd0aCxkPTA7ZDxmO2QrKyl1PWhbZF0sdS5pbmNsdXNpb25UcmVlRGVwdGg9bCx1LmNoaWxkIT1udWxsJiZ0aGlzLmNhbGNJbmNsdXNpb25UcmVlRGVwdGhzKHUuY2hpbGQsbCsxKX0sYS5wcm90b3R5cGUuaW5jbHVkZXNJbnZhbGlkRWRnZT1mdW5jdGlvbigpe2Zvcih2YXIgcyxsPVtdLHU9dGhpcy5lZGdlcy5sZW5ndGgsaD0wO2g8dTtoKyspcz10aGlzLmVkZ2VzW2hdLHRoaXMuaXNPbmVBbmNlc3Rvck9mT3RoZXIocy5zb3VyY2Uscy50YXJnZXQpJiZsLnB1c2gocyk7Zm9yKHZhciBoPTA7aDxsLmxlbmd0aDtoKyspdGhpcy5yZW1vdmUobFtoXSk7cmV0dXJuITF9LHQuZXhwb3J0cz1hfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTIpO2Z1bmN0aW9uIGkoKXt9byhpLCJJR2VvbWV0cnkiKSxpLmNhbGNTZXBhcmF0aW9uQW1vdW50PWZ1bmN0aW9uKGEscyxsLHUpe2lmKCFhLmludGVyc2VjdHMocykpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7dmFyIGg9bmV3IEFycmF5KDIpO3RoaXMuZGVjaWRlRGlyZWN0aW9uc0Zvck92ZXJsYXBwaW5nTm9kZXMoYSxzLGgpLGxbMF09TWF0aC5taW4oYS5nZXRSaWdodCgpLHMuZ2V0UmlnaHQoKSktTWF0aC5tYXgoYS54LHMueCksbFsxXT1NYXRoLm1pbihhLmdldEJvdHRvbSgpLHMuZ2V0Qm90dG9tKCkpLU1hdGgubWF4KGEueSxzLnkpLGEuZ2V0WCgpPD1zLmdldFgoKSYmYS5nZXRSaWdodCgpPj1zLmdldFJpZ2h0KCk/bFswXSs9TWF0aC5taW4ocy5nZXRYKCktYS5nZXRYKCksYS5nZXRSaWdodCgpLXMuZ2V0UmlnaHQoKSk6cy5nZXRYKCk8PWEuZ2V0WCgpJiZzLmdldFJpZ2h0KCk+PWEuZ2V0UmlnaHQoKSYmKGxbMF0rPU1hdGgubWluKGEuZ2V0WCgpLXMuZ2V0WCgpLHMuZ2V0UmlnaHQoKS1hLmdldFJpZ2h0KCkpKSxhLmdldFkoKTw9cy5nZXRZKCkmJmEuZ2V0Qm90dG9tKCk+PXMuZ2V0Qm90dG9tKCk/bFsxXSs9TWF0aC5taW4ocy5nZXRZKCktYS5nZXRZKCksYS5nZXRCb3R0b20oKS1zLmdldEJvdHRvbSgpKTpzLmdldFkoKTw9YS5nZXRZKCkmJnMuZ2V0Qm90dG9tKCk+PWEuZ2V0Qm90dG9tKCkmJihsWzFdKz1NYXRoLm1pbihhLmdldFkoKS1zLmdldFkoKSxzLmdldEJvdHRvbSgpLWEuZ2V0Qm90dG9tKCkpKTt2YXIgZj1NYXRoLmFicygocy5nZXRDZW50ZXJZKCktYS5nZXRDZW50ZXJZKCkpLyhzLmdldENlbnRlclgoKS1hLmdldENlbnRlclgoKSkpO3MuZ2V0Q2VudGVyWSgpPT09YS5nZXRDZW50ZXJZKCkmJnMuZ2V0Q2VudGVyWCgpPT09YS5nZXRDZW50ZXJYKCkmJihmPTEpO3ZhciBkPWYqbFswXSxwPWxbMV0vZjtsWzBdPHA/cD1sWzBdOmQ9bFsxXSxsWzBdPS0xKmhbMF0qKHAvMit1KSxsWzFdPS0xKmhbMV0qKGQvMit1KX0saS5kZWNpZGVEaXJlY3Rpb25zRm9yT3ZlcmxhcHBpbmdOb2Rlcz1mdW5jdGlvbihhLHMsbCl7YS5nZXRDZW50ZXJYKCk8cy5nZXRDZW50ZXJYKCk/bFswXT0tMTpsWzBdPTEsYS5nZXRDZW50ZXJZKCk8cy5nZXRDZW50ZXJZKCk/bFsxXT0tMTpsWzFdPTF9LGkuZ2V0SW50ZXJzZWN0aW9uMj1mdW5jdGlvbihhLHMsbCl7dmFyIHU9YS5nZXRDZW50ZXJYKCksaD1hLmdldENlbnRlclkoKSxmPXMuZ2V0Q2VudGVyWCgpLGQ9cy5nZXRDZW50ZXJZKCk7aWYoYS5pbnRlcnNlY3RzKHMpKXJldHVybiBsWzBdPXUsbFsxXT1oLGxbMl09ZixsWzNdPWQsITA7dmFyIHA9YS5nZXRYKCksbT1hLmdldFkoKSxnPWEuZ2V0UmlnaHQoKSx5PWEuZ2V0WCgpLHY9YS5nZXRCb3R0b20oKSx4PWEuZ2V0UmlnaHQoKSxiPWEuZ2V0V2lkdGhIYWxmKCksdz1hLmdldEhlaWdodEhhbGYoKSxDPXMuZ2V0WCgpLFQ9cy5nZXRZKCksRT1zLmdldFJpZ2h0KCksQT1zLmdldFgoKSxTPXMuZ2V0Qm90dG9tKCksXz1zLmdldFJpZ2h0KCksST1zLmdldFdpZHRoSGFsZigpLEQ9cy5nZXRIZWlnaHRIYWxmKCksaz0hMSxMPSExO2lmKHU9PT1mKXtpZihoPmQpcmV0dXJuIGxbMF09dSxsWzFdPW0sbFsyXT1mLGxbM109UywhMTtpZihoPGQpcmV0dXJuIGxbMF09dSxsWzFdPXYsbFsyXT1mLGxbM109VCwhMX1lbHNlIGlmKGg9PT1kKXtpZih1PmYpcmV0dXJuIGxbMF09cCxsWzFdPWgsbFsyXT1FLGxbM109ZCwhMTtpZih1PGYpcmV0dXJuIGxbMF09ZyxsWzFdPWgsbFsyXT1DLGxbM109ZCwhMX1lbHNle3ZhciBSPWEuaGVpZ2h0L2Eud2lkdGgsTz1zLmhlaWdodC9zLndpZHRoLE09KGQtaCkvKGYtdSksQj12b2lkIDAsRj12b2lkIDAsUD12b2lkIDAsej12b2lkIDAsJD12b2lkIDAsSD12b2lkIDA7aWYoLVI9PT1NP3U+Zj8obFswXT15LGxbMV09dixrPSEwKToobFswXT1nLGxbMV09bSxrPSEwKTpSPT09TSYmKHU+Zj8obFswXT1wLGxbMV09bSxrPSEwKToobFswXT14LGxbMV09dixrPSEwKSksLU89PT1NP2Y+dT8obFsyXT1BLGxbM109UyxMPSEwKToobFsyXT1FLGxbM109VCxMPSEwKTpPPT09TSYmKGY+dT8obFsyXT1DLGxbM109VCxMPSEwKToobFsyXT1fLGxbM109UyxMPSEwKSksayYmTClyZXR1cm4hMTtpZih1PmY/aD5kPyhCPXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oUixNLDQpLEY9dGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbihPLE0sMikpOihCPXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oLVIsTSwzKSxGPXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oLU8sTSwxKSk6aD5kPyhCPXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oLVIsTSwxKSxGPXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oLU8sTSwzKSk6KEI9dGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbihSLE0sMiksRj10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKE8sTSw0KSksIWspc3dpdGNoKEIpe2Nhc2UgMTp6PW0sUD11Ky13L00sbFswXT1QLGxbMV09ejticmVhaztjYXNlIDI6UD14LHo9aCtiKk0sbFswXT1QLGxbMV09ejticmVhaztjYXNlIDM6ej12LFA9dSt3L00sbFswXT1QLGxbMV09ejticmVhaztjYXNlIDQ6UD15LHo9aCstYipNLGxbMF09UCxsWzFdPXo7YnJlYWt9aWYoIUwpc3dpdGNoKEYpe2Nhc2UgMTpIPVQsJD1mKy1EL00sbFsyXT0kLGxbM109SDticmVhaztjYXNlIDI6JD1fLEg9ZCtJKk0sbFsyXT0kLGxbM109SDticmVhaztjYXNlIDM6SD1TLCQ9ZitEL00sbFsyXT0kLGxbM109SDticmVhaztjYXNlIDQ6JD1BLEg9ZCstSSpNLGxbMl09JCxsWzNdPUg7YnJlYWt9fXJldHVybiExfSxpLmdldENhcmRpbmFsRGlyZWN0aW9uPWZ1bmN0aW9uKGEscyxsKXtyZXR1cm4gYT5zP2w6MStsJTR9LGkuZ2V0SW50ZXJzZWN0aW9uPWZ1bmN0aW9uKGEscyxsLHUpe2lmKHU9PW51bGwpcmV0dXJuIHRoaXMuZ2V0SW50ZXJzZWN0aW9uMihhLHMsbCk7dmFyIGg9YS54LGY9YS55LGQ9cy54LHA9cy55LG09bC54LGc9bC55LHk9dS54LHY9dS55LHg9dm9pZCAwLGI9dm9pZCAwLHc9dm9pZCAwLEM9dm9pZCAwLFQ9dm9pZCAwLEU9dm9pZCAwLEE9dm9pZCAwLFM9dm9pZCAwLF89dm9pZCAwO3JldHVybiB3PXAtZixUPWgtZCxBPWQqZi1oKnAsQz12LWcsRT1tLXksUz15KmctbSp2LF89dypFLUMqVCxfPT09MD9udWxsOih4PShUKlMtRSpBKS9fLGI9KEMqQS13KlMpL18sbmV3IG4oeCxiKSl9LGkuYW5nbGVPZlZlY3Rvcj1mdW5jdGlvbihhLHMsbCx1KXt2YXIgaD12b2lkIDA7cmV0dXJuIGEhPT1sPyhoPU1hdGguYXRhbigodS1zKS8obC1hKSksbDxhP2grPU1hdGguUEk6dTxzJiYoaCs9dGhpcy5UV09fUEkpKTp1PHM/aD10aGlzLk9ORV9BTkRfSEFMRl9QSTpoPXRoaXMuSEFMRl9QSSxofSxpLmRvSW50ZXJzZWN0PWZ1bmN0aW9uKGEscyxsLHUpe3ZhciBoPWEueCxmPWEueSxkPXMueCxwPXMueSxtPWwueCxnPWwueSx5PXUueCx2PXUueSx4PShkLWgpKih2LWcpLSh5LW0pKihwLWYpO2lmKHg9PT0wKXJldHVybiExO3ZhciBiPSgodi1nKSooeS1oKSsobS15KSoodi1mKSkveCx3PSgoZi1wKSooeS1oKSsoZC1oKSoodi1mKSkveDtyZXR1cm4gMDxiJiZiPDEmJjA8dyYmdzwxfSxpLmZpbmRDaXJjbGVMaW5lSW50ZXJzZWN0aW9ucz1mdW5jdGlvbihhLHMsbCx1LGgsZixkKXt2YXIgcD0obC1hKSoobC1hKSsodS1zKSoodS1zKSxtPTIqKChhLWgpKihsLWEpKyhzLWYpKih1LXMpKSxnPShhLWgpKihhLWgpKyhzLWYpKihzLWYpLWQqZCx5PW0qbS00KnAqZztpZih5Pj0wKXt2YXIgdj0oLW0rTWF0aC5zcXJ0KG0qbS00KnAqZykpLygyKnApLHg9KC1tLU1hdGguc3FydChtKm0tNCpwKmcpKS8oMipwKSxiPW51bGw7cmV0dXJuIHY+PTAmJnY8PTE/W3ZdOng+PTAmJng8PTE/W3hdOmJ9ZWxzZSByZXR1cm4gbnVsbH0saS5IQUxGX1BJPS41Kk1hdGguUEksaS5PTkVfQU5EX0hBTEZfUEk9MS41Kk1hdGguUEksaS5UV09fUEk9MipNYXRoLlBJLGkuVEhSRUVfUEk9MypNYXRoLlBJLHQuZXhwb3J0cz1pfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXt9byhuLCJJTWF0aCIpLG4uc2lnbj1mdW5jdGlvbihpKXtyZXR1cm4gaT4wPzE6aTwwPy0xOjB9LG4uZmxvb3I9ZnVuY3Rpb24oaSl7cmV0dXJuIGk8MD9NYXRoLmNlaWwoaSk6TWF0aC5mbG9vcihpKX0sbi5jZWlsPWZ1bmN0aW9uKGkpe3JldHVybiBpPDA/TWF0aC5mbG9vcihpKTpNYXRoLmNlaWwoaSl9LHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXt9byhuLCJJbnRlZ2VyIiksbi5NQVhfVkFMVUU9MjE0NzQ4MzY0NyxuLk1JTl9WQUxVRT0tMjE0NzQ4MzY0OCx0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1mdW5jdGlvbigpe2Z1bmN0aW9uIGgoZixkKXtmb3IodmFyIHA9MDtwPGQubGVuZ3RoO3ArKyl7dmFyIG09ZFtwXTttLmVudW1lcmFibGU9bS5lbnVtZXJhYmxlfHwhMSxtLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbSYmKG0ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLG0ua2V5LG0pfX1yZXR1cm4gbyhoLCJkZWZpbmVQcm9wZXJ0aWVzIiksZnVuY3Rpb24oZixkLHApe3JldHVybiBkJiZoKGYucHJvdG90eXBlLGQpLHAmJmgoZixwKSxmfX0oKTtmdW5jdGlvbiBpKGgsZil7aWYoIShoIGluc3RhbmNlb2YgZikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9byhpLCJfY2xhc3NDYWxsQ2hlY2siKTt2YXIgYT1vKGZ1bmN0aW9uKGYpe3JldHVybnt2YWx1ZTpmLG5leHQ6bnVsbCxwcmV2Om51bGx9fSwibm9kZUZyb20iKSxzPW8oZnVuY3Rpb24oZixkLHAsbSl7cmV0dXJuIGYhPT1udWxsP2YubmV4dD1kOm0uaGVhZD1kLHAhPT1udWxsP3AucHJldj1kOm0udGFpbD1kLGQucHJldj1mLGQubmV4dD1wLG0ubGVuZ3RoKyssZH0sImFkZCIpLGw9byhmdW5jdGlvbihmLGQpe3ZhciBwPWYucHJldixtPWYubmV4dDtyZXR1cm4gcCE9PW51bGw/cC5uZXh0PW06ZC5oZWFkPW0sbSE9PW51bGw/bS5wcmV2PXA6ZC50YWlsPXAsZi5wcmV2PWYubmV4dD1udWxsLGQubGVuZ3RoLS0sZn0sIl9yZW1vdmUiKSx1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gaChmKXt2YXIgZD10aGlzO2kodGhpcyxoKSx0aGlzLmxlbmd0aD0wLHRoaXMuaGVhZD1udWxsLHRoaXMudGFpbD1udWxsLGY/LmZvckVhY2goZnVuY3Rpb24ocCl7cmV0dXJuIGQucHVzaChwKX0pfXJldHVybiBvKGgsIkxpbmtlZExpc3QiKSxuKGgsW3trZXk6InNpemUiLHZhbHVlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGh9LCJzaXplIil9LHtrZXk6Imluc2VydEJlZm9yZSIsdmFsdWU6byhmdW5jdGlvbihkLHApe3JldHVybiBzKHAucHJldixhKGQpLHAsdGhpcyl9LCJpbnNlcnRCZWZvcmUiKX0se2tleToiaW5zZXJ0QWZ0ZXIiLHZhbHVlOm8oZnVuY3Rpb24oZCxwKXtyZXR1cm4gcyhwLGEoZCkscC5uZXh0LHRoaXMpfSwiaW5zZXJ0QWZ0ZXIiKX0se2tleToiaW5zZXJ0Tm9kZUJlZm9yZSIsdmFsdWU6byhmdW5jdGlvbihkLHApe3JldHVybiBzKHAucHJldixkLHAsdGhpcyl9LCJpbnNlcnROb2RlQmVmb3JlIil9LHtrZXk6Imluc2VydE5vZGVBZnRlciIsdmFsdWU6byhmdW5jdGlvbihkLHApe3JldHVybiBzKHAsZCxwLm5leHQsdGhpcyl9LCJpbnNlcnROb2RlQWZ0ZXIiKX0se2tleToicHVzaCIsdmFsdWU6byhmdW5jdGlvbihkKXtyZXR1cm4gcyh0aGlzLnRhaWwsYShkKSxudWxsLHRoaXMpfSwicHVzaCIpfSx7a2V5OiJ1bnNoaWZ0Iix2YWx1ZTpvKGZ1bmN0aW9uKGQpe3JldHVybiBzKG51bGwsYShkKSx0aGlzLmhlYWQsdGhpcyl9LCJ1bnNoaWZ0Iil9LHtrZXk6InJlbW92ZSIsdmFsdWU6byhmdW5jdGlvbihkKXtyZXR1cm4gbChkLHRoaXMpfSwicmVtb3ZlIil9LHtrZXk6InBvcCIsdmFsdWU6byhmdW5jdGlvbigpe3JldHVybiBsKHRoaXMudGFpbCx0aGlzKS52YWx1ZX0sInBvcCIpfSx7a2V5OiJwb3BOb2RlIix2YWx1ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIGwodGhpcy50YWlsLHRoaXMpfSwicG9wTm9kZSIpfSx7a2V5OiJzaGlmdCIsdmFsdWU6byhmdW5jdGlvbigpe3JldHVybiBsKHRoaXMuaGVhZCx0aGlzKS52YWx1ZX0sInNoaWZ0Iil9LHtrZXk6InNoaWZ0Tm9kZSIsdmFsdWU6byhmdW5jdGlvbigpe3JldHVybiBsKHRoaXMuaGVhZCx0aGlzKX0sInNoaWZ0Tm9kZSIpfSx7a2V5OiJnZXRfb2JqZWN0X2F0Iix2YWx1ZTpvKGZ1bmN0aW9uKGQpe2lmKGQ8PXRoaXMubGVuZ3RoKCkpe2Zvcih2YXIgcD0xLG09dGhpcy5oZWFkO3A8ZDspbT1tLm5leHQscCsrO3JldHVybiBtLnZhbHVlfX0sImdldF9vYmplY3RfYXQiKX0se2tleToic2V0X29iamVjdF9hdCIsdmFsdWU6byhmdW5jdGlvbihkLHApe2lmKGQ8PXRoaXMubGVuZ3RoKCkpe2Zvcih2YXIgbT0xLGc9dGhpcy5oZWFkO208ZDspZz1nLm5leHQsbSsrO2cudmFsdWU9cH19LCJzZXRfb2JqZWN0X2F0Iil9XSksaH0oKTt0LmV4cG9ydHM9dX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGksYSxzKXt0aGlzLng9bnVsbCx0aGlzLnk9bnVsbCxpPT1udWxsJiZhPT1udWxsJiZzPT1udWxsPyh0aGlzLng9MCx0aGlzLnk9MCk6dHlwZW9mIGk9PSJudW1iZXIiJiZ0eXBlb2YgYT09Im51bWJlciImJnM9PW51bGw/KHRoaXMueD1pLHRoaXMueT1hKTppLmNvbnN0cnVjdG9yLm5hbWU9PSJQb2ludCImJmE9PW51bGwmJnM9PW51bGwmJihzPWksdGhpcy54PXMueCx0aGlzLnk9cy55KX1vKG4sIlBvaW50Iiksbi5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnh9LG4ucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55fSxuLnByb3RvdHlwZS5nZXRMb2NhdGlvbj1mdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzLngsdGhpcy55KX0sbi5wcm90b3R5cGUuc2V0TG9jYXRpb249ZnVuY3Rpb24oaSxhLHMpe2kuY29uc3RydWN0b3IubmFtZT09IlBvaW50IiYmYT09bnVsbCYmcz09bnVsbD8ocz1pLHRoaXMuc2V0TG9jYXRpb24ocy54LHMueSkpOnR5cGVvZiBpPT0ibnVtYmVyIiYmdHlwZW9mIGE9PSJudW1iZXIiJiZzPT1udWxsJiYocGFyc2VJbnQoaSk9PWkmJnBhcnNlSW50KGEpPT1hP3RoaXMubW92ZShpLGEpOih0aGlzLng9TWF0aC5mbG9vcihpKy41KSx0aGlzLnk9TWF0aC5mbG9vcihhKy41KSkpfSxuLnByb3RvdHlwZS5tb3ZlPWZ1bmN0aW9uKGksYSl7dGhpcy54PWksdGhpcy55PWF9LG4ucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbihpLGEpe3RoaXMueCs9aSx0aGlzLnkrPWF9LG4ucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihpKXtpZihpLmNvbnN0cnVjdG9yLm5hbWU9PSJQb2ludCIpe3ZhciBhPWk7cmV0dXJuIHRoaXMueD09YS54JiZ0aGlzLnk9PWEueX1yZXR1cm4gdGhpcz09aX0sbi5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4oKS5jb25zdHJ1Y3Rvci5uYW1lKyJbeD0iK3RoaXMueCsiLHk9Iit0aGlzLnkrIl0ifSx0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGksYSxzLGwpe3RoaXMueD0wLHRoaXMueT0wLHRoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLGkhPW51bGwmJmEhPW51bGwmJnMhPW51bGwmJmwhPW51bGwmJih0aGlzLng9aSx0aGlzLnk9YSx0aGlzLndpZHRoPXMsdGhpcy5oZWlnaHQ9bCl9byhuLCJSZWN0YW5nbGVEIiksbi5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnh9LG4ucHJvdG90eXBlLnNldFg9ZnVuY3Rpb24oaSl7dGhpcy54PWl9LG4ucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55fSxuLnByb3RvdHlwZS5zZXRZPWZ1bmN0aW9uKGkpe3RoaXMueT1pfSxuLnByb3RvdHlwZS5nZXRXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLndpZHRofSxuLnByb3RvdHlwZS5zZXRXaWR0aD1mdW5jdGlvbihpKXt0aGlzLndpZHRoPWl9LG4ucHJvdG90eXBlLmdldEhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhlaWdodH0sbi5wcm90b3R5cGUuc2V0SGVpZ2h0PWZ1bmN0aW9uKGkpe3RoaXMuaGVpZ2h0PWl9LG4ucHJvdG90eXBlLmdldFJpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueCt0aGlzLndpZHRofSxuLnByb3RvdHlwZS5nZXRCb3R0b209ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55K3RoaXMuaGVpZ2h0fSxuLnByb3RvdHlwZS5pbnRlcnNlY3RzPWZ1bmN0aW9uKGkpe3JldHVybiEodGhpcy5nZXRSaWdodCgpPGkueHx8dGhpcy5nZXRCb3R0b20oKTxpLnl8fGkuZ2V0UmlnaHQoKTx0aGlzLnh8fGkuZ2V0Qm90dG9tKCk8dGhpcy55KX0sbi5wcm90b3R5cGUuZ2V0Q2VudGVyWD1mdW5jdGlvbigpe3JldHVybiB0aGlzLngrdGhpcy53aWR0aC8yfSxuLnByb3RvdHlwZS5nZXRNaW5YPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0WCgpfSxuLnByb3RvdHlwZS5nZXRNYXhYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0WCgpK3RoaXMud2lkdGh9LG4ucHJvdG90eXBlLmdldENlbnRlclk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55K3RoaXMuaGVpZ2h0LzJ9LG4ucHJvdG90eXBlLmdldE1pblk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRZKCl9LG4ucHJvdG90eXBlLmdldE1heFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRZKCkrdGhpcy5oZWlnaHR9LG4ucHJvdG90eXBlLmdldFdpZHRoSGFsZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLndpZHRoLzJ9LG4ucHJvdG90eXBlLmdldEhlaWdodEhhbGY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oZWlnaHQvMn0sdC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmdHlwZW9mIFN5bWJvbC5pdGVyYXRvcj09InN5bWJvbCI/ZnVuY3Rpb24oYSl7cmV0dXJuIHR5cGVvZiBhfTpmdW5jdGlvbihhKXtyZXR1cm4gYSYmdHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmYS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGF9O2Z1bmN0aW9uIGkoKXt9byhpLCJVbmlxdWVJREdlbmVyZXRvciIpLGkubGFzdElEPTAsaS5jcmVhdGVJRD1mdW5jdGlvbihhKXtyZXR1cm4gaS5pc1ByaW1pdGl2ZShhKT9hOihhLnVuaXF1ZUlEIT1udWxsfHwoYS51bmlxdWVJRD1pLmdldFN0cmluZygpLGkubGFzdElEKyspLGEudW5pcXVlSUQpfSxpLmdldFN0cmluZz1mdW5jdGlvbihhKXtyZXR1cm4gYT09bnVsbCYmKGE9aS5sYXN0SUQpLCJPYmplY3QjIithfSxpLmlzUHJpbWl0aXZlPWZ1bmN0aW9uKGEpe3ZhciBzPXR5cGVvZiBhPiJ1Ij8idW5kZWZpbmVkIjpuKGEpO3JldHVybiBhPT1udWxsfHxzIT0ib2JqZWN0IiYmcyE9ImZ1bmN0aW9uIn0sdC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihtKXtpZihBcnJheS5pc0FycmF5KG0pKXtmb3IodmFyIGc9MCx5PUFycmF5KG0ubGVuZ3RoKTtnPG0ubGVuZ3RoO2crKyl5W2ddPW1bZ107cmV0dXJuIHl9ZWxzZSByZXR1cm4gQXJyYXkuZnJvbShtKX1vKG4sIl90b0NvbnN1bWFibGVBcnJheSIpO3ZhciBpPXIoMCksYT1yKDcpLHM9cigzKSxsPXIoMSksdT1yKDYpLGg9cig1KSxmPXIoMTcpLGQ9cigyOSk7ZnVuY3Rpb24gcChtKXtkLmNhbGwodGhpcyksdGhpcy5sYXlvdXRRdWFsaXR5PWkuUVVBTElUWSx0aGlzLmNyZWF0ZUJlbmRzQXNOZWVkZWQ9aS5ERUZBVUxUX0NSRUFURV9CRU5EU19BU19ORUVERUQsdGhpcy5pbmNyZW1lbnRhbD1pLkRFRkFVTFRfSU5DUkVNRU5UQUwsdGhpcy5hbmltYXRpb25PbkxheW91dD1pLkRFRkFVTFRfQU5JTUFUSU9OX09OX0xBWU9VVCx0aGlzLmFuaW1hdGlvbkR1cmluZ0xheW91dD1pLkRFRkFVTFRfQU5JTUFUSU9OX0RVUklOR19MQVlPVVQsdGhpcy5hbmltYXRpb25QZXJpb2Q9aS5ERUZBVUxUX0FOSU1BVElPTl9QRVJJT0QsdGhpcy51bmlmb3JtTGVhZk5vZGVTaXplcz1pLkRFRkFVTFRfVU5JRk9STV9MRUFGX05PREVfU0laRVMsdGhpcy5lZGdlVG9EdW1teU5vZGVzPW5ldyBNYXAsdGhpcy5ncmFwaE1hbmFnZXI9bmV3IGEodGhpcyksdGhpcy5pc0xheW91dEZpbmlzaGVkPSExLHRoaXMuaXNTdWJMYXlvdXQ9ITEsdGhpcy5pc1JlbW90ZVVzZT0hMSxtIT1udWxsJiYodGhpcy5pc1JlbW90ZVVzZT1tKX1vKHAsIkxheW91dCIpLHAuUkFORE9NX1NFRUQ9MSxwLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGQucHJvdG90eXBlKSxwLnByb3RvdHlwZS5nZXRHcmFwaE1hbmFnZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXJ9LHAucHJvdG90eXBlLmdldEFsbE5vZGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCl9LHAucHJvdG90eXBlLmdldEFsbEVkZ2VzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbEVkZ2VzKCl9LHAucHJvdG90eXBlLmdldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKCl9LHAucHJvdG90eXBlLm5ld0dyYXBoTWFuYWdlcj1mdW5jdGlvbigpe3ZhciBtPW5ldyBhKHRoaXMpO3JldHVybiB0aGlzLmdyYXBoTWFuYWdlcj1tLG19LHAucHJvdG90eXBlLm5ld0dyYXBoPWZ1bmN0aW9uKG0pe3JldHVybiBuZXcgdShudWxsLHRoaXMuZ3JhcGhNYW5hZ2VyLG0pfSxwLnByb3RvdHlwZS5uZXdOb2RlPWZ1bmN0aW9uKG0pe3JldHVybiBuZXcgcyh0aGlzLmdyYXBoTWFuYWdlcixtKX0scC5wcm90b3R5cGUubmV3RWRnZT1mdW5jdGlvbihtKXtyZXR1cm4gbmV3IGwobnVsbCxudWxsLG0pfSxwLnByb3RvdHlwZS5jaGVja0xheW91dFN1Y2Nlc3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpPT1udWxsfHx0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuZ2V0Tm9kZXMoKS5sZW5ndGg9PTB8fHRoaXMuZ3JhcGhNYW5hZ2VyLmluY2x1ZGVzSW52YWxpZEVkZ2UoKX0scC5wcm90b3R5cGUucnVuTGF5b3V0PWZ1bmN0aW9uKCl7dGhpcy5pc0xheW91dEZpbmlzaGVkPSExLHRoaXMudGlsaW5nUHJlTGF5b3V0JiZ0aGlzLnRpbGluZ1ByZUxheW91dCgpLHRoaXMuaW5pdFBhcmFtZXRlcnMoKTt2YXIgbTtyZXR1cm4gdGhpcy5jaGVja0xheW91dFN1Y2Nlc3MoKT9tPSExOm09dGhpcy5sYXlvdXQoKSxpLkFOSU1BVEU9PT0iZHVyaW5nIj8hMToobSYmKHRoaXMuaXNTdWJMYXlvdXR8fHRoaXMuZG9Qb3N0TGF5b3V0KCkpLHRoaXMudGlsaW5nUG9zdExheW91dCYmdGhpcy50aWxpbmdQb3N0TGF5b3V0KCksdGhpcy5pc0xheW91dEZpbmlzaGVkPSEwLG0pfSxwLnByb3RvdHlwZS5kb1Bvc3RMYXlvdXQ9ZnVuY3Rpb24oKXt0aGlzLmluY3JlbWVudGFsfHx0aGlzLnRyYW5zZm9ybSgpLHRoaXMudXBkYXRlKCl9LHAucHJvdG90eXBlLnVwZGF0ZTI9ZnVuY3Rpb24oKXtpZih0aGlzLmNyZWF0ZUJlbmRzQXNOZWVkZWQmJih0aGlzLmNyZWF0ZUJlbmRwb2ludHNGcm9tRHVtbXlOb2RlcygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsRWRnZXMoKSksIXRoaXMuaXNSZW1vdGVVc2Upe2Zvcih2YXIgbSxnPXRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbEVkZ2VzKCkseT0wO3k8Zy5sZW5ndGg7eSsrKW09Z1t5XTtmb3IodmFyIHYseD10aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuZ2V0Tm9kZXMoKSx5PTA7eTx4Lmxlbmd0aDt5Kyspdj14W3ldO3RoaXMudXBkYXRlKHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKSl9fSxwLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24obSl7aWYobT09bnVsbCl0aGlzLnVwZGF0ZTIoKTtlbHNlIGlmKG0gaW5zdGFuY2VvZiBzKXt2YXIgZz1tO2lmKGcuZ2V0Q2hpbGQoKSE9bnVsbClmb3IodmFyIHk9Zy5nZXRDaGlsZCgpLmdldE5vZGVzKCksdj0wO3Y8eS5sZW5ndGg7disrKXVwZGF0ZSh5W3ZdKTtpZihnLnZHcmFwaE9iamVjdCE9bnVsbCl7dmFyIHg9Zy52R3JhcGhPYmplY3Q7eC51cGRhdGUoZyl9fWVsc2UgaWYobSBpbnN0YW5jZW9mIGwpe3ZhciBiPW07aWYoYi52R3JhcGhPYmplY3QhPW51bGwpe3ZhciB3PWIudkdyYXBoT2JqZWN0O3cudXBkYXRlKGIpfX1lbHNlIGlmKG0gaW5zdGFuY2VvZiB1KXt2YXIgQz1tO2lmKEMudkdyYXBoT2JqZWN0IT1udWxsKXt2YXIgVD1DLnZHcmFwaE9iamVjdDtULnVwZGF0ZShDKX19fSxwLnByb3RvdHlwZS5pbml0UGFyYW1ldGVycz1mdW5jdGlvbigpe3RoaXMuaXNTdWJMYXlvdXR8fCh0aGlzLmxheW91dFF1YWxpdHk9aS5RVUFMSVRZLHRoaXMuYW5pbWF0aW9uRHVyaW5nTGF5b3V0PWkuREVGQVVMVF9BTklNQVRJT05fRFVSSU5HX0xBWU9VVCx0aGlzLmFuaW1hdGlvblBlcmlvZD1pLkRFRkFVTFRfQU5JTUFUSU9OX1BFUklPRCx0aGlzLmFuaW1hdGlvbk9uTGF5b3V0PWkuREVGQVVMVF9BTklNQVRJT05fT05fTEFZT1VULHRoaXMuaW5jcmVtZW50YWw9aS5ERUZBVUxUX0lOQ1JFTUVOVEFMLHRoaXMuY3JlYXRlQmVuZHNBc05lZWRlZD1pLkRFRkFVTFRfQ1JFQVRFX0JFTkRTX0FTX05FRURFRCx0aGlzLnVuaWZvcm1MZWFmTm9kZVNpemVzPWkuREVGQVVMVF9VTklGT1JNX0xFQUZfTk9ERV9TSVpFUyksdGhpcy5hbmltYXRpb25EdXJpbmdMYXlvdXQmJih0aGlzLmFuaW1hdGlvbk9uTGF5b3V0PSExKX0scC5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKG0pe2lmKG09PW51bGwpdGhpcy50cmFuc2Zvcm0obmV3IGgoMCwwKSk7ZWxzZXt2YXIgZz1uZXcgZix5PXRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS51cGRhdGVMZWZ0VG9wKCk7aWYoeSE9bnVsbCl7Zy5zZXRXb3JsZE9yZ1gobS54KSxnLnNldFdvcmxkT3JnWShtLnkpLGcuc2V0RGV2aWNlT3JnWCh5LngpLGcuc2V0RGV2aWNlT3JnWSh5LnkpO2Zvcih2YXIgdj10aGlzLmdldEFsbE5vZGVzKCkseCxiPTA7Yjx2Lmxlbmd0aDtiKyspeD12W2JdLHgudHJhbnNmb3JtKGcpfX19LHAucHJvdG90eXBlLnBvc2l0aW9uTm9kZXNSYW5kb21seT1mdW5jdGlvbihtKXtpZihtPT1udWxsKXRoaXMucG9zaXRpb25Ob2Rlc1JhbmRvbWx5KHRoaXMuZ2V0R3JhcGhNYW5hZ2VyKCkuZ2V0Um9vdCgpKSx0aGlzLmdldEdyYXBoTWFuYWdlcigpLmdldFJvb3QoKS51cGRhdGVCb3VuZHMoITApO2Vsc2UgZm9yKHZhciBnLHksdj1tLmdldE5vZGVzKCkseD0wO3g8di5sZW5ndGg7eCsrKWc9dlt4XSx5PWcuZ2V0Q2hpbGQoKSx5PT1udWxsfHx5LmdldE5vZGVzKCkubGVuZ3RoPT0wP2cuc2NhdHRlcigpOih0aGlzLnBvc2l0aW9uTm9kZXNSYW5kb21seSh5KSxnLnVwZGF0ZUJvdW5kcygpKX0scC5wcm90b3R5cGUuZ2V0RmxhdEZvcmVzdD1mdW5jdGlvbigpe2Zvcih2YXIgbT1bXSxnPSEwLHk9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmdldE5vZGVzKCksdj0hMCx4PTA7eDx5Lmxlbmd0aDt4KyspeVt4XS5nZXRDaGlsZCgpIT1udWxsJiYodj0hMSk7aWYoIXYpcmV0dXJuIG07dmFyIGI9bmV3IFNldCx3PVtdLEM9bmV3IE1hcCxUPVtdO2ZvcihUPVQuY29uY2F0KHkpO1QubGVuZ3RoPjAmJmc7KXtmb3Iody5wdXNoKFRbMF0pO3cubGVuZ3RoPjAmJmc7KXt2YXIgRT13WzBdO3cuc3BsaWNlKDAsMSksYi5hZGQoRSk7Zm9yKHZhciBBPUUuZ2V0RWRnZXMoKSx4PTA7eDxBLmxlbmd0aDt4Kyspe3ZhciBTPUFbeF0uZ2V0T3RoZXJFbmQoRSk7aWYoQy5nZXQoRSkhPVMpaWYoIWIuaGFzKFMpKXcucHVzaChTKSxDLnNldChTLEUpO2Vsc2V7Zz0hMTticmVha319fWlmKCFnKW09W107ZWxzZXt2YXIgXz1bXS5jb25jYXQobihiKSk7bS5wdXNoKF8pO2Zvcih2YXIgeD0wO3g8Xy5sZW5ndGg7eCsrKXt2YXIgST1fW3hdLEQ9VC5pbmRleE9mKEkpO0Q+LTEmJlQuc3BsaWNlKEQsMSl9Yj1uZXcgU2V0LEM9bmV3IE1hcH19cmV0dXJuIG19LHAucHJvdG90eXBlLmNyZWF0ZUR1bW15Tm9kZXNGb3JCZW5kcG9pbnRzPWZ1bmN0aW9uKG0pe2Zvcih2YXIgZz1bXSx5PW0uc291cmNlLHY9dGhpcy5ncmFwaE1hbmFnZXIuY2FsY0xvd2VzdENvbW1vbkFuY2VzdG9yKG0uc291cmNlLG0udGFyZ2V0KSx4PTA7eDxtLmJlbmRwb2ludHMubGVuZ3RoO3grKyl7dmFyIGI9dGhpcy5uZXdOb2RlKG51bGwpO2Iuc2V0UmVjdChuZXcgUG9pbnQoMCwwKSxuZXcgRGltZW5zaW9uKDEsMSkpLHYuYWRkKGIpO3ZhciB3PXRoaXMubmV3RWRnZShudWxsKTt0aGlzLmdyYXBoTWFuYWdlci5hZGQodyx5LGIpLGcuYWRkKGIpLHk9Yn12YXIgdz10aGlzLm5ld0VkZ2UobnVsbCk7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyLmFkZCh3LHksbS50YXJnZXQpLHRoaXMuZWRnZVRvRHVtbXlOb2Rlcy5zZXQobSxnKSxtLmlzSW50ZXJHcmFwaCgpP3RoaXMuZ3JhcGhNYW5hZ2VyLnJlbW92ZShtKTp2LnJlbW92ZShtKSxnfSxwLnByb3RvdHlwZS5jcmVhdGVCZW5kcG9pbnRzRnJvbUR1bW15Tm9kZXM9ZnVuY3Rpb24oKXt2YXIgbT1bXTttPW0uY29uY2F0KHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbEVkZ2VzKCkpLG09W10uY29uY2F0KG4odGhpcy5lZGdlVG9EdW1teU5vZGVzLmtleXMoKSkpLmNvbmNhdChtKTtmb3IodmFyIGc9MDtnPG0ubGVuZ3RoO2crKyl7dmFyIHk9bVtnXTtpZih5LmJlbmRwb2ludHMubGVuZ3RoPjApe2Zvcih2YXIgdj10aGlzLmVkZ2VUb0R1bW15Tm9kZXMuZ2V0KHkpLHg9MDt4PHYubGVuZ3RoO3grKyl7dmFyIGI9dlt4XSx3PW5ldyBoKGIuZ2V0Q2VudGVyWCgpLGIuZ2V0Q2VudGVyWSgpKSxDPXkuYmVuZHBvaW50cy5nZXQoeCk7Qy54PXcueCxDLnk9dy55LGIuZ2V0T3duZXIoKS5yZW1vdmUoYil9dGhpcy5ncmFwaE1hbmFnZXIuYWRkKHkseS5zb3VyY2UseS50YXJnZXQpfX19LHAudHJhbnNmb3JtPWZ1bmN0aW9uKG0sZyx5LHYpe2lmKHkhPW51bGwmJnYhPW51bGwpe3ZhciB4PWc7aWYobTw9NTApe3ZhciBiPWcveTt4LT0oZy1iKS81MCooNTAtbSl9ZWxzZXt2YXIgdz1nKnY7eCs9KHctZykvNTAqKG0tNTApfXJldHVybiB4fWVsc2V7dmFyIEMsVDtyZXR1cm4gbTw9NTA/KEM9OSpnLzUwMCxUPWcvMTApOihDPTkqZy81MCxUPS04KmcpLEMqbStUfX0scC5maW5kQ2VudGVyT2ZUcmVlPWZ1bmN0aW9uKG0pe3ZhciBnPVtdO2c9Zy5jb25jYXQobSk7dmFyIHk9W10sdj1uZXcgTWFwLHg9ITEsYj1udWxsOyhnLmxlbmd0aD09MXx8Zy5sZW5ndGg9PTIpJiYoeD0hMCxiPWdbMF0pO2Zvcih2YXIgdz0wO3c8Zy5sZW5ndGg7dysrKXt2YXIgQz1nW3ddLFQ9Qy5nZXROZWlnaGJvcnNMaXN0KCkuc2l6ZTt2LnNldChDLEMuZ2V0TmVpZ2hib3JzTGlzdCgpLnNpemUpLFQ9PTEmJnkucHVzaChDKX12YXIgRT1bXTtmb3IoRT1FLmNvbmNhdCh5KTsheDspe3ZhciBBPVtdO0E9QS5jb25jYXQoRSksRT1bXTtmb3IodmFyIHc9MDt3PGcubGVuZ3RoO3crKyl7dmFyIEM9Z1t3XSxTPWcuaW5kZXhPZihDKTtTPj0wJiZnLnNwbGljZShTLDEpO3ZhciBfPUMuZ2V0TmVpZ2hib3JzTGlzdCgpO18uZm9yRWFjaChmdW5jdGlvbihrKXtpZih5LmluZGV4T2Yoayk8MCl7dmFyIEw9di5nZXQoayksUj1MLTE7Uj09MSYmRS5wdXNoKGspLHYuc2V0KGssUil9fSl9eT15LmNvbmNhdChFKSwoZy5sZW5ndGg9PTF8fGcubGVuZ3RoPT0yKSYmKHg9ITAsYj1nWzBdKX1yZXR1cm4gYn0scC5wcm90b3R5cGUuc2V0R3JhcGhNYW5hZ2VyPWZ1bmN0aW9uKG0pe3RoaXMuZ3JhcGhNYW5hZ2VyPW19LHQuZXhwb3J0cz1wfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXt9byhuLCJSYW5kb21TZWVkIiksbi5zZWVkPTEsbi54PTAsbi5uZXh0RG91YmxlPWZ1bmN0aW9uKCl7cmV0dXJuIG4ueD1NYXRoLnNpbihuLnNlZWQrKykqMWU0LG4ueC1NYXRoLmZsb29yKG4ueCl9LHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoNSk7ZnVuY3Rpb24gaShhLHMpe3RoaXMubHdvcmxkT3JnWD0wLHRoaXMubHdvcmxkT3JnWT0wLHRoaXMubGRldmljZU9yZ1g9MCx0aGlzLmxkZXZpY2VPcmdZPTAsdGhpcy5sd29ybGRFeHRYPTEsdGhpcy5sd29ybGRFeHRZPTEsdGhpcy5sZGV2aWNlRXh0WD0xLHRoaXMubGRldmljZUV4dFk9MX1vKGksIlRyYW5zZm9ybSIpLGkucHJvdG90eXBlLmdldFdvcmxkT3JnWD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmx3b3JsZE9yZ1h9LGkucHJvdG90eXBlLnNldFdvcmxkT3JnWD1mdW5jdGlvbihhKXt0aGlzLmx3b3JsZE9yZ1g9YX0saS5wcm90b3R5cGUuZ2V0V29ybGRPcmdZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubHdvcmxkT3JnWX0saS5wcm90b3R5cGUuc2V0V29ybGRPcmdZPWZ1bmN0aW9uKGEpe3RoaXMubHdvcmxkT3JnWT1hfSxpLnByb3RvdHlwZS5nZXRXb3JsZEV4dFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sd29ybGRFeHRYfSxpLnByb3RvdHlwZS5zZXRXb3JsZEV4dFg9ZnVuY3Rpb24oYSl7dGhpcy5sd29ybGRFeHRYPWF9LGkucHJvdG90eXBlLmdldFdvcmxkRXh0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmx3b3JsZEV4dFl9LGkucHJvdG90eXBlLnNldFdvcmxkRXh0WT1mdW5jdGlvbihhKXt0aGlzLmx3b3JsZEV4dFk9YX0saS5wcm90b3R5cGUuZ2V0RGV2aWNlT3JnWD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxkZXZpY2VPcmdYfSxpLnByb3RvdHlwZS5zZXREZXZpY2VPcmdYPWZ1bmN0aW9uKGEpe3RoaXMubGRldmljZU9yZ1g9YX0saS5wcm90b3R5cGUuZ2V0RGV2aWNlT3JnWT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxkZXZpY2VPcmdZfSxpLnByb3RvdHlwZS5zZXREZXZpY2VPcmdZPWZ1bmN0aW9uKGEpe3RoaXMubGRldmljZU9yZ1k9YX0saS5wcm90b3R5cGUuZ2V0RGV2aWNlRXh0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxkZXZpY2VFeHRYfSxpLnByb3RvdHlwZS5zZXREZXZpY2VFeHRYPWZ1bmN0aW9uKGEpe3RoaXMubGRldmljZUV4dFg9YX0saS5wcm90b3R5cGUuZ2V0RGV2aWNlRXh0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxkZXZpY2VFeHRZfSxpLnByb3RvdHlwZS5zZXREZXZpY2VFeHRZPWZ1bmN0aW9uKGEpe3RoaXMubGRldmljZUV4dFk9YX0saS5wcm90b3R5cGUudHJhbnNmb3JtWD1mdW5jdGlvbihhKXt2YXIgcz0wLGw9dGhpcy5sd29ybGRFeHRYO3JldHVybiBsIT0wJiYocz10aGlzLmxkZXZpY2VPcmdYKyhhLXRoaXMubHdvcmxkT3JnWCkqdGhpcy5sZGV2aWNlRXh0WC9sKSxzfSxpLnByb3RvdHlwZS50cmFuc2Zvcm1ZPWZ1bmN0aW9uKGEpe3ZhciBzPTAsbD10aGlzLmx3b3JsZEV4dFk7cmV0dXJuIGwhPTAmJihzPXRoaXMubGRldmljZU9yZ1krKGEtdGhpcy5sd29ybGRPcmdZKSp0aGlzLmxkZXZpY2VFeHRZL2wpLHN9LGkucHJvdG90eXBlLmludmVyc2VUcmFuc2Zvcm1YPWZ1bmN0aW9uKGEpe3ZhciBzPTAsbD10aGlzLmxkZXZpY2VFeHRYO3JldHVybiBsIT0wJiYocz10aGlzLmx3b3JsZE9yZ1grKGEtdGhpcy5sZGV2aWNlT3JnWCkqdGhpcy5sd29ybGRFeHRYL2wpLHN9LGkucHJvdG90eXBlLmludmVyc2VUcmFuc2Zvcm1ZPWZ1bmN0aW9uKGEpe3ZhciBzPTAsbD10aGlzLmxkZXZpY2VFeHRZO3JldHVybiBsIT0wJiYocz10aGlzLmx3b3JsZE9yZ1krKGEtdGhpcy5sZGV2aWNlT3JnWSkqdGhpcy5sd29ybGRFeHRZL2wpLHN9LGkucHJvdG90eXBlLmludmVyc2VUcmFuc2Zvcm1Qb2ludD1mdW5jdGlvbihhKXt2YXIgcz1uZXcgbih0aGlzLmludmVyc2VUcmFuc2Zvcm1YKGEueCksdGhpcy5pbnZlcnNlVHJhbnNmb3JtWShhLnkpKTtyZXR1cm4gc30sdC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihkKXtpZihBcnJheS5pc0FycmF5KGQpKXtmb3IodmFyIHA9MCxtPUFycmF5KGQubGVuZ3RoKTtwPGQubGVuZ3RoO3ArKyltW3BdPWRbcF07cmV0dXJuIG19ZWxzZSByZXR1cm4gQXJyYXkuZnJvbShkKX1vKG4sIl90b0NvbnN1bWFibGVBcnJheSIpO3ZhciBpPXIoMTUpLGE9cig0KSxzPXIoMCksbD1yKDgpLHU9cig5KTtmdW5jdGlvbiBoKCl7aS5jYWxsKHRoaXMpLHRoaXMudXNlU21hcnRJZGVhbEVkZ2VMZW5ndGhDYWxjdWxhdGlvbj1hLkRFRkFVTFRfVVNFX1NNQVJUX0lERUFMX0VER0VfTEVOR1RIX0NBTENVTEFUSU9OLHRoaXMuZ3Jhdml0eUNvbnN0YW50PWEuREVGQVVMVF9HUkFWSVRZX1NUUkVOR1RILHRoaXMuY29tcG91bmRHcmF2aXR5Q29uc3RhbnQ9YS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfU1RSRU5HVEgsdGhpcy5ncmF2aXR5UmFuZ2VGYWN0b3I9YS5ERUZBVUxUX0dSQVZJVFlfUkFOR0VfRkFDVE9SLHRoaXMuY29tcG91bmRHcmF2aXR5UmFuZ2VGYWN0b3I9YS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfUkFOR0VfRkFDVE9SLHRoaXMuZGlzcGxhY2VtZW50VGhyZXNob2xkUGVyTm9kZT0zKmEuREVGQVVMVF9FREdFX0xFTkdUSC8xMDAsdGhpcy5jb29saW5nRmFjdG9yPWEuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTCx0aGlzLmluaXRpYWxDb29saW5nRmFjdG9yPWEuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTCx0aGlzLnRvdGFsRGlzcGxhY2VtZW50PTAsdGhpcy5vbGRUb3RhbERpc3BsYWNlbWVudD0wLHRoaXMubWF4SXRlcmF0aW9ucz1hLk1BWF9JVEVSQVRJT05TfW8oaCwiRkRMYXlvdXQiKSxoLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKTtmb3IodmFyIGYgaW4gaSloW2ZdPWlbZl07aC5wcm90b3R5cGUuaW5pdFBhcmFtZXRlcnM9ZnVuY3Rpb24oKXtpLnByb3RvdHlwZS5pbml0UGFyYW1ldGVycy5jYWxsKHRoaXMsYXJndW1lbnRzKSx0aGlzLnRvdGFsSXRlcmF0aW9ucz0wLHRoaXMubm90QW5pbWF0ZWRJdGVyYXRpb25zPTAsdGhpcy51c2VGUkdyaWRWYXJpYW50PWEuREVGQVVMVF9VU0VfU01BUlRfUkVQVUxTSU9OX1JBTkdFX0NBTENVTEFUSU9OLHRoaXMuZ3JpZD1bXX0saC5wcm90b3R5cGUuY2FsY0lkZWFsRWRnZUxlbmd0aHM9ZnVuY3Rpb24oKXtmb3IodmFyIGQscCxtLGcseSx2LHgsYj10aGlzLmdldEdyYXBoTWFuYWdlcigpLmdldEFsbEVkZ2VzKCksdz0wO3c8Yi5sZW5ndGg7dysrKWQ9Ylt3XSxwPWQuaWRlYWxMZW5ndGgsZC5pc0ludGVyR3JhcGgmJihnPWQuZ2V0U291cmNlKCkseT1kLmdldFRhcmdldCgpLHY9ZC5nZXRTb3VyY2VJbkxjYSgpLmdldEVzdGltYXRlZFNpemUoKSx4PWQuZ2V0VGFyZ2V0SW5MY2EoKS5nZXRFc3RpbWF0ZWRTaXplKCksdGhpcy51c2VTbWFydElkZWFsRWRnZUxlbmd0aENhbGN1bGF0aW9uJiYoZC5pZGVhbExlbmd0aCs9dit4LTIqcy5TSU1QTEVfTk9ERV9TSVpFKSxtPWQuZ2V0TGNhKCkuZ2V0SW5jbHVzaW9uVHJlZURlcHRoKCksZC5pZGVhbExlbmd0aCs9cCphLlBFUl9MRVZFTF9JREVBTF9FREdFX0xFTkdUSF9GQUNUT1IqKGcuZ2V0SW5jbHVzaW9uVHJlZURlcHRoKCkreS5nZXRJbmNsdXNpb25UcmVlRGVwdGgoKS0yKm0pKX0saC5wcm90b3R5cGUuaW5pdFNwcmluZ0VtYmVkZGVyPWZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5nZXRBbGxOb2RlcygpLmxlbmd0aDt0aGlzLmluY3JlbWVudGFsPyhkPmEuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUJiYodGhpcy5jb29saW5nRmFjdG9yPU1hdGgubWF4KHRoaXMuY29vbGluZ0ZhY3RvciphLkNPT0xJTkdfQURBUFRBVElPTl9GQUNUT1IsdGhpcy5jb29saW5nRmFjdG9yLShkLWEuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUKS8oYS5BREFQVEFUSU9OX1VQUEVSX05PREVfTElNSVQtYS5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQpKnRoaXMuY29vbGluZ0ZhY3RvciooMS1hLkNPT0xJTkdfQURBUFRBVElPTl9GQUNUT1IpKSksdGhpcy5tYXhOb2RlRGlzcGxhY2VtZW50PWEuTUFYX05PREVfRElTUExBQ0VNRU5UX0lOQ1JFTUVOVEFMKTooZD5hLkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVD90aGlzLmNvb2xpbmdGYWN0b3I9TWF0aC5tYXgoYS5DT09MSU5HX0FEQVBUQVRJT05fRkFDVE9SLDEtKGQtYS5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQpLyhhLkFEQVBUQVRJT05fVVBQRVJfTk9ERV9MSU1JVC1hLkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVCkqKDEtYS5DT09MSU5HX0FEQVBUQVRJT05fRkFDVE9SKSk6dGhpcy5jb29saW5nRmFjdG9yPTEsdGhpcy5pbml0aWFsQ29vbGluZ0ZhY3Rvcj10aGlzLmNvb2xpbmdGYWN0b3IsdGhpcy5tYXhOb2RlRGlzcGxhY2VtZW50PWEuTUFYX05PREVfRElTUExBQ0VNRU5UKSx0aGlzLm1heEl0ZXJhdGlvbnM9TWF0aC5tYXgodGhpcy5nZXRBbGxOb2RlcygpLmxlbmd0aCo1LHRoaXMubWF4SXRlcmF0aW9ucyksdGhpcy5kaXNwbGFjZW1lbnRUaHJlc2hvbGRQZXJOb2RlPTMqYS5ERUZBVUxUX0VER0VfTEVOR1RILzEwMCx0aGlzLnRvdGFsRGlzcGxhY2VtZW50VGhyZXNob2xkPXRoaXMuZGlzcGxhY2VtZW50VGhyZXNob2xkUGVyTm9kZSp0aGlzLmdldEFsbE5vZGVzKCkubGVuZ3RoLHRoaXMucmVwdWxzaW9uUmFuZ2U9dGhpcy5jYWxjUmVwdWxzaW9uUmFuZ2UoKX0saC5wcm90b3R5cGUuY2FsY1NwcmluZ0ZvcmNlcz1mdW5jdGlvbigpe2Zvcih2YXIgZD10aGlzLmdldEFsbEVkZ2VzKCkscCxtPTA7bTxkLmxlbmd0aDttKyspcD1kW21dLHRoaXMuY2FsY1NwcmluZ0ZvcmNlKHAscC5pZGVhbExlbmd0aCl9LGgucHJvdG90eXBlLmNhbGNSZXB1bHNpb25Gb3JjZXM9ZnVuY3Rpb24oKXt2YXIgZD1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06ITAscD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITEsbSxnLHksdix4PXRoaXMuZ2V0QWxsTm9kZXMoKSxiO2lmKHRoaXMudXNlRlJHcmlkVmFyaWFudClmb3IodGhpcy50b3RhbEl0ZXJhdGlvbnMlYS5HUklEX0NBTENVTEFUSU9OX0NIRUNLX1BFUklPRD09MSYmZCYmdGhpcy51cGRhdGVHcmlkKCksYj1uZXcgU2V0LG09MDttPHgubGVuZ3RoO20rKyl5PXhbbV0sdGhpcy5jYWxjdWxhdGVSZXB1bHNpb25Gb3JjZU9mQU5vZGUoeSxiLGQscCksYi5hZGQoeSk7ZWxzZSBmb3IobT0wO208eC5sZW5ndGg7bSsrKWZvcih5PXhbbV0sZz1tKzE7Zzx4Lmxlbmd0aDtnKyspdj14W2ddLHkuZ2V0T3duZXIoKT09di5nZXRPd25lcigpJiZ0aGlzLmNhbGNSZXB1bHNpb25Gb3JjZSh5LHYpfSxoLnByb3RvdHlwZS5jYWxjR3Jhdml0YXRpb25hbEZvcmNlcz1mdW5jdGlvbigpe2Zvcih2YXIgZCxwPXRoaXMuZ2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oKSxtPTA7bTxwLmxlbmd0aDttKyspZD1wW21dLHRoaXMuY2FsY0dyYXZpdGF0aW9uYWxGb3JjZShkKX0saC5wcm90b3R5cGUubW92ZU5vZGVzPWZ1bmN0aW9uKCl7Zm9yKHZhciBkPXRoaXMuZ2V0QWxsTm9kZXMoKSxwLG09MDttPGQubGVuZ3RoO20rKylwPWRbbV0scC5tb3ZlKCl9LGgucHJvdG90eXBlLmNhbGNTcHJpbmdGb3JjZT1mdW5jdGlvbihkLHApe3ZhciBtPWQuZ2V0U291cmNlKCksZz1kLmdldFRhcmdldCgpLHksdix4LGI7aWYodGhpcy51bmlmb3JtTGVhZk5vZGVTaXplcyYmbS5nZXRDaGlsZCgpPT1udWxsJiZnLmdldENoaWxkKCk9PW51bGwpZC51cGRhdGVMZW5ndGhTaW1wbGUoKTtlbHNlIGlmKGQudXBkYXRlTGVuZ3RoKCksZC5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXQpcmV0dXJuO3k9ZC5nZXRMZW5ndGgoKSx5IT0wJiYodj1kLmVkZ2VFbGFzdGljaXR5Kih5LXApLHg9diooZC5sZW5ndGhYL3kpLGI9diooZC5sZW5ndGhZL3kpLG0uc3ByaW5nRm9yY2VYKz14LG0uc3ByaW5nRm9yY2VZKz1iLGcuc3ByaW5nRm9yY2VYLT14LGcuc3ByaW5nRm9yY2VZLT1iKX0saC5wcm90b3R5cGUuY2FsY1JlcHVsc2lvbkZvcmNlPWZ1bmN0aW9uKGQscCl7dmFyIG09ZC5nZXRSZWN0KCksZz1wLmdldFJlY3QoKSx5PW5ldyBBcnJheSgyKSx2PW5ldyBBcnJheSg0KSx4LGIsdyxDLFQsRSxBO2lmKG0uaW50ZXJzZWN0cyhnKSl7bC5jYWxjU2VwYXJhdGlvbkFtb3VudChtLGcseSxhLkRFRkFVTFRfRURHRV9MRU5HVEgvMiksRT0yKnlbMF0sQT0yKnlbMV07dmFyIFM9ZC5ub09mQ2hpbGRyZW4qcC5ub09mQ2hpbGRyZW4vKGQubm9PZkNoaWxkcmVuK3Aubm9PZkNoaWxkcmVuKTtkLnJlcHVsc2lvbkZvcmNlWC09UypFLGQucmVwdWxzaW9uRm9yY2VZLT1TKkEscC5yZXB1bHNpb25Gb3JjZVgrPVMqRSxwLnJlcHVsc2lvbkZvcmNlWSs9UypBfWVsc2UgdGhpcy51bmlmb3JtTGVhZk5vZGVTaXplcyYmZC5nZXRDaGlsZCgpPT1udWxsJiZwLmdldENoaWxkKCk9PW51bGw/KHg9Zy5nZXRDZW50ZXJYKCktbS5nZXRDZW50ZXJYKCksYj1nLmdldENlbnRlclkoKS1tLmdldENlbnRlclkoKSk6KGwuZ2V0SW50ZXJzZWN0aW9uKG0sZyx2KSx4PXZbMl0tdlswXSxiPXZbM10tdlsxXSksTWF0aC5hYnMoeCk8YS5NSU5fUkVQVUxTSU9OX0RJU1QmJih4PXUuc2lnbih4KSphLk1JTl9SRVBVTFNJT05fRElTVCksTWF0aC5hYnMoYik8YS5NSU5fUkVQVUxTSU9OX0RJU1QmJihiPXUuc2lnbihiKSphLk1JTl9SRVBVTFNJT05fRElTVCksdz14KngrYipiLEM9TWF0aC5zcXJ0KHcpLFQ9KGQubm9kZVJlcHVsc2lvbi8yK3Aubm9kZVJlcHVsc2lvbi8yKSpkLm5vT2ZDaGlsZHJlbipwLm5vT2ZDaGlsZHJlbi93LEU9VCp4L0MsQT1UKmIvQyxkLnJlcHVsc2lvbkZvcmNlWC09RSxkLnJlcHVsc2lvbkZvcmNlWS09QSxwLnJlcHVsc2lvbkZvcmNlWCs9RSxwLnJlcHVsc2lvbkZvcmNlWSs9QX0saC5wcm90b3R5cGUuY2FsY0dyYXZpdGF0aW9uYWxGb3JjZT1mdW5jdGlvbihkKXt2YXIgcCxtLGcseSx2LHgsYix3O3A9ZC5nZXRPd25lcigpLG09KHAuZ2V0UmlnaHQoKStwLmdldExlZnQoKSkvMixnPShwLmdldFRvcCgpK3AuZ2V0Qm90dG9tKCkpLzIseT1kLmdldENlbnRlclgoKS1tLHY9ZC5nZXRDZW50ZXJZKCktZyx4PU1hdGguYWJzKHkpK2QuZ2V0V2lkdGgoKS8yLGI9TWF0aC5hYnModikrZC5nZXRIZWlnaHQoKS8yLGQuZ2V0T3duZXIoKT09dGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpPyh3PXAuZ2V0RXN0aW1hdGVkU2l6ZSgpKnRoaXMuZ3Jhdml0eVJhbmdlRmFjdG9yLCh4Pnd8fGI+dykmJihkLmdyYXZpdGF0aW9uRm9yY2VYPS10aGlzLmdyYXZpdHlDb25zdGFudCp5LGQuZ3Jhdml0YXRpb25Gb3JjZVk9LXRoaXMuZ3Jhdml0eUNvbnN0YW50KnYpKToodz1wLmdldEVzdGltYXRlZFNpemUoKSp0aGlzLmNvbXBvdW5kR3Jhdml0eVJhbmdlRmFjdG9yLCh4Pnd8fGI+dykmJihkLmdyYXZpdGF0aW9uRm9yY2VYPS10aGlzLmdyYXZpdHlDb25zdGFudCp5KnRoaXMuY29tcG91bmRHcmF2aXR5Q29uc3RhbnQsZC5ncmF2aXRhdGlvbkZvcmNlWT0tdGhpcy5ncmF2aXR5Q29uc3RhbnQqdip0aGlzLmNvbXBvdW5kR3Jhdml0eUNvbnN0YW50KSl9LGgucHJvdG90eXBlLmlzQ29udmVyZ2VkPWZ1bmN0aW9uKCl7dmFyIGQscD0hMTtyZXR1cm4gdGhpcy50b3RhbEl0ZXJhdGlvbnM+dGhpcy5tYXhJdGVyYXRpb25zLzMmJihwPU1hdGguYWJzKHRoaXMudG90YWxEaXNwbGFjZW1lbnQtdGhpcy5vbGRUb3RhbERpc3BsYWNlbWVudCk8MiksZD10aGlzLnRvdGFsRGlzcGxhY2VtZW50PHRoaXMudG90YWxEaXNwbGFjZW1lbnRUaHJlc2hvbGQsdGhpcy5vbGRUb3RhbERpc3BsYWNlbWVudD10aGlzLnRvdGFsRGlzcGxhY2VtZW50LGR8fHB9LGgucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24oKXt0aGlzLmFuaW1hdGlvbkR1cmluZ0xheW91dCYmIXRoaXMuaXNTdWJMYXlvdXQmJih0aGlzLm5vdEFuaW1hdGVkSXRlcmF0aW9ucz09dGhpcy5hbmltYXRpb25QZXJpb2Q/KHRoaXMudXBkYXRlKCksdGhpcy5ub3RBbmltYXRlZEl0ZXJhdGlvbnM9MCk6dGhpcy5ub3RBbmltYXRlZEl0ZXJhdGlvbnMrKyl9LGgucHJvdG90eXBlLmNhbGNOb09mQ2hpbGRyZW5Gb3JBbGxOb2Rlcz1mdW5jdGlvbigpe2Zvcih2YXIgZCxwPXRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCksbT0wO208cC5sZW5ndGg7bSsrKWQ9cFttXSxkLm5vT2ZDaGlsZHJlbj1kLmdldE5vT2ZDaGlsZHJlbigpfSxoLnByb3RvdHlwZS5jYWxjR3JpZD1mdW5jdGlvbihkKXt2YXIgcD0wLG09MDtwPXBhcnNlSW50KE1hdGguY2VpbCgoZC5nZXRSaWdodCgpLWQuZ2V0TGVmdCgpKS90aGlzLnJlcHVsc2lvblJhbmdlKSksbT1wYXJzZUludChNYXRoLmNlaWwoKGQuZ2V0Qm90dG9tKCktZC5nZXRUb3AoKSkvdGhpcy5yZXB1bHNpb25SYW5nZSkpO2Zvcih2YXIgZz1uZXcgQXJyYXkocCkseT0wO3k8cDt5KyspZ1t5XT1uZXcgQXJyYXkobSk7Zm9yKHZhciB5PTA7eTxwO3krKylmb3IodmFyIHY9MDt2PG07disrKWdbeV1bdl09bmV3IEFycmF5O3JldHVybiBnfSxoLnByb3RvdHlwZS5hZGROb2RlVG9HcmlkPWZ1bmN0aW9uKGQscCxtKXt2YXIgZz0wLHk9MCx2PTAseD0wO2c9cGFyc2VJbnQoTWF0aC5mbG9vcigoZC5nZXRSZWN0KCkueC1wKS90aGlzLnJlcHVsc2lvblJhbmdlKSkseT1wYXJzZUludChNYXRoLmZsb29yKChkLmdldFJlY3QoKS53aWR0aCtkLmdldFJlY3QoKS54LXApL3RoaXMucmVwdWxzaW9uUmFuZ2UpKSx2PXBhcnNlSW50KE1hdGguZmxvb3IoKGQuZ2V0UmVjdCgpLnktbSkvdGhpcy5yZXB1bHNpb25SYW5nZSkpLHg9cGFyc2VJbnQoTWF0aC5mbG9vcigoZC5nZXRSZWN0KCkuaGVpZ2h0K2QuZ2V0UmVjdCgpLnktbSkvdGhpcy5yZXB1bHNpb25SYW5nZSkpO2Zvcih2YXIgYj1nO2I8PXk7YisrKWZvcih2YXIgdz12O3c8PXg7dysrKXRoaXMuZ3JpZFtiXVt3XS5wdXNoKGQpLGQuc2V0R3JpZENvb3JkaW5hdGVzKGcseSx2LHgpfSxoLnByb3RvdHlwZS51cGRhdGVHcmlkPWZ1bmN0aW9uKCl7dmFyIGQscCxtPXRoaXMuZ2V0QWxsTm9kZXMoKTtmb3IodGhpcy5ncmlkPXRoaXMuY2FsY0dyaWQodGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpKSxkPTA7ZDxtLmxlbmd0aDtkKyspcD1tW2RdLHRoaXMuYWRkTm9kZVRvR3JpZChwLHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXRMZWZ0KCksdGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmdldFRvcCgpKX0saC5wcm90b3R5cGUuY2FsY3VsYXRlUmVwdWxzaW9uRm9yY2VPZkFOb2RlPWZ1bmN0aW9uKGQscCxtLGcpe2lmKHRoaXMudG90YWxJdGVyYXRpb25zJWEuR1JJRF9DQUxDVUxBVElPTl9DSEVDS19QRVJJT0Q9PTEmJm18fGcpe3ZhciB5PW5ldyBTZXQ7ZC5zdXJyb3VuZGluZz1uZXcgQXJyYXk7Zm9yKHZhciB2LHg9dGhpcy5ncmlkLGI9ZC5zdGFydFgtMTtiPGQuZmluaXNoWCsyO2IrKylmb3IodmFyIHc9ZC5zdGFydFktMTt3PGQuZmluaXNoWSsyO3crKylpZighKGI8MHx8dzwwfHxiPj14Lmxlbmd0aHx8dz49eFswXS5sZW5ndGgpKXtmb3IodmFyIEM9MDtDPHhbYl1bd10ubGVuZ3RoO0MrKylpZih2PXhbYl1bd11bQ10sIShkLmdldE93bmVyKCkhPXYuZ2V0T3duZXIoKXx8ZD09dikmJiFwLmhhcyh2KSYmIXkuaGFzKHYpKXt2YXIgVD1NYXRoLmFicyhkLmdldENlbnRlclgoKS12LmdldENlbnRlclgoKSktKGQuZ2V0V2lkdGgoKS8yK3YuZ2V0V2lkdGgoKS8yKSxFPU1hdGguYWJzKGQuZ2V0Q2VudGVyWSgpLXYuZ2V0Q2VudGVyWSgpKS0oZC5nZXRIZWlnaHQoKS8yK3YuZ2V0SGVpZ2h0KCkvMik7VDw9dGhpcy5yZXB1bHNpb25SYW5nZSYmRTw9dGhpcy5yZXB1bHNpb25SYW5nZSYmeS5hZGQodil9fWQuc3Vycm91bmRpbmc9W10uY29uY2F0KG4oeSkpfWZvcihiPTA7YjxkLnN1cnJvdW5kaW5nLmxlbmd0aDtiKyspdGhpcy5jYWxjUmVwdWxzaW9uRm9yY2UoZCxkLnN1cnJvdW5kaW5nW2JdKX0saC5wcm90b3R5cGUuY2FsY1JlcHVsc2lvblJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LHQuZXhwb3J0cz1ofSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMSksaT1yKDQpO2Z1bmN0aW9uIGEobCx1LGgpe24uY2FsbCh0aGlzLGwsdSxoKSx0aGlzLmlkZWFsTGVuZ3RoPWkuREVGQVVMVF9FREdFX0xFTkdUSCx0aGlzLmVkZ2VFbGFzdGljaXR5PWkuREVGQVVMVF9TUFJJTkdfU1RSRU5HVEh9byhhLCJGRExheW91dEVkZ2UiKSxhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKTtmb3IodmFyIHMgaW4gbilhW3NdPW5bc107dC5leHBvcnRzPWF9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49cigzKSxpPXIoNCk7ZnVuY3Rpb24gYShsLHUsaCxmKXtuLmNhbGwodGhpcyxsLHUsaCxmKSx0aGlzLm5vZGVSZXB1bHNpb249aS5ERUZBVUxUX1JFUFVMU0lPTl9TVFJFTkdUSCx0aGlzLnNwcmluZ0ZvcmNlWD0wLHRoaXMuc3ByaW5nRm9yY2VZPTAsdGhpcy5yZXB1bHNpb25Gb3JjZVg9MCx0aGlzLnJlcHVsc2lvbkZvcmNlWT0wLHRoaXMuZ3Jhdml0YXRpb25Gb3JjZVg9MCx0aGlzLmdyYXZpdGF0aW9uRm9yY2VZPTAsdGhpcy5kaXNwbGFjZW1lbnRYPTAsdGhpcy5kaXNwbGFjZW1lbnRZPTAsdGhpcy5zdGFydFg9MCx0aGlzLmZpbmlzaFg9MCx0aGlzLnN0YXJ0WT0wLHRoaXMuZmluaXNoWT0wLHRoaXMuc3Vycm91bmRpbmc9W119byhhLCJGRExheW91dE5vZGUiKSxhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKTtmb3IodmFyIHMgaW4gbilhW3NdPW5bc107YS5wcm90b3R5cGUuc2V0R3JpZENvb3JkaW5hdGVzPWZ1bmN0aW9uKGwsdSxoLGYpe3RoaXMuc3RhcnRYPWwsdGhpcy5maW5pc2hYPXUsdGhpcy5zdGFydFk9aCx0aGlzLmZpbmlzaFk9Zn0sdC5leHBvcnRzPWF9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihpLGEpe3RoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLGkhPT1udWxsJiZhIT09bnVsbCYmKHRoaXMuaGVpZ2h0PWEsdGhpcy53aWR0aD1pKX1vKG4sIkRpbWVuc2lvbkQiKSxuLnByb3RvdHlwZS5nZXRXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLndpZHRofSxuLnByb3RvdHlwZS5zZXRXaWR0aD1mdW5jdGlvbihpKXt0aGlzLndpZHRoPWl9LG4ucHJvdG90eXBlLmdldEhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhlaWdodH0sbi5wcm90b3R5cGUuc2V0SGVpZ2h0PWZ1bmN0aW9uKGkpe3RoaXMuaGVpZ2h0PWl9LHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTQpO2Z1bmN0aW9uIGkoKXt0aGlzLm1hcD17fSx0aGlzLmtleXM9W119byhpLCJIYXNoTWFwIiksaS5wcm90b3R5cGUucHV0PWZ1bmN0aW9uKGEscyl7dmFyIGw9bi5jcmVhdGVJRChhKTt0aGlzLmNvbnRhaW5zKGwpfHwodGhpcy5tYXBbbF09cyx0aGlzLmtleXMucHVzaChhKSl9LGkucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKGEpe3ZhciBzPW4uY3JlYXRlSUQoYSk7cmV0dXJuIHRoaXMubWFwW2FdIT1udWxsfSxpLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSl7dmFyIHM9bi5jcmVhdGVJRChhKTtyZXR1cm4gdGhpcy5tYXBbc119LGkucHJvdG90eXBlLmtleVNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmtleXN9LHQuZXhwb3J0cz1pfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTQpO2Z1bmN0aW9uIGkoKXt0aGlzLnNldD17fX1vKGksIkhhc2hTZXQiKSxpLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYSl7dmFyIHM9bi5jcmVhdGVJRChhKTt0aGlzLmNvbnRhaW5zKHMpfHwodGhpcy5zZXRbc109YSl9LGkucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihhKXtkZWxldGUgdGhpcy5zZXRbbi5jcmVhdGVJRChhKV19LGkucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5zZXQ9e319LGkucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnNldFtuLmNyZWF0ZUlEKGEpXT09YX0saS5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemUoKT09PTB9LGkucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5zZXQpLmxlbmd0aH0saS5wcm90b3R5cGUuYWRkQWxsVG89ZnVuY3Rpb24oYSl7Zm9yKHZhciBzPU9iamVjdC5rZXlzKHRoaXMuc2V0KSxsPXMubGVuZ3RoLHU9MDt1PGw7dSsrKWEucHVzaCh0aGlzLnNldFtzW3VdXSl9LGkucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5zZXQpLmxlbmd0aH0saS5wcm90b3R5cGUuYWRkQWxsPWZ1bmN0aW9uKGEpe2Zvcih2YXIgcz1hLmxlbmd0aCxsPTA7bDxzO2wrKyl7dmFyIHU9YVtsXTt0aGlzLmFkZCh1KX19LHQuZXhwb3J0cz1pfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXt9byhuLCJNYXRyaXgiKSxuLm11bHRNYXQ9ZnVuY3Rpb24oaSxhKXtmb3IodmFyIHM9W10sbD0wO2w8aS5sZW5ndGg7bCsrKXtzW2xdPVtdO2Zvcih2YXIgdT0wO3U8YVswXS5sZW5ndGg7dSsrKXtzW2xdW3VdPTA7Zm9yKHZhciBoPTA7aDxpWzBdLmxlbmd0aDtoKyspc1tsXVt1XSs9aVtsXVtoXSphW2hdW3VdfX1yZXR1cm4gc30sbi50cmFuc3Bvc2U9ZnVuY3Rpb24oaSl7Zm9yKHZhciBhPVtdLHM9MDtzPGlbMF0ubGVuZ3RoO3MrKyl7YVtzXT1bXTtmb3IodmFyIGw9MDtsPGkubGVuZ3RoO2wrKylhW3NdW2xdPWlbbF1bc119cmV0dXJuIGF9LG4ubXVsdENvbnM9ZnVuY3Rpb24oaSxhKXtmb3IodmFyIHM9W10sbD0wO2w8aS5sZW5ndGg7bCsrKXNbbF09aVtsXSphO3JldHVybiBzfSxuLm1pbnVzT3A9ZnVuY3Rpb24oaSxhKXtmb3IodmFyIHM9W10sbD0wO2w8aS5sZW5ndGg7bCsrKXNbbF09aVtsXS1hW2xdO3JldHVybiBzfSxuLmRvdFByb2R1Y3Q9ZnVuY3Rpb24oaSxhKXtmb3IodmFyIHM9MCxsPTA7bDxpLmxlbmd0aDtsKyspcys9aVtsXSphW2xdO3JldHVybiBzfSxuLm1hZz1mdW5jdGlvbihpKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZG90UHJvZHVjdChpLGkpKX0sbi5ub3JtYWxpemU9ZnVuY3Rpb24oaSl7Zm9yKHZhciBhPVtdLHM9dGhpcy5tYWcoaSksbD0wO2w8aS5sZW5ndGg7bCsrKWFbbF09aVtsXS9zO3JldHVybiBhfSxuLm11bHRHYW1tYT1mdW5jdGlvbihpKXtmb3IodmFyIGE9W10scz0wLGw9MDtsPGkubGVuZ3RoO2wrKylzKz1pW2xdO3MqPS0xL2kubGVuZ3RoO2Zvcih2YXIgdT0wO3U8aS5sZW5ndGg7dSsrKWFbdV09cytpW3VdO3JldHVybiBhfSxuLm11bHRMPWZ1bmN0aW9uKGksYSxzKXtmb3IodmFyIGw9W10sdT1bXSxoPVtdLGY9MDtmPGFbMF0ubGVuZ3RoO2YrKyl7Zm9yKHZhciBkPTAscD0wO3A8YS5sZW5ndGg7cCsrKWQrPS0uNSphW3BdW2ZdKmlbcF07dVtmXT1kfWZvcih2YXIgbT0wO208cy5sZW5ndGg7bSsrKXtmb3IodmFyIGc9MCx5PTA7eTxzLmxlbmd0aDt5KyspZys9c1ttXVt5XSp1W3ldO2hbbV09Z31mb3IodmFyIHY9MDt2PGEubGVuZ3RoO3YrKyl7Zm9yKHZhciB4PTAsYj0wO2I8YVswXS5sZW5ndGg7YisrKXgrPWFbdl1bYl0qaFtiXTtsW3ZdPXh9cmV0dXJuIGx9LHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbCh1LGgpe2Zvcih2YXIgZj0wO2Y8aC5sZW5ndGg7ZisrKXt2YXIgZD1oW2ZdO2QuZW51bWVyYWJsZT1kLmVudW1lcmFibGV8fCExLGQuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBkJiYoZC53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHUsZC5rZXksZCl9fXJldHVybiBvKGwsImRlZmluZVByb3BlcnRpZXMiKSxmdW5jdGlvbih1LGgsZil7cmV0dXJuIGgmJmwodS5wcm90b3R5cGUsaCksZiYmbCh1LGYpLHV9fSgpO2Z1bmN0aW9uIGkobCx1KXtpZighKGwgaW5zdGFuY2VvZiB1KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1vKGksIl9jbGFzc0NhbGxDaGVjayIpO3ZhciBhPXIoMTEpLHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBsKHUsaCl7aSh0aGlzLGwpLChoIT09bnVsbHx8aCE9PXZvaWQgMCkmJih0aGlzLmNvbXBhcmVGdW5jdGlvbj10aGlzLl9kZWZhdWx0Q29tcGFyZUZ1bmN0aW9uKTt2YXIgZj12b2lkIDA7dSBpbnN0YW5jZW9mIGE/Zj11LnNpemUoKTpmPXUubGVuZ3RoLHRoaXMuX3F1aWNrc29ydCh1LDAsZi0xKX1yZXR1cm4gbyhsLCJRdWlja3NvcnQiKSxuKGwsW3trZXk6Il9xdWlja3NvcnQiLHZhbHVlOm8oZnVuY3Rpb24oaCxmLGQpe2lmKGY8ZCl7dmFyIHA9dGhpcy5fcGFydGl0aW9uKGgsZixkKTt0aGlzLl9xdWlja3NvcnQoaCxmLHApLHRoaXMuX3F1aWNrc29ydChoLHArMSxkKX19LCJfcXVpY2tzb3J0Iil9LHtrZXk6Il9wYXJ0aXRpb24iLHZhbHVlOm8oZnVuY3Rpb24oaCxmLGQpe2Zvcih2YXIgcD10aGlzLl9nZXQoaCxmKSxtPWYsZz1kOzspe2Zvcig7dGhpcy5jb21wYXJlRnVuY3Rpb24ocCx0aGlzLl9nZXQoaCxnKSk7KWctLTtmb3IoO3RoaXMuY29tcGFyZUZ1bmN0aW9uKHRoaXMuX2dldChoLG0pLHApOyltKys7aWYobTxnKXRoaXMuX3N3YXAoaCxtLGcpLG0rKyxnLS07ZWxzZSByZXR1cm4gZ319LCJfcGFydGl0aW9uIil9LHtrZXk6Il9nZXQiLHZhbHVlOm8oZnVuY3Rpb24oaCxmKXtyZXR1cm4gaCBpbnN0YW5jZW9mIGE/aC5nZXRfb2JqZWN0X2F0KGYpOmhbZl19LCJfZ2V0Iil9LHtrZXk6Il9zZXQiLHZhbHVlOm8oZnVuY3Rpb24oaCxmLGQpe2ggaW5zdGFuY2VvZiBhP2guc2V0X29iamVjdF9hdChmLGQpOmhbZl09ZH0sIl9zZXQiKX0se2tleToiX3N3YXAiLHZhbHVlOm8oZnVuY3Rpb24oaCxmLGQpe3ZhciBwPXRoaXMuX2dldChoLGYpO3RoaXMuX3NldChoLGYsdGhpcy5fZ2V0KGgsZCkpLHRoaXMuX3NldChoLGQscCl9LCJfc3dhcCIpfSx7a2V5OiJfZGVmYXVsdENvbXBhcmVGdW5jdGlvbiIsdmFsdWU6byhmdW5jdGlvbihoLGYpe3JldHVybiBmPmh9LCJfZGVmYXVsdENvbXBhcmVGdW5jdGlvbiIpfV0pLGx9KCk7dC5leHBvcnRzPXN9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe31vKG4sIlNWRCIpLG4uc3ZkPWZ1bmN0aW9uKGkpe3RoaXMuVT1udWxsLHRoaXMuVj1udWxsLHRoaXMucz1udWxsLHRoaXMubT0wLHRoaXMubj0wLHRoaXMubT1pLmxlbmd0aCx0aGlzLm49aVswXS5sZW5ndGg7dmFyIGE9TWF0aC5taW4odGhpcy5tLHRoaXMubik7dGhpcy5zPWZ1bmN0aW9uKHh0KXtmb3IodmFyIHV0PVtdO3h0LS0gPjA7KXV0LnB1c2goMCk7cmV0dXJuIHV0fShNYXRoLm1pbih0aGlzLm0rMSx0aGlzLm4pKSx0aGlzLlU9ZnVuY3Rpb24oeHQpe3ZhciB1dD1vKGZ1bmN0aW9uIEV0KGZ0KXtpZihmdC5sZW5ndGg9PTApcmV0dXJuIDA7Zm9yKHZhciB5dD1bXSxudD0wO250PGZ0WzBdO250KyspeXQucHVzaChFdChmdC5zbGljZSgxKSkpO3JldHVybiB5dH0sImFsbG9jYXRlIik7cmV0dXJuIHV0KHh0KX0oW3RoaXMubSxhXSksdGhpcy5WPWZ1bmN0aW9uKHh0KXt2YXIgdXQ9byhmdW5jdGlvbiBFdChmdCl7aWYoZnQubGVuZ3RoPT0wKXJldHVybiAwO2Zvcih2YXIgeXQ9W10sbnQ9MDtudDxmdFswXTtudCsrKXl0LnB1c2goRXQoZnQuc2xpY2UoMSkpKTtyZXR1cm4geXR9LCJhbGxvY2F0ZSIpO3JldHVybiB1dCh4dCl9KFt0aGlzLm4sdGhpcy5uXSk7Zm9yKHZhciBzPWZ1bmN0aW9uKHh0KXtmb3IodmFyIHV0PVtdO3h0LS0gPjA7KXV0LnB1c2goMCk7cmV0dXJuIHV0fSh0aGlzLm4pLGw9ZnVuY3Rpb24oeHQpe2Zvcih2YXIgdXQ9W107eHQtLSA+MDspdXQucHVzaCgwKTtyZXR1cm4gdXR9KHRoaXMubSksdT0hMCxoPSEwLGY9TWF0aC5taW4odGhpcy5tLTEsdGhpcy5uKSxkPU1hdGgubWF4KDAsTWF0aC5taW4odGhpcy5uLTIsdGhpcy5tKSkscD0wO3A8TWF0aC5tYXgoZixkKTtwKyspe2lmKHA8Zil7dGhpcy5zW3BdPTA7Zm9yKHZhciBtPXA7bTx0aGlzLm07bSsrKXRoaXMuc1twXT1uLmh5cG90KHRoaXMuc1twXSxpW21dW3BdKTtpZih0aGlzLnNbcF0hPT0wKXtpW3BdW3BdPDAmJih0aGlzLnNbcF09LXRoaXMuc1twXSk7Zm9yKHZhciBnPXA7Zzx0aGlzLm07ZysrKWlbZ11bcF0vPXRoaXMuc1twXTtpW3BdW3BdKz0xfXRoaXMuc1twXT0tdGhpcy5zW3BdfWZvcih2YXIgeT1wKzE7eTx0aGlzLm47eSsrKXtpZihmdW5jdGlvbih4dCx1dCl7cmV0dXJuIHh0JiZ1dH0ocDxmLHRoaXMuc1twXSE9PTApKXtmb3IodmFyIHY9MCx4PXA7eDx0aGlzLm07eCsrKXYrPWlbeF1bcF0qaVt4XVt5XTt2PS12L2lbcF1bcF07Zm9yKHZhciBiPXA7Yjx0aGlzLm07YisrKWlbYl1beV0rPXYqaVtiXVtwXX1zW3ldPWlbcF1beV19aWYoZnVuY3Rpb24oeHQsdXQpe3JldHVybiB4dCYmdXR9KHUscDxmKSlmb3IodmFyIHc9cDt3PHRoaXMubTt3KyspdGhpcy5VW3ddW3BdPWlbd11bcF07aWYocDxkKXtzW3BdPTA7Zm9yKHZhciBDPXArMTtDPHRoaXMubjtDKyspc1twXT1uLmh5cG90KHNbcF0sc1tDXSk7aWYoc1twXSE9PTApe3NbcCsxXTwwJiYoc1twXT0tc1twXSk7Zm9yKHZhciBUPXArMTtUPHRoaXMubjtUKyspc1tUXS89c1twXTtzW3ArMV0rPTF9aWYoc1twXT0tc1twXSxmdW5jdGlvbih4dCx1dCl7cmV0dXJuIHh0JiZ1dH0ocCsxPHRoaXMubSxzW3BdIT09MCkpe2Zvcih2YXIgRT1wKzE7RTx0aGlzLm07RSsrKWxbRV09MDtmb3IodmFyIEE9cCsxO0E8dGhpcy5uO0ErKylmb3IodmFyIFM9cCsxO1M8dGhpcy5tO1MrKylsW1NdKz1zW0FdKmlbU11bQV07Zm9yKHZhciBfPXArMTtfPHRoaXMubjtfKyspZm9yKHZhciBJPS1zW19dL3NbcCsxXSxEPXArMTtEPHRoaXMubTtEKyspaVtEXVtfXSs9SSpsW0RdfWlmKGgpZm9yKHZhciBrPXArMTtrPHRoaXMubjtrKyspdGhpcy5WW2tdW3BdPXNba119fXZhciBMPU1hdGgubWluKHRoaXMubix0aGlzLm0rMSk7aWYoZjx0aGlzLm4mJih0aGlzLnNbZl09aVtmXVtmXSksdGhpcy5tPEwmJih0aGlzLnNbTC0xXT0wKSxkKzE8TCYmKHNbZF09aVtkXVtMLTFdKSxzW0wtMV09MCx1KXtmb3IodmFyIFI9ZjtSPGE7UisrKXtmb3IodmFyIE89MDtPPHRoaXMubTtPKyspdGhpcy5VW09dW1JdPTA7dGhpcy5VW1JdW1JdPTF9Zm9yKHZhciBNPWYtMTtNPj0wO00tLSlpZih0aGlzLnNbTV0hPT0wKXtmb3IodmFyIEI9TSsxO0I8YTtCKyspe2Zvcih2YXIgRj0wLFA9TTtQPHRoaXMubTtQKyspRis9dGhpcy5VW1BdW01dKnRoaXMuVVtQXVtCXTtGPS1GL3RoaXMuVVtNXVtNXTtmb3IodmFyIHo9TTt6PHRoaXMubTt6KyspdGhpcy5VW3pdW0JdKz1GKnRoaXMuVVt6XVtNXX1mb3IodmFyICQ9TTskPHRoaXMubTskKyspdGhpcy5VWyRdW01dPS10aGlzLlVbJF1bTV07dGhpcy5VW01dW01dPTErdGhpcy5VW01dW01dO2Zvcih2YXIgSD0wO0g8TS0xO0grKyl0aGlzLlVbSF1bTV09MH1lbHNle2Zvcih2YXIgUT0wO1E8dGhpcy5tO1ErKyl0aGlzLlVbUV1bTV09MDt0aGlzLlVbTV1bTV09MX19aWYoaClmb3IodmFyIGo9dGhpcy5uLTE7aj49MDtqLS0pe2lmKGZ1bmN0aW9uKHh0LHV0KXtyZXR1cm4geHQmJnV0fShqPGQsc1tqXSE9PTApKWZvcih2YXIgaWU9aisxO2llPGE7aWUrKyl7Zm9yKHZhciBuZT0wLGxlPWorMTtsZTx0aGlzLm47bGUrKyluZSs9dGhpcy5WW2xlXVtqXSp0aGlzLlZbbGVdW2llXTtuZT0tbmUvdGhpcy5WW2orMV1bal07Zm9yKHZhciBoZT1qKzE7aGU8dGhpcy5uO2hlKyspdGhpcy5WW2hlXVtpZV0rPW5lKnRoaXMuVltoZV1bal19Zm9yKHZhciBLPTA7Szx0aGlzLm47SysrKXRoaXMuVltLXVtqXT0wO3RoaXMuVltqXVtqXT0xfWZvcih2YXIgWD1MLTEsdGU9MCxKPU1hdGgucG93KDIsLTUyKSxzZT1NYXRoLnBvdygyLC05NjYpO0w+MDspe3ZhciB1ZT12b2lkIDAsWj12b2lkIDA7Zm9yKHVlPUwtMjt1ZT49LTEmJnVlIT09LTE7dWUtLSlpZihNYXRoLmFicyhzW3VlXSk8PXNlK0oqKE1hdGguYWJzKHRoaXMuc1t1ZV0pK01hdGguYWJzKHRoaXMuc1t1ZSsxXSkpKXtzW3VlXT0wO2JyZWFrfWlmKHVlPT09TC0yKVo9NDtlbHNle3ZhciBTZT12b2lkIDA7Zm9yKFNlPUwtMTtTZT49dWUmJlNlIT09dWU7U2UtLSl7dmFyIGNlPShTZSE9PUw/TWF0aC5hYnMoc1tTZV0pOjApKyhTZSE9PXVlKzE/TWF0aC5hYnMoc1tTZS0xXSk6MCk7aWYoTWF0aC5hYnModGhpcy5zW1NlXSk8PXNlK0oqY2Upe3RoaXMuc1tTZV09MDticmVha319U2U9PT11ZT9aPTM6U2U9PT1MLTE/Wj0xOihaPTIsdWU9U2UpfXN3aXRjaCh1ZSsrLFope2Nhc2UgMTp7dmFyIGFlPXNbTC0yXTtzW0wtMl09MDtmb3IodmFyIE9lPUwtMjtPZT49dWU7T2UtLSl7dmFyIGdlPW4uaHlwb3QodGhpcy5zW09lXSxhZSksemU9dGhpcy5zW09lXS9nZSxIZT1hZS9nZTtpZih0aGlzLnNbT2VdPWdlLE9lIT09dWUmJihhZT0tSGUqc1tPZS0xXSxzW09lLTFdPXplKnNbT2UtMV0pLGgpZm9yKHZhciAkZT0wOyRlPHRoaXMubjskZSsrKWdlPXplKnRoaXMuVlskZV1bT2VdK0hlKnRoaXMuVlskZV1bTC0xXSx0aGlzLlZbJGVdW0wtMV09LUhlKnRoaXMuVlskZV1bT2VdK3plKnRoaXMuVlskZV1bTC0xXSx0aGlzLlZbJGVdW09lXT1nZX19YnJlYWs7Y2FzZSAyOnt2YXIgUmU9c1t1ZS0xXTtzW3VlLTFdPTA7Zm9yKHZhciBJZT11ZTtJZTxMO0llKyspe3ZhciBiZT1uLmh5cG90KHRoaXMuc1tJZV0sUmUpLFc9dGhpcy5zW0llXS9iZSxkZT1SZS9iZTtpZih0aGlzLnNbSWVdPWJlLFJlPS1kZSpzW0llXSxzW0llXT1XKnNbSWVdLHUpZm9yKHZhciByZT0wO3JlPHRoaXMubTtyZSsrKWJlPVcqdGhpcy5VW3JlXVtJZV0rZGUqdGhpcy5VW3JlXVt1ZS0xXSx0aGlzLlVbcmVdW3VlLTFdPS1kZSp0aGlzLlVbcmVdW0llXStXKnRoaXMuVVtyZV1bdWUtMV0sdGhpcy5VW3JlXVtJZV09YmV9fWJyZWFrO2Nhc2UgMzp7dmFyIG9lPU1hdGgubWF4KE1hdGgubWF4KE1hdGgubWF4KE1hdGgubWF4KE1hdGguYWJzKHRoaXMuc1tMLTFdKSxNYXRoLmFicyh0aGlzLnNbTC0yXSkpLE1hdGguYWJzKHNbTC0yXSkpLE1hdGguYWJzKHRoaXMuc1t1ZV0pKSxNYXRoLmFicyhzW3VlXSkpLFY9dGhpcy5zW0wtMV0vb2UseGU9dGhpcy5zW0wtMl0vb2UscT1zW0wtMl0vb2UscGU9dGhpcy5zW3VlXS9vZSx2ZT1zW3VlXS9vZSxQZT0oKHhlK1YpKih4ZS1WKStxKnEpLzIsX2U9VipxKihWKnEpLHdlPTA7KGZ1bmN0aW9uKHh0LHV0KXtyZXR1cm4geHR8fHV0fSkoUGUhPT0wLF9lIT09MCkmJih3ZT1NYXRoLnNxcnQoUGUqUGUrX2UpLFBlPDAmJih3ZT0td2UpLHdlPV9lLyhQZSt3ZSkpO2Zvcih2YXIgVmU9KHBlK1YpKihwZS1WKSt3ZSxEZT1wZSp2ZSxxZT11ZTtxZTxMLTE7cWUrKyl7dmFyIGF0PW4uaHlwb3QoVmUsRGUpLFJ0PVZlL2F0LHN0PURlL2F0O2lmKHFlIT09dWUmJihzW3FlLTFdPWF0KSxWZT1SdCp0aGlzLnNbcWVdK3N0KnNbcWVdLHNbcWVdPVJ0KnNbcWVdLXN0KnRoaXMuc1txZV0sRGU9c3QqdGhpcy5zW3FlKzFdLHRoaXMuc1txZSsxXT1SdCp0aGlzLnNbcWUrMV0saClmb3IodmFyIFVlPTA7VWU8dGhpcy5uO1VlKyspYXQ9UnQqdGhpcy5WW1VlXVtxZV0rc3QqdGhpcy5WW1VlXVtxZSsxXSx0aGlzLlZbVWVdW3FlKzFdPS1zdCp0aGlzLlZbVWVdW3FlXStSdCp0aGlzLlZbVWVdW3FlKzFdLHRoaXMuVltVZV1bcWVdPWF0O2lmKGF0PW4uaHlwb3QoVmUsRGUpLFJ0PVZlL2F0LHN0PURlL2F0LHRoaXMuc1txZV09YXQsVmU9UnQqc1txZV0rc3QqdGhpcy5zW3FlKzFdLHRoaXMuc1txZSsxXT0tc3Qqc1txZV0rUnQqdGhpcy5zW3FlKzFdLERlPXN0KnNbcWUrMV0sc1txZSsxXT1SdCpzW3FlKzFdLHUmJnFlPHRoaXMubS0xKWZvcih2YXIgY3Q9MDtjdDx0aGlzLm07Y3QrKylhdD1SdCp0aGlzLlVbY3RdW3FlXStzdCp0aGlzLlVbY3RdW3FlKzFdLHRoaXMuVVtjdF1bcWUrMV09LXN0KnRoaXMuVVtjdF1bcWVdK1J0KnRoaXMuVVtjdF1bcWUrMV0sdGhpcy5VW2N0XVtxZV09YXR9c1tMLTJdPVZlLHRlPXRlKzF9YnJlYWs7Y2FzZSA0OntpZih0aGlzLnNbdWVdPD0wJiYodGhpcy5zW3VlXT10aGlzLnNbdWVdPDA/LXRoaXMuc1t1ZV06MCxoKSlmb3IodmFyIFdlPTA7V2U8PVg7V2UrKyl0aGlzLlZbV2VdW3VlXT0tdGhpcy5WW1dlXVt1ZV07Zm9yKDt1ZTxYJiYhKHRoaXMuc1t1ZV0+PXRoaXMuc1t1ZSsxXSk7KXt2YXIgb3Q9dGhpcy5zW3VlXTtpZih0aGlzLnNbdWVdPXRoaXMuc1t1ZSsxXSx0aGlzLnNbdWUrMV09b3QsaCYmdWU8dGhpcy5uLTEpZm9yKHZhciBZdD0wO1l0PHRoaXMubjtZdCsrKW90PXRoaXMuVltZdF1bdWUrMV0sdGhpcy5WW1l0XVt1ZSsxXT10aGlzLlZbWXRdW3VlXSx0aGlzLlZbWXRdW3VlXT1vdDtpZih1JiZ1ZTx0aGlzLm0tMSlmb3IodmFyIGJ0PTA7YnQ8dGhpcy5tO2J0Kyspb3Q9dGhpcy5VW2J0XVt1ZSsxXSx0aGlzLlVbYnRdW3VlKzFdPXRoaXMuVVtidF1bdWVdLHRoaXMuVVtidF1bdWVdPW90O3VlKyt9dGU9MCxMLS19YnJlYWt9fXZhciBNdD17VTp0aGlzLlUsVjp0aGlzLlYsUzp0aGlzLnN9O3JldHVybiBNdH0sbi5oeXBvdD1mdW5jdGlvbihpLGEpe3ZhciBzPXZvaWQgMDtyZXR1cm4gTWF0aC5hYnMoaSk+TWF0aC5hYnMoYSk/KHM9YS9pLHM9TWF0aC5hYnMoaSkqTWF0aC5zcXJ0KDErcypzKSk6YSE9MD8ocz1pL2Escz1NYXRoLmFicyhhKSpNYXRoLnNxcnQoMStzKnMpKTpzPTAsc30sdC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49ZnVuY3Rpb24oKXtmdW5jdGlvbiBzKGwsdSl7Zm9yKHZhciBoPTA7aDx1Lmxlbmd0aDtoKyspe3ZhciBmPXVbaF07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxmLmtleSxmKX19cmV0dXJuIG8ocywiZGVmaW5lUHJvcGVydGllcyIpLGZ1bmN0aW9uKGwsdSxoKXtyZXR1cm4gdSYmcyhsLnByb3RvdHlwZSx1KSxoJiZzKGwsaCksbH19KCk7ZnVuY3Rpb24gaShzLGwpe2lmKCEocyBpbnN0YW5jZW9mIGwpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfW8oaSwiX2NsYXNzQ2FsbENoZWNrIik7dmFyIGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBzKGwsdSl7dmFyIGg9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOjEsZj1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106LTEsZD1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06LTE7aSh0aGlzLHMpLHRoaXMuc2VxdWVuY2UxPWwsdGhpcy5zZXF1ZW5jZTI9dSx0aGlzLm1hdGNoX3Njb3JlPWgsdGhpcy5taXNtYXRjaF9wZW5hbHR5PWYsdGhpcy5nYXBfcGVuYWx0eT1kLHRoaXMuaU1heD1sLmxlbmd0aCsxLHRoaXMuak1heD11Lmxlbmd0aCsxLHRoaXMuZ3JpZD1uZXcgQXJyYXkodGhpcy5pTWF4KTtmb3IodmFyIHA9MDtwPHRoaXMuaU1heDtwKyspe3RoaXMuZ3JpZFtwXT1uZXcgQXJyYXkodGhpcy5qTWF4KTtmb3IodmFyIG09MDttPHRoaXMuak1heDttKyspdGhpcy5ncmlkW3BdW21dPTB9dGhpcy50cmFjZWJhY2tHcmlkPW5ldyBBcnJheSh0aGlzLmlNYXgpO2Zvcih2YXIgZz0wO2c8dGhpcy5pTWF4O2crKyl7dGhpcy50cmFjZWJhY2tHcmlkW2ddPW5ldyBBcnJheSh0aGlzLmpNYXgpO2Zvcih2YXIgeT0wO3k8dGhpcy5qTWF4O3krKyl0aGlzLnRyYWNlYmFja0dyaWRbZ11beV09W251bGwsbnVsbCxudWxsXX10aGlzLmFsaWdubWVudHM9W10sdGhpcy5zY29yZT0tMSx0aGlzLmNvbXB1dGVHcmlkcygpfXJldHVybiBvKHMsIk5lZWRsZW1hbld1bnNjaCIpLG4ocyxbe2tleToiZ2V0U2NvcmUiLHZhbHVlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zY29yZX0sImdldFNjb3JlIil9LHtrZXk6ImdldEFsaWdubWVudHMiLHZhbHVlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hbGlnbm1lbnRzfSwiZ2V0QWxpZ25tZW50cyIpfSx7a2V5OiJjb21wdXRlR3JpZHMiLHZhbHVlOm8oZnVuY3Rpb24oKXtmb3IodmFyIHU9MTt1PHRoaXMuak1heDt1KyspdGhpcy5ncmlkWzBdW3VdPXRoaXMuZ3JpZFswXVt1LTFdK3RoaXMuZ2FwX3BlbmFsdHksdGhpcy50cmFjZWJhY2tHcmlkWzBdW3VdPVshMSwhMSwhMF07Zm9yKHZhciBoPTE7aDx0aGlzLmlNYXg7aCsrKXRoaXMuZ3JpZFtoXVswXT10aGlzLmdyaWRbaC0xXVswXSt0aGlzLmdhcF9wZW5hbHR5LHRoaXMudHJhY2ViYWNrR3JpZFtoXVswXT1bITEsITAsITFdO2Zvcih2YXIgZj0xO2Y8dGhpcy5pTWF4O2YrKylmb3IodmFyIGQ9MTtkPHRoaXMuak1heDtkKyspe3ZhciBwPXZvaWQgMDt0aGlzLnNlcXVlbmNlMVtmLTFdPT09dGhpcy5zZXF1ZW5jZTJbZC0xXT9wPXRoaXMuZ3JpZFtmLTFdW2QtMV0rdGhpcy5tYXRjaF9zY29yZTpwPXRoaXMuZ3JpZFtmLTFdW2QtMV0rdGhpcy5taXNtYXRjaF9wZW5hbHR5O3ZhciBtPXRoaXMuZ3JpZFtmLTFdW2RdK3RoaXMuZ2FwX3BlbmFsdHksZz10aGlzLmdyaWRbZl1bZC0xXSt0aGlzLmdhcF9wZW5hbHR5LHk9W3AsbSxnXSx2PXRoaXMuYXJyYXlBbGxNYXhJbmRleGVzKHkpO3RoaXMuZ3JpZFtmXVtkXT15W3ZbMF1dLHRoaXMudHJhY2ViYWNrR3JpZFtmXVtkXT1bdi5pbmNsdWRlcygwKSx2LmluY2x1ZGVzKDEpLHYuaW5jbHVkZXMoMildfXRoaXMuc2NvcmU9dGhpcy5ncmlkW3RoaXMuaU1heC0xXVt0aGlzLmpNYXgtMV19LCJjb21wdXRlR3JpZHMiKX0se2tleToiYWxpZ25tZW50VHJhY2ViYWNrIix2YWx1ZTpvKGZ1bmN0aW9uKCl7dmFyIHU9W107Zm9yKHUucHVzaCh7cG9zOlt0aGlzLnNlcXVlbmNlMS5sZW5ndGgsdGhpcy5zZXF1ZW5jZTIubGVuZ3RoXSxzZXExOiIiLHNlcTI6IiJ9KTt1WzBdOyl7dmFyIGg9dVswXSxmPXRoaXMudHJhY2ViYWNrR3JpZFtoLnBvc1swXV1baC5wb3NbMV1dO2ZbMF0mJnUucHVzaCh7cG9zOltoLnBvc1swXS0xLGgucG9zWzFdLTFdLHNlcTE6dGhpcy5zZXF1ZW5jZTFbaC5wb3NbMF0tMV0raC5zZXExLHNlcTI6dGhpcy5zZXF1ZW5jZTJbaC5wb3NbMV0tMV0raC5zZXEyfSksZlsxXSYmdS5wdXNoKHtwb3M6W2gucG9zWzBdLTEsaC5wb3NbMV1dLHNlcTE6dGhpcy5zZXF1ZW5jZTFbaC5wb3NbMF0tMV0raC5zZXExLHNlcTI6Ii0iK2guc2VxMn0pLGZbMl0mJnUucHVzaCh7cG9zOltoLnBvc1swXSxoLnBvc1sxXS0xXSxzZXExOiItIitoLnNlcTEsc2VxMjp0aGlzLnNlcXVlbmNlMltoLnBvc1sxXS0xXStoLnNlcTJ9KSxoLnBvc1swXT09PTAmJmgucG9zWzFdPT09MCYmdGhpcy5hbGlnbm1lbnRzLnB1c2goe3NlcXVlbmNlMTpoLnNlcTEsc2VxdWVuY2UyOmguc2VxMn0pLHUuc2hpZnQoKX1yZXR1cm4gdGhpcy5hbGlnbm1lbnRzfSwiYWxpZ25tZW50VHJhY2ViYWNrIil9LHtrZXk6ImdldEFsbEluZGV4ZXMiLHZhbHVlOm8oZnVuY3Rpb24odSxoKXtmb3IodmFyIGY9W10sZD0tMTsoZD11LmluZGV4T2YoaCxkKzEpKSE9PS0xOylmLnB1c2goZCk7cmV0dXJuIGZ9LCJnZXRBbGxJbmRleGVzIil9LHtrZXk6ImFycmF5QWxsTWF4SW5kZXhlcyIsdmFsdWU6byhmdW5jdGlvbih1KXtyZXR1cm4gdGhpcy5nZXRBbGxJbmRleGVzKHUsTWF0aC5tYXguYXBwbHkobnVsbCx1KSl9LCJhcnJheUFsbE1heEluZGV4ZXMiKX1dKSxzfSgpO3QuZXhwb3J0cz1hfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPW8oZnVuY3Rpb24oKXt9LCJsYXlvdXRCYXNlIik7bi5GRExheW91dD1yKDE4KSxuLkZETGF5b3V0Q29uc3RhbnRzPXIoNCksbi5GRExheW91dEVkZ2U9cigxOSksbi5GRExheW91dE5vZGU9cigyMCksbi5EaW1lbnNpb25EPXIoMjEpLG4uSGFzaE1hcD1yKDIyKSxuLkhhc2hTZXQ9cigyMyksbi5JR2VvbWV0cnk9cig4KSxuLklNYXRoPXIoOSksbi5JbnRlZ2VyPXIoMTApLG4uUG9pbnQ9cigxMiksbi5Qb2ludEQ9cig1KSxuLlJhbmRvbVNlZWQ9cigxNiksbi5SZWN0YW5nbGVEPXIoMTMpLG4uVHJhbnNmb3JtPXIoMTcpLG4uVW5pcXVlSURHZW5lcmV0b3I9cigxNCksbi5RdWlja3NvcnQ9cigyNSksbi5MaW5rZWRMaXN0PXIoMTEpLG4uTEdyYXBoT2JqZWN0PXIoMiksbi5MR3JhcGg9cig2KSxuLkxFZGdlPXIoMSksbi5MR3JhcGhNYW5hZ2VyPXIoNyksbi5MTm9kZT1yKDMpLG4uTGF5b3V0PXIoMTUpLG4uTGF5b3V0Q29uc3RhbnRzPXIoMCksbi5OZWVkbGVtYW5XdW5zY2g9cigyNyksbi5NYXRyaXg9cigyNCksbi5TVkQ9cigyNiksdC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe3RoaXMubGlzdGVuZXJzPVtdfW8obiwiRW1pdHRlciIpO3ZhciBpPW4ucHJvdG90eXBlO2kuYWRkTGlzdGVuZXI9ZnVuY3Rpb24oYSxzKXt0aGlzLmxpc3RlbmVycy5wdXNoKHtldmVudDphLGNhbGxiYWNrOnN9KX0saS5yZW1vdmVMaXN0ZW5lcj1mdW5jdGlvbihhLHMpe2Zvcih2YXIgbD10aGlzLmxpc3RlbmVycy5sZW5ndGg7bD49MDtsLS0pe3ZhciB1PXRoaXMubGlzdGVuZXJzW2xdO3UuZXZlbnQ9PT1hJiZ1LmNhbGxiYWNrPT09cyYmdGhpcy5saXN0ZW5lcnMuc3BsaWNlKGwsMSl9fSxpLmVtaXQ9ZnVuY3Rpb24oYSxzKXtmb3IodmFyIGw9MDtsPHRoaXMubGlzdGVuZXJzLmxlbmd0aDtsKyspe3ZhciB1PXRoaXMubGlzdGVuZXJzW2xdO2E9PT11LmV2ZW50JiZ1LmNhbGxiYWNrKHMpfX0sdC5leHBvcnRzPW59XSl9KX0pO3ZhciBtRj1NaSgoazQscEYpPT57InVzZSBzdHJpY3QiO28oZnVuY3Rpb24oZSxyKXt0eXBlb2YgazQ9PSJvYmplY3QiJiZ0eXBlb2YgcEY9PSJvYmplY3QiP3BGLmV4cG9ydHM9cihkRigpKTp0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kP2RlZmluZShbImxheW91dC1iYXNlIl0scik6dHlwZW9mIGs0PT0ib2JqZWN0Ij9rNC5jb3NlQmFzZT1yKGRGKCkpOmUuY29zZUJhc2U9cihlLmxheW91dEJhc2UpfSwid2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iKShrNCxmdW5jdGlvbih0KXtyZXR1cm4oKCk9PnsidXNlIHN0cmljdCI7dmFyIGU9ezQ1OihhLHMsbCk9Pnt2YXIgdT17fTt1LmxheW91dEJhc2U9bCg1NTEpLHUuQ29TRUNvbnN0YW50cz1sKDgwNiksdS5Db1NFRWRnZT1sKDc2NyksdS5Db1NFR3JhcGg9bCg4ODApLHUuQ29TRUdyYXBoTWFuYWdlcj1sKDU3OCksdS5Db1NFTGF5b3V0PWwoNzY1KSx1LkNvU0VOb2RlPWwoOTkxKSx1LkNvbnN0cmFpbnRIYW5kbGVyPWwoOTAyKSxhLmV4cG9ydHM9dX0sODA2OihhLHMsbCk9Pnt2YXIgdT1sKDU1MSkuRkRMYXlvdXRDb25zdGFudHM7ZnVuY3Rpb24gaCgpe31vKGgsIkNvU0VDb25zdGFudHMiKTtmb3IodmFyIGYgaW4gdSloW2ZdPXVbZl07aC5ERUZBVUxUX1VTRV9NVUxUSV9MRVZFTF9TQ0FMSU5HPSExLGguREVGQVVMVF9SQURJQUxfU0VQQVJBVElPTj11LkRFRkFVTFRfRURHRV9MRU5HVEgsaC5ERUZBVUxUX0NPTVBPTkVOVF9TRVBFUkFUSU9OPTYwLGguVElMRT0hMCxoLlRJTElOR19QQURESU5HX1ZFUlRJQ0FMPTEwLGguVElMSU5HX1BBRERJTkdfSE9SSVpPTlRBTD0xMCxoLlRSQU5TRk9STV9PTl9DT05TVFJBSU5UX0hBTkRMSU5HPSEwLGguRU5GT1JDRV9DT05TVFJBSU5UUz0hMCxoLkFQUExZX0xBWU9VVD0hMCxoLlJFTEFYX01PVkVNRU5UX09OX0NPTlNUUkFJTlRTPSEwLGguVFJFRV9SRURVQ1RJT05fT05fSU5DUkVNRU5UQUw9ITAsaC5QVVJFX0lOQ1JFTUVOVEFMPWguREVGQVVMVF9JTkNSRU1FTlRBTCxhLmV4cG9ydHM9aH0sNzY3OihhLHMsbCk9Pnt2YXIgdT1sKDU1MSkuRkRMYXlvdXRFZGdlO2Z1bmN0aW9uIGgoZCxwLG0pe3UuY2FsbCh0aGlzLGQscCxtKX1vKGgsIkNvU0VFZGdlIiksaC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh1LnByb3RvdHlwZSk7Zm9yKHZhciBmIGluIHUpaFtmXT11W2ZdO2EuZXhwb3J0cz1ofSw4ODA6KGEscyxsKT0+e3ZhciB1PWwoNTUxKS5MR3JhcGg7ZnVuY3Rpb24gaChkLHAsbSl7dS5jYWxsKHRoaXMsZCxwLG0pfW8oaCwiQ29TRUdyYXBoIiksaC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh1LnByb3RvdHlwZSk7Zm9yKHZhciBmIGluIHUpaFtmXT11W2ZdO2EuZXhwb3J0cz1ofSw1Nzg6KGEscyxsKT0+e3ZhciB1PWwoNTUxKS5MR3JhcGhNYW5hZ2VyO2Z1bmN0aW9uIGgoZCl7dS5jYWxsKHRoaXMsZCl9byhoLCJDb1NFR3JhcGhNYW5hZ2VyIiksaC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh1LnByb3RvdHlwZSk7Zm9yKHZhciBmIGluIHUpaFtmXT11W2ZdO2EuZXhwb3J0cz1ofSw3NjU6KGEscyxsKT0+e3ZhciB1PWwoNTUxKS5GRExheW91dCxoPWwoNTc4KSxmPWwoODgwKSxkPWwoOTkxKSxwPWwoNzY3KSxtPWwoODA2KSxnPWwoOTAyKSx5PWwoNTUxKS5GRExheW91dENvbnN0YW50cyx2PWwoNTUxKS5MYXlvdXRDb25zdGFudHMseD1sKDU1MSkuUG9pbnQsYj1sKDU1MSkuUG9pbnRELHc9bCg1NTEpLkRpbWVuc2lvbkQsQz1sKDU1MSkuTGF5b3V0LFQ9bCg1NTEpLkludGVnZXIsRT1sKDU1MSkuSUdlb21ldHJ5LEE9bCg1NTEpLkxHcmFwaCxTPWwoNTUxKS5UcmFuc2Zvcm0sXz1sKDU1MSkuTGlua2VkTGlzdDtmdW5jdGlvbiBJKCl7dS5jYWxsKHRoaXMpLHRoaXMudG9CZVRpbGVkPXt9LHRoaXMuY29uc3RyYWludHM9e319byhJLCJDb1NFTGF5b3V0IiksSS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh1LnByb3RvdHlwZSk7Zm9yKHZhciBEIGluIHUpSVtEXT11W0RdO0kucHJvdG90eXBlLm5ld0dyYXBoTWFuYWdlcj1mdW5jdGlvbigpe3ZhciBrPW5ldyBoKHRoaXMpO3JldHVybiB0aGlzLmdyYXBoTWFuYWdlcj1rLGt9LEkucHJvdG90eXBlLm5ld0dyYXBoPWZ1bmN0aW9uKGspe3JldHVybiBuZXcgZihudWxsLHRoaXMuZ3JhcGhNYW5hZ2VyLGspfSxJLnByb3RvdHlwZS5uZXdOb2RlPWZ1bmN0aW9uKGspe3JldHVybiBuZXcgZCh0aGlzLmdyYXBoTWFuYWdlcixrKX0sSS5wcm90b3R5cGUubmV3RWRnZT1mdW5jdGlvbihrKXtyZXR1cm4gbmV3IHAobnVsbCxudWxsLGspfSxJLnByb3RvdHlwZS5pbml0UGFyYW1ldGVycz1mdW5jdGlvbigpe3UucHJvdG90eXBlLmluaXRQYXJhbWV0ZXJzLmNhbGwodGhpcyxhcmd1bWVudHMpLHRoaXMuaXNTdWJMYXlvdXR8fChtLkRFRkFVTFRfRURHRV9MRU5HVEg8MTA/dGhpcy5pZGVhbEVkZ2VMZW5ndGg9MTA6dGhpcy5pZGVhbEVkZ2VMZW5ndGg9bS5ERUZBVUxUX0VER0VfTEVOR1RILHRoaXMudXNlU21hcnRJZGVhbEVkZ2VMZW5ndGhDYWxjdWxhdGlvbj1tLkRFRkFVTFRfVVNFX1NNQVJUX0lERUFMX0VER0VfTEVOR1RIX0NBTENVTEFUSU9OLHRoaXMuZ3Jhdml0eUNvbnN0YW50PXkuREVGQVVMVF9HUkFWSVRZX1NUUkVOR1RILHRoaXMuY29tcG91bmRHcmF2aXR5Q29uc3RhbnQ9eS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfU1RSRU5HVEgsdGhpcy5ncmF2aXR5UmFuZ2VGYWN0b3I9eS5ERUZBVUxUX0dSQVZJVFlfUkFOR0VfRkFDVE9SLHRoaXMuY29tcG91bmRHcmF2aXR5UmFuZ2VGYWN0b3I9eS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfUkFOR0VfRkFDVE9SLHRoaXMucHJ1bmVkTm9kZXNBbGw9W10sdGhpcy5ncm93VHJlZUl0ZXJhdGlvbnM9MCx0aGlzLmFmdGVyR3Jvd3RoSXRlcmF0aW9ucz0wLHRoaXMuaXNUcmVlR3Jvd2luZz0hMSx0aGlzLmlzR3Jvd3RoRmluaXNoZWQ9ITEpfSxJLnByb3RvdHlwZS5pbml0U3ByaW5nRW1iZWRkZXI9ZnVuY3Rpb24oKXt1LnByb3RvdHlwZS5pbml0U3ByaW5nRW1iZWRkZXIuY2FsbCh0aGlzKSx0aGlzLmNvb2xpbmdDeWNsZT0wLHRoaXMubWF4Q29vbGluZ0N5Y2xlPXRoaXMubWF4SXRlcmF0aW9ucy95LkNPTlZFUkdFTkNFX0NIRUNLX1BFUklPRCx0aGlzLmZpbmFsVGVtcGVyYXR1cmU9LjA0LHRoaXMuY29vbGluZ0FkanVzdGVyPTF9LEkucHJvdG90eXBlLmxheW91dD1mdW5jdGlvbigpe3ZhciBrPXYuREVGQVVMVF9DUkVBVEVfQkVORFNfQVNfTkVFREVEO3JldHVybiBrJiYodGhpcy5jcmVhdGVCZW5kcG9pbnRzKCksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxFZGdlcygpKSx0aGlzLmxldmVsPTAsdGhpcy5jbGFzc2ljTGF5b3V0KCl9LEkucHJvdG90eXBlLmNsYXNzaWNMYXlvdXQ9ZnVuY3Rpb24oKXtpZih0aGlzLm5vZGVzV2l0aEdyYXZpdHk9dGhpcy5jYWxjdWxhdGVOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvblRvKCksdGhpcy5ncmFwaE1hbmFnZXIuc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24odGhpcy5ub2Rlc1dpdGhHcmF2aXR5KSx0aGlzLmNhbGNOb09mQ2hpbGRyZW5Gb3JBbGxOb2RlcygpLHRoaXMuZ3JhcGhNYW5hZ2VyLmNhbGNMb3dlc3RDb21tb25BbmNlc3RvcnMoKSx0aGlzLmdyYXBoTWFuYWdlci5jYWxjSW5jbHVzaW9uVHJlZURlcHRocygpLHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5jYWxjRXN0aW1hdGVkU2l6ZSgpLHRoaXMuY2FsY0lkZWFsRWRnZUxlbmd0aHMoKSx0aGlzLmluY3JlbWVudGFsKXtpZihtLlRSRUVfUkVEVUNUSU9OX09OX0lOQ1JFTUVOVEFMKXt0aGlzLnJlZHVjZVRyZWVzKCksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbigpO3ZhciBMPW5ldyBTZXQodGhpcy5nZXRBbGxOb2RlcygpKSxSPXRoaXMubm9kZXNXaXRoR3Jhdml0eS5maWx0ZXIoZnVuY3Rpb24oQil7cmV0dXJuIEwuaGFzKEIpfSk7dGhpcy5ncmFwaE1hbmFnZXIuc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oUil9fWVsc2V7dmFyIGs9dGhpcy5nZXRGbGF0Rm9yZXN0KCk7aWYoay5sZW5ndGg+MCl0aGlzLnBvc2l0aW9uTm9kZXNSYWRpYWxseShrKTtlbHNle3RoaXMucmVkdWNlVHJlZXMoKSx0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKCk7dmFyIEw9bmV3IFNldCh0aGlzLmdldEFsbE5vZGVzKCkpLFI9dGhpcy5ub2Rlc1dpdGhHcmF2aXR5LmZpbHRlcihmdW5jdGlvbihPKXtyZXR1cm4gTC5oYXMoTyl9KTt0aGlzLmdyYXBoTWFuYWdlci5zZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbihSKSx0aGlzLnBvc2l0aW9uTm9kZXNSYW5kb21seSgpfX1yZXR1cm4gT2JqZWN0LmtleXModGhpcy5jb25zdHJhaW50cykubGVuZ3RoPjAmJihnLmhhbmRsZUNvbnN0cmFpbnRzKHRoaXMpLHRoaXMuaW5pdENvbnN0cmFpbnRWYXJpYWJsZXMoKSksdGhpcy5pbml0U3ByaW5nRW1iZWRkZXIoKSxtLkFQUExZX0xBWU9VVCYmdGhpcy5ydW5TcHJpbmdFbWJlZGRlcigpLCEwfSxJLnByb3RvdHlwZS50aWNrPWZ1bmN0aW9uKCl7aWYodGhpcy50b3RhbEl0ZXJhdGlvbnMrKyx0aGlzLnRvdGFsSXRlcmF0aW9ucz09PXRoaXMubWF4SXRlcmF0aW9ucyYmIXRoaXMuaXNUcmVlR3Jvd2luZyYmIXRoaXMuaXNHcm93dGhGaW5pc2hlZClpZih0aGlzLnBydW5lZE5vZGVzQWxsLmxlbmd0aD4wKXRoaXMuaXNUcmVlR3Jvd2luZz0hMDtlbHNlIHJldHVybiEwO2lmKHRoaXMudG90YWxJdGVyYXRpb25zJXkuQ09OVkVSR0VOQ0VfQ0hFQ0tfUEVSSU9EPT0wJiYhdGhpcy5pc1RyZWVHcm93aW5nJiYhdGhpcy5pc0dyb3d0aEZpbmlzaGVkKXtpZih0aGlzLmlzQ29udmVyZ2VkKCkpaWYodGhpcy5wcnVuZWROb2Rlc0FsbC5sZW5ndGg+MCl0aGlzLmlzVHJlZUdyb3dpbmc9ITA7ZWxzZSByZXR1cm4hMDt0aGlzLmNvb2xpbmdDeWNsZSsrLHRoaXMubGF5b3V0UXVhbGl0eT09MD90aGlzLmNvb2xpbmdBZGp1c3Rlcj10aGlzLmNvb2xpbmdDeWNsZTp0aGlzLmxheW91dFF1YWxpdHk9PTEmJih0aGlzLmNvb2xpbmdBZGp1c3Rlcj10aGlzLmNvb2xpbmdDeWNsZS8zKSx0aGlzLmNvb2xpbmdGYWN0b3I9TWF0aC5tYXgodGhpcy5pbml0aWFsQ29vbGluZ0ZhY3Rvci1NYXRoLnBvdyh0aGlzLmNvb2xpbmdDeWNsZSxNYXRoLmxvZygxMDAqKHRoaXMuaW5pdGlhbENvb2xpbmdGYWN0b3ItdGhpcy5maW5hbFRlbXBlcmF0dXJlKSkvTWF0aC5sb2codGhpcy5tYXhDb29saW5nQ3ljbGUpKS8xMDAqdGhpcy5jb29saW5nQWRqdXN0ZXIsdGhpcy5maW5hbFRlbXBlcmF0dXJlKSx0aGlzLmFuaW1hdGlvblBlcmlvZD1NYXRoLmNlaWwodGhpcy5pbml0aWFsQW5pbWF0aW9uUGVyaW9kKk1hdGguc3FydCh0aGlzLmNvb2xpbmdGYWN0b3IpKX1pZih0aGlzLmlzVHJlZUdyb3dpbmcpe2lmKHRoaXMuZ3Jvd1RyZWVJdGVyYXRpb25zJTEwPT0wKWlmKHRoaXMucHJ1bmVkTm9kZXNBbGwubGVuZ3RoPjApe3RoaXMuZ3JhcGhNYW5hZ2VyLnVwZGF0ZUJvdW5kcygpLHRoaXMudXBkYXRlR3JpZCgpLHRoaXMuZ3Jvd1RyZWUodGhpcy5wcnVuZWROb2Rlc0FsbCksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbigpO3ZhciBrPW5ldyBTZXQodGhpcy5nZXRBbGxOb2RlcygpKSxMPXRoaXMubm9kZXNXaXRoR3Jhdml0eS5maWx0ZXIoZnVuY3Rpb24oTSl7cmV0dXJuIGsuaGFzKE0pfSk7dGhpcy5ncmFwaE1hbmFnZXIuc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oTCksdGhpcy5ncmFwaE1hbmFnZXIudXBkYXRlQm91bmRzKCksdGhpcy51cGRhdGVHcmlkKCksbS5QVVJFX0lOQ1JFTUVOVEFMP3RoaXMuY29vbGluZ0ZhY3Rvcj15LkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUwvMjp0aGlzLmNvb2xpbmdGYWN0b3I9eS5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMfWVsc2UgdGhpcy5pc1RyZWVHcm93aW5nPSExLHRoaXMuaXNHcm93dGhGaW5pc2hlZD0hMDt0aGlzLmdyb3dUcmVlSXRlcmF0aW9ucysrfWlmKHRoaXMuaXNHcm93dGhGaW5pc2hlZCl7aWYodGhpcy5pc0NvbnZlcmdlZCgpKXJldHVybiEwO3RoaXMuYWZ0ZXJHcm93dGhJdGVyYXRpb25zJTEwPT0wJiYodGhpcy5ncmFwaE1hbmFnZXIudXBkYXRlQm91bmRzKCksdGhpcy51cGRhdGVHcmlkKCkpLG0uUFVSRV9JTkNSRU1FTlRBTD90aGlzLmNvb2xpbmdGYWN0b3I9eS5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMLzIqKCgxMDAtdGhpcy5hZnRlckdyb3d0aEl0ZXJhdGlvbnMpLzEwMCk6dGhpcy5jb29saW5nRmFjdG9yPXkuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTCooKDEwMC10aGlzLmFmdGVyR3Jvd3RoSXRlcmF0aW9ucykvMTAwKSx0aGlzLmFmdGVyR3Jvd3RoSXRlcmF0aW9ucysrfXZhciBSPSF0aGlzLmlzVHJlZUdyb3dpbmcmJiF0aGlzLmlzR3Jvd3RoRmluaXNoZWQsTz10aGlzLmdyb3dUcmVlSXRlcmF0aW9ucyUxMD09MSYmdGhpcy5pc1RyZWVHcm93aW5nfHx0aGlzLmFmdGVyR3Jvd3RoSXRlcmF0aW9ucyUxMD09MSYmdGhpcy5pc0dyb3d0aEZpbmlzaGVkO3JldHVybiB0aGlzLnRvdGFsRGlzcGxhY2VtZW50PTAsdGhpcy5ncmFwaE1hbmFnZXIudXBkYXRlQm91bmRzKCksdGhpcy5jYWxjU3ByaW5nRm9yY2VzKCksdGhpcy5jYWxjUmVwdWxzaW9uRm9yY2VzKFIsTyksdGhpcy5jYWxjR3Jhdml0YXRpb25hbEZvcmNlcygpLHRoaXMubW92ZU5vZGVzKCksdGhpcy5hbmltYXRlKCksITF9LEkucHJvdG90eXBlLmdldFBvc2l0aW9uc0RhdGE9ZnVuY3Rpb24oKXtmb3IodmFyIGs9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsTm9kZXMoKSxMPXt9LFI9MDtSPGsubGVuZ3RoO1IrKyl7dmFyIE89a1tSXS5yZWN0LE09a1tSXS5pZDtMW01dPXtpZDpNLHg6Ty5nZXRDZW50ZXJYKCkseTpPLmdldENlbnRlclkoKSx3Ok8ud2lkdGgsaDpPLmhlaWdodH19cmV0dXJuIEx9LEkucHJvdG90eXBlLnJ1blNwcmluZ0VtYmVkZGVyPWZ1bmN0aW9uKCl7dGhpcy5pbml0aWFsQW5pbWF0aW9uUGVyaW9kPTI1LHRoaXMuYW5pbWF0aW9uUGVyaW9kPXRoaXMuaW5pdGlhbEFuaW1hdGlvblBlcmlvZDt2YXIgaz0hMTtpZih5LkFOSU1BVEU9PT0iZHVyaW5nIil0aGlzLmVtaXQoImxheW91dHN0YXJ0ZWQiKTtlbHNle2Zvcig7IWs7KWs9dGhpcy50aWNrKCk7dGhpcy5ncmFwaE1hbmFnZXIudXBkYXRlQm91bmRzKCl9fSxJLnByb3RvdHlwZS5tb3ZlTm9kZXM9ZnVuY3Rpb24oKXtmb3IodmFyIGs9dGhpcy5nZXRBbGxOb2RlcygpLEwsUj0wO1I8ay5sZW5ndGg7UisrKUw9a1tSXSxMLmNhbGN1bGF0ZURpc3BsYWNlbWVudCgpO09iamVjdC5rZXlzKHRoaXMuY29uc3RyYWludHMpLmxlbmd0aD4wJiZ0aGlzLnVwZGF0ZURpc3BsYWNlbWVudHMoKTtmb3IodmFyIFI9MDtSPGsubGVuZ3RoO1IrKylMPWtbUl0sTC5tb3ZlKCl9LEkucHJvdG90eXBlLmluaXRDb25zdHJhaW50VmFyaWFibGVzPWZ1bmN0aW9uKCl7dmFyIGs9dGhpczt0aGlzLmlkVG9Ob2RlTWFwPW5ldyBNYXAsdGhpcy5maXhlZE5vZGVTZXQ9bmV3IFNldDtmb3IodmFyIEw9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsTm9kZXMoKSxSPTA7UjxMLmxlbmd0aDtSKyspe3ZhciBPPUxbUl07dGhpcy5pZFRvTm9kZU1hcC5zZXQoTy5pZCxPKX12YXIgTT1vKGZ1bmN0aW9uIGxlKGhlKXtmb3IodmFyIEs9aGUuZ2V0Q2hpbGQoKS5nZXROb2RlcygpLFgsdGU9MCxKPTA7SjxLLmxlbmd0aDtKKyspWD1LW0pdLFguZ2V0Q2hpbGQoKT09bnVsbD9rLmZpeGVkTm9kZVNldC5oYXMoWC5pZCkmJih0ZSs9MTAwKTp0ZSs9bGUoWCk7cmV0dXJuIHRlfSwiY2FsY3VsYXRlQ29tcG91bmRXZWlnaHQiKTtpZih0aGlzLmNvbnN0cmFpbnRzLmZpeGVkTm9kZUNvbnN0cmFpbnQpe3RoaXMuY29uc3RyYWludHMuZml4ZWROb2RlQ29uc3RyYWludC5mb3JFYWNoKGZ1bmN0aW9uKEspe2suZml4ZWROb2RlU2V0LmFkZChLLm5vZGVJZCl9KTtmb3IodmFyIEw9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsTm9kZXMoKSxPLFI9MDtSPEwubGVuZ3RoO1IrKylpZihPPUxbUl0sTy5nZXRDaGlsZCgpIT1udWxsKXt2YXIgQj1NKE8pO0I+MCYmKE8uZml4ZWROb2RlV2VpZ2h0PUIpfX1pZih0aGlzLmNvbnN0cmFpbnRzLnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludCl7dmFyIEY9bmV3IE1hcCxQPW5ldyBNYXA7aWYodGhpcy5kdW1teVRvTm9kZUZvclZlcnRpY2FsQWxpZ25tZW50PW5ldyBNYXAsdGhpcy5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQ9bmV3IE1hcCx0aGlzLmZpeGVkTm9kZXNPbkhvcml6b250YWw9bmV3IFNldCx0aGlzLmZpeGVkTm9kZXNPblZlcnRpY2FsPW5ldyBTZXQsdGhpcy5maXhlZE5vZGVTZXQuZm9yRWFjaChmdW5jdGlvbihsZSl7ay5maXhlZE5vZGVzT25Ib3Jpem9udGFsLmFkZChsZSksay5maXhlZE5vZGVzT25WZXJ0aWNhbC5hZGQobGUpfSksdGhpcy5jb25zdHJhaW50cy5hbGlnbm1lbnRDb25zdHJhaW50KXtpZih0aGlzLmNvbnN0cmFpbnRzLmFsaWdubWVudENvbnN0cmFpbnQudmVydGljYWwpZm9yKHZhciB6PXRoaXMuY29uc3RyYWludHMuYWxpZ25tZW50Q29uc3RyYWludC52ZXJ0aWNhbCxSPTA7Ujx6Lmxlbmd0aDtSKyspdGhpcy5kdW1teVRvTm9kZUZvclZlcnRpY2FsQWxpZ25tZW50LnNldCgiZHVtbXkiK1IsW10pLHpbUl0uZm9yRWFjaChmdW5jdGlvbihoZSl7Ri5zZXQoaGUsImR1bW15IitSKSxrLmR1bW15VG9Ob2RlRm9yVmVydGljYWxBbGlnbm1lbnQuZ2V0KCJkdW1teSIrUikucHVzaChoZSksay5maXhlZE5vZGVTZXQuaGFzKGhlKSYmay5maXhlZE5vZGVzT25Ib3Jpem9udGFsLmFkZCgiZHVtbXkiK1IpfSk7aWYodGhpcy5jb25zdHJhaW50cy5hbGlnbm1lbnRDb25zdHJhaW50Lmhvcml6b250YWwpZm9yKHZhciAkPXRoaXMuY29uc3RyYWludHMuYWxpZ25tZW50Q29uc3RyYWludC5ob3Jpem9udGFsLFI9MDtSPCQubGVuZ3RoO1IrKyl0aGlzLmR1bW15VG9Ob2RlRm9ySG9yaXpvbnRhbEFsaWdubWVudC5zZXQoImR1bW15IitSLFtdKSwkW1JdLmZvckVhY2goZnVuY3Rpb24oaGUpe1Auc2V0KGhlLCJkdW1teSIrUiksay5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuZ2V0KCJkdW1teSIrUikucHVzaChoZSksay5maXhlZE5vZGVTZXQuaGFzKGhlKSYmay5maXhlZE5vZGVzT25WZXJ0aWNhbC5hZGQoImR1bW15IitSKX0pfWlmKG0uUkVMQVhfTU9WRU1FTlRfT05fQ09OU1RSQUlOVFMpdGhpcy5zaHVmZmxlPWZ1bmN0aW9uKGxlKXt2YXIgaGUsSyxYO2ZvcihYPWxlLmxlbmd0aC0xO1g+PTIqbGUubGVuZ3RoLzM7WC0tKWhlPU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSooWCsxKSksSz1sZVtYXSxsZVtYXT1sZVtoZV0sbGVbaGVdPUs7cmV0dXJuIGxlfSx0aGlzLm5vZGVzSW5SZWxhdGl2ZUhvcml6b250YWw9W10sdGhpcy5ub2Rlc0luUmVsYXRpdmVWZXJ0aWNhbD1bXSx0aGlzLm5vZGVUb1JlbGF0aXZlQ29uc3RyYWludE1hcEhvcml6b250YWw9bmV3IE1hcCx0aGlzLm5vZGVUb1JlbGF0aXZlQ29uc3RyYWludE1hcFZlcnRpY2FsPW5ldyBNYXAsdGhpcy5ub2RlVG9UZW1wUG9zaXRpb25NYXBIb3Jpem9udGFsPW5ldyBNYXAsdGhpcy5ub2RlVG9UZW1wUG9zaXRpb25NYXBWZXJ0aWNhbD1uZXcgTWFwLHRoaXMuY29uc3RyYWludHMucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50LmZvckVhY2goZnVuY3Rpb24obGUpe2lmKGxlLmxlZnQpe3ZhciBoZT1GLmhhcyhsZS5sZWZ0KT9GLmdldChsZS5sZWZ0KTpsZS5sZWZ0LEs9Ri5oYXMobGUucmlnaHQpP0YuZ2V0KGxlLnJpZ2h0KTpsZS5yaWdodDtrLm5vZGVzSW5SZWxhdGl2ZUhvcml6b250YWwuaW5jbHVkZXMoaGUpfHwoay5ub2Rlc0luUmVsYXRpdmVIb3Jpem9udGFsLnB1c2goaGUpLGsubm9kZVRvUmVsYXRpdmVDb25zdHJhaW50TWFwSG9yaXpvbnRhbC5zZXQoaGUsW10pLGsuZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5oYXMoaGUpP2subm9kZVRvVGVtcFBvc2l0aW9uTWFwSG9yaXpvbnRhbC5zZXQoaGUsay5pZFRvTm9kZU1hcC5nZXQoay5kdW1teVRvTm9kZUZvclZlcnRpY2FsQWxpZ25tZW50LmdldChoZSlbMF0pLmdldENlbnRlclgoKSk6ay5ub2RlVG9UZW1wUG9zaXRpb25NYXBIb3Jpem9udGFsLnNldChoZSxrLmlkVG9Ob2RlTWFwLmdldChoZSkuZ2V0Q2VudGVyWCgpKSksay5ub2Rlc0luUmVsYXRpdmVIb3Jpem9udGFsLmluY2x1ZGVzKEspfHwoay5ub2Rlc0luUmVsYXRpdmVIb3Jpem9udGFsLnB1c2goSyksay5ub2RlVG9SZWxhdGl2ZUNvbnN0cmFpbnRNYXBIb3Jpem9udGFsLnNldChLLFtdKSxrLmR1bW15VG9Ob2RlRm9yVmVydGljYWxBbGlnbm1lbnQuaGFzKEspP2subm9kZVRvVGVtcFBvc2l0aW9uTWFwSG9yaXpvbnRhbC5zZXQoSyxrLmlkVG9Ob2RlTWFwLmdldChrLmR1bW15VG9Ob2RlRm9yVmVydGljYWxBbGlnbm1lbnQuZ2V0KEspWzBdKS5nZXRDZW50ZXJYKCkpOmsubm9kZVRvVGVtcFBvc2l0aW9uTWFwSG9yaXpvbnRhbC5zZXQoSyxrLmlkVG9Ob2RlTWFwLmdldChLKS5nZXRDZW50ZXJYKCkpKSxrLm5vZGVUb1JlbGF0aXZlQ29uc3RyYWludE1hcEhvcml6b250YWwuZ2V0KGhlKS5wdXNoKHtyaWdodDpLLGdhcDpsZS5nYXB9KSxrLm5vZGVUb1JlbGF0aXZlQ29uc3RyYWludE1hcEhvcml6b250YWwuZ2V0KEspLnB1c2goe2xlZnQ6aGUsZ2FwOmxlLmdhcH0pfWVsc2V7dmFyIFg9UC5oYXMobGUudG9wKT9QLmdldChsZS50b3ApOmxlLnRvcCx0ZT1QLmhhcyhsZS5ib3R0b20pP1AuZ2V0KGxlLmJvdHRvbSk6bGUuYm90dG9tO2subm9kZXNJblJlbGF0aXZlVmVydGljYWwuaW5jbHVkZXMoWCl8fChrLm5vZGVzSW5SZWxhdGl2ZVZlcnRpY2FsLnB1c2goWCksay5ub2RlVG9SZWxhdGl2ZUNvbnN0cmFpbnRNYXBWZXJ0aWNhbC5zZXQoWCxbXSksay5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuaGFzKFgpP2subm9kZVRvVGVtcFBvc2l0aW9uTWFwVmVydGljYWwuc2V0KFgsay5pZFRvTm9kZU1hcC5nZXQoay5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuZ2V0KFgpWzBdKS5nZXRDZW50ZXJZKCkpOmsubm9kZVRvVGVtcFBvc2l0aW9uTWFwVmVydGljYWwuc2V0KFgsay5pZFRvTm9kZU1hcC5nZXQoWCkuZ2V0Q2VudGVyWSgpKSksay5ub2Rlc0luUmVsYXRpdmVWZXJ0aWNhbC5pbmNsdWRlcyh0ZSl8fChrLm5vZGVzSW5SZWxhdGl2ZVZlcnRpY2FsLnB1c2godGUpLGsubm9kZVRvUmVsYXRpdmVDb25zdHJhaW50TWFwVmVydGljYWwuc2V0KHRlLFtdKSxrLmR1bW15VG9Ob2RlRm9ySG9yaXpvbnRhbEFsaWdubWVudC5oYXModGUpP2subm9kZVRvVGVtcFBvc2l0aW9uTWFwVmVydGljYWwuc2V0KHRlLGsuaWRUb05vZGVNYXAuZ2V0KGsuZHVtbXlUb05vZGVGb3JIb3Jpem9udGFsQWxpZ25tZW50LmdldCh0ZSlbMF0pLmdldENlbnRlclkoKSk6ay5ub2RlVG9UZW1wUG9zaXRpb25NYXBWZXJ0aWNhbC5zZXQodGUsay5pZFRvTm9kZU1hcC5nZXQodGUpLmdldENlbnRlclkoKSkpLGsubm9kZVRvUmVsYXRpdmVDb25zdHJhaW50TWFwVmVydGljYWwuZ2V0KFgpLnB1c2goe2JvdHRvbTp0ZSxnYXA6bGUuZ2FwfSksay5ub2RlVG9SZWxhdGl2ZUNvbnN0cmFpbnRNYXBWZXJ0aWNhbC5nZXQodGUpLnB1c2goe3RvcDpYLGdhcDpsZS5nYXB9KX19KTtlbHNle3ZhciBIPW5ldyBNYXAsUT1uZXcgTWFwO3RoaXMuY29uc3RyYWludHMucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50LmZvckVhY2goZnVuY3Rpb24obGUpe2lmKGxlLmxlZnQpe3ZhciBoZT1GLmhhcyhsZS5sZWZ0KT9GLmdldChsZS5sZWZ0KTpsZS5sZWZ0LEs9Ri5oYXMobGUucmlnaHQpP0YuZ2V0KGxlLnJpZ2h0KTpsZS5yaWdodDtILmhhcyhoZSk/SC5nZXQoaGUpLnB1c2goSyk6SC5zZXQoaGUsW0tdKSxILmhhcyhLKT9ILmdldChLKS5wdXNoKGhlKTpILnNldChLLFtoZV0pfWVsc2V7dmFyIFg9UC5oYXMobGUudG9wKT9QLmdldChsZS50b3ApOmxlLnRvcCx0ZT1QLmhhcyhsZS5ib3R0b20pP1AuZ2V0KGxlLmJvdHRvbSk6bGUuYm90dG9tO1EuaGFzKFgpP1EuZ2V0KFgpLnB1c2godGUpOlEuc2V0KFgsW3RlXSksUS5oYXModGUpP1EuZ2V0KHRlKS5wdXNoKFgpOlEuc2V0KHRlLFtYXSl9fSk7dmFyIGo9byhmdW5jdGlvbihoZSxLKXt2YXIgWD1bXSx0ZT1bXSxKPW5ldyBfLHNlPW5ldyBTZXQsdWU9MDtyZXR1cm4gaGUuZm9yRWFjaChmdW5jdGlvbihaLFNlKXtpZighc2UuaGFzKFNlKSl7WFt1ZV09W10sdGVbdWVdPSExO3ZhciBjZT1TZTtmb3IoSi5wdXNoKGNlKSxzZS5hZGQoY2UpLFhbdWVdLnB1c2goY2UpO0oubGVuZ3RoIT0wOyl7Y2U9Si5zaGlmdCgpLEsuaGFzKGNlKSYmKHRlW3VlXT0hMCk7dmFyIGFlPWhlLmdldChjZSk7YWUuZm9yRWFjaChmdW5jdGlvbihPZSl7c2UuaGFzKE9lKXx8KEoucHVzaChPZSksc2UuYWRkKE9lKSxYW3VlXS5wdXNoKE9lKSl9KX11ZSsrfX0pLHtjb21wb25lbnRzOlgsaXNGaXhlZDp0ZX19LCJjb25zdHJ1Y3RDb21wb25lbnRzIiksaWU9aihILGsuZml4ZWROb2Rlc09uSG9yaXpvbnRhbCk7dGhpcy5jb21wb25lbnRzT25Ib3Jpem9udGFsPWllLmNvbXBvbmVudHMsdGhpcy5maXhlZENvbXBvbmVudHNPbkhvcml6b250YWw9aWUuaXNGaXhlZDt2YXIgbmU9aihRLGsuZml4ZWROb2Rlc09uVmVydGljYWwpO3RoaXMuY29tcG9uZW50c09uVmVydGljYWw9bmUuY29tcG9uZW50cyx0aGlzLmZpeGVkQ29tcG9uZW50c09uVmVydGljYWw9bmUuaXNGaXhlZH19fSxJLnByb3RvdHlwZS51cGRhdGVEaXNwbGFjZW1lbnRzPWZ1bmN0aW9uKCl7dmFyIGs9dGhpcztpZih0aGlzLmNvbnN0cmFpbnRzLmZpeGVkTm9kZUNvbnN0cmFpbnQmJnRoaXMuY29uc3RyYWludHMuZml4ZWROb2RlQ29uc3RyYWludC5mb3JFYWNoKGZ1bmN0aW9uKG5lKXt2YXIgbGU9ay5pZFRvTm9kZU1hcC5nZXQobmUubm9kZUlkKTtsZS5kaXNwbGFjZW1lbnRYPTAsbGUuZGlzcGxhY2VtZW50WT0wfSksdGhpcy5jb25zdHJhaW50cy5hbGlnbm1lbnRDb25zdHJhaW50KXtpZih0aGlzLmNvbnN0cmFpbnRzLmFsaWdubWVudENvbnN0cmFpbnQudmVydGljYWwpZm9yKHZhciBMPXRoaXMuY29uc3RyYWludHMuYWxpZ25tZW50Q29uc3RyYWludC52ZXJ0aWNhbCxSPTA7UjxMLmxlbmd0aDtSKyspe2Zvcih2YXIgTz0wLE09MDtNPExbUl0ubGVuZ3RoO00rKyl7aWYodGhpcy5maXhlZE5vZGVTZXQuaGFzKExbUl1bTV0pKXtPPTA7YnJlYWt9Tys9dGhpcy5pZFRvTm9kZU1hcC5nZXQoTFtSXVtNXSkuZGlzcGxhY2VtZW50WH1mb3IodmFyIEI9Ty9MW1JdLmxlbmd0aCxNPTA7TTxMW1JdLmxlbmd0aDtNKyspdGhpcy5pZFRvTm9kZU1hcC5nZXQoTFtSXVtNXSkuZGlzcGxhY2VtZW50WD1CfWlmKHRoaXMuY29uc3RyYWludHMuYWxpZ25tZW50Q29uc3RyYWludC5ob3Jpem9udGFsKWZvcih2YXIgRj10aGlzLmNvbnN0cmFpbnRzLmFsaWdubWVudENvbnN0cmFpbnQuaG9yaXpvbnRhbCxSPTA7UjxGLmxlbmd0aDtSKyspe2Zvcih2YXIgUD0wLE09MDtNPEZbUl0ubGVuZ3RoO00rKyl7aWYodGhpcy5maXhlZE5vZGVTZXQuaGFzKEZbUl1bTV0pKXtQPTA7YnJlYWt9UCs9dGhpcy5pZFRvTm9kZU1hcC5nZXQoRltSXVtNXSkuZGlzcGxhY2VtZW50WX1mb3IodmFyIHo9UC9GW1JdLmxlbmd0aCxNPTA7TTxGW1JdLmxlbmd0aDtNKyspdGhpcy5pZFRvTm9kZU1hcC5nZXQoRltSXVtNXSkuZGlzcGxhY2VtZW50WT16fX1pZih0aGlzLmNvbnN0cmFpbnRzLnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludClpZihtLlJFTEFYX01PVkVNRU5UX09OX0NPTlNUUkFJTlRTKXRoaXMudG90YWxJdGVyYXRpb25zJTEwPT0wJiYodGhpcy5zaHVmZmxlKHRoaXMubm9kZXNJblJlbGF0aXZlSG9yaXpvbnRhbCksdGhpcy5zaHVmZmxlKHRoaXMubm9kZXNJblJlbGF0aXZlVmVydGljYWwpKSx0aGlzLm5vZGVzSW5SZWxhdGl2ZUhvcml6b250YWwuZm9yRWFjaChmdW5jdGlvbihuZSl7aWYoIWsuZml4ZWROb2Rlc09uSG9yaXpvbnRhbC5oYXMobmUpKXt2YXIgbGU9MDtrLmR1bW15VG9Ob2RlRm9yVmVydGljYWxBbGlnbm1lbnQuaGFzKG5lKT9sZT1rLmlkVG9Ob2RlTWFwLmdldChrLmR1bW15VG9Ob2RlRm9yVmVydGljYWxBbGlnbm1lbnQuZ2V0KG5lKVswXSkuZGlzcGxhY2VtZW50WDpsZT1rLmlkVG9Ob2RlTWFwLmdldChuZSkuZGlzcGxhY2VtZW50WCxrLm5vZGVUb1JlbGF0aXZlQ29uc3RyYWludE1hcEhvcml6b250YWwuZ2V0KG5lKS5mb3JFYWNoKGZ1bmN0aW9uKGhlKXtpZihoZS5yaWdodCl7dmFyIEs9ay5ub2RlVG9UZW1wUG9zaXRpb25NYXBIb3Jpem9udGFsLmdldChoZS5yaWdodCktay5ub2RlVG9UZW1wUG9zaXRpb25NYXBIb3Jpem9udGFsLmdldChuZSktbGU7SzxoZS5nYXAmJihsZS09aGUuZ2FwLUspfWVsc2V7dmFyIEs9ay5ub2RlVG9UZW1wUG9zaXRpb25NYXBIb3Jpem9udGFsLmdldChuZSktay5ub2RlVG9UZW1wUG9zaXRpb25NYXBIb3Jpem9udGFsLmdldChoZS5sZWZ0KStsZTtLPGhlLmdhcCYmKGxlKz1oZS5nYXAtSyl9fSksay5ub2RlVG9UZW1wUG9zaXRpb25NYXBIb3Jpem9udGFsLnNldChuZSxrLm5vZGVUb1RlbXBQb3NpdGlvbk1hcEhvcml6b250YWwuZ2V0KG5lKStsZSksay5kdW1teVRvTm9kZUZvclZlcnRpY2FsQWxpZ25tZW50LmhhcyhuZSk/ay5kdW1teVRvTm9kZUZvclZlcnRpY2FsQWxpZ25tZW50LmdldChuZSkuZm9yRWFjaChmdW5jdGlvbihoZSl7ay5pZFRvTm9kZU1hcC5nZXQoaGUpLmRpc3BsYWNlbWVudFg9bGV9KTprLmlkVG9Ob2RlTWFwLmdldChuZSkuZGlzcGxhY2VtZW50WD1sZX19KSx0aGlzLm5vZGVzSW5SZWxhdGl2ZVZlcnRpY2FsLmZvckVhY2goZnVuY3Rpb24obmUpe2lmKCFrLmZpeGVkTm9kZXNPbkhvcml6b250YWwuaGFzKG5lKSl7dmFyIGxlPTA7ay5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuaGFzKG5lKT9sZT1rLmlkVG9Ob2RlTWFwLmdldChrLmR1bW15VG9Ob2RlRm9ySG9yaXpvbnRhbEFsaWdubWVudC5nZXQobmUpWzBdKS5kaXNwbGFjZW1lbnRZOmxlPWsuaWRUb05vZGVNYXAuZ2V0KG5lKS5kaXNwbGFjZW1lbnRZLGsubm9kZVRvUmVsYXRpdmVDb25zdHJhaW50TWFwVmVydGljYWwuZ2V0KG5lKS5mb3JFYWNoKGZ1bmN0aW9uKGhlKXtpZihoZS5ib3R0b20pe3ZhciBLPWsubm9kZVRvVGVtcFBvc2l0aW9uTWFwVmVydGljYWwuZ2V0KGhlLmJvdHRvbSktay5ub2RlVG9UZW1wUG9zaXRpb25NYXBWZXJ0aWNhbC5nZXQobmUpLWxlO0s8aGUuZ2FwJiYobGUtPWhlLmdhcC1LKX1lbHNle3ZhciBLPWsubm9kZVRvVGVtcFBvc2l0aW9uTWFwVmVydGljYWwuZ2V0KG5lKS1rLm5vZGVUb1RlbXBQb3NpdGlvbk1hcFZlcnRpY2FsLmdldChoZS50b3ApK2xlO0s8aGUuZ2FwJiYobGUrPWhlLmdhcC1LKX19KSxrLm5vZGVUb1RlbXBQb3NpdGlvbk1hcFZlcnRpY2FsLnNldChuZSxrLm5vZGVUb1RlbXBQb3NpdGlvbk1hcFZlcnRpY2FsLmdldChuZSkrbGUpLGsuZHVtbXlUb05vZGVGb3JIb3Jpem9udGFsQWxpZ25tZW50LmhhcyhuZSk/ay5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuZ2V0KG5lKS5mb3JFYWNoKGZ1bmN0aW9uKGhlKXtrLmlkVG9Ob2RlTWFwLmdldChoZSkuZGlzcGxhY2VtZW50WT1sZX0pOmsuaWRUb05vZGVNYXAuZ2V0KG5lKS5kaXNwbGFjZW1lbnRZPWxlfX0pO2Vsc2V7Zm9yKHZhciBSPTA7Ujx0aGlzLmNvbXBvbmVudHNPbkhvcml6b250YWwubGVuZ3RoO1IrKyl7dmFyICQ9dGhpcy5jb21wb25lbnRzT25Ib3Jpem9udGFsW1JdO2lmKHRoaXMuZml4ZWRDb21wb25lbnRzT25Ib3Jpem9udGFsW1JdKWZvcih2YXIgTT0wO008JC5sZW5ndGg7TSsrKXRoaXMuZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5oYXMoJFtNXSk/dGhpcy5kdW1teVRvTm9kZUZvclZlcnRpY2FsQWxpZ25tZW50LmdldCgkW01dKS5mb3JFYWNoKGZ1bmN0aW9uKGhlKXtrLmlkVG9Ob2RlTWFwLmdldChoZSkuZGlzcGxhY2VtZW50WD0wfSk6dGhpcy5pZFRvTm9kZU1hcC5nZXQoJFtNXSkuZGlzcGxhY2VtZW50WD0wO2Vsc2V7Zm9yKHZhciBIPTAsUT0wLE09MDtNPCQubGVuZ3RoO00rKylpZih0aGlzLmR1bW15VG9Ob2RlRm9yVmVydGljYWxBbGlnbm1lbnQuaGFzKCRbTV0pKXt2YXIgaj10aGlzLmR1bW15VG9Ob2RlRm9yVmVydGljYWxBbGlnbm1lbnQuZ2V0KCRbTV0pO0grPWoubGVuZ3RoKnRoaXMuaWRUb05vZGVNYXAuZ2V0KGpbMF0pLmRpc3BsYWNlbWVudFgsUSs9ai5sZW5ndGh9ZWxzZSBIKz10aGlzLmlkVG9Ob2RlTWFwLmdldCgkW01dKS5kaXNwbGFjZW1lbnRYLFErKztmb3IodmFyIGllPUgvUSxNPTA7TTwkLmxlbmd0aDtNKyspdGhpcy5kdW1teVRvTm9kZUZvclZlcnRpY2FsQWxpZ25tZW50LmhhcygkW01dKT90aGlzLmR1bW15VG9Ob2RlRm9yVmVydGljYWxBbGlnbm1lbnQuZ2V0KCRbTV0pLmZvckVhY2goZnVuY3Rpb24oaGUpe2suaWRUb05vZGVNYXAuZ2V0KGhlKS5kaXNwbGFjZW1lbnRYPWllfSk6dGhpcy5pZFRvTm9kZU1hcC5nZXQoJFtNXSkuZGlzcGxhY2VtZW50WD1pZX19Zm9yKHZhciBSPTA7Ujx0aGlzLmNvbXBvbmVudHNPblZlcnRpY2FsLmxlbmd0aDtSKyspe3ZhciAkPXRoaXMuY29tcG9uZW50c09uVmVydGljYWxbUl07aWYodGhpcy5maXhlZENvbXBvbmVudHNPblZlcnRpY2FsW1JdKWZvcih2YXIgTT0wO008JC5sZW5ndGg7TSsrKXRoaXMuZHVtbXlUb05vZGVGb3JIb3Jpem9udGFsQWxpZ25tZW50LmhhcygkW01dKT90aGlzLmR1bW15VG9Ob2RlRm9ySG9yaXpvbnRhbEFsaWdubWVudC5nZXQoJFtNXSkuZm9yRWFjaChmdW5jdGlvbihLKXtrLmlkVG9Ob2RlTWFwLmdldChLKS5kaXNwbGFjZW1lbnRZPTB9KTp0aGlzLmlkVG9Ob2RlTWFwLmdldCgkW01dKS5kaXNwbGFjZW1lbnRZPTA7ZWxzZXtmb3IodmFyIEg9MCxRPTAsTT0wO008JC5sZW5ndGg7TSsrKWlmKHRoaXMuZHVtbXlUb05vZGVGb3JIb3Jpem9udGFsQWxpZ25tZW50LmhhcygkW01dKSl7dmFyIGo9dGhpcy5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuZ2V0KCRbTV0pO0grPWoubGVuZ3RoKnRoaXMuaWRUb05vZGVNYXAuZ2V0KGpbMF0pLmRpc3BsYWNlbWVudFksUSs9ai5sZW5ndGh9ZWxzZSBIKz10aGlzLmlkVG9Ob2RlTWFwLmdldCgkW01dKS5kaXNwbGFjZW1lbnRZLFErKztmb3IodmFyIGllPUgvUSxNPTA7TTwkLmxlbmd0aDtNKyspdGhpcy5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuaGFzKCRbTV0pP3RoaXMuZHVtbXlUb05vZGVGb3JIb3Jpem9udGFsQWxpZ25tZW50LmdldCgkW01dKS5mb3JFYWNoKGZ1bmN0aW9uKEope2suaWRUb05vZGVNYXAuZ2V0KEopLmRpc3BsYWNlbWVudFk9aWV9KTp0aGlzLmlkVG9Ob2RlTWFwLmdldCgkW01dKS5kaXNwbGFjZW1lbnRZPWllfX19fSxJLnByb3RvdHlwZS5jYWxjdWxhdGVOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvblRvPWZ1bmN0aW9uKCl7dmFyIGs9W10sTCxSPXRoaXMuZ3JhcGhNYW5hZ2VyLmdldEdyYXBocygpLE89Ui5sZW5ndGgsTTtmb3IoTT0wO008TztNKyspTD1SW01dLEwudXBkYXRlQ29ubmVjdGVkKCksTC5pc0Nvbm5lY3RlZHx8KGs9ay5jb25jYXQoTC5nZXROb2RlcygpKSk7cmV0dXJuIGt9LEkucHJvdG90eXBlLmNyZWF0ZUJlbmRwb2ludHM9ZnVuY3Rpb24oKXt2YXIgaz1bXTtrPWsuY29uY2F0KHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbEVkZ2VzKCkpO3ZhciBMPW5ldyBTZXQsUjtmb3IoUj0wO1I8ay5sZW5ndGg7UisrKXt2YXIgTz1rW1JdO2lmKCFMLmhhcyhPKSl7dmFyIE09Ty5nZXRTb3VyY2UoKSxCPU8uZ2V0VGFyZ2V0KCk7aWYoTT09QilPLmdldEJlbmRwb2ludHMoKS5wdXNoKG5ldyBiKSxPLmdldEJlbmRwb2ludHMoKS5wdXNoKG5ldyBiKSx0aGlzLmNyZWF0ZUR1bW15Tm9kZXNGb3JCZW5kcG9pbnRzKE8pLEwuYWRkKE8pO2Vsc2V7dmFyIEY9W107aWYoRj1GLmNvbmNhdChNLmdldEVkZ2VMaXN0VG9Ob2RlKEIpKSxGPUYuY29uY2F0KEIuZ2V0RWRnZUxpc3RUb05vZGUoTSkpLCFMLmhhcyhGWzBdKSl7aWYoRi5sZW5ndGg+MSl7dmFyIFA7Zm9yKFA9MDtQPEYubGVuZ3RoO1ArKyl7dmFyIHo9RltQXTt6LmdldEJlbmRwb2ludHMoKS5wdXNoKG5ldyBiKSx0aGlzLmNyZWF0ZUR1bW15Tm9kZXNGb3JCZW5kcG9pbnRzKHopfX1GLmZvckVhY2goZnVuY3Rpb24oJCl7TC5hZGQoJCl9KX19fWlmKEwuc2l6ZT09ay5sZW5ndGgpYnJlYWt9fSxJLnByb3RvdHlwZS5wb3NpdGlvbk5vZGVzUmFkaWFsbHk9ZnVuY3Rpb24oayl7Zm9yKHZhciBMPW5ldyB4KDAsMCksUj1NYXRoLmNlaWwoTWF0aC5zcXJ0KGsubGVuZ3RoKSksTz0wLE09MCxCPTAsRj1uZXcgYigwLDApLFA9MDtQPGsubGVuZ3RoO1ArKyl7UCVSPT0wJiYoQj0wLE09TyxQIT0wJiYoTSs9bS5ERUZBVUxUX0NPTVBPTkVOVF9TRVBFUkFUSU9OKSxPPTApO3ZhciB6PWtbUF0sJD1DLmZpbmRDZW50ZXJPZlRyZWUoeik7TC54PUIsTC55PU0sRj1JLnJhZGlhbExheW91dCh6LCQsTCksRi55Pk8mJihPPU1hdGguZmxvb3IoRi55KSksQj1NYXRoLmZsb29yKEYueCttLkRFRkFVTFRfQ09NUE9ORU5UX1NFUEVSQVRJT04pfXRoaXMudHJhbnNmb3JtKG5ldyBiKHYuV09STERfQ0VOVEVSX1gtRi54LzIsdi5XT1JMRF9DRU5URVJfWS1GLnkvMikpfSxJLnJhZGlhbExheW91dD1mdW5jdGlvbihrLEwsUil7dmFyIE89TWF0aC5tYXgodGhpcy5tYXhEaWFnb25hbEluVHJlZShrKSxtLkRFRkFVTFRfUkFESUFMX1NFUEFSQVRJT04pO0kuYnJhbmNoUmFkaWFsTGF5b3V0KEwsbnVsbCwwLDM1OSwwLE8pO3ZhciBNPUEuY2FsY3VsYXRlQm91bmRzKGspLEI9bmV3IFM7Qi5zZXREZXZpY2VPcmdYKE0uZ2V0TWluWCgpKSxCLnNldERldmljZU9yZ1koTS5nZXRNaW5ZKCkpLEIuc2V0V29ybGRPcmdYKFIueCksQi5zZXRXb3JsZE9yZ1koUi55KTtmb3IodmFyIEY9MDtGPGsubGVuZ3RoO0YrKyl7dmFyIFA9a1tGXTtQLnRyYW5zZm9ybShCKX12YXIgej1uZXcgYihNLmdldE1heFgoKSxNLmdldE1heFkoKSk7cmV0dXJuIEIuaW52ZXJzZVRyYW5zZm9ybVBvaW50KHopfSxJLmJyYW5jaFJhZGlhbExheW91dD1mdW5jdGlvbihrLEwsUixPLE0sQil7dmFyIEY9KE8tUisxKS8yO0Y8MCYmKEYrPTE4MCk7dmFyIFA9KEYrUiklMzYwLHo9UCpFLlRXT19QSS8zNjAsJD1NYXRoLmNvcyh6KSxIPU0qTWF0aC5jb3MoeiksUT1NKk1hdGguc2luKHopO2suc2V0Q2VudGVyKEgsUSk7dmFyIGo9W107aj1qLmNvbmNhdChrLmdldEVkZ2VzKCkpO3ZhciBpZT1qLmxlbmd0aDtMIT1udWxsJiZpZS0tO2Zvcih2YXIgbmU9MCxsZT1qLmxlbmd0aCxoZSxLPWsuZ2V0RWRnZXNCZXR3ZWVuKEwpO0subGVuZ3RoPjE7KXt2YXIgWD1LWzBdO0suc3BsaWNlKDAsMSk7dmFyIHRlPWouaW5kZXhPZihYKTt0ZT49MCYmai5zcGxpY2UodGUsMSksbGUtLSxpZS0tfUwhPW51bGw/aGU9KGouaW5kZXhPZihLWzBdKSsxKSVsZTpoZT0wO2Zvcih2YXIgSj1NYXRoLmFicyhPLVIpL2llLHNlPWhlO25lIT1pZTtzZT0rK3NlJWxlKXt2YXIgdWU9altzZV0uZ2V0T3RoZXJFbmQoayk7aWYodWUhPUwpe3ZhciBaPShSK25lKkopJTM2MCxTZT0oWitKKSUzNjA7SS5icmFuY2hSYWRpYWxMYXlvdXQodWUsayxaLFNlLE0rQixCKSxuZSsrfX19LEkubWF4RGlhZ29uYWxJblRyZWU9ZnVuY3Rpb24oayl7Zm9yKHZhciBMPVQuTUlOX1ZBTFVFLFI9MDtSPGsubGVuZ3RoO1IrKyl7dmFyIE89a1tSXSxNPU8uZ2V0RGlhZ29uYWwoKTtNPkwmJihMPU0pfXJldHVybiBMfSxJLnByb3RvdHlwZS5jYWxjUmVwdWxzaW9uUmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gMioodGhpcy5sZXZlbCsxKSp0aGlzLmlkZWFsRWRnZUxlbmd0aH0sSS5wcm90b3R5cGUuZ3JvdXBaZXJvRGVncmVlTWVtYmVycz1mdW5jdGlvbigpe3ZhciBrPXRoaXMsTD17fTt0aGlzLm1lbWJlckdyb3Vwcz17fSx0aGlzLmlkVG9EdW1teU5vZGU9e307Zm9yKHZhciBSPVtdLE89dGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsTm9kZXMoKSxNPTA7TTxPLmxlbmd0aDtNKyspe3ZhciBCPU9bTV0sRj1CLmdldFBhcmVudCgpO3RoaXMuZ2V0Tm9kZURlZ3JlZVdpdGhDaGlsZHJlbihCKT09PTAmJihGLmlkPT1udWxsfHwhdGhpcy5nZXRUb0JlVGlsZWQoRikpJiZSLnB1c2goQil9Zm9yKHZhciBNPTA7TTxSLmxlbmd0aDtNKyspe3ZhciBCPVJbTV0sUD1CLmdldFBhcmVudCgpLmlkO3R5cGVvZiBMW1BdPiJ1IiYmKExbUF09W10pLExbUF09TFtQXS5jb25jYXQoQil9T2JqZWN0LmtleXMoTCkuZm9yRWFjaChmdW5jdGlvbih6KXtpZihMW3pdLmxlbmd0aD4xKXt2YXIgJD0iRHVtbXlDb21wb3VuZF8iK3o7ay5tZW1iZXJHcm91cHNbJF09TFt6XTt2YXIgSD1MW3pdWzBdLmdldFBhcmVudCgpLFE9bmV3IGQoay5ncmFwaE1hbmFnZXIpO1EuaWQ9JCxRLnBhZGRpbmdMZWZ0PUgucGFkZGluZ0xlZnR8fDAsUS5wYWRkaW5nUmlnaHQ9SC5wYWRkaW5nUmlnaHR8fDAsUS5wYWRkaW5nQm90dG9tPUgucGFkZGluZ0JvdHRvbXx8MCxRLnBhZGRpbmdUb3A9SC5wYWRkaW5nVG9wfHwwLGsuaWRUb0R1bW15Tm9kZVskXT1RO3ZhciBqPWsuZ2V0R3JhcGhNYW5hZ2VyKCkuYWRkKGsubmV3R3JhcGgoKSxRKSxpZT1ILmdldENoaWxkKCk7aWUuYWRkKFEpO2Zvcih2YXIgbmU9MDtuZTxMW3pdLmxlbmd0aDtuZSsrKXt2YXIgbGU9TFt6XVtuZV07aWUucmVtb3ZlKGxlKSxqLmFkZChsZSl9fX0pfSxJLnByb3RvdHlwZS5jbGVhckNvbXBvdW5kcz1mdW5jdGlvbigpe3ZhciBrPXt9LEw9e307dGhpcy5wZXJmb3JtREZTT25Db21wb3VuZHMoKTtmb3IodmFyIFI9MDtSPHRoaXMuY29tcG91bmRPcmRlci5sZW5ndGg7UisrKUxbdGhpcy5jb21wb3VuZE9yZGVyW1JdLmlkXT10aGlzLmNvbXBvdW5kT3JkZXJbUl0sa1t0aGlzLmNvbXBvdW5kT3JkZXJbUl0uaWRdPVtdLmNvbmNhdCh0aGlzLmNvbXBvdW5kT3JkZXJbUl0uZ2V0Q2hpbGQoKS5nZXROb2RlcygpKSx0aGlzLmdyYXBoTWFuYWdlci5yZW1vdmUodGhpcy5jb21wb3VuZE9yZGVyW1JdLmdldENoaWxkKCkpLHRoaXMuY29tcG91bmRPcmRlcltSXS5jaGlsZD1udWxsO3RoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsTm9kZXMoKSx0aGlzLnRpbGVDb21wb3VuZE1lbWJlcnMoayxMKX0sSS5wcm90b3R5cGUuY2xlYXJaZXJvRGVncmVlTWVtYmVycz1mdW5jdGlvbigpe3ZhciBrPXRoaXMsTD10aGlzLnRpbGVkWmVyb0RlZ3JlZVBhY2s9W107T2JqZWN0LmtleXModGhpcy5tZW1iZXJHcm91cHMpLmZvckVhY2goZnVuY3Rpb24oUil7dmFyIE89ay5pZFRvRHVtbXlOb2RlW1JdO2lmKExbUl09ay50aWxlTm9kZXMoay5tZW1iZXJHcm91cHNbUl0sTy5wYWRkaW5nTGVmdCtPLnBhZGRpbmdSaWdodCksTy5yZWN0LndpZHRoPUxbUl0ud2lkdGgsTy5yZWN0LmhlaWdodD1MW1JdLmhlaWdodCxPLnNldENlbnRlcihMW1JdLmNlbnRlclgsTFtSXS5jZW50ZXJZKSxPLmxhYmVsTWFyZ2luTGVmdD0wLE8ubGFiZWxNYXJnaW5Ub3A9MCxtLk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUyl7dmFyIE09Ty5yZWN0LndpZHRoLEI9Ty5yZWN0LmhlaWdodDtPLmxhYmVsV2lkdGgmJihPLmxhYmVsUG9zSG9yaXpvbnRhbD09ImxlZnQiPyhPLnJlY3QueC09Ty5sYWJlbFdpZHRoLE8uc2V0V2lkdGgoTStPLmxhYmVsV2lkdGgpLE8ubGFiZWxNYXJnaW5MZWZ0PU8ubGFiZWxXaWR0aCk6Ty5sYWJlbFBvc0hvcml6b250YWw9PSJjZW50ZXIiJiZPLmxhYmVsV2lkdGg+TT8oTy5yZWN0LngtPShPLmxhYmVsV2lkdGgtTSkvMixPLnNldFdpZHRoKE8ubGFiZWxXaWR0aCksTy5sYWJlbE1hcmdpbkxlZnQ9KE8ubGFiZWxXaWR0aC1NKS8yKTpPLmxhYmVsUG9zSG9yaXpvbnRhbD09InJpZ2h0IiYmTy5zZXRXaWR0aChNK08ubGFiZWxXaWR0aCkpLE8ubGFiZWxIZWlnaHQmJihPLmxhYmVsUG9zVmVydGljYWw9PSJ0b3AiPyhPLnJlY3QueS09Ty5sYWJlbEhlaWdodCxPLnNldEhlaWdodChCK08ubGFiZWxIZWlnaHQpLE8ubGFiZWxNYXJnaW5Ub3A9Ty5sYWJlbEhlaWdodCk6Ty5sYWJlbFBvc1ZlcnRpY2FsPT0iY2VudGVyIiYmTy5sYWJlbEhlaWdodD5CPyhPLnJlY3QueS09KE8ubGFiZWxIZWlnaHQtQikvMixPLnNldEhlaWdodChPLmxhYmVsSGVpZ2h0KSxPLmxhYmVsTWFyZ2luVG9wPShPLmxhYmVsSGVpZ2h0LUIpLzIpOk8ubGFiZWxQb3NWZXJ0aWNhbD09ImJvdHRvbSImJk8uc2V0SGVpZ2h0KEIrTy5sYWJlbEhlaWdodCkpfX0pfSxJLnByb3RvdHlwZS5yZXBvcHVsYXRlQ29tcG91bmRzPWZ1bmN0aW9uKCl7Zm9yKHZhciBrPXRoaXMuY29tcG91bmRPcmRlci5sZW5ndGgtMTtrPj0wO2stLSl7dmFyIEw9dGhpcy5jb21wb3VuZE9yZGVyW2tdLFI9TC5pZCxPPUwucGFkZGluZ0xlZnQsTT1MLnBhZGRpbmdUb3AsQj1MLmxhYmVsTWFyZ2luTGVmdCxGPUwubGFiZWxNYXJnaW5Ub3A7dGhpcy5hZGp1c3RMb2NhdGlvbnModGhpcy50aWxlZE1lbWJlclBhY2tbUl0sTC5yZWN0LngsTC5yZWN0LnksTyxNLEIsRil9fSxJLnByb3RvdHlwZS5yZXBvcHVsYXRlWmVyb0RlZ3JlZU1lbWJlcnM9ZnVuY3Rpb24oKXt2YXIgaz10aGlzLEw9dGhpcy50aWxlZFplcm9EZWdyZWVQYWNrO09iamVjdC5rZXlzKEwpLmZvckVhY2goZnVuY3Rpb24oUil7dmFyIE89ay5pZFRvRHVtbXlOb2RlW1JdLE09Ty5wYWRkaW5nTGVmdCxCPU8ucGFkZGluZ1RvcCxGPU8ubGFiZWxNYXJnaW5MZWZ0LFA9Ty5sYWJlbE1hcmdpblRvcDtrLmFkanVzdExvY2F0aW9ucyhMW1JdLE8ucmVjdC54LE8ucmVjdC55LE0sQixGLFApfSl9LEkucHJvdG90eXBlLmdldFRvQmVUaWxlZD1mdW5jdGlvbihrKXt2YXIgTD1rLmlkO2lmKHRoaXMudG9CZVRpbGVkW0xdIT1udWxsKXJldHVybiB0aGlzLnRvQmVUaWxlZFtMXTt2YXIgUj1rLmdldENoaWxkKCk7aWYoUj09bnVsbClyZXR1cm4gdGhpcy50b0JlVGlsZWRbTF09ITEsITE7Zm9yKHZhciBPPVIuZ2V0Tm9kZXMoKSxNPTA7TTxPLmxlbmd0aDtNKyspe3ZhciBCPU9bTV07aWYodGhpcy5nZXROb2RlRGVncmVlKEIpPjApcmV0dXJuIHRoaXMudG9CZVRpbGVkW0xdPSExLCExO2lmKEIuZ2V0Q2hpbGQoKT09bnVsbCl7dGhpcy50b0JlVGlsZWRbQi5pZF09ITE7Y29udGludWV9aWYoIXRoaXMuZ2V0VG9CZVRpbGVkKEIpKXJldHVybiB0aGlzLnRvQmVUaWxlZFtMXT0hMSwhMX1yZXR1cm4gdGhpcy50b0JlVGlsZWRbTF09ITAsITB9LEkucHJvdG90eXBlLmdldE5vZGVEZWdyZWU9ZnVuY3Rpb24oayl7Zm9yKHZhciBMPWsuaWQsUj1rLmdldEVkZ2VzKCksTz0wLE09MDtNPFIubGVuZ3RoO00rKyl7dmFyIEI9UltNXTtCLmdldFNvdXJjZSgpLmlkIT09Qi5nZXRUYXJnZXQoKS5pZCYmKE89TysxKX1yZXR1cm4gT30sSS5wcm90b3R5cGUuZ2V0Tm9kZURlZ3JlZVdpdGhDaGlsZHJlbj1mdW5jdGlvbihrKXt2YXIgTD10aGlzLmdldE5vZGVEZWdyZWUoayk7aWYoay5nZXRDaGlsZCgpPT1udWxsKXJldHVybiBMO2Zvcih2YXIgUj1rLmdldENoaWxkKCkuZ2V0Tm9kZXMoKSxPPTA7TzxSLmxlbmd0aDtPKyspe3ZhciBNPVJbT107TCs9dGhpcy5nZXROb2RlRGVncmVlV2l0aENoaWxkcmVuKE0pfXJldHVybiBMfSxJLnByb3RvdHlwZS5wZXJmb3JtREZTT25Db21wb3VuZHM9ZnVuY3Rpb24oKXt0aGlzLmNvbXBvdW5kT3JkZXI9W10sdGhpcy5maWxsQ29tcGV4T3JkZXJCeURGUyh0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuZ2V0Tm9kZXMoKSl9LEkucHJvdG90eXBlLmZpbGxDb21wZXhPcmRlckJ5REZTPWZ1bmN0aW9uKGspe2Zvcih2YXIgTD0wO0w8ay5sZW5ndGg7TCsrKXt2YXIgUj1rW0xdO1IuZ2V0Q2hpbGQoKSE9bnVsbCYmdGhpcy5maWxsQ29tcGV4T3JkZXJCeURGUyhSLmdldENoaWxkKCkuZ2V0Tm9kZXMoKSksdGhpcy5nZXRUb0JlVGlsZWQoUikmJnRoaXMuY29tcG91bmRPcmRlci5wdXNoKFIpfX0sSS5wcm90b3R5cGUuYWRqdXN0TG9jYXRpb25zPWZ1bmN0aW9uKGssTCxSLE8sTSxCLEYpe0wrPU8rQixSKz1NK0Y7Zm9yKHZhciBQPUwsej0wO3o8ay5yb3dzLmxlbmd0aDt6Kyspe3ZhciAkPWsucm93c1t6XTtMPVA7Zm9yKHZhciBIPTAsUT0wO1E8JC5sZW5ndGg7USsrKXt2YXIgaj0kW1FdO2oucmVjdC54PUwsai5yZWN0Lnk9UixMKz1qLnJlY3Qud2lkdGgray5ob3Jpem9udGFsUGFkZGluZyxqLnJlY3QuaGVpZ2h0PkgmJihIPWoucmVjdC5oZWlnaHQpfVIrPUgray52ZXJ0aWNhbFBhZGRpbmd9fSxJLnByb3RvdHlwZS50aWxlQ29tcG91bmRNZW1iZXJzPWZ1bmN0aW9uKGssTCl7dmFyIFI9dGhpczt0aGlzLnRpbGVkTWVtYmVyUGFjaz1bXSxPYmplY3Qua2V5cyhrKS5mb3JFYWNoKGZ1bmN0aW9uKE8pe3ZhciBNPUxbT107aWYoUi50aWxlZE1lbWJlclBhY2tbT109Ui50aWxlTm9kZXMoa1tPXSxNLnBhZGRpbmdMZWZ0K00ucGFkZGluZ1JpZ2h0KSxNLnJlY3Qud2lkdGg9Ui50aWxlZE1lbWJlclBhY2tbT10ud2lkdGgsTS5yZWN0LmhlaWdodD1SLnRpbGVkTWVtYmVyUGFja1tPXS5oZWlnaHQsTS5zZXRDZW50ZXIoUi50aWxlZE1lbWJlclBhY2tbT10uY2VudGVyWCxSLnRpbGVkTWVtYmVyUGFja1tPXS5jZW50ZXJZKSxNLmxhYmVsTWFyZ2luTGVmdD0wLE0ubGFiZWxNYXJnaW5Ub3A9MCxtLk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUyl7dmFyIEI9TS5yZWN0LndpZHRoLEY9TS5yZWN0LmhlaWdodDtNLmxhYmVsV2lkdGgmJihNLmxhYmVsUG9zSG9yaXpvbnRhbD09ImxlZnQiPyhNLnJlY3QueC09TS5sYWJlbFdpZHRoLE0uc2V0V2lkdGgoQitNLmxhYmVsV2lkdGgpLE0ubGFiZWxNYXJnaW5MZWZ0PU0ubGFiZWxXaWR0aCk6TS5sYWJlbFBvc0hvcml6b250YWw9PSJjZW50ZXIiJiZNLmxhYmVsV2lkdGg+Qj8oTS5yZWN0LngtPShNLmxhYmVsV2lkdGgtQikvMixNLnNldFdpZHRoKE0ubGFiZWxXaWR0aCksTS5sYWJlbE1hcmdpbkxlZnQ9KE0ubGFiZWxXaWR0aC1CKS8yKTpNLmxhYmVsUG9zSG9yaXpvbnRhbD09InJpZ2h0IiYmTS5zZXRXaWR0aChCK00ubGFiZWxXaWR0aCkpLE0ubGFiZWxIZWlnaHQmJihNLmxhYmVsUG9zVmVydGljYWw9PSJ0b3AiPyhNLnJlY3QueS09TS5sYWJlbEhlaWdodCxNLnNldEhlaWdodChGK00ubGFiZWxIZWlnaHQpLE0ubGFiZWxNYXJnaW5Ub3A9TS5sYWJlbEhlaWdodCk6TS5sYWJlbFBvc1ZlcnRpY2FsPT0iY2VudGVyIiYmTS5sYWJlbEhlaWdodD5GPyhNLnJlY3QueS09KE0ubGFiZWxIZWlnaHQtRikvMixNLnNldEhlaWdodChNLmxhYmVsSGVpZ2h0KSxNLmxhYmVsTWFyZ2luVG9wPShNLmxhYmVsSGVpZ2h0LUYpLzIpOk0ubGFiZWxQb3NWZXJ0aWNhbD09ImJvdHRvbSImJk0uc2V0SGVpZ2h0KEYrTS5sYWJlbEhlaWdodCkpfX0pfSxJLnByb3RvdHlwZS50aWxlTm9kZXM9ZnVuY3Rpb24oayxMKXt2YXIgUj10aGlzLnRpbGVOb2Rlc0J5RmF2b3JpbmdEaW0oayxMLCEwKSxPPXRoaXMudGlsZU5vZGVzQnlGYXZvcmluZ0RpbShrLEwsITEpLE09dGhpcy5nZXRPcmdSYXRpbyhSKSxCPXRoaXMuZ2V0T3JnUmF0aW8oTyksRjtyZXR1cm4gQjxNP0Y9TzpGPVIsRn0sSS5wcm90b3R5cGUuZ2V0T3JnUmF0aW89ZnVuY3Rpb24oayl7dmFyIEw9ay53aWR0aCxSPWsuaGVpZ2h0LE89TC9SO3JldHVybiBPPDEmJihPPTEvTyksT30sSS5wcm90b3R5cGUuY2FsY0lkZWFsUm93V2lkdGg9ZnVuY3Rpb24oayxMKXt2YXIgUj1tLlRJTElOR19QQURESU5HX1ZFUlRJQ0FMLE89bS5USUxJTkdfUEFERElOR19IT1JJWk9OVEFMLE09ay5sZW5ndGgsQj0wLEY9MCxQPTA7ay5mb3JFYWNoKGZ1bmN0aW9uKG5lKXtCKz1uZS5nZXRXaWR0aCgpLEYrPW5lLmdldEhlaWdodCgpLG5lLmdldFdpZHRoKCk+UCYmKFA9bmUuZ2V0V2lkdGgoKSl9KTt2YXIgej1CL00sJD1GL00sSD1NYXRoLnBvdyhSLU8sMikrNCooeitPKSooJCtSKSpNLFE9KE8tUitNYXRoLnNxcnQoSCkpLygyKih6K08pKSxqO0w/KGo9TWF0aC5jZWlsKFEpLGo9PVEmJmorKyk6aj1NYXRoLmZsb29yKFEpO3ZhciBpZT1qKih6K08pLU87cmV0dXJuIFA+aWUmJihpZT1QKSxpZSs9TyoyLGllfSxJLnByb3RvdHlwZS50aWxlTm9kZXNCeUZhdm9yaW5nRGltPWZ1bmN0aW9uKGssTCxSKXt2YXIgTz1tLlRJTElOR19QQURESU5HX1ZFUlRJQ0FMLE09bS5USUxJTkdfUEFERElOR19IT1JJWk9OVEFMLEI9bS5USUxJTkdfQ09NUEFSRV9CWSxGPXtyb3dzOltdLHJvd1dpZHRoOltdLHJvd0hlaWdodDpbXSx3aWR0aDowLGhlaWdodDpMLHZlcnRpY2FsUGFkZGluZzpPLGhvcml6b250YWxQYWRkaW5nOk0sY2VudGVyWDowLGNlbnRlclk6MH07QiYmKEYuaWRlYWxSb3dXaWR0aD10aGlzLmNhbGNJZGVhbFJvd1dpZHRoKGssUikpO3ZhciBQPW8oZnVuY3Rpb24obGUpe3JldHVybiBsZS5yZWN0LndpZHRoKmxlLnJlY3QuaGVpZ2h0fSwiZ2V0Tm9kZUFyZWEiKSx6PW8oZnVuY3Rpb24obGUsaGUpe3JldHVybiBQKGhlKS1QKGxlKX0sImFyZWFDb21wYXJlRmNuIik7ay5zb3J0KGZ1bmN0aW9uKG5lLGxlKXt2YXIgaGU9ejtyZXR1cm4gRi5pZGVhbFJvd1dpZHRoPyhoZT1CLGhlKG5lLmlkLGxlLmlkKSk6aGUobmUsbGUpfSk7Zm9yKHZhciAkPTAsSD0wLFE9MDtRPGsubGVuZ3RoO1ErKyl7dmFyIGo9a1tRXTskKz1qLmdldENlbnRlclgoKSxIKz1qLmdldENlbnRlclkoKX1GLmNlbnRlclg9JC9rLmxlbmd0aCxGLmNlbnRlclk9SC9rLmxlbmd0aDtmb3IodmFyIFE9MDtRPGsubGVuZ3RoO1ErKyl7dmFyIGo9a1tRXTtpZihGLnJvd3MubGVuZ3RoPT0wKXRoaXMuaW5zZXJ0Tm9kZVRvUm93KEYsaiwwLEwpO2Vsc2UgaWYodGhpcy5jYW5BZGRIb3Jpem9udGFsKEYsai5yZWN0LndpZHRoLGoucmVjdC5oZWlnaHQpKXt2YXIgaWU9Ri5yb3dzLmxlbmd0aC0xO0YuaWRlYWxSb3dXaWR0aHx8KGllPXRoaXMuZ2V0U2hvcnRlc3RSb3dJbmRleChGKSksdGhpcy5pbnNlcnROb2RlVG9Sb3coRixqLGllLEwpfWVsc2UgdGhpcy5pbnNlcnROb2RlVG9Sb3coRixqLEYucm93cy5sZW5ndGgsTCk7dGhpcy5zaGlmdFRvTGFzdFJvdyhGKX1yZXR1cm4gRn0sSS5wcm90b3R5cGUuaW5zZXJ0Tm9kZVRvUm93PWZ1bmN0aW9uKGssTCxSLE8pe3ZhciBNPU87aWYoUj09ay5yb3dzLmxlbmd0aCl7dmFyIEI9W107ay5yb3dzLnB1c2goQiksay5yb3dXaWR0aC5wdXNoKE0pLGsucm93SGVpZ2h0LnB1c2goMCl9dmFyIEY9ay5yb3dXaWR0aFtSXStMLnJlY3Qud2lkdGg7ay5yb3dzW1JdLmxlbmd0aD4wJiYoRis9ay5ob3Jpem9udGFsUGFkZGluZyksay5yb3dXaWR0aFtSXT1GLGsud2lkdGg8RiYmKGsud2lkdGg9Rik7dmFyIFA9TC5yZWN0LmhlaWdodDtSPjAmJihQKz1rLnZlcnRpY2FsUGFkZGluZyk7dmFyIHo9MDtQPmsucm93SGVpZ2h0W1JdJiYoej1rLnJvd0hlaWdodFtSXSxrLnJvd0hlaWdodFtSXT1QLHo9ay5yb3dIZWlnaHRbUl0teiksay5oZWlnaHQrPXosay5yb3dzW1JdLnB1c2goTCl9LEkucHJvdG90eXBlLmdldFNob3J0ZXN0Um93SW5kZXg9ZnVuY3Rpb24oayl7Zm9yKHZhciBMPS0xLFI9TnVtYmVyLk1BWF9WQUxVRSxPPTA7TzxrLnJvd3MubGVuZ3RoO08rKylrLnJvd1dpZHRoW09dPFImJihMPU8sUj1rLnJvd1dpZHRoW09dKTtyZXR1cm4gTH0sSS5wcm90b3R5cGUuZ2V0TG9uZ2VzdFJvd0luZGV4PWZ1bmN0aW9uKGspe2Zvcih2YXIgTD0tMSxSPU51bWJlci5NSU5fVkFMVUUsTz0wO088ay5yb3dzLmxlbmd0aDtPKyspay5yb3dXaWR0aFtPXT5SJiYoTD1PLFI9ay5yb3dXaWR0aFtPXSk7cmV0dXJuIEx9LEkucHJvdG90eXBlLmNhbkFkZEhvcml6b250YWw9ZnVuY3Rpb24oayxMLFIpe2lmKGsuaWRlYWxSb3dXaWR0aCl7dmFyIE89ay5yb3dzLmxlbmd0aC0xLE09ay5yb3dXaWR0aFtPXTtyZXR1cm4gTStMK2suaG9yaXpvbnRhbFBhZGRpbmc8PWsuaWRlYWxSb3dXaWR0aH12YXIgQj10aGlzLmdldFNob3J0ZXN0Um93SW5kZXgoayk7aWYoQjwwKXJldHVybiEwO3ZhciBGPWsucm93V2lkdGhbQl07aWYoRitrLmhvcml6b250YWxQYWRkaW5nK0w8PWsud2lkdGgpcmV0dXJuITA7dmFyIFA9MDtrLnJvd0hlaWdodFtCXTxSJiZCPjAmJihQPVIray52ZXJ0aWNhbFBhZGRpbmctay5yb3dIZWlnaHRbQl0pO3ZhciB6O2sud2lkdGgtRj49TCtrLmhvcml6b250YWxQYWRkaW5nP3o9KGsuaGVpZ2h0K1ApLyhGK0wray5ob3Jpem9udGFsUGFkZGluZyk6ej0oay5oZWlnaHQrUCkvay53aWR0aCxQPVIray52ZXJ0aWNhbFBhZGRpbmc7dmFyICQ7cmV0dXJuIGsud2lkdGg8TD8kPShrLmhlaWdodCtQKS9MOiQ9KGsuaGVpZ2h0K1ApL2sud2lkdGgsJDwxJiYoJD0xLyQpLHo8MSYmKHo9MS96KSx6PCR9LEkucHJvdG90eXBlLnNoaWZ0VG9MYXN0Um93PWZ1bmN0aW9uKGspe3ZhciBMPXRoaXMuZ2V0TG9uZ2VzdFJvd0luZGV4KGspLFI9ay5yb3dXaWR0aC5sZW5ndGgtMSxPPWsucm93c1tMXSxNPU9bTy5sZW5ndGgtMV0sQj1NLndpZHRoK2suaG9yaXpvbnRhbFBhZGRpbmc7aWYoay53aWR0aC1rLnJvd1dpZHRoW1JdPkImJkwhPVIpe08uc3BsaWNlKC0xLDEpLGsucm93c1tSXS5wdXNoKE0pLGsucm93V2lkdGhbTF09ay5yb3dXaWR0aFtMXS1CLGsucm93V2lkdGhbUl09ay5yb3dXaWR0aFtSXStCLGsud2lkdGg9ay5yb3dXaWR0aFtpbnN0YW5jZS5nZXRMb25nZXN0Um93SW5kZXgoayldO2Zvcih2YXIgRj1OdW1iZXIuTUlOX1ZBTFVFLFA9MDtQPE8ubGVuZ3RoO1ArKylPW1BdLmhlaWdodD5GJiYoRj1PW1BdLmhlaWdodCk7TD4wJiYoRis9ay52ZXJ0aWNhbFBhZGRpbmcpO3ZhciB6PWsucm93SGVpZ2h0W0xdK2sucm93SGVpZ2h0W1JdO2sucm93SGVpZ2h0W0xdPUYsay5yb3dIZWlnaHRbUl08TS5oZWlnaHQray52ZXJ0aWNhbFBhZGRpbmcmJihrLnJvd0hlaWdodFtSXT1NLmhlaWdodCtrLnZlcnRpY2FsUGFkZGluZyk7dmFyICQ9ay5yb3dIZWlnaHRbTF0ray5yb3dIZWlnaHRbUl07ay5oZWlnaHQrPSQteix0aGlzLnNoaWZ0VG9MYXN0Um93KGspfX0sSS5wcm90b3R5cGUudGlsaW5nUHJlTGF5b3V0PWZ1bmN0aW9uKCl7bS5USUxFJiYodGhpcy5ncm91cFplcm9EZWdyZWVNZW1iZXJzKCksdGhpcy5jbGVhckNvbXBvdW5kcygpLHRoaXMuY2xlYXJaZXJvRGVncmVlTWVtYmVycygpKX0sSS5wcm90b3R5cGUudGlsaW5nUG9zdExheW91dD1mdW5jdGlvbigpe20uVElMRSYmKHRoaXMucmVwb3B1bGF0ZVplcm9EZWdyZWVNZW1iZXJzKCksdGhpcy5yZXBvcHVsYXRlQ29tcG91bmRzKCkpfSxJLnByb3RvdHlwZS5yZWR1Y2VUcmVlcz1mdW5jdGlvbigpe2Zvcih2YXIgaz1bXSxMPSEwLFI7TDspe3ZhciBPPXRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCksTT1bXTtMPSExO2Zvcih2YXIgQj0wO0I8Ty5sZW5ndGg7QisrKWlmKFI9T1tCXSxSLmdldEVkZ2VzKCkubGVuZ3RoPT0xJiYhUi5nZXRFZGdlcygpWzBdLmlzSW50ZXJHcmFwaCYmUi5nZXRDaGlsZCgpPT1udWxsKXtpZihtLlBVUkVfSU5DUkVNRU5UQUwpe3ZhciBGPVIuZ2V0RWRnZXMoKVswXS5nZXRPdGhlckVuZChSKSxQPW5ldyB3KFIuZ2V0Q2VudGVyWCgpLUYuZ2V0Q2VudGVyWCgpLFIuZ2V0Q2VudGVyWSgpLUYuZ2V0Q2VudGVyWSgpKTtNLnB1c2goW1IsUi5nZXRFZGdlcygpWzBdLFIuZ2V0T3duZXIoKSxQXSl9ZWxzZSBNLnB1c2goW1IsUi5nZXRFZGdlcygpWzBdLFIuZ2V0T3duZXIoKV0pO0w9ITB9aWYoTD09ITApe2Zvcih2YXIgej1bXSwkPTA7JDxNLmxlbmd0aDskKyspTVskXVswXS5nZXRFZGdlcygpLmxlbmd0aD09MSYmKHoucHVzaChNWyRdKSxNWyRdWzBdLmdldE93bmVyKCkucmVtb3ZlKE1bJF1bMF0pKTtrLnB1c2goeiksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxOb2RlcygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsRWRnZXMoKX19dGhpcy5wcnVuZWROb2Rlc0FsbD1rfSxJLnByb3RvdHlwZS5ncm93VHJlZT1mdW5jdGlvbihrKXtmb3IodmFyIEw9ay5sZW5ndGgsUj1rW0wtMV0sTyxNPTA7TTxSLmxlbmd0aDtNKyspTz1SW01dLHRoaXMuZmluZFBsYWNlZm9yUHJ1bmVkTm9kZShPKSxPWzJdLmFkZChPWzBdKSxPWzJdLmFkZChPWzFdLE9bMV0uc291cmNlLE9bMV0udGFyZ2V0KTtrLnNwbGljZShrLmxlbmd0aC0xLDEpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsTm9kZXMoKSx0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbEVkZ2VzKCl9LEkucHJvdG90eXBlLmZpbmRQbGFjZWZvclBydW5lZE5vZGU9ZnVuY3Rpb24oayl7dmFyIEwsUixPPWtbMF07aWYoTz09a1sxXS5zb3VyY2U/Uj1rWzFdLnRhcmdldDpSPWtbMV0uc291cmNlLG0uUFVSRV9JTkNSRU1FTlRBTClPLnNldENlbnRlcihSLmdldENlbnRlclgoKStrWzNdLmdldFdpZHRoKCksUi5nZXRDZW50ZXJZKCkra1szXS5nZXRIZWlnaHQoKSk7ZWxzZXt2YXIgTT1SLnN0YXJ0WCxCPVIuZmluaXNoWCxGPVIuc3RhcnRZLFA9Ui5maW5pc2hZLHo9MCwkPTAsSD0wLFE9MCxqPVt6LEgsJCxRXTtpZihGPjApZm9yKHZhciBpZT1NO2llPD1CO2llKyspalswXSs9dGhpcy5ncmlkW2llXVtGLTFdLmxlbmd0aCt0aGlzLmdyaWRbaWVdW0ZdLmxlbmd0aC0xO2lmKEI8dGhpcy5ncmlkLmxlbmd0aC0xKWZvcih2YXIgaWU9RjtpZTw9UDtpZSsrKWpbMV0rPXRoaXMuZ3JpZFtCKzFdW2llXS5sZW5ndGgrdGhpcy5ncmlkW0JdW2llXS5sZW5ndGgtMTtpZihQPHRoaXMuZ3JpZFswXS5sZW5ndGgtMSlmb3IodmFyIGllPU07aWU8PUI7aWUrKylqWzJdKz10aGlzLmdyaWRbaWVdW1ArMV0ubGVuZ3RoK3RoaXMuZ3JpZFtpZV1bUF0ubGVuZ3RoLTE7aWYoTT4wKWZvcih2YXIgaWU9RjtpZTw9UDtpZSsrKWpbM10rPXRoaXMuZ3JpZFtNLTFdW2llXS5sZW5ndGgrdGhpcy5ncmlkW01dW2llXS5sZW5ndGgtMTtmb3IodmFyIG5lPVQuTUFYX1ZBTFVFLGxlLGhlLEs9MDtLPGoubGVuZ3RoO0srKylqW0tdPG5lPyhuZT1qW0tdLGxlPTEsaGU9Syk6altLXT09bmUmJmxlKys7aWYobGU9PTMmJm5lPT0wKWpbMF09PTAmJmpbMV09PTAmJmpbMl09PTA/TD0xOmpbMF09PTAmJmpbMV09PTAmJmpbM109PTA/TD0wOmpbMF09PTAmJmpbMl09PTAmJmpbM109PTA/TD0zOmpbMV09PTAmJmpbMl09PTAmJmpbM109PTAmJihMPTIpO2Vsc2UgaWYobGU9PTImJm5lPT0wKXt2YXIgWD1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMik7alswXT09MCYmalsxXT09MD9YPT0wP0w9MDpMPTE6alswXT09MCYmalsyXT09MD9YPT0wP0w9MDpMPTI6alswXT09MCYmalszXT09MD9YPT0wP0w9MDpMPTM6alsxXT09MCYmalsyXT09MD9YPT0wP0w9MTpMPTI6alsxXT09MCYmalszXT09MD9YPT0wP0w9MTpMPTM6WD09MD9MPTI6TD0zfWVsc2UgaWYobGU9PTQmJm5lPT0wKXt2YXIgWD1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqNCk7TD1YfWVsc2UgTD1oZTtMPT0wP08uc2V0Q2VudGVyKFIuZ2V0Q2VudGVyWCgpLFIuZ2V0Q2VudGVyWSgpLVIuZ2V0SGVpZ2h0KCkvMi15LkRFRkFVTFRfRURHRV9MRU5HVEgtTy5nZXRIZWlnaHQoKS8yKTpMPT0xP08uc2V0Q2VudGVyKFIuZ2V0Q2VudGVyWCgpK1IuZ2V0V2lkdGgoKS8yK3kuREVGQVVMVF9FREdFX0xFTkdUSCtPLmdldFdpZHRoKCkvMixSLmdldENlbnRlclkoKSk6TD09Mj9PLnNldENlbnRlcihSLmdldENlbnRlclgoKSxSLmdldENlbnRlclkoKStSLmdldEhlaWdodCgpLzIreS5ERUZBVUxUX0VER0VfTEVOR1RIK08uZ2V0SGVpZ2h0KCkvMik6Ty5zZXRDZW50ZXIoUi5nZXRDZW50ZXJYKCktUi5nZXRXaWR0aCgpLzIteS5ERUZBVUxUX0VER0VfTEVOR1RILU8uZ2V0V2lkdGgoKS8yLFIuZ2V0Q2VudGVyWSgpKX19LGEuZXhwb3J0cz1JfSw5OTE6KGEscyxsKT0+e3ZhciB1PWwoNTUxKS5GRExheW91dE5vZGUsaD1sKDU1MSkuSU1hdGg7ZnVuY3Rpb24gZihwLG0sZyx5KXt1LmNhbGwodGhpcyxwLG0sZyx5KX1vKGYsIkNvU0VOb2RlIiksZi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh1LnByb3RvdHlwZSk7Zm9yKHZhciBkIGluIHUpZltkXT11W2RdO2YucHJvdG90eXBlLmNhbGN1bGF0ZURpc3BsYWNlbWVudD1mdW5jdGlvbigpe3ZhciBwPXRoaXMuZ3JhcGhNYW5hZ2VyLmdldExheW91dCgpO3RoaXMuZ2V0Q2hpbGQoKSE9bnVsbCYmdGhpcy5maXhlZE5vZGVXZWlnaHQ/KHRoaXMuZGlzcGxhY2VtZW50WCs9cC5jb29saW5nRmFjdG9yKih0aGlzLnNwcmluZ0ZvcmNlWCt0aGlzLnJlcHVsc2lvbkZvcmNlWCt0aGlzLmdyYXZpdGF0aW9uRm9yY2VYKS90aGlzLmZpeGVkTm9kZVdlaWdodCx0aGlzLmRpc3BsYWNlbWVudFkrPXAuY29vbGluZ0ZhY3RvcioodGhpcy5zcHJpbmdGb3JjZVkrdGhpcy5yZXB1bHNpb25Gb3JjZVkrdGhpcy5ncmF2aXRhdGlvbkZvcmNlWSkvdGhpcy5maXhlZE5vZGVXZWlnaHQpOih0aGlzLmRpc3BsYWNlbWVudFgrPXAuY29vbGluZ0ZhY3RvcioodGhpcy5zcHJpbmdGb3JjZVgrdGhpcy5yZXB1bHNpb25Gb3JjZVgrdGhpcy5ncmF2aXRhdGlvbkZvcmNlWCkvdGhpcy5ub09mQ2hpbGRyZW4sdGhpcy5kaXNwbGFjZW1lbnRZKz1wLmNvb2xpbmdGYWN0b3IqKHRoaXMuc3ByaW5nRm9yY2VZK3RoaXMucmVwdWxzaW9uRm9yY2VZK3RoaXMuZ3Jhdml0YXRpb25Gb3JjZVkpL3RoaXMubm9PZkNoaWxkcmVuKSxNYXRoLmFicyh0aGlzLmRpc3BsYWNlbWVudFgpPnAuY29vbGluZ0ZhY3RvcipwLm1heE5vZGVEaXNwbGFjZW1lbnQmJih0aGlzLmRpc3BsYWNlbWVudFg9cC5jb29saW5nRmFjdG9yKnAubWF4Tm9kZURpc3BsYWNlbWVudCpoLnNpZ24odGhpcy5kaXNwbGFjZW1lbnRYKSksTWF0aC5hYnModGhpcy5kaXNwbGFjZW1lbnRZKT5wLmNvb2xpbmdGYWN0b3IqcC5tYXhOb2RlRGlzcGxhY2VtZW50JiYodGhpcy5kaXNwbGFjZW1lbnRZPXAuY29vbGluZ0ZhY3RvcipwLm1heE5vZGVEaXNwbGFjZW1lbnQqaC5zaWduKHRoaXMuZGlzcGxhY2VtZW50WSkpLHRoaXMuY2hpbGQmJnRoaXMuY2hpbGQuZ2V0Tm9kZXMoKS5sZW5ndGg+MCYmdGhpcy5wcm9wb2dhdGVEaXNwbGFjZW1lbnRUb0NoaWxkcmVuKHRoaXMuZGlzcGxhY2VtZW50WCx0aGlzLmRpc3BsYWNlbWVudFkpfSxmLnByb3RvdHlwZS5wcm9wb2dhdGVEaXNwbGFjZW1lbnRUb0NoaWxkcmVuPWZ1bmN0aW9uKHAsbSl7Zm9yKHZhciBnPXRoaXMuZ2V0Q2hpbGQoKS5nZXROb2RlcygpLHksdj0wO3Y8Zy5sZW5ndGg7disrKXk9Z1t2XSx5LmdldENoaWxkKCk9PW51bGw/KHkuZGlzcGxhY2VtZW50WCs9cCx5LmRpc3BsYWNlbWVudFkrPW0pOnkucHJvcG9nYXRlRGlzcGxhY2VtZW50VG9DaGlsZHJlbihwLG0pfSxmLnByb3RvdHlwZS5tb3ZlPWZ1bmN0aW9uKCl7dmFyIHA9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0TGF5b3V0KCk7KHRoaXMuY2hpbGQ9PW51bGx8fHRoaXMuY2hpbGQuZ2V0Tm9kZXMoKS5sZW5ndGg9PTApJiYodGhpcy5tb3ZlQnkodGhpcy5kaXNwbGFjZW1lbnRYLHRoaXMuZGlzcGxhY2VtZW50WSkscC50b3RhbERpc3BsYWNlbWVudCs9TWF0aC5hYnModGhpcy5kaXNwbGFjZW1lbnRYKStNYXRoLmFicyh0aGlzLmRpc3BsYWNlbWVudFkpKSx0aGlzLnNwcmluZ0ZvcmNlWD0wLHRoaXMuc3ByaW5nRm9yY2VZPTAsdGhpcy5yZXB1bHNpb25Gb3JjZVg9MCx0aGlzLnJlcHVsc2lvbkZvcmNlWT0wLHRoaXMuZ3Jhdml0YXRpb25Gb3JjZVg9MCx0aGlzLmdyYXZpdGF0aW9uRm9yY2VZPTAsdGhpcy5kaXNwbGFjZW1lbnRYPTAsdGhpcy5kaXNwbGFjZW1lbnRZPTB9LGYucHJvdG90eXBlLnNldFByZWQxPWZ1bmN0aW9uKHApe3RoaXMucHJlZDE9cH0sZi5wcm90b3R5cGUuZ2V0UHJlZDE9ZnVuY3Rpb24oKXtyZXR1cm4gcHJlZDF9LGYucHJvdG90eXBlLmdldFByZWQyPWZ1bmN0aW9uKCl7cmV0dXJuIHByZWQyfSxmLnByb3RvdHlwZS5zZXROZXh0PWZ1bmN0aW9uKHApe3RoaXMubmV4dD1wfSxmLnByb3RvdHlwZS5nZXROZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIG5leHR9LGYucHJvdG90eXBlLnNldFByb2Nlc3NlZD1mdW5jdGlvbihwKXt0aGlzLnByb2Nlc3NlZD1wfSxmLnByb3RvdHlwZS5pc1Byb2Nlc3NlZD1mdW5jdGlvbigpe3JldHVybiBwcm9jZXNzZWR9LGEuZXhwb3J0cz1mfSw5MDI6KGEscyxsKT0+e2Z1bmN0aW9uIHUoZyl7aWYoQXJyYXkuaXNBcnJheShnKSl7Zm9yKHZhciB5PTAsdj1BcnJheShnLmxlbmd0aCk7eTxnLmxlbmd0aDt5Kyspdlt5XT1nW3ldO3JldHVybiB2fWVsc2UgcmV0dXJuIEFycmF5LmZyb20oZyl9byh1LCJfdG9Db25zdW1hYmxlQXJyYXkiKTt2YXIgaD1sKDgwNiksZj1sKDU1MSkuTGlua2VkTGlzdCxkPWwoNTUxKS5NYXRyaXgscD1sKDU1MSkuU1ZEO2Z1bmN0aW9uIG0oKXt9byhtLCJDb25zdHJhaW50SGFuZGxlciIpLG0uaGFuZGxlQ29uc3RyYWludHM9ZnVuY3Rpb24oZyl7dmFyIHk9e307eS5maXhlZE5vZGVDb25zdHJhaW50PWcuY29uc3RyYWludHMuZml4ZWROb2RlQ29uc3RyYWludCx5LmFsaWdubWVudENvbnN0cmFpbnQ9Zy5jb25zdHJhaW50cy5hbGlnbm1lbnRDb25zdHJhaW50LHkucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50PWcuY29uc3RyYWludHMucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50O2Zvcih2YXIgdj1uZXcgTWFwLHg9bmV3IE1hcCxiPVtdLHc9W10sQz1nLmdldEFsbE5vZGVzKCksVD0wLEU9MDtFPEMubGVuZ3RoO0UrKyl7dmFyIEE9Q1tFXTtBLmdldENoaWxkKCk9PW51bGwmJih4LnNldChBLmlkLFQrKyksYi5wdXNoKEEuZ2V0Q2VudGVyWCgpKSx3LnB1c2goQS5nZXRDZW50ZXJZKCkpLHYuc2V0KEEuaWQsQSkpfXkucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50JiZ5LnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludC5mb3JFYWNoKGZ1bmN0aW9uKG9lKXshb2UuZ2FwJiZvZS5nYXAhPTAmJihvZS5sZWZ0P29lLmdhcD1oLkRFRkFVTFRfRURHRV9MRU5HVEgrdi5nZXQob2UubGVmdCkuZ2V0V2lkdGgoKS8yK3YuZ2V0KG9lLnJpZ2h0KS5nZXRXaWR0aCgpLzI6b2UuZ2FwPWguREVGQVVMVF9FREdFX0xFTkdUSCt2LmdldChvZS50b3ApLmdldEhlaWdodCgpLzIrdi5nZXQob2UuYm90dG9tKS5nZXRIZWlnaHQoKS8yKX0pO3ZhciBTPW8oZnVuY3Rpb24oVix4ZSl7cmV0dXJue3g6Vi54LXhlLngseTpWLnkteGUueX19LCJjYWxjdWxhdGVQb3NpdGlvbkRpZmYiKSxfPW8oZnVuY3Rpb24oVil7dmFyIHhlPTAscT0wO3JldHVybiBWLmZvckVhY2goZnVuY3Rpb24ocGUpe3hlKz1iW3guZ2V0KHBlKV0scSs9d1t4LmdldChwZSldfSkse3g6eGUvVi5zaXplLHk6cS9WLnNpemV9fSwiY2FsY3VsYXRlQXZnUG9zaXRpb24iKSxJPW8oZnVuY3Rpb24oVix4ZSxxLHBlLHZlKXtmdW5jdGlvbiBQZShzdCxVZSl7dmFyIGN0PW5ldyBTZXQoc3QpLFdlPSEwLG90PSExLFl0PXZvaWQgMDt0cnl7Zm9yKHZhciBidD1VZVtTeW1ib2wuaXRlcmF0b3JdKCksTXQ7IShXZT0oTXQ9YnQubmV4dCgpKS5kb25lKTtXZT0hMCl7dmFyIHh0PU10LnZhbHVlO2N0LmFkZCh4dCl9fWNhdGNoKHV0KXtvdD0hMCxZdD11dH1maW5hbGx5e3RyeXshV2UmJmJ0LnJldHVybiYmYnQucmV0dXJuKCl9ZmluYWxseXtpZihvdCl0aHJvdyBZdH19cmV0dXJuIGN0fW8oUGUsInNldFVuaW9uIik7dmFyIF9lPW5ldyBNYXA7Vi5mb3JFYWNoKGZ1bmN0aW9uKHN0LFVlKXtfZS5zZXQoVWUsMCl9KSxWLmZvckVhY2goZnVuY3Rpb24oc3QsVWUpe3N0LmZvckVhY2goZnVuY3Rpb24oY3Qpe19lLnNldChjdC5pZCxfZS5nZXQoY3QuaWQpKzEpfSl9KTt2YXIgd2U9bmV3IE1hcCxWZT1uZXcgTWFwLERlPW5ldyBmO19lLmZvckVhY2goZnVuY3Rpb24oc3QsVWUpe3N0PT0wPyhEZS5wdXNoKFVlKSxxfHwoeGU9PSJob3Jpem9udGFsIj93ZS5zZXQoVWUseC5oYXMoVWUpP2JbeC5nZXQoVWUpXTpwZS5nZXQoVWUpKTp3ZS5zZXQoVWUseC5oYXMoVWUpP3dbeC5nZXQoVWUpXTpwZS5nZXQoVWUpKSkpOndlLnNldChVZSxOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkpLHEmJlZlLnNldChVZSxuZXcgU2V0KFtVZV0pKX0pLHEmJnZlLmZvckVhY2goZnVuY3Rpb24oc3Qpe3ZhciBVZT1bXTtpZihzdC5mb3JFYWNoKGZ1bmN0aW9uKG90KXtxLmhhcyhvdCkmJlVlLnB1c2gob3QpfSksVWUubGVuZ3RoPjApe3ZhciBjdD0wO1VlLmZvckVhY2goZnVuY3Rpb24ob3Qpe3hlPT0iaG9yaXpvbnRhbCI/KHdlLnNldChvdCx4LmhhcyhvdCk/Ylt4LmdldChvdCldOnBlLmdldChvdCkpLGN0Kz13ZS5nZXQob3QpKTood2Uuc2V0KG90LHguaGFzKG90KT93W3guZ2V0KG90KV06cGUuZ2V0KG90KSksY3QrPXdlLmdldChvdCkpfSksY3Q9Y3QvVWUubGVuZ3RoLHN0LmZvckVhY2goZnVuY3Rpb24ob3Qpe3EuaGFzKG90KXx8d2Uuc2V0KG90LGN0KX0pfWVsc2V7dmFyIFdlPTA7c3QuZm9yRWFjaChmdW5jdGlvbihvdCl7eGU9PSJob3Jpem9udGFsIj9XZSs9eC5oYXMob3QpP2JbeC5nZXQob3QpXTpwZS5nZXQob3QpOldlKz14LmhhcyhvdCk/d1t4LmdldChvdCldOnBlLmdldChvdCl9KSxXZT1XZS9zdC5sZW5ndGgsc3QuZm9yRWFjaChmdW5jdGlvbihvdCl7d2Uuc2V0KG90LFdlKX0pfX0pO2Zvcih2YXIgcWU9byhmdW5jdGlvbigpe3ZhciBVZT1EZS5zaGlmdCgpLGN0PVYuZ2V0KFVlKTtjdC5mb3JFYWNoKGZ1bmN0aW9uKFdlKXtpZih3ZS5nZXQoV2UuaWQpPHdlLmdldChVZSkrV2UuZ2FwKWlmKHEmJnEuaGFzKFdlLmlkKSl7dmFyIG90PXZvaWQgMDtpZih4ZT09Imhvcml6b250YWwiP290PXguaGFzKFdlLmlkKT9iW3guZ2V0KFdlLmlkKV06cGUuZ2V0KFdlLmlkKTpvdD14LmhhcyhXZS5pZCk/d1t4LmdldChXZS5pZCldOnBlLmdldChXZS5pZCksd2Uuc2V0KFdlLmlkLG90KSxvdDx3ZS5nZXQoVWUpK1dlLmdhcCl7dmFyIFl0PXdlLmdldChVZSkrV2UuZ2FwLW90O1ZlLmdldChVZSkuZm9yRWFjaChmdW5jdGlvbihidCl7d2Uuc2V0KGJ0LHdlLmdldChidCktWXQpfSl9fWVsc2Ugd2Uuc2V0KFdlLmlkLHdlLmdldChVZSkrV2UuZ2FwKTtfZS5zZXQoV2UuaWQsX2UuZ2V0KFdlLmlkKS0xKSxfZS5nZXQoV2UuaWQpPT0wJiZEZS5wdXNoKFdlLmlkKSxxJiZWZS5zZXQoV2UuaWQsUGUoVmUuZ2V0KFVlKSxWZS5nZXQoV2UuaWQpKSl9KX0sIl9sb29wIik7RGUubGVuZ3RoIT0wOylxZSgpO2lmKHEpe3ZhciBhdD1uZXcgU2V0O1YuZm9yRWFjaChmdW5jdGlvbihzdCxVZSl7c3QubGVuZ3RoPT0wJiZhdC5hZGQoVWUpfSk7dmFyIFJ0PVtdO1ZlLmZvckVhY2goZnVuY3Rpb24oc3QsVWUpe2lmKGF0LmhhcyhVZSkpe3ZhciBjdD0hMSxXZT0hMCxvdD0hMSxZdD12b2lkIDA7dHJ5e2Zvcih2YXIgYnQ9c3RbU3ltYm9sLml0ZXJhdG9yXSgpLE10OyEoV2U9KE10PWJ0Lm5leHQoKSkuZG9uZSk7V2U9ITApe3ZhciB4dD1NdC52YWx1ZTtxLmhhcyh4dCkmJihjdD0hMCl9fWNhdGNoKGZ0KXtvdD0hMCxZdD1mdH1maW5hbGx5e3RyeXshV2UmJmJ0LnJldHVybiYmYnQucmV0dXJuKCl9ZmluYWxseXtpZihvdCl0aHJvdyBZdH19aWYoIWN0KXt2YXIgdXQ9ITEsRXQ9dm9pZCAwO1J0LmZvckVhY2goZnVuY3Rpb24oZnQseXQpe2Z0LmhhcyhbXS5jb25jYXQodShzdCkpWzBdKSYmKHV0PSEwLEV0PXl0KX0pLHV0P3N0LmZvckVhY2goZnVuY3Rpb24oZnQpe1J0W0V0XS5hZGQoZnQpfSk6UnQucHVzaChuZXcgU2V0KHN0KSl9fX0pLFJ0LmZvckVhY2goZnVuY3Rpb24oc3QsVWUpe3ZhciBjdD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksV2U9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLG90PU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxZdD1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksYnQ9ITAsTXQ9ITEseHQ9dm9pZCAwO3RyeXtmb3IodmFyIHV0PXN0W1N5bWJvbC5pdGVyYXRvcl0oKSxFdDshKGJ0PShFdD11dC5uZXh0KCkpLmRvbmUpO2J0PSEwKXt2YXIgZnQ9RXQudmFsdWUseXQ9dm9pZCAwO3hlPT0iaG9yaXpvbnRhbCI/eXQ9eC5oYXMoZnQpP2JbeC5nZXQoZnQpXTpwZS5nZXQoZnQpOnl0PXguaGFzKGZ0KT93W3guZ2V0KGZ0KV06cGUuZ2V0KGZ0KTt2YXIgbnQ9d2UuZ2V0KGZ0KTt5dDxjdCYmKGN0PXl0KSx5dD5vdCYmKG90PXl0KSxudDxXZSYmKFdlPW50KSxudD5ZdCYmKFl0PW50KX19Y2F0Y2goQXQpe010PSEwLHh0PUF0fWZpbmFsbHl7dHJ5eyFidCYmdXQucmV0dXJuJiZ1dC5yZXR1cm4oKX1maW5hbGx5e2lmKE10KXRocm93IHh0fX12YXIgZG49KGN0K290KS8yLShXZStZdCkvMixUdD0hMCxPbj0hMSx0bj12b2lkIDA7dHJ5e2Zvcih2YXIgX3I9c3RbU3ltYm9sLml0ZXJhdG9yXSgpLERyOyEoVHQ9KERyPV9yLm5leHQoKSkuZG9uZSk7VHQ9ITApe3ZhciBQbj1Eci52YWx1ZTt3ZS5zZXQoUG4sd2UuZ2V0KFBuKStkbil9fWNhdGNoKEF0KXtPbj0hMCx0bj1BdH1maW5hbGx5e3RyeXshVHQmJl9yLnJldHVybiYmX3IucmV0dXJuKCl9ZmluYWxseXtpZihPbil0aHJvdyB0bn19fSl9cmV0dXJuIHdlfSwiZmluZEFwcHJvcHJpYXRlUG9zaXRpb25Gb3JSZWxhdGl2ZVBsYWNlbWVudCIpLEQ9byhmdW5jdGlvbihWKXt2YXIgeGU9MCxxPTAscGU9MCx2ZT0wO2lmKFYuZm9yRWFjaChmdW5jdGlvbihWZSl7VmUubGVmdD9iW3guZ2V0KFZlLmxlZnQpXS1iW3guZ2V0KFZlLnJpZ2h0KV0+PTA/eGUrKzpxKys6d1t4LmdldChWZS50b3ApXS13W3guZ2V0KFZlLmJvdHRvbSldPj0wP3BlKys6dmUrK30pLHhlPnEmJnBlPnZlKWZvcih2YXIgUGU9MDtQZTx4LnNpemU7UGUrKyliW1BlXT0tMSpiW1BlXSx3W1BlXT0tMSp3W1BlXTtlbHNlIGlmKHhlPnEpZm9yKHZhciBfZT0wO19lPHguc2l6ZTtfZSsrKWJbX2VdPS0xKmJbX2VdO2Vsc2UgaWYocGU+dmUpZm9yKHZhciB3ZT0wO3dlPHguc2l6ZTt3ZSsrKXdbd2VdPS0xKndbd2VdfSwiYXBwbHlSZWZsZWN0aW9uRm9yUmVsYXRpdmVQbGFjZW1lbnQiKSxrPW8oZnVuY3Rpb24oVil7dmFyIHhlPVtdLHE9bmV3IGYscGU9bmV3IFNldCx2ZT0wO3JldHVybiBWLmZvckVhY2goZnVuY3Rpb24oUGUsX2Upe2lmKCFwZS5oYXMoX2UpKXt4ZVt2ZV09W107dmFyIHdlPV9lO2ZvcihxLnB1c2god2UpLHBlLmFkZCh3ZSkseGVbdmVdLnB1c2god2UpO3EubGVuZ3RoIT0wOyl7d2U9cS5zaGlmdCgpO3ZhciBWZT1WLmdldCh3ZSk7VmUuZm9yRWFjaChmdW5jdGlvbihEZSl7cGUuaGFzKERlLmlkKXx8KHEucHVzaChEZS5pZCkscGUuYWRkKERlLmlkKSx4ZVt2ZV0ucHVzaChEZS5pZCkpfSl9dmUrK319KSx4ZX0sImZpbmRDb21wb25lbnRzIiksTD1vKGZ1bmN0aW9uKFYpe3ZhciB4ZT1uZXcgTWFwO3JldHVybiBWLmZvckVhY2goZnVuY3Rpb24ocSxwZSl7eGUuc2V0KHBlLFtdKX0pLFYuZm9yRWFjaChmdW5jdGlvbihxLHBlKXtxLmZvckVhY2goZnVuY3Rpb24odmUpe3hlLmdldChwZSkucHVzaCh2ZSkseGUuZ2V0KHZlLmlkKS5wdXNoKHtpZDpwZSxnYXA6dmUuZ2FwLGRpcmVjdGlvbjp2ZS5kaXJlY3Rpb259KX0pfSkseGV9LCJkYWdUb1VuZGlyZWN0ZWQiKSxSPW8oZnVuY3Rpb24oVil7dmFyIHhlPW5ldyBNYXA7cmV0dXJuIFYuZm9yRWFjaChmdW5jdGlvbihxLHBlKXt4ZS5zZXQocGUsW10pfSksVi5mb3JFYWNoKGZ1bmN0aW9uKHEscGUpe3EuZm9yRWFjaChmdW5jdGlvbih2ZSl7eGUuZ2V0KHZlLmlkKS5wdXNoKHtpZDpwZSxnYXA6dmUuZ2FwLGRpcmVjdGlvbjp2ZS5kaXJlY3Rpb259KX0pfSkseGV9LCJkYWdUb1JldmVyc2VkIiksTz1bXSxNPVtdLEI9ITEsRj0hMSxQPW5ldyBTZXQsej1uZXcgTWFwLCQ9bmV3IE1hcCxIPVtdO2lmKHkuZml4ZWROb2RlQ29uc3RyYWludCYmeS5maXhlZE5vZGVDb25zdHJhaW50LmZvckVhY2goZnVuY3Rpb24ob2Upe1AuYWRkKG9lLm5vZGVJZCl9KSx5LnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludCYmKHkucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50LmZvckVhY2goZnVuY3Rpb24ob2Upe29lLmxlZnQ/KHouaGFzKG9lLmxlZnQpP3ouZ2V0KG9lLmxlZnQpLnB1c2goe2lkOm9lLnJpZ2h0LGdhcDpvZS5nYXAsZGlyZWN0aW9uOiJob3Jpem9udGFsIn0pOnouc2V0KG9lLmxlZnQsW3tpZDpvZS5yaWdodCxnYXA6b2UuZ2FwLGRpcmVjdGlvbjoiaG9yaXpvbnRhbCJ9XSksei5oYXMob2UucmlnaHQpfHx6LnNldChvZS5yaWdodCxbXSkpOih6LmhhcyhvZS50b3ApP3ouZ2V0KG9lLnRvcCkucHVzaCh7aWQ6b2UuYm90dG9tLGdhcDpvZS5nYXAsZGlyZWN0aW9uOiJ2ZXJ0aWNhbCJ9KTp6LnNldChvZS50b3AsW3tpZDpvZS5ib3R0b20sZ2FwOm9lLmdhcCxkaXJlY3Rpb246InZlcnRpY2FsIn1dKSx6LmhhcyhvZS5ib3R0b20pfHx6LnNldChvZS5ib3R0b20sW10pKX0pLCQ9TCh6KSxIPWsoJCkpLGguVFJBTlNGT1JNX09OX0NPTlNUUkFJTlRfSEFORExJTkcpe2lmKHkuZml4ZWROb2RlQ29uc3RyYWludCYmeS5maXhlZE5vZGVDb25zdHJhaW50Lmxlbmd0aD4xKXkuZml4ZWROb2RlQ29uc3RyYWludC5mb3JFYWNoKGZ1bmN0aW9uKG9lLFYpe09bVl09W29lLnBvc2l0aW9uLngsb2UucG9zaXRpb24ueV0sTVtWXT1bYlt4LmdldChvZS5ub2RlSWQpXSx3W3guZ2V0KG9lLm5vZGVJZCldXX0pLEI9ITA7ZWxzZSBpZih5LmFsaWdubWVudENvbnN0cmFpbnQpKGZ1bmN0aW9uKCl7dmFyIG9lPTA7aWYoeS5hbGlnbm1lbnRDb25zdHJhaW50LnZlcnRpY2FsKXtmb3IodmFyIFY9eS5hbGlnbm1lbnRDb25zdHJhaW50LnZlcnRpY2FsLHhlPW8oZnVuY3Rpb24od2Upe3ZhciBWZT1uZXcgU2V0O1Zbd2VdLmZvckVhY2goZnVuY3Rpb24oYXQpe1ZlLmFkZChhdCl9KTt2YXIgRGU9bmV3IFNldChbXS5jb25jYXQodShWZSkpLmZpbHRlcihmdW5jdGlvbihhdCl7cmV0dXJuIFAuaGFzKGF0KX0pKSxxZT12b2lkIDA7RGUuc2l6ZT4wP3FlPWJbeC5nZXQoRGUudmFsdWVzKCkubmV4dCgpLnZhbHVlKV06cWU9XyhWZSkueCxWW3dlXS5mb3JFYWNoKGZ1bmN0aW9uKGF0KXtPW29lXT1bcWUsd1t4LmdldChhdCldXSxNW29lXT1bYlt4LmdldChhdCldLHdbeC5nZXQoYXQpXV0sb2UrK30pfSwiX2xvb3AyIikscT0wO3E8Vi5sZW5ndGg7cSsrKXhlKHEpO0I9ITB9aWYoeS5hbGlnbm1lbnRDb25zdHJhaW50Lmhvcml6b250YWwpe2Zvcih2YXIgcGU9eS5hbGlnbm1lbnRDb25zdHJhaW50Lmhvcml6b250YWwsdmU9byhmdW5jdGlvbih3ZSl7dmFyIFZlPW5ldyBTZXQ7cGVbd2VdLmZvckVhY2goZnVuY3Rpb24oYXQpe1ZlLmFkZChhdCl9KTt2YXIgRGU9bmV3IFNldChbXS5jb25jYXQodShWZSkpLmZpbHRlcihmdW5jdGlvbihhdCl7cmV0dXJuIFAuaGFzKGF0KX0pKSxxZT12b2lkIDA7RGUuc2l6ZT4wP3FlPWJbeC5nZXQoRGUudmFsdWVzKCkubmV4dCgpLnZhbHVlKV06cWU9XyhWZSkueSxwZVt3ZV0uZm9yRWFjaChmdW5jdGlvbihhdCl7T1tvZV09W2JbeC5nZXQoYXQpXSxxZV0sTVtvZV09W2JbeC5nZXQoYXQpXSx3W3guZ2V0KGF0KV1dLG9lKyt9KX0sIl9sb29wMyIpLFBlPTA7UGU8cGUubGVuZ3RoO1BlKyspdmUoUGUpO0I9ITB9eS5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQmJihGPSEwKX0pKCk7ZWxzZSBpZih5LnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludCl7Zm9yKHZhciBRPTAsaj0wLGllPTA7aWU8SC5sZW5ndGg7aWUrKylIW2llXS5sZW5ndGg+USYmKFE9SFtpZV0ubGVuZ3RoLGo9aWUpO2lmKFE8JC5zaXplLzIpRCh5LnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludCksQj0hMSxGPSExO2Vsc2V7dmFyIG5lPW5ldyBNYXAsbGU9bmV3IE1hcCxoZT1bXTtIW2pdLmZvckVhY2goZnVuY3Rpb24ob2Upe3ouZ2V0KG9lKS5mb3JFYWNoKGZ1bmN0aW9uKFYpe1YuZGlyZWN0aW9uPT0iaG9yaXpvbnRhbCI/KG5lLmhhcyhvZSk/bmUuZ2V0KG9lKS5wdXNoKFYpOm5lLnNldChvZSxbVl0pLG5lLmhhcyhWLmlkKXx8bmUuc2V0KFYuaWQsW10pLGhlLnB1c2goe2xlZnQ6b2UscmlnaHQ6Vi5pZH0pKToobGUuaGFzKG9lKT9sZS5nZXQob2UpLnB1c2goVik6bGUuc2V0KG9lLFtWXSksbGUuaGFzKFYuaWQpfHxsZS5zZXQoVi5pZCxbXSksaGUucHVzaCh7dG9wOm9lLGJvdHRvbTpWLmlkfSkpfSl9KSxEKGhlKSxGPSExO3ZhciBLPUkobmUsImhvcml6b250YWwiKSxYPUkobGUsInZlcnRpY2FsIik7SFtqXS5mb3JFYWNoKGZ1bmN0aW9uKG9lLFYpe01bVl09W2JbeC5nZXQob2UpXSx3W3guZ2V0KG9lKV1dLE9bVl09W10sSy5oYXMob2UpP09bVl1bMF09Sy5nZXQob2UpOk9bVl1bMF09Ylt4LmdldChvZSldLFguaGFzKG9lKT9PW1ZdWzFdPVguZ2V0KG9lKTpPW1ZdWzFdPXdbeC5nZXQob2UpXX0pLEI9ITB9fWlmKEIpe2Zvcih2YXIgdGU9dm9pZCAwLEo9ZC50cmFuc3Bvc2UoTyksc2U9ZC50cmFuc3Bvc2UoTSksdWU9MDt1ZTxKLmxlbmd0aDt1ZSsrKUpbdWVdPWQubXVsdEdhbW1hKEpbdWVdKSxzZVt1ZV09ZC5tdWx0R2FtbWEoc2VbdWVdKTt2YXIgWj1kLm11bHRNYXQoSixkLnRyYW5zcG9zZShzZSkpLFNlPXAuc3ZkKFopO3RlPWQubXVsdE1hdChTZS5WLGQudHJhbnNwb3NlKFNlLlUpKTtmb3IodmFyIGNlPTA7Y2U8eC5zaXplO2NlKyspe3ZhciBhZT1bYltjZV0sd1tjZV1dLE9lPVt0ZVswXVswXSx0ZVsxXVswXV0sZ2U9W3RlWzBdWzFdLHRlWzFdWzFdXTtiW2NlXT1kLmRvdFByb2R1Y3QoYWUsT2UpLHdbY2VdPWQuZG90UHJvZHVjdChhZSxnZSl9RiYmRCh5LnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludCl9fWlmKGguRU5GT1JDRV9DT05TVFJBSU5UUyl7aWYoeS5maXhlZE5vZGVDb25zdHJhaW50JiZ5LmZpeGVkTm9kZUNvbnN0cmFpbnQubGVuZ3RoPjApe3ZhciB6ZT17eDowLHk6MH07eS5maXhlZE5vZGVDb25zdHJhaW50LmZvckVhY2goZnVuY3Rpb24ob2UsVil7dmFyIHhlPXt4OmJbeC5nZXQob2Uubm9kZUlkKV0seTp3W3guZ2V0KG9lLm5vZGVJZCldfSxxPW9lLnBvc2l0aW9uLHBlPVMocSx4ZSk7emUueCs9cGUueCx6ZS55Kz1wZS55fSksemUueC89eS5maXhlZE5vZGVDb25zdHJhaW50Lmxlbmd0aCx6ZS55Lz15LmZpeGVkTm9kZUNvbnN0cmFpbnQubGVuZ3RoLGIuZm9yRWFjaChmdW5jdGlvbihvZSxWKXtiW1ZdKz16ZS54fSksdy5mb3JFYWNoKGZ1bmN0aW9uKG9lLFYpe3dbVl0rPXplLnl9KSx5LmZpeGVkTm9kZUNvbnN0cmFpbnQuZm9yRWFjaChmdW5jdGlvbihvZSl7Ylt4LmdldChvZS5ub2RlSWQpXT1vZS5wb3NpdGlvbi54LHdbeC5nZXQob2Uubm9kZUlkKV09b2UucG9zaXRpb24ueX0pfWlmKHkuYWxpZ25tZW50Q29uc3RyYWludCl7aWYoeS5hbGlnbm1lbnRDb25zdHJhaW50LnZlcnRpY2FsKWZvcih2YXIgSGU9eS5hbGlnbm1lbnRDb25zdHJhaW50LnZlcnRpY2FsLCRlPW8oZnVuY3Rpb24oVil7dmFyIHhlPW5ldyBTZXQ7SGVbVl0uZm9yRWFjaChmdW5jdGlvbih2ZSl7eGUuYWRkKHZlKX0pO3ZhciBxPW5ldyBTZXQoW10uY29uY2F0KHUoeGUpKS5maWx0ZXIoZnVuY3Rpb24odmUpe3JldHVybiBQLmhhcyh2ZSl9KSkscGU9dm9pZCAwO3Euc2l6ZT4wP3BlPWJbeC5nZXQocS52YWx1ZXMoKS5uZXh0KCkudmFsdWUpXTpwZT1fKHhlKS54LHhlLmZvckVhY2goZnVuY3Rpb24odmUpe1AuaGFzKHZlKXx8KGJbeC5nZXQodmUpXT1wZSl9KX0sIl9sb29wNCIpLFJlPTA7UmU8SGUubGVuZ3RoO1JlKyspJGUoUmUpO2lmKHkuYWxpZ25tZW50Q29uc3RyYWludC5ob3Jpem9udGFsKWZvcih2YXIgSWU9eS5hbGlnbm1lbnRDb25zdHJhaW50Lmhvcml6b250YWwsYmU9byhmdW5jdGlvbihWKXt2YXIgeGU9bmV3IFNldDtJZVtWXS5mb3JFYWNoKGZ1bmN0aW9uKHZlKXt4ZS5hZGQodmUpfSk7dmFyIHE9bmV3IFNldChbXS5jb25jYXQodSh4ZSkpLmZpbHRlcihmdW5jdGlvbih2ZSl7cmV0dXJuIFAuaGFzKHZlKX0pKSxwZT12b2lkIDA7cS5zaXplPjA/cGU9d1t4LmdldChxLnZhbHVlcygpLm5leHQoKS52YWx1ZSldOnBlPV8oeGUpLnkseGUuZm9yRWFjaChmdW5jdGlvbih2ZSl7UC5oYXModmUpfHwod1t4LmdldCh2ZSldPXBlKX0pfSwiX2xvb3A1IiksVz0wO1c8SWUubGVuZ3RoO1crKyliZShXKX15LnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludCYmZnVuY3Rpb24oKXt2YXIgb2U9bmV3IE1hcCxWPW5ldyBNYXAseGU9bmV3IE1hcCxxPW5ldyBNYXAscGU9bmV3IE1hcCx2ZT1uZXcgTWFwLFBlPW5ldyBTZXQsX2U9bmV3IFNldDtpZihQLmZvckVhY2goZnVuY3Rpb24oSHIpe1BlLmFkZChIciksX2UuYWRkKEhyKX0pLHkuYWxpZ25tZW50Q29uc3RyYWludCl7aWYoeS5hbGlnbm1lbnRDb25zdHJhaW50LnZlcnRpY2FsKWZvcih2YXIgd2U9eS5hbGlnbm1lbnRDb25zdHJhaW50LnZlcnRpY2FsLFZlPW8oZnVuY3Rpb24oZXQpe3hlLnNldCgiZHVtbXkiK2V0LFtdKSx3ZVtldF0uZm9yRWFjaChmdW5jdGlvbihtdCl7b2Uuc2V0KG10LCJkdW1teSIrZXQpLHhlLmdldCgiZHVtbXkiK2V0KS5wdXNoKG10KSxQLmhhcyhtdCkmJlBlLmFkZCgiZHVtbXkiK2V0KX0pLHBlLnNldCgiZHVtbXkiK2V0LGJbeC5nZXQod2VbZXRdWzBdKV0pfSwiX2xvb3A2IiksRGU9MDtEZTx3ZS5sZW5ndGg7RGUrKylWZShEZSk7aWYoeS5hbGlnbm1lbnRDb25zdHJhaW50Lmhvcml6b250YWwpZm9yKHZhciBxZT15LmFsaWdubWVudENvbnN0cmFpbnQuaG9yaXpvbnRhbCxhdD1vKGZ1bmN0aW9uKGV0KXtxLnNldCgiZHVtbXkiK2V0LFtdKSxxZVtldF0uZm9yRWFjaChmdW5jdGlvbihtdCl7Vi5zZXQobXQsImR1bW15IitldCkscS5nZXQoImR1bW15IitldCkucHVzaChtdCksUC5oYXMobXQpJiZfZS5hZGQoImR1bW15IitldCl9KSx2ZS5zZXQoImR1bW15IitldCx3W3guZ2V0KHFlW2V0XVswXSldKX0sIl9sb29wNyIpLFJ0PTA7UnQ8cWUubGVuZ3RoO1J0KyspYXQoUnQpfXZhciBzdD1uZXcgTWFwLFVlPW5ldyBNYXAsY3Q9byhmdW5jdGlvbihldCl7ei5nZXQoZXQpLmZvckVhY2goZnVuY3Rpb24obXQpe3ZhciBLdD12b2lkIDAsbHQ9dm9pZCAwO210LmRpcmVjdGlvbj09Imhvcml6b250YWwiPyhLdD1vZS5nZXQoZXQpP29lLmdldChldCk6ZXQsb2UuZ2V0KG10LmlkKT9sdD17aWQ6b2UuZ2V0KG10LmlkKSxnYXA6bXQuZ2FwLGRpcmVjdGlvbjptdC5kaXJlY3Rpb259Omx0PW10LHN0LmhhcyhLdCk/c3QuZ2V0KEt0KS5wdXNoKGx0KTpzdC5zZXQoS3QsW2x0XSksc3QuaGFzKGx0LmlkKXx8c3Quc2V0KGx0LmlkLFtdKSk6KEt0PVYuZ2V0KGV0KT9WLmdldChldCk6ZXQsVi5nZXQobXQuaWQpP2x0PXtpZDpWLmdldChtdC5pZCksZ2FwOm10LmdhcCxkaXJlY3Rpb246bXQuZGlyZWN0aW9ufTpsdD1tdCxVZS5oYXMoS3QpP1VlLmdldChLdCkucHVzaChsdCk6VWUuc2V0KEt0LFtsdF0pLFVlLmhhcyhsdC5pZCl8fFVlLnNldChsdC5pZCxbXSkpfSl9LCJfbG9vcDgiKSxXZT0hMCxvdD0hMSxZdD12b2lkIDA7dHJ5e2Zvcih2YXIgYnQ9ei5rZXlzKClbU3ltYm9sLml0ZXJhdG9yXSgpLE10OyEoV2U9KE10PWJ0Lm5leHQoKSkuZG9uZSk7V2U9ITApe3ZhciB4dD1NdC52YWx1ZTtjdCh4dCl9fWNhdGNoKEhyKXtvdD0hMCxZdD1Icn1maW5hbGx5e3RyeXshV2UmJmJ0LnJldHVybiYmYnQucmV0dXJuKCl9ZmluYWxseXtpZihvdCl0aHJvdyBZdH19dmFyIHV0PUwoc3QpLEV0PUwoVWUpLGZ0PWsodXQpLHl0PWsoRXQpLG50PVIoc3QpLGRuPVIoVWUpLFR0PVtdLE9uPVtdO2Z0LmZvckVhY2goZnVuY3Rpb24oSHIsZXQpe1R0W2V0XT1bXSxIci5mb3JFYWNoKGZ1bmN0aW9uKG10KXtudC5nZXQobXQpLmxlbmd0aD09MCYmVHRbZXRdLnB1c2gobXQpfSl9KSx5dC5mb3JFYWNoKGZ1bmN0aW9uKEhyLGV0KXtPbltldF09W10sSHIuZm9yRWFjaChmdW5jdGlvbihtdCl7ZG4uZ2V0KG10KS5sZW5ndGg9PTAmJk9uW2V0XS5wdXNoKG10KX0pfSk7dmFyIHRuPUkoc3QsImhvcml6b250YWwiLFBlLHBlLFR0KSxfcj1JKFVlLCJ2ZXJ0aWNhbCIsX2UsdmUsT24pLERyPW8oZnVuY3Rpb24oZXQpe3hlLmdldChldCk/eGUuZ2V0KGV0KS5mb3JFYWNoKGZ1bmN0aW9uKG10KXtiW3guZ2V0KG10KV09dG4uZ2V0KGV0KX0pOmJbeC5nZXQoZXQpXT10bi5nZXQoZXQpfSwiX2xvb3A5IiksUG49ITAsQXQ9ITEsQ2U9dm9pZCAwO3RyeXtmb3IodmFyIHR0PXRuLmtleXMoKVtTeW1ib2wuaXRlcmF0b3JdKCksU3Q7IShQbj0oU3Q9dHQubmV4dCgpKS5kb25lKTtQbj0hMCl7dmFyIG1yPVN0LnZhbHVlO0RyKG1yKX19Y2F0Y2goSHIpe0F0PSEwLENlPUhyfWZpbmFsbHl7dHJ5eyFQbiYmdHQucmV0dXJuJiZ0dC5yZXR1cm4oKX1maW5hbGx5e2lmKEF0KXRocm93IENlfX12YXIgcm49byhmdW5jdGlvbihldCl7cS5nZXQoZXQpP3EuZ2V0KGV0KS5mb3JFYWNoKGZ1bmN0aW9uKG10KXt3W3guZ2V0KG10KV09X3IuZ2V0KGV0KX0pOndbeC5nZXQoZXQpXT1fci5nZXQoZXQpfSwiX2xvb3AxMCIpLGduPSEwLFpyPSExLE5pPXZvaWQgMDt0cnl7Zm9yKHZhciBabj1fci5rZXlzKClbU3ltYm9sLml0ZXJhdG9yXSgpLFNuOyEoZ249KFNuPVpuLm5leHQoKSkuZG9uZSk7Z249ITApe3ZhciBtcj1Tbi52YWx1ZTtybihtcil9fWNhdGNoKEhyKXtacj0hMCxOaT1Icn1maW5hbGx5e3RyeXshZ24mJlpuLnJldHVybiYmWm4ucmV0dXJuKCl9ZmluYWxseXtpZihacil0aHJvdyBOaX19fSgpfWZvcih2YXIgZGU9MDtkZTxDLmxlbmd0aDtkZSsrKXt2YXIgcmU9Q1tkZV07cmUuZ2V0Q2hpbGQoKT09bnVsbCYmcmUuc2V0Q2VudGVyKGJbeC5nZXQocmUuaWQpXSx3W3guZ2V0KHJlLmlkKV0pfX0sYS5leHBvcnRzPW19LDU1MTphPT57YS5leHBvcnRzPXR9fSxyPXt9O2Z1bmN0aW9uIG4oYSl7dmFyIHM9clthXTtpZihzIT09dm9pZCAwKXJldHVybiBzLmV4cG9ydHM7dmFyIGw9clthXT17ZXhwb3J0czp7fX07cmV0dXJuIGVbYV0obCxsLmV4cG9ydHMsbiksbC5leHBvcnRzfW8obiwiX193ZWJwYWNrX3JlcXVpcmVfXyIpO3ZhciBpPW4oNDUpO3JldHVybiBpfSkoKX0pfSk7dmFyIFB2ZT1NaSgoRTQsZ0YpPT57InVzZSBzdHJpY3QiO28oZnVuY3Rpb24oZSxyKXt0eXBlb2YgRTQ9PSJvYmplY3QiJiZ0eXBlb2YgZ0Y9PSJvYmplY3QiP2dGLmV4cG9ydHM9cihtRigpKTp0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kP2RlZmluZShbImNvc2UtYmFzZSJdLHIpOnR5cGVvZiBFND09Im9iamVjdCI/RTQuY3l0b3NjYXBlRmNvc2U9cihtRigpKTplLmN5dG9zY2FwZUZjb3NlPXIoZS5jb3NlQmFzZSl9LCJ3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIpKEU0LGZ1bmN0aW9uKHQpe3JldHVybigoKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgZT17NjU4OmE9PnthLmV4cG9ydHM9T2JqZWN0LmFzc2lnbiE9bnVsbD9PYmplY3QuYXNzaWduLmJpbmQoT2JqZWN0KTpmdW5jdGlvbihzKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCx1PUFycmF5KGw+MT9sLTE6MCksaD0xO2g8bDtoKyspdVtoLTFdPWFyZ3VtZW50c1toXTtyZXR1cm4gdS5mb3JFYWNoKGZ1bmN0aW9uKGYpe09iamVjdC5rZXlzKGYpLmZvckVhY2goZnVuY3Rpb24oZCl7cmV0dXJuIHNbZF09ZltkXX0pfSksc319LDU0ODooYSxzLGwpPT57dmFyIHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBkKHAsbSl7dmFyIGc9W10seT0hMCx2PSExLHg9dm9pZCAwO3RyeXtmb3IodmFyIGI9cFtTeW1ib2wuaXRlcmF0b3JdKCksdzshKHk9KHc9Yi5uZXh0KCkpLmRvbmUpJiYoZy5wdXNoKHcudmFsdWUpLCEobSYmZy5sZW5ndGg9PT1tKSk7eT0hMCk7fWNhdGNoKEMpe3Y9ITAseD1DfWZpbmFsbHl7dHJ5eyF5JiZiLnJldHVybiYmYi5yZXR1cm4oKX1maW5hbGx5e2lmKHYpdGhyb3cgeH19cmV0dXJuIGd9cmV0dXJuIG8oZCwic2xpY2VJdGVyYXRvciIpLGZ1bmN0aW9uKHAsbSl7aWYoQXJyYXkuaXNBcnJheShwKSlyZXR1cm4gcDtpZihTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KHApKXJldHVybiBkKHAsbSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfX0oKSxoPWwoMTQwKS5sYXlvdXRCYXNlLkxpbmtlZExpc3QsZj17fTtmLmdldFRvcE1vc3ROb2Rlcz1mdW5jdGlvbihkKXtmb3IodmFyIHA9e30sbT0wO208ZC5sZW5ndGg7bSsrKXBbZFttXS5pZCgpXT0hMDt2YXIgZz1kLmZpbHRlcihmdW5jdGlvbih5LHYpe3R5cGVvZiB5PT0ibnVtYmVyIiYmKHk9dik7Zm9yKHZhciB4PXkucGFyZW50KClbMF07eCE9bnVsbDspe2lmKHBbeC5pZCgpXSlyZXR1cm4hMTt4PXgucGFyZW50KClbMF19cmV0dXJuITB9KTtyZXR1cm4gZ30sZi5jb25uZWN0Q29tcG9uZW50cz1mdW5jdGlvbihkLHAsbSxnKXt2YXIgeT1uZXcgaCx2PW5ldyBTZXQseD1bXSxiPXZvaWQgMCx3PXZvaWQgMCxDPXZvaWQgMCxUPSExLEU9MSxBPVtdLFM9W10sXz1vKGZ1bmN0aW9uKCl7dmFyIEQ9ZC5jb2xsZWN0aW9uKCk7Uy5wdXNoKEQpO3ZhciBrPW1bMF0sTD1kLmNvbGxlY3Rpb24oKTtMLm1lcmdlKGspLm1lcmdlKGsuZGVzY2VuZGFudHMoKS5pbnRlcnNlY3Rpb24ocCkpLHgucHVzaChrKSxMLmZvckVhY2goZnVuY3Rpb24oTSl7eS5wdXNoKE0pLHYuYWRkKE0pLEQubWVyZ2UoTSl9KTtmb3IodmFyIFI9byhmdW5jdGlvbigpe2s9eS5zaGlmdCgpO3ZhciBCPWQuY29sbGVjdGlvbigpO2submVpZ2hib3Job29kKCkubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKCQpe3AuaW50ZXJzZWN0aW9uKGsuZWRnZXNXaXRoKCQpKS5sZW5ndGg+MCYmQi5tZXJnZSgkKX0pO2Zvcih2YXIgRj0wO0Y8Qi5sZW5ndGg7RisrKXt2YXIgUD1CW0ZdO2lmKGI9bS5pbnRlcnNlY3Rpb24oUC51bmlvbihQLmFuY2VzdG9ycygpKSksYiE9bnVsbCYmIXYuaGFzKGJbMF0pKXt2YXIgej1iLnVuaW9uKGIuZGVzY2VuZGFudHMoKSk7ei5mb3JFYWNoKGZ1bmN0aW9uKCQpe3kucHVzaCgkKSx2LmFkZCgkKSxELm1lcmdlKCQpLG0uaGFzKCQpJiZ4LnB1c2goJCl9KX19fSwiX2xvb3AyIik7eS5sZW5ndGghPTA7KVIoKTtpZihELmZvckVhY2goZnVuY3Rpb24oTSl7cC5pbnRlcnNlY3Rpb24oTS5jb25uZWN0ZWRFZGdlcygpKS5mb3JFYWNoKGZ1bmN0aW9uKEIpe0QuaGFzKEIuc291cmNlKCkpJiZELmhhcyhCLnRhcmdldCgpKSYmRC5tZXJnZShCKX0pfSkseC5sZW5ndGg9PW0ubGVuZ3RoJiYoVD0hMCksIVR8fFQmJkU+MSl7dz14WzBdLEM9dy5jb25uZWN0ZWRFZGdlcygpLmxlbmd0aCx4LmZvckVhY2goZnVuY3Rpb24oTSl7TS5jb25uZWN0ZWRFZGdlcygpLmxlbmd0aDxDJiYoQz1NLmNvbm5lY3RlZEVkZ2VzKCkubGVuZ3RoLHc9TSl9KSxBLnB1c2gody5pZCgpKTt2YXIgTz1kLmNvbGxlY3Rpb24oKTtPLm1lcmdlKHhbMF0pLHguZm9yRWFjaChmdW5jdGlvbihNKXtPLm1lcmdlKE0pfSkseD1bXSxtPW0uZGlmZmVyZW5jZShPKSxFKyt9fSwiX2xvb3AiKTtkbyBfKCk7d2hpbGUoIVQpO3JldHVybiBnJiZBLmxlbmd0aD4wJiZnLnNldCgiZHVtbXkiKyhnLnNpemUrMSksQSksU30sZi5yZWxvY2F0ZUNvbXBvbmVudD1mdW5jdGlvbihkLHAsbSl7aWYoIW0uZml4ZWROb2RlQ29uc3RyYWludCl7dmFyIGc9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLHk9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLHY9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLHg9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO2lmKG0ucXVhbGl0eT09ImRyYWZ0Iil7dmFyIGI9ITAsdz0hMSxDPXZvaWQgMDt0cnl7Zm9yKHZhciBUPXAubm9kZUluZGV4ZXNbU3ltYm9sLml0ZXJhdG9yXSgpLEU7IShiPShFPVQubmV4dCgpKS5kb25lKTtiPSEwKXt2YXIgQT1FLnZhbHVlLFM9dShBLDIpLF89U1swXSxJPVNbMV0sRD1tLmN5LmdldEVsZW1lbnRCeUlkKF8pO2lmKEQpe3ZhciBrPUQuYm91bmRpbmdCb3goKSxMPXAueENvb3Jkc1tJXS1rLncvMixSPXAueENvb3Jkc1tJXStrLncvMixPPXAueUNvb3Jkc1tJXS1rLmgvMixNPXAueUNvb3Jkc1tJXStrLmgvMjtMPGcmJihnPUwpLFI+eSYmKHk9UiksTzx2JiYodj1PKSxNPngmJih4PU0pfX19Y2F0Y2goJCl7dz0hMCxDPSR9ZmluYWxseXt0cnl7IWImJlQucmV0dXJuJiZULnJldHVybigpfWZpbmFsbHl7aWYodyl0aHJvdyBDfX12YXIgQj1kLngtKHkrZykvMixGPWQueS0oeCt2KS8yO3AueENvb3Jkcz1wLnhDb29yZHMubWFwKGZ1bmN0aW9uKCQpe3JldHVybiAkK0J9KSxwLnlDb29yZHM9cC55Q29vcmRzLm1hcChmdW5jdGlvbigkKXtyZXR1cm4gJCtGfSl9ZWxzZXtPYmplY3Qua2V5cyhwKS5mb3JFYWNoKGZ1bmN0aW9uKCQpe3ZhciBIPXBbJF0sUT1ILmdldFJlY3QoKS54LGo9SC5nZXRSZWN0KCkueCtILmdldFJlY3QoKS53aWR0aCxpZT1ILmdldFJlY3QoKS55LG5lPUguZ2V0UmVjdCgpLnkrSC5nZXRSZWN0KCkuaGVpZ2h0O1E8ZyYmKGc9USksaj55JiYoeT1qKSxpZTx2JiYodj1pZSksbmU+eCYmKHg9bmUpfSk7dmFyIFA9ZC54LSh5K2cpLzIsej1kLnktKHgrdikvMjtPYmplY3Qua2V5cyhwKS5mb3JFYWNoKGZ1bmN0aW9uKCQpe3ZhciBIPXBbJF07SC5zZXRDZW50ZXIoSC5nZXRDZW50ZXJYKCkrUCxILmdldENlbnRlclkoKSt6KX0pfX19LGYuY2FsY0JvdW5kaW5nQm94PWZ1bmN0aW9uKGQscCxtLGcpe2Zvcih2YXIgeT1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUix2PU51bWJlci5NSU5fU0FGRV9JTlRFR0VSLHg9TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsYj1OdW1iZXIuTUlOX1NBRkVfSU5URUdFUix3PXZvaWQgMCxDPXZvaWQgMCxUPXZvaWQgMCxFPXZvaWQgMCxBPWQuZGVzY2VuZGFudHMoKS5ub3QoIjpwYXJlbnQiKSxTPUEubGVuZ3RoLF89MDtfPFM7XysrKXt2YXIgST1BW19dO3c9cFtnLmdldChJLmlkKCkpXS1JLndpZHRoKCkvMixDPXBbZy5nZXQoSS5pZCgpKV0rSS53aWR0aCgpLzIsVD1tW2cuZ2V0KEkuaWQoKSldLUkuaGVpZ2h0KCkvMixFPW1bZy5nZXQoSS5pZCgpKV0rSS5oZWlnaHQoKS8yLHk+dyYmKHk9dyksdjxDJiYodj1DKSx4PlQmJih4PVQpLGI8RSYmKGI9RSl9dmFyIEQ9e307cmV0dXJuIEQudG9wTGVmdFg9eSxELnRvcExlZnRZPXgsRC53aWR0aD12LXksRC5oZWlnaHQ9Yi14LER9LGYuY2FsY1BhcmVudHNXaXRob3V0Q2hpbGRyZW49ZnVuY3Rpb24oZCxwKXt2YXIgbT1kLmNvbGxlY3Rpb24oKTtyZXR1cm4gcC5ub2RlcygiOnBhcmVudCIpLmZvckVhY2goZnVuY3Rpb24oZyl7dmFyIHk9ITE7Zy5jaGlsZHJlbigpLmZvckVhY2goZnVuY3Rpb24odil7di5jc3MoImRpc3BsYXkiKSE9Im5vbmUiJiYoeT0hMCl9KSx5fHxtLm1lcmdlKGcpfSksbX0sYS5leHBvcnRzPWZ9LDgxNjooYSxzLGwpPT57dmFyIHU9bCg1NDgpLGg9bCgxNDApLkNvU0VMYXlvdXQsZj1sKDE0MCkuQ29TRU5vZGUsZD1sKDE0MCkubGF5b3V0QmFzZS5Qb2ludEQscD1sKDE0MCkubGF5b3V0QmFzZS5EaW1lbnNpb25ELG09bCgxNDApLmxheW91dEJhc2UuTGF5b3V0Q29uc3RhbnRzLGc9bCgxNDApLmxheW91dEJhc2UuRkRMYXlvdXRDb25zdGFudHMseT1sKDE0MCkuQ29TRUNvbnN0YW50cyx2PW8oZnVuY3Rpb24oYix3KXt2YXIgQz1iLmN5LFQ9Yi5lbGVzLEU9VC5ub2RlcygpLEE9VC5lZGdlcygpLFM9dm9pZCAwLF89dm9pZCAwLEk9dm9pZCAwLEQ9e307Yi5yYW5kb21pemUmJihTPXcubm9kZUluZGV4ZXMsXz13LnhDb29yZHMsST13LnlDb29yZHMpO3ZhciBrPW8oZnVuY3Rpb24oJCl7cmV0dXJuIHR5cGVvZiAkPT0iZnVuY3Rpb24ifSwiaXNGbiIpLEw9byhmdW5jdGlvbigkLEgpe3JldHVybiBrKCQpPyQoSCk6JH0sIm9wdEZuIiksUj11LmNhbGNQYXJlbnRzV2l0aG91dENoaWxkcmVuKEMsVCksTz1vKGZ1bmN0aW9uIHooJCxILFEsail7Zm9yKHZhciBpZT1ILmxlbmd0aCxuZT0wO25lPGllO25lKyspe3ZhciBsZT1IW25lXSxoZT1udWxsO2xlLmludGVyc2VjdGlvbihSKS5sZW5ndGg9PTAmJihoZT1sZS5jaGlsZHJlbigpKTt2YXIgSz12b2lkIDAsWD1sZS5sYXlvdXREaW1lbnNpb25zKHtub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6ai5ub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHN9KTtpZihsZS5vdXRlcldpZHRoKCkhPW51bGwmJmxlLm91dGVySGVpZ2h0KCkhPW51bGwpaWYoai5yYW5kb21pemUpaWYoIWxlLmlzUGFyZW50KCkpSz0kLmFkZChuZXcgZihRLmdyYXBoTWFuYWdlcixuZXcgZChfW1MuZ2V0KGxlLmlkKCkpXS1YLncvMixJW1MuZ2V0KGxlLmlkKCkpXS1YLmgvMiksbmV3IHAocGFyc2VGbG9hdChYLncpLHBhcnNlRmxvYXQoWC5oKSkpKTtlbHNle3ZhciB0ZT11LmNhbGNCb3VuZGluZ0JveChsZSxfLEksUyk7bGUuaW50ZXJzZWN0aW9uKFIpLmxlbmd0aD09MD9LPSQuYWRkKG5ldyBmKFEuZ3JhcGhNYW5hZ2VyLG5ldyBkKHRlLnRvcExlZnRYLHRlLnRvcExlZnRZKSxuZXcgcCh0ZS53aWR0aCx0ZS5oZWlnaHQpKSk6Sz0kLmFkZChuZXcgZihRLmdyYXBoTWFuYWdlcixuZXcgZCh0ZS50b3BMZWZ0WCx0ZS50b3BMZWZ0WSksbmV3IHAocGFyc2VGbG9hdChYLncpLHBhcnNlRmxvYXQoWC5oKSkpKX1lbHNlIEs9JC5hZGQobmV3IGYoUS5ncmFwaE1hbmFnZXIsbmV3IGQobGUucG9zaXRpb24oIngiKS1YLncvMixsZS5wb3NpdGlvbigieSIpLVguaC8yKSxuZXcgcChwYXJzZUZsb2F0KFgudykscGFyc2VGbG9hdChYLmgpKSkpO2Vsc2UgSz0kLmFkZChuZXcgZih0aGlzLmdyYXBoTWFuYWdlcikpO2lmKEsuaWQ9bGUuZGF0YSgiaWQiKSxLLm5vZGVSZXB1bHNpb249TChqLm5vZGVSZXB1bHNpb24sbGUpLEsucGFkZGluZ0xlZnQ9cGFyc2VJbnQobGUuY3NzKCJwYWRkaW5nIikpLEsucGFkZGluZ1RvcD1wYXJzZUludChsZS5jc3MoInBhZGRpbmciKSksSy5wYWRkaW5nUmlnaHQ9cGFyc2VJbnQobGUuY3NzKCJwYWRkaW5nIikpLEsucGFkZGluZ0JvdHRvbT1wYXJzZUludChsZS5jc3MoInBhZGRpbmciKSksai5ub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHMmJihLLmxhYmVsV2lkdGg9bGUuYm91bmRpbmdCb3goe2luY2x1ZGVMYWJlbHM6ITAsaW5jbHVkZU5vZGVzOiExLGluY2x1ZGVPdmVybGF5czohMX0pLncsSy5sYWJlbEhlaWdodD1sZS5ib3VuZGluZ0JveCh7aW5jbHVkZUxhYmVsczohMCxpbmNsdWRlTm9kZXM6ITEsaW5jbHVkZU92ZXJsYXlzOiExfSkuaCxLLmxhYmVsUG9zVmVydGljYWw9bGUuY3NzKCJ0ZXh0LXZhbGlnbiIpLEsubGFiZWxQb3NIb3Jpem9udGFsPWxlLmNzcygidGV4dC1oYWxpZ24iKSksRFtsZS5kYXRhKCJpZCIpXT1LLGlzTmFOKEsucmVjdC54KSYmKEsucmVjdC54PTApLGlzTmFOKEsucmVjdC55KSYmKEsucmVjdC55PTApLGhlIT1udWxsJiZoZS5sZW5ndGg+MCl7dmFyIEo9dm9pZCAwO0o9US5nZXRHcmFwaE1hbmFnZXIoKS5hZGQoUS5uZXdHcmFwaCgpLEspLHooSixoZSxRLGopfX19LCJwcm9jZXNzQ2hpbGRyZW5MaXN0IiksTT1vKGZ1bmN0aW9uKCQsSCxRKXtmb3IodmFyIGo9MCxpZT0wLG5lPTA7bmU8US5sZW5ndGg7bmUrKyl7dmFyIGxlPVFbbmVdLGhlPURbbGUuZGF0YSgic291cmNlIildLEs9RFtsZS5kYXRhKCJ0YXJnZXQiKV07aWYoaGUmJksmJmhlIT09SyYmaGUuZ2V0RWRnZXNCZXR3ZWVuKEspLmxlbmd0aD09MCl7dmFyIFg9SC5hZGQoJC5uZXdFZGdlKCksaGUsSyk7WC5pZD1sZS5pZCgpLFguaWRlYWxMZW5ndGg9TChiLmlkZWFsRWRnZUxlbmd0aCxsZSksWC5lZGdlRWxhc3RpY2l0eT1MKGIuZWRnZUVsYXN0aWNpdHksbGUpLGorPVguaWRlYWxMZW5ndGgsaWUrK319Yi5pZGVhbEVkZ2VMZW5ndGghPW51bGwmJihpZT4wP3kuREVGQVVMVF9FREdFX0xFTkdUSD1nLkRFRkFVTFRfRURHRV9MRU5HVEg9ai9pZTprKGIuaWRlYWxFZGdlTGVuZ3RoKT95LkRFRkFVTFRfRURHRV9MRU5HVEg9Zy5ERUZBVUxUX0VER0VfTEVOR1RIPTUwOnkuREVGQVVMVF9FREdFX0xFTkdUSD1nLkRFRkFVTFRfRURHRV9MRU5HVEg9Yi5pZGVhbEVkZ2VMZW5ndGgseS5NSU5fUkVQVUxTSU9OX0RJU1Q9Zy5NSU5fUkVQVUxTSU9OX0RJU1Q9Zy5ERUZBVUxUX0VER0VfTEVOR1RILzEwLHkuREVGQVVMVF9SQURJQUxfU0VQQVJBVElPTj1nLkRFRkFVTFRfRURHRV9MRU5HVEgpfSwicHJvY2Vzc0VkZ2VzIiksQj1vKGZ1bmN0aW9uKCQsSCl7SC5maXhlZE5vZGVDb25zdHJhaW50JiYoJC5jb25zdHJhaW50cy5maXhlZE5vZGVDb25zdHJhaW50PUguZml4ZWROb2RlQ29uc3RyYWludCksSC5hbGlnbm1lbnRDb25zdHJhaW50JiYoJC5jb25zdHJhaW50cy5hbGlnbm1lbnRDb25zdHJhaW50PUguYWxpZ25tZW50Q29uc3RyYWludCksSC5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQmJigkLmNvbnN0cmFpbnRzLnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludD1ILnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludCl9LCJwcm9jZXNzQ29uc3RyYWludHMiKTtiLm5lc3RpbmdGYWN0b3IhPW51bGwmJih5LlBFUl9MRVZFTF9JREVBTF9FREdFX0xFTkdUSF9GQUNUT1I9Zy5QRVJfTEVWRUxfSURFQUxfRURHRV9MRU5HVEhfRkFDVE9SPWIubmVzdGluZ0ZhY3RvciksYi5ncmF2aXR5IT1udWxsJiYoeS5ERUZBVUxUX0dSQVZJVFlfU1RSRU5HVEg9Zy5ERUZBVUxUX0dSQVZJVFlfU1RSRU5HVEg9Yi5ncmF2aXR5KSxiLm51bUl0ZXIhPW51bGwmJih5Lk1BWF9JVEVSQVRJT05TPWcuTUFYX0lURVJBVElPTlM9Yi5udW1JdGVyKSxiLmdyYXZpdHlSYW5nZSE9bnVsbCYmKHkuREVGQVVMVF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUj1nLkRFRkFVTFRfR1JBVklUWV9SQU5HRV9GQUNUT1I9Yi5ncmF2aXR5UmFuZ2UpLGIuZ3Jhdml0eUNvbXBvdW5kIT1udWxsJiYoeS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfU1RSRU5HVEg9Zy5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfU1RSRU5HVEg9Yi5ncmF2aXR5Q29tcG91bmQpLGIuZ3Jhdml0eVJhbmdlQ29tcG91bmQhPW51bGwmJih5LkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9SQU5HRV9GQUNUT1I9Zy5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfUkFOR0VfRkFDVE9SPWIuZ3Jhdml0eVJhbmdlQ29tcG91bmQpLGIuaW5pdGlhbEVuZXJneU9uSW5jcmVtZW50YWwhPW51bGwmJih5LkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUw9Zy5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMPWIuaW5pdGlhbEVuZXJneU9uSW5jcmVtZW50YWwpLGIudGlsaW5nQ29tcGFyZUJ5IT1udWxsJiYoeS5USUxJTkdfQ09NUEFSRV9CWT1iLnRpbGluZ0NvbXBhcmVCeSksYi5xdWFsaXR5PT0icHJvb2YiP20uUVVBTElUWT0yOm0uUVVBTElUWT0wLHkuTk9ERV9ESU1FTlNJT05TX0lOQ0xVREVfTEFCRUxTPWcuTk9ERV9ESU1FTlNJT05TX0lOQ0xVREVfTEFCRUxTPW0uTk9ERV9ESU1FTlNJT05TX0lOQ0xVREVfTEFCRUxTPWIubm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzLHkuREVGQVVMVF9JTkNSRU1FTlRBTD1nLkRFRkFVTFRfSU5DUkVNRU5UQUw9bS5ERUZBVUxUX0lOQ1JFTUVOVEFMPSFiLnJhbmRvbWl6ZSx5LkFOSU1BVEU9Zy5BTklNQVRFPW0uQU5JTUFURT1iLmFuaW1hdGUseS5USUxFPWIudGlsZSx5LlRJTElOR19QQURESU5HX1ZFUlRJQ0FMPXR5cGVvZiBiLnRpbGluZ1BhZGRpbmdWZXJ0aWNhbD09ImZ1bmN0aW9uIj9iLnRpbGluZ1BhZGRpbmdWZXJ0aWNhbC5jYWxsKCk6Yi50aWxpbmdQYWRkaW5nVmVydGljYWwseS5USUxJTkdfUEFERElOR19IT1JJWk9OVEFMPXR5cGVvZiBiLnRpbGluZ1BhZGRpbmdIb3Jpem9udGFsPT0iZnVuY3Rpb24iP2IudGlsaW5nUGFkZGluZ0hvcml6b250YWwuY2FsbCgpOmIudGlsaW5nUGFkZGluZ0hvcml6b250YWwseS5ERUZBVUxUX0lOQ1JFTUVOVEFMPWcuREVGQVVMVF9JTkNSRU1FTlRBTD1tLkRFRkFVTFRfSU5DUkVNRU5UQUw9ITAseS5QVVJFX0lOQ1JFTUVOVEFMPSFiLnJhbmRvbWl6ZSxtLkRFRkFVTFRfVU5JRk9STV9MRUFGX05PREVfU0laRVM9Yi51bmlmb3JtTm9kZURpbWVuc2lvbnMsYi5zdGVwPT0idHJhbnNmb3JtZWQiJiYoeS5UUkFOU0ZPUk1fT05fQ09OU1RSQUlOVF9IQU5ETElORz0hMCx5LkVORk9SQ0VfQ09OU1RSQUlOVFM9ITEseS5BUFBMWV9MQVlPVVQ9ITEpLGIuc3RlcD09ImVuZm9yY2VkIiYmKHkuVFJBTlNGT1JNX09OX0NPTlNUUkFJTlRfSEFORExJTkc9ITEseS5FTkZPUkNFX0NPTlNUUkFJTlRTPSEwLHkuQVBQTFlfTEFZT1VUPSExKSxiLnN0ZXA9PSJjb3NlIiYmKHkuVFJBTlNGT1JNX09OX0NPTlNUUkFJTlRfSEFORExJTkc9ITEseS5FTkZPUkNFX0NPTlNUUkFJTlRTPSExLHkuQVBQTFlfTEFZT1VUPSEwKSxiLnN0ZXA9PSJhbGwiJiYoYi5yYW5kb21pemU/eS5UUkFOU0ZPUk1fT05fQ09OU1RSQUlOVF9IQU5ETElORz0hMDp5LlRSQU5TRk9STV9PTl9DT05TVFJBSU5UX0hBTkRMSU5HPSExLHkuRU5GT1JDRV9DT05TVFJBSU5UUz0hMCx5LkFQUExZX0xBWU9VVD0hMCksYi5maXhlZE5vZGVDb25zdHJhaW50fHxiLmFsaWdubWVudENvbnN0cmFpbnR8fGIucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50P3kuVFJFRV9SRURVQ1RJT05fT05fSU5DUkVNRU5UQUw9ITE6eS5UUkVFX1JFRFVDVElPTl9PTl9JTkNSRU1FTlRBTD0hMDt2YXIgRj1uZXcgaCxQPUYubmV3R3JhcGhNYW5hZ2VyKCk7cmV0dXJuIE8oUC5hZGRSb290KCksdS5nZXRUb3BNb3N0Tm9kZXMoRSksRixiKSxNKEYsUCxBKSxCKEYsYiksRi5ydW5MYXlvdXQoKSxEfSwiY29zZUxheW91dCIpO2EuZXhwb3J0cz17Y29zZUxheW91dDp2fX0sMjEyOihhLHMsbCk9Pnt2YXIgdT1mdW5jdGlvbigpe2Z1bmN0aW9uIGIodyxDKXtmb3IodmFyIFQ9MDtUPEMubGVuZ3RoO1QrKyl7dmFyIEU9Q1tUXTtFLmVudW1lcmFibGU9RS5lbnVtZXJhYmxlfHwhMSxFLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gRSYmKEUud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3LEUua2V5LEUpfX1yZXR1cm4gbyhiLCJkZWZpbmVQcm9wZXJ0aWVzIiksZnVuY3Rpb24odyxDLFQpe3JldHVybiBDJiZiKHcucHJvdG90eXBlLEMpLFQmJmIodyxUKSx3fX0oKTtmdW5jdGlvbiBoKGIsdyl7aWYoIShiIGluc3RhbmNlb2YgdykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9byhoLCJfY2xhc3NDYWxsQ2hlY2siKTt2YXIgZj1sKDY1OCksZD1sKDU0OCkscD1sKDY1NyksbT1wLnNwZWN0cmFsTGF5b3V0LGc9bCg4MTYpLHk9Zy5jb3NlTGF5b3V0LHY9T2JqZWN0LmZyZWV6ZSh7cXVhbGl0eToiZGVmYXVsdCIscmFuZG9taXplOiEwLGFuaW1hdGU6ITAsYW5pbWF0aW9uRHVyYXRpb246MWUzLGFuaW1hdGlvbkVhc2luZzp2b2lkIDAsZml0OiEwLHBhZGRpbmc6MzAsbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiExLHVuaWZvcm1Ob2RlRGltZW5zaW9uczohMSxwYWNrQ29tcG9uZW50czohMCxzdGVwOiJhbGwiLHNhbXBsaW5nVHlwZTohMCxzYW1wbGVTaXplOjI1LG5vZGVTZXBhcmF0aW9uOjc1LHBpVG9sOjFlLTcsbm9kZVJlcHVsc2lvbjpvKGZ1bmN0aW9uKHcpe3JldHVybiA0NTAwfSwibm9kZVJlcHVsc2lvbiIpLGlkZWFsRWRnZUxlbmd0aDpvKGZ1bmN0aW9uKHcpe3JldHVybiA1MH0sImlkZWFsRWRnZUxlbmd0aCIpLGVkZ2VFbGFzdGljaXR5Om8oZnVuY3Rpb24odyl7cmV0dXJuIC40NX0sImVkZ2VFbGFzdGljaXR5IiksbmVzdGluZ0ZhY3RvcjouMSxncmF2aXR5Oi4yNSxudW1JdGVyOjI1MDAsdGlsZTohMCx0aWxpbmdDb21wYXJlQnk6dm9pZCAwLHRpbGluZ1BhZGRpbmdWZXJ0aWNhbDoxMCx0aWxpbmdQYWRkaW5nSG9yaXpvbnRhbDoxMCxncmF2aXR5UmFuZ2VDb21wb3VuZDoxLjUsZ3Jhdml0eUNvbXBvdW5kOjEsZ3Jhdml0eVJhbmdlOjMuOCxpbml0aWFsRW5lcmd5T25JbmNyZW1lbnRhbDouMyxmaXhlZE5vZGVDb25zdHJhaW50OnZvaWQgMCxhbGlnbm1lbnRDb25zdHJhaW50OnZvaWQgMCxyZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQ6dm9pZCAwLHJlYWR5Om8oZnVuY3Rpb24oKXt9LCJyZWFkeSIpLHN0b3A6byhmdW5jdGlvbigpe30sInN0b3AiKX0pLHg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBiKHcpe2godGhpcyxiKSx0aGlzLm9wdGlvbnM9Zih7fSx2LHcpfXJldHVybiBvKGIsIkxheW91dCIpLHUoYixbe2tleToicnVuIix2YWx1ZTpvKGZ1bmN0aW9uKCl7dmFyIEM9dGhpcyxUPXRoaXMub3B0aW9ucyxFPVQuY3ksQT1ULmVsZXMsUz1bXSxfPXZvaWQgMCxJPXZvaWQgMCxEPVtdLGs9dm9pZCAwLEw9W107VC5maXhlZE5vZGVDb25zdHJhaW50JiYoIUFycmF5LmlzQXJyYXkoVC5maXhlZE5vZGVDb25zdHJhaW50KXx8VC5maXhlZE5vZGVDb25zdHJhaW50Lmxlbmd0aD09MCkmJihULmZpeGVkTm9kZUNvbnN0cmFpbnQ9dm9pZCAwKSxULmFsaWdubWVudENvbnN0cmFpbnQmJihULmFsaWdubWVudENvbnN0cmFpbnQudmVydGljYWwmJighQXJyYXkuaXNBcnJheShULmFsaWdubWVudENvbnN0cmFpbnQudmVydGljYWwpfHxULmFsaWdubWVudENvbnN0cmFpbnQudmVydGljYWwubGVuZ3RoPT0wKSYmKFQuYWxpZ25tZW50Q29uc3RyYWludC52ZXJ0aWNhbD12b2lkIDApLFQuYWxpZ25tZW50Q29uc3RyYWludC5ob3Jpem9udGFsJiYoIUFycmF5LmlzQXJyYXkoVC5hbGlnbm1lbnRDb25zdHJhaW50Lmhvcml6b250YWwpfHxULmFsaWdubWVudENvbnN0cmFpbnQuaG9yaXpvbnRhbC5sZW5ndGg9PTApJiYoVC5hbGlnbm1lbnRDb25zdHJhaW50Lmhvcml6b250YWw9dm9pZCAwKSksVC5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQmJighQXJyYXkuaXNBcnJheShULnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludCl8fFQucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50Lmxlbmd0aD09MCkmJihULnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludD12b2lkIDApO3ZhciBSPVQuZml4ZWROb2RlQ29uc3RyYWludHx8VC5hbGlnbm1lbnRDb25zdHJhaW50fHxULnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludDtSJiYoVC50aWxlPSExLFQucGFja0NvbXBvbmVudHM9ITEpO3ZhciBPPXZvaWQgMCxNPSExO2lmKEUubGF5b3V0VXRpbGl0aWVzJiZULnBhY2tDb21wb25lbnRzJiYoTz1FLmxheW91dFV0aWxpdGllcygiZ2V0IiksT3x8KE89RS5sYXlvdXRVdGlsaXRpZXMoKSksTT0hMCksQS5ub2RlcygpLmxlbmd0aD4wKWlmKE0pe3ZhciBQPWQuZ2V0VG9wTW9zdE5vZGVzKFQuZWxlcy5ub2RlcygpKTtpZihrPWQuY29ubmVjdENvbXBvbmVudHMoRSxULmVsZXMsUCksay5mb3JFYWNoKGZ1bmN0aW9uKGNlKXt2YXIgYWU9Y2UuYm91bmRpbmdCb3goKTtMLnB1c2goe3g6YWUueDErYWUudy8yLHk6YWUueTErYWUuaC8yfSl9KSxULnJhbmRvbWl6ZSYmay5mb3JFYWNoKGZ1bmN0aW9uKGNlKXtULmVsZXM9Y2UsUy5wdXNoKG0oVCkpfSksVC5xdWFsaXR5PT0iZGVmYXVsdCJ8fFQucXVhbGl0eT09InByb29mIil7dmFyIHo9RS5jb2xsZWN0aW9uKCk7aWYoVC50aWxlKXt2YXIgJD1uZXcgTWFwLEg9W10sUT1bXSxqPTAsaWU9e25vZGVJbmRleGVzOiQseENvb3JkczpILHlDb29yZHM6UX0sbmU9W107aWYoay5mb3JFYWNoKGZ1bmN0aW9uKGNlLGFlKXtjZS5lZGdlcygpLmxlbmd0aD09MCYmKGNlLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihPZSxnZSl7ei5tZXJnZShjZS5ub2RlcygpW2dlXSksT2UuaXNQYXJlbnQoKXx8KGllLm5vZGVJbmRleGVzLnNldChjZS5ub2RlcygpW2dlXS5pZCgpLGorKyksaWUueENvb3Jkcy5wdXNoKGNlLm5vZGVzKClbMF0ucG9zaXRpb24oKS54KSxpZS55Q29vcmRzLnB1c2goY2Uubm9kZXMoKVswXS5wb3NpdGlvbigpLnkpKX0pLG5lLnB1c2goYWUpKX0pLHoubGVuZ3RoPjEpe3ZhciBsZT16LmJvdW5kaW5nQm94KCk7TC5wdXNoKHt4OmxlLngxK2xlLncvMix5OmxlLnkxK2xlLmgvMn0pLGsucHVzaCh6KSxTLnB1c2goaWUpO2Zvcih2YXIgaGU9bmUubGVuZ3RoLTE7aGU+PTA7aGUtLSlrLnNwbGljZShuZVtoZV0sMSksUy5zcGxpY2UobmVbaGVdLDEpLEwuc3BsaWNlKG5lW2hlXSwxKX19ay5mb3JFYWNoKGZ1bmN0aW9uKGNlLGFlKXtULmVsZXM9Y2UsRC5wdXNoKHkoVCxTW2FlXSkpLGQucmVsb2NhdGVDb21wb25lbnQoTFthZV0sRFthZV0sVCl9KX1lbHNlIGsuZm9yRWFjaChmdW5jdGlvbihjZSxhZSl7ZC5yZWxvY2F0ZUNvbXBvbmVudChMW2FlXSxTW2FlXSxUKX0pO3ZhciBLPW5ldyBTZXQ7aWYoay5sZW5ndGg+MSl7dmFyIFg9W10sdGU9QS5maWx0ZXIoZnVuY3Rpb24oY2Upe3JldHVybiBjZS5jc3MoImRpc3BsYXkiKT09Im5vbmUifSk7ay5mb3JFYWNoKGZ1bmN0aW9uKGNlLGFlKXt2YXIgT2U9dm9pZCAwO2lmKFQucXVhbGl0eT09ImRyYWZ0IiYmKE9lPVNbYWVdLm5vZGVJbmRleGVzKSxjZS5ub2RlcygpLm5vdCh0ZSkubGVuZ3RoPjApe3ZhciBnZT17fTtnZS5lZGdlcz1bXSxnZS5ub2Rlcz1bXTt2YXIgemU9dm9pZCAwO2NlLm5vZGVzKCkubm90KHRlKS5mb3JFYWNoKGZ1bmN0aW9uKEhlKXtpZihULnF1YWxpdHk9PSJkcmFmdCIpaWYoIUhlLmlzUGFyZW50KCkpemU9T2UuZ2V0KEhlLmlkKCkpLGdlLm5vZGVzLnB1c2goe3g6U1thZV0ueENvb3Jkc1t6ZV0tSGUuYm91bmRpbmdib3goKS53LzIseTpTW2FlXS55Q29vcmRzW3plXS1IZS5ib3VuZGluZ2JveCgpLmgvMix3aWR0aDpIZS5ib3VuZGluZ2JveCgpLncsaGVpZ2h0OkhlLmJvdW5kaW5nYm94KCkuaH0pO2Vsc2V7dmFyICRlPWQuY2FsY0JvdW5kaW5nQm94KEhlLFNbYWVdLnhDb29yZHMsU1thZV0ueUNvb3JkcyxPZSk7Z2Uubm9kZXMucHVzaCh7eDokZS50b3BMZWZ0WCx5OiRlLnRvcExlZnRZLHdpZHRoOiRlLndpZHRoLGhlaWdodDokZS5oZWlnaHR9KX1lbHNlIERbYWVdW0hlLmlkKCldJiZnZS5ub2Rlcy5wdXNoKHt4OkRbYWVdW0hlLmlkKCldLmdldExlZnQoKSx5OkRbYWVdW0hlLmlkKCldLmdldFRvcCgpLHdpZHRoOkRbYWVdW0hlLmlkKCldLmdldFdpZHRoKCksaGVpZ2h0OkRbYWVdW0hlLmlkKCldLmdldEhlaWdodCgpfSl9KSxjZS5lZGdlcygpLmZvckVhY2goZnVuY3Rpb24oSGUpe3ZhciAkZT1IZS5zb3VyY2UoKSxSZT1IZS50YXJnZXQoKTtpZigkZS5jc3MoImRpc3BsYXkiKSE9Im5vbmUiJiZSZS5jc3MoImRpc3BsYXkiKSE9Im5vbmUiKWlmKFQucXVhbGl0eT09ImRyYWZ0Iil7dmFyIEllPU9lLmdldCgkZS5pZCgpKSxiZT1PZS5nZXQoUmUuaWQoKSksVz1bXSxkZT1bXTtpZigkZS5pc1BhcmVudCgpKXt2YXIgcmU9ZC5jYWxjQm91bmRpbmdCb3goJGUsU1thZV0ueENvb3JkcyxTW2FlXS55Q29vcmRzLE9lKTtXLnB1c2gocmUudG9wTGVmdFgrcmUud2lkdGgvMiksVy5wdXNoKHJlLnRvcExlZnRZK3JlLmhlaWdodC8yKX1lbHNlIFcucHVzaChTW2FlXS54Q29vcmRzW0llXSksVy5wdXNoKFNbYWVdLnlDb29yZHNbSWVdKTtpZihSZS5pc1BhcmVudCgpKXt2YXIgb2U9ZC5jYWxjQm91bmRpbmdCb3goUmUsU1thZV0ueENvb3JkcyxTW2FlXS55Q29vcmRzLE9lKTtkZS5wdXNoKG9lLnRvcExlZnRYK29lLndpZHRoLzIpLGRlLnB1c2gob2UudG9wTGVmdFkrb2UuaGVpZ2h0LzIpfWVsc2UgZGUucHVzaChTW2FlXS54Q29vcmRzW2JlXSksZGUucHVzaChTW2FlXS55Q29vcmRzW2JlXSk7Z2UuZWRnZXMucHVzaCh7c3RhcnRYOldbMF0sc3RhcnRZOldbMV0sZW5kWDpkZVswXSxlbmRZOmRlWzFdfSl9ZWxzZSBEW2FlXVskZS5pZCgpXSYmRFthZV1bUmUuaWQoKV0mJmdlLmVkZ2VzLnB1c2goe3N0YXJ0WDpEW2FlXVskZS5pZCgpXS5nZXRDZW50ZXJYKCksc3RhcnRZOkRbYWVdWyRlLmlkKCldLmdldENlbnRlclkoKSxlbmRYOkRbYWVdW1JlLmlkKCldLmdldENlbnRlclgoKSxlbmRZOkRbYWVdW1JlLmlkKCldLmdldENlbnRlclkoKX0pfSksZ2Uubm9kZXMubGVuZ3RoPjAmJihYLnB1c2goZ2UpLEsuYWRkKGFlKSl9fSk7dmFyIEo9Ty5wYWNrQ29tcG9uZW50cyhYLFQucmFuZG9taXplKS5zaGlmdHM7aWYoVC5xdWFsaXR5PT0iZHJhZnQiKVMuZm9yRWFjaChmdW5jdGlvbihjZSxhZSl7dmFyIE9lPWNlLnhDb29yZHMubWFwKGZ1bmN0aW9uKHplKXtyZXR1cm4gemUrSlthZV0uZHh9KSxnZT1jZS55Q29vcmRzLm1hcChmdW5jdGlvbih6ZSl7cmV0dXJuIHplK0pbYWVdLmR5fSk7Y2UueENvb3Jkcz1PZSxjZS55Q29vcmRzPWdlfSk7ZWxzZXt2YXIgc2U9MDtLLmZvckVhY2goZnVuY3Rpb24oY2Upe09iamVjdC5rZXlzKERbY2VdKS5mb3JFYWNoKGZ1bmN0aW9uKGFlKXt2YXIgT2U9RFtjZV1bYWVdO09lLnNldENlbnRlcihPZS5nZXRDZW50ZXJYKCkrSltzZV0uZHgsT2UuZ2V0Q2VudGVyWSgpK0pbc2VdLmR5KX0pLHNlKyt9KX19fWVsc2V7dmFyIEI9VC5lbGVzLmJvdW5kaW5nQm94KCk7aWYoTC5wdXNoKHt4OkIueDErQi53LzIseTpCLnkxK0IuaC8yfSksVC5yYW5kb21pemUpe3ZhciBGPW0oVCk7Uy5wdXNoKEYpfVQucXVhbGl0eT09ImRlZmF1bHQifHxULnF1YWxpdHk9PSJwcm9vZiI/KEQucHVzaCh5KFQsU1swXSkpLGQucmVsb2NhdGVDb21wb25lbnQoTFswXSxEWzBdLFQpKTpkLnJlbG9jYXRlQ29tcG9uZW50KExbMF0sU1swXSxUKX12YXIgdWU9byhmdW5jdGlvbihhZSxPZSl7aWYoVC5xdWFsaXR5PT0iZGVmYXVsdCJ8fFQucXVhbGl0eT09InByb29mIil7dHlwZW9mIGFlPT0ibnVtYmVyIiYmKGFlPU9lKTt2YXIgZ2U9dm9pZCAwLHplPXZvaWQgMCxIZT1hZS5kYXRhKCJpZCIpO3JldHVybiBELmZvckVhY2goZnVuY3Rpb24oUmUpe0hlIGluIFJlJiYoZ2U9e3g6UmVbSGVdLmdldFJlY3QoKS5nZXRDZW50ZXJYKCkseTpSZVtIZV0uZ2V0UmVjdCgpLmdldENlbnRlclkoKX0semU9UmVbSGVdKX0pLFQubm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzJiYoemUubGFiZWxXaWR0aCYmKHplLmxhYmVsUG9zSG9yaXpvbnRhbD09ImxlZnQiP2dlLngrPXplLmxhYmVsV2lkdGgvMjp6ZS5sYWJlbFBvc0hvcml6b250YWw9PSJyaWdodCImJihnZS54LT16ZS5sYWJlbFdpZHRoLzIpKSx6ZS5sYWJlbEhlaWdodCYmKHplLmxhYmVsUG9zVmVydGljYWw9PSJ0b3AiP2dlLnkrPXplLmxhYmVsSGVpZ2h0LzI6emUubGFiZWxQb3NWZXJ0aWNhbD09ImJvdHRvbSImJihnZS55LT16ZS5sYWJlbEhlaWdodC8yKSkpLGdlPT1udWxsJiYoZ2U9e3g6YWUucG9zaXRpb24oIngiKSx5OmFlLnBvc2l0aW9uKCJ5Iil9KSx7eDpnZS54LHk6Z2UueX19ZWxzZXt2YXIgJGU9dm9pZCAwO3JldHVybiBTLmZvckVhY2goZnVuY3Rpb24oUmUpe3ZhciBJZT1SZS5ub2RlSW5kZXhlcy5nZXQoYWUuaWQoKSk7SWUhPW51bGwmJigkZT17eDpSZS54Q29vcmRzW0llXSx5OlJlLnlDb29yZHNbSWVdfSl9KSwkZT09bnVsbCYmKCRlPXt4OmFlLnBvc2l0aW9uKCJ4IikseTphZS5wb3NpdGlvbigieSIpfSkse3g6JGUueCx5OiRlLnl9fX0sImdldFBvc2l0aW9ucyIpO2lmKFQucXVhbGl0eT09ImRlZmF1bHQifHxULnF1YWxpdHk9PSJwcm9vZiJ8fFQucmFuZG9taXplKXt2YXIgWj1kLmNhbGNQYXJlbnRzV2l0aG91dENoaWxkcmVuKEUsQSksU2U9QS5maWx0ZXIoZnVuY3Rpb24oY2Upe3JldHVybiBjZS5jc3MoImRpc3BsYXkiKT09Im5vbmUifSk7VC5lbGVzPUEubm90KFNlKSxBLm5vZGVzKCkubm90KCI6cGFyZW50Iikubm90KFNlKS5sYXlvdXRQb3NpdGlvbnMoQyxULHVlKSxaLmxlbmd0aD4wJiZaLmZvckVhY2goZnVuY3Rpb24oY2Upe2NlLnBvc2l0aW9uKHVlKGNlKSl9KX1lbHNlIGNvbnNvbGUubG9nKCJJZiByYW5kb21pemUgb3B0aW9uIGlzIHNldCB0byBmYWxzZSwgdGhlbiBxdWFsaXR5IG9wdGlvbiBtdXN0IGJlICdkZWZhdWx0JyBvciAncHJvb2YnLiIpfSwicnVuIil9XSksYn0oKTthLmV4cG9ydHM9eH0sNjU3OihhLHMsbCk9Pnt2YXIgdT1sKDU0OCksaD1sKDE0MCkubGF5b3V0QmFzZS5NYXRyaXgsZj1sKDE0MCkubGF5b3V0QmFzZS5TVkQsZD1vKGZ1bmN0aW9uKG0pe3ZhciBnPW0uY3kseT1tLmVsZXMsdj15Lm5vZGVzKCkseD15Lm5vZGVzKCI6cGFyZW50IiksYj1uZXcgTWFwLHc9bmV3IE1hcCxDPW5ldyBNYXAsVD1bXSxFPVtdLEE9W10sUz1bXSxfPVtdLEk9W10sRD1bXSxrPVtdLEw9dm9pZCAwLFI9dm9pZCAwLE89MWU4LE09MWUtOSxCPW0ucGlUb2wsRj1tLnNhbXBsaW5nVHlwZSxQPW0ubm9kZVNlcGFyYXRpb24sej12b2lkIDAsJD1vKGZ1bmN0aW9uKCl7Zm9yKHZhciB4ZT0wLHE9MCxwZT0hMTtxPHo7KXt4ZT1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqUikscGU9ITE7Zm9yKHZhciB2ZT0wO3ZlPHE7dmUrKylpZihTW3ZlXT09eGUpe3BlPSEwO2JyZWFrfWlmKCFwZSlTW3FdPXhlLHErKztlbHNlIGNvbnRpbnVlfX0sInJhbmRvbVNhbXBsZUNSIiksSD1vKGZ1bmN0aW9uKHhlLHEscGUpe2Zvcih2YXIgdmU9W10sUGU9MCxfZT0wLHdlPTAsVmU9dm9pZCAwLERlPVtdLHFlPTAsYXQ9MSxSdD0wO1J0PFI7UnQrKylEZVtSdF09Tztmb3IodmVbX2VdPXhlLERlW3hlXT0wO19lPj1QZTspe3dlPXZlW1BlKytdO2Zvcih2YXIgc3Q9VFt3ZV0sVWU9MDtVZTxzdC5sZW5ndGg7VWUrKylWZT13LmdldChzdFtVZV0pLERlW1ZlXT09TyYmKERlW1ZlXT1EZVt3ZV0rMSx2ZVsrK19lXT1WZSk7SVt3ZV1bcV09RGVbd2VdKlB9aWYocGUpe2Zvcih2YXIgY3Q9MDtjdDxSO2N0KyspSVtjdF1bcV08X1tjdF0mJihfW2N0XT1JW2N0XVtxXSk7Zm9yKHZhciBXZT0wO1dlPFI7V2UrKylfW1dlXT5xZSYmKHFlPV9bV2VdLGF0PVdlKX1yZXR1cm4gYXR9LCJCRlMiKSxRPW8oZnVuY3Rpb24oeGUpe3ZhciBxPXZvaWQgMDtpZih4ZSl7cT1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqUiksTD1xO2Zvcih2YXIgdmU9MDt2ZTxSO3ZlKyspX1t2ZV09Tztmb3IodmFyIFBlPTA7UGU8ejtQZSsrKVNbUGVdPXEscT1IKHEsUGUseGUpfWVsc2V7JCgpO2Zvcih2YXIgcGU9MDtwZTx6O3BlKyspSChTW3BlXSxwZSx4ZSwhMSl9Zm9yKHZhciBfZT0wO19lPFI7X2UrKylmb3IodmFyIHdlPTA7d2U8ejt3ZSsrKUlbX2VdW3dlXSo9SVtfZV1bd2VdO2Zvcih2YXIgVmU9MDtWZTx6O1ZlKyspRFtWZV09W107Zm9yKHZhciBEZT0wO0RlPHo7RGUrKylmb3IodmFyIHFlPTA7cWU8ejtxZSsrKURbRGVdW3FlXT1JW1NbcWVdXVtEZV19LCJhbGxCRlMiKSxqPW8oZnVuY3Rpb24oKXtmb3IodmFyIHhlPWYuc3ZkKEQpLHE9eGUuUyxwZT14ZS5VLHZlPXhlLlYsUGU9cVswXSpxWzBdKnFbMF0sX2U9W10sd2U9MDt3ZTx6O3dlKyspe19lW3dlXT1bXTtmb3IodmFyIFZlPTA7VmU8ejtWZSsrKV9lW3dlXVtWZV09MCx3ZT09VmUmJihfZVt3ZV1bVmVdPXFbd2VdLyhxW3dlXSpxW3dlXStQZS8ocVt3ZV0qcVt3ZV0pKSl9az1oLm11bHRNYXQoaC5tdWx0TWF0KHZlLF9lKSxoLnRyYW5zcG9zZShwZSkpfSwic2FtcGxlIiksaWU9byhmdW5jdGlvbigpe2Zvcih2YXIgeGU9dm9pZCAwLHE9dm9pZCAwLHBlPVtdLHZlPVtdLFBlPVtdLF9lPVtdLHdlPTA7d2U8Ujt3ZSsrKXBlW3dlXT1NYXRoLnJhbmRvbSgpLHZlW3dlXT1NYXRoLnJhbmRvbSgpO3BlPWgubm9ybWFsaXplKHBlKSx2ZT1oLm5vcm1hbGl6ZSh2ZSk7Zm9yKHZhciBWZT0wLERlPU0scWU9TSxhdD12b2lkIDA7Oyl7VmUrKztmb3IodmFyIFJ0PTA7UnQ8UjtSdCsrKVBlW1J0XT1wZVtSdF07aWYocGU9aC5tdWx0R2FtbWEoaC5tdWx0TChoLm11bHRHYW1tYShQZSksSSxrKSkseGU9aC5kb3RQcm9kdWN0KFBlLHBlKSxwZT1oLm5vcm1hbGl6ZShwZSksRGU9aC5kb3RQcm9kdWN0KFBlLHBlKSxhdD1NYXRoLmFicyhEZS9xZSksYXQ8PTErQiYmYXQ+PTEpYnJlYWs7cWU9RGV9Zm9yKHZhciBzdD0wO3N0PFI7c3QrKylQZVtzdF09cGVbc3RdO2ZvcihWZT0wLHFlPU07Oyl7VmUrKztmb3IodmFyIFVlPTA7VWU8UjtVZSsrKV9lW1VlXT12ZVtVZV07aWYoX2U9aC5taW51c09wKF9lLGgubXVsdENvbnMoUGUsaC5kb3RQcm9kdWN0KFBlLF9lKSkpLHZlPWgubXVsdEdhbW1hKGgubXVsdEwoaC5tdWx0R2FtbWEoX2UpLEksaykpLHE9aC5kb3RQcm9kdWN0KF9lLHZlKSx2ZT1oLm5vcm1hbGl6ZSh2ZSksRGU9aC5kb3RQcm9kdWN0KF9lLHZlKSxhdD1NYXRoLmFicyhEZS9xZSksYXQ8PTErQiYmYXQ+PTEpYnJlYWs7cWU9RGV9Zm9yKHZhciBjdD0wO2N0PFI7Y3QrKylfZVtjdF09dmVbY3RdO0U9aC5tdWx0Q29ucyhQZSxNYXRoLnNxcnQoTWF0aC5hYnMoeGUpKSksQT1oLm11bHRDb25zKF9lLE1hdGguc3FydChNYXRoLmFicyhxKSkpfSwicG93ZXJJdGVyYXRpb24iKTt1LmNvbm5lY3RDb21wb25lbnRzKGcseSx1LmdldFRvcE1vc3ROb2Rlcyh2KSxiKSx4LmZvckVhY2goZnVuY3Rpb24oVil7dS5jb25uZWN0Q29tcG9uZW50cyhnLHksdS5nZXRUb3BNb3N0Tm9kZXMoVi5kZXNjZW5kYW50cygpLmludGVyc2VjdGlvbih5KSksYil9KTtmb3IodmFyIG5lPTAsbGU9MDtsZTx2Lmxlbmd0aDtsZSsrKXZbbGVdLmlzUGFyZW50KCl8fHcuc2V0KHZbbGVdLmlkKCksbmUrKyk7dmFyIGhlPSEwLEs9ITEsWD12b2lkIDA7dHJ5e2Zvcih2YXIgdGU9Yi5rZXlzKClbU3ltYm9sLml0ZXJhdG9yXSgpLEo7IShoZT0oSj10ZS5uZXh0KCkpLmRvbmUpO2hlPSEwKXt2YXIgc2U9Si52YWx1ZTt3LnNldChzZSxuZSsrKX19Y2F0Y2goVil7Sz0hMCxYPVZ9ZmluYWxseXt0cnl7IWhlJiZ0ZS5yZXR1cm4mJnRlLnJldHVybigpfWZpbmFsbHl7aWYoSyl0aHJvdyBYfX1mb3IodmFyIHVlPTA7dWU8dy5zaXplO3VlKyspVFt1ZV09W107eC5mb3JFYWNoKGZ1bmN0aW9uKFYpe2Zvcih2YXIgeGU9Vi5jaGlsZHJlbigpLmludGVyc2VjdGlvbih5KTt4ZS5ub2RlcygiOmNoaWxkbGVzcyIpLmxlbmd0aD09MDspeGU9eGUubm9kZXMoKVswXS5jaGlsZHJlbigpLmludGVyc2VjdGlvbih5KTt2YXIgcT0wLHBlPXhlLm5vZGVzKCI6Y2hpbGRsZXNzIilbMF0uY29ubmVjdGVkRWRnZXMoKS5sZW5ndGg7eGUubm9kZXMoIjpjaGlsZGxlc3MiKS5mb3JFYWNoKGZ1bmN0aW9uKHZlLFBlKXt2ZS5jb25uZWN0ZWRFZGdlcygpLmxlbmd0aDxwZSYmKHBlPXZlLmNvbm5lY3RlZEVkZ2VzKCkubGVuZ3RoLHE9UGUpfSksQy5zZXQoVi5pZCgpLHhlLm5vZGVzKCI6Y2hpbGRsZXNzIilbcV0uaWQoKSl9KSx2LmZvckVhY2goZnVuY3Rpb24oVil7dmFyIHhlPXZvaWQgMDtWLmlzUGFyZW50KCk/eGU9dy5nZXQoQy5nZXQoVi5pZCgpKSk6eGU9dy5nZXQoVi5pZCgpKSxWLm5laWdoYm9yaG9vZCgpLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihxKXt5LmludGVyc2VjdGlvbihWLmVkZ2VzV2l0aChxKSkubGVuZ3RoPjAmJihxLmlzUGFyZW50KCk/VFt4ZV0ucHVzaChDLmdldChxLmlkKCkpKTpUW3hlXS5wdXNoKHEuaWQoKSkpfSl9KTt2YXIgWj1vKGZ1bmN0aW9uKHhlKXt2YXIgcT13LmdldCh4ZSkscGU9dm9pZCAwO2IuZ2V0KHhlKS5mb3JFYWNoKGZ1bmN0aW9uKHZlKXtnLmdldEVsZW1lbnRCeUlkKHZlKS5pc1BhcmVudCgpP3BlPUMuZ2V0KHZlKTpwZT12ZSxUW3FdLnB1c2gocGUpLFRbdy5nZXQocGUpXS5wdXNoKHhlKX0pfSwiX2xvb3AiKSxTZT0hMCxjZT0hMSxhZT12b2lkIDA7dHJ5e2Zvcih2YXIgT2U9Yi5rZXlzKClbU3ltYm9sLml0ZXJhdG9yXSgpLGdlOyEoU2U9KGdlPU9lLm5leHQoKSkuZG9uZSk7U2U9ITApe3ZhciB6ZT1nZS52YWx1ZTtaKHplKX19Y2F0Y2goVil7Y2U9ITAsYWU9Vn1maW5hbGx5e3RyeXshU2UmJk9lLnJldHVybiYmT2UucmV0dXJuKCl9ZmluYWxseXtpZihjZSl0aHJvdyBhZX19Uj13LnNpemU7dmFyIEhlPXZvaWQgMDtpZihSPjIpe3o9UjxtLnNhbXBsZVNpemU/UjptLnNhbXBsZVNpemU7Zm9yKHZhciAkZT0wOyRlPFI7JGUrKylJWyRlXT1bXTtmb3IodmFyIFJlPTA7UmU8ejtSZSsrKWtbUmVdPVtdO3JldHVybiBtLnF1YWxpdHk9PSJkcmFmdCJ8fG0uc3RlcD09ImFsbCI/KFEoRiksaigpLGllKCksSGU9e25vZGVJbmRleGVzOncseENvb3JkczpFLHlDb29yZHM6QX0pOih3LmZvckVhY2goZnVuY3Rpb24oVix4ZSl7RS5wdXNoKGcuZ2V0RWxlbWVudEJ5SWQoeGUpLnBvc2l0aW9uKCJ4IikpLEEucHVzaChnLmdldEVsZW1lbnRCeUlkKHhlKS5wb3NpdGlvbigieSIpKX0pLEhlPXtub2RlSW5kZXhlczp3LHhDb29yZHM6RSx5Q29vcmRzOkF9KSxIZX1lbHNle3ZhciBJZT13LmtleXMoKSxiZT1nLmdldEVsZW1lbnRCeUlkKEllLm5leHQoKS52YWx1ZSksVz1iZS5wb3NpdGlvbigpLGRlPWJlLm91dGVyV2lkdGgoKTtpZihFLnB1c2goVy54KSxBLnB1c2goVy55KSxSPT0yKXt2YXIgcmU9Zy5nZXRFbGVtZW50QnlJZChJZS5uZXh0KCkudmFsdWUpLG9lPXJlLm91dGVyV2lkdGgoKTtFLnB1c2goVy54K2RlLzIrb2UvMittLmlkZWFsRWRnZUxlbmd0aCksQS5wdXNoKFcueSl9cmV0dXJuIEhlPXtub2RlSW5kZXhlczp3LHhDb29yZHM6RSx5Q29vcmRzOkF9LEhlfX0sInNwZWN0cmFsTGF5b3V0Iik7YS5leHBvcnRzPXtzcGVjdHJhbExheW91dDpkfX0sNTc5OihhLHMsbCk9Pnt2YXIgdT1sKDIxMiksaD1vKGZ1bmN0aW9uKGQpe2QmJmQoImxheW91dCIsImZjb3NlIix1KX0sInJlZ2lzdGVyIik7dHlwZW9mIGN5dG9zY2FwZTwidSImJmgoY3l0b3NjYXBlKSxhLmV4cG9ydHM9aH0sMTQwOmE9PnthLmV4cG9ydHM9dH19LHI9e307ZnVuY3Rpb24gbihhKXt2YXIgcz1yW2FdO2lmKHMhPT12b2lkIDApcmV0dXJuIHMuZXhwb3J0czt2YXIgbD1yW2FdPXtleHBvcnRzOnt9fTtyZXR1cm4gZVthXShsLGwuZXhwb3J0cyxuKSxsLmV4cG9ydHN9byhuLCJfX3dlYnBhY2tfcmVxdWlyZV9fIik7dmFyIGk9big1NzkpO3JldHVybiBpfSkoKX0pfSk7dmFyIGR5LFpwLHlGPU4oKCk9PnsidXNlIHN0cmljdCI7dHUoKTtkeT1vKHQ9PmA8Zz48cmVjdCB3aWR0aD0iODAiIGhlaWdodD0iODAiIHN0eWxlPSJmaWxsOiAjMDg3ZWJmOyBzdHJva2Utd2lkdGg6IDBweDsiLz4ke3R9PC9nPmAsIndyYXBJY29uIiksWnA9e3ByZWZpeDoibWVybWFpZC1hcmNoaXRlY3R1cmUiLGhlaWdodDo4MCx3aWR0aDo4MCxpY29uczp7ZGF0YWJhc2U6e2JvZHk6ZHkoJzxwYXRoIGlkPSJiIiBkYXRhLW5hbWU9IjQiIGQ9Im0yMCw1Ny44NmMwLDMuOTQsOC45NSw3LjE0LDIwLDcuMTRzMjAtMy4yLDIwLTcuMTQiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7Ii8+PHBhdGggaWQ9ImMiIGRhdGEtbmFtZT0iMyIgZD0ibTIwLDQ1Ljk1YzAsMy45NCw4Ljk1LDcuMTQsMjAsNy4xNHMyMC0zLjIsMjAtNy4xNCIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz48cGF0aCBpZD0iZCIgZGF0YS1uYW1lPSIyIiBkPSJtMjAsMzQuMDVjMCwzLjk0LDguOTUsNy4xNCwyMCw3LjE0czIwLTMuMiwyMC03LjE0IiBzdHlsZT0iZmlsbDogbm9uZTsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IHN0cm9rZS13aWR0aDogMnB4OyIvPjxlbGxpcHNlIGlkPSJlIiBkYXRhLW5hbWU9IjEiIGN4PSI0MCIgY3k9IjIyLjE0IiByeD0iMjAiIHJ5PSI3LjE0IiBzdHlsZT0iZmlsbDogbm9uZTsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IHN0cm9rZS13aWR0aDogMnB4OyIvPjxsaW5lIHgxPSIyMCIgeTE9IjU3Ljg2IiB4Mj0iMjAiIHkyPSIyMi4xNCIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz48bGluZSB4MT0iNjAiIHkxPSI1Ny44NiIgeDI9IjYwIiB5Mj0iMjIuMTQiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7Ii8+Jyl9LHNlcnZlcjp7Ym9keTpkeSgnPHJlY3QgeD0iMTcuNSIgeT0iMTcuNSIgd2lkdGg9IjQ1IiBoZWlnaHQ9IjQ1IiByeD0iMiIgcnk9IjIiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7Ii8+PGxpbmUgeDE9IjE3LjUiIHkxPSIzMi41IiB4Mj0iNjIuNSIgeTI9IjMyLjUiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7Ii8+PGxpbmUgeDE9IjE3LjUiIHkxPSI0Ny41IiB4Mj0iNjIuNSIgeTI9IjQ3LjUiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7Ii8+PGc+PHBhdGggZD0ibTU2LjI1LDI1YzAsLjI3LS40NS41LTEsLjVoLTEwLjVjLS41NSwwLTEtLjIzLTEtLjVzLjQ1LS41LDEtLjVoMTAuNWMuNTUsMCwxLC4yMywxLC41WiIgc3R5bGU9ImZpbGw6ICNmZmY7IHN0cm9rZS13aWR0aDogMHB4OyIvPjxwYXRoIGQ9Im01Ni4yNSwyNWMwLC4yNy0uNDUuNS0xLC41aC0xMC41Yy0uNTUsMC0xLS4yMy0xLS41cy40NS0uNSwxLS41aDEwLjVjLjU1LDAsMSwuMjMsMSwuNVoiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsiLz48L2c+PGc+PHBhdGggZD0ibTU2LjI1LDQwYzAsLjI3LS40NS41LTEsLjVoLTEwLjVjLS41NSwwLTEtLjIzLTEtLjVzLjQ1LS41LDEtLjVoMTAuNWMuNTUsMCwxLC4yMywxLC41WiIgc3R5bGU9ImZpbGw6ICNmZmY7IHN0cm9rZS13aWR0aDogMHB4OyIvPjxwYXRoIGQ9Im01Ni4yNSw0MGMwLC4yNy0uNDUuNS0xLC41aC0xMC41Yy0uNTUsMC0xLS4yMy0xLS41cy40NS0uNSwxLS41aDEwLjVjLjU1LDAsMSwuMjMsMSwuNVoiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsiLz48L2c+PGc+PHBhdGggZD0ibTU2LjI1LDU1YzAsLjI3LS40NS41LTEsLjVoLTEwLjVjLS41NSwwLTEtLjIzLTEtLjVzLjQ1LS41LDEtLjVoMTAuNWMuNTUsMCwxLC4yMywxLC41WiIgc3R5bGU9ImZpbGw6ICNmZmY7IHN0cm9rZS13aWR0aDogMHB4OyIvPjxwYXRoIGQ9Im01Ni4yNSw1NWMwLC4yNy0uNDUuNS0xLC41aC0xMC41Yy0uNTUsMC0xLS4yMy0xLS41cy40NS0uNSwxLS41aDEwLjVjLjU1LDAsMSwuMjMsMSwuNVoiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsiLz48L2c+PGc+PGNpcmNsZSBjeD0iMzIuNSIgY3k9IjI1IiByPSIuNzUiIHN0eWxlPSJmaWxsOiAjZmZmOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsiLz48Y2lyY2xlIGN4PSIyNy41IiBjeT0iMjUiIHI9Ii43NSIgc3R5bGU9ImZpbGw6ICNmZmY7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyIvPjxjaXJjbGUgY3g9IjIyLjUiIGN5PSIyNSIgcj0iLjc1IiBzdHlsZT0iZmlsbDogI2ZmZjsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7Ii8+PC9nPjxnPjxjaXJjbGUgY3g9IjMyLjUiIGN5PSI0MCIgcj0iLjc1IiBzdHlsZT0iZmlsbDogI2ZmZjsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7Ii8+PGNpcmNsZSBjeD0iMjcuNSIgY3k9IjQwIiByPSIuNzUiIHN0eWxlPSJmaWxsOiAjZmZmOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsiLz48Y2lyY2xlIGN4PSIyMi41IiBjeT0iNDAiIHI9Ii43NSIgc3R5bGU9ImZpbGw6ICNmZmY7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyIvPjwvZz48Zz48Y2lyY2xlIGN4PSIzMi41IiBjeT0iNTUiIHI9Ii43NSIgc3R5bGU9ImZpbGw6ICNmZmY7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyIvPjxjaXJjbGUgY3g9IjI3LjUiIGN5PSI1NSIgcj0iLjc1IiBzdHlsZT0iZmlsbDogI2ZmZjsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7Ii8+PGNpcmNsZSBjeD0iMjIuNSIgY3k9IjU1IiByPSIuNzUiIHN0eWxlPSJmaWxsOiAjZmZmOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsiLz48L2c+Jyl9LGRpc2s6e2JvZHk6ZHkoJzxyZWN0IHg9IjIwIiB5PSIxNSIgd2lkdGg9IjQwIiBoZWlnaHQ9IjUwIiByeD0iMSIgcnk9IjEiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7Ii8+PGVsbGlwc2UgY3g9IjI0IiBjeT0iMTkuMTciIHJ4PSIuOCIgcnk9Ii44MyIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz48ZWxsaXBzZSBjeD0iNTYiIGN5PSIxOS4xNyIgcng9Ii44IiByeT0iLjgzIiBzdHlsZT0iZmlsbDogbm9uZTsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IHN0cm9rZS13aWR0aDogMnB4OyIvPjxlbGxpcHNlIGN4PSIyNCIgY3k9IjYwLjgzIiByeD0iLjgiIHJ5PSIuODMiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7Ii8+PGVsbGlwc2UgY3g9IjU2IiBjeT0iNjAuODMiIHJ4PSIuOCIgcnk9Ii44MyIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz48ZWxsaXBzZSBjeD0iNDAiIGN5PSIzMy43NSIgcng9IjE0IiByeT0iMTQuNTgiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7Ii8+PGVsbGlwc2UgY3g9IjQwIiBjeT0iMzMuNzUiIHJ4PSI0IiByeT0iNC4xNyIgc3R5bGU9ImZpbGw6ICNmZmY7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz48cGF0aCBkPSJtMzcuNTEsNDIuNTJsLTQuODMsMTMuMjJjLS4yNi43MS0xLjEsMS4wMi0xLjc2LjY0bC00LjE4LTIuNDJjLS42Ni0uMzgtLjgxLTEuMjYtLjMzLTEuODRsOS4wMS0xMC44Yy44OC0xLjA1LDIuNTYtLjA4LDIuMDksMS4yWiIgc3R5bGU9ImZpbGw6ICNmZmY7IHN0cm9rZS13aWR0aDogMHB4OyIvPicpfSxpbnRlcm5ldDp7Ym9keTpkeSgnPGNpcmNsZSBjeD0iNDAiIGN5PSI0MCIgcj0iMjIuNSIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz48bGluZSB4MT0iNDAiIHkxPSIxNy41IiB4Mj0iNDAiIHkyPSI2Mi41IiBzdHlsZT0iZmlsbDogbm9uZTsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IHN0cm9rZS13aWR0aDogMnB4OyIvPjxsaW5lIHgxPSIxNy41IiB5MT0iNDAiIHgyPSI2Mi41IiB5Mj0iNDAiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7Ii8+PHBhdGggZD0ibTM5Ljk5LDE3LjUxYy0xNS4yOCwxMS4xLTE1LjI4LDMzLjg4LDAsNDQuOTgiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7Ii8+PHBhdGggZD0ibTQwLjAxLDE3LjUxYzE1LjI4LDExLjEsMTUuMjgsMzMuODgsMCw0NC45OCIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz48bGluZSB4MT0iMTkuNzUiIHkxPSIzMC4xIiB4Mj0iNjAuMjUiIHkyPSIzMC4xIiBzdHlsZT0iZmlsbDogbm9uZTsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IHN0cm9rZS13aWR0aDogMnB4OyIvPjxsaW5lIHgxPSIxOS43NSIgeTE9IjQ5LjkiIHgyPSI2MC4yNSIgeTI9IjQ5LjkiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7Ii8+Jyl9LGNsb3VkOntib2R5OmR5KCc8cGF0aCBkPSJtNjUsNDcuNWMwLDIuNzYtMi4yNCw1LTUsNUgyMGMtMi43NiwwLTUtMi4yNC01LTUsMC0xLjg3LDEuMDMtMy41MSwyLjU2LTQuMzYtLjA0LS4yMS0uMDYtLjQyLS4wNi0uNjQsMC0yLjYsMi40OC00Ljc0LDUuNjUtNC45NywxLjY1LTQuNTEsNi4zNC03Ljc2LDExLjg1LTcuNzYuODYsMCwxLjY5LjA4LDIuNS4yMywyLjA5LTEuNTcsNC42OS0yLjUsNy41LTIuNSw2LjEsMCwxMS4xOSw0LjM4LDEyLjI4LDEwLjE3LDIuMTQuNTYsMy43MiwyLjUxLDMuNzIsNC44MywwLC4wMywwLC4wNy0uMDEuMSwyLjI5LjQ2LDQuMDEsMi40OCw0LjAxLDQuOVoiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7Ii8+Jyl9LHVua25vd246T0MsYmxhbms6e2JvZHk6ZHkoIiIpfX19fSk7dmFyIEJ2ZSxGdmUsJHZlLHp2ZSxHdmU9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt0dSgpO3p0KCk7dG8oKTt3NCgpO3lGKCk7b0MoKTtCdmU9byhhc3luYyBmdW5jdGlvbih0LGUpe2xldCByPUxpKCJwYWRkaW5nIiksbj1MaSgiaWNvblNpemUiKSxpPW4vMixhPW4vNixzPWEvMjthd2FpdCBQcm9taXNlLmFsbChlLmVkZ2VzKCkubWFwKGFzeW5jIGw9PntsZXR7c291cmNlOnUsc291cmNlRGlyOmgsc291cmNlQXJyb3c6Zixzb3VyY2VHcm91cDpkLHRhcmdldDpwLHRhcmdldERpcjptLHRhcmdldEFycm93OmcsdGFyZ2V0R3JvdXA6eSxsYWJlbDp2fT1zQyhsKSx7eCx5OmJ9PWxbMF0uc291cmNlRW5kcG9pbnQoKSx7eDp3LHk6Q309bFswXS5taWRwb2ludCgpLHt4OlQseTpFfT1sWzBdLnRhcmdldEVuZHBvaW50KCksQT1yKzQ7aWYoZCYmKEhhKGgpP3grPWg9PT0iTCI/LUE6QTpiKz1oPT09IlQiPy1BOkErMTgpLHkmJihIYShtKT9UKz1tPT09IkwiPy1BOkE6RSs9bT09PSJUIj8tQTpBKzE4KSwhZCYmUXAuZ2V0Tm9kZSh1KT8udHlwZT09PSJqdW5jdGlvbiImJihIYShoKT94Kz1oPT09IkwiP2k6LWk6Yis9aD09PSJUIj9pOi1pKSwheSYmUXAuZ2V0Tm9kZShwKT8udHlwZT09PSJqdW5jdGlvbiImJihIYShtKT9UKz1tPT09IkwiP2k6LWk6RSs9bT09PSJUIj9pOi1pKSxsWzBdLl9wcml2YXRlLnJzY3JhdGNoKXtsZXQgUz10Lmluc2VydCgiZyIpO2lmKFMuaW5zZXJ0KCJwYXRoIikuYXR0cigiZCIsYE0gJHt4fSwke2J9IEwgJHt3fSwke0N9IEwke1R9LCR7RX0gYCkuYXR0cigiY2xhc3MiLCJlZGdlIiksZil7bGV0IF89SGEoaCk/djRbaF0oeCxhKTp4LXMsST1aYyhoKT92NFtoXShiLGEpOmItcztTLmluc2VydCgicG9seWdvbiIpLmF0dHIoInBvaW50cyIsY0ZbaF0oYSkpLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke199LCR7SX0pYCkuYXR0cigiY2xhc3MiLCJhcnJvdyIpfWlmKGcpe2xldCBfPUhhKG0pP3Y0W21dKFQsYSk6VC1zLEk9WmMobSk/djRbbV0oRSxhKTpFLXM7Uy5pbnNlcnQoInBvbHlnb24iKS5hdHRyKCJwb2ludHMiLGNGW21dKGEpKS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtffSwke0l9KWApLmF0dHIoImNsYXNzIiwiYXJyb3ciKX1pZih2KXtsZXQgXz14NChoLG0pPyJYWSI6SGEoaCk/IlgiOiJZIixJPTA7Xz09PSJYIj9JPU1hdGguYWJzKHgtVCk6Xz09PSJZIj9JPU1hdGguYWJzKGItRSkvMS41Okk9TWF0aC5hYnMoeC1UKS8yO2xldCBEPVMuYXBwZW5kKCJnIik7aWYoYXdhaXQgSG4oRCx2LHt1c2VIdG1sTGFiZWxzOiExLHdpZHRoOkksY2xhc3NlczoiYXJjaGl0ZWN0dXJlLXNlcnZpY2UtbGFiZWwifSxtZSgpKSxELmF0dHIoImR5IiwiMWVtIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLF89PT0iWCIpRC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit3KyIsICIrQysiKSIpO2Vsc2UgaWYoXz09PSJZIilELmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3crIiwgIitDKyIpIHJvdGF0ZSgtOTApIik7ZWxzZSBpZihfPT09IlhZIil7bGV0IGs9YjQoaCxtKTtpZihrJiZTdmUoaykpe2xldCBMPUQubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFtSLE9dPUF2ZShrKTtELmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwiYXV0byIpLmF0dHIoInRyYW5zZm9ybSIsYHJvdGF0ZSgkey0xKlIqTyo0NX0pYCk7bGV0IE09RC5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7RC5hdHRyKCJ0cmFuc2Zvcm0iLGAKICAgICAgICAgICAgICAgIHRyYW5zbGF0ZSgke3d9LCAke0MtTC5oZWlnaHQvMn0pCiAgICAgICAgICAgICAgICB0cmFuc2xhdGUoJHtSKk0ud2lkdGgvMn0sICR7TypNLmhlaWdodC8yfSkKICAgICAgICAgICAgICAgIHJvdGF0ZSgkey0xKlIqTyo0NX0sIDAsICR7TC5oZWlnaHQvMn0pCiAgICAgICAgICAgICAgYCl9fX19fSkpfSwiZHJhd0VkZ2VzIiksRnZlPW8oYXN5bmMgZnVuY3Rpb24odCxlKXtsZXQgbj1MaSgicGFkZGluZyIpKi43NSxpPUxpKCJmb250U2l6ZSIpLHM9TGkoImljb25TaXplIikvMjthd2FpdCBQcm9taXNlLmFsbChlLm5vZGVzKCkubWFwKGFzeW5jIGw9PntsZXQgdT1GZihsKTtpZih1LnR5cGU9PT0iZ3JvdXAiKXtsZXR7aCx3OmYseDE6ZCx5MTpwfT1sLmJvdW5kaW5nQm94KCk7dC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IixkK3MpLmF0dHIoInkiLHArcykuYXR0cigid2lkdGgiLGYpLmF0dHIoImhlaWdodCIsaCkuYXR0cigiY2xhc3MiLCJub2RlLWJrZyIpO2xldCBtPXQuYXBwZW5kKCJnIiksZz1kLHk9cDtpZih1Lmljb24pe2xldCB2PW0uYXBwZW5kKCJnIik7di5odG1sKGA8Zz4ke2F3YWl0IHdvKHUuaWNvbix7aGVpZ2h0Om4sd2lkdGg6bixmYWxsYmFja1ByZWZpeDpacC5wcmVmaXh9KX08L2c+YCksdi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoZytzKzEpKyIsICIrKHkrcysxKSsiKSIpLGcrPW4seSs9aS8yLTEtMn1pZih1LmxhYmVsKXtsZXQgdj1tLmFwcGVuZCgiZyIpO2F3YWl0IEhuKHYsdS5sYWJlbCx7dXNlSHRtbExhYmVsczohMSx3aWR0aDpmLGNsYXNzZXM6ImFyY2hpdGVjdHVyZS1zZXJ2aWNlLWxhYmVsIn0sbWUoKSksdi5hdHRyKCJkeSIsIjFlbSIpLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwic3RhcnQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsInN0YXJ0Iiksdi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoZytzKzQpKyIsICIrKHkrcysyKSsiKSIpfX19KSl9LCJkcmF3R3JvdXBzIiksJHZlPW8oYXN5bmMgZnVuY3Rpb24odCxlLHIpe2ZvcihsZXQgbiBvZiByKXtsZXQgaT1lLmFwcGVuZCgiZyIpLGE9TGkoImljb25TaXplIik7aWYobi50aXRsZSl7bGV0IGg9aS5hcHBlbmQoImciKTthd2FpdCBIbihoLG4udGl0bGUse3VzZUh0bWxMYWJlbHM6ITEsd2lkdGg6YSoxLjUsY2xhc3NlczoiYXJjaGl0ZWN0dXJlLXNlcnZpY2UtbGFiZWwifSxtZSgpKSxoLmF0dHIoImR5IiwiMWVtIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLGguYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYS8yKyIsICIrYSsiKSIpfWxldCBzPWkuYXBwZW5kKCJnIik7aWYobi5pY29uKXMuaHRtbChgPGc+JHthd2FpdCB3byhuLmljb24se2hlaWdodDphLHdpZHRoOmEsZmFsbGJhY2tQcmVmaXg6WnAucHJlZml4fSl9PC9nPmApO2Vsc2UgaWYobi5pY29uVGV4dCl7cy5odG1sKGA8Zz4ke2F3YWl0IHdvKCJibGFuayIse2hlaWdodDphLHdpZHRoOmEsZmFsbGJhY2tQcmVmaXg6WnAucHJlZml4fSl9PC9nPmApO2xldCBkPXMuYXBwZW5kKCJnIikuYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigid2lkdGgiLGEpLmF0dHIoImhlaWdodCIsYSkuYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsIm5vZGUtaWNvbi10ZXh0IikuYXR0cigic3R5bGUiLGBoZWlnaHQ6ICR7YX1weDtgKS5hcHBlbmQoImRpdiIpLmh0bWwobi5pY29uVGV4dCkscD1wYXJzZUludCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkLm5vZGUoKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJmb250LXNpemUiKS5yZXBsYWNlKC9cRC9nLCIiKSk/PzE2O2QuYXR0cigic3R5bGUiLGAtd2Via2l0LWxpbmUtY2xhbXA6ICR7TWF0aC5mbG9vcigoYS0yKS9wKX07YCl9ZWxzZSBzLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwibm9kZS1ia2ciKS5hdHRyKCJpZCIsIm5vZGUtIituLmlkKS5hdHRyKCJkIixgTTAgJHthfSB2JHstYX0gcTAsLTUgNSwtNSBoJHthfSBxNSwwIDUsNSB2JHthfSBIMCBaYCk7aS5hdHRyKCJjbGFzcyIsImFyY2hpdGVjdHVyZS1zZXJ2aWNlIik7bGV0e3dpZHRoOmwsaGVpZ2h0OnV9PWkuX2dyb3Vwc1swXVswXS5nZXRCQm94KCk7bi53aWR0aD1sLG4uaGVpZ2h0PXUsdC5zZXRFbGVtZW50Rm9ySWQobi5pZCxpKX1yZXR1cm4gMH0sImRyYXdTZXJ2aWNlcyIpLHp2ZT1vKGZ1bmN0aW9uKHQsZSxyKXtyLmZvckVhY2gobj0+e2xldCBpPWUuYXBwZW5kKCJnIiksYT1MaSgiaWNvblNpemUiKTtpLmFwcGVuZCgiZyIpLmFwcGVuZCgicmVjdCIpLmF0dHIoImlkIiwibm9kZS0iK24uaWQpLmF0dHIoImZpbGwtb3BhY2l0eSIsIjAiKS5hdHRyKCJ3aWR0aCIsYSkuYXR0cigiaGVpZ2h0IixhKSxpLmF0dHIoImNsYXNzIiwiYXJjaGl0ZWN0dXJlLWp1bmN0aW9uIik7bGV0e3dpZHRoOmwsaGVpZ2h0OnV9PWkuX2dyb3Vwc1swXVswXS5nZXRCQm94KCk7aS53aWR0aD1sLGkuaGVpZ2h0PXUsdC5zZXRFbGVtZW50Rm9ySWQobi5pZCxpKX0pfSwiZHJhd0p1bmN0aW9ucyIpfSk7ZnVuY3Rpb24gU3J0KHQsZSl7dC5mb3JFYWNoKHI9PntlLmFkZCh7Z3JvdXA6Im5vZGVzIixkYXRhOnt0eXBlOiJzZXJ2aWNlIixpZDpyLmlkLGljb246ci5pY29uLGxhYmVsOnIudGl0bGUscGFyZW50OnIuaW4sd2lkdGg6TGkoImljb25TaXplIiksaGVpZ2h0OkxpKCJpY29uU2l6ZSIpfSxjbGFzc2VzOiJub2RlLXNlcnZpY2UifSl9KX1mdW5jdGlvbiBDcnQodCxlKXt0LmZvckVhY2gocj0+e2UuYWRkKHtncm91cDoibm9kZXMiLGRhdGE6e3R5cGU6Imp1bmN0aW9uIixpZDpyLmlkLHBhcmVudDpyLmluLHdpZHRoOkxpKCJpY29uU2l6ZSIpLGhlaWdodDpMaSgiaWNvblNpemUiKX0sY2xhc3Nlczoibm9kZS1qdW5jdGlvbiJ9KX0pfWZ1bmN0aW9uIEFydCh0LGUpe2Uubm9kZXMoKS5tYXAocj0+e2xldCBuPUZmKHIpO2lmKG4udHlwZT09PSJncm91cCIpcmV0dXJuO24ueD1yLnBvc2l0aW9uKCkueCxuLnk9ci5wb3NpdGlvbigpLnksdC5nZXRFbGVtZW50QnlJZChuLmlkKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisobi54fHwwKSsiLCIrKG4ueXx8MCkrIikiKX0pfWZ1bmN0aW9uIF9ydCh0LGUpe3QuZm9yRWFjaChyPT57ZS5hZGQoe2dyb3VwOiJub2RlcyIsZGF0YTp7dHlwZToiZ3JvdXAiLGlkOnIuaWQsaWNvbjpyLmljb24sbGFiZWw6ci50aXRsZSxwYXJlbnQ6ci5pbn0sY2xhc3Nlczoibm9kZS1ncm91cCJ9KX0pfWZ1bmN0aW9uIERydCh0LGUpe3QuZm9yRWFjaChyPT57bGV0e2xoc0lkOm4scmhzSWQ6aSxsaHNJbnRvOmEsbGhzR3JvdXA6cyxyaHNJbnRvOmwsbGhzRGlyOnUscmhzRGlyOmgscmhzR3JvdXA6Zix0aXRsZTpkfT1yLHA9eDQoci5saHNEaXIsci5yaHNEaXIpPyJzZWdtZW50cyI6InN0cmFpZ2h0IixtPXtpZDpgJHtufS0ke2l9YCxsYWJlbDpkLHNvdXJjZTpuLHNvdXJjZURpcjp1LHNvdXJjZUFycm93OmEsc291cmNlR3JvdXA6cyxzb3VyY2VFbmRwb2ludDp1PT09IkwiPyIwIDUwJSI6dT09PSJSIj8iMTAwJSA1MCUiOnU9PT0iVCI/IjUwJSAwIjoiNTAlIDEwMCUiLHRhcmdldDppLHRhcmdldERpcjpoLHRhcmdldEFycm93OmwsdGFyZ2V0R3JvdXA6Zix0YXJnZXRFbmRwb2ludDpoPT09IkwiPyIwIDUwJSI6aD09PSJSIj8iMTAwJSA1MCUiOmg9PT0iVCI/IjUwJSAwIjoiNTAlIDEwMCUifTtlLmFkZCh7Z3JvdXA6ImVkZ2VzIixkYXRhOm0sY2xhc3NlczpwfSl9KX1mdW5jdGlvbiBMcnQodCxlLHIpe2xldCBuPW8oKGwsdSk9Pk9iamVjdC5lbnRyaWVzKGwpLnJlZHVjZSgoaCxbZixkXSk9PntsZXQgcD0wLG09T2JqZWN0LmVudHJpZXMoZCk7aWYobS5sZW5ndGg9PT0xKXJldHVybiBoW2ZdPW1bMF1bMV0saDtmb3IobGV0IGc9MDtnPG0ubGVuZ3RoLTE7ZysrKWZvcihsZXQgeT1nKzE7eTxtLmxlbmd0aDt5Kyspe2xldFt2LHhdPW1bZ10sW2Isd109bVt5XTtpZihyW3ZdPy5bYl09PT11KWhbZl0/Pz1bXSxoW2ZdPVsuLi5oW2ZdLC4uLngsLi4ud107ZWxzZSBpZih2PT09ImRlZmF1bHQifHxiPT09ImRlZmF1bHQiKWhbZl0/Pz1bXSxoW2ZdPVsuLi5oW2ZdLC4uLngsLi4ud107ZWxzZXtsZXQgVD1gJHtmfS0ke3ArK31gO2hbVF09eDtsZXQgRT1gJHtmfS0ke3ArK31gO2hbRV09d319cmV0dXJuIGh9LHt9KSwiZmxhdHRlbkFsaWdubWVudHMiKSxpPWUubWFwKGw9PntsZXQgdT17fSxoPXt9O3JldHVybiBPYmplY3QuZW50cmllcyhsKS5mb3JFYWNoKChbZixbZCxwXV0pPT57bGV0IG09dC5nZXROb2RlKGYpPy5pbj8/ImRlZmF1bHQiO3VbcF0/Pz17fSx1W3BdW21dPz89W10sdVtwXVttXS5wdXNoKGYpLGhbZF0/Pz17fSxoW2RdW21dPz89W10saFtkXVttXS5wdXNoKGYpfSkse2hvcml6Ok9iamVjdC52YWx1ZXMobih1LCJob3Jpem9udGFsIikpLmZpbHRlcihmPT5mLmxlbmd0aD4xKSx2ZXJ0Ok9iamVjdC52YWx1ZXMobihoLCJ2ZXJ0aWNhbCIpKS5maWx0ZXIoZj0+Zi5sZW5ndGg+MSl9fSksW2Esc109aS5yZWR1Y2UoKFtsLHVdLHtob3JpejpoLHZlcnQ6Zn0pPT5bWy4uLmwsLi4uaF0sWy4uLnUsLi4uZl1dLFtbXSxbXV0pO3JldHVybntob3Jpem9udGFsOmEsdmVydGljYWw6c319ZnVuY3Rpb24gUnJ0KHQpe2xldCBlPVtdLHI9byhpPT5gJHtpWzBdfSwke2lbMV19YCwicG9zVG9TdHIiKSxuPW8oaT0+aS5zcGxpdCgiLCIpLm1hcChhPT5wYXJzZUludChhKSksInN0clRvUG9zIik7cmV0dXJuIHQuZm9yRWFjaChpPT57bGV0IGE9T2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGkpLm1hcCgoW2gsZl0pPT5bcihmKSxoXSkpLHM9W3IoWzAsMF0pXSxsPXt9LHU9e0w6Wy0xLDBdLFI6WzEsMF0sVDpbMCwxXSxCOlswLC0xXX07Zm9yKDtzLmxlbmd0aD4wOyl7bGV0IGg9cy5zaGlmdCgpO2lmKGgpe2xbaF09MTtsZXQgZj1hW2hdO2lmKGYpe2xldCBkPW4oaCk7T2JqZWN0LmVudHJpZXModSkuZm9yRWFjaCgoW3AsbV0pPT57bGV0IGc9cihbZFswXSttWzBdLGRbMV0rbVsxXV0pLHk9YVtnXTt5JiYhbFtnXSYmKHMucHVzaChnKSxlLnB1c2goe1tsRltwXV06eSxbbEZbRXZlKHApXV06ZixnYXA6MS41KkxpKCJpY29uU2l6ZSIpfSkpfSl9fX19KSxlfWZ1bmN0aW9uIE5ydCh0LGUscixuLGkse3NwYXRpYWxNYXBzOmEsZ3JvdXBBbGlnbm1lbnRzOnN9KXtyZXR1cm4gbmV3IFByb21pc2UobD0+e2xldCB1PUdlKCJib2R5IikuYXBwZW5kKCJkaXYiKS5hdHRyKCJpZCIsImN5IikuYXR0cigic3R5bGUiLCJkaXNwbGF5Om5vbmUiKSxoPXJsKHtjb250YWluZXI6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImN5Iiksc3R5bGU6W3tzZWxlY3RvcjoiZWRnZSIsc3R5bGU6eyJjdXJ2ZS1zdHlsZSI6InN0cmFpZ2h0IixsYWJlbDoiZGF0YShsYWJlbCkiLCJzb3VyY2UtZW5kcG9pbnQiOiJkYXRhKHNvdXJjZUVuZHBvaW50KSIsInRhcmdldC1lbmRwb2ludCI6ImRhdGEodGFyZ2V0RW5kcG9pbnQpIn19LHtzZWxlY3RvcjoiZWRnZS5zZWdtZW50cyIsc3R5bGU6eyJjdXJ2ZS1zdHlsZSI6InNlZ21lbnRzIiwic2VnbWVudC13ZWlnaHRzIjoiMCIsInNlZ21lbnQtZGlzdGFuY2VzIjpbLjVdLCJlZGdlLWRpc3RhbmNlcyI6ImVuZHBvaW50cyIsInNvdXJjZS1lbmRwb2ludCI6ImRhdGEoc291cmNlRW5kcG9pbnQpIiwidGFyZ2V0LWVuZHBvaW50IjoiZGF0YSh0YXJnZXRFbmRwb2ludCkifX0se3NlbGVjdG9yOiJub2RlIixzdHlsZTp7ImNvbXBvdW5kLXNpemluZy13cnQtbGFiZWxzIjoiaW5jbHVkZSJ9fSx7c2VsZWN0b3I6Im5vZGVbbGFiZWxdIixzdHlsZTp7InRleHQtdmFsaWduIjoiYm90dG9tIiwidGV4dC1oYWxpZ24iOiJjZW50ZXIiLCJmb250LXNpemUiOmAke0xpKCJmb250U2l6ZSIpfXB4YH19LHtzZWxlY3RvcjoiLm5vZGUtc2VydmljZSIsc3R5bGU6e2xhYmVsOiJkYXRhKGxhYmVsKSIsd2lkdGg6ImRhdGEod2lkdGgpIixoZWlnaHQ6ImRhdGEoaGVpZ2h0KSJ9fSx7c2VsZWN0b3I6Ii5ub2RlLWp1bmN0aW9uIixzdHlsZTp7d2lkdGg6ImRhdGEod2lkdGgpIixoZWlnaHQ6ImRhdGEoaGVpZ2h0KSJ9fSx7c2VsZWN0b3I6Ii5ub2RlLWdyb3VwIixzdHlsZTp7cGFkZGluZzpgJHtMaSgicGFkZGluZyIpfXB4YH19XX0pO3UucmVtb3ZlKCksX3J0KHIsaCksU3J0KHQsaCksQ3J0KGUsaCksRHJ0KG4saCk7bGV0IGY9THJ0KGksYSxzKSxkPVJydChhKSxwPWgubGF5b3V0KHtuYW1lOiJmY29zZSIscXVhbGl0eToicHJvb2YiLHN0eWxlRW5hYmxlZDohMSxhbmltYXRlOiExLG5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczohMSxpZGVhbEVkZ2VMZW5ndGgobSl7bGV0W2cseV09bS5jb25uZWN0ZWROb2RlcygpLHtwYXJlbnQ6dn09RmYoZykse3BhcmVudDp4fT1GZih5KTtyZXR1cm4gdj09PXg/MS41KkxpKCJpY29uU2l6ZSIpOi41KkxpKCJpY29uU2l6ZSIpfSxlZGdlRWxhc3RpY2l0eShtKXtsZXRbZyx5XT1tLmNvbm5lY3RlZE5vZGVzKCkse3BhcmVudDp2fT1GZihnKSx7cGFyZW50Onh9PUZmKHkpO3JldHVybiB2PT09eD8uNDU6LjAwMX0sYWxpZ25tZW50Q29uc3RyYWludDpmLHJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludDpkfSk7cC5vbmUoImxheW91dHN0b3AiLCgpPT57ZnVuY3Rpb24gbShnLHksdix4KXtsZXQgYix3LHt4OkMseTpUfT1nLHt4OkUseTpBfT15O3c9KHgtVCsoQy12KSooVC1BKS8oQy1FKSkvTWF0aC5zcXJ0KDErTWF0aC5wb3coKFQtQSkvKEMtRSksMikpLGI9TWF0aC5zcXJ0KE1hdGgucG93KHgtVCwyKStNYXRoLnBvdyh2LUMsMiktTWF0aC5wb3codywyKSk7bGV0IFM9TWF0aC5zcXJ0KE1hdGgucG93KEUtQywyKStNYXRoLnBvdyhBLVQsMikpO2I9Yi9TO2xldCBfPShFLUMpKih4LVQpLShBLVQpKih2LUMpO3N3aXRjaCghMCl7Y2FzZSBfPj0wOl89MTticmVhaztjYXNlIF88MDpfPS0xO2JyZWFrfWxldCBJPShFLUMpKih2LUMpKyhBLVQpKih4LVQpO3N3aXRjaCghMCl7Y2FzZSBJPj0wOkk9MTticmVhaztjYXNlIEk8MDpJPS0xO2JyZWFrfXJldHVybiB3PU1hdGguYWJzKHcpKl8sYj1iKkkse2Rpc3RhbmNlczp3LHdlaWdodHM6Yn19byhtLCJnZXRTZWdtZW50V2VpZ2h0cyIpLGguc3RhcnRCYXRjaCgpO2ZvcihsZXQgZyBvZiBPYmplY3QudmFsdWVzKGguZWRnZXMoKSkpaWYoZy5kYXRhPy4oKSl7bGV0e3g6eSx5OnZ9PWcuc291cmNlKCkucG9zaXRpb24oKSx7eCx5OmJ9PWcudGFyZ2V0KCkucG9zaXRpb24oKTtpZih5IT09eCYmdiE9PWIpe2xldCB3PWcuc291cmNlRW5kcG9pbnQoKSxDPWcudGFyZ2V0RW5kcG9pbnQoKSx7c291cmNlRGlyOlR9PXNDKGcpLFtFLEFdPVpjKFQpP1t3LngsQy55XTpbQy54LHcueV0se3dlaWdodHM6UyxkaXN0YW5jZXM6X309bSh3LEMsRSxBKTtnLnN0eWxlKCJzZWdtZW50LWRpc3RhbmNlcyIsXyksZy5zdHlsZSgic2VnbWVudC13ZWlnaHRzIixTKX19aC5lbmRCYXRjaCgpLHAucnVuKCl9KSxwLnJ1bigpLGgucmVhZHkobT0+e1kuaW5mbygiUmVhZHkiLG0pLGwoaCl9KX0pfXZhciBWdmUsTXJ0LFV2ZSxIdmU9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt0dSgpO2tCKCk7VnZlPVNhKFB2ZSgpLDEpO2RyKCk7dnQoKTtWYygpO0VpKCk7dzQoKTt5RigpO29DKCk7R3ZlKCk7UDQoW3tuYW1lOlpwLnByZWZpeCxpY29uczpacH1dKTtybC51c2UoVnZlLmRlZmF1bHQpO28oU3J0LCJhZGRTZXJ2aWNlcyIpO28oQ3J0LCJhZGRKdW5jdGlvbnMiKTtvKEFydCwicG9zaXRpb25Ob2RlcyIpO28oX3J0LCJhZGRHcm91cHMiKTtvKERydCwiYWRkRWRnZXMiKTtvKExydCwiZ2V0QWxpZ25tZW50cyIpO28oUnJ0LCJnZXRSZWxhdGl2ZUNvbnN0cmFpbnRzIik7byhOcnQsImxheW91dEFyY2hpdGVjdHVyZSIpO01ydD1vKGFzeW5jKHQsZSxyLG4pPT57bGV0IGk9bi5kYixhPWkuZ2V0U2VydmljZXMoKSxzPWkuZ2V0SnVuY3Rpb25zKCksbD1pLmdldEdyb3VwcygpLHU9aS5nZXRFZGdlcygpLGg9aS5nZXREYXRhU3RydWN0dXJlcygpLGY9c2EoZSksZD1mLmFwcGVuZCgiZyIpO2QuYXR0cigiY2xhc3MiLCJhcmNoaXRlY3R1cmUtZWRnZXMiKTtsZXQgcD1mLmFwcGVuZCgiZyIpO3AuYXR0cigiY2xhc3MiLCJhcmNoaXRlY3R1cmUtc2VydmljZXMiKTtsZXQgbT1mLmFwcGVuZCgiZyIpO20uYXR0cigiY2xhc3MiLCJhcmNoaXRlY3R1cmUtZ3JvdXBzIiksYXdhaXQgJHZlKGkscCxhKSx6dmUoaSxwLHMpO2xldCBnPWF3YWl0IE5ydChhLHMsbCx1LGksaCk7YXdhaXQgQnZlKGQsZyksYXdhaXQgRnZlKG0sZyksQXJ0KGksZyksQW8odm9pZCAwLGYsTGkoInBhZGRpbmciKSxMaSgidXNlTWF4V2lkdGgiKSl9LCJkcmF3IiksVXZlPXtkcmF3Ok1ydH19KTt2YXIgV3ZlPXt9O2hyKFd2ZSx7ZGlhZ3JhbTooKT0+SXJ0fSk7dmFyIElydCxxdmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtNdmUoKTt3NCgpO092ZSgpO0h2ZSgpO0lydD17cGFyc2VyOk52ZSxkYjpRcCxyZW5kZXJlcjpVdmUsc3R5bGVzOkl2ZX19KTt2YXIgYm50PXt9O2hyKGJudCx7ZGVmYXVsdDooKT0+eG50fSk7dHUoKTtQQygpO1hmKCk7dmFyIFlYPSJjNCIsUENlPW8odD0+L15ccypDNENvbnRleHR8QzRDb250YWluZXJ8QzRDb21wb25lbnR8QzREeW5hbWljfEM0RGVwbG95bWVudC8udGVzdCh0KSwiZGV0ZWN0b3IiKSxCQ2U9byhhc3luYygpPT57bGV0e2RpYWdyYW06dH09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KHFYKCksV1gpKTtyZXR1cm57aWQ6WVgsZGlhZ3JhbTp0fX0sImxvYWRlciIpLEZDZT17aWQ6WVgsZGV0ZWN0b3I6UENlLGxvYWRlcjpCQ2V9LFhYPUZDZTt2YXIgWGllPSJmbG93Y2hhcnQiLHhPZT1vKCh0LGUpPT5lPy5mbG93Y2hhcnQ/LmRlZmF1bHRSZW5kZXJlcj09PSJkYWdyZS13cmFwcGVyInx8ZT8uZmxvd2NoYXJ0Py5kZWZhdWx0UmVuZGVyZXI9PT0iZWxrIj8hMTovXlxzKmdyYXBoLy50ZXN0KHQpLCJkZXRlY3RvciIpLGJPZT1vKGFzeW5jKCk9PntsZXR7ZGlhZ3JhbTp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oYWsoKSxpaykpO3JldHVybntpZDpYaWUsZGlhZ3JhbTp0fX0sImxvYWRlciIpLHdPZT17aWQ6WGllLGRldGVjdG9yOnhPZSxsb2FkZXI6Yk9lfSxqaWU9d09lO3ZhciBLaWU9ImZsb3djaGFydC12MiIsVE9lPW8oKHQsZSk9PmU/LmZsb3djaGFydD8uZGVmYXVsdFJlbmRlcmVyPT09ImRhZ3JlLWQzIj8hMTooZT8uZmxvd2NoYXJ0Py5kZWZhdWx0UmVuZGVyZXI9PT0iZWxrIiYmKGUubGF5b3V0PSJlbGsiKSwvXlxzKmdyYXBoLy50ZXN0KHQpJiZlPy5mbG93Y2hhcnQ/LmRlZmF1bHRSZW5kZXJlcj09PSJkYWdyZS13cmFwcGVyIj8hMDovXlxzKmZsb3djaGFydC8udGVzdCh0KSksImRldGVjdG9yIiksa09lPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihhaygpLGlrKSk7cmV0dXJue2lkOktpZSxkaWFncmFtOnR9fSwibG9hZGVyIiksRU9lPXtpZDpLaWUsZGV0ZWN0b3I6VE9lLGxvYWRlcjprT2V9LFFpZT1FT2U7dmFyIHNhZT0iZXIiLERPZT1vKHQ9Pi9eXHMqZXJEaWFncmFtLy50ZXN0KHQpLCJkZXRlY3RvciIpLExPZT1vKGFzeW5jKCk9PntsZXR7ZGlhZ3JhbTp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oYWFlKCksaWFlKSk7cmV0dXJue2lkOnNhZSxkaWFncmFtOnR9fSwibG9hZGVyIiksUk9lPXtpZDpzYWUsZGV0ZWN0b3I6RE9lLGxvYWRlcjpMT2V9LG9hZT1ST2U7dmFyIHV1ZT0iZ2l0R3JhcGgiLHR6ZT1vKHQ9Pi9eXHMqZ2l0R3JhcGgvLnRlc3QodCksImRldGVjdG9yIikscnplPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihjdWUoKSxsdWUpKTtyZXR1cm57aWQ6dXVlLGRpYWdyYW06dH19LCJsb2FkZXIiKSxuemU9e2lkOnV1ZSxkZXRlY3Rvcjp0emUsbG9hZGVyOnJ6ZX0saHVlPW56ZTt2YXIgR3VlPSJnYW50dCIsSHplPW8odD0+L15ccypnYW50dC8udGVzdCh0KSwiZGV0ZWN0b3IiKSxXemU9byhhc3luYygpPT57bGV0e2RpYWdyYW06dH09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KHp1ZSgpLCR1ZSkpO3JldHVybntpZDpHdWUsZGlhZ3JhbTp0fX0sImxvYWRlciIpLHF6ZT17aWQ6R3VlLGRldGVjdG9yOkh6ZSxsb2FkZXI6V3plfSxWdWU9cXplO3ZhciBRdWU9ImluZm8iLFp6ZT1vKHQ9Pi9eXHMqaW5mby8udGVzdCh0KSwiZGV0ZWN0b3IiKSxKemU9byhhc3luYygpPT57bGV0e2RpYWdyYW06dH09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KEt1ZSgpLGp1ZSkpO3JldHVybntpZDpRdWUsZGlhZ3JhbTp0fX0sImxvYWRlciIpLFp1ZT17aWQ6UXVlLGRldGVjdG9yOlp6ZSxsb2FkZXI6SnplfTt2YXIgbGhlPSJwaWUiLGZHZT1vKHQ9Pi9eXHMqcGllLy50ZXN0KHQpLCJkZXRlY3RvciIpLGRHZT1vKGFzeW5jKCk9PntsZXR7ZGlhZ3JhbTp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4ob2hlKCksc2hlKSk7cmV0dXJue2lkOmxoZSxkaWFncmFtOnR9fSwibG9hZGVyIiksY2hlPXtpZDpsaGUsZGV0ZWN0b3I6ZkdlLGxvYWRlcjpkR2V9O3ZhciBUaGU9InF1YWRyYW50Q2hhcnQiLFJHZT1vKHQ9Pi9eXHMqcXVhZHJhbnRDaGFydC8udGVzdCh0KSwiZGV0ZWN0b3IiKSxOR2U9byhhc3luYygpPT57bGV0e2RpYWdyYW06dH09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KHdoZSgpLGJoZSkpO3JldHVybntpZDpUaGUsZGlhZ3JhbTp0fX0sImxvYWRlciIpLE1HZT17aWQ6VGhlLGRldGVjdG9yOlJHZSxsb2FkZXI6TkdlfSxraGU9TUdlO3ZhciBLaGU9Inh5Y2hhcnQiLGpHZT1vKHQ9Pi9eXHMqeHljaGFydC1iZXRhLy50ZXN0KHQpLCJkZXRlY3RvciIpLEtHZT1vKGFzeW5jKCk9PntsZXR7ZGlhZ3JhbTp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oamhlKCksWGhlKSk7cmV0dXJue2lkOktoZSxkaWFncmFtOnR9fSwibG9hZGVyIiksUUdlPXtpZDpLaGUsZGV0ZWN0b3I6akdlLGxvYWRlcjpLR2V9LFFoZT1RR2U7dmFyIHNmZT0icmVxdWlyZW1lbnQiLHRWZT1vKHQ9Pi9eXHMqcmVxdWlyZW1lbnQoRGlhZ3JhbSk/Ly50ZXN0KHQpLCJkZXRlY3RvciIpLHJWZT1vKGFzeW5jKCk9PntsZXR7ZGlhZ3JhbTp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oYWZlKCksaWZlKSk7cmV0dXJue2lkOnNmZSxkaWFncmFtOnR9fSwibG9hZGVyIiksblZlPXtpZDpzZmUsZGV0ZWN0b3I6dFZlLGxvYWRlcjpyVmV9LG9mZT1uVmU7dmFyIEFmZT0ic2VxdWVuY2UiLHpWZT1vKHQ9Pi9eXHMqc2VxdWVuY2VEaWFncmFtLy50ZXN0KHQpLCJkZXRlY3RvciIpLEdWZT1vKGFzeW5jKCk9PntsZXR7ZGlhZ3JhbTp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oQ2ZlKCksU2ZlKSk7cmV0dXJue2lkOkFmZSxkaWFncmFtOnR9fSwibG9hZGVyIiksVlZlPXtpZDpBZmUsZGV0ZWN0b3I6elZlLGxvYWRlcjpHVmV9LF9mZT1WVmU7dmFyIElmZT0iY2xhc3MiLFhWZT1vKCh0LGUpPT5lPy5jbGFzcz8uZGVmYXVsdFJlbmRlcmVyPT09ImRhZ3JlLXdyYXBwZXIiPyExOi9eXHMqY2xhc3NEaWFncmFtLy50ZXN0KHQpLCJkZXRlY3RvciIpLGpWZT1vKGFzeW5jKCk9PntsZXR7ZGlhZ3JhbTp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oTWZlKCksTmZlKSk7cmV0dXJue2lkOklmZSxkaWFncmFtOnR9fSwibG9hZGVyIiksS1ZlPXtpZDpJZmUsZGV0ZWN0b3I6WFZlLGxvYWRlcjpqVmV9LE9mZT1LVmU7dmFyIEZmZT0iY2xhc3NEaWFncmFtIixaVmU9bygodCxlKT0+L15ccypjbGFzc0RpYWdyYW0vLnRlc3QodCkmJmU/LmNsYXNzPy5kZWZhdWx0UmVuZGVyZXI9PT0iZGFncmUtd3JhcHBlciI/ITA6L15ccypjbGFzc0RpYWdyYW0tdjIvLnRlc3QodCksImRldGVjdG9yIiksSlZlPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihCZmUoKSxQZmUpKTtyZXR1cm57aWQ6RmZlLGRpYWdyYW06dH19LCJsb2FkZXIiKSxlVWU9e2lkOkZmZSxkZXRlY3RvcjpaVmUsbG9hZGVyOkpWZX0sJGZlPWVVZTt2YXIgRWRlPSJzdGF0ZSIsTFVlPW8oKHQsZSk9PmU/LnN0YXRlPy5kZWZhdWx0UmVuZGVyZXI9PT0iZGFncmUtd3JhcHBlciI/ITE6L15ccypzdGF0ZURpYWdyYW0vLnRlc3QodCksImRldGVjdG9yIiksUlVlPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihrZGUoKSxUZGUpKTtyZXR1cm57aWQ6RWRlLGRpYWdyYW06dH19LCJsb2FkZXIiKSxOVWU9e2lkOkVkZSxkZXRlY3RvcjpMVWUsbG9hZGVyOlJVZX0sU2RlPU5VZTt2YXIgX2RlPSJzdGF0ZURpYWdyYW0iLElVZT1vKCh0LGUpPT4hISgvXlxzKnN0YXRlRGlhZ3JhbS12Mi8udGVzdCh0KXx8L15ccypzdGF0ZURpYWdyYW0vLnRlc3QodCkmJmU/LnN0YXRlPy5kZWZhdWx0UmVuZGVyZXI9PT0iZGFncmUtd3JhcHBlciIpLCJkZXRlY3RvciIpLE9VZT1vKGFzeW5jKCk9PntsZXR7ZGlhZ3JhbTp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oQWRlKCksQ2RlKSk7cmV0dXJue2lkOl9kZSxkaWFncmFtOnR9fSwibG9hZGVyIiksUFVlPXtpZDpfZGUsZGV0ZWN0b3I6SVVlLGxvYWRlcjpPVWV9LERkZT1QVWU7dmFyIFdkZT0iam91cm5leSIsbkhlPW8odD0+L15ccypqb3VybmV5Ly50ZXN0KHQpLCJkZXRlY3RvciIpLGlIZT1vKGFzeW5jKCk9PntsZXR7ZGlhZ3JhbTp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oSGRlKCksVWRlKSk7cmV0dXJue2lkOldkZSxkaWFncmFtOnR9fSwibG9hZGVyIiksYUhlPXtpZDpXZGUsZGV0ZWN0b3I6bkhlLGxvYWRlcjppSGV9LHFkZT1hSGU7dnQoKTtWYygpO0VpKCk7dmFyIHNIZT1vKCh0LGUscik9PntZLmRlYnVnKGByZW5kZXJpbmcgc3ZnIGZvciBzeW50YXggZXJyb3IKYCk7bGV0IG49c2EoZSksaT1uLmFwcGVuZCgiZyIpO24uYXR0cigidmlld0JveCIsIjAgMCAyNDEyIDUxMiIpLHZuKG4sMTAwLDUxMiwhMCksaS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQxMS4zMTMsMTIzLjMxM2M2LjI1LTYuMjUgNi4yNS0xNi4zNzUgMC0yMi42MjVzLTE2LjM3NS02LjI1LTIyLjYyNSwwbC0zMiwzMi05LjM3NSw5LjM3NS0yMC42ODgtMjAuNjg4Yy0xMi40ODQtMTIuNS0zMi43NjYtMTIuNS00NS4yNSwwbC0xNiwxNmMtMS4yNjEsMS4yNjEtMi4zMDQsMi42NDgtMy4zMSw0LjA1MS0yMS43MzktOC41NjEtNDUuMzI0LTEzLjQyNi03MC4wNjUtMTMuNDI2LTEwNS44NjcsMC0xOTIsODYuMTMzLTE5MiwxOTJzODYuMTMzLDE5MiAxOTIsMTkyIDE5Mi04Ni4xMzMgMTkyLTE5MmMwLTI0Ljc0MS00Ljg2NC00OC4zMjctMTMuNDI2LTcwLjA2NSAxLjQwMi0xLjAwNyAyLjc5LTIuMDQ5IDQuMDUxLTMuMzFsMTYtMTZjMTIuNS0xMi40OTIgMTIuNS0zMi43NTggMC00NS4yNWwtMjAuNjg4LTIwLjY4OCA5LjM3NS05LjM3NSAzMi4wMDEtMzEuOTk5em0tMjE5LjMxMywxMDAuNjg3Yy01Mi45MzgsMC05Niw0My4wNjMtOTYsOTYgMCw4LjgzNi03LjE2NCwxNi0xNiwxNnMtMTYtNy4xNjQtMTYtMTZjMC03MC41NzggNTcuNDIyLTEyOCAxMjgtMTI4IDguODM2LDAgMTYsNy4xNjQgMTYsMTZzLTcuMTY0LDE2LTE2LDE2eiIpLGkuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJlcnJvci1pY29uIikuYXR0cigiZCIsIm00NTkuMDIsMTQ4Ljk4Yy02LjI1LTYuMjUtMTYuMzc1LTYuMjUtMjIuNjI1LDBzLTYuMjUsMTYuMzc1IDAsMjIuNjI1bDE2LDE2YzMuMTI1LDMuMTI1IDcuMjE5LDQuNjg4IDExLjMxMyw0LjY4OCA0LjA5NCwwIDguMTg4LTEuNTYzIDExLjMxMy00LjY4OCA2LjI1LTYuMjUgNi4yNS0xNi4zNzUgMC0yMi42MjVsLTE2LjAwMS0xNnoiKSxpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItaWNvbiIpLmF0dHIoImQiLCJtMzQwLjM5NSw3NS42MDVjMy4xMjUsMy4xMjUgNy4yMTksNC42ODggMTEuMzEzLDQuNjg4IDQuMDk0LDAgOC4xODgtMS41NjMgMTEuMzEzLTQuNjg4IDYuMjUtNi4yNSA2LjI1LTE2LjM3NSAwLTIyLjYyNWwtMTYtMTZjLTYuMjUtNi4yNS0xNi4zNzUtNi4yNS0yMi42MjUsMHMtNi4yNSwxNi4zNzUgMCwyMi42MjVsMTUuOTk5LDE2eiIpLGkuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJlcnJvci1pY29uIikuYXR0cigiZCIsIm00MDAsNjRjOC44NDQsMCAxNi03LjE2NCAxNi0xNnYtMzJjMC04LjgzNi03LjE1Ni0xNi0xNi0xNi04Ljg0NCwwLTE2LDcuMTY0LTE2LDE2djMyYzAsOC44MzYgNy4xNTYsMTYgMTYsMTZ6IiksaS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQ5Niw5Ni41ODZoLTMyYy04Ljg0NCwwLTE2LDcuMTY0LTE2LDE2IDAsOC44MzYgNy4xNTYsMTYgMTYsMTZoMzJjOC44NDQsMCAxNi03LjE2NCAxNi0xNiAwLTguODM2LTcuMTU2LTE2LTE2LTE2eiIpLGkuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJlcnJvci1pY29uIikuYXR0cigiZCIsIm00MzYuOTgsNzUuNjA1YzMuMTI1LDMuMTI1IDcuMjE5LDQuNjg4IDExLjMxMyw0LjY4OCA0LjA5NCwwIDguMTg4LTEuNTYzIDExLjMxMy00LjY4OGwzMi0zMmM2LjI1LTYuMjUgNi4yNS0xNi4zNzUgMC0yMi42MjVzLTE2LjM3NS02LjI1LTIyLjYyNSwwbC0zMiwzMmMtNi4yNTEsNi4yNS02LjI1MSwxNi4zNzUtMC4wMDEsMjIuNjI1eiIpLGkuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJlcnJvci10ZXh0IikuYXR0cigieCIsMTQ0MCkuYXR0cigieSIsMjUwKS5hdHRyKCJmb250LXNpemUiLCIxNTBweCIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQoIlN5bnRheCBlcnJvciBpbiB0ZXh0IiksaS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsImVycm9yLXRleHQiKS5hdHRyKCJ4IiwxMjUwKS5hdHRyKCJ5Iiw0MDApLmF0dHIoImZvbnQtc2l6ZSIsIjEwMHB4Iikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dChgbWVybWFpZCB2ZXJzaW9uICR7cn1gKX0sImRyYXciKSxmUD17ZHJhdzpzSGV9LFlkZT1mUDt2YXIgb0hlPXtkYjp7fSxyZW5kZXJlcjpmUCxwYXJzZXI6e3BhcnNlOm8oKCk9Pnt9LCJwYXJzZSIpfX0sWGRlPW9IZTt2YXIgamRlPSJmbG93Y2hhcnQtZWxrIixsSGU9bygodCxlPXt9KT0+L15ccypmbG93Y2hhcnQtZWxrLy50ZXN0KHQpfHwvXlxzKmZsb3djaGFydHxncmFwaC8udGVzdCh0KSYmZT8uZmxvd2NoYXJ0Py5kZWZhdWx0UmVuZGVyZXI9PT0iZWxrIj8oZS5sYXlvdXQ9ImVsayIsITApOiExLCJkZXRlY3RvciIpLGNIZT1vKGFzeW5jKCk9PntsZXR7ZGlhZ3JhbTp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oYWsoKSxpaykpO3JldHVybntpZDpqZGUsZGlhZ3JhbTp0fX0sImxvYWRlciIpLHVIZT17aWQ6amRlLGRldGVjdG9yOmxIZSxsb2FkZXI6Y0hlfSxLZGU9dUhlO3ZhciBUcGU9InRpbWVsaW5lIixESGU9byh0PT4vXlxzKnRpbWVsaW5lLy50ZXN0KHQpLCJkZXRlY3RvciIpLExIZT1vKGFzeW5jKCk9PntsZXR7ZGlhZ3JhbTp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4od3BlKCksYnBlKSk7cmV0dXJue2lkOlRwZSxkaWFncmFtOnR9fSwibG9hZGVyIiksUkhlPXtpZDpUcGUsZGV0ZWN0b3I6REhlLGxvYWRlcjpMSGV9LGtwZT1SSGU7dmFyIGUxZT0ibWluZG1hcCIsY0plPW8odD0+L15ccyptaW5kbWFwLy50ZXN0KHQpLCJkZXRlY3RvciIpLHVKZT1vKGFzeW5jKCk9PntsZXR7ZGlhZ3JhbTp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oSmdlKCksWmdlKSk7cmV0dXJue2lkOmUxZSxkaWFncmFtOnR9fSwibG9hZGVyIiksaEplPXtpZDplMWUsZGV0ZWN0b3I6Y0plLGxvYWRlcjp1SmV9LHQxZT1oSmU7dmFyIGQxZT0ia2FuYmFuIixBSmU9byh0PT4vXlxzKmthbmJhbi8udGVzdCh0KSwiZGV0ZWN0b3IiKSxfSmU9byhhc3luYygpPT57bGV0e2RpYWdyYW06dH09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KGYxZSgpLGgxZSkpO3JldHVybntpZDpkMWUsZGlhZ3JhbTp0fX0sImxvYWRlciIpLERKZT17aWQ6ZDFlLGRldGVjdG9yOkFKZSxsb2FkZXI6X0plfSxwMWU9REplO3ZhciBqMWU9InNhbmtleSIsWkplPW8odD0+L15ccypzYW5rZXktYmV0YS8udGVzdCh0KSwiZGV0ZWN0b3IiKSxKSmU9byhhc3luYygpPT57bGV0e2RpYWdyYW06dH09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KFgxZSgpLFkxZSkpO3JldHVybntpZDpqMWUsZGlhZ3JhbTp0fX0sImxvYWRlciIpLGVldD17aWQ6ajFlLGRldGVjdG9yOlpKZSxsb2FkZXI6SkplfSxLMWU9ZWV0O3ZhciBzeWU9InBhY2tldCIscGV0PW8odD0+L15ccypwYWNrZXQtYmV0YS8udGVzdCh0KSwiZGV0ZWN0b3IiKSxtZXQ9byhhc3luYygpPT57bGV0e2RpYWdyYW06dH09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KGF5ZSgpLGl5ZSkpO3JldHVybntpZDpzeWUsZGlhZ3JhbTp0fX0sImxvYWRlciIpLG95ZT17aWQ6c3llLGRldGVjdG9yOnBldCxsb2FkZXI6bWV0fTt2YXIgdnllPSJyYWRhciIsRmV0PW8odD0+L15ccypyYWRhci1iZXRhLy50ZXN0KHQpLCJkZXRlY3RvciIpLCRldD1vKGFzeW5jKCk9PntsZXR7ZGlhZ3JhbTp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oeXllKCksZ3llKSk7cmV0dXJue2lkOnZ5ZSxkaWFncmFtOnR9fSwibG9hZGVyIikseHllPXtpZDp2eWUsZGV0ZWN0b3I6RmV0LGxvYWRlcjokZXR9O3ZhciBUdmU9ImJsb2NrIixzcnQ9byh0PT4vXlxzKmJsb2NrLWJldGEvLnRlc3QodCksImRldGVjdG9yIiksb3J0PW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pih3dmUoKSxidmUpKTtyZXR1cm57aWQ6VHZlLGRpYWdyYW06dH19LCJsb2FkZXIiKSxscnQ9e2lkOlR2ZSxkZXRlY3RvcjpzcnQsbG9hZGVyOm9ydH0sa3ZlPWxydDt2YXIgWXZlPSJhcmNoaXRlY3R1cmUiLE9ydD1vKHQ9Pi9eXHMqYXJjaGl0ZWN0dXJlLy50ZXN0KHQpLCJkZXRlY3RvciIpLFBydD1vKGFzeW5jKCk9PntsZXR7ZGlhZ3JhbTp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4ocXZlKCksV3ZlKSk7cmV0dXJue2lkOll2ZSxkaWFncmFtOnR9fSwibG9hZGVyIiksQnJ0PXtpZDpZdmUsZGV0ZWN0b3I6T3J0LGxvYWRlcjpQcnR9LFh2ZT1CcnQ7WGYoKTt6dCgpO3ZhciBqdmU9ITEscHk9bygoKT0+e2p2ZXx8KGp2ZT0hMCxhZCgiZXJyb3IiLFhkZSx0PT50LnRvTG93ZXJDYXNlKCkudHJpbSgpPT09ImVycm9yIiksYWQoIi0tLSIse2RiOntjbGVhcjpvKCgpPT57fSwiY2xlYXIiKX0sc3R5bGVzOnt9LHJlbmRlcmVyOntkcmF3Om8oKCk9Pnt9LCJkcmF3Iil9LHBhcnNlcjp7cGFyc2U6bygoKT0+e3Rocm93IG5ldyBFcnJvcigiRGlhZ3JhbXMgYmVnaW5uaW5nIHdpdGggLS0tIGFyZSBub3QgdmFsaWQuIElmIHlvdSB3ZXJlIHRyeWluZyB0byB1c2UgYSBZQU1MIGZyb250LW1hdHRlciwgcGxlYXNlIGVuc3VyZSB0aGF0IHlvdSd2ZSBjb3JyZWN0bHkgb3BlbmVkIGFuZCBjbG9zZWQgdGhlIFlBTUwgZnJvbnQtbWF0dGVyIHdpdGggdW4taW5kZW50ZWQgYC0tLWAgYmxvY2tzIil9LCJwYXJzZSIpfSxpbml0Om8oKCk9Pm51bGwsImluaXQiKX0sdD0+dC50b0xvd2VyQ2FzZSgpLnRyaW1TdGFydCgpLnN0YXJ0c1dpdGgoIi0tLSIpKSx6NChYWCxwMWUsJGZlLE9mZSxvYWUsVnVlLFp1ZSxjaGUsb2ZlLF9mZSxLZGUsUWllLGppZSx0MWUsa3BlLGh1ZSxEZGUsU2RlLHFkZSxraGUsSzFlLG95ZSxRaGUsa3ZlLFh2ZSx4eWUpKX0sImFkZERpYWdyYW1zIik7dnQoKTtYZigpO3p0KCk7dmFyIEt2ZT1vKGFzeW5jKCk9PntZLmRlYnVnKCJMb2FkaW5nIHJlZ2lzdGVyZWQgZGlhZ3JhbXMiKTtsZXQgZT0oYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKE9iamVjdC5lbnRyaWVzKFlmKS5tYXAoYXN5bmMoW3Ise2RldGVjdG9yOm4sbG9hZGVyOml9XSk9PntpZihpKXRyeXtqeShyKX1jYXRjaHt0cnl7bGV0e2RpYWdyYW06YSxpZDpzfT1hd2FpdCBpKCk7YWQocyxhLG4pfWNhdGNoKGEpe3Rocm93IFkuZXJyb3IoYEZhaWxlZCB0byBsb2FkIGV4dGVybmFsIGRpYWdyYW0gd2l0aCBrZXkgJHtyfS4gUmVtb3ZpbmcgZnJvbSBkZXRlY3RvcnMuYCksZGVsZXRlIFlmW3JdLGF9fX0pKSkuZmlsdGVyKHI9PnIuc3RhdHVzPT09InJlamVjdGVkIik7aWYoZS5sZW5ndGg+MCl7WS5lcnJvcihgRmFpbGVkIHRvIGxvYWQgJHtlLmxlbmd0aH0gZXh0ZXJuYWwgZGlhZ3JhbXNgKTtmb3IobGV0IHIgb2YgZSlZLmVycm9yKHIpO3Rocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvYWQgJHtlLmxlbmd0aH0gZXh0ZXJuYWwgZGlhZ3JhbXNgKX19LCJsb2FkUmVnaXN0ZXJlZERpYWdyYW1zIik7dnQoKTtkcigpO3ZhciBsQz0iY29tbSIsY0M9InJ1bGUiLHVDPSJkZWNsIjt2YXIgUXZlPSJAaW1wb3J0Ijt2YXIgWnZlPSJAbmFtZXNwYWNlIixKdmU9IkBrZXlmcmFtZXMiO3ZhciBlMmU9IkBsYXllciI7dmFyIHZGPU1hdGguYWJzLFM0PVN0cmluZy5mcm9tQ2hhckNvZGU7ZnVuY3Rpb24gaEModCl7cmV0dXJuIHQudHJpbSgpfW8oaEMsInRyaW0iKTtmdW5jdGlvbiBDNCh0LGUscil7cmV0dXJuIHQucmVwbGFjZShlLHIpfW8oQzQsInJlcGxhY2UiKTtmdW5jdGlvbiB0MmUodCxlLHIpe3JldHVybiB0LmluZGV4T2YoZSxyKX1vKHQyZSwiaW5kZXhvZiIpO2Z1bmN0aW9uICRmKHQsZSl7cmV0dXJuIHQuY2hhckNvZGVBdChlKXwwfW8oJGYsImNoYXJhdCIpO2Z1bmN0aW9uIHpmKHQsZSxyKXtyZXR1cm4gdC5zbGljZShlLHIpfW8oemYsInN1YnN0ciIpO2Z1bmN0aW9uIHZvKHQpe3JldHVybiB0Lmxlbmd0aH1vKHZvLCJzdHJsZW4iKTtmdW5jdGlvbiByMmUodCl7cmV0dXJuIHQubGVuZ3RofW8ocjJlLCJzaXplb2YiKTtmdW5jdGlvbiBteSh0LGUpe3JldHVybiBlLnB1c2godCksdH1vKG15LCJhcHBlbmQiKTt2YXIgZkM9MSxneT0xLG4yZT0wLGlsPTAsUmk9MCx2eT0iIjtmdW5jdGlvbiBkQyh0LGUscixuLGksYSxzLGwpe3JldHVybnt2YWx1ZTp0LHJvb3Q6ZSxwYXJlbnQ6cix0eXBlOm4scHJvcHM6aSxjaGlsZHJlbjphLGxpbmU6ZkMsY29sdW1uOmd5LGxlbmd0aDpzLHJldHVybjoiIixzaWJsaW5nczpsfX1vKGRDLCJub2RlIik7ZnVuY3Rpb24gaTJlKCl7cmV0dXJuIFJpfW8oaTJlLCJjaGFyIik7ZnVuY3Rpb24gYTJlKCl7cmV0dXJuIFJpPWlsPjA/JGYodnksLS1pbCk6MCxneS0tLFJpPT09MTAmJihneT0xLGZDLS0pLFJpfW8oYTJlLCJwcmV2Iik7ZnVuY3Rpb24gYWwoKXtyZXR1cm4gUmk9aWw8bjJlPyRmKHZ5LGlsKyspOjAsZ3krKyxSaT09PTEwJiYoZ3k9MSxmQysrKSxSaX1vKGFsLCJuZXh0Iik7ZnVuY3Rpb24gcmgoKXtyZXR1cm4gJGYodnksaWwpfW8ocmgsInBlZWsiKTtmdW5jdGlvbiBBNCgpe3JldHVybiBpbH1vKEE0LCJjYXJldCIpO2Z1bmN0aW9uIHBDKHQsZSl7cmV0dXJuIHpmKHZ5LHQsZSl9byhwQywic2xpY2UiKTtmdW5jdGlvbiB5eSh0KXtzd2l0Y2godCl7Y2FzZSAwOmNhc2UgOTpjYXNlIDEwOmNhc2UgMTM6Y2FzZSAzMjpyZXR1cm4gNTtjYXNlIDMzOmNhc2UgNDM6Y2FzZSA0NDpjYXNlIDQ3OmNhc2UgNjI6Y2FzZSA2NDpjYXNlIDEyNjpjYXNlIDU5OmNhc2UgMTIzOmNhc2UgMTI1OnJldHVybiA0O2Nhc2UgNTg6cmV0dXJuIDM7Y2FzZSAzNDpjYXNlIDM5OmNhc2UgNDA6Y2FzZSA5MTpyZXR1cm4gMjtjYXNlIDQxOmNhc2UgOTM6cmV0dXJuIDF9cmV0dXJuIDB9byh5eSwidG9rZW4iKTtmdW5jdGlvbiBzMmUodCl7cmV0dXJuIGZDPWd5PTEsbjJlPXZvKHZ5PXQpLGlsPTAsW119byhzMmUsImFsbG9jIik7ZnVuY3Rpb24gbzJlKHQpe3JldHVybiB2eT0iIix0fW8obzJlLCJkZWFsbG9jIik7ZnVuY3Rpb24gbUModCl7cmV0dXJuIGhDKHBDKGlsLTEseEYodD09PTkxP3QrMjp0PT09NDA/dCsxOnQpKSl9byhtQywiZGVsaW1pdCIpO2Z1bmN0aW9uIGwyZSh0KXtmb3IoOyhSaT1yaCgpKSYmUmk8MzM7KWFsKCk7cmV0dXJuIHl5KHQpPjJ8fHl5KFJpKT4zPyIiOiIgIn1vKGwyZSwid2hpdGVzcGFjZSIpO2Z1bmN0aW9uIGMyZSh0LGUpe2Zvcig7LS1lJiZhbCgpJiYhKFJpPDQ4fHxSaT4xMDJ8fFJpPjU3JiZSaTw2NXx8Umk+NzAmJlJpPDk3KTspO3JldHVybiBwQyh0LEE0KCkrKGU8NiYmcmgoKT09MzImJmFsKCk9PTMyKSl9byhjMmUsImVzY2FwaW5nIik7ZnVuY3Rpb24geEYodCl7Zm9yKDthbCgpOylzd2l0Y2goUmkpe2Nhc2UgdDpyZXR1cm4gaWw7Y2FzZSAzNDpjYXNlIDM5OnQhPT0zNCYmdCE9PTM5JiZ4RihSaSk7YnJlYWs7Y2FzZSA0MDp0PT09NDEmJnhGKHQpO2JyZWFrO2Nhc2UgOTI6YWwoKTticmVha31yZXR1cm4gaWx9byh4RiwiZGVsaW1pdGVyIik7ZnVuY3Rpb24gdTJlKHQsZSl7Zm9yKDthbCgpJiZ0K1JpIT09NTc7KWlmKHQrUmk9PT04NCYmcmgoKT09PTQ3KWJyZWFrO3JldHVybiIvKiIrcEMoZSxpbC0xKSsiKiIrUzQodD09PTQ3P3Q6YWwoKSl9byh1MmUsImNvbW1lbnRlciIpO2Z1bmN0aW9uIGgyZSh0KXtmb3IoOyF5eShyaCgpKTspYWwoKTtyZXR1cm4gcEModCxpbCl9byhoMmUsImlkZW50aWZpZXIiKTtmdW5jdGlvbiBwMmUodCl7cmV0dXJuIG8yZShnQygiIixudWxsLG51bGwsbnVsbCxbIiJdLHQ9czJlKHQpLDAsWzBdLHQpKX1vKHAyZSwiY29tcGlsZSIpO2Z1bmN0aW9uIGdDKHQsZSxyLG4saSxhLHMsbCx1KXtmb3IodmFyIGg9MCxmPTAsZD1zLHA9MCxtPTAsZz0wLHk9MSx2PTEseD0xLGI9MCx3PSIiLEM9aSxUPWEsRT1uLEE9dzt2Oylzd2l0Y2goZz1iLGI9YWwoKSl7Y2FzZSA0MDppZihnIT0xMDgmJiRmKEEsZC0xKT09NTgpe3QyZShBKz1DNChtQyhiKSwiJiIsIiZcZiIpLCImXGYiLHZGKGg/bFtoLTFdOjApKSE9LTEmJih4PS0xKTticmVha31jYXNlIDM0OmNhc2UgMzk6Y2FzZSA5MTpBKz1tQyhiKTticmVhaztjYXNlIDk6Y2FzZSAxMDpjYXNlIDEzOmNhc2UgMzI6QSs9bDJlKGcpO2JyZWFrO2Nhc2UgOTI6QSs9YzJlKEE0KCktMSw3KTtjb250aW51ZTtjYXNlIDQ3OnN3aXRjaChyaCgpKXtjYXNlIDQyOmNhc2UgNDc6bXkoRnJ0KHUyZShhbCgpLEE0KCkpLGUscix1KSx1KSwoeXkoZ3x8MSk9PTV8fHl5KHJoKCl8fDEpPT01KSYmdm8oQSkmJnpmKEEsLTEsdm9pZCAwKSE9PSIgIiYmKEErPSIgIik7YnJlYWs7ZGVmYXVsdDpBKz0iLyJ9YnJlYWs7Y2FzZSAxMjMqeTpsW2grK109dm8oQSkqeDtjYXNlIDEyNSp5OmNhc2UgNTk6Y2FzZSAwOnN3aXRjaChiKXtjYXNlIDA6Y2FzZSAxMjU6dj0wO2Nhc2UgNTkrZjp4PT0tMSYmKEE9QzQoQSwvXGYvZywiIikpLG0+MCYmKHZvKEEpLWR8fHk9PT0wJiZnPT09NDcpJiZteShtPjMyP2QyZShBKyI7IixuLHIsZC0xLHUpOmQyZShDNChBLCIgIiwiIikrIjsiLG4scixkLTIsdSksdSk7YnJlYWs7Y2FzZSA1OTpBKz0iOyI7ZGVmYXVsdDppZihteShFPWYyZShBLGUscixoLGYsaSxsLHcsQz1bXSxUPVtdLGQsYSksYSksYj09PTEyMylpZihmPT09MClnQyhBLGUsRSxFLEMsYSxkLGwsVCk7ZWxzZXtzd2l0Y2gocCl7Y2FzZSA5OTppZigkZihBLDMpPT09MTEwKWJyZWFrO2Nhc2UgMTA4OmlmKCRmKEEsMik9PT05NylicmVhaztkZWZhdWx0OmY9MDtjYXNlIDEwMDpjYXNlIDEwOTpjYXNlIDExNTp9Zj9nQyh0LEUsRSxuJiZteShmMmUodCxFLEUsMCwwLGksbCx3LGksQz1bXSxkLFQpLFQpLGksVCxkLGwsbj9DOlQpOmdDKEEsRSxFLEUsWyIiXSxULDAsbCxUKX19aD1mPW09MCx5PXg9MSx3PUE9IiIsZD1zO2JyZWFrO2Nhc2UgNTg6ZD0xK3ZvKEEpLG09ZztkZWZhdWx0OmlmKHk8MSl7aWYoYj09MTIzKS0teTtlbHNlIGlmKGI9PTEyNSYmeSsrPT0wJiZhMmUoKT09MTI1KWNvbnRpbnVlfXN3aXRjaChBKz1TNChiKSxiKnkpe2Nhc2UgMzg6eD1mPjA/MTooQSs9IlxmIiwtMSk7YnJlYWs7Y2FzZSA0NDpsW2grK109KHZvKEEpLTEpKngseD0xO2JyZWFrO2Nhc2UgNjQ6cmgoKT09PTQ1JiYoQSs9bUMoYWwoKSkpLHA9cmgoKSxmPWQ9dm8odz1BKz1oMmUoQTQoKSkpLGIrKzticmVhaztjYXNlIDQ1Omc9PT00NSYmdm8oQSk9PTImJih5PTApfX1yZXR1cm4gYX1vKGdDLCJwYXJzZSIpO2Z1bmN0aW9uIGYyZSh0LGUscixuLGksYSxzLGwsdSxoLGYsZCl7Zm9yKHZhciBwPWktMSxtPWk9PT0wP2E6WyIiXSxnPXIyZShtKSx5PTAsdj0wLHg9MDt5PG47Kyt5KWZvcih2YXIgYj0wLHc9emYodCxwKzEscD12Rih2PXNbeV0pKSxDPXQ7YjxnOysrYikoQz1oQyh2PjA/bVtiXSsiICIrdzpDNCh3LC8mXGYvZyxtW2JdKSkpJiYodVt4KytdPUMpO3JldHVybiBkQyh0LGUscixpPT09MD9jQzpsLHUsaCxmLGQpfW8oZjJlLCJydWxlc2V0Iik7ZnVuY3Rpb24gRnJ0KHQsZSxyLG4pe3JldHVybiBkQyh0LGUscixsQyxTNChpMmUoKSksemYodCwyLC0yKSwwLG4pfW8oRnJ0LCJjb21tZW50Iik7ZnVuY3Rpb24gZDJlKHQsZSxyLG4saSl7cmV0dXJuIGRDKHQsZSxyLHVDLHpmKHQsMCxuKSx6Zih0LG4rMSwtMSksbixpKX1vKGQyZSwiZGVjbGFyYXRpb24iKTtmdW5jdGlvbiB5Qyh0LGUpe2Zvcih2YXIgcj0iIixuPTA7bjx0Lmxlbmd0aDtuKyspcis9ZSh0W25dLG4sdCxlKXx8IiI7cmV0dXJuIHJ9byh5Qywic2VyaWFsaXplIik7ZnVuY3Rpb24gbTJlKHQsZSxyLG4pe3N3aXRjaCh0LnR5cGUpe2Nhc2UgZTJlOmlmKHQuY2hpbGRyZW4ubGVuZ3RoKWJyZWFrO2Nhc2UgUXZlOmNhc2UgWnZlOmNhc2UgdUM6cmV0dXJuIHQucmV0dXJuPXQucmV0dXJufHx0LnZhbHVlO2Nhc2UgbEM6cmV0dXJuIiI7Y2FzZSBKdmU6cmV0dXJuIHQucmV0dXJuPXQudmFsdWUrInsiK3lDKHQuY2hpbGRyZW4sbikrIn0iO2Nhc2UgY0M6aWYoIXZvKHQudmFsdWU9dC5wcm9wcy5qb2luKCIsIikpKXJldHVybiIifXJldHVybiB2byhyPXlDKHQuY2hpbGRyZW4sbikpP3QucmV0dXJuPXQudmFsdWUrInsiK3IrIn0iOiIifW8obTJlLCJzdHJpbmdpZnkiKTt1NygpO0hUKCk7b08oKTt2YXIgJHJ0PSJncmFwaGljcy1kb2N1bWVudCBkb2N1bWVudCI7ZnVuY3Rpb24gZzJlKHQsZSl7dC5hdHRyKCJyb2xlIiwkcnQpLGUhPT0iIiYmdC5hdHRyKCJhcmlhLXJvbGVkZXNjcmlwdGlvbiIsZSl9byhnMmUsInNldEExMXlEaWFncmFtSW5mbyIpO2Z1bmN0aW9uIHkyZSh0LGUscixuKXtpZih0Lmluc2VydCE9PXZvaWQgMCl7aWYocil7bGV0IGk9YGNoYXJ0LWRlc2MtJHtufWA7dC5hdHRyKCJhcmlhLWRlc2NyaWJlZGJ5IixpKSx0Lmluc2VydCgiZGVzYyIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoImlkIixpKS50ZXh0KHIpfWlmKGUpe2xldCBpPWBjaGFydC10aXRsZS0ke259YDt0LmF0dHIoImFyaWEtbGFiZWxsZWRieSIsaSksdC5pbnNlcnQoInRpdGxlIiwiOmZpcnN0LWNoaWxkIikuYXR0cigiaWQiLGkpLnRleHQoZSl9fX1vKHkyZSwiYWRkU1ZHYTExeVRpdGxlRGVzY3JpcHRpb24iKTtzMCgpO2ppKCk7amkoKTt6dCgpO1hmKCk7QkMoKTtpcigpO3ZhciB4eT1jbGFzcyB0e2NvbnN0cnVjdG9yKGUscixuLGksYSl7dGhpcy50eXBlPWU7dGhpcy50ZXh0PXI7dGhpcy5kYj1uO3RoaXMucGFyc2VyPWk7dGhpcy5yZW5kZXJlcj1hfXN0YXRpY3tvKHRoaXMsIkRpYWdyYW0iKX1zdGF0aWMgYXN5bmMgZnJvbVRleHQoZSxyPXt9KXtsZXQgbj1jcigpLGk9YTAoZSxuKTtlPVBYKGUpK2AKYDt0cnl7ankoaSl9Y2F0Y2h7bGV0IGg9WkYoaSk7aWYoIWgpdGhyb3cgbmV3IGkwKGBEaWFncmFtICR7aX0gbm90IGZvdW5kLmApO2xldHtpZDpmLGRpYWdyYW06ZH09YXdhaXQgaCgpO2FkKGYsZCl9bGV0e2RiOmEscGFyc2VyOnMscmVuZGVyZXI6bCxpbml0OnV9PWp5KGkpO3JldHVybiBzLnBhcnNlciYmKHMucGFyc2VyLnl5PWEpLGEuY2xlYXI/LigpLHU/LihuKSxyLnRpdGxlJiZhLnNldERpYWdyYW1UaXRsZT8uKHIudGl0bGUpLGF3YWl0IHMucGFyc2UoZSksbmV3IHQoaSxlLGEscyxsKX1hc3luYyByZW5kZXIoZSxyKXthd2FpdCB0aGlzLnJlbmRlcmVyLmRyYXcodGhpcy50ZXh0LGUscix0aGlzKX1nZXRQYXJzZXIoKXtyZXR1cm4gdGhpcy5wYXJzZXJ9Z2V0VHlwZSgpe3JldHVybiB0aGlzLnR5cGV9fTtncigpO3ZhciB2MmU9W107dmFyIHgyZT1vKCgpPT57djJlLmZvckVhY2godD0+e3QoKX0pLHYyZT1bXX0sImF0dGFjaEZ1bmN0aW9ucyIpO3Z0KCk7dmFyIGIyZT1vKHQ9PnQucmVwbGFjZSgvXlxzKiUlKD8heylbXlxuXStcbj8vZ20sIiIpLnRyaW1TdGFydCgpLCJjbGVhbnVwQ29tbWVudHMiKTskNCgpO0V3KCk7ZnVuY3Rpb24gdzJlKHQpe2xldCBlPXQubWF0Y2goRjQpO2lmKCFlKXJldHVybnt0ZXh0OnQsbWV0YWRhdGE6e319O2xldCByPWNtKGVbMV0se3NjaGVtYTpsbX0pPz97fTtyPXR5cGVvZiByPT0ib2JqZWN0IiYmIUFycmF5LmlzQXJyYXkocik/cjp7fTtsZXQgbj17fTtyZXR1cm4gci5kaXNwbGF5TW9kZSYmKG4uZGlzcGxheU1vZGU9ci5kaXNwbGF5TW9kZS50b1N0cmluZygpKSxyLnRpdGxlJiYobi50aXRsZT1yLnRpdGxlLnRvU3RyaW5nKCkpLHIuY29uZmlnJiYobi5jb25maWc9ci5jb25maWcpLHt0ZXh0OnQuc2xpY2UoZVswXS5sZW5ndGgpLG1ldGFkYXRhOm59fW8odzJlLCJleHRyYWN0RnJvbnRNYXR0ZXIiKTtpcigpO3ZhciB6cnQ9byh0PT50LnJlcGxhY2UoL1xyXG4/L2csYApgKS5yZXBsYWNlKC88KFx3KykoW14+XSopPi9nLChlLHIsbik9PiI8IityK24ucmVwbGFjZSgvPSIoW14iXSopIi9nLCI9JyQxJyIpKyI+IiksImNsZWFudXBUZXh0IiksR3J0PW8odD0+e2xldHt0ZXh0OmUsbWV0YWRhdGE6cn09dzJlKHQpLHtkaXNwbGF5TW9kZTpuLHRpdGxlOmksY29uZmlnOmE9e319PXI7cmV0dXJuIG4mJihhLmdhbnR0fHwoYS5nYW50dD17fSksYS5nYW50dC5kaXNwbGF5TW9kZT1uKSx7dGl0bGU6aSxjb25maWc6YSx0ZXh0OmV9fSwicHJvY2Vzc0Zyb250bWF0dGVyIiksVnJ0PW8odD0+e2xldCBlPUd0LmRldGVjdEluaXQodCk/P3t9LHI9R3QuZGV0ZWN0RGlyZWN0aXZlKHQsIndyYXAiKTtyZXR1cm4gQXJyYXkuaXNBcnJheShyKT9lLndyYXA9ci5zb21lKCh7dHlwZTpufSk9Pm49PT0id3JhcCIpOnI/LnR5cGU9PT0id3JhcCImJihlLndyYXA9ITApLHt0ZXh0OklYKHQpLGRpcmVjdGl2ZTplfX0sInByb2Nlc3NEaXJlY3RpdmVzIik7ZnVuY3Rpb24gYkYodCl7bGV0IGU9enJ0KHQpLHI9R3J0KGUpLG49VnJ0KHIudGV4dCksaT1GaShyLmNvbmZpZyxuLmRpcmVjdGl2ZSk7cmV0dXJuIHQ9YjJlKG4udGV4dCkse2NvZGU6dCx0aXRsZTpyLnRpdGxlLGNvbmZpZzppfX1vKGJGLCJwcmVwcm9jZXNzRGlhZ3JhbSIpO3RBKCk7cTQoKTtpcigpO2Z1bmN0aW9uIFQyZSh0KXtsZXQgZT1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUodCkscj1BcnJheS5mcm9tKGUsbj0+U3RyaW5nLmZyb21Db2RlUG9pbnQobikpLmpvaW4oIiIpO3JldHVybiBidG9hKHIpfW8oVDJlLCJ0b0Jhc2U2NCIpO3ZhciBVcnQ9NWU0LEhydD0iZ3JhcGggVEI7YVtNYXhpbXVtIHRleHQgc2l6ZSBpbiBkaWFncmFtIGV4Y2VlZGVkXTtzdHlsZSBhIGZpbGw6I2ZhYSIsV3J0PSJzYW5kYm94IixxcnQ9Imxvb3NlIixZcnQ9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixYcnQ9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLGpydD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsS3J0PSIxMDAlIixRcnQ9IjEwMCUiLFpydD0iYm9yZGVyOjA7bWFyZ2luOjA7IixKcnQ9Im1hcmdpbjowIixlbnQ9ImFsbG93LXRvcC1uYXZpZ2F0aW9uLWJ5LXVzZXItYWN0aXZhdGlvbiBhbGxvdy1wb3B1cHMiLHRudD0nVGhlICJpZnJhbWUiIHRhZyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHlvdXIgYnJvd3Nlci4nLHJudD1bImZvcmVpZ25vYmplY3QiXSxubnQ9WyJkb21pbmFudC1iYXNlbGluZSJdO2Z1bmN0aW9uIEMyZSh0KXtsZXQgZT1iRih0KTtyZXR1cm4gTHkoKSxXJChlLmNvbmZpZz8/e30pLGV9byhDMmUsInByb2Nlc3NBbmRTZXRDb25maWdzIik7YXN5bmMgZnVuY3Rpb24gaW50KHQsZSl7cHkoKTt0cnl7bGV0e2NvZGU6cixjb25maWc6bn09QzJlKHQpO3JldHVybntkaWFncmFtVHlwZTooYXdhaXQgQTJlKHIpKS50eXBlLGNvbmZpZzpufX1jYXRjaChyKXtpZihlPy5zdXBwcmVzc0Vycm9ycylyZXR1cm4hMTt0aHJvdyByfX1vKGludCwicGFyc2UiKTt2YXIgazJlPW8oKHQsZSxyPVtdKT0+YAouJHt0fSAke2V9IHsgJHtyLmpvaW4oIiAhaW1wb3J0YW50OyAiKX0gIWltcG9ydGFudDsgfWAsImNzc0ltcG9ydGFudFN0eWxlcyIpLGFudD1vKCh0LGU9bmV3IE1hcCk9PntsZXQgcj0iIjtpZih0LnRoZW1lQ1NTIT09dm9pZCAwJiYocis9YAoke3QudGhlbWVDU1N9YCksdC5mb250RmFtaWx5IT09dm9pZCAwJiYocis9YAo6cm9vdCB7IC0tbWVybWFpZC1mb250LWZhbWlseTogJHt0LmZvbnRGYW1pbHl9fWApLHQuYWx0Rm9udEZhbWlseSE9PXZvaWQgMCYmKHIrPWAKOnJvb3QgeyAtLW1lcm1haWQtYWx0LWZvbnQtZmFtaWx5OiAke3QuYWx0Rm9udEZhbWlseX19YCksZSBpbnN0YW5jZW9mIE1hcCl7bGV0IHM9dC5odG1sTGFiZWxzPz90LmZsb3djaGFydD8uaHRtbExhYmVscz9bIj4gKiIsInNwYW4iXTpbInJlY3QiLCJwb2x5Z29uIiwiZWxsaXBzZSIsImNpcmNsZSIsInBhdGgiXTtlLmZvckVhY2gobD0+e3VyKGwuc3R5bGVzKXx8cy5mb3JFYWNoKHU9PntyKz1rMmUobC5pZCx1LGwuc3R5bGVzKX0pLHVyKGwudGV4dFN0eWxlcyl8fChyKz1rMmUobC5pZCwidHNwYW4iLChsPy50ZXh0U3R5bGVzfHxbXSkubWFwKHU9PnUucmVwbGFjZSgiY29sb3IiLCJmaWxsIikpKSl9KX1yZXR1cm4gcn0sImNyZWF0ZUNzc1N0eWxlcyIpLHNudD1vKCh0LGUscixuKT0+e2xldCBpPWFudCh0LHIpLGE9ekcoZSxpLHQudGhlbWVWYXJpYWJsZXMpO3JldHVybiB5QyhwMmUoYCR7bn17JHthfX1gKSxtMmUpfSwiY3JlYXRlVXNlclN0eWxlcyIpLG9udD1vKCh0PSIiLGUscik9PntsZXQgbj10O3JldHVybiFyJiYhZSYmKG49bi5yZXBsYWNlKC9tYXJrZXItZW5kPSJ1cmxcKFtcZCsuLzo9P0EtWmEtei1dKj8jL2csJ21hcmtlci1lbmQ9InVybCgjJykpLG49bmEobiksbj1uLnJlcGxhY2UoLzxicj4vZywiPGJyLz4iKSxufSwiY2xlYW5VcFN2Z0NvZGUiKSxsbnQ9bygodD0iIixlKT0+e2xldCByPWU/LnZpZXdCb3g/LmJhc2VWYWw/LmhlaWdodD9lLnZpZXdCb3guYmFzZVZhbC5oZWlnaHQrInB4IjpRcnQsbj1UMmUoYDxib2R5IHN0eWxlPSIke0pydH0iPiR7dH08L2JvZHk+YCk7cmV0dXJuYDxpZnJhbWUgc3R5bGU9IndpZHRoOiR7S3J0fTtoZWlnaHQ6JHtyfTske1pydH0iIHNyYz0iZGF0YTp0ZXh0L2h0bWw7Y2hhcnNldD1VVEYtODtiYXNlNjQsJHtufSIgc2FuZGJveD0iJHtlbnR9Ij4KICAke3RudH0KPC9pZnJhbWU+YH0sInB1dEludG9JRnJhbWUiKSxFMmU9bygodCxlLHIsbixpKT0+e2xldCBhPXQuYXBwZW5kKCJkaXYiKTthLmF0dHIoImlkIixyKSxuJiZhLmF0dHIoInN0eWxlIixuKTtsZXQgcz1hLmFwcGVuZCgic3ZnIikuYXR0cigiaWQiLGUpLmF0dHIoIndpZHRoIiwiMTAwJSIpLmF0dHIoInhtbG5zIixZcnQpO3JldHVybiBpJiZzLmF0dHIoInhtbG5zOnhsaW5rIixpKSxzLmFwcGVuZCgiZyIpLHR9LCJhcHBlbmREaXZTdmdHIik7ZnVuY3Rpb24gUzJlKHQsZSl7cmV0dXJuIHQuYXBwZW5kKCJpZnJhbWUiKS5hdHRyKCJpZCIsZSkuYXR0cigic3R5bGUiLCJ3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyIpLmF0dHIoInNhbmRib3giLCIiKX1vKFMyZSwic2FuZGJveGVkSWZyYW1lIik7dmFyIGNudD1vKCh0LGUscixuKT0+e3QuZ2V0RWxlbWVudEJ5SWQoZSk/LnJlbW92ZSgpLHQuZ2V0RWxlbWVudEJ5SWQocik/LnJlbW92ZSgpLHQuZ2V0RWxlbWVudEJ5SWQobik/LnJlbW92ZSgpfSwicmVtb3ZlRXhpc3RpbmdFbGVtZW50cyIpLHVudD1vKGFzeW5jIGZ1bmN0aW9uKHQsZSxyKXtweSgpO2xldCBuPUMyZShlKTtlPW4uY29kZTtsZXQgaT1jcigpO1kuZGVidWcoaSksZS5sZW5ndGg+KGk/Lm1heFRleHRTaXplPz9VcnQpJiYoZT1IcnQpO2xldCBhPSIjIit0LHM9ImkiK3QsbD0iIyIrcyx1PSJkIit0LGg9IiMiK3UsZj1vKCgpPT57bGV0IEw9R2UocD9sOmgpLm5vZGUoKTtMJiYicmVtb3ZlImluIEwmJkwucmVtb3ZlKCl9LCJyZW1vdmVUZW1wRWxlbWVudHMiKSxkPUdlKCJib2R5IikscD1pLnNlY3VyaXR5TGV2ZWw9PT1XcnQsbT1pLnNlY3VyaXR5TGV2ZWw9PT1xcnQsZz1pLmZvbnRGYW1pbHk7aWYociE9PXZvaWQgMCl7aWYociYmKHIuaW5uZXJIVE1MPSIiKSxwKXtsZXQgaz1TMmUoR2Uocikscyk7ZD1HZShrLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpLGQubm9kZSgpLnN0eWxlLm1hcmdpbj0wfWVsc2UgZD1HZShyKTtFMmUoZCx0LHUsYGZvbnQtZmFtaWx5OiAke2d9YCxYcnQpfWVsc2V7aWYoY250KGRvY3VtZW50LHQsdSxzKSxwKXtsZXQgaz1TMmUoR2UoImJvZHkiKSxzKTtkPUdlKGsubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keSksZC5ub2RlKCkuc3R5bGUubWFyZ2luPTB9ZWxzZSBkPUdlKCJib2R5Iik7RTJlKGQsdCx1KX1sZXQgeSx2O3RyeXt5PWF3YWl0IHh5LmZyb21UZXh0KGUse3RpdGxlOm4udGl0bGV9KX1jYXRjaChrKXtpZihpLnN1cHByZXNzRXJyb3JSZW5kZXJpbmcpdGhyb3cgZigpLGs7eT1hd2FpdCB4eS5mcm9tVGV4dCgiZXJyb3IiKSx2PWt9bGV0IHg9ZC5zZWxlY3QoaCkubm9kZSgpLGI9eS50eXBlLHc9eC5maXJzdENoaWxkLEM9dy5maXJzdENoaWxkLFQ9eS5yZW5kZXJlci5nZXRDbGFzc2VzPy4oZSx5KSxFPXNudChpLGIsVCxhKSxBPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7QS5pbm5lckhUTUw9RSx3Lmluc2VydEJlZm9yZShBLEMpO3RyeXthd2FpdCB5LnJlbmRlcmVyLmRyYXcoZSx0LHZiLnZlcnNpb24seSl9Y2F0Y2goayl7dGhyb3cgaS5zdXBwcmVzc0Vycm9yUmVuZGVyaW5nP2YoKTpZZGUuZHJhdyhlLHQsdmIudmVyc2lvbiksa31sZXQgUz1kLnNlbGVjdChgJHtofSBzdmdgKSxfPXkuZGIuZ2V0QWNjVGl0bGU/LigpLEk9eS5kYi5nZXRBY2NEZXNjcmlwdGlvbj8uKCk7Zm50KGIsUyxfLEkpLGQuc2VsZWN0KGBbaWQ9IiR7dH0iXWApLnNlbGVjdEFsbCgiZm9yZWlnbm9iamVjdCA+ICoiKS5hdHRyKCJ4bWxucyIsanJ0KTtsZXQgRD1kLnNlbGVjdChoKS5ub2RlKCkuaW5uZXJIVE1MO2lmKFkuZGVidWcoImNvbmZpZy5hcnJvd01hcmtlckFic29sdXRlIixpLmFycm93TWFya2VyQWJzb2x1dGUpLEQ9b250KEQscCxmcihpLmFycm93TWFya2VyQWJzb2x1dGUpKSxwKXtsZXQgaz1kLnNlbGVjdChoKyIgc3ZnIikubm9kZSgpO0Q9bG50KEQsayl9ZWxzZSBtfHwoRD1jaC5zYW5pdGl6ZShELHtBRERfVEFHUzpybnQsQUREX0FUVFI6bm50LEhUTUxfSU5URUdSQVRJT05fUE9JTlRTOntmb3JlaWdub2JqZWN0OiEwfX0pKTtpZih4MmUoKSx2KXRocm93IHY7cmV0dXJuIGYoKSx7ZGlhZ3JhbVR5cGU6Yixzdmc6RCxiaW5kRnVuY3Rpb25zOnkuZGIuYmluZEZ1bmN0aW9uc319LCJyZW5kZXIiKTtmdW5jdGlvbiBobnQodD17fSl7bGV0IGU9R24oe30sdCk7ZT8uZm9udEZhbWlseSYmIWUudGhlbWVWYXJpYWJsZXM/LmZvbnRGYW1pbHkmJihlLnRoZW1lVmFyaWFibGVzfHwoZS50aGVtZVZhcmlhYmxlcz17fSksZS50aGVtZVZhcmlhYmxlcy5mb250RmFtaWx5PWUuZm9udEZhbWlseSksViQoZSksZT8udGhlbWUmJmUudGhlbWUgaW4gVG8/ZS50aGVtZVZhcmlhYmxlcz1Ub1tlLnRoZW1lXS5nZXRUaGVtZVZhcmlhYmxlcyhlLnRoZW1lVmFyaWFibGVzKTplJiYoZS50aGVtZVZhcmlhYmxlcz1Uby5kZWZhdWx0LmdldFRoZW1lVmFyaWFibGVzKGUudGhlbWVWYXJpYWJsZXMpKTtsZXQgcj10eXBlb2YgZT09Im9iamVjdCI/dDcoZSk6cjcoKTt3eShyLmxvZ0xldmVsKSxweSgpfW8oaG50LCJpbml0aWFsaXplIik7dmFyIEEyZT1vKCh0LGU9e30pPT57bGV0e2NvZGU6cn09YkYodCk7cmV0dXJuIHh5LmZyb21UZXh0KHIsZSl9LCJnZXREaWFncmFtRnJvbVRleHQiKTtmdW5jdGlvbiBmbnQodCxlLHIsbil7ZzJlKGUsdCkseTJlKGUscixuLGUuYXR0cigiaWQiKSl9byhmbnQsImFkZEExMXlJbmZvIik7dmFyIEdmPU9iamVjdC5mcmVlemUoe3JlbmRlcjp1bnQscGFyc2U6aW50LGdldERpYWdyYW1Gcm9tVGV4dDpBMmUsaW5pdGlhbGl6ZTpobnQsZ2V0Q29uZmlnOmNyLHNldENvbmZpZzpYNCxnZXRTaXRlQ29uZmlnOnI3LHVwZGF0ZVNpdGVDb25maWc6VSQscmVzZXQ6bygoKT0+e0x5KCl9LCJyZXNldCIpLGdsb2JhbFJlc2V0Om8oKCk9PntMeShsaCl9LCJnbG9iYWxSZXNldCIpLGRlZmF1bHRDb25maWc6bGh9KTt3eShjcigpLmxvZ0xldmVsKTtMeShjcigpKTtZZCgpO2lyKCk7dmFyIGRudD1vKCh0LGUscik9PntZLndhcm4odCksWjkodCk/KHImJnIodC5zdHIsdC5oYXNoKSxlLnB1c2goey4uLnQsbWVzc2FnZTp0LnN0cixlcnJvcjp0fSkpOihyJiZyKHQpLHQgaW5zdGFuY2VvZiBFcnJvciYmZS5wdXNoKHtzdHI6dC5tZXNzYWdlLG1lc3NhZ2U6dC5tZXNzYWdlLGhhc2g6dC5uYW1lLGVycm9yOnR9KSl9LCJoYW5kbGVFcnJvciIpLF8yZT1vKGFzeW5jIGZ1bmN0aW9uKHQ9e3F1ZXJ5U2VsZWN0b3I6Ii5tZXJtYWlkIn0pe3RyeXthd2FpdCBwbnQodCl9Y2F0Y2goZSl7aWYoWjkoZSkmJlkuZXJyb3IoZS5zdHIpLG5oLnBhcnNlRXJyb3ImJm5oLnBhcnNlRXJyb3IoZSksIXQuc3VwcHJlc3NFcnJvcnMpdGhyb3cgWS5lcnJvcigiVXNlIHRoZSBzdXBwcmVzc0Vycm9ycyBvcHRpb24gdG8gc3VwcHJlc3MgdGhlc2UgZXJyb3JzIiksZX19LCJydW4iKSxwbnQ9byhhc3luYyBmdW5jdGlvbih7cG9zdFJlbmRlckNhbGxiYWNrOnQscXVlcnlTZWxlY3RvcjplLG5vZGVzOnJ9PXtxdWVyeVNlbGVjdG9yOiIubWVybWFpZCJ9KXtsZXQgbj1HZi5nZXRDb25maWcoKTtZLmRlYnVnKGAke3Q/IiI6Ik5vICJ9Q2FsbGJhY2sgZnVuY3Rpb24gZm91bmRgKTtsZXQgaTtpZihyKWk9cjtlbHNlIGlmKGUpaT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGUpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJOb2RlcyBhbmQgcXVlcnlTZWxlY3RvciBhcmUgYm90aCB1bmRlZmluZWQiKTtZLmRlYnVnKGBGb3VuZCAke2kubGVuZ3RofSBkaWFncmFtc2ApLG4/LnN0YXJ0T25Mb2FkIT09dm9pZCAwJiYoWS5kZWJ1ZygiU3RhcnQgT24gTG9hZDogIituPy5zdGFydE9uTG9hZCksR2YudXBkYXRlU2l0ZUNvbmZpZyh7c3RhcnRPbkxvYWQ6bj8uc3RhcnRPbkxvYWR9KSk7bGV0IGE9bmV3IEd0LkluaXRJREdlbmVyYXRvcihuLmRldGVybWluaXN0aWNJZHMsbi5kZXRlcm1pbmlzdGljSURTZWVkKSxzLGw9W107Zm9yKGxldCB1IG9mIEFycmF5LmZyb20oaSkpe1kuaW5mbygiUmVuZGVyaW5nIGRpYWdyYW06ICIrdS5pZCk7aWYodS5nZXRBdHRyaWJ1dGUoImRhdGEtcHJvY2Vzc2VkIikpY29udGludWU7dS5zZXRBdHRyaWJ1dGUoImRhdGEtcHJvY2Vzc2VkIiwidHJ1ZSIpO2xldCBoPWBtZXJtYWlkLSR7YS5uZXh0KCl9YDtzPXUuaW5uZXJIVE1MLHM9QjQoR3QuZW50aXR5RGVjb2RlKHMpKS50cmltKCkucmVwbGFjZSgvPGJyXHMqXC8/Pi9naSwiPGJyLz4iKTtsZXQgZj1HdC5kZXRlY3RJbml0KHMpO2YmJlkuZGVidWcoIkRldGVjdGVkIGVhcmx5IHJlaW5pdDogIixmKTt0cnl7bGV0e3N2ZzpkLGJpbmRGdW5jdGlvbnM6cH09YXdhaXQgTjJlKGgscyx1KTt1LmlubmVySFRNTD1kLHQmJmF3YWl0IHQoaCkscCYmcCh1KX1jYXRjaChkKXtkbnQoZCxsLG5oLnBhcnNlRXJyb3IpfX1pZihsLmxlbmd0aD4wKXRocm93IGxbMF19LCJydW5UaHJvd3NFcnJvcnMiKSxEMmU9byhmdW5jdGlvbih0KXtHZi5pbml0aWFsaXplKHQpfSwiaW5pdGlhbGl6ZSIpLG1udD1vKGFzeW5jIGZ1bmN0aW9uKHQsZSxyKXtZLndhcm4oIm1lcm1haWQuaW5pdCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHJ1biBpbnN0ZWFkLiIpLHQmJkQyZSh0KTtsZXQgbj17cG9zdFJlbmRlckNhbGxiYWNrOnIscXVlcnlTZWxlY3RvcjoiLm1lcm1haWQifTt0eXBlb2YgZT09InN0cmluZyI/bi5xdWVyeVNlbGVjdG9yPWU6ZSYmKGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudD9uLm5vZGVzPVtlXTpuLm5vZGVzPWUpLGF3YWl0IF8yZShuKX0sImluaXQiKSxnbnQ9byhhc3luYyh0LHtsYXp5TG9hZDplPSEwfT17fSk9PntweSgpLHo0KC4uLnQpLGU9PT0hMSYmYXdhaXQgS3ZlKCl9LCJyZWdpc3RlckV4dGVybmFsRGlhZ3JhbXMiKSxMMmU9byhmdW5jdGlvbigpe2lmKG5oLnN0YXJ0T25Mb2FkKXtsZXR7c3RhcnRPbkxvYWQ6dH09R2YuZ2V0Q29uZmlnKCk7dCYmbmgucnVuKCkuY2F0Y2goZT0+WS5lcnJvcigiTWVybWFpZCBmYWlsZWQgdG8gaW5pdGlhbGl6ZSIsZSkpfX0sImNvbnRlbnRMb2FkZWQiKTtpZih0eXBlb2YgZG9jdW1lbnQ8InUiKXt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsTDJlLCExKX12YXIgeW50PW8oZnVuY3Rpb24odCl7bmgucGFyc2VFcnJvcj10fSwic2V0UGFyc2VFcnJvckhhbmRsZXIiKSx2Qz1bXSx3Rj0hMSxSMmU9byhhc3luYygpPT57aWYoIXdGKXtmb3Iod0Y9ITA7dkMubGVuZ3RoPjA7KXtsZXQgdD12Qy5zaGlmdCgpO2lmKHQpdHJ5e2F3YWl0IHQoKX1jYXRjaChlKXtZLmVycm9yKCJFcnJvciBleGVjdXRpbmcgcXVldWUiLGUpfX13Rj0hMX19LCJleGVjdXRlUXVldWUiKSx2bnQ9byhhc3luYyh0LGUpPT5uZXcgUHJvbWlzZSgocixuKT0+e2xldCBpPW8oKCk9Pm5ldyBQcm9taXNlKChhLHMpPT57R2YucGFyc2UodCxlKS50aGVuKGw9PnthKGwpLHIobCl9LGw9PntZLmVycm9yKCJFcnJvciBwYXJzaW5nIixsKSxuaC5wYXJzZUVycm9yPy4obCkscyhsKSxuKGwpfSl9KSwicGVyZm9ybUNhbGwiKTt2Qy5wdXNoKGkpLFIyZSgpLmNhdGNoKG4pfSksInBhcnNlIiksTjJlPW8oKHQsZSxyKT0+bmV3IFByb21pc2UoKG4saSk9PntsZXQgYT1vKCgpPT5uZXcgUHJvbWlzZSgocyxsKT0+e0dmLnJlbmRlcih0LGUscikudGhlbih1PT57cyh1KSxuKHUpfSx1PT57WS5lcnJvcigiRXJyb3IgcGFyc2luZyIsdSksbmgucGFyc2VFcnJvcj8uKHUpLGwodSksaSh1KX0pfSksInBlcmZvcm1DYWxsIik7dkMucHVzaChhKSxSMmUoKS5jYXRjaChpKX0pLCJyZW5kZXIiKSxuaD17c3RhcnRPbkxvYWQ6ITAsbWVybWFpZEFQSTpHZixwYXJzZTp2bnQscmVuZGVyOk4yZSxpbml0Om1udCxydW46XzJlLHJlZ2lzdGVyRXh0ZXJuYWxEaWFncmFtczpnbnQscmVnaXN0ZXJMYXlvdXRMb2FkZXJzOnZSLGluaXRpYWxpemU6RDJlLHBhcnNlRXJyb3I6dm9pZCAwLGNvbnRlbnRMb2FkZWQ6TDJlLHNldFBhcnNlRXJyb3JIYW5kbGVyOnludCxkZXRlY3RUeXBlOmEwLHJlZ2lzdGVySWNvblBhY2tzOlA0fSx4bnQ9bmg7cmV0dXJuIFYyZShibnQpO30pKCk7Ci8qISBDaGVjayBpZiBwcmV2aW91c2x5IHByb2Nlc3NlZCAqLwovKiEKICogV2FpdCBmb3IgZG9jdW1lbnQgbG9hZGVkIGJlZm9yZSBzdGFydGluZyB0aGUgZXhlY3V0aW9uCiAqLwovKiEgQnVuZGxlZCBsaWNlbnNlIGluZm9ybWF0aW9uOgoKZG9tcHVyaWZ5L2Rpc3QvcHVyaWZ5LmVzLm1qczoKICAoKiEgQGxpY2Vuc2UgRE9NUHVyaWZ5IDMuMi40IHwgKGMpIEN1cmU1MyBhbmQgb3RoZXIgY29udHJpYnV0b3JzIHwgUmVsZWFzZWQgdW5kZXIgdGhlIEFwYWNoZSBsaWNlbnNlIDIuMCBhbmQgTW96aWxsYSBQdWJsaWMgTGljZW5zZSAyLjAgfCBnaXRodWIuY29tL2N1cmU1My9ET01QdXJpZnkvYmxvYi8zLjIuNC9MSUNFTlNFICopCgpqcy15YW1sL2Rpc3QvanMteWFtbC5tanM6CiAgKCohIGpzLXlhbWwgNC4xLjAgaHR0cHM6Ly9naXRodWIuY29tL25vZGVjYS9qcy15YW1sIEBsaWNlbnNlIE1JVCAqKQoKbG9kYXNoLWVzL2xvZGFzaC5qczoKICAoKioKICAgKiBAbGljZW5zZQogICAqIExvZGFzaCAoQ3VzdG9tIEJ1aWxkKSA8aHR0cHM6Ly9sb2Rhc2guY29tLz4KICAgKiBCdWlsZDogYGxvZGFzaCBtb2R1bGFyaXplIGV4cG9ydHM9ImVzIiAtbyAuL2AKICAgKiBDb3B5cmlnaHQgT3BlbkpTIEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycyA8aHR0cHM6Ly9vcGVuanNmLm9yZy8+CiAgICogUmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UgPGh0dHBzOi8vbG9kYXNoLmNvbS9saWNlbnNlPgogICAqIEJhc2VkIG9uIFVuZGVyc2NvcmUuanMgMS44LjMgPGh0dHA6Ly91bmRlcnNjb3JlanMub3JnL0xJQ0VOU0U+CiAgICogQ29weXJpZ2h0IEplcmVteSBBc2hrZW5hcywgRG9jdW1lbnRDbG91ZCBhbmQgSW52ZXN0aWdhdGl2ZSBSZXBvcnRlcnMgJiBFZGl0b3JzCiAgICopCgpjeXRvc2NhcGUvZGlzdC9jeXRvc2NhcGUuZXNtLm1qczoKICAoKiEKICBFbWJlZGRhYmxlIE1pbmltdW0gU3RyaWN0bHktQ29tcGxpYW50IFByb21pc2VzL0ErIDEuMS4xIFRoZW5hYmxlCiAgQ29weXJpZ2h0IChjKSAyMDEzLTIwMTQgUmFsZiBTLiBFbmdlbHNjaGFsbCAoaHR0cDovL2VuZ2Vsc2NoYWxsLmNvbSkKICBMaWNlbnNlZCB1bmRlciBUaGUgTUlUIExpY2Vuc2UgKGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQpCiAgKikKICAoKiEKICBFdmVudCBvYmplY3QgYmFzZWQgb24galF1ZXJ5IGV2ZW50cywgTUlUIGxpY2Vuc2UKICAKICBodHRwczovL2pxdWVyeS5vcmcvbGljZW5zZS8KICBodHRwczovL3RsZHJsZWdhbC5jb20vbGljZW5zZS9taXQtbGljZW5zZQogIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5L2Jsb2IvbWFzdGVyL3NyYy9ldmVudC5qcwogICopCiAgKCohIEJlemllciBjdXJ2ZSBmdW5jdGlvbiBnZW5lcmF0b3IuIENvcHlyaWdodCBHYWV0YW4gUmVuYXVkZWF1LiBNSVQgTGljZW5zZTogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NSVRfTGljZW5zZSAqKQogICgqISBSdW5nZS1LdXR0YSBzcHJpbmcgcGh5c2ljcyBmdW5jdGlvbiBnZW5lcmF0b3IuIEFkYXB0ZWQgZnJvbSBGcmFtZXIuanMsIGNvcHlyaWdodCBLb2VuIEJvay4gTUlUIExpY2Vuc2U6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTUlUX0xpY2Vuc2UgKikKKi8KZ2xvYmFsVGhpcy5tZXJtYWlkID0gZ2xvYmFsVGhpcy5fX2VzYnVpbGRfZXNtX21lcm1haWQuZGVmYXVsdDsK`; \ No newline at end of file +module.exports = `InVzZSBzdHJpY3QiO3ZhciBfX2VzYnVpbGRfZXNtX21lcm1haWRfbm07KF9fZXNidWlsZF9lc21fbWVybWFpZF9ubXx8PXt9KS5tZXJtYWlkPSgoKT0+e3ZhciBhYmU9T2JqZWN0LmNyZWF0ZTt2YXIgX3k9T2JqZWN0LmRlZmluZVByb3BlcnR5O3ZhciBzYmU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjt2YXIgb2JlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO3ZhciBsYmU9T2JqZWN0LmdldFByb3RvdHlwZU9mLGNiZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3ZhciBvPSh0LGUpPT5feSh0LCJuYW1lIix7dmFsdWU6ZSxjb25maWd1cmFibGU6ITB9KTt2YXIgTj0odCxlKT0+KCk9Pih0JiYoZT10KHQ9MCkpLGUpO3ZhciBQaT0odCxlKT0+KCk9PihlfHx0KChlPXtleHBvcnRzOnt9fSkuZXhwb3J0cyxlKSxlLmV4cG9ydHMpLHVyPSh0LGUpPT57Zm9yKHZhciByIGluIGUpX3kodCxyLHtnZXQ6ZVtyXSxlbnVtZXJhYmxlOiEwfSl9LFY0PSh0LGUscixuKT0+e2lmKGUmJnR5cGVvZiBlPT0ib2JqZWN0Inx8dHlwZW9mIGU9PSJmdW5jdGlvbiIpZm9yKGxldCBpIG9mIG9iZShlKSkhY2JlLmNhbGwodCxpKSYmaSE9PXImJl95KHQsaSx7Z2V0OigpPT5lW2ldLGVudW1lcmFibGU6IShuPXNiZShlLGkpKXx8bi5lbnVtZXJhYmxlfSk7cmV0dXJuIHR9LENyPSh0LGUscik9PihWNCh0LGUsImRlZmF1bHQiKSxyJiZWNChyLGUsImRlZmF1bHQiKSksQWE9KHQsZSxyKT0+KHI9dCE9bnVsbD9hYmUobGJlKHQpKTp7fSxWNChlfHwhdHx8IXQuX19lc01vZHVsZT9feShyLCJkZWZhdWx0Iix7dmFsdWU6dCxlbnVtZXJhYmxlOiEwfSk6cix0KSksdWJlPXQ9PlY0KF95KHt9LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0KTt2YXIgVTQ9UGkoKEhDLFdDKT0+eyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24odCxlKXt0eXBlb2YgSEM9PSJvYmplY3QiJiZ0eXBlb2YgV0M8InUiP1dDLmV4cG9ydHM9ZSgpOnR5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJmRlZmluZS5hbWQ/ZGVmaW5lKGUpOih0PXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR8fHNlbGYpLmRheWpzPWUoKX0pKEhDLGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciB0PTFlMyxlPTZlNCxyPTM2ZTUsbj0ibWlsbGlzZWNvbmQiLGk9InNlY29uZCIsYT0ibWludXRlIixzPSJob3VyIixsPSJkYXkiLHU9IndlZWsiLGg9Im1vbnRoIixmPSJxdWFydGVyIixkPSJ5ZWFyIixwPSJkYXRlIixtPSJJbnZhbGlkIERhdGUiLGc9L14oXGR7NH0pWy0vXT8oXGR7MSwyfSk/Wy0vXT8oXGR7MCwyfSlbVHRcc10qKFxkezEsMn0pPzo/KFxkezEsMn0pPzo/KFxkezEsMn0pP1suOl0/KFxkKyk/JC8seT0vXFsoW15cXV0rKV18WXsxLDR9fE17MSw0fXxEezEsMn18ZHsxLDR9fEh7MSwyfXxoezEsMn18YXxBfG17MSwyfXxzezEsMn18WnsxLDJ9fFNTUy9nLHY9e25hbWU6ImVuIix3ZWVrZGF5czoiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksbW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG9yZGluYWw6byhmdW5jdGlvbihrKXt2YXIgTD1bInRoIiwic3QiLCJuZCIsInJkIl0sQT1rJTEwMDtyZXR1cm4iWyIraysoTFsoQS0yMCklMTBdfHxMW0FdfHxMWzBdKSsiXSJ9LCJvcmRpbmFsIil9LHg9byhmdW5jdGlvbihrLEwsQSl7dmFyIEk9U3RyaW5nKGspO3JldHVybiFJfHxJLmxlbmd0aD49TD9rOiIiK0FycmF5KEwrMS1JLmxlbmd0aCkuam9pbihBKStrfSwibSIpLGI9e3M6eCx6Om8oZnVuY3Rpb24oayl7dmFyIEw9LWsudXRjT2Zmc2V0KCksQT1NYXRoLmFicyhMKSxJPU1hdGguZmxvb3IoQS82MCksTT1BJTYwO3JldHVybihMPD0wPyIrIjoiLSIpK3goSSwyLCIwIikrIjoiK3goTSwyLCIwIil9LCJ6IiksbTpvKGZ1bmN0aW9uIGsoTCxBKXtpZihMLmRhdGUoKTxBLmRhdGUoKSlyZXR1cm4tayhBLEwpO3ZhciBJPTEyKihBLnllYXIoKS1MLnllYXIoKSkrKEEubW9udGgoKS1MLm1vbnRoKCkpLE09TC5jbG9uZSgpLmFkZChJLGgpLFA9QS1NPDAsQj1MLmNsb25lKCkuYWRkKEkrKFA/LTE6MSksaCk7cmV0dXJuKygtKEkrKEEtTSkvKFA/TS1COkItTSkpfHwwKX0sInQiKSxhOm8oZnVuY3Rpb24oayl7cmV0dXJuIGs8MD9NYXRoLmNlaWwoayl8fDA6TWF0aC5mbG9vcihrKX0sImEiKSxwOm8oZnVuY3Rpb24oayl7cmV0dXJue006aCx5OmQsdzp1LGQ6bCxEOnAsaDpzLG06YSxzOmksbXM6bixROmZ9W2tdfHxTdHJpbmcoa3x8IiIpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvcyQvLCIiKX0sInAiKSx1Om8oZnVuY3Rpb24oayl7cmV0dXJuIGs9PT12b2lkIDB9LCJ1Iil9LFQ9ImVuIixTPXt9O1NbVF09djt2YXIgdz0iJGlzRGF5anNPYmplY3QiLEU9byhmdW5jdGlvbihrKXtyZXR1cm4gayBpbnN0YW5jZW9mIE98fCEoIWt8fCFrW3ddKX0sIlMiKSxfPW8oZnVuY3Rpb24gayhMLEEsSSl7dmFyIE07aWYoIUwpcmV0dXJuIFQ7aWYodHlwZW9mIEw9PSJzdHJpbmciKXt2YXIgUD1MLnRvTG93ZXJDYXNlKCk7U1tQXSYmKE09UCksQSYmKFNbUF09QSxNPVApO3ZhciBCPUwuc3BsaXQoIi0iKTtpZighTSYmQi5sZW5ndGg+MSlyZXR1cm4gayhCWzBdKX1lbHNle3ZhciBGPUwubmFtZTtTW0ZdPUwsTT1GfXJldHVybiFJJiZNJiYoVD1NKSxNfHwhSSYmVH0sInQiKSxDPW8oZnVuY3Rpb24oayxMKXtpZihFKGspKXJldHVybiBrLmNsb25lKCk7dmFyIEE9dHlwZW9mIEw9PSJvYmplY3QiP0w6e307cmV0dXJuIEEuZGF0ZT1rLEEuYXJncz1hcmd1bWVudHMsbmV3IE8oQSl9LCJPIiksRD1iO0QubD1fLEQuaT1FLEQudz1mdW5jdGlvbihrLEwpe3JldHVybiBDKGsse2xvY2FsZTpMLiRMLHV0YzpMLiR1LHg6TC4keCwkb2Zmc2V0OkwuJG9mZnNldH0pfTt2YXIgTz1mdW5jdGlvbigpe2Z1bmN0aW9uIGsoQSl7dGhpcy4kTD1fKEEubG9jYWxlLG51bGwsITApLHRoaXMucGFyc2UoQSksdGhpcy4keD10aGlzLiR4fHxBLnh8fHt9LHRoaXNbd109ITB9byhrLCJNIik7dmFyIEw9ay5wcm90b3R5cGU7cmV0dXJuIEwucGFyc2U9ZnVuY3Rpb24oQSl7dGhpcy4kZD1mdW5jdGlvbihJKXt2YXIgTT1JLmRhdGUsUD1JLnV0YztpZihNPT09bnVsbClyZXR1cm4gbmV3IERhdGUoTmFOKTtpZihELnUoTSkpcmV0dXJuIG5ldyBEYXRlO2lmKE0gaW5zdGFuY2VvZiBEYXRlKXJldHVybiBuZXcgRGF0ZShNKTtpZih0eXBlb2YgTT09InN0cmluZyImJiEvWiQvaS50ZXN0KE0pKXt2YXIgQj1NLm1hdGNoKGcpO2lmKEIpe3ZhciBGPUJbMl0tMXx8MCx6PShCWzddfHwiMCIpLnN1YnN0cmluZygwLDMpO3JldHVybiBQP25ldyBEYXRlKERhdGUuVVRDKEJbMV0sRixCWzNdfHwxLEJbNF18fDAsQls1XXx8MCxCWzZdfHwwLHopKTpuZXcgRGF0ZShCWzFdLEYsQlszXXx8MSxCWzRdfHwwLEJbNV18fDAsQls2XXx8MCx6KX19cmV0dXJuIG5ldyBEYXRlKE0pfShBKSx0aGlzLmluaXQoKX0sTC5pbml0PWZ1bmN0aW9uKCl7dmFyIEE9dGhpcy4kZDt0aGlzLiR5PUEuZ2V0RnVsbFllYXIoKSx0aGlzLiRNPUEuZ2V0TW9udGgoKSx0aGlzLiREPUEuZ2V0RGF0ZSgpLHRoaXMuJFc9QS5nZXREYXkoKSx0aGlzLiRIPUEuZ2V0SG91cnMoKSx0aGlzLiRtPUEuZ2V0TWludXRlcygpLHRoaXMuJHM9QS5nZXRTZWNvbmRzKCksdGhpcy4kbXM9QS5nZXRNaWxsaXNlY29uZHMoKX0sTC4kdXRpbHM9ZnVuY3Rpb24oKXtyZXR1cm4gRH0sTC5pc1ZhbGlkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGQudG9TdHJpbmcoKSE9PW19LEwuaXNTYW1lPWZ1bmN0aW9uKEEsSSl7dmFyIE09QyhBKTtyZXR1cm4gdGhpcy5zdGFydE9mKEkpPD1NJiZNPD10aGlzLmVuZE9mKEkpfSxMLmlzQWZ0ZXI9ZnVuY3Rpb24oQSxJKXtyZXR1cm4gQyhBKTx0aGlzLnN0YXJ0T2YoSSl9LEwuaXNCZWZvcmU9ZnVuY3Rpb24oQSxJKXtyZXR1cm4gdGhpcy5lbmRPZihJKTxDKEEpfSxMLiRnPWZ1bmN0aW9uKEEsSSxNKXtyZXR1cm4gRC51KEEpP3RoaXNbSV06dGhpcy5zZXQoTSxBKX0sTC51bml4PWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZmxvb3IodGhpcy52YWx1ZU9mKCkvMWUzKX0sTC52YWx1ZU9mPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGQuZ2V0VGltZSgpfSxMLnN0YXJ0T2Y9ZnVuY3Rpb24oQSxJKXt2YXIgTT10aGlzLFA9ISFELnUoSSl8fEksQj1ELnAoQSksRj1vKGZ1bmN0aW9uKFosdWUpe3ZhciBRPUQudyhNLiR1P0RhdGUuVVRDKE0uJHksdWUsWik6bmV3IERhdGUoTS4keSx1ZSxaKSxNKTtyZXR1cm4gUD9ROlEuZW5kT2YobCl9LCJsIiksej1vKGZ1bmN0aW9uKFosdWUpe3JldHVybiBELncoTS50b0RhdGUoKVtaXS5hcHBseShNLnRvRGF0ZSgicyIpLChQP1swLDAsMCwwXTpbMjMsNTksNTksOTk5XSkuc2xpY2UodWUpKSxNKX0sIiQiKSwkPXRoaXMuJFcsVT10aGlzLiRNLEs9dGhpcy4kRCxlZT0ic2V0IisodGhpcy4kdT8iVVRDIjoiIik7c3dpdGNoKEIpe2Nhc2UgZDpyZXR1cm4gUD9GKDEsMCk6RigzMSwxMSk7Y2FzZSBoOnJldHVybiBQP0YoMSxVKTpGKDAsVSsxKTtjYXNlIHU6dmFyIFk9dGhpcy4kbG9jYWxlKCkud2Vla1N0YXJ0fHwwLGNlPSgkPFk/JCs3OiQpLVk7cmV0dXJuIEYoUD9LLWNlOksrKDYtY2UpLFUpO2Nhc2UgbDpjYXNlIHA6cmV0dXJuIHooZWUrIkhvdXJzIiwwKTtjYXNlIHM6cmV0dXJuIHooZWUrIk1pbnV0ZXMiLDEpO2Nhc2UgYTpyZXR1cm4geihlZSsiU2Vjb25kcyIsMik7Y2FzZSBpOnJldHVybiB6KGVlKyJNaWxsaXNlY29uZHMiLDMpO2RlZmF1bHQ6cmV0dXJuIHRoaXMuY2xvbmUoKX19LEwuZW5kT2Y9ZnVuY3Rpb24oQSl7cmV0dXJuIHRoaXMuc3RhcnRPZihBLCExKX0sTC4kc2V0PWZ1bmN0aW9uKEEsSSl7dmFyIE0sUD1ELnAoQSksQj0ic2V0IisodGhpcy4kdT8iVVRDIjoiIiksRj0oTT17fSxNW2xdPUIrIkRhdGUiLE1bcF09QisiRGF0ZSIsTVtoXT1CKyJNb250aCIsTVtkXT1CKyJGdWxsWWVhciIsTVtzXT1CKyJIb3VycyIsTVthXT1CKyJNaW51dGVzIixNW2ldPUIrIlNlY29uZHMiLE1bbl09QisiTWlsbGlzZWNvbmRzIixNKVtQXSx6PVA9PT1sP3RoaXMuJEQrKEktdGhpcy4kVyk6STtpZihQPT09aHx8UD09PWQpe3ZhciAkPXRoaXMuY2xvbmUoKS5zZXQocCwxKTskLiRkW0ZdKHopLCQuaW5pdCgpLHRoaXMuJGQ9JC5zZXQocCxNYXRoLm1pbih0aGlzLiRELCQuZGF5c0luTW9udGgoKSkpLiRkfWVsc2UgRiYmdGhpcy4kZFtGXSh6KTtyZXR1cm4gdGhpcy5pbml0KCksdGhpc30sTC5zZXQ9ZnVuY3Rpb24oQSxJKXtyZXR1cm4gdGhpcy5jbG9uZSgpLiRzZXQoQSxJKX0sTC5nZXQ9ZnVuY3Rpb24oQSl7cmV0dXJuIHRoaXNbRC5wKEEpXSgpfSxMLmFkZD1mdW5jdGlvbihBLEkpe3ZhciBNLFA9dGhpcztBPU51bWJlcihBKTt2YXIgQj1ELnAoSSksRj1vKGZ1bmN0aW9uKFUpe3ZhciBLPUMoUCk7cmV0dXJuIEQudyhLLmRhdGUoSy5kYXRlKCkrTWF0aC5yb3VuZChVKkEpKSxQKX0sInkiKTtpZihCPT09aClyZXR1cm4gdGhpcy5zZXQoaCx0aGlzLiRNK0EpO2lmKEI9PT1kKXJldHVybiB0aGlzLnNldChkLHRoaXMuJHkrQSk7aWYoQj09PWwpcmV0dXJuIEYoMSk7aWYoQj09PXUpcmV0dXJuIEYoNyk7dmFyIHo9KE09e30sTVthXT1lLE1bc109cixNW2ldPXQsTSlbQl18fDEsJD10aGlzLiRkLmdldFRpbWUoKStBKno7cmV0dXJuIEQudygkLHRoaXMpfSxMLnN1YnRyYWN0PWZ1bmN0aW9uKEEsSSl7cmV0dXJuIHRoaXMuYWRkKC0xKkEsSSl9LEwuZm9ybWF0PWZ1bmN0aW9uKEEpe3ZhciBJPXRoaXMsTT10aGlzLiRsb2NhbGUoKTtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIE0uaW52YWxpZERhdGV8fG07dmFyIFA9QXx8IllZWVktTU0tRERUSEg6bW06c3NaIixCPUQueih0aGlzKSxGPXRoaXMuJEgsej10aGlzLiRtLCQ9dGhpcy4kTSxVPU0ud2Vla2RheXMsSz1NLm1vbnRocyxlZT1NLm1lcmlkaWVtLFk9byhmdW5jdGlvbih1ZSxRLGosbmUpe3JldHVybiB1ZSYmKHVlW1FdfHx1ZShJLFApKXx8altRXS5zbGljZSgwLG5lKX0sImgiKSxjZT1vKGZ1bmN0aW9uKHVlKXtyZXR1cm4gRC5zKEYlMTJ8fDEyLHVlLCIwIil9LCJkIiksWj1lZXx8ZnVuY3Rpb24odWUsUSxqKXt2YXIgbmU9dWU8MTI/IkFNIjoiUE0iO3JldHVybiBqP25lLnRvTG93ZXJDYXNlKCk6bmV9O3JldHVybiBQLnJlcGxhY2UoeSxmdW5jdGlvbih1ZSxRKXtyZXR1cm4gUXx8ZnVuY3Rpb24oail7c3dpdGNoKGope2Nhc2UiWVkiOnJldHVybiBTdHJpbmcoSS4keSkuc2xpY2UoLTIpO2Nhc2UiWVlZWSI6cmV0dXJuIEQucyhJLiR5LDQsIjAiKTtjYXNlIk0iOnJldHVybiAkKzE7Y2FzZSJNTSI6cmV0dXJuIEQucygkKzEsMiwiMCIpO2Nhc2UiTU1NIjpyZXR1cm4gWShNLm1vbnRoc1Nob3J0LCQsSywzKTtjYXNlIk1NTU0iOnJldHVybiBZKEssJCk7Y2FzZSJEIjpyZXR1cm4gSS4kRDtjYXNlIkREIjpyZXR1cm4gRC5zKEkuJEQsMiwiMCIpO2Nhc2UiZCI6cmV0dXJuIFN0cmluZyhJLiRXKTtjYXNlImRkIjpyZXR1cm4gWShNLndlZWtkYXlzTWluLEkuJFcsVSwyKTtjYXNlImRkZCI6cmV0dXJuIFkoTS53ZWVrZGF5c1Nob3J0LEkuJFcsVSwzKTtjYXNlImRkZGQiOnJldHVybiBVW0kuJFddO2Nhc2UiSCI6cmV0dXJuIFN0cmluZyhGKTtjYXNlIkhIIjpyZXR1cm4gRC5zKEYsMiwiMCIpO2Nhc2UiaCI6cmV0dXJuIGNlKDEpO2Nhc2UiaGgiOnJldHVybiBjZSgyKTtjYXNlImEiOnJldHVybiBaKEYseiwhMCk7Y2FzZSJBIjpyZXR1cm4gWihGLHosITEpO2Nhc2UibSI6cmV0dXJuIFN0cmluZyh6KTtjYXNlIm1tIjpyZXR1cm4gRC5zKHosMiwiMCIpO2Nhc2UicyI6cmV0dXJuIFN0cmluZyhJLiRzKTtjYXNlInNzIjpyZXR1cm4gRC5zKEkuJHMsMiwiMCIpO2Nhc2UiU1NTIjpyZXR1cm4gRC5zKEkuJG1zLDMsIjAiKTtjYXNlIloiOnJldHVybiBCfXJldHVybiBudWxsfSh1ZSl8fEIucmVwbGFjZSgiOiIsIiIpfSl9LEwudXRjT2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuIDE1Ki1NYXRoLnJvdW5kKHRoaXMuJGQuZ2V0VGltZXpvbmVPZmZzZXQoKS8xNSl9LEwuZGlmZj1mdW5jdGlvbihBLEksTSl7dmFyIFAsQj10aGlzLEY9RC5wKEkpLHo9QyhBKSwkPSh6LnV0Y09mZnNldCgpLXRoaXMudXRjT2Zmc2V0KCkpKmUsVT10aGlzLXosSz1vKGZ1bmN0aW9uKCl7cmV0dXJuIEQubShCLHopfSwiRCIpO3N3aXRjaChGKXtjYXNlIGQ6UD1LKCkvMTI7YnJlYWs7Y2FzZSBoOlA9SygpO2JyZWFrO2Nhc2UgZjpQPUsoKS8zO2JyZWFrO2Nhc2UgdTpQPShVLSQpLzYwNDhlNTticmVhaztjYXNlIGw6UD0oVS0kKS84NjRlNTticmVhaztjYXNlIHM6UD1VL3I7YnJlYWs7Y2FzZSBhOlA9VS9lO2JyZWFrO2Nhc2UgaTpQPVUvdDticmVhaztkZWZhdWx0OlA9VX1yZXR1cm4gTT9QOkQuYShQKX0sTC5kYXlzSW5Nb250aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVuZE9mKGgpLiREfSxMLiRsb2NhbGU9ZnVuY3Rpb24oKXtyZXR1cm4gU1t0aGlzLiRMXX0sTC5sb2NhbGU9ZnVuY3Rpb24oQSxJKXtpZighQSlyZXR1cm4gdGhpcy4kTDt2YXIgTT10aGlzLmNsb25lKCksUD1fKEEsSSwhMCk7cmV0dXJuIFAmJihNLiRMPVApLE19LEwuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gRC53KHRoaXMuJGQsdGhpcyl9LEwudG9EYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBEYXRlKHRoaXMudmFsdWVPZigpKX0sTC50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCk/dGhpcy50b0lTT1N0cmluZygpOm51bGx9LEwudG9JU09TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZC50b0lTT1N0cmluZygpfSxMLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGQudG9VVENTdHJpbmcoKX0sa30oKSxSPU8ucHJvdG90eXBlO3JldHVybiBDLnByb3RvdHlwZT1SLFtbIiRtcyIsbl0sWyIkcyIsaV0sWyIkbSIsYV0sWyIkSCIsc10sWyIkVyIsbF0sWyIkTSIsaF0sWyIkeSIsZF0sWyIkRCIscF1dLmZvckVhY2goZnVuY3Rpb24oayl7UltrWzFdXT1mdW5jdGlvbihMKXtyZXR1cm4gdGhpcy4kZyhMLGtbMF0sa1sxXSl9fSksQy5leHRlbmQ9ZnVuY3Rpb24oayxMKXtyZXR1cm4gay4kaXx8KGsoTCxPLEMpLGsuJGk9ITApLEN9LEMubG9jYWxlPV8sQy5pc0RheWpzPUUsQy51bml4PWZ1bmN0aW9uKGspe3JldHVybiBDKDFlMyprKX0sQy5lbj1TW1RdLEMuTHM9UyxDLnA9e30sQ30pfSk7dmFyIGYkLGl1LFgsRHksa28seXQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtmJD1BYShVNCgpLDEpLGl1PXt0cmFjZTowLGRlYnVnOjEsaW5mbzoyLHdhcm46MyxlcnJvcjo0LGZhdGFsOjV9LFg9e3RyYWNlOm8oKC4uLnQpPT57fSwidHJhY2UiKSxkZWJ1ZzpvKCguLi50KT0+e30sImRlYnVnIiksaW5mbzpvKCguLi50KT0+e30sImluZm8iKSx3YXJuOm8oKC4uLnQpPT57fSwid2FybiIpLGVycm9yOm8oKC4uLnQpPT57fSwiZXJyb3IiKSxmYXRhbDpvKCguLi50KT0+e30sImZhdGFsIil9LER5PW8oZnVuY3Rpb24odD0iZmF0YWwiKXtsZXQgZT1pdS5mYXRhbDt0eXBlb2YgdD09InN0cmluZyI/dC50b0xvd2VyQ2FzZSgpaW4gaXUmJihlPWl1W3RdKTp0eXBlb2YgdD09Im51bWJlciImJihlPXQpLFgudHJhY2U9KCk9Pnt9LFguZGVidWc9KCk9Pnt9LFguaW5mbz0oKT0+e30sWC53YXJuPSgpPT57fSxYLmVycm9yPSgpPT57fSxYLmZhdGFsPSgpPT57fSxlPD1pdS5mYXRhbCYmKFguZmF0YWw9Y29uc29sZS5lcnJvcj9jb25zb2xlLmVycm9yLmJpbmQoY29uc29sZSxrbygiRkFUQUwiKSwiY29sb3I6IG9yYW5nZSIpOmNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwiXHgxQlszNW0iLGtvKCJGQVRBTCIpKSksZTw9aXUuZXJyb3ImJihYLmVycm9yPWNvbnNvbGUuZXJyb3I/Y29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUsa28oIkVSUk9SIiksImNvbG9yOiBvcmFuZ2UiKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIlx4MUJbMzFtIixrbygiRVJST1IiKSkpLGU8PWl1Lndhcm4mJihYLndhcm49Y29uc29sZS53YXJuP2NvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUsa28oIldBUk4iKSwiY29sb3I6IG9yYW5nZSIpOmNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwiXHgxQlszM20iLGtvKCJXQVJOIikpKSxlPD1pdS5pbmZvJiYoWC5pbmZvPWNvbnNvbGUuaW5mbz9jb25zb2xlLmluZm8uYmluZChjb25zb2xlLGtvKCJJTkZPIiksImNvbG9yOiBsaWdodGJsdWUiKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIlx4MUJbMzRtIixrbygiSU5GTyIpKSksZTw9aXUuZGVidWcmJihYLmRlYnVnPWNvbnNvbGUuZGVidWc/Y29uc29sZS5kZWJ1Zy5iaW5kKGNvbnNvbGUsa28oIkRFQlVHIiksImNvbG9yOiBsaWdodGdyZWVuIik6Y29uc29sZS5sb2cuYmluZChjb25zb2xlLCJceDFCWzMybSIsa28oIkRFQlVHIikpKSxlPD1pdS50cmFjZSYmKFgudHJhY2U9Y29uc29sZS5kZWJ1Zz9jb25zb2xlLmRlYnVnLmJpbmQoY29uc29sZSxrbygiVFJBQ0UiKSwiY29sb3I6IGxpZ2h0Z3JlZW4iKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIlx4MUJbMzJtIixrbygiVFJBQ0UiKSkpfSwic2V0TG9nTGV2ZWwiKSxrbz1vKHQ9PmAlYyR7KDAsZiQuZGVmYXVsdCkoKS5mb3JtYXQoInNzLlNTUyIpfSA6ICR7dH0gOiBgLCJmb3JtYXQiKX0pO3ZhciBoYmUsdTAscUMsZCQsSDQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtoYmU9T2JqZWN0LmZyZWV6ZSh7bGVmdDowLHRvcDowLHdpZHRoOjE2LGhlaWdodDoxNn0pLHUwPU9iamVjdC5mcmVlemUoe3JvdGF0ZTowLHZGbGlwOiExLGhGbGlwOiExfSkscUM9T2JqZWN0LmZyZWV6ZSh7Li4uaGJlLC4uLnUwfSksZCQ9T2JqZWN0LmZyZWV6ZSh7Li4ucUMsYm9keToiIixoaWRkZW46ITF9KX0pO3ZhciBmYmUscCQsbSQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtINCgpO2ZiZT1PYmplY3QuZnJlZXplKHt3aWR0aDpudWxsLGhlaWdodDpudWxsfSkscCQ9T2JqZWN0LmZyZWV6ZSh7Li4uZmJlLC4uLnUwfSl9KTt2YXIgWUMsVzQsZyQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtZQz1vKCh0LGUscixuPSIiKT0+e2xldCBpPXQuc3BsaXQoIjoiKTtpZih0LnNsaWNlKDAsMSk9PT0iQCIpe2lmKGkubGVuZ3RoPDJ8fGkubGVuZ3RoPjMpcmV0dXJuIG51bGw7bj1pLnNoaWZ0KCkuc2xpY2UoMSl9aWYoaS5sZW5ndGg+M3x8IWkubGVuZ3RoKXJldHVybiBudWxsO2lmKGkubGVuZ3RoPjEpe2xldCBsPWkucG9wKCksdT1pLnBvcCgpLGg9e3Byb3ZpZGVyOmkubGVuZ3RoPjA/aVswXTpuLHByZWZpeDp1LG5hbWU6bH07cmV0dXJuIGUmJiFXNChoKT9udWxsOmh9bGV0IGE9aVswXSxzPWEuc3BsaXQoIi0iKTtpZihzLmxlbmd0aD4xKXtsZXQgbD17cHJvdmlkZXI6bixwcmVmaXg6cy5zaGlmdCgpLG5hbWU6cy5qb2luKCItIil9O3JldHVybiBlJiYhVzQobCk/bnVsbDpsfWlmKHImJm49PT0iIil7bGV0IGw9e3Byb3ZpZGVyOm4scHJlZml4OiIiLG5hbWU6YX07cmV0dXJuIGUmJiFXNChsLHIpP251bGw6bH1yZXR1cm4gbnVsbH0sInN0cmluZ1RvSWNvbiIpLFc0PW8oKHQsZSk9PnQ/ISEoKGUmJnQucHJlZml4PT09IiJ8fHQucHJlZml4KSYmdC5uYW1lKTohMSwidmFsaWRhdGVJY29uTmFtZSIpfSk7ZnVuY3Rpb24geSQodCxlKXtsZXQgcj17fTshdC5oRmxpcCE9IWUuaEZsaXAmJihyLmhGbGlwPSEwKSwhdC52RmxpcCE9IWUudkZsaXAmJihyLnZGbGlwPSEwKTtsZXQgbj0oKHQucm90YXRlfHwwKSsoZS5yb3RhdGV8fDApKSU0O3JldHVybiBuJiYoci5yb3RhdGU9bikscn12YXIgdiQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKHkkLCJtZXJnZUljb25UcmFuc2Zvcm1hdGlvbnMiKX0pO2Z1bmN0aW9uIFhDKHQsZSl7bGV0IHI9eSQodCxlKTtmb3IobGV0IG4gaW4gZCQpbiBpbiB1MD9uIGluIHQmJiEobiBpbiByKSYmKHJbbl09dTBbbl0pOm4gaW4gZT9yW25dPWVbbl06biBpbiB0JiYocltuXT10W25dKTtyZXR1cm4gcn12YXIgeCQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtINCgpO3YkKCk7byhYQywibWVyZ2VJY29uRGF0YSIpfSk7ZnVuY3Rpb24gYiQodCxlKXtsZXQgcj10Lmljb25zLG49dC5hbGlhc2VzfHxPYmplY3QuY3JlYXRlKG51bGwpLGk9T2JqZWN0LmNyZWF0ZShudWxsKTtmdW5jdGlvbiBhKHMpe2lmKHJbc10pcmV0dXJuIGlbc109W107aWYoIShzIGluIGkpKXtpW3NdPW51bGw7bGV0IGw9bltzXSYmbltzXS5wYXJlbnQsdT1sJiZhKGwpO3UmJihpW3NdPVtsXS5jb25jYXQodSkpfXJldHVybiBpW3NdfXJldHVybiBvKGEsInJlc29sdmUiKSwoZXx8T2JqZWN0LmtleXMocikuY29uY2F0KE9iamVjdC5rZXlzKG4pKSkuZm9yRWFjaChhKSxpfXZhciBUJD1OKCgpPT57InVzZSBzdHJpY3QiO28oYiQsImdldEljb25zVHJlZSIpfSk7ZnVuY3Rpb24gdyQodCxlLHIpe2xldCBuPXQuaWNvbnMsaT10LmFsaWFzZXN8fE9iamVjdC5jcmVhdGUobnVsbCksYT17fTtmdW5jdGlvbiBzKGwpe2E9WEMobltsXXx8aVtsXSxhKX1yZXR1cm4gbyhzLCJwYXJzZSIpLHMoZSksci5mb3JFYWNoKHMpLFhDKHQsYSl9ZnVuY3Rpb24gakModCxlKXtpZih0Lmljb25zW2VdKXJldHVybiB3JCh0LGUsW10pO2xldCByPWIkKHQsW2VdKVtlXTtyZXR1cm4gcj93JCh0LGUscik6bnVsbH12YXIgayQ9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt4JCgpO1QkKCk7byh3JCwiaW50ZXJuYWxHZXRJY29uRGF0YSIpO28oakMsImdldEljb25EYXRhIil9KTtmdW5jdGlvbiBLQyh0LGUscil7aWYoZT09PTEpcmV0dXJuIHQ7aWYocj1yfHwxMDAsdHlwZW9mIHQ9PSJudW1iZXIiKXJldHVybiBNYXRoLmNlaWwodCplKnIpL3I7aWYodHlwZW9mIHQhPSJzdHJpbmciKXJldHVybiB0O2xldCBuPXQuc3BsaXQoZGJlKTtpZihuPT09bnVsbHx8IW4ubGVuZ3RoKXJldHVybiB0O2xldCBpPVtdLGE9bi5zaGlmdCgpLHM9cGJlLnRlc3QoYSk7Zm9yKDs7KXtpZihzKXtsZXQgbD1wYXJzZUZsb2F0KGEpO2lzTmFOKGwpP2kucHVzaChhKTppLnB1c2goTWF0aC5jZWlsKGwqZSpyKS9yKX1lbHNlIGkucHVzaChhKTtpZihhPW4uc2hpZnQoKSxhPT09dm9pZCAwKXJldHVybiBpLmpvaW4oIiIpO3M9IXN9fXZhciBkYmUscGJlLEUkPU4oKCk9PnsidXNlIHN0cmljdCI7ZGJlPS8oLT9bMC05Ll0qWzAtOV0rWzAtOS5dKikvZyxwYmU9L14tP1swLTkuXSpbMC05XStbMC05Ll0qJC9nO28oS0MsImNhbGN1bGF0ZVNpemUiKX0pO2Z1bmN0aW9uIG1iZSh0LGU9ImRlZnMiKXtsZXQgcj0iIixuPXQuaW5kZXhPZigiPCIrZSk7Zm9yKDtuPj0wOyl7bGV0IGk9dC5pbmRleE9mKCI+IixuKSxhPXQuaW5kZXhPZigiPC8iK2UpO2lmKGk9PT0tMXx8YT09PS0xKWJyZWFrO2xldCBzPXQuaW5kZXhPZigiPiIsYSk7aWYocz09PS0xKWJyZWFrO3IrPXQuc2xpY2UoaSsxLGEpLnRyaW0oKSx0PXQuc2xpY2UoMCxuKS50cmltKCkrdC5zbGljZShzKzEpfXJldHVybntkZWZzOnIsY29udGVudDp0fX1mdW5jdGlvbiBnYmUodCxlKXtyZXR1cm4gdD8iPGRlZnM+Iit0KyI8L2RlZnM+IitlOmV9ZnVuY3Rpb24gUyQodCxlLHIpe2xldCBuPW1iZSh0KTtyZXR1cm4gZ2JlKG4uZGVmcyxlK24uY29udGVudCtyKX12YXIgQyQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKG1iZSwic3BsaXRTVkdEZWZzIik7byhnYmUsIm1lcmdlRGVmc0FuZENvbnRlbnQiKTtvKFMkLCJ3cmFwU1ZHQ29udGVudCIpfSk7ZnVuY3Rpb24gUUModCxlKXtsZXQgcj17Li4ucUMsLi4udH0sbj17Li4ucCQsLi4uZX0saT17bGVmdDpyLmxlZnQsdG9wOnIudG9wLHdpZHRoOnIud2lkdGgsaGVpZ2h0OnIuaGVpZ2h0fSxhPXIuYm9keTtbcixuXS5mb3JFYWNoKHk9PntsZXQgdj1bXSx4PXkuaEZsaXAsYj15LnZGbGlwLFQ9eS5yb3RhdGU7eD9iP1QrPTI6KHYucHVzaCgidHJhbnNsYXRlKCIrKGkud2lkdGgraS5sZWZ0KS50b1N0cmluZygpKyIgIisoMC1pLnRvcCkudG9TdHJpbmcoKSsiKSIpLHYucHVzaCgic2NhbGUoLTEgMSkiKSxpLnRvcD1pLmxlZnQ9MCk6YiYmKHYucHVzaCgidHJhbnNsYXRlKCIrKDAtaS5sZWZ0KS50b1N0cmluZygpKyIgIisoaS5oZWlnaHQraS50b3ApLnRvU3RyaW5nKCkrIikiKSx2LnB1c2goInNjYWxlKDEgLTEpIiksaS50b3A9aS5sZWZ0PTApO2xldCBTO3N3aXRjaChUPDAmJihULT1NYXRoLmZsb29yKFQvNCkqNCksVD1UJTQsVCl7Y2FzZSAxOlM9aS5oZWlnaHQvMitpLnRvcCx2LnVuc2hpZnQoInJvdGF0ZSg5MCAiK1MudG9TdHJpbmcoKSsiICIrUy50b1N0cmluZygpKyIpIik7YnJlYWs7Y2FzZSAyOnYudW5zaGlmdCgicm90YXRlKDE4MCAiKyhpLndpZHRoLzIraS5sZWZ0KS50b1N0cmluZygpKyIgIisoaS5oZWlnaHQvMitpLnRvcCkudG9TdHJpbmcoKSsiKSIpO2JyZWFrO2Nhc2UgMzpTPWkud2lkdGgvMitpLmxlZnQsdi51bnNoaWZ0KCJyb3RhdGUoLTkwICIrUy50b1N0cmluZygpKyIgIitTLnRvU3RyaW5nKCkrIikiKTticmVha31UJTI9PT0xJiYoaS5sZWZ0IT09aS50b3AmJihTPWkubGVmdCxpLmxlZnQ9aS50b3AsaS50b3A9UyksaS53aWR0aCE9PWkuaGVpZ2h0JiYoUz1pLndpZHRoLGkud2lkdGg9aS5oZWlnaHQsaS5oZWlnaHQ9UykpLHYubGVuZ3RoJiYoYT1TJChhLCc8ZyB0cmFuc2Zvcm09Iicrdi5qb2luKCIgIikrJyI+JywiPC9nPiIpKX0pO2xldCBzPW4ud2lkdGgsbD1uLmhlaWdodCx1PWkud2lkdGgsaD1pLmhlaWdodCxmLGQ7cz09PW51bGw/KGQ9bD09PW51bGw/IjFlbSI6bD09PSJhdXRvIj9oOmwsZj1LQyhkLHUvaCkpOihmPXM9PT0iYXV0byI/dTpzLGQ9bD09PW51bGw/S0MoZixoL3UpOmw9PT0iYXV0byI/aDpsKTtsZXQgcD17fSxtPW8oKHksdik9Pnt5YmUodil8fChwW3ldPXYudG9TdHJpbmcoKSl9LCJzZXRBdHRyIik7bSgid2lkdGgiLGYpLG0oImhlaWdodCIsZCk7bGV0IGc9W2kubGVmdCxpLnRvcCx1LGhdO3JldHVybiBwLnZpZXdCb3g9Zy5qb2luKCIgIikse2F0dHJpYnV0ZXM6cCx2aWV3Qm94OmcsYm9keTphfX12YXIgeWJlLEEkPU4oKCk9PnsidXNlIHN0cmljdCI7SDQoKTttJCgpO0UkKCk7QyQoKTt5YmU9byh0PT50PT09InVuc2V0Inx8dD09PSJ1bmRlZmluZWQifHx0PT09Im5vbmUiLCJpc1Vuc2V0S2V5d29yZCIpO28oUUMsImljb25Ub1NWRyIpfSk7ZnVuY3Rpb24gWkModCxlPXhiZSl7bGV0IHI9W10sbjtmb3IoO249dmJlLmV4ZWModCk7KXIucHVzaChuWzFdKTtpZighci5sZW5ndGgpcmV0dXJuIHQ7bGV0IGk9InN1ZmZpeCIrKE1hdGgucmFuZG9tKCkqMTY3NzcyMTZ8RGF0ZS5ub3coKSkudG9TdHJpbmcoMTYpO3JldHVybiByLmZvckVhY2goYT0+e2xldCBzPXR5cGVvZiBlPT0iZnVuY3Rpb24iP2UoYSk6ZSsoYmJlKyspLnRvU3RyaW5nKCksbD1hLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXVxcXS9nLCJcXCQmIik7dD10LnJlcGxhY2UobmV3IFJlZ0V4cCgnKFsjOyJdKSgnK2wrJykoWyIpXXxcXC5bYS16XSknLCJnIiksIiQxIitzK2krIiQzIil9KSx0PXQucmVwbGFjZShuZXcgUmVnRXhwKGksImciKSwiIiksdH12YXIgdmJlLHhiZSxiYmUsXyQ9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt2YmU9L1xzaWQ9IihcUyspIi9nLHhiZT0iSWNvbmlmeUlkIitEYXRlLm5vdygpLnRvU3RyaW5nKDE2KSsoTWF0aC5yYW5kb20oKSoxNjc3NzIxNnwwKS50b1N0cmluZygxNiksYmJlPTA7byhaQywicmVwbGFjZUlEcyIpfSk7ZnVuY3Rpb24gSkModCxlKXtsZXQgcj10LmluZGV4T2YoInhsaW5rOiIpPT09LTE/IiI6JyB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayInO2ZvcihsZXQgbiBpbiBlKXIrPSIgIituKyc9IicrZVtuXSsnIic7cmV0dXJuJzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIicrcisiPiIrdCsiPC9zdmc+In12YXIgRCQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKEpDLCJpY29uVG9IVE1MIil9KTt2YXIgUiQ9UGkoKElhdCxMJCk9PnsidXNlIHN0cmljdCI7dmFyIGgwPTFlMyxmMD1oMCo2MCxkMD1mMCo2MCxlZD1kMCoyNCxUYmU9ZWQqNyx3YmU9ZWQqMzY1LjI1O0wkLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlPWV8fHt9O3ZhciByPXR5cGVvZiB0O2lmKHI9PT0ic3RyaW5nIiYmdC5sZW5ndGg+MClyZXR1cm4ga2JlKHQpO2lmKHI9PT0ibnVtYmVyIiYmaXNGaW5pdGUodCkpcmV0dXJuIGUubG9uZz9TYmUodCk6RWJlKHQpO3Rocm93IG5ldyBFcnJvcigidmFsIGlzIG5vdCBhIG5vbi1lbXB0eSBzdHJpbmcgb3IgYSB2YWxpZCBudW1iZXIuIHZhbD0iK0pTT04uc3RyaW5naWZ5KHQpKX07ZnVuY3Rpb24ga2JlKHQpe2lmKHQ9U3RyaW5nKHQpLCEodC5sZW5ndGg+MTAwKSl7dmFyIGU9L14oLT8oPzpcZCspP1wuP1xkKykgKihtaWxsaXNlY29uZHM/fG1zZWNzP3xtc3xzZWNvbmRzP3xzZWNzP3xzfG1pbnV0ZXM/fG1pbnM/fG18aG91cnM/fGhycz98aHxkYXlzP3xkfHdlZWtzP3x3fHllYXJzP3x5cnM/fHkpPyQvaS5leGVjKHQpO2lmKGUpe3ZhciByPXBhcnNlRmxvYXQoZVsxXSksbj0oZVsyXXx8Im1zIikudG9Mb3dlckNhc2UoKTtzd2l0Y2gobil7Y2FzZSJ5ZWFycyI6Y2FzZSJ5ZWFyIjpjYXNlInlycyI6Y2FzZSJ5ciI6Y2FzZSJ5IjpyZXR1cm4gcip3YmU7Y2FzZSJ3ZWVrcyI6Y2FzZSJ3ZWVrIjpjYXNlInciOnJldHVybiByKlRiZTtjYXNlImRheXMiOmNhc2UiZGF5IjpjYXNlImQiOnJldHVybiByKmVkO2Nhc2UiaG91cnMiOmNhc2UiaG91ciI6Y2FzZSJocnMiOmNhc2UiaHIiOmNhc2UiaCI6cmV0dXJuIHIqZDA7Y2FzZSJtaW51dGVzIjpjYXNlIm1pbnV0ZSI6Y2FzZSJtaW5zIjpjYXNlIm1pbiI6Y2FzZSJtIjpyZXR1cm4gcipmMDtjYXNlInNlY29uZHMiOmNhc2Uic2Vjb25kIjpjYXNlInNlY3MiOmNhc2Uic2VjIjpjYXNlInMiOnJldHVybiByKmgwO2Nhc2UibWlsbGlzZWNvbmRzIjpjYXNlIm1pbGxpc2Vjb25kIjpjYXNlIm1zZWNzIjpjYXNlIm1zZWMiOmNhc2UibXMiOnJldHVybiByO2RlZmF1bHQ6cmV0dXJufX19fW8oa2JlLCJwYXJzZSIpO2Z1bmN0aW9uIEViZSh0KXt2YXIgZT1NYXRoLmFicyh0KTtyZXR1cm4gZT49ZWQ/TWF0aC5yb3VuZCh0L2VkKSsiZCI6ZT49ZDA/TWF0aC5yb3VuZCh0L2QwKSsiaCI6ZT49ZjA/TWF0aC5yb3VuZCh0L2YwKSsibSI6ZT49aDA/TWF0aC5yb3VuZCh0L2gwKSsicyI6dCsibXMifW8oRWJlLCJmbXRTaG9ydCIpO2Z1bmN0aW9uIFNiZSh0KXt2YXIgZT1NYXRoLmFicyh0KTtyZXR1cm4gZT49ZWQ/cTQodCxlLGVkLCJkYXkiKTplPj1kMD9xNCh0LGUsZDAsImhvdXIiKTplPj1mMD9xNCh0LGUsZjAsIm1pbnV0ZSIpOmU+PWgwP3E0KHQsZSxoMCwic2Vjb25kIik6dCsiIG1zIn1vKFNiZSwiZm10TG9uZyIpO2Z1bmN0aW9uIHE0KHQsZSxyLG4pe3ZhciBpPWU+PXIqMS41O3JldHVybiBNYXRoLnJvdW5kKHQvcikrIiAiK24rKGk/InMiOiIiKX1vKHE0LCJwbHVyYWwiKX0pO3ZhciBNJD1QaSgoUGF0LE4kKT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBDYmUodCl7ci5kZWJ1Zz1yLHIuZGVmYXVsdD1yLHIuY29lcmNlPXUsci5kaXNhYmxlPXMsci5lbmFibGU9aSxyLmVuYWJsZWQ9bCxyLmh1bWFuaXplPVIkKCksci5kZXN0cm95PWgsT2JqZWN0LmtleXModCkuZm9yRWFjaChmPT57cltmXT10W2ZdfSksci5uYW1lcz1bXSxyLnNraXBzPVtdLHIuZm9ybWF0dGVycz17fTtmdW5jdGlvbiBlKGYpe2xldCBkPTA7Zm9yKGxldCBwPTA7cDxmLmxlbmd0aDtwKyspZD0oZDw8NSktZCtmLmNoYXJDb2RlQXQocCksZHw9MDtyZXR1cm4gci5jb2xvcnNbTWF0aC5hYnMoZCklci5jb2xvcnMubGVuZ3RoXX1vKGUsInNlbGVjdENvbG9yIiksci5zZWxlY3RDb2xvcj1lO2Z1bmN0aW9uIHIoZil7bGV0IGQscD1udWxsLG0sZztmdW5jdGlvbiB5KC4uLnYpe2lmKCF5LmVuYWJsZWQpcmV0dXJuO2xldCB4PXksYj1OdW1iZXIobmV3IERhdGUpLFQ9Yi0oZHx8Yik7eC5kaWZmPVQseC5wcmV2PWQseC5jdXJyPWIsZD1iLHZbMF09ci5jb2VyY2UodlswXSksdHlwZW9mIHZbMF0hPSJzdHJpbmciJiZ2LnVuc2hpZnQoIiVPIik7bGV0IFM9MDt2WzBdPXZbMF0ucmVwbGFjZSgvJShbYS16QS1aJV0pL2csKEUsXyk9PntpZihFPT09IiUlIilyZXR1cm4iJSI7UysrO2xldCBDPXIuZm9ybWF0dGVyc1tfXTtpZih0eXBlb2YgQz09ImZ1bmN0aW9uIil7bGV0IEQ9dltTXTtFPUMuY2FsbCh4LEQpLHYuc3BsaWNlKFMsMSksUy0tfXJldHVybiBFfSksci5mb3JtYXRBcmdzLmNhbGwoeCx2KSwoeC5sb2d8fHIubG9nKS5hcHBseSh4LHYpfXJldHVybiBvKHksImRlYnVnIikseS5uYW1lc3BhY2U9Zix5LnVzZUNvbG9ycz1yLnVzZUNvbG9ycygpLHkuY29sb3I9ci5zZWxlY3RDb2xvcihmKSx5LmV4dGVuZD1uLHkuZGVzdHJveT1yLmRlc3Ryb3ksT2JqZWN0LmRlZmluZVByb3BlcnR5KHksImVuYWJsZWQiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSxnZXQ6bygoKT0+cCE9PW51bGw/cDoobSE9PXIubmFtZXNwYWNlcyYmKG09ci5uYW1lc3BhY2VzLGc9ci5lbmFibGVkKGYpKSxnKSwiZ2V0Iiksc2V0Om8odj0+e3A9dn0sInNldCIpfSksdHlwZW9mIHIuaW5pdD09ImZ1bmN0aW9uIiYmci5pbml0KHkpLHl9byhyLCJjcmVhdGVEZWJ1ZyIpO2Z1bmN0aW9uIG4oZixkKXtsZXQgcD1yKHRoaXMubmFtZXNwYWNlKyh0eXBlb2YgZD4idSI/IjoiOmQpK2YpO3JldHVybiBwLmxvZz10aGlzLmxvZyxwfW8obiwiZXh0ZW5kIik7ZnVuY3Rpb24gaShmKXtyLnNhdmUoZiksci5uYW1lc3BhY2VzPWYsci5uYW1lcz1bXSxyLnNraXBzPVtdO2xldCBkPSh0eXBlb2YgZj09InN0cmluZyI/ZjoiIikudHJpbSgpLnJlcGxhY2UoIiAiLCIsIikuc3BsaXQoIiwiKS5maWx0ZXIoQm9vbGVhbik7Zm9yKGxldCBwIG9mIGQpcFswXT09PSItIj9yLnNraXBzLnB1c2gocC5zbGljZSgxKSk6ci5uYW1lcy5wdXNoKHApfW8oaSwiZW5hYmxlIik7ZnVuY3Rpb24gYShmLGQpe2xldCBwPTAsbT0wLGc9LTEseT0wO2Zvcig7cDxmLmxlbmd0aDspaWYobTxkLmxlbmd0aCYmKGRbbV09PT1mW3BdfHxkW21dPT09IioiKSlkW21dPT09IioiPyhnPW0seT1wLG0rKyk6KHArKyxtKyspO2Vsc2UgaWYoZyE9PS0xKW09ZysxLHkrKyxwPXk7ZWxzZSByZXR1cm4hMTtmb3IoO208ZC5sZW5ndGgmJmRbbV09PT0iKiI7KW0rKztyZXR1cm4gbT09PWQubGVuZ3RofW8oYSwibWF0Y2hlc1RlbXBsYXRlIik7ZnVuY3Rpb24gcygpe2xldCBmPVsuLi5yLm5hbWVzLC4uLnIuc2tpcHMubWFwKGQ9PiItIitkKV0uam9pbigiLCIpO3JldHVybiByLmVuYWJsZSgiIiksZn1vKHMsImRpc2FibGUiKTtmdW5jdGlvbiBsKGYpe2ZvcihsZXQgZCBvZiByLnNraXBzKWlmKGEoZixkKSlyZXR1cm4hMTtmb3IobGV0IGQgb2Ygci5uYW1lcylpZihhKGYsZCkpcmV0dXJuITA7cmV0dXJuITF9byhsLCJlbmFibGVkIik7ZnVuY3Rpb24gdShmKXtyZXR1cm4gZiBpbnN0YW5jZW9mIEVycm9yP2Yuc3RhY2t8fGYubWVzc2FnZTpmfW8odSwiY29lcmNlIik7ZnVuY3Rpb24gaCgpe2NvbnNvbGUud2FybigiSW5zdGFuY2UgbWV0aG9kIGBkZWJ1Zy5kZXN0cm95KClgIGlzIGRlcHJlY2F0ZWQgYW5kIG5vIGxvbmdlciBkb2VzIGFueXRoaW5nLiBJdCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiBgZGVidWdgLiIpfXJldHVybiBvKGgsImRlc3Ryb3kiKSxyLmVuYWJsZShyLmxvYWQoKSkscn1vKENiZSwic2V0dXAiKTtOJC5leHBvcnRzPUNiZX0pO3ZhciBJJD1QaSgoanMsWTQpPT57InVzZSBzdHJpY3QiO2pzLmZvcm1hdEFyZ3M9X2JlO2pzLnNhdmU9RGJlO2pzLmxvYWQ9TGJlO2pzLnVzZUNvbG9ycz1BYmU7anMuc3RvcmFnZT1SYmUoKTtqcy5kZXN0cm95PSgoKT0+e2xldCB0PSExO3JldHVybigpPT57dHx8KHQ9ITAsY29uc29sZS53YXJuKCJJbnN0YW5jZSBtZXRob2QgYGRlYnVnLmRlc3Ryb3koKWAgaXMgZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGRvZXMgYW55dGhpbmcuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIGBkZWJ1Z2AuIikpfX0pKCk7anMuY29sb3JzPVsiIzAwMDBDQyIsIiMwMDAwRkYiLCIjMDAzM0NDIiwiIzAwMzNGRiIsIiMwMDY2Q0MiLCIjMDA2NkZGIiwiIzAwOTlDQyIsIiMwMDk5RkYiLCIjMDBDQzAwIiwiIzAwQ0MzMyIsIiMwMENDNjYiLCIjMDBDQzk5IiwiIzAwQ0NDQyIsIiMwMENDRkYiLCIjMzMwMENDIiwiIzMzMDBGRiIsIiMzMzMzQ0MiLCIjMzMzM0ZGIiwiIzMzNjZDQyIsIiMzMzY2RkYiLCIjMzM5OUNDIiwiIzMzOTlGRiIsIiMzM0NDMDAiLCIjMzNDQzMzIiwiIzMzQ0M2NiIsIiMzM0NDOTkiLCIjMzNDQ0NDIiwiIzMzQ0NGRiIsIiM2NjAwQ0MiLCIjNjYwMEZGIiwiIzY2MzNDQyIsIiM2NjMzRkYiLCIjNjZDQzAwIiwiIzY2Q0MzMyIsIiM5OTAwQ0MiLCIjOTkwMEZGIiwiIzk5MzNDQyIsIiM5OTMzRkYiLCIjOTlDQzAwIiwiIzk5Q0MzMyIsIiNDQzAwMDAiLCIjQ0MwMDMzIiwiI0NDMDA2NiIsIiNDQzAwOTkiLCIjQ0MwMENDIiwiI0NDMDBGRiIsIiNDQzMzMDAiLCIjQ0MzMzMzIiwiI0NDMzM2NiIsIiNDQzMzOTkiLCIjQ0MzM0NDIiwiI0NDMzNGRiIsIiNDQzY2MDAiLCIjQ0M2NjMzIiwiI0NDOTkwMCIsIiNDQzk5MzMiLCIjQ0NDQzAwIiwiI0NDQ0MzMyIsIiNGRjAwMDAiLCIjRkYwMDMzIiwiI0ZGMDA2NiIsIiNGRjAwOTkiLCIjRkYwMENDIiwiI0ZGMDBGRiIsIiNGRjMzMDAiLCIjRkYzMzMzIiwiI0ZGMzM2NiIsIiNGRjMzOTkiLCIjRkYzM0NDIiwiI0ZGMzNGRiIsIiNGRjY2MDAiLCIjRkY2NjMzIiwiI0ZGOTkwMCIsIiNGRjk5MzMiLCIjRkZDQzAwIiwiI0ZGQ0MzMyJdO2Z1bmN0aW9uIEFiZSgpe2lmKHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cucHJvY2VzcyYmKHdpbmRvdy5wcm9jZXNzLnR5cGU9PT0icmVuZGVyZXIifHx3aW5kb3cucHJvY2Vzcy5fX253anMpKXJldHVybiEwO2lmKHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3IudXNlckFnZW50JiZuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goLyhlZGdlfHRyaWRlbnQpXC8oXGQrKS8pKXJldHVybiExO2xldCB0O3JldHVybiB0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQmJmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSYmZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLldlYmtpdEFwcGVhcmFuY2V8fHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuY29uc29sZSYmKHdpbmRvdy5jb25zb2xlLmZpcmVidWd8fHdpbmRvdy5jb25zb2xlLmV4Y2VwdGlvbiYmd2luZG93LmNvbnNvbGUudGFibGUpfHx0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLnVzZXJBZ2VudCYmKHQ9bmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC9maXJlZm94XC8oXGQrKS8pKSYmcGFyc2VJbnQodFsxXSwxMCk+PTMxfHx0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLnVzZXJBZ2VudCYmbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC9hcHBsZXdlYmtpdFwvKFxkKykvKX1vKEFiZSwidXNlQ29sb3JzIik7ZnVuY3Rpb24gX2JlKHQpe2lmKHRbMF09KHRoaXMudXNlQ29sb3JzPyIlYyI6IiIpK3RoaXMubmFtZXNwYWNlKyh0aGlzLnVzZUNvbG9ycz8iICVjIjoiICIpK3RbMF0rKHRoaXMudXNlQ29sb3JzPyIlYyAiOiIgIikrIisiK1k0LmV4cG9ydHMuaHVtYW5pemUodGhpcy5kaWZmKSwhdGhpcy51c2VDb2xvcnMpcmV0dXJuO2xldCBlPSJjb2xvcjogIit0aGlzLmNvbG9yO3Quc3BsaWNlKDEsMCxlLCJjb2xvcjogaW5oZXJpdCIpO2xldCByPTAsbj0wO3RbMF0ucmVwbGFjZSgvJVthLXpBLVolXS9nLGk9PntpIT09IiUlIiYmKHIrKyxpPT09IiVjIiYmKG49cikpfSksdC5zcGxpY2UobiwwLGUpfW8oX2JlLCJmb3JtYXRBcmdzIik7anMubG9nPWNvbnNvbGUuZGVidWd8fGNvbnNvbGUubG9nfHwoKCk9Pnt9KTtmdW5jdGlvbiBEYmUodCl7dHJ5e3Q/anMuc3RvcmFnZS5zZXRJdGVtKCJkZWJ1ZyIsdCk6anMuc3RvcmFnZS5yZW1vdmVJdGVtKCJkZWJ1ZyIpfWNhdGNoe319byhEYmUsInNhdmUiKTtmdW5jdGlvbiBMYmUoKXtsZXQgdDt0cnl7dD1qcy5zdG9yYWdlLmdldEl0ZW0oImRlYnVnIil9Y2F0Y2h7fXJldHVybiF0JiZ0eXBlb2YgcHJvY2VzczwidSImJiJlbnYiaW4gcHJvY2VzcyYmKHQ9cHJvY2Vzcy5lbnYuREVCVUcpLHR9byhMYmUsImxvYWQiKTtmdW5jdGlvbiBSYmUoKXt0cnl7cmV0dXJuIGxvY2FsU3RvcmFnZX1jYXRjaHt9fW8oUmJlLCJsb2NhbHN0b3JhZ2UiKTtZNC5leHBvcnRzPU0kKCkoanMpO3Zhcntmb3JtYXR0ZXJzOk5iZX09WTQuZXhwb3J0cztOYmUuaj1mdW5jdGlvbih0KXt0cnl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpfWNhdGNoKGUpe3JldHVybiJbVW5leHBlY3RlZEpTT05QYXJzZUVycm9yXTogIitlLm1lc3NhZ2V9fX0pO3ZhciB6YXQsTyQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtnJCgpO2skKCk7QSQoKTtfJCgpO0QkKCk7emF0PUFhKEkkKCksMSl9KTt2YXIgdDcsZTcsUCQsWDQsQiQsRiQsRXMsamw9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt5dCgpO08kKCk7dDc9e2JvZHk6JzxnPjxyZWN0IHdpZHRoPSI4MCIgaGVpZ2h0PSI4MCIgc3R5bGU9ImZpbGw6ICMwODdlYmY7IHN0cm9rZS13aWR0aDogMHB4OyIvPjx0ZXh0IHRyYW5zZm9ybT0idHJhbnNsYXRlKDIxLjE2IDY0LjY3KSIgc3R5bGU9ImZpbGw6ICNmZmY7IGZvbnQtZmFtaWx5OiBBcmlhbE1ULCBBcmlhbDsgZm9udC1zaXplOiA2Ny43NXB4OyI+PHRzcGFuIHg9IjAiIHk9IjAiPj88L3RzcGFuPjwvdGV4dD48L2c+JyxoZWlnaHQ6ODAsd2lkdGg6ODB9LGU3PW5ldyBNYXAsUCQ9bmV3IE1hcCxYND1vKHQ9Pntmb3IobGV0IGUgb2YgdCl7aWYoIWUubmFtZSl0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaWNvbiBsb2FkZXIuIE11c3QgaGF2ZSBhICJuYW1lIiBwcm9wZXJ0eSB3aXRoIG5vbi1lbXB0eSBzdHJpbmcgdmFsdWUuJyk7aWYoWC5kZWJ1ZygiUmVnaXN0ZXJpbmcgaWNvbiBwYWNrOiIsZS5uYW1lKSwibG9hZGVyImluIGUpUCQuc2V0KGUubmFtZSxlLmxvYWRlcik7ZWxzZSBpZigiaWNvbnMiaW4gZSllNy5zZXQoZS5uYW1lLGUuaWNvbnMpO2Vsc2UgdGhyb3cgWC5lcnJvcigiSW52YWxpZCBpY29uIGxvYWRlcjoiLGUpLG5ldyBFcnJvcignSW52YWxpZCBpY29uIGxvYWRlci4gTXVzdCBoYXZlIGVpdGhlciAiaWNvbnMiIG9yICJsb2FkZXIiIHByb3BlcnR5LicpfX0sInJlZ2lzdGVySWNvblBhY2tzIiksQiQ9byhhc3luYyh0LGUpPT57bGV0IHI9WUModCwhMCxlIT09dm9pZCAwKTtpZighcil0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgaWNvbiBuYW1lOiAke3R9YCk7bGV0IG49ci5wcmVmaXh8fGU7aWYoIW4pdGhyb3cgbmV3IEVycm9yKGBJY29uIG5hbWUgbXVzdCBjb250YWluIGEgcHJlZml4OiAke3R9YCk7bGV0IGk9ZTcuZ2V0KG4pO2lmKCFpKXtsZXQgcz1QJC5nZXQobik7aWYoIXMpdGhyb3cgbmV3IEVycm9yKGBJY29uIHNldCBub3QgZm91bmQ6ICR7ci5wcmVmaXh9YCk7dHJ5e2k9ey4uLmF3YWl0IHMoKSxwcmVmaXg6bn0sZTcuc2V0KG4saSl9Y2F0Y2gobCl7dGhyb3cgWC5lcnJvcihsKSxuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2FkIGljb24gc2V0OiAke3IucHJlZml4fWApfX1sZXQgYT1qQyhpLHIubmFtZSk7aWYoIWEpdGhyb3cgbmV3IEVycm9yKGBJY29uIG5vdCBmb3VuZDogJHt0fWApO3JldHVybiBhfSwiZ2V0UmVnaXN0ZXJlZEljb25EYXRhIiksRiQ9byhhc3luYyB0PT57dHJ5e3JldHVybiBhd2FpdCBCJCh0KSwhMH1jYXRjaHtyZXR1cm4hMX19LCJpc0ljb25BdmFpbGFibGUiKSxFcz1vKGFzeW5jKHQsZSxyKT0+e2xldCBuO3RyeXtuPWF3YWl0IEIkKHQsZT8uZmFsbGJhY2tQcmVmaXgpfWNhdGNoKHMpe1guZXJyb3Iocyksbj10N31sZXQgaT1RQyhuLGUpO3JldHVybiBKQyhaQyhpLmJvZHkpLHsuLi5pLmF0dHJpYnV0ZXMsLi4ucn0pfSwiZ2V0SWNvblNWRyIpfSk7ZnVuY3Rpb24gajQodCl7Zm9yKHZhciBlPVtdLHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKWVbci0xXT1hcmd1bWVudHNbcl07dmFyIG49QXJyYXkuZnJvbSh0eXBlb2YgdD09InN0cmluZyI/W3RdOnQpO25bbi5sZW5ndGgtMV09bltuLmxlbmd0aC0xXS5yZXBsYWNlKC9ccj9cbihbXHQgXSopJC8sIiIpO3ZhciBpPW4ucmVkdWNlKGZ1bmN0aW9uKGwsdSl7dmFyIGg9dS5tYXRjaCgvXG4oW1x0IF0rfCg/IVxzKS4pL2cpO3JldHVybiBoP2wuY29uY2F0KGgubWFwKGZ1bmN0aW9uKGYpe3ZhciBkLHA7cmV0dXJuKHA9KGQ9Zi5tYXRjaCgvW1x0IF0vZykpPT09bnVsbHx8ZD09PXZvaWQgMD92b2lkIDA6ZC5sZW5ndGgpIT09bnVsbCYmcCE9PXZvaWQgMD9wOjB9KSk6bH0sW10pO2lmKGkubGVuZ3RoKXt2YXIgYT1uZXcgUmVnRXhwKGAKWwkgXXtgK01hdGgubWluLmFwcGx5KE1hdGgsaSkrIn0iLCJnIik7bj1uLm1hcChmdW5jdGlvbihsKXtyZXR1cm4gbC5yZXBsYWNlKGEsYApgKX0pfW5bMF09blswXS5yZXBsYWNlKC9eXHI/XG4vLCIiKTt2YXIgcz1uWzBdO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24obCx1KXt2YXIgaD1zLm1hdGNoKC8oPzpefFxuKSggKikkLyksZj1oP2hbMV06IiIsZD1sO3R5cGVvZiBsPT0ic3RyaW5nIiYmbC5pbmNsdWRlcyhgCmApJiYoZD1TdHJpbmcobCkuc3BsaXQoYApgKS5tYXAoZnVuY3Rpb24ocCxtKXtyZXR1cm4gbT09PTA/cDoiIitmK3B9KS5qb2luKGAKYCkpLHMrPWQrblt1KzFdfSksc312YXIgcjc9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKGo0LCJkZWRlbnQiKX0pO3ZhciBLNCx0ZCwkJCxRND1OKCgpPT57InVzZSBzdHJpY3QiO0s0PS9eLXszfVxzKltcblxyXSguKj8pW1xuXHJdLXszfVxzKltcblxyXSsvcyx0ZD0vJXsyfXtccyooPzooXHcrKVxzKjp8KFx3KykpXHMqKD86KFx3Kyl8KCg/Oig/IX0lezJ9KS58XHI/XG4pKikpP1xzKig/On0lezJ9KT8vZ2ksJCQ9L1xzKiUlLipcbi9nbX0pO3ZhciBwMCxuNz1OKCgpPT57InVzZSBzdHJpY3QiO3AwPWNsYXNzIGV4dGVuZHMgRXJyb3J7c3RhdGlje28odGhpcywiVW5rbm93bkRpYWdyYW1FcnJvciIpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKGUpLHRoaXMubmFtZT0iVW5rbm93bkRpYWdyYW1FcnJvciJ9fX0pO3ZhciBhdSxtMCxMeSxpNyx6JCxyZD1OKCgpPT57InVzZSBzdHJpY3QiO3l0KCk7UTQoKTtuNygpO2F1PXt9LG0wPW8oZnVuY3Rpb24odCxlKXt0PXQucmVwbGFjZShLNCwiIikucmVwbGFjZSh0ZCwiIikucmVwbGFjZSgkJCxgCmApO2ZvcihsZXRbcix7ZGV0ZWN0b3I6bn1db2YgT2JqZWN0LmVudHJpZXMoYXUpKWlmKG4odCxlKSlyZXR1cm4gcjt0aHJvdyBuZXcgcDAoYE5vIGRpYWdyYW0gdHlwZSBkZXRlY3RlZCBtYXRjaGluZyBnaXZlbiBjb25maWd1cmF0aW9uIGZvciB0ZXh0OiAke3R9YCl9LCJkZXRlY3RUeXBlIiksTHk9bygoLi4udCk9Pntmb3IobGV0e2lkOmUsZGV0ZWN0b3I6cixsb2FkZXI6bn1vZiB0KWk3KGUscixuKX0sInJlZ2lzdGVyTGF6eUxvYWRlZERpYWdyYW1zIiksaTc9bygodCxlLHIpPT57YXVbdF0mJlgud2FybihgRGV0ZWN0b3Igd2l0aCBrZXkgJHt0fSBhbHJlYWR5IGV4aXN0cy4gT3ZlcndyaXRpbmcuYCksYXVbdF09e2RldGVjdG9yOmUsbG9hZGVyOnJ9LFguZGVidWcoYERldGVjdG9yIHdpdGgga2V5ICR7dH0gYWRkZWQke3I/IiB3aXRoIGxvYWRlciI6IiJ9YCl9LCJhZGREZXRlY3RvciIpLHokPW8odD0+YXVbdF0ubG9hZGVyLCJnZXREaWFncmFtTG9hZGVyIil9KTt2YXIgUnksRyQsYTc9TigoKT0+eyJ1c2Ugc3RyaWN0IjtSeT1mdW5jdGlvbigpe3ZhciB0PW8oZnVuY3Rpb24oemUsTGUsSWUseGUpe2ZvcihJZT1JZXx8e30seGU9emUubGVuZ3RoO3hlLS07SWVbemVbeGVdXT1MZSk7cmV0dXJuIEllfSwibyIpLGU9WzEsMjRdLHI9WzEsMjVdLG49WzEsMjZdLGk9WzEsMjddLGE9WzEsMjhdLHM9WzEsNjNdLGw9WzEsNjRdLHU9WzEsNjVdLGg9WzEsNjZdLGY9WzEsNjddLGQ9WzEsNjhdLHA9WzEsNjldLG09WzEsMjldLGc9WzEsMzBdLHk9WzEsMzFdLHY9WzEsMzJdLHg9WzEsMzNdLGI9WzEsMzRdLFQ9WzEsMzVdLFM9WzEsMzZdLHc9WzEsMzddLEU9WzEsMzhdLF89WzEsMzldLEM9WzEsNDBdLEQ9WzEsNDFdLE89WzEsNDJdLFI9WzEsNDNdLGs9WzEsNDRdLEw9WzEsNDVdLEE9WzEsNDZdLEk9WzEsNDddLE09WzEsNDhdLFA9WzEsNTBdLEI9WzEsNTFdLEY9WzEsNTJdLHo9WzEsNTNdLCQ9WzEsNTRdLFU9WzEsNTVdLEs9WzEsNTZdLGVlPVsxLDU3XSxZPVsxLDU4XSxjZT1bMSw1OV0sWj1bMSw2MF0sdWU9WzE0LDQyXSxRPVsxNCwzNCwzNiwzNywzOCwzOSw0MCw0MSw0Miw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NF0saj1bMTIsMTQsMzQsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzRdLG5lPVsxLDgyXSx0ZT1bMSw4M10saGU9WzEsODRdLGxlPVsxLDg1XSxKPVsxMiwxNCw0Ml0sU2U9WzEyLDE0LDMzLDQyXSxzZT1bMTIsMTQsMzMsNDIsNzYsNzcsNzksODBdLGFlPVsxMiwzM10sT2U9WzM0LDM2LDM3LDM4LDM5LDQwLDQxLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0XSx5ZT17dHJhY2U6byhmdW5jdGlvbigpe30sInRyYWNlIikseXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxtZXJtYWlkRG9jOjQsZGlyZWN0aW9uOjUsZGlyZWN0aW9uX3RiOjYsZGlyZWN0aW9uX2J0OjcsZGlyZWN0aW9uX3JsOjgsZGlyZWN0aW9uX2xyOjksZ3JhcGhDb25maWc6MTAsQzRfQ09OVEVYVDoxMSxORVdMSU5FOjEyLHN0YXRlbWVudHM6MTMsRU9GOjE0LEM0X0NPTlRBSU5FUjoxNSxDNF9DT01QT05FTlQ6MTYsQzRfRFlOQU1JQzoxNyxDNF9ERVBMT1lNRU5UOjE4LG90aGVyU3RhdGVtZW50czoxOSxkaWFncmFtU3RhdGVtZW50czoyMCxvdGhlclN0YXRlbWVudDoyMSx0aXRsZToyMixhY2NEZXNjcmlwdGlvbjoyMyxhY2NfdGl0bGU6MjQsYWNjX3RpdGxlX3ZhbHVlOjI1LGFjY19kZXNjcjoyNixhY2NfZGVzY3JfdmFsdWU6MjcsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZToyOCxib3VuZGFyeVN0YXRlbWVudDoyOSxib3VuZGFyeVN0YXJ0U3RhdGVtZW50OjMwLGJvdW5kYXJ5U3RvcFN0YXRlbWVudDozMSxib3VuZGFyeVN0YXJ0OjMyLExCUkFDRTozMyxFTlRFUlBSSVNFX0JPVU5EQVJZOjM0LGF0dHJpYnV0ZXM6MzUsU1lTVEVNX0JPVU5EQVJZOjM2LEJPVU5EQVJZOjM3LENPTlRBSU5FUl9CT1VOREFSWTozOCxOT0RFOjM5LE5PREVfTDo0MCxOT0RFX1I6NDEsUkJSQUNFOjQyLGRpYWdyYW1TdGF0ZW1lbnQ6NDMsUEVSU09OOjQ0LFBFUlNPTl9FWFQ6NDUsU1lTVEVNOjQ2LFNZU1RFTV9EQjo0NyxTWVNURU1fUVVFVUU6NDgsU1lTVEVNX0VYVDo0OSxTWVNURU1fRVhUX0RCOjUwLFNZU1RFTV9FWFRfUVVFVUU6NTEsQ09OVEFJTkVSOjUyLENPTlRBSU5FUl9EQjo1MyxDT05UQUlORVJfUVVFVUU6NTQsQ09OVEFJTkVSX0VYVDo1NSxDT05UQUlORVJfRVhUX0RCOjU2LENPTlRBSU5FUl9FWFRfUVVFVUU6NTcsQ09NUE9ORU5UOjU4LENPTVBPTkVOVF9EQjo1OSxDT01QT05FTlRfUVVFVUU6NjAsQ09NUE9ORU5UX0VYVDo2MSxDT01QT05FTlRfRVhUX0RCOjYyLENPTVBPTkVOVF9FWFRfUVVFVUU6NjMsUkVMOjY0LEJJUkVMOjY1LFJFTF9VOjY2LFJFTF9EOjY3LFJFTF9MOjY4LFJFTF9SOjY5LFJFTF9COjcwLFJFTF9JTkRFWDo3MSxVUERBVEVfRUxfU1RZTEU6NzIsVVBEQVRFX1JFTF9TVFlMRTo3MyxVUERBVEVfTEFZT1VUX0NPTkZJRzo3NCxhdHRyaWJ1dGU6NzUsU1RSOjc2LFNUUl9LRVk6NzcsU1RSX1ZBTFVFOjc4LEFUVFJJQlVURTo3OSxBVFRSSUJVVEVfRU1QVFk6ODAsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDY6ImRpcmVjdGlvbl90YiIsNzoiZGlyZWN0aW9uX2J0Iiw4OiJkaXJlY3Rpb25fcmwiLDk6ImRpcmVjdGlvbl9sciIsMTE6IkM0X0NPTlRFWFQiLDEyOiJORVdMSU5FIiwxNDoiRU9GIiwxNToiQzRfQ09OVEFJTkVSIiwxNjoiQzRfQ09NUE9ORU5UIiwxNzoiQzRfRFlOQU1JQyIsMTg6IkM0X0RFUExPWU1FTlQiLDIyOiJ0aXRsZSIsMjM6ImFjY0Rlc2NyaXB0aW9uIiwyNDoiYWNjX3RpdGxlIiwyNToiYWNjX3RpdGxlX3ZhbHVlIiwyNjoiYWNjX2Rlc2NyIiwyNzoiYWNjX2Rlc2NyX3ZhbHVlIiwyODoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMzM6IkxCUkFDRSIsMzQ6IkVOVEVSUFJJU0VfQk9VTkRBUlkiLDM2OiJTWVNURU1fQk9VTkRBUlkiLDM3OiJCT1VOREFSWSIsMzg6IkNPTlRBSU5FUl9CT1VOREFSWSIsMzk6Ik5PREUiLDQwOiJOT0RFX0wiLDQxOiJOT0RFX1IiLDQyOiJSQlJBQ0UiLDQ0OiJQRVJTT04iLDQ1OiJQRVJTT05fRVhUIiw0NjoiU1lTVEVNIiw0NzoiU1lTVEVNX0RCIiw0ODoiU1lTVEVNX1FVRVVFIiw0OToiU1lTVEVNX0VYVCIsNTA6IlNZU1RFTV9FWFRfREIiLDUxOiJTWVNURU1fRVhUX1FVRVVFIiw1MjoiQ09OVEFJTkVSIiw1MzoiQ09OVEFJTkVSX0RCIiw1NDoiQ09OVEFJTkVSX1FVRVVFIiw1NToiQ09OVEFJTkVSX0VYVCIsNTY6IkNPTlRBSU5FUl9FWFRfREIiLDU3OiJDT05UQUlORVJfRVhUX1FVRVVFIiw1ODoiQ09NUE9ORU5UIiw1OToiQ09NUE9ORU5UX0RCIiw2MDoiQ09NUE9ORU5UX1FVRVVFIiw2MToiQ09NUE9ORU5UX0VYVCIsNjI6IkNPTVBPTkVOVF9FWFRfREIiLDYzOiJDT01QT05FTlRfRVhUX1FVRVVFIiw2NDoiUkVMIiw2NToiQklSRUwiLDY2OiJSRUxfVSIsNjc6IlJFTF9EIiw2ODoiUkVMX0wiLDY5OiJSRUxfUiIsNzA6IlJFTF9CIiw3MToiUkVMX0lOREVYIiw3MjoiVVBEQVRFX0VMX1NUWUxFIiw3MzoiVVBEQVRFX1JFTF9TVFlMRSIsNzQ6IlVQREFURV9MQVlPVVRfQ09ORklHIiw3NjoiU1RSIiw3NzoiU1RSX0tFWSIsNzg6IlNUUl9WQUxVRSIsNzk6IkFUVFJJQlVURSIsODA6IkFUVFJJQlVURV9FTVBUWSJ9LHByb2R1Y3Rpb25zXzpbMCxbMywxXSxbMywxXSxbNSwxXSxbNSwxXSxbNSwxXSxbNSwxXSxbNCwxXSxbMTAsNF0sWzEwLDRdLFsxMCw0XSxbMTAsNF0sWzEwLDRdLFsxMywxXSxbMTMsMV0sWzEzLDJdLFsxOSwxXSxbMTksMl0sWzE5LDNdLFsyMSwxXSxbMjEsMV0sWzIxLDJdLFsyMSwyXSxbMjEsMV0sWzI5LDNdLFszMCwzXSxbMzAsM10sWzMwLDRdLFszMiwyXSxbMzIsMl0sWzMyLDJdLFszMiwyXSxbMzIsMl0sWzMyLDJdLFszMiwyXSxbMzEsMV0sWzIwLDFdLFsyMCwyXSxbMjAsM10sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMV0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbNDMsMl0sWzQzLDJdLFs0MywyXSxbMzUsMV0sWzM1LDJdLFs3NSwxXSxbNzUsMl0sWzc1LDFdLFs3NSwxXV0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKExlLEllLHhlLHEsZGUsaWUsb2Upe3ZhciBWPWllLmxlbmd0aC0xO3N3aXRjaChkZSl7Y2FzZSAzOnEuc2V0RGlyZWN0aW9uKCJUQiIpO2JyZWFrO2Nhc2UgNDpxLnNldERpcmVjdGlvbigiQlQiKTticmVhaztjYXNlIDU6cS5zZXREaXJlY3Rpb24oIlJMIik7YnJlYWs7Y2FzZSA2OnEuc2V0RGlyZWN0aW9uKCJMUiIpO2JyZWFrO2Nhc2UgODpjYXNlIDk6Y2FzZSAxMDpjYXNlIDExOmNhc2UgMTI6cS5zZXRDNFR5cGUoaWVbVi0zXSk7YnJlYWs7Y2FzZSAxOTpxLnNldFRpdGxlKGllW1ZdLnN1YnN0cmluZyg2KSksdGhpcy4kPWllW1ZdLnN1YnN0cmluZyg2KTticmVhaztjYXNlIDIwOnEuc2V0QWNjRGVzY3JpcHRpb24oaWVbVl0uc3Vic3RyaW5nKDE1KSksdGhpcy4kPWllW1ZdLnN1YnN0cmluZygxNSk7YnJlYWs7Y2FzZSAyMTp0aGlzLiQ9aWVbVl0udHJpbSgpLHEuc2V0VGl0bGUodGhpcy4kKTticmVhaztjYXNlIDIyOmNhc2UgMjM6dGhpcy4kPWllW1ZdLnRyaW0oKSxxLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAyODppZVtWXS5zcGxpY2UoMiwwLCJFTlRFUlBSSVNFIikscS5hZGRQZXJzb25PclN5c3RlbUJvdW5kYXJ5KC4uLmllW1ZdKSx0aGlzLiQ9aWVbVl07YnJlYWs7Y2FzZSAyOTppZVtWXS5zcGxpY2UoMiwwLCJTWVNURU0iKSxxLmFkZFBlcnNvbk9yU3lzdGVtQm91bmRhcnkoLi4uaWVbVl0pLHRoaXMuJD1pZVtWXTticmVhaztjYXNlIDMwOnEuYWRkUGVyc29uT3JTeXN0ZW1Cb3VuZGFyeSguLi5pZVtWXSksdGhpcy4kPWllW1ZdO2JyZWFrO2Nhc2UgMzE6aWVbVl0uc3BsaWNlKDIsMCwiQ09OVEFJTkVSIikscS5hZGRDb250YWluZXJCb3VuZGFyeSguLi5pZVtWXSksdGhpcy4kPWllW1ZdO2JyZWFrO2Nhc2UgMzI6cS5hZGREZXBsb3ltZW50Tm9kZSgibm9kZSIsLi4uaWVbVl0pLHRoaXMuJD1pZVtWXTticmVhaztjYXNlIDMzOnEuYWRkRGVwbG95bWVudE5vZGUoIm5vZGVMIiwuLi5pZVtWXSksdGhpcy4kPWllW1ZdO2JyZWFrO2Nhc2UgMzQ6cS5hZGREZXBsb3ltZW50Tm9kZSgibm9kZVIiLC4uLmllW1ZdKSx0aGlzLiQ9aWVbVl07YnJlYWs7Y2FzZSAzNTpxLnBvcEJvdW5kYXJ5UGFyc2VTdGFjaygpO2JyZWFrO2Nhc2UgMzk6cS5hZGRQZXJzb25PclN5c3RlbSgicGVyc29uIiwuLi5pZVtWXSksdGhpcy4kPWllW1ZdO2JyZWFrO2Nhc2UgNDA6cS5hZGRQZXJzb25PclN5c3RlbSgiZXh0ZXJuYWxfcGVyc29uIiwuLi5pZVtWXSksdGhpcy4kPWllW1ZdO2JyZWFrO2Nhc2UgNDE6cS5hZGRQZXJzb25PclN5c3RlbSgic3lzdGVtIiwuLi5pZVtWXSksdGhpcy4kPWllW1ZdO2JyZWFrO2Nhc2UgNDI6cS5hZGRQZXJzb25PclN5c3RlbSgic3lzdGVtX2RiIiwuLi5pZVtWXSksdGhpcy4kPWllW1ZdO2JyZWFrO2Nhc2UgNDM6cS5hZGRQZXJzb25PclN5c3RlbSgic3lzdGVtX3F1ZXVlIiwuLi5pZVtWXSksdGhpcy4kPWllW1ZdO2JyZWFrO2Nhc2UgNDQ6cS5hZGRQZXJzb25PclN5c3RlbSgiZXh0ZXJuYWxfc3lzdGVtIiwuLi5pZVtWXSksdGhpcy4kPWllW1ZdO2JyZWFrO2Nhc2UgNDU6cS5hZGRQZXJzb25PclN5c3RlbSgiZXh0ZXJuYWxfc3lzdGVtX2RiIiwuLi5pZVtWXSksdGhpcy4kPWllW1ZdO2JyZWFrO2Nhc2UgNDY6cS5hZGRQZXJzb25PclN5c3RlbSgiZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlIiwuLi5pZVtWXSksdGhpcy4kPWllW1ZdO2JyZWFrO2Nhc2UgNDc6cS5hZGRDb250YWluZXIoImNvbnRhaW5lciIsLi4uaWVbVl0pLHRoaXMuJD1pZVtWXTticmVhaztjYXNlIDQ4OnEuYWRkQ29udGFpbmVyKCJjb250YWluZXJfZGIiLC4uLmllW1ZdKSx0aGlzLiQ9aWVbVl07YnJlYWs7Y2FzZSA0OTpxLmFkZENvbnRhaW5lcigiY29udGFpbmVyX3F1ZXVlIiwuLi5pZVtWXSksdGhpcy4kPWllW1ZdO2JyZWFrO2Nhc2UgNTA6cS5hZGRDb250YWluZXIoImV4dGVybmFsX2NvbnRhaW5lciIsLi4uaWVbVl0pLHRoaXMuJD1pZVtWXTticmVhaztjYXNlIDUxOnEuYWRkQ29udGFpbmVyKCJleHRlcm5hbF9jb250YWluZXJfZGIiLC4uLmllW1ZdKSx0aGlzLiQ9aWVbVl07YnJlYWs7Y2FzZSA1MjpxLmFkZENvbnRhaW5lcigiZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlIiwuLi5pZVtWXSksdGhpcy4kPWllW1ZdO2JyZWFrO2Nhc2UgNTM6cS5hZGRDb21wb25lbnQoImNvbXBvbmVudCIsLi4uaWVbVl0pLHRoaXMuJD1pZVtWXTticmVhaztjYXNlIDU0OnEuYWRkQ29tcG9uZW50KCJjb21wb25lbnRfZGIiLC4uLmllW1ZdKSx0aGlzLiQ9aWVbVl07YnJlYWs7Y2FzZSA1NTpxLmFkZENvbXBvbmVudCgiY29tcG9uZW50X3F1ZXVlIiwuLi5pZVtWXSksdGhpcy4kPWllW1ZdO2JyZWFrO2Nhc2UgNTY6cS5hZGRDb21wb25lbnQoImV4dGVybmFsX2NvbXBvbmVudCIsLi4uaWVbVl0pLHRoaXMuJD1pZVtWXTticmVhaztjYXNlIDU3OnEuYWRkQ29tcG9uZW50KCJleHRlcm5hbF9jb21wb25lbnRfZGIiLC4uLmllW1ZdKSx0aGlzLiQ9aWVbVl07YnJlYWs7Y2FzZSA1ODpxLmFkZENvbXBvbmVudCgiZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlIiwuLi5pZVtWXSksdGhpcy4kPWllW1ZdO2JyZWFrO2Nhc2UgNjA6cS5hZGRSZWwoInJlbCIsLi4uaWVbVl0pLHRoaXMuJD1pZVtWXTticmVhaztjYXNlIDYxOnEuYWRkUmVsKCJiaXJlbCIsLi4uaWVbVl0pLHRoaXMuJD1pZVtWXTticmVhaztjYXNlIDYyOnEuYWRkUmVsKCJyZWxfdSIsLi4uaWVbVl0pLHRoaXMuJD1pZVtWXTticmVhaztjYXNlIDYzOnEuYWRkUmVsKCJyZWxfZCIsLi4uaWVbVl0pLHRoaXMuJD1pZVtWXTticmVhaztjYXNlIDY0OnEuYWRkUmVsKCJyZWxfbCIsLi4uaWVbVl0pLHRoaXMuJD1pZVtWXTticmVhaztjYXNlIDY1OnEuYWRkUmVsKCJyZWxfciIsLi4uaWVbVl0pLHRoaXMuJD1pZVtWXTticmVhaztjYXNlIDY2OnEuYWRkUmVsKCJyZWxfYiIsLi4uaWVbVl0pLHRoaXMuJD1pZVtWXTticmVhaztjYXNlIDY3OmllW1ZdLnNwbGljZSgwLDEpLHEuYWRkUmVsKCJyZWwiLC4uLmllW1ZdKSx0aGlzLiQ9aWVbVl07YnJlYWs7Y2FzZSA2ODpxLnVwZGF0ZUVsU3R5bGUoInVwZGF0ZV9lbF9zdHlsZSIsLi4uaWVbVl0pLHRoaXMuJD1pZVtWXTticmVhaztjYXNlIDY5OnEudXBkYXRlUmVsU3R5bGUoInVwZGF0ZV9yZWxfc3R5bGUiLC4uLmllW1ZdKSx0aGlzLiQ9aWVbVl07YnJlYWs7Y2FzZSA3MDpxLnVwZGF0ZUxheW91dENvbmZpZygidXBkYXRlX2xheW91dF9jb25maWciLC4uLmllW1ZdKSx0aGlzLiQ9aWVbVl07YnJlYWs7Y2FzZSA3MTp0aGlzLiQ9W2llW1ZdXTticmVhaztjYXNlIDcyOmllW1ZdLnVuc2hpZnQoaWVbVi0xXSksdGhpcy4kPWllW1ZdO2JyZWFrO2Nhc2UgNzM6Y2FzZSA3NTp0aGlzLiQ9aWVbVl0udHJpbSgpO2JyZWFrO2Nhc2UgNzQ6bGV0IFRlPXt9O1RlW2llW1YtMV0udHJpbSgpXT1pZVtWXS50cmltKCksdGhpcy4kPVRlO2JyZWFrO2Nhc2UgNzY6dGhpcy4kPSIiO2JyZWFrfX0sImFub255bW91cyIpLHRhYmxlOlt7MzoxLDQ6Miw1OjMsNjpbMSw1XSw3OlsxLDZdLDg6WzEsN10sOTpbMSw4XSwxMDo0LDExOlsxLDldLDE1OlsxLDEwXSwxNjpbMSwxMV0sMTc6WzEsMTJdLDE4OlsxLDEzXX0sezE6WzNdfSx7MTpbMiwxXX0sezE6WzIsMl19LHsxOlsyLDddfSx7MTpbMiwzXX0sezE6WzIsNF19LHsxOlsyLDVdfSx7MTpbMiw2XX0sezEyOlsxLDE0XX0sezEyOlsxLDE1XX0sezEyOlsxLDE2XX0sezEyOlsxLDE3XX0sezEyOlsxLDE4XX0sezEzOjE5LDE5OjIwLDIwOjIxLDIxOjIyLDIyOmUsMjM6ciwyNDpuLDI2OmksMjg6YSwyOTo0OSwzMDo2MSwzMjo2MiwzNDpzLDM2OmwsMzc6dSwzODpoLDM5OmYsNDA6ZCw0MTpwLDQzOjIzLDQ0Om0sNDU6Zyw0Njp5LDQ3OnYsNDg6eCw0OTpiLDUwOlQsNTE6Uyw1Mjp3LDUzOkUsNTQ6Xyw1NTpDLDU2OkQsNTc6Tyw1ODpSLDU5OmssNjA6TCw2MTpBLDYyOkksNjM6TSw2NDpQLDY1OkIsNjY6Riw2Nzp6LDY4OiQsNjk6VSw3MDpLLDcxOmVlLDcyOlksNzM6Y2UsNzQ6Wn0sezEzOjcwLDE5OjIwLDIwOjIxLDIxOjIyLDIyOmUsMjM6ciwyNDpuLDI2OmksMjg6YSwyOTo0OSwzMDo2MSwzMjo2MiwzNDpzLDM2OmwsMzc6dSwzODpoLDM5OmYsNDA6ZCw0MTpwLDQzOjIzLDQ0Om0sNDU6Zyw0Njp5LDQ3OnYsNDg6eCw0OTpiLDUwOlQsNTE6Uyw1Mjp3LDUzOkUsNTQ6Xyw1NTpDLDU2OkQsNTc6Tyw1ODpSLDU5OmssNjA6TCw2MTpBLDYyOkksNjM6TSw2NDpQLDY1OkIsNjY6Riw2Nzp6LDY4OiQsNjk6VSw3MDpLLDcxOmVlLDcyOlksNzM6Y2UsNzQ6Wn0sezEzOjcxLDE5OjIwLDIwOjIxLDIxOjIyLDIyOmUsMjM6ciwyNDpuLDI2OmksMjg6YSwyOTo0OSwzMDo2MSwzMjo2MiwzNDpzLDM2OmwsMzc6dSwzODpoLDM5OmYsNDA6ZCw0MTpwLDQzOjIzLDQ0Om0sNDU6Zyw0Njp5LDQ3OnYsNDg6eCw0OTpiLDUwOlQsNTE6Uyw1Mjp3LDUzOkUsNTQ6Xyw1NTpDLDU2OkQsNTc6Tyw1ODpSLDU5OmssNjA6TCw2MTpBLDYyOkksNjM6TSw2NDpQLDY1OkIsNjY6Riw2Nzp6LDY4OiQsNjk6VSw3MDpLLDcxOmVlLDcyOlksNzM6Y2UsNzQ6Wn0sezEzOjcyLDE5OjIwLDIwOjIxLDIxOjIyLDIyOmUsMjM6ciwyNDpuLDI2OmksMjg6YSwyOTo0OSwzMDo2MSwzMjo2MiwzNDpzLDM2OmwsMzc6dSwzODpoLDM5OmYsNDA6ZCw0MTpwLDQzOjIzLDQ0Om0sNDU6Zyw0Njp5LDQ3OnYsNDg6eCw0OTpiLDUwOlQsNTE6Uyw1Mjp3LDUzOkUsNTQ6Xyw1NTpDLDU2OkQsNTc6Tyw1ODpSLDU5OmssNjA6TCw2MTpBLDYyOkksNjM6TSw2NDpQLDY1OkIsNjY6Riw2Nzp6LDY4OiQsNjk6VSw3MDpLLDcxOmVlLDcyOlksNzM6Y2UsNzQ6Wn0sezEzOjczLDE5OjIwLDIwOjIxLDIxOjIyLDIyOmUsMjM6ciwyNDpuLDI2OmksMjg6YSwyOTo0OSwzMDo2MSwzMjo2MiwzNDpzLDM2OmwsMzc6dSwzODpoLDM5OmYsNDA6ZCw0MTpwLDQzOjIzLDQ0Om0sNDU6Zyw0Njp5LDQ3OnYsNDg6eCw0OTpiLDUwOlQsNTE6Uyw1Mjp3LDUzOkUsNTQ6Xyw1NTpDLDU2OkQsNTc6Tyw1ODpSLDU5OmssNjA6TCw2MTpBLDYyOkksNjM6TSw2NDpQLDY1OkIsNjY6Riw2Nzp6LDY4OiQsNjk6VSw3MDpLLDcxOmVlLDcyOlksNzM6Y2UsNzQ6Wn0sezE0OlsxLDc0XX0sdCh1ZSxbMiwxM10sezQzOjIzLDI5OjQ5LDMwOjYxLDMyOjYyLDIwOjc1LDM0OnMsMzY6bCwzNzp1LDM4OmgsMzk6Ziw0MDpkLDQxOnAsNDQ6bSw0NTpnLDQ2OnksNDc6diw0ODp4LDQ5OmIsNTA6VCw1MTpTLDUyOncsNTM6RSw1NDpfLDU1OkMsNTY6RCw1NzpPLDU4OlIsNTk6ayw2MDpMLDYxOkEsNjI6SSw2MzpNLDY0OlAsNjU6Qiw2NjpGLDY3OnosNjg6JCw2OTpVLDcwOkssNzE6ZWUsNzI6WSw3MzpjZSw3NDpafSksdCh1ZSxbMiwxNF0pLHQoUSxbMiwxNl0sezEyOlsxLDc2XX0pLHQodWUsWzIsMzZdLHsxMjpbMSw3N119KSx0KGosWzIsMTldKSx0KGosWzIsMjBdKSx7MjU6WzEsNzhdfSx7Mjc6WzEsNzldfSx0KGosWzIsMjNdKSx7MzU6ODAsNzU6ODEsNzY6bmUsNzc6dGUsNzk6aGUsODA6bGV9LHszNTo4Niw3NTo4MSw3NjpuZSw3Nzp0ZSw3OTpoZSw4MDpsZX0sezM1Ojg3LDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MzU6ODgsNzU6ODEsNzY6bmUsNzc6dGUsNzk6aGUsODA6bGV9LHszNTo4OSw3NTo4MSw3NjpuZSw3Nzp0ZSw3OTpoZSw4MDpsZX0sezM1OjkwLDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MzU6OTEsNzU6ODEsNzY6bmUsNzc6dGUsNzk6aGUsODA6bGV9LHszNTo5Miw3NTo4MSw3NjpuZSw3Nzp0ZSw3OTpoZSw4MDpsZX0sezM1OjkzLDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MzU6OTQsNzU6ODEsNzY6bmUsNzc6dGUsNzk6aGUsODA6bGV9LHszNTo5NSw3NTo4MSw3NjpuZSw3Nzp0ZSw3OTpoZSw4MDpsZX0sezM1Ojk2LDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MzU6OTcsNzU6ODEsNzY6bmUsNzc6dGUsNzk6aGUsODA6bGV9LHszNTo5OCw3NTo4MSw3NjpuZSw3Nzp0ZSw3OTpoZSw4MDpsZX0sezM1Ojk5LDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MzU6MTAwLDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MzU6MTAxLDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MzU6MTAyLDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MzU6MTAzLDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MzU6MTA0LDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx0KEosWzIsNTldKSx7MzU6MTA1LDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MzU6MTA2LDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MzU6MTA3LDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MzU6MTA4LDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MzU6MTA5LDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MzU6MTEwLDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MzU6MTExLDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MzU6MTEyLDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MzU6MTEzLDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MzU6MTE0LDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MzU6MTE1LDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MjA6MTE2LDI5OjQ5LDMwOjYxLDMyOjYyLDM0OnMsMzY6bCwzNzp1LDM4OmgsMzk6Ziw0MDpkLDQxOnAsNDM6MjMsNDQ6bSw0NTpnLDQ2OnksNDc6diw0ODp4LDQ5OmIsNTA6VCw1MTpTLDUyOncsNTM6RSw1NDpfLDU1OkMsNTY6RCw1NzpPLDU4OlIsNTk6ayw2MDpMLDYxOkEsNjI6SSw2MzpNLDY0OlAsNjU6Qiw2NjpGLDY3OnosNjg6JCw2OTpVLDcwOkssNzE6ZWUsNzI6WSw3MzpjZSw3NDpafSx7MTI6WzEsMTE4XSwzMzpbMSwxMTddfSx7MzU6MTE5LDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MzU6MTIwLDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MzU6MTIxLDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MzU6MTIyLDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MzU6MTIzLDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MzU6MTI0LDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MzU6MTI1LDc1OjgxLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSx7MTQ6WzEsMTI2XX0sezE0OlsxLDEyN119LHsxNDpbMSwxMjhdfSx7MTQ6WzEsMTI5XX0sezE6WzIsOF19LHQodWUsWzIsMTVdKSx0KFEsWzIsMTddLHsyMToyMiwxOToxMzAsMjI6ZSwyMzpyLDI0Om4sMjY6aSwyODphfSksdCh1ZSxbMiwzN10sezE5OjIwLDIwOjIxLDIxOjIyLDQzOjIzLDI5OjQ5LDMwOjYxLDMyOjYyLDEzOjEzMSwyMjplLDIzOnIsMjQ6biwyNjppLDI4OmEsMzQ6cywzNjpsLDM3OnUsMzg6aCwzOTpmLDQwOmQsNDE6cCw0NDptLDQ1OmcsNDY6eSw0Nzp2LDQ4OngsNDk6Yiw1MDpULDUxOlMsNTI6dyw1MzpFLDU0Ol8sNTU6Qyw1NjpELDU3Ok8sNTg6Uiw1OTprLDYwOkwsNjE6QSw2MjpJLDYzOk0sNjQ6UCw2NTpCLDY2OkYsNjc6eiw2ODokLDY5OlUsNzA6Syw3MTplZSw3MjpZLDczOmNlLDc0Olp9KSx0KGosWzIsMjFdKSx0KGosWzIsMjJdKSx0KEosWzIsMzldKSx0KFNlLFsyLDcxXSx7NzU6ODEsMzU6MTMyLDc2Om5lLDc3OnRlLDc5OmhlLDgwOmxlfSksdChzZSxbMiw3M10pLHs3ODpbMSwxMzNdfSx0KHNlLFsyLDc1XSksdChzZSxbMiw3Nl0pLHQoSixbMiw0MF0pLHQoSixbMiw0MV0pLHQoSixbMiw0Ml0pLHQoSixbMiw0M10pLHQoSixbMiw0NF0pLHQoSixbMiw0NV0pLHQoSixbMiw0Nl0pLHQoSixbMiw0N10pLHQoSixbMiw0OF0pLHQoSixbMiw0OV0pLHQoSixbMiw1MF0pLHQoSixbMiw1MV0pLHQoSixbMiw1Ml0pLHQoSixbMiw1M10pLHQoSixbMiw1NF0pLHQoSixbMiw1NV0pLHQoSixbMiw1Nl0pLHQoSixbMiw1N10pLHQoSixbMiw1OF0pLHQoSixbMiw2MF0pLHQoSixbMiw2MV0pLHQoSixbMiw2Ml0pLHQoSixbMiw2M10pLHQoSixbMiw2NF0pLHQoSixbMiw2NV0pLHQoSixbMiw2Nl0pLHQoSixbMiw2N10pLHQoSixbMiw2OF0pLHQoSixbMiw2OV0pLHQoSixbMiw3MF0pLHszMToxMzQsNDI6WzEsMTM1XX0sezEyOlsxLDEzNl19LHszMzpbMSwxMzddfSx0KGFlLFsyLDI4XSksdChhZSxbMiwyOV0pLHQoYWUsWzIsMzBdKSx0KGFlLFsyLDMxXSksdChhZSxbMiwzMl0pLHQoYWUsWzIsMzNdKSx0KGFlLFsyLDM0XSksezE6WzIsOV19LHsxOlsyLDEwXX0sezE6WzIsMTFdfSx7MTpbMiwxMl19LHQoUSxbMiwxOF0pLHQodWUsWzIsMzhdKSx0KFNlLFsyLDcyXSksdChzZSxbMiw3NF0pLHQoSixbMiwyNF0pLHQoSixbMiwzNV0pLHQoT2UsWzIsMjVdKSx0KE9lLFsyLDI2XSx7MTI6WzEsMTM4XX0pLHQoT2UsWzIsMjddKV0sZGVmYXVsdEFjdGlvbnM6ezI6WzIsMV0sMzpbMiwyXSw0OlsyLDddLDU6WzIsM10sNjpbMiw0XSw3OlsyLDVdLDg6WzIsNl0sNzQ6WzIsOF0sMTI2OlsyLDldLDEyNzpbMiwxMF0sMTI4OlsyLDExXSwxMjk6WzIsMTJdfSxwYXJzZUVycm9yOm8oZnVuY3Rpb24oTGUsSWUpe2lmKEllLnJlY292ZXJhYmxlKXRoaXMudHJhY2UoTGUpO2Vsc2V7dmFyIHhlPW5ldyBFcnJvcihMZSk7dGhyb3cgeGUuaGFzaD1JZSx4ZX19LCJwYXJzZUVycm9yIikscGFyc2U6byhmdW5jdGlvbihMZSl7dmFyIEllPXRoaXMseGU9WzBdLHE9W10sZGU9W251bGxdLGllPVtdLG9lPXRoaXMudGFibGUsVj0iIixUZT0wLFc9MCxwZT0wLHZlPTIsUGU9MSxfZT1pZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxiZT1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLFZlPXt5eTp7fX07Zm9yKHZhciBEZSBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LERlKSYmKFZlLnl5W0RlXT10aGlzLnl5W0RlXSk7YmUuc2V0SW5wdXQoTGUsVmUueXkpLFZlLnl5LmxleGVyPWJlLFZlLnl5LnBhcnNlcj10aGlzLHR5cGVvZiBiZS55eWxsb2M+InUiJiYoYmUueXlsbG9jPXt9KTt2YXIgcWU9YmUueXlsbG9jO2llLnB1c2gocWUpO3ZhciBhdD1iZS5vcHRpb25zJiZiZS5vcHRpb25zLnJhbmdlczt0eXBlb2YgVmUueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9VmUueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gUnQobnQpe3hlLmxlbmd0aD14ZS5sZW5ndGgtMipudCxkZS5sZW5ndGg9ZGUubGVuZ3RoLW50LGllLmxlbmd0aD1pZS5sZW5ndGgtbnR9byhSdCwicG9wU3RhY2siKTtmdW5jdGlvbiBzdCgpe3ZhciBudDtyZXR1cm4gbnQ9cS5wb3AoKXx8YmUubGV4KCl8fFBlLHR5cGVvZiBudCE9Im51bWJlciImJihudCBpbnN0YW5jZW9mIEFycmF5JiYocT1udCxudD1xLnBvcCgpKSxudD1JZS5zeW1ib2xzX1tudF18fG50KSxudH1vKHN0LCJsZXgiKTtmb3IodmFyIFVlLGN0LFdlLG90LFl0LFR0LE10PXt9LGJ0LHV0LFN0LGZ0Ozspe2lmKFdlPXhlW3hlLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW1dlXT9vdD10aGlzLmRlZmF1bHRBY3Rpb25zW1dlXTooKFVlPT09bnVsbHx8dHlwZW9mIFVlPiJ1IikmJihVZT1zdCgpKSxvdD1vZVtXZV0mJm9lW1dlXVtVZV0pLHR5cGVvZiBvdD4idSJ8fCFvdC5sZW5ndGh8fCFvdFswXSl7dmFyIHZ0PSIiO2Z0PVtdO2ZvcihidCBpbiBvZVtXZV0pdGhpcy50ZXJtaW5hbHNfW2J0XSYmYnQ+dmUmJmZ0LnB1c2goIiciK3RoaXMudGVybWluYWxzX1tidF0rIiciKTtiZS5zaG93UG9zaXRpb24/dnQ9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoVGUrMSkrYDoKYCtiZS5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK2Z0LmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bVWVdfHxVZSkrIiciOnZ0PSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKFRlKzEpKyI6IFVuZXhwZWN0ZWQgIisoVWU9PVBlPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW1VlXXx8VWUpKyInIiksdGhpcy5wYXJzZUVycm9yKHZ0LHt0ZXh0OmJlLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tVZV18fFVlLGxpbmU6YmUueXlsaW5lbm8sbG9jOnFlLGV4cGVjdGVkOmZ0fSl9aWYob3RbMF1pbnN0YW5jZW9mIEFycmF5JiZvdC5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK1dlKyIsIHRva2VuOiAiK1VlKTtzd2l0Y2gob3RbMF0pe2Nhc2UgMTp4ZS5wdXNoKFVlKSxkZS5wdXNoKGJlLnl5dGV4dCksaWUucHVzaChiZS55eWxsb2MpLHhlLnB1c2gob3RbMV0pLFVlPW51bGwsY3Q/KFVlPWN0LGN0PW51bGwpOihXPWJlLnl5bGVuZyxWPWJlLnl5dGV4dCxUZT1iZS55eWxpbmVubyxxZT1iZS55eWxsb2MscGU+MCYmcGUtLSk7YnJlYWs7Y2FzZSAyOmlmKHV0PXRoaXMucHJvZHVjdGlvbnNfW290WzFdXVsxXSxNdC4kPWRlW2RlLmxlbmd0aC11dF0sTXQuXyQ9e2ZpcnN0X2xpbmU6aWVbaWUubGVuZ3RoLSh1dHx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmllW2llLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmllW2llLmxlbmd0aC0odXR8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46aWVbaWUubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxhdCYmKE10Ll8kLnJhbmdlPVtpZVtpZS5sZW5ndGgtKHV0fHwxKV0ucmFuZ2VbMF0saWVbaWUubGVuZ3RoLTFdLnJhbmdlWzFdXSksVHQ9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KE10LFtWLFcsVGUsVmUueXksb3RbMV0sZGUsaWVdLmNvbmNhdChfZSkpLHR5cGVvZiBUdDwidSIpcmV0dXJuIFR0O3V0JiYoeGU9eGUuc2xpY2UoMCwtMSp1dCoyKSxkZT1kZS5zbGljZSgwLC0xKnV0KSxpZT1pZS5zbGljZSgwLC0xKnV0KSkseGUucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1tvdFsxXV1bMF0pLGRlLnB1c2goTXQuJCksaWUucHVzaChNdC5fJCksU3Q9b2VbeGVbeGUubGVuZ3RoLTJdXVt4ZVt4ZS5sZW5ndGgtMV1dLHhlLnB1c2goU3QpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9LCJwYXJzZSIpfSxCZT1mdW5jdGlvbigpe3ZhciB6ZT17RU9GOjEscGFyc2VFcnJvcjpvKGZ1bmN0aW9uKEllLHhlKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKEllLHhlKTtlbHNlIHRocm93IG5ldyBFcnJvcihJZSl9LCJwYXJzZUVycm9yIiksc2V0SW5wdXQ6byhmdW5jdGlvbihMZSxJZSl7cmV0dXJuIHRoaXMueXk9SWV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PUxlLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSwic2V0SW5wdXQiKSxpbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIExlPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1MZSx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9TGUsdGhpcy5tYXRjaGVkKz1MZTt2YXIgSWU9TGUubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBJZT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksTGV9LCJpbnB1dCIpLHVucHV0Om8oZnVuY3Rpb24oTGUpe3ZhciBJZT1MZS5sZW5ndGgseGU9TGUuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD1MZSt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtSWUpLHRoaXMub2Zmc2V0LT1JZTt2YXIgcT10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSx4ZS5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPXhlLmxlbmd0aC0xKTt2YXIgZGU9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnhlPyh4ZS5sZW5ndGg9PT1xLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrcVtxLmxlbmd0aC14ZS5sZW5ndGhdLmxlbmd0aC14ZVswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLUllfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2RlWzBdLGRlWzBdK3RoaXMueXlsZW5nLUllXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LCJ1bnB1dCIpLG1vcmU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LCJtb3JlIikscmVqZWN0Om8oZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LCJyZWplY3QiKSxsZXNzOm8oZnVuY3Rpb24oTGUpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShMZSkpfSwibGVzcyIpLHBhc3RJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIExlPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oTGUubGVuZ3RoPjIwPyIuLi4iOiIiKStMZS5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sInBhc3RJbnB1dCIpLHVwY29taW5nSW5wdXQ6byhmdW5jdGlvbigpe3ZhciBMZT10aGlzLm1hdGNoO3JldHVybiBMZS5sZW5ndGg8MjAmJihMZSs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtTGUubGVuZ3RoKSksKExlLnN1YnN0cigwLDIwKSsoTGUubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LCJ1cGNvbWluZ0lucHV0Iiksc2hvd1Bvc2l0aW9uOm8oZnVuY3Rpb24oKXt2YXIgTGU9dGhpcy5wYXN0SW5wdXQoKSxJZT1uZXcgQXJyYXkoTGUubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gTGUrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK0llKyJeIn0sInNob3dQb3NpdGlvbiIpLHRlc3RfbWF0Y2g6byhmdW5jdGlvbihMZSxJZSl7dmFyIHhlLHEsZGU7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKGRlPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGRlLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLHE9TGVbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLHEmJih0aGlzLnl5bGluZW5vKz1xLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnE/cVtxLmxlbmd0aC0xXS5sZW5ndGgtcVtxLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK0xlWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPUxlWzBdLHRoaXMubWF0Y2grPUxlWzBdLHRoaXMubWF0Y2hlcz1MZSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShMZVswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9TGVbMF0seGU9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsSWUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSkseGUpcmV0dXJuIHhlO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBpZSBpbiBkZSl0aGlzW2llXT1kZVtpZV07cmV0dXJuITF9cmV0dXJuITF9LCJ0ZXN0X21hdGNoIiksbmV4dDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIExlLEllLHhlLHE7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgZGU9dGhpcy5fY3VycmVudFJ1bGVzKCksaWU9MDtpZTxkZS5sZW5ndGg7aWUrKylpZih4ZT10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2RlW2llXV0pLHhlJiYoIUllfHx4ZVswXS5sZW5ndGg+SWVbMF0ubGVuZ3RoKSl7aWYoSWU9eGUscT1pZSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihMZT10aGlzLnRlc3RfbWF0Y2goeGUsZGVbaWVdKSxMZSE9PSExKXJldHVybiBMZTtpZih0aGlzLl9iYWNrdHJhY2spe0llPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIEllPyhMZT10aGlzLnRlc3RfbWF0Y2goSWUsZGVbcV0pLExlIT09ITE/TGU6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LCJuZXh0IiksbGV4Om8oZnVuY3Rpb24oKXt2YXIgSWU9dGhpcy5uZXh0KCk7cmV0dXJuIEllfHx0aGlzLmxleCgpfSwibGV4IiksYmVnaW46byhmdW5jdGlvbihJZSl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKEllKX0sImJlZ2luIikscG9wU3RhdGU6byhmdW5jdGlvbigpe3ZhciBJZT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBJZT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sInBvcFN0YXRlIiksX2N1cnJlbnRSdWxlczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sIl9jdXJyZW50UnVsZXMiKSx0b3BTdGF0ZTpvKGZ1bmN0aW9uKEllKXtyZXR1cm4gSWU9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhJZXx8MCksSWU+PTA/dGhpcy5jb25kaXRpb25TdGFja1tJZV06IklOSVRJQUwifSwidG9wU3RhdGUiKSxwdXNoU3RhdGU6byhmdW5jdGlvbihJZSl7dGhpcy5iZWdpbihJZSl9LCJwdXNoU3RhdGUiKSxzdGF0ZVN0YWNrU2l6ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSwic3RhdGVTdGFja1NpemUiKSxvcHRpb25zOnt9LHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbihJZSx4ZSxxLGRlKXt2YXIgaWU9ZGU7c3dpdGNoKHEpe2Nhc2UgMDpyZXR1cm4gNjtjYXNlIDE6cmV0dXJuIDc7Y2FzZSAyOnJldHVybiA4O2Nhc2UgMzpyZXR1cm4gOTtjYXNlIDQ6cmV0dXJuIDIyO2Nhc2UgNTpyZXR1cm4gMjM7Y2FzZSA2OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwyNDticmVhaztjYXNlIDc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjticmVhaztjYXNlIDg6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDI2O2JyZWFrO2Nhc2UgOTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2JyZWFrO2Nhc2UgMTA6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgMTE6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTI6cmV0dXJuImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiO2Nhc2UgMTM6YnJlYWs7Y2FzZSAxNDpjO2JyZWFrO2Nhc2UgMTU6cmV0dXJuIDEyO2Nhc2UgMTY6YnJlYWs7Y2FzZSAxNzpyZXR1cm4gMTE7Y2FzZSAxODpyZXR1cm4gMTU7Y2FzZSAxOTpyZXR1cm4gMTY7Y2FzZSAyMDpyZXR1cm4gMTc7Y2FzZSAyMTpyZXR1cm4gMTg7Y2FzZSAyMjpyZXR1cm4gdGhpcy5iZWdpbigicGVyc29uX2V4dCIpLDQ1O2JyZWFrO2Nhc2UgMjM6cmV0dXJuIHRoaXMuYmVnaW4oInBlcnNvbiIpLDQ0O2JyZWFrO2Nhc2UgMjQ6cmV0dXJuIHRoaXMuYmVnaW4oInN5c3RlbV9leHRfcXVldWUiKSw1MTticmVhaztjYXNlIDI1OnJldHVybiB0aGlzLmJlZ2luKCJzeXN0ZW1fZXh0X2RiIiksNTA7YnJlYWs7Y2FzZSAyNjpyZXR1cm4gdGhpcy5iZWdpbigic3lzdGVtX2V4dCIpLDQ5O2JyZWFrO2Nhc2UgMjc6cmV0dXJuIHRoaXMuYmVnaW4oInN5c3RlbV9xdWV1ZSIpLDQ4O2JyZWFrO2Nhc2UgMjg6cmV0dXJuIHRoaXMuYmVnaW4oInN5c3RlbV9kYiIpLDQ3O2JyZWFrO2Nhc2UgMjk6cmV0dXJuIHRoaXMuYmVnaW4oInN5c3RlbSIpLDQ2O2JyZWFrO2Nhc2UgMzA6cmV0dXJuIHRoaXMuYmVnaW4oImJvdW5kYXJ5IiksMzc7YnJlYWs7Y2FzZSAzMTpyZXR1cm4gdGhpcy5iZWdpbigiZW50ZXJwcmlzZV9ib3VuZGFyeSIpLDM0O2JyZWFrO2Nhc2UgMzI6cmV0dXJuIHRoaXMuYmVnaW4oInN5c3RlbV9ib3VuZGFyeSIpLDM2O2JyZWFrO2Nhc2UgMzM6cmV0dXJuIHRoaXMuYmVnaW4oImNvbnRhaW5lcl9leHRfcXVldWUiKSw1NzticmVhaztjYXNlIDM0OnJldHVybiB0aGlzLmJlZ2luKCJjb250YWluZXJfZXh0X2RiIiksNTY7YnJlYWs7Y2FzZSAzNTpyZXR1cm4gdGhpcy5iZWdpbigiY29udGFpbmVyX2V4dCIpLDU1O2JyZWFrO2Nhc2UgMzY6cmV0dXJuIHRoaXMuYmVnaW4oImNvbnRhaW5lcl9xdWV1ZSIpLDU0O2JyZWFrO2Nhc2UgMzc6cmV0dXJuIHRoaXMuYmVnaW4oImNvbnRhaW5lcl9kYiIpLDUzO2JyZWFrO2Nhc2UgMzg6cmV0dXJuIHRoaXMuYmVnaW4oImNvbnRhaW5lciIpLDUyO2JyZWFrO2Nhc2UgMzk6cmV0dXJuIHRoaXMuYmVnaW4oImNvbnRhaW5lcl9ib3VuZGFyeSIpLDM4O2JyZWFrO2Nhc2UgNDA6cmV0dXJuIHRoaXMuYmVnaW4oImNvbXBvbmVudF9leHRfcXVldWUiKSw2MzticmVhaztjYXNlIDQxOnJldHVybiB0aGlzLmJlZ2luKCJjb21wb25lbnRfZXh0X2RiIiksNjI7YnJlYWs7Y2FzZSA0MjpyZXR1cm4gdGhpcy5iZWdpbigiY29tcG9uZW50X2V4dCIpLDYxO2JyZWFrO2Nhc2UgNDM6cmV0dXJuIHRoaXMuYmVnaW4oImNvbXBvbmVudF9xdWV1ZSIpLDYwO2JyZWFrO2Nhc2UgNDQ6cmV0dXJuIHRoaXMuYmVnaW4oImNvbXBvbmVudF9kYiIpLDU5O2JyZWFrO2Nhc2UgNDU6cmV0dXJuIHRoaXMuYmVnaW4oImNvbXBvbmVudCIpLDU4O2JyZWFrO2Nhc2UgNDY6cmV0dXJuIHRoaXMuYmVnaW4oIm5vZGUiKSwzOTticmVhaztjYXNlIDQ3OnJldHVybiB0aGlzLmJlZ2luKCJub2RlIiksMzk7YnJlYWs7Y2FzZSA0ODpyZXR1cm4gdGhpcy5iZWdpbigibm9kZV9sIiksNDA7YnJlYWs7Y2FzZSA0OTpyZXR1cm4gdGhpcy5iZWdpbigibm9kZV9yIiksNDE7YnJlYWs7Y2FzZSA1MDpyZXR1cm4gdGhpcy5iZWdpbigicmVsIiksNjQ7YnJlYWs7Y2FzZSA1MTpyZXR1cm4gdGhpcy5iZWdpbigiYmlyZWwiKSw2NTticmVhaztjYXNlIDUyOnJldHVybiB0aGlzLmJlZ2luKCJyZWxfdSIpLDY2O2JyZWFrO2Nhc2UgNTM6cmV0dXJuIHRoaXMuYmVnaW4oInJlbF91IiksNjY7YnJlYWs7Y2FzZSA1NDpyZXR1cm4gdGhpcy5iZWdpbigicmVsX2QiKSw2NzticmVhaztjYXNlIDU1OnJldHVybiB0aGlzLmJlZ2luKCJyZWxfZCIpLDY3O2JyZWFrO2Nhc2UgNTY6cmV0dXJuIHRoaXMuYmVnaW4oInJlbF9sIiksNjg7YnJlYWs7Y2FzZSA1NzpyZXR1cm4gdGhpcy5iZWdpbigicmVsX2wiKSw2ODticmVhaztjYXNlIDU4OnJldHVybiB0aGlzLmJlZ2luKCJyZWxfciIpLDY5O2JyZWFrO2Nhc2UgNTk6cmV0dXJuIHRoaXMuYmVnaW4oInJlbF9yIiksNjk7YnJlYWs7Y2FzZSA2MDpyZXR1cm4gdGhpcy5iZWdpbigicmVsX2IiKSw3MDticmVhaztjYXNlIDYxOnJldHVybiB0aGlzLmJlZ2luKCJyZWxfaW5kZXgiKSw3MTticmVhaztjYXNlIDYyOnJldHVybiB0aGlzLmJlZ2luKCJ1cGRhdGVfZWxfc3R5bGUiKSw3MjticmVhaztjYXNlIDYzOnJldHVybiB0aGlzLmJlZ2luKCJ1cGRhdGVfcmVsX3N0eWxlIiksNzM7YnJlYWs7Y2FzZSA2NDpyZXR1cm4gdGhpcy5iZWdpbigidXBkYXRlX2xheW91dF9jb25maWciKSw3NDticmVhaztjYXNlIDY1OnJldHVybiJFT0ZfSU5fU1RSVUNUIjtjYXNlIDY2OnJldHVybiB0aGlzLmJlZ2luKCJhdHRyaWJ1dGUiKSwiQVRUUklCVVRFX0VNUFRZIjticmVhaztjYXNlIDY3OnRoaXMuYmVnaW4oImF0dHJpYnV0ZSIpO2JyZWFrO2Nhc2UgNjg6dGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDY5OnJldHVybiA4MDtjYXNlIDcwOmJyZWFrO2Nhc2UgNzE6cmV0dXJuIDgwO2Nhc2UgNzI6dGhpcy5iZWdpbigic3RyaW5nIik7YnJlYWs7Y2FzZSA3Mzp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA3NDpyZXR1cm4iU1RSIjtjYXNlIDc1OnRoaXMuYmVnaW4oInN0cmluZ19rdiIpO2JyZWFrO2Nhc2UgNzY6cmV0dXJuIHRoaXMuYmVnaW4oInN0cmluZ19rdl9rZXkiKSwiU1RSX0tFWSI7YnJlYWs7Y2FzZSA3Nzp0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigic3RyaW5nX2t2X3ZhbHVlIik7YnJlYWs7Y2FzZSA3ODpyZXR1cm4iU1RSX1ZBTFVFIjtjYXNlIDc5OnRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA4MDpyZXR1cm4iU1RSIjtjYXNlIDgxOnJldHVybiJMQlJBQ0UiO2Nhc2UgODI6cmV0dXJuIlJCUkFDRSI7Y2FzZSA4MzpyZXR1cm4iU1BBQ0UiO2Nhc2UgODQ6cmV0dXJuIkVPTCI7Y2FzZSA4NTpyZXR1cm4gMTR9fSwiYW5vbnltb3VzIikscnVsZXM6Wy9eKD86LipkaXJlY3Rpb25ccytUQlteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytCVFteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytSTFteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytMUlteXG5dKikvLC9eKD86dGl0bGVcc1teI1xuO10rKS8sL14oPzphY2NEZXNjcmlwdGlvblxzW14jXG47XSspLywvXig/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/Oltcc10rKS8sL14oPzpbXG5ccl0rKS8sL14oPzokKS9dLGNvbmRpdGlvbnM6e2FjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOlsxMSwxMl0saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOls5XSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzddLGluY2x1c2l2ZTohMX0sc3RyaW5nX2t2X3ZhbHVlOntydWxlczpbNzgsNzldLGluY2x1c2l2ZTohMX0sc3RyaW5nX2t2X2tleTp7cnVsZXM6Wzc3XSxpbmNsdXNpdmU6ITF9LHN0cmluZ19rdjp7cnVsZXM6Wzc2XSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzczLDc0XSxpbmNsdXNpdmU6ITF9LGF0dHJpYnV0ZTp7cnVsZXM6WzY4LDY5LDcwLDcxLDcyLDc1LDgwXSxpbmNsdXNpdmU6ITF9LHVwZGF0ZV9sYXlvdXRfY29uZmlnOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sdXBkYXRlX3JlbF9zdHlsZTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHVwZGF0ZV9lbF9zdHlsZTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHJlbF9iOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0scmVsX3I6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxyZWxfbDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHJlbF9kOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0scmVsX3U6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxyZWxfYmk6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0scmVsOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sbm9kZV9yOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sbm9kZV9sOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sbm9kZTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGluZGV4OntydWxlczpbXSxpbmNsdXNpdmU6ITF9LHJlbF9pbmRleDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbXBvbmVudF9leHRfcXVldWU6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sY29tcG9uZW50X2V4dF9kYjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbXBvbmVudF9leHQ6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxjb21wb25lbnRfcXVldWU6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxjb21wb25lbnRfZGI6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxjb21wb25lbnQ6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxjb250YWluZXJfYm91bmRhcnk6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxjb250YWluZXJfZXh0X3F1ZXVlOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sY29udGFpbmVyX2V4dF9kYjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGNvbnRhaW5lcl9leHQ6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxjb250YWluZXJfcXVldWU6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxjb250YWluZXJfZGI6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxjb250YWluZXI6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxiaXJlbDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHN5c3RlbV9ib3VuZGFyeTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LGVudGVycHJpc2VfYm91bmRhcnk6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxib3VuZGFyeTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHN5c3RlbV9leHRfcXVldWU6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxzeXN0ZW1fZXh0X2RiOntydWxlczpbNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMX0sc3lzdGVtX2V4dDp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHN5c3RlbV9xdWV1ZTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHN5c3RlbV9kYjp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHN5c3RlbTp7cnVsZXM6WzY1LDY2LDY3LDY4XSxpbmNsdXNpdmU6ITF9LHBlcnNvbl9leHQ6e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxwZXJzb246e3J1bGVzOls2NSw2Niw2Nyw2OF0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDIsMyw0LDUsNiw4LDEwLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDgxLDgyLDgzLDg0LDg1XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIHplfSgpO3llLmxleGVyPUJlO2Z1bmN0aW9uIEhlKCl7dGhpcy55eT17fX1yZXR1cm4gbyhIZSwiUGFyc2VyIiksSGUucHJvdG90eXBlPXllLHllLlBhcnNlcj1IZSxuZXcgSGV9KCk7UnkucGFyc2VyPVJ5O0ckPVJ5fSk7dmFyIHM3LFVuLGcwPU4oKCk9PnsidXNlIHN0cmljdCI7czc9bygodCxlLHtkZXB0aDpyPTIsY2xvYmJlcjpuPSExfT17fSk9PntsZXQgaT17ZGVwdGg6cixjbG9iYmVyOm59O3JldHVybiBBcnJheS5pc0FycmF5KGUpJiYhQXJyYXkuaXNBcnJheSh0KT8oZS5mb3JFYWNoKGE9PnM3KHQsYSxpKSksdCk6QXJyYXkuaXNBcnJheShlKSYmQXJyYXkuaXNBcnJheSh0KT8oZS5mb3JFYWNoKGE9Pnt0LmluY2x1ZGVzKGEpfHx0LnB1c2goYSl9KSx0KTp0PT09dm9pZCAwfHxyPD0wP3QhPW51bGwmJnR5cGVvZiB0PT0ib2JqZWN0IiYmdHlwZW9mIGU9PSJvYmplY3QiP09iamVjdC5hc3NpZ24odCxlKTplOihlIT09dm9pZCAwJiZ0eXBlb2YgdD09Im9iamVjdCImJnR5cGVvZiBlPT0ib2JqZWN0IiYmT2JqZWN0LmtleXMoZSkuZm9yRWFjaChhPT57dHlwZW9mIGVbYV09PSJvYmplY3QiJiYodFthXT09PXZvaWQgMHx8dHlwZW9mIHRbYV09PSJvYmplY3QiKT8odFthXT09PXZvaWQgMCYmKHRbYV09QXJyYXkuaXNBcnJheShlW2FdKT9bXTp7fSksdFthXT1zNyh0W2FdLGVbYV0se2RlcHRoOnItMSxjbG9iYmVyOm59KSk6KG58fHR5cGVvZiB0W2FdIT0ib2JqZWN0IiYmdHlwZW9mIGVbYV0hPSJvYmplY3QiKSYmKHRbYV09ZVthXSl9KSx0KX0sImFzc2lnbldpdGhEZXB0aCIpLFVuPXM3fSk7dmFyIFo0LFYkLFUkPU4oKCk9PnsidXNlIHN0cmljdCI7WjQ9e21pbjp7cjowLGc6MCxiOjAsczowLGw6MCxhOjB9LG1heDp7cjoyNTUsZzoyNTUsYjoyNTUsaDozNjAsczoxMDAsbDoxMDAsYToxfSxjbGFtcDp7cjpvKHQ9PnQ+PTI1NT8yNTU6dDwwPzA6dCwiciIpLGc6byh0PT50Pj0yNTU/MjU1OnQ8MD8wOnQsImciKSxiOm8odD0+dD49MjU1PzI1NTp0PDA/MDp0LCJiIiksaDpvKHQ9PnQlMzYwLCJoIiksczpvKHQ9PnQ+PTEwMD8xMDA6dDwwPzA6dCwicyIpLGw6byh0PT50Pj0xMDA/MTAwOnQ8MD8wOnQsImwiKSxhOm8odD0+dD49MT8xOnQ8MD8wOnQsImEiKX0sdG9MaW5lYXI6byh0PT57bGV0IGU9dC8yNTU7cmV0dXJuIHQ+LjAzOTI4P01hdGgucG93KChlKy4wNTUpLzEuMDU1LDIuNCk6ZS8xMi45Mn0sInRvTGluZWFyIiksaHVlMnJnYjpvKCh0LGUscik9PihyPDAmJihyKz0xKSxyPjEmJihyLT0xKSxyPC4xNjY2NjY2NjY2NjY2NjY2Nj90KyhlLXQpKjYqcjpyPC41P2U6cjwuNjY2NjY2NjY2NjY2NjY2Nj90KyhlLXQpKiguNjY2NjY2NjY2NjY2NjY2Ni1yKSo2OnQpLCJodWUycmdiIiksaHNsMnJnYjpvKCh7aDp0LHM6ZSxsOnJ9LG4pPT57aWYoIWUpcmV0dXJuIHIqMi41NTt0Lz0zNjAsZS89MTAwLHIvPTEwMDtsZXQgaT1yPC41P3IqKDErZSk6citlLXIqZSxhPTIqci1pO3N3aXRjaChuKXtjYXNlInIiOnJldHVybiBaNC5odWUycmdiKGEsaSx0Ky4zMzMzMzMzMzMzMzMzMzMzKSoyNTU7Y2FzZSJnIjpyZXR1cm4gWjQuaHVlMnJnYihhLGksdCkqMjU1O2Nhc2UiYiI6cmV0dXJuIFo0Lmh1ZTJyZ2IoYSxpLHQtLjMzMzMzMzMzMzMzMzMzMzMpKjI1NX19LCJoc2wycmdiIikscmdiMmhzbDpvKCh7cjp0LGc6ZSxiOnJ9LG4pPT57dC89MjU1LGUvPTI1NSxyLz0yNTU7bGV0IGk9TWF0aC5tYXgodCxlLHIpLGE9TWF0aC5taW4odCxlLHIpLHM9KGkrYSkvMjtpZihuPT09ImwiKXJldHVybiBzKjEwMDtpZihpPT09YSlyZXR1cm4gMDtsZXQgbD1pLWEsdT1zPi41P2wvKDItaS1hKTpsLyhpK2EpO2lmKG49PT0icyIpcmV0dXJuIHUqMTAwO3N3aXRjaChpKXtjYXNlIHQ6cmV0dXJuKChlLXIpL2wrKGU8cj82OjApKSo2MDtjYXNlIGU6cmV0dXJuKChyLXQpL2wrMikqNjA7Y2FzZSByOnJldHVybigodC1lKS9sKzQpKjYwO2RlZmF1bHQ6cmV0dXJuLTF9fSwicmdiMmhzbCIpfSxWJD1aNH0pO3ZhciBNYmUsSCQsVyQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtNYmU9e2NsYW1wOm8oKHQsZSxyKT0+ZT5yP01hdGgubWluKGUsTWF0aC5tYXgocix0KSk6TWF0aC5taW4ocixNYXRoLm1heChlLHQpKSwiY2xhbXAiKSxyb3VuZDpvKHQ9Pk1hdGgucm91bmQodCoxZTEwKS8xZTEwLCJyb3VuZCIpfSxIJD1NYmV9KTt2YXIgSWJlLHEkLFkkPU4oKCk9PnsidXNlIHN0cmljdCI7SWJlPXtkZWMyaGV4Om8odD0+e2xldCBlPU1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpO3JldHVybiBlLmxlbmd0aD4xP2U6YDAke2V9YH0sImRlYzJoZXgiKX0scSQ9SWJlfSk7dmFyIE9iZSxqdCxLbD1OKCgpPT57InVzZSBzdHJpY3QiO1UkKCk7VyQoKTtZJCgpO09iZT17Y2hhbm5lbDpWJCxsYW5nOkgkLHVuaXQ6cSR9LGp0PU9iZX0pO3ZhciBzdSxCaSxOeT1OKCgpPT57InVzZSBzdHJpY3QiO0tsKCk7c3U9e307Zm9yKGxldCB0PTA7dDw9MjU1O3QrKylzdVt0XT1qdC51bml0LmRlYzJoZXgodCk7Qmk9e0FMTDowLFJHQjoxLEhTTDoyfX0pO3ZhciBvNyxYJCxqJD1OKCgpPT57InVzZSBzdHJpY3QiO055KCk7bzc9Y2xhc3N7c3RhdGlje28odGhpcywiVHlwZSIpfWNvbnN0cnVjdG9yKCl7dGhpcy50eXBlPUJpLkFMTH1nZXQoKXtyZXR1cm4gdGhpcy50eXBlfXNldChlKXtpZih0aGlzLnR5cGUmJnRoaXMudHlwZSE9PWUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY2hhbmdlIGJvdGggUkdCIGFuZCBIU0wgY2hhbm5lbHMgYXQgdGhlIHNhbWUgdGltZSIpO3RoaXMudHlwZT1lfXJlc2V0KCl7dGhpcy50eXBlPUJpLkFMTH1pcyhlKXtyZXR1cm4gdGhpcy50eXBlPT09ZX19LFgkPW83fSk7dmFyIGw3LEskLFEkPU4oKCk9PnsidXNlIHN0cmljdCI7S2woKTtqJCgpO055KCk7bDc9Y2xhc3N7c3RhdGlje28odGhpcywiQ2hhbm5lbHMiKX1jb25zdHJ1Y3RvcihlLHIpe3RoaXMuY29sb3I9cix0aGlzLmNoYW5nZWQ9ITEsdGhpcy5kYXRhPWUsdGhpcy50eXBlPW5ldyBYJH1zZXQoZSxyKXtyZXR1cm4gdGhpcy5jb2xvcj1yLHRoaXMuY2hhbmdlZD0hMSx0aGlzLmRhdGE9ZSx0aGlzLnR5cGUudHlwZT1CaS5BTEwsdGhpc31fZW5zdXJlSFNMKCl7bGV0IGU9dGhpcy5kYXRhLHtoOnIsczpuLGw6aX09ZTtyPT09dm9pZCAwJiYoZS5oPWp0LmNoYW5uZWwucmdiMmhzbChlLCJoIikpLG49PT12b2lkIDAmJihlLnM9anQuY2hhbm5lbC5yZ2IyaHNsKGUsInMiKSksaT09PXZvaWQgMCYmKGUubD1qdC5jaGFubmVsLnJnYjJoc2woZSwibCIpKX1fZW5zdXJlUkdCKCl7bGV0IGU9dGhpcy5kYXRhLHtyLGc6bixiOml9PWU7cj09PXZvaWQgMCYmKGUucj1qdC5jaGFubmVsLmhzbDJyZ2IoZSwiciIpKSxuPT09dm9pZCAwJiYoZS5nPWp0LmNoYW5uZWwuaHNsMnJnYihlLCJnIikpLGk9PT12b2lkIDAmJihlLmI9anQuY2hhbm5lbC5oc2wycmdiKGUsImIiKSl9Z2V0IHIoKXtsZXQgZT10aGlzLmRhdGEscj1lLnI7cmV0dXJuIXRoaXMudHlwZS5pcyhCaS5IU0wpJiZyIT09dm9pZCAwP3I6KHRoaXMuX2Vuc3VyZUhTTCgpLGp0LmNoYW5uZWwuaHNsMnJnYihlLCJyIikpfWdldCBnKCl7bGV0IGU9dGhpcy5kYXRhLHI9ZS5nO3JldHVybiF0aGlzLnR5cGUuaXMoQmkuSFNMKSYmciE9PXZvaWQgMD9yOih0aGlzLl9lbnN1cmVIU0woKSxqdC5jaGFubmVsLmhzbDJyZ2IoZSwiZyIpKX1nZXQgYigpe2xldCBlPXRoaXMuZGF0YSxyPWUuYjtyZXR1cm4hdGhpcy50eXBlLmlzKEJpLkhTTCkmJnIhPT12b2lkIDA/cjoodGhpcy5fZW5zdXJlSFNMKCksanQuY2hhbm5lbC5oc2wycmdiKGUsImIiKSl9Z2V0IGgoKXtsZXQgZT10aGlzLmRhdGEscj1lLmg7cmV0dXJuIXRoaXMudHlwZS5pcyhCaS5SR0IpJiZyIT09dm9pZCAwP3I6KHRoaXMuX2Vuc3VyZVJHQigpLGp0LmNoYW5uZWwucmdiMmhzbChlLCJoIikpfWdldCBzKCl7bGV0IGU9dGhpcy5kYXRhLHI9ZS5zO3JldHVybiF0aGlzLnR5cGUuaXMoQmkuUkdCKSYmciE9PXZvaWQgMD9yOih0aGlzLl9lbnN1cmVSR0IoKSxqdC5jaGFubmVsLnJnYjJoc2woZSwicyIpKX1nZXQgbCgpe2xldCBlPXRoaXMuZGF0YSxyPWUubDtyZXR1cm4hdGhpcy50eXBlLmlzKEJpLlJHQikmJnIhPT12b2lkIDA/cjoodGhpcy5fZW5zdXJlUkdCKCksanQuY2hhbm5lbC5yZ2IyaHNsKGUsImwiKSl9Z2V0IGEoKXtyZXR1cm4gdGhpcy5kYXRhLmF9c2V0IHIoZSl7dGhpcy50eXBlLnNldChCaS5SR0IpLHRoaXMuY2hhbmdlZD0hMCx0aGlzLmRhdGEucj1lfXNldCBnKGUpe3RoaXMudHlwZS5zZXQoQmkuUkdCKSx0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmc9ZX1zZXQgYihlKXt0aGlzLnR5cGUuc2V0KEJpLlJHQiksdGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5iPWV9c2V0IGgoZSl7dGhpcy50eXBlLnNldChCaS5IU0wpLHRoaXMuY2hhbmdlZD0hMCx0aGlzLmRhdGEuaD1lfXNldCBzKGUpe3RoaXMudHlwZS5zZXQoQmkuSFNMKSx0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLnM9ZX1zZXQgbChlKXt0aGlzLnR5cGUuc2V0KEJpLkhTTCksdGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5sPWV9c2V0IGEoZSl7dGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5hPWV9fSxLJD1sN30pO3ZhciBQYmUsdWgsTXk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtRJCgpO1BiZT1uZXcgSyQoe3I6MCxnOjAsYjowLGE6MH0sInRyYW5zcGFyZW50IiksdWg9UGJlfSk7dmFyIFokLG5kLGM3PU4oKCk9PnsidXNlIHN0cmljdCI7TXkoKTtOeSgpO1okPXtyZTovXiMoKD86W2EtZjAtOV17Mn0pezIsNH18W2EtZjAtOV17M30pJC9pLHBhcnNlOm8odD0+e2lmKHQuY2hhckNvZGVBdCgwKSE9PTM1KXJldHVybjtsZXQgZT10Lm1hdGNoKFokLnJlKTtpZighZSlyZXR1cm47bGV0IHI9ZVsxXSxuPXBhcnNlSW50KHIsMTYpLGk9ci5sZW5ndGgsYT1pJTQ9PT0wLHM9aT40LGw9cz8xOjE3LHU9cz84OjQsaD1hPzA6LTEsZj1zPzI1NToxNTtyZXR1cm4gdWguc2V0KHtyOihuPj51KihoKzMpJmYpKmwsZzoobj4+dSooaCsyKSZmKSpsLGI6KG4+PnUqKGgrMSkmZikqbCxhOmE/KG4mZikqbC8yNTU6MX0sdCl9LCJwYXJzZSIpLHN0cmluZ2lmeTpvKHQ9PntsZXR7cjplLGc6cixiOm4sYTppfT10O3JldHVybiBpPDE/YCMke3N1W01hdGgucm91bmQoZSldfSR7c3VbTWF0aC5yb3VuZChyKV19JHtzdVtNYXRoLnJvdW5kKG4pXX0ke3N1W01hdGgucm91bmQoaSoyNTUpXX1gOmAjJHtzdVtNYXRoLnJvdW5kKGUpXX0ke3N1W01hdGgucm91bmQocildfSR7c3VbTWF0aC5yb3VuZChuKV19YH0sInN0cmluZ2lmeSIpfSxuZD1aJH0pO3ZhciBKNCxJeSxKJD1OKCgpPT57InVzZSBzdHJpY3QiO0tsKCk7TXkoKTtKND17cmU6L15oc2xhP1woXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmUtP1xkKyk/KD86ZGVnfGdyYWR8cmFkfHR1cm4pPylccyo/KD86LHxccylccyo/KC0/KD86XGQrKD86XC5cZCspP3woPzpcLlxkKykpKD86ZS0/XGQrKT8lKVxzKj8oPzosfFxzKVxzKj8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplLT9cZCspPyUpKD86XHMqPyg/Oix8XC8pXHMqP1wrPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmUtP1xkKyk/KCUpPykpP1xzKj9cKSQvaSxodWVSZTovXiguKz8pKGRlZ3xncmFkfHJhZHx0dXJuKSQvaSxfaHVlMmRlZzpvKHQ9PntsZXQgZT10Lm1hdGNoKEo0Lmh1ZVJlKTtpZihlKXtsZXRbLHIsbl09ZTtzd2l0Y2gobil7Y2FzZSJncmFkIjpyZXR1cm4ganQuY2hhbm5lbC5jbGFtcC5oKHBhcnNlRmxvYXQocikqLjkpO2Nhc2UicmFkIjpyZXR1cm4ganQuY2hhbm5lbC5jbGFtcC5oKHBhcnNlRmxvYXQocikqMTgwL01hdGguUEkpO2Nhc2UidHVybiI6cmV0dXJuIGp0LmNoYW5uZWwuY2xhbXAuaChwYXJzZUZsb2F0KHIpKjM2MCl9fXJldHVybiBqdC5jaGFubmVsLmNsYW1wLmgocGFyc2VGbG9hdCh0KSl9LCJfaHVlMmRlZyIpLHBhcnNlOm8odD0+e2xldCBlPXQuY2hhckNvZGVBdCgwKTtpZihlIT09MTA0JiZlIT09NzIpcmV0dXJuO2xldCByPXQubWF0Y2goSjQucmUpO2lmKCFyKXJldHVybjtsZXRbLG4saSxhLHMsbF09cjtyZXR1cm4gdWguc2V0KHtoOko0Ll9odWUyZGVnKG4pLHM6anQuY2hhbm5lbC5jbGFtcC5zKHBhcnNlRmxvYXQoaSkpLGw6anQuY2hhbm5lbC5jbGFtcC5sKHBhcnNlRmxvYXQoYSkpLGE6cz9qdC5jaGFubmVsLmNsYW1wLmEobD9wYXJzZUZsb2F0KHMpLzEwMDpwYXJzZUZsb2F0KHMpKToxfSx0KX0sInBhcnNlIiksc3RyaW5naWZ5Om8odD0+e2xldHtoOmUsczpyLGw6bixhOml9PXQ7cmV0dXJuIGk8MT9gaHNsYSgke2p0Lmxhbmcucm91bmQoZSl9LCAke2p0Lmxhbmcucm91bmQocil9JSwgJHtqdC5sYW5nLnJvdW5kKG4pfSUsICR7aX0pYDpgaHNsKCR7anQubGFuZy5yb3VuZChlKX0sICR7anQubGFuZy5yb3VuZChyKX0lLCAke2p0Lmxhbmcucm91bmQobil9JSlgfSwic3RyaW5naWZ5Iil9LEl5PUo0fSk7dmFyIGUzLHU3LGV6PU4oKCk9PnsidXNlIHN0cmljdCI7YzcoKTtlMz17Y29sb3JzOnthbGljZWJsdWU6IiNmMGY4ZmYiLGFudGlxdWV3aGl0ZToiI2ZhZWJkNyIsYXF1YToiIzAwZmZmZiIsYXF1YW1hcmluZToiIzdmZmZkNCIsYXp1cmU6IiNmMGZmZmYiLGJlaWdlOiIjZjVmNWRjIixiaXNxdWU6IiNmZmU0YzQiLGJsYWNrOiIjMDAwMDAwIixibGFuY2hlZGFsbW9uZDoiI2ZmZWJjZCIsYmx1ZToiIzAwMDBmZiIsYmx1ZXZpb2xldDoiIzhhMmJlMiIsYnJvd246IiNhNTJhMmEiLGJ1cmx5d29vZDoiI2RlYjg4NyIsY2FkZXRibHVlOiIjNWY5ZWEwIixjaGFydHJldXNlOiIjN2ZmZjAwIixjaG9jb2xhdGU6IiNkMjY5MWUiLGNvcmFsOiIjZmY3ZjUwIixjb3JuZmxvd2VyYmx1ZToiIzY0OTVlZCIsY29ybnNpbGs6IiNmZmY4ZGMiLGNyaW1zb246IiNkYzE0M2MiLGN5YW5hcXVhOiIjMDBmZmZmIixkYXJrYmx1ZToiIzAwMDA4YiIsZGFya2N5YW46IiMwMDhiOGIiLGRhcmtnb2xkZW5yb2Q6IiNiODg2MGIiLGRhcmtncmF5OiIjYTlhOWE5IixkYXJrZ3JlZW46IiMwMDY0MDAiLGRhcmtncmV5OiIjYTlhOWE5IixkYXJra2hha2k6IiNiZGI3NmIiLGRhcmttYWdlbnRhOiIjOGIwMDhiIixkYXJrb2xpdmVncmVlbjoiIzU1NmIyZiIsZGFya29yYW5nZToiI2ZmOGMwMCIsZGFya29yY2hpZDoiIzk5MzJjYyIsZGFya3JlZDoiIzhiMDAwMCIsZGFya3NhbG1vbjoiI2U5OTY3YSIsZGFya3NlYWdyZWVuOiIjOGZiYzhmIixkYXJrc2xhdGVibHVlOiIjNDgzZDhiIixkYXJrc2xhdGVncmF5OiIjMmY0ZjRmIixkYXJrc2xhdGVncmV5OiIjMmY0ZjRmIixkYXJrdHVycXVvaXNlOiIjMDBjZWQxIixkYXJrdmlvbGV0OiIjOTQwMGQzIixkZWVwcGluazoiI2ZmMTQ5MyIsZGVlcHNreWJsdWU6IiMwMGJmZmYiLGRpbWdyYXk6IiM2OTY5NjkiLGRpbWdyZXk6IiM2OTY5NjkiLGRvZGdlcmJsdWU6IiMxZTkwZmYiLGZpcmVicmljazoiI2IyMjIyMiIsZmxvcmFsd2hpdGU6IiNmZmZhZjAiLGZvcmVzdGdyZWVuOiIjMjI4YjIyIixmdWNoc2lhOiIjZmYwMGZmIixnYWluc2Jvcm86IiNkY2RjZGMiLGdob3N0d2hpdGU6IiNmOGY4ZmYiLGdvbGQ6IiNmZmQ3MDAiLGdvbGRlbnJvZDoiI2RhYTUyMCIsZ3JheToiIzgwODA4MCIsZ3JlZW46IiMwMDgwMDAiLGdyZWVueWVsbG93OiIjYWRmZjJmIixncmV5OiIjODA4MDgwIixob25leWRldzoiI2YwZmZmMCIsaG90cGluazoiI2ZmNjliNCIsaW5kaWFucmVkOiIjY2Q1YzVjIixpbmRpZ286IiM0YjAwODIiLGl2b3J5OiIjZmZmZmYwIixraGFraToiI2YwZTY4YyIsbGF2ZW5kZXI6IiNlNmU2ZmEiLGxhdmVuZGVyYmx1c2g6IiNmZmYwZjUiLGxhd25ncmVlbjoiIzdjZmMwMCIsbGVtb25jaGlmZm9uOiIjZmZmYWNkIixsaWdodGJsdWU6IiNhZGQ4ZTYiLGxpZ2h0Y29yYWw6IiNmMDgwODAiLGxpZ2h0Y3lhbjoiI2UwZmZmZiIsbGlnaHRnb2xkZW5yb2R5ZWxsb3c6IiNmYWZhZDIiLGxpZ2h0Z3JheToiI2QzZDNkMyIsbGlnaHRncmVlbjoiIzkwZWU5MCIsbGlnaHRncmV5OiIjZDNkM2QzIixsaWdodHBpbms6IiNmZmI2YzEiLGxpZ2h0c2FsbW9uOiIjZmZhMDdhIixsaWdodHNlYWdyZWVuOiIjMjBiMmFhIixsaWdodHNreWJsdWU6IiM4N2NlZmEiLGxpZ2h0c2xhdGVncmF5OiIjNzc4ODk5IixsaWdodHNsYXRlZ3JleToiIzc3ODg5OSIsbGlnaHRzdGVlbGJsdWU6IiNiMGM0ZGUiLGxpZ2h0eWVsbG93OiIjZmZmZmUwIixsaW1lOiIjMDBmZjAwIixsaW1lZ3JlZW46IiMzMmNkMzIiLGxpbmVuOiIjZmFmMGU2IixtYWdlbnRhOiIjZmYwMGZmIixtYXJvb246IiM4MDAwMDAiLG1lZGl1bWFxdWFtYXJpbmU6IiM2NmNkYWEiLG1lZGl1bWJsdWU6IiMwMDAwY2QiLG1lZGl1bW9yY2hpZDoiI2JhNTVkMyIsbWVkaXVtcHVycGxlOiIjOTM3MGRiIixtZWRpdW1zZWFncmVlbjoiIzNjYjM3MSIsbWVkaXVtc2xhdGVibHVlOiIjN2I2OGVlIixtZWRpdW1zcHJpbmdncmVlbjoiIzAwZmE5YSIsbWVkaXVtdHVycXVvaXNlOiIjNDhkMWNjIixtZWRpdW12aW9sZXRyZWQ6IiNjNzE1ODUiLG1pZG5pZ2h0Ymx1ZToiIzE5MTk3MCIsbWludGNyZWFtOiIjZjVmZmZhIixtaXN0eXJvc2U6IiNmZmU0ZTEiLG1vY2Nhc2luOiIjZmZlNGI1IixuYXZham93aGl0ZToiI2ZmZGVhZCIsbmF2eToiIzAwMDA4MCIsb2xkbGFjZToiI2ZkZjVlNiIsb2xpdmU6IiM4MDgwMDAiLG9saXZlZHJhYjoiIzZiOGUyMyIsb3JhbmdlOiIjZmZhNTAwIixvcmFuZ2VyZWQ6IiNmZjQ1MDAiLG9yY2hpZDoiI2RhNzBkNiIscGFsZWdvbGRlbnJvZDoiI2VlZThhYSIscGFsZWdyZWVuOiIjOThmYjk4IixwYWxldHVycXVvaXNlOiIjYWZlZWVlIixwYWxldmlvbGV0cmVkOiIjZGI3MDkzIixwYXBheWF3aGlwOiIjZmZlZmQ1IixwZWFjaHB1ZmY6IiNmZmRhYjkiLHBlcnU6IiNjZDg1M2YiLHBpbms6IiNmZmMwY2IiLHBsdW06IiNkZGEwZGQiLHBvd2RlcmJsdWU6IiNiMGUwZTYiLHB1cnBsZToiIzgwMDA4MCIscmViZWNjYXB1cnBsZToiIzY2MzM5OSIscmVkOiIjZmYwMDAwIixyb3N5YnJvd246IiNiYzhmOGYiLHJveWFsYmx1ZToiIzQxNjllMSIsc2FkZGxlYnJvd246IiM4YjQ1MTMiLHNhbG1vbjoiI2ZhODA3MiIsc2FuZHlicm93bjoiI2Y0YTQ2MCIsc2VhZ3JlZW46IiMyZThiNTciLHNlYXNoZWxsOiIjZmZmNWVlIixzaWVubmE6IiNhMDUyMmQiLHNpbHZlcjoiI2MwYzBjMCIsc2t5Ymx1ZToiIzg3Y2VlYiIsc2xhdGVibHVlOiIjNmE1YWNkIixzbGF0ZWdyYXk6IiM3MDgwOTAiLHNsYXRlZ3JleToiIzcwODA5MCIsc25vdzoiI2ZmZmFmYSIsc3ByaW5nZ3JlZW46IiMwMGZmN2YiLHRhbjoiI2QyYjQ4YyIsdGVhbDoiIzAwODA4MCIsdGhpc3RsZToiI2Q4YmZkOCIsdHJhbnNwYXJlbnQ6IiMwMDAwMDAwMCIsdHVycXVvaXNlOiIjNDBlMGQwIix2aW9sZXQ6IiNlZTgyZWUiLHdoZWF0OiIjZjVkZWIzIix3aGl0ZToiI2ZmZmZmZiIsd2hpdGVzbW9rZToiI2Y1ZjVmNSIseWVsbG93OiIjZmZmZjAwIix5ZWxsb3dncmVlbjoiIzlhY2QzMiJ9LHBhcnNlOm8odD0+e3Q9dC50b0xvd2VyQ2FzZSgpO2xldCBlPWUzLmNvbG9yc1t0XTtpZihlKXJldHVybiBuZC5wYXJzZShlKX0sInBhcnNlIiksc3RyaW5naWZ5Om8odD0+e2xldCBlPW5kLnN0cmluZ2lmeSh0KTtmb3IobGV0IHIgaW4gZTMuY29sb3JzKWlmKGUzLmNvbG9yc1tyXT09PWUpcmV0dXJuIHJ9LCJzdHJpbmdpZnkiKX0sdTc9ZTN9KTt2YXIgdHosT3kscno9TigoKT0+eyJ1c2Ugc3RyaWN0IjtLbCgpO015KCk7dHo9e3JlOi9ecmdiYT9cKFxzKj8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplXGQrKT8oJT8pKVxzKj8oPzosfFxzKVxzKj8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplXGQrKT8oJT8pKVxzKj8oPzosfFxzKVxzKj8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplXGQrKT8oJT8pKSg/OlxzKj8oPzosfFwvKVxzKj9cKz8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplXGQrKT8oJT8pKSk/XHMqP1wpJC9pLHBhcnNlOm8odD0+e2xldCBlPXQuY2hhckNvZGVBdCgwKTtpZihlIT09MTE0JiZlIT09ODIpcmV0dXJuO2xldCByPXQubWF0Y2godHoucmUpO2lmKCFyKXJldHVybjtsZXRbLG4saSxhLHMsbCx1LGgsZl09cjtyZXR1cm4gdWguc2V0KHtyOmp0LmNoYW5uZWwuY2xhbXAucihpP3BhcnNlRmxvYXQobikqMi41NTpwYXJzZUZsb2F0KG4pKSxnOmp0LmNoYW5uZWwuY2xhbXAuZyhzP3BhcnNlRmxvYXQoYSkqMi41NTpwYXJzZUZsb2F0KGEpKSxiOmp0LmNoYW5uZWwuY2xhbXAuYih1P3BhcnNlRmxvYXQobCkqMi41NTpwYXJzZUZsb2F0KGwpKSxhOmg/anQuY2hhbm5lbC5jbGFtcC5hKGY/cGFyc2VGbG9hdChoKS8xMDA6cGFyc2VGbG9hdChoKSk6MX0sdCl9LCJwYXJzZSIpLHN0cmluZ2lmeTpvKHQ9PntsZXR7cjplLGc6cixiOm4sYTppfT10O3JldHVybiBpPDE/YHJnYmEoJHtqdC5sYW5nLnJvdW5kKGUpfSwgJHtqdC5sYW5nLnJvdW5kKHIpfSwgJHtqdC5sYW5nLnJvdW5kKG4pfSwgJHtqdC5sYW5nLnJvdW5kKGkpfSlgOmByZ2IoJHtqdC5sYW5nLnJvdW5kKGUpfSwgJHtqdC5sYW5nLnJvdW5kKHIpfSwgJHtqdC5sYW5nLnJvdW5kKG4pfSlgfSwic3RyaW5naWZ5Iil9LE95PXR6fSk7dmFyIEJiZSxGaSxvdT1OKCgpPT57InVzZSBzdHJpY3QiO2M3KCk7SiQoKTtleigpO3J6KCk7TnkoKTtCYmU9e2Zvcm1hdDp7a2V5d29yZDp1NyxoZXg6bmQscmdiOk95LHJnYmE6T3ksaHNsOkl5LGhzbGE6SXl9LHBhcnNlOm8odD0+e2lmKHR5cGVvZiB0IT0ic3RyaW5nIilyZXR1cm4gdDtsZXQgZT1uZC5wYXJzZSh0KXx8T3kucGFyc2UodCl8fEl5LnBhcnNlKHQpfHx1Ny5wYXJzZSh0KTtpZihlKXJldHVybiBlO3Rocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgY29sb3IgZm9ybWF0OiAiJHt0fSJgKX0sInBhcnNlIiksc3RyaW5naWZ5Om8odD0+IXQuY2hhbmdlZCYmdC5jb2xvcj90LmNvbG9yOnQudHlwZS5pcyhCaS5IU0wpfHx0LmRhdGEucj09PXZvaWQgMD9JeS5zdHJpbmdpZnkodCk6dC5hPDF8fCFOdW1iZXIuaXNJbnRlZ2VyKHQucil8fCFOdW1iZXIuaXNJbnRlZ2VyKHQuZyl8fCFOdW1iZXIuaXNJbnRlZ2VyKHQuYik/T3kuc3RyaW5naWZ5KHQpOm5kLnN0cmluZ2lmeSh0KSwic3RyaW5naWZ5Iil9LEZpPUJiZX0pO3ZhciBGYmUsdDMsaDc9TigoKT0+eyJ1c2Ugc3RyaWN0IjtLbCgpO291KCk7RmJlPW8oKHQsZSk9PntsZXQgcj1GaS5wYXJzZSh0KTtmb3IobGV0IG4gaW4gZSlyW25dPWp0LmNoYW5uZWwuY2xhbXBbbl0oZVtuXSk7cmV0dXJuIEZpLnN0cmluZ2lmeShyKX0sImNoYW5nZSIpLHQzPUZiZX0pO3ZhciAkYmUsUWEsZjc9TigoKT0+eyJ1c2Ugc3RyaWN0IjtLbCgpO015KCk7b3UoKTtoNygpOyRiZT1vKCh0LGUscj0wLG49MSk9PntpZih0eXBlb2YgdCE9Im51bWJlciIpcmV0dXJuIHQzKHQse2E6ZX0pO2xldCBpPXVoLnNldCh7cjpqdC5jaGFubmVsLmNsYW1wLnIodCksZzpqdC5jaGFubmVsLmNsYW1wLmcoZSksYjpqdC5jaGFubmVsLmNsYW1wLmIociksYTpqdC5jaGFubmVsLmNsYW1wLmEobil9KTtyZXR1cm4gRmkuc3RyaW5naWZ5KGkpfSwicmdiYSIpLFFhPSRiZX0pO3ZhciB6YmUsaWQsbno9TigoKT0+eyJ1c2Ugc3RyaWN0IjtLbCgpO291KCk7emJlPW8oKHQsZSk9Pmp0Lmxhbmcucm91bmQoRmkucGFyc2UodClbZV0pLCJjaGFubmVsIiksaWQ9emJlfSk7dmFyIEdiZSxpeixhej1OKCgpPT57InVzZSBzdHJpY3QiO0tsKCk7b3UoKTtHYmU9byh0PT57bGV0e3I6ZSxnOnIsYjpufT1GaS5wYXJzZSh0KSxpPS4yMTI2Kmp0LmNoYW5uZWwudG9MaW5lYXIoZSkrLjcxNTIqanQuY2hhbm5lbC50b0xpbmVhcihyKSsuMDcyMipqdC5jaGFubmVsLnRvTGluZWFyKG4pO3JldHVybiBqdC5sYW5nLnJvdW5kKGkpfSwibHVtaW5hbmNlIiksaXo9R2JlfSk7dmFyIFZiZSxzeixvej1OKCgpPT57InVzZSBzdHJpY3QiO2F6KCk7VmJlPW8odD0+aXoodCk+PS41LCJpc0xpZ2h0Iiksc3o9VmJlfSk7dmFyIFViZSxsYSxsej1OKCgpPT57InVzZSBzdHJpY3QiO296KCk7VWJlPW8odD0+IXN6KHQpLCJpc0RhcmsiKSxsYT1VYmV9KTt2YXIgSGJlLHIzLGQ3PU4oKCk9PnsidXNlIHN0cmljdCI7S2woKTtvdSgpO0hiZT1vKCh0LGUscik9PntsZXQgbj1GaS5wYXJzZSh0KSxpPW5bZV0sYT1qdC5jaGFubmVsLmNsYW1wW2VdKGkrcik7cmV0dXJuIGkhPT1hJiYobltlXT1hKSxGaS5zdHJpbmdpZnkobil9LCJhZGp1c3RDaGFubmVsIikscjM9SGJlfSk7dmFyIFdiZSxMdCxjej1OKCgpPT57InVzZSBzdHJpY3QiO2Q3KCk7V2JlPW8oKHQsZSk9PnIzKHQsImwiLGUpLCJsaWdodGVuIiksTHQ9V2JlfSk7dmFyIHFiZSxPdCx1ej1OKCgpPT57InVzZSBzdHJpY3QiO2Q3KCk7cWJlPW8oKHQsZSk9PnIzKHQsImwiLC1lKSwiZGFya2VuIiksT3Q9cWJlfSk7dmFyIFliZSxNZSxoej1OKCgpPT57InVzZSBzdHJpY3QiO291KCk7aDcoKTtZYmU9bygodCxlKT0+e2xldCByPUZpLnBhcnNlKHQpLG49e307Zm9yKGxldCBpIGluIGUpZVtpXSYmKG5baV09cltpXStlW2ldKTtyZXR1cm4gdDModCxuKX0sImFkanVzdCIpLE1lPVliZX0pO3ZhciBYYmUsZnosZHo9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvdSgpO2Y3KCk7WGJlPW8oKHQsZSxyPTUwKT0+e2xldHtyOm4sZzppLGI6YSxhOnN9PUZpLnBhcnNlKHQpLHtyOmwsZzp1LGI6aCxhOmZ9PUZpLnBhcnNlKGUpLGQ9ci8xMDAscD1kKjItMSxtPXMtZix5PSgocCptPT09LTE/cDoocCttKS8oMStwKm0pKSsxKS8yLHY9MS15LHg9bip5K2wqdixiPWkqeSt1KnYsVD1hKnkraCp2LFM9cypkK2YqKDEtZCk7cmV0dXJuIFFhKHgsYixULFMpfSwibWl4IiksZno9WGJlfSk7dmFyIGpiZSx3dCxwej1OKCgpPT57InVzZSBzdHJpY3QiO291KCk7ZHooKTtqYmU9bygodCxlPTEwMCk9PntsZXQgcj1GaS5wYXJzZSh0KTtyZXR1cm4gci5yPTI1NS1yLnIsci5nPTI1NS1yLmcsci5iPTI1NS1yLmIsZnoocix0LGUpfSwiaW52ZXJ0Iiksd3Q9amJlfSk7dmFyIG16PU4oKCk9PnsidXNlIHN0cmljdCI7ZjcoKTtueigpO2x6KCk7Y3ooKTt1eigpO2h6KCk7cHooKX0pO3ZhciBLcz1OKCgpPT57InVzZSBzdHJpY3QiO216KCl9KTt2YXIgaGgsZmgsUHk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtoaD0iI2ZmZmZmZiIsZmg9IiNmMmYyZjIifSk7dmFyIFNpLHkwPU4oKCk9PnsidXNlIHN0cmljdCI7S3MoKTtTaT1vKCh0LGUpPT5lP01lKHQse3M6LTQwLGw6MTB9KTpNZSh0LHtzOi00MCxsOi0xMH0pLCJta0JvcmRlciIpfSk7dmFyIG03LGd6LHl6PU4oKCk9PnsidXNlIHN0cmljdCI7S3MoKTtQeSgpO3kwKCk7bTc9Y2xhc3N7c3RhdGlje28odGhpcywiVGhlbWUiKX1jb25zdHJ1Y3Rvcigpe3RoaXMuYmFja2dyb3VuZD0iI2Y0ZjRmNCIsdGhpcy5wcmltYXJ5Q29sb3I9IiNmZmY0ZGQiLHRoaXMubm90ZUJrZ0NvbG9yPSIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9IiMzMzMiLHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ9MTIsdGhpcy5mb250RmFtaWx5PScidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLHRoaXMuZm9udFNpemU9IjE2cHgifXVwZGF0ZUNvbG9ycygpe2lmKHRoaXMucHJpbWFyeVRleHRDb2xvcj10aGlzLnByaW1hcnlUZXh0Q29sb3J8fCh0aGlzLmRhcmtNb2RlPyIjZWVlIjoiIzMzMyIpLHRoaXMuc2Vjb25kYXJ5Q29sb3I9dGhpcy5zZWNvbmRhcnlDb2xvcnx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTEyMH0pLHRoaXMudGVydGlhcnlDb2xvcj10aGlzLnRlcnRpYXJ5Q29sb3J8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjE4MCxsOjV9KSx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcj10aGlzLnByaW1hcnlCb3JkZXJDb2xvcnx8U2kodGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcj10aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yfHxTaSh0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcj10aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3J8fFNpKHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLm5vdGVCb3JkZXJDb2xvcj10aGlzLm5vdGVCb3JkZXJDb2xvcnx8U2kodGhpcy5ub3RlQmtnQ29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5ub3RlQmtnQ29sb3I9dGhpcy5ub3RlQmtnQ29sb3J8fCIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9dGhpcy5ub3RlVGV4dENvbG9yfHwiIzMzMyIsdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I9dGhpcy5zZWNvbmRhcnlUZXh0Q29sb3J8fHd0KHRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMudGVydGlhcnlUZXh0Q29sb3I9dGhpcy50ZXJ0aWFyeVRleHRDb2xvcnx8d3QodGhpcy50ZXJ0aWFyeUNvbG9yKSx0aGlzLmxpbmVDb2xvcj10aGlzLmxpbmVDb2xvcnx8d3QodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLmFycm93aGVhZENvbG9yPXRoaXMuYXJyb3doZWFkQ29sb3J8fHd0KHRoaXMuYmFja2dyb3VuZCksdGhpcy50ZXh0Q29sb3I9dGhpcy50ZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLmJvcmRlcjI9dGhpcy5ib3JkZXIyfHx0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3IsdGhpcy5ub2RlQmtnPXRoaXMubm9kZUJrZ3x8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5tYWluQmtnPXRoaXMubWFpbkJrZ3x8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5ub2RlQm9yZGVyPXRoaXMubm9kZUJvcmRlcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5jbHVzdGVyQmtnPXRoaXMuY2x1c3RlckJrZ3x8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuY2x1c3RlckJvcmRlcj10aGlzLmNsdXN0ZXJCb3JkZXJ8fHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9dGhpcy5kZWZhdWx0TGlua0NvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnRpdGxlQ29sb3I9dGhpcy50aXRsZUNvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZD10aGlzLmVkZ2VMYWJlbEJhY2tncm91bmR8fCh0aGlzLmRhcmtNb2RlP090KHRoaXMuc2Vjb25kYXJ5Q29sb3IsMzApOnRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMubm9kZVRleHRDb2xvcj10aGlzLm5vZGVUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLmFjdG9yQm9yZGVyPXRoaXMuYWN0b3JCb3JkZXJ8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuYWN0b3JCa2c9dGhpcy5hY3RvckJrZ3x8dGhpcy5tYWluQmtnLHRoaXMuYWN0b3JUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuYWN0b3JMaW5lQ29sb3I9dGhpcy5hY3RvckxpbmVDb2xvcnx8dGhpcy5hY3RvckJvcmRlcix0aGlzLmxhYmVsQm94QmtnQ29sb3I9dGhpcy5sYWJlbEJveEJrZ0NvbG9yfHx0aGlzLmFjdG9yQmtnLHRoaXMuc2lnbmFsQ29sb3I9dGhpcy5zaWduYWxDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5zaWduYWxUZXh0Q29sb3I9dGhpcy5zaWduYWxUZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcj10aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3J8fHRoaXMuYWN0b3JCb3JkZXIsdGhpcy5sYWJlbFRleHRDb2xvcj10aGlzLmxhYmVsVGV4dENvbG9yfHx0aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMubG9vcFRleHRDb2xvcj10aGlzLmxvb3BUZXh0Q29sb3J8fHRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5hY3RpdmF0aW9uQm9yZGVyQ29sb3I9dGhpcy5hY3RpdmF0aW9uQm9yZGVyQ29sb3J8fE90KHRoaXMuc2Vjb25kYXJ5Q29sb3IsMTApLHRoaXMuYWN0aXZhdGlvbkJrZ0NvbG9yPXRoaXMuYWN0aXZhdGlvbkJrZ0NvbG9yfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvcj10aGlzLnNlcXVlbmNlTnVtYmVyQ29sb3J8fHd0KHRoaXMubGluZUNvbG9yKSx0aGlzLnNlY3Rpb25Ca2dDb2xvcj10aGlzLnNlY3Rpb25Ca2dDb2xvcnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPXRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yfHwid2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPXRoaXMuc2VjdGlvbkJrZ0NvbG9yfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj10aGlzLnNlY3Rpb25Ca2dDb2xvcjJ8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZXhjbHVkZUJrZ0NvbG9yPXRoaXMuZXhjbHVkZUJrZ0NvbG9yfHwiI2VlZWVlZSIsdGhpcy50YXNrQm9yZGVyQ29sb3I9dGhpcy50YXNrQm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMudGFza0JrZ0NvbG9yPXRoaXMudGFza0JrZ0NvbG9yfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj10aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcnx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9dGhpcy5hY3RpdmVUYXNrQmtnQ29sb3J8fEx0KHRoaXMucHJpbWFyeUNvbG9yLDIzKSx0aGlzLmdyaWRDb2xvcj10aGlzLmdyaWRDb2xvcnx8ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JrZ0NvbG9yPXRoaXMuZG9uZVRhc2tCa2dDb2xvcnx8ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPXRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcnx8ImdyZXkiLHRoaXMuY3JpdEJvcmRlckNvbG9yPXRoaXMuY3JpdEJvcmRlckNvbG9yfHwiI2ZmODg4OCIsdGhpcy5jcml0QmtnQ29sb3I9dGhpcy5jcml0QmtnQ29sb3J8fCJyZWQiLHRoaXMudG9kYXlMaW5lQ29sb3I9dGhpcy50b2RheUxpbmVDb2xvcnx8InJlZCIsdGhpcy52ZXJ0TGluZUNvbG9yPXRoaXMudmVydExpbmVDb2xvcnx8Im5hdnkiLHRoaXMudGFza1RleHRDb2xvcj10aGlzLnRhc2tUZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9dGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMudGFza1RleHRDb2xvcj10aGlzLnRhc2tUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPXRoaXMudGFza1RleHREYXJrQ29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcj10aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3J8fCIjMDAzMTYzIix0aGlzLnBlcnNvbkJvcmRlcj10aGlzLnBlcnNvbkJvcmRlcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5wZXJzb25Ca2c9dGhpcy5wZXJzb25Ca2d8fHRoaXMubWFpbkJrZyx0aGlzLmRhcmtNb2RlPyh0aGlzLnJvd09kZD10aGlzLnJvd09kZHx8T3QodGhpcy5tYWluQmtnLDUpfHwiI2ZmZmZmZiIsdGhpcy5yb3dFdmVuPXRoaXMucm93RXZlbnx8T3QodGhpcy5tYWluQmtnLDEwKSk6KHRoaXMucm93T2RkPXRoaXMucm93T2RkfHxMdCh0aGlzLm1haW5Ca2csNzUpfHwiI2ZmZmZmZiIsdGhpcy5yb3dFdmVuPXRoaXMucm93RXZlbnx8THQodGhpcy5tYWluQmtnLDUpKSx0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLmNvbXBvc2l0ZUJvcmRlcj10aGlzLmNvbXBvc2l0ZUJvcmRlcnx8dGhpcy5ub2RlQm9yZGVyLHRoaXMuaW5uZXJFbmRCYWNrZ3JvdW5kPXRoaXMubm9kZUJvcmRlcix0aGlzLmVycm9yQmtnQ29sb3I9dGhpcy5lcnJvckJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5lcnJvclRleHRDb2xvcj10aGlzLmVycm9yVGV4dENvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuY1NjYWxlMD10aGlzLmNTY2FsZTB8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuY1NjYWxlMT10aGlzLmNTY2FsZTF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jU2NhbGUyPXRoaXMuY1NjYWxlMnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuY1NjYWxlMz10aGlzLmNTY2FsZTN8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMwfSksdGhpcy5jU2NhbGU0PXRoaXMuY1NjYWxlNHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSx0aGlzLmNTY2FsZTU9dGhpcy5jU2NhbGU1fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDo5MH0pLHRoaXMuY1NjYWxlNj10aGlzLmNTY2FsZTZ8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuY1NjYWxlNz10aGlzLmNTY2FsZTd8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjE1MH0pLHRoaXMuY1NjYWxlOD10aGlzLmNTY2FsZTh8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjIxMCxsOjE1MH0pLHRoaXMuY1NjYWxlOT10aGlzLmNTY2FsZTl8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjI3MH0pLHRoaXMuY1NjYWxlMTA9dGhpcy5jU2NhbGUxMHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MzAwfSksdGhpcy5jU2NhbGUxMT10aGlzLmNTY2FsZTExfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDozMzB9KSx0aGlzLmRhcmtNb2RlKWZvcihsZXQgcj0wO3I8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtyKyspdGhpc1siY1NjYWxlIityXT1PdCh0aGlzWyJjU2NhbGUiK3JdLDc1KTtlbHNlIGZvcihsZXQgcj0wO3I8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtyKyspdGhpc1siY1NjYWxlIityXT1PdCh0aGlzWyJjU2NhbGUiK3JdLDI1KTtmb3IobGV0IHI9MDtyPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7cisrKXRoaXNbImNTY2FsZUludiIrcl09dGhpc1siY1NjYWxlSW52IityXXx8d3QodGhpc1siY1NjYWxlIityXSk7Zm9yKGxldCByPTA7cjx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO3IrKyl0aGlzLmRhcmtNb2RlP3RoaXNbImNTY2FsZVBlZXIiK3JdPXRoaXNbImNTY2FsZVBlZXIiK3JdfHxMdCh0aGlzWyJjU2NhbGUiK3JdLDEwKTp0aGlzWyJjU2NhbGVQZWVyIityXT10aGlzWyJjU2NhbGVQZWVyIityXXx8T3QodGhpc1siY1NjYWxlIityXSwxMCk7dGhpcy5zY2FsZUxhYmVsQ29sb3I9dGhpcy5zY2FsZUxhYmVsQ29sb3J8fHRoaXMubGFiZWxUZXh0Q29sb3I7Zm9yKGxldCByPTA7cjx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO3IrKyl0aGlzWyJjU2NhbGVMYWJlbCIrcl09dGhpc1siY1NjYWxlTGFiZWwiK3JdfHx0aGlzLnNjYWxlTGFiZWxDb2xvcjtsZXQgZT10aGlzLmRhcmtNb2RlPy00Oi0xO2ZvcihsZXQgcj0wO3I8NTtyKyspdGhpc1sic3VyZmFjZSIrcl09dGhpc1sic3VyZmFjZSIrcl18fE1lKHRoaXMubWFpbkJrZyx7aDoxODAsczotMTUsbDplKig1K3IqMyl9KSx0aGlzWyJzdXJmYWNlUGVlciIrcl09dGhpc1sic3VyZmFjZVBlZXIiK3JdfHxNZSh0aGlzLm1haW5Ca2cse2g6MTgwLHM6LTE1LGw6ZSooOCtyKjMpfSk7dGhpcy5jbGFzc1RleHQ9dGhpcy5jbGFzc1RleHR8fHRoaXMudGV4dENvbG9yLHRoaXMuZmlsbFR5cGUwPXRoaXMuZmlsbFR5cGUwfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmZpbGxUeXBlMT10aGlzLmZpbGxUeXBlMXx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmZpbGxUeXBlMj10aGlzLmZpbGxUeXBlMnx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlMz10aGlzLmZpbGxUeXBlM3x8TWUodGhpcy5zZWNvbmRhcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGU0PXRoaXMuZmlsbFR5cGU0fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNT10aGlzLmZpbGxUeXBlNXx8TWUodGhpcy5zZWNvbmRhcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNj10aGlzLmZpbGxUeXBlNnx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5maWxsVHlwZTc9dGhpcy5maWxsVHlwZTd8fE1lKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5waWUxPXRoaXMucGllMXx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5waWUyPXRoaXMucGllMnx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLnBpZTM9dGhpcy5waWUzfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5waWU0PXRoaXMucGllNHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2w6LTEwfSksdGhpcy5waWU1PXRoaXMucGllNXx8TWUodGhpcy5zZWNvbmRhcnlDb2xvcix7bDotMTB9KSx0aGlzLnBpZTY9dGhpcy5waWU2fHxNZSh0aGlzLnRlcnRpYXJ5Q29sb3Ise2w6LTEwfSksdGhpcy5waWU3PXRoaXMucGllN3x8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjAsbDotMTB9KSx0aGlzLnBpZTg9dGhpcy5waWU4fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjAsbDotMTB9KSx0aGlzLnBpZTk9dGhpcy5waWU5fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDowfSksdGhpcy5waWUxMD10aGlzLnBpZTEwfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDo2MCxsOi0yMH0pLHRoaXMucGllMTE9dGhpcy5waWUxMXx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwLGw6LTIwfSksdGhpcy5waWUxMj10aGlzLnBpZTEyfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDotMTB9KSx0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZVdpZHRoPXRoaXMucGllT3V0ZXJTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZUNvbG9yPXRoaXMucGllT3V0ZXJTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZU9wYWNpdHk9dGhpcy5waWVPcGFjaXR5fHwiMC43Iix0aGlzLnJhZGFyPXtheGlzQ29sb3I6dGhpcy5yYWRhcj8uYXhpc0NvbG9yfHx0aGlzLmxpbmVDb2xvcixheGlzU3Ryb2tlV2lkdGg6dGhpcy5yYWRhcj8uYXhpc1N0cm9rZVdpZHRofHwyLGF4aXNMYWJlbEZvbnRTaXplOnRoaXMucmFkYXI/LmF4aXNMYWJlbEZvbnRTaXplfHwxMixjdXJ2ZU9wYWNpdHk6dGhpcy5yYWRhcj8uY3VydmVPcGFjaXR5fHwuNSxjdXJ2ZVN0cm9rZVdpZHRoOnRoaXMucmFkYXI/LmN1cnZlU3Ryb2tlV2lkdGh8fDIsZ3JhdGljdWxlQ29sb3I6dGhpcy5yYWRhcj8uZ3JhdGljdWxlQ29sb3J8fCIjREVERURFIixncmF0aWN1bGVTdHJva2VXaWR0aDp0aGlzLnJhZGFyPy5ncmF0aWN1bGVTdHJva2VXaWR0aHx8MSxncmF0aWN1bGVPcGFjaXR5OnRoaXMucmFkYXI/LmdyYXRpY3VsZU9wYWNpdHl8fC4zLGxlZ2VuZEJveFNpemU6dGhpcy5yYWRhcj8ubGVnZW5kQm94U2l6ZXx8MTIsbGVnZW5kRm9udFNpemU6dGhpcy5yYWRhcj8ubGVnZW5kRm9udFNpemV8fDEyfSx0aGlzLmFyY2hFZGdlQ29sb3I9dGhpcy5hcmNoRWRnZUNvbG9yfHwiIzc3NyIsdGhpcy5hcmNoRWRnZUFycm93Q29sb3I9dGhpcy5hcmNoRWRnZUFycm93Q29sb3J8fCIjNzc3Iix0aGlzLmFyY2hFZGdlV2lkdGg9dGhpcy5hcmNoRWRnZVdpZHRofHwiMyIsdGhpcy5hcmNoR3JvdXBCb3JkZXJDb2xvcj10aGlzLmFyY2hHcm91cEJvcmRlckNvbG9yfHwiIzAwMCIsdGhpcy5hcmNoR3JvdXBCb3JkZXJXaWR0aD10aGlzLmFyY2hHcm91cEJvcmRlcldpZHRofHwiMnB4Iix0aGlzLnF1YWRyYW50MUZpbGw9dGhpcy5xdWFkcmFudDFGaWxsfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnF1YWRyYW50MkZpbGw9dGhpcy5xdWFkcmFudDJGaWxsfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7cjo1LGc6NSxiOjV9KSx0aGlzLnF1YWRyYW50M0ZpbGw9dGhpcy5xdWFkcmFudDNGaWxsfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7cjoxMCxnOjEwLGI6MTB9KSx0aGlzLnF1YWRyYW50NEZpbGw9dGhpcy5xdWFkcmFudDRGaWxsfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7cjoxNSxnOjE1LGI6MTV9KSx0aGlzLnF1YWRyYW50MVRleHRGaWxsPXRoaXMucXVhZHJhbnQxVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50MlRleHRGaWxsPXRoaXMucXVhZHJhbnQyVGV4dEZpbGx8fE1lKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotNSxnOi01LGI6LTV9KSx0aGlzLnF1YWRyYW50M1RleHRGaWxsPXRoaXMucXVhZHJhbnQzVGV4dEZpbGx8fE1lKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTAsZzotMTAsYjotMTB9KSx0aGlzLnF1YWRyYW50NFRleHRGaWxsPXRoaXMucXVhZHJhbnQ0VGV4dEZpbGx8fE1lKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTUsZzotMTUsYjotMTV9KSx0aGlzLnF1YWRyYW50UG9pbnRGaWxsPXRoaXMucXVhZHJhbnRQb2ludEZpbGx8fGxhKHRoaXMucXVhZHJhbnQxRmlsbCk/THQodGhpcy5xdWFkcmFudDFGaWxsKTpPdCh0aGlzLnF1YWRyYW50MUZpbGwpLHRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsPXRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbD10aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbD10aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnF1YWRyYW50VGl0bGVGaWxsPXRoaXMucXVhZHJhbnRUaXRsZUZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnh5Q2hhcnQ9e2JhY2tncm91bmRDb2xvcjp0aGlzLnh5Q2hhcnQ/LmJhY2tncm91bmRDb2xvcnx8dGhpcy5iYWNrZ3JvdW5kLHRpdGxlQ29sb3I6dGhpcy54eUNoYXJ0Py50aXRsZUNvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNUaXRsZUNvbG9yOnRoaXMueHlDaGFydD8ueEF4aXNUaXRsZUNvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNMYWJlbENvbG9yOnRoaXMueHlDaGFydD8ueEF4aXNMYWJlbENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNUaWNrQ29sb3I6dGhpcy54eUNoYXJ0Py54QXhpc1RpY2tDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzTGluZUNvbG9yOnRoaXMueHlDaGFydD8ueEF4aXNMaW5lQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc1RpdGxlQ29sb3I6dGhpcy54eUNoYXJ0Py55QXhpc1RpdGxlQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc0xhYmVsQ29sb3I6dGhpcy54eUNoYXJ0Py55QXhpc0xhYmVsQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc1RpY2tDb2xvcjp0aGlzLnh5Q2hhcnQ/LnlBeGlzVGlja0NvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNMaW5lQ29sb3I6dGhpcy54eUNoYXJ0Py55QXhpc0xpbmVDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHBsb3RDb2xvclBhbGV0dGU6dGhpcy54eUNoYXJ0Py5wbG90Q29sb3JQYWxldHRlfHwiI0ZGRjRERCwjRkZEOEIxLCNGRkEwN0EsI0VDRUZGMSwjRDZEQkRGLCNDM0UwQTgsI0ZGQjZBNCwjRkZENzRELCM3MzhGQTcsI0ZGRkZGMCJ9LHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kPXRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3I9dGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZT10aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZXx8IjEiLHRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3I9dGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucmVsYXRpb25Db2xvcj10aGlzLnJlbGF0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmQ9dGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZHx8KHRoaXMuZGFya01vZGU/T3QodGhpcy5zZWNvbmRhcnlDb2xvciwzMCk6dGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy5yZWxhdGlvbkxhYmVsQ29sb3I9dGhpcy5yZWxhdGlvbkxhYmVsQ29sb3J8fHRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5naXQwPXRoaXMuZ2l0MHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5naXQxPXRoaXMuZ2l0MXx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmdpdDI9dGhpcy5naXQyfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5naXQzPXRoaXMuZ2l0M3x8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTMwfSksdGhpcy5naXQ0PXRoaXMuZ2l0NHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwfSksdGhpcy5naXQ1PXRoaXMuZ2l0NXx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTkwfSksdGhpcy5naXQ2PXRoaXMuZ2l0Nnx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSx0aGlzLmdpdDc9dGhpcy5naXQ3fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjB9KSx0aGlzLmRhcmtNb2RlPyh0aGlzLmdpdDA9THQodGhpcy5naXQwLDI1KSx0aGlzLmdpdDE9THQodGhpcy5naXQxLDI1KSx0aGlzLmdpdDI9THQodGhpcy5naXQyLDI1KSx0aGlzLmdpdDM9THQodGhpcy5naXQzLDI1KSx0aGlzLmdpdDQ9THQodGhpcy5naXQ0LDI1KSx0aGlzLmdpdDU9THQodGhpcy5naXQ1LDI1KSx0aGlzLmdpdDY9THQodGhpcy5naXQ2LDI1KSx0aGlzLmdpdDc9THQodGhpcy5naXQ3LDI1KSk6KHRoaXMuZ2l0MD1PdCh0aGlzLmdpdDAsMjUpLHRoaXMuZ2l0MT1PdCh0aGlzLmdpdDEsMjUpLHRoaXMuZ2l0Mj1PdCh0aGlzLmdpdDIsMjUpLHRoaXMuZ2l0Mz1PdCh0aGlzLmdpdDMsMjUpLHRoaXMuZ2l0ND1PdCh0aGlzLmdpdDQsMjUpLHRoaXMuZ2l0NT1PdCh0aGlzLmdpdDUsMjUpLHRoaXMuZ2l0Nj1PdCh0aGlzLmdpdDYsMjUpLHRoaXMuZ2l0Nz1PdCh0aGlzLmdpdDcsMjUpKSx0aGlzLmdpdEludjA9dGhpcy5naXRJbnYwfHx3dCh0aGlzLmdpdDApLHRoaXMuZ2l0SW52MT10aGlzLmdpdEludjF8fHd0KHRoaXMuZ2l0MSksdGhpcy5naXRJbnYyPXRoaXMuZ2l0SW52Mnx8d3QodGhpcy5naXQyKSx0aGlzLmdpdEludjM9dGhpcy5naXRJbnYzfHx3dCh0aGlzLmdpdDMpLHRoaXMuZ2l0SW52ND10aGlzLmdpdEludjR8fHd0KHRoaXMuZ2l0NCksdGhpcy5naXRJbnY1PXRoaXMuZ2l0SW52NXx8d3QodGhpcy5naXQ1KSx0aGlzLmdpdEludjY9dGhpcy5naXRJbnY2fHx3dCh0aGlzLmdpdDYpLHRoaXMuZ2l0SW52Nz10aGlzLmdpdEludjd8fHd0KHRoaXMuZ2l0NyksdGhpcy5icmFuY2hMYWJlbENvbG9yPXRoaXMuYnJhbmNoTGFiZWxDb2xvcnx8KHRoaXMuZGFya01vZGU/ImJsYWNrIjp0aGlzLmxhYmVsVGV4dENvbG9yKSx0aGlzLmdpdEJyYW5jaExhYmVsMD10aGlzLmdpdEJyYW5jaExhYmVsMHx8dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWwxPXRoaXMuZ2l0QnJhbmNoTGFiZWwxfHx0aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDI9dGhpcy5naXRCcmFuY2hMYWJlbDJ8fHRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMz10aGlzLmdpdEJyYW5jaExhYmVsM3x8dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw0PXRoaXMuZ2l0QnJhbmNoTGFiZWw0fHx0aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDU9dGhpcy5naXRCcmFuY2hMYWJlbDV8fHRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNj10aGlzLmdpdEJyYW5jaExhYmVsNnx8dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw3PXRoaXMuZ2l0QnJhbmNoTGFiZWw3fHx0aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy50YWdMYWJlbENvbG9yPXRoaXMudGFnTGFiZWxDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kPXRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnRhZ0xhYmVsQm9yZGVyPXRoaXMudGFnQm9yZGVyfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnRhZ0xhYmVsRm9udFNpemU9dGhpcy50YWdMYWJlbEZvbnRTaXplfHwiMTBweCIsdGhpcy5jb21taXRMYWJlbENvbG9yPXRoaXMuY29tbWl0TGFiZWxDb2xvcnx8dGhpcy5zZWNvbmRhcnlUZXh0Q29sb3IsdGhpcy5jb21taXRMYWJlbEJhY2tncm91bmQ9dGhpcy5jb21taXRMYWJlbEJhY2tncm91bmR8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jb21taXRMYWJlbEZvbnRTaXplPXRoaXMuY29tbWl0TGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkPXRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkfHxoaCx0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW49dGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVufHxmaH1jYWxjdWxhdGUoZSl7aWYodHlwZW9mIGUhPSJvYmplY3QiKXt0aGlzLnVwZGF0ZUNvbG9ycygpO3JldHVybn1sZXQgcj1PYmplY3Qua2V5cyhlKTtyLmZvckVhY2gobj0+e3RoaXNbbl09ZVtuXX0pLHRoaXMudXBkYXRlQ29sb3JzKCksci5mb3JFYWNoKG49Pnt0aGlzW25dPWVbbl19KX19LGd6PW8odD0+e2xldCBlPW5ldyBtNztyZXR1cm4gZS5jYWxjdWxhdGUodCksZX0sImdldFRoZW1lVmFyaWFibGVzIil9KTt2YXIgZzcsdnoseHo9TigoKT0+eyJ1c2Ugc3RyaWN0IjtLcygpO3kwKCk7Zzc9Y2xhc3N7c3RhdGlje28odGhpcywiVGhlbWUiKX1jb25zdHJ1Y3Rvcigpe3RoaXMuYmFja2dyb3VuZD0iIzMzMyIsdGhpcy5wcmltYXJ5Q29sb3I9IiMxZjIwMjAiLHRoaXMuc2Vjb25kYXJ5Q29sb3I9THQodGhpcy5wcmltYXJ5Q29sb3IsMTYpLHRoaXMudGVydGlhcnlDb2xvcj1NZSh0aGlzLnByaW1hcnlDb2xvcix7aDotMTYwfSksdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I9d3QodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yPVNpKHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yPVNpKHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnByaW1hcnlUZXh0Q29sb3I9d3QodGhpcy5wcmltYXJ5Q29sb3IpLHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yPXd0KHRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMudGVydGlhcnlUZXh0Q29sb3I9d3QodGhpcy50ZXJ0aWFyeUNvbG9yKSx0aGlzLmxpbmVDb2xvcj13dCh0aGlzLmJhY2tncm91bmQpLHRoaXMudGV4dENvbG9yPXd0KHRoaXMuYmFja2dyb3VuZCksdGhpcy5tYWluQmtnPSIjMWYyMDIwIix0aGlzLnNlY29uZEJrZz0iY2FsY3VsYXRlZCIsdGhpcy5tYWluQ29udHJhc3RDb2xvcj0ibGlnaHRncmV5Iix0aGlzLmRhcmtUZXh0Q29sb3I9THQod3QoIiMzMjNENDciKSwxMCksdGhpcy5saW5lQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYm9yZGVyMT0iI2NjYyIsdGhpcy5ib3JkZXIyPVFhKDI1NSwyNTUsMjU1LC4yNSksdGhpcy5hcnJvd2hlYWRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5mb250RmFtaWx5PScidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLHRoaXMuZm9udFNpemU9IjE2cHgiLHRoaXMubGFiZWxCYWNrZ3JvdW5kPSIjMTgxODE4Iix0aGlzLnRleHRDb2xvcj0iI2NjYyIsdGhpcy5USEVNRV9DT0xPUl9MSU1JVD0xMix0aGlzLm5vZGVCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubm9kZUJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQmtnPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuZGVmYXVsdExpbmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50aXRsZUNvbG9yPSIjRjlGRkZFIix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JMaW5lQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuc2lnbmFsQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuc2lnbmFsVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94QmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sb29wVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQmtnQ29sb3I9IiNmZmY1YWQiLHRoaXMubm90ZVRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmF0aW9uQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZhdGlvbkJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNlcXVlbmNlTnVtYmVyQ29sb3I9ImJsYWNrIix0aGlzLnNlY3Rpb25Ca2dDb2xvcj1PdCgiI0VBRThEOSIsMzApLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9IiNFQUU4RDkiLHRoaXMuZXhjbHVkZUJrZ0NvbG9yPU90KHRoaXMuc2VjdGlvbkJrZ0NvbG9yLDEwKSx0aGlzLnRhc2tCb3JkZXJDb2xvcj1RYSgyNTUsMjU1LDI1NSw3MCksdGhpcy50YXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcj0iIzAwMzE2MyIsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9UWEoMjU1LDI1NSwyNTUsNTApLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPSIjODFCMURCIix0aGlzLmdyaWRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5kb25lVGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9ImdyZXkiLHRoaXMuY3JpdEJvcmRlckNvbG9yPSIjRTgzNzM3Iix0aGlzLmNyaXRCa2dDb2xvcj0iI0U4MzczNyIsdGhpcy50YXNrVGV4dERhcmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50b2RheUxpbmVDb2xvcj0iI0RCNTc1NyIsdGhpcy52ZXJ0TGluZUNvbG9yPSIjMDBCRkZGIix0aGlzLnBlcnNvbkJvcmRlcj10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnBlcnNvbkJrZz10aGlzLm1haW5Ca2csdGhpcy5hcmNoRWRnZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFyY2hFZGdlQXJyb3dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hcmNoRWRnZVdpZHRoPSIzIix0aGlzLmFyY2hHcm91cEJvcmRlckNvbG9yPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuYXJjaEdyb3VwQm9yZGVyV2lkdGg9IjJweCIsdGhpcy5yb3dPZGQ9dGhpcy5yb3dPZGR8fEx0KHRoaXMubWFpbkJrZyw1KXx8IiNmZmZmZmYiLHRoaXMucm93RXZlbj10aGlzLnJvd0V2ZW58fE90KHRoaXMubWFpbkJrZywxMCksdGhpcy5sYWJlbENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmVycm9yQmtnQ29sb3I9IiNhNDQxNDEiLHRoaXMuZXJyb3JUZXh0Q29sb3I9IiNkZGQifXVwZGF0ZUNvbG9ycygpe3RoaXMuc2Vjb25kQmtnPUx0KHRoaXMubWFpbkJrZywxNiksdGhpcy5saW5lQ29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLmFycm93aGVhZENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5ub2RlQmtnPXRoaXMubWFpbkJrZyx0aGlzLm5vZGVCb3JkZXI9dGhpcy5ib3JkZXIxLHRoaXMuY2x1c3RlckJrZz10aGlzLnNlY29uZEJrZyx0aGlzLmNsdXN0ZXJCb3JkZXI9dGhpcy5ib3JkZXIyLHRoaXMuZGVmYXVsdExpbmtDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9THQodGhpcy5sYWJlbEJhY2tncm91bmQsMjUpLHRoaXMuYWN0b3JCb3JkZXI9dGhpcy5ib3JkZXIxLHRoaXMuYWN0b3JCa2c9dGhpcy5tYWluQmtnLHRoaXMuYWN0b3JUZXh0Q29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLmFjdG9yTGluZUNvbG9yPXRoaXMuYWN0b3JCb3JkZXIsdGhpcy5zaWduYWxDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMuc2lnbmFsVGV4dENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPXRoaXMuYWN0b3JCa2csdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPXRoaXMuYWN0b3JCb3JkZXIsdGhpcy5sYWJlbFRleHRDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMubG9vcFRleHRDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMubm90ZUJvcmRlckNvbG9yPXRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3IsdGhpcy5ub3RlQmtnQ29sb3I9dGhpcy5zZWNvbmRCa2csdGhpcy5ub3RlVGV4dENvbG9yPXRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPXRoaXMuYm9yZGVyMSx0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj10aGlzLnNlY29uZEJrZyx0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj10aGlzLmJhY2tncm91bmQsdGhpcy50YXNrQmtnQ29sb3I9THQodGhpcy5tYWluQmtnLDIzKSx0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy5kYXJrVGV4dENvbG9yLHRoaXMudGFza1RleHRMaWdodENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj10aGlzLnRhc2tUZXh0TGlnaHRDb2xvcix0aGlzLmdyaWRDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMudGFza1RleHREYXJrQ29sb3I9dGhpcy5kYXJrVGV4dENvbG9yLHRoaXMuYXJjaEVkZ2VDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLmFyY2hFZGdlQXJyb3dDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHwiIzU1NSIsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLmNvbXBvc2l0ZUJvcmRlcj10aGlzLmNvbXBvc2l0ZUJvcmRlcnx8dGhpcy5ub2RlQm9yZGVyLHRoaXMuaW5uZXJFbmRCYWNrZ3JvdW5kPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuc3BlY2lhbFN0YXRlQ29sb3I9IiNmNGY0ZjQiLHRoaXMuZXJyb3JCa2dDb2xvcj10aGlzLmVycm9yQmtnQ29sb3J8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmVycm9yVGV4dENvbG9yPXRoaXMuZXJyb3JUZXh0Q29sb3J8fHRoaXMudGVydGlhcnlUZXh0Q29sb3IsdGhpcy5maWxsVHlwZTA9dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTE9dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmZpbGxUeXBlMj1NZSh0aGlzLnByaW1hcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGUzPU1lKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlND1NZSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNT1NZSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU2PU1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyOH0pLHRoaXMuZmlsbFR5cGU3PU1lKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5jU2NhbGUxPXRoaXMuY1NjYWxlMXx8IiMwYjAwMDAiLHRoaXMuY1NjYWxlMj10aGlzLmNTY2FsZTJ8fCIjNGQxMDM3Iix0aGlzLmNTY2FsZTM9dGhpcy5jU2NhbGUzfHwiIzNmNTI1OCIsdGhpcy5jU2NhbGU0PXRoaXMuY1NjYWxlNHx8IiM0ZjJmMWIiLHRoaXMuY1NjYWxlNT10aGlzLmNTY2FsZTV8fCIjNmUwYTBhIix0aGlzLmNTY2FsZTY9dGhpcy5jU2NhbGU2fHwiIzNiMDA0OCIsdGhpcy5jU2NhbGU3PXRoaXMuY1NjYWxlN3x8IiM5OTVhMDEiLHRoaXMuY1NjYWxlOD10aGlzLmNTY2FsZTh8fCIjMTU0NzA2Iix0aGlzLmNTY2FsZTk9dGhpcy5jU2NhbGU5fHwiIzE2MTcyMiIsdGhpcy5jU2NhbGUxMD10aGlzLmNTY2FsZTEwfHwiIzAwMjk2ZiIsdGhpcy5jU2NhbGUxMT10aGlzLmNTY2FsZTExfHwiIzAxNjI5YyIsdGhpcy5jU2NhbGUxMj10aGlzLmNTY2FsZTEyfHwiIzAxMDAyOSIsdGhpcy5jU2NhbGUwPXRoaXMuY1NjYWxlMHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5jU2NhbGUxPXRoaXMuY1NjYWxlMXx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmNTY2FsZTI9dGhpcy5jU2NhbGUyfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5jU2NhbGUzPXRoaXMuY1NjYWxlM3x8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MzB9KSx0aGlzLmNTY2FsZTQ9dGhpcy5jU2NhbGU0fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDo2MH0pLHRoaXMuY1NjYWxlNT10aGlzLmNTY2FsZTV8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjkwfSksdGhpcy5jU2NhbGU2PXRoaXMuY1NjYWxlNnx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwfSksdGhpcy5jU2NhbGU3PXRoaXMuY1NjYWxlN3x8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTUwfSksdGhpcy5jU2NhbGU4PXRoaXMuY1NjYWxlOHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MjEwfSksdGhpcy5jU2NhbGU5PXRoaXMuY1NjYWxlOXx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MjcwfSksdGhpcy5jU2NhbGUxMD10aGlzLmNTY2FsZTEwfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDozMDB9KSx0aGlzLmNTY2FsZTExPXRoaXMuY1NjYWxlMTF8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMzMH0pO2ZvcihsZXQgZT0wO2U8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtlKyspdGhpc1siY1NjYWxlSW52IitlXT10aGlzWyJjU2NhbGVJbnYiK2VdfHx3dCh0aGlzWyJjU2NhbGUiK2VdKTtmb3IobGV0IGU9MDtlPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7ZSsrKXRoaXNbImNTY2FsZVBlZXIiK2VdPXRoaXNbImNTY2FsZVBlZXIiK2VdfHxMdCh0aGlzWyJjU2NhbGUiK2VdLDEwKTtmb3IobGV0IGU9MDtlPDU7ZSsrKXRoaXNbInN1cmZhY2UiK2VdPXRoaXNbInN1cmZhY2UiK2VdfHxNZSh0aGlzLm1haW5Ca2cse2g6MzAsczotMzAsbDotKC0xMCtlKjQpfSksdGhpc1sic3VyZmFjZVBlZXIiK2VdPXRoaXNbInN1cmZhY2VQZWVyIitlXXx8TWUodGhpcy5tYWluQmtnLHtoOjMwLHM6LTMwLGw6LSgtNytlKjQpfSk7dGhpcy5zY2FsZUxhYmVsQ29sb3I9dGhpcy5zY2FsZUxhYmVsQ29sb3J8fCh0aGlzLmRhcmtNb2RlPyJibGFjayI6dGhpcy5sYWJlbFRleHRDb2xvcik7Zm9yKGxldCBlPTA7ZTx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO2UrKyl0aGlzWyJjU2NhbGVMYWJlbCIrZV09dGhpc1siY1NjYWxlTGFiZWwiK2VdfHx0aGlzLnNjYWxlTGFiZWxDb2xvcjtmb3IobGV0IGU9MDtlPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7ZSsrKXRoaXNbInBpZSIrZV09dGhpc1siY1NjYWxlIitlXTt0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZVdpZHRoPXRoaXMucGllT3V0ZXJTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPdXRlclN0cm9rZUNvbG9yPXRoaXMucGllT3V0ZXJTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZU9wYWNpdHk9dGhpcy5waWVPcGFjaXR5fHwiMC43Iix0aGlzLnF1YWRyYW50MUZpbGw9dGhpcy5xdWFkcmFudDFGaWxsfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnF1YWRyYW50MkZpbGw9dGhpcy5xdWFkcmFudDJGaWxsfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7cjo1LGc6NSxiOjV9KSx0aGlzLnF1YWRyYW50M0ZpbGw9dGhpcy5xdWFkcmFudDNGaWxsfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7cjoxMCxnOjEwLGI6MTB9KSx0aGlzLnF1YWRyYW50NEZpbGw9dGhpcy5xdWFkcmFudDRGaWxsfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7cjoxNSxnOjE1LGI6MTV9KSx0aGlzLnF1YWRyYW50MVRleHRGaWxsPXRoaXMucXVhZHJhbnQxVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50MlRleHRGaWxsPXRoaXMucXVhZHJhbnQyVGV4dEZpbGx8fE1lKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotNSxnOi01LGI6LTV9KSx0aGlzLnF1YWRyYW50M1RleHRGaWxsPXRoaXMucXVhZHJhbnQzVGV4dEZpbGx8fE1lKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTAsZzotMTAsYjotMTB9KSx0aGlzLnF1YWRyYW50NFRleHRGaWxsPXRoaXMucXVhZHJhbnQ0VGV4dEZpbGx8fE1lKHRoaXMucHJpbWFyeVRleHRDb2xvcix7cjotMTUsZzotMTUsYjotMTV9KSx0aGlzLnF1YWRyYW50UG9pbnRGaWxsPXRoaXMucXVhZHJhbnRQb2ludEZpbGx8fGxhKHRoaXMucXVhZHJhbnQxRmlsbCk/THQodGhpcy5xdWFkcmFudDFGaWxsKTpPdCh0aGlzLnF1YWRyYW50MUZpbGwpLHRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsPXRoaXMucXVhZHJhbnRQb2ludFRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFhBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbD10aGlzLnF1YWRyYW50WUF4aXNUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbD10aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnF1YWRyYW50VGl0bGVGaWxsPXRoaXMucXVhZHJhbnRUaXRsZUZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnh5Q2hhcnQ9e2JhY2tncm91bmRDb2xvcjp0aGlzLnh5Q2hhcnQ/LmJhY2tncm91bmRDb2xvcnx8dGhpcy5iYWNrZ3JvdW5kLHRpdGxlQ29sb3I6dGhpcy54eUNoYXJ0Py50aXRsZUNvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNUaXRsZUNvbG9yOnRoaXMueHlDaGFydD8ueEF4aXNUaXRsZUNvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNMYWJlbENvbG9yOnRoaXMueHlDaGFydD8ueEF4aXNMYWJlbENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNUaWNrQ29sb3I6dGhpcy54eUNoYXJ0Py54QXhpc1RpY2tDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzTGluZUNvbG9yOnRoaXMueHlDaGFydD8ueEF4aXNMaW5lQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc1RpdGxlQ29sb3I6dGhpcy54eUNoYXJ0Py55QXhpc1RpdGxlQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc0xhYmVsQ29sb3I6dGhpcy54eUNoYXJ0Py55QXhpc0xhYmVsQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc1RpY2tDb2xvcjp0aGlzLnh5Q2hhcnQ/LnlBeGlzVGlja0NvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNMaW5lQ29sb3I6dGhpcy54eUNoYXJ0Py55QXhpc0xpbmVDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHBsb3RDb2xvclBhbGV0dGU6dGhpcy54eUNoYXJ0Py5wbG90Q29sb3JQYWxldHRlfHwiIzM0OThkYiwjMmVjYzcxLCNlNzRjM2MsI2YxYzQwZiwjYmRjM2M3LCNmZmZmZmYsIzM0NDk1ZSwjOWI1OWI2LCMxYWJjOWMsI2U2N2UyMiJ9LHRoaXMucGFja2V0PXtzdGFydEJ5dGVDb2xvcjp0aGlzLnByaW1hcnlUZXh0Q29sb3IsZW5kQnl0ZUNvbG9yOnRoaXMucHJpbWFyeVRleHRDb2xvcixsYWJlbENvbG9yOnRoaXMucHJpbWFyeVRleHRDb2xvcix0aXRsZUNvbG9yOnRoaXMucHJpbWFyeVRleHRDb2xvcixibG9ja1N0cm9rZUNvbG9yOnRoaXMucHJpbWFyeVRleHRDb2xvcixibG9ja0ZpbGxDb2xvcjp0aGlzLmJhY2tncm91bmR9LHRoaXMucmFkYXI9e2F4aXNDb2xvcjp0aGlzLnJhZGFyPy5heGlzQ29sb3J8fHRoaXMubGluZUNvbG9yLGF4aXNTdHJva2VXaWR0aDp0aGlzLnJhZGFyPy5heGlzU3Ryb2tlV2lkdGh8fDIsYXhpc0xhYmVsRm9udFNpemU6dGhpcy5yYWRhcj8uYXhpc0xhYmVsRm9udFNpemV8fDEyLGN1cnZlT3BhY2l0eTp0aGlzLnJhZGFyPy5jdXJ2ZU9wYWNpdHl8fC41LGN1cnZlU3Ryb2tlV2lkdGg6dGhpcy5yYWRhcj8uY3VydmVTdHJva2VXaWR0aHx8MixncmF0aWN1bGVDb2xvcjp0aGlzLnJhZGFyPy5ncmF0aWN1bGVDb2xvcnx8IiNERURFREUiLGdyYXRpY3VsZVN0cm9rZVdpZHRoOnRoaXMucmFkYXI/LmdyYXRpY3VsZVN0cm9rZVdpZHRofHwxLGdyYXRpY3VsZU9wYWNpdHk6dGhpcy5yYWRhcj8uZ3JhdGljdWxlT3BhY2l0eXx8LjMsbGVnZW5kQm94U2l6ZTp0aGlzLnJhZGFyPy5sZWdlbmRCb3hTaXplfHwxMixsZWdlbmRGb250U2l6ZTp0aGlzLnJhZGFyPy5sZWdlbmRGb250U2l6ZXx8MTJ9LHRoaXMuY2xhc3NUZXh0PXRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZD10aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemU9dGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemV8fCIxIix0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yPXRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlbGF0aW9uQ29sb3I9dGhpcy5yZWxhdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kPXRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmR8fCh0aGlzLmRhcmtNb2RlP090KHRoaXMuc2Vjb25kYXJ5Q29sb3IsMzApOnRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMucmVsYXRpb25MYWJlbENvbG9yPXRoaXMucmVsYXRpb25MYWJlbENvbG9yfHx0aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMuZ2l0MD1MdCh0aGlzLnNlY29uZGFyeUNvbG9yLDIwKSx0aGlzLmdpdDE9THQodGhpcy5waWUyfHx0aGlzLnNlY29uZGFyeUNvbG9yLDIwKSx0aGlzLmdpdDI9THQodGhpcy5waWUzfHx0aGlzLnRlcnRpYXJ5Q29sb3IsMjApLHRoaXMuZ2l0Mz1MdCh0aGlzLnBpZTR8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOi0zMH0pLDIwKSx0aGlzLmdpdDQ9THQodGhpcy5waWU1fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjB9KSwyMCksdGhpcy5naXQ1PUx0KHRoaXMucGllNnx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTkwfSksMTApLHRoaXMuZ2l0Nj1MdCh0aGlzLnBpZTd8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwfSksMTApLHRoaXMuZ2l0Nz1MdCh0aGlzLnBpZTh8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLDIwKSx0aGlzLmdpdEludjA9dGhpcy5naXRJbnYwfHx3dCh0aGlzLmdpdDApLHRoaXMuZ2l0SW52MT10aGlzLmdpdEludjF8fHd0KHRoaXMuZ2l0MSksdGhpcy5naXRJbnYyPXRoaXMuZ2l0SW52Mnx8d3QodGhpcy5naXQyKSx0aGlzLmdpdEludjM9dGhpcy5naXRJbnYzfHx3dCh0aGlzLmdpdDMpLHRoaXMuZ2l0SW52ND10aGlzLmdpdEludjR8fHd0KHRoaXMuZ2l0NCksdGhpcy5naXRJbnY1PXRoaXMuZ2l0SW52NXx8d3QodGhpcy5naXQ1KSx0aGlzLmdpdEludjY9dGhpcy5naXRJbnY2fHx3dCh0aGlzLmdpdDYpLHRoaXMuZ2l0SW52Nz10aGlzLmdpdEludjd8fHd0KHRoaXMuZ2l0NyksdGhpcy5naXRCcmFuY2hMYWJlbDA9dGhpcy5naXRCcmFuY2hMYWJlbDB8fHd0KHRoaXMubGFiZWxUZXh0Q29sb3IpLHRoaXMuZ2l0QnJhbmNoTGFiZWwxPXRoaXMuZ2l0QnJhbmNoTGFiZWwxfHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWwyPXRoaXMuZ2l0QnJhbmNoTGFiZWwyfHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWwzPXRoaXMuZ2l0QnJhbmNoTGFiZWwzfHx3dCh0aGlzLmxhYmVsVGV4dENvbG9yKSx0aGlzLmdpdEJyYW5jaExhYmVsND10aGlzLmdpdEJyYW5jaExhYmVsNHx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNT10aGlzLmdpdEJyYW5jaExhYmVsNXx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNj10aGlzLmdpdEJyYW5jaExhYmVsNnx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNz10aGlzLmdpdEJyYW5jaExhYmVsN3x8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLnRhZ0xhYmVsQ29sb3I9dGhpcy50YWdMYWJlbENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy50YWdMYWJlbEJhY2tncm91bmQ9dGhpcy50YWdMYWJlbEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMudGFnTGFiZWxCb3JkZXI9dGhpcy50YWdCb3JkZXJ8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMudGFnTGFiZWxGb250U2l6ZT10aGlzLnRhZ0xhYmVsRm9udFNpemV8fCIxMHB4Iix0aGlzLmNvbW1pdExhYmVsQ29sb3I9dGhpcy5jb21taXRMYWJlbENvbG9yfHx0aGlzLnNlY29uZGFyeVRleHRDb2xvcix0aGlzLmNvbW1pdExhYmVsQmFja2dyb3VuZD10aGlzLmNvbW1pdExhYmVsQmFja2dyb3VuZHx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmNvbW1pdExhYmVsRm9udFNpemU9dGhpcy5jb21taXRMYWJlbEZvbnRTaXplfHwiMTBweCIsdGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JPZGQ9dGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JPZGR8fEx0KHRoaXMuYmFja2dyb3VuZCwxMiksdGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVuPXRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbnx8THQodGhpcy5iYWNrZ3JvdW5kLDIpLHRoaXMubm9kZUJvcmRlcj10aGlzLm5vZGVCb3JkZXJ8fCIjOTk5In1jYWxjdWxhdGUoZSl7aWYodHlwZW9mIGUhPSJvYmplY3QiKXt0aGlzLnVwZGF0ZUNvbG9ycygpO3JldHVybn1sZXQgcj1PYmplY3Qua2V5cyhlKTtyLmZvckVhY2gobj0+e3RoaXNbbl09ZVtuXX0pLHRoaXMudXBkYXRlQ29sb3JzKCksci5mb3JFYWNoKG49Pnt0aGlzW25dPWVbbl19KX19LHZ6PW8odD0+e2xldCBlPW5ldyBnNztyZXR1cm4gZS5jYWxjdWxhdGUodCksZX0sImdldFRoZW1lVmFyaWFibGVzIil9KTt2YXIgeTcsZGgsQnk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtLcygpO3kwKCk7UHkoKTt5Nz1jbGFzc3tzdGF0aWN7byh0aGlzLCJUaGVtZSIpfWNvbnN0cnVjdG9yKCl7dGhpcy5iYWNrZ3JvdW5kPSIjZjRmNGY0Iix0aGlzLnByaW1hcnlDb2xvcj0iI0VDRUNGRiIsdGhpcy5zZWNvbmRhcnlDb2xvcj1NZSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjB9KSx0aGlzLnNlY29uZGFyeUNvbG9yPSIjZmZmZmRlIix0aGlzLnRlcnRpYXJ5Q29sb3I9TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTE2MH0pLHRoaXMucHJpbWFyeUJvcmRlckNvbG9yPVNpKHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3I9U2kodGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3I9U2kodGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMucHJpbWFyeVRleHRDb2xvcj13dCh0aGlzLnByaW1hcnlDb2xvciksdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I9d3QodGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy50ZXJ0aWFyeVRleHRDb2xvcj13dCh0aGlzLnRlcnRpYXJ5Q29sb3IpLHRoaXMubGluZUNvbG9yPXd0KHRoaXMuYmFja2dyb3VuZCksdGhpcy50ZXh0Q29sb3I9d3QodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLmJhY2tncm91bmQ9IndoaXRlIix0aGlzLm1haW5Ca2c9IiNFQ0VDRkYiLHRoaXMuc2Vjb25kQmtnPSIjZmZmZmRlIix0aGlzLmxpbmVDb2xvcj0iIzMzMzMzMyIsdGhpcy5ib3JkZXIxPSIjOTM3MERCIix0aGlzLmJvcmRlcjI9IiNhYWFhMzMiLHRoaXMuYXJyb3doZWFkQ29sb3I9IiMzMzMzMzMiLHRoaXMuZm9udEZhbWlseT0nInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyx0aGlzLmZvbnRTaXplPSIxNnB4Iix0aGlzLmxhYmVsQmFja2dyb3VuZD0icmdiYSgyMzIsMjMyLDIzMiwgMC44KSIsdGhpcy50ZXh0Q29sb3I9IiMzMzMiLHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ9MTIsdGhpcy5ub2RlQmtnPSJjYWxjdWxhdGVkIix0aGlzLm5vZGVCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGl0bGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQmtnPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yVGV4dENvbG9yPSJibGFjayIsdGhpcy5hY3RvckxpbmVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zaWduYWxDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zaWduYWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxCb3hCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxvb3BUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCa2dDb2xvcj0iI2ZmZjVhZCIsdGhpcy5ub3RlVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj0iIzY2NiIsdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9IiNmNGY0ZjQiLHRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zZWN0aW9uQmtnQ29sb3IyPSJjYWxjdWxhdGVkIix0aGlzLmV4Y2x1ZGVCa2dDb2xvcj0iI2VlZWVlZSIsdGhpcy50YXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENvbG9yPXRoaXMudGFza1RleHRMaWdodENvbG9yLHRoaXMudGFza1RleHREYXJrQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ncmlkQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmNyaXRCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5jcml0QmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudG9kYXlMaW5lQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudmVydExpbmVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9UWEoMTAyLDEwMiwyNTUsLjQ5KSx0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj0iI2ZmZjQwMCIsdGhpcy50YXNrQm9yZGVyQ29sb3I9IiM1MzRmYmMiLHRoaXMudGFza0JrZ0NvbG9yPSIjOGE5MGRkIix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj0id2hpdGUiLHRoaXMudGFza1RleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dERhcmtDb2xvcj0iYmxhY2siLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcj0iIzAwMzE2MyIsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9IiM1MzRmYmMiLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPSIjYmZjN2ZmIix0aGlzLmdyaWRDb2xvcj0ibGlnaHRncmV5Iix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPSJncmV5Iix0aGlzLmNyaXRCb3JkZXJDb2xvcj0iI2ZmODg4OCIsdGhpcy5jcml0QmtnQ29sb3I9InJlZCIsdGhpcy50b2RheUxpbmVDb2xvcj0icmVkIix0aGlzLnZlcnRMaW5lQ29sb3I9Im5hdnkiLHRoaXMucGVyc29uQm9yZGVyPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucGVyc29uQmtnPXRoaXMubWFpbkJrZyx0aGlzLmFyY2hFZGdlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYXJjaEVkZ2VBcnJvd0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFyY2hFZGdlV2lkdGg9IjMiLHRoaXMuYXJjaEdyb3VwQm9yZGVyQ29sb3I9dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5hcmNoR3JvdXBCb3JkZXJXaWR0aD0iMnB4Iix0aGlzLnJvd09kZD0iY2FsY3VsYXRlZCIsdGhpcy5yb3dFdmVuPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQ29sb3I9ImJsYWNrIix0aGlzLmVycm9yQmtnQ29sb3I9IiM1NTIyMjIiLHRoaXMuZXJyb3JUZXh0Q29sb3I9IiM1NTIyMjIiLHRoaXMudXBkYXRlQ29sb3JzKCl9dXBkYXRlQ29sb3JzKCl7dGhpcy5jU2NhbGUwPXRoaXMuY1NjYWxlMHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5jU2NhbGUxPXRoaXMuY1NjYWxlMXx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmNTY2FsZTI9dGhpcy5jU2NhbGUyfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5jU2NhbGUzPXRoaXMuY1NjYWxlM3x8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MzB9KSx0aGlzLmNTY2FsZTQ9dGhpcy5jU2NhbGU0fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDo2MH0pLHRoaXMuY1NjYWxlNT10aGlzLmNTY2FsZTV8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjkwfSksdGhpcy5jU2NhbGU2PXRoaXMuY1NjYWxlNnx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwfSksdGhpcy5jU2NhbGU3PXRoaXMuY1NjYWxlN3x8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTUwfSksdGhpcy5jU2NhbGU4PXRoaXMuY1NjYWxlOHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MjEwfSksdGhpcy5jU2NhbGU5PXRoaXMuY1NjYWxlOXx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MjcwfSksdGhpcy5jU2NhbGUxMD10aGlzLmNTY2FsZTEwfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDozMDB9KSx0aGlzLmNTY2FsZTExPXRoaXMuY1NjYWxlMTF8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMzMH0pLHRoaXMuY1NjYWxlUGVlcjE9dGhpcy5jU2NhbGVQZWVyMXx8T3QodGhpcy5zZWNvbmRhcnlDb2xvciw0NSksdGhpcy5jU2NhbGVQZWVyMj10aGlzLmNTY2FsZVBlZXIyfHxPdCh0aGlzLnRlcnRpYXJ5Q29sb3IsNDApO2ZvcihsZXQgZT0wO2U8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtlKyspdGhpc1siY1NjYWxlIitlXT1PdCh0aGlzWyJjU2NhbGUiK2VdLDEwKSx0aGlzWyJjU2NhbGVQZWVyIitlXT10aGlzWyJjU2NhbGVQZWVyIitlXXx8T3QodGhpc1siY1NjYWxlIitlXSwyNSk7Zm9yKGxldCBlPTA7ZTx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO2UrKyl0aGlzWyJjU2NhbGVJbnYiK2VdPXRoaXNbImNTY2FsZUludiIrZV18fE1lKHRoaXNbImNTY2FsZSIrZV0se2g6MTgwfSk7Zm9yKGxldCBlPTA7ZTw1O2UrKyl0aGlzWyJzdXJmYWNlIitlXT10aGlzWyJzdXJmYWNlIitlXXx8TWUodGhpcy5tYWluQmtnLHtoOjMwLGw6LSg1K2UqNSl9KSx0aGlzWyJzdXJmYWNlUGVlciIrZV09dGhpc1sic3VyZmFjZVBlZXIiK2VdfHxNZSh0aGlzLm1haW5Ca2cse2g6MzAsbDotKDcrZSo1KX0pO2lmKHRoaXMuc2NhbGVMYWJlbENvbG9yPXRoaXMuc2NhbGVMYWJlbENvbG9yIT09ImNhbGN1bGF0ZWQiJiZ0aGlzLnNjYWxlTGFiZWxDb2xvcj90aGlzLnNjYWxlTGFiZWxDb2xvcjp0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMubGFiZWxUZXh0Q29sb3IhPT0iY2FsY3VsYXRlZCIpe3RoaXMuY1NjYWxlTGFiZWwwPXRoaXMuY1NjYWxlTGFiZWwwfHx3dCh0aGlzLmxhYmVsVGV4dENvbG9yKSx0aGlzLmNTY2FsZUxhYmVsMz10aGlzLmNTY2FsZUxhYmVsM3x8d3QodGhpcy5sYWJlbFRleHRDb2xvcik7Zm9yKGxldCBlPTA7ZTx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO2UrKyl0aGlzWyJjU2NhbGVMYWJlbCIrZV09dGhpc1siY1NjYWxlTGFiZWwiK2VdfHx0aGlzLmxhYmVsVGV4dENvbG9yfXRoaXMubm9kZUJrZz10aGlzLm1haW5Ca2csdGhpcy5ub2RlQm9yZGVyPXRoaXMuYm9yZGVyMSx0aGlzLmNsdXN0ZXJCa2c9dGhpcy5zZWNvbmRCa2csdGhpcy5jbHVzdGVyQm9yZGVyPXRoaXMuYm9yZGVyMix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy50aXRsZUNvbG9yPXRoaXMudGV4dENvbG9yLHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZD10aGlzLmxhYmVsQmFja2dyb3VuZCx0aGlzLmFjdG9yQm9yZGVyPUx0KHRoaXMuYm9yZGVyMSwyMyksdGhpcy5hY3RvckJrZz10aGlzLm1haW5Ca2csdGhpcy5sYWJlbEJveEJrZ0NvbG9yPXRoaXMuYWN0b3JCa2csdGhpcy5zaWduYWxDb2xvcj10aGlzLnRleHRDb2xvcix0aGlzLnNpZ25hbFRleHRDb2xvcj10aGlzLnRleHRDb2xvcix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9dGhpcy5hY3RvckJvcmRlcix0aGlzLmxhYmVsVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5sb29wVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5ub3RlQm9yZGVyQ29sb3I9dGhpcy5ib3JkZXIyLHRoaXMubm90ZVRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMuYWN0b3JMaW5lQ29sb3I9dGhpcy5hY3RvckJvcmRlcix0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3IsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj10aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMuYXJjaEVkZ2VDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLmFyY2hFZGdlQXJyb3dDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLnJvd09kZD10aGlzLnJvd09kZHx8THQodGhpcy5wcmltYXJ5Q29sb3IsNzUpfHwiI2ZmZmZmZiIsdGhpcy5yb3dFdmVuPXRoaXMucm93RXZlbnx8THQodGhpcy5wcmltYXJ5Q29sb3IsMSksdGhpcy50cmFuc2l0aW9uQ29sb3I9dGhpcy50cmFuc2l0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3I9dGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5zdGF0ZUxhYmVsQ29sb3I9dGhpcy5zdGF0ZUxhYmVsQ29sb3J8fHRoaXMuc3RhdGVCa2d8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnN0YXRlQmtnPXRoaXMuc3RhdGVCa2d8fHRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yPXRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3J8fHRoaXMuc3RhdGVCa2csdGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlQmFja2dyb3VuZHx8dGhpcy5iYWNrZ3JvdW5kfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5hbHRCYWNrZ3JvdW5kPXRoaXMuYWx0QmFja2dyb3VuZHx8IiNmMGYwZjAiLHRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kfHx0aGlzLm1haW5Ca2csdGhpcy5jb21wb3NpdGVCb3JkZXI9dGhpcy5jb21wb3NpdGVCb3JkZXJ8fHRoaXMubm9kZUJvcmRlcix0aGlzLmlubmVyRW5kQmFja2dyb3VuZD10aGlzLm5vZGVCb3JkZXIsdGhpcy5zcGVjaWFsU3RhdGVDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLmVycm9yQmtnQ29sb3I9dGhpcy5lcnJvckJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5lcnJvclRleHRDb2xvcj10aGlzLmVycm9yVGV4dENvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLmNsYXNzVGV4dD10aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5maWxsVHlwZTA9dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTE9dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmZpbGxUeXBlMj1NZSh0aGlzLnByaW1hcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGUzPU1lKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlND1NZSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNT1NZSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU2PU1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyOH0pLHRoaXMuZmlsbFR5cGU3PU1lKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5waWUxPXRoaXMucGllMXx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5waWUyPXRoaXMucGllMnx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLnBpZTM9dGhpcy5waWUzfHxNZSh0aGlzLnRlcnRpYXJ5Q29sb3Ise2w6LTQwfSksdGhpcy5waWU0PXRoaXMucGllNHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2w6LTEwfSksdGhpcy5waWU1PXRoaXMucGllNXx8TWUodGhpcy5zZWNvbmRhcnlDb2xvcix7bDotMzB9KSx0aGlzLnBpZTY9dGhpcy5waWU2fHxNZSh0aGlzLnRlcnRpYXJ5Q29sb3Ise2w6LTIwfSksdGhpcy5waWU3PXRoaXMucGllN3x8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjAsbDotMjB9KSx0aGlzLnBpZTg9dGhpcy5waWU4fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjAsbDotNDB9KSx0aGlzLnBpZTk9dGhpcy5waWU5fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDotNDB9KSx0aGlzLnBpZTEwPXRoaXMucGllMTB8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwLGw6LTQwfSksdGhpcy5waWUxMT10aGlzLnBpZTExfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDotOTAsbDotNDB9KSx0aGlzLnBpZTEyPXRoaXMucGllMTJ8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMCxsOi0zMH0pLHRoaXMucGllVGl0bGVUZXh0U2l6ZT10aGlzLnBpZVRpdGxlVGV4dFNpemV8fCIyNXB4Iix0aGlzLnBpZVRpdGxlVGV4dENvbG9yPXRoaXMucGllVGl0bGVUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTZWN0aW9uVGV4dFNpemU9dGhpcy5waWVTZWN0aW9uVGV4dFNpemV8fCIxN3B4Iix0aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3I9dGhpcy5waWVTZWN0aW9uVGV4dENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnBpZUxlZ2VuZFRleHRTaXplPXRoaXMucGllTGVnZW5kVGV4dFNpemV8fCIxN3B4Iix0aGlzLnBpZUxlZ2VuZFRleHRDb2xvcj10aGlzLnBpZUxlZ2VuZFRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVN0cm9rZUNvbG9yPXRoaXMucGllU3Ryb2tlQ29sb3J8fCJibGFjayIsdGhpcy5waWVTdHJva2VXaWR0aD10aGlzLnBpZVN0cm9rZVdpZHRofHwiMnB4Iix0aGlzLnBpZU91dGVyU3Ryb2tlV2lkdGg9dGhpcy5waWVPdXRlclN0cm9rZVdpZHRofHwiMnB4Iix0aGlzLnBpZU91dGVyU3Ryb2tlQ29sb3I9dGhpcy5waWVPdXRlclN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllT3BhY2l0eT10aGlzLnBpZU9wYWNpdHl8fCIwLjciLHRoaXMucXVhZHJhbnQxRmlsbD10aGlzLnF1YWRyYW50MUZpbGx8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucXVhZHJhbnQyRmlsbD10aGlzLnF1YWRyYW50MkZpbGx8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtyOjUsZzo1LGI6NX0pLHRoaXMucXVhZHJhbnQzRmlsbD10aGlzLnF1YWRyYW50M0ZpbGx8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtyOjEwLGc6MTAsYjoxMH0pLHRoaXMucXVhZHJhbnQ0RmlsbD10aGlzLnF1YWRyYW50NEZpbGx8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtyOjE1LGc6MTUsYjoxNX0pLHRoaXMucXVhZHJhbnQxVGV4dEZpbGw9dGhpcy5xdWFkcmFudDFUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnQyVGV4dEZpbGw9dGhpcy5xdWFkcmFudDJUZXh0RmlsbHx8TWUodGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi01LGc6LTUsYjotNX0pLHRoaXMucXVhZHJhbnQzVGV4dEZpbGw9dGhpcy5xdWFkcmFudDNUZXh0RmlsbHx8TWUodGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi0xMCxnOi0xMCxiOi0xMH0pLHRoaXMucXVhZHJhbnQ0VGV4dEZpbGw9dGhpcy5xdWFkcmFudDRUZXh0RmlsbHx8TWUodGhpcy5wcmltYXJ5VGV4dENvbG9yLHtyOi0xNSxnOi0xNSxiOi0xNX0pLHRoaXMucXVhZHJhbnRQb2ludEZpbGw9dGhpcy5xdWFkcmFudFBvaW50RmlsbHx8bGEodGhpcy5xdWFkcmFudDFGaWxsKT9MdCh0aGlzLnF1YWRyYW50MUZpbGwpOk90KHRoaXMucXVhZHJhbnQxRmlsbCksdGhpcy5xdWFkcmFudFBvaW50VGV4dEZpbGw9dGhpcy5xdWFkcmFudFBvaW50VGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50WEF4aXNUZXh0RmlsbD10aGlzLnF1YWRyYW50WEF4aXNUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRZQXhpc1RleHRGaWxsPXRoaXMucXVhZHJhbnRZQXhpc1RleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbD10aGlzLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsPXRoaXMucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGx8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucXVhZHJhbnRUaXRsZUZpbGw9dGhpcy5xdWFkcmFudFRpdGxlRmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucmFkYXI9e2F4aXNDb2xvcjp0aGlzLnJhZGFyPy5heGlzQ29sb3J8fHRoaXMubGluZUNvbG9yLGF4aXNTdHJva2VXaWR0aDp0aGlzLnJhZGFyPy5heGlzU3Ryb2tlV2lkdGh8fDIsYXhpc0xhYmVsRm9udFNpemU6dGhpcy5yYWRhcj8uYXhpc0xhYmVsRm9udFNpemV8fDEyLGN1cnZlT3BhY2l0eTp0aGlzLnJhZGFyPy5jdXJ2ZU9wYWNpdHl8fC41LGN1cnZlU3Ryb2tlV2lkdGg6dGhpcy5yYWRhcj8uY3VydmVTdHJva2VXaWR0aHx8MixncmF0aWN1bGVDb2xvcjp0aGlzLnJhZGFyPy5ncmF0aWN1bGVDb2xvcnx8IiNERURFREUiLGdyYXRpY3VsZVN0cm9rZVdpZHRoOnRoaXMucmFkYXI/LmdyYXRpY3VsZVN0cm9rZVdpZHRofHwxLGdyYXRpY3VsZU9wYWNpdHk6dGhpcy5yYWRhcj8uZ3JhdGljdWxlT3BhY2l0eXx8LjMsbGVnZW5kQm94U2l6ZTp0aGlzLnJhZGFyPy5sZWdlbmRCb3hTaXplfHwxMixsZWdlbmRGb250U2l6ZTp0aGlzLnJhZGFyPy5sZWdlbmRGb250U2l6ZXx8MTJ9LHRoaXMueHlDaGFydD17YmFja2dyb3VuZENvbG9yOnRoaXMueHlDaGFydD8uYmFja2dyb3VuZENvbG9yfHx0aGlzLmJhY2tncm91bmQsdGl0bGVDb2xvcjp0aGlzLnh5Q2hhcnQ/LnRpdGxlQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc1RpdGxlQ29sb3I6dGhpcy54eUNoYXJ0Py54QXhpc1RpdGxlQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc0xhYmVsQ29sb3I6dGhpcy54eUNoYXJ0Py54QXhpc0xhYmVsQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc1RpY2tDb2xvcjp0aGlzLnh5Q2hhcnQ/LnhBeGlzVGlja0NvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseEF4aXNMaW5lQ29sb3I6dGhpcy54eUNoYXJ0Py54QXhpc0xpbmVDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzVGl0bGVDb2xvcjp0aGlzLnh5Q2hhcnQ/LnlBeGlzVGl0bGVDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzTGFiZWxDb2xvcjp0aGlzLnh5Q2hhcnQ/LnlBeGlzTGFiZWxDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzVGlja0NvbG9yOnRoaXMueHlDaGFydD8ueUF4aXNUaWNrQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix5QXhpc0xpbmVDb2xvcjp0aGlzLnh5Q2hhcnQ/LnlBeGlzTGluZUNvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IscGxvdENvbG9yUGFsZXR0ZTp0aGlzLnh5Q2hhcnQ/LnBsb3RDb2xvclBhbGV0dGV8fCIjRUNFQ0ZGLCM4NDkzQTYsI0ZGQzNBMCwjRENEREUxLCNCOEU5OTQsI0QxQTM2RiwjQzNDREU2LCNGRkI2QzEsIzQ5NjA3OCwjRjhGM0UzIn0sdGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmQ9dGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcj10aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplfHwiMSIsdGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcj10aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5yZWxhdGlvbkNvbG9yPXRoaXMucmVsYXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZD10aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kfHx0aGlzLmxhYmVsQmFja2dyb3VuZCx0aGlzLnJlbGF0aW9uTGFiZWxDb2xvcj10aGlzLnJlbGF0aW9uTGFiZWxDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmdpdDA9dGhpcy5naXQwfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmdpdDE9dGhpcy5naXQxfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZ2l0Mj10aGlzLmdpdDJ8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmdpdDM9dGhpcy5naXQzfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDotMzB9KSx0aGlzLmdpdDQ9dGhpcy5naXQ0fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjB9KSx0aGlzLmdpdDU9dGhpcy5naXQ1fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDotOTB9KSx0aGlzLmdpdDY9dGhpcy5naXQ2fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDo2MH0pLHRoaXMuZ2l0Nz10aGlzLmdpdDd8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuZGFya01vZGU/KHRoaXMuZ2l0MD1MdCh0aGlzLmdpdDAsMjUpLHRoaXMuZ2l0MT1MdCh0aGlzLmdpdDEsMjUpLHRoaXMuZ2l0Mj1MdCh0aGlzLmdpdDIsMjUpLHRoaXMuZ2l0Mz1MdCh0aGlzLmdpdDMsMjUpLHRoaXMuZ2l0ND1MdCh0aGlzLmdpdDQsMjUpLHRoaXMuZ2l0NT1MdCh0aGlzLmdpdDUsMjUpLHRoaXMuZ2l0Nj1MdCh0aGlzLmdpdDYsMjUpLHRoaXMuZ2l0Nz1MdCh0aGlzLmdpdDcsMjUpKToodGhpcy5naXQwPU90KHRoaXMuZ2l0MCwyNSksdGhpcy5naXQxPU90KHRoaXMuZ2l0MSwyNSksdGhpcy5naXQyPU90KHRoaXMuZ2l0MiwyNSksdGhpcy5naXQzPU90KHRoaXMuZ2l0MywyNSksdGhpcy5naXQ0PU90KHRoaXMuZ2l0NCwyNSksdGhpcy5naXQ1PU90KHRoaXMuZ2l0NSwyNSksdGhpcy5naXQ2PU90KHRoaXMuZ2l0NiwyNSksdGhpcy5naXQ3PU90KHRoaXMuZ2l0NywyNSkpLHRoaXMuZ2l0SW52MD10aGlzLmdpdEludjB8fE90KHd0KHRoaXMuZ2l0MCksMjUpLHRoaXMuZ2l0SW52MT10aGlzLmdpdEludjF8fHd0KHRoaXMuZ2l0MSksdGhpcy5naXRJbnYyPXRoaXMuZ2l0SW52Mnx8d3QodGhpcy5naXQyKSx0aGlzLmdpdEludjM9dGhpcy5naXRJbnYzfHx3dCh0aGlzLmdpdDMpLHRoaXMuZ2l0SW52ND10aGlzLmdpdEludjR8fHd0KHRoaXMuZ2l0NCksdGhpcy5naXRJbnY1PXRoaXMuZ2l0SW52NXx8d3QodGhpcy5naXQ1KSx0aGlzLmdpdEludjY9dGhpcy5naXRJbnY2fHx3dCh0aGlzLmdpdDYpLHRoaXMuZ2l0SW52Nz10aGlzLmdpdEludjd8fHd0KHRoaXMuZ2l0NyksdGhpcy5naXRCcmFuY2hMYWJlbDA9dGhpcy5naXRCcmFuY2hMYWJlbDB8fHd0KHRoaXMubGFiZWxUZXh0Q29sb3IpLHRoaXMuZ2l0QnJhbmNoTGFiZWwxPXRoaXMuZ2l0QnJhbmNoTGFiZWwxfHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWwyPXRoaXMuZ2l0QnJhbmNoTGFiZWwyfHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWwzPXRoaXMuZ2l0QnJhbmNoTGFiZWwzfHx3dCh0aGlzLmxhYmVsVGV4dENvbG9yKSx0aGlzLmdpdEJyYW5jaExhYmVsND10aGlzLmdpdEJyYW5jaExhYmVsNHx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNT10aGlzLmdpdEJyYW5jaExhYmVsNXx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNj10aGlzLmdpdEJyYW5jaExhYmVsNnx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNz10aGlzLmdpdEJyYW5jaExhYmVsN3x8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLnRhZ0xhYmVsQ29sb3I9dGhpcy50YWdMYWJlbENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy50YWdMYWJlbEJhY2tncm91bmQ9dGhpcy50YWdMYWJlbEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMudGFnTGFiZWxCb3JkZXI9dGhpcy50YWdCb3JkZXJ8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMudGFnTGFiZWxGb250U2l6ZT10aGlzLnRhZ0xhYmVsRm9udFNpemV8fCIxMHB4Iix0aGlzLmNvbW1pdExhYmVsQ29sb3I9dGhpcy5jb21taXRMYWJlbENvbG9yfHx0aGlzLnNlY29uZGFyeVRleHRDb2xvcix0aGlzLmNvbW1pdExhYmVsQmFja2dyb3VuZD10aGlzLmNvbW1pdExhYmVsQmFja2dyb3VuZHx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmNvbW1pdExhYmVsRm9udFNpemU9dGhpcy5jb21taXRMYWJlbEZvbnRTaXplfHwiMTBweCIsdGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JPZGQ9dGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JPZGR8fGhoLHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbj10aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW58fGZofWNhbGN1bGF0ZShlKXtpZihPYmplY3Qua2V5cyh0aGlzKS5mb3JFYWNoKG49Pnt0aGlzW25dPT09ImNhbGN1bGF0ZWQiJiYodGhpc1tuXT12b2lkIDApfSksdHlwZW9mIGUhPSJvYmplY3QiKXt0aGlzLnVwZGF0ZUNvbG9ycygpO3JldHVybn1sZXQgcj1PYmplY3Qua2V5cyhlKTtyLmZvckVhY2gobj0+e3RoaXNbbl09ZVtuXX0pLHRoaXMudXBkYXRlQ29sb3JzKCksci5mb3JFYWNoKG49Pnt0aGlzW25dPWVbbl19KX19LGRoPW8odD0+e2xldCBlPW5ldyB5NztyZXR1cm4gZS5jYWxjdWxhdGUodCksZX0sImdldFRoZW1lVmFyaWFibGVzIil9KTt2YXIgdjcsYnosVHo9TigoKT0+eyJ1c2Ugc3RyaWN0IjtLcygpO1B5KCk7eTAoKTt2Nz1jbGFzc3tzdGF0aWN7byh0aGlzLCJUaGVtZSIpfWNvbnN0cnVjdG9yKCl7dGhpcy5iYWNrZ3JvdW5kPSIjZjRmNGY0Iix0aGlzLnByaW1hcnlDb2xvcj0iI2NkZTQ5OCIsdGhpcy5zZWNvbmRhcnlDb2xvcj0iI2NkZmZiMiIsdGhpcy5iYWNrZ3JvdW5kPSJ3aGl0ZSIsdGhpcy5tYWluQmtnPSIjY2RlNDk4Iix0aGlzLnNlY29uZEJrZz0iI2NkZmZiMiIsdGhpcy5saW5lQ29sb3I9ImdyZWVuIix0aGlzLmJvcmRlcjE9IiMxMzU0MGMiLHRoaXMuYm9yZGVyMj0iIzZlYWE0OSIsdGhpcy5hcnJvd2hlYWRDb2xvcj0iZ3JlZW4iLHRoaXMuZm9udEZhbWlseT0nInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyx0aGlzLmZvbnRTaXplPSIxNnB4Iix0aGlzLnRlcnRpYXJ5Q29sb3I9THQoIiNjZGU0OTgiLDEwKSx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcj1TaSh0aGlzLnByaW1hcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yPVNpKHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yPVNpKHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnByaW1hcnlUZXh0Q29sb3I9d3QodGhpcy5wcmltYXJ5Q29sb3IpLHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yPXd0KHRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMudGVydGlhcnlUZXh0Q29sb3I9d3QodGhpcy5wcmltYXJ5Q29sb3IpLHRoaXMubGluZUNvbG9yPXd0KHRoaXMuYmFja2dyb3VuZCksdGhpcy50ZXh0Q29sb3I9d3QodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUPTEyLHRoaXMubm9kZUJrZz0iY2FsY3VsYXRlZCIsdGhpcy5ub2RlQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRpdGxlQ29sb3I9IiMzMzMiLHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZD0iI2U4ZThlOCIsdGhpcy5hY3RvckJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvclRleHRDb2xvcj0iYmxhY2siLHRoaXMuYWN0b3JMaW5lQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuc2lnbmFsQ29sb3I9IiMzMzMiLHRoaXMuc2lnbmFsVGV4dENvbG9yPSIjMzMzIix0aGlzLmxhYmVsQm94QmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcj0iIzMyNjkzMiIsdGhpcy5sYWJlbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sb29wVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQmtnQ29sb3I9IiNmZmY1YWQiLHRoaXMubm90ZVRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmF0aW9uQm9yZGVyQ29sb3I9IiM2NjYiLHRoaXMuYWN0aXZhdGlvbkJrZ0NvbG9yPSIjZjRmNGY0Iix0aGlzLnNlcXVlbmNlTnVtYmVyQ29sb3I9IndoaXRlIix0aGlzLnNlY3Rpb25Ca2dDb2xvcj0iIzZlYWE0OSIsdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3I9IndoaXRlIix0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9IiM2ZWFhNDkiLHRoaXMuZXhjbHVkZUJrZ0NvbG9yPSIjZWVlZWVlIix0aGlzLnRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrQmtnQ29sb3I9IiM0ODdlM2EiLHRoaXMudGFza1RleHRMaWdodENvbG9yPSJ3aGl0ZSIsdGhpcy50YXNrVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPSJibGFjayIsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yPSIjMDAzMTYzIix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZ3JpZENvbG9yPSJsaWdodGdyZXkiLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj0ibGlnaHRncmV5Iix0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9ImdyZXkiLHRoaXMuY3JpdEJvcmRlckNvbG9yPSIjZmY4ODg4Iix0aGlzLmNyaXRCa2dDb2xvcj0icmVkIix0aGlzLnRvZGF5TGluZUNvbG9yPSJyZWQiLHRoaXMudmVydExpbmVDb2xvcj0iIzAwQkZGRiIsdGhpcy5wZXJzb25Cb3JkZXI9dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5wZXJzb25Ca2c9dGhpcy5tYWluQmtnLHRoaXMuYXJjaEVkZ2VDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hcmNoRWRnZUFycm93Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYXJjaEVkZ2VXaWR0aD0iMyIsdGhpcy5hcmNoR3JvdXBCb3JkZXJDb2xvcj10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLmFyY2hHcm91cEJvcmRlcldpZHRoPSIycHgiLHRoaXMubGFiZWxDb2xvcj0iYmxhY2siLHRoaXMuZXJyb3JCa2dDb2xvcj0iIzU1MjIyMiIsdGhpcy5lcnJvclRleHRDb2xvcj0iIzU1MjIyMiJ9dXBkYXRlQ29sb3JzKCl7dGhpcy5hY3RvckJvcmRlcj1PdCh0aGlzLm1haW5Ca2csMjApLHRoaXMuYWN0b3JCa2c9dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCb3hCa2dDb2xvcj10aGlzLmFjdG9yQmtnLHRoaXMubGFiZWxUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmxvb3BUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLm5vdGVCb3JkZXJDb2xvcj10aGlzLmJvcmRlcjIsdGhpcy5ub3RlVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5hY3RvckxpbmVDb2xvcj10aGlzLmFjdG9yQm9yZGVyLHRoaXMuY1NjYWxlMD10aGlzLmNTY2FsZTB8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuY1NjYWxlMT10aGlzLmNTY2FsZTF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jU2NhbGUyPXRoaXMuY1NjYWxlMnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuY1NjYWxlMz10aGlzLmNTY2FsZTN8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjMwfSksdGhpcy5jU2NhbGU0PXRoaXMuY1NjYWxlNHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSx0aGlzLmNTY2FsZTU9dGhpcy5jU2NhbGU1fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDo5MH0pLHRoaXMuY1NjYWxlNj10aGlzLmNTY2FsZTZ8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuY1NjYWxlNz10aGlzLmNTY2FsZTd8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjE1MH0pLHRoaXMuY1NjYWxlOD10aGlzLmNTY2FsZTh8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjIxMH0pLHRoaXMuY1NjYWxlOT10aGlzLmNTY2FsZTl8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjI3MH0pLHRoaXMuY1NjYWxlMTA9dGhpcy5jU2NhbGUxMHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MzAwfSksdGhpcy5jU2NhbGUxMT10aGlzLmNTY2FsZTExfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDozMzB9KSx0aGlzLmNTY2FsZVBlZXIxPXRoaXMuY1NjYWxlUGVlcjF8fE90KHRoaXMuc2Vjb25kYXJ5Q29sb3IsNDUpLHRoaXMuY1NjYWxlUGVlcjI9dGhpcy5jU2NhbGVQZWVyMnx8T3QodGhpcy50ZXJ0aWFyeUNvbG9yLDQwKTtmb3IobGV0IGU9MDtlPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7ZSsrKXRoaXNbImNTY2FsZSIrZV09T3QodGhpc1siY1NjYWxlIitlXSwxMCksdGhpc1siY1NjYWxlUGVlciIrZV09dGhpc1siY1NjYWxlUGVlciIrZV18fE90KHRoaXNbImNTY2FsZSIrZV0sMjUpO2ZvcihsZXQgZT0wO2U8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtlKyspdGhpc1siY1NjYWxlSW52IitlXT10aGlzWyJjU2NhbGVJbnYiK2VdfHxNZSh0aGlzWyJjU2NhbGUiK2VdLHtoOjE4MH0pO3RoaXMuc2NhbGVMYWJlbENvbG9yPXRoaXMuc2NhbGVMYWJlbENvbG9yIT09ImNhbGN1bGF0ZWQiJiZ0aGlzLnNjYWxlTGFiZWxDb2xvcj90aGlzLnNjYWxlTGFiZWxDb2xvcjp0aGlzLmxhYmVsVGV4dENvbG9yO2ZvcihsZXQgZT0wO2U8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtlKyspdGhpc1siY1NjYWxlTGFiZWwiK2VdPXRoaXNbImNTY2FsZUxhYmVsIitlXXx8dGhpcy5zY2FsZUxhYmVsQ29sb3I7Zm9yKGxldCBlPTA7ZTw1O2UrKyl0aGlzWyJzdXJmYWNlIitlXT10aGlzWyJzdXJmYWNlIitlXXx8TWUodGhpcy5tYWluQmtnLHtoOjMwLHM6LTMwLGw6LSg1K2UqNSl9KSx0aGlzWyJzdXJmYWNlUGVlciIrZV09dGhpc1sic3VyZmFjZVBlZXIiK2VdfHxNZSh0aGlzLm1haW5Ca2cse2g6MzAsczotMzAsbDotKDgrZSo1KX0pO3RoaXMubm9kZUJrZz10aGlzLm1haW5Ca2csdGhpcy5ub2RlQm9yZGVyPXRoaXMuYm9yZGVyMSx0aGlzLmNsdXN0ZXJCa2c9dGhpcy5zZWNvbmRCa2csdGhpcy5jbHVzdGVyQm9yZGVyPXRoaXMuYm9yZGVyMix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy50YXNrQm9yZGVyQ29sb3I9dGhpcy5ib3JkZXIxLHRoaXMudGFza1RleHRDb2xvcj10aGlzLnRhc2tUZXh0TGlnaHRDb2xvcix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPXRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9dGhpcy50YXNrQm9yZGVyQ29sb3IsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9dGhpcy5tYWluQmtnLHRoaXMuYXJjaEVkZ2VDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLmFyY2hFZGdlQXJyb3dDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLnJvd09kZD10aGlzLnJvd09kZHx8THQodGhpcy5tYWluQmtnLDc1KXx8IiNmZmZmZmYiLHRoaXMucm93RXZlbj10aGlzLnJvd0V2ZW58fEx0KHRoaXMubWFpbkJrZywyMCksdGhpcy50cmFuc2l0aW9uQ29sb3I9dGhpcy50cmFuc2l0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3I9dGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5zdGF0ZUxhYmVsQ29sb3I9dGhpcy5zdGF0ZUxhYmVsQ29sb3J8fHRoaXMuc3RhdGVCa2d8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnN0YXRlQmtnPXRoaXMuc3RhdGVCa2d8fHRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yPXRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3J8fHRoaXMuc3RhdGVCa2csdGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlQmFja2dyb3VuZHx8dGhpcy5iYWNrZ3JvdW5kfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5hbHRCYWNrZ3JvdW5kPXRoaXMuYWx0QmFja2dyb3VuZHx8IiNmMGYwZjAiLHRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kfHx0aGlzLm1haW5Ca2csdGhpcy5jb21wb3NpdGVCb3JkZXI9dGhpcy5jb21wb3NpdGVCb3JkZXJ8fHRoaXMubm9kZUJvcmRlcix0aGlzLmlubmVyRW5kQmFja2dyb3VuZD10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuZXJyb3JCa2dDb2xvcj10aGlzLmVycm9yQmtnQ29sb3J8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmVycm9yVGV4dENvbG9yPXRoaXMuZXJyb3JUZXh0Q29sb3J8fHRoaXMudGVydGlhcnlUZXh0Q29sb3IsdGhpcy50cmFuc2l0aW9uQ29sb3I9dGhpcy50cmFuc2l0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMuY2xhc3NUZXh0PXRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLmZpbGxUeXBlMD10aGlzLnByaW1hcnlDb2xvcix0aGlzLmZpbGxUeXBlMT10aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZmlsbFR5cGUyPU1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTM9TWUodGhpcy5zZWNvbmRhcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGU0PU1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU1PU1lKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTY9TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5maWxsVHlwZTc9TWUodGhpcy5zZWNvbmRhcnlDb2xvcix7aDoxMjh9KSx0aGlzLnBpZTE9dGhpcy5waWUxfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnBpZTI9dGhpcy5waWUyfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMucGllMz10aGlzLnBpZTN8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLnBpZTQ9dGhpcy5waWU0fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7bDotMzB9KSx0aGlzLnBpZTU9dGhpcy5waWU1fHxNZSh0aGlzLnNlY29uZGFyeUNvbG9yLHtsOi0zMH0pLHRoaXMucGllNj10aGlzLnBpZTZ8fE1lKHRoaXMudGVydGlhcnlDb2xvcix7aDo0MCxsOi00MH0pLHRoaXMucGllNz10aGlzLnBpZTd8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwLGw6LTEwfSksdGhpcy5waWU4PXRoaXMucGllOHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwLGw6LTEwfSksdGhpcy5waWU5PXRoaXMucGllOXx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwLGw6MH0pLHRoaXMucGllMTA9dGhpcy5waWUxMHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjAsbDotNTB9KSx0aGlzLnBpZTExPXRoaXMucGllMTF8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MCxsOi01MH0pLHRoaXMucGllMTI9dGhpcy5waWUxMnx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwLGw6LTUwfSksdGhpcy5waWVUaXRsZVRleHRTaXplPXRoaXMucGllVGl0bGVUZXh0U2l6ZXx8IjI1cHgiLHRoaXMucGllVGl0bGVUZXh0Q29sb3I9dGhpcy5waWVUaXRsZVRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZT10aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllU2VjdGlvblRleHRDb2xvcj10aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMucGllTGVnZW5kVGV4dFNpemU9dGhpcy5waWVMZWdlbmRUZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllTGVnZW5kVGV4dENvbG9yPXRoaXMucGllTGVnZW5kVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU3Ryb2tlQ29sb3I9dGhpcy5waWVTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZVN0cm9rZVdpZHRoPXRoaXMucGllU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3V0ZXJTdHJva2VXaWR0aD10aGlzLnBpZU91dGVyU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3V0ZXJTdHJva2VDb2xvcj10aGlzLnBpZU91dGVyU3Ryb2tlQ29sb3J8fCJibGFjayIsdGhpcy5waWVPcGFjaXR5PXRoaXMucGllT3BhY2l0eXx8IjAuNyIsdGhpcy5xdWFkcmFudDFGaWxsPXRoaXMucXVhZHJhbnQxRmlsbHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5xdWFkcmFudDJGaWxsPXRoaXMucXVhZHJhbnQyRmlsbHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise3I6NSxnOjUsYjo1fSksdGhpcy5xdWFkcmFudDNGaWxsPXRoaXMucXVhZHJhbnQzRmlsbHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise3I6MTAsZzoxMCxiOjEwfSksdGhpcy5xdWFkcmFudDRGaWxsPXRoaXMucXVhZHJhbnQ0RmlsbHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise3I6MTUsZzoxNSxiOjE1fSksdGhpcy5xdWFkcmFudDFUZXh0RmlsbD10aGlzLnF1YWRyYW50MVRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudDJUZXh0RmlsbD10aGlzLnF1YWRyYW50MlRleHRGaWxsfHxNZSh0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTUsZzotNSxiOi01fSksdGhpcy5xdWFkcmFudDNUZXh0RmlsbD10aGlzLnF1YWRyYW50M1RleHRGaWxsfHxNZSh0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTEwLGc6LTEwLGI6LTEwfSksdGhpcy5xdWFkcmFudDRUZXh0RmlsbD10aGlzLnF1YWRyYW50NFRleHRGaWxsfHxNZSh0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTE1LGc6LTE1LGI6LTE1fSksdGhpcy5xdWFkcmFudFBvaW50RmlsbD10aGlzLnF1YWRyYW50UG9pbnRGaWxsfHxsYSh0aGlzLnF1YWRyYW50MUZpbGwpP0x0KHRoaXMucXVhZHJhbnQxRmlsbCk6T3QodGhpcy5xdWFkcmFudDFGaWxsKSx0aGlzLnF1YWRyYW50UG9pbnRUZXh0RmlsbD10aGlzLnF1YWRyYW50UG9pbnRUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRYQXhpc1RleHRGaWxsPXRoaXMucXVhZHJhbnRYQXhpc1RleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFlBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFlBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsPXRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGx8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudFRpdGxlRmlsbD10aGlzLnF1YWRyYW50VGl0bGVGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5wYWNrZXQ9e3N0YXJ0Qnl0ZUNvbG9yOnRoaXMucHJpbWFyeVRleHRDb2xvcixlbmRCeXRlQ29sb3I6dGhpcy5wcmltYXJ5VGV4dENvbG9yLGxhYmVsQ29sb3I6dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRpdGxlQ29sb3I6dGhpcy5wcmltYXJ5VGV4dENvbG9yLGJsb2NrU3Ryb2tlQ29sb3I6dGhpcy5wcmltYXJ5VGV4dENvbG9yLGJsb2NrRmlsbENvbG9yOnRoaXMubWFpbkJrZ30sdGhpcy5yYWRhcj17YXhpc0NvbG9yOnRoaXMucmFkYXI/LmF4aXNDb2xvcnx8dGhpcy5saW5lQ29sb3IsYXhpc1N0cm9rZVdpZHRoOnRoaXMucmFkYXI/LmF4aXNTdHJva2VXaWR0aHx8MixheGlzTGFiZWxGb250U2l6ZTp0aGlzLnJhZGFyPy5heGlzTGFiZWxGb250U2l6ZXx8MTIsY3VydmVPcGFjaXR5OnRoaXMucmFkYXI/LmN1cnZlT3BhY2l0eXx8LjUsY3VydmVTdHJva2VXaWR0aDp0aGlzLnJhZGFyPy5jdXJ2ZVN0cm9rZVdpZHRofHwyLGdyYXRpY3VsZUNvbG9yOnRoaXMucmFkYXI/LmdyYXRpY3VsZUNvbG9yfHwiI0RFREVERSIsZ3JhdGljdWxlU3Ryb2tlV2lkdGg6dGhpcy5yYWRhcj8uZ3JhdGljdWxlU3Ryb2tlV2lkdGh8fDEsZ3JhdGljdWxlT3BhY2l0eTp0aGlzLnJhZGFyPy5ncmF0aWN1bGVPcGFjaXR5fHwuMyxsZWdlbmRCb3hTaXplOnRoaXMucmFkYXI/LmxlZ2VuZEJveFNpemV8fDEyLGxlZ2VuZEZvbnRTaXplOnRoaXMucmFkYXI/LmxlZ2VuZEZvbnRTaXplfHwxMn0sdGhpcy54eUNoYXJ0PXtiYWNrZ3JvdW5kQ29sb3I6dGhpcy54eUNoYXJ0Py5iYWNrZ3JvdW5kQ29sb3J8fHRoaXMuYmFja2dyb3VuZCx0aXRsZUNvbG9yOnRoaXMueHlDaGFydD8udGl0bGVDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzVGl0bGVDb2xvcjp0aGlzLnh5Q2hhcnQ/LnhBeGlzVGl0bGVDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzTGFiZWxDb2xvcjp0aGlzLnh5Q2hhcnQ/LnhBeGlzTGFiZWxDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzVGlja0NvbG9yOnRoaXMueHlDaGFydD8ueEF4aXNUaWNrQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc0xpbmVDb2xvcjp0aGlzLnh5Q2hhcnQ/LnhBeGlzTGluZUNvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNUaXRsZUNvbG9yOnRoaXMueHlDaGFydD8ueUF4aXNUaXRsZUNvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNMYWJlbENvbG9yOnRoaXMueHlDaGFydD8ueUF4aXNMYWJlbENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNUaWNrQ29sb3I6dGhpcy54eUNoYXJ0Py55QXhpc1RpY2tDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzTGluZUNvbG9yOnRoaXMueHlDaGFydD8ueUF4aXNMaW5lQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcixwbG90Q29sb3JQYWxldHRlOnRoaXMueHlDaGFydD8ucGxvdENvbG9yUGFsZXR0ZXx8IiNDREU0OTgsI0ZGNkI2QiwjQTBEMkRCLCNEN0JERTIsI0YwRjBGMCwjRkZDM0EwLCM3RkQ4QkUsI0ZGOUE4QiwjRkFGM0UwLCNGRkYxNzYifSx0aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZD10aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemU9dGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemV8fCIxIix0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yPXRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlbGF0aW9uQ29sb3I9dGhpcy5yZWxhdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kPXRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmR8fHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZCx0aGlzLnJlbGF0aW9uTGFiZWxDb2xvcj10aGlzLnJlbGF0aW9uTGFiZWxDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmdpdDA9dGhpcy5naXQwfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmdpdDE9dGhpcy5naXQxfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZ2l0Mj10aGlzLmdpdDJ8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmdpdDM9dGhpcy5naXQzfHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDotMzB9KSx0aGlzLmdpdDQ9dGhpcy5naXQ0fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjB9KSx0aGlzLmdpdDU9dGhpcy5naXQ1fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDotOTB9KSx0aGlzLmdpdDY9dGhpcy5naXQ2fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDo2MH0pLHRoaXMuZ2l0Nz10aGlzLmdpdDd8fE1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMH0pLHRoaXMuZGFya01vZGU/KHRoaXMuZ2l0MD1MdCh0aGlzLmdpdDAsMjUpLHRoaXMuZ2l0MT1MdCh0aGlzLmdpdDEsMjUpLHRoaXMuZ2l0Mj1MdCh0aGlzLmdpdDIsMjUpLHRoaXMuZ2l0Mz1MdCh0aGlzLmdpdDMsMjUpLHRoaXMuZ2l0ND1MdCh0aGlzLmdpdDQsMjUpLHRoaXMuZ2l0NT1MdCh0aGlzLmdpdDUsMjUpLHRoaXMuZ2l0Nj1MdCh0aGlzLmdpdDYsMjUpLHRoaXMuZ2l0Nz1MdCh0aGlzLmdpdDcsMjUpKToodGhpcy5naXQwPU90KHRoaXMuZ2l0MCwyNSksdGhpcy5naXQxPU90KHRoaXMuZ2l0MSwyNSksdGhpcy5naXQyPU90KHRoaXMuZ2l0MiwyNSksdGhpcy5naXQzPU90KHRoaXMuZ2l0MywyNSksdGhpcy5naXQ0PU90KHRoaXMuZ2l0NCwyNSksdGhpcy5naXQ1PU90KHRoaXMuZ2l0NSwyNSksdGhpcy5naXQ2PU90KHRoaXMuZ2l0NiwyNSksdGhpcy5naXQ3PU90KHRoaXMuZ2l0NywyNSkpLHRoaXMuZ2l0SW52MD10aGlzLmdpdEludjB8fHd0KHRoaXMuZ2l0MCksdGhpcy5naXRJbnYxPXRoaXMuZ2l0SW52MXx8d3QodGhpcy5naXQxKSx0aGlzLmdpdEludjI9dGhpcy5naXRJbnYyfHx3dCh0aGlzLmdpdDIpLHRoaXMuZ2l0SW52Mz10aGlzLmdpdEludjN8fHd0KHRoaXMuZ2l0MyksdGhpcy5naXRJbnY0PXRoaXMuZ2l0SW52NHx8d3QodGhpcy5naXQ0KSx0aGlzLmdpdEludjU9dGhpcy5naXRJbnY1fHx3dCh0aGlzLmdpdDUpLHRoaXMuZ2l0SW52Nj10aGlzLmdpdEludjZ8fHd0KHRoaXMuZ2l0NiksdGhpcy5naXRJbnY3PXRoaXMuZ2l0SW52N3x8d3QodGhpcy5naXQ3KSx0aGlzLmdpdEJyYW5jaExhYmVsMD10aGlzLmdpdEJyYW5jaExhYmVsMHx8d3QodGhpcy5sYWJlbFRleHRDb2xvciksdGhpcy5naXRCcmFuY2hMYWJlbDE9dGhpcy5naXRCcmFuY2hMYWJlbDF8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDI9dGhpcy5naXRCcmFuY2hMYWJlbDJ8fHRoaXMubGFiZWxUZXh0Q29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDM9dGhpcy5naXRCcmFuY2hMYWJlbDN8fHd0KHRoaXMubGFiZWxUZXh0Q29sb3IpLHRoaXMuZ2l0QnJhbmNoTGFiZWw0PXRoaXMuZ2l0QnJhbmNoTGFiZWw0fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw1PXRoaXMuZ2l0QnJhbmNoTGFiZWw1fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw2PXRoaXMuZ2l0QnJhbmNoTGFiZWw2fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw3PXRoaXMuZ2l0QnJhbmNoTGFiZWw3fHx0aGlzLmxhYmVsVGV4dENvbG9yLHRoaXMudGFnTGFiZWxDb2xvcj10aGlzLnRhZ0xhYmVsQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnRhZ0xhYmVsQmFja2dyb3VuZD10aGlzLnRhZ0xhYmVsQmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy50YWdMYWJlbEJvcmRlcj10aGlzLnRhZ0JvcmRlcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy50YWdMYWJlbEZvbnRTaXplPXRoaXMudGFnTGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuY29tbWl0TGFiZWxDb2xvcj10aGlzLmNvbW1pdExhYmVsQ29sb3J8fHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yLHRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kPXRoaXMuY29tbWl0TGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuY29tbWl0TGFiZWxGb250U2l6ZT10aGlzLmNvbW1pdExhYmVsRm9udFNpemV8fCIxMHB4Iix0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZD10aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvck9kZHx8aGgsdGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVuPXRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yRXZlbnx8Zmh9Y2FsY3VsYXRlKGUpe2lmKHR5cGVvZiBlIT0ib2JqZWN0Iil7dGhpcy51cGRhdGVDb2xvcnMoKTtyZXR1cm59bGV0IHI9T2JqZWN0LmtleXMoZSk7ci5mb3JFYWNoKG49Pnt0aGlzW25dPWVbbl19KSx0aGlzLnVwZGF0ZUNvbG9ycygpLHIuZm9yRWFjaChuPT57dGhpc1tuXT1lW25dfSl9fSxiej1vKHQ9PntsZXQgZT1uZXcgdjc7cmV0dXJuIGUuY2FsY3VsYXRlKHQpLGV9LCJnZXRUaGVtZVZhcmlhYmxlcyIpfSk7dmFyIHg3LHd6LGt6PU4oKCk9PnsidXNlIHN0cmljdCI7S3MoKTt5MCgpO1B5KCk7eDc9Y2xhc3N7c3RhdGlje28odGhpcywiVGhlbWUiKX1jb25zdHJ1Y3Rvcigpe3RoaXMucHJpbWFyeUNvbG9yPSIjZWVlIix0aGlzLmNvbnRyYXN0PSIjNzA3MDcwIix0aGlzLnNlY29uZGFyeUNvbG9yPUx0KHRoaXMuY29udHJhc3QsNTUpLHRoaXMuYmFja2dyb3VuZD0iI2ZmZmZmZiIsdGhpcy50ZXJ0aWFyeUNvbG9yPU1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOi0xNjB9KSx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcj1TaSh0aGlzLnByaW1hcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yPVNpKHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yPVNpKHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnByaW1hcnlUZXh0Q29sb3I9d3QodGhpcy5wcmltYXJ5Q29sb3IpLHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yPXd0KHRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMudGVydGlhcnlUZXh0Q29sb3I9d3QodGhpcy50ZXJ0aWFyeUNvbG9yKSx0aGlzLmxpbmVDb2xvcj13dCh0aGlzLmJhY2tncm91bmQpLHRoaXMudGV4dENvbG9yPXd0KHRoaXMuYmFja2dyb3VuZCksdGhpcy5tYWluQmtnPSIjZWVlIix0aGlzLnNlY29uZEJrZz0iY2FsY3VsYXRlZCIsdGhpcy5saW5lQ29sb3I9IiM2NjYiLHRoaXMuYm9yZGVyMT0iIzk5OSIsdGhpcy5ib3JkZXIyPSJjYWxjdWxhdGVkIix0aGlzLm5vdGU9IiNmZmEiLHRoaXMudGV4dD0iIzMzMyIsdGhpcy5jcml0aWNhbD0iI2Q0MiIsdGhpcy5kb25lPSIjYmJiIix0aGlzLmFycm93aGVhZENvbG9yPSIjMzMzMzMzIix0aGlzLmZvbnRGYW1pbHk9JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsdGhpcy5mb250U2l6ZT0iMTZweCIsdGhpcy5USEVNRV9DT0xPUl9MSU1JVD0xMix0aGlzLm5vZGVCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubm9kZUJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQmtnPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuZGVmYXVsdExpbmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50aXRsZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9IndoaXRlIix0aGlzLmFjdG9yQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQmtnPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yTGluZUNvbG9yPXRoaXMuYWN0b3JCb3JkZXIsdGhpcy5zaWduYWxDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zaWduYWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxCb3hCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxvb3BUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj0iIzY2NiIsdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9IiNmNGY0ZjQiLHRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj0iY2FsY3VsYXRlZCIsdGhpcy5leGNsdWRlQmtnQ29sb3I9IiNlZWVlZWUiLHRoaXMudGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9IndoaXRlIix0aGlzLnRhc2tUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHREYXJrQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcj0iIzAwMzE2MyIsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmdyaWRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5kb25lVGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuY3JpdEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmNyaXRCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50b2RheUxpbmVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy52ZXJ0TGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnBlcnNvbkJvcmRlcj10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnBlcnNvbkJrZz10aGlzLm1haW5Ca2csdGhpcy5hcmNoRWRnZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFyY2hFZGdlQXJyb3dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hcmNoRWRnZVdpZHRoPSIzIix0aGlzLmFyY2hHcm91cEJvcmRlckNvbG9yPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuYXJjaEdyb3VwQm9yZGVyV2lkdGg9IjJweCIsdGhpcy5yb3dPZGQ9dGhpcy5yb3dPZGR8fEx0KHRoaXMubWFpbkJrZyw3NSl8fCIjZmZmZmZmIix0aGlzLnJvd0V2ZW49dGhpcy5yb3dFdmVufHwiI2Y0ZjRmNCIsdGhpcy5sYWJlbENvbG9yPSJibGFjayIsdGhpcy5lcnJvckJrZ0NvbG9yPSIjNTUyMjIyIix0aGlzLmVycm9yVGV4dENvbG9yPSIjNTUyMjIyIn11cGRhdGVDb2xvcnMoKXt0aGlzLnNlY29uZEJrZz1MdCh0aGlzLmNvbnRyYXN0LDU1KSx0aGlzLmJvcmRlcjI9dGhpcy5jb250cmFzdCx0aGlzLmFjdG9yQm9yZGVyPUx0KHRoaXMuYm9yZGVyMSwyMyksdGhpcy5hY3RvckJrZz10aGlzLm1haW5Ca2csdGhpcy5hY3RvclRleHRDb2xvcj10aGlzLnRleHQsdGhpcy5hY3RvckxpbmVDb2xvcj10aGlzLmFjdG9yQm9yZGVyLHRoaXMuc2lnbmFsQ29sb3I9dGhpcy50ZXh0LHRoaXMuc2lnbmFsVGV4dENvbG9yPXRoaXMudGV4dCx0aGlzLmxhYmVsQm94QmtnQ29sb3I9dGhpcy5hY3RvckJrZyx0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9dGhpcy5hY3RvckJvcmRlcix0aGlzLmxhYmVsVGV4dENvbG9yPXRoaXMudGV4dCx0aGlzLmxvb3BUZXh0Q29sb3I9dGhpcy50ZXh0LHRoaXMubm90ZUJvcmRlckNvbG9yPSIjOTk5Iix0aGlzLm5vdGVCa2dDb2xvcj0iIzY2NiIsdGhpcy5ub3RlVGV4dENvbG9yPSIjZmZmIix0aGlzLmNTY2FsZTA9dGhpcy5jU2NhbGUwfHwiIzU1NSIsdGhpcy5jU2NhbGUxPXRoaXMuY1NjYWxlMXx8IiNGNEY0RjQiLHRoaXMuY1NjYWxlMj10aGlzLmNTY2FsZTJ8fCIjNTU1Iix0aGlzLmNTY2FsZTM9dGhpcy5jU2NhbGUzfHwiI0JCQiIsdGhpcy5jU2NhbGU0PXRoaXMuY1NjYWxlNHx8IiM3NzciLHRoaXMuY1NjYWxlNT10aGlzLmNTY2FsZTV8fCIjOTk5Iix0aGlzLmNTY2FsZTY9dGhpcy5jU2NhbGU2fHwiI0RERCIsdGhpcy5jU2NhbGU3PXRoaXMuY1NjYWxlN3x8IiNGRkYiLHRoaXMuY1NjYWxlOD10aGlzLmNTY2FsZTh8fCIjREREIix0aGlzLmNTY2FsZTk9dGhpcy5jU2NhbGU5fHwiI0JCQiIsdGhpcy5jU2NhbGUxMD10aGlzLmNTY2FsZTEwfHwiIzk5OSIsdGhpcy5jU2NhbGUxMT10aGlzLmNTY2FsZTExfHwiIzc3NyI7Zm9yKGxldCBlPTA7ZTx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO2UrKyl0aGlzWyJjU2NhbGVJbnYiK2VdPXRoaXNbImNTY2FsZUludiIrZV18fHd0KHRoaXNbImNTY2FsZSIrZV0pO2ZvcihsZXQgZT0wO2U8dGhpcy5USEVNRV9DT0xPUl9MSU1JVDtlKyspdGhpcy5kYXJrTW9kZT90aGlzWyJjU2NhbGVQZWVyIitlXT10aGlzWyJjU2NhbGVQZWVyIitlXXx8THQodGhpc1siY1NjYWxlIitlXSwxMCk6dGhpc1siY1NjYWxlUGVlciIrZV09dGhpc1siY1NjYWxlUGVlciIrZV18fE90KHRoaXNbImNTY2FsZSIrZV0sMTApO3RoaXMuc2NhbGVMYWJlbENvbG9yPXRoaXMuc2NhbGVMYWJlbENvbG9yfHwodGhpcy5kYXJrTW9kZT8iYmxhY2siOnRoaXMubGFiZWxUZXh0Q29sb3IpLHRoaXMuY1NjYWxlTGFiZWwwPXRoaXMuY1NjYWxlTGFiZWwwfHx0aGlzLmNTY2FsZTEsdGhpcy5jU2NhbGVMYWJlbDI9dGhpcy5jU2NhbGVMYWJlbDJ8fHRoaXMuY1NjYWxlMTtmb3IobGV0IGU9MDtlPHRoaXMuVEhFTUVfQ09MT1JfTElNSVQ7ZSsrKXRoaXNbImNTY2FsZUxhYmVsIitlXT10aGlzWyJjU2NhbGVMYWJlbCIrZV18fHRoaXMuc2NhbGVMYWJlbENvbG9yO2ZvcihsZXQgZT0wO2U8NTtlKyspdGhpc1sic3VyZmFjZSIrZV09dGhpc1sic3VyZmFjZSIrZV18fE1lKHRoaXMubWFpbkJrZyx7bDotKDUrZSo1KX0pLHRoaXNbInN1cmZhY2VQZWVyIitlXT10aGlzWyJzdXJmYWNlUGVlciIrZV18fE1lKHRoaXMubWFpbkJrZyx7bDotKDgrZSo1KX0pO3RoaXMubm9kZUJrZz10aGlzLm1haW5Ca2csdGhpcy5ub2RlQm9yZGVyPXRoaXMuYm9yZGVyMSx0aGlzLmNsdXN0ZXJCa2c9dGhpcy5zZWNvbmRCa2csdGhpcy5jbHVzdGVyQm9yZGVyPXRoaXMuYm9yZGVyMix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy50aXRsZUNvbG9yPXRoaXMudGV4dCx0aGlzLnNlY3Rpb25Ca2dDb2xvcj1MdCh0aGlzLmNvbnRyYXN0LDMwKSx0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9THQodGhpcy5jb250cmFzdCwzMCksdGhpcy50YXNrQm9yZGVyQ29sb3I9T3QodGhpcy5jb250cmFzdCwxMCksdGhpcy50YXNrQmtnQ29sb3I9dGhpcy5jb250cmFzdCx0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3IsdGhpcy50YXNrVGV4dERhcmtDb2xvcj10aGlzLnRleHQsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj10aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPXRoaXMudGFza0JvcmRlckNvbG9yLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPXRoaXMubWFpbkJrZyx0aGlzLmdyaWRDb2xvcj1MdCh0aGlzLmJvcmRlcjEsMzApLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj10aGlzLmRvbmUsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuY3JpdEJrZ0NvbG9yPXRoaXMuY3JpdGljYWwsdGhpcy5jcml0Qm9yZGVyQ29sb3I9T3QodGhpcy5jcml0QmtnQ29sb3IsMTApLHRoaXMudG9kYXlMaW5lQ29sb3I9dGhpcy5jcml0QmtnQ29sb3IsdGhpcy52ZXJ0TGluZUNvbG9yPXRoaXMuY3JpdEJrZ0NvbG9yLHRoaXMuYXJjaEVkZ2VDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLmFyY2hFZGdlQXJyb3dDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8IiMwMDAiLHRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3I9dGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5zdGF0ZUxhYmVsQ29sb3I9dGhpcy5zdGF0ZUxhYmVsQ29sb3J8fHRoaXMuc3RhdGVCa2d8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnN0YXRlQmtnPXRoaXMuc3RhdGVCa2d8fHRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yPXRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3J8fHRoaXMuc3RhdGVCa2csdGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlQmFja2dyb3VuZHx8dGhpcy5iYWNrZ3JvdW5kfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5hbHRCYWNrZ3JvdW5kPXRoaXMuYWx0QmFja2dyb3VuZHx8IiNmNGY0ZjQiLHRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kfHx0aGlzLm1haW5Ca2csdGhpcy5zdGF0ZUJvcmRlcj10aGlzLnN0YXRlQm9yZGVyfHwiIzAwMCIsdGhpcy5pbm5lckVuZEJhY2tncm91bmQ9dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5zcGVjaWFsU3RhdGVDb2xvcj0iIzIyMiIsdGhpcy5lcnJvckJrZ0NvbG9yPXRoaXMuZXJyb3JCa2dDb2xvcnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZXJyb3JUZXh0Q29sb3I9dGhpcy5lcnJvclRleHRDb2xvcnx8dGhpcy50ZXJ0aWFyeVRleHRDb2xvcix0aGlzLmNsYXNzVGV4dD10aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5maWxsVHlwZTA9dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTE9dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmZpbGxUeXBlMj1NZSh0aGlzLnByaW1hcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGUzPU1lKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlND1NZSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNT1NZSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU2PU1lKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyOH0pLHRoaXMuZmlsbFR5cGU3PU1lKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6MTI4fSk7Zm9yKGxldCBlPTA7ZTx0aGlzLlRIRU1FX0NPTE9SX0xJTUlUO2UrKyl0aGlzWyJwaWUiK2VdPXRoaXNbImNTY2FsZSIrZV07dGhpcy5waWUxMj10aGlzLnBpZTAsdGhpcy5waWVUaXRsZVRleHRTaXplPXRoaXMucGllVGl0bGVUZXh0U2l6ZXx8IjI1cHgiLHRoaXMucGllVGl0bGVUZXh0Q29sb3I9dGhpcy5waWVUaXRsZVRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZT10aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllU2VjdGlvblRleHRDb2xvcj10aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMucGllTGVnZW5kVGV4dFNpemU9dGhpcy5waWVMZWdlbmRUZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllTGVnZW5kVGV4dENvbG9yPXRoaXMucGllTGVnZW5kVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU3Ryb2tlQ29sb3I9dGhpcy5waWVTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZVN0cm9rZVdpZHRoPXRoaXMucGllU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3V0ZXJTdHJva2VXaWR0aD10aGlzLnBpZU91dGVyU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3V0ZXJTdHJva2VDb2xvcj10aGlzLnBpZU91dGVyU3Ryb2tlQ29sb3J8fCJibGFjayIsdGhpcy5waWVPcGFjaXR5PXRoaXMucGllT3BhY2l0eXx8IjAuNyIsdGhpcy5xdWFkcmFudDFGaWxsPXRoaXMucXVhZHJhbnQxRmlsbHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5xdWFkcmFudDJGaWxsPXRoaXMucXVhZHJhbnQyRmlsbHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise3I6NSxnOjUsYjo1fSksdGhpcy5xdWFkcmFudDNGaWxsPXRoaXMucXVhZHJhbnQzRmlsbHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise3I6MTAsZzoxMCxiOjEwfSksdGhpcy5xdWFkcmFudDRGaWxsPXRoaXMucXVhZHJhbnQ0RmlsbHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise3I6MTUsZzoxNSxiOjE1fSksdGhpcy5xdWFkcmFudDFUZXh0RmlsbD10aGlzLnF1YWRyYW50MVRleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudDJUZXh0RmlsbD10aGlzLnF1YWRyYW50MlRleHRGaWxsfHxNZSh0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTUsZzotNSxiOi01fSksdGhpcy5xdWFkcmFudDNUZXh0RmlsbD10aGlzLnF1YWRyYW50M1RleHRGaWxsfHxNZSh0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTEwLGc6LTEwLGI6LTEwfSksdGhpcy5xdWFkcmFudDRUZXh0RmlsbD10aGlzLnF1YWRyYW50NFRleHRGaWxsfHxNZSh0aGlzLnByaW1hcnlUZXh0Q29sb3Ise3I6LTE1LGc6LTE1LGI6LTE1fSksdGhpcy5xdWFkcmFudFBvaW50RmlsbD10aGlzLnF1YWRyYW50UG9pbnRGaWxsfHxsYSh0aGlzLnF1YWRyYW50MUZpbGwpP0x0KHRoaXMucXVhZHJhbnQxRmlsbCk6T3QodGhpcy5xdWFkcmFudDFGaWxsKSx0aGlzLnF1YWRyYW50UG9pbnRUZXh0RmlsbD10aGlzLnF1YWRyYW50UG9pbnRUZXh0RmlsbHx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucXVhZHJhbnRYQXhpc1RleHRGaWxsPXRoaXMucXVhZHJhbnRYQXhpc1RleHRGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5xdWFkcmFudFlBeGlzVGV4dEZpbGw9dGhpcy5xdWFkcmFudFlBeGlzVGV4dEZpbGx8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnF1YWRyYW50SW50ZXJuYWxCb3JkZXJTdHJva2VGaWxsPXRoaXMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGx8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGw9dGhpcy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbHx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5xdWFkcmFudFRpdGxlRmlsbD10aGlzLnF1YWRyYW50VGl0bGVGaWxsfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy54eUNoYXJ0PXtiYWNrZ3JvdW5kQ29sb3I6dGhpcy54eUNoYXJ0Py5iYWNrZ3JvdW5kQ29sb3J8fHRoaXMuYmFja2dyb3VuZCx0aXRsZUNvbG9yOnRoaXMueHlDaGFydD8udGl0bGVDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzVGl0bGVDb2xvcjp0aGlzLnh5Q2hhcnQ/LnhBeGlzVGl0bGVDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzTGFiZWxDb2xvcjp0aGlzLnh5Q2hhcnQ/LnhBeGlzTGFiZWxDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHhBeGlzVGlja0NvbG9yOnRoaXMueHlDaGFydD8ueEF4aXNUaWNrQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix4QXhpc0xpbmVDb2xvcjp0aGlzLnh5Q2hhcnQ/LnhBeGlzTGluZUNvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNUaXRsZUNvbG9yOnRoaXMueHlDaGFydD8ueUF4aXNUaXRsZUNvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNMYWJlbENvbG9yOnRoaXMueHlDaGFydD8ueUF4aXNMYWJlbENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IseUF4aXNUaWNrQ29sb3I6dGhpcy54eUNoYXJ0Py55QXhpc1RpY2tDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHlBeGlzTGluZUNvbG9yOnRoaXMueHlDaGFydD8ueUF4aXNMaW5lQ29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcixwbG90Q29sb3JQYWxldHRlOnRoaXMueHlDaGFydD8ucGxvdENvbG9yUGFsZXR0ZXx8IiNFRUUsIzZCQjhFNCwjOEFDQjg4LCNDN0FDRDYsI0U4RENDMiwjRkZCMkE4LCNGRkYzODAsIzdFOEQ5MSwjRkZEOEIxLCNGQUYzRTAifSx0aGlzLnJhZGFyPXtheGlzQ29sb3I6dGhpcy5yYWRhcj8uYXhpc0NvbG9yfHx0aGlzLmxpbmVDb2xvcixheGlzU3Ryb2tlV2lkdGg6dGhpcy5yYWRhcj8uYXhpc1N0cm9rZVdpZHRofHwyLGF4aXNMYWJlbEZvbnRTaXplOnRoaXMucmFkYXI/LmF4aXNMYWJlbEZvbnRTaXplfHwxMixjdXJ2ZU9wYWNpdHk6dGhpcy5yYWRhcj8uY3VydmVPcGFjaXR5fHwuNSxjdXJ2ZVN0cm9rZVdpZHRoOnRoaXMucmFkYXI/LmN1cnZlU3Ryb2tlV2lkdGh8fDIsZ3JhdGljdWxlQ29sb3I6dGhpcy5yYWRhcj8uZ3JhdGljdWxlQ29sb3J8fCIjREVERURFIixncmF0aWN1bGVTdHJva2VXaWR0aDp0aGlzLnJhZGFyPy5ncmF0aWN1bGVTdHJva2VXaWR0aHx8MSxncmF0aWN1bGVPcGFjaXR5OnRoaXMucmFkYXI/LmdyYXRpY3VsZU9wYWNpdHl8fC4zLGxlZ2VuZEJveFNpemU6dGhpcy5yYWRhcj8ubGVnZW5kQm94U2l6ZXx8MTIsbGVnZW5kRm9udFNpemU6dGhpcy5yYWRhcj8ubGVnZW5kRm9udFNpemV8fDEyfSx0aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZD10aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemU9dGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemV8fCIxIix0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yPXRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlbGF0aW9uQ29sb3I9dGhpcy5yZWxhdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kPXRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmR8fHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZCx0aGlzLnJlbGF0aW9uTGFiZWxDb2xvcj10aGlzLnJlbGF0aW9uTGFiZWxDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmdpdDA9T3QodGhpcy5waWUxLDI1KXx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5naXQxPXRoaXMucGllMnx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmdpdDI9dGhpcy5waWUzfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5naXQzPXRoaXMucGllNHx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTMwfSksdGhpcy5naXQ0PXRoaXMucGllNXx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwfSksdGhpcy5naXQ1PXRoaXMucGllNnx8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTkwfSksdGhpcy5naXQ2PXRoaXMucGllN3x8TWUodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjB9KSx0aGlzLmdpdDc9dGhpcy5waWU4fHxNZSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjB9KSx0aGlzLmdpdEludjA9dGhpcy5naXRJbnYwfHx3dCh0aGlzLmdpdDApLHRoaXMuZ2l0SW52MT10aGlzLmdpdEludjF8fHd0KHRoaXMuZ2l0MSksdGhpcy5naXRJbnYyPXRoaXMuZ2l0SW52Mnx8d3QodGhpcy5naXQyKSx0aGlzLmdpdEludjM9dGhpcy5naXRJbnYzfHx3dCh0aGlzLmdpdDMpLHRoaXMuZ2l0SW52ND10aGlzLmdpdEludjR8fHd0KHRoaXMuZ2l0NCksdGhpcy5naXRJbnY1PXRoaXMuZ2l0SW52NXx8d3QodGhpcy5naXQ1KSx0aGlzLmdpdEludjY9dGhpcy5naXRJbnY2fHx3dCh0aGlzLmdpdDYpLHRoaXMuZ2l0SW52Nz10aGlzLmdpdEludjd8fHd0KHRoaXMuZ2l0NyksdGhpcy5icmFuY2hMYWJlbENvbG9yPXRoaXMuYnJhbmNoTGFiZWxDb2xvcnx8dGhpcy5sYWJlbFRleHRDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsMD10aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDE9IndoaXRlIix0aGlzLmdpdEJyYW5jaExhYmVsMj10aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDM9IndoaXRlIix0aGlzLmdpdEJyYW5jaExhYmVsND10aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy5naXRCcmFuY2hMYWJlbDU9dGhpcy5icmFuY2hMYWJlbENvbG9yLHRoaXMuZ2l0QnJhbmNoTGFiZWw2PXRoaXMuYnJhbmNoTGFiZWxDb2xvcix0aGlzLmdpdEJyYW5jaExhYmVsNz10aGlzLmJyYW5jaExhYmVsQ29sb3IsdGhpcy50YWdMYWJlbENvbG9yPXRoaXMudGFnTGFiZWxDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kPXRoaXMudGFnTGFiZWxCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnRhZ0xhYmVsQm9yZGVyPXRoaXMudGFnQm9yZGVyfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnRhZ0xhYmVsRm9udFNpemU9dGhpcy50YWdMYWJlbEZvbnRTaXplfHwiMTBweCIsdGhpcy5jb21taXRMYWJlbENvbG9yPXRoaXMuY29tbWl0TGFiZWxDb2xvcnx8dGhpcy5zZWNvbmRhcnlUZXh0Q29sb3IsdGhpcy5jb21taXRMYWJlbEJhY2tncm91bmQ9dGhpcy5jb21taXRMYWJlbEJhY2tncm91bmR8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5jb21taXRMYWJlbEZvbnRTaXplPXRoaXMuY29tbWl0TGFiZWxGb250U2l6ZXx8IjEwcHgiLHRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkPXRoaXMuYXR0cmlidXRlQmFja2dyb3VuZENvbG9yT2RkfHxoaCx0aGlzLmF0dHJpYnV0ZUJhY2tncm91bmRDb2xvckV2ZW49dGhpcy5hdHRyaWJ1dGVCYWNrZ3JvdW5kQ29sb3JFdmVufHxmaH1jYWxjdWxhdGUoZSl7aWYodHlwZW9mIGUhPSJvYmplY3QiKXt0aGlzLnVwZGF0ZUNvbG9ycygpO3JldHVybn1sZXQgcj1PYmplY3Qua2V5cyhlKTtyLmZvckVhY2gobj0+e3RoaXNbbl09ZVtuXX0pLHRoaXMudXBkYXRlQ29sb3JzKCksci5mb3JFYWNoKG49Pnt0aGlzW25dPWVbbl19KX19LHd6PW8odD0+e2xldCBlPW5ldyB4NztyZXR1cm4gZS5jYWxjdWxhdGUodCksZX0sImdldFRoZW1lVmFyaWFibGVzIil9KTt2YXIgRW8sbjM9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt5eigpO3h6KCk7QnkoKTtUeigpO2t6KCk7RW89e2Jhc2U6e2dldFRoZW1lVmFyaWFibGVzOmd6fSxkYXJrOntnZXRUaGVtZVZhcmlhYmxlczp2en0sZGVmYXVsdDp7Z2V0VGhlbWVWYXJpYWJsZXM6ZGh9LGZvcmVzdDp7Z2V0VGhlbWVWYXJpYWJsZXM6Ynp9LG5ldXRyYWw6e2dldFRoZW1lVmFyaWFibGVzOnd6fX19KTt2YXIgdWwsRXo9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt1bD17Zmxvd2NoYXJ0Ont1c2VNYXhXaWR0aDohMCx0aXRsZVRvcE1hcmdpbjoyNSxzdWJHcmFwaFRpdGxlTWFyZ2luOnt0b3A6MCxib3R0b206MH0sZGlhZ3JhbVBhZGRpbmc6OCxodG1sTGFiZWxzOiEwLG5vZGVTcGFjaW5nOjUwLHJhbmtTcGFjaW5nOjUwLGN1cnZlOiJiYXNpcyIscGFkZGluZzoxNSxkZWZhdWx0UmVuZGVyZXI6ImRhZ3JlLXdyYXBwZXIiLHdyYXBwaW5nV2lkdGg6MjAwLGluaGVyaXREaXI6ITF9LHNlcXVlbmNlOnt1c2VNYXhXaWR0aDohMCxoaWRlVW51c2VkUGFydGljaXBhbnRzOiExLGFjdGl2YXRpb25XaWR0aDoxMCxkaWFncmFtTWFyZ2luWDo1MCxkaWFncmFtTWFyZ2luWToxMCxhY3Rvck1hcmdpbjo1MCx3aWR0aDoxNTAsaGVpZ2h0OjY1LGJveE1hcmdpbjoxMCxib3hUZXh0TWFyZ2luOjUsbm90ZU1hcmdpbjoxMCxtZXNzYWdlTWFyZ2luOjM1LG1lc3NhZ2VBbGlnbjoiY2VudGVyIixtaXJyb3JBY3RvcnM6ITAsZm9yY2VNZW51czohMSxib3R0b21NYXJnaW5BZGo6MSxyaWdodEFuZ2xlczohMSxzaG93U2VxdWVuY2VOdW1iZXJzOiExLGFjdG9yRm9udFNpemU6MTQsYWN0b3JGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsYWN0b3JGb250V2VpZ2h0OjQwMCxub3RlRm9udFNpemU6MTQsbm90ZUZvbnRGYW1pbHk6JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsbm90ZUZvbnRXZWlnaHQ6NDAwLG5vdGVBbGlnbjoiY2VudGVyIixtZXNzYWdlRm9udFNpemU6MTYsbWVzc2FnZUZvbnRGYW1pbHk6JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsbWVzc2FnZUZvbnRXZWlnaHQ6NDAwLHdyYXA6ITEsd3JhcFBhZGRpbmc6MTAsbGFiZWxCb3hXaWR0aDo1MCxsYWJlbEJveEhlaWdodDoyMH0sZ2FudHQ6e3VzZU1heFdpZHRoOiEwLHRpdGxlVG9wTWFyZ2luOjI1LGJhckhlaWdodDoyMCxiYXJHYXA6NCx0b3BQYWRkaW5nOjUwLHJpZ2h0UGFkZGluZzo3NSxsZWZ0UGFkZGluZzo3NSxncmlkTGluZVN0YXJ0UGFkZGluZzozNSxmb250U2l6ZToxMSxzZWN0aW9uRm9udFNpemU6MTEsbnVtYmVyU2VjdGlvblN0eWxlczo0LGF4aXNGb3JtYXQ6IiVZLSVtLSVkIix0b3BBeGlzOiExLGRpc3BsYXlNb2RlOiIiLHdlZWtkYXk6InN1bmRheSJ9LGpvdXJuZXk6e3VzZU1heFdpZHRoOiEwLGRpYWdyYW1NYXJnaW5YOjUwLGRpYWdyYW1NYXJnaW5ZOjEwLGxlZnRNYXJnaW46MTUwLG1heExhYmVsV2lkdGg6MzYwLHdpZHRoOjE1MCxoZWlnaHQ6NTAsYm94TWFyZ2luOjEwLGJveFRleHRNYXJnaW46NSxub3RlTWFyZ2luOjEwLG1lc3NhZ2VNYXJnaW46MzUsbWVzc2FnZUFsaWduOiJjZW50ZXIiLGJvdHRvbU1hcmdpbkFkajoxLHJpZ2h0QW5nbGVzOiExLHRhc2tGb250U2l6ZToxNCx0YXNrRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLHRhc2tNYXJnaW46NTAsYWN0aXZhdGlvbldpZHRoOjEwLHRleHRQbGFjZW1lbnQ6ImZvIixhY3RvckNvbG91cnM6WyIjOEZCQzhGIiwiIzdDRkMwMCIsIiMwMEZGRkYiLCIjMjBCMkFBIiwiI0IwRTBFNiIsIiNGRkZGRTAiXSxzZWN0aW9uRmlsbHM6WyIjMTkxOTcwIiwiIzhCMDA4QiIsIiM0QjAwODIiLCIjMkY0RjRGIiwiIzgwMDAwMCIsIiM4QjQ1MTMiLCIjMDAwMDhCIl0sc2VjdGlvbkNvbG91cnM6WyIjZmZmIl0sdGl0bGVDb2xvcjoiIix0aXRsZUZvbnRGYW1pbHk6JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsdGl0bGVGb250U2l6ZToiNGV4In0sY2xhc3M6e3VzZU1heFdpZHRoOiEwLHRpdGxlVG9wTWFyZ2luOjI1LGFycm93TWFya2VyQWJzb2x1dGU6ITEsZGl2aWRlck1hcmdpbjoxMCxwYWRkaW5nOjUsdGV4dEhlaWdodDoxMCxkZWZhdWx0UmVuZGVyZXI6ImRhZ3JlLXdyYXBwZXIiLGh0bWxMYWJlbHM6ITEsaGlkZUVtcHR5TWVtYmVyc0JveDohMX0sc3RhdGU6e3VzZU1heFdpZHRoOiEwLHRpdGxlVG9wTWFyZ2luOjI1LGRpdmlkZXJNYXJnaW46MTAsc2l6ZVVuaXQ6NSxwYWRkaW5nOjgsdGV4dEhlaWdodDoxMCx0aXRsZVNoaWZ0Oi0xNSxub3RlTWFyZ2luOjEwLGZvcmtXaWR0aDo3MCxmb3JrSGVpZ2h0OjcsbWluaVBhZGRpbmc6Mixmb250U2l6ZUZhY3Rvcjo1LjAyLGZvbnRTaXplOjI0LGxhYmVsSGVpZ2h0OjE2LGVkZ2VMZW5ndGhGYWN0b3I6IjIwIixjb21wb3NpdFRpdGxlU2l6ZTozNSxyYWRpdXM6NSxkZWZhdWx0UmVuZGVyZXI6ImRhZ3JlLXdyYXBwZXIifSxlcjp7dXNlTWF4V2lkdGg6ITAsdGl0bGVUb3BNYXJnaW46MjUsZGlhZ3JhbVBhZGRpbmc6MjAsbGF5b3V0RGlyZWN0aW9uOiJUQiIsbWluRW50aXR5V2lkdGg6MTAwLG1pbkVudGl0eUhlaWdodDo3NSxlbnRpdHlQYWRkaW5nOjE1LG5vZGVTcGFjaW5nOjE0MCxyYW5rU3BhY2luZzo4MCxzdHJva2U6ImdyYXkiLGZpbGw6ImhvbmV5ZGV3Iixmb250U2l6ZToxMn0scGllOnt1c2VNYXhXaWR0aDohMCx0ZXh0UG9zaXRpb246Ljc1fSxxdWFkcmFudENoYXJ0Ont1c2VNYXhXaWR0aDohMCxjaGFydFdpZHRoOjUwMCxjaGFydEhlaWdodDo1MDAsdGl0bGVGb250U2l6ZToyMCx0aXRsZVBhZGRpbmc6MTAscXVhZHJhbnRQYWRkaW5nOjUseEF4aXNMYWJlbFBhZGRpbmc6NSx5QXhpc0xhYmVsUGFkZGluZzo1LHhBeGlzTGFiZWxGb250U2l6ZToxNix5QXhpc0xhYmVsRm9udFNpemU6MTYscXVhZHJhbnRMYWJlbEZvbnRTaXplOjE2LHF1YWRyYW50VGV4dFRvcFBhZGRpbmc6NSxwb2ludFRleHRQYWRkaW5nOjUscG9pbnRMYWJlbEZvbnRTaXplOjEyLHBvaW50UmFkaXVzOjUseEF4aXNQb3NpdGlvbjoidG9wIix5QXhpc1Bvc2l0aW9uOiJsZWZ0IixxdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlV2lkdGg6MSxxdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlV2lkdGg6Mn0seHlDaGFydDp7dXNlTWF4V2lkdGg6ITAsd2lkdGg6NzAwLGhlaWdodDo1MDAsdGl0bGVGb250U2l6ZToyMCx0aXRsZVBhZGRpbmc6MTAsc2hvd0RhdGFMYWJlbDohMSxzaG93VGl0bGU6ITAseEF4aXM6eyRyZWY6IiMvJGRlZnMvWFlDaGFydEF4aXNDb25maWciLHNob3dMYWJlbDohMCxsYWJlbEZvbnRTaXplOjE0LGxhYmVsUGFkZGluZzo1LHNob3dUaXRsZTohMCx0aXRsZUZvbnRTaXplOjE2LHRpdGxlUGFkZGluZzo1LHNob3dUaWNrOiEwLHRpY2tMZW5ndGg6NSx0aWNrV2lkdGg6MixzaG93QXhpc0xpbmU6ITAsYXhpc0xpbmVXaWR0aDoyfSx5QXhpczp7JHJlZjoiIy8kZGVmcy9YWUNoYXJ0QXhpc0NvbmZpZyIsc2hvd0xhYmVsOiEwLGxhYmVsRm9udFNpemU6MTQsbGFiZWxQYWRkaW5nOjUsc2hvd1RpdGxlOiEwLHRpdGxlRm9udFNpemU6MTYsdGl0bGVQYWRkaW5nOjUsc2hvd1RpY2s6ITAsdGlja0xlbmd0aDo1LHRpY2tXaWR0aDoyLHNob3dBeGlzTGluZTohMCxheGlzTGluZVdpZHRoOjJ9LGNoYXJ0T3JpZW50YXRpb246InZlcnRpY2FsIixwbG90UmVzZXJ2ZWRTcGFjZVBlcmNlbnQ6NTB9LHJlcXVpcmVtZW50Ont1c2VNYXhXaWR0aDohMCxyZWN0X2ZpbGw6IiNmOWY5ZjkiLHRleHRfY29sb3I6IiMzMzMiLHJlY3RfYm9yZGVyX3NpemU6IjAuNXB4IixyZWN0X2JvcmRlcl9jb2xvcjoiI2JiYiIscmVjdF9taW5fd2lkdGg6MjAwLHJlY3RfbWluX2hlaWdodDoyMDAsZm9udFNpemU6MTQscmVjdF9wYWRkaW5nOjEwLGxpbmVfaGVpZ2h0OjIwfSxtaW5kbWFwOnt1c2VNYXhXaWR0aDohMCxwYWRkaW5nOjEwLG1heE5vZGVXaWR0aDoyMDB9LGthbmJhbjp7dXNlTWF4V2lkdGg6ITAscGFkZGluZzo4LHNlY3Rpb25XaWR0aDoyMDAsdGlja2V0QmFzZVVybDoiIn0sdGltZWxpbmU6e3VzZU1heFdpZHRoOiEwLGRpYWdyYW1NYXJnaW5YOjUwLGRpYWdyYW1NYXJnaW5ZOjEwLGxlZnRNYXJnaW46MTUwLHdpZHRoOjE1MCxoZWlnaHQ6NTAsYm94TWFyZ2luOjEwLGJveFRleHRNYXJnaW46NSxub3RlTWFyZ2luOjEwLG1lc3NhZ2VNYXJnaW46MzUsbWVzc2FnZUFsaWduOiJjZW50ZXIiLGJvdHRvbU1hcmdpbkFkajoxLHJpZ2h0QW5nbGVzOiExLHRhc2tGb250U2l6ZToxNCx0YXNrRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLHRhc2tNYXJnaW46NTAsYWN0aXZhdGlvbldpZHRoOjEwLHRleHRQbGFjZW1lbnQ6ImZvIixhY3RvckNvbG91cnM6WyIjOEZCQzhGIiwiIzdDRkMwMCIsIiMwMEZGRkYiLCIjMjBCMkFBIiwiI0IwRTBFNiIsIiNGRkZGRTAiXSxzZWN0aW9uRmlsbHM6WyIjMTkxOTcwIiwiIzhCMDA4QiIsIiM0QjAwODIiLCIjMkY0RjRGIiwiIzgwMDAwMCIsIiM4QjQ1MTMiLCIjMDAwMDhCIl0sc2VjdGlvbkNvbG91cnM6WyIjZmZmIl0sZGlzYWJsZU11bHRpY29sb3I6ITF9LGdpdEdyYXBoOnt1c2VNYXhXaWR0aDohMCx0aXRsZVRvcE1hcmdpbjoyNSxkaWFncmFtUGFkZGluZzo4LG5vZGVMYWJlbDp7d2lkdGg6NzUsaGVpZ2h0OjEwMCx4Oi0yNSx5OjB9LG1haW5CcmFuY2hOYW1lOiJtYWluIixtYWluQnJhbmNoT3JkZXI6MCxzaG93Q29tbWl0TGFiZWw6ITAsc2hvd0JyYW5jaGVzOiEwLHJvdGF0ZUNvbW1pdExhYmVsOiEwLHBhcmFsbGVsQ29tbWl0czohMSxhcnJvd01hcmtlckFic29sdXRlOiExfSxjNDp7dXNlTWF4V2lkdGg6ITAsZGlhZ3JhbU1hcmdpblg6NTAsZGlhZ3JhbU1hcmdpblk6MTAsYzRTaGFwZU1hcmdpbjo1MCxjNFNoYXBlUGFkZGluZzoyMCx3aWR0aDoyMTYsaGVpZ2h0OjYwLGJveE1hcmdpbjoxMCxjNFNoYXBlSW5Sb3c6NCxuZXh0TGluZVBhZGRpbmdYOjAsYzRCb3VuZGFyeUluUm93OjIscGVyc29uRm9udFNpemU6MTQscGVyc29uRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLHBlcnNvbkZvbnRXZWlnaHQ6Im5vcm1hbCIsZXh0ZXJuYWxfcGVyc29uRm9udFNpemU6MTQsZXh0ZXJuYWxfcGVyc29uRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLGV4dGVybmFsX3BlcnNvbkZvbnRXZWlnaHQ6Im5vcm1hbCIsc3lzdGVtRm9udFNpemU6MTQsc3lzdGVtRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLHN5c3RlbUZvbnRXZWlnaHQ6Im5vcm1hbCIsZXh0ZXJuYWxfc3lzdGVtRm9udFNpemU6MTQsZXh0ZXJuYWxfc3lzdGVtRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLGV4dGVybmFsX3N5c3RlbUZvbnRXZWlnaHQ6Im5vcm1hbCIsc3lzdGVtX2RiRm9udFNpemU6MTQsc3lzdGVtX2RiRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLHN5c3RlbV9kYkZvbnRXZWlnaHQ6Im5vcm1hbCIsZXh0ZXJuYWxfc3lzdGVtX2RiRm9udFNpemU6MTQsZXh0ZXJuYWxfc3lzdGVtX2RiRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLGV4dGVybmFsX3N5c3RlbV9kYkZvbnRXZWlnaHQ6Im5vcm1hbCIsc3lzdGVtX3F1ZXVlRm9udFNpemU6MTQsc3lzdGVtX3F1ZXVlRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLHN5c3RlbV9xdWV1ZUZvbnRXZWlnaHQ6Im5vcm1hbCIsZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlRm9udFNpemU6MTQsZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLGV4dGVybmFsX3N5c3RlbV9xdWV1ZUZvbnRXZWlnaHQ6Im5vcm1hbCIsYm91bmRhcnlGb250U2l6ZToxNCxib3VuZGFyeUZvbnRGYW1pbHk6JyJPcGVuIFNhbnMiLCBzYW5zLXNlcmlmJyxib3VuZGFyeUZvbnRXZWlnaHQ6Im5vcm1hbCIsbWVzc2FnZUZvbnRTaXplOjEyLG1lc3NhZ2VGb250RmFtaWx5OiciT3BlbiBTYW5zIiwgc2Fucy1zZXJpZicsbWVzc2FnZUZvbnRXZWlnaHQ6Im5vcm1hbCIsY29udGFpbmVyRm9udFNpemU6MTQsY29udGFpbmVyRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLGNvbnRhaW5lckZvbnRXZWlnaHQ6Im5vcm1hbCIsZXh0ZXJuYWxfY29udGFpbmVyRm9udFNpemU6MTQsZXh0ZXJuYWxfY29udGFpbmVyRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLGV4dGVybmFsX2NvbnRhaW5lckZvbnRXZWlnaHQ6Im5vcm1hbCIsY29udGFpbmVyX2RiRm9udFNpemU6MTQsY29udGFpbmVyX2RiRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLGNvbnRhaW5lcl9kYkZvbnRXZWlnaHQ6Im5vcm1hbCIsZXh0ZXJuYWxfY29udGFpbmVyX2RiRm9udFNpemU6MTQsZXh0ZXJuYWxfY29udGFpbmVyX2RiRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLGV4dGVybmFsX2NvbnRhaW5lcl9kYkZvbnRXZWlnaHQ6Im5vcm1hbCIsY29udGFpbmVyX3F1ZXVlRm9udFNpemU6MTQsY29udGFpbmVyX3F1ZXVlRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLGNvbnRhaW5lcl9xdWV1ZUZvbnRXZWlnaHQ6Im5vcm1hbCIsZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlRm9udFNpemU6MTQsZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLGV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZUZvbnRXZWlnaHQ6Im5vcm1hbCIsY29tcG9uZW50Rm9udFNpemU6MTQsY29tcG9uZW50Rm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLGNvbXBvbmVudEZvbnRXZWlnaHQ6Im5vcm1hbCIsZXh0ZXJuYWxfY29tcG9uZW50Rm9udFNpemU6MTQsZXh0ZXJuYWxfY29tcG9uZW50Rm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLGV4dGVybmFsX2NvbXBvbmVudEZvbnRXZWlnaHQ6Im5vcm1hbCIsY29tcG9uZW50X2RiRm9udFNpemU6MTQsY29tcG9uZW50X2RiRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLGNvbXBvbmVudF9kYkZvbnRXZWlnaHQ6Im5vcm1hbCIsZXh0ZXJuYWxfY29tcG9uZW50X2RiRm9udFNpemU6MTQsZXh0ZXJuYWxfY29tcG9uZW50X2RiRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLGV4dGVybmFsX2NvbXBvbmVudF9kYkZvbnRXZWlnaHQ6Im5vcm1hbCIsY29tcG9uZW50X3F1ZXVlRm9udFNpemU6MTQsY29tcG9uZW50X3F1ZXVlRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLGNvbXBvbmVudF9xdWV1ZUZvbnRXZWlnaHQ6Im5vcm1hbCIsZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlRm9udFNpemU6MTQsZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlRm9udEZhbWlseTonIk9wZW4gU2FucyIsIHNhbnMtc2VyaWYnLGV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZUZvbnRXZWlnaHQ6Im5vcm1hbCIsd3JhcDohMCx3cmFwUGFkZGluZzoxMCxwZXJzb25fYmdfY29sb3I6IiMwODQyN0IiLHBlcnNvbl9ib3JkZXJfY29sb3I6IiMwNzNCNkYiLGV4dGVybmFsX3BlcnNvbl9iZ19jb2xvcjoiIzY4Njg2OCIsZXh0ZXJuYWxfcGVyc29uX2JvcmRlcl9jb2xvcjoiIzhBOEE4QSIsc3lzdGVtX2JnX2NvbG9yOiIjMTE2OEJEIixzeXN0ZW1fYm9yZGVyX2NvbG9yOiIjM0M3RkMwIixzeXN0ZW1fZGJfYmdfY29sb3I6IiMxMTY4QkQiLHN5c3RlbV9kYl9ib3JkZXJfY29sb3I6IiMzQzdGQzAiLHN5c3RlbV9xdWV1ZV9iZ19jb2xvcjoiIzExNjhCRCIsc3lzdGVtX3F1ZXVlX2JvcmRlcl9jb2xvcjoiIzNDN0ZDMCIsZXh0ZXJuYWxfc3lzdGVtX2JnX2NvbG9yOiIjOTk5OTk5IixleHRlcm5hbF9zeXN0ZW1fYm9yZGVyX2NvbG9yOiIjOEE4QThBIixleHRlcm5hbF9zeXN0ZW1fZGJfYmdfY29sb3I6IiM5OTk5OTkiLGV4dGVybmFsX3N5c3RlbV9kYl9ib3JkZXJfY29sb3I6IiM4QThBOEEiLGV4dGVybmFsX3N5c3RlbV9xdWV1ZV9iZ19jb2xvcjoiIzk5OTk5OSIsZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlX2JvcmRlcl9jb2xvcjoiIzhBOEE4QSIsY29udGFpbmVyX2JnX2NvbG9yOiIjNDM4REQ1Iixjb250YWluZXJfYm9yZGVyX2NvbG9yOiIjM0M3RkMwIixjb250YWluZXJfZGJfYmdfY29sb3I6IiM0MzhERDUiLGNvbnRhaW5lcl9kYl9ib3JkZXJfY29sb3I6IiMzQzdGQzAiLGNvbnRhaW5lcl9xdWV1ZV9iZ19jb2xvcjoiIzQzOERENSIsY29udGFpbmVyX3F1ZXVlX2JvcmRlcl9jb2xvcjoiIzNDN0ZDMCIsZXh0ZXJuYWxfY29udGFpbmVyX2JnX2NvbG9yOiIjQjNCM0IzIixleHRlcm5hbF9jb250YWluZXJfYm9yZGVyX2NvbG9yOiIjQTZBNkE2IixleHRlcm5hbF9jb250YWluZXJfZGJfYmdfY29sb3I6IiNCM0IzQjMiLGV4dGVybmFsX2NvbnRhaW5lcl9kYl9ib3JkZXJfY29sb3I6IiNBNkE2QTYiLGV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZV9iZ19jb2xvcjoiI0IzQjNCMyIsZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlX2JvcmRlcl9jb2xvcjoiI0E2QTZBNiIsY29tcG9uZW50X2JnX2NvbG9yOiIjODVCQkYwIixjb21wb25lbnRfYm9yZGVyX2NvbG9yOiIjNzhBOEQ4Iixjb21wb25lbnRfZGJfYmdfY29sb3I6IiM4NUJCRjAiLGNvbXBvbmVudF9kYl9ib3JkZXJfY29sb3I6IiM3OEE4RDgiLGNvbXBvbmVudF9xdWV1ZV9iZ19jb2xvcjoiIzg1QkJGMCIsY29tcG9uZW50X3F1ZXVlX2JvcmRlcl9jb2xvcjoiIzc4QThEOCIsZXh0ZXJuYWxfY29tcG9uZW50X2JnX2NvbG9yOiIjQ0NDQ0NDIixleHRlcm5hbF9jb21wb25lbnRfYm9yZGVyX2NvbG9yOiIjQkZCRkJGIixleHRlcm5hbF9jb21wb25lbnRfZGJfYmdfY29sb3I6IiNDQ0NDQ0MiLGV4dGVybmFsX2NvbXBvbmVudF9kYl9ib3JkZXJfY29sb3I6IiNCRkJGQkYiLGV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZV9iZ19jb2xvcjoiI0NDQ0NDQyIsZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlX2JvcmRlcl9jb2xvcjoiI0JGQkZCRiJ9LHNhbmtleTp7dXNlTWF4V2lkdGg6ITAsd2lkdGg6NjAwLGhlaWdodDo0MDAsbGlua0NvbG9yOiJncmFkaWVudCIsbm9kZUFsaWdubWVudDoianVzdGlmeSIsc2hvd1ZhbHVlczohMCxwcmVmaXg6IiIsc3VmZml4OiIifSxibG9jazp7dXNlTWF4V2lkdGg6ITAscGFkZGluZzo4fSxwYWNrZXQ6e3VzZU1heFdpZHRoOiEwLHJvd0hlaWdodDozMixiaXRXaWR0aDozMixiaXRzUGVyUm93OjMyLHNob3dCaXRzOiEwLHBhZGRpbmdYOjUscGFkZGluZ1k6NX0sYXJjaGl0ZWN0dXJlOnt1c2VNYXhXaWR0aDohMCxwYWRkaW5nOjQwLGljb25TaXplOjgwLGZvbnRTaXplOjE2fSxyYWRhcjp7dXNlTWF4V2lkdGg6ITAsd2lkdGg6NjAwLGhlaWdodDo2MDAsbWFyZ2luVG9wOjUwLG1hcmdpblJpZ2h0OjUwLG1hcmdpbkJvdHRvbTo1MCxtYXJnaW5MZWZ0OjUwLGF4aXNTY2FsZUZhY3RvcjoxLGF4aXNMYWJlbEZhY3RvcjoxLjA1LGN1cnZlVGVuc2lvbjouMTd9LHRoZW1lOiJkZWZhdWx0Iixsb29rOiJjbGFzc2ljIixoYW5kRHJhd25TZWVkOjAsbGF5b3V0OiJkYWdyZSIsbWF4VGV4dFNpemU6NWU0LG1heEVkZ2VzOjUwMCxkYXJrTW9kZTohMSxmb250RmFtaWx5OicidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7Jyxsb2dMZXZlbDo1LHNlY3VyaXR5TGV2ZWw6InN0cmljdCIsc3RhcnRPbkxvYWQ6ITAsYXJyb3dNYXJrZXJBYnNvbHV0ZTohMSxzZWN1cmU6WyJzZWN1cmUiLCJzZWN1cml0eUxldmVsIiwic3RhcnRPbkxvYWQiLCJtYXhUZXh0U2l6ZSIsInN1cHByZXNzRXJyb3JSZW5kZXJpbmciLCJtYXhFZGdlcyJdLGxlZ2FjeU1hdGhNTDohMSxmb3JjZUxlZ2FjeU1hdGhNTDohMSxkZXRlcm1pbmlzdGljSWRzOiExLGZvbnRTaXplOjE2LG1hcmtkb3duQXV0b1dyYXA6ITAsc3VwcHJlc3NFcnJvclJlbmRlcmluZzohMX19KTt2YXIgU3osQ3osQXosb3IsX2E9TigoKT0+eyJ1c2Ugc3RyaWN0IjtuMygpO0V6KCk7U3o9ey4uLnVsLGRldGVybWluaXN0aWNJRFNlZWQ6dm9pZCAwLGVsazp7bWVyZ2VFZGdlczohMSxub2RlUGxhY2VtZW50U3RyYXRlZ3k6IkJSQU5ERVNfS09FUEYifSx0aGVtZUNTUzp2b2lkIDAsdGhlbWVWYXJpYWJsZXM6RW8uZGVmYXVsdC5nZXRUaGVtZVZhcmlhYmxlcygpLHNlcXVlbmNlOnsuLi51bC5zZXF1ZW5jZSxtZXNzYWdlRm9udDpvKGZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5tZXNzYWdlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLm1lc3NhZ2VGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMubWVzc2FnZUZvbnRXZWlnaHR9fSwibWVzc2FnZUZvbnQiKSxub3RlRm9udDpvKGZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5ub3RlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLm5vdGVGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMubm90ZUZvbnRXZWlnaHR9fSwibm90ZUZvbnQiKSxhY3RvckZvbnQ6byhmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuYWN0b3JGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuYWN0b3JGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuYWN0b3JGb250V2VpZ2h0fX0sImFjdG9yRm9udCIpfSxjbGFzczp7aGlkZUVtcHR5TWVtYmVyc0JveDohMX0sZ2FudHQ6ey4uLnVsLmdhbnR0LHRpY2tJbnRlcnZhbDp2b2lkIDAsdXNlV2lkdGg6dm9pZCAwfSxjNDp7Li4udWwuYzQsdXNlV2lkdGg6dm9pZCAwLHBlcnNvbkZvbnQ6byhmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMucGVyc29uRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLnBlcnNvbkZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5wZXJzb25Gb250V2VpZ2h0fX0sInBlcnNvbkZvbnQiKSxmbG93Y2hhcnQ6ey4uLnVsLmZsb3djaGFydCxpbmhlcml0RGlyOiExfSxleHRlcm5hbF9wZXJzb25Gb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmV4dGVybmFsX3BlcnNvbkZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5leHRlcm5hbF9wZXJzb25Gb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuZXh0ZXJuYWxfcGVyc29uRm9udFdlaWdodH19LCJleHRlcm5hbF9wZXJzb25Gb250Iiksc3lzdGVtRm9udDpvKGZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5zeXN0ZW1Gb250RmFtaWx5LGZvbnRTaXplOnRoaXMuc3lzdGVtRm9udFNpemUsZm9udFdlaWdodDp0aGlzLnN5c3RlbUZvbnRXZWlnaHR9fSwic3lzdGVtRm9udCIpLGV4dGVybmFsX3N5c3RlbUZvbnQ6byhmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfc3lzdGVtRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX3N5c3RlbUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9zeXN0ZW1Gb250V2VpZ2h0fX0sImV4dGVybmFsX3N5c3RlbUZvbnQiKSxzeXN0ZW1fZGJGb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLnN5c3RlbV9kYkZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5zeXN0ZW1fZGJGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuc3lzdGVtX2RiRm9udFdlaWdodH19LCJzeXN0ZW1fZGJGb250IiksZXh0ZXJuYWxfc3lzdGVtX2RiRm9udDpvKGZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5leHRlcm5hbF9zeXN0ZW1fZGJGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuZXh0ZXJuYWxfc3lzdGVtX2RiRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmV4dGVybmFsX3N5c3RlbV9kYkZvbnRXZWlnaHR9fSwiZXh0ZXJuYWxfc3lzdGVtX2RiRm9udCIpLHN5c3RlbV9xdWV1ZUZvbnQ6byhmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuc3lzdGVtX3F1ZXVlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLnN5c3RlbV9xdWV1ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5zeXN0ZW1fcXVldWVGb250V2VpZ2h0fX0sInN5c3RlbV9xdWV1ZUZvbnQiKSxleHRlcm5hbF9zeXN0ZW1fcXVldWVGb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmV4dGVybmFsX3N5c3RlbV9xdWV1ZUZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5leHRlcm5hbF9zeXN0ZW1fcXVldWVGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuZXh0ZXJuYWxfc3lzdGVtX3F1ZXVlRm9udFdlaWdodH19LCJleHRlcm5hbF9zeXN0ZW1fcXVldWVGb250IiksY29udGFpbmVyRm9udDpvKGZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5jb250YWluZXJGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuY29udGFpbmVyRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmNvbnRhaW5lckZvbnRXZWlnaHR9fSwiY29udGFpbmVyRm9udCIpLGV4dGVybmFsX2NvbnRhaW5lckZvbnQ6byhmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfY29udGFpbmVyRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX2NvbnRhaW5lckZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9jb250YWluZXJGb250V2VpZ2h0fX0sImV4dGVybmFsX2NvbnRhaW5lckZvbnQiKSxjb250YWluZXJfZGJGb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmNvbnRhaW5lcl9kYkZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5jb250YWluZXJfZGJGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuY29udGFpbmVyX2RiRm9udFdlaWdodH19LCJjb250YWluZXJfZGJGb250IiksZXh0ZXJuYWxfY29udGFpbmVyX2RiRm9udDpvKGZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5leHRlcm5hbF9jb250YWluZXJfZGJGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuZXh0ZXJuYWxfY29udGFpbmVyX2RiRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmV4dGVybmFsX2NvbnRhaW5lcl9kYkZvbnRXZWlnaHR9fSwiZXh0ZXJuYWxfY29udGFpbmVyX2RiRm9udCIpLGNvbnRhaW5lcl9xdWV1ZUZvbnQ6byhmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuY29udGFpbmVyX3F1ZXVlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmNvbnRhaW5lcl9xdWV1ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5jb250YWluZXJfcXVldWVGb250V2VpZ2h0fX0sImNvbnRhaW5lcl9xdWV1ZUZvbnQiKSxleHRlcm5hbF9jb250YWluZXJfcXVldWVGb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZUZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5leHRlcm5hbF9jb250YWluZXJfcXVldWVGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuZXh0ZXJuYWxfY29udGFpbmVyX3F1ZXVlRm9udFdlaWdodH19LCJleHRlcm5hbF9jb250YWluZXJfcXVldWVGb250IiksY29tcG9uZW50Rm9udDpvKGZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5jb21wb25lbnRGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuY29tcG9uZW50Rm9udFNpemUsZm9udFdlaWdodDp0aGlzLmNvbXBvbmVudEZvbnRXZWlnaHR9fSwiY29tcG9uZW50Rm9udCIpLGV4dGVybmFsX2NvbXBvbmVudEZvbnQ6byhmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuZXh0ZXJuYWxfY29tcG9uZW50Rm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmV4dGVybmFsX2NvbXBvbmVudEZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5leHRlcm5hbF9jb21wb25lbnRGb250V2VpZ2h0fX0sImV4dGVybmFsX2NvbXBvbmVudEZvbnQiKSxjb21wb25lbnRfZGJGb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmNvbXBvbmVudF9kYkZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5jb21wb25lbnRfZGJGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuY29tcG9uZW50X2RiRm9udFdlaWdodH19LCJjb21wb25lbnRfZGJGb250IiksZXh0ZXJuYWxfY29tcG9uZW50X2RiRm9udDpvKGZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5leHRlcm5hbF9jb21wb25lbnRfZGJGb250RmFtaWx5LGZvbnRTaXplOnRoaXMuZXh0ZXJuYWxfY29tcG9uZW50X2RiRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmV4dGVybmFsX2NvbXBvbmVudF9kYkZvbnRXZWlnaHR9fSwiZXh0ZXJuYWxfY29tcG9uZW50X2RiRm9udCIpLGNvbXBvbmVudF9xdWV1ZUZvbnQ6byhmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMuY29tcG9uZW50X3F1ZXVlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmNvbXBvbmVudF9xdWV1ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5jb21wb25lbnRfcXVldWVGb250V2VpZ2h0fX0sImNvbXBvbmVudF9xdWV1ZUZvbnQiKSxleHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmV4dGVybmFsX2NvbXBvbmVudF9xdWV1ZUZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5leHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMuZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlRm9udFdlaWdodH19LCJleHRlcm5hbF9jb21wb25lbnRfcXVldWVGb250IiksYm91bmRhcnlGb250Om8oZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmJvdW5kYXJ5Rm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmJvdW5kYXJ5Rm9udFNpemUsZm9udFdlaWdodDp0aGlzLmJvdW5kYXJ5Rm9udFdlaWdodH19LCJib3VuZGFyeUZvbnQiKSxtZXNzYWdlRm9udDpvKGZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5tZXNzYWdlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLm1lc3NhZ2VGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMubWVzc2FnZUZvbnRXZWlnaHR9fSwibWVzc2FnZUZvbnQiKX0scGllOnsuLi51bC5waWUsdXNlV2lkdGg6OTg0fSx4eUNoYXJ0OnsuLi51bC54eUNoYXJ0LHVzZVdpZHRoOnZvaWQgMH0scmVxdWlyZW1lbnQ6ey4uLnVsLnJlcXVpcmVtZW50LHVzZVdpZHRoOnZvaWQgMH0scGFja2V0OnsuLi51bC5wYWNrZXR9LHJhZGFyOnsuLi51bC5yYWRhcn0sdHJlZW1hcDp7dXNlTWF4V2lkdGg6ITAscGFkZGluZzoxMCxkaWFncmFtUGFkZGluZzo4LHNob3dWYWx1ZXM6ITAsbm9kZVdpZHRoOjEwMCxub2RlSGVpZ2h0OjQwLGJvcmRlcldpZHRoOjEsdmFsdWVGb250U2l6ZToxMixsYWJlbEZvbnRTaXplOjE0LHZhbHVlRm9ybWF0OiIsIn19LEN6PW8oKHQsZT0iIik9Pk9iamVjdC5rZXlzKHQpLnJlZHVjZSgocixuKT0+QXJyYXkuaXNBcnJheSh0W25dKT9yOnR5cGVvZiB0W25dPT0ib2JqZWN0IiYmdFtuXSE9PW51bGw/Wy4uLnIsZStuLC4uLkN6KHRbbl0sIiIpXTpbLi4ucixlK25dLFtdKSwia2V5aWZ5IiksQXo9bmV3IFNldChDeihTeiwiIikpLG9yPVN6fSk7dmFyIHYwLEtiZSxiNz1OKCgpPT57InVzZSBzdHJpY3QiO19hKCk7eXQoKTt2MD1vKHQ9PntpZihYLmRlYnVnKCJzYW5pdGl6ZURpcmVjdGl2ZSBjYWxsZWQgd2l0aCIsdCksISh0eXBlb2YgdCE9Im9iamVjdCJ8fHQ9PW51bGwpKXtpZihBcnJheS5pc0FycmF5KHQpKXt0LmZvckVhY2goZT0+djAoZSkpO3JldHVybn1mb3IobGV0IGUgb2YgT2JqZWN0LmtleXModCkpe2lmKFguZGVidWcoIkNoZWNraW5nIGtleSIsZSksZS5zdGFydHNXaXRoKCJfXyIpfHxlLmluY2x1ZGVzKCJwcm90byIpfHxlLmluY2x1ZGVzKCJjb25zdHIiKXx8IUF6LmhhcyhlKXx8dFtlXT09bnVsbCl7WC5kZWJ1Zygic2FuaXRpemUgZGVsZXRpbmcga2V5OiAiLGUpLGRlbGV0ZSB0W2VdO2NvbnRpbnVlfWlmKHR5cGVvZiB0W2VdPT0ib2JqZWN0Iil7WC5kZWJ1Zygic2FuaXRpemluZyBvYmplY3QiLGUpLHYwKHRbZV0pO2NvbnRpbnVlfWxldCByPVsidGhlbWVDU1MiLCJmb250RmFtaWx5IiwiYWx0Rm9udEZhbWlseSJdO2ZvcihsZXQgbiBvZiByKWUuaW5jbHVkZXMobikmJihYLmRlYnVnKCJzYW5pdGl6aW5nIGNzcyBvcHRpb24iLGUpLHRbZV09S2JlKHRbZV0pKX1pZih0LnRoZW1lVmFyaWFibGVzKWZvcihsZXQgZSBvZiBPYmplY3Qua2V5cyh0LnRoZW1lVmFyaWFibGVzKSl7bGV0IHI9dC50aGVtZVZhcmlhYmxlc1tlXTtyPy5tYXRjaCYmIXIubWF0Y2goL15bXGQgIiMlKCksLjtBLVphLXpdKyQvKSYmKHQudGhlbWVWYXJpYWJsZXNbZV09IiIpfVguZGVidWcoIkFmdGVyIHNhbml0aXphdGlvbiIsdCl9fSwic2FuaXRpemVEaXJlY3RpdmUiKSxLYmU9byh0PT57bGV0IGU9MCxyPTA7Zm9yKGxldCBuIG9mIHQpe2lmKGU8cilyZXR1cm4ieyAvKiBFUlJPUjogVW5iYWxhbmNlZCBDU1MgKi8gfSI7bj09PSJ7Ij9lKys6bj09PSJ9IiYmcisrfXJldHVybiBlIT09cj8ieyAvKiBFUlJPUjogVW5iYWxhbmNlZCBDU1MgKi8gfSI6dH0sInNhbml0aXplQ3NzIil9KTt2YXIgcGgsU3MsRHoseDAsRnksaTMsVDcsTHosUnosdzcsYTMsdHIsTnosTXosJHksUWJlLF96LFpiZSxJeixtaT1OKCgpPT57InVzZSBzdHJpY3QiO2cwKCk7eXQoKTtuMygpO19hKCk7YjcoKTtwaD1PYmplY3QuZnJlZXplKG9yKSxTcz1Vbih7fSxwaCkseDA9W10sRnk9VW4oe30scGgpLGkzPW8oKHQsZSk9PntsZXQgcj1Vbih7fSx0KSxuPXt9O2ZvcihsZXQgaSBvZiBlKU56KGkpLG49VW4obixpKTtpZihyPVVuKHIsbiksbi50aGVtZSYmbi50aGVtZSBpbiBFbyl7bGV0IGk9VW4oe30sRHopLGE9VW4oaS50aGVtZVZhcmlhYmxlc3x8e30sbi50aGVtZVZhcmlhYmxlcyk7ci50aGVtZSYmci50aGVtZSBpbiBFbyYmKHIudGhlbWVWYXJpYWJsZXM9RW9bci50aGVtZV0uZ2V0VGhlbWVWYXJpYWJsZXMoYSkpfXJldHVybiBGeT1yLEl6KEZ5KSxGeX0sInVwZGF0ZUN1cnJlbnRDb25maWciKSxUNz1vKHQ9PihTcz1Vbih7fSxwaCksU3M9VW4oU3MsdCksdC50aGVtZSYmRW9bdC50aGVtZV0mJihTcy50aGVtZVZhcmlhYmxlcz1Fb1t0LnRoZW1lXS5nZXRUaGVtZVZhcmlhYmxlcyh0LnRoZW1lVmFyaWFibGVzKSksaTMoU3MseDApLFNzKSwic2V0U2l0ZUNvbmZpZyIpLEx6PW8odD0+e0R6PVVuKHt9LHQpfSwic2F2ZUNvbmZpZ0Zyb21Jbml0aWFsaXplIiksUno9byh0PT4oU3M9VW4oU3MsdCksaTMoU3MseDApLFNzKSwidXBkYXRlU2l0ZUNvbmZpZyIpLHc3PW8oKCk9PlVuKHt9LFNzKSwiZ2V0U2l0ZUNvbmZpZyIpLGEzPW8odD0+KEl6KHQpLFVuKEZ5LHQpLHRyKCkpLCJzZXRDb25maWciKSx0cj1vKCgpPT5Vbih7fSxGeSksImdldENvbmZpZyIpLE56PW8odD0+e3QmJihbInNlY3VyZSIsLi4uU3Muc2VjdXJlPz9bXV0uZm9yRWFjaChlPT57T2JqZWN0Lmhhc093bih0LGUpJiYoWC5kZWJ1ZyhgRGVuaWVkIGF0dGVtcHQgdG8gbW9kaWZ5IGEgc2VjdXJlIGtleSAke2V9YCx0W2VdKSxkZWxldGUgdFtlXSl9KSxPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGU9PntlLnN0YXJ0c1dpdGgoIl9fIikmJmRlbGV0ZSB0W2VdfSksT2JqZWN0LmtleXModCkuZm9yRWFjaChlPT57dHlwZW9mIHRbZV09PSJzdHJpbmciJiYodFtlXS5pbmNsdWRlcygiPCIpfHx0W2VdLmluY2x1ZGVzKCI+Iil8fHRbZV0uaW5jbHVkZXMoInVybChkYXRhOiIpKSYmZGVsZXRlIHRbZV0sdHlwZW9mIHRbZV09PSJvYmplY3QiJiZOeih0W2VdKX0pKX0sInNhbml0aXplIiksTXo9byh0PT57djAodCksdC5mb250RmFtaWx5JiYhdC50aGVtZVZhcmlhYmxlcz8uZm9udEZhbWlseSYmKHQudGhlbWVWYXJpYWJsZXM9ey4uLnQudGhlbWVWYXJpYWJsZXMsZm9udEZhbWlseTp0LmZvbnRGYW1pbHl9KSx4MC5wdXNoKHQpLGkzKFNzLHgwKX0sImFkZERpcmVjdGl2ZSIpLCR5PW8oKHQ9U3MpPT57eDA9W10saTModCx4MCl9LCJyZXNldCIpLFFiZT17TEFaWV9MT0FEX0RFUFJFQ0FURUQ6IlRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgbGF6eUxvYWRlZERpYWdyYW1zIGFuZCBsb2FkRXh0ZXJuYWxEaWFncmFtc0F0U3RhcnR1cCBhcmUgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSByZWdpc3RlckV4dGVybmFsRGlhZ3JhbXMgaW5zdGVhZC4ifSxfej17fSxaYmU9byh0PT57X3pbdF18fChYLndhcm4oUWJlW3RdKSxfelt0XT0hMCl9LCJpc3N1ZVdhcm5pbmciKSxJej1vKHQ9Pnt0JiYodC5sYXp5TG9hZGVkRGlhZ3JhbXN8fHQubG9hZEV4dGVybmFsRGlhZ3JhbXNBdFN0YXJ0dXApJiZaYmUoIkxBWllfTE9BRF9ERVBSRUNBVEVEIil9LCJjaGVja0NvbmZpZyIpfSk7ZnVuY3Rpb24gZXModCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2UgaW5zdGFuY2VvZiBSZWdFeHAmJihlLmxhc3RJbmRleD0wKTtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aCxuPW5ldyBBcnJheShyPjE/ci0xOjApLGk9MTtpPHI7aSsrKW5baS0xXT1hcmd1bWVudHNbaV07cmV0dXJuIF83KHQsZSxuKX19ZnVuY3Rpb24gczRlKHQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXJbbl09YXJndW1lbnRzW25dO3JldHVybiBENyh0LHIpfX1mdW5jdGlvbiBfcih0LGUpe2xldCByPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTpsMztPeiYmT3oodCxudWxsKTtsZXQgbj1lLmxlbmd0aDtmb3IoO24tLTspe2xldCBpPWVbbl07aWYodHlwZW9mIGk9PSJzdHJpbmciKXtsZXQgYT1yKGkpO2EhPT1pJiYoSmJlKGUpfHwoZVtuXT1hKSxpPWEpfXRbaV09ITB9cmV0dXJuIHR9ZnVuY3Rpb24gbzRlKHQpe2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKWhsKHQsZSl8fCh0W2VdPW51bGwpO3JldHVybiB0fWZ1bmN0aW9uIGFkKHQpe2xldCBlPVd6KG51bGwpO2ZvcihsZXRbcixuXW9mIEh6KHQpKWhsKHQscikmJihBcnJheS5pc0FycmF5KG4pP2Vbcl09bzRlKG4pOm4mJnR5cGVvZiBuPT0ib2JqZWN0IiYmbi5jb25zdHJ1Y3Rvcj09PU9iamVjdD9lW3JdPWFkKG4pOmVbcl09bik7cmV0dXJuIGV9ZnVuY3Rpb24gVXkodCxlKXtmb3IoO3QhPT1udWxsOyl7bGV0IG49dDRlKHQsZSk7aWYobil7aWYobi5nZXQpcmV0dXJuIGVzKG4uZ2V0KTtpZih0eXBlb2Ygbi52YWx1ZT09ImZ1bmN0aW9uIilyZXR1cm4gZXMobi52YWx1ZSl9dD1lNGUodCl9ZnVuY3Rpb24gcigpe3JldHVybiBudWxsfXJldHVybiBvKHIsImZhbGxiYWNrVmFsdWUiKSxyfWZ1bmN0aW9uIFh6KCl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOnY0ZSgpLGU9byhEdD0+WHooRHQpLCJET01QdXJpZnkiKTtpZihlLnZlcnNpb249IjMuMi41IixlLnJlbW92ZWQ9W10sIXR8fCF0LmRvY3VtZW50fHx0LmRvY3VtZW50Lm5vZGVUeXBlIT09SHkuZG9jdW1lbnR8fCF0LkVsZW1lbnQpcmV0dXJuIGUuaXNTdXBwb3J0ZWQ9ITEsZTtsZXR7ZG9jdW1lbnQ6cn09dCxuPXIsaT1uLmN1cnJlbnRTY3JpcHQse0RvY3VtZW50RnJhZ21lbnQ6YSxIVE1MVGVtcGxhdGVFbGVtZW50OnMsTm9kZTpsLEVsZW1lbnQ6dSxOb2RlRmlsdGVyOmgsTmFtZWROb2RlTWFwOmY9dC5OYW1lZE5vZGVNYXB8fHQuTW96TmFtZWRBdHRyTWFwLEhUTUxGb3JtRWxlbWVudDpkLERPTVBhcnNlcjpwLHRydXN0ZWRUeXBlczptfT10LGc9dS5wcm90b3R5cGUseT1VeShnLCJjbG9uZU5vZGUiKSx2PVV5KGcsInJlbW92ZSIpLHg9VXkoZywibmV4dFNpYmxpbmciKSxiPVV5KGcsImNoaWxkTm9kZXMiKSxUPVV5KGcsInBhcmVudE5vZGUiKTtpZih0eXBlb2Ygcz09ImZ1bmN0aW9uIil7bGV0IER0PXIuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtEdC5jb250ZW50JiZEdC5jb250ZW50Lm93bmVyRG9jdW1lbnQmJihyPUR0LmNvbnRlbnQub3duZXJEb2N1bWVudCl9bGV0IFMsdz0iIix7aW1wbGVtZW50YXRpb246RSxjcmVhdGVOb2RlSXRlcmF0b3I6XyxjcmVhdGVEb2N1bWVudEZyYWdtZW50OkMsZ2V0RWxlbWVudHNCeVRhZ05hbWU6RH09cix7aW1wb3J0Tm9kZTpPfT1uLFI9VXooKTtlLmlzU3VwcG9ydGVkPXR5cGVvZiBIej09ImZ1bmN0aW9uIiYmdHlwZW9mIFQ9PSJmdW5jdGlvbiImJkUmJkUuY3JlYXRlSFRNTERvY3VtZW50IT09dm9pZCAwO2xldHtNVVNUQUNIRV9FWFBSOmssRVJCX0VYUFI6TCxUTVBMSVRfRVhQUjpBLERBVEFfQVRUUjpJLEFSSUFfQVRUUjpNLElTX1NDUklQVF9PUl9EQVRBOlAsQVRUUl9XSElURVNQQUNFOkIsQ1VTVE9NX0VMRU1FTlQ6Rn09Vnose0lTX0FMTE9XRURfVVJJOnp9PVZ6LCQ9bnVsbCxVPV9yKHt9LFsuLi5GeiwuLi5FNywuLi5TNywuLi5DNywuLi4kel0pLEs9bnVsbCxlZT1fcih7fSxbLi4uenosLi4uQTcsLi4uR3osLi4ubzNdKSxZPU9iamVjdC5zZWFsKFd6KG51bGwse3RhZ05hbWVDaGVjazp7d3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsdmFsdWU6bnVsbH0sYXR0cmlidXRlTmFtZUNoZWNrOnt3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCx2YWx1ZTpudWxsfSxhbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHM6e3dyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLHZhbHVlOiExfX0pKSxjZT1udWxsLFo9bnVsbCx1ZT0hMCxRPSEwLGo9ITEsbmU9ITAsdGU9ITEsaGU9ITAsbGU9ITEsSj0hMSxTZT0hMSxzZT0hMSxhZT0hMSxPZT0hMSx5ZT0hMCxCZT0hMSxIZT0idXNlci1jb250ZW50LSIsemU9ITAsTGU9ITEsSWU9e30seGU9bnVsbCxxPV9yKHt9LFsiYW5ub3RhdGlvbi14bWwiLCJhdWRpbyIsImNvbGdyb3VwIiwiZGVzYyIsImZvcmVpZ25vYmplY3QiLCJoZWFkIiwiaWZyYW1lIiwibWF0aCIsIm1pIiwibW4iLCJtbyIsIm1zIiwibXRleHQiLCJub2VtYmVkIiwibm9mcmFtZXMiLCJub3NjcmlwdCIsInBsYWludGV4dCIsInNjcmlwdCIsInN0eWxlIiwic3ZnIiwidGVtcGxhdGUiLCJ0aGVhZCIsInRpdGxlIiwidmlkZW8iLCJ4bXAiXSksZGU9bnVsbCxpZT1fcih7fSxbImF1ZGlvIiwidmlkZW8iLCJpbWciLCJzb3VyY2UiLCJpbWFnZSIsInRyYWNrIl0pLG9lPW51bGwsVj1fcih7fSxbImFsdCIsImNsYXNzIiwiZm9yIiwiaWQiLCJsYWJlbCIsIm5hbWUiLCJwYXR0ZXJuIiwicGxhY2Vob2xkZXIiLCJyb2xlIiwic3VtbWFyeSIsInRpdGxlIiwidmFsdWUiLCJzdHlsZSIsInhtbG5zIl0pLFRlPSJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIixXPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIscGU9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLHZlPXBlLFBlPSExLF9lPW51bGwsYmU9X3Ioe30sW1RlLFcscGVdLGs3KSxWZT1fcih7fSxbIm1pIiwibW8iLCJtbiIsIm1zIiwibXRleHQiXSksRGU9X3Ioe30sWyJhbm5vdGF0aW9uLXhtbCJdKSxxZT1fcih7fSxbInRpdGxlIiwic3R5bGUiLCJmb250IiwiYSIsInNjcmlwdCJdKSxhdD1udWxsLFJ0PVsiYXBwbGljYXRpb24veGh0bWwreG1sIiwidGV4dC9odG1sIl0sc3Q9InRleHQvaHRtbCIsVWU9bnVsbCxjdD1udWxsLFdlPXIuY3JlYXRlRWxlbWVudCgiZm9ybSIpLG90PW8oZnVuY3Rpb24oQ2Upe3JldHVybiBDZSBpbnN0YW5jZW9mIFJlZ0V4cHx8Q2UgaW5zdGFuY2VvZiBGdW5jdGlvbn0sImlzUmVnZXhPckZ1bmN0aW9uIiksWXQ9byhmdW5jdGlvbigpe2xldCBDZT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06e307aWYoIShjdCYmY3Q9PT1DZSkpe2lmKCghQ2V8fHR5cGVvZiBDZSE9Im9iamVjdCIpJiYoQ2U9e30pLENlPWFkKENlKSxhdD1SdC5pbmRleE9mKENlLlBBUlNFUl9NRURJQV9UWVBFKT09PS0xP3N0OkNlLlBBUlNFUl9NRURJQV9UWVBFLFVlPWF0PT09ImFwcGxpY2F0aW9uL3hodG1sK3htbCI/azc6bDMsJD1obChDZSwiQUxMT1dFRF9UQUdTIik/X3Ioe30sQ2UuQUxMT1dFRF9UQUdTLFVlKTpVLEs9aGwoQ2UsIkFMTE9XRURfQVRUUiIpP19yKHt9LENlLkFMTE9XRURfQVRUUixVZSk6ZWUsX2U9aGwoQ2UsIkFMTE9XRURfTkFNRVNQQUNFUyIpP19yKHt9LENlLkFMTE9XRURfTkFNRVNQQUNFUyxrNyk6YmUsb2U9aGwoQ2UsIkFERF9VUklfU0FGRV9BVFRSIik/X3IoYWQoViksQ2UuQUREX1VSSV9TQUZFX0FUVFIsVWUpOlYsZGU9aGwoQ2UsIkFERF9EQVRBX1VSSV9UQUdTIik/X3IoYWQoaWUpLENlLkFERF9EQVRBX1VSSV9UQUdTLFVlKTppZSx4ZT1obChDZSwiRk9SQklEX0NPTlRFTlRTIik/X3Ioe30sQ2UuRk9SQklEX0NPTlRFTlRTLFVlKTpxLGNlPWhsKENlLCJGT1JCSURfVEFHUyIpP19yKHt9LENlLkZPUkJJRF9UQUdTLFVlKTp7fSxaPWhsKENlLCJGT1JCSURfQVRUUiIpP19yKHt9LENlLkZPUkJJRF9BVFRSLFVlKTp7fSxJZT1obChDZSwiVVNFX1BST0ZJTEVTIik/Q2UuVVNFX1BST0ZJTEVTOiExLHVlPUNlLkFMTE9XX0FSSUFfQVRUUiE9PSExLFE9Q2UuQUxMT1dfREFUQV9BVFRSIT09ITEsaj1DZS5BTExPV19VTktOT1dOX1BST1RPQ09MU3x8ITEsbmU9Q2UuQUxMT1dfU0VMRl9DTE9TRV9JTl9BVFRSIT09ITEsdGU9Q2UuU0FGRV9GT1JfVEVNUExBVEVTfHwhMSxoZT1DZS5TQUZFX0ZPUl9YTUwhPT0hMSxsZT1DZS5XSE9MRV9ET0NVTUVOVHx8ITEsc2U9Q2UuUkVUVVJOX0RPTXx8ITEsYWU9Q2UuUkVUVVJOX0RPTV9GUkFHTUVOVHx8ITEsT2U9Q2UuUkVUVVJOX1RSVVNURURfVFlQRXx8ITEsU2U9Q2UuRk9SQ0VfQk9EWXx8ITEseWU9Q2UuU0FOSVRJWkVfRE9NIT09ITEsQmU9Q2UuU0FOSVRJWkVfTkFNRURfUFJPUFN8fCExLHplPUNlLktFRVBfQ09OVEVOVCE9PSExLExlPUNlLklOX1BMQUNFfHwhMSx6PUNlLkFMTE9XRURfVVJJX1JFR0VYUHx8cXosdmU9Q2UuTkFNRVNQQUNFfHxwZSxWZT1DZS5NQVRITUxfVEVYVF9JTlRFR1JBVElPTl9QT0lOVFN8fFZlLERlPUNlLkhUTUxfSU5URUdSQVRJT05fUE9JTlRTfHxEZSxZPUNlLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HfHx7fSxDZS5DVVNUT01fRUxFTUVOVF9IQU5ETElORyYmb3QoQ2UuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrKSYmKFkudGFnTmFtZUNoZWNrPUNlLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjayksQ2UuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcmJm90KENlLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjaykmJihZLmF0dHJpYnV0ZU5hbWVDaGVjaz1DZS5DVVNUT01fRUxFTUVOVF9IQU5ETElORy5hdHRyaWJ1dGVOYW1lQ2hlY2spLENlLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HJiZ0eXBlb2YgQ2UuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzPT0iYm9vbGVhbiImJihZLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cz1DZS5DVVNUT01fRUxFTUVOVF9IQU5ETElORy5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHMpLHRlJiYoUT0hMSksYWUmJihzZT0hMCksSWUmJigkPV9yKHt9LCR6KSxLPVtdLEllLmh0bWw9PT0hMCYmKF9yKCQsRnopLF9yKEssenopKSxJZS5zdmc9PT0hMCYmKF9yKCQsRTcpLF9yKEssQTcpLF9yKEssbzMpKSxJZS5zdmdGaWx0ZXJzPT09ITAmJihfcigkLFM3KSxfcihLLEE3KSxfcihLLG8zKSksSWUubWF0aE1sPT09ITAmJihfcigkLEM3KSxfcihLLEd6KSxfcihLLG8zKSkpLENlLkFERF9UQUdTJiYoJD09PVUmJigkPWFkKCQpKSxfcigkLENlLkFERF9UQUdTLFVlKSksQ2UuQUREX0FUVFImJihLPT09ZWUmJihLPWFkKEspKSxfcihLLENlLkFERF9BVFRSLFVlKSksQ2UuQUREX1VSSV9TQUZFX0FUVFImJl9yKG9lLENlLkFERF9VUklfU0FGRV9BVFRSLFVlKSxDZS5GT1JCSURfQ09OVEVOVFMmJih4ZT09PXEmJih4ZT1hZCh4ZSkpLF9yKHhlLENlLkZPUkJJRF9DT05URU5UUyxVZSkpLHplJiYoJFsiI3RleHQiXT0hMCksbGUmJl9yKCQsWyJodG1sIiwiaGVhZCIsImJvZHkiXSksJC50YWJsZSYmKF9yKCQsWyJ0Ym9keSJdKSxkZWxldGUgY2UudGJvZHkpLENlLlRSVVNURURfVFlQRVNfUE9MSUNZKXtpZih0eXBlb2YgQ2UuVFJVU1RFRF9UWVBFU19QT0xJQ1kuY3JlYXRlSFRNTCE9ImZ1bmN0aW9uIil0aHJvdyBWeSgnVFJVU1RFRF9UWVBFU19QT0xJQ1kgY29uZmlndXJhdGlvbiBvcHRpb24gbXVzdCBwcm92aWRlIGEgImNyZWF0ZUhUTUwiIGhvb2suJyk7aWYodHlwZW9mIENlLlRSVVNURURfVFlQRVNfUE9MSUNZLmNyZWF0ZVNjcmlwdFVSTCE9ImZ1bmN0aW9uIil0aHJvdyBWeSgnVFJVU1RFRF9UWVBFU19QT0xJQ1kgY29uZmlndXJhdGlvbiBvcHRpb24gbXVzdCBwcm92aWRlIGEgImNyZWF0ZVNjcmlwdFVSTCIgaG9vay4nKTtTPUNlLlRSVVNURURfVFlQRVNfUE9MSUNZLHc9Uy5jcmVhdGVIVE1MKCIiKX1lbHNlIFM9PT12b2lkIDAmJihTPXg0ZShtLGkpKSxTIT09bnVsbCYmdHlwZW9mIHc9PSJzdHJpbmciJiYodz1TLmNyZWF0ZUhUTUwoIiIpKTtKYSYmSmEoQ2UpLGN0PUNlfX0sIl9wYXJzZUNvbmZpZyIpLFR0PV9yKHt9LFsuLi5FNywuLi5TNywuLi5sNGVdKSxNdD1fcih7fSxbLi4uQzcsLi4uYzRlXSksYnQ9byhmdW5jdGlvbihDZSl7bGV0IHR0PVQoQ2UpOyghdHR8fCF0dC50YWdOYW1lKSYmKHR0PXtuYW1lc3BhY2VVUkk6dmUsdGFnTmFtZToidGVtcGxhdGUifSk7bGV0IEN0PWwzKENlLnRhZ05hbWUpLGdyPWwzKHR0LnRhZ05hbWUpO3JldHVybiBfZVtDZS5uYW1lc3BhY2VVUkldP0NlLm5hbWVzcGFjZVVSST09PVc/dHQubmFtZXNwYWNlVVJJPT09cGU/Q3Q9PT0ic3ZnIjp0dC5uYW1lc3BhY2VVUkk9PT1UZT9DdD09PSJzdmciJiYoZ3I9PT0iYW5ub3RhdGlvbi14bWwifHxWZVtncl0pOiEhVHRbQ3RdOkNlLm5hbWVzcGFjZVVSST09PVRlP3R0Lm5hbWVzcGFjZVVSST09PXBlP0N0PT09Im1hdGgiOnR0Lm5hbWVzcGFjZVVSST09PVc/Q3Q9PT0ibWF0aCImJkRlW2dyXTohIU10W0N0XTpDZS5uYW1lc3BhY2VVUkk9PT1wZT90dC5uYW1lc3BhY2VVUkk9PT1XJiYhRGVbZ3JdfHx0dC5uYW1lc3BhY2VVUkk9PT1UZSYmIVZlW2dyXT8hMTohTXRbQ3RdJiYocWVbQ3RdfHwhVHRbQ3RdKTohIShhdD09PSJhcHBsaWNhdGlvbi94aHRtbCt4bWwiJiZfZVtDZS5uYW1lc3BhY2VVUkldKTohMX0sIl9jaGVja1ZhbGlkTmFtZXNwYWNlIiksdXQ9byhmdW5jdGlvbihDZSl7enkoZS5yZW1vdmVkLHtlbGVtZW50OkNlfSk7dHJ5e1QoQ2UpLnJlbW92ZUNoaWxkKENlKX1jYXRjaHt2KENlKX19LCJfZm9yY2VSZW1vdmUiKSxTdD1vKGZ1bmN0aW9uKENlLHR0KXt0cnl7enkoZS5yZW1vdmVkLHthdHRyaWJ1dGU6dHQuZ2V0QXR0cmlidXRlTm9kZShDZSksZnJvbTp0dH0pfWNhdGNoe3p5KGUucmVtb3ZlZCx7YXR0cmlidXRlOm51bGwsZnJvbTp0dH0pfWlmKHR0LnJlbW92ZUF0dHJpYnV0ZShDZSksQ2U9PT0iaXMiKWlmKHNlfHxhZSl0cnl7dXQodHQpfWNhdGNoe31lbHNlIHRyeXt0dC5zZXRBdHRyaWJ1dGUoQ2UsIiIpfWNhdGNoe319LCJfcmVtb3ZlQXR0cmlidXRlIiksZnQ9byhmdW5jdGlvbihDZSl7bGV0IHR0PW51bGwsQ3Q9bnVsbDtpZihTZSlDZT0iPHJlbW92ZT48L3JlbW92ZT4iK0NlO2Vsc2V7bGV0IHluPUJ6KENlLC9eW1xyXG5cdCBdKy8pO0N0PXluJiZ5blswXX1hdD09PSJhcHBsaWNhdGlvbi94aHRtbCt4bWwiJiZ2ZT09PXBlJiYoQ2U9JzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj48aGVhZD48L2hlYWQ+PGJvZHk+JytDZSsiPC9ib2R5PjwvaHRtbD4iKTtsZXQgZ3I9Uz9TLmNyZWF0ZUhUTUwoQ2UpOkNlO2lmKHZlPT09cGUpdHJ5e3R0PW5ldyBwKCkucGFyc2VGcm9tU3RyaW5nKGdyLGF0KX1jYXRjaHt9aWYoIXR0fHwhdHQuZG9jdW1lbnRFbGVtZW50KXt0dD1FLmNyZWF0ZURvY3VtZW50KHZlLCJ0ZW1wbGF0ZSIsbnVsbCk7dHJ5e3R0LmRvY3VtZW50RWxlbWVudC5pbm5lckhUTUw9UGU/dzpncn1jYXRjaHt9fWxldCBybj10dC5ib2R5fHx0dC5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIENlJiZDdCYmcm4uaW5zZXJ0QmVmb3JlKHIuY3JlYXRlVGV4dE5vZGUoQ3QpLHJuLmNoaWxkTm9kZXNbMF18fG51bGwpLHZlPT09cGU/RC5jYWxsKHR0LGxlPyJodG1sIjoiYm9keSIpWzBdOmxlP3R0LmRvY3VtZW50RWxlbWVudDpybn0sIl9pbml0RG9jdW1lbnQiKSx2dD1vKGZ1bmN0aW9uKENlKXtyZXR1cm4gXy5jYWxsKENlLm93bmVyRG9jdW1lbnR8fENlLENlLGguU0hPV19FTEVNRU5UfGguU0hPV19DT01NRU5UfGguU0hPV19URVhUfGguU0hPV19QUk9DRVNTSU5HX0lOU1RSVUNUSU9OfGguU0hPV19DREFUQV9TRUNUSU9OLG51bGwpfSwiX2NyZWF0ZU5vZGVJdGVyYXRvciIpLG50PW8oZnVuY3Rpb24oQ2Upe3JldHVybiBDZSBpbnN0YW5jZW9mIGQmJih0eXBlb2YgQ2Uubm9kZU5hbWUhPSJzdHJpbmcifHx0eXBlb2YgQ2UudGV4dENvbnRlbnQhPSJzdHJpbmcifHx0eXBlb2YgQ2UucmVtb3ZlQ2hpbGQhPSJmdW5jdGlvbiJ8fCEoQ2UuYXR0cmlidXRlcyBpbnN0YW5jZW9mIGYpfHx0eXBlb2YgQ2UucmVtb3ZlQXR0cmlidXRlIT0iZnVuY3Rpb24ifHx0eXBlb2YgQ2Uuc2V0QXR0cmlidXRlIT0iZnVuY3Rpb24ifHx0eXBlb2YgQ2UubmFtZXNwYWNlVVJJIT0ic3RyaW5nInx8dHlwZW9mIENlLmluc2VydEJlZm9yZSE9ImZ1bmN0aW9uInx8dHlwZW9mIENlLmhhc0NoaWxkTm9kZXMhPSJmdW5jdGlvbiIpfSwiX2lzQ2xvYmJlcmVkIikscG49byhmdW5jdGlvbihDZSl7cmV0dXJuIHR5cGVvZiBsPT0iZnVuY3Rpb24iJiZDZSBpbnN0YW5jZW9mIGx9LCJfaXNOb2RlIik7ZnVuY3Rpb24ga3QoRHQsQ2UsdHQpe3MzKER0LEN0PT57Q3QuY2FsbChlLENlLHR0LGN0KX0pfW8oa3QsIl9leGVjdXRlSG9va3MiKTtsZXQgT249byhmdW5jdGlvbihDZSl7bGV0IHR0PW51bGw7aWYoa3QoUi5iZWZvcmVTYW5pdGl6ZUVsZW1lbnRzLENlLG51bGwpLG50KENlKSlyZXR1cm4gdXQoQ2UpLCEwO2xldCBDdD1VZShDZS5ub2RlTmFtZSk7aWYoa3QoUi51cG9uU2FuaXRpemVFbGVtZW50LENlLHt0YWdOYW1lOkN0LGFsbG93ZWRUYWdzOiR9KSxDZS5oYXNDaGlsZE5vZGVzKCkmJiFwbihDZS5maXJzdEVsZW1lbnRDaGlsZCkmJlphKC88Wy9cdyFdL2csQ2UuaW5uZXJIVE1MKSYmWmEoLzxbL1x3IV0vZyxDZS50ZXh0Q29udGVudCl8fENlLm5vZGVUeXBlPT09SHkucHJvZ3Jlc3NpbmdJbnN0cnVjdGlvbnx8aGUmJkNlLm5vZGVUeXBlPT09SHkuY29tbWVudCYmWmEoLzxbL1x3XS9nLENlLmRhdGEpKXJldHVybiB1dChDZSksITA7aWYoISRbQ3RdfHxjZVtDdF0pe2lmKCFjZVtDdF0mJk1yKEN0KSYmKFkudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiZaYShZLnRhZ05hbWVDaGVjayxDdCl8fFkudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24mJlkudGFnTmFtZUNoZWNrKEN0KSkpcmV0dXJuITE7aWYoemUmJiF4ZVtDdF0pe2xldCBncj1UKENlKXx8Q2UucGFyZW50Tm9kZSxybj1iKENlKXx8Q2UuY2hpbGROb2RlcztpZihybiYmZ3Ipe2xldCB5bj1ybi5sZW5ndGg7Zm9yKGxldCBacj15bi0xO1pyPj0wOy0tWnIpe2xldCBPaT15KHJuW1pyXSwhMCk7T2kuX19yZW1vdmFsQ291bnQ9KENlLl9fcmVtb3ZhbENvdW50fHwwKSsxLGdyLmluc2VydEJlZm9yZShPaSx4KENlKSl9fX1yZXR1cm4gdXQoQ2UpLCEwfXJldHVybiBDZSBpbnN0YW5jZW9mIHUmJiFidChDZSl8fChDdD09PSJub3NjcmlwdCJ8fEN0PT09Im5vZW1iZWQifHxDdD09PSJub2ZyYW1lcyIpJiZaYSgvPFwvbm8oc2NyaXB0fGVtYmVkfGZyYW1lcykvaSxDZS5pbm5lckhUTUwpPyh1dChDZSksITApOih0ZSYmQ2Uubm9kZVR5cGU9PT1IeS50ZXh0JiYodHQ9Q2UudGV4dENvbnRlbnQsczMoW2ssTCxBXSxncj0+e3R0PUd5KHR0LGdyLCIgIil9KSxDZS50ZXh0Q29udGVudCE9PXR0JiYoenkoZS5yZW1vdmVkLHtlbGVtZW50OkNlLmNsb25lTm9kZSgpfSksQ2UudGV4dENvbnRlbnQ9dHQpKSxrdChSLmFmdGVyU2FuaXRpemVFbGVtZW50cyxDZSxudWxsKSwhMSl9LCJfc2FuaXRpemVFbGVtZW50cyIpLHRuPW8oZnVuY3Rpb24oQ2UsdHQsQ3Qpe2lmKHllJiYodHQ9PT0iaWQifHx0dD09PSJuYW1lIikmJihDdCBpbiByfHxDdCBpbiBXZSkpcmV0dXJuITE7aWYoIShRJiYhWlt0dF0mJlphKEksdHQpKSl7aWYoISh1ZSYmWmEoTSx0dCkpKXtpZighS1t0dF18fFpbdHRdKXtpZighKE1yKENlKSYmKFkudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiZaYShZLnRhZ05hbWVDaGVjayxDZSl8fFkudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24mJlkudGFnTmFtZUNoZWNrKENlKSkmJihZLmF0dHJpYnV0ZU5hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCYmWmEoWS5hdHRyaWJ1dGVOYW1lQ2hlY2ssdHQpfHxZLmF0dHJpYnV0ZU5hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZZLmF0dHJpYnV0ZU5hbWVDaGVjayh0dCkpfHx0dD09PSJpcyImJlkuYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzJiYoWS50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAmJlphKFkudGFnTmFtZUNoZWNrLEN0KXx8WS50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYmWS50YWdOYW1lQ2hlY2soQ3QpKSkpcmV0dXJuITF9ZWxzZSBpZighb2VbdHRdKXtpZighWmEoeixHeShDdCxCLCIiKSkpe2lmKCEoKHR0PT09InNyYyJ8fHR0PT09InhsaW5rOmhyZWYifHx0dD09PSJocmVmIikmJkNlIT09InNjcmlwdCImJmk0ZShDdCwiZGF0YToiKT09PTAmJmRlW0NlXSkpe2lmKCEoaiYmIVphKFAsR3koQ3QsQiwiIikpKSl7aWYoQ3QpcmV0dXJuITF9fX19fX1yZXR1cm4hMH0sIl9pc1ZhbGlkQXR0cmlidXRlIiksTXI9byhmdW5jdGlvbihDZSl7cmV0dXJuIENlIT09ImFubm90YXRpb24teG1sIiYmQnooQ2UsRil9LCJfaXNCYXNpY0N1c3RvbUVsZW1lbnQiKSxJcj1vKGZ1bmN0aW9uKENlKXtrdChSLmJlZm9yZVNhbml0aXplQXR0cmlidXRlcyxDZSxudWxsKTtsZXR7YXR0cmlidXRlczp0dH09Q2U7aWYoIXR0fHxudChDZSkpcmV0dXJuO2xldCBDdD17YXR0ck5hbWU6IiIsYXR0clZhbHVlOiIiLGtlZXBBdHRyOiEwLGFsbG93ZWRBdHRyaWJ1dGVzOkssZm9yY2VLZWVwQXR0cjp2b2lkIDB9LGdyPXR0Lmxlbmd0aDtmb3IoO2dyLS07KXtsZXQgcm49dHRbZ3JdLHtuYW1lOnluLG5hbWVzcGFjZVVSSTpacix2YWx1ZTpPaX09cm4sZWk9VWUoeW4pLFNuPXluPT09InZhbHVlIj9PaTphNGUoT2kpO2lmKEN0LmF0dHJOYW1lPWVpLEN0LmF0dHJWYWx1ZT1TbixDdC5rZWVwQXR0cj0hMCxDdC5mb3JjZUtlZXBBdHRyPXZvaWQgMCxrdChSLnVwb25TYW5pdGl6ZUF0dHJpYnV0ZSxDZSxDdCksU249Q3QuYXR0clZhbHVlLEJlJiYoZWk9PT0iaWQifHxlaT09PSJuYW1lIikmJihTdCh5bixDZSksU249SGUrU24pLGhlJiZaYSgvKCgtLSE/fF0pPil8PFwvKHN0eWxlfHRpdGxlKS9pLFNuKSl7U3QoeW4sQ2UpO2NvbnRpbnVlfWlmKEN0LmZvcmNlS2VlcEF0dHJ8fChTdCh5bixDZSksIUN0LmtlZXBBdHRyKSljb250aW51ZTtpZighbmUmJlphKC9cLz4vaSxTbikpe1N0KHluLENlKTtjb250aW51ZX10ZSYmczMoW2ssTCxBXSxldD0+e1NuPUd5KFNuLGV0LCIgIil9KTtsZXQgSHI9VWUoQ2Uubm9kZU5hbWUpO2lmKHRuKEhyLGVpLFNuKSl7aWYoUyYmdHlwZW9mIG09PSJvYmplY3QiJiZ0eXBlb2YgbS5nZXRBdHRyaWJ1dGVUeXBlPT0iZnVuY3Rpb24iJiYhWnIpc3dpdGNoKG0uZ2V0QXR0cmlidXRlVHlwZShIcixlaSkpe2Nhc2UiVHJ1c3RlZEhUTUwiOntTbj1TLmNyZWF0ZUhUTUwoU24pO2JyZWFrfWNhc2UiVHJ1c3RlZFNjcmlwdFVSTCI6e1NuPVMuY3JlYXRlU2NyaXB0VVJMKFNuKTticmVha319dHJ5e1pyP0NlLnNldEF0dHJpYnV0ZU5TKFpyLHluLFNuKTpDZS5zZXRBdHRyaWJ1dGUoeW4sU24pLG50KENlKT91dChDZSk6UHooZS5yZW1vdmVkKX1jYXRjaHt9fX1rdChSLmFmdGVyU2FuaXRpemVBdHRyaWJ1dGVzLENlLG51bGwpfSwiX3Nhbml0aXplQXR0cmlidXRlcyIpLFBuPW8oZnVuY3Rpb24gRHQoQ2Upe2xldCB0dD1udWxsLEN0PXZ0KENlKTtmb3Ioa3QoUi5iZWZvcmVTYW5pdGl6ZVNoYWRvd0RPTSxDZSxudWxsKTt0dD1DdC5uZXh0Tm9kZSgpOylrdChSLnVwb25TYW5pdGl6ZVNoYWRvd05vZGUsdHQsbnVsbCksT24odHQpLElyKHR0KSx0dC5jb250ZW50IGluc3RhbmNlb2YgYSYmRHQodHQuY29udGVudCk7a3QoUi5hZnRlclNhbml0aXplU2hhZG93RE9NLENlLG51bGwpfSwiX3Nhbml0aXplU2hhZG93RE9NIik7cmV0dXJuIGUuc2FuaXRpemU9ZnVuY3Rpb24oRHQpe2xldCBDZT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06e30sdHQ9bnVsbCxDdD1udWxsLGdyPW51bGwscm49bnVsbDtpZihQZT0hRHQsUGUmJihEdD0iPCEtLT4iKSx0eXBlb2YgRHQhPSJzdHJpbmciJiYhcG4oRHQpKWlmKHR5cGVvZiBEdC50b1N0cmluZz09ImZ1bmN0aW9uIil7aWYoRHQ9RHQudG9TdHJpbmcoKSx0eXBlb2YgRHQhPSJzdHJpbmciKXRocm93IFZ5KCJkaXJ0eSBpcyBub3QgYSBzdHJpbmcsIGFib3J0aW5nIil9ZWxzZSB0aHJvdyBWeSgidG9TdHJpbmcgaXMgbm90IGEgZnVuY3Rpb24iKTtpZighZS5pc1N1cHBvcnRlZClyZXR1cm4gRHQ7aWYoSnx8WXQoQ2UpLGUucmVtb3ZlZD1bXSx0eXBlb2YgRHQ9PSJzdHJpbmciJiYoTGU9ITEpLExlKXtpZihEdC5ub2RlTmFtZSl7bGV0IE9pPVVlKER0Lm5vZGVOYW1lKTtpZighJFtPaV18fGNlW09pXSl0aHJvdyBWeSgicm9vdCBub2RlIGlzIGZvcmJpZGRlbiBhbmQgY2Fubm90IGJlIHNhbml0aXplZCBpbi1wbGFjZSIpfX1lbHNlIGlmKER0IGluc3RhbmNlb2YgbCl0dD1mdCgiPCEtLS0tPiIpLEN0PXR0Lm93bmVyRG9jdW1lbnQuaW1wb3J0Tm9kZShEdCwhMCksQ3Qubm9kZVR5cGU9PT1IeS5lbGVtZW50JiZDdC5ub2RlTmFtZT09PSJCT0RZInx8Q3Qubm9kZU5hbWU9PT0iSFRNTCI/dHQ9Q3Q6dHQuYXBwZW5kQ2hpbGQoQ3QpO2Vsc2V7aWYoIXNlJiYhdGUmJiFsZSYmRHQuaW5kZXhPZigiPCIpPT09LTEpcmV0dXJuIFMmJk9lP1MuY3JlYXRlSFRNTChEdCk6RHQ7aWYodHQ9ZnQoRHQpLCF0dClyZXR1cm4gc2U/bnVsbDpPZT93OiIifXR0JiZTZSYmdXQodHQuZmlyc3RDaGlsZCk7bGV0IHluPXZ0KExlP0R0OnR0KTtmb3IoO2dyPXluLm5leHROb2RlKCk7KU9uKGdyKSxJcihnciksZ3IuY29udGVudCBpbnN0YW5jZW9mIGEmJlBuKGdyLmNvbnRlbnQpO2lmKExlKXJldHVybiBEdDtpZihzZSl7aWYoYWUpZm9yKHJuPUMuY2FsbCh0dC5vd25lckRvY3VtZW50KTt0dC5maXJzdENoaWxkOylybi5hcHBlbmRDaGlsZCh0dC5maXJzdENoaWxkKTtlbHNlIHJuPXR0O3JldHVybihLLnNoYWRvd3Jvb3R8fEsuc2hhZG93cm9vdG1vZGUpJiYocm49Ty5jYWxsKG4scm4sITApKSxybn1sZXQgWnI9bGU/dHQub3V0ZXJIVE1MOnR0LmlubmVySFRNTDtyZXR1cm4gbGUmJiRbIiFkb2N0eXBlIl0mJnR0Lm93bmVyRG9jdW1lbnQmJnR0Lm93bmVyRG9jdW1lbnQuZG9jdHlwZSYmdHQub3duZXJEb2N1bWVudC5kb2N0eXBlLm5hbWUmJlphKFl6LHR0Lm93bmVyRG9jdW1lbnQuZG9jdHlwZS5uYW1lKSYmKFpyPSI8IURPQ1RZUEUgIit0dC5vd25lckRvY3VtZW50LmRvY3R5cGUubmFtZStgPgpgK1pyKSx0ZSYmczMoW2ssTCxBXSxPaT0+e1pyPUd5KFpyLE9pLCIgIil9KSxTJiZPZT9TLmNyZWF0ZUhUTUwoWnIpOlpyfSxlLnNldENvbmZpZz1mdW5jdGlvbigpe2xldCBEdD1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06e307WXQoRHQpLEo9ITB9LGUuY2xlYXJDb25maWc9ZnVuY3Rpb24oKXtjdD1udWxsLEo9ITF9LGUuaXNWYWxpZEF0dHJpYnV0ZT1mdW5jdGlvbihEdCxDZSx0dCl7Y3R8fFl0KHt9KTtsZXQgQ3Q9VWUoRHQpLGdyPVVlKENlKTtyZXR1cm4gdG4oQ3QsZ3IsdHQpfSxlLmFkZEhvb2s9ZnVuY3Rpb24oRHQsQ2Upe3R5cGVvZiBDZT09ImZ1bmN0aW9uIiYmenkoUltEdF0sQ2UpfSxlLnJlbW92ZUhvb2s9ZnVuY3Rpb24oRHQsQ2Upe2lmKENlIT09dm9pZCAwKXtsZXQgdHQ9cjRlKFJbRHRdLENlKTtyZXR1cm4gdHQ9PT0tMT92b2lkIDA6bjRlKFJbRHRdLHR0LDEpWzBdfXJldHVybiBQeihSW0R0XSl9LGUucmVtb3ZlSG9va3M9ZnVuY3Rpb24oRHQpe1JbRHRdPVtdfSxlLnJlbW92ZUFsbEhvb2tzPWZ1bmN0aW9uKCl7Uj1VeigpfSxlfXZhciBIeixPeixKYmUsZTRlLHQ0ZSxKYSxTbyxXeixfNyxENyxzMyxyNGUsUHosenksbjRlLGwzLGs3LEJ6LEd5LGk0ZSxhNGUsaGwsWmEsVnksRnosRTcsUzcsbDRlLEM3LGM0ZSwkeix6eixBNyxHeixvMyx1NGUsaDRlLGY0ZSxkNGUscDRlLHF6LG00ZSxnNGUsWXoseTRlLFZ6LEh5LHY0ZSx4NGUsVXosbWgsTDc9TigoKT0+eyJ1c2Ugc3RyaWN0Ijsoe2VudHJpZXM6SHosc2V0UHJvdG90eXBlT2Y6T3osaXNGcm96ZW46SmJlLGdldFByb3RvdHlwZU9mOmU0ZSxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6dDRlfT1PYmplY3QpLHtmcmVlemU6SmEsc2VhbDpTbyxjcmVhdGU6V3p9PU9iamVjdCx7YXBwbHk6XzcsY29uc3RydWN0OkQ3fT10eXBlb2YgUmVmbGVjdDwidSImJlJlZmxlY3Q7SmF8fChKYT1vKGZ1bmN0aW9uKGUpe3JldHVybiBlfSwiZnJlZXplIikpO1NvfHwoU289byhmdW5jdGlvbihlKXtyZXR1cm4gZX0sInNlYWwiKSk7Xzd8fChfNz1vKGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gZS5hcHBseShyLG4pfSwiYXBwbHkiKSk7RDd8fChENz1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIG5ldyBlKC4uLnIpfSwiY29uc3RydWN0IikpO3MzPWVzKEFycmF5LnByb3RvdHlwZS5mb3JFYWNoKSxyNGU9ZXMoQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mKSxQej1lcyhBcnJheS5wcm90b3R5cGUucG9wKSx6eT1lcyhBcnJheS5wcm90b3R5cGUucHVzaCksbjRlPWVzKEFycmF5LnByb3RvdHlwZS5zcGxpY2UpLGwzPWVzKFN0cmluZy5wcm90b3R5cGUudG9Mb3dlckNhc2UpLGs3PWVzKFN0cmluZy5wcm90b3R5cGUudG9TdHJpbmcpLEJ6PWVzKFN0cmluZy5wcm90b3R5cGUubWF0Y2gpLEd5PWVzKFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSksaTRlPWVzKFN0cmluZy5wcm90b3R5cGUuaW5kZXhPZiksYTRlPWVzKFN0cmluZy5wcm90b3R5cGUudHJpbSksaGw9ZXMoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSksWmE9ZXMoUmVnRXhwLnByb3RvdHlwZS50ZXN0KSxWeT1zNGUoVHlwZUVycm9yKTtvKGVzLCJ1bmFwcGx5Iik7byhzNGUsInVuY29uc3RydWN0Iik7byhfciwiYWRkVG9TZXQiKTtvKG80ZSwiY2xlYW5BcnJheSIpO28oYWQsImNsb25lIik7byhVeSwibG9va3VwR2V0dGVyIik7Rno9SmEoWyJhIiwiYWJiciIsImFjcm9ueW0iLCJhZGRyZXNzIiwiYXJlYSIsImFydGljbGUiLCJhc2lkZSIsImF1ZGlvIiwiYiIsImJkaSIsImJkbyIsImJpZyIsImJsaW5rIiwiYmxvY2txdW90ZSIsImJvZHkiLCJiciIsImJ1dHRvbiIsImNhbnZhcyIsImNhcHRpb24iLCJjZW50ZXIiLCJjaXRlIiwiY29kZSIsImNvbCIsImNvbGdyb3VwIiwiY29udGVudCIsImRhdGEiLCJkYXRhbGlzdCIsImRkIiwiZGVjb3JhdG9yIiwiZGVsIiwiZGV0YWlscyIsImRmbiIsImRpYWxvZyIsImRpciIsImRpdiIsImRsIiwiZHQiLCJlbGVtZW50IiwiZW0iLCJmaWVsZHNldCIsImZpZ2NhcHRpb24iLCJmaWd1cmUiLCJmb250IiwiZm9vdGVyIiwiZm9ybSIsImgxIiwiaDIiLCJoMyIsImg0IiwiaDUiLCJoNiIsImhlYWQiLCJoZWFkZXIiLCJoZ3JvdXAiLCJociIsImh0bWwiLCJpIiwiaW1nIiwiaW5wdXQiLCJpbnMiLCJrYmQiLCJsYWJlbCIsImxlZ2VuZCIsImxpIiwibWFpbiIsIm1hcCIsIm1hcmsiLCJtYXJxdWVlIiwibWVudSIsIm1lbnVpdGVtIiwibWV0ZXIiLCJuYXYiLCJub2JyIiwib2wiLCJvcHRncm91cCIsIm9wdGlvbiIsIm91dHB1dCIsInAiLCJwaWN0dXJlIiwicHJlIiwicHJvZ3Jlc3MiLCJxIiwicnAiLCJydCIsInJ1YnkiLCJzIiwic2FtcCIsInNlY3Rpb24iLCJzZWxlY3QiLCJzaGFkb3ciLCJzbWFsbCIsInNvdXJjZSIsInNwYWNlciIsInNwYW4iLCJzdHJpa2UiLCJzdHJvbmciLCJzdHlsZSIsInN1YiIsInN1bW1hcnkiLCJzdXAiLCJ0YWJsZSIsInRib2R5IiwidGQiLCJ0ZW1wbGF0ZSIsInRleHRhcmVhIiwidGZvb3QiLCJ0aCIsInRoZWFkIiwidGltZSIsInRyIiwidHJhY2siLCJ0dCIsInUiLCJ1bCIsInZhciIsInZpZGVvIiwid2JyIl0pLEU3PUphKFsic3ZnIiwiYSIsImFsdGdseXBoIiwiYWx0Z2x5cGhkZWYiLCJhbHRnbHlwaGl0ZW0iLCJhbmltYXRlY29sb3IiLCJhbmltYXRlbW90aW9uIiwiYW5pbWF0ZXRyYW5zZm9ybSIsImNpcmNsZSIsImNsaXBwYXRoIiwiZGVmcyIsImRlc2MiLCJlbGxpcHNlIiwiZmlsdGVyIiwiZm9udCIsImciLCJnbHlwaCIsImdseXBocmVmIiwiaGtlcm4iLCJpbWFnZSIsImxpbmUiLCJsaW5lYXJncmFkaWVudCIsIm1hcmtlciIsIm1hc2siLCJtZXRhZGF0YSIsIm1wYXRoIiwicGF0aCIsInBhdHRlcm4iLCJwb2x5Z29uIiwicG9seWxpbmUiLCJyYWRpYWxncmFkaWVudCIsInJlY3QiLCJzdG9wIiwic3R5bGUiLCJzd2l0Y2giLCJzeW1ib2wiLCJ0ZXh0IiwidGV4dHBhdGgiLCJ0aXRsZSIsInRyZWYiLCJ0c3BhbiIsInZpZXciLCJ2a2VybiJdKSxTNz1KYShbImZlQmxlbmQiLCJmZUNvbG9yTWF0cml4IiwiZmVDb21wb25lbnRUcmFuc2ZlciIsImZlQ29tcG9zaXRlIiwiZmVDb252b2x2ZU1hdHJpeCIsImZlRGlmZnVzZUxpZ2h0aW5nIiwiZmVEaXNwbGFjZW1lbnRNYXAiLCJmZURpc3RhbnRMaWdodCIsImZlRHJvcFNoYWRvdyIsImZlRmxvb2QiLCJmZUZ1bmNBIiwiZmVGdW5jQiIsImZlRnVuY0ciLCJmZUZ1bmNSIiwiZmVHYXVzc2lhbkJsdXIiLCJmZUltYWdlIiwiZmVNZXJnZSIsImZlTWVyZ2VOb2RlIiwiZmVNb3JwaG9sb2d5IiwiZmVPZmZzZXQiLCJmZVBvaW50TGlnaHQiLCJmZVNwZWN1bGFyTGlnaHRpbmciLCJmZVNwb3RMaWdodCIsImZlVGlsZSIsImZlVHVyYnVsZW5jZSJdKSxsNGU9SmEoWyJhbmltYXRlIiwiY29sb3ItcHJvZmlsZSIsImN1cnNvciIsImRpc2NhcmQiLCJmb250LWZhY2UiLCJmb250LWZhY2UtZm9ybWF0IiwiZm9udC1mYWNlLW5hbWUiLCJmb250LWZhY2Utc3JjIiwiZm9udC1mYWNlLXVyaSIsImZvcmVpZ25vYmplY3QiLCJoYXRjaCIsImhhdGNocGF0aCIsIm1lc2giLCJtZXNoZ3JhZGllbnQiLCJtZXNocGF0Y2giLCJtZXNocm93IiwibWlzc2luZy1nbHlwaCIsInNjcmlwdCIsInNldCIsInNvbGlkY29sb3IiLCJ1bmtub3duIiwidXNlIl0pLEM3PUphKFsibWF0aCIsIm1lbmNsb3NlIiwibWVycm9yIiwibWZlbmNlZCIsIm1mcmFjIiwibWdseXBoIiwibWkiLCJtbGFiZWxlZHRyIiwibW11bHRpc2NyaXB0cyIsIm1uIiwibW8iLCJtb3ZlciIsIm1wYWRkZWQiLCJtcGhhbnRvbSIsIm1yb290IiwibXJvdyIsIm1zIiwibXNwYWNlIiwibXNxcnQiLCJtc3R5bGUiLCJtc3ViIiwibXN1cCIsIm1zdWJzdXAiLCJtdGFibGUiLCJtdGQiLCJtdGV4dCIsIm10ciIsIm11bmRlciIsIm11bmRlcm92ZXIiLCJtcHJlc2NyaXB0cyJdKSxjNGU9SmEoWyJtYWN0aW9uIiwibWFsaWduZ3JvdXAiLCJtYWxpZ25tYXJrIiwibWxvbmdkaXYiLCJtc2NhcnJpZXMiLCJtc2NhcnJ5IiwibXNncm91cCIsIm1zdGFjayIsIm1zbGluZSIsIm1zcm93Iiwic2VtYW50aWNzIiwiYW5ub3RhdGlvbiIsImFubm90YXRpb24teG1sIiwibXByZXNjcmlwdHMiLCJub25lIl0pLCR6PUphKFsiI3RleHQiXSkseno9SmEoWyJhY2NlcHQiLCJhY3Rpb24iLCJhbGlnbiIsImFsdCIsImF1dG9jYXBpdGFsaXplIiwiYXV0b2NvbXBsZXRlIiwiYXV0b3BpY3R1cmVpbnBpY3R1cmUiLCJhdXRvcGxheSIsImJhY2tncm91bmQiLCJiZ2NvbG9yIiwiYm9yZGVyIiwiY2FwdHVyZSIsImNlbGxwYWRkaW5nIiwiY2VsbHNwYWNpbmciLCJjaGVja2VkIiwiY2l0ZSIsImNsYXNzIiwiY2xlYXIiLCJjb2xvciIsImNvbHMiLCJjb2xzcGFuIiwiY29udHJvbHMiLCJjb250cm9sc2xpc3QiLCJjb29yZHMiLCJjcm9zc29yaWdpbiIsImRhdGV0aW1lIiwiZGVjb2RpbmciLCJkZWZhdWx0IiwiZGlyIiwiZGlzYWJsZWQiLCJkaXNhYmxlcGljdHVyZWlucGljdHVyZSIsImRpc2FibGVyZW1vdGVwbGF5YmFjayIsImRvd25sb2FkIiwiZHJhZ2dhYmxlIiwiZW5jdHlwZSIsImVudGVya2V5aGludCIsImZhY2UiLCJmb3IiLCJoZWFkZXJzIiwiaGVpZ2h0IiwiaGlkZGVuIiwiaGlnaCIsImhyZWYiLCJocmVmbGFuZyIsImlkIiwiaW5wdXRtb2RlIiwiaW50ZWdyaXR5IiwiaXNtYXAiLCJraW5kIiwibGFiZWwiLCJsYW5nIiwibGlzdCIsImxvYWRpbmciLCJsb29wIiwibG93IiwibWF4IiwibWF4bGVuZ3RoIiwibWVkaWEiLCJtZXRob2QiLCJtaW4iLCJtaW5sZW5ndGgiLCJtdWx0aXBsZSIsIm11dGVkIiwibmFtZSIsIm5vbmNlIiwibm9zaGFkZSIsIm5vdmFsaWRhdGUiLCJub3dyYXAiLCJvcGVuIiwib3B0aW11bSIsInBhdHRlcm4iLCJwbGFjZWhvbGRlciIsInBsYXlzaW5saW5lIiwicG9wb3ZlciIsInBvcG92ZXJ0YXJnZXQiLCJwb3BvdmVydGFyZ2V0YWN0aW9uIiwicG9zdGVyIiwicHJlbG9hZCIsInB1YmRhdGUiLCJyYWRpb2dyb3VwIiwicmVhZG9ubHkiLCJyZWwiLCJyZXF1aXJlZCIsInJldiIsInJldmVyc2VkIiwicm9sZSIsInJvd3MiLCJyb3dzcGFuIiwic3BlbGxjaGVjayIsInNjb3BlIiwic2VsZWN0ZWQiLCJzaGFwZSIsInNpemUiLCJzaXplcyIsInNwYW4iLCJzcmNsYW5nIiwic3RhcnQiLCJzcmMiLCJzcmNzZXQiLCJzdGVwIiwic3R5bGUiLCJzdW1tYXJ5IiwidGFiaW5kZXgiLCJ0aXRsZSIsInRyYW5zbGF0ZSIsInR5cGUiLCJ1c2VtYXAiLCJ2YWxpZ24iLCJ2YWx1ZSIsIndpZHRoIiwid3JhcCIsInhtbG5zIiwic2xvdCJdKSxBNz1KYShbImFjY2VudC1oZWlnaHQiLCJhY2N1bXVsYXRlIiwiYWRkaXRpdmUiLCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJhbXBsaXR1ZGUiLCJhc2NlbnQiLCJhdHRyaWJ1dGVuYW1lIiwiYXR0cmlidXRldHlwZSIsImF6aW11dGgiLCJiYXNlZnJlcXVlbmN5IiwiYmFzZWxpbmUtc2hpZnQiLCJiZWdpbiIsImJpYXMiLCJieSIsImNsYXNzIiwiY2xpcCIsImNsaXBwYXRodW5pdHMiLCJjbGlwLXBhdGgiLCJjbGlwLXJ1bGUiLCJjb2xvciIsImNvbG9yLWludGVycG9sYXRpb24iLCJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMiLCJjb2xvci1wcm9maWxlIiwiY29sb3ItcmVuZGVyaW5nIiwiY3giLCJjeSIsImQiLCJkeCIsImR5IiwiZGlmZnVzZWNvbnN0YW50IiwiZGlyZWN0aW9uIiwiZGlzcGxheSIsImRpdmlzb3IiLCJkdXIiLCJlZGdlbW9kZSIsImVsZXZhdGlvbiIsImVuZCIsImV4cG9uZW50IiwiZmlsbCIsImZpbGwtb3BhY2l0eSIsImZpbGwtcnVsZSIsImZpbHRlciIsImZpbHRlcnVuaXRzIiwiZmxvb2QtY29sb3IiLCJmbG9vZC1vcGFjaXR5IiwiZm9udC1mYW1pbHkiLCJmb250LXNpemUiLCJmb250LXNpemUtYWRqdXN0IiwiZm9udC1zdHJldGNoIiwiZm9udC1zdHlsZSIsImZvbnQtdmFyaWFudCIsImZvbnQtd2VpZ2h0IiwiZngiLCJmeSIsImcxIiwiZzIiLCJnbHlwaC1uYW1lIiwiZ2x5cGhyZWYiLCJncmFkaWVudHVuaXRzIiwiZ3JhZGllbnR0cmFuc2Zvcm0iLCJoZWlnaHQiLCJocmVmIiwiaWQiLCJpbWFnZS1yZW5kZXJpbmciLCJpbiIsImluMiIsImludGVyY2VwdCIsImsiLCJrMSIsImsyIiwiazMiLCJrNCIsImtlcm5pbmciLCJrZXlwb2ludHMiLCJrZXlzcGxpbmVzIiwia2V5dGltZXMiLCJsYW5nIiwibGVuZ3RoYWRqdXN0IiwibGV0dGVyLXNwYWNpbmciLCJrZXJuZWxtYXRyaXgiLCJrZXJuZWx1bml0bGVuZ3RoIiwibGlnaHRpbmctY29sb3IiLCJsb2NhbCIsIm1hcmtlci1lbmQiLCJtYXJrZXItbWlkIiwibWFya2VyLXN0YXJ0IiwibWFya2VyaGVpZ2h0IiwibWFya2VydW5pdHMiLCJtYXJrZXJ3aWR0aCIsIm1hc2tjb250ZW50dW5pdHMiLCJtYXNrdW5pdHMiLCJtYXgiLCJtYXNrIiwibWVkaWEiLCJtZXRob2QiLCJtb2RlIiwibWluIiwibmFtZSIsIm51bW9jdGF2ZXMiLCJvZmZzZXQiLCJvcGVyYXRvciIsIm9wYWNpdHkiLCJvcmRlciIsIm9yaWVudCIsIm9yaWVudGF0aW9uIiwib3JpZ2luIiwib3ZlcmZsb3ciLCJwYWludC1vcmRlciIsInBhdGgiLCJwYXRobGVuZ3RoIiwicGF0dGVybmNvbnRlbnR1bml0cyIsInBhdHRlcm50cmFuc2Zvcm0iLCJwYXR0ZXJudW5pdHMiLCJwb2ludHMiLCJwcmVzZXJ2ZWFscGhhIiwicHJlc2VydmVhc3BlY3RyYXRpbyIsInByaW1pdGl2ZXVuaXRzIiwiciIsInJ4IiwicnkiLCJyYWRpdXMiLCJyZWZ4IiwicmVmeSIsInJlcGVhdGNvdW50IiwicmVwZWF0ZHVyIiwicmVzdGFydCIsInJlc3VsdCIsInJvdGF0ZSIsInNjYWxlIiwic2VlZCIsInNoYXBlLXJlbmRlcmluZyIsInNsb3BlIiwic3BlY3VsYXJjb25zdGFudCIsInNwZWN1bGFyZXhwb25lbnQiLCJzcHJlYWRtZXRob2QiLCJzdGFydG9mZnNldCIsInN0ZGRldmlhdGlvbiIsInN0aXRjaHRpbGVzIiwic3RvcC1jb2xvciIsInN0b3Atb3BhY2l0eSIsInN0cm9rZS1kYXNoYXJyYXkiLCJzdHJva2UtZGFzaG9mZnNldCIsInN0cm9rZS1saW5lY2FwIiwic3Ryb2tlLWxpbmVqb2luIiwic3Ryb2tlLW1pdGVybGltaXQiLCJzdHJva2Utb3BhY2l0eSIsInN0cm9rZSIsInN0cm9rZS13aWR0aCIsInN0eWxlIiwic3VyZmFjZXNjYWxlIiwic3lzdGVtbGFuZ3VhZ2UiLCJ0YWJpbmRleCIsInRhYmxldmFsdWVzIiwidGFyZ2V0eCIsInRhcmdldHkiLCJ0cmFuc2Zvcm0iLCJ0cmFuc2Zvcm0tb3JpZ2luIiwidGV4dC1hbmNob3IiLCJ0ZXh0LWRlY29yYXRpb24iLCJ0ZXh0LXJlbmRlcmluZyIsInRleHRsZW5ndGgiLCJ0eXBlIiwidTEiLCJ1MiIsInVuaWNvZGUiLCJ2YWx1ZXMiLCJ2aWV3Ym94IiwidmlzaWJpbGl0eSIsInZlcnNpb24iLCJ2ZXJ0LWFkdi15IiwidmVydC1vcmlnaW4teCIsInZlcnQtb3JpZ2luLXkiLCJ3aWR0aCIsIndvcmQtc3BhY2luZyIsIndyYXAiLCJ3cml0aW5nLW1vZGUiLCJ4Y2hhbm5lbHNlbGVjdG9yIiwieWNoYW5uZWxzZWxlY3RvciIsIngiLCJ4MSIsIngyIiwieG1sbnMiLCJ5IiwieTEiLCJ5MiIsInoiLCJ6b29tYW5kcGFuIl0pLEd6PUphKFsiYWNjZW50IiwiYWNjZW50dW5kZXIiLCJhbGlnbiIsImJldmVsbGVkIiwiY2xvc2UiLCJjb2x1bW5zYWxpZ24iLCJjb2x1bW5saW5lcyIsImNvbHVtbnNwYW4iLCJkZW5vbWFsaWduIiwiZGVwdGgiLCJkaXIiLCJkaXNwbGF5IiwiZGlzcGxheXN0eWxlIiwiZW5jb2RpbmciLCJmZW5jZSIsImZyYW1lIiwiaGVpZ2h0IiwiaHJlZiIsImlkIiwibGFyZ2VvcCIsImxlbmd0aCIsImxpbmV0aGlja25lc3MiLCJsc3BhY2UiLCJscXVvdGUiLCJtYXRoYmFja2dyb3VuZCIsIm1hdGhjb2xvciIsIm1hdGhzaXplIiwibWF0aHZhcmlhbnQiLCJtYXhzaXplIiwibWluc2l6ZSIsIm1vdmFibGVsaW1pdHMiLCJub3RhdGlvbiIsIm51bWFsaWduIiwib3BlbiIsInJvd2FsaWduIiwicm93bGluZXMiLCJyb3dzcGFjaW5nIiwicm93c3BhbiIsInJzcGFjZSIsInJxdW90ZSIsInNjcmlwdGxldmVsIiwic2NyaXB0bWluc2l6ZSIsInNjcmlwdHNpemVtdWx0aXBsaWVyIiwic2VsZWN0aW9uIiwic2VwYXJhdG9yIiwic2VwYXJhdG9ycyIsInN0cmV0Y2h5Iiwic3Vic2NyaXB0c2hpZnQiLCJzdXBzY3JpcHRzaGlmdCIsInN5bW1ldHJpYyIsInZvZmZzZXQiLCJ3aWR0aCIsInhtbG5zIl0pLG8zPUphKFsieGxpbms6aHJlZiIsInhtbDppZCIsInhsaW5rOnRpdGxlIiwieG1sOnNwYWNlIiwieG1sbnM6eGxpbmsiXSksdTRlPVNvKC9ce1x7W1x3XFddKnxbXHdcV10qXH1cfS9nbSksaDRlPVNvKC88JVtcd1xXXSp8W1x3XFddKiU+L2dtKSxmNGU9U28oL1wkXHtbXHdcV10qL2dtKSxkNGU9U28oL15kYXRhLVtcLVx3Llx1MDBCNy1cdUZGRkZdKyQvKSxwNGU9U28oL15hcmlhLVtcLVx3XSskLykscXo9U28oL14oPzooPzooPzpmfGh0KXRwcz98bWFpbHRvfHRlbHxjYWxsdG98c21zfGNpZHx4bXBwKTp8W15hLXpdfFthLXorLlwtXSsoPzpbXmEteisuXC06XXwkKSkvaSksbTRlPVNvKC9eKD86XHcrc2NyaXB0fGRhdGEpOi9pKSxnNGU9U28oL1tcdTAwMDAtXHUwMDIwXHUwMEEwXHUxNjgwXHUxODBFXHUyMDAwLVx1MjAyOVx1MjA1Rlx1MzAwMF0vZyksWXo9U28oL15odG1sJC9pKSx5NGU9U28oL15bYS16XVsuXHddKigtWy5cd10rKSskL2kpLFZ6PU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLEFSSUFfQVRUUjpwNGUsQVRUUl9XSElURVNQQUNFOmc0ZSxDVVNUT01fRUxFTUVOVDp5NGUsREFUQV9BVFRSOmQ0ZSxET0NUWVBFX05BTUU6WXosRVJCX0VYUFI6aDRlLElTX0FMTE9XRURfVVJJOnF6LElTX1NDUklQVF9PUl9EQVRBOm00ZSxNVVNUQUNIRV9FWFBSOnU0ZSxUTVBMSVRfRVhQUjpmNGV9KSxIeT17ZWxlbWVudDoxLGF0dHJpYnV0ZToyLHRleHQ6MyxjZGF0YVNlY3Rpb246NCxlbnRpdHlSZWZlcmVuY2U6NSxlbnRpdHlOb2RlOjYscHJvZ3Jlc3NpbmdJbnN0cnVjdGlvbjo3LGNvbW1lbnQ6OCxkb2N1bWVudDo5LGRvY3VtZW50VHlwZToxMCxkb2N1bWVudEZyYWdtZW50OjExLG5vdGF0aW9uOjEyfSx2NGU9byhmdW5jdGlvbigpe3JldHVybiB0eXBlb2Ygd2luZG93PiJ1Ij9udWxsOndpbmRvd30sImdldEdsb2JhbCIpLHg0ZT1vKGZ1bmN0aW9uKGUscil7aWYodHlwZW9mIGUhPSJvYmplY3QifHx0eXBlb2YgZS5jcmVhdGVQb2xpY3khPSJmdW5jdGlvbiIpcmV0dXJuIG51bGw7bGV0IG49bnVsbCxpPSJkYXRhLXR0LXBvbGljeS1zdWZmaXgiO3ImJnIuaGFzQXR0cmlidXRlKGkpJiYobj1yLmdldEF0dHJpYnV0ZShpKSk7bGV0IGE9ImRvbXB1cmlmeSIrKG4/IiMiK246IiIpO3RyeXtyZXR1cm4gZS5jcmVhdGVQb2xpY3koYSx7Y3JlYXRlSFRNTChzKXtyZXR1cm4gc30sY3JlYXRlU2NyaXB0VVJMKHMpe3JldHVybiBzfX0pfWNhdGNoe3JldHVybiBjb25zb2xlLndhcm4oIlRydXN0ZWRUeXBlcyBwb2xpY3kgIithKyIgY291bGQgbm90IGJlIGNyZWF0ZWQuIiksbnVsbH19LCJfY3JlYXRlVHJ1c3RlZFR5cGVzUG9saWN5IiksVXo9byhmdW5jdGlvbigpe3JldHVybnthZnRlclNhbml0aXplQXR0cmlidXRlczpbXSxhZnRlclNhbml0aXplRWxlbWVudHM6W10sYWZ0ZXJTYW5pdGl6ZVNoYWRvd0RPTTpbXSxiZWZvcmVTYW5pdGl6ZUF0dHJpYnV0ZXM6W10sYmVmb3JlU2FuaXRpemVFbGVtZW50czpbXSxiZWZvcmVTYW5pdGl6ZVNoYWRvd0RPTTpbXSx1cG9uU2FuaXRpemVBdHRyaWJ1dGU6W10sdXBvblNhbml0aXplRWxlbWVudDpbXSx1cG9uU2FuaXRpemVTaGFkb3dOb2RlOltdfX0sIl9jcmVhdGVIb29rc01hcCIpO28oWHosImNyZWF0ZURPTVB1cmlmeSIpO21oPVh6KCl9KTt2YXIgQ1Y9e307dXIoQ1Yse1BhcnNlRXJyb3I6KCk9PnB0LFNFVFRJTkdTX1NDSEVNQTooKT0+WHksX19kZWZpbmVGdW5jdGlvbjooKT0+TnQsX19kZWZpbmVNYWNybzooKT0+ZmUsX19kZWZpbmVTeW1ib2w6KCk9PkcsX19kb21UcmVlOigpPT5TVixfX3BhcnNlOigpPT5UVixfX3JlbmRlclRvRG9tVHJlZTooKT0+TzMsX19yZW5kZXJUb0hUTUxUcmVlOigpPT5rVixfX3NldEZvbnRNZXRyaWNzOigpPT5fRyxkZWZhdWx0OigpPT51NWUscmVuZGVyOigpPT54QSxyZW5kZXJUb1N0cmluZzooKT0+YlYsdmVyc2lvbjooKT0+RVZ9KTtmdW5jdGlvbiBDNGUodCl7cmV0dXJuIFN0cmluZyh0KS5yZXBsYWNlKFM0ZSxlPT5FNGVbZV0pfWZ1bmN0aW9uIEw0ZSh0KXtpZih0LmRlZmF1bHQpcmV0dXJuIHQuZGVmYXVsdDt2YXIgZT10LnR5cGUscj1BcnJheS5pc0FycmF5KGUpP2VbMF06ZTtpZih0eXBlb2YgciE9InN0cmluZyIpcmV0dXJuIHIuZW51bVswXTtzd2l0Y2gocil7Y2FzZSJib29sZWFuIjpyZXR1cm4hMTtjYXNlInN0cmluZyI6cmV0dXJuIiI7Y2FzZSJudW1iZXIiOnJldHVybiAwO2Nhc2Uib2JqZWN0IjpyZXR1cm57fX19ZnVuY3Rpb24gQjRlKHQpe2Zvcih2YXIgZT0wO2U8SDcubGVuZ3RoO2UrKylmb3IodmFyIHI9SDdbZV0sbj0wO248ci5ibG9ja3MubGVuZ3RoO24rKyl7dmFyIGk9ci5ibG9ja3Nbbl07aWYodD49aVswXSYmdDw9aVsxXSlyZXR1cm4gci5uYW1lfXJldHVybiBudWxsfWZ1bmN0aW9uIEFHKHQpe2Zvcih2YXIgZT0wO2U8YjMubGVuZ3RoO2UrPTIpaWYodD49YjNbZV0mJnQ8PWIzW2UrMV0pcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gX0codCxlKXtKbFt0XT1lfWZ1bmN0aW9uIG5BKHQsZSxyKXtpZighSmxbZV0pdGhyb3cgbmV3IEVycm9yKCJGb250IG1ldHJpY3Mgbm90IGZvdW5kIGZvciBmb250OiAiK2UrIi4iKTt2YXIgbj10LmNoYXJDb2RlQXQoMCksaT1KbFtlXVtuXTtpZighaSYmdFswXWluIEt6JiYobj1Lelt0WzBdXS5jaGFyQ29kZUF0KDApLGk9SmxbZV1bbl0pLCFpJiZyPT09InRleHQiJiZBRyhuKSYmKGk9SmxbZV1bNzddKSxpKXJldHVybntkZXB0aDppWzBdLGhlaWdodDppWzFdLGl0YWxpYzppWzJdLHNrZXc6aVszXSx3aWR0aDppWzRdfX1mdW5jdGlvbiBYNGUodCl7dmFyIGU7aWYodD49NT9lPTA6dD49Mz9lPTE6ZT0yLCFSN1tlXSl7dmFyIHI9UjdbZV09e2Nzc0VtUGVyTXU6YzMucXVhZFtlXS8xOH07Zm9yKHZhciBuIGluIGMzKWMzLmhhc093blByb3BlcnR5KG4pJiYocltuXT1jM1tuXVtlXSl9cmV0dXJuIFI3W2VdfWZ1bmN0aW9uIEp6KHQpe2lmKHQgaW5zdGFuY2VvZiBBcylyZXR1cm4gdDt0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIHN5bWJvbE5vZGUgYnV0IGdvdCAiK1N0cmluZyh0KSsiLiIpfWZ1bmN0aW9uIEo0ZSh0KXtpZih0IGluc3RhbmNlb2YgbGQpcmV0dXJuIHQ7dGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBzcGFuPEh0bWxEb21Ob2RlPiBidXQgZ290ICIrU3RyaW5nKHQpKyIuIil9ZnVuY3Rpb24gRyh0LGUscixuLGksYSl7QW5bdF1baV09e2ZvbnQ6ZSxncm91cDpyLHJlcGxhY2U6bn0sYSYmbiYmKEFuW3RdW25dPUFuW3RdW2ldKX1mdW5jdGlvbiBOdCh0KXtmb3IodmFye3R5cGU6ZSxuYW1lczpyLHByb3BzOm4saGFuZGxlcjppLGh0bWxCdWlsZGVyOmEsbWF0aG1sQnVpbGRlcjpzfT10LGw9e3R5cGU6ZSxudW1BcmdzOm4ubnVtQXJncyxhcmdUeXBlczpuLmFyZ1R5cGVzLGFsbG93ZWRJbkFyZ3VtZW50OiEhbi5hbGxvd2VkSW5Bcmd1bWVudCxhbGxvd2VkSW5UZXh0OiEhbi5hbGxvd2VkSW5UZXh0LGFsbG93ZWRJbk1hdGg6bi5hbGxvd2VkSW5NYXRoPT09dm9pZCAwPyEwOm4uYWxsb3dlZEluTWF0aCxudW1PcHRpb25hbEFyZ3M6bi5udW1PcHRpb25hbEFyZ3N8fDAsaW5maXg6ISFuLmluZml4LHByaW1pdGl2ZTohIW4ucHJpbWl0aXZlLGhhbmRsZXI6aX0sdT0wO3U8ci5sZW5ndGg7Kyt1KUZHW3JbdV1dPWw7ZSYmKGEmJihFM1tlXT1hKSxzJiYoUzNbZV09cykpfWZ1bmN0aW9uIGNkKHQpe3Zhcnt0eXBlOmUsaHRtbEJ1aWxkZXI6cixtYXRobWxCdWlsZGVyOm59PXQ7TnQoe3R5cGU6ZSxuYW1lczpbXSxwcm9wczp7bnVtQXJnczowfSxoYW5kbGVyKCl7dGhyb3cgbmV3IEVycm9yKCJTaG91bGQgbmV2ZXIgYmUgY2FsbGVkLiIpfSxodG1sQnVpbGRlcjpyLG1hdGhtbEJ1aWxkZXI6bn0pfWZ1bmN0aW9uIGczKHQsZSl7dmFyIHI9ZnUoWyJiYXNlIl0sdCxlKSxuPWZ1KFsic3RydXQiXSk7cmV0dXJuIG4uc3R5bGUuaGVpZ2h0PUV0KHIuaGVpZ2h0K3IuZGVwdGgpLHIuZGVwdGgmJihuLnN0eWxlLnZlcnRpY2FsQWxpZ249RXQoLXIuZGVwdGgpKSxyLmNoaWxkcmVuLnVuc2hpZnQobikscn1mdW5jdGlvbiBqNyh0LGUpe3ZhciByPW51bGw7dC5sZW5ndGg9PT0xJiZ0WzBdLnR5cGU9PT0idGFnIiYmKHI9dFswXS50YWcsdD10WzBdLmJvZHkpO3ZhciBuPSRpKHQsZSwicm9vdCIpLGk7bi5sZW5ndGg9PT0yJiZuWzFdLmhhc0NsYXNzKCJ0YWciKSYmKGk9bi5wb3AoKSk7Zm9yKHZhciBhPVtdLHM9W10sbD0wO2w8bi5sZW5ndGg7bCsrKWlmKHMucHVzaChuW2xdKSxuW2xdLmhhc0NsYXNzKCJtYmluIil8fG5bbF0uaGFzQ2xhc3MoIm1yZWwiKXx8bltsXS5oYXNDbGFzcygiYWxsb3dicmVhayIpKXtmb3IodmFyIHU9ITE7bDxuLmxlbmd0aC0xJiZuW2wrMV0uaGFzQ2xhc3MoIm1zcGFjZSIpJiYhbltsKzFdLmhhc0NsYXNzKCJuZXdsaW5lIik7KWwrKyxzLnB1c2gobltsXSksbltsXS5oYXNDbGFzcygibm9icmVhayIpJiYodT0hMCk7dXx8KGEucHVzaChnMyhzLGUpKSxzPVtdKX1lbHNlIG5bbF0uaGFzQ2xhc3MoIm5ld2xpbmUiKSYmKHMucG9wKCkscy5sZW5ndGg+MCYmKGEucHVzaChnMyhzLGUpKSxzPVtdKSxhLnB1c2gobltsXSkpO3MubGVuZ3RoPjAmJmEucHVzaChnMyhzLGUpKTt2YXIgaDtyPyhoPWczKCRpKHIsZSwhMCkpLGguY2xhc3Nlcz1bInRhZyJdLGEucHVzaChoKSk6aSYmYS5wdXNoKGkpO3ZhciBmPWZ1KFsia2F0ZXgtaHRtbCJdLGEpO2lmKGYuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsInRydWUiKSxoKXt2YXIgZD1oLmNoaWxkcmVuWzBdO2Quc3R5bGUuaGVpZ2h0PUV0KGYuaGVpZ2h0K2YuZGVwdGgpLGYuZGVwdGgmJihkLnN0eWxlLnZlcnRpY2FsQWxpZ249RXQoLWYuZGVwdGgpKX1yZXR1cm4gZn1mdW5jdGlvbiB6Ryh0KXtyZXR1cm4gbmV3IG9kKHQpfWZ1bmN0aW9uIEk3KHQpe2lmKCF0KXJldHVybiExO2lmKHQudHlwZT09PSJtaSImJnQuY2hpbGRyZW4ubGVuZ3RoPT09MSl7dmFyIGU9dC5jaGlsZHJlblswXTtyZXR1cm4gZSBpbnN0YW5jZW9mIEFvJiZlLnRleHQ9PT0iLiJ9ZWxzZSBpZih0LnR5cGU9PT0ibW8iJiZ0LmNoaWxkcmVuLmxlbmd0aD09PTEmJnQuZ2V0QXR0cmlidXRlKCJzZXBhcmF0b3IiKT09PSJ0cnVlIiYmdC5nZXRBdHRyaWJ1dGUoImxzcGFjZSIpPT09IjBlbSImJnQuZ2V0QXR0cmlidXRlKCJyc3BhY2UiKT09PSIwZW0iKXt2YXIgcj10LmNoaWxkcmVuWzBdO3JldHVybiByIGluc3RhbmNlb2YgQW8mJnIudGV4dD09PSIsIn1lbHNlIHJldHVybiExfWZ1bmN0aW9uIGlHKHQsZSxyLG4saSl7dmFyIGE9X3ModCxyKSxzO2EubGVuZ3RoPT09MSYmYVswXWluc3RhbmNlb2YgdHMmJkp0LmNvbnRhaW5zKFsibXJvdyIsIm10YWJsZSJdLGFbMF0udHlwZSk/cz1hWzBdOnM9bmV3IGR0Lk1hdGhOb2RlKCJtcm93IixhKTt2YXIgbD1uZXcgZHQuTWF0aE5vZGUoImFubm90YXRpb24iLFtuZXcgZHQuVGV4dE5vZGUoZSldKTtsLnNldEF0dHJpYnV0ZSgiZW5jb2RpbmciLCJhcHBsaWNhdGlvbi94LXRleCIpO3ZhciB1PW5ldyBkdC5NYXRoTm9kZSgic2VtYW50aWNzIixbcyxsXSksaD1uZXcgZHQuTWF0aE5vZGUoIm1hdGgiLFt1XSk7aC5zZXRBdHRyaWJ1dGUoInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCIpLG4mJmguc2V0QXR0cmlidXRlKCJkaXNwbGF5IiwiYmxvY2siKTt2YXIgZj1pPyJrYXRleCI6ImthdGV4LW1hdGhtbCI7cmV0dXJuIEZlLm1ha2VTcGFuKFtmXSxbaF0pfWZ1bmN0aW9uIHhyKHQsZSl7aWYoIXR8fHQudHlwZSE9PWUpdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBub2RlIG9mIHR5cGUgIitlKyIsIGJ1dCBnb3QgIisodD8ibm9kZSBvZiB0eXBlICIrdC50eXBlOlN0cmluZyh0KSkpO3JldHVybiB0fWZ1bmN0aW9uIG9BKHQpe3ZhciBlPVIzKHQpO2lmKCFlKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgbm9kZSBvZiBzeW1ib2wgZ3JvdXAgdHlwZSwgYnV0IGdvdCAiKyh0PyJub2RlIG9mIHR5cGUgIit0LnR5cGU6U3RyaW5nKHQpKSk7cmV0dXJuIGV9ZnVuY3Rpb24gUjModCl7cmV0dXJuIHQmJih0LnR5cGU9PT0iYXRvbSJ8fHQzZS5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpKT90Om51bGx9ZnVuY3Rpb24gSEcodCxlKXt2YXIgcj0kaSh0LmJvZHksZSwhMCk7cmV0dXJuIFIzZShbdC5tY2xhc3NdLHIsZSl9ZnVuY3Rpb24gV0codCxlKXt2YXIgcixuPV9zKHQuYm9keSxlKTtyZXR1cm4gdC5tY2xhc3M9PT0ibWlubmVyIj9yPW5ldyBkdC5NYXRoTm9kZSgibXBhZGRlZCIsbik6dC5tY2xhc3M9PT0ibW9yZCI/dC5pc0NoYXJhY3RlckJveD8ocj1uWzBdLHIudHlwZT0ibWkiKTpyPW5ldyBkdC5NYXRoTm9kZSgibWkiLG4pOih0LmlzQ2hhcmFjdGVyQm94PyhyPW5bMF0sci50eXBlPSJtbyIpOnI9bmV3IGR0Lk1hdGhOb2RlKCJtbyIsbiksdC5tY2xhc3M9PT0ibWJpbiI/KHIuYXR0cmlidXRlcy5sc3BhY2U9IjAuMjJlbSIsci5hdHRyaWJ1dGVzLnJzcGFjZT0iMC4yMmVtIik6dC5tY2xhc3M9PT0ibXB1bmN0Ij8oci5hdHRyaWJ1dGVzLmxzcGFjZT0iMGVtIixyLmF0dHJpYnV0ZXMucnNwYWNlPSIwLjE3ZW0iKTp0Lm1jbGFzcz09PSJtb3BlbiJ8fHQubWNsYXNzPT09Im1jbG9zZSI/KHIuYXR0cmlidXRlcy5sc3BhY2U9IjBlbSIsci5hdHRyaWJ1dGVzLnJzcGFjZT0iMGVtIik6dC5tY2xhc3M9PT0ibWlubmVyIiYmKHIuYXR0cmlidXRlcy5sc3BhY2U9IjAuMDU1NmVtIixyLmF0dHJpYnV0ZXMud2lkdGg9IiswLjExMTFlbSIpKSxyfWZ1bmN0aW9uIEkzZSh0LGUscil7dmFyIG49TjNlW3RdO3N3aXRjaChuKXtjYXNlIlxcXFxjZHJpZ2h0YXJyb3ciOmNhc2UiXFxcXGNkbGVmdGFycm93IjpyZXR1cm4gci5jYWxsRnVuY3Rpb24obixbZVswXV0sW2VbMV1dKTtjYXNlIlxcdXBhcnJvdyI6Y2FzZSJcXGRvd25hcnJvdyI6e3ZhciBpPXIuY2FsbEZ1bmN0aW9uKCJcXFxcY2RsZWZ0IixbZVswXV0sW10pLGE9e3R5cGU6ImF0b20iLHRleHQ6bixtb2RlOiJtYXRoIixmYW1pbHk6InJlbCJ9LHM9ci5jYWxsRnVuY3Rpb24oIlxcQmlnIixbYV0sW10pLGw9ci5jYWxsRnVuY3Rpb24oIlxcXFxjZHJpZ2h0IixbZVsxXV0sW10pLHU9e3R5cGU6Im9yZGdyb3VwIixtb2RlOiJtYXRoIixib2R5OltpLHMsbF19O3JldHVybiByLmNhbGxGdW5jdGlvbigiXFxcXGNkcGFyZW50IixbdV0sW10pfWNhc2UiXFxcXGNkbG9uZ2VxdWFsIjpyZXR1cm4gci5jYWxsRnVuY3Rpb24oIlxcXFxjZGxvbmdlcXVhbCIsW10sW10pO2Nhc2UiXFxWZXJ0Ijp7dmFyIGg9e3R5cGU6InRleHRvcmQiLHRleHQ6IlxcVmVydCIsbW9kZToibWF0aCJ9O3JldHVybiByLmNhbGxGdW5jdGlvbigiXFxCaWciLFtoXSxbXSl9ZGVmYXVsdDpyZXR1cm57dHlwZToidGV4dG9yZCIsdGV4dDoiICIsbW9kZToibWF0aCJ9fX1mdW5jdGlvbiBPM2UodCl7dmFyIGU9W107Zm9yKHQuZ3VsbGV0LmJlZ2luR3JvdXAoKSx0Lmd1bGxldC5tYWNyb3Muc2V0KCJcXGNyIiwiXFxcXFxccmVsYXgiKSx0Lmd1bGxldC5iZWdpbkdyb3VwKCk7Oyl7ZS5wdXNoKHQucGFyc2VFeHByZXNzaW9uKCExLCJcXFxcIikpLHQuZ3VsbGV0LmVuZEdyb3VwKCksdC5ndWxsZXQuYmVnaW5Hcm91cCgpO3ZhciByPXQuZmV0Y2goKS50ZXh0O2lmKHI9PT0iJiJ8fHI9PT0iXFxcXCIpdC5jb25zdW1lKCk7ZWxzZSBpZihyPT09IlxcZW5kIil7ZVtlLmxlbmd0aC0xXS5sZW5ndGg9PT0wJiZlLnBvcCgpO2JyZWFrfWVsc2UgdGhyb3cgbmV3IHB0KCJFeHBlY3RlZCBcXFxcIG9yIFxcY3Igb3IgXFxlbmQiLHQubmV4dFRva2VuKX1mb3IodmFyIG49W10saT1bbl0sYT0wO2E8ZS5sZW5ndGg7YSsrKXtmb3IodmFyIHM9ZVthXSxsPWFHKCksdT0wO3U8cy5sZW5ndGg7dSsrKWlmKCFzRyhzW3VdKSlsLmJvZHkucHVzaChzW3VdKTtlbHNle24ucHVzaChsKSx1Kz0xO3ZhciBoPW9BKHNbdV0pLnRleHQsZj1uZXcgQXJyYXkoMik7aWYoZlswXT17dHlwZToib3JkZ3JvdXAiLG1vZGU6Im1hdGgiLGJvZHk6W119LGZbMV09e3R5cGU6Im9yZGdyb3VwIixtb2RlOiJtYXRoIixib2R5OltdfSwhKCI9fC4iLmluZGV4T2YoaCk+LTEpKWlmKCI8PkFWIi5pbmRleE9mKGgpPi0xKWZvcih2YXIgZD0wO2Q8MjtkKyspe2Zvcih2YXIgcD0hMCxtPXUrMTttPHMubGVuZ3RoO20rKyl7aWYoTTNlKHNbbV0saCkpe3A9ITEsdT1tO2JyZWFrfWlmKHNHKHNbbV0pKXRocm93IG5ldyBwdCgiTWlzc2luZyBhICIraCsiIGNoYXJhY3RlciB0byBjb21wbGV0ZSBhIENEIGFycm93LiIsc1ttXSk7ZltkXS5ib2R5LnB1c2goc1ttXSl9aWYocCl0aHJvdyBuZXcgcHQoIk1pc3NpbmcgYSAiK2grIiBjaGFyYWN0ZXIgdG8gY29tcGxldGUgYSBDRCBhcnJvdy4iLHNbdV0pfWVsc2UgdGhyb3cgbmV3IHB0KCdFeHBlY3RlZCBvbmUgb2YgIjw+QVY9fC4iIGFmdGVyIEAnLHNbdV0pO3ZhciBnPUkzZShoLGYsdCkseT17dHlwZToic3R5bGluZyIsYm9keTpbZ10sbW9kZToibWF0aCIsc3R5bGU6ImRpc3BsYXkifTtuLnB1c2goeSksbD1hRygpfWElMj09PTA/bi5wdXNoKGwpOm4uc2hpZnQoKSxuPVtdLGkucHVzaChuKX10Lmd1bGxldC5lbmRHcm91cCgpLHQuZ3VsbGV0LmVuZEdyb3VwKCk7dmFyIHY9bmV3IEFycmF5KGlbMF0ubGVuZ3RoKS5maWxsKHt0eXBlOiJhbGlnbiIsYWxpZ246ImMiLHByZWdhcDouMjUscG9zdGdhcDouMjV9KTtyZXR1cm57dHlwZToiYXJyYXkiLG1vZGU6Im1hdGgiLGJvZHk6aSxhcnJheXN0cmV0Y2g6MSxhZGRKb3Q6ITAscm93R2FwczpbbnVsbF0sY29sczp2LGNvbFNlcGFyYXRpb25UeXBlOiJDRCIsaExpbmVzQmVmb3JlUm93Om5ldyBBcnJheShpLmxlbmd0aCsxKS5maWxsKFtdKX19ZnVuY3Rpb24gTTModCxlKXt2YXIgcj1SMyh0KTtpZihyJiZKdC5jb250YWlucyhYM2Usci50ZXh0KSlyZXR1cm4gcjt0aHJvdyByP25ldyBwdCgiSW52YWxpZCBkZWxpbWl0ZXIgJyIrci50ZXh0KyInIGFmdGVyICciK2UuZnVuY05hbWUrIiciLHQpOm5ldyBwdCgiSW52YWxpZCBkZWxpbWl0ZXIgdHlwZSAnIit0LnR5cGUrIiciLHQpfWZ1bmN0aW9uIGxHKHQpe2lmKCF0LmJvZHkpdGhyb3cgbmV3IEVycm9yKCJCdWc6IFRoZSBsZWZ0cmlnaHQgUGFyc2VOb2RlIHdhc24ndCBmdWxseSBwYXJzZWQuIil9ZnVuY3Rpb24gdGModCl7Zm9yKHZhcnt0eXBlOmUsbmFtZXM6cixwcm9wczpuLGhhbmRsZXI6aSxodG1sQnVpbGRlcjphLG1hdGhtbEJ1aWxkZXI6c309dCxsPXt0eXBlOmUsbnVtQXJnczpuLm51bUFyZ3N8fDAsYWxsb3dlZEluVGV4dDohMSxudW1PcHRpb25hbEFyZ3M6MCxoYW5kbGVyOml9LHU9MDt1PHIubGVuZ3RoOysrdSlpVltyW3VdXT1sO2EmJihFM1tlXT1hKSxzJiYoUzNbZV09cyl9ZnVuY3Rpb24gZmUodCxlKXthVlt0XT1lfWZ1bmN0aW9uIGNHKHQpe3ZhciBlPVtdO3QuY29uc3VtZVNwYWNlcygpO3ZhciByPXQuZmV0Y2goKS50ZXh0O2ZvcihyPT09IlxccmVsYXgiJiYodC5jb25zdW1lKCksdC5jb25zdW1lU3BhY2VzKCkscj10LmZldGNoKCkudGV4dCk7cj09PSJcXGhsaW5lInx8cj09PSJcXGhkYXNobGluZSI7KXQuY29uc3VtZSgpLGUucHVzaChyPT09IlxcaGRhc2hsaW5lIiksdC5jb25zdW1lU3BhY2VzKCkscj10LmZldGNoKCkudGV4dDtyZXR1cm4gZX1mdW5jdGlvbiBmQSh0KXtpZih0LmluZGV4T2YoImVkIik9PT0tMSlyZXR1cm4gdC5pbmRleE9mKCIqIik9PT0tMX1mdW5jdGlvbiBiaCh0LGUscil7dmFye2hza2lwQmVmb3JlQW5kQWZ0ZXI6bixhZGRKb3Q6aSxjb2xzOmEsYXJyYXlzdHJldGNoOnMsY29sU2VwYXJhdGlvblR5cGU6bCxhdXRvVGFnOnUsc2luZ2xlUm93OmgsZW1wdHlTaW5nbGVSb3c6ZixtYXhOdW1Db2xzOmQsbGVxbm86cH09ZTtpZih0Lmd1bGxldC5iZWdpbkdyb3VwKCksaHx8dC5ndWxsZXQubWFjcm9zLnNldCgiXFxjciIsIlxcXFxcXHJlbGF4IiksIXMpe3ZhciBtPXQuZ3VsbGV0LmV4cGFuZE1hY3JvQXNUZXh0KCJcXGFycmF5c3RyZXRjaCIpO2lmKG09PW51bGwpcz0xO2Vsc2UgaWYocz1wYXJzZUZsb2F0KG0pLCFzfHxzPDApdGhyb3cgbmV3IHB0KCJJbnZhbGlkIFxcYXJyYXlzdHJldGNoOiAiK20pfXQuZ3VsbGV0LmJlZ2luR3JvdXAoKTt2YXIgZz1bXSx5PVtnXSx2PVtdLHg9W10sYj11IT1udWxsP1tdOnZvaWQgMDtmdW5jdGlvbiBUKCl7dSYmdC5ndWxsZXQubWFjcm9zLnNldCgiXFxAZXFuc3ciLCIxIiwhMCl9byhULCJiZWdpblJvdyIpO2Z1bmN0aW9uIFMoKXtiJiYodC5ndWxsZXQubWFjcm9zLmdldCgiXFxkZkB0YWciKT8oYi5wdXNoKHQuc3VicGFyc2UoW25ldyBfbygiXFxkZkB0YWciKV0pKSx0Lmd1bGxldC5tYWNyb3Muc2V0KCJcXGRmQHRhZyIsdm9pZCAwLCEwKSk6Yi5wdXNoKCEhdSYmdC5ndWxsZXQubWFjcm9zLmdldCgiXFxAZXFuc3ciKT09PSIxIikpfWZvcihvKFMsImVuZFJvdyIpLFQoKSx4LnB1c2goY0codCkpOzspe3ZhciB3PXQucGFyc2VFeHByZXNzaW9uKCExLGg/IlxcZW5kIjoiXFxcXCIpO3QuZ3VsbGV0LmVuZEdyb3VwKCksdC5ndWxsZXQuYmVnaW5Hcm91cCgpLHc9e3R5cGU6Im9yZGdyb3VwIixtb2RlOnQubW9kZSxib2R5Ond9LHImJih3PXt0eXBlOiJzdHlsaW5nIixtb2RlOnQubW9kZSxzdHlsZTpyLGJvZHk6W3ddfSksZy5wdXNoKHcpO3ZhciBFPXQuZmV0Y2goKS50ZXh0O2lmKEU9PT0iJiIpe2lmKGQmJmcubGVuZ3RoPT09ZCl7aWYoaHx8bCl0aHJvdyBuZXcgcHQoIlRvbyBtYW55IHRhYiBjaGFyYWN0ZXJzOiAmIix0Lm5leHRUb2tlbik7dC5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoInRleHRFbnYiLCJUb28gZmV3IGNvbHVtbnMgc3BlY2lmaWVkIGluIHRoZSB7YXJyYXl9IGNvbHVtbiBhcmd1bWVudC4iKX10LmNvbnN1bWUoKX1lbHNlIGlmKEU9PT0iXFxlbmQiKXtTKCksZy5sZW5ndGg9PT0xJiZ3LnR5cGU9PT0ic3R5bGluZyImJncuYm9keVswXS5ib2R5Lmxlbmd0aD09PTAmJih5Lmxlbmd0aD4xfHwhZikmJnkucG9wKCkseC5sZW5ndGg8eS5sZW5ndGgrMSYmeC5wdXNoKFtdKTticmVha31lbHNlIGlmKEU9PT0iXFxcXCIpe3QuY29uc3VtZSgpO3ZhciBfPXZvaWQgMDt0Lmd1bGxldC5mdXR1cmUoKS50ZXh0IT09IiAiJiYoXz10LnBhcnNlU2l6ZUdyb3VwKCEwKSksdi5wdXNoKF8/Xy52YWx1ZTpudWxsKSxTKCkseC5wdXNoKGNHKHQpKSxnPVtdLHkucHVzaChnKSxUKCl9ZWxzZSB0aHJvdyBuZXcgcHQoIkV4cGVjdGVkICYgb3IgXFxcXCBvciBcXGNyIG9yIFxcZW5kIix0Lm5leHRUb2tlbil9cmV0dXJuIHQuZ3VsbGV0LmVuZEdyb3VwKCksdC5ndWxsZXQuZW5kR3JvdXAoKSx7dHlwZToiYXJyYXkiLG1vZGU6dC5tb2RlLGFkZEpvdDppLGFycmF5c3RyZXRjaDpzLGJvZHk6eSxjb2xzOmEscm93R2Fwczp2LGhza2lwQmVmb3JlQW5kQWZ0ZXI6bixoTGluZXNCZWZvcmVSb3c6eCxjb2xTZXBhcmF0aW9uVHlwZTpsLHRhZ3M6YixsZXFubzpwfX1mdW5jdGlvbiBkQSh0KXtyZXR1cm4gdC5zbGljZSgwLDEpPT09ImQiPyJkaXNwbGF5IjoidGV4dCJ9ZnVuY3Rpb24gcFYodCxlLHIpe2Zvcih2YXIgbj0kaSh0LGUsITEpLGk9ZS5zaXplTXVsdGlwbGllci9yLnNpemVNdWx0aXBsaWVyLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIHM9blthXS5jbGFzc2VzLmluZGV4T2YoInNpemluZyIpO3M8MD9BcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShuW2FdLmNsYXNzZXMsZS5zaXppbmdDbGFzc2VzKHIpKTpuW2FdLmNsYXNzZXNbcysxXT09PSJyZXNldC1zaXplIitlLnNpemUmJihuW2FdLmNsYXNzZXNbcysxXT0icmVzZXQtc2l6ZSIrci5zaXplKSxuW2FdLmhlaWdodCo9aSxuW2FdLmRlcHRoKj1pfXJldHVybiBGZS5tYWtlRnJhZ21lbnQobil9dmFyIFFzLF9vLHB0LGI0ZSxUNGUsdzRlLGs0ZSxFNGUsUzRlLENHLEE0ZSxfNGUsRDRlLEp0LFh5LEt5LFFsLHJBLFQzLHcwLHV1LFF5LENvLGswLHJzLFpsLFI0ZSxONGUsTTRlLEk0ZSxPNGUsUDRlLG5yLEg3LGIzLFQwLEY0ZSwkNGUsejRlLEc0ZSxWNGUsVTRlLEg0ZSxXNGUscTRlLGp6LFk0ZSxvZCxKbCxjMyxLeixSNyxqNGUsUXosWnosdzMsVzcsSzRlLERHLG5pLEV0LHZoLExHLFJHLFE0ZSxORyxsZCxaeSxxNyxaNGUsQXMsZGwsZWMsSnksZTNlLHQzZSxBbixILGl0LHJlLGtlLEhuLEl0LG5zLEUwLHJyLENpLFpzLEQzLEVlLHB1LFJlLE1HLGVHLE43LHUzLHRHLE03LGgzLGszLFd5LGYzLGxyLHRpLERhLGx1LGdoLFk3LHF5LGQzLHAzLHJHLHIzZSxMMyxmbCxuM2UsaTNlLGEzZSxzM2UsbzNlLGlBLENzLElHLGwzZSxjM2UsT0csdTNlLGgzZSxmM2UsZDNlLG0zLFBHLEJHLHAzZSxGZSxyaSxzZCxjdSxtM2UsZzNlLEZHLEUzLFMzLEMzLGdpLGZ1LHkzZSx2M2UseDNlLGIzZSwkaSxuRywkRyxUM2UsWDcsZXYsJHIsdHMsQW8sSzcsZHQsRG8sYUEsc0EsX3MseGgsdm4sR0csVkcsdzNlLGszZSxFM2UsUzNlLEMzZSxBM2UsXzNlLEQzZSxkdSxsQSxVRyxMM2UseTMsUjNlLE4zLE4zZSxhRyxzRyxNM2UscUcsWUcsUTcsWEcsUDNlLGpHLFl5LGNBLEtHLEIzZSxGM2UsUUcsTzcsUDcsWjcsdjMsJDNlLHozZSxaRyxCNyxGNywkNyxHM2UsSkcsVjNlLGVWLGp5LFUzZSxIM2UsVzNlLHRWLHEzZSxyVixuVixZM2UsaHUsb0csWDNlLHVBLGhBLGlWLGFWLEkzLHJjLGozZSxuYyxzVix1RyxvVixsVixoRyxjVixwQSxtQSxmRyxkRyx1VixLM2UsejcscEcsaFYsZlYsUzAsdHYsUTNlLFozZSxkVixKM2UsbUcsZTVlLGdHLHQ1ZSxtVixHNyxWNyx5Ryx2Ryx4RyxyNWUsYkcsVEcseWgsZ1YsbjVlLGk1ZSxhNWUsczVlLEo3LG81ZSxsNWUsQTMsZUEsYzVlLHdHLGdBLGtHLHlBLHlWLHZWLHhWLHRBLEVHLHgzLFU3LFNHLF8zLHZBLHhBLGJWLFRWLHdWLE8zLGtWLEVWLFNWLHU1ZSxBVj1OKCgpPT57InVzZSBzdHJpY3QiO1FzPWNsYXNzIHR7c3RhdGlje28odGhpcywiU291cmNlTG9jYXRpb24iKX1jb25zdHJ1Y3RvcihlLHIsbil7dGhpcy5sZXhlcj12b2lkIDAsdGhpcy5zdGFydD12b2lkIDAsdGhpcy5lbmQ9dm9pZCAwLHRoaXMubGV4ZXI9ZSx0aGlzLnN0YXJ0PXIsdGhpcy5lbmQ9bn1zdGF0aWMgcmFuZ2UoZSxyKXtyZXR1cm4gcj8hZXx8IWUubG9jfHwhci5sb2N8fGUubG9jLmxleGVyIT09ci5sb2MubGV4ZXI/bnVsbDpuZXcgdChlLmxvYy5sZXhlcixlLmxvYy5zdGFydCxyLmxvYy5lbmQpOmUmJmUubG9jfX0sX289Y2xhc3MgdHtzdGF0aWN7byh0aGlzLCJUb2tlbiIpfWNvbnN0cnVjdG9yKGUscil7dGhpcy50ZXh0PXZvaWQgMCx0aGlzLmxvYz12b2lkIDAsdGhpcy5ub2V4cGFuZD12b2lkIDAsdGhpcy50cmVhdEFzUmVsYXg9dm9pZCAwLHRoaXMudGV4dD1lLHRoaXMubG9jPXJ9cmFuZ2UoZSxyKXtyZXR1cm4gbmV3IHQocixRcy5yYW5nZSh0aGlzLGUpKX19LHB0PWNsYXNzIHR7c3RhdGlje28odGhpcywiUGFyc2VFcnJvciIpfWNvbnN0cnVjdG9yKGUscil7dGhpcy5uYW1lPXZvaWQgMCx0aGlzLnBvc2l0aW9uPXZvaWQgMCx0aGlzLmxlbmd0aD12b2lkIDAsdGhpcy5yYXdNZXNzYWdlPXZvaWQgMDt2YXIgbj0iS2FUZVggcGFyc2UgZXJyb3I6ICIrZSxpLGEscz1yJiZyLmxvYztpZihzJiZzLnN0YXJ0PD1zLmVuZCl7dmFyIGw9cy5sZXhlci5pbnB1dDtpPXMuc3RhcnQsYT1zLmVuZCxpPT09bC5sZW5ndGg/bis9IiBhdCBlbmQgb2YgaW5wdXQ6ICI6bis9IiBhdCBwb3NpdGlvbiAiKyhpKzEpKyI6ICI7dmFyIHU9bC5zbGljZShpLGEpLnJlcGxhY2UoL1teXS9nLCIkJlx1MDMzMiIpLGg7aT4xNT9oPSJcdTIwMjYiK2wuc2xpY2UoaS0xNSxpKTpoPWwuc2xpY2UoMCxpKTt2YXIgZjthKzE1PGwubGVuZ3RoP2Y9bC5zbGljZShhLGErMTUpKyJcdTIwMjYiOmY9bC5zbGljZShhKSxuKz1oK3UrZn12YXIgZD1uZXcgRXJyb3Iobik7cmV0dXJuIGQubmFtZT0iUGFyc2VFcnJvciIsZC5fX3Byb3RvX189dC5wcm90b3R5cGUsZC5wb3NpdGlvbj1pLGkhPW51bGwmJmEhPW51bGwmJihkLmxlbmd0aD1hLWkpLGQucmF3TWVzc2FnZT1lLGR9fTtwdC5wcm90b3R5cGUuX19wcm90b19fPUVycm9yLnByb3RvdHlwZTtiNGU9byhmdW5jdGlvbihlLHIpe3JldHVybiBlLmluZGV4T2YocikhPT0tMX0sImNvbnRhaW5zIiksVDRlPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gZT09PXZvaWQgMD9yOmV9LCJkZWZsdCIpLHc0ZT0vKFtBLVpdKS9nLGs0ZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UodzRlLCItJDEiKS50b0xvd2VyQ2FzZSgpfSwiaHlwaGVuYXRlIiksRTRlPXsiJiI6IiZhbXA7IiwiPiI6IiZndDsiLCI8IjoiJmx0OyIsJyInOiImcXVvdDsiLCInIjoiJiN4Mjc7In0sUzRlPS9bJj48IiddL2c7byhDNGUsImVzY2FwZSIpO0NHPW8oZnVuY3Rpb24gdChlKXtyZXR1cm4gZS50eXBlPT09Im9yZGdyb3VwInx8ZS50eXBlPT09ImNvbG9yIj9lLmJvZHkubGVuZ3RoPT09MT90KGUuYm9keVswXSk6ZTplLnR5cGU9PT0iZm9udCI/dChlLmJvZHkpOmV9LCJnZXRCYXNlRWxlbSIpLEE0ZT1vKGZ1bmN0aW9uKGUpe3ZhciByPUNHKGUpO3JldHVybiByLnR5cGU9PT0ibWF0aG9yZCJ8fHIudHlwZT09PSJ0ZXh0b3JkInx8ci50eXBlPT09ImF0b20ifSwiaXNDaGFyYWN0ZXJCb3giKSxfNGU9byhmdW5jdGlvbihlKXtpZighZSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIG5vbi1udWxsLCBidXQgZ290ICIrU3RyaW5nKGUpKTtyZXR1cm4gZX0sImFzc2VydCIpLEQ0ZT1vKGZ1bmN0aW9uKGUpe3ZhciByPS9eW1x4MDAtXHgyMF0qKFteXFwvIz9dKj8pKDp8JiMwKjU4fCYjeDAqM2F8JmNvbG9uKS9pLmV4ZWMoZSk7cmV0dXJuIHI/clsyXSE9PSI6Inx8IS9eW2EtekEtWl1bYS16QS1aMC05K1wtLl0qJC8udGVzdChyWzFdKT9udWxsOnJbMV0udG9Mb3dlckNhc2UoKToiX3JlbGF0aXZlIn0sInByb3RvY29sRnJvbVVybCIpLEp0PXtjb250YWluczpiNGUsZGVmbHQ6VDRlLGVzY2FwZTpDNGUsaHlwaGVuYXRlOms0ZSxnZXRCYXNlRWxlbTpDRyxpc0NoYXJhY3RlckJveDpBNGUscHJvdG9jb2xGcm9tVXJsOkQ0ZX0sWHk9e2Rpc3BsYXlNb2RlOnt0eXBlOiJib29sZWFuIixkZXNjcmlwdGlvbjoiUmVuZGVyIG1hdGggaW4gZGlzcGxheSBtb2RlLCB3aGljaCBwdXRzIHRoZSBtYXRoIGluIGRpc3BsYXkgc3R5bGUgKHNvIFxcaW50IGFuZCBcXHN1bSBhcmUgbGFyZ2UsIGZvciBleGFtcGxlKSwgYW5kIGNlbnRlcnMgdGhlIG1hdGggb24gdGhlIHBhZ2Ugb24gaXRzIG93biBsaW5lLiIsY2xpOiItZCwgLS1kaXNwbGF5LW1vZGUifSxvdXRwdXQ6e3R5cGU6e2VudW06WyJodG1sQW5kTWF0aG1sIiwiaHRtbCIsIm1hdGhtbCJdfSxkZXNjcmlwdGlvbjoiRGV0ZXJtaW5lcyB0aGUgbWFya3VwIGxhbmd1YWdlIG9mIHRoZSBvdXRwdXQuIixjbGk6Ii1GLCAtLWZvcm1hdCA8dHlwZT4ifSxsZXFubzp7dHlwZToiYm9vbGVhbiIsZGVzY3JpcHRpb246IlJlbmRlciBkaXNwbGF5IG1hdGggaW4gbGVxbm8gc3R5bGUgKGxlZnQtanVzdGlmaWVkIHRhZ3MpLiJ9LGZsZXFuOnt0eXBlOiJib29sZWFuIixkZXNjcmlwdGlvbjoiUmVuZGVyIGRpc3BsYXkgbWF0aCBmbHVzaCBsZWZ0LiJ9LHRocm93T25FcnJvcjp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMCxjbGk6Ii10LCAtLW5vLXRocm93LW9uLWVycm9yIixjbGlEZXNjcmlwdGlvbjoiUmVuZGVyIGVycm9ycyAoaW4gdGhlIGNvbG9yIGdpdmVuIGJ5IC0tZXJyb3ItY29sb3IpIGluc3RlYWQgb2YgdGhyb3dpbmcgYSBQYXJzZUVycm9yIGV4Y2VwdGlvbiB3aGVuIGVuY291bnRlcmluZyBhbiBlcnJvci4ifSxlcnJvckNvbG9yOnt0eXBlOiJzdHJpbmciLGRlZmF1bHQ6IiNjYzAwMDAiLGNsaToiLWMsIC0tZXJyb3ItY29sb3IgPGNvbG9yPiIsY2xpRGVzY3JpcHRpb246IkEgY29sb3Igc3RyaW5nIGdpdmVuIGluIHRoZSBmb3JtYXQgJ3JnYicgb3IgJ3JyZ2diYicgKG5vICMpLiBUaGlzIG9wdGlvbiBkZXRlcm1pbmVzIHRoZSBjb2xvciBvZiBlcnJvcnMgcmVuZGVyZWQgYnkgdGhlIC10IG9wdGlvbi4iLGNsaVByb2Nlc3NvcjpvKHQ9PiIjIit0LCJjbGlQcm9jZXNzb3IiKX0sbWFjcm9zOnt0eXBlOiJvYmplY3QiLGNsaToiLW0sIC0tbWFjcm8gPGRlZj4iLGNsaURlc2NyaXB0aW9uOiJEZWZpbmUgY3VzdG9tIG1hY3JvIG9mIHRoZSBmb3JtICdcXGZvbzpleHBhbnNpb24nICh1c2UgbXVsdGlwbGUgLW0gYXJndW1lbnRzIGZvciBtdWx0aXBsZSBtYWNyb3MpLiIsY2xpRGVmYXVsdDpbXSxjbGlQcm9jZXNzb3I6bygodCxlKT0+KGUucHVzaCh0KSxlKSwiY2xpUHJvY2Vzc29yIil9LG1pblJ1bGVUaGlja25lc3M6e3R5cGU6Im51bWJlciIsZGVzY3JpcHRpb246IlNwZWNpZmllcyBhIG1pbmltdW0gdGhpY2tuZXNzLCBpbiBlbXMsIGZvciBmcmFjdGlvbiBsaW5lcywgYFxcc3FydGAgdG9wIGxpbmVzLCBge2FycmF5fWAgdmVydGljYWwgbGluZXMsIGBcXGhsaW5lYCwgYFxcaGRhc2hsaW5lYCwgYFxcdW5kZXJsaW5lYCwgYFxcb3ZlcmxpbmVgLCBhbmQgdGhlIGJvcmRlcnMgb2YgYFxcZmJveGAsIGBcXGJveGVkYCwgYW5kIGBcXGZjb2xvcmJveGAuIixwcm9jZXNzb3I6byh0PT5NYXRoLm1heCgwLHQpLCJwcm9jZXNzb3IiKSxjbGk6Ii0tbWluLXJ1bGUtdGhpY2tuZXNzIDxzaXplPiIsY2xpUHJvY2Vzc29yOnBhcnNlRmxvYXR9LGNvbG9ySXNUZXh0Q29sb3I6e3R5cGU6ImJvb2xlYW4iLGRlc2NyaXB0aW9uOiJNYWtlcyBcXGNvbG9yIGJlaGF2ZSBsaWtlIExhVGVYJ3MgMi1hcmd1bWVudCBcXHRleHRjb2xvciwgaW5zdGVhZCBvZiBMYVRlWCdzIG9uZS1hcmd1bWVudCBcXGNvbG9yIG1vZGUgY2hhbmdlLiIsY2xpOiItYiwgLS1jb2xvci1pcy10ZXh0LWNvbG9yIn0sc3RyaWN0Ont0eXBlOlt7ZW51bTpbIndhcm4iLCJpZ25vcmUiLCJlcnJvciJdfSwiYm9vbGVhbiIsImZ1bmN0aW9uIl0sZGVzY3JpcHRpb246IlR1cm4gb24gc3RyaWN0IC8gTGFUZVggZmFpdGhmdWxuZXNzIG1vZGUsIHdoaWNoIHRocm93cyBhbiBlcnJvciBpZiB0aGUgaW5wdXQgdXNlcyBmZWF0dXJlcyB0aGF0IGFyZSBub3Qgc3VwcG9ydGVkIGJ5IExhVGVYLiIsY2xpOiItUywgLS1zdHJpY3QiLGNsaURlZmF1bHQ6ITF9LHRydXN0Ont0eXBlOlsiYm9vbGVhbiIsImZ1bmN0aW9uIl0sZGVzY3JpcHRpb246IlRydXN0IHRoZSBpbnB1dCwgZW5hYmxpbmcgYWxsIEhUTUwgZmVhdHVyZXMgc3VjaCBhcyBcXHVybC4iLGNsaToiLVQsIC0tdHJ1c3QifSxtYXhTaXplOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MS8wLGRlc2NyaXB0aW9uOiJJZiBub24temVybywgYWxsIHVzZXItc3BlY2lmaWVkIHNpemVzLCBlLmcuIGluIFxccnVsZXs1MDBlbX17NTAwZW19LCB3aWxsIGJlIGNhcHBlZCB0byBtYXhTaXplIGVtcy4gT3RoZXJ3aXNlLCBlbGVtZW50cyBhbmQgc3BhY2VzIGNhbiBiZSBhcmJpdHJhcmlseSBsYXJnZSIscHJvY2Vzc29yOm8odD0+TWF0aC5tYXgoMCx0KSwicHJvY2Vzc29yIiksY2xpOiItcywgLS1tYXgtc2l6ZSA8bj4iLGNsaVByb2Nlc3NvcjpwYXJzZUludH0sbWF4RXhwYW5kOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MWUzLGRlc2NyaXB0aW9uOiJMaW1pdCB0aGUgbnVtYmVyIG9mIG1hY3JvIGV4cGFuc2lvbnMgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIsIHRvIHByZXZlbnQgZS5nLiBpbmZpbml0ZSBtYWNybyBsb29wcy4gSWYgc2V0IHRvIEluZmluaXR5LCB0aGUgbWFjcm8gZXhwYW5kZXIgd2lsbCB0cnkgdG8gZnVsbHkgZXhwYW5kIGFzIGluIExhVGVYLiIscHJvY2Vzc29yOm8odD0+TWF0aC5tYXgoMCx0KSwicHJvY2Vzc29yIiksY2xpOiItZSwgLS1tYXgtZXhwYW5kIDxuPiIsY2xpUHJvY2Vzc29yOm8odD0+dD09PSJJbmZpbml0eSI/MS8wOnBhcnNlSW50KHQpLCJjbGlQcm9jZXNzb3IiKX0sZ2xvYmFsR3JvdXA6e3R5cGU6ImJvb2xlYW4iLGNsaTohMX19O28oTDRlLCJnZXREZWZhdWx0VmFsdWUiKTtLeT1jbGFzc3tzdGF0aWN7byh0aGlzLCJTZXR0aW5ncyIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuZGlzcGxheU1vZGU9dm9pZCAwLHRoaXMub3V0cHV0PXZvaWQgMCx0aGlzLmxlcW5vPXZvaWQgMCx0aGlzLmZsZXFuPXZvaWQgMCx0aGlzLnRocm93T25FcnJvcj12b2lkIDAsdGhpcy5lcnJvckNvbG9yPXZvaWQgMCx0aGlzLm1hY3Jvcz12b2lkIDAsdGhpcy5taW5SdWxlVGhpY2tuZXNzPXZvaWQgMCx0aGlzLmNvbG9ySXNUZXh0Q29sb3I9dm9pZCAwLHRoaXMuc3RyaWN0PXZvaWQgMCx0aGlzLnRydXN0PXZvaWQgMCx0aGlzLm1heFNpemU9dm9pZCAwLHRoaXMubWF4RXhwYW5kPXZvaWQgMCx0aGlzLmdsb2JhbEdyb3VwPXZvaWQgMCxlPWV8fHt9O2Zvcih2YXIgciBpbiBYeSlpZihYeS5oYXNPd25Qcm9wZXJ0eShyKSl7dmFyIG49WHlbcl07dGhpc1tyXT1lW3JdIT09dm9pZCAwP24ucHJvY2Vzc29yP24ucHJvY2Vzc29yKGVbcl0pOmVbcl06TDRlKG4pfX1yZXBvcnROb25zdHJpY3QoZSxyLG4pe3ZhciBpPXRoaXMuc3RyaWN0O2lmKHR5cGVvZiBpPT0iZnVuY3Rpb24iJiYoaT1pKGUscixuKSksISghaXx8aT09PSJpZ25vcmUiKSl7aWYoaT09PSEwfHxpPT09ImVycm9yIil0aHJvdyBuZXcgcHQoIkxhVGVYLWluY29tcGF0aWJsZSBpbnB1dCBhbmQgc3RyaWN0IG1vZGUgaXMgc2V0IHRvICdlcnJvcic6ICIrKHIrIiBbIitlKyJdIiksbik7aT09PSJ3YXJuIj90eXBlb2YgY29uc29sZTwidSImJmNvbnNvbGUud2FybigiTGFUZVgtaW5jb21wYXRpYmxlIGlucHV0IGFuZCBzdHJpY3QgbW9kZSBpcyBzZXQgdG8gJ3dhcm4nOiAiKyhyKyIgWyIrZSsiXSIpKTp0eXBlb2YgY29uc29sZTwidSImJmNvbnNvbGUud2FybigiTGFUZVgtaW5jb21wYXRpYmxlIGlucHV0IGFuZCBzdHJpY3QgbW9kZSBpcyBzZXQgdG8gIisoInVucmVjb2duaXplZCAnIitpKyInOiAiK3IrIiBbIitlKyJdIikpfX11c2VTdHJpY3RCZWhhdmlvcihlLHIsbil7dmFyIGk9dGhpcy5zdHJpY3Q7aWYodHlwZW9mIGk9PSJmdW5jdGlvbiIpdHJ5e2k9aShlLHIsbil9Y2F0Y2h7aT0iZXJyb3IifXJldHVybiFpfHxpPT09Imlnbm9yZSI/ITE6aT09PSEwfHxpPT09ImVycm9yIj8hMDppPT09Indhcm4iPyh0eXBlb2YgY29uc29sZTwidSImJmNvbnNvbGUud2FybigiTGFUZVgtaW5jb21wYXRpYmxlIGlucHV0IGFuZCBzdHJpY3QgbW9kZSBpcyBzZXQgdG8gJ3dhcm4nOiAiKyhyKyIgWyIrZSsiXSIpKSwhMSk6KHR5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS53YXJuKCJMYVRlWC1pbmNvbXBhdGlibGUgaW5wdXQgYW5kIHN0cmljdCBtb2RlIGlzIHNldCB0byAiKygidW5yZWNvZ25pemVkICciK2krIic6ICIrcisiIFsiK2UrIl0iKSksITEpfWlzVHJ1c3RlZChlKXtpZihlLnVybCYmIWUucHJvdG9jb2wpe3ZhciByPUp0LnByb3RvY29sRnJvbVVybChlLnVybCk7aWYocj09bnVsbClyZXR1cm4hMTtlLnByb3RvY29sPXJ9dmFyIG49dHlwZW9mIHRoaXMudHJ1c3Q9PSJmdW5jdGlvbiI/dGhpcy50cnVzdChlKTp0aGlzLnRydXN0O3JldHVybiEhbn19LFFsPWNsYXNze3N0YXRpY3tvKHRoaXMsIlN0eWxlIil9Y29uc3RydWN0b3IoZSxyLG4pe3RoaXMuaWQ9dm9pZCAwLHRoaXMuc2l6ZT12b2lkIDAsdGhpcy5jcmFtcGVkPXZvaWQgMCx0aGlzLmlkPWUsdGhpcy5zaXplPXIsdGhpcy5jcmFtcGVkPW59c3VwKCl7cmV0dXJuIFpsW1I0ZVt0aGlzLmlkXV19c3ViKCl7cmV0dXJuIFpsW040ZVt0aGlzLmlkXV19ZnJhY051bSgpe3JldHVybiBabFtNNGVbdGhpcy5pZF1dfWZyYWNEZW4oKXtyZXR1cm4gWmxbSTRlW3RoaXMuaWRdXX1jcmFtcCgpe3JldHVybiBabFtPNGVbdGhpcy5pZF1dfXRleHQoKXtyZXR1cm4gWmxbUDRlW3RoaXMuaWRdXX1pc1RpZ2h0KCl7cmV0dXJuIHRoaXMuc2l6ZT49Mn19LHJBPTAsVDM9MSx3MD0yLHV1PTMsUXk9NCxDbz01LGswPTYscnM9NyxabD1bbmV3IFFsKHJBLDAsITEpLG5ldyBRbChUMywwLCEwKSxuZXcgUWwodzAsMSwhMSksbmV3IFFsKHV1LDEsITApLG5ldyBRbChReSwyLCExKSxuZXcgUWwoQ28sMiwhMCksbmV3IFFsKGswLDMsITEpLG5ldyBRbChycywzLCEwKV0sUjRlPVtReSxDbyxReSxDbyxrMCxycyxrMCxyc10sTjRlPVtDbyxDbyxDbyxDbyxycyxycyxycyxyc10sTTRlPVt3MCx1dSxReSxDbyxrMCxycyxrMCxyc10sSTRlPVt1dSx1dSxDbyxDbyxycyxycyxycyxyc10sTzRlPVtUMyxUMyx1dSx1dSxDbyxDbyxycyxyc10sUDRlPVtyQSxUMyx3MCx1dSx3MCx1dSx3MCx1dV0sbnI9e0RJU1BMQVk6WmxbckFdLFRFWFQ6WmxbdzBdLFNDUklQVDpabFtReV0sU0NSSVBUU0NSSVBUOlpsW2swXX0sSDc9W3tuYW1lOiJsYXRpbiIsYmxvY2tzOltbMjU2LDU5MV0sWzc2OCw4NzldXX0se25hbWU6ImN5cmlsbGljIixibG9ja3M6W1sxMDI0LDEyNzldXX0se25hbWU6ImFybWVuaWFuIixibG9ja3M6W1sxMzI4LDE0MjNdXX0se25hbWU6ImJyYWhtaWMiLGJsb2NrczpbWzIzMDQsNDI1NV1dfSx7bmFtZToiZ2VvcmdpYW4iLGJsb2NrczpbWzQyNTYsNDM1MV1dfSx7bmFtZToiY2prIixibG9ja3M6W1sxMjI4OCwxMjU0M10sWzE5OTY4LDQwODc5XSxbNjUyODAsNjUzNzZdXX0se25hbWU6Imhhbmd1bCIsYmxvY2tzOltbNDQwMzIsNTUyMTVdXX1dO28oQjRlLCJzY3JpcHRGcm9tQ29kZXBvaW50Iik7YjM9W107SDcuZm9yRWFjaCh0PT50LmJsb2Nrcy5mb3JFYWNoKGU9PmIzLnB1c2goLi4uZSkpKTtvKEFHLCJzdXBwb3J0ZWRDb2RlcG9pbnQiKTtUMD04MCxGNGU9byhmdW5jdGlvbihlLHIpe3JldHVybiJNOTUsIisoNjIyK2UrcikrYApjLTIuNywwLC03LjE3LC0yLjcsLTEzLjUsLThjLTUuOCwtNS4zLC05LjUsLTEwLC05LjUsLTE0CmMwLC0yLDAuMywtMy4zLDEsLTRjMS4zLC0yLjcsMjMuODMsLTIwLjcsNjcuNSwtNTQKYzQ0LjIsLTMzLjMsNjUuOCwtNTAuMyw2Ni41LC01MWMxLjMsLTEuMywzLC0yLDUsLTJjNC43LDAsOC43LDMuMywxMiwxMApzMTczLDM3OCwxNzMsMzc4YzAuNywwLDM1LjMsLTcxLDEwNCwtMjEzYzY4LjcsLTE0MiwxMzcuNSwtMjg1LDIwNi41LC00MjkKYzY5LC0xNDQsMTA0LjUsLTIxNy43LDEwNi41LC0yMjEKbGArZS8yLjA3NSsiIC0iK2UrYApjNS4zLC05LjMsMTIsLTE0LDIwLC0xNApINDAwMDAwdmArKDQwK2UpK2BIODQ1LjI3MjQKcy0yMjUuMjcyLDQ2NywtMjI1LjI3Miw0NjdzLTIzNSw0ODYsLTIzNSw0ODZjLTIuNyw0LjcsLTksNywtMTksNwpjLTYsMCwtMTAsLTEsLTEyLC0zcy0xOTQsLTQyMiwtMTk0LC00MjJzLTY1LDQ3LC02NSw0N3oKTWArKDgzNCtlKSsiICIrcisiaDQwMDAwMHYiKyg0MCtlKSsiaC00MDAwMDB6In0sInNxcnRNYWluIiksJDRlPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4iTTI2MywiKyg2MDErZStyKStgYzAuNywwLDE4LDM5LjcsNTIsMTE5CmMzNCw3OS4zLDY4LjE2NywxNTguNywxMDIuNSwyMzhjMzQuMyw3OS4zLDUxLjgsMTE5LjMsNTIuNSwxMjAKYzM0MCwtNzA0LjcsNTEwLjcsLTEwNjAuMyw1MTIsLTEwNjcKbGArZS8yLjA4NCsiIC0iK2UrYApjNC43LC03LjMsMTEsLTExLDE5LC0xMQpINDAwMDB2YCsoNDArZSkrYEgxMDEyLjMKcy0yNzEuMyw1NjcsLTI3MS4zLDU2N2MtMzguNyw4MC43LC04NCwxNzUsLTEzNiwyODNjLTUyLDEwOCwtODkuMTY3LDE4NS4zLC0xMTEuNSwyMzIKYy0yMi4zLDQ2LjcsLTMzLjgsNzAuMywtMzQuNSw3MWMtNC43LDQuNywtMTIuMyw3LC0yMyw3cy0xMiwtMSwtMTIsLTEKcy0xMDksLTI1MywtMTA5LC0yNTNjLTcyLjcsLTE2OCwtMTA5LjMsLTI1MiwtMTEwLC0yNTJjLTEwLjcsOCwtMjIsMTYuNywtMzQsMjYKYy0yMiwxNy4zLC0zMy4zLDI2LC0zNCwyNnMtMjYsLTI2LC0yNiwtMjZzNzYsLTU5LDc2LC01OXM3NiwtNjAsNzYsLTYwegpNYCsoMTAwMStlKSsiICIrcisiaDQwMDAwMHYiKyg0MCtlKSsiaC00MDAwMDB6In0sInNxcnRTaXplMSIpLHo0ZT1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIk05ODMgIisoMTArZStyKStgCmxgK2UvMy4xMysiIC0iK2UrYApjNCwtNi43LDEwLC0xMCwxOCwtMTAgSDQwMDAwMHZgKyg0MCtlKStgCkgxMDEzLjFzLTgzLjQsMjY4LC0yNjQuMSw4NDBjLTE4MC43LDU3MiwtMjc3LDg3Ni4zLC0yODksOTEzYy00LjcsNC43LC0xMi43LDcsLTI0LDcKcy0xMiwwLC0xMiwwYy0xLjMsLTMuMywtMy43LC0xMS43LC03LC0yNWMtMzUuMywtMTI1LjMsLTEwNi43LC0zNzMuMywtMjE0LC03NDQKYy0xMCwxMiwtMjEsMjUsLTMzLDM5cy0zMiwzOSwtMzIsMzljLTYsLTUuMywtMTUsLTE0LC0yNywtMjZzMjUsLTMwLDI1LC0zMApjMjYuNywtMzIuNyw1MiwtNjMsNzYsLTkxczUyLC02MCw1MiwtNjBzMjA4LDcyMiwyMDgsNzIyCmM1NiwtMTc1LjMsMTI2LjMsLTM5Ny4zLDIxMSwtNjY2Yzg0LjcsLTI2OC43LDE1My44LC00ODguMiwyMDcuNSwtNjU4LjUKYzUzLjcsLTE3MC4zLDg0LjUsLTI2Ni44LDkyLjUsLTI4OS41egpNYCsoMTAwMStlKSsiICIrcisiaDQwMDAwMHYiKyg0MCtlKSsiaC00MDAwMDB6In0sInNxcnRTaXplMiIpLEc0ZT1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIk00MjQsIisoMjM5OCtlK3IpK2AKYy0xLjMsLTAuNywtMzguNSwtMTcyLC0xMTEuNSwtNTE0Yy03MywtMzQyLC0xMDkuOCwtNTEzLjMsLTExMC41LC01MTQKYzAsLTIsLTEwLjcsMTQuMywtMzIsNDljLTQuNyw3LjMsLTkuOCwxNS43LC0xNS41LDI1Yy01LjcsOS4zLC05LjgsMTYsLTEyLjUsMjAKcy01LDcsLTUsN2MtNCwtMy4zLC04LjMsLTcuNywtMTMsLTEzcy0xMywtMTMsLTEzLC0xM3M3NiwtMTIyLDc2LC0xMjJzNzcsLTEyMSw3NywtMTIxCnMyMDksOTY4LDIwOSw5NjhjMCwtMiw4NC43LC0zNjEuNywyNTQsLTEwNzljMTY5LjMsLTcxNy4zLDI1NC43LC0xMDc3LjcsMjU2LC0xMDgxCmxgK2UvNC4yMjMrIiAtIitlK2BjNCwtNi43LDEwLC0xMCwxOCwtMTAgSDQwMDAwMAp2YCsoNDArZSkrYEgxMDE0LjYKcy04Ny4zLDM3OC43LC0yNzIuNiwxMTY2Yy0xODUuMyw3ODcuMywtMjc5LjMsMTE4Mi4zLC0yODIsMTE4NQpjLTIsNiwtMTAsOSwtMjQsOQpjLTgsMCwtMTIsLTAuNywtMTIsLTJ6IE1gKygxMDAxK2UpKyIgIityK2AKaDQwMDAwMHZgKyg0MCtlKSsiaC00MDAwMDB6In0sInNxcnRTaXplMyIpLFY0ZT1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIk00NzMsIisoMjcxMytlK3IpK2AKYzMzOS4zLC0xNzk5LjMsNTA5LjMsLTI3MDAsNTEwLC0yNzAyIGxgK2UvNS4yOTgrIiAtIitlK2AKYzMuMywtNy4zLDkuMywtMTEsMTgsLTExIEg0MDAwMDB2YCsoNDArZSkrYEgxMDE3LjcKcy05MC41LDQ3OCwtMjc2LjIsMTQ2NmMtMTg1LjcsOTg4LC0yNzkuNSwxNDgzLC0yODEuNSwxNDg1Yy0yLDYsLTEwLDksLTI0LDkKYy04LDAsLTEyLC0wLjcsLTEyLC0yYzAsLTEuMywtNS4zLC0zMiwtMTYsLTkyYy01MC43LC0yOTMuMywtMTE5LjcsLTY5My4zLC0yMDcsLTEyMDAKYzAsLTEuMywtNS4zLDguNywtMTYsMzBjLTEwLjcsMjEuMywtMjEuMyw0Mi43LC0zMiw2NHMtMTYsMzMsLTE2LDMzcy0yNiwtMjYsLTI2LC0yNgpzNzYsLTE1Myw3NiwtMTUzczc3LC0xNTEsNzcsLTE1MWMwLjcsMC43LDM1LjcsMjAyLDEwNSw2MDRjNjcuMyw0MDAuNywxMDIsNjAyLjcsMTA0LAo2MDZ6TWArKDEwMDErZSkrIiAiK3IrImg0MDAwMDB2IisoNDArZSkrIkgxMDE3Ljd6In0sInNxcnRTaXplNCIpLFU0ZT1vKGZ1bmN0aW9uKGUpe3ZhciByPWUvMjtyZXR1cm4iTTQwMDAwMCAiK2UrIiBIMCBMIityKyIgMCBsNjUgNDUgTDE0NSAiKyhlLTgwKSsiIEg0MDAwMDB6In0sInBoYXNlUGF0aCIpLEg0ZT1vKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1uLTU0LXItZTtyZXR1cm4iTTcwMiAiKyhlK3IpKyJINDAwMDAwIisoNDArZSkrYApINzQydmAraStgbC00IDQtNCA0Yy0uNjY3LjcgLTIgMS41LTQgMi41cy00LjE2NyAxLjgzMy02LjUgMi41LTUuNSAxLTkuNSAxCmgtMTJsLTI4LTg0Yy0xNi42NjctNTItOTYuNjY3IC0yOTQuMzMzLTI0MC03MjdsLTIxMiAtNjQzIC04NSAxNzAKYy00LTMuMzMzLTguMzMzLTcuNjY3LTEzIC0xM2wtMTMtMTNsNzctMTU1IDc3LTE1NmM2NiAxOTkuMzMzIDEzOSA0MTkuNjY3CjIxOSA2NjEgbDIxOCA2NjF6TTcwMiBgK3IrIkg0MDAwMDB2IisoNDArZSkrIkg3NDJ6In0sInNxcnRUYWxsIiksVzRlPW8oZnVuY3Rpb24oZSxyLG4pe3I9MWUzKnI7dmFyIGk9IiI7c3dpdGNoKGUpe2Nhc2Uic3FydE1haW4iOmk9RjRlKHIsVDApO2JyZWFrO2Nhc2Uic3FydFNpemUxIjppPSQ0ZShyLFQwKTticmVhaztjYXNlInNxcnRTaXplMiI6aT16NGUocixUMCk7YnJlYWs7Y2FzZSJzcXJ0U2l6ZTMiOmk9RzRlKHIsVDApO2JyZWFrO2Nhc2Uic3FydFNpemU0IjppPVY0ZShyLFQwKTticmVhaztjYXNlInNxcnRUYWxsIjppPUg0ZShyLFQwLG4pfXJldHVybiBpfSwic3FydFBhdGgiKSxxNGU9byhmdW5jdGlvbihlLHIpe3N3aXRjaChlKXtjYXNlIlx1MjM5QyI6cmV0dXJuIk0yOTEgMCBINDE3IFYiK3IrIiBIMjkxeiBNMjkxIDAgSDQxNyBWIityKyIgSDI5MXoiO2Nhc2UiXHUyMjIzIjpyZXR1cm4iTTE0NSAwIEgxODggViIrcisiIEgxNDV6IE0xNDUgMCBIMTg4IFYiK3IrIiBIMTQ1eiI7Y2FzZSJcdTIyMjUiOnJldHVybiJNMTQ1IDAgSDE4OCBWIityKyIgSDE0NXogTTE0NSAwIEgxODggViIrcisiIEgxNDV6IisoIk0zNjcgMCBINDEwIFYiK3IrIiBIMzY3eiBNMzY3IDAgSDQxMCBWIityKyIgSDM2N3oiKTtjYXNlIlx1MjM5RiI6cmV0dXJuIk00NTcgMCBINTgzIFYiK3IrIiBINDU3eiBNNDU3IDAgSDU4MyBWIityKyIgSDQ1N3oiO2Nhc2UiXHUyM0EyIjpyZXR1cm4iTTMxOSAwIEg0MDMgViIrcisiIEgzMTl6IE0zMTkgMCBINDAzIFYiK3IrIiBIMzE5eiI7Y2FzZSJcdTIzQTUiOnJldHVybiJNMjYzIDAgSDM0NyBWIityKyIgSDI2M3ogTTI2MyAwIEgzNDcgViIrcisiIEgyNjN6IjtjYXNlIlx1MjNBQSI6cmV0dXJuIk0zODQgMCBINTA0IFYiK3IrIiBIMzg0eiBNMzg0IDAgSDUwNCBWIityKyIgSDM4NHoiO2Nhc2UiXHUyM0QwIjpyZXR1cm4iTTMxMiAwIEgzNTUgViIrcisiIEgzMTJ6IE0zMTIgMCBIMzU1IFYiK3IrIiBIMzEyeiI7Y2FzZSJcdTIwMTYiOnJldHVybiJNMjU3IDAgSDMwMCBWIityKyIgSDI1N3ogTTI1NyAwIEgzMDAgViIrcisiIEgyNTd6IisoIk00NzggMCBINTIxIFYiK3IrIiBINDc4eiBNNDc4IDAgSDUyMSBWIityKyIgSDQ3OHoiKTtkZWZhdWx0OnJldHVybiIifX0sImlubmVyUGF0aCIpLGp6PXtkb3VibGVsZWZ0YXJyb3c6YE0yNjIgMTU3CmwxMC0xMGMzNC0zNiA2Mi43LTc3IDg2LTEyMyAzLjMtOCA1LTEzLjMgNS0xNiAwLTUuMy02LjctOC0yMC04LTcuMwogMC0xMi4yLjUtMTQuNSAxLjUtMi4zIDEtNC44IDQuNS03LjUgMTAuNS00OS4zIDk3LjMtMTIxLjcgMTY5LjMtMjE3IDIxNi0yOAogMTQtNTcuMyAyNS04OCAzMy02LjcgMi0xMSAzLjgtMTMgNS41LTIgMS43LTMgNC4yLTMgNy41czEgNS44IDMgNy41CmMyIDEuNyA2LjMgMy41IDEzIDUuNSA2OCAxNy4zIDEyOC4yIDQ3LjggMTgwLjUgOTEuNSA1Mi4zIDQzLjcgOTMuOCA5Ni4yIDEyNC41CiAxNTcuNSA5LjMgOCAxNS4zIDEyLjMgMTggMTNoNmMxMi0uNyAxOC00IDE4LTEwIDAtMi0xLjctNy01LTE1LTIzLjMtNDYtNTItODcKLTg2LTEyM2wtMTAtMTBoMzk5NzM4di00MEgyMThjMzI4IDAgMCAwIDAgMGwtMTAtOGMtMjYuNy0yMC02NS43LTQzLTExNy02OSAyLjcKLTIgNi0zLjcgMTAtNSAzNi43LTE2IDcyLjMtMzcuMyAxMDctNjRsMTAtOGgzOTk3ODJ2LTQwegptOCAwdjQwaDM5OTczMHYtNDB6bTAgMTk0djQwaDM5OTczMHYtNDB6YCxkb3VibGVyaWdodGFycm93OmBNMzk5NzM4IDM5MmwKLTEwIDEwYy0zNCAzNi02Mi43IDc3LTg2IDEyMy0zLjMgOC01IDEzLjMtNSAxNiAwIDUuMyA2LjcgOCAyMCA4IDcuMyAwIDEyLjItLjUKIDE0LjUtMS41IDIuMy0xIDQuOC00LjUgNy41LTEwLjUgNDkuMy05Ny4zIDEyMS43LTE2OS4zIDIxNy0yMTYgMjgtMTQgNTcuMy0yNSA4OAotMzMgNi43LTIgMTEtMy44IDEzLTUuNSAyLTEuNyAzLTQuMiAzLTcuNXMtMS01LjgtMy03LjVjLTItMS43LTYuMy0zLjUtMTMtNS41LTY4Ci0xNy4zLTEyOC4yLTQ3LjgtMTgwLjUtOTEuNS01Mi4zLTQzLjctOTMuOC05Ni4yLTEyNC41LTE1Ny41LTkuMy04LTE1LjMtMTIuMy0xOAotMTNoLTZjLTEyIC43LTE4IDQtMTggMTAgMCAyIDEuNyA3IDUgMTUgMjMuMyA0NiA1MiA4NyA4NiAxMjNsMTAgMTBIMHY0MGgzOTk3ODIKYy0zMjggMCAwIDAgMCAwbDEwIDhjMjYuNyAyMCA2NS43IDQzIDExNyA2OS0yLjcgMi02IDMuNy0xMCA1LTM2LjcgMTYtNzIuMyAzNy4zCi0xMDcgNjRsLTEwIDhIMHY0MHpNMCAxNTd2NDBoMzk5NzMwdi00MHptMCAxOTR2NDBoMzk5NzMwdi00MHpgLGxlZnRhcnJvdzpgTTQwMDAwMCAyNDFIMTEwbDMtM2M2OC43LTUyLjcgMTEzLjctMTIwCiAxMzUtMjAyIDQtMTQuNyA2LTIzIDYtMjUgMC03LjMtNy0xMS0yMS0xMS04IDAtMTMuMi44LTE1LjUgMi41LTIuMyAxLjctNC4yIDUuOAotNS41IDEyLjUtMS4zIDQuNy0yLjcgMTAuMy00IDE3LTEyIDQ4LjctMzQuOCA5Mi02OC41IDEzMFM2NS4zIDIyOC4zIDE4IDI0NwpjLTEwIDQtMTYgNy43LTE4IDExIDAgOC43IDYgMTQuMyAxOCAxNyA0Ny4zIDE4LjcgODcuOCA0NyAxMjEuNSA4NVMxOTYgNDQxLjMgMjA4CiA0OTBjLjcgMiAxLjMgNSAyIDlzMS4yIDYuNyAxLjUgOGMuMyAxLjMgMSAzLjMgMiA2czIuMiA0LjUgMy41IDUuNWMxLjMgMSAzLjMKIDEuOCA2IDIuNXM2IDEgMTAgMWMxNCAwIDIxLTMuNyAyMS0xMSAwLTItMi0xMC4zLTYtMjUtMjAtNzkuMy02NS0xNDYuNy0xMzUtMjAyCiBsLTMtM2gzOTk4OTB6TTEwMCAyNDF2NDBoMzk5OTAwdi00MHpgLGxlZnRicmFjZTpgTTYgNTQ4bC02LTZ2LTM1bDYtMTFjNTYtMTA0IDEzNS4zLTE4MS4zIDIzOC0yMzIgNTcuMy0yOC43IDExNwotNDUgMTc5LTUwaDM5OTU3N3YxMjBINDAzYy00My4zIDctODEgMTUtMTEzIDI2LTEwMC43IDMzLTE3OS43IDkxLTIzNyAxNzQtMi43CiA1LTYgOS0xMCAxMy0uNyAxLTcuMyAxLTIwIDFINnpgLGxlZnRicmFjZXVuZGVyOmBNMCA2bDYtNmgxN2MxMi42ODggMCAxOS4zMTMuMyAyMCAxIDQgNCA3LjMxMyA4LjMgMTAgMTMKIDM1LjMxMyA1MS4zIDgwLjgxMyA5My44IDEzNi41IDEyNy41IDU1LjY4OCAzMy43IDExNy4xODggNTUuOCAxODQuNSA2Ni41LjY4OAogMCAyIC4zIDQgMSAxOC42ODggMi43IDc2IDQuMyAxNzIgNWgzOTk0NTB2MTIwSDQyOWwtNi0xYy0xMjQuNjg4LTgtMjM1LTYxLjcKLTMzMS0xNjFDNjAuNjg3IDEzOC43IDMyLjMxMiA5OS4zIDcgNTRMMCA0MVY2emAsbGVmdGdyb3VwOmBNNDAwMDAwIDgwCkg0MzVDNjQgODAgMTY4LjMgMjI5LjQgMjEgMjYwYy01LjkgMS4yLTE4IDAtMTggMC0yIDAtMy0xLTMtM3YtMzhDNzYgNjEgMjU3IDAKIDQzNSAwaDM5OTU2NXpgLGxlZnRncm91cHVuZGVyOmBNNDAwMDAwIDI2MgpINDM1QzY0IDI2MiAxNjguMyAxMTIuNiAyMSA4MmMtNS45LTEuMi0xOCAwLTE4IDAtMiAwLTMgMS0zIDN2MzhjNzYgMTU4IDI1NyAyMTkKIDQzNSAyMTloMzk5NTY1emAsbGVmdGhhcnBvb246YE0wIDI2N2MuNyA1LjMgMyAxMCA3IDE0aDM5OTk5M3YtNDBIOTNjMy4zCi0zLjMgMTAuMi05LjUgMjAuNS0xOC41czE3LjgtMTUuOCAyMi41LTIwLjVjNTAuNy01MiA4OC0xMTAuMyAxMTItMTc1IDQtMTEuMyA1Ci0xOC4zIDMtMjEtMS4zLTQtNy4zLTYtMTgtNi04IDAtMTMgLjctMTUgMnMtNC43IDYuNy04IDE2Yy00MiA5OC43LTEwNy4zIDE3NC43Ci0xOTYgMjI4LTYuNyA0LjctMTAuNyA4LTEyIDEwLTEuMyAyLTIgNS43LTIgMTF6bTEwMC0yNnY0MGgzOTk5MDB2LTQwemAsbGVmdGhhcnBvb25wbHVzOmBNMCAyNjdjLjcgNS4zIDMgMTAgNyAxNGgzOTk5OTN2LTQwSDkzYzMuMy0zLjMgMTAuMi05LjUKIDIwLjUtMTguNXMxNy44LTE1LjggMjIuNS0yMC41YzUwLjctNTIgODgtMTEwLjMgMTEyLTE3NSA0LTExLjMgNS0xOC4zIDMtMjEtMS4zCi00LTcuMy02LTE4LTYtOCAwLTEzIC43LTE1IDJzLTQuNyA2LjctOCAxNmMtNDIgOTguNy0xMDcuMyAxNzQuNy0xOTYgMjI4LTYuNyA0LjcKLTEwLjcgOC0xMiAxMC0xLjMgMi0yIDUuNy0yIDExem0xMDAtMjZ2NDBoMzk5OTAwdi00MHpNMCA0MzV2NDBoNDAwMDAwdi00MHoKbTAgMHY0MGg0MDAwMDB2LTQwemAsbGVmdGhhcnBvb25kb3duOmBNNyAyNDFjLTQgNC02LjMzMyA4LjY2Ny03IDE0IDAgNS4zMzMuNjY3IDkgMiAxMXM1LjMzMwogNS4zMzMgMTIgMTBjOTAuNjY3IDU0IDE1NiAxMzAgMTk2IDIyOCAzLjMzMyAxMC42NjcgNi4zMzMgMTYuMzMzIDkgMTcgMiAuNjY3IDUKIDEgOSAxaDVjMTAuNjY3IDAgMTYuNjY3LTIgMTgtNiAyLTIuNjY3IDEtOS42NjctMy0yMS0zMi04Ny4zMzMtODIuNjY3LTE1Ny42NjcKLTE1Mi0yMTFsLTMtM2gzOTk5MDd2LTQwek05MyAyODEgSDQwMDAwMCB2LTQwTDcgMjQxemAsbGVmdGhhcnBvb25kb3ducGx1czpgTTcgNDM1Yy00IDQtNi4zIDguNy03IDE0IDAgNS4zLjcgOSAyIDExczUuMyA1LjMgMTIKIDEwYzkwLjcgNTQgMTU2IDEzMCAxOTYgMjI4IDMuMyAxMC43IDYuMyAxNi4zIDkgMTcgMiAuNyA1IDEgOSAxaDVjMTAuNyAwIDE2LjcKLTIgMTgtNiAyLTIuNyAxLTkuNy0zLTIxLTMyLTg3LjMtODIuNy0xNTcuNy0xNTItMjExbC0zLTNoMzk5OTA3di00MEg3em05MyAwCnY0MGgzOTk5MDB2LTQwek0wIDI0MXY0MGgzOTk5MDB2LTQwem0wIDB2NDBoMzk5OTAwdi00MHpgLGxlZnRob29rOmBNNDAwMDAwIDI4MSBIMTAzcy0zMy0xMS4yLTYxLTMzLjVTMCAxOTcuMyAwIDE2NHMxNC4yLTYxLjIgNDIuNQotODMuNUM3MC44IDU4LjIgMTA0IDQ3IDE0MiA0NyBjMTYuNyAwIDI1IDYuNyAyNSAyMCAwIDEyLTguNyAxOC43LTI2IDIwLTQwIDMuMwotNjguNyAxNS43LTg2IDM3LTEwIDEyLTE1IDI1LjMtMTUgNDAgMCAyMi43IDkuOCA0MC43IDI5LjUgNTQgMTkuNyAxMy4zIDQzLjUgMjEKIDcxLjUgMjNoMzk5ODU5ek0xMDMgMjgxdi00MGgzOTk4OTd2NDB6YCxsZWZ0bGluZXNlZ21lbnQ6YE00MCAyODEgVjQyOCBIMCBWOTQgSDQwIFYyNDEgSDQwMDAwMCB2NDB6Ck00MCAyODEgVjQyOCBIMCBWOTQgSDQwIFYyNDEgSDQwMDAwMCB2NDB6YCxsZWZ0bWFwc3RvOmBNNDAgMjgxIFY0NDhIMFY3NEg0MFYyNDFINDAwMDAwdjQwegpNNDAgMjgxIFY0NDhIMFY3NEg0MFYyNDFINDAwMDAwdjQwemAsbGVmdFRvRnJvbTpgTTAgMTQ3aDQwMDAwMHY0MEgwem0wIDIxNGM2OCA0MCAxMTUuNyA5NS43IDE0MyAxNjdoMjJjMTUuMyAwIDIzCi0uMyAyMy0xIDAtMS4zLTUuMy0xMy43LTE2LTM3LTE4LTM1LjMtNDEuMy02OS03MC0xMDFsLTctOGgzOTk5MDV2LTQwSDk1bDctOApjMjguNy0zMiA1Mi02NS43IDcwLTEwMSAxMC43LTIzLjMgMTYtMzUuNyAxNi0zNyAwLS43LTcuNy0xLTIzLTFoLTIyQzExNS43IDI2NS4zCiA2OCAzMjEgMCAzNjF6bTAtMTc0di00MGgzOTk5MDB2NDB6bTEwMCAxNTR2NDBoMzk5OTAwdi00MHpgLGxvbmdlcXVhbDpgTTAgNTAgaDQwMDAwMCB2NDBIMHogbTAgMTk0aDQwMDAwdjQwSDB6Ck0wIDUwIGg0MDAwMDAgdjQwSDB6IG0wIDE5NGg0MDAwMHY0MEgwemAsbWlkYnJhY2U6YE0yMDA0MjggMzM0CmMtMTAwLjctOC4zLTE5NS4zLTQ0LTI4MC0xMDgtNTUuMy00Mi0xMDEuNy05My0xMzktMTUzbC05LTE0Yy0yLjcgNC01LjcgOC43LTkgMTQKLTUzLjMgODYuNy0xMjMuNyAxNTMtMjExIDE5OS02Ni43IDM2LTEzNy4zIDU2LjMtMjEyIDYySDBWMjE0aDE5OTU2OGMxNzguMy0xMS43CiAzMTEuNy03OC4zIDQwMy0yMDEgNi04IDkuNy0xMiAxMS0xMiAuNy0uNyA2LjctMSAxOC0xczE3LjMuMyAxOCAxYzEuMyAwIDUgNCAxMQogMTIgNDQuNyA1OS4zIDEwMS4zIDEwNi4zIDE3MCAxNDFzMTQ1LjMgNTQuMyAyMjkgNjBoMTk5NTcydjEyMHpgLG1pZGJyYWNldW5kZXI6YE0xOTk1NzIgMjE0CmMxMDAuNyA4LjMgMTk1LjMgNDQgMjgwIDEwOCA1NS4zIDQyIDEwMS43IDkzIDEzOSAxNTNsOSAxNGMyLjctNCA1LjctOC43IDktMTQKIDUzLjMtODYuNyAxMjMuNy0xNTMgMjExLTE5OSA2Ni43LTM2IDEzNy4zLTU2LjMgMjEyLTYyaDE5OTU2OHYxMjBIMjAwNDMyYy0xNzguMwogMTEuNy0zMTEuNyA3OC4zLTQwMyAyMDEtNiA4LTkuNyAxMi0xMSAxMi0uNy43LTYuNyAxLTE4IDFzLTE3LjMtLjMtMTgtMWMtMS4zIDAKLTUtNC0xMS0xMi00NC43LTU5LjMtMTAxLjMtMTA2LjMtMTcwLTE0MXMtMTQ1LjMtNTQuMy0yMjktNjBIMFYyMTR6YCxvaWludFNpemUxOmBNNTEyLjYgNzEuNmMyNzIuNiAwIDMyMC4zIDEwNi44IDMyMC4zIDE3OC4yIDAgNzAuOC00Ny43IDE3Ny42Ci0zMjAuMyAxNzcuNlMxOTMuMSAzMjAuNiAxOTMuMSAyNDkuOGMwLTcxLjQgNDYuOS0xNzguMiAzMTkuNS0xNzguMnoKbTM2OC4xIDE3OC4yYzAtODYuNC02MC45LTIxNS40LTM2OC4xLTIxNS40LTMwNi40IDAtMzY3LjMgMTI5LTM2Ny4zIDIxNS40IDAgODUuOAo2MC45IDIxNC44IDM2Ny4zIDIxNC44IDMwNy4yIDAgMzY4LjEtMTI5IDM2OC4xLTIxNC44emAsb2lpbnRTaXplMjpgTTc1Ny44IDEwMC4xYzM4NC43IDAgNDUxLjEgMTM3LjYgNDUxLjEgMjMwIDAgOTEuMy02Ni40IDIyOC44Ci00NTEuMSAyMjguOC0zODYuMyAwLTQ1Mi43LTEzNy41LTQ1Mi43LTIyOC44IDAtOTIuNCA2Ni40LTIzMCA0NTIuNy0yMzB6Cm01MDIuNCAyMzBjMC0xMTEuMi04Mi40LTI3Ny4yLTUwMi40LTI3Ny4ycy01MDQgMTY2LTUwNCAyNzcuMgpjMCAxMTAgODQgMjc2IDUwNCAyNzZzNTAyLjQtMTY2IDUwMi40LTI3NnpgLG9paWludFNpemUxOmBNNjgxLjQgNzEuNmM0MDguOSAwIDQ4MC41IDEwNi44IDQ4MC41IDE3OC4yIDAgNzAuOC03MS42IDE3Ny42Ci00ODAuNSAxNzcuNlMyMDIuMSAzMjAuNiAyMDIuMSAyNDkuOGMwLTcxLjQgNzAuNS0xNzguMiA0NzkuMy0xNzguMnoKbTUyNS44IDE3OC4yYzAtODYuNC04Ni44LTIxNS40LTUyNS43LTIxNS40LTQzNy45IDAtNTI0LjcgMTI5LTUyNC43IDIxNS40IDAKODUuOCA4Ni44IDIxNC44IDUyNC43IDIxNC44IDQzOC45IDAgNTI1LjctMTI5IDUyNS43LTIxNC44emAsb2lpaW50U2l6ZTI6YE0xMDIxLjIgNTNjNjAzLjYgMCA3MDcuOCAxNjUuOCA3MDcuOCAyNzcuMiAwIDExMC0xMDQuMiAyNzUuOAotNzA3LjggMjc1LjgtNjA2IDAtNzEwLjItMTY1LjgtNzEwLjItMjc1LjhDMzExIDIxOC44IDQxNS4yIDUzIDEwMjEuMiA1M3oKbTc3MC40IDI3Ny4xYzAtMTMxLjItMTI2LjQtMzI3LjYtNzcwLjUtMzI3LjZTMjQ4LjQgMTk4LjkgMjQ4LjQgMzMwLjEKYzAgMTMwIDEyOC44IDMyNi40IDc3Mi43IDMyNi40czc3MC41LTE5Ni40IDc3MC41LTMyNi40emAscmlnaHRhcnJvdzpgTTAgMjQxdjQwaDM5OTg5MWMtNDcuMyAzNS4zLTg0IDc4LTExMCAxMjgKLTE2LjcgMzItMjcuNyA2My43LTMzIDk1IDAgMS4zLS4yIDIuNy0uNSA0LS4zIDEuMy0uNSAyLjMtLjUgMyAwIDcuMyA2LjcgMTEgMjAKIDExIDggMCAxMy4yLS44IDE1LjUtMi41IDIuMy0xLjcgNC4yLTUuNSA1LjUtMTEuNSAyLTEzLjMgNS43LTI3IDExLTQxIDE0LjctNDQuNwogMzktODQuNSA3My0xMTkuNXM3My43LTYwLjIgMTE5LTc1LjVjNi0yIDktNS43IDktMTFzLTMtOS05LTExYy00NS4zLTE1LjMtODUKLTQwLjUtMTE5LTc1LjVzLTU4LjMtNzQuOC03My0xMTkuNWMtNC43LTE0LTguMy0yNy4zLTExLTQwLTEuMy02LjctMy4yLTEwLjgtNS41Ci0xMi41LTIuMy0xLjctNy41LTIuNS0xNS41LTIuNS0xNCAwLTIxIDMuNy0yMSAxMSAwIDIgMiAxMC4zIDYgMjUgMjAuNyA4My4zIDY3CiAxNTEuNyAxMzkgMjA1em0wIDB2NDBoMzk5OTAwdi00MHpgLHJpZ2h0YnJhY2U6YE00MDAwMDAgNTQybAotNiA2aC0xN2MtMTIuNyAwLTE5LjMtLjMtMjAtMS00LTQtNy4zLTguMy0xMC0xMy0zNS4zLTUxLjMtODAuOC05My44LTEzNi41LTEyNy41CnMtMTE3LjItNTUuOC0xODQuNS02Ni41Yy0uNyAwLTItLjMtNC0xLTE4LjctMi43LTc2LTQuMy0xNzItNUgwVjIxNGgzOTk1NzFsNiAxCmMxMjQuNyA4IDIzNSA2MS43IDMzMSAxNjEgMzEuMyAzMy4zIDU5LjcgNzIuNyA4NSAxMThsNyAxM3YzNXpgLHJpZ2h0YnJhY2V1bmRlcjpgTTM5OTk5NCAwbDYgNnYzNWwtNiAxMWMtNTYgMTA0LTEzNS4zIDE4MS4zLTIzOCAyMzItNTcuMwogMjguNy0xMTcgNDUtMTc5IDUwSC0zMDBWMjE0aDM5OTg5N2M0My4zLTcgODEtMTUgMTEzLTI2IDEwMC43LTMzIDE3OS43LTkxIDIzNwotMTc0IDIuNy01IDYtOSAxMC0xMyAuNy0xIDcuMy0xIDIwLTFoMTd6YCxyaWdodGdyb3VwOmBNMCA4MGgzOTk1NjVjMzcxIDAgMjY2LjcgMTQ5LjQgNDE0IDE4MCA1LjkgMS4yIDE4IDAgMTggMCAyIDAKIDMtMSAzLTN2LTM4Yy03Ni0xNTgtMjU3LTIxOS00MzUtMjE5SDB6YCxyaWdodGdyb3VwdW5kZXI6YE0wIDI2MmgzOTk1NjVjMzcxIDAgMjY2LjctMTQ5LjQgNDE0LTE4MCA1LjktMS4yIDE4IDAgMTgKIDAgMiAwIDMgMSAzIDN2MzhjLTc2IDE1OC0yNTcgMjE5LTQzNSAyMTlIMHpgLHJpZ2h0aGFycG9vbjpgTTAgMjQxdjQwaDM5OTk5M2M0LjctNC43IDctOS4zIDctMTQgMC05LjMKLTMuNy0xNS4zLTExLTE4LTkyLjctNTYuNy0xNTktMTMzLjctMTk5LTIzMS0zLjMtOS4zLTYtMTQuNy04LTE2LTItMS4zLTctMi0xNS0yCi0xMC43IDAtMTYuNyAyLTE4IDYtMiAyLjctMSA5LjcgMyAyMSAxNS4zIDQyIDM2LjcgODEuOCA2NCAxMTkuNSAyNy4zIDM3LjcgNTgKIDY5LjIgOTIgOTQuNXptMCAwdjQwaDM5OTkwMHYtNDB6YCxyaWdodGhhcnBvb25wbHVzOmBNMCAyNDF2NDBoMzk5OTkzYzQuNy00LjcgNy05LjMgNy0xNCAwLTkuMy0zLjctMTUuMy0xMQotMTgtOTIuNy01Ni43LTE1OS0xMzMuNy0xOTktMjMxLTMuMy05LjMtNi0xNC43LTgtMTYtMi0xLjMtNy0yLTE1LTItMTAuNyAwLTE2LjcKIDItMTggNi0yIDIuNy0xIDkuNyAzIDIxIDE1LjMgNDIgMzYuNyA4MS44IDY0IDExOS41IDI3LjMgMzcuNyA1OCA2OS4yIDkyIDk0LjV6Cm0wIDB2NDBoMzk5OTAwdi00MHogbTEwMCAxOTR2NDBoMzk5OTAwdi00MHptMCAwdjQwaDM5OTkwMHYtNDB6YCxyaWdodGhhcnBvb25kb3duOmBNMzk5NzQ3IDUxMWMwIDcuMyA2LjcgMTEgMjAgMTEgOCAwIDEzLS44IDE1LTIuNXM0LjctNi44CiA4LTE1LjVjNDAtOTQgOTkuMy0xNjYuMyAxNzgtMjE3IDEzLjMtOCAyMC4zLTEyLjMgMjEtMTMgNS4zLTMuMyA4LjUtNS44IDkuNQotNy41IDEtMS43IDEuNS01LjIgMS41LTEwLjVzLTIuMy0xMC4zLTctMTVIMHY0MGgzOTk5MDhjLTM0IDI1LjMtNjQuNyA1Ny05MiA5NQotMjcuMyAzOC00OC43IDc3LjctNjQgMTE5LTMuMyA4LjctNSAxNC01IDE2ek0wIDI0MXY0MGgzOTk5MDB2LTQwemAscmlnaHRoYXJwb29uZG93bnBsdXM6YE0zOTk3NDcgNzA1YzAgNy4zIDYuNyAxMSAyMCAxMSA4IDAgMTMtLjgKIDE1LTIuNXM0LjctNi44IDgtMTUuNWM0MC05NCA5OS4zLTE2Ni4zIDE3OC0yMTcgMTMuMy04IDIwLjMtMTIuMyAyMS0xMyA1LjMtMy4zCiA4LjUtNS44IDkuNS03LjUgMS0xLjcgMS41LTUuMiAxLjUtMTAuNXMtMi4zLTEwLjMtNy0xNUgwdjQwaDM5OTkwOGMtMzQgMjUuMwotNjQuNyA1Ny05MiA5NS0yNy4zIDM4LTQ4LjcgNzcuNy02NCAxMTktMy4zIDguNy01IDE0LTUgMTZ6TTAgNDM1djQwaDM5OTkwMHYtNDB6Cm0wLTE5NHY0MGg0MDAwMDB2LTQwem0wIDB2NDBoNDAwMDAwdi00MHpgLHJpZ2h0aG9vazpgTTM5OTg1OSAyNDFjLTc2NCAwIDAgMCAwIDAgNDAtMy4zIDY4LjctMTUuNyA4Ni0zNyAxMC0xMiAxNS0yNS4zCiAxNS00MCAwLTIyLjctOS44LTQwLjctMjkuNS01NC0xOS43LTEzLjMtNDMuNS0yMS03MS41LTIzLTE3LjMtMS4zLTI2LTgtMjYtMjAgMAotMTMuMyA4LjctMjAgMjYtMjAgMzggMCA3MSAxMS4yIDk5IDMzLjUgMCAwIDcgNS42IDIxIDE2LjcgMTQgMTEuMiAyMSAzMy41IDIxCiA2Ni44cy0xNCA2MS4yLTQyIDgzLjVjLTI4IDIyLjMtNjEgMzMuNS05OSAzMy41TDAgMjQxeiBNMCAyODF2LTQwaDM5OTg1OXY0MHpgLHJpZ2h0bGluZXNlZ21lbnQ6YE0zOTk5NjAgMjQxIFY5NCBoNDAgVjQyOCBoLTQwIFYyODEgSDAgdi00MHoKTTM5OTk2MCAyNDEgVjk0IGg0MCBWNDI4IGgtNDAgVjI4MSBIMCB2LTQwemAscmlnaHRUb0Zyb206YE00MDAwMDAgMTY3Yy03MC43LTQyLTExOC05Ny43LTE0Mi0xNjdoLTIzYy0xNS4zIDAtMjMgLjMtMjMKIDEgMCAxLjMgNS4zIDEzLjcgMTYgMzcgMTggMzUuMyA0MS4zIDY5IDcwIDEwMWw3IDhIMHY0MGgzOTk5MDVsLTcgOGMtMjguNyAzMgotNTIgNjUuNy03MCAxMDEtMTAuNyAyMy4zLTE2IDM1LjctMTYgMzcgMCAuNyA3LjcgMSAyMyAxaDIzYzI0LTY5LjMgNzEuMy0xMjUgMTQyCi0xNjd6IE0xMDAgMTQ3djQwaDM5OTkwMHYtNDB6TTAgMzQxdjQwaDM5OTkwMHYtNDB6YCx0d29oZWFkbGVmdGFycm93OmBNMCAxNjdjNjggNDAKIDExNS43IDk1LjcgMTQzIDE2N2gyMmMxNS4zIDAgMjMtLjMgMjMtMSAwLTEuMy01LjMtMTMuNy0xNi0zNy0xOC0zNS4zLTQxLjMtNjkKLTcwLTEwMWwtNy04aDEyNWw5IDdjNTAuNyAzOS4zIDg1IDg2IDEwMyAxNDBoNDZjMC00LjctNi4zLTE4LjctMTktNDItMTgtMzUuMwotNDAtNjcuMy02Ni05NmwtOS05aDM5OTcxNnYtNDBIMjg0bDktOWMyNi0yOC43IDQ4LTYwLjcgNjYtOTYgMTIuNy0yMy4zMzMgMTkKLTM3LjMzMyAxOS00MmgtNDZjLTE4IDU0LTUyLjMgMTAwLjctMTAzIDE0MGwtOSA3SDk1bDctOGMyOC43LTMyIDUyLTY1LjcgNzAtMTAxCiAxMC43LTIzLjMzMyAxNi0zNS43IDE2LTM3IDAtLjctNy43LTEtMjMtMWgtMjJDMTE1LjcgNzEuMyA2OCAxMjcgMCAxNjd6YCx0d29oZWFkcmlnaHRhcnJvdzpgTTQwMDAwMCAxNjcKYy02OC00MC0xMTUuNy05NS43LTE0My0xNjdoLTIyYy0xNS4zIDAtMjMgLjMtMjMgMSAwIDEuMyA1LjMgMTMuNyAxNiAzNyAxOCAzNS4zCiA0MS4zIDY5IDcwIDEwMWw3IDhoLTEyNWwtOS03Yy01MC43LTM5LjMtODUtODYtMTAzLTE0MGgtNDZjMCA0LjcgNi4zIDE4LjcgMTkgNDIKIDE4IDM1LjMgNDAgNjcuMyA2NiA5Nmw5IDlIMHY0MGgzOTk3MTZsLTkgOWMtMjYgMjguNy00OCA2MC43LTY2IDk2LTEyLjcgMjMuMzMzCi0xOSAzNy4zMzMtMTkgNDJoNDZjMTgtNTQgNTIuMy0xMDAuNyAxMDMtMTQwbDktN2gxMjVsLTcgOGMtMjguNyAzMi01MiA2NS43LTcwCiAxMDEtMTAuNyAyMy4zMzMtMTYgMzUuNy0xNiAzNyAwIC43IDcuNyAxIDIzIDFoMjJjMjcuMy03MS4zIDc1LTEyNyAxNDMtMTY3emAsdGlsZGUxOmBNMjAwIDU1LjUzOGMtNzcgMC0xNjggNzMuOTUzLTE3NyA3My45NTMtMyAwLTcKLTIuMTc1LTktNS40MzdMMiA5N2MtMS0yLTItNC0yLTYgMC00IDItNyA1LTlsMjAtMTJDMTE2IDEyIDE3MSAwIDIwNyAwYzg2IDAKIDExNCA2OCAxOTEgNjggNzggMCAxNjgtNjggMTc3LTY4IDQgMCA3IDIgOSA1bDEyIDE5YzEgMi4xNzUgMiA0LjM1IDIgNi41MjUgMAogNC4zNS0yIDcuNjEzLTUgOS43ODhsLTE5IDEzLjA1Yy05MiA2My4wNzctMTE2LjkzNyA3NS4zMDgtMTgzIDc2LjEyOAotNjguMjY3Ljg0Ny0xMTMtNzMuOTUyLTE5MS03My45NTJ6YCx0aWxkZTI6YE0zNDQgNTUuMjY2Yy0xNDIgMC0zMDAuNjM4IDgxLjMxNi0zMTEuNSA4Ni40MTgKLTguMDEgMy43NjItMjIuNSAxMC45MS0yMy41IDUuNTYyTDEgMTIwYy0xLTItMS0zLTEtNCAwLTUgMy05IDgtMTBsMTguNC05QzE2MC45CiAzMS45IDI4MyAwIDM1OCAwYzE0OCAwIDE4OCAxMjIgMzMxIDEyMnMzMTQtOTcgMzI2LTk3YzQgMCA4IDIgMTAgN2w3IDIxLjExNApjMSAyLjE0IDEgMy4yMSAxIDQuMjggMCA1LjM0Ny0zIDkuNjI2LTcgMTAuNjk2bC0yMi4zIDEyLjYyMkM4NTIuNiAxNTguMzcyIDc1MQogMTgxLjQ3NiA2NzYgMTgxLjQ3NmMtMTQ5IDAtMTg5LTEyNi4yMS0zMzItMTI2LjIxemAsdGlsZGUzOmBNNzg2IDU5QzQ1NyA1OSAzMiAxNzUuMjQyIDEzIDE3NS4yNDJjLTYgMC0xMC0zLjQ1NwotMTEtMTAuMzdMLjE1IDEzOGMtMS03IDMtMTIgMTAtMTNsMTkuMi02LjRDMzc4LjQgNDAuNyA2MzQuMyAwIDgwNC4zIDBjMzM3IDAKIDQxMS44IDE1NyA3NDYuOCAxNTcgMzI4IDAgNzU0LTExMiA3NzMtMTEyIDUgMCAxMCAzIDExIDlsMSAxNC4wNzVjMSA4LjA2Ni0uNjk3CiAxNi41OTUtNi42OTcgMTcuNDkybC0yMS4wNTIgNy4zMWMtMzY3LjkgOTguMTQ2LTYwOS4xNSAxMjIuNjk2LTc3OC4xNSAxMjIuNjk2CiAtMzM4IDAtNDA5LTE1Ni41NzMtNzQ0LTE1Ni41NzN6YCx0aWxkZTQ6YE03ODYgNThDNDU3IDU4IDMyIDE3Ny40ODcgMTMgMTc3LjQ4N2MtNiAwLTEwLTMuMzQ1Ci0xMS0xMC4wMzVMLjE1IDE0M2MtMS03IDMtMTIgMTAtMTNsMjItNi43QzM4MS4yIDM1IDYzNy4xNSAwIDgwNy4xNSAwYzMzNyAwIDQwOQogMTc3IDc0NCAxNzcgMzI4IDAgNzU0LTEyNyA3NzMtMTI3IDUgMCAxMCAzIDExIDlsMSAxNC43OTRjMSA3LjgwNS0zIDEzLjM4LTkKIDE0LjQ5NWwtMjAuNyA1LjU3NGMtMzY2Ljg1IDk5Ljc5LTYwNy4zIDEzOS4zNzItNzc2LjMgMTM5LjM3Mi0zMzggMC00MDkKIC0xNzUuMjM2LTc0NC0xNzUuMjM2emAsdmVjOmBNMzc3IDIwYzAtNS4zMzMgMS44MzMtMTAgNS41LTE0UzM5MSAwIDM5NyAwYzQuNjY3IDAgOC42NjcgMS42NjcgMTIgNQozLjMzMyAyLjY2NyA2LjY2NyA5IDEwIDE5IDYuNjY3IDI0LjY2NyAyMC4zMzMgNDMuNjY3IDQxIDU3IDcuMzMzIDQuNjY3IDExCjEwLjY2NyAxMSAxOCAwIDYtMSAxMC0zIDEycy02LjY2NyA1LTE0IDljLTI4LjY2NyAxNC42NjctNTMuNjY3IDM1LjY2Ny03NSA2MwotMS4zMzMgMS4zMzMtMy4xNjcgMy41LTUuNSA2LjVzLTQgNC44MzMtNSA1LjVjLTEgLjY2Ny0yLjUgMS4zMzMtNC41IDJzLTQuMzMzIDEKLTcgMWMtNC42NjcgMC05LjE2Ny0xLjgzMy0xMy41LTUuNVMzMzcgMTg0IDMzNyAxNzhjMC0xMi42NjcgMTUuNjY3LTMyLjMzMyA0Ny01OQpIMjEzbC0xNzEtMWMtOC42NjctNi0xMy0xMi4zMzMtMTMtMTkgMC00LjY2NyA0LjMzMy0xMS4zMzMgMTMtMjBoMzU5CmMtMTYtMjUuMzMzLTI0LTQ1LTI0LTU5emAsd2lkZWhhdDE6YE01MjkgMGg1bDUxOSAxMTVjNSAxIDkgNSA5IDEwIDAgMS0xIDItMSAzbC00IDIyCmMtMSA1LTUgOS0xMSA5aC0yTDUzMiA2NyAxOSAxNTloLTJjLTUgMC05LTQtMTEtOWwtNS0yMmMtMS02IDItMTIgOC0xM3pgLHdpZGVoYXQyOmBNMTE4MSAwaDJsMTE3MSAxNzZjNiAwIDEwIDUgMTAgMTFsLTIgMjNjLTEgNi01IDEwCi0xMSAxMGgtMUwxMTgyIDY3IDE1IDIyMGgtMWMtNiAwLTEwLTQtMTEtMTBsLTItMjNjLTEtNiA0LTExIDEwLTExemAsd2lkZWhhdDM6YE0xMTgxIDBoMmwxMTcxIDIzNmM2IDAgMTAgNSAxMCAxMWwtMiAyM2MtMSA2LTUgMTAKLTExIDEwaC0xTDExODIgNjcgMTUgMjgwaC0xYy02IDAtMTAtNC0xMS0xMGwtMi0yM2MtMS02IDQtMTEgMTAtMTF6YCx3aWRlaGF0NDpgTTExODEgMGgybDExNzEgMjk2YzYgMCAxMCA1IDEwIDExbC0yIDIzYy0xIDYtNSAxMAotMTEgMTBoLTFMMTE4MiA2NyAxNSAzNDBoLTFjLTYgMC0xMC00LTExLTEwbC0yLTIzYy0xLTYgNC0xMSAxMC0xMXpgLHdpZGVjaGVjazE6YE01MjksMTU5aDVsNTE5LC0xMTVjNSwtMSw5LC01LDksLTEwYzAsLTEsLTEsLTIsLTEsLTNsLTQsLTIyYy0xLAotNSwtNSwtOSwtMTEsLTloLTJsLTUxMiw5MmwtNTEzLC05MmgtMmMtNSwwLC05LDQsLTExLDlsLTUsMjJjLTEsNiwyLDEyLDgsMTN6YCx3aWRlY2hlY2syOmBNMTE4MSwyMjBoMmwxMTcxLC0xNzZjNiwwLDEwLC01LDEwLC0xMWwtMiwtMjNjLTEsLTYsLTUsLTEwLAotMTEsLTEwaC0xbC0xMTY4LDE1M2wtMTE2NywtMTUzaC0xYy02LDAsLTEwLDQsLTExLDEwbC0yLDIzYy0xLDYsNCwxMSwxMCwxMXpgLHdpZGVjaGVjazM6YE0xMTgxLDI4MGgybDExNzEsLTIzNmM2LDAsMTAsLTUsMTAsLTExbC0yLC0yM2MtMSwtNiwtNSwtMTAsCi0xMSwtMTBoLTFsLTExNjgsMjEzbC0xMTY3LC0yMTNoLTFjLTYsMCwtMTAsNCwtMTEsMTBsLTIsMjNjLTEsNiw0LDExLDEwLDExemAsd2lkZWNoZWNrNDpgTTExODEsMzQwaDJsMTE3MSwtMjk2YzYsMCwxMCwtNSwxMCwtMTFsLTIsLTIzYy0xLC02LC01LC0xMCwKLTExLC0xMGgtMWwtMTE2OCwyNzNsLTExNjcsLTI3M2gtMWMtNiwwLC0xMCw0LC0xMSwxMGwtMiwyM2MtMSw2LDQsMTEsMTAsMTF6YCxiYXJhYm92ZWxlZnRhcnJvdzpgTTQwMDAwMCA2MjBoLTM5OTg5MGwzIC0zYzY4LjcgLTUyLjcgMTEzLjcgLTEyMCAxMzUgLTIwMgpjNCAtMTQuNyA2IC0yMyA2IC0yNWMwIC03LjMgLTcgLTExIC0yMSAtMTFjLTggMCAtMTMuMiAwLjggLTE1LjUgMi41CmMtMi4zIDEuNyAtNC4yIDUuOCAtNS41IDEyLjVjLTEuMyA0LjcgLTIuNyAxMC4zIC00IDE3Yy0xMiA0OC43IC0zNC44IDkyIC02OC41IDEzMApzLTc0LjIgNjYuMyAtMTIxLjUgODVjLTEwIDQgLTE2IDcuNyAtMTggMTFjMCA4LjcgNiAxNC4zIDE4IDE3YzQ3LjMgMTguNyA4Ny44IDQ3CjEyMS41IDg1czU2LjUgODEuMyA2OC41IDEzMGMwLjcgMiAxLjMgNSAyIDlzMS4yIDYuNyAxLjUgOGMwLjMgMS4zIDEgMy4zIDIgNgpzMi4yIDQuNSAzLjUgNS41YzEuMyAxIDMuMyAxLjggNiAyLjVzNiAxIDEwIDFjMTQgMCAyMSAtMy43IDIxIC0xMQpjMCAtMiAtMiAtMTAuMyAtNiAtMjVjLTIwIC03OS4zIC02NSAtMTQ2LjcgLTEzNSAtMjAybC0zIC0zaDM5OTg5MHoKTTEwMCA2MjB2NDBoMzk5OTAwdi00MHogTTAgMjQxdjQwaDM5OTkwMHYtNDB6TTAgMjQxdjQwaDM5OTkwMHYtNDB6YCxyaWdodGFycm93YWJvdmViYXI6YE0wIDI0MXY0MGgzOTk4OTFjLTQ3LjMgMzUuMy04NCA3OC0xMTAgMTI4LTE2LjcgMzIKLTI3LjcgNjMuNy0zMyA5NSAwIDEuMy0uMiAyLjctLjUgNC0uMyAxLjMtLjUgMi4zLS41IDMgMCA3LjMgNi43IDExIDIwIDExIDggMAoxMy4yLS44IDE1LjUtMi41IDIuMy0xLjcgNC4yLTUuNSA1LjUtMTEuNSAyLTEzLjMgNS43LTI3IDExLTQxIDE0LjctNDQuNyAzOQotODQuNSA3My0xMTkuNXM3My43LTYwLjIgMTE5LTc1LjVjNi0yIDktNS43IDktMTFzLTMtOS05LTExYy00NS4zLTE1LjMtODUtNDAuNQotMTE5LTc1LjVzLTU4LjMtNzQuOC03My0xMTkuNWMtNC43LTE0LTguMy0yNy4zLTExLTQwLTEuMy02LjctMy4yLTEwLjgtNS41Ci0xMi41LTIuMy0xLjctNy41LTIuNS0xNS41LTIuNS0xNCAwLTIxIDMuNy0yMSAxMSAwIDIgMiAxMC4zIDYgMjUgMjAuNyA4My4zIDY3CjE1MS43IDEzOSAyMDV6bTk2IDM3OWgzOTk4OTR2NDBIMHptMCAwaDM5OTkwNHY0MEgwemAsYmFyYWJvdmVzaG9ydGxlZnRoYXJwb29uOmBNNTA3LDQzNWMtNCw0LC02LjMsOC43LC03LDE0YzAsNS4zLDAuNyw5LDIsMTEKYzEuMywyLDUuMyw1LjMsMTIsMTBjOTAuNyw1NCwxNTYsMTMwLDE5NiwyMjhjMy4zLDEwLjcsNi4zLDE2LjMsOSwxNwpjMiwwLjcsNSwxLDksMWMwLDAsNSwwLDUsMGMxMC43LDAsMTYuNywtMiwxOCwtNmMyLC0yLjcsMSwtOS43LC0zLC0yMQpjLTMyLC04Ny4zLC04Mi43LC0xNTcuNywtMTUyLC0yMTFjMCwwLC0zLC0zLC0zLC0zbDM5OTM1MSwwbDAsLTQwCmMtMzk4NTcwLDAsLTM5OTQzNywwLC0zOTk0MzcsMHogTTU5MyA0MzUgdjQwIEgzOTk1MDAgdi00MHoKTTAgMjgxIHYtNDAgSDM5OTkwOCB2NDB6IE0wIDI4MSB2LTQwIEgzOTk5MDggdjQwemAscmlnaHRoYXJwb29uYWJvdmVzaG9ydGJhcjpgTTAsMjQxIGwwLDQwYzM5OTEyNiwwLDM5OTk5MywwLDM5OTk5MywwCmM0LjcsLTQuNyw3LC05LjMsNywtMTRjMCwtOS4zLC0zLjcsLTE1LjMsLTExLC0xOGMtOTIuNywtNTYuNywtMTU5LC0xMzMuNywtMTk5LAotMjMxYy0zLjMsLTkuMywtNiwtMTQuNywtOCwtMTZjLTIsLTEuMywtNywtMiwtMTUsLTJjLTEwLjcsMCwtMTYuNywyLC0xOCw2CmMtMiwyLjcsLTEsOS43LDMsMjFjMTUuMyw0MiwzNi43LDgxLjgsNjQsMTE5LjVjMjcuMywzNy43LDU4LDY5LjIsOTIsOTQuNXoKTTAgMjQxIHY0MCBIMzk5OTA4IHYtNDB6IE0wIDQ3NSB2LTQwIEgzOTk1MDAgdjQweiBNMCA0NzUgdi00MCBIMzk5NTAwIHY0MHpgLHNob3J0YmFyYWJvdmVsZWZ0aGFycG9vbjpgTTcsNDM1Yy00LDQsLTYuMyw4LjcsLTcsMTRjMCw1LjMsMC43LDksMiwxMQpjMS4zLDIsNS4zLDUuMywxMiwxMGM5MC43LDU0LDE1NiwxMzAsMTk2LDIyOGMzLjMsMTAuNyw2LjMsMTYuMyw5LDE3YzIsMC43LDUsMSw5LAoxYzAsMCw1LDAsNSwwYzEwLjcsMCwxNi43LC0yLDE4LC02YzIsLTIuNywxLC05LjcsLTMsLTIxYy0zMiwtODcuMywtODIuNywtMTU3LjcsCi0xNTIsLTIxMWMwLDAsLTMsLTMsLTMsLTNsMzk5OTA3LDBsMCwtNDBjLTM5OTEyNiwwLC0zOTk5OTMsMCwtMzk5OTkzLDB6Ck05MyA0MzUgdjQwIEg0MDAwMDAgdi00MHogTTUwMCAyNDEgdjQwIEg0MDAwMDAgdi00MHogTTUwMCAyNDEgdjQwIEg0MDAwMDAgdi00MHpgLHNob3J0cmlnaHRoYXJwb29uYWJvdmViYXI6YE01MywyNDFsMCw0MGMzOTg1NzAsMCwzOTk0MzcsMCwzOTk0MzcsMApjNC43LC00LjcsNywtOS4zLDcsLTE0YzAsLTkuMywtMy43LC0xNS4zLC0xMSwtMThjLTkyLjcsLTU2LjcsLTE1OSwtMTMzLjcsLTE5OSwKLTIzMWMtMy4zLC05LjMsLTYsLTE0LjcsLTgsLTE2Yy0yLC0xLjMsLTcsLTIsLTE1LC0yYy0xMC43LDAsLTE2LjcsMiwtMTgsNgpjLTIsMi43LC0xLDkuNywzLDIxYzE1LjMsNDIsMzYuNyw4MS44LDY0LDExOS41YzI3LjMsMzcuNyw1OCw2OS4yLDkyLDk0LjV6Ck01MDAgMjQxIHY0MCBIMzk5NDA4IHYtNDB6IE01MDAgNDM1IHY0MCBINDAwMDAwIHYtNDB6YH0sWTRlPW8oZnVuY3Rpb24oZSxyKXtzd2l0Y2goZSl7Y2FzZSJsYnJhY2siOnJldHVybiJNNDAzIDE3NTkgVjg0IEg2NjYgVjAgSDMxOSBWMTc1OSB2IityK2AgdjE3NTkgaDM0NyB2LTg0Ckg0MDN6IE00MDMgMTc1OSBWMCBIMzE5IFYxNzU5IHZgK3IrIiB2MTc1OSBoODR6IjtjYXNlInJicmFjayI6cmV0dXJuIk0zNDcgMTc1OSBWMCBIMCBWODQgSDI2MyBWMTc1OSB2IityK2AgdjE3NTkgSDAgdjg0IEgzNDd6Ck0zNDcgMTc1OSBWMCBIMjYzIFYxNzU5IHZgK3IrIiB2MTc1OSBoODR6IjtjYXNlInZlcnQiOnJldHVybiJNMTQ1IDE1IHY1ODUgdiIrcitgIHY1ODUgYzIuNjY3LDEwLDkuNjY3LDE1LDIxLDE1CmMxMCwwLDE2LjY2NywtNSwyMCwtMTUgdi01ODUgdmArLXIrYCB2LTU4NSBjLTIuNjY3LC0xMCwtOS42NjcsLTE1LC0yMSwtMTUKYy0xMCwwLC0xNi42NjcsNSwtMjAsMTV6IE0xODggMTUgSDE0NSB2NTg1IHZgK3IrIiB2NTg1IGg0M3oiO2Nhc2UiZG91YmxldmVydCI6cmV0dXJuIk0xNDUgMTUgdjU4NSB2IityK2AgdjU4NSBjMi42NjcsMTAsOS42NjcsMTUsMjEsMTUKYzEwLDAsMTYuNjY3LC01LDIwLC0xNSB2LTU4NSB2YCstcitgIHYtNTg1IGMtMi42NjcsLTEwLC05LjY2NywtMTUsLTIxLC0xNQpjLTEwLDAsLTE2LjY2Nyw1LC0yMCwxNXogTTE4OCAxNSBIMTQ1IHY1ODUgdmArcitgIHY1ODUgaDQzegpNMzY3IDE1IHY1ODUgdmArcitgIHY1ODUgYzIuNjY3LDEwLDkuNjY3LDE1LDIxLDE1CmMxMCwwLDE2LjY2NywtNSwyMCwtMTUgdi01ODUgdmArLXIrYCB2LTU4NSBjLTIuNjY3LC0xMCwtOS42NjcsLTE1LC0yMSwtMTUKYy0xMCwwLC0xNi42NjcsNSwtMjAsMTV6IE00MTAgMTUgSDM2NyB2NTg1IHZgK3IrIiB2NTg1IGg0M3oiO2Nhc2UibGZsb29yIjpyZXR1cm4iTTMxOSA2MDIgVjAgSDQwMyBWNjAyIHYiK3IrYCB2MTcxNSBoMjYzIHY4NCBIMzE5egpNTTMxOSA2MDIgVjAgSDQwMyBWNjAyIHZgK3IrIiB2MTcxNSBIMzE5eiI7Y2FzZSJyZmxvb3IiOnJldHVybiJNMzE5IDYwMiBWMCBINDAzIFY2MDIgdiIrcitgIHYxNzk5IEgwIHYtODQgSDMxOXoKTU0zMTkgNjAyIFYwIEg0MDMgVjYwMiB2YCtyKyIgdjE3MTUgSDMxOXoiO2Nhc2UibGNlaWwiOnJldHVybiJNNDAzIDE3NTkgVjg0IEg2NjYgVjAgSDMxOSBWMTc1OSB2IityK2AgdjYwMiBoODR6Ck00MDMgMTc1OSBWMCBIMzE5IFYxNzU5IHZgK3IrIiB2NjAyIGg4NHoiO2Nhc2UicmNlaWwiOnJldHVybiJNMzQ3IDE3NTkgVjAgSDAgVjg0IEgyNjMgVjE3NTkgdiIrcitgIHY2MDIgaDg0egpNMzQ3IDE3NTkgVjAgaC04NCBWMTc1OSB2YCtyKyIgdjYwMiBoODR6IjtjYXNlImxwYXJlbiI6cmV0dXJuYE04NjMsOWMwLC0yLC0yLC01LC02LC05YzAsMCwtMTcsMCwtMTcsMGMtMTIuNywwLC0xOS4zLDAuMywtMjAsMQpjLTUuMyw1LjMsLTEwLjMsMTEsLTE1LDE3Yy0yNDIuNywyOTQuNywtMzk1LjMsNjgyLC00NTgsMTE2MmMtMjEuMywxNjMuMywtMzMuMywzNDksCi0zNiw1NTcgbDAsYCsocis4NCkrYGMwLjIsNiwwLDI2LDAsNjBjMiwxNTkuMywxMCwzMTAuNywyNCw0NTRjNTMuMyw1MjgsMjEwLAo5NDkuNyw0NzAsMTI2NWM0LjcsNiw5LjcsMTEuNywxNSwxN2MwLjcsMC43LDcsMSwxOSwxYzAsMCwxOCwwLDE4LDBjNCwtNCw2LC03LDYsLTkKYzAsLTIuNywtMy4zLC04LjcsLTEwLC0xOGMtMTM1LjMsLTE5Mi43LC0yMzUuNSwtNDE0LjMsLTMwMC41LC02NjVjLTY1LC0yNTAuNywtMTAyLjUsCi01NDQuNywtMTEyLjUsLTg4MmMtMiwtMTA0LC0zLC0xNjcsLTMsLTE4OQpsMCwtYCsocis5MikrYGMwLC0xNjIuNyw1LjcsLTMxNCwxNywtNDU0YzIwLjcsLTI3Miw2My43LC01MTMsMTI5LC03MjNjNjUuMywKLTIxMCwxNTUuMywtMzk2LjMsMjcwLC01NTljNi43LC05LjMsMTAsLTE1LjMsMTAsLTE4emA7Y2FzZSJycGFyZW4iOnJldHVybmBNNzYsMGMtMTYuNywwLC0yNSwzLC0yNSw5YzAsMiwyLDYuMyw2LDEzYzIxLjMsMjguNyw0Mi4zLDYwLjMsCjYzLDk1Yzk2LjcsMTU2LjcsMTcyLjgsMzMyLjUsMjI4LjUsNTI3LjVjNTUuNywxOTUsOTIuOCw0MTYuNSwxMTEuNSw2NjQuNQpjMTEuMywxMzkuMywxNywyOTAuNywxNyw0NTRjMCwyOCwxLjcsNDMsMy4zLDQ1bDAsYCsocis5KStgCmMtMyw0LC0zLjMsMTYuNywtMy4zLDM4YzAsMTYyLC01LjcsMzEzLjcsLTE3LDQ1NWMtMTguNywyNDgsLTU1LjgsNDY5LjMsLTExMS41LDY2NApjLTU1LjcsMTk0LjcsLTEzMS44LDM3MC4zLC0yMjguNSw1MjdjLTIwLjcsMzQuNywtNDEuNyw2Ni4zLC02Myw5NWMtMiwzLjMsLTQsNywtNiwxMQpjMCw3LjMsNS43LDExLDE3LDExYzAsMCwxMSwwLDExLDBjOS4zLDAsMTQuMywtMC4zLDE1LC0xYzUuMywtNS4zLDEwLjMsLTExLDE1LC0xNwpjMjQyLjcsLTI5NC43LDM5NS4zLC02ODEuNyw0NTgsLTExNjFjMjEuMywtMTY0LjcsMzMuMywtMzUwLjcsMzYsLTU1OApsMCwtYCsocisxNDQpK2BjLTIsLTE1OS4zLC0xMCwtMzEwLjcsLTI0LC00NTRjLTUzLjMsLTUyOCwtMjEwLC05NDkuNywKLTQ3MCwtMTI2NWMtNC43LC02LC05LjcsLTExLjcsLTE1LC0xN2MtMC43LC0wLjcsLTYuNywtMSwtMTgsLTF6YDtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biBzdHJldGNoeSBkZWxpbWl0ZXIuIil9fSwidGFsbERlbGltIiksb2Q9Y2xhc3N7c3RhdGlje28odGhpcywiRG9jdW1lbnRGcmFnbWVudCIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuY2hpbGRyZW49dm9pZCAwLHRoaXMuY2xhc3Nlcz12b2lkIDAsdGhpcy5oZWlnaHQ9dm9pZCAwLHRoaXMuZGVwdGg9dm9pZCAwLHRoaXMubWF4Rm9udFNpemU9dm9pZCAwLHRoaXMuc3R5bGU9dm9pZCAwLHRoaXMuY2hpbGRyZW49ZSx0aGlzLmNsYXNzZXM9W10sdGhpcy5oZWlnaHQ9MCx0aGlzLmRlcHRoPTAsdGhpcy5tYXhGb250U2l6ZT0wLHRoaXMuc3R5bGU9e319aGFzQ2xhc3MoZSl7cmV0dXJuIEp0LmNvbnRhaW5zKHRoaXMuY2xhc3NlcyxlKX10b05vZGUoKXtmb3IodmFyIGU9ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLHI9MDtyPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO3IrKyllLmFwcGVuZENoaWxkKHRoaXMuY2hpbGRyZW5bcl0udG9Ob2RlKCkpO3JldHVybiBlfXRvTWFya3VwKCl7Zm9yKHZhciBlPSIiLHI9MDtyPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO3IrKyllKz10aGlzLmNoaWxkcmVuW3JdLnRvTWFya3VwKCk7cmV0dXJuIGV9dG9UZXh0KCl7dmFyIGU9byhyPT5yLnRvVGV4dCgpLCJ0b1RleHQiKTtyZXR1cm4gdGhpcy5jaGlsZHJlbi5tYXAoZSkuam9pbigiIil9fSxKbD17IkFNUy1SZWd1bGFyIjp7MzI6WzAsMCwwLDAsLjI1XSw2NTpbMCwuNjg4ODksMCwwLC43MjIyMl0sNjY6WzAsLjY4ODg5LDAsMCwuNjY2NjddLDY3OlswLC42ODg4OSwwLDAsLjcyMjIyXSw2ODpbMCwuNjg4ODksMCwwLC43MjIyMl0sNjk6WzAsLjY4ODg5LDAsMCwuNjY2NjddLDcwOlswLC42ODg4OSwwLDAsLjYxMTExXSw3MTpbMCwuNjg4ODksMCwwLC43Nzc3OF0sNzI6WzAsLjY4ODg5LDAsMCwuNzc3NzhdLDczOlswLC42ODg4OSwwLDAsLjM4ODg5XSw3NDpbLjE2NjY3LC42ODg4OSwwLDAsLjVdLDc1OlswLC42ODg4OSwwLDAsLjc3Nzc4XSw3NjpbMCwuNjg4ODksMCwwLC42NjY2N10sNzc6WzAsLjY4ODg5LDAsMCwuOTQ0NDVdLDc4OlswLC42ODg4OSwwLDAsLjcyMjIyXSw3OTpbLjE2NjY3LC42ODg4OSwwLDAsLjc3Nzc4XSw4MDpbMCwuNjg4ODksMCwwLC42MTExMV0sODE6Wy4xNjY2NywuNjg4ODksMCwwLC43Nzc3OF0sODI6WzAsLjY4ODg5LDAsMCwuNzIyMjJdLDgzOlswLC42ODg4OSwwLDAsLjU1NTU2XSw4NDpbMCwuNjg4ODksMCwwLC42NjY2N10sODU6WzAsLjY4ODg5LDAsMCwuNzIyMjJdLDg2OlswLC42ODg4OSwwLDAsLjcyMjIyXSw4NzpbMCwuNjg4ODksMCwwLDFdLDg4OlswLC42ODg4OSwwLDAsLjcyMjIyXSw4OTpbMCwuNjg4ODksMCwwLC43MjIyMl0sOTA6WzAsLjY4ODg5LDAsMCwuNjY2NjddLDEwNzpbMCwuNjg4ODksMCwwLC41NTU1Nl0sMTYwOlswLDAsMCwwLC4yNV0sMTY1OlswLC42NzUsLjAyNSwwLC43NV0sMTc0OlsuMTU1NTksLjY5MjI0LDAsMCwuOTQ2NjZdLDI0MDpbMCwuNjg4ODksMCwwLC41NTU1Nl0sMjk1OlswLC42ODg4OSwwLDAsLjU0MDI4XSw3MTA6WzAsLjgyNSwwLDAsMi4zMzMzNF0sNzMyOlswLC45LDAsMCwyLjMzMzM0XSw3NzA6WzAsLjgyNSwwLDAsMi4zMzMzNF0sNzcxOlswLC45LDAsMCwyLjMzMzM0XSw5ODk6Wy4wODE2NywuNTgxNjcsMCwwLC43Nzc3OF0sMTAwODpbMCwuNDMwNTYsLjA0MDI4LDAsLjY2NjY3XSw4MjQ1OlswLC41NDk4NiwwLDAsLjI3NV0sODQ2MzpbMCwuNjg4ODksMCwwLC41NDAyOF0sODQ4NzpbMCwuNjg4ODksMCwwLC43MjIyMl0sODQ5ODpbMCwuNjg4ODksMCwwLC41NTU1Nl0sODUwMjpbMCwuNjg4ODksMCwwLC42NjY2N10sODUwMzpbMCwuNjg4ODksMCwwLC40NDQ0NV0sODUwNDpbMCwuNjg4ODksMCwwLC42NjY2N10sODUxMzpbMCwuNjg4ODksMCwwLC42Mzg4OV0sODU5MjpbLS4wMzU5OCwuNDY0MDIsMCwwLC41XSw4NTk0OlstLjAzNTk4LC40NjQwMiwwLDAsLjVdLDg2MDI6Wy0uMTMzMTMsLjM2Njg3LDAsMCwxXSw4NjAzOlstLjEzMzEzLC4zNjY4NywwLDAsMV0sODYwNjpbLjAxMzU0LC41MjIzOSwwLDAsMV0sODYwODpbLjAxMzU0LC41MjIzOSwwLDAsMV0sODYxMDpbLjAxMzU0LC41MjIzOSwwLDAsMS4xMTExMV0sODYxMTpbLjAxMzU0LC41MjIzOSwwLDAsMS4xMTExMV0sODYxOTpbMCwuNTQ5ODYsMCwwLDFdLDg2MjA6WzAsLjU0OTg2LDAsMCwxXSw4NjIxOlstLjEzMzEzLC4zNzc4OCwwLDAsMS4zODg4OV0sODYyMjpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2MjQ6WzAsLjY5MjI0LDAsMCwuNV0sODYyNTpbMCwuNjkyMjQsMCwwLC41XSw4NjMwOlswLC40MzA1NiwwLDAsMV0sODYzMTpbMCwuNDMwNTYsMCwwLDFdLDg2MzQ6Wy4wODE5OCwuNTgxOTgsMCwwLC43Nzc3OF0sODYzNTpbLjA4MTk4LC41ODE5OCwwLDAsLjc3Nzc4XSw4NjM4OlsuMTk0NDQsLjY5MjI0LDAsMCwuNDE2NjddLDg2Mzk6Wy4xOTQ0NCwuNjkyMjQsMCwwLC40MTY2N10sODY0MjpbLjE5NDQ0LC42OTIyNCwwLDAsLjQxNjY3XSw4NjQzOlsuMTk0NDQsLjY5MjI0LDAsMCwuNDE2NjddLDg2NDQ6Wy4xODA4LC42NzUsMCwwLDFdLDg2NDY6Wy4xODA4LC42NzUsMCwwLDFdLDg2NDc6Wy4xODA4LC42NzUsMCwwLDFdLDg2NDg6Wy4xOTQ0NCwuNjkyMjQsMCwwLC44MzMzNF0sODY0OTpbLjE4MDgsLjY3NSwwLDAsMV0sODY1MDpbLjE5NDQ0LC42OTIyNCwwLDAsLjgzMzM0XSw4NjUxOlsuMDEzNTQsLjUyMjM5LDAsMCwxXSw4NjUyOlsuMDEzNTQsLjUyMjM5LDAsMCwxXSw4NjUzOlstLjEzMzEzLC4zNjY4NywwLDAsMV0sODY1NDpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2NTU6Wy0uMTMzMTMsLjM2Njg3LDAsMCwxXSw4NjY2OlsuMTM2NjcsLjYzNjY3LDAsMCwxXSw4NjY3OlsuMTM2NjcsLjYzNjY3LDAsMCwxXSw4NjY5OlstLjEzMzEzLC4zNzc4OCwwLDAsMV0sODY3MjpbLS4wNjQsLjQzNywwLDAsMS4zMzRdLDg2NzQ6Wy0uMDY0LC40MzcsMCwwLDEuMzM0XSw4NzA1OlswLC44MjUsMCwwLC41XSw4NzA4OlswLC42ODg4OSwwLDAsLjU1NTU2XSw4NzA5OlsuMDgxNjcsLjU4MTY3LDAsMCwuNzc3NzhdLDg3MTc6WzAsLjQzMDU2LDAsMCwuNDI5MTddLDg3MjI6Wy0uMDM1OTgsLjQ2NDAyLDAsMCwuNV0sODcyNDpbLjA4MTk4LC42OTIyNCwwLDAsLjc3Nzc4XSw4NzI2OlsuMDgxNjcsLjU4MTY3LDAsMCwuNzc3NzhdLDg3MzM6WzAsLjY5MjI0LDAsMCwuNzc3NzhdLDg3MzY6WzAsLjY5MjI0LDAsMCwuNzIyMjJdLDg3Mzc6WzAsLjY5MjI0LDAsMCwuNzIyMjJdLDg3Mzg6Wy4wMzUxNywuNTIyMzksMCwwLC43MjIyMl0sODczOTpbLjA4MTY3LC41ODE2NywwLDAsLjIyMjIyXSw4NzQwOlsuMjUxNDIsLjc0MTExLDAsMCwuMjc3NzhdLDg3NDE6Wy4wODE2NywuNTgxNjcsMCwwLC4zODg4OV0sODc0MjpbLjI1MTQyLC43NDExMSwwLDAsLjVdLDg3NTY6WzAsLjY5MjI0LDAsMCwuNjY2NjddLDg3NTc6WzAsLjY5MjI0LDAsMCwuNjY2NjddLDg3NjQ6Wy0uMTMzMTMsLjM2Njg3LDAsMCwuNzc3NzhdLDg3NjU6Wy0uMTMzMTMsLjM3Nzg4LDAsMCwuNzc3NzhdLDg3Njk6Wy0uMTMzMTMsLjM2Njg3LDAsMCwuNzc3NzhdLDg3NzA6Wy0uMDM2MjUsLjQ2Mzc1LDAsMCwuNzc3NzhdLDg3NzQ6Wy4zMDI3NCwuNzkzODMsMCwwLC43Nzc3OF0sODc3NjpbLS4wMTY4OCwuNDgzMTIsMCwwLC43Nzc3OF0sODc3ODpbLjA4MTY3LC41ODE2NywwLDAsLjc3Nzc4XSw4NzgyOlsuMDYwNjIsLjU0OTg2LDAsMCwuNzc3NzhdLDg3ODM6Wy4wNjA2MiwuNTQ5ODYsMCwwLC43Nzc3OF0sODc4NTpbLjA4MTk4LC41ODE5OCwwLDAsLjc3Nzc4XSw4Nzg2OlsuMDgxOTgsLjU4MTk4LDAsMCwuNzc3NzhdLDg3ODc6Wy4wODE5OCwuNTgxOTgsMCwwLC43Nzc3OF0sODc5MDpbMCwuNjkyMjQsMCwwLC43Nzc3OF0sODc5MTpbLjIyOTU4LC43Mjk1OCwwLDAsLjc3Nzc4XSw4Nzk2OlsuMDgxOTgsLjkxNjY3LDAsMCwuNzc3NzhdLDg4MDY6Wy4yNTU4MywuNzU1ODMsMCwwLC43Nzc3OF0sODgwNzpbLjI1NTgzLC43NTU4MywwLDAsLjc3Nzc4XSw4ODA4OlsuMjUxNDIsLjc1NzI2LDAsMCwuNzc3NzhdLDg4MDk6Wy4yNTE0MiwuNzU3MjYsMCwwLC43Nzc3OF0sODgxMjpbLjI1NTgzLC43NTU4MywwLDAsLjVdLDg4MTQ6Wy4yMDU3NiwuNzA1NzYsMCwwLC43Nzc3OF0sODgxNTpbLjIwNTc2LC43MDU3NiwwLDAsLjc3Nzc4XSw4ODE2OlsuMzAyNzQsLjc5MzgzLDAsMCwuNzc3NzhdLDg4MTc6Wy4zMDI3NCwuNzkzODMsMCwwLC43Nzc3OF0sODgxODpbLjIyOTU4LC43Mjk1OCwwLDAsLjc3Nzc4XSw4ODE5OlsuMjI5NTgsLjcyOTU4LDAsMCwuNzc3NzhdLDg4MjI6Wy4xODA4LC42NzUsMCwwLC43Nzc3OF0sODgyMzpbLjE4MDgsLjY3NSwwLDAsLjc3Nzc4XSw4ODI4OlsuMTM2NjcsLjYzNjY3LDAsMCwuNzc3NzhdLDg4Mjk6Wy4xMzY2NywuNjM2NjcsMCwwLC43Nzc3OF0sODgzMDpbLjIyOTU4LC43Mjk1OCwwLDAsLjc3Nzc4XSw4ODMxOlsuMjI5NTgsLjcyOTU4LDAsMCwuNzc3NzhdLDg4MzI6Wy4yMDU3NiwuNzA1NzYsMCwwLC43Nzc3OF0sODgzMzpbLjIwNTc2LC43MDU3NiwwLDAsLjc3Nzc4XSw4ODQwOlsuMzAyNzQsLjc5MzgzLDAsMCwuNzc3NzhdLDg4NDE6Wy4zMDI3NCwuNzkzODMsMCwwLC43Nzc3OF0sODg0MjpbLjEzNTk3LC42MzU5NywwLDAsLjc3Nzc4XSw4ODQzOlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDg4NDc6Wy4wMzUxNywuNTQ5ODYsMCwwLC43Nzc3OF0sODg0ODpbLjAzNTE3LC41NDk4NiwwLDAsLjc3Nzc4XSw4ODU4OlsuMDgxOTgsLjU4MTk4LDAsMCwuNzc3NzhdLDg4NTk6Wy4wODE5OCwuNTgxOTgsMCwwLC43Nzc3OF0sODg2MTpbLjA4MTk4LC41ODE5OCwwLDAsLjc3Nzc4XSw4ODYyOlswLC42NzUsMCwwLC43Nzc3OF0sODg2MzpbMCwuNjc1LDAsMCwuNzc3NzhdLDg4NjQ6WzAsLjY3NSwwLDAsLjc3Nzc4XSw4ODY1OlswLC42NzUsMCwwLC43Nzc3OF0sODg3MjpbMCwuNjkyMjQsMCwwLC42MTExMV0sODg3MzpbMCwuNjkyMjQsMCwwLC43MjIyMl0sODg3NDpbMCwuNjkyMjQsMCwwLC44ODg4OV0sODg3NjpbMCwuNjg4ODksMCwwLC42MTExMV0sODg3NzpbMCwuNjg4ODksMCwwLC42MTExMV0sODg3ODpbMCwuNjg4ODksMCwwLC43MjIyMl0sODg3OTpbMCwuNjg4ODksMCwwLC43MjIyMl0sODg4MjpbLjAzNTE3LC41NDk4NiwwLDAsLjc3Nzc4XSw4ODgzOlsuMDM1MTcsLjU0OTg2LDAsMCwuNzc3NzhdLDg4ODQ6Wy4xMzY2NywuNjM2NjcsMCwwLC43Nzc3OF0sODg4NTpbLjEzNjY3LC42MzY2NywwLDAsLjc3Nzc4XSw4ODg4OlswLC41NDk4NiwwLDAsMS4xMTExMV0sODg5MDpbLjE5NDQ0LC40MzA1NiwwLDAsLjU1NTU2XSw4ODkxOlsuMTk0NDQsLjY5MjI0LDAsMCwuNjExMTFdLDg4OTI6Wy4xOTQ0NCwuNjkyMjQsMCwwLC42MTExMV0sODkwMTpbMCwuNTQ5ODYsMCwwLC4yNzc3OF0sODkwMzpbLjA4MTY3LC41ODE2NywwLDAsLjc3Nzc4XSw4OTA1OlsuMDgxNjcsLjU4MTY3LDAsMCwuNzc3NzhdLDg5MDY6Wy4wODE2NywuNTgxNjcsMCwwLC43Nzc3OF0sODkwNzpbMCwuNjkyMjQsMCwwLC43Nzc3OF0sODkwODpbMCwuNjkyMjQsMCwwLC43Nzc3OF0sODkwOTpbLS4wMzU5OCwuNDY0MDIsMCwwLC43Nzc3OF0sODkxMDpbMCwuNTQ5ODYsMCwwLC43NjA0Ml0sODkxMTpbMCwuNTQ5ODYsMCwwLC43NjA0Ml0sODkxMjpbLjAzNTE3LC41NDk4NiwwLDAsLjc3Nzc4XSw4OTEzOlsuMDM1MTcsLjU0OTg2LDAsMCwuNzc3NzhdLDg5MTQ6WzAsLjU0OTg2LDAsMCwuNjY2NjddLDg5MTU6WzAsLjU0OTg2LDAsMCwuNjY2NjddLDg5MTY6WzAsLjY5MjI0LDAsMCwuNjY2NjddLDg5MTg6Wy4wMzkxLC41MzkxLDAsMCwuNzc3NzhdLDg5MTk6Wy4wMzkxLC41MzkxLDAsMCwuNzc3NzhdLDg5MjA6Wy4wMzUxNywuNTQ5ODYsMCwwLDEuMzMzMzRdLDg5MjE6Wy4wMzUxNywuNTQ5ODYsMCwwLDEuMzMzMzRdLDg5MjI6Wy4zODU2OSwuODg1NjksMCwwLC43Nzc3OF0sODkyMzpbLjM4NTY5LC44ODU2OSwwLDAsLjc3Nzc4XSw4OTI2OlsuMTM2NjcsLjYzNjY3LDAsMCwuNzc3NzhdLDg5Mjc6Wy4xMzY2NywuNjM2NjcsMCwwLC43Nzc3OF0sODkyODpbLjMwMjc0LC43OTM4MywwLDAsLjc3Nzc4XSw4OTI5OlsuMzAyNzQsLjc5MzgzLDAsMCwuNzc3NzhdLDg5MzQ6Wy4yMzIyMiwuNzQxMTEsMCwwLC43Nzc3OF0sODkzNTpbLjIzMjIyLC43NDExMSwwLDAsLjc3Nzc4XSw4OTM2OlsuMjMyMjIsLjc0MTExLDAsMCwuNzc3NzhdLDg5Mzc6Wy4yMzIyMiwuNzQxMTEsMCwwLC43Nzc3OF0sODkzODpbLjIwNTc2LC43MDU3NiwwLDAsLjc3Nzc4XSw4OTM5OlsuMjA1NzYsLjcwNTc2LDAsMCwuNzc3NzhdLDg5NDA6Wy4zMDI3NCwuNzkzODMsMCwwLC43Nzc3OF0sODk0MTpbLjMwMjc0LC43OTM4MywwLDAsLjc3Nzc4XSw4OTk0OlsuMTk0NDQsLjY5MjI0LDAsMCwuNzc3NzhdLDg5OTU6Wy4xOTQ0NCwuNjkyMjQsMCwwLC43Nzc3OF0sOTQxNjpbLjE1NTU5LC42OTIyNCwwLDAsLjkwMjIyXSw5NDg0OlswLC42OTIyNCwwLDAsLjVdLDk0ODg6WzAsLjY5MjI0LDAsMCwuNV0sOTQ5MjpbMCwuMzc3ODgsMCwwLC41XSw5NDk2OlswLC4zNzc4OCwwLDAsLjVdLDk1ODU6Wy4xOTQ0NCwuNjg4ODksMCwwLC44ODg4OV0sOTU4NjpbLjE5NDQ0LC43NDExMSwwLDAsLjg4ODg5XSw5NjMyOlswLC42NzUsMCwwLC43Nzc3OF0sOTYzMzpbMCwuNjc1LDAsMCwuNzc3NzhdLDk2NTA6WzAsLjU0OTg2LDAsMCwuNzIyMjJdLDk2NTE6WzAsLjU0OTg2LDAsMCwuNzIyMjJdLDk2NTQ6Wy4wMzUxNywuNTQ5ODYsMCwwLC43Nzc3OF0sOTY2MDpbMCwuNTQ5ODYsMCwwLC43MjIyMl0sOTY2MTpbMCwuNTQ5ODYsMCwwLC43MjIyMl0sOTY2NDpbLjAzNTE3LC41NDk4NiwwLDAsLjc3Nzc4XSw5Njc0OlsuMTExMTEsLjY5MjI0LDAsMCwuNjY2NjddLDk3MzM6Wy4xOTQ0NCwuNjkyMjQsMCwwLC45NDQ0NV0sMTAwMDM6WzAsLjY5MjI0LDAsMCwuODMzMzRdLDEwMDE2OlswLC42OTIyNCwwLDAsLjgzMzM0XSwxMDczMTpbLjExMTExLC42OTIyNCwwLDAsLjY2NjY3XSwxMDg0NjpbLjE5NDQ0LC43NTU4MywwLDAsLjYxMTExXSwxMDg3NzpbLjEzNjY3LC42MzY2NywwLDAsLjc3Nzc4XSwxMDg3ODpbLjEzNjY3LC42MzY2NywwLDAsLjc3Nzc4XSwxMDg4NTpbLjI1NTgzLC43NTU4MywwLDAsLjc3Nzc4XSwxMDg4NjpbLjI1NTgzLC43NTU4MywwLDAsLjc3Nzc4XSwxMDg4NzpbLjEzNTk3LC42MzU5NywwLDAsLjc3Nzc4XSwxMDg4ODpbLjEzNTk3LC42MzU5NywwLDAsLjc3Nzc4XSwxMDg4OTpbLjI2MTY3LC43NTcyNiwwLDAsLjc3Nzc4XSwxMDg5MDpbLjI2MTY3LC43NTcyNiwwLDAsLjc3Nzc4XSwxMDg5MTpbLjQ4MjU2LC45ODI1NiwwLDAsLjc3Nzc4XSwxMDg5MjpbLjQ4MjU2LC45ODI1NiwwLDAsLjc3Nzc4XSwxMDkwMTpbLjEzNjY3LC42MzY2NywwLDAsLjc3Nzc4XSwxMDkwMjpbLjEzNjY3LC42MzY2NywwLDAsLjc3Nzc4XSwxMDkzMzpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSwxMDkzNDpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSwxMDkzNTpbLjI2MTY3LC43NTcyNiwwLDAsLjc3Nzc4XSwxMDkzNjpbLjI2MTY3LC43NTcyNiwwLDAsLjc3Nzc4XSwxMDkzNzpbLjI2MTY3LC43NTcyNiwwLDAsLjc3Nzc4XSwxMDkzODpbLjI2MTY3LC43NTcyNiwwLDAsLjc3Nzc4XSwxMDk0OTpbLjI1NTgzLC43NTU4MywwLDAsLjc3Nzc4XSwxMDk1MDpbLjI1NTgzLC43NTU4MywwLDAsLjc3Nzc4XSwxMDk1NTpbLjI4NDgxLC43OTM4MywwLDAsLjc3Nzc4XSwxMDk1NjpbLjI4NDgxLC43OTM4MywwLDAsLjc3Nzc4XSw1NzM1MDpbLjA4MTY3LC41ODE2NywwLDAsLjIyMjIyXSw1NzM1MTpbLjA4MTY3LC41ODE2NywwLDAsLjM4ODg5XSw1NzM1MjpbLjA4MTY3LC41ODE2NywwLDAsLjc3Nzc4XSw1NzM1MzpbMCwuNDMwNTYsLjA0MDI4LDAsLjY2NjY3XSw1NzM1NjpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSw1NzM1NzpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSw1NzM1ODpbLjQxOTUxLC45MTk1MSwwLDAsLjc3Nzc4XSw1NzM1OTpbLjMwMjc0LC43OTM4MywwLDAsLjc3Nzc4XSw1NzM2MDpbLjMwMjc0LC43OTM4MywwLDAsLjc3Nzc4XSw1NzM2MTpbLjQxOTUxLC45MTk1MSwwLDAsLjc3Nzc4XSw1NzM2NjpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSw1NzM2NzpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSw1NzM2ODpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSw1NzM2OTpbLjI1MTQyLC43NTcyNiwwLDAsLjc3Nzc4XSw1NzM3MDpbLjEzNTk3LC42MzU5NywwLDAsLjc3Nzc4XSw1NzM3MTpbLjEzNTk3LC42MzU5NywwLDAsLjc3Nzc4XX0sIkNhbGlncmFwaGljLVJlZ3VsYXIiOnszMjpbMCwwLDAsMCwuMjVdLDY1OlswLC42ODMzMywwLC4xOTQ0NSwuNzk4NDddLDY2OlswLC42ODMzMywuMDMwNDEsLjEzODg5LC42NTY4MV0sNjc6WzAsLjY4MzMzLC4wNTgzNCwuMTM4ODksLjUyNjUzXSw2ODpbMCwuNjgzMzMsLjAyNzc4LC4wODMzNCwuNzcxMzldLDY5OlswLC42ODMzMywuMDg5NDQsLjExMTExLC41Mjc3OF0sNzA6WzAsLjY4MzMzLC4wOTkzMSwuMTExMTEsLjcxODc1XSw3MTpbLjA5NzIyLC42ODMzMywuMDU5MywuMTExMTEsLjU5NDg3XSw3MjpbMCwuNjgzMzMsLjAwOTY1LC4xMTExMSwuODQ0NTJdLDczOlswLC42ODMzMywuMDczODIsMCwuNTQ0NTJdLDc0OlsuMDk3MjIsLjY4MzMzLC4xODQ3MiwuMTY2NjcsLjY3Nzc4XSw3NTpbMCwuNjgzMzMsLjAxNDQ1LC4wNTU1NiwuNzYxOTVdLDc2OlswLC42ODMzMywwLC4xMzg4OSwuNjg5NzJdLDc3OlswLC42ODMzMywwLC4xMzg4OSwxLjIwMDldLDc4OlswLC42ODMzMywuMTQ3MzYsLjA4MzM0LC44MjA0OV0sNzk6WzAsLjY4MzMzLC4wMjc3OCwuMTExMTEsLjc5NjExXSw4MDpbMCwuNjgzMzMsLjA4MjIyLC4wODMzNCwuNjk1NTZdLDgxOlsuMDk3MjIsLjY4MzMzLDAsLjExMTExLC44MTY2N10sODI6WzAsLjY4MzMzLDAsLjA4MzM0LC44NDc1XSw4MzpbMCwuNjgzMzMsLjA3NSwuMTM4ODksLjYwNTU2XSw4NDpbMCwuNjgzMzMsLjI1NDE3LDAsLjU0NDY0XSw4NTpbMCwuNjgzMzMsLjA5OTMxLC4wODMzNCwuNjI1ODNdLDg2OlswLC42ODMzMywuMDgyMjIsMCwuNjEyNzhdLDg3OlswLC42ODMzMywuMDgyMjIsLjA4MzM0LC45ODc3OF0sODg6WzAsLjY4MzMzLC4xNDY0MywuMTM4ODksLjcxMzNdLDg5OlsuMDk3MjIsLjY4MzMzLC4wODIyMiwuMDgzMzQsLjY2ODM0XSw5MDpbMCwuNjgzMzMsLjA3OTQ0LC4xMzg4OSwuNzI0NzNdLDE2MDpbMCwwLDAsMCwuMjVdfSwiRnJha3R1ci1SZWd1bGFyIjp7MzI6WzAsMCwwLDAsLjI1XSwzMzpbMCwuNjkxNDEsMCwwLC4yOTU3NF0sMzQ6WzAsLjY5MTQxLDAsMCwuMjE0NzFdLDM4OlswLC42OTE0MSwwLDAsLjczNzg2XSwzOTpbMCwuNjkxNDEsMCwwLC4yMTIwMV0sNDA6Wy4yNDk4MiwuNzQ5NDcsMCwwLC4zODg2NV0sNDE6Wy4yNDk4MiwuNzQ5NDcsMCwwLC4zODg2NV0sNDI6WzAsLjYyMTE5LDAsMCwuMjc3NjRdLDQzOlsuMDgzMTksLjU4MjgzLDAsMCwuNzU2MjNdLDQ0OlswLC4xMDgwMywwLDAsLjI3NzY0XSw0NTpbLjA4MzE5LC41ODI4MywwLDAsLjc1NjIzXSw0NjpbMCwuMTA4MDMsMCwwLC4yNzc2NF0sNDc6Wy4yNDk4MiwuNzQ5NDcsMCwwLC41MDE4MV0sNDg6WzAsLjQ3NTM0LDAsMCwuNTAxODFdLDQ5OlswLC40NzUzNCwwLDAsLjUwMTgxXSw1MDpbMCwuNDc1MzQsMCwwLC41MDE4MV0sNTE6Wy4xODkwNiwuNDc1MzQsMCwwLC41MDE4MV0sNTI6Wy4xODkwNiwuNDc1MzQsMCwwLC41MDE4MV0sNTM6Wy4xODkwNiwuNDc1MzQsMCwwLC41MDE4MV0sNTQ6WzAsLjY5MTQxLDAsMCwuNTAxODFdLDU1OlsuMTg5MDYsLjQ3NTM0LDAsMCwuNTAxODFdLDU2OlswLC42OTE0MSwwLDAsLjUwMTgxXSw1NzpbLjE4OTA2LC40NzUzNCwwLDAsLjUwMTgxXSw1ODpbMCwuNDc1MzQsMCwwLC4yMTYwNl0sNTk6Wy4xMjYwNCwuNDc1MzQsMCwwLC4yMTYwNl0sNjE6Wy0uMTMwOTksLjM2ODY2LDAsMCwuNzU2MjNdLDYzOlswLC42OTE0MSwwLDAsLjM2MjQ1XSw2NTpbMCwuNjkxNDEsMCwwLC43MTc2XSw2NjpbMCwuNjkxNDEsMCwwLC44ODM5N10sNjc6WzAsLjY5MTQxLDAsMCwuNjEyNTRdLDY4OlswLC42OTE0MSwwLDAsLjgzMTU4XSw2OTpbMCwuNjkxNDEsMCwwLC42NjI3OF0sNzA6Wy4xMjYwNCwuNjkxNDEsMCwwLC42MTExOV0sNzE6WzAsLjY5MTQxLDAsMCwuNzg1MzldLDcyOlsuMDYzMDIsLjY5MTQxLDAsMCwuNzIwM10sNzM6WzAsLjY5MTQxLDAsMCwuNTU0NDhdLDc0OlsuMTI2MDQsLjY5MTQxLDAsMCwuNTUyMzFdLDc1OlswLC42OTE0MSwwLDAsLjY2ODQ1XSw3NjpbMCwuNjkxNDEsMCwwLC42NjYwMl0sNzc6WzAsLjY5MTQxLDAsMCwxLjA0OTUzXSw3ODpbMCwuNjkxNDEsMCwwLC44MzIxMl0sNzk6WzAsLjY5MTQxLDAsMCwuODI2OTldLDgwOlsuMTg5MDYsLjY5MTQxLDAsMCwuODI3NTNdLDgxOlsuMDM3ODEsLjY5MTQxLDAsMCwuODI2OTldLDgyOlswLC42OTE0MSwwLDAsLjgyODA3XSw4MzpbMCwuNjkxNDEsMCwwLC44Mjg2MV0sODQ6WzAsLjY5MTQxLDAsMCwuNjY4OTldLDg1OlswLC42OTE0MSwwLDAsLjY0NTc2XSw4NjpbMCwuNjkxNDEsMCwwLC44MzEzMV0sODc6WzAsLjY5MTQxLDAsMCwxLjA0NjAyXSw4ODpbMCwuNjkxNDEsMCwwLC43MTkyMl0sODk6Wy4xODkwNiwuNjkxNDEsMCwwLC44MzI5M10sOTA6Wy4xMjYwNCwuNjkxNDEsMCwwLC42MDIwMV0sOTE6Wy4yNDk4MiwuNzQ5NDcsMCwwLC4yNzc2NF0sOTM6Wy4yNDk4MiwuNzQ5NDcsMCwwLC4yNzc2NF0sOTQ6WzAsLjY5MTQxLDAsMCwuNDk5NjVdLDk3OlswLC40NzUzNCwwLDAsLjUwMDQ2XSw5ODpbMCwuNjkxNDEsMCwwLC41MTMxNV0sOTk6WzAsLjQ3NTM0LDAsMCwuMzg5NDZdLDEwMDpbMCwuNjIxMTksMCwwLC40OTg1N10sMTAxOlswLC40NzUzNCwwLDAsLjQwMDUzXSwxMDI6Wy4xODkwNiwuNjkxNDEsMCwwLC4zMjYyNl0sMTAzOlsuMTg5MDYsLjQ3NTM0LDAsMCwuNTAzN10sMTA0OlsuMTg5MDYsLjY5MTQxLDAsMCwuNTIxMjZdLDEwNTpbMCwuNjkxNDEsMCwwLC4yNzg5OV0sMTA2OlswLC42OTE0MSwwLDAsLjI4MDg4XSwxMDc6WzAsLjY5MTQxLDAsMCwuMzg5NDZdLDEwODpbMCwuNjkxNDEsMCwwLC4yNzk1M10sMTA5OlswLC40NzUzNCwwLDAsLjc2Njc2XSwxMTA6WzAsLjQ3NTM0LDAsMCwuNTI2NjZdLDExMTpbMCwuNDc1MzQsMCwwLC40ODg4NV0sMTEyOlsuMTg5MDYsLjUyMzk2LDAsMCwuNTAwNDZdLDExMzpbLjE4OTA2LC40NzUzNCwwLDAsLjQ4OTEyXSwxMTQ6WzAsLjQ3NTM0LDAsMCwuMzg5MTldLDExNTpbMCwuNDc1MzQsMCwwLC40NDI2Nl0sMTE2OlswLC42MjExOSwwLDAsLjMzMzAxXSwxMTc6WzAsLjQ3NTM0LDAsMCwuNTE3Ml0sMTE4OlswLC41MjM5NiwwLDAsLjUxMThdLDExOTpbMCwuNTIzOTYsMCwwLC43NzM1MV0sMTIwOlsuMTg5MDYsLjQ3NTM0LDAsMCwuMzg4NjVdLDEyMTpbLjE4OTA2LC40NzUzNCwwLDAsLjQ5ODg0XSwxMjI6Wy4xODkwNiwuNDc1MzQsMCwwLC4zOTA1NF0sMTYwOlswLDAsMCwwLC4yNV0sODIxNjpbMCwuNjkxNDEsMCwwLC4yMTQ3MV0sODIxNzpbMCwuNjkxNDEsMCwwLC4yMTQ3MV0sNTgxMTI6WzAsLjYyMTE5LDAsMCwuNDk3NDldLDU4MTEzOlswLC42MjExOSwwLDAsLjQ5ODNdLDU4MTE0OlsuMTg5MDYsLjY5MTQxLDAsMCwuMzMzMjhdLDU4MTE1OlsuMTg5MDYsLjY5MTQxLDAsMCwuMzI5MjNdLDU4MTE2OlsuMTg5MDYsLjQ3NTM0LDAsMCwuNTAzNDNdLDU4MTE3OlswLC42OTE0MSwwLDAsLjMzMzAxXSw1ODExODpbMCwuNjIxMTksMCwwLC4zMzQwOV0sNTgxMTk6WzAsLjQ3NTM0LDAsMCwuNTAwNzNdfSwiTWFpbi1Cb2xkIjp7MzI6WzAsMCwwLDAsLjI1XSwzMzpbMCwuNjk0NDQsMCwwLC4zNV0sMzQ6WzAsLjY5NDQ0LDAsMCwuNjAyNzhdLDM1OlsuMTk0NDQsLjY5NDQ0LDAsMCwuOTU4MzNdLDM2OlsuMDU1NTYsLjc1LDAsMCwuNTc1XSwzNzpbLjA1NTU2LC43NSwwLDAsLjk1ODMzXSwzODpbMCwuNjk0NDQsMCwwLC44OTQ0NF0sMzk6WzAsLjY5NDQ0LDAsMCwuMzE5NDRdLDQwOlsuMjUsLjc1LDAsMCwuNDQ3MjJdLDQxOlsuMjUsLjc1LDAsMCwuNDQ3MjJdLDQyOlswLC43NSwwLDAsLjU3NV0sNDM6Wy4xMzMzMywuNjMzMzMsMCwwLC44OTQ0NF0sNDQ6Wy4xOTQ0NCwuMTU1NTYsMCwwLC4zMTk0NF0sNDU6WzAsLjQ0NDQ0LDAsMCwuMzgzMzNdLDQ2OlswLC4xNTU1NiwwLDAsLjMxOTQ0XSw0NzpbLjI1LC43NSwwLDAsLjU3NV0sNDg6WzAsLjY0NDQ0LDAsMCwuNTc1XSw0OTpbMCwuNjQ0NDQsMCwwLC41NzVdLDUwOlswLC42NDQ0NCwwLDAsLjU3NV0sNTE6WzAsLjY0NDQ0LDAsMCwuNTc1XSw1MjpbMCwuNjQ0NDQsMCwwLC41NzVdLDUzOlswLC42NDQ0NCwwLDAsLjU3NV0sNTQ6WzAsLjY0NDQ0LDAsMCwuNTc1XSw1NTpbMCwuNjQ0NDQsMCwwLC41NzVdLDU2OlswLC42NDQ0NCwwLDAsLjU3NV0sNTc6WzAsLjY0NDQ0LDAsMCwuNTc1XSw1ODpbMCwuNDQ0NDQsMCwwLC4zMTk0NF0sNTk6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC4zMTk0NF0sNjA6Wy4wODU1NiwuNTg1NTYsMCwwLC44OTQ0NF0sNjE6Wy0uMTA4ODksLjM5MTExLDAsMCwuODk0NDRdLDYyOlsuMDg1NTYsLjU4NTU2LDAsMCwuODk0NDRdLDYzOlswLC42OTQ0NCwwLDAsLjU0MzA1XSw2NDpbMCwuNjk0NDQsMCwwLC44OTQ0NF0sNjU6WzAsLjY4NjExLDAsMCwuODY5NDRdLDY2OlswLC42ODYxMSwwLDAsLjgxODA1XSw2NzpbMCwuNjg2MTEsMCwwLC44MzA1NV0sNjg6WzAsLjY4NjExLDAsMCwuODgxOTRdLDY5OlswLC42ODYxMSwwLDAsLjc1NTU1XSw3MDpbMCwuNjg2MTEsMCwwLC43MjM2MV0sNzE6WzAsLjY4NjExLDAsMCwuOTA0MTZdLDcyOlswLC42ODYxMSwwLDAsLjldLDczOlswLC42ODYxMSwwLDAsLjQzNjExXSw3NDpbMCwuNjg2MTEsMCwwLC41OTQ0NF0sNzU6WzAsLjY4NjExLDAsMCwuOTAxMzhdLDc2OlswLC42ODYxMSwwLDAsLjY5MTY2XSw3NzpbMCwuNjg2MTEsMCwwLDEuMDkxNjZdLDc4OlswLC42ODYxMSwwLDAsLjldLDc5OlswLC42ODYxMSwwLDAsLjg2Mzg4XSw4MDpbMCwuNjg2MTEsMCwwLC43ODYxMV0sODE6Wy4xOTQ0NCwuNjg2MTEsMCwwLC44NjM4OF0sODI6WzAsLjY4NjExLDAsMCwuODYyNV0sODM6WzAsLjY4NjExLDAsMCwuNjM4ODldLDg0OlswLC42ODYxMSwwLDAsLjhdLDg1OlswLC42ODYxMSwwLDAsLjg4NDcyXSw4NjpbMCwuNjg2MTEsLjAxNTk3LDAsLjg2OTQ0XSw4NzpbMCwuNjg2MTEsLjAxNTk3LDAsMS4xODg4OF0sODg6WzAsLjY4NjExLDAsMCwuODY5NDRdLDg5OlswLC42ODYxMSwuMDI4NzUsMCwuODY5NDRdLDkwOlswLC42ODYxMSwwLDAsLjcwMjc3XSw5MTpbLjI1LC43NSwwLDAsLjMxOTQ0XSw5MjpbLjI1LC43NSwwLDAsLjU3NV0sOTM6Wy4yNSwuNzUsMCwwLC4zMTk0NF0sOTQ6WzAsLjY5NDQ0LDAsMCwuNTc1XSw5NTpbLjMxLC4xMzQ0NCwuMDMxOTQsMCwuNTc1XSw5NzpbMCwuNDQ0NDQsMCwwLC41NTkwMl0sOTg6WzAsLjY5NDQ0LDAsMCwuNjM4ODldLDk5OlswLC40NDQ0NCwwLDAsLjUxMTExXSwxMDA6WzAsLjY5NDQ0LDAsMCwuNjM4ODldLDEwMTpbMCwuNDQ0NDQsMCwwLC41MjcwOF0sMTAyOlswLC42OTQ0NCwuMTA5MDMsMCwuMzUxMzldLDEwMzpbLjE5NDQ0LC40NDQ0NCwuMDE1OTcsMCwuNTc1XSwxMDQ6WzAsLjY5NDQ0LDAsMCwuNjM4ODldLDEwNTpbMCwuNjk0NDQsMCwwLC4zMTk0NF0sMTA2OlsuMTk0NDQsLjY5NDQ0LDAsMCwuMzUxMzldLDEwNzpbMCwuNjk0NDQsMCwwLC42MDY5NF0sMTA4OlswLC42OTQ0NCwwLDAsLjMxOTQ0XSwxMDk6WzAsLjQ0NDQ0LDAsMCwuOTU4MzNdLDExMDpbMCwuNDQ0NDQsMCwwLC42Mzg4OV0sMTExOlswLC40NDQ0NCwwLDAsLjU3NV0sMTEyOlsuMTk0NDQsLjQ0NDQ0LDAsMCwuNjM4ODldLDExMzpbLjE5NDQ0LC40NDQ0NCwwLDAsLjYwNjk0XSwxMTQ6WzAsLjQ0NDQ0LDAsMCwuNDczNjFdLDExNTpbMCwuNDQ0NDQsMCwwLC40NTM2MV0sMTE2OlswLC42MzQ5MiwwLDAsLjQ0NzIyXSwxMTc6WzAsLjQ0NDQ0LDAsMCwuNjM4ODldLDExODpbMCwuNDQ0NDQsLjAxNTk3LDAsLjYwNjk0XSwxMTk6WzAsLjQ0NDQ0LC4wMTU5NywwLC44MzA1NV0sMTIwOlswLC40NDQ0NCwwLDAsLjYwNjk0XSwxMjE6Wy4xOTQ0NCwuNDQ0NDQsLjAxNTk3LDAsLjYwNjk0XSwxMjI6WzAsLjQ0NDQ0LDAsMCwuNTExMTFdLDEyMzpbLjI1LC43NSwwLDAsLjU3NV0sMTI0OlsuMjUsLjc1LDAsMCwuMzE5NDRdLDEyNTpbLjI1LC43NSwwLDAsLjU3NV0sMTI2OlsuMzUsLjM0NDQ0LDAsMCwuNTc1XSwxNjA6WzAsMCwwLDAsLjI1XSwxNjM6WzAsLjY5NDQ0LDAsMCwuODY4NTNdLDE2ODpbMCwuNjk0NDQsMCwwLC41NzVdLDE3MjpbMCwuNDQ0NDQsMCwwLC43NjY2Nl0sMTc2OlswLC42OTQ0NCwwLDAsLjg2OTQ0XSwxNzc6Wy4xMzMzMywuNjMzMzMsMCwwLC44OTQ0NF0sMTg0OlsuMTcwMTQsMCwwLDAsLjUxMTExXSwxOTg6WzAsLjY4NjExLDAsMCwxLjA0MTY2XSwyMTU6Wy4xMzMzMywuNjMzMzMsMCwwLC44OTQ0NF0sMjE2OlsuMDQ4NjEsLjczNDcyLDAsMCwuODk0NDRdLDIyMzpbMCwuNjk0NDQsMCwwLC41OTcyMl0sMjMwOlswLC40NDQ0NCwwLDAsLjgzMDU1XSwyNDc6Wy4xMzMzMywuNjMzMzMsMCwwLC44OTQ0NF0sMjQ4OlsuMDk3MjIsLjU0MTY3LDAsMCwuNTc1XSwzMDU6WzAsLjQ0NDQ0LDAsMCwuMzE5NDRdLDMzODpbMCwuNjg2MTEsMCwwLDEuMTY5NDRdLDMzOTpbMCwuNDQ0NDQsMCwwLC44OTQ0NF0sNTY3OlsuMTk0NDQsLjQ0NDQ0LDAsMCwuMzUxMzldLDcxMDpbMCwuNjk0NDQsMCwwLC41NzVdLDcxMTpbMCwuNjMxOTQsMCwwLC41NzVdLDcxMzpbMCwuNTk2MTEsMCwwLC41NzVdLDcxNDpbMCwuNjk0NDQsMCwwLC41NzVdLDcxNTpbMCwuNjk0NDQsMCwwLC41NzVdLDcyODpbMCwuNjk0NDQsMCwwLC41NzVdLDcyOTpbMCwuNjk0NDQsMCwwLC4zMTk0NF0sNzMwOlswLC42OTQ0NCwwLDAsLjg2OTQ0XSw3MzI6WzAsLjY5NDQ0LDAsMCwuNTc1XSw3MzM6WzAsLjY5NDQ0LDAsMCwuNTc1XSw5MTU6WzAsLjY4NjExLDAsMCwuNjkxNjZdLDkxNjpbMCwuNjg2MTEsMCwwLC45NTgzM10sOTIwOlswLC42ODYxMSwwLDAsLjg5NDQ0XSw5MjM6WzAsLjY4NjExLDAsMCwuODA1NTVdLDkyNjpbMCwuNjg2MTEsMCwwLC43NjY2Nl0sOTI4OlswLC42ODYxMSwwLDAsLjldLDkzMTpbMCwuNjg2MTEsMCwwLC44MzA1NV0sOTMzOlswLC42ODYxMSwwLDAsLjg5NDQ0XSw5MzQ6WzAsLjY4NjExLDAsMCwuODMwNTVdLDkzNjpbMCwuNjg2MTEsMCwwLC44OTQ0NF0sOTM3OlswLC42ODYxMSwwLDAsLjgzMDU1XSw4MjExOlswLC40NDQ0NCwuMDMxOTQsMCwuNTc1XSw4MjEyOlswLC40NDQ0NCwuMDMxOTQsMCwxLjE0OTk5XSw4MjE2OlswLC42OTQ0NCwwLDAsLjMxOTQ0XSw4MjE3OlswLC42OTQ0NCwwLDAsLjMxOTQ0XSw4MjIwOlswLC42OTQ0NCwwLDAsLjYwMjc4XSw4MjIxOlswLC42OTQ0NCwwLDAsLjYwMjc4XSw4MjI0OlsuMTk0NDQsLjY5NDQ0LDAsMCwuNTExMTFdLDgyMjU6Wy4xOTQ0NCwuNjk0NDQsMCwwLC41MTExMV0sODI0MjpbMCwuNTU1NTYsMCwwLC4zNDQ0NF0sODQwNzpbMCwuNzI0NDQsLjE1NDg2LDAsLjU3NV0sODQ2MzpbMCwuNjk0NDQsMCwwLC42Njc1OV0sODQ2NTpbMCwuNjk0NDQsMCwwLC44MzA1NV0sODQ2NzpbMCwuNjk0NDQsMCwwLC40NzM2MV0sODQ3MjpbLjE5NDQ0LC40NDQ0NCwwLDAsLjc0MDI3XSw4NDc2OlswLC42OTQ0NCwwLDAsLjgzMDU1XSw4NTAxOlswLC42OTQ0NCwwLDAsLjcwMjc3XSw4NTkyOlstLjEwODg5LC4zOTExMSwwLDAsMS4xNDk5OV0sODU5MzpbLjE5NDQ0LC42OTQ0NCwwLDAsLjU3NV0sODU5NDpbLS4xMDg4OSwuMzkxMTEsMCwwLDEuMTQ5OTldLDg1OTU6Wy4xOTQ0NCwuNjk0NDQsMCwwLC41NzVdLDg1OTY6Wy0uMTA4ODksLjM5MTExLDAsMCwxLjE0OTk5XSw4NTk3OlsuMjUsLjc1LDAsMCwuNTc1XSw4NTk4OlsuMTk0NDQsLjY5NDQ0LDAsMCwxLjE0OTk5XSw4NTk5OlsuMTk0NDQsLjY5NDQ0LDAsMCwxLjE0OTk5XSw4NjAwOlsuMTk0NDQsLjY5NDQ0LDAsMCwxLjE0OTk5XSw4NjAxOlsuMTk0NDQsLjY5NDQ0LDAsMCwxLjE0OTk5XSw4NjM2OlstLjEwODg5LC4zOTExMSwwLDAsMS4xNDk5OV0sODYzNzpbLS4xMDg4OSwuMzkxMTEsMCwwLDEuMTQ5OTldLDg2NDA6Wy0uMTA4ODksLjM5MTExLDAsMCwxLjE0OTk5XSw4NjQxOlstLjEwODg5LC4zOTExMSwwLDAsMS4xNDk5OV0sODY1NjpbLS4xMDg4OSwuMzkxMTEsMCwwLDEuMTQ5OTldLDg2NTc6Wy4xOTQ0NCwuNjk0NDQsMCwwLC43MDI3N10sODY1ODpbLS4xMDg4OSwuMzkxMTEsMCwwLDEuMTQ5OTldLDg2NTk6Wy4xOTQ0NCwuNjk0NDQsMCwwLC43MDI3N10sODY2MDpbLS4xMDg4OSwuMzkxMTEsMCwwLDEuMTQ5OTldLDg2NjE6Wy4yNSwuNzUsMCwwLC43MDI3N10sODcwNDpbMCwuNjk0NDQsMCwwLC42Mzg4OV0sODcwNjpbMCwuNjk0NDQsLjA2Mzg5LDAsLjYyODQ3XSw4NzA3OlswLC42OTQ0NCwwLDAsLjYzODg5XSw4NzA5OlsuMDU1NTYsLjc1LDAsMCwuNTc1XSw4NzExOlswLC42ODYxMSwwLDAsLjk1ODMzXSw4NzEyOlsuMDg1NTYsLjU4NTU2LDAsMCwuNzY2NjZdLDg3MTU6Wy4wODU1NiwuNTg1NTYsMCwwLC43NjY2Nl0sODcyMjpbLjEzMzMzLC42MzMzMywwLDAsLjg5NDQ0XSw4NzIzOlsuMTMzMzMsLjYzMzMzLDAsMCwuODk0NDRdLDg3MjU6Wy4yNSwuNzUsMCwwLC41NzVdLDg3MjY6Wy4yNSwuNzUsMCwwLC41NzVdLDg3Mjc6Wy0uMDI3NzgsLjQ3MjIyLDAsMCwuNTc1XSw4NzI4OlstLjAyNjM5LC40NzM2MSwwLDAsLjU3NV0sODcyOTpbLS4wMjYzOSwuNDczNjEsMCwwLC41NzVdLDg3MzA6Wy4xOCwuODIsMCwwLC45NTgzM10sODczMzpbMCwuNDQ0NDQsMCwwLC44OTQ0NF0sODczNDpbMCwuNDQ0NDQsMCwwLDEuMTQ5OTldLDg3MzY6WzAsLjY5MjI0LDAsMCwuNzIyMjJdLDg3Mzk6Wy4yNSwuNzUsMCwwLC4zMTk0NF0sODc0MTpbLjI1LC43NSwwLDAsLjU3NV0sODc0MzpbMCwuNTU1NTYsMCwwLC43NjY2Nl0sODc0NDpbMCwuNTU1NTYsMCwwLC43NjY2Nl0sODc0NTpbMCwuNTU1NTYsMCwwLC43NjY2Nl0sODc0NjpbMCwuNTU1NTYsMCwwLC43NjY2Nl0sODc0NzpbLjE5NDQ0LC42OTQ0NCwuMTI3NzgsMCwuNTY4NzVdLDg3NjQ6Wy0uMTA4ODksLjM5MTExLDAsMCwuODk0NDRdLDg3Njg6Wy4xOTQ0NCwuNjk0NDQsMCwwLC4zMTk0NF0sODc3MTpbLjAwMjIyLC41MDIyMiwwLDAsLjg5NDQ0XSw4NzczOlsuMDI3LC42MzgsMCwwLC44OTRdLDg3NzY6Wy4wMjQ0NCwuNTI0NDQsMCwwLC44OTQ0NF0sODc4MTpbLjAwMjIyLC41MDIyMiwwLDAsLjg5NDQ0XSw4ODAxOlsuMDAyMjIsLjUwMjIyLDAsMCwuODk0NDRdLDg4MDQ6Wy4xOTY2NywuNjk2NjcsMCwwLC44OTQ0NF0sODgwNTpbLjE5NjY3LC42OTY2NywwLDAsLjg5NDQ0XSw4ODEwOlsuMDg1NTYsLjU4NTU2LDAsMCwxLjE0OTk5XSw4ODExOlsuMDg1NTYsLjU4NTU2LDAsMCwxLjE0OTk5XSw4ODI2OlsuMDg1NTYsLjU4NTU2LDAsMCwuODk0NDRdLDg4Mjc6Wy4wODU1NiwuNTg1NTYsMCwwLC44OTQ0NF0sODgzNDpbLjA4NTU2LC41ODU1NiwwLDAsLjg5NDQ0XSw4ODM1OlsuMDg1NTYsLjU4NTU2LDAsMCwuODk0NDRdLDg4Mzg6Wy4xOTY2NywuNjk2NjcsMCwwLC44OTQ0NF0sODgzOTpbLjE5NjY3LC42OTY2NywwLDAsLjg5NDQ0XSw4ODQ2OlswLC41NTU1NiwwLDAsLjc2NjY2XSw4ODQ5OlsuMTk2NjcsLjY5NjY3LDAsMCwuODk0NDRdLDg4NTA6Wy4xOTY2NywuNjk2NjcsMCwwLC44OTQ0NF0sODg1MTpbMCwuNTU1NTYsMCwwLC43NjY2Nl0sODg1MjpbMCwuNTU1NTYsMCwwLC43NjY2Nl0sODg1MzpbLjEzMzMzLC42MzMzMywwLDAsLjg5NDQ0XSw4ODU0OlsuMTMzMzMsLjYzMzMzLDAsMCwuODk0NDRdLDg4NTU6Wy4xMzMzMywuNjMzMzMsMCwwLC44OTQ0NF0sODg1NjpbLjEzMzMzLC42MzMzMywwLDAsLjg5NDQ0XSw4ODU3OlsuMTMzMzMsLjYzMzMzLDAsMCwuODk0NDRdLDg4NjY6WzAsLjY5NDQ0LDAsMCwuNzAyNzddLDg4Njc6WzAsLjY5NDQ0LDAsMCwuNzAyNzddLDg4Njg6WzAsLjY5NDQ0LDAsMCwuODk0NDRdLDg4Njk6WzAsLjY5NDQ0LDAsMCwuODk0NDRdLDg5MDA6Wy0uMDI2MzksLjQ3MzYxLDAsMCwuNTc1XSw4OTAxOlstLjAyNjM5LC40NzM2MSwwLDAsLjMxOTQ0XSw4OTAyOlstLjAyNzc4LC40NzIyMiwwLDAsLjU3NV0sODk2ODpbLjI1LC43NSwwLDAsLjUxMTExXSw4OTY5OlsuMjUsLjc1LDAsMCwuNTExMTFdLDg5NzA6Wy4yNSwuNzUsMCwwLC41MTExMV0sODk3MTpbLjI1LC43NSwwLDAsLjUxMTExXSw4OTk0OlstLjEzODg5LC4zNjExMSwwLDAsMS4xNDk5OV0sODk5NTpbLS4xMzg4OSwuMzYxMTEsMCwwLDEuMTQ5OTldLDk2NTE6Wy4xOTQ0NCwuNjk0NDQsMCwwLDEuMDIyMjJdLDk2NTc6Wy0uMDI3NzgsLjQ3MjIyLDAsMCwuNTc1XSw5NjYxOlsuMTk0NDQsLjY5NDQ0LDAsMCwxLjAyMjIyXSw5NjY3OlstLjAyNzc4LC40NzIyMiwwLDAsLjU3NV0sOTcxMTpbLjE5NDQ0LC42OTQ0NCwwLDAsMS4xNDk5OV0sOTgyNDpbLjEyOTYzLC42OTQ0NCwwLDAsLjg5NDQ0XSw5ODI1OlsuMTI5NjMsLjY5NDQ0LDAsMCwuODk0NDRdLDk4MjY6Wy4xMjk2MywuNjk0NDQsMCwwLC44OTQ0NF0sOTgyNzpbLjEyOTYzLC42OTQ0NCwwLDAsLjg5NDQ0XSw5ODM3OlswLC43NSwwLDAsLjQ0NzIyXSw5ODM4OlsuMTk0NDQsLjY5NDQ0LDAsMCwuNDQ3MjJdLDk4Mzk6Wy4xOTQ0NCwuNjk0NDQsMCwwLC40NDcyMl0sMTAyMTY6Wy4yNSwuNzUsMCwwLC40NDcyMl0sMTAyMTc6Wy4yNSwuNzUsMCwwLC40NDcyMl0sMTA4MTU6WzAsLjY4NjExLDAsMCwuOV0sMTA5Mjc6Wy4xOTY2NywuNjk2NjcsMCwwLC44OTQ0NF0sMTA5Mjg6Wy4xOTY2NywuNjk2NjcsMCwwLC44OTQ0NF0sNTczNzY6Wy4xOTQ0NCwuNjk0NDQsMCwwLDBdfSwiTWFpbi1Cb2xkSXRhbGljIjp7MzI6WzAsMCwwLDAsLjI1XSwzMzpbMCwuNjk0NDQsLjExNDE3LDAsLjM4NjExXSwzNDpbMCwuNjk0NDQsLjA3OTM5LDAsLjYyMDU1XSwzNTpbLjE5NDQ0LC42OTQ0NCwuMDY4MzMsMCwuOTQ0NDRdLDM3OlsuMDU1NTYsLjc1LC4xMjg2MSwwLC45NDQ0NF0sMzg6WzAsLjY5NDQ0LC4wODUyOCwwLC44ODU1NV0sMzk6WzAsLjY5NDQ0LC4xMjk0NSwwLC4zNTU1NV0sNDA6Wy4yNSwuNzUsLjE1ODA2LDAsLjQ3MzMzXSw0MTpbLjI1LC43NSwuMDMzMDYsMCwuNDczMzNdLDQyOlswLC43NSwuMTQzMzMsMCwuNTkxMTFdLDQzOlsuMTAzMzMsLjYwMzMzLC4wMzMwNiwwLC44ODU1NV0sNDQ6Wy4xOTQ0NCwuMTQ3MjIsMCwwLC4zNTU1NV0sNDU6WzAsLjQ0NDQ0LC4wMjYxMSwwLC40MTQ0NF0sNDY6WzAsLjE0NzIyLDAsMCwuMzU1NTVdLDQ3OlsuMjUsLjc1LC4xNTgwNiwwLC41OTExMV0sNDg6WzAsLjY0NDQ0LC4xMzE2NywwLC41OTExMV0sNDk6WzAsLjY0NDQ0LC4xMzE2NywwLC41OTExMV0sNTA6WzAsLjY0NDQ0LC4xMzE2NywwLC41OTExMV0sNTE6WzAsLjY0NDQ0LC4xMzE2NywwLC41OTExMV0sNTI6Wy4xOTQ0NCwuNjQ0NDQsLjEzMTY3LDAsLjU5MTExXSw1MzpbMCwuNjQ0NDQsLjEzMTY3LDAsLjU5MTExXSw1NDpbMCwuNjQ0NDQsLjEzMTY3LDAsLjU5MTExXSw1NTpbLjE5NDQ0LC42NDQ0NCwuMTMxNjcsMCwuNTkxMTFdLDU2OlswLC42NDQ0NCwuMTMxNjcsMCwuNTkxMTFdLDU3OlswLC42NDQ0NCwuMTMxNjcsMCwuNTkxMTFdLDU4OlswLC40NDQ0NCwuMDY2OTUsMCwuMzU1NTVdLDU5OlsuMTk0NDQsLjQ0NDQ0LC4wNjY5NSwwLC4zNTU1NV0sNjE6Wy0uMTA4ODksLjM5MTExLC4wNjgzMywwLC44ODU1NV0sNjM6WzAsLjY5NDQ0LC4xMTQ3MiwwLC41OTExMV0sNjQ6WzAsLjY5NDQ0LC4wOTIwOCwwLC44ODU1NV0sNjU6WzAsLjY4NjExLDAsMCwuODY1NTVdLDY2OlswLC42ODYxMSwuMDk5MiwwLC44MTY2Nl0sNjc6WzAsLjY4NjExLC4xNDIwOCwwLC44MjY2Nl0sNjg6WzAsLjY4NjExLC4wOTA2MiwwLC44NzU1NV0sNjk6WzAsLjY4NjExLC4xMTQzMSwwLC43NTY2Nl0sNzA6WzAsLjY4NjExLC4xMjkwMywwLC43MjcyMl0sNzE6WzAsLjY4NjExLC4wNzM0NywwLC44OTUyN10sNzI6WzAsLjY4NjExLC4xNzIwOCwwLC44OTYxXSw3MzpbMCwuNjg2MTEsLjE1NjgxLDAsLjQ3MTY2XSw3NDpbMCwuNjg2MTEsLjE0NSwwLC42MTA1NV0sNzU6WzAsLjY4NjExLC4xNDIwOCwwLC44OTQ5OV0sNzY6WzAsLjY4NjExLDAsMCwuNjk3NzddLDc3OlswLC42ODYxMSwuMTcyMDgsMCwxLjA3Mjc3XSw3ODpbMCwuNjg2MTEsLjE3MjA4LDAsLjg5NjFdLDc5OlswLC42ODYxMSwuMDkwNjIsMCwuODU0OTldLDgwOlswLC42ODYxMSwuMDk5MiwwLC43ODcyMV0sODE6Wy4xOTQ0NCwuNjg2MTEsLjA5MDYyLDAsLjg1NDk5XSw4MjpbMCwuNjg2MTEsLjAyNTU5LDAsLjg1OTQ0XSw4MzpbMCwuNjg2MTEsLjExMjY0LDAsLjY0OTk5XSw4NDpbMCwuNjg2MTEsLjEyOTAzLDAsLjc5NjFdLDg1OlswLC42ODYxMSwuMTcyMDgsMCwuODgwODNdLDg2OlswLC42ODYxMSwuMTg2MjUsMCwuODY1NTVdLDg3OlswLC42ODYxMSwuMTg2MjUsMCwxLjE1OTk5XSw4ODpbMCwuNjg2MTEsLjE1NjgxLDAsLjg2NTU1XSw4OTpbMCwuNjg2MTEsLjE5ODAzLDAsLjg2NTU1XSw5MDpbMCwuNjg2MTEsLjE0MjA4LDAsLjcwODg4XSw5MTpbLjI1LC43NSwuMTg3NSwwLC4zNTYxMV0sOTM6Wy4yNSwuNzUsLjA5OTcyLDAsLjM1NjExXSw5NDpbMCwuNjk0NDQsLjA2NzA5LDAsLjU5MTExXSw5NTpbLjMxLC4xMzQ0NCwuMDk4MTEsMCwuNTkxMTFdLDk3OlswLC40NDQ0NCwuMDk0MjYsMCwuNTkxMTFdLDk4OlswLC42OTQ0NCwuMDc4NjEsMCwuNTMyMjJdLDk5OlswLC40NDQ0NCwuMDUyMjIsMCwuNTMyMjJdLDEwMDpbMCwuNjk0NDQsLjEwODYxLDAsLjU5MTExXSwxMDE6WzAsLjQ0NDQ0LC4wODUsMCwuNTMyMjJdLDEwMjpbLjE5NDQ0LC42OTQ0NCwuMjE3NzgsMCwuNF0sMTAzOlsuMTk0NDQsLjQ0NDQ0LC4xMDUsMCwuNTMyMjJdLDEwNDpbMCwuNjk0NDQsLjA5NDI2LDAsLjU5MTExXSwxMDU6WzAsLjY5MzI2LC4xMTM4NywwLC4zNTU1NV0sMTA2OlsuMTk0NDQsLjY5MzI2LC4xNjcyLDAsLjM1NTU1XSwxMDc6WzAsLjY5NDQ0LC4xMTExMSwwLC41MzIyMl0sMTA4OlswLC42OTQ0NCwuMTA4NjEsMCwuMjk2NjZdLDEwOTpbMCwuNDQ0NDQsLjA5NDI2LDAsLjk0NDQ0XSwxMTA6WzAsLjQ0NDQ0LC4wOTQyNiwwLC42NDk5OV0sMTExOlswLC40NDQ0NCwuMDc4NjEsMCwuNTkxMTFdLDExMjpbLjE5NDQ0LC40NDQ0NCwuMDc4NjEsMCwuNTkxMTFdLDExMzpbLjE5NDQ0LC40NDQ0NCwuMTA1LDAsLjUzMjIyXSwxMTQ6WzAsLjQ0NDQ0LC4xMTExMSwwLC41MDE2N10sMTE1OlswLC40NDQ0NCwuMDgxNjcsMCwuNDg2OTRdLDExNjpbMCwuNjM0OTIsLjA5NjM5LDAsLjM4NV0sMTE3OlswLC40NDQ0NCwuMDk0MjYsMCwuNjIwNTVdLDExODpbMCwuNDQ0NDQsLjExMTExLDAsLjUzMjIyXSwxMTk6WzAsLjQ0NDQ0LC4xMTExMSwwLC43Njc3N10sMTIwOlswLC40NDQ0NCwuMTI1ODMsMCwuNTYwNTVdLDEyMTpbLjE5NDQ0LC40NDQ0NCwuMTA1LDAsLjU2MTY2XSwxMjI6WzAsLjQ0NDQ0LC4xMzg4OSwwLC40OTA1NV0sMTI2OlsuMzUsLjM0NDQ0LC4xMTQ3MiwwLC41OTExMV0sMTYwOlswLDAsMCwwLC4yNV0sMTY4OlswLC42OTQ0NCwuMTE0NzMsMCwuNTkxMTFdLDE3NjpbMCwuNjk0NDQsMCwwLC45NDg4OF0sMTg0OlsuMTcwMTQsMCwwLDAsLjUzMjIyXSwxOTg6WzAsLjY4NjExLC4xMTQzMSwwLDEuMDIyNzddLDIxNjpbLjA0ODYxLC43MzQ3MiwuMDkwNjIsMCwuODg1NTVdLDIyMzpbLjE5NDQ0LC42OTQ0NCwuMDk3MzYsMCwuNjY1XSwyMzA6WzAsLjQ0NDQ0LC4wODUsMCwuODI2NjZdLDI0ODpbLjA5NzIyLC41NDE2NywuMDk0NTgsMCwuNTkxMTFdLDMwNTpbMCwuNDQ0NDQsLjA5NDI2LDAsLjM1NTU1XSwzMzg6WzAsLjY4NjExLC4xMTQzMSwwLDEuMTQwNTRdLDMzOTpbMCwuNDQ0NDQsLjA4NSwwLC44MjY2Nl0sNTY3OlsuMTk0NDQsLjQ0NDQ0LC4wNDYxMSwwLC4zODVdLDcxMDpbMCwuNjk0NDQsLjA2NzA5LDAsLjU5MTExXSw3MTE6WzAsLjYzMTk0LC4wODI3MSwwLC41OTExMV0sNzEzOlswLC41OTQ0NCwuMTA0NDQsMCwuNTkxMTFdLDcxNDpbMCwuNjk0NDQsLjA4NTI4LDAsLjU5MTExXSw3MTU6WzAsLjY5NDQ0LDAsMCwuNTkxMTFdLDcyODpbMCwuNjk0NDQsLjEwMzMzLDAsLjU5MTExXSw3Mjk6WzAsLjY5NDQ0LC4xMjk0NSwwLC4zNTU1NV0sNzMwOlswLC42OTQ0NCwwLDAsLjk0ODg4XSw3MzI6WzAsLjY5NDQ0LC4xMTQ3MiwwLC41OTExMV0sNzMzOlswLC42OTQ0NCwuMTE0NzIsMCwuNTkxMTFdLDkxNTpbMCwuNjg2MTEsLjEyOTAzLDAsLjY5Nzc3XSw5MTY6WzAsLjY4NjExLDAsMCwuOTQ0NDRdLDkyMDpbMCwuNjg2MTEsLjA5MDYyLDAsLjg4NTU1XSw5MjM6WzAsLjY4NjExLDAsMCwuODA2NjZdLDkyNjpbMCwuNjg2MTEsLjE1MDkyLDAsLjc2Nzc3XSw5Mjg6WzAsLjY4NjExLC4xNzIwOCwwLC44OTYxXSw5MzE6WzAsLjY4NjExLC4xMTQzMSwwLC44MjY2Nl0sOTMzOlswLC42ODYxMSwuMTA3NzgsMCwuODg1NTVdLDkzNDpbMCwuNjg2MTEsLjA1NjMyLDAsLjgyNjY2XSw5MzY6WzAsLjY4NjExLC4xMDc3OCwwLC44ODU1NV0sOTM3OlswLC42ODYxMSwuMDk5MiwwLC44MjY2Nl0sODIxMTpbMCwuNDQ0NDQsLjA5ODExLDAsLjU5MTExXSw4MjEyOlswLC40NDQ0NCwuMDk4MTEsMCwxLjE4MjIxXSw4MjE2OlswLC42OTQ0NCwuMTI5NDUsMCwuMzU1NTVdLDgyMTc6WzAsLjY5NDQ0LC4xMjk0NSwwLC4zNTU1NV0sODIyMDpbMCwuNjk0NDQsLjE2NzcyLDAsLjYyMDU1XSw4MjIxOlswLC42OTQ0NCwuMDc5MzksMCwuNjIwNTVdfSwiTWFpbi1JdGFsaWMiOnszMjpbMCwwLDAsMCwuMjVdLDMzOlswLC42OTQ0NCwuMTI0MTcsMCwuMzA2NjddLDM0OlswLC42OTQ0NCwuMDY5NjEsMCwuNTE0NDRdLDM1OlsuMTk0NDQsLjY5NDQ0LC4wNjYxNiwwLC44MTc3N10sMzc6Wy4wNTU1NiwuNzUsLjEzNjM5LDAsLjgxNzc3XSwzODpbMCwuNjk0NDQsLjA5Njk0LDAsLjc2NjY2XSwzOTpbMCwuNjk0NDQsLjEyNDE3LDAsLjMwNjY3XSw0MDpbLjI1LC43NSwuMTYxOTQsMCwuNDA4ODldLDQxOlsuMjUsLjc1LC4wMzY5NCwwLC40MDg4OV0sNDI6WzAsLjc1LC4xNDkxNywwLC41MTExMV0sNDM6Wy4wNTY2NywuNTYxNjcsLjAzNjk0LDAsLjc2NjY2XSw0NDpbLjE5NDQ0LC4xMDU1NiwwLDAsLjMwNjY3XSw0NTpbMCwuNDMwNTYsLjAyODI2LDAsLjM1Nzc4XSw0NjpbMCwuMTA1NTYsMCwwLC4zMDY2N10sNDc6Wy4yNSwuNzUsLjE2MTk0LDAsLjUxMTExXSw0ODpbMCwuNjQ0NDQsLjEzNTU2LDAsLjUxMTExXSw0OTpbMCwuNjQ0NDQsLjEzNTU2LDAsLjUxMTExXSw1MDpbMCwuNjQ0NDQsLjEzNTU2LDAsLjUxMTExXSw1MTpbMCwuNjQ0NDQsLjEzNTU2LDAsLjUxMTExXSw1MjpbLjE5NDQ0LC42NDQ0NCwuMTM1NTYsMCwuNTExMTFdLDUzOlswLC42NDQ0NCwuMTM1NTYsMCwuNTExMTFdLDU0OlswLC42NDQ0NCwuMTM1NTYsMCwuNTExMTFdLDU1OlsuMTk0NDQsLjY0NDQ0LC4xMzU1NiwwLC41MTExMV0sNTY6WzAsLjY0NDQ0LC4xMzU1NiwwLC41MTExMV0sNTc6WzAsLjY0NDQ0LC4xMzU1NiwwLC41MTExMV0sNTg6WzAsLjQzMDU2LC4wNTgyLDAsLjMwNjY3XSw1OTpbLjE5NDQ0LC40MzA1NiwuMDU4MiwwLC4zMDY2N10sNjE6Wy0uMTMzMTMsLjM2Njg3LC4wNjYxNiwwLC43NjY2Nl0sNjM6WzAsLjY5NDQ0LC4xMjI1LDAsLjUxMTExXSw2NDpbMCwuNjk0NDQsLjA5NTk3LDAsLjc2NjY2XSw2NTpbMCwuNjgzMzMsMCwwLC43NDMzM10sNjY6WzAsLjY4MzMzLC4xMDI1NywwLC43MDM4OV0sNjc6WzAsLjY4MzMzLC4xNDUyOCwwLC43MTU1NV0sNjg6WzAsLjY4MzMzLC4wOTQwMywwLC43NTVdLDY5OlswLC42ODMzMywuMTIwMjgsMCwuNjc4MzNdLDcwOlswLC42ODMzMywuMTMzMDUsMCwuNjUyNzddLDcxOlswLC42ODMzMywuMDg3MjIsMCwuNzczNjFdLDcyOlswLC42ODMzMywuMTYzODksMCwuNzQzMzNdLDczOlswLC42ODMzMywuMTU4MDYsMCwuMzg1NTVdLDc0OlswLC42ODMzMywuMTQwMjgsMCwuNTI1XSw3NTpbMCwuNjgzMzMsLjE0NTI4LDAsLjc2ODg4XSw3NjpbMCwuNjgzMzMsMCwwLC42MjcyMl0sNzc6WzAsLjY4MzMzLC4xNjM4OSwwLC44OTY2Nl0sNzg6WzAsLjY4MzMzLC4xNjM4OSwwLC43NDMzM10sNzk6WzAsLjY4MzMzLC4wOTQwMywwLC43NjY2Nl0sODA6WzAsLjY4MzMzLC4xMDI1NywwLC42NzgzM10sODE6Wy4xOTQ0NCwuNjgzMzMsLjA5NDAzLDAsLjc2NjY2XSw4MjpbMCwuNjgzMzMsLjAzODY4LDAsLjcyOTQ0XSw4MzpbMCwuNjgzMzMsLjExOTcyLDAsLjU2MjIyXSw4NDpbMCwuNjgzMzMsLjEzMzA1LDAsLjcxNTU1XSw4NTpbMCwuNjgzMzMsLjE2Mzg5LDAsLjc0MzMzXSw4NjpbMCwuNjgzMzMsLjE4MzYxLDAsLjc0MzMzXSw4NzpbMCwuNjgzMzMsLjE4MzYxLDAsLjk5ODg4XSw4ODpbMCwuNjgzMzMsLjE1ODA2LDAsLjc0MzMzXSw4OTpbMCwuNjgzMzMsLjE5MzgzLDAsLjc0MzMzXSw5MDpbMCwuNjgzMzMsLjE0NTI4LDAsLjYxMzMzXSw5MTpbLjI1LC43NSwuMTg3NSwwLC4zMDY2N10sOTM6Wy4yNSwuNzUsLjEwNTI4LDAsLjMwNjY3XSw5NDpbMCwuNjk0NDQsLjA2NjQ2LDAsLjUxMTExXSw5NTpbLjMxLC4xMjA1NiwuMDkyMDgsMCwuNTExMTFdLDk3OlswLC40MzA1NiwuMDc2NzEsMCwuNTExMTFdLDk4OlswLC42OTQ0NCwuMDYzMTIsMCwuNDZdLDk5OlswLC40MzA1NiwuMDU2NTMsMCwuNDZdLDEwMDpbMCwuNjk0NDQsLjEwMzMzLDAsLjUxMTExXSwxMDE6WzAsLjQzMDU2LC4wNzUxNCwwLC40Nl0sMTAyOlsuMTk0NDQsLjY5NDQ0LC4yMTE5NCwwLC4zMDY2N10sMTAzOlsuMTk0NDQsLjQzMDU2LC4wODg0NywwLC40Nl0sMTA0OlswLC42OTQ0NCwuMDc2NzEsMCwuNTExMTFdLDEwNTpbMCwuNjU1MzYsLjEwMTksMCwuMzA2NjddLDEwNjpbLjE5NDQ0LC42NTUzNiwuMTQ0NjcsMCwuMzA2NjddLDEwNzpbMCwuNjk0NDQsLjEwNzY0LDAsLjQ2XSwxMDg6WzAsLjY5NDQ0LC4xMDMzMywwLC4yNTU1NV0sMTA5OlswLC40MzA1NiwuMDc2NzEsMCwuODE3NzddLDExMDpbMCwuNDMwNTYsLjA3NjcxLDAsLjU2MjIyXSwxMTE6WzAsLjQzMDU2LC4wNjMxMiwwLC41MTExMV0sMTEyOlsuMTk0NDQsLjQzMDU2LC4wNjMxMiwwLC41MTExMV0sMTEzOlsuMTk0NDQsLjQzMDU2LC4wODg0NywwLC40Nl0sMTE0OlswLC40MzA1NiwuMTA3NjQsMCwuNDIxNjZdLDExNTpbMCwuNDMwNTYsLjA4MjA4LDAsLjQwODg5XSwxMTY6WzAsLjYxNTA4LC4wOTQ4NiwwLC4zMzIyMl0sMTE3OlswLC40MzA1NiwuMDc2NzEsMCwuNTM2NjZdLDExODpbMCwuNDMwNTYsLjEwNzY0LDAsLjQ2XSwxMTk6WzAsLjQzMDU2LC4xMDc2NCwwLC42NjQ0NF0sMTIwOlswLC40MzA1NiwuMTIwNDIsMCwuNDYzODldLDEyMTpbLjE5NDQ0LC40MzA1NiwuMDg4NDcsMCwuNDg1NTVdLDEyMjpbMCwuNDMwNTYsLjEyMjkyLDAsLjQwODg5XSwxMjY6Wy4zNSwuMzE3ODYsLjExNTg1LDAsLjUxMTExXSwxNjA6WzAsMCwwLDAsLjI1XSwxNjg6WzAsLjY2Nzg2LC4xMDQ3NCwwLC41MTExMV0sMTc2OlswLC42OTQ0NCwwLDAsLjgzMTI5XSwxODQ6Wy4xNzAxNCwwLDAsMCwuNDZdLDE5ODpbMCwuNjgzMzMsLjEyMDI4LDAsLjg4Mjc3XSwyMTY6Wy4wNDg2MSwuNzMxOTQsLjA5NDAzLDAsLjc2NjY2XSwyMjM6Wy4xOTQ0NCwuNjk0NDQsLjEwNTE0LDAsLjUzNjY2XSwyMzA6WzAsLjQzMDU2LC4wNzUxNCwwLC43MTU1NV0sMjQ4OlsuMDk3MjIsLjUyNzc4LC4wOTE5NCwwLC41MTExMV0sMzM4OlswLC42ODMzMywuMTIwMjgsMCwuOTg0OTldLDMzOTpbMCwuNDMwNTYsLjA3NTE0LDAsLjcxNTU1XSw3MTA6WzAsLjY5NDQ0LC4wNjY0NiwwLC41MTExMV0sNzExOlswLC42Mjg0NywuMDgyOTUsMCwuNTExMTFdLDcxMzpbMCwuNTYxNjcsLjEwMzMzLDAsLjUxMTExXSw3MTQ6WzAsLjY5NDQ0LC4wOTY5NCwwLC41MTExMV0sNzE1OlswLC42OTQ0NCwwLDAsLjUxMTExXSw3Mjg6WzAsLjY5NDQ0LC4xMDgwNiwwLC41MTExMV0sNzI5OlswLC42Njc4NiwuMTE3NTIsMCwuMzA2NjddLDczMDpbMCwuNjk0NDQsMCwwLC44MzEyOV0sNzMyOlswLC42Njc4NiwuMTE1ODUsMCwuNTExMTFdLDczMzpbMCwuNjk0NDQsLjEyMjUsMCwuNTExMTFdLDkxNTpbMCwuNjgzMzMsLjEzMzA1LDAsLjYyNzIyXSw5MTY6WzAsLjY4MzMzLDAsMCwuODE3NzddLDkyMDpbMCwuNjgzMzMsLjA5NDAzLDAsLjc2NjY2XSw5MjM6WzAsLjY4MzMzLDAsMCwuNjkyMjJdLDkyNjpbMCwuNjgzMzMsLjE1Mjk0LDAsLjY2NDQ0XSw5Mjg6WzAsLjY4MzMzLC4xNjM4OSwwLC43NDMzM10sOTMxOlswLC42ODMzMywuMTIwMjgsMCwuNzE1NTVdLDkzMzpbMCwuNjgzMzMsLjExMTExLDAsLjc2NjY2XSw5MzQ6WzAsLjY4MzMzLC4wNTk4NiwwLC43MTU1NV0sOTM2OlswLC42ODMzMywuMTExMTEsMCwuNzY2NjZdLDkzNzpbMCwuNjgzMzMsLjEwMjU3LDAsLjcxNTU1XSw4MjExOlswLC40MzA1NiwuMDkyMDgsMCwuNTExMTFdLDgyMTI6WzAsLjQzMDU2LC4wOTIwOCwwLDEuMDIyMjJdLDgyMTY6WzAsLjY5NDQ0LC4xMjQxNywwLC4zMDY2N10sODIxNzpbMCwuNjk0NDQsLjEyNDE3LDAsLjMwNjY3XSw4MjIwOlswLC42OTQ0NCwuMTY4NSwwLC41MTQ0NF0sODIyMTpbMCwuNjk0NDQsLjA2OTYxLDAsLjUxNDQ0XSw4NDYzOlswLC42ODg4OSwwLDAsLjU0MDI4XX0sIk1haW4tUmVndWxhciI6ezMyOlswLDAsMCwwLC4yNV0sMzM6WzAsLjY5NDQ0LDAsMCwuMjc3NzhdLDM0OlswLC42OTQ0NCwwLDAsLjVdLDM1OlsuMTk0NDQsLjY5NDQ0LDAsMCwuODMzMzRdLDM2OlsuMDU1NTYsLjc1LDAsMCwuNV0sMzc6Wy4wNTU1NiwuNzUsMCwwLC44MzMzNF0sMzg6WzAsLjY5NDQ0LDAsMCwuNzc3NzhdLDM5OlswLC42OTQ0NCwwLDAsLjI3Nzc4XSw0MDpbLjI1LC43NSwwLDAsLjM4ODg5XSw0MTpbLjI1LC43NSwwLDAsLjM4ODg5XSw0MjpbMCwuNzUsMCwwLC41XSw0MzpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSw0NDpbLjE5NDQ0LC4xMDU1NiwwLDAsLjI3Nzc4XSw0NTpbMCwuNDMwNTYsMCwwLC4zMzMzM10sNDY6WzAsLjEwNTU2LDAsMCwuMjc3NzhdLDQ3OlsuMjUsLjc1LDAsMCwuNV0sNDg6WzAsLjY0NDQ0LDAsMCwuNV0sNDk6WzAsLjY0NDQ0LDAsMCwuNV0sNTA6WzAsLjY0NDQ0LDAsMCwuNV0sNTE6WzAsLjY0NDQ0LDAsMCwuNV0sNTI6WzAsLjY0NDQ0LDAsMCwuNV0sNTM6WzAsLjY0NDQ0LDAsMCwuNV0sNTQ6WzAsLjY0NDQ0LDAsMCwuNV0sNTU6WzAsLjY0NDQ0LDAsMCwuNV0sNTY6WzAsLjY0NDQ0LDAsMCwuNV0sNTc6WzAsLjY0NDQ0LDAsMCwuNV0sNTg6WzAsLjQzMDU2LDAsMCwuMjc3NzhdLDU5OlsuMTk0NDQsLjQzMDU2LDAsMCwuMjc3NzhdLDYwOlsuMDM5MSwuNTM5MSwwLDAsLjc3Nzc4XSw2MTpbLS4xMzMxMywuMzY2ODcsMCwwLC43Nzc3OF0sNjI6Wy4wMzkxLC41MzkxLDAsMCwuNzc3NzhdLDYzOlswLC42OTQ0NCwwLDAsLjQ3MjIyXSw2NDpbMCwuNjk0NDQsMCwwLC43Nzc3OF0sNjU6WzAsLjY4MzMzLDAsMCwuNzVdLDY2OlswLC42ODMzMywwLDAsLjcwODM0XSw2NzpbMCwuNjgzMzMsMCwwLC43MjIyMl0sNjg6WzAsLjY4MzMzLDAsMCwuNzYzODldLDY5OlswLC42ODMzMywwLDAsLjY4MDU2XSw3MDpbMCwuNjgzMzMsMCwwLC42NTI3OF0sNzE6WzAsLjY4MzMzLDAsMCwuNzg0NzJdLDcyOlswLC42ODMzMywwLDAsLjc1XSw3MzpbMCwuNjgzMzMsMCwwLC4zNjExMV0sNzQ6WzAsLjY4MzMzLDAsMCwuNTEzODldLDc1OlswLC42ODMzMywwLDAsLjc3Nzc4XSw3NjpbMCwuNjgzMzMsMCwwLC42MjVdLDc3OlswLC42ODMzMywwLDAsLjkxNjY3XSw3ODpbMCwuNjgzMzMsMCwwLC43NV0sNzk6WzAsLjY4MzMzLDAsMCwuNzc3NzhdLDgwOlswLC42ODMzMywwLDAsLjY4MDU2XSw4MTpbLjE5NDQ0LC42ODMzMywwLDAsLjc3Nzc4XSw4MjpbMCwuNjgzMzMsMCwwLC43MzYxMV0sODM6WzAsLjY4MzMzLDAsMCwuNTU1NTZdLDg0OlswLC42ODMzMywwLDAsLjcyMjIyXSw4NTpbMCwuNjgzMzMsMCwwLC43NV0sODY6WzAsLjY4MzMzLC4wMTM4OSwwLC43NV0sODc6WzAsLjY4MzMzLC4wMTM4OSwwLDEuMDI3NzhdLDg4OlswLC42ODMzMywwLDAsLjc1XSw4OTpbMCwuNjgzMzMsLjAyNSwwLC43NV0sOTA6WzAsLjY4MzMzLDAsMCwuNjExMTFdLDkxOlsuMjUsLjc1LDAsMCwuMjc3NzhdLDkyOlsuMjUsLjc1LDAsMCwuNV0sOTM6Wy4yNSwuNzUsMCwwLC4yNzc3OF0sOTQ6WzAsLjY5NDQ0LDAsMCwuNV0sOTU6Wy4zMSwuMTIwNTYsLjAyNzc4LDAsLjVdLDk3OlswLC40MzA1NiwwLDAsLjVdLDk4OlswLC42OTQ0NCwwLDAsLjU1NTU2XSw5OTpbMCwuNDMwNTYsMCwwLC40NDQ0NV0sMTAwOlswLC42OTQ0NCwwLDAsLjU1NTU2XSwxMDE6WzAsLjQzMDU2LDAsMCwuNDQ0NDVdLDEwMjpbMCwuNjk0NDQsLjA3Nzc4LDAsLjMwNTU2XSwxMDM6Wy4xOTQ0NCwuNDMwNTYsLjAxMzg5LDAsLjVdLDEwNDpbMCwuNjk0NDQsMCwwLC41NTU1Nl0sMTA1OlswLC42Njc4NiwwLDAsLjI3Nzc4XSwxMDY6Wy4xOTQ0NCwuNjY3ODYsMCwwLC4zMDU1Nl0sMTA3OlswLC42OTQ0NCwwLDAsLjUyNzc4XSwxMDg6WzAsLjY5NDQ0LDAsMCwuMjc3NzhdLDEwOTpbMCwuNDMwNTYsMCwwLC44MzMzNF0sMTEwOlswLC40MzA1NiwwLDAsLjU1NTU2XSwxMTE6WzAsLjQzMDU2LDAsMCwuNV0sMTEyOlsuMTk0NDQsLjQzMDU2LDAsMCwuNTU1NTZdLDExMzpbLjE5NDQ0LC40MzA1NiwwLDAsLjUyNzc4XSwxMTQ6WzAsLjQzMDU2LDAsMCwuMzkxNjddLDExNTpbMCwuNDMwNTYsMCwwLC4zOTQ0NV0sMTE2OlswLC42MTUwOCwwLDAsLjM4ODg5XSwxMTc6WzAsLjQzMDU2LDAsMCwuNTU1NTZdLDExODpbMCwuNDMwNTYsLjAxMzg5LDAsLjUyNzc4XSwxMTk6WzAsLjQzMDU2LC4wMTM4OSwwLC43MjIyMl0sMTIwOlswLC40MzA1NiwwLDAsLjUyNzc4XSwxMjE6Wy4xOTQ0NCwuNDMwNTYsLjAxMzg5LDAsLjUyNzc4XSwxMjI6WzAsLjQzMDU2LDAsMCwuNDQ0NDVdLDEyMzpbLjI1LC43NSwwLDAsLjVdLDEyNDpbLjI1LC43NSwwLDAsLjI3Nzc4XSwxMjU6Wy4yNSwuNzUsMCwwLC41XSwxMjY6Wy4zNSwuMzE3ODYsMCwwLC41XSwxNjA6WzAsMCwwLDAsLjI1XSwxNjM6WzAsLjY5NDQ0LDAsMCwuNzY5MDldLDE2NzpbLjE5NDQ0LC42OTQ0NCwwLDAsLjQ0NDQ1XSwxNjg6WzAsLjY2Nzg2LDAsMCwuNV0sMTcyOlswLC40MzA1NiwwLDAsLjY2NjY3XSwxNzY6WzAsLjY5NDQ0LDAsMCwuNzVdLDE3NzpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSwxODI6Wy4xOTQ0NCwuNjk0NDQsMCwwLC42MTExMV0sMTg0OlsuMTcwMTQsMCwwLDAsLjQ0NDQ1XSwxOTg6WzAsLjY4MzMzLDAsMCwuOTAyNzhdLDIxNTpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSwyMTY6Wy4wNDg2MSwuNzMxOTQsMCwwLC43Nzc3OF0sMjIzOlswLC42OTQ0NCwwLDAsLjVdLDIzMDpbMCwuNDMwNTYsMCwwLC43MjIyMl0sMjQ3OlsuMDgzMzMsLjU4MzMzLDAsMCwuNzc3NzhdLDI0ODpbLjA5NzIyLC41Mjc3OCwwLDAsLjVdLDMwNTpbMCwuNDMwNTYsMCwwLC4yNzc3OF0sMzM4OlswLC42ODMzMywwLDAsMS4wMTM4OV0sMzM5OlswLC40MzA1NiwwLDAsLjc3Nzc4XSw1Njc6Wy4xOTQ0NCwuNDMwNTYsMCwwLC4zMDU1Nl0sNzEwOlswLC42OTQ0NCwwLDAsLjVdLDcxMTpbMCwuNjI4NDcsMCwwLC41XSw3MTM6WzAsLjU2Nzc4LDAsMCwuNV0sNzE0OlswLC42OTQ0NCwwLDAsLjVdLDcxNTpbMCwuNjk0NDQsMCwwLC41XSw3Mjg6WzAsLjY5NDQ0LDAsMCwuNV0sNzI5OlswLC42Njc4NiwwLDAsLjI3Nzc4XSw3MzA6WzAsLjY5NDQ0LDAsMCwuNzVdLDczMjpbMCwuNjY3ODYsMCwwLC41XSw3MzM6WzAsLjY5NDQ0LDAsMCwuNV0sOTE1OlswLC42ODMzMywwLDAsLjYyNV0sOTE2OlswLC42ODMzMywwLDAsLjgzMzM0XSw5MjA6WzAsLjY4MzMzLDAsMCwuNzc3NzhdLDkyMzpbMCwuNjgzMzMsMCwwLC42OTQ0NV0sOTI2OlswLC42ODMzMywwLDAsLjY2NjY3XSw5Mjg6WzAsLjY4MzMzLDAsMCwuNzVdLDkzMTpbMCwuNjgzMzMsMCwwLC43MjIyMl0sOTMzOlswLC42ODMzMywwLDAsLjc3Nzc4XSw5MzQ6WzAsLjY4MzMzLDAsMCwuNzIyMjJdLDkzNjpbMCwuNjgzMzMsMCwwLC43Nzc3OF0sOTM3OlswLC42ODMzMywwLDAsLjcyMjIyXSw4MjExOlswLC40MzA1NiwuMDI3NzgsMCwuNV0sODIxMjpbMCwuNDMwNTYsLjAyNzc4LDAsMV0sODIxNjpbMCwuNjk0NDQsMCwwLC4yNzc3OF0sODIxNzpbMCwuNjk0NDQsMCwwLC4yNzc3OF0sODIyMDpbMCwuNjk0NDQsMCwwLC41XSw4MjIxOlswLC42OTQ0NCwwLDAsLjVdLDgyMjQ6Wy4xOTQ0NCwuNjk0NDQsMCwwLC40NDQ0NV0sODIyNTpbLjE5NDQ0LC42OTQ0NCwwLDAsLjQ0NDQ1XSw4MjMwOlswLC4xMjMsMCwwLDEuMTcyXSw4MjQyOlswLC41NTU1NiwwLDAsLjI3NV0sODQwNzpbMCwuNzE0NDQsLjE1MzgyLDAsLjVdLDg0NjM6WzAsLjY4ODg5LDAsMCwuNTQwMjhdLDg0NjU6WzAsLjY5NDQ0LDAsMCwuNzIyMjJdLDg0Njc6WzAsLjY5NDQ0LDAsLjExMTExLC40MTY2N10sODQ3MjpbLjE5NDQ0LC40MzA1NiwwLC4xMTExMSwuNjM2NDZdLDg0NzY6WzAsLjY5NDQ0LDAsMCwuNzIyMjJdLDg1MDE6WzAsLjY5NDQ0LDAsMCwuNjExMTFdLDg1OTI6Wy0uMTMzMTMsLjM2Njg3LDAsMCwxXSw4NTkzOlsuMTk0NDQsLjY5NDQ0LDAsMCwuNV0sODU5NDpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg1OTU6Wy4xOTQ0NCwuNjk0NDQsMCwwLC41XSw4NTk2OlstLjEzMzEzLC4zNjY4NywwLDAsMV0sODU5NzpbLjI1LC43NSwwLDAsLjVdLDg1OTg6Wy4xOTQ0NCwuNjk0NDQsMCwwLDFdLDg1OTk6Wy4xOTQ0NCwuNjk0NDQsMCwwLDFdLDg2MDA6Wy4xOTQ0NCwuNjk0NDQsMCwwLDFdLDg2MDE6Wy4xOTQ0NCwuNjk0NDQsMCwwLDFdLDg2MTQ6Wy4wMTEsLjUxMSwwLDAsMV0sODYxNzpbLjAxMSwuNTExLDAsMCwxLjEyNl0sODYxODpbLjAxMSwuNTExLDAsMCwxLjEyNl0sODYzNjpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2Mzc6Wy0uMTMzMTMsLjM2Njg3LDAsMCwxXSw4NjQwOlstLjEzMzEzLC4zNjY4NywwLDAsMV0sODY0MTpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2NTI6Wy4wMTEsLjY3MSwwLDAsMV0sODY1NjpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2NTc6Wy4xOTQ0NCwuNjk0NDQsMCwwLC42MTExMV0sODY1ODpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2NTk6Wy4xOTQ0NCwuNjk0NDQsMCwwLC42MTExMV0sODY2MDpbLS4xMzMxMywuMzY2ODcsMCwwLDFdLDg2NjE6Wy4yNSwuNzUsMCwwLC42MTExMV0sODcwNDpbMCwuNjk0NDQsMCwwLC41NTU1Nl0sODcwNjpbMCwuNjk0NDQsLjA1NTU2LC4wODMzNCwuNTMwOV0sODcwNzpbMCwuNjk0NDQsMCwwLC41NTU1Nl0sODcwOTpbLjA1NTU2LC43NSwwLDAsLjVdLDg3MTE6WzAsLjY4MzMzLDAsMCwuODMzMzRdLDg3MTI6Wy4wMzkxLC41MzkxLDAsMCwuNjY2NjddLDg3MTU6Wy4wMzkxLC41MzkxLDAsMCwuNjY2NjddLDg3MjI6Wy4wODMzMywuNTgzMzMsMCwwLC43Nzc3OF0sODcyMzpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSw4NzI1OlsuMjUsLjc1LDAsMCwuNV0sODcyNjpbLjI1LC43NSwwLDAsLjVdLDg3Mjc6Wy0uMDM0NzIsLjQ2NTI4LDAsMCwuNV0sODcyODpbLS4wNTU1NSwuNDQ0NDUsMCwwLC41XSw4NzI5OlstLjA1NTU1LC40NDQ0NSwwLDAsLjVdLDg3MzA6Wy4yLC44LDAsMCwuODMzMzRdLDg3MzM6WzAsLjQzMDU2LDAsMCwuNzc3NzhdLDg3MzQ6WzAsLjQzMDU2LDAsMCwxXSw4NzM2OlswLC42OTIyNCwwLDAsLjcyMjIyXSw4NzM5OlsuMjUsLjc1LDAsMCwuMjc3NzhdLDg3NDE6Wy4yNSwuNzUsMCwwLC41XSw4NzQzOlswLC41NTU1NiwwLDAsLjY2NjY3XSw4NzQ0OlswLC41NTU1NiwwLDAsLjY2NjY3XSw4NzQ1OlswLC41NTU1NiwwLDAsLjY2NjY3XSw4NzQ2OlswLC41NTU1NiwwLDAsLjY2NjY3XSw4NzQ3OlsuMTk0NDQsLjY5NDQ0LC4xMTExMSwwLC40MTY2N10sODc2NDpbLS4xMzMxMywuMzY2ODcsMCwwLC43Nzc3OF0sODc2ODpbLjE5NDQ0LC42OTQ0NCwwLDAsLjI3Nzc4XSw4NzcxOlstLjAzNjI1LC40NjM3NSwwLDAsLjc3Nzc4XSw4NzczOlstLjAyMiwuNTg5LDAsMCwuNzc4XSw4Nzc2OlstLjAxNjg4LC40ODMxMiwwLDAsLjc3Nzc4XSw4NzgxOlstLjAzNjI1LC40NjM3NSwwLDAsLjc3Nzc4XSw4Nzg0OlstLjEzMywuNjczLDAsMCwuNzc4XSw4ODAxOlstLjAzNjI1LC40NjM3NSwwLDAsLjc3Nzc4XSw4ODA0OlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDg4MDU6Wy4xMzU5NywuNjM1OTcsMCwwLC43Nzc3OF0sODgxMDpbLjAzOTEsLjUzOTEsMCwwLDFdLDg4MTE6Wy4wMzkxLC41MzkxLDAsMCwxXSw4ODI2OlsuMDM5MSwuNTM5MSwwLDAsLjc3Nzc4XSw4ODI3OlsuMDM5MSwuNTM5MSwwLDAsLjc3Nzc4XSw4ODM0OlsuMDM5MSwuNTM5MSwwLDAsLjc3Nzc4XSw4ODM1OlsuMDM5MSwuNTM5MSwwLDAsLjc3Nzc4XSw4ODM4OlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDg4Mzk6Wy4xMzU5NywuNjM1OTcsMCwwLC43Nzc3OF0sODg0NjpbMCwuNTU1NTYsMCwwLC42NjY2N10sODg0OTpbLjEzNTk3LC42MzU5NywwLDAsLjc3Nzc4XSw4ODUwOlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDg4NTE6WzAsLjU1NTU2LDAsMCwuNjY2NjddLDg4NTI6WzAsLjU1NTU2LDAsMCwuNjY2NjddLDg4NTM6Wy4wODMzMywuNTgzMzMsMCwwLC43Nzc3OF0sODg1NDpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSw4ODU1OlsuMDgzMzMsLjU4MzMzLDAsMCwuNzc3NzhdLDg4NTY6Wy4wODMzMywuNTgzMzMsMCwwLC43Nzc3OF0sODg1NzpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSw4ODY2OlswLC42OTQ0NCwwLDAsLjYxMTExXSw4ODY3OlswLC42OTQ0NCwwLDAsLjYxMTExXSw4ODY4OlswLC42OTQ0NCwwLDAsLjc3Nzc4XSw4ODY5OlswLC42OTQ0NCwwLDAsLjc3Nzc4XSw4ODcyOlsuMjQ5LC43NSwwLDAsLjg2N10sODkwMDpbLS4wNTU1NSwuNDQ0NDUsMCwwLC41XSw4OTAxOlstLjA1NTU1LC40NDQ0NSwwLDAsLjI3Nzc4XSw4OTAyOlstLjAzNDcyLC40NjUyOCwwLDAsLjVdLDg5MDQ6Wy4wMDUsLjUwNSwwLDAsLjldLDg5NDI6Wy4wMywuOTAzLDAsMCwuMjc4XSw4OTQzOlstLjE5LC4zMTMsMCwwLDEuMTcyXSw4OTQ1OlstLjEsLjgyMywwLDAsMS4yODJdLDg5Njg6Wy4yNSwuNzUsMCwwLC40NDQ0NV0sODk2OTpbLjI1LC43NSwwLDAsLjQ0NDQ1XSw4OTcwOlsuMjUsLjc1LDAsMCwuNDQ0NDVdLDg5NzE6Wy4yNSwuNzUsMCwwLC40NDQ0NV0sODk5NDpbLS4xNDIzNiwuMzU3NjQsMCwwLDFdLDg5OTU6Wy0uMTQyMzYsLjM1NzY0LDAsMCwxXSw5MTM2OlsuMjQ0LC43NDQsMCwwLC40MTJdLDkxMzc6Wy4yNDQsLjc0NSwwLDAsLjQxMl0sOTY1MTpbLjE5NDQ0LC42OTQ0NCwwLDAsLjg4ODg5XSw5NjU3OlstLjAzNDcyLC40NjUyOCwwLDAsLjVdLDk2NjE6Wy4xOTQ0NCwuNjk0NDQsMCwwLC44ODg4OV0sOTY2NzpbLS4wMzQ3MiwuNDY1MjgsMCwwLC41XSw5NzExOlsuMTk0NDQsLjY5NDQ0LDAsMCwxXSw5ODI0OlsuMTI5NjMsLjY5NDQ0LDAsMCwuNzc3NzhdLDk4MjU6Wy4xMjk2MywuNjk0NDQsMCwwLC43Nzc3OF0sOTgyNjpbLjEyOTYzLC42OTQ0NCwwLDAsLjc3Nzc4XSw5ODI3OlsuMTI5NjMsLjY5NDQ0LDAsMCwuNzc3NzhdLDk4Mzc6WzAsLjc1LDAsMCwuMzg4ODldLDk4Mzg6Wy4xOTQ0NCwuNjk0NDQsMCwwLC4zODg4OV0sOTgzOTpbLjE5NDQ0LC42OTQ0NCwwLDAsLjM4ODg5XSwxMDIxNjpbLjI1LC43NSwwLDAsLjM4ODg5XSwxMDIxNzpbLjI1LC43NSwwLDAsLjM4ODg5XSwxMDIyMjpbLjI0NCwuNzQ0LDAsMCwuNDEyXSwxMDIyMzpbLjI0NCwuNzQ1LDAsMCwuNDEyXSwxMDIyOTpbLjAxMSwuNTExLDAsMCwxLjYwOV0sMTAyMzA6Wy4wMTEsLjUxMSwwLDAsMS42MzhdLDEwMjMxOlsuMDExLC41MTEsMCwwLDEuODU5XSwxMDIzMjpbLjAyNCwuNTI1LDAsMCwxLjYwOV0sMTAyMzM6Wy4wMjQsLjUyNSwwLDAsMS42MzhdLDEwMjM0OlsuMDI0LC41MjUsMCwwLDEuODU4XSwxMDIzNjpbLjAxMSwuNTExLDAsMCwxLjYzOF0sMTA4MTU6WzAsLjY4MzMzLDAsMCwuNzVdLDEwOTI3OlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDEwOTI4OlsuMTM1OTcsLjYzNTk3LDAsMCwuNzc3NzhdLDU3Mzc2OlsuMTk0NDQsLjY5NDQ0LDAsMCwwXX0sIk1hdGgtQm9sZEl0YWxpYyI6ezMyOlswLDAsMCwwLC4yNV0sNDg6WzAsLjQ0NDQ0LDAsMCwuNTc1XSw0OTpbMCwuNDQ0NDQsMCwwLC41NzVdLDUwOlswLC40NDQ0NCwwLDAsLjU3NV0sNTE6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC41NzVdLDUyOlsuMTk0NDQsLjQ0NDQ0LDAsMCwuNTc1XSw1MzpbLjE5NDQ0LC40NDQ0NCwwLDAsLjU3NV0sNTQ6WzAsLjY0NDQ0LDAsMCwuNTc1XSw1NTpbLjE5NDQ0LC40NDQ0NCwwLDAsLjU3NV0sNTY6WzAsLjY0NDQ0LDAsMCwuNTc1XSw1NzpbLjE5NDQ0LC40NDQ0NCwwLDAsLjU3NV0sNjU6WzAsLjY4NjExLDAsMCwuODY5NDRdLDY2OlswLC42ODYxMSwuMDQ4MzUsMCwuODY2NF0sNjc6WzAsLjY4NjExLC4wNjk3OSwwLC44MTY5NF0sNjg6WzAsLjY4NjExLC4wMzE5NCwwLC45MzgxMl0sNjk6WzAsLjY4NjExLC4wNTQ1MSwwLC44MTAwN10sNzA6WzAsLjY4NjExLC4xNTk3MiwwLC42ODg4OV0sNzE6WzAsLjY4NjExLDAsMCwuODg2NzNdLDcyOlswLC42ODYxMSwuMDgyMjksMCwuOTgyMjldLDczOlswLC42ODYxMSwuMDc3NzgsMCwuNTExMTFdLDc0OlswLC42ODYxMSwuMTAwNjksMCwuNjMxMjVdLDc1OlswLC42ODYxMSwuMDY5NzksMCwuOTcxMThdLDc2OlswLC42ODYxMSwwLDAsLjc1NTU1XSw3NzpbMCwuNjg2MTEsLjExNDI0LDAsMS4xNDIwMV0sNzg6WzAsLjY4NjExLC4xMTQyNCwwLC45NTAzNF0sNzk6WzAsLjY4NjExLC4wMzE5NCwwLC44MzY2Nl0sODA6WzAsLjY4NjExLC4xNTk3MiwwLC43MjMwOV0sODE6Wy4xOTQ0NCwuNjg2MTEsMCwwLC44Njg2MV0sODI6WzAsLjY4NjExLC4wMDQyMSwwLC44NzIzNV0sODM6WzAsLjY4NjExLC4wNTM4MiwwLC42OTI3MV0sODQ6WzAsLjY4NjExLC4xNTk3MiwwLC42MzY2M10sODU6WzAsLjY4NjExLC4xMTQyNCwwLC44MDAyN10sODY6WzAsLjY4NjExLC4yNTU1NSwwLC42Nzc3OF0sODc6WzAsLjY4NjExLC4xNTk3MiwwLDEuMDkzMDVdLDg4OlswLC42ODYxMSwuMDc3NzgsMCwuOTQ3MjJdLDg5OlswLC42ODYxMSwuMjU1NTUsMCwuNjc0NThdLDkwOlswLC42ODYxMSwuMDY5NzksMCwuNzcyNTddLDk3OlswLC40NDQ0NCwwLDAsLjYzMjg3XSw5ODpbMCwuNjk0NDQsMCwwLC41MjA4M10sOTk6WzAsLjQ0NDQ0LDAsMCwuNTEzNDJdLDEwMDpbMCwuNjk0NDQsMCwwLC42MDk3Ml0sMTAxOlswLC40NDQ0NCwwLDAsLjU1MzYxXSwxMDI6Wy4xOTQ0NCwuNjk0NDQsLjExMDQyLDAsLjU2ODA2XSwxMDM6Wy4xOTQ0NCwuNDQ0NDQsLjAzNzA0LDAsLjU0NDldLDEwNDpbMCwuNjk0NDQsMCwwLC42Njc1OV0sMTA1OlswLC42OTMyNiwwLDAsLjQwNDhdLDEwNjpbLjE5NDQ0LC42OTMyNiwuMDYyMiwwLC40NzA4M10sMTA3OlswLC42OTQ0NCwuMDE4NTIsMCwuNjAzN10sMTA4OlswLC42OTQ0NCwuMDA4OCwwLC4zNDgxNV0sMTA5OlswLC40NDQ0NCwwLDAsMS4wMzI0XSwxMTA6WzAsLjQ0NDQ0LDAsMCwuNzEyOTZdLDExMTpbMCwuNDQ0NDQsMCwwLC41ODQ3Ml0sMTEyOlsuMTk0NDQsLjQ0NDQ0LDAsMCwuNjAwOTJdLDExMzpbLjE5NDQ0LC40NDQ0NCwuMDM3MDQsMCwuNTQyMTNdLDExNDpbMCwuNDQ0NDQsLjAzMTk0LDAsLjUyODddLDExNTpbMCwuNDQ0NDQsMCwwLC41MzEyNV0sMTE2OlswLC42MzQ5MiwwLDAsLjQxNTI4XSwxMTc6WzAsLjQ0NDQ0LDAsMCwuNjgxMDJdLDExODpbMCwuNDQ0NDQsLjAzNzA0LDAsLjU2NjY2XSwxMTk6WzAsLjQ0NDQ0LC4wMjc3OCwwLC44MzE0OF0sMTIwOlswLC40NDQ0NCwwLDAsLjY1OTAzXSwxMjE6Wy4xOTQ0NCwuNDQ0NDQsLjAzNzA0LDAsLjU5MDI4XSwxMjI6WzAsLjQ0NDQ0LC4wNDIxMywwLC41NTUwOV0sMTYwOlswLDAsMCwwLC4yNV0sOTE1OlswLC42ODYxMSwuMTU5NzIsMCwuNjU2OTRdLDkxNjpbMCwuNjg2MTEsMCwwLC45NTgzM10sOTIwOlswLC42ODYxMSwuMDMxOTQsMCwuODY3MjJdLDkyMzpbMCwuNjg2MTEsMCwwLC44MDU1NV0sOTI2OlswLC42ODYxMSwuMDc0NTgsMCwuODQxMjVdLDkyODpbMCwuNjg2MTEsLjA4MjI5LDAsLjk4MjI5XSw5MzE6WzAsLjY4NjExLC4wNTQ1MSwwLC44ODUwN10sOTMzOlswLC42ODYxMSwuMTU5NzIsMCwuNjcwODNdLDkzNDpbMCwuNjg2MTEsMCwwLC43NjY2Nl0sOTM2OlswLC42ODYxMSwuMTE2NTMsMCwuNzE0MDJdLDkzNzpbMCwuNjg2MTEsLjA0ODM1LDAsLjg3ODldLDk0NTpbMCwuNDQ0NDQsMCwwLC43NjA2NF0sOTQ2OlsuMTk0NDQsLjY5NDQ0LC4wMzQwMywwLC42NTk3Ml0sOTQ3OlsuMTk0NDQsLjQ0NDQ0LC4wNjM4OSwwLC41OTAwM10sOTQ4OlswLC42OTQ0NCwuMDM4MTksMCwuNTIyMjJdLDk0OTpbMCwuNDQ0NDQsMCwwLC41Mjg4Ml0sOTUwOlsuMTk0NDQsLjY5NDQ0LC4wNjIxNSwwLC41MDgzM10sOTUxOlsuMTk0NDQsLjQ0NDQ0LC4wMzcwNCwwLC42XSw5NTI6WzAsLjY5NDQ0LC4wMzE5NCwwLC41NjE4XSw5NTM6WzAsLjQ0NDQ0LDAsMCwuNDEyMDRdLDk1NDpbMCwuNDQ0NDQsMCwwLC42Njc1OV0sOTU1OlswLC42OTQ0NCwwLDAsLjY3MDgzXSw5NTY6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC43MDc4N10sOTU3OlswLC40NDQ0NCwuMDY4OTgsMCwuNTc2ODVdLDk1ODpbLjE5NDQ0LC42OTQ0NCwuMDMwMjEsMCwuNTA4MzNdLDk1OTpbMCwuNDQ0NDQsMCwwLC41ODQ3Ml0sOTYwOlswLC40NDQ0NCwuMDM3MDQsMCwuNjgyNDFdLDk2MTpbLjE5NDQ0LC40NDQ0NCwwLDAsLjYxMThdLDk2MjpbLjA5NzIyLC40NDQ0NCwuMDc5MTcsMCwuNDIzNjFdLDk2MzpbMCwuNDQ0NDQsLjAzNzA0LDAsLjY4NTg4XSw5NjQ6WzAsLjQ0NDQ0LC4xMzQ3MiwwLC41MjA4M10sOTY1OlswLC40NDQ0NCwuMDM3MDQsMCwuNjMwNTVdLDk2NjpbLjE5NDQ0LC40NDQ0NCwwLDAsLjc0NzIyXSw5Njc6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC43MTgwNV0sOTY4OlsuMTk0NDQsLjY5NDQ0LC4wMzcwNCwwLC43NTgzM10sOTY5OlswLC40NDQ0NCwuMDM3MDQsMCwuNzE3ODJdLDk3NzpbMCwuNjk0NDQsMCwwLC42OTE1NV0sOTgxOlsuMTk0NDQsLjY5NDQ0LDAsMCwuNzEyNV0sOTgyOlswLC40NDQ0NCwuMDMxOTQsMCwuOTc1XSwxMDA5OlsuMTk0NDQsLjQ0NDQ0LDAsMCwuNjExOF0sMTAxMzpbMCwuNDQ0NDQsMCwwLC40ODMzM10sNTc2NDk6WzAsLjQ0NDQ0LDAsMCwuMzkzNTJdLDU3OTExOlsuMTk0NDQsLjQ0NDQ0LDAsMCwuNDM4ODldfSwiTWF0aC1JdGFsaWMiOnszMjpbMCwwLDAsMCwuMjVdLDQ4OlswLC40MzA1NiwwLDAsLjVdLDQ5OlswLC40MzA1NiwwLDAsLjVdLDUwOlswLC40MzA1NiwwLDAsLjVdLDUxOlsuMTk0NDQsLjQzMDU2LDAsMCwuNV0sNTI6Wy4xOTQ0NCwuNDMwNTYsMCwwLC41XSw1MzpbLjE5NDQ0LC40MzA1NiwwLDAsLjVdLDU0OlswLC42NDQ0NCwwLDAsLjVdLDU1OlsuMTk0NDQsLjQzMDU2LDAsMCwuNV0sNTY6WzAsLjY0NDQ0LDAsMCwuNV0sNTc6Wy4xOTQ0NCwuNDMwNTYsMCwwLC41XSw2NTpbMCwuNjgzMzMsMCwuMTM4ODksLjc1XSw2NjpbMCwuNjgzMzMsLjA1MDE3LC4wODMzNCwuNzU4NTFdLDY3OlswLC42ODMzMywuMDcxNTMsLjA4MzM0LC43MTQ3Ml0sNjg6WzAsLjY4MzMzLC4wMjc3OCwuMDU1NTYsLjgyNzkyXSw2OTpbMCwuNjgzMzMsLjA1NzY0LC4wODMzNCwuNzM4Ml0sNzA6WzAsLjY4MzMzLC4xMzg4OSwuMDgzMzQsLjY0MzA2XSw3MTpbMCwuNjgzMzMsMCwuMDgzMzQsLjc4NjI1XSw3MjpbMCwuNjgzMzMsLjA4MTI1LC4wNTU1NiwuODMxMjVdLDczOlswLC42ODMzMywuMDc4NDcsLjExMTExLC40Mzk1OF0sNzQ6WzAsLjY4MzMzLC4wOTYxOCwuMTY2NjcsLjU1NDUxXSw3NTpbMCwuNjgzMzMsLjA3MTUzLC4wNTU1NiwuODQ5MzFdLDc2OlswLC42ODMzMywwLC4wMjc3OCwuNjgwNTZdLDc3OlswLC42ODMzMywuMTA5MDMsLjA4MzM0LC45NzAxNF0sNzg6WzAsLjY4MzMzLC4xMDkwMywuMDgzMzQsLjgwMzQ3XSw3OTpbMCwuNjgzMzMsLjAyNzc4LC4wODMzNCwuNzYyNzhdLDgwOlswLC42ODMzMywuMTM4ODksLjA4MzM0LC42NDIwMV0sODE6Wy4xOTQ0NCwuNjgzMzMsMCwuMDgzMzQsLjc5MDU2XSw4MjpbMCwuNjgzMzMsLjAwNzczLC4wODMzNCwuNzU5MjldLDgzOlswLC42ODMzMywuMDU3NjQsLjA4MzM0LC42MTMyXSw4NDpbMCwuNjgzMzMsLjEzODg5LC4wODMzNCwuNTg0MzhdLDg1OlswLC42ODMzMywuMTA5MDMsLjAyNzc4LC42ODI3OF0sODY6WzAsLjY4MzMzLC4yMjIyMiwwLC41ODMzM10sODc6WzAsLjY4MzMzLC4xMzg4OSwwLC45NDQ0NV0sODg6WzAsLjY4MzMzLC4wNzg0NywuMDgzMzQsLjgyODQ3XSw4OTpbMCwuNjgzMzMsLjIyMjIyLDAsLjU4MDU2XSw5MDpbMCwuNjgzMzMsLjA3MTUzLC4wODMzNCwuNjgyNjRdLDk3OlswLC40MzA1NiwwLDAsLjUyODU5XSw5ODpbMCwuNjk0NDQsMCwwLC40MjkxN10sOTk6WzAsLjQzMDU2LDAsLjA1NTU2LC40MzI3Nl0sMTAwOlswLC42OTQ0NCwwLC4xNjY2NywuNTIwNDldLDEwMTpbMCwuNDMwNTYsMCwuMDU1NTYsLjQ2NTYzXSwxMDI6Wy4xOTQ0NCwuNjk0NDQsLjEwNzY0LC4xNjY2NywuNDg5NTldLDEwMzpbLjE5NDQ0LC40MzA1NiwuMDM1ODgsLjAyNzc4LC40NzY5N10sMTA0OlswLC42OTQ0NCwwLDAsLjU3NjE2XSwxMDU6WzAsLjY1OTUyLDAsMCwuMzQ0NTFdLDEwNjpbLjE5NDQ0LC42NTk1MiwuMDU3MjQsMCwuNDExODFdLDEwNzpbMCwuNjk0NDQsLjAzMTQ4LDAsLjUyMDZdLDEwODpbMCwuNjk0NDQsLjAxOTY4LC4wODMzNCwuMjk4MzhdLDEwOTpbMCwuNDMwNTYsMCwwLC44NzgwMV0sMTEwOlswLC40MzA1NiwwLDAsLjYwMDIzXSwxMTE6WzAsLjQzMDU2LDAsLjA1NTU2LC40ODQ3Ml0sMTEyOlsuMTk0NDQsLjQzMDU2LDAsLjA4MzM0LC41MDMxM10sMTEzOlsuMTk0NDQsLjQzMDU2LC4wMzU4OCwuMDgzMzQsLjQ0NjQxXSwxMTQ6WzAsLjQzMDU2LC4wMjc3OCwuMDU1NTYsLjQ1MTE2XSwxMTU6WzAsLjQzMDU2LDAsLjA1NTU2LC40Njg3NV0sMTE2OlswLC42MTUwOCwwLC4wODMzNCwuMzYxMTFdLDExNzpbMCwuNDMwNTYsMCwuMDI3NzgsLjU3MjQ2XSwxMTg6WzAsLjQzMDU2LC4wMzU4OCwuMDI3NzgsLjQ4NDcyXSwxMTk6WzAsLjQzMDU2LC4wMjY5MSwuMDgzMzQsLjcxNTkyXSwxMjA6WzAsLjQzMDU2LDAsLjAyNzc4LC41NzE1M10sMTIxOlsuMTk0NDQsLjQzMDU2LC4wMzU4OCwuMDU1NTYsLjQ5MDI4XSwxMjI6WzAsLjQzMDU2LC4wNDM5OCwuMDU1NTYsLjQ2NTA1XSwxNjA6WzAsMCwwLDAsLjI1XSw5MTU6WzAsLjY4MzMzLC4xMzg4OSwuMDgzMzQsLjYxNTI4XSw5MTY6WzAsLjY4MzMzLDAsLjE2NjY3LC44MzMzNF0sOTIwOlswLC42ODMzMywuMDI3NzgsLjA4MzM0LC43NjI3OF0sOTIzOlswLC42ODMzMywwLC4xNjY2NywuNjk0NDVdLDkyNjpbMCwuNjgzMzMsLjA3NTY5LC4wODMzNCwuNzQyMzZdLDkyODpbMCwuNjgzMzMsLjA4MTI1LC4wNTU1NiwuODMxMjVdLDkzMTpbMCwuNjgzMzMsLjA1NzY0LC4wODMzNCwuNzc5ODZdLDkzMzpbMCwuNjgzMzMsLjEzODg5LC4wNTU1NiwuNTgzMzNdLDkzNDpbMCwuNjgzMzMsMCwuMDgzMzQsLjY2NjY3XSw5MzY6WzAsLjY4MzMzLC4xMSwuMDU1NTYsLjYxMjIyXSw5Mzc6WzAsLjY4MzMzLC4wNTAxNywuMDgzMzQsLjc3MjRdLDk0NTpbMCwuNDMwNTYsLjAwMzcsLjAyNzc4LC42Mzk3XSw5NDY6Wy4xOTQ0NCwuNjk0NDQsLjA1Mjc4LC4wODMzNCwuNTY1NjNdLDk0NzpbLjE5NDQ0LC40MzA1NiwuMDU1NTYsMCwuNTE3NzNdLDk0ODpbMCwuNjk0NDQsLjAzNzg1LC4wNTU1NiwuNDQ0NDRdLDk0OTpbMCwuNDMwNTYsMCwuMDgzMzQsLjQ2NjMyXSw5NTA6Wy4xOTQ0NCwuNjk0NDQsLjA3Mzc4LC4wODMzNCwuNDM3NV0sOTUxOlsuMTk0NDQsLjQzMDU2LC4wMzU4OCwuMDU1NTYsLjQ5NjUzXSw5NTI6WzAsLjY5NDQ0LC4wMjc3OCwuMDgzMzQsLjQ2OTQ0XSw5NTM6WzAsLjQzMDU2LDAsLjA1NTU2LC4zNTM5NF0sOTU0OlswLC40MzA1NiwwLDAsLjU3NjE2XSw5NTU6WzAsLjY5NDQ0LDAsMCwuNTgzMzRdLDk1NjpbLjE5NDQ0LC40MzA1NiwwLC4wMjc3OCwuNjAyNTVdLDk1NzpbMCwuNDMwNTYsLjA2MzY2LC4wMjc3OCwuNDkzOThdLDk1ODpbLjE5NDQ0LC42OTQ0NCwuMDQ2MDEsLjExMTExLC40Mzc1XSw5NTk6WzAsLjQzMDU2LDAsLjA1NTU2LC40ODQ3Ml0sOTYwOlswLC40MzA1NiwuMDM1ODgsMCwuNTcwMDNdLDk2MTpbLjE5NDQ0LC40MzA1NiwwLC4wODMzNCwuNTE3MDJdLDk2MjpbLjA5NzIyLC40MzA1NiwuMDc5ODYsLjA4MzM0LC4zNjI4NV0sOTYzOlswLC40MzA1NiwuMDM1ODgsMCwuNTcxNDFdLDk2NDpbMCwuNDMwNTYsLjExMzIsLjAyNzc4LC40MzcxNV0sOTY1OlswLC40MzA1NiwuMDM1ODgsLjAyNzc4LC41NDAyOF0sOTY2OlsuMTk0NDQsLjQzMDU2LDAsLjA4MzM0LC42NTQxN10sOTY3OlsuMTk0NDQsLjQzMDU2LDAsLjA1NTU2LC42MjU2OV0sOTY4OlsuMTk0NDQsLjY5NDQ0LC4wMzU4OCwuMTExMTEsLjY1MTM5XSw5Njk6WzAsLjQzMDU2LC4wMzU4OCwwLC42MjI0NV0sOTc3OlswLC42OTQ0NCwwLC4wODMzNCwuNTkxNDRdLDk4MTpbLjE5NDQ0LC42OTQ0NCwwLC4wODMzNCwuNTk1ODNdLDk4MjpbMCwuNDMwNTYsLjAyNzc4LDAsLjgyODEzXSwxMDA5OlsuMTk0NDQsLjQzMDU2LDAsLjA4MzM0LC41MTcwMl0sMTAxMzpbMCwuNDMwNTYsMCwuMDU1NTYsLjQwNTldLDU3NjQ5OlswLC40MzA1NiwwLC4wMjc3OCwuMzIyNDZdLDU3OTExOlsuMTk0NDQsLjQzMDU2LDAsLjA4MzM0LC4zODQwM119LCJTYW5zU2VyaWYtQm9sZCI6ezMyOlswLDAsMCwwLC4yNV0sMzM6WzAsLjY5NDQ0LDAsMCwuMzY2NjddLDM0OlswLC42OTQ0NCwwLDAsLjU1ODM0XSwzNTpbLjE5NDQ0LC42OTQ0NCwwLDAsLjkxNjY3XSwzNjpbLjA1NTU2LC43NSwwLDAsLjU1XSwzNzpbLjA1NTU2LC43NSwwLDAsMS4wMjkxMl0sMzg6WzAsLjY5NDQ0LDAsMCwuODMwNTZdLDM5OlswLC42OTQ0NCwwLDAsLjMwNTU2XSw0MDpbLjI1LC43NSwwLDAsLjQyNzc4XSw0MTpbLjI1LC43NSwwLDAsLjQyNzc4XSw0MjpbMCwuNzUsMCwwLC41NV0sNDM6Wy4xMTY2NywuNjE2NjcsMCwwLC44NTU1Nl0sNDQ6Wy4xMDU1NiwuMTMwNTYsMCwwLC4zMDU1Nl0sNDU6WzAsLjQ1ODMzLDAsMCwuMzY2NjddLDQ2OlswLC4xMzA1NiwwLDAsLjMwNTU2XSw0NzpbLjI1LC43NSwwLDAsLjU1XSw0ODpbMCwuNjk0NDQsMCwwLC41NV0sNDk6WzAsLjY5NDQ0LDAsMCwuNTVdLDUwOlswLC42OTQ0NCwwLDAsLjU1XSw1MTpbMCwuNjk0NDQsMCwwLC41NV0sNTI6WzAsLjY5NDQ0LDAsMCwuNTVdLDUzOlswLC42OTQ0NCwwLDAsLjU1XSw1NDpbMCwuNjk0NDQsMCwwLC41NV0sNTU6WzAsLjY5NDQ0LDAsMCwuNTVdLDU2OlswLC42OTQ0NCwwLDAsLjU1XSw1NzpbMCwuNjk0NDQsMCwwLC41NV0sNTg6WzAsLjQ1ODMzLDAsMCwuMzA1NTZdLDU5OlsuMTA1NTYsLjQ1ODMzLDAsMCwuMzA1NTZdLDYxOlstLjA5Mzc1LC40MDYyNSwwLDAsLjg1NTU2XSw2MzpbMCwuNjk0NDQsMCwwLC41MTk0NV0sNjQ6WzAsLjY5NDQ0LDAsMCwuNzMzMzRdLDY1OlswLC42OTQ0NCwwLDAsLjczMzM0XSw2NjpbMCwuNjk0NDQsMCwwLC43MzMzNF0sNjc6WzAsLjY5NDQ0LDAsMCwuNzAyNzhdLDY4OlswLC42OTQ0NCwwLDAsLjc5NDQ1XSw2OTpbMCwuNjk0NDQsMCwwLC42NDE2N10sNzA6WzAsLjY5NDQ0LDAsMCwuNjExMTFdLDcxOlswLC42OTQ0NCwwLDAsLjczMzM0XSw3MjpbMCwuNjk0NDQsMCwwLC43OTQ0NV0sNzM6WzAsLjY5NDQ0LDAsMCwuMzMwNTZdLDc0OlswLC42OTQ0NCwwLDAsLjUxOTQ1XSw3NTpbMCwuNjk0NDQsMCwwLC43NjM4OV0sNzY6WzAsLjY5NDQ0LDAsMCwuNTgwNTZdLDc3OlswLC42OTQ0NCwwLDAsLjk3Nzc4XSw3ODpbMCwuNjk0NDQsMCwwLC43OTQ0NV0sNzk6WzAsLjY5NDQ0LDAsMCwuNzk0NDVdLDgwOlswLC42OTQ0NCwwLDAsLjcwMjc4XSw4MTpbLjEwNTU2LC42OTQ0NCwwLDAsLjc5NDQ1XSw4MjpbMCwuNjk0NDQsMCwwLC43MDI3OF0sODM6WzAsLjY5NDQ0LDAsMCwuNjExMTFdLDg0OlswLC42OTQ0NCwwLDAsLjczMzM0XSw4NTpbMCwuNjk0NDQsMCwwLC43NjM4OV0sODY6WzAsLjY5NDQ0LC4wMTUyOCwwLC43MzMzNF0sODc6WzAsLjY5NDQ0LC4wMTUyOCwwLDEuMDM4ODldLDg4OlswLC42OTQ0NCwwLDAsLjczMzM0XSw4OTpbMCwuNjk0NDQsLjAyNzUsMCwuNzMzMzRdLDkwOlswLC42OTQ0NCwwLDAsLjY3MjIzXSw5MTpbLjI1LC43NSwwLDAsLjM0MzA2XSw5MzpbLjI1LC43NSwwLDAsLjM0MzA2XSw5NDpbMCwuNjk0NDQsMCwwLC41NV0sOTU6Wy4zNSwuMTA4MzMsLjAzMDU2LDAsLjU1XSw5NzpbMCwuNDU4MzMsMCwwLC41MjVdLDk4OlswLC42OTQ0NCwwLDAsLjU2MTExXSw5OTpbMCwuNDU4MzMsMCwwLC40ODg4OV0sMTAwOlswLC42OTQ0NCwwLDAsLjU2MTExXSwxMDE6WzAsLjQ1ODMzLDAsMCwuNTExMTFdLDEwMjpbMCwuNjk0NDQsLjA3NjM5LDAsLjMzNjExXSwxMDM6Wy4xOTQ0NCwuNDU4MzMsLjAxNTI4LDAsLjU1XSwxMDQ6WzAsLjY5NDQ0LDAsMCwuNTYxMTFdLDEwNTpbMCwuNjk0NDQsMCwwLC4yNTU1Nl0sMTA2OlsuMTk0NDQsLjY5NDQ0LDAsMCwuMjg2MTFdLDEwNzpbMCwuNjk0NDQsMCwwLC41MzA1Nl0sMTA4OlswLC42OTQ0NCwwLDAsLjI1NTU2XSwxMDk6WzAsLjQ1ODMzLDAsMCwuODY2NjddLDExMDpbMCwuNDU4MzMsMCwwLC41NjExMV0sMTExOlswLC40NTgzMywwLDAsLjU1XSwxMTI6Wy4xOTQ0NCwuNDU4MzMsMCwwLC41NjExMV0sMTEzOlsuMTk0NDQsLjQ1ODMzLDAsMCwuNTYxMTFdLDExNDpbMCwuNDU4MzMsLjAxNTI4LDAsLjM3MjIyXSwxMTU6WzAsLjQ1ODMzLDAsMCwuNDIxNjddLDExNjpbMCwuNTg5MjksMCwwLC40MDQxN10sMTE3OlswLC40NTgzMywwLDAsLjU2MTExXSwxMTg6WzAsLjQ1ODMzLC4wMTUyOCwwLC41XSwxMTk6WzAsLjQ1ODMzLC4wMTUyOCwwLC43NDQ0NV0sMTIwOlswLC40NTgzMywwLDAsLjVdLDEyMTpbLjE5NDQ0LC40NTgzMywuMDE1MjgsMCwuNV0sMTIyOlswLC40NTgzMywwLDAsLjQ3NjM5XSwxMjY6Wy4zNSwuMzQ0NDQsMCwwLC41NV0sMTYwOlswLDAsMCwwLC4yNV0sMTY4OlswLC42OTQ0NCwwLDAsLjU1XSwxNzY6WzAsLjY5NDQ0LDAsMCwuNzMzMzRdLDE4MDpbMCwuNjk0NDQsMCwwLC41NV0sMTg0OlsuMTcwMTQsMCwwLDAsLjQ4ODg5XSwzMDU6WzAsLjQ1ODMzLDAsMCwuMjU1NTZdLDU2NzpbLjE5NDQ0LC40NTgzMywwLDAsLjI4NjExXSw3MTA6WzAsLjY5NDQ0LDAsMCwuNTVdLDcxMTpbMCwuNjM1NDIsMCwwLC41NV0sNzEzOlswLC42Mzc3OCwwLDAsLjU1XSw3Mjg6WzAsLjY5NDQ0LDAsMCwuNTVdLDcyOTpbMCwuNjk0NDQsMCwwLC4zMDU1Nl0sNzMwOlswLC42OTQ0NCwwLDAsLjczMzM0XSw3MzI6WzAsLjY5NDQ0LDAsMCwuNTVdLDczMzpbMCwuNjk0NDQsMCwwLC41NV0sOTE1OlswLC42OTQ0NCwwLDAsLjU4MDU2XSw5MTY6WzAsLjY5NDQ0LDAsMCwuOTE2NjddLDkyMDpbMCwuNjk0NDQsMCwwLC44NTU1Nl0sOTIzOlswLC42OTQ0NCwwLDAsLjY3MjIzXSw5MjY6WzAsLjY5NDQ0LDAsMCwuNzMzMzRdLDkyODpbMCwuNjk0NDQsMCwwLC43OTQ0NV0sOTMxOlswLC42OTQ0NCwwLDAsLjc5NDQ1XSw5MzM6WzAsLjY5NDQ0LDAsMCwuODU1NTZdLDkzNDpbMCwuNjk0NDQsMCwwLC43OTQ0NV0sOTM2OlswLC42OTQ0NCwwLDAsLjg1NTU2XSw5Mzc6WzAsLjY5NDQ0LDAsMCwuNzk0NDVdLDgyMTE6WzAsLjQ1ODMzLC4wMzA1NiwwLC41NV0sODIxMjpbMCwuNDU4MzMsLjAzMDU2LDAsMS4xMDAwMV0sODIxNjpbMCwuNjk0NDQsMCwwLC4zMDU1Nl0sODIxNzpbMCwuNjk0NDQsMCwwLC4zMDU1Nl0sODIyMDpbMCwuNjk0NDQsMCwwLC41NTgzNF0sODIyMTpbMCwuNjk0NDQsMCwwLC41NTgzNF19LCJTYW5zU2VyaWYtSXRhbGljIjp7MzI6WzAsMCwwLDAsLjI1XSwzMzpbMCwuNjk0NDQsLjA1NzMzLDAsLjMxOTQ1XSwzNDpbMCwuNjk0NDQsLjAwMzE2LDAsLjVdLDM1OlsuMTk0NDQsLjY5NDQ0LC4wNTA4NywwLC44MzMzNF0sMzY6Wy4wNTU1NiwuNzUsLjExMTU2LDAsLjVdLDM3OlsuMDU1NTYsLjc1LC4wMzEyNiwwLC44MzMzNF0sMzg6WzAsLjY5NDQ0LC4wMzA1OCwwLC43NTgzNF0sMzk6WzAsLjY5NDQ0LC4wNzgxNiwwLC4yNzc3OF0sNDA6Wy4yNSwuNzUsLjEzMTY0LDAsLjM4ODg5XSw0MTpbLjI1LC43NSwuMDI1MzYsMCwuMzg4ODldLDQyOlswLC43NSwuMTE3NzUsMCwuNV0sNDM6Wy4wODMzMywuNTgzMzMsLjAyNTM2LDAsLjc3Nzc4XSw0NDpbLjEyNSwuMDgzMzMsMCwwLC4yNzc3OF0sNDU6WzAsLjQ0NDQ0LC4wMTk0NiwwLC4zMzMzM10sNDY6WzAsLjA4MzMzLDAsMCwuMjc3NzhdLDQ3OlsuMjUsLjc1LC4xMzE2NCwwLC41XSw0ODpbMCwuNjU1NTYsLjExMTU2LDAsLjVdLDQ5OlswLC42NTU1NiwuMTExNTYsMCwuNV0sNTA6WzAsLjY1NTU2LC4xMTE1NiwwLC41XSw1MTpbMCwuNjU1NTYsLjExMTU2LDAsLjVdLDUyOlswLC42NTU1NiwuMTExNTYsMCwuNV0sNTM6WzAsLjY1NTU2LC4xMTE1NiwwLC41XSw1NDpbMCwuNjU1NTYsLjExMTU2LDAsLjVdLDU1OlswLC42NTU1NiwuMTExNTYsMCwuNV0sNTY6WzAsLjY1NTU2LC4xMTE1NiwwLC41XSw1NzpbMCwuNjU1NTYsLjExMTU2LDAsLjVdLDU4OlswLC40NDQ0NCwuMDI1MDIsMCwuMjc3NzhdLDU5OlsuMTI1LC40NDQ0NCwuMDI1MDIsMCwuMjc3NzhdLDYxOlstLjEzLC4zNywuMDUwODcsMCwuNzc3NzhdLDYzOlswLC42OTQ0NCwuMTE4MDksMCwuNDcyMjJdLDY0OlswLC42OTQ0NCwuMDc1NTUsMCwuNjY2NjddLDY1OlswLC42OTQ0NCwwLDAsLjY2NjY3XSw2NjpbMCwuNjk0NDQsLjA4MjkzLDAsLjY2NjY3XSw2NzpbMCwuNjk0NDQsLjExOTgzLDAsLjYzODg5XSw2ODpbMCwuNjk0NDQsLjA3NTU1LDAsLjcyMjIzXSw2OTpbMCwuNjk0NDQsLjExOTgzLDAsLjU5NzIyXSw3MDpbMCwuNjk0NDQsLjEzMzcyLDAsLjU2OTQ1XSw3MTpbMCwuNjk0NDQsLjExOTgzLDAsLjY2NjY3XSw3MjpbMCwuNjk0NDQsLjA4MDk0LDAsLjcwODM0XSw3MzpbMCwuNjk0NDQsLjEzMzcyLDAsLjI3Nzc4XSw3NDpbMCwuNjk0NDQsLjA4MDk0LDAsLjQ3MjIyXSw3NTpbMCwuNjk0NDQsLjExOTgzLDAsLjY5NDQ1XSw3NjpbMCwuNjk0NDQsMCwwLC41NDE2N10sNzc6WzAsLjY5NDQ0LC4wODA5NCwwLC44NzVdLDc4OlswLC42OTQ0NCwuMDgwOTQsMCwuNzA4MzRdLDc5OlswLC42OTQ0NCwuMDc1NTUsMCwuNzM2MTFdLDgwOlswLC42OTQ0NCwuMDgyOTMsMCwuNjM4ODldLDgxOlsuMTI1LC42OTQ0NCwuMDc1NTUsMCwuNzM2MTFdLDgyOlswLC42OTQ0NCwuMDgyOTMsMCwuNjQ1ODRdLDgzOlswLC42OTQ0NCwuMDkyMDUsMCwuNTU1NTZdLDg0OlswLC42OTQ0NCwuMTMzNzIsMCwuNjgwNTZdLDg1OlswLC42OTQ0NCwuMDgwOTQsMCwuNjg3NV0sODY6WzAsLjY5NDQ0LC4xNjE1LDAsLjY2NjY3XSw4NzpbMCwuNjk0NDQsLjE2MTUsMCwuOTQ0NDVdLDg4OlswLC42OTQ0NCwuMTMzNzIsMCwuNjY2NjddLDg5OlswLC42OTQ0NCwuMTcyNjEsMCwuNjY2NjddLDkwOlswLC42OTQ0NCwuMTE5ODMsMCwuNjExMTFdLDkxOlsuMjUsLjc1LC4xNTk0MiwwLC4yODg4OV0sOTM6Wy4yNSwuNzUsLjA4NzE5LDAsLjI4ODg5XSw5NDpbMCwuNjk0NDQsLjA3OTksMCwuNV0sOTU6Wy4zNSwuMDk0NDQsLjA4NjE2LDAsLjVdLDk3OlswLC40NDQ0NCwuMDA5ODEsMCwuNDgwNTZdLDk4OlswLC42OTQ0NCwuMDMwNTcsMCwuNTE2NjddLDk5OlswLC40NDQ0NCwuMDgzMzYsMCwuNDQ0NDVdLDEwMDpbMCwuNjk0NDQsLjA5NDgzLDAsLjUxNjY3XSwxMDE6WzAsLjQ0NDQ0LC4wNjc3OCwwLC40NDQ0NV0sMTAyOlswLC42OTQ0NCwuMjE3MDUsMCwuMzA1NTZdLDEwMzpbLjE5NDQ0LC40NDQ0NCwuMTA4MzYsMCwuNV0sMTA0OlswLC42OTQ0NCwuMDE3NzgsMCwuNTE2NjddLDEwNTpbMCwuNjc5MzcsLjA5NzE4LDAsLjIzODg5XSwxMDY6Wy4xOTQ0NCwuNjc5MzcsLjA5MTYyLDAsLjI2NjY3XSwxMDc6WzAsLjY5NDQ0LC4wODMzNiwwLC40ODg4OV0sMTA4OlswLC42OTQ0NCwuMDk0ODMsMCwuMjM4ODldLDEwOTpbMCwuNDQ0NDQsLjAxNzc4LDAsLjc5NDQ1XSwxMTA6WzAsLjQ0NDQ0LC4wMTc3OCwwLC41MTY2N10sMTExOlswLC40NDQ0NCwuMDY2MTMsMCwuNV0sMTEyOlsuMTk0NDQsLjQ0NDQ0LC4wMzg5LDAsLjUxNjY3XSwxMTM6Wy4xOTQ0NCwuNDQ0NDQsLjA0MTY5LDAsLjUxNjY3XSwxMTQ6WzAsLjQ0NDQ0LC4xMDgzNiwwLC4zNDE2N10sMTE1OlswLC40NDQ0NCwuMDc3OCwwLC4zODMzM10sMTE2OlswLC41NzE0MywuMDcyMjUsMCwuMzYxMTFdLDExNzpbMCwuNDQ0NDQsLjA0MTY5LDAsLjUxNjY3XSwxMTg6WzAsLjQ0NDQ0LC4xMDgzNiwwLC40NjExMV0sMTE5OlswLC40NDQ0NCwuMTA4MzYsMCwuNjgzMzRdLDEyMDpbMCwuNDQ0NDQsLjA5MTY5LDAsLjQ2MTExXSwxMjE6Wy4xOTQ0NCwuNDQ0NDQsLjEwODM2LDAsLjQ2MTExXSwxMjI6WzAsLjQ0NDQ0LC4wODc1MiwwLC40MzQ3Ml0sMTI2OlsuMzUsLjMyNjU5LC4wODgyNiwwLC41XSwxNjA6WzAsMCwwLDAsLjI1XSwxNjg6WzAsLjY3OTM3LC4wNjM4NSwwLC41XSwxNzY6WzAsLjY5NDQ0LDAsMCwuNzM3NTJdLDE4NDpbLjE3MDE0LDAsMCwwLC40NDQ0NV0sMzA1OlswLC40NDQ0NCwuMDQxNjksMCwuMjM4ODldLDU2NzpbLjE5NDQ0LC40NDQ0NCwuMDQxNjksMCwuMjY2NjddLDcxMDpbMCwuNjk0NDQsLjA3OTksMCwuNV0sNzExOlswLC42MzE5NCwuMDg0MzIsMCwuNV0sNzEzOlswLC42MDg4OSwuMDg3NzYsMCwuNV0sNzE0OlswLC42OTQ0NCwuMDkyMDUsMCwuNV0sNzE1OlswLC42OTQ0NCwwLDAsLjVdLDcyODpbMCwuNjk0NDQsLjA5NDgzLDAsLjVdLDcyOTpbMCwuNjc5MzcsLjA3Nzc0LDAsLjI3Nzc4XSw3MzA6WzAsLjY5NDQ0LDAsMCwuNzM3NTJdLDczMjpbMCwuNjc2NTksLjA4ODI2LDAsLjVdLDczMzpbMCwuNjk0NDQsLjA5MjA1LDAsLjVdLDkxNTpbMCwuNjk0NDQsLjEzMzcyLDAsLjU0MTY3XSw5MTY6WzAsLjY5NDQ0LDAsMCwuODMzMzRdLDkyMDpbMCwuNjk0NDQsLjA3NTU1LDAsLjc3Nzc4XSw5MjM6WzAsLjY5NDQ0LDAsMCwuNjExMTFdLDkyNjpbMCwuNjk0NDQsLjEyODE2LDAsLjY2NjY3XSw5Mjg6WzAsLjY5NDQ0LC4wODA5NCwwLC43MDgzNF0sOTMxOlswLC42OTQ0NCwuMTE5ODMsMCwuNzIyMjJdLDkzMzpbMCwuNjk0NDQsLjA5MDMxLDAsLjc3Nzc4XSw5MzQ6WzAsLjY5NDQ0LC4wNDYwMywwLC43MjIyMl0sOTM2OlswLC42OTQ0NCwuMDkwMzEsMCwuNzc3NzhdLDkzNzpbMCwuNjk0NDQsLjA4MjkzLDAsLjcyMjIyXSw4MjExOlswLC40NDQ0NCwuMDg2MTYsMCwuNV0sODIxMjpbMCwuNDQ0NDQsLjA4NjE2LDAsMV0sODIxNjpbMCwuNjk0NDQsLjA3ODE2LDAsLjI3Nzc4XSw4MjE3OlswLC42OTQ0NCwuMDc4MTYsMCwuMjc3NzhdLDgyMjA6WzAsLjY5NDQ0LC4xNDIwNSwwLC41XSw4MjIxOlswLC42OTQ0NCwuMDAzMTYsMCwuNV19LCJTYW5zU2VyaWYtUmVndWxhciI6ezMyOlswLDAsMCwwLC4yNV0sMzM6WzAsLjY5NDQ0LDAsMCwuMzE5NDVdLDM0OlswLC42OTQ0NCwwLDAsLjVdLDM1OlsuMTk0NDQsLjY5NDQ0LDAsMCwuODMzMzRdLDM2OlsuMDU1NTYsLjc1LDAsMCwuNV0sMzc6Wy4wNTU1NiwuNzUsMCwwLC44MzMzNF0sMzg6WzAsLjY5NDQ0LDAsMCwuNzU4MzRdLDM5OlswLC42OTQ0NCwwLDAsLjI3Nzc4XSw0MDpbLjI1LC43NSwwLDAsLjM4ODg5XSw0MTpbLjI1LC43NSwwLDAsLjM4ODg5XSw0MjpbMCwuNzUsMCwwLC41XSw0MzpbLjA4MzMzLC41ODMzMywwLDAsLjc3Nzc4XSw0NDpbLjEyNSwuMDgzMzMsMCwwLC4yNzc3OF0sNDU6WzAsLjQ0NDQ0LDAsMCwuMzMzMzNdLDQ2OlswLC4wODMzMywwLDAsLjI3Nzc4XSw0NzpbLjI1LC43NSwwLDAsLjVdLDQ4OlswLC42NTU1NiwwLDAsLjVdLDQ5OlswLC42NTU1NiwwLDAsLjVdLDUwOlswLC42NTU1NiwwLDAsLjVdLDUxOlswLC42NTU1NiwwLDAsLjVdLDUyOlswLC42NTU1NiwwLDAsLjVdLDUzOlswLC42NTU1NiwwLDAsLjVdLDU0OlswLC42NTU1NiwwLDAsLjVdLDU1OlswLC42NTU1NiwwLDAsLjVdLDU2OlswLC42NTU1NiwwLDAsLjVdLDU3OlswLC42NTU1NiwwLDAsLjVdLDU4OlswLC40NDQ0NCwwLDAsLjI3Nzc4XSw1OTpbLjEyNSwuNDQ0NDQsMCwwLC4yNzc3OF0sNjE6Wy0uMTMsLjM3LDAsMCwuNzc3NzhdLDYzOlswLC42OTQ0NCwwLDAsLjQ3MjIyXSw2NDpbMCwuNjk0NDQsMCwwLC42NjY2N10sNjU6WzAsLjY5NDQ0LDAsMCwuNjY2NjddLDY2OlswLC42OTQ0NCwwLDAsLjY2NjY3XSw2NzpbMCwuNjk0NDQsMCwwLC42Mzg4OV0sNjg6WzAsLjY5NDQ0LDAsMCwuNzIyMjNdLDY5OlswLC42OTQ0NCwwLDAsLjU5NzIyXSw3MDpbMCwuNjk0NDQsMCwwLC41Njk0NV0sNzE6WzAsLjY5NDQ0LDAsMCwuNjY2NjddLDcyOlswLC42OTQ0NCwwLDAsLjcwODM0XSw3MzpbMCwuNjk0NDQsMCwwLC4yNzc3OF0sNzQ6WzAsLjY5NDQ0LDAsMCwuNDcyMjJdLDc1OlswLC42OTQ0NCwwLDAsLjY5NDQ1XSw3NjpbMCwuNjk0NDQsMCwwLC41NDE2N10sNzc6WzAsLjY5NDQ0LDAsMCwuODc1XSw3ODpbMCwuNjk0NDQsMCwwLC43MDgzNF0sNzk6WzAsLjY5NDQ0LDAsMCwuNzM2MTFdLDgwOlswLC42OTQ0NCwwLDAsLjYzODg5XSw4MTpbLjEyNSwuNjk0NDQsMCwwLC43MzYxMV0sODI6WzAsLjY5NDQ0LDAsMCwuNjQ1ODRdLDgzOlswLC42OTQ0NCwwLDAsLjU1NTU2XSw4NDpbMCwuNjk0NDQsMCwwLC42ODA1Nl0sODU6WzAsLjY5NDQ0LDAsMCwuNjg3NV0sODY6WzAsLjY5NDQ0LC4wMTM4OSwwLC42NjY2N10sODc6WzAsLjY5NDQ0LC4wMTM4OSwwLC45NDQ0NV0sODg6WzAsLjY5NDQ0LDAsMCwuNjY2NjddLDg5OlswLC42OTQ0NCwuMDI1LDAsLjY2NjY3XSw5MDpbMCwuNjk0NDQsMCwwLC42MTExMV0sOTE6Wy4yNSwuNzUsMCwwLC4yODg4OV0sOTM6Wy4yNSwuNzUsMCwwLC4yODg4OV0sOTQ6WzAsLjY5NDQ0LDAsMCwuNV0sOTU6Wy4zNSwuMDk0NDQsLjAyNzc4LDAsLjVdLDk3OlswLC40NDQ0NCwwLDAsLjQ4MDU2XSw5ODpbMCwuNjk0NDQsMCwwLC41MTY2N10sOTk6WzAsLjQ0NDQ0LDAsMCwuNDQ0NDVdLDEwMDpbMCwuNjk0NDQsMCwwLC41MTY2N10sMTAxOlswLC40NDQ0NCwwLDAsLjQ0NDQ1XSwxMDI6WzAsLjY5NDQ0LC4wNjk0NCwwLC4zMDU1Nl0sMTAzOlsuMTk0NDQsLjQ0NDQ0LC4wMTM4OSwwLC41XSwxMDQ6WzAsLjY5NDQ0LDAsMCwuNTE2NjddLDEwNTpbMCwuNjc5MzcsMCwwLC4yMzg4OV0sMTA2OlsuMTk0NDQsLjY3OTM3LDAsMCwuMjY2NjddLDEwNzpbMCwuNjk0NDQsMCwwLC40ODg4OV0sMTA4OlswLC42OTQ0NCwwLDAsLjIzODg5XSwxMDk6WzAsLjQ0NDQ0LDAsMCwuNzk0NDVdLDExMDpbMCwuNDQ0NDQsMCwwLC41MTY2N10sMTExOlswLC40NDQ0NCwwLDAsLjVdLDExMjpbLjE5NDQ0LC40NDQ0NCwwLDAsLjUxNjY3XSwxMTM6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC41MTY2N10sMTE0OlswLC40NDQ0NCwuMDEzODksMCwuMzQxNjddLDExNTpbMCwuNDQ0NDQsMCwwLC4zODMzM10sMTE2OlswLC41NzE0MywwLDAsLjM2MTExXSwxMTc6WzAsLjQ0NDQ0LDAsMCwuNTE2NjddLDExODpbMCwuNDQ0NDQsLjAxMzg5LDAsLjQ2MTExXSwxMTk6WzAsLjQ0NDQ0LC4wMTM4OSwwLC42ODMzNF0sMTIwOlswLC40NDQ0NCwwLDAsLjQ2MTExXSwxMjE6Wy4xOTQ0NCwuNDQ0NDQsLjAxMzg5LDAsLjQ2MTExXSwxMjI6WzAsLjQ0NDQ0LDAsMCwuNDM0NzJdLDEyNjpbLjM1LC4zMjY1OSwwLDAsLjVdLDE2MDpbMCwwLDAsMCwuMjVdLDE2ODpbMCwuNjc5MzcsMCwwLC41XSwxNzY6WzAsLjY5NDQ0LDAsMCwuNjY2NjddLDE4NDpbLjE3MDE0LDAsMCwwLC40NDQ0NV0sMzA1OlswLC40NDQ0NCwwLDAsLjIzODg5XSw1Njc6Wy4xOTQ0NCwuNDQ0NDQsMCwwLC4yNjY2N10sNzEwOlswLC42OTQ0NCwwLDAsLjVdLDcxMTpbMCwuNjMxOTQsMCwwLC41XSw3MTM6WzAsLjYwODg5LDAsMCwuNV0sNzE0OlswLC42OTQ0NCwwLDAsLjVdLDcxNTpbMCwuNjk0NDQsMCwwLC41XSw3Mjg6WzAsLjY5NDQ0LDAsMCwuNV0sNzI5OlswLC42NzkzNywwLDAsLjI3Nzc4XSw3MzA6WzAsLjY5NDQ0LDAsMCwuNjY2NjddLDczMjpbMCwuNjc2NTksMCwwLC41XSw3MzM6WzAsLjY5NDQ0LDAsMCwuNV0sOTE1OlswLC42OTQ0NCwwLDAsLjU0MTY3XSw5MTY6WzAsLjY5NDQ0LDAsMCwuODMzMzRdLDkyMDpbMCwuNjk0NDQsMCwwLC43Nzc3OF0sOTIzOlswLC42OTQ0NCwwLDAsLjYxMTExXSw5MjY6WzAsLjY5NDQ0LDAsMCwuNjY2NjddLDkyODpbMCwuNjk0NDQsMCwwLC43MDgzNF0sOTMxOlswLC42OTQ0NCwwLDAsLjcyMjIyXSw5MzM6WzAsLjY5NDQ0LDAsMCwuNzc3NzhdLDkzNDpbMCwuNjk0NDQsMCwwLC43MjIyMl0sOTM2OlswLC42OTQ0NCwwLDAsLjc3Nzc4XSw5Mzc6WzAsLjY5NDQ0LDAsMCwuNzIyMjJdLDgyMTE6WzAsLjQ0NDQ0LC4wMjc3OCwwLC41XSw4MjEyOlswLC40NDQ0NCwuMDI3NzgsMCwxXSw4MjE2OlswLC42OTQ0NCwwLDAsLjI3Nzc4XSw4MjE3OlswLC42OTQ0NCwwLDAsLjI3Nzc4XSw4MjIwOlswLC42OTQ0NCwwLDAsLjVdLDgyMjE6WzAsLjY5NDQ0LDAsMCwuNV19LCJTY3JpcHQtUmVndWxhciI6ezMyOlswLDAsMCwwLC4yNV0sNjU6WzAsLjcsLjIyOTI1LDAsLjgwMjUzXSw2NjpbMCwuNywuMDQwODcsMCwuOTA3NTddLDY3OlswLC43LC4xNjg5LDAsLjY2NjE5XSw2ODpbMCwuNywuMDkzNzEsMCwuNzc0NDNdLDY5OlswLC43LC4xODU4MywwLC41NjE2Ml0sNzA6WzAsLjcsLjEzNjM0LDAsLjg5NTQ0XSw3MTpbMCwuNywuMTczMjIsMCwuNjA5NjFdLDcyOlswLC43LC4yOTY5NCwwLC45NjkxOV0sNzM6WzAsLjcsLjE5MTg5LDAsLjgwOTA3XSw3NDpbLjI3Nzc4LC43LC4xOTE4OSwwLDEuMDUxNTldLDc1OlswLC43LC4zMTI1OSwwLC45MTM2NF0sNzY6WzAsLjcsLjE5MTg5LDAsLjg3MzczXSw3NzpbMCwuNywuMTU5ODEsMCwxLjA4MDMxXSw3ODpbMCwuNywuMzUyNSwwLC45MDE1XSw3OTpbMCwuNywuMDgwNzgsMCwuNzM3ODddLDgwOlswLC43LC4wODA3OCwwLDEuMDEyNjJdLDgxOlswLC43LC4wMzMwNSwwLC44ODI4Ml0sODI6WzAsLjcsLjA2MjU5LDAsLjg1XSw4MzpbMCwuNywuMTkxODksMCwuODY3NjddLDg0OlswLC43LC4yOTA4NywwLC43NDY5N10sODU6WzAsLjcsLjI1ODE1LDAsLjc5OTk2XSw4NjpbMCwuNywuMjc1MjMsMCwuNjIyMDRdLDg3OlswLC43LC4yNzUyMywwLC44MDUzMl0sODg6WzAsLjcsLjI2MDA2LDAsLjk0NDQ1XSw4OTpbMCwuNywuMjkzOSwwLC43MDk2MV0sOTA6WzAsLjcsLjI0MDM3LDAsLjgyMTJdLDE2MDpbMCwwLDAsMCwuMjVdfSwiU2l6ZTEtUmVndWxhciI6ezMyOlswLDAsMCwwLC4yNV0sNDA6Wy4zNTAwMSwuODUsMCwwLC40NTgzNF0sNDE6Wy4zNTAwMSwuODUsMCwwLC40NTgzNF0sNDc6Wy4zNTAwMSwuODUsMCwwLC41Nzc3OF0sOTE6Wy4zNTAwMSwuODUsMCwwLC40MTY2N10sOTI6Wy4zNTAwMSwuODUsMCwwLC41Nzc3OF0sOTM6Wy4zNTAwMSwuODUsMCwwLC40MTY2N10sMTIzOlsuMzUwMDEsLjg1LDAsMCwuNTgzMzRdLDEyNTpbLjM1MDAxLC44NSwwLDAsLjU4MzM0XSwxNjA6WzAsMCwwLDAsLjI1XSw3MTA6WzAsLjcyMjIyLDAsMCwuNTU1NTZdLDczMjpbMCwuNzIyMjIsMCwwLC41NTU1Nl0sNzcwOlswLC43MjIyMiwwLDAsLjU1NTU2XSw3NzE6WzAsLjcyMjIyLDAsMCwuNTU1NTZdLDgyMTQ6Wy05OWUtNSwuNjAxLDAsMCwuNzc3NzhdLDg1OTM6WzFlLTUsLjYsMCwwLC42NjY2N10sODU5NTpbMWUtNSwuNiwwLDAsLjY2NjY3XSw4NjU3OlsxZS01LC42LDAsMCwuNzc3NzhdLDg2NTk6WzFlLTUsLjYsMCwwLC43Nzc3OF0sODcxOTpbLjI1MDAxLC43NSwwLDAsLjk0NDQ1XSw4NzIwOlsuMjUwMDEsLjc1LDAsMCwuOTQ0NDVdLDg3MjE6Wy4yNTAwMSwuNzUsMCwwLDEuMDU1NTZdLDg3MzA6Wy4zNTAwMSwuODUsMCwwLDFdLDg3Mzk6Wy0uMDA1OTksLjYwNiwwLDAsLjMzMzMzXSw4NzQxOlstLjAwNTk5LC42MDYsMCwwLC41NTU1Nl0sODc0NzpbLjMwNjEyLC44MDUsLjE5NDQ1LDAsLjQ3MjIyXSw4NzQ4OlsuMzA2LC44MDUsLjE5NDQ1LDAsLjQ3MjIyXSw4NzQ5OlsuMzA2LC44MDUsLjE5NDQ1LDAsLjQ3MjIyXSw4NzUwOlsuMzA2MTIsLjgwNSwuMTk0NDUsMCwuNDcyMjJdLDg4OTY6Wy4yNTAwMSwuNzUsMCwwLC44MzMzNF0sODg5NzpbLjI1MDAxLC43NSwwLDAsLjgzMzM0XSw4ODk4OlsuMjUwMDEsLjc1LDAsMCwuODMzMzRdLDg4OTk6Wy4yNTAwMSwuNzUsMCwwLC44MzMzNF0sODk2ODpbLjM1MDAxLC44NSwwLDAsLjQ3MjIyXSw4OTY5OlsuMzUwMDEsLjg1LDAsMCwuNDcyMjJdLDg5NzA6Wy4zNTAwMSwuODUsMCwwLC40NzIyMl0sODk3MTpbLjM1MDAxLC44NSwwLDAsLjQ3MjIyXSw5MTY4OlstOTllLTUsLjYwMSwwLDAsLjY2NjY3XSwxMDIxNjpbLjM1MDAxLC44NSwwLDAsLjQ3MjIyXSwxMDIxNzpbLjM1MDAxLC44NSwwLDAsLjQ3MjIyXSwxMDc1MjpbLjI1MDAxLC43NSwwLDAsMS4xMTExMV0sMTA3NTM6Wy4yNTAwMSwuNzUsMCwwLDEuMTExMTFdLDEwNzU0OlsuMjUwMDEsLjc1LDAsMCwxLjExMTExXSwxMDc1NjpbLjI1MDAxLC43NSwwLDAsLjgzMzM0XSwxMDc1ODpbLjI1MDAxLC43NSwwLDAsLjgzMzM0XX0sIlNpemUyLVJlZ3VsYXIiOnszMjpbMCwwLDAsMCwuMjVdLDQwOlsuNjUwMDIsMS4xNSwwLDAsLjU5NzIyXSw0MTpbLjY1MDAyLDEuMTUsMCwwLC41OTcyMl0sNDc6Wy42NTAwMiwxLjE1LDAsMCwuODExMTFdLDkxOlsuNjUwMDIsMS4xNSwwLDAsLjQ3MjIyXSw5MjpbLjY1MDAyLDEuMTUsMCwwLC44MTExMV0sOTM6Wy42NTAwMiwxLjE1LDAsMCwuNDcyMjJdLDEyMzpbLjY1MDAyLDEuMTUsMCwwLC42NjY2N10sMTI1OlsuNjUwMDIsMS4xNSwwLDAsLjY2NjY3XSwxNjA6WzAsMCwwLDAsLjI1XSw3MTA6WzAsLjc1LDAsMCwxXSw3MzI6WzAsLjc1LDAsMCwxXSw3NzA6WzAsLjc1LDAsMCwxXSw3NzE6WzAsLjc1LDAsMCwxXSw4NzE5OlsuNTUwMDEsMS4wNSwwLDAsMS4yNzc3OF0sODcyMDpbLjU1MDAxLDEuMDUsMCwwLDEuMjc3NzhdLDg3MjE6Wy41NTAwMSwxLjA1LDAsMCwxLjQ0NDQ1XSw4NzMwOlsuNjUwMDIsMS4xNSwwLDAsMV0sODc0NzpbLjg2MjI1LDEuMzYsLjQ0NDQ1LDAsLjU1NTU2XSw4NzQ4OlsuODYyLDEuMzYsLjQ0NDQ1LDAsLjU1NTU2XSw4NzQ5OlsuODYyLDEuMzYsLjQ0NDQ1LDAsLjU1NTU2XSw4NzUwOlsuODYyMjUsMS4zNiwuNDQ0NDUsMCwuNTU1NTZdLDg4OTY6Wy41NTAwMSwxLjA1LDAsMCwxLjExMTExXSw4ODk3OlsuNTUwMDEsMS4wNSwwLDAsMS4xMTExMV0sODg5ODpbLjU1MDAxLDEuMDUsMCwwLDEuMTExMTFdLDg4OTk6Wy41NTAwMSwxLjA1LDAsMCwxLjExMTExXSw4OTY4OlsuNjUwMDIsMS4xNSwwLDAsLjUyNzc4XSw4OTY5OlsuNjUwMDIsMS4xNSwwLDAsLjUyNzc4XSw4OTcwOlsuNjUwMDIsMS4xNSwwLDAsLjUyNzc4XSw4OTcxOlsuNjUwMDIsMS4xNSwwLDAsLjUyNzc4XSwxMDIxNjpbLjY1MDAyLDEuMTUsMCwwLC42MTExMV0sMTAyMTc6Wy42NTAwMiwxLjE1LDAsMCwuNjExMTFdLDEwNzUyOlsuNTUwMDEsMS4wNSwwLDAsMS41MTExMl0sMTA3NTM6Wy41NTAwMSwxLjA1LDAsMCwxLjUxMTEyXSwxMDc1NDpbLjU1MDAxLDEuMDUsMCwwLDEuNTExMTJdLDEwNzU2OlsuNTUwMDEsMS4wNSwwLDAsMS4xMTExMV0sMTA3NTg6Wy41NTAwMSwxLjA1LDAsMCwxLjExMTExXX0sIlNpemUzLVJlZ3VsYXIiOnszMjpbMCwwLDAsMCwuMjVdLDQwOlsuOTUwMDMsMS40NSwwLDAsLjczNjExXSw0MTpbLjk1MDAzLDEuNDUsMCwwLC43MzYxMV0sNDc6Wy45NTAwMywxLjQ1LDAsMCwxLjA0NDQ1XSw5MTpbLjk1MDAzLDEuNDUsMCwwLC41Mjc3OF0sOTI6Wy45NTAwMywxLjQ1LDAsMCwxLjA0NDQ1XSw5MzpbLjk1MDAzLDEuNDUsMCwwLC41Mjc3OF0sMTIzOlsuOTUwMDMsMS40NSwwLDAsLjc1XSwxMjU6Wy45NTAwMywxLjQ1LDAsMCwuNzVdLDE2MDpbMCwwLDAsMCwuMjVdLDcxMDpbMCwuNzUsMCwwLDEuNDQ0NDVdLDczMjpbMCwuNzUsMCwwLDEuNDQ0NDVdLDc3MDpbMCwuNzUsMCwwLDEuNDQ0NDVdLDc3MTpbMCwuNzUsMCwwLDEuNDQ0NDVdLDg3MzA6Wy45NTAwMywxLjQ1LDAsMCwxXSw4OTY4OlsuOTUwMDMsMS40NSwwLDAsLjU4MzM0XSw4OTY5OlsuOTUwMDMsMS40NSwwLDAsLjU4MzM0XSw4OTcwOlsuOTUwMDMsMS40NSwwLDAsLjU4MzM0XSw4OTcxOlsuOTUwMDMsMS40NSwwLDAsLjU4MzM0XSwxMDIxNjpbLjk1MDAzLDEuNDUsMCwwLC43NV0sMTAyMTc6Wy45NTAwMywxLjQ1LDAsMCwuNzVdfSwiU2l6ZTQtUmVndWxhciI6ezMyOlswLDAsMCwwLC4yNV0sNDA6WzEuMjUwMDMsMS43NSwwLDAsLjc5MTY3XSw0MTpbMS4yNTAwMywxLjc1LDAsMCwuNzkxNjddLDQ3OlsxLjI1MDAzLDEuNzUsMCwwLDEuMjc3NzhdLDkxOlsxLjI1MDAzLDEuNzUsMCwwLC41ODMzNF0sOTI6WzEuMjUwMDMsMS43NSwwLDAsMS4yNzc3OF0sOTM6WzEuMjUwMDMsMS43NSwwLDAsLjU4MzM0XSwxMjM6WzEuMjUwMDMsMS43NSwwLDAsLjgwNTU2XSwxMjU6WzEuMjUwMDMsMS43NSwwLDAsLjgwNTU2XSwxNjA6WzAsMCwwLDAsLjI1XSw3MTA6WzAsLjgyNSwwLDAsMS44ODg5XSw3MzI6WzAsLjgyNSwwLDAsMS44ODg5XSw3NzA6WzAsLjgyNSwwLDAsMS44ODg5XSw3NzE6WzAsLjgyNSwwLDAsMS44ODg5XSw4NzMwOlsxLjI1MDAzLDEuNzUsMCwwLDFdLDg5Njg6WzEuMjUwMDMsMS43NSwwLDAsLjYzODg5XSw4OTY5OlsxLjI1MDAzLDEuNzUsMCwwLC42Mzg4OV0sODk3MDpbMS4yNTAwMywxLjc1LDAsMCwuNjM4ODldLDg5NzE6WzEuMjUwMDMsMS43NSwwLDAsLjYzODg5XSw5MTE1OlsuNjQ1MDIsMS4xNTUsMCwwLC44NzVdLDkxMTY6WzFlLTUsLjYsMCwwLC44NzVdLDkxMTc6Wy42NDUwMiwxLjE1NSwwLDAsLjg3NV0sOTExODpbLjY0NTAyLDEuMTU1LDAsMCwuODc1XSw5MTE5OlsxZS01LC42LDAsMCwuODc1XSw5MTIwOlsuNjQ1MDIsMS4xNTUsMCwwLC44NzVdLDkxMjE6Wy42NDUwMiwxLjE1NSwwLDAsLjY2NjY3XSw5MTIyOlstOTllLTUsLjYwMSwwLDAsLjY2NjY3XSw5MTIzOlsuNjQ1MDIsMS4xNTUsMCwwLC42NjY2N10sOTEyNDpbLjY0NTAyLDEuMTU1LDAsMCwuNjY2NjddLDkxMjU6Wy05OWUtNSwuNjAxLDAsMCwuNjY2NjddLDkxMjY6Wy42NDUwMiwxLjE1NSwwLDAsLjY2NjY3XSw5MTI3OlsxZS01LC45LDAsMCwuODg4ODldLDkxMjg6Wy42NTAwMiwxLjE1LDAsMCwuODg4ODldLDkxMjk6Wy45MDAwMSwwLDAsMCwuODg4ODldLDkxMzA6WzAsLjMsMCwwLC44ODg4OV0sOTEzMTpbMWUtNSwuOSwwLDAsLjg4ODg5XSw5MTMyOlsuNjUwMDIsMS4xNSwwLDAsLjg4ODg5XSw5MTMzOlsuOTAwMDEsMCwwLDAsLjg4ODg5XSw5MTQzOlsuODg1MDIsLjkxNSwwLDAsMS4wNTU1Nl0sMTAyMTY6WzEuMjUwMDMsMS43NSwwLDAsLjgwNTU2XSwxMDIxNzpbMS4yNTAwMywxLjc1LDAsMCwuODA1NTZdLDU3MzQ0OlstLjAwNDk5LC42MDUsMCwwLDEuMDU1NTZdLDU3MzQ1OlstLjAwNDk5LC42MDUsMCwwLDEuMDU1NTZdLDU3NjgwOlswLC4xMiwwLDAsLjQ1XSw1NzY4MTpbMCwuMTIsMCwwLC40NV0sNTc2ODI6WzAsLjEyLDAsMCwuNDVdLDU3NjgzOlswLC4xMiwwLDAsLjQ1XX0sIlR5cGV3cml0ZXItUmVndWxhciI6ezMyOlswLDAsMCwwLC41MjVdLDMzOlswLC42MTExMSwwLDAsLjUyNV0sMzQ6WzAsLjYxMTExLDAsMCwuNTI1XSwzNTpbMCwuNjExMTEsMCwwLC41MjVdLDM2OlsuMDgzMzMsLjY5NDQ0LDAsMCwuNTI1XSwzNzpbLjA4MzMzLC42OTQ0NCwwLDAsLjUyNV0sMzg6WzAsLjYxMTExLDAsMCwuNTI1XSwzOTpbMCwuNjExMTEsMCwwLC41MjVdLDQwOlsuMDgzMzMsLjY5NDQ0LDAsMCwuNTI1XSw0MTpbLjA4MzMzLC42OTQ0NCwwLDAsLjUyNV0sNDI6WzAsLjUyMDgzLDAsMCwuNTI1XSw0MzpbLS4wODA1NiwuNTMwNTUsMCwwLC41MjVdLDQ0OlsuMTM4ODksLjEyNSwwLDAsLjUyNV0sNDU6Wy0uMDgwNTYsLjUzMDU1LDAsMCwuNTI1XSw0NjpbMCwuMTI1LDAsMCwuNTI1XSw0NzpbLjA4MzMzLC42OTQ0NCwwLDAsLjUyNV0sNDg6WzAsLjYxMTExLDAsMCwuNTI1XSw0OTpbMCwuNjExMTEsMCwwLC41MjVdLDUwOlswLC42MTExMSwwLDAsLjUyNV0sNTE6WzAsLjYxMTExLDAsMCwuNTI1XSw1MjpbMCwuNjExMTEsMCwwLC41MjVdLDUzOlswLC42MTExMSwwLDAsLjUyNV0sNTQ6WzAsLjYxMTExLDAsMCwuNTI1XSw1NTpbMCwuNjExMTEsMCwwLC41MjVdLDU2OlswLC42MTExMSwwLDAsLjUyNV0sNTc6WzAsLjYxMTExLDAsMCwuNTI1XSw1ODpbMCwuNDMwNTYsMCwwLC41MjVdLDU5OlsuMTM4ODksLjQzMDU2LDAsMCwuNTI1XSw2MDpbLS4wNTU1NiwuNTU1NTYsMCwwLC41MjVdLDYxOlstLjE5NTQ5LC40MTU2MiwwLDAsLjUyNV0sNjI6Wy0uMDU1NTYsLjU1NTU2LDAsMCwuNTI1XSw2MzpbMCwuNjExMTEsMCwwLC41MjVdLDY0OlswLC42MTExMSwwLDAsLjUyNV0sNjU6WzAsLjYxMTExLDAsMCwuNTI1XSw2NjpbMCwuNjExMTEsMCwwLC41MjVdLDY3OlswLC42MTExMSwwLDAsLjUyNV0sNjg6WzAsLjYxMTExLDAsMCwuNTI1XSw2OTpbMCwuNjExMTEsMCwwLC41MjVdLDcwOlswLC42MTExMSwwLDAsLjUyNV0sNzE6WzAsLjYxMTExLDAsMCwuNTI1XSw3MjpbMCwuNjExMTEsMCwwLC41MjVdLDczOlswLC42MTExMSwwLDAsLjUyNV0sNzQ6WzAsLjYxMTExLDAsMCwuNTI1XSw3NTpbMCwuNjExMTEsMCwwLC41MjVdLDc2OlswLC42MTExMSwwLDAsLjUyNV0sNzc6WzAsLjYxMTExLDAsMCwuNTI1XSw3ODpbMCwuNjExMTEsMCwwLC41MjVdLDc5OlswLC42MTExMSwwLDAsLjUyNV0sODA6WzAsLjYxMTExLDAsMCwuNTI1XSw4MTpbLjEzODg5LC42MTExMSwwLDAsLjUyNV0sODI6WzAsLjYxMTExLDAsMCwuNTI1XSw4MzpbMCwuNjExMTEsMCwwLC41MjVdLDg0OlswLC42MTExMSwwLDAsLjUyNV0sODU6WzAsLjYxMTExLDAsMCwuNTI1XSw4NjpbMCwuNjExMTEsMCwwLC41MjVdLDg3OlswLC42MTExMSwwLDAsLjUyNV0sODg6WzAsLjYxMTExLDAsMCwuNTI1XSw4OTpbMCwuNjExMTEsMCwwLC41MjVdLDkwOlswLC42MTExMSwwLDAsLjUyNV0sOTE6Wy4wODMzMywuNjk0NDQsMCwwLC41MjVdLDkyOlsuMDgzMzMsLjY5NDQ0LDAsMCwuNTI1XSw5MzpbLjA4MzMzLC42OTQ0NCwwLDAsLjUyNV0sOTQ6WzAsLjYxMTExLDAsMCwuNTI1XSw5NTpbLjA5NTE0LDAsMCwwLC41MjVdLDk2OlswLC42MTExMSwwLDAsLjUyNV0sOTc6WzAsLjQzMDU2LDAsMCwuNTI1XSw5ODpbMCwuNjExMTEsMCwwLC41MjVdLDk5OlswLC40MzA1NiwwLDAsLjUyNV0sMTAwOlswLC42MTExMSwwLDAsLjUyNV0sMTAxOlswLC40MzA1NiwwLDAsLjUyNV0sMTAyOlswLC42MTExMSwwLDAsLjUyNV0sMTAzOlsuMjIyMjIsLjQzMDU2LDAsMCwuNTI1XSwxMDQ6WzAsLjYxMTExLDAsMCwuNTI1XSwxMDU6WzAsLjYxMTExLDAsMCwuNTI1XSwxMDY6Wy4yMjIyMiwuNjExMTEsMCwwLC41MjVdLDEwNzpbMCwuNjExMTEsMCwwLC41MjVdLDEwODpbMCwuNjExMTEsMCwwLC41MjVdLDEwOTpbMCwuNDMwNTYsMCwwLC41MjVdLDExMDpbMCwuNDMwNTYsMCwwLC41MjVdLDExMTpbMCwuNDMwNTYsMCwwLC41MjVdLDExMjpbLjIyMjIyLC40MzA1NiwwLDAsLjUyNV0sMTEzOlsuMjIyMjIsLjQzMDU2LDAsMCwuNTI1XSwxMTQ6WzAsLjQzMDU2LDAsMCwuNTI1XSwxMTU6WzAsLjQzMDU2LDAsMCwuNTI1XSwxMTY6WzAsLjU1MzU4LDAsMCwuNTI1XSwxMTc6WzAsLjQzMDU2LDAsMCwuNTI1XSwxMTg6WzAsLjQzMDU2LDAsMCwuNTI1XSwxMTk6WzAsLjQzMDU2LDAsMCwuNTI1XSwxMjA6WzAsLjQzMDU2LDAsMCwuNTI1XSwxMjE6Wy4yMjIyMiwuNDMwNTYsMCwwLC41MjVdLDEyMjpbMCwuNDMwNTYsMCwwLC41MjVdLDEyMzpbLjA4MzMzLC42OTQ0NCwwLDAsLjUyNV0sMTI0OlsuMDgzMzMsLjY5NDQ0LDAsMCwuNTI1XSwxMjU6Wy4wODMzMywuNjk0NDQsMCwwLC41MjVdLDEyNjpbMCwuNjExMTEsMCwwLC41MjVdLDEyNzpbMCwuNjExMTEsMCwwLC41MjVdLDE2MDpbMCwwLDAsMCwuNTI1XSwxNzY6WzAsLjYxMTExLDAsMCwuNTI1XSwxODQ6Wy4xOTQ0NSwwLDAsMCwuNTI1XSwzMDU6WzAsLjQzMDU2LDAsMCwuNTI1XSw1Njc6Wy4yMjIyMiwuNDMwNTYsMCwwLC41MjVdLDcxMTpbMCwuNTY1OTcsMCwwLC41MjVdLDcxMzpbMCwuNTY1NTUsMCwwLC41MjVdLDcxNDpbMCwuNjExMTEsMCwwLC41MjVdLDcxNTpbMCwuNjExMTEsMCwwLC41MjVdLDcyODpbMCwuNjExMTEsMCwwLC41MjVdLDczMDpbMCwuNjExMTEsMCwwLC41MjVdLDc3MDpbMCwuNjExMTEsMCwwLC41MjVdLDc3MTpbMCwuNjExMTEsMCwwLC41MjVdLDc3NjpbMCwuNjExMTEsMCwwLC41MjVdLDkxNTpbMCwuNjExMTEsMCwwLC41MjVdLDkxNjpbMCwuNjExMTEsMCwwLC41MjVdLDkyMDpbMCwuNjExMTEsMCwwLC41MjVdLDkyMzpbMCwuNjExMTEsMCwwLC41MjVdLDkyNjpbMCwuNjExMTEsMCwwLC41MjVdLDkyODpbMCwuNjExMTEsMCwwLC41MjVdLDkzMTpbMCwuNjExMTEsMCwwLC41MjVdLDkzMzpbMCwuNjExMTEsMCwwLC41MjVdLDkzNDpbMCwuNjExMTEsMCwwLC41MjVdLDkzNjpbMCwuNjExMTEsMCwwLC41MjVdLDkzNzpbMCwuNjExMTEsMCwwLC41MjVdLDgyMTY6WzAsLjYxMTExLDAsMCwuNTI1XSw4MjE3OlswLC42MTExMSwwLDAsLjUyNV0sODI0MjpbMCwuNjExMTEsMCwwLC41MjVdLDkyNTE6Wy4xMTExMSwuMjE5NDQsMCwwLC41MjVdfX0sYzM9e3NsYW50OlsuMjUsLjI1LC4yNV0sc3BhY2U6WzAsMCwwXSxzdHJldGNoOlswLDAsMF0sc2hyaW5rOlswLDAsMF0seEhlaWdodDpbLjQzMSwuNDMxLC40MzFdLHF1YWQ6WzEsMS4xNzEsMS40NzJdLGV4dHJhU3BhY2U6WzAsMCwwXSxudW0xOlsuNjc3LC43MzIsLjkyNV0sbnVtMjpbLjM5NCwuMzg0LC4zODddLG51bTM6Wy40NDQsLjQ3MSwuNTA0XSxkZW5vbTE6Wy42ODYsLjc1MiwxLjAyNV0sZGVub20yOlsuMzQ1LC4zNDQsLjUzMl0sc3VwMTpbLjQxMywuNTAzLC41MDRdLHN1cDI6Wy4zNjMsLjQzMSwuNDA0XSxzdXAzOlsuMjg5LC4yODYsLjI5NF0sc3ViMTpbLjE1LC4xNDMsLjJdLHN1YjI6Wy4yNDcsLjI4NiwuNF0sc3VwRHJvcDpbLjM4NiwuMzUzLC40OTRdLHN1YkRyb3A6Wy4wNSwuMDcxLC4xXSxkZWxpbTE6WzIuMzksMS43LDEuOThdLGRlbGltMjpbMS4wMSwxLjE1NywxLjQyXSxheGlzSGVpZ2h0OlsuMjUsLjI1LC4yNV0sZGVmYXVsdFJ1bGVUaGlja25lc3M6Wy4wNCwuMDQ5LC4wNDldLGJpZ09wU3BhY2luZzE6Wy4xMTEsLjExMSwuMTExXSxiaWdPcFNwYWNpbmcyOlsuMTY2LC4xNjYsLjE2Nl0sYmlnT3BTcGFjaW5nMzpbLjIsLjIsLjJdLGJpZ09wU3BhY2luZzQ6Wy42LC42MTEsLjYxMV0sYmlnT3BTcGFjaW5nNTpbLjEsLjE0MywuMTQzXSxzcXJ0UnVsZVRoaWNrbmVzczpbLjA0LC4wNCwuMDRdLHB0UGVyRW06WzEwLDEwLDEwXSxkb3VibGVSdWxlU2VwOlsuMiwuMiwuMl0sYXJyYXlSdWxlV2lkdGg6Wy4wNCwuMDQsLjA0XSxmYm94c2VwOlsuMywuMywuM10sZmJveHJ1bGU6Wy4wNCwuMDQsLjA0XX0sS3o9e1x1MDBDNToiQSIsXHUwMEQwOiJEIixcdTAwREU6Im8iLFx1MDBFNToiYSIsXHUwMEYwOiJkIixcdTAwRkU6Im8iLFx1MDQxMDoiQSIsXHUwNDExOiJCIixcdTA0MTI6IkIiLFx1MDQxMzoiRiIsXHUwNDE0OiJBIixcdTA0MTU6IkUiLFx1MDQxNjoiSyIsXHUwNDE3OiIzIixcdTA0MTg6Ik4iLFx1MDQxOToiTiIsXHUwNDFBOiJLIixcdTA0MUI6Ik4iLFx1MDQxQzoiTSIsXHUwNDFEOiJIIixcdTA0MUU6Ik8iLFx1MDQxRjoiTiIsXHUwNDIwOiJQIixcdTA0MjE6IkMiLFx1MDQyMjoiVCIsXHUwNDIzOiJ5IixcdTA0MjQ6Ik8iLFx1MDQyNToiWCIsXHUwNDI2OiJVIixcdTA0Mjc6ImgiLFx1MDQyODoiVyIsXHUwNDI5OiJXIixcdTA0MkE6IkIiLFx1MDQyQjoiWCIsXHUwNDJDOiJCIixcdTA0MkQ6IjMiLFx1MDQyRToiWCIsXHUwNDJGOiJSIixcdTA0MzA6ImEiLFx1MDQzMToiYiIsXHUwNDMyOiJhIixcdTA0MzM6InIiLFx1MDQzNDoieSIsXHUwNDM1OiJlIixcdTA0MzY6Im0iLFx1MDQzNzoiZSIsXHUwNDM4OiJuIixcdTA0Mzk6Im4iLFx1MDQzQToibiIsXHUwNDNCOiJuIixcdTA0M0M6Im0iLFx1MDQzRDoibiIsXHUwNDNFOiJvIixcdTA0M0Y6Im4iLFx1MDQ0MDoicCIsXHUwNDQxOiJjIixcdTA0NDI6Im8iLFx1MDQ0MzoieSIsXHUwNDQ0OiJiIixcdTA0NDU6IngiLFx1MDQ0NjoibiIsXHUwNDQ3OiJuIixcdTA0NDg6InciLFx1MDQ0OToidyIsXHUwNDRBOiJhIixcdTA0NEI6Im0iLFx1MDQ0QzoiYSIsXHUwNDREOiJlIixcdTA0NEU6Im0iLFx1MDQ0RjoiciJ9O28oX0csInNldEZvbnRNZXRyaWNzIik7byhuQSwiZ2V0Q2hhcmFjdGVyTWV0cmljcyIpO1I3PXt9O28oWDRlLCJnZXRHbG9iYWxNZXRyaWNzIik7ajRlPVtbMSwxLDFdLFsyLDEsMV0sWzMsMSwxXSxbNCwyLDFdLFs1LDIsMV0sWzYsMywxXSxbNyw0LDJdLFs4LDYsM10sWzksNyw2XSxbMTAsOCw3XSxbMTEsMTAsOV1dLFF6PVsuNSwuNiwuNywuOCwuOSwxLDEuMiwxLjQ0LDEuNzI4LDIuMDc0LDIuNDg4XSxaej1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIHIuc2l6ZTwyP2U6ajRlW2UtMV1bci5zaXplLTFdfSwic2l6ZUF0U3R5bGUiKSx3Mz1jbGFzcyB0e3N0YXRpY3tvKHRoaXMsIk9wdGlvbnMiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLnN0eWxlPXZvaWQgMCx0aGlzLmNvbG9yPXZvaWQgMCx0aGlzLnNpemU9dm9pZCAwLHRoaXMudGV4dFNpemU9dm9pZCAwLHRoaXMucGhhbnRvbT12b2lkIDAsdGhpcy5mb250PXZvaWQgMCx0aGlzLmZvbnRGYW1pbHk9dm9pZCAwLHRoaXMuZm9udFdlaWdodD12b2lkIDAsdGhpcy5mb250U2hhcGU9dm9pZCAwLHRoaXMuc2l6ZU11bHRpcGxpZXI9dm9pZCAwLHRoaXMubWF4U2l6ZT12b2lkIDAsdGhpcy5taW5SdWxlVGhpY2tuZXNzPXZvaWQgMCx0aGlzLl9mb250TWV0cmljcz12b2lkIDAsdGhpcy5zdHlsZT1lLnN0eWxlLHRoaXMuY29sb3I9ZS5jb2xvcix0aGlzLnNpemU9ZS5zaXplfHx0LkJBU0VTSVpFLHRoaXMudGV4dFNpemU9ZS50ZXh0U2l6ZXx8dGhpcy5zaXplLHRoaXMucGhhbnRvbT0hIWUucGhhbnRvbSx0aGlzLmZvbnQ9ZS5mb250fHwiIix0aGlzLmZvbnRGYW1pbHk9ZS5mb250RmFtaWx5fHwiIix0aGlzLmZvbnRXZWlnaHQ9ZS5mb250V2VpZ2h0fHwiIix0aGlzLmZvbnRTaGFwZT1lLmZvbnRTaGFwZXx8IiIsdGhpcy5zaXplTXVsdGlwbGllcj1Relt0aGlzLnNpemUtMV0sdGhpcy5tYXhTaXplPWUubWF4U2l6ZSx0aGlzLm1pblJ1bGVUaGlja25lc3M9ZS5taW5SdWxlVGhpY2tuZXNzLHRoaXMuX2ZvbnRNZXRyaWNzPXZvaWQgMH1leHRlbmQoZSl7dmFyIHI9e3N0eWxlOnRoaXMuc3R5bGUsc2l6ZTp0aGlzLnNpemUsdGV4dFNpemU6dGhpcy50ZXh0U2l6ZSxjb2xvcjp0aGlzLmNvbG9yLHBoYW50b206dGhpcy5waGFudG9tLGZvbnQ6dGhpcy5mb250LGZvbnRGYW1pbHk6dGhpcy5mb250RmFtaWx5LGZvbnRXZWlnaHQ6dGhpcy5mb250V2VpZ2h0LGZvbnRTaGFwZTp0aGlzLmZvbnRTaGFwZSxtYXhTaXplOnRoaXMubWF4U2l6ZSxtaW5SdWxlVGhpY2tuZXNzOnRoaXMubWluUnVsZVRoaWNrbmVzc307Zm9yKHZhciBuIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShuKSYmKHJbbl09ZVtuXSk7cmV0dXJuIG5ldyB0KHIpfWhhdmluZ1N0eWxlKGUpe3JldHVybiB0aGlzLnN0eWxlPT09ZT90aGlzOnRoaXMuZXh0ZW5kKHtzdHlsZTplLHNpemU6WnoodGhpcy50ZXh0U2l6ZSxlKX0pfWhhdmluZ0NyYW1wZWRTdHlsZSgpe3JldHVybiB0aGlzLmhhdmluZ1N0eWxlKHRoaXMuc3R5bGUuY3JhbXAoKSl9aGF2aW5nU2l6ZShlKXtyZXR1cm4gdGhpcy5zaXplPT09ZSYmdGhpcy50ZXh0U2l6ZT09PWU/dGhpczp0aGlzLmV4dGVuZCh7c3R5bGU6dGhpcy5zdHlsZS50ZXh0KCksc2l6ZTplLHRleHRTaXplOmUsc2l6ZU11bHRpcGxpZXI6UXpbZS0xXX0pfWhhdmluZ0Jhc2VTdHlsZShlKXtlPWV8fHRoaXMuc3R5bGUudGV4dCgpO3ZhciByPVp6KHQuQkFTRVNJWkUsZSk7cmV0dXJuIHRoaXMuc2l6ZT09PXImJnRoaXMudGV4dFNpemU9PT10LkJBU0VTSVpFJiZ0aGlzLnN0eWxlPT09ZT90aGlzOnRoaXMuZXh0ZW5kKHtzdHlsZTplLHNpemU6cn0pfWhhdmluZ0Jhc2VTaXppbmcoKXt2YXIgZTtzd2l0Y2godGhpcy5zdHlsZS5pZCl7Y2FzZSA0OmNhc2UgNTplPTM7YnJlYWs7Y2FzZSA2OmNhc2UgNzplPTE7YnJlYWs7ZGVmYXVsdDplPTZ9cmV0dXJuIHRoaXMuZXh0ZW5kKHtzdHlsZTp0aGlzLnN0eWxlLnRleHQoKSxzaXplOmV9KX13aXRoQ29sb3IoZSl7cmV0dXJuIHRoaXMuZXh0ZW5kKHtjb2xvcjplfSl9d2l0aFBoYW50b20oKXtyZXR1cm4gdGhpcy5leHRlbmQoe3BoYW50b206ITB9KX13aXRoRm9udChlKXtyZXR1cm4gdGhpcy5leHRlbmQoe2ZvbnQ6ZX0pfXdpdGhUZXh0Rm9udEZhbWlseShlKXtyZXR1cm4gdGhpcy5leHRlbmQoe2ZvbnRGYW1pbHk6ZSxmb250OiIifSl9d2l0aFRleHRGb250V2VpZ2h0KGUpe3JldHVybiB0aGlzLmV4dGVuZCh7Zm9udFdlaWdodDplLGZvbnQ6IiJ9KX13aXRoVGV4dEZvbnRTaGFwZShlKXtyZXR1cm4gdGhpcy5leHRlbmQoe2ZvbnRTaGFwZTplLGZvbnQ6IiJ9KX1zaXppbmdDbGFzc2VzKGUpe3JldHVybiBlLnNpemUhPT10aGlzLnNpemU/WyJzaXppbmciLCJyZXNldC1zaXplIitlLnNpemUsInNpemUiK3RoaXMuc2l6ZV06W119YmFzZVNpemluZ0NsYXNzZXMoKXtyZXR1cm4gdGhpcy5zaXplIT09dC5CQVNFU0laRT9bInNpemluZyIsInJlc2V0LXNpemUiK3RoaXMuc2l6ZSwic2l6ZSIrdC5CQVNFU0laRV06W119Zm9udE1ldHJpY3MoKXtyZXR1cm4gdGhpcy5fZm9udE1ldHJpY3N8fCh0aGlzLl9mb250TWV0cmljcz1YNGUodGhpcy5zaXplKSksdGhpcy5fZm9udE1ldHJpY3N9Z2V0Q29sb3IoKXtyZXR1cm4gdGhpcy5waGFudG9tPyJ0cmFuc3BhcmVudCI6dGhpcy5jb2xvcn19O3czLkJBU0VTSVpFPTY7Vzc9e3B0OjEsbW06NzIyNy8yNTQwLGNtOjcyMjcvMjU0LGluOjcyLjI3LGJwOjgwMy84MDAscGM6MTIsZGQ6MTIzOC8xMTU3LGNjOjE0ODU2LzExNTcsbmQ6Njg1LzY0MixuYzoxMzcwLzEwNyxzcDoxLzY1NTM2LHB4OjgwMy84MDB9LEs0ZT17ZXg6ITAsZW06ITAsbXU6ITB9LERHPW8oZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlIT0ic3RyaW5nIiYmKGU9ZS51bml0KSxlIGluIFc3fHxlIGluIEs0ZXx8ZT09PSJleCJ9LCJ2YWxpZFVuaXQiKSxuaT1vKGZ1bmN0aW9uKGUscil7dmFyIG47aWYoZS51bml0IGluIFc3KW49VzdbZS51bml0XS9yLmZvbnRNZXRyaWNzKCkucHRQZXJFbS9yLnNpemVNdWx0aXBsaWVyO2Vsc2UgaWYoZS51bml0PT09Im11IiluPXIuZm9udE1ldHJpY3MoKS5jc3NFbVBlck11O2Vsc2V7dmFyIGk7aWYoci5zdHlsZS5pc1RpZ2h0KCk/aT1yLmhhdmluZ1N0eWxlKHIuc3R5bGUudGV4dCgpKTppPXIsZS51bml0PT09ImV4IiluPWkuZm9udE1ldHJpY3MoKS54SGVpZ2h0O2Vsc2UgaWYoZS51bml0PT09ImVtIiluPWkuZm9udE1ldHJpY3MoKS5xdWFkO2Vsc2UgdGhyb3cgbmV3IHB0KCJJbnZhbGlkIHVuaXQ6ICciK2UudW5pdCsiJyIpO2khPT1yJiYobio9aS5zaXplTXVsdGlwbGllci9yLnNpemVNdWx0aXBsaWVyKX1yZXR1cm4gTWF0aC5taW4oZS5udW1iZXIqbixyLm1heFNpemUpfSwiY2FsY3VsYXRlU2l6ZSIpLEV0PW8oZnVuY3Rpb24oZSl7cmV0dXJuK2UudG9GaXhlZCg0KSsiZW0ifSwibWFrZUVtIiksdmg9byhmdW5jdGlvbihlKXtyZXR1cm4gZS5maWx0ZXIocj0+cikuam9pbigiICIpfSwiY3JlYXRlQ2xhc3MiKSxMRz1vKGZ1bmN0aW9uKGUscixuKXtpZih0aGlzLmNsYXNzZXM9ZXx8W10sdGhpcy5hdHRyaWJ1dGVzPXt9LHRoaXMuaGVpZ2h0PTAsdGhpcy5kZXB0aD0wLHRoaXMubWF4Rm9udFNpemU9MCx0aGlzLnN0eWxlPW58fHt9LHIpe3Iuc3R5bGUuaXNUaWdodCgpJiZ0aGlzLmNsYXNzZXMucHVzaCgibXRpZ2h0Iik7dmFyIGk9ci5nZXRDb2xvcigpO2kmJih0aGlzLnN0eWxlLmNvbG9yPWkpfX0sImluaXROb2RlIiksUkc9byhmdW5jdGlvbihlKXt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGUpO3IuY2xhc3NOYW1lPXZoKHRoaXMuY2xhc3Nlcyk7Zm9yKHZhciBuIGluIHRoaXMuc3R5bGUpdGhpcy5zdHlsZS5oYXNPd25Qcm9wZXJ0eShuKSYmKHIuc3R5bGVbbl09dGhpcy5zdHlsZVtuXSk7Zm9yKHZhciBpIGluIHRoaXMuYXR0cmlidXRlcyl0aGlzLmF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkoaSkmJnIuc2V0QXR0cmlidXRlKGksdGhpcy5hdHRyaWJ1dGVzW2ldKTtmb3IodmFyIGE9MDthPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO2ErKylyLmFwcGVuZENoaWxkKHRoaXMuY2hpbGRyZW5bYV0udG9Ob2RlKCkpO3JldHVybiByfSwidG9Ob2RlIiksUTRlPS9bXHMiJz4vPVx4MDAtXHgxZl0vLE5HPW8oZnVuY3Rpb24oZSl7dmFyIHI9IjwiK2U7dGhpcy5jbGFzc2VzLmxlbmd0aCYmKHIrPScgY2xhc3M9IicrSnQuZXNjYXBlKHZoKHRoaXMuY2xhc3NlcykpKyciJyk7dmFyIG49IiI7Zm9yKHZhciBpIGluIHRoaXMuc3R5bGUpdGhpcy5zdHlsZS5oYXNPd25Qcm9wZXJ0eShpKSYmKG4rPUp0Lmh5cGhlbmF0ZShpKSsiOiIrdGhpcy5zdHlsZVtpXSsiOyIpO24mJihyKz0nIHN0eWxlPSInK0p0LmVzY2FwZShuKSsnIicpO2Zvcih2YXIgYSBpbiB0aGlzLmF0dHJpYnV0ZXMpaWYodGhpcy5hdHRyaWJ1dGVzLmhhc093blByb3BlcnR5KGEpKXtpZihRNGUudGVzdChhKSl0aHJvdyBuZXcgcHQoIkludmFsaWQgYXR0cmlidXRlIG5hbWUgJyIrYSsiJyIpO3IrPSIgIithKyc9IicrSnQuZXNjYXBlKHRoaXMuYXR0cmlidXRlc1thXSkrJyInfXIrPSI+Ijtmb3IodmFyIHM9MDtzPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO3MrKylyKz10aGlzLmNoaWxkcmVuW3NdLnRvTWFya3VwKCk7cmV0dXJuIHIrPSI8LyIrZSsiPiIscn0sInRvTWFya3VwIiksbGQ9Y2xhc3N7c3RhdGlje28odGhpcywiU3BhbiIpfWNvbnN0cnVjdG9yKGUscixuLGkpe3RoaXMuY2hpbGRyZW49dm9pZCAwLHRoaXMuYXR0cmlidXRlcz12b2lkIDAsdGhpcy5jbGFzc2VzPXZvaWQgMCx0aGlzLmhlaWdodD12b2lkIDAsdGhpcy5kZXB0aD12b2lkIDAsdGhpcy53aWR0aD12b2lkIDAsdGhpcy5tYXhGb250U2l6ZT12b2lkIDAsdGhpcy5zdHlsZT12b2lkIDAsTEcuY2FsbCh0aGlzLGUsbixpKSx0aGlzLmNoaWxkcmVuPXJ8fFtdfXNldEF0dHJpYnV0ZShlLHIpe3RoaXMuYXR0cmlidXRlc1tlXT1yfWhhc0NsYXNzKGUpe3JldHVybiBKdC5jb250YWlucyh0aGlzLmNsYXNzZXMsZSl9dG9Ob2RlKCl7cmV0dXJuIFJHLmNhbGwodGhpcywic3BhbiIpfXRvTWFya3VwKCl7cmV0dXJuIE5HLmNhbGwodGhpcywic3BhbiIpfX0sWnk9Y2xhc3N7c3RhdGlje28odGhpcywiQW5jaG9yIil9Y29uc3RydWN0b3IoZSxyLG4saSl7dGhpcy5jaGlsZHJlbj12b2lkIDAsdGhpcy5hdHRyaWJ1dGVzPXZvaWQgMCx0aGlzLmNsYXNzZXM9dm9pZCAwLHRoaXMuaGVpZ2h0PXZvaWQgMCx0aGlzLmRlcHRoPXZvaWQgMCx0aGlzLm1heEZvbnRTaXplPXZvaWQgMCx0aGlzLnN0eWxlPXZvaWQgMCxMRy5jYWxsKHRoaXMscixpKSx0aGlzLmNoaWxkcmVuPW58fFtdLHRoaXMuc2V0QXR0cmlidXRlKCJocmVmIixlKX1zZXRBdHRyaWJ1dGUoZSxyKXt0aGlzLmF0dHJpYnV0ZXNbZV09cn1oYXNDbGFzcyhlKXtyZXR1cm4gSnQuY29udGFpbnModGhpcy5jbGFzc2VzLGUpfXRvTm9kZSgpe3JldHVybiBSRy5jYWxsKHRoaXMsImEiKX10b01hcmt1cCgpe3JldHVybiBORy5jYWxsKHRoaXMsImEiKX19LHE3PWNsYXNze3N0YXRpY3tvKHRoaXMsIkltZyIpfWNvbnN0cnVjdG9yKGUscixuKXt0aGlzLnNyYz12b2lkIDAsdGhpcy5hbHQ9dm9pZCAwLHRoaXMuY2xhc3Nlcz12b2lkIDAsdGhpcy5oZWlnaHQ9dm9pZCAwLHRoaXMuZGVwdGg9dm9pZCAwLHRoaXMubWF4Rm9udFNpemU9dm9pZCAwLHRoaXMuc3R5bGU9dm9pZCAwLHRoaXMuYWx0PXIsdGhpcy5zcmM9ZSx0aGlzLmNsYXNzZXM9WyJtb3JkIl0sdGhpcy5zdHlsZT1ufWhhc0NsYXNzKGUpe3JldHVybiBKdC5jb250YWlucyh0aGlzLmNsYXNzZXMsZSl9dG9Ob2RlKCl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7ZS5zcmM9dGhpcy5zcmMsZS5hbHQ9dGhpcy5hbHQsZS5jbGFzc05hbWU9Im1vcmQiO2Zvcih2YXIgciBpbiB0aGlzLnN0eWxlKXRoaXMuc3R5bGUuaGFzT3duUHJvcGVydHkocikmJihlLnN0eWxlW3JdPXRoaXMuc3R5bGVbcl0pO3JldHVybiBlfXRvTWFya3VwKCl7dmFyIGU9JzxpbWcgc3JjPSInK0p0LmVzY2FwZSh0aGlzLnNyYykrJyInKygnIGFsdD0iJytKdC5lc2NhcGUodGhpcy5hbHQpKyciJykscj0iIjtmb3IodmFyIG4gaW4gdGhpcy5zdHlsZSl0aGlzLnN0eWxlLmhhc093blByb3BlcnR5KG4pJiYocis9SnQuaHlwaGVuYXRlKG4pKyI6Iit0aGlzLnN0eWxlW25dKyI7Iik7cmV0dXJuIHImJihlKz0nIHN0eWxlPSInK0p0LmVzY2FwZShyKSsnIicpLGUrPSInLz4iLGV9fSxaNGU9e1x1MDBFRToiXHUwMTMxXHUwMzAyIixcdTAwRUY6Ilx1MDEzMVx1MDMwOCIsXHUwMEVEOiJcdTAxMzFcdTAzMDEiLFx1MDBFQzoiXHUwMTMxXHUwMzAwIn0sQXM9Y2xhc3N7c3RhdGlje28odGhpcywiU3ltYm9sTm9kZSIpfWNvbnN0cnVjdG9yKGUscixuLGksYSxzLGwsdSl7dGhpcy50ZXh0PXZvaWQgMCx0aGlzLmhlaWdodD12b2lkIDAsdGhpcy5kZXB0aD12b2lkIDAsdGhpcy5pdGFsaWM9dm9pZCAwLHRoaXMuc2tldz12b2lkIDAsdGhpcy53aWR0aD12b2lkIDAsdGhpcy5tYXhGb250U2l6ZT12b2lkIDAsdGhpcy5jbGFzc2VzPXZvaWQgMCx0aGlzLnN0eWxlPXZvaWQgMCx0aGlzLnRleHQ9ZSx0aGlzLmhlaWdodD1yfHwwLHRoaXMuZGVwdGg9bnx8MCx0aGlzLml0YWxpYz1pfHwwLHRoaXMuc2tldz1hfHwwLHRoaXMud2lkdGg9c3x8MCx0aGlzLmNsYXNzZXM9bHx8W10sdGhpcy5zdHlsZT11fHx7fSx0aGlzLm1heEZvbnRTaXplPTA7dmFyIGg9QjRlKHRoaXMudGV4dC5jaGFyQ29kZUF0KDApKTtoJiZ0aGlzLmNsYXNzZXMucHVzaChoKyJfZmFsbGJhY2siKSwvW8Ouw6/DrcOsXS8udGVzdCh0aGlzLnRleHQpJiYodGhpcy50ZXh0PVo0ZVt0aGlzLnRleHRdKX1oYXNDbGFzcyhlKXtyZXR1cm4gSnQuY29udGFpbnModGhpcy5jbGFzc2VzLGUpfXRvTm9kZSgpe3ZhciBlPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRoaXMudGV4dCkscj1udWxsO3RoaXMuaXRhbGljPjAmJihyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKSxyLnN0eWxlLm1hcmdpblJpZ2h0PUV0KHRoaXMuaXRhbGljKSksdGhpcy5jbGFzc2VzLmxlbmd0aD4wJiYocj1yfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIiksci5jbGFzc05hbWU9dmgodGhpcy5jbGFzc2VzKSk7Zm9yKHZhciBuIGluIHRoaXMuc3R5bGUpdGhpcy5zdHlsZS5oYXNPd25Qcm9wZXJ0eShuKSYmKHI9cnx8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpLHIuc3R5bGVbbl09dGhpcy5zdHlsZVtuXSk7cmV0dXJuIHI/KHIuYXBwZW5kQ2hpbGQoZSkscik6ZX10b01hcmt1cCgpe3ZhciBlPSExLHI9IjxzcGFuIjt0aGlzLmNsYXNzZXMubGVuZ3RoJiYoZT0hMCxyKz0nIGNsYXNzPSInLHIrPUp0LmVzY2FwZSh2aCh0aGlzLmNsYXNzZXMpKSxyKz0nIicpO3ZhciBuPSIiO3RoaXMuaXRhbGljPjAmJihuKz0ibWFyZ2luLXJpZ2h0OiIrdGhpcy5pdGFsaWMrImVtOyIpO2Zvcih2YXIgaSBpbiB0aGlzLnN0eWxlKXRoaXMuc3R5bGUuaGFzT3duUHJvcGVydHkoaSkmJihuKz1KdC5oeXBoZW5hdGUoaSkrIjoiK3RoaXMuc3R5bGVbaV0rIjsiKTtuJiYoZT0hMCxyKz0nIHN0eWxlPSInK0p0LmVzY2FwZShuKSsnIicpO3ZhciBhPUp0LmVzY2FwZSh0aGlzLnRleHQpO3JldHVybiBlPyhyKz0iPiIscis9YSxyKz0iPC9zcGFuPiIscik6YX19LGRsPWNsYXNze3N0YXRpY3tvKHRoaXMsIlN2Z05vZGUiKX1jb25zdHJ1Y3RvcihlLHIpe3RoaXMuY2hpbGRyZW49dm9pZCAwLHRoaXMuYXR0cmlidXRlcz12b2lkIDAsdGhpcy5jaGlsZHJlbj1lfHxbXSx0aGlzLmF0dHJpYnV0ZXM9cnx8e319dG9Ob2RlKCl7dmFyIGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhlLCJzdmciKTtmb3IodmFyIG4gaW4gdGhpcy5hdHRyaWJ1dGVzKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmF0dHJpYnV0ZXMsbikmJnIuc2V0QXR0cmlidXRlKG4sdGhpcy5hdHRyaWJ1dGVzW25dKTtmb3IodmFyIGk9MDtpPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO2krKylyLmFwcGVuZENoaWxkKHRoaXMuY2hpbGRyZW5baV0udG9Ob2RlKCkpO3JldHVybiByfXRvTWFya3VwKCl7dmFyIGU9JzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIic7Zm9yKHZhciByIGluIHRoaXMuYXR0cmlidXRlcylPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJ1dGVzLHIpJiYoZSs9IiAiK3IrJz0iJytKdC5lc2NhcGUodGhpcy5hdHRyaWJ1dGVzW3JdKSsnIicpO2UrPSI+Ijtmb3IodmFyIG49MDtuPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO24rKyllKz10aGlzLmNoaWxkcmVuW25dLnRvTWFya3VwKCk7cmV0dXJuIGUrPSI8L3N2Zz4iLGV9fSxlYz1jbGFzc3tzdGF0aWN7byh0aGlzLCJQYXRoTm9kZSIpfWNvbnN0cnVjdG9yKGUscil7dGhpcy5wYXRoTmFtZT12b2lkIDAsdGhpcy5hbHRlcm5hdGU9dm9pZCAwLHRoaXMucGF0aE5hbWU9ZSx0aGlzLmFsdGVybmF0ZT1yfXRvTm9kZSgpe3ZhciBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZSwicGF0aCIpO3JldHVybiB0aGlzLmFsdGVybmF0ZT9yLnNldEF0dHJpYnV0ZSgiZCIsdGhpcy5hbHRlcm5hdGUpOnIuc2V0QXR0cmlidXRlKCJkIixqelt0aGlzLnBhdGhOYW1lXSkscn10b01hcmt1cCgpe3JldHVybiB0aGlzLmFsdGVybmF0ZT8nPHBhdGggZD0iJytKdC5lc2NhcGUodGhpcy5hbHRlcm5hdGUpKyciLz4nOic8cGF0aCBkPSInK0p0LmVzY2FwZShqelt0aGlzLnBhdGhOYW1lXSkrJyIvPid9fSxKeT1jbGFzc3tzdGF0aWN7byh0aGlzLCJMaW5lTm9kZSIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuYXR0cmlidXRlcz12b2lkIDAsdGhpcy5hdHRyaWJ1dGVzPWV8fHt9fXRvTm9kZSgpe3ZhciBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZSwibGluZSIpO2Zvcih2YXIgbiBpbiB0aGlzLmF0dHJpYnV0ZXMpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYXR0cmlidXRlcyxuKSYmci5zZXRBdHRyaWJ1dGUobix0aGlzLmF0dHJpYnV0ZXNbbl0pO3JldHVybiByfXRvTWFya3VwKCl7dmFyIGU9IjxsaW5lIjtmb3IodmFyIHIgaW4gdGhpcy5hdHRyaWJ1dGVzKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmF0dHJpYnV0ZXMscikmJihlKz0iICIrcisnPSInK0p0LmVzY2FwZSh0aGlzLmF0dHJpYnV0ZXNbcl0pKyciJyk7cmV0dXJuIGUrPSIvPiIsZX19O28oSnosImFzc2VydFN5bWJvbERvbU5vZGUiKTtvKEo0ZSwiYXNzZXJ0U3BhbiIpO2UzZT17YmluOjEsY2xvc2U6MSxpbm5lcjoxLG9wZW46MSxwdW5jdDoxLHJlbDoxfSx0M2U9eyJhY2NlbnQtdG9rZW4iOjEsbWF0aG9yZDoxLCJvcC10b2tlbiI6MSxzcGFjaW5nOjEsdGV4dG9yZDoxfSxBbj17bWF0aDp7fSx0ZXh0Ont9fTtvKEcsImRlZmluZVN5bWJvbCIpO0g9Im1hdGgiLGl0PSJ0ZXh0IixyZT0ibWFpbiIsa2U9ImFtcyIsSG49ImFjY2VudC10b2tlbiIsSXQ9ImJpbiIsbnM9ImNsb3NlIixFMD0iaW5uZXIiLHJyPSJtYXRob3JkIixDaT0ib3AtdG9rZW4iLFpzPSJvcGVuIixEMz0icHVuY3QiLEVlPSJyZWwiLHB1PSJzcGFjaW5nIixSZT0idGV4dG9yZCI7RyhILHJlLEVlLCJcdTIyNjEiLCJcXGVxdWl2IiwhMCk7RyhILHJlLEVlLCJcdTIyN0EiLCJcXHByZWMiLCEwKTtHKEgscmUsRWUsIlx1MjI3QiIsIlxcc3VjYyIsITApO0coSCxyZSxFZSwiXHUyMjNDIiwiXFxzaW0iLCEwKTtHKEgscmUsRWUsIlx1MjJBNSIsIlxccGVycCIpO0coSCxyZSxFZSwiXHUyQUFGIiwiXFxwcmVjZXEiLCEwKTtHKEgscmUsRWUsIlx1MkFCMCIsIlxcc3VjY2VxIiwhMCk7RyhILHJlLEVlLCJcdTIyNDMiLCJcXHNpbWVxIiwhMCk7RyhILHJlLEVlLCJcdTIyMjMiLCJcXG1pZCIsITApO0coSCxyZSxFZSwiXHUyMjZBIiwiXFxsbCIsITApO0coSCxyZSxFZSwiXHUyMjZCIiwiXFxnZyIsITApO0coSCxyZSxFZSwiXHUyMjREIiwiXFxhc3ltcCIsITApO0coSCxyZSxFZSwiXHUyMjI1IiwiXFxwYXJhbGxlbCIpO0coSCxyZSxFZSwiXHUyMkM4IiwiXFxib3d0aWUiLCEwKTtHKEgscmUsRWUsIlx1MjMyMyIsIlxcc21pbGUiLCEwKTtHKEgscmUsRWUsIlx1MjI5MSIsIlxcc3FzdWJzZXRlcSIsITApO0coSCxyZSxFZSwiXHUyMjkyIiwiXFxzcXN1cHNldGVxIiwhMCk7RyhILHJlLEVlLCJcdTIyNTAiLCJcXGRvdGVxIiwhMCk7RyhILHJlLEVlLCJcdTIzMjIiLCJcXGZyb3duIiwhMCk7RyhILHJlLEVlLCJcdTIyMEIiLCJcXG5pIiwhMCk7RyhILHJlLEVlLCJcdTIyMUQiLCJcXHByb3B0byIsITApO0coSCxyZSxFZSwiXHUyMkEyIiwiXFx2ZGFzaCIsITApO0coSCxyZSxFZSwiXHUyMkEzIiwiXFxkYXNodiIsITApO0coSCxyZSxFZSwiXHUyMjBCIiwiXFxvd25zIik7RyhILHJlLEQzLCIuIiwiXFxsZG90cCIpO0coSCxyZSxEMywiXHUyMkM1IiwiXFxjZG90cCIpO0coSCxyZSxSZSwiIyIsIlxcIyIpO0coaXQscmUsUmUsIiMiLCJcXCMiKTtHKEgscmUsUmUsIiYiLCJcXCYiKTtHKGl0LHJlLFJlLCImIiwiXFwmIik7RyhILHJlLFJlLCJcdTIxMzUiLCJcXGFsZXBoIiwhMCk7RyhILHJlLFJlLCJcdTIyMDAiLCJcXGZvcmFsbCIsITApO0coSCxyZSxSZSwiXHUyMTBGIiwiXFxoYmFyIiwhMCk7RyhILHJlLFJlLCJcdTIyMDMiLCJcXGV4aXN0cyIsITApO0coSCxyZSxSZSwiXHUyMjA3IiwiXFxuYWJsYSIsITApO0coSCxyZSxSZSwiXHUyNjZEIiwiXFxmbGF0IiwhMCk7RyhILHJlLFJlLCJcdTIxMTMiLCJcXGVsbCIsITApO0coSCxyZSxSZSwiXHUyNjZFIiwiXFxuYXR1cmFsIiwhMCk7RyhILHJlLFJlLCJcdTI2NjMiLCJcXGNsdWJzdWl0IiwhMCk7RyhILHJlLFJlLCJcdTIxMTgiLCJcXHdwIiwhMCk7RyhILHJlLFJlLCJcdTI2NkYiLCJcXHNoYXJwIiwhMCk7RyhILHJlLFJlLCJcdTI2NjIiLCJcXGRpYW1vbmRzdWl0IiwhMCk7RyhILHJlLFJlLCJcdTIxMUMiLCJcXFJlIiwhMCk7RyhILHJlLFJlLCJcdTI2NjEiLCJcXGhlYXJ0c3VpdCIsITApO0coSCxyZSxSZSwiXHUyMTExIiwiXFxJbSIsITApO0coSCxyZSxSZSwiXHUyNjYwIiwiXFxzcGFkZXN1aXQiLCEwKTtHKEgscmUsUmUsIlx4QTciLCJcXFMiLCEwKTtHKGl0LHJlLFJlLCJceEE3IiwiXFxTIik7RyhILHJlLFJlLCJceEI2IiwiXFxQIiwhMCk7RyhpdCxyZSxSZSwiXHhCNiIsIlxcUCIpO0coSCxyZSxSZSwiXHUyMDIwIiwiXFxkYWciKTtHKGl0LHJlLFJlLCJcdTIwMjAiLCJcXGRhZyIpO0coaXQscmUsUmUsIlx1MjAyMCIsIlxcdGV4dGRhZ2dlciIpO0coSCxyZSxSZSwiXHUyMDIxIiwiXFxkZGFnIik7RyhpdCxyZSxSZSwiXHUyMDIxIiwiXFxkZGFnIik7RyhpdCxyZSxSZSwiXHUyMDIxIiwiXFx0ZXh0ZGFnZ2VyZGJsIik7RyhILHJlLG5zLCJcdTIzQjEiLCJcXHJtb3VzdGFjaGUiLCEwKTtHKEgscmUsWnMsIlx1MjNCMCIsIlxcbG1vdXN0YWNoZSIsITApO0coSCxyZSxucywiXHUyN0VGIiwiXFxyZ3JvdXAiLCEwKTtHKEgscmUsWnMsIlx1MjdFRSIsIlxcbGdyb3VwIiwhMCk7RyhILHJlLEl0LCJcdTIyMTMiLCJcXG1wIiwhMCk7RyhILHJlLEl0LCJcdTIyOTYiLCJcXG9taW51cyIsITApO0coSCxyZSxJdCwiXHUyMjhFIiwiXFx1cGx1cyIsITApO0coSCxyZSxJdCwiXHUyMjkzIiwiXFxzcWNhcCIsITApO0coSCxyZSxJdCwiXHUyMjE3IiwiXFxhc3QiKTtHKEgscmUsSXQsIlx1MjI5NCIsIlxcc3FjdXAiLCEwKTtHKEgscmUsSXQsIlx1MjVFRiIsIlxcYmlnY2lyYyIsITApO0coSCxyZSxJdCwiXHUyMjE5IiwiXFxidWxsZXQiLCEwKTtHKEgscmUsSXQsIlx1MjAyMSIsIlxcZGRhZ2dlciIpO0coSCxyZSxJdCwiXHUyMjQwIiwiXFx3ciIsITApO0coSCxyZSxJdCwiXHUyQTNGIiwiXFxhbWFsZyIpO0coSCxyZSxJdCwiJiIsIlxcQW5kIik7RyhILHJlLEVlLCJcdTI3RjUiLCJcXGxvbmdsZWZ0YXJyb3ciLCEwKTtHKEgscmUsRWUsIlx1MjFEMCIsIlxcTGVmdGFycm93IiwhMCk7RyhILHJlLEVlLCJcdTI3RjgiLCJcXExvbmdsZWZ0YXJyb3ciLCEwKTtHKEgscmUsRWUsIlx1MjdGNiIsIlxcbG9uZ3JpZ2h0YXJyb3ciLCEwKTtHKEgscmUsRWUsIlx1MjFEMiIsIlxcUmlnaHRhcnJvdyIsITApO0coSCxyZSxFZSwiXHUyN0Y5IiwiXFxMb25ncmlnaHRhcnJvdyIsITApO0coSCxyZSxFZSwiXHUyMTk0IiwiXFxsZWZ0cmlnaHRhcnJvdyIsITApO0coSCxyZSxFZSwiXHUyN0Y3IiwiXFxsb25nbGVmdHJpZ2h0YXJyb3ciLCEwKTtHKEgscmUsRWUsIlx1MjFENCIsIlxcTGVmdHJpZ2h0YXJyb3ciLCEwKTtHKEgscmUsRWUsIlx1MjdGQSIsIlxcTG9uZ2xlZnRyaWdodGFycm93IiwhMCk7RyhILHJlLEVlLCJcdTIxQTYiLCJcXG1hcHN0byIsITApO0coSCxyZSxFZSwiXHUyN0ZDIiwiXFxsb25nbWFwc3RvIiwhMCk7RyhILHJlLEVlLCJcdTIxOTciLCJcXG5lYXJyb3ciLCEwKTtHKEgscmUsRWUsIlx1MjFBOSIsIlxcaG9va2xlZnRhcnJvdyIsITApO0coSCxyZSxFZSwiXHUyMUFBIiwiXFxob29rcmlnaHRhcnJvdyIsITApO0coSCxyZSxFZSwiXHUyMTk4IiwiXFxzZWFycm93IiwhMCk7RyhILHJlLEVlLCJcdTIxQkMiLCJcXGxlZnRoYXJwb29udXAiLCEwKTtHKEgscmUsRWUsIlx1MjFDMCIsIlxccmlnaHRoYXJwb29udXAiLCEwKTtHKEgscmUsRWUsIlx1MjE5OSIsIlxcc3dhcnJvdyIsITApO0coSCxyZSxFZSwiXHUyMUJEIiwiXFxsZWZ0aGFycG9vbmRvd24iLCEwKTtHKEgscmUsRWUsIlx1MjFDMSIsIlxccmlnaHRoYXJwb29uZG93biIsITApO0coSCxyZSxFZSwiXHUyMTk2IiwiXFxud2Fycm93IiwhMCk7RyhILHJlLEVlLCJcdTIxQ0MiLCJcXHJpZ2h0bGVmdGhhcnBvb25zIiwhMCk7RyhILGtlLEVlLCJcdTIyNkUiLCJcXG5sZXNzIiwhMCk7RyhILGtlLEVlLCJcdUUwMTAiLCJcXEBubGVxc2xhbnQiKTtHKEgsa2UsRWUsIlx1RTAxMSIsIlxcQG5sZXFxIik7RyhILGtlLEVlLCJcdTJBODciLCJcXGxuZXEiLCEwKTtHKEgsa2UsRWUsIlx1MjI2OCIsIlxcbG5lcXEiLCEwKTtHKEgsa2UsRWUsIlx1RTAwQyIsIlxcQGx2ZXJ0bmVxcSIpO0coSCxrZSxFZSwiXHUyMkU2IiwiXFxsbnNpbSIsITApO0coSCxrZSxFZSwiXHUyQTg5IiwiXFxsbmFwcHJveCIsITApO0coSCxrZSxFZSwiXHUyMjgwIiwiXFxucHJlYyIsITApO0coSCxrZSxFZSwiXHUyMkUwIiwiXFxucHJlY2VxIiwhMCk7RyhILGtlLEVlLCJcdTIyRTgiLCJcXHByZWNuc2ltIiwhMCk7RyhILGtlLEVlLCJcdTJBQjkiLCJcXHByZWNuYXBwcm94IiwhMCk7RyhILGtlLEVlLCJcdTIyNDEiLCJcXG5zaW0iLCEwKTtHKEgsa2UsRWUsIlx1RTAwNiIsIlxcQG5zaG9ydG1pZCIpO0coSCxrZSxFZSwiXHUyMjI0IiwiXFxubWlkIiwhMCk7RyhILGtlLEVlLCJcdTIyQUMiLCJcXG52ZGFzaCIsITApO0coSCxrZSxFZSwiXHUyMkFEIiwiXFxudkRhc2giLCEwKTtHKEgsa2UsRWUsIlx1MjJFQSIsIlxcbnRyaWFuZ2xlbGVmdCIpO0coSCxrZSxFZSwiXHUyMkVDIiwiXFxudHJpYW5nbGVsZWZ0ZXEiLCEwKTtHKEgsa2UsRWUsIlx1MjI4QSIsIlxcc3Vic2V0bmVxIiwhMCk7RyhILGtlLEVlLCJcdUUwMUEiLCJcXEB2YXJzdWJzZXRuZXEiKTtHKEgsa2UsRWUsIlx1MkFDQiIsIlxcc3Vic2V0bmVxcSIsITApO0coSCxrZSxFZSwiXHVFMDE3IiwiXFxAdmFyc3Vic2V0bmVxcSIpO0coSCxrZSxFZSwiXHUyMjZGIiwiXFxuZ3RyIiwhMCk7RyhILGtlLEVlLCJcdUUwMEYiLCJcXEBuZ2Vxc2xhbnQiKTtHKEgsa2UsRWUsIlx1RTAwRSIsIlxcQG5nZXFxIik7RyhILGtlLEVlLCJcdTJBODgiLCJcXGduZXEiLCEwKTtHKEgsa2UsRWUsIlx1MjI2OSIsIlxcZ25lcXEiLCEwKTtHKEgsa2UsRWUsIlx1RTAwRCIsIlxcQGd2ZXJ0bmVxcSIpO0coSCxrZSxFZSwiXHUyMkU3IiwiXFxnbnNpbSIsITApO0coSCxrZSxFZSwiXHUyQThBIiwiXFxnbmFwcHJveCIsITApO0coSCxrZSxFZSwiXHUyMjgxIiwiXFxuc3VjYyIsITApO0coSCxrZSxFZSwiXHUyMkUxIiwiXFxuc3VjY2VxIiwhMCk7RyhILGtlLEVlLCJcdTIyRTkiLCJcXHN1Y2Nuc2ltIiwhMCk7RyhILGtlLEVlLCJcdTJBQkEiLCJcXHN1Y2NuYXBwcm94IiwhMCk7RyhILGtlLEVlLCJcdTIyNDYiLCJcXG5jb25nIiwhMCk7RyhILGtlLEVlLCJcdUUwMDciLCJcXEBuc2hvcnRwYXJhbGxlbCIpO0coSCxrZSxFZSwiXHUyMjI2IiwiXFxucGFyYWxsZWwiLCEwKTtHKEgsa2UsRWUsIlx1MjJBRiIsIlxcblZEYXNoIiwhMCk7RyhILGtlLEVlLCJcdTIyRUIiLCJcXG50cmlhbmdsZXJpZ2h0Iik7RyhILGtlLEVlLCJcdTIyRUQiLCJcXG50cmlhbmdsZXJpZ2h0ZXEiLCEwKTtHKEgsa2UsRWUsIlx1RTAxOCIsIlxcQG5zdXBzZXRlcXEiKTtHKEgsa2UsRWUsIlx1MjI4QiIsIlxcc3Vwc2V0bmVxIiwhMCk7RyhILGtlLEVlLCJcdUUwMUIiLCJcXEB2YXJzdXBzZXRuZXEiKTtHKEgsa2UsRWUsIlx1MkFDQyIsIlxcc3Vwc2V0bmVxcSIsITApO0coSCxrZSxFZSwiXHVFMDE5IiwiXFxAdmFyc3Vwc2V0bmVxcSIpO0coSCxrZSxFZSwiXHUyMkFFIiwiXFxuVmRhc2giLCEwKTtHKEgsa2UsRWUsIlx1MkFCNSIsIlxccHJlY25lcXEiLCEwKTtHKEgsa2UsRWUsIlx1MkFCNiIsIlxcc3VjY25lcXEiLCEwKTtHKEgsa2UsRWUsIlx1RTAxNiIsIlxcQG5zdWJzZXRlcXEiKTtHKEgsa2UsSXQsIlx1MjJCNCIsIlxcdW5saGQiKTtHKEgsa2UsSXQsIlx1MjJCNSIsIlxcdW5yaGQiKTtHKEgsa2UsRWUsIlx1MjE5QSIsIlxcbmxlZnRhcnJvdyIsITApO0coSCxrZSxFZSwiXHUyMTlCIiwiXFxucmlnaHRhcnJvdyIsITApO0coSCxrZSxFZSwiXHUyMUNEIiwiXFxuTGVmdGFycm93IiwhMCk7RyhILGtlLEVlLCJcdTIxQ0YiLCJcXG5SaWdodGFycm93IiwhMCk7RyhILGtlLEVlLCJcdTIxQUUiLCJcXG5sZWZ0cmlnaHRhcnJvdyIsITApO0coSCxrZSxFZSwiXHUyMUNFIiwiXFxuTGVmdHJpZ2h0YXJyb3ciLCEwKTtHKEgsa2UsRWUsIlx1MjVCMyIsIlxcdmFydHJpYW5nbGUiKTtHKEgsa2UsUmUsIlx1MjEwRiIsIlxcaHNsYXNoIik7RyhILGtlLFJlLCJcdTI1QkQiLCJcXHRyaWFuZ2xlZG93biIpO0coSCxrZSxSZSwiXHUyNUNBIiwiXFxsb3plbmdlIik7RyhILGtlLFJlLCJcdTI0QzgiLCJcXGNpcmNsZWRTIik7RyhILGtlLFJlLCJceEFFIiwiXFxjaXJjbGVkUiIpO0coaXQsa2UsUmUsIlx4QUUiLCJcXGNpcmNsZWRSIik7RyhILGtlLFJlLCJcdTIyMjEiLCJcXG1lYXN1cmVkYW5nbGUiLCEwKTtHKEgsa2UsUmUsIlx1MjIwNCIsIlxcbmV4aXN0cyIpO0coSCxrZSxSZSwiXHUyMTI3IiwiXFxtaG8iKTtHKEgsa2UsUmUsIlx1MjEzMiIsIlxcRmludiIsITApO0coSCxrZSxSZSwiXHUyMTQxIiwiXFxHYW1lIiwhMCk7RyhILGtlLFJlLCJcdTIwMzUiLCJcXGJhY2twcmltZSIpO0coSCxrZSxSZSwiXHUyNUIyIiwiXFxibGFja3RyaWFuZ2xlIik7RyhILGtlLFJlLCJcdTI1QkMiLCJcXGJsYWNrdHJpYW5nbGVkb3duIik7RyhILGtlLFJlLCJcdTI1QTAiLCJcXGJsYWNrc3F1YXJlIik7RyhILGtlLFJlLCJcdTI5RUIiLCJcXGJsYWNrbG96ZW5nZSIpO0coSCxrZSxSZSwiXHUyNjA1IiwiXFxiaWdzdGFyIik7RyhILGtlLFJlLCJcdTIyMjIiLCJcXHNwaGVyaWNhbGFuZ2xlIiwhMCk7RyhILGtlLFJlLCJcdTIyMDEiLCJcXGNvbXBsZW1lbnQiLCEwKTtHKEgsa2UsUmUsIlx4RjAiLCJcXGV0aCIsITApO0coaXQscmUsUmUsIlx4RjAiLCJceEYwIik7RyhILGtlLFJlLCJcdTI1NzEiLCJcXGRpYWd1cCIpO0coSCxrZSxSZSwiXHUyNTcyIiwiXFxkaWFnZG93biIpO0coSCxrZSxSZSwiXHUyNUExIiwiXFxzcXVhcmUiKTtHKEgsa2UsUmUsIlx1MjVBMSIsIlxcQm94Iik7RyhILGtlLFJlLCJcdTI1Q0EiLCJcXERpYW1vbmQiKTtHKEgsa2UsUmUsIlx4QTUiLCJcXHllbiIsITApO0coaXQsa2UsUmUsIlx4QTUiLCJcXHllbiIsITApO0coSCxrZSxSZSwiXHUyNzEzIiwiXFxjaGVja21hcmsiLCEwKTtHKGl0LGtlLFJlLCJcdTI3MTMiLCJcXGNoZWNrbWFyayIpO0coSCxrZSxSZSwiXHUyMTM2IiwiXFxiZXRoIiwhMCk7RyhILGtlLFJlLCJcdTIxMzgiLCJcXGRhbGV0aCIsITApO0coSCxrZSxSZSwiXHUyMTM3IiwiXFxnaW1lbCIsITApO0coSCxrZSxSZSwiXHUwM0REIiwiXFxkaWdhbW1hIiwhMCk7RyhILGtlLFJlLCJcdTAzRjAiLCJcXHZhcmthcHBhIik7RyhILGtlLFpzLCJcdTI1MEMiLCJcXEB1bGNvcm5lciIsITApO0coSCxrZSxucywiXHUyNTEwIiwiXFxAdXJjb3JuZXIiLCEwKTtHKEgsa2UsWnMsIlx1MjUxNCIsIlxcQGxsY29ybmVyIiwhMCk7RyhILGtlLG5zLCJcdTI1MTgiLCJcXEBscmNvcm5lciIsITApO0coSCxrZSxFZSwiXHUyMjY2IiwiXFxsZXFxIiwhMCk7RyhILGtlLEVlLCJcdTJBN0QiLCJcXGxlcXNsYW50IiwhMCk7RyhILGtlLEVlLCJcdTJBOTUiLCJcXGVxc2xhbnRsZXNzIiwhMCk7RyhILGtlLEVlLCJcdTIyNzIiLCJcXGxlc3NzaW0iLCEwKTtHKEgsa2UsRWUsIlx1MkE4NSIsIlxcbGVzc2FwcHJveCIsITApO0coSCxrZSxFZSwiXHUyMjRBIiwiXFxhcHByb3hlcSIsITApO0coSCxrZSxJdCwiXHUyMkQ2IiwiXFxsZXNzZG90Iik7RyhILGtlLEVlLCJcdTIyRDgiLCJcXGxsbCIsITApO0coSCxrZSxFZSwiXHUyMjc2IiwiXFxsZXNzZ3RyIiwhMCk7RyhILGtlLEVlLCJcdTIyREEiLCJcXGxlc3NlcWd0ciIsITApO0coSCxrZSxFZSwiXHUyQThCIiwiXFxsZXNzZXFxZ3RyIiwhMCk7RyhILGtlLEVlLCJcdTIyNTEiLCJcXGRvdGVxZG90Iik7RyhILGtlLEVlLCJcdTIyNTMiLCJcXHJpc2luZ2RvdHNlcSIsITApO0coSCxrZSxFZSwiXHUyMjUyIiwiXFxmYWxsaW5nZG90c2VxIiwhMCk7RyhILGtlLEVlLCJcdTIyM0QiLCJcXGJhY2tzaW0iLCEwKTtHKEgsa2UsRWUsIlx1MjJDRCIsIlxcYmFja3NpbWVxIiwhMCk7RyhILGtlLEVlLCJcdTJBQzUiLCJcXHN1YnNldGVxcSIsITApO0coSCxrZSxFZSwiXHUyMkQwIiwiXFxTdWJzZXQiLCEwKTtHKEgsa2UsRWUsIlx1MjI4RiIsIlxcc3FzdWJzZXQiLCEwKTtHKEgsa2UsRWUsIlx1MjI3QyIsIlxccHJlY2N1cmx5ZXEiLCEwKTtHKEgsa2UsRWUsIlx1MjJERSIsIlxcY3VybHllcXByZWMiLCEwKTtHKEgsa2UsRWUsIlx1MjI3RSIsIlxccHJlY3NpbSIsITApO0coSCxrZSxFZSwiXHUyQUI3IiwiXFxwcmVjYXBwcm94IiwhMCk7RyhILGtlLEVlLCJcdTIyQjIiLCJcXHZhcnRyaWFuZ2xlbGVmdCIpO0coSCxrZSxFZSwiXHUyMkI0IiwiXFx0cmlhbmdsZWxlZnRlcSIpO0coSCxrZSxFZSwiXHUyMkE4IiwiXFx2RGFzaCIsITApO0coSCxrZSxFZSwiXHUyMkFBIiwiXFxWdmRhc2giLCEwKTtHKEgsa2UsRWUsIlx1MjMyMyIsIlxcc21hbGxzbWlsZSIpO0coSCxrZSxFZSwiXHUyMzIyIiwiXFxzbWFsbGZyb3duIik7RyhILGtlLEVlLCJcdTIyNEYiLCJcXGJ1bXBlcSIsITApO0coSCxrZSxFZSwiXHUyMjRFIiwiXFxCdW1wZXEiLCEwKTtHKEgsa2UsRWUsIlx1MjI2NyIsIlxcZ2VxcSIsITApO0coSCxrZSxFZSwiXHUyQTdFIiwiXFxnZXFzbGFudCIsITApO0coSCxrZSxFZSwiXHUyQTk2IiwiXFxlcXNsYW50Z3RyIiwhMCk7RyhILGtlLEVlLCJcdTIyNzMiLCJcXGd0cnNpbSIsITApO0coSCxrZSxFZSwiXHUyQTg2IiwiXFxndHJhcHByb3giLCEwKTtHKEgsa2UsSXQsIlx1MjJENyIsIlxcZ3RyZG90Iik7RyhILGtlLEVlLCJcdTIyRDkiLCJcXGdnZyIsITApO0coSCxrZSxFZSwiXHUyMjc3IiwiXFxndHJsZXNzIiwhMCk7RyhILGtlLEVlLCJcdTIyREIiLCJcXGd0cmVxbGVzcyIsITApO0coSCxrZSxFZSwiXHUyQThDIiwiXFxndHJlcXFsZXNzIiwhMCk7RyhILGtlLEVlLCJcdTIyNTYiLCJcXGVxY2lyYyIsITApO0coSCxrZSxFZSwiXHUyMjU3IiwiXFxjaXJjZXEiLCEwKTtHKEgsa2UsRWUsIlx1MjI1QyIsIlxcdHJpYW5nbGVxIiwhMCk7RyhILGtlLEVlLCJcdTIyM0MiLCJcXHRoaWNrc2ltIik7RyhILGtlLEVlLCJcdTIyNDgiLCJcXHRoaWNrYXBwcm94Iik7RyhILGtlLEVlLCJcdTJBQzYiLCJcXHN1cHNldGVxcSIsITApO0coSCxrZSxFZSwiXHUyMkQxIiwiXFxTdXBzZXQiLCEwKTtHKEgsa2UsRWUsIlx1MjI5MCIsIlxcc3FzdXBzZXQiLCEwKTtHKEgsa2UsRWUsIlx1MjI3RCIsIlxcc3VjY2N1cmx5ZXEiLCEwKTtHKEgsa2UsRWUsIlx1MjJERiIsIlxcY3VybHllcXN1Y2MiLCEwKTtHKEgsa2UsRWUsIlx1MjI3RiIsIlxcc3VjY3NpbSIsITApO0coSCxrZSxFZSwiXHUyQUI4IiwiXFxzdWNjYXBwcm94IiwhMCk7RyhILGtlLEVlLCJcdTIyQjMiLCJcXHZhcnRyaWFuZ2xlcmlnaHQiKTtHKEgsa2UsRWUsIlx1MjJCNSIsIlxcdHJpYW5nbGVyaWdodGVxIik7RyhILGtlLEVlLCJcdTIyQTkiLCJcXFZkYXNoIiwhMCk7RyhILGtlLEVlLCJcdTIyMjMiLCJcXHNob3J0bWlkIik7RyhILGtlLEVlLCJcdTIyMjUiLCJcXHNob3J0cGFyYWxsZWwiKTtHKEgsa2UsRWUsIlx1MjI2QyIsIlxcYmV0d2VlbiIsITApO0coSCxrZSxFZSwiXHUyMkQ0IiwiXFxwaXRjaGZvcmsiLCEwKTtHKEgsa2UsRWUsIlx1MjIxRCIsIlxcdmFycHJvcHRvIik7RyhILGtlLEVlLCJcdTI1QzAiLCJcXGJsYWNrdHJpYW5nbGVsZWZ0Iik7RyhILGtlLEVlLCJcdTIyMzQiLCJcXHRoZXJlZm9yZSIsITApO0coSCxrZSxFZSwiXHUyMjBEIiwiXFxiYWNrZXBzaWxvbiIpO0coSCxrZSxFZSwiXHUyNUI2IiwiXFxibGFja3RyaWFuZ2xlcmlnaHQiKTtHKEgsa2UsRWUsIlx1MjIzNSIsIlxcYmVjYXVzZSIsITApO0coSCxrZSxFZSwiXHUyMkQ4IiwiXFxsbGxlc3MiKTtHKEgsa2UsRWUsIlx1MjJEOSIsIlxcZ2dndHIiKTtHKEgsa2UsSXQsIlx1MjJCMiIsIlxcbGhkIik7RyhILGtlLEl0LCJcdTIyQjMiLCJcXHJoZCIpO0coSCxrZSxFZSwiXHUyMjQyIiwiXFxlcXNpbSIsITApO0coSCxyZSxFZSwiXHUyMkM4IiwiXFxKb2luIik7RyhILGtlLEVlLCJcdTIyNTEiLCJcXERvdGVxIiwhMCk7RyhILGtlLEl0LCJcdTIyMTQiLCJcXGRvdHBsdXMiLCEwKTtHKEgsa2UsSXQsIlx1MjIxNiIsIlxcc21hbGxzZXRtaW51cyIpO0coSCxrZSxJdCwiXHUyMkQyIiwiXFxDYXAiLCEwKTtHKEgsa2UsSXQsIlx1MjJEMyIsIlxcQ3VwIiwhMCk7RyhILGtlLEl0LCJcdTJBNUUiLCJcXGRvdWJsZWJhcndlZGdlIiwhMCk7RyhILGtlLEl0LCJcdTIyOUYiLCJcXGJveG1pbnVzIiwhMCk7RyhILGtlLEl0LCJcdTIyOUUiLCJcXGJveHBsdXMiLCEwKTtHKEgsa2UsSXQsIlx1MjJDNyIsIlxcZGl2aWRlb250aW1lcyIsITApO0coSCxrZSxJdCwiXHUyMkM5IiwiXFxsdGltZXMiLCEwKTtHKEgsa2UsSXQsIlx1MjJDQSIsIlxccnRpbWVzIiwhMCk7RyhILGtlLEl0LCJcdTIyQ0IiLCJcXGxlZnR0aHJlZXRpbWVzIiwhMCk7RyhILGtlLEl0LCJcdTIyQ0MiLCJcXHJpZ2h0dGhyZWV0aW1lcyIsITApO0coSCxrZSxJdCwiXHUyMkNGIiwiXFxjdXJseXdlZGdlIiwhMCk7RyhILGtlLEl0LCJcdTIyQ0UiLCJcXGN1cmx5dmVlIiwhMCk7RyhILGtlLEl0LCJcdTIyOUQiLCJcXGNpcmNsZWRkYXNoIiwhMCk7RyhILGtlLEl0LCJcdTIyOUIiLCJcXGNpcmNsZWRhc3QiLCEwKTtHKEgsa2UsSXQsIlx1MjJDNSIsIlxcY2VudGVyZG90Iik7RyhILGtlLEl0LCJcdTIyQkEiLCJcXGludGVyY2FsIiwhMCk7RyhILGtlLEl0LCJcdTIyRDIiLCJcXGRvdWJsZWNhcCIpO0coSCxrZSxJdCwiXHUyMkQzIiwiXFxkb3VibGVjdXAiKTtHKEgsa2UsSXQsIlx1MjJBMCIsIlxcYm94dGltZXMiLCEwKTtHKEgsa2UsRWUsIlx1MjFFMiIsIlxcZGFzaHJpZ2h0YXJyb3ciLCEwKTtHKEgsa2UsRWUsIlx1MjFFMCIsIlxcZGFzaGxlZnRhcnJvdyIsITApO0coSCxrZSxFZSwiXHUyMUM3IiwiXFxsZWZ0bGVmdGFycm93cyIsITApO0coSCxrZSxFZSwiXHUyMUM2IiwiXFxsZWZ0cmlnaHRhcnJvd3MiLCEwKTtHKEgsa2UsRWUsIlx1MjFEQSIsIlxcTGxlZnRhcnJvdyIsITApO0coSCxrZSxFZSwiXHUyMTlFIiwiXFx0d29oZWFkbGVmdGFycm93IiwhMCk7RyhILGtlLEVlLCJcdTIxQTIiLCJcXGxlZnRhcnJvd3RhaWwiLCEwKTtHKEgsa2UsRWUsIlx1MjFBQiIsIlxcbG9vcGFycm93bGVmdCIsITApO0coSCxrZSxFZSwiXHUyMUNCIiwiXFxsZWZ0cmlnaHRoYXJwb29ucyIsITApO0coSCxrZSxFZSwiXHUyMUI2IiwiXFxjdXJ2ZWFycm93bGVmdCIsITApO0coSCxrZSxFZSwiXHUyMUJBIiwiXFxjaXJjbGVhcnJvd2xlZnQiLCEwKTtHKEgsa2UsRWUsIlx1MjFCMCIsIlxcTHNoIiwhMCk7RyhILGtlLEVlLCJcdTIxQzgiLCJcXHVwdXBhcnJvd3MiLCEwKTtHKEgsa2UsRWUsIlx1MjFCRiIsIlxcdXBoYXJwb29ubGVmdCIsITApO0coSCxrZSxFZSwiXHUyMUMzIiwiXFxkb3duaGFycG9vbmxlZnQiLCEwKTtHKEgscmUsRWUsIlx1MjJCNiIsIlxcb3JpZ29mIiwhMCk7RyhILHJlLEVlLCJcdTIyQjciLCJcXGltYWdlb2YiLCEwKTtHKEgsa2UsRWUsIlx1MjJCOCIsIlxcbXVsdGltYXAiLCEwKTtHKEgsa2UsRWUsIlx1MjFBRCIsIlxcbGVmdHJpZ2h0c3F1aWdhcnJvdyIsITApO0coSCxrZSxFZSwiXHUyMUM5IiwiXFxyaWdodHJpZ2h0YXJyb3dzIiwhMCk7RyhILGtlLEVlLCJcdTIxQzQiLCJcXHJpZ2h0bGVmdGFycm93cyIsITApO0coSCxrZSxFZSwiXHUyMUEwIiwiXFx0d29oZWFkcmlnaHRhcnJvdyIsITApO0coSCxrZSxFZSwiXHUyMUEzIiwiXFxyaWdodGFycm93dGFpbCIsITApO0coSCxrZSxFZSwiXHUyMUFDIiwiXFxsb29wYXJyb3dyaWdodCIsITApO0coSCxrZSxFZSwiXHUyMUI3IiwiXFxjdXJ2ZWFycm93cmlnaHQiLCEwKTtHKEgsa2UsRWUsIlx1MjFCQiIsIlxcY2lyY2xlYXJyb3dyaWdodCIsITApO0coSCxrZSxFZSwiXHUyMUIxIiwiXFxSc2giLCEwKTtHKEgsa2UsRWUsIlx1MjFDQSIsIlxcZG93bmRvd25hcnJvd3MiLCEwKTtHKEgsa2UsRWUsIlx1MjFCRSIsIlxcdXBoYXJwb29ucmlnaHQiLCEwKTtHKEgsa2UsRWUsIlx1MjFDMiIsIlxcZG93bmhhcnBvb25yaWdodCIsITApO0coSCxrZSxFZSwiXHUyMUREIiwiXFxyaWdodHNxdWlnYXJyb3ciLCEwKTtHKEgsa2UsRWUsIlx1MjFERCIsIlxcbGVhZHN0byIpO0coSCxrZSxFZSwiXHUyMURCIiwiXFxScmlnaHRhcnJvdyIsITApO0coSCxrZSxFZSwiXHUyMUJFIiwiXFxyZXN0cmljdGlvbiIpO0coSCxyZSxSZSwiXHUyMDE4IiwiYCIpO0coSCxyZSxSZSwiJCIsIlxcJCIpO0coaXQscmUsUmUsIiQiLCJcXCQiKTtHKGl0LHJlLFJlLCIkIiwiXFx0ZXh0ZG9sbGFyIik7RyhILHJlLFJlLCIlIiwiXFwlIik7RyhpdCxyZSxSZSwiJSIsIlxcJSIpO0coSCxyZSxSZSwiXyIsIlxcXyIpO0coaXQscmUsUmUsIl8iLCJcXF8iKTtHKGl0LHJlLFJlLCJfIiwiXFx0ZXh0dW5kZXJzY29yZSIpO0coSCxyZSxSZSwiXHUyMjIwIiwiXFxhbmdsZSIsITApO0coSCxyZSxSZSwiXHUyMjFFIiwiXFxpbmZ0eSIsITApO0coSCxyZSxSZSwiXHUyMDMyIiwiXFxwcmltZSIpO0coSCxyZSxSZSwiXHUyNUIzIiwiXFx0cmlhbmdsZSIpO0coSCxyZSxSZSwiXHUwMzkzIiwiXFxHYW1tYSIsITApO0coSCxyZSxSZSwiXHUwMzk0IiwiXFxEZWx0YSIsITApO0coSCxyZSxSZSwiXHUwMzk4IiwiXFxUaGV0YSIsITApO0coSCxyZSxSZSwiXHUwMzlCIiwiXFxMYW1iZGEiLCEwKTtHKEgscmUsUmUsIlx1MDM5RSIsIlxcWGkiLCEwKTtHKEgscmUsUmUsIlx1MDNBMCIsIlxcUGkiLCEwKTtHKEgscmUsUmUsIlx1MDNBMyIsIlxcU2lnbWEiLCEwKTtHKEgscmUsUmUsIlx1MDNBNSIsIlxcVXBzaWxvbiIsITApO0coSCxyZSxSZSwiXHUwM0E2IiwiXFxQaGkiLCEwKTtHKEgscmUsUmUsIlx1MDNBOCIsIlxcUHNpIiwhMCk7RyhILHJlLFJlLCJcdTAzQTkiLCJcXE9tZWdhIiwhMCk7RyhILHJlLFJlLCJBIiwiXHUwMzkxIik7RyhILHJlLFJlLCJCIiwiXHUwMzkyIik7RyhILHJlLFJlLCJFIiwiXHUwMzk1Iik7RyhILHJlLFJlLCJaIiwiXHUwMzk2Iik7RyhILHJlLFJlLCJIIiwiXHUwMzk3Iik7RyhILHJlLFJlLCJJIiwiXHUwMzk5Iik7RyhILHJlLFJlLCJLIiwiXHUwMzlBIik7RyhILHJlLFJlLCJNIiwiXHUwMzlDIik7RyhILHJlLFJlLCJOIiwiXHUwMzlEIik7RyhILHJlLFJlLCJPIiwiXHUwMzlGIik7RyhILHJlLFJlLCJQIiwiXHUwM0ExIik7RyhILHJlLFJlLCJUIiwiXHUwM0E0Iik7RyhILHJlLFJlLCJYIiwiXHUwM0E3Iik7RyhILHJlLFJlLCJceEFDIiwiXFxuZWciLCEwKTtHKEgscmUsUmUsIlx4QUMiLCJcXGxub3QiKTtHKEgscmUsUmUsIlx1MjJBNCIsIlxcdG9wIik7RyhILHJlLFJlLCJcdTIyQTUiLCJcXGJvdCIpO0coSCxyZSxSZSwiXHUyMjA1IiwiXFxlbXB0eXNldCIpO0coSCxrZSxSZSwiXHUyMjA1IiwiXFx2YXJub3RoaW5nIik7RyhILHJlLHJyLCJcdTAzQjEiLCJcXGFscGhhIiwhMCk7RyhILHJlLHJyLCJcdTAzQjIiLCJcXGJldGEiLCEwKTtHKEgscmUscnIsIlx1MDNCMyIsIlxcZ2FtbWEiLCEwKTtHKEgscmUscnIsIlx1MDNCNCIsIlxcZGVsdGEiLCEwKTtHKEgscmUscnIsIlx1MDNGNSIsIlxcZXBzaWxvbiIsITApO0coSCxyZSxyciwiXHUwM0I2IiwiXFx6ZXRhIiwhMCk7RyhILHJlLHJyLCJcdTAzQjciLCJcXGV0YSIsITApO0coSCxyZSxyciwiXHUwM0I4IiwiXFx0aGV0YSIsITApO0coSCxyZSxyciwiXHUwM0I5IiwiXFxpb3RhIiwhMCk7RyhILHJlLHJyLCJcdTAzQkEiLCJcXGthcHBhIiwhMCk7RyhILHJlLHJyLCJcdTAzQkIiLCJcXGxhbWJkYSIsITApO0coSCxyZSxyciwiXHUwM0JDIiwiXFxtdSIsITApO0coSCxyZSxyciwiXHUwM0JEIiwiXFxudSIsITApO0coSCxyZSxyciwiXHUwM0JFIiwiXFx4aSIsITApO0coSCxyZSxyciwiXHUwM0JGIiwiXFxvbWljcm9uIiwhMCk7RyhILHJlLHJyLCJcdTAzQzAiLCJcXHBpIiwhMCk7RyhILHJlLHJyLCJcdTAzQzEiLCJcXHJobyIsITApO0coSCxyZSxyciwiXHUwM0MzIiwiXFxzaWdtYSIsITApO0coSCxyZSxyciwiXHUwM0M0IiwiXFx0YXUiLCEwKTtHKEgscmUscnIsIlx1MDNDNSIsIlxcdXBzaWxvbiIsITApO0coSCxyZSxyciwiXHUwM0Q1IiwiXFxwaGkiLCEwKTtHKEgscmUscnIsIlx1MDNDNyIsIlxcY2hpIiwhMCk7RyhILHJlLHJyLCJcdTAzQzgiLCJcXHBzaSIsITApO0coSCxyZSxyciwiXHUwM0M5IiwiXFxvbWVnYSIsITApO0coSCxyZSxyciwiXHUwM0I1IiwiXFx2YXJlcHNpbG9uIiwhMCk7RyhILHJlLHJyLCJcdTAzRDEiLCJcXHZhcnRoZXRhIiwhMCk7RyhILHJlLHJyLCJcdTAzRDYiLCJcXHZhcnBpIiwhMCk7RyhILHJlLHJyLCJcdTAzRjEiLCJcXHZhcnJobyIsITApO0coSCxyZSxyciwiXHUwM0MyIiwiXFx2YXJzaWdtYSIsITApO0coSCxyZSxyciwiXHUwM0M2IiwiXFx2YXJwaGkiLCEwKTtHKEgscmUsSXQsIlx1MjIxNyIsIioiLCEwKTtHKEgscmUsSXQsIisiLCIrIik7RyhILHJlLEl0LCJcdTIyMTIiLCItIiwhMCk7RyhILHJlLEl0LCJcdTIyQzUiLCJcXGNkb3QiLCEwKTtHKEgscmUsSXQsIlx1MjIxOCIsIlxcY2lyYyIsITApO0coSCxyZSxJdCwiXHhGNyIsIlxcZGl2IiwhMCk7RyhILHJlLEl0LCJceEIxIiwiXFxwbSIsITApO0coSCxyZSxJdCwiXHhENyIsIlxcdGltZXMiLCEwKTtHKEgscmUsSXQsIlx1MjIyOSIsIlxcY2FwIiwhMCk7RyhILHJlLEl0LCJcdTIyMkEiLCJcXGN1cCIsITApO0coSCxyZSxJdCwiXHUyMjE2IiwiXFxzZXRtaW51cyIsITApO0coSCxyZSxJdCwiXHUyMjI3IiwiXFxsYW5kIik7RyhILHJlLEl0LCJcdTIyMjgiLCJcXGxvciIpO0coSCxyZSxJdCwiXHUyMjI3IiwiXFx3ZWRnZSIsITApO0coSCxyZSxJdCwiXHUyMjI4IiwiXFx2ZWUiLCEwKTtHKEgscmUsUmUsIlx1MjIxQSIsIlxcc3VyZCIpO0coSCxyZSxacywiXHUyN0U4IiwiXFxsYW5nbGUiLCEwKTtHKEgscmUsWnMsIlx1MjIyMyIsIlxcbHZlcnQiKTtHKEgscmUsWnMsIlx1MjIyNSIsIlxcbFZlcnQiKTtHKEgscmUsbnMsIj8iLCI/Iik7RyhILHJlLG5zLCIhIiwiISIpO0coSCxyZSxucywiXHUyN0U5IiwiXFxyYW5nbGUiLCEwKTtHKEgscmUsbnMsIlx1MjIyMyIsIlxccnZlcnQiKTtHKEgscmUsbnMsIlx1MjIyNSIsIlxcclZlcnQiKTtHKEgscmUsRWUsIj0iLCI9Iik7RyhILHJlLEVlLCI6IiwiOiIpO0coSCxyZSxFZSwiXHUyMjQ4IiwiXFxhcHByb3giLCEwKTtHKEgscmUsRWUsIlx1MjI0NSIsIlxcY29uZyIsITApO0coSCxyZSxFZSwiXHUyMjY1IiwiXFxnZSIpO0coSCxyZSxFZSwiXHUyMjY1IiwiXFxnZXEiLCEwKTtHKEgscmUsRWUsIlx1MjE5MCIsIlxcZ2V0cyIpO0coSCxyZSxFZSwiPiIsIlxcZ3QiLCEwKTtHKEgscmUsRWUsIlx1MjIwOCIsIlxcaW4iLCEwKTtHKEgscmUsRWUsIlx1RTAyMCIsIlxcQG5vdCIpO0coSCxyZSxFZSwiXHUyMjgyIiwiXFxzdWJzZXQiLCEwKTtHKEgscmUsRWUsIlx1MjI4MyIsIlxcc3Vwc2V0IiwhMCk7RyhILHJlLEVlLCJcdTIyODYiLCJcXHN1YnNldGVxIiwhMCk7RyhILHJlLEVlLCJcdTIyODciLCJcXHN1cHNldGVxIiwhMCk7RyhILGtlLEVlLCJcdTIyODgiLCJcXG5zdWJzZXRlcSIsITApO0coSCxrZSxFZSwiXHUyMjg5IiwiXFxuc3Vwc2V0ZXEiLCEwKTtHKEgscmUsRWUsIlx1MjJBOCIsIlxcbW9kZWxzIik7RyhILHJlLEVlLCJcdTIxOTAiLCJcXGxlZnRhcnJvdyIsITApO0coSCxyZSxFZSwiXHUyMjY0IiwiXFxsZSIpO0coSCxyZSxFZSwiXHUyMjY0IiwiXFxsZXEiLCEwKTtHKEgscmUsRWUsIjwiLCJcXGx0IiwhMCk7RyhILHJlLEVlLCJcdTIxOTIiLCJcXHJpZ2h0YXJyb3ciLCEwKTtHKEgscmUsRWUsIlx1MjE5MiIsIlxcdG8iKTtHKEgsa2UsRWUsIlx1MjI3MSIsIlxcbmdlcSIsITApO0coSCxrZSxFZSwiXHUyMjcwIiwiXFxubGVxIiwhMCk7RyhILHJlLHB1LCJceEEwIiwiXFwgIik7RyhILHJlLHB1LCJceEEwIiwiXFxzcGFjZSIpO0coSCxyZSxwdSwiXHhBMCIsIlxcbm9icmVha3NwYWNlIik7RyhpdCxyZSxwdSwiXHhBMCIsIlxcICIpO0coaXQscmUscHUsIlx4QTAiLCIgIik7RyhpdCxyZSxwdSwiXHhBMCIsIlxcc3BhY2UiKTtHKGl0LHJlLHB1LCJceEEwIiwiXFxub2JyZWFrc3BhY2UiKTtHKEgscmUscHUsbnVsbCwiXFxub2JyZWFrIik7RyhILHJlLHB1LG51bGwsIlxcYWxsb3dicmVhayIpO0coSCxyZSxEMywiLCIsIiwiKTtHKEgscmUsRDMsIjsiLCI7Iik7RyhILGtlLEl0LCJcdTIyQkMiLCJcXGJhcndlZGdlIiwhMCk7RyhILGtlLEl0LCJcdTIyQkIiLCJcXHZlZWJhciIsITApO0coSCxyZSxJdCwiXHUyMjk5IiwiXFxvZG90IiwhMCk7RyhILHJlLEl0LCJcdTIyOTUiLCJcXG9wbHVzIiwhMCk7RyhILHJlLEl0LCJcdTIyOTciLCJcXG90aW1lcyIsITApO0coSCxyZSxSZSwiXHUyMjAyIiwiXFxwYXJ0aWFsIiwhMCk7RyhILHJlLEl0LCJcdTIyOTgiLCJcXG9zbGFzaCIsITApO0coSCxrZSxJdCwiXHUyMjlBIiwiXFxjaXJjbGVkY2lyYyIsITApO0coSCxrZSxJdCwiXHUyMkExIiwiXFxib3hkb3QiLCEwKTtHKEgscmUsSXQsIlx1MjVCMyIsIlxcYmlndHJpYW5nbGV1cCIpO0coSCxyZSxJdCwiXHUyNUJEIiwiXFxiaWd0cmlhbmdsZWRvd24iKTtHKEgscmUsSXQsIlx1MjAyMCIsIlxcZGFnZ2VyIik7RyhILHJlLEl0LCJcdTIyQzQiLCJcXGRpYW1vbmQiKTtHKEgscmUsSXQsIlx1MjJDNiIsIlxcc3RhciIpO0coSCxyZSxJdCwiXHUyNUMzIiwiXFx0cmlhbmdsZWxlZnQiKTtHKEgscmUsSXQsIlx1MjVCOSIsIlxcdHJpYW5nbGVyaWdodCIpO0coSCxyZSxacywieyIsIlxceyIpO0coaXQscmUsUmUsInsiLCJcXHsiKTtHKGl0LHJlLFJlLCJ7IiwiXFx0ZXh0YnJhY2VsZWZ0Iik7RyhILHJlLG5zLCJ9IiwiXFx9Iik7RyhpdCxyZSxSZSwifSIsIlxcfSIpO0coaXQscmUsUmUsIn0iLCJcXHRleHRicmFjZXJpZ2h0Iik7RyhILHJlLFpzLCJ7IiwiXFxsYnJhY2UiKTtHKEgscmUsbnMsIn0iLCJcXHJicmFjZSIpO0coSCxyZSxacywiWyIsIlxcbGJyYWNrIiwhMCk7RyhpdCxyZSxSZSwiWyIsIlxcbGJyYWNrIiwhMCk7RyhILHJlLG5zLCJdIiwiXFxyYnJhY2siLCEwKTtHKGl0LHJlLFJlLCJdIiwiXFxyYnJhY2siLCEwKTtHKEgscmUsWnMsIigiLCJcXGxwYXJlbiIsITApO0coSCxyZSxucywiKSIsIlxccnBhcmVuIiwhMCk7RyhpdCxyZSxSZSwiPCIsIlxcdGV4dGxlc3MiLCEwKTtHKGl0LHJlLFJlLCI+IiwiXFx0ZXh0Z3JlYXRlciIsITApO0coSCxyZSxacywiXHUyMzBBIiwiXFxsZmxvb3IiLCEwKTtHKEgscmUsbnMsIlx1MjMwQiIsIlxccmZsb29yIiwhMCk7RyhILHJlLFpzLCJcdTIzMDgiLCJcXGxjZWlsIiwhMCk7RyhILHJlLG5zLCJcdTIzMDkiLCJcXHJjZWlsIiwhMCk7RyhILHJlLFJlLCJcXCIsIlxcYmFja3NsYXNoIik7RyhILHJlLFJlLCJcdTIyMjMiLCJ8Iik7RyhILHJlLFJlLCJcdTIyMjMiLCJcXHZlcnQiKTtHKGl0LHJlLFJlLCJ8IiwiXFx0ZXh0YmFyIiwhMCk7RyhILHJlLFJlLCJcdTIyMjUiLCJcXHwiKTtHKEgscmUsUmUsIlx1MjIyNSIsIlxcVmVydCIpO0coaXQscmUsUmUsIlx1MjIyNSIsIlxcdGV4dGJhcmRibCIpO0coaXQscmUsUmUsIn4iLCJcXHRleHRhc2NpaXRpbGRlIik7RyhpdCxyZSxSZSwiXFwiLCJcXHRleHRiYWNrc2xhc2giKTtHKGl0LHJlLFJlLCJeIiwiXFx0ZXh0YXNjaWljaXJjdW0iKTtHKEgscmUsRWUsIlx1MjE5MSIsIlxcdXBhcnJvdyIsITApO0coSCxyZSxFZSwiXHUyMUQxIiwiXFxVcGFycm93IiwhMCk7RyhILHJlLEVlLCJcdTIxOTMiLCJcXGRvd25hcnJvdyIsITApO0coSCxyZSxFZSwiXHUyMUQzIiwiXFxEb3duYXJyb3ciLCEwKTtHKEgscmUsRWUsIlx1MjE5NSIsIlxcdXBkb3duYXJyb3ciLCEwKTtHKEgscmUsRWUsIlx1MjFENSIsIlxcVXBkb3duYXJyb3ciLCEwKTtHKEgscmUsQ2ksIlx1MjIxMCIsIlxcY29wcm9kIik7RyhILHJlLENpLCJcdTIyQzEiLCJcXGJpZ3ZlZSIpO0coSCxyZSxDaSwiXHUyMkMwIiwiXFxiaWd3ZWRnZSIpO0coSCxyZSxDaSwiXHUyQTA0IiwiXFxiaWd1cGx1cyIpO0coSCxyZSxDaSwiXHUyMkMyIiwiXFxiaWdjYXAiKTtHKEgscmUsQ2ksIlx1MjJDMyIsIlxcYmlnY3VwIik7RyhILHJlLENpLCJcdTIyMkIiLCJcXGludCIpO0coSCxyZSxDaSwiXHUyMjJCIiwiXFxpbnRvcCIpO0coSCxyZSxDaSwiXHUyMjJDIiwiXFxpaW50Iik7RyhILHJlLENpLCJcdTIyMkQiLCJcXGlpaW50Iik7RyhILHJlLENpLCJcdTIyMEYiLCJcXHByb2QiKTtHKEgscmUsQ2ksIlx1MjIxMSIsIlxcc3VtIik7RyhILHJlLENpLCJcdTJBMDIiLCJcXGJpZ290aW1lcyIpO0coSCxyZSxDaSwiXHUyQTAxIiwiXFxiaWdvcGx1cyIpO0coSCxyZSxDaSwiXHUyQTAwIiwiXFxiaWdvZG90Iik7RyhILHJlLENpLCJcdTIyMkUiLCJcXG9pbnQiKTtHKEgscmUsQ2ksIlx1MjIyRiIsIlxcb2lpbnQiKTtHKEgscmUsQ2ksIlx1MjIzMCIsIlxcb2lpaW50Iik7RyhILHJlLENpLCJcdTJBMDYiLCJcXGJpZ3NxY3VwIik7RyhILHJlLENpLCJcdTIyMkIiLCJcXHNtYWxsaW50Iik7RyhpdCxyZSxFMCwiXHUyMDI2IiwiXFx0ZXh0ZWxsaXBzaXMiKTtHKEgscmUsRTAsIlx1MjAyNiIsIlxcbWF0aGVsbGlwc2lzIik7RyhpdCxyZSxFMCwiXHUyMDI2IiwiXFxsZG90cyIsITApO0coSCxyZSxFMCwiXHUyMDI2IiwiXFxsZG90cyIsITApO0coSCxyZSxFMCwiXHUyMkVGIiwiXFxAY2RvdHMiLCEwKTtHKEgscmUsRTAsIlx1MjJGMSIsIlxcZGRvdHMiLCEwKTtHKEgscmUsUmUsIlx1MjJFRSIsIlxcdmFydmRvdHMiKTtHKGl0LHJlLFJlLCJcdTIyRUUiLCJcXHZhcnZkb3RzIik7RyhILHJlLEhuLCJcdTAyQ0EiLCJcXGFjdXRlIik7RyhILHJlLEhuLCJcdTAyQ0IiLCJcXGdyYXZlIik7RyhILHJlLEhuLCJceEE4IiwiXFxkZG90Iik7RyhILHJlLEhuLCJ+IiwiXFx0aWxkZSIpO0coSCxyZSxIbiwiXHUwMkM5IiwiXFxiYXIiKTtHKEgscmUsSG4sIlx1MDJEOCIsIlxcYnJldmUiKTtHKEgscmUsSG4sIlx1MDJDNyIsIlxcY2hlY2siKTtHKEgscmUsSG4sIl4iLCJcXGhhdCIpO0coSCxyZSxIbiwiXHUyMEQ3IiwiXFx2ZWMiKTtHKEgscmUsSG4sIlx1MDJEOSIsIlxcZG90Iik7RyhILHJlLEhuLCJcdTAyREEiLCJcXG1hdGhyaW5nIik7RyhILHJlLHJyLCJcdUUxMzEiLCJcXEBpbWF0aCIpO0coSCxyZSxyciwiXHVFMjM3IiwiXFxAam1hdGgiKTtHKEgscmUsUmUsIlx1MDEzMSIsIlx1MDEzMSIpO0coSCxyZSxSZSwiXHUwMjM3IiwiXHUwMjM3Iik7RyhpdCxyZSxSZSwiXHUwMTMxIiwiXFxpIiwhMCk7RyhpdCxyZSxSZSwiXHUwMjM3IiwiXFxqIiwhMCk7RyhpdCxyZSxSZSwiXHhERiIsIlxcc3MiLCEwKTtHKGl0LHJlLFJlLCJceEU2IiwiXFxhZSIsITApO0coaXQscmUsUmUsIlx1MDE1MyIsIlxcb2UiLCEwKTtHKGl0LHJlLFJlLCJceEY4IiwiXFxvIiwhMCk7RyhpdCxyZSxSZSwiXHhDNiIsIlxcQUUiLCEwKTtHKGl0LHJlLFJlLCJcdTAxNTIiLCJcXE9FIiwhMCk7RyhpdCxyZSxSZSwiXHhEOCIsIlxcTyIsITApO0coaXQscmUsSG4sIlx1MDJDQSIsIlxcJyIpO0coaXQscmUsSG4sIlx1MDJDQiIsIlxcYCIpO0coaXQscmUsSG4sIlx1MDJDNiIsIlxcXiIpO0coaXQscmUsSG4sIlx1MDJEQyIsIlxcfiIpO0coaXQscmUsSG4sIlx1MDJDOSIsIlxcPSIpO0coaXQscmUsSG4sIlx1MDJEOCIsIlxcdSIpO0coaXQscmUsSG4sIlx1MDJEOSIsIlxcLiIpO0coaXQscmUsSG4sIlx4QjgiLCJcXGMiKTtHKGl0LHJlLEhuLCJcdTAyREEiLCJcXHIiKTtHKGl0LHJlLEhuLCJcdTAyQzciLCJcXHYiKTtHKGl0LHJlLEhuLCJceEE4IiwnXFwiJyk7RyhpdCxyZSxIbiwiXHUwMkREIiwiXFxIIik7RyhpdCxyZSxIbiwiXHUyNUVGIiwiXFx0ZXh0Y2lyY2xlZCIpO01HPXsiLS0iOiEwLCItLS0iOiEwLCJgYCI6ITAsIicnIjohMH07RyhpdCxyZSxSZSwiXHUyMDEzIiwiLS0iLCEwKTtHKGl0LHJlLFJlLCJcdTIwMTMiLCJcXHRleHRlbmRhc2giKTtHKGl0LHJlLFJlLCJcdTIwMTQiLCItLS0iLCEwKTtHKGl0LHJlLFJlLCJcdTIwMTQiLCJcXHRleHRlbWRhc2giKTtHKGl0LHJlLFJlLCJcdTIwMTgiLCJgIiwhMCk7RyhpdCxyZSxSZSwiXHUyMDE4IiwiXFx0ZXh0cXVvdGVsZWZ0Iik7RyhpdCxyZSxSZSwiXHUyMDE5IiwiJyIsITApO0coaXQscmUsUmUsIlx1MjAxOSIsIlxcdGV4dHF1b3RlcmlnaHQiKTtHKGl0LHJlLFJlLCJcdTIwMUMiLCJgYCIsITApO0coaXQscmUsUmUsIlx1MjAxQyIsIlxcdGV4dHF1b3RlZGJsbGVmdCIpO0coaXQscmUsUmUsIlx1MjAxRCIsIicnIiwhMCk7RyhpdCxyZSxSZSwiXHUyMDFEIiwiXFx0ZXh0cXVvdGVkYmxyaWdodCIpO0coSCxyZSxSZSwiXHhCMCIsIlxcZGVncmVlIiwhMCk7RyhpdCxyZSxSZSwiXHhCMCIsIlxcZGVncmVlIik7RyhpdCxyZSxSZSwiXHhCMCIsIlxcdGV4dGRlZ3JlZSIsITApO0coSCxyZSxSZSwiXHhBMyIsIlxccG91bmRzIik7RyhILHJlLFJlLCJceEEzIiwiXFxtYXRoc3RlcmxpbmciLCEwKTtHKGl0LHJlLFJlLCJceEEzIiwiXFxwb3VuZHMiKTtHKGl0LHJlLFJlLCJceEEzIiwiXFx0ZXh0c3RlcmxpbmciLCEwKTtHKEgsa2UsUmUsIlx1MjcyMCIsIlxcbWFsdGVzZSIpO0coaXQsa2UsUmUsIlx1MjcyMCIsIlxcbWFsdGVzZSIpO2VHPScwMTIzNDU2Nzg5L0AuIic7Zm9yKHUzPTA7dTM8ZUcubGVuZ3RoO3UzKyspTjc9ZUcuY2hhckF0KHUzKSxHKEgscmUsUmUsTjcsTjcpO3RHPScwMTIzNDU2Nzg5IUAqKCktPSsiOzo/Ly4sJztmb3IoaDM9MDtoMzx0Ry5sZW5ndGg7aDMrKylNNz10Ry5jaGFyQXQoaDMpLEcoaXQscmUsUmUsTTcsTTcpO2szPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ijtmb3IoZjM9MDtmMzxrMy5sZW5ndGg7ZjMrKylXeT1rMy5jaGFyQXQoZjMpLEcoSCxyZSxycixXeSxXeSksRyhpdCxyZSxSZSxXeSxXeSk7RyhILGtlLFJlLCJDIiwiXHUyMTAyIik7RyhpdCxrZSxSZSwiQyIsIlx1MjEwMiIpO0coSCxrZSxSZSwiSCIsIlx1MjEwRCIpO0coaXQsa2UsUmUsIkgiLCJcdTIxMEQiKTtHKEgsa2UsUmUsIk4iLCJcdTIxMTUiKTtHKGl0LGtlLFJlLCJOIiwiXHUyMTE1Iik7RyhILGtlLFJlLCJQIiwiXHUyMTE5Iik7RyhpdCxrZSxSZSwiUCIsIlx1MjExOSIpO0coSCxrZSxSZSwiUSIsIlx1MjExQSIpO0coaXQsa2UsUmUsIlEiLCJcdTIxMUEiKTtHKEgsa2UsUmUsIlIiLCJcdTIxMUQiKTtHKGl0LGtlLFJlLCJSIiwiXHUyMTFEIik7RyhILGtlLFJlLCJaIiwiXHUyMTI0Iik7RyhpdCxrZSxSZSwiWiIsIlx1MjEyNCIpO0coSCxyZSxyciwiaCIsIlx1MjEwRSIpO0coaXQscmUscnIsImgiLCJcdTIxMEUiKTtscj0iIjtmb3IoRGE9MDtEYTxrMy5sZW5ndGg7RGErKyl0aT1rMy5jaGFyQXQoRGEpLGxyPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUzNDksNTYzMjArRGEpLEcoSCxyZSxycix0aSxsciksRyhpdCxyZSxSZSx0aSxsciksbHI9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTM0OSw1NjM3MitEYSksRyhILHJlLHJyLHRpLGxyKSxHKGl0LHJlLFJlLHRpLGxyKSxscj1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1MzQ5LDU2NDI0K0RhKSxHKEgscmUscnIsdGksbHIpLEcoaXQscmUsUmUsdGksbHIpLGxyPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUzNDksNTY1ODArRGEpLEcoSCxyZSxycix0aSxsciksRyhpdCxyZSxSZSx0aSxsciksbHI9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTM0OSw1NjY4NCtEYSksRyhILHJlLHJyLHRpLGxyKSxHKGl0LHJlLFJlLHRpLGxyKSxscj1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1MzQ5LDU2NzM2K0RhKSxHKEgscmUscnIsdGksbHIpLEcoaXQscmUsUmUsdGksbHIpLGxyPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUzNDksNTY3ODgrRGEpLEcoSCxyZSxycix0aSxsciksRyhpdCxyZSxSZSx0aSxsciksbHI9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTM0OSw1Njg0MCtEYSksRyhILHJlLHJyLHRpLGxyKSxHKGl0LHJlLFJlLHRpLGxyKSxscj1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1MzQ5LDU2OTQ0K0RhKSxHKEgscmUscnIsdGksbHIpLEcoaXQscmUsUmUsdGksbHIpLERhPDI2JiYobHI9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTM0OSw1NjYzMitEYSksRyhILHJlLHJyLHRpLGxyKSxHKGl0LHJlLFJlLHRpLGxyKSxscj1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1MzQ5LDU2NDc2K0RhKSxHKEgscmUscnIsdGksbHIpLEcoaXQscmUsUmUsdGksbHIpKTtscj0iXHV7MUQ1NUN9IjtHKEgscmUscnIsImsiLGxyKTtHKGl0LHJlLFJlLCJrIixscik7Zm9yKGdoPTA7Z2g8MTA7Z2grKylsdT1naC50b1N0cmluZygpLGxyPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUzNDksNTcyOTQrZ2gpLEcoSCxyZSxycixsdSxsciksRyhpdCxyZSxSZSxsdSxsciksbHI9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTM0OSw1NzMxNCtnaCksRyhILHJlLHJyLGx1LGxyKSxHKGl0LHJlLFJlLGx1LGxyKSxscj1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1MzQ5LDU3MzI0K2doKSxHKEgscmUscnIsbHUsbHIpLEcoaXQscmUsUmUsbHUsbHIpLGxyPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUzNDksNTczMzQrZ2gpLEcoSCxyZSxycixsdSxsciksRyhpdCxyZSxSZSxsdSxscik7WTc9Ilx4RDBceERFXHhGRSI7Zm9yKGQzPTA7ZDM8WTcubGVuZ3RoO2QzKyspcXk9WTcuY2hhckF0KGQzKSxHKEgscmUscnIscXkscXkpLEcoaXQscmUsUmUscXkscXkpO3AzPVtbIm1hdGhiZiIsInRleHRiZiIsIk1haW4tQm9sZCJdLFsibWF0aGJmIiwidGV4dGJmIiwiTWFpbi1Cb2xkIl0sWyJtYXRobm9ybWFsIiwidGV4dGl0IiwiTWF0aC1JdGFsaWMiXSxbIm1hdGhub3JtYWwiLCJ0ZXh0aXQiLCJNYXRoLUl0YWxpYyJdLFsiYm9sZHN5bWJvbCIsImJvbGRzeW1ib2wiLCJNYWluLUJvbGRJdGFsaWMiXSxbImJvbGRzeW1ib2wiLCJib2xkc3ltYm9sIiwiTWFpbi1Cb2xkSXRhbGljIl0sWyJtYXRoc2NyIiwidGV4dHNjciIsIlNjcmlwdC1SZWd1bGFyIl0sWyIiLCIiLCIiXSxbIiIsIiIsIiJdLFsiIiwiIiwiIl0sWyJtYXRoZnJhayIsInRleHRmcmFrIiwiRnJha3R1ci1SZWd1bGFyIl0sWyJtYXRoZnJhayIsInRleHRmcmFrIiwiRnJha3R1ci1SZWd1bGFyIl0sWyJtYXRoYmIiLCJ0ZXh0YmIiLCJBTVMtUmVndWxhciJdLFsibWF0aGJiIiwidGV4dGJiIiwiQU1TLVJlZ3VsYXIiXSxbIm1hdGhib2xkZnJhayIsInRleHRib2xkZnJhayIsIkZyYWt0dXItUmVndWxhciJdLFsibWF0aGJvbGRmcmFrIiwidGV4dGJvbGRmcmFrIiwiRnJha3R1ci1SZWd1bGFyIl0sWyJtYXRoc2YiLCJ0ZXh0c2YiLCJTYW5zU2VyaWYtUmVndWxhciJdLFsibWF0aHNmIiwidGV4dHNmIiwiU2Fuc1NlcmlmLVJlZ3VsYXIiXSxbIm1hdGhib2xkc2YiLCJ0ZXh0Ym9sZHNmIiwiU2Fuc1NlcmlmLUJvbGQiXSxbIm1hdGhib2xkc2YiLCJ0ZXh0Ym9sZHNmIiwiU2Fuc1NlcmlmLUJvbGQiXSxbIm1hdGhpdHNmIiwidGV4dGl0c2YiLCJTYW5zU2VyaWYtSXRhbGljIl0sWyJtYXRoaXRzZiIsInRleHRpdHNmIiwiU2Fuc1NlcmlmLUl0YWxpYyJdLFsiIiwiIiwiIl0sWyIiLCIiLCIiXSxbIm1hdGh0dCIsInRleHR0dCIsIlR5cGV3cml0ZXItUmVndWxhciJdLFsibWF0aHR0IiwidGV4dHR0IiwiVHlwZXdyaXRlci1SZWd1bGFyIl1dLHJHPVtbIm1hdGhiZiIsInRleHRiZiIsIk1haW4tQm9sZCJdLFsiIiwiIiwiIl0sWyJtYXRoc2YiLCJ0ZXh0c2YiLCJTYW5zU2VyaWYtUmVndWxhciJdLFsibWF0aGJvbGRzZiIsInRleHRib2xkc2YiLCJTYW5zU2VyaWYtQm9sZCJdLFsibWF0aHR0IiwidGV4dHR0IiwiVHlwZXdyaXRlci1SZWd1bGFyIl1dLHIzZT1vKGZ1bmN0aW9uKGUscil7dmFyIG49ZS5jaGFyQ29kZUF0KDApLGk9ZS5jaGFyQ29kZUF0KDEpLGE9KG4tNTUyOTYpKjEwMjQrKGktNTYzMjApKzY1NTM2LHM9cj09PSJtYXRoIj8wOjE7aWYoMTE5ODA4PD1hJiZhPDEyMDQ4NCl7dmFyIGw9TWF0aC5mbG9vcigoYS0xMTk4MDgpLzI2KTtyZXR1cm5bcDNbbF1bMl0scDNbbF1bc11dfWVsc2UgaWYoMTIwNzgyPD1hJiZhPD0xMjA4MzEpe3ZhciB1PU1hdGguZmxvb3IoKGEtMTIwNzgyKS8xMCk7cmV0dXJuW3JHW3VdWzJdLHJHW3VdW3NdXX1lbHNle2lmKGE9PT0xMjA0ODV8fGE9PT0xMjA0ODYpcmV0dXJuW3AzWzBdWzJdLHAzWzBdW3NdXTtpZigxMjA0ODY8YSYmYTwxMjA3ODIpcmV0dXJuWyIiLCIiXTt0aHJvdyBuZXcgcHQoIlVuc3VwcG9ydGVkIGNoYXJhY3RlcjogIitlKX19LCJ3aWRlQ2hhcmFjdGVyRm9udCIpLEwzPW8oZnVuY3Rpb24oZSxyLG4pe3JldHVybiBBbltuXVtlXSYmQW5bbl1bZV0ucmVwbGFjZSYmKGU9QW5bbl1bZV0ucmVwbGFjZSkse3ZhbHVlOmUsbWV0cmljczpuQShlLHIsbil9fSwibG9va3VwU3ltYm9sIiksZmw9byhmdW5jdGlvbihlLHIsbixpLGEpe3ZhciBzPUwzKGUscixuKSxsPXMubWV0cmljcztlPXMudmFsdWU7dmFyIHU7aWYobCl7dmFyIGg9bC5pdGFsaWM7KG49PT0idGV4dCJ8fGkmJmkuZm9udD09PSJtYXRoaXQiKSYmKGg9MCksdT1uZXcgQXMoZSxsLmhlaWdodCxsLmRlcHRoLGgsbC5za2V3LGwud2lkdGgsYSl9ZWxzZSB0eXBlb2YgY29uc29sZTwidSImJmNvbnNvbGUud2FybigiTm8gY2hhcmFjdGVyIG1ldHJpY3MgIisoImZvciAnIitlKyInIGluIHN0eWxlICciK3IrIicgYW5kIG1vZGUgJyIrbisiJyIpKSx1PW5ldyBBcyhlLDAsMCwwLDAsMCxhKTtpZihpKXt1Lm1heEZvbnRTaXplPWkuc2l6ZU11bHRpcGxpZXIsaS5zdHlsZS5pc1RpZ2h0KCkmJnUuY2xhc3Nlcy5wdXNoKCJtdGlnaHQiKTt2YXIgZj1pLmdldENvbG9yKCk7ZiYmKHUuc3R5bGUuY29sb3I9Zil9cmV0dXJuIHV9LCJtYWtlU3ltYm9sIiksbjNlPW8oZnVuY3Rpb24oZSxyLG4saSl7cmV0dXJuIGk9PT12b2lkIDAmJihpPVtdKSxuLmZvbnQ9PT0iYm9sZHN5bWJvbCImJkwzKGUsIk1haW4tQm9sZCIscikubWV0cmljcz9mbChlLCJNYWluLUJvbGQiLHIsbixpLmNvbmNhdChbIm1hdGhiZiJdKSk6ZT09PSJcXCJ8fEFuW3JdW2VdLmZvbnQ9PT0ibWFpbiI/ZmwoZSwiTWFpbi1SZWd1bGFyIixyLG4saSk6ZmwoZSwiQU1TLVJlZ3VsYXIiLHIsbixpLmNvbmNhdChbImFtc3JtIl0pKX0sIm1hdGhzeW0iKSxpM2U9byhmdW5jdGlvbihlLHIsbixpLGEpe3JldHVybiBhIT09InRleHRvcmQiJiZMMyhlLCJNYXRoLUJvbGRJdGFsaWMiLHIpLm1ldHJpY3M/e2ZvbnROYW1lOiJNYXRoLUJvbGRJdGFsaWMiLGZvbnRDbGFzczoiYm9sZHN5bWJvbCJ9Ontmb250TmFtZToiTWFpbi1Cb2xkIixmb250Q2xhc3M6Im1hdGhiZiJ9fSwiYm9sZHN5bWJvbCIpLGEzZT1vKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1lLm1vZGUsYT1lLnRleHQscz1bIm1vcmQiXSxsPWk9PT0ibWF0aCJ8fGk9PT0idGV4dCImJnIuZm9udCx1PWw/ci5mb250OnIuZm9udEZhbWlseSxoPSIiLGY9IiI7aWYoYS5jaGFyQ29kZUF0KDApPT09NTUzNDkmJihbaCxmXT1yM2UoYSxpKSksaC5sZW5ndGg+MClyZXR1cm4gZmwoYSxoLGkscixzLmNvbmNhdChmKSk7aWYodSl7dmFyIGQscDtpZih1PT09ImJvbGRzeW1ib2wiKXt2YXIgbT1pM2UoYSxpLHIscyxuKTtkPW0uZm9udE5hbWUscD1bbS5mb250Q2xhc3NdfWVsc2UgbD8oZD1QR1t1XS5mb250TmFtZSxwPVt1XSk6KGQ9bTModSxyLmZvbnRXZWlnaHQsci5mb250U2hhcGUpLHA9W3Usci5mb250V2VpZ2h0LHIuZm9udFNoYXBlXSk7aWYoTDMoYSxkLGkpLm1ldHJpY3MpcmV0dXJuIGZsKGEsZCxpLHIscy5jb25jYXQocCkpO2lmKE1HLmhhc093blByb3BlcnR5KGEpJiZkLnNsaWNlKDAsMTApPT09IlR5cGV3cml0ZXIiKXtmb3IodmFyIGc9W10seT0wO3k8YS5sZW5ndGg7eSsrKWcucHVzaChmbChhW3ldLGQsaSxyLHMuY29uY2F0KHApKSk7cmV0dXJuIE9HKGcpfX1pZihuPT09Im1hdGhvcmQiKXJldHVybiBmbChhLCJNYXRoLUl0YWxpYyIsaSxyLHMuY29uY2F0KFsibWF0aG5vcm1hbCJdKSk7aWYobj09PSJ0ZXh0b3JkIil7dmFyIHY9QW5baV1bYV0mJkFuW2ldW2FdLmZvbnQ7aWYodj09PSJhbXMiKXt2YXIgeD1tMygiYW1zcm0iLHIuZm9udFdlaWdodCxyLmZvbnRTaGFwZSk7cmV0dXJuIGZsKGEseCxpLHIscy5jb25jYXQoImFtc3JtIixyLmZvbnRXZWlnaHQsci5mb250U2hhcGUpKX1lbHNlIGlmKHY9PT0ibWFpbiJ8fCF2KXt2YXIgYj1tMygidGV4dHJtIixyLmZvbnRXZWlnaHQsci5mb250U2hhcGUpO3JldHVybiBmbChhLGIsaSxyLHMuY29uY2F0KHIuZm9udFdlaWdodCxyLmZvbnRTaGFwZSkpfWVsc2V7dmFyIFQ9bTModixyLmZvbnRXZWlnaHQsci5mb250U2hhcGUpO3JldHVybiBmbChhLFQsaSxyLHMuY29uY2F0KFQsci5mb250V2VpZ2h0LHIuZm9udFNoYXBlKSl9fWVsc2UgdGhyb3cgbmV3IEVycm9yKCJ1bmV4cGVjdGVkIHR5cGU6ICIrbisiIGluIG1ha2VPcmQiKX0sIm1ha2VPcmQiKSxzM2U9bygodCxlKT0+e2lmKHZoKHQuY2xhc3NlcykhPT12aChlLmNsYXNzZXMpfHx0LnNrZXchPT1lLnNrZXd8fHQubWF4Rm9udFNpemUhPT1lLm1heEZvbnRTaXplKXJldHVybiExO2lmKHQuY2xhc3Nlcy5sZW5ndGg9PT0xKXt2YXIgcj10LmNsYXNzZXNbMF07aWYocj09PSJtYmluInx8cj09PSJtb3JkIilyZXR1cm4hMX1mb3IodmFyIG4gaW4gdC5zdHlsZSlpZih0LnN0eWxlLmhhc093blByb3BlcnR5KG4pJiZ0LnN0eWxlW25dIT09ZS5zdHlsZVtuXSlyZXR1cm4hMTtmb3IodmFyIGkgaW4gZS5zdHlsZSlpZihlLnN0eWxlLmhhc093blByb3BlcnR5KGkpJiZ0LnN0eWxlW2ldIT09ZS5zdHlsZVtpXSlyZXR1cm4hMTtyZXR1cm4hMH0sImNhbkNvbWJpbmUiKSxvM2U9byh0PT57Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aC0xO2UrKyl7dmFyIHI9dFtlXSxuPXRbZSsxXTtyIGluc3RhbmNlb2YgQXMmJm4gaW5zdGFuY2VvZiBBcyYmczNlKHIsbikmJihyLnRleHQrPW4udGV4dCxyLmhlaWdodD1NYXRoLm1heChyLmhlaWdodCxuLmhlaWdodCksci5kZXB0aD1NYXRoLm1heChyLmRlcHRoLG4uZGVwdGgpLHIuaXRhbGljPW4uaXRhbGljLHQuc3BsaWNlKGUrMSwxKSxlLS0pfXJldHVybiB0fSwidHJ5Q29tYmluZUNoYXJzIiksaUE9byhmdW5jdGlvbihlKXtmb3IodmFyIHI9MCxuPTAsaT0wLGE9MDthPGUuY2hpbGRyZW4ubGVuZ3RoO2ErKyl7dmFyIHM9ZS5jaGlsZHJlblthXTtzLmhlaWdodD5yJiYocj1zLmhlaWdodCkscy5kZXB0aD5uJiYobj1zLmRlcHRoKSxzLm1heEZvbnRTaXplPmkmJihpPXMubWF4Rm9udFNpemUpfWUuaGVpZ2h0PXIsZS5kZXB0aD1uLGUubWF4Rm9udFNpemU9aX0sInNpemVFbGVtZW50RnJvbUNoaWxkcmVuIiksQ3M9byhmdW5jdGlvbihlLHIsbixpKXt2YXIgYT1uZXcgbGQoZSxyLG4saSk7cmV0dXJuIGlBKGEpLGF9LCJtYWtlU3BhbiIpLElHPW8oKHQsZSxyLG4pPT5uZXcgbGQodCxlLHIsbiksIm1ha2VTdmdTcGFuIiksbDNlPW8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPUNzKFtlXSxbXSxyKTtyZXR1cm4gaS5oZWlnaHQ9TWF0aC5tYXgobnx8ci5mb250TWV0cmljcygpLmRlZmF1bHRSdWxlVGhpY2tuZXNzLHIubWluUnVsZVRoaWNrbmVzcyksaS5zdHlsZS5ib3JkZXJCb3R0b21XaWR0aD1FdChpLmhlaWdodCksaS5tYXhGb250U2l6ZT0xLGl9LCJtYWtlTGluZVNwYW4iKSxjM2U9byhmdW5jdGlvbihlLHIsbixpKXt2YXIgYT1uZXcgWnkoZSxyLG4saSk7cmV0dXJuIGlBKGEpLGF9LCJtYWtlQW5jaG9yIiksT0c9byhmdW5jdGlvbihlKXt2YXIgcj1uZXcgb2QoZSk7cmV0dXJuIGlBKHIpLHJ9LCJtYWtlRnJhZ21lbnQiKSx1M2U9byhmdW5jdGlvbihlLHIpe3JldHVybiBlIGluc3RhbmNlb2Ygb2Q/Q3MoW10sW2VdLHIpOmV9LCJ3cmFwRnJhZ21lbnQiKSxoM2U9byhmdW5jdGlvbihlKXtpZihlLnBvc2l0aW9uVHlwZT09PSJpbmRpdmlkdWFsU2hpZnQiKXtmb3IodmFyIHI9ZS5jaGlsZHJlbixuPVtyWzBdXSxpPS1yWzBdLnNoaWZ0LXJbMF0uZWxlbS5kZXB0aCxhPWkscz0xO3M8ci5sZW5ndGg7cysrKXt2YXIgbD0tcltzXS5zaGlmdC1hLXJbc10uZWxlbS5kZXB0aCx1PWwtKHJbcy0xXS5lbGVtLmhlaWdodCtyW3MtMV0uZWxlbS5kZXB0aCk7YT1hK2wsbi5wdXNoKHt0eXBlOiJrZXJuIixzaXplOnV9KSxuLnB1c2gocltzXSl9cmV0dXJue2NoaWxkcmVuOm4sZGVwdGg6aX19dmFyIGg7aWYoZS5wb3NpdGlvblR5cGU9PT0idG9wIil7Zm9yKHZhciBmPWUucG9zaXRpb25EYXRhLGQ9MDtkPGUuY2hpbGRyZW4ubGVuZ3RoO2QrKyl7dmFyIHA9ZS5jaGlsZHJlbltkXTtmLT1wLnR5cGU9PT0ia2VybiI/cC5zaXplOnAuZWxlbS5oZWlnaHQrcC5lbGVtLmRlcHRofWg9Zn1lbHNlIGlmKGUucG9zaXRpb25UeXBlPT09ImJvdHRvbSIpaD0tZS5wb3NpdGlvbkRhdGE7ZWxzZXt2YXIgbT1lLmNoaWxkcmVuWzBdO2lmKG0udHlwZSE9PSJlbGVtIil0aHJvdyBuZXcgRXJyb3IoJ0ZpcnN0IGNoaWxkIG11c3QgaGF2ZSB0eXBlICJlbGVtIi4nKTtpZihlLnBvc2l0aW9uVHlwZT09PSJzaGlmdCIpaD0tbS5lbGVtLmRlcHRoLWUucG9zaXRpb25EYXRhO2Vsc2UgaWYoZS5wb3NpdGlvblR5cGU9PT0iZmlyc3RCYXNlbGluZSIpaD0tbS5lbGVtLmRlcHRoO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHBvc2l0aW9uVHlwZSAiK2UucG9zaXRpb25UeXBlKyIuIil9cmV0dXJue2NoaWxkcmVuOmUuY2hpbGRyZW4sZGVwdGg6aH19LCJnZXRWTGlzdENoaWxkcmVuQW5kRGVwdGgiKSxmM2U9byhmdW5jdGlvbihlLHIpe2Zvcih2YXJ7Y2hpbGRyZW46bixkZXB0aDppfT1oM2UoZSksYT0wLHM9MDtzPG4ubGVuZ3RoO3MrKyl7dmFyIGw9bltzXTtpZihsLnR5cGU9PT0iZWxlbSIpe3ZhciB1PWwuZWxlbTthPU1hdGgubWF4KGEsdS5tYXhGb250U2l6ZSx1LmhlaWdodCl9fWErPTI7dmFyIGg9Q3MoWyJwc3RydXQiXSxbXSk7aC5zdHlsZS5oZWlnaHQ9RXQoYSk7Zm9yKHZhciBmPVtdLGQ9aSxwPWksbT1pLGc9MDtnPG4ubGVuZ3RoO2crKyl7dmFyIHk9bltnXTtpZih5LnR5cGU9PT0ia2VybiIpbSs9eS5zaXplO2Vsc2V7dmFyIHY9eS5lbGVtLHg9eS53cmFwcGVyQ2xhc3Nlc3x8W10sYj15LndyYXBwZXJTdHlsZXx8e30sVD1Dcyh4LFtoLHZdLHZvaWQgMCxiKTtULnN0eWxlLnRvcD1FdCgtYS1tLXYuZGVwdGgpLHkubWFyZ2luTGVmdCYmKFQuc3R5bGUubWFyZ2luTGVmdD15Lm1hcmdpbkxlZnQpLHkubWFyZ2luUmlnaHQmJihULnN0eWxlLm1hcmdpblJpZ2h0PXkubWFyZ2luUmlnaHQpLGYucHVzaChUKSxtKz12LmhlaWdodCt2LmRlcHRofWQ9TWF0aC5taW4oZCxtKSxwPU1hdGgubWF4KHAsbSl9dmFyIFM9Q3MoWyJ2bGlzdCJdLGYpO1Muc3R5bGUuaGVpZ2h0PUV0KHApO3ZhciB3O2lmKGQ8MCl7dmFyIEU9Q3MoW10sW10pLF89Q3MoWyJ2bGlzdCJdLFtFXSk7Xy5zdHlsZS5oZWlnaHQ9RXQoLWQpO3ZhciBDPUNzKFsidmxpc3QtcyJdLFtuZXcgQXMoIlx1MjAwQiIpXSk7dz1bQ3MoWyJ2bGlzdC1yIl0sW1MsQ10pLENzKFsidmxpc3QtciJdLFtfXSldfWVsc2Ugdz1bQ3MoWyJ2bGlzdC1yIl0sW1NdKV07dmFyIEQ9Q3MoWyJ2bGlzdC10Il0sdyk7cmV0dXJuIHcubGVuZ3RoPT09MiYmRC5jbGFzc2VzLnB1c2goInZsaXN0LXQyIiksRC5oZWlnaHQ9cCxELmRlcHRoPS1kLER9LCJtYWtlVkxpc3QiKSxkM2U9bygodCxlKT0+e3ZhciByPUNzKFsibXNwYWNlIl0sW10sZSksbj1uaSh0LGUpO3JldHVybiByLnN0eWxlLm1hcmdpblJpZ2h0PUV0KG4pLHJ9LCJtYWtlR2x1ZSIpLG0zPW8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPSIiO3N3aXRjaChlKXtjYXNlImFtc3JtIjppPSJBTVMiO2JyZWFrO2Nhc2UidGV4dHJtIjppPSJNYWluIjticmVhaztjYXNlInRleHRzZiI6aT0iU2Fuc1NlcmlmIjticmVhaztjYXNlInRleHR0dCI6aT0iVHlwZXdyaXRlciI7YnJlYWs7ZGVmYXVsdDppPWV9dmFyIGE7cmV0dXJuIHI9PT0idGV4dGJmIiYmbj09PSJ0ZXh0aXQiP2E9IkJvbGRJdGFsaWMiOnI9PT0idGV4dGJmIj9hPSJCb2xkIjpyPT09InRleHRpdCI/YT0iSXRhbGljIjphPSJSZWd1bGFyIixpKyItIithfSwicmV0cmlldmVUZXh0Rm9udE5hbWUiKSxQRz17bWF0aGJmOnt2YXJpYW50OiJib2xkIixmb250TmFtZToiTWFpbi1Cb2xkIn0sbWF0aHJtOnt2YXJpYW50OiJub3JtYWwiLGZvbnROYW1lOiJNYWluLVJlZ3VsYXIifSx0ZXh0aXQ6e3ZhcmlhbnQ6Iml0YWxpYyIsZm9udE5hbWU6Ik1haW4tSXRhbGljIn0sbWF0aGl0Ont2YXJpYW50OiJpdGFsaWMiLGZvbnROYW1lOiJNYWluLUl0YWxpYyJ9LG1hdGhub3JtYWw6e3ZhcmlhbnQ6Iml0YWxpYyIsZm9udE5hbWU6Ik1hdGgtSXRhbGljIn0sbWF0aHNmaXQ6e3ZhcmlhbnQ6InNhbnMtc2VyaWYtaXRhbGljIixmb250TmFtZToiU2Fuc1NlcmlmLUl0YWxpYyJ9LG1hdGhiYjp7dmFyaWFudDoiZG91YmxlLXN0cnVjayIsZm9udE5hbWU6IkFNUy1SZWd1bGFyIn0sbWF0aGNhbDp7dmFyaWFudDoic2NyaXB0Iixmb250TmFtZToiQ2FsaWdyYXBoaWMtUmVndWxhciJ9LG1hdGhmcmFrOnt2YXJpYW50OiJmcmFrdHVyIixmb250TmFtZToiRnJha3R1ci1SZWd1bGFyIn0sbWF0aHNjcjp7dmFyaWFudDoic2NyaXB0Iixmb250TmFtZToiU2NyaXB0LVJlZ3VsYXIifSxtYXRoc2Y6e3ZhcmlhbnQ6InNhbnMtc2VyaWYiLGZvbnROYW1lOiJTYW5zU2VyaWYtUmVndWxhciJ9LG1hdGh0dDp7dmFyaWFudDoibW9ub3NwYWNlIixmb250TmFtZToiVHlwZXdyaXRlci1SZWd1bGFyIn19LEJHPXt2ZWM6WyJ2ZWMiLC40NzEsLjcxNF0sb2lpbnRTaXplMTpbIm9paW50U2l6ZTEiLC45NTcsLjQ5OV0sb2lpbnRTaXplMjpbIm9paW50U2l6ZTIiLDEuNDcyLC42NTldLG9paWludFNpemUxOlsib2lpaW50U2l6ZTEiLDEuMzA0LC40OTldLG9paWludFNpemUyOlsib2lpaW50U2l6ZTIiLDEuOTgsLjY1OV19LHAzZT1vKGZ1bmN0aW9uKGUscil7dmFyW24saSxhXT1CR1tlXSxzPW5ldyBlYyhuKSxsPW5ldyBkbChbc10se3dpZHRoOkV0KGkpLGhlaWdodDpFdChhKSxzdHlsZToid2lkdGg6IitFdChpKSx2aWV3Qm94OiIwIDAgIisxZTMqaSsiICIrMWUzKmEscHJlc2VydmVBc3BlY3RSYXRpbzoieE1pbllNaW4ifSksdT1JRyhbIm92ZXJsYXkiXSxbbF0scik7cmV0dXJuIHUuaGVpZ2h0PWEsdS5zdHlsZS5oZWlnaHQ9RXQoYSksdS5zdHlsZS53aWR0aD1FdChpKSx1fSwic3RhdGljU3ZnIiksRmU9e2ZvbnRNYXA6UEcsbWFrZVN5bWJvbDpmbCxtYXRoc3ltOm4zZSxtYWtlU3BhbjpDcyxtYWtlU3ZnU3BhbjpJRyxtYWtlTGluZVNwYW46bDNlLG1ha2VBbmNob3I6YzNlLG1ha2VGcmFnbWVudDpPRyx3cmFwRnJhZ21lbnQ6dTNlLG1ha2VWTGlzdDpmM2UsbWFrZU9yZDphM2UsbWFrZUdsdWU6ZDNlLHN0YXRpY1N2ZzpwM2Usc3ZnRGF0YTpCRyx0cnlDb21iaW5lQ2hhcnM6bzNlfSxyaT17bnVtYmVyOjMsdW5pdDoibXUifSxzZD17bnVtYmVyOjQsdW5pdDoibXUifSxjdT17bnVtYmVyOjUsdW5pdDoibXUifSxtM2U9e21vcmQ6e21vcDpyaSxtYmluOnNkLG1yZWw6Y3UsbWlubmVyOnJpfSxtb3A6e21vcmQ6cmksbW9wOnJpLG1yZWw6Y3UsbWlubmVyOnJpfSxtYmluOnttb3JkOnNkLG1vcDpzZCxtb3BlbjpzZCxtaW5uZXI6c2R9LG1yZWw6e21vcmQ6Y3UsbW9wOmN1LG1vcGVuOmN1LG1pbm5lcjpjdX0sbW9wZW46e30sbWNsb3NlOnttb3A6cmksbWJpbjpzZCxtcmVsOmN1LG1pbm5lcjpyaX0sbXB1bmN0Onttb3JkOnJpLG1vcDpyaSxtcmVsOmN1LG1vcGVuOnJpLG1jbG9zZTpyaSxtcHVuY3Q6cmksbWlubmVyOnJpfSxtaW5uZXI6e21vcmQ6cmksbW9wOnJpLG1iaW46c2QsbXJlbDpjdSxtb3BlbjpyaSxtcHVuY3Q6cmksbWlubmVyOnJpfX0sZzNlPXttb3JkOnttb3A6cml9LG1vcDp7bW9yZDpyaSxtb3A6cml9LG1iaW46e30sbXJlbDp7fSxtb3Blbjp7fSxtY2xvc2U6e21vcDpyaX0sbXB1bmN0Ont9LG1pbm5lcjp7bW9wOnJpfX0sRkc9e30sRTM9e30sUzM9e307byhOdCwiZGVmaW5lRnVuY3Rpb24iKTtvKGNkLCJkZWZpbmVGdW5jdGlvbkJ1aWxkZXJzIik7QzM9byhmdW5jdGlvbihlKXtyZXR1cm4gZS50eXBlPT09Im9yZGdyb3VwIiYmZS5ib2R5Lmxlbmd0aD09PTE/ZS5ib2R5WzBdOmV9LCJub3JtYWxpemVBcmd1bWVudCIpLGdpPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGUudHlwZT09PSJvcmRncm91cCI/ZS5ib2R5OltlXX0sIm9yZGFyZ3VtZW50IiksZnU9RmUubWFrZVNwYW4seTNlPVsibGVmdG1vc3QiLCJtYmluIiwibW9wZW4iLCJtcmVsIiwibW9wIiwibXB1bmN0Il0sdjNlPVsicmlnaHRtb3N0IiwibXJlbCIsIm1jbG9zZSIsIm1wdW5jdCJdLHgzZT17ZGlzcGxheTpuci5ESVNQTEFZLHRleHQ6bnIuVEVYVCxzY3JpcHQ6bnIuU0NSSVBULHNjcmlwdHNjcmlwdDpuci5TQ1JJUFRTQ1JJUFR9LGIzZT17bW9yZDoibW9yZCIsbW9wOiJtb3AiLG1iaW46Im1iaW4iLG1yZWw6Im1yZWwiLG1vcGVuOiJtb3BlbiIsbWNsb3NlOiJtY2xvc2UiLG1wdW5jdDoibXB1bmN0IixtaW5uZXI6Im1pbm5lciJ9LCRpPW8oZnVuY3Rpb24oZSxyLG4saSl7aT09PXZvaWQgMCYmKGk9W251bGwsbnVsbF0pO2Zvcih2YXIgYT1bXSxzPTA7czxlLmxlbmd0aDtzKyspe3ZhciBsPSRyKGVbc10scik7aWYobCBpbnN0YW5jZW9mIG9kKXt2YXIgdT1sLmNoaWxkcmVuO2EucHVzaCguLi51KX1lbHNlIGEucHVzaChsKX1pZihGZS50cnlDb21iaW5lQ2hhcnMoYSksIW4pcmV0dXJuIGE7dmFyIGg9cjtpZihlLmxlbmd0aD09PTEpe3ZhciBmPWVbMF07Zi50eXBlPT09InNpemluZyI/aD1yLmhhdmluZ1NpemUoZi5zaXplKTpmLnR5cGU9PT0ic3R5bGluZyImJihoPXIuaGF2aW5nU3R5bGUoeDNlW2Yuc3R5bGVdKSl9dmFyIGQ9ZnUoW2lbMF18fCJsZWZ0bW9zdCJdLFtdLHIpLHA9ZnUoW2lbMV18fCJyaWdodG1vc3QiXSxbXSxyKSxtPW49PT0icm9vdCI7cmV0dXJuIG5HKGEsKGcseSk9Pnt2YXIgdj15LmNsYXNzZXNbMF0seD1nLmNsYXNzZXNbMF07dj09PSJtYmluIiYmSnQuY29udGFpbnModjNlLHgpP3kuY2xhc3Nlc1swXT0ibW9yZCI6eD09PSJtYmluIiYmSnQuY29udGFpbnMoeTNlLHYpJiYoZy5jbGFzc2VzWzBdPSJtb3JkIil9LHtub2RlOmR9LHAsbSksbkcoYSwoZyx5KT0+e3ZhciB2PVg3KHkpLHg9WDcoZyksYj12JiZ4P2cuaGFzQ2xhc3MoIm10aWdodCIpP2czZVt2XVt4XTptM2Vbdl1beF06bnVsbDtpZihiKXJldHVybiBGZS5tYWtlR2x1ZShiLGgpfSx7bm9kZTpkfSxwLG0pLGF9LCJidWlsZEV4cHJlc3Npb24iKSxuRz1vKGZ1bmN0aW9uIHQoZSxyLG4saSxhKXtpJiZlLnB1c2goaSk7Zm9yKHZhciBzPTA7czxlLmxlbmd0aDtzKyspe3ZhciBsPWVbc10sdT0kRyhsKTtpZih1KXt0KHUuY2hpbGRyZW4scixuLG51bGwsYSk7Y29udGludWV9dmFyIGg9IWwuaGFzQ2xhc3MoIm1zcGFjZSIpO2lmKGgpe3ZhciBmPXIobCxuLm5vZGUpO2YmJihuLmluc2VydEFmdGVyP24uaW5zZXJ0QWZ0ZXIoZik6KGUudW5zaGlmdChmKSxzKyspKX1oP24ubm9kZT1sOmEmJmwuaGFzQ2xhc3MoIm5ld2xpbmUiKSYmKG4ubm9kZT1mdShbImxlZnRtb3N0Il0pKSxuLmluc2VydEFmdGVyPShkPT5wPT57ZS5zcGxpY2UoZCsxLDAscCkscysrfSkocyl9aSYmZS5wb3AoKX0sInRyYXZlcnNlTm9uU3BhY2VOb2RlcyIpLCRHPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBvZHx8ZSBpbnN0YW5jZW9mIFp5fHxlIGluc3RhbmNlb2YgbGQmJmUuaGFzQ2xhc3MoImVuY2xvc2luZyIpP2U6bnVsbH0sImNoZWNrUGFydGlhbEdyb3VwIiksVDNlPW8oZnVuY3Rpb24gdChlLHIpe3ZhciBuPSRHKGUpO2lmKG4pe3ZhciBpPW4uY2hpbGRyZW47aWYoaS5sZW5ndGgpe2lmKHI9PT0icmlnaHQiKXJldHVybiB0KGlbaS5sZW5ndGgtMV0sInJpZ2h0Iik7aWYocj09PSJsZWZ0IilyZXR1cm4gdChpWzBdLCJsZWZ0Iil9fXJldHVybiBlfSwiZ2V0T3V0ZXJtb3N0Tm9kZSIpLFg3PW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gZT8ociYmKGU9VDNlKGUscikpLGIzZVtlLmNsYXNzZXNbMF1dfHxudWxsKTpudWxsfSwiZ2V0VHlwZU9mRG9tVHJlZSIpLGV2PW8oZnVuY3Rpb24oZSxyKXt2YXIgbj1bIm51bGxkZWxpbWl0ZXIiXS5jb25jYXQoZS5iYXNlU2l6aW5nQ2xhc3NlcygpKTtyZXR1cm4gZnUoci5jb25jYXQobikpfSwibWFrZU51bGxEZWxpbWl0ZXIiKSwkcj1vKGZ1bmN0aW9uKGUscixuKXtpZighZSlyZXR1cm4gZnUoKTtpZihFM1tlLnR5cGVdKXt2YXIgaT1FM1tlLnR5cGVdKGUscik7aWYobiYmci5zaXplIT09bi5zaXplKXtpPWZ1KHIuc2l6aW5nQ2xhc3NlcyhuKSxbaV0scik7dmFyIGE9ci5zaXplTXVsdGlwbGllci9uLnNpemVNdWx0aXBsaWVyO2kuaGVpZ2h0Kj1hLGkuZGVwdGgqPWF9cmV0dXJuIGl9ZWxzZSB0aHJvdyBuZXcgcHQoIkdvdCBncm91cCBvZiB1bmtub3duIHR5cGU6ICciK2UudHlwZSsiJyIpfSwiYnVpbGRHcm91cCIpO28oZzMsImJ1aWxkSFRNTFVuYnJlYWthYmxlIik7byhqNywiYnVpbGRIVE1MIik7byh6RywibmV3RG9jdW1lbnRGcmFnbWVudCIpO3RzPWNsYXNze3N0YXRpY3tvKHRoaXMsIk1hdGhOb2RlIil9Y29uc3RydWN0b3IoZSxyLG4pe3RoaXMudHlwZT12b2lkIDAsdGhpcy5hdHRyaWJ1dGVzPXZvaWQgMCx0aGlzLmNoaWxkcmVuPXZvaWQgMCx0aGlzLmNsYXNzZXM9dm9pZCAwLHRoaXMudHlwZT1lLHRoaXMuYXR0cmlidXRlcz17fSx0aGlzLmNoaWxkcmVuPXJ8fFtdLHRoaXMuY2xhc3Nlcz1ufHxbXX1zZXRBdHRyaWJ1dGUoZSxyKXt0aGlzLmF0dHJpYnV0ZXNbZV09cn1nZXRBdHRyaWJ1dGUoZSl7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1tlXX10b05vZGUoKXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiLHRoaXMudHlwZSk7Zm9yKHZhciByIGluIHRoaXMuYXR0cmlidXRlcylPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJ1dGVzLHIpJiZlLnNldEF0dHJpYnV0ZShyLHRoaXMuYXR0cmlidXRlc1tyXSk7dGhpcy5jbGFzc2VzLmxlbmd0aD4wJiYoZS5jbGFzc05hbWU9dmgodGhpcy5jbGFzc2VzKSk7Zm9yKHZhciBuPTA7bjx0aGlzLmNoaWxkcmVuLmxlbmd0aDtuKyspaWYodGhpcy5jaGlsZHJlbltuXWluc3RhbmNlb2YgQW8mJnRoaXMuY2hpbGRyZW5bbisxXWluc3RhbmNlb2YgQW8pe2Zvcih2YXIgaT10aGlzLmNoaWxkcmVuW25dLnRvVGV4dCgpK3RoaXMuY2hpbGRyZW5bKytuXS50b1RleHQoKTt0aGlzLmNoaWxkcmVuW24rMV1pbnN0YW5jZW9mIEFvOylpKz10aGlzLmNoaWxkcmVuWysrbl0udG9UZXh0KCk7ZS5hcHBlbmRDaGlsZChuZXcgQW8oaSkudG9Ob2RlKCkpfWVsc2UgZS5hcHBlbmRDaGlsZCh0aGlzLmNoaWxkcmVuW25dLnRvTm9kZSgpKTtyZXR1cm4gZX10b01hcmt1cCgpe3ZhciBlPSI8Iit0aGlzLnR5cGU7Zm9yKHZhciByIGluIHRoaXMuYXR0cmlidXRlcylPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hdHRyaWJ1dGVzLHIpJiYoZSs9IiAiK3IrJz0iJyxlKz1KdC5lc2NhcGUodGhpcy5hdHRyaWJ1dGVzW3JdKSxlKz0nIicpO3RoaXMuY2xhc3Nlcy5sZW5ndGg+MCYmKGUrPScgY2xhc3MgPSInK0p0LmVzY2FwZSh2aCh0aGlzLmNsYXNzZXMpKSsnIicpLGUrPSI+Ijtmb3IodmFyIG49MDtuPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO24rKyllKz10aGlzLmNoaWxkcmVuW25dLnRvTWFya3VwKCk7cmV0dXJuIGUrPSI8LyIrdGhpcy50eXBlKyI+IixlfXRvVGV4dCgpe3JldHVybiB0aGlzLmNoaWxkcmVuLm1hcChlPT5lLnRvVGV4dCgpKS5qb2luKCIiKX19LEFvPWNsYXNze3N0YXRpY3tvKHRoaXMsIlRleHROb2RlIil9Y29uc3RydWN0b3IoZSl7dGhpcy50ZXh0PXZvaWQgMCx0aGlzLnRleHQ9ZX10b05vZGUoKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGhpcy50ZXh0KX10b01hcmt1cCgpe3JldHVybiBKdC5lc2NhcGUodGhpcy50b1RleHQoKSl9dG9UZXh0KCl7cmV0dXJuIHRoaXMudGV4dH19LEs3PWNsYXNze3N0YXRpY3tvKHRoaXMsIlNwYWNlTm9kZSIpfWNvbnN0cnVjdG9yKGUpe3RoaXMud2lkdGg9dm9pZCAwLHRoaXMuY2hhcmFjdGVyPXZvaWQgMCx0aGlzLndpZHRoPWUsZT49LjA1NTU1JiZlPD0uMDU1NTY/dGhpcy5jaGFyYWN0ZXI9Ilx1MjAwQSI6ZT49LjE2NjYmJmU8PS4xNjY3P3RoaXMuY2hhcmFjdGVyPSJcdTIwMDkiOmU+PS4yMjIyJiZlPD0uMjIyMz90aGlzLmNoYXJhY3Rlcj0iXHUyMDA1IjplPj0uMjc3NyYmZTw9LjI3Nzg/dGhpcy5jaGFyYWN0ZXI9Ilx1MjAwNVx1MjAwQSI6ZT49LS4wNTU1NiYmZTw9LS4wNTU1NT90aGlzLmNoYXJhY3Rlcj0iXHUyMDBBXHUyMDYzIjplPj0tLjE2NjcmJmU8PS0uMTY2Nj90aGlzLmNoYXJhY3Rlcj0iXHUyMDA5XHUyMDYzIjplPj0tLjIyMjMmJmU8PS0uMjIyMj90aGlzLmNoYXJhY3Rlcj0iXHUyMDVGXHUyMDYzIjplPj0tLjI3NzgmJmU8PS0uMjc3Nz90aGlzLmNoYXJhY3Rlcj0iXHUyMDA1XHUyMDYzIjp0aGlzLmNoYXJhY3Rlcj1udWxsfXRvTm9kZSgpe2lmKHRoaXMuY2hhcmFjdGVyKXJldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0aGlzLmNoYXJhY3Rlcik7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIiwibXNwYWNlIik7cmV0dXJuIGUuc2V0QXR0cmlidXRlKCJ3aWR0aCIsRXQodGhpcy53aWR0aCkpLGV9dG9NYXJrdXAoKXtyZXR1cm4gdGhpcy5jaGFyYWN0ZXI/IjxtdGV4dD4iK3RoaXMuY2hhcmFjdGVyKyI8L210ZXh0PiI6Jzxtc3BhY2Ugd2lkdGg9IicrRXQodGhpcy53aWR0aCkrJyIvPid9dG9UZXh0KCl7cmV0dXJuIHRoaXMuY2hhcmFjdGVyP3RoaXMuY2hhcmFjdGVyOiIgIn19LGR0PXtNYXRoTm9kZTp0cyxUZXh0Tm9kZTpBbyxTcGFjZU5vZGU6SzcsbmV3RG9jdW1lbnRGcmFnbWVudDp6R30sRG89byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIEFuW3JdW2VdJiZBbltyXVtlXS5yZXBsYWNlJiZlLmNoYXJDb2RlQXQoMCkhPT01NTM0OSYmIShNRy5oYXNPd25Qcm9wZXJ0eShlKSYmbiYmKG4uZm9udEZhbWlseSYmbi5mb250RmFtaWx5LnNsaWNlKDQsNik9PT0idHQifHxuLmZvbnQmJm4uZm9udC5zbGljZSg0LDYpPT09InR0IikpJiYoZT1BbltyXVtlXS5yZXBsYWNlKSxuZXcgZHQuVGV4dE5vZGUoZSl9LCJtYWtlVGV4dCIpLGFBPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGUubGVuZ3RoPT09MT9lWzBdOm5ldyBkdC5NYXRoTm9kZSgibXJvdyIsZSl9LCJtYWtlUm93Iiksc0E9byhmdW5jdGlvbihlLHIpe2lmKHIuZm9udEZhbWlseT09PSJ0ZXh0dHQiKXJldHVybiJtb25vc3BhY2UiO2lmKHIuZm9udEZhbWlseT09PSJ0ZXh0c2YiKXJldHVybiByLmZvbnRTaGFwZT09PSJ0ZXh0aXQiJiZyLmZvbnRXZWlnaHQ9PT0idGV4dGJmIj8ic2Fucy1zZXJpZi1ib2xkLWl0YWxpYyI6ci5mb250U2hhcGU9PT0idGV4dGl0Ij8ic2Fucy1zZXJpZi1pdGFsaWMiOnIuZm9udFdlaWdodD09PSJ0ZXh0YmYiPyJib2xkLXNhbnMtc2VyaWYiOiJzYW5zLXNlcmlmIjtpZihyLmZvbnRTaGFwZT09PSJ0ZXh0aXQiJiZyLmZvbnRXZWlnaHQ9PT0idGV4dGJmIilyZXR1cm4iYm9sZC1pdGFsaWMiO2lmKHIuZm9udFNoYXBlPT09InRleHRpdCIpcmV0dXJuIml0YWxpYyI7aWYoci5mb250V2VpZ2h0PT09InRleHRiZiIpcmV0dXJuImJvbGQiO3ZhciBuPXIuZm9udDtpZighbnx8bj09PSJtYXRobm9ybWFsIilyZXR1cm4gbnVsbDt2YXIgaT1lLm1vZGU7aWYobj09PSJtYXRoaXQiKXJldHVybiJpdGFsaWMiO2lmKG49PT0iYm9sZHN5bWJvbCIpcmV0dXJuIGUudHlwZT09PSJ0ZXh0b3JkIj8iYm9sZCI6ImJvbGQtaXRhbGljIjtpZihuPT09Im1hdGhiZiIpcmV0dXJuImJvbGQiO2lmKG49PT0ibWF0aGJiIilyZXR1cm4iZG91YmxlLXN0cnVjayI7aWYobj09PSJtYXRoc2ZpdCIpcmV0dXJuInNhbnMtc2VyaWYtaXRhbGljIjtpZihuPT09Im1hdGhmcmFrIilyZXR1cm4iZnJha3R1ciI7aWYobj09PSJtYXRoc2NyInx8bj09PSJtYXRoY2FsIilyZXR1cm4ic2NyaXB0IjtpZihuPT09Im1hdGhzZiIpcmV0dXJuInNhbnMtc2VyaWYiO2lmKG49PT0ibWF0aHR0IilyZXR1cm4ibW9ub3NwYWNlIjt2YXIgYT1lLnRleHQ7aWYoSnQuY29udGFpbnMoWyJcXGltYXRoIiwiXFxqbWF0aCJdLGEpKXJldHVybiBudWxsO0FuW2ldW2FdJiZBbltpXVthXS5yZXBsYWNlJiYoYT1BbltpXVthXS5yZXBsYWNlKTt2YXIgcz1GZS5mb250TWFwW25dLmZvbnROYW1lO3JldHVybiBuQShhLHMsaSk/RmUuZm9udE1hcFtuXS52YXJpYW50Om51bGx9LCJnZXRWYXJpYW50Iik7byhJNywiaXNOdW1iZXJQdW5jdHVhdGlvbiIpO19zPW8oZnVuY3Rpb24oZSxyLG4pe2lmKGUubGVuZ3RoPT09MSl7dmFyIGk9dm4oZVswXSxyKTtyZXR1cm4gbiYmaSBpbnN0YW5jZW9mIHRzJiZpLnR5cGU9PT0ibW8iJiYoaS5zZXRBdHRyaWJ1dGUoImxzcGFjZSIsIjBlbSIpLGkuc2V0QXR0cmlidXRlKCJyc3BhY2UiLCIwZW0iKSksW2ldfWZvcih2YXIgYT1bXSxzLGw9MDtsPGUubGVuZ3RoO2wrKyl7dmFyIHU9dm4oZVtsXSxyKTtpZih1IGluc3RhbmNlb2YgdHMmJnMgaW5zdGFuY2VvZiB0cyl7aWYodS50eXBlPT09Im10ZXh0IiYmcy50eXBlPT09Im10ZXh0IiYmdS5nZXRBdHRyaWJ1dGUoIm1hdGh2YXJpYW50Iik9PT1zLmdldEF0dHJpYnV0ZSgibWF0aHZhcmlhbnQiKSl7cy5jaGlsZHJlbi5wdXNoKC4uLnUuY2hpbGRyZW4pO2NvbnRpbnVlfWVsc2UgaWYodS50eXBlPT09Im1uIiYmcy50eXBlPT09Im1uIil7cy5jaGlsZHJlbi5wdXNoKC4uLnUuY2hpbGRyZW4pO2NvbnRpbnVlfWVsc2UgaWYoSTcodSkmJnMudHlwZT09PSJtbiIpe3MuY2hpbGRyZW4ucHVzaCguLi51LmNoaWxkcmVuKTtjb250aW51ZX1lbHNlIGlmKHUudHlwZT09PSJtbiImJkk3KHMpKXUuY2hpbGRyZW49Wy4uLnMuY2hpbGRyZW4sLi4udS5jaGlsZHJlbl0sYS5wb3AoKTtlbHNlIGlmKCh1LnR5cGU9PT0ibXN1cCJ8fHUudHlwZT09PSJtc3ViIikmJnUuY2hpbGRyZW4ubGVuZ3RoPj0xJiYocy50eXBlPT09Im1uInx8STcocykpKXt2YXIgaD11LmNoaWxkcmVuWzBdO2ggaW5zdGFuY2VvZiB0cyYmaC50eXBlPT09Im1uIiYmKGguY2hpbGRyZW49Wy4uLnMuY2hpbGRyZW4sLi4uaC5jaGlsZHJlbl0sYS5wb3AoKSl9ZWxzZSBpZihzLnR5cGU9PT0ibWkiJiZzLmNoaWxkcmVuLmxlbmd0aD09PTEpe3ZhciBmPXMuY2hpbGRyZW5bMF07aWYoZiBpbnN0YW5jZW9mIEFvJiZmLnRleHQ9PT0iXHUwMzM4IiYmKHUudHlwZT09PSJtbyJ8fHUudHlwZT09PSJtaSJ8fHUudHlwZT09PSJtbiIpKXt2YXIgZD11LmNoaWxkcmVuWzBdO2QgaW5zdGFuY2VvZiBBbyYmZC50ZXh0Lmxlbmd0aD4wJiYoZC50ZXh0PWQudGV4dC5zbGljZSgwLDEpKyJcdTAzMzgiK2QudGV4dC5zbGljZSgxKSxhLnBvcCgpKX19fWEucHVzaCh1KSxzPXV9cmV0dXJuIGF9LCJidWlsZEV4cHJlc3Npb24iKSx4aD1vKGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gYUEoX3MoZSxyLG4pKX0sImJ1aWxkRXhwcmVzc2lvblJvdyIpLHZuPW8oZnVuY3Rpb24oZSxyKXtpZighZSlyZXR1cm4gbmV3IGR0Lk1hdGhOb2RlKCJtcm93Iik7aWYoUzNbZS50eXBlXSl7dmFyIG49UzNbZS50eXBlXShlLHIpO3JldHVybiBufWVsc2UgdGhyb3cgbmV3IHB0KCJHb3QgZ3JvdXAgb2YgdW5rbm93biB0eXBlOiAnIitlLnR5cGUrIiciKX0sImJ1aWxkR3JvdXAiKTtvKGlHLCJidWlsZE1hdGhNTCIpO0dHPW8oZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB3Myh7c3R5bGU6ZS5kaXNwbGF5TW9kZT9uci5ESVNQTEFZOm5yLlRFWFQsbWF4U2l6ZTplLm1heFNpemUsbWluUnVsZVRoaWNrbmVzczplLm1pblJ1bGVUaGlja25lc3N9KX0sIm9wdGlvbnNGcm9tU2V0dGluZ3MiKSxWRz1vKGZ1bmN0aW9uKGUscil7aWYoci5kaXNwbGF5TW9kZSl7dmFyIG49WyJrYXRleC1kaXNwbGF5Il07ci5sZXFubyYmbi5wdXNoKCJsZXFubyIpLHIuZmxlcW4mJm4ucHVzaCgiZmxlcW4iKSxlPUZlLm1ha2VTcGFuKG4sW2VdKX1yZXR1cm4gZX0sImRpc3BsYXlXcmFwIiksdzNlPW8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPUdHKG4pLGE7aWYobi5vdXRwdXQ9PT0ibWF0aG1sIilyZXR1cm4gaUcoZSxyLGksbi5kaXNwbGF5TW9kZSwhMCk7aWYobi5vdXRwdXQ9PT0iaHRtbCIpe3ZhciBzPWo3KGUsaSk7YT1GZS5tYWtlU3BhbihbImthdGV4Il0sW3NdKX1lbHNle3ZhciBsPWlHKGUscixpLG4uZGlzcGxheU1vZGUsITEpLHU9ajcoZSxpKTthPUZlLm1ha2VTcGFuKFsia2F0ZXgiXSxbbCx1XSl9cmV0dXJuIFZHKGEsbil9LCJidWlsZFRyZWUiKSxrM2U9byhmdW5jdGlvbihlLHIsbil7dmFyIGk9R0cobiksYT1qNyhlLGkpLHM9RmUubWFrZVNwYW4oWyJrYXRleCJdLFthXSk7cmV0dXJuIFZHKHMsbil9LCJidWlsZEhUTUxUcmVlIiksRTNlPXt3aWRlaGF0OiJeIix3aWRlY2hlY2s6Ilx1MDJDNyIsd2lkZXRpbGRlOiJ+Iix1dGlsZGU6In4iLG92ZXJsZWZ0YXJyb3c6Ilx1MjE5MCIsdW5kZXJsZWZ0YXJyb3c6Ilx1MjE5MCIseGxlZnRhcnJvdzoiXHUyMTkwIixvdmVycmlnaHRhcnJvdzoiXHUyMTkyIix1bmRlcnJpZ2h0YXJyb3c6Ilx1MjE5MiIseHJpZ2h0YXJyb3c6Ilx1MjE5MiIsdW5kZXJicmFjZToiXHUyM0RGIixvdmVyYnJhY2U6Ilx1MjNERSIsb3Zlcmdyb3VwOiJcdTIzRTAiLHVuZGVyZ3JvdXA6Ilx1MjNFMSIsb3ZlcmxlZnRyaWdodGFycm93OiJcdTIxOTQiLHVuZGVybGVmdHJpZ2h0YXJyb3c6Ilx1MjE5NCIseGxlZnRyaWdodGFycm93OiJcdTIxOTQiLE92ZXJyaWdodGFycm93OiJcdTIxRDIiLHhSaWdodGFycm93OiJcdTIxRDIiLG92ZXJsZWZ0aGFycG9vbjoiXHUyMUJDIix4bGVmdGhhcnBvb251cDoiXHUyMUJDIixvdmVycmlnaHRoYXJwb29uOiJcdTIxQzAiLHhyaWdodGhhcnBvb251cDoiXHUyMUMwIix4TGVmdGFycm93OiJcdTIxRDAiLHhMZWZ0cmlnaHRhcnJvdzoiXHUyMUQ0Iix4aG9va2xlZnRhcnJvdzoiXHUyMUE5Iix4aG9va3JpZ2h0YXJyb3c6Ilx1MjFBQSIseG1hcHN0bzoiXHUyMUE2Iix4cmlnaHRoYXJwb29uZG93bjoiXHUyMUMxIix4bGVmdGhhcnBvb25kb3duOiJcdTIxQkQiLHhyaWdodGxlZnRoYXJwb29uczoiXHUyMUNDIix4bGVmdHJpZ2h0aGFycG9vbnM6Ilx1MjFDQiIseHR3b2hlYWRsZWZ0YXJyb3c6Ilx1MjE5RSIseHR3b2hlYWRyaWdodGFycm93OiJcdTIxQTAiLHhsb25nZXF1YWw6Ij0iLHh0b2Zyb206Ilx1MjFDNCIseHJpZ2h0bGVmdGFycm93czoiXHUyMUM0Iix4cmlnaHRlcXVpbGlicml1bToiXHUyMUNDIix4bGVmdGVxdWlsaWJyaXVtOiJcdTIxQ0IiLCJcXGNkcmlnaHRhcnJvdyI6Ilx1MjE5MiIsIlxcY2RsZWZ0YXJyb3ciOiJcdTIxOTAiLCJcXGNkbG9uZ2VxdWFsIjoiPSJ9LFMzZT1vKGZ1bmN0aW9uKGUpe3ZhciByPW5ldyBkdC5NYXRoTm9kZSgibW8iLFtuZXcgZHQuVGV4dE5vZGUoRTNlW2UucmVwbGFjZSgvXlxcLywiIildKV0pO3JldHVybiByLnNldEF0dHJpYnV0ZSgic3RyZXRjaHkiLCJ0cnVlIikscn0sIm1hdGhNTG5vZGUiKSxDM2U9e292ZXJyaWdodGFycm93OltbInJpZ2h0YXJyb3ciXSwuODg4LDUyMiwieE1heFlNaW4iXSxvdmVybGVmdGFycm93OltbImxlZnRhcnJvdyJdLC44ODgsNTIyLCJ4TWluWU1pbiJdLHVuZGVycmlnaHRhcnJvdzpbWyJyaWdodGFycm93Il0sLjg4OCw1MjIsInhNYXhZTWluIl0sdW5kZXJsZWZ0YXJyb3c6W1sibGVmdGFycm93Il0sLjg4OCw1MjIsInhNaW5ZTWluIl0seHJpZ2h0YXJyb3c6W1sicmlnaHRhcnJvdyJdLDEuNDY5LDUyMiwieE1heFlNaW4iXSwiXFxjZHJpZ2h0YXJyb3ciOltbInJpZ2h0YXJyb3ciXSwzLDUyMiwieE1heFlNaW4iXSx4bGVmdGFycm93OltbImxlZnRhcnJvdyJdLDEuNDY5LDUyMiwieE1pbllNaW4iXSwiXFxjZGxlZnRhcnJvdyI6W1sibGVmdGFycm93Il0sMyw1MjIsInhNaW5ZTWluIl0sT3ZlcnJpZ2h0YXJyb3c6W1siZG91YmxlcmlnaHRhcnJvdyJdLC44ODgsNTYwLCJ4TWF4WU1pbiJdLHhSaWdodGFycm93OltbImRvdWJsZXJpZ2h0YXJyb3ciXSwxLjUyNiw1NjAsInhNYXhZTWluIl0seExlZnRhcnJvdzpbWyJkb3VibGVsZWZ0YXJyb3ciXSwxLjUyNiw1NjAsInhNaW5ZTWluIl0sb3ZlcmxlZnRoYXJwb29uOltbImxlZnRoYXJwb29uIl0sLjg4OCw1MjIsInhNaW5ZTWluIl0seGxlZnRoYXJwb29udXA6W1sibGVmdGhhcnBvb24iXSwuODg4LDUyMiwieE1pbllNaW4iXSx4bGVmdGhhcnBvb25kb3duOltbImxlZnRoYXJwb29uZG93biJdLC44ODgsNTIyLCJ4TWluWU1pbiJdLG92ZXJyaWdodGhhcnBvb246W1sicmlnaHRoYXJwb29uIl0sLjg4OCw1MjIsInhNYXhZTWluIl0seHJpZ2h0aGFycG9vbnVwOltbInJpZ2h0aGFycG9vbiJdLC44ODgsNTIyLCJ4TWF4WU1pbiJdLHhyaWdodGhhcnBvb25kb3duOltbInJpZ2h0aGFycG9vbmRvd24iXSwuODg4LDUyMiwieE1heFlNaW4iXSx4bG9uZ2VxdWFsOltbImxvbmdlcXVhbCJdLC44ODgsMzM0LCJ4TWluWU1pbiJdLCJcXGNkbG9uZ2VxdWFsIjpbWyJsb25nZXF1YWwiXSwzLDMzNCwieE1pbllNaW4iXSx4dHdvaGVhZGxlZnRhcnJvdzpbWyJ0d29oZWFkbGVmdGFycm93Il0sLjg4OCwzMzQsInhNaW5ZTWluIl0seHR3b2hlYWRyaWdodGFycm93OltbInR3b2hlYWRyaWdodGFycm93Il0sLjg4OCwzMzQsInhNYXhZTWluIl0sb3ZlcmxlZnRyaWdodGFycm93OltbImxlZnRhcnJvdyIsInJpZ2h0YXJyb3ciXSwuODg4LDUyMl0sb3ZlcmJyYWNlOltbImxlZnRicmFjZSIsIm1pZGJyYWNlIiwicmlnaHRicmFjZSJdLDEuNiw1NDhdLHVuZGVyYnJhY2U6W1sibGVmdGJyYWNldW5kZXIiLCJtaWRicmFjZXVuZGVyIiwicmlnaHRicmFjZXVuZGVyIl0sMS42LDU0OF0sdW5kZXJsZWZ0cmlnaHRhcnJvdzpbWyJsZWZ0YXJyb3ciLCJyaWdodGFycm93Il0sLjg4OCw1MjJdLHhsZWZ0cmlnaHRhcnJvdzpbWyJsZWZ0YXJyb3ciLCJyaWdodGFycm93Il0sMS43NSw1MjJdLHhMZWZ0cmlnaHRhcnJvdzpbWyJkb3VibGVsZWZ0YXJyb3ciLCJkb3VibGVyaWdodGFycm93Il0sMS43NSw1NjBdLHhyaWdodGxlZnRoYXJwb29uczpbWyJsZWZ0aGFycG9vbmRvd25wbHVzIiwicmlnaHRoYXJwb29ucGx1cyJdLDEuNzUsNzE2XSx4bGVmdHJpZ2h0aGFycG9vbnM6W1sibGVmdGhhcnBvb25wbHVzIiwicmlnaHRoYXJwb29uZG93bnBsdXMiXSwxLjc1LDcxNl0seGhvb2tsZWZ0YXJyb3c6W1sibGVmdGFycm93IiwicmlnaHRob29rIl0sMS4wOCw1MjJdLHhob29rcmlnaHRhcnJvdzpbWyJsZWZ0aG9vayIsInJpZ2h0YXJyb3ciXSwxLjA4LDUyMl0sb3ZlcmxpbmVzZWdtZW50OltbImxlZnRsaW5lc2VnbWVudCIsInJpZ2h0bGluZXNlZ21lbnQiXSwuODg4LDUyMl0sdW5kZXJsaW5lc2VnbWVudDpbWyJsZWZ0bGluZXNlZ21lbnQiLCJyaWdodGxpbmVzZWdtZW50Il0sLjg4OCw1MjJdLG92ZXJncm91cDpbWyJsZWZ0Z3JvdXAiLCJyaWdodGdyb3VwIl0sLjg4OCwzNDJdLHVuZGVyZ3JvdXA6W1sibGVmdGdyb3VwdW5kZXIiLCJyaWdodGdyb3VwdW5kZXIiXSwuODg4LDM0Ml0seG1hcHN0bzpbWyJsZWZ0bWFwc3RvIiwicmlnaHRhcnJvdyJdLDEuNSw1MjJdLHh0b2Zyb206W1sibGVmdFRvRnJvbSIsInJpZ2h0VG9Gcm9tIl0sMS43NSw1MjhdLHhyaWdodGxlZnRhcnJvd3M6W1siYmFyYWJvdmVsZWZ0YXJyb3ciLCJyaWdodGFycm93YWJvdmViYXIiXSwxLjc1LDkwMV0seHJpZ2h0ZXF1aWxpYnJpdW06W1siYmFyYWJvdmVzaG9ydGxlZnRoYXJwb29uIiwicmlnaHRoYXJwb29uYWJvdmVzaG9ydGJhciJdLDEuNzUsNzE2XSx4bGVmdGVxdWlsaWJyaXVtOltbInNob3J0YmFyYWJvdmVsZWZ0aGFycG9vbiIsInNob3J0cmlnaHRoYXJwb29uYWJvdmViYXIiXSwxLjc1LDcxNl19LEEzZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBlLnR5cGU9PT0ib3JkZ3JvdXAiP2UuYm9keS5sZW5ndGg6MX0sImdyb3VwTGVuZ3RoIiksXzNlPW8oZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKCl7dmFyIGw9NGU1LHU9ZS5sYWJlbC5zbGljZSgxKTtpZihKdC5jb250YWlucyhbIndpZGVoYXQiLCJ3aWRlY2hlY2siLCJ3aWRldGlsZGUiLCJ1dGlsZGUiXSx1KSl7dmFyIGg9ZSxmPUEzZShoLmJhc2UpLGQscCxtO2lmKGY+NSl1PT09IndpZGVoYXQifHx1PT09IndpZGVjaGVjayI/KGQ9NDIwLGw9MjM2NCxtPS40MixwPXUrIjQiKTooZD0zMTIsbD0yMzQwLG09LjM0LHA9InRpbGRlNCIpO2Vsc2V7dmFyIGc9WzEsMSwyLDIsMywzXVtmXTt1PT09IndpZGVoYXQifHx1PT09IndpZGVjaGVjayI/KGw9WzAsMTA2MiwyMzY0LDIzNjQsMjM2NF1bZ10sZD1bMCwyMzksMzAwLDM2MCw0MjBdW2ddLG09WzAsLjI0LC4zLC4zLC4zNiwuNDJdW2ddLHA9dStnKToobD1bMCw2MDAsMTAzMywyMzM5LDIzNDBdW2ddLGQ9WzAsMjYwLDI4NiwzMDYsMzEyXVtnXSxtPVswLC4yNiwuMjg2LC4zLC4zMDYsLjM0XVtnXSxwPSJ0aWxkZSIrZyl9dmFyIHk9bmV3IGVjKHApLHY9bmV3IGRsKFt5XSx7d2lkdGg6IjEwMCUiLGhlaWdodDpFdChtKSx2aWV3Qm94OiIwIDAgIitsKyIgIitkLHByZXNlcnZlQXNwZWN0UmF0aW86Im5vbmUifSk7cmV0dXJue3NwYW46RmUubWFrZVN2Z1NwYW4oW10sW3ZdLHIpLG1pbldpZHRoOjAsaGVpZ2h0Om19fWVsc2V7dmFyIHg9W10sYj1DM2VbdV0sW1QsUyx3XT1iLEU9dy8xZTMsXz1ULmxlbmd0aCxDLEQ7aWYoXz09PTEpe3ZhciBPPWJbM107Qz1bImhpZGUtdGFpbCJdLEQ9W09dfWVsc2UgaWYoXz09PTIpQz1bImhhbGZhcnJvdy1sZWZ0IiwiaGFsZmFycm93LXJpZ2h0Il0sRD1bInhNaW5ZTWluIiwieE1heFlNaW4iXTtlbHNlIGlmKF89PT0zKUM9WyJicmFjZS1sZWZ0IiwiYnJhY2UtY2VudGVyIiwiYnJhY2UtcmlnaHQiXSxEPVsieE1pbllNaW4iLCJ4TWlkWU1pbiIsInhNYXhZTWluIl07ZWxzZSB0aHJvdyBuZXcgRXJyb3IoYENvcnJlY3Qga2F0ZXhJbWFnZXNEYXRhIG9yIHVwZGF0ZSBjb2RlIGhlcmUgdG8gc3VwcG9ydAogICAgICAgICAgICAgICAgICAgIGArXysiIGNoaWxkcmVuLiIpO2Zvcih2YXIgUj0wO1I8XztSKyspe3ZhciBrPW5ldyBlYyhUW1JdKSxMPW5ldyBkbChba10se3dpZHRoOiI0MDBlbSIsaGVpZ2h0OkV0KEUpLHZpZXdCb3g6IjAgMCAiK2wrIiAiK3cscHJlc2VydmVBc3BlY3RSYXRpbzpEW1JdKyIgc2xpY2UifSksQT1GZS5tYWtlU3ZnU3BhbihbQ1tSXV0sW0xdLHIpO2lmKF89PT0xKXJldHVybntzcGFuOkEsbWluV2lkdGg6UyxoZWlnaHQ6RX07QS5zdHlsZS5oZWlnaHQ9RXQoRSkseC5wdXNoKEEpfXJldHVybntzcGFuOkZlLm1ha2VTcGFuKFsic3RyZXRjaHkiXSx4LHIpLG1pbldpZHRoOlMsaGVpZ2h0OkV9fX1vKG4sImJ1aWxkU3ZnU3Bhbl8iKTt2YXJ7c3BhbjppLG1pbldpZHRoOmEsaGVpZ2h0OnN9PW4oKTtyZXR1cm4gaS5oZWlnaHQ9cyxpLnN0eWxlLmhlaWdodD1FdChzKSxhPjAmJihpLnN0eWxlLm1pbldpZHRoPUV0KGEpKSxpfSwic3ZnU3BhbiIpLEQzZT1vKGZ1bmN0aW9uKGUscixuLGksYSl7dmFyIHMsbD1lLmhlaWdodCtlLmRlcHRoK24raTtpZigvZmJveHxjb2xvcnxhbmdsLy50ZXN0KHIpKXtpZihzPUZlLm1ha2VTcGFuKFsic3RyZXRjaHkiLHJdLFtdLGEpLHI9PT0iZmJveCIpe3ZhciB1PWEuY29sb3ImJmEuZ2V0Q29sb3IoKTt1JiYocy5zdHlsZS5ib3JkZXJDb2xvcj11KX19ZWxzZXt2YXIgaD1bXTsvXltieF1jYW5jZWwkLy50ZXN0KHIpJiZoLnB1c2gobmV3IEp5KHt4MToiMCIseTE6IjAiLHgyOiIxMDAlIix5MjoiMTAwJSIsInN0cm9rZS13aWR0aCI6IjAuMDQ2ZW0ifSkpLC9eeD9jYW5jZWwkLy50ZXN0KHIpJiZoLnB1c2gobmV3IEp5KHt4MToiMCIseTE6IjEwMCUiLHgyOiIxMDAlIix5MjoiMCIsInN0cm9rZS13aWR0aCI6IjAuMDQ2ZW0ifSkpO3ZhciBmPW5ldyBkbChoLHt3aWR0aDoiMTAwJSIsaGVpZ2h0OkV0KGwpfSk7cz1GZS5tYWtlU3ZnU3BhbihbXSxbZl0sYSl9cmV0dXJuIHMuaGVpZ2h0PWwscy5zdHlsZS5oZWlnaHQ9RXQobCksc30sImVuY2xvc2VTcGFuIiksZHU9e2VuY2xvc2VTcGFuOkQzZSxtYXRoTUxub2RlOlMzZSxzdmdTcGFuOl8zZX07byh4ciwiYXNzZXJ0Tm9kZVR5cGUiKTtvKG9BLCJhc3NlcnRTeW1ib2xOb2RlVHlwZSIpO28oUjMsImNoZWNrU3ltYm9sTm9kZVR5cGUiKTtsQT1vKCh0LGUpPT57dmFyIHIsbixpO3QmJnQudHlwZT09PSJzdXBzdWIiPyhuPXhyKHQuYmFzZSwiYWNjZW50Iikscj1uLmJhc2UsdC5iYXNlPXIsaT1KNGUoJHIodCxlKSksdC5iYXNlPW4pOihuPXhyKHQsImFjY2VudCIpLHI9bi5iYXNlKTt2YXIgYT0kcihyLGUuaGF2aW5nQ3JhbXBlZFN0eWxlKCkpLHM9bi5pc1NoaWZ0eSYmSnQuaXNDaGFyYWN0ZXJCb3gociksbD0wO2lmKHMpe3ZhciB1PUp0LmdldEJhc2VFbGVtKHIpLGg9JHIodSxlLmhhdmluZ0NyYW1wZWRTdHlsZSgpKTtsPUp6KGgpLnNrZXd9dmFyIGY9bi5sYWJlbD09PSJcXGMiLGQ9Zj9hLmhlaWdodCthLmRlcHRoOk1hdGgubWluKGEuaGVpZ2h0LGUuZm9udE1ldHJpY3MoKS54SGVpZ2h0KSxwO2lmKG4uaXNTdHJldGNoeSlwPWR1LnN2Z1NwYW4obixlKSxwPUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJmaXJzdEJhc2VsaW5lIixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06YX0se3R5cGU6ImVsZW0iLGVsZW06cCx3cmFwcGVyQ2xhc3NlczpbInN2Zy1hbGlnbiJdLHdyYXBwZXJTdHlsZTpsPjA/e3dpZHRoOiJjYWxjKDEwMCUgLSAiK0V0KDIqbCkrIikiLG1hcmdpbkxlZnQ6RXQoMipsKX06dm9pZCAwfV19LGUpO2Vsc2V7dmFyIG0sZztuLmxhYmVsPT09IlxcdmVjIj8obT1GZS5zdGF0aWNTdmcoInZlYyIsZSksZz1GZS5zdmdEYXRhLnZlY1sxXSk6KG09RmUubWFrZU9yZCh7bW9kZTpuLm1vZGUsdGV4dDpuLmxhYmVsfSxlLCJ0ZXh0b3JkIiksbT1KeihtKSxtLml0YWxpYz0wLGc9bS53aWR0aCxmJiYoZCs9bS5kZXB0aCkpLHA9RmUubWFrZVNwYW4oWyJhY2NlbnQtYm9keSJdLFttXSk7dmFyIHk9bi5sYWJlbD09PSJcXHRleHRjaXJjbGVkIjt5JiYocC5jbGFzc2VzLnB1c2goImFjY2VudC1mdWxsIiksZD1hLmhlaWdodCk7dmFyIHY9bDt5fHwodi09Zy8yKSxwLnN0eWxlLmxlZnQ9RXQodiksbi5sYWJlbD09PSJcXHRleHRjaXJjbGVkIiYmKHAuc3R5bGUudG9wPSIuMmVtIikscD1GZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiZmlyc3RCYXNlbGluZSIsY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOmF9LHt0eXBlOiJrZXJuIixzaXplOi1kfSx7dHlwZToiZWxlbSIsZWxlbTpwfV19LGUpfXZhciB4PUZlLm1ha2VTcGFuKFsibW9yZCIsImFjY2VudCJdLFtwXSxlKTtyZXR1cm4gaT8oaS5jaGlsZHJlblswXT14LGkuaGVpZ2h0PU1hdGgubWF4KHguaGVpZ2h0LGkuaGVpZ2h0KSxpLmNsYXNzZXNbMF09Im1vcmQiLGkpOnh9LCJodG1sQnVpbGRlciRhIiksVUc9bygodCxlKT0+e3ZhciByPXQuaXNTdHJldGNoeT9kdS5tYXRoTUxub2RlKHQubGFiZWwpOm5ldyBkdC5NYXRoTm9kZSgibW8iLFtEbyh0LmxhYmVsLHQubW9kZSldKSxuPW5ldyBkdC5NYXRoTm9kZSgibW92ZXIiLFt2bih0LmJhc2UsZSkscl0pO3JldHVybiBuLnNldEF0dHJpYnV0ZSgiYWNjZW50IiwidHJ1ZSIpLG59LCJtYXRobWxCdWlsZGVyJDkiKSxMM2U9bmV3IFJlZ0V4cChbIlxcYWN1dGUiLCJcXGdyYXZlIiwiXFxkZG90IiwiXFx0aWxkZSIsIlxcYmFyIiwiXFxicmV2ZSIsIlxcY2hlY2siLCJcXGhhdCIsIlxcdmVjIiwiXFxkb3QiLCJcXG1hdGhyaW5nIl0ubWFwKHQ9PiJcXCIrdCkuam9pbigifCIpKTtOdCh7dHlwZToiYWNjZW50IixuYW1lczpbIlxcYWN1dGUiLCJcXGdyYXZlIiwiXFxkZG90IiwiXFx0aWxkZSIsIlxcYmFyIiwiXFxicmV2ZSIsIlxcY2hlY2siLCJcXGhhdCIsIlxcdmVjIiwiXFxkb3QiLCJcXG1hdGhyaW5nIiwiXFx3aWRlY2hlY2siLCJcXHdpZGVoYXQiLCJcXHdpZGV0aWxkZSIsIlxcb3ZlcnJpZ2h0YXJyb3ciLCJcXG92ZXJsZWZ0YXJyb3ciLCJcXE92ZXJyaWdodGFycm93IiwiXFxvdmVybGVmdHJpZ2h0YXJyb3ciLCJcXG92ZXJncm91cCIsIlxcb3ZlcmxpbmVzZWdtZW50IiwiXFxvdmVybGVmdGhhcnBvb24iLCJcXG92ZXJyaWdodGhhcnBvb24iXSxwcm9wczp7bnVtQXJnczoxfSxoYW5kbGVyOm8oKHQsZSk9Pnt2YXIgcj1DMyhlWzBdKSxuPSFMM2UudGVzdCh0LmZ1bmNOYW1lKSxpPSFufHx0LmZ1bmNOYW1lPT09Ilxcd2lkZWhhdCJ8fHQuZnVuY05hbWU9PT0iXFx3aWRldGlsZGUifHx0LmZ1bmNOYW1lPT09Ilxcd2lkZWNoZWNrIjtyZXR1cm57dHlwZToiYWNjZW50Iixtb2RlOnQucGFyc2VyLm1vZGUsbGFiZWw6dC5mdW5jTmFtZSxpc1N0cmV0Y2h5Om4saXNTaGlmdHk6aSxiYXNlOnJ9fSwiaGFuZGxlciIpLGh0bWxCdWlsZGVyOmxBLG1hdGhtbEJ1aWxkZXI6VUd9KTtOdCh7dHlwZToiYWNjZW50IixuYW1lczpbIlxcJyIsIlxcYCIsIlxcXiIsIlxcfiIsIlxcPSIsIlxcdSIsIlxcLiIsJ1xcIicsIlxcYyIsIlxcciIsIlxcSCIsIlxcdiIsIlxcdGV4dGNpcmNsZWQiXSxwcm9wczp7bnVtQXJnczoxLGFsbG93ZWRJblRleHQ6ITAsYWxsb3dlZEluTWF0aDohMCxhcmdUeXBlczpbInByaW1pdGl2ZSJdfSxoYW5kbGVyOm8oKHQsZSk9Pnt2YXIgcj1lWzBdLG49dC5wYXJzZXIubW9kZTtyZXR1cm4gbj09PSJtYXRoIiYmKHQucGFyc2VyLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdCgibWF0aFZzVGV4dEFjY2VudHMiLCJMYVRlWCdzIGFjY2VudCAiK3QuZnVuY05hbWUrIiB3b3JrcyBvbmx5IGluIHRleHQgbW9kZSIpLG49InRleHQiKSx7dHlwZToiYWNjZW50Iixtb2RlOm4sbGFiZWw6dC5mdW5jTmFtZSxpc1N0cmV0Y2h5OiExLGlzU2hpZnR5OiEwLGJhc2U6cn19LCJoYW5kbGVyIiksaHRtbEJ1aWxkZXI6bEEsbWF0aG1sQnVpbGRlcjpVR30pO050KHt0eXBlOiJhY2NlbnRVbmRlciIsbmFtZXM6WyJcXHVuZGVybGVmdGFycm93IiwiXFx1bmRlcnJpZ2h0YXJyb3ciLCJcXHVuZGVybGVmdHJpZ2h0YXJyb3ciLCJcXHVuZGVyZ3JvdXAiLCJcXHVuZGVybGluZXNlZ21lbnQiLCJcXHV0aWxkZSJdLHByb3BzOntudW1BcmdzOjF9LGhhbmRsZXI6bygodCxlKT0+e3ZhcntwYXJzZXI6cixmdW5jTmFtZTpufT10LGk9ZVswXTtyZXR1cm57dHlwZToiYWNjZW50VW5kZXIiLG1vZGU6ci5tb2RlLGxhYmVsOm4sYmFzZTppfX0sImhhbmRsZXIiKSxodG1sQnVpbGRlcjpvKCh0LGUpPT57dmFyIHI9JHIodC5iYXNlLGUpLG49ZHUuc3ZnU3Bhbih0LGUpLGk9dC5sYWJlbD09PSJcXHV0aWxkZSI/LjEyOjAsYT1GZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToidG9wIixwb3NpdGlvbkRhdGE6ci5oZWlnaHQsY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOm4sd3JhcHBlckNsYXNzZXM6WyJzdmctYWxpZ24iXX0se3R5cGU6Imtlcm4iLHNpemU6aX0se3R5cGU6ImVsZW0iLGVsZW06cn1dfSxlKTtyZXR1cm4gRmUubWFrZVNwYW4oWyJtb3JkIiwiYWNjZW50dW5kZXIiXSxbYV0sZSl9LCJodG1sQnVpbGRlciIpLG1hdGhtbEJ1aWxkZXI6bygodCxlKT0+e3ZhciByPWR1Lm1hdGhNTG5vZGUodC5sYWJlbCksbj1uZXcgZHQuTWF0aE5vZGUoIm11bmRlciIsW3ZuKHQuYmFzZSxlKSxyXSk7cmV0dXJuIG4uc2V0QXR0cmlidXRlKCJhY2NlbnR1bmRlciIsInRydWUiKSxufSwibWF0aG1sQnVpbGRlciIpfSk7eTM9byh0PT57dmFyIGU9bmV3IGR0Lk1hdGhOb2RlKCJtcGFkZGVkIix0P1t0XTpbXSk7cmV0dXJuIGUuc2V0QXR0cmlidXRlKCJ3aWR0aCIsIiswLjZlbSIpLGUuc2V0QXR0cmlidXRlKCJsc3BhY2UiLCIwLjNlbSIpLGV9LCJwYWRkZWROb2RlIik7TnQoe3R5cGU6InhBcnJvdyIsbmFtZXM6WyJcXHhsZWZ0YXJyb3ciLCJcXHhyaWdodGFycm93IiwiXFx4TGVmdGFycm93IiwiXFx4UmlnaHRhcnJvdyIsIlxceGxlZnRyaWdodGFycm93IiwiXFx4TGVmdHJpZ2h0YXJyb3ciLCJcXHhob29rbGVmdGFycm93IiwiXFx4aG9va3JpZ2h0YXJyb3ciLCJcXHhtYXBzdG8iLCJcXHhyaWdodGhhcnBvb25kb3duIiwiXFx4cmlnaHRoYXJwb29udXAiLCJcXHhsZWZ0aGFycG9vbmRvd24iLCJcXHhsZWZ0aGFycG9vbnVwIiwiXFx4cmlnaHRsZWZ0aGFycG9vbnMiLCJcXHhsZWZ0cmlnaHRoYXJwb29ucyIsIlxceGxvbmdlcXVhbCIsIlxceHR3b2hlYWRyaWdodGFycm93IiwiXFx4dHdvaGVhZGxlZnRhcnJvdyIsIlxceHRvZnJvbSIsIlxceHJpZ2h0bGVmdGFycm93cyIsIlxceHJpZ2h0ZXF1aWxpYnJpdW0iLCJcXHhsZWZ0ZXF1aWxpYnJpdW0iLCJcXFxcY2RyaWdodGFycm93IiwiXFxcXGNkbGVmdGFycm93IiwiXFxcXGNkbG9uZ2VxdWFsIl0scHJvcHM6e251bUFyZ3M6MSxudW1PcHRpb25hbEFyZ3M6MX0saGFuZGxlcih0LGUscil7dmFye3BhcnNlcjpuLGZ1bmNOYW1lOml9PXQ7cmV0dXJue3R5cGU6InhBcnJvdyIsbW9kZTpuLm1vZGUsbGFiZWw6aSxib2R5OmVbMF0sYmVsb3c6clswXX19LGh0bWxCdWlsZGVyKHQsZSl7dmFyIHI9ZS5zdHlsZSxuPWUuaGF2aW5nU3R5bGUoci5zdXAoKSksaT1GZS53cmFwRnJhZ21lbnQoJHIodC5ib2R5LG4sZSksZSksYT10LmxhYmVsLnNsaWNlKDAsMik9PT0iXFx4Ij8ieCI6ImNkIjtpLmNsYXNzZXMucHVzaChhKyItYXJyb3ctcGFkIik7dmFyIHM7dC5iZWxvdyYmKG49ZS5oYXZpbmdTdHlsZShyLnN1YigpKSxzPUZlLndyYXBGcmFnbWVudCgkcih0LmJlbG93LG4sZSksZSkscy5jbGFzc2VzLnB1c2goYSsiLWFycm93LXBhZCIpKTt2YXIgbD1kdS5zdmdTcGFuKHQsZSksdT0tZS5mb250TWV0cmljcygpLmF4aXNIZWlnaHQrLjUqbC5oZWlnaHQsaD0tZS5mb250TWV0cmljcygpLmF4aXNIZWlnaHQtLjUqbC5oZWlnaHQtLjExMTsoaS5kZXB0aD4uMjV8fHQubGFiZWw9PT0iXFx4bGVmdGVxdWlsaWJyaXVtIikmJihoLT1pLmRlcHRoKTt2YXIgZjtpZihzKXt2YXIgZD0tZS5mb250TWV0cmljcygpLmF4aXNIZWlnaHQrcy5oZWlnaHQrLjUqbC5oZWlnaHQrLjExMTtmPUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJpbmRpdmlkdWFsU2hpZnQiLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTppLHNoaWZ0Omh9LHt0eXBlOiJlbGVtIixlbGVtOmwsc2hpZnQ6dX0se3R5cGU6ImVsZW0iLGVsZW06cyxzaGlmdDpkfV19LGUpfWVsc2UgZj1GZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiaW5kaXZpZHVhbFNoaWZ0IixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06aSxzaGlmdDpofSx7dHlwZToiZWxlbSIsZWxlbTpsLHNoaWZ0OnV9XX0sZSk7cmV0dXJuIGYuY2hpbGRyZW5bMF0uY2hpbGRyZW5bMF0uY2hpbGRyZW5bMV0uY2xhc3Nlcy5wdXNoKCJzdmctYWxpZ24iKSxGZS5tYWtlU3BhbihbIm1yZWwiLCJ4LWFycm93Il0sW2ZdLGUpfSxtYXRobWxCdWlsZGVyKHQsZSl7dmFyIHI9ZHUubWF0aE1Mbm9kZSh0LmxhYmVsKTtyLnNldEF0dHJpYnV0ZSgibWluc2l6ZSIsdC5sYWJlbC5jaGFyQXQoMCk9PT0ieCI/IjEuNzVlbSI6IjMuMGVtIik7dmFyIG47aWYodC5ib2R5KXt2YXIgaT15Myh2bih0LmJvZHksZSkpO2lmKHQuYmVsb3cpe3ZhciBhPXkzKHZuKHQuYmVsb3csZSkpO249bmV3IGR0Lk1hdGhOb2RlKCJtdW5kZXJvdmVyIixbcixhLGldKX1lbHNlIG49bmV3IGR0Lk1hdGhOb2RlKCJtb3ZlciIsW3IsaV0pfWVsc2UgaWYodC5iZWxvdyl7dmFyIHM9eTModm4odC5iZWxvdyxlKSk7bj1uZXcgZHQuTWF0aE5vZGUoIm11bmRlciIsW3Isc10pfWVsc2Ugbj15MygpLG49bmV3IGR0Lk1hdGhOb2RlKCJtb3ZlciIsW3Isbl0pO3JldHVybiBufX0pO1IzZT1GZS5tYWtlU3BhbjtvKEhHLCJodG1sQnVpbGRlciQ5Iik7byhXRywibWF0aG1sQnVpbGRlciQ4Iik7TnQoe3R5cGU6Im1jbGFzcyIsbmFtZXM6WyJcXG1hdGhvcmQiLCJcXG1hdGhiaW4iLCJcXG1hdGhyZWwiLCJcXG1hdGhvcGVuIiwiXFxtYXRoY2xvc2UiLCJcXG1hdGhwdW5jdCIsIlxcbWF0aGlubmVyIl0scHJvcHM6e251bUFyZ3M6MSxwcmltaXRpdmU6ITB9LGhhbmRsZXIodCxlKXt2YXJ7cGFyc2VyOnIsZnVuY05hbWU6bn09dCxpPWVbMF07cmV0dXJue3R5cGU6Im1jbGFzcyIsbW9kZTpyLm1vZGUsbWNsYXNzOiJtIituLnNsaWNlKDUpLGJvZHk6Z2koaSksaXNDaGFyYWN0ZXJCb3g6SnQuaXNDaGFyYWN0ZXJCb3goaSl9fSxodG1sQnVpbGRlcjpIRyxtYXRobWxCdWlsZGVyOldHfSk7TjM9byh0PT57dmFyIGU9dC50eXBlPT09Im9yZGdyb3VwIiYmdC5ib2R5Lmxlbmd0aD90LmJvZHlbMF06dDtyZXR1cm4gZS50eXBlPT09ImF0b20iJiYoZS5mYW1pbHk9PT0iYmluInx8ZS5mYW1pbHk9PT0icmVsIik/Im0iK2UuZmFtaWx5OiJtb3JkIn0sImJpbnJlbENsYXNzIik7TnQoe3R5cGU6Im1jbGFzcyIsbmFtZXM6WyJcXEBiaW5yZWwiXSxwcm9wczp7bnVtQXJnczoyfSxoYW5kbGVyKHQsZSl7dmFye3BhcnNlcjpyfT10O3JldHVybnt0eXBlOiJtY2xhc3MiLG1vZGU6ci5tb2RlLG1jbGFzczpOMyhlWzBdKSxib2R5OmdpKGVbMV0pLGlzQ2hhcmFjdGVyQm94Okp0LmlzQ2hhcmFjdGVyQm94KGVbMV0pfX19KTtOdCh7dHlwZToibWNsYXNzIixuYW1lczpbIlxcc3RhY2tyZWwiLCJcXG92ZXJzZXQiLCJcXHVuZGVyc2V0Il0scHJvcHM6e251bUFyZ3M6Mn0saGFuZGxlcih0LGUpe3ZhcntwYXJzZXI6cixmdW5jTmFtZTpufT10LGk9ZVsxXSxhPWVbMF0scztuIT09Ilxcc3RhY2tyZWwiP3M9TjMoaSk6cz0ibXJlbCI7dmFyIGw9e3R5cGU6Im9wIixtb2RlOmkubW9kZSxsaW1pdHM6ITAsYWx3YXlzSGFuZGxlU3VwU3ViOiEwLHBhcmVudElzU3VwU3ViOiExLHN5bWJvbDohMSxzdXBwcmVzc0Jhc2VTaGlmdDpuIT09Ilxcc3RhY2tyZWwiLGJvZHk6Z2koaSl9LHU9e3R5cGU6InN1cHN1YiIsbW9kZTphLm1vZGUsYmFzZTpsLHN1cDpuPT09IlxcdW5kZXJzZXQiP251bGw6YSxzdWI6bj09PSJcXHVuZGVyc2V0Ij9hOm51bGx9O3JldHVybnt0eXBlOiJtY2xhc3MiLG1vZGU6ci5tb2RlLG1jbGFzczpzLGJvZHk6W3VdLGlzQ2hhcmFjdGVyQm94Okp0LmlzQ2hhcmFjdGVyQm94KHUpfX0saHRtbEJ1aWxkZXI6SEcsbWF0aG1sQnVpbGRlcjpXR30pO050KHt0eXBlOiJwbWIiLG5hbWVzOlsiXFxwbWIiXSxwcm9wczp7bnVtQXJnczoxLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXIodCxlKXt2YXJ7cGFyc2VyOnJ9PXQ7cmV0dXJue3R5cGU6InBtYiIsbW9kZTpyLm1vZGUsbWNsYXNzOk4zKGVbMF0pLGJvZHk6Z2koZVswXSl9fSxodG1sQnVpbGRlcih0LGUpe3ZhciByPSRpKHQuYm9keSxlLCEwKSxuPUZlLm1ha2VTcGFuKFt0Lm1jbGFzc10scixlKTtyZXR1cm4gbi5zdHlsZS50ZXh0U2hhZG93PSIwLjAyZW0gMC4wMWVtIDAuMDRweCIsbn0sbWF0aG1sQnVpbGRlcih0LGUpe3ZhciByPV9zKHQuYm9keSxlKSxuPW5ldyBkdC5NYXRoTm9kZSgibXN0eWxlIixyKTtyZXR1cm4gbi5zZXRBdHRyaWJ1dGUoInN0eWxlIiwidGV4dC1zaGFkb3c6IDAuMDJlbSAwLjAxZW0gMC4wNHB4Iiksbn19KTtOM2U9eyI+IjoiXFxcXGNkcmlnaHRhcnJvdyIsIjwiOiJcXFxcY2RsZWZ0YXJyb3ciLCI9IjoiXFxcXGNkbG9uZ2VxdWFsIixBOiJcXHVwYXJyb3ciLFY6IlxcZG93bmFycm93IiwifCI6IlxcVmVydCIsIi4iOiJubyBhcnJvdyJ9LGFHPW8oKCk9Pih7dHlwZToic3R5bGluZyIsYm9keTpbXSxtb2RlOiJtYXRoIixzdHlsZToiZGlzcGxheSJ9KSwibmV3Q2VsbCIpLHNHPW8odD0+dC50eXBlPT09InRleHRvcmQiJiZ0LnRleHQ9PT0iQCIsImlzU3RhcnRPZkFycm93IiksTTNlPW8oKHQsZSk9Pih0LnR5cGU9PT0ibWF0aG9yZCJ8fHQudHlwZT09PSJhdG9tIikmJnQudGV4dD09PWUsImlzTGFiZWxFbmQiKTtvKEkzZSwiY2RBcnJvdyIpO28oTzNlLCJwYXJzZUNEIik7TnQoe3R5cGU6ImNkbGFiZWwiLG5hbWVzOlsiXFxcXGNkbGVmdCIsIlxcXFxjZHJpZ2h0Il0scHJvcHM6e251bUFyZ3M6MX0saGFuZGxlcih0LGUpe3ZhcntwYXJzZXI6cixmdW5jTmFtZTpufT10O3JldHVybnt0eXBlOiJjZGxhYmVsIixtb2RlOnIubW9kZSxzaWRlOm4uc2xpY2UoNCksbGFiZWw6ZVswXX19LGh0bWxCdWlsZGVyKHQsZSl7dmFyIHI9ZS5oYXZpbmdTdHlsZShlLnN0eWxlLnN1cCgpKSxuPUZlLndyYXBGcmFnbWVudCgkcih0LmxhYmVsLHIsZSksZSk7cmV0dXJuIG4uY2xhc3Nlcy5wdXNoKCJjZC1sYWJlbC0iK3Quc2lkZSksbi5zdHlsZS5ib3R0b209RXQoLjgtbi5kZXB0aCksbi5oZWlnaHQ9MCxuLmRlcHRoPTAsbn0sbWF0aG1sQnVpbGRlcih0LGUpe3ZhciByPW5ldyBkdC5NYXRoTm9kZSgibXJvdyIsW3ZuKHQubGFiZWwsZSldKTtyZXR1cm4gcj1uZXcgZHQuTWF0aE5vZGUoIm1wYWRkZWQiLFtyXSksci5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiMCIpLHQuc2lkZT09PSJsZWZ0IiYmci5zZXRBdHRyaWJ1dGUoImxzcGFjZSIsIi0xd2lkdGgiKSxyLnNldEF0dHJpYnV0ZSgidm9mZnNldCIsIjAuN2VtIikscj1uZXcgZHQuTWF0aE5vZGUoIm1zdHlsZSIsW3JdKSxyLnNldEF0dHJpYnV0ZSgiZGlzcGxheXN0eWxlIiwiZmFsc2UiKSxyLnNldEF0dHJpYnV0ZSgic2NyaXB0bGV2ZWwiLCIxIikscn19KTtOdCh7dHlwZToiY2RsYWJlbHBhcmVudCIsbmFtZXM6WyJcXFxcY2RwYXJlbnQiXSxwcm9wczp7bnVtQXJnczoxfSxoYW5kbGVyKHQsZSl7dmFye3BhcnNlcjpyfT10O3JldHVybnt0eXBlOiJjZGxhYmVscGFyZW50Iixtb2RlOnIubW9kZSxmcmFnbWVudDplWzBdfX0saHRtbEJ1aWxkZXIodCxlKXt2YXIgcj1GZS53cmFwRnJhZ21lbnQoJHIodC5mcmFnbWVudCxlKSxlKTtyZXR1cm4gci5jbGFzc2VzLnB1c2goImNkLXZlcnQtYXJyb3ciKSxyfSxtYXRobWxCdWlsZGVyKHQsZSl7cmV0dXJuIG5ldyBkdC5NYXRoTm9kZSgibXJvdyIsW3ZuKHQuZnJhZ21lbnQsZSldKX19KTtOdCh7dHlwZToidGV4dG9yZCIsbmFtZXM6WyJcXEBjaGFyIl0scHJvcHM6e251bUFyZ3M6MSxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyKHQsZSl7Zm9yKHZhcntwYXJzZXI6cn09dCxuPXhyKGVbMF0sIm9yZGdyb3VwIiksaT1uLmJvZHksYT0iIixzPTA7czxpLmxlbmd0aDtzKyspe3ZhciBsPXhyKGlbc10sInRleHRvcmQiKTthKz1sLnRleHR9dmFyIHU9cGFyc2VJbnQoYSksaDtpZihpc05hTih1KSl0aHJvdyBuZXcgcHQoIlxcQGNoYXIgaGFzIG5vbi1udW1lcmljIGFyZ3VtZW50ICIrYSk7aWYodTwwfHx1Pj0xMTE0MTExKXRocm93IG5ldyBwdCgiXFxAY2hhciB3aXRoIGludmFsaWQgY29kZSBwb2ludCAiK2EpO3JldHVybiB1PD02NTUzNT9oPVN0cmluZy5mcm9tQ2hhckNvZGUodSk6KHUtPTY1NTM2LGg9U3RyaW5nLmZyb21DaGFyQ29kZSgodT4+MTApKzU1Mjk2LCh1JjEwMjMpKzU2MzIwKSkse3R5cGU6InRleHRvcmQiLG1vZGU6ci5tb2RlLHRleHQ6aH19fSk7cUc9bygodCxlKT0+e3ZhciByPSRpKHQuYm9keSxlLndpdGhDb2xvcih0LmNvbG9yKSwhMSk7cmV0dXJuIEZlLm1ha2VGcmFnbWVudChyKX0sImh0bWxCdWlsZGVyJDgiKSxZRz1vKCh0LGUpPT57dmFyIHI9X3ModC5ib2R5LGUud2l0aENvbG9yKHQuY29sb3IpKSxuPW5ldyBkdC5NYXRoTm9kZSgibXN0eWxlIixyKTtyZXR1cm4gbi5zZXRBdHRyaWJ1dGUoIm1hdGhjb2xvciIsdC5jb2xvciksbn0sIm1hdGhtbEJ1aWxkZXIkNyIpO050KHt0eXBlOiJjb2xvciIsbmFtZXM6WyJcXHRleHRjb2xvciJdLHByb3BzOntudW1BcmdzOjIsYWxsb3dlZEluVGV4dDohMCxhcmdUeXBlczpbImNvbG9yIiwib3JpZ2luYWwiXX0saGFuZGxlcih0LGUpe3ZhcntwYXJzZXI6cn09dCxuPXhyKGVbMF0sImNvbG9yLXRva2VuIikuY29sb3IsaT1lWzFdO3JldHVybnt0eXBlOiJjb2xvciIsbW9kZTpyLm1vZGUsY29sb3I6bixib2R5OmdpKGkpfX0saHRtbEJ1aWxkZXI6cUcsbWF0aG1sQnVpbGRlcjpZR30pO050KHt0eXBlOiJjb2xvciIsbmFtZXM6WyJcXGNvbG9yIl0scHJvcHM6e251bUFyZ3M6MSxhbGxvd2VkSW5UZXh0OiEwLGFyZ1R5cGVzOlsiY29sb3IiXX0saGFuZGxlcih0LGUpe3ZhcntwYXJzZXI6cixicmVha09uVG9rZW5UZXh0Om59PXQsaT14cihlWzBdLCJjb2xvci10b2tlbiIpLmNvbG9yO3IuZ3VsbGV0Lm1hY3Jvcy5zZXQoIlxcY3VycmVudEBjb2xvciIsaSk7dmFyIGE9ci5wYXJzZUV4cHJlc3Npb24oITAsbik7cmV0dXJue3R5cGU6ImNvbG9yIixtb2RlOnIubW9kZSxjb2xvcjppLGJvZHk6YX19LGh0bWxCdWlsZGVyOnFHLG1hdGhtbEJ1aWxkZXI6WUd9KTtOdCh7dHlwZToiY3IiLG5hbWVzOlsiXFxcXCJdLHByb3BzOntudW1BcmdzOjAsbnVtT3B0aW9uYWxBcmdzOjAsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcih0LGUscil7dmFye3BhcnNlcjpufT10LGk9bi5ndWxsZXQuZnV0dXJlKCkudGV4dD09PSJbIj9uLnBhcnNlU2l6ZUdyb3VwKCEwKTpudWxsLGE9IW4uc2V0dGluZ3MuZGlzcGxheU1vZGV8fCFuLnNldHRpbmdzLnVzZVN0cmljdEJlaGF2aW9yKCJuZXdMaW5lSW5EaXNwbGF5TW9kZSIsIkluIExhVGVYLCBcXFxcIG9yIFxcbmV3bGluZSBkb2VzIG5vdGhpbmcgaW4gZGlzcGxheSBtb2RlIik7cmV0dXJue3R5cGU6ImNyIixtb2RlOm4ubW9kZSxuZXdMaW5lOmEsc2l6ZTppJiZ4cihpLCJzaXplIikudmFsdWV9fSxodG1sQnVpbGRlcih0LGUpe3ZhciByPUZlLm1ha2VTcGFuKFsibXNwYWNlIl0sW10sZSk7cmV0dXJuIHQubmV3TGluZSYmKHIuY2xhc3Nlcy5wdXNoKCJuZXdsaW5lIiksdC5zaXplJiYoci5zdHlsZS5tYXJnaW5Ub3A9RXQobmkodC5zaXplLGUpKSkpLHJ9LG1hdGhtbEJ1aWxkZXIodCxlKXt2YXIgcj1uZXcgZHQuTWF0aE5vZGUoIm1zcGFjZSIpO3JldHVybiB0Lm5ld0xpbmUmJihyLnNldEF0dHJpYnV0ZSgibGluZWJyZWFrIiwibmV3bGluZSIpLHQuc2l6ZSYmci5zZXRBdHRyaWJ1dGUoImhlaWdodCIsRXQobmkodC5zaXplLGUpKSkpLHJ9fSk7UTc9eyJcXGdsb2JhbCI6IlxcZ2xvYmFsIiwiXFxsb25nIjoiXFxcXGdsb2JhbGxvbmciLCJcXFxcZ2xvYmFsbG9uZyI6IlxcXFxnbG9iYWxsb25nIiwiXFxkZWYiOiJcXGdkZWYiLCJcXGdkZWYiOiJcXGdkZWYiLCJcXGVkZWYiOiJcXHhkZWYiLCJcXHhkZWYiOiJcXHhkZWYiLCJcXGxldCI6IlxcXFxnbG9iYWxsZXQiLCJcXGZ1dHVyZWxldCI6IlxcXFxnbG9iYWxmdXR1cmUifSxYRz1vKHQ9Pnt2YXIgZT10LnRleHQ7aWYoL14oPzpbXFx7fSQmI15fXXxFT0YpJC8udGVzdChlKSl0aHJvdyBuZXcgcHQoIkV4cGVjdGVkIGEgY29udHJvbCBzZXF1ZW5jZSIsdCk7cmV0dXJuIGV9LCJjaGVja0NvbnRyb2xTZXF1ZW5jZSIpLFAzZT1vKHQ9Pnt2YXIgZT10Lmd1bGxldC5wb3BUb2tlbigpO3JldHVybiBlLnRleHQ9PT0iPSImJihlPXQuZ3VsbGV0LnBvcFRva2VuKCksZS50ZXh0PT09IiAiJiYoZT10Lmd1bGxldC5wb3BUb2tlbigpKSksZX0sImdldFJIUyIpLGpHPW8oKHQsZSxyLG4pPT57dmFyIGk9dC5ndWxsZXQubWFjcm9zLmdldChyLnRleHQpO2k9PW51bGwmJihyLm5vZXhwYW5kPSEwLGk9e3Rva2Vuczpbcl0sbnVtQXJnczowLHVuZXhwYW5kYWJsZTohdC5ndWxsZXQuaXNFeHBhbmRhYmxlKHIudGV4dCl9KSx0Lmd1bGxldC5tYWNyb3Muc2V0KGUsaSxuKX0sImxldENvbW1hbmQiKTtOdCh7dHlwZToiaW50ZXJuYWwiLG5hbWVzOlsiXFxnbG9iYWwiLCJcXGxvbmciLCJcXFxcZ2xvYmFsbG9uZyJdLHByb3BzOntudW1BcmdzOjAsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcih0KXt2YXJ7cGFyc2VyOmUsZnVuY05hbWU6cn09dDtlLmNvbnN1bWVTcGFjZXMoKTt2YXIgbj1lLmZldGNoKCk7aWYoUTdbbi50ZXh0XSlyZXR1cm4ocj09PSJcXGdsb2JhbCJ8fHI9PT0iXFxcXGdsb2JhbGxvbmciKSYmKG4udGV4dD1RN1tuLnRleHRdKSx4cihlLnBhcnNlRnVuY3Rpb24oKSwiaW50ZXJuYWwiKTt0aHJvdyBuZXcgcHQoIkludmFsaWQgdG9rZW4gYWZ0ZXIgbWFjcm8gcHJlZml4IixuKX19KTtOdCh7dHlwZToiaW50ZXJuYWwiLG5hbWVzOlsiXFxkZWYiLCJcXGdkZWYiLCJcXGVkZWYiLCJcXHhkZWYiXSxwcm9wczp7bnVtQXJnczowLGFsbG93ZWRJblRleHQ6ITAscHJpbWl0aXZlOiEwfSxoYW5kbGVyKHQpe3ZhcntwYXJzZXI6ZSxmdW5jTmFtZTpyfT10LG49ZS5ndWxsZXQucG9wVG9rZW4oKSxpPW4udGV4dDtpZigvXig/OltcXHt9JCYjXl9dfEVPRikkLy50ZXN0KGkpKXRocm93IG5ldyBwdCgiRXhwZWN0ZWQgYSBjb250cm9sIHNlcXVlbmNlIixuKTtmb3IodmFyIGE9MCxzLGw9W1tdXTtlLmd1bGxldC5mdXR1cmUoKS50ZXh0IT09InsiOylpZihuPWUuZ3VsbGV0LnBvcFRva2VuKCksbi50ZXh0PT09IiMiKXtpZihlLmd1bGxldC5mdXR1cmUoKS50ZXh0PT09InsiKXtzPWUuZ3VsbGV0LmZ1dHVyZSgpLGxbYV0ucHVzaCgieyIpO2JyZWFrfWlmKG49ZS5ndWxsZXQucG9wVG9rZW4oKSwhL15bMS05XSQvLnRlc3Qobi50ZXh0KSl0aHJvdyBuZXcgcHQoJ0ludmFsaWQgYXJndW1lbnQgbnVtYmVyICInK24udGV4dCsnIicpO2lmKHBhcnNlSW50KG4udGV4dCkhPT1hKzEpdGhyb3cgbmV3IHB0KCdBcmd1bWVudCBudW1iZXIgIicrbi50ZXh0KyciIG91dCBvZiBvcmRlcicpO2ErKyxsLnB1c2goW10pfWVsc2V7aWYobi50ZXh0PT09IkVPRiIpdGhyb3cgbmV3IHB0KCJFeHBlY3RlZCBhIG1hY3JvIGRlZmluaXRpb24iKTtsW2FdLnB1c2gobi50ZXh0KX12YXJ7dG9rZW5zOnV9PWUuZ3VsbGV0LmNvbnN1bWVBcmcoKTtyZXR1cm4gcyYmdS51bnNoaWZ0KHMpLChyPT09IlxcZWRlZiJ8fHI9PT0iXFx4ZGVmIikmJih1PWUuZ3VsbGV0LmV4cGFuZFRva2Vucyh1KSx1LnJldmVyc2UoKSksZS5ndWxsZXQubWFjcm9zLnNldChpLHt0b2tlbnM6dSxudW1BcmdzOmEsZGVsaW1pdGVyczpsfSxyPT09UTdbcl0pLHt0eXBlOiJpbnRlcm5hbCIsbW9kZTplLm1vZGV9fX0pO050KHt0eXBlOiJpbnRlcm5hbCIsbmFtZXM6WyJcXGxldCIsIlxcXFxnbG9iYWxsZXQiXSxwcm9wczp7bnVtQXJnczowLGFsbG93ZWRJblRleHQ6ITAscHJpbWl0aXZlOiEwfSxoYW5kbGVyKHQpe3ZhcntwYXJzZXI6ZSxmdW5jTmFtZTpyfT10LG49WEcoZS5ndWxsZXQucG9wVG9rZW4oKSk7ZS5ndWxsZXQuY29uc3VtZVNwYWNlcygpO3ZhciBpPVAzZShlKTtyZXR1cm4gakcoZSxuLGkscj09PSJcXFxcZ2xvYmFsbGV0Iikse3R5cGU6ImludGVybmFsIixtb2RlOmUubW9kZX19fSk7TnQoe3R5cGU6ImludGVybmFsIixuYW1lczpbIlxcZnV0dXJlbGV0IiwiXFxcXGdsb2JhbGZ1dHVyZSJdLHByb3BzOntudW1BcmdzOjAsYWxsb3dlZEluVGV4dDohMCxwcmltaXRpdmU6ITB9LGhhbmRsZXIodCl7dmFye3BhcnNlcjplLGZ1bmNOYW1lOnJ9PXQsbj1YRyhlLmd1bGxldC5wb3BUb2tlbigpKSxpPWUuZ3VsbGV0LnBvcFRva2VuKCksYT1lLmd1bGxldC5wb3BUb2tlbigpO3JldHVybiBqRyhlLG4sYSxyPT09IlxcXFxnbG9iYWxmdXR1cmUiKSxlLmd1bGxldC5wdXNoVG9rZW4oYSksZS5ndWxsZXQucHVzaFRva2VuKGkpLHt0eXBlOiJpbnRlcm5hbCIsbW9kZTplLm1vZGV9fX0pO1l5PW8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPUFuLm1hdGhbZV0mJkFuLm1hdGhbZV0ucmVwbGFjZSxhPW5BKGl8fGUscixuKTtpZighYSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHN5bWJvbCAiK2UrIiBhbmQgZm9udCBzaXplICIrcisiLiIpO3JldHVybiBhfSwiZ2V0TWV0cmljcyIpLGNBPW8oZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9bi5oYXZpbmdCYXNlU3R5bGUocikscz1GZS5tYWtlU3BhbihpLmNvbmNhdChhLnNpemluZ0NsYXNzZXMobikpLFtlXSxuKSxsPWEuc2l6ZU11bHRpcGxpZXIvbi5zaXplTXVsdGlwbGllcjtyZXR1cm4gcy5oZWlnaHQqPWwscy5kZXB0aCo9bCxzLm1heEZvbnRTaXplPWEuc2l6ZU11bHRpcGxpZXIsc30sInN0eWxlV3JhcCIpLEtHPW8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXIuaGF2aW5nQmFzZVN0eWxlKG4pLGE9KDEtci5zaXplTXVsdGlwbGllci9pLnNpemVNdWx0aXBsaWVyKSpyLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodDtlLmNsYXNzZXMucHVzaCgiZGVsaW1jZW50ZXIiKSxlLnN0eWxlLnRvcD1FdChhKSxlLmhlaWdodC09YSxlLmRlcHRoKz1hfSwiY2VudGVyU3BhbiIpLEIzZT1vKGZ1bmN0aW9uKGUscixuLGksYSxzKXt2YXIgbD1GZS5tYWtlU3ltYm9sKGUsIk1haW4tUmVndWxhciIsYSxpKSx1PWNBKGwscixpLHMpO3JldHVybiBuJiZLRyh1LGksciksdX0sIm1ha2VTbWFsbERlbGltIiksRjNlPW8oZnVuY3Rpb24oZSxyLG4saSl7cmV0dXJuIEZlLm1ha2VTeW1ib2woZSwiU2l6ZSIrcisiLVJlZ3VsYXIiLG4saSl9LCJtYXRocm1TaXplIiksUUc9byhmdW5jdGlvbihlLHIsbixpLGEscyl7dmFyIGw9RjNlKGUscixhLGkpLHU9Y0EoRmUubWFrZVNwYW4oWyJkZWxpbXNpemluZyIsInNpemUiK3JdLFtsXSxpKSxuci5URVhULGkscyk7cmV0dXJuIG4mJktHKHUsaSxuci5URVhUKSx1fSwibWFrZUxhcmdlRGVsaW0iKSxPNz1vKGZ1bmN0aW9uKGUscixuKXt2YXIgaTtyPT09IlNpemUxLVJlZ3VsYXIiP2k9ImRlbGltLXNpemUxIjppPSJkZWxpbS1zaXplNCI7dmFyIGE9RmUubWFrZVNwYW4oWyJkZWxpbXNpemluZ2lubmVyIixpXSxbRmUubWFrZVNwYW4oW10sW0ZlLm1ha2VTeW1ib2woZSxyLG4pXSldKTtyZXR1cm57dHlwZToiZWxlbSIsZWxlbTphfX0sIm1ha2VHbHlwaFNwYW4iKSxQNz1vKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1KbFsiU2l6ZTQtUmVndWxhciJdW2UuY2hhckNvZGVBdCgwKV0/SmxbIlNpemU0LVJlZ3VsYXIiXVtlLmNoYXJDb2RlQXQoMCldWzRdOkpsWyJTaXplMS1SZWd1bGFyIl1bZS5jaGFyQ29kZUF0KDApXVs0XSxhPW5ldyBlYygiaW5uZXIiLHE0ZShlLE1hdGgucm91bmQoMWUzKnIpKSkscz1uZXcgZGwoW2FdLHt3aWR0aDpFdChpKSxoZWlnaHQ6RXQociksc3R5bGU6IndpZHRoOiIrRXQoaSksdmlld0JveDoiMCAwICIrMWUzKmkrIiAiK01hdGgucm91bmQoMWUzKnIpLHByZXNlcnZlQXNwZWN0UmF0aW86InhNaW5ZTWluIn0pLGw9RmUubWFrZVN2Z1NwYW4oW10sW3NdLG4pO3JldHVybiBsLmhlaWdodD1yLGwuc3R5bGUuaGVpZ2h0PUV0KHIpLGwuc3R5bGUud2lkdGg9RXQoaSkse3R5cGU6ImVsZW0iLGVsZW06bH19LCJtYWtlSW5uZXIiKSxaNz0uMDA4LHYzPXt0eXBlOiJrZXJuIixzaXplOi0xKlo3fSwkM2U9WyJ8IiwiXFxsdmVydCIsIlxccnZlcnQiLCJcXHZlcnQiXSx6M2U9WyJcXHwiLCJcXGxWZXJ0IiwiXFxyVmVydCIsIlxcVmVydCJdLFpHPW8oZnVuY3Rpb24oZSxyLG4saSxhLHMpe3ZhciBsLHUsaCxmLGQ9IiIscD0wO2w9aD1mPWUsdT1udWxsO3ZhciBtPSJTaXplMS1SZWd1bGFyIjtlPT09IlxcdXBhcnJvdyI/aD1mPSJcdTIzRDAiOmU9PT0iXFxVcGFycm93Ij9oPWY9Ilx1MjAxNiI6ZT09PSJcXGRvd25hcnJvdyI/bD1oPSJcdTIzRDAiOmU9PT0iXFxEb3duYXJyb3ciP2w9aD0iXHUyMDE2IjplPT09IlxcdXBkb3duYXJyb3ciPyhsPSJcXHVwYXJyb3ciLGg9Ilx1MjNEMCIsZj0iXFxkb3duYXJyb3ciKTplPT09IlxcVXBkb3duYXJyb3ciPyhsPSJcXFVwYXJyb3ciLGg9Ilx1MjAxNiIsZj0iXFxEb3duYXJyb3ciKTpKdC5jb250YWlucygkM2UsZSk/KGg9Ilx1MjIyMyIsZD0idmVydCIscD0zMzMpOkp0LmNvbnRhaW5zKHozZSxlKT8oaD0iXHUyMjI1IixkPSJkb3VibGV2ZXJ0IixwPTU1Nik6ZT09PSJbInx8ZT09PSJcXGxicmFjayI/KGw9Ilx1MjNBMSIsaD0iXHUyM0EyIixmPSJcdTIzQTMiLG09IlNpemU0LVJlZ3VsYXIiLGQ9ImxicmFjayIscD02NjcpOmU9PT0iXSJ8fGU9PT0iXFxyYnJhY2siPyhsPSJcdTIzQTQiLGg9Ilx1MjNBNSIsZj0iXHUyM0E2IixtPSJTaXplNC1SZWd1bGFyIixkPSJyYnJhY2siLHA9NjY3KTplPT09IlxcbGZsb29yInx8ZT09PSJcdTIzMEEiPyhoPWw9Ilx1MjNBMiIsZj0iXHUyM0EzIixtPSJTaXplNC1SZWd1bGFyIixkPSJsZmxvb3IiLHA9NjY3KTplPT09IlxcbGNlaWwifHxlPT09Ilx1MjMwOCI/KGw9Ilx1MjNBMSIsaD1mPSJcdTIzQTIiLG09IlNpemU0LVJlZ3VsYXIiLGQ9ImxjZWlsIixwPTY2Nyk6ZT09PSJcXHJmbG9vciJ8fGU9PT0iXHUyMzBCIj8oaD1sPSJcdTIzQTUiLGY9Ilx1MjNBNiIsbT0iU2l6ZTQtUmVndWxhciIsZD0icmZsb29yIixwPTY2Nyk6ZT09PSJcXHJjZWlsInx8ZT09PSJcdTIzMDkiPyhsPSJcdTIzQTQiLGg9Zj0iXHUyM0E1IixtPSJTaXplNC1SZWd1bGFyIixkPSJyY2VpbCIscD02NjcpOmU9PT0iKCJ8fGU9PT0iXFxscGFyZW4iPyhsPSJcdTIzOUIiLGg9Ilx1MjM5QyIsZj0iXHUyMzlEIixtPSJTaXplNC1SZWd1bGFyIixkPSJscGFyZW4iLHA9ODc1KTplPT09IikifHxlPT09IlxccnBhcmVuIj8obD0iXHUyMzlFIixoPSJcdTIzOUYiLGY9Ilx1MjNBMCIsbT0iU2l6ZTQtUmVndWxhciIsZD0icnBhcmVuIixwPTg3NSk6ZT09PSJcXHsifHxlPT09IlxcbGJyYWNlIj8obD0iXHUyM0E3Iix1PSJcdTIzQTgiLGY9Ilx1MjNBOSIsaD0iXHUyM0FBIixtPSJTaXplNC1SZWd1bGFyIik6ZT09PSJcXH0ifHxlPT09IlxccmJyYWNlIj8obD0iXHUyM0FCIix1PSJcdTIzQUMiLGY9Ilx1MjNBRCIsaD0iXHUyM0FBIixtPSJTaXplNC1SZWd1bGFyIik6ZT09PSJcXGxncm91cCJ8fGU9PT0iXHUyN0VFIj8obD0iXHUyM0E3IixmPSJcdTIzQTkiLGg9Ilx1MjNBQSIsbT0iU2l6ZTQtUmVndWxhciIpOmU9PT0iXFxyZ3JvdXAifHxlPT09Ilx1MjdFRiI/KGw9Ilx1MjNBQiIsZj0iXHUyM0FEIixoPSJcdTIzQUEiLG09IlNpemU0LVJlZ3VsYXIiKTplPT09IlxcbG1vdXN0YWNoZSJ8fGU9PT0iXHUyM0IwIj8obD0iXHUyM0E3IixmPSJcdTIzQUQiLGg9Ilx1MjNBQSIsbT0iU2l6ZTQtUmVndWxhciIpOihlPT09Ilxccm1vdXN0YWNoZSJ8fGU9PT0iXHUyM0IxIikmJihsPSJcdTIzQUIiLGY9Ilx1MjNBOSIsaD0iXHUyM0FBIixtPSJTaXplNC1SZWd1bGFyIik7dmFyIGc9WXkobCxtLGEpLHk9Zy5oZWlnaHQrZy5kZXB0aCx2PVl5KGgsbSxhKSx4PXYuaGVpZ2h0K3YuZGVwdGgsYj1ZeShmLG0sYSksVD1iLmhlaWdodCtiLmRlcHRoLFM9MCx3PTE7aWYodSE9PW51bGwpe3ZhciBFPVl5KHUsbSxhKTtTPUUuaGVpZ2h0K0UuZGVwdGgsdz0yfXZhciBfPXkrVCtTLEM9TWF0aC5tYXgoMCxNYXRoLmNlaWwoKHItXykvKHcqeCkpKSxEPV8rQyp3KngsTz1pLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodDtuJiYoTyo9aS5zaXplTXVsdGlwbGllcik7dmFyIFI9RC8yLU8saz1bXTtpZihkLmxlbmd0aD4wKXt2YXIgTD1ELXktVCxBPU1hdGgucm91bmQoRCoxZTMpLEk9WTRlKGQsTWF0aC5yb3VuZChMKjFlMykpLE09bmV3IGVjKGQsSSksUD0ocC8xZTMpLnRvRml4ZWQoMykrImVtIixCPShBLzFlMykudG9GaXhlZCgzKSsiZW0iLEY9bmV3IGRsKFtNXSx7d2lkdGg6UCxoZWlnaHQ6Qix2aWV3Qm94OiIwIDAgIitwKyIgIitBfSksej1GZS5tYWtlU3ZnU3BhbihbXSxbRl0saSk7ei5oZWlnaHQ9QS8xZTMsei5zdHlsZS53aWR0aD1QLHouc3R5bGUuaGVpZ2h0PUIsay5wdXNoKHt0eXBlOiJlbGVtIixlbGVtOnp9KX1lbHNle2lmKGsucHVzaChPNyhmLG0sYSkpLGsucHVzaCh2MyksdT09PW51bGwpe3ZhciAkPUQteS1UKzIqWjc7ay5wdXNoKFA3KGgsJCxpKSl9ZWxzZXt2YXIgVT0oRC15LVQtUykvMisyKlo3O2sucHVzaChQNyhoLFUsaSkpLGsucHVzaCh2Myksay5wdXNoKE83KHUsbSxhKSksay5wdXNoKHYzKSxrLnB1c2goUDcoaCxVLGkpKX1rLnB1c2godjMpLGsucHVzaChPNyhsLG0sYSkpfXZhciBLPWkuaGF2aW5nQmFzZVN0eWxlKG5yLlRFWFQpLGVlPUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJib3R0b20iLHBvc2l0aW9uRGF0YTpSLGNoaWxkcmVuOmt9LEspO3JldHVybiBjQShGZS5tYWtlU3BhbihbImRlbGltc2l6aW5nIiwibXVsdCJdLFtlZV0sSyksbnIuVEVYVCxpLHMpfSwibWFrZVN0YWNrZWREZWxpbSIpLEI3PTgwLEY3PS4wOCwkNz1vKGZ1bmN0aW9uKGUscixuLGksYSl7dmFyIHM9VzRlKGUsaSxuKSxsPW5ldyBlYyhlLHMpLHU9bmV3IGRsKFtsXSx7d2lkdGg6IjQwMGVtIixoZWlnaHQ6RXQociksdmlld0JveDoiMCAwIDQwMDAwMCAiK24scHJlc2VydmVBc3BlY3RSYXRpbzoieE1pbllNaW4gc2xpY2UifSk7cmV0dXJuIEZlLm1ha2VTdmdTcGFuKFsiaGlkZS10YWlsIl0sW3VdLGEpfSwic3FydFN2ZyIpLEczZT1vKGZ1bmN0aW9uKGUscil7dmFyIG49ci5oYXZpbmdCYXNlU2l6aW5nKCksaT1yVigiXFxzdXJkIixlKm4uc2l6ZU11bHRpcGxpZXIsdFYsbiksYT1uLnNpemVNdWx0aXBsaWVyLHM9TWF0aC5tYXgoMCxyLm1pblJ1bGVUaGlja25lc3Mtci5mb250TWV0cmljcygpLnNxcnRSdWxlVGhpY2tuZXNzKSxsLHU9MCxoPTAsZj0wLGQ7cmV0dXJuIGkudHlwZT09PSJzbWFsbCI/KGY9MWUzKzFlMypzK0I3LGU8MT9hPTE6ZTwxLjQmJihhPS43KSx1PSgxK3MrRjcpL2EsaD0oMStzKS9hLGw9JDcoInNxcnRNYWluIix1LGYscyxyKSxsLnN0eWxlLm1pbldpZHRoPSIwLjg1M2VtIixkPS44MzMvYSk6aS50eXBlPT09ImxhcmdlIj8oZj0oMWUzK0I3KSpqeVtpLnNpemVdLGg9KGp5W2kuc2l6ZV0rcykvYSx1PShqeVtpLnNpemVdK3MrRjcpL2EsbD0kNygic3FydFNpemUiK2kuc2l6ZSx1LGYscyxyKSxsLnN0eWxlLm1pbldpZHRoPSIxLjAyZW0iLGQ9MS9hKToodT1lK3MrRjcsaD1lK3MsZj1NYXRoLmZsb29yKDFlMyplK3MpK0I3LGw9JDcoInNxcnRUYWxsIix1LGYscyxyKSxsLnN0eWxlLm1pbldpZHRoPSIwLjc0MmVtIixkPTEuMDU2KSxsLmhlaWdodD1oLGwuc3R5bGUuaGVpZ2h0PUV0KHUpLHtzcGFuOmwsYWR2YW5jZVdpZHRoOmQscnVsZVdpZHRoOihyLmZvbnRNZXRyaWNzKCkuc3FydFJ1bGVUaGlja25lc3MrcykqYX19LCJtYWtlU3FydEltYWdlIiksSkc9WyIoIiwiXFxscGFyZW4iLCIpIiwiXFxycGFyZW4iLCJbIiwiXFxsYnJhY2siLCJdIiwiXFxyYnJhY2siLCJcXHsiLCJcXGxicmFjZSIsIlxcfSIsIlxccmJyYWNlIiwiXFxsZmxvb3IiLCJcXHJmbG9vciIsIlx1MjMwQSIsIlx1MjMwQiIsIlxcbGNlaWwiLCJcXHJjZWlsIiwiXHUyMzA4IiwiXHUyMzA5IiwiXFxzdXJkIl0sVjNlPVsiXFx1cGFycm93IiwiXFxkb3duYXJyb3ciLCJcXHVwZG93bmFycm93IiwiXFxVcGFycm93IiwiXFxEb3duYXJyb3ciLCJcXFVwZG93bmFycm93IiwifCIsIlxcfCIsIlxcdmVydCIsIlxcVmVydCIsIlxcbHZlcnQiLCJcXHJ2ZXJ0IiwiXFxsVmVydCIsIlxcclZlcnQiLCJcXGxncm91cCIsIlxccmdyb3VwIiwiXHUyN0VFIiwiXHUyN0VGIiwiXFxsbW91c3RhY2hlIiwiXFxybW91c3RhY2hlIiwiXHUyM0IwIiwiXHUyM0IxIl0sZVY9WyI8IiwiPiIsIlxcbGFuZ2xlIiwiXFxyYW5nbGUiLCIvIiwiXFxiYWNrc2xhc2giLCJcXGx0IiwiXFxndCJdLGp5PVswLDEuMiwxLjgsMi40LDNdLFUzZT1vKGZ1bmN0aW9uKGUscixuLGksYSl7aWYoZT09PSI8Inx8ZT09PSJcXGx0Inx8ZT09PSJcdTI3RTgiP2U9IlxcbGFuZ2xlIjooZT09PSI+Inx8ZT09PSJcXGd0Inx8ZT09PSJcdTI3RTkiKSYmKGU9IlxccmFuZ2xlIiksSnQuY29udGFpbnMoSkcsZSl8fEp0LmNvbnRhaW5zKGVWLGUpKXJldHVybiBRRyhlLHIsITEsbixpLGEpO2lmKEp0LmNvbnRhaW5zKFYzZSxlKSlyZXR1cm4gWkcoZSxqeVtyXSwhMSxuLGksYSk7dGhyb3cgbmV3IHB0KCJJbGxlZ2FsIGRlbGltaXRlcjogJyIrZSsiJyIpfSwibWFrZVNpemVkRGVsaW0iKSxIM2U9W3t0eXBlOiJzbWFsbCIsc3R5bGU6bnIuU0NSSVBUU0NSSVBUfSx7dHlwZToic21hbGwiLHN0eWxlOm5yLlNDUklQVH0se3R5cGU6InNtYWxsIixzdHlsZTpuci5URVhUfSx7dHlwZToibGFyZ2UiLHNpemU6MX0se3R5cGU6ImxhcmdlIixzaXplOjJ9LHt0eXBlOiJsYXJnZSIsc2l6ZTozfSx7dHlwZToibGFyZ2UiLHNpemU6NH1dLFczZT1be3R5cGU6InNtYWxsIixzdHlsZTpuci5TQ1JJUFRTQ1JJUFR9LHt0eXBlOiJzbWFsbCIsc3R5bGU6bnIuU0NSSVBUfSx7dHlwZToic21hbGwiLHN0eWxlOm5yLlRFWFR9LHt0eXBlOiJzdGFjayJ9XSx0Vj1be3R5cGU6InNtYWxsIixzdHlsZTpuci5TQ1JJUFRTQ1JJUFR9LHt0eXBlOiJzbWFsbCIsc3R5bGU6bnIuU0NSSVBUfSx7dHlwZToic21hbGwiLHN0eWxlOm5yLlRFWFR9LHt0eXBlOiJsYXJnZSIsc2l6ZToxfSx7dHlwZToibGFyZ2UiLHNpemU6Mn0se3R5cGU6ImxhcmdlIixzaXplOjN9LHt0eXBlOiJsYXJnZSIsc2l6ZTo0fSx7dHlwZToic3RhY2sifV0scTNlPW8oZnVuY3Rpb24oZSl7aWYoZS50eXBlPT09InNtYWxsIilyZXR1cm4iTWFpbi1SZWd1bGFyIjtpZihlLnR5cGU9PT0ibGFyZ2UiKXJldHVybiJTaXplIitlLnNpemUrIi1SZWd1bGFyIjtpZihlLnR5cGU9PT0ic3RhY2siKXJldHVybiJTaXplNC1SZWd1bGFyIjt0aHJvdyBuZXcgRXJyb3IoIkFkZCBzdXBwb3J0IGZvciBkZWxpbSB0eXBlICciK2UudHlwZSsiJyBoZXJlLiIpfSwiZGVsaW1UeXBlVG9Gb250IiksclY9byhmdW5jdGlvbihlLHIsbixpKXtmb3IodmFyIGE9TWF0aC5taW4oMiwzLWkuc3R5bGUuc2l6ZSkscz1hO3M8bi5sZW5ndGgmJm5bc10udHlwZSE9PSJzdGFjayI7cysrKXt2YXIgbD1ZeShlLHEzZShuW3NdKSwibWF0aCIpLHU9bC5oZWlnaHQrbC5kZXB0aDtpZihuW3NdLnR5cGU9PT0ic21hbGwiKXt2YXIgaD1pLmhhdmluZ0Jhc2VTdHlsZShuW3NdLnN0eWxlKTt1Kj1oLnNpemVNdWx0aXBsaWVyfWlmKHU+cilyZXR1cm4gbltzXX1yZXR1cm4gbltuLmxlbmd0aC0xXX0sInRyYXZlcnNlU2VxdWVuY2UiKSxuVj1vKGZ1bmN0aW9uKGUscixuLGksYSxzKXtlPT09IjwifHxlPT09IlxcbHQifHxlPT09Ilx1MjdFOCI/ZT0iXFxsYW5nbGUiOihlPT09Ij4ifHxlPT09IlxcZ3QifHxlPT09Ilx1MjdFOSIpJiYoZT0iXFxyYW5nbGUiKTt2YXIgbDtKdC5jb250YWlucyhlVixlKT9sPUgzZTpKdC5jb250YWlucyhKRyxlKT9sPXRWOmw9VzNlO3ZhciB1PXJWKGUscixsLGkpO3JldHVybiB1LnR5cGU9PT0ic21hbGwiP0IzZShlLHUuc3R5bGUsbixpLGEscyk6dS50eXBlPT09ImxhcmdlIj9RRyhlLHUuc2l6ZSxuLGksYSxzKTpaRyhlLHIsbixpLGEscyl9LCJtYWtlQ3VzdG9tU2l6ZWREZWxpbSIpLFkzZT1vKGZ1bmN0aW9uKGUscixuLGksYSxzKXt2YXIgbD1pLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodCppLnNpemVNdWx0aXBsaWVyLHU9OTAxLGg9NS9pLmZvbnRNZXRyaWNzKCkucHRQZXJFbSxmPU1hdGgubWF4KHItbCxuK2wpLGQ9TWF0aC5tYXgoZi81MDAqdSwyKmYtaCk7cmV0dXJuIG5WKGUsZCwhMCxpLGEscyl9LCJtYWtlTGVmdFJpZ2h0RGVsaW0iKSxodT17c3FydEltYWdlOkczZSxzaXplZERlbGltOlUzZSxzaXplVG9NYXhIZWlnaHQ6anksY3VzdG9tU2l6ZWREZWxpbTpuVixsZWZ0UmlnaHREZWxpbTpZM2V9LG9HPXsiXFxiaWdsIjp7bWNsYXNzOiJtb3BlbiIsc2l6ZToxfSwiXFxCaWdsIjp7bWNsYXNzOiJtb3BlbiIsc2l6ZToyfSwiXFxiaWdnbCI6e21jbGFzczoibW9wZW4iLHNpemU6M30sIlxcQmlnZ2wiOnttY2xhc3M6Im1vcGVuIixzaXplOjR9LCJcXGJpZ3IiOnttY2xhc3M6Im1jbG9zZSIsc2l6ZToxfSwiXFxCaWdyIjp7bWNsYXNzOiJtY2xvc2UiLHNpemU6Mn0sIlxcYmlnZ3IiOnttY2xhc3M6Im1jbG9zZSIsc2l6ZTozfSwiXFxCaWdnciI6e21jbGFzczoibWNsb3NlIixzaXplOjR9LCJcXGJpZ20iOnttY2xhc3M6Im1yZWwiLHNpemU6MX0sIlxcQmlnbSI6e21jbGFzczoibXJlbCIsc2l6ZToyfSwiXFxiaWdnbSI6e21jbGFzczoibXJlbCIsc2l6ZTozfSwiXFxCaWdnbSI6e21jbGFzczoibXJlbCIsc2l6ZTo0fSwiXFxiaWciOnttY2xhc3M6Im1vcmQiLHNpemU6MX0sIlxcQmlnIjp7bWNsYXNzOiJtb3JkIixzaXplOjJ9LCJcXGJpZ2ciOnttY2xhc3M6Im1vcmQiLHNpemU6M30sIlxcQmlnZyI6e21jbGFzczoibW9yZCIsc2l6ZTo0fX0sWDNlPVsiKCIsIlxcbHBhcmVuIiwiKSIsIlxccnBhcmVuIiwiWyIsIlxcbGJyYWNrIiwiXSIsIlxccmJyYWNrIiwiXFx7IiwiXFxsYnJhY2UiLCJcXH0iLCJcXHJicmFjZSIsIlxcbGZsb29yIiwiXFxyZmxvb3IiLCJcdTIzMEEiLCJcdTIzMEIiLCJcXGxjZWlsIiwiXFxyY2VpbCIsIlx1MjMwOCIsIlx1MjMwOSIsIjwiLCI+IiwiXFxsYW5nbGUiLCJcdTI3RTgiLCJcXHJhbmdsZSIsIlx1MjdFOSIsIlxcbHQiLCJcXGd0IiwiXFxsdmVydCIsIlxccnZlcnQiLCJcXGxWZXJ0IiwiXFxyVmVydCIsIlxcbGdyb3VwIiwiXFxyZ3JvdXAiLCJcdTI3RUUiLCJcdTI3RUYiLCJcXGxtb3VzdGFjaGUiLCJcXHJtb3VzdGFjaGUiLCJcdTIzQjAiLCJcdTIzQjEiLCIvIiwiXFxiYWNrc2xhc2giLCJ8IiwiXFx2ZXJ0IiwiXFx8IiwiXFxWZXJ0IiwiXFx1cGFycm93IiwiXFxVcGFycm93IiwiXFxkb3duYXJyb3ciLCJcXERvd25hcnJvdyIsIlxcdXBkb3duYXJyb3ciLCJcXFVwZG93bmFycm93IiwiLiJdO28oTTMsImNoZWNrRGVsaW1pdGVyIik7TnQoe3R5cGU6ImRlbGltc2l6aW5nIixuYW1lczpbIlxcYmlnbCIsIlxcQmlnbCIsIlxcYmlnZ2wiLCJcXEJpZ2dsIiwiXFxiaWdyIiwiXFxCaWdyIiwiXFxiaWdnciIsIlxcQmlnZ3IiLCJcXGJpZ20iLCJcXEJpZ20iLCJcXGJpZ2dtIiwiXFxCaWdnbSIsIlxcYmlnIiwiXFxCaWciLCJcXGJpZ2ciLCJcXEJpZ2ciXSxwcm9wczp7bnVtQXJnczoxLGFyZ1R5cGVzOlsicHJpbWl0aXZlIl19LGhhbmRsZXI6bygodCxlKT0+e3ZhciByPU0zKGVbMF0sdCk7cmV0dXJue3R5cGU6ImRlbGltc2l6aW5nIixtb2RlOnQucGFyc2VyLm1vZGUsc2l6ZTpvR1t0LmZ1bmNOYW1lXS5zaXplLG1jbGFzczpvR1t0LmZ1bmNOYW1lXS5tY2xhc3MsZGVsaW06ci50ZXh0fX0sImhhbmRsZXIiKSxodG1sQnVpbGRlcjpvKCh0LGUpPT50LmRlbGltPT09Ii4iP0ZlLm1ha2VTcGFuKFt0Lm1jbGFzc10pOmh1LnNpemVkRGVsaW0odC5kZWxpbSx0LnNpemUsZSx0Lm1vZGUsW3QubWNsYXNzXSksImh0bWxCdWlsZGVyIiksbWF0aG1sQnVpbGRlcjpvKHQ9Pnt2YXIgZT1bXTt0LmRlbGltIT09Ii4iJiZlLnB1c2goRG8odC5kZWxpbSx0Lm1vZGUpKTt2YXIgcj1uZXcgZHQuTWF0aE5vZGUoIm1vIixlKTt0Lm1jbGFzcz09PSJtb3BlbiJ8fHQubWNsYXNzPT09Im1jbG9zZSI/ci5zZXRBdHRyaWJ1dGUoImZlbmNlIiwidHJ1ZSIpOnIuc2V0QXR0cmlidXRlKCJmZW5jZSIsImZhbHNlIiksci5zZXRBdHRyaWJ1dGUoInN0cmV0Y2h5IiwidHJ1ZSIpO3ZhciBuPUV0KGh1LnNpemVUb01heEhlaWdodFt0LnNpemVdKTtyZXR1cm4gci5zZXRBdHRyaWJ1dGUoIm1pbnNpemUiLG4pLHIuc2V0QXR0cmlidXRlKCJtYXhzaXplIixuKSxyfSwibWF0aG1sQnVpbGRlciIpfSk7byhsRywiYXNzZXJ0UGFyc2VkIik7TnQoe3R5cGU6ImxlZnRyaWdodC1yaWdodCIsbmFtZXM6WyJcXHJpZ2h0Il0scHJvcHM6e251bUFyZ3M6MSxwcmltaXRpdmU6ITB9LGhhbmRsZXI6bygodCxlKT0+e3ZhciByPXQucGFyc2VyLmd1bGxldC5tYWNyb3MuZ2V0KCJcXGN1cnJlbnRAY29sb3IiKTtpZihyJiZ0eXBlb2YgciE9InN0cmluZyIpdGhyb3cgbmV3IHB0KCJcXGN1cnJlbnRAY29sb3Igc2V0IHRvIG5vbi1zdHJpbmcgaW4gXFxyaWdodCIpO3JldHVybnt0eXBlOiJsZWZ0cmlnaHQtcmlnaHQiLG1vZGU6dC5wYXJzZXIubW9kZSxkZWxpbTpNMyhlWzBdLHQpLnRleHQsY29sb3I6cn19LCJoYW5kbGVyIil9KTtOdCh7dHlwZToibGVmdHJpZ2h0IixuYW1lczpbIlxcbGVmdCJdLHByb3BzOntudW1BcmdzOjEscHJpbWl0aXZlOiEwfSxoYW5kbGVyOm8oKHQsZSk9Pnt2YXIgcj1NMyhlWzBdLHQpLG49dC5wYXJzZXI7KytuLmxlZnRyaWdodERlcHRoO3ZhciBpPW4ucGFyc2VFeHByZXNzaW9uKCExKTstLW4ubGVmdHJpZ2h0RGVwdGgsbi5leHBlY3QoIlxccmlnaHQiLCExKTt2YXIgYT14cihuLnBhcnNlRnVuY3Rpb24oKSwibGVmdHJpZ2h0LXJpZ2h0Iik7cmV0dXJue3R5cGU6ImxlZnRyaWdodCIsbW9kZTpuLm1vZGUsYm9keTppLGxlZnQ6ci50ZXh0LHJpZ2h0OmEuZGVsaW0scmlnaHRDb2xvcjphLmNvbG9yfX0sImhhbmRsZXIiKSxodG1sQnVpbGRlcjpvKCh0LGUpPT57bEcodCk7Zm9yKHZhciByPSRpKHQuYm9keSxlLCEwLFsibW9wZW4iLCJtY2xvc2UiXSksbj0wLGk9MCxhPSExLHM9MDtzPHIubGVuZ3RoO3MrKylyW3NdLmlzTWlkZGxlP2E9ITA6KG49TWF0aC5tYXgocltzXS5oZWlnaHQsbiksaT1NYXRoLm1heChyW3NdLmRlcHRoLGkpKTtuKj1lLnNpemVNdWx0aXBsaWVyLGkqPWUuc2l6ZU11bHRpcGxpZXI7dmFyIGw7aWYodC5sZWZ0PT09Ii4iP2w9ZXYoZSxbIm1vcGVuIl0pOmw9aHUubGVmdFJpZ2h0RGVsaW0odC5sZWZ0LG4saSxlLHQubW9kZSxbIm1vcGVuIl0pLHIudW5zaGlmdChsKSxhKWZvcih2YXIgdT0xO3U8ci5sZW5ndGg7dSsrKXt2YXIgaD1yW3VdLGY9aC5pc01pZGRsZTtmJiYoclt1XT1odS5sZWZ0UmlnaHREZWxpbShmLmRlbGltLG4saSxmLm9wdGlvbnMsdC5tb2RlLFtdKSl9dmFyIGQ7aWYodC5yaWdodD09PSIuIilkPWV2KGUsWyJtY2xvc2UiXSk7ZWxzZXt2YXIgcD10LnJpZ2h0Q29sb3I/ZS53aXRoQ29sb3IodC5yaWdodENvbG9yKTplO2Q9aHUubGVmdFJpZ2h0RGVsaW0odC5yaWdodCxuLGkscCx0Lm1vZGUsWyJtY2xvc2UiXSl9cmV0dXJuIHIucHVzaChkKSxGZS5tYWtlU3BhbihbIm1pbm5lciJdLHIsZSl9LCJodG1sQnVpbGRlciIpLG1hdGhtbEJ1aWxkZXI6bygodCxlKT0+e2xHKHQpO3ZhciByPV9zKHQuYm9keSxlKTtpZih0LmxlZnQhPT0iLiIpe3ZhciBuPW5ldyBkdC5NYXRoTm9kZSgibW8iLFtEbyh0LmxlZnQsdC5tb2RlKV0pO24uc2V0QXR0cmlidXRlKCJmZW5jZSIsInRydWUiKSxyLnVuc2hpZnQobil9aWYodC5yaWdodCE9PSIuIil7dmFyIGk9bmV3IGR0Lk1hdGhOb2RlKCJtbyIsW0RvKHQucmlnaHQsdC5tb2RlKV0pO2kuc2V0QXR0cmlidXRlKCJmZW5jZSIsInRydWUiKSx0LnJpZ2h0Q29sb3ImJmkuc2V0QXR0cmlidXRlKCJtYXRoY29sb3IiLHQucmlnaHRDb2xvciksci5wdXNoKGkpfXJldHVybiBhQShyKX0sIm1hdGhtbEJ1aWxkZXIiKX0pO050KHt0eXBlOiJtaWRkbGUiLG5hbWVzOlsiXFxtaWRkbGUiXSxwcm9wczp7bnVtQXJnczoxLHByaW1pdGl2ZTohMH0saGFuZGxlcjpvKCh0LGUpPT57dmFyIHI9TTMoZVswXSx0KTtpZighdC5wYXJzZXIubGVmdHJpZ2h0RGVwdGgpdGhyb3cgbmV3IHB0KCJcXG1pZGRsZSB3aXRob3V0IHByZWNlZGluZyBcXGxlZnQiLHIpO3JldHVybnt0eXBlOiJtaWRkbGUiLG1vZGU6dC5wYXJzZXIubW9kZSxkZWxpbTpyLnRleHR9fSwiaGFuZGxlciIpLGh0bWxCdWlsZGVyOm8oKHQsZSk9Pnt2YXIgcjtpZih0LmRlbGltPT09Ii4iKXI9ZXYoZSxbXSk7ZWxzZXtyPWh1LnNpemVkRGVsaW0odC5kZWxpbSwxLGUsdC5tb2RlLFtdKTt2YXIgbj17ZGVsaW06dC5kZWxpbSxvcHRpb25zOmV9O3IuaXNNaWRkbGU9bn1yZXR1cm4gcn0sImh0bWxCdWlsZGVyIiksbWF0aG1sQnVpbGRlcjpvKCh0LGUpPT57dmFyIHI9dC5kZWxpbT09PSJcXHZlcnQifHx0LmRlbGltPT09InwiP0RvKCJ8IiwidGV4dCIpOkRvKHQuZGVsaW0sdC5tb2RlKSxuPW5ldyBkdC5NYXRoTm9kZSgibW8iLFtyXSk7cmV0dXJuIG4uc2V0QXR0cmlidXRlKCJmZW5jZSIsInRydWUiKSxuLnNldEF0dHJpYnV0ZSgibHNwYWNlIiwiMC4wNWVtIiksbi5zZXRBdHRyaWJ1dGUoInJzcGFjZSIsIjAuMDVlbSIpLG59LCJtYXRobWxCdWlsZGVyIil9KTt1QT1vKCh0LGUpPT57dmFyIHI9RmUud3JhcEZyYWdtZW50KCRyKHQuYm9keSxlKSxlKSxuPXQubGFiZWwuc2xpY2UoMSksaT1lLnNpemVNdWx0aXBsaWVyLGEscz0wLGw9SnQuaXNDaGFyYWN0ZXJCb3godC5ib2R5KTtpZihuPT09InNvdXQiKWE9RmUubWFrZVNwYW4oWyJzdHJldGNoeSIsInNvdXQiXSksYS5oZWlnaHQ9ZS5mb250TWV0cmljcygpLmRlZmF1bHRSdWxlVGhpY2tuZXNzL2kscz0tLjUqZS5mb250TWV0cmljcygpLnhIZWlnaHQ7ZWxzZSBpZihuPT09InBoYXNlIil7dmFyIHU9bmkoe251bWJlcjouNix1bml0OiJwdCJ9LGUpLGg9bmkoe251bWJlcjouMzUsdW5pdDoiZXgifSxlKSxmPWUuaGF2aW5nQmFzZVNpemluZygpO2k9aS9mLnNpemVNdWx0aXBsaWVyO3ZhciBkPXIuaGVpZ2h0K3IuZGVwdGgrdStoO3Iuc3R5bGUucGFkZGluZ0xlZnQ9RXQoZC8yK3UpO3ZhciBwPU1hdGguZmxvb3IoMWUzKmQqaSksbT1VNGUocCksZz1uZXcgZGwoW25ldyBlYygicGhhc2UiLG0pXSx7d2lkdGg6IjQwMGVtIixoZWlnaHQ6RXQocC8xZTMpLHZpZXdCb3g6IjAgMCA0MDAwMDAgIitwLHByZXNlcnZlQXNwZWN0UmF0aW86InhNaW5ZTWluIHNsaWNlIn0pO2E9RmUubWFrZVN2Z1NwYW4oWyJoaWRlLXRhaWwiXSxbZ10sZSksYS5zdHlsZS5oZWlnaHQ9RXQoZCkscz1yLmRlcHRoK3UraH1lbHNley9jYW5jZWwvLnRlc3Qobik/bHx8ci5jbGFzc2VzLnB1c2goImNhbmNlbC1wYWQiKTpuPT09ImFuZ2wiP3IuY2xhc3Nlcy5wdXNoKCJhbmdscGFkIik6ci5jbGFzc2VzLnB1c2goImJveHBhZCIpO3ZhciB5PTAsdj0wLHg9MDsvYm94Ly50ZXN0KG4pPyh4PU1hdGgubWF4KGUuZm9udE1ldHJpY3MoKS5mYm94cnVsZSxlLm1pblJ1bGVUaGlja25lc3MpLHk9ZS5mb250TWV0cmljcygpLmZib3hzZXArKG49PT0iY29sb3Jib3giPzA6eCksdj15KTpuPT09ImFuZ2wiPyh4PU1hdGgubWF4KGUuZm9udE1ldHJpY3MoKS5kZWZhdWx0UnVsZVRoaWNrbmVzcyxlLm1pblJ1bGVUaGlja25lc3MpLHk9NCp4LHY9TWF0aC5tYXgoMCwuMjUtci5kZXB0aCkpOih5PWw/LjI6MCx2PXkpLGE9ZHUuZW5jbG9zZVNwYW4ocixuLHksdixlKSwvZmJveHxib3hlZHxmY29sb3Jib3gvLnRlc3Qobik/KGEuc3R5bGUuYm9yZGVyU3R5bGU9InNvbGlkIixhLnN0eWxlLmJvcmRlcldpZHRoPUV0KHgpKTpuPT09ImFuZ2wiJiZ4IT09LjA0OSYmKGEuc3R5bGUuYm9yZGVyVG9wV2lkdGg9RXQoeCksYS5zdHlsZS5ib3JkZXJSaWdodFdpZHRoPUV0KHgpKSxzPXIuZGVwdGgrdix0LmJhY2tncm91bmRDb2xvciYmKGEuc3R5bGUuYmFja2dyb3VuZENvbG9yPXQuYmFja2dyb3VuZENvbG9yLHQuYm9yZGVyQ29sb3ImJihhLnN0eWxlLmJvcmRlckNvbG9yPXQuYm9yZGVyQ29sb3IpKX12YXIgYjtpZih0LmJhY2tncm91bmRDb2xvciliPUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJpbmRpdmlkdWFsU2hpZnQiLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTphLHNoaWZ0OnN9LHt0eXBlOiJlbGVtIixlbGVtOnIsc2hpZnQ6MH1dfSxlKTtlbHNle3ZhciBUPS9jYW5jZWx8cGhhc2UvLnRlc3Qobik/WyJzdmctYWxpZ24iXTpbXTtiPUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJpbmRpdmlkdWFsU2hpZnQiLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTpyLHNoaWZ0OjB9LHt0eXBlOiJlbGVtIixlbGVtOmEsc2hpZnQ6cyx3cmFwcGVyQ2xhc3NlczpUfV19LGUpfXJldHVybi9jYW5jZWwvLnRlc3QobikmJihiLmhlaWdodD1yLmhlaWdodCxiLmRlcHRoPXIuZGVwdGgpLC9jYW5jZWwvLnRlc3QobikmJiFsP0ZlLm1ha2VTcGFuKFsibW9yZCIsImNhbmNlbC1sYXAiXSxbYl0sZSk6RmUubWFrZVNwYW4oWyJtb3JkIl0sW2JdLGUpfSwiaHRtbEJ1aWxkZXIkNyIpLGhBPW8oKHQsZSk9Pnt2YXIgcj0wLG49bmV3IGR0Lk1hdGhOb2RlKHQubGFiZWwuaW5kZXhPZigiY29sb3Jib3giKT4tMT8ibXBhZGRlZCI6Im1lbmNsb3NlIixbdm4odC5ib2R5LGUpXSk7c3dpdGNoKHQubGFiZWwpe2Nhc2UiXFxjYW5jZWwiOm4uc2V0QXR0cmlidXRlKCJub3RhdGlvbiIsInVwZGlhZ29uYWxzdHJpa2UiKTticmVhaztjYXNlIlxcYmNhbmNlbCI6bi5zZXRBdHRyaWJ1dGUoIm5vdGF0aW9uIiwiZG93bmRpYWdvbmFsc3RyaWtlIik7YnJlYWs7Y2FzZSJcXHBoYXNlIjpuLnNldEF0dHJpYnV0ZSgibm90YXRpb24iLCJwaGFzb3JhbmdsZSIpO2JyZWFrO2Nhc2UiXFxzb3V0IjpuLnNldEF0dHJpYnV0ZSgibm90YXRpb24iLCJob3Jpem9udGFsc3RyaWtlIik7YnJlYWs7Y2FzZSJcXGZib3giOm4uc2V0QXR0cmlidXRlKCJub3RhdGlvbiIsImJveCIpO2JyZWFrO2Nhc2UiXFxhbmdsIjpuLnNldEF0dHJpYnV0ZSgibm90YXRpb24iLCJhY3R1YXJpYWwiKTticmVhaztjYXNlIlxcZmNvbG9yYm94IjpjYXNlIlxcY29sb3Jib3giOmlmKHI9ZS5mb250TWV0cmljcygpLmZib3hzZXAqZS5mb250TWV0cmljcygpLnB0UGVyRW0sbi5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiKyIrMipyKyJwdCIpLG4uc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIrIisyKnIrInB0Iiksbi5zZXRBdHRyaWJ1dGUoImxzcGFjZSIscisicHQiKSxuLnNldEF0dHJpYnV0ZSgidm9mZnNldCIscisicHQiKSx0LmxhYmVsPT09IlxcZmNvbG9yYm94Iil7dmFyIGk9TWF0aC5tYXgoZS5mb250TWV0cmljcygpLmZib3hydWxlLGUubWluUnVsZVRoaWNrbmVzcyk7bi5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiYm9yZGVyOiAiK2krImVtIHNvbGlkICIrU3RyaW5nKHQuYm9yZGVyQ29sb3IpKX1icmVhaztjYXNlIlxceGNhbmNlbCI6bi5zZXRBdHRyaWJ1dGUoIm5vdGF0aW9uIiwidXBkaWFnb25hbHN0cmlrZSBkb3duZGlhZ29uYWxzdHJpa2UiKTticmVha31yZXR1cm4gdC5iYWNrZ3JvdW5kQ29sb3ImJm4uc2V0QXR0cmlidXRlKCJtYXRoYmFja2dyb3VuZCIsdC5iYWNrZ3JvdW5kQ29sb3IpLG59LCJtYXRobWxCdWlsZGVyJDYiKTtOdCh7dHlwZToiZW5jbG9zZSIsbmFtZXM6WyJcXGNvbG9yYm94Il0scHJvcHM6e251bUFyZ3M6MixhbGxvd2VkSW5UZXh0OiEwLGFyZ1R5cGVzOlsiY29sb3IiLCJ0ZXh0Il19LGhhbmRsZXIodCxlLHIpe3ZhcntwYXJzZXI6bixmdW5jTmFtZTppfT10LGE9eHIoZVswXSwiY29sb3ItdG9rZW4iKS5jb2xvcixzPWVbMV07cmV0dXJue3R5cGU6ImVuY2xvc2UiLG1vZGU6bi5tb2RlLGxhYmVsOmksYmFja2dyb3VuZENvbG9yOmEsYm9keTpzfX0saHRtbEJ1aWxkZXI6dUEsbWF0aG1sQnVpbGRlcjpoQX0pO050KHt0eXBlOiJlbmNsb3NlIixuYW1lczpbIlxcZmNvbG9yYm94Il0scHJvcHM6e251bUFyZ3M6MyxhbGxvd2VkSW5UZXh0OiEwLGFyZ1R5cGVzOlsiY29sb3IiLCJjb2xvciIsInRleHQiXX0saGFuZGxlcih0LGUscil7dmFye3BhcnNlcjpuLGZ1bmNOYW1lOml9PXQsYT14cihlWzBdLCJjb2xvci10b2tlbiIpLmNvbG9yLHM9eHIoZVsxXSwiY29sb3ItdG9rZW4iKS5jb2xvcixsPWVbMl07cmV0dXJue3R5cGU6ImVuY2xvc2UiLG1vZGU6bi5tb2RlLGxhYmVsOmksYmFja2dyb3VuZENvbG9yOnMsYm9yZGVyQ29sb3I6YSxib2R5Omx9fSxodG1sQnVpbGRlcjp1QSxtYXRobWxCdWlsZGVyOmhBfSk7TnQoe3R5cGU6ImVuY2xvc2UiLG5hbWVzOlsiXFxmYm94Il0scHJvcHM6e251bUFyZ3M6MSxhcmdUeXBlczpbImhib3giXSxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyKHQsZSl7dmFye3BhcnNlcjpyfT10O3JldHVybnt0eXBlOiJlbmNsb3NlIixtb2RlOnIubW9kZSxsYWJlbDoiXFxmYm94Iixib2R5OmVbMF19fX0pO050KHt0eXBlOiJlbmNsb3NlIixuYW1lczpbIlxcY2FuY2VsIiwiXFxiY2FuY2VsIiwiXFx4Y2FuY2VsIiwiXFxzb3V0IiwiXFxwaGFzZSJdLHByb3BzOntudW1BcmdzOjF9LGhhbmRsZXIodCxlKXt2YXJ7cGFyc2VyOnIsZnVuY05hbWU6bn09dCxpPWVbMF07cmV0dXJue3R5cGU6ImVuY2xvc2UiLG1vZGU6ci5tb2RlLGxhYmVsOm4sYm9keTppfX0saHRtbEJ1aWxkZXI6dUEsbWF0aG1sQnVpbGRlcjpoQX0pO050KHt0eXBlOiJlbmNsb3NlIixuYW1lczpbIlxcYW5nbCJdLHByb3BzOntudW1BcmdzOjEsYXJnVHlwZXM6WyJoYm94Il0sYWxsb3dlZEluVGV4dDohMX0saGFuZGxlcih0LGUpe3ZhcntwYXJzZXI6cn09dDtyZXR1cm57dHlwZToiZW5jbG9zZSIsbW9kZTpyLm1vZGUsbGFiZWw6IlxcYW5nbCIsYm9keTplWzBdfX19KTtpVj17fTtvKHRjLCJkZWZpbmVFbnZpcm9ubWVudCIpO2FWPXt9O28oZmUsImRlZmluZU1hY3JvIik7byhjRywiZ2V0SExpbmVzIik7STM9byh0PT57dmFyIGU9dC5wYXJzZXIuc2V0dGluZ3M7aWYoIWUuZGlzcGxheU1vZGUpdGhyb3cgbmV3IHB0KCJ7Iit0LmVudk5hbWUrIn0gY2FuIGJlIHVzZWQgb25seSBpbiBkaXNwbGF5IG1vZGUuIil9LCJ2YWxpZGF0ZUFtc0Vudmlyb25tZW50Q29udGV4dCIpO28oZkEsImdldEF1dG9UYWciKTtvKGJoLCJwYXJzZUFycmF5Iik7byhkQSwiZENlbGxTdHlsZSIpO3JjPW8oZnVuY3Rpb24oZSxyKXt2YXIgbixpLGE9ZS5ib2R5Lmxlbmd0aCxzPWUuaExpbmVzQmVmb3JlUm93LGw9MCx1PW5ldyBBcnJheShhKSxoPVtdLGY9TWF0aC5tYXgoci5mb250TWV0cmljcygpLmFycmF5UnVsZVdpZHRoLHIubWluUnVsZVRoaWNrbmVzcyksZD0xL3IuZm9udE1ldHJpY3MoKS5wdFBlckVtLHA9NSpkO2lmKGUuY29sU2VwYXJhdGlvblR5cGUmJmUuY29sU2VwYXJhdGlvblR5cGU9PT0ic21hbGwiKXt2YXIgbT1yLmhhdmluZ1N0eWxlKG5yLlNDUklQVCkuc2l6ZU11bHRpcGxpZXI7cD0uMjc3OCoobS9yLnNpemVNdWx0aXBsaWVyKX12YXIgZz1lLmNvbFNlcGFyYXRpb25UeXBlPT09IkNEIj9uaSh7bnVtYmVyOjMsdW5pdDoiZXgifSxyKToxMipkLHk9MypkLHY9ZS5hcnJheXN0cmV0Y2gqZyx4PS43KnYsYj0uMyp2LFQ9MDtmdW5jdGlvbiBTKGFlKXtmb3IodmFyIE9lPTA7T2U8YWUubGVuZ3RoOysrT2UpT2U+MCYmKFQrPS4yNSksaC5wdXNoKHtwb3M6VCxpc0Rhc2hlZDphZVtPZV19KX1mb3IobyhTLCJzZXRITGluZVBvcyIpLFMoc1swXSksbj0wO248ZS5ib2R5Lmxlbmd0aDsrK24pe3ZhciB3PWUuYm9keVtuXSxFPXgsXz1iO2w8dy5sZW5ndGgmJihsPXcubGVuZ3RoKTt2YXIgQz1uZXcgQXJyYXkody5sZW5ndGgpO2ZvcihpPTA7aTx3Lmxlbmd0aDsrK2kpe3ZhciBEPSRyKHdbaV0scik7XzxELmRlcHRoJiYoXz1ELmRlcHRoKSxFPEQuaGVpZ2h0JiYoRT1ELmhlaWdodCksQ1tpXT1EfXZhciBPPWUucm93R2Fwc1tuXSxSPTA7TyYmKFI9bmkoTyxyKSxSPjAmJihSKz1iLF88UiYmKF89UiksUj0wKSksZS5hZGRKb3QmJihfKz15KSxDLmhlaWdodD1FLEMuZGVwdGg9XyxUKz1FLEMucG9zPVQsVCs9XytSLHVbbl09QyxTKHNbbisxXSl9dmFyIGs9VC8yK3IuZm9udE1ldHJpY3MoKS5heGlzSGVpZ2h0LEw9ZS5jb2xzfHxbXSxBPVtdLEksTSxQPVtdO2lmKGUudGFncyYmZS50YWdzLnNvbWUoYWU9PmFlKSlmb3Iobj0wO248YTsrK24pe3ZhciBCPXVbbl0sRj1CLnBvcy1rLHo9ZS50YWdzW25dLCQ9dm9pZCAwO3o9PT0hMD8kPUZlLm1ha2VTcGFuKFsiZXFuLW51bSJdLFtdLHIpOno9PT0hMT8kPUZlLm1ha2VTcGFuKFtdLFtdLHIpOiQ9RmUubWFrZVNwYW4oW10sJGkoeixyLCEwKSxyKSwkLmRlcHRoPUIuZGVwdGgsJC5oZWlnaHQ9Qi5oZWlnaHQsUC5wdXNoKHt0eXBlOiJlbGVtIixlbGVtOiQsc2hpZnQ6Rn0pfWZvcihpPTAsTT0wO2k8bHx8TTxMLmxlbmd0aDsrK2ksKytNKXtmb3IodmFyIFU9TFtNXXx8e30sSz0hMDtVLnR5cGU9PT0ic2VwYXJhdG9yIjspe2lmKEt8fChJPUZlLm1ha2VTcGFuKFsiYXJyYXljb2xzZXAiXSxbXSksSS5zdHlsZS53aWR0aD1FdChyLmZvbnRNZXRyaWNzKCkuZG91YmxlUnVsZVNlcCksQS5wdXNoKEkpKSxVLnNlcGFyYXRvcj09PSJ8Inx8VS5zZXBhcmF0b3I9PT0iOiIpe3ZhciBlZT1VLnNlcGFyYXRvcj09PSJ8Ij8ic29saWQiOiJkYXNoZWQiLFk9RmUubWFrZVNwYW4oWyJ2ZXJ0aWNhbC1zZXBhcmF0b3IiXSxbXSxyKTtZLnN0eWxlLmhlaWdodD1FdChUKSxZLnN0eWxlLmJvcmRlclJpZ2h0V2lkdGg9RXQoZiksWS5zdHlsZS5ib3JkZXJSaWdodFN0eWxlPWVlLFkuc3R5bGUubWFyZ2luPSIwICIrRXQoLWYvMik7dmFyIGNlPVQtaztjZSYmKFkuc3R5bGUudmVydGljYWxBbGlnbj1FdCgtY2UpKSxBLnB1c2goWSl9ZWxzZSB0aHJvdyBuZXcgcHQoIkludmFsaWQgc2VwYXJhdG9yIHR5cGU6ICIrVS5zZXBhcmF0b3IpO00rKyxVPUxbTV18fHt9LEs9ITF9aWYoIShpPj1sKSl7dmFyIFo9dm9pZCAwOyhpPjB8fGUuaHNraXBCZWZvcmVBbmRBZnRlcikmJihaPUp0LmRlZmx0KFUucHJlZ2FwLHApLFohPT0wJiYoST1GZS5tYWtlU3BhbihbImFycmF5Y29sc2VwIl0sW10pLEkuc3R5bGUud2lkdGg9RXQoWiksQS5wdXNoKEkpKSk7dmFyIHVlPVtdO2ZvcihuPTA7bjxhOysrbil7dmFyIFE9dVtuXSxqPVFbaV07aWYoail7dmFyIG5lPVEucG9zLWs7ai5kZXB0aD1RLmRlcHRoLGouaGVpZ2h0PVEuaGVpZ2h0LHVlLnB1c2goe3R5cGU6ImVsZW0iLGVsZW06aixzaGlmdDpuZX0pfX11ZT1GZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiaW5kaXZpZHVhbFNoaWZ0IixjaGlsZHJlbjp1ZX0sciksdWU9RmUubWFrZVNwYW4oWyJjb2wtYWxpZ24tIisoVS5hbGlnbnx8ImMiKV0sW3VlXSksQS5wdXNoKHVlKSwoaTxsLTF8fGUuaHNraXBCZWZvcmVBbmRBZnRlcikmJihaPUp0LmRlZmx0KFUucG9zdGdhcCxwKSxaIT09MCYmKEk9RmUubWFrZVNwYW4oWyJhcnJheWNvbHNlcCJdLFtdKSxJLnN0eWxlLndpZHRoPUV0KFopLEEucHVzaChJKSkpfX1pZih1PUZlLm1ha2VTcGFuKFsibXRhYmxlIl0sQSksaC5sZW5ndGg+MCl7Zm9yKHZhciB0ZT1GZS5tYWtlTGluZVNwYW4oImhsaW5lIixyLGYpLGhlPUZlLm1ha2VMaW5lU3BhbigiaGRhc2hsaW5lIixyLGYpLGxlPVt7dHlwZToiZWxlbSIsZWxlbTp1LHNoaWZ0OjB9XTtoLmxlbmd0aD4wOyl7dmFyIEo9aC5wb3AoKSxTZT1KLnBvcy1rO0ouaXNEYXNoZWQ/bGUucHVzaCh7dHlwZToiZWxlbSIsZWxlbTpoZSxzaGlmdDpTZX0pOmxlLnB1c2goe3R5cGU6ImVsZW0iLGVsZW06dGUsc2hpZnQ6U2V9KX11PUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJpbmRpdmlkdWFsU2hpZnQiLGNoaWxkcmVuOmxlfSxyKX1pZihQLmxlbmd0aD09PTApcmV0dXJuIEZlLm1ha2VTcGFuKFsibW9yZCJdLFt1XSxyKTt2YXIgc2U9RmUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImluZGl2aWR1YWxTaGlmdCIsY2hpbGRyZW46UH0scik7cmV0dXJuIHNlPUZlLm1ha2VTcGFuKFsidGFnIl0sW3NlXSxyKSxGZS5tYWtlRnJhZ21lbnQoW3Usc2VdKX0sImh0bWxCdWlsZGVyIiksajNlPXtjOiJjZW50ZXIgIixsOiJsZWZ0ICIscjoicmlnaHQgIn0sbmM9byhmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj1bXSxpPW5ldyBkdC5NYXRoTm9kZSgibXRkIixbXSxbIm10ci1nbHVlIl0pLGE9bmV3IGR0Lk1hdGhOb2RlKCJtdGQiLFtdLFsibW1sLWVxbi1udW0iXSkscz0wO3M8ZS5ib2R5Lmxlbmd0aDtzKyspe2Zvcih2YXIgbD1lLmJvZHlbc10sdT1bXSxoPTA7aDxsLmxlbmd0aDtoKyspdS5wdXNoKG5ldyBkdC5NYXRoTm9kZSgibXRkIixbdm4obFtoXSxyKV0pKTtlLnRhZ3MmJmUudGFnc1tzXSYmKHUudW5zaGlmdChpKSx1LnB1c2goaSksZS5sZXFubz91LnVuc2hpZnQoYSk6dS5wdXNoKGEpKSxuLnB1c2gobmV3IGR0Lk1hdGhOb2RlKCJtdHIiLHUpKX12YXIgZj1uZXcgZHQuTWF0aE5vZGUoIm10YWJsZSIsbiksZD1lLmFycmF5c3RyZXRjaD09PS41Py4xOi4xNitlLmFycmF5c3RyZXRjaC0xKyhlLmFkZEpvdD8uMDk6MCk7Zi5zZXRBdHRyaWJ1dGUoInJvd3NwYWNpbmciLEV0KGQpKTt2YXIgcD0iIixtPSIiO2lmKGUuY29scyYmZS5jb2xzLmxlbmd0aD4wKXt2YXIgZz1lLmNvbHMseT0iIix2PSExLHg9MCxiPWcubGVuZ3RoO2dbMF0udHlwZT09PSJzZXBhcmF0b3IiJiYocCs9InRvcCAiLHg9MSksZ1tnLmxlbmd0aC0xXS50eXBlPT09InNlcGFyYXRvciImJihwKz0iYm90dG9tICIsYi09MSk7Zm9yKHZhciBUPXg7VDxiO1QrKylnW1RdLnR5cGU9PT0iYWxpZ24iPyhtKz1qM2VbZ1tUXS5hbGlnbl0sdiYmKHkrPSJub25lICIpLHY9ITApOmdbVF0udHlwZT09PSJzZXBhcmF0b3IiJiZ2JiYoeSs9Z1tUXS5zZXBhcmF0b3I9PT0ifCI/InNvbGlkICI6ImRhc2hlZCAiLHY9ITEpO2Yuc2V0QXR0cmlidXRlKCJjb2x1bW5hbGlnbiIsbS50cmltKCkpLC9bc2RdLy50ZXN0KHkpJiZmLnNldEF0dHJpYnV0ZSgiY29sdW1ubGluZXMiLHkudHJpbSgpKX1pZihlLmNvbFNlcGFyYXRpb25UeXBlPT09ImFsaWduIil7Zm9yKHZhciBTPWUuY29sc3x8W10sdz0iIixFPTE7RTxTLmxlbmd0aDtFKyspdys9RSUyPyIwZW0gIjoiMWVtICI7Zi5zZXRBdHRyaWJ1dGUoImNvbHVtbnNwYWNpbmciLHcudHJpbSgpKX1lbHNlIGUuY29sU2VwYXJhdGlvblR5cGU9PT0iYWxpZ25hdCJ8fGUuY29sU2VwYXJhdGlvblR5cGU9PT0iZ2F0aGVyIj9mLnNldEF0dHJpYnV0ZSgiY29sdW1uc3BhY2luZyIsIjBlbSIpOmUuY29sU2VwYXJhdGlvblR5cGU9PT0ic21hbGwiP2Yuc2V0QXR0cmlidXRlKCJjb2x1bW5zcGFjaW5nIiwiMC4yNzc4ZW0iKTplLmNvbFNlcGFyYXRpb25UeXBlPT09IkNEIj9mLnNldEF0dHJpYnV0ZSgiY29sdW1uc3BhY2luZyIsIjAuNWVtIik6Zi5zZXRBdHRyaWJ1dGUoImNvbHVtbnNwYWNpbmciLCIxZW0iKTt2YXIgXz0iIixDPWUuaExpbmVzQmVmb3JlUm93O3ArPUNbMF0ubGVuZ3RoPjA/ImxlZnQgIjoiIixwKz1DW0MubGVuZ3RoLTFdLmxlbmd0aD4wPyJyaWdodCAiOiIiO2Zvcih2YXIgRD0xO0Q8Qy5sZW5ndGgtMTtEKyspXys9Q1tEXS5sZW5ndGg9PT0wPyJub25lICI6Q1tEXVswXT8iZGFzaGVkICI6InNvbGlkICI7cmV0dXJuL1tzZF0vLnRlc3QoXykmJmYuc2V0QXR0cmlidXRlKCJyb3dsaW5lcyIsXy50cmltKCkpLHAhPT0iIiYmKGY9bmV3IGR0Lk1hdGhOb2RlKCJtZW5jbG9zZSIsW2ZdKSxmLnNldEF0dHJpYnV0ZSgibm90YXRpb24iLHAudHJpbSgpKSksZS5hcnJheXN0cmV0Y2gmJmUuYXJyYXlzdHJldGNoPDEmJihmPW5ldyBkdC5NYXRoTm9kZSgibXN0eWxlIixbZl0pLGYuc2V0QXR0cmlidXRlKCJzY3JpcHRsZXZlbCIsIjEiKSksZn0sIm1hdGhtbEJ1aWxkZXIiKSxzVj1vKGZ1bmN0aW9uKGUscil7ZS5lbnZOYW1lLmluZGV4T2YoImVkIik9PT0tMSYmSTMoZSk7dmFyIG49W10saT1lLmVudk5hbWUuaW5kZXhPZigiYXQiKT4tMT8iYWxpZ25hdCI6ImFsaWduIixhPWUuZW52TmFtZT09PSJzcGxpdCIscz1iaChlLnBhcnNlcix7Y29sczpuLGFkZEpvdDohMCxhdXRvVGFnOmE/dm9pZCAwOmZBKGUuZW52TmFtZSksZW1wdHlTaW5nbGVSb3c6ITAsY29sU2VwYXJhdGlvblR5cGU6aSxtYXhOdW1Db2xzOmE/Mjp2b2lkIDAsbGVxbm86ZS5wYXJzZXIuc2V0dGluZ3MubGVxbm99LCJkaXNwbGF5IiksbCx1PTAsaD17dHlwZToib3JkZ3JvdXAiLG1vZGU6ZS5tb2RlLGJvZHk6W119O2lmKHJbMF0mJnJbMF0udHlwZT09PSJvcmRncm91cCIpe2Zvcih2YXIgZj0iIixkPTA7ZDxyWzBdLmJvZHkubGVuZ3RoO2QrKyl7dmFyIHA9eHIoclswXS5ib2R5W2RdLCJ0ZXh0b3JkIik7Zis9cC50ZXh0fWw9TnVtYmVyKGYpLHU9bCoyfXZhciBtPSF1O3MuYm9keS5mb3JFYWNoKGZ1bmN0aW9uKHgpe2Zvcih2YXIgYj0xO2I8eC5sZW5ndGg7Yis9Mil7dmFyIFQ9eHIoeFtiXSwic3R5bGluZyIpLFM9eHIoVC5ib2R5WzBdLCJvcmRncm91cCIpO1MuYm9keS51bnNoaWZ0KGgpfWlmKG0pdTx4Lmxlbmd0aCYmKHU9eC5sZW5ndGgpO2Vsc2V7dmFyIHc9eC5sZW5ndGgvMjtpZihsPHcpdGhyb3cgbmV3IHB0KCJUb28gbWFueSBtYXRoIGluIGEgcm93OiAiKygiZXhwZWN0ZWQgIitsKyIsIGJ1dCBnb3QgIit3KSx4WzBdKX19KTtmb3IodmFyIGc9MDtnPHU7KytnKXt2YXIgeT0iciIsdj0wO2clMj09PTE/eT0ibCI6Zz4wJiZtJiYodj0xKSxuW2ddPXt0eXBlOiJhbGlnbiIsYWxpZ246eSxwcmVnYXA6dixwb3N0Z2FwOjB9fXJldHVybiBzLmNvbFNlcGFyYXRpb25UeXBlPW0/ImFsaWduIjoiYWxpZ25hdCIsc30sImFsaWduZWRIYW5kbGVyIik7dGMoe3R5cGU6ImFycmF5IixuYW1lczpbImFycmF5IiwiZGFycmF5Il0scHJvcHM6e251bUFyZ3M6MX0saGFuZGxlcih0LGUpe3ZhciByPVIzKGVbMF0pLG49cj9bZVswXV06eHIoZVswXSwib3JkZ3JvdXAiKS5ib2R5LGk9bi5tYXAoZnVuY3Rpb24ocyl7dmFyIGw9b0EocyksdT1sLnRleHQ7aWYoImxjciIuaW5kZXhPZih1KSE9PS0xKXJldHVybnt0eXBlOiJhbGlnbiIsYWxpZ246dX07aWYodT09PSJ8IilyZXR1cm57dHlwZToic2VwYXJhdG9yIixzZXBhcmF0b3I6InwifTtpZih1PT09IjoiKXJldHVybnt0eXBlOiJzZXBhcmF0b3IiLHNlcGFyYXRvcjoiOiJ9O3Rocm93IG5ldyBwdCgiVW5rbm93biBjb2x1bW4gYWxpZ25tZW50OiAiK3Uscyl9KSxhPXtjb2xzOmksaHNraXBCZWZvcmVBbmRBZnRlcjohMCxtYXhOdW1Db2xzOmkubGVuZ3RofTtyZXR1cm4gYmgodC5wYXJzZXIsYSxkQSh0LmVudk5hbWUpKX0saHRtbEJ1aWxkZXI6cmMsbWF0aG1sQnVpbGRlcjpuY30pO3RjKHt0eXBlOiJhcnJheSIsbmFtZXM6WyJtYXRyaXgiLCJwbWF0cml4IiwiYm1hdHJpeCIsIkJtYXRyaXgiLCJ2bWF0cml4IiwiVm1hdHJpeCIsIm1hdHJpeCoiLCJwbWF0cml4KiIsImJtYXRyaXgqIiwiQm1hdHJpeCoiLCJ2bWF0cml4KiIsIlZtYXRyaXgqIl0scHJvcHM6e251bUFyZ3M6MH0saGFuZGxlcih0KXt2YXIgZT17bWF0cml4Om51bGwscG1hdHJpeDpbIigiLCIpIl0sYm1hdHJpeDpbIlsiLCJdIl0sQm1hdHJpeDpbIlxceyIsIlxcfSJdLHZtYXRyaXg6WyJ8IiwifCJdLFZtYXRyaXg6WyJcXFZlcnQiLCJcXFZlcnQiXX1bdC5lbnZOYW1lLnJlcGxhY2UoIioiLCIiKV0scj0iYyIsbj17aHNraXBCZWZvcmVBbmRBZnRlcjohMSxjb2xzOlt7dHlwZToiYWxpZ24iLGFsaWduOnJ9XX07aWYodC5lbnZOYW1lLmNoYXJBdCh0LmVudk5hbWUubGVuZ3RoLTEpPT09IioiKXt2YXIgaT10LnBhcnNlcjtpZihpLmNvbnN1bWVTcGFjZXMoKSxpLmZldGNoKCkudGV4dD09PSJbIil7aWYoaS5jb25zdW1lKCksaS5jb25zdW1lU3BhY2VzKCkscj1pLmZldGNoKCkudGV4dCwibGNyIi5pbmRleE9mKHIpPT09LTEpdGhyb3cgbmV3IHB0KCJFeHBlY3RlZCBsIG9yIGMgb3IgciIsaS5uZXh0VG9rZW4pO2kuY29uc3VtZSgpLGkuY29uc3VtZVNwYWNlcygpLGkuZXhwZWN0KCJdIiksaS5jb25zdW1lKCksbi5jb2xzPVt7dHlwZToiYWxpZ24iLGFsaWduOnJ9XX19dmFyIGE9YmgodC5wYXJzZXIsbixkQSh0LmVudk5hbWUpKSxzPU1hdGgubWF4KDAsLi4uYS5ib2R5Lm1hcChsPT5sLmxlbmd0aCkpO3JldHVybiBhLmNvbHM9bmV3IEFycmF5KHMpLmZpbGwoe3R5cGU6ImFsaWduIixhbGlnbjpyfSksZT97dHlwZToibGVmdHJpZ2h0Iixtb2RlOnQubW9kZSxib2R5OlthXSxsZWZ0OmVbMF0scmlnaHQ6ZVsxXSxyaWdodENvbG9yOnZvaWQgMH06YX0saHRtbEJ1aWxkZXI6cmMsbWF0aG1sQnVpbGRlcjpuY30pO3RjKHt0eXBlOiJhcnJheSIsbmFtZXM6WyJzbWFsbG1hdHJpeCJdLHByb3BzOntudW1BcmdzOjB9LGhhbmRsZXIodCl7dmFyIGU9e2FycmF5c3RyZXRjaDouNX0scj1iaCh0LnBhcnNlcixlLCJzY3JpcHQiKTtyZXR1cm4gci5jb2xTZXBhcmF0aW9uVHlwZT0ic21hbGwiLHJ9LGh0bWxCdWlsZGVyOnJjLG1hdGhtbEJ1aWxkZXI6bmN9KTt0Yyh7dHlwZToiYXJyYXkiLG5hbWVzOlsic3ViYXJyYXkiXSxwcm9wczp7bnVtQXJnczoxfSxoYW5kbGVyKHQsZSl7dmFyIHI9UjMoZVswXSksbj1yP1tlWzBdXTp4cihlWzBdLCJvcmRncm91cCIpLmJvZHksaT1uLm1hcChmdW5jdGlvbihzKXt2YXIgbD1vQShzKSx1PWwudGV4dDtpZigibGMiLmluZGV4T2YodSkhPT0tMSlyZXR1cm57dHlwZToiYWxpZ24iLGFsaWduOnV9O3Rocm93IG5ldyBwdCgiVW5rbm93biBjb2x1bW4gYWxpZ25tZW50OiAiK3Uscyl9KTtpZihpLmxlbmd0aD4xKXRocm93IG5ldyBwdCgie3N1YmFycmF5fSBjYW4gY29udGFpbiBvbmx5IG9uZSBjb2x1bW4iKTt2YXIgYT17Y29sczppLGhza2lwQmVmb3JlQW5kQWZ0ZXI6ITEsYXJyYXlzdHJldGNoOi41fTtpZihhPWJoKHQucGFyc2VyLGEsInNjcmlwdCIpLGEuYm9keS5sZW5ndGg+MCYmYS5ib2R5WzBdLmxlbmd0aD4xKXRocm93IG5ldyBwdCgie3N1YmFycmF5fSBjYW4gY29udGFpbiBvbmx5IG9uZSBjb2x1bW4iKTtyZXR1cm4gYX0saHRtbEJ1aWxkZXI6cmMsbWF0aG1sQnVpbGRlcjpuY30pO3RjKHt0eXBlOiJhcnJheSIsbmFtZXM6WyJjYXNlcyIsImRjYXNlcyIsInJjYXNlcyIsImRyY2FzZXMiXSxwcm9wczp7bnVtQXJnczowfSxoYW5kbGVyKHQpe3ZhciBlPXthcnJheXN0cmV0Y2g6MS4yLGNvbHM6W3t0eXBlOiJhbGlnbiIsYWxpZ246ImwiLHByZWdhcDowLHBvc3RnYXA6MX0se3R5cGU6ImFsaWduIixhbGlnbjoibCIscHJlZ2FwOjAscG9zdGdhcDowfV19LHI9YmgodC5wYXJzZXIsZSxkQSh0LmVudk5hbWUpKTtyZXR1cm57dHlwZToibGVmdHJpZ2h0Iixtb2RlOnQubW9kZSxib2R5OltyXSxsZWZ0OnQuZW52TmFtZS5pbmRleE9mKCJyIik+LTE/Ii4iOiJcXHsiLHJpZ2h0OnQuZW52TmFtZS5pbmRleE9mKCJyIik+LTE/IlxcfSI6Ii4iLHJpZ2h0Q29sb3I6dm9pZCAwfX0saHRtbEJ1aWxkZXI6cmMsbWF0aG1sQnVpbGRlcjpuY30pO3RjKHt0eXBlOiJhcnJheSIsbmFtZXM6WyJhbGlnbiIsImFsaWduKiIsImFsaWduZWQiLCJzcGxpdCJdLHByb3BzOntudW1BcmdzOjB9LGhhbmRsZXI6c1YsaHRtbEJ1aWxkZXI6cmMsbWF0aG1sQnVpbGRlcjpuY30pO3RjKHt0eXBlOiJhcnJheSIsbmFtZXM6WyJnYXRoZXJlZCIsImdhdGhlciIsImdhdGhlcioiXSxwcm9wczp7bnVtQXJnczowfSxoYW5kbGVyKHQpe0p0LmNvbnRhaW5zKFsiZ2F0aGVyIiwiZ2F0aGVyKiJdLHQuZW52TmFtZSkmJkkzKHQpO3ZhciBlPXtjb2xzOlt7dHlwZToiYWxpZ24iLGFsaWduOiJjIn1dLGFkZEpvdDohMCxjb2xTZXBhcmF0aW9uVHlwZToiZ2F0aGVyIixhdXRvVGFnOmZBKHQuZW52TmFtZSksZW1wdHlTaW5nbGVSb3c6ITAsbGVxbm86dC5wYXJzZXIuc2V0dGluZ3MubGVxbm99O3JldHVybiBiaCh0LnBhcnNlcixlLCJkaXNwbGF5Iil9LGh0bWxCdWlsZGVyOnJjLG1hdGhtbEJ1aWxkZXI6bmN9KTt0Yyh7dHlwZToiYXJyYXkiLG5hbWVzOlsiYWxpZ25hdCIsImFsaWduYXQqIiwiYWxpZ25lZGF0Il0scHJvcHM6e251bUFyZ3M6MX0saGFuZGxlcjpzVixodG1sQnVpbGRlcjpyYyxtYXRobWxCdWlsZGVyOm5jfSk7dGMoe3R5cGU6ImFycmF5IixuYW1lczpbImVxdWF0aW9uIiwiZXF1YXRpb24qIl0scHJvcHM6e251bUFyZ3M6MH0saGFuZGxlcih0KXtJMyh0KTt2YXIgZT17YXV0b1RhZzpmQSh0LmVudk5hbWUpLGVtcHR5U2luZ2xlUm93OiEwLHNpbmdsZVJvdzohMCxtYXhOdW1Db2xzOjEsbGVxbm86dC5wYXJzZXIuc2V0dGluZ3MubGVxbm99O3JldHVybiBiaCh0LnBhcnNlcixlLCJkaXNwbGF5Iil9LGh0bWxCdWlsZGVyOnJjLG1hdGhtbEJ1aWxkZXI6bmN9KTt0Yyh7dHlwZToiYXJyYXkiLG5hbWVzOlsiQ0QiXSxwcm9wczp7bnVtQXJnczowfSxoYW5kbGVyKHQpe3JldHVybiBJMyh0KSxPM2UodC5wYXJzZXIpfSxodG1sQnVpbGRlcjpyYyxtYXRobWxCdWlsZGVyOm5jfSk7ZmUoIlxcbm9udW1iZXIiLCJcXGdkZWZcXEBlcW5zd3swfSIpO2ZlKCJcXG5vdGFnIiwiXFxub251bWJlciIpO050KHt0eXBlOiJ0ZXh0IixuYW1lczpbIlxcaGxpbmUiLCJcXGhkYXNobGluZSJdLHByb3BzOntudW1BcmdzOjAsYWxsb3dlZEluVGV4dDohMCxhbGxvd2VkSW5NYXRoOiEwfSxoYW5kbGVyKHQsZSl7dGhyb3cgbmV3IHB0KHQuZnVuY05hbWUrIiB2YWxpZCBvbmx5IHdpdGhpbiBhcnJheSBlbnZpcm9ubWVudCIpfX0pO3VHPWlWO050KHt0eXBlOiJlbnZpcm9ubWVudCIsbmFtZXM6WyJcXGJlZ2luIiwiXFxlbmQiXSxwcm9wczp7bnVtQXJnczoxLGFyZ1R5cGVzOlsidGV4dCJdfSxoYW5kbGVyKHQsZSl7dmFye3BhcnNlcjpyLGZ1bmNOYW1lOm59PXQsaT1lWzBdO2lmKGkudHlwZSE9PSJvcmRncm91cCIpdGhyb3cgbmV3IHB0KCJJbnZhbGlkIGVudmlyb25tZW50IG5hbWUiLGkpO2Zvcih2YXIgYT0iIixzPTA7czxpLmJvZHkubGVuZ3RoOysrcylhKz14cihpLmJvZHlbc10sInRleHRvcmQiKS50ZXh0O2lmKG49PT0iXFxiZWdpbiIpe2lmKCF1Ry5oYXNPd25Qcm9wZXJ0eShhKSl0aHJvdyBuZXcgcHQoIk5vIHN1Y2ggZW52aXJvbm1lbnQ6ICIrYSxpKTt2YXIgbD11R1thXSx7YXJnczp1LG9wdEFyZ3M6aH09ci5wYXJzZUFyZ3VtZW50cygiXFxiZWdpbnsiK2ErIn0iLGwpLGY9e21vZGU6ci5tb2RlLGVudk5hbWU6YSxwYXJzZXI6cn0sZD1sLmhhbmRsZXIoZix1LGgpO3IuZXhwZWN0KCJcXGVuZCIsITEpO3ZhciBwPXIubmV4dFRva2VuLG09eHIoci5wYXJzZUZ1bmN0aW9uKCksImVudmlyb25tZW50Iik7aWYobS5uYW1lIT09YSl0aHJvdyBuZXcgcHQoIk1pc21hdGNoOiBcXGJlZ2lueyIrYSsifSBtYXRjaGVkIGJ5IFxcZW5keyIrbS5uYW1lKyJ9IixwKTtyZXR1cm4gZH1yZXR1cm57dHlwZToiZW52aXJvbm1lbnQiLG1vZGU6ci5tb2RlLG5hbWU6YSxuYW1lR3JvdXA6aX19fSk7b1Y9bygodCxlKT0+e3ZhciByPXQuZm9udCxuPWUud2l0aEZvbnQocik7cmV0dXJuICRyKHQuYm9keSxuKX0sImh0bWxCdWlsZGVyJDUiKSxsVj1vKCh0LGUpPT57dmFyIHI9dC5mb250LG49ZS53aXRoRm9udChyKTtyZXR1cm4gdm4odC5ib2R5LG4pfSwibWF0aG1sQnVpbGRlciQ0IiksaEc9eyJcXEJiYiI6IlxcbWF0aGJiIiwiXFxib2xkIjoiXFxtYXRoYmYiLCJcXGZyYWsiOiJcXG1hdGhmcmFrIiwiXFxibSI6IlxcYm9sZHN5bWJvbCJ9O050KHt0eXBlOiJmb250IixuYW1lczpbIlxcbWF0aHJtIiwiXFxtYXRoaXQiLCJcXG1hdGhiZiIsIlxcbWF0aG5vcm1hbCIsIlxcbWF0aHNmaXQiLCJcXG1hdGhiYiIsIlxcbWF0aGNhbCIsIlxcbWF0aGZyYWsiLCJcXG1hdGhzY3IiLCJcXG1hdGhzZiIsIlxcbWF0aHR0IiwiXFxCYmIiLCJcXGJvbGQiLCJcXGZyYWsiXSxwcm9wczp7bnVtQXJnczoxLGFsbG93ZWRJbkFyZ3VtZW50OiEwfSxoYW5kbGVyOm8oKHQsZSk9Pnt2YXJ7cGFyc2VyOnIsZnVuY05hbWU6bn09dCxpPUMzKGVbMF0pLGE9bjtyZXR1cm4gYSBpbiBoRyYmKGE9aEdbYV0pLHt0eXBlOiJmb250Iixtb2RlOnIubW9kZSxmb250OmEuc2xpY2UoMSksYm9keTppfX0sImhhbmRsZXIiKSxodG1sQnVpbGRlcjpvVixtYXRobWxCdWlsZGVyOmxWfSk7TnQoe3R5cGU6Im1jbGFzcyIsbmFtZXM6WyJcXGJvbGRzeW1ib2wiLCJcXGJtIl0scHJvcHM6e251bUFyZ3M6MX0saGFuZGxlcjpvKCh0LGUpPT57dmFye3BhcnNlcjpyfT10LG49ZVswXSxpPUp0LmlzQ2hhcmFjdGVyQm94KG4pO3JldHVybnt0eXBlOiJtY2xhc3MiLG1vZGU6ci5tb2RlLG1jbGFzczpOMyhuKSxib2R5Olt7dHlwZToiZm9udCIsbW9kZTpyLm1vZGUsZm9udDoiYm9sZHN5bWJvbCIsYm9keTpufV0saXNDaGFyYWN0ZXJCb3g6aX19LCJoYW5kbGVyIil9KTtOdCh7dHlwZToiZm9udCIsbmFtZXM6WyJcXHJtIiwiXFxzZiIsIlxcdHQiLCJcXGJmIiwiXFxpdCIsIlxcY2FsIl0scHJvcHM6e251bUFyZ3M6MCxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyOm8oKHQsZSk9Pnt2YXJ7cGFyc2VyOnIsZnVuY05hbWU6bixicmVha09uVG9rZW5UZXh0Oml9PXQse21vZGU6YX09cixzPXIucGFyc2VFeHByZXNzaW9uKCEwLGkpLGw9Im1hdGgiK24uc2xpY2UoMSk7cmV0dXJue3R5cGU6ImZvbnQiLG1vZGU6YSxmb250OmwsYm9keTp7dHlwZToib3JkZ3JvdXAiLG1vZGU6ci5tb2RlLGJvZHk6c319fSwiaGFuZGxlciIpLGh0bWxCdWlsZGVyOm9WLG1hdGhtbEJ1aWxkZXI6bFZ9KTtjVj1vKCh0LGUpPT57dmFyIHI9ZTtyZXR1cm4gdD09PSJkaXNwbGF5Ij9yPXIuaWQ+PW5yLlNDUklQVC5pZD9yLnRleHQoKTpuci5ESVNQTEFZOnQ9PT0idGV4dCImJnIuc2l6ZT09PW5yLkRJU1BMQVkuc2l6ZT9yPW5yLlRFWFQ6dD09PSJzY3JpcHQiP3I9bnIuU0NSSVBUOnQ9PT0ic2NyaXB0c2NyaXB0IiYmKHI9bnIuU0NSSVBUU0NSSVBUKSxyfSwiYWRqdXN0U3R5bGUiKSxwQT1vKCh0LGUpPT57dmFyIHI9Y1YodC5zaXplLGUuc3R5bGUpLG49ci5mcmFjTnVtKCksaT1yLmZyYWNEZW4oKSxhO2E9ZS5oYXZpbmdTdHlsZShuKTt2YXIgcz0kcih0Lm51bWVyLGEsZSk7aWYodC5jb250aW51ZWQpe3ZhciBsPTguNS9lLmZvbnRNZXRyaWNzKCkucHRQZXJFbSx1PTMuNS9lLmZvbnRNZXRyaWNzKCkucHRQZXJFbTtzLmhlaWdodD1zLmhlaWdodDxsP2w6cy5oZWlnaHQscy5kZXB0aD1zLmRlcHRoPHU/dTpzLmRlcHRofWE9ZS5oYXZpbmdTdHlsZShpKTt2YXIgaD0kcih0LmRlbm9tLGEsZSksZixkLHA7dC5oYXNCYXJMaW5lPyh0LmJhclNpemU/KGQ9bmkodC5iYXJTaXplLGUpLGY9RmUubWFrZUxpbmVTcGFuKCJmcmFjLWxpbmUiLGUsZCkpOmY9RmUubWFrZUxpbmVTcGFuKCJmcmFjLWxpbmUiLGUpLGQ9Zi5oZWlnaHQscD1mLmhlaWdodCk6KGY9bnVsbCxkPTAscD1lLmZvbnRNZXRyaWNzKCkuZGVmYXVsdFJ1bGVUaGlja25lc3MpO3ZhciBtLGcseTtyLnNpemU9PT1uci5ESVNQTEFZLnNpemV8fHQuc2l6ZT09PSJkaXNwbGF5Ij8obT1lLmZvbnRNZXRyaWNzKCkubnVtMSxkPjA/Zz0zKnA6Zz03KnAseT1lLmZvbnRNZXRyaWNzKCkuZGVub20xKTooZD4wPyhtPWUuZm9udE1ldHJpY3MoKS5udW0yLGc9cCk6KG09ZS5mb250TWV0cmljcygpLm51bTMsZz0zKnApLHk9ZS5mb250TWV0cmljcygpLmRlbm9tMik7dmFyIHY7aWYoZil7dmFyIGI9ZS5mb250TWV0cmljcygpLmF4aXNIZWlnaHQ7bS1zLmRlcHRoLShiKy41KmQpPGcmJihtKz1nLShtLXMuZGVwdGgtKGIrLjUqZCkpKSxiLS41KmQtKGguaGVpZ2h0LXkpPGcmJih5Kz1nLShiLS41KmQtKGguaGVpZ2h0LXkpKSk7dmFyIFQ9LShiLS41KmQpO3Y9RmUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImluZGl2aWR1YWxTaGlmdCIsY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOmgsc2hpZnQ6eX0se3R5cGU6ImVsZW0iLGVsZW06ZixzaGlmdDpUfSx7dHlwZToiZWxlbSIsZWxlbTpzLHNoaWZ0Oi1tfV19LGUpfWVsc2V7dmFyIHg9bS1zLmRlcHRoLShoLmhlaWdodC15KTt4PGcmJihtKz0uNSooZy14KSx5Kz0uNSooZy14KSksdj1GZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiaW5kaXZpZHVhbFNoaWZ0IixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06aCxzaGlmdDp5fSx7dHlwZToiZWxlbSIsZWxlbTpzLHNoaWZ0Oi1tfV19LGUpfWE9ZS5oYXZpbmdTdHlsZShyKSx2LmhlaWdodCo9YS5zaXplTXVsdGlwbGllci9lLnNpemVNdWx0aXBsaWVyLHYuZGVwdGgqPWEuc2l6ZU11bHRpcGxpZXIvZS5zaXplTXVsdGlwbGllcjt2YXIgUztyLnNpemU9PT1uci5ESVNQTEFZLnNpemU/Uz1lLmZvbnRNZXRyaWNzKCkuZGVsaW0xOnIuc2l6ZT09PW5yLlNDUklQVFNDUklQVC5zaXplP1M9ZS5oYXZpbmdTdHlsZShuci5TQ1JJUFQpLmZvbnRNZXRyaWNzKCkuZGVsaW0yOlM9ZS5mb250TWV0cmljcygpLmRlbGltMjt2YXIgdyxFO3JldHVybiB0LmxlZnREZWxpbT09bnVsbD93PWV2KGUsWyJtb3BlbiJdKTp3PWh1LmN1c3RvbVNpemVkRGVsaW0odC5sZWZ0RGVsaW0sUywhMCxlLmhhdmluZ1N0eWxlKHIpLHQubW9kZSxbIm1vcGVuIl0pLHQuY29udGludWVkP0U9RmUubWFrZVNwYW4oW10pOnQucmlnaHREZWxpbT09bnVsbD9FPWV2KGUsWyJtY2xvc2UiXSk6RT1odS5jdXN0b21TaXplZERlbGltKHQucmlnaHREZWxpbSxTLCEwLGUuaGF2aW5nU3R5bGUociksdC5tb2RlLFsibWNsb3NlIl0pLEZlLm1ha2VTcGFuKFsibW9yZCJdLmNvbmNhdChhLnNpemluZ0NsYXNzZXMoZSkpLFt3LEZlLm1ha2VTcGFuKFsibWZyYWMiXSxbdl0pLEVdLGUpfSwiaHRtbEJ1aWxkZXIkNCIpLG1BPW8oKHQsZSk9Pnt2YXIgcj1uZXcgZHQuTWF0aE5vZGUoIm1mcmFjIixbdm4odC5udW1lcixlKSx2bih0LmRlbm9tLGUpXSk7aWYoIXQuaGFzQmFyTGluZSlyLnNldEF0dHJpYnV0ZSgibGluZXRoaWNrbmVzcyIsIjBweCIpO2Vsc2UgaWYodC5iYXJTaXplKXt2YXIgbj1uaSh0LmJhclNpemUsZSk7ci5zZXRBdHRyaWJ1dGUoImxpbmV0aGlja25lc3MiLEV0KG4pKX12YXIgaT1jVih0LnNpemUsZS5zdHlsZSk7aWYoaS5zaXplIT09ZS5zdHlsZS5zaXplKXtyPW5ldyBkdC5NYXRoTm9kZSgibXN0eWxlIixbcl0pO3ZhciBhPWkuc2l6ZT09PW5yLkRJU1BMQVkuc2l6ZT8idHJ1ZSI6ImZhbHNlIjtyLnNldEF0dHJpYnV0ZSgiZGlzcGxheXN0eWxlIixhKSxyLnNldEF0dHJpYnV0ZSgic2NyaXB0bGV2ZWwiLCIwIil9aWYodC5sZWZ0RGVsaW0hPW51bGx8fHQucmlnaHREZWxpbSE9bnVsbCl7dmFyIHM9W107aWYodC5sZWZ0RGVsaW0hPW51bGwpe3ZhciBsPW5ldyBkdC5NYXRoTm9kZSgibW8iLFtuZXcgZHQuVGV4dE5vZGUodC5sZWZ0RGVsaW0ucmVwbGFjZSgiXFwiLCIiKSldKTtsLnNldEF0dHJpYnV0ZSgiZmVuY2UiLCJ0cnVlIikscy5wdXNoKGwpfWlmKHMucHVzaChyKSx0LnJpZ2h0RGVsaW0hPW51bGwpe3ZhciB1PW5ldyBkdC5NYXRoTm9kZSgibW8iLFtuZXcgZHQuVGV4dE5vZGUodC5yaWdodERlbGltLnJlcGxhY2UoIlxcIiwiIikpXSk7dS5zZXRBdHRyaWJ1dGUoImZlbmNlIiwidHJ1ZSIpLHMucHVzaCh1KX1yZXR1cm4gYUEocyl9cmV0dXJuIHJ9LCJtYXRobWxCdWlsZGVyJDMiKTtOdCh7dHlwZToiZ2VuZnJhYyIsbmFtZXM6WyJcXGRmcmFjIiwiXFxmcmFjIiwiXFx0ZnJhYyIsIlxcZGJpbm9tIiwiXFxiaW5vbSIsIlxcdGJpbm9tIiwiXFxcXGF0b3BmcmFjIiwiXFxcXGJyYWNlZnJhYyIsIlxcXFxicmFja2ZyYWMiXSxwcm9wczp7bnVtQXJnczoyLGFsbG93ZWRJbkFyZ3VtZW50OiEwfSxoYW5kbGVyOm8oKHQsZSk9Pnt2YXJ7cGFyc2VyOnIsZnVuY05hbWU6bn09dCxpPWVbMF0sYT1lWzFdLHMsbD1udWxsLHU9bnVsbCxoPSJhdXRvIjtzd2l0Y2gobil7Y2FzZSJcXGRmcmFjIjpjYXNlIlxcZnJhYyI6Y2FzZSJcXHRmcmFjIjpzPSEwO2JyZWFrO2Nhc2UiXFxcXGF0b3BmcmFjIjpzPSExO2JyZWFrO2Nhc2UiXFxkYmlub20iOmNhc2UiXFxiaW5vbSI6Y2FzZSJcXHRiaW5vbSI6cz0hMSxsPSIoIix1PSIpIjticmVhaztjYXNlIlxcXFxicmFjZWZyYWMiOnM9ITEsbD0iXFx7Iix1PSJcXH0iO2JyZWFrO2Nhc2UiXFxcXGJyYWNrZnJhYyI6cz0hMSxsPSJbIix1PSJdIjticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIGdlbmZyYWMgY29tbWFuZCIpfXN3aXRjaChuKXtjYXNlIlxcZGZyYWMiOmNhc2UiXFxkYmlub20iOmg9ImRpc3BsYXkiO2JyZWFrO2Nhc2UiXFx0ZnJhYyI6Y2FzZSJcXHRiaW5vbSI6aD0idGV4dCI7YnJlYWt9cmV0dXJue3R5cGU6ImdlbmZyYWMiLG1vZGU6ci5tb2RlLGNvbnRpbnVlZDohMSxudW1lcjppLGRlbm9tOmEsaGFzQmFyTGluZTpzLGxlZnREZWxpbTpsLHJpZ2h0RGVsaW06dSxzaXplOmgsYmFyU2l6ZTpudWxsfX0sImhhbmRsZXIiKSxodG1sQnVpbGRlcjpwQSxtYXRobWxCdWlsZGVyOm1BfSk7TnQoe3R5cGU6ImdlbmZyYWMiLG5hbWVzOlsiXFxjZnJhYyJdLHByb3BzOntudW1BcmdzOjJ9LGhhbmRsZXI6bygodCxlKT0+e3ZhcntwYXJzZXI6cixmdW5jTmFtZTpufT10LGk9ZVswXSxhPWVbMV07cmV0dXJue3R5cGU6ImdlbmZyYWMiLG1vZGU6ci5tb2RlLGNvbnRpbnVlZDohMCxudW1lcjppLGRlbm9tOmEsaGFzQmFyTGluZTohMCxsZWZ0RGVsaW06bnVsbCxyaWdodERlbGltOm51bGwsc2l6ZToiZGlzcGxheSIsYmFyU2l6ZTpudWxsfX0sImhhbmRsZXIiKX0pO050KHt0eXBlOiJpbmZpeCIsbmFtZXM6WyJcXG92ZXIiLCJcXGNob29zZSIsIlxcYXRvcCIsIlxcYnJhY2UiLCJcXGJyYWNrIl0scHJvcHM6e251bUFyZ3M6MCxpbmZpeDohMH0saGFuZGxlcih0KXt2YXJ7cGFyc2VyOmUsZnVuY05hbWU6cix0b2tlbjpufT10LGk7c3dpdGNoKHIpe2Nhc2UiXFxvdmVyIjppPSJcXGZyYWMiO2JyZWFrO2Nhc2UiXFxjaG9vc2UiOmk9IlxcYmlub20iO2JyZWFrO2Nhc2UiXFxhdG9wIjppPSJcXFxcYXRvcGZyYWMiO2JyZWFrO2Nhc2UiXFxicmFjZSI6aT0iXFxcXGJyYWNlZnJhYyI7YnJlYWs7Y2FzZSJcXGJyYWNrIjppPSJcXFxcYnJhY2tmcmFjIjticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIGluZml4IGdlbmZyYWMgY29tbWFuZCIpfXJldHVybnt0eXBlOiJpbmZpeCIsbW9kZTplLm1vZGUscmVwbGFjZVdpdGg6aSx0b2tlbjpufX19KTtmRz1bImRpc3BsYXkiLCJ0ZXh0Iiwic2NyaXB0Iiwic2NyaXB0c2NyaXB0Il0sZEc9byhmdW5jdGlvbihlKXt2YXIgcj1udWxsO3JldHVybiBlLmxlbmd0aD4wJiYocj1lLHI9cj09PSIuIj9udWxsOnIpLHJ9LCJkZWxpbUZyb21WYWx1ZSIpO050KHt0eXBlOiJnZW5mcmFjIixuYW1lczpbIlxcZ2VuZnJhYyJdLHByb3BzOntudW1BcmdzOjYsYWxsb3dlZEluQXJndW1lbnQ6ITAsYXJnVHlwZXM6WyJtYXRoIiwibWF0aCIsInNpemUiLCJ0ZXh0IiwibWF0aCIsIm1hdGgiXX0saGFuZGxlcih0LGUpe3ZhcntwYXJzZXI6cn09dCxuPWVbNF0saT1lWzVdLGE9QzMoZVswXSkscz1hLnR5cGU9PT0iYXRvbSImJmEuZmFtaWx5PT09Im9wZW4iP2RHKGEudGV4dCk6bnVsbCxsPUMzKGVbMV0pLHU9bC50eXBlPT09ImF0b20iJiZsLmZhbWlseT09PSJjbG9zZSI/ZEcobC50ZXh0KTpudWxsLGg9eHIoZVsyXSwic2l6ZSIpLGYsZD1udWxsO2guaXNCbGFuaz9mPSEwOihkPWgudmFsdWUsZj1kLm51bWJlcj4wKTt2YXIgcD0iYXV0byIsbT1lWzNdO2lmKG0udHlwZT09PSJvcmRncm91cCIpe2lmKG0uYm9keS5sZW5ndGg+MCl7dmFyIGc9eHIobS5ib2R5WzBdLCJ0ZXh0b3JkIik7cD1mR1tOdW1iZXIoZy50ZXh0KV19fWVsc2UgbT14cihtLCJ0ZXh0b3JkIikscD1mR1tOdW1iZXIobS50ZXh0KV07cmV0dXJue3R5cGU6ImdlbmZyYWMiLG1vZGU6ci5tb2RlLG51bWVyOm4sZGVub206aSxjb250aW51ZWQ6ITEsaGFzQmFyTGluZTpmLGJhclNpemU6ZCxsZWZ0RGVsaW06cyxyaWdodERlbGltOnUsc2l6ZTpwfX0saHRtbEJ1aWxkZXI6cEEsbWF0aG1sQnVpbGRlcjptQX0pO050KHt0eXBlOiJpbmZpeCIsbmFtZXM6WyJcXGFib3ZlIl0scHJvcHM6e251bUFyZ3M6MSxhcmdUeXBlczpbInNpemUiXSxpbmZpeDohMH0saGFuZGxlcih0LGUpe3ZhcntwYXJzZXI6cixmdW5jTmFtZTpuLHRva2VuOml9PXQ7cmV0dXJue3R5cGU6ImluZml4Iixtb2RlOnIubW9kZSxyZXBsYWNlV2l0aDoiXFxcXGFib3ZlZnJhYyIsc2l6ZTp4cihlWzBdLCJzaXplIikudmFsdWUsdG9rZW46aX19fSk7TnQoe3R5cGU6ImdlbmZyYWMiLG5hbWVzOlsiXFxcXGFib3ZlZnJhYyJdLHByb3BzOntudW1BcmdzOjMsYXJnVHlwZXM6WyJtYXRoIiwic2l6ZSIsIm1hdGgiXX0saGFuZGxlcjpvKCh0LGUpPT57dmFye3BhcnNlcjpyLGZ1bmNOYW1lOm59PXQsaT1lWzBdLGE9XzRlKHhyKGVbMV0sImluZml4Iikuc2l6ZSkscz1lWzJdLGw9YS5udW1iZXI+MDtyZXR1cm57dHlwZToiZ2VuZnJhYyIsbW9kZTpyLm1vZGUsbnVtZXI6aSxkZW5vbTpzLGNvbnRpbnVlZDohMSxoYXNCYXJMaW5lOmwsYmFyU2l6ZTphLGxlZnREZWxpbTpudWxsLHJpZ2h0RGVsaW06bnVsbCxzaXplOiJhdXRvIn19LCJoYW5kbGVyIiksaHRtbEJ1aWxkZXI6cEEsbWF0aG1sQnVpbGRlcjptQX0pO3VWPW8oKHQsZSk9Pnt2YXIgcj1lLnN0eWxlLG4saTt0LnR5cGU9PT0ic3Vwc3ViIj8obj10LnN1cD8kcih0LnN1cCxlLmhhdmluZ1N0eWxlKHIuc3VwKCkpLGUpOiRyKHQuc3ViLGUuaGF2aW5nU3R5bGUoci5zdWIoKSksZSksaT14cih0LmJhc2UsImhvcml6QnJhY2UiKSk6aT14cih0LCJob3JpekJyYWNlIik7dmFyIGE9JHIoaS5iYXNlLGUuaGF2aW5nQmFzZVN0eWxlKG5yLkRJU1BMQVkpKSxzPWR1LnN2Z1NwYW4oaSxlKSxsO2lmKGkuaXNPdmVyPyhsPUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJmaXJzdEJhc2VsaW5lIixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06YX0se3R5cGU6Imtlcm4iLHNpemU6LjF9LHt0eXBlOiJlbGVtIixlbGVtOnN9XX0sZSksbC5jaGlsZHJlblswXS5jaGlsZHJlblswXS5jaGlsZHJlblsxXS5jbGFzc2VzLnB1c2goInN2Zy1hbGlnbiIpKToobD1GZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiYm90dG9tIixwb3NpdGlvbkRhdGE6YS5kZXB0aCsuMStzLmhlaWdodCxjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06c30se3R5cGU6Imtlcm4iLHNpemU6LjF9LHt0eXBlOiJlbGVtIixlbGVtOmF9XX0sZSksbC5jaGlsZHJlblswXS5jaGlsZHJlblswXS5jaGlsZHJlblswXS5jbGFzc2VzLnB1c2goInN2Zy1hbGlnbiIpKSxuKXt2YXIgdT1GZS5tYWtlU3BhbihbIm1vcmQiLGkuaXNPdmVyPyJtb3ZlciI6Im11bmRlciJdLFtsXSxlKTtpLmlzT3Zlcj9sPUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJmaXJzdEJhc2VsaW5lIixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06dX0se3R5cGU6Imtlcm4iLHNpemU6LjJ9LHt0eXBlOiJlbGVtIixlbGVtOm59XX0sZSk6bD1GZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiYm90dG9tIixwb3NpdGlvbkRhdGE6dS5kZXB0aCsuMituLmhlaWdodCtuLmRlcHRoLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTpufSx7dHlwZToia2VybiIsc2l6ZTouMn0se3R5cGU6ImVsZW0iLGVsZW06dX1dfSxlKX1yZXR1cm4gRmUubWFrZVNwYW4oWyJtb3JkIixpLmlzT3Zlcj8ibW92ZXIiOiJtdW5kZXIiXSxbbF0sZSl9LCJodG1sQnVpbGRlciQzIiksSzNlPW8oKHQsZSk9Pnt2YXIgcj1kdS5tYXRoTUxub2RlKHQubGFiZWwpO3JldHVybiBuZXcgZHQuTWF0aE5vZGUodC5pc092ZXI/Im1vdmVyIjoibXVuZGVyIixbdm4odC5iYXNlLGUpLHJdKX0sIm1hdGhtbEJ1aWxkZXIkMiIpO050KHt0eXBlOiJob3JpekJyYWNlIixuYW1lczpbIlxcb3ZlcmJyYWNlIiwiXFx1bmRlcmJyYWNlIl0scHJvcHM6e251bUFyZ3M6MX0saGFuZGxlcih0LGUpe3ZhcntwYXJzZXI6cixmdW5jTmFtZTpufT10O3JldHVybnt0eXBlOiJob3JpekJyYWNlIixtb2RlOnIubW9kZSxsYWJlbDpuLGlzT3ZlcjovXlxcb3Zlci8udGVzdChuKSxiYXNlOmVbMF19fSxodG1sQnVpbGRlcjp1VixtYXRobWxCdWlsZGVyOkszZX0pO050KHt0eXBlOiJocmVmIixuYW1lczpbIlxcaHJlZiJdLHByb3BzOntudW1BcmdzOjIsYXJnVHlwZXM6WyJ1cmwiLCJvcmlnaW5hbCJdLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXI6bygodCxlKT0+e3ZhcntwYXJzZXI6cn09dCxuPWVbMV0saT14cihlWzBdLCJ1cmwiKS51cmw7cmV0dXJuIHIuc2V0dGluZ3MuaXNUcnVzdGVkKHtjb21tYW5kOiJcXGhyZWYiLHVybDppfSk/e3R5cGU6ImhyZWYiLG1vZGU6ci5tb2RlLGhyZWY6aSxib2R5OmdpKG4pfTpyLmZvcm1hdFVuc3VwcG9ydGVkQ21kKCJcXGhyZWYiKX0sImhhbmRsZXIiKSxodG1sQnVpbGRlcjpvKCh0LGUpPT57dmFyIHI9JGkodC5ib2R5LGUsITEpO3JldHVybiBGZS5tYWtlQW5jaG9yKHQuaHJlZixbXSxyLGUpfSwiaHRtbEJ1aWxkZXIiKSxtYXRobWxCdWlsZGVyOm8oKHQsZSk9Pnt2YXIgcj14aCh0LmJvZHksZSk7cmV0dXJuIHIgaW5zdGFuY2VvZiB0c3x8KHI9bmV3IHRzKCJtcm93Iixbcl0pKSxyLnNldEF0dHJpYnV0ZSgiaHJlZiIsdC5ocmVmKSxyfSwibWF0aG1sQnVpbGRlciIpfSk7TnQoe3R5cGU6ImhyZWYiLG5hbWVzOlsiXFx1cmwiXSxwcm9wczp7bnVtQXJnczoxLGFyZ1R5cGVzOlsidXJsIl0sYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcjpvKCh0LGUpPT57dmFye3BhcnNlcjpyfT10LG49eHIoZVswXSwidXJsIikudXJsO2lmKCFyLnNldHRpbmdzLmlzVHJ1c3RlZCh7Y29tbWFuZDoiXFx1cmwiLHVybDpufSkpcmV0dXJuIHIuZm9ybWF0VW5zdXBwb3J0ZWRDbWQoIlxcdXJsIik7Zm9yKHZhciBpPVtdLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIHM9blthXTtzPT09In4iJiYocz0iXFx0ZXh0YXNjaWl0aWxkZSIpLGkucHVzaCh7dHlwZToidGV4dG9yZCIsbW9kZToidGV4dCIsdGV4dDpzfSl9dmFyIGw9e3R5cGU6InRleHQiLG1vZGU6ci5tb2RlLGZvbnQ6IlxcdGV4dHR0Iixib2R5Oml9O3JldHVybnt0eXBlOiJocmVmIixtb2RlOnIubW9kZSxocmVmOm4sYm9keTpnaShsKX19LCJoYW5kbGVyIil9KTtOdCh7dHlwZToiaGJveCIsbmFtZXM6WyJcXGhib3giXSxwcm9wczp7bnVtQXJnczoxLGFyZ1R5cGVzOlsidGV4dCJdLGFsbG93ZWRJblRleHQ6ITAscHJpbWl0aXZlOiEwfSxoYW5kbGVyKHQsZSl7dmFye3BhcnNlcjpyfT10O3JldHVybnt0eXBlOiJoYm94Iixtb2RlOnIubW9kZSxib2R5OmdpKGVbMF0pfX0saHRtbEJ1aWxkZXIodCxlKXt2YXIgcj0kaSh0LmJvZHksZSwhMSk7cmV0dXJuIEZlLm1ha2VGcmFnbWVudChyKX0sbWF0aG1sQnVpbGRlcih0LGUpe3JldHVybiBuZXcgZHQuTWF0aE5vZGUoIm1yb3ciLF9zKHQuYm9keSxlKSl9fSk7TnQoe3R5cGU6Imh0bWwiLG5hbWVzOlsiXFxodG1sQ2xhc3MiLCJcXGh0bWxJZCIsIlxcaHRtbFN0eWxlIiwiXFxodG1sRGF0YSJdLHByb3BzOntudW1BcmdzOjIsYXJnVHlwZXM6WyJyYXciLCJvcmlnaW5hbCJdLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXI6bygodCxlKT0+e3ZhcntwYXJzZXI6cixmdW5jTmFtZTpuLHRva2VuOml9PXQsYT14cihlWzBdLCJyYXciKS5zdHJpbmcscz1lWzFdO3Iuc2V0dGluZ3Muc3RyaWN0JiZyLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdCgiaHRtbEV4dGVuc2lvbiIsIkhUTUwgZXh0ZW5zaW9uIGlzIGRpc2FibGVkIG9uIHN0cmljdCBtb2RlIik7dmFyIGwsdT17fTtzd2l0Y2gobil7Y2FzZSJcXGh0bWxDbGFzcyI6dS5jbGFzcz1hLGw9e2NvbW1hbmQ6IlxcaHRtbENsYXNzIixjbGFzczphfTticmVhaztjYXNlIlxcaHRtbElkIjp1LmlkPWEsbD17Y29tbWFuZDoiXFxodG1sSWQiLGlkOmF9O2JyZWFrO2Nhc2UiXFxodG1sU3R5bGUiOnUuc3R5bGU9YSxsPXtjb21tYW5kOiJcXGh0bWxTdHlsZSIsc3R5bGU6YX07YnJlYWs7Y2FzZSJcXGh0bWxEYXRhIjp7Zm9yKHZhciBoPWEuc3BsaXQoIiwiKSxmPTA7ZjxoLmxlbmd0aDtmKyspe3ZhciBkPWhbZl0uc3BsaXQoIj0iKTtpZihkLmxlbmd0aCE9PTIpdGhyb3cgbmV3IHB0KCJFcnJvciBwYXJzaW5nIGtleS12YWx1ZSBmb3IgXFxodG1sRGF0YSIpO3VbImRhdGEtIitkWzBdLnRyaW0oKV09ZFsxXS50cmltKCl9bD17Y29tbWFuZDoiXFxodG1sRGF0YSIsYXR0cmlidXRlczp1fTticmVha31kZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIGh0bWwgY29tbWFuZCIpfXJldHVybiByLnNldHRpbmdzLmlzVHJ1c3RlZChsKT97dHlwZToiaHRtbCIsbW9kZTpyLm1vZGUsYXR0cmlidXRlczp1LGJvZHk6Z2kocyl9OnIuZm9ybWF0VW5zdXBwb3J0ZWRDbWQobil9LCJoYW5kbGVyIiksaHRtbEJ1aWxkZXI6bygodCxlKT0+e3ZhciByPSRpKHQuYm9keSxlLCExKSxuPVsiZW5jbG9zaW5nIl07dC5hdHRyaWJ1dGVzLmNsYXNzJiZuLnB1c2goLi4udC5hdHRyaWJ1dGVzLmNsYXNzLnRyaW0oKS5zcGxpdCgvXHMrLykpO3ZhciBpPUZlLm1ha2VTcGFuKG4scixlKTtmb3IodmFyIGEgaW4gdC5hdHRyaWJ1dGVzKWEhPT0iY2xhc3MiJiZ0LmF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkoYSkmJmkuc2V0QXR0cmlidXRlKGEsdC5hdHRyaWJ1dGVzW2FdKTtyZXR1cm4gaX0sImh0bWxCdWlsZGVyIiksbWF0aG1sQnVpbGRlcjpvKCh0LGUpPT54aCh0LmJvZHksZSksIm1hdGhtbEJ1aWxkZXIiKX0pO050KHt0eXBlOiJodG1sbWF0aG1sIixuYW1lczpbIlxcaHRtbEBtYXRobWwiXSxwcm9wczp7bnVtQXJnczoyLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXI6bygodCxlKT0+e3ZhcntwYXJzZXI6cn09dDtyZXR1cm57dHlwZToiaHRtbG1hdGhtbCIsbW9kZTpyLm1vZGUsaHRtbDpnaShlWzBdKSxtYXRobWw6Z2koZVsxXSl9fSwiaGFuZGxlciIpLGh0bWxCdWlsZGVyOm8oKHQsZSk9Pnt2YXIgcj0kaSh0Lmh0bWwsZSwhMSk7cmV0dXJuIEZlLm1ha2VGcmFnbWVudChyKX0sImh0bWxCdWlsZGVyIiksbWF0aG1sQnVpbGRlcjpvKCh0LGUpPT54aCh0Lm1hdGhtbCxlKSwibWF0aG1sQnVpbGRlciIpfSk7ejc9byhmdW5jdGlvbihlKXtpZigvXlstK10/ICooXGQrKFwuXGQqKT98XC5cZCspJC8udGVzdChlKSlyZXR1cm57bnVtYmVyOitlLHVuaXQ6ImJwIn07dmFyIHI9LyhbLStdPykgKihcZCsoPzpcLlxkKik/fFwuXGQrKSAqKFthLXpdezJ9KS8uZXhlYyhlKTtpZighcil0aHJvdyBuZXcgcHQoIkludmFsaWQgc2l6ZTogJyIrZSsiJyBpbiBcXGluY2x1ZGVncmFwaGljcyIpO3ZhciBuPXtudW1iZXI6KyhyWzFdK3JbMl0pLHVuaXQ6clszXX07aWYoIURHKG4pKXRocm93IG5ldyBwdCgiSW52YWxpZCB1bml0OiAnIituLnVuaXQrIicgaW4gXFxpbmNsdWRlZ3JhcGhpY3MuIik7cmV0dXJuIG59LCJzaXplRGF0YSIpO050KHt0eXBlOiJpbmNsdWRlZ3JhcGhpY3MiLG5hbWVzOlsiXFxpbmNsdWRlZ3JhcGhpY3MiXSxwcm9wczp7bnVtQXJnczoxLG51bU9wdGlvbmFsQXJnczoxLGFyZ1R5cGVzOlsicmF3IiwidXJsIl0sYWxsb3dlZEluVGV4dDohMX0saGFuZGxlcjpvKCh0LGUscik9Pnt2YXJ7cGFyc2VyOm59PXQsaT17bnVtYmVyOjAsdW5pdDoiZW0ifSxhPXtudW1iZXI6LjksdW5pdDoiZW0ifSxzPXtudW1iZXI6MCx1bml0OiJlbSJ9LGw9IiI7aWYoclswXSlmb3IodmFyIHU9eHIoclswXSwicmF3Iikuc3RyaW5nLGg9dS5zcGxpdCgiLCIpLGY9MDtmPGgubGVuZ3RoO2YrKyl7dmFyIGQ9aFtmXS5zcGxpdCgiPSIpO2lmKGQubGVuZ3RoPT09Mil7dmFyIHA9ZFsxXS50cmltKCk7c3dpdGNoKGRbMF0udHJpbSgpKXtjYXNlImFsdCI6bD1wO2JyZWFrO2Nhc2Uid2lkdGgiOmk9ejcocCk7YnJlYWs7Y2FzZSJoZWlnaHQiOmE9ejcocCk7YnJlYWs7Y2FzZSJ0b3RhbGhlaWdodCI6cz16NyhwKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBwdCgiSW52YWxpZCBrZXk6ICciK2RbMF0rIicgaW4gXFxpbmNsdWRlZ3JhcGhpY3MuIil9fX12YXIgbT14cihlWzBdLCJ1cmwiKS51cmw7cmV0dXJuIGw9PT0iIiYmKGw9bSxsPWwucmVwbGFjZSgvXi4qW1xcL10vLCIiKSxsPWwuc3Vic3RyaW5nKDAsbC5sYXN0SW5kZXhPZigiLiIpKSksbi5zZXR0aW5ncy5pc1RydXN0ZWQoe2NvbW1hbmQ6IlxcaW5jbHVkZWdyYXBoaWNzIix1cmw6bX0pP3t0eXBlOiJpbmNsdWRlZ3JhcGhpY3MiLG1vZGU6bi5tb2RlLGFsdDpsLHdpZHRoOmksaGVpZ2h0OmEsdG90YWxoZWlnaHQ6cyxzcmM6bX06bi5mb3JtYXRVbnN1cHBvcnRlZENtZCgiXFxpbmNsdWRlZ3JhcGhpY3MiKX0sImhhbmRsZXIiKSxodG1sQnVpbGRlcjpvKCh0LGUpPT57dmFyIHI9bmkodC5oZWlnaHQsZSksbj0wO3QudG90YWxoZWlnaHQubnVtYmVyPjAmJihuPW5pKHQudG90YWxoZWlnaHQsZSktcik7dmFyIGk9MDt0LndpZHRoLm51bWJlcj4wJiYoaT1uaSh0LndpZHRoLGUpKTt2YXIgYT17aGVpZ2h0OkV0KHIrbil9O2k+MCYmKGEud2lkdGg9RXQoaSkpLG4+MCYmKGEudmVydGljYWxBbGlnbj1FdCgtbikpO3ZhciBzPW5ldyBxNyh0LnNyYyx0LmFsdCxhKTtyZXR1cm4gcy5oZWlnaHQ9cixzLmRlcHRoPW4sc30sImh0bWxCdWlsZGVyIiksbWF0aG1sQnVpbGRlcjpvKCh0LGUpPT57dmFyIHI9bmV3IGR0Lk1hdGhOb2RlKCJtZ2x5cGgiLFtdKTtyLnNldEF0dHJpYnV0ZSgiYWx0Iix0LmFsdCk7dmFyIG49bmkodC5oZWlnaHQsZSksaT0wO2lmKHQudG90YWxoZWlnaHQubnVtYmVyPjAmJihpPW5pKHQudG90YWxoZWlnaHQsZSktbixyLnNldEF0dHJpYnV0ZSgidmFsaWduIixFdCgtaSkpKSxyLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IixFdChuK2kpKSx0LndpZHRoLm51bWJlcj4wKXt2YXIgYT1uaSh0LndpZHRoLGUpO3Iuc2V0QXR0cmlidXRlKCJ3aWR0aCIsRXQoYSkpfXJldHVybiByLnNldEF0dHJpYnV0ZSgic3JjIix0LnNyYykscn0sIm1hdGhtbEJ1aWxkZXIiKX0pO050KHt0eXBlOiJrZXJuIixuYW1lczpbIlxca2VybiIsIlxcbWtlcm4iLCJcXGhza2lwIiwiXFxtc2tpcCJdLHByb3BzOntudW1BcmdzOjEsYXJnVHlwZXM6WyJzaXplIl0scHJpbWl0aXZlOiEwLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXIodCxlKXt2YXJ7cGFyc2VyOnIsZnVuY05hbWU6bn09dCxpPXhyKGVbMF0sInNpemUiKTtpZihyLnNldHRpbmdzLnN0cmljdCl7dmFyIGE9blsxXT09PSJtIixzPWkudmFsdWUudW5pdD09PSJtdSI7YT8oc3x8ci5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoIm1hdGhWc1RleHRVbml0cyIsIkxhVGVYJ3MgIituKyIgc3VwcG9ydHMgb25seSBtdSB1bml0cywgIisoIm5vdCAiK2kudmFsdWUudW5pdCsiIHVuaXRzIikpLHIubW9kZSE9PSJtYXRoIiYmci5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoIm1hdGhWc1RleHRVbml0cyIsIkxhVGVYJ3MgIituKyIgd29ya3Mgb25seSBpbiBtYXRoIG1vZGUiKSk6cyYmci5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoIm1hdGhWc1RleHRVbml0cyIsIkxhVGVYJ3MgIituKyIgZG9lc24ndCBzdXBwb3J0IG11IHVuaXRzIil9cmV0dXJue3R5cGU6Imtlcm4iLG1vZGU6ci5tb2RlLGRpbWVuc2lvbjppLnZhbHVlfX0saHRtbEJ1aWxkZXIodCxlKXtyZXR1cm4gRmUubWFrZUdsdWUodC5kaW1lbnNpb24sZSl9LG1hdGhtbEJ1aWxkZXIodCxlKXt2YXIgcj1uaSh0LmRpbWVuc2lvbixlKTtyZXR1cm4gbmV3IGR0LlNwYWNlTm9kZShyKX19KTtOdCh7dHlwZToibGFwIixuYW1lczpbIlxcbWF0aGxsYXAiLCJcXG1hdGhybGFwIiwiXFxtYXRoY2xhcCJdLHByb3BzOntudW1BcmdzOjEsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcjpvKCh0LGUpPT57dmFye3BhcnNlcjpyLGZ1bmNOYW1lOm59PXQsaT1lWzBdO3JldHVybnt0eXBlOiJsYXAiLG1vZGU6ci5tb2RlLGFsaWdubWVudDpuLnNsaWNlKDUpLGJvZHk6aX19LCJoYW5kbGVyIiksaHRtbEJ1aWxkZXI6bygodCxlKT0+e3ZhciByO3QuYWxpZ25tZW50PT09ImNsYXAiPyhyPUZlLm1ha2VTcGFuKFtdLFskcih0LmJvZHksZSldKSxyPUZlLm1ha2VTcGFuKFsiaW5uZXIiXSxbcl0sZSkpOnI9RmUubWFrZVNwYW4oWyJpbm5lciJdLFskcih0LmJvZHksZSldKTt2YXIgbj1GZS5tYWtlU3BhbihbImZpeCJdLFtdKSxpPUZlLm1ha2VTcGFuKFt0LmFsaWdubWVudF0sW3Isbl0sZSksYT1GZS5tYWtlU3BhbihbInN0cnV0Il0pO3JldHVybiBhLnN0eWxlLmhlaWdodD1FdChpLmhlaWdodCtpLmRlcHRoKSxpLmRlcHRoJiYoYS5zdHlsZS52ZXJ0aWNhbEFsaWduPUV0KC1pLmRlcHRoKSksaS5jaGlsZHJlbi51bnNoaWZ0KGEpLGk9RmUubWFrZVNwYW4oWyJ0aGluYm94Il0sW2ldLGUpLEZlLm1ha2VTcGFuKFsibW9yZCIsInZib3giXSxbaV0sZSl9LCJodG1sQnVpbGRlciIpLG1hdGhtbEJ1aWxkZXI6bygodCxlKT0+e3ZhciByPW5ldyBkdC5NYXRoTm9kZSgibXBhZGRlZCIsW3ZuKHQuYm9keSxlKV0pO2lmKHQuYWxpZ25tZW50IT09InJsYXAiKXt2YXIgbj10LmFsaWdubWVudD09PSJsbGFwIj8iLTEiOiItMC41IjtyLnNldEF0dHJpYnV0ZSgibHNwYWNlIixuKyJ3aWR0aCIpfXJldHVybiByLnNldEF0dHJpYnV0ZSgid2lkdGgiLCIwcHgiKSxyfSwibWF0aG1sQnVpbGRlciIpfSk7TnQoe3R5cGU6InN0eWxpbmciLG5hbWVzOlsiXFwoIiwiJCJdLHByb3BzOntudW1BcmdzOjAsYWxsb3dlZEluVGV4dDohMCxhbGxvd2VkSW5NYXRoOiExfSxoYW5kbGVyKHQsZSl7dmFye2Z1bmNOYW1lOnIscGFyc2VyOm59PXQsaT1uLm1vZGU7bi5zd2l0Y2hNb2RlKCJtYXRoIik7dmFyIGE9cj09PSJcXCgiPyJcXCkiOiIkIixzPW4ucGFyc2VFeHByZXNzaW9uKCExLGEpO3JldHVybiBuLmV4cGVjdChhKSxuLnN3aXRjaE1vZGUoaSkse3R5cGU6InN0eWxpbmciLG1vZGU6bi5tb2RlLHN0eWxlOiJ0ZXh0Iixib2R5OnN9fX0pO050KHt0eXBlOiJ0ZXh0IixuYW1lczpbIlxcKSIsIlxcXSJdLHByb3BzOntudW1BcmdzOjAsYWxsb3dlZEluVGV4dDohMCxhbGxvd2VkSW5NYXRoOiExfSxoYW5kbGVyKHQsZSl7dGhyb3cgbmV3IHB0KCJNaXNtYXRjaGVkICIrdC5mdW5jTmFtZSl9fSk7cEc9bygodCxlKT0+e3N3aXRjaChlLnN0eWxlLnNpemUpe2Nhc2UgbnIuRElTUExBWS5zaXplOnJldHVybiB0LmRpc3BsYXk7Y2FzZSBuci5URVhULnNpemU6cmV0dXJuIHQudGV4dDtjYXNlIG5yLlNDUklQVC5zaXplOnJldHVybiB0LnNjcmlwdDtjYXNlIG5yLlNDUklQVFNDUklQVC5zaXplOnJldHVybiB0LnNjcmlwdHNjcmlwdDtkZWZhdWx0OnJldHVybiB0LnRleHR9fSwiY2hvb3NlTWF0aFN0eWxlIik7TnQoe3R5cGU6Im1hdGhjaG9pY2UiLG5hbWVzOlsiXFxtYXRoY2hvaWNlIl0scHJvcHM6e251bUFyZ3M6NCxwcmltaXRpdmU6ITB9LGhhbmRsZXI6bygodCxlKT0+e3ZhcntwYXJzZXI6cn09dDtyZXR1cm57dHlwZToibWF0aGNob2ljZSIsbW9kZTpyLm1vZGUsZGlzcGxheTpnaShlWzBdKSx0ZXh0OmdpKGVbMV0pLHNjcmlwdDpnaShlWzJdKSxzY3JpcHRzY3JpcHQ6Z2koZVszXSl9fSwiaGFuZGxlciIpLGh0bWxCdWlsZGVyOm8oKHQsZSk9Pnt2YXIgcj1wRyh0LGUpLG49JGkocixlLCExKTtyZXR1cm4gRmUubWFrZUZyYWdtZW50KG4pfSwiaHRtbEJ1aWxkZXIiKSxtYXRobWxCdWlsZGVyOm8oKHQsZSk9Pnt2YXIgcj1wRyh0LGUpO3JldHVybiB4aChyLGUpfSwibWF0aG1sQnVpbGRlciIpfSk7aFY9bygodCxlLHIsbixpLGEscyk9Pnt0PUZlLm1ha2VTcGFuKFtdLFt0XSk7dmFyIGw9ciYmSnQuaXNDaGFyYWN0ZXJCb3gociksdSxoO2lmKGUpe3ZhciBmPSRyKGUsbi5oYXZpbmdTdHlsZShpLnN1cCgpKSxuKTtoPXtlbGVtOmYsa2VybjpNYXRoLm1heChuLmZvbnRNZXRyaWNzKCkuYmlnT3BTcGFjaW5nMSxuLmZvbnRNZXRyaWNzKCkuYmlnT3BTcGFjaW5nMy1mLmRlcHRoKX19aWYocil7dmFyIGQ9JHIocixuLmhhdmluZ1N0eWxlKGkuc3ViKCkpLG4pO3U9e2VsZW06ZCxrZXJuOk1hdGgubWF4KG4uZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmcyLG4uZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmc0LWQuaGVpZ2h0KX19dmFyIHA7aWYoaCYmdSl7dmFyIG09bi5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzUrdS5lbGVtLmhlaWdodCt1LmVsZW0uZGVwdGgrdS5rZXJuK3QuZGVwdGgrcztwPUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJib3R0b20iLHBvc2l0aW9uRGF0YTptLGNoaWxkcmVuOlt7dHlwZToia2VybiIsc2l6ZTpuLmZvbnRNZXRyaWNzKCkuYmlnT3BTcGFjaW5nNX0se3R5cGU6ImVsZW0iLGVsZW06dS5lbGVtLG1hcmdpbkxlZnQ6RXQoLWEpfSx7dHlwZToia2VybiIsc2l6ZTp1Lmtlcm59LHt0eXBlOiJlbGVtIixlbGVtOnR9LHt0eXBlOiJrZXJuIixzaXplOmgua2Vybn0se3R5cGU6ImVsZW0iLGVsZW06aC5lbGVtLG1hcmdpbkxlZnQ6RXQoYSl9LHt0eXBlOiJrZXJuIixzaXplOm4uZm9udE1ldHJpY3MoKS5iaWdPcFNwYWNpbmc1fV19LG4pfWVsc2UgaWYodSl7dmFyIGc9dC5oZWlnaHQtcztwPUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJ0b3AiLHBvc2l0aW9uRGF0YTpnLGNoaWxkcmVuOlt7dHlwZToia2VybiIsc2l6ZTpuLmZvbnRNZXRyaWNzKCkuYmlnT3BTcGFjaW5nNX0se3R5cGU6ImVsZW0iLGVsZW06dS5lbGVtLG1hcmdpbkxlZnQ6RXQoLWEpfSx7dHlwZToia2VybiIsc2l6ZTp1Lmtlcm59LHt0eXBlOiJlbGVtIixlbGVtOnR9XX0sbil9ZWxzZSBpZihoKXt2YXIgeT10LmRlcHRoK3M7cD1GZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiYm90dG9tIixwb3NpdGlvbkRhdGE6eSxjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06dH0se3R5cGU6Imtlcm4iLHNpemU6aC5rZXJufSx7dHlwZToiZWxlbSIsZWxlbTpoLmVsZW0sbWFyZ2luTGVmdDpFdChhKX0se3R5cGU6Imtlcm4iLHNpemU6bi5mb250TWV0cmljcygpLmJpZ09wU3BhY2luZzV9XX0sbil9ZWxzZSByZXR1cm4gdDt2YXIgdj1bcF07aWYodSYmYSE9PTAmJiFsKXt2YXIgeD1GZS5tYWtlU3BhbihbIm1zcGFjZSJdLFtdLG4pO3guc3R5bGUubWFyZ2luUmlnaHQ9RXQoYSksdi51bnNoaWZ0KHgpfXJldHVybiBGZS5tYWtlU3BhbihbIm1vcCIsIm9wLWxpbWl0cyJdLHYsbil9LCJhc3NlbWJsZVN1cFN1YiIpLGZWPVsiXFxzbWFsbGludCJdLFMwPW8oKHQsZSk9Pnt2YXIgcixuLGk9ITEsYTt0LnR5cGU9PT0ic3Vwc3ViIj8ocj10LnN1cCxuPXQuc3ViLGE9eHIodC5iYXNlLCJvcCIpLGk9ITApOmE9eHIodCwib3AiKTt2YXIgcz1lLnN0eWxlLGw9ITE7cy5zaXplPT09bnIuRElTUExBWS5zaXplJiZhLnN5bWJvbCYmIUp0LmNvbnRhaW5zKGZWLGEubmFtZSkmJihsPSEwKTt2YXIgdTtpZihhLnN5bWJvbCl7dmFyIGg9bD8iU2l6ZTItUmVndWxhciI6IlNpemUxLVJlZ3VsYXIiLGY9IiI7aWYoKGEubmFtZT09PSJcXG9paW50Inx8YS5uYW1lPT09Ilxcb2lpaW50IikmJihmPWEubmFtZS5zbGljZSgxKSxhLm5hbWU9Zj09PSJvaWludCI/IlxcaWludCI6IlxcaWlpbnQiKSx1PUZlLm1ha2VTeW1ib2woYS5uYW1lLGgsIm1hdGgiLGUsWyJtb3AiLCJvcC1zeW1ib2wiLGw/ImxhcmdlLW9wIjoic21hbGwtb3AiXSksZi5sZW5ndGg+MCl7dmFyIGQ9dS5pdGFsaWMscD1GZS5zdGF0aWNTdmcoZisiU2l6ZSIrKGw/IjIiOiIxIiksZSk7dT1GZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToiaW5kaXZpZHVhbFNoaWZ0IixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06dSxzaGlmdDowfSx7dHlwZToiZWxlbSIsZWxlbTpwLHNoaWZ0Omw/LjA4OjB9XX0sZSksYS5uYW1lPSJcXCIrZix1LmNsYXNzZXMudW5zaGlmdCgibW9wIiksdS5pdGFsaWM9ZH19ZWxzZSBpZihhLmJvZHkpe3ZhciBtPSRpKGEuYm9keSxlLCEwKTttLmxlbmd0aD09PTEmJm1bMF1pbnN0YW5jZW9mIEFzPyh1PW1bMF0sdS5jbGFzc2VzWzBdPSJtb3AiKTp1PUZlLm1ha2VTcGFuKFsibW9wIl0sbSxlKX1lbHNle2Zvcih2YXIgZz1bXSx5PTE7eTxhLm5hbWUubGVuZ3RoO3krKylnLnB1c2goRmUubWF0aHN5bShhLm5hbWVbeV0sYS5tb2RlLGUpKTt1PUZlLm1ha2VTcGFuKFsibW9wIl0sZyxlKX12YXIgdj0wLHg9MDtyZXR1cm4odSBpbnN0YW5jZW9mIEFzfHxhLm5hbWU9PT0iXFxvaWludCJ8fGEubmFtZT09PSJcXG9paWludCIpJiYhYS5zdXBwcmVzc0Jhc2VTaGlmdCYmKHY9KHUuaGVpZ2h0LXUuZGVwdGgpLzItZS5mb250TWV0cmljcygpLmF4aXNIZWlnaHQseD11Lml0YWxpYyksaT9oVih1LHIsbixlLHMseCx2KToodiYmKHUuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIix1LnN0eWxlLnRvcD1FdCh2KSksdSl9LCJodG1sQnVpbGRlciQyIiksdHY9bygodCxlKT0+e3ZhciByO2lmKHQuc3ltYm9sKXI9bmV3IHRzKCJtbyIsW0RvKHQubmFtZSx0Lm1vZGUpXSksSnQuY29udGFpbnMoZlYsdC5uYW1lKSYmci5zZXRBdHRyaWJ1dGUoImxhcmdlb3AiLCJmYWxzZSIpO2Vsc2UgaWYodC5ib2R5KXI9bmV3IHRzKCJtbyIsX3ModC5ib2R5LGUpKTtlbHNle3I9bmV3IHRzKCJtaSIsW25ldyBBbyh0Lm5hbWUuc2xpY2UoMSkpXSk7dmFyIG49bmV3IHRzKCJtbyIsW0RvKCJcdTIwNjEiLCJ0ZXh0IildKTt0LnBhcmVudElzU3VwU3ViP3I9bmV3IHRzKCJtcm93IixbcixuXSk6cj16RyhbcixuXSl9cmV0dXJuIHJ9LCJtYXRobWxCdWlsZGVyJDEiKSxRM2U9eyJcdTIyMEYiOiJcXHByb2QiLCJcdTIyMTAiOiJcXGNvcHJvZCIsIlx1MjIxMSI6Ilxcc3VtIiwiXHUyMkMwIjoiXFxiaWd3ZWRnZSIsIlx1MjJDMSI6IlxcYmlndmVlIiwiXHUyMkMyIjoiXFxiaWdjYXAiLCJcdTIyQzMiOiJcXGJpZ2N1cCIsIlx1MkEwMCI6IlxcYmlnb2RvdCIsIlx1MkEwMSI6IlxcYmlnb3BsdXMiLCJcdTJBMDIiOiJcXGJpZ290aW1lcyIsIlx1MkEwNCI6IlxcYmlndXBsdXMiLCJcdTJBMDYiOiJcXGJpZ3NxY3VwIn07TnQoe3R5cGU6Im9wIixuYW1lczpbIlxcY29wcm9kIiwiXFxiaWd2ZWUiLCJcXGJpZ3dlZGdlIiwiXFxiaWd1cGx1cyIsIlxcYmlnY2FwIiwiXFxiaWdjdXAiLCJcXGludG9wIiwiXFxwcm9kIiwiXFxzdW0iLCJcXGJpZ290aW1lcyIsIlxcYmlnb3BsdXMiLCJcXGJpZ29kb3QiLCJcXGJpZ3NxY3VwIiwiXFxzbWFsbGludCIsIlx1MjIwRiIsIlx1MjIxMCIsIlx1MjIxMSIsIlx1MjJDMCIsIlx1MjJDMSIsIlx1MjJDMiIsIlx1MjJDMyIsIlx1MkEwMCIsIlx1MkEwMSIsIlx1MkEwMiIsIlx1MkEwNCIsIlx1MkEwNiJdLHByb3BzOntudW1BcmdzOjB9LGhhbmRsZXI6bygodCxlKT0+e3ZhcntwYXJzZXI6cixmdW5jTmFtZTpufT10LGk9bjtyZXR1cm4gaS5sZW5ndGg9PT0xJiYoaT1RM2VbaV0pLHt0eXBlOiJvcCIsbW9kZTpyLm1vZGUsbGltaXRzOiEwLHBhcmVudElzU3VwU3ViOiExLHN5bWJvbDohMCxuYW1lOml9fSwiaGFuZGxlciIpLGh0bWxCdWlsZGVyOlMwLG1hdGhtbEJ1aWxkZXI6dHZ9KTtOdCh7dHlwZToib3AiLG5hbWVzOlsiXFxtYXRob3AiXSxwcm9wczp7bnVtQXJnczoxLHByaW1pdGl2ZTohMH0saGFuZGxlcjpvKCh0LGUpPT57dmFye3BhcnNlcjpyfT10LG49ZVswXTtyZXR1cm57dHlwZToib3AiLG1vZGU6ci5tb2RlLGxpbWl0czohMSxwYXJlbnRJc1N1cFN1YjohMSxzeW1ib2w6ITEsYm9keTpnaShuKX19LCJoYW5kbGVyIiksaHRtbEJ1aWxkZXI6UzAsbWF0aG1sQnVpbGRlcjp0dn0pO1ozZT17Ilx1MjIyQiI6IlxcaW50IiwiXHUyMjJDIjoiXFxpaW50IiwiXHUyMjJEIjoiXFxpaWludCIsIlx1MjIyRSI6Ilxcb2ludCIsIlx1MjIyRiI6Ilxcb2lpbnQiLCJcdTIyMzAiOiJcXG9paWludCJ9O050KHt0eXBlOiJvcCIsbmFtZXM6WyJcXGFyY3NpbiIsIlxcYXJjY29zIiwiXFxhcmN0YW4iLCJcXGFyY3RnIiwiXFxhcmNjdGciLCJcXGFyZyIsIlxcY2giLCJcXGNvcyIsIlxcY29zZWMiLCJcXGNvc2giLCJcXGNvdCIsIlxcY290ZyIsIlxcY290aCIsIlxcY3NjIiwiXFxjdGciLCJcXGN0aCIsIlxcZGVnIiwiXFxkaW0iLCJcXGV4cCIsIlxcaG9tIiwiXFxrZXIiLCJcXGxnIiwiXFxsbiIsIlxcbG9nIiwiXFxzZWMiLCJcXHNpbiIsIlxcc2luaCIsIlxcc2giLCJcXHRhbiIsIlxcdGFuaCIsIlxcdGciLCJcXHRoIl0scHJvcHM6e251bUFyZ3M6MH0saGFuZGxlcih0KXt2YXJ7cGFyc2VyOmUsZnVuY05hbWU6cn09dDtyZXR1cm57dHlwZToib3AiLG1vZGU6ZS5tb2RlLGxpbWl0czohMSxwYXJlbnRJc1N1cFN1YjohMSxzeW1ib2w6ITEsbmFtZTpyfX0saHRtbEJ1aWxkZXI6UzAsbWF0aG1sQnVpbGRlcjp0dn0pO050KHt0eXBlOiJvcCIsbmFtZXM6WyJcXGRldCIsIlxcZ2NkIiwiXFxpbmYiLCJcXGxpbSIsIlxcbWF4IiwiXFxtaW4iLCJcXFByIiwiXFxzdXAiXSxwcm9wczp7bnVtQXJnczowfSxoYW5kbGVyKHQpe3ZhcntwYXJzZXI6ZSxmdW5jTmFtZTpyfT10O3JldHVybnt0eXBlOiJvcCIsbW9kZTplLm1vZGUsbGltaXRzOiEwLHBhcmVudElzU3VwU3ViOiExLHN5bWJvbDohMSxuYW1lOnJ9fSxodG1sQnVpbGRlcjpTMCxtYXRobWxCdWlsZGVyOnR2fSk7TnQoe3R5cGU6Im9wIixuYW1lczpbIlxcaW50IiwiXFxpaW50IiwiXFxpaWludCIsIlxcb2ludCIsIlxcb2lpbnQiLCJcXG9paWludCIsIlx1MjIyQiIsIlx1MjIyQyIsIlx1MjIyRCIsIlx1MjIyRSIsIlx1MjIyRiIsIlx1MjIzMCJdLHByb3BzOntudW1BcmdzOjB9LGhhbmRsZXIodCl7dmFye3BhcnNlcjplLGZ1bmNOYW1lOnJ9PXQsbj1yO3JldHVybiBuLmxlbmd0aD09PTEmJihuPVozZVtuXSkse3R5cGU6Im9wIixtb2RlOmUubW9kZSxsaW1pdHM6ITEscGFyZW50SXNTdXBTdWI6ITEsc3ltYm9sOiEwLG5hbWU6bn19LGh0bWxCdWlsZGVyOlMwLG1hdGhtbEJ1aWxkZXI6dHZ9KTtkVj1vKCh0LGUpPT57dmFyIHIsbixpPSExLGE7dC50eXBlPT09InN1cHN1YiI/KHI9dC5zdXAsbj10LnN1YixhPXhyKHQuYmFzZSwib3BlcmF0b3JuYW1lIiksaT0hMCk6YT14cih0LCJvcGVyYXRvcm5hbWUiKTt2YXIgcztpZihhLmJvZHkubGVuZ3RoPjApe2Zvcih2YXIgbD1hLmJvZHkubWFwKGQ9Pnt2YXIgcD1kLnRleHQ7cmV0dXJuIHR5cGVvZiBwPT0ic3RyaW5nIj97dHlwZToidGV4dG9yZCIsbW9kZTpkLm1vZGUsdGV4dDpwfTpkfSksdT0kaShsLGUud2l0aEZvbnQoIm1hdGhybSIpLCEwKSxoPTA7aDx1Lmxlbmd0aDtoKyspe3ZhciBmPXVbaF07ZiBpbnN0YW5jZW9mIEFzJiYoZi50ZXh0PWYudGV4dC5yZXBsYWNlKC9cdTIyMTIvLCItIikucmVwbGFjZSgvXHUyMjE3LywiKiIpKX1zPUZlLm1ha2VTcGFuKFsibW9wIl0sdSxlKX1lbHNlIHM9RmUubWFrZVNwYW4oWyJtb3AiXSxbXSxlKTtyZXR1cm4gaT9oVihzLHIsbixlLGUuc3R5bGUsMCwwKTpzfSwiaHRtbEJ1aWxkZXIkMSIpLEozZT1vKCh0LGUpPT57Zm9yKHZhciByPV9zKHQuYm9keSxlLndpdGhGb250KCJtYXRocm0iKSksbj0hMCxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBhPXJbaV07aWYoIShhIGluc3RhbmNlb2YgZHQuU3BhY2VOb2RlKSlpZihhIGluc3RhbmNlb2YgZHQuTWF0aE5vZGUpc3dpdGNoKGEudHlwZSl7Y2FzZSJtaSI6Y2FzZSJtbiI6Y2FzZSJtcyI6Y2FzZSJtc3BhY2UiOmNhc2UibXRleHQiOmJyZWFrO2Nhc2UibW8iOnt2YXIgcz1hLmNoaWxkcmVuWzBdO2EuY2hpbGRyZW4ubGVuZ3RoPT09MSYmcyBpbnN0YW5jZW9mIGR0LlRleHROb2RlP3MudGV4dD1zLnRleHQucmVwbGFjZSgvXHUyMjEyLywiLSIpLnJlcGxhY2UoL1x1MjIxNy8sIioiKTpuPSExO2JyZWFrfWRlZmF1bHQ6bj0hMX1lbHNlIG49ITF9aWYobil7dmFyIGw9ci5tYXAoZj0+Zi50b1RleHQoKSkuam9pbigiIik7cj1bbmV3IGR0LlRleHROb2RlKGwpXX12YXIgdT1uZXcgZHQuTWF0aE5vZGUoIm1pIixyKTt1LnNldEF0dHJpYnV0ZSgibWF0aHZhcmlhbnQiLCJub3JtYWwiKTt2YXIgaD1uZXcgZHQuTWF0aE5vZGUoIm1vIixbRG8oIlx1MjA2MSIsInRleHQiKV0pO3JldHVybiB0LnBhcmVudElzU3VwU3ViP25ldyBkdC5NYXRoTm9kZSgibXJvdyIsW3UsaF0pOmR0Lm5ld0RvY3VtZW50RnJhZ21lbnQoW3UsaF0pfSwibWF0aG1sQnVpbGRlciIpO050KHt0eXBlOiJvcGVyYXRvcm5hbWUiLG5hbWVzOlsiXFxvcGVyYXRvcm5hbWVAIiwiXFxvcGVyYXRvcm5hbWV3aXRobGltaXRzIl0scHJvcHM6e251bUFyZ3M6MX0saGFuZGxlcjpvKCh0LGUpPT57dmFye3BhcnNlcjpyLGZ1bmNOYW1lOm59PXQsaT1lWzBdO3JldHVybnt0eXBlOiJvcGVyYXRvcm5hbWUiLG1vZGU6ci5tb2RlLGJvZHk6Z2koaSksYWx3YXlzSGFuZGxlU3VwU3ViOm49PT0iXFxvcGVyYXRvcm5hbWV3aXRobGltaXRzIixsaW1pdHM6ITEscGFyZW50SXNTdXBTdWI6ITF9fSwiaGFuZGxlciIpLGh0bWxCdWlsZGVyOmRWLG1hdGhtbEJ1aWxkZXI6SjNlfSk7ZmUoIlxcb3BlcmF0b3JuYW1lIiwiXFxAaWZzdGFyXFxvcGVyYXRvcm5hbWV3aXRobGltaXRzXFxvcGVyYXRvcm5hbWVAIik7Y2Qoe3R5cGU6Im9yZGdyb3VwIixodG1sQnVpbGRlcih0LGUpe3JldHVybiB0LnNlbWlzaW1wbGU/RmUubWFrZUZyYWdtZW50KCRpKHQuYm9keSxlLCExKSk6RmUubWFrZVNwYW4oWyJtb3JkIl0sJGkodC5ib2R5LGUsITApLGUpfSxtYXRobWxCdWlsZGVyKHQsZSl7cmV0dXJuIHhoKHQuYm9keSxlLCEwKX19KTtOdCh7dHlwZToib3ZlcmxpbmUiLG5hbWVzOlsiXFxvdmVybGluZSJdLHByb3BzOntudW1BcmdzOjF9LGhhbmRsZXIodCxlKXt2YXJ7cGFyc2VyOnJ9PXQsbj1lWzBdO3JldHVybnt0eXBlOiJvdmVybGluZSIsbW9kZTpyLm1vZGUsYm9keTpufX0saHRtbEJ1aWxkZXIodCxlKXt2YXIgcj0kcih0LmJvZHksZS5oYXZpbmdDcmFtcGVkU3R5bGUoKSksbj1GZS5tYWtlTGluZVNwYW4oIm92ZXJsaW5lLWxpbmUiLGUpLGk9ZS5mb250TWV0cmljcygpLmRlZmF1bHRSdWxlVGhpY2tuZXNzLGE9RmUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6ImZpcnN0QmFzZWxpbmUiLGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTpyfSx7dHlwZToia2VybiIsc2l6ZTozKml9LHt0eXBlOiJlbGVtIixlbGVtOm59LHt0eXBlOiJrZXJuIixzaXplOml9XX0sZSk7cmV0dXJuIEZlLm1ha2VTcGFuKFsibW9yZCIsIm92ZXJsaW5lIl0sW2FdLGUpfSxtYXRobWxCdWlsZGVyKHQsZSl7dmFyIHI9bmV3IGR0Lk1hdGhOb2RlKCJtbyIsW25ldyBkdC5UZXh0Tm9kZSgiXHUyMDNFIildKTtyLnNldEF0dHJpYnV0ZSgic3RyZXRjaHkiLCJ0cnVlIik7dmFyIG49bmV3IGR0Lk1hdGhOb2RlKCJtb3ZlciIsW3ZuKHQuYm9keSxlKSxyXSk7cmV0dXJuIG4uc2V0QXR0cmlidXRlKCJhY2NlbnQiLCJ0cnVlIiksbn19KTtOdCh7dHlwZToicGhhbnRvbSIsbmFtZXM6WyJcXHBoYW50b20iXSxwcm9wczp7bnVtQXJnczoxLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXI6bygodCxlKT0+e3ZhcntwYXJzZXI6cn09dCxuPWVbMF07cmV0dXJue3R5cGU6InBoYW50b20iLG1vZGU6ci5tb2RlLGJvZHk6Z2kobil9fSwiaGFuZGxlciIpLGh0bWxCdWlsZGVyOm8oKHQsZSk9Pnt2YXIgcj0kaSh0LmJvZHksZS53aXRoUGhhbnRvbSgpLCExKTtyZXR1cm4gRmUubWFrZUZyYWdtZW50KHIpfSwiaHRtbEJ1aWxkZXIiKSxtYXRobWxCdWlsZGVyOm8oKHQsZSk9Pnt2YXIgcj1fcyh0LmJvZHksZSk7cmV0dXJuIG5ldyBkdC5NYXRoTm9kZSgibXBoYW50b20iLHIpfSwibWF0aG1sQnVpbGRlciIpfSk7TnQoe3R5cGU6ImhwaGFudG9tIixuYW1lczpbIlxcaHBoYW50b20iXSxwcm9wczp7bnVtQXJnczoxLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXI6bygodCxlKT0+e3ZhcntwYXJzZXI6cn09dCxuPWVbMF07cmV0dXJue3R5cGU6ImhwaGFudG9tIixtb2RlOnIubW9kZSxib2R5Om59fSwiaGFuZGxlciIpLGh0bWxCdWlsZGVyOm8oKHQsZSk9Pnt2YXIgcj1GZS5tYWtlU3BhbihbXSxbJHIodC5ib2R5LGUud2l0aFBoYW50b20oKSldKTtpZihyLmhlaWdodD0wLHIuZGVwdGg9MCxyLmNoaWxkcmVuKWZvcih2YXIgbj0wO248ci5jaGlsZHJlbi5sZW5ndGg7bisrKXIuY2hpbGRyZW5bbl0uaGVpZ2h0PTAsci5jaGlsZHJlbltuXS5kZXB0aD0wO3JldHVybiByPUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJmaXJzdEJhc2VsaW5lIixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06cn1dfSxlKSxGZS5tYWtlU3BhbihbIm1vcmQiXSxbcl0sZSl9LCJodG1sQnVpbGRlciIpLG1hdGhtbEJ1aWxkZXI6bygodCxlKT0+e3ZhciByPV9zKGdpKHQuYm9keSksZSksbj1uZXcgZHQuTWF0aE5vZGUoIm1waGFudG9tIixyKSxpPW5ldyBkdC5NYXRoTm9kZSgibXBhZGRlZCIsW25dKTtyZXR1cm4gaS5zZXRBdHRyaWJ1dGUoImhlaWdodCIsIjBweCIpLGkuc2V0QXR0cmlidXRlKCJkZXB0aCIsIjBweCIpLGl9LCJtYXRobWxCdWlsZGVyIil9KTtOdCh7dHlwZToidnBoYW50b20iLG5hbWVzOlsiXFx2cGhhbnRvbSJdLHByb3BzOntudW1BcmdzOjEsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcjpvKCh0LGUpPT57dmFye3BhcnNlcjpyfT10LG49ZVswXTtyZXR1cm57dHlwZToidnBoYW50b20iLG1vZGU6ci5tb2RlLGJvZHk6bn19LCJoYW5kbGVyIiksaHRtbEJ1aWxkZXI6bygodCxlKT0+e3ZhciByPUZlLm1ha2VTcGFuKFsiaW5uZXIiXSxbJHIodC5ib2R5LGUud2l0aFBoYW50b20oKSldKSxuPUZlLm1ha2VTcGFuKFsiZml4Il0sW10pO3JldHVybiBGZS5tYWtlU3BhbihbIm1vcmQiLCJybGFwIl0sW3Isbl0sZSl9LCJodG1sQnVpbGRlciIpLG1hdGhtbEJ1aWxkZXI6bygodCxlKT0+e3ZhciByPV9zKGdpKHQuYm9keSksZSksbj1uZXcgZHQuTWF0aE5vZGUoIm1waGFudG9tIixyKSxpPW5ldyBkdC5NYXRoTm9kZSgibXBhZGRlZCIsW25dKTtyZXR1cm4gaS5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiMHB4IiksaX0sIm1hdGhtbEJ1aWxkZXIiKX0pO050KHt0eXBlOiJyYWlzZWJveCIsbmFtZXM6WyJcXHJhaXNlYm94Il0scHJvcHM6e251bUFyZ3M6MixhcmdUeXBlczpbInNpemUiLCJoYm94Il0sYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcih0LGUpe3ZhcntwYXJzZXI6cn09dCxuPXhyKGVbMF0sInNpemUiKS52YWx1ZSxpPWVbMV07cmV0dXJue3R5cGU6InJhaXNlYm94Iixtb2RlOnIubW9kZSxkeTpuLGJvZHk6aX19LGh0bWxCdWlsZGVyKHQsZSl7dmFyIHI9JHIodC5ib2R5LGUpLG49bmkodC5keSxlKTtyZXR1cm4gRmUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6InNoaWZ0Iixwb3NpdGlvbkRhdGE6LW4sY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOnJ9XX0sZSl9LG1hdGhtbEJ1aWxkZXIodCxlKXt2YXIgcj1uZXcgZHQuTWF0aE5vZGUoIm1wYWRkZWQiLFt2bih0LmJvZHksZSldKSxuPXQuZHkubnVtYmVyK3QuZHkudW5pdDtyZXR1cm4gci5zZXRBdHRyaWJ1dGUoInZvZmZzZXQiLG4pLHJ9fSk7TnQoe3R5cGU6ImludGVybmFsIixuYW1lczpbIlxccmVsYXgiXSxwcm9wczp7bnVtQXJnczowLGFsbG93ZWRJblRleHQ6ITAsYWxsb3dlZEluQXJndW1lbnQ6ITB9LGhhbmRsZXIodCl7dmFye3BhcnNlcjplfT10O3JldHVybnt0eXBlOiJpbnRlcm5hbCIsbW9kZTplLm1vZGV9fX0pO050KHt0eXBlOiJydWxlIixuYW1lczpbIlxccnVsZSJdLHByb3BzOntudW1BcmdzOjIsbnVtT3B0aW9uYWxBcmdzOjEsYWxsb3dlZEluVGV4dDohMCxhbGxvd2VkSW5NYXRoOiEwLGFyZ1R5cGVzOlsic2l6ZSIsInNpemUiLCJzaXplIl19LGhhbmRsZXIodCxlLHIpe3ZhcntwYXJzZXI6bn09dCxpPXJbMF0sYT14cihlWzBdLCJzaXplIikscz14cihlWzFdLCJzaXplIik7cmV0dXJue3R5cGU6InJ1bGUiLG1vZGU6bi5tb2RlLHNoaWZ0OmkmJnhyKGksInNpemUiKS52YWx1ZSx3aWR0aDphLnZhbHVlLGhlaWdodDpzLnZhbHVlfX0saHRtbEJ1aWxkZXIodCxlKXt2YXIgcj1GZS5tYWtlU3BhbihbIm1vcmQiLCJydWxlIl0sW10sZSksbj1uaSh0LndpZHRoLGUpLGk9bmkodC5oZWlnaHQsZSksYT10LnNoaWZ0P25pKHQuc2hpZnQsZSk6MDtyZXR1cm4gci5zdHlsZS5ib3JkZXJSaWdodFdpZHRoPUV0KG4pLHIuc3R5bGUuYm9yZGVyVG9wV2lkdGg9RXQoaSksci5zdHlsZS5ib3R0b209RXQoYSksci53aWR0aD1uLHIuaGVpZ2h0PWkrYSxyLmRlcHRoPS1hLHIubWF4Rm9udFNpemU9aSoxLjEyNSplLnNpemVNdWx0aXBsaWVyLHJ9LG1hdGhtbEJ1aWxkZXIodCxlKXt2YXIgcj1uaSh0LndpZHRoLGUpLG49bmkodC5oZWlnaHQsZSksaT10LnNoaWZ0P25pKHQuc2hpZnQsZSk6MCxhPWUuY29sb3ImJmUuZ2V0Q29sb3IoKXx8ImJsYWNrIixzPW5ldyBkdC5NYXRoTm9kZSgibXNwYWNlIik7cy5zZXRBdHRyaWJ1dGUoIm1hdGhiYWNrZ3JvdW5kIixhKSxzLnNldEF0dHJpYnV0ZSgid2lkdGgiLEV0KHIpKSxzLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IixFdChuKSk7dmFyIGw9bmV3IGR0Lk1hdGhOb2RlKCJtcGFkZGVkIixbc10pO3JldHVybiBpPj0wP2wuc2V0QXR0cmlidXRlKCJoZWlnaHQiLEV0KGkpKToobC5zZXRBdHRyaWJ1dGUoImhlaWdodCIsRXQoaSkpLGwuc2V0QXR0cmlidXRlKCJkZXB0aCIsRXQoLWkpKSksbC5zZXRBdHRyaWJ1dGUoInZvZmZzZXQiLEV0KGkpKSxsfX0pO28ocFYsInNpemluZ0dyb3VwIik7bUc9WyJcXHRpbnkiLCJcXHNpeHB0c2l6ZSIsIlxcc2NyaXB0c2l6ZSIsIlxcZm9vdG5vdGVzaXplIiwiXFxzbWFsbCIsIlxcbm9ybWFsc2l6ZSIsIlxcbGFyZ2UiLCJcXExhcmdlIiwiXFxMQVJHRSIsIlxcaHVnZSIsIlxcSHVnZSJdLGU1ZT1vKCh0LGUpPT57dmFyIHI9ZS5oYXZpbmdTaXplKHQuc2l6ZSk7cmV0dXJuIHBWKHQuYm9keSxyLGUpfSwiaHRtbEJ1aWxkZXIiKTtOdCh7dHlwZToic2l6aW5nIixuYW1lczptRyxwcm9wczp7bnVtQXJnczowLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXI6bygodCxlKT0+e3ZhcnticmVha09uVG9rZW5UZXh0OnIsZnVuY05hbWU6bixwYXJzZXI6aX09dCxhPWkucGFyc2VFeHByZXNzaW9uKCExLHIpO3JldHVybnt0eXBlOiJzaXppbmciLG1vZGU6aS5tb2RlLHNpemU6bUcuaW5kZXhPZihuKSsxLGJvZHk6YX19LCJoYW5kbGVyIiksaHRtbEJ1aWxkZXI6ZTVlLG1hdGhtbEJ1aWxkZXI6bygodCxlKT0+e3ZhciByPWUuaGF2aW5nU2l6ZSh0LnNpemUpLG49X3ModC5ib2R5LHIpLGk9bmV3IGR0Lk1hdGhOb2RlKCJtc3R5bGUiLG4pO3JldHVybiBpLnNldEF0dHJpYnV0ZSgibWF0aHNpemUiLEV0KHIuc2l6ZU11bHRpcGxpZXIpKSxpfSwibWF0aG1sQnVpbGRlciIpfSk7TnQoe3R5cGU6InNtYXNoIixuYW1lczpbIlxcc21hc2giXSxwcm9wczp7bnVtQXJnczoxLG51bU9wdGlvbmFsQXJnczoxLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXI6bygodCxlLHIpPT57dmFye3BhcnNlcjpufT10LGk9ITEsYT0hMSxzPXJbMF0mJnhyKHJbMF0sIm9yZGdyb3VwIik7aWYocylmb3IodmFyIGw9IiIsdT0wO3U8cy5ib2R5Lmxlbmd0aDsrK3Upe3ZhciBoPXMuYm9keVt1XTtpZihsPWgudGV4dCxsPT09InQiKWk9ITA7ZWxzZSBpZihsPT09ImIiKWE9ITA7ZWxzZXtpPSExLGE9ITE7YnJlYWt9fWVsc2UgaT0hMCxhPSEwO3ZhciBmPWVbMF07cmV0dXJue3R5cGU6InNtYXNoIixtb2RlOm4ubW9kZSxib2R5OmYsc21hc2hIZWlnaHQ6aSxzbWFzaERlcHRoOmF9fSwiaGFuZGxlciIpLGh0bWxCdWlsZGVyOm8oKHQsZSk9Pnt2YXIgcj1GZS5tYWtlU3BhbihbXSxbJHIodC5ib2R5LGUpXSk7aWYoIXQuc21hc2hIZWlnaHQmJiF0LnNtYXNoRGVwdGgpcmV0dXJuIHI7aWYodC5zbWFzaEhlaWdodCYmKHIuaGVpZ2h0PTAsci5jaGlsZHJlbikpZm9yKHZhciBuPTA7bjxyLmNoaWxkcmVuLmxlbmd0aDtuKyspci5jaGlsZHJlbltuXS5oZWlnaHQ9MDtpZih0LnNtYXNoRGVwdGgmJihyLmRlcHRoPTAsci5jaGlsZHJlbikpZm9yKHZhciBpPTA7aTxyLmNoaWxkcmVuLmxlbmd0aDtpKyspci5jaGlsZHJlbltpXS5kZXB0aD0wO3ZhciBhPUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJmaXJzdEJhc2VsaW5lIixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06cn1dfSxlKTtyZXR1cm4gRmUubWFrZVNwYW4oWyJtb3JkIl0sW2FdLGUpfSwiaHRtbEJ1aWxkZXIiKSxtYXRobWxCdWlsZGVyOm8oKHQsZSk9Pnt2YXIgcj1uZXcgZHQuTWF0aE5vZGUoIm1wYWRkZWQiLFt2bih0LmJvZHksZSldKTtyZXR1cm4gdC5zbWFzaEhlaWdodCYmci5zZXRBdHRyaWJ1dGUoImhlaWdodCIsIjBweCIpLHQuc21hc2hEZXB0aCYmci5zZXRBdHRyaWJ1dGUoImRlcHRoIiwiMHB4Iikscn0sIm1hdGhtbEJ1aWxkZXIiKX0pO050KHt0eXBlOiJzcXJ0IixuYW1lczpbIlxcc3FydCJdLHByb3BzOntudW1BcmdzOjEsbnVtT3B0aW9uYWxBcmdzOjF9LGhhbmRsZXIodCxlLHIpe3ZhcntwYXJzZXI6bn09dCxpPXJbMF0sYT1lWzBdO3JldHVybnt0eXBlOiJzcXJ0Iixtb2RlOm4ubW9kZSxib2R5OmEsaW5kZXg6aX19LGh0bWxCdWlsZGVyKHQsZSl7dmFyIHI9JHIodC5ib2R5LGUuaGF2aW5nQ3JhbXBlZFN0eWxlKCkpO3IuaGVpZ2h0PT09MCYmKHIuaGVpZ2h0PWUuZm9udE1ldHJpY3MoKS54SGVpZ2h0KSxyPUZlLndyYXBGcmFnbWVudChyLGUpO3ZhciBuPWUuZm9udE1ldHJpY3MoKSxpPW4uZGVmYXVsdFJ1bGVUaGlja25lc3MsYT1pO2Uuc3R5bGUuaWQ8bnIuVEVYVC5pZCYmKGE9ZS5mb250TWV0cmljcygpLnhIZWlnaHQpO3ZhciBzPWkrYS80LGw9ci5oZWlnaHQrci5kZXB0aCtzK2kse3NwYW46dSxydWxlV2lkdGg6aCxhZHZhbmNlV2lkdGg6Zn09aHUuc3FydEltYWdlKGwsZSksZD11LmhlaWdodC1oO2Q+ci5oZWlnaHQrci5kZXB0aCtzJiYocz0ocytkLXIuaGVpZ2h0LXIuZGVwdGgpLzIpO3ZhciBwPXUuaGVpZ2h0LXIuaGVpZ2h0LXMtaDtyLnN0eWxlLnBhZGRpbmdMZWZ0PUV0KGYpO3ZhciBtPUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJmaXJzdEJhc2VsaW5lIixjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06cix3cmFwcGVyQ2xhc3NlczpbInN2Zy1hbGlnbiJdfSx7dHlwZToia2VybiIsc2l6ZTotKHIuaGVpZ2h0K3ApfSx7dHlwZToiZWxlbSIsZWxlbTp1fSx7dHlwZToia2VybiIsc2l6ZTpofV19LGUpO2lmKHQuaW5kZXgpe3ZhciBnPWUuaGF2aW5nU3R5bGUobnIuU0NSSVBUU0NSSVBUKSx5PSRyKHQuaW5kZXgsZyxlKSx2PS42KihtLmhlaWdodC1tLmRlcHRoKSx4PUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJzaGlmdCIscG9zaXRpb25EYXRhOi12LGNoaWxkcmVuOlt7dHlwZToiZWxlbSIsZWxlbTp5fV19LGUpLGI9RmUubWFrZVNwYW4oWyJyb290Il0sW3hdKTtyZXR1cm4gRmUubWFrZVNwYW4oWyJtb3JkIiwic3FydCJdLFtiLG1dLGUpfWVsc2UgcmV0dXJuIEZlLm1ha2VTcGFuKFsibW9yZCIsInNxcnQiXSxbbV0sZSl9LG1hdGhtbEJ1aWxkZXIodCxlKXt2YXJ7Ym9keTpyLGluZGV4Om59PXQ7cmV0dXJuIG4/bmV3IGR0Lk1hdGhOb2RlKCJtcm9vdCIsW3ZuKHIsZSksdm4obixlKV0pOm5ldyBkdC5NYXRoTm9kZSgibXNxcnQiLFt2bihyLGUpXSl9fSk7Z0c9e2Rpc3BsYXk6bnIuRElTUExBWSx0ZXh0Om5yLlRFWFQsc2NyaXB0Om5yLlNDUklQVCxzY3JpcHRzY3JpcHQ6bnIuU0NSSVBUU0NSSVBUfTtOdCh7dHlwZToic3R5bGluZyIsbmFtZXM6WyJcXGRpc3BsYXlzdHlsZSIsIlxcdGV4dHN0eWxlIiwiXFxzY3JpcHRzdHlsZSIsIlxcc2NyaXB0c2NyaXB0c3R5bGUiXSxwcm9wczp7bnVtQXJnczowLGFsbG93ZWRJblRleHQ6ITAscHJpbWl0aXZlOiEwfSxoYW5kbGVyKHQsZSl7dmFye2JyZWFrT25Ub2tlblRleHQ6cixmdW5jTmFtZTpuLHBhcnNlcjppfT10LGE9aS5wYXJzZUV4cHJlc3Npb24oITAscikscz1uLnNsaWNlKDEsbi5sZW5ndGgtNSk7cmV0dXJue3R5cGU6InN0eWxpbmciLG1vZGU6aS5tb2RlLHN0eWxlOnMsYm9keTphfX0saHRtbEJ1aWxkZXIodCxlKXt2YXIgcj1nR1t0LnN0eWxlXSxuPWUuaGF2aW5nU3R5bGUocikud2l0aEZvbnQoIiIpO3JldHVybiBwVih0LmJvZHksbixlKX0sbWF0aG1sQnVpbGRlcih0LGUpe3ZhciByPWdHW3Quc3R5bGVdLG49ZS5oYXZpbmdTdHlsZShyKSxpPV9zKHQuYm9keSxuKSxhPW5ldyBkdC5NYXRoTm9kZSgibXN0eWxlIixpKSxzPXtkaXNwbGF5OlsiMCIsInRydWUiXSx0ZXh0OlsiMCIsImZhbHNlIl0sc2NyaXB0OlsiMSIsImZhbHNlIl0sc2NyaXB0c2NyaXB0OlsiMiIsImZhbHNlIl19LGw9c1t0LnN0eWxlXTtyZXR1cm4gYS5zZXRBdHRyaWJ1dGUoInNjcmlwdGxldmVsIixsWzBdKSxhLnNldEF0dHJpYnV0ZSgiZGlzcGxheXN0eWxlIixsWzFdKSxhfX0pO3Q1ZT1vKGZ1bmN0aW9uKGUscil7dmFyIG49ZS5iYXNlO2lmKG4paWYobi50eXBlPT09Im9wIil7dmFyIGk9bi5saW1pdHMmJihyLnN0eWxlLnNpemU9PT1uci5ESVNQTEFZLnNpemV8fG4uYWx3YXlzSGFuZGxlU3VwU3ViKTtyZXR1cm4gaT9TMDpudWxsfWVsc2UgaWYobi50eXBlPT09Im9wZXJhdG9ybmFtZSIpe3ZhciBhPW4uYWx3YXlzSGFuZGxlU3VwU3ViJiYoci5zdHlsZS5zaXplPT09bnIuRElTUExBWS5zaXplfHxuLmxpbWl0cyk7cmV0dXJuIGE/ZFY6bnVsbH1lbHNle2lmKG4udHlwZT09PSJhY2NlbnQiKXJldHVybiBKdC5pc0NoYXJhY3RlckJveChuLmJhc2UpP2xBOm51bGw7aWYobi50eXBlPT09Imhvcml6QnJhY2UiKXt2YXIgcz0hZS5zdWI7cmV0dXJuIHM9PT1uLmlzT3Zlcj91VjpudWxsfWVsc2UgcmV0dXJuIG51bGx9ZWxzZSByZXR1cm4gbnVsbH0sImh0bWxCdWlsZGVyRGVsZWdhdGUiKTtjZCh7dHlwZToic3Vwc3ViIixodG1sQnVpbGRlcih0LGUpe3ZhciByPXQ1ZSh0LGUpO2lmKHIpcmV0dXJuIHIodCxlKTt2YXJ7YmFzZTpuLHN1cDppLHN1YjphfT10LHM9JHIobixlKSxsLHUsaD1lLmZvbnRNZXRyaWNzKCksZj0wLGQ9MCxwPW4mJkp0LmlzQ2hhcmFjdGVyQm94KG4pO2lmKGkpe3ZhciBtPWUuaGF2aW5nU3R5bGUoZS5zdHlsZS5zdXAoKSk7bD0kcihpLG0sZSkscHx8KGY9cy5oZWlnaHQtbS5mb250TWV0cmljcygpLnN1cERyb3AqbS5zaXplTXVsdGlwbGllci9lLnNpemVNdWx0aXBsaWVyKX1pZihhKXt2YXIgZz1lLmhhdmluZ1N0eWxlKGUuc3R5bGUuc3ViKCkpO3U9JHIoYSxnLGUpLHB8fChkPXMuZGVwdGgrZy5mb250TWV0cmljcygpLnN1YkRyb3AqZy5zaXplTXVsdGlwbGllci9lLnNpemVNdWx0aXBsaWVyKX12YXIgeTtlLnN0eWxlPT09bnIuRElTUExBWT95PWguc3VwMTplLnN0eWxlLmNyYW1wZWQ/eT1oLnN1cDM6eT1oLnN1cDI7dmFyIHY9ZS5zaXplTXVsdGlwbGllcix4PUV0KC41L2gucHRQZXJFbS92KSxiPW51bGw7aWYodSl7dmFyIFQ9dC5iYXNlJiZ0LmJhc2UudHlwZT09PSJvcCImJnQuYmFzZS5uYW1lJiYodC5iYXNlLm5hbWU9PT0iXFxvaWludCJ8fHQuYmFzZS5uYW1lPT09Ilxcb2lpaW50Iik7KHMgaW5zdGFuY2VvZiBBc3x8VCkmJihiPUV0KC1zLml0YWxpYykpfXZhciBTO2lmKGwmJnUpe2Y9TWF0aC5tYXgoZix5LGwuZGVwdGgrLjI1KmgueEhlaWdodCksZD1NYXRoLm1heChkLGguc3ViMik7dmFyIHc9aC5kZWZhdWx0UnVsZVRoaWNrbmVzcyxFPTQqdztpZihmLWwuZGVwdGgtKHUuaGVpZ2h0LWQpPEUpe2Q9RS0oZi1sLmRlcHRoKSt1LmhlaWdodDt2YXIgXz0uOCpoLnhIZWlnaHQtKGYtbC5kZXB0aCk7Xz4wJiYoZis9XyxkLT1fKX12YXIgQz1be3R5cGU6ImVsZW0iLGVsZW06dSxzaGlmdDpkLG1hcmdpblJpZ2h0OngsbWFyZ2luTGVmdDpifSx7dHlwZToiZWxlbSIsZWxlbTpsLHNoaWZ0Oi1mLG1hcmdpblJpZ2h0Onh9XTtTPUZlLm1ha2VWTGlzdCh7cG9zaXRpb25UeXBlOiJpbmRpdmlkdWFsU2hpZnQiLGNoaWxkcmVuOkN9LGUpfWVsc2UgaWYodSl7ZD1NYXRoLm1heChkLGguc3ViMSx1LmhlaWdodC0uOCpoLnhIZWlnaHQpO3ZhciBEPVt7dHlwZToiZWxlbSIsZWxlbTp1LG1hcmdpbkxlZnQ6YixtYXJnaW5SaWdodDp4fV07Uz1GZS5tYWtlVkxpc3Qoe3Bvc2l0aW9uVHlwZToic2hpZnQiLHBvc2l0aW9uRGF0YTpkLGNoaWxkcmVuOkR9LGUpfWVsc2UgaWYobClmPU1hdGgubWF4KGYseSxsLmRlcHRoKy4yNSpoLnhIZWlnaHQpLFM9RmUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6InNoaWZ0Iixwb3NpdGlvbkRhdGE6LWYsY2hpbGRyZW46W3t0eXBlOiJlbGVtIixlbGVtOmwsbWFyZ2luUmlnaHQ6eH1dfSxlKTtlbHNlIHRocm93IG5ldyBFcnJvcigic3Vwc3ViIG11c3QgaGF2ZSBlaXRoZXIgc3VwIG9yIHN1Yi4iKTt2YXIgTz1YNyhzLCJyaWdodCIpfHwibW9yZCI7cmV0dXJuIEZlLm1ha2VTcGFuKFtPXSxbcyxGZS5tYWtlU3BhbihbIm1zdXBzdWIiXSxbU10pXSxlKX0sbWF0aG1sQnVpbGRlcih0LGUpe3ZhciByPSExLG4saTt0LmJhc2UmJnQuYmFzZS50eXBlPT09Imhvcml6QnJhY2UiJiYoaT0hIXQuc3VwLGk9PT10LmJhc2UuaXNPdmVyJiYocj0hMCxuPXQuYmFzZS5pc092ZXIpKSx0LmJhc2UmJih0LmJhc2UudHlwZT09PSJvcCJ8fHQuYmFzZS50eXBlPT09Im9wZXJhdG9ybmFtZSIpJiYodC5iYXNlLnBhcmVudElzU3VwU3ViPSEwKTt2YXIgYT1bdm4odC5iYXNlLGUpXTt0LnN1YiYmYS5wdXNoKHZuKHQuc3ViLGUpKSx0LnN1cCYmYS5wdXNoKHZuKHQuc3VwLGUpKTt2YXIgcztpZihyKXM9bj8ibW92ZXIiOiJtdW5kZXIiO2Vsc2UgaWYodC5zdWIpaWYodC5zdXApe3ZhciBoPXQuYmFzZTtoJiZoLnR5cGU9PT0ib3AiJiZoLmxpbWl0cyYmZS5zdHlsZT09PW5yLkRJU1BMQVl8fGgmJmgudHlwZT09PSJvcGVyYXRvcm5hbWUiJiZoLmFsd2F5c0hhbmRsZVN1cFN1YiYmKGUuc3R5bGU9PT1uci5ESVNQTEFZfHxoLmxpbWl0cyk/cz0ibXVuZGVyb3ZlciI6cz0ibXN1YnN1cCJ9ZWxzZXt2YXIgdT10LmJhc2U7dSYmdS50eXBlPT09Im9wIiYmdS5saW1pdHMmJihlLnN0eWxlPT09bnIuRElTUExBWXx8dS5hbHdheXNIYW5kbGVTdXBTdWIpfHx1JiZ1LnR5cGU9PT0ib3BlcmF0b3JuYW1lIiYmdS5hbHdheXNIYW5kbGVTdXBTdWImJih1LmxpbWl0c3x8ZS5zdHlsZT09PW5yLkRJU1BMQVkpP3M9Im11bmRlciI6cz0ibXN1YiJ9ZWxzZXt2YXIgbD10LmJhc2U7bCYmbC50eXBlPT09Im9wIiYmbC5saW1pdHMmJihlLnN0eWxlPT09bnIuRElTUExBWXx8bC5hbHdheXNIYW5kbGVTdXBTdWIpfHxsJiZsLnR5cGU9PT0ib3BlcmF0b3JuYW1lIiYmbC5hbHdheXNIYW5kbGVTdXBTdWImJihsLmxpbWl0c3x8ZS5zdHlsZT09PW5yLkRJU1BMQVkpP3M9Im1vdmVyIjpzPSJtc3VwIn1yZXR1cm4gbmV3IGR0Lk1hdGhOb2RlKHMsYSl9fSk7Y2Qoe3R5cGU6ImF0b20iLGh0bWxCdWlsZGVyKHQsZSl7cmV0dXJuIEZlLm1hdGhzeW0odC50ZXh0LHQubW9kZSxlLFsibSIrdC5mYW1pbHldKX0sbWF0aG1sQnVpbGRlcih0LGUpe3ZhciByPW5ldyBkdC5NYXRoTm9kZSgibW8iLFtEbyh0LnRleHQsdC5tb2RlKV0pO2lmKHQuZmFtaWx5PT09ImJpbiIpe3ZhciBuPXNBKHQsZSk7bj09PSJib2xkLWl0YWxpYyImJnIuc2V0QXR0cmlidXRlKCJtYXRodmFyaWFudCIsbil9ZWxzZSB0LmZhbWlseT09PSJwdW5jdCI/ci5zZXRBdHRyaWJ1dGUoInNlcGFyYXRvciIsInRydWUiKToodC5mYW1pbHk9PT0ib3BlbiJ8fHQuZmFtaWx5PT09ImNsb3NlIikmJnIuc2V0QXR0cmlidXRlKCJzdHJldGNoeSIsImZhbHNlIik7cmV0dXJuIHJ9fSk7bVY9e21pOiJpdGFsaWMiLG1uOiJub3JtYWwiLG10ZXh0OiJub3JtYWwifTtjZCh7dHlwZToibWF0aG9yZCIsaHRtbEJ1aWxkZXIodCxlKXtyZXR1cm4gRmUubWFrZU9yZCh0LGUsIm1hdGhvcmQiKX0sbWF0aG1sQnVpbGRlcih0LGUpe3ZhciByPW5ldyBkdC5NYXRoTm9kZSgibWkiLFtEbyh0LnRleHQsdC5tb2RlLGUpXSksbj1zQSh0LGUpfHwiaXRhbGljIjtyZXR1cm4gbiE9PW1WW3IudHlwZV0mJnIuc2V0QXR0cmlidXRlKCJtYXRodmFyaWFudCIsbikscn19KTtjZCh7dHlwZToidGV4dG9yZCIsaHRtbEJ1aWxkZXIodCxlKXtyZXR1cm4gRmUubWFrZU9yZCh0LGUsInRleHRvcmQiKX0sbWF0aG1sQnVpbGRlcih0LGUpe3ZhciByPURvKHQudGV4dCx0Lm1vZGUsZSksbj1zQSh0LGUpfHwibm9ybWFsIixpO3JldHVybiB0Lm1vZGU9PT0idGV4dCI/aT1uZXcgZHQuTWF0aE5vZGUoIm10ZXh0Iixbcl0pOi9bMC05XS8udGVzdCh0LnRleHQpP2k9bmV3IGR0Lk1hdGhOb2RlKCJtbiIsW3JdKTp0LnRleHQ9PT0iXFxwcmltZSI/aT1uZXcgZHQuTWF0aE5vZGUoIm1vIixbcl0pOmk9bmV3IGR0Lk1hdGhOb2RlKCJtaSIsW3JdKSxuIT09bVZbaS50eXBlXSYmaS5zZXRBdHRyaWJ1dGUoIm1hdGh2YXJpYW50IixuKSxpfX0pO0c3PXsiXFxub2JyZWFrIjoibm9icmVhayIsIlxcYWxsb3dicmVhayI6ImFsbG93YnJlYWsifSxWNz17IiAiOnt9LCJcXCAiOnt9LCJ+Ijp7Y2xhc3NOYW1lOiJub2JyZWFrIn0sIlxcc3BhY2UiOnt9LCJcXG5vYnJlYWtzcGFjZSI6e2NsYXNzTmFtZToibm9icmVhayJ9fTtjZCh7dHlwZToic3BhY2luZyIsaHRtbEJ1aWxkZXIodCxlKXtpZihWNy5oYXNPd25Qcm9wZXJ0eSh0LnRleHQpKXt2YXIgcj1WN1t0LnRleHRdLmNsYXNzTmFtZXx8IiI7aWYodC5tb2RlPT09InRleHQiKXt2YXIgbj1GZS5tYWtlT3JkKHQsZSwidGV4dG9yZCIpO3JldHVybiBuLmNsYXNzZXMucHVzaChyKSxufWVsc2UgcmV0dXJuIEZlLm1ha2VTcGFuKFsibXNwYWNlIixyXSxbRmUubWF0aHN5bSh0LnRleHQsdC5tb2RlLGUpXSxlKX1lbHNle2lmKEc3Lmhhc093blByb3BlcnR5KHQudGV4dCkpcmV0dXJuIEZlLm1ha2VTcGFuKFsibXNwYWNlIixHN1t0LnRleHRdXSxbXSxlKTt0aHJvdyBuZXcgcHQoJ1Vua25vd24gdHlwZSBvZiBzcGFjZSAiJyt0LnRleHQrJyInKX19LG1hdGhtbEJ1aWxkZXIodCxlKXt2YXIgcjtpZihWNy5oYXNPd25Qcm9wZXJ0eSh0LnRleHQpKXI9bmV3IGR0Lk1hdGhOb2RlKCJtdGV4dCIsW25ldyBkdC5UZXh0Tm9kZSgiXHhBMCIpXSk7ZWxzZXtpZihHNy5oYXNPd25Qcm9wZXJ0eSh0LnRleHQpKXJldHVybiBuZXcgZHQuTWF0aE5vZGUoIm1zcGFjZSIpO3Rocm93IG5ldyBwdCgnVW5rbm93biB0eXBlIG9mIHNwYWNlICInK3QudGV4dCsnIicpfXJldHVybiByfX0pO3lHPW8oKCk9Pnt2YXIgdD1uZXcgZHQuTWF0aE5vZGUoIm10ZCIsW10pO3JldHVybiB0LnNldEF0dHJpYnV0ZSgid2lkdGgiLCI1MCUiKSx0fSwicGFkIik7Y2Qoe3R5cGU6InRhZyIsbWF0aG1sQnVpbGRlcih0LGUpe3ZhciByPW5ldyBkdC5NYXRoTm9kZSgibXRhYmxlIixbbmV3IGR0Lk1hdGhOb2RlKCJtdHIiLFt5RygpLG5ldyBkdC5NYXRoTm9kZSgibXRkIixbeGgodC5ib2R5LGUpXSkseUcoKSxuZXcgZHQuTWF0aE5vZGUoIm10ZCIsW3hoKHQudGFnLGUpXSldKV0pO3JldHVybiByLnNldEF0dHJpYnV0ZSgid2lkdGgiLCIxMDAlIikscn19KTt2Rz17IlxcdGV4dCI6dm9pZCAwLCJcXHRleHRybSI6InRleHRybSIsIlxcdGV4dHNmIjoidGV4dHNmIiwiXFx0ZXh0dHQiOiJ0ZXh0dHQiLCJcXHRleHRub3JtYWwiOiJ0ZXh0cm0ifSx4Rz17IlxcdGV4dGJmIjoidGV4dGJmIiwiXFx0ZXh0bWQiOiJ0ZXh0bWQifSxyNWU9eyJcXHRleHRpdCI6InRleHRpdCIsIlxcdGV4dHVwIjoidGV4dHVwIn0sYkc9bygodCxlKT0+e3ZhciByPXQuZm9udDtpZihyKXtpZih2R1tyXSlyZXR1cm4gZS53aXRoVGV4dEZvbnRGYW1pbHkodkdbcl0pO2lmKHhHW3JdKXJldHVybiBlLndpdGhUZXh0Rm9udFdlaWdodCh4R1tyXSk7aWYocj09PSJcXGVtcGgiKXJldHVybiBlLmZvbnRTaGFwZT09PSJ0ZXh0aXQiP2Uud2l0aFRleHRGb250U2hhcGUoInRleHR1cCIpOmUud2l0aFRleHRGb250U2hhcGUoInRleHRpdCIpfWVsc2UgcmV0dXJuIGU7cmV0dXJuIGUud2l0aFRleHRGb250U2hhcGUocjVlW3JdKX0sIm9wdGlvbnNXaXRoRm9udCIpO050KHt0eXBlOiJ0ZXh0IixuYW1lczpbIlxcdGV4dCIsIlxcdGV4dHJtIiwiXFx0ZXh0c2YiLCJcXHRleHR0dCIsIlxcdGV4dG5vcm1hbCIsIlxcdGV4dGJmIiwiXFx0ZXh0bWQiLCJcXHRleHRpdCIsIlxcdGV4dHVwIiwiXFxlbXBoIl0scHJvcHM6e251bUFyZ3M6MSxhcmdUeXBlczpbInRleHQiXSxhbGxvd2VkSW5Bcmd1bWVudDohMCxhbGxvd2VkSW5UZXh0OiEwfSxoYW5kbGVyKHQsZSl7dmFye3BhcnNlcjpyLGZ1bmNOYW1lOm59PXQsaT1lWzBdO3JldHVybnt0eXBlOiJ0ZXh0Iixtb2RlOnIubW9kZSxib2R5OmdpKGkpLGZvbnQ6bn19LGh0bWxCdWlsZGVyKHQsZSl7dmFyIHI9YkcodCxlKSxuPSRpKHQuYm9keSxyLCEwKTtyZXR1cm4gRmUubWFrZVNwYW4oWyJtb3JkIiwidGV4dCJdLG4scil9LG1hdGhtbEJ1aWxkZXIodCxlKXt2YXIgcj1iRyh0LGUpO3JldHVybiB4aCh0LmJvZHkscil9fSk7TnQoe3R5cGU6InVuZGVybGluZSIsbmFtZXM6WyJcXHVuZGVybGluZSJdLHByb3BzOntudW1BcmdzOjEsYWxsb3dlZEluVGV4dDohMH0saGFuZGxlcih0LGUpe3ZhcntwYXJzZXI6cn09dDtyZXR1cm57dHlwZToidW5kZXJsaW5lIixtb2RlOnIubW9kZSxib2R5OmVbMF19fSxodG1sQnVpbGRlcih0LGUpe3ZhciByPSRyKHQuYm9keSxlKSxuPUZlLm1ha2VMaW5lU3BhbigidW5kZXJsaW5lLWxpbmUiLGUpLGk9ZS5mb250TWV0cmljcygpLmRlZmF1bHRSdWxlVGhpY2tuZXNzLGE9RmUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6InRvcCIscG9zaXRpb25EYXRhOnIuaGVpZ2h0LGNoaWxkcmVuOlt7dHlwZToia2VybiIsc2l6ZTppfSx7dHlwZToiZWxlbSIsZWxlbTpufSx7dHlwZToia2VybiIsc2l6ZTozKml9LHt0eXBlOiJlbGVtIixlbGVtOnJ9XX0sZSk7cmV0dXJuIEZlLm1ha2VTcGFuKFsibW9yZCIsInVuZGVybGluZSJdLFthXSxlKX0sbWF0aG1sQnVpbGRlcih0LGUpe3ZhciByPW5ldyBkdC5NYXRoTm9kZSgibW8iLFtuZXcgZHQuVGV4dE5vZGUoIlx1MjAzRSIpXSk7ci5zZXRBdHRyaWJ1dGUoInN0cmV0Y2h5IiwidHJ1ZSIpO3ZhciBuPW5ldyBkdC5NYXRoTm9kZSgibXVuZGVyIixbdm4odC5ib2R5LGUpLHJdKTtyZXR1cm4gbi5zZXRBdHRyaWJ1dGUoImFjY2VudHVuZGVyIiwidHJ1ZSIpLG59fSk7TnQoe3R5cGU6InZjZW50ZXIiLG5hbWVzOlsiXFx2Y2VudGVyIl0scHJvcHM6e251bUFyZ3M6MSxhcmdUeXBlczpbIm9yaWdpbmFsIl0sYWxsb3dlZEluVGV4dDohMX0saGFuZGxlcih0LGUpe3ZhcntwYXJzZXI6cn09dDtyZXR1cm57dHlwZToidmNlbnRlciIsbW9kZTpyLm1vZGUsYm9keTplWzBdfX0saHRtbEJ1aWxkZXIodCxlKXt2YXIgcj0kcih0LmJvZHksZSksbj1lLmZvbnRNZXRyaWNzKCkuYXhpc0hlaWdodCxpPS41KihyLmhlaWdodC1uLShyLmRlcHRoK24pKTtyZXR1cm4gRmUubWFrZVZMaXN0KHtwb3NpdGlvblR5cGU6InNoaWZ0Iixwb3NpdGlvbkRhdGE6aSxjaGlsZHJlbjpbe3R5cGU6ImVsZW0iLGVsZW06cn1dfSxlKX0sbWF0aG1sQnVpbGRlcih0LGUpe3JldHVybiBuZXcgZHQuTWF0aE5vZGUoIm1wYWRkZWQiLFt2bih0LmJvZHksZSldLFsidmNlbnRlciJdKX19KTtOdCh7dHlwZToidmVyYiIsbmFtZXM6WyJcXHZlcmIiXSxwcm9wczp7bnVtQXJnczowLGFsbG93ZWRJblRleHQ6ITB9LGhhbmRsZXIodCxlLHIpe3Rocm93IG5ldyBwdCgiXFx2ZXJiIGVuZGVkIGJ5IGVuZCBvZiBsaW5lIGluc3RlYWQgb2YgbWF0Y2hpbmcgZGVsaW1pdGVyIil9LGh0bWxCdWlsZGVyKHQsZSl7Zm9yKHZhciByPVRHKHQpLG49W10saT1lLmhhdmluZ1N0eWxlKGUuc3R5bGUudGV4dCgpKSxhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBzPXJbYV07cz09PSJ+IiYmKHM9IlxcdGV4dGFzY2lpdGlsZGUiKSxuLnB1c2goRmUubWFrZVN5bWJvbChzLCJUeXBld3JpdGVyLVJlZ3VsYXIiLHQubW9kZSxpLFsibW9yZCIsInRleHR0dCJdKSl9cmV0dXJuIEZlLm1ha2VTcGFuKFsibW9yZCIsInRleHQiXS5jb25jYXQoaS5zaXppbmdDbGFzc2VzKGUpKSxGZS50cnlDb21iaW5lQ2hhcnMobiksaSl9LG1hdGhtbEJ1aWxkZXIodCxlKXt2YXIgcj1uZXcgZHQuVGV4dE5vZGUoVEcodCkpLG49bmV3IGR0Lk1hdGhOb2RlKCJtdGV4dCIsW3JdKTtyZXR1cm4gbi5zZXRBdHRyaWJ1dGUoIm1hdGh2YXJpYW50IiwibW9ub3NwYWNlIiksbn19KTtURz1vKHQ9PnQuYm9keS5yZXBsYWNlKC8gL2csdC5zdGFyPyJcdTI0MjMiOiJceEEwIiksIm1ha2VWZXJiIikseWg9RkcsZ1Y9YFsgXHIKCV1gLG41ZT0iXFxcXFthLXpBLVpAXSsiLGk1ZT0iXFxcXFteXHVEODAwLVx1REZGRl0iLGE1ZT0iKCIrbjVlKyIpIitnVisiKiIsczVlPWBcXFxcKAp8WyBccgldKwo/KVsgXHIJXSpgLEo3PSJbXHUwMzAwLVx1MDM2Rl0iLG81ZT1uZXcgUmVnRXhwKEo3KyIrJCIpLGw1ZT0iKCIrZ1YrIispfCIrKHM1ZSsifCIpKyIoWyEtXFxbXFxdLVx1MjAyN1x1MjAyQS1cdUQ3RkZcdUY5MDAtXHVGRkZGXSIrKEo3KyIqIikrInxbXHVEODAwLVx1REJGRl1bXHVEQzAwLVx1REZGRl0iKyhKNysiKiIpKyJ8XFxcXHZlcmJcXCooW15dKS4qP1xcNHxcXFxcdmVyYihbXiphLXpBLVpdKS4qP1xcNSIrKCJ8IithNWUpKygifCIraTVlKyIpIiksQTM9Y2xhc3N7c3RhdGlje28odGhpcywiTGV4ZXIiKX1jb25zdHJ1Y3RvcihlLHIpe3RoaXMuaW5wdXQ9dm9pZCAwLHRoaXMuc2V0dGluZ3M9dm9pZCAwLHRoaXMudG9rZW5SZWdleD12b2lkIDAsdGhpcy5jYXRjb2Rlcz12b2lkIDAsdGhpcy5pbnB1dD1lLHRoaXMuc2V0dGluZ3M9cix0aGlzLnRva2VuUmVnZXg9bmV3IFJlZ0V4cChsNWUsImciKSx0aGlzLmNhdGNvZGVzPXsiJSI6MTQsIn4iOjEzfX1zZXRDYXRjb2RlKGUscil7dGhpcy5jYXRjb2Rlc1tlXT1yfWxleCgpe3ZhciBlPXRoaXMuaW5wdXQscj10aGlzLnRva2VuUmVnZXgubGFzdEluZGV4O2lmKHI9PT1lLmxlbmd0aClyZXR1cm4gbmV3IF9vKCJFT0YiLG5ldyBRcyh0aGlzLHIscikpO3ZhciBuPXRoaXMudG9rZW5SZWdleC5leGVjKGUpO2lmKG49PT1udWxsfHxuLmluZGV4IT09cil0aHJvdyBuZXcgcHQoIlVuZXhwZWN0ZWQgY2hhcmFjdGVyOiAnIitlW3JdKyInIixuZXcgX28oZVtyXSxuZXcgUXModGhpcyxyLHIrMSkpKTt2YXIgaT1uWzZdfHxuWzNdfHwoblsyXT8iXFwgIjoiICIpO2lmKHRoaXMuY2F0Y29kZXNbaV09PT0xNCl7dmFyIGE9ZS5pbmRleE9mKGAKYCx0aGlzLnRva2VuUmVnZXgubGFzdEluZGV4KTtyZXR1cm4gYT09PS0xPyh0aGlzLnRva2VuUmVnZXgubGFzdEluZGV4PWUubGVuZ3RoLHRoaXMuc2V0dGluZ3MucmVwb3J0Tm9uc3RyaWN0KCJjb21tZW50QXRFbmQiLCIlIGNvbW1lbnQgaGFzIG5vIHRlcm1pbmF0aW5nIG5ld2xpbmU7IExhVGVYIHdvdWxkIGZhaWwgYmVjYXVzZSBvZiBjb21tZW50aW5nIHRoZSBlbmQgb2YgbWF0aCBtb2RlIChlLmcuICQpIikpOnRoaXMudG9rZW5SZWdleC5sYXN0SW5kZXg9YSsxLHRoaXMubGV4KCl9cmV0dXJuIG5ldyBfbyhpLG5ldyBRcyh0aGlzLHIsdGhpcy50b2tlblJlZ2V4Lmxhc3RJbmRleCkpfX0sZUE9Y2xhc3N7c3RhdGlje28odGhpcywiTmFtZXNwYWNlIil9Y29uc3RydWN0b3IoZSxyKXtlPT09dm9pZCAwJiYoZT17fSkscj09PXZvaWQgMCYmKHI9e30pLHRoaXMuY3VycmVudD12b2lkIDAsdGhpcy5idWlsdGlucz12b2lkIDAsdGhpcy51bmRlZlN0YWNrPXZvaWQgMCx0aGlzLmN1cnJlbnQ9cix0aGlzLmJ1aWx0aW5zPWUsdGhpcy51bmRlZlN0YWNrPVtdfWJlZ2luR3JvdXAoKXt0aGlzLnVuZGVmU3RhY2sucHVzaCh7fSl9ZW5kR3JvdXAoKXtpZih0aGlzLnVuZGVmU3RhY2subGVuZ3RoPT09MCl0aHJvdyBuZXcgcHQoIlVuYmFsYW5jZWQgbmFtZXNwYWNlIGRlc3RydWN0aW9uOiBhdHRlbXB0IHRvIHBvcCBnbG9iYWwgbmFtZXNwYWNlOyBwbGVhc2UgcmVwb3J0IHRoaXMgYXMgYSBidWciKTt2YXIgZT10aGlzLnVuZGVmU3RhY2sucG9wKCk7Zm9yKHZhciByIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShyKSYmKGVbcl09PW51bGw/ZGVsZXRlIHRoaXMuY3VycmVudFtyXTp0aGlzLmN1cnJlbnRbcl09ZVtyXSl9ZW5kR3JvdXBzKCl7Zm9yKDt0aGlzLnVuZGVmU3RhY2subGVuZ3RoPjA7KXRoaXMuZW5kR3JvdXAoKX1oYXMoZSl7cmV0dXJuIHRoaXMuY3VycmVudC5oYXNPd25Qcm9wZXJ0eShlKXx8dGhpcy5idWlsdGlucy5oYXNPd25Qcm9wZXJ0eShlKX1nZXQoZSl7cmV0dXJuIHRoaXMuY3VycmVudC5oYXNPd25Qcm9wZXJ0eShlKT90aGlzLmN1cnJlbnRbZV06dGhpcy5idWlsdGluc1tlXX1zZXQoZSxyLG4pe2lmKG49PT12b2lkIDAmJihuPSExKSxuKXtmb3IodmFyIGk9MDtpPHRoaXMudW5kZWZTdGFjay5sZW5ndGg7aSsrKWRlbGV0ZSB0aGlzLnVuZGVmU3RhY2tbaV1bZV07dGhpcy51bmRlZlN0YWNrLmxlbmd0aD4wJiYodGhpcy51bmRlZlN0YWNrW3RoaXMudW5kZWZTdGFjay5sZW5ndGgtMV1bZV09cil9ZWxzZXt2YXIgYT10aGlzLnVuZGVmU3RhY2tbdGhpcy51bmRlZlN0YWNrLmxlbmd0aC0xXTthJiYhYS5oYXNPd25Qcm9wZXJ0eShlKSYmKGFbZV09dGhpcy5jdXJyZW50W2VdKX1yPT1udWxsP2RlbGV0ZSB0aGlzLmN1cnJlbnRbZV06dGhpcy5jdXJyZW50W2VdPXJ9fSxjNWU9YVY7ZmUoIlxcbm9leHBhbmQiLGZ1bmN0aW9uKHQpe3ZhciBlPXQucG9wVG9rZW4oKTtyZXR1cm4gdC5pc0V4cGFuZGFibGUoZS50ZXh0KSYmKGUubm9leHBhbmQ9ITAsZS50cmVhdEFzUmVsYXg9ITApLHt0b2tlbnM6W2VdLG51bUFyZ3M6MH19KTtmZSgiXFxleHBhbmRhZnRlciIsZnVuY3Rpb24odCl7dmFyIGU9dC5wb3BUb2tlbigpO3JldHVybiB0LmV4cGFuZE9uY2UoITApLHt0b2tlbnM6W2VdLG51bUFyZ3M6MH19KTtmZSgiXFxAZmlyc3RvZnR3byIsZnVuY3Rpb24odCl7dmFyIGU9dC5jb25zdW1lQXJncygyKTtyZXR1cm57dG9rZW5zOmVbMF0sbnVtQXJnczowfX0pO2ZlKCJcXEBzZWNvbmRvZnR3byIsZnVuY3Rpb24odCl7dmFyIGU9dC5jb25zdW1lQXJncygyKTtyZXR1cm57dG9rZW5zOmVbMV0sbnVtQXJnczowfX0pO2ZlKCJcXEBpZm5leHRjaGFyIixmdW5jdGlvbih0KXt2YXIgZT10LmNvbnN1bWVBcmdzKDMpO3QuY29uc3VtZVNwYWNlcygpO3ZhciByPXQuZnV0dXJlKCk7cmV0dXJuIGVbMF0ubGVuZ3RoPT09MSYmZVswXVswXS50ZXh0PT09ci50ZXh0P3t0b2tlbnM6ZVsxXSxudW1BcmdzOjB9Ont0b2tlbnM6ZVsyXSxudW1BcmdzOjB9fSk7ZmUoIlxcQGlmc3RhciIsIlxcQGlmbmV4dGNoYXIgKntcXEBmaXJzdG9mdHdveyMxfX0iKTtmZSgiXFxUZXh0T3JNYXRoIixmdW5jdGlvbih0KXt2YXIgZT10LmNvbnN1bWVBcmdzKDIpO3JldHVybiB0Lm1vZGU9PT0idGV4dCI/e3Rva2VuczplWzBdLG51bUFyZ3M6MH06e3Rva2VuczplWzFdLG51bUFyZ3M6MH19KTt3Rz17MDowLDE6MSwyOjIsMzozLDQ6NCw1OjUsNjo2LDc6Nyw4OjgsOTo5LGE6MTAsQToxMCxiOjExLEI6MTEsYzoxMixDOjEyLGQ6MTMsRDoxMyxlOjE0LEU6MTQsZjoxNSxGOjE1fTtmZSgiXFxjaGFyIixmdW5jdGlvbih0KXt2YXIgZT10LnBvcFRva2VuKCkscixuPSIiO2lmKGUudGV4dD09PSInIilyPTgsZT10LnBvcFRva2VuKCk7ZWxzZSBpZihlLnRleHQ9PT0nIicpcj0xNixlPXQucG9wVG9rZW4oKTtlbHNlIGlmKGUudGV4dD09PSJgIilpZihlPXQucG9wVG9rZW4oKSxlLnRleHRbMF09PT0iXFwiKW49ZS50ZXh0LmNoYXJDb2RlQXQoMSk7ZWxzZXtpZihlLnRleHQ9PT0iRU9GIil0aHJvdyBuZXcgcHQoIlxcY2hhcmAgbWlzc2luZyBhcmd1bWVudCIpO249ZS50ZXh0LmNoYXJDb2RlQXQoMCl9ZWxzZSByPTEwO2lmKHIpe2lmKG49d0dbZS50ZXh0XSxuPT1udWxsfHxuPj1yKXRocm93IG5ldyBwdCgiSW52YWxpZCBiYXNlLSIrcisiIGRpZ2l0ICIrZS50ZXh0KTtmb3IodmFyIGk7KGk9d0dbdC5mdXR1cmUoKS50ZXh0XSkhPW51bGwmJmk8cjspbio9cixuKz1pLHQucG9wVG9rZW4oKX1yZXR1cm4iXFxAY2hhcnsiK24rIn0ifSk7Z0E9bygodCxlLHIsbik9Pnt2YXIgaT10LmNvbnN1bWVBcmcoKS50b2tlbnM7aWYoaS5sZW5ndGghPT0xKXRocm93IG5ldyBwdCgiXFxuZXdjb21tYW5kJ3MgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIG1hY3JvIG5hbWUiKTt2YXIgYT1pWzBdLnRleHQscz10LmlzRGVmaW5lZChhKTtpZihzJiYhZSl0aHJvdyBuZXcgcHQoIlxcbmV3Y29tbWFuZHsiK2ErIn0gYXR0ZW1wdGluZyB0byByZWRlZmluZSAiKyhhKyI7IHVzZSBcXHJlbmV3Y29tbWFuZCIpKTtpZighcyYmIXIpdGhyb3cgbmV3IHB0KCJcXHJlbmV3Y29tbWFuZHsiK2ErIn0gd2hlbiBjb21tYW5kICIrYSsiIGRvZXMgbm90IHlldCBleGlzdDsgdXNlIFxcbmV3Y29tbWFuZCIpO3ZhciBsPTA7aWYoaT10LmNvbnN1bWVBcmcoKS50b2tlbnMsaS5sZW5ndGg9PT0xJiZpWzBdLnRleHQ9PT0iWyIpe2Zvcih2YXIgdT0iIixoPXQuZXhwYW5kTmV4dFRva2VuKCk7aC50ZXh0IT09Il0iJiZoLnRleHQhPT0iRU9GIjspdSs9aC50ZXh0LGg9dC5leHBhbmROZXh0VG9rZW4oKTtpZighdS5tYXRjaCgvXlxzKlswLTldK1xzKiQvKSl0aHJvdyBuZXcgcHQoIkludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50czogIit1KTtsPXBhcnNlSW50KHUpLGk9dC5jb25zdW1lQXJnKCkudG9rZW5zfXJldHVybiBzJiZufHx0Lm1hY3Jvcy5zZXQoYSx7dG9rZW5zOmksbnVtQXJnczpsfSksIiJ9LCJuZXdjb21tYW5kIik7ZmUoIlxcbmV3Y29tbWFuZCIsdD0+Z0EodCwhMSwhMCwhMSkpO2ZlKCJcXHJlbmV3Y29tbWFuZCIsdD0+Z0EodCwhMCwhMSwhMSkpO2ZlKCJcXHByb3ZpZGVjb21tYW5kIix0PT5nQSh0LCEwLCEwLCEwKSk7ZmUoIlxcbWVzc2FnZSIsdD0+e3ZhciBlPXQuY29uc3VtZUFyZ3MoMSlbMF07cmV0dXJuIGNvbnNvbGUubG9nKGUucmV2ZXJzZSgpLm1hcChyPT5yLnRleHQpLmpvaW4oIiIpKSwiIn0pO2ZlKCJcXGVycm1lc3NhZ2UiLHQ9Pnt2YXIgZT10LmNvbnN1bWVBcmdzKDEpWzBdO3JldHVybiBjb25zb2xlLmVycm9yKGUucmV2ZXJzZSgpLm1hcChyPT5yLnRleHQpLmpvaW4oIiIpKSwiIn0pO2ZlKCJcXHNob3ciLHQ9Pnt2YXIgZT10LnBvcFRva2VuKCkscj1lLnRleHQ7cmV0dXJuIGNvbnNvbGUubG9nKGUsdC5tYWNyb3MuZ2V0KHIpLHloW3JdLEFuLm1hdGhbcl0sQW4udGV4dFtyXSksIiJ9KTtmZSgiXFxiZ3JvdXAiLCJ7Iik7ZmUoIlxcZWdyb3VwIiwifSIpO2ZlKCJ+IiwiXFxub2JyZWFrc3BhY2UiKTtmZSgiXFxscSIsImAiKTtmZSgiXFxycSIsIiciKTtmZSgiXFxhYSIsIlxcciBhIik7ZmUoIlxcQUEiLCJcXHIgQSIpO2ZlKCJcXHRleHRjb3B5cmlnaHQiLCJcXGh0bWxAbWF0aG1se1xcdGV4dGNpcmNsZWR7Y319e1xcY2hhcmBceEE5fSIpO2ZlKCJcXGNvcHlyaWdodCIsIlxcVGV4dE9yTWF0aHtcXHRleHRjb3B5cmlnaHR9e1xcdGV4dHtcXHRleHRjb3B5cmlnaHR9fSIpO2ZlKCJcXHRleHRyZWdpc3RlcmVkIiwiXFxodG1sQG1hdGhtbHtcXHRleHRjaXJjbGVke1xcc2NyaXB0c2l6ZSBSfX17XFxjaGFyYFx4QUV9Iik7ZmUoIlx1MjEyQyIsIlxcbWF0aHNjcntCfSIpO2ZlKCJcdTIxMzAiLCJcXG1hdGhzY3J7RX0iKTtmZSgiXHUyMTMxIiwiXFxtYXRoc2Nye0Z9Iik7ZmUoIlx1MjEwQiIsIlxcbWF0aHNjcntIfSIpO2ZlKCJcdTIxMTAiLCJcXG1hdGhzY3J7SX0iKTtmZSgiXHUyMTEyIiwiXFxtYXRoc2Nye0x9Iik7ZmUoIlx1MjEzMyIsIlxcbWF0aHNjcntNfSIpO2ZlKCJcdTIxMUIiLCJcXG1hdGhzY3J7Un0iKTtmZSgiXHUyMTJEIiwiXFxtYXRoZnJha3tDfSIpO2ZlKCJcdTIxMEMiLCJcXG1hdGhmcmFre0h9Iik7ZmUoIlx1MjEyOCIsIlxcbWF0aGZyYWt7Wn0iKTtmZSgiXFxCYmJrIiwiXFxCYmJ7a30iKTtmZSgiXHhCNyIsIlxcY2RvdHAiKTtmZSgiXFxsbGFwIiwiXFxtYXRobGxhcHtcXHRleHRybXsjMX19Iik7ZmUoIlxccmxhcCIsIlxcbWF0aHJsYXB7XFx0ZXh0cm17IzF9fSIpO2ZlKCJcXGNsYXAiLCJcXG1hdGhjbGFwe1xcdGV4dHJteyMxfX0iKTtmZSgiXFxtYXRoc3RydXQiLCJcXHZwaGFudG9teyh9Iik7ZmUoIlxcdW5kZXJiYXIiLCJcXHVuZGVybGluZXtcXHRleHR7IzF9fSIpO2ZlKCJcXG5vdCIsJ1xcaHRtbEBtYXRobWx7XFxtYXRocmVse1xcbWF0aHJsYXBcXEBub3R9fXtcXGNoYXIiMzM4fScpO2ZlKCJcXG5lcSIsIlxcaHRtbEBtYXRobWx7XFxtYXRocmVse1xcbm90PX19e1xcbWF0aHJlbHtcXGNoYXJgXHUyMjYwfX0iKTtmZSgiXFxuZSIsIlxcbmVxIik7ZmUoIlx1MjI2MCIsIlxcbmVxIik7ZmUoIlxcbm90aW4iLCJcXGh0bWxAbWF0aG1se1xcbWF0aHJlbHt7XFxpbn1cXG1hdGhsbGFwey9cXG1za2lwMW11fX19e1xcbWF0aHJlbHtcXGNoYXJgXHUyMjA5fX0iKTtmZSgiXHUyMjA5IiwiXFxub3RpbiIpO2ZlKCJcdTIyNTgiLCJcXGh0bWxAbWF0aG1se1xcbWF0aHJlbHs9XFxrZXJuey0xZW19XFxyYWlzZWJveHswLjRlbX17JFxcc2NyaXB0c2l6ZVxcZnJvd24kfX19e1xcbWF0aHJlbHtcXGNoYXJgXHUyMjU4fX0iKTtmZSgiXHUyMjU5IiwiXFxodG1sQG1hdGhtbHtcXHN0YWNrcmVse1xcdGlueVxcd2VkZ2V9ez19fXtcXG1hdGhyZWx7XFxjaGFyYFx1MjI1OH19Iik7ZmUoIlx1MjI1QSIsIlxcaHRtbEBtYXRobWx7XFxzdGFja3JlbHtcXHRpbnlcXHZlZX17PX19e1xcbWF0aHJlbHtcXGNoYXJgXHUyMjVBfX0iKTtmZSgiXHUyMjVCIiwiXFxodG1sQG1hdGhtbHtcXHN0YWNrcmVse1xcc2NyaXB0c2l6ZVxcc3Rhcn17PX19e1xcbWF0aHJlbHtcXGNoYXJgXHUyMjVCfX0iKTtmZSgiXHUyMjVEIiwiXFxodG1sQG1hdGhtbHtcXHN0YWNrcmVse1xcdGlueVxcbWF0aHJte2RlZn19ez19fXtcXG1hdGhyZWx7XFxjaGFyYFx1MjI1RH19Iik7ZmUoIlx1MjI1RSIsIlxcaHRtbEBtYXRobWx7XFxzdGFja3JlbHtcXHRpbnlcXG1hdGhybXttfX17PX19e1xcbWF0aHJlbHtcXGNoYXJgXHUyMjVFfX0iKTtmZSgiXHUyMjVGIiwiXFxodG1sQG1hdGhtbHtcXHN0YWNrcmVse1xcdGlueT99ez19fXtcXG1hdGhyZWx7XFxjaGFyYFx1MjI1Rn19Iik7ZmUoIlx1MjdDMiIsIlxccGVycCIpO2ZlKCJcdTIwM0MiLCJcXG1hdGhjbG9zZXshXFxta2Vybi0wLjhtdSF9Iik7ZmUoIlx1MjIwQyIsIlxcbm90bmkiKTtmZSgiXHUyMzFDIiwiXFx1bGNvcm5lciIpO2ZlKCJcdTIzMUQiLCJcXHVyY29ybmVyIik7ZmUoIlx1MjMxRSIsIlxcbGxjb3JuZXIiKTtmZSgiXHUyMzFGIiwiXFxscmNvcm5lciIpO2ZlKCJceEE5IiwiXFxjb3B5cmlnaHQiKTtmZSgiXHhBRSIsIlxcdGV4dHJlZ2lzdGVyZWQiKTtmZSgiXHVGRTBGIiwiXFx0ZXh0cmVnaXN0ZXJlZCIpO2ZlKCJcXHVsY29ybmVyIiwnXFxodG1sQG1hdGhtbHtcXEB1bGNvcm5lcn17XFxtYXRob3B7XFxjaGFyIjIzMWN9fScpO2ZlKCJcXHVyY29ybmVyIiwnXFxodG1sQG1hdGhtbHtcXEB1cmNvcm5lcn17XFxtYXRob3B7XFxjaGFyIjIzMWR9fScpO2ZlKCJcXGxsY29ybmVyIiwnXFxodG1sQG1hdGhtbHtcXEBsbGNvcm5lcn17XFxtYXRob3B7XFxjaGFyIjIzMWV9fScpO2ZlKCJcXGxyY29ybmVyIiwnXFxodG1sQG1hdGhtbHtcXEBscmNvcm5lcn17XFxtYXRob3B7XFxjaGFyIjIzMWZ9fScpO2ZlKCJcXHZkb3RzIiwie1xcdmFydmRvdHNcXHJ1bGV7MHB0fXsxNXB0fX0iKTtmZSgiXHUyMkVFIiwiXFx2ZG90cyIpO2ZlKCJcXHZhckdhbW1hIiwiXFxtYXRoaXR7XFxHYW1tYX0iKTtmZSgiXFx2YXJEZWx0YSIsIlxcbWF0aGl0e1xcRGVsdGF9Iik7ZmUoIlxcdmFyVGhldGEiLCJcXG1hdGhpdHtcXFRoZXRhfSIpO2ZlKCJcXHZhckxhbWJkYSIsIlxcbWF0aGl0e1xcTGFtYmRhfSIpO2ZlKCJcXHZhclhpIiwiXFxtYXRoaXR7XFxYaX0iKTtmZSgiXFx2YXJQaSIsIlxcbWF0aGl0e1xcUGl9Iik7ZmUoIlxcdmFyU2lnbWEiLCJcXG1hdGhpdHtcXFNpZ21hfSIpO2ZlKCJcXHZhclVwc2lsb24iLCJcXG1hdGhpdHtcXFVwc2lsb259Iik7ZmUoIlxcdmFyUGhpIiwiXFxtYXRoaXR7XFxQaGl9Iik7ZmUoIlxcdmFyUHNpIiwiXFxtYXRoaXR7XFxQc2l9Iik7ZmUoIlxcdmFyT21lZ2EiLCJcXG1hdGhpdHtcXE9tZWdhfSIpO2ZlKCJcXHN1YnN0YWNrIiwiXFxiZWdpbntzdWJhcnJheX17Y30jMVxcZW5ke3N1YmFycmF5fSIpO2ZlKCJcXGNvbG9uIiwiXFxub2JyZWFrXFxtc2tpcDJtdVxcbWF0aHB1bmN0e31cXG1hdGhjaG9pY2V7XFxta2Vybi0zbXV9e1xcbWtlcm4tM211fXt9e317On1cXG1za2lwNm11XFxyZWxheCIpO2ZlKCJcXGJveGVkIiwiXFxmYm94eyRcXGRpc3BsYXlzdHlsZXsjMX0kfSIpO2ZlKCJcXGlmZiIsIlxcRE9UU0JcXDtcXExvbmdsZWZ0cmlnaHRhcnJvd1xcOyIpO2ZlKCJcXGltcGxpZXMiLCJcXERPVFNCXFw7XFxMb25ncmlnaHRhcnJvd1xcOyIpO2ZlKCJcXGltcGxpZWRieSIsIlxcRE9UU0JcXDtcXExvbmdsZWZ0YXJyb3dcXDsiKTtmZSgiXFxkZGRvdCIsIntcXG92ZXJzZXR7XFxyYWlzZWJveHstMC4xZXh9e1xcbm9ybWFsc2l6ZSAuLi59fXsjMX19Iik7ZmUoIlxcZGRkZG90Iiwie1xcb3ZlcnNldHtcXHJhaXNlYm94ey0wLjFleH17XFxub3JtYWxzaXplIC4uLi59fXsjMX19Iik7a0c9eyIsIjoiXFxkb3RzYyIsIlxcbm90IjoiXFxkb3RzYiIsIisiOiJcXGRvdHNiIiwiPSI6IlxcZG90c2IiLCI8IjoiXFxkb3RzYiIsIj4iOiJcXGRvdHNiIiwiLSI6IlxcZG90c2IiLCIqIjoiXFxkb3RzYiIsIjoiOiJcXGRvdHNiIiwiXFxET1RTQiI6IlxcZG90c2IiLCJcXGNvcHJvZCI6IlxcZG90c2IiLCJcXGJpZ3ZlZSI6IlxcZG90c2IiLCJcXGJpZ3dlZGdlIjoiXFxkb3RzYiIsIlxcYmlndXBsdXMiOiJcXGRvdHNiIiwiXFxiaWdjYXAiOiJcXGRvdHNiIiwiXFxiaWdjdXAiOiJcXGRvdHNiIiwiXFxwcm9kIjoiXFxkb3RzYiIsIlxcc3VtIjoiXFxkb3RzYiIsIlxcYmlnb3RpbWVzIjoiXFxkb3RzYiIsIlxcYmlnb3BsdXMiOiJcXGRvdHNiIiwiXFxiaWdvZG90IjoiXFxkb3RzYiIsIlxcYmlnc3FjdXAiOiJcXGRvdHNiIiwiXFxBbmQiOiJcXGRvdHNiIiwiXFxsb25ncmlnaHRhcnJvdyI6IlxcZG90c2IiLCJcXExvbmdyaWdodGFycm93IjoiXFxkb3RzYiIsIlxcbG9uZ2xlZnRhcnJvdyI6IlxcZG90c2IiLCJcXExvbmdsZWZ0YXJyb3ciOiJcXGRvdHNiIiwiXFxsb25nbGVmdHJpZ2h0YXJyb3ciOiJcXGRvdHNiIiwiXFxMb25nbGVmdHJpZ2h0YXJyb3ciOiJcXGRvdHNiIiwiXFxtYXBzdG8iOiJcXGRvdHNiIiwiXFxsb25nbWFwc3RvIjoiXFxkb3RzYiIsIlxcaG9va3JpZ2h0YXJyb3ciOiJcXGRvdHNiIiwiXFxkb3RlcSI6IlxcZG90c2IiLCJcXG1hdGhiaW4iOiJcXGRvdHNiIiwiXFxtYXRocmVsIjoiXFxkb3RzYiIsIlxccmVsYmFyIjoiXFxkb3RzYiIsIlxcUmVsYmFyIjoiXFxkb3RzYiIsIlxceHJpZ2h0YXJyb3ciOiJcXGRvdHNiIiwiXFx4bGVmdGFycm93IjoiXFxkb3RzYiIsIlxcRE9UU0kiOiJcXGRvdHNpIiwiXFxpbnQiOiJcXGRvdHNpIiwiXFxvaW50IjoiXFxkb3RzaSIsIlxcaWludCI6IlxcZG90c2kiLCJcXGlpaW50IjoiXFxkb3RzaSIsIlxcaWlpaW50IjoiXFxkb3RzaSIsIlxcaWRvdHNpbnQiOiJcXGRvdHNpIiwiXFxET1RTWCI6IlxcZG90c3gifTtmZSgiXFxkb3RzIixmdW5jdGlvbih0KXt2YXIgZT0iXFxkb3RzbyIscj10LmV4cGFuZEFmdGVyRnV0dXJlKCkudGV4dDtyZXR1cm4gciBpbiBrRz9lPWtHW3JdOihyLnNsaWNlKDAsNCk9PT0iXFxub3QifHxyIGluIEFuLm1hdGgmJkp0LmNvbnRhaW5zKFsiYmluIiwicmVsIl0sQW4ubWF0aFtyXS5ncm91cCkpJiYoZT0iXFxkb3RzYiIpLGV9KTt5QT17IikiOiEwLCJdIjohMCwiXFxyYnJhY2siOiEwLCJcXH0iOiEwLCJcXHJicmFjZSI6ITAsIlxccmFuZ2xlIjohMCwiXFxyY2VpbCI6ITAsIlxccmZsb29yIjohMCwiXFxyZ3JvdXAiOiEwLCJcXHJtb3VzdGFjaGUiOiEwLCJcXHJpZ2h0IjohMCwiXFxiaWdyIjohMCwiXFxiaWdnciI6ITAsIlxcQmlnciI6ITAsIlxcQmlnZ3IiOiEwLCQ6ITAsIjsiOiEwLCIuIjohMCwiLCI6ITB9O2ZlKCJcXGRvdHNvIixmdW5jdGlvbih0KXt2YXIgZT10LmZ1dHVyZSgpLnRleHQ7cmV0dXJuIGUgaW4geUE/IlxcbGRvdHNcXCwiOiJcXGxkb3RzIn0pO2ZlKCJcXGRvdHNjIixmdW5jdGlvbih0KXt2YXIgZT10LmZ1dHVyZSgpLnRleHQ7cmV0dXJuIGUgaW4geUEmJmUhPT0iLCI/IlxcbGRvdHNcXCwiOiJcXGxkb3RzIn0pO2ZlKCJcXGNkb3RzIixmdW5jdGlvbih0KXt2YXIgZT10LmZ1dHVyZSgpLnRleHQ7cmV0dXJuIGUgaW4geUE/IlxcQGNkb3RzXFwsIjoiXFxAY2RvdHMifSk7ZmUoIlxcZG90c2IiLCJcXGNkb3RzIik7ZmUoIlxcZG90c20iLCJcXGNkb3RzIik7ZmUoIlxcZG90c2kiLCJcXCFcXGNkb3RzIik7ZmUoIlxcZG90c3giLCJcXGxkb3RzXFwsIik7ZmUoIlxcRE9UU0kiLCJcXHJlbGF4Iik7ZmUoIlxcRE9UU0IiLCJcXHJlbGF4Iik7ZmUoIlxcRE9UU1giLCJcXHJlbGF4Iik7ZmUoIlxcdG1zcGFjZSIsIlxcVGV4dE9yTWF0aHtcXGtlcm4jMSMzfXtcXG1za2lwIzEjMn1cXHJlbGF4Iik7ZmUoIlxcLCIsIlxcdG1zcGFjZSt7M211fXsuMTY2N2VtfSIpO2ZlKCJcXHRoaW5zcGFjZSIsIlxcLCIpO2ZlKCJcXD4iLCJcXG1za2lwezRtdX0iKTtmZSgiXFw6IiwiXFx0bXNwYWNlK3s0bXV9ey4yMjIyZW19Iik7ZmUoIlxcbWVkc3BhY2UiLCJcXDoiKTtmZSgiXFw7IiwiXFx0bXNwYWNlK3s1bXV9ey4yNzc3ZW19Iik7ZmUoIlxcdGhpY2tzcGFjZSIsIlxcOyIpO2ZlKCJcXCEiLCJcXHRtc3BhY2UtezNtdX17LjE2NjdlbX0iKTtmZSgiXFxuZWd0aGluc3BhY2UiLCJcXCEiKTtmZSgiXFxuZWdtZWRzcGFjZSIsIlxcdG1zcGFjZS17NG11fXsuMjIyMmVtfSIpO2ZlKCJcXG5lZ3RoaWNrc3BhY2UiLCJcXHRtc3BhY2UtezVtdX17LjI3N2VtfSIpO2ZlKCJcXGVuc3BhY2UiLCJcXGtlcm4uNWVtICIpO2ZlKCJcXGVuc2tpcCIsIlxcaHNraXAuNWVtXFxyZWxheCIpO2ZlKCJcXHF1YWQiLCJcXGhza2lwMWVtXFxyZWxheCIpO2ZlKCJcXHFxdWFkIiwiXFxoc2tpcDJlbVxccmVsYXgiKTtmZSgiXFx0YWciLCJcXEBpZnN0YXJcXHRhZ0BsaXRlcmFsXFx0YWdAcGFyZW4iKTtmZSgiXFx0YWdAcGFyZW4iLCJcXHRhZ0BsaXRlcmFseyh7IzF9KX0iKTtmZSgiXFx0YWdAbGl0ZXJhbCIsdD0+e2lmKHQubWFjcm9zLmdldCgiXFxkZkB0YWciKSl0aHJvdyBuZXcgcHQoIk11bHRpcGxlIFxcdGFnIik7cmV0dXJuIlxcZ2RlZlxcZGZAdGFne1xcdGV4dHsjMX19In0pO2ZlKCJcXGJtb2QiLCJcXG1hdGhjaG9pY2V7XFxtc2tpcDFtdX17XFxtc2tpcDFtdX17XFxtc2tpcDVtdX17XFxtc2tpcDVtdX1cXG1hdGhiaW57XFxybSBtb2R9XFxtYXRoY2hvaWNle1xcbXNraXAxbXV9e1xcbXNraXAxbXV9e1xcbXNraXA1bXV9e1xcbXNraXA1bXV9Iik7ZmUoIlxccG9kIiwiXFxhbGxvd2JyZWFrXFxtYXRoY2hvaWNle1xcbWtlcm4xOG11fXtcXG1rZXJuOG11fXtcXG1rZXJuOG11fXtcXG1rZXJuOG11fSgjMSkiKTtmZSgiXFxwbW9kIiwiXFxwb2R7e1xccm0gbW9kfVxcbWtlcm42bXUjMX0iKTtmZSgiXFxtb2QiLCJcXGFsbG93YnJlYWtcXG1hdGhjaG9pY2V7XFxta2VybjE4bXV9e1xcbWtlcm4xMm11fXtcXG1rZXJuMTJtdX17XFxta2VybjEybXV9e1xccm0gbW9kfVxcLFxcLCMxIik7ZmUoIlxcbmV3bGluZSIsIlxcXFxcXHJlbGF4Iik7ZmUoIlxcVGVYIiwiXFx0ZXh0cm17XFxodG1sQG1hdGhtbHtUXFxrZXJuLS4xNjY3ZW1cXHJhaXNlYm94ey0uNWV4fXtFfVxca2Vybi0uMTI1ZW1YfXtUZVh9fSIpO3lWPUV0KEpsWyJNYWluLVJlZ3VsYXIiXVs4NF1bMV0tLjcqSmxbIk1haW4tUmVndWxhciJdWzY1XVsxXSk7ZmUoIlxcTGFUZVgiLCJcXHRleHRybXtcXGh0bWxAbWF0aG1seyIrKCJMXFxrZXJuLS4zNmVtXFxyYWlzZWJveHsiK3lWKyJ9e1xcc2NyaXB0c3R5bGUgQX0iKSsiXFxrZXJuLS4xNWVtXFxUZVh9e0xhVGVYfX0iKTtmZSgiXFxLYVRlWCIsIlxcdGV4dHJte1xcaHRtbEBtYXRobWx7IisoIktcXGtlcm4tLjE3ZW1cXHJhaXNlYm94eyIreVYrIn17XFxzY3JpcHRzdHlsZSBBfSIpKyJcXGtlcm4tLjE1ZW1cXFRlWH17S2FUZVh9fSIpO2ZlKCJcXGhzcGFjZSIsIlxcQGlmc3RhclxcQGhzcGFjZXJcXEBoc3BhY2UiKTtmZSgiXFxAaHNwYWNlIiwiXFxoc2tpcCAjMVxccmVsYXgiKTtmZSgiXFxAaHNwYWNlciIsIlxccnVsZXswcHR9ezBwdH1cXGhza2lwICMxXFxyZWxheCIpO2ZlKCJcXG9yZGluYXJ5Y29sb24iLCI6Iik7ZmUoIlxcdmNlbnRjb2xvbiIsIlxcbWF0aHJlbHtcXG1hdGhvcFxcb3JkaW5hcnljb2xvbn0iKTtmZSgiXFxkYmxjb2xvbiIsJ1xcaHRtbEBtYXRobWx7XFxtYXRocmVse1xcdmNlbnRjb2xvblxcbWF0aHJlbHtcXG1rZXJuLS45bXV9XFx2Y2VudGNvbG9ufX17XFxtYXRob3B7XFxjaGFyIjIyMzd9fScpO2ZlKCJcXGNvbG9uZXFxIiwnXFxodG1sQG1hdGhtbHtcXG1hdGhyZWx7XFx2Y2VudGNvbG9uXFxtYXRocmVse1xcbWtlcm4tMS4ybXV9PX19e1xcbWF0aG9we1xcY2hhciIyMjU0fX0nKTtmZSgiXFxDb2xvbmVxcSIsJ1xcaHRtbEBtYXRobWx7XFxtYXRocmVse1xcZGJsY29sb25cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX09fX17XFxtYXRob3B7XFxjaGFyIjIyMzdcXGNoYXIiM2R9fScpO2ZlKCJcXGNvbG9uZXEiLCdcXGh0bWxAbWF0aG1se1xcbWF0aHJlbHtcXHZjZW50Y29sb25cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXG1hdGhyZWx7LX19fXtcXG1hdGhvcHtcXGNoYXIiM2FcXGNoYXIiMjIxMn19Jyk7ZmUoIlxcQ29sb25lcSIsJ1xcaHRtbEBtYXRobWx7XFxtYXRocmVse1xcZGJsY29sb25cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXG1hdGhyZWx7LX19fXtcXG1hdGhvcHtcXGNoYXIiMjIzN1xcY2hhciIyMjEyfX0nKTtmZSgiXFxlcXFjb2xvbiIsJ1xcaHRtbEBtYXRobWx7XFxtYXRocmVsez1cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXHZjZW50Y29sb259fXtcXG1hdGhvcHtcXGNoYXIiMjI1NX19Jyk7ZmUoIlxcRXFxY29sb24iLCdcXGh0bWxAbWF0aG1se1xcbWF0aHJlbHs9XFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxkYmxjb2xvbn19e1xcbWF0aG9we1xcY2hhciIzZFxcY2hhciIyMjM3fX0nKTtmZSgiXFxlcWNvbG9uIiwnXFxodG1sQG1hdGhtbHtcXG1hdGhyZWx7XFxtYXRocmVsey19XFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFx2Y2VudGNvbG9ufX17XFxtYXRob3B7XFxjaGFyIjIyMzl9fScpO2ZlKCJcXEVxY29sb24iLCdcXGh0bWxAbWF0aG1se1xcbWF0aHJlbHtcXG1hdGhyZWx7LX1cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXGRibGNvbG9ufX17XFxtYXRob3B7XFxjaGFyIjIyMTJcXGNoYXIiMjIzN319Jyk7ZmUoIlxcY29sb25hcHByb3giLCdcXGh0bWxAbWF0aG1se1xcbWF0aHJlbHtcXHZjZW50Y29sb25cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXGFwcHJveH19e1xcbWF0aG9we1xcY2hhciIzYVxcY2hhciIyMjQ4fX0nKTtmZSgiXFxDb2xvbmFwcHJveCIsJ1xcaHRtbEBtYXRobWx7XFxtYXRocmVse1xcZGJsY29sb25cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXGFwcHJveH19e1xcbWF0aG9we1xcY2hhciIyMjM3XFxjaGFyIjIyNDh9fScpO2ZlKCJcXGNvbG9uc2ltIiwnXFxodG1sQG1hdGhtbHtcXG1hdGhyZWx7XFx2Y2VudGNvbG9uXFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxzaW19fXtcXG1hdGhvcHtcXGNoYXIiM2FcXGNoYXIiMjIzY319Jyk7ZmUoIlxcQ29sb25zaW0iLCdcXGh0bWxAbWF0aG1se1xcbWF0aHJlbHtcXGRibGNvbG9uXFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFxzaW19fXtcXG1hdGhvcHtcXGNoYXIiMjIzN1xcY2hhciIyMjNjfX0nKTtmZSgiXHUyMjM3IiwiXFxkYmxjb2xvbiIpO2ZlKCJcdTIyMzkiLCJcXGVxY29sb24iKTtmZSgiXHUyMjU0IiwiXFxjb2xvbmVxcSIpO2ZlKCJcdTIyNTUiLCJcXGVxcWNvbG9uIik7ZmUoIlx1MkE3NCIsIlxcQ29sb25lcXEiKTtmZSgiXFxyYXRpbyIsIlxcdmNlbnRjb2xvbiIpO2ZlKCJcXGNvbG9uY29sb24iLCJcXGRibGNvbG9uIik7ZmUoIlxcY29sb25lcXVhbHMiLCJcXGNvbG9uZXFxIik7ZmUoIlxcY29sb25jb2xvbmVxdWFscyIsIlxcQ29sb25lcXEiKTtmZSgiXFxlcXVhbHNjb2xvbiIsIlxcZXFxY29sb24iKTtmZSgiXFxlcXVhbHNjb2xvbmNvbG9uIiwiXFxFcXFjb2xvbiIpO2ZlKCJcXGNvbG9ubWludXMiLCJcXGNvbG9uZXEiKTtmZSgiXFxjb2xvbmNvbG9ubWludXMiLCJcXENvbG9uZXEiKTtmZSgiXFxtaW51c2NvbG9uIiwiXFxlcWNvbG9uIik7ZmUoIlxcbWludXNjb2xvbmNvbG9uIiwiXFxFcWNvbG9uIik7ZmUoIlxcY29sb25jb2xvbmFwcHJveCIsIlxcQ29sb25hcHByb3giKTtmZSgiXFxjb2xvbmNvbG9uc2ltIiwiXFxDb2xvbnNpbSIpO2ZlKCJcXHNpbWNvbG9uIiwiXFxtYXRocmVse1xcc2ltXFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFx2Y2VudGNvbG9ufSIpO2ZlKCJcXHNpbWNvbG9uY29sb24iLCJcXG1hdGhyZWx7XFxzaW1cXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXGRibGNvbG9ufSIpO2ZlKCJcXGFwcHJveGNvbG9uIiwiXFxtYXRocmVse1xcYXBwcm94XFxtYXRocmVse1xcbWtlcm4tMS4ybXV9XFx2Y2VudGNvbG9ufSIpO2ZlKCJcXGFwcHJveGNvbG9uY29sb24iLCJcXG1hdGhyZWx7XFxhcHByb3hcXG1hdGhyZWx7XFxta2Vybi0xLjJtdX1cXGRibGNvbG9ufSIpO2ZlKCJcXG5vdG5pIiwiXFxodG1sQG1hdGhtbHtcXG5vdFxcbml9e1xcbWF0aHJlbHtcXGNoYXJgXHUyMjBDfX0iKTtmZSgiXFxsaW1zdXAiLCJcXERPVFNCXFxvcGVyYXRvcm5hbWUqe2xpbVxcLHN1cH0iKTtmZSgiXFxsaW1pbmYiLCJcXERPVFNCXFxvcGVyYXRvcm5hbWUqe2xpbVxcLGluZn0iKTtmZSgiXFxpbmpsaW0iLCJcXERPVFNCXFxvcGVyYXRvcm5hbWUqe2lualxcLGxpbX0iKTtmZSgiXFxwcm9qbGltIiwiXFxET1RTQlxcb3BlcmF0b3JuYW1lKntwcm9qXFwsbGltfSIpO2ZlKCJcXHZhcmxpbXN1cCIsIlxcRE9UU0JcXG9wZXJhdG9ybmFtZSp7XFxvdmVybGluZXtsaW19fSIpO2ZlKCJcXHZhcmxpbWluZiIsIlxcRE9UU0JcXG9wZXJhdG9ybmFtZSp7XFx1bmRlcmxpbmV7bGltfX0iKTtmZSgiXFx2YXJpbmpsaW0iLCJcXERPVFNCXFxvcGVyYXRvcm5hbWUqe1xcdW5kZXJyaWdodGFycm93e2xpbX19Iik7ZmUoIlxcdmFycHJvamxpbSIsIlxcRE9UU0JcXG9wZXJhdG9ybmFtZSp7XFx1bmRlcmxlZnRhcnJvd3tsaW19fSIpO2ZlKCJcXGd2ZXJ0bmVxcSIsIlxcaHRtbEBtYXRobWx7XFxAZ3ZlcnRuZXFxfXtcdTIyNjl9Iik7ZmUoIlxcbHZlcnRuZXFxIiwiXFxodG1sQG1hdGhtbHtcXEBsdmVydG5lcXF9e1x1MjI2OH0iKTtmZSgiXFxuZ2VxcSIsIlxcaHRtbEBtYXRobWx7XFxAbmdlcXF9e1x1MjI3MX0iKTtmZSgiXFxuZ2Vxc2xhbnQiLCJcXGh0bWxAbWF0aG1se1xcQG5nZXFzbGFudH17XHUyMjcxfSIpO2ZlKCJcXG5sZXFxIiwiXFxodG1sQG1hdGhtbHtcXEBubGVxcX17XHUyMjcwfSIpO2ZlKCJcXG5sZXFzbGFudCIsIlxcaHRtbEBtYXRobWx7XFxAbmxlcXNsYW50fXtcdTIyNzB9Iik7ZmUoIlxcbnNob3J0bWlkIiwiXFxodG1sQG1hdGhtbHtcXEBuc2hvcnRtaWR9e1x1MjIyNH0iKTtmZSgiXFxuc2hvcnRwYXJhbGxlbCIsIlxcaHRtbEBtYXRobWx7XFxAbnNob3J0cGFyYWxsZWx9e1x1MjIyNn0iKTtmZSgiXFxuc3Vic2V0ZXFxIiwiXFxodG1sQG1hdGhtbHtcXEBuc3Vic2V0ZXFxfXtcdTIyODh9Iik7ZmUoIlxcbnN1cHNldGVxcSIsIlxcaHRtbEBtYXRobWx7XFxAbnN1cHNldGVxcX17XHUyMjg5fSIpO2ZlKCJcXHZhcnN1YnNldG5lcSIsIlxcaHRtbEBtYXRobWx7XFxAdmFyc3Vic2V0bmVxfXtcdTIyOEF9Iik7ZmUoIlxcdmFyc3Vic2V0bmVxcSIsIlxcaHRtbEBtYXRobWx7XFxAdmFyc3Vic2V0bmVxcX17XHUyQUNCfSIpO2ZlKCJcXHZhcnN1cHNldG5lcSIsIlxcaHRtbEBtYXRobWx7XFxAdmFyc3Vwc2V0bmVxfXtcdTIyOEJ9Iik7ZmUoIlxcdmFyc3Vwc2V0bmVxcSIsIlxcaHRtbEBtYXRobWx7XFxAdmFyc3Vwc2V0bmVxcX17XHUyQUNDfSIpO2ZlKCJcXGltYXRoIiwiXFxodG1sQG1hdGhtbHtcXEBpbWF0aH17XHUwMTMxfSIpO2ZlKCJcXGptYXRoIiwiXFxodG1sQG1hdGhtbHtcXEBqbWF0aH17XHUwMjM3fSIpO2ZlKCJcXGxsYnJhY2tldCIsIlxcaHRtbEBtYXRobWx7XFxtYXRob3BlbntbXFxta2Vybi0zLjJtdVt9fXtcXG1hdGhvcGVue1xcY2hhcmBcdTI3RTZ9fSIpO2ZlKCJcXHJyYnJhY2tldCIsIlxcaHRtbEBtYXRobWx7XFxtYXRoY2xvc2V7XVxcbWtlcm4tMy4ybXVdfX17XFxtYXRoY2xvc2V7XFxjaGFyYFx1MjdFN319Iik7ZmUoIlx1MjdFNiIsIlxcbGxicmFja2V0Iik7ZmUoIlx1MjdFNyIsIlxccnJicmFja2V0Iik7ZmUoIlxcbEJyYWNlIiwiXFxodG1sQG1hdGhtbHtcXG1hdGhvcGVue1xce1xcbWtlcm4tMy4ybXVbfX17XFxtYXRob3BlbntcXGNoYXJgXHUyOTgzfX0iKTtmZSgiXFxyQnJhY2UiLCJcXGh0bWxAbWF0aG1se1xcbWF0aGNsb3Nle11cXG1rZXJuLTMuMm11XFx9fX17XFxtYXRoY2xvc2V7XFxjaGFyYFx1Mjk4NH19Iik7ZmUoIlx1Mjk4MyIsIlxcbEJyYWNlIik7ZmUoIlx1Mjk4NCIsIlxcckJyYWNlIik7ZmUoIlxcbWludXNvIiwiXFxtYXRoYmlue1xcaHRtbEBtYXRobWx7e1xcbWF0aHJsYXB7XFxtYXRoY2hvaWNle1xca2VybnswLjE0NWVtfX17XFxrZXJuezAuMTQ1ZW19fXtcXGtlcm57MC4xMDE1ZW19fXtcXGtlcm57MC4wNzI1ZW19fVxcY2lyY317LX19fXtcXGNoYXJgXHUyOUI1fX0iKTtmZSgiXHUyOUI1IiwiXFxtaW51c28iKTtmZSgiXFxkYXJyIiwiXFxkb3duYXJyb3ciKTtmZSgiXFxkQXJyIiwiXFxEb3duYXJyb3ciKTtmZSgiXFxEYXJyIiwiXFxEb3duYXJyb3ciKTtmZSgiXFxsYW5nIiwiXFxsYW5nbGUiKTtmZSgiXFxyYW5nIiwiXFxyYW5nbGUiKTtmZSgiXFx1YXJyIiwiXFx1cGFycm93Iik7ZmUoIlxcdUFyciIsIlxcVXBhcnJvdyIpO2ZlKCJcXFVhcnIiLCJcXFVwYXJyb3ciKTtmZSgiXFxOIiwiXFxtYXRoYmJ7Tn0iKTtmZSgiXFxSIiwiXFxtYXRoYmJ7Un0iKTtmZSgiXFxaIiwiXFxtYXRoYmJ7Wn0iKTtmZSgiXFxhbGVmIiwiXFxhbGVwaCIpO2ZlKCJcXGFsZWZzeW0iLCJcXGFsZXBoIik7ZmUoIlxcQWxwaGEiLCJcXG1hdGhybXtBfSIpO2ZlKCJcXEJldGEiLCJcXG1hdGhybXtCfSIpO2ZlKCJcXGJ1bGwiLCJcXGJ1bGxldCIpO2ZlKCJcXENoaSIsIlxcbWF0aHJte1h9Iik7ZmUoIlxcY2x1YnMiLCJcXGNsdWJzdWl0Iik7ZmUoIlxcY251bXMiLCJcXG1hdGhiYntDfSIpO2ZlKCJcXENvbXBsZXgiLCJcXG1hdGhiYntDfSIpO2ZlKCJcXERhZ2dlciIsIlxcZGRhZ2dlciIpO2ZlKCJcXGRpYW1vbmRzIiwiXFxkaWFtb25kc3VpdCIpO2ZlKCJcXGVtcHR5IiwiXFxlbXB0eXNldCIpO2ZlKCJcXEVwc2lsb24iLCJcXG1hdGhybXtFfSIpO2ZlKCJcXEV0YSIsIlxcbWF0aHJte0h9Iik7ZmUoIlxcZXhpc3QiLCJcXGV4aXN0cyIpO2ZlKCJcXGhhcnIiLCJcXGxlZnRyaWdodGFycm93Iik7ZmUoIlxcaEFyciIsIlxcTGVmdHJpZ2h0YXJyb3ciKTtmZSgiXFxIYXJyIiwiXFxMZWZ0cmlnaHRhcnJvdyIpO2ZlKCJcXGhlYXJ0cyIsIlxcaGVhcnRzdWl0Iik7ZmUoIlxcaW1hZ2UiLCJcXEltIik7ZmUoIlxcaW5maW4iLCJcXGluZnR5Iik7ZmUoIlxcSW90YSIsIlxcbWF0aHJte0l9Iik7ZmUoIlxcaXNpbiIsIlxcaW4iKTtmZSgiXFxLYXBwYSIsIlxcbWF0aHJte0t9Iik7ZmUoIlxcbGFyciIsIlxcbGVmdGFycm93Iik7ZmUoIlxcbEFyciIsIlxcTGVmdGFycm93Iik7ZmUoIlxcTGFyciIsIlxcTGVmdGFycm93Iik7ZmUoIlxcbHJhcnIiLCJcXGxlZnRyaWdodGFycm93Iik7ZmUoIlxcbHJBcnIiLCJcXExlZnRyaWdodGFycm93Iik7ZmUoIlxcTHJhcnIiLCJcXExlZnRyaWdodGFycm93Iik7ZmUoIlxcTXUiLCJcXG1hdGhybXtNfSIpO2ZlKCJcXG5hdG51bXMiLCJcXG1hdGhiYntOfSIpO2ZlKCJcXE51IiwiXFxtYXRocm17Tn0iKTtmZSgiXFxPbWljcm9uIiwiXFxtYXRocm17T30iKTtmZSgiXFxwbHVzbW4iLCJcXHBtIik7ZmUoIlxccmFyciIsIlxccmlnaHRhcnJvdyIpO2ZlKCJcXHJBcnIiLCJcXFJpZ2h0YXJyb3ciKTtmZSgiXFxSYXJyIiwiXFxSaWdodGFycm93Iik7ZmUoIlxccmVhbCIsIlxcUmUiKTtmZSgiXFxyZWFscyIsIlxcbWF0aGJie1J9Iik7ZmUoIlxcUmVhbHMiLCJcXG1hdGhiYntSfSIpO2ZlKCJcXFJobyIsIlxcbWF0aHJte1B9Iik7ZmUoIlxcc2RvdCIsIlxcY2RvdCIpO2ZlKCJcXHNlY3QiLCJcXFMiKTtmZSgiXFxzcGFkZXMiLCJcXHNwYWRlc3VpdCIpO2ZlKCJcXHN1YiIsIlxcc3Vic2V0Iik7ZmUoIlxcc3ViZSIsIlxcc3Vic2V0ZXEiKTtmZSgiXFxzdXBlIiwiXFxzdXBzZXRlcSIpO2ZlKCJcXFRhdSIsIlxcbWF0aHJte1R9Iik7ZmUoIlxcdGhldGFzeW0iLCJcXHZhcnRoZXRhIik7ZmUoIlxcd2VpZXJwIiwiXFx3cCIpO2ZlKCJcXFpldGEiLCJcXG1hdGhybXtafSIpO2ZlKCJcXGFyZ21pbiIsIlxcRE9UU0JcXG9wZXJhdG9ybmFtZSp7YXJnXFwsbWlufSIpO2ZlKCJcXGFyZ21heCIsIlxcRE9UU0JcXG9wZXJhdG9ybmFtZSp7YXJnXFwsbWF4fSIpO2ZlKCJcXHBsaW0iLCJcXERPVFNCXFxtYXRob3B7XFxvcGVyYXRvcm5hbWV7cGxpbX19XFxsaW1pdHMiKTtmZSgiXFxicmEiLCJcXG1hdGhpbm5lcntcXGxhbmdsZXsjMX18fSIpO2ZlKCJcXGtldCIsIlxcbWF0aGlubmVye3x7IzF9XFxyYW5nbGV9Iik7ZmUoIlxcYnJha2V0IiwiXFxtYXRoaW5uZXJ7XFxsYW5nbGV7IzF9XFxyYW5nbGV9Iik7ZmUoIlxcQnJhIiwiXFxsZWZ0XFxsYW5nbGUjMVxccmlnaHR8Iik7ZmUoIlxcS2V0IiwiXFxsZWZ0fCMxXFxyaWdodFxccmFuZ2xlIik7dlY9byh0PT5lPT57dmFyIHI9ZS5jb25zdW1lQXJnKCkudG9rZW5zLG49ZS5jb25zdW1lQXJnKCkudG9rZW5zLGk9ZS5jb25zdW1lQXJnKCkudG9rZW5zLGE9ZS5jb25zdW1lQXJnKCkudG9rZW5zLHM9ZS5tYWNyb3MuZ2V0KCJ8IiksbD1lLm1hY3Jvcy5nZXQoIlxcfCIpO2UubWFjcm9zLmJlZ2luR3JvdXAoKTt2YXIgdT1vKGQ9PnA9Pnt0JiYocC5tYWNyb3Muc2V0KCJ8IixzKSxpLmxlbmd0aCYmcC5tYWNyb3Muc2V0KCJcXHwiLGwpKTt2YXIgbT1kO2lmKCFkJiZpLmxlbmd0aCl7dmFyIGc9cC5mdXR1cmUoKTtnLnRleHQ9PT0ifCImJihwLnBvcFRva2VuKCksbT0hMCl9cmV0dXJue3Rva2VuczptP2k6bixudW1BcmdzOjB9fSwibWlkTWFjcm8iKTtlLm1hY3Jvcy5zZXQoInwiLHUoITEpKSxpLmxlbmd0aCYmZS5tYWNyb3Muc2V0KCJcXHwiLHUoITApKTt2YXIgaD1lLmNvbnN1bWVBcmcoKS50b2tlbnMsZj1lLmV4cGFuZFRva2VucyhbLi4uYSwuLi5oLC4uLnJdKTtyZXR1cm4gZS5tYWNyb3MuZW5kR3JvdXAoKSx7dG9rZW5zOmYucmV2ZXJzZSgpLG51bUFyZ3M6MH19LCJicmFrZXRIZWxwZXIiKTtmZSgiXFxicmFAa2V0Iix2VighMSkpO2ZlKCJcXGJyYUBzZXQiLHZWKCEwKSk7ZmUoIlxcQnJha2V0IiwiXFxicmFAa2V0e1xcbGVmdFxcbGFuZ2xlfXtcXCxcXG1pZGRsZVxcdmVydFxcLH17XFwsXFxtaWRkbGVcXHZlcnRcXCx9e1xccmlnaHRcXHJhbmdsZX0iKTtmZSgiXFxTZXQiLCJcXGJyYUBzZXR7XFxsZWZ0XFx7XFw6fXtcXDtcXG1pZGRsZVxcdmVydFxcO317XFw7XFxtaWRkbGVcXFZlcnRcXDt9e1xcOlxccmlnaHRcXH19Iik7ZmUoIlxcc2V0IiwiXFxicmFAc2V0e1xce1xcLH17XFxtaWR9e317XFwsXFx9fSIpO2ZlKCJcXGFuZ2xuIiwie1xcYW5nbCBufSIpO2ZlKCJcXGJsdWUiLCJcXHRleHRjb2xvcnsjIzY0OTVlZH17IzF9Iik7ZmUoIlxcb3JhbmdlIiwiXFx0ZXh0Y29sb3J7IyNmZmE1MDB9eyMxfSIpO2ZlKCJcXHBpbmsiLCJcXHRleHRjb2xvcnsjI2ZmMDBhZn17IzF9Iik7ZmUoIlxccmVkIiwiXFx0ZXh0Y29sb3J7IyNkZjAwMzB9eyMxfSIpO2ZlKCJcXGdyZWVuIiwiXFx0ZXh0Y29sb3J7IyMyOGFlN2J9eyMxfSIpO2ZlKCJcXGdyYXkiLCJcXHRleHRjb2xvcntncmF5fXsjMX0iKTtmZSgiXFxwdXJwbGUiLCJcXHRleHRjb2xvcnsjIzlkMzhiZH17IzF9Iik7ZmUoIlxcYmx1ZUEiLCJcXHRleHRjb2xvcnsjI2NjZmFmZn17IzF9Iik7ZmUoIlxcYmx1ZUIiLCJcXHRleHRjb2xvcnsjIzgwZjZmZn17IzF9Iik7ZmUoIlxcYmx1ZUMiLCJcXHRleHRjb2xvcnsjIzYzZDllYX17IzF9Iik7ZmUoIlxcYmx1ZUQiLCJcXHRleHRjb2xvcnsjIzExYWNjZH17IzF9Iik7ZmUoIlxcYmx1ZUUiLCJcXHRleHRjb2xvcnsjIzBjN2Y5OX17IzF9Iik7ZmUoIlxcdGVhbEEiLCJcXHRleHRjb2xvcnsjIzk0ZmZmNX17IzF9Iik7ZmUoIlxcdGVhbEIiLCJcXHRleHRjb2xvcnsjIzI2ZWRkNX17IzF9Iik7ZmUoIlxcdGVhbEMiLCJcXHRleHRjb2xvcnsjIzAxZDFjMX17IzF9Iik7ZmUoIlxcdGVhbEQiLCJcXHRleHRjb2xvcnsjIzAxYTk5NX17IzF9Iik7ZmUoIlxcdGVhbEUiLCJcXHRleHRjb2xvcnsjIzIwODE3MH17IzF9Iik7ZmUoIlxcZ3JlZW5BIiwiXFx0ZXh0Y29sb3J7IyNiNmZmYjB9eyMxfSIpO2ZlKCJcXGdyZWVuQiIsIlxcdGV4dGNvbG9yeyMjOGFmMjgxfXsjMX0iKTtmZSgiXFxncmVlbkMiLCJcXHRleHRjb2xvcnsjIzc0Y2Y3MH17IzF9Iik7ZmUoIlxcZ3JlZW5EIiwiXFx0ZXh0Y29sb3J7IyMxZmFiNTR9eyMxfSIpO2ZlKCJcXGdyZWVuRSIsIlxcdGV4dGNvbG9yeyMjMGQ5MjNmfXsjMX0iKTtmZSgiXFxnb2xkQSIsIlxcdGV4dGNvbG9yeyMjZmZkMGE5fXsjMX0iKTtmZSgiXFxnb2xkQiIsIlxcdGV4dGNvbG9yeyMjZmZiYjcxfXsjMX0iKTtmZSgiXFxnb2xkQyIsIlxcdGV4dGNvbG9yeyMjZmY5YzM5fXsjMX0iKTtmZSgiXFxnb2xkRCIsIlxcdGV4dGNvbG9yeyMjZTA3ZDEwfXsjMX0iKTtmZSgiXFxnb2xkRSIsIlxcdGV4dGNvbG9yeyMjYTc1YTA1fXsjMX0iKTtmZSgiXFxyZWRBIiwiXFx0ZXh0Y29sb3J7IyNmY2E5YTl9eyMxfSIpO2ZlKCJcXHJlZEIiLCJcXHRleHRjb2xvcnsjI2ZmODQ4Mn17IzF9Iik7ZmUoIlxccmVkQyIsIlxcdGV4dGNvbG9yeyMjZjk2ODVkfXsjMX0iKTtmZSgiXFxyZWREIiwiXFx0ZXh0Y29sb3J7IyNlODRkMzl9eyMxfSIpO2ZlKCJcXHJlZEUiLCJcXHRleHRjb2xvcnsjI2JjMjYxMn17IzF9Iik7ZmUoIlxcbWFyb29uQSIsIlxcdGV4dGNvbG9yeyMjZmZiZGUwfXsjMX0iKTtmZSgiXFxtYXJvb25CIiwiXFx0ZXh0Y29sb3J7IyNmZjkyYzZ9eyMxfSIpO2ZlKCJcXG1hcm9vbkMiLCJcXHRleHRjb2xvcnsjI2VkNWZhNn17IzF9Iik7ZmUoIlxcbWFyb29uRCIsIlxcdGV4dGNvbG9yeyMjY2EzMzdjfXsjMX0iKTtmZSgiXFxtYXJvb25FIiwiXFx0ZXh0Y29sb3J7IyM5ZTAzNGV9eyMxfSIpO2ZlKCJcXHB1cnBsZUEiLCJcXHRleHRjb2xvcnsjI2RkZDdmZn17IzF9Iik7ZmUoIlxccHVycGxlQiIsIlxcdGV4dGNvbG9yeyMjYzZiOWZjfXsjMX0iKTtmZSgiXFxwdXJwbGVDIiwiXFx0ZXh0Y29sb3J7IyNhYTg3ZmZ9eyMxfSIpO2ZlKCJcXHB1cnBsZUQiLCJcXHRleHRjb2xvcnsjIzc4NTRhYn17IzF9Iik7ZmUoIlxccHVycGxlRSIsIlxcdGV4dGNvbG9yeyMjNTQzYjc4fXsjMX0iKTtmZSgiXFxtaW50QSIsIlxcdGV4dGNvbG9yeyMjZjVmOWU4fXsjMX0iKTtmZSgiXFxtaW50QiIsIlxcdGV4dGNvbG9yeyMjZWRmMmRmfXsjMX0iKTtmZSgiXFxtaW50QyIsIlxcdGV4dGNvbG9yeyMjZTBlNWNjfXsjMX0iKTtmZSgiXFxncmF5QSIsIlxcdGV4dGNvbG9yeyMjZjZmN2Y3fXsjMX0iKTtmZSgiXFxncmF5QiIsIlxcdGV4dGNvbG9yeyMjZjBmMWYyfXsjMX0iKTtmZSgiXFxncmF5QyIsIlxcdGV4dGNvbG9yeyMjZTNlNWU2fXsjMX0iKTtmZSgiXFxncmF5RCIsIlxcdGV4dGNvbG9yeyMjZDZkOGRhfXsjMX0iKTtmZSgiXFxncmF5RSIsIlxcdGV4dGNvbG9yeyMjYmFiZWMyfXsjMX0iKTtmZSgiXFxncmF5RiIsIlxcdGV4dGNvbG9yeyMjODg4ZDkzfXsjMX0iKTtmZSgiXFxncmF5RyIsIlxcdGV4dGNvbG9yeyMjNjI2NTY5fXsjMX0iKTtmZSgiXFxncmF5SCIsIlxcdGV4dGNvbG9yeyMjM2IzZTQwfXsjMX0iKTtmZSgiXFxncmF5SSIsIlxcdGV4dGNvbG9yeyMjMjEyNDJjfXsjMX0iKTtmZSgiXFxrYUJsdWUiLCJcXHRleHRjb2xvcnsjIzMxNDQ1M317IzF9Iik7ZmUoIlxca2FHcmVlbiIsIlxcdGV4dGNvbG9yeyMjNzFCMzA3fXsjMX0iKTt4Vj17Il4iOiEwLF86ITAsIlxcbGltaXRzIjohMCwiXFxub2xpbWl0cyI6ITB9LHRBPWNsYXNze3N0YXRpY3tvKHRoaXMsIk1hY3JvRXhwYW5kZXIiKX1jb25zdHJ1Y3RvcihlLHIsbil7dGhpcy5zZXR0aW5ncz12b2lkIDAsdGhpcy5leHBhbnNpb25Db3VudD12b2lkIDAsdGhpcy5sZXhlcj12b2lkIDAsdGhpcy5tYWNyb3M9dm9pZCAwLHRoaXMuc3RhY2s9dm9pZCAwLHRoaXMubW9kZT12b2lkIDAsdGhpcy5zZXR0aW5ncz1yLHRoaXMuZXhwYW5zaW9uQ291bnQ9MCx0aGlzLmZlZWQoZSksdGhpcy5tYWNyb3M9bmV3IGVBKGM1ZSxyLm1hY3JvcyksdGhpcy5tb2RlPW4sdGhpcy5zdGFjaz1bXX1mZWVkKGUpe3RoaXMubGV4ZXI9bmV3IEEzKGUsdGhpcy5zZXR0aW5ncyl9c3dpdGNoTW9kZShlKXt0aGlzLm1vZGU9ZX1iZWdpbkdyb3VwKCl7dGhpcy5tYWNyb3MuYmVnaW5Hcm91cCgpfWVuZEdyb3VwKCl7dGhpcy5tYWNyb3MuZW5kR3JvdXAoKX1lbmRHcm91cHMoKXt0aGlzLm1hY3Jvcy5lbmRHcm91cHMoKX1mdXR1cmUoKXtyZXR1cm4gdGhpcy5zdGFjay5sZW5ndGg9PT0wJiZ0aGlzLnB1c2hUb2tlbih0aGlzLmxleGVyLmxleCgpKSx0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLTFdfXBvcFRva2VuKCl7cmV0dXJuIHRoaXMuZnV0dXJlKCksdGhpcy5zdGFjay5wb3AoKX1wdXNoVG9rZW4oZSl7dGhpcy5zdGFjay5wdXNoKGUpfXB1c2hUb2tlbnMoZSl7dGhpcy5zdGFjay5wdXNoKC4uLmUpfXNjYW5Bcmd1bWVudChlKXt2YXIgcixuLGk7aWYoZSl7aWYodGhpcy5jb25zdW1lU3BhY2VzKCksdGhpcy5mdXR1cmUoKS50ZXh0IT09IlsiKXJldHVybiBudWxsO3I9dGhpcy5wb3BUb2tlbigpLHt0b2tlbnM6aSxlbmQ6bn09dGhpcy5jb25zdW1lQXJnKFsiXSJdKX1lbHNlKHt0b2tlbnM6aSxzdGFydDpyLGVuZDpufT10aGlzLmNvbnN1bWVBcmcoKSk7cmV0dXJuIHRoaXMucHVzaFRva2VuKG5ldyBfbygiRU9GIixuLmxvYykpLHRoaXMucHVzaFRva2VucyhpKSxyLnJhbmdlKG4sIiIpfWNvbnN1bWVTcGFjZXMoKXtmb3IoOzspe3ZhciBlPXRoaXMuZnV0dXJlKCk7aWYoZS50ZXh0PT09IiAiKXRoaXMuc3RhY2sucG9wKCk7ZWxzZSBicmVha319Y29uc3VtZUFyZyhlKXt2YXIgcj1bXSxuPWUmJmUubGVuZ3RoPjA7bnx8dGhpcy5jb25zdW1lU3BhY2VzKCk7dmFyIGk9dGhpcy5mdXR1cmUoKSxhLHM9MCxsPTA7ZG97aWYoYT10aGlzLnBvcFRva2VuKCksci5wdXNoKGEpLGEudGV4dD09PSJ7IikrK3M7ZWxzZSBpZihhLnRleHQ9PT0ifSIpe2lmKC0tcyxzPT09LTEpdGhyb3cgbmV3IHB0KCJFeHRyYSB9IixhKX1lbHNlIGlmKGEudGV4dD09PSJFT0YiKXRocm93IG5ldyBwdCgiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXQgaW4gYSBtYWNybyBhcmd1bWVudCwgZXhwZWN0ZWQgJyIrKGUmJm4/ZVtsXToifSIpKyInIixhKTtpZihlJiZuKWlmKChzPT09MHx8cz09PTEmJmVbbF09PT0ieyIpJiZhLnRleHQ9PT1lW2xdKXtpZigrK2wsbD09PWUubGVuZ3RoKXtyLnNwbGljZSgtbCxsKTticmVha319ZWxzZSBsPTB9d2hpbGUocyE9PTB8fG4pO3JldHVybiBpLnRleHQ9PT0ieyImJnJbci5sZW5ndGgtMV0udGV4dD09PSJ9IiYmKHIucG9wKCksci5zaGlmdCgpKSxyLnJldmVyc2UoKSx7dG9rZW5zOnIsc3RhcnQ6aSxlbmQ6YX19Y29uc3VtZUFyZ3MoZSxyKXtpZihyKXtpZihyLmxlbmd0aCE9PWUrMSl0aHJvdyBuZXcgcHQoIlRoZSBsZW5ndGggb2YgZGVsaW1pdGVycyBkb2Vzbid0IG1hdGNoIHRoZSBudW1iZXIgb2YgYXJncyEiKTtmb3IodmFyIG49clswXSxpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciBhPXRoaXMucG9wVG9rZW4oKTtpZihuW2ldIT09YS50ZXh0KXRocm93IG5ldyBwdCgiVXNlIG9mIHRoZSBtYWNybyBkb2Vzbid0IG1hdGNoIGl0cyBkZWZpbml0aW9uIixhKX19Zm9yKHZhciBzPVtdLGw9MDtsPGU7bCsrKXMucHVzaCh0aGlzLmNvbnN1bWVBcmcociYmcltsKzFdKS50b2tlbnMpO3JldHVybiBzfWNvdW50RXhwYW5zaW9uKGUpe2lmKHRoaXMuZXhwYW5zaW9uQ291bnQrPWUsdGhpcy5leHBhbnNpb25Db3VudD50aGlzLnNldHRpbmdzLm1heEV4cGFuZCl0aHJvdyBuZXcgcHQoIlRvbyBtYW55IGV4cGFuc2lvbnM6IGluZmluaXRlIGxvb3Agb3IgbmVlZCB0byBpbmNyZWFzZSBtYXhFeHBhbmQgc2V0dGluZyIpfWV4cGFuZE9uY2UoZSl7dmFyIHI9dGhpcy5wb3BUb2tlbigpLG49ci50ZXh0LGk9ci5ub2V4cGFuZD9udWxsOnRoaXMuX2dldEV4cGFuc2lvbihuKTtpZihpPT1udWxsfHxlJiZpLnVuZXhwYW5kYWJsZSl7aWYoZSYmaT09bnVsbCYmblswXT09PSJcXCImJiF0aGlzLmlzRGVmaW5lZChuKSl0aHJvdyBuZXcgcHQoIlVuZGVmaW5lZCBjb250cm9sIHNlcXVlbmNlOiAiK24pO3JldHVybiB0aGlzLnB1c2hUb2tlbihyKSwhMX10aGlzLmNvdW50RXhwYW5zaW9uKDEpO3ZhciBhPWkudG9rZW5zLHM9dGhpcy5jb25zdW1lQXJncyhpLm51bUFyZ3MsaS5kZWxpbWl0ZXJzKTtpZihpLm51bUFyZ3Mpe2E9YS5zbGljZSgpO2Zvcih2YXIgbD1hLmxlbmd0aC0xO2w+PTA7LS1sKXt2YXIgdT1hW2xdO2lmKHUudGV4dD09PSIjIil7aWYobD09PTApdGhyb3cgbmV3IHB0KCJJbmNvbXBsZXRlIHBsYWNlaG9sZGVyIGF0IGVuZCBvZiBtYWNybyBib2R5Iix1KTtpZih1PWFbLS1sXSx1LnRleHQ9PT0iIyIpYS5zcGxpY2UobCsxLDEpO2Vsc2UgaWYoL15bMS05XSQvLnRlc3QodS50ZXh0KSlhLnNwbGljZShsLDIsLi4uc1srdS50ZXh0LTFdKTtlbHNlIHRocm93IG5ldyBwdCgiTm90IGEgdmFsaWQgYXJndW1lbnQgbnVtYmVyIix1KX19fXJldHVybiB0aGlzLnB1c2hUb2tlbnMoYSksYS5sZW5ndGh9ZXhwYW5kQWZ0ZXJGdXR1cmUoKXtyZXR1cm4gdGhpcy5leHBhbmRPbmNlKCksdGhpcy5mdXR1cmUoKX1leHBhbmROZXh0VG9rZW4oKXtmb3IoOzspaWYodGhpcy5leHBhbmRPbmNlKCk9PT0hMSl7dmFyIGU9dGhpcy5zdGFjay5wb3AoKTtyZXR1cm4gZS50cmVhdEFzUmVsYXgmJihlLnRleHQ9IlxccmVsYXgiKSxlfXRocm93IG5ldyBFcnJvcn1leHBhbmRNYWNybyhlKXtyZXR1cm4gdGhpcy5tYWNyb3MuaGFzKGUpP3RoaXMuZXhwYW5kVG9rZW5zKFtuZXcgX28oZSldKTp2b2lkIDB9ZXhwYW5kVG9rZW5zKGUpe3ZhciByPVtdLG49dGhpcy5zdGFjay5sZW5ndGg7Zm9yKHRoaXMucHVzaFRva2VucyhlKTt0aGlzLnN0YWNrLmxlbmd0aD5uOylpZih0aGlzLmV4cGFuZE9uY2UoITApPT09ITEpe3ZhciBpPXRoaXMuc3RhY2sucG9wKCk7aS50cmVhdEFzUmVsYXgmJihpLm5vZXhwYW5kPSExLGkudHJlYXRBc1JlbGF4PSExKSxyLnB1c2goaSl9cmV0dXJuIHRoaXMuY291bnRFeHBhbnNpb24oci5sZW5ndGgpLHJ9ZXhwYW5kTWFjcm9Bc1RleHQoZSl7dmFyIHI9dGhpcy5leHBhbmRNYWNybyhlKTtyZXR1cm4gciYmci5tYXAobj0+bi50ZXh0KS5qb2luKCIiKX1fZ2V0RXhwYW5zaW9uKGUpe3ZhciByPXRoaXMubWFjcm9zLmdldChlKTtpZihyPT1udWxsKXJldHVybiByO2lmKGUubGVuZ3RoPT09MSl7dmFyIG49dGhpcy5sZXhlci5jYXRjb2Rlc1tlXTtpZihuIT1udWxsJiZuIT09MTMpcmV0dXJufXZhciBpPXR5cGVvZiByPT0iZnVuY3Rpb24iP3IodGhpcyk6cjtpZih0eXBlb2YgaT09InN0cmluZyIpe3ZhciBhPTA7aWYoaS5pbmRleE9mKCIjIikhPT0tMSlmb3IodmFyIHM9aS5yZXBsYWNlKC8jIy9nLCIiKTtzLmluZGV4T2YoIiMiKyhhKzEpKSE9PS0xOykrK2E7Zm9yKHZhciBsPW5ldyBBMyhpLHRoaXMuc2V0dGluZ3MpLHU9W10saD1sLmxleCgpO2gudGV4dCE9PSJFT0YiOyl1LnB1c2goaCksaD1sLmxleCgpO3UucmV2ZXJzZSgpO3ZhciBmPXt0b2tlbnM6dSxudW1BcmdzOmF9O3JldHVybiBmfXJldHVybiBpfWlzRGVmaW5lZChlKXtyZXR1cm4gdGhpcy5tYWNyb3MuaGFzKGUpfHx5aC5oYXNPd25Qcm9wZXJ0eShlKXx8QW4ubWF0aC5oYXNPd25Qcm9wZXJ0eShlKXx8QW4udGV4dC5oYXNPd25Qcm9wZXJ0eShlKXx8eFYuaGFzT3duUHJvcGVydHkoZSl9aXNFeHBhbmRhYmxlKGUpe3ZhciByPXRoaXMubWFjcm9zLmdldChlKTtyZXR1cm4gciE9bnVsbD90eXBlb2Ygcj09InN0cmluZyJ8fHR5cGVvZiByPT0iZnVuY3Rpb24ifHwhci51bmV4cGFuZGFibGU6eWguaGFzT3duUHJvcGVydHkoZSkmJiF5aFtlXS5wcmltaXRpdmV9fSxFRz0vXlvigorigovigozigo3igo7igoDigoHigoLigoPigoTigoXigobigofigojigonigpDigpHigpXhtaLisbzigpbigpfigpjigpnigpLigprhtaPigpvigpzhtaThtaXigpPhtabhtafhtajhtanhtapdLyx4Mz1PYmplY3QuZnJlZXplKHsiXHUyMDhBIjoiKyIsIlx1MjA4QiI6Ii0iLCJcdTIwOEMiOiI9IiwiXHUyMDhEIjoiKCIsIlx1MjA4RSI6IikiLCJcdTIwODAiOiIwIiwiXHUyMDgxIjoiMSIsIlx1MjA4MiI6IjIiLCJcdTIwODMiOiIzIiwiXHUyMDg0IjoiNCIsIlx1MjA4NSI6IjUiLCJcdTIwODYiOiI2IiwiXHUyMDg3IjoiNyIsIlx1MjA4OCI6IjgiLCJcdTIwODkiOiI5IiwiXHUyMDkwIjoiYSIsIlx1MjA5MSI6ImUiLCJcdTIwOTUiOiJoIiwiXHUxRDYyIjoiaSIsIlx1MkM3QyI6ImoiLCJcdTIwOTYiOiJrIiwiXHUyMDk3IjoibCIsIlx1MjA5OCI6Im0iLCJcdTIwOTkiOiJuIiwiXHUyMDkyIjoibyIsIlx1MjA5QSI6InAiLCJcdTFENjMiOiJyIiwiXHUyMDlCIjoicyIsIlx1MjA5QyI6InQiLCJcdTFENjQiOiJ1IiwiXHUxRDY1IjoidiIsIlx1MjA5MyI6IngiLCJcdTFENjYiOiJcdTAzQjIiLCJcdTFENjciOiJcdTAzQjMiLCJcdTFENjgiOiJcdTAzQzEiLCJcdTFENjkiOiJcdTAzRDUiLCJcdTFENkEiOiJcdTAzQzciLCJcdTIwN0EiOiIrIiwiXHUyMDdCIjoiLSIsIlx1MjA3QyI6Ij0iLCJcdTIwN0QiOiIoIiwiXHUyMDdFIjoiKSIsIlx1MjA3MCI6IjAiLCJceEI5IjoiMSIsIlx4QjIiOiIyIiwiXHhCMyI6IjMiLCJcdTIwNzQiOiI0IiwiXHUyMDc1IjoiNSIsIlx1MjA3NiI6IjYiLCJcdTIwNzciOiI3IiwiXHUyMDc4IjoiOCIsIlx1MjA3OSI6IjkiLCJcdTFEMkMiOiJBIiwiXHUxRDJFIjoiQiIsIlx1MUQzMCI6IkQiLCJcdTFEMzEiOiJFIiwiXHUxRDMzIjoiRyIsIlx1MUQzNCI6IkgiLCJcdTFEMzUiOiJJIiwiXHUxRDM2IjoiSiIsIlx1MUQzNyI6IksiLCJcdTFEMzgiOiJMIiwiXHUxRDM5IjoiTSIsIlx1MUQzQSI6Ik4iLCJcdTFEM0MiOiJPIiwiXHUxRDNFIjoiUCIsIlx1MUQzRiI6IlIiLCJcdTFENDAiOiJUIiwiXHUxRDQxIjoiVSIsIlx1MkM3RCI6IlYiLCJcdTFENDIiOiJXIiwiXHUxRDQzIjoiYSIsIlx1MUQ0NyI6ImIiLCJcdTFEOUMiOiJjIiwiXHUxRDQ4IjoiZCIsIlx1MUQ0OSI6ImUiLCJcdTFEQTAiOiJmIiwiXHUxRDREIjoiZyIsXHUwMkIwOiJoIiwiXHUyMDcxIjoiaSIsXHUwMkIyOiJqIiwiXHUxRDRGIjoiayIsXHUwMkUxOiJsIiwiXHUxRDUwIjoibSIsXHUyMDdGOiJuIiwiXHUxRDUyIjoibyIsIlx1MUQ1NiI6InAiLFx1MDJCMzoiciIsXHUwMkUyOiJzIiwiXHUxRDU3IjoidCIsIlx1MUQ1OCI6InUiLCJcdTFENUIiOiJ2IixcdTAyQjc6InciLFx1MDJFMzoieCIsXHUwMkI4OiJ5IiwiXHUxREJCIjoieiIsIlx1MUQ1RCI6Ilx1MDNCMiIsIlx1MUQ1RSI6Ilx1MDNCMyIsIlx1MUQ1RiI6Ilx1MDNCNCIsIlx1MUQ2MCI6Ilx1MDNENSIsIlx1MUQ2MSI6Ilx1MDNDNyIsIlx1MURCRiI6Ilx1MDNCOCJ9KSxVNz17Ilx1MDMwMSI6e3RleHQ6IlxcJyIsbWF0aDoiXFxhY3V0ZSJ9LCJcdTAzMDAiOnt0ZXh0OiJcXGAiLG1hdGg6IlxcZ3JhdmUifSwiXHUwMzA4Ijp7dGV4dDonXFwiJyxtYXRoOiJcXGRkb3QifSwiXHUwMzAzIjp7dGV4dDoiXFx+IixtYXRoOiJcXHRpbGRlIn0sIlx1MDMwNCI6e3RleHQ6IlxcPSIsbWF0aDoiXFxiYXIifSwiXHUwMzA2Ijp7dGV4dDoiXFx1IixtYXRoOiJcXGJyZXZlIn0sIlx1MDMwQyI6e3RleHQ6IlxcdiIsbWF0aDoiXFxjaGVjayJ9LCJcdTAzMDIiOnt0ZXh0OiJcXF4iLG1hdGg6IlxcaGF0In0sIlx1MDMwNyI6e3RleHQ6IlxcLiIsbWF0aDoiXFxkb3QifSwiXHUwMzBBIjp7dGV4dDoiXFxyIixtYXRoOiJcXG1hdGhyaW5nIn0sIlx1MDMwQiI6e3RleHQ6IlxcSCJ9LCJcdTAzMjciOnt0ZXh0OiJcXGMifX0sU0c9e1x1MDBFMToiYVx1MDMwMSIsXHUwMEUwOiJhXHUwMzAwIixcdTAwRTQ6ImFcdTAzMDgiLFx1MDFERjoiYVx1MDMwOFx1MDMwNCIsXHUwMEUzOiJhXHUwMzAzIixcdTAxMDE6ImFcdTAzMDQiLFx1MDEwMzoiYVx1MDMwNiIsXHUxRUFGOiJhXHUwMzA2XHUwMzAxIixcdTFFQjE6ImFcdTAzMDZcdTAzMDAiLFx1MUVCNToiYVx1MDMwNlx1MDMwMyIsXHUwMUNFOiJhXHUwMzBDIixcdTAwRTI6ImFcdTAzMDIiLFx1MUVBNToiYVx1MDMwMlx1MDMwMSIsXHUxRUE3OiJhXHUwMzAyXHUwMzAwIixcdTFFQUI6ImFcdTAzMDJcdTAzMDMiLFx1MDIyNzoiYVx1MDMwNyIsXHUwMUUxOiJhXHUwMzA3XHUwMzA0IixcdTAwRTU6ImFcdTAzMEEiLFx1MDFGQjoiYVx1MDMwQVx1MDMwMSIsXHUxRTAzOiJiXHUwMzA3IixcdTAxMDc6ImNcdTAzMDEiLFx1MUUwOToiY1x1MDMyN1x1MDMwMSIsXHUwMTBEOiJjXHUwMzBDIixcdTAxMDk6ImNcdTAzMDIiLFx1MDEwQjoiY1x1MDMwNyIsXHUwMEU3OiJjXHUwMzI3IixcdTAxMEY6ImRcdTAzMEMiLFx1MUUwQjoiZFx1MDMwNyIsXHUxRTExOiJkXHUwMzI3IixcdTAwRTk6ImVcdTAzMDEiLFx1MDBFODoiZVx1MDMwMCIsXHUwMEVCOiJlXHUwMzA4IixcdTFFQkQ6ImVcdTAzMDMiLFx1MDExMzoiZVx1MDMwNCIsXHUxRTE3OiJlXHUwMzA0XHUwMzAxIixcdTFFMTU6ImVcdTAzMDRcdTAzMDAiLFx1MDExNToiZVx1MDMwNiIsXHUxRTFEOiJlXHUwMzI3XHUwMzA2IixcdTAxMUI6ImVcdTAzMEMiLFx1MDBFQToiZVx1MDMwMiIsXHUxRUJGOiJlXHUwMzAyXHUwMzAxIixcdTFFQzE6ImVcdTAzMDJcdTAzMDAiLFx1MUVDNToiZVx1MDMwMlx1MDMwMyIsXHUwMTE3OiJlXHUwMzA3IixcdTAyMjk6ImVcdTAzMjciLFx1MUUxRjoiZlx1MDMwNyIsXHUwMUY1OiJnXHUwMzAxIixcdTFFMjE6ImdcdTAzMDQiLFx1MDExRjoiZ1x1MDMwNiIsXHUwMUU3OiJnXHUwMzBDIixcdTAxMUQ6ImdcdTAzMDIiLFx1MDEyMToiZ1x1MDMwNyIsXHUwMTIzOiJnXHUwMzI3IixcdTFFMjc6ImhcdTAzMDgiLFx1MDIxRjoiaFx1MDMwQyIsXHUwMTI1OiJoXHUwMzAyIixcdTFFMjM6ImhcdTAzMDciLFx1MUUyOToiaFx1MDMyNyIsXHUwMEVEOiJpXHUwMzAxIixcdTAwRUM6ImlcdTAzMDAiLFx1MDBFRjoiaVx1MDMwOCIsXHUxRTJGOiJpXHUwMzA4XHUwMzAxIixcdTAxMjk6ImlcdTAzMDMiLFx1MDEyQjoiaVx1MDMwNCIsXHUwMTJEOiJpXHUwMzA2IixcdTAxRDA6ImlcdTAzMEMiLFx1MDBFRToiaVx1MDMwMiIsXHUwMUYwOiJqXHUwMzBDIixcdTAxMzU6ImpcdTAzMDIiLFx1MUUzMToia1x1MDMwMSIsXHUwMUU5OiJrXHUwMzBDIixcdTAxMzc6ImtcdTAzMjciLFx1MDEzQToibFx1MDMwMSIsXHUwMTNFOiJsXHUwMzBDIixcdTAxM0M6ImxcdTAzMjciLFx1MUUzRjoibVx1MDMwMSIsXHUxRTQxOiJtXHUwMzA3IixcdTAxNDQ6Im5cdTAzMDEiLFx1MDFGOToiblx1MDMwMCIsXHUwMEYxOiJuXHUwMzAzIixcdTAxNDg6Im5cdTAzMEMiLFx1MUU0NToiblx1MDMwNyIsXHUwMTQ2OiJuXHUwMzI3IixcdTAwRjM6Im9cdTAzMDEiLFx1MDBGMjoib1x1MDMwMCIsXHUwMEY2OiJvXHUwMzA4IixcdTAyMkI6Im9cdTAzMDhcdTAzMDQiLFx1MDBGNToib1x1MDMwMyIsXHUxRTREOiJvXHUwMzAzXHUwMzAxIixcdTFFNEY6Im9cdTAzMDNcdTAzMDgiLFx1MDIyRDoib1x1MDMwM1x1MDMwNCIsXHUwMTREOiJvXHUwMzA0IixcdTFFNTM6Im9cdTAzMDRcdTAzMDEiLFx1MUU1MToib1x1MDMwNFx1MDMwMCIsXHUwMTRGOiJvXHUwMzA2IixcdTAxRDI6Im9cdTAzMEMiLFx1MDBGNDoib1x1MDMwMiIsXHUxRUQxOiJvXHUwMzAyXHUwMzAxIixcdTFFRDM6Im9cdTAzMDJcdTAzMDAiLFx1MUVENzoib1x1MDMwMlx1MDMwMyIsXHUwMjJGOiJvXHUwMzA3IixcdTAyMzE6Im9cdTAzMDdcdTAzMDQiLFx1MDE1MToib1x1MDMwQiIsXHUxRTU1OiJwXHUwMzAxIixcdTFFNTc6InBcdTAzMDciLFx1MDE1NToiclx1MDMwMSIsXHUwMTU5OiJyXHUwMzBDIixcdTFFNTk6InJcdTAzMDciLFx1MDE1Nzoiclx1MDMyNyIsXHUwMTVCOiJzXHUwMzAxIixcdTFFNjU6InNcdTAzMDFcdTAzMDciLFx1MDE2MToic1x1MDMwQyIsXHUxRTY3OiJzXHUwMzBDXHUwMzA3IixcdTAxNUQ6InNcdTAzMDIiLFx1MUU2MToic1x1MDMwNyIsXHUwMTVGOiJzXHUwMzI3IixcdTFFOTc6InRcdTAzMDgiLFx1MDE2NToidFx1MDMwQyIsXHUxRTZCOiJ0XHUwMzA3IixcdTAxNjM6InRcdTAzMjciLFx1MDBGQToidVx1MDMwMSIsXHUwMEY5OiJ1XHUwMzAwIixcdTAwRkM6InVcdTAzMDgiLFx1MDFEODoidVx1MDMwOFx1MDMwMSIsXHUwMURDOiJ1XHUwMzA4XHUwMzAwIixcdTAxRDY6InVcdTAzMDhcdTAzMDQiLFx1MDFEQToidVx1MDMwOFx1MDMwQyIsXHUwMTY5OiJ1XHUwMzAzIixcdTFFNzk6InVcdTAzMDNcdTAzMDEiLFx1MDE2QjoidVx1MDMwNCIsXHUxRTdCOiJ1XHUwMzA0XHUwMzA4IixcdTAxNkQ6InVcdTAzMDYiLFx1MDFENDoidVx1MDMwQyIsXHUwMEZCOiJ1XHUwMzAyIixcdTAxNkY6InVcdTAzMEEiLFx1MDE3MToidVx1MDMwQiIsXHUxRTdEOiJ2XHUwMzAzIixcdTFFODM6IndcdTAzMDEiLFx1MUU4MToid1x1MDMwMCIsXHUxRTg1OiJ3XHUwMzA4IixcdTAxNzU6IndcdTAzMDIiLFx1MUU4Nzoid1x1MDMwNyIsXHUxRTk4OiJ3XHUwMzBBIixcdTFFOEQ6InhcdTAzMDgiLFx1MUU4QjoieFx1MDMwNyIsXHUwMEZEOiJ5XHUwMzAxIixcdTFFRjM6InlcdTAzMDAiLFx1MDBGRjoieVx1MDMwOCIsXHUxRUY5OiJ5XHUwMzAzIixcdTAyMzM6InlcdTAzMDQiLFx1MDE3NzoieVx1MDMwMiIsXHUxRThGOiJ5XHUwMzA3IixcdTFFOTk6InlcdTAzMEEiLFx1MDE3QToielx1MDMwMSIsXHUwMTdFOiJ6XHUwMzBDIixcdTFFOTE6InpcdTAzMDIiLFx1MDE3Qzoielx1MDMwNyIsXHUwMEMxOiJBXHUwMzAxIixcdTAwQzA6IkFcdTAzMDAiLFx1MDBDNDoiQVx1MDMwOCIsXHUwMURFOiJBXHUwMzA4XHUwMzA0IixcdTAwQzM6IkFcdTAzMDMiLFx1MDEwMDoiQVx1MDMwNCIsXHUwMTAyOiJBXHUwMzA2IixcdTFFQUU6IkFcdTAzMDZcdTAzMDEiLFx1MUVCMDoiQVx1MDMwNlx1MDMwMCIsXHUxRUI0OiJBXHUwMzA2XHUwMzAzIixcdTAxQ0Q6IkFcdTAzMEMiLFx1MDBDMjoiQVx1MDMwMiIsXHUxRUE0OiJBXHUwMzAyXHUwMzAxIixcdTFFQTY6IkFcdTAzMDJcdTAzMDAiLFx1MUVBQToiQVx1MDMwMlx1MDMwMyIsXHUwMjI2OiJBXHUwMzA3IixcdTAxRTA6IkFcdTAzMDdcdTAzMDQiLFx1MDBDNToiQVx1MDMwQSIsXHUwMUZBOiJBXHUwMzBBXHUwMzAxIixcdTFFMDI6IkJcdTAzMDciLFx1MDEwNjoiQ1x1MDMwMSIsXHUxRTA4OiJDXHUwMzI3XHUwMzAxIixcdTAxMEM6IkNcdTAzMEMiLFx1MDEwODoiQ1x1MDMwMiIsXHUwMTBBOiJDXHUwMzA3IixcdTAwQzc6IkNcdTAzMjciLFx1MDEwRToiRFx1MDMwQyIsXHUxRTBBOiJEXHUwMzA3IixcdTFFMTA6IkRcdTAzMjciLFx1MDBDOToiRVx1MDMwMSIsXHUwMEM4OiJFXHUwMzAwIixcdTAwQ0I6IkVcdTAzMDgiLFx1MUVCQzoiRVx1MDMwMyIsXHUwMTEyOiJFXHUwMzA0IixcdTFFMTY6IkVcdTAzMDRcdTAzMDEiLFx1MUUxNDoiRVx1MDMwNFx1MDMwMCIsXHUwMTE0OiJFXHUwMzA2IixcdTFFMUM6IkVcdTAzMjdcdTAzMDYiLFx1MDExQToiRVx1MDMwQyIsXHUwMENBOiJFXHUwMzAyIixcdTFFQkU6IkVcdTAzMDJcdTAzMDEiLFx1MUVDMDoiRVx1MDMwMlx1MDMwMCIsXHUxRUM0OiJFXHUwMzAyXHUwMzAzIixcdTAxMTY6IkVcdTAzMDciLFx1MDIyODoiRVx1MDMyNyIsXHUxRTFFOiJGXHUwMzA3IixcdTAxRjQ6IkdcdTAzMDEiLFx1MUUyMDoiR1x1MDMwNCIsXHUwMTFFOiJHXHUwMzA2IixcdTAxRTY6IkdcdTAzMEMiLFx1MDExQzoiR1x1MDMwMiIsXHUwMTIwOiJHXHUwMzA3IixcdTAxMjI6IkdcdTAzMjciLFx1MUUyNjoiSFx1MDMwOCIsXHUwMjFFOiJIXHUwMzBDIixcdTAxMjQ6IkhcdTAzMDIiLFx1MUUyMjoiSFx1MDMwNyIsXHUxRTI4OiJIXHUwMzI3IixcdTAwQ0Q6IklcdTAzMDEiLFx1MDBDQzoiSVx1MDMwMCIsXHUwMENGOiJJXHUwMzA4IixcdTFFMkU6IklcdTAzMDhcdTAzMDEiLFx1MDEyODoiSVx1MDMwMyIsXHUwMTJBOiJJXHUwMzA0IixcdTAxMkM6IklcdTAzMDYiLFx1MDFDRjoiSVx1MDMwQyIsXHUwMENFOiJJXHUwMzAyIixcdTAxMzA6IklcdTAzMDciLFx1MDEzNDoiSlx1MDMwMiIsXHUxRTMwOiJLXHUwMzAxIixcdTAxRTg6IktcdTAzMEMiLFx1MDEzNjoiS1x1MDMyNyIsXHUwMTM5OiJMXHUwMzAxIixcdTAxM0Q6IkxcdTAzMEMiLFx1MDEzQjoiTFx1MDMyNyIsXHUxRTNFOiJNXHUwMzAxIixcdTFFNDA6Ik1cdTAzMDciLFx1MDE0MzoiTlx1MDMwMSIsXHUwMUY4OiJOXHUwMzAwIixcdTAwRDE6Ik5cdTAzMDMiLFx1MDE0NzoiTlx1MDMwQyIsXHUxRTQ0OiJOXHUwMzA3IixcdTAxNDU6Ik5cdTAzMjciLFx1MDBEMzoiT1x1MDMwMSIsXHUwMEQyOiJPXHUwMzAwIixcdTAwRDY6Ik9cdTAzMDgiLFx1MDIyQToiT1x1MDMwOFx1MDMwNCIsXHUwMEQ1OiJPXHUwMzAzIixcdTFFNEM6Ik9cdTAzMDNcdTAzMDEiLFx1MUU0RToiT1x1MDMwM1x1MDMwOCIsXHUwMjJDOiJPXHUwMzAzXHUwMzA0IixcdTAxNEM6Ik9cdTAzMDQiLFx1MUU1MjoiT1x1MDMwNFx1MDMwMSIsXHUxRTUwOiJPXHUwMzA0XHUwMzAwIixcdTAxNEU6Ik9cdTAzMDYiLFx1MDFEMToiT1x1MDMwQyIsXHUwMEQ0OiJPXHUwMzAyIixcdTFFRDA6Ik9cdTAzMDJcdTAzMDEiLFx1MUVEMjoiT1x1MDMwMlx1MDMwMCIsXHUxRUQ2OiJPXHUwMzAyXHUwMzAzIixcdTAyMkU6Ik9cdTAzMDciLFx1MDIzMDoiT1x1MDMwN1x1MDMwNCIsXHUwMTUwOiJPXHUwMzBCIixcdTFFNTQ6IlBcdTAzMDEiLFx1MUU1NjoiUFx1MDMwNyIsXHUwMTU0OiJSXHUwMzAxIixcdTAxNTg6IlJcdTAzMEMiLFx1MUU1ODoiUlx1MDMwNyIsXHUwMTU2OiJSXHUwMzI3IixcdTAxNUE6IlNcdTAzMDEiLFx1MUU2NDoiU1x1MDMwMVx1MDMwNyIsXHUwMTYwOiJTXHUwMzBDIixcdTFFNjY6IlNcdTAzMENcdTAzMDciLFx1MDE1QzoiU1x1MDMwMiIsXHUxRTYwOiJTXHUwMzA3IixcdTAxNUU6IlNcdTAzMjciLFx1MDE2NDoiVFx1MDMwQyIsXHUxRTZBOiJUXHUwMzA3IixcdTAxNjI6IlRcdTAzMjciLFx1MDBEQToiVVx1MDMwMSIsXHUwMEQ5OiJVXHUwMzAwIixcdTAwREM6IlVcdTAzMDgiLFx1MDFENzoiVVx1MDMwOFx1MDMwMSIsXHUwMURCOiJVXHUwMzA4XHUwMzAwIixcdTAxRDU6IlVcdTAzMDhcdTAzMDQiLFx1MDFEOToiVVx1MDMwOFx1MDMwQyIsXHUwMTY4OiJVXHUwMzAzIixcdTFFNzg6IlVcdTAzMDNcdTAzMDEiLFx1MDE2QToiVVx1MDMwNCIsXHUxRTdBOiJVXHUwMzA0XHUwMzA4IixcdTAxNkM6IlVcdTAzMDYiLFx1MDFEMzoiVVx1MDMwQyIsXHUwMERCOiJVXHUwMzAyIixcdTAxNkU6IlVcdTAzMEEiLFx1MDE3MDoiVVx1MDMwQiIsXHUxRTdDOiJWXHUwMzAzIixcdTFFODI6IldcdTAzMDEiLFx1MUU4MDoiV1x1MDMwMCIsXHUxRTg0OiJXXHUwMzA4IixcdTAxNzQ6IldcdTAzMDIiLFx1MUU4NjoiV1x1MDMwNyIsXHUxRThDOiJYXHUwMzA4IixcdTFFOEE6IlhcdTAzMDciLFx1MDBERDoiWVx1MDMwMSIsXHUxRUYyOiJZXHUwMzAwIixcdTAxNzg6IllcdTAzMDgiLFx1MUVGODoiWVx1MDMwMyIsXHUwMjMyOiJZXHUwMzA0IixcdTAxNzY6IllcdTAzMDIiLFx1MUU4RToiWVx1MDMwNyIsXHUwMTc5OiJaXHUwMzAxIixcdTAxN0Q6IlpcdTAzMEMiLFx1MUU5MDoiWlx1MDMwMiIsXHUwMTdCOiJaXHUwMzA3IixcdTAzQUM6Ilx1MDNCMVx1MDMwMSIsXHUxRjcwOiJcdTAzQjFcdTAzMDAiLFx1MUZCMToiXHUwM0IxXHUwMzA0IixcdTFGQjA6Ilx1MDNCMVx1MDMwNiIsXHUwM0FEOiJcdTAzQjVcdTAzMDEiLFx1MUY3MjoiXHUwM0I1XHUwMzAwIixcdTAzQUU6Ilx1MDNCN1x1MDMwMSIsXHUxRjc0OiJcdTAzQjdcdTAzMDAiLFx1MDNBRjoiXHUwM0I5XHUwMzAxIixcdTFGNzY6Ilx1MDNCOVx1MDMwMCIsXHUwM0NBOiJcdTAzQjlcdTAzMDgiLFx1MDM5MDoiXHUwM0I5XHUwMzA4XHUwMzAxIixcdTFGRDI6Ilx1MDNCOVx1MDMwOFx1MDMwMCIsXHUxRkQxOiJcdTAzQjlcdTAzMDQiLFx1MUZEMDoiXHUwM0I5XHUwMzA2IixcdTAzQ0M6Ilx1MDNCRlx1MDMwMSIsXHUxRjc4OiJcdTAzQkZcdTAzMDAiLFx1MDNDRDoiXHUwM0M1XHUwMzAxIixcdTFGN0E6Ilx1MDNDNVx1MDMwMCIsXHUwM0NCOiJcdTAzQzVcdTAzMDgiLFx1MDNCMDoiXHUwM0M1XHUwMzA4XHUwMzAxIixcdTFGRTI6Ilx1MDNDNVx1MDMwOFx1MDMwMCIsXHUxRkUxOiJcdTAzQzVcdTAzMDQiLFx1MUZFMDoiXHUwM0M1XHUwMzA2IixcdTAzQ0U6Ilx1MDNDOVx1MDMwMSIsXHUxRjdDOiJcdTAzQzlcdTAzMDAiLFx1MDM4RToiXHUwM0E1XHUwMzAxIixcdTFGRUE6Ilx1MDNBNVx1MDMwMCIsXHUwM0FCOiJcdTAzQTVcdTAzMDgiLFx1MUZFOToiXHUwM0E1XHUwMzA0IixcdTFGRTg6Ilx1MDNBNVx1MDMwNiIsXHUwMzhGOiJcdTAzQTlcdTAzMDEiLFx1MUZGQToiXHUwM0E5XHUwMzAwIn0sXzM9Y2xhc3MgdHtzdGF0aWN7byh0aGlzLCJQYXJzZXIiKX1jb25zdHJ1Y3RvcihlLHIpe3RoaXMubW9kZT12b2lkIDAsdGhpcy5ndWxsZXQ9dm9pZCAwLHRoaXMuc2V0dGluZ3M9dm9pZCAwLHRoaXMubGVmdHJpZ2h0RGVwdGg9dm9pZCAwLHRoaXMubmV4dFRva2VuPXZvaWQgMCx0aGlzLm1vZGU9Im1hdGgiLHRoaXMuZ3VsbGV0PW5ldyB0QShlLHIsdGhpcy5tb2RlKSx0aGlzLnNldHRpbmdzPXIsdGhpcy5sZWZ0cmlnaHREZXB0aD0wfWV4cGVjdChlLHIpe2lmKHI9PT12b2lkIDAmJihyPSEwKSx0aGlzLmZldGNoKCkudGV4dCE9PWUpdGhyb3cgbmV3IHB0KCJFeHBlY3RlZCAnIitlKyInLCBnb3QgJyIrdGhpcy5mZXRjaCgpLnRleHQrIiciLHRoaXMuZmV0Y2goKSk7ciYmdGhpcy5jb25zdW1lKCl9Y29uc3VtZSgpe3RoaXMubmV4dFRva2VuPW51bGx9ZmV0Y2goKXtyZXR1cm4gdGhpcy5uZXh0VG9rZW49PW51bGwmJih0aGlzLm5leHRUb2tlbj10aGlzLmd1bGxldC5leHBhbmROZXh0VG9rZW4oKSksdGhpcy5uZXh0VG9rZW59c3dpdGNoTW9kZShlKXt0aGlzLm1vZGU9ZSx0aGlzLmd1bGxldC5zd2l0Y2hNb2RlKGUpfXBhcnNlKCl7dGhpcy5zZXR0aW5ncy5nbG9iYWxHcm91cHx8dGhpcy5ndWxsZXQuYmVnaW5Hcm91cCgpLHRoaXMuc2V0dGluZ3MuY29sb3JJc1RleHRDb2xvciYmdGhpcy5ndWxsZXQubWFjcm9zLnNldCgiXFxjb2xvciIsIlxcdGV4dGNvbG9yIik7dHJ5e3ZhciBlPXRoaXMucGFyc2VFeHByZXNzaW9uKCExKTtyZXR1cm4gdGhpcy5leHBlY3QoIkVPRiIpLHRoaXMuc2V0dGluZ3MuZ2xvYmFsR3JvdXB8fHRoaXMuZ3VsbGV0LmVuZEdyb3VwKCksZX1maW5hbGx5e3RoaXMuZ3VsbGV0LmVuZEdyb3VwcygpfX1zdWJwYXJzZShlKXt2YXIgcj10aGlzLm5leHRUb2tlbjt0aGlzLmNvbnN1bWUoKSx0aGlzLmd1bGxldC5wdXNoVG9rZW4obmV3IF9vKCJ9IikpLHRoaXMuZ3VsbGV0LnB1c2hUb2tlbnMoZSk7dmFyIG49dGhpcy5wYXJzZUV4cHJlc3Npb24oITEpO3JldHVybiB0aGlzLmV4cGVjdCgifSIpLHRoaXMubmV4dFRva2VuPXIsbn1wYXJzZUV4cHJlc3Npb24oZSxyKXtmb3IodmFyIG49W107Oyl7dGhpcy5tb2RlPT09Im1hdGgiJiZ0aGlzLmNvbnN1bWVTcGFjZXMoKTt2YXIgaT10aGlzLmZldGNoKCk7aWYodC5lbmRPZkV4cHJlc3Npb24uaW5kZXhPZihpLnRleHQpIT09LTF8fHImJmkudGV4dD09PXJ8fGUmJnloW2kudGV4dF0mJnloW2kudGV4dF0uaW5maXgpYnJlYWs7dmFyIGE9dGhpcy5wYXJzZUF0b20ocik7aWYoYSl7aWYoYS50eXBlPT09ImludGVybmFsIiljb250aW51ZX1lbHNlIGJyZWFrO24ucHVzaChhKX1yZXR1cm4gdGhpcy5tb2RlPT09InRleHQiJiZ0aGlzLmZvcm1MaWdhdHVyZXMobiksdGhpcy5oYW5kbGVJbmZpeE5vZGVzKG4pfWhhbmRsZUluZml4Tm9kZXMoZSl7Zm9yKHZhciByPS0xLG4saT0wO2k8ZS5sZW5ndGg7aSsrKWlmKGVbaV0udHlwZT09PSJpbmZpeCIpe2lmKHIhPT0tMSl0aHJvdyBuZXcgcHQoIm9ubHkgb25lIGluZml4IG9wZXJhdG9yIHBlciBncm91cCIsZVtpXS50b2tlbik7cj1pLG49ZVtpXS5yZXBsYWNlV2l0aH1pZihyIT09LTEmJm4pe3ZhciBhLHMsbD1lLnNsaWNlKDAsciksdT1lLnNsaWNlKHIrMSk7bC5sZW5ndGg9PT0xJiZsWzBdLnR5cGU9PT0ib3JkZ3JvdXAiP2E9bFswXTphPXt0eXBlOiJvcmRncm91cCIsbW9kZTp0aGlzLm1vZGUsYm9keTpsfSx1Lmxlbmd0aD09PTEmJnVbMF0udHlwZT09PSJvcmRncm91cCI/cz11WzBdOnM9e3R5cGU6Im9yZGdyb3VwIixtb2RlOnRoaXMubW9kZSxib2R5OnV9O3ZhciBoO3JldHVybiBuPT09IlxcXFxhYm92ZWZyYWMiP2g9dGhpcy5jYWxsRnVuY3Rpb24obixbYSxlW3JdLHNdLFtdKTpoPXRoaXMuY2FsbEZ1bmN0aW9uKG4sW2Esc10sW10pLFtoXX1lbHNlIHJldHVybiBlfWhhbmRsZVN1cFN1YnNjcmlwdChlKXt2YXIgcj10aGlzLmZldGNoKCksbj1yLnRleHQ7dGhpcy5jb25zdW1lKCksdGhpcy5jb25zdW1lU3BhY2VzKCk7dmFyIGk7ZG97dmFyIGE7aT10aGlzLnBhcnNlR3JvdXAoZSl9d2hpbGUoKChhPWkpPT1udWxsP3ZvaWQgMDphLnR5cGUpPT09ImludGVybmFsIik7aWYoIWkpdGhyb3cgbmV3IHB0KCJFeHBlY3RlZCBncm91cCBhZnRlciAnIituKyInIixyKTtyZXR1cm4gaX1mb3JtYXRVbnN1cHBvcnRlZENtZChlKXtmb3IodmFyIHI9W10sbj0wO248ZS5sZW5ndGg7bisrKXIucHVzaCh7dHlwZToidGV4dG9yZCIsbW9kZToidGV4dCIsdGV4dDplW25dfSk7dmFyIGk9e3R5cGU6InRleHQiLG1vZGU6dGhpcy5tb2RlLGJvZHk6cn0sYT17dHlwZToiY29sb3IiLG1vZGU6dGhpcy5tb2RlLGNvbG9yOnRoaXMuc2V0dGluZ3MuZXJyb3JDb2xvcixib2R5OltpXX07cmV0dXJuIGF9cGFyc2VBdG9tKGUpe3ZhciByPXRoaXMucGFyc2VHcm91cCgiYXRvbSIsZSk7aWYocj8udHlwZT09PSJpbnRlcm5hbCJ8fHRoaXMubW9kZT09PSJ0ZXh0IilyZXR1cm4gcjtmb3IodmFyIG4saTs7KXt0aGlzLmNvbnN1bWVTcGFjZXMoKTt2YXIgYT10aGlzLmZldGNoKCk7aWYoYS50ZXh0PT09IlxcbGltaXRzInx8YS50ZXh0PT09Ilxcbm9saW1pdHMiKXtpZihyJiZyLnR5cGU9PT0ib3AiKXt2YXIgcz1hLnRleHQ9PT0iXFxsaW1pdHMiO3IubGltaXRzPXMsci5hbHdheXNIYW5kbGVTdXBTdWI9ITB9ZWxzZSBpZihyJiZyLnR5cGU9PT0ib3BlcmF0b3JuYW1lIilyLmFsd2F5c0hhbmRsZVN1cFN1YiYmKHIubGltaXRzPWEudGV4dD09PSJcXGxpbWl0cyIpO2Vsc2UgdGhyb3cgbmV3IHB0KCJMaW1pdCBjb250cm9scyBtdXN0IGZvbGxvdyBhIG1hdGggb3BlcmF0b3IiLGEpO3RoaXMuY29uc3VtZSgpfWVsc2UgaWYoYS50ZXh0PT09Il4iKXtpZihuKXRocm93IG5ldyBwdCgiRG91YmxlIHN1cGVyc2NyaXB0IixhKTtuPXRoaXMuaGFuZGxlU3VwU3Vic2NyaXB0KCJzdXBlcnNjcmlwdCIpfWVsc2UgaWYoYS50ZXh0PT09Il8iKXtpZihpKXRocm93IG5ldyBwdCgiRG91YmxlIHN1YnNjcmlwdCIsYSk7aT10aGlzLmhhbmRsZVN1cFN1YnNjcmlwdCgic3Vic2NyaXB0Iil9ZWxzZSBpZihhLnRleHQ9PT0iJyIpe2lmKG4pdGhyb3cgbmV3IHB0KCJEb3VibGUgc3VwZXJzY3JpcHQiLGEpO3ZhciBsPXt0eXBlOiJ0ZXh0b3JkIixtb2RlOnRoaXMubW9kZSx0ZXh0OiJcXHByaW1lIn0sdT1bbF07Zm9yKHRoaXMuY29uc3VtZSgpO3RoaXMuZmV0Y2goKS50ZXh0PT09IiciOyl1LnB1c2gobCksdGhpcy5jb25zdW1lKCk7dGhpcy5mZXRjaCgpLnRleHQ9PT0iXiImJnUucHVzaCh0aGlzLmhhbmRsZVN1cFN1YnNjcmlwdCgic3VwZXJzY3JpcHQiKSksbj17dHlwZToib3JkZ3JvdXAiLG1vZGU6dGhpcy5tb2RlLGJvZHk6dX19ZWxzZSBpZih4M1thLnRleHRdKXt2YXIgaD1FRy50ZXN0KGEudGV4dCksZj1bXTtmb3IoZi5wdXNoKG5ldyBfbyh4M1thLnRleHRdKSksdGhpcy5jb25zdW1lKCk7Oyl7dmFyIGQ9dGhpcy5mZXRjaCgpLnRleHQ7aWYoIXgzW2RdfHxFRy50ZXN0KGQpIT09aClicmVhaztmLnVuc2hpZnQobmV3IF9vKHgzW2RdKSksdGhpcy5jb25zdW1lKCl9dmFyIHA9dGhpcy5zdWJwYXJzZShmKTtoP2k9e3R5cGU6Im9yZGdyb3VwIixtb2RlOiJtYXRoIixib2R5OnB9Om49e3R5cGU6Im9yZGdyb3VwIixtb2RlOiJtYXRoIixib2R5OnB9fWVsc2UgYnJlYWt9cmV0dXJuIG58fGk/e3R5cGU6InN1cHN1YiIsbW9kZTp0aGlzLm1vZGUsYmFzZTpyLHN1cDpuLHN1YjppfTpyfXBhcnNlRnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLmZldGNoKCksaT1uLnRleHQsYT15aFtpXTtpZighYSlyZXR1cm4gbnVsbDtpZih0aGlzLmNvbnN1bWUoKSxyJiZyIT09ImF0b20iJiYhYS5hbGxvd2VkSW5Bcmd1bWVudCl0aHJvdyBuZXcgcHQoIkdvdCBmdW5jdGlvbiAnIitpKyInIHdpdGggbm8gYXJndW1lbnRzIisocj8iIGFzICIrcjoiIiksbik7aWYodGhpcy5tb2RlPT09InRleHQiJiYhYS5hbGxvd2VkSW5UZXh0KXRocm93IG5ldyBwdCgiQ2FuJ3QgdXNlIGZ1bmN0aW9uICciK2krIicgaW4gdGV4dCBtb2RlIixuKTtpZih0aGlzLm1vZGU9PT0ibWF0aCImJmEuYWxsb3dlZEluTWF0aD09PSExKXRocm93IG5ldyBwdCgiQ2FuJ3QgdXNlIGZ1bmN0aW9uICciK2krIicgaW4gbWF0aCBtb2RlIixuKTt2YXJ7YXJnczpzLG9wdEFyZ3M6bH09dGhpcy5wYXJzZUFyZ3VtZW50cyhpLGEpO3JldHVybiB0aGlzLmNhbGxGdW5jdGlvbihpLHMsbCxuLGUpfWNhbGxGdW5jdGlvbihlLHIsbixpLGEpe3ZhciBzPXtmdW5jTmFtZTplLHBhcnNlcjp0aGlzLHRva2VuOmksYnJlYWtPblRva2VuVGV4dDphfSxsPXloW2VdO2lmKGwmJmwuaGFuZGxlcilyZXR1cm4gbC5oYW5kbGVyKHMscixuKTt0aHJvdyBuZXcgcHQoIk5vIGZ1bmN0aW9uIGhhbmRsZXIgZm9yICIrZSl9cGFyc2VBcmd1bWVudHMoZSxyKXt2YXIgbj1yLm51bUFyZ3Mrci5udW1PcHRpb25hbEFyZ3M7aWYobj09PTApcmV0dXJue2FyZ3M6W10sb3B0QXJnczpbXX07Zm9yKHZhciBpPVtdLGE9W10scz0wO3M8bjtzKyspe3ZhciBsPXIuYXJnVHlwZXMmJnIuYXJnVHlwZXNbc10sdT1zPHIubnVtT3B0aW9uYWxBcmdzOyhyLnByaW1pdGl2ZSYmbD09bnVsbHx8ci50eXBlPT09InNxcnQiJiZzPT09MSYmYVswXT09bnVsbCkmJihsPSJwcmltaXRpdmUiKTt2YXIgaD10aGlzLnBhcnNlR3JvdXBPZlR5cGUoImFyZ3VtZW50IHRvICciK2UrIiciLGwsdSk7aWYodSlhLnB1c2goaCk7ZWxzZSBpZihoIT1udWxsKWkucHVzaChoKTtlbHNlIHRocm93IG5ldyBwdCgiTnVsbCBhcmd1bWVudCwgcGxlYXNlIHJlcG9ydCB0aGlzIGFzIGEgYnVnIil9cmV0dXJue2FyZ3M6aSxvcHRBcmdzOmF9fXBhcnNlR3JvdXBPZlR5cGUoZSxyLG4pe3N3aXRjaChyKXtjYXNlImNvbG9yIjpyZXR1cm4gdGhpcy5wYXJzZUNvbG9yR3JvdXAobik7Y2FzZSJzaXplIjpyZXR1cm4gdGhpcy5wYXJzZVNpemVHcm91cChuKTtjYXNlInVybCI6cmV0dXJuIHRoaXMucGFyc2VVcmxHcm91cChuKTtjYXNlIm1hdGgiOmNhc2UidGV4dCI6cmV0dXJuIHRoaXMucGFyc2VBcmd1bWVudEdyb3VwKG4scik7Y2FzZSJoYm94Ijp7dmFyIGk9dGhpcy5wYXJzZUFyZ3VtZW50R3JvdXAobiwidGV4dCIpO3JldHVybiBpIT1udWxsP3t0eXBlOiJzdHlsaW5nIixtb2RlOmkubW9kZSxib2R5OltpXSxzdHlsZToidGV4dCJ9Om51bGx9Y2FzZSJyYXciOnt2YXIgYT10aGlzLnBhcnNlU3RyaW5nR3JvdXAoInJhdyIsbik7cmV0dXJuIGEhPW51bGw/e3R5cGU6InJhdyIsbW9kZToidGV4dCIsc3RyaW5nOmEudGV4dH06bnVsbH1jYXNlInByaW1pdGl2ZSI6e2lmKG4pdGhyb3cgbmV3IHB0KCJBIHByaW1pdGl2ZSBhcmd1bWVudCBjYW5ub3QgYmUgb3B0aW9uYWwiKTt2YXIgcz10aGlzLnBhcnNlR3JvdXAoZSk7aWYocz09bnVsbCl0aHJvdyBuZXcgcHQoIkV4cGVjdGVkIGdyb3VwIGFzICIrZSx0aGlzLmZldGNoKCkpO3JldHVybiBzfWNhc2Uib3JpZ2luYWwiOmNhc2UgbnVsbDpjYXNlIHZvaWQgMDpyZXR1cm4gdGhpcy5wYXJzZUFyZ3VtZW50R3JvdXAobik7ZGVmYXVsdDp0aHJvdyBuZXcgcHQoIlVua25vd24gZ3JvdXAgdHlwZSBhcyAiK2UsdGhpcy5mZXRjaCgpKX19Y29uc3VtZVNwYWNlcygpe2Zvcig7dGhpcy5mZXRjaCgpLnRleHQ9PT0iICI7KXRoaXMuY29uc3VtZSgpfXBhcnNlU3RyaW5nR3JvdXAoZSxyKXt2YXIgbj10aGlzLmd1bGxldC5zY2FuQXJndW1lbnQocik7aWYobj09bnVsbClyZXR1cm4gbnVsbDtmb3IodmFyIGk9IiIsYTsoYT10aGlzLmZldGNoKCkpLnRleHQhPT0iRU9GIjspaSs9YS50ZXh0LHRoaXMuY29uc3VtZSgpO3JldHVybiB0aGlzLmNvbnN1bWUoKSxuLnRleHQ9aSxufXBhcnNlUmVnZXhHcm91cChlLHIpe2Zvcih2YXIgbj10aGlzLmZldGNoKCksaT1uLGE9IiIsczsocz10aGlzLmZldGNoKCkpLnRleHQhPT0iRU9GIiYmZS50ZXN0KGErcy50ZXh0KTspaT1zLGErPWkudGV4dCx0aGlzLmNvbnN1bWUoKTtpZihhPT09IiIpdGhyb3cgbmV3IHB0KCJJbnZhbGlkICIrcisiOiAnIituLnRleHQrIiciLG4pO3JldHVybiBuLnJhbmdlKGksYSl9cGFyc2VDb2xvckdyb3VwKGUpe3ZhciByPXRoaXMucGFyc2VTdHJpbmdHcm91cCgiY29sb3IiLGUpO2lmKHI9PW51bGwpcmV0dXJuIG51bGw7dmFyIG49L14oI1thLWYwLTldezN9fCM/W2EtZjAtOV17Nn18W2Etel0rKSQvaS5leGVjKHIudGV4dCk7aWYoIW4pdGhyb3cgbmV3IHB0KCJJbnZhbGlkIGNvbG9yOiAnIityLnRleHQrIiciLHIpO3ZhciBpPW5bMF07cmV0dXJuL15bMC05YS1mXXs2fSQvaS50ZXN0KGkpJiYoaT0iIyIraSkse3R5cGU6ImNvbG9yLXRva2VuIixtb2RlOnRoaXMubW9kZSxjb2xvcjppfX1wYXJzZVNpemVHcm91cChlKXt2YXIgcixuPSExO2lmKHRoaXMuZ3VsbGV0LmNvbnN1bWVTcGFjZXMoKSwhZSYmdGhpcy5ndWxsZXQuZnV0dXJlKCkudGV4dCE9PSJ7Ij9yPXRoaXMucGFyc2VSZWdleEdyb3VwKC9eWy0rXT8gKig/OiR8XGQrfFxkK1wuXGQqfFwuXGQqKSAqW2Etel17MCwyfSAqJC8sInNpemUiKTpyPXRoaXMucGFyc2VTdHJpbmdHcm91cCgic2l6ZSIsZSksIXIpcmV0dXJuIG51bGw7IWUmJnIudGV4dC5sZW5ndGg9PT0wJiYoci50ZXh0PSIwcHQiLG49ITApO3ZhciBpPS8oWy0rXT8pICooXGQrKD86XC5cZCopP3xcLlxkKykgKihbYS16XXsyfSkvLmV4ZWMoci50ZXh0KTtpZighaSl0aHJvdyBuZXcgcHQoIkludmFsaWQgc2l6ZTogJyIrci50ZXh0KyInIixyKTt2YXIgYT17bnVtYmVyOisoaVsxXStpWzJdKSx1bml0OmlbM119O2lmKCFERyhhKSl0aHJvdyBuZXcgcHQoIkludmFsaWQgdW5pdDogJyIrYS51bml0KyInIixyKTtyZXR1cm57dHlwZToic2l6ZSIsbW9kZTp0aGlzLm1vZGUsdmFsdWU6YSxpc0JsYW5rOm59fXBhcnNlVXJsR3JvdXAoZSl7dGhpcy5ndWxsZXQubGV4ZXIuc2V0Q2F0Y29kZSgiJSIsMTMpLHRoaXMuZ3VsbGV0LmxleGVyLnNldENhdGNvZGUoIn4iLDEyKTt2YXIgcj10aGlzLnBhcnNlU3RyaW5nR3JvdXAoInVybCIsZSk7aWYodGhpcy5ndWxsZXQubGV4ZXIuc2V0Q2F0Y29kZSgiJSIsMTQpLHRoaXMuZ3VsbGV0LmxleGVyLnNldENhdGNvZGUoIn4iLDEzKSxyPT1udWxsKXJldHVybiBudWxsO3ZhciBuPXIudGV4dC5yZXBsYWNlKC9cXChbIyQlJn5fXnt9XSkvZywiJDEiKTtyZXR1cm57dHlwZToidXJsIixtb2RlOnRoaXMubW9kZSx1cmw6bn19cGFyc2VBcmd1bWVudEdyb3VwKGUscil7dmFyIG49dGhpcy5ndWxsZXQuc2NhbkFyZ3VtZW50KGUpO2lmKG49PW51bGwpcmV0dXJuIG51bGw7dmFyIGk9dGhpcy5tb2RlO3ImJnRoaXMuc3dpdGNoTW9kZShyKSx0aGlzLmd1bGxldC5iZWdpbkdyb3VwKCk7dmFyIGE9dGhpcy5wYXJzZUV4cHJlc3Npb24oITEsIkVPRiIpO3RoaXMuZXhwZWN0KCJFT0YiKSx0aGlzLmd1bGxldC5lbmRHcm91cCgpO3ZhciBzPXt0eXBlOiJvcmRncm91cCIsbW9kZTp0aGlzLm1vZGUsbG9jOm4ubG9jLGJvZHk6YX07cmV0dXJuIHImJnRoaXMuc3dpdGNoTW9kZShpKSxzfXBhcnNlR3JvdXAoZSxyKXt2YXIgbj10aGlzLmZldGNoKCksaT1uLnRleHQsYTtpZihpPT09InsifHxpPT09IlxcYmVnaW5ncm91cCIpe3RoaXMuY29uc3VtZSgpO3ZhciBzPWk9PT0ieyI/In0iOiJcXGVuZGdyb3VwIjt0aGlzLmd1bGxldC5iZWdpbkdyb3VwKCk7dmFyIGw9dGhpcy5wYXJzZUV4cHJlc3Npb24oITEscyksdT10aGlzLmZldGNoKCk7dGhpcy5leHBlY3QocyksdGhpcy5ndWxsZXQuZW5kR3JvdXAoKSxhPXt0eXBlOiJvcmRncm91cCIsbW9kZTp0aGlzLm1vZGUsbG9jOlFzLnJhbmdlKG4sdSksYm9keTpsLHNlbWlzaW1wbGU6aT09PSJcXGJlZ2luZ3JvdXAifHx2b2lkIDB9fWVsc2UgaWYoYT10aGlzLnBhcnNlRnVuY3Rpb24ocixlKXx8dGhpcy5wYXJzZVN5bWJvbCgpLGE9PW51bGwmJmlbMF09PT0iXFwiJiYheFYuaGFzT3duUHJvcGVydHkoaSkpe2lmKHRoaXMuc2V0dGluZ3MudGhyb3dPbkVycm9yKXRocm93IG5ldyBwdCgiVW5kZWZpbmVkIGNvbnRyb2wgc2VxdWVuY2U6ICIraSxuKTthPXRoaXMuZm9ybWF0VW5zdXBwb3J0ZWRDbWQoaSksdGhpcy5jb25zdW1lKCl9cmV0dXJuIGF9Zm9ybUxpZ2F0dXJlcyhlKXtmb3IodmFyIHI9ZS5sZW5ndGgtMSxuPTA7bjxyOysrbil7dmFyIGk9ZVtuXSxhPWkudGV4dDthPT09Ii0iJiZlW24rMV0udGV4dD09PSItIiYmKG4rMTxyJiZlW24rMl0udGV4dD09PSItIj8oZS5zcGxpY2UobiwzLHt0eXBlOiJ0ZXh0b3JkIixtb2RlOiJ0ZXh0Iixsb2M6UXMucmFuZ2UoaSxlW24rMl0pLHRleHQ6Ii0tLSJ9KSxyLT0yKTooZS5zcGxpY2UobiwyLHt0eXBlOiJ0ZXh0b3JkIixtb2RlOiJ0ZXh0Iixsb2M6UXMucmFuZ2UoaSxlW24rMV0pLHRleHQ6Ii0tIn0pLHItPTEpKSwoYT09PSInInx8YT09PSJgIikmJmVbbisxXS50ZXh0PT09YSYmKGUuc3BsaWNlKG4sMix7dHlwZToidGV4dG9yZCIsbW9kZToidGV4dCIsbG9jOlFzLnJhbmdlKGksZVtuKzFdKSx0ZXh0OmErYX0pLHItPTEpfX1wYXJzZVN5bWJvbCgpe3ZhciBlPXRoaXMuZmV0Y2goKSxyPWUudGV4dDtpZigvXlxcdmVyYlteYS16QS1aXS8udGVzdChyKSl7dGhpcy5jb25zdW1lKCk7dmFyIG49ci5zbGljZSg1KSxpPW4uY2hhckF0KDApPT09IioiO2lmKGkmJihuPW4uc2xpY2UoMSkpLG4ubGVuZ3RoPDJ8fG4uY2hhckF0KDApIT09bi5zbGljZSgtMSkpdGhyb3cgbmV3IHB0KGBcXHZlcmIgYXNzZXJ0aW9uIGZhaWxlZCAtLQogICAgICAgICAgICAgICAgICAgIHBsZWFzZSByZXBvcnQgd2hhdCBpbnB1dCBjYXVzZWQgdGhpcyBidWdgKTtyZXR1cm4gbj1uLnNsaWNlKDEsLTEpLHt0eXBlOiJ2ZXJiIixtb2RlOiJ0ZXh0Iixib2R5Om4sc3RhcjppfX1TRy5oYXNPd25Qcm9wZXJ0eShyWzBdKSYmIUFuW3RoaXMubW9kZV1bclswXV0mJih0aGlzLnNldHRpbmdzLnN0cmljdCYmdGhpcy5tb2RlPT09Im1hdGgiJiZ0aGlzLnNldHRpbmdzLnJlcG9ydE5vbnN0cmljdCgidW5pY29kZVRleHRJbk1hdGhNb2RlIiwnQWNjZW50ZWQgVW5pY29kZSB0ZXh0IGNoYXJhY3RlciAiJytyWzBdKyciIHVzZWQgaW4gbWF0aCBtb2RlJyxlKSxyPVNHW3JbMF1dK3Iuc2xpY2UoMSkpO3ZhciBhPW81ZS5leGVjKHIpO2EmJihyPXIuc3Vic3RyaW5nKDAsYS5pbmRleCkscj09PSJpIj9yPSJcdTAxMzEiOnI9PT0iaiImJihyPSJcdTAyMzciKSk7dmFyIHM7aWYoQW5bdGhpcy5tb2RlXVtyXSl7dGhpcy5zZXR0aW5ncy5zdHJpY3QmJnRoaXMubW9kZT09PSJtYXRoIiYmWTcuaW5kZXhPZihyKT49MCYmdGhpcy5zZXR0aW5ncy5yZXBvcnROb25zdHJpY3QoInVuaWNvZGVUZXh0SW5NYXRoTW9kZSIsJ0xhdGluLTEvVW5pY29kZSB0ZXh0IGNoYXJhY3RlciAiJytyWzBdKyciIHVzZWQgaW4gbWF0aCBtb2RlJyxlKTt2YXIgbD1Bblt0aGlzLm1vZGVdW3JdLmdyb3VwLHU9UXMucmFuZ2UoZSksaDtpZihlM2UuaGFzT3duUHJvcGVydHkobCkpe3ZhciBmPWw7aD17dHlwZToiYXRvbSIsbW9kZTp0aGlzLm1vZGUsZmFtaWx5OmYsbG9jOnUsdGV4dDpyfX1lbHNlIGg9e3R5cGU6bCxtb2RlOnRoaXMubW9kZSxsb2M6dSx0ZXh0OnJ9O3M9aH1lbHNlIGlmKHIuY2hhckNvZGVBdCgwKT49MTI4KXRoaXMuc2V0dGluZ3Muc3RyaWN0JiYoQUcoci5jaGFyQ29kZUF0KDApKT90aGlzLm1vZGU9PT0ibWF0aCImJnRoaXMuc2V0dGluZ3MucmVwb3J0Tm9uc3RyaWN0KCJ1bmljb2RlVGV4dEluTWF0aE1vZGUiLCdVbmljb2RlIHRleHQgY2hhcmFjdGVyICInK3JbMF0rJyIgdXNlZCBpbiBtYXRoIG1vZGUnLGUpOnRoaXMuc2V0dGluZ3MucmVwb3J0Tm9uc3RyaWN0KCJ1bmtub3duU3ltYm9sIiwnVW5yZWNvZ25pemVkIFVuaWNvZGUgY2hhcmFjdGVyICInK3JbMF0rJyInKygiICgiK3IuY2hhckNvZGVBdCgwKSsiKSIpLGUpKSxzPXt0eXBlOiJ0ZXh0b3JkIixtb2RlOiJ0ZXh0Iixsb2M6UXMucmFuZ2UoZSksdGV4dDpyfTtlbHNlIHJldHVybiBudWxsO2lmKHRoaXMuY29uc3VtZSgpLGEpZm9yKHZhciBkPTA7ZDxhWzBdLmxlbmd0aDtkKyspe3ZhciBwPWFbMF1bZF07aWYoIVU3W3BdKXRocm93IG5ldyBwdCgiVW5rbm93biBhY2NlbnQgJyAiK3ArIiciLGUpO3ZhciBtPVU3W3BdW3RoaXMubW9kZV18fFU3W3BdLnRleHQ7aWYoIW0pdGhyb3cgbmV3IHB0KCJBY2NlbnQgIitwKyIgdW5zdXBwb3J0ZWQgaW4gIit0aGlzLm1vZGUrIiBtb2RlIixlKTtzPXt0eXBlOiJhY2NlbnQiLG1vZGU6dGhpcy5tb2RlLGxvYzpRcy5yYW5nZShlKSxsYWJlbDptLGlzU3RyZXRjaHk6ITEsaXNTaGlmdHk6ITAsYmFzZTpzfX1yZXR1cm4gc319O18zLmVuZE9mRXhwcmVzc2lvbj1bIn0iLCJcXGVuZGdyb3VwIiwiXFxlbmQiLCJcXHJpZ2h0IiwiJiJdO3ZBPW8oZnVuY3Rpb24oZSxyKXtpZighKHR5cGVvZiBlPT0ic3RyaW5nInx8ZSBpbnN0YW5jZW9mIFN0cmluZykpdGhyb3cgbmV3IFR5cGVFcnJvcigiS2FUZVggY2FuIG9ubHkgcGFyc2Ugc3RyaW5nIHR5cGVkIGV4cHJlc3Npb24iKTt2YXIgbj1uZXcgXzMoZSxyKTtkZWxldGUgbi5ndWxsZXQubWFjcm9zLmN1cnJlbnRbIlxcZGZAdGFnIl07dmFyIGk9bi5wYXJzZSgpO2lmKGRlbGV0ZSBuLmd1bGxldC5tYWNyb3MuY3VycmVudFsiXFxjdXJyZW50QGNvbG9yIl0sZGVsZXRlIG4uZ3VsbGV0Lm1hY3Jvcy5jdXJyZW50WyJcXGNvbG9yIl0sbi5ndWxsZXQubWFjcm9zLmdldCgiXFxkZkB0YWciKSl7aWYoIXIuZGlzcGxheU1vZGUpdGhyb3cgbmV3IHB0KCJcXHRhZyB3b3JrcyBvbmx5IGluIGRpc3BsYXkgZXF1YXRpb25zIik7aT1be3R5cGU6InRhZyIsbW9kZToidGV4dCIsYm9keTppLHRhZzpuLnN1YnBhcnNlKFtuZXcgX28oIlxcZGZAdGFnIildKX1dfXJldHVybiBpfSwicGFyc2VUcmVlIikseEE9byhmdW5jdGlvbihlLHIsbil7ci50ZXh0Q29udGVudD0iIjt2YXIgaT1PMyhlLG4pLnRvTm9kZSgpO3IuYXBwZW5kQ2hpbGQoaSl9LCJyZW5kZXIiKTt0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jb21wYXRNb2RlIT09IkNTUzFDb21wYXQiJiYodHlwZW9mIGNvbnNvbGU8InUiJiZjb25zb2xlLndhcm4oIldhcm5pbmc6IEthVGVYIGRvZXNuJ3Qgd29yayBpbiBxdWlya3MgbW9kZS4gTWFrZSBzdXJlIHlvdXIgd2Vic2l0ZSBoYXMgYSBzdWl0YWJsZSBkb2N0eXBlLiIpLHhBPW8oZnVuY3Rpb24oKXt0aHJvdyBuZXcgcHQoIkthVGVYIGRvZXNuJ3Qgd29yayBpbiBxdWlya3MgbW9kZS4iKX0sInJlbmRlciIpKTtiVj1vKGZ1bmN0aW9uKGUscil7dmFyIG49TzMoZSxyKS50b01hcmt1cCgpO3JldHVybiBufSwicmVuZGVyVG9TdHJpbmciKSxUVj1vKGZ1bmN0aW9uKGUscil7dmFyIG49bmV3IEt5KHIpO3JldHVybiB2QShlLG4pfSwiZ2VuZXJhdGVQYXJzZVRyZWUiKSx3Vj1vKGZ1bmN0aW9uKGUscixuKXtpZihuLnRocm93T25FcnJvcnx8IShlIGluc3RhbmNlb2YgcHQpKXRocm93IGU7dmFyIGk9RmUubWFrZVNwYW4oWyJrYXRleC1lcnJvciJdLFtuZXcgQXMocildKTtyZXR1cm4gaS5zZXRBdHRyaWJ1dGUoInRpdGxlIixlLnRvU3RyaW5nKCkpLGkuc2V0QXR0cmlidXRlKCJzdHlsZSIsImNvbG9yOiIrbi5lcnJvckNvbG9yKSxpfSwicmVuZGVyRXJyb3IiKSxPMz1vKGZ1bmN0aW9uKGUscil7dmFyIG49bmV3IEt5KHIpO3RyeXt2YXIgaT12QShlLG4pO3JldHVybiB3M2UoaSxlLG4pfWNhdGNoKGEpe3JldHVybiB3VihhLGUsbil9fSwicmVuZGVyVG9Eb21UcmVlIiksa1Y9byhmdW5jdGlvbihlLHIpe3ZhciBuPW5ldyBLeShyKTt0cnl7dmFyIGk9dkEoZSxuKTtyZXR1cm4gazNlKGksZSxuKX1jYXRjaChhKXtyZXR1cm4gd1YoYSxlLG4pfX0sInJlbmRlclRvSFRNTFRyZWUiKSxFVj0iMC4xNi4yMiIsU1Y9e1NwYW46bGQsQW5jaG9yOlp5LFN5bWJvbE5vZGU6QXMsU3ZnTm9kZTpkbCxQYXRoTm9kZTplYyxMaW5lTm9kZTpKeX0sdTVlPXt2ZXJzaW9uOkVWLHJlbmRlcjp4QSxyZW5kZXJUb1N0cmluZzpiVixQYXJzZUVycm9yOnB0LFNFVFRJTkdTX1NDSEVNQTpYeSxfX3BhcnNlOlRWLF9fcmVuZGVyVG9Eb21UcmVlOk8zLF9fcmVuZGVyVG9IVE1MVHJlZTprVixfX3NldEZvbnRNZXRyaWNzOl9HLF9fZGVmaW5lU3ltYm9sOkcsX19kZWZpbmVGdW5jdGlvbjpOdCxfX2RlZmluZU1hY3JvOmZlLF9fZG9tVHJlZTpTVn19KTtmdW5jdGlvbiBkNWUoKXtsZXQgdD0iZGF0YS10ZW1wLWhyZWYtdGFyZ2V0IjttaC5hZGRIb29rKCJiZWZvcmVTYW5pdGl6ZUF0dHJpYnV0ZXMiLGU9PntlIGluc3RhbmNlb2YgRWxlbWVudCYmZS50YWdOYW1lPT09IkEiJiZlLmhhc0F0dHJpYnV0ZSgidGFyZ2V0IikmJmUuc2V0QXR0cmlidXRlKHQsZS5nZXRBdHRyaWJ1dGUoInRhcmdldCIpPz8iIil9KSxtaC5hZGRIb29rKCJhZnRlclNhbml0aXplQXR0cmlidXRlcyIsZT0+e2UgaW5zdGFuY2VvZiBFbGVtZW50JiZlLnRhZ05hbWU9PT0iQSImJmUuaGFzQXR0cmlidXRlKHQpJiYoZS5zZXRBdHRyaWJ1dGUoInRhcmdldCIsZS5nZXRBdHRyaWJ1dGUodCk/PyIiKSxlLnJlbW92ZUF0dHJpYnV0ZSh0KSxlLmdldEF0dHJpYnV0ZSgidGFyZ2V0Iik9PT0iX2JsYW5rIiYmZS5zZXRBdHRyaWJ1dGUoInJlbCIsIm5vb3BlbmVyIikpfSl9dmFyIHVkLGg1ZSxmNWUsTFYsX1Ysd3IscDVlLG01ZSxnNWUseTVlLFJWLG11LGRyLHY1ZSx4NWUsaWMsYkEsYjVlLFQ1ZSxEVixQMyx5aSxoZCxUaCxaZSxwcj1OKCgpPT57InVzZSBzdHJpY3QiO0w3KCk7dWQ9LzxiclxzKlwvPz4vZ2ksaDVlPW8odD0+dD9SVih0KS5yZXBsYWNlKC9cXG4vZywiI2JyIyIpLnNwbGl0KCIjYnIjIik6WyIiXSwiZ2V0Um93cyIpLGY1ZT0oKCk9PntsZXQgdD0hMTtyZXR1cm4oKT0+e3R8fChkNWUoKSx0PSEwKX19KSgpO28oZDVlLCJzZXR1cERvbXB1cmlmeUhvb2tzIik7TFY9byh0PT4oZjVlKCksbWguc2FuaXRpemUodCkpLCJyZW1vdmVTY3JpcHQiKSxfVj1vKCh0LGUpPT57aWYoZS5mbG93Y2hhcnQ/Lmh0bWxMYWJlbHMhPT0hMSl7bGV0IHI9ZS5zZWN1cml0eUxldmVsO3I9PT0iYW50aXNjcmlwdCJ8fHI9PT0ic3RyaWN0Ij90PUxWKHQpOnIhPT0ibG9vc2UiJiYodD1SVih0KSx0PXQucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IiksdD10LnJlcGxhY2UoLz0vZywiJmVxdWFsczsiKSx0PXk1ZSh0KSl9cmV0dXJuIHR9LCJzYW5pdGl6ZU1vcmUiKSx3cj1vKCh0LGUpPT50JiYoZS5kb21wdXJpZnlDb25maWc/dD1taC5zYW5pdGl6ZShfVih0LGUpLGUuZG9tcHVyaWZ5Q29uZmlnKS50b1N0cmluZygpOnQ9bWguc2FuaXRpemUoX1YodCxlKSx7Rk9SQklEX1RBR1M6WyJzdHlsZSJdfSkudG9TdHJpbmcoKSx0KSwic2FuaXRpemVUZXh0IikscDVlPW8oKHQsZSk9PnR5cGVvZiB0PT0ic3RyaW5nIj93cih0LGUpOnQuZmxhdCgpLm1hcChyPT53cihyLGUpKSwic2FuaXRpemVUZXh0T3JBcnJheSIpLG01ZT1vKHQ9PnVkLnRlc3QodCksImhhc0JyZWFrcyIpLGc1ZT1vKHQ9PnQuc3BsaXQodWQpLCJzcGxpdEJyZWFrcyIpLHk1ZT1vKHQ9PnQucmVwbGFjZSgvI2JyIy9nLCI8YnIvPiIpLCJwbGFjZWhvbGRlclRvQnJlYWsiKSxSVj1vKHQ9PnQucmVwbGFjZSh1ZCwiI2JyIyIpLCJicmVha1RvUGxhY2Vob2xkZXIiKSxtdT1vKHQ9PntsZXQgZT0iIjtyZXR1cm4gdCYmKGU9d2luZG93LmxvY2F0aW9uLnByb3RvY29sKyIvLyIrd2luZG93LmxvY2F0aW9uLmhvc3Qrd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lK3dpbmRvdy5sb2NhdGlvbi5zZWFyY2gsZT1DU1MuZXNjYXBlKGUpKSxlfSwiZ2V0VXJsIiksZHI9byh0PT4hKHQ9PT0hMXx8WyJmYWxzZSIsIm51bGwiLCIwIl0uaW5jbHVkZXMoU3RyaW5nKHQpLnRyaW0oKS50b0xvd2VyQ2FzZSgpKSksImV2YWx1YXRlIiksdjVlPW8oZnVuY3Rpb24oLi4udCl7bGV0IGU9dC5maWx0ZXIocj0+IWlzTmFOKHIpKTtyZXR1cm4gTWF0aC5tYXgoLi4uZSl9LCJnZXRNYXgiKSx4NWU9byhmdW5jdGlvbiguLi50KXtsZXQgZT10LmZpbHRlcihyPT4haXNOYU4ocikpO3JldHVybiBNYXRoLm1pbiguLi5lKX0sImdldE1pbiIpLGljPW8oZnVuY3Rpb24odCl7bGV0IGU9dC5zcGxpdCgvKCwpLykscj1bXTtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl7bGV0IGk9ZVtuXTtpZihpPT09IiwiJiZuPjAmJm4rMTxlLmxlbmd0aCl7bGV0IGE9ZVtuLTFdLHM9ZVtuKzFdO2I1ZShhLHMpJiYoaT1hKyIsIitzLG4rKyxyLnBvcCgpKX1yLnB1c2goVDVlKGkpKX1yZXR1cm4gci5qb2luKCIiKX0sInBhcnNlR2VuZXJpY1R5cGVzIiksYkE9bygodCxlKT0+TWF0aC5tYXgoMCx0LnNwbGl0KGUpLmxlbmd0aC0xKSwiY291bnRPY2N1cnJlbmNlIiksYjVlPW8oKHQsZSk9PntsZXQgcj1iQSh0LCJ+Iiksbj1iQShlLCJ+Iik7cmV0dXJuIHI9PT0xJiZuPT09MX0sInNob3VsZENvbWJpbmVTZXRzIiksVDVlPW8odD0+e2xldCBlPWJBKHQsIn4iKSxyPSExO2lmKGU8PTEpcmV0dXJuIHQ7ZSUyIT09MCYmdC5zdGFydHNXaXRoKCJ+IikmJih0PXQuc3Vic3RyaW5nKDEpLHI9ITApO2xldCBuPVsuLi50XSxpPW4uaW5kZXhPZigifiIpLGE9bi5sYXN0SW5kZXhPZigifiIpO2Zvcig7aSE9PS0xJiZhIT09LTEmJmkhPT1hOyluW2ldPSI8IixuW2FdPSI+IixpPW4uaW5kZXhPZigifiIpLGE9bi5sYXN0SW5kZXhPZigifiIpO3JldHVybiByJiZuLnVuc2hpZnQoIn4iKSxuLmpvaW4oIiIpfSwicHJvY2Vzc1NldCIpLERWPW8oKCk9PndpbmRvdy5NYXRoTUxFbGVtZW50IT09dm9pZCAwLCJpc01hdGhNTFN1cHBvcnRlZCIpLFAzPS9cJFwkKC4qKVwkXCQvZyx5aT1vKHQ9Pih0Lm1hdGNoKFAzKT8ubGVuZ3RoPz8wKT4wLCJoYXNLYXRleCIpLGhkPW8oYXN5bmModCxlKT0+e3Q9YXdhaXQgVGgodCxlKTtsZXQgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyLmlubmVySFRNTD10LHIuaWQ9ImthdGV4LXRlbXAiLHIuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIixyLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsci5zdHlsZS50b3A9IjAiLGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImJvZHkiKT8uaW5zZXJ0QWRqYWNlbnRFbGVtZW50KCJiZWZvcmVlbmQiLHIpO2xldCBpPXt3aWR0aDpyLmNsaWVudFdpZHRoLGhlaWdodDpyLmNsaWVudEhlaWdodH07cmV0dXJuIHIucmVtb3ZlKCksaX0sImNhbGN1bGF0ZU1hdGhNTERpbWVuc2lvbnMiKSxUaD1vKGFzeW5jKHQsZSk9PntpZigheWkodCkpcmV0dXJuIHQ7aWYoIShEVigpfHxlLmxlZ2FjeU1hdGhNTHx8ZS5mb3JjZUxlZ2FjeU1hdGhNTCkpcmV0dXJuIHQucmVwbGFjZShQMywiTWF0aE1MIGlzIHVuc3VwcG9ydGVkIGluIHRoaXMgZW52aXJvbm1lbnQuIik7e2xldHtkZWZhdWx0OnJ9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihBVigpLENWKSksbj1lLmZvcmNlTGVnYWN5TWF0aE1MfHwhRFYoKSYmZS5sZWdhY3lNYXRoTUw/Imh0bWxBbmRNYXRobWwiOiJtYXRobWwiO3JldHVybiB0LnNwbGl0KHVkKS5tYXAoaT0+eWkoaSk/YDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOyB3aGl0ZS1zcGFjZTogbm93cmFwOyI+JHtpfTwvZGl2PmA6YDxkaXY+JHtpfTwvZGl2PmApLmpvaW4oIiIpLnJlcGxhY2UoUDMsKGksYSk9PnIucmVuZGVyVG9TdHJpbmcoYSx7dGhyb3dPbkVycm9yOiEwLGRpc3BsYXlNb2RlOiEwLG91dHB1dDpufSkucmVwbGFjZSgvXG4vZywiICIpLnJlcGxhY2UoLzxhbm5vdGF0aW9uLio8XC9hbm5vdGF0aW9uPi9nLCIiKSl9cmV0dXJuIHQucmVwbGFjZShQMywiS2F0ZXggaXMgbm90IHN1cHBvcnRlZCBpbiBAbWVybWFpZC1qcy90aW55LiBQbGVhc2UgdXNlIHRoZSBmdWxsIG1lcm1haWQgbGlicmFyeS4iKX0sInJlbmRlckthdGV4IiksWmU9e2dldFJvd3M6aDVlLHNhbml0aXplVGV4dDp3cixzYW5pdGl6ZVRleHRPckFycmF5OnA1ZSxoYXNCcmVha3M6bTVlLHNwbGl0QnJlYWtzOmc1ZSxsaW5lQnJlYWtSZWdleDp1ZCxyZW1vdmVTY3JpcHQ6TFYsZ2V0VXJsOm11LGV2YWx1YXRlOmRyLGdldE1heDp2NWUsZ2V0TWluOng1ZX19KTt2YXIgdzVlLGs1ZSxmbixMbyx4aT1OKCgpPT57InVzZSBzdHJpY3QiO3l0KCk7dzVlPW8oZnVuY3Rpb24odCxlKXtmb3IobGV0IHIgb2YgZSl0LmF0dHIoclswXSxyWzFdKX0sImQzQXR0cnMiKSxrNWU9byhmdW5jdGlvbih0LGUscil7bGV0IG49bmV3IE1hcDtyZXR1cm4gcj8obi5zZXQoIndpZHRoIiwiMTAwJSIpLG4uc2V0KCJzdHlsZSIsYG1heC13aWR0aDogJHtlfXB4O2ApKToobi5zZXQoImhlaWdodCIsdCksbi5zZXQoIndpZHRoIixlKSksbn0sImNhbGN1bGF0ZVN2Z1NpemVBdHRycyIpLGZuPW8oZnVuY3Rpb24odCxlLHIsbil7bGV0IGk9azVlKGUscixuKTt3NWUodCxpKX0sImNvbmZpZ3VyZVN2Z1NpemUiKSxMbz1vKGZ1bmN0aW9uKHQsZSxyLG4pe2xldCBpPWUubm9kZSgpLmdldEJCb3goKSxhPWkud2lkdGgscz1pLmhlaWdodDtYLmluZm8oYFNWRyBib3VuZHM6ICR7YX14JHtzfWAsaSk7bGV0IGw9MCx1PTA7WC5pbmZvKGBHcmFwaCBib3VuZHM6ICR7bH14JHt1fWAsdCksbD1hK3IqMix1PXMrcioyLFguaW5mbyhgQ2FsY3VsYXRlZCBib3VuZHM6ICR7bH14JHt1fWApLGZuKGUsdSxsLG4pO2xldCBoPWAke2kueC1yfSAke2kueS1yfSAke2kud2lkdGgrMipyfSAke2kuaGVpZ2h0KzIqcn1gO2UuYXR0cigidmlld0JveCIsaCl9LCJzZXR1cEdyYXBoVmlld2JveCIpfSk7dmFyIEIzLEU1ZSxOVixNVixUQT1OKCgpPT57InVzZSBzdHJpY3QiO3l0KCk7QjM9e30sRTVlPW8oKHQsZSxyKT0+e2xldCBuPSIiO3JldHVybiB0IGluIEIzJiZCM1t0XT9uPUIzW3RdKHIpOlgud2FybihgTm8gdGhlbWUgZm91bmQgZm9yICR7dH1gKSxgICYgewogICAgZm9udC1mYW1pbHk6ICR7ci5mb250RmFtaWx5fTsKICAgIGZvbnQtc2l6ZTogJHtyLmZvbnRTaXplfTsKICAgIGZpbGw6ICR7ci50ZXh0Q29sb3J9CiAgfQogIEBrZXlmcmFtZXMgZWRnZS1hbmltYXRpb24tZnJhbWUgewogICAgZnJvbSB7CiAgICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAwOwogICAgfQogIH0KICBAa2V5ZnJhbWVzIGRhc2ggewogICAgdG8gewogICAgICBzdHJva2UtZGFzaG9mZnNldDogMDsKICAgIH0KICB9CiAgJiAuZWRnZS1hbmltYXRpb24tc2xvdyB7CiAgICBzdHJva2UtZGFzaGFycmF5OiA5LDUgIWltcG9ydGFudDsKICAgIHN0cm9rZS1kYXNob2Zmc2V0OiA5MDA7CiAgICBhbmltYXRpb246IGRhc2ggNTBzIGxpbmVhciBpbmZpbml0ZTsKICAgIHN0cm9rZS1saW5lY2FwOiByb3VuZDsKICB9CiAgJiAuZWRnZS1hbmltYXRpb24tZmFzdCB7CiAgICBzdHJva2UtZGFzaGFycmF5OiA5LDUgIWltcG9ydGFudDsKICAgIHN0cm9rZS1kYXNob2Zmc2V0OiA5MDA7CiAgICBhbmltYXRpb246IGRhc2ggMjBzIGxpbmVhciBpbmZpbml0ZTsKICAgIHN0cm9rZS1saW5lY2FwOiByb3VuZDsKICB9CiAgLyogQ2xhc3NlcyBjb21tb24gZm9yIG11bHRpcGxlIGRpYWdyYW1zICovCgogICYgLmVycm9yLWljb24gewogICAgZmlsbDogJHtyLmVycm9yQmtnQ29sb3J9OwogIH0KICAmIC5lcnJvci10ZXh0IHsKICAgIGZpbGw6ICR7ci5lcnJvclRleHRDb2xvcn07CiAgICBzdHJva2U6ICR7ci5lcnJvclRleHRDb2xvcn07CiAgfQoKICAmIC5lZGdlLXRoaWNrbmVzcy1ub3JtYWwgewogICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgfQogICYgLmVkZ2UtdGhpY2tuZXNzLXRoaWNrIHsKICAgIHN0cm9rZS13aWR0aDogMy41cHgKICB9CiAgJiAuZWRnZS1wYXR0ZXJuLXNvbGlkIHsKICAgIHN0cm9rZS1kYXNoYXJyYXk6IDA7CiAgfQogICYgLmVkZ2UtdGhpY2tuZXNzLWludmlzaWJsZSB7CiAgICBzdHJva2Utd2lkdGg6IDA7CiAgICBmaWxsOiBub25lOwogIH0KICAmIC5lZGdlLXBhdHRlcm4tZGFzaGVkewogICAgc3Ryb2tlLWRhc2hhcnJheTogMzsKICB9CiAgLmVkZ2UtcGF0dGVybi1kb3R0ZWQgewogICAgc3Ryb2tlLWRhc2hhcnJheTogMjsKICB9CgogICYgLm1hcmtlciB7CiAgICBmaWxsOiAke3IubGluZUNvbG9yfTsKICAgIHN0cm9rZTogJHtyLmxpbmVDb2xvcn07CiAgfQogICYgLm1hcmtlci5jcm9zcyB7CiAgICBzdHJva2U6ICR7ci5saW5lQ29sb3J9OwogIH0KCiAgJiBzdmcgewogICAgZm9udC1mYW1pbHk6ICR7ci5mb250RmFtaWx5fTsKICAgIGZvbnQtc2l6ZTogJHtyLmZvbnRTaXplfTsKICB9CiAgICYgcCB7CiAgICBtYXJnaW46IDAKICAgfQoKICAke259CgogICR7ZX0KYH0sImdldFN0eWxlcyIpLE5WPW8oKHQsZSk9PntlIT09dm9pZCAwJiYoQjNbdF09ZSl9LCJhZGRTdHlsZXNGb3JEaWFncmFtIiksTVY9RTVlfSk7dmFyIHJ2PXt9O3VyKHJ2LHtjbGVhcjooKT0+a3IsZ2V0QWNjRGVzY3JpcHRpb246KCk9PlJyLGdldEFjY1RpdGxlOigpPT5EcixnZXREaWFncmFtVGl0bGU6KCk9Pk5yLHNldEFjY0Rlc2NyaXB0aW9uOigpPT5McixzZXRBY2NUaXRsZTooKT0+QXIsc2V0RGlhZ3JhbVRpdGxlOigpPT5Pcn0pO3ZhciB3QSxrQSxFQSxTQSxrcixBcixEcixMcixScixPcixOcixjaT1OKCgpPT57InVzZSBzdHJpY3QiO3ByKCk7bWkoKTt3QT0iIixrQT0iIixFQT0iIixTQT1vKHQ9PndyKHQsdHIoKSksInNhbml0aXplVGV4dCIpLGtyPW8oKCk9Pnt3QT0iIixFQT0iIixrQT0iIn0sImNsZWFyIiksQXI9byh0PT57d0E9U0EodCkucmVwbGFjZSgvXlxzKy9nLCIiKX0sInNldEFjY1RpdGxlIiksRHI9bygoKT0+d0EsImdldEFjY1RpdGxlIiksTHI9byh0PT57RUE9U0EodCkucmVwbGFjZSgvXG5ccysvZyxgCmApfSwic2V0QWNjRGVzY3JpcHRpb24iKSxScj1vKCgpPT5FQSwiZ2V0QWNjRGVzY3JpcHRpb24iKSxPcj1vKHQ9PntrQT1TQSh0KX0sInNldERpYWdyYW1UaXRsZSIpLE5yPW8oKCk9PmtBLCJnZXREaWFncmFtVGl0bGUiKX0pO3ZhciBJVixTNWUsbWUsbnYsJDMsZmQsQUEsQzVlLEYzLGRkLGl2LENBLEd0PU4oKCk9PnsidXNlIHN0cmljdCI7cmQoKTt5dCgpO21pKCk7cHIoKTt4aSgpO1RBKCk7Y2koKTtJVj1YLFM1ZT1EeSxtZT10cixudj1hMywkMz1waCxmZD1vKHQ9PndyKHQsbWUoKSksInNhbml0aXplVGV4dCIpLEFBPUxvLEM1ZT1vKCgpPT5ydiwiZ2V0Q29tbW9uRGIiKSxGMz17fSxkZD1vKCh0LGUscik9PntGM1t0XSYmSVYud2FybihgRGlhZ3JhbSB3aXRoIGlkICR7dH0gYWxyZWFkeSByZWdpc3RlcmVkLiBPdmVyd3JpdGluZy5gKSxGM1t0XT1lLHImJmk3KHQsciksTlYodCxlLnN0eWxlcyksZS5pbmplY3RVdGlscz8uKElWLFM1ZSxtZSxmZCxBQSxDNWUoKSwoKT0+e30pfSwicmVnaXN0ZXJEaWFncmFtIiksaXY9byh0PT57aWYodCBpbiBGMylyZXR1cm4gRjNbdF07dGhyb3cgbmV3IENBKHQpfSwiZ2V0RGlhZ3JhbSIpLENBPWNsYXNzIGV4dGVuZHMgRXJyb3J7c3RhdGlje28odGhpcywiRGlhZ3JhbU5vdEZvdW5kRXJyb3IiKX1jb25zdHJ1Y3RvcihlKXtzdXBlcihgRGlhZ3JhbSAke2V9IG5vdCBmb3VuZC5gKX19fSk7dmFyIG1sLHdoLGlzLHBsLGFjLGF2LF9BLERBLHozLEczLE9WLEE1ZSxfNWUsRDVlLEw1ZSxSNWUsTjVlLE01ZSxJNWUsTzVlLFA1ZSxCNWUsRjVlLCQ1ZSx6NWUsRzVlLFY1ZSxVNWUsUFYsSDVlLFc1ZSxCVixxNWUsWTVlLFg1ZSxqNWUsa2gsSzVlLFE1ZSxaNWUsSjVlLGVUZSxzdixMQT1OKCgpPT57InVzZSBzdHJpY3QiO0d0KCk7cHIoKTtjaSgpO21sPVtdLHdoPVsiIl0saXM9Imdsb2JhbCIscGw9IiIsYWM9W3thbGlhczoiZ2xvYmFsIixsYWJlbDp7dGV4dDoiZ2xvYmFsIn0sdHlwZTp7dGV4dDoiZ2xvYmFsIn0sdGFnczpudWxsLGxpbms6bnVsbCxwYXJlbnRCb3VuZGFyeToiIn1dLGF2PVtdLF9BPSIiLERBPSExLHozPTQsRzM9MixBNWU9byhmdW5jdGlvbigpe3JldHVybiBPVn0sImdldEM0VHlwZSIpLF81ZT1vKGZ1bmN0aW9uKHQpe09WPXdyKHQsbWUoKSl9LCJzZXRDNFR5cGUiKSxENWU9byhmdW5jdGlvbih0LGUscixuLGksYSxzLGwsdSl7aWYodD09bnVsbHx8ZT09PXZvaWQgMHx8ZT09PW51bGx8fHI9PT12b2lkIDB8fHI9PT1udWxsfHxuPT09dm9pZCAwfHxuPT09bnVsbClyZXR1cm47bGV0IGg9e30sZj1hdi5maW5kKGQ9PmQuZnJvbT09PWUmJmQudG89PT1yKTtpZihmP2g9Zjphdi5wdXNoKGgpLGgudHlwZT10LGguZnJvbT1lLGgudG89cixoLmxhYmVsPXt0ZXh0Om59LGk9PW51bGwpaC50ZWNobj17dGV4dDoiIn07ZWxzZSBpZih0eXBlb2YgaT09Im9iamVjdCIpe2xldFtkLHBdPU9iamVjdC5lbnRyaWVzKGkpWzBdO2hbZF09e3RleHQ6cH19ZWxzZSBoLnRlY2huPXt0ZXh0Oml9O2lmKGE9PW51bGwpaC5kZXNjcj17dGV4dDoiIn07ZWxzZSBpZih0eXBlb2YgYT09Im9iamVjdCIpe2xldFtkLHBdPU9iamVjdC5lbnRyaWVzKGEpWzBdO2hbZF09e3RleHQ6cH19ZWxzZSBoLmRlc2NyPXt0ZXh0OmF9O2lmKHR5cGVvZiBzPT0ib2JqZWN0Iil7bGV0W2QscF09T2JqZWN0LmVudHJpZXMocylbMF07aFtkXT1wfWVsc2UgaC5zcHJpdGU9cztpZih0eXBlb2YgbD09Im9iamVjdCIpe2xldFtkLHBdPU9iamVjdC5lbnRyaWVzKGwpWzBdO2hbZF09cH1lbHNlIGgudGFncz1sO2lmKHR5cGVvZiB1PT0ib2JqZWN0Iil7bGV0W2QscF09T2JqZWN0LmVudHJpZXModSlbMF07aFtkXT1wfWVsc2UgaC5saW5rPXU7aC53cmFwPWtoKCl9LCJhZGRSZWwiKSxMNWU9byhmdW5jdGlvbih0LGUscixuLGksYSxzKXtpZihlPT09bnVsbHx8cj09PW51bGwpcmV0dXJuO2xldCBsPXt9LHU9bWwuZmluZChoPT5oLmFsaWFzPT09ZSk7aWYodSYmZT09PXUuYWxpYXM/bD11OihsLmFsaWFzPWUsbWwucHVzaChsKSkscj09bnVsbD9sLmxhYmVsPXt0ZXh0OiIifTpsLmxhYmVsPXt0ZXh0OnJ9LG49PW51bGwpbC5kZXNjcj17dGV4dDoiIn07ZWxzZSBpZih0eXBlb2Ygbj09Im9iamVjdCIpe2xldFtoLGZdPU9iamVjdC5lbnRyaWVzKG4pWzBdO2xbaF09e3RleHQ6Zn19ZWxzZSBsLmRlc2NyPXt0ZXh0Om59O2lmKHR5cGVvZiBpPT0ib2JqZWN0Iil7bGV0W2gsZl09T2JqZWN0LmVudHJpZXMoaSlbMF07bFtoXT1mfWVsc2UgbC5zcHJpdGU9aTtpZih0eXBlb2YgYT09Im9iamVjdCIpe2xldFtoLGZdPU9iamVjdC5lbnRyaWVzKGEpWzBdO2xbaF09Zn1lbHNlIGwudGFncz1hO2lmKHR5cGVvZiBzPT0ib2JqZWN0Iil7bGV0W2gsZl09T2JqZWN0LmVudHJpZXMocylbMF07bFtoXT1mfWVsc2UgbC5saW5rPXM7bC50eXBlQzRTaGFwZT17dGV4dDp0fSxsLnBhcmVudEJvdW5kYXJ5PWlzLGwud3JhcD1raCgpfSwiYWRkUGVyc29uT3JTeXN0ZW0iKSxSNWU9byhmdW5jdGlvbih0LGUscixuLGksYSxzLGwpe2lmKGU9PT1udWxsfHxyPT09bnVsbClyZXR1cm47bGV0IHU9e30saD1tbC5maW5kKGY9PmYuYWxpYXM9PT1lKTtpZihoJiZlPT09aC5hbGlhcz91PWg6KHUuYWxpYXM9ZSxtbC5wdXNoKHUpKSxyPT1udWxsP3UubGFiZWw9e3RleHQ6IiJ9OnUubGFiZWw9e3RleHQ6cn0sbj09bnVsbCl1LnRlY2huPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiBuPT0ib2JqZWN0Iil7bGV0W2YsZF09T2JqZWN0LmVudHJpZXMobilbMF07dVtmXT17dGV4dDpkfX1lbHNlIHUudGVjaG49e3RleHQ6bn07aWYoaT09bnVsbCl1LmRlc2NyPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiBpPT0ib2JqZWN0Iil7bGV0W2YsZF09T2JqZWN0LmVudHJpZXMoaSlbMF07dVtmXT17dGV4dDpkfX1lbHNlIHUuZGVzY3I9e3RleHQ6aX07aWYodHlwZW9mIGE9PSJvYmplY3QiKXtsZXRbZixkXT1PYmplY3QuZW50cmllcyhhKVswXTt1W2ZdPWR9ZWxzZSB1LnNwcml0ZT1hO2lmKHR5cGVvZiBzPT0ib2JqZWN0Iil7bGV0W2YsZF09T2JqZWN0LmVudHJpZXMocylbMF07dVtmXT1kfWVsc2UgdS50YWdzPXM7aWYodHlwZW9mIGw9PSJvYmplY3QiKXtsZXRbZixkXT1PYmplY3QuZW50cmllcyhsKVswXTt1W2ZdPWR9ZWxzZSB1Lmxpbms9bDt1LndyYXA9a2goKSx1LnR5cGVDNFNoYXBlPXt0ZXh0OnR9LHUucGFyZW50Qm91bmRhcnk9aXN9LCJhZGRDb250YWluZXIiKSxONWU9byhmdW5jdGlvbih0LGUscixuLGksYSxzLGwpe2lmKGU9PT1udWxsfHxyPT09bnVsbClyZXR1cm47bGV0IHU9e30saD1tbC5maW5kKGY9PmYuYWxpYXM9PT1lKTtpZihoJiZlPT09aC5hbGlhcz91PWg6KHUuYWxpYXM9ZSxtbC5wdXNoKHUpKSxyPT1udWxsP3UubGFiZWw9e3RleHQ6IiJ9OnUubGFiZWw9e3RleHQ6cn0sbj09bnVsbCl1LnRlY2huPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiBuPT0ib2JqZWN0Iil7bGV0W2YsZF09T2JqZWN0LmVudHJpZXMobilbMF07dVtmXT17dGV4dDpkfX1lbHNlIHUudGVjaG49e3RleHQ6bn07aWYoaT09bnVsbCl1LmRlc2NyPXt0ZXh0OiIifTtlbHNlIGlmKHR5cGVvZiBpPT0ib2JqZWN0Iil7bGV0W2YsZF09T2JqZWN0LmVudHJpZXMoaSlbMF07dVtmXT17dGV4dDpkfX1lbHNlIHUuZGVzY3I9e3RleHQ6aX07aWYodHlwZW9mIGE9PSJvYmplY3QiKXtsZXRbZixkXT1PYmplY3QuZW50cmllcyhhKVswXTt1W2ZdPWR9ZWxzZSB1LnNwcml0ZT1hO2lmKHR5cGVvZiBzPT0ib2JqZWN0Iil7bGV0W2YsZF09T2JqZWN0LmVudHJpZXMocylbMF07dVtmXT1kfWVsc2UgdS50YWdzPXM7aWYodHlwZW9mIGw9PSJvYmplY3QiKXtsZXRbZixkXT1PYmplY3QuZW50cmllcyhsKVswXTt1W2ZdPWR9ZWxzZSB1Lmxpbms9bDt1LndyYXA9a2goKSx1LnR5cGVDNFNoYXBlPXt0ZXh0OnR9LHUucGFyZW50Qm91bmRhcnk9aXN9LCJhZGRDb21wb25lbnQiKSxNNWU9byhmdW5jdGlvbih0LGUscixuLGkpe2lmKHQ9PT1udWxsfHxlPT09bnVsbClyZXR1cm47bGV0IGE9e30scz1hYy5maW5kKGw9PmwuYWxpYXM9PT10KTtpZihzJiZ0PT09cy5hbGlhcz9hPXM6KGEuYWxpYXM9dCxhYy5wdXNoKGEpKSxlPT1udWxsP2EubGFiZWw9e3RleHQ6IiJ9OmEubGFiZWw9e3RleHQ6ZX0scj09bnVsbClhLnR5cGU9e3RleHQ6InN5c3RlbSJ9O2Vsc2UgaWYodHlwZW9mIHI9PSJvYmplY3QiKXtsZXRbbCx1XT1PYmplY3QuZW50cmllcyhyKVswXTthW2xdPXt0ZXh0OnV9fWVsc2UgYS50eXBlPXt0ZXh0OnJ9O2lmKHR5cGVvZiBuPT0ib2JqZWN0Iil7bGV0W2wsdV09T2JqZWN0LmVudHJpZXMobilbMF07YVtsXT11fWVsc2UgYS50YWdzPW47aWYodHlwZW9mIGk9PSJvYmplY3QiKXtsZXRbbCx1XT1PYmplY3QuZW50cmllcyhpKVswXTthW2xdPXV9ZWxzZSBhLmxpbms9aTthLnBhcmVudEJvdW5kYXJ5PWlzLGEud3JhcD1raCgpLHBsPWlzLGlzPXQsd2gucHVzaChwbCl9LCJhZGRQZXJzb25PclN5c3RlbUJvdW5kYXJ5IiksSTVlPW8oZnVuY3Rpb24odCxlLHIsbixpKXtpZih0PT09bnVsbHx8ZT09PW51bGwpcmV0dXJuO2xldCBhPXt9LHM9YWMuZmluZChsPT5sLmFsaWFzPT09dCk7aWYocyYmdD09PXMuYWxpYXM/YT1zOihhLmFsaWFzPXQsYWMucHVzaChhKSksZT09bnVsbD9hLmxhYmVsPXt0ZXh0OiIifTphLmxhYmVsPXt0ZXh0OmV9LHI9PW51bGwpYS50eXBlPXt0ZXh0OiJjb250YWluZXIifTtlbHNlIGlmKHR5cGVvZiByPT0ib2JqZWN0Iil7bGV0W2wsdV09T2JqZWN0LmVudHJpZXMocilbMF07YVtsXT17dGV4dDp1fX1lbHNlIGEudHlwZT17dGV4dDpyfTtpZih0eXBlb2Ygbj09Im9iamVjdCIpe2xldFtsLHVdPU9iamVjdC5lbnRyaWVzKG4pWzBdO2FbbF09dX1lbHNlIGEudGFncz1uO2lmKHR5cGVvZiBpPT0ib2JqZWN0Iil7bGV0W2wsdV09T2JqZWN0LmVudHJpZXMoaSlbMF07YVtsXT11fWVsc2UgYS5saW5rPWk7YS5wYXJlbnRCb3VuZGFyeT1pcyxhLndyYXA9a2goKSxwbD1pcyxpcz10LHdoLnB1c2gocGwpfSwiYWRkQ29udGFpbmVyQm91bmRhcnkiKSxPNWU9byhmdW5jdGlvbih0LGUscixuLGksYSxzLGwpe2lmKGU9PT1udWxsfHxyPT09bnVsbClyZXR1cm47bGV0IHU9e30saD1hYy5maW5kKGY9PmYuYWxpYXM9PT1lKTtpZihoJiZlPT09aC5hbGlhcz91PWg6KHUuYWxpYXM9ZSxhYy5wdXNoKHUpKSxyPT1udWxsP3UubGFiZWw9e3RleHQ6IiJ9OnUubGFiZWw9e3RleHQ6cn0sbj09bnVsbCl1LnR5cGU9e3RleHQ6Im5vZGUifTtlbHNlIGlmKHR5cGVvZiBuPT0ib2JqZWN0Iil7bGV0W2YsZF09T2JqZWN0LmVudHJpZXMobilbMF07dVtmXT17dGV4dDpkfX1lbHNlIHUudHlwZT17dGV4dDpufTtpZihpPT1udWxsKXUuZGVzY3I9e3RleHQ6IiJ9O2Vsc2UgaWYodHlwZW9mIGk9PSJvYmplY3QiKXtsZXRbZixkXT1PYmplY3QuZW50cmllcyhpKVswXTt1W2ZdPXt0ZXh0OmR9fWVsc2UgdS5kZXNjcj17dGV4dDppfTtpZih0eXBlb2Ygcz09Im9iamVjdCIpe2xldFtmLGRdPU9iamVjdC5lbnRyaWVzKHMpWzBdO3VbZl09ZH1lbHNlIHUudGFncz1zO2lmKHR5cGVvZiBsPT0ib2JqZWN0Iil7bGV0W2YsZF09T2JqZWN0LmVudHJpZXMobClbMF07dVtmXT1kfWVsc2UgdS5saW5rPWw7dS5ub2RlVHlwZT10LHUucGFyZW50Qm91bmRhcnk9aXMsdS53cmFwPWtoKCkscGw9aXMsaXM9ZSx3aC5wdXNoKHBsKX0sImFkZERlcGxveW1lbnROb2RlIiksUDVlPW8oZnVuY3Rpb24oKXtpcz1wbCx3aC5wb3AoKSxwbD13aC5wb3AoKSx3aC5wdXNoKHBsKX0sInBvcEJvdW5kYXJ5UGFyc2VTdGFjayIpLEI1ZT1vKGZ1bmN0aW9uKHQsZSxyLG4saSxhLHMsbCx1LGgsZil7bGV0IGQ9bWwuZmluZChwPT5wLmFsaWFzPT09ZSk7aWYoIShkPT09dm9pZCAwJiYoZD1hYy5maW5kKHA9PnAuYWxpYXM9PT1lKSxkPT09dm9pZCAwKSkpe2lmKHIhPW51bGwpaWYodHlwZW9mIHI9PSJvYmplY3QiKXtsZXRbcCxtXT1PYmplY3QuZW50cmllcyhyKVswXTtkW3BdPW19ZWxzZSBkLmJnQ29sb3I9cjtpZihuIT1udWxsKWlmKHR5cGVvZiBuPT0ib2JqZWN0Iil7bGV0W3AsbV09T2JqZWN0LmVudHJpZXMobilbMF07ZFtwXT1tfWVsc2UgZC5mb250Q29sb3I9bjtpZihpIT1udWxsKWlmKHR5cGVvZiBpPT0ib2JqZWN0Iil7bGV0W3AsbV09T2JqZWN0LmVudHJpZXMoaSlbMF07ZFtwXT1tfWVsc2UgZC5ib3JkZXJDb2xvcj1pO2lmKGEhPW51bGwpaWYodHlwZW9mIGE9PSJvYmplY3QiKXtsZXRbcCxtXT1PYmplY3QuZW50cmllcyhhKVswXTtkW3BdPW19ZWxzZSBkLnNoYWRvd2luZz1hO2lmKHMhPW51bGwpaWYodHlwZW9mIHM9PSJvYmplY3QiKXtsZXRbcCxtXT1PYmplY3QuZW50cmllcyhzKVswXTtkW3BdPW19ZWxzZSBkLnNoYXBlPXM7aWYobCE9bnVsbClpZih0eXBlb2YgbD09Im9iamVjdCIpe2xldFtwLG1dPU9iamVjdC5lbnRyaWVzKGwpWzBdO2RbcF09bX1lbHNlIGQuc3ByaXRlPWw7aWYodSE9bnVsbClpZih0eXBlb2YgdT09Im9iamVjdCIpe2xldFtwLG1dPU9iamVjdC5lbnRyaWVzKHUpWzBdO2RbcF09bX1lbHNlIGQudGVjaG49dTtpZihoIT1udWxsKWlmKHR5cGVvZiBoPT0ib2JqZWN0Iil7bGV0W3AsbV09T2JqZWN0LmVudHJpZXMoaClbMF07ZFtwXT1tfWVsc2UgZC5sZWdlbmRUZXh0PWg7aWYoZiE9bnVsbClpZih0eXBlb2YgZj09Im9iamVjdCIpe2xldFtwLG1dPU9iamVjdC5lbnRyaWVzKGYpWzBdO2RbcF09bX1lbHNlIGQubGVnZW5kU3ByaXRlPWZ9fSwidXBkYXRlRWxTdHlsZSIpLEY1ZT1vKGZ1bmN0aW9uKHQsZSxyLG4saSxhLHMpe2xldCBsPWF2LmZpbmQodT0+dS5mcm9tPT09ZSYmdS50bz09PXIpO2lmKGwhPT12b2lkIDApe2lmKG4hPW51bGwpaWYodHlwZW9mIG49PSJvYmplY3QiKXtsZXRbdSxoXT1PYmplY3QuZW50cmllcyhuKVswXTtsW3VdPWh9ZWxzZSBsLnRleHRDb2xvcj1uO2lmKGkhPW51bGwpaWYodHlwZW9mIGk9PSJvYmplY3QiKXtsZXRbdSxoXT1PYmplY3QuZW50cmllcyhpKVswXTtsW3VdPWh9ZWxzZSBsLmxpbmVDb2xvcj1pO2lmKGEhPW51bGwpaWYodHlwZW9mIGE9PSJvYmplY3QiKXtsZXRbdSxoXT1PYmplY3QuZW50cmllcyhhKVswXTtsW3VdPXBhcnNlSW50KGgpfWVsc2UgbC5vZmZzZXRYPXBhcnNlSW50KGEpO2lmKHMhPW51bGwpaWYodHlwZW9mIHM9PSJvYmplY3QiKXtsZXRbdSxoXT1PYmplY3QuZW50cmllcyhzKVswXTtsW3VdPXBhcnNlSW50KGgpfWVsc2UgbC5vZmZzZXRZPXBhcnNlSW50KHMpfX0sInVwZGF0ZVJlbFN0eWxlIiksJDVlPW8oZnVuY3Rpb24odCxlLHIpe2xldCBuPXozLGk9RzM7aWYodHlwZW9mIGU9PSJvYmplY3QiKXtsZXQgYT1PYmplY3QudmFsdWVzKGUpWzBdO249cGFyc2VJbnQoYSl9ZWxzZSBuPXBhcnNlSW50KGUpO2lmKHR5cGVvZiByPT0ib2JqZWN0Iil7bGV0IGE9T2JqZWN0LnZhbHVlcyhyKVswXTtpPXBhcnNlSW50KGEpfWVsc2UgaT1wYXJzZUludChyKTtuPj0xJiYoejM9biksaT49MSYmKEczPWkpfSwidXBkYXRlTGF5b3V0Q29uZmlnIiksejVlPW8oZnVuY3Rpb24oKXtyZXR1cm4gejN9LCJnZXRDNFNoYXBlSW5Sb3ciKSxHNWU9byhmdW5jdGlvbigpe3JldHVybiBHM30sImdldEM0Qm91bmRhcnlJblJvdyIpLFY1ZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIGlzfSwiZ2V0Q3VycmVudEJvdW5kYXJ5UGFyc2UiKSxVNWU9byhmdW5jdGlvbigpe3JldHVybiBwbH0sImdldFBhcmVudEJvdW5kYXJ5UGFyc2UiKSxQVj1vKGZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP21sOm1sLmZpbHRlcihlPT5lLnBhcmVudEJvdW5kYXJ5PT09dCl9LCJnZXRDNFNoYXBlQXJyYXkiKSxINWU9byhmdW5jdGlvbih0KXtyZXR1cm4gbWwuZmluZChlPT5lLmFsaWFzPT09dCl9LCJnZXRDNFNoYXBlIiksVzVlPW8oZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5rZXlzKFBWKHQpKX0sImdldEM0U2hhcGVLZXlzIiksQlY9byhmdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD9hYzphYy5maWx0ZXIoZT0+ZS5wYXJlbnRCb3VuZGFyeT09PXQpfSwiZ2V0Qm91bmRhcmllcyIpLHE1ZT1CVixZNWU9byhmdW5jdGlvbigpe3JldHVybiBhdn0sImdldFJlbHMiKSxYNWU9byhmdW5jdGlvbigpe3JldHVybiBfQX0sImdldFRpdGxlIiksajVlPW8oZnVuY3Rpb24odCl7REE9dH0sInNldFdyYXAiKSxraD1vKGZ1bmN0aW9uKCl7cmV0dXJuIERBfSwiYXV0b1dyYXAiKSxLNWU9byhmdW5jdGlvbigpe21sPVtdLGFjPVt7YWxpYXM6Imdsb2JhbCIsbGFiZWw6e3RleHQ6Imdsb2JhbCJ9LHR5cGU6e3RleHQ6Imdsb2JhbCJ9LHRhZ3M6bnVsbCxsaW5rOm51bGwscGFyZW50Qm91bmRhcnk6IiJ9XSxwbD0iIixpcz0iZ2xvYmFsIix3aD1bIiJdLGF2PVtdLHdoPVsiIl0sX0E9IiIsREE9ITEsejM9NCxHMz0yfSwiY2xlYXIiKSxRNWU9e1NPTElEOjAsRE9UVEVEOjEsTk9URToyLFNPTElEX0NST1NTOjMsRE9UVEVEX0NST1NTOjQsU09MSURfT1BFTjo1LERPVFRFRF9PUEVOOjYsTE9PUF9TVEFSVDoxMCxMT09QX0VORDoxMSxBTFRfU1RBUlQ6MTIsQUxUX0VMU0U6MTMsQUxUX0VORDoxNCxPUFRfU1RBUlQ6MTUsT1BUX0VORDoxNixBQ1RJVkVfU1RBUlQ6MTcsQUNUSVZFX0VORDoxOCxQQVJfU1RBUlQ6MTksUEFSX0FORDoyMCxQQVJfRU5EOjIxLFJFQ1RfU1RBUlQ6MjIsUkVDVF9FTkQ6MjMsU09MSURfUE9JTlQ6MjQsRE9UVEVEX1BPSU5UOjI1fSxaNWU9e0ZJTExFRDowLE9QRU46MX0sSjVlPXtMRUZUT0Y6MCxSSUdIVE9GOjEsT1ZFUjoyfSxlVGU9byhmdW5jdGlvbih0KXtfQT13cih0LG1lKCkpfSwic2V0VGl0bGUiKSxzdj17YWRkUGVyc29uT3JTeXN0ZW06TDVlLGFkZFBlcnNvbk9yU3lzdGVtQm91bmRhcnk6TTVlLGFkZENvbnRhaW5lcjpSNWUsYWRkQ29udGFpbmVyQm91bmRhcnk6STVlLGFkZENvbXBvbmVudDpONWUsYWRkRGVwbG95bWVudE5vZGU6TzVlLHBvcEJvdW5kYXJ5UGFyc2VTdGFjazpQNWUsYWRkUmVsOkQ1ZSx1cGRhdGVFbFN0eWxlOkI1ZSx1cGRhdGVSZWxTdHlsZTpGNWUsdXBkYXRlTGF5b3V0Q29uZmlnOiQ1ZSxhdXRvV3JhcDpraCxzZXRXcmFwOmo1ZSxnZXRDNFNoYXBlQXJyYXk6UFYsZ2V0QzRTaGFwZTpINWUsZ2V0QzRTaGFwZUtleXM6VzVlLGdldEJvdW5kYXJpZXM6QlYsZ2V0Qm91bmRhcnlzOnE1ZSxnZXRDdXJyZW50Qm91bmRhcnlQYXJzZTpWNWUsZ2V0UGFyZW50Qm91bmRhcnlQYXJzZTpVNWUsZ2V0UmVsczpZNWUsZ2V0VGl0bGU6WDVlLGdldEM0VHlwZTpBNWUsZ2V0QzRTaGFwZUluUm93Ono1ZSxnZXRDNEJvdW5kYXJ5SW5Sb3c6RzVlLHNldEFjY1RpdGxlOkFyLGdldEFjY1RpdGxlOkRyLGdldEFjY0Rlc2NyaXB0aW9uOlJyLHNldEFjY0Rlc2NyaXB0aW9uOkxyLGdldENvbmZpZzpvKCgpPT5tZSgpLmM0LCJnZXRDb25maWciKSxjbGVhcjpLNWUsTElORVRZUEU6UTVlLEFSUk9XVFlQRTpaNWUsUExBQ0VNRU5UOko1ZSxzZXRUaXRsZTplVGUsc2V0QzRUeXBlOl81ZX19KTtmdW5jdGlvbiBwZCh0LGUpe3JldHVybiB0PT1udWxsfHxlPT1udWxsP05hTjp0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn12YXIgUkE9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKHBkLCJhc2NlbmRpbmciKX0pO2Z1bmN0aW9uIE5BKHQsZSl7cmV0dXJuIHQ9PW51bGx8fGU9PW51bGw/TmFOOmU8dD8tMTplPnQ/MTplPj10PzA6TmFOfXZhciBGVj1OKCgpPT57InVzZSBzdHJpY3QiO28oTkEsImRlc2NlbmRpbmciKX0pO2Z1bmN0aW9uIG1kKHQpe2xldCBlLHIsbjt0Lmxlbmd0aCE9PTI/KGU9cGQscj1vKChsLHUpPT5wZCh0KGwpLHUpLCJjb21wYXJlMiIpLG49bygobCx1KT0+dChsKS11LCJkZWx0YSIpKTooZT10PT09cGR8fHQ9PT1OQT90OnRUZSxyPXQsbj10KTtmdW5jdGlvbiBpKGwsdSxoPTAsZj1sLmxlbmd0aCl7aWYoaDxmKXtpZihlKHUsdSkhPT0wKXJldHVybiBmO2Rve2xldCBkPWgrZj4+PjE7cihsW2RdLHUpPDA/aD1kKzE6Zj1kfXdoaWxlKGg8Zil9cmV0dXJuIGh9byhpLCJsZWZ0Iik7ZnVuY3Rpb24gYShsLHUsaD0wLGY9bC5sZW5ndGgpe2lmKGg8Zil7aWYoZSh1LHUpIT09MClyZXR1cm4gZjtkb3tsZXQgZD1oK2Y+Pj4xO3IobFtkXSx1KTw9MD9oPWQrMTpmPWR9d2hpbGUoaDxmKX1yZXR1cm4gaH1vKGEsInJpZ2h0Iik7ZnVuY3Rpb24gcyhsLHUsaD0wLGY9bC5sZW5ndGgpe2xldCBkPWkobCx1LGgsZi0xKTtyZXR1cm4gZD5oJiZuKGxbZC0xXSx1KT4tbihsW2RdLHUpP2QtMTpkfXJldHVybiBvKHMsImNlbnRlciIpLHtsZWZ0OmksY2VudGVyOnMscmlnaHQ6YX19ZnVuY3Rpb24gdFRlKCl7cmV0dXJuIDB9dmFyIE1BPU4oKCk9PnsidXNlIHN0cmljdCI7UkEoKTtGVigpO28obWQsImJpc2VjdG9yIik7byh0VGUsInplcm8iKX0pO2Z1bmN0aW9uIElBKHQpe3JldHVybiB0PT09bnVsbD9OYU46K3R9dmFyICRWPU4oKCk9PnsidXNlIHN0cmljdCI7byhJQSwibnVtYmVyIil9KTt2YXIgelYsR1YsclRlLG5UZSxPQSxWVj1OKCgpPT57InVzZSBzdHJpY3QiO1JBKCk7TUEoKTskVigpO3pWPW1kKHBkKSxHVj16Vi5yaWdodCxyVGU9elYubGVmdCxuVGU9bWQoSUEpLmNlbnRlcixPQT1HVn0pO2Z1bmN0aW9uIFVWKHtfaW50ZXJuOnQsX2tleTplfSxyKXtsZXQgbj1lKHIpO3JldHVybiB0LmhhcyhuKT90LmdldChuKTpyfWZ1bmN0aW9uIGlUZSh7X2ludGVybjp0LF9rZXk6ZX0scil7bGV0IG49ZShyKTtyZXR1cm4gdC5oYXMobik/dC5nZXQobik6KHQuc2V0KG4scikscil9ZnVuY3Rpb24gYVRlKHtfaW50ZXJuOnQsX2tleTplfSxyKXtsZXQgbj1lKHIpO3JldHVybiB0LmhhcyhuKSYmKHI9dC5nZXQobiksdC5kZWxldGUobikpLHJ9ZnVuY3Rpb24gc1RlKHQpe3JldHVybiB0IT09bnVsbCYmdHlwZW9mIHQ9PSJvYmplY3QiP3QudmFsdWVPZigpOnR9dmFyIEMwLEhWPU4oKCk9PnsidXNlIHN0cmljdCI7QzA9Y2xhc3MgZXh0ZW5kcyBNYXB7c3RhdGlje28odGhpcywiSW50ZXJuTWFwIil9Y29uc3RydWN0b3IoZSxyPXNUZSl7aWYoc3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLHtfaW50ZXJuOnt2YWx1ZTpuZXcgTWFwfSxfa2V5Ont2YWx1ZTpyfX0pLGUhPW51bGwpZm9yKGxldFtuLGldb2YgZSl0aGlzLnNldChuLGkpfWdldChlKXtyZXR1cm4gc3VwZXIuZ2V0KFVWKHRoaXMsZSkpfWhhcyhlKXtyZXR1cm4gc3VwZXIuaGFzKFVWKHRoaXMsZSkpfXNldChlLHIpe3JldHVybiBzdXBlci5zZXQoaVRlKHRoaXMsZSkscil9ZGVsZXRlKGUpe3JldHVybiBzdXBlci5kZWxldGUoYVRlKHRoaXMsZSkpfX07byhVViwiaW50ZXJuX2dldCIpO28oaVRlLCJpbnRlcm5fc2V0Iik7byhhVGUsImludGVybl9kZWxldGUiKTtvKHNUZSwia2V5b2YiKX0pO2Z1bmN0aW9uIFYzKHQsZSxyKXtsZXQgbj0oZS10KS9NYXRoLm1heCgwLHIpLGk9TWF0aC5mbG9vcihNYXRoLmxvZzEwKG4pKSxhPW4vTWF0aC5wb3coMTAsaSkscz1hPj1vVGU/MTA6YT49bFRlPzU6YT49Y1RlPzI6MSxsLHUsaDtyZXR1cm4gaTwwPyhoPU1hdGgucG93KDEwLC1pKS9zLGw9TWF0aC5yb3VuZCh0KmgpLHU9TWF0aC5yb3VuZChlKmgpLGwvaDx0JiYrK2wsdS9oPmUmJi0tdSxoPS1oKTooaD1NYXRoLnBvdygxMCxpKSpzLGw9TWF0aC5yb3VuZCh0L2gpLHU9TWF0aC5yb3VuZChlL2gpLGwqaDx0JiYrK2wsdSpoPmUmJi0tdSksdTxsJiYuNTw9ciYmcjwyP1YzKHQsZSxyKjIpOltsLHUsaF19ZnVuY3Rpb24gVTModCxlLHIpe2lmKGU9K2UsdD0rdCxyPStyLCEocj4wKSlyZXR1cm5bXTtpZih0PT09ZSlyZXR1cm5bdF07bGV0IG49ZTx0LFtpLGEsc109bj9WMyhlLHQscik6VjModCxlLHIpO2lmKCEoYT49aSkpcmV0dXJuW107bGV0IGw9YS1pKzEsdT1uZXcgQXJyYXkobCk7aWYobilpZihzPDApZm9yKGxldCBoPTA7aDxsOysraCl1W2hdPShhLWgpLy1zO2Vsc2UgZm9yKGxldCBoPTA7aDxsOysraCl1W2hdPShhLWgpKnM7ZWxzZSBpZihzPDApZm9yKGxldCBoPTA7aDxsOysraCl1W2hdPShpK2gpLy1zO2Vsc2UgZm9yKGxldCBoPTA7aDxsOysraCl1W2hdPShpK2gpKnM7cmV0dXJuIHV9ZnVuY3Rpb24gb3YodCxlLHIpe3JldHVybiBlPStlLHQ9K3Qscj0rcixWMyh0LGUscilbMl19ZnVuY3Rpb24gQTAodCxlLHIpe2U9K2UsdD0rdCxyPStyO2xldCBuPWU8dCxpPW4/b3YoZSx0LHIpOm92KHQsZSxyKTtyZXR1cm4obj8tMToxKSooaTwwPzEvLWk6aSl9dmFyIG9UZSxsVGUsY1RlLFdWPU4oKCk9PnsidXNlIHN0cmljdCI7b1RlPU1hdGguc3FydCg1MCksbFRlPU1hdGguc3FydCgxMCksY1RlPU1hdGguc3FydCgyKTtvKFYzLCJ0aWNrU3BlYyIpO28oVTMsInRpY2tzIik7byhvdiwidGlja0luY3JlbWVudCIpO28oQTAsInRpY2tTdGVwIil9KTtmdW5jdGlvbiBIMyh0LGUpe2xldCByO2lmKGU9PT12b2lkIDApZm9yKGxldCBuIG9mIHQpbiE9bnVsbCYmKHI8bnx8cj09PXZvaWQgMCYmbj49bikmJihyPW4pO2Vsc2V7bGV0IG49LTE7Zm9yKGxldCBpIG9mIHQpKGk9ZShpLCsrbix0KSkhPW51bGwmJihyPGl8fHI9PT12b2lkIDAmJmk+PWkpJiYocj1pKX1yZXR1cm4gcn12YXIgcVY9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKEgzLCJtYXgiKX0pO2Z1bmN0aW9uIFczKHQsZSl7bGV0IHI7aWYoZT09PXZvaWQgMClmb3IobGV0IG4gb2YgdCluIT1udWxsJiYocj5ufHxyPT09dm9pZCAwJiZuPj1uKSYmKHI9bik7ZWxzZXtsZXQgbj0tMTtmb3IobGV0IGkgb2YgdCkoaT1lKGksKytuLHQpKSE9bnVsbCYmKHI+aXx8cj09PXZvaWQgMCYmaT49aSkmJihyPWkpfXJldHVybiByfXZhciBZVj1OKCgpPT57InVzZSBzdHJpY3QiO28oVzMsIm1pbiIpfSk7ZnVuY3Rpb24gcTModCxlLHIpe3Q9K3QsZT0rZSxyPShpPWFyZ3VtZW50cy5sZW5ndGgpPDI/KGU9dCx0PTAsMSk6aTwzPzE6K3I7Zm9yKHZhciBuPS0xLGk9TWF0aC5tYXgoMCxNYXRoLmNlaWwoKGUtdCkvcikpfDAsYT1uZXcgQXJyYXkoaSk7KytuPGk7KWFbbl09dCtuKnI7cmV0dXJuIGF9dmFyIFhWPU4oKCk9PnsidXNlIHN0cmljdCI7byhxMywicmFuZ2UiKX0pO3ZhciBFaD1OKCgpPT57InVzZSBzdHJpY3QiO1ZWKCk7TUEoKTtxVigpO1lWKCk7WFYoKTtXVigpO0hWKCl9KTtmdW5jdGlvbiBQQSh0KXtyZXR1cm4gdH12YXIgalY9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKFBBLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiB1VGUodCl7cmV0dXJuInRyYW5zbGF0ZSgiK3QrIiwwKSJ9ZnVuY3Rpb24gaFRlKHQpe3JldHVybiJ0cmFuc2xhdGUoMCwiK3QrIikifWZ1bmN0aW9uIGZUZSh0KXtyZXR1cm4gZT0+K3QoZSl9ZnVuY3Rpb24gZFRlKHQsZSl7cmV0dXJuIGU9TWF0aC5tYXgoMCx0LmJhbmR3aWR0aCgpLWUqMikvMix0LnJvdW5kKCkmJihlPU1hdGgucm91bmQoZSkpLHI9Pit0KHIpK2V9ZnVuY3Rpb24gcFRlKCl7cmV0dXJuIXRoaXMuX19heGlzfWZ1bmN0aW9uIFFWKHQsZSl7dmFyIHI9W10sbj1udWxsLGk9bnVsbCxhPTYscz02LGw9Myx1PXR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbz4xPzA6LjUsaD10PT09WDN8fHQ9PT1ZMz8tMToxLGY9dD09PVkzfHx0PT09QkE/IngiOiJ5IixkPXQ9PT1YM3x8dD09PUZBP3VUZTpoVGU7ZnVuY3Rpb24gcChtKXt2YXIgZz1uPz8oZS50aWNrcz9lLnRpY2tzLmFwcGx5KGUscik6ZS5kb21haW4oKSkseT1pPz8oZS50aWNrRm9ybWF0P2UudGlja0Zvcm1hdC5hcHBseShlLHIpOlBBKSx2PU1hdGgubWF4KGEsMCkrbCx4PWUucmFuZ2UoKSxiPSt4WzBdK3UsVD0reFt4Lmxlbmd0aC0xXSt1LFM9KGUuYmFuZHdpZHRoP2RUZTpmVGUpKGUuY29weSgpLHUpLHc9bS5zZWxlY3Rpb24/bS5zZWxlY3Rpb24oKTptLEU9dy5zZWxlY3RBbGwoIi5kb21haW4iKS5kYXRhKFtudWxsXSksXz13LnNlbGVjdEFsbCgiLnRpY2siKS5kYXRhKGcsZSkub3JkZXIoKSxDPV8uZXhpdCgpLEQ9Xy5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidGljayIpLE89Xy5zZWxlY3QoImxpbmUiKSxSPV8uc2VsZWN0KCJ0ZXh0Iik7RT1FLm1lcmdlKEUuZW50ZXIoKS5pbnNlcnQoInBhdGgiLCIudGljayIpLmF0dHIoImNsYXNzIiwiZG9tYWluIikuYXR0cigic3Ryb2tlIiwiY3VycmVudENvbG9yIikpLF89Xy5tZXJnZShEKSxPPU8ubWVyZ2UoRC5hcHBlbmQoImxpbmUiKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKS5hdHRyKGYrIjIiLGgqYSkpLFI9Ui5tZXJnZShELmFwcGVuZCgidGV4dCIpLmF0dHIoImZpbGwiLCJjdXJyZW50Q29sb3IiKS5hdHRyKGYsaCp2KS5hdHRyKCJkeSIsdD09PVgzPyIwZW0iOnQ9PT1GQT8iMC43MWVtIjoiMC4zMmVtIikpLG0hPT13JiYoRT1FLnRyYW5zaXRpb24obSksXz1fLnRyYW5zaXRpb24obSksTz1PLnRyYW5zaXRpb24obSksUj1SLnRyYW5zaXRpb24obSksQz1DLnRyYW5zaXRpb24obSkuYXR0cigib3BhY2l0eSIsS1YpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oayl7cmV0dXJuIGlzRmluaXRlKGs9UyhrKSk/ZChrK3UpOnRoaXMuZ2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iKX0pLEQuYXR0cigib3BhY2l0eSIsS1YpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oayl7dmFyIEw9dGhpcy5wYXJlbnROb2RlLl9fYXhpcztyZXR1cm4gZCgoTCYmaXNGaW5pdGUoTD1MKGspKT9MOlMoaykpK3UpfSkpLEMucmVtb3ZlKCksRS5hdHRyKCJkIix0PT09WTN8fHQ9PT1CQT9zPyJNIitoKnMrIiwiK2IrIkgiK3UrIlYiK1QrIkgiK2gqczoiTSIrdSsiLCIrYisiViIrVDpzPyJNIitiKyIsIitoKnMrIlYiK3UrIkgiK1QrIlYiK2gqczoiTSIrYisiLCIrdSsiSCIrVCksXy5hdHRyKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGspe3JldHVybiBkKFMoaykrdSl9KSxPLmF0dHIoZisiMiIsaCphKSxSLmF0dHIoZixoKnYpLnRleHQoeSksdy5maWx0ZXIocFRlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImZvbnQtc2l6ZSIsMTApLmF0dHIoImZvbnQtZmFtaWx5Iiwic2Fucy1zZXJpZiIpLmF0dHIoInRleHQtYW5jaG9yIix0PT09QkE/InN0YXJ0Ijp0PT09WTM/ImVuZCI6Im1pZGRsZSIpLHcuZWFjaChmdW5jdGlvbigpe3RoaXMuX19heGlzPVN9KX1yZXR1cm4gbyhwLCJheGlzIikscC5zY2FsZT1mdW5jdGlvbihtKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1tLHApOmV9LHAudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gcj1BcnJheS5mcm9tKGFyZ3VtZW50cykscH0scC50aWNrQXJndW1lbnRzPWZ1bmN0aW9uKG0pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW09PW51bGw/W106QXJyYXkuZnJvbShtKSxwKTpyLnNsaWNlKCl9LHAudGlja1ZhbHVlcz1mdW5jdGlvbihtKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1tPT1udWxsP251bGw6QXJyYXkuZnJvbShtKSxwKTpuJiZuLnNsaWNlKCl9LHAudGlja0Zvcm1hdD1mdW5jdGlvbihtKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1tLHApOml9LHAudGlja1NpemU9ZnVuY3Rpb24obSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9cz0rbSxwKTphfSxwLnRpY2tTaXplSW5uZXI9ZnVuY3Rpb24obSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9K20scCk6YX0scC50aWNrU2l6ZU91dGVyPWZ1bmN0aW9uKG0pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSttLHApOnN9LHAudGlja1BhZGRpbmc9ZnVuY3Rpb24obSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9K20scCk6bH0scC5vZmZzZXQ9ZnVuY3Rpb24obSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9K20scCk6dX0scH1mdW5jdGlvbiAkQSh0KXtyZXR1cm4gUVYoWDMsdCl9ZnVuY3Rpb24gekEodCl7cmV0dXJuIFFWKEZBLHQpfXZhciBYMyxCQSxGQSxZMyxLVixaVj1OKCgpPT57InVzZSBzdHJpY3QiO2pWKCk7WDM9MSxCQT0yLEZBPTMsWTM9NCxLVj0xZS02O28odVRlLCJ0cmFuc2xhdGVYIik7byhoVGUsInRyYW5zbGF0ZVkiKTtvKGZUZSwibnVtYmVyIik7byhkVGUsImNlbnRlciIpO28ocFRlLCJlbnRlcmluZyIpO28oUVYsImF4aXMiKTtvKCRBLCJheGlzVG9wIik7byh6QSwiYXhpc0JvdHRvbSIpfSk7dmFyIEpWPU4oKCk9PnsidXNlIHN0cmljdCI7WlYoKX0pO2Z1bmN0aW9uIHRVKCl7Zm9yKHZhciB0PTAsZT1hcmd1bWVudHMubGVuZ3RoLHI9e30sbjt0PGU7Kyt0KXtpZighKG49YXJndW1lbnRzW3RdKyIiKXx8biBpbiByfHwvW1xzLl0vLnRlc3QobikpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrbik7cltuXT1bXX1yZXR1cm4gbmV3IGozKHIpfWZ1bmN0aW9uIGozKHQpe3RoaXMuXz10fWZ1bmN0aW9uIGdUZSh0LGUpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocil7dmFyIG49IiIsaT1yLmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj1yLnNsaWNlKGkrMSkscj1yLnNsaWNlKDAsaSkpLHImJiFlLmhhc093blByb3BlcnR5KHIpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3IpO3JldHVybnt0eXBlOnIsbmFtZTpufX0pfWZ1bmN0aW9uIHlUZSh0LGUpe2Zvcih2YXIgcj0wLG49dC5sZW5ndGgsaTtyPG47KytyKWlmKChpPXRbcl0pLm5hbWU9PT1lKXJldHVybiBpLnZhbHVlfWZ1bmN0aW9uIGVVKHQsZSxyKXtmb3IodmFyIG49MCxpPXQubGVuZ3RoO248aTsrK24paWYodFtuXS5uYW1lPT09ZSl7dFtuXT1tVGUsdD10LnNsaWNlKDAsbikuY29uY2F0KHQuc2xpY2UobisxKSk7YnJlYWt9cmV0dXJuIHIhPW51bGwmJnQucHVzaCh7bmFtZTplLHZhbHVlOnJ9KSx0fXZhciBtVGUsR0EsclU9TigoKT0+eyJ1c2Ugc3RyaWN0IjttVGU9e3ZhbHVlOm8oKCk9Pnt9LCJ2YWx1ZSIpfTtvKHRVLCJkaXNwYXRjaCIpO28oajMsIkRpc3BhdGNoIik7byhnVGUsInBhcnNlVHlwZW5hbWVzIik7ajMucHJvdG90eXBlPXRVLnByb3RvdHlwZT17Y29uc3RydWN0b3I6ajMsb246byhmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuXyxuPWdUZSh0KyIiLHIpLGksYT0tMSxzPW4ubGVuZ3RoO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKDsrK2E8czspaWYoKGk9KHQ9blthXSkudHlwZSkmJihpPXlUZShyW2ldLHQubmFtZSkpKXJldHVybiBpO3JldHVybn1pZihlIT1udWxsJiZ0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrZSk7Zm9yKDsrK2E8czspaWYoaT0odD1uW2FdKS50eXBlKXJbaV09ZVUocltpXSx0Lm5hbWUsZSk7ZWxzZSBpZihlPT1udWxsKWZvcihpIGluIHIpcltpXT1lVShyW2ldLHQubmFtZSxudWxsKTtyZXR1cm4gdGhpc30sIm9uIiksY29weTpvKGZ1bmN0aW9uKCl7dmFyIHQ9e30sZT10aGlzLl87Zm9yKHZhciByIGluIGUpdFtyXT1lW3JdLnNsaWNlKCk7cmV0dXJuIG5ldyBqMyh0KX0sImNvcHkiKSxjYWxsOm8oZnVuY3Rpb24odCxlKXtpZigoaT1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciByPW5ldyBBcnJheShpKSxuPTAsaSxhO248aTsrK24pcltuXT1hcmd1bWVudHNbbisyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2ZvcihhPXRoaXMuX1t0XSxuPTAsaT1hLmxlbmd0aDtuPGk7KytuKWFbbl0udmFsdWUuYXBwbHkoZSxyKX0sImNhbGwiKSxhcHBseTpvKGZ1bmN0aW9uKHQsZSxyKXtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2Zvcih2YXIgbj10aGlzLl9bdF0saT0wLGE9bi5sZW5ndGg7aTxhOysraSluW2ldLnZhbHVlLmFwcGx5KGUscil9LCJhcHBseSIpfTtvKHlUZSwiZ2V0Iik7byhlVSwic2V0Iik7R0E9dFV9KTt2YXIgVkE9TigoKT0+eyJ1c2Ugc3RyaWN0IjtyVSgpfSk7dmFyIEszLFVBLEhBPU4oKCk9PnsidXNlIHN0cmljdCI7SzM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLFVBPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDpLMyx4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9fSk7ZnVuY3Rpb24gc2ModCl7dmFyIGU9dCs9IiIscj1lLmluZGV4T2YoIjoiKTtyZXR1cm4gcj49MCYmKGU9dC5zbGljZSgwLHIpKSE9PSJ4bWxucyImJih0PXQuc2xpY2UocisxKSksVUEuaGFzT3duUHJvcGVydHkoZSk/e3NwYWNlOlVBW2VdLGxvY2FsOnR9OnR9dmFyIFEzPU4oKCk9PnsidXNlIHN0cmljdCI7SEEoKTtvKHNjLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiB2VGUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vd25lckRvY3VtZW50LHI9dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIHI9PT1LMyYmZS5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09SzM/ZS5jcmVhdGVFbGVtZW50KHQpOmUuY3JlYXRlRWxlbWVudE5TKHIsdCl9fWZ1bmN0aW9uIHhUZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBsdih0KXt2YXIgZT1zYyh0KTtyZXR1cm4oZS5sb2NhbD94VGU6dlRlKShlKX12YXIgV0E9TigoKT0+eyJ1c2Ugc3RyaWN0IjtRMygpO0hBKCk7byh2VGUsImNyZWF0b3JJbmhlcml0Iik7byh4VGUsImNyZWF0b3JGaXhlZCIpO28obHYsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIGJUZSgpe31mdW5jdGlvbiBTaCh0KXtyZXR1cm4gdD09bnVsbD9iVGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKHQpfX12YXIgWjM9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKGJUZSwibm9uZSIpO28oU2gsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIHFBKHQpe3R5cGVvZiB0IT0iZnVuY3Rpb24iJiYodD1TaCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxyPWUubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgYT1lW2ldLHM9YS5sZW5ndGgsbD1uW2ldPW5ldyBBcnJheShzKSx1LGgsZj0wO2Y8czsrK2YpKHU9YVtmXSkmJihoPXQuY2FsbCh1LHUuX19kYXRhX18sZixhKSkmJigiX19kYXRhX18iaW4gdSYmKGguX19kYXRhX189dS5fX2RhdGFfXyksbFtmXT1oKTtyZXR1cm4gbmV3IHVpKG4sdGhpcy5fcGFyZW50cyl9dmFyIG5VPU4oKCk9PnsidXNlIHN0cmljdCI7Z2woKTtaMygpO28ocUEsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIFlBKHQpe3JldHVybiB0PT1udWxsP1tdOkFycmF5LmlzQXJyYXkodCk/dDpBcnJheS5mcm9tKHQpfXZhciBpVT1OKCgpPT57InVzZSBzdHJpY3QiO28oWUEsImFycmF5Iil9KTtmdW5jdGlvbiBUVGUoKXtyZXR1cm5bXX1mdW5jdGlvbiBfMCh0KXtyZXR1cm4gdD09bnVsbD9UVGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKHQpfX12YXIgWEE9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKFRUZSwiZW1wdHkiKTtvKF8wLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiB3VGUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFlBKHQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19ZnVuY3Rpb24gakEodCl7dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dD13VGUodCk6dD1fMCh0KTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHI9ZS5sZW5ndGgsbj1bXSxpPVtdLGE9MDthPHI7KythKWZvcih2YXIgcz1lW2FdLGw9cy5sZW5ndGgsdSxoPTA7aDxsOysraCkodT1zW2hdKSYmKG4ucHVzaCh0LmNhbGwodSx1Ll9fZGF0YV9fLGgscykpLGkucHVzaCh1KSk7cmV0dXJuIG5ldyB1aShuLGkpfXZhciBhVT1OKCgpPT57InVzZSBzdHJpY3QiO2dsKCk7aVUoKTtYQSgpO28od1RlLCJhcnJheUFsbCIpO28oakEsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIEQwKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXModCl9fWZ1bmN0aW9uIEozKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5tYXRjaGVzKHQpfX12YXIgY3Y9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKEQwLCJkZWZhdWx0Iik7byhKMywiY2hpbGRNYXRjaGVyIil9KTtmdW5jdGlvbiBFVGUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGtUZS5jYWxsKHRoaXMuY2hpbGRyZW4sdCl9fWZ1bmN0aW9uIFNUZSgpe3JldHVybiB0aGlzLmZpcnN0RWxlbWVudENoaWxkfWZ1bmN0aW9uIEtBKHQpe3JldHVybiB0aGlzLnNlbGVjdCh0PT1udWxsP1NUZTpFVGUodHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpKMyh0KSkpfXZhciBrVGUsc1U9TigoKT0+eyJ1c2Ugc3RyaWN0IjtjdigpO2tUZT1BcnJheS5wcm90b3R5cGUuZmluZDtvKEVUZSwiY2hpbGRGaW5kIik7byhTVGUsImNoaWxkRmlyc3QiKTtvKEtBLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBBVGUoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuKX1mdW5jdGlvbiBfVGUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIENUZS5jYWxsKHRoaXMuY2hpbGRyZW4sdCl9fWZ1bmN0aW9uIFFBKHQpe3JldHVybiB0aGlzLnNlbGVjdEFsbCh0PT1udWxsP0FUZTpfVGUodHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpKMyh0KSkpfXZhciBDVGUsb1U9TigoKT0+eyJ1c2Ugc3RyaWN0IjtjdigpO0NUZT1BcnJheS5wcm90b3R5cGUuZmlsdGVyO28oQVRlLCJjaGlsZHJlbiIpO28oX1RlLCJjaGlsZHJlbkZpbHRlciIpO28oUUEsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIFpBKHQpe3R5cGVvZiB0IT0iZnVuY3Rpb24iJiYodD1EMCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxyPWUubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgYT1lW2ldLHM9YS5sZW5ndGgsbD1uW2ldPVtdLHUsaD0wO2g8czsrK2gpKHU9YVtoXSkmJnQuY2FsbCh1LHUuX19kYXRhX18saCxhKSYmbC5wdXNoKHUpO3JldHVybiBuZXcgdWkobix0aGlzLl9wYXJlbnRzKX12YXIgbFU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtnbCgpO2N2KCk7byhaQSwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gdXYodCl7cmV0dXJuIG5ldyBBcnJheSh0Lmxlbmd0aCl9dmFyIEpBPU4oKCk9PnsidXNlIHN0cmljdCI7byh1diwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gZTgoKXtyZXR1cm4gbmV3IHVpKHRoaXMuX2VudGVyfHx0aGlzLl9ncm91cHMubWFwKHV2KSx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBodih0LGUpe3RoaXMub3duZXJEb2N1bWVudD10Lm93bmVyRG9jdW1lbnQsdGhpcy5uYW1lc3BhY2VVUkk9dC5uYW1lc3BhY2VVUkksdGhpcy5fbmV4dD1udWxsLHRoaXMuX3BhcmVudD10LHRoaXMuX19kYXRhX189ZX12YXIgdDg9TigoKT0+eyJ1c2Ugc3RyaWN0IjtKQSgpO2dsKCk7byhlOCwiZGVmYXVsdCIpO28oaHYsIkVudGVyTm9kZSIpO2h2LnByb3RvdHlwZT17Y29uc3RydWN0b3I6aHYsYXBwZW5kQ2hpbGQ6byhmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZSh0LHRoaXMuX25leHQpfSwiYXBwZW5kQ2hpbGQiKSxpbnNlcnRCZWZvcmU6byhmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKHQsZSl9LCJpbnNlcnRCZWZvcmUiKSxxdWVyeVNlbGVjdG9yOm8oZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKHQpfSwicXVlcnlTZWxlY3RvciIpLHF1ZXJ5U2VsZWN0b3JBbGw6byhmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwodCl9LCJxdWVyeVNlbGVjdG9yQWxsIil9fSk7ZnVuY3Rpb24gcjgodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fXZhciBjVT1OKCgpPT57InVzZSBzdHJpY3QiO28ocjgsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIERUZSh0LGUscixuLGksYSl7Zm9yKHZhciBzPTAsbCx1PWUubGVuZ3RoLGg9YS5sZW5ndGg7czxoOysrcykobD1lW3NdKT8obC5fX2RhdGFfXz1hW3NdLG5bc109bCk6cltzXT1uZXcgaHYodCxhW3NdKTtmb3IoO3M8dTsrK3MpKGw9ZVtzXSkmJihpW3NdPWwpfWZ1bmN0aW9uIExUZSh0LGUscixuLGksYSxzKXt2YXIgbCx1LGg9bmV3IE1hcCxmPWUubGVuZ3RoLGQ9YS5sZW5ndGgscD1uZXcgQXJyYXkoZiksbTtmb3IobD0wO2w8ZjsrK2wpKHU9ZVtsXSkmJihwW2xdPW09cy5jYWxsKHUsdS5fX2RhdGFfXyxsLGUpKyIiLGguaGFzKG0pP2lbbF09dTpoLnNldChtLHUpKTtmb3IobD0wO2w8ZDsrK2wpbT1zLmNhbGwodCxhW2xdLGwsYSkrIiIsKHU9aC5nZXQobSkpPyhuW2xdPXUsdS5fX2RhdGFfXz1hW2xdLGguZGVsZXRlKG0pKTpyW2xdPW5ldyBodih0LGFbbF0pO2ZvcihsPTA7bDxmOysrbCkodT1lW2xdKSYmaC5nZXQocFtsXSk9PT11JiYoaVtsXT11KX1mdW5jdGlvbiBSVGUodCl7cmV0dXJuIHQuX19kYXRhX199ZnVuY3Rpb24gbjgodCxlKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLFJUZSk7dmFyIHI9ZT9MVGU6RFRlLG49dGhpcy5fcGFyZW50cyxpPXRoaXMuX2dyb3Vwczt0eXBlb2YgdCE9ImZ1bmN0aW9uIiYmKHQ9cjgodCkpO2Zvcih2YXIgYT1pLmxlbmd0aCxzPW5ldyBBcnJheShhKSxsPW5ldyBBcnJheShhKSx1PW5ldyBBcnJheShhKSxoPTA7aDxhOysraCl7dmFyIGY9bltoXSxkPWlbaF0scD1kLmxlbmd0aCxtPU5UZSh0LmNhbGwoZixmJiZmLl9fZGF0YV9fLGgsbikpLGc9bS5sZW5ndGgseT1sW2hdPW5ldyBBcnJheShnKSx2PXNbaF09bmV3IEFycmF5KGcpLHg9dVtoXT1uZXcgQXJyYXkocCk7cihmLGQseSx2LHgsbSxlKTtmb3IodmFyIGI9MCxUPTAsUyx3O2I8ZzsrK2IpaWYoUz15W2JdKXtmb3IoYj49VCYmKFQ9YisxKTshKHc9dltUXSkmJisrVDxnOyk7Uy5fbmV4dD13fHxudWxsfX1yZXR1cm4gcz1uZXcgdWkocyxuKSxzLl9lbnRlcj1sLHMuX2V4aXQ9dSxzfWZ1bmN0aW9uIE5UZSh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJvYmplY3QiJiYibGVuZ3RoImluIHQ/dDpBcnJheS5mcm9tKHQpfXZhciB1VT1OKCgpPT57InVzZSBzdHJpY3QiO2dsKCk7dDgoKTtjVSgpO28oRFRlLCJiaW5kSW5kZXgiKTtvKExUZSwiYmluZEtleSIpO28oUlRlLCJkYXR1bSIpO28objgsImRlZmF1bHQiKTtvKE5UZSwiYXJyYXlsaWtlIil9KTtmdW5jdGlvbiBpOCgpe3JldHVybiBuZXcgdWkodGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcCh1diksdGhpcy5fcGFyZW50cyl9dmFyIGhVPU4oKCk9PnsidXNlIHN0cmljdCI7SkEoKTtnbCgpO28oaTgsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIGE4KHQsZSxyKXt2YXIgbj10aGlzLmVudGVyKCksaT10aGlzLGE9dGhpcy5leGl0KCk7cmV0dXJuIHR5cGVvZiB0PT0iZnVuY3Rpb24iPyhuPXQobiksbiYmKG49bi5zZWxlY3Rpb24oKSkpOm49bi5hcHBlbmQodCsiIiksZSE9bnVsbCYmKGk9ZShpKSxpJiYoaT1pLnNlbGVjdGlvbigpKSkscj09bnVsbD9hLnJlbW92ZSgpOnIoYSksbiYmaT9uLm1lcmdlKGkpLm9yZGVyKCk6aX12YXIgZlU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKGE4LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBzOCh0KXtmb3IodmFyIGU9dC5zZWxlY3Rpb24/dC5zZWxlY3Rpb24oKTp0LHI9dGhpcy5fZ3JvdXBzLG49ZS5fZ3JvdXBzLGk9ci5sZW5ndGgsYT1uLmxlbmd0aCxzPU1hdGgubWluKGksYSksbD1uZXcgQXJyYXkoaSksdT0wO3U8czsrK3UpZm9yKHZhciBoPXJbdV0sZj1uW3VdLGQ9aC5sZW5ndGgscD1sW3VdPW5ldyBBcnJheShkKSxtLGc9MDtnPGQ7KytnKShtPWhbZ118fGZbZ10pJiYocFtnXT1tKTtmb3IoO3U8aTsrK3UpbFt1XT1yW3VdO3JldHVybiBuZXcgdWkobCx0aGlzLl9wYXJlbnRzKX12YXIgZFU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtnbCgpO28oczgsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIG84KCl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPS0xLHI9dC5sZW5ndGg7KytlPHI7KWZvcih2YXIgbj10W2VdLGk9bi5sZW5ndGgtMSxhPW5baV0sczstLWk+PTA7KShzPW5baV0pJiYoYSYmcy5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihhKV40JiZhLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHMsYSksYT1zKTtyZXR1cm4gdGhpc312YXIgcFU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKG84LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBsOCh0KXt0fHwodD1NVGUpO2Z1bmN0aW9uIGUoZCxwKXtyZXR1cm4gZCYmcD90KGQuX19kYXRhX18scC5fX2RhdGFfXyk6IWQtIXB9byhlLCJjb21wYXJlTm9kZSIpO2Zvcih2YXIgcj10aGlzLl9ncm91cHMsbj1yLmxlbmd0aCxpPW5ldyBBcnJheShuKSxhPTA7YTxuOysrYSl7Zm9yKHZhciBzPXJbYV0sbD1zLmxlbmd0aCx1PWlbYV09bmV3IEFycmF5KGwpLGgsZj0wO2Y8bDsrK2YpKGg9c1tmXSkmJih1W2ZdPWgpO3Uuc29ydChlKX1yZXR1cm4gbmV3IHVpKGksdGhpcy5fcGFyZW50cykub3JkZXIoKX1mdW5jdGlvbiBNVGUodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59dmFyIG1VPU4oKCk9PnsidXNlIHN0cmljdCI7Z2woKTtvKGw4LCJkZWZhdWx0Iik7byhNVGUsImFzY2VuZGluZyIpfSk7ZnVuY3Rpb24gYzgoKXt2YXIgdD1hcmd1bWVudHNbMF07cmV0dXJuIGFyZ3VtZW50c1swXT10aGlzLHQuYXBwbHkobnVsbCxhcmd1bWVudHMpLHRoaXN9dmFyIGdVPU4oKCk9PnsidXNlIHN0cmljdCI7byhjOCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gdTgoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzKX12YXIgeVU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKHU4LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBoOCgpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT0wLHI9dC5sZW5ndGg7ZTxyOysrZSlmb3IodmFyIG49dFtlXSxpPTAsYT1uLmxlbmd0aDtpPGE7KytpKXt2YXIgcz1uW2ldO2lmKHMpcmV0dXJuIHN9cmV0dXJuIG51bGx9dmFyIHZVPU4oKCk9PnsidXNlIHN0cmljdCI7byhoOCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gZjgoKXtsZXQgdD0wO2ZvcihsZXQgZSBvZiB0aGlzKSsrdDtyZXR1cm4gdH12YXIgeFU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKGY4LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBkOCgpe3JldHVybiF0aGlzLm5vZGUoKX12YXIgYlU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKGQ4LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBwOCh0KXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHI9MCxuPWUubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBpPWVbcl0sYT0wLHM9aS5sZW5ndGgsbDthPHM7KythKShsPWlbYV0pJiZ0LmNhbGwobCxsLl9fZGF0YV9fLGEsaSk7cmV0dXJuIHRoaXN9dmFyIFRVPU4oKCk9PnsidXNlIHN0cmljdCI7byhwOCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gSVRlKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX1mdW5jdGlvbiBPVGUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBQVGUodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZSh0LGUpfX1mdW5jdGlvbiBCVGUodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxlKX19ZnVuY3Rpb24gRlRlKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD90aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KTp0aGlzLnNldEF0dHJpYnV0ZSh0LHIpfX1mdW5jdGlvbiAkVGUodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxyKX19ZnVuY3Rpb24gbTgodCxlKXt2YXIgcj1zYyh0KTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBuPXRoaXMubm9kZSgpO3JldHVybiByLmxvY2FsP24uZ2V0QXR0cmlidXRlTlMoci5zcGFjZSxyLmxvY2FsKTpuLmdldEF0dHJpYnV0ZShyKX1yZXR1cm4gdGhpcy5lYWNoKChlPT1udWxsP3IubG9jYWw/T1RlOklUZTp0eXBlb2YgZT09ImZ1bmN0aW9uIj9yLmxvY2FsPyRUZTpGVGU6ci5sb2NhbD9CVGU6UFRlKShyLGUpKX12YXIgd1U9TigoKT0+eyJ1c2Ugc3RyaWN0IjtRMygpO28oSVRlLCJhdHRyUmVtb3ZlIik7byhPVGUsImF0dHJSZW1vdmVOUyIpO28oUFRlLCJhdHRyQ29uc3RhbnQiKTtvKEJUZSwiYXR0ckNvbnN0YW50TlMiKTtvKEZUZSwiYXR0ckZ1bmN0aW9uIik7bygkVGUsImF0dHJGdW5jdGlvbk5TIik7byhtOCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gZnYodCl7cmV0dXJuIHQub3duZXJEb2N1bWVudCYmdC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx0LmRvY3VtZW50JiZ0fHx0LmRlZmF1bHRWaWV3fXZhciBnOD1OKCgpPT57InVzZSBzdHJpY3QiO28oZnYsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIHpUZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfX1mdW5jdGlvbiBHVGUodCxlLHIpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxlLHIpfX1mdW5jdGlvbiBWVGUodCxlLHIpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO249PW51bGw/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsbixyKX19ZnVuY3Rpb24geTgodCxlLHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChlPT1udWxsP3pUZTp0eXBlb2YgZT09ImZ1bmN0aW9uIj9WVGU6R1RlKSh0LGUscj8/IiIpKTpDaCh0aGlzLm5vZGUoKSx0KX1mdW5jdGlvbiBDaCh0LGUpe3JldHVybiB0LnN0eWxlLmdldFByb3BlcnR5VmFsdWUoZSl8fGZ2KHQpLmdldENvbXB1dGVkU3R5bGUodCxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKGUpfXZhciB2OD1OKCgpPT57InVzZSBzdHJpY3QiO2c4KCk7byh6VGUsInN0eWxlUmVtb3ZlIik7byhHVGUsInN0eWxlQ29uc3RhbnQiKTtvKFZUZSwic3R5bGVGdW5jdGlvbiIpO28oeTgsImRlZmF1bHQiKTtvKENoLCJzdHlsZVZhbHVlIil9KTtmdW5jdGlvbiBVVGUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbdF19fWZ1bmN0aW9uIEhUZSh0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbdF09ZX19ZnVuY3Rpb24gV1RlKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD9kZWxldGUgdGhpc1t0XTp0aGlzW3RdPXJ9fWZ1bmN0aW9uIHg4KHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKGU9PW51bGw/VVRlOnR5cGVvZiBlPT0iZnVuY3Rpb24iP1dUZTpIVGUpKHQsZSkpOnRoaXMubm9kZSgpW3RdfXZhciBrVT1OKCgpPT57InVzZSBzdHJpY3QiO28oVVRlLCJwcm9wZXJ0eVJlbW92ZSIpO28oSFRlLCJwcm9wZXJ0eUNvbnN0YW50Iik7byhXVGUsInByb3BlcnR5RnVuY3Rpb24iKTtvKHg4LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBFVSh0KXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLyl9ZnVuY3Rpb24gYjgodCl7cmV0dXJuIHQuY2xhc3NMaXN0fHxuZXcgU1UodCl9ZnVuY3Rpb24gU1UodCl7dGhpcy5fbm9kZT10LHRoaXMuX25hbWVzPUVVKHQuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gQ1UodCxlKXtmb3IodmFyIHI9YjgodCksbj0tMSxpPWUubGVuZ3RoOysrbjxpOylyLmFkZChlW25dKX1mdW5jdGlvbiBBVSh0LGUpe2Zvcih2YXIgcj1iOCh0KSxuPS0xLGk9ZS5sZW5ndGg7KytuPGk7KXIucmVtb3ZlKGVbbl0pfWZ1bmN0aW9uIHFUZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtDVSh0aGlzLHQpfX1mdW5jdGlvbiBZVGUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7QVUodGhpcyx0KX19ZnVuY3Rpb24gWFRlKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7KGUuYXBwbHkodGhpcyxhcmd1bWVudHMpP0NVOkFVKSh0aGlzLHQpfX1mdW5jdGlvbiBUOCh0LGUpe3ZhciByPUVVKHQrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPWI4KHRoaXMubm9kZSgpKSxpPS0xLGE9ci5sZW5ndGg7KytpPGE7KWlmKCFuLmNvbnRhaW5zKHJbaV0pKXJldHVybiExO3JldHVybiEwfXJldHVybiB0aGlzLmVhY2goKHR5cGVvZiBlPT0iZnVuY3Rpb24iP1hUZTplP3FUZTpZVGUpKHIsZSkpfXZhciBfVT1OKCgpPT57InVzZSBzdHJpY3QiO28oRVUsImNsYXNzQXJyYXkiKTtvKGI4LCJjbGFzc0xpc3QiKTtvKFNVLCJDbGFzc0xpc3QiKTtTVS5wcm90b3R5cGU9e2FkZDpvKGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX25hbWVzLmluZGV4T2YodCk7ZTwwJiYodGhpcy5fbmFtZXMucHVzaCh0KSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSwiYWRkIikscmVtb3ZlOm8oZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbmFtZXMuaW5kZXhPZih0KTtlPj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKGUsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sInJlbW92ZSIpLGNvbnRhaW5zOm8oZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YodCk+PTB9LCJjb250YWlucyIpfTtvKENVLCJjbGFzc2VkQWRkIik7byhBVSwiY2xhc3NlZFJlbW92ZSIpO28ocVRlLCJjbGFzc2VkVHJ1ZSIpO28oWVRlLCJjbGFzc2VkRmFsc2UiKTtvKFhUZSwiY2xhc3NlZEZ1bmN0aW9uIik7byhUOCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24galRlKCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiBLVGUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX1mdW5jdGlvbiBRVGUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD1lPz8iIn19ZnVuY3Rpb24gdzgodCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKHQ9PW51bGw/alRlOih0eXBlb2YgdD09ImZ1bmN0aW9uIj9RVGU6S1RlKSh0KSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9dmFyIERVPU4oKCk9PnsidXNlIHN0cmljdCI7byhqVGUsInRleHRSZW1vdmUiKTtvKEtUZSwidGV4dENvbnN0YW50Iik7byhRVGUsInRleHRGdW5jdGlvbiIpO28odzgsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIFpUZSgpe3RoaXMuaW5uZXJIVE1MPSIifWZ1bmN0aW9uIEpUZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD10fX1mdW5jdGlvbiBld2UodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9ZT8/IiJ9fWZ1bmN0aW9uIGs4KHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCh0PT1udWxsP1pUZToodHlwZW9mIHQ9PSJmdW5jdGlvbiI/ZXdlOkpUZSkodCkpOnRoaXMubm9kZSgpLmlubmVySFRNTH12YXIgTFU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKFpUZSwiaHRtbFJlbW92ZSIpO28oSlRlLCJodG1sQ29uc3RhbnQiKTtvKGV3ZSwiaHRtbEZ1bmN0aW9uIik7byhrOCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gdHdlKCl7dGhpcy5uZXh0U2libGluZyYmdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpfWZ1bmN0aW9uIEU4KCl7cmV0dXJuIHRoaXMuZWFjaCh0d2UpfXZhciBSVT1OKCgpPT57InVzZSBzdHJpY3QiO28odHdlLCJyYWlzZSIpO28oRTgsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIHJ3ZSgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIFM4KCl7cmV0dXJuIHRoaXMuZWFjaChyd2UpfXZhciBOVT1OKCgpPT57InVzZSBzdHJpY3QiO28ocndlLCJsb3dlciIpO28oUzgsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIEM4KHQpe3ZhciBlPXR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6bHYodCk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQoZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9dmFyIE1VPU4oKCk9PnsidXNlIHN0cmljdCI7V0EoKTtvKEM4LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBud2UoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBBOCh0LGUpe3ZhciByPXR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6bHYodCksbj1lPT1udWxsP253ZTp0eXBlb2YgZT09ImZ1bmN0aW9uIj9lOlNoKGUpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxuLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KX12YXIgSVU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtXQSgpO1ozKCk7byhud2UsImNvbnN0YW50TnVsbCIpO28oQTgsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIGl3ZSgpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTt0JiZ0LnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIF84KCl7cmV0dXJuIHRoaXMuZWFjaChpd2UpfXZhciBPVT1OKCgpPT57InVzZSBzdHJpY3QiO28oaXdlLCJyZW1vdmUiKTtvKF84LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBhd2UoKXt2YXIgdD10aGlzLmNsb25lTm9kZSghMSksZT10aGlzLnBhcmVudE5vZGU7cmV0dXJuIGU/ZS5pbnNlcnRCZWZvcmUodCx0aGlzLm5leHRTaWJsaW5nKTp0fWZ1bmN0aW9uIHN3ZSgpe3ZhciB0PXRoaXMuY2xvbmVOb2RlKCEwKSxlPXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gZT9lLmluc2VydEJlZm9yZSh0LHRoaXMubmV4dFNpYmxpbmcpOnR9ZnVuY3Rpb24gRDgodCl7cmV0dXJuIHRoaXMuc2VsZWN0KHQ/c3dlOmF3ZSl9dmFyIFBVPU4oKCk9PnsidXNlIHN0cmljdCI7byhhd2UsInNlbGVjdGlvbl9jbG9uZVNoYWxsb3ciKTtvKHN3ZSwic2VsZWN0aW9uX2Nsb25lRGVlcCIpO28oRDgsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIEw4KHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIix0KTp0aGlzLm5vZGUoKS5fX2RhdGFfX312YXIgQlU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKEw4LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBvd2UodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3QuY2FsbCh0aGlzLGUsdGhpcy5fX2RhdGFfXyl9fWZ1bmN0aW9uIGx3ZSh0KXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKGUpe3ZhciByPSIiLG49ZS5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJihyPWUuc2xpY2UobisxKSxlPWUuc2xpY2UoMCxuKSkse3R5cGU6ZSxuYW1lOnJ9fSl9ZnVuY3Rpb24gY3dlKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMuX19vbjtpZihlKXtmb3IodmFyIHI9MCxuPS0xLGk9ZS5sZW5ndGgsYTtyPGk7KytyKWE9ZVtyXSwoIXQudHlwZXx8YS50eXBlPT09dC50eXBlKSYmYS5uYW1lPT09dC5uYW1lP3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLnR5cGUsYS5saXN0ZW5lcixhLm9wdGlvbnMpOmVbKytuXT1hOysrbj9lLmxlbmd0aD1uOmRlbGV0ZSB0aGlzLl9fb259fX1mdW5jdGlvbiB1d2UodCxlLHIpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXRoaXMuX19vbixpLGE9b3dlKGUpO2lmKG4pe2Zvcih2YXIgcz0wLGw9bi5sZW5ndGg7czxsOysrcylpZigoaT1uW3NdKS50eXBlPT09dC50eXBlJiZpLm5hbWU9PT10Lm5hbWUpe3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihpLnR5cGUsaS5saXN0ZW5lcixpLm9wdGlvbnMpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihpLnR5cGUsaS5saXN0ZW5lcj1hLGkub3B0aW9ucz1yKSxpLnZhbHVlPWU7cmV0dXJufX10aGlzLmFkZEV2ZW50TGlzdGVuZXIodC50eXBlLGEsciksaT17dHlwZTp0LnR5cGUsbmFtZTp0Lm5hbWUsdmFsdWU6ZSxsaXN0ZW5lcjphLG9wdGlvbnM6cn0sbj9uLnB1c2goaSk6dGhpcy5fX29uPVtpXX19ZnVuY3Rpb24gUjgodCxlLHIpe3ZhciBuPWx3ZSh0KyIiKSxpLGE9bi5sZW5ndGgscztpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBsPXRoaXMubm9kZSgpLl9fb247aWYobCl7Zm9yKHZhciB1PTAsaD1sLmxlbmd0aCxmO3U8aDsrK3UpZm9yKGk9MCxmPWxbdV07aTxhOysraSlpZigocz1uW2ldKS50eXBlPT09Zi50eXBlJiZzLm5hbWU9PT1mLm5hbWUpcmV0dXJuIGYudmFsdWV9cmV0dXJufWZvcihsPWU/dXdlOmN3ZSxpPTA7aTxhOysraSl0aGlzLmVhY2gobChuW2ldLGUscikpO3JldHVybiB0aGlzfXZhciBGVT1OKCgpPT57InVzZSBzdHJpY3QiO28ob3dlLCJjb250ZXh0TGlzdGVuZXIiKTtvKGx3ZSwicGFyc2VUeXBlbmFtZXMiKTtvKGN3ZSwib25SZW1vdmUiKTtvKHV3ZSwib25BZGQiKTtvKFI4LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiAkVSh0LGUscil7dmFyIG49ZnYodCksaT1uLkN1c3RvbUV2ZW50O3R5cGVvZiBpPT0iZnVuY3Rpb24iP2k9bmV3IGkoZSxyKTooaT1uLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLHI/KGkuaW5pdEV2ZW50KGUsci5idWJibGVzLHIuY2FuY2VsYWJsZSksaS5kZXRhaWw9ci5kZXRhaWwpOmkuaW5pdEV2ZW50KGUsITEsITEpKSx0LmRpc3BhdGNoRXZlbnQoaSl9ZnVuY3Rpb24gaHdlKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuICRVKHRoaXMsdCxlKX19ZnVuY3Rpb24gZndlKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuICRVKHRoaXMsdCxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fWZ1bmN0aW9uIE44KHQsZSl7cmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/ZndlOmh3ZSkodCxlKSl9dmFyIHpVPU4oKCk9PnsidXNlIHN0cmljdCI7ZzgoKTtvKCRVLCJkaXNwYXRjaEV2ZW50Iik7byhod2UsImRpc3BhdGNoQ29uc3RhbnQiKTtvKGZ3ZSwiZGlzcGF0Y2hGdW5jdGlvbiIpO28oTjgsImRlZmF1bHQiKX0pO2Z1bmN0aW9uKk04KCl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPTAscj10Lmxlbmd0aDtlPHI7KytlKWZvcih2YXIgbj10W2VdLGk9MCxhPW4ubGVuZ3RoLHM7aTxhOysraSkocz1uW2ldKSYmKHlpZWxkIHMpfXZhciBHVT1OKCgpPT57InVzZSBzdHJpY3QiO28oTTgsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIHVpKHQsZSl7dGhpcy5fZ3JvdXBzPXQsdGhpcy5fcGFyZW50cz1lfWZ1bmN0aW9uIFZVKCl7cmV0dXJuIG5ldyB1aShbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLEk4KX1mdW5jdGlvbiBkd2UoKXtyZXR1cm4gdGhpc312YXIgSTgsZ3UsZ2w9TigoKT0+eyJ1c2Ugc3RyaWN0IjtuVSgpO2FVKCk7c1UoKTtvVSgpO2xVKCk7dVUoKTt0OCgpO2hVKCk7ZlUoKTtkVSgpO3BVKCk7bVUoKTtnVSgpO3lVKCk7dlUoKTt4VSgpO2JVKCk7VFUoKTt3VSgpO3Y4KCk7a1UoKTtfVSgpO0RVKCk7TFUoKTtSVSgpO05VKCk7TVUoKTtJVSgpO09VKCk7UFUoKTtCVSgpO0ZVKCk7elUoKTtHVSgpO0k4PVtudWxsXTtvKHVpLCJTZWxlY3Rpb24iKTtvKFZVLCJzZWxlY3Rpb24iKTtvKGR3ZSwic2VsZWN0aW9uX3NlbGVjdGlvbiIpO3VpLnByb3RvdHlwZT1WVS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnVpLHNlbGVjdDpxQSxzZWxlY3RBbGw6akEsc2VsZWN0Q2hpbGQ6S0Esc2VsZWN0Q2hpbGRyZW46UUEsZmlsdGVyOlpBLGRhdGE6bjgsZW50ZXI6ZTgsZXhpdDppOCxqb2luOmE4LG1lcmdlOnM4LHNlbGVjdGlvbjpkd2Usb3JkZXI6bzgsc29ydDpsOCxjYWxsOmM4LG5vZGVzOnU4LG5vZGU6aDgsc2l6ZTpmOCxlbXB0eTpkOCxlYWNoOnA4LGF0dHI6bTgsc3R5bGU6eTgscHJvcGVydHk6eDgsY2xhc3NlZDpUOCx0ZXh0Onc4LGh0bWw6azgscmFpc2U6RTgsbG93ZXI6UzgsYXBwZW5kOkM4LGluc2VydDpBOCxyZW1vdmU6XzgsY2xvbmU6RDgsZGF0dW06TDgsb246UjgsZGlzcGF0Y2g6TjgsW1N5bWJvbC5pdGVyYXRvcl06TTh9O2d1PVZVfSk7ZnVuY3Rpb24gR2UodCl7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIj9uZXcgdWkoW1tkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHQpXV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyB1aShbW3RdXSxJOCl9dmFyIFVVPU4oKCk9PnsidXNlIHN0cmljdCI7Z2woKTtvKEdlLCJkZWZhdWx0Iil9KTt2YXIgeWw9TigoKT0+eyJ1c2Ugc3RyaWN0IjtjdigpO1EzKCk7VVUoKTtnbCgpO1ozKCk7WEEoKTt2OCgpfSk7dmFyIEhVPU4oKCk9PnsidXNlIHN0cmljdCJ9KTtmdW5jdGlvbiBBaCh0LGUscil7dC5wcm90b3R5cGU9ZS5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPXR9ZnVuY3Rpb24gTDAodCxlKXt2YXIgcj1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlKTtmb3IodmFyIG4gaW4gZSlyW25dPWVbbl07cmV0dXJuIHJ9dmFyIE84PU4oKCk9PnsidXNlIHN0cmljdCI7byhBaCwiZGVmYXVsdCIpO28oTDAsImV4dGVuZCIpfSk7ZnVuY3Rpb24gX2goKXt9ZnVuY3Rpb24gcVUoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBUd2UoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXg4KCl9ZnVuY3Rpb24gd3dlKCl7cmV0dXJuIEpVKHRoaXMpLmZvcm1hdEhzbCgpfWZ1bmN0aW9uIFlVKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24geGwodCl7dmFyIGUscjtyZXR1cm4gdD0odCsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKGU9cHdlLmV4ZWModCkpPyhyPWVbMV0ubGVuZ3RoLGU9cGFyc2VJbnQoZVsxXSwxNikscj09PTY/WFUoZSk6cj09PTM/bmV3IGNhKGU+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXxlJjI0MCwoZSYxNSk8PDR8ZSYxNSwxKTpyPT09OD9lNShlPj4yNCYyNTUsZT4+MTYmMjU1LGU+PjgmMjU1LChlJjI1NSkvMjU1KTpyPT09ND9lNShlPj4xMiYxNXxlPj44JjI0MCxlPj44JjE1fGU+PjQmMjQwLGU+PjQmMTV8ZSYyNDAsKChlJjE1KTw8NHxlJjE1KS8yNTUpOm51bGwpOihlPW13ZS5leGVjKHQpKT9uZXcgY2EoZVsxXSxlWzJdLGVbM10sMSk6KGU9Z3dlLmV4ZWModCkpP25ldyBjYShlWzFdKjI1NS8xMDAsZVsyXSoyNTUvMTAwLGVbM10qMjU1LzEwMCwxKTooZT15d2UuZXhlYyh0KSk/ZTUoZVsxXSxlWzJdLGVbM10sZVs0XSk6KGU9dndlLmV4ZWModCkpP2U1KGVbMV0qMjU1LzEwMCxlWzJdKjI1NS8xMDAsZVszXSoyNTUvMTAwLGVbNF0pOihlPXh3ZS5leGVjKHQpKT9RVShlWzFdLGVbMl0vMTAwLGVbM10vMTAwLDEpOihlPWJ3ZS5leGVjKHQpKT9RVShlWzFdLGVbMl0vMTAwLGVbM10vMTAwLGVbNF0pOldVLmhhc093blByb3BlcnR5KHQpP1hVKFdVW3RdKTp0PT09InRyYW5zcGFyZW50Ij9uZXcgY2EoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBYVSh0KXtyZXR1cm4gbmV3IGNhKHQ+PjE2JjI1NSx0Pj44JjI1NSx0JjI1NSwxKX1mdW5jdGlvbiBlNSh0LGUscixuKXtyZXR1cm4gbjw9MCYmKHQ9ZT1yPU5hTiksbmV3IGNhKHQsZSxyLG4pfWZ1bmN0aW9uIEI4KHQpe3JldHVybiB0IGluc3RhbmNlb2YgX2h8fCh0PXhsKHQpKSx0Pyh0PXQucmdiKCksbmV3IGNhKHQucix0LmcsdC5iLHQub3BhY2l0eSkpOm5ldyBjYX1mdW5jdGlvbiBOMCh0LGUscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/QjgodCk6bmV3IGNhKHQsZSxyLG4/PzEpfWZ1bmN0aW9uIGNhKHQsZSxyLG4pe3RoaXMucj0rdCx0aGlzLmc9K2UsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBqVSgpe3JldHVybmAjJHtnZCh0aGlzLnIpfSR7Z2QodGhpcy5nKX0ke2dkKHRoaXMuYil9YH1mdW5jdGlvbiBrd2UoKXtyZXR1cm5gIyR7Z2QodGhpcy5yKX0ke2dkKHRoaXMuZyl9JHtnZCh0aGlzLmIpfSR7Z2QoKGlzTmFOKHRoaXMub3BhY2l0eSk/MTp0aGlzLm9wYWNpdHkpKjI1NSl9YH1mdW5jdGlvbiBLVSgpe2xldCB0PW41KHRoaXMub3BhY2l0eSk7cmV0dXJuYCR7dD09PTE/InJnYigiOiJyZ2JhKCJ9JHt5ZCh0aGlzLnIpfSwgJHt5ZCh0aGlzLmcpfSwgJHt5ZCh0aGlzLmIpfSR7dD09PTE/IikiOmAsICR7dH0pYH1gfWZ1bmN0aW9uIG41KHQpe3JldHVybiBpc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSl9ZnVuY3Rpb24geWQodCl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodCl8fDApKX1mdW5jdGlvbiBnZCh0KXtyZXR1cm4gdD15ZCh0KSwodDwxNj8iMCI6IiIpK3QudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIFFVKHQsZSxyLG4pe3JldHVybiBuPD0wP3Q9ZT1yPU5hTjpyPD0wfHxyPj0xP3Q9ZT1OYU46ZTw9MCYmKHQ9TmFOKSxuZXcgdmwodCxlLHIsbil9ZnVuY3Rpb24gSlUodCl7aWYodCBpbnN0YW5jZW9mIHZsKXJldHVybiBuZXcgdmwodC5oLHQucyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgX2h8fCh0PXhsKHQpKSwhdClyZXR1cm4gbmV3IHZsO2lmKHQgaW5zdGFuY2VvZiB2bClyZXR1cm4gdDt0PXQucmdiKCk7dmFyIGU9dC5yLzI1NSxyPXQuZy8yNTUsbj10LmIvMjU1LGk9TWF0aC5taW4oZSxyLG4pLGE9TWF0aC5tYXgoZSxyLG4pLHM9TmFOLGw9YS1pLHU9KGEraSkvMjtyZXR1cm4gbD8oZT09PWE/cz0oci1uKS9sKyhyPG4pKjY6cj09PWE/cz0obi1lKS9sKzI6cz0oZS1yKS9sKzQsbC89dTwuNT9hK2k6Mi1hLWkscyo9NjApOmw9dT4wJiZ1PDE/MDpzLG5ldyB2bChzLGwsdSx0Lm9wYWNpdHkpfWZ1bmN0aW9uIGVIKHQsZSxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9KVSh0KTpuZXcgdmwodCxlLHIsbj8/MSl9ZnVuY3Rpb24gdmwodCxlLHIsbil7dGhpcy5oPSt0LHRoaXMucz0rZSx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIFpVKHQpe3JldHVybiB0PSh0fHwwKSUzNjAsdDwwP3QrMzYwOnR9ZnVuY3Rpb24gdDUodCl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oMSx0fHwwKSl9ZnVuY3Rpb24gUDgodCxlLHIpe3JldHVybih0PDYwP2UrKHItZSkqdC82MDp0PDE4MD9yOnQ8MjQwP2UrKHItZSkqKDI0MC10KS82MDplKSoyNTV9dmFyIGR2LHI1LFIwLHB2LG9jLHB3ZSxtd2UsZ3dlLHl3ZSx2d2UseHdlLGJ3ZSxXVSxGOD1OKCgpPT57InVzZSBzdHJpY3QiO084KCk7byhfaCwiQ29sb3IiKTtkdj0uNyxyNT0xL2R2LFIwPSJcXHMqKFsrLV0/XFxkKylcXHMqIixwdj0iXFxzKihbKy1dPyg/OlxcZCpcXC4pP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsb2M9IlxccyooWystXT8oPzpcXGQqXFwuKT9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixwd2U9L14jKFswLTlhLWZdezMsOH0pJC8sbXdlPW5ldyBSZWdFeHAoYF5yZ2JcXCgke1IwfSwke1IwfSwke1IwfVxcKSRgKSxnd2U9bmV3IFJlZ0V4cChgXnJnYlxcKCR7b2N9LCR7b2N9LCR7b2N9XFwpJGApLHl3ZT1uZXcgUmVnRXhwKGBecmdiYVxcKCR7UjB9LCR7UjB9LCR7UjB9LCR7cHZ9XFwpJGApLHZ3ZT1uZXcgUmVnRXhwKGBecmdiYVxcKCR7b2N9LCR7b2N9LCR7b2N9LCR7cHZ9XFwpJGApLHh3ZT1uZXcgUmVnRXhwKGBeaHNsXFwoJHtwdn0sJHtvY30sJHtvY31cXCkkYCksYndlPW5ldyBSZWdFeHAoYF5oc2xhXFwoJHtwdn0sJHtvY30sJHtvY30sJHtwdn1cXCkkYCksV1U9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07QWgoX2gseGwse2NvcHkodCl7cmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IHRoaXMuY29uc3RydWN0b3IsdGhpcyx0KX0sZGlzcGxheWFibGUoKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSxoZXg6cVUsZm9ybWF0SGV4OnFVLGZvcm1hdEhleDg6VHdlLGZvcm1hdEhzbDp3d2UsZm9ybWF0UmdiOllVLHRvU3RyaW5nOllVfSk7byhxVSwiY29sb3JfZm9ybWF0SGV4Iik7byhUd2UsImNvbG9yX2Zvcm1hdEhleDgiKTtvKHd3ZSwiY29sb3JfZm9ybWF0SHNsIik7byhZVSwiY29sb3JfZm9ybWF0UmdiIik7byh4bCwiY29sb3IiKTtvKFhVLCJyZ2JuIik7byhlNSwicmdiYSIpO28oQjgsInJnYkNvbnZlcnQiKTtvKE4wLCJyZ2IiKTtvKGNhLCJSZ2IiKTtBaChjYSxOMCxMMChfaCx7YnJpZ2h0ZXIodCl7cmV0dXJuIHQ9dD09bnVsbD9yNTpNYXRoLnBvdyhyNSx0KSxuZXcgY2EodGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyKHQpe3JldHVybiB0PXQ9PW51bGw/ZHY6TWF0aC5wb3coZHYsdCksbmV3IGNhKHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LHJnYigpe3JldHVybiB0aGlzfSxjbGFtcCgpe3JldHVybiBuZXcgY2EoeWQodGhpcy5yKSx5ZCh0aGlzLmcpLHlkKHRoaXMuYiksbjUodGhpcy5vcGFjaXR5KSl9LGRpc3BsYXlhYmxlKCl7cmV0dXJuLS41PD10aGlzLnImJnRoaXMucjwyNTUuNSYmLS41PD10aGlzLmcmJnRoaXMuZzwyNTUuNSYmLS41PD10aGlzLmImJnRoaXMuYjwyNTUuNSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGhleDpqVSxmb3JtYXRIZXg6alUsZm9ybWF0SGV4ODprd2UsZm9ybWF0UmdiOktVLHRvU3RyaW5nOktVfSkpO28oalUsInJnYl9mb3JtYXRIZXgiKTtvKGt3ZSwicmdiX2Zvcm1hdEhleDgiKTtvKEtVLCJyZ2JfZm9ybWF0UmdiIik7byhuNSwiY2xhbXBhIik7byh5ZCwiY2xhbXBpIik7byhnZCwiaGV4Iik7byhRVSwiaHNsYSIpO28oSlUsImhzbENvbnZlcnQiKTtvKGVILCJoc2wiKTtvKHZsLCJIc2wiKTtBaCh2bCxlSCxMMChfaCx7YnJpZ2h0ZXIodCl7cmV0dXJuIHQ9dD09bnVsbD9yNTpNYXRoLnBvdyhyNSx0KSxuZXcgdmwodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXIodCl7cmV0dXJuIHQ9dD09bnVsbD9kdjpNYXRoLnBvdyhkdix0KSxuZXcgdmwodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxyZ2IoKXt2YXIgdD10aGlzLmglMzYwKyh0aGlzLmg8MCkqMzYwLGU9aXNOYU4odCl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMscj10aGlzLmwsbj1yKyhyPC41P3I6MS1yKSplLGk9MipyLW47cmV0dXJuIG5ldyBjYShQOCh0Pj0yNDA/dC0yNDA6dCsxMjAsaSxuKSxQOCh0LGksbiksUDgodDwxMjA/dCsyNDA6dC0xMjAsaSxuKSx0aGlzLm9wYWNpdHkpfSxjbGFtcCgpe3JldHVybiBuZXcgdmwoWlUodGhpcy5oKSx0NSh0aGlzLnMpLHQ1KHRoaXMubCksbjUodGhpcy5vcGFjaXR5KSl9LGRpc3BsYXlhYmxlKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2woKXtsZXQgdD1uNSh0aGlzLm9wYWNpdHkpO3JldHVybmAke3Q9PT0xPyJoc2woIjoiaHNsYSgifSR7WlUodGhpcy5oKX0sICR7dDUodGhpcy5zKSoxMDB9JSwgJHt0NSh0aGlzLmwpKjEwMH0lJHt0PT09MT8iKSI6YCwgJHt0fSlgfWB9fSkpO28oWlUsImNsYW1waCIpO28odDUsImNsYW1wdCIpO28oUDgsImhzbDJyZ2IiKX0pO3ZhciB0SCxySCxuSD1OKCgpPT57InVzZSBzdHJpY3QiO3RIPU1hdGguUEkvMTgwLHJIPTE4MC9NYXRoLlBJfSk7ZnVuY3Rpb24gY0godCl7aWYodCBpbnN0YW5jZW9mIGxjKXJldHVybiBuZXcgbGModC5sLHQuYSx0LmIsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgeXUpcmV0dXJuIHVIKHQpO3QgaW5zdGFuY2VvZiBjYXx8KHQ9QjgodCkpO3ZhciBlPVY4KHQucikscj1WOCh0LmcpLG49VjgodC5iKSxpPSQ4KCguMjIyNTA0NSplKy43MTY4Nzg2KnIrLjA2MDYxNjkqbikvYUgpLGEscztyZXR1cm4gZT09PXImJnI9PT1uP2E9cz1pOihhPSQ4KCguNDM2MDc0NyplKy4zODUwNjQ5KnIrLjE0MzA4MDQqbikvaUgpLHM9JDgoKC4wMTM5MzIyKmUrLjA5NzEwNDUqcisuNzE0MTczMypuKS9zSCkpLG5ldyBsYygxMTYqaS0xNiw1MDAqKGEtaSksMjAwKihpLXMpLHQub3BhY2l0eSl9ZnVuY3Rpb24gVTgodCxlLHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP2NIKHQpOm5ldyBsYyh0LGUscixuPz8xKX1mdW5jdGlvbiBsYyh0LGUscixuKXt0aGlzLmw9K3QsdGhpcy5hPStlLHRoaXMuYj0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gJDgodCl7cmV0dXJuIHQ+RXdlP01hdGgucG93KHQsMS8zKTp0L2xIK29IfWZ1bmN0aW9uIHo4KHQpe3JldHVybiB0Pk0wP3QqdCp0OmxIKih0LW9IKX1mdW5jdGlvbiBHOCh0KXtyZXR1cm4gMjU1Kih0PD0uMDAzMTMwOD8xMi45Mip0OjEuMDU1Kk1hdGgucG93KHQsMS8yLjQpLS4wNTUpfWZ1bmN0aW9uIFY4KHQpe3JldHVybih0Lz0yNTUpPD0uMDQwNDU/dC8xMi45MjpNYXRoLnBvdygodCsuMDU1KS8xLjA1NSwyLjQpfWZ1bmN0aW9uIFN3ZSh0KXtpZih0IGluc3RhbmNlb2YgeXUpcmV0dXJuIG5ldyB5dSh0LmgsdC5jLHQubCx0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBsY3x8KHQ9Y0godCkpLHQuYT09PTAmJnQuYj09PTApcmV0dXJuIG5ldyB5dShOYU4sMDx0LmwmJnQubDwxMDA/MDpOYU4sdC5sLHQub3BhY2l0eSk7dmFyIGU9TWF0aC5hdGFuMih0LmIsdC5hKSpySDtyZXR1cm4gbmV3IHl1KGU8MD9lKzM2MDplLE1hdGguc3FydCh0LmEqdC5hK3QuYip0LmIpLHQubCx0Lm9wYWNpdHkpfWZ1bmN0aW9uIG12KHQsZSxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9Td2UodCk6bmV3IHl1KHQsZSxyLG4/PzEpfWZ1bmN0aW9uIHl1KHQsZSxyLG4pe3RoaXMuaD0rdCx0aGlzLmM9K2UsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiB1SCh0KXtpZihpc05hTih0LmgpKXJldHVybiBuZXcgbGModC5sLDAsMCx0Lm9wYWNpdHkpO3ZhciBlPXQuaCp0SDtyZXR1cm4gbmV3IGxjKHQubCxNYXRoLmNvcyhlKSp0LmMsTWF0aC5zaW4oZSkqdC5jLHQub3BhY2l0eSl9dmFyIGk1LGlILGFILHNILG9ILE0wLGxILEV3ZSxoSD1OKCgpPT57InVzZSBzdHJpY3QiO084KCk7RjgoKTtuSCgpO2k1PTE4LGlIPS45NjQyMixhSD0xLHNIPS44MjUyMSxvSD00LzI5LE0wPTYvMjksbEg9MypNMCpNMCxFd2U9TTAqTTAqTTA7byhjSCwibGFiQ29udmVydCIpO28oVTgsImxhYiIpO28obGMsIkxhYiIpO0FoKGxjLFU4LEwwKF9oLHticmlnaHRlcih0KXtyZXR1cm4gbmV3IGxjKHRoaXMubCtpNSoodD8/MSksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxkYXJrZXIodCl7cmV0dXJuIG5ldyBsYyh0aGlzLmwtaTUqKHQ/PzEpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0scmdiKCl7dmFyIHQ9KHRoaXMubCsxNikvMTE2LGU9aXNOYU4odGhpcy5hKT90OnQrdGhpcy5hLzUwMCxyPWlzTmFOKHRoaXMuYik/dDp0LXRoaXMuYi8yMDA7cmV0dXJuIGU9aUgqejgoZSksdD1hSCp6OCh0KSxyPXNIKno4KHIpLG5ldyBjYShHOCgzLjEzMzg1NjEqZS0xLjYxNjg2NjcqdC0uNDkwNjE0NipyKSxHOCgtLjk3ODc2ODQqZSsxLjkxNjE0MTUqdCsuMDMzNDU0KnIpLEc4KC4wNzE5NDUzKmUtLjIyODk5MTQqdCsxLjQwNTI0MjcqciksdGhpcy5vcGFjaXR5KX19KSk7bygkOCwieHl6MmxhYiIpO28oejgsImxhYjJ4eXoiKTtvKEc4LCJscmdiMnJnYiIpO28oVjgsInJnYjJscmdiIik7byhTd2UsImhjbENvbnZlcnQiKTtvKG12LCJoY2wiKTtvKHl1LCJIY2wiKTtvKHVILCJoY2wybGFiIik7QWgoeXUsbXYsTDAoX2gse2JyaWdodGVyKHQpe3JldHVybiBuZXcgeXUodGhpcy5oLHRoaXMuYyx0aGlzLmwraTUqKHQ/PzEpLHRoaXMub3BhY2l0eSl9LGRhcmtlcih0KXtyZXR1cm4gbmV3IHl1KHRoaXMuaCx0aGlzLmMsdGhpcy5sLWk1Kih0Pz8xKSx0aGlzLm9wYWNpdHkpfSxyZ2IoKXtyZXR1cm4gdUgodGhpcykucmdiKCl9fSkpfSk7dmFyIEkwPU4oKCk9PnsidXNlIHN0cmljdCI7RjgoKTtoSCgpfSk7ZnVuY3Rpb24gSDgodCxlLHIsbixpKXt2YXIgYT10KnQscz1hKnQ7cmV0dXJuKCgxLTMqdCszKmEtcykqZSsoNC02KmErMypzKSpyKygxKzMqdCszKmEtMypzKSpuK3MqaSkvNn1mdW5jdGlvbiBXOCh0KXt2YXIgZT10Lmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1yPD0wP3I9MDpyPj0xPyhyPTEsZS0xKTpNYXRoLmZsb29yKHIqZSksaT10W25dLGE9dFtuKzFdLHM9bj4wP3Rbbi0xXToyKmktYSxsPW48ZS0xP3RbbisyXToyKmEtaTtyZXR1cm4gSDgoKHItbi9lKSplLHMsaSxhLGwpfX12YXIgcTg9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKEg4LCJiYXNpcyIpO28oVzgsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIFk4KHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1NYXRoLmZsb29yKCgociU9MSk8MD8rK3I6cikqZSksaT10WyhuK2UtMSklZV0sYT10W24lZV0scz10WyhuKzEpJWVdLGw9dFsobisyKSVlXTtyZXR1cm4gSDgoKHItbi9lKSplLGksYSxzLGwpfX12YXIgZkg9TigoKT0+eyJ1c2Ugc3RyaWN0IjtxOCgpO28oWTgsImRlZmF1bHQiKX0pO3ZhciBPMCxYOD1OKCgpPT57InVzZSBzdHJpY3QiO08wPW8odD0+KCk9PnQsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIGRIKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB0K3IqZX19ZnVuY3Rpb24gQ3dlKHQsZSxyKXtyZXR1cm4gdD1NYXRoLnBvdyh0LHIpLGU9TWF0aC5wb3coZSxyKS10LHI9MS9yLGZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnBvdyh0K24qZSxyKX19ZnVuY3Rpb24gcEgodCxlKXt2YXIgcj1lLXQ7cmV0dXJuIHI/ZEgodCxyPjE4MHx8cjwtMTgwP3ItMzYwKk1hdGgucm91bmQoci8zNjApOnIpOk8wKGlzTmFOKHQpP2U6dCl9ZnVuY3Rpb24gbUgodCl7cmV0dXJuKHQ9K3QpPT0xP3Z1OmZ1bmN0aW9uKGUscil7cmV0dXJuIHItZT9Dd2UoZSxyLHQpOk8wKGlzTmFOKGUpP3I6ZSl9fWZ1bmN0aW9uIHZ1KHQsZSl7dmFyIHI9ZS10O3JldHVybiByP2RIKHQscik6TzAoaXNOYU4odCk/ZTp0KX12YXIgajg9TigoKT0+eyJ1c2Ugc3RyaWN0IjtYOCgpO28oZEgsImxpbmVhciIpO28oQ3dlLCJleHBvbmVudGlhbCIpO28ocEgsImh1ZSIpO28obUgsImdhbW1hIik7byh2dSwibm9nYW1tYSIpfSk7ZnVuY3Rpb24gZ0godCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByPWUubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9bmV3IEFycmF5KHIpLGE9bmV3IEFycmF5KHIpLHMsbDtmb3Iocz0wO3M8cjsrK3MpbD1OMChlW3NdKSxuW3NdPWwucnx8MCxpW3NdPWwuZ3x8MCxhW3NdPWwuYnx8MDtyZXR1cm4gbj10KG4pLGk9dChpKSxhPXQoYSksbC5vcGFjaXR5PTEsZnVuY3Rpb24odSl7cmV0dXJuIGwucj1uKHUpLGwuZz1pKHUpLGwuYj1hKHUpLGwrIiJ9fX12YXIgdmQsQXdlLF93ZSxLOD1OKCgpPT57InVzZSBzdHJpY3QiO0kwKCk7cTgoKTtmSCgpO2o4KCk7dmQ9byhmdW5jdGlvbiB0KGUpe3ZhciByPW1IKGUpO2Z1bmN0aW9uIG4oaSxhKXt2YXIgcz1yKChpPU4wKGkpKS5yLChhPU4wKGEpKS5yKSxsPXIoaS5nLGEuZyksdT1yKGkuYixhLmIpLGg9dnUoaS5vcGFjaXR5LGEub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGYpe3JldHVybiBpLnI9cyhmKSxpLmc9bChmKSxpLmI9dShmKSxpLm9wYWNpdHk9aChmKSxpKyIifX1yZXR1cm4gbyhuLCJyZ2IiKSxuLmdhbW1hPXQsbn0sInJnYkdhbW1hIikoMSk7byhnSCwicmdiU3BsaW5lIik7QXdlPWdIKFc4KSxfd2U9Z0goWTgpfSk7ZnVuY3Rpb24gUTgodCxlKXtlfHwoZT1bXSk7dmFyIHI9dD9NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aCk6MCxuPWUuc2xpY2UoKSxpO3JldHVybiBmdW5jdGlvbihhKXtmb3IoaT0wO2k8cjsrK2kpbltpXT10W2ldKigxLWEpK2VbaV0qYTtyZXR1cm4gbn19ZnVuY3Rpb24geUgodCl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyh0KSYmISh0IGluc3RhbmNlb2YgRGF0YVZpZXcpfXZhciB2SD1OKCgpPT57InVzZSBzdHJpY3QiO28oUTgsImRlZmF1bHQiKTtvKHlILCJpc051bWJlckFycmF5Iil9KTtmdW5jdGlvbiB4SCh0LGUpe3ZhciByPWU/ZS5sZW5ndGg6MCxuPXQ/TWF0aC5taW4ocix0Lmxlbmd0aCk6MCxpPW5ldyBBcnJheShuKSxhPW5ldyBBcnJheShyKSxzO2ZvcihzPTA7czxuOysrcylpW3NdPURoKHRbc10sZVtzXSk7Zm9yKDtzPHI7KytzKWFbc109ZVtzXTtyZXR1cm4gZnVuY3Rpb24obCl7Zm9yKHM9MDtzPG47KytzKWFbc109aVtzXShsKTtyZXR1cm4gYX19dmFyIGJIPU4oKCk9PnsidXNlIHN0cmljdCI7YTUoKTtvKHhILCJnZW5lcmljQXJyYXkiKX0pO2Z1bmN0aW9uIFo4KHQsZSl7dmFyIHI9bmV3IERhdGU7cmV0dXJuIHQ9K3QsZT0rZSxmdW5jdGlvbihuKXtyZXR1cm4gci5zZXRUaW1lKHQqKDEtbikrZSpuKSxyfX12YXIgVEg9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKFo4LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBLaSh0LGUpe3JldHVybiB0PSt0LGU9K2UsZnVuY3Rpb24ocil7cmV0dXJuIHQqKDEtcikrZSpyfX12YXIgZ3Y9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKEtpLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBKOCh0LGUpe3ZhciByPXt9LG49e30saTsodD09PW51bGx8fHR5cGVvZiB0IT0ib2JqZWN0IikmJih0PXt9KSwoZT09PW51bGx8fHR5cGVvZiBlIT0ib2JqZWN0IikmJihlPXt9KTtmb3IoaSBpbiBlKWkgaW4gdD9yW2ldPURoKHRbaV0sZVtpXSk6bltpXT1lW2ldO3JldHVybiBmdW5jdGlvbihhKXtmb3IoaSBpbiByKW5baV09cltpXShhKTtyZXR1cm4gbn19dmFyIHdIPU4oKCk9PnsidXNlIHN0cmljdCI7YTUoKTtvKEo4LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBEd2UodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIEx3ZSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSkrIiJ9fWZ1bmN0aW9uIFAwKHQsZSl7dmFyIHI9dF8ubGFzdEluZGV4PWVfLmxhc3RJbmRleD0wLG4saSxhLHM9LTEsbD1bXSx1PVtdO2Zvcih0PXQrIiIsZT1lKyIiOyhuPXRfLmV4ZWModCkpJiYoaT1lXy5leGVjKGUpKTspKGE9aS5pbmRleCk+ciYmKGE9ZS5zbGljZShyLGEpLGxbc10/bFtzXSs9YTpsWysrc109YSksKG49blswXSk9PT0oaT1pWzBdKT9sW3NdP2xbc10rPWk6bFsrK3NdPWk6KGxbKytzXT1udWxsLHUucHVzaCh7aTpzLHg6S2kobixpKX0pKSxyPWVfLmxhc3RJbmRleDtyZXR1cm4gcjxlLmxlbmd0aCYmKGE9ZS5zbGljZShyKSxsW3NdP2xbc10rPWE6bFsrK3NdPWEpLGwubGVuZ3RoPDI/dVswXT9Md2UodVswXS54KTpEd2UoZSk6KGU9dS5sZW5ndGgsZnVuY3Rpb24oaCl7Zm9yKHZhciBmPTAsZDtmPGU7KytmKWxbKGQ9dVtmXSkuaV09ZC54KGgpO3JldHVybiBsLmpvaW4oIiIpfSl9dmFyIHRfLGVfLHJfPU4oKCk9PnsidXNlIHN0cmljdCI7Z3YoKTt0Xz0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csZV89bmV3IFJlZ0V4cCh0Xy5zb3VyY2UsImciKTtvKER3ZSwiemVybyIpO28oTHdlLCJvbmUiKTtvKFAwLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBEaCh0LGUpe3ZhciByPXR5cGVvZiBlLG47cmV0dXJuIGU9PW51bGx8fHI9PT0iYm9vbGVhbiI/TzAoZSk6KHI9PT0ibnVtYmVyIj9LaTpyPT09InN0cmluZyI/KG49eGwoZSkpPyhlPW4sdmQpOlAwOmUgaW5zdGFuY2VvZiB4bD92ZDplIGluc3RhbmNlb2YgRGF0ZT9aODp5SChlKT9RODpBcnJheS5pc0FycmF5KGUpP3hIOnR5cGVvZiBlLnZhbHVlT2YhPSJmdW5jdGlvbiImJnR5cGVvZiBlLnRvU3RyaW5nIT0iZnVuY3Rpb24ifHxpc05hTihlKT9KODpLaSkodCxlKX12YXIgYTU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtJMCgpO0s4KCk7YkgoKTtUSCgpO2d2KCk7d0goKTtyXygpO1g4KCk7dkgoKTtvKERoLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBzNSh0LGUpe3JldHVybiB0PSt0LGU9K2UsZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgucm91bmQodCooMS1yKStlKnIpfX12YXIga0g9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKHM1LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBsNSh0LGUscixuLGksYSl7dmFyIHMsbCx1O3JldHVybihzPU1hdGguc3FydCh0KnQrZSplKSkmJih0Lz1zLGUvPXMpLCh1PXQqcitlKm4pJiYoci09dCp1LG4tPWUqdSksKGw9TWF0aC5zcXJ0KHIqcituKm4pKSYmKHIvPWwsbi89bCx1Lz1sKSx0Km48ZSpyJiYodD0tdCxlPS1lLHU9LXUscz0tcykse3RyYW5zbGF0ZVg6aSx0cmFuc2xhdGVZOmEscm90YXRlOk1hdGguYXRhbjIoZSx0KSpFSCxza2V3WDpNYXRoLmF0YW4odSkqRUgsc2NhbGVYOnMsc2NhbGVZOmx9fXZhciBFSCxvNSxTSD1OKCgpPT57InVzZSBzdHJpY3QiO0VIPTE4MC9NYXRoLlBJLG81PXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9O28obDUsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIENIKHQpe2xldCBlPW5ldyh0eXBlb2YgRE9NTWF0cml4PT0iZnVuY3Rpb24iP0RPTU1hdHJpeDpXZWJLaXRDU1NNYXRyaXgpKHQrIiIpO3JldHVybiBlLmlzSWRlbnRpdHk/bzU6bDUoZS5hLGUuYixlLmMsZS5kLGUuZSxlLmYpfWZ1bmN0aW9uIEFIKHQpe3JldHVybiB0PT1udWxsP281OihjNXx8KGM1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIikpLGM1LnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIix0KSwodD1jNS50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpKT8odD10Lm1hdHJpeCxsNSh0LmEsdC5iLHQuYyx0LmQsdC5lLHQuZikpOm81KX12YXIgYzUsX0g9TigoKT0+eyJ1c2Ugc3RyaWN0IjtTSCgpO28oQ0gsInBhcnNlQ3NzIik7byhBSCwicGFyc2VTdmciKX0pO2Z1bmN0aW9uIERIKHQsZSxyLG4pe2Z1bmN0aW9uIGkoaCl7cmV0dXJuIGgubGVuZ3RoP2gucG9wKCkrIiAiOiIifW8oaSwicG9wIik7ZnVuY3Rpb24gYShoLGYsZCxwLG0sZyl7aWYoaCE9PWR8fGYhPT1wKXt2YXIgeT1tLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsZSxudWxsLHIpO2cucHVzaCh7aTp5LTQseDpLaShoLGQpfSx7aTp5LTIseDpLaShmLHApfSl9ZWxzZShkfHxwKSYmbS5wdXNoKCJ0cmFuc2xhdGUoIitkK2UrcCtyKX1vKGEsInRyYW5zbGF0ZSIpO2Z1bmN0aW9uIHMoaCxmLGQscCl7aCE9PWY/KGgtZj4xODA/Zis9MzYwOmYtaD4xODAmJihoKz0zNjApLHAucHVzaCh7aTpkLnB1c2goaShkKSsicm90YXRlKCIsbnVsbCxuKS0yLHg6S2koaCxmKX0pKTpmJiZkLnB1c2goaShkKSsicm90YXRlKCIrZituKX1vKHMsInJvdGF0ZSIpO2Z1bmN0aW9uIGwoaCxmLGQscCl7aCE9PWY/cC5wdXNoKHtpOmQucHVzaChpKGQpKyJza2V3WCgiLG51bGwsbiktMix4OktpKGgsZil9KTpmJiZkLnB1c2goaShkKSsic2tld1goIitmK24pfW8obCwic2tld1giKTtmdW5jdGlvbiB1KGgsZixkLHAsbSxnKXtpZihoIT09ZHx8ZiE9PXApe3ZhciB5PW0ucHVzaChpKG0pKyJzY2FsZSgiLG51bGwsIiwiLG51bGwsIikiKTtnLnB1c2goe2k6eS00LHg6S2koaCxkKX0se2k6eS0yLHg6S2koZixwKX0pfWVsc2UoZCE9PTF8fHAhPT0xKSYmbS5wdXNoKGkobSkrInNjYWxlKCIrZCsiLCIrcCsiKSIpfXJldHVybiBvKHUsInNjYWxlIiksZnVuY3Rpb24oaCxmKXt2YXIgZD1bXSxwPVtdO3JldHVybiBoPXQoaCksZj10KGYpLGEoaC50cmFuc2xhdGVYLGgudHJhbnNsYXRlWSxmLnRyYW5zbGF0ZVgsZi50cmFuc2xhdGVZLGQscCkscyhoLnJvdGF0ZSxmLnJvdGF0ZSxkLHApLGwoaC5za2V3WCxmLnNrZXdYLGQscCksdShoLnNjYWxlWCxoLnNjYWxlWSxmLnNjYWxlWCxmLnNjYWxlWSxkLHApLGg9Zj1udWxsLGZ1bmN0aW9uKG0pe2Zvcih2YXIgZz0tMSx5PXAubGVuZ3RoLHY7KytnPHk7KWRbKHY9cFtnXSkuaV09di54KG0pO3JldHVybiBkLmpvaW4oIiIpfX19dmFyIG5fLGlfLExIPU4oKCk9PnsidXNlIHN0cmljdCI7Z3YoKTtfSCgpO28oREgsImludGVycG9sYXRlVHJhbnNmb3JtIik7bl89REgoQ0gsInB4LCAiLCJweCkiLCJkZWcpIiksaV89REgoQUgsIiwgIiwiKSIsIikiKX0pO2Z1bmN0aW9uIFJIKHQpe3JldHVybiBmdW5jdGlvbihlLHIpe3ZhciBuPXQoKGU9bXYoZSkpLmgsKHI9bXYocikpLmgpLGk9dnUoZS5jLHIuYyksYT12dShlLmwsci5sKSxzPXZ1KGUub3BhY2l0eSxyLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihsKXtyZXR1cm4gZS5oPW4obCksZS5jPWkobCksZS5sPWEobCksZS5vcGFjaXR5PXMobCksZSsiIn19fXZhciBhXyxSd2UsTkg9TigoKT0+eyJ1c2Ugc3RyaWN0IjtJMCgpO2o4KCk7byhSSCwiaGNsIik7YV89UkgocEgpLFJ3ZT1SSCh2dSl9KTt2YXIgQjA9TigoKT0+eyJ1c2Ugc3RyaWN0IjthNSgpO2d2KCk7a0goKTtyXygpO0xIKCk7SzgoKTtOSCgpfSk7ZnVuY3Rpb24gd3YoKXtyZXR1cm4geGR8fChPSChOd2UpLHhkPWJ2Lm5vdygpK2Y1KX1mdW5jdGlvbiBOd2UoKXt4ZD0wfWZ1bmN0aW9uIFR2KCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBkNSh0LGUscil7dmFyIG49bmV3IFR2O3JldHVybiBuLnJlc3RhcnQodCxlLHIpLG59ZnVuY3Rpb24gUEgoKXt3digpLCsrRjA7Zm9yKHZhciB0PXU1LGU7dDspKGU9eGQtdC5fdGltZSk+PTAmJnQuX2NhbGwuY2FsbCh2b2lkIDAsZSksdD10Ll9uZXh0Oy0tRjB9ZnVuY3Rpb24gTUgoKXt4ZD0oaDU9YnYubm93KCkpK2Y1LEYwPXZ2PTA7dHJ5e1BIKCl9ZmluYWxseXtGMD0wLEl3ZSgpLHhkPTB9fWZ1bmN0aW9uIE13ZSgpe3ZhciB0PWJ2Lm5vdygpLGU9dC1oNTtlPklIJiYoZjUtPWUsaDU9dCl9ZnVuY3Rpb24gSXdlKCl7Zm9yKHZhciB0LGU9dTUscixuPTEvMDtlOyllLl9jYWxsPyhuPmUuX3RpbWUmJihuPWUuX3RpbWUpLHQ9ZSxlPWUuX25leHQpOihyPWUuX25leHQsZS5fbmV4dD1udWxsLGU9dD90Ll9uZXh0PXI6dTU9cik7eHY9dCxzXyhuKX1mdW5jdGlvbiBzXyh0KXtpZighRjApe3Z2JiYodnY9Y2xlYXJUaW1lb3V0KHZ2KSk7dmFyIGU9dC14ZDtlPjI0Pyh0PDEvMCYmKHZ2PXNldFRpbWVvdXQoTUgsdC1idi5ub3coKS1mNSkpLHl2JiYoeXY9Y2xlYXJJbnRlcnZhbCh5dikpKTooeXZ8fChoNT1idi5ub3coKSx5dj1zZXRJbnRlcnZhbChNd2UsSUgpKSxGMD0xLE9IKE1IKSl9fXZhciBGMCx2dix5dixJSCx1NSx4dixoNSx4ZCxmNSxidixPSCxvXz1OKCgpPT57InVzZSBzdHJpY3QiO0YwPTAsdnY9MCx5dj0wLElIPTFlMyxoNT0wLHhkPTAsZjU9MCxidj10eXBlb2YgcGVyZm9ybWFuY2U9PSJvYmplY3QiJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxPSD10eXBlb2Ygd2luZG93PT0ib2JqZWN0IiYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsMTcpfTtvKHd2LCJub3ciKTtvKE53ZSwiY2xlYXJOb3ciKTtvKFR2LCJUaW1lciIpO1R2LnByb3RvdHlwZT1kNS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlR2LHJlc3RhcnQ6byhmdW5jdGlvbih0LGUscil7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTtyPShyPT1udWxsP3d2KCk6K3IpKyhlPT1udWxsPzA6K2UpLCF0aGlzLl9uZXh0JiZ4diE9PXRoaXMmJih4dj94di5fbmV4dD10aGlzOnU1PXRoaXMseHY9dGhpcyksdGhpcy5fY2FsbD10LHRoaXMuX3RpbWU9cixzXygpfSwicmVzdGFydCIpLHN0b3A6byhmdW5jdGlvbigpe3RoaXMuX2NhbGwmJih0aGlzLl9jYWxsPW51bGwsdGhpcy5fdGltZT0xLzAsc18oKSl9LCJzdG9wIil9O28oZDUsInRpbWVyIik7byhQSCwidGltZXJGbHVzaCIpO28oTUgsIndha2UiKTtvKE13ZSwicG9rZSIpO28oSXdlLCJuYXAiKTtvKHNfLCJzbGVlcCIpfSk7ZnVuY3Rpb24ga3YodCxlLHIpe3ZhciBuPW5ldyBUdjtyZXR1cm4gZT1lPT1udWxsPzA6K2Usbi5yZXN0YXJ0KGk9PntuLnN0b3AoKSx0KGkrZSl9LGUsciksbn12YXIgQkg9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvXygpO28oa3YsImRlZmF1bHQiKX0pO3ZhciBwNT1OKCgpPT57InVzZSBzdHJpY3QiO29fKCk7QkgoKX0pO2Z1bmN0aW9uIHh1KHQsZSxyLG4saSxhKXt2YXIgcz10Ll9fdHJhbnNpdGlvbjtpZighcyl0Ll9fdHJhbnNpdGlvbj17fTtlbHNlIGlmKHIgaW4gcylyZXR1cm47QndlKHQscix7bmFtZTplLGluZGV4Om4sZ3JvdXA6aSxvbjpPd2UsdHdlZW46UHdlLHRpbWU6YS50aW1lLGRlbGF5OmEuZGVsYXksZHVyYXRpb246YS5kdXJhdGlvbixlYXNlOmEuZWFzZSx0aW1lcjpudWxsLHN0YXRlOnpIfSl9ZnVuY3Rpb24gU3YodCxlKXt2YXIgcj16aSh0LGUpO2lmKHIuc3RhdGU+ekgpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWQiKTtyZXR1cm4gcn1mdW5jdGlvbiB1YSh0LGUpe3ZhciByPXppKHQsZSk7aWYoci5zdGF0ZT5tNSl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHJ1bm5pbmciKTtyZXR1cm4gcn1mdW5jdGlvbiB6aSh0LGUpe3ZhciByPXQuX190cmFuc2l0aW9uO2lmKCFyfHwhKHI9cltlXSkpdGhyb3cgbmV3IEVycm9yKCJ0cmFuc2l0aW9uIG5vdCBmb3VuZCIpO3JldHVybiByfWZ1bmN0aW9uIEJ3ZSh0LGUscil7dmFyIG49dC5fX3RyYW5zaXRpb24saTtuW2VdPXIsci50aW1lcj1kNShhLDAsci50aW1lKTtmdW5jdGlvbiBhKGgpe3Iuc3RhdGU9Rkgsci50aW1lci5yZXN0YXJ0KHMsci5kZWxheSxyLnRpbWUpLHIuZGVsYXk8PWgmJnMoaC1yLmRlbGF5KX1vKGEsInNjaGVkdWxlIik7ZnVuY3Rpb24gcyhoKXt2YXIgZixkLHAsbTtpZihyLnN0YXRlIT09RkgpcmV0dXJuIHUoKTtmb3IoZiBpbiBuKWlmKG09bltmXSxtLm5hbWU9PT1yLm5hbWUpe2lmKG0uc3RhdGU9PT1tNSlyZXR1cm4ga3Yocyk7bS5zdGF0ZT09PSRIPyhtLnN0YXRlPUV2LG0udGltZXIuc3RvcCgpLG0ub24uY2FsbCgiaW50ZXJydXB0Iix0LHQuX19kYXRhX18sbS5pbmRleCxtLmdyb3VwKSxkZWxldGUgbltmXSk6K2Y8ZSYmKG0uc3RhdGU9RXYsbS50aW1lci5zdG9wKCksbS5vbi5jYWxsKCJjYW5jZWwiLHQsdC5fX2RhdGFfXyxtLmluZGV4LG0uZ3JvdXApLGRlbGV0ZSBuW2ZdKX1pZihrdihmdW5jdGlvbigpe3Iuc3RhdGU9PT1tNSYmKHIuc3RhdGU9JEgsci50aW1lci5yZXN0YXJ0KGwsci5kZWxheSxyLnRpbWUpLGwoaCkpfSksci5zdGF0ZT1nNSxyLm9uLmNhbGwoInN0YXJ0Iix0LHQuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSxyLnN0YXRlPT09ZzUpe2ZvcihyLnN0YXRlPW01LGk9bmV3IEFycmF5KHA9ci50d2Vlbi5sZW5ndGgpLGY9MCxkPS0xO2Y8cDsrK2YpKG09ci50d2VlbltmXS52YWx1ZS5jYWxsKHQsdC5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApKSYmKGlbKytkXT1tKTtpLmxlbmd0aD1kKzF9fW8ocywic3RhcnQiKTtmdW5jdGlvbiBsKGgpe2Zvcih2YXIgZj1oPHIuZHVyYXRpb24/ci5lYXNlLmNhbGwobnVsbCxoL3IuZHVyYXRpb24pOihyLnRpbWVyLnJlc3RhcnQodSksci5zdGF0ZT15NSwxKSxkPS0xLHA9aS5sZW5ndGg7KytkPHA7KWlbZF0uY2FsbCh0LGYpO3Iuc3RhdGU9PT15NSYmKHIub24uY2FsbCgiZW5kIix0LHQuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSx1KCkpfW8obCwidGljayIpO2Z1bmN0aW9uIHUoKXtyLnN0YXRlPUV2LHIudGltZXIuc3RvcCgpLGRlbGV0ZSBuW2VdO2Zvcih2YXIgaCBpbiBuKXJldHVybjtkZWxldGUgdC5fX3RyYW5zaXRpb259byh1LCJzdG9wIil9dmFyIE93ZSxQd2UsekgsRkgsZzUsbTUsJEgseTUsRXYsRHM9TigoKT0+eyJ1c2Ugc3RyaWN0IjtWQSgpO3A1KCk7T3dlPUdBKCJzdGFydCIsImVuZCIsImNhbmNlbCIsImludGVycnVwdCIpLFB3ZT1bXSx6SD0wLEZIPTEsZzU9MixtNT0zLCRIPTQseTU9NSxFdj02O28oeHUsImRlZmF1bHQiKTtvKFN2LCJpbml0Iik7byh1YSwic2V0Iik7byh6aSwiZ2V0Iik7byhCd2UsImNyZWF0ZSIpfSk7ZnVuY3Rpb24gQ3YodCxlKXt2YXIgcj10Ll9fdHJhbnNpdGlvbixuLGksYT0hMCxzO2lmKHIpe2U9ZT09bnVsbD9udWxsOmUrIiI7Zm9yKHMgaW4gcil7aWYoKG49cltzXSkubmFtZSE9PWUpe2E9ITE7Y29udGludWV9aT1uLnN0YXRlPmc1JiZuLnN0YXRlPHk1LG4uc3RhdGU9RXYsbi50aW1lci5zdG9wKCksbi5vbi5jYWxsKGk/ImludGVycnVwdCI6ImNhbmNlbCIsdCx0Ll9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCksZGVsZXRlIHJbc119YSYmZGVsZXRlIHQuX190cmFuc2l0aW9ufX12YXIgR0g9TigoKT0+eyJ1c2Ugc3RyaWN0IjtEcygpO28oQ3YsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIGxfKHQpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtDdih0aGlzLHQpfSl9dmFyIFZIPU4oKCk9PnsidXNlIHN0cmljdCI7R0goKTtvKGxfLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBGd2UodCxlKXt2YXIgcixuO3JldHVybiBmdW5jdGlvbigpe3ZhciBpPXVhKHRoaXMsdCksYT1pLnR3ZWVuO2lmKGEhPT1yKXtuPXI9YTtmb3IodmFyIHM9MCxsPW4ubGVuZ3RoO3M8bDsrK3MpaWYobltzXS5uYW1lPT09ZSl7bj1uLnNsaWNlKCksbi5zcGxpY2UocywxKTticmVha319aS50d2Vlbj1ufX1mdW5jdGlvbiAkd2UodCxlLHIpe3ZhciBuLGk7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXVhKHRoaXMsdCkscz1hLnR3ZWVuO2lmKHMhPT1uKXtpPShuPXMpLnNsaWNlKCk7Zm9yKHZhciBsPXtuYW1lOmUsdmFsdWU6cn0sdT0wLGg9aS5sZW5ndGg7dTxoOysrdSlpZihpW3VdLm5hbWU9PT1lKXtpW3VdPWw7YnJlYWt9dT09PWgmJmkucHVzaChsKX1hLnR3ZWVuPWl9fWZ1bmN0aW9uIGNfKHQsZSl7dmFyIHI9dGhpcy5faWQ7aWYodCs9IiIsYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIG49emkodGhpcy5ub2RlKCkscikudHdlZW4saT0wLGE9bi5sZW5ndGgscztpPGE7KytpKWlmKChzPW5baV0pLm5hbWU9PT10KXJldHVybiBzLnZhbHVlO3JldHVybiBudWxsfXJldHVybiB0aGlzLmVhY2goKGU9PW51bGw/RndlOiR3ZSkocix0LGUpKX1mdW5jdGlvbiAkMCh0LGUscil7dmFyIG49dC5faWQ7cmV0dXJuIHQuZWFjaChmdW5jdGlvbigpe3ZhciBpPXVhKHRoaXMsbik7KGkudmFsdWV8fChpLnZhbHVlPXt9KSlbZV09ci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxmdW5jdGlvbihpKXtyZXR1cm4gemkoaSxuKS52YWx1ZVtlXX19dmFyIEF2PU4oKCk9PnsidXNlIHN0cmljdCI7RHMoKTtvKEZ3ZSwidHdlZW5SZW1vdmUiKTtvKCR3ZSwidHdlZW5GdW5jdGlvbiIpO28oY18sImRlZmF1bHQiKTtvKCQwLCJ0d2VlblZhbHVlIil9KTtmdW5jdGlvbiBfdih0LGUpe3ZhciByO3JldHVybih0eXBlb2YgZT09Im51bWJlciI/S2k6ZSBpbnN0YW5jZW9mIHhsP3ZkOihyPXhsKGUpKT8oZT1yLHZkKTpQMCkodCxlKX12YXIgdV89TigoKT0+eyJ1c2Ugc3RyaWN0IjtJMCgpO0IwKCk7byhfdiwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gendlKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX1mdW5jdGlvbiBHd2UodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBWd2UodCxlLHIpe3ZhciBuLGk9cisiIixhO3JldHVybiBmdW5jdGlvbigpe3ZhciBzPXRoaXMuZ2V0QXR0cmlidXRlKHQpO3JldHVybiBzPT09aT9udWxsOnM9PT1uP2E6YT1lKG49cyxyKX19ZnVuY3Rpb24gVXdlKHQsZSxyKXt2YXIgbixpPXIrIiIsYTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcz10aGlzLmdldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk7cmV0dXJuIHM9PT1pP251bGw6cz09PW4/YTphPWUobj1zLHIpfX1mdW5jdGlvbiBId2UodCxlLHIpe3ZhciBuLGksYTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcyxsPXIodGhpcyksdTtyZXR1cm4gbD09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlKHQpOihzPXRoaXMuZ2V0QXR0cmlidXRlKHQpLHU9bCsiIixzPT09dT9udWxsOnM9PT1uJiZ1PT09aT9hOihpPXUsYT1lKG49cyxsKSkpfX1mdW5jdGlvbiBXd2UodCxlLHIpe3ZhciBuLGksYTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcyxsPXIodGhpcyksdTtyZXR1cm4gbD09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKToocz10aGlzLmdldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCksdT1sKyIiLHM9PT11P251bGw6cz09PW4mJnU9PT1pP2E6KGk9dSxhPWUobj1zLGwpKSl9fWZ1bmN0aW9uIGhfKHQsZSl7dmFyIHI9c2ModCksbj1yPT09InRyYW5zZm9ybSI/aV86X3Y7cmV0dXJuIHRoaXMuYXR0clR3ZWVuKHQsdHlwZW9mIGU9PSJmdW5jdGlvbiI/KHIubG9jYWw/V3dlOkh3ZSkocixuLCQwKHRoaXMsImF0dHIuIit0LGUpKTplPT1udWxsPyhyLmxvY2FsP0d3ZTp6d2UpKHIpOihyLmxvY2FsP1V3ZTpWd2UpKHIsbixlKSl9dmFyIFVIPU4oKCk9PnsidXNlIHN0cmljdCI7QjAoKTt5bCgpO0F2KCk7dV8oKTtvKHp3ZSwiYXR0clJlbW92ZSIpO28oR3dlLCJhdHRyUmVtb3ZlTlMiKTtvKFZ3ZSwiYXR0ckNvbnN0YW50Iik7byhVd2UsImF0dHJDb25zdGFudE5TIik7byhId2UsImF0dHJGdW5jdGlvbiIpO28oV3dlLCJhdHRyRnVuY3Rpb25OUyIpO28oaF8sImRlZmF1bHQiKX0pO2Z1bmN0aW9uIHF3ZSh0LGUpe3JldHVybiBmdW5jdGlvbihyKXt0aGlzLnNldEF0dHJpYnV0ZSh0LGUuY2FsbCh0aGlzLHIpKX19ZnVuY3Rpb24gWXdlKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3RoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLGUuY2FsbCh0aGlzLHIpKX19ZnVuY3Rpb24gWHdlKHQsZSl7dmFyIHIsbjtmdW5jdGlvbiBpKCl7dmFyIGE9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGEhPT1uJiYocj0obj1hKSYmWXdlKHQsYSkpLHJ9cmV0dXJuIG8oaSwidHdlZW4iKSxpLl92YWx1ZT1lLGl9ZnVuY3Rpb24gandlKHQsZSl7dmFyIHIsbjtmdW5jdGlvbiBpKCl7dmFyIGE9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGEhPT1uJiYocj0obj1hKSYmcXdlKHQsYSkpLHJ9cmV0dXJuIG8oaSwidHdlZW4iKSxpLl92YWx1ZT1lLGl9ZnVuY3Rpb24gZl8odCxlKXt2YXIgcj0iYXR0ci4iK3Q7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihyPXRoaXMudHdlZW4ocikpJiZyLl92YWx1ZTtpZihlPT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKHIsbnVsbCk7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3ZhciBuPXNjKHQpO3JldHVybiB0aGlzLnR3ZWVuKHIsKG4ubG9jYWw/WHdlOmp3ZSkobixlKSl9dmFyIEhIPU4oKCk9PnsidXNlIHN0cmljdCI7eWwoKTtvKHF3ZSwiYXR0ckludGVycG9sYXRlIik7byhZd2UsImF0dHJJbnRlcnBvbGF0ZU5TIik7byhYd2UsImF0dHJUd2Vlbk5TIik7byhqd2UsImF0dHJUd2VlbiIpO28oZl8sImRlZmF1bHQiKX0pO2Z1bmN0aW9uIEt3ZSh0LGUpe3JldHVybiBmdW5jdGlvbigpe1N2KHRoaXMsdCkuZGVsYXk9K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBRd2UodCxlKXtyZXR1cm4gZT0rZSxmdW5jdGlvbigpe1N2KHRoaXMsdCkuZGVsYXk9ZX19ZnVuY3Rpb24gZF8odCl7dmFyIGU9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj9Ld2U6UXdlKShlLHQpKTp6aSh0aGlzLm5vZGUoKSxlKS5kZWxheX12YXIgV0g9TigoKT0+eyJ1c2Ugc3RyaWN0IjtEcygpO28oS3dlLCJkZWxheUZ1bmN0aW9uIik7byhRd2UsImRlbGF5Q29uc3RhbnQiKTtvKGRfLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBad2UodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt1YSh0aGlzLHQpLmR1cmF0aW9uPStlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gSndlKHQsZSl7cmV0dXJuIGU9K2UsZnVuY3Rpb24oKXt1YSh0aGlzLHQpLmR1cmF0aW9uPWV9fWZ1bmN0aW9uIHBfKHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIHQ9PSJmdW5jdGlvbiI/WndlOkp3ZSkoZSx0KSk6emkodGhpcy5ub2RlKCksZSkuZHVyYXRpb259dmFyIHFIPU4oKCk9PnsidXNlIHN0cmljdCI7RHMoKTtvKFp3ZSwiZHVyYXRpb25GdW5jdGlvbiIpO28oSndlLCJkdXJhdGlvbkNvbnN0YW50Iik7byhwXywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gZWtlKHQsZSl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3VhKHRoaXMsdCkuZWFzZT1lfX1mdW5jdGlvbiBtXyh0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZWtlKGUsdCkpOnppKHRoaXMubm9kZSgpLGUpLmVhc2V9dmFyIFlIPU4oKCk9PnsidXNlIHN0cmljdCI7RHMoKTtvKGVrZSwiZWFzZUNvbnN0YW50Iik7byhtXywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gdGtlKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3VhKHRoaXMsdCkuZWFzZT1yfX1mdW5jdGlvbiBnXyh0KXtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMuZWFjaCh0a2UodGhpcy5faWQsdCkpfXZhciBYSD1OKCgpPT57InVzZSBzdHJpY3QiO0RzKCk7byh0a2UsImVhc2VWYXJ5aW5nIik7byhnXywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24geV8odCl7dHlwZW9mIHQhPSJmdW5jdGlvbiImJih0PUQwKHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHI9ZS5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBhPWVbaV0scz1hLmxlbmd0aCxsPW5baV09W10sdSxoPTA7aDxzOysraCkodT1hW2hdKSYmdC5jYWxsKHUsdS5fX2RhdGFfXyxoLGEpJiZsLnB1c2godSk7cmV0dXJuIG5ldyBhcyhuLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9dmFyIGpIPU4oKCk9PnsidXNlIHN0cmljdCI7eWwoKTtiZCgpO28oeV8sImRlZmF1bHQiKX0pO2Z1bmN0aW9uIHZfKHQpe2lmKHQuX2lkIT09dGhpcy5faWQpdGhyb3cgbmV3IEVycm9yO2Zvcih2YXIgZT10aGlzLl9ncm91cHMscj10Ll9ncm91cHMsbj1lLmxlbmd0aCxpPXIubGVuZ3RoLGE9TWF0aC5taW4obixpKSxzPW5ldyBBcnJheShuKSxsPTA7bDxhOysrbClmb3IodmFyIHU9ZVtsXSxoPXJbbF0sZj11Lmxlbmd0aCxkPXNbbF09bmV3IEFycmF5KGYpLHAsbT0wO208ZjsrK20pKHA9dVttXXx8aFttXSkmJihkW21dPXApO2Zvcig7bDxuOysrbClzW2xdPWVbbF07cmV0dXJuIG5ldyBhcyhzLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9dmFyIEtIPU4oKCk9PnsidXNlIHN0cmljdCI7YmQoKTtvKHZfLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBya2UodCl7cmV0dXJuKHQrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbihlKXt2YXIgcj1lLmluZGV4T2YoIi4iKTtyZXR1cm4gcj49MCYmKGU9ZS5zbGljZSgwLHIpKSwhZXx8ZT09PSJzdGFydCJ9KX1mdW5jdGlvbiBua2UodCxlLHIpe3ZhciBuLGksYT1ya2UoZSk/U3Y6dWE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHM9YSh0aGlzLHQpLGw9cy5vbjtsIT09biYmKGk9KG49bCkuY29weSgpKS5vbihlLHIpLHMub249aX19ZnVuY3Rpb24geF8odCxlKXt2YXIgcj10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP3ppKHRoaXMubm9kZSgpLHIpLm9uLm9uKHQpOnRoaXMuZWFjaChua2Uocix0LGUpKX12YXIgUUg9TigoKT0+eyJ1c2Ugc3RyaWN0IjtEcygpO28ocmtlLCJzdGFydCIpO28obmtlLCJvbkZ1bmN0aW9uIik7byh4XywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gaWtlKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMucGFyZW50Tm9kZTtmb3IodmFyIHIgaW4gdGhpcy5fX3RyYW5zaXRpb24paWYoK3IhPT10KXJldHVybjtlJiZlLnJlbW92ZUNoaWxkKHRoaXMpfX1mdW5jdGlvbiBiXygpe3JldHVybiB0aGlzLm9uKCJlbmQucmVtb3ZlIixpa2UodGhpcy5faWQpKX12YXIgWkg9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKGlrZSwicmVtb3ZlRnVuY3Rpb24iKTtvKGJfLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBUXyh0KXt2YXIgZT10aGlzLl9uYW1lLHI9dGhpcy5faWQ7dHlwZW9mIHQhPSJmdW5jdGlvbiImJih0PVNoKHQpKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgsYT1uZXcgQXJyYXkoaSkscz0wO3M8aTsrK3MpZm9yKHZhciBsPW5bc10sdT1sLmxlbmd0aCxoPWFbc109bmV3IEFycmF5KHUpLGYsZCxwPTA7cDx1OysrcCkoZj1sW3BdKSYmKGQ9dC5jYWxsKGYsZi5fX2RhdGFfXyxwLGwpKSYmKCJfX2RhdGFfXyJpbiBmJiYoZC5fX2RhdGFfXz1mLl9fZGF0YV9fKSxoW3BdPWQseHUoaFtwXSxlLHIscCxoLHppKGYscikpKTtyZXR1cm4gbmV3IGFzKGEsdGhpcy5fcGFyZW50cyxlLHIpfXZhciBKSD1OKCgpPT57InVzZSBzdHJpY3QiO3lsKCk7YmQoKTtEcygpO28oVF8sImRlZmF1bHQiKX0pO2Z1bmN0aW9uIHdfKHQpe3ZhciBlPXRoaXMuX25hbWUscj10aGlzLl9pZDt0eXBlb2YgdCE9ImZ1bmN0aW9uIiYmKHQ9XzAodCkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxhPVtdLHM9W10sbD0wO2w8aTsrK2wpZm9yKHZhciB1PW5bbF0saD11Lmxlbmd0aCxmLGQ9MDtkPGg7KytkKWlmKGY9dVtkXSl7Zm9yKHZhciBwPXQuY2FsbChmLGYuX19kYXRhX18sZCx1KSxtLGc9emkoZixyKSx5PTAsdj1wLmxlbmd0aDt5PHY7Kyt5KShtPXBbeV0pJiZ4dShtLGUscix5LHAsZyk7YS5wdXNoKHApLHMucHVzaChmKX1yZXR1cm4gbmV3IGFzKGEscyxlLHIpfXZhciBlVz1OKCgpPT57InVzZSBzdHJpY3QiO3lsKCk7YmQoKTtEcygpO28od18sImRlZmF1bHQiKX0pO2Z1bmN0aW9uIGtfKCl7cmV0dXJuIG5ldyBha2UodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfXZhciBha2UsdFc9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt5bCgpO2FrZT1ndS5wcm90b3R5cGUuY29uc3RydWN0b3I7byhrXywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gc2tlKHQsZSl7dmFyIHIsbixpO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPUNoKHRoaXMsdCkscz0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KSxDaCh0aGlzLHQpKTtyZXR1cm4gYT09PXM/bnVsbDphPT09ciYmcz09PW4/aTppPWUocj1hLG49cyl9fWZ1bmN0aW9uIHJXKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9fWZ1bmN0aW9uIG9rZSh0LGUscil7dmFyIG4saT1yKyIiLGE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHM9Q2godGhpcyx0KTtyZXR1cm4gcz09PWk/bnVsbDpzPT09bj9hOmE9ZShuPXMscil9fWZ1bmN0aW9uIGxrZSh0LGUscil7dmFyIG4saSxhO3JldHVybiBmdW5jdGlvbigpe3ZhciBzPUNoKHRoaXMsdCksbD1yKHRoaXMpLHU9bCsiIjtyZXR1cm4gbD09bnVsbCYmKHU9bD0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KSxDaCh0aGlzLHQpKSkscz09PXU/bnVsbDpzPT09biYmdT09PWk/YTooaT11LGE9ZShuPXMsbCkpfX1mdW5jdGlvbiBja2UodCxlKXt2YXIgcixuLGksYT0ic3R5bGUuIitlLHM9ImVuZC4iK2EsbDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdT11YSh0aGlzLHQpLGg9dS5vbixmPXUudmFsdWVbYV09PW51bGw/bHx8KGw9clcoZSkpOnZvaWQgMDsoaCE9PXJ8fGkhPT1mKSYmKG49KHI9aCkuY29weSgpKS5vbihzLGk9ZiksdS5vbj1ufX1mdW5jdGlvbiBFXyh0LGUscil7dmFyIG49KHQrPSIiKT09InRyYW5zZm9ybSI/bl86X3Y7cmV0dXJuIGU9PW51bGw/dGhpcy5zdHlsZVR3ZWVuKHQsc2tlKHQsbikpLm9uKCJlbmQuc3R5bGUuIit0LHJXKHQpKTp0eXBlb2YgZT09ImZ1bmN0aW9uIj90aGlzLnN0eWxlVHdlZW4odCxsa2UodCxuLCQwKHRoaXMsInN0eWxlLiIrdCxlKSkpLmVhY2goY2tlKHRoaXMuX2lkLHQpKTp0aGlzLnN0eWxlVHdlZW4odCxva2UodCxuLGUpLHIpLm9uKCJlbmQuc3R5bGUuIit0LG51bGwpfXZhciBuVz1OKCgpPT57InVzZSBzdHJpY3QiO0IwKCk7eWwoKTtEcygpO0F2KCk7dV8oKTtvKHNrZSwic3R5bGVOdWxsIik7byhyVywic3R5bGVSZW1vdmUiKTtvKG9rZSwic3R5bGVDb25zdGFudCIpO28obGtlLCJzdHlsZUZ1bmN0aW9uIik7byhja2UsInN0eWxlTWF5YmVSZW1vdmUiKTtvKEVfLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiB1a2UodCxlLHIpe3JldHVybiBmdW5jdGlvbihuKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsZS5jYWxsKHRoaXMsbikscil9fWZ1bmN0aW9uIGhrZSh0LGUscil7dmFyIG4saTtmdW5jdGlvbiBhKCl7dmFyIHM9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHMhPT1pJiYobj0oaT1zKSYmdWtlKHQscyxyKSksbn1yZXR1cm4gbyhhLCJ0d2VlbiIpLGEuX3ZhbHVlPWUsYX1mdW5jdGlvbiBTXyh0LGUscil7dmFyIG49InN0eWxlLiIrKHQrPSIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKG49dGhpcy50d2VlbihuKSkmJm4uX3ZhbHVlO2lmKGU9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4obixudWxsKTtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4obixoa2UodCxlLHI/PyIiKSl9dmFyIGlXPU4oKCk9PnsidXNlIHN0cmljdCI7byh1a2UsInN0eWxlSW50ZXJwb2xhdGUiKTtvKGhrZSwic3R5bGVUd2VlbiIpO28oU18sImRlZmF1bHQiKX0pO2Z1bmN0aW9uIGZrZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PXR9fWZ1bmN0aW9uIGRrZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpO3RoaXMudGV4dENvbnRlbnQ9ZT8/IiJ9fWZ1bmN0aW9uIENfKHQpe3JldHVybiB0aGlzLnR3ZWVuKCJ0ZXh0Iix0eXBlb2YgdD09ImZ1bmN0aW9uIj9ka2UoJDAodGhpcywidGV4dCIsdCkpOmZrZSh0PT1udWxsPyIiOnQrIiIpKX12YXIgYVc9TigoKT0+eyJ1c2Ugc3RyaWN0IjtBdigpO28oZmtlLCJ0ZXh0Q29uc3RhbnQiKTtvKGRrZSwidGV4dEZ1bmN0aW9uIik7byhDXywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gcGtlKHQpe3JldHVybiBmdW5jdGlvbihlKXt0aGlzLnRleHRDb250ZW50PXQuY2FsbCh0aGlzLGUpfX1mdW5jdGlvbiBta2UodCl7dmFyIGUscjtmdW5jdGlvbiBuKCl7dmFyIGk9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGkhPT1yJiYoZT0ocj1pKSYmcGtlKGkpKSxlfXJldHVybiBvKG4sInR3ZWVuIiksbi5fdmFsdWU9dCxufWZ1bmN0aW9uIEFfKHQpe3ZhciBlPSJ0ZXh0IjtpZihhcmd1bWVudHMubGVuZ3RoPDEpcmV0dXJuKGU9dGhpcy50d2VlbihlKSkmJmUuX3ZhbHVlO2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4oZSxudWxsKTtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4oZSxta2UodCkpfXZhciBzVz1OKCgpPT57InVzZSBzdHJpY3QiO28ocGtlLCJ0ZXh0SW50ZXJwb2xhdGUiKTtvKG1rZSwidGV4dFR3ZWVuIik7byhBXywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gX18oKXtmb3IodmFyIHQ9dGhpcy5fbmFtZSxlPXRoaXMuX2lkLHI9djUoKSxuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLGE9MDthPGk7KythKWZvcih2YXIgcz1uW2FdLGw9cy5sZW5ndGgsdSxoPTA7aDxsOysraClpZih1PXNbaF0pe3ZhciBmPXppKHUsZSk7eHUodSx0LHIsaCxzLHt0aW1lOmYudGltZStmLmRlbGF5K2YuZHVyYXRpb24sZGVsYXk6MCxkdXJhdGlvbjpmLmR1cmF0aW9uLGVhc2U6Zi5lYXNlfSl9cmV0dXJuIG5ldyBhcyhuLHRoaXMuX3BhcmVudHMsdCxyKX12YXIgb1c9TigoKT0+eyJ1c2Ugc3RyaWN0IjtiZCgpO0RzKCk7byhfXywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gRF8oKXt2YXIgdCxlLHI9dGhpcyxuPXIuX2lkLGk9ci5zaXplKCk7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGEscyl7dmFyIGw9e3ZhbHVlOnN9LHU9e3ZhbHVlOm8oZnVuY3Rpb24oKXstLWk9PT0wJiZhKCl9LCJ2YWx1ZSIpfTtyLmVhY2goZnVuY3Rpb24oKXt2YXIgaD11YSh0aGlzLG4pLGY9aC5vbjtmIT09dCYmKGU9KHQ9ZikuY29weSgpLGUuXy5jYW5jZWwucHVzaChsKSxlLl8uaW50ZXJydXB0LnB1c2gobCksZS5fLmVuZC5wdXNoKHUpKSxoLm9uPWV9KSxpPT09MCYmYSgpfSl9dmFyIGxXPU4oKCk9PnsidXNlIHN0cmljdCI7RHMoKTtvKERfLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBhcyh0LGUscixuKXt0aGlzLl9ncm91cHM9dCx0aGlzLl9wYXJlbnRzPWUsdGhpcy5fbmFtZT1yLHRoaXMuX2lkPW59ZnVuY3Rpb24gY1codCl7cmV0dXJuIGd1KCkudHJhbnNpdGlvbih0KX1mdW5jdGlvbiB2NSgpe3JldHVybisrZ2tlfXZhciBna2UsYnUsYmQ9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt5bCgpO1VIKCk7SEgoKTtXSCgpO3FIKCk7WUgoKTtYSCgpO2pIKCk7S0goKTtRSCgpO1pIKCk7SkgoKTtlVygpO3RXKCk7blcoKTtpVygpO2FXKCk7c1coKTtvVygpO0F2KCk7bFcoKTtna2U9MDtvKGFzLCJUcmFuc2l0aW9uIik7byhjVywidHJhbnNpdGlvbiIpO28odjUsIm5ld0lkIik7YnU9Z3UucHJvdG90eXBlO2FzLnByb3RvdHlwZT1jVy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmFzLHNlbGVjdDpUXyxzZWxlY3RBbGw6d18sc2VsZWN0Q2hpbGQ6YnUuc2VsZWN0Q2hpbGQsc2VsZWN0Q2hpbGRyZW46YnUuc2VsZWN0Q2hpbGRyZW4sZmlsdGVyOnlfLG1lcmdlOnZfLHNlbGVjdGlvbjprXyx0cmFuc2l0aW9uOl9fLGNhbGw6YnUuY2FsbCxub2RlczpidS5ub2Rlcyxub2RlOmJ1Lm5vZGUsc2l6ZTpidS5zaXplLGVtcHR5OmJ1LmVtcHR5LGVhY2g6YnUuZWFjaCxvbjp4XyxhdHRyOmhfLGF0dHJUd2VlbjpmXyxzdHlsZTpFXyxzdHlsZVR3ZWVuOlNfLHRleHQ6Q18sdGV4dFR3ZWVuOkFfLHJlbW92ZTpiXyx0d2VlbjpjXyxkZWxheTpkXyxkdXJhdGlvbjpwXyxlYXNlOm1fLGVhc2VWYXJ5aW5nOmdfLGVuZDpEXyxbU3ltYm9sLml0ZXJhdG9yXTpidVtTeW1ib2wuaXRlcmF0b3JdfX0pO2Z1bmN0aW9uIHg1KHQpe3JldHVybigodCo9Mik8PTE/dCp0KnQ6KHQtPTIpKnQqdCsyKS8yfXZhciB1Vz1OKCgpPT57InVzZSBzdHJpY3QiO28oeDUsImN1YmljSW5PdXQiKX0pO3ZhciBMXz1OKCgpPT57InVzZSBzdHJpY3QiO3VXKCl9KTtmdW5jdGlvbiB2a2UodCxlKXtmb3IodmFyIHI7IShyPXQuX190cmFuc2l0aW9uKXx8IShyPXJbZV0pOylpZighKHQ9dC5wYXJlbnROb2RlKSl0aHJvdyBuZXcgRXJyb3IoYHRyYW5zaXRpb24gJHtlfSBub3QgZm91bmRgKTtyZXR1cm4gcn1mdW5jdGlvbiBSXyh0KXt2YXIgZSxyO3QgaW5zdGFuY2VvZiBhcz8oZT10Ll9pZCx0PXQuX25hbWUpOihlPXY1KCksKHI9eWtlKS50aW1lPXd2KCksdD10PT1udWxsP251bGw6dCsiIik7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLGE9MDthPGk7KythKWZvcih2YXIgcz1uW2FdLGw9cy5sZW5ndGgsdSxoPTA7aDxsOysraCkodT1zW2hdKSYmeHUodSx0LGUsaCxzLHJ8fHZrZSh1LGUpKTtyZXR1cm4gbmV3IGFzKG4sdGhpcy5fcGFyZW50cyx0LGUpfXZhciB5a2UsaFc9TigoKT0+eyJ1c2Ugc3RyaWN0IjtiZCgpO0RzKCk7TF8oKTtwNSgpO3lrZT17dGltZTpudWxsLGRlbGF5OjAsZHVyYXRpb246MjUwLGVhc2U6eDV9O28odmtlLCJpbmhlcml0Iik7byhSXywiZGVmYXVsdCIpfSk7dmFyIGZXPU4oKCk9PnsidXNlIHN0cmljdCI7eWwoKTtWSCgpO2hXKCk7Z3UucHJvdG90eXBlLmludGVycnVwdD1sXztndS5wcm90b3R5cGUudHJhbnNpdGlvbj1SX30pO3ZhciBiNT1OKCgpPT57InVzZSBzdHJpY3QiO2ZXKCl9KTt2YXIgZFc9TigoKT0+eyJ1c2Ugc3RyaWN0In0pO3ZhciBwVz1OKCgpPT57InVzZSBzdHJpY3QifSk7dmFyIG1XPU4oKCk9PnsidXNlIHN0cmljdCJ9KTtmdW5jdGlvbiBnVyh0KXtyZXR1cm5bK3RbMF0sK3RbMV1dfWZ1bmN0aW9uIHhrZSh0KXtyZXR1cm5bZ1codFswXSksZ1codFsxXSldfWZ1bmN0aW9uIE5fKHQpe3JldHVybnt0eXBlOnR9fXZhciBfZ3QsRGd0LExndCxSZ3QsTmd0LE1ndCx5Vz1OKCgpPT57InVzZSBzdHJpY3QiO2I1KCk7ZFcoKTtwVygpO21XKCk7KHthYnM6X2d0LG1heDpEZ3QsbWluOkxndH09TWF0aCk7byhnVywibnVtYmVyMSIpO28oeGtlLCJudW1iZXIyIik7Umd0PXtuYW1lOiJ4IixoYW5kbGVzOlsidyIsImUiXS5tYXAoTl8pLGlucHV0Om8oZnVuY3Rpb24odCxlKXtyZXR1cm4gdD09bnVsbD9udWxsOltbK3RbMF0sZVswXVsxXV0sWyt0WzFdLGVbMV1bMV1dXX0sImlucHV0Iiksb3V0cHV0Om8oZnVuY3Rpb24odCl7cmV0dXJuIHQmJlt0WzBdWzBdLHRbMV1bMF1dfSwib3V0cHV0Iil9LE5ndD17bmFtZToieSIsaGFuZGxlczpbIm4iLCJzIl0ubWFwKE5fKSxpbnB1dDpvKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PW51bGw/bnVsbDpbW2VbMF1bMF0sK3RbMF1dLFtlWzFdWzBdLCt0WzFdXV19LCJpbnB1dCIpLG91dHB1dDpvKGZ1bmN0aW9uKHQpe3JldHVybiB0JiZbdFswXVsxXSx0WzFdWzFdXX0sIm91dHB1dCIpfSxNZ3Q9e25hbWU6Inh5IixoYW5kbGVzOlsibiIsInciLCJlIiwicyIsIm53IiwibmUiLCJzdyIsInNlIl0ubWFwKE5fKSxpbnB1dDpvKGZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP251bGw6eGtlKHQpfSwiaW5wdXQiKSxvdXRwdXQ6byhmdW5jdGlvbih0KXtyZXR1cm4gdH0sIm91dHB1dCIpfTtvKE5fLCJ0eXBlIil9KTt2YXIgdlc9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt5VygpfSk7ZnVuY3Rpb24geFcodCl7dGhpcy5fKz10WzBdO2ZvcihsZXQgZT0xLHI9dC5sZW5ndGg7ZTxyOysrZSl0aGlzLl8rPWFyZ3VtZW50c1tlXSt0W2VdfWZ1bmN0aW9uIFRrZSh0KXtsZXQgZT1NYXRoLmZsb29yKHQpO2lmKCEoZT49MCkpdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGRpZ2l0czogJHt0fWApO2lmKGU+MTUpcmV0dXJuIHhXO2xldCByPTEwKiplO3JldHVybiBmdW5jdGlvbihuKXt0aGlzLl8rPW5bMF07Zm9yKGxldCBpPTEsYT1uLmxlbmd0aDtpPGE7KytpKXRoaXMuXys9TWF0aC5yb3VuZChhcmd1bWVudHNbaV0qcikvcituW2ldfX1mdW5jdGlvbiBiVygpe3JldHVybiBuZXcgd2R9dmFyIE1fLElfLFRkLGJrZSx3ZCxUVz1OKCgpPT57InVzZSBzdHJpY3QiO01fPU1hdGguUEksSV89MipNXyxUZD0xZS02LGJrZT1JXy1UZDtvKHhXLCJhcHBlbmQiKTtvKFRrZSwiYXBwZW5kUm91bmQiKTt3ZD1jbGFzc3tzdGF0aWN7byh0aGlzLCJQYXRoIil9Y29uc3RydWN0b3IoZSl7dGhpcy5feDA9dGhpcy5feTA9dGhpcy5feDE9dGhpcy5feTE9bnVsbCx0aGlzLl89IiIsdGhpcy5fYXBwZW5kPWU9PW51bGw/eFc6VGtlKGUpfW1vdmVUbyhlLHIpe3RoaXMuX2FwcGVuZGBNJHt0aGlzLl94MD10aGlzLl94MT0rZX0sJHt0aGlzLl95MD10aGlzLl95MT0rcn1gfWNsb3NlUGF0aCgpe3RoaXMuX3gxIT09bnVsbCYmKHRoaXMuX3gxPXRoaXMuX3gwLHRoaXMuX3kxPXRoaXMuX3kwLHRoaXMuX2FwcGVuZGBaYCl9bGluZVRvKGUscil7dGhpcy5fYXBwZW5kYEwke3RoaXMuX3gxPStlfSwke3RoaXMuX3kxPStyfWB9cXVhZHJhdGljQ3VydmVUbyhlLHIsbixpKXt0aGlzLl9hcHBlbmRgUSR7K2V9LCR7K3J9LCR7dGhpcy5feDE9K259LCR7dGhpcy5feTE9K2l9YH1iZXppZXJDdXJ2ZVRvKGUscixuLGksYSxzKXt0aGlzLl9hcHBlbmRgQyR7K2V9LCR7K3J9LCR7K259LCR7K2l9LCR7dGhpcy5feDE9K2F9LCR7dGhpcy5feTE9K3N9YH1hcmNUbyhlLHIsbixpLGEpe2lmKGU9K2Uscj0rcixuPStuLGk9K2ksYT0rYSxhPDApdGhyb3cgbmV3IEVycm9yKGBuZWdhdGl2ZSByYWRpdXM6ICR7YX1gKTtsZXQgcz10aGlzLl94MSxsPXRoaXMuX3kxLHU9bi1lLGg9aS1yLGY9cy1lLGQ9bC1yLHA9ZipmK2QqZDtpZih0aGlzLl94MT09PW51bGwpdGhpcy5fYXBwZW5kYE0ke3RoaXMuX3gxPWV9LCR7dGhpcy5feTE9cn1gO2Vsc2UgaWYocD5UZClpZighKE1hdGguYWJzKGQqdS1oKmYpPlRkKXx8IWEpdGhpcy5fYXBwZW5kYEwke3RoaXMuX3gxPWV9LCR7dGhpcy5feTE9cn1gO2Vsc2V7bGV0IG09bi1zLGc9aS1sLHk9dSp1K2gqaCx2PW0qbStnKmcseD1NYXRoLnNxcnQoeSksYj1NYXRoLnNxcnQocCksVD1hKk1hdGgudGFuKChNXy1NYXRoLmFjb3MoKHkrcC12KS8oMip4KmIpKSkvMiksUz1UL2Isdz1UL3g7TWF0aC5hYnMoUy0xKT5UZCYmdGhpcy5fYXBwZW5kYEwke2UrUypmfSwke3IrUypkfWAsdGhpcy5fYXBwZW5kYEEke2F9LCR7YX0sMCwwLCR7KyhkKm0+ZipnKX0sJHt0aGlzLl94MT1lK3cqdX0sJHt0aGlzLl95MT1yK3cqaH1gfX1hcmMoZSxyLG4saSxhLHMpe2lmKGU9K2Uscj0rcixuPStuLHM9ISFzLG48MCl0aHJvdyBuZXcgRXJyb3IoYG5lZ2F0aXZlIHJhZGl1czogJHtufWApO2xldCBsPW4qTWF0aC5jb3MoaSksdT1uKk1hdGguc2luKGkpLGg9ZStsLGY9cit1LGQ9MV5zLHA9cz9pLWE6YS1pO3RoaXMuX3gxPT09bnVsbD90aGlzLl9hcHBlbmRgTSR7aH0sJHtmfWA6KE1hdGguYWJzKHRoaXMuX3gxLWgpPlRkfHxNYXRoLmFicyh0aGlzLl95MS1mKT5UZCkmJnRoaXMuX2FwcGVuZGBMJHtofSwke2Z9YCxuJiYocDwwJiYocD1wJUlfK0lfKSxwPmJrZT90aGlzLl9hcHBlbmRgQSR7bn0sJHtufSwwLDEsJHtkfSwke2UtbH0sJHtyLXV9QSR7bn0sJHtufSwwLDEsJHtkfSwke3RoaXMuX3gxPWh9LCR7dGhpcy5feTE9Zn1gOnA+VGQmJnRoaXMuX2FwcGVuZGBBJHtufSwke259LDAsJHsrKHA+PU1fKX0sJHtkfSwke3RoaXMuX3gxPWUrbipNYXRoLmNvcyhhKX0sJHt0aGlzLl95MT1yK24qTWF0aC5zaW4oYSl9YCl9cmVjdChlLHIsbixpKXt0aGlzLl9hcHBlbmRgTSR7dGhpcy5feDA9dGhpcy5feDE9K2V9LCR7dGhpcy5feTA9dGhpcy5feTE9K3J9aCR7bj0rbn12JHsraX1oJHstbn1aYH10b1N0cmluZygpe3JldHVybiB0aGlzLl99fTtvKGJXLCJwYXRoIik7YlcucHJvdG90eXBlPXdkLnByb3RvdHlwZX0pO3ZhciBPXz1OKCgpPT57InVzZSBzdHJpY3QiO1RXKCl9KTt2YXIgd1c9TigoKT0+eyJ1c2Ugc3RyaWN0In0pO3ZhciBrVz1OKCgpPT57InVzZSBzdHJpY3QifSk7dmFyIEVXPU4oKCk9PnsidXNlIHN0cmljdCJ9KTt2YXIgU1c9TigoKT0+eyJ1c2Ugc3RyaWN0In0pO3ZhciBDVz1OKCgpPT57InVzZSBzdHJpY3QifSk7dmFyIEFXPU4oKCk9PnsidXNlIHN0cmljdCJ9KTt2YXIgX1c9TigoKT0+eyJ1c2Ugc3RyaWN0In0pO2Z1bmN0aW9uIFBfKHQpe3JldHVybiBNYXRoLmFicyh0PU1hdGgucm91bmQodCkpPj0xZTIxP3QudG9Mb2NhbGVTdHJpbmcoImVuIikucmVwbGFjZSgvLC9nLCIiKTp0LnRvU3RyaW5nKDEwKX1mdW5jdGlvbiBrZCh0LGUpe2lmKChyPSh0PWU/dC50b0V4cG9uZW50aWFsKGUtMSk6dC50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoImUiKSk8MClyZXR1cm4gbnVsbDt2YXIgcixuPXQuc2xpY2UoMCxyKTtyZXR1cm5bbi5sZW5ndGg+MT9uWzBdK24uc2xpY2UoMik6biwrdC5zbGljZShyKzEpXX12YXIgRHY9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKFBfLCJkZWZhdWx0Iik7byhrZCwiZm9ybWF0RGVjaW1hbFBhcnRzIil9KTtmdW5jdGlvbiBibCh0KXtyZXR1cm4gdD1rZChNYXRoLmFicyh0KSksdD90WzFdOk5hTn12YXIgTHY9TigoKT0+eyJ1c2Ugc3RyaWN0IjtEdigpO28oYmwsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIEJfKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpPXIubGVuZ3RoLGE9W10scz0wLGw9dFswXSx1PTA7aT4wJiZsPjAmJih1K2wrMT5uJiYobD1NYXRoLm1heCgxLG4tdSkpLGEucHVzaChyLnN1YnN0cmluZyhpLT1sLGkrbCkpLCEoKHUrPWwrMSk+bikpOylsPXRbcz0ocysxKSV0Lmxlbmd0aF07cmV0dXJuIGEucmV2ZXJzZSgpLmpvaW4oZSl9fXZhciBEVz1OKCgpPT57InVzZSBzdHJpY3QiO28oQl8sImRlZmF1bHQiKX0pO2Z1bmN0aW9uIEZfKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9bMC05XS9nLGZ1bmN0aW9uKHIpe3JldHVybiB0WytyXX0pfX12YXIgTFc9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKEZfLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBMaCh0KXtpZighKGU9d2tlLmV4ZWModCkpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBmb3JtYXQ6ICIrdCk7dmFyIGU7cmV0dXJuIG5ldyBUNSh7ZmlsbDplWzFdLGFsaWduOmVbMl0sc2lnbjplWzNdLHN5bWJvbDplWzRdLHplcm86ZVs1XSx3aWR0aDplWzZdLGNvbW1hOmVbN10scHJlY2lzaW9uOmVbOF0mJmVbOF0uc2xpY2UoMSksdHJpbTplWzldLHR5cGU6ZVsxMF19KX1mdW5jdGlvbiBUNSh0KXt0aGlzLmZpbGw9dC5maWxsPT09dm9pZCAwPyIgIjp0LmZpbGwrIiIsdGhpcy5hbGlnbj10LmFsaWduPT09dm9pZCAwPyI+Ijp0LmFsaWduKyIiLHRoaXMuc2lnbj10LnNpZ249PT12b2lkIDA/Ii0iOnQuc2lnbisiIix0aGlzLnN5bWJvbD10LnN5bWJvbD09PXZvaWQgMD8iIjp0LnN5bWJvbCsiIix0aGlzLnplcm89ISF0Lnplcm8sdGhpcy53aWR0aD10LndpZHRoPT09dm9pZCAwP3ZvaWQgMDordC53aWR0aCx0aGlzLmNvbW1hPSEhdC5jb21tYSx0aGlzLnByZWNpc2lvbj10LnByZWNpc2lvbj09PXZvaWQgMD92b2lkIDA6K3QucHJlY2lzaW9uLHRoaXMudHJpbT0hIXQudHJpbSx0aGlzLnR5cGU9dC50eXBlPT09dm9pZCAwPyIiOnQudHlwZSsiIn12YXIgd2tlLCRfPU4oKCk9PnsidXNlIHN0cmljdCI7d2tlPS9eKD86KC4pPyhbPD49Xl0pKT8oWytcLSggXSk/KFskI10pPygwKT8oXGQrKT8oLCk/KFwuXGQrKT8ofik/KFthLXolXSk/JC9pO28oTGgsImZvcm1hdFNwZWNpZmllciIpO0xoLnByb3RvdHlwZT1UNS5wcm90b3R5cGU7byhUNSwiRm9ybWF0U3BlY2lmaWVyIik7VDUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWduK3RoaXMuc2lnbit0aGlzLnN5bWJvbCsodGhpcy56ZXJvPyIwIjoiIikrKHRoaXMud2lkdGg9PT12b2lkIDA/IiI6TWF0aC5tYXgoMSx0aGlzLndpZHRofDApKSsodGhpcy5jb21tYT8iLCI6IiIpKyh0aGlzLnByZWNpc2lvbj09PXZvaWQgMD8iIjoiLiIrTWF0aC5tYXgoMCx0aGlzLnByZWNpc2lvbnwwKSkrKHRoaXMudHJpbT8ifiI6IiIpK3RoaXMudHlwZX19KTtmdW5jdGlvbiB6Xyh0KXtlOmZvcih2YXIgZT10Lmxlbmd0aCxyPTEsbj0tMSxpO3I8ZTsrK3Ipc3dpdGNoKHRbcl0pe2Nhc2UiLiI6bj1pPXI7YnJlYWs7Y2FzZSIwIjpuPT09MCYmKG49ciksaT1yO2JyZWFrO2RlZmF1bHQ6aWYoISt0W3JdKWJyZWFrIGU7bj4wJiYobj0wKTticmVha31yZXR1cm4gbj4wP3Quc2xpY2UoMCxuKSt0LnNsaWNlKGkrMSk6dH12YXIgUlc9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKHpfLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBWXyh0LGUpe3ZhciByPWtkKHQsZSk7aWYoIXIpcmV0dXJuIHQrIiI7dmFyIG49clswXSxpPXJbMV0sYT1pLShHXz1NYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoaS8zKSkpKjMpKzEscz1uLmxlbmd0aDtyZXR1cm4gYT09PXM/bjphPnM/bituZXcgQXJyYXkoYS1zKzEpLmpvaW4oIjAiKTphPjA/bi5zbGljZSgwLGEpKyIuIituLnNsaWNlKGEpOiIwLiIrbmV3IEFycmF5KDEtYSkuam9pbigiMCIpK2tkKHQsTWF0aC5tYXgoMCxlK2EtMSkpWzBdfXZhciBHXyxVXz1OKCgpPT57InVzZSBzdHJpY3QiO0R2KCk7byhWXywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gdzUodCxlKXt2YXIgcj1rZCh0LGUpO2lmKCFyKXJldHVybiB0KyIiO3ZhciBuPXJbMF0saT1yWzFdO3JldHVybiBpPDA/IjAuIituZXcgQXJyYXkoLWkpLmpvaW4oIjAiKStuOm4ubGVuZ3RoPmkrMT9uLnNsaWNlKDAsaSsxKSsiLiIrbi5zbGljZShpKzEpOm4rbmV3IEFycmF5KGktbi5sZW5ndGgrMikuam9pbigiMCIpfXZhciBOVz1OKCgpPT57InVzZSBzdHJpY3QiO0R2KCk7byh3NSwiZGVmYXVsdCIpfSk7dmFyIEhfLE1XPU4oKCk9PnsidXNlIHN0cmljdCI7RHYoKTtVXygpO05XKCk7SF89eyIlIjpvKCh0LGUpPT4odCoxMDApLnRvRml4ZWQoZSksIiUiKSxiOm8odD0+TWF0aC5yb3VuZCh0KS50b1N0cmluZygyKSwiYiIpLGM6byh0PT50KyIiLCJjIiksZDpQXyxlOm8oKHQsZSk9PnQudG9FeHBvbmVudGlhbChlKSwiZSIpLGY6bygodCxlKT0+dC50b0ZpeGVkKGUpLCJmIiksZzpvKCh0LGUpPT50LnRvUHJlY2lzaW9uKGUpLCJnIiksbzpvKHQ9Pk1hdGgucm91bmQodCkudG9TdHJpbmcoOCksIm8iKSxwOm8oKHQsZSk9Pnc1KHQqMTAwLGUpLCJwIikscjp3NSxzOlZfLFg6byh0PT5NYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLCJYIikseDpvKHQ9Pk1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpLCJ4Iil9fSk7ZnVuY3Rpb24gazUodCl7cmV0dXJuIHR9dmFyIElXPU4oKCk9PnsidXNlIHN0cmljdCI7byhrNSwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gV18odCl7dmFyIGU9dC5ncm91cGluZz09PXZvaWQgMHx8dC50aG91c2FuZHM9PT12b2lkIDA/azU6Ql8oT1cuY2FsbCh0Lmdyb3VwaW5nLE51bWJlciksdC50aG91c2FuZHMrIiIpLHI9dC5jdXJyZW5jeT09PXZvaWQgMD8iIjp0LmN1cnJlbmN5WzBdKyIiLG49dC5jdXJyZW5jeT09PXZvaWQgMD8iIjp0LmN1cnJlbmN5WzFdKyIiLGk9dC5kZWNpbWFsPT09dm9pZCAwPyIuIjp0LmRlY2ltYWwrIiIsYT10Lm51bWVyYWxzPT09dm9pZCAwP2s1OkZfKE9XLmNhbGwodC5udW1lcmFscyxTdHJpbmcpKSxzPXQucGVyY2VudD09PXZvaWQgMD8iJSI6dC5wZXJjZW50KyIiLGw9dC5taW51cz09PXZvaWQgMD8iXHUyMjEyIjp0Lm1pbnVzKyIiLHU9dC5uYW49PT12b2lkIDA/Ik5hTiI6dC5uYW4rIiI7ZnVuY3Rpb24gaChkKXtkPUxoKGQpO3ZhciBwPWQuZmlsbCxtPWQuYWxpZ24sZz1kLnNpZ24seT1kLnN5bWJvbCx2PWQuemVybyx4PWQud2lkdGgsYj1kLmNvbW1hLFQ9ZC5wcmVjaXNpb24sUz1kLnRyaW0sdz1kLnR5cGU7dz09PSJuIj8oYj0hMCx3PSJnIik6SF9bd118fChUPT09dm9pZCAwJiYoVD0xMiksUz0hMCx3PSJnIiksKHZ8fHA9PT0iMCImJm09PT0iPSIpJiYodj0hMCxwPSIwIixtPSI9Iik7dmFyIEU9eT09PSIkIj9yOnk9PT0iIyImJi9bYm94WF0vLnRlc3Qodyk/IjAiK3cudG9Mb3dlckNhc2UoKToiIixfPXk9PT0iJCI/bjovWyVwXS8udGVzdCh3KT9zOiIiLEM9SF9bd10sRD0vW2RlZmdwcnMlXS8udGVzdCh3KTtUPVQ9PT12b2lkIDA/NjovW2dwcnNdLy50ZXN0KHcpP01hdGgubWF4KDEsTWF0aC5taW4oMjEsVCkpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAsVCkpO2Z1bmN0aW9uIE8oUil7dmFyIGs9RSxMPV8sQSxJLE07aWYodz09PSJjIilMPUMoUikrTCxSPSIiO2Vsc2V7Uj0rUjt2YXIgUD1SPDB8fDEvUjwwO2lmKFI9aXNOYU4oUik/dTpDKE1hdGguYWJzKFIpLFQpLFMmJihSPXpfKFIpKSxQJiYrUj09MCYmZyE9PSIrIiYmKFA9ITEpLGs9KFA/Zz09PSIoIj9nOmw6Zz09PSItInx8Zz09PSIoIj8iIjpnKStrLEw9KHc9PT0icyI/UFdbOCtHXy8zXToiIikrTCsoUCYmZz09PSIoIj8iKSI6IiIpLEQpe2ZvcihBPS0xLEk9Ui5sZW5ndGg7KytBPEk7KWlmKE09Ui5jaGFyQ29kZUF0KEEpLDQ4Pk18fE0+NTcpe0w9KE09PT00Nj9pK1Iuc2xpY2UoQSsxKTpSLnNsaWNlKEEpKStMLFI9Ui5zbGljZSgwLEEpO2JyZWFrfX19YiYmIXYmJihSPWUoUiwxLzApKTt2YXIgQj1rLmxlbmd0aCtSLmxlbmd0aCtMLmxlbmd0aCxGPUI8eD9uZXcgQXJyYXkoeC1CKzEpLmpvaW4ocCk6IiI7c3dpdGNoKGImJnYmJihSPWUoRitSLEYubGVuZ3RoP3gtTC5sZW5ndGg6MS8wKSxGPSIiKSxtKXtjYXNlIjwiOlI9aytSK0wrRjticmVhaztjYXNlIj0iOlI9aytGK1IrTDticmVhaztjYXNlIl4iOlI9Ri5zbGljZSgwLEI9Ri5sZW5ndGg+PjEpK2srUitMK0Yuc2xpY2UoQik7YnJlYWs7ZGVmYXVsdDpSPUYraytSK0w7YnJlYWt9cmV0dXJuIGEoUil9cmV0dXJuIG8oTywiZm9ybWF0IiksTy50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBkKyIifSxPfW8oaCwibmV3Rm9ybWF0Iik7ZnVuY3Rpb24gZihkLHApe3ZhciBtPWgoKGQ9TGgoZCksZC50eXBlPSJmIixkKSksZz1NYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoYmwocCkvMykpKSozLHk9TWF0aC5wb3coMTAsLWcpLHY9UFdbOCtnLzNdO3JldHVybiBmdW5jdGlvbih4KXtyZXR1cm4gbSh5KngpK3Z9fXJldHVybiBvKGYsImZvcm1hdFByZWZpeCIpLHtmb3JtYXQ6aCxmb3JtYXRQcmVmaXg6Zn19dmFyIE9XLFBXLEJXPU4oKCk9PnsidXNlIHN0cmljdCI7THYoKTtEVygpO0xXKCk7JF8oKTtSVygpO01XKCk7VV8oKTtJVygpO09XPUFycmF5LnByb3RvdHlwZS5tYXAsUFc9WyJ5IiwieiIsImEiLCJmIiwicCIsIm4iLCJceEI1IiwibSIsIiIsImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZIl07byhXXywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gcV8odCl7cmV0dXJuIEU1PVdfKHQpLGNjPUU1LmZvcm1hdCxTNT1FNS5mb3JtYXRQcmVmaXgsRTV9dmFyIEU1LGNjLFM1LEZXPU4oKCk9PnsidXNlIHN0cmljdCI7QlcoKTtxXyh7dGhvdXNhbmRzOiIsIixncm91cGluZzpbM10sY3VycmVuY3k6WyIkIiwiIl19KTtvKHFfLCJkZWZhdWx0TG9jYWxlIil9KTtmdW5jdGlvbiBDNSh0KXtyZXR1cm4gTWF0aC5tYXgoMCwtYmwoTWF0aC5hYnModCkpKX12YXIgJFc9TigoKT0+eyJ1c2Ugc3RyaWN0IjtMdigpO28oQzUsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIEE1KHQsZSl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKGJsKGUpLzMpKSkqMy1ibChNYXRoLmFicyh0KSkpfXZhciB6Vz1OKCgpPT57InVzZSBzdHJpY3QiO0x2KCk7byhBNSwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gXzUodCxlKXtyZXR1cm4gdD1NYXRoLmFicyh0KSxlPU1hdGguYWJzKGUpLXQsTWF0aC5tYXgoMCxibChlKS1ibCh0KSkrMX12YXIgR1c9TigoKT0+eyJ1c2Ugc3RyaWN0IjtMdigpO28oXzUsImRlZmF1bHQiKX0pO3ZhciBZXz1OKCgpPT57InVzZSBzdHJpY3QiO0ZXKCk7JF8oKTskVygpO3pXKCk7R1coKX0pO3ZhciBWVz1OKCgpPT57InVzZSBzdHJpY3QifSk7ZnVuY3Rpb24ga2tlKHQpe3ZhciBlPTAscj10LmNoaWxkcmVuLG49ciYmci5sZW5ndGg7aWYoIW4pZT0xO2Vsc2UgZm9yKDstLW4+PTA7KWUrPXJbbl0udmFsdWU7dC52YWx1ZT1lfWZ1bmN0aW9uIFhfKCl7cmV0dXJuIHRoaXMuZWFjaEFmdGVyKGtrZSl9dmFyIFVXPU4oKCk9PnsidXNlIHN0cmljdCI7byhra2UsImNvdW50Iik7byhYXywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gal8odCxlKXtsZXQgcj0tMTtmb3IobGV0IG4gb2YgdGhpcyl0LmNhbGwoZSxuLCsrcix0aGlzKTtyZXR1cm4gdGhpc312YXIgSFc9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKGpfLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBLXyh0LGUpe2Zvcih2YXIgcj10aGlzLG49W3JdLGksYSxzPS0xO3I9bi5wb3AoKTspaWYodC5jYWxsKGUsciwrK3MsdGhpcyksaT1yLmNoaWxkcmVuKWZvcihhPWkubGVuZ3RoLTE7YT49MDstLWEpbi5wdXNoKGlbYV0pO3JldHVybiB0aGlzfXZhciBXVz1OKCgpPT57InVzZSBzdHJpY3QiO28oS18sImRlZmF1bHQiKX0pO2Z1bmN0aW9uIFFfKHQsZSl7Zm9yKHZhciByPXRoaXMsbj1bcl0saT1bXSxhLHMsbCx1PS0xO3I9bi5wb3AoKTspaWYoaS5wdXNoKHIpLGE9ci5jaGlsZHJlbilmb3Iocz0wLGw9YS5sZW5ndGg7czxsOysrcyluLnB1c2goYVtzXSk7Zm9yKDtyPWkucG9wKCk7KXQuY2FsbChlLHIsKyt1LHRoaXMpO3JldHVybiB0aGlzfXZhciBxVz1OKCgpPT57InVzZSBzdHJpY3QiO28oUV8sImRlZmF1bHQiKX0pO2Z1bmN0aW9uIFpfKHQsZSl7bGV0IHI9LTE7Zm9yKGxldCBuIG9mIHRoaXMpaWYodC5jYWxsKGUsbiwrK3IsdGhpcykpcmV0dXJuIG59dmFyIFlXPU4oKCk9PnsidXNlIHN0cmljdCI7byhaXywiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gSl8odCl7cmV0dXJuIHRoaXMuZWFjaEFmdGVyKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj0rdChlLmRhdGEpfHwwLG49ZS5jaGlsZHJlbixpPW4mJm4ubGVuZ3RoOy0taT49MDspcis9bltpXS52YWx1ZTtlLnZhbHVlPXJ9KX12YXIgWFc9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKEpfLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBlRCh0KXtyZXR1cm4gdGhpcy5lYWNoQmVmb3JlKGZ1bmN0aW9uKGUpe2UuY2hpbGRyZW4mJmUuY2hpbGRyZW4uc29ydCh0KX0pfXZhciBqVz1OKCgpPT57InVzZSBzdHJpY3QiO28oZUQsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIHREKHQpe2Zvcih2YXIgZT10aGlzLHI9RWtlKGUsdCksbj1bZV07ZSE9PXI7KWU9ZS5wYXJlbnQsbi5wdXNoKGUpO2Zvcih2YXIgaT1uLmxlbmd0aDt0IT09cjspbi5zcGxpY2UoaSwwLHQpLHQ9dC5wYXJlbnQ7cmV0dXJuIG59ZnVuY3Rpb24gRWtlKHQsZSl7aWYodD09PWUpcmV0dXJuIHQ7dmFyIHI9dC5hbmNlc3RvcnMoKSxuPWUuYW5jZXN0b3JzKCksaT1udWxsO2Zvcih0PXIucG9wKCksZT1uLnBvcCgpO3Q9PT1lOylpPXQsdD1yLnBvcCgpLGU9bi5wb3AoKTtyZXR1cm4gaX12YXIgS1c9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKHRELCJkZWZhdWx0Iik7byhFa2UsImxlYXN0Q29tbW9uQW5jZXN0b3IiKX0pO2Z1bmN0aW9uIHJEKCl7Zm9yKHZhciB0PXRoaXMsZT1bdF07dD10LnBhcmVudDspZS5wdXNoKHQpO3JldHVybiBlfXZhciBRVz1OKCgpPT57InVzZSBzdHJpY3QiO28ockQsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIG5EKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcyl9dmFyIFpXPU4oKCk9PnsidXNlIHN0cmljdCI7byhuRCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gaUQoKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5lYWNoQmVmb3JlKGZ1bmN0aW9uKGUpe2UuY2hpbGRyZW58fHQucHVzaChlKX0pLHR9dmFyIEpXPU4oKCk9PnsidXNlIHN0cmljdCI7byhpRCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gYUQoKXt2YXIgdD10aGlzLGU9W107cmV0dXJuIHQuZWFjaChmdW5jdGlvbihyKXtyIT09dCYmZS5wdXNoKHtzb3VyY2U6ci5wYXJlbnQsdGFyZ2V0OnJ9KX0pLGV9dmFyIGVxPU4oKCk9PnsidXNlIHN0cmljdCI7byhhRCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24qc0QoKXt2YXIgdD10aGlzLGUscj1bdF0sbixpLGE7ZG8gZm9yKGU9ci5yZXZlcnNlKCkscj1bXTt0PWUucG9wKCk7KWlmKHlpZWxkIHQsbj10LmNoaWxkcmVuKWZvcihpPTAsYT1uLmxlbmd0aDtpPGE7KytpKXIucHVzaChuW2ldKTt3aGlsZShyLmxlbmd0aCl9dmFyIHRxPU4oKCk9PnsidXNlIHN0cmljdCI7byhzRCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gejAodCxlKXt0IGluc3RhbmNlb2YgTWFwPyh0PVt2b2lkIDAsdF0sZT09PXZvaWQgMCYmKGU9QWtlKSk6ZT09PXZvaWQgMCYmKGU9Q2tlKTtmb3IodmFyIHI9bmV3IFJ2KHQpLG4saT1bcl0sYSxzLGwsdTtuPWkucG9wKCk7KWlmKChzPWUobi5kYXRhKSkmJih1PShzPUFycmF5LmZyb20ocykpLmxlbmd0aCkpZm9yKG4uY2hpbGRyZW49cyxsPXUtMTtsPj0wOy0tbClpLnB1c2goYT1zW2xdPW5ldyBSdihzW2xdKSksYS5wYXJlbnQ9bixhLmRlcHRoPW4uZGVwdGgrMTtyZXR1cm4gci5lYWNoQmVmb3JlKERrZSl9ZnVuY3Rpb24gU2tlKCl7cmV0dXJuIHowKHRoaXMpLmVhY2hCZWZvcmUoX2tlKX1mdW5jdGlvbiBDa2UodCl7cmV0dXJuIHQuY2hpbGRyZW59ZnVuY3Rpb24gQWtlKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3RbMV06bnVsbH1mdW5jdGlvbiBfa2UodCl7dC5kYXRhLnZhbHVlIT09dm9pZCAwJiYodC52YWx1ZT10LmRhdGEudmFsdWUpLHQuZGF0YT10LmRhdGEuZGF0YX1mdW5jdGlvbiBEa2UodCl7dmFyIGU9MDtkbyB0LmhlaWdodD1lO3doaWxlKCh0PXQucGFyZW50KSYmdC5oZWlnaHQ8KytlKX1mdW5jdGlvbiBSdih0KXt0aGlzLmRhdGE9dCx0aGlzLmRlcHRoPXRoaXMuaGVpZ2h0PTAsdGhpcy5wYXJlbnQ9bnVsbH12YXIgcnE9TigoKT0+eyJ1c2Ugc3RyaWN0IjtVVygpO0hXKCk7V1coKTtxVygpO1lXKCk7WFcoKTtqVygpO0tXKCk7UVcoKTtaVygpO0pXKCk7ZXEoKTt0cSgpO28oejAsImhpZXJhcmNoeSIpO28oU2tlLCJub2RlX2NvcHkiKTtvKENrZSwib2JqZWN0Q2hpbGRyZW4iKTtvKEFrZSwibWFwQ2hpbGRyZW4iKTtvKF9rZSwiY29weURhdGEiKTtvKERrZSwiY29tcHV0ZUhlaWdodCIpO28oUnYsIk5vZGUiKTtSdi5wcm90b3R5cGU9ejAucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpSdixjb3VudDpYXyxlYWNoOmpfLGVhY2hBZnRlcjpRXyxlYWNoQmVmb3JlOktfLGZpbmQ6Wl8sc3VtOkpfLHNvcnQ6ZUQscGF0aDp0RCxhbmNlc3RvcnM6ckQsZGVzY2VuZGFudHM6bkQsbGVhdmVzOmlELGxpbmtzOmFELGNvcHk6U2tlLFtTeW1ib2wuaXRlcmF0b3JdOnNEfX0pO2Z1bmN0aW9uIG5xKHQpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdH12YXIgaXE9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKG5xLCJyZXF1aXJlZCIpfSk7ZnVuY3Rpb24gRzAoKXtyZXR1cm4gMH1mdW5jdGlvbiBFZCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19dmFyIGFxPU4oKCk9PnsidXNlIHN0cmljdCI7byhHMCwiY29uc3RhbnRaZXJvIik7byhFZCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gb0QodCl7dC54MD1NYXRoLnJvdW5kKHQueDApLHQueTA9TWF0aC5yb3VuZCh0LnkwKSx0LngxPU1hdGgucm91bmQodC54MSksdC55MT1NYXRoLnJvdW5kKHQueTEpfXZhciBzcT1OKCgpPT57InVzZSBzdHJpY3QiO28ob0QsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIGxEKHQsZSxyLG4saSl7Zm9yKHZhciBhPXQuY2hpbGRyZW4scyxsPS0xLHU9YS5sZW5ndGgsaD10LnZhbHVlJiYobi1lKS90LnZhbHVlOysrbDx1OylzPWFbbF0scy55MD1yLHMueTE9aSxzLngwPWUscy54MT1lKz1zLnZhbHVlKmh9dmFyIG9xPU4oKCk9PnsidXNlIHN0cmljdCI7byhsRCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gY0QodCxlLHIsbixpKXtmb3IodmFyIGE9dC5jaGlsZHJlbixzLGw9LTEsdT1hLmxlbmd0aCxoPXQudmFsdWUmJihpLXIpL3QudmFsdWU7KytsPHU7KXM9YVtsXSxzLngwPWUscy54MT1uLHMueTA9cixzLnkxPXIrPXMudmFsdWUqaH12YXIgbHE9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKGNELCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBSa2UodCxlLHIsbixpLGEpe2Zvcih2YXIgcz1bXSxsPWUuY2hpbGRyZW4sdSxoLGY9MCxkPTAscD1sLmxlbmd0aCxtLGcseT1lLnZhbHVlLHYseCxiLFQsUyx3LEU7ZjxwOyl7bT1pLXIsZz1hLW47ZG8gdj1sW2QrK10udmFsdWU7d2hpbGUoIXYmJmQ8cCk7Zm9yKHg9Yj12LHc9TWF0aC5tYXgoZy9tLG0vZykvKHkqdCksRT12KnYqdyxTPU1hdGgubWF4KGIvRSxFL3gpO2Q8cDsrK2Qpe2lmKHYrPWg9bFtkXS52YWx1ZSxoPHgmJih4PWgpLGg+YiYmKGI9aCksRT12KnYqdyxUPU1hdGgubWF4KGIvRSxFL3gpLFQ+Uyl7di09aDticmVha31TPVR9cy5wdXNoKHU9e3ZhbHVlOnYsZGljZTptPGcsY2hpbGRyZW46bC5zbGljZShmLGQpfSksdS5kaWNlP2xEKHUscixuLGkseT9uKz1nKnYveTphKTpjRCh1LHIsbix5P3IrPW0qdi95OmksYSkseS09dixmPWR9cmV0dXJuIHN9dmFyIExrZSxjcSx1cT1OKCgpPT57InVzZSBzdHJpY3QiO29xKCk7bHEoKTtMa2U9KDErTWF0aC5zcXJ0KDUpKS8yO28oUmtlLCJzcXVhcmlmeVJhdGlvIik7Y3E9byhmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIHIobixpLGEscyxsKXtSa2UoZSxuLGksYSxzLGwpfXJldHVybiBvKHIsInNxdWFyaWZ5Iiksci5yYXRpbz1mdW5jdGlvbihuKXtyZXR1cm4gdCgobj0rbik+MT9uOjEpfSxyfSwiY3VzdG9tIikoTGtlKX0pO2Z1bmN0aW9uIEQ1KCl7dmFyIHQ9Y3EsZT0hMSxyPTEsbj0xLGk9WzBdLGE9RzAscz1HMCxsPUcwLHU9RzAsaD1HMDtmdW5jdGlvbiBmKHApe3JldHVybiBwLngwPXAueTA9MCxwLngxPXIscC55MT1uLHAuZWFjaEJlZm9yZShkKSxpPVswXSxlJiZwLmVhY2hCZWZvcmUob0QpLHB9byhmLCJ0cmVlbWFwIik7ZnVuY3Rpb24gZChwKXt2YXIgbT1pW3AuZGVwdGhdLGc9cC54MCttLHk9cC55MCttLHY9cC54MS1tLHg9cC55MS1tO3Y8ZyYmKGc9dj0oZyt2KS8yKSx4PHkmJih5PXg9KHkreCkvMikscC54MD1nLHAueTA9eSxwLngxPXYscC55MT14LHAuY2hpbGRyZW4mJihtPWlbcC5kZXB0aCsxXT1hKHApLzIsZys9aChwKS1tLHkrPXMocCktbSx2LT1sKHApLW0seC09dShwKS1tLHY8ZyYmKGc9dj0oZyt2KS8yKSx4PHkmJih5PXg9KHkreCkvMiksdChwLGcseSx2LHgpKX1yZXR1cm4gbyhkLCJwb3NpdGlvbk5vZGUiKSxmLnJvdW5kPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSEhcCxmKTplfSxmLnNpemU9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K3BbMF0sbj0rcFsxXSxmKTpbcixuXX0sZi50aWxlPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW5xKHApLGYpOnR9LGYucGFkZGluZz1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9mLnBhZGRpbmdJbm5lcihwKS5wYWRkaW5nT3V0ZXIocCk6Zi5wYWRkaW5nSW5uZXIoKX0sZi5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dHlwZW9mIHA9PSJmdW5jdGlvbiI/cDpFZCgrcCksZik6YX0sZi5wYWRkaW5nT3V0ZXI9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/Zi5wYWRkaW5nVG9wKHApLnBhZGRpbmdSaWdodChwKS5wYWRkaW5nQm90dG9tKHApLnBhZGRpbmdMZWZ0KHApOmYucGFkZGluZ1RvcCgpfSxmLnBhZGRpbmdUb3A9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9dHlwZW9mIHA9PSJmdW5jdGlvbiI/cDpFZCgrcCksZik6c30sZi5wYWRkaW5nUmlnaHQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dHlwZW9mIHA9PSJmdW5jdGlvbiI/cDpFZCgrcCksZik6bH0sZi5wYWRkaW5nQm90dG9tPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXR5cGVvZiBwPT0iZnVuY3Rpb24iP3A6RWQoK3ApLGYpOnV9LGYucGFkZGluZ0xlZnQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9dHlwZW9mIHA9PSJmdW5jdGlvbiI/cDpFZCgrcCksZik6aH0sZn12YXIgaHE9TigoKT0+eyJ1c2Ugc3RyaWN0IjtzcSgpO3VxKCk7aXEoKTthcSgpO28oRDUsImRlZmF1bHQiKX0pO3ZhciBmcT1OKCgpPT57InVzZSBzdHJpY3QiO3JxKCk7aHEoKX0pO3ZhciBkcT1OKCgpPT57InVzZSBzdHJpY3QifSk7dmFyIHBxPU4oKCk9PnsidXNlIHN0cmljdCJ9KTtmdW5jdGlvbiBSaCh0LGUpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOnRoaXMucmFuZ2UodCk7YnJlYWs7ZGVmYXVsdDp0aGlzLnJhbmdlKGUpLmRvbWFpbih0KTticmVha31yZXR1cm4gdGhpc312YXIgTnY9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKFJoLCJpbml0UmFuZ2UiKX0pO2Z1bmN0aW9uIEpzKCl7dmFyIHQ9bmV3IEMwLGU9W10scj1bXSxuPXVEO2Z1bmN0aW9uIGkoYSl7bGV0IHM9dC5nZXQoYSk7aWYocz09PXZvaWQgMCl7aWYobiE9PXVEKXJldHVybiBuO3Quc2V0KGEscz1lLnB1c2goYSktMSl9cmV0dXJuIHJbcyVyLmxlbmd0aF19cmV0dXJuIG8oaSwic2NhbGUiKSxpLmRvbWFpbj1mdW5jdGlvbihhKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZS5zbGljZSgpO2U9W10sdD1uZXcgQzA7Zm9yKGxldCBzIG9mIGEpdC5oYXMocyl8fHQuc2V0KHMsZS5wdXNoKHMpLTEpO3JldHVybiBpfSxpLnJhbmdlPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPUFycmF5LmZyb20oYSksaSk6ci5zbGljZSgpfSxpLnVua25vd249ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49YSxpKTpufSxpLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gSnMoZSxyKS51bmtub3duKG4pfSxSaC5hcHBseShpLGFyZ3VtZW50cyksaX12YXIgdUQsaEQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtFaCgpO052KCk7dUQ9U3ltYm9sKCJpbXBsaWNpdCIpO28oSnMsIm9yZGluYWwiKX0pO2Z1bmN0aW9uIFYwKCl7dmFyIHQ9SnMoKS51bmtub3duKHZvaWQgMCksZT10LmRvbWFpbixyPXQucmFuZ2Usbj0wLGk9MSxhLHMsbD0hMSx1PTAsaD0wLGY9LjU7ZGVsZXRlIHQudW5rbm93bjtmdW5jdGlvbiBkKCl7dmFyIHA9ZSgpLmxlbmd0aCxtPWk8bixnPW0/aTpuLHk9bT9uOmk7YT0oeS1nKS9NYXRoLm1heCgxLHAtdStoKjIpLGwmJihhPU1hdGguZmxvb3IoYSkpLGcrPSh5LWctYSoocC11KSkqZixzPWEqKDEtdSksbCYmKGc9TWF0aC5yb3VuZChnKSxzPU1hdGgucm91bmQocykpO3ZhciB2PXEzKHApLm1hcChmdW5jdGlvbih4KXtyZXR1cm4gZythKnh9KTtyZXR1cm4gcihtP3YucmV2ZXJzZSgpOnYpfXJldHVybiBvKGQsInJlc2NhbGUiKSx0LmRvbWFpbj1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZShwKSxkKCkpOmUoKX0sdC5yYW5nZT1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oW24saV09cCxuPStuLGk9K2ksZCgpKTpbbixpXX0sdC5yYW5nZVJvdW5kPWZ1bmN0aW9uKHApe3JldHVybltuLGldPXAsbj0rbixpPStpLGw9ITAsZCgpfSx0LmJhbmR3aWR0aD1mdW5jdGlvbigpe3JldHVybiBzfSx0LnN0ZXA9ZnVuY3Rpb24oKXtyZXR1cm4gYX0sdC5yb3VuZD1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0hIXAsZCgpKTpsfSx0LnBhZGRpbmc9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9TWF0aC5taW4oMSxoPStwKSxkKCkpOnV9LHQucGFkZGluZ0lubmVyPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PU1hdGgubWluKDEscCksZCgpKTp1fSx0LnBhZGRpbmdPdXRlcj1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0rcCxkKCkpOmh9LHQuYWxpZ249ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9TWF0aC5tYXgoMCxNYXRoLm1pbigxLHApKSxkKCkpOmZ9LHQuY29weT1mdW5jdGlvbigpe3JldHVybiBWMChlKCksW24saV0pLnJvdW5kKGwpLnBhZGRpbmdJbm5lcih1KS5wYWRkaW5nT3V0ZXIoaCkuYWxpZ24oZil9LFJoLmFwcGx5KGQoKSxhcmd1bWVudHMpfXZhciBtcT1OKCgpPT57InVzZSBzdHJpY3QiO0VoKCk7TnYoKTtoRCgpO28oVjAsImJhbmQiKX0pO2Z1bmN0aW9uIGZEKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX12YXIgZ3E9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKGZELCJjb25zdGFudHMiKX0pO2Z1bmN0aW9uIGREKHQpe3JldHVybit0fXZhciB5cT1OKCgpPT57InVzZSBzdHJpY3QiO28oZEQsIm51bWJlciIpfSk7ZnVuY3Rpb24gVTAodCl7cmV0dXJuIHR9ZnVuY3Rpb24gcEQodCxlKXtyZXR1cm4oZS09dD0rdCk/ZnVuY3Rpb24ocil7cmV0dXJuKHItdCkvZX06ZkQoaXNOYU4oZSk/TmFOOi41KX1mdW5jdGlvbiBOa2UodCxlKXt2YXIgcjtyZXR1cm4gdD5lJiYocj10LHQ9ZSxlPXIpLGZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLm1heCh0LE1hdGgubWluKGUsbikpfX1mdW5jdGlvbiBNa2UodCxlLHIpe3ZhciBuPXRbMF0saT10WzFdLGE9ZVswXSxzPWVbMV07cmV0dXJuIGk8bj8obj1wRChpLG4pLGE9cihzLGEpKToobj1wRChuLGkpLGE9cihhLHMpKSxmdW5jdGlvbihsKXtyZXR1cm4gYShuKGwpKX19ZnVuY3Rpb24gSWtlKHQsZSxyKXt2YXIgbj1NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCktMSxpPW5ldyBBcnJheShuKSxhPW5ldyBBcnJheShuKSxzPS0xO2Zvcih0W25dPHRbMF0mJih0PXQuc2xpY2UoKS5yZXZlcnNlKCksZT1lLnNsaWNlKCkucmV2ZXJzZSgpKTsrK3M8bjspaVtzXT1wRCh0W3NdLHRbcysxXSksYVtzXT1yKGVbc10sZVtzKzFdKTtyZXR1cm4gZnVuY3Rpb24obCl7dmFyIHU9T0EodCxsLDEsbiktMTtyZXR1cm4gYVt1XShpW3VdKGwpKX19ZnVuY3Rpb24gTDUodCxlKXtyZXR1cm4gZS5kb21haW4odC5kb21haW4oKSkucmFuZ2UodC5yYW5nZSgpKS5pbnRlcnBvbGF0ZSh0LmludGVycG9sYXRlKCkpLmNsYW1wKHQuY2xhbXAoKSkudW5rbm93bih0LnVua25vd24oKSl9ZnVuY3Rpb24gT2tlKCl7dmFyIHQ9dnEsZT12cSxyPURoLG4saSxhLHM9VTAsbCx1LGg7ZnVuY3Rpb24gZigpe3ZhciBwPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKTtyZXR1cm4gcyE9PVUwJiYocz1Oa2UodFswXSx0W3AtMV0pKSxsPXA+Mj9Ja2U6TWtlLHU9aD1udWxsLGR9byhmLCJyZXNjYWxlIik7ZnVuY3Rpb24gZChwKXtyZXR1cm4gcD09bnVsbHx8aXNOYU4ocD0rcCk/YToodXx8KHU9bCh0Lm1hcChuKSxlLHIpKSkobihzKHApKSl9cmV0dXJuIG8oZCwic2NhbGUiKSxkLmludmVydD1mdW5jdGlvbihwKXtyZXR1cm4gcyhpKChofHwoaD1sKGUsdC5tYXAobiksS2kpKSkocCkpKX0sZC5kb21haW49ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9QXJyYXkuZnJvbShwLGREKSxmKCkpOnQuc2xpY2UoKX0sZC5yYW5nZT1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1BcnJheS5mcm9tKHApLGYoKSk6ZS5zbGljZSgpfSxkLnJhbmdlUm91bmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGU9QXJyYXkuZnJvbShwKSxyPXM1LGYoKX0sZC5jbGFtcD1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1wPyEwOlUwLGYoKSk6cyE9PVUwfSxkLmludGVycG9sYXRlPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXAsZigpKTpyfSxkLnVua25vd249ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9cCxkKTphfSxmdW5jdGlvbihwLG0pe3JldHVybiBuPXAsaT1tLGYoKX19ZnVuY3Rpb24gTXYoKXtyZXR1cm4gT2tlKCkoVTAsVTApfXZhciB2cSxtRD1OKCgpPT57InVzZSBzdHJpY3QiO0VoKCk7QjAoKTtncSgpO3lxKCk7dnE9WzAsMV07byhVMCwiaWRlbnRpdHkiKTtvKHBELCJub3JtYWxpemUiKTtvKE5rZSwiY2xhbXBlciIpO28oTWtlLCJiaW1hcCIpO28oSWtlLCJwb2x5bWFwIik7byhMNSwiY29weSIpO28oT2tlLCJ0cmFuc2Zvcm1lciIpO28oTXYsImNvbnRpbnVvdXMiKX0pO2Z1bmN0aW9uIGdEKHQsZSxyLG4pe3ZhciBpPUEwKHQsZSxyKSxhO3N3aXRjaChuPUxoKG4/PyIsZiIpLG4udHlwZSl7Y2FzZSJzIjp7dmFyIHM9TWF0aC5tYXgoTWF0aC5hYnModCksTWF0aC5hYnMoZSkpO3JldHVybiBuLnByZWNpc2lvbj09bnVsbCYmIWlzTmFOKGE9QTUoaSxzKSkmJihuLnByZWNpc2lvbj1hKSxTNShuLHMpfWNhc2UiIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJwIjpjYXNlInIiOntuLnByZWNpc2lvbj09bnVsbCYmIWlzTmFOKGE9XzUoaSxNYXRoLm1heChNYXRoLmFicyh0KSxNYXRoLmFicyhlKSkpKSYmKG4ucHJlY2lzaW9uPWEtKG4udHlwZT09PSJlIikpO2JyZWFrfWNhc2UiZiI6Y2FzZSIlIjp7bi5wcmVjaXNpb249PW51bGwmJiFpc05hTihhPUM1KGkpKSYmKG4ucHJlY2lzaW9uPWEtKG4udHlwZT09PSIlIikqMik7YnJlYWt9fXJldHVybiBjYyhuKX12YXIgeHE9TigoKT0+eyJ1c2Ugc3RyaWN0IjtFaCgpO1lfKCk7byhnRCwidGlja0Zvcm1hdCIpfSk7ZnVuY3Rpb24gUGtlKHQpe3ZhciBlPXQuZG9tYWluO3JldHVybiB0LnRpY2tzPWZ1bmN0aW9uKHIpe3ZhciBuPWUoKTtyZXR1cm4gVTMoblswXSxuW24ubGVuZ3RoLTFdLHI/PzEwKX0sdC50aWNrRm9ybWF0PWZ1bmN0aW9uKHIsbil7dmFyIGk9ZSgpO3JldHVybiBnRChpWzBdLGlbaS5sZW5ndGgtMV0scj8/MTAsbil9LHQubmljZT1mdW5jdGlvbihyKXtyPT1udWxsJiYocj0xMCk7dmFyIG49ZSgpLGk9MCxhPW4ubGVuZ3RoLTEscz1uW2ldLGw9blthXSx1LGgsZj0xMDtmb3IobDxzJiYoaD1zLHM9bCxsPWgsaD1pLGk9YSxhPWgpO2YtLSA+MDspe2lmKGg9b3YocyxsLHIpLGg9PT11KXJldHVybiBuW2ldPXMsblthXT1sLGUobik7aWYoaD4wKXM9TWF0aC5mbG9vcihzL2gpKmgsbD1NYXRoLmNlaWwobC9oKSpoO2Vsc2UgaWYoaDwwKXM9TWF0aC5jZWlsKHMqaCkvaCxsPU1hdGguZmxvb3IobCpoKS9oO2Vsc2UgYnJlYWs7dT1ofXJldHVybiB0fSx0fWZ1bmN0aW9uIFRsKCl7dmFyIHQ9TXYoKTtyZXR1cm4gdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEw1KHQsVGwoKSl9LFJoLmFwcGx5KHQsYXJndW1lbnRzKSxQa2UodCl9dmFyIGJxPU4oKCk9PnsidXNlIHN0cmljdCI7RWgoKTttRCgpO052KCk7eHEoKTtvKFBrZSwibGluZWFyaXNoIik7byhUbCwibGluZWFyIil9KTtmdW5jdGlvbiB5RCh0LGUpe3Q9dC5zbGljZSgpO3ZhciByPTAsbj10Lmxlbmd0aC0xLGk9dFtyXSxhPXRbbl0scztyZXR1cm4gYTxpJiYocz1yLHI9bixuPXMscz1pLGk9YSxhPXMpLHRbcl09ZS5mbG9vcihpKSx0W25dPWUuY2VpbChhKSx0fXZhciBUcT1OKCgpPT57InVzZSBzdHJpY3QiO28oeUQsIm5pY2UiKX0pO2Z1bmN0aW9uIHhuKHQsZSxyLG4pe2Z1bmN0aW9uIGkoYSl7cmV0dXJuIHQoYT1hcmd1bWVudHMubGVuZ3RoPT09MD9uZXcgRGF0ZTpuZXcgRGF0ZSgrYSkpLGF9cmV0dXJuIG8oaSwiaW50ZXJ2YWwiKSxpLmZsb29yPWE9Pih0KGE9bmV3IERhdGUoK2EpKSxhKSxpLmNlaWw9YT0+KHQoYT1uZXcgRGF0ZShhLTEpKSxlKGEsMSksdChhKSxhKSxpLnJvdW5kPWE9PntsZXQgcz1pKGEpLGw9aS5jZWlsKGEpO3JldHVybiBhLXM8bC1hP3M6bH0saS5vZmZzZXQ9KGEscyk9PihlKGE9bmV3IERhdGUoK2EpLHM9PW51bGw/MTpNYXRoLmZsb29yKHMpKSxhKSxpLnJhbmdlPShhLHMsbCk9PntsZXQgdT1bXTtpZihhPWkuY2VpbChhKSxsPWw9PW51bGw/MTpNYXRoLmZsb29yKGwpLCEoYTxzKXx8IShsPjApKXJldHVybiB1O2xldCBoO2RvIHUucHVzaChoPW5ldyBEYXRlKCthKSksZShhLGwpLHQoYSk7d2hpbGUoaDxhJiZhPHMpO3JldHVybiB1fSxpLmZpbHRlcj1hPT54bihzPT57aWYocz49cylmb3IoO3QocyksIWEocyk7KXMuc2V0VGltZShzLTEpfSwocyxsKT0+e2lmKHM+PXMpaWYobDwwKWZvcig7KytsPD0wOylmb3IoO2UocywtMSksIWEocyk7KTtlbHNlIGZvcig7LS1sPj0wOylmb3IoO2UocywxKSwhYShzKTspO30pLHImJihpLmNvdW50PShhLHMpPT4odkQuc2V0VGltZSgrYSkseEQuc2V0VGltZSgrcyksdCh2RCksdCh4RCksTWF0aC5mbG9vcihyKHZELHhEKSkpLGkuZXZlcnk9YT0+KGE9TWF0aC5mbG9vcihhKSwhaXNGaW5pdGUoYSl8fCEoYT4wKT9udWxsOmE+MT9pLmZpbHRlcihuP3M9Pm4ocyklYT09PTA6cz0+aS5jb3VudCgwLHMpJWE9PT0wKTppKSksaX12YXIgdkQseEQsVHU9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt2RD1uZXcgRGF0ZSx4RD1uZXcgRGF0ZTtvKHhuLCJ0aW1lSW50ZXJ2YWwiKX0pO3ZhciB1Yyx3cSxiRD1OKCgpPT57InVzZSBzdHJpY3QiO1R1KCk7dWM9eG4oKCk9Pnt9LCh0LGUpPT57dC5zZXRUaW1lKCt0K2UpfSwodCxlKT0+ZS10KTt1Yy5ldmVyeT10PT4odD1NYXRoLmZsb29yKHQpLCFpc0Zpbml0ZSh0KXx8ISh0PjApP251bGw6dD4xP3huKGU9PntlLnNldFRpbWUoTWF0aC5mbG9vcihlL3QpKnQpfSwoZSxyKT0+e2Uuc2V0VGltZSgrZStyKnQpfSwoZSxyKT0+KHItZSkvdCk6dWMpO3dxPXVjLnJhbmdlfSk7dmFyIGVvLGtxLFREPU4oKCk9PnsidXNlIHN0cmljdCI7VHUoKTtlbz14bih0PT57dC5zZXRUaW1lKHQtdC5nZXRNaWxsaXNlY29uZHMoKSl9LCh0LGUpPT57dC5zZXRUaW1lKCt0K2UqMWUzKX0sKHQsZSk9PihlLXQpLzFlMyx0PT50LmdldFVUQ1NlY29uZHMoKSksa3E9ZW8ucmFuZ2V9KTt2YXIgd3UsQmtlLFI1LEZrZSx3RD1OKCgpPT57InVzZSBzdHJpY3QiO1R1KCk7d3U9eG4odD0+e3Quc2V0VGltZSh0LXQuZ2V0TWlsbGlzZWNvbmRzKCktdC5nZXRTZWNvbmRzKCkqMWUzKX0sKHQsZSk9Pnt0LnNldFRpbWUoK3QrZSo2ZTQpfSwodCxlKT0+KGUtdCkvNmU0LHQ9PnQuZ2V0TWludXRlcygpKSxCa2U9d3UucmFuZ2UsUjU9eG4odD0+e3Quc2V0VVRDU2Vjb25kcygwLDApfSwodCxlKT0+e3Quc2V0VGltZSgrdCtlKjZlNCl9LCh0LGUpPT4oZS10KS82ZTQsdD0+dC5nZXRVVENNaW51dGVzKCkpLEZrZT1SNS5yYW5nZX0pO3ZhciBrdSwka2UsTjUsemtlLGtEPU4oKCk9PnsidXNlIHN0cmljdCI7VHUoKTtrdT14bih0PT57dC5zZXRUaW1lKHQtdC5nZXRNaWxsaXNlY29uZHMoKS10LmdldFNlY29uZHMoKSoxZTMtdC5nZXRNaW51dGVzKCkqNmU0KX0sKHQsZSk9Pnt0LnNldFRpbWUoK3QrZSozNmU1KX0sKHQsZSk9PihlLXQpLzM2ZTUsdD0+dC5nZXRIb3VycygpKSwka2U9a3UucmFuZ2UsTjU9eG4odD0+e3Quc2V0VVRDTWludXRlcygwLDAsMCl9LCh0LGUpPT57dC5zZXRUaW1lKCt0K2UqMzZlNSl9LCh0LGUpPT4oZS10KS8zNmU1LHQ9PnQuZ2V0VVRDSG91cnMoKSksemtlPU41LnJhbmdlfSk7dmFyIFJvLEdrZSxPdixWa2UsTTUsVWtlLEVEPU4oKCk9PnsidXNlIHN0cmljdCI7VHUoKTtSbz14bih0PT50LnNldEhvdXJzKDAsMCwwLDApLCh0LGUpPT50LnNldERhdGUodC5nZXREYXRlKCkrZSksKHQsZSk9PihlLXQtKGUuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKjZlNCkvODY0ZTUsdD0+dC5nZXREYXRlKCktMSksR2tlPVJvLnJhbmdlLE92PXhuKHQ9Pnt0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSwodCxlKT0+e3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKStlKX0sKHQsZSk9PihlLXQpLzg2NGU1LHQ9PnQuZ2V0VVRDRGF0ZSgpLTEpLFZrZT1Pdi5yYW5nZSxNNT14bih0PT57dC5zZXRVVENIb3VycygwLDAsMCwwKX0sKHQsZSk9Pnt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCkrZSl9LCh0LGUpPT4oZS10KS84NjRlNSx0PT5NYXRoLmZsb29yKHQvODY0ZTUpKSxVa2U9TTUucmFuZ2V9KTtmdW5jdGlvbiBBZCh0KXtyZXR1cm4geG4oZT0+e2Uuc2V0RGF0ZShlLmdldERhdGUoKS0oZS5nZXREYXkoKSs3LXQpJTcpLGUuc2V0SG91cnMoMCwwLDAsMCl9LChlLHIpPT57ZS5zZXREYXRlKGUuZ2V0RGF0ZSgpK3IqNyl9LChlLHIpPT4oci1lLShyLmdldFRpbWV6b25lT2Zmc2V0KCktZS5nZXRUaW1lem9uZU9mZnNldCgpKSo2ZTQpLzYwNDhlNSl9ZnVuY3Rpb24gX2QodCl7cmV0dXJuIHhuKGU9PntlLnNldFVUQ0RhdGUoZS5nZXRVVENEYXRlKCktKGUuZ2V0VVRDRGF5KCkrNy10KSU3KSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSwoZSxyKT0+e2Uuc2V0VVRDRGF0ZShlLmdldFVUQ0RhdGUoKStyKjcpfSwoZSxyKT0+KHItZSkvNjA0OGU1KX12YXIgd2wsTmgsSTUsTzUsZmMsUDUsQjUsU3EsSGtlLFdrZSxxa2UsWWtlLFhrZSxqa2UsRGQsSDAsQ3EsQXEsTWgsX3EsRHEsTHEsS2tlLFFrZSxaa2UsSmtlLGVFZSx0RWUsU0Q9TigoKT0+eyJ1c2Ugc3RyaWN0IjtUdSgpO28oQWQsInRpbWVXZWVrZGF5Iik7d2w9QWQoMCksTmg9QWQoMSksSTU9QWQoMiksTzU9QWQoMyksZmM9QWQoNCksUDU9QWQoNSksQjU9QWQoNiksU3E9d2wucmFuZ2UsSGtlPU5oLnJhbmdlLFdrZT1JNS5yYW5nZSxxa2U9TzUucmFuZ2UsWWtlPWZjLnJhbmdlLFhrZT1QNS5yYW5nZSxqa2U9QjUucmFuZ2U7byhfZCwidXRjV2Vla2RheSIpO0RkPV9kKDApLEgwPV9kKDEpLENxPV9kKDIpLEFxPV9kKDMpLE1oPV9kKDQpLF9xPV9kKDUpLERxPV9kKDYpLExxPURkLnJhbmdlLEtrZT1IMC5yYW5nZSxRa2U9Q3EucmFuZ2UsWmtlPUFxLnJhbmdlLEprZT1NaC5yYW5nZSxlRWU9X3EucmFuZ2UsdEVlPURxLnJhbmdlfSk7dmFyIEV1LHJFZSxGNSxuRWUsQ0Q9TigoKT0+eyJ1c2Ugc3RyaWN0IjtUdSgpO0V1PXhuKHQ9Pnt0LnNldERhdGUoMSksdC5zZXRIb3VycygwLDAsMCwwKX0sKHQsZSk9Pnt0LnNldE1vbnRoKHQuZ2V0TW9udGgoKStlKX0sKHQsZSk9PmUuZ2V0TW9udGgoKS10LmdldE1vbnRoKCkrKGUuZ2V0RnVsbFllYXIoKS10LmdldEZ1bGxZZWFyKCkpKjEyLHQ9PnQuZ2V0TW9udGgoKSksckVlPUV1LnJhbmdlLEY1PXhuKHQ9Pnt0LnNldFVUQ0RhdGUoMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0sKHQsZSk9Pnt0LnNldFVUQ01vbnRoKHQuZ2V0VVRDTW9udGgoKStlKX0sKHQsZSk9PmUuZ2V0VVRDTW9udGgoKS10LmdldFVUQ01vbnRoKCkrKGUuZ2V0VVRDRnVsbFllYXIoKS10LmdldFVUQ0Z1bGxZZWFyKCkpKjEyLHQ9PnQuZ2V0VVRDTW9udGgoKSksbkVlPUY1LnJhbmdlfSk7dmFyIHRvLGlFZSxrbCxhRWUsQUQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtUdSgpO3RvPXhuKHQ9Pnt0LnNldE1vbnRoKDAsMSksdC5zZXRIb3VycygwLDAsMCwwKX0sKHQsZSk9Pnt0LnNldEZ1bGxZZWFyKHQuZ2V0RnVsbFllYXIoKStlKX0sKHQsZSk9PmUuZ2V0RnVsbFllYXIoKS10LmdldEZ1bGxZZWFyKCksdD0+dC5nZXRGdWxsWWVhcigpKTt0by5ldmVyeT10PT4haXNGaW5pdGUodD1NYXRoLmZsb29yKHQpKXx8ISh0PjApP251bGw6eG4oZT0+e2Uuc2V0RnVsbFllYXIoTWF0aC5mbG9vcihlLmdldEZ1bGxZZWFyKCkvdCkqdCksZS5zZXRNb250aCgwLDEpLGUuc2V0SG91cnMoMCwwLDAsMCl9LChlLHIpPT57ZS5zZXRGdWxsWWVhcihlLmdldEZ1bGxZZWFyKCkrcip0KX0pO2lFZT10by5yYW5nZSxrbD14bih0PT57dC5zZXRVVENNb250aCgwLDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LCh0LGUpPT57dC5zZXRVVENGdWxsWWVhcih0LmdldFVUQ0Z1bGxZZWFyKCkrZSl9LCh0LGUpPT5lLmdldFVUQ0Z1bGxZZWFyKCktdC5nZXRVVENGdWxsWWVhcigpLHQ9PnQuZ2V0VVRDRnVsbFllYXIoKSk7a2wuZXZlcnk9dD0+IWlzRmluaXRlKHQ9TWF0aC5mbG9vcih0KSl8fCEodD4wKT9udWxsOnhuKGU9PntlLnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3IoZS5nZXRVVENGdWxsWWVhcigpL3QpKnQpLGUuc2V0VVRDTW9udGgoMCwxKSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSwoZSxyKT0+e2Uuc2V0VVRDRnVsbFllYXIoZS5nZXRVVENGdWxsWWVhcigpK3IqdCl9KTthRWU9a2wucmFuZ2V9KTtmdW5jdGlvbiBOcSh0LGUscixuLGksYSl7bGV0IHM9W1tlbywxLDFlM10sW2VvLDUsNSoxZTNdLFtlbywxNSwxNSoxZTNdLFtlbywzMCwzMCoxZTNdLFthLDEsNmU0XSxbYSw1LDUqNmU0XSxbYSwxNSwxNSo2ZTRdLFthLDMwLDMwKjZlNF0sW2ksMSwzNmU1XSxbaSwzLDMqMzZlNV0sW2ksNiw2KjM2ZTVdLFtpLDEyLDEyKjM2ZTVdLFtuLDEsODY0ZTVdLFtuLDIsMio4NjRlNV0sW3IsMSw2MDQ4ZTVdLFtlLDEsMjU5MmU2XSxbZSwzLDMqMjU5MmU2XSxbdCwxLDMxNTM2ZTZdXTtmdW5jdGlvbiBsKGgsZixkKXtsZXQgcD1mPGg7cCYmKFtoLGZdPVtmLGhdKTtsZXQgbT1kJiZ0eXBlb2YgZC5yYW5nZT09ImZ1bmN0aW9uIj9kOnUoaCxmLGQpLGc9bT9tLnJhbmdlKGgsK2YrMSk6W107cmV0dXJuIHA/Zy5yZXZlcnNlKCk6Z31vKGwsInRpY2tzIik7ZnVuY3Rpb24gdShoLGYsZCl7bGV0IHA9TWF0aC5hYnMoZi1oKS9kLG09bWQoKFssLHZdKT0+dikucmlnaHQocyxwKTtpZihtPT09cy5sZW5ndGgpcmV0dXJuIHQuZXZlcnkoQTAoaC8zMTUzNmU2LGYvMzE1MzZlNixkKSk7aWYobT09PTApcmV0dXJuIHVjLmV2ZXJ5KE1hdGgubWF4KEEwKGgsZixkKSwxKSk7bGV0W2cseV09c1twL3NbbS0xXVsyXTxzW21dWzJdL3A/bS0xOm1dO3JldHVybiBnLmV2ZXJ5KHkpfXJldHVybiBvKHUsInRpY2tJbnRlcnZhbCIpLFtsLHVdfXZhciBvRWUsbEVlLF9ELERELE1xPU4oKCk9PnsidXNlIHN0cmljdCI7RWgoKTtiRCgpO1REKCk7d0QoKTtrRCgpO0VEKCk7U0QoKTtDRCgpO0FEKCk7byhOcSwidGlja2VyIik7W29FZSxsRWVdPU5xKGtsLEY1LERkLE01LE41LFI1KSxbX0QsRERdPU5xKHRvLEV1LHdsLFJvLGt1LHd1KX0pO3ZhciAkNT1OKCgpPT57InVzZSBzdHJpY3QiO2JEKCk7VEQoKTt3RCgpO2tEKCk7RUQoKTtTRCgpO0NEKCk7QUQoKTtNcSgpfSk7ZnVuY3Rpb24gTEQodCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgZT1uZXcgRGF0ZSgtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCk7cmV0dXJuIGUuc2V0RnVsbFllYXIodC55KSxlfXJldHVybiBuZXcgRGF0ZSh0LnksdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpfWZ1bmN0aW9uIFJEKHQpe2lmKDA8PXQueSYmdC55PDEwMCl7dmFyIGU9bmV3IERhdGUoRGF0ZS5VVEMoLTEsdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpKTtyZXR1cm4gZS5zZXRVVENGdWxsWWVhcih0LnkpLGV9cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKHQueSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCkpfWZ1bmN0aW9uIFB2KHQsZSxyKXtyZXR1cm57eTp0LG06ZSxkOnIsSDowLE06MCxTOjAsTDowfX1mdW5jdGlvbiBORCh0KXt2YXIgZT10LmRhdGVUaW1lLHI9dC5kYXRlLG49dC50aW1lLGk9dC5wZXJpb2RzLGE9dC5kYXlzLHM9dC5zaG9ydERheXMsbD10Lm1vbnRocyx1PXQuc2hvcnRNb250aHMsaD1CdihpKSxmPUZ2KGkpLGQ9QnYoYSkscD1GdihhKSxtPUJ2KHMpLGc9RnYocykseT1CdihsKSx2PUZ2KGwpLHg9QnYodSksYj1Gdih1KSxUPXthOlAsQTpCLGI6RixCOnosYzpudWxsLGQ6JHEsZTokcSxmOlJFZSxnOkdFZSxHOlVFZSxIOl9FZSxJOkRFZSxqOkxFZSxMOkhxLG06TkVlLE06TUVlLHA6JCxxOlUsUTpWcSxzOlVxLFM6SUVlLHU6T0VlLFU6UEVlLFY6QkVlLHc6RkVlLFc6JEVlLHg6bnVsbCxYOm51bGwseTp6RWUsWTpWRWUsWjpIRWUsIiUiOkdxfSxTPXthOkssQTplZSxiOlksQjpjZSxjOm51bGwsZDp6cSxlOnpxLGY6WEVlLGc6aVNlLEc6c1NlLEg6V0VlLEk6cUVlLGo6WUVlLEw6cXEsbTpqRWUsTTpLRWUscDpaLHE6dWUsUTpWcSxzOlVxLFM6UUVlLHU6WkVlLFU6SkVlLFY6ZVNlLHc6dFNlLFc6clNlLHg6bnVsbCxYOm51bGwseTpuU2UsWTphU2UsWjpvU2UsIiUiOkdxfSx3PXthOk8sQTpSLGI6ayxCOkwsYzpBLGQ6QnEsZTpCcSxmOkVFZSxnOlBxLEc6T3EsSDpGcSxJOkZxLGo6YkVlLEw6a0VlLG06eEVlLE06VEVlLHA6RCxxOnZFZSxROkNFZSxzOkFFZSxTOndFZSx1OmRFZSxVOnBFZSxWOm1FZSx3OmZFZSxXOmdFZSx4OkksWDpNLHk6UHEsWTpPcSxaOnlFZSwiJSI6U0VlfTtULng9RShyLFQpLFQuWD1FKG4sVCksVC5jPUUoZSxUKSxTLng9RShyLFMpLFMuWD1FKG4sUyksUy5jPUUoZSxTKTtmdW5jdGlvbiBFKFEsail7cmV0dXJuIGZ1bmN0aW9uKG5lKXt2YXIgdGU9W10saGU9LTEsbGU9MCxKPVEubGVuZ3RoLFNlLHNlLGFlO2ZvcihuZSBpbnN0YW5jZW9mIERhdGV8fChuZT1uZXcgRGF0ZSgrbmUpKTsrK2hlPEo7KVEuY2hhckNvZGVBdChoZSk9PT0zNyYmKHRlLnB1c2goUS5zbGljZShsZSxoZSkpLChzZT1JcVtTZT1RLmNoYXJBdCgrK2hlKV0pIT1udWxsP1NlPVEuY2hhckF0KCsraGUpOnNlPVNlPT09ImUiPyIgIjoiMCIsKGFlPWpbU2VdKSYmKFNlPWFlKG5lLHNlKSksdGUucHVzaChTZSksbGU9aGUrMSk7cmV0dXJuIHRlLnB1c2goUS5zbGljZShsZSxoZSkpLHRlLmpvaW4oIiIpfX1vKEUsIm5ld0Zvcm1hdCIpO2Z1bmN0aW9uIF8oUSxqKXtyZXR1cm4gZnVuY3Rpb24obmUpe3ZhciB0ZT1QdigxOTAwLHZvaWQgMCwxKSxoZT1DKHRlLFEsbmUrPSIiLDApLGxlLEo7aWYoaGUhPW5lLmxlbmd0aClyZXR1cm4gbnVsbDtpZigiUSJpbiB0ZSlyZXR1cm4gbmV3IERhdGUodGUuUSk7aWYoInMiaW4gdGUpcmV0dXJuIG5ldyBEYXRlKHRlLnMqMWUzKygiTCJpbiB0ZT90ZS5MOjApKTtpZihqJiYhKCJaImluIHRlKSYmKHRlLlo9MCksInAiaW4gdGUmJih0ZS5IPXRlLkglMTIrdGUucCoxMiksdGUubT09PXZvaWQgMCYmKHRlLm09InEiaW4gdGU/dGUucTowKSwiViJpbiB0ZSl7aWYodGUuVjwxfHx0ZS5WPjUzKXJldHVybiBudWxsOyJ3ImluIHRlfHwodGUudz0xKSwiWiJpbiB0ZT8obGU9UkQoUHYodGUueSwwLDEpKSxKPWxlLmdldFVUQ0RheSgpLGxlPUo+NHx8Sj09PTA/SDAuY2VpbChsZSk6SDAobGUpLGxlPU92Lm9mZnNldChsZSwodGUuVi0xKSo3KSx0ZS55PWxlLmdldFVUQ0Z1bGxZZWFyKCksdGUubT1sZS5nZXRVVENNb250aCgpLHRlLmQ9bGUuZ2V0VVRDRGF0ZSgpKyh0ZS53KzYpJTcpOihsZT1MRChQdih0ZS55LDAsMSkpLEo9bGUuZ2V0RGF5KCksbGU9Sj40fHxKPT09MD9OaC5jZWlsKGxlKTpOaChsZSksbGU9Um8ub2Zmc2V0KGxlLCh0ZS5WLTEpKjcpLHRlLnk9bGUuZ2V0RnVsbFllYXIoKSx0ZS5tPWxlLmdldE1vbnRoKCksdGUuZD1sZS5nZXREYXRlKCkrKHRlLncrNiklNyl9ZWxzZSgiVyJpbiB0ZXx8IlUiaW4gdGUpJiYoInciaW4gdGV8fCh0ZS53PSJ1ImluIHRlP3RlLnUlNzoiVyJpbiB0ZT8xOjApLEo9IloiaW4gdGU/UkQoUHYodGUueSwwLDEpKS5nZXRVVENEYXkoKTpMRChQdih0ZS55LDAsMSkpLmdldERheSgpLHRlLm09MCx0ZS5kPSJXImluIHRlPyh0ZS53KzYpJTcrdGUuVyo3LShKKzUpJTc6dGUudyt0ZS5VKjctKEorNiklNyk7cmV0dXJuIloiaW4gdGU/KHRlLkgrPXRlLlovMTAwfDAsdGUuTSs9dGUuWiUxMDAsUkQodGUpKTpMRCh0ZSl9fW8oXywibmV3UGFyc2UiKTtmdW5jdGlvbiBDKFEsaixuZSx0ZSl7Zm9yKHZhciBoZT0wLGxlPWoubGVuZ3RoLEo9bmUubGVuZ3RoLFNlLHNlO2hlPGxlOyl7aWYodGU+PUopcmV0dXJuLTE7aWYoU2U9ai5jaGFyQ29kZUF0KGhlKyspLFNlPT09Mzcpe2lmKFNlPWouY2hhckF0KGhlKyspLHNlPXdbU2UgaW4gSXE/ai5jaGFyQXQoaGUrKyk6U2VdLCFzZXx8KHRlPXNlKFEsbmUsdGUpKTwwKXJldHVybi0xfWVsc2UgaWYoU2UhPW5lLmNoYXJDb2RlQXQodGUrKykpcmV0dXJuLTF9cmV0dXJuIHRlfW8oQywicGFyc2VTcGVjaWZpZXIiKTtmdW5jdGlvbiBEKFEsaixuZSl7dmFyIHRlPWguZXhlYyhqLnNsaWNlKG5lKSk7cmV0dXJuIHRlPyhRLnA9Zi5nZXQodGVbMF0udG9Mb3dlckNhc2UoKSksbmUrdGVbMF0ubGVuZ3RoKTotMX1vKEQsInBhcnNlUGVyaW9kIik7ZnVuY3Rpb24gTyhRLGosbmUpe3ZhciB0ZT1tLmV4ZWMoai5zbGljZShuZSkpO3JldHVybiB0ZT8oUS53PWcuZ2V0KHRlWzBdLnRvTG93ZXJDYXNlKCkpLG5lK3RlWzBdLmxlbmd0aCk6LTF9byhPLCJwYXJzZVNob3J0V2Vla2RheSIpO2Z1bmN0aW9uIFIoUSxqLG5lKXt2YXIgdGU9ZC5leGVjKGouc2xpY2UobmUpKTtyZXR1cm4gdGU/KFEudz1wLmdldCh0ZVswXS50b0xvd2VyQ2FzZSgpKSxuZSt0ZVswXS5sZW5ndGgpOi0xfW8oUiwicGFyc2VXZWVrZGF5Iik7ZnVuY3Rpb24gayhRLGosbmUpe3ZhciB0ZT14LmV4ZWMoai5zbGljZShuZSkpO3JldHVybiB0ZT8oUS5tPWIuZ2V0KHRlWzBdLnRvTG93ZXJDYXNlKCkpLG5lK3RlWzBdLmxlbmd0aCk6LTF9byhrLCJwYXJzZVNob3J0TW9udGgiKTtmdW5jdGlvbiBMKFEsaixuZSl7dmFyIHRlPXkuZXhlYyhqLnNsaWNlKG5lKSk7cmV0dXJuIHRlPyhRLm09di5nZXQodGVbMF0udG9Mb3dlckNhc2UoKSksbmUrdGVbMF0ubGVuZ3RoKTotMX1vKEwsInBhcnNlTW9udGgiKTtmdW5jdGlvbiBBKFEsaixuZSl7cmV0dXJuIEMoUSxlLGosbmUpfW8oQSwicGFyc2VMb2NhbGVEYXRlVGltZSIpO2Z1bmN0aW9uIEkoUSxqLG5lKXtyZXR1cm4gQyhRLHIsaixuZSl9byhJLCJwYXJzZUxvY2FsZURhdGUiKTtmdW5jdGlvbiBNKFEsaixuZSl7cmV0dXJuIEMoUSxuLGosbmUpfW8oTSwicGFyc2VMb2NhbGVUaW1lIik7ZnVuY3Rpb24gUChRKXtyZXR1cm4gc1tRLmdldERheSgpXX1vKFAsImZvcm1hdFNob3J0V2Vla2RheSIpO2Z1bmN0aW9uIEIoUSl7cmV0dXJuIGFbUS5nZXREYXkoKV19byhCLCJmb3JtYXRXZWVrZGF5Iik7ZnVuY3Rpb24gRihRKXtyZXR1cm4gdVtRLmdldE1vbnRoKCldfW8oRiwiZm9ybWF0U2hvcnRNb250aCIpO2Z1bmN0aW9uIHooUSl7cmV0dXJuIGxbUS5nZXRNb250aCgpXX1vKHosImZvcm1hdE1vbnRoIik7ZnVuY3Rpb24gJChRKXtyZXR1cm4gaVsrKFEuZ2V0SG91cnMoKT49MTIpXX1vKCQsImZvcm1hdFBlcmlvZCIpO2Z1bmN0aW9uIFUoUSl7cmV0dXJuIDErfn4oUS5nZXRNb250aCgpLzMpfW8oVSwiZm9ybWF0UXVhcnRlciIpO2Z1bmN0aW9uIEsoUSl7cmV0dXJuIHNbUS5nZXRVVENEYXkoKV19byhLLCJmb3JtYXRVVENTaG9ydFdlZWtkYXkiKTtmdW5jdGlvbiBlZShRKXtyZXR1cm4gYVtRLmdldFVUQ0RheSgpXX1vKGVlLCJmb3JtYXRVVENXZWVrZGF5Iik7ZnVuY3Rpb24gWShRKXtyZXR1cm4gdVtRLmdldFVUQ01vbnRoKCldfW8oWSwiZm9ybWF0VVRDU2hvcnRNb250aCIpO2Z1bmN0aW9uIGNlKFEpe3JldHVybiBsW1EuZ2V0VVRDTW9udGgoKV19byhjZSwiZm9ybWF0VVRDTW9udGgiKTtmdW5jdGlvbiBaKFEpe3JldHVybiBpWysoUS5nZXRVVENIb3VycygpPj0xMildfW8oWiwiZm9ybWF0VVRDUGVyaW9kIik7ZnVuY3Rpb24gdWUoUSl7cmV0dXJuIDErfn4oUS5nZXRVVENNb250aCgpLzMpfXJldHVybiBvKHVlLCJmb3JtYXRVVENRdWFydGVyIikse2Zvcm1hdDpvKGZ1bmN0aW9uKFEpe3ZhciBqPUUoUSs9IiIsVCk7cmV0dXJuIGoudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gUX0san0sImZvcm1hdCIpLHBhcnNlOm8oZnVuY3Rpb24oUSl7dmFyIGo9XyhRKz0iIiwhMSk7cmV0dXJuIGoudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gUX0san0sInBhcnNlIiksdXRjRm9ybWF0Om8oZnVuY3Rpb24oUSl7dmFyIGo9RShRKz0iIixTKTtyZXR1cm4gai50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBRfSxqfSwidXRjRm9ybWF0IiksdXRjUGFyc2U6byhmdW5jdGlvbihRKXt2YXIgaj1fKFErPSIiLCEwKTtyZXR1cm4gai50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBRfSxqfSwidXRjUGFyc2UiKX19ZnVuY3Rpb24gV3IodCxlLHIpe3ZhciBuPXQ8MD8iLSI6IiIsaT0obj8tdDp0KSsiIixhPWkubGVuZ3RoO3JldHVybiBuKyhhPHI/bmV3IEFycmF5KHItYSsxKS5qb2luKGUpK2k6aSl9ZnVuY3Rpb24gaEVlKHQpe3JldHVybiB0LnJlcGxhY2UodUVlLCJcXCQmIil9ZnVuY3Rpb24gQnYodCl7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK3QubWFwKGhFZSkuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIEZ2KHQpe3JldHVybiBuZXcgTWFwKHQubWFwKChlLHIpPT5bZS50b0xvd2VyQ2FzZSgpLHJdKSl9ZnVuY3Rpb24gZkVlKHQsZSxyKXt2YXIgbj1RaS5leGVjKGUuc2xpY2UocixyKzEpKTtyZXR1cm4gbj8odC53PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGRFZSh0LGUscil7dmFyIG49UWkuZXhlYyhlLnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KHQudT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBwRWUodCxlLHIpe3ZhciBuPVFpLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0LlU9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbUVlKHQsZSxyKXt2YXIgbj1RaS5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5WPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGdFZSh0LGUscil7dmFyIG49UWkuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KHQuVz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBPcSh0LGUscil7dmFyIG49UWkuZXhlYyhlLnNsaWNlKHIscis0KSk7cmV0dXJuIG4/KHQueT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBQcSh0LGUscil7dmFyIG49UWkuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KHQueT0rblswXSsoK25bMF0+Njg/MTkwMDoyZTMpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHlFZSh0LGUscil7dmFyIG49L14oWil8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8vLmV4ZWMoZS5zbGljZShyLHIrNikpO3JldHVybiBuPyh0Llo9blsxXT8wOi0oblsyXSsoblszXXx8IjAwIikpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHZFZSh0LGUscil7dmFyIG49UWkuZXhlYyhlLnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KHQucT1uWzBdKjMtMyxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB4RWUodCxlLHIpe3ZhciBuPVFpLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0Lm09blswXS0xLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEJxKHQsZSxyKXt2YXIgbj1RaS5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5kPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGJFZSh0LGUscil7dmFyIG49UWkuZXhlYyhlLnNsaWNlKHIsciszKSk7cmV0dXJuIG4/KHQubT0wLHQuZD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBGcSh0LGUscil7dmFyIG49UWkuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KHQuSD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBURWUodCxlLHIpe3ZhciBuPVFpLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0Lk09K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gd0VlKHQsZSxyKXt2YXIgbj1RaS5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5TPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGtFZSh0LGUscil7dmFyIG49UWkuZXhlYyhlLnNsaWNlKHIsciszKSk7cmV0dXJuIG4/KHQuTD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBFRWUodCxlLHIpe3ZhciBuPVFpLmV4ZWMoZS5zbGljZShyLHIrNikpO3JldHVybiBuPyh0Lkw9TWF0aC5mbG9vcihuWzBdLzFlMykscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gU0VlKHQsZSxyKXt2YXIgbj1jRWUuZXhlYyhlLnNsaWNlKHIscisxKSk7cmV0dXJuIG4/cituWzBdLmxlbmd0aDotMX1mdW5jdGlvbiBDRWUodCxlLHIpe3ZhciBuPVFpLmV4ZWMoZS5zbGljZShyKSk7cmV0dXJuIG4/KHQuUT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBBRWUodCxlLHIpe3ZhciBuPVFpLmV4ZWMoZS5zbGljZShyKSk7cmV0dXJuIG4/KHQucz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiAkcSh0LGUpe3JldHVybiBXcih0LmdldERhdGUoKSxlLDIpfWZ1bmN0aW9uIF9FZSh0LGUpe3JldHVybiBXcih0LmdldEhvdXJzKCksZSwyKX1mdW5jdGlvbiBERWUodCxlKXtyZXR1cm4gV3IodC5nZXRIb3VycygpJTEyfHwxMixlLDIpfWZ1bmN0aW9uIExFZSh0LGUpe3JldHVybiBXcigxK1JvLmNvdW50KHRvKHQpLHQpLGUsMyl9ZnVuY3Rpb24gSHEodCxlKXtyZXR1cm4gV3IodC5nZXRNaWxsaXNlY29uZHMoKSxlLDMpfWZ1bmN0aW9uIFJFZSh0LGUpe3JldHVybiBIcSh0LGUpKyIwMDAifWZ1bmN0aW9uIE5FZSh0LGUpe3JldHVybiBXcih0LmdldE1vbnRoKCkrMSxlLDIpfWZ1bmN0aW9uIE1FZSh0LGUpe3JldHVybiBXcih0LmdldE1pbnV0ZXMoKSxlLDIpfWZ1bmN0aW9uIElFZSh0LGUpe3JldHVybiBXcih0LmdldFNlY29uZHMoKSxlLDIpfWZ1bmN0aW9uIE9FZSh0KXt2YXIgZT10LmdldERheSgpO3JldHVybiBlPT09MD83OmV9ZnVuY3Rpb24gUEVlKHQsZSl7cmV0dXJuIFdyKHdsLmNvdW50KHRvKHQpLTEsdCksZSwyKX1mdW5jdGlvbiBXcSh0KXt2YXIgZT10LmdldERheSgpO3JldHVybiBlPj00fHxlPT09MD9mYyh0KTpmYy5jZWlsKHQpfWZ1bmN0aW9uIEJFZSh0LGUpe3JldHVybiB0PVdxKHQpLFdyKGZjLmNvdW50KHRvKHQpLHQpKyh0byh0KS5nZXREYXkoKT09PTQpLGUsMil9ZnVuY3Rpb24gRkVlKHQpe3JldHVybiB0LmdldERheSgpfWZ1bmN0aW9uICRFZSh0LGUpe3JldHVybiBXcihOaC5jb3VudCh0byh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gekVlKHQsZSl7cmV0dXJuIFdyKHQuZ2V0RnVsbFllYXIoKSUxMDAsZSwyKX1mdW5jdGlvbiBHRWUodCxlKXtyZXR1cm4gdD1XcSh0KSxXcih0LmdldEZ1bGxZZWFyKCklMTAwLGUsMil9ZnVuY3Rpb24gVkVlKHQsZSl7cmV0dXJuIFdyKHQuZ2V0RnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiBVRWUodCxlKXt2YXIgcj10LmdldERheSgpO3JldHVybiB0PXI+PTR8fHI9PT0wP2ZjKHQpOmZjLmNlaWwodCksV3IodC5nZXRGdWxsWWVhcigpJTFlNCxlLDQpfWZ1bmN0aW9uIEhFZSh0KXt2YXIgZT10LmdldFRpbWV6b25lT2Zmc2V0KCk7cmV0dXJuKGU+MD8iLSI6KGUqPS0xLCIrIikpK1dyKGUvNjB8MCwiMCIsMikrV3IoZSU2MCwiMCIsMil9ZnVuY3Rpb24genEodCxlKXtyZXR1cm4gV3IodC5nZXRVVENEYXRlKCksZSwyKX1mdW5jdGlvbiBXRWUodCxlKXtyZXR1cm4gV3IodC5nZXRVVENIb3VycygpLGUsMil9ZnVuY3Rpb24gcUVlKHQsZSl7cmV0dXJuIFdyKHQuZ2V0VVRDSG91cnMoKSUxMnx8MTIsZSwyKX1mdW5jdGlvbiBZRWUodCxlKXtyZXR1cm4gV3IoMStPdi5jb3VudChrbCh0KSx0KSxlLDMpfWZ1bmN0aW9uIHFxKHQsZSl7cmV0dXJuIFdyKHQuZ2V0VVRDTWlsbGlzZWNvbmRzKCksZSwzKX1mdW5jdGlvbiBYRWUodCxlKXtyZXR1cm4gcXEodCxlKSsiMDAwIn1mdW5jdGlvbiBqRWUodCxlKXtyZXR1cm4gV3IodC5nZXRVVENNb250aCgpKzEsZSwyKX1mdW5jdGlvbiBLRWUodCxlKXtyZXR1cm4gV3IodC5nZXRVVENNaW51dGVzKCksZSwyKX1mdW5jdGlvbiBRRWUodCxlKXtyZXR1cm4gV3IodC5nZXRVVENTZWNvbmRzKCksZSwyKX1mdW5jdGlvbiBaRWUodCl7dmFyIGU9dC5nZXRVVENEYXkoKTtyZXR1cm4gZT09PTA/NzplfWZ1bmN0aW9uIEpFZSh0LGUpe3JldHVybiBXcihEZC5jb3VudChrbCh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gWXEodCl7dmFyIGU9dC5nZXRVVENEYXkoKTtyZXR1cm4gZT49NHx8ZT09PTA/TWgodCk6TWguY2VpbCh0KX1mdW5jdGlvbiBlU2UodCxlKXtyZXR1cm4gdD1ZcSh0KSxXcihNaC5jb3VudChrbCh0KSx0KSsoa2wodCkuZ2V0VVRDRGF5KCk9PT00KSxlLDIpfWZ1bmN0aW9uIHRTZSh0KXtyZXR1cm4gdC5nZXRVVENEYXkoKX1mdW5jdGlvbiByU2UodCxlKXtyZXR1cm4gV3IoSDAuY291bnQoa2wodCktMSx0KSxlLDIpfWZ1bmN0aW9uIG5TZSh0LGUpe3JldHVybiBXcih0LmdldFVUQ0Z1bGxZZWFyKCklMTAwLGUsMil9ZnVuY3Rpb24gaVNlKHQsZSl7cmV0dXJuIHQ9WXEodCksV3IodC5nZXRVVENGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIGFTZSh0LGUpe3JldHVybiBXcih0LmdldFVUQ0Z1bGxZZWFyKCklMWU0LGUsNCl9ZnVuY3Rpb24gc1NlKHQsZSl7dmFyIHI9dC5nZXRVVENEYXkoKTtyZXR1cm4gdD1yPj00fHxyPT09MD9NaCh0KTpNaC5jZWlsKHQpLFdyKHQuZ2V0VVRDRnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiBvU2UoKXtyZXR1cm4iKzAwMDAifWZ1bmN0aW9uIEdxKCl7cmV0dXJuIiUifWZ1bmN0aW9uIFZxKHQpe3JldHVybit0fWZ1bmN0aW9uIFVxKHQpe3JldHVybiBNYXRoLmZsb29yKCt0LzFlMyl9dmFyIElxLFFpLGNFZSx1RWUsWHE9TigoKT0+eyJ1c2Ugc3RyaWN0IjskNSgpO28oTEQsImxvY2FsRGF0ZSIpO28oUkQsInV0Y0RhdGUiKTtvKFB2LCJuZXdEYXRlIik7byhORCwiZm9ybWF0TG9jYWxlIik7SXE9eyItIjoiIixfOiIgIiwwOiIwIn0sUWk9L15ccypcZCsvLGNFZT0vXiUvLHVFZT0vW1xcXiQqKz98W1xdKCkue31dL2c7byhXciwicGFkIik7byhoRWUsInJlcXVvdGUiKTtvKEJ2LCJmb3JtYXRSZSIpO28oRnYsImZvcm1hdExvb2t1cCIpO28oZkVlLCJwYXJzZVdlZWtkYXlOdW1iZXJTdW5kYXkiKTtvKGRFZSwicGFyc2VXZWVrZGF5TnVtYmVyTW9uZGF5Iik7byhwRWUsInBhcnNlV2Vla051bWJlclN1bmRheSIpO28obUVlLCJwYXJzZVdlZWtOdW1iZXJJU08iKTtvKGdFZSwicGFyc2VXZWVrTnVtYmVyTW9uZGF5Iik7byhPcSwicGFyc2VGdWxsWWVhciIpO28oUHEsInBhcnNlWWVhciIpO28oeUVlLCJwYXJzZVpvbmUiKTtvKHZFZSwicGFyc2VRdWFydGVyIik7byh4RWUsInBhcnNlTW9udGhOdW1iZXIiKTtvKEJxLCJwYXJzZURheU9mTW9udGgiKTtvKGJFZSwicGFyc2VEYXlPZlllYXIiKTtvKEZxLCJwYXJzZUhvdXIyNCIpO28oVEVlLCJwYXJzZU1pbnV0ZXMiKTtvKHdFZSwicGFyc2VTZWNvbmRzIik7byhrRWUsInBhcnNlTWlsbGlzZWNvbmRzIik7byhFRWUsInBhcnNlTWljcm9zZWNvbmRzIik7byhTRWUsInBhcnNlTGl0ZXJhbFBlcmNlbnQiKTtvKENFZSwicGFyc2VVbml4VGltZXN0YW1wIik7byhBRWUsInBhcnNlVW5peFRpbWVzdGFtcFNlY29uZHMiKTtvKCRxLCJmb3JtYXREYXlPZk1vbnRoIik7byhfRWUsImZvcm1hdEhvdXIyNCIpO28oREVlLCJmb3JtYXRIb3VyMTIiKTtvKExFZSwiZm9ybWF0RGF5T2ZZZWFyIik7byhIcSwiZm9ybWF0TWlsbGlzZWNvbmRzIik7byhSRWUsImZvcm1hdE1pY3Jvc2Vjb25kcyIpO28oTkVlLCJmb3JtYXRNb250aE51bWJlciIpO28oTUVlLCJmb3JtYXRNaW51dGVzIik7byhJRWUsImZvcm1hdFNlY29uZHMiKTtvKE9FZSwiZm9ybWF0V2Vla2RheU51bWJlck1vbmRheSIpO28oUEVlLCJmb3JtYXRXZWVrTnVtYmVyU3VuZGF5Iik7byhXcSwiZElTTyIpO28oQkVlLCJmb3JtYXRXZWVrTnVtYmVySVNPIik7byhGRWUsImZvcm1hdFdlZWtkYXlOdW1iZXJTdW5kYXkiKTtvKCRFZSwiZm9ybWF0V2Vla051bWJlck1vbmRheSIpO28oekVlLCJmb3JtYXRZZWFyIik7byhHRWUsImZvcm1hdFllYXJJU08iKTtvKFZFZSwiZm9ybWF0RnVsbFllYXIiKTtvKFVFZSwiZm9ybWF0RnVsbFllYXJJU08iKTtvKEhFZSwiZm9ybWF0Wm9uZSIpO28oenEsImZvcm1hdFVUQ0RheU9mTW9udGgiKTtvKFdFZSwiZm9ybWF0VVRDSG91cjI0Iik7byhxRWUsImZvcm1hdFVUQ0hvdXIxMiIpO28oWUVlLCJmb3JtYXRVVENEYXlPZlllYXIiKTtvKHFxLCJmb3JtYXRVVENNaWxsaXNlY29uZHMiKTtvKFhFZSwiZm9ybWF0VVRDTWljcm9zZWNvbmRzIik7byhqRWUsImZvcm1hdFVUQ01vbnRoTnVtYmVyIik7byhLRWUsImZvcm1hdFVUQ01pbnV0ZXMiKTtvKFFFZSwiZm9ybWF0VVRDU2Vjb25kcyIpO28oWkVlLCJmb3JtYXRVVENXZWVrZGF5TnVtYmVyTW9uZGF5Iik7byhKRWUsImZvcm1hdFVUQ1dlZWtOdW1iZXJTdW5kYXkiKTtvKFlxLCJVVENkSVNPIik7byhlU2UsImZvcm1hdFVUQ1dlZWtOdW1iZXJJU08iKTtvKHRTZSwiZm9ybWF0VVRDV2Vla2RheU51bWJlclN1bmRheSIpO28oclNlLCJmb3JtYXRVVENXZWVrTnVtYmVyTW9uZGF5Iik7byhuU2UsImZvcm1hdFVUQ1llYXIiKTtvKGlTZSwiZm9ybWF0VVRDWWVhcklTTyIpO28oYVNlLCJmb3JtYXRVVENGdWxsWWVhciIpO28oc1NlLCJmb3JtYXRVVENGdWxsWWVhcklTTyIpO28ob1NlLCJmb3JtYXRVVENab25lIik7byhHcSwiZm9ybWF0TGl0ZXJhbFBlcmNlbnQiKTtvKFZxLCJmb3JtYXRVbml4VGltZXN0YW1wIik7byhVcSwiZm9ybWF0VW5peFRpbWVzdGFtcFNlY29uZHMiKX0pO2Z1bmN0aW9uIE1EKHQpe3JldHVybiBXMD1ORCh0KSxMZD1XMC5mb3JtYXQsanE9VzAucGFyc2UsS3E9VzAudXRjRm9ybWF0LFFxPVcwLnV0Y1BhcnNlLFcwfXZhciBXMCxMZCxqcSxLcSxRcSxacT1OKCgpPT57InVzZSBzdHJpY3QiO1hxKCk7TUQoe2RhdGVUaW1lOiIleCwgJVgiLGRhdGU6IiUtbS8lLWQvJVkiLHRpbWU6IiUtSTolTTolUyAlcCIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KTtvKE1ELCJkZWZhdWx0TG9jYWxlIil9KTt2YXIgSUQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtacSgpfSk7ZnVuY3Rpb24gbFNlKHQpe3JldHVybiBuZXcgRGF0ZSh0KX1mdW5jdGlvbiBjU2UodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBEYXRlPyt0OituZXcgRGF0ZSgrdCl9ZnVuY3Rpb24gSnEodCxlLHIsbixpLGEscyxsLHUsaCl7dmFyIGY9TXYoKSxkPWYuaW52ZXJ0LHA9Zi5kb21haW4sbT1oKCIuJUwiKSxnPWgoIjolUyIpLHk9aCgiJUk6JU0iKSx2PWgoIiVJICVwIikseD1oKCIlYSAlZCIpLGI9aCgiJWIgJWQiKSxUPWgoIiVCIiksUz1oKCIlWSIpO2Z1bmN0aW9uIHcoRSl7cmV0dXJuKHUoRSk8RT9tOmwoRSk8RT9nOnMoRSk8RT95OmEoRSk8RT92Om4oRSk8RT9pKEUpPEU/eDpiOnIoRSk8RT9UOlMpKEUpfXJldHVybiBvKHcsInRpY2tGb3JtYXQiKSxmLmludmVydD1mdW5jdGlvbihFKXtyZXR1cm4gbmV3IERhdGUoZChFKSl9LGYuZG9tYWluPWZ1bmN0aW9uKEUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3AoQXJyYXkuZnJvbShFLGNTZSkpOnAoKS5tYXAobFNlKX0sZi50aWNrcz1mdW5jdGlvbihFKXt2YXIgXz1wKCk7cmV0dXJuIHQoX1swXSxfW18ubGVuZ3RoLTFdLEU/PzEwKX0sZi50aWNrRm9ybWF0PWZ1bmN0aW9uKEUsXyl7cmV0dXJuIF89PW51bGw/dzpoKF8pfSxmLm5pY2U9ZnVuY3Rpb24oRSl7dmFyIF89cCgpO3JldHVybighRXx8dHlwZW9mIEUucmFuZ2UhPSJmdW5jdGlvbiIpJiYoRT1lKF9bMF0sX1tfLmxlbmd0aC0xXSxFPz8xMCkpLEU/cCh5RChfLEUpKTpmfSxmLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gTDUoZixKcSh0LGUscixuLGksYSxzLGwsdSxoKSl9LGZ9ZnVuY3Rpb24gejUoKXtyZXR1cm4gUmguYXBwbHkoSnEoX0QsREQsdG8sRXUsd2wsUm8sa3Usd3UsZW8sTGQpLmRvbWFpbihbbmV3IERhdGUoMmUzLDAsMSksbmV3IERhdGUoMmUzLDAsMildKSxhcmd1bWVudHMpfXZhciBlWT1OKCgpPT57InVzZSBzdHJpY3QiOyQ1KCk7SUQoKTttRCgpO052KCk7VHEoKTtvKGxTZSwiZGF0ZSIpO28oY1NlLCJudW1iZXIiKTtvKEpxLCJjYWxlbmRhciIpO28oejUsInRpbWUiKX0pO3ZhciB0WT1OKCgpPT57InVzZSBzdHJpY3QiO21xKCk7YnEoKTtoRCgpO2VZKCl9KTtmdW5jdGlvbiBPRCh0KXtmb3IodmFyIGU9dC5sZW5ndGgvNnwwLHI9bmV3IEFycmF5KGUpLG49MDtuPGU7KXJbbl09IiMiK3Quc2xpY2Uobio2LCsrbio2KTtyZXR1cm4gcn12YXIgclk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKE9ELCJkZWZhdWx0Iil9KTt2YXIgUEQsblk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtyWSgpO1BEPU9EKCI0ZTc5YTdmMjhlMmNlMTU3NTk3NmI3YjI1OWExNGZlZGM5NDlhZjdhYTFmZjlkYTc5Yzc1NWZiYWIwYWIiKX0pO3ZhciBpWT1OKCgpPT57InVzZSBzdHJpY3QiO25ZKCl9KTtmdW5jdGlvbiBCbih0KXtyZXR1cm4gbyhmdW5jdGlvbigpe3JldHVybiB0fSwiY29uc3RhbnQiKX12YXIgRzU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKEJuLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBzWSh0KXtyZXR1cm4gdD4xPzA6dDwtMT9xMDpNYXRoLmFjb3ModCl9ZnVuY3Rpb24gRkQodCl7cmV0dXJuIHQ+PTE/JHY6dDw9LTE/LSR2Ok1hdGguYXNpbih0KX12YXIgQkQsaGEsSWgsYVksVjUsRWwsUmQsWmkscTAsJHYsWTAsVTU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtCRD1NYXRoLmFicyxoYT1NYXRoLmF0YW4yLEloPU1hdGguY29zLGFZPU1hdGgubWF4LFY1PU1hdGgubWluLEVsPU1hdGguc2luLFJkPU1hdGguc3FydCxaaT0xZS0xMixxMD1NYXRoLlBJLCR2PXEwLzIsWTA9MipxMDtvKHNZLCJhY29zIik7byhGRCwiYXNpbiIpfSk7ZnVuY3Rpb24gSDUodCl7bGV0IGU9MztyZXR1cm4gdC5kaWdpdHM9ZnVuY3Rpb24ocil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGU7aWYocj09bnVsbCllPW51bGw7ZWxzZXtsZXQgbj1NYXRoLmZsb29yKHIpO2lmKCEobj49MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYGludmFsaWQgZGlnaXRzOiAke3J9YCk7ZT1ufXJldHVybiB0fSwoKT0+bmV3IHdkKGUpfXZhciAkRD1OKCgpPT57InVzZSBzdHJpY3QiO09fKCk7byhINSwid2l0aFBhdGgiKX0pO2Z1bmN0aW9uIHVTZSh0KXtyZXR1cm4gdC5pbm5lclJhZGl1c31mdW5jdGlvbiBoU2UodCl7cmV0dXJuIHQub3V0ZXJSYWRpdXN9ZnVuY3Rpb24gZlNlKHQpe3JldHVybiB0LnN0YXJ0QW5nbGV9ZnVuY3Rpb24gZFNlKHQpe3JldHVybiB0LmVuZEFuZ2xlfWZ1bmN0aW9uIHBTZSh0KXtyZXR1cm4gdCYmdC5wYWRBbmdsZX1mdW5jdGlvbiBtU2UodCxlLHIsbixpLGEscyxsKXt2YXIgdT1yLXQsaD1uLWUsZj1zLWksZD1sLWEscD1kKnUtZipoO2lmKCEocCpwPFppKSlyZXR1cm4gcD0oZiooZS1hKS1kKih0LWkpKS9wLFt0K3AqdSxlK3AqaF19ZnVuY3Rpb24gVzUodCxlLHIsbixpLGEscyl7dmFyIGw9dC1yLHU9ZS1uLGg9KHM/YTotYSkvUmQobCpsK3UqdSksZj1oKnUsZD0taCpsLHA9dCtmLG09ZStkLGc9citmLHk9bitkLHY9KHArZykvMix4PShtK3kpLzIsYj1nLXAsVD15LW0sUz1iKmIrVCpULHc9aS1hLEU9cCp5LWcqbSxfPShUPDA/LTE6MSkqUmQoYVkoMCx3KncqUy1FKkUpKSxDPShFKlQtYipfKS9TLEQ9KC1FKmItVCpfKS9TLE89KEUqVCtiKl8pL1MsUj0oLUUqYitUKl8pL1Msaz1DLXYsTD1ELXgsQT1PLXYsST1SLXg7cmV0dXJuIGsqaytMKkw+QSpBK0kqSSYmKEM9TyxEPVIpLHtjeDpDLGN5OkQseDAxOi1mLHkwMTotZCx4MTE6QyooaS93LTEpLHkxMTpEKihpL3ctMSl9fWZ1bmN0aW9uIFNsKCl7dmFyIHQ9dVNlLGU9aFNlLHI9Qm4oMCksbj1udWxsLGk9ZlNlLGE9ZFNlLHM9cFNlLGw9bnVsbCx1PUg1KGgpO2Z1bmN0aW9uIGgoKXt2YXIgZixkLHA9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpLG09K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpLGc9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyktJHYseT1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKS0kdix2PUJEKHktZykseD15Pmc7aWYobHx8KGw9Zj11KCkpLG08cCYmKGQ9bSxtPXAscD1kKSwhKG0+WmkpKWwubW92ZVRvKDAsMCk7ZWxzZSBpZih2PlkwLVppKWwubW92ZVRvKG0qSWgoZyksbSpFbChnKSksbC5hcmMoMCwwLG0sZyx5LCF4KSxwPlppJiYobC5tb3ZlVG8ocCpJaCh5KSxwKkVsKHkpKSxsLmFyYygwLDAscCx5LGcseCkpO2Vsc2V7dmFyIGI9ZyxUPXksUz1nLHc9eSxFPXYsXz12LEM9cy5hcHBseSh0aGlzLGFyZ3VtZW50cykvMixEPUM+WmkmJihuPytuLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpSZChwKnArbSptKSksTz1WNShCRChtLXApLzIsK3IuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxSPU8saz1PLEwsQTtpZihEPlppKXt2YXIgST1GRChEL3AqRWwoQykpLE09RkQoRC9tKkVsKEMpKTsoRS09SSoyKT5aaT8oSSo9eD8xOi0xLFMrPUksdy09SSk6KEU9MCxTPXc9KGcreSkvMiksKF8tPU0qMik+Wmk/KE0qPXg/MTotMSxiKz1NLFQtPU0pOihfPTAsYj1UPShnK3kpLzIpfXZhciBQPW0qSWgoYiksQj1tKkVsKGIpLEY9cCpJaCh3KSx6PXAqRWwodyk7aWYoTz5aaSl7dmFyICQ9bSpJaChUKSxVPW0qRWwoVCksSz1wKkloKFMpLGVlPXAqRWwoUyksWTtpZih2PHEwKWlmKFk9bVNlKFAsQixLLGVlLCQsVSxGLHopKXt2YXIgY2U9UC1ZWzBdLFo9Qi1ZWzFdLHVlPSQtWVswXSxRPVUtWVsxXSxqPTEvRWwoc1koKGNlKnVlK1oqUSkvKFJkKGNlKmNlK1oqWikqUmQodWUqdWUrUSpRKSkpLzIpLG5lPVJkKFlbMF0qWVswXStZWzFdKllbMV0pO1I9VjUoTywocC1uZSkvKGotMSkpLGs9VjUoTywobS1uZSkvKGorMSkpfWVsc2UgUj1rPTB9Xz5aaT9rPlppPyhMPVc1KEssZWUsUCxCLG0sayx4KSxBPVc1KCQsVSxGLHosbSxrLHgpLGwubW92ZVRvKEwuY3grTC54MDEsTC5jeStMLnkwMSksazxPP2wuYXJjKEwuY3gsTC5jeSxrLGhhKEwueTAxLEwueDAxKSxoYShBLnkwMSxBLngwMSksIXgpOihsLmFyYyhMLmN4LEwuY3ksayxoYShMLnkwMSxMLngwMSksaGEoTC55MTEsTC54MTEpLCF4KSxsLmFyYygwLDAsbSxoYShMLmN5K0wueTExLEwuY3grTC54MTEpLGhhKEEuY3krQS55MTEsQS5jeCtBLngxMSksIXgpLGwuYXJjKEEuY3gsQS5jeSxrLGhhKEEueTExLEEueDExKSxoYShBLnkwMSxBLngwMSksIXgpKSk6KGwubW92ZVRvKFAsQiksbC5hcmMoMCwwLG0sYixULCF4KSk6bC5tb3ZlVG8oUCxCKSwhKHA+WmkpfHwhKEU+WmkpP2wubGluZVRvKEYseik6Uj5aaT8oTD1XNShGLHosJCxVLHAsLVIseCksQT1XNShQLEIsSyxlZSxwLC1SLHgpLGwubGluZVRvKEwuY3grTC54MDEsTC5jeStMLnkwMSksUjxPP2wuYXJjKEwuY3gsTC5jeSxSLGhhKEwueTAxLEwueDAxKSxoYShBLnkwMSxBLngwMSksIXgpOihsLmFyYyhMLmN4LEwuY3ksUixoYShMLnkwMSxMLngwMSksaGEoTC55MTEsTC54MTEpLCF4KSxsLmFyYygwLDAscCxoYShMLmN5K0wueTExLEwuY3grTC54MTEpLGhhKEEuY3krQS55MTEsQS5jeCtBLngxMSkseCksbC5hcmMoQS5jeCxBLmN5LFIsaGEoQS55MTEsQS54MTEpLGhhKEEueTAxLEEueDAxKSwheCkpKTpsLmFyYygwLDAscCx3LFMseCl9aWYobC5jbG9zZVBhdGgoKSxmKXJldHVybiBsPW51bGwsZisiInx8bnVsbH1yZXR1cm4gbyhoLCJhcmMiKSxoLmNlbnRyb2lkPWZ1bmN0aW9uKCl7dmFyIGY9KCt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK2UuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLGQ9KCtpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK2EuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLXEwLzI7cmV0dXJuW0loKGQpKmYsRWwoZCkqZl19LGguaW5uZXJSYWRpdXM9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpCbigrZiksaCk6dH0saC5vdXRlclJhZGl1cz1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOkJuKCtmKSxoKTplfSxoLmNvcm5lclJhZGl1cz1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOkJuKCtmKSxoKTpyfSxoLnBhZFJhZGl1cz1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1mPT1udWxsP251bGw6dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpCbigrZiksaCk6bn0saC5zdGFydEFuZ2xlPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBmPT0iZnVuY3Rpb24iP2Y6Qm4oK2YpLGgpOml9LGguZW5kQW5nbGU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpCbigrZiksaCk6YX0saC5wYWRBbmdsZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOkJuKCtmKSxoKTpzfSxoLmNvbnRleHQ9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9Zj8/bnVsbCxoKTpsfSxofXZhciBvWT1OKCgpPT57InVzZSBzdHJpY3QiO0c1KCk7VTUoKTskRCgpO28odVNlLCJhcmNJbm5lclJhZGl1cyIpO28oaFNlLCJhcmNPdXRlclJhZGl1cyIpO28oZlNlLCJhcmNTdGFydEFuZ2xlIik7byhkU2UsImFyY0VuZEFuZ2xlIik7byhwU2UsImFyY1BhZEFuZ2xlIik7byhtU2UsImludGVyc2VjdCIpO28oVzUsImNvcm5lclRhbmdlbnRzIik7byhTbCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24genYodCl7cmV0dXJuIHR5cGVvZiB0PT0ib2JqZWN0IiYmImxlbmd0aCJpbiB0P3Q6QXJyYXkuZnJvbSh0KX12YXIgeXh0LHpEPU4oKCk9PnsidXNlIHN0cmljdCI7eXh0PUFycmF5LnByb3RvdHlwZS5zbGljZTtvKHp2LCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBsWSh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gU3UodCl7cmV0dXJuIG5ldyBsWSh0KX12YXIgR0Q9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKGxZLCJMaW5lYXIiKTtsWS5wcm90b3R5cGU9e2FyZWFTdGFydDpvKGZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSwiYXJlYVN0YXJ0IiksYXJlYUVuZDpvKGZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LCJhcmVhRW5kIiksbGluZVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSwibGluZVN0YXJ0IiksbGluZUVuZDpvKGZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSwibGluZUVuZCIpLHBvaW50Om8oZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OnRoaXMuX2NvbnRleHQubGluZVRvKHQsZSk7YnJlYWt9fSwicG9pbnQiKX07byhTdSwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gY1kodCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gdVkodCl7cmV0dXJuIHRbMV19dmFyIGhZPU4oKCk9PnsidXNlIHN0cmljdCI7byhjWSwieCIpO28odVksInkiKX0pO2Z1bmN0aW9uIENsKHQsZSl7dmFyIHI9Qm4oITApLG49bnVsbCxpPVN1LGE9bnVsbCxzPUg1KGwpO3Q9dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDp0PT09dm9pZCAwP2NZOkJuKHQpLGU9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTplPT09dm9pZCAwP3VZOkJuKGUpO2Z1bmN0aW9uIGwodSl7dmFyIGgsZj0odT16dih1KSkubGVuZ3RoLGQscD0hMSxtO2ZvcihuPT1udWxsJiYoYT1pKG09cygpKSksaD0wO2g8PWY7KytoKSEoaDxmJiZyKGQ9dVtoXSxoLHUpKT09PXAmJigocD0hcCk/YS5saW5lU3RhcnQoKTphLmxpbmVFbmQoKSkscCYmYS5wb2ludCgrdChkLGgsdSksK2UoZCxoLHUpKTtpZihtKXJldHVybiBhPW51bGwsbSsiInx8bnVsbH1yZXR1cm4gbyhsLCJsaW5lIiksbC54PWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiB1PT0iZnVuY3Rpb24iP3U6Qm4oK3UpLGwpOnR9LGwueT1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgdT09ImZ1bmN0aW9uIj91OkJuKCt1KSxsKTplfSxsLmRlZmluZWQ9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIHU9PSJmdW5jdGlvbiI/dTpCbighIXUpLGwpOnJ9LGwuY3VydmU9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dSxuIT1udWxsJiYoYT1pKG4pKSxsKTppfSxsLmNvbnRleHQ9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9PW51bGw/bj1hPW51bGw6YT1pKG49dSksbCk6bn0sbH12YXIgZlk9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt6RCgpO0c1KCk7R0QoKTskRCgpO2hZKCk7byhDbCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gVkQodCxlKXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyIGRZPU4oKCk9PnsidXNlIHN0cmljdCI7byhWRCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gVUQodCl7cmV0dXJuIHR9dmFyIHBZPU4oKCk9PnsidXNlIHN0cmljdCI7byhVRCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gcTUoKXt2YXIgdD1VRCxlPVZELHI9bnVsbCxuPUJuKDApLGk9Qm4oWTApLGE9Qm4oMCk7ZnVuY3Rpb24gcyhsKXt2YXIgdSxoPShsPXp2KGwpKS5sZW5ndGgsZixkLHA9MCxtPW5ldyBBcnJheShoKSxnPW5ldyBBcnJheShoKSx5PStuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx2PU1hdGgubWluKFkwLE1hdGgubWF4KC1ZMCxpLmFwcGx5KHRoaXMsYXJndW1lbnRzKS15KSkseCxiPU1hdGgubWluKE1hdGguYWJzKHYpL2gsYS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLFQ9YioodjwwPy0xOjEpLFM7Zm9yKHU9MDt1PGg7Kyt1KShTPWdbbVt1XT11XT0rdChsW3VdLHUsbCkpPjAmJihwKz1TKTtmb3IoZSE9bnVsbD9tLnNvcnQoZnVuY3Rpb24odyxFKXtyZXR1cm4gZShnW3ddLGdbRV0pfSk6ciE9bnVsbCYmbS5zb3J0KGZ1bmN0aW9uKHcsRSl7cmV0dXJuIHIobFt3XSxsW0VdKX0pLHU9MCxkPXA/KHYtaCpUKS9wOjA7dTxoOysrdSx5PXgpZj1tW3VdLFM9Z1tmXSx4PXkrKFM+MD9TKmQ6MCkrVCxnW2ZdPXtkYXRhOmxbZl0saW5kZXg6dSx2YWx1ZTpTLHN0YXJ0QW5nbGU6eSxlbmRBbmdsZTp4LHBhZEFuZ2xlOmJ9O3JldHVybiBnfXJldHVybiBvKHMsInBpZSIpLHMudmFsdWU9ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIGw9PSJmdW5jdGlvbiI/bDpCbigrbCkscyk6dH0scy5zb3J0VmFsdWVzPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWwscj1udWxsLHMpOmV9LHMuc29ydD1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1sLGU9bnVsbCxzKTpyfSxzLnN0YXJ0QW5nbGU9ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIGw9PSJmdW5jdGlvbiI/bDpCbigrbCkscyk6bn0scy5lbmRBbmdsZT1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2YgbD09ImZ1bmN0aW9uIj9sOkJuKCtsKSxzKTppfSxzLnBhZEFuZ2xlPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXR5cGVvZiBsPT0iZnVuY3Rpb24iP2w6Qm4oK2wpLHMpOmF9LHN9dmFyIG1ZPU4oKCk9PnsidXNlIHN0cmljdCI7ekQoKTtHNSgpO2RZKCk7cFkoKTtVNSgpO28ocTUsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIEd2KHQpe3JldHVybiBuZXcgWTUodCwhMCl9ZnVuY3Rpb24gVnYodCl7cmV0dXJuIG5ldyBZNSh0LCExKX12YXIgWTUsZ1k9TigoKT0+eyJ1c2Ugc3RyaWN0IjtZNT1jbGFzc3tzdGF0aWN7byh0aGlzLCJCdW1wIil9Y29uc3RydWN0b3IoZSxyKXt0aGlzLl9jb250ZXh0PWUsdGhpcy5feD1yfWFyZWFTdGFydCgpe3RoaXMuX2xpbmU9MH1hcmVhRW5kKCl7dGhpcy5fbGluZT1OYU59bGluZVN0YXJ0KCl7dGhpcy5fcG9pbnQ9MH1saW5lRW5kKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfXBvaW50KGUscil7c3dpdGNoKGU9K2Uscj0rcix0aGlzLl9wb2ludCl7Y2FzZSAwOnt0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZSxyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHIpO2JyZWFrfWNhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6e3RoaXMuX3g/dGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHRoaXMuX3gwPSh0aGlzLl94MCtlKS8yLHRoaXMuX3kwLHRoaXMuX3gwLHIsZSxyKTp0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8odGhpcy5feDAsdGhpcy5feTA9KHRoaXMuX3kwK3IpLzIsZSx0aGlzLl95MCxlLHIpO2JyZWFrfX10aGlzLl94MD1lLHRoaXMuX3kwPXJ9fTtvKEd2LCJidW1wWCIpO28oVnYsImJ1bXBZIil9KTtmdW5jdGlvbiBybygpe312YXIgVXY9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKHJvLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiBYMCh0LGUscil7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKCgyKnQuX3gwK3QuX3gxKS8zLCgyKnQuX3kwK3QuX3kxKS8zLCh0Ll94MCsyKnQuX3gxKS8zLCh0Ll95MCsyKnQuX3kxKS8zLCh0Ll94MCs0KnQuX3gxK2UpLzYsKHQuX3kwKzQqdC5feTErcikvNil9ZnVuY3Rpb24gSHYodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIE5vKHQpe3JldHVybiBuZXcgSHYodCl9dmFyIFd2PU4oKCk9PnsidXNlIHN0cmljdCI7byhYMCwicG9pbnQiKTtvKEh2LCJCYXNpcyIpO0h2LnByb3RvdHlwZT17YXJlYVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LCJhcmVhU3RhcnQiKSxhcmVhRW5kOm8oZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sImFyZWFFbmQiKSxsaW5lU3RhcnQ6byhmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSwibGluZVN0YXJ0IiksbGluZUVuZDpvKGZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDM6WDAodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKTticmVha30odGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LCJsaW5lRW5kIikscG9pbnQ6byhmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2NvbnRleHQubGluZVRvKCg1KnRoaXMuX3gwK3RoaXMuX3gxKS82LCg1KnRoaXMuX3kwK3RoaXMuX3kxKS82KTtkZWZhdWx0OlgwKHRoaXMsdCxlKTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWV9LCJwb2ludCIpfTtvKE5vLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiB5WSh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gWDUodCl7cmV0dXJuIG5ldyB5WSh0KX12YXIgdlk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtVdigpO1d2KCk7byh5WSwiQmFzaXNDbG9zZWQiKTt5WS5wcm90b3R5cGU9e2FyZWFTdGFydDpybyxhcmVhRW5kOnJvLGxpbmVTdGFydDpvKGZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9TmFOLHRoaXMuX3BvaW50PTB9LCJsaW5lU3RhcnQiKSxsaW5lRW5kOm8oZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp7dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAyOnt0aGlzLl9jb250ZXh0Lm1vdmVUbygodGhpcy5feDIrMip0aGlzLl94MykvMywodGhpcy5feTIrMip0aGlzLl95MykvMyksdGhpcy5fY29udGV4dC5saW5lVG8oKHRoaXMuX3gzKzIqdGhpcy5feDIpLzMsKHRoaXMuX3kzKzIqdGhpcy5feTIpLzMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKSx0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KTticmVha319fSwibGluZUVuZCIpLHBvaW50Om8oZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mj10LHRoaXMuX3kyPWU7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5feDM9dCx0aGlzLl95Mz1lO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g0PXQsdGhpcy5feTQ9ZSx0aGlzLl9jb250ZXh0Lm1vdmVUbygodGhpcy5feDArNCp0aGlzLl94MSt0KS82LCh0aGlzLl95MCs0KnRoaXMuX3kxK2UpLzYpO2JyZWFrO2RlZmF1bHQ6WDAodGhpcyx0LGUpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZX0sInBvaW50Iil9O28oWDUsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIHhZKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBqNSh0KXtyZXR1cm4gbmV3IHhZKHQpfXZhciBiWT1OKCgpPT57InVzZSBzdHJpY3QiO1d2KCk7byh4WSwiQmFzaXNPcGVuIik7eFkucHJvdG90eXBlPXthcmVhU3RhcnQ6byhmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sImFyZWFTdGFydCIpLGFyZWFFbmQ6byhmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSwiYXJlYUVuZCIpLGxpbmVTdGFydDpvKGZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LCJsaW5lU3RhcnQiKSxsaW5lRW5kOm8oZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MykmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LCJsaW5lRW5kIikscG9pbnQ6byhmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO3ZhciByPSh0aGlzLl94MCs0KnRoaXMuX3gxK3QpLzYsbj0odGhpcy5feTArNCp0aGlzLl95MStlKS82O3RoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8ocixuKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhyLG4pO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6WDAodGhpcyx0LGUpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZX0sInBvaW50Iil9O28oajUsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIFRZKHQsZSl7dGhpcy5fYmFzaXM9bmV3IEh2KHQpLHRoaXMuX2JldGE9ZX12YXIgSEQsd1k9TigoKT0+eyJ1c2Ugc3RyaWN0IjtXdigpO28oVFksIkJ1bmRsZSIpO1RZLnByb3RvdHlwZT17bGluZVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W10sdGhpcy5fYmFzaXMubGluZVN0YXJ0KCl9LCJsaW5lU3RhcnQiKSxsaW5lRW5kOm8oZnVuY3Rpb24oKXt2YXIgdD10aGlzLl94LGU9dGhpcy5feSxyPXQubGVuZ3RoLTE7aWYocj4wKWZvcih2YXIgbj10WzBdLGk9ZVswXSxhPXRbcl0tbixzPWVbcl0taSxsPS0xLHU7KytsPD1yOyl1PWwvcix0aGlzLl9iYXNpcy5wb2ludCh0aGlzLl9iZXRhKnRbbF0rKDEtdGhpcy5fYmV0YSkqKG4rdSphKSx0aGlzLl9iZXRhKmVbbF0rKDEtdGhpcy5fYmV0YSkqKGkrdSpzKSk7dGhpcy5feD10aGlzLl95PW51bGwsdGhpcy5fYmFzaXMubGluZUVuZCgpfSwibGluZUVuZCIpLHBvaW50Om8oZnVuY3Rpb24odCxlKXt0aGlzLl94LnB1c2goK3QpLHRoaXMuX3kucHVzaCgrZSl9LCJwb2ludCIpfTtIRD1vKGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gZT09PTE/bmV3IEh2KG4pOm5ldyBUWShuLGUpfXJldHVybiBvKHIsImJ1bmRsZSIpLHIuYmV0YT1mdW5jdGlvbihuKXtyZXR1cm4gdCgrbil9LHJ9LCJjdXN0b20iKSguODUpfSk7ZnVuY3Rpb24gajAodCxlLHIpe3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh0Ll94MSt0Ll9rKih0Ll94Mi10Ll94MCksdC5feTErdC5fayoodC5feTItdC5feTApLHQuX3gyK3QuX2sqKHQuX3gxLWUpLHQuX3kyK3QuX2sqKHQuX3kxLXIpLHQuX3gyLHQuX3kyKX1mdW5jdGlvbiBLNSh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLWUpLzZ9dmFyIHF2LFl2PU4oKCk9PnsidXNlIHN0cmljdCI7byhqMCwicG9pbnQiKTtvKEs1LCJDYXJkaW5hbCIpO0s1LnByb3RvdHlwZT17YXJlYVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LCJhcmVhU3RhcnQiKSxhcmVhRW5kOm8oZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sImFyZWFFbmQiKSxsaW5lU3RhcnQ6byhmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSwibGluZVN0YXJ0IiksbGluZUVuZDpvKGZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzpqMCh0aGlzLHRoaXMuX3gxLHRoaXMuX3kxKTticmVha30odGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LCJsaW5lRW5kIikscG9pbnQ6byhmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gxPXQsdGhpcy5feTE9ZTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0OmowKHRoaXMsdCxlKTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9LCJwb2ludCIpfTtxdj1vKGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gbmV3IEs1KG4sZSl9cmV0dXJuIG8ociwiY2FyZGluYWwiKSxyLnRlbnNpb249ZnVuY3Rpb24obil7cmV0dXJuIHQoK24pfSxyfSwiY3VzdG9tIikoMCl9KTtmdW5jdGlvbiBRNSh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLWUpLzZ9dmFyIFdELHFEPU4oKCk9PnsidXNlIHN0cmljdCI7VXYoKTtZdigpO28oUTUsIkNhcmRpbmFsQ2xvc2VkIik7UTUucHJvdG90eXBlPXthcmVhU3RhcnQ6cm8sYXJlYUVuZDpybyxsaW5lU3RhcnQ6byhmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9wb2ludD0wfSwibGluZVN0YXJ0IiksbGluZUVuZDpvKGZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KTticmVha319fSwibGluZUVuZCIpLHBvaW50Om8oZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz10LHRoaXMuX3kzPWU7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9dCx0aGlzLl95ND1lKTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT10LHRoaXMuX3k1PWU7YnJlYWs7ZGVmYXVsdDpqMCh0aGlzLHQsZSk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfSwicG9pbnQiKX07V0Q9byhmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIHIobil7cmV0dXJuIG5ldyBRNShuLGUpfXJldHVybiBvKHIsImNhcmRpbmFsIiksci50ZW5zaW9uPWZ1bmN0aW9uKG4pe3JldHVybiB0KCtuKX0scn0sImN1c3RvbSIpKDApfSk7ZnVuY3Rpb24gWjUodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fXZhciBZRCxYRD1OKCgpPT57InVzZSBzdHJpY3QiO1l2KCk7byhaNSwiQ2FyZGluYWxPcGVuIik7WjUucHJvdG90eXBlPXthcmVhU3RhcnQ6byhmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sImFyZWFTdGFydCIpLGFyZWFFbmQ6byhmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSwiYXJlYUVuZCIpLGxpbmVTdGFydDpvKGZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX3BvaW50PTB9LCJsaW5lU3RhcnQiKSxsaW5lRW5kOm8oZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MykmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LCJsaW5lRW5kIikscG9pbnQ6byhmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OmowKHRoaXMsdCxlKTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9LCJwb2ludCIpfTtZRD1vKGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gbmV3IFo1KG4sZSl9cmV0dXJuIG8ociwiY2FyZGluYWwiKSxyLnRlbnNpb249ZnVuY3Rpb24obil7cmV0dXJuIHQoK24pfSxyfSwiY3VzdG9tIikoMCl9KTtmdW5jdGlvbiBYdih0LGUscil7dmFyIG49dC5feDEsaT10Ll95MSxhPXQuX3gyLHM9dC5feTI7aWYodC5fbDAxX2E+Wmkpe3ZhciBsPTIqdC5fbDAxXzJhKzMqdC5fbDAxX2EqdC5fbDEyX2ErdC5fbDEyXzJhLHU9Myp0Ll9sMDFfYSoodC5fbDAxX2ErdC5fbDEyX2EpO249KG4qbC10Ll94MCp0Ll9sMTJfMmErdC5feDIqdC5fbDAxXzJhKS91LGk9KGkqbC10Ll95MCp0Ll9sMTJfMmErdC5feTIqdC5fbDAxXzJhKS91fWlmKHQuX2wyM19hPlppKXt2YXIgaD0yKnQuX2wyM18yYSszKnQuX2wyM19hKnQuX2wxMl9hK3QuX2wxMl8yYSxmPTMqdC5fbDIzX2EqKHQuX2wyM19hK3QuX2wxMl9hKTthPShhKmgrdC5feDEqdC5fbDIzXzJhLWUqdC5fbDEyXzJhKS9mLHM9KHMqaCt0Ll95MSp0Ll9sMjNfMmEtcip0Ll9sMTJfMmEpL2Z9dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKG4saSxhLHMsdC5feDIsdC5feTIpfWZ1bmN0aW9uIGtZKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPWV9dmFyIGp2LEo1PU4oKCk9PnsidXNlIHN0cmljdCI7VTUoKTtZdigpO28oWHYsInBvaW50Iik7byhrWSwiQ2F0bXVsbFJvbSIpO2tZLnByb3RvdHlwZT17YXJlYVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LCJhcmVhU3RhcnQiKSxhcmVhRW5kOm8oZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sImFyZWFFbmQiKSxsaW5lU3RhcnQ6byhmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSwibGluZVN0YXJ0IiksbGluZUVuZDpvKGZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKTticmVha30odGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LCJsaW5lRW5kIikscG9pbnQ6byhmdW5jdGlvbih0LGUpe2lmKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItdCxuPXRoaXMuX3kyLWU7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0Olh2KHRoaXMsdCxlKTticmVha310aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfSwicG9pbnQiKX07anY9byhmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIHIobil7cmV0dXJuIGU/bmV3IGtZKG4sZSk6bmV3IEs1KG4sMCl9cmV0dXJuIG8ociwiY2F0bXVsbFJvbSIpLHIuYWxwaGE9ZnVuY3Rpb24obil7cmV0dXJuIHQoK24pfSxyfSwiY3VzdG9tIikoLjUpfSk7ZnVuY3Rpb24gRVkodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9ZX12YXIgakQsU1k9TigoKT0+eyJ1c2Ugc3RyaWN0IjtxRCgpO1V2KCk7SjUoKTtvKEVZLCJDYXRtdWxsUm9tQ2xvc2VkIik7RVkucHJvdG90eXBlPXthcmVhU3RhcnQ6cm8sYXJlYUVuZDpybyxsaW5lU3RhcnQ6byhmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSwibGluZVN0YXJ0IiksbGluZUVuZDpvKGZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KTticmVha319fSwibGluZUVuZCIpLHBvaW50Om8oZnVuY3Rpb24odCxlKXtpZih0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe3ZhciByPXRoaXMuX3gyLXQsbj10aGlzLl95Mi1lO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cocipyK24qbix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9dCx0aGlzLl95Mz1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PXQsdGhpcy5feTQ9ZSk7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9dCx0aGlzLl95NT1lO2JyZWFrO2RlZmF1bHQ6WHYodGhpcyx0LGUpO2JyZWFrfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9LCJwb2ludCIpfTtqRD1vKGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gZT9uZXcgRVkobixlKTpuZXcgUTUobiwwKX1yZXR1cm4gbyhyLCJjYXRtdWxsUm9tIiksci5hbHBoYT1mdW5jdGlvbihuKXtyZXR1cm4gdCgrbil9LHJ9LCJjdXN0b20iKSguNSl9KTtmdW5jdGlvbiBDWSh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1lfXZhciBLRCxBWT1OKCgpPT57InVzZSBzdHJpY3QiO1hEKCk7SjUoKTtvKENZLCJDYXRtdWxsUm9tT3BlbiIpO0NZLnByb3RvdHlwZT17YXJlYVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LCJhcmVhU3RhcnQiKSxhcmVhRW5kOm8oZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sImFyZWFFbmQiKSxsaW5lU3RhcnQ6byhmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSwibGluZVN0YXJ0IiksbGluZUVuZDpvKGZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTMpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSwibGluZUVuZCIpLHBvaW50Om8oZnVuY3Rpb24odCxlKXtpZih0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe3ZhciByPXRoaXMuX3gyLXQsbj10aGlzLl95Mi1lO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cocipyK24qbix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6WHYodGhpcyx0LGUpO2JyZWFrfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9LCJwb2ludCIpfTtLRD1vKGZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gZT9uZXcgQ1kobixlKTpuZXcgWjUobiwwKX1yZXR1cm4gbyhyLCJjYXRtdWxsUm9tIiksci5hbHBoYT1mdW5jdGlvbihuKXtyZXR1cm4gdCgrbil9LHJ9LCJjdXN0b20iKSguNSl9KTtmdW5jdGlvbiBfWSh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gZVQodCl7cmV0dXJuIG5ldyBfWSh0KX12YXIgRFk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtVdigpO28oX1ksIkxpbmVhckNsb3NlZCIpO19ZLnByb3RvdHlwZT17YXJlYVN0YXJ0OnJvLGFyZWFFbmQ6cm8sbGluZVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSwibGluZVN0YXJ0IiksbGluZUVuZDpvKGZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LCJsaW5lRW5kIikscG9pbnQ6byhmdW5jdGlvbih0LGUpe3Q9K3QsZT0rZSx0aGlzLl9wb2ludD90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOih0aGlzLl9wb2ludD0xLHRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSkpfSwicG9pbnQiKX07byhlVCwiZGVmYXVsdCIpfSk7ZnVuY3Rpb24gTFkodCl7cmV0dXJuIHQ8MD8tMToxfWZ1bmN0aW9uIFJZKHQsZSxyKXt2YXIgbj10Ll94MS10Ll94MCxpPWUtdC5feDEsYT0odC5feTEtdC5feTApLyhufHxpPDAmJi0wKSxzPShyLXQuX3kxKS8oaXx8bjwwJiYtMCksbD0oYSppK3MqbikvKG4raSk7cmV0dXJuKExZKGEpK0xZKHMpKSpNYXRoLm1pbihNYXRoLmFicyhhKSxNYXRoLmFicyhzKSwuNSpNYXRoLmFicyhsKSl8fDB9ZnVuY3Rpb24gTlkodCxlKXt2YXIgcj10Ll94MS10Ll94MDtyZXR1cm4gcj8oMyoodC5feTEtdC5feTApL3ItZSkvMjplfWZ1bmN0aW9uIFFEKHQsZSxyKXt2YXIgbj10Ll94MCxpPXQuX3kwLGE9dC5feDEscz10Ll95MSxsPShhLW4pLzM7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKG4rbCxpK2wqZSxhLWwscy1sKnIsYSxzKX1mdW5jdGlvbiB0VCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gTVkodCl7dGhpcy5fY29udGV4dD1uZXcgSVkodCl9ZnVuY3Rpb24gSVkodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIEt2KHQpe3JldHVybiBuZXcgdFQodCl9ZnVuY3Rpb24gUXYodCl7cmV0dXJuIG5ldyBNWSh0KX12YXIgT1k9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKExZLCJzaWduIik7byhSWSwic2xvcGUzIik7byhOWSwic2xvcGUyIik7byhRRCwicG9pbnQiKTtvKHRULCJNb25vdG9uZVgiKTt0VC5wcm90b3R5cGU9e2FyZWFTdGFydDpvKGZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSwiYXJlYVN0YXJ0IiksYXJlYUVuZDpvKGZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LCJhcmVhRW5kIiksbGluZVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT10aGlzLl90MD1OYU4sdGhpcy5fcG9pbnQ9MH0sImxpbmVTdGFydCIpLGxpbmVFbmQ6byhmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKTticmVhaztjYXNlIDM6UUQodGhpcyx0aGlzLl90MCxOWSh0aGlzLHRoaXMuX3QwKSk7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSwibGluZUVuZCIpLHBvaW50Om8oZnVuY3Rpb24odCxlKXt2YXIgcj1OYU47aWYodD0rdCxlPStlLCEodD09PXRoaXMuX3gxJiZlPT09dGhpcy5feTEpKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLFFEKHRoaXMsTlkodGhpcyxyPVJZKHRoaXMsdCxlKSkscik7YnJlYWs7ZGVmYXVsdDpRRCh0aGlzLHRoaXMuX3QwLHI9UlkodGhpcyx0LGUpKTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWUsdGhpcy5fdDA9cn19LCJwb2ludCIpfTtvKE1ZLCJNb25vdG9uZVkiKTsoTVkucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodFQucHJvdG90eXBlKSkucG9pbnQ9ZnVuY3Rpb24odCxlKXt0VC5wcm90b3R5cGUucG9pbnQuY2FsbCh0aGlzLGUsdCl9O28oSVksIlJlZmxlY3RDb250ZXh0Iik7SVkucHJvdG90eXBlPXttb3ZlVG86byhmdW5jdGlvbih0LGUpe3RoaXMuX2NvbnRleHQubW92ZVRvKGUsdCl9LCJtb3ZlVG8iKSxjbG9zZVBhdGg6byhmdW5jdGlvbigpe3RoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LCJjbG9zZVBhdGgiKSxsaW5lVG86byhmdW5jdGlvbih0LGUpe3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCl9LCJsaW5lVG8iKSxiZXppZXJDdXJ2ZVRvOm8oZnVuY3Rpb24odCxlLHIsbixpLGEpe3RoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhlLHQsbixyLGEsaSl9LCJiZXppZXJDdXJ2ZVRvIil9O28oS3YsIm1vbm90b25lWCIpO28oUXYsIm1vbm90b25lWSIpfSk7ZnVuY3Rpb24gQlkodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIFBZKHQpe3ZhciBlLHI9dC5sZW5ndGgtMSxuLGk9bmV3IEFycmF5KHIpLGE9bmV3IEFycmF5KHIpLHM9bmV3IEFycmF5KHIpO2ZvcihpWzBdPTAsYVswXT0yLHNbMF09dFswXSsyKnRbMV0sZT0xO2U8ci0xOysrZSlpW2VdPTEsYVtlXT00LHNbZV09NCp0W2VdKzIqdFtlKzFdO2ZvcihpW3ItMV09MixhW3ItMV09NyxzW3ItMV09OCp0W3ItMV0rdFtyXSxlPTE7ZTxyOysrZSluPWlbZV0vYVtlLTFdLGFbZV0tPW4sc1tlXS09bipzW2UtMV07Zm9yKGlbci0xXT1zW3ItMV0vYVtyLTFdLGU9ci0yO2U+PTA7LS1lKWlbZV09KHNbZV0taVtlKzFdKS9hW2VdO2ZvcihhW3ItMV09KHRbcl0raVtyLTFdKS8yLGU9MDtlPHItMTsrK2UpYVtlXT0yKnRbZSsxXS1pW2UrMV07cmV0dXJuW2ksYV19ZnVuY3Rpb24gSzAodCl7cmV0dXJuIG5ldyBCWSh0KX12YXIgRlk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKEJZLCJOYXR1cmFsIik7QlkucHJvdG90eXBlPXthcmVhU3RhcnQ6byhmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sImFyZWFTdGFydCIpLGFyZWFFbmQ6byhmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSwiYXJlYUVuZCIpLGxpbmVTdGFydDpvKGZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdfSwibGluZVN0YXJ0IiksbGluZUVuZDpvKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5feCxlPXRoaXMuX3kscj10Lmxlbmd0aDtpZihyKWlmKHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odFswXSxlWzBdKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0WzBdLGVbMF0pLHI9PT0yKXRoaXMuX2NvbnRleHQubGluZVRvKHRbMV0sZVsxXSk7ZWxzZSBmb3IodmFyIG49UFkodCksaT1QWShlKSxhPTAscz0xO3M8cjsrK2EsKytzKXRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhuWzBdW2FdLGlbMF1bYV0sblsxXVthXSxpWzFdW2FdLHRbc10sZVtzXSk7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZyPT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUsdGhpcy5feD10aGlzLl95PW51bGx9LCJsaW5lRW5kIikscG9pbnQ6byhmdW5jdGlvbih0LGUpe3RoaXMuX3gucHVzaCgrdCksdGhpcy5feS5wdXNoKCtlKX0sInBvaW50Iil9O28oUFksImNvbnRyb2xQb2ludHMiKTtvKEswLCJkZWZhdWx0Iil9KTtmdW5jdGlvbiByVCh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl90PWV9ZnVuY3Rpb24gUTAodCl7cmV0dXJuIG5ldyByVCh0LC41KX1mdW5jdGlvbiBadih0KXtyZXR1cm4gbmV3IHJUKHQsMCl9ZnVuY3Rpb24gSnYodCl7cmV0dXJuIG5ldyByVCh0LDEpfXZhciAkWT1OKCgpPT57InVzZSBzdHJpY3QiO28oclQsIlN0ZXAiKTtyVC5wcm90b3R5cGU9e2FyZWFTdGFydDpvKGZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSwiYXJlYVN0YXJ0IiksYXJlYUVuZDpvKGZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LCJhcmVhRW5kIiksbGluZVN0YXJ0Om8oZnVuY3Rpb24oKXt0aGlzLl94PXRoaXMuX3k9TmFOLHRoaXMuX3BvaW50PTB9LCJsaW5lU3RhcnQiKSxsaW5lRW5kOm8oZnVuY3Rpb24oKXswPHRoaXMuX3QmJnRoaXMuX3Q8MSYmdGhpcy5fcG9pbnQ9PT0yJiZ0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LHRoaXMuX3kpLCh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPj0wJiYodGhpcy5fdD0xLXRoaXMuX3QsdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUpfSwibGluZUVuZCIpLHBvaW50Om8oZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OntpZih0aGlzLl90PD0wKXRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsZSksdGhpcy5fY29udGV4dC5saW5lVG8odCxlKTtlbHNle3ZhciByPXRoaXMuX3gqKDEtdGhpcy5fdCkrdCp0aGlzLl90O3RoaXMuX2NvbnRleHQubGluZVRvKHIsdGhpcy5feSksdGhpcy5fY29udGV4dC5saW5lVG8ocixlKX1icmVha319dGhpcy5feD10LHRoaXMuX3k9ZX0sInBvaW50Iil9O28oUTAsImRlZmF1bHQiKTtvKFp2LCJzdGVwQmVmb3JlIik7byhKdiwic3RlcEFmdGVyIil9KTt2YXIgelk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvWSgpO2ZZKCk7bVkoKTt2WSgpO2JZKCk7V3YoKTtnWSgpO3dZKCk7cUQoKTtYRCgpO1l2KCk7U1koKTtBWSgpO0o1KCk7RFkoKTtHRCgpO09ZKCk7RlkoKTskWSgpfSk7dmFyIEdZPU4oKCk9PnsidXNlIHN0cmljdCJ9KTt2YXIgVlk9TigoKT0+eyJ1c2Ugc3RyaWN0In0pO2Z1bmN0aW9uIE9oKHQsZSxyKXt0aGlzLms9dCx0aGlzLng9ZSx0aGlzLnk9cn1mdW5jdGlvbiBKRCh0KXtmb3IoOyF0Ll9fem9vbTspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuIFpEO3JldHVybiB0Ll9fem9vbX12YXIgWkQsZTk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKE9oLCJUcmFuc2Zvcm0iKTtPaC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk9oLHNjYWxlOm8oZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT0xP3RoaXM6bmV3IE9oKHRoaXMuayp0LHRoaXMueCx0aGlzLnkpfSwic2NhbGUiKSx0cmFuc2xhdGU6byhmdW5jdGlvbih0LGUpe3JldHVybiB0PT09MCZlPT09MD90aGlzOm5ldyBPaCh0aGlzLmssdGhpcy54K3RoaXMuayp0LHRoaXMueSt0aGlzLmsqZSl9LCJ0cmFuc2xhdGUiKSxhcHBseTpvKGZ1bmN0aW9uKHQpe3JldHVyblt0WzBdKnRoaXMuayt0aGlzLngsdFsxXSp0aGlzLmsrdGhpcy55XX0sImFwcGx5IiksYXBwbHlYOm8oZnVuY3Rpb24odCl7cmV0dXJuIHQqdGhpcy5rK3RoaXMueH0sImFwcGx5WCIpLGFwcGx5WTpvKGZ1bmN0aW9uKHQpe3JldHVybiB0KnRoaXMuayt0aGlzLnl9LCJhcHBseVkiKSxpbnZlcnQ6byhmdW5jdGlvbih0KXtyZXR1cm5bKHRbMF0tdGhpcy54KS90aGlzLmssKHRbMV0tdGhpcy55KS90aGlzLmtdfSwiaW52ZXJ0IiksaW52ZXJ0WDpvKGZ1bmN0aW9uKHQpe3JldHVybih0LXRoaXMueCkvdGhpcy5rfSwiaW52ZXJ0WCIpLGludmVydFk6byhmdW5jdGlvbih0KXtyZXR1cm4odC10aGlzLnkpL3RoaXMua30sImludmVydFkiKSxyZXNjYWxlWDpvKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvcHkoKS5kb21haW4odC5yYW5nZSgpLm1hcCh0aGlzLmludmVydFgsdGhpcykubWFwKHQuaW52ZXJ0LHQpKX0sInJlc2NhbGVYIikscmVzY2FsZVk6byhmdW5jdGlvbih0KXtyZXR1cm4gdC5jb3B5KCkuZG9tYWluKHQucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRZLHRoaXMpLm1hcCh0LmludmVydCx0KSl9LCJyZXNjYWxlWSIpLHRvU3RyaW5nOm8oZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifSwidG9TdHJpbmciKX07WkQ9bmV3IE9oKDEsMCwwKTtKRC5wcm90b3R5cGU9T2gucHJvdG90eXBlO28oSkQsInRyYW5zZm9ybSIpfSk7dmFyIFVZPU4oKCk9PnsidXNlIHN0cmljdCJ9KTt2YXIgSFk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtiNSgpO0dZKCk7VlkoKTtlOSgpO1VZKCl9KTt2YXIgV1k9TigoKT0+eyJ1c2Ugc3RyaWN0IjtIWSgpO2U5KCl9KTt2YXIgZnI9TigoKT0+eyJ1c2Ugc3RyaWN0IjtFaCgpO0pWKCk7dlcoKTt3VygpO0kwKCk7a1coKTtFVygpO1ZBKCk7SFUoKTtTVygpO0xfKCk7Q1coKTtfVygpO1lfKCk7VlcoKTtmcSgpO0IwKCk7T18oKTtkcSgpO0FXKCk7cHEoKTt0WSgpO2lZKCk7eWwoKTt6WSgpOyQ1KCk7SUQoKTtwNSgpO2I1KCk7V1koKX0pO3ZhciBxWT1QaShKaT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSmksIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO0ppLkJMQU5LX1VSTD1KaS5yZWxhdGl2ZUZpcnN0Q2hhcmFjdGVycz1KaS53aGl0ZXNwYWNlRXNjYXBlQ2hhcnNSZWdleD1KaS51cmxTY2hlbWVSZWdleD1KaS5jdHJsQ2hhcmFjdGVyc1JlZ2V4PUppLmh0bWxDdHJsRW50aXR5UmVnZXg9SmkuaHRtbEVudGl0aWVzUmVnZXg9SmkuaW52YWxpZFByb3RvY29sUmVnZXg9dm9pZCAwO0ppLmludmFsaWRQcm90b2NvbFJlZ2V4PS9eKFteXHddKikoamF2YXNjcmlwdHxkYXRhfHZic2NyaXB0KS9pbTtKaS5odG1sRW50aXRpZXNSZWdleD0vJiMoXHcrKSheXHd8Oyk/L2c7SmkuaHRtbEN0cmxFbnRpdHlSZWdleD0vJihuZXdsaW5lfHRhYik7L2dpO0ppLmN0cmxDaGFyYWN0ZXJzUmVnZXg9L1tcdTAwMDAtXHUwMDFGXHUwMDdGLVx1MDA5Rlx1MjAwMC1cdTIwMERcdUZFRkZdL2dpbTtKaS51cmxTY2hlbWVSZWdleD0vXi4rKDp8JmNvbG9uOykvZ2ltO0ppLndoaXRlc3BhY2VFc2NhcGVDaGFyc1JlZ2V4PS8oXFx8JTVbY0NdKSgoJSg2W2VFXXw3Mnw3NCkpfFtucnRdKS9nO0ppLnJlbGF0aXZlRmlyc3RDaGFyYWN0ZXJzPVsiLiIsIi8iXTtKaS5CTEFOS19VUkw9ImFib3V0OmJsYW5rIn0pO3ZhciBaMD1QaShuVD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoblQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO25ULnNhbml0aXplVXJsPXZvaWQgMDt2YXIgTGE9cVkoKTtmdW5jdGlvbiBnU2UodCl7cmV0dXJuIExhLnJlbGF0aXZlRmlyc3RDaGFyYWN0ZXJzLmluZGV4T2YodFswXSk+LTF9byhnU2UsImlzUmVsYXRpdmVVcmxXaXRob3V0UHJvdG9jb2wiKTtmdW5jdGlvbiB5U2UodCl7dmFyIGU9dC5yZXBsYWNlKExhLmN0cmxDaGFyYWN0ZXJzUmVnZXgsIiIpO3JldHVybiBlLnJlcGxhY2UoTGEuaHRtbEVudGl0aWVzUmVnZXgsZnVuY3Rpb24ocixuKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShuKX0pfW8oeVNlLCJkZWNvZGVIdG1sQ2hhcmFjdGVycyIpO2Z1bmN0aW9uIHZTZSh0KXtyZXR1cm4gVVJMLmNhblBhcnNlKHQpfW8odlNlLCJpc1ZhbGlkVXJsIik7ZnVuY3Rpb24gWVkodCl7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQodCl9Y2F0Y2h7cmV0dXJuIHR9fW8oWVksImRlY29kZVVSSSIpO2Z1bmN0aW9uIHhTZSh0KXtpZighdClyZXR1cm4gTGEuQkxBTktfVVJMO3ZhciBlLHI9WVkodC50cmltKCkpO2RvIHI9eVNlKHIpLnJlcGxhY2UoTGEuaHRtbEN0cmxFbnRpdHlSZWdleCwiIikucmVwbGFjZShMYS5jdHJsQ2hhcmFjdGVyc1JlZ2V4LCIiKS5yZXBsYWNlKExhLndoaXRlc3BhY2VFc2NhcGVDaGFyc1JlZ2V4LCIiKS50cmltKCkscj1ZWShyKSxlPXIubWF0Y2goTGEuY3RybENoYXJhY3RlcnNSZWdleCl8fHIubWF0Y2goTGEuaHRtbEVudGl0aWVzUmVnZXgpfHxyLm1hdGNoKExhLmh0bWxDdHJsRW50aXR5UmVnZXgpfHxyLm1hdGNoKExhLndoaXRlc3BhY2VFc2NhcGVDaGFyc1JlZ2V4KTt3aGlsZShlJiZlLmxlbmd0aD4wKTt2YXIgbj1yO2lmKCFuKXJldHVybiBMYS5CTEFOS19VUkw7aWYoZ1NlKG4pKXJldHVybiBuO3ZhciBpPW4udHJpbVN0YXJ0KCksYT1pLm1hdGNoKExhLnVybFNjaGVtZVJlZ2V4KTtpZighYSlyZXR1cm4gbjt2YXIgcz1hWzBdLnRvTG93ZXJDYXNlKCkudHJpbSgpO2lmKExhLmludmFsaWRQcm90b2NvbFJlZ2V4LnRlc3QocykpcmV0dXJuIExhLkJMQU5LX1VSTDt2YXIgbD1pLnJlcGxhY2UoL1xcL2csIi8iKTtpZihzPT09Im1haWx0bzoifHxzLmluY2x1ZGVzKCI6Ly8iKSlyZXR1cm4gbDtpZihzPT09Imh0dHA6Inx8cz09PSJodHRwczoiKXtpZighdlNlKGwpKXJldHVybiBMYS5CTEFOS19VUkw7dmFyIHU9bmV3IFVSTChsKTtyZXR1cm4gdS5wcm90b2NvbD11LnByb3RvY29sLnRvTG93ZXJDYXNlKCksdS5ob3N0bmFtZT11Lmhvc3RuYW1lLnRvTG93ZXJDYXNlKCksdS50b1N0cmluZygpfXJldHVybiBsfW8oeFNlLCJzYW5pdGl6ZVVybCIpO25ULnNhbml0aXplVXJsPXhTZX0pO3ZhciB0OSxOZCxpVCxYWSxqWSxLWSxBbCxlMix0Mj1OKCgpPT57InVzZSBzdHJpY3QiO3Q5PUFhKFowKCksMSk7cHIoKTtOZD1vKCh0LGUpPT57bGV0IHI9dC5hcHBlbmQoInJlY3QiKTtpZihyLmF0dHIoIngiLGUueCksci5hdHRyKCJ5IixlLnkpLHIuYXR0cigiZmlsbCIsZS5maWxsKSxyLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLHIuYXR0cigid2lkdGgiLGUud2lkdGgpLHIuYXR0cigiaGVpZ2h0IixlLmhlaWdodCksZS5uYW1lJiZyLmF0dHIoIm5hbWUiLGUubmFtZSksZS5yeCYmci5hdHRyKCJyeCIsZS5yeCksZS5yeSYmci5hdHRyKCJyeSIsZS5yeSksZS5hdHRycyE9PXZvaWQgMClmb3IobGV0IG4gaW4gZS5hdHRycylyLmF0dHIobixlLmF0dHJzW25dKTtyZXR1cm4gZS5jbGFzcyYmci5hdHRyKCJjbGFzcyIsZS5jbGFzcykscn0sImRyYXdSZWN0IiksaVQ9bygodCxlKT0+e2xldCByPXt4OmUuc3RhcnR4LHk6ZS5zdGFydHksd2lkdGg6ZS5zdG9weC1lLnN0YXJ0eCxoZWlnaHQ6ZS5zdG9weS1lLnN0YXJ0eSxmaWxsOmUuZmlsbCxzdHJva2U6ZS5zdHJva2UsY2xhc3M6InJlY3QifTtOZCh0LHIpLmxvd2VyKCl9LCJkcmF3QmFja2dyb3VuZFJlY3QiKSxYWT1vKCh0LGUpPT57bGV0IHI9ZS50ZXh0LnJlcGxhY2UodWQsIiAiKSxuPXQuYXBwZW5kKCJ0ZXh0Iik7bi5hdHRyKCJ4IixlLngpLG4uYXR0cigieSIsZS55KSxuLmF0dHIoImNsYXNzIiwibGVnZW5kIiksbi5zdHlsZSgidGV4dC1hbmNob3IiLGUuYW5jaG9yKSxlLmNsYXNzJiZuLmF0dHIoImNsYXNzIixlLmNsYXNzKTtsZXQgaT1uLmFwcGVuZCgidHNwYW4iKTtyZXR1cm4gaS5hdHRyKCJ4IixlLngrZS50ZXh0TWFyZ2luKjIpLGkudGV4dChyKSxufSwiZHJhd1RleHQiKSxqWT1vKCh0LGUscixuKT0+e2xldCBpPXQuYXBwZW5kKCJpbWFnZSIpO2kuYXR0cigieCIsZSksaS5hdHRyKCJ5IixyKTtsZXQgYT0oMCx0OS5zYW5pdGl6ZVVybCkobik7aS5hdHRyKCJ4bGluazpocmVmIixhKX0sImRyYXdJbWFnZSIpLEtZPW8oKHQsZSxyLG4pPT57bGV0IGk9dC5hcHBlbmQoInVzZSIpO2kuYXR0cigieCIsZSksaS5hdHRyKCJ5IixyKTtsZXQgYT0oMCx0OS5zYW5pdGl6ZVVybCkobik7aS5hdHRyKCJ4bGluazpocmVmIixgIyR7YX1gKX0sImRyYXdFbWJlZGRlZEltYWdlIiksQWw9bygoKT0+KHt4OjAseTowLHdpZHRoOjEwMCxoZWlnaHQ6MTAwLGZpbGw6IiNFREYyQUUiLHN0cm9rZToiIzY2NiIsYW5jaG9yOiJzdGFydCIscng6MCxyeTowfSksImdldE5vdGVSZWN0IiksZTI9bygoKT0+KHt4OjAseTowLHdpZHRoOjEwMCxoZWlnaHQ6MTAwLCJ0ZXh0LWFuY2hvciI6InN0YXJ0IixzdHlsZToiIzY2NiIsdGV4dE1hcmdpbjowLHJ4OjAscnk6MCx0c3BhbjohMH0pLCJnZXRUZXh0T2JqIil9KTt2YXIgUVkscjksWlksYlNlLFRTZSx3U2Usa1NlLEVTZSxTU2UsQ1NlLEFTZSxfU2UsRFNlLExTZSxSU2UsQ3UsX2wsSlk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtwcigpO3QyKCk7UVk9QWEoWjAoKSwxKSxyOT1vKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE5kKHQsZSl9LCJkcmF3UmVjdCIpLFpZPW8oZnVuY3Rpb24odCxlLHIsbixpLGEpe2xldCBzPXQuYXBwZW5kKCJpbWFnZSIpO3MuYXR0cigid2lkdGgiLGUpLHMuYXR0cigiaGVpZ2h0IixyKSxzLmF0dHIoIngiLG4pLHMuYXR0cigieSIsaSk7bGV0IGw9YS5zdGFydHNXaXRoKCJkYXRhOmltYWdlL3BuZztiYXNlNjQiKT9hOigwLFFZLnNhbml0aXplVXJsKShhKTtzLmF0dHIoInhsaW5rOmhyZWYiLGwpfSwiZHJhd0ltYWdlIiksYlNlPW8oKHQsZSxyKT0+e2xldCBuPXQuYXBwZW5kKCJnIiksaT0wO2ZvcihsZXQgYSBvZiBlKXtsZXQgcz1hLnRleHRDb2xvcj9hLnRleHRDb2xvcjoiIzQ0NDQ0NCIsbD1hLmxpbmVDb2xvcj9hLmxpbmVDb2xvcjoiIzQ0NDQ0NCIsdT1hLm9mZnNldFg/cGFyc2VJbnQoYS5vZmZzZXRYKTowLGg9YS5vZmZzZXRZP3BhcnNlSW50KGEub2Zmc2V0WSk6MCxmPSIiO2lmKGk9PT0wKXtsZXQgcD1uLmFwcGVuZCgibGluZSIpO3AuYXR0cigieDEiLGEuc3RhcnRQb2ludC54KSxwLmF0dHIoInkxIixhLnN0YXJ0UG9pbnQueSkscC5hdHRyKCJ4MiIsYS5lbmRQb2ludC54KSxwLmF0dHIoInkyIixhLmVuZFBvaW50LnkpLHAuYXR0cigic3Ryb2tlLXdpZHRoIiwiMSIpLHAuYXR0cigic3Ryb2tlIixsKSxwLnN0eWxlKCJmaWxsIiwibm9uZSIpLGEudHlwZSE9PSJyZWxfYiImJnAuYXR0cigibWFya2VyLWVuZCIsInVybCgiK2YrIiNhcnJvd2hlYWQpIiksKGEudHlwZT09PSJiaXJlbCJ8fGEudHlwZT09PSJyZWxfYiIpJiZwLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK2YrIiNhcnJvd2VuZCkiKSxpPS0xfWVsc2V7bGV0IHA9bi5hcHBlbmQoInBhdGgiKTtwLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMSIpLmF0dHIoInN0cm9rZSIsbCkuYXR0cigiZCIsIk1zdGFydHgsc3RhcnR5IFFjb250cm9seCxjb250cm9seSBzdG9weCxzdG9weSAiLnJlcGxhY2VBbGwoInN0YXJ0eCIsYS5zdGFydFBvaW50LngpLnJlcGxhY2VBbGwoInN0YXJ0eSIsYS5zdGFydFBvaW50LnkpLnJlcGxhY2VBbGwoImNvbnRyb2x4IixhLnN0YXJ0UG9pbnQueCsoYS5lbmRQb2ludC54LWEuc3RhcnRQb2ludC54KS8yLShhLmVuZFBvaW50LngtYS5zdGFydFBvaW50LngpLzQpLnJlcGxhY2VBbGwoImNvbnRyb2x5IixhLnN0YXJ0UG9pbnQueSsoYS5lbmRQb2ludC55LWEuc3RhcnRQb2ludC55KS8yKS5yZXBsYWNlQWxsKCJzdG9weCIsYS5lbmRQb2ludC54KS5yZXBsYWNlQWxsKCJzdG9weSIsYS5lbmRQb2ludC55KSksYS50eXBlIT09InJlbF9iIiYmcC5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrZisiI2Fycm93aGVhZCkiKSwoYS50eXBlPT09ImJpcmVsInx8YS50eXBlPT09InJlbF9iIikmJnAuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrZisiI2Fycm93ZW5kKSIpfWxldCBkPXIubWVzc2FnZUZvbnQoKTtDdShyKShhLmxhYmVsLnRleHQsbixNYXRoLm1pbihhLnN0YXJ0UG9pbnQueCxhLmVuZFBvaW50LngpK01hdGguYWJzKGEuZW5kUG9pbnQueC1hLnN0YXJ0UG9pbnQueCkvMit1LE1hdGgubWluKGEuc3RhcnRQb2ludC55LGEuZW5kUG9pbnQueSkrTWF0aC5hYnMoYS5lbmRQb2ludC55LWEuc3RhcnRQb2ludC55KS8yK2gsYS5sYWJlbC53aWR0aCxhLmxhYmVsLmhlaWdodCx7ZmlsbDpzfSxkKSxhLnRlY2huJiZhLnRlY2huLnRleHQhPT0iIiYmKGQ9ci5tZXNzYWdlRm9udCgpLEN1KHIpKCJbIithLnRlY2huLnRleHQrIl0iLG4sTWF0aC5taW4oYS5zdGFydFBvaW50LngsYS5lbmRQb2ludC54KStNYXRoLmFicyhhLmVuZFBvaW50LngtYS5zdGFydFBvaW50LngpLzIrdSxNYXRoLm1pbihhLnN0YXJ0UG9pbnQueSxhLmVuZFBvaW50LnkpK01hdGguYWJzKGEuZW5kUG9pbnQueS1hLnN0YXJ0UG9pbnQueSkvMityLm1lc3NhZ2VGb250U2l6ZSs1K2gsTWF0aC5tYXgoYS5sYWJlbC53aWR0aCxhLnRlY2huLndpZHRoKSxhLnRlY2huLmhlaWdodCx7ZmlsbDpzLCJmb250LXN0eWxlIjoiaXRhbGljIn0sZCkpfX0sImRyYXdSZWxzIiksVFNlPW8oZnVuY3Rpb24odCxlLHIpe2xldCBuPXQuYXBwZW5kKCJnIiksaT1lLmJnQ29sb3I/ZS5iZ0NvbG9yOiJub25lIixhPWUuYm9yZGVyQ29sb3I/ZS5ib3JkZXJDb2xvcjoiIzQ0NDQ0NCIscz1lLmZvbnRDb2xvcj9lLmZvbnRDb2xvcjoiYmxhY2siLGw9eyJzdHJva2Utd2lkdGgiOjEsInN0cm9rZS1kYXNoYXJyYXkiOiI3LjAsNy4wIn07ZS5ub2RlVHlwZSYmKGw9eyJzdHJva2Utd2lkdGgiOjF9KTtsZXQgdT17eDplLngseTplLnksZmlsbDppLHN0cm9rZTphLHdpZHRoOmUud2lkdGgsaGVpZ2h0OmUuaGVpZ2h0LHJ4OjIuNSxyeToyLjUsYXR0cnM6bH07cjkobix1KTtsZXQgaD1yLmJvdW5kYXJ5Rm9udCgpO2guZm9udFdlaWdodD0iYm9sZCIsaC5mb250U2l6ZT1oLmZvbnRTaXplKzIsaC5mb250Q29sb3I9cyxDdShyKShlLmxhYmVsLnRleHQsbixlLngsZS55K2UubGFiZWwuWSxlLndpZHRoLGUuaGVpZ2h0LHtmaWxsOiIjNDQ0NDQ0In0saCksZS50eXBlJiZlLnR5cGUudGV4dCE9PSIiJiYoaD1yLmJvdW5kYXJ5Rm9udCgpLGguZm9udENvbG9yPXMsQ3UocikoZS50eXBlLnRleHQsbixlLngsZS55K2UudHlwZS5ZLGUud2lkdGgsZS5oZWlnaHQse2ZpbGw6IiM0NDQ0NDQifSxoKSksZS5kZXNjciYmZS5kZXNjci50ZXh0IT09IiImJihoPXIuYm91bmRhcnlGb250KCksaC5mb250U2l6ZT1oLmZvbnRTaXplLTIsaC5mb250Q29sb3I9cyxDdShyKShlLmRlc2NyLnRleHQsbixlLngsZS55K2UuZGVzY3IuWSxlLndpZHRoLGUuaGVpZ2h0LHtmaWxsOiIjNDQ0NDQ0In0saCkpfSwiZHJhd0JvdW5kYXJ5Iiksd1NlPW8oZnVuY3Rpb24odCxlLHIpe2xldCBuPWUuYmdDb2xvcj9lLmJnQ29sb3I6cltlLnR5cGVDNFNoYXBlLnRleHQrIl9iZ19jb2xvciJdLGk9ZS5ib3JkZXJDb2xvcj9lLmJvcmRlckNvbG9yOnJbZS50eXBlQzRTaGFwZS50ZXh0KyJfYm9yZGVyX2NvbG9yIl0sYT1lLmZvbnRDb2xvcj9lLmZvbnRDb2xvcjoiI0ZGRkZGRiIscz0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFEQUFBQUF3Q0FJQUFBRFlZRzdRQUFBQ0QwbEVRVlI0WHUyWW9VNEVNUkNHVCs0ajhBaThBaGFINFFIZ0FValF1Rk1FQ1VnTUlVZ3dKQWdNaGdRc0FZVWlKQ2lRSUJCWStFSVRzamZUZG1lNlYyNHY0Yzh2eUdiYitaak90TjBiTmN2alFYbWtIODNXdllCV3RvNlBMbTZ2N3A3dUgxL3cyZlhEK1BCeWNYMVB2MmwzSWREbS92bjd4K2RYUWlBdWJSem9VUmE3Z1JaV2QwaUdSSWlKYk9uaG5mWUJRWk5Kak5idXlZMmVKRzhma0RFM2JiRzRlcDZNSFVBc2dZeG1FM25WczZWc0JXSlNHY2NzT2xGUG1MSVZpTXpMT0I3cENWTzJBdEhKTW9oSDdGaDZ6cWl0UUs3bTBySnZBVllnR2NFcGUvL1BMZER6NjVzTTRwRjlON0lDY1hES0lCNU52Nmo3dEQwTm9TZE0yUXJVOUdnMGV3RTFMcUJoSFIzQkJkdmoydmFwbmlkakh4RC9xNnZkN1B2aHIzMUF3Y1k4ZVhNVFhBS0VDWlpKRlh1RXEyN2FMZ1FLNXVMTW9oQ2VuR0d1R2V3T3hTakJ2WUJxZUc2QitOcWlibGdnZGpuYytaWER5K0ZORnBGenc3Nk8zVUJBUk91WGg2Rm9pQWNmNWc5ZVR2VWd6eTBuV2c2SThjWEhSVXBnNWJPVkJDbytLRHBGYWpPZjIzR2dQbWU3UlNRK2xhY0lFTlVnSjZnZzFrNkhqZ09scW5McWlwNHRFdWh2MGhORU1YVUQwY2x5WEUzcDZwWkEwUzJubnZUbFh3TEpFWldsYjdjVFFIMStVU2dUTjRWaEFlbm0vd2VhMU9DQU9tcW82ZkUxV0NiOVdTS0JhaCtyYlVXUFdBbUUyUnZrMEFwaUI0NWVPeU5BelU4eGNUdmo4S3ZrS0VvT2FJWWVITkEzWnV5Z0F2Rk1VTzBBQUFBQVNVVk9SSzVDWUlJPSI7c3dpdGNoKGUudHlwZUM0U2hhcGUudGV4dCl7Y2FzZSJwZXJzb24iOnM9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBREFBQUFBd0NBSUFBQURZWUc3UUFBQUNEMGxFUVZSNFh1MllvVTRFTVJDR1QrNGo4QWk4QWhhSDRRSGdBVWpRdUZNRUNVZ01JVWd3SkFnTWhnUXNBWVVpSkNpUUlCQlkrRUlUc2pmVGRtZTZWMjR2NGM4dnlHYmIrWmpPdE4wYk5jdmpRWG1rSDgzV3ZZQld0bzZQTG02djdwN3VIMS93MmZYRCtQQnljWDFQdjJsM0lkRG0vdm43eCtkWFFpQXViUnpvVVJhN2dSWldkMGlHUklpSmJPbmhuZllCUVpOSmpOYnV5WTJlSkc4ZmtERTNiYkc0ZXA2TUhVQXNnWXhtRTNuVnM2VnNCV0pTR2Njc09sRlBtTElWaU16TE9CN3BDVk8yQXRISk1vaEg3Rmg2enFpdFFLN20wckp2QVZZZ0djRXBlLy9QTGREejY1c000cEY5TjdJQ2NYREtJQjVOdjZqN3REME5vU2RNMlFyVTlHZzBld0UxTHFCaEhSM0JCZHZqMnZhcG5pZGpIeEQvcTZ2ZDdQdmhyMzFBd2NZOGVYTVRYQUtFQ1paSkZYdUVxMjdhTGdRSzV1TE1vaENlbkdHdUdld094U2pCdllCcWVHNkIrTnFpYmxnZ2RqbmMrWlhEeStGTkZwRnp3NzZPM1VCQVJPdVhoNkZvaUFjZjVnOWVUdlVnenkwbldnNkk4Y1hIUlVwZzViT1ZCQ28rS0RwRmFqT2YyM0dnUG1lN1JTUStsYWNJRU5VZ0o2Z2cxazZIamdPbHFuTHFpcDR0RXVodjBoTkVNWFVEMGNseVhFM3A2cFpBMFMybm52VGxYd0xKRVpXbGI3Y1RRSDErVVNnVE40VmhBZW5tL3dlYTFPQ0FPbXFvNmZFMVdDYjlXU0tCYWgrcmJVV1BXQW1FMlJ2azBBcGlCNDVlT3lOQXpVOHhjVHZqOEt2a0tFb09hSVllSE5BM1p1eWdBdkZNVU8wQUFBQUFTVVZPUks1Q1lJST0iO2JyZWFrO2Nhc2UiZXh0ZXJuYWxfcGVyc29uIjpzPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQURBQUFBQXdDQUlBQUFEWVlHN1FBQUFCNkVsRVFWUjRYdTJZTFkrRU1CQ0c5K2RXcjBhajBXZzBHbzFHbzArajhYZHYydVRDdnYxZ3B0MGViSEtQdWhEYWVXNDYwNVo5bUp2eDRBZFhVeVRVZGQwOHordTZmbG1XWlJuSHNXa2FmazlEcHRBd0RQdStmMGVBWXR1MlBFYUdXdWo1ZkNJWnJCQUMyZUxCQW5SQ3NFa2t4bWVhSnA3aURKMlFNRGRIc0xnOFN4S0ZFSmFBbzhsQVhubXVPRkloVE1weHhLQVRlYm80VWlGa251Tm80T25pU0lYUXlSeEVBM1lzbmpHQ1ZFalZYRDd5TFVBcXhCR1V5UHYvWTRXMmJlTWdHdVM3a1ZRSUJ5Y0gwZkQrb2k1cGV6UUVUeGRIS21RS0drMWVRRVlsZEsranc1R3hQZlo5ejdNazBRbmhmMVcxbTN3Ly9FVW41QkRtU1pzYlI0NFFRTEJFcXJCSHFPcm1TS2FRQXhkbkxBckNyeFpjTTdBN1pLczRpb1JxOExGQytOcEMzV0NCSnN2cFZ3NWVkbTlpRVhGdXlOZnhYQWdTd2ZyRlExYzBpTmRhOEFkZWp2VWdua3RPdEpRUXhtY2ZGekdnbGM1V1ZDajdvRGdGcVUxOGJvZUZTczUyQ1VoOExFOEJJVlFEVDFBQnJCMEh0Z1NFWWxYNWRvSm5Dd3Y5VFhvY0tDYUtibndoZERLUHE0bGYzU3dVM0hMcTRWLytXWWhIVk1hLzNiNElsZnlpa0FkdUNrY0JjN21RMy96L1FxL2NUdWlraGt6QjEyQWUvbWNKQzlVK1ZvOEVqMWdXQXRnYmVHZ0ZzQU1IcjUwQklXT0xDYmV6dmhwQkZVZFk2RUp1Si9RRFcwWG9NWDYwelowQUFBQUFTVVZPUks1Q1lJST0iO2JyZWFrfWxldCBsPXQuYXBwZW5kKCJnIik7bC5hdHRyKCJjbGFzcyIsInBlcnNvbi1tYW4iKTtsZXQgdT1BbCgpO3N3aXRjaChlLnR5cGVDNFNoYXBlLnRleHQpe2Nhc2UicGVyc29uIjpjYXNlImV4dGVybmFsX3BlcnNvbiI6Y2FzZSJzeXN0ZW0iOmNhc2UiZXh0ZXJuYWxfc3lzdGVtIjpjYXNlImNvbnRhaW5lciI6Y2FzZSJleHRlcm5hbF9jb250YWluZXIiOmNhc2UiY29tcG9uZW50IjpjYXNlImV4dGVybmFsX2NvbXBvbmVudCI6dS54PWUueCx1Lnk9ZS55LHUuZmlsbD1uLHUud2lkdGg9ZS53aWR0aCx1LmhlaWdodD1lLmhlaWdodCx1LnN0cm9rZT1pLHUucng9Mi41LHUucnk9Mi41LHUuYXR0cnM9eyJzdHJva2Utd2lkdGgiOi41fSxyOShsLHUpO2JyZWFrO2Nhc2Uic3lzdGVtX2RiIjpjYXNlImV4dGVybmFsX3N5c3RlbV9kYiI6Y2FzZSJjb250YWluZXJfZGIiOmNhc2UiZXh0ZXJuYWxfY29udGFpbmVyX2RiIjpjYXNlImNvbXBvbmVudF9kYiI6Y2FzZSJleHRlcm5hbF9jb21wb25lbnRfZGIiOmwuYXBwZW5kKCJwYXRoIikuYXR0cigiZmlsbCIsbikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMC41IikuYXR0cigic3Ryb2tlIixpKS5hdHRyKCJkIiwiTXN0YXJ0eCxzdGFydHljMCwtMTAgaGFsZiwtMTAgaGFsZiwtMTBjMCwwIGhhbGYsMCBoYWxmLDEwbDAsaGVpZ2h0YzAsMTAgLWhhbGYsMTAgLWhhbGYsMTBjMCwwIC1oYWxmLDAgLWhhbGYsLTEwbDAsLWhlaWdodCIucmVwbGFjZUFsbCgic3RhcnR4IixlLngpLnJlcGxhY2VBbGwoInN0YXJ0eSIsZS55KS5yZXBsYWNlQWxsKCJoYWxmIixlLndpZHRoLzIpLnJlcGxhY2VBbGwoImhlaWdodCIsZS5oZWlnaHQpKSxsLmFwcGVuZCgicGF0aCIpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMC41IikuYXR0cigic3Ryb2tlIixpKS5hdHRyKCJkIiwiTXN0YXJ0eCxzdGFydHljMCwxMCBoYWxmLDEwIGhhbGYsMTBjMCwwIGhhbGYsMCBoYWxmLC0xMCIucmVwbGFjZUFsbCgic3RhcnR4IixlLngpLnJlcGxhY2VBbGwoInN0YXJ0eSIsZS55KS5yZXBsYWNlQWxsKCJoYWxmIixlLndpZHRoLzIpKTticmVhaztjYXNlInN5c3RlbV9xdWV1ZSI6Y2FzZSJleHRlcm5hbF9zeXN0ZW1fcXVldWUiOmNhc2UiY29udGFpbmVyX3F1ZXVlIjpjYXNlImV4dGVybmFsX2NvbnRhaW5lcl9xdWV1ZSI6Y2FzZSJjb21wb25lbnRfcXVldWUiOmNhc2UiZXh0ZXJuYWxfY29tcG9uZW50X3F1ZXVlIjpsLmFwcGVuZCgicGF0aCIpLmF0dHIoImZpbGwiLG4pLmF0dHIoInN0cm9rZS13aWR0aCIsIjAuNSIpLmF0dHIoInN0cm9rZSIsaSkuYXR0cigiZCIsIk1zdGFydHgsc3RhcnR5bHdpZHRoLDBjNSwwIDUsaGFsZiA1LGhhbGZjMCwwIDAsaGFsZiAtNSxoYWxmbC13aWR0aCwwYy01LDAgLTUsLWhhbGYgLTUsLWhhbGZjMCwwIDAsLWhhbGYgNSwtaGFsZiIucmVwbGFjZUFsbCgic3RhcnR4IixlLngpLnJlcGxhY2VBbGwoInN0YXJ0eSIsZS55KS5yZXBsYWNlQWxsKCJ3aWR0aCIsZS53aWR0aCkucmVwbGFjZUFsbCgiaGFsZiIsZS5oZWlnaHQvMikpLGwuYXBwZW5kKCJwYXRoIikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIwLjUiKS5hdHRyKCJzdHJva2UiLGkpLmF0dHIoImQiLCJNc3RhcnR4LHN0YXJ0eWMtNSwwIC01LGhhbGYgLTUsaGFsZmMwLGhhbGYgNSxoYWxmIDUsaGFsZiIucmVwbGFjZUFsbCgic3RhcnR4IixlLngrZS53aWR0aCkucmVwbGFjZUFsbCgic3RhcnR5IixlLnkpLnJlcGxhY2VBbGwoImhhbGYiLGUuaGVpZ2h0LzIpKTticmVha31sZXQgaD1SU2UocixlLnR5cGVDNFNoYXBlLnRleHQpO3N3aXRjaChsLmFwcGVuZCgidGV4dCIpLmF0dHIoImZpbGwiLGEpLmF0dHIoImZvbnQtZmFtaWx5IixoLmZvbnRGYW1pbHkpLmF0dHIoImZvbnQtc2l6ZSIsaC5mb250U2l6ZS0yKS5hdHRyKCJmb250LXN0eWxlIiwiaXRhbGljIikuYXR0cigibGVuZ3RoQWRqdXN0Iiwic3BhY2luZyIpLmF0dHIoInRleHRMZW5ndGgiLGUudHlwZUM0U2hhcGUud2lkdGgpLmF0dHIoIngiLGUueCtlLndpZHRoLzItZS50eXBlQzRTaGFwZS53aWR0aC8yKS5hdHRyKCJ5IixlLnkrZS50eXBlQzRTaGFwZS5ZKS50ZXh0KCI8PCIrZS50eXBlQzRTaGFwZS50ZXh0KyI+PiIpLGUudHlwZUM0U2hhcGUudGV4dCl7Y2FzZSJwZXJzb24iOmNhc2UiZXh0ZXJuYWxfcGVyc29uIjpaWShsLDQ4LDQ4LGUueCtlLndpZHRoLzItMjQsZS55K2UuaW1hZ2UuWSxzKTticmVha31sZXQgZj1yW2UudHlwZUM0U2hhcGUudGV4dCsiRm9udCJdKCk7cmV0dXJuIGYuZm9udFdlaWdodD0iYm9sZCIsZi5mb250U2l6ZT1mLmZvbnRTaXplKzIsZi5mb250Q29sb3I9YSxDdShyKShlLmxhYmVsLnRleHQsbCxlLngsZS55K2UubGFiZWwuWSxlLndpZHRoLGUuaGVpZ2h0LHtmaWxsOmF9LGYpLGY9cltlLnR5cGVDNFNoYXBlLnRleHQrIkZvbnQiXSgpLGYuZm9udENvbG9yPWEsZS50ZWNobiYmZS50ZWNobj8udGV4dCE9PSIiP0N1KHIpKGUudGVjaG4udGV4dCxsLGUueCxlLnkrZS50ZWNobi5ZLGUud2lkdGgsZS5oZWlnaHQse2ZpbGw6YSwiZm9udC1zdHlsZSI6Iml0YWxpYyJ9LGYpOmUudHlwZSYmZS50eXBlLnRleHQhPT0iIiYmQ3UocikoZS50eXBlLnRleHQsbCxlLngsZS55K2UudHlwZS5ZLGUud2lkdGgsZS5oZWlnaHQse2ZpbGw6YSwiZm9udC1zdHlsZSI6Iml0YWxpYyJ9LGYpLGUuZGVzY3ImJmUuZGVzY3IudGV4dCE9PSIiJiYoZj1yLnBlcnNvbkZvbnQoKSxmLmZvbnRDb2xvcj1hLEN1KHIpKGUuZGVzY3IudGV4dCxsLGUueCxlLnkrZS5kZXNjci5ZLGUud2lkdGgsZS5oZWlnaHQse2ZpbGw6YX0sZikpLGUuaGVpZ2h0fSwiZHJhd0M0U2hhcGUiKSxrU2U9byhmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgic3ltYm9sIikuYXR0cigiaWQiLCJkYXRhYmFzZSIpLmF0dHIoImZpbGwtcnVsZSIsImV2ZW5vZGQiKS5hdHRyKCJjbGlwLXJ1bGUiLCJldmVub2RkIikuYXBwZW5kKCJwYXRoIikuYXR0cigidHJhbnNmb3JtIiwic2NhbGUoLjUpIikuYXR0cigiZCIsIk0xMi4yNTguMDAxbC4yNTYuMDA0LjI1NS4wMDUuMjUzLjAwOC4yNTEuMDEuMjQ5LjAxMi4yNDcuMDE1LjI0Ni4wMTYuMjQyLjAxOS4yNDEuMDIuMjM5LjAyMy4yMzYuMDI0LjIzMy4wMjcuMjMxLjAyOC4yMjkuMDMxLjIyNS4wMzIuMjIzLjAzNC4yMi4wMzYuMjE3LjAzOC4yMTQuMDQuMjExLjA0MS4yMDguMDQzLjIwNS4wNDUuMjAxLjA0Ni4xOTguMDQ4LjE5NC4wNS4xOTEuMDUxLjE4Ny4wNTMuMTgzLjA1NC4xOC4wNTYuMTc1LjA1Ny4xNzIuMDU5LjE2OC4wNi4xNjMuMDYxLjE2LjA2My4xNTUuMDY0LjE1LjA2Ni4wNzQuMDMzLjA3My4wMzMuMDcxLjAzNC4wNy4wMzQuMDY5LjAzNS4wNjguMDM1LjA2Ny4wMzUuMDY2LjAzNS4wNjQuMDM2LjA2NC4wMzYuMDYyLjAzNi4wNi4wMzYuMDYuMDM3LjA1OC4wMzcuMDU4LjAzNy4wNTUuMDM4LjA1NS4wMzguMDUzLjAzOC4wNTIuMDM4LjA1MS4wMzkuMDUuMDM5LjA0OC4wMzkuMDQ3LjAzOS4wNDUuMDQuMDQ0LjA0LjA0My4wNC4wNDEuMDQuMDQuMDQxLjAzOS4wNDEuMDM3LjA0MS4wMzYuMDQxLjAzNC4wNDEuMDMzLjA0Mi4wMzIuMDQyLjAzLjA0Mi4wMjkuMDQyLjAyNy4wNDIuMDI2LjA0My4wMjQuMDQzLjAyMy4wNDMuMDIxLjA0My4wMi4wNDMuMDE4LjA0NC4wMTcuMDQzLjAxNS4wNDQuMDEzLjA0NC4wMTIuMDQ0LjAxMS4wNDUuMDA5LjA0NC4wMDcuMDQ1LjAwNi4wNDUuMDA0LjA0NS4wMDIuMDQ1LjAwMS4wNDV2MTdsLS4wMDEuMDQ1LS4wMDIuMDQ1LS4wMDQuMDQ1LS4wMDYuMDQ1LS4wMDcuMDQ1LS4wMDkuMDQ0LS4wMTEuMDQ1LS4wMTIuMDQ0LS4wMTMuMDQ0LS4wMTUuMDQ0LS4wMTcuMDQzLS4wMTguMDQ0LS4wMi4wNDMtLjAyMS4wNDMtLjAyMy4wNDMtLjAyNC4wNDMtLjAyNi4wNDMtLjAyNy4wNDItLjAyOS4wNDItLjAzLjA0Mi0uMDMyLjA0Mi0uMDMzLjA0Mi0uMDM0LjA0MS0uMDM2LjA0MS0uMDM3LjA0MS0uMDM5LjA0MS0uMDQuMDQxLS4wNDEuMDQtLjA0My4wNC0uMDQ0LjA0LS4wNDUuMDQtLjA0Ny4wMzktLjA0OC4wMzktLjA1LjAzOS0uMDUxLjAzOS0uMDUyLjAzOC0uMDUzLjAzOC0uMDU1LjAzOC0uMDU1LjAzOC0uMDU4LjAzNy0uMDU4LjAzNy0uMDYuMDM3LS4wNi4wMzYtLjA2Mi4wMzYtLjA2NC4wMzYtLjA2NC4wMzYtLjA2Ni4wMzUtLjA2Ny4wMzUtLjA2OC4wMzUtLjA2OS4wMzUtLjA3LjAzNC0uMDcxLjAzNC0uMDczLjAzMy0uMDc0LjAzMy0uMTUuMDY2LS4xNTUuMDY0LS4xNi4wNjMtLjE2My4wNjEtLjE2OC4wNi0uMTcyLjA1OS0uMTc1LjA1Ny0uMTguMDU2LS4xODMuMDU0LS4xODcuMDUzLS4xOTEuMDUxLS4xOTQuMDUtLjE5OC4wNDgtLjIwMS4wNDYtLjIwNS4wNDUtLjIwOC4wNDMtLjIxMS4wNDEtLjIxNC4wNC0uMjE3LjAzOC0uMjIuMDM2LS4yMjMuMDM0LS4yMjUuMDMyLS4yMjkuMDMxLS4yMzEuMDI4LS4yMzMuMDI3LS4yMzYuMDI0LS4yMzkuMDIzLS4yNDEuMDItLjI0Mi4wMTktLjI0Ni4wMTYtLjI0Ny4wMTUtLjI0OS4wMTItLjI1MS4wMS0uMjUzLjAwOC0uMjU1LjAwNS0uMjU2LjAwNC0uMjU4LjAwMS0uMjU4LS4wMDEtLjI1Ni0uMDA0LS4yNTUtLjAwNS0uMjUzLS4wMDgtLjI1MS0uMDEtLjI0OS0uMDEyLS4yNDctLjAxNS0uMjQ1LS4wMTYtLjI0My0uMDE5LS4yNDEtLjAyLS4yMzgtLjAyMy0uMjM2LS4wMjQtLjIzNC0uMDI3LS4yMzEtLjAyOC0uMjI4LS4wMzEtLjIyNi0uMDMyLS4yMjMtLjAzNC0uMjItLjAzNi0uMjE3LS4wMzgtLjIxNC0uMDQtLjIxMS0uMDQxLS4yMDgtLjA0My0uMjA0LS4wNDUtLjIwMS0uMDQ2LS4xOTgtLjA0OC0uMTk1LS4wNS0uMTktLjA1MS0uMTg3LS4wNTMtLjE4NC0uMDU0LS4xNzktLjA1Ni0uMTc2LS4wNTctLjE3Mi0uMDU5LS4xNjctLjA2LS4xNjQtLjA2MS0uMTU5LS4wNjMtLjE1NS0uMDY0LS4xNTEtLjA2Ni0uMDc0LS4wMzMtLjA3Mi0uMDMzLS4wNzItLjAzNC0uMDctLjAzNC0uMDY5LS4wMzUtLjA2OC0uMDM1LS4wNjctLjAzNS0uMDY2LS4wMzUtLjA2NC0uMDM2LS4wNjMtLjAzNi0uMDYyLS4wMzYtLjA2MS0uMDM2LS4wNi0uMDM3LS4wNTgtLjAzNy0uMDU3LS4wMzctLjA1Ni0uMDM4LS4wNTUtLjAzOC0uMDUzLS4wMzgtLjA1Mi0uMDM4LS4wNTEtLjAzOS0uMDQ5LS4wMzktLjA0OS0uMDM5LS4wNDYtLjAzOS0uMDQ2LS4wNC0uMDQ0LS4wNC0uMDQzLS4wNC0uMDQxLS4wNC0uMDQtLjA0MS0uMDM5LS4wNDEtLjAzNy0uMDQxLS4wMzYtLjA0MS0uMDM0LS4wNDEtLjAzMy0uMDQyLS4wMzItLjA0Mi0uMDMtLjA0Mi0uMDI5LS4wNDItLjAyNy0uMDQyLS4wMjYtLjA0My0uMDI0LS4wNDMtLjAyMy0uMDQzLS4wMjEtLjA0My0uMDItLjA0My0uMDE4LS4wNDQtLjAxNy0uMDQzLS4wMTUtLjA0NC0uMDEzLS4wNDQtLjAxMi0uMDQ0LS4wMTEtLjA0NS0uMDA5LS4wNDQtLjAwNy0uMDQ1LS4wMDYtLjA0NS0uMDA0LS4wNDUtLjAwMi0uMDQ1LS4wMDEtLjA0NXYtMTdsLjAwMS0uMDQ1LjAwMi0uMDQ1LjAwNC0uMDQ1LjAwNi0uMDQ1LjAwNy0uMDQ1LjAwOS0uMDQ0LjAxMS0uMDQ1LjAxMi0uMDQ0LjAxMy0uMDQ0LjAxNS0uMDQ0LjAxNy0uMDQzLjAxOC0uMDQ0LjAyLS4wNDMuMDIxLS4wNDMuMDIzLS4wNDMuMDI0LS4wNDMuMDI2LS4wNDMuMDI3LS4wNDIuMDI5LS4wNDIuMDMtLjA0Mi4wMzItLjA0Mi4wMzMtLjA0Mi4wMzQtLjA0MS4wMzYtLjA0MS4wMzctLjA0MS4wMzktLjA0MS4wNC0uMDQxLjA0MS0uMDQuMDQzLS4wNC4wNDQtLjA0LjA0Ni0uMDQuMDQ2LS4wMzkuMDQ5LS4wMzkuMDQ5LS4wMzkuMDUxLS4wMzkuMDUyLS4wMzguMDUzLS4wMzguMDU1LS4wMzguMDU2LS4wMzguMDU3LS4wMzcuMDU4LS4wMzcuMDYtLjAzNy4wNjEtLjAzNi4wNjItLjAzNi4wNjMtLjAzNi4wNjQtLjAzNi4wNjYtLjAzNS4wNjctLjAzNS4wNjgtLjAzNS4wNjktLjAzNS4wNy0uMDM0LjA3Mi0uMDM0LjA3Mi0uMDMzLjA3NC0uMDMzLjE1MS0uMDY2LjE1NS0uMDY0LjE1OS0uMDYzLjE2NC0uMDYxLjE2Ny0uMDYuMTcyLS4wNTkuMTc2LS4wNTcuMTc5LS4wNTYuMTg0LS4wNTQuMTg3LS4wNTMuMTktLjA1MS4xOTUtLjA1LjE5OC0uMDQ4LjIwMS0uMDQ2LjIwNC0uMDQ1LjIwOC0uMDQzLjIxMS0uMDQxLjIxNC0uMDQuMjE3LS4wMzguMjItLjAzNi4yMjMtLjAzNC4yMjYtLjAzMi4yMjgtLjAzMS4yMzEtLjAyOC4yMzQtLjAyNy4yMzYtLjAyNC4yMzgtLjAyMy4yNDEtLjAyLjI0My0uMDE5LjI0NS0uMDE2LjI0Ny0uMDE1LjI0OS0uMDEyLjI1MS0uMDEuMjUzLS4wMDguMjU1LS4wMDUuMjU2LS4wMDQuMjU4LS4wMDEuMjU4LjAwMXptLTkuMjU4IDIwLjQ5OXYuMDFsLjAwMS4wMjEuMDAzLjAyMS4wMDQuMDIyLjAwNS4wMjEuMDA2LjAyMi4wMDcuMDIyLjAwOS4wMjMuMDEuMDIyLjAxMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNS4wMjMuMDE2LjAyNC4wMTcuMDIzLjAxOC4wMjQuMDE5LjAyNC4wMjEuMDI0LjAyMi4wMjUuMDIzLjAyNC4wMjQuMDI1LjA1Mi4wNDkuMDU2LjA1LjA2MS4wNTEuMDY2LjA1MS4wNy4wNTEuMDc1LjA1MS4wNzkuMDUyLjA4NC4wNTIuMDg4LjA1Mi4wOTIuMDUyLjA5Ny4wNTIuMTAyLjA1MS4xMDUuMDUyLjExLjA1Mi4xMTQuMDUxLjExOS4wNTEuMTIzLjA1MS4xMjcuMDUuMTMxLjA1LjEzNS4wNS4xMzkuMDQ4LjE0NC4wNDkuMTQ3LjA0Ny4xNTIuMDQ3LjE1NS4wNDcuMTYuMDQ1LjE2My4wNDUuMTY3LjA0My4xNzEuMDQzLjE3Ni4wNDEuMTc4LjA0MS4xODMuMDM5LjE4Ny4wMzkuMTkuMDM3LjE5NC4wMzUuMTk3LjAzNS4yMDIuMDMzLjIwNC4wMzEuMjA5LjAzLjIxMi4wMjkuMjE2LjAyNy4yMTkuMDI1LjIyMi4wMjQuMjI2LjAyMS4yMy4wMi4yMzMuMDE4LjIzNi4wMTYuMjQuMDE1LjI0My4wMTIuMjQ2LjAxLjI0OS4wMDguMjUzLjAwNS4yNTYuMDA0LjI1OS4wMDEuMjYtLjAwMS4yNTctLjAwNC4yNTQtLjAwNS4yNS0uMDA4LjI0Ny0uMDExLjI0NC0uMDEyLjI0MS0uMDE0LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIxLjIyNi0uMDIxLjIyNC0uMDI0LjIyLS4wMjYuMjE2LS4wMjcuMjEyLS4wMjguMjEtLjAzMS4yMDUtLjAzMS4yMDItLjAzNC4xOTgtLjAzNC4xOTQtLjAzNi4xOTEtLjAzNy4xODctLjAzOS4xODMtLjA0LjE3OS0uMDQuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDQuMTYzLS4wNDUuMTYtLjA0Ni4xNTUtLjA0Ni4xNTItLjA0Ny4xNDgtLjA0OC4xNDMtLjA0OS4xMzktLjA0OS4xMzYtLjA1LjEzMS0uMDUuMTI2LS4wNS4xMjMtLjA1MS4xMTgtLjA1Mi4xMTQtLjA1MS4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUzLjA4My0uMDUxLjA3OS0uMDUyLjA3NC0uMDUyLjA3LS4wNTEuMDY1LS4wNTEuMDYtLjA1MS4wNTYtLjA1LjA1MS0uMDUuMDIzLS4wMjQuMDIzLS4wMjUuMDIxLS4wMjQuMDItLjAyNC4wMTktLjAyNC4wMTgtLjAyNC4wMTctLjAyNC4wMTUtLjAyMy4wMTQtLjAyNC4wMTMtLjAyMy4wMTItLjAyMy4wMS0uMDIzLjAxLS4wMjIuMDA4LS4wMjIuMDA2LS4wMjIuMDA2LS4wMjIuMDA0LS4wMjIuMDA0LS4wMjEuMDAxLS4wMjEuMDAxLS4wMjF2LTQuMTI3bC0uMDc3LjA1NS0uMDguMDUzLS4wODMuMDU0LS4wODUuMDUzLS4wODcuMDUyLS4wOS4wNTItLjA5My4wNTEtLjA5NS4wNS0uMDk3LjA1LS4xLjA0OS0uMTAyLjA0OS0uMTA1LjA0OC0uMTA2LjA0Ny0uMTA5LjA0Ny0uMTExLjA0Ni0uMTE0LjA0NS0uMTE1LjA0NS0uMTE4LjA0NC0uMTIuMDQzLS4xMjIuMDQyLS4xMjQuMDQyLS4xMjYuMDQxLS4xMjguMDQtLjEzLjA0LS4xMzIuMDM4LS4xMzQuMDM4LS4xMzUuMDM3LS4xMzguMDM3LS4xMzkuMDM1LS4xNDIuMDM1LS4xNDMuMDM0LS4xNDQuMDMzLS4xNDcuMDMyLS4xNDguMDMxLS4xNS4wMy0uMTUxLjAzLS4xNTMuMDI5LS4xNTQuMDI3LS4xNTYuMDI3LS4xNTguMDI2LS4xNTkuMDI1LS4xNjEuMDI0LS4xNjIuMDIzLS4xNjMuMDIyLS4xNjUuMDIxLS4xNjYuMDItLjE2Ny4wMTktLjE2OS4wMTgtLjE2OS4wMTctLjE3MS4wMTYtLjE3My4wMTUtLjE3My4wMTQtLjE3NS4wMTMtLjE3NS4wMTItLjE3Ny4wMTEtLjE3OC4wMS0uMTc5LjAwOC0uMTc5LjAwOC0uMTgxLjAwNi0uMTgyLjAwNS0uMTgyLjAwNC0uMTg0LjAwMy0uMTg0LjAwMmgtLjM3bC0uMTg0LS4wMDItLjE4NC0uMDAzLS4xODItLjAwNC0uMTgyLS4wMDUtLjE4MS0uMDA2LS4xNzktLjAwOC0uMTc5LS4wMDgtLjE3OC0uMDEtLjE3Ni0uMDExLS4xNzYtLjAxMi0uMTc1LS4wMTMtLjE3My0uMDE0LS4xNzItLjAxNS0uMTcxLS4wMTYtLjE3LS4wMTctLjE2OS0uMDE4LS4xNjctLjAxOS0uMTY2LS4wMi0uMTY1LS4wMjEtLjE2My0uMDIyLS4xNjItLjAyMy0uMTYxLS4wMjQtLjE1OS0uMDI1LS4xNTctLjAyNi0uMTU2LS4wMjctLjE1NS0uMDI3LS4xNTMtLjAyOS0uMTUxLS4wMy0uMTUtLjAzLS4xNDgtLjAzMS0uMTQ2LS4wMzItLjE0NS0uMDMzLS4xNDMtLjAzNC0uMTQxLS4wMzUtLjE0LS4wMzUtLjEzNy0uMDM3LS4xMzYtLjAzNy0uMTM0LS4wMzgtLjEzMi0uMDM4LS4xMy0uMDQtLjEyOC0uMDQtLjEyNi0uMDQxLS4xMjQtLjA0Mi0uMTIyLS4wNDItLjEyLS4wNDQtLjExNy0uMDQzLS4xMTYtLjA0NS0uMTEzLS4wNDUtLjExMi0uMDQ2LS4xMDktLjA0Ny0uMTA2LS4wNDctLjEwNS0uMDQ4LS4xMDItLjA0OS0uMS0uMDQ5LS4wOTctLjA1LS4wOTUtLjA1LS4wOTMtLjA1Mi0uMDktLjA1MS0uMDg3LS4wNTItLjA4NS0uMDUzLS4wODMtLjA1NC0uMDgtLjA1NC0uMDc3LS4wNTR2NC4xMjd6bTAtNS42NTR2LjAxMWwuMDAxLjAyMS4wMDMuMDIxLjAwNC4wMjEuMDA1LjAyMi4wMDYuMDIyLjAwNy4wMjIuMDA5LjAyMi4wMS4wMjIuMDExLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE1LjAyNC4wMTYuMDIzLjAxNy4wMjQuMDE4LjAyNC4wMTkuMDI0LjAyMS4wMjQuMDIyLjAyNC4wMjMuMDI1LjAyNC4wMjQuMDUyLjA1LjA1Ni4wNS4wNjEuMDUuMDY2LjA1MS4wNy4wNTEuMDc1LjA1Mi4wNzkuMDUxLjA4NC4wNTIuMDg4LjA1Mi4wOTIuMDUyLjA5Ny4wNTIuMTAyLjA1Mi4xMDUuMDUyLjExLjA1MS4xMTQuMDUxLjExOS4wNTIuMTIzLjA1LjEyNy4wNTEuMTMxLjA1LjEzNS4wNDkuMTM5LjA0OS4xNDQuMDQ4LjE0Ny4wNDguMTUyLjA0Ny4xNTUuMDQ2LjE2LjA0NS4xNjMuMDQ1LjE2Ny4wNDQuMTcxLjA0Mi4xNzYuMDQyLjE3OC4wNC4xODMuMDQuMTg3LjAzOC4xOS4wMzcuMTk0LjAzNi4xOTcuMDM0LjIwMi4wMzMuMjA0LjAzMi4yMDkuMDMuMjEyLjAyOC4yMTYuMDI3LjIxOS4wMjUuMjIyLjAyNC4yMjYuMDIyLjIzLjAyLjIzMy4wMTguMjM2LjAxNi4yNC4wMTQuMjQzLjAxMi4yNDYuMDEuMjQ5LjAwOC4yNTMuMDA2LjI1Ni4wMDMuMjU5LjAwMS4yNi0uMDAxLjI1Ny0uMDAzLjI1NC0uMDA2LjI1LS4wMDguMjQ3LS4wMS4yNDQtLjAxMi4yNDEtLjAxNS4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyLjIyNi0uMDIyLjIyNC0uMDI0LjIyLS4wMjUuMjE2LS4wMjcuMjEyLS4wMjkuMjEtLjAzLjIwNS0uMDMyLjIwMi0uMDMzLjE5OC0uMDM1LjE5NC0uMDM2LjE5MS0uMDM3LjE4Ny0uMDM5LjE4My0uMDM5LjE3OS0uMDQxLjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQ0LjE2My0uMDQ1LjE2LS4wNDUuMTU1LS4wNDcuMTUyLS4wNDcuMTQ4LS4wNDguMTQzLS4wNDguMTM5LS4wNS4xMzYtLjA0OS4xMzEtLjA1LjEyNi0uMDUxLjEyMy0uMDUxLjExOC0uMDUxLjExNC0uMDUyLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTIuMDgzLS4wNTIuMDc5LS4wNTIuMDc0LS4wNTEuMDctLjA1Mi4wNjUtLjA1MS4wNi0uMDUuMDU2LS4wNTEuMDUxLS4wNDkuMDIzLS4wMjUuMDIzLS4wMjQuMDIxLS4wMjUuMDItLjAyNC4wMTktLjAyNC4wMTgtLjAyNC4wMTctLjAyNC4wMTUtLjAyMy4wMTQtLjAyMy4wMTMtLjAyNC4wMTItLjAyMi4wMS0uMDIzLjAxLS4wMjMuMDA4LS4wMjIuMDA2LS4wMjIuMDA2LS4wMjIuMDA0LS4wMjEuMDA0LS4wMjIuMDAxLS4wMjEuMDAxLS4wMjF2LTQuMTM5bC0uMDc3LjA1NC0uMDguMDU0LS4wODMuMDU0LS4wODUuMDUyLS4wODcuMDUzLS4wOS4wNTEtLjA5My4wNTEtLjA5NS4wNTEtLjA5Ny4wNS0uMS4wNDktLjEwMi4wNDktLjEwNS4wNDgtLjEwNi4wNDctLjEwOS4wNDctLjExMS4wNDYtLjExNC4wNDUtLjExNS4wNDQtLjExOC4wNDQtLjEyLjA0NC0uMTIyLjA0Mi0uMTI0LjA0Mi0uMTI2LjA0MS0uMTI4LjA0LS4xMy4wMzktLjEzMi4wMzktLjEzNC4wMzgtLjEzNS4wMzctLjEzOC4wMzYtLjEzOS4wMzYtLjE0Mi4wMzUtLjE0My4wMzMtLjE0NC4wMzMtLjE0Ny4wMzMtLjE0OC4wMzEtLjE1LjAzLS4xNTEuMDMtLjE1My4wMjgtLjE1NC4wMjgtLjE1Ni4wMjctLjE1OC4wMjYtLjE1OS4wMjUtLjE2MS4wMjQtLjE2Mi4wMjMtLjE2My4wMjItLjE2NS4wMjEtLjE2Ni4wMi0uMTY3LjAxOS0uMTY5LjAxOC0uMTY5LjAxNy0uMTcxLjAxNi0uMTczLjAxNS0uMTczLjAxNC0uMTc1LjAxMy0uMTc1LjAxMi0uMTc3LjAxMS0uMTc4LjAwOS0uMTc5LjAwOS0uMTc5LjAwNy0uMTgxLjAwNy0uMTgyLjAwNS0uMTgyLjAwNC0uMTg0LjAwMy0uMTg0LjAwMmgtLjM3bC0uMTg0LS4wMDItLjE4NC0uMDAzLS4xODItLjAwNC0uMTgyLS4wMDUtLjE4MS0uMDA3LS4xNzktLjAwNy0uMTc5LS4wMDktLjE3OC0uMDA5LS4xNzYtLjAxMS0uMTc2LS4wMTItLjE3NS0uMDEzLS4xNzMtLjAxNC0uMTcyLS4wMTUtLjE3MS0uMDE2LS4xNy0uMDE3LS4xNjktLjAxOC0uMTY3LS4wMTktLjE2Ni0uMDItLjE2NS0uMDIxLS4xNjMtLjAyMi0uMTYyLS4wMjMtLjE2MS0uMDI0LS4xNTktLjAyNS0uMTU3LS4wMjYtLjE1Ni0uMDI3LS4xNTUtLjAyOC0uMTUzLS4wMjgtLjE1MS0uMDMtLjE1LS4wMy0uMTQ4LS4wMzEtLjE0Ni0uMDMzLS4xNDUtLjAzMy0uMTQzLS4wMzMtLjE0MS0uMDM1LS4xNC0uMDM2LS4xMzctLjAzNi0uMTM2LS4wMzctLjEzNC0uMDM4LS4xMzItLjAzOS0uMTMtLjAzOS0uMTI4LS4wNC0uMTI2LS4wNDEtLjEyNC0uMDQyLS4xMjItLjA0My0uMTItLjA0My0uMTE3LS4wNDQtLjExNi0uMDQ0LS4xMTMtLjA0Ni0uMTEyLS4wNDYtLjEwOS0uMDQ2LS4xMDYtLjA0Ny0uMTA1LS4wNDgtLjEwMi0uMDQ5LS4xLS4wNDktLjA5Ny0uMDUtLjA5NS0uMDUxLS4wOTMtLjA1MS0uMDktLjA1MS0uMDg3LS4wNTMtLjA4NS0uMDUyLS4wODMtLjA1NC0uMDgtLjA1NC0uMDc3LS4wNTR2NC4xMzl6bTAtNS42NjZ2LjAxMWwuMDAxLjAyLjAwMy4wMjIuMDA0LjAyMS4wMDUuMDIyLjAwNi4wMjEuMDA3LjAyMi4wMDkuMDIzLjAxLjAyMi4wMTEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTUuMDIzLjAxNi4wMjQuMDE3LjAyNC4wMTguMDIzLjAxOS4wMjQuMDIxLjAyNS4wMjIuMDI0LjAyMy4wMjQuMDI0LjAyNS4wNTIuMDUuMDU2LjA1LjA2MS4wNS4wNjYuMDUxLjA3LjA1MS4wNzUuMDUyLjA3OS4wNTEuMDg0LjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk3LjA1Mi4xMDIuMDUyLjEwNS4wNTEuMTEuMDUyLjExNC4wNTEuMTE5LjA1MS4xMjMuMDUxLjEyNy4wNS4xMzEuMDUuMTM1LjA1LjEzOS4wNDkuMTQ0LjA0OC4xNDcuMDQ4LjE1Mi4wNDcuMTU1LjA0Ni4xNi4wNDUuMTYzLjA0NS4xNjcuMDQzLjE3MS4wNDMuMTc2LjA0Mi4xNzguMDQuMTgzLjA0LjE4Ny4wMzguMTkuMDM3LjE5NC4wMzYuMTk3LjAzNC4yMDIuMDMzLjIwNC4wMzIuMjA5LjAzLjIxMi4wMjguMjE2LjAyNy4yMTkuMDI1LjIyMi4wMjQuMjI2LjAyMS4yMy4wMi4yMzMuMDE4LjIzNi4wMTcuMjQuMDE0LjI0My4wMTIuMjQ2LjAxLjI0OS4wMDguMjUzLjAwNi4yNTYuMDAzLjI1OS4wMDEuMjYtLjAwMS4yNTctLjAwMy4yNTQtLjAwNi4yNS0uMDA4LjI0Ny0uMDEuMjQ0LS4wMTMuMjQxLS4wMTQuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMi4yMjYtLjAyMi4yMjQtLjAyNC4yMi0uMDI1LjIxNi0uMDI3LjIxMi0uMDI5LjIxLS4wMy4yMDUtLjAzMi4yMDItLjAzMy4xOTgtLjAzNS4xOTQtLjAzNi4xOTEtLjAzNy4xODctLjAzOS4xODMtLjAzOS4xNzktLjA0MS4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0NC4xNjMtLjA0NS4xNi0uMDQ1LjE1NS0uMDQ3LjE1Mi0uMDQ3LjE0OC0uMDQ4LjE0My0uMDQ5LjEzOS0uMDQ5LjEzNi0uMDQ5LjEzMS0uMDUxLjEyNi0uMDUuMTIzLS4wNTEuMTE4LS4wNTIuMTE0LS4wNTEuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1Mi4wODMtLjA1Mi4wNzktLjA1Mi4wNzQtLjA1Mi4wNy0uMDUxLjA2NS0uMDUxLjA2LS4wNTEuMDU2LS4wNS4wNTEtLjA0OS4wMjMtLjAyNS4wMjMtLjAyNS4wMjEtLjAyNC4wMi0uMDI0LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDI0LjAxNS0uMDIzLjAxNC0uMDI0LjAxMy0uMDIzLjAxMi0uMDIzLjAxLS4wMjIuMDEtLjAyMy4wMDgtLjAyMi4wMDYtLjAyMi4wMDYtLjAyMi4wMDQtLjAyMi4wMDQtLjAyMS4wMDEtLjAyMS4wMDEtLjAyMXYtNC4xNTNsLS4wNzcuMDU0LS4wOC4wNTQtLjA4My4wNTMtLjA4NS4wNTMtLjA4Ny4wNTMtLjA5LjA1MS0uMDkzLjA1MS0uMDk1LjA1MS0uMDk3LjA1LS4xLjA0OS0uMTAyLjA0OC0uMTA1LjA0OC0uMTA2LjA0OC0uMTA5LjA0Ni0uMTExLjA0Ni0uMTE0LjA0Ni0uMTE1LjA0NC0uMTE4LjA0NC0uMTIuMDQzLS4xMjIuMDQzLS4xMjQuMDQyLS4xMjYuMDQxLS4xMjguMDQtLjEzLjAzOS0uMTMyLjAzOS0uMTM0LjAzOC0uMTM1LjAzNy0uMTM4LjAzNi0uMTM5LjAzNi0uMTQyLjAzNC0uMTQzLjAzNC0uMTQ0LjAzMy0uMTQ3LjAzMi0uMTQ4LjAzMi0uMTUuMDMtLjE1MS4wMy0uMTUzLjAyOC0uMTU0LjAyOC0uMTU2LjAyNy0uMTU4LjAyNi0uMTU5LjAyNC0uMTYxLjAyNC0uMTYyLjAyMy0uMTYzLjAyMy0uMTY1LjAyMS0uMTY2LjAyLS4xNjcuMDE5LS4xNjkuMDE4LS4xNjkuMDE3LS4xNzEuMDE2LS4xNzMuMDE1LS4xNzMuMDE0LS4xNzUuMDEzLS4xNzUuMDEyLS4xNzcuMDEtLjE3OC4wMS0uMTc5LjAwOS0uMTc5LjAwNy0uMTgxLjAwNi0uMTgyLjAwNi0uMTgyLjAwNC0uMTg0LjAwMy0uMTg0LjAwMS0uMTg1LjAwMS0uMTg1LS4wMDEtLjE4NC0uMDAxLS4xODQtLjAwMy0uMTgyLS4wMDQtLjE4Mi0uMDA2LS4xODEtLjAwNi0uMTc5LS4wMDctLjE3OS0uMDA5LS4xNzgtLjAxLS4xNzYtLjAxLS4xNzYtLjAxMi0uMTc1LS4wMTMtLjE3My0uMDE0LS4xNzItLjAxNS0uMTcxLS4wMTYtLjE3LS4wMTctLjE2OS0uMDE4LS4xNjctLjAxOS0uMTY2LS4wMi0uMTY1LS4wMjEtLjE2My0uMDIzLS4xNjItLjAyMy0uMTYxLS4wMjQtLjE1OS0uMDI0LS4xNTctLjAyNi0uMTU2LS4wMjctLjE1NS0uMDI4LS4xNTMtLjAyOC0uMTUxLS4wMy0uMTUtLjAzLS4xNDgtLjAzMi0uMTQ2LS4wMzItLjE0NS0uMDMzLS4xNDMtLjAzNC0uMTQxLS4wMzQtLjE0LS4wMzYtLjEzNy0uMDM2LS4xMzYtLjAzNy0uMTM0LS4wMzgtLjEzMi0uMDM5LS4xMy0uMDM5LS4xMjgtLjA0MS0uMTI2LS4wNDEtLjEyNC0uMDQxLS4xMjItLjA0My0uMTItLjA0My0uMTE3LS4wNDQtLjExNi0uMDQ0LS4xMTMtLjA0Ni0uMTEyLS4wNDYtLjEwOS0uMDQ2LS4xMDYtLjA0OC0uMTA1LS4wNDgtLjEwMi0uMDQ4LS4xLS4wNS0uMDk3LS4wNDktLjA5NS0uMDUxLS4wOTMtLjA1MS0uMDktLjA1Mi0uMDg3LS4wNTItLjA4NS0uMDUzLS4wODMtLjA1My0uMDgtLjA1NC0uMDc3LS4wNTR2NC4xNTN6bTguNzQtOC4xNzlsLS4yNTcuMDA0LS4yNTQuMDA1LS4yNS4wMDgtLjI0Ny4wMTEtLjI0NC4wMTItLjI0MS4wMTQtLjIzNy4wMTYtLjIzMy4wMTgtLjIzMS4wMjEtLjIyNi4wMjItLjIyNC4wMjMtLjIyLjAyNi0uMjE2LjAyNy0uMjEyLjAyOC0uMjEuMDMxLS4yMDUuMDMyLS4yMDIuMDMzLS4xOTguMDM0LS4xOTQuMDM2LS4xOTEuMDM4LS4xODcuMDM4LS4xODMuMDQtLjE3OS4wNDEtLjE3NS4wNDItLjE3Mi4wNDMtLjE2OC4wNDMtLjE2My4wNDUtLjE2LjA0Ni0uMTU1LjA0Ni0uMTUyLjA0OC0uMTQ4LjA0OC0uMTQzLjA0OC0uMTM5LjA0OS0uMTM2LjA1LS4xMzEuMDUtLjEyNi4wNTEtLjEyMy4wNTEtLjExOC4wNTEtLjExNC4wNTItLjExLjA1Mi0uMTA2LjA1Mi0uMTAxLjA1Mi0uMDk2LjA1Mi0uMDkyLjA1Mi0uMDg4LjA1Mi0uMDgzLjA1Mi0uMDc5LjA1Mi0uMDc0LjA1MS0uMDcuMDUyLS4wNjUuMDUxLS4wNi4wNS0uMDU2LjA1LS4wNTEuMDUtLjAyMy4wMjUtLjAyMy4wMjQtLjAyMS4wMjQtLjAyLjAyNS0uMDE5LjAyNC0uMDE4LjAyNC0uMDE3LjAyMy0uMDE1LjAyNC0uMDE0LjAyMy0uMDEzLjAyMy0uMDEyLjAyMy0uMDEuMDIzLS4wMS4wMjItLjAwOC4wMjItLjAwNi4wMjMtLjAwNi4wMjEtLjAwNC4wMjItLjAwNC4wMjEtLjAwMS4wMjEtLjAwMS4wMjEuMDAxLjAyMS4wMDEuMDIxLjAwNC4wMjEuMDA0LjAyMi4wMDYuMDIxLjAwNi4wMjMuMDA4LjAyMi4wMS4wMjIuMDEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTQuMDIzLjAxNS4wMjQuMDE3LjAyMy4wMTguMDI0LjAxOS4wMjQuMDIuMDI1LjAyMS4wMjQuMDIzLjAyNC4wMjMuMDI1LjA1MS4wNS4wNTYuMDUuMDYuMDUuMDY1LjA1MS4wNy4wNTIuMDc0LjA1MS4wNzkuMDUyLjA4My4wNTIuMDg4LjA1Mi4wOTIuMDUyLjA5Ni4wNTIuMTAxLjA1Mi4xMDYuMDUyLjExLjA1Mi4xMTQuMDUyLjExOC4wNTEuMTIzLjA1MS4xMjYuMDUxLjEzMS4wNS4xMzYuMDUuMTM5LjA0OS4xNDMuMDQ4LjE0OC4wNDguMTUyLjA0OC4xNTUuMDQ2LjE2LjA0Ni4xNjMuMDQ1LjE2OC4wNDMuMTcyLjA0My4xNzUuMDQyLjE3OS4wNDEuMTgzLjA0LjE4Ny4wMzguMTkxLjAzOC4xOTQuMDM2LjE5OC4wMzQuMjAyLjAzMy4yMDUuMDMyLjIxLjAzMS4yMTIuMDI4LjIxNi4wMjcuMjIuMDI2LjIyNC4wMjMuMjI2LjAyMi4yMzEuMDIxLjIzMy4wMTguMjM3LjAxNi4yNDEuMDE0LjI0NC4wMTIuMjQ3LjAxMS4yNS4wMDguMjU0LjAwNS4yNTcuMDA0LjI2LjAwMS4yNi0uMDAxLjI1Ny0uMDA0LjI1NC0uMDA1LjI1LS4wMDguMjQ3LS4wMTEuMjQ0LS4wMTIuMjQxLS4wMTQuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMjEuMjI2LS4wMjIuMjI0LS4wMjMuMjItLjAyNi4yMTYtLjAyNy4yMTItLjAyOC4yMS0uMDMxLjIwNS0uMDMyLjIwMi0uMDMzLjE5OC0uMDM0LjE5NC0uMDM2LjE5MS0uMDM4LjE4Ny0uMDM4LjE4My0uMDQuMTc5LS4wNDEuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDMuMTYzLS4wNDUuMTYtLjA0Ni4xNTUtLjA0Ni4xNTItLjA0OC4xNDgtLjA0OC4xNDMtLjA0OC4xMzktLjA0OS4xMzYtLjA1LjEzMS0uMDUuMTI2LS4wNTEuMTIzLS4wNTEuMTE4LS4wNTEuMTE0LS4wNTIuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1Mi4wODMtLjA1Mi4wNzktLjA1Mi4wNzQtLjA1MS4wNy0uMDUyLjA2NS0uMDUxLjA2LS4wNS4wNTYtLjA1LjA1MS0uMDUuMDIzLS4wMjUuMDIzLS4wMjQuMDIxLS4wMjQuMDItLjAyNS4wMTktLjAyNC4wMTgtLjAyNC4wMTctLjAyMy4wMTUtLjAyNC4wMTQtLjAyMy4wMTMtLjAyMy4wMTItLjAyMy4wMS0uMDIzLjAxLS4wMjIuMDA4LS4wMjIuMDA2LS4wMjMuMDA2LS4wMjEuMDA0LS4wMjIuMDA0LS4wMjEuMDAxLS4wMjEuMDAxLS4wMjEtLjAwMS0uMDIxLS4wMDEtLjAyMS0uMDA0LS4wMjEtLjAwNC0uMDIyLS4wMDYtLjAyMS0uMDA2LS4wMjMtLjAwOC0uMDIyLS4wMS0uMDIyLS4wMS0uMDIzLS4wMTItLjAyMy0uMDEzLS4wMjMtLjAxNC0uMDIzLS4wMTUtLjAyNC0uMDE3LS4wMjMtLjAxOC0uMDI0LS4wMTktLjAyNC0uMDItLjAyNS0uMDIxLS4wMjQtLjAyMy0uMDI0LS4wMjMtLjAyNS0uMDUxLS4wNS0uMDU2LS4wNS0uMDYtLjA1LS4wNjUtLjA1MS0uMDctLjA1Mi0uMDc0LS4wNTEtLjA3OS0uMDUyLS4wODMtLjA1Mi0uMDg4LS4wNTItLjA5Mi0uMDUyLS4wOTYtLjA1Mi0uMTAxLS4wNTItLjEwNi0uMDUyLS4xMS0uMDUyLS4xMTQtLjA1Mi0uMTE4LS4wNTEtLjEyMy0uMDUxLS4xMjYtLjA1MS0uMTMxLS4wNS0uMTM2LS4wNS0uMTM5LS4wNDktLjE0My0uMDQ4LS4xNDgtLjA0OC0uMTUyLS4wNDgtLjE1NS0uMDQ2LS4xNi0uMDQ2LS4xNjMtLjA0NS0uMTY4LS4wNDMtLjE3Mi0uMDQzLS4xNzUtLjA0Mi0uMTc5LS4wNDEtLjE4My0uMDQtLjE4Ny0uMDM4LS4xOTEtLjAzOC0uMTk0LS4wMzYtLjE5OC0uMDM0LS4yMDItLjAzMy0uMjA1LS4wMzItLjIxLS4wMzEtLjIxMi0uMDI4LS4yMTYtLjAyNy0uMjItLjAyNi0uMjI0LS4wMjMtLjIyNi0uMDIyLS4yMzEtLjAyMS0uMjMzLS4wMTgtLjIzNy0uMDE2LS4yNDEtLjAxNC0uMjQ0LS4wMTItLjI0Ny0uMDExLS4yNS0uMDA4LS4yNTQtLjAwNS0uMjU3LS4wMDQtLjI2LS4wMDEtLjI2LjAwMXoiKX0sImluc2VydERhdGFiYXNlSWNvbiIpLEVTZT1vKGZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJzeW1ib2wiKS5hdHRyKCJpZCIsImNvbXB1dGVyIikuYXR0cigid2lkdGgiLCIyNCIpLmF0dHIoImhlaWdodCIsIjI0IikuYXBwZW5kKCJwYXRoIikuYXR0cigidHJhbnNmb3JtIiwic2NhbGUoLjUpIikuYXR0cigiZCIsIk0yIDJ2MTNoMjB2LTEzaC0yMHptMTggMTFoLTE2di05aDE2djl6bS0xMC4yMjggNmwuNDY2LTFoMy41MjRsLjQ2NyAxaC00LjQ1N3ptMTQuMjI4IDNoLTI0bDItNmgyLjEwNGwtMS4zMyA0aDE4LjQ1bC0xLjI5Ny00aDIuMDczbDIgNnptLTUtMTBoLTE0di03aDE0djd6Iil9LCJpbnNlcnRDb21wdXRlckljb24iKSxTU2U9byhmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgic3ltYm9sIikuYXR0cigiaWQiLCJjbG9jayIpLmF0dHIoIndpZHRoIiwiMjQiKS5hdHRyKCJoZWlnaHQiLCIyNCIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInRyYW5zZm9ybSIsInNjYWxlKC41KSIpLmF0dHIoImQiLCJNMTIgMmM1LjUxNCAwIDEwIDQuNDg2IDEwIDEwcy00LjQ4NiAxMC0xMCAxMC0xMC00LjQ4Ni0xMC0xMCA0LjQ4Ni0xMCAxMC0xMHptMC0yYy02LjYyNyAwLTEyIDUuMzczLTEyIDEyczUuMzczIDEyIDEyIDEyIDEyLTUuMzczIDEyLTEyLTUuMzczLTEyLTEyLTEyem01Ljg0OCAxMi40NTljLjIwMi4wMzguMjAyLjMzMy4wMDEuMzcyLTEuOTA3LjM2MS02LjA0NSAxLjExMS02LjU0NyAxLjExMS0uNzE5IDAtMS4zMDEtLjU4Mi0xLjMwMS0xLjMwMSAwLS41MTIuNzctNS40NDcgMS4xMjUtNy40NDUuMDM0LS4xOTIuMzEyLS4xODEuMzQzLjAxNGwuOTg1IDYuMjM4IDUuMzk0IDEuMDExeiIpfSwiaW5zZXJ0Q2xvY2tJY29uIiksQ1NlPW8oZnVuY3Rpb24odCl7dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiYXJyb3doZWFkIikuYXR0cigicmVmWCIsOSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMikuYXR0cigibWFya2VySGVpZ2h0IiwxMikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgMCBMIDEwIDUgTCAwIDEwIHoiKX0sImluc2VydEFycm93SGVhZCIpLEFTZT1vKGZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImFycm93ZW5kIikuYXR0cigicmVmWCIsMSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMikuYXR0cigibWFya2VySGVpZ2h0IiwxMikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDEwIDAgTCAwIDUgTCAxMCAxMCB6Iil9LCJpbnNlcnRBcnJvd0VuZCIpLF9TZT1vKGZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImZpbGxlZC1oZWFkIikuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDE0LDcgTDksMSBaIil9LCJpbnNlcnRBcnJvd0ZpbGxlZEhlYWQiKSxEU2U9byhmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJzZXF1ZW5jZW51bWJlciIpLmF0dHIoInJlZlgiLDE1KS5hdHRyKCJyZWZZIiwxNSkuYXR0cigibWFya2VyV2lkdGgiLDYwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsMTUpLmF0dHIoImN5IiwxNSkuYXR0cigiciIsNil9LCJpbnNlcnREeW5hbWljTnVtYmVyIiksTFNlPW8oZnVuY3Rpb24odCl7bGV0IHI9dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiY3Jvc3NoZWFkIikuYXR0cigibWFya2VyV2lkdGgiLDE1KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hdHRyKCJyZWZYIiwxNikuYXR0cigicmVmWSIsNCk7ci5hcHBlbmQoInBhdGgiKS5hdHRyKCJmaWxsIiwiYmxhY2siKS5hdHRyKCJzdHJva2UiLCIjMDAwMDAwIikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIwLCAwIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IikuYXR0cigiZCIsIk0gOSwyIFYgNiBMMTYsNCBaIiksci5hcHBlbmQoInBhdGgiKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInN0cm9rZSIsIiMwMDAwMDAiKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjAsIDAiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxcHgiKS5hdHRyKCJkIiwiTSAwLDEgTCA2LDcgTSA2LDEgTCAwLDciKX0sImluc2VydEFycm93Q3Jvc3NIZWFkIiksUlNlPW8oKHQsZSk9Pih7Zm9udEZhbWlseTp0W2UrIkZvbnRGYW1pbHkiXSxmb250U2l6ZTp0W2UrIkZvbnRTaXplIl0sZm9udFdlaWdodDp0W2UrIkZvbnRXZWlnaHQiXX0pLCJnZXRDNFNoYXBlRm9udCIpLEN1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChpLGEscyxsLHUsaCxmKXtsZXQgZD1hLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLHMrdS8yKS5hdHRyKCJ5IixsK2gvMis1KS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KGkpO24oZCxmKX1vKHQsImJ5VGV4dCIpO2Z1bmN0aW9uIGUoaSxhLHMsbCx1LGgsZixkKXtsZXR7Zm9udFNpemU6cCxmb250RmFtaWx5Om0sZm9udFdlaWdodDpnfT1kLHk9aS5zcGxpdChaZS5saW5lQnJlYWtSZWdleCk7Zm9yKGxldCB2PTA7djx5Lmxlbmd0aDt2Kyspe2xldCB4PXYqcC1wKih5Lmxlbmd0aC0xKS8yLGI9YS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixzK3UvMikuYXR0cigieSIsbCkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5zdHlsZSgiZm9udC1zaXplIixwKS5zdHlsZSgiZm9udC13ZWlnaHQiLGcpLnN0eWxlKCJmb250LWZhbWlseSIsbSk7Yi5hcHBlbmQoInRzcGFuIikuYXR0cigiZHkiLHgpLnRleHQoeVt2XSkuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWF0aGVtYXRpY2FsIiksbihiLGYpfX1vKGUsImJ5VHNwYW4iKTtmdW5jdGlvbiByKGksYSxzLGwsdSxoLGYsZCl7bGV0IHA9YS5hcHBlbmQoInN3aXRjaCIpLGc9cC5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ4IixzKS5hdHRyKCJ5IixsKS5hdHRyKCJ3aWR0aCIsdSkuYXR0cigiaGVpZ2h0IixoKS5hcHBlbmQoInhodG1sOmRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUiKS5zdHlsZSgiaGVpZ2h0IiwiMTAwJSIpLnN0eWxlKCJ3aWR0aCIsIjEwMCUiKTtnLmFwcGVuZCgiZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS50ZXh0KGkpLGUoaSxwLHMsbCx1LGgsZixkKSxuKGcsZil9byhyLCJieUZvIik7ZnVuY3Rpb24gbihpLGEpe2ZvcihsZXQgcyBpbiBhKWEuaGFzT3duUHJvcGVydHkocykmJmkuYXR0cihzLGFbc10pfXJldHVybiBvKG4sIl9zZXRUZXh0QXR0cnMiKSxmdW5jdGlvbihpKXtyZXR1cm4gaS50ZXh0UGxhY2VtZW50PT09ImZvIj9yOmkudGV4dFBsYWNlbWVudD09PSJvbGQiP3Q6ZX19KCksX2w9e2RyYXdSZWN0OnI5LGRyYXdCb3VuZGFyeTpUU2UsZHJhd0M0U2hhcGU6d1NlLGRyYXdSZWxzOmJTZSxkcmF3SW1hZ2U6WlksaW5zZXJ0QXJyb3dIZWFkOkNTZSxpbnNlcnRBcnJvd0VuZDpBU2UsaW5zZXJ0QXJyb3dGaWxsZWRIZWFkOl9TZSxpbnNlcnREeW5hbWljTnVtYmVyOkRTZSxpbnNlcnRBcnJvd0Nyb3NzSGVhZDpMU2UsaW5zZXJ0RGF0YWJhc2VJY29uOmtTZSxpbnNlcnRDb21wdXRlckljb246RVNlLGluc2VydENsb2NrSWNvbjpTU2V9fSk7dmFyIE5TZSxzVCxuOT1OKCgpPT57InVzZSBzdHJpY3QiO05TZT10eXBlb2YgZ2xvYmFsPT0ib2JqZWN0IiYmZ2xvYmFsJiZnbG9iYWwuT2JqZWN0PT09T2JqZWN0JiZnbG9iYWwsc1Q9TlNlfSk7dmFyIE1TZSxJU2UsaGksTW89TigoKT0+eyJ1c2Ugc3RyaWN0IjtuOSgpO01TZT10eXBlb2Ygc2VsZj09Im9iamVjdCImJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLElTZT1zVHx8TVNlfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLGhpPUlTZX0pO3ZhciBPU2UsZWEsTWQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtNbygpO09TZT1oaS5TeW1ib2wsZWE9T1NlfSk7ZnVuY3Rpb24gRlNlKHQpe3ZhciBlPVBTZS5jYWxsKHQscjIpLHI9dFtyMl07dHJ5e3RbcjJdPXZvaWQgMDt2YXIgbj0hMH1jYXRjaHt9dmFyIGk9QlNlLmNhbGwodCk7cmV0dXJuIG4mJihlP3RbcjJdPXI6ZGVsZXRlIHRbcjJdKSxpfXZhciBlWCxQU2UsQlNlLHIyLHRYLHJYPU4oKCk9PnsidXNlIHN0cmljdCI7TWQoKTtlWD1PYmplY3QucHJvdG90eXBlLFBTZT1lWC5oYXNPd25Qcm9wZXJ0eSxCU2U9ZVgudG9TdHJpbmcscjI9ZWE/ZWEudG9TdHJpbmdUYWc6dm9pZCAwO28oRlNlLCJnZXRSYXdUYWciKTt0WD1GU2V9KTtmdW5jdGlvbiBHU2UodCl7cmV0dXJuIHpTZS5jYWxsKHQpfXZhciAkU2UselNlLG5YLGlYPU4oKCk9PnsidXNlIHN0cmljdCI7JFNlPU9iamVjdC5wcm90b3R5cGUselNlPSRTZS50b1N0cmluZztvKEdTZSwib2JqZWN0VG9TdHJpbmciKTtuWD1HU2V9KTtmdW5jdGlvbiBIU2UodCl7cmV0dXJuIHQ9PW51bGw/dD09PXZvaWQgMD9VU2U6VlNlOmFYJiZhWCBpbiBPYmplY3QodCk/dFgodCk6blgodCl9dmFyIFZTZSxVU2UsYVgsZmEsQXU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtNZCgpO3JYKCk7aVgoKTtWU2U9IltvYmplY3QgTnVsbF0iLFVTZT0iW29iamVjdCBVbmRlZmluZWRdIixhWD1lYT9lYS50b1N0cmluZ1RhZzp2b2lkIDA7byhIU2UsImJhc2VHZXRUYWciKTtmYT1IU2V9KTtmdW5jdGlvbiBXU2UodCl7dmFyIGU9dHlwZW9mIHQ7cmV0dXJuIHQhPW51bGwmJihlPT0ib2JqZWN0Inx8ZT09ImZ1bmN0aW9uIil9dmFyIGJuLG5vPU4oKCk9PnsidXNlIHN0cmljdCI7byhXU2UsImlzT2JqZWN0Iik7Ym49V1NlfSk7ZnVuY3Rpb24gS1NlKHQpe2lmKCFibih0KSlyZXR1cm4hMTt2YXIgZT1mYSh0KTtyZXR1cm4gZT09WVNlfHxlPT1YU2V8fGU9PXFTZXx8ZT09alNlfXZhciBxU2UsWVNlLFhTZSxqU2UsQWksbjI9TigoKT0+eyJ1c2Ugc3RyaWN0IjtBdSgpO25vKCk7cVNlPSJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dIixZU2U9IltvYmplY3QgRnVuY3Rpb25dIixYU2U9IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIixqU2U9IltvYmplY3QgUHJveHldIjtvKEtTZSwiaXNGdW5jdGlvbiIpO0FpPUtTZX0pO3ZhciBRU2Usb1Qsc1g9TigoKT0+eyJ1c2Ugc3RyaWN0IjtNbygpO1FTZT1oaVsiX19jb3JlLWpzX3NoYXJlZF9fIl0sb1Q9UVNlfSk7ZnVuY3Rpb24gWlNlKHQpe3JldHVybiEhb1gmJm9YIGluIHR9dmFyIG9YLGxYLGNYPU4oKCk9PnsidXNlIHN0cmljdCI7c1goKTtvWD1mdW5jdGlvbigpe3ZhciB0PS9bXi5dKyQvLmV4ZWMob1QmJm9ULmtleXMmJm9ULmtleXMuSUVfUFJPVE98fCIiKTtyZXR1cm4gdD8iU3ltYm9sKHNyYylfMS4iK3Q6IiJ9KCk7byhaU2UsImlzTWFza2VkIik7bFg9WlNlfSk7ZnVuY3Rpb24gdDZlKHQpe2lmKHQhPW51bGwpe3RyeXtyZXR1cm4gZTZlLmNhbGwodCl9Y2F0Y2h7fXRyeXtyZXR1cm4gdCsiIn1jYXRjaHt9fXJldHVybiIifXZhciBKU2UsZTZlLF91LGk5PU4oKCk9PnsidXNlIHN0cmljdCI7SlNlPUZ1bmN0aW9uLnByb3RvdHlwZSxlNmU9SlNlLnRvU3RyaW5nO28odDZlLCJ0b1NvdXJjZSIpO191PXQ2ZX0pO2Z1bmN0aW9uIGM2ZSh0KXtpZighYm4odCl8fGxYKHQpKXJldHVybiExO3ZhciBlPUFpKHQpP2w2ZTpuNmU7cmV0dXJuIGUudGVzdChfdSh0KSl9dmFyIHI2ZSxuNmUsaTZlLGE2ZSxzNmUsbzZlLGw2ZSx1WCxoWD1OKCgpPT57InVzZSBzdHJpY3QiO24yKCk7Y1goKTtubygpO2k5KCk7cjZlPS9bXFxeJC4qKz8oKVtcXXt9fF0vZyxuNmU9L15cW29iamVjdCAuKz9Db25zdHJ1Y3RvclxdJC8saTZlPUZ1bmN0aW9uLnByb3RvdHlwZSxhNmU9T2JqZWN0LnByb3RvdHlwZSxzNmU9aTZlLnRvU3RyaW5nLG82ZT1hNmUuaGFzT3duUHJvcGVydHksbDZlPVJlZ0V4cCgiXiIrczZlLmNhbGwobzZlKS5yZXBsYWNlKHI2ZSwiXFwkJiIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9yIC4rPyg/PVxcXF0pL2csIiQxLio/IikrIiQiKTtvKGM2ZSwiYmFzZUlzTmF0aXZlIik7dVg9YzZlfSk7ZnVuY3Rpb24gdTZlKHQsZSl7cmV0dXJuIHQ/LltlXX12YXIgZlgsZFg9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKHU2ZSwiZ2V0VmFsdWUiKTtmWD11NmV9KTtmdW5jdGlvbiBoNmUodCxlKXt2YXIgcj1mWCh0LGUpO3JldHVybiB1WChyKT9yOnZvaWQgMH12YXIgTHMsUGg9TigoKT0+eyJ1c2Ugc3RyaWN0IjtoWCgpO2RYKCk7byhoNmUsImdldE5hdGl2ZSIpO0xzPWg2ZX0pO3ZhciBmNmUsRHUsaTI9TigoKT0+eyJ1c2Ugc3RyaWN0IjtQaCgpO2Y2ZT1McyhPYmplY3QsImNyZWF0ZSIpLER1PWY2ZX0pO2Z1bmN0aW9uIGQ2ZSgpe3RoaXMuX19kYXRhX189RHU/RHUobnVsbCk6e30sdGhpcy5zaXplPTB9dmFyIHBYLG1YPU4oKCk9PnsidXNlIHN0cmljdCI7aTIoKTtvKGQ2ZSwiaGFzaENsZWFyIik7cFg9ZDZlfSk7ZnVuY3Rpb24gcDZlKHQpe3ZhciBlPXRoaXMuaGFzKHQpJiZkZWxldGUgdGhpcy5fX2RhdGFfX1t0XTtyZXR1cm4gdGhpcy5zaXplLT1lPzE6MCxlfXZhciBnWCx5WD1OKCgpPT57InVzZSBzdHJpY3QiO28ocDZlLCJoYXNoRGVsZXRlIik7Z1g9cDZlfSk7ZnVuY3Rpb24gdjZlKHQpe3ZhciBlPXRoaXMuX19kYXRhX187aWYoRHUpe3ZhciByPWVbdF07cmV0dXJuIHI9PT1tNmU/dm9pZCAwOnJ9cmV0dXJuIHk2ZS5jYWxsKGUsdCk/ZVt0XTp2b2lkIDB9dmFyIG02ZSxnNmUseTZlLHZYLHhYPU4oKCk9PnsidXNlIHN0cmljdCI7aTIoKTttNmU9Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iLGc2ZT1PYmplY3QucHJvdG90eXBlLHk2ZT1nNmUuaGFzT3duUHJvcGVydHk7byh2NmUsImhhc2hHZXQiKTt2WD12NmV9KTtmdW5jdGlvbiBUNmUodCl7dmFyIGU9dGhpcy5fX2RhdGFfXztyZXR1cm4gRHU/ZVt0XSE9PXZvaWQgMDpiNmUuY2FsbChlLHQpfXZhciB4NmUsYjZlLGJYLFRYPU4oKCk9PnsidXNlIHN0cmljdCI7aTIoKTt4NmU9T2JqZWN0LnByb3RvdHlwZSxiNmU9eDZlLmhhc093blByb3BlcnR5O28oVDZlLCJoYXNoSGFzIik7Ylg9VDZlfSk7ZnVuY3Rpb24gazZlKHQsZSl7dmFyIHI9dGhpcy5fX2RhdGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyh0KT8wOjEsclt0XT1EdSYmZT09PXZvaWQgMD93NmU6ZSx0aGlzfXZhciB3NmUsd1gsa1g9TigoKT0+eyJ1c2Ugc3RyaWN0IjtpMigpO3c2ZT0iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI7byhrNmUsImhhc2hTZXQiKTt3WD1rNmV9KTtmdW5jdGlvbiBKMCh0KXt2YXIgZT0tMSxyPXQ9PW51bGw/MDp0Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrZTxyOyl7dmFyIG49dFtlXTt0aGlzLnNldChuWzBdLG5bMV0pfX12YXIgYTksRVg9TigoKT0+eyJ1c2Ugc3RyaWN0IjttWCgpO3lYKCk7eFgoKTtUWCgpO2tYKCk7byhKMCwiSGFzaCIpO0owLnByb3RvdHlwZS5jbGVhcj1wWDtKMC5wcm90b3R5cGUuZGVsZXRlPWdYO0owLnByb3RvdHlwZS5nZXQ9dlg7SjAucHJvdG90eXBlLmhhcz1iWDtKMC5wcm90b3R5cGUuc2V0PXdYO2E5PUowfSk7ZnVuY3Rpb24gRTZlKCl7dGhpcy5fX2RhdGFfXz1bXSx0aGlzLnNpemU9MH12YXIgU1gsQ1g9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKEU2ZSwibGlzdENhY2hlQ2xlYXIiKTtTWD1FNmV9KTtmdW5jdGlvbiBTNmUodCxlKXtyZXR1cm4gdD09PWV8fHQhPT10JiZlIT09ZX12YXIgSW8sSWQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKFM2ZSwiZXEiKTtJbz1TNmV9KTtmdW5jdGlvbiBDNmUodCxlKXtmb3IodmFyIHI9dC5sZW5ndGg7ci0tOylpZihJbyh0W3JdWzBdLGUpKXJldHVybiByO3JldHVybi0xfXZhciBCaCxhMj1OKCgpPT57InVzZSBzdHJpY3QiO0lkKCk7byhDNmUsImFzc29jSW5kZXhPZiIpO0JoPUM2ZX0pO2Z1bmN0aW9uIEQ2ZSh0KXt2YXIgZT10aGlzLl9fZGF0YV9fLHI9QmgoZSx0KTtpZihyPDApcmV0dXJuITE7dmFyIG49ZS5sZW5ndGgtMTtyZXR1cm4gcj09bj9lLnBvcCgpOl82ZS5jYWxsKGUsciwxKSwtLXRoaXMuc2l6ZSwhMH12YXIgQTZlLF82ZSxBWCxfWD1OKCgpPT57InVzZSBzdHJpY3QiO2EyKCk7QTZlPUFycmF5LnByb3RvdHlwZSxfNmU9QTZlLnNwbGljZTtvKEQ2ZSwibGlzdENhY2hlRGVsZXRlIik7QVg9RDZlfSk7ZnVuY3Rpb24gTDZlKHQpe3ZhciBlPXRoaXMuX19kYXRhX18scj1CaChlLHQpO3JldHVybiByPDA/dm9pZCAwOmVbcl1bMV19dmFyIERYLExYPU4oKCk9PnsidXNlIHN0cmljdCI7YTIoKTtvKEw2ZSwibGlzdENhY2hlR2V0Iik7RFg9TDZlfSk7ZnVuY3Rpb24gUjZlKHQpe3JldHVybiBCaCh0aGlzLl9fZGF0YV9fLHQpPi0xfXZhciBSWCxOWD1OKCgpPT57InVzZSBzdHJpY3QiO2EyKCk7byhSNmUsImxpc3RDYWNoZUhhcyIpO1JYPVI2ZX0pO2Z1bmN0aW9uIE42ZSh0LGUpe3ZhciByPXRoaXMuX19kYXRhX18sbj1CaChyLHQpO3JldHVybiBuPDA/KCsrdGhpcy5zaXplLHIucHVzaChbdCxlXSkpOnJbbl1bMV09ZSx0aGlzfXZhciBNWCxJWD1OKCgpPT57InVzZSBzdHJpY3QiO2EyKCk7byhONmUsImxpc3RDYWNoZVNldCIpO01YPU42ZX0pO2Z1bmN0aW9uIGVtKHQpe3ZhciBlPS0xLHI9dD09bnVsbD8wOnQubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytlPHI7KXt2YXIgbj10W2VdO3RoaXMuc2V0KG5bMF0sblsxXSl9fXZhciBGaCxzMj1OKCgpPT57InVzZSBzdHJpY3QiO0NYKCk7X1goKTtMWCgpO05YKCk7SVgoKTtvKGVtLCJMaXN0Q2FjaGUiKTtlbS5wcm90b3R5cGUuY2xlYXI9U1g7ZW0ucHJvdG90eXBlLmRlbGV0ZT1BWDtlbS5wcm90b3R5cGUuZ2V0PURYO2VtLnByb3RvdHlwZS5oYXM9Ulg7ZW0ucHJvdG90eXBlLnNldD1NWDtGaD1lbX0pO3ZhciBNNmUsJGgsbFQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtQaCgpO01vKCk7TTZlPUxzKGhpLCJNYXAiKSwkaD1NNmV9KTtmdW5jdGlvbiBJNmUoKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBhOSxtYXA6bmV3KCRofHxGaCksc3RyaW5nOm5ldyBhOX19dmFyIE9YLFBYPU4oKCk9PnsidXNlIHN0cmljdCI7RVgoKTtzMigpO2xUKCk7byhJNmUsIm1hcENhY2hlQ2xlYXIiKTtPWD1JNmV9KTtmdW5jdGlvbiBPNmUodCl7dmFyIGU9dHlwZW9mIHQ7cmV0dXJuIGU9PSJzdHJpbmcifHxlPT0ibnVtYmVyInx8ZT09InN5bWJvbCJ8fGU9PSJib29sZWFuIj90IT09Il9fcHJvdG9fXyI6dD09PW51bGx9dmFyIEJYLEZYPU4oKCk9PnsidXNlIHN0cmljdCI7byhPNmUsImlzS2V5YWJsZSIpO0JYPU82ZX0pO2Z1bmN0aW9uIFA2ZSh0LGUpe3ZhciByPXQuX19kYXRhX187cmV0dXJuIEJYKGUpP3JbdHlwZW9mIGU9PSJzdHJpbmciPyJzdHJpbmciOiJoYXNoIl06ci5tYXB9dmFyIHpoLG8yPU4oKCk9PnsidXNlIHN0cmljdCI7RlgoKTtvKFA2ZSwiZ2V0TWFwRGF0YSIpO3poPVA2ZX0pO2Z1bmN0aW9uIEI2ZSh0KXt2YXIgZT16aCh0aGlzLHQpLmRlbGV0ZSh0KTtyZXR1cm4gdGhpcy5zaXplLT1lPzE6MCxlfXZhciAkWCx6WD1OKCgpPT57InVzZSBzdHJpY3QiO28yKCk7byhCNmUsIm1hcENhY2hlRGVsZXRlIik7JFg9QjZlfSk7ZnVuY3Rpb24gRjZlKHQpe3JldHVybiB6aCh0aGlzLHQpLmdldCh0KX12YXIgR1gsVlg9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvMigpO28oRjZlLCJtYXBDYWNoZUdldCIpO0dYPUY2ZX0pO2Z1bmN0aW9uICQ2ZSh0KXtyZXR1cm4gemgodGhpcyx0KS5oYXModCl9dmFyIFVYLEhYPU4oKCk9PnsidXNlIHN0cmljdCI7bzIoKTtvKCQ2ZSwibWFwQ2FjaGVIYXMiKTtVWD0kNmV9KTtmdW5jdGlvbiB6NmUodCxlKXt2YXIgcj16aCh0aGlzLHQpLG49ci5zaXplO3JldHVybiByLnNldCh0LGUpLHRoaXMuc2l6ZSs9ci5zaXplPT1uPzA6MSx0aGlzfXZhciBXWCxxWD1OKCgpPT57InVzZSBzdHJpY3QiO28yKCk7byh6NmUsIm1hcENhY2hlU2V0Iik7V1g9ejZlfSk7ZnVuY3Rpb24gdG0odCl7dmFyIGU9LTEscj10PT1udWxsPzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2U8cjspe3ZhciBuPXRbZV07dGhpcy5zZXQoblswXSxuWzFdKX19dmFyIE9kLGNUPU4oKCk9PnsidXNlIHN0cmljdCI7UFgoKTt6WCgpO1ZYKCk7SFgoKTtxWCgpO28odG0sIk1hcENhY2hlIik7dG0ucHJvdG90eXBlLmNsZWFyPU9YO3RtLnByb3RvdHlwZS5kZWxldGU9JFg7dG0ucHJvdG90eXBlLmdldD1HWDt0bS5wcm90b3R5cGUuaGFzPVVYO3RtLnByb3RvdHlwZS5zZXQ9V1g7T2Q9dG19KTtmdW5jdGlvbiBzOSh0LGUpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24ifHxlIT1udWxsJiZ0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKEc2ZSk7dmFyIHI9byhmdW5jdGlvbigpe3ZhciBuPWFyZ3VtZW50cyxpPWU/ZS5hcHBseSh0aGlzLG4pOm5bMF0sYT1yLmNhY2hlO2lmKGEuaGFzKGkpKXJldHVybiBhLmdldChpKTt2YXIgcz10LmFwcGx5KHRoaXMsbik7cmV0dXJuIHIuY2FjaGU9YS5zZXQoaSxzKXx8YSxzfSwibWVtb2l6ZWQiKTtyZXR1cm4gci5jYWNoZT1uZXcoczkuQ2FjaGV8fE9kKSxyfXZhciBHNmUscm0sbzk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtjVCgpO0c2ZT0iRXhwZWN0ZWQgYSBmdW5jdGlvbiI7byhzOSwibWVtb2l6ZSIpO3M5LkNhY2hlPU9kO3JtPXM5fSk7ZnVuY3Rpb24gVjZlKCl7dGhpcy5fX2RhdGFfXz1uZXcgRmgsdGhpcy5zaXplPTB9dmFyIFlYLFhYPU4oKCk9PnsidXNlIHN0cmljdCI7czIoKTtvKFY2ZSwic3RhY2tDbGVhciIpO1lYPVY2ZX0pO2Z1bmN0aW9uIFU2ZSh0KXt2YXIgZT10aGlzLl9fZGF0YV9fLHI9ZS5kZWxldGUodCk7cmV0dXJuIHRoaXMuc2l6ZT1lLnNpemUscn12YXIgalgsS1g9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKFU2ZSwic3RhY2tEZWxldGUiKTtqWD1VNmV9KTtmdW5jdGlvbiBINmUodCl7cmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KHQpfXZhciBRWCxaWD1OKCgpPT57InVzZSBzdHJpY3QiO28oSDZlLCJzdGFja0dldCIpO1FYPUg2ZX0pO2Z1bmN0aW9uIFc2ZSh0KXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXModCl9dmFyIEpYLGVqPU4oKCk9PnsidXNlIHN0cmljdCI7byhXNmUsInN0YWNrSGFzIik7Slg9VzZlfSk7ZnVuY3Rpb24gWTZlKHQsZSl7dmFyIHI9dGhpcy5fX2RhdGFfXztpZihyIGluc3RhbmNlb2YgRmgpe3ZhciBuPXIuX19kYXRhX187aWYoISRofHxuLmxlbmd0aDxxNmUtMSlyZXR1cm4gbi5wdXNoKFt0LGVdKSx0aGlzLnNpemU9KytyLnNpemUsdGhpcztyPXRoaXMuX19kYXRhX189bmV3IE9kKG4pfXJldHVybiByLnNldCh0LGUpLHRoaXMuc2l6ZT1yLnNpemUsdGhpc312YXIgcTZlLHRqLHJqPU4oKCk9PnsidXNlIHN0cmljdCI7czIoKTtsVCgpO2NUKCk7cTZlPTIwMDtvKFk2ZSwic3RhY2tTZXQiKTt0aj1ZNmV9KTtmdW5jdGlvbiBubSh0KXt2YXIgZT10aGlzLl9fZGF0YV9fPW5ldyBGaCh0KTt0aGlzLnNpemU9ZS5zaXplfXZhciBkYyxsMj1OKCgpPT57InVzZSBzdHJpY3QiO3MyKCk7WFgoKTtLWCgpO1pYKCk7ZWooKTtyaigpO28obm0sIlN0YWNrIik7bm0ucHJvdG90eXBlLmNsZWFyPVlYO25tLnByb3RvdHlwZS5kZWxldGU9alg7bm0ucHJvdG90eXBlLmdldD1RWDtubS5wcm90b3R5cGUuaGFzPUpYO25tLnByb3RvdHlwZS5zZXQ9dGo7ZGM9bm19KTt2YXIgWDZlLGltLGw5PU4oKCk9PnsidXNlIHN0cmljdCI7UGgoKTtYNmU9ZnVuY3Rpb24oKXt0cnl7dmFyIHQ9THMoT2JqZWN0LCJkZWZpbmVQcm9wZXJ0eSIpO3JldHVybiB0KHt9LCIiLHt9KSx0fWNhdGNoe319KCksaW09WDZlfSk7ZnVuY3Rpb24gajZlKHQsZSxyKXtlPT0iX19wcm90b19fIiYmaW0/aW0odCxlLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpyLHdyaXRhYmxlOiEwfSk6dFtlXT1yfXZhciBwYyxhbT1OKCgpPT57InVzZSBzdHJpY3QiO2w5KCk7byhqNmUsImJhc2VBc3NpZ25WYWx1ZSIpO3BjPWo2ZX0pO2Z1bmN0aW9uIEs2ZSh0LGUscil7KHIhPT12b2lkIDAmJiFJbyh0W2VdLHIpfHxyPT09dm9pZCAwJiYhKGUgaW4gdCkpJiZwYyh0LGUscil9dmFyIGMyLGM5PU4oKCk9PnsidXNlIHN0cmljdCI7YW0oKTtJZCgpO28oSzZlLCJhc3NpZ25NZXJnZVZhbHVlIik7YzI9SzZlfSk7ZnVuY3Rpb24gUTZlKHQpe3JldHVybiBmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPS0xLGE9T2JqZWN0KGUpLHM9bihlKSxsPXMubGVuZ3RoO2wtLTspe3ZhciB1PXNbdD9sOisraV07aWYocihhW3VdLHUsYSk9PT0hMSlicmVha31yZXR1cm4gZX19dmFyIG5qLGlqPU4oKCk9PnsidXNlIHN0cmljdCI7byhRNmUsImNyZWF0ZUJhc2VGb3IiKTtuaj1RNmV9KTt2YXIgWjZlLHNtLHVUPU4oKCk9PnsidXNlIHN0cmljdCI7aWooKTtaNmU9bmooKSxzbT1aNmV9KTtmdW5jdGlvbiBlQ2UodCxlKXtpZihlKXJldHVybiB0LnNsaWNlKCk7dmFyIHI9dC5sZW5ndGgsbj1vaj9vaihyKTpuZXcgdC5jb25zdHJ1Y3RvcihyKTtyZXR1cm4gdC5jb3B5KG4pLG59dmFyIGxqLGFqLEo2ZSxzaixvaixoVCx1OT1OKCgpPT57InVzZSBzdHJpY3QiO01vKCk7bGo9dHlwZW9mIGV4cG9ydHM9PSJvYmplY3QiJiZleHBvcnRzJiYhZXhwb3J0cy5ub2RlVHlwZSYmZXhwb3J0cyxhaj1saiYmdHlwZW9mIG1vZHVsZT09Im9iamVjdCImJm1vZHVsZSYmIW1vZHVsZS5ub2RlVHlwZSYmbW9kdWxlLEo2ZT1haiYmYWouZXhwb3J0cz09PWxqLHNqPUo2ZT9oaS5CdWZmZXI6dm9pZCAwLG9qPXNqP3NqLmFsbG9jVW5zYWZlOnZvaWQgMDtvKGVDZSwiY2xvbmVCdWZmZXIiKTtoVD1lQ2V9KTt2YXIgdENlLG9tLGg5PU4oKCk9PnsidXNlIHN0cmljdCI7TW8oKTt0Q2U9aGkuVWludDhBcnJheSxvbT10Q2V9KTtmdW5jdGlvbiByQ2UodCl7dmFyIGU9bmV3IHQuY29uc3RydWN0b3IodC5ieXRlTGVuZ3RoKTtyZXR1cm4gbmV3IG9tKGUpLnNldChuZXcgb20odCkpLGV9dmFyIGxtLGZUPU4oKCk9PnsidXNlIHN0cmljdCI7aDkoKTtvKHJDZSwiY2xvbmVBcnJheUJ1ZmZlciIpO2xtPXJDZX0pO2Z1bmN0aW9uIG5DZSh0LGUpe3ZhciByPWU/bG0odC5idWZmZXIpOnQuYnVmZmVyO3JldHVybiBuZXcgdC5jb25zdHJ1Y3RvcihyLHQuYnl0ZU9mZnNldCx0Lmxlbmd0aCl9dmFyIGRULGY5PU4oKCk9PnsidXNlIHN0cmljdCI7ZlQoKTtvKG5DZSwiY2xvbmVUeXBlZEFycmF5Iik7ZFQ9bkNlfSk7ZnVuY3Rpb24gaUNlKHQsZSl7dmFyIHI9LTEsbj10Lmxlbmd0aDtmb3IoZXx8KGU9QXJyYXkobikpOysrcjxuOyllW3JdPXRbcl07cmV0dXJuIGV9dmFyIHBULGQ5PU4oKCk9PnsidXNlIHN0cmljdCI7byhpQ2UsImNvcHlBcnJheSIpO3BUPWlDZX0pO3ZhciBjaixhQ2UsdWosaGo9TigoKT0+eyJ1c2Ugc3RyaWN0IjtubygpO2NqPU9iamVjdC5jcmVhdGUsYUNlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gbyh0LCJvYmplY3QiKSxmdW5jdGlvbihlKXtpZighYm4oZSkpcmV0dXJue307aWYoY2opcmV0dXJuIGNqKGUpO3QucHJvdG90eXBlPWU7dmFyIHI9bmV3IHQ7cmV0dXJuIHQucHJvdG90eXBlPXZvaWQgMCxyfX0oKSx1aj1hQ2V9KTtmdW5jdGlvbiBzQ2UodCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHQoZShyKSl9fXZhciBtVCxwOT1OKCgpPT57InVzZSBzdHJpY3QiO28oc0NlLCJvdmVyQXJnIik7bVQ9c0NlfSk7dmFyIG9DZSxjbSxnVD1OKCgpPT57InVzZSBzdHJpY3QiO3A5KCk7b0NlPW1UKE9iamVjdC5nZXRQcm90b3R5cGVPZixPYmplY3QpLGNtPW9DZX0pO2Z1bmN0aW9uIGNDZSh0KXt2YXIgZT10JiZ0LmNvbnN0cnVjdG9yLHI9dHlwZW9mIGU9PSJmdW5jdGlvbiImJmUucHJvdG90eXBlfHxsQ2U7cmV0dXJuIHQ9PT1yfXZhciBsQ2UsbWMsdW09TigoKT0+eyJ1c2Ugc3RyaWN0IjtsQ2U9T2JqZWN0LnByb3RvdHlwZTtvKGNDZSwiaXNQcm90b3R5cGUiKTttYz1jQ2V9KTtmdW5jdGlvbiB1Q2UodCl7cmV0dXJuIHR5cGVvZiB0LmNvbnN0cnVjdG9yPT0iZnVuY3Rpb24iJiYhbWModCk/dWooY20odCkpOnt9fXZhciB5VCxtOT1OKCgpPT57InVzZSBzdHJpY3QiO2hqKCk7Z1QoKTt1bSgpO28odUNlLCJpbml0Q2xvbmVPYmplY3QiKTt5VD11Q2V9KTtmdW5jdGlvbiBoQ2UodCl7cmV0dXJuIHQhPW51bGwmJnR5cGVvZiB0PT0ib2JqZWN0In12YXIgaWksT289TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKGhDZSwiaXNPYmplY3RMaWtlIik7aWk9aENlfSk7ZnVuY3Rpb24gZENlKHQpe3JldHVybiBpaSh0KSYmZmEodCk9PWZDZX12YXIgZkNlLGc5LGZqPU4oKCk9PnsidXNlIHN0cmljdCI7QXUoKTtPbygpO2ZDZT0iW29iamVjdCBBcmd1bWVudHNdIjtvKGRDZSwiYmFzZUlzQXJndW1lbnRzIik7Zzk9ZENlfSk7dmFyIGRqLHBDZSxtQ2UsZ0NlLERsLGhtPU4oKCk9PnsidXNlIHN0cmljdCI7ZmooKTtPbygpO2RqPU9iamVjdC5wcm90b3R5cGUscENlPWRqLmhhc093blByb3BlcnR5LG1DZT1kai5wcm9wZXJ0eUlzRW51bWVyYWJsZSxnQ2U9ZzkoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKT9nOTpmdW5jdGlvbih0KXtyZXR1cm4gaWkodCkmJnBDZS5jYWxsKHQsImNhbGxlZSIpJiYhbUNlLmNhbGwodCwiY2FsbGVlIil9LERsPWdDZX0pO3ZhciB5Q2UsUHQsV249TigoKT0+eyJ1c2Ugc3RyaWN0Ijt5Q2U9QXJyYXkuaXNBcnJheSxQdD15Q2V9KTtmdW5jdGlvbiB4Q2UodCl7cmV0dXJuIHR5cGVvZiB0PT0ibnVtYmVyIiYmdD4tMSYmdCUxPT0wJiZ0PD12Q2V9dmFyIHZDZSxmbSx2VD1OKCgpPT57InVzZSBzdHJpY3QiO3ZDZT05MDA3MTk5MjU0NzQwOTkxO28oeENlLCJpc0xlbmd0aCIpO2ZtPXhDZX0pO2Z1bmN0aW9uIGJDZSh0KXtyZXR1cm4gdCE9bnVsbCYmZm0odC5sZW5ndGgpJiYhQWkodCl9dmFyIGZpLFBvPU4oKCk9PnsidXNlIHN0cmljdCI7bjIoKTt2VCgpO28oYkNlLCJpc0FycmF5TGlrZSIpO2ZpPWJDZX0pO2Z1bmN0aW9uIFRDZSh0KXtyZXR1cm4gaWkodCkmJmZpKHQpfXZhciBQZCx4VD1OKCgpPT57InVzZSBzdHJpY3QiO1BvKCk7T28oKTtvKFRDZSwiaXNBcnJheUxpa2VPYmplY3QiKTtQZD1UQ2V9KTtmdW5jdGlvbiB3Q2UoKXtyZXR1cm4hMX12YXIgcGosbWo9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKHdDZSwic3R1YkZhbHNlIik7cGo9d0NlfSk7dmFyIHZqLGdqLGtDZSx5aixFQ2UsU0NlLExsLGRtPU4oKCk9PnsidXNlIHN0cmljdCI7TW8oKTttaigpO3ZqPXR5cGVvZiBleHBvcnRzPT0ib2JqZWN0IiYmZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHMsZ2o9dmomJnR5cGVvZiBtb2R1bGU9PSJvYmplY3QiJiZtb2R1bGUmJiFtb2R1bGUubm9kZVR5cGUmJm1vZHVsZSxrQ2U9Z2omJmdqLmV4cG9ydHM9PT12aix5aj1rQ2U/aGkuQnVmZmVyOnZvaWQgMCxFQ2U9eWo/eWouaXNCdWZmZXI6dm9pZCAwLFNDZT1FQ2V8fHBqLExsPVNDZX0pO2Z1bmN0aW9uIFJDZSh0KXtpZighaWkodCl8fGZhKHQpIT1DQ2UpcmV0dXJuITE7dmFyIGU9Y20odCk7aWYoZT09PW51bGwpcmV0dXJuITA7dmFyIHI9RENlLmNhbGwoZSwiY29uc3RydWN0b3IiKSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4gdHlwZW9mIHI9PSJmdW5jdGlvbiImJnIgaW5zdGFuY2VvZiByJiZ4ai5jYWxsKHIpPT1MQ2V9dmFyIENDZSxBQ2UsX0NlLHhqLERDZSxMQ2UsYmosVGo9TigoKT0+eyJ1c2Ugc3RyaWN0IjtBdSgpO2dUKCk7T28oKTtDQ2U9IltvYmplY3QgT2JqZWN0XSIsQUNlPUZ1bmN0aW9uLnByb3RvdHlwZSxfQ2U9T2JqZWN0LnByb3RvdHlwZSx4aj1BQ2UudG9TdHJpbmcsRENlPV9DZS5oYXNPd25Qcm9wZXJ0eSxMQ2U9eGouY2FsbChPYmplY3QpO28oUkNlLCJpc1BsYWluT2JqZWN0Iik7Ymo9UkNlfSk7ZnVuY3Rpb24gcjdlKHQpe3JldHVybiBpaSh0KSYmZm0odC5sZW5ndGgpJiYhIUZuW2ZhKHQpXX12YXIgTkNlLE1DZSxJQ2UsT0NlLFBDZSxCQ2UsRkNlLCRDZSx6Q2UsR0NlLFZDZSxVQ2UsSENlLFdDZSxxQ2UsWUNlLFhDZSxqQ2UsS0NlLFFDZSxaQ2UsSkNlLGU3ZSx0N2UsRm4sd2osa2o9TigoKT0+eyJ1c2Ugc3RyaWN0IjtBdSgpO3ZUKCk7T28oKTtOQ2U9IltvYmplY3QgQXJndW1lbnRzXSIsTUNlPSJbb2JqZWN0IEFycmF5XSIsSUNlPSJbb2JqZWN0IEJvb2xlYW5dIixPQ2U9IltvYmplY3QgRGF0ZV0iLFBDZT0iW29iamVjdCBFcnJvcl0iLEJDZT0iW29iamVjdCBGdW5jdGlvbl0iLEZDZT0iW29iamVjdCBNYXBdIiwkQ2U9IltvYmplY3QgTnVtYmVyXSIsekNlPSJbb2JqZWN0IE9iamVjdF0iLEdDZT0iW29iamVjdCBSZWdFeHBdIixWQ2U9IltvYmplY3QgU2V0XSIsVUNlPSJbb2JqZWN0IFN0cmluZ10iLEhDZT0iW29iamVjdCBXZWFrTWFwXSIsV0NlPSJbb2JqZWN0IEFycmF5QnVmZmVyXSIscUNlPSJbb2JqZWN0IERhdGFWaWV3XSIsWUNlPSJbb2JqZWN0IEZsb2F0MzJBcnJheV0iLFhDZT0iW29iamVjdCBGbG9hdDY0QXJyYXldIixqQ2U9IltvYmplY3QgSW50OEFycmF5XSIsS0NlPSJbb2JqZWN0IEludDE2QXJyYXldIixRQ2U9IltvYmplY3QgSW50MzJBcnJheV0iLFpDZT0iW29iamVjdCBVaW50OEFycmF5XSIsSkNlPSJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsZTdlPSJbb2JqZWN0IFVpbnQxNkFycmF5XSIsdDdlPSJbb2JqZWN0IFVpbnQzMkFycmF5XSIsRm49e307Rm5bWUNlXT1GbltYQ2VdPUZuW2pDZV09Rm5bS0NlXT1GbltRQ2VdPUZuW1pDZV09Rm5bSkNlXT1GbltlN2VdPUZuW3Q3ZV09ITA7Rm5bTkNlXT1GbltNQ2VdPUZuW1dDZV09Rm5bSUNlXT1GbltxQ2VdPUZuW09DZV09Rm5bUENlXT1GbltCQ2VdPUZuW0ZDZV09Rm5bJENlXT1Gblt6Q2VdPUZuW0dDZV09Rm5bVkNlXT1GbltVQ2VdPUZuW0hDZV09ITE7byhyN2UsImJhc2VJc1R5cGVkQXJyYXkiKTt3aj1yN2V9KTtmdW5jdGlvbiBuN2UodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpfX12YXIgQm8sQmQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKG43ZSwiYmFzZVVuYXJ5Iik7Qm89bjdlfSk7dmFyIEVqLHUyLGk3ZSx5OSxhN2UsRm8saDI9TigoKT0+eyJ1c2Ugc3RyaWN0IjtuOSgpO0VqPXR5cGVvZiBleHBvcnRzPT0ib2JqZWN0IiYmZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHMsdTI9RWomJnR5cGVvZiBtb2R1bGU9PSJvYmplY3QiJiZtb2R1bGUmJiFtb2R1bGUubm9kZVR5cGUmJm1vZHVsZSxpN2U9dTImJnUyLmV4cG9ydHM9PT1Faix5OT1pN2UmJnNULnByb2Nlc3MsYTdlPWZ1bmN0aW9uKCl7dHJ5e3ZhciB0PXUyJiZ1Mi5yZXF1aXJlJiZ1Mi5yZXF1aXJlKCJ1dGlsIikudHlwZXM7cmV0dXJuIHR8fHk5JiZ5OS5iaW5kaW5nJiZ5OS5iaW5kaW5nKCJ1dGlsIil9Y2F0Y2h7fX0oKSxGbz1hN2V9KTt2YXIgU2osczdlLEdoLGYyPU4oKCk9PnsidXNlIHN0cmljdCI7a2ooKTtCZCgpO2gyKCk7U2o9Rm8mJkZvLmlzVHlwZWRBcnJheSxzN2U9U2o/Qm8oU2opOndqLEdoPXM3ZX0pO2Z1bmN0aW9uIG83ZSh0LGUpe2lmKCEoZT09PSJjb25zdHJ1Y3RvciImJnR5cGVvZiB0W2VdPT0iZnVuY3Rpb24iKSYmZSE9Il9fcHJvdG9fXyIpcmV0dXJuIHRbZV19dmFyIGQyLHY5PU4oKCk9PnsidXNlIHN0cmljdCI7byhvN2UsInNhZmVHZXQiKTtkMj1vN2V9KTtmdW5jdGlvbiB1N2UodCxlLHIpe3ZhciBuPXRbZV07KCEoYzdlLmNhbGwodCxlKSYmSW8obixyKSl8fHI9PT12b2lkIDAmJiEoZSBpbiB0KSkmJnBjKHQsZSxyKX12YXIgbDdlLGM3ZSxnYyxwbT1OKCgpPT57InVzZSBzdHJpY3QiO2FtKCk7SWQoKTtsN2U9T2JqZWN0LnByb3RvdHlwZSxjN2U9bDdlLmhhc093blByb3BlcnR5O28odTdlLCJhc3NpZ25WYWx1ZSIpO2djPXU3ZX0pO2Z1bmN0aW9uIGg3ZSh0LGUscixuKXt2YXIgaT0hcjtyfHwocj17fSk7Zm9yKHZhciBhPS0xLHM9ZS5sZW5ndGg7KythPHM7KXt2YXIgbD1lW2FdLHU9bj9uKHJbbF0sdFtsXSxsLHIsdCk6dm9pZCAwO3U9PT12b2lkIDAmJih1PXRbbF0pLGk/cGMocixsLHUpOmdjKHIsbCx1KX1yZXR1cm4gcn12YXIgJG8sRmQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtwbSgpO2FtKCk7byhoN2UsImNvcHlPYmplY3QiKTskbz1oN2V9KTtmdW5jdGlvbiBmN2UodCxlKXtmb3IodmFyIHI9LTEsbj1BcnJheSh0KTsrK3I8dDspbltyXT1lKHIpO3JldHVybiBufXZhciBDaixBaj1OKCgpPT57InVzZSBzdHJpY3QiO28oZjdlLCJiYXNlVGltZXMiKTtDaj1mN2V9KTtmdW5jdGlvbiBtN2UodCxlKXt2YXIgcj10eXBlb2YgdDtyZXR1cm4gZT1lPz9kN2UsISFlJiYocj09Im51bWJlciJ8fHIhPSJzeW1ib2wiJiZwN2UudGVzdCh0KSkmJnQ+LTEmJnQlMT09MCYmdDxlfXZhciBkN2UscDdlLFZoLHAyPU4oKCk9PnsidXNlIHN0cmljdCI7ZDdlPTkwMDcxOTkyNTQ3NDA5OTEscDdlPS9eKD86MHxbMS05XVxkKikkLztvKG03ZSwiaXNJbmRleCIpO1ZoPW03ZX0pO2Z1bmN0aW9uIHY3ZSh0LGUpe3ZhciByPVB0KHQpLG49IXImJkRsKHQpLGk9IXImJiFuJiZMbCh0KSxhPSFyJiYhbiYmIWkmJkdoKHQpLHM9cnx8bnx8aXx8YSxsPXM/Q2oodC5sZW5ndGgsU3RyaW5nKTpbXSx1PWwubGVuZ3RoO2Zvcih2YXIgaCBpbiB0KShlfHx5N2UuY2FsbCh0LGgpKSYmIShzJiYoaD09Imxlbmd0aCJ8fGkmJihoPT0ib2Zmc2V0Inx8aD09InBhcmVudCIpfHxhJiYoaD09ImJ1ZmZlciJ8fGg9PSJieXRlTGVuZ3RoInx8aD09ImJ5dGVPZmZzZXQiKXx8VmgoaCx1KSkpJiZsLnB1c2goaCk7cmV0dXJuIGx9dmFyIGc3ZSx5N2UsYlQseDk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtBaigpO2htKCk7V24oKTtkbSgpO3AyKCk7ZjIoKTtnN2U9T2JqZWN0LnByb3RvdHlwZSx5N2U9ZzdlLmhhc093blByb3BlcnR5O28odjdlLCJhcnJheUxpa2VLZXlzIik7YlQ9djdlfSk7ZnVuY3Rpb24geDdlKHQpe3ZhciBlPVtdO2lmKHQhPW51bGwpZm9yKHZhciByIGluIE9iamVjdCh0KSllLnB1c2gocik7cmV0dXJuIGV9dmFyIF9qLERqPU4oKCk9PnsidXNlIHN0cmljdCI7byh4N2UsIm5hdGl2ZUtleXNJbiIpO19qPXg3ZX0pO2Z1bmN0aW9uIHc3ZSh0KXtpZighYm4odCkpcmV0dXJuIF9qKHQpO3ZhciBlPW1jKHQpLHI9W107Zm9yKHZhciBuIGluIHQpbj09ImNvbnN0cnVjdG9yIiYmKGV8fCFUN2UuY2FsbCh0LG4pKXx8ci5wdXNoKG4pO3JldHVybiByfXZhciBiN2UsVDdlLExqLFJqPU4oKCk9PnsidXNlIHN0cmljdCI7bm8oKTt1bSgpO0RqKCk7YjdlPU9iamVjdC5wcm90b3R5cGUsVDdlPWI3ZS5oYXNPd25Qcm9wZXJ0eTtvKHc3ZSwiYmFzZUtleXNJbiIpO0xqPXc3ZX0pO2Z1bmN0aW9uIGs3ZSh0KXtyZXR1cm4gZmkodCk/YlQodCwhMCk6TGoodCl9dmFyIFJzLFVoPU4oKCk9PnsidXNlIHN0cmljdCI7eDkoKTtSaigpO1BvKCk7byhrN2UsImtleXNJbiIpO1JzPWs3ZX0pO2Z1bmN0aW9uIEU3ZSh0KXtyZXR1cm4gJG8odCxScyh0KSl9dmFyIE5qLE1qPU4oKCk9PnsidXNlIHN0cmljdCI7RmQoKTtVaCgpO28oRTdlLCJ0b1BsYWluT2JqZWN0Iik7Tmo9RTdlfSk7ZnVuY3Rpb24gUzdlKHQsZSxyLG4saSxhLHMpe3ZhciBsPWQyKHQsciksdT1kMihlLHIpLGg9cy5nZXQodSk7aWYoaCl7YzIodCxyLGgpO3JldHVybn12YXIgZj1hP2EobCx1LHIrIiIsdCxlLHMpOnZvaWQgMCxkPWY9PT12b2lkIDA7aWYoZCl7dmFyIHA9UHQodSksbT0hcCYmTGwodSksZz0hcCYmIW0mJkdoKHUpO2Y9dSxwfHxtfHxnP1B0KGwpP2Y9bDpQZChsKT9mPXBUKGwpOm0/KGQ9ITEsZj1oVCh1LCEwKSk6Zz8oZD0hMSxmPWRUKHUsITApKTpmPVtdOmJqKHUpfHxEbCh1KT8oZj1sLERsKGwpP2Y9TmoobCk6KCFibihsKXx8QWkobCkpJiYoZj15VCh1KSkpOmQ9ITF9ZCYmKHMuc2V0KHUsZiksaShmLHUsbixhLHMpLHMuZGVsZXRlKHUpKSxjMih0LHIsZil9dmFyIElqLE9qPU4oKCk9PnsidXNlIHN0cmljdCI7YzkoKTt1OSgpO2Y5KCk7ZDkoKTttOSgpO2htKCk7V24oKTt4VCgpO2RtKCk7bjIoKTtubygpO1RqKCk7ZjIoKTt2OSgpO01qKCk7byhTN2UsImJhc2VNZXJnZURlZXAiKTtJaj1TN2V9KTtmdW5jdGlvbiBQaih0LGUscixuLGkpe3QhPT1lJiZzbShlLGZ1bmN0aW9uKGEscyl7aWYoaXx8KGk9bmV3IGRjKSxibihhKSlJaih0LGUscyxyLFBqLG4saSk7ZWxzZXt2YXIgbD1uP24oZDIodCxzKSxhLHMrIiIsdCxlLGkpOnZvaWQgMDtsPT09dm9pZCAwJiYobD1hKSxjMih0LHMsbCl9fSxScyl9dmFyIEJqLEZqPU4oKCk9PnsidXNlIHN0cmljdCI7bDIoKTtjOSgpO3VUKCk7T2ooKTtubygpO1VoKCk7djkoKTtvKFBqLCJiYXNlTWVyZ2UiKTtCaj1Qan0pO2Z1bmN0aW9uIEM3ZSh0KXtyZXR1cm4gdH12YXIgdGEsTHU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKEM3ZSwiaWRlbnRpdHkiKTt0YT1DN2V9KTtmdW5jdGlvbiBBN2UodCxlLHIpe3N3aXRjaChyLmxlbmd0aCl7Y2FzZSAwOnJldHVybiB0LmNhbGwoZSk7Y2FzZSAxOnJldHVybiB0LmNhbGwoZSxyWzBdKTtjYXNlIDI6cmV0dXJuIHQuY2FsbChlLHJbMF0sclsxXSk7Y2FzZSAzOnJldHVybiB0LmNhbGwoZSxyWzBdLHJbMV0sclsyXSl9cmV0dXJuIHQuYXBwbHkoZSxyKX12YXIgJGosemo9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKEE3ZSwiYXBwbHkiKTskaj1BN2V9KTtmdW5jdGlvbiBfN2UodCxlLHIpe3JldHVybiBlPUdqKGU9PT12b2lkIDA/dC5sZW5ndGgtMTplLDApLGZ1bmN0aW9uKCl7Zm9yKHZhciBuPWFyZ3VtZW50cyxpPS0xLGE9R2oobi5sZW5ndGgtZSwwKSxzPUFycmF5KGEpOysraTxhOylzW2ldPW5bZStpXTtpPS0xO2Zvcih2YXIgbD1BcnJheShlKzEpOysraTxlOylsW2ldPW5baV07cmV0dXJuIGxbZV09cihzKSwkaih0LHRoaXMsbCl9fXZhciBHaixUVCxiOT1OKCgpPT57InVzZSBzdHJpY3QiO3pqKCk7R2o9TWF0aC5tYXg7byhfN2UsIm92ZXJSZXN0Iik7VFQ9XzdlfSk7ZnVuY3Rpb24gRDdlKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX12YXIgTnMsVDk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKEQ3ZSwiY29uc3RhbnQiKTtOcz1EN2V9KTt2YXIgTDdlLFZqLFVqPU4oKCk9PnsidXNlIHN0cmljdCI7VDkoKTtsOSgpO0x1KCk7TDdlPWltP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIGltKHQsInRvU3RyaW5nIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsdmFsdWU6TnMoZSksd3JpdGFibGU6ITB9KX06dGEsVmo9TDdlfSk7ZnVuY3Rpb24gSTdlKHQpe3ZhciBlPTAscj0wO3JldHVybiBmdW5jdGlvbigpe3ZhciBuPU03ZSgpLGk9TjdlLShuLXIpO2lmKHI9bixpPjApe2lmKCsrZT49UjdlKXJldHVybiBhcmd1bWVudHNbMF19ZWxzZSBlPTA7cmV0dXJuIHQuYXBwbHkodm9pZCAwLGFyZ3VtZW50cyl9fXZhciBSN2UsTjdlLE03ZSxIaixXaj1OKCgpPT57InVzZSBzdHJpY3QiO1I3ZT04MDAsTjdlPTE2LE03ZT1EYXRlLm5vdztvKEk3ZSwic2hvcnRPdXQiKTtIaj1JN2V9KTt2YXIgTzdlLHdULHc5PU4oKCk9PnsidXNlIHN0cmljdCI7VWooKTtXaigpO083ZT1IaihWaiksd1Q9TzdlfSk7ZnVuY3Rpb24gUDdlKHQsZSl7cmV0dXJuIHdUKFRUKHQsZSx0YSksdCsiIil9dmFyIHljLG1tPU4oKCk9PnsidXNlIHN0cmljdCI7THUoKTtiOSgpO3c5KCk7byhQN2UsImJhc2VSZXN0Iik7eWM9UDdlfSk7ZnVuY3Rpb24gQjdlKHQsZSxyKXtpZighYm4ocikpcmV0dXJuITE7dmFyIG49dHlwZW9mIGU7cmV0dXJuKG49PSJudW1iZXIiP2ZpKHIpJiZWaChlLHIubGVuZ3RoKTpuPT0ic3RyaW5nIiYmZSBpbiByKT9JbyhyW2VdLHQpOiExfXZhciBpbywkZD1OKCgpPT57InVzZSBzdHJpY3QiO0lkKCk7UG8oKTtwMigpO25vKCk7byhCN2UsImlzSXRlcmF0ZWVDYWxsIik7aW89QjdlfSk7ZnVuY3Rpb24gRjdlKHQpe3JldHVybiB5YyhmdW5jdGlvbihlLHIpe3ZhciBuPS0xLGk9ci5sZW5ndGgsYT1pPjE/cltpLTFdOnZvaWQgMCxzPWk+Mj9yWzJdOnZvaWQgMDtmb3IoYT10Lmxlbmd0aD4zJiZ0eXBlb2YgYT09ImZ1bmN0aW9uIj8oaS0tLGEpOnZvaWQgMCxzJiZpbyhyWzBdLHJbMV0scykmJihhPWk8Mz92b2lkIDA6YSxpPTEpLGU9T2JqZWN0KGUpOysrbjxpOyl7dmFyIGw9cltuXTtsJiZ0KGUsbCxuLGEpfXJldHVybiBlfSl9dmFyIGtULGs5PU4oKCk9PnsidXNlIHN0cmljdCI7bW0oKTskZCgpO28oRjdlLCJjcmVhdGVBc3NpZ25lciIpO2tUPUY3ZX0pO3ZhciAkN2UsSGgsRTk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGaigpO2s5KCk7JDdlPWtUKGZ1bmN0aW9uKHQsZSxyKXtCaih0LGUscil9KSxIaD0kN2V9KTtmdW5jdGlvbiBBOSh0LGUpe2lmKCF0KXJldHVybiBlO2xldCByPWBjdXJ2ZSR7dC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpfWA7cmV0dXJuIHo3ZVtyXT8/ZX1mdW5jdGlvbiBIN2UodCxlKXtsZXQgcj10LnRyaW0oKTtpZihyKXJldHVybiBlLnNlY3VyaXR5TGV2ZWwhPT0ibG9vc2UiPygwLFhqLnNhbml0aXplVXJsKShyKTpyfWZ1bmN0aW9uIFFqKHQsZSl7cmV0dXJuIXR8fCFlPzA6TWF0aC5zcXJ0KE1hdGgucG93KGUueC10LngsMikrTWF0aC5wb3coZS55LXQueSwyKSl9ZnVuY3Rpb24gcTdlKHQpe2xldCBlLHI9MDt0LmZvckVhY2goaT0+e3IrPVFqKGksZSksZT1pfSk7bGV0IG49ci8yO3JldHVybiBfOSh0LG4pfWZ1bmN0aW9uIFk3ZSh0KXtyZXR1cm4gdC5sZW5ndGg9PT0xP3RbMF06cTdlKHQpfWZ1bmN0aW9uIGo3ZSh0LGUscil7bGV0IG49c3RydWN0dXJlZENsb25lKHIpO1guaW5mbygib3VyIHBvaW50cyIsbiksZSE9PSJzdGFydF9sZWZ0IiYmZSE9PSJzdGFydF9yaWdodCImJm4ucmV2ZXJzZSgpO2xldCBpPTI1K3QsYT1fOShuLGkpLHM9MTArdCouNSxsPU1hdGguYXRhbjIoblswXS55LWEueSxuWzBdLngtYS54KSx1PXt4OjAseTowfTtyZXR1cm4gZT09PSJzdGFydF9sZWZ0Ij8odS54PU1hdGguc2luKGwrTWF0aC5QSSkqcysoblswXS54K2EueCkvMix1Lnk9LU1hdGguY29zKGwrTWF0aC5QSSkqcysoblswXS55K2EueSkvMik6ZT09PSJlbmRfcmlnaHQiPyh1Lng9TWF0aC5zaW4obC1NYXRoLlBJKSpzKyhuWzBdLngrYS54KS8yLTUsdS55PS1NYXRoLmNvcyhsLU1hdGguUEkpKnMrKG5bMF0ueSthLnkpLzItNSk6ZT09PSJlbmRfbGVmdCI/KHUueD1NYXRoLnNpbihsKSpzKyhuWzBdLngrYS54KS8yLTUsdS55PS1NYXRoLmNvcyhsKSpzKyhuWzBdLnkrYS55KS8yLTUpOih1Lng9TWF0aC5zaW4obCkqcysoblswXS54K2EueCkvMix1Lnk9LU1hdGguY29zKGwpKnMrKG5bMF0ueSthLnkpLzIpLHV9ZnVuY3Rpb24gRDkodCl7bGV0IGU9IiIscj0iIjtmb3IobGV0IG4gb2YgdCluIT09dm9pZCAwJiYobi5zdGFydHNXaXRoKCJjb2xvcjoiKXx8bi5zdGFydHNXaXRoKCJ0ZXh0LWFsaWduOiIpP3I9cituKyI7IjplPWUrbisiOyIpO3JldHVybntzdHlsZTplLGxhYmVsU3R5bGU6cn19ZnVuY3Rpb24gSzdlKHQpe2xldCBlPSIiLHI9IjAxMjM0NTY3ODlhYmNkZWYiLG49ci5sZW5ndGg7Zm9yKGxldCBpPTA7aTx0O2krKyllKz1yLmNoYXJBdChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbikpO3JldHVybiBlfWZ1bmN0aW9uIFNUKHQsZSl7cmV0dXJuIE05KHQsZSkuaGVpZ2h0fWZ1bmN0aW9uIHJhKHQsZSl7cmV0dXJuIE05KHQsZSkud2lkdGh9ZnVuY3Rpb24gSTkodCl7cmV0dXJuInN0ciJpbiB0fWZ1bmN0aW9uICRuKHQsZSl7cmV0dXJuIEhoKHt9LHQsZSl9ZnVuY3Rpb24gem4odCl7cmV0dXJuIHQ/P251bGx9dmFyIFhqLEM5LHo3ZSxHN2UsVjdlLGpqLEtqLFU3ZSxXN2UscWosXzksWDdlLFlqLEw5LFI5LFE3ZSxaN2UsTjksSjdlLE05LFM5LEVULGVBZSx0QWUsem8sVnQsWmosbmEsV2gsZXI9TigoKT0+eyJ1c2Ugc3RyaWN0IjtYaj1BYShaMCgpLDEpO2ZyKCk7cHIoKTtiNygpO3l0KCk7cmQoKTtnMCgpO285KCk7RTkoKTtRNCgpO0M5PSJcdTIwMEIiLHo3ZT17Y3VydmVCYXNpczpObyxjdXJ2ZUJhc2lzQ2xvc2VkOlg1LGN1cnZlQmFzaXNPcGVuOmo1LGN1cnZlQnVtcFg6R3YsY3VydmVCdW1wWTpWdixjdXJ2ZUJ1bmRsZTpIRCxjdXJ2ZUNhcmRpbmFsQ2xvc2VkOldELGN1cnZlQ2FyZGluYWxPcGVuOllELGN1cnZlQ2FyZGluYWw6cXYsY3VydmVDYXRtdWxsUm9tQ2xvc2VkOmpELGN1cnZlQ2F0bXVsbFJvbU9wZW46S0QsY3VydmVDYXRtdWxsUm9tOmp2LGN1cnZlTGluZWFyOlN1LGN1cnZlTGluZWFyQ2xvc2VkOmVULGN1cnZlTW9ub3RvbmVYOkt2LGN1cnZlTW9ub3RvbmVZOlF2LGN1cnZlTmF0dXJhbDpLMCxjdXJ2ZVN0ZXA6UTAsY3VydmVTdGVwQWZ0ZXI6SnYsY3VydmVTdGVwQmVmb3JlOlp2fSxHN2U9L1xzKig/OihcdyspKD89Oik6fChcdyspKVxzKig/OihcdyspfCgoPzooPyF9JXsyfSkufFxyP1xuKSopKT9ccyooPzp9JXsyfSk/L2dpLFY3ZT1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9amoodCwvKD86aW5pdFxiKXwoPzppbml0aWFsaXplXGIpLyksbj17fTtpZihBcnJheS5pc0FycmF5KHIpKXtsZXQgcz1yLm1hcChsPT5sLmFyZ3MpO3YwKHMpLG49VW4obixbLi4uc10pfWVsc2Ugbj1yLmFyZ3M7aWYoIW4pcmV0dXJuO2xldCBpPW0wKHQsZSksYT0iY29uZmlnIjtyZXR1cm4gblthXSE9PXZvaWQgMCYmKGk9PT0iZmxvd2NoYXJ0LXYyIiYmKGk9ImZsb3djaGFydCIpLG5baV09blthXSxkZWxldGUgblthXSksbn0sImRldGVjdEluaXQiKSxqaj1vKGZ1bmN0aW9uKHQsZT1udWxsKXt0cnl7bGV0IHI9bmV3IFJlZ0V4cChgWyVdezJ9KD8hW3tdJHtHN2Uuc291cmNlfSkoPz1bfV1bJV17Mn0pLioKYCwiaWciKTt0PXQudHJpbSgpLnJlcGxhY2UociwiIikucmVwbGFjZSgvJy9nbSwnIicpLFguZGVidWcoYERldGVjdGluZyBkaWFncmFtIGRpcmVjdGl2ZSR7ZSE9PW51bGw/IiB0eXBlOiIrZToiIn0gYmFzZWQgb24gdGhlIHRleHQ6JHt0fWApO2xldCBuLGk9W107Zm9yKDsobj10ZC5leGVjKHQpKSE9PW51bGw7KWlmKG4uaW5kZXg9PT10ZC5sYXN0SW5kZXgmJnRkLmxhc3RJbmRleCsrLG4mJiFlfHxlJiZuWzFdPy5tYXRjaChlKXx8ZSYmblsyXT8ubWF0Y2goZSkpe2xldCBhPW5bMV0/blsxXTpuWzJdLHM9blszXT9uWzNdLnRyaW0oKTpuWzRdP0pTT04ucGFyc2Uobls0XS50cmltKCkpOm51bGw7aS5wdXNoKHt0eXBlOmEsYXJnczpzfSl9cmV0dXJuIGkubGVuZ3RoPT09MD97dHlwZTp0LGFyZ3M6bnVsbH06aS5sZW5ndGg9PT0xP2lbMF06aX1jYXRjaChyKXtyZXR1cm4gWC5lcnJvcihgRVJST1I6ICR7ci5tZXNzYWdlfSAtIFVuYWJsZSB0byBwYXJzZSBkaXJlY3RpdmUgdHlwZTogJyR7ZX0nIGJhc2VkIG9uIHRoZSB0ZXh0OiAnJHt0fSdgKSx7dHlwZTp2b2lkIDAsYXJnczpudWxsfX19LCJkZXRlY3REaXJlY3RpdmUiKSxLaj1vKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UodGQsIiIpfSwicmVtb3ZlRGlyZWN0aXZlcyIpLFU3ZT1vKGZ1bmN0aW9uKHQsZSl7Zm9yKGxldFtyLG5db2YgZS5lbnRyaWVzKCkpaWYobi5tYXRjaCh0KSlyZXR1cm4gcjtyZXR1cm4tMX0sImlzU3Vic3RyaW5nSW5BcnJheSIpO28oQTksImludGVycG9sYXRlVG9DdXJ2ZSIpO28oSDdlLCJmb3JtYXRVcmwiKTtXN2U9bygodCwuLi5lKT0+e2xldCByPXQuc3BsaXQoIi4iKSxuPXIubGVuZ3RoLTEsaT1yW25dLGE9d2luZG93O2ZvcihsZXQgcz0wO3M8bjtzKyspaWYoYT1hW3Jbc11dLCFhKXtYLmVycm9yKGBGdW5jdGlvbiBuYW1lOiAke3R9IG5vdCBmb3VuZCBpbiB3aW5kb3dgKTtyZXR1cm59YVtpXSguLi5lKX0sInJ1bkZ1bmMiKTtvKFFqLCJkaXN0YW5jZSIpO28ocTdlLCJ0cmF2ZXJzZUVkZ2UiKTtvKFk3ZSwiY2FsY0xhYmVsUG9zaXRpb24iKTtxaj1vKCh0LGU9Mik9PntsZXQgcj1NYXRoLnBvdygxMCxlKTtyZXR1cm4gTWF0aC5yb3VuZCh0KnIpL3J9LCJyb3VuZE51bWJlciIpLF85PW8oKHQsZSk9PntsZXQgcixuPWU7Zm9yKGxldCBpIG9mIHQpe2lmKHIpe2xldCBhPVFqKGkscik7aWYoYT09PTApcmV0dXJuIHI7aWYoYTxuKW4tPWE7ZWxzZXtsZXQgcz1uL2E7aWYoczw9MClyZXR1cm4gcjtpZihzPj0xKXJldHVybnt4OmkueCx5OmkueX07aWYocz4wJiZzPDEpcmV0dXJue3g6cWooKDEtcykqci54K3MqaS54LDUpLHk6cWooKDEtcykqci55K3MqaS55LDUpfX19cj1pfXRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGZpbmQgYSBzdWl0YWJsZSBwb2ludCBmb3IgdGhlIGdpdmVuIGRpc3RhbmNlIil9LCJjYWxjdWxhdGVQb2ludCIpLFg3ZT1vKCh0LGUscik9PntYLmluZm8oYG91ciBwb2ludHMgJHtKU09OLnN0cmluZ2lmeShlKX1gKSxlWzBdIT09ciYmKGU9ZS5yZXZlcnNlKCkpO2xldCBpPV85KGUsMjUpLGE9dD8xMDo1LHM9TWF0aC5hdGFuMihlWzBdLnktaS55LGVbMF0ueC1pLngpLGw9e3g6MCx5OjB9O3JldHVybiBsLng9TWF0aC5zaW4ocykqYSsoZVswXS54K2kueCkvMixsLnk9LU1hdGguY29zKHMpKmErKGVbMF0ueStpLnkpLzIsbH0sImNhbGNDYXJkaW5hbGl0eVBvc2l0aW9uIik7byhqN2UsImNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb24iKTtvKEQ5LCJnZXRTdHlsZXNGcm9tQXJyYXkiKTtZaj0wLEw5PW8oKCk9PihZaisrLCJpZC0iK01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLDEyKSsiLSIrWWopLCJnZW5lcmF0ZUlkIik7byhLN2UsIm1ha2VSYW5kb21IZXgiKTtSOT1vKHQ9Pks3ZSh0Lmxlbmd0aCksInJhbmRvbSIpLFE3ZT1vKGZ1bmN0aW9uKCl7cmV0dXJue3g6MCx5OjAsZmlsbDp2b2lkIDAsYW5jaG9yOiJzdGFydCIsc3R5bGU6IiM2NjYiLHdpZHRoOjEwMCxoZWlnaHQ6MTAwLHRleHRNYXJnaW46MCxyeDowLHJ5OjAsdmFsaWduOnZvaWQgMCx0ZXh0OiIifX0sImdldFRleHRPYmoiKSxaN2U9byhmdW5jdGlvbih0LGUpe2xldCByPWUudGV4dC5yZXBsYWNlKFplLmxpbmVCcmVha1JlZ2V4LCIgIiksWyxuXT16byhlLmZvbnRTaXplKSxpPXQuYXBwZW5kKCJ0ZXh0Iik7aS5hdHRyKCJ4IixlLngpLGkuYXR0cigieSIsZS55KSxpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsZS5hbmNob3IpLGkuc3R5bGUoImZvbnQtZmFtaWx5IixlLmZvbnRGYW1pbHkpLGkuc3R5bGUoImZvbnQtc2l6ZSIsbiksaS5zdHlsZSgiZm9udC13ZWlnaHQiLGUuZm9udFdlaWdodCksaS5hdHRyKCJmaWxsIixlLmZpbGwpLGUuY2xhc3MhPT12b2lkIDAmJmkuYXR0cigiY2xhc3MiLGUuY2xhc3MpO2xldCBhPWkuYXBwZW5kKCJ0c3BhbiIpO3JldHVybiBhLmF0dHIoIngiLGUueCtlLnRleHRNYXJnaW4qMiksYS5hdHRyKCJmaWxsIixlLmZpbGwpLGEudGV4dChyKSxpfSwiZHJhd1NpbXBsZVRleHQiKSxOOT1ybSgodCxlLHIpPT57aWYoIXR8fChyPU9iamVjdC5hc3NpZ24oe2ZvbnRTaXplOjEyLGZvbnRXZWlnaHQ6NDAwLGZvbnRGYW1pbHk6IkFyaWFsIixqb2luV2l0aDoiPGJyLz4ifSxyKSxaZS5saW5lQnJlYWtSZWdleC50ZXN0KHQpKSlyZXR1cm4gdDtsZXQgbj10LnNwbGl0KCIgIikuZmlsdGVyKEJvb2xlYW4pLGk9W10sYT0iIjtyZXR1cm4gbi5mb3JFYWNoKChzLGwpPT57bGV0IHU9cmEoYCR7c30gYCxyKSxoPXJhKGEscik7aWYodT5lKXtsZXR7aHlwaGVuYXRlZFN0cmluZ3M6cCxyZW1haW5pbmdXb3JkOm19PUo3ZShzLGUsIi0iLHIpO2kucHVzaChhLC4uLnApLGE9bX1lbHNlIGgrdT49ZT8oaS5wdXNoKGEpLGE9cyk6YT1bYSxzXS5maWx0ZXIoQm9vbGVhbikuam9pbigiICIpO2wrMT09PW4ubGVuZ3RoJiZpLnB1c2goYSl9KSxpLmZpbHRlcihzPT5zIT09IiIpLmpvaW4oci5qb2luV2l0aCl9LCh0LGUscik9PmAke3R9JHtlfSR7ci5mb250U2l6ZX0ke3IuZm9udFdlaWdodH0ke3IuZm9udEZhbWlseX0ke3Iuam9pbldpdGh9YCksSjdlPXJtKCh0LGUscj0iLSIsbik9PntuPU9iamVjdC5hc3NpZ24oe2ZvbnRTaXplOjEyLGZvbnRXZWlnaHQ6NDAwLGZvbnRGYW1pbHk6IkFyaWFsIixtYXJnaW46MH0sbik7bGV0IGk9Wy4uLnRdLGE9W10scz0iIjtyZXR1cm4gaS5mb3JFYWNoKChsLHUpPT57bGV0IGg9YCR7c30ke2x9YDtpZihyYShoLG4pPj1lKXtsZXQgZD11KzEscD1pLmxlbmd0aD09PWQsbT1gJHtofSR7cn1gO2EucHVzaChwP2g6bSkscz0iIn1lbHNlIHM9aH0pLHtoeXBoZW5hdGVkU3RyaW5nczphLHJlbWFpbmluZ1dvcmQ6c319LCh0LGUscj0iLSIsbik9PmAke3R9JHtlfSR7cn0ke24uZm9udFNpemV9JHtuLmZvbnRXZWlnaHR9JHtuLmZvbnRGYW1pbHl9YCk7byhTVCwiY2FsY3VsYXRlVGV4dEhlaWdodCIpO28ocmEsImNhbGN1bGF0ZVRleHRXaWR0aCIpO005PXJtKCh0LGUpPT57bGV0e2ZvbnRTaXplOnI9MTIsZm9udEZhbWlseTpuPSJBcmlhbCIsZm9udFdlaWdodDppPTQwMH09ZTtpZighdClyZXR1cm57d2lkdGg6MCxoZWlnaHQ6MH07bGV0WyxhXT16byhyKSxzPVsic2Fucy1zZXJpZiIsbl0sbD10LnNwbGl0KFplLmxpbmVCcmVha1JlZ2V4KSx1PVtdLGg9R2UoImJvZHkiKTtpZighaC5yZW1vdmUpcmV0dXJue3dpZHRoOjAsaGVpZ2h0OjAsbGluZUhlaWdodDowfTtsZXQgZj1oLmFwcGVuZCgic3ZnIik7Zm9yKGxldCBwIG9mIHMpe2xldCBtPTAsZz17d2lkdGg6MCxoZWlnaHQ6MCxsaW5lSGVpZ2h0OjB9O2ZvcihsZXQgeSBvZiBsKXtsZXQgdj1RN2UoKTt2LnRleHQ9eXx8Qzk7bGV0IHg9WjdlKGYsdikuc3R5bGUoImZvbnQtc2l6ZSIsYSkuc3R5bGUoImZvbnQtd2VpZ2h0IixpKS5zdHlsZSgiZm9udC1mYW1pbHkiLHApLGI9KHguX2dyb3Vwc3x8eClbMF1bMF0uZ2V0QkJveCgpO2lmKGIud2lkdGg9PT0wJiZiLmhlaWdodD09PTApdGhyb3cgbmV3IEVycm9yKCJzdmcgZWxlbWVudCBub3QgaW4gcmVuZGVyIHRyZWUiKTtnLndpZHRoPU1hdGgucm91bmQoTWF0aC5tYXgoZy53aWR0aCxiLndpZHRoKSksbT1NYXRoLnJvdW5kKGIuaGVpZ2h0KSxnLmhlaWdodCs9bSxnLmxpbmVIZWlnaHQ9TWF0aC5yb3VuZChNYXRoLm1heChnLmxpbmVIZWlnaHQsbSkpfXUucHVzaChnKX1mLnJlbW92ZSgpO2xldCBkPWlzTmFOKHVbMV0uaGVpZ2h0KXx8aXNOYU4odVsxXS53aWR0aCl8fGlzTmFOKHVbMV0ubGluZUhlaWdodCl8fHVbMF0uaGVpZ2h0PnVbMV0uaGVpZ2h0JiZ1WzBdLndpZHRoPnVbMV0ud2lkdGgmJnVbMF0ubGluZUhlaWdodD51WzFdLmxpbmVIZWlnaHQ/MDoxO3JldHVybiB1W2RdfSwodCxlKT0+YCR7dH0ke2UuZm9udFNpemV9JHtlLmZvbnRXZWlnaHR9JHtlLmZvbnRGYW1pbHl9YCksUzk9Y2xhc3N7Y29uc3RydWN0b3IoZT0hMSxyKXt0aGlzLmNvdW50PTA7dGhpcy5jb3VudD1yP3IubGVuZ3RoOjAsdGhpcy5uZXh0PWU/KCk9PnRoaXMuY291bnQrKzooKT0+RGF0ZS5ub3coKX1zdGF0aWN7byh0aGlzLCJJbml0SURHZW5lcmF0b3IiKX19LGVBZT1vKGZ1bmN0aW9uKHQpe3JldHVybiBFVD1FVHx8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdD1lc2NhcGUodCkucmVwbGFjZSgvJTI2L2csIiYiKS5yZXBsYWNlKC8lMjMvZywiIyIpLnJlcGxhY2UoLyUzQi9nLCI7IiksRVQuaW5uZXJIVE1MPXQsdW5lc2NhcGUoRVQudGV4dENvbnRlbnQpfSwiZW50aXR5RGVjb2RlIik7byhJOSwiaXNEZXRhaWxlZEVycm9yIik7dEFlPW8oKHQsZSxyLG4pPT57aWYoIW4pcmV0dXJuO2xldCBpPXQubm9kZSgpPy5nZXRCQm94KCk7aSYmdC5hcHBlbmQoInRleHQiKS50ZXh0KG4pLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigieCIsaS54K2kud2lkdGgvMikuYXR0cigieSIsLXIpLmF0dHIoImNsYXNzIixlKX0sImluc2VydFRpdGxlIiksem89byh0PT57aWYodHlwZW9mIHQ9PSJudW1iZXIiKXJldHVyblt0LHQrInB4Il07bGV0IGU9cGFyc2VJbnQodD8/IiIsMTApO3JldHVybiBOdW1iZXIuaXNOYU4oZSk/W3ZvaWQgMCx2b2lkIDBdOnQ9PT1TdHJpbmcoZSk/W2UsdCsicHgiXTpbZSx0XX0sInBhcnNlRm9udFNpemUiKTtvKCRuLCJjbGVhbkFuZE1lcmdlIik7VnQ9e2Fzc2lnbldpdGhEZXB0aDpVbix3cmFwTGFiZWw6TjksY2FsY3VsYXRlVGV4dEhlaWdodDpTVCxjYWxjdWxhdGVUZXh0V2lkdGg6cmEsY2FsY3VsYXRlVGV4dERpbWVuc2lvbnM6TTksY2xlYW5BbmRNZXJnZTokbixkZXRlY3RJbml0OlY3ZSxkZXRlY3REaXJlY3RpdmU6amosaXNTdWJzdHJpbmdJbkFycmF5OlU3ZSxpbnRlcnBvbGF0ZVRvQ3VydmU6QTksY2FsY0xhYmVsUG9zaXRpb246WTdlLGNhbGNDYXJkaW5hbGl0eVBvc2l0aW9uOlg3ZSxjYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uOmo3ZSxmb3JtYXRVcmw6SDdlLGdldFN0eWxlc0Zyb21BcnJheTpEOSxnZW5lcmF0ZUlkOkw5LHJhbmRvbTpSOSxydW5GdW5jOlc3ZSxlbnRpdHlEZWNvZGU6ZUFlLGluc2VydFRpdGxlOnRBZSxwYXJzZUZvbnRTaXplOnpvLEluaXRJREdlbmVyYXRvcjpTOX0sWmo9byhmdW5jdGlvbih0KXtsZXQgZT10O3JldHVybiBlPWUucmVwbGFjZSgvc3R5bGUuKjpcUyojLio7L2csZnVuY3Rpb24ocil7cmV0dXJuIHIuc3Vic3RyaW5nKDAsci5sZW5ndGgtMSl9KSxlPWUucmVwbGFjZSgvY2xhc3NEZWYuKjpcUyojLio7L2csZnVuY3Rpb24ocil7cmV0dXJuIHIuc3Vic3RyaW5nKDAsci5sZW5ndGgtMSl9KSxlPWUucmVwbGFjZSgvI1x3KzsvZyxmdW5jdGlvbihyKXtsZXQgbj1yLnN1YnN0cmluZygxLHIubGVuZ3RoLTEpO3JldHVybi9eXCs/XGQrJC8udGVzdChuKT8iXHVGQjAyXHhCMFx4QjAiK24rIlx4QjZceERGIjoiXHVGQjAyXHhCMCIrbisiXHhCNlx4REYifSksZX0sImVuY29kZUVudGl0aWVzIiksbmE9byhmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKC/vrILCsMKwL2csIiYjIikucmVwbGFjZSgv76yCwrAvZywiJiIpLnJlcGxhY2UoL8K2w58vZywiOyIpfSwiZGVjb2RlRW50aXRpZXMiKSxXaD1vKCh0LGUse2NvdW50ZXI6cj0wLHByZWZpeDpuLHN1ZmZpeDppfSxhKT0+YXx8YCR7bj9gJHtufV9gOiIifSR7dH1fJHtlfV8ke3J9JHtpP2BfJHtpfWA6IiJ9YCwiZ2V0RWRnZUlkIik7byh6biwiaGFuZGxlVW5kZWZpbmVkQXR0ciIpfSk7ZnVuY3Rpb24gUmwodCxlLHIsbixpKXtpZighZVt0XS53aWR0aClpZihyKWVbdF0udGV4dD1OOShlW3RdLnRleHQsaSxuKSxlW3RdLnRleHRMaW5lcz1lW3RdLnRleHQuc3BsaXQoWmUubGluZUJyZWFrUmVnZXgpLmxlbmd0aCxlW3RdLndpZHRoPWksZVt0XS5oZWlnaHQ9U1QoZVt0XS50ZXh0LG4pO2Vsc2V7bGV0IGE9ZVt0XS50ZXh0LnNwbGl0KFplLmxpbmVCcmVha1JlZ2V4KTtlW3RdLnRleHRMaW5lcz1hLmxlbmd0aDtsZXQgcz0wO2VbdF0uaGVpZ2h0PTAsZVt0XS53aWR0aD0wO2ZvcihsZXQgbCBvZiBhKWVbdF0ud2lkdGg9TWF0aC5tYXgocmEobCxuKSxlW3RdLndpZHRoKSxzPVNUKGwsbiksZVt0XS5oZWlnaHQ9ZVt0XS5oZWlnaHQrc319ZnVuY3Rpb24gbksodCxlLHIsbixpKXtsZXQgYT1uZXcgRFQoaSk7YS5kYXRhLndpZHRoTGltaXQ9ci5kYXRhLndpZHRoTGltaXQvTWF0aC5taW4oTzksbi5sZW5ndGgpO2ZvcihsZXRbcyxsXW9mIG4uZW50cmllcygpKXtsZXQgdT0wO2wuaW1hZ2U9e3dpZHRoOjAsaGVpZ2h0OjAsWTowfSxsLnNwcml0ZSYmKGwuaW1hZ2Uud2lkdGg9NDgsbC5pbWFnZS5oZWlnaHQ9NDgsbC5pbWFnZS5ZPXUsdT1sLmltYWdlLlkrbC5pbWFnZS5oZWlnaHQpO2xldCBoPWwud3JhcCYmVXQud3JhcCxmPUNUKFV0KTtpZihmLmZvbnRTaXplPWYuZm9udFNpemUrMixmLmZvbnRXZWlnaHQ9ImJvbGQiLFJsKCJsYWJlbCIsbCxoLGYsYS5kYXRhLndpZHRoTGltaXQpLGwubGFiZWwuWT11KzgsdT1sLmxhYmVsLlkrbC5sYWJlbC5oZWlnaHQsbC50eXBlJiZsLnR5cGUudGV4dCE9PSIiKXtsLnR5cGUudGV4dD0iWyIrbC50eXBlLnRleHQrIl0iO2xldCBnPUNUKFV0KTtSbCgidHlwZSIsbCxoLGcsYS5kYXRhLndpZHRoTGltaXQpLGwudHlwZS5ZPXUrNSx1PWwudHlwZS5ZK2wudHlwZS5oZWlnaHR9aWYobC5kZXNjciYmbC5kZXNjci50ZXh0IT09IiIpe2xldCBnPUNUKFV0KTtnLmZvbnRTaXplPWcuZm9udFNpemUtMixSbCgiZGVzY3IiLGwsaCxnLGEuZGF0YS53aWR0aExpbWl0KSxsLmRlc2NyLlk9dSsyMCx1PWwuZGVzY3IuWStsLmRlc2NyLmhlaWdodH1pZihzPT0wfHxzJU85PT09MCl7bGV0IGc9ci5kYXRhLnN0YXJ0eCtVdC5kaWFncmFtTWFyZ2luWCx5PXIuZGF0YS5zdG9weStVdC5kaWFncmFtTWFyZ2luWSt1O2Euc2V0RGF0YShnLGcseSx5KX1lbHNle2xldCBnPWEuZGF0YS5zdG9weCE9PWEuZGF0YS5zdGFydHg/YS5kYXRhLnN0b3B4K1V0LmRpYWdyYW1NYXJnaW5YOmEuZGF0YS5zdGFydHgseT1hLmRhdGEuc3RhcnR5O2Euc2V0RGF0YShnLGcseSx5KX1hLm5hbWU9bC5hbGlhcztsZXQgZD1pLmRiLmdldEM0U2hhcGVBcnJheShsLmFsaWFzKSxwPWkuZGIuZ2V0QzRTaGFwZUtleXMobC5hbGlhcyk7cC5sZW5ndGg+MCYmcksoYSx0LGQscCksZT1sLmFsaWFzO2xldCBtPWkuZGIuZ2V0Qm91bmRhcmllcyhlKTttLmxlbmd0aD4wJiZuSyh0LGUsYSxtLGkpLGwuYWxpYXMhPT0iZ2xvYmFsIiYmdEsodCxsLGEpLHIuZGF0YS5zdG9weT1NYXRoLm1heChhLmRhdGEuc3RvcHkrVXQuYzRTaGFwZU1hcmdpbixyLmRhdGEuc3RvcHkpLHIuZGF0YS5zdG9weD1NYXRoLm1heChhLmRhdGEuc3RvcHgrVXQuYzRTaGFwZU1hcmdpbixyLmRhdGEuc3RvcHgpLEFUPU1hdGgubWF4KEFULHIuZGF0YS5zdG9weCksX1Q9TWF0aC5tYXgoX1Qsci5kYXRhLnN0b3B5KX19dmFyIEFULF9ULGVLLE85LFV0LERULFA5LG0yLENULHJBZSx0SyxySyxNcyxKaixuQWUsaUFlLGFBZSxCOSxpSz1OKCgpPT57InVzZSBzdHJpY3QiO2ZyKCk7SlkoKTt5dCgpO2E3KCk7cHIoKTtMQSgpO0d0KCk7ZzAoKTtlcigpO3hpKCk7QVQ9MCxfVD0wLGVLPTQsTzk9MjtSeS55eT1zdjtVdD17fSxEVD1jbGFzc3tzdGF0aWN7byh0aGlzLCJCb3VuZHMiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLm5hbWU9IiIsdGhpcy5kYXRhPXt9LHRoaXMuZGF0YS5zdGFydHg9dm9pZCAwLHRoaXMuZGF0YS5zdG9weD12b2lkIDAsdGhpcy5kYXRhLnN0YXJ0eT12b2lkIDAsdGhpcy5kYXRhLnN0b3B5PXZvaWQgMCx0aGlzLmRhdGEud2lkdGhMaW1pdD12b2lkIDAsdGhpcy5uZXh0RGF0YT17fSx0aGlzLm5leHREYXRhLnN0YXJ0eD12b2lkIDAsdGhpcy5uZXh0RGF0YS5zdG9weD12b2lkIDAsdGhpcy5uZXh0RGF0YS5zdGFydHk9dm9pZCAwLHRoaXMubmV4dERhdGEuc3RvcHk9dm9pZCAwLHRoaXMubmV4dERhdGEuY250PTAsUDkoZS5kYi5nZXRDb25maWcoKSl9c2V0RGF0YShlLHIsbixpKXt0aGlzLm5leHREYXRhLnN0YXJ0eD10aGlzLmRhdGEuc3RhcnR4PWUsdGhpcy5uZXh0RGF0YS5zdG9weD10aGlzLmRhdGEuc3RvcHg9cix0aGlzLm5leHREYXRhLnN0YXJ0eT10aGlzLmRhdGEuc3RhcnR5PW4sdGhpcy5uZXh0RGF0YS5zdG9weT10aGlzLmRhdGEuc3RvcHk9aX11cGRhdGVWYWwoZSxyLG4saSl7ZVtyXT09PXZvaWQgMD9lW3JdPW46ZVtyXT1pKG4sZVtyXSl9aW5zZXJ0KGUpe3RoaXMubmV4dERhdGEuY250PXRoaXMubmV4dERhdGEuY250KzE7bGV0IHI9dGhpcy5uZXh0RGF0YS5zdGFydHg9PT10aGlzLm5leHREYXRhLnN0b3B4P3RoaXMubmV4dERhdGEuc3RvcHgrZS5tYXJnaW46dGhpcy5uZXh0RGF0YS5zdG9weCtlLm1hcmdpbioyLG49citlLndpZHRoLGk9dGhpcy5uZXh0RGF0YS5zdGFydHkrZS5tYXJnaW4qMixhPWkrZS5oZWlnaHQ7KHI+PXRoaXMuZGF0YS53aWR0aExpbWl0fHxuPj10aGlzLmRhdGEud2lkdGhMaW1pdHx8dGhpcy5uZXh0RGF0YS5jbnQ+ZUspJiYocj10aGlzLm5leHREYXRhLnN0YXJ0eCtlLm1hcmdpbitVdC5uZXh0TGluZVBhZGRpbmdYLGk9dGhpcy5uZXh0RGF0YS5zdG9weStlLm1hcmdpbioyLHRoaXMubmV4dERhdGEuc3RvcHg9bj1yK2Uud2lkdGgsdGhpcy5uZXh0RGF0YS5zdGFydHk9dGhpcy5uZXh0RGF0YS5zdG9weSx0aGlzLm5leHREYXRhLnN0b3B5PWE9aStlLmhlaWdodCx0aGlzLm5leHREYXRhLmNudD0xKSxlLng9cixlLnk9aSx0aGlzLnVwZGF0ZVZhbCh0aGlzLmRhdGEsInN0YXJ0eCIscixNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwodGhpcy5kYXRhLCJzdGFydHkiLGksTWF0aC5taW4pLHRoaXMudXBkYXRlVmFsKHRoaXMuZGF0YSwic3RvcHgiLG4sTWF0aC5tYXgpLHRoaXMudXBkYXRlVmFsKHRoaXMuZGF0YSwic3RvcHkiLGEsTWF0aC5tYXgpLHRoaXMudXBkYXRlVmFsKHRoaXMubmV4dERhdGEsInN0YXJ0eCIscixNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwodGhpcy5uZXh0RGF0YSwic3RhcnR5IixpLE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbCh0aGlzLm5leHREYXRhLCJzdG9weCIsbixNYXRoLm1heCksdGhpcy51cGRhdGVWYWwodGhpcy5uZXh0RGF0YSwic3RvcHkiLGEsTWF0aC5tYXgpfWluaXQoZSl7dGhpcy5uYW1lPSIiLHRoaXMuZGF0YT17c3RhcnR4OnZvaWQgMCxzdG9weDp2b2lkIDAsc3RhcnR5OnZvaWQgMCxzdG9weTp2b2lkIDAsd2lkdGhMaW1pdDp2b2lkIDB9LHRoaXMubmV4dERhdGE9e3N0YXJ0eDp2b2lkIDAsc3RvcHg6dm9pZCAwLHN0YXJ0eTp2b2lkIDAsc3RvcHk6dm9pZCAwLGNudDowfSxQOShlLmRiLmdldENvbmZpZygpKX1idW1wTGFzdE1hcmdpbihlKXt0aGlzLmRhdGEuc3RvcHgrPWUsdGhpcy5kYXRhLnN0b3B5Kz1lfX0sUDk9byhmdW5jdGlvbih0KXtVbihVdCx0KSx0LmZvbnRGYW1pbHkmJihVdC5wZXJzb25Gb250RmFtaWx5PVV0LnN5c3RlbUZvbnRGYW1pbHk9VXQubWVzc2FnZUZvbnRGYW1pbHk9dC5mb250RmFtaWx5KSx0LmZvbnRTaXplJiYoVXQucGVyc29uRm9udFNpemU9VXQuc3lzdGVtRm9udFNpemU9VXQubWVzc2FnZUZvbnRTaXplPXQuZm9udFNpemUpLHQuZm9udFdlaWdodCYmKFV0LnBlcnNvbkZvbnRXZWlnaHQ9VXQuc3lzdGVtRm9udFdlaWdodD1VdC5tZXNzYWdlRm9udFdlaWdodD10LmZvbnRXZWlnaHQpfSwic2V0Q29uZiIpLG0yPW8oKHQsZSk9Pih7Zm9udEZhbWlseTp0W2UrIkZvbnRGYW1pbHkiXSxmb250U2l6ZTp0W2UrIkZvbnRTaXplIl0sZm9udFdlaWdodDp0W2UrIkZvbnRXZWlnaHQiXX0pLCJjNFNoYXBlRm9udCIpLENUPW8odD0+KHtmb250RmFtaWx5OnQuYm91bmRhcnlGb250RmFtaWx5LGZvbnRTaXplOnQuYm91bmRhcnlGb250U2l6ZSxmb250V2VpZ2h0OnQuYm91bmRhcnlGb250V2VpZ2h0fSksImJvdW5kYXJ5Rm9udCIpLHJBZT1vKHQ9Pih7Zm9udEZhbWlseTp0Lm1lc3NhZ2VGb250RmFtaWx5LGZvbnRTaXplOnQubWVzc2FnZUZvbnRTaXplLGZvbnRXZWlnaHQ6dC5tZXNzYWdlRm9udFdlaWdodH0pLCJtZXNzYWdlRm9udCIpO28oUmwsImNhbGNDNFNoYXBlVGV4dFdIIik7dEs9byhmdW5jdGlvbih0LGUscil7ZS54PXIuZGF0YS5zdGFydHgsZS55PXIuZGF0YS5zdGFydHksZS53aWR0aD1yLmRhdGEuc3RvcHgtci5kYXRhLnN0YXJ0eCxlLmhlaWdodD1yLmRhdGEuc3RvcHktci5kYXRhLnN0YXJ0eSxlLmxhYmVsLnk9VXQuYzRTaGFwZU1hcmdpbi0zNTtsZXQgbj1lLndyYXAmJlV0LndyYXAsaT1DVChVdCk7aS5mb250U2l6ZT1pLmZvbnRTaXplKzIsaS5mb250V2VpZ2h0PSJib2xkIjtsZXQgYT1yYShlLmxhYmVsLnRleHQsaSk7UmwoImxhYmVsIixlLG4saSxhKSxfbC5kcmF3Qm91bmRhcnkodCxlLFV0KX0sImRyYXdCb3VuZGFyeSIpLHJLPW8oZnVuY3Rpb24odCxlLHIsbil7bGV0IGk9MDtmb3IobGV0IGEgb2Ygbil7aT0wO2xldCBzPXJbYV0sbD1tMihVdCxzLnR5cGVDNFNoYXBlLnRleHQpO3N3aXRjaChsLmZvbnRTaXplPWwuZm9udFNpemUtMixzLnR5cGVDNFNoYXBlLndpZHRoPXJhKCJceEFCIitzLnR5cGVDNFNoYXBlLnRleHQrIlx4QkIiLGwpLHMudHlwZUM0U2hhcGUuaGVpZ2h0PWwuZm9udFNpemUrMixzLnR5cGVDNFNoYXBlLlk9VXQuYzRTaGFwZVBhZGRpbmcsaT1zLnR5cGVDNFNoYXBlLlkrcy50eXBlQzRTaGFwZS5oZWlnaHQtNCxzLmltYWdlPXt3aWR0aDowLGhlaWdodDowLFk6MH0scy50eXBlQzRTaGFwZS50ZXh0KXtjYXNlInBlcnNvbiI6Y2FzZSJleHRlcm5hbF9wZXJzb24iOnMuaW1hZ2Uud2lkdGg9NDgscy5pbWFnZS5oZWlnaHQ9NDgscy5pbWFnZS5ZPWksaT1zLmltYWdlLlkrcy5pbWFnZS5oZWlnaHQ7YnJlYWt9cy5zcHJpdGUmJihzLmltYWdlLndpZHRoPTQ4LHMuaW1hZ2UuaGVpZ2h0PTQ4LHMuaW1hZ2UuWT1pLGk9cy5pbWFnZS5ZK3MuaW1hZ2UuaGVpZ2h0KTtsZXQgdT1zLndyYXAmJlV0LndyYXAsaD1VdC53aWR0aC1VdC5jNFNoYXBlUGFkZGluZyoyLGY9bTIoVXQscy50eXBlQzRTaGFwZS50ZXh0KTtpZihmLmZvbnRTaXplPWYuZm9udFNpemUrMixmLmZvbnRXZWlnaHQ9ImJvbGQiLFJsKCJsYWJlbCIscyx1LGYsaCkscy5sYWJlbC5ZPWkrOCxpPXMubGFiZWwuWStzLmxhYmVsLmhlaWdodCxzLnR5cGUmJnMudHlwZS50ZXh0IT09IiIpe3MudHlwZS50ZXh0PSJbIitzLnR5cGUudGV4dCsiXSI7bGV0IG09bTIoVXQscy50eXBlQzRTaGFwZS50ZXh0KTtSbCgidHlwZSIscyx1LG0saCkscy50eXBlLlk9aSs1LGk9cy50eXBlLlkrcy50eXBlLmhlaWdodH1lbHNlIGlmKHMudGVjaG4mJnMudGVjaG4udGV4dCE9PSIiKXtzLnRlY2huLnRleHQ9IlsiK3MudGVjaG4udGV4dCsiXSI7bGV0IG09bTIoVXQscy50ZWNobi50ZXh0KTtSbCgidGVjaG4iLHMsdSxtLGgpLHMudGVjaG4uWT1pKzUsaT1zLnRlY2huLlkrcy50ZWNobi5oZWlnaHR9bGV0IGQ9aSxwPXMubGFiZWwud2lkdGg7aWYocy5kZXNjciYmcy5kZXNjci50ZXh0IT09IiIpe2xldCBtPW0yKFV0LHMudHlwZUM0U2hhcGUudGV4dCk7UmwoImRlc2NyIixzLHUsbSxoKSxzLmRlc2NyLlk9aSsyMCxpPXMuZGVzY3IuWStzLmRlc2NyLmhlaWdodCxwPU1hdGgubWF4KHMubGFiZWwud2lkdGgscy5kZXNjci53aWR0aCksZD1pLXMuZGVzY3IudGV4dExpbmVzKjV9cD1wK1V0LmM0U2hhcGVQYWRkaW5nLHMud2lkdGg9TWF0aC5tYXgocy53aWR0aHx8VXQud2lkdGgscCxVdC53aWR0aCkscy5oZWlnaHQ9TWF0aC5tYXgocy5oZWlnaHR8fFV0LmhlaWdodCxkLFV0LmhlaWdodCkscy5tYXJnaW49cy5tYXJnaW58fFV0LmM0U2hhcGVNYXJnaW4sdC5pbnNlcnQocyksX2wuZHJhd0M0U2hhcGUoZSxzLFV0KX10LmJ1bXBMYXN0TWFyZ2luKFV0LmM0U2hhcGVNYXJnaW4pfSwiZHJhd0M0U2hhcGVBcnJheSIpLE1zPWNsYXNze3N0YXRpY3tvKHRoaXMsIlBvaW50Iil9Y29uc3RydWN0b3IoZSxyKXt0aGlzLng9ZSx0aGlzLnk9cn19LEpqPW8oZnVuY3Rpb24odCxlKXtsZXQgcj10Lngsbj10LnksaT1lLngsYT1lLnkscz1yK3Qud2lkdGgvMixsPW4rdC5oZWlnaHQvMix1PU1hdGguYWJzKHItaSksaD1NYXRoLmFicyhuLWEpLGY9aC91LGQ9dC5oZWlnaHQvdC53aWR0aCxwPW51bGw7cmV0dXJuIG49PWEmJnI8aT9wPW5ldyBNcyhyK3Qud2lkdGgsbCk6bj09YSYmcj5pP3A9bmV3IE1zKHIsbCk6cj09aSYmbjxhP3A9bmV3IE1zKHMsbit0LmhlaWdodCk6cj09aSYmbj5hJiYocD1uZXcgTXMocyxuKSkscj5pJiZuPGE/ZD49Zj9wPW5ldyBNcyhyLGwrZip0LndpZHRoLzIpOnA9bmV3IE1zKHMtdS9oKnQuaGVpZ2h0LzIsbit0LmhlaWdodCk6cjxpJiZuPGE/ZD49Zj9wPW5ldyBNcyhyK3Qud2lkdGgsbCtmKnQud2lkdGgvMik6cD1uZXcgTXMocyt1L2gqdC5oZWlnaHQvMixuK3QuaGVpZ2h0KTpyPGkmJm4+YT9kPj1mP3A9bmV3IE1zKHIrdC53aWR0aCxsLWYqdC53aWR0aC8yKTpwPW5ldyBNcyhzK3QuaGVpZ2h0LzIqdS9oLG4pOnI+aSYmbj5hJiYoZD49Zj9wPW5ldyBNcyhyLGwtdC53aWR0aC8yKmYpOnA9bmV3IE1zKHMtdC5oZWlnaHQvMip1L2gsbikpLHB9LCJnZXRJbnRlcnNlY3RQb2ludCIpLG5BZT1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9e3g6MCx5OjB9O3IueD1lLngrZS53aWR0aC8yLHIueT1lLnkrZS5oZWlnaHQvMjtsZXQgbj1Kaih0LHIpO3IueD10LngrdC53aWR0aC8yLHIueT10LnkrdC5oZWlnaHQvMjtsZXQgaT1KaihlLHIpO3JldHVybntzdGFydFBvaW50Om4sZW5kUG9pbnQ6aX19LCJnZXRJbnRlcnNlY3RQb2ludHMiKSxpQWU9byhmdW5jdGlvbih0LGUscixuKXtsZXQgaT0wO2ZvcihsZXQgYSBvZiBlKXtpPWkrMTtsZXQgcz1hLndyYXAmJlV0LndyYXAsbD1yQWUoVXQpO24uZGIuZ2V0QzRUeXBlKCk9PT0iQzREeW5hbWljIiYmKGEubGFiZWwudGV4dD1pKyI6ICIrYS5sYWJlbC50ZXh0KTtsZXQgaD1yYShhLmxhYmVsLnRleHQsbCk7UmwoImxhYmVsIixhLHMsbCxoKSxhLnRlY2huJiZhLnRlY2huLnRleHQhPT0iIiYmKGg9cmEoYS50ZWNobi50ZXh0LGwpLFJsKCJ0ZWNobiIsYSxzLGwsaCkpLGEuZGVzY3ImJmEuZGVzY3IudGV4dCE9PSIiJiYoaD1yYShhLmRlc2NyLnRleHQsbCksUmwoImRlc2NyIixhLHMsbCxoKSk7bGV0IGY9cihhLmZyb20pLGQ9cihhLnRvKSxwPW5BZShmLGQpO2Euc3RhcnRQb2ludD1wLnN0YXJ0UG9pbnQsYS5lbmRQb2ludD1wLmVuZFBvaW50fV9sLmRyYXdSZWxzKHQsZSxVdCl9LCJkcmF3UmVscyIpO28obkssImRyYXdJbnNpZGVCb3VuZGFyeSIpO2FBZT1vKGZ1bmN0aW9uKHQsZSxyLG4pe1V0PW1lKCkuYzQ7bGV0IGk9bWUoKS5zZWN1cml0eUxldmVsLGE7aT09PSJzYW5kYm94IiYmKGE9R2UoIiNpIitlKSk7bGV0IHM9aT09PSJzYW5kYm94Ij9HZShhLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpOkdlKCJib2R5IiksbD1uLmRiO24uZGIuc2V0V3JhcChVdC53cmFwKSxlSz1sLmdldEM0U2hhcGVJblJvdygpLE85PWwuZ2V0QzRCb3VuZGFyeUluUm93KCksWC5kZWJ1ZyhgQzoke0pTT04uc3RyaW5naWZ5KFV0LG51bGwsMil9YCk7bGV0IHU9aT09PSJzYW5kYm94Ij9zLnNlbGVjdChgW2lkPSIke2V9Il1gKTpHZShgW2lkPSIke2V9Il1gKTtfbC5pbnNlcnRDb21wdXRlckljb24odSksX2wuaW5zZXJ0RGF0YWJhc2VJY29uKHUpLF9sLmluc2VydENsb2NrSWNvbih1KTtsZXQgaD1uZXcgRFQobik7aC5zZXREYXRhKFV0LmRpYWdyYW1NYXJnaW5YLFV0LmRpYWdyYW1NYXJnaW5YLFV0LmRpYWdyYW1NYXJnaW5ZLFV0LmRpYWdyYW1NYXJnaW5ZKSxoLmRhdGEud2lkdGhMaW1pdD1zY3JlZW4uYXZhaWxXaWR0aCxBVD1VdC5kaWFncmFtTWFyZ2luWCxfVD1VdC5kaWFncmFtTWFyZ2luWTtsZXQgZj1uLmRiLmdldFRpdGxlKCksZD1uLmRiLmdldEJvdW5kYXJpZXMoIiIpO25LKHUsIiIsaCxkLG4pLF9sLmluc2VydEFycm93SGVhZCh1KSxfbC5pbnNlcnRBcnJvd0VuZCh1KSxfbC5pbnNlcnRBcnJvd0Nyb3NzSGVhZCh1KSxfbC5pbnNlcnRBcnJvd0ZpbGxlZEhlYWQodSksaUFlKHUsbi5kYi5nZXRSZWxzKCksbi5kYi5nZXRDNFNoYXBlLG4pLGguZGF0YS5zdG9weD1BVCxoLmRhdGEuc3RvcHk9X1Q7bGV0IHA9aC5kYXRhLGc9cC5zdG9weS1wLnN0YXJ0eSsyKlV0LmRpYWdyYW1NYXJnaW5ZLHY9cC5zdG9weC1wLnN0YXJ0eCsyKlV0LmRpYWdyYW1NYXJnaW5YO2YmJnUuYXBwZW5kKCJ0ZXh0IikudGV4dChmKS5hdHRyKCJ4IiwocC5zdG9weC1wLnN0YXJ0eCkvMi00KlV0LmRpYWdyYW1NYXJnaW5YKS5hdHRyKCJ5IixwLnN0YXJ0eStVdC5kaWFncmFtTWFyZ2luWSksZm4odSxnLHYsVXQudXNlTWF4V2lkdGgpO2xldCB4PWY/NjA6MDt1LmF0dHIoInZpZXdCb3giLHAuc3RhcnR4LVV0LmRpYWdyYW1NYXJnaW5YKyIgLSIrKFV0LmRpYWdyYW1NYXJnaW5ZK3gpKyIgIit2KyIgIisoZyt4KSksWC5kZWJ1ZygibW9kZWxzOiIscCl9LCJkcmF3IiksQjk9e2RyYXdQZXJzb25PclN5c3RlbUFycmF5OnJLLGRyYXdCb3VuZGFyeTp0SyxzZXRDb25mOlA5LGRyYXc6YUFlfX0pO3ZhciBzQWUsYUssc0s9TigoKT0+eyJ1c2Ugc3RyaWN0IjtzQWU9byh0PT5gLnBlcnNvbiB7CiAgICBzdHJva2U6ICR7dC5wZXJzb25Cb3JkZXJ9OwogICAgZmlsbDogJHt0LnBlcnNvbkJrZ307CiAgfQpgLCJnZXRTdHlsZXMiKSxhSz1zQWV9KTt2YXIgb0s9e307dXIob0sse2RpYWdyYW06KCk9Pm9BZX0pO3ZhciBvQWUsbEs9TigoKT0+eyJ1c2Ugc3RyaWN0IjthNygpO0xBKCk7aUsoKTtzSygpO29BZT17cGFyc2VyOkckLGRiOnN2LHJlbmRlcmVyOkI5LHN0eWxlczphSyxpbml0Om8oKHtjNDp0LHdyYXA6ZX0pPT57Qjkuc2V0Q29uZih0KSxzdi5zZXRXcmFwKGUpfSwiaW5pdCIpfX0pO2Z1bmN0aW9uIENLKHQpe3JldHVybiB0eXBlb2YgdD4idSJ8fHQ9PT1udWxsfWZ1bmN0aW9uIGhBZSh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJvYmplY3QiJiZ0IT09bnVsbH1mdW5jdGlvbiBmQWUodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dDpDSyh0KT9bXTpbdF19ZnVuY3Rpb24gZEFlKHQsZSl7dmFyIHIsbixpLGE7aWYoZSlmb3IoYT1PYmplY3Qua2V5cyhlKSxyPTAsbj1hLmxlbmd0aDtyPG47cis9MSlpPWFbcl0sdFtpXT1lW2ldO3JldHVybiB0fWZ1bmN0aW9uIHBBZSh0LGUpe3ZhciByPSIiLG47Zm9yKG49MDtuPGU7bis9MSlyKz10O3JldHVybiByfWZ1bmN0aW9uIG1BZSh0KXtyZXR1cm4gdD09PTAmJk51bWJlci5ORUdBVElWRV9JTkZJTklUWT09PTEvdH1mdW5jdGlvbiBBSyh0LGUpe3ZhciByPSIiLG49dC5yZWFzb258fCIodW5rbm93biByZWFzb24pIjtyZXR1cm4gdC5tYXJrPyh0Lm1hcmsubmFtZSYmKHIrPSdpbiAiJyt0Lm1hcmsubmFtZSsnIiAnKSxyKz0iKCIrKHQubWFyay5saW5lKzEpKyI6IisodC5tYXJrLmNvbHVtbisxKSsiKSIsIWUmJnQubWFyay5zbmlwcGV0JiYocis9YAoKYCt0Lm1hcmsuc25pcHBldCksbisiICIrcik6bn1mdW5jdGlvbiB5Mih0LGUpe0Vycm9yLmNhbGwodGhpcyksdGhpcy5uYW1lPSJZQU1MRXhjZXB0aW9uIix0aGlzLnJlYXNvbj10LHRoaXMubWFyaz1lLHRoaXMubWVzc2FnZT1BSyh0aGlzLCExKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpOnRoaXMuc3RhY2s9bmV3IEVycm9yKCkuc3RhY2t8fCIifWZ1bmN0aW9uIEY5KHQsZSxyLG4saSl7dmFyIGE9IiIscz0iIixsPU1hdGguZmxvb3IoaS8yKS0xO3JldHVybiBuLWU+bCYmKGE9IiAuLi4gIixlPW4tbCthLmxlbmd0aCksci1uPmwmJihzPSIgLi4uIixyPW4rbC1zLmxlbmd0aCkse3N0cjphK3Quc2xpY2UoZSxyKS5yZXBsYWNlKC9cdC9nLCJcdTIxOTIiKStzLHBvczpuLWUrYS5sZW5ndGh9fWZ1bmN0aW9uICQ5KHQsZSl7cmV0dXJuIEdpLnJlcGVhdCgiICIsZS10Lmxlbmd0aCkrdH1mdW5jdGlvbiB3QWUodCxlKXtpZihlPU9iamVjdC5jcmVhdGUoZXx8bnVsbCksIXQuYnVmZmVyKXJldHVybiBudWxsO2UubWF4TGVuZ3RofHwoZS5tYXhMZW5ndGg9NzkpLHR5cGVvZiBlLmluZGVudCE9Im51bWJlciImJihlLmluZGVudD0xKSx0eXBlb2YgZS5saW5lc0JlZm9yZSE9Im51bWJlciImJihlLmxpbmVzQmVmb3JlPTMpLHR5cGVvZiBlLmxpbmVzQWZ0ZXIhPSJudW1iZXIiJiYoZS5saW5lc0FmdGVyPTIpO2Zvcih2YXIgcj0vXHI/XG58XHJ8XDAvZyxuPVswXSxpPVtdLGEscz0tMTthPXIuZXhlYyh0LmJ1ZmZlcik7KWkucHVzaChhLmluZGV4KSxuLnB1c2goYS5pbmRleCthWzBdLmxlbmd0aCksdC5wb3NpdGlvbjw9YS5pbmRleCYmczwwJiYocz1uLmxlbmd0aC0yKTtzPDAmJihzPW4ubGVuZ3RoLTEpO3ZhciBsPSIiLHUsaCxmPU1hdGgubWluKHQubGluZStlLmxpbmVzQWZ0ZXIsaS5sZW5ndGgpLnRvU3RyaW5nKCkubGVuZ3RoLGQ9ZS5tYXhMZW5ndGgtKGUuaW5kZW50K2YrMyk7Zm9yKHU9MTt1PD1lLmxpbmVzQmVmb3JlJiYhKHMtdTwwKTt1KyspaD1GOSh0LmJ1ZmZlcixuW3MtdV0saVtzLXVdLHQucG9zaXRpb24tKG5bc10tbltzLXVdKSxkKSxsPUdpLnJlcGVhdCgiICIsZS5pbmRlbnQpKyQ5KCh0LmxpbmUtdSsxKS50b1N0cmluZygpLGYpKyIgfCAiK2guc3RyK2AKYCtsO2ZvcihoPUY5KHQuYnVmZmVyLG5bc10saVtzXSx0LnBvc2l0aW9uLGQpLGwrPUdpLnJlcGVhdCgiICIsZS5pbmRlbnQpKyQ5KCh0LmxpbmUrMSkudG9TdHJpbmcoKSxmKSsiIHwgIitoLnN0citgCmAsbCs9R2kucmVwZWF0KCItIixlLmluZGVudCtmKzMraC5wb3MpK2BeCmAsdT0xO3U8PWUubGluZXNBZnRlciYmIShzK3U+PWkubGVuZ3RoKTt1KyspaD1GOSh0LmJ1ZmZlcixuW3MrdV0saVtzK3VdLHQucG9zaXRpb24tKG5bc10tbltzK3VdKSxkKSxsKz1HaS5yZXBlYXQoIiAiLGUuaW5kZW50KSskOSgodC5saW5lK3UrMSkudG9TdHJpbmcoKSxmKSsiIHwgIitoLnN0citgCmA7cmV0dXJuIGwucmVwbGFjZSgvXG4kLywiIil9ZnVuY3Rpb24gQ0FlKHQpe3ZhciBlPXt9O3JldHVybiB0IT09bnVsbCYmT2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihyKXt0W3JdLmZvckVhY2goZnVuY3Rpb24obil7ZVtTdHJpbmcobildPXJ9KX0pLGV9ZnVuY3Rpb24gQUFlKHQsZSl7aWYoZT1lfHx7fSxPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe2lmKEVBZS5pbmRleE9mKHIpPT09LTEpdGhyb3cgbmV3IElzKCdVbmtub3duIG9wdGlvbiAiJytyKyciIGlzIG1ldCBpbiBkZWZpbml0aW9uIG9mICInK3QrJyIgWUFNTCB0eXBlLicpfSksdGhpcy5vcHRpb25zPWUsdGhpcy50YWc9dCx0aGlzLmtpbmQ9ZS5raW5kfHxudWxsLHRoaXMucmVzb2x2ZT1lLnJlc29sdmV8fGZ1bmN0aW9uKCl7cmV0dXJuITB9LHRoaXMuY29uc3RydWN0PWUuY29uc3RydWN0fHxmdW5jdGlvbihyKXtyZXR1cm4gcn0sdGhpcy5pbnN0YW5jZU9mPWUuaW5zdGFuY2VPZnx8bnVsbCx0aGlzLnByZWRpY2F0ZT1lLnByZWRpY2F0ZXx8bnVsbCx0aGlzLnJlcHJlc2VudD1lLnJlcHJlc2VudHx8bnVsbCx0aGlzLnJlcHJlc2VudE5hbWU9ZS5yZXByZXNlbnROYW1lfHxudWxsLHRoaXMuZGVmYXVsdFN0eWxlPWUuZGVmYXVsdFN0eWxlfHxudWxsLHRoaXMubXVsdGk9ZS5tdWx0aXx8ITEsdGhpcy5zdHlsZUFsaWFzZXM9Q0FlKGUuc3R5bGVBbGlhc2VzfHxudWxsKSxTQWUuaW5kZXhPZih0aGlzLmtpbmQpPT09LTEpdGhyb3cgbmV3IElzKCdVbmtub3duIGtpbmQgIicrdGhpcy5raW5kKyciIGlzIHNwZWNpZmllZCBmb3IgIicrdCsnIiBZQU1MIHR5cGUuJyl9ZnVuY3Rpb24gaEsodCxlKXt2YXIgcj1bXTtyZXR1cm4gdFtlXS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciBpPXIubGVuZ3RoO3IuZm9yRWFjaChmdW5jdGlvbihhLHMpe2EudGFnPT09bi50YWcmJmEua2luZD09PW4ua2luZCYmYS5tdWx0aT09PW4ubXVsdGkmJihpPXMpfSkscltpXT1ufSkscn1mdW5jdGlvbiBfQWUoKXt2YXIgdD17c2NhbGFyOnt9LHNlcXVlbmNlOnt9LG1hcHBpbmc6e30sZmFsbGJhY2s6e30sbXVsdGk6e3NjYWxhcjpbXSxzZXF1ZW5jZTpbXSxtYXBwaW5nOltdLGZhbGxiYWNrOltdfX0sZSxyO2Z1bmN0aW9uIG4oaSl7aS5tdWx0aT8odC5tdWx0aVtpLmtpbmRdLnB1c2goaSksdC5tdWx0aS5mYWxsYmFjay5wdXNoKGkpKTp0W2kua2luZF1baS50YWddPXQuZmFsbGJhY2tbaS50YWddPWl9Zm9yKG8obiwiY29sbGVjdFR5cGUiKSxlPTAscj1hcmd1bWVudHMubGVuZ3RoO2U8cjtlKz0xKWFyZ3VtZW50c1tlXS5mb3JFYWNoKG4pO3JldHVybiB0fWZ1bmN0aW9uIEc5KHQpe3JldHVybiB0aGlzLmV4dGVuZCh0KX1mdW5jdGlvbiBJQWUodCl7aWYodD09PW51bGwpcmV0dXJuITA7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIGU9PT0xJiZ0PT09In4ifHxlPT09NCYmKHQ9PT0ibnVsbCJ8fHQ9PT0iTnVsbCJ8fHQ9PT0iTlVMTCIpfWZ1bmN0aW9uIE9BZSgpe3JldHVybiBudWxsfWZ1bmN0aW9uIFBBZSh0KXtyZXR1cm4gdD09PW51bGx9ZnVuY3Rpb24gRkFlKHQpe2lmKHQ9PT1udWxsKXJldHVybiExO3ZhciBlPXQubGVuZ3RoO3JldHVybiBlPT09NCYmKHQ9PT0idHJ1ZSJ8fHQ9PT0iVHJ1ZSJ8fHQ9PT0iVFJVRSIpfHxlPT09NSYmKHQ9PT0iZmFsc2UifHx0PT09IkZhbHNlInx8dD09PSJGQUxTRSIpfWZ1bmN0aW9uICRBZSh0KXtyZXR1cm4gdD09PSJ0cnVlInx8dD09PSJUcnVlInx8dD09PSJUUlVFIn1mdW5jdGlvbiB6QWUodCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KT09PSJbb2JqZWN0IEJvb2xlYW5dIn1mdW5jdGlvbiBWQWUodCl7cmV0dXJuIDQ4PD10JiZ0PD01N3x8NjU8PXQmJnQ8PTcwfHw5Nzw9dCYmdDw9MTAyfWZ1bmN0aW9uIFVBZSh0KXtyZXR1cm4gNDg8PXQmJnQ8PTU1fWZ1bmN0aW9uIEhBZSh0KXtyZXR1cm4gNDg8PXQmJnQ8PTU3fWZ1bmN0aW9uIFdBZSh0KXtpZih0PT09bnVsbClyZXR1cm4hMTt2YXIgZT10Lmxlbmd0aCxyPTAsbj0hMSxpO2lmKCFlKXJldHVybiExO2lmKGk9dFtyXSwoaT09PSItInx8aT09PSIrIikmJihpPXRbKytyXSksaT09PSIwIil7aWYocisxPT09ZSlyZXR1cm4hMDtpZihpPXRbKytyXSxpPT09ImIiKXtmb3IocisrO3I8ZTtyKyspaWYoaT10W3JdLGkhPT0iXyIpe2lmKGkhPT0iMCImJmkhPT0iMSIpcmV0dXJuITE7bj0hMH1yZXR1cm4gbiYmaSE9PSJfIn1pZihpPT09IngiKXtmb3IocisrO3I8ZTtyKyspaWYoaT10W3JdLGkhPT0iXyIpe2lmKCFWQWUodC5jaGFyQ29kZUF0KHIpKSlyZXR1cm4hMTtuPSEwfXJldHVybiBuJiZpIT09Il8ifWlmKGk9PT0ibyIpe2ZvcihyKys7cjxlO3IrKylpZihpPXRbcl0saSE9PSJfIil7aWYoIVVBZSh0LmNoYXJDb2RlQXQocikpKXJldHVybiExO249ITB9cmV0dXJuIG4mJmkhPT0iXyJ9fWlmKGk9PT0iXyIpcmV0dXJuITE7Zm9yKDtyPGU7cisrKWlmKGk9dFtyXSxpIT09Il8iKXtpZighSEFlKHQuY2hhckNvZGVBdChyKSkpcmV0dXJuITE7bj0hMH1yZXR1cm4hKCFufHxpPT09Il8iKX1mdW5jdGlvbiBxQWUodCl7dmFyIGU9dCxyPTEsbjtpZihlLmluZGV4T2YoIl8iKSE9PS0xJiYoZT1lLnJlcGxhY2UoL18vZywiIikpLG49ZVswXSwobj09PSItInx8bj09PSIrIikmJihuPT09Ii0iJiYocj0tMSksZT1lLnNsaWNlKDEpLG49ZVswXSksZT09PSIwIilyZXR1cm4gMDtpZihuPT09IjAiKXtpZihlWzFdPT09ImIiKXJldHVybiByKnBhcnNlSW50KGUuc2xpY2UoMiksMik7aWYoZVsxXT09PSJ4IilyZXR1cm4gcipwYXJzZUludChlLnNsaWNlKDIpLDE2KTtpZihlWzFdPT09Im8iKXJldHVybiByKnBhcnNlSW50KGUuc2xpY2UoMiksOCl9cmV0dXJuIHIqcGFyc2VJbnQoZSwxMCl9ZnVuY3Rpb24gWUFlKHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCk9PT0iW29iamVjdCBOdW1iZXJdIiYmdCUxPT09MCYmIUdpLmlzTmVnYXRpdmVaZXJvKHQpfWZ1bmN0aW9uIEtBZSh0KXtyZXR1cm4hKHQ9PT1udWxsfHwhakFlLnRlc3QodCl8fHRbdC5sZW5ndGgtMV09PT0iXyIpfWZ1bmN0aW9uIFFBZSh0KXt2YXIgZSxyO3JldHVybiBlPXQucmVwbGFjZSgvXy9nLCIiKS50b0xvd2VyQ2FzZSgpLHI9ZVswXT09PSItIj8tMToxLCIrLSIuaW5kZXhPZihlWzBdKT49MCYmKGU9ZS5zbGljZSgxKSksZT09PSIuaW5mIj9yPT09MT9OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk6TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZOmU9PT0iLm5hbiI/TmFOOnIqcGFyc2VGbG9hdChlLDEwKX1mdW5jdGlvbiBKQWUodCxlKXt2YXIgcjtpZihpc05hTih0KSlzd2l0Y2goZSl7Y2FzZSJsb3dlcmNhc2UiOnJldHVybiIubmFuIjtjYXNlInVwcGVyY2FzZSI6cmV0dXJuIi5OQU4iO2Nhc2UiY2FtZWxjYXNlIjpyZXR1cm4iLk5hTiJ9ZWxzZSBpZihOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk9PT10KXN3aXRjaChlKXtjYXNlImxvd2VyY2FzZSI6cmV0dXJuIi5pbmYiO2Nhc2UidXBwZXJjYXNlIjpyZXR1cm4iLklORiI7Y2FzZSJjYW1lbGNhc2UiOnJldHVybiIuSW5mIn1lbHNlIGlmKE51bWJlci5ORUdBVElWRV9JTkZJTklUWT09PXQpc3dpdGNoKGUpe2Nhc2UibG93ZXJjYXNlIjpyZXR1cm4iLS5pbmYiO2Nhc2UidXBwZXJjYXNlIjpyZXR1cm4iLS5JTkYiO2Nhc2UiY2FtZWxjYXNlIjpyZXR1cm4iLS5JbmYifWVsc2UgaWYoR2kuaXNOZWdhdGl2ZVplcm8odCkpcmV0dXJuIi0wLjAiO3JldHVybiByPXQudG9TdHJpbmcoMTApLFpBZS50ZXN0KHIpP3IucmVwbGFjZSgiZSIsIi5lIik6cn1mdW5jdGlvbiBlOGUodCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KT09PSJbb2JqZWN0IE51bWJlcl0iJiYodCUxIT09MHx8R2kuaXNOZWdhdGl2ZVplcm8odCkpfWZ1bmN0aW9uIG44ZSh0KXtyZXR1cm4gdD09PW51bGw/ITE6REsuZXhlYyh0KSE9PW51bGx8fExLLmV4ZWModCkhPT1udWxsfWZ1bmN0aW9uIGk4ZSh0KXt2YXIgZSxyLG4saSxhLHMsbCx1PTAsaD1udWxsLGYsZCxwO2lmKGU9REsuZXhlYyh0KSxlPT09bnVsbCYmKGU9TEsuZXhlYyh0KSksZT09PW51bGwpdGhyb3cgbmV3IEVycm9yKCJEYXRlIHJlc29sdmUgZXJyb3IiKTtpZihyPStlWzFdLG49K2VbMl0tMSxpPStlWzNdLCFlWzRdKXJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyhyLG4saSkpO2lmKGE9K2VbNF0scz0rZVs1XSxsPStlWzZdLGVbN10pe2Zvcih1PWVbN10uc2xpY2UoMCwzKTt1Lmxlbmd0aDwzOyl1Kz0iMCI7dT0rdX1yZXR1cm4gZVs5XSYmKGY9K2VbMTBdLGQ9KyhlWzExXXx8MCksaD0oZio2MCtkKSo2ZTQsZVs5XT09PSItIiYmKGg9LWgpKSxwPW5ldyBEYXRlKERhdGUuVVRDKHIsbixpLGEscyxsLHUpKSxoJiZwLnNldFRpbWUocC5nZXRUaW1lKCktaCkscH1mdW5jdGlvbiBhOGUodCl7cmV0dXJuIHQudG9JU09TdHJpbmcoKX1mdW5jdGlvbiBvOGUodCl7cmV0dXJuIHQ9PT0iPDwifHx0PT09bnVsbH1mdW5jdGlvbiBjOGUodCl7aWYodD09PW51bGwpcmV0dXJuITE7dmFyIGUscixuPTAsaT10Lmxlbmd0aCxhPXE5O2ZvcihyPTA7cjxpO3IrKylpZihlPWEuaW5kZXhPZih0LmNoYXJBdChyKSksIShlPjY0KSl7aWYoZTwwKXJldHVybiExO24rPTZ9cmV0dXJuIG4lOD09PTB9ZnVuY3Rpb24gdThlKHQpe3ZhciBlLHIsbj10LnJlcGxhY2UoL1tcclxuPV0vZywiIiksaT1uLmxlbmd0aCxhPXE5LHM9MCxsPVtdO2ZvcihlPTA7ZTxpO2UrKyllJTQ9PT0wJiZlJiYobC5wdXNoKHM+PjE2JjI1NSksbC5wdXNoKHM+PjgmMjU1KSxsLnB1c2gocyYyNTUpKSxzPXM8PDZ8YS5pbmRleE9mKG4uY2hhckF0KGUpKTtyZXR1cm4gcj1pJTQqNixyPT09MD8obC5wdXNoKHM+PjE2JjI1NSksbC5wdXNoKHM+PjgmMjU1KSxsLnB1c2gocyYyNTUpKTpyPT09MTg/KGwucHVzaChzPj4xMCYyNTUpLGwucHVzaChzPj4yJjI1NSkpOnI9PT0xMiYmbC5wdXNoKHM+PjQmMjU1KSxuZXcgVWludDhBcnJheShsKX1mdW5jdGlvbiBoOGUodCl7dmFyIGU9IiIscj0wLG4saSxhPXQubGVuZ3RoLHM9cTk7Zm9yKG49MDtuPGE7bisrKW4lMz09PTAmJm4mJihlKz1zW3I+PjE4JjYzXSxlKz1zW3I+PjEyJjYzXSxlKz1zW3I+PjYmNjNdLGUrPXNbciY2M10pLHI9KHI8PDgpK3Rbbl07cmV0dXJuIGk9YSUzLGk9PT0wPyhlKz1zW3I+PjE4JjYzXSxlKz1zW3I+PjEyJjYzXSxlKz1zW3I+PjYmNjNdLGUrPXNbciY2M10pOmk9PT0yPyhlKz1zW3I+PjEwJjYzXSxlKz1zW3I+PjQmNjNdLGUrPXNbcjw8MiY2M10sZSs9c1s2NF0pOmk9PT0xJiYoZSs9c1tyPj4yJjYzXSxlKz1zW3I8PDQmNjNdLGUrPXNbNjRdLGUrPXNbNjRdKSxlfWZ1bmN0aW9uIGY4ZSh0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpPT09IltvYmplY3QgVWludDhBcnJheV0ifWZ1bmN0aW9uIGc4ZSh0KXtpZih0PT09bnVsbClyZXR1cm4hMDt2YXIgZT1bXSxyLG4saSxhLHMsbD10O2ZvcihyPTAsbj1sLmxlbmd0aDtyPG47cis9MSl7aWYoaT1sW3JdLHM9ITEsbThlLmNhbGwoaSkhPT0iW29iamVjdCBPYmplY3RdIilyZXR1cm4hMTtmb3IoYSBpbiBpKWlmKHA4ZS5jYWxsKGksYSkpaWYoIXMpcz0hMDtlbHNlIHJldHVybiExO2lmKCFzKXJldHVybiExO2lmKGUuaW5kZXhPZihhKT09PS0xKWUucHVzaChhKTtlbHNlIHJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIHk4ZSh0KXtyZXR1cm4gdCE9PW51bGw/dDpbXX1mdW5jdGlvbiBiOGUodCl7aWYodD09PW51bGwpcmV0dXJuITA7dmFyIGUscixuLGksYSxzPXQ7Zm9yKGE9bmV3IEFycmF5KHMubGVuZ3RoKSxlPTAscj1zLmxlbmd0aDtlPHI7ZSs9MSl7aWYobj1zW2VdLHg4ZS5jYWxsKG4pIT09IltvYmplY3QgT2JqZWN0XSJ8fChpPU9iamVjdC5rZXlzKG4pLGkubGVuZ3RoIT09MSkpcmV0dXJuITE7YVtlXT1baVswXSxuW2lbMF1dXX1yZXR1cm4hMH1mdW5jdGlvbiBUOGUodCl7aWYodD09PW51bGwpcmV0dXJuW107dmFyIGUscixuLGksYSxzPXQ7Zm9yKGE9bmV3IEFycmF5KHMubGVuZ3RoKSxlPTAscj1zLmxlbmd0aDtlPHI7ZSs9MSluPXNbZV0saT1PYmplY3Qua2V5cyhuKSxhW2VdPVtpWzBdLG5baVswXV1dO3JldHVybiBhfWZ1bmN0aW9uIEU4ZSh0KXtpZih0PT09bnVsbClyZXR1cm4hMDt2YXIgZSxyPXQ7Zm9yKGUgaW4gcilpZihrOGUuY2FsbChyLGUpJiZyW2VdIT09bnVsbClyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBTOGUodCl7cmV0dXJuIHQhPT1udWxsP3Q6e319ZnVuY3Rpb24gZEsodCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiB2Yyh0KXtyZXR1cm4gdD09PTEwfHx0PT09MTN9ZnVuY3Rpb24gR2QodCl7cmV0dXJuIHQ9PT05fHx0PT09MzJ9ZnVuY3Rpb24gT3ModCl7cmV0dXJuIHQ9PT05fHx0PT09MzJ8fHQ9PT0xMHx8dD09PTEzfWZ1bmN0aW9uIHltKHQpe3JldHVybiB0PT09NDR8fHQ9PT05MXx8dD09PTkzfHx0PT09MTIzfHx0PT09MTI1fWZ1bmN0aW9uIFI4ZSh0KXt2YXIgZTtyZXR1cm4gNDg8PXQmJnQ8PTU3P3QtNDg6KGU9dHwzMiw5Nzw9ZSYmZTw9MTAyP2UtOTcrMTA6LTEpfWZ1bmN0aW9uIE44ZSh0KXtyZXR1cm4gdD09PTEyMD8yOnQ9PT0xMTc/NDp0PT09ODU/ODowfWZ1bmN0aW9uIE04ZSh0KXtyZXR1cm4gNDg8PXQmJnQ8PTU3P3QtNDg6LTF9ZnVuY3Rpb24gcEsodCl7cmV0dXJuIHQ9PT00OD8iXDAiOnQ9PT05Nz8iXHgwNyI6dD09PTk4PyJcYiI6dD09PTExNnx8dD09PTk/IgkiOnQ9PT0xMTA/YApgOnQ9PT0xMTg/Ilx2Ijp0PT09MTAyPyJcZiI6dD09PTExND8iXHIiOnQ9PT0xMDE/Ilx4MUIiOnQ9PT0zMj8iICI6dD09PTM0PyciJzp0PT09NDc/Ii8iOnQ9PT05Mj8iXFwiOnQ9PT03OD8iXHg4NSI6dD09PTk1PyJceEEwIjp0PT09NzY/Ilx1MjAyOCI6dD09PTgwPyJcdTIwMjkiOiIifWZ1bmN0aW9uIEk4ZSh0KXtyZXR1cm4gdDw9NjU1MzU/U3RyaW5nLmZyb21DaGFyQ29kZSh0KTpTdHJpbmcuZnJvbUNoYXJDb2RlKCh0LTY1NTM2Pj4xMCkrNTUyOTYsKHQtNjU1MzYmMTAyMykrNTYzMjApfWZ1bmN0aW9uIE84ZSh0LGUpe3RoaXMuaW5wdXQ9dCx0aGlzLmZpbGVuYW1lPWUuZmlsZW5hbWV8fG51bGwsdGhpcy5zY2hlbWE9ZS5zY2hlbWF8fFJLLHRoaXMub25XYXJuaW5nPWUub25XYXJuaW5nfHxudWxsLHRoaXMubGVnYWN5PWUubGVnYWN5fHwhMSx0aGlzLmpzb249ZS5qc29ufHwhMSx0aGlzLmxpc3RlbmVyPWUubGlzdGVuZXJ8fG51bGwsdGhpcy5pbXBsaWNpdFR5cGVzPXRoaXMuc2NoZW1hLmNvbXBpbGVkSW1wbGljaXQsdGhpcy50eXBlTWFwPXRoaXMuc2NoZW1hLmNvbXBpbGVkVHlwZU1hcCx0aGlzLmxlbmd0aD10Lmxlbmd0aCx0aGlzLnBvc2l0aW9uPTAsdGhpcy5saW5lPTAsdGhpcy5saW5lU3RhcnQ9MCx0aGlzLmxpbmVJbmRlbnQ9MCx0aGlzLmZpcnN0VGFiSW5MaW5lPS0xLHRoaXMuZG9jdW1lbnRzPVtdfWZ1bmN0aW9uIEZLKHQsZSl7dmFyIHI9e25hbWU6dC5maWxlbmFtZSxidWZmZXI6dC5pbnB1dC5zbGljZSgwLC0xKSxwb3NpdGlvbjp0LnBvc2l0aW9uLGxpbmU6dC5saW5lLGNvbHVtbjp0LnBvc2l0aW9uLXQubGluZVN0YXJ0fTtyZXR1cm4gci5zbmlwcGV0PWtBZShyKSxuZXcgSXMoZSxyKX1mdW5jdGlvbiBRdCh0LGUpe3Rocm93IEZLKHQsZSl9ZnVuY3Rpb24gTlQodCxlKXt0Lm9uV2FybmluZyYmdC5vbldhcm5pbmcuY2FsbChudWxsLEZLKHQsZSkpfWZ1bmN0aW9uIHFoKHQsZSxyLG4pe3ZhciBpLGEscyxsO2lmKGU8cil7aWYobD10LmlucHV0LnNsaWNlKGUsciksbilmb3IoaT0wLGE9bC5sZW5ndGg7aTxhO2krPTEpcz1sLmNoYXJDb2RlQXQoaSkscz09PTl8fDMyPD1zJiZzPD0xMTE0MTExfHxRdCh0LCJleHBlY3RlZCB2YWxpZCBKU09OIGNoYXJhY3RlciIpO2Vsc2UgXzhlLnRlc3QobCkmJlF0KHQsInRoZSBzdHJlYW0gY29udGFpbnMgbm9uLXByaW50YWJsZSBjaGFyYWN0ZXJzIik7dC5yZXN1bHQrPWx9fWZ1bmN0aW9uIGdLKHQsZSxyLG4pe3ZhciBpLGEscyxsO2ZvcihHaS5pc09iamVjdChyKXx8UXQodCwiY2Fubm90IG1lcmdlIG1hcHBpbmdzOyB0aGUgcHJvdmlkZWQgc291cmNlIG9iamVjdCBpcyB1bmFjY2VwdGFibGUiKSxpPU9iamVjdC5rZXlzKHIpLHM9MCxsPWkubGVuZ3RoO3M8bDtzKz0xKWE9aVtzXSxZaC5jYWxsKGUsYSl8fChlW2FdPXJbYV0sblthXT0hMCl9ZnVuY3Rpb24gdm0odCxlLHIsbixpLGEscyxsLHUpe3ZhciBoLGY7aWYoQXJyYXkuaXNBcnJheShpKSlmb3IoaT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChpKSxoPTAsZj1pLmxlbmd0aDtoPGY7aCs9MSlBcnJheS5pc0FycmF5KGlbaF0pJiZRdCh0LCJuZXN0ZWQgYXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkIGluc2lkZSBrZXlzIiksdHlwZW9mIGk9PSJvYmplY3QiJiZkSyhpW2hdKT09PSJbb2JqZWN0IE9iamVjdF0iJiYoaVtoXT0iW29iamVjdCBPYmplY3RdIik7aWYodHlwZW9mIGk9PSJvYmplY3QiJiZkSyhpKT09PSJbb2JqZWN0IE9iamVjdF0iJiYoaT0iW29iamVjdCBPYmplY3RdIiksaT1TdHJpbmcoaSksZT09PW51bGwmJihlPXt9KSxuPT09InRhZzp5YW1sLm9yZywyMDAyOm1lcmdlIilpZihBcnJheS5pc0FycmF5KGEpKWZvcihoPTAsZj1hLmxlbmd0aDtoPGY7aCs9MSlnSyh0LGUsYVtoXSxyKTtlbHNlIGdLKHQsZSxhLHIpO2Vsc2UhdC5qc29uJiYhWWguY2FsbChyLGkpJiZZaC5jYWxsKGUsaSkmJih0LmxpbmU9c3x8dC5saW5lLHQubGluZVN0YXJ0PWx8fHQubGluZVN0YXJ0LHQucG9zaXRpb249dXx8dC5wb3NpdGlvbixRdCh0LCJkdXBsaWNhdGVkIG1hcHBpbmcga2V5IikpLGk9PT0iX19wcm90b19fIj9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSxpLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTphfSk6ZVtpXT1hLGRlbGV0ZSByW2ldO3JldHVybiBlfWZ1bmN0aW9uIFk5KHQpe3ZhciBlO2U9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pLGU9PT0xMD90LnBvc2l0aW9uKys6ZT09PTEzPyh0LnBvc2l0aW9uKyssdC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pPT09MTAmJnQucG9zaXRpb24rKyk6UXQodCwiYSBsaW5lIGJyZWFrIGlzIGV4cGVjdGVkIiksdC5saW5lKz0xLHQubGluZVN0YXJ0PXQucG9zaXRpb24sdC5maXJzdFRhYkluTGluZT0tMX1mdW5jdGlvbiBfaSh0LGUscil7Zm9yKHZhciBuPTAsaT10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbik7aSE9PTA7KXtmb3IoO0dkKGkpOylpPT09OSYmdC5maXJzdFRhYkluTGluZT09PS0xJiYodC5maXJzdFRhYkluTGluZT10LnBvc2l0aW9uKSxpPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pO2lmKGUmJmk9PT0zNSlkbyBpPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pO3doaWxlKGkhPT0xMCYmaSE9PTEzJiZpIT09MCk7aWYodmMoaSkpZm9yKFk5KHQpLGk9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pLG4rKyx0LmxpbmVJbmRlbnQ9MDtpPT09MzI7KXQubGluZUluZGVudCsrLGk9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbik7ZWxzZSBicmVha31yZXR1cm4gciE9PS0xJiZuIT09MCYmdC5saW5lSW5kZW50PHImJk5UKHQsImRlZmljaWVudCBpbmRlbnRhdGlvbiIpLG59ZnVuY3Rpb24gT1QodCl7dmFyIGU9dC5wb3NpdGlvbixyO3JldHVybiByPXQuaW5wdXQuY2hhckNvZGVBdChlKSwhISgocj09PTQ1fHxyPT09NDYpJiZyPT09dC5pbnB1dC5jaGFyQ29kZUF0KGUrMSkmJnI9PT10LmlucHV0LmNoYXJDb2RlQXQoZSsyKSYmKGUrPTMscj10LmlucHV0LmNoYXJDb2RlQXQoZSkscj09PTB8fE9zKHIpKSl9ZnVuY3Rpb24gWDkodCxlKXtlPT09MT90LnJlc3VsdCs9IiAiOmU+MSYmKHQucmVzdWx0Kz1HaS5yZXBlYXQoYApgLGUtMSkpfWZ1bmN0aW9uIFA4ZSh0LGUscil7dmFyIG4saSxhLHMsbCx1LGgsZixkPXQua2luZCxwPXQucmVzdWx0LG07aWYobT10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbiksT3MobSl8fHltKG0pfHxtPT09MzV8fG09PT0zOHx8bT09PTQyfHxtPT09MzN8fG09PT0xMjR8fG09PT02Mnx8bT09PTM5fHxtPT09MzR8fG09PT0zN3x8bT09PTY0fHxtPT09OTZ8fChtPT09NjN8fG09PT00NSkmJihpPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKzEpLE9zKGkpfHxyJiZ5bShpKSkpcmV0dXJuITE7Zm9yKHQua2luZD0ic2NhbGFyIix0LnJlc3VsdD0iIixhPXM9dC5wb3NpdGlvbixsPSExO20hPT0wOyl7aWYobT09PTU4KXtpZihpPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKzEpLE9zKGkpfHxyJiZ5bShpKSlicmVha31lbHNlIGlmKG09PT0zNSl7aWYobj10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbi0xKSxPcyhuKSlicmVha31lbHNle2lmKHQucG9zaXRpb249PT10LmxpbmVTdGFydCYmT1QodCl8fHImJnltKG0pKWJyZWFrO2lmKHZjKG0pKWlmKHU9dC5saW5lLGg9dC5saW5lU3RhcnQsZj10LmxpbmVJbmRlbnQsX2kodCwhMSwtMSksdC5saW5lSW5kZW50Pj1lKXtsPSEwLG09dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pO2NvbnRpbnVlfWVsc2V7dC5wb3NpdGlvbj1zLHQubGluZT11LHQubGluZVN0YXJ0PWgsdC5saW5lSW5kZW50PWY7YnJlYWt9fWwmJihxaCh0LGEscywhMSksWDkodCx0LmxpbmUtdSksYT1zPXQucG9zaXRpb24sbD0hMSksR2QobSl8fChzPXQucG9zaXRpb24rMSksbT10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKX1yZXR1cm4gcWgodCxhLHMsITEpLHQucmVzdWx0PyEwOih0LmtpbmQ9ZCx0LnJlc3VsdD1wLCExKX1mdW5jdGlvbiBCOGUodCxlKXt2YXIgcixuLGk7aWYocj10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbiksciE9PTM5KXJldHVybiExO2Zvcih0LmtpbmQ9InNjYWxhciIsdC5yZXN1bHQ9IiIsdC5wb3NpdGlvbisrLG49aT10LnBvc2l0aW9uOyhyPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSkhPT0wOylpZihyPT09MzkpaWYocWgodCxuLHQucG9zaXRpb24sITApLHI9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbikscj09PTM5KW49dC5wb3NpdGlvbix0LnBvc2l0aW9uKyssaT10LnBvc2l0aW9uO2Vsc2UgcmV0dXJuITA7ZWxzZSB2YyhyKT8ocWgodCxuLGksITApLFg5KHQsX2kodCwhMSxlKSksbj1pPXQucG9zaXRpb24pOnQucG9zaXRpb249PT10LmxpbmVTdGFydCYmT1QodCk/UXQodCwidW5leHBlY3RlZCBlbmQgb2YgdGhlIGRvY3VtZW50IHdpdGhpbiBhIHNpbmdsZSBxdW90ZWQgc2NhbGFyIik6KHQucG9zaXRpb24rKyxpPXQucG9zaXRpb24pO1F0KHQsInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgc2luZ2xlIHF1b3RlZCBzY2FsYXIiKX1mdW5jdGlvbiBGOGUodCxlKXt2YXIgcixuLGksYSxzLGw7aWYobD10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbiksbCE9PTM0KXJldHVybiExO2Zvcih0LmtpbmQ9InNjYWxhciIsdC5yZXN1bHQ9IiIsdC5wb3NpdGlvbisrLHI9bj10LnBvc2l0aW9uOyhsPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSkhPT0wOyl7aWYobD09PTM0KXJldHVybiBxaCh0LHIsdC5wb3NpdGlvbiwhMCksdC5wb3NpdGlvbisrLCEwO2lmKGw9PT05Mil7aWYocWgodCxyLHQucG9zaXRpb24sITApLGw9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbiksdmMobCkpX2kodCwhMSxlKTtlbHNlIGlmKGw8MjU2JiZQS1tsXSl0LnJlc3VsdCs9QktbbF0sdC5wb3NpdGlvbisrO2Vsc2UgaWYoKHM9TjhlKGwpKT4wKXtmb3IoaT1zLGE9MDtpPjA7aS0tKWw9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbiksKHM9UjhlKGwpKT49MD9hPShhPDw0KStzOlF0KHQsImV4cGVjdGVkIGhleGFkZWNpbWFsIGNoYXJhY3RlciIpO3QucmVzdWx0Kz1JOGUoYSksdC5wb3NpdGlvbisrfWVsc2UgUXQodCwidW5rbm93biBlc2NhcGUgc2VxdWVuY2UiKTtyPW49dC5wb3NpdGlvbn1lbHNlIHZjKGwpPyhxaCh0LHIsbiwhMCksWDkodCxfaSh0LCExLGUpKSxyPW49dC5wb3NpdGlvbik6dC5wb3NpdGlvbj09PXQubGluZVN0YXJ0JiZPVCh0KT9RdCh0LCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgZG9jdW1lbnQgd2l0aGluIGEgZG91YmxlIHF1b3RlZCBzY2FsYXIiKToodC5wb3NpdGlvbisrLG49dC5wb3NpdGlvbil9UXQodCwidW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSBkb3VibGUgcXVvdGVkIHNjYWxhciIpfWZ1bmN0aW9uICQ4ZSh0LGUpe3ZhciByPSEwLG4saSxhLHM9dC50YWcsbCx1PXQuYW5jaG9yLGgsZixkLHAsbSxnPU9iamVjdC5jcmVhdGUobnVsbCkseSx2LHgsYjtpZihiPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSxiPT09OTEpZj05MyxtPSExLGw9W107ZWxzZSBpZihiPT09MTIzKWY9MTI1LG09ITAsbD17fTtlbHNlIHJldHVybiExO2Zvcih0LmFuY2hvciE9PW51bGwmJih0LmFuY2hvck1hcFt0LmFuY2hvcl09bCksYj10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKTtiIT09MDspe2lmKF9pKHQsITAsZSksYj10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbiksYj09PWYpcmV0dXJuIHQucG9zaXRpb24rKyx0LnRhZz1zLHQuYW5jaG9yPXUsdC5raW5kPW0/Im1hcHBpbmciOiJzZXF1ZW5jZSIsdC5yZXN1bHQ9bCwhMDtyP2I9PT00NCYmUXQodCwiZXhwZWN0ZWQgdGhlIG5vZGUgY29udGVudCwgYnV0IGZvdW5kICcsJyIpOlF0KHQsIm1pc3NlZCBjb21tYSBiZXR3ZWVuIGZsb3cgY29sbGVjdGlvbiBlbnRyaWVzIiksdj15PXg9bnVsbCxkPXA9ITEsYj09PTYzJiYoaD10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbisxKSxPcyhoKSYmKGQ9cD0hMCx0LnBvc2l0aW9uKyssX2kodCwhMCxlKSkpLG49dC5saW5lLGk9dC5saW5lU3RhcnQsYT10LnBvc2l0aW9uLHhtKHQsZSxMVCwhMSwhMCksdj10LnRhZyx5PXQucmVzdWx0LF9pKHQsITAsZSksYj10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbiksKHB8fHQubGluZT09PW4pJiZiPT09NTgmJihkPSEwLGI9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbiksX2kodCwhMCxlKSx4bSh0LGUsTFQsITEsITApLHg9dC5yZXN1bHQpLG0/dm0odCxsLGcsdix5LHgsbixpLGEpOmQ/bC5wdXNoKHZtKHQsbnVsbCxnLHYseSx4LG4saSxhKSk6bC5wdXNoKHkpLF9pKHQsITAsZSksYj10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbiksYj09PTQ0PyhyPSEwLGI9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbikpOnI9ITF9UXQodCwidW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSBmbG93IGNvbGxlY3Rpb24iKX1mdW5jdGlvbiB6OGUodCxlKXt2YXIgcixuLGk9ejksYT0hMSxzPSExLGw9ZSx1PTAsaD0hMSxmLGQ7aWYoZD10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbiksZD09PTEyNCluPSExO2Vsc2UgaWYoZD09PTYyKW49ITA7ZWxzZSByZXR1cm4hMTtmb3IodC5raW5kPSJzY2FsYXIiLHQucmVzdWx0PSIiO2QhPT0wOylpZihkPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pLGQ9PT00M3x8ZD09PTQ1KXo5PT09aT9pPWQ9PT00Mz9mSzpBOGU6UXQodCwicmVwZWF0IG9mIGEgY2hvbXBpbmcgbW9kZSBpZGVudGlmaWVyIik7ZWxzZSBpZigoZj1NOGUoZCkpPj0wKWY9PT0wP1F0KHQsImJhZCBleHBsaWNpdCBpbmRlbnRhdGlvbiB3aWR0aCBvZiBhIGJsb2NrIHNjYWxhcjsgaXQgY2Fubm90IGJlIGxlc3MgdGhhbiBvbmUiKTpzP1F0KHQsInJlcGVhdCBvZiBhbiBpbmRlbnRhdGlvbiB3aWR0aCBpZGVudGlmaWVyIik6KGw9ZStmLTEscz0hMCk7ZWxzZSBicmVhaztpZihHZChkKSl7ZG8gZD10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKTt3aGlsZShHZChkKSk7aWYoZD09PTM1KWRvIGQ9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbik7d2hpbGUoIXZjKGQpJiZkIT09MCl9Zm9yKDtkIT09MDspe2ZvcihZOSh0KSx0LmxpbmVJbmRlbnQ9MCxkPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKTsoIXN8fHQubGluZUluZGVudDxsKSYmZD09PTMyOyl0LmxpbmVJbmRlbnQrKyxkPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pO2lmKCFzJiZ0LmxpbmVJbmRlbnQ+bCYmKGw9dC5saW5lSW5kZW50KSx2YyhkKSl7dSsrO2NvbnRpbnVlfWlmKHQubGluZUluZGVudDxsKXtpPT09Zks/dC5yZXN1bHQrPUdpLnJlcGVhdChgCmAsYT8xK3U6dSk6aT09PXo5JiZhJiYodC5yZXN1bHQrPWAKYCk7YnJlYWt9Zm9yKG4/R2QoZCk/KGg9ITAsdC5yZXN1bHQrPUdpLnJlcGVhdChgCmAsYT8xK3U6dSkpOmg/KGg9ITEsdC5yZXN1bHQrPUdpLnJlcGVhdChgCmAsdSsxKSk6dT09PTA/YSYmKHQucmVzdWx0Kz0iICIpOnQucmVzdWx0Kz1HaS5yZXBlYXQoYApgLHUpOnQucmVzdWx0Kz1HaS5yZXBlYXQoYApgLGE/MSt1OnUpLGE9ITAscz0hMCx1PTAscj10LnBvc2l0aW9uOyF2YyhkKSYmZCE9PTA7KWQ9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbik7cWgodCxyLHQucG9zaXRpb24sITEpfXJldHVybiEwfWZ1bmN0aW9uIHlLKHQsZSl7dmFyIHIsbj10LnRhZyxpPXQuYW5jaG9yLGE9W10scyxsPSExLHU7aWYodC5maXJzdFRhYkluTGluZSE9PS0xKXJldHVybiExO2Zvcih0LmFuY2hvciE9PW51bGwmJih0LmFuY2hvck1hcFt0LmFuY2hvcl09YSksdT10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbik7dSE9PTAmJih0LmZpcnN0VGFiSW5MaW5lIT09LTEmJih0LnBvc2l0aW9uPXQuZmlyc3RUYWJJbkxpbmUsUXQodCwidGFiIGNoYXJhY3RlcnMgbXVzdCBub3QgYmUgdXNlZCBpbiBpbmRlbnRhdGlvbiIpKSwhKHUhPT00NXx8KHM9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24rMSksIU9zKHMpKSkpOyl7aWYobD0hMCx0LnBvc2l0aW9uKyssX2kodCwhMCwtMSkmJnQubGluZUluZGVudDw9ZSl7YS5wdXNoKG51bGwpLHU9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pO2NvbnRpbnVlfWlmKHI9dC5saW5lLHhtKHQsZSxNSywhMSwhMCksYS5wdXNoKHQucmVzdWx0KSxfaSh0LCEwLC0xKSx1PXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSwodC5saW5lPT09cnx8dC5saW5lSW5kZW50PmUpJiZ1IT09MClRdCh0LCJiYWQgaW5kZW50YXRpb24gb2YgYSBzZXF1ZW5jZSBlbnRyeSIpO2Vsc2UgaWYodC5saW5lSW5kZW50PGUpYnJlYWt9cmV0dXJuIGw/KHQudGFnPW4sdC5hbmNob3I9aSx0LmtpbmQ9InNlcXVlbmNlIix0LnJlc3VsdD1hLCEwKTohMX1mdW5jdGlvbiBHOGUodCxlLHIpe3ZhciBuLGksYSxzLGwsdSxoPXQudGFnLGY9dC5hbmNob3IsZD17fSxwPU9iamVjdC5jcmVhdGUobnVsbCksbT1udWxsLGc9bnVsbCx5PW51bGwsdj0hMSx4PSExLGI7aWYodC5maXJzdFRhYkluTGluZSE9PS0xKXJldHVybiExO2Zvcih0LmFuY2hvciE9PW51bGwmJih0LmFuY2hvck1hcFt0LmFuY2hvcl09ZCksYj10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbik7YiE9PTA7KXtpZighdiYmdC5maXJzdFRhYkluTGluZSE9PS0xJiYodC5wb3NpdGlvbj10LmZpcnN0VGFiSW5MaW5lLFF0KHQsInRhYiBjaGFyYWN0ZXJzIG11c3Qgbm90IGJlIHVzZWQgaW4gaW5kZW50YXRpb24iKSksbj10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbisxKSxhPXQubGluZSwoYj09PTYzfHxiPT09NTgpJiZPcyhuKSliPT09NjM/KHYmJih2bSh0LGQscCxtLGcsbnVsbCxzLGwsdSksbT1nPXk9bnVsbCkseD0hMCx2PSEwLGk9ITApOnY/KHY9ITEsaT0hMCk6UXQodCwiaW5jb21wbGV0ZSBleHBsaWNpdCBtYXBwaW5nIHBhaXI7IGEga2V5IG5vZGUgaXMgbWlzc2VkOyBvciBmb2xsb3dlZCBieSBhIG5vbi10YWJ1bGF0ZWQgZW1wdHkgbGluZSIpLHQucG9zaXRpb24rPTEsYj1uO2Vsc2V7aWYocz10LmxpbmUsbD10LmxpbmVTdGFydCx1PXQucG9zaXRpb24sIXhtKHQscixOSywhMSwhMCkpYnJlYWs7aWYodC5saW5lPT09YSl7Zm9yKGI9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pO0dkKGIpOyliPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pO2lmKGI9PT01OCliPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pLE9zKGIpfHxRdCh0LCJhIHdoaXRlc3BhY2UgY2hhcmFjdGVyIGlzIGV4cGVjdGVkIGFmdGVyIHRoZSBrZXktdmFsdWUgc2VwYXJhdG9yIHdpdGhpbiBhIGJsb2NrIG1hcHBpbmciKSx2JiYodm0odCxkLHAsbSxnLG51bGwscyxsLHUpLG09Zz15PW51bGwpLHg9ITAsdj0hMSxpPSExLG09dC50YWcsZz10LnJlc3VsdDtlbHNlIGlmKHgpUXQodCwiY2FuIG5vdCByZWFkIGFuIGltcGxpY2l0IG1hcHBpbmcgcGFpcjsgYSBjb2xvbiBpcyBtaXNzZWQiKTtlbHNlIHJldHVybiB0LnRhZz1oLHQuYW5jaG9yPWYsITB9ZWxzZSBpZih4KVF0KHQsImNhbiBub3QgcmVhZCBhIGJsb2NrIG1hcHBpbmcgZW50cnk7IGEgbXVsdGlsaW5lIGtleSBtYXkgbm90IGJlIGFuIGltcGxpY2l0IGtleSIpO2Vsc2UgcmV0dXJuIHQudGFnPWgsdC5hbmNob3I9ZiwhMH1pZigodC5saW5lPT09YXx8dC5saW5lSW5kZW50PmUpJiYodiYmKHM9dC5saW5lLGw9dC5saW5lU3RhcnQsdT10LnBvc2l0aW9uKSx4bSh0LGUsUlQsITAsaSkmJih2P2c9dC5yZXN1bHQ6eT10LnJlc3VsdCksdnx8KHZtKHQsZCxwLG0sZyx5LHMsbCx1KSxtPWc9eT1udWxsKSxfaSh0LCEwLC0xKSxiPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSksKHQubGluZT09PWF8fHQubGluZUluZGVudD5lKSYmYiE9PTApUXQodCwiYmFkIGluZGVudGF0aW9uIG9mIGEgbWFwcGluZyBlbnRyeSIpO2Vsc2UgaWYodC5saW5lSW5kZW50PGUpYnJlYWt9cmV0dXJuIHYmJnZtKHQsZCxwLG0sZyxudWxsLHMsbCx1KSx4JiYodC50YWc9aCx0LmFuY2hvcj1mLHQua2luZD0ibWFwcGluZyIsdC5yZXN1bHQ9ZCkseH1mdW5jdGlvbiBWOGUodCl7dmFyIGUscj0hMSxuPSExLGksYSxzO2lmKHM9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pLHMhPT0zMylyZXR1cm4hMTtpZih0LnRhZyE9PW51bGwmJlF0KHQsImR1cGxpY2F0aW9uIG9mIGEgdGFnIHByb3BlcnR5Iikscz10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKSxzPT09NjA/KHI9ITAscz10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKSk6cz09PTMzPyhuPSEwLGk9IiEhIixzPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pKTppPSIhIixlPXQucG9zaXRpb24scil7ZG8gcz10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKTt3aGlsZShzIT09MCYmcyE9PTYyKTt0LnBvc2l0aW9uPHQubGVuZ3RoPyhhPXQuaW5wdXQuc2xpY2UoZSx0LnBvc2l0aW9uKSxzPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pKTpRdCh0LCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIHZlcmJhdGltIHRhZyIpfWVsc2V7Zm9yKDtzIT09MCYmIU9zKHMpOylzPT09MzMmJihuP1F0KHQsInRhZyBzdWZmaXggY2Fubm90IGNvbnRhaW4gZXhjbGFtYXRpb24gbWFya3MiKTooaT10LmlucHV0LnNsaWNlKGUtMSx0LnBvc2l0aW9uKzEpLElLLnRlc3QoaSl8fFF0KHQsIm5hbWVkIHRhZyBoYW5kbGUgY2Fubm90IGNvbnRhaW4gc3VjaCBjaGFyYWN0ZXJzIiksbj0hMCxlPXQucG9zaXRpb24rMSkpLHM9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbik7YT10LmlucHV0LnNsaWNlKGUsdC5wb3NpdGlvbiksTDhlLnRlc3QoYSkmJlF0KHQsInRhZyBzdWZmaXggY2Fubm90IGNvbnRhaW4gZmxvdyBpbmRpY2F0b3IgY2hhcmFjdGVycyIpfWEmJiFPSy50ZXN0KGEpJiZRdCh0LCJ0YWcgbmFtZSBjYW5ub3QgY29udGFpbiBzdWNoIGNoYXJhY3RlcnM6ICIrYSk7dHJ5e2E9ZGVjb2RlVVJJQ29tcG9uZW50KGEpfWNhdGNoe1F0KHQsInRhZyBuYW1lIGlzIG1hbGZvcm1lZDogIithKX1yZXR1cm4gcj90LnRhZz1hOlloLmNhbGwodC50YWdNYXAsaSk/dC50YWc9dC50YWdNYXBbaV0rYTppPT09IiEiP3QudGFnPSIhIithOmk9PT0iISEiP3QudGFnPSJ0YWc6eWFtbC5vcmcsMjAwMjoiK2E6UXQodCwndW5kZWNsYXJlZCB0YWcgaGFuZGxlICInK2krJyInKSwhMH1mdW5jdGlvbiBVOGUodCl7dmFyIGUscjtpZihyPXQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKSxyIT09MzgpcmV0dXJuITE7Zm9yKHQuYW5jaG9yIT09bnVsbCYmUXQodCwiZHVwbGljYXRpb24gb2YgYW4gYW5jaG9yIHByb3BlcnR5Iikscj10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKSxlPXQucG9zaXRpb247ciE9PTAmJiFPcyhyKSYmIXltKHIpOylyPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pO3JldHVybiB0LnBvc2l0aW9uPT09ZSYmUXQodCwibmFtZSBvZiBhbiBhbmNob3Igbm9kZSBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGNoYXJhY3RlciIpLHQuYW5jaG9yPXQuaW5wdXQuc2xpY2UoZSx0LnBvc2l0aW9uKSwhMH1mdW5jdGlvbiBIOGUodCl7dmFyIGUscixuO2lmKG49dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pLG4hPT00MilyZXR1cm4hMTtmb3Iobj10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKSxlPXQucG9zaXRpb247biE9PTAmJiFPcyhuKSYmIXltKG4pOyluPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pO3JldHVybiB0LnBvc2l0aW9uPT09ZSYmUXQodCwibmFtZSBvZiBhbiBhbGlhcyBub2RlIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyIikscj10LmlucHV0LnNsaWNlKGUsdC5wb3NpdGlvbiksWWguY2FsbCh0LmFuY2hvck1hcCxyKXx8UXQodCwndW5pZGVudGlmaWVkIGFsaWFzICInK3IrJyInKSx0LnJlc3VsdD10LmFuY2hvck1hcFtyXSxfaSh0LCEwLC0xKSwhMH1mdW5jdGlvbiB4bSh0LGUscixuLGkpe3ZhciBhLHMsbCx1PTEsaD0hMSxmPSExLGQscCxtLGcseSx2O2lmKHQubGlzdGVuZXIhPT1udWxsJiZ0Lmxpc3RlbmVyKCJvcGVuIix0KSx0LnRhZz1udWxsLHQuYW5jaG9yPW51bGwsdC5raW5kPW51bGwsdC5yZXN1bHQ9bnVsbCxhPXM9bD1SVD09PXJ8fE1LPT09cixuJiZfaSh0LCEwLC0xKSYmKGg9ITAsdC5saW5lSW5kZW50PmU/dT0xOnQubGluZUluZGVudD09PWU/dT0wOnQubGluZUluZGVudDxlJiYodT0tMSkpLHU9PT0xKWZvcig7VjhlKHQpfHxVOGUodCk7KV9pKHQsITAsLTEpPyhoPSEwLGw9YSx0LmxpbmVJbmRlbnQ+ZT91PTE6dC5saW5lSW5kZW50PT09ZT91PTA6dC5saW5lSW5kZW50PGUmJih1PS0xKSk6bD0hMTtpZihsJiYobD1ofHxpKSwodT09PTF8fFJUPT09cikmJihMVD09PXJ8fE5LPT09cj95PWU6eT1lKzEsdj10LnBvc2l0aW9uLXQubGluZVN0YXJ0LHU9PT0xP2wmJih5Syh0LHYpfHxHOGUodCx2LHkpKXx8JDhlKHQseSk/Zj0hMDoocyYmejhlKHQseSl8fEI4ZSh0LHkpfHxGOGUodCx5KT9mPSEwOkg4ZSh0KT8oZj0hMCwodC50YWchPT1udWxsfHx0LmFuY2hvciE9PW51bGwpJiZRdCh0LCJhbGlhcyBub2RlIHNob3VsZCBub3QgaGF2ZSBhbnkgcHJvcGVydGllcyIpKTpQOGUodCx5LExUPT09cikmJihmPSEwLHQudGFnPT09bnVsbCYmKHQudGFnPSI/IikpLHQuYW5jaG9yIT09bnVsbCYmKHQuYW5jaG9yTWFwW3QuYW5jaG9yXT10LnJlc3VsdCkpOnU9PT0wJiYoZj1sJiZ5Syh0LHYpKSksdC50YWc9PT1udWxsKXQuYW5jaG9yIT09bnVsbCYmKHQuYW5jaG9yTWFwW3QuYW5jaG9yXT10LnJlc3VsdCk7ZWxzZSBpZih0LnRhZz09PSI/Iil7Zm9yKHQucmVzdWx0IT09bnVsbCYmdC5raW5kIT09InNjYWxhciImJlF0KHQsJ3VuYWNjZXB0YWJsZSBub2RlIGtpbmQgZm9yICE8Pz4gdGFnOyBpdCBzaG91bGQgYmUgInNjYWxhciIsIG5vdCAiJyt0LmtpbmQrJyInKSxkPTAscD10LmltcGxpY2l0VHlwZXMubGVuZ3RoO2Q8cDtkKz0xKWlmKGc9dC5pbXBsaWNpdFR5cGVzW2RdLGcucmVzb2x2ZSh0LnJlc3VsdCkpe3QucmVzdWx0PWcuY29uc3RydWN0KHQucmVzdWx0KSx0LnRhZz1nLnRhZyx0LmFuY2hvciE9PW51bGwmJih0LmFuY2hvck1hcFt0LmFuY2hvcl09dC5yZXN1bHQpO2JyZWFrfX1lbHNlIGlmKHQudGFnIT09IiEiKXtpZihZaC5jYWxsKHQudHlwZU1hcFt0LmtpbmR8fCJmYWxsYmFjayJdLHQudGFnKSlnPXQudHlwZU1hcFt0LmtpbmR8fCJmYWxsYmFjayJdW3QudGFnXTtlbHNlIGZvcihnPW51bGwsbT10LnR5cGVNYXAubXVsdGlbdC5raW5kfHwiZmFsbGJhY2siXSxkPTAscD1tLmxlbmd0aDtkPHA7ZCs9MSlpZih0LnRhZy5zbGljZSgwLG1bZF0udGFnLmxlbmd0aCk9PT1tW2RdLnRhZyl7Zz1tW2RdO2JyZWFrfWd8fFF0KHQsInVua25vd24gdGFnICE8Iit0LnRhZysiPiIpLHQucmVzdWx0IT09bnVsbCYmZy5raW5kIT09dC5raW5kJiZRdCh0LCJ1bmFjY2VwdGFibGUgbm9kZSBraW5kIGZvciAhPCIrdC50YWcrJz4gdGFnOyBpdCBzaG91bGQgYmUgIicrZy5raW5kKyciLCBub3QgIicrdC5raW5kKyciJyksZy5yZXNvbHZlKHQucmVzdWx0LHQudGFnKT8odC5yZXN1bHQ9Zy5jb25zdHJ1Y3QodC5yZXN1bHQsdC50YWcpLHQuYW5jaG9yIT09bnVsbCYmKHQuYW5jaG9yTWFwW3QuYW5jaG9yXT10LnJlc3VsdCkpOlF0KHQsImNhbm5vdCByZXNvbHZlIGEgbm9kZSB3aXRoICE8Iit0LnRhZysiPiBleHBsaWNpdCB0YWciKX1yZXR1cm4gdC5saXN0ZW5lciE9PW51bGwmJnQubGlzdGVuZXIoImNsb3NlIix0KSx0LnRhZyE9PW51bGx8fHQuYW5jaG9yIT09bnVsbHx8Zn1mdW5jdGlvbiBXOGUodCl7dmFyIGU9dC5wb3NpdGlvbixyLG4saSxhPSExLHM7Zm9yKHQudmVyc2lvbj1udWxsLHQuY2hlY2tMaW5lQnJlYWtzPXQubGVnYWN5LHQudGFnTWFwPU9iamVjdC5jcmVhdGUobnVsbCksdC5hbmNob3JNYXA9T2JqZWN0LmNyZWF0ZShudWxsKTsocz10LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbikpIT09MCYmKF9pKHQsITAsLTEpLHM9dC5pbnB1dC5jaGFyQ29kZUF0KHQucG9zaXRpb24pLCEodC5saW5lSW5kZW50PjB8fHMhPT0zNykpOyl7Zm9yKGE9ITAscz10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKSxyPXQucG9zaXRpb247cyE9PTAmJiFPcyhzKTspcz10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKTtmb3Iobj10LmlucHV0LnNsaWNlKHIsdC5wb3NpdGlvbiksaT1bXSxuLmxlbmd0aDwxJiZRdCh0LCJkaXJlY3RpdmUgbmFtZSBtdXN0IG5vdCBiZSBsZXNzIHRoYW4gb25lIGNoYXJhY3RlciBpbiBsZW5ndGgiKTtzIT09MDspe2Zvcig7R2Qocyk7KXM9dC5pbnB1dC5jaGFyQ29kZUF0KCsrdC5wb3NpdGlvbik7aWYocz09PTM1KXtkbyBzPXQuaW5wdXQuY2hhckNvZGVBdCgrK3QucG9zaXRpb24pO3doaWxlKHMhPT0wJiYhdmMocykpO2JyZWFrfWlmKHZjKHMpKWJyZWFrO2ZvcihyPXQucG9zaXRpb247cyE9PTAmJiFPcyhzKTspcz10LmlucHV0LmNoYXJDb2RlQXQoKyt0LnBvc2l0aW9uKTtpLnB1c2godC5pbnB1dC5zbGljZShyLHQucG9zaXRpb24pKX1zIT09MCYmWTkodCksWWguY2FsbChtSyxuKT9tS1tuXSh0LG4saSk6TlQodCwndW5rbm93biBkb2N1bWVudCBkaXJlY3RpdmUgIicrbisnIicpfWlmKF9pKHQsITAsLTEpLHQubGluZUluZGVudD09PTAmJnQuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKT09PTQ1JiZ0LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbisxKT09PTQ1JiZ0LmlucHV0LmNoYXJDb2RlQXQodC5wb3NpdGlvbisyKT09PTQ1Pyh0LnBvc2l0aW9uKz0zLF9pKHQsITAsLTEpKTphJiZRdCh0LCJkaXJlY3RpdmVzIGVuZCBtYXJrIGlzIGV4cGVjdGVkIikseG0odCx0LmxpbmVJbmRlbnQtMSxSVCwhMSwhMCksX2kodCwhMCwtMSksdC5jaGVja0xpbmVCcmVha3MmJkQ4ZS50ZXN0KHQuaW5wdXQuc2xpY2UoZSx0LnBvc2l0aW9uKSkmJk5UKHQsIm5vbi1BU0NJSSBsaW5lIGJyZWFrcyBhcmUgaW50ZXJwcmV0ZWQgYXMgY29udGVudCIpLHQuZG9jdW1lbnRzLnB1c2godC5yZXN1bHQpLHQucG9zaXRpb249PT10LmxpbmVTdGFydCYmT1QodCkpe3QuaW5wdXQuY2hhckNvZGVBdCh0LnBvc2l0aW9uKT09PTQ2JiYodC5wb3NpdGlvbis9MyxfaSh0LCEwLC0xKSk7cmV0dXJufWlmKHQucG9zaXRpb248dC5sZW5ndGgtMSlRdCh0LCJlbmQgb2YgdGhlIHN0cmVhbSBvciBhIGRvY3VtZW50IHNlcGFyYXRvciBpcyBleHBlY3RlZCIpO2Vsc2UgcmV0dXJufWZ1bmN0aW9uICRLKHQsZSl7dD1TdHJpbmcodCksZT1lfHx7fSx0Lmxlbmd0aCE9PTAmJih0LmNoYXJDb2RlQXQodC5sZW5ndGgtMSkhPT0xMCYmdC5jaGFyQ29kZUF0KHQubGVuZ3RoLTEpIT09MTMmJih0Kz1gCmApLHQuY2hhckNvZGVBdCgwKT09PTY1Mjc5JiYodD10LnNsaWNlKDEpKSk7dmFyIHI9bmV3IE84ZSh0LGUpLG49dC5pbmRleE9mKCJcMCIpO2ZvcihuIT09LTEmJihyLnBvc2l0aW9uPW4sUXQociwibnVsbCBieXRlIGlzIG5vdCBhbGxvd2VkIGluIGlucHV0IikpLHIuaW5wdXQrPSJcMCI7ci5pbnB1dC5jaGFyQ29kZUF0KHIucG9zaXRpb24pPT09MzI7KXIubGluZUluZGVudCs9MSxyLnBvc2l0aW9uKz0xO2Zvcig7ci5wb3NpdGlvbjxyLmxlbmd0aC0xOylXOGUocik7cmV0dXJuIHIuZG9jdW1lbnRzfWZ1bmN0aW9uIHE4ZSh0LGUscil7ZSE9PW51bGwmJnR5cGVvZiBlPT0ib2JqZWN0IiYmdHlwZW9mIHI+InUiJiYocj1lLGU9bnVsbCk7dmFyIG49JEsodCxyKTtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIilyZXR1cm4gbjtmb3IodmFyIGk9MCxhPW4ubGVuZ3RoO2k8YTtpKz0xKWUobltpXSl9ZnVuY3Rpb24gWThlKHQsZSl7dmFyIHI9JEsodCxlKTtpZihyLmxlbmd0aCE9PTApe2lmKHIubGVuZ3RoPT09MSlyZXR1cm4gclswXTt0aHJvdyBuZXcgSXMoImV4cGVjdGVkIGEgc2luZ2xlIGRvY3VtZW50IGluIHRoZSBzdHJlYW0sIGJ1dCBmb3VuZCBtb3JlIil9fWZ1bmN0aW9uIHBfZSh0LGUpe3ZhciByLG4saSxhLHMsbCx1O2lmKGU9PT1udWxsKXJldHVybnt9O2ZvcihyPXt9LG49T2JqZWN0LmtleXMoZSksaT0wLGE9bi5sZW5ndGg7aTxhO2krPTEpcz1uW2ldLGw9U3RyaW5nKGVbc10pLHMuc2xpY2UoMCwyKT09PSIhISImJihzPSJ0YWc6eWFtbC5vcmcsMjAwMjoiK3Muc2xpY2UoMikpLHU9dC5jb21waWxlZFR5cGVNYXAuZmFsbGJhY2tbc10sdSYmVksuY2FsbCh1LnN0eWxlQWxpYXNlcyxsKSYmKGw9dS5zdHlsZUFsaWFzZXNbbF0pLHJbc109bDtyZXR1cm4gcn1mdW5jdGlvbiBtX2UodCl7dmFyIGUscixuO2lmKGU9dC50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSx0PD0yNTUpcj0ieCIsbj0yO2Vsc2UgaWYodDw9NjU1MzUpcj0idSIsbj00O2Vsc2UgaWYodDw9NDI5NDk2NzI5NSlyPSJVIixuPTg7ZWxzZSB0aHJvdyBuZXcgSXMoImNvZGUgcG9pbnQgd2l0aGluIGEgc3RyaW5nIG1heSBub3QgYmUgZ3JlYXRlciB0aGFuIDB4RkZGRkZGRkYiKTtyZXR1cm4iXFwiK3IrR2kucmVwZWF0KCIwIixuLWUubGVuZ3RoKStlfWZ1bmN0aW9uIHlfZSh0KXt0aGlzLnNjaGVtYT10LnNjaGVtYXx8UkssdGhpcy5pbmRlbnQ9TWF0aC5tYXgoMSx0LmluZGVudHx8MiksdGhpcy5ub0FycmF5SW5kZW50PXQubm9BcnJheUluZGVudHx8ITEsdGhpcy5za2lwSW52YWxpZD10LnNraXBJbnZhbGlkfHwhMSx0aGlzLmZsb3dMZXZlbD1HaS5pc05vdGhpbmcodC5mbG93TGV2ZWwpPy0xOnQuZmxvd0xldmVsLHRoaXMuc3R5bGVNYXA9cF9lKHRoaXMuc2NoZW1hLHQuc3R5bGVzfHxudWxsKSx0aGlzLnNvcnRLZXlzPXQuc29ydEtleXN8fCExLHRoaXMubGluZVdpZHRoPXQubGluZVdpZHRofHw4MCx0aGlzLm5vUmVmcz10Lm5vUmVmc3x8ITEsdGhpcy5ub0NvbXBhdE1vZGU9dC5ub0NvbXBhdE1vZGV8fCExLHRoaXMuY29uZGVuc2VGbG93PXQuY29uZGVuc2VGbG93fHwhMSx0aGlzLnF1b3RpbmdUeXBlPXQucXVvdGluZ1R5cGU9PT0nIic/eDI6Z19lLHRoaXMuZm9yY2VRdW90ZXM9dC5mb3JjZVF1b3Rlc3x8ITEsdGhpcy5yZXBsYWNlcj10eXBlb2YgdC5yZXBsYWNlcj09ImZ1bmN0aW9uIj90LnJlcGxhY2VyOm51bGwsdGhpcy5pbXBsaWNpdFR5cGVzPXRoaXMuc2NoZW1hLmNvbXBpbGVkSW1wbGljaXQsdGhpcy5leHBsaWNpdFR5cGVzPXRoaXMuc2NoZW1hLmNvbXBpbGVkRXhwbGljaXQsdGhpcy50YWc9bnVsbCx0aGlzLnJlc3VsdD0iIix0aGlzLmR1cGxpY2F0ZXM9W10sdGhpcy51c2VkRHVwbGljYXRlcz1udWxsfWZ1bmN0aW9uIHZLKHQsZSl7Zm9yKHZhciByPUdpLnJlcGVhdCgiICIsZSksbj0wLGk9LTEsYT0iIixzLGw9dC5sZW5ndGg7bjxsOylpPXQuaW5kZXhPZihgCmAsbiksaT09PS0xPyhzPXQuc2xpY2Uobiksbj1sKToocz10LnNsaWNlKG4saSsxKSxuPWkrMSkscy5sZW5ndGgmJnMhPT1gCmAmJihhKz1yKSxhKz1zO3JldHVybiBhfWZ1bmN0aW9uIFU5KHQsZSl7cmV0dXJuYApgK0dpLnJlcGVhdCgiICIsdC5pbmRlbnQqZSl9ZnVuY3Rpb24gdl9lKHQsZSl7dmFyIHIsbixpO2ZvcihyPTAsbj10LmltcGxpY2l0VHlwZXMubGVuZ3RoO3I8bjtyKz0xKWlmKGk9dC5pbXBsaWNpdFR5cGVzW3JdLGkucmVzb2x2ZShlKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBJVCh0KXtyZXR1cm4gdD09PVo4ZXx8dD09PUs4ZX1mdW5jdGlvbiBiMih0KXtyZXR1cm4gMzI8PXQmJnQ8PTEyNnx8MTYxPD10JiZ0PD01NTI5NSYmdCE9PTgyMzImJnQhPT04MjMzfHw1NzM0NDw9dCYmdDw9NjU1MzMmJnQhPT1qOXx8NjU1MzY8PXQmJnQ8PTExMTQxMTF9ZnVuY3Rpb24geEsodCl7cmV0dXJuIGIyKHQpJiZ0IT09ajkmJnQhPT1ROGUmJnQhPT12Mn1mdW5jdGlvbiBiSyh0LGUscil7dmFyIG49eEsodCksaT1uJiYhSVQodCk7cmV0dXJuKHI/bjpuJiZ0IT09VUsmJnQhPT1ISyYmdCE9PVdLJiZ0IT09cUsmJnQhPT1ZSykmJnQhPT1WOSYmIShlPT09TVQmJiFpKXx8eEsoZSkmJiFJVChlKSYmdD09PVY5fHxlPT09TVQmJml9ZnVuY3Rpb24geF9lKHQpe3JldHVybiBiMih0KSYmdCE9PWo5JiYhSVQodCkmJnQhPT1hX2UmJnQhPT1sX2UmJnQhPT1NVCYmdCE9PVVLJiZ0IT09SEsmJnQhPT1XSyYmdCE9PXFLJiZ0IT09WUsmJnQhPT1WOSYmdCE9PXJfZSYmdCE9PWlfZSYmdCE9PUo4ZSYmdCE9PWhfZSYmdCE9PXNfZSYmdCE9PW9fZSYmdCE9PW5fZSYmdCE9PWVfZSYmdCE9PXRfZSYmdCE9PWNfZSYmdCE9PXVfZX1mdW5jdGlvbiBiX2UodCl7cmV0dXJuIUlUKHQpJiZ0IT09TVR9ZnVuY3Rpb24gZzIodCxlKXt2YXIgcj10LmNoYXJDb2RlQXQoZSksbjtyZXR1cm4gcj49NTUyOTYmJnI8PTU2MzE5JiZlKzE8dC5sZW5ndGgmJihuPXQuY2hhckNvZGVBdChlKzEpLG4+PTU2MzIwJiZuPD01NzM0Myk/KHItNTUyOTYpKjEwMjQrbi01NjMyMCs2NTUzNjpyfWZ1bmN0aW9uIFhLKHQpe3ZhciBlPS9eXG4qIC87cmV0dXJuIGUudGVzdCh0KX1mdW5jdGlvbiBUX2UodCxlLHIsbixpLGEscyxsKXt2YXIgdSxoPTAsZj1udWxsLGQ9ITEscD0hMSxtPW4hPT0tMSxnPS0xLHk9eF9lKGcyKHQsMCkpJiZiX2UoZzIodCx0Lmxlbmd0aC0xKSk7aWYoZXx8cylmb3IodT0wO3U8dC5sZW5ndGg7aD49NjU1MzY/dSs9Mjp1Kyspe2lmKGg9ZzIodCx1KSwhYjIoaCkpcmV0dXJuIGdtO3k9eSYmYksoaCxmLGwpLGY9aH1lbHNle2Zvcih1PTA7dTx0Lmxlbmd0aDtoPj02NTUzNj91Kz0yOnUrKyl7aWYoaD1nMih0LHUpLGg9PT12MilkPSEwLG0mJihwPXB8fHUtZy0xPm4mJnRbZysxXSE9PSIgIixnPXUpO2Vsc2UgaWYoIWIyKGgpKXJldHVybiBnbTt5PXkmJmJLKGgsZixsKSxmPWh9cD1wfHxtJiZ1LWctMT5uJiZ0W2crMV0hPT0iICJ9cmV0dXJuIWQmJiFwP3kmJiFzJiYhaSh0KT9qSzphPT09eDI/Z206SDk6cj45JiZYSyh0KT9nbTpzP2E9PT14Mj9nbTpIOTpwP1FLOktLfWZ1bmN0aW9uIHdfZSh0LGUscixuLGkpe3QuZHVtcD1mdW5jdGlvbigpe2lmKGUubGVuZ3RoPT09MClyZXR1cm4gdC5xdW90aW5nVHlwZT09PXgyPyciIic6IicnIjtpZighdC5ub0NvbXBhdE1vZGUmJihmX2UuaW5kZXhPZihlKSE9PS0xfHxkX2UudGVzdChlKSkpcmV0dXJuIHQucXVvdGluZ1R5cGU9PT14Mj8nIicrZSsnIic6IiciK2UrIiciO3ZhciBhPXQuaW5kZW50Kk1hdGgubWF4KDEscikscz10LmxpbmVXaWR0aD09PS0xPy0xOk1hdGgubWF4KE1hdGgubWluKHQubGluZVdpZHRoLDQwKSx0LmxpbmVXaWR0aC1hKSxsPW58fHQuZmxvd0xldmVsPi0xJiZyPj10LmZsb3dMZXZlbDtmdW5jdGlvbiB1KGgpe3JldHVybiB2X2UodCxoKX1zd2l0Y2gobyh1LCJ0ZXN0QW1iaWd1aXR5IiksVF9lKGUsbCx0LmluZGVudCxzLHUsdC5xdW90aW5nVHlwZSx0LmZvcmNlUXVvdGVzJiYhbixpKSl7Y2FzZSBqSzpyZXR1cm4gZTtjYXNlIEg5OnJldHVybiInIitlLnJlcGxhY2UoLycvZywiJyciKSsiJyI7Y2FzZSBLSzpyZXR1cm4ifCIrVEsoZSx0LmluZGVudCkrd0sodksoZSxhKSk7Y2FzZSBRSzpyZXR1cm4iPiIrVEsoZSx0LmluZGVudCkrd0sodksoa19lKGUscyksYSkpO2Nhc2UgZ206cmV0dXJuJyInK0VfZShlKSsnIic7ZGVmYXVsdDp0aHJvdyBuZXcgSXMoImltcG9zc2libGUgZXJyb3I6IGludmFsaWQgc2NhbGFyIHN0eWxlIil9fSgpfWZ1bmN0aW9uIFRLKHQsZSl7dmFyIHI9WEsodCk/U3RyaW5nKGUpOiIiLG49dFt0Lmxlbmd0aC0xXT09PWAKYCxpPW4mJih0W3QubGVuZ3RoLTJdPT09YApgfHx0PT09YApgKSxhPWk/IisiOm4/IiI6Ii0iO3JldHVybiByK2ErYApgfWZ1bmN0aW9uIHdLKHQpe3JldHVybiB0W3QubGVuZ3RoLTFdPT09YApgP3Quc2xpY2UoMCwtMSk6dH1mdW5jdGlvbiBrX2UodCxlKXtmb3IodmFyIHI9LyhcbispKFteXG5dKikvZyxuPWZ1bmN0aW9uKCl7dmFyIGg9dC5pbmRleE9mKGAKYCk7cmV0dXJuIGg9aCE9PS0xP2g6dC5sZW5ndGgsci5sYXN0SW5kZXg9aCxrSyh0LnNsaWNlKDAsaCksZSl9KCksaT10WzBdPT09YApgfHx0WzBdPT09IiAiLGEscztzPXIuZXhlYyh0KTspe3ZhciBsPXNbMV0sdT1zWzJdO2E9dVswXT09PSIgIixuKz1sKyghaSYmIWEmJnUhPT0iIj9gCmA6IiIpK2tLKHUsZSksaT1hfXJldHVybiBufWZ1bmN0aW9uIGtLKHQsZSl7aWYodD09PSIifHx0WzBdPT09IiAiKXJldHVybiB0O2Zvcih2YXIgcj0vIFteIF0vZyxuLGk9MCxhLHM9MCxsPTAsdT0iIjtuPXIuZXhlYyh0KTspbD1uLmluZGV4LGwtaT5lJiYoYT1zPmk/czpsLHUrPWAKYCt0LnNsaWNlKGksYSksaT1hKzEpLHM9bDtyZXR1cm4gdSs9YApgLHQubGVuZ3RoLWk+ZSYmcz5pP3UrPXQuc2xpY2UoaSxzKStgCmArdC5zbGljZShzKzEpOnUrPXQuc2xpY2UoaSksdS5zbGljZSgxKX1mdW5jdGlvbiBFX2UodCl7Zm9yKHZhciBlPSIiLHI9MCxuLGk9MDtpPHQubGVuZ3RoO3I+PTY1NTM2P2krPTI6aSsrKXI9ZzIodCxpKSxuPU5hW3JdLCFuJiZiMihyKT8oZSs9dFtpXSxyPj02NTUzNiYmKGUrPXRbaSsxXSkpOmUrPW58fG1fZShyKTtyZXR1cm4gZX1mdW5jdGlvbiBTX2UodCxlLHIpe3ZhciBuPSIiLGk9dC50YWcsYSxzLGw7Zm9yKGE9MCxzPXIubGVuZ3RoO2E8czthKz0xKWw9clthXSx0LnJlcGxhY2VyJiYobD10LnJlcGxhY2VyLmNhbGwocixTdHJpbmcoYSksbCkpLChSdSh0LGUsbCwhMSwhMSl8fHR5cGVvZiBsPiJ1IiYmUnUodCxlLG51bGwsITEsITEpKSYmKG4hPT0iIiYmKG4rPSIsIisodC5jb25kZW5zZUZsb3c/IiI6IiAiKSksbis9dC5kdW1wKTt0LnRhZz1pLHQuZHVtcD0iWyIrbisiXSJ9ZnVuY3Rpb24gRUsodCxlLHIsbil7dmFyIGk9IiIsYT10LnRhZyxzLGwsdTtmb3Iocz0wLGw9ci5sZW5ndGg7czxsO3MrPTEpdT1yW3NdLHQucmVwbGFjZXImJih1PXQucmVwbGFjZXIuY2FsbChyLFN0cmluZyhzKSx1KSksKFJ1KHQsZSsxLHUsITAsITAsITEsITApfHx0eXBlb2YgdT4idSImJlJ1KHQsZSsxLG51bGwsITAsITAsITEsITApKSYmKCghbnx8aSE9PSIiKSYmKGkrPVU5KHQsZSkpLHQuZHVtcCYmdjI9PT10LmR1bXAuY2hhckNvZGVBdCgwKT9pKz0iLSI6aSs9Ii0gIixpKz10LmR1bXApO3QudGFnPWEsdC5kdW1wPWl8fCJbXSJ9ZnVuY3Rpb24gQ19lKHQsZSxyKXt2YXIgbj0iIixpPXQudGFnLGE9T2JqZWN0LmtleXMocikscyxsLHUsaCxmO2ZvcihzPTAsbD1hLmxlbmd0aDtzPGw7cys9MSlmPSIiLG4hPT0iIiYmKGYrPSIsICIpLHQuY29uZGVuc2VGbG93JiYoZis9JyInKSx1PWFbc10saD1yW3VdLHQucmVwbGFjZXImJihoPXQucmVwbGFjZXIuY2FsbChyLHUsaCkpLFJ1KHQsZSx1LCExLCExKSYmKHQuZHVtcC5sZW5ndGg+MTAyNCYmKGYrPSI/ICIpLGYrPXQuZHVtcCsodC5jb25kZW5zZUZsb3c/JyInOiIiKSsiOiIrKHQuY29uZGVuc2VGbG93PyIiOiIgIiksUnUodCxlLGgsITEsITEpJiYoZis9dC5kdW1wLG4rPWYpKTt0LnRhZz1pLHQuZHVtcD0ieyIrbisifSJ9ZnVuY3Rpb24gQV9lKHQsZSxyLG4pe3ZhciBpPSIiLGE9dC50YWcscz1PYmplY3Qua2V5cyhyKSxsLHUsaCxmLGQscDtpZih0LnNvcnRLZXlzPT09ITApcy5zb3J0KCk7ZWxzZSBpZih0eXBlb2YgdC5zb3J0S2V5cz09ImZ1bmN0aW9uIilzLnNvcnQodC5zb3J0S2V5cyk7ZWxzZSBpZih0LnNvcnRLZXlzKXRocm93IG5ldyBJcygic29ydEtleXMgbXVzdCBiZSBhIGJvb2xlYW4gb3IgYSBmdW5jdGlvbiIpO2ZvcihsPTAsdT1zLmxlbmd0aDtsPHU7bCs9MSlwPSIiLCghbnx8aSE9PSIiKSYmKHArPVU5KHQsZSkpLGg9c1tsXSxmPXJbaF0sdC5yZXBsYWNlciYmKGY9dC5yZXBsYWNlci5jYWxsKHIsaCxmKSksUnUodCxlKzEsaCwhMCwhMCwhMCkmJihkPXQudGFnIT09bnVsbCYmdC50YWchPT0iPyJ8fHQuZHVtcCYmdC5kdW1wLmxlbmd0aD4xMDI0LGQmJih0LmR1bXAmJnYyPT09dC5kdW1wLmNoYXJDb2RlQXQoMCk/cCs9Ij8iOnArPSI/ICIpLHArPXQuZHVtcCxkJiYocCs9VTkodCxlKSksUnUodCxlKzEsZiwhMCxkKSYmKHQuZHVtcCYmdjI9PT10LmR1bXAuY2hhckNvZGVBdCgwKT9wKz0iOiI6cCs9IjogIixwKz10LmR1bXAsaSs9cCkpO3QudGFnPWEsdC5kdW1wPWl8fCJ7fSJ9ZnVuY3Rpb24gU0sodCxlLHIpe3ZhciBuLGksYSxzLGwsdTtmb3IoaT1yP3QuZXhwbGljaXRUeXBlczp0LmltcGxpY2l0VHlwZXMsYT0wLHM9aS5sZW5ndGg7YTxzO2ErPTEpaWYobD1pW2FdLChsLmluc3RhbmNlT2Z8fGwucHJlZGljYXRlKSYmKCFsLmluc3RhbmNlT2Z8fHR5cGVvZiBlPT0ib2JqZWN0IiYmZSBpbnN0YW5jZW9mIGwuaW5zdGFuY2VPZikmJighbC5wcmVkaWNhdGV8fGwucHJlZGljYXRlKGUpKSl7aWYocj9sLm11bHRpJiZsLnJlcHJlc2VudE5hbWU/dC50YWc9bC5yZXByZXNlbnROYW1lKGUpOnQudGFnPWwudGFnOnQudGFnPSI/IixsLnJlcHJlc2VudCl7aWYodT10LnN0eWxlTWFwW2wudGFnXXx8bC5kZWZhdWx0U3R5bGUsR0suY2FsbChsLnJlcHJlc2VudCk9PT0iW29iamVjdCBGdW5jdGlvbl0iKW49bC5yZXByZXNlbnQoZSx1KTtlbHNlIGlmKFZLLmNhbGwobC5yZXByZXNlbnQsdSkpbj1sLnJlcHJlc2VudFt1XShlLHUpO2Vsc2UgdGhyb3cgbmV3IElzKCIhPCIrbC50YWcrJz4gdGFnIHJlc29sdmVyIGFjY2VwdHMgbm90ICInK3UrJyIgc3R5bGUnKTt0LmR1bXA9bn1yZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBSdSh0LGUscixuLGksYSxzKXt0LnRhZz1udWxsLHQuZHVtcD1yLFNLKHQsciwhMSl8fFNLKHQsciwhMCk7dmFyIGw9R0suY2FsbCh0LmR1bXApLHU9bixoO24mJihuPXQuZmxvd0xldmVsPDB8fHQuZmxvd0xldmVsPmUpO3ZhciBmPWw9PT0iW29iamVjdCBPYmplY3RdInx8bD09PSJbb2JqZWN0IEFycmF5XSIsZCxwO2lmKGYmJihkPXQuZHVwbGljYXRlcy5pbmRleE9mKHIpLHA9ZCE9PS0xKSwodC50YWchPT1udWxsJiZ0LnRhZyE9PSI/Inx8cHx8dC5pbmRlbnQhPT0yJiZlPjApJiYoaT0hMSkscCYmdC51c2VkRHVwbGljYXRlc1tkXSl0LmR1bXA9IipyZWZfIitkO2Vsc2V7aWYoZiYmcCYmIXQudXNlZER1cGxpY2F0ZXNbZF0mJih0LnVzZWREdXBsaWNhdGVzW2RdPSEwKSxsPT09IltvYmplY3QgT2JqZWN0XSIpbiYmT2JqZWN0LmtleXModC5kdW1wKS5sZW5ndGghPT0wPyhBX2UodCxlLHQuZHVtcCxpKSxwJiYodC5kdW1wPSImcmVmXyIrZCt0LmR1bXApKTooQ19lKHQsZSx0LmR1bXApLHAmJih0LmR1bXA9IiZyZWZfIitkKyIgIit0LmR1bXApKTtlbHNlIGlmKGw9PT0iW29iamVjdCBBcnJheV0iKW4mJnQuZHVtcC5sZW5ndGghPT0wPyh0Lm5vQXJyYXlJbmRlbnQmJiFzJiZlPjA/RUsodCxlLTEsdC5kdW1wLGkpOkVLKHQsZSx0LmR1bXAsaSkscCYmKHQuZHVtcD0iJnJlZl8iK2QrdC5kdW1wKSk6KFNfZSh0LGUsdC5kdW1wKSxwJiYodC5kdW1wPSImcmVmXyIrZCsiICIrdC5kdW1wKSk7ZWxzZSBpZihsPT09IltvYmplY3QgU3RyaW5nXSIpdC50YWchPT0iPyImJndfZSh0LHQuZHVtcCxlLGEsdSk7ZWxzZXtpZihsPT09IltvYmplY3QgVW5kZWZpbmVkXSIpcmV0dXJuITE7aWYodC5za2lwSW52YWxpZClyZXR1cm4hMTt0aHJvdyBuZXcgSXMoInVuYWNjZXB0YWJsZSBraW5kIG9mIGFuIG9iamVjdCB0byBkdW1wICIrbCl9dC50YWchPT1udWxsJiZ0LnRhZyE9PSI/IiYmKGg9ZW5jb2RlVVJJKHQudGFnWzBdPT09IiEiP3QudGFnLnNsaWNlKDEpOnQudGFnKS5yZXBsYWNlKC8hL2csIiUyMSIpLHQudGFnWzBdPT09IiEiP2g9IiEiK2g6aC5zbGljZSgwLDE4KT09PSJ0YWc6eWFtbC5vcmcsMjAwMjoiP2g9IiEhIitoLnNsaWNlKDE4KTpoPSIhPCIraCsiPiIsdC5kdW1wPWgrIiAiK3QuZHVtcCl9cmV0dXJuITB9ZnVuY3Rpb24gX19lKHQsZSl7dmFyIHI9W10sbj1bXSxpLGE7Zm9yKFc5KHQscixuKSxpPTAsYT1uLmxlbmd0aDtpPGE7aSs9MSllLmR1cGxpY2F0ZXMucHVzaChyW25baV1dKTtlLnVzZWREdXBsaWNhdGVzPW5ldyBBcnJheShhKX1mdW5jdGlvbiBXOSh0LGUscil7dmFyIG4saSxhO2lmKHQhPT1udWxsJiZ0eXBlb2YgdD09Im9iamVjdCIpaWYoaT1lLmluZGV4T2YodCksaSE9PS0xKXIuaW5kZXhPZihpKT09PS0xJiZyLnB1c2goaSk7ZWxzZSBpZihlLnB1c2godCksQXJyYXkuaXNBcnJheSh0KSlmb3IoaT0wLGE9dC5sZW5ndGg7aTxhO2krPTEpVzkodFtpXSxlLHIpO2Vsc2UgZm9yKG49T2JqZWN0LmtleXModCksaT0wLGE9bi5sZW5ndGg7aTxhO2krPTEpVzkodFtuW2ldXSxlLHIpfWZ1bmN0aW9uIERfZSh0LGUpe2U9ZXx8e307dmFyIHI9bmV3IHlfZShlKTtyLm5vUmVmc3x8X19lKHQscik7dmFyIG49dDtyZXR1cm4gci5yZXBsYWNlciYmKG49ci5yZXBsYWNlci5jYWxsKHsiIjpufSwiIixuKSksUnUociwwLG4sITAsITApP3IuZHVtcCtgCmA6IiJ9ZnVuY3Rpb24gSzkodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIkZ1bmN0aW9uIHlhbWwuIit0KyIgaXMgcmVtb3ZlZCBpbiBqcy15YW1sIDQuIFVzZSB5YW1sLiIrZSsiIGluc3RlYWQsIHdoaWNoIGlzIG5vdyBzYWZlIGJ5IGRlZmF1bHQuIil9fXZhciBnQWUseUFlLHZBZSx4QWUsYkFlLFRBZSxHaSxJcyxrQWUsRUFlLFNBZSxSYSxEQWUsTEFlLFJBZSxOQWUsTUFlLEJBZSxHQWUsWEFlLGpBZSxaQWUsdDhlLF9LLHI4ZSxESyxMSyxzOGUsbDhlLHE5LGQ4ZSxwOGUsbThlLHY4ZSx4OGUsdzhlLGs4ZSxDOGUsUkssWWgsTFQsTkssTUssUlQsejksQThlLGZLLF84ZSxEOGUsTDhlLElLLE9LLFBLLEJLLHpkLG1LLFg4ZSxqOGUsekssR0ssVkssajksSzhlLHYyLFE4ZSxaOGUsSjhlLGVfZSxWOSx0X2Uscl9lLG5fZSxpX2UsVUssYV9lLE1ULHNfZSxvX2UsbF9lLGNfZSxISyxXSyx1X2UscUssaF9lLFlLLE5hLGZfZSxkX2UsZ19lLHgyLGpLLEg5LEtLLFFLLGdtLExfZSxSX2UsYm0sVG0scVN0LFlTdCxYU3QsalN0LEtTdCxQVD1OKCgpPT57InVzZSBzdHJpY3QiO28oQ0ssImlzTm90aGluZyIpO28oaEFlLCJpc09iamVjdCIpO28oZkFlLCJ0b0FycmF5Iik7byhkQWUsImV4dGVuZCIpO28ocEFlLCJyZXBlYXQiKTtvKG1BZSwiaXNOZWdhdGl2ZVplcm8iKTtnQWU9Q0sseUFlPWhBZSx2QWU9ZkFlLHhBZT1wQWUsYkFlPW1BZSxUQWU9ZEFlLEdpPXtpc05vdGhpbmc6Z0FlLGlzT2JqZWN0OnlBZSx0b0FycmF5OnZBZSxyZXBlYXQ6eEFlLGlzTmVnYXRpdmVaZXJvOmJBZSxleHRlbmQ6VEFlfTtvKEFLLCJmb3JtYXRFcnJvciIpO28oeTIsIllBTUxFeGNlcHRpb24kMSIpO3kyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSk7eTIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXkyO3kyLnByb3RvdHlwZS50b1N0cmluZz1vKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm5hbWUrIjogIitBSyh0aGlzLGUpfSwidG9TdHJpbmciKTtJcz15MjtvKEY5LCJnZXRMaW5lIik7bygkOSwicGFkU3RhcnQiKTtvKHdBZSwibWFrZVNuaXBwZXQiKTtrQWU9d0FlLEVBZT1bImtpbmQiLCJtdWx0aSIsInJlc29sdmUiLCJjb25zdHJ1Y3QiLCJpbnN0YW5jZU9mIiwicHJlZGljYXRlIiwicmVwcmVzZW50IiwicmVwcmVzZW50TmFtZSIsImRlZmF1bHRTdHlsZSIsInN0eWxlQWxpYXNlcyJdLFNBZT1bInNjYWxhciIsInNlcXVlbmNlIiwibWFwcGluZyJdO28oQ0FlLCJjb21waWxlU3R5bGVBbGlhc2VzIik7byhBQWUsIlR5cGUkMSIpO1JhPUFBZTtvKGhLLCJjb21waWxlTGlzdCIpO28oX0FlLCJjb21waWxlTWFwIik7byhHOSwiU2NoZW1hJDEiKTtHOS5wcm90b3R5cGUuZXh0ZW5kPW8oZnVuY3Rpb24oZSl7dmFyIHI9W10sbj1bXTtpZihlIGluc3RhbmNlb2YgUmEpbi5wdXNoKGUpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShlKSluPW4uY29uY2F0KGUpO2Vsc2UgaWYoZSYmKEFycmF5LmlzQXJyYXkoZS5pbXBsaWNpdCl8fEFycmF5LmlzQXJyYXkoZS5leHBsaWNpdCkpKWUuaW1wbGljaXQmJihyPXIuY29uY2F0KGUuaW1wbGljaXQpKSxlLmV4cGxpY2l0JiYobj1uLmNvbmNhdChlLmV4cGxpY2l0KSk7ZWxzZSB0aHJvdyBuZXcgSXMoIlNjaGVtYS5leHRlbmQgYXJndW1lbnQgc2hvdWxkIGJlIGEgVHlwZSwgWyBUeXBlIF0sIG9yIGEgc2NoZW1hIGRlZmluaXRpb24gKHsgaW1wbGljaXQ6IFsuLi5dLCBleHBsaWNpdDogWy4uLl0gfSkiKTtyLmZvckVhY2goZnVuY3Rpb24oYSl7aWYoIShhIGluc3RhbmNlb2YgUmEpKXRocm93IG5ldyBJcygiU3BlY2lmaWVkIGxpc3Qgb2YgWUFNTCB0eXBlcyAob3IgYSBzaW5nbGUgVHlwZSBvYmplY3QpIGNvbnRhaW5zIGEgbm9uLVR5cGUgb2JqZWN0LiIpO2lmKGEubG9hZEtpbmQmJmEubG9hZEtpbmQhPT0ic2NhbGFyIil0aHJvdyBuZXcgSXMoIlRoZXJlIGlzIGEgbm9uLXNjYWxhciB0eXBlIGluIHRoZSBpbXBsaWNpdCBsaXN0IG9mIGEgc2NoZW1hLiBJbXBsaWNpdCByZXNvbHZpbmcgb2Ygc3VjaCB0eXBlcyBpcyBub3Qgc3VwcG9ydGVkLiIpO2lmKGEubXVsdGkpdGhyb3cgbmV3IElzKCJUaGVyZSBpcyBhIG11bHRpIHR5cGUgaW4gdGhlIGltcGxpY2l0IGxpc3Qgb2YgYSBzY2hlbWEuIE11bHRpIHRhZ3MgY2FuIG9ubHkgYmUgbGlzdGVkIGFzIGV4cGxpY2l0LiIpfSksbi5mb3JFYWNoKGZ1bmN0aW9uKGEpe2lmKCEoYSBpbnN0YW5jZW9mIFJhKSl0aHJvdyBuZXcgSXMoIlNwZWNpZmllZCBsaXN0IG9mIFlBTUwgdHlwZXMgKG9yIGEgc2luZ2xlIFR5cGUgb2JqZWN0KSBjb250YWlucyBhIG5vbi1UeXBlIG9iamVjdC4iKX0pO3ZhciBpPU9iamVjdC5jcmVhdGUoRzkucHJvdG90eXBlKTtyZXR1cm4gaS5pbXBsaWNpdD0odGhpcy5pbXBsaWNpdHx8W10pLmNvbmNhdChyKSxpLmV4cGxpY2l0PSh0aGlzLmV4cGxpY2l0fHxbXSkuY29uY2F0KG4pLGkuY29tcGlsZWRJbXBsaWNpdD1oSyhpLCJpbXBsaWNpdCIpLGkuY29tcGlsZWRFeHBsaWNpdD1oSyhpLCJleHBsaWNpdCIpLGkuY29tcGlsZWRUeXBlTWFwPV9BZShpLmNvbXBpbGVkSW1wbGljaXQsaS5jb21waWxlZEV4cGxpY2l0KSxpfSwiZXh0ZW5kIik7REFlPUc5LExBZT1uZXcgUmEoInRhZzp5YW1sLm9yZywyMDAyOnN0ciIse2tpbmQ6InNjYWxhciIsY29uc3RydWN0Om8oZnVuY3Rpb24odCl7cmV0dXJuIHQhPT1udWxsP3Q6IiJ9LCJjb25zdHJ1Y3QiKX0pLFJBZT1uZXcgUmEoInRhZzp5YW1sLm9yZywyMDAyOnNlcSIse2tpbmQ6InNlcXVlbmNlIixjb25zdHJ1Y3Q6byhmdW5jdGlvbih0KXtyZXR1cm4gdCE9PW51bGw/dDpbXX0sImNvbnN0cnVjdCIpfSksTkFlPW5ldyBSYSgidGFnOnlhbWwub3JnLDIwMDI6bWFwIix7a2luZDoibWFwcGluZyIsY29uc3RydWN0Om8oZnVuY3Rpb24odCl7cmV0dXJuIHQhPT1udWxsP3Q6e319LCJjb25zdHJ1Y3QiKX0pLE1BZT1uZXcgREFlKHtleHBsaWNpdDpbTEFlLFJBZSxOQWVdfSk7byhJQWUsInJlc29sdmVZYW1sTnVsbCIpO28oT0FlLCJjb25zdHJ1Y3RZYW1sTnVsbCIpO28oUEFlLCJpc051bGwiKTtCQWU9bmV3IFJhKCJ0YWc6eWFtbC5vcmcsMjAwMjpudWxsIix7a2luZDoic2NhbGFyIixyZXNvbHZlOklBZSxjb25zdHJ1Y3Q6T0FlLHByZWRpY2F0ZTpQQWUscmVwcmVzZW50OntjYW5vbmljYWw6byhmdW5jdGlvbigpe3JldHVybiJ+In0sImNhbm9uaWNhbCIpLGxvd2VyY2FzZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIm51bGwifSwibG93ZXJjYXNlIiksdXBwZXJjYXNlOm8oZnVuY3Rpb24oKXtyZXR1cm4iTlVMTCJ9LCJ1cHBlcmNhc2UiKSxjYW1lbGNhc2U6byhmdW5jdGlvbigpe3JldHVybiJOdWxsIn0sImNhbWVsY2FzZSIpLGVtcHR5Om8oZnVuY3Rpb24oKXtyZXR1cm4iIn0sImVtcHR5Iil9LGRlZmF1bHRTdHlsZToibG93ZXJjYXNlIn0pO28oRkFlLCJyZXNvbHZlWWFtbEJvb2xlYW4iKTtvKCRBZSwiY29uc3RydWN0WWFtbEJvb2xlYW4iKTtvKHpBZSwiaXNCb29sZWFuIik7R0FlPW5ldyBSYSgidGFnOnlhbWwub3JnLDIwMDI6Ym9vbCIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTpGQWUsY29uc3RydWN0OiRBZSxwcmVkaWNhdGU6ekFlLHJlcHJlc2VudDp7bG93ZXJjYXNlOm8oZnVuY3Rpb24odCl7cmV0dXJuIHQ/InRydWUiOiJmYWxzZSJ9LCJsb3dlcmNhc2UiKSx1cHBlcmNhc2U6byhmdW5jdGlvbih0KXtyZXR1cm4gdD8iVFJVRSI6IkZBTFNFIn0sInVwcGVyY2FzZSIpLGNhbWVsY2FzZTpvKGZ1bmN0aW9uKHQpe3JldHVybiB0PyJUcnVlIjoiRmFsc2UifSwiY2FtZWxjYXNlIil9LGRlZmF1bHRTdHlsZToibG93ZXJjYXNlIn0pO28oVkFlLCJpc0hleENvZGUiKTtvKFVBZSwiaXNPY3RDb2RlIik7byhIQWUsImlzRGVjQ29kZSIpO28oV0FlLCJyZXNvbHZlWWFtbEludGVnZXIiKTtvKHFBZSwiY29uc3RydWN0WWFtbEludGVnZXIiKTtvKFlBZSwiaXNJbnRlZ2VyIik7WEFlPW5ldyBSYSgidGFnOnlhbWwub3JnLDIwMDI6aW50Iix7a2luZDoic2NhbGFyIixyZXNvbHZlOldBZSxjb25zdHJ1Y3Q6cUFlLHByZWRpY2F0ZTpZQWUscmVwcmVzZW50OntiaW5hcnk6byhmdW5jdGlvbih0KXtyZXR1cm4gdD49MD8iMGIiK3QudG9TdHJpbmcoMik6Ii0wYiIrdC50b1N0cmluZygyKS5zbGljZSgxKX0sImJpbmFyeSIpLG9jdGFsOm8oZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTA/IjBvIit0LnRvU3RyaW5nKDgpOiItMG8iK3QudG9TdHJpbmcoOCkuc2xpY2UoMSl9LCJvY3RhbCIpLGRlY2ltYWw6byhmdW5jdGlvbih0KXtyZXR1cm4gdC50b1N0cmluZygxMCl9LCJkZWNpbWFsIiksaGV4YWRlY2ltYWw6byhmdW5jdGlvbih0KXtyZXR1cm4gdD49MD8iMHgiK3QudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk6Ii0weCIrdC50b1N0cmluZygxNikudG9VcHBlckNhc2UoKS5zbGljZSgxKX0sImhleGFkZWNpbWFsIil9LGRlZmF1bHRTdHlsZToiZGVjaW1hbCIsc3R5bGVBbGlhc2VzOntiaW5hcnk6WzIsImJpbiJdLG9jdGFsOls4LCJvY3QiXSxkZWNpbWFsOlsxMCwiZGVjIl0saGV4YWRlY2ltYWw6WzE2LCJoZXgiXX19KSxqQWU9bmV3IFJlZ0V4cCgiXig/OlstK10/KD86WzAtOV1bMC05X10qKSg/OlxcLlswLTlfXSopPyg/OltlRV1bLStdP1swLTldKyk/fFxcLlswLTlfXSsoPzpbZUVdWy0rXT9bMC05XSspP3xbLStdP1xcLig/OmluZnxJbmZ8SU5GKXxcXC4oPzpuYW58TmFOfE5BTikpJCIpO28oS0FlLCJyZXNvbHZlWWFtbEZsb2F0Iik7byhRQWUsImNvbnN0cnVjdFlhbWxGbG9hdCIpO1pBZT0vXlstK10/WzAtOV0rZS87byhKQWUsInJlcHJlc2VudFlhbWxGbG9hdCIpO28oZThlLCJpc0Zsb2F0Iik7dDhlPW5ldyBSYSgidGFnOnlhbWwub3JnLDIwMDI6ZmxvYXQiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6S0FlLGNvbnN0cnVjdDpRQWUscHJlZGljYXRlOmU4ZSxyZXByZXNlbnQ6SkFlLGRlZmF1bHRTdHlsZToibG93ZXJjYXNlIn0pLF9LPU1BZS5leHRlbmQoe2ltcGxpY2l0OltCQWUsR0FlLFhBZSx0OGVdfSkscjhlPV9LLERLPW5ldyBSZWdFeHAoIl4oWzAtOV1bMC05XVswLTldWzAtOV0pLShbMC05XVswLTldKS0oWzAtOV1bMC05XSkkIiksTEs9bmV3IFJlZ0V4cCgiXihbMC05XVswLTldWzAtOV1bMC05XSktKFswLTldWzAtOV0/KS0oWzAtOV1bMC05XT8pKD86W1R0XXxbIFxcdF0rKShbMC05XVswLTldPyk6KFswLTldWzAtOV0pOihbMC05XVswLTldKSg/OlxcLihbMC05XSopKT8oPzpbIFxcdF0qKFp8KFstK10pKFswLTldWzAtOV0/KSg/OjooWzAtOV1bMC05XSkpPykpPyQiKTtvKG44ZSwicmVzb2x2ZVlhbWxUaW1lc3RhbXAiKTtvKGk4ZSwiY29uc3RydWN0WWFtbFRpbWVzdGFtcCIpO28oYThlLCJyZXByZXNlbnRZYW1sVGltZXN0YW1wIik7czhlPW5ldyBSYSgidGFnOnlhbWwub3JnLDIwMDI6dGltZXN0YW1wIix7a2luZDoic2NhbGFyIixyZXNvbHZlOm44ZSxjb25zdHJ1Y3Q6aThlLGluc3RhbmNlT2Y6RGF0ZSxyZXByZXNlbnQ6YThlfSk7byhvOGUsInJlc29sdmVZYW1sTWVyZ2UiKTtsOGU9bmV3IFJhKCJ0YWc6eWFtbC5vcmcsMjAwMjptZXJnZSIse2tpbmQ6InNjYWxhciIscmVzb2x2ZTpvOGV9KSxxOT1gQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0KXHJgO28oYzhlLCJyZXNvbHZlWWFtbEJpbmFyeSIpO28odThlLCJjb25zdHJ1Y3RZYW1sQmluYXJ5Iik7byhoOGUsInJlcHJlc2VudFlhbWxCaW5hcnkiKTtvKGY4ZSwiaXNCaW5hcnkiKTtkOGU9bmV3IFJhKCJ0YWc6eWFtbC5vcmcsMjAwMjpiaW5hcnkiLHtraW5kOiJzY2FsYXIiLHJlc29sdmU6YzhlLGNvbnN0cnVjdDp1OGUscHJlZGljYXRlOmY4ZSxyZXByZXNlbnQ6aDhlfSkscDhlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksbThlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7byhnOGUsInJlc29sdmVZYW1sT21hcCIpO28oeThlLCJjb25zdHJ1Y3RZYW1sT21hcCIpO3Y4ZT1uZXcgUmEoInRhZzp5YW1sLm9yZywyMDAyOm9tYXAiLHtraW5kOiJzZXF1ZW5jZSIscmVzb2x2ZTpnOGUsY29uc3RydWN0Onk4ZX0pLHg4ZT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO28oYjhlLCJyZXNvbHZlWWFtbFBhaXJzIik7byhUOGUsImNvbnN0cnVjdFlhbWxQYWlycyIpO3c4ZT1uZXcgUmEoInRhZzp5YW1sLm9yZywyMDAyOnBhaXJzIix7a2luZDoic2VxdWVuY2UiLHJlc29sdmU6YjhlLGNvbnN0cnVjdDpUOGV9KSxrOGU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtvKEU4ZSwicmVzb2x2ZVlhbWxTZXQiKTtvKFM4ZSwiY29uc3RydWN0WWFtbFNldCIpO0M4ZT1uZXcgUmEoInRhZzp5YW1sLm9yZywyMDAyOnNldCIse2tpbmQ6Im1hcHBpbmciLHJlc29sdmU6RThlLGNvbnN0cnVjdDpTOGV9KSxSSz1yOGUuZXh0ZW5kKHtpbXBsaWNpdDpbczhlLGw4ZV0sZXhwbGljaXQ6W2Q4ZSx2OGUsdzhlLEM4ZV19KSxZaD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LExUPTEsTks9MixNSz0zLFJUPTQsejk9MSxBOGU9MixmSz0zLF84ZT0vW1x4MDAtXHgwOFx4MEJceDBDXHgwRS1ceDFGXHg3Ri1ceDg0XHg4Ni1ceDlGXHVGRkZFXHVGRkZGXXxbXHVEODAwLVx1REJGRl0oPyFbXHVEQzAwLVx1REZGRl0pfCg/OlteXHVEODAwLVx1REJGRl18XilbXHVEQzAwLVx1REZGRl0vLEQ4ZT0vW1x4ODVcdTIwMjhcdTIwMjldLyxMOGU9L1ssXFtcXVx7XH1dLyxJSz0vXig/OiF8ISF8IVthLXpcLV0rISkkL2ksT0s9L14oPzohfFteLFxbXF1ce1x9XSkoPzolWzAtOWEtZl17Mn18WzAtOWEtelwtIztcL1w/OkAmPVwrXCQsX1wuIX5cKidcKFwpXFtcXV0pKiQvaTtvKGRLLCJfY2xhc3MiKTtvKHZjLCJpc19FT0wiKTtvKEdkLCJpc19XSElURV9TUEFDRSIpO28oT3MsImlzX1dTX09SX0VPTCIpO28oeW0sImlzX0ZMT1dfSU5ESUNBVE9SIik7byhSOGUsImZyb21IZXhDb2RlIik7byhOOGUsImVzY2FwZWRIZXhMZW4iKTtvKE04ZSwiZnJvbURlY2ltYWxDb2RlIik7byhwSywic2ltcGxlRXNjYXBlU2VxdWVuY2UiKTtvKEk4ZSwiY2hhckZyb21Db2RlcG9pbnQiKTtQSz1uZXcgQXJyYXkoMjU2KSxCSz1uZXcgQXJyYXkoMjU2KTtmb3IoemQ9MDt6ZDwyNTY7emQrKylQS1t6ZF09cEsoemQpPzE6MCxCS1t6ZF09cEsoemQpO28oTzhlLCJTdGF0ZSQxIik7byhGSywiZ2VuZXJhdGVFcnJvciIpO28oUXQsInRocm93RXJyb3IiKTtvKE5ULCJ0aHJvd1dhcm5pbmciKTttSz17WUFNTDpvKGZ1bmN0aW9uKGUscixuKXt2YXIgaSxhLHM7ZS52ZXJzaW9uIT09bnVsbCYmUXQoZSwiZHVwbGljYXRpb24gb2YgJVlBTUwgZGlyZWN0aXZlIiksbi5sZW5ndGghPT0xJiZRdChlLCJZQU1MIGRpcmVjdGl2ZSBhY2NlcHRzIGV4YWN0bHkgb25lIGFyZ3VtZW50IiksaT0vXihbMC05XSspXC4oWzAtOV0rKSQvLmV4ZWMoblswXSksaT09PW51bGwmJlF0KGUsImlsbC1mb3JtZWQgYXJndW1lbnQgb2YgdGhlIFlBTUwgZGlyZWN0aXZlIiksYT1wYXJzZUludChpWzFdLDEwKSxzPXBhcnNlSW50KGlbMl0sMTApLGEhPT0xJiZRdChlLCJ1bmFjY2VwdGFibGUgWUFNTCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudCIpLGUudmVyc2lvbj1uWzBdLGUuY2hlY2tMaW5lQnJlYWtzPXM8MixzIT09MSYmcyE9PTImJk5UKGUsInVuc3VwcG9ydGVkIFlBTUwgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQiKX0sImhhbmRsZVlhbWxEaXJlY3RpdmUiKSxUQUc6byhmdW5jdGlvbihlLHIsbil7dmFyIGksYTtuLmxlbmd0aCE9PTImJlF0KGUsIlRBRyBkaXJlY3RpdmUgYWNjZXB0cyBleGFjdGx5IHR3byBhcmd1bWVudHMiKSxpPW5bMF0sYT1uWzFdLElLLnRlc3QoaSl8fFF0KGUsImlsbC1mb3JtZWQgdGFnIGhhbmRsZSAoZmlyc3QgYXJndW1lbnQpIG9mIHRoZSBUQUcgZGlyZWN0aXZlIiksWWguY2FsbChlLnRhZ01hcCxpKSYmUXQoZSwndGhlcmUgaXMgYSBwcmV2aW91c2x5IGRlY2xhcmVkIHN1ZmZpeCBmb3IgIicraSsnIiB0YWcgaGFuZGxlJyksT0sudGVzdChhKXx8UXQoZSwiaWxsLWZvcm1lZCB0YWcgcHJlZml4IChzZWNvbmQgYXJndW1lbnQpIG9mIHRoZSBUQUcgZGlyZWN0aXZlIik7dHJ5e2E9ZGVjb2RlVVJJQ29tcG9uZW50KGEpfWNhdGNoe1F0KGUsInRhZyBwcmVmaXggaXMgbWFsZm9ybWVkOiAiK2EpfWUudGFnTWFwW2ldPWF9LCJoYW5kbGVUYWdEaXJlY3RpdmUiKX07byhxaCwiY2FwdHVyZVNlZ21lbnQiKTtvKGdLLCJtZXJnZU1hcHBpbmdzIik7byh2bSwic3RvcmVNYXBwaW5nUGFpciIpO28oWTksInJlYWRMaW5lQnJlYWsiKTtvKF9pLCJza2lwU2VwYXJhdGlvblNwYWNlIik7byhPVCwidGVzdERvY3VtZW50U2VwYXJhdG9yIik7byhYOSwid3JpdGVGb2xkZWRMaW5lcyIpO28oUDhlLCJyZWFkUGxhaW5TY2FsYXIiKTtvKEI4ZSwicmVhZFNpbmdsZVF1b3RlZFNjYWxhciIpO28oRjhlLCJyZWFkRG91YmxlUXVvdGVkU2NhbGFyIik7bygkOGUsInJlYWRGbG93Q29sbGVjdGlvbiIpO28oejhlLCJyZWFkQmxvY2tTY2FsYXIiKTtvKHlLLCJyZWFkQmxvY2tTZXF1ZW5jZSIpO28oRzhlLCJyZWFkQmxvY2tNYXBwaW5nIik7byhWOGUsInJlYWRUYWdQcm9wZXJ0eSIpO28oVThlLCJyZWFkQW5jaG9yUHJvcGVydHkiKTtvKEg4ZSwicmVhZEFsaWFzIik7byh4bSwiY29tcG9zZU5vZGUiKTtvKFc4ZSwicmVhZERvY3VtZW50Iik7bygkSywibG9hZERvY3VtZW50cyIpO28ocThlLCJsb2FkQWxsJDEiKTtvKFk4ZSwibG9hZCQxIik7WDhlPXE4ZSxqOGU9WThlLHpLPXtsb2FkQWxsOlg4ZSxsb2FkOmo4ZX0sR0s9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxWSz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LGo5PTY1Mjc5LEs4ZT05LHYyPTEwLFE4ZT0xMyxaOGU9MzIsSjhlPTMzLGVfZT0zNCxWOT0zNSx0X2U9Mzcscl9lPTM4LG5fZT0zOSxpX2U9NDIsVUs9NDQsYV9lPTQ1LE1UPTU4LHNfZT02MSxvX2U9NjIsbF9lPTYzLGNfZT02NCxISz05MSxXSz05Myx1X2U9OTYscUs9MTIzLGhfZT0xMjQsWUs9MTI1LE5hPXt9O05hWzBdPSJcXDAiO05hWzddPSJcXGEiO05hWzhdPSJcXGIiO05hWzldPSJcXHQiO05hWzEwXT0iXFxuIjtOYVsxMV09IlxcdiI7TmFbMTJdPSJcXGYiO05hWzEzXT0iXFxyIjtOYVsyN109IlxcZSI7TmFbMzRdPSdcXCInO05hWzkyXT0iXFxcXCI7TmFbMTMzXT0iXFxOIjtOYVsxNjBdPSJcXF8iO05hWzgyMzJdPSJcXEwiO05hWzgyMzNdPSJcXFAiO2ZfZT1bInkiLCJZIiwieWVzIiwiWWVzIiwiWUVTIiwib24iLCJPbiIsIk9OIiwibiIsIk4iLCJubyIsIk5vIiwiTk8iLCJvZmYiLCJPZmYiLCJPRkYiXSxkX2U9L15bLStdP1swLTlfXSsoPzo6WzAtOV9dKykrKD86XC5bMC05X10qKT8kLztvKHBfZSwiY29tcGlsZVN0eWxlTWFwIik7byhtX2UsImVuY29kZUhleCIpO2dfZT0xLHgyPTI7byh5X2UsIlN0YXRlIik7byh2SywiaW5kZW50U3RyaW5nIik7byhVOSwiZ2VuZXJhdGVOZXh0TGluZSIpO28odl9lLCJ0ZXN0SW1wbGljaXRSZXNvbHZpbmciKTtvKElULCJpc1doaXRlc3BhY2UiKTtvKGIyLCJpc1ByaW50YWJsZSIpO28oeEssImlzTnNDaGFyT3JXaGl0ZXNwYWNlIik7byhiSywiaXNQbGFpblNhZmUiKTtvKHhfZSwiaXNQbGFpblNhZmVGaXJzdCIpO28oYl9lLCJpc1BsYWluU2FmZUxhc3QiKTtvKGcyLCJjb2RlUG9pbnRBdCIpO28oWEssIm5lZWRJbmRlbnRJbmRpY2F0b3IiKTtqSz0xLEg5PTIsS0s9MyxRSz00LGdtPTU7byhUX2UsImNob29zZVNjYWxhclN0eWxlIik7byh3X2UsIndyaXRlU2NhbGFyIik7byhUSywiYmxvY2tIZWFkZXIiKTtvKHdLLCJkcm9wRW5kaW5nTmV3bGluZSIpO28oa19lLCJmb2xkU3RyaW5nIik7byhrSywiZm9sZExpbmUiKTtvKEVfZSwiZXNjYXBlU3RyaW5nIik7byhTX2UsIndyaXRlRmxvd1NlcXVlbmNlIik7byhFSywid3JpdGVCbG9ja1NlcXVlbmNlIik7byhDX2UsIndyaXRlRmxvd01hcHBpbmciKTtvKEFfZSwid3JpdGVCbG9ja01hcHBpbmciKTtvKFNLLCJkZXRlY3RUeXBlIik7byhSdSwid3JpdGVOb2RlIik7byhfX2UsImdldER1cGxpY2F0ZVJlZmVyZW5jZXMiKTtvKFc5LCJpbnNwZWN0Tm9kZSIpO28oRF9lLCJkdW1wJDEiKTtMX2U9RF9lLFJfZT17ZHVtcDpMX2V9O28oSzksInJlbmFtZWQiKTtibT1fSyxUbT16Sy5sb2FkLHFTdD16Sy5sb2FkQWxsLFlTdD1SX2UuZHVtcCxYU3Q9SzkoInNhZmVMb2FkIiwibG9hZCIpLGpTdD1LOSgic2FmZUxvYWRBbGwiLCJsb2FkQWxsIiksS1N0PUs5KCJzYWZlRHVtcCIsImR1bXAiKX0pO2Z1bmN0aW9uIHRMKCl7cmV0dXJue2FzeW5jOiExLGJyZWFrczohMSxleHRlbnNpb25zOm51bGwsZ2ZtOiEwLGhvb2tzOm51bGwscGVkYW50aWM6ITEscmVuZGVyZXI6bnVsbCxzaWxlbnQ6ITEsdG9rZW5pemVyOm51bGwsd2Fsa1Rva2VuczpudWxsfX1mdW5jdGlvbiBuUSh0KXtVZD10fWZ1bmN0aW9uIG5uKHQsZT0iIil7bGV0IHI9dHlwZW9mIHQ9PSJzdHJpbmciP3Q6dC5zb3VyY2Usbj17cmVwbGFjZTpvKChpLGEpPT57bGV0IHM9dHlwZW9mIGE9PSJzdHJpbmciP2E6YS5zb3VyY2U7cmV0dXJuIHM9cy5yZXBsYWNlKHNzLmNhcmV0LCIkMSIpLHI9ci5yZXBsYWNlKGkscyksbn0sInJlcGxhY2UiKSxnZXRSZWdleDpvKCgpPT5uZXcgUmVnRXhwKHIsZSksImdldFJlZ2V4Iil9O3JldHVybiBufWZ1bmN0aW9uIHhjKHQsZSl7aWYoZSl7aWYoc3MuZXNjYXBlVGVzdC50ZXN0KHQpKXJldHVybiB0LnJlcGxhY2Uoc3MuZXNjYXBlUmVwbGFjZSxKSyl9ZWxzZSBpZihzcy5lc2NhcGVUZXN0Tm9FbmNvZGUudGVzdCh0KSlyZXR1cm4gdC5yZXBsYWNlKHNzLmVzY2FwZVJlcGxhY2VOb0VuY29kZSxKSyk7cmV0dXJuIHR9ZnVuY3Rpb24gZVEodCl7dHJ5e3Q9ZW5jb2RlVVJJKHQpLnJlcGxhY2Uoc3MucGVyY2VudERlY29kZSwiJSIpfWNhdGNoe3JldHVybiBudWxsfXJldHVybiB0fWZ1bmN0aW9uIHRRKHQsZSl7bGV0IHI9dC5yZXBsYWNlKHNzLmZpbmRQaXBlLChhLHMsbCk9PntsZXQgdT0hMSxoPXM7Zm9yKDstLWg+PTAmJmxbaF09PT0iXFwiOyl1PSF1O3JldHVybiB1PyJ8IjoiIHwifSksbj1yLnNwbGl0KHNzLnNwbGl0UGlwZSksaT0wO2lmKG5bMF0udHJpbSgpfHxuLnNoaWZ0KCksbi5sZW5ndGg+MCYmIW4uYXQoLTEpPy50cmltKCkmJm4ucG9wKCksZSlpZihuLmxlbmd0aD5lKW4uc3BsaWNlKGUpO2Vsc2UgZm9yKDtuLmxlbmd0aDxlOyluLnB1c2goIiIpO2Zvcig7aTxuLmxlbmd0aDtpKyspbltpXT1uW2ldLnRyaW0oKS5yZXBsYWNlKHNzLnNsYXNoUGlwZSwifCIpO3JldHVybiBufWZ1bmN0aW9uIHcyKHQsZSxyKXtsZXQgbj10Lmxlbmd0aDtpZihuPT09MClyZXR1cm4iIjtsZXQgaT0wO2Zvcig7aTxuOyl7bGV0IGE9dC5jaGFyQXQobi1pLTEpO2lmKGE9PT1lJiYhcilpKys7ZWxzZSBpZihhIT09ZSYmcilpKys7ZWxzZSBicmVha31yZXR1cm4gdC5zbGljZSgwLG4taSl9ZnVuY3Rpb24gaERlKHQsZSl7aWYodC5pbmRleE9mKGVbMV0pPT09LTEpcmV0dXJuLTE7bGV0IHI9MDtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKylpZih0W25dPT09IlxcIiluKys7ZWxzZSBpZih0W25dPT09ZVswXSlyKys7ZWxzZSBpZih0W25dPT09ZVsxXSYmKHItLSxyPDApKXJldHVybiBuO3JldHVybiByPjA/LTI6LTF9ZnVuY3Rpb24gclEodCxlLHIsbixpKXtsZXQgYT1lLmhyZWYscz1lLnRpdGxlfHxudWxsLGw9dFsxXS5yZXBsYWNlKGkub3RoZXIub3V0cHV0TGlua1JlcGxhY2UsIiQxIik7bi5zdGF0ZS5pbkxpbms9ITA7bGV0IHU9e3R5cGU6dFswXS5jaGFyQXQoMCk9PT0iISI/ImltYWdlIjoibGluayIscmF3OnIsaHJlZjphLHRpdGxlOnMsdGV4dDpsLHRva2VuczpuLmlubGluZVRva2VucyhsKX07cmV0dXJuIG4uc3RhdGUuaW5MaW5rPSExLHV9ZnVuY3Rpb24gZkRlKHQsZSxyKXtsZXQgbj10Lm1hdGNoKHIub3RoZXIuaW5kZW50Q29kZUNvbXBlbnNhdGlvbik7aWYobj09PW51bGwpcmV0dXJuIGU7bGV0IGk9blsxXTtyZXR1cm4gZS5zcGxpdChgCmApLm1hcChhPT57bGV0IHM9YS5tYXRjaChyLm90aGVyLmJlZ2lubmluZ1NwYWNlKTtpZihzPT09bnVsbClyZXR1cm4gYTtsZXRbbF09cztyZXR1cm4gbC5sZW5ndGg+PWkubGVuZ3RoP2Euc2xpY2UoaS5sZW5ndGgpOmF9KS5qb2luKGAKYCl9ZnVuY3Rpb24gSnIodCxlKXtyZXR1cm4gVmQucGFyc2UodCxlKX12YXIgVWQsazIsc3MsTl9lLE1fZSxJX2UsRTIsT19lLHJMLGlRLGFRLFBfZSxuTCxCX2UsaUwsRl9lLCRfZSxWVCxhTCx6X2Usc1EsR19lLHNMLFpLLFZfZSxVX2UsSF9lLFdfZSxvUSxxX2UsVVQsb0wsbFEsWV9lLGNRLFhfZSxqX2UsS19lLHVRLFFfZSxaX2UsaFEsSl9lLGVEZSx0RGUsckRlLG5EZSxpRGUsYURlLCRULHNEZSxmUSxkUSxvRGUsbEwsbERlLFo5LGNEZSxCVCxUMix1RGUsSksselQsTnUsR1QsY0wsTXUsRlQsZERlLFZkLFpTdCxKU3QsZTZ0LHQ2dCxyNnQsbjZ0LGk2dCxwUT1OKCgpPT57InVzZSBzdHJpY3QiO28odEwsIk0iKTtVZD10TCgpO28oblEsIkgiKTtrMj17ZXhlYzpvKCgpPT5udWxsLCJleGVjIil9O28obm4sImgiKTtzcz17Y29kZVJlbW92ZUluZGVudDovXig/OiB7MSw0fXwgezAsM31cdCkvZ20sb3V0cHV0TGlua1JlcGxhY2U6L1xcKFtcW1xdXSkvZyxpbmRlbnRDb2RlQ29tcGVuc2F0aW9uOi9eKFxzKykoPzpgYGApLyxiZWdpbm5pbmdTcGFjZTovXlxzKy8sZW5kaW5nSGFzaDovIyQvLHN0YXJ0aW5nU3BhY2VDaGFyOi9eIC8sZW5kaW5nU3BhY2VDaGFyOi8gJC8sbm9uU3BhY2VDaGFyOi9bXiBdLyxuZXdMaW5lQ2hhckdsb2JhbDovXG4vZyx0YWJDaGFyR2xvYmFsOi9cdC9nLG11bHRpcGxlU3BhY2VHbG9iYWw6L1xzKy9nLGJsYW5rTGluZTovXlsgXHRdKiQvLGRvdWJsZUJsYW5rTGluZTovXG5bIFx0XSpcblsgXHRdKiQvLGJsb2NrcXVvdGVTdGFydDovXiB7MCwzfT4vLGJsb2NrcXVvdGVTZXRleHRSZXBsYWNlOi9cbiB7MCwzfSgoPzo9K3wtKykgKikoPz1cbnwkKS9nLGJsb2NrcXVvdGVTZXRleHRSZXBsYWNlMjovXiB7MCwzfT5bIFx0XT8vZ20sbGlzdFJlcGxhY2VUYWJzOi9eXHQrLyxsaXN0UmVwbGFjZU5lc3Rpbmc6L14gezEsNH0oPz0oIHs0fSkqW14gXSkvZyxsaXN0SXNUYXNrOi9eXFtbIHhYXVxdIC8sbGlzdFJlcGxhY2VUYXNrOi9eXFtbIHhYXVxdICsvLGFueUxpbmU6L1xuLipcbi8saHJlZkJyYWNrZXRzOi9ePCguKik+JC8sdGFibGVEZWxpbWl0ZXI6L1s6fF0vLHRhYmxlQWxpZ25DaGFyczovXlx8fFx8ICokL2csdGFibGVSb3dCbGFua0xpbmU6L1xuWyBcdF0qJC8sdGFibGVBbGlnblJpZ2h0Oi9eICotKzogKiQvLHRhYmxlQWxpZ25DZW50ZXI6L14gKjotKzogKiQvLHRhYmxlQWxpZ25MZWZ0Oi9eICo6LSsgKiQvLHN0YXJ0QVRhZzovXjxhIC9pLGVuZEFUYWc6L148XC9hPi9pLHN0YXJ0UHJlU2NyaXB0VGFnOi9ePChwcmV8Y29kZXxrYmR8c2NyaXB0KShcc3w+KS9pLGVuZFByZVNjcmlwdFRhZzovXjxcLyhwcmV8Y29kZXxrYmR8c2NyaXB0KShcc3w+KS9pLHN0YXJ0QW5nbGVCcmFja2V0Oi9ePC8sZW5kQW5nbGVCcmFja2V0Oi8+JC8scGVkYW50aWNIcmVmVGl0bGU6L14oW14nIl0qW15cc10pXHMrKFsnIl0pKC4qKVwyLyx1bmljb2RlQWxwaGFOdW1lcmljOi9bXHB7TH1ccHtOfV0vdSxlc2NhcGVUZXN0Oi9bJjw+IiddLyxlc2NhcGVSZXBsYWNlOi9bJjw+IiddL2csZXNjYXBlVGVzdE5vRW5jb2RlOi9bPD4iJ118Jig/ISgjXGR7MSw3fXwjW1h4XVthLWZBLUYwLTldezEsNn18XHcrKTspLyxlc2NhcGVSZXBsYWNlTm9FbmNvZGU6L1s8PiInXXwmKD8hKCNcZHsxLDd9fCNbWHhdW2EtZkEtRjAtOV17MSw2fXxcdyspOykvZyx1bmVzY2FwZVRlc3Q6LyYoIyg/OlxkKyl8KD86I3hbMC05QS1GYS1mXSspfCg/Olx3KykpOz8vaWcsY2FyZXQ6LyhefFteXFtdKVxeL2cscGVyY2VudERlY29kZTovJTI1L2csZmluZFBpcGU6L1x8L2csc3BsaXRQaXBlOi8gXHwvLHNsYXNoUGlwZTovXFxcfC9nLGNhcnJpYWdlUmV0dXJuOi9cclxufFxyL2csc3BhY2VMaW5lOi9eICskL2dtLG5vdFNwYWNlU3RhcnQ6L15cUyovLGVuZGluZ05ld2xpbmU6L1xuJC8sbGlzdEl0ZW1SZWdleDpvKHQ9Pm5ldyBSZWdFeHAoYF4oIHswLDN9JHt0fSkoKD86WwkgXVteXFxuXSopPyg/OlxcbnwkKSlgKSwibGlzdEl0ZW1SZWdleCIpLG5leHRCdWxsZXRSZWdleDpvKHQ9Pm5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLHQtMSl9fSg/OlsqKy1dfFxcZHsxLDl9Wy4pXSkoKD86WyAJXVteXFxuXSopPyg/OlxcbnwkKSlgKSwibmV4dEJ1bGxldFJlZ2V4IiksaHJSZWdleDpvKHQ9Pm5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLHQtMSl9fSgoPzotICopezMsfXwoPzpfICopezMsfXwoPzpcXCogKil7Myx9KSg/Olxcbit8JClgKSwiaHJSZWdleCIpLGZlbmNlc0JlZ2luUmVnZXg6byh0PT5uZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMyx0LTEpfX0oPzpcYFxgXGB8fn5+KWApLCJmZW5jZXNCZWdpblJlZ2V4IiksaGVhZGluZ0JlZ2luUmVnZXg6byh0PT5uZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMyx0LTEpfX0jYCksImhlYWRpbmdCZWdpblJlZ2V4IiksaHRtbEJlZ2luUmVnZXg6byh0PT5uZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMyx0LTEpfX08KD86W2Etel0uKj58IS0tKWAsImkiKSwiaHRtbEJlZ2luUmVnZXgiKX0sTl9lPS9eKD86WyBcdF0qKD86XG58JCkpKy8sTV9lPS9eKCg/OiB7NH18IHswLDN9XHQpW15cbl0rKD86XG4oPzpbIFx0XSooPzpcbnwkKSkqKT8pKy8sSV9lPS9eIHswLDN9KGB7Myx9KD89W15gXG5dKig/OlxufCQpKXx+ezMsfSkoW15cbl0qKSg/OlxufCQpKD86fChbXHNcU10qPykoPzpcbnwkKSkoPzogezAsM31cMVt+YF0qICooPz1cbnwkKXwkKS8sRTI9L14gezAsM30oKD86LVtcdCBdKil7Myx9fCg/Ol9bIFx0XSopezMsfXwoPzpcKlsgXHRdKil7Myx9KSg/OlxuK3wkKS8sT19lPS9eIHswLDN9KCN7MSw2fSkoPz1cc3wkKSguKikoPzpcbit8JCkvLHJMPS8oPzpbKistXXxcZHsxLDl9Wy4pXSkvLGlRPS9eKD8hYnVsbCB8YmxvY2tDb2RlfGZlbmNlc3xibG9ja3F1b3RlfGhlYWRpbmd8aHRtbHx0YWJsZSkoKD86Lnxcbig/IVxzKj9cbnxidWxsIHxibG9ja0NvZGV8ZmVuY2VzfGJsb2NrcXVvdGV8aGVhZGluZ3xodG1sfHRhYmxlKSkrPylcbiB7MCwzfSg9K3wtKykgKig/OlxuK3wkKS8sYVE9bm4oaVEpLnJlcGxhY2UoL2J1bGwvZyxyTCkucmVwbGFjZSgvYmxvY2tDb2RlL2csLyg/OiB7NH18IHswLDN9XHQpLykucmVwbGFjZSgvZmVuY2VzL2csLyB7MCwzfSg/OmB7Myx9fH57Myx9KS8pLnJlcGxhY2UoL2Jsb2NrcXVvdGUvZywvIHswLDN9Pi8pLnJlcGxhY2UoL2hlYWRpbmcvZywvIHswLDN9I3sxLDZ9LykucmVwbGFjZSgvaHRtbC9nLC8gezAsM308W15cbj5dKz5cbi8pLnJlcGxhY2UoL1x8dGFibGUvZywiIikuZ2V0UmVnZXgoKSxQX2U9bm4oaVEpLnJlcGxhY2UoL2J1bGwvZyxyTCkucmVwbGFjZSgvYmxvY2tDb2RlL2csLyg/OiB7NH18IHswLDN9XHQpLykucmVwbGFjZSgvZmVuY2VzL2csLyB7MCwzfSg/OmB7Myx9fH57Myx9KS8pLnJlcGxhY2UoL2Jsb2NrcXVvdGUvZywvIHswLDN9Pi8pLnJlcGxhY2UoL2hlYWRpbmcvZywvIHswLDN9I3sxLDZ9LykucmVwbGFjZSgvaHRtbC9nLC8gezAsM308W15cbj5dKz5cbi8pLnJlcGxhY2UoL3RhYmxlL2csLyB7MCwzfVx8Pyg/Ols6XC0gXSpcfCkrW1w6XC0gXSpcbi8pLmdldFJlZ2V4KCksbkw9L14oW15cbl0rKD86XG4oPyFocnxoZWFkaW5nfGxoZWFkaW5nfGJsb2NrcXVvdGV8ZmVuY2VzfGxpc3R8aHRtbHx0YWJsZXwgK1xuKVteXG5dKykqKS8sQl9lPS9eW15cbl0rLyxpTD0vKD8hXHMqXF0pKD86XFwufFteXFtcXVxcXSkrLyxGX2U9bm4oL14gezAsM31cWyhsYWJlbClcXTogKig/OlxuWyBcdF0qKT8oW148XHNdW15cc10qfDwuKj8+KSg/Oig/OiArKD86XG5bIFx0XSopP3wgKlxuWyBcdF0qKSh0aXRsZSkpPyAqKD86XG4rfCQpLykucmVwbGFjZSgibGFiZWwiLGlMKS5yZXBsYWNlKCJ0aXRsZSIsLyg/OiIoPzpcXCI/fFteIlxcXSkqInwnW14nXG5dKig/OlxuW14nXG5dKykqXG4/J3xcKFteKCldKlwpKS8pLmdldFJlZ2V4KCksJF9lPW5uKC9eKCB7MCwzfWJ1bGwpKFsgXHRdW15cbl0rPyk/KD86XG58JCkvKS5yZXBsYWNlKC9idWxsL2csckwpLmdldFJlZ2V4KCksVlQ9ImFkZHJlc3N8YXJ0aWNsZXxhc2lkZXxiYXNlfGJhc2Vmb250fGJsb2NrcXVvdGV8Ym9keXxjYXB0aW9ufGNlbnRlcnxjb2x8Y29sZ3JvdXB8ZGR8ZGV0YWlsc3xkaWFsb2d8ZGlyfGRpdnxkbHxkdHxmaWVsZHNldHxmaWdjYXB0aW9ufGZpZ3VyZXxmb290ZXJ8Zm9ybXxmcmFtZXxmcmFtZXNldHxoWzEtNl18aGVhZHxoZWFkZXJ8aHJ8aHRtbHxpZnJhbWV8bGVnZW5kfGxpfGxpbmt8bWFpbnxtZW51fG1lbnVpdGVtfG1ldGF8bmF2fG5vZnJhbWVzfG9sfG9wdGdyb3VwfG9wdGlvbnxwfHBhcmFtfHNlYXJjaHxzZWN0aW9ufHN1bW1hcnl8dGFibGV8dGJvZHl8dGR8dGZvb3R8dGh8dGhlYWR8dGl0bGV8dHJ8dHJhY2t8dWwiLGFMPS88IS0tKD86LT8+fFtcc1xTXSo/KD86LS0+fCQpKS8sel9lPW5uKCJeIHswLDN9KD86PChzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhKVtcXHM+XVtcXHNcXFNdKj8oPzo8L1xcMT5bXlxcbl0qXFxuK3wkKXxjb21tZW50W15cXG5dKihcXG4rfCQpfDxcXD9bXFxzXFxTXSo/KD86XFw/Plxcbip8JCl8PCFbQS1aXVtcXHNcXFNdKj8oPzo+XFxuKnwkKXw8IVxcW0NEQVRBXFxbW1xcc1xcU10qPyg/OlxcXVxcXT5cXG4qfCQpfDwvPyh0YWcpKD86ICt8XFxufC8/PilbXFxzXFxTXSo/KD86KD86XFxuWyAJXSopK1xcbnwkKXw8KD8hc2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYSkoW2Etel1bXFx3LV0qKSg/OmF0dHJpYnV0ZSkqPyAqLz8+KD89WyBcXHRdKig/OlxcbnwkKSlbXFxzXFxTXSo/KD86KD86XFxuWyAJXSopK1xcbnwkKXw8Lyg/IXNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWEpW2Etel1bXFx3LV0qXFxzKj4oPz1bIFxcdF0qKD86XFxufCQpKVtcXHNcXFNdKj8oPzooPzpcXG5bIAldKikrXFxufCQpKSIsImkiKS5yZXBsYWNlKCJjb21tZW50IixhTCkucmVwbGFjZSgidGFnIixWVCkucmVwbGFjZSgiYXR0cmlidXRlIiwvICtbYS16QS1aOl9dW1x3LjotXSooPzogKj0gKiJbXiJcbl0qInwgKj0gKidbXidcbl0qJ3wgKj0gKlteXHMiJz08PmBdKyk/LykuZ2V0UmVnZXgoKSxzUT1ubihuTCkucmVwbGFjZSgiaHIiLEUyKS5yZXBsYWNlKCJoZWFkaW5nIiwiIHswLDN9I3sxLDZ9KD86XFxzfCQpIikucmVwbGFjZSgifGxoZWFkaW5nIiwiIikucmVwbGFjZSgifHRhYmxlIiwiIikucmVwbGFjZSgiYmxvY2txdW90ZSIsIiB7MCwzfT4iKS5yZXBsYWNlKCJmZW5jZXMiLCIgezAsM30oPzpgezMsfSg/PVteYFxcbl0qXFxuKXx+ezMsfSlbXlxcbl0qXFxuIikucmVwbGFjZSgibGlzdCIsIiB7MCwzfSg/OlsqKy1dfDFbLildKSAiKS5yZXBsYWNlKCJodG1sIiwiPC8/KD86dGFnKSg/OiArfFxcbnwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSkiKS5yZXBsYWNlKCJ0YWciLFZUKS5nZXRSZWdleCgpLEdfZT1ubigvXiggezAsM30+ID8ocGFyYWdyYXBofFteXG5dKikoPzpcbnwkKSkrLykucmVwbGFjZSgicGFyYWdyYXBoIixzUSkuZ2V0UmVnZXgoKSxzTD17YmxvY2txdW90ZTpHX2UsY29kZTpNX2UsZGVmOkZfZSxmZW5jZXM6SV9lLGhlYWRpbmc6T19lLGhyOkUyLGh0bWw6el9lLGxoZWFkaW5nOmFRLGxpc3Q6JF9lLG5ld2xpbmU6Tl9lLHBhcmFncmFwaDpzUSx0YWJsZTprMix0ZXh0OkJfZX0sWks9bm4oIl4gKihbXlxcbiBdLiopXFxuIHswLDN9KCg/OlxcfCAqKT86Py0rOj8gKig/OlxcfCAqOj8tKzo/ICopKig/OlxcfCAqKT8pKD86XFxuKCg/Oig/ISAqXFxufGhyfGhlYWRpbmd8YmxvY2txdW90ZXxjb2RlfGZlbmNlc3xsaXN0fGh0bWwpLiooPzpcXG58JCkpKilcXG4qfCQpIikucmVwbGFjZSgiaHIiLEUyKS5yZXBsYWNlKCJoZWFkaW5nIiwiIHswLDN9I3sxLDZ9KD86XFxzfCQpIikucmVwbGFjZSgiYmxvY2txdW90ZSIsIiB7MCwzfT4iKS5yZXBsYWNlKCJjb2RlIiwiKD86IHs0fXwgezAsM30JKVteXFxuXSIpLnJlcGxhY2UoImZlbmNlcyIsIiB7MCwzfSg/OmB7Myx9KD89W15gXFxuXSpcXG4pfH57Myx9KVteXFxuXSpcXG4iKS5yZXBsYWNlKCJsaXN0IiwiIHswLDN9KD86WyorLV18MVsuKV0pICIpLnJlcGxhY2UoImh0bWwiLCI8Lz8oPzp0YWcpKD86ICt8XFxufC8/Pil8PCg/OnNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWF8IS0tKSIpLnJlcGxhY2UoInRhZyIsVlQpLmdldFJlZ2V4KCksVl9lPXsuLi5zTCxsaGVhZGluZzpQX2UsdGFibGU6WksscGFyYWdyYXBoOm5uKG5MKS5yZXBsYWNlKCJociIsRTIpLnJlcGxhY2UoImhlYWRpbmciLCIgezAsM30jezEsNn0oPzpcXHN8JCkiKS5yZXBsYWNlKCJ8bGhlYWRpbmciLCIiKS5yZXBsYWNlKCJ0YWJsZSIsWkspLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgiZmVuY2VzIiwiIHswLDN9KD86YHszLH0oPz1bXmBcXG5dKlxcbil8fnszLH0pW15cXG5dKlxcbiIpLnJlcGxhY2UoImxpc3QiLCIgezAsM30oPzpbKistXXwxWy4pXSkgIikucmVwbGFjZSgiaHRtbCIsIjwvPyg/OnRhZykoPzogK3xcXG58Lz8+KXw8KD86c2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYXwhLS0pIikucmVwbGFjZSgidGFnIixWVCkuZ2V0UmVnZXgoKX0sVV9lPXsuLi5zTCxodG1sOm5uKGBeICooPzpjb21tZW50ICooPzpcXG58XFxzKiQpfDwodGFnKVtcXHNcXFNdKz88L1xcMT4gKig/OlxcbnsyLH18XFxzKiQpfDx0YWcoPzoiW14iXSoifCdbXiddKid8XFxzW14nIi8+XFxzXSopKj8vPz4gKig/OlxcbnsyLH18XFxzKiQpKWApLnJlcGxhY2UoImNvbW1lbnQiLGFMKS5yZXBsYWNlKC90YWcvZywiKD8hKD86YXxlbXxzdHJvbmd8c21hbGx8c3xjaXRlfHF8ZGZufGFiYnJ8ZGF0YXx0aW1lfGNvZGV8dmFyfHNhbXB8a2JkfHN1YnxzdXB8aXxifHV8bWFya3xydWJ5fHJ0fHJwfGJkaXxiZG98c3Bhbnxicnx3YnJ8aW5zfGRlbHxpbWcpXFxiKVxcdysoPyE6fFteXFx3XFxzQF0qQClcXGIiKS5nZXRSZWdleCgpLGRlZjovXiAqXFsoW15cXV0rKVxdOiAqPD8oW15ccz5dKyk+Pyg/OiArKFsiKF1bXlxuXStbIildKSk/ICooPzpcbit8JCkvLGhlYWRpbmc6L14oI3sxLDZ9KSguKikoPzpcbit8JCkvLGZlbmNlczprMixsaGVhZGluZzovXiguKz8pXG4gezAsM30oPSt8LSspICooPzpcbit8JCkvLHBhcmFncmFwaDpubihuTCkucmVwbGFjZSgiaHIiLEUyKS5yZXBsYWNlKCJoZWFkaW5nIixgICojezEsNn0gKlteCl1gKS5yZXBsYWNlKCJsaGVhZGluZyIsYVEpLnJlcGxhY2UoInx0YWJsZSIsIiIpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgifGZlbmNlcyIsIiIpLnJlcGxhY2UoInxsaXN0IiwiIikucmVwbGFjZSgifGh0bWwiLCIiKS5yZXBsYWNlKCJ8dGFnIiwiIikuZ2V0UmVnZXgoKX0sSF9lPS9eXFwoWyEiIyQlJicoKSorLFwtLi86Ozw9Pj9AXFtcXVxcXl9ge3x9fl0pLyxXX2U9L14oYCspKFteYF18W15gXVtcc1xTXSo/W15gXSlcMSg/IWApLyxvUT0vXiggezIsfXxcXClcbig/IVxzKiQpLyxxX2U9L14oYCt8W15gXSkoPzooPz0gezIsfVxuKXxbXHNcU10qPyg/Oig/PVtcXDwhXFtgKl9dfFxiX3wkKXxbXiBdKD89IHsyLH1cbikpKS8sVVQ9L1tccHtQfVxwe1N9XS91LG9MPS9bXHNccHtQfVxwe1N9XS91LGxRPS9bXlxzXHB7UH1ccHtTfV0vdSxZX2U9bm4oL14oKD8hWypfXSlwdW5jdFNwYWNlKS8sInUiKS5yZXBsYWNlKC9wdW5jdFNwYWNlL2csb0wpLmdldFJlZ2V4KCksY1E9Lyg/IX4pW1xwe1B9XHB7U31dL3UsWF9lPS8oPyF+KVtcc1xwe1B9XHB7U31dL3Usal9lPS8oPzpbXlxzXHB7UH1ccHtTfV18fikvdSxLX2U9L1xbW15bXF1dKj9cXVwoKD86XFwufFteXFxcKFwpXXxcKCg/OlxcLnxbXlxcXChcKV0pKlwpKSpcKXxgW15gXSo/YHw8W148Pl0qPz4vZyx1UT0vXig/OlwqKyg/OigoPyFcKilwdW5jdCl8W15ccypdKSl8Xl8rKD86KCg/IV8pcHVuY3QpfChbXlxzX10pKS8sUV9lPW5uKHVRLCJ1IikucmVwbGFjZSgvcHVuY3QvZyxVVCkuZ2V0UmVnZXgoKSxaX2U9bm4odVEsInUiKS5yZXBsYWNlKC9wdW5jdC9nLGNRKS5nZXRSZWdleCgpLGhRPSJeW15fKl0qP19fW15fKl0qP1xcKlteXypdKj8oPz1fXyl8W14qXSsoPz1bXipdKXwoPyFcXCopcHVuY3QoXFwqKykoPz1bXFxzXXwkKXxub3RQdW5jdFNwYWNlKFxcKispKD8hXFwqKSg/PXB1bmN0U3BhY2V8JCl8KD8hXFwqKXB1bmN0U3BhY2UoXFwqKykoPz1ub3RQdW5jdFNwYWNlKXxbXFxzXShcXCorKSg/IVxcKikoPz1wdW5jdCl8KD8hXFwqKXB1bmN0KFxcKispKD8hXFwqKSg/PXB1bmN0KXxub3RQdW5jdFNwYWNlKFxcKispKD89bm90UHVuY3RTcGFjZSkiLEpfZT1ubihoUSwiZ3UiKS5yZXBsYWNlKC9ub3RQdW5jdFNwYWNlL2csbFEpLnJlcGxhY2UoL3B1bmN0U3BhY2UvZyxvTCkucmVwbGFjZSgvcHVuY3QvZyxVVCkuZ2V0UmVnZXgoKSxlRGU9bm4oaFEsImd1IikucmVwbGFjZSgvbm90UHVuY3RTcGFjZS9nLGpfZSkucmVwbGFjZSgvcHVuY3RTcGFjZS9nLFhfZSkucmVwbGFjZSgvcHVuY3QvZyxjUSkuZ2V0UmVnZXgoKSx0RGU9bm4oIl5bXl8qXSo/XFwqXFwqW15fKl0qP19bXl8qXSo/KD89XFwqXFwqKXxbXl9dKyg/PVteX10pfCg/IV8pcHVuY3QoXyspKD89W1xcc118JCl8bm90UHVuY3RTcGFjZShfKykoPyFfKSg/PXB1bmN0U3BhY2V8JCl8KD8hXylwdW5jdFNwYWNlKF8rKSg/PW5vdFB1bmN0U3BhY2UpfFtcXHNdKF8rKSg/IV8pKD89cHVuY3QpfCg/IV8pcHVuY3QoXyspKD8hXykoPz1wdW5jdCkiLCJndSIpLnJlcGxhY2UoL25vdFB1bmN0U3BhY2UvZyxsUSkucmVwbGFjZSgvcHVuY3RTcGFjZS9nLG9MKS5yZXBsYWNlKC9wdW5jdC9nLFVUKS5nZXRSZWdleCgpLHJEZT1ubigvXFwocHVuY3QpLywiZ3UiKS5yZXBsYWNlKC9wdW5jdC9nLFVUKS5nZXRSZWdleCgpLG5EZT1ubigvXjwoc2NoZW1lOlteXHNceDAwLVx4MWY8Pl0qfGVtYWlsKT4vKS5yZXBsYWNlKCJzY2hlbWUiLC9bYS16QS1aXVthLXpBLVowLTkrLi1dezEsMzF9LykucmVwbGFjZSgiZW1haWwiLC9bYS16QS1aMC05LiEjJCUmJyorLz0/Xl9ge3x9fi1dKyhAKVthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSsoPyFbLV9dKS8pLmdldFJlZ2V4KCksaURlPW5uKGFMKS5yZXBsYWNlKCIoPzotLT58JCkiLCItLT4iKS5nZXRSZWdleCgpLGFEZT1ubigiXmNvbW1lbnR8XjwvW2EtekEtWl1bXFx3Oi1dKlxccyo+fF48W2EtekEtWl1bXFx3LV0qKD86YXR0cmlidXRlKSo/XFxzKi8/PnxePFxcP1tcXHNcXFNdKj9cXD8+fF48IVthLXpBLVpdK1xcc1tcXHNcXFNdKj8+fF48IVxcW0NEQVRBXFxbW1xcc1xcU10qP1xcXVxcXT4iKS5yZXBsYWNlKCJjb21tZW50IixpRGUpLnJlcGxhY2UoImF0dHJpYnV0ZSIsL1xzK1thLXpBLVo6X11bXHcuOi1dKig/OlxzKj1ccyoiW14iXSoifFxzKj1ccyonW14nXSonfFxzKj1ccypbXlxzIic9PD5gXSspPy8pLmdldFJlZ2V4KCksJFQ9Lyg/OlxbKD86XFwufFteXFtcXVxcXSkqXF18XFwufGBbXmBdKmB8W15cW1xdXFxgXSkqPy8sc0RlPW5uKC9eIT9cWyhsYWJlbClcXVwoXHMqKGhyZWYpKD86KD86WyBcdF0qKD86XG5bIFx0XSopPykodGl0bGUpKT9ccypcKS8pLnJlcGxhY2UoImxhYmVsIiwkVCkucmVwbGFjZSgiaHJlZiIsLzwoPzpcXC58W15cbjw+XFxdKSs+fFteIFx0XG5ceDAwLVx4MWZdKi8pLnJlcGxhY2UoInRpdGxlIiwvIig/OlxcIj98W14iXFxdKSoifCcoPzpcXCc/fFteJ1xcXSkqJ3xcKCg/OlxcXCk/fFteKVxcXSkqXCkvKS5nZXRSZWdleCgpLGZRPW5uKC9eIT9cWyhsYWJlbClcXVxbKHJlZilcXS8pLnJlcGxhY2UoImxhYmVsIiwkVCkucmVwbGFjZSgicmVmIixpTCkuZ2V0UmVnZXgoKSxkUT1ubigvXiE/XFsocmVmKVxdKD86XFtcXSk/LykucmVwbGFjZSgicmVmIixpTCkuZ2V0UmVnZXgoKSxvRGU9bm4oInJlZmxpbmt8bm9saW5rKD8hXFwoKSIsImciKS5yZXBsYWNlKCJyZWZsaW5rIixmUSkucmVwbGFjZSgibm9saW5rIixkUSkuZ2V0UmVnZXgoKSxsTD17X2JhY2twZWRhbDprMixhbnlQdW5jdHVhdGlvbjpyRGUsYXV0b2xpbms6bkRlLGJsb2NrU2tpcDpLX2UsYnI6b1EsY29kZTpXX2UsZGVsOmsyLGVtU3Ryb25nTERlbGltOlFfZSxlbVN0cm9uZ1JEZWxpbUFzdDpKX2UsZW1TdHJvbmdSRGVsaW1VbmQ6dERlLGVzY2FwZTpIX2UsbGluazpzRGUsbm9saW5rOmRRLHB1bmN0dWF0aW9uOllfZSxyZWZsaW5rOmZRLHJlZmxpbmtTZWFyY2g6b0RlLHRhZzphRGUsdGV4dDpxX2UsdXJsOmsyfSxsRGU9ey4uLmxMLGxpbms6bm4oL14hP1xbKGxhYmVsKVxdXCgoLio/KVwpLykucmVwbGFjZSgibGFiZWwiLCRUKS5nZXRSZWdleCgpLHJlZmxpbms6bm4oL14hP1xbKGxhYmVsKVxdXHMqXFsoW15cXV0qKVxdLykucmVwbGFjZSgibGFiZWwiLCRUKS5nZXRSZWdleCgpfSxaOT17Li4ubEwsZW1TdHJvbmdSRGVsaW1Bc3Q6ZURlLGVtU3Ryb25nTERlbGltOlpfZSx1cmw6bm4oL14oKD86ZnRwfGh0dHBzPyk6XC9cL3x3d3dcLikoPzpbYS16QS1aMC05XC1dK1wuPykrW15cczxdKnxeZW1haWwvLCJpIikucmVwbGFjZSgiZW1haWwiLC9bQS1aYS16MC05Ll8rLV0rKEApW2EtekEtWjAtOS1fXSsoPzpcLlthLXpBLVowLTktX10qW2EtekEtWjAtOV0pKyg/IVstX10pLykuZ2V0UmVnZXgoKSxfYmFja3BlZGFsOi8oPzpbXj8hLiw6OypfJyJ+KCkmXSt8XChbXildKlwpfCYoPyFbYS16QS1aMC05XSs7JCl8Wz8hLiw6OypfJyJ+KV0rKD8hJCkpKy8sZGVsOi9eKH5+PykoPz1bXlxzfl0pKCg/OlxcLnxbXlxcXSkqPyg/OlxcLnxbXlxzflxcXSkpXDEoPz1bXn5dfCQpLyx0ZXh0Oi9eKFtgfl0rfFteYH5dKSg/Oig/PSB7Mix9XG4pfCg/PVthLXpBLVowLTkuISMkJSYnKitcLz0/X2B7XHx9fi1dK0ApfFtcc1xTXSo/KD86KD89W1xcPCFcW2Aqfl9dfFxiX3xodHRwcz86XC9cL3xmdHA6XC9cL3x3d3dcLnwkKXxbXiBdKD89IHsyLH1cbil8W15hLXpBLVowLTkuISMkJSYnKitcLz0/X2B7XHx9fi1dKD89W2EtekEtWjAtOS4hIyQlJicqK1wvPT9fYHtcfH1+LV0rQCkpKS99LGNEZT17Li4uWjksYnI6bm4ob1EpLnJlcGxhY2UoInsyLH0iLCIqIikuZ2V0UmVnZXgoKSx0ZXh0Om5uKFo5LnRleHQpLnJlcGxhY2UoIlxcYl8iLCJcXGJffCB7Mix9XFxuIikucmVwbGFjZSgvXHsyLFx9L2csIioiKS5nZXRSZWdleCgpfSxCVD17bm9ybWFsOnNMLGdmbTpWX2UscGVkYW50aWM6VV9lfSxUMj17bm9ybWFsOmxMLGdmbTpaOSxicmVha3M6Y0RlLHBlZGFudGljOmxEZX0sdURlPXsiJiI6IiZhbXA7IiwiPCI6IiZsdDsiLCI+IjoiJmd0OyIsJyInOiImcXVvdDsiLCInIjoiJiMzOTsifSxKSz1vKHQ9PnVEZVt0XSwiZ2UiKTtvKHhjLCJSIik7byhlUSwiSiIpO28odFEsIlYiKTtvKHcyLCJBIik7byhoRGUsImZlIik7byhyUSwiZGUiKTtvKGZEZSwiSmUiKTt6VD1jbGFzc3tzdGF0aWN7byh0aGlzLCJTIil9b3B0aW9ucztydWxlcztsZXhlcjtjb25zdHJ1Y3Rvcih0KXt0aGlzLm9wdGlvbnM9dHx8VWR9c3BhY2UodCl7bGV0IGU9dGhpcy5ydWxlcy5ibG9jay5uZXdsaW5lLmV4ZWModCk7aWYoZSYmZVswXS5sZW5ndGg+MClyZXR1cm57dHlwZToic3BhY2UiLHJhdzplWzBdfX1jb2RlKHQpe2xldCBlPXRoaXMucnVsZXMuYmxvY2suY29kZS5leGVjKHQpO2lmKGUpe2xldCByPWVbMF0ucmVwbGFjZSh0aGlzLnJ1bGVzLm90aGVyLmNvZGVSZW1vdmVJbmRlbnQsIiIpO3JldHVybnt0eXBlOiJjb2RlIixyYXc6ZVswXSxjb2RlQmxvY2tTdHlsZToiaW5kZW50ZWQiLHRleHQ6dGhpcy5vcHRpb25zLnBlZGFudGljP3I6dzIocixgCmApfX19ZmVuY2VzKHQpe2xldCBlPXRoaXMucnVsZXMuYmxvY2suZmVuY2VzLmV4ZWModCk7aWYoZSl7bGV0IHI9ZVswXSxuPWZEZShyLGVbM118fCIiLHRoaXMucnVsZXMpO3JldHVybnt0eXBlOiJjb2RlIixyYXc6cixsYW5nOmVbMl0/ZVsyXS50cmltKCkucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5hbnlQdW5jdHVhdGlvbiwiJDEiKTplWzJdLHRleHQ6bn19fWhlYWRpbmcodCl7bGV0IGU9dGhpcy5ydWxlcy5ibG9jay5oZWFkaW5nLmV4ZWModCk7aWYoZSl7bGV0IHI9ZVsyXS50cmltKCk7aWYodGhpcy5ydWxlcy5vdGhlci5lbmRpbmdIYXNoLnRlc3Qocikpe2xldCBuPXcyKHIsIiMiKTsodGhpcy5vcHRpb25zLnBlZGFudGljfHwhbnx8dGhpcy5ydWxlcy5vdGhlci5lbmRpbmdTcGFjZUNoYXIudGVzdChuKSkmJihyPW4udHJpbSgpKX1yZXR1cm57dHlwZToiaGVhZGluZyIscmF3OmVbMF0sZGVwdGg6ZVsxXS5sZW5ndGgsdGV4dDpyLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShyKX19fWhyKHQpe2xldCBlPXRoaXMucnVsZXMuYmxvY2suaHIuZXhlYyh0KTtpZihlKXJldHVybnt0eXBlOiJociIscmF3OncyKGVbMF0sYApgKX19YmxvY2txdW90ZSh0KXtsZXQgZT10aGlzLnJ1bGVzLmJsb2NrLmJsb2NrcXVvdGUuZXhlYyh0KTtpZihlKXtsZXQgcj13MihlWzBdLGAKYCkuc3BsaXQoYApgKSxuPSIiLGk9IiIsYT1bXTtmb3IoO3IubGVuZ3RoPjA7KXtsZXQgcz0hMSxsPVtdLHU7Zm9yKHU9MDt1PHIubGVuZ3RoO3UrKylpZih0aGlzLnJ1bGVzLm90aGVyLmJsb2NrcXVvdGVTdGFydC50ZXN0KHJbdV0pKWwucHVzaChyW3VdKSxzPSEwO2Vsc2UgaWYoIXMpbC5wdXNoKHJbdV0pO2Vsc2UgYnJlYWs7cj1yLnNsaWNlKHUpO2xldCBoPWwuam9pbihgCmApLGY9aC5yZXBsYWNlKHRoaXMucnVsZXMub3RoZXIuYmxvY2txdW90ZVNldGV4dFJlcGxhY2UsYAogICAgJDFgKS5yZXBsYWNlKHRoaXMucnVsZXMub3RoZXIuYmxvY2txdW90ZVNldGV4dFJlcGxhY2UyLCIiKTtuPW4/YCR7bn0KJHtofWA6aCxpPWk/YCR7aX0KJHtmfWA6ZjtsZXQgZD10aGlzLmxleGVyLnN0YXRlLnRvcDtpZih0aGlzLmxleGVyLnN0YXRlLnRvcD0hMCx0aGlzLmxleGVyLmJsb2NrVG9rZW5zKGYsYSwhMCksdGhpcy5sZXhlci5zdGF0ZS50b3A9ZCxyLmxlbmd0aD09PTApYnJlYWs7bGV0IHA9YS5hdCgtMSk7aWYocD8udHlwZT09PSJjb2RlIilicmVhaztpZihwPy50eXBlPT09ImJsb2NrcXVvdGUiKXtsZXQgbT1wLGc9bS5yYXcrYApgK3Iuam9pbihgCmApLHk9dGhpcy5ibG9ja3F1b3RlKGcpO2FbYS5sZW5ndGgtMV09eSxuPW4uc3Vic3RyaW5nKDAsbi5sZW5ndGgtbS5yYXcubGVuZ3RoKSt5LnJhdyxpPWkuc3Vic3RyaW5nKDAsaS5sZW5ndGgtbS50ZXh0Lmxlbmd0aCkreS50ZXh0O2JyZWFrfWVsc2UgaWYocD8udHlwZT09PSJsaXN0Iil7bGV0IG09cCxnPW0ucmF3K2AKYCtyLmpvaW4oYApgKSx5PXRoaXMubGlzdChnKTthW2EubGVuZ3RoLTFdPXksbj1uLnN1YnN0cmluZygwLG4ubGVuZ3RoLXAucmF3Lmxlbmd0aCkreS5yYXcsaT1pLnN1YnN0cmluZygwLGkubGVuZ3RoLW0ucmF3Lmxlbmd0aCkreS5yYXcscj1nLnN1YnN0cmluZyhhLmF0KC0xKS5yYXcubGVuZ3RoKS5zcGxpdChgCmApO2NvbnRpbnVlfX1yZXR1cm57dHlwZToiYmxvY2txdW90ZSIscmF3Om4sdG9rZW5zOmEsdGV4dDppfX19bGlzdCh0KXtsZXQgZT10aGlzLnJ1bGVzLmJsb2NrLmxpc3QuZXhlYyh0KTtpZihlKXtsZXQgcj1lWzFdLnRyaW0oKSxuPXIubGVuZ3RoPjEsaT17dHlwZToibGlzdCIscmF3OiIiLG9yZGVyZWQ6bixzdGFydDpuPytyLnNsaWNlKDAsLTEpOiIiLGxvb3NlOiExLGl0ZW1zOltdfTtyPW4/YFxcZHsxLDl9XFwke3Iuc2xpY2UoLTEpfWA6YFxcJHtyfWAsdGhpcy5vcHRpb25zLnBlZGFudGljJiYocj1uP3I6IlsqKy1dIik7bGV0IGE9dGhpcy5ydWxlcy5vdGhlci5saXN0SXRlbVJlZ2V4KHIpLHM9ITE7Zm9yKDt0Oyl7bGV0IHU9ITEsaD0iIixmPSIiO2lmKCEoZT1hLmV4ZWModCkpfHx0aGlzLnJ1bGVzLmJsb2NrLmhyLnRlc3QodCkpYnJlYWs7aD1lWzBdLHQ9dC5zdWJzdHJpbmcoaC5sZW5ndGgpO2xldCBkPWVbMl0uc3BsaXQoYApgLDEpWzBdLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci5saXN0UmVwbGFjZVRhYnMseD0+IiAiLnJlcGVhdCgzKngubGVuZ3RoKSkscD10LnNwbGl0KGAKYCwxKVswXSxtPSFkLnRyaW0oKSxnPTA7aWYodGhpcy5vcHRpb25zLnBlZGFudGljPyhnPTIsZj1kLnRyaW1TdGFydCgpKTptP2c9ZVsxXS5sZW5ndGgrMTooZz1lWzJdLnNlYXJjaCh0aGlzLnJ1bGVzLm90aGVyLm5vblNwYWNlQ2hhciksZz1nPjQ/MTpnLGY9ZC5zbGljZShnKSxnKz1lWzFdLmxlbmd0aCksbSYmdGhpcy5ydWxlcy5vdGhlci5ibGFua0xpbmUudGVzdChwKSYmKGgrPXArYApgLHQ9dC5zdWJzdHJpbmcocC5sZW5ndGgrMSksdT0hMCksIXUpe2xldCB4PXRoaXMucnVsZXMub3RoZXIubmV4dEJ1bGxldFJlZ2V4KGcpLGI9dGhpcy5ydWxlcy5vdGhlci5oclJlZ2V4KGcpLFQ9dGhpcy5ydWxlcy5vdGhlci5mZW5jZXNCZWdpblJlZ2V4KGcpLFM9dGhpcy5ydWxlcy5vdGhlci5oZWFkaW5nQmVnaW5SZWdleChnKSx3PXRoaXMucnVsZXMub3RoZXIuaHRtbEJlZ2luUmVnZXgoZyk7Zm9yKDt0Oyl7bGV0IEU9dC5zcGxpdChgCmAsMSlbMF0sXztpZihwPUUsdGhpcy5vcHRpb25zLnBlZGFudGljPyhwPXAucmVwbGFjZSh0aGlzLnJ1bGVzLm90aGVyLmxpc3RSZXBsYWNlTmVzdGluZywiICAiKSxfPXApOl89cC5yZXBsYWNlKHRoaXMucnVsZXMub3RoZXIudGFiQ2hhckdsb2JhbCwiICAgICIpLFQudGVzdChwKXx8Uy50ZXN0KHApfHx3LnRlc3QocCl8fHgudGVzdChwKXx8Yi50ZXN0KHApKWJyZWFrO2lmKF8uc2VhcmNoKHRoaXMucnVsZXMub3RoZXIubm9uU3BhY2VDaGFyKT49Z3x8IXAudHJpbSgpKWYrPWAKYCtfLnNsaWNlKGcpO2Vsc2V7aWYobXx8ZC5yZXBsYWNlKHRoaXMucnVsZXMub3RoZXIudGFiQ2hhckdsb2JhbCwiICAgICIpLnNlYXJjaCh0aGlzLnJ1bGVzLm90aGVyLm5vblNwYWNlQ2hhcik+PTR8fFQudGVzdChkKXx8Uy50ZXN0KGQpfHxiLnRlc3QoZCkpYnJlYWs7Zis9YApgK3B9IW0mJiFwLnRyaW0oKSYmKG09ITApLGgrPUUrYApgLHQ9dC5zdWJzdHJpbmcoRS5sZW5ndGgrMSksZD1fLnNsaWNlKGcpfX1pLmxvb3NlfHwocz9pLmxvb3NlPSEwOnRoaXMucnVsZXMub3RoZXIuZG91YmxlQmxhbmtMaW5lLnRlc3QoaCkmJihzPSEwKSk7bGV0IHk9bnVsbCx2O3RoaXMub3B0aW9ucy5nZm0mJih5PXRoaXMucnVsZXMub3RoZXIubGlzdElzVGFzay5leGVjKGYpLHkmJih2PXlbMF0hPT0iWyBdICIsZj1mLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci5saXN0UmVwbGFjZVRhc2ssIiIpKSksaS5pdGVtcy5wdXNoKHt0eXBlOiJsaXN0X2l0ZW0iLHJhdzpoLHRhc2s6ISF5LGNoZWNrZWQ6dixsb29zZTohMSx0ZXh0OmYsdG9rZW5zOltdfSksaS5yYXcrPWh9bGV0IGw9aS5pdGVtcy5hdCgtMSk7aWYobClsLnJhdz1sLnJhdy50cmltRW5kKCksbC50ZXh0PWwudGV4dC50cmltRW5kKCk7ZWxzZSByZXR1cm47aS5yYXc9aS5yYXcudHJpbUVuZCgpO2ZvcihsZXQgdT0wO3U8aS5pdGVtcy5sZW5ndGg7dSsrKWlmKHRoaXMubGV4ZXIuc3RhdGUudG9wPSExLGkuaXRlbXNbdV0udG9rZW5zPXRoaXMubGV4ZXIuYmxvY2tUb2tlbnMoaS5pdGVtc1t1XS50ZXh0LFtdKSwhaS5sb29zZSl7bGV0IGg9aS5pdGVtc1t1XS50b2tlbnMuZmlsdGVyKGQ9PmQudHlwZT09PSJzcGFjZSIpLGY9aC5sZW5ndGg+MCYmaC5zb21lKGQ9PnRoaXMucnVsZXMub3RoZXIuYW55TGluZS50ZXN0KGQucmF3KSk7aS5sb29zZT1mfWlmKGkubG9vc2UpZm9yKGxldCB1PTA7dTxpLml0ZW1zLmxlbmd0aDt1KyspaS5pdGVtc1t1XS5sb29zZT0hMDtyZXR1cm4gaX19aHRtbCh0KXtsZXQgZT10aGlzLnJ1bGVzLmJsb2NrLmh0bWwuZXhlYyh0KTtpZihlKXJldHVybnt0eXBlOiJodG1sIixibG9jazohMCxyYXc6ZVswXSxwcmU6ZVsxXT09PSJwcmUifHxlWzFdPT09InNjcmlwdCJ8fGVbMV09PT0ic3R5bGUiLHRleHQ6ZVswXX19ZGVmKHQpe2xldCBlPXRoaXMucnVsZXMuYmxvY2suZGVmLmV4ZWModCk7aWYoZSl7bGV0IHI9ZVsxXS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci5tdWx0aXBsZVNwYWNlR2xvYmFsLCIgIiksbj1lWzJdP2VbMl0ucmVwbGFjZSh0aGlzLnJ1bGVzLm90aGVyLmhyZWZCcmFja2V0cywiJDEiKS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLCIkMSIpOiIiLGk9ZVszXT9lWzNdLnN1YnN0cmluZygxLGVbM10ubGVuZ3RoLTEpLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24sIiQxIik6ZVszXTtyZXR1cm57dHlwZToiZGVmIix0YWc6cixyYXc6ZVswXSxocmVmOm4sdGl0bGU6aX19fXRhYmxlKHQpe2xldCBlPXRoaXMucnVsZXMuYmxvY2sudGFibGUuZXhlYyh0KTtpZighZXx8IXRoaXMucnVsZXMub3RoZXIudGFibGVEZWxpbWl0ZXIudGVzdChlWzJdKSlyZXR1cm47bGV0IHI9dFEoZVsxXSksbj1lWzJdLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci50YWJsZUFsaWduQ2hhcnMsIiIpLnNwbGl0KCJ8IiksaT1lWzNdPy50cmltKCk/ZVszXS5yZXBsYWNlKHRoaXMucnVsZXMub3RoZXIudGFibGVSb3dCbGFua0xpbmUsIiIpLnNwbGl0KGAKYCk6W10sYT17dHlwZToidGFibGUiLHJhdzplWzBdLGhlYWRlcjpbXSxhbGlnbjpbXSxyb3dzOltdfTtpZihyLmxlbmd0aD09PW4ubGVuZ3RoKXtmb3IobGV0IHMgb2Ygbil0aGlzLnJ1bGVzLm90aGVyLnRhYmxlQWxpZ25SaWdodC50ZXN0KHMpP2EuYWxpZ24ucHVzaCgicmlnaHQiKTp0aGlzLnJ1bGVzLm90aGVyLnRhYmxlQWxpZ25DZW50ZXIudGVzdChzKT9hLmFsaWduLnB1c2goImNlbnRlciIpOnRoaXMucnVsZXMub3RoZXIudGFibGVBbGlnbkxlZnQudGVzdChzKT9hLmFsaWduLnB1c2goImxlZnQiKTphLmFsaWduLnB1c2gobnVsbCk7Zm9yKGxldCBzPTA7czxyLmxlbmd0aDtzKyspYS5oZWFkZXIucHVzaCh7dGV4dDpyW3NdLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShyW3NdKSxoZWFkZXI6ITAsYWxpZ246YS5hbGlnbltzXX0pO2ZvcihsZXQgcyBvZiBpKWEucm93cy5wdXNoKHRRKHMsYS5oZWFkZXIubGVuZ3RoKS5tYXAoKGwsdSk9Pih7dGV4dDpsLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShsKSxoZWFkZXI6ITEsYWxpZ246YS5hbGlnblt1XX0pKSk7cmV0dXJuIGF9fWxoZWFkaW5nKHQpe2xldCBlPXRoaXMucnVsZXMuYmxvY2subGhlYWRpbmcuZXhlYyh0KTtpZihlKXJldHVybnt0eXBlOiJoZWFkaW5nIixyYXc6ZVswXSxkZXB0aDplWzJdLmNoYXJBdCgwKT09PSI9Ij8xOjIsdGV4dDplWzFdLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShlWzFdKX19cGFyYWdyYXBoKHQpe2xldCBlPXRoaXMucnVsZXMuYmxvY2sucGFyYWdyYXBoLmV4ZWModCk7aWYoZSl7bGV0IHI9ZVsxXS5jaGFyQXQoZVsxXS5sZW5ndGgtMSk9PT1gCmA/ZVsxXS5zbGljZSgwLC0xKTplWzFdO3JldHVybnt0eXBlOiJwYXJhZ3JhcGgiLHJhdzplWzBdLHRleHQ6cix0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmUocil9fX10ZXh0KHQpe2xldCBlPXRoaXMucnVsZXMuYmxvY2sudGV4dC5leGVjKHQpO2lmKGUpcmV0dXJue3R5cGU6InRleHQiLHJhdzplWzBdLHRleHQ6ZVswXSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmUoZVswXSl9fWVzY2FwZSh0KXtsZXQgZT10aGlzLnJ1bGVzLmlubGluZS5lc2NhcGUuZXhlYyh0KTtpZihlKXJldHVybnt0eXBlOiJlc2NhcGUiLHJhdzplWzBdLHRleHQ6ZVsxXX19dGFnKHQpe2xldCBlPXRoaXMucnVsZXMuaW5saW5lLnRhZy5leGVjKHQpO2lmKGUpcmV0dXJuIXRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rJiZ0aGlzLnJ1bGVzLm90aGVyLnN0YXJ0QVRhZy50ZXN0KGVbMF0pP3RoaXMubGV4ZXIuc3RhdGUuaW5MaW5rPSEwOnRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rJiZ0aGlzLnJ1bGVzLm90aGVyLmVuZEFUYWcudGVzdChlWzBdKSYmKHRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rPSExKSwhdGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrJiZ0aGlzLnJ1bGVzLm90aGVyLnN0YXJ0UHJlU2NyaXB0VGFnLnRlc3QoZVswXSk/dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrPSEwOnRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jayYmdGhpcy5ydWxlcy5vdGhlci5lbmRQcmVTY3JpcHRUYWcudGVzdChlWzBdKSYmKHRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jaz0hMSkse3R5cGU6Imh0bWwiLHJhdzplWzBdLGluTGluazp0aGlzLmxleGVyLnN0YXRlLmluTGluayxpblJhd0Jsb2NrOnRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jayxibG9jazohMSx0ZXh0OmVbMF19fWxpbmsodCl7bGV0IGU9dGhpcy5ydWxlcy5pbmxpbmUubGluay5leGVjKHQpO2lmKGUpe2xldCByPWVbMl0udHJpbSgpO2lmKCF0aGlzLm9wdGlvbnMucGVkYW50aWMmJnRoaXMucnVsZXMub3RoZXIuc3RhcnRBbmdsZUJyYWNrZXQudGVzdChyKSl7aWYoIXRoaXMucnVsZXMub3RoZXIuZW5kQW5nbGVCcmFja2V0LnRlc3QocikpcmV0dXJuO2xldCBhPXcyKHIuc2xpY2UoMCwtMSksIlxcIik7aWYoKHIubGVuZ3RoLWEubGVuZ3RoKSUyPT09MClyZXR1cm59ZWxzZXtsZXQgYT1oRGUoZVsyXSwiKCkiKTtpZihhPT09LTIpcmV0dXJuO2lmKGE+LTEpe2xldCBzPShlWzBdLmluZGV4T2YoIiEiKT09PTA/NTo0KStlWzFdLmxlbmd0aCthO2VbMl09ZVsyXS5zdWJzdHJpbmcoMCxhKSxlWzBdPWVbMF0uc3Vic3RyaW5nKDAscykudHJpbSgpLGVbM109IiJ9fWxldCBuPWVbMl0saT0iIjtpZih0aGlzLm9wdGlvbnMucGVkYW50aWMpe2xldCBhPXRoaXMucnVsZXMub3RoZXIucGVkYW50aWNIcmVmVGl0bGUuZXhlYyhuKTthJiYobj1hWzFdLGk9YVszXSl9ZWxzZSBpPWVbM10/ZVszXS5zbGljZSgxLC0xKToiIjtyZXR1cm4gbj1uLnRyaW0oKSx0aGlzLnJ1bGVzLm90aGVyLnN0YXJ0QW5nbGVCcmFja2V0LnRlc3QobikmJih0aGlzLm9wdGlvbnMucGVkYW50aWMmJiF0aGlzLnJ1bGVzLm90aGVyLmVuZEFuZ2xlQnJhY2tldC50ZXN0KHIpP249bi5zbGljZSgxKTpuPW4uc2xpY2UoMSwtMSkpLHJRKGUse2hyZWY6biYmbi5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLCIkMSIpLHRpdGxlOmkmJmkucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5hbnlQdW5jdHVhdGlvbiwiJDEiKX0sZVswXSx0aGlzLmxleGVyLHRoaXMucnVsZXMpfX1yZWZsaW5rKHQsZSl7bGV0IHI7aWYoKHI9dGhpcy5ydWxlcy5pbmxpbmUucmVmbGluay5leGVjKHQpKXx8KHI9dGhpcy5ydWxlcy5pbmxpbmUubm9saW5rLmV4ZWModCkpKXtsZXQgbj0oclsyXXx8clsxXSkucmVwbGFjZSh0aGlzLnJ1bGVzLm90aGVyLm11bHRpcGxlU3BhY2VHbG9iYWwsIiAiKSxpPWVbbi50b0xvd2VyQ2FzZSgpXTtpZighaSl7bGV0IGE9clswXS5jaGFyQXQoMCk7cmV0dXJue3R5cGU6InRleHQiLHJhdzphLHRleHQ6YX19cmV0dXJuIHJRKHIsaSxyWzBdLHRoaXMubGV4ZXIsdGhpcy5ydWxlcyl9fWVtU3Ryb25nKHQsZSxyPSIiKXtsZXQgbj10aGlzLnJ1bGVzLmlubGluZS5lbVN0cm9uZ0xEZWxpbS5leGVjKHQpO2lmKCEoIW58fG5bM10mJnIubWF0Y2godGhpcy5ydWxlcy5vdGhlci51bmljb2RlQWxwaGFOdW1lcmljKSkmJighKG5bMV18fG5bMl0pfHwhcnx8dGhpcy5ydWxlcy5pbmxpbmUucHVuY3R1YXRpb24uZXhlYyhyKSkpe2xldCBpPVsuLi5uWzBdXS5sZW5ndGgtMSxhLHMsbD1pLHU9MCxoPW5bMF1bMF09PT0iKiI/dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmdSRGVsaW1Bc3Q6dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmdSRGVsaW1VbmQ7Zm9yKGgubGFzdEluZGV4PTAsZT1lLnNsaWNlKC0xKnQubGVuZ3RoK2kpOyhuPWguZXhlYyhlKSkhPW51bGw7KXtpZihhPW5bMV18fG5bMl18fG5bM118fG5bNF18fG5bNV18fG5bNl0sIWEpY29udGludWU7aWYocz1bLi4uYV0ubGVuZ3RoLG5bM118fG5bNF0pe2wrPXM7Y29udGludWV9ZWxzZSBpZigobls1XXx8bls2XSkmJmklMyYmISgoaStzKSUzKSl7dSs9cztjb250aW51ZX1pZihsLT1zLGw+MCljb250aW51ZTtzPU1hdGgubWluKHMscytsK3UpO2xldCBmPVsuLi5uWzBdXVswXS5sZW5ndGgsZD10LnNsaWNlKDAsaStuLmluZGV4K2Yrcyk7aWYoTWF0aC5taW4oaSxzKSUyKXtsZXQgbT1kLnNsaWNlKDEsLTEpO3JldHVybnt0eXBlOiJlbSIscmF3OmQsdGV4dDptLHRva2Vuczp0aGlzLmxleGVyLmlubGluZVRva2VucyhtKX19bGV0IHA9ZC5zbGljZSgyLC0yKTtyZXR1cm57dHlwZToic3Ryb25nIixyYXc6ZCx0ZXh0OnAsdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lVG9rZW5zKHApfX19fWNvZGVzcGFuKHQpe2xldCBlPXRoaXMucnVsZXMuaW5saW5lLmNvZGUuZXhlYyh0KTtpZihlKXtsZXQgcj1lWzJdLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci5uZXdMaW5lQ2hhckdsb2JhbCwiICIpLG49dGhpcy5ydWxlcy5vdGhlci5ub25TcGFjZUNoYXIudGVzdChyKSxpPXRoaXMucnVsZXMub3RoZXIuc3RhcnRpbmdTcGFjZUNoYXIudGVzdChyKSYmdGhpcy5ydWxlcy5vdGhlci5lbmRpbmdTcGFjZUNoYXIudGVzdChyKTtyZXR1cm4gbiYmaSYmKHI9ci5zdWJzdHJpbmcoMSxyLmxlbmd0aC0xKSkse3R5cGU6ImNvZGVzcGFuIixyYXc6ZVswXSx0ZXh0OnJ9fX1icih0KXtsZXQgZT10aGlzLnJ1bGVzLmlubGluZS5ici5leGVjKHQpO2lmKGUpcmV0dXJue3R5cGU6ImJyIixyYXc6ZVswXX19ZGVsKHQpe2xldCBlPXRoaXMucnVsZXMuaW5saW5lLmRlbC5leGVjKHQpO2lmKGUpcmV0dXJue3R5cGU6ImRlbCIscmF3OmVbMF0sdGV4dDplWzJdLHRva2Vuczp0aGlzLmxleGVyLmlubGluZVRva2VucyhlWzJdKX19YXV0b2xpbmsodCl7bGV0IGU9dGhpcy5ydWxlcy5pbmxpbmUuYXV0b2xpbmsuZXhlYyh0KTtpZihlKXtsZXQgcixuO3JldHVybiBlWzJdPT09IkAiPyhyPWVbMV0sbj0ibWFpbHRvOiIrcik6KHI9ZVsxXSxuPXIpLHt0eXBlOiJsaW5rIixyYXc6ZVswXSx0ZXh0OnIsaHJlZjpuLHRva2Vuczpbe3R5cGU6InRleHQiLHJhdzpyLHRleHQ6cn1dfX19dXJsKHQpe2xldCBlO2lmKGU9dGhpcy5ydWxlcy5pbmxpbmUudXJsLmV4ZWModCkpe2xldCByLG47aWYoZVsyXT09PSJAIilyPWVbMF0sbj0ibWFpbHRvOiIrcjtlbHNle2xldCBpO2RvIGk9ZVswXSxlWzBdPXRoaXMucnVsZXMuaW5saW5lLl9iYWNrcGVkYWwuZXhlYyhlWzBdKT8uWzBdPz8iIjt3aGlsZShpIT09ZVswXSk7cj1lWzBdLGVbMV09PT0id3d3LiI/bj0iaHR0cDovLyIrZVswXTpuPWVbMF19cmV0dXJue3R5cGU6ImxpbmsiLHJhdzplWzBdLHRleHQ6cixocmVmOm4sdG9rZW5zOlt7dHlwZToidGV4dCIscmF3OnIsdGV4dDpyfV19fX1pbmxpbmVUZXh0KHQpe2xldCBlPXRoaXMucnVsZXMuaW5saW5lLnRleHQuZXhlYyh0KTtpZihlKXtsZXQgcj10aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2s7cmV0dXJue3R5cGU6InRleHQiLHJhdzplWzBdLHRleHQ6ZVswXSxlc2NhcGVkOnJ9fX19LE51PWNsYXNzIEo5e3N0YXRpY3tvKHRoaXMsImEiKX10b2tlbnM7b3B0aW9ucztzdGF0ZTt0b2tlbml6ZXI7aW5saW5lUXVldWU7Y29uc3RydWN0b3IoZSl7dGhpcy50b2tlbnM9W10sdGhpcy50b2tlbnMubGlua3M9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLm9wdGlvbnM9ZXx8VWQsdGhpcy5vcHRpb25zLnRva2VuaXplcj10aGlzLm9wdGlvbnMudG9rZW5pemVyfHxuZXcgelQsdGhpcy50b2tlbml6ZXI9dGhpcy5vcHRpb25zLnRva2VuaXplcix0aGlzLnRva2VuaXplci5vcHRpb25zPXRoaXMub3B0aW9ucyx0aGlzLnRva2VuaXplci5sZXhlcj10aGlzLHRoaXMuaW5saW5lUXVldWU9W10sdGhpcy5zdGF0ZT17aW5MaW5rOiExLGluUmF3QmxvY2s6ITEsdG9wOiEwfTtsZXQgcj17b3RoZXI6c3MsYmxvY2s6QlQubm9ybWFsLGlubGluZTpUMi5ub3JtYWx9O3RoaXMub3B0aW9ucy5wZWRhbnRpYz8oci5ibG9jaz1CVC5wZWRhbnRpYyxyLmlubGluZT1UMi5wZWRhbnRpYyk6dGhpcy5vcHRpb25zLmdmbSYmKHIuYmxvY2s9QlQuZ2ZtLHRoaXMub3B0aW9ucy5icmVha3M/ci5pbmxpbmU9VDIuYnJlYWtzOnIuaW5saW5lPVQyLmdmbSksdGhpcy50b2tlbml6ZXIucnVsZXM9cn1zdGF0aWMgZ2V0IHJ1bGVzKCl7cmV0dXJue2Jsb2NrOkJULGlubGluZTpUMn19c3RhdGljIGxleChlLHIpe3JldHVybiBuZXcgSjkocikubGV4KGUpfXN0YXRpYyBsZXhJbmxpbmUoZSxyKXtyZXR1cm4gbmV3IEo5KHIpLmlubGluZVRva2VucyhlKX1sZXgoZSl7ZT1lLnJlcGxhY2Uoc3MuY2FycmlhZ2VSZXR1cm4sYApgKSx0aGlzLmJsb2NrVG9rZW5zKGUsdGhpcy50b2tlbnMpO2ZvcihsZXQgcj0wO3I8dGhpcy5pbmxpbmVRdWV1ZS5sZW5ndGg7cisrKXtsZXQgbj10aGlzLmlubGluZVF1ZXVlW3JdO3RoaXMuaW5saW5lVG9rZW5zKG4uc3JjLG4udG9rZW5zKX1yZXR1cm4gdGhpcy5pbmxpbmVRdWV1ZT1bXSx0aGlzLnRva2Vuc31ibG9ja1Rva2VucyhlLHI9W10sbj0hMSl7Zm9yKHRoaXMub3B0aW9ucy5wZWRhbnRpYyYmKGU9ZS5yZXBsYWNlKHNzLnRhYkNoYXJHbG9iYWwsIiAgICAiKS5yZXBsYWNlKHNzLnNwYWNlTGluZSwiIikpO2U7KXtsZXQgaTtpZih0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucz8uYmxvY2s/LnNvbWUocz0+KGk9cy5jYWxsKHtsZXhlcjp0aGlzfSxlLHIpKT8oZT1lLnN1YnN0cmluZyhpLnJhdy5sZW5ndGgpLHIucHVzaChpKSwhMCk6ITEpKWNvbnRpbnVlO2lmKGk9dGhpcy50b2tlbml6ZXIuc3BhY2UoZSkpe2U9ZS5zdWJzdHJpbmcoaS5yYXcubGVuZ3RoKTtsZXQgcz1yLmF0KC0xKTtpLnJhdy5sZW5ndGg9PT0xJiZzIT09dm9pZCAwP3MucmF3Kz1gCmA6ci5wdXNoKGkpO2NvbnRpbnVlfWlmKGk9dGhpcy50b2tlbml6ZXIuY29kZShlKSl7ZT1lLnN1YnN0cmluZyhpLnJhdy5sZW5ndGgpO2xldCBzPXIuYXQoLTEpO3M/LnR5cGU9PT0icGFyYWdyYXBoInx8cz8udHlwZT09PSJ0ZXh0Ij8ocy5yYXcrPWAKYCtpLnJhdyxzLnRleHQrPWAKYCtpLnRleHQsdGhpcy5pbmxpbmVRdWV1ZS5hdCgtMSkuc3JjPXMudGV4dCk6ci5wdXNoKGkpO2NvbnRpbnVlfWlmKGk9dGhpcy50b2tlbml6ZXIuZmVuY2VzKGUpKXtlPWUuc3Vic3RyaW5nKGkucmF3Lmxlbmd0aCksci5wdXNoKGkpO2NvbnRpbnVlfWlmKGk9dGhpcy50b2tlbml6ZXIuaGVhZGluZyhlKSl7ZT1lLnN1YnN0cmluZyhpLnJhdy5sZW5ndGgpLHIucHVzaChpKTtjb250aW51ZX1pZihpPXRoaXMudG9rZW5pemVyLmhyKGUpKXtlPWUuc3Vic3RyaW5nKGkucmF3Lmxlbmd0aCksci5wdXNoKGkpO2NvbnRpbnVlfWlmKGk9dGhpcy50b2tlbml6ZXIuYmxvY2txdW90ZShlKSl7ZT1lLnN1YnN0cmluZyhpLnJhdy5sZW5ndGgpLHIucHVzaChpKTtjb250aW51ZX1pZihpPXRoaXMudG9rZW5pemVyLmxpc3QoZSkpe2U9ZS5zdWJzdHJpbmcoaS5yYXcubGVuZ3RoKSxyLnB1c2goaSk7Y29udGludWV9aWYoaT10aGlzLnRva2VuaXplci5odG1sKGUpKXtlPWUuc3Vic3RyaW5nKGkucmF3Lmxlbmd0aCksci5wdXNoKGkpO2NvbnRpbnVlfWlmKGk9dGhpcy50b2tlbml6ZXIuZGVmKGUpKXtlPWUuc3Vic3RyaW5nKGkucmF3Lmxlbmd0aCk7bGV0IHM9ci5hdCgtMSk7cz8udHlwZT09PSJwYXJhZ3JhcGgifHxzPy50eXBlPT09InRleHQiPyhzLnJhdys9YApgK2kucmF3LHMudGV4dCs9YApgK2kucmF3LHRoaXMuaW5saW5lUXVldWUuYXQoLTEpLnNyYz1zLnRleHQpOnRoaXMudG9rZW5zLmxpbmtzW2kudGFnXXx8KHRoaXMudG9rZW5zLmxpbmtzW2kudGFnXT17aHJlZjppLmhyZWYsdGl0bGU6aS50aXRsZX0pO2NvbnRpbnVlfWlmKGk9dGhpcy50b2tlbml6ZXIudGFibGUoZSkpe2U9ZS5zdWJzdHJpbmcoaS5yYXcubGVuZ3RoKSxyLnB1c2goaSk7Y29udGludWV9aWYoaT10aGlzLnRva2VuaXplci5saGVhZGluZyhlKSl7ZT1lLnN1YnN0cmluZyhpLnJhdy5sZW5ndGgpLHIucHVzaChpKTtjb250aW51ZX1sZXQgYT1lO2lmKHRoaXMub3B0aW9ucy5leHRlbnNpb25zPy5zdGFydEJsb2NrKXtsZXQgcz0xLzAsbD1lLnNsaWNlKDEpLHU7dGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuc3RhcnRCbG9jay5mb3JFYWNoKGg9Pnt1PWguY2FsbCh7bGV4ZXI6dGhpc30sbCksdHlwZW9mIHU9PSJudW1iZXIiJiZ1Pj0wJiYocz1NYXRoLm1pbihzLHUpKX0pLHM8MS8wJiZzPj0wJiYoYT1lLnN1YnN0cmluZygwLHMrMSkpfWlmKHRoaXMuc3RhdGUudG9wJiYoaT10aGlzLnRva2VuaXplci5wYXJhZ3JhcGgoYSkpKXtsZXQgcz1yLmF0KC0xKTtuJiZzPy50eXBlPT09InBhcmFncmFwaCI/KHMucmF3Kz1gCmAraS5yYXcscy50ZXh0Kz1gCmAraS50ZXh0LHRoaXMuaW5saW5lUXVldWUucG9wKCksdGhpcy5pbmxpbmVRdWV1ZS5hdCgtMSkuc3JjPXMudGV4dCk6ci5wdXNoKGkpLG49YS5sZW5ndGghPT1lLmxlbmd0aCxlPWUuc3Vic3RyaW5nKGkucmF3Lmxlbmd0aCk7Y29udGludWV9aWYoaT10aGlzLnRva2VuaXplci50ZXh0KGUpKXtlPWUuc3Vic3RyaW5nKGkucmF3Lmxlbmd0aCk7bGV0IHM9ci5hdCgtMSk7cz8udHlwZT09PSJ0ZXh0Ij8ocy5yYXcrPWAKYCtpLnJhdyxzLnRleHQrPWAKYCtpLnRleHQsdGhpcy5pbmxpbmVRdWV1ZS5wb3AoKSx0aGlzLmlubGluZVF1ZXVlLmF0KC0xKS5zcmM9cy50ZXh0KTpyLnB1c2goaSk7Y29udGludWV9aWYoZSl7bGV0IHM9IkluZmluaXRlIGxvb3Agb24gYnl0ZTogIitlLmNoYXJDb2RlQXQoMCk7aWYodGhpcy5vcHRpb25zLnNpbGVudCl7Y29uc29sZS5lcnJvcihzKTticmVha31lbHNlIHRocm93IG5ldyBFcnJvcihzKX19cmV0dXJuIHRoaXMuc3RhdGUudG9wPSEwLHJ9aW5saW5lKGUscj1bXSl7cmV0dXJuIHRoaXMuaW5saW5lUXVldWUucHVzaCh7c3JjOmUsdG9rZW5zOnJ9KSxyfWlubGluZVRva2VucyhlLHI9W10pe2xldCBuPWUsaT1udWxsO2lmKHRoaXMudG9rZW5zLmxpbmtzKXtsZXQgbD1PYmplY3Qua2V5cyh0aGlzLnRva2Vucy5saW5rcyk7aWYobC5sZW5ndGg+MClmb3IoOyhpPXRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5yZWZsaW5rU2VhcmNoLmV4ZWMobikpIT1udWxsOylsLmluY2x1ZGVzKGlbMF0uc2xpY2UoaVswXS5sYXN0SW5kZXhPZigiWyIpKzEsLTEpKSYmKG49bi5zbGljZSgwLGkuaW5kZXgpKyJbIisiYSIucmVwZWF0KGlbMF0ubGVuZ3RoLTIpKyJdIituLnNsaWNlKHRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5yZWZsaW5rU2VhcmNoLmxhc3RJbmRleCkpfWZvcig7KGk9dGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLmV4ZWMobikpIT1udWxsOyluPW4uc2xpY2UoMCxpLmluZGV4KSsiKysiK24uc2xpY2UodGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLmxhc3RJbmRleCk7Zm9yKDsoaT10aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYmxvY2tTa2lwLmV4ZWMobikpIT1udWxsOyluPW4uc2xpY2UoMCxpLmluZGV4KSsiWyIrImEiLnJlcGVhdChpWzBdLmxlbmd0aC0yKSsiXSIrbi5zbGljZSh0aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYmxvY2tTa2lwLmxhc3RJbmRleCk7bGV0IGE9ITEscz0iIjtmb3IoO2U7KXthfHwocz0iIiksYT0hMTtsZXQgbDtpZih0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucz8uaW5saW5lPy5zb21lKGg9PihsPWguY2FsbCh7bGV4ZXI6dGhpc30sZSxyKSk/KGU9ZS5zdWJzdHJpbmcobC5yYXcubGVuZ3RoKSxyLnB1c2gobCksITApOiExKSljb250aW51ZTtpZihsPXRoaXMudG9rZW5pemVyLmVzY2FwZShlKSl7ZT1lLnN1YnN0cmluZyhsLnJhdy5sZW5ndGgpLHIucHVzaChsKTtjb250aW51ZX1pZihsPXRoaXMudG9rZW5pemVyLnRhZyhlKSl7ZT1lLnN1YnN0cmluZyhsLnJhdy5sZW5ndGgpLHIucHVzaChsKTtjb250aW51ZX1pZihsPXRoaXMudG9rZW5pemVyLmxpbmsoZSkpe2U9ZS5zdWJzdHJpbmcobC5yYXcubGVuZ3RoKSxyLnB1c2gobCk7Y29udGludWV9aWYobD10aGlzLnRva2VuaXplci5yZWZsaW5rKGUsdGhpcy50b2tlbnMubGlua3MpKXtlPWUuc3Vic3RyaW5nKGwucmF3Lmxlbmd0aCk7bGV0IGg9ci5hdCgtMSk7bC50eXBlPT09InRleHQiJiZoPy50eXBlPT09InRleHQiPyhoLnJhdys9bC5yYXcsaC50ZXh0Kz1sLnRleHQpOnIucHVzaChsKTtjb250aW51ZX1pZihsPXRoaXMudG9rZW5pemVyLmVtU3Ryb25nKGUsbixzKSl7ZT1lLnN1YnN0cmluZyhsLnJhdy5sZW5ndGgpLHIucHVzaChsKTtjb250aW51ZX1pZihsPXRoaXMudG9rZW5pemVyLmNvZGVzcGFuKGUpKXtlPWUuc3Vic3RyaW5nKGwucmF3Lmxlbmd0aCksci5wdXNoKGwpO2NvbnRpbnVlfWlmKGw9dGhpcy50b2tlbml6ZXIuYnIoZSkpe2U9ZS5zdWJzdHJpbmcobC5yYXcubGVuZ3RoKSxyLnB1c2gobCk7Y29udGludWV9aWYobD10aGlzLnRva2VuaXplci5kZWwoZSkpe2U9ZS5zdWJzdHJpbmcobC5yYXcubGVuZ3RoKSxyLnB1c2gobCk7Y29udGludWV9aWYobD10aGlzLnRva2VuaXplci5hdXRvbGluayhlKSl7ZT1lLnN1YnN0cmluZyhsLnJhdy5sZW5ndGgpLHIucHVzaChsKTtjb250aW51ZX1pZighdGhpcy5zdGF0ZS5pbkxpbmsmJihsPXRoaXMudG9rZW5pemVyLnVybChlKSkpe2U9ZS5zdWJzdHJpbmcobC5yYXcubGVuZ3RoKSxyLnB1c2gobCk7Y29udGludWV9bGV0IHU9ZTtpZih0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucz8uc3RhcnRJbmxpbmUpe2xldCBoPTEvMCxmPWUuc2xpY2UoMSksZDt0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydElubGluZS5mb3JFYWNoKHA9PntkPXAuY2FsbCh7bGV4ZXI6dGhpc30sZiksdHlwZW9mIGQ9PSJudW1iZXIiJiZkPj0wJiYoaD1NYXRoLm1pbihoLGQpKX0pLGg8MS8wJiZoPj0wJiYodT1lLnN1YnN0cmluZygwLGgrMSkpfWlmKGw9dGhpcy50b2tlbml6ZXIuaW5saW5lVGV4dCh1KSl7ZT1lLnN1YnN0cmluZyhsLnJhdy5sZW5ndGgpLGwucmF3LnNsaWNlKC0xKSE9PSJfIiYmKHM9bC5yYXcuc2xpY2UoLTEpKSxhPSEwO2xldCBoPXIuYXQoLTEpO2g/LnR5cGU9PT0idGV4dCI/KGgucmF3Kz1sLnJhdyxoLnRleHQrPWwudGV4dCk6ci5wdXNoKGwpO2NvbnRpbnVlfWlmKGUpe2xldCBoPSJJbmZpbml0ZSBsb29wIG9uIGJ5dGU6ICIrZS5jaGFyQ29kZUF0KDApO2lmKHRoaXMub3B0aW9ucy5zaWxlbnQpe2NvbnNvbGUuZXJyb3IoaCk7YnJlYWt9ZWxzZSB0aHJvdyBuZXcgRXJyb3IoaCl9fXJldHVybiByfX0sR1Q9Y2xhc3N7c3RhdGlje28odGhpcywiJCIpfW9wdGlvbnM7cGFyc2VyO2NvbnN0cnVjdG9yKHQpe3RoaXMub3B0aW9ucz10fHxVZH1zcGFjZSh0KXtyZXR1cm4iIn1jb2RlKHt0ZXh0OnQsbGFuZzplLGVzY2FwZWQ6cn0pe2xldCBuPShlfHwiIikubWF0Y2goc3Mubm90U3BhY2VTdGFydCk/LlswXSxpPXQucmVwbGFjZShzcy5lbmRpbmdOZXdsaW5lLCIiKStgCmA7cmV0dXJuIG4/JzxwcmU+PGNvZGUgY2xhc3M9Imxhbmd1YWdlLScreGMobikrJyI+Jysocj9pOnhjKGksITApKStgPC9jb2RlPjwvcHJlPgpgOiI8cHJlPjxjb2RlPiIrKHI/aTp4YyhpLCEwKSkrYDwvY29kZT48L3ByZT4KYH1ibG9ja3F1b3RlKHt0b2tlbnM6dH0pe3JldHVybmA8YmxvY2txdW90ZT4KJHt0aGlzLnBhcnNlci5wYXJzZSh0KX08L2Jsb2NrcXVvdGU+CmB9aHRtbCh7dGV4dDp0fSl7cmV0dXJuIHR9aGVhZGluZyh7dG9rZW5zOnQsZGVwdGg6ZX0pe3JldHVybmA8aCR7ZX0+JHt0aGlzLnBhcnNlci5wYXJzZUlubGluZSh0KX08L2gke2V9PgpgfWhyKHQpe3JldHVybmA8aHI+CmB9bGlzdCh0KXtsZXQgZT10Lm9yZGVyZWQscj10LnN0YXJ0LG49IiI7Zm9yKGxldCBzPTA7czx0Lml0ZW1zLmxlbmd0aDtzKyspe2xldCBsPXQuaXRlbXNbc107bis9dGhpcy5saXN0aXRlbShsKX1sZXQgaT1lPyJvbCI6InVsIixhPWUmJnIhPT0xPycgc3RhcnQ9IicrcisnIic6IiI7cmV0dXJuIjwiK2krYStgPgpgK24rIjwvIitpK2A+CmB9bGlzdGl0ZW0odCl7bGV0IGU9IiI7aWYodC50YXNrKXtsZXQgcj10aGlzLmNoZWNrYm94KHtjaGVja2VkOiEhdC5jaGVja2VkfSk7dC5sb29zZT90LnRva2Vuc1swXT8udHlwZT09PSJwYXJhZ3JhcGgiPyh0LnRva2Vuc1swXS50ZXh0PXIrIiAiK3QudG9rZW5zWzBdLnRleHQsdC50b2tlbnNbMF0udG9rZW5zJiZ0LnRva2Vuc1swXS50b2tlbnMubGVuZ3RoPjAmJnQudG9rZW5zWzBdLnRva2Vuc1swXS50eXBlPT09InRleHQiJiYodC50b2tlbnNbMF0udG9rZW5zWzBdLnRleHQ9cisiICIreGModC50b2tlbnNbMF0udG9rZW5zWzBdLnRleHQpLHQudG9rZW5zWzBdLnRva2Vuc1swXS5lc2NhcGVkPSEwKSk6dC50b2tlbnMudW5zaGlmdCh7dHlwZToidGV4dCIscmF3OnIrIiAiLHRleHQ6cisiICIsZXNjYXBlZDohMH0pOmUrPXIrIiAifXJldHVybiBlKz10aGlzLnBhcnNlci5wYXJzZSh0LnRva2VucywhIXQubG9vc2UpLGA8bGk+JHtlfTwvbGk+CmB9Y2hlY2tib3goe2NoZWNrZWQ6dH0pe3JldHVybiI8aW5wdXQgIisodD8nY2hlY2tlZD0iIiAnOiIiKSsnZGlzYWJsZWQ9IiIgdHlwZT0iY2hlY2tib3giPid9cGFyYWdyYXBoKHt0b2tlbnM6dH0pe3JldHVybmA8cD4ke3RoaXMucGFyc2VyLnBhcnNlSW5saW5lKHQpfTwvcD4KYH10YWJsZSh0KXtsZXQgZT0iIixyPSIiO2ZvcihsZXQgaT0wO2k8dC5oZWFkZXIubGVuZ3RoO2krKylyKz10aGlzLnRhYmxlY2VsbCh0LmhlYWRlcltpXSk7ZSs9dGhpcy50YWJsZXJvdyh7dGV4dDpyfSk7bGV0IG49IiI7Zm9yKGxldCBpPTA7aTx0LnJvd3MubGVuZ3RoO2krKyl7bGV0IGE9dC5yb3dzW2ldO3I9IiI7Zm9yKGxldCBzPTA7czxhLmxlbmd0aDtzKyspcis9dGhpcy50YWJsZWNlbGwoYVtzXSk7bis9dGhpcy50YWJsZXJvdyh7dGV4dDpyfSl9cmV0dXJuIG4mJihuPWA8dGJvZHk+JHtufTwvdGJvZHk+YCksYDx0YWJsZT4KPHRoZWFkPgpgK2UrYDwvdGhlYWQ+CmArbitgPC90YWJsZT4KYH10YWJsZXJvdyh7dGV4dDp0fSl7cmV0dXJuYDx0cj4KJHt0fTwvdHI+CmB9dGFibGVjZWxsKHQpe2xldCBlPXRoaXMucGFyc2VyLnBhcnNlSW5saW5lKHQudG9rZW5zKSxyPXQuaGVhZGVyPyJ0aCI6InRkIjtyZXR1cm4odC5hbGlnbj9gPCR7cn0gYWxpZ249IiR7dC5hbGlnbn0iPmA6YDwke3J9PmApK2UrYDwvJHtyfT4KYH1zdHJvbmcoe3Rva2Vuczp0fSl7cmV0dXJuYDxzdHJvbmc+JHt0aGlzLnBhcnNlci5wYXJzZUlubGluZSh0KX08L3N0cm9uZz5gfWVtKHt0b2tlbnM6dH0pe3JldHVybmA8ZW0+JHt0aGlzLnBhcnNlci5wYXJzZUlubGluZSh0KX08L2VtPmB9Y29kZXNwYW4oe3RleHQ6dH0pe3JldHVybmA8Y29kZT4ke3hjKHQsITApfTwvY29kZT5gfWJyKHQpe3JldHVybiI8YnI+In1kZWwoe3Rva2Vuczp0fSl7cmV0dXJuYDxkZWw+JHt0aGlzLnBhcnNlci5wYXJzZUlubGluZSh0KX08L2RlbD5gfWxpbmsoe2hyZWY6dCx0aXRsZTplLHRva2VuczpyfSl7bGV0IG49dGhpcy5wYXJzZXIucGFyc2VJbmxpbmUociksaT1lUSh0KTtpZihpPT09bnVsbClyZXR1cm4gbjt0PWk7bGV0IGE9JzxhIGhyZWY9IicrdCsnIic7cmV0dXJuIGUmJihhKz0nIHRpdGxlPSInK3hjKGUpKyciJyksYSs9Ij4iK24rIjwvYT4iLGF9aW1hZ2Uoe2hyZWY6dCx0aXRsZTplLHRleHQ6cix0b2tlbnM6bn0pe24mJihyPXRoaXMucGFyc2VyLnBhcnNlSW5saW5lKG4sdGhpcy5wYXJzZXIudGV4dFJlbmRlcmVyKSk7bGV0IGk9ZVEodCk7aWYoaT09PW51bGwpcmV0dXJuIHhjKHIpO3Q9aTtsZXQgYT1gPGltZyBzcmM9IiR7dH0iIGFsdD0iJHtyfSJgO3JldHVybiBlJiYoYSs9YCB0aXRsZT0iJHt4YyhlKX0iYCksYSs9Ij4iLGF9dGV4dCh0KXtyZXR1cm4idG9rZW5zImluIHQmJnQudG9rZW5zP3RoaXMucGFyc2VyLnBhcnNlSW5saW5lKHQudG9rZW5zKToiZXNjYXBlZCJpbiB0JiZ0LmVzY2FwZWQ/dC50ZXh0OnhjKHQudGV4dCl9fSxjTD1jbGFzc3tzdGF0aWN7byh0aGlzLCJfIil9c3Ryb25nKHt0ZXh0OnR9KXtyZXR1cm4gdH1lbSh7dGV4dDp0fSl7cmV0dXJuIHR9Y29kZXNwYW4oe3RleHQ6dH0pe3JldHVybiB0fWRlbCh7dGV4dDp0fSl7cmV0dXJuIHR9aHRtbCh7dGV4dDp0fSl7cmV0dXJuIHR9dGV4dCh7dGV4dDp0fSl7cmV0dXJuIHR9bGluayh7dGV4dDp0fSl7cmV0dXJuIiIrdH1pbWFnZSh7dGV4dDp0fSl7cmV0dXJuIiIrdH1icigpe3JldHVybiIifX0sTXU9Y2xhc3MgZUx7c3RhdGlje28odGhpcywiYSIpfW9wdGlvbnM7cmVuZGVyZXI7dGV4dFJlbmRlcmVyO2NvbnN0cnVjdG9yKGUpe3RoaXMub3B0aW9ucz1lfHxVZCx0aGlzLm9wdGlvbnMucmVuZGVyZXI9dGhpcy5vcHRpb25zLnJlbmRlcmVyfHxuZXcgR1QsdGhpcy5yZW5kZXJlcj10aGlzLm9wdGlvbnMucmVuZGVyZXIsdGhpcy5yZW5kZXJlci5vcHRpb25zPXRoaXMub3B0aW9ucyx0aGlzLnJlbmRlcmVyLnBhcnNlcj10aGlzLHRoaXMudGV4dFJlbmRlcmVyPW5ldyBjTH1zdGF0aWMgcGFyc2UoZSxyKXtyZXR1cm4gbmV3IGVMKHIpLnBhcnNlKGUpfXN0YXRpYyBwYXJzZUlubGluZShlLHIpe3JldHVybiBuZXcgZUwocikucGFyc2VJbmxpbmUoZSl9cGFyc2UoZSxyPSEwKXtsZXQgbj0iIjtmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKyl7bGV0IGE9ZVtpXTtpZih0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucz8ucmVuZGVyZXJzPy5bYS50eXBlXSl7bGV0IGw9YSx1PXRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1tsLnR5cGVdLmNhbGwoe3BhcnNlcjp0aGlzfSxsKTtpZih1IT09ITF8fCFbInNwYWNlIiwiaHIiLCJoZWFkaW5nIiwiY29kZSIsInRhYmxlIiwiYmxvY2txdW90ZSIsImxpc3QiLCJodG1sIiwicGFyYWdyYXBoIiwidGV4dCJdLmluY2x1ZGVzKGwudHlwZSkpe24rPXV8fCIiO2NvbnRpbnVlfX1sZXQgcz1hO3N3aXRjaChzLnR5cGUpe2Nhc2Uic3BhY2UiOntuKz10aGlzLnJlbmRlcmVyLnNwYWNlKHMpO2NvbnRpbnVlfWNhc2UiaHIiOntuKz10aGlzLnJlbmRlcmVyLmhyKHMpO2NvbnRpbnVlfWNhc2UiaGVhZGluZyI6e24rPXRoaXMucmVuZGVyZXIuaGVhZGluZyhzKTtjb250aW51ZX1jYXNlImNvZGUiOntuKz10aGlzLnJlbmRlcmVyLmNvZGUocyk7Y29udGludWV9Y2FzZSJ0YWJsZSI6e24rPXRoaXMucmVuZGVyZXIudGFibGUocyk7Y29udGludWV9Y2FzZSJibG9ja3F1b3RlIjp7bis9dGhpcy5yZW5kZXJlci5ibG9ja3F1b3RlKHMpO2NvbnRpbnVlfWNhc2UibGlzdCI6e24rPXRoaXMucmVuZGVyZXIubGlzdChzKTtjb250aW51ZX1jYXNlImh0bWwiOntuKz10aGlzLnJlbmRlcmVyLmh0bWwocyk7Y29udGludWV9Y2FzZSJwYXJhZ3JhcGgiOntuKz10aGlzLnJlbmRlcmVyLnBhcmFncmFwaChzKTtjb250aW51ZX1jYXNlInRleHQiOntsZXQgbD1zLHU9dGhpcy5yZW5kZXJlci50ZXh0KGwpO2Zvcig7aSsxPGUubGVuZ3RoJiZlW2krMV0udHlwZT09PSJ0ZXh0IjspbD1lWysraV0sdSs9YApgK3RoaXMucmVuZGVyZXIudGV4dChsKTtyP24rPXRoaXMucmVuZGVyZXIucGFyYWdyYXBoKHt0eXBlOiJwYXJhZ3JhcGgiLHJhdzp1LHRleHQ6dSx0b2tlbnM6W3t0eXBlOiJ0ZXh0IixyYXc6dSx0ZXh0OnUsZXNjYXBlZDohMH1dfSk6bis9dTtjb250aW51ZX1kZWZhdWx0OntsZXQgbD0nVG9rZW4gd2l0aCAiJytzLnR5cGUrJyIgdHlwZSB3YXMgbm90IGZvdW5kLic7aWYodGhpcy5vcHRpb25zLnNpbGVudClyZXR1cm4gY29uc29sZS5lcnJvcihsKSwiIjt0aHJvdyBuZXcgRXJyb3IobCl9fX1yZXR1cm4gbn1wYXJzZUlubGluZShlLHI9dGhpcy5yZW5kZXJlcil7bGV0IG49IiI7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspe2xldCBhPWVbaV07aWYodGhpcy5vcHRpb25zLmV4dGVuc2lvbnM/LnJlbmRlcmVycz8uW2EudHlwZV0pe2xldCBsPXRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1thLnR5cGVdLmNhbGwoe3BhcnNlcjp0aGlzfSxhKTtpZihsIT09ITF8fCFbImVzY2FwZSIsImh0bWwiLCJsaW5rIiwiaW1hZ2UiLCJzdHJvbmciLCJlbSIsImNvZGVzcGFuIiwiYnIiLCJkZWwiLCJ0ZXh0Il0uaW5jbHVkZXMoYS50eXBlKSl7bis9bHx8IiI7Y29udGludWV9fWxldCBzPWE7c3dpdGNoKHMudHlwZSl7Y2FzZSJlc2NhcGUiOntuKz1yLnRleHQocyk7YnJlYWt9Y2FzZSJodG1sIjp7bis9ci5odG1sKHMpO2JyZWFrfWNhc2UibGluayI6e24rPXIubGluayhzKTticmVha31jYXNlImltYWdlIjp7bis9ci5pbWFnZShzKTticmVha31jYXNlInN0cm9uZyI6e24rPXIuc3Ryb25nKHMpO2JyZWFrfWNhc2UiZW0iOntuKz1yLmVtKHMpO2JyZWFrfWNhc2UiY29kZXNwYW4iOntuKz1yLmNvZGVzcGFuKHMpO2JyZWFrfWNhc2UiYnIiOntuKz1yLmJyKHMpO2JyZWFrfWNhc2UiZGVsIjp7bis9ci5kZWwocyk7YnJlYWt9Y2FzZSJ0ZXh0Ijp7bis9ci50ZXh0KHMpO2JyZWFrfWRlZmF1bHQ6e2xldCBsPSdUb2tlbiB3aXRoICInK3MudHlwZSsnIiB0eXBlIHdhcyBub3QgZm91bmQuJztpZih0aGlzLm9wdGlvbnMuc2lsZW50KXJldHVybiBjb25zb2xlLmVycm9yKGwpLCIiO3Rocm93IG5ldyBFcnJvcihsKX19fXJldHVybiBufX0sRlQ9Y2xhc3N7c3RhdGlje28odGhpcywiTCIpfW9wdGlvbnM7YmxvY2s7Y29uc3RydWN0b3IodCl7dGhpcy5vcHRpb25zPXR8fFVkfXN0YXRpYyBwYXNzVGhyb3VnaEhvb2tzPW5ldyBTZXQoWyJwcmVwcm9jZXNzIiwicG9zdHByb2Nlc3MiLCJwcm9jZXNzQWxsVG9rZW5zIl0pO3ByZXByb2Nlc3ModCl7cmV0dXJuIHR9cG9zdHByb2Nlc3ModCl7cmV0dXJuIHR9cHJvY2Vzc0FsbFRva2Vucyh0KXtyZXR1cm4gdH1wcm92aWRlTGV4ZXIoKXtyZXR1cm4gdGhpcy5ibG9jaz9OdS5sZXg6TnUubGV4SW5saW5lfXByb3ZpZGVQYXJzZXIoKXtyZXR1cm4gdGhpcy5ibG9jaz9NdS5wYXJzZTpNdS5wYXJzZUlubGluZX19LGREZT1jbGFzc3tzdGF0aWN7byh0aGlzLCJCIil9ZGVmYXVsdHM9dEwoKTtvcHRpb25zPXRoaXMuc2V0T3B0aW9ucztwYXJzZT10aGlzLnBhcnNlTWFya2Rvd24oITApO3BhcnNlSW5saW5lPXRoaXMucGFyc2VNYXJrZG93bighMSk7UGFyc2VyPU11O1JlbmRlcmVyPUdUO1RleHRSZW5kZXJlcj1jTDtMZXhlcj1OdTtUb2tlbml6ZXI9elQ7SG9va3M9RlQ7Y29uc3RydWN0b3IoLi4udCl7dGhpcy51c2UoLi4udCl9d2Fsa1Rva2Vucyh0LGUpe2xldCByPVtdO2ZvcihsZXQgbiBvZiB0KXN3aXRjaChyPXIuY29uY2F0KGUuY2FsbCh0aGlzLG4pKSxuLnR5cGUpe2Nhc2UidGFibGUiOntsZXQgaT1uO2ZvcihsZXQgYSBvZiBpLmhlYWRlcilyPXIuY29uY2F0KHRoaXMud2Fsa1Rva2VucyhhLnRva2VucyxlKSk7Zm9yKGxldCBhIG9mIGkucm93cylmb3IobGV0IHMgb2YgYSlyPXIuY29uY2F0KHRoaXMud2Fsa1Rva2VucyhzLnRva2VucyxlKSk7YnJlYWt9Y2FzZSJsaXN0Ijp7bGV0IGk9bjtyPXIuY29uY2F0KHRoaXMud2Fsa1Rva2VucyhpLml0ZW1zLGUpKTticmVha31kZWZhdWx0OntsZXQgaT1uO3RoaXMuZGVmYXVsdHMuZXh0ZW5zaW9ucz8uY2hpbGRUb2tlbnM/LltpLnR5cGVdP3RoaXMuZGVmYXVsdHMuZXh0ZW5zaW9ucy5jaGlsZFRva2Vuc1tpLnR5cGVdLmZvckVhY2goYT0+e2xldCBzPWlbYV0uZmxhdCgxLzApO3I9ci5jb25jYXQodGhpcy53YWxrVG9rZW5zKHMsZSkpfSk6aS50b2tlbnMmJihyPXIuY29uY2F0KHRoaXMud2Fsa1Rva2VucyhpLnRva2VucyxlKSkpfX1yZXR1cm4gcn11c2UoLi4udCl7bGV0IGU9dGhpcy5kZWZhdWx0cy5leHRlbnNpb25zfHx7cmVuZGVyZXJzOnt9LGNoaWxkVG9rZW5zOnt9fTtyZXR1cm4gdC5mb3JFYWNoKHI9PntsZXQgbj17Li4ucn07aWYobi5hc3luYz10aGlzLmRlZmF1bHRzLmFzeW5jfHxuLmFzeW5jfHwhMSxyLmV4dGVuc2lvbnMmJihyLmV4dGVuc2lvbnMuZm9yRWFjaChpPT57aWYoIWkubmFtZSl0aHJvdyBuZXcgRXJyb3IoImV4dGVuc2lvbiBuYW1lIHJlcXVpcmVkIik7aWYoInJlbmRlcmVyImluIGkpe2xldCBhPWUucmVuZGVyZXJzW2kubmFtZV07YT9lLnJlbmRlcmVyc1tpLm5hbWVdPWZ1bmN0aW9uKC4uLnMpe2xldCBsPWkucmVuZGVyZXIuYXBwbHkodGhpcyxzKTtyZXR1cm4gbD09PSExJiYobD1hLmFwcGx5KHRoaXMscykpLGx9OmUucmVuZGVyZXJzW2kubmFtZV09aS5yZW5kZXJlcn1pZigidG9rZW5pemVyImluIGkpe2lmKCFpLmxldmVsfHxpLmxldmVsIT09ImJsb2NrIiYmaS5sZXZlbCE9PSJpbmxpbmUiKXRocm93IG5ldyBFcnJvcigiZXh0ZW5zaW9uIGxldmVsIG11c3QgYmUgJ2Jsb2NrJyBvciAnaW5saW5lJyIpO2xldCBhPWVbaS5sZXZlbF07YT9hLnVuc2hpZnQoaS50b2tlbml6ZXIpOmVbaS5sZXZlbF09W2kudG9rZW5pemVyXSxpLnN0YXJ0JiYoaS5sZXZlbD09PSJibG9jayI/ZS5zdGFydEJsb2NrP2Uuc3RhcnRCbG9jay5wdXNoKGkuc3RhcnQpOmUuc3RhcnRCbG9jaz1baS5zdGFydF06aS5sZXZlbD09PSJpbmxpbmUiJiYoZS5zdGFydElubGluZT9lLnN0YXJ0SW5saW5lLnB1c2goaS5zdGFydCk6ZS5zdGFydElubGluZT1baS5zdGFydF0pKX0iY2hpbGRUb2tlbnMiaW4gaSYmaS5jaGlsZFRva2VucyYmKGUuY2hpbGRUb2tlbnNbaS5uYW1lXT1pLmNoaWxkVG9rZW5zKX0pLG4uZXh0ZW5zaW9ucz1lKSxyLnJlbmRlcmVyKXtsZXQgaT10aGlzLmRlZmF1bHRzLnJlbmRlcmVyfHxuZXcgR1QodGhpcy5kZWZhdWx0cyk7Zm9yKGxldCBhIGluIHIucmVuZGVyZXIpe2lmKCEoYSBpbiBpKSl0aHJvdyBuZXcgRXJyb3IoYHJlbmRlcmVyICcke2F9JyBkb2VzIG5vdCBleGlzdGApO2lmKFsib3B0aW9ucyIsInBhcnNlciJdLmluY2x1ZGVzKGEpKWNvbnRpbnVlO2xldCBzPWEsbD1yLnJlbmRlcmVyW3NdLHU9aVtzXTtpW3NdPSguLi5oKT0+e2xldCBmPWwuYXBwbHkoaSxoKTtyZXR1cm4gZj09PSExJiYoZj11LmFwcGx5KGksaCkpLGZ8fCIifX1uLnJlbmRlcmVyPWl9aWYoci50b2tlbml6ZXIpe2xldCBpPXRoaXMuZGVmYXVsdHMudG9rZW5pemVyfHxuZXcgelQodGhpcy5kZWZhdWx0cyk7Zm9yKGxldCBhIGluIHIudG9rZW5pemVyKXtpZighKGEgaW4gaSkpdGhyb3cgbmV3IEVycm9yKGB0b2tlbml6ZXIgJyR7YX0nIGRvZXMgbm90IGV4aXN0YCk7aWYoWyJvcHRpb25zIiwicnVsZXMiLCJsZXhlciJdLmluY2x1ZGVzKGEpKWNvbnRpbnVlO2xldCBzPWEsbD1yLnRva2VuaXplcltzXSx1PWlbc107aVtzXT0oLi4uaCk9PntsZXQgZj1sLmFwcGx5KGksaCk7cmV0dXJuIGY9PT0hMSYmKGY9dS5hcHBseShpLGgpKSxmfX1uLnRva2VuaXplcj1pfWlmKHIuaG9va3Mpe2xldCBpPXRoaXMuZGVmYXVsdHMuaG9va3N8fG5ldyBGVDtmb3IobGV0IGEgaW4gci5ob29rcyl7aWYoIShhIGluIGkpKXRocm93IG5ldyBFcnJvcihgaG9vayAnJHthfScgZG9lcyBub3QgZXhpc3RgKTtpZihbIm9wdGlvbnMiLCJibG9jayJdLmluY2x1ZGVzKGEpKWNvbnRpbnVlO2xldCBzPWEsbD1yLmhvb2tzW3NdLHU9aVtzXTtGVC5wYXNzVGhyb3VnaEhvb2tzLmhhcyhhKT9pW3NdPWg9PntpZih0aGlzLmRlZmF1bHRzLmFzeW5jKXJldHVybiBQcm9taXNlLnJlc29sdmUobC5jYWxsKGksaCkpLnRoZW4oZD0+dS5jYWxsKGksZCkpO2xldCBmPWwuY2FsbChpLGgpO3JldHVybiB1LmNhbGwoaSxmKX06aVtzXT0oLi4uaCk9PntsZXQgZj1sLmFwcGx5KGksaCk7cmV0dXJuIGY9PT0hMSYmKGY9dS5hcHBseShpLGgpKSxmfX1uLmhvb2tzPWl9aWYoci53YWxrVG9rZW5zKXtsZXQgaT10aGlzLmRlZmF1bHRzLndhbGtUb2tlbnMsYT1yLndhbGtUb2tlbnM7bi53YWxrVG9rZW5zPWZ1bmN0aW9uKHMpe2xldCBsPVtdO3JldHVybiBsLnB1c2goYS5jYWxsKHRoaXMscykpLGkmJihsPWwuY29uY2F0KGkuY2FsbCh0aGlzLHMpKSksbH19dGhpcy5kZWZhdWx0cz17Li4udGhpcy5kZWZhdWx0cywuLi5ufX0pLHRoaXN9c2V0T3B0aW9ucyh0KXtyZXR1cm4gdGhpcy5kZWZhdWx0cz17Li4udGhpcy5kZWZhdWx0cywuLi50fSx0aGlzfWxleGVyKHQsZSl7cmV0dXJuIE51LmxleCh0LGU/P3RoaXMuZGVmYXVsdHMpfXBhcnNlcih0LGUpe3JldHVybiBNdS5wYXJzZSh0LGU/P3RoaXMuZGVmYXVsdHMpfXBhcnNlTWFya2Rvd24odCl7cmV0dXJuKGUscik9PntsZXQgbj17Li4ucn0saT17Li4udGhpcy5kZWZhdWx0cywuLi5ufSxhPXRoaXMub25FcnJvcighIWkuc2lsZW50LCEhaS5hc3luYyk7aWYodGhpcy5kZWZhdWx0cy5hc3luYz09PSEwJiZuLmFzeW5jPT09ITEpcmV0dXJuIGEobmV3IEVycm9yKCJtYXJrZWQoKTogVGhlIGFzeW5jIG9wdGlvbiB3YXMgc2V0IHRvIHRydWUgYnkgYW4gZXh0ZW5zaW9uLiBSZW1vdmUgYXN5bmM6IGZhbHNlIGZyb20gdGhlIHBhcnNlIG9wdGlvbnMgb2JqZWN0IHRvIHJldHVybiBhIFByb21pc2UuIikpO2lmKHR5cGVvZiBlPiJ1Inx8ZT09PW51bGwpcmV0dXJuIGEobmV3IEVycm9yKCJtYXJrZWQoKTogaW5wdXQgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZCBvciBudWxsIikpO2lmKHR5cGVvZiBlIT0ic3RyaW5nIilyZXR1cm4gYShuZXcgRXJyb3IoIm1hcmtlZCgpOiBpbnB1dCBwYXJhbWV0ZXIgaXMgb2YgdHlwZSAiK09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSsiLCBzdHJpbmcgZXhwZWN0ZWQiKSk7aS5ob29rcyYmKGkuaG9va3Mub3B0aW9ucz1pLGkuaG9va3MuYmxvY2s9dCk7bGV0IHM9aS5ob29rcz9pLmhvb2tzLnByb3ZpZGVMZXhlcigpOnQ/TnUubGV4Ok51LmxleElubGluZSxsPWkuaG9va3M/aS5ob29rcy5wcm92aWRlUGFyc2VyKCk6dD9NdS5wYXJzZTpNdS5wYXJzZUlubGluZTtpZihpLmFzeW5jKXJldHVybiBQcm9taXNlLnJlc29sdmUoaS5ob29rcz9pLmhvb2tzLnByZXByb2Nlc3MoZSk6ZSkudGhlbih1PT5zKHUsaSkpLnRoZW4odT0+aS5ob29rcz9pLmhvb2tzLnByb2Nlc3NBbGxUb2tlbnModSk6dSkudGhlbih1PT5pLndhbGtUb2tlbnM/UHJvbWlzZS5hbGwodGhpcy53YWxrVG9rZW5zKHUsaS53YWxrVG9rZW5zKSkudGhlbigoKT0+dSk6dSkudGhlbih1PT5sKHUsaSkpLnRoZW4odT0+aS5ob29rcz9pLmhvb2tzLnBvc3Rwcm9jZXNzKHUpOnUpLmNhdGNoKGEpO3RyeXtpLmhvb2tzJiYoZT1pLmhvb2tzLnByZXByb2Nlc3MoZSkpO2xldCB1PXMoZSxpKTtpLmhvb2tzJiYodT1pLmhvb2tzLnByb2Nlc3NBbGxUb2tlbnModSkpLGkud2Fsa1Rva2VucyYmdGhpcy53YWxrVG9rZW5zKHUsaS53YWxrVG9rZW5zKTtsZXQgaD1sKHUsaSk7cmV0dXJuIGkuaG9va3MmJihoPWkuaG9va3MucG9zdHByb2Nlc3MoaCkpLGh9Y2F0Y2godSl7cmV0dXJuIGEodSl9fX1vbkVycm9yKHQsZSl7cmV0dXJuIHI9PntpZihyLm1lc3NhZ2UrPWAKUGxlYXNlIHJlcG9ydCB0aGlzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXJrZWRqcy9tYXJrZWQuYCx0KXtsZXQgbj0iPHA+QW4gZXJyb3Igb2NjdXJyZWQ6PC9wPjxwcmU+Iit4YyhyLm1lc3NhZ2UrIiIsITApKyI8L3ByZT4iO3JldHVybiBlP1Byb21pc2UucmVzb2x2ZShuKTpufWlmKGUpcmV0dXJuIFByb21pc2UucmVqZWN0KHIpO3Rocm93IHJ9fX0sVmQ9bmV3IGREZTtvKEpyLCJrIik7SnIub3B0aW9ucz1Kci5zZXRPcHRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBWZC5zZXRPcHRpb25zKHQpLEpyLmRlZmF1bHRzPVZkLmRlZmF1bHRzLG5RKEpyLmRlZmF1bHRzKSxKcn07SnIuZ2V0RGVmYXVsdHM9dEw7SnIuZGVmYXVsdHM9VWQ7SnIudXNlPWZ1bmN0aW9uKC4uLnQpe3JldHVybiBWZC51c2UoLi4udCksSnIuZGVmYXVsdHM9VmQuZGVmYXVsdHMsblEoSnIuZGVmYXVsdHMpLEpyfTtKci53YWxrVG9rZW5zPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFZkLndhbGtUb2tlbnModCxlKX07SnIucGFyc2VJbmxpbmU9VmQucGFyc2VJbmxpbmU7SnIuUGFyc2VyPU11O0pyLnBhcnNlcj1NdS5wYXJzZTtKci5SZW5kZXJlcj1HVDtKci5UZXh0UmVuZGVyZXI9Y0w7SnIuTGV4ZXI9TnU7SnIubGV4ZXI9TnUubGV4O0pyLlRva2VuaXplcj16VDtKci5Ib29rcz1GVDtKci5wYXJzZT1KcjtaU3Q9SnIub3B0aW9ucyxKU3Q9SnIuc2V0T3B0aW9ucyxlNnQ9SnIudXNlLHQ2dD1Kci53YWxrVG9rZW5zLHI2dD1Kci5wYXJzZUlubGluZSxuNnQ9TXUucGFyc2UsaTZ0PU51LmxleH0pO2Z1bmN0aW9uIHBEZSh0LHttYXJrZG93bkF1dG9XcmFwOmV9KXtsZXQgbj10LnJlcGxhY2UoLzxiclwvPi9nLGAKYCkucmVwbGFjZSgvXG57Mix9L2csYApgKSxpPWo0KG4pO3JldHVybiBlPT09ITE/aS5yZXBsYWNlKC8gL2csIiZuYnNwOyIpOml9ZnVuY3Rpb24gbVEodCxlPXt9KXtsZXQgcj1wRGUodCxlKSxuPUpyLmxleGVyKHIpLGk9W1tdXSxhPTA7ZnVuY3Rpb24gcyhsLHU9Im5vcm1hbCIpe2wudHlwZT09PSJ0ZXh0Ij9sLnRleHQuc3BsaXQoYApgKS5mb3JFYWNoKChmLGQpPT57ZCE9PTAmJihhKyssaS5wdXNoKFtdKSksZi5zcGxpdCgiICIpLmZvckVhY2gocD0+e3A9cC5yZXBsYWNlKC8mIzM5Oy9nLCInIikscCYmaVthXS5wdXNoKHtjb250ZW50OnAsdHlwZTp1fSl9KX0pOmwudHlwZT09PSJzdHJvbmcifHxsLnR5cGU9PT0iZW0iP2wudG9rZW5zLmZvckVhY2goaD0+e3MoaCxsLnR5cGUpfSk6bC50eXBlPT09Imh0bWwiJiZpW2FdLnB1c2goe2NvbnRlbnQ6bC50ZXh0LHR5cGU6Im5vcm1hbCJ9KX1yZXR1cm4gbyhzLCJwcm9jZXNzTm9kZSIpLG4uZm9yRWFjaChsPT57bC50eXBlPT09InBhcmFncmFwaCI/bC50b2tlbnM/LmZvckVhY2godT0+e3ModSl9KTpsLnR5cGU9PT0iaHRtbCImJmlbYV0ucHVzaCh7Y29udGVudDpsLnRleHQsdHlwZToibm9ybWFsIn0pfSksaX1mdW5jdGlvbiBnUSh0LHttYXJrZG93bkF1dG9XcmFwOmV9PXt9KXtsZXQgcj1Kci5sZXhlcih0KTtmdW5jdGlvbiBuKGkpe3JldHVybiBpLnR5cGU9PT0idGV4dCI/ZT09PSExP2kudGV4dC5yZXBsYWNlKC9cbiAqL2csIjxici8+IikucmVwbGFjZSgvIC9nLCImbmJzcDsiKTppLnRleHQucmVwbGFjZSgvXG4gKi9nLCI8YnIvPiIpOmkudHlwZT09PSJzdHJvbmciP2A8c3Ryb25nPiR7aS50b2tlbnM/Lm1hcChuKS5qb2luKCIiKX08L3N0cm9uZz5gOmkudHlwZT09PSJlbSI/YDxlbT4ke2kudG9rZW5zPy5tYXAobikuam9pbigiIil9PC9lbT5gOmkudHlwZT09PSJwYXJhZ3JhcGgiP2A8cD4ke2kudG9rZW5zPy5tYXAobikuam9pbigiIil9PC9wPmA6aS50eXBlPT09InNwYWNlIj8iIjppLnR5cGU9PT0iaHRtbCI/YCR7aS50ZXh0fWA6aS50eXBlPT09ImVzY2FwZSI/aS50ZXh0OmBVbnN1cHBvcnRlZCBtYXJrZG93bjogJHtpLnR5cGV9YH1yZXR1cm4gbyhuLCJvdXRwdXQiKSxyLm1hcChuKS5qb2luKCIiKX12YXIgeVE9TigoKT0+eyJ1c2Ugc3RyaWN0IjtwUSgpO3I3KCk7byhwRGUsInByZXByb2Nlc3NNYXJrZG93biIpO28obVEsIm1hcmtkb3duVG9MaW5lcyIpO28oZ1EsIm1hcmtkb3duVG9IVE1MIil9KTtmdW5jdGlvbiBtRGUodCl7cmV0dXJuIEludGwuU2VnbWVudGVyP1suLi5uZXcgSW50bC5TZWdtZW50ZXIoKS5zZWdtZW50KHQpXS5tYXAoZT0+ZS5zZWdtZW50KTpbLi4udF19ZnVuY3Rpb24gZ0RlKHQsZSl7bGV0IHI9bURlKGUuY29udGVudCk7cmV0dXJuIHZRKHQsW10scixlLnR5cGUpfWZ1bmN0aW9uIHZRKHQsZSxyLG4pe2lmKHIubGVuZ3RoPT09MClyZXR1cm5be2NvbnRlbnQ6ZS5qb2luKCIiKSx0eXBlOm59LHtjb250ZW50OiIiLHR5cGU6bn1dO2xldFtpLC4uLmFdPXIscz1bLi4uZSxpXTtyZXR1cm4gdChbe2NvbnRlbnQ6cy5qb2luKCIiKSx0eXBlOm59XSk/dlEodCxzLGEsbik6KGUubGVuZ3RoPT09MCYmaSYmKGUucHVzaChpKSxyLnNoaWZ0KCkpLFt7Y29udGVudDplLmpvaW4oIiIpLHR5cGU6bn0se2NvbnRlbnQ6ci5qb2luKCIiKSx0eXBlOm59XSl9ZnVuY3Rpb24geFEodCxlKXtpZih0LnNvbWUoKHtjb250ZW50OnJ9KT0+ci5pbmNsdWRlcyhgCmApKSl0aHJvdyBuZXcgRXJyb3IoInNwbGl0TGluZVRvRml0V2lkdGggZG9lcyBub3Qgc3VwcG9ydCBuZXdsaW5lcyBpbiB0aGUgbGluZSIpO3JldHVybiB1TCh0LGUpfWZ1bmN0aW9uIHVMKHQsZSxyPVtdLG49W10pe2lmKHQubGVuZ3RoPT09MClyZXR1cm4gbi5sZW5ndGg+MCYmci5wdXNoKG4pLHIubGVuZ3RoPjA/cjpbXTtsZXQgaT0iIjt0WzBdLmNvbnRlbnQ9PT0iICImJihpPSIgIix0LnNoaWZ0KCkpO2xldCBhPXQuc2hpZnQoKT8/e2NvbnRlbnQ6IiAiLHR5cGU6Im5vcm1hbCJ9LHM9Wy4uLm5dO2lmKGkhPT0iIiYmcy5wdXNoKHtjb250ZW50OmksdHlwZToibm9ybWFsIn0pLHMucHVzaChhKSxlKHMpKXJldHVybiB1TCh0LGUscixzKTtpZihuLmxlbmd0aD4wKXIucHVzaChuKSx0LnVuc2hpZnQoYSk7ZWxzZSBpZihhLmNvbnRlbnQpe2xldFtsLHVdPWdEZShlLGEpO3IucHVzaChbbF0pLHUuY29udGVudCYmdC51bnNoaWZ0KHUpfXJldHVybiB1TCh0LGUscil9dmFyIGJRPU4oKCk9PnsidXNlIHN0cmljdCI7byhtRGUsInNwbGl0VGV4dFRvQ2hhcnMiKTtvKGdEZSwic3BsaXRXb3JkVG9GaXRXaWR0aCIpO28odlEsInNwbGl0V29yZFRvRml0V2lkdGhSZWN1cnNpb24iKTtvKHhRLCJzcGxpdExpbmVUb0ZpdFdpZHRoIik7byh1TCwic3BsaXRMaW5lVG9GaXRXaWR0aFJlY3Vyc2lvbiIpfSk7ZnVuY3Rpb24gVFEodCxlKXtlJiZ0LmF0dHIoInN0eWxlIixlKX1hc3luYyBmdW5jdGlvbiB5RGUodCxlLHIsbixpPSExKXtsZXQgYT10LmFwcGVuZCgiZm9yZWlnbk9iamVjdCIpO2EuYXR0cigid2lkdGgiLGAkezEwKnJ9cHhgKSxhLmF0dHIoImhlaWdodCIsYCR7MTAqcn1weGApO2xldCBzPWEuYXBwZW5kKCJ4aHRtbDpkaXYiKSxsPWUubGFiZWw7ZS5sYWJlbCYmeWkoZS5sYWJlbCkmJihsPWF3YWl0IFRoKGUubGFiZWwucmVwbGFjZShaZS5saW5lQnJlYWtSZWdleCxgCmApLG1lKCkpKTtsZXQgdT1lLmlzTm9kZT8ibm9kZUxhYmVsIjoiZWRnZUxhYmVsIixoPXMuYXBwZW5kKCJzcGFuIik7aC5odG1sKGwpLFRRKGgsZS5sYWJlbFN0eWxlKSxoLmF0dHIoImNsYXNzIixgJHt1fSAke259YCksVFEocyxlLmxhYmVsU3R5bGUpLHMuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikscy5zdHlsZSgid2hpdGUtc3BhY2UiLCJub3dyYXAiKSxzLnN0eWxlKCJsaW5lLWhlaWdodCIsIjEuNSIpLHMuc3R5bGUoIm1heC13aWR0aCIscisicHgiKSxzLnN0eWxlKCJ0ZXh0LWFsaWduIiwiY2VudGVyIikscy5hdHRyKCJ4bWxucyIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiKSxpJiZzLmF0dHIoImNsYXNzIiwibGFiZWxCa2ciKTtsZXQgZj1zLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gZi53aWR0aD09PXImJihzLnN0eWxlKCJkaXNwbGF5IiwidGFibGUiKSxzLnN0eWxlKCJ3aGl0ZS1zcGFjZSIsImJyZWFrLXNwYWNlcyIpLHMuc3R5bGUoIndpZHRoIixyKyJweCIpLGY9cy5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLGEubm9kZSgpfWZ1bmN0aW9uIGhMKHQsZSxyKXtyZXR1cm4gdC5hcHBlbmQoInRzcGFuIikuYXR0cigiY2xhc3MiLCJ0ZXh0LW91dGVyLXRzcGFuIikuYXR0cigieCIsMCkuYXR0cigieSIsZSpyLS4xKyJlbSIpLmF0dHIoImR5IixyKyJlbSIpfWZ1bmN0aW9uIHZEZSh0LGUscil7bGV0IG49dC5hcHBlbmQoInRleHQiKSxpPWhMKG4sMSxlKTtmTChpLHIpO2xldCBhPWkubm9kZSgpLmdldENvbXB1dGVkVGV4dExlbmd0aCgpO3JldHVybiBuLnJlbW92ZSgpLGF9ZnVuY3Rpb24gd1EodCxlLHIpe2xldCBuPXQuYXBwZW5kKCJ0ZXh0IiksaT1oTChuLDEsZSk7ZkwoaSxbe2NvbnRlbnQ6cix0eXBlOiJub3JtYWwifV0pO2xldCBhPWkubm9kZSgpPy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gYSYmbi5yZW1vdmUoKSxhfWZ1bmN0aW9uIHhEZSh0LGUscixuPSExKXtsZXQgYT1lLmFwcGVuZCgiZyIpLHM9YS5pbnNlcnQoInJlY3QiKS5hdHRyKCJjbGFzcyIsImJhY2tncm91bmQiKS5hdHRyKCJzdHlsZSIsInN0cm9rZTogbm9uZSIpLGw9YS5hcHBlbmQoInRleHQiKS5hdHRyKCJ5IiwiLTEwLjEiKSx1PTA7Zm9yKGxldCBoIG9mIHIpe2xldCBmPW8ocD0+dkRlKGEsMS4xLHApPD10LCJjaGVja1dpZHRoIiksZD1mKGgpP1toXTp4UShoLGYpO2ZvcihsZXQgcCBvZiBkKXtsZXQgbT1oTChsLHUsMS4xKTtmTChtLHApLHUrK319aWYobil7bGV0IGg9bC5ub2RlKCkuZ2V0QkJveCgpLGY9MjtyZXR1cm4gcy5hdHRyKCJ4IixoLngtZikuYXR0cigieSIsaC55LWYpLmF0dHIoIndpZHRoIixoLndpZHRoKzIqZikuYXR0cigiaGVpZ2h0IixoLmhlaWdodCsyKmYpLGEubm9kZSgpfWVsc2UgcmV0dXJuIGwubm9kZSgpfWZ1bmN0aW9uIGZMKHQsZSl7dC50ZXh0KCIiKSxlLmZvckVhY2goKHIsbik9PntsZXQgaT10LmFwcGVuZCgidHNwYW4iKS5hdHRyKCJmb250LXN0eWxlIixyLnR5cGU9PT0iZW0iPyJpdGFsaWMiOiJub3JtYWwiKS5hdHRyKCJjbGFzcyIsInRleHQtaW5uZXItdHNwYW4iKS5hdHRyKCJmb250LXdlaWdodCIsci50eXBlPT09InN0cm9uZyI/ImJvbGQiOiJub3JtYWwiKTtuPT09MD9pLnRleHQoci5jb250ZW50KTppLnRleHQoIiAiK3IuY29udGVudCl9KX1hc3luYyBmdW5jdGlvbiBkTCh0KXtsZXQgZT1bXTt0LnJlcGxhY2UoLyhmYVtia2xyc10/KTpmYS0oW1x3LV0rKS9nLChuLGksYSk9PihlLnB1c2goKGFzeW5jKCk9PntsZXQgcz1gJHtpfToke2F9YDtyZXR1cm4gYXdhaXQgRiQocyk/YXdhaXQgRXMocyx2b2lkIDAse2NsYXNzOiJsYWJlbC1pY29uIn0pOmA8aSBjbGFzcz0nJHtmZChuKS5yZXBsYWNlKCI6IiwiICIpfSc+PC9pPmB9KSgpKSxuKSk7bGV0IHI9YXdhaXQgUHJvbWlzZS5hbGwoZSk7cmV0dXJuIHQucmVwbGFjZSgvKGZhW2JrbHJzXT8pOmZhLShbXHctXSspL2csKCk9PnIuc2hpZnQoKT8/IiIpfXZhciBxbixhbz1OKCgpPT57InVzZSBzdHJpY3QiO2ZyKCk7R3QoKTtwcigpO3l0KCk7eVEoKTtlcigpO2psKCk7YlEoKTtvKFRRLCJhcHBseVN0eWxlIik7byh5RGUsImFkZEh0bWxTcGFuIik7byhoTCwiY3JlYXRlVHNwYW4iKTtvKHZEZSwiY29tcHV0ZVdpZHRoT2ZUZXh0Iik7byh3USwiY29tcHV0ZURpbWVuc2lvbk9mVGV4dCIpO28oeERlLCJjcmVhdGVGb3JtYXR0ZWRUZXh0Iik7byhmTCwidXBkYXRlVGV4dENvbnRlbnRBbmRTdHlsZXMiKTtvKGRMLCJyZXBsYWNlSWNvblN1YnN0cmluZyIpO3FuPW8oYXN5bmModCxlPSIiLHtzdHlsZTpyPSIiLGlzVGl0bGU6bj0hMSxjbGFzc2VzOmk9IiIsdXNlSHRtbExhYmVsczphPSEwLGlzTm9kZTpzPSEwLHdpZHRoOmw9MjAwLGFkZFN2Z0JhY2tncm91bmQ6dT0hMX09e30saCk9PntpZihYLmRlYnVnKCJYWVogY3JlYXRlVGV4dCIsZSxyLG4saSxhLHMsImFkZFN2Z0JhY2tncm91bmQ6ICIsdSksYSl7bGV0IGY9Z1EoZSxoKSxkPWF3YWl0IGRMKG5hKGYpKSxwPWUucmVwbGFjZSgvXFxcXC9nLCJcXCIpLG09e2lzTm9kZTpzLGxhYmVsOnlpKGUpP3A6ZCxsYWJlbFN0eWxlOnIucmVwbGFjZSgiZmlsbDoiLCJjb2xvcjoiKX07cmV0dXJuIGF3YWl0IHlEZSh0LG0sbCxpLHUpfWVsc2V7bGV0IGY9ZS5yZXBsYWNlKC88YnJccypcLz8+L2csIjxici8+IiksZD1tUShmLnJlcGxhY2UoIjxicj4iLCI8YnIvPiIpLGgpLHA9eERlKGwsdCxkLGU/dTohMSk7aWYocyl7L3N0cm9rZTovLmV4ZWMocikmJihyPXIucmVwbGFjZSgic3Ryb2tlOiIsImxpbmVDb2xvcjoiKSk7bGV0IG09ci5yZXBsYWNlKC9zdHJva2U6W147XSs7Py9nLCIiKS5yZXBsYWNlKC9zdHJva2Utd2lkdGg6W147XSs7Py9nLCIiKS5yZXBsYWNlKC9maWxsOlteO10rOz8vZywiIikucmVwbGFjZSgvY29sb3I6L2csImZpbGw6Iik7R2UocCkuYXR0cigic3R5bGUiLG0pfWVsc2V7bGV0IG09ci5yZXBsYWNlKC9zdHJva2U6W147XSs7Py9nLCIiKS5yZXBsYWNlKC9zdHJva2Utd2lkdGg6W147XSs7Py9nLCIiKS5yZXBsYWNlKC9maWxsOlteO10rOz8vZywiIikucmVwbGFjZSgvYmFja2dyb3VuZDovZywiZmlsbDoiKTtHZShwKS5zZWxlY3QoInJlY3QiKS5hdHRyKCJzdHlsZSIsbS5yZXBsYWNlKC9iYWNrZ3JvdW5kOi9nLCJmaWxsOiIpKTtsZXQgZz1yLnJlcGxhY2UoL3N0cm9rZTpbXjtdKzs/L2csIiIpLnJlcGxhY2UoL3N0cm9rZS13aWR0aDpbXjtdKzs/L2csIiIpLnJlcGxhY2UoL2ZpbGw6W147XSs7Py9nLCIiKS5yZXBsYWNlKC9jb2xvcjovZywiZmlsbDoiKTtHZShwKS5zZWxlY3QoInRleHQiKS5hdHRyKCJzdHlsZSIsZyl9cmV0dXJuIHB9fSwiY3JlYXRlVGV4dCIpfSk7ZnVuY3Rpb24gWHQodCl7bGV0IGU9dC5tYXAoKHIsbik9PmAke249PT0wPyJNIjoiTCJ9JHtyLnh9LCR7ci55fWApO3JldHVybiBlLnB1c2goIloiKSxlLmpvaW4oIiAiKX1mdW5jdGlvbiBHbyh0LGUscixuLGksYSl7bGV0IHM9W10sdT1yLXQsaD1uLWUsZj11L2EsZD0yKk1hdGguUEkvZixwPWUraC8yO2ZvcihsZXQgbT0wO208PTUwO20rKyl7bGV0IGc9bS81MCx5PXQrZyp1LHY9cCtpKk1hdGguc2luKGQqKHktdCkpO3MucHVzaCh7eDp5LHk6dn0pfXJldHVybiBzfWZ1bmN0aW9uIFdUKHQsZSxyLG4saSxhKXtsZXQgcz1bXSxsPWkqTWF0aC5QSS8xODAsZj0oYSpNYXRoLlBJLzE4MC1sKS8obi0xKTtmb3IobGV0IGQ9MDtkPG47ZCsrKXtsZXQgcD1sK2QqZixtPXQrcipNYXRoLmNvcyhwKSxnPWUrcipNYXRoLnNpbihwKTtzLnB1c2goe3g6LW0seTotZ30pfXJldHVybiBzfXZhciBtdCxIVCxLZSxodCxGdD1OKCgpPT57InVzZSBzdHJpY3QiO2FvKCk7R3QoKTtmcigpO19hKCk7cHIoKTtlcigpO210PW8oYXN5bmModCxlLHIpPT57bGV0IG4saT1lLnVzZUh0bWxMYWJlbHN8fGRyKG1lKCk/Lmh0bWxMYWJlbHMpO3I/bj1yOm49Im5vZGUgZGVmYXVsdCI7bGV0IGE9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsbikuYXR0cigiaWQiLGUuZG9tSWR8fGUuaWQpLHM9YS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuYXR0cigic3R5bGUiLHpuKGUubGFiZWxTdHlsZSkpLGw7ZS5sYWJlbD09PXZvaWQgMD9sPSIiOmw9dHlwZW9mIGUubGFiZWw9PSJzdHJpbmciP2UubGFiZWw6ZS5sYWJlbFswXTtsZXQgdT1hd2FpdCBxbihzLHdyKG5hKGwpLG1lKCkpLHt1c2VIdG1sTGFiZWxzOmksd2lkdGg6ZS53aWR0aHx8bWUoKS5mbG93Y2hhcnQ/LndyYXBwaW5nV2lkdGgsY3NzQ2xhc3NlczoibWFya2Rvd24tbm9kZS1sYWJlbCIsc3R5bGU6ZS5sYWJlbFN0eWxlLGFkZFN2Z0JhY2tncm91bmQ6ISFlLmljb258fCEhZS5pbWd9KSxoPXUuZ2V0QkJveCgpLGY9KGU/LnBhZGRpbmc/PzApLzI7aWYoaSl7bGV0IGQ9dS5jaGlsZHJlblswXSxwPUdlKHUpLG09ZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW1nIik7aWYobSl7bGV0IGc9bC5yZXBsYWNlKC88aW1nW14+XSo+L2csIiIpLnRyaW0oKT09PSIiO2F3YWl0IFByb21pc2UuYWxsKFsuLi5tXS5tYXAoeT0+bmV3IFByb21pc2Uodj0+e2Z1bmN0aW9uIHgoKXtpZih5LnN0eWxlLmRpc3BsYXk9ImZsZXgiLHkuc3R5bGUuZmxleERpcmVjdGlvbj0iY29sdW1uIixnKXtsZXQgYj1tZSgpLmZvbnRTaXplP21lKCkuZm9udFNpemU6d2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuZm9udFNpemUsVD01LFtTPW9yLmZvbnRTaXplXT16byhiKSx3PVMqVCsicHgiO3kuc3R5bGUubWluV2lkdGg9dyx5LnN0eWxlLm1heFdpZHRoPXd9ZWxzZSB5LnN0eWxlLndpZHRoPSIxMDAlIjt2KHkpfW8oeCwic2V0dXBJbWFnZSIpLHNldFRpbWVvdXQoKCk9Pnt5LmNvbXBsZXRlJiZ4KCl9KSx5LmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIix4KSx5LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLHgpfSkpKX1oPWQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscC5hdHRyKCJ3aWR0aCIsaC53aWR0aCkscC5hdHRyKCJoZWlnaHQiLGguaGVpZ2h0KX1yZXR1cm4gaT9zLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1oLndpZHRoLzIrIiwgIistaC5oZWlnaHQvMisiKSIpOnMuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsICIrLWguaGVpZ2h0LzIrIikiKSxlLmNlbnRlckxhYmVsJiZzLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1oLndpZHRoLzIrIiwgIistaC5oZWlnaHQvMisiKSIpLHMuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikse3NoYXBlU3ZnOmEsYmJveDpoLGhhbGZQYWRkaW5nOmYsbGFiZWw6c319LCJsYWJlbEhlbHBlciIpLEhUPW8oYXN5bmModCxlLHIpPT57bGV0IG49ci51c2VIdG1sTGFiZWxzfHxkcihtZSgpPy5mbG93Y2hhcnQ/Lmh0bWxMYWJlbHMpLGk9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuYXR0cigic3R5bGUiLHIubGFiZWxTdHlsZXx8IiIpLGE9YXdhaXQgcW4oaSx3cihuYShlKSxtZSgpKSx7dXNlSHRtbExhYmVsczpuLHdpZHRoOnIud2lkdGh8fG1lKCk/LmZsb3djaGFydD8ud3JhcHBpbmdXaWR0aCxzdHlsZTpyLmxhYmVsU3R5bGUsYWRkU3ZnQmFja2dyb3VuZDohIXIuaWNvbnx8ISFyLmltZ30pLHM9YS5nZXRCQm94KCksbD1yLnBhZGRpbmcvMjtpZihkcihtZSgpPy5mbG93Y2hhcnQ/Lmh0bWxMYWJlbHMpKXtsZXQgdT1hLmNoaWxkcmVuWzBdLGg9R2UoYSk7cz11LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGguYXR0cigid2lkdGgiLHMud2lkdGgpLGguYXR0cigiaGVpZ2h0IixzLmhlaWdodCl9cmV0dXJuIG4/aS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistcy53aWR0aC8yKyIsICIrLXMuaGVpZ2h0LzIrIikiKTppLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCAiKy1zLmhlaWdodC8yKyIpIiksci5jZW50ZXJMYWJlbCYmaS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistcy53aWR0aC8yKyIsICIrLXMuaGVpZ2h0LzIrIikiKSxpLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLHtzaGFwZVN2Zzp0LGJib3g6cyxoYWxmUGFkZGluZzpsLGxhYmVsOml9fSwiaW5zZXJ0TGFiZWwiKSxLZT1vKCh0LGUpPT57bGV0IHI9ZS5ub2RlKCkuZ2V0QkJveCgpO3Qud2lkdGg9ci53aWR0aCx0LmhlaWdodD1yLmhlaWdodH0sInVwZGF0ZU5vZGVCb3VuZHMiKSxodD1vKCh0LGUpPT4odC5sb29rPT09ImhhbmREcmF3biI/InJvdWdoLW5vZGUiOiJub2RlIikrIiAiK3QuY3NzQ2xhc3NlcysiICIrKGV8fCIiKSwiZ2V0Tm9kZUNsYXNzZXMiKTtvKFh0LCJjcmVhdGVQYXRoRnJvbVBvaW50cyIpO28oR28sImdlbmVyYXRlRnVsbFNpbmVXYXZlUG9pbnRzIik7byhXVCwiZ2VuZXJhdGVDaXJjbGVQb2ludHMiKX0pO2Z1bmN0aW9uIGJEZSh0LGUpe3JldHVybiB0LmludGVyc2VjdChlKX12YXIga1EsRVE9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKGJEZSwiaW50ZXJzZWN0Tm9kZSIpO2tRPWJEZX0pO2Z1bmN0aW9uIFREZSh0LGUscixuKXt2YXIgaT10LngsYT10Lnkscz1pLW4ueCxsPWEtbi55LHU9TWF0aC5zcXJ0KGUqZSpsKmwrcipyKnMqcyksaD1NYXRoLmFicyhlKnIqcy91KTtuLng8aSYmKGg9LWgpO3ZhciBmPU1hdGguYWJzKGUqcipsL3UpO3JldHVybiBuLnk8YSYmKGY9LWYpLHt4OmkraCx5OmErZn19dmFyIHFULHBMPU4oKCk9PnsidXNlIHN0cmljdCI7byhURGUsImludGVyc2VjdEVsbGlwc2UiKTtxVD1URGV9KTtmdW5jdGlvbiB3RGUodCxlLHIpe3JldHVybiBxVCh0LGUsZSxyKX12YXIgU1EsQ1E9TigoKT0+eyJ1c2Ugc3RyaWN0IjtwTCgpO28od0RlLCJpbnRlcnNlY3RDaXJjbGUiKTtTUT13RGV9KTtmdW5jdGlvbiBrRGUodCxlLHIsbil7dmFyIGksYSxzLGwsdSxoLGYsZCxwLG0sZyx5LHYseCxiO2lmKGk9ZS55LXQueSxzPXQueC1lLngsdT1lLngqdC55LXQueCplLnkscD1pKnIueCtzKnIueSt1LG09aSpuLngrcypuLnkrdSwhKHAhPT0wJiZtIT09MCYmQVEocCxtKSkmJihhPW4ueS1yLnksbD1yLngtbi54LGg9bi54KnIueS1yLngqbi55LGY9YSp0LngrbCp0LnkraCxkPWEqZS54K2wqZS55K2gsIShmIT09MCYmZCE9PTAmJkFRKGYsZCkpJiYoZz1pKmwtYSpzLGchPT0wKSkpcmV0dXJuIHk9TWF0aC5hYnMoZy8yKSx2PXMqaC1sKnUseD12PDA/KHYteSkvZzoodit5KS9nLHY9YSp1LWkqaCxiPXY8MD8odi15KS9nOih2K3kpL2cse3gseTpifX1mdW5jdGlvbiBBUSh0LGUpe3JldHVybiB0KmU+MH12YXIgX1EsRFE9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKGtEZSwiaW50ZXJzZWN0TGluZSIpO28oQVEsInNhbWVTaWduIik7X1E9a0RlfSk7ZnVuY3Rpb24gRURlKHQsZSxyKXtsZXQgbj10LngsaT10LnksYT1bXSxzPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxsPU51bWJlci5QT1NJVElWRV9JTkZJTklUWTt0eXBlb2YgZS5mb3JFYWNoPT0iZnVuY3Rpb24iP2UuZm9yRWFjaChmdW5jdGlvbihmKXtzPU1hdGgubWluKHMsZi54KSxsPU1hdGgubWluKGwsZi55KX0pOihzPU1hdGgubWluKHMsZS54KSxsPU1hdGgubWluKGwsZS55KSk7bGV0IHU9bi10LndpZHRoLzItcyxoPWktdC5oZWlnaHQvMi1sO2ZvcihsZXQgZj0wO2Y8ZS5sZW5ndGg7ZisrKXtsZXQgZD1lW2ZdLHA9ZVtmPGUubGVuZ3RoLTE/ZisxOjBdLG09X1EodCxyLHt4OnUrZC54LHk6aCtkLnl9LHt4OnUrcC54LHk6aCtwLnl9KTttJiZhLnB1c2gobSl9cmV0dXJuIGEubGVuZ3RoPyhhLmxlbmd0aD4xJiZhLnNvcnQoZnVuY3Rpb24oZixkKXtsZXQgcD1mLngtci54LG09Zi55LXIueSxnPU1hdGguc3FydChwKnArbSptKSx5PWQueC1yLngsdj1kLnktci55LHg9TWF0aC5zcXJ0KHkqeSt2KnYpO3JldHVybiBnPHg/LTE6Zz09PXg/MDoxfSksYVswXSk6dH12YXIgTFEsUlE9TigoKT0+eyJ1c2Ugc3RyaWN0IjtEUSgpO28oRURlLCJpbnRlcnNlY3RQb2x5Z29uIik7TFE9RURlfSk7dmFyIFNEZSxYaCxtTD1OKCgpPT57InVzZSBzdHJpY3QiO1NEZT1vKCh0LGUpPT57dmFyIHI9dC54LG49dC55LGk9ZS54LXIsYT1lLnktbixzPXQud2lkdGgvMixsPXQuaGVpZ2h0LzIsdSxoO3JldHVybiBNYXRoLmFicyhhKSpzPk1hdGguYWJzKGkpKmw/KGE8MCYmKGw9LWwpLHU9YT09PTA/MDpsKmkvYSxoPWwpOihpPDAmJihzPS1zKSx1PXMsaD1pPT09MD8wOnMqYS9pKSx7eDpyK3UseTpuK2h9fSwiaW50ZXJzZWN0UmVjdCIpLFhoPVNEZX0pO3ZhciBYZSxIdD1OKCgpPT57InVzZSBzdHJpY3QiO0VRKCk7Q1EoKTtwTCgpO1JRKCk7bUwoKTtYZT17bm9kZTprUSxjaXJjbGU6U1EsZWxsaXBzZTpxVCxwb2x5Z29uOkxRLHJlY3Q6WGh9fSk7dmFyIE5RLGJjLENEZSxTMixZZSxRZSx6dD1OKCgpPT57InVzZSBzdHJpY3QiO0d0KCk7TlE9byh0PT57bGV0e2hhbmREcmF3blNlZWQ6ZX09bWUoKTtyZXR1cm57ZmlsbDp0LGhhY2h1cmVBbmdsZToxMjAsaGFjaHVyZUdhcDo0LGZpbGxXZWlnaHQ6Mixyb3VnaG5lc3M6Ljcsc3Ryb2tlOnQsc2VlZDplfX0sInNvbGlkU3RhdGVGaWxsIiksYmM9byh0PT57bGV0IGU9Q0RlKFsuLi50LmNzc0NvbXBpbGVkU3R5bGVzfHxbXSwuLi50LmNzc1N0eWxlc3x8W11dKTtyZXR1cm57c3R5bGVzTWFwOmUsc3R5bGVzQXJyYXk6Wy4uLmVdfX0sImNvbXBpbGVTdHlsZXMiKSxDRGU9byh0PT57bGV0IGU9bmV3IE1hcDtyZXR1cm4gdC5mb3JFYWNoKHI9PntsZXRbbixpXT1yLnNwbGl0KCI6Iik7ZS5zZXQobi50cmltKCksaT8udHJpbSgpKX0pLGV9LCJzdHlsZXMyTWFwIiksUzI9byh0PT50PT09ImNvbG9yInx8dD09PSJmb250LXNpemUifHx0PT09ImZvbnQtZmFtaWx5Inx8dD09PSJmb250LXdlaWdodCJ8fHQ9PT0iZm9udC1zdHlsZSJ8fHQ9PT0idGV4dC1kZWNvcmF0aW9uInx8dD09PSJ0ZXh0LWFsaWduInx8dD09PSJ0ZXh0LXRyYW5zZm9ybSJ8fHQ9PT0ibGluZS1oZWlnaHQifHx0PT09ImxldHRlci1zcGFjaW5nInx8dD09PSJ3b3JkLXNwYWNpbmcifHx0PT09InRleHQtc2hhZG93Inx8dD09PSJ0ZXh0LW92ZXJmbG93Inx8dD09PSJ3aGl0ZS1zcGFjZSJ8fHQ9PT0id29yZC13cmFwInx8dD09PSJ3b3JkLWJyZWFrInx8dD09PSJvdmVyZmxvdy13cmFwInx8dD09PSJoeXBoZW5zIiwiaXNMYWJlbFN0eWxlIiksWWU9byh0PT57bGV0e3N0eWxlc0FycmF5OmV9PWJjKHQpLHI9W10sbj1bXSxpPVtdLGE9W107cmV0dXJuIGUuZm9yRWFjaChzPT57bGV0IGw9c1swXTtTMihsKT9yLnB1c2gocy5qb2luKCI6IikrIiAhaW1wb3J0YW50Iik6KG4ucHVzaChzLmpvaW4oIjoiKSsiICFpbXBvcnRhbnQiKSxsLmluY2x1ZGVzKCJzdHJva2UiKSYmaS5wdXNoKHMuam9pbigiOiIpKyIgIWltcG9ydGFudCIpLGw9PT0iZmlsbCImJmEucHVzaChzLmpvaW4oIjoiKSsiICFpbXBvcnRhbnQiKSl9KSx7bGFiZWxTdHlsZXM6ci5qb2luKCI7Iiksbm9kZVN0eWxlczpuLmpvaW4oIjsiKSxzdHlsZXNBcnJheTplLGJvcmRlclN0eWxlczppLGJhY2tncm91bmRTdHlsZXM6YX19LCJzdHlsZXMyU3RyaW5nIiksUWU9bygodCxlKT0+e2xldHt0aGVtZVZhcmlhYmxlczpyLGhhbmREcmF3blNlZWQ6bn09bWUoKSx7bm9kZUJvcmRlcjppLG1haW5Ca2c6YX09cix7c3R5bGVzTWFwOnN9PWJjKHQpO3JldHVybiBPYmplY3QuYXNzaWduKHtyb3VnaG5lc3M6LjcsZmlsbDpzLmdldCgiZmlsbCIpfHxhLGZpbGxTdHlsZToiaGFjaHVyZSIsZmlsbFdlaWdodDo0LGhhY2h1cmVHYXA6NS4yLHN0cm9rZTpzLmdldCgic3Ryb2tlIil8fGksc2VlZDpuLHN0cm9rZVdpZHRoOnMuZ2V0KCJzdHJva2Utd2lkdGgiKT8ucmVwbGFjZSgicHgiLCIiKXx8MS4zLGZpbGxMaW5lRGFzaDpbMCwwXX0sZSl9LCJ1c2VyTm9kZU92ZXJyaWRlcyIpfSk7ZnVuY3Rpb24gZ0wodCxlLHIpe2lmKHQmJnQubGVuZ3RoKXtsZXRbbixpXT1lLGE9TWF0aC5QSS8xODAqcixzPU1hdGguY29zKGEpLGw9TWF0aC5zaW4oYSk7Zm9yKGxldCB1IG9mIHQpe2xldFtoLGZdPXU7dVswXT0oaC1uKSpzLShmLWkpKmwrbix1WzFdPShoLW4pKmwrKGYtaSkqcytpfX19ZnVuY3Rpb24gQURlKHQsZSl7cmV0dXJuIHRbMF09PT1lWzBdJiZ0WzFdPT09ZVsxXX1mdW5jdGlvbiBfRGUodCxlLHIsbj0xKXtsZXQgaT1yLGE9TWF0aC5tYXgoZSwuMSkscz10WzBdJiZ0WzBdWzBdJiZ0eXBlb2YgdFswXVswXT09Im51bWJlciI/W3RdOnQsbD1bMCwwXTtpZihpKWZvcihsZXQgaCBvZiBzKWdMKGgsbCxpKTtsZXQgdT1mdW5jdGlvbihoLGYsZCl7bGV0IHA9W107Zm9yKGxldCBiIG9mIGgpe2xldCBUPVsuLi5iXTtBRGUoVFswXSxUW1QubGVuZ3RoLTFdKXx8VC5wdXNoKFtUWzBdWzBdLFRbMF1bMV1dKSxULmxlbmd0aD4yJiZwLnB1c2goVCl9bGV0IG09W107Zj1NYXRoLm1heChmLC4xKTtsZXQgZz1bXTtmb3IobGV0IGIgb2YgcClmb3IobGV0IFQ9MDtUPGIubGVuZ3RoLTE7VCsrKXtsZXQgUz1iW1RdLHc9YltUKzFdO2lmKFNbMV0hPT13WzFdKXtsZXQgRT1NYXRoLm1pbihTWzFdLHdbMV0pO2cucHVzaCh7eW1pbjpFLHltYXg6TWF0aC5tYXgoU1sxXSx3WzFdKSx4OkU9PT1TWzFdP1NbMF06d1swXSxpc2xvcGU6KHdbMF0tU1swXSkvKHdbMV0tU1sxXSl9KX19aWYoZy5zb3J0KChiLFQpPT5iLnltaW48VC55bWluPy0xOmIueW1pbj5ULnltaW4/MTpiLng8VC54Py0xOmIueD5ULng/MTpiLnltYXg9PT1ULnltYXg/MDooYi55bWF4LVQueW1heCkvTWF0aC5hYnMoYi55bWF4LVQueW1heCkpLCFnLmxlbmd0aClyZXR1cm4gbTtsZXQgeT1bXSx2PWdbMF0ueW1pbix4PTA7Zm9yKDt5Lmxlbmd0aHx8Zy5sZW5ndGg7KXtpZihnLmxlbmd0aCl7bGV0IGI9LTE7Zm9yKGxldCBUPTA7VDxnLmxlbmd0aCYmIShnW1RdLnltaW4+dik7VCsrKWI9VDtnLnNwbGljZSgwLGIrMSkuZm9yRWFjaChUPT57eS5wdXNoKHtzOnYsZWRnZTpUfSl9KX1pZih5PXkuZmlsdGVyKGI9PiEoYi5lZGdlLnltYXg8PXYpKSx5LnNvcnQoKGIsVCk9PmIuZWRnZS54PT09VC5lZGdlLng/MDooYi5lZGdlLngtVC5lZGdlLngpL01hdGguYWJzKGIuZWRnZS54LVQuZWRnZS54KSksKGQhPT0xfHx4JWY9PTApJiZ5Lmxlbmd0aD4xKWZvcihsZXQgYj0wO2I8eS5sZW5ndGg7Yis9Mil7bGV0IFQ9YisxO2lmKFQ+PXkubGVuZ3RoKWJyZWFrO2xldCBTPXlbYl0uZWRnZSx3PXlbVF0uZWRnZTttLnB1c2goW1tNYXRoLnJvdW5kKFMueCksdl0sW01hdGgucm91bmQody54KSx2XV0pfXYrPWQseS5mb3JFYWNoKGI9PntiLmVkZ2UueD1iLmVkZ2UueCtkKmIuZWRnZS5pc2xvcGV9KSx4Kyt9cmV0dXJuIG19KHMsYSxuKTtpZihpKXtmb3IobGV0IGggb2YgcylnTChoLGwsLWkpOyhmdW5jdGlvbihoLGYsZCl7bGV0IHA9W107aC5mb3JFYWNoKG09PnAucHVzaCguLi5tKSksZ0wocCxmLGQpfSkodSxsLC1pKX1yZXR1cm4gdX1mdW5jdGlvbiBEMih0LGUpe3ZhciByO2xldCBuPWUuaGFjaHVyZUFuZ2xlKzkwLGk9ZS5oYWNodXJlR2FwO2k8MCYmKGk9NCplLnN0cm9rZVdpZHRoKSxpPU1hdGgucm91bmQoTWF0aC5tYXgoaSwuMSkpO2xldCBhPTE7cmV0dXJuIGUucm91Z2huZXNzPj0xJiYoKChyPWUucmFuZG9taXplcik9PT1udWxsfHxyPT09dm9pZCAwP3ZvaWQgMDpyLm5leHQoKSl8fE1hdGgucmFuZG9tKCkpPi43JiYoYT1pKSxfRGUodCxpLG4sYXx8MSl9ZnVuY3Rpb24gdHcodCl7bGV0IGU9dFswXSxyPXRbMV07cmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyhlWzBdLXJbMF0sMikrTWF0aC5wb3coZVsxXS1yWzFdLDIpKX1mdW5jdGlvbiB2TCh0LGUpe3JldHVybiB0LnR5cGU9PT1lfWZ1bmN0aW9uIE5MKHQpe2xldCBlPVtdLHI9ZnVuY3Rpb24ocyl7bGV0IGw9bmV3IEFycmF5O2Zvcig7cyE9PSIiOylpZihzLm1hdGNoKC9eKFsgXHRcclxuLF0rKS8pKXM9cy5zdWJzdHIoUmVnRXhwLiQxLmxlbmd0aCk7ZWxzZSBpZihzLm1hdGNoKC9eKFthQWNDaEhsTG1NcVFzU3RUdlZ6Wl0pLykpbFtsLmxlbmd0aF09e3R5cGU6RERlLHRleHQ6UmVnRXhwLiQxfSxzPXMuc3Vic3RyKFJlZ0V4cC4kMS5sZW5ndGgpO2Vsc2V7aWYoIXMubWF0Y2goL14oKFstK10/WzAtOV0rKFwuWzAtOV0qKT98Wy0rXT9cLlswLTldKykoW2VFXVstK10/WzAtOV0rKT8pLykpcmV0dXJuW107bFtsLmxlbmd0aF09e3R5cGU6eUwsdGV4dDpgJHtwYXJzZUZsb2F0KFJlZ0V4cC4kMSl9YH0scz1zLnN1YnN0cihSZWdFeHAuJDEubGVuZ3RoKX1yZXR1cm4gbFtsLmxlbmd0aF09e3R5cGU6TVEsdGV4dDoiIn0sbH0odCksbj0iQk9EIixpPTAsYT1yW2ldO2Zvcig7IXZMKGEsTVEpOyl7bGV0IHM9MCxsPVtdO2lmKG49PT0iQk9EIil7aWYoYS50ZXh0IT09Ik0iJiZhLnRleHQhPT0ibSIpcmV0dXJuIE5MKCJNMCwwIit0KTtpKysscz1ZVFthLnRleHRdLG49YS50ZXh0fWVsc2UgdkwoYSx5TCk/cz1ZVFtuXTooaSsrLHM9WVRbYS50ZXh0XSxuPWEudGV4dCk7aWYoIShpK3M8ci5sZW5ndGgpKXRocm93IG5ldyBFcnJvcigiUGF0aCBkYXRhIGVuZGVkIHNob3J0Iik7Zm9yKGxldCB1PWk7dTxpK3M7dSsrKXtsZXQgaD1yW3VdO2lmKCF2TChoLHlMKSl0aHJvdyBuZXcgRXJyb3IoIlBhcmFtIG5vdCBhIG51bWJlcjogIituKyIsIitoLnRleHQpO2xbbC5sZW5ndGhdPStoLnRleHR9aWYodHlwZW9mIFlUW25dIT0ibnVtYmVyIil0aHJvdyBuZXcgRXJyb3IoIkJhZCBzZWdtZW50OiAiK24pO3tsZXQgdT17a2V5Om4sZGF0YTpsfTtlLnB1c2godSksaSs9cyxhPXJbaV0sbj09PSJNIiYmKG49IkwiKSxuPT09Im0iJiYobj0ibCIpfX1yZXR1cm4gZX1mdW5jdGlvbiBHUSh0KXtsZXQgZT0wLHI9MCxuPTAsaT0wLGE9W107Zm9yKGxldHtrZXk6cyxkYXRhOmx9b2YgdClzd2l0Y2gocyl7Y2FzZSJNIjphLnB1c2goe2tleToiTSIsZGF0YTpbLi4ubF19KSxbZSxyXT1sLFtuLGldPWw7YnJlYWs7Y2FzZSJtIjplKz1sWzBdLHIrPWxbMV0sYS5wdXNoKHtrZXk6Ik0iLGRhdGE6W2Uscl19KSxuPWUsaT1yO2JyZWFrO2Nhc2UiTCI6YS5wdXNoKHtrZXk6IkwiLGRhdGE6Wy4uLmxdfSksW2Uscl09bDticmVhaztjYXNlImwiOmUrPWxbMF0scis9bFsxXSxhLnB1c2goe2tleToiTCIsZGF0YTpbZSxyXX0pO2JyZWFrO2Nhc2UiQyI6YS5wdXNoKHtrZXk6IkMiLGRhdGE6Wy4uLmxdfSksZT1sWzRdLHI9bFs1XTticmVhaztjYXNlImMiOntsZXQgdT1sLm1hcCgoaCxmKT0+ZiUyP2grcjpoK2UpO2EucHVzaCh7a2V5OiJDIixkYXRhOnV9KSxlPXVbNF0scj11WzVdO2JyZWFrfWNhc2UiUSI6YS5wdXNoKHtrZXk6IlEiLGRhdGE6Wy4uLmxdfSksZT1sWzJdLHI9bFszXTticmVhaztjYXNlInEiOntsZXQgdT1sLm1hcCgoaCxmKT0+ZiUyP2grcjpoK2UpO2EucHVzaCh7a2V5OiJRIixkYXRhOnV9KSxlPXVbMl0scj11WzNdO2JyZWFrfWNhc2UiQSI6YS5wdXNoKHtrZXk6IkEiLGRhdGE6Wy4uLmxdfSksZT1sWzVdLHI9bFs2XTticmVhaztjYXNlImEiOmUrPWxbNV0scis9bFs2XSxhLnB1c2goe2tleToiQSIsZGF0YTpbbFswXSxsWzFdLGxbMl0sbFszXSxsWzRdLGUscl19KTticmVhaztjYXNlIkgiOmEucHVzaCh7a2V5OiJIIixkYXRhOlsuLi5sXX0pLGU9bFswXTticmVhaztjYXNlImgiOmUrPWxbMF0sYS5wdXNoKHtrZXk6IkgiLGRhdGE6W2VdfSk7YnJlYWs7Y2FzZSJWIjphLnB1c2goe2tleToiViIsZGF0YTpbLi4ubF19KSxyPWxbMF07YnJlYWs7Y2FzZSJ2IjpyKz1sWzBdLGEucHVzaCh7a2V5OiJWIixkYXRhOltyXX0pO2JyZWFrO2Nhc2UiUyI6YS5wdXNoKHtrZXk6IlMiLGRhdGE6Wy4uLmxdfSksZT1sWzJdLHI9bFszXTticmVhaztjYXNlInMiOntsZXQgdT1sLm1hcCgoaCxmKT0+ZiUyP2grcjpoK2UpO2EucHVzaCh7a2V5OiJTIixkYXRhOnV9KSxlPXVbMl0scj11WzNdO2JyZWFrfWNhc2UiVCI6YS5wdXNoKHtrZXk6IlQiLGRhdGE6Wy4uLmxdfSksZT1sWzBdLHI9bFsxXTticmVhaztjYXNlInQiOmUrPWxbMF0scis9bFsxXSxhLnB1c2goe2tleToiVCIsZGF0YTpbZSxyXX0pO2JyZWFrO2Nhc2UiWiI6Y2FzZSJ6IjphLnB1c2goe2tleToiWiIsZGF0YTpbXX0pLGU9bixyPWl9cmV0dXJuIGF9ZnVuY3Rpb24gVlEodCl7bGV0IGU9W10scj0iIixuPTAsaT0wLGE9MCxzPTAsbD0wLHU9MDtmb3IobGV0e2tleTpoLGRhdGE6Zn1vZiB0KXtzd2l0Y2goaCl7Y2FzZSJNIjplLnB1c2goe2tleToiTSIsZGF0YTpbLi4uZl19KSxbbixpXT1mLFthLHNdPWY7YnJlYWs7Y2FzZSJDIjplLnB1c2goe2tleToiQyIsZGF0YTpbLi4uZl19KSxuPWZbNF0saT1mWzVdLGw9ZlsyXSx1PWZbM107YnJlYWs7Y2FzZSJMIjplLnB1c2goe2tleToiTCIsZGF0YTpbLi4uZl19KSxbbixpXT1mO2JyZWFrO2Nhc2UiSCI6bj1mWzBdLGUucHVzaCh7a2V5OiJMIixkYXRhOltuLGldfSk7YnJlYWs7Y2FzZSJWIjppPWZbMF0sZS5wdXNoKHtrZXk6IkwiLGRhdGE6W24saV19KTticmVhaztjYXNlIlMiOntsZXQgZD0wLHA9MDtyPT09IkMifHxyPT09IlMiPyhkPW4rKG4tbCkscD1pKyhpLXUpKTooZD1uLHA9aSksZS5wdXNoKHtrZXk6IkMiLGRhdGE6W2QscCwuLi5mXX0pLGw9ZlswXSx1PWZbMV0sbj1mWzJdLGk9ZlszXTticmVha31jYXNlIlQiOntsZXRbZCxwXT1mLG09MCxnPTA7cj09PSJRInx8cj09PSJUIj8obT1uKyhuLWwpLGc9aSsoaS11KSk6KG09bixnPWkpO2xldCB5PW4rMioobS1uKS8zLHY9aSsyKihnLWkpLzMseD1kKzIqKG0tZCkvMyxiPXArMiooZy1wKS8zO2UucHVzaCh7a2V5OiJDIixkYXRhOlt5LHYseCxiLGQscF19KSxsPW0sdT1nLG49ZCxpPXA7YnJlYWt9Y2FzZSJRIjp7bGV0W2QscCxtLGddPWYseT1uKzIqKGQtbikvMyx2PWkrMioocC1pKS8zLHg9bSsyKihkLW0pLzMsYj1nKzIqKHAtZykvMztlLnB1c2goe2tleToiQyIsZGF0YTpbeSx2LHgsYixtLGddfSksbD1kLHU9cCxuPW0saT1nO2JyZWFrfWNhc2UiQSI6e2xldCBkPU1hdGguYWJzKGZbMF0pLHA9TWF0aC5hYnMoZlsxXSksbT1mWzJdLGc9ZlszXSx5PWZbNF0sdj1mWzVdLHg9Zls2XTtkPT09MHx8cD09PTA/KGUucHVzaCh7a2V5OiJDIixkYXRhOltuLGksdix4LHYseF19KSxuPXYsaT14KToobiE9PXZ8fGkhPT14KSYmKFVRKG4saSx2LHgsZCxwLG0sZyx5KS5mb3JFYWNoKGZ1bmN0aW9uKGIpe2UucHVzaCh7a2V5OiJDIixkYXRhOmJ9KX0pLG49dixpPXgpO2JyZWFrfWNhc2UiWiI6ZS5wdXNoKHtrZXk6IloiLGRhdGE6W119KSxuPWEsaT1zfXI9aH1yZXR1cm4gZX1mdW5jdGlvbiBDMih0LGUscil7cmV0dXJuW3QqTWF0aC5jb3MociktZSpNYXRoLnNpbihyKSx0Kk1hdGguc2luKHIpK2UqTWF0aC5jb3MocildfWZ1bmN0aW9uIFVRKHQsZSxyLG4saSxhLHMsbCx1LGgpe2xldCBmPShkPXMsTWF0aC5QSSpkLzE4MCk7dmFyIGQ7bGV0IHA9W10sbT0wLGc9MCx5PTAsdj0wO2lmKGgpW20sZyx5LHZdPWg7ZWxzZXtbdCxlXT1DMih0LGUsLWYpLFtyLG5dPUMyKHIsbiwtZik7bGV0IEw9KHQtcikvMixBPShlLW4pLzIsST1MKkwvKGkqaSkrQSpBLyhhKmEpO0k+MSYmKEk9TWF0aC5zcXJ0KEkpLGkqPUksYSo9SSk7bGV0IE09aSppLFA9YSphLEI9TSpQLU0qQSpBLVAqTCpMLEY9TSpBKkErUCpMKkwsej0obD09PXU/LTE6MSkqTWF0aC5zcXJ0KE1hdGguYWJzKEIvRikpO3k9eippKkEvYSsodCtyKS8yLHY9eiotYSpML2krKGUrbikvMixtPU1hdGguYXNpbihwYXJzZUZsb2F0KCgoZS12KS9hKS50b0ZpeGVkKDkpKSksZz1NYXRoLmFzaW4ocGFyc2VGbG9hdCgoKG4tdikvYSkudG9GaXhlZCg5KSkpLHQ8eSYmKG09TWF0aC5QSS1tKSxyPHkmJihnPU1hdGguUEktZyksbTwwJiYobT0yKk1hdGguUEkrbSksZzwwJiYoZz0yKk1hdGguUEkrZyksdSYmbT5nJiYobS09MipNYXRoLlBJKSwhdSYmZz5tJiYoZy09MipNYXRoLlBJKX1sZXQgeD1nLW07aWYoTWF0aC5hYnMoeCk+MTIwKk1hdGguUEkvMTgwKXtsZXQgTD1nLEE9cixJPW47Zz11JiZnPm0/bSsxMjAqTWF0aC5QSS8xODAqMTptKzEyMCpNYXRoLlBJLzE4MCotMSxwPVVRKHI9eStpKk1hdGguY29zKGcpLG49dithKk1hdGguc2luKGcpLEEsSSxpLGEscywwLHUsW2csTCx5LHZdKX14PWctbTtsZXQgYj1NYXRoLmNvcyhtKSxUPU1hdGguc2luKG0pLFM9TWF0aC5jb3MoZyksdz1NYXRoLnNpbihnKSxFPU1hdGgudGFuKHgvNCksXz00LzMqaSpFLEM9NC8zKmEqRSxEPVt0LGVdLE89W3QrXypULGUtQypiXSxSPVtyK18qdyxuLUMqU10saz1bcixuXTtpZihPWzBdPTIqRFswXS1PWzBdLE9bMV09MipEWzFdLU9bMV0saClyZXR1cm5bTyxSLGtdLmNvbmNhdChwKTt7cD1bTyxSLGtdLmNvbmNhdChwKTtsZXQgTD1bXTtmb3IobGV0IEE9MDtBPHAubGVuZ3RoO0ErPTMpe2xldCBJPUMyKHBbQV1bMF0scFtBXVsxXSxmKSxNPUMyKHBbQSsxXVswXSxwW0ErMV1bMV0sZiksUD1DMihwW0ErMl1bMF0scFtBKzJdWzFdLGYpO0wucHVzaChbSVswXSxJWzFdLE1bMF0sTVsxXSxQWzBdLFBbMV1dKX1yZXR1cm4gTH19ZnVuY3Rpb24gSFEodCxlLHIsbixpKXtyZXR1cm57dHlwZToicGF0aCIsb3BzOmpoKHQsZSxyLG4saSl9fWZ1bmN0aW9uIEtUKHQsZSxyKXtsZXQgbj0odHx8W10pLmxlbmd0aDtpZihuPjIpe2xldCBpPVtdO2ZvcihsZXQgYT0wO2E8bi0xO2ErKylpLnB1c2goLi4uamgodFthXVswXSx0W2FdWzFdLHRbYSsxXVswXSx0W2ErMV1bMV0scikpO3JldHVybiBlJiZpLnB1c2goLi4uamgodFtuLTFdWzBdLHRbbi0xXVsxXSx0WzBdWzBdLHRbMF1bMV0scikpLHt0eXBlOiJwYXRoIixvcHM6aX19cmV0dXJuIG49PT0yP0hRKHRbMF1bMF0sdFswXVsxXSx0WzFdWzBdLHRbMV1bMV0scik6e3R5cGU6InBhdGgiLG9wczpbXX19ZnVuY3Rpb24gUkRlKHQsZSxyLG4saSl7cmV0dXJuIGZ1bmN0aW9uKGEscyl7cmV0dXJuIEtUKGEsITAscyl9KFtbdCxlXSxbdCtyLGVdLFt0K3IsZStuXSxbdCxlK25dXSxpKX1mdW5jdGlvbiBJUSh0LGUpe2lmKHQubGVuZ3RoKXtsZXQgcj10eXBlb2YgdFswXVswXT09Im51bWJlciI/W3RdOnQsbj1YVChyWzBdLDEqKDErLjIqZS5yb3VnaG5lc3MpLGUpLGk9ZS5kaXNhYmxlTXVsdGlTdHJva2U/W106WFQoclswXSwxLjUqKDErLjIyKmUucm91Z2huZXNzKSxCUShlKSk7Zm9yKGxldCBhPTE7YTxyLmxlbmd0aDthKyspe2xldCBzPXJbYV07aWYocy5sZW5ndGgpe2xldCBsPVhUKHMsMSooMSsuMiplLnJvdWdobmVzcyksZSksdT1lLmRpc2FibGVNdWx0aVN0cm9rZT9bXTpYVChzLDEuNSooMSsuMjIqZS5yb3VnaG5lc3MpLEJRKGUpKTtmb3IobGV0IGggb2YgbCloLm9wIT09Im1vdmUiJiZuLnB1c2goaCk7Zm9yKGxldCBoIG9mIHUpaC5vcCE9PSJtb3ZlIiYmaS5wdXNoKGgpfX1yZXR1cm57dHlwZToicGF0aCIsb3BzOm4uY29uY2F0KGkpfX1yZXR1cm57dHlwZToicGF0aCIsb3BzOltdfX1mdW5jdGlvbiBXUSh0LGUscil7bGV0IG49TWF0aC5zcXJ0KDIqTWF0aC5QSSpNYXRoLnNxcnQoKE1hdGgucG93KHQvMiwyKStNYXRoLnBvdyhlLzIsMikpLzIpKSxpPU1hdGguY2VpbChNYXRoLm1heChyLmN1cnZlU3RlcENvdW50LHIuY3VydmVTdGVwQ291bnQvTWF0aC5zcXJ0KDIwMCkqbikpLGE9MipNYXRoLlBJL2kscz1NYXRoLmFicyh0LzIpLGw9TWF0aC5hYnMoZS8yKSx1PTEtci5jdXJ2ZUZpdHRpbmc7cmV0dXJuIHMrPWFyKHMqdSxyKSxsKz1hcihsKnUscikse2luY3JlbWVudDphLHJ4OnMscnk6bH19ZnVuY3Rpb24gQUwodCxlLHIsbil7bGV0W2ksYV09RlEobi5pbmNyZW1lbnQsdCxlLG4ucngsbi5yeSwxLG4uaW5jcmVtZW50KlpUKC4xLFpUKC40LDEscikscikscikscz1KVChpLG51bGwscik7aWYoIXIuZGlzYWJsZU11bHRpU3Ryb2tlJiZyLnJvdWdobmVzcyE9PTApe2xldFtsXT1GUShuLmluY3JlbWVudCx0LGUsbi5yeCxuLnJ5LDEuNSwwLHIpLHU9SlQobCxudWxsLHIpO3M9cy5jb25jYXQodSl9cmV0dXJue2VzdGltYXRlZFBvaW50czphLG9wc2V0Ont0eXBlOiJwYXRoIixvcHM6c319fWZ1bmN0aW9uIE9RKHQsZSxyLG4saSxhLHMsbCx1KXtsZXQgaD10LGY9ZSxkPU1hdGguYWJzKHIvMikscD1NYXRoLmFicyhuLzIpO2QrPWFyKC4wMSpkLHUpLHArPWFyKC4wMSpwLHUpO2xldCBtPWksZz1hO2Zvcig7bTwwOyltKz0yKk1hdGguUEksZys9MipNYXRoLlBJO2ctbT4yKk1hdGguUEkmJihtPTAsZz0yKk1hdGguUEkpO2xldCB5PTIqTWF0aC5QSS91LmN1cnZlU3RlcENvdW50LHY9TWF0aC5taW4oeS8yLChnLW0pLzIpLHg9JFEodixoLGYsZCxwLG0sZywxLHUpO2lmKCF1LmRpc2FibGVNdWx0aVN0cm9rZSl7bGV0IGI9JFEodixoLGYsZCxwLG0sZywxLjUsdSk7eC5wdXNoKC4uLmIpfXJldHVybiBzJiYobD94LnB1c2goLi4uamgoaCxmLGgrZCpNYXRoLmNvcyhtKSxmK3AqTWF0aC5zaW4obSksdSksLi4uamgoaCxmLGgrZCpNYXRoLmNvcyhnKSxmK3AqTWF0aC5zaW4oZyksdSkpOngucHVzaCh7b3A6ImxpbmVUbyIsZGF0YTpbaCxmXX0se29wOiJsaW5lVG8iLGRhdGE6W2grZCpNYXRoLmNvcyhtKSxmK3AqTWF0aC5zaW4obSldfSkpLHt0eXBlOiJwYXRoIixvcHM6eH19ZnVuY3Rpb24gUFEodCxlKXtsZXQgcj1WUShHUShOTCh0KSkpLG49W10saT1bMCwwXSxhPVswLDBdO2ZvcihsZXR7a2V5OnMsZGF0YTpsfW9mIHIpc3dpdGNoKHMpe2Nhc2UiTSI6YT1bbFswXSxsWzFdXSxpPVtsWzBdLGxbMV1dO2JyZWFrO2Nhc2UiTCI6bi5wdXNoKC4uLmpoKGFbMF0sYVsxXSxsWzBdLGxbMV0sZSkpLGE9W2xbMF0sbFsxXV07YnJlYWs7Y2FzZSJDIjp7bGV0W3UsaCxmLGQscCxtXT1sO24ucHVzaCguLi5ORGUodSxoLGYsZCxwLG0sYSxlKSksYT1bcCxtXTticmVha31jYXNlIloiOm4ucHVzaCguLi5qaChhWzBdLGFbMV0saVswXSxpWzFdLGUpKSxhPVtpWzBdLGlbMV1dfXJldHVybnt0eXBlOiJwYXRoIixvcHM6bn19ZnVuY3Rpb24geEwodCxlKXtsZXQgcj1bXTtmb3IobGV0IG4gb2YgdClpZihuLmxlbmd0aCl7bGV0IGk9ZS5tYXhSYW5kb21uZXNzT2Zmc2V0fHwwLGE9bi5sZW5ndGg7aWYoYT4yKXtyLnB1c2goe29wOiJtb3ZlIixkYXRhOltuWzBdWzBdK2FyKGksZSksblswXVsxXSthcihpLGUpXX0pO2ZvcihsZXQgcz0xO3M8YTtzKyspci5wdXNoKHtvcDoibGluZVRvIixkYXRhOltuW3NdWzBdK2FyKGksZSksbltzXVsxXSthcihpLGUpXX0pfX1yZXR1cm57dHlwZToiZmlsbFBhdGgiLG9wczpyfX1mdW5jdGlvbiB3bSh0LGUpe3JldHVybiBmdW5jdGlvbihyLG4pe2xldCBpPXIuZmlsbFN0eWxlfHwiaGFjaHVyZSI7aWYoIVBzW2ldKXN3aXRjaChpKXtjYXNlInppZ3phZyI6UHNbaV18fChQc1tpXT1uZXcgVEwobikpO2JyZWFrO2Nhc2UiY3Jvc3MtaGF0Y2giOlBzW2ldfHwoUHNbaV09bmV3IHdMKG4pKTticmVhaztjYXNlImRvdHMiOlBzW2ldfHwoUHNbaV09bmV3IGtMKG4pKTticmVhaztjYXNlImRhc2hlZCI6UHNbaV18fChQc1tpXT1uZXcgRUwobikpO2JyZWFrO2Nhc2UiemlnemFnLWxpbmUiOlBzW2ldfHwoUHNbaV09bmV3IFNMKG4pKTticmVhaztkZWZhdWx0Omk9ImhhY2h1cmUiLFBzW2ldfHwoUHNbaV09bmV3IF8yKG4pKX1yZXR1cm4gUHNbaV19KGUsTERlKS5maWxsUG9seWdvbnModCxlKX1mdW5jdGlvbiBCUSh0KXtsZXQgZT1PYmplY3QuYXNzaWduKHt9LHQpO3JldHVybiBlLnJhbmRvbWl6ZXI9dm9pZCAwLHQuc2VlZCYmKGUuc2VlZD10LnNlZWQrMSksZX1mdW5jdGlvbiBxUSh0KXtyZXR1cm4gdC5yYW5kb21pemVyfHwodC5yYW5kb21pemVyPW5ldyBDTCh0LnNlZWR8fDApKSx0LnJhbmRvbWl6ZXIubmV4dCgpfWZ1bmN0aW9uIFpUKHQsZSxyLG49MSl7cmV0dXJuIHIucm91Z2huZXNzKm4qKHFRKHIpKihlLXQpK3QpfWZ1bmN0aW9uIGFyKHQsZSxyPTEpe3JldHVybiBaVCgtdCx0LGUscil9ZnVuY3Rpb24gamgodCxlLHIsbixpLGE9ITEpe2xldCBzPWE/aS5kaXNhYmxlTXVsdGlTdHJva2VGaWxsOmkuZGlzYWJsZU11bHRpU3Ryb2tlLGw9X0wodCxlLHIsbixpLCEwLCExKTtpZihzKXJldHVybiBsO2xldCB1PV9MKHQsZSxyLG4saSwhMCwhMCk7cmV0dXJuIGwuY29uY2F0KHUpfWZ1bmN0aW9uIF9MKHQsZSxyLG4saSxhLHMpe2xldCBsPU1hdGgucG93KHQtciwyKStNYXRoLnBvdyhlLW4sMiksdT1NYXRoLnNxcnQobCksaD0xO2g9dTwyMDA/MTp1PjUwMD8uNDotLjAwMTY2NjgqdSsxLjIzMzMzNDtsZXQgZj1pLm1heFJhbmRvbW5lc3NPZmZzZXR8fDA7ZipmKjEwMD5sJiYoZj11LzEwKTtsZXQgZD1mLzIscD0uMisuMipxUShpKSxtPWkuYm93aW5nKmkubWF4UmFuZG9tbmVzc09mZnNldCoobi1lKS8yMDAsZz1pLmJvd2luZyppLm1heFJhbmRvbW5lc3NPZmZzZXQqKHQtcikvMjAwO209YXIobSxpLGgpLGc9YXIoZyxpLGgpO2xldCB5PVtdLHY9bygoKT0+YXIoZCxpLGgpLCJNIikseD1vKCgpPT5hcihmLGksaCksImsiKSxiPWkucHJlc2VydmVWZXJ0aWNlcztyZXR1cm4gYSYmKHM/eS5wdXNoKHtvcDoibW92ZSIsZGF0YTpbdCsoYj8wOnYoKSksZSsoYj8wOnYoKSldfSk6eS5wdXNoKHtvcDoibW92ZSIsZGF0YTpbdCsoYj8wOmFyKGYsaSxoKSksZSsoYj8wOmFyKGYsaSxoKSldfSkpLHM/eS5wdXNoKHtvcDoiYmN1cnZlVG8iLGRhdGE6W20rdCsoci10KSpwK3YoKSxnK2UrKG4tZSkqcCt2KCksbSt0KzIqKHItdCkqcCt2KCksZytlKzIqKG4tZSkqcCt2KCkscisoYj8wOnYoKSksbisoYj8wOnYoKSldfSk6eS5wdXNoKHtvcDoiYmN1cnZlVG8iLGRhdGE6W20rdCsoci10KSpwK3goKSxnK2UrKG4tZSkqcCt4KCksbSt0KzIqKHItdCkqcCt4KCksZytlKzIqKG4tZSkqcCt4KCkscisoYj8wOngoKSksbisoYj8wOngoKSldfSkseX1mdW5jdGlvbiBYVCh0LGUscil7aWYoIXQubGVuZ3RoKXJldHVybltdO2xldCBuPVtdO24ucHVzaChbdFswXVswXSthcihlLHIpLHRbMF1bMV0rYXIoZSxyKV0pLG4ucHVzaChbdFswXVswXSthcihlLHIpLHRbMF1bMV0rYXIoZSxyKV0pO2ZvcihsZXQgaT0xO2k8dC5sZW5ndGg7aSsrKW4ucHVzaChbdFtpXVswXSthcihlLHIpLHRbaV1bMV0rYXIoZSxyKV0pLGk9PT10Lmxlbmd0aC0xJiZuLnB1c2goW3RbaV1bMF0rYXIoZSxyKSx0W2ldWzFdK2FyKGUscildKTtyZXR1cm4gSlQobixudWxsLHIpfWZ1bmN0aW9uIEpUKHQsZSxyKXtsZXQgbj10Lmxlbmd0aCxpPVtdO2lmKG4+Myl7bGV0IGE9W10scz0xLXIuY3VydmVUaWdodG5lc3M7aS5wdXNoKHtvcDoibW92ZSIsZGF0YTpbdFsxXVswXSx0WzFdWzFdXX0pO2ZvcihsZXQgbD0xO2wrMjxuO2wrKyl7bGV0IHU9dFtsXTthWzBdPVt1WzBdLHVbMV1dLGFbMV09W3VbMF0rKHMqdFtsKzFdWzBdLXMqdFtsLTFdWzBdKS82LHVbMV0rKHMqdFtsKzFdWzFdLXMqdFtsLTFdWzFdKS82XSxhWzJdPVt0W2wrMV1bMF0rKHMqdFtsXVswXS1zKnRbbCsyXVswXSkvNix0W2wrMV1bMV0rKHMqdFtsXVsxXS1zKnRbbCsyXVsxXSkvNl0sYVszXT1bdFtsKzFdWzBdLHRbbCsxXVsxXV0saS5wdXNoKHtvcDoiYmN1cnZlVG8iLGRhdGE6W2FbMV1bMF0sYVsxXVsxXSxhWzJdWzBdLGFbMl1bMV0sYVszXVswXSxhWzNdWzFdXX0pfWlmKGUmJmUubGVuZ3RoPT09Mil7bGV0IGw9ci5tYXhSYW5kb21uZXNzT2Zmc2V0O2kucHVzaCh7b3A6ImxpbmVUbyIsZGF0YTpbZVswXSthcihsLHIpLGVbMV0rYXIobCxyKV19KX19ZWxzZSBuPT09Mz8oaS5wdXNoKHtvcDoibW92ZSIsZGF0YTpbdFsxXVswXSx0WzFdWzFdXX0pLGkucHVzaCh7b3A6ImJjdXJ2ZVRvIixkYXRhOlt0WzFdWzBdLHRbMV1bMV0sdFsyXVswXSx0WzJdWzFdLHRbMl1bMF0sdFsyXVsxXV19KSk6bj09PTImJmkucHVzaCguLi5fTCh0WzBdWzBdLHRbMF1bMV0sdFsxXVswXSx0WzFdWzFdLHIsITAsITApKTtyZXR1cm4gaX1mdW5jdGlvbiBGUSh0LGUscixuLGksYSxzLGwpe2xldCB1PVtdLGg9W107aWYobC5yb3VnaG5lc3M9PT0wKXt0Lz00LGgucHVzaChbZStuKk1hdGguY29zKC10KSxyK2kqTWF0aC5zaW4oLXQpXSk7Zm9yKGxldCBmPTA7Zjw9MipNYXRoLlBJO2YrPXQpe2xldCBkPVtlK24qTWF0aC5jb3MoZikscitpKk1hdGguc2luKGYpXTt1LnB1c2goZCksaC5wdXNoKGQpfWgucHVzaChbZStuKk1hdGguY29zKDApLHIraSpNYXRoLnNpbigwKV0pLGgucHVzaChbZStuKk1hdGguY29zKHQpLHIraSpNYXRoLnNpbih0KV0pfWVsc2V7bGV0IGY9YXIoLjUsbCktTWF0aC5QSS8yO2gucHVzaChbYXIoYSxsKStlKy45Km4qTWF0aC5jb3MoZi10KSxhcihhLGwpK3IrLjkqaSpNYXRoLnNpbihmLXQpXSk7bGV0IGQ9MipNYXRoLlBJK2YtLjAxO2ZvcihsZXQgcD1mO3A8ZDtwKz10KXtsZXQgbT1bYXIoYSxsKStlK24qTWF0aC5jb3MocCksYXIoYSxsKStyK2kqTWF0aC5zaW4ocCldO3UucHVzaChtKSxoLnB1c2gobSl9aC5wdXNoKFthcihhLGwpK2UrbipNYXRoLmNvcyhmKzIqTWF0aC5QSSsuNSpzKSxhcihhLGwpK3IraSpNYXRoLnNpbihmKzIqTWF0aC5QSSsuNSpzKV0pLGgucHVzaChbYXIoYSxsKStlKy45OCpuKk1hdGguY29zKGYrcyksYXIoYSxsKStyKy45OCppKk1hdGguc2luKGYrcyldKSxoLnB1c2goW2FyKGEsbCkrZSsuOSpuKk1hdGguY29zKGYrLjUqcyksYXIoYSxsKStyKy45KmkqTWF0aC5zaW4oZisuNSpzKV0pfXJldHVybltoLHVdfWZ1bmN0aW9uICRRKHQsZSxyLG4saSxhLHMsbCx1KXtsZXQgaD1hK2FyKC4xLHUpLGY9W107Zi5wdXNoKFthcihsLHUpK2UrLjkqbipNYXRoLmNvcyhoLXQpLGFyKGwsdSkrcisuOSppKk1hdGguc2luKGgtdCldKTtmb3IobGV0IGQ9aDtkPD1zO2QrPXQpZi5wdXNoKFthcihsLHUpK2UrbipNYXRoLmNvcyhkKSxhcihsLHUpK3IraSpNYXRoLnNpbihkKV0pO3JldHVybiBmLnB1c2goW2UrbipNYXRoLmNvcyhzKSxyK2kqTWF0aC5zaW4ocyldKSxmLnB1c2goW2UrbipNYXRoLmNvcyhzKSxyK2kqTWF0aC5zaW4ocyldKSxKVChmLG51bGwsdSl9ZnVuY3Rpb24gTkRlKHQsZSxyLG4saSxhLHMsbCl7bGV0IHU9W10saD1bbC5tYXhSYW5kb21uZXNzT2Zmc2V0fHwxLChsLm1heFJhbmRvbW5lc3NPZmZzZXR8fDEpKy4zXSxmPVswLDBdLGQ9bC5kaXNhYmxlTXVsdGlTdHJva2U/MToyLHA9bC5wcmVzZXJ2ZVZlcnRpY2VzO2ZvcihsZXQgbT0wO208ZDttKyspbT09PTA/dS5wdXNoKHtvcDoibW92ZSIsZGF0YTpbc1swXSxzWzFdXX0pOnUucHVzaCh7b3A6Im1vdmUiLGRhdGE6W3NbMF0rKHA/MDphcihoWzBdLGwpKSxzWzFdKyhwPzA6YXIoaFswXSxsKSldfSksZj1wP1tpLGFdOltpK2FyKGhbbV0sbCksYSthcihoW21dLGwpXSx1LnB1c2goe29wOiJiY3VydmVUbyIsZGF0YTpbdCthcihoW21dLGwpLGUrYXIoaFttXSxsKSxyK2FyKGhbbV0sbCksbithcihoW21dLGwpLGZbMF0sZlsxXV19KTtyZXR1cm4gdX1mdW5jdGlvbiBBMih0KXtyZXR1cm5bLi4udF19ZnVuY3Rpb24gelEodCxlPTApe2xldCByPXQubGVuZ3RoO2lmKHI8Myl0aHJvdyBuZXcgRXJyb3IoIkEgY3VydmUgbXVzdCBoYXZlIGF0IGxlYXN0IHRocmVlIHBvaW50cy4iKTtsZXQgbj1bXTtpZihyPT09MyluLnB1c2goQTIodFswXSksQTIodFsxXSksQTIodFsyXSksQTIodFsyXSkpO2Vsc2V7bGV0IGk9W107aS5wdXNoKHRbMF0sdFswXSk7Zm9yKGxldCBsPTE7bDx0Lmxlbmd0aDtsKyspaS5wdXNoKHRbbF0pLGw9PT10Lmxlbmd0aC0xJiZpLnB1c2godFtsXSk7bGV0IGE9W10scz0xLWU7bi5wdXNoKEEyKGlbMF0pKTtmb3IobGV0IGw9MTtsKzI8aS5sZW5ndGg7bCsrKXtsZXQgdT1pW2xdO2FbMF09W3VbMF0sdVsxXV0sYVsxXT1bdVswXSsocyppW2wrMV1bMF0tcyppW2wtMV1bMF0pLzYsdVsxXSsocyppW2wrMV1bMV0tcyppW2wtMV1bMV0pLzZdLGFbMl09W2lbbCsxXVswXSsocyppW2xdWzBdLXMqaVtsKzJdWzBdKS82LGlbbCsxXVsxXSsocyppW2xdWzFdLXMqaVtsKzJdWzFdKS82XSxhWzNdPVtpW2wrMV1bMF0saVtsKzFdWzFdXSxuLnB1c2goYVsxXSxhWzJdLGFbM10pfX1yZXR1cm4gbn1mdW5jdGlvbiBRVCh0LGUpe3JldHVybiBNYXRoLnBvdyh0WzBdLWVbMF0sMikrTWF0aC5wb3codFsxXS1lWzFdLDIpfWZ1bmN0aW9uIE1EZSh0LGUscil7bGV0IG49UVQoZSxyKTtpZihuPT09MClyZXR1cm4gUVQodCxlKTtsZXQgaT0oKHRbMF0tZVswXSkqKHJbMF0tZVswXSkrKHRbMV0tZVsxXSkqKHJbMV0tZVsxXSkpL247cmV0dXJuIGk9TWF0aC5tYXgoMCxNYXRoLm1pbigxLGkpKSxRVCh0LEhkKGUscixpKSl9ZnVuY3Rpb24gSGQodCxlLHIpe3JldHVyblt0WzBdKyhlWzBdLXRbMF0pKnIsdFsxXSsoZVsxXS10WzFdKSpyXX1mdW5jdGlvbiBETCh0LGUscixuKXtsZXQgaT1ufHxbXTtpZihmdW5jdGlvbihsLHUpe2xldCBoPWxbdSswXSxmPWxbdSsxXSxkPWxbdSsyXSxwPWxbdSszXSxtPTMqZlswXS0yKmhbMF0tcFswXTttKj1tO2xldCBnPTMqZlsxXS0yKmhbMV0tcFsxXTtnKj1nO2xldCB5PTMqZFswXS0yKnBbMF0taFswXTt5Kj15O2xldCB2PTMqZFsxXS0yKnBbMV0taFsxXTtyZXR1cm4gdio9dixtPHkmJihtPXkpLGc8diYmKGc9diksbStnfSh0LGUpPHIpe2xldCBsPXRbZSswXTtpLmxlbmd0aD8oYT1pW2kubGVuZ3RoLTFdLHM9bCxNYXRoLnNxcnQoUVQoYSxzKSk+MSYmaS5wdXNoKGwpKTppLnB1c2gobCksaS5wdXNoKHRbZSszXSl9ZWxzZXtsZXQgdT10W2UrMF0saD10W2UrMV0sZj10W2UrMl0sZD10W2UrM10scD1IZCh1LGgsLjUpLG09SGQoaCxmLC41KSxnPUhkKGYsZCwuNSkseT1IZChwLG0sLjUpLHY9SGQobSxnLC41KSx4PUhkKHksdiwuNSk7REwoW3UscCx5LHhdLDAscixpKSxETChbeCx2LGcsZF0sMCxyLGkpfXZhciBhLHM7cmV0dXJuIGl9ZnVuY3Rpb24gSURlKHQsZSl7cmV0dXJuIGV3KHQsMCx0Lmxlbmd0aCxlKX1mdW5jdGlvbiBldyh0LGUscixuLGkpe2xldCBhPWl8fFtdLHM9dFtlXSxsPXRbci0xXSx1PTAsaD0xO2ZvcihsZXQgZj1lKzE7ZjxyLTE7KytmKXtsZXQgZD1NRGUodFtmXSxzLGwpO2Q+dSYmKHU9ZCxoPWYpfXJldHVybiBNYXRoLnNxcnQodSk+bj8oZXcodCxlLGgrMSxuLGEpLGV3KHQsaCxyLG4sYSkpOihhLmxlbmd0aHx8YS5wdXNoKHMpLGEucHVzaChsKSksYX1mdW5jdGlvbiBiTCh0LGU9LjE1LHIpe2xldCBuPVtdLGk9KHQubGVuZ3RoLTEpLzM7Zm9yKGxldCBhPTA7YTxpO2ErKylETCh0LDMqYSxlLG4pO3JldHVybiByJiZyPjA/ZXcobiwwLG4ubGVuZ3RoLHIpOm59dmFyIF8yLFRMLHdMLGtMLEVMLFNMLFBzLENMLEREZSx5TCxNUSxZVCxMRGUsc28sa20sTEwsalQsUkwsamUsV3Q9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKGdMLCJ0Iik7byhBRGUsImUiKTtvKF9EZSwicyIpO28oRDIsIm4iKTtfMj1jbGFzc3tzdGF0aWN7byh0aGlzLCJvIil9Y29uc3RydWN0b3IoZSl7dGhpcy5oZWxwZXI9ZX1maWxsUG9seWdvbnMoZSxyKXtyZXR1cm4gdGhpcy5fZmlsbFBvbHlnb25zKGUscil9X2ZpbGxQb2x5Z29ucyhlLHIpe2xldCBuPUQyKGUscik7cmV0dXJue3R5cGU6ImZpbGxTa2V0Y2giLG9wczp0aGlzLnJlbmRlckxpbmVzKG4scil9fXJlbmRlckxpbmVzKGUscil7bGV0IG49W107Zm9yKGxldCBpIG9mIGUpbi5wdXNoKC4uLnRoaXMuaGVscGVyLmRvdWJsZUxpbmVPcHMoaVswXVswXSxpWzBdWzFdLGlbMV1bMF0saVsxXVsxXSxyKSk7cmV0dXJuIG59fTtvKHR3LCJhIik7VEw9Y2xhc3MgZXh0ZW5kcyBfMntzdGF0aWN7byh0aGlzLCJoIil9ZmlsbFBvbHlnb25zKGUscil7bGV0IG49ci5oYWNodXJlR2FwO248MCYmKG49NCpyLnN0cm9rZVdpZHRoKSxuPU1hdGgubWF4KG4sLjEpO2xldCBpPUQyKGUsT2JqZWN0LmFzc2lnbih7fSxyLHtoYWNodXJlR2FwOm59KSksYT1NYXRoLlBJLzE4MCpyLmhhY2h1cmVBbmdsZSxzPVtdLGw9LjUqbipNYXRoLmNvcyhhKSx1PS41Km4qTWF0aC5zaW4oYSk7Zm9yKGxldFtoLGZdb2YgaSl0dyhbaCxmXSkmJnMucHVzaChbW2hbMF0tbCxoWzFdK3VdLFsuLi5mXV0sW1toWzBdK2wsaFsxXS11XSxbLi4uZl1dKTtyZXR1cm57dHlwZToiZmlsbFNrZXRjaCIsb3BzOnRoaXMucmVuZGVyTGluZXMocyxyKX19fSx3TD1jbGFzcyBleHRlbmRzIF8ye3N0YXRpY3tvKHRoaXMsInIiKX1maWxsUG9seWdvbnMoZSxyKXtsZXQgbj10aGlzLl9maWxsUG9seWdvbnMoZSxyKSxpPU9iamVjdC5hc3NpZ24oe30scix7aGFjaHVyZUFuZ2xlOnIuaGFjaHVyZUFuZ2xlKzkwfSksYT10aGlzLl9maWxsUG9seWdvbnMoZSxpKTtyZXR1cm4gbi5vcHM9bi5vcHMuY29uY2F0KGEub3BzKSxufX0sa0w9Y2xhc3N7c3RhdGlje28odGhpcywiaSIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuaGVscGVyPWV9ZmlsbFBvbHlnb25zKGUscil7bGV0IG49RDIoZSxyPU9iamVjdC5hc3NpZ24oe30scix7aGFjaHVyZUFuZ2xlOjB9KSk7cmV0dXJuIHRoaXMuZG90c09uTGluZXMobixyKX1kb3RzT25MaW5lcyhlLHIpe2xldCBuPVtdLGk9ci5oYWNodXJlR2FwO2k8MCYmKGk9NCpyLnN0cm9rZVdpZHRoKSxpPU1hdGgubWF4KGksLjEpO2xldCBhPXIuZmlsbFdlaWdodDthPDAmJihhPXIuc3Ryb2tlV2lkdGgvMik7bGV0IHM9aS80O2ZvcihsZXQgbCBvZiBlKXtsZXQgdT10dyhsKSxoPXUvaSxmPU1hdGguY2VpbChoKS0xLGQ9dS1mKmkscD0obFswXVswXStsWzFdWzBdKS8yLWkvNCxtPU1hdGgubWluKGxbMF1bMV0sbFsxXVsxXSk7Zm9yKGxldCBnPTA7ZzxmO2crKyl7bGV0IHk9bStkK2cqaSx2PXAtcysyKk1hdGgucmFuZG9tKCkqcyx4PXktcysyKk1hdGgucmFuZG9tKCkqcyxiPXRoaXMuaGVscGVyLmVsbGlwc2Uodix4LGEsYSxyKTtuLnB1c2goLi4uYi5vcHMpfX1yZXR1cm57dHlwZToiZmlsbFNrZXRjaCIsb3BzOm59fX0sRUw9Y2xhc3N7c3RhdGlje28odGhpcywiYyIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuaGVscGVyPWV9ZmlsbFBvbHlnb25zKGUscil7bGV0IG49RDIoZSxyKTtyZXR1cm57dHlwZToiZmlsbFNrZXRjaCIsb3BzOnRoaXMuZGFzaGVkTGluZShuLHIpfX1kYXNoZWRMaW5lKGUscil7bGV0IG49ci5kYXNoT2Zmc2V0PDA/ci5oYWNodXJlR2FwPDA/NCpyLnN0cm9rZVdpZHRoOnIuaGFjaHVyZUdhcDpyLmRhc2hPZmZzZXQsaT1yLmRhc2hHYXA8MD9yLmhhY2h1cmVHYXA8MD80KnIuc3Ryb2tlV2lkdGg6ci5oYWNodXJlR2FwOnIuZGFzaEdhcCxhPVtdO3JldHVybiBlLmZvckVhY2gocz0+e2xldCBsPXR3KHMpLHU9TWF0aC5mbG9vcihsLyhuK2kpKSxoPShsK2ktdSoobitpKSkvMixmPXNbMF0sZD1zWzFdO2ZbMF0+ZFswXSYmKGY9c1sxXSxkPXNbMF0pO2xldCBwPU1hdGguYXRhbigoZFsxXS1mWzFdKS8oZFswXS1mWzBdKSk7Zm9yKGxldCBtPTA7bTx1O20rKyl7bGV0IGc9bSoobitpKSx5PWcrbix2PVtmWzBdK2cqTWF0aC5jb3MocCkraCpNYXRoLmNvcyhwKSxmWzFdK2cqTWF0aC5zaW4ocCkraCpNYXRoLnNpbihwKV0seD1bZlswXSt5Kk1hdGguY29zKHApK2gqTWF0aC5jb3MocCksZlsxXSt5Kk1hdGguc2luKHApK2gqTWF0aC5zaW4ocCldO2EucHVzaCguLi50aGlzLmhlbHBlci5kb3VibGVMaW5lT3BzKHZbMF0sdlsxXSx4WzBdLHhbMV0scikpfX0pLGF9fSxTTD1jbGFzc3tzdGF0aWN7byh0aGlzLCJsIil9Y29uc3RydWN0b3IoZSl7dGhpcy5oZWxwZXI9ZX1maWxsUG9seWdvbnMoZSxyKXtsZXQgbj1yLmhhY2h1cmVHYXA8MD80KnIuc3Ryb2tlV2lkdGg6ci5oYWNodXJlR2FwLGk9ci56aWd6YWdPZmZzZXQ8MD9uOnIuemlnemFnT2Zmc2V0LGE9RDIoZSxyPU9iamVjdC5hc3NpZ24oe30scix7aGFjaHVyZUdhcDpuK2l9KSk7cmV0dXJue3R5cGU6ImZpbGxTa2V0Y2giLG9wczp0aGlzLnppZ3phZ0xpbmVzKGEsaSxyKX19emlnemFnTGluZXMoZSxyLG4pe2xldCBpPVtdO3JldHVybiBlLmZvckVhY2goYT0+e2xldCBzPXR3KGEpLGw9TWF0aC5yb3VuZChzLygyKnIpKSx1PWFbMF0saD1hWzFdO3VbMF0+aFswXSYmKHU9YVsxXSxoPWFbMF0pO2xldCBmPU1hdGguYXRhbigoaFsxXS11WzFdKS8oaFswXS11WzBdKSk7Zm9yKGxldCBkPTA7ZDxsO2QrKyl7bGV0IHA9MipkKnIsbT0yKihkKzEpKnIsZz1NYXRoLnNxcnQoMipNYXRoLnBvdyhyLDIpKSx5PVt1WzBdK3AqTWF0aC5jb3MoZiksdVsxXStwKk1hdGguc2luKGYpXSx2PVt1WzBdK20qTWF0aC5jb3MoZiksdVsxXSttKk1hdGguc2luKGYpXSx4PVt5WzBdK2cqTWF0aC5jb3MoZitNYXRoLlBJLzQpLHlbMV0rZypNYXRoLnNpbihmK01hdGguUEkvNCldO2kucHVzaCguLi50aGlzLmhlbHBlci5kb3VibGVMaW5lT3BzKHlbMF0seVsxXSx4WzBdLHhbMV0sbiksLi4udGhpcy5oZWxwZXIuZG91YmxlTGluZU9wcyh4WzBdLHhbMV0sdlswXSx2WzFdLG4pKX19KSxpfX0sUHM9e30sQ0w9Y2xhc3N7c3RhdGlje28odGhpcywicCIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuc2VlZD1lfW5leHQoKXtyZXR1cm4gdGhpcy5zZWVkPygyKiozMS0xJih0aGlzLnNlZWQ9TWF0aC5pbXVsKDQ4MjcxLHRoaXMuc2VlZCkpKS8yKiozMTpNYXRoLnJhbmRvbSgpfX0sRERlPTAseUw9MSxNUT0yLFlUPXtBOjcsYTo3LEM6NixjOjYsSDoxLGg6MSxMOjIsbDoyLE06MixtOjIsUTo0LHE6NCxTOjQsczo0LFQ6Mix0OjIsVjoxLHY6MSxaOjAsejowfTtvKHZMLCJrIik7byhOTCwiYiIpO28oR1EsInkiKTtvKFZRLCJtIik7byhDMiwidyIpO28oVVEsIngiKTtMRGU9e3JhbmRPZmZzZXQ6byhmdW5jdGlvbih0LGUpe3JldHVybiBhcih0LGUpfSwicmFuZE9mZnNldCIpLHJhbmRPZmZzZXRXaXRoUmFuZ2U6byhmdW5jdGlvbih0LGUscil7cmV0dXJuIFpUKHQsZSxyKX0sInJhbmRPZmZzZXRXaXRoUmFuZ2UiKSxlbGxpcHNlOm8oZnVuY3Rpb24odCxlLHIsbixpKXtsZXQgYT1XUShyLG4saSk7cmV0dXJuIEFMKHQsZSxpLGEpLm9wc2V0fSwiZWxsaXBzZSIpLGRvdWJsZUxpbmVPcHM6byhmdW5jdGlvbih0LGUscixuLGkpe3JldHVybiBqaCh0LGUscixuLGksITApfSwiZG91YmxlTGluZU9wcyIpfTtvKEhRLCJ2Iik7byhLVCwiUyIpO28oUkRlLCJPIik7byhJUSwiTCIpO28oV1EsIlQiKTtvKEFMLCJEIik7byhPUSwiQSIpO28oUFEsIl8iKTtvKHhMLCJJIik7byh3bSwiQyIpO28oQlEsInoiKTtvKHFRLCJXIik7byhaVCwiRSIpO28oYXIsIkciKTtvKGpoLCIkIik7byhfTCwiUiIpO28oWFQsImoiKTtvKEpULCJxIik7byhGUSwiRiIpO28oJFEsIlYiKTtvKE5EZSwiWiIpO28oQTIsIlEiKTtvKHpRLCJIIik7byhRVCwiTiIpO28oTURlLCJCIik7byhIZCwiSiIpO28oREwsIksiKTtvKElEZSwiVSIpO28oZXcsIlgiKTtvKGJMLCJZIik7c289Im5vbmUiLGttPWNsYXNze3N0YXRpY3tvKHRoaXMsImV0Iil9Y29uc3RydWN0b3IoZSl7dGhpcy5kZWZhdWx0T3B0aW9ucz17bWF4UmFuZG9tbmVzc09mZnNldDoyLHJvdWdobmVzczoxLGJvd2luZzoxLHN0cm9rZToiIzAwMCIsc3Ryb2tlV2lkdGg6MSxjdXJ2ZVRpZ2h0bmVzczowLGN1cnZlRml0dGluZzouOTUsY3VydmVTdGVwQ291bnQ6OSxmaWxsU3R5bGU6ImhhY2h1cmUiLGZpbGxXZWlnaHQ6LTEsaGFjaHVyZUFuZ2xlOi00MSxoYWNodXJlR2FwOi0xLGRhc2hPZmZzZXQ6LTEsZGFzaEdhcDotMSx6aWd6YWdPZmZzZXQ6LTEsc2VlZDowLGRpc2FibGVNdWx0aVN0cm9rZTohMSxkaXNhYmxlTXVsdGlTdHJva2VGaWxsOiExLHByZXNlcnZlVmVydGljZXM6ITEsZmlsbFNoYXBlUm91Z2huZXNzR2FpbjouOH0sdGhpcy5jb25maWc9ZXx8e30sdGhpcy5jb25maWcub3B0aW9ucyYmKHRoaXMuZGVmYXVsdE9wdGlvbnM9dGhpcy5fbyh0aGlzLmNvbmZpZy5vcHRpb25zKSl9c3RhdGljIG5ld1NlZWQoKXtyZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjIqKjMxKX1fbyhlKXtyZXR1cm4gZT9PYmplY3QuYXNzaWduKHt9LHRoaXMuZGVmYXVsdE9wdGlvbnMsZSk6dGhpcy5kZWZhdWx0T3B0aW9uc31fZChlLHIsbil7cmV0dXJue3NoYXBlOmUsc2V0czpyfHxbXSxvcHRpb25zOm58fHRoaXMuZGVmYXVsdE9wdGlvbnN9fWxpbmUoZSxyLG4saSxhKXtsZXQgcz10aGlzLl9vKGEpO3JldHVybiB0aGlzLl9kKCJsaW5lIixbSFEoZSxyLG4saSxzKV0scyl9cmVjdGFuZ2xlKGUscixuLGksYSl7bGV0IHM9dGhpcy5fbyhhKSxsPVtdLHU9UkRlKGUscixuLGkscyk7aWYocy5maWxsKXtsZXQgaD1bW2Uscl0sW2UrbixyXSxbZStuLHIraV0sW2UscitpXV07cy5maWxsU3R5bGU9PT0ic29saWQiP2wucHVzaCh4TChbaF0scykpOmwucHVzaCh3bShbaF0scykpfXJldHVybiBzLnN0cm9rZSE9PXNvJiZsLnB1c2godSksdGhpcy5fZCgicmVjdGFuZ2xlIixsLHMpfWVsbGlwc2UoZSxyLG4saSxhKXtsZXQgcz10aGlzLl9vKGEpLGw9W10sdT1XUShuLGkscyksaD1BTChlLHIscyx1KTtpZihzLmZpbGwpaWYocy5maWxsU3R5bGU9PT0ic29saWQiKXtsZXQgZj1BTChlLHIscyx1KS5vcHNldDtmLnR5cGU9ImZpbGxQYXRoIixsLnB1c2goZil9ZWxzZSBsLnB1c2god20oW2guZXN0aW1hdGVkUG9pbnRzXSxzKSk7cmV0dXJuIHMuc3Ryb2tlIT09c28mJmwucHVzaChoLm9wc2V0KSx0aGlzLl9kKCJlbGxpcHNlIixsLHMpfWNpcmNsZShlLHIsbixpKXtsZXQgYT10aGlzLmVsbGlwc2UoZSxyLG4sbixpKTtyZXR1cm4gYS5zaGFwZT0iY2lyY2xlIixhfWxpbmVhclBhdGgoZSxyKXtsZXQgbj10aGlzLl9vKHIpO3JldHVybiB0aGlzLl9kKCJsaW5lYXJQYXRoIixbS1QoZSwhMSxuKV0sbil9YXJjKGUscixuLGksYSxzLGw9ITEsdSl7bGV0IGg9dGhpcy5fbyh1KSxmPVtdLGQ9T1EoZSxyLG4saSxhLHMsbCwhMCxoKTtpZihsJiZoLmZpbGwpaWYoaC5maWxsU3R5bGU9PT0ic29saWQiKXtsZXQgcD1PYmplY3QuYXNzaWduKHt9LGgpO3AuZGlzYWJsZU11bHRpU3Ryb2tlPSEwO2xldCBtPU9RKGUscixuLGksYSxzLCEwLCExLHApO20udHlwZT0iZmlsbFBhdGgiLGYucHVzaChtKX1lbHNlIGYucHVzaChmdW5jdGlvbihwLG0sZyx5LHYseCxiKXtsZXQgVD1wLFM9bSx3PU1hdGguYWJzKGcvMiksRT1NYXRoLmFicyh5LzIpO3crPWFyKC4wMSp3LGIpLEUrPWFyKC4wMSpFLGIpO2xldCBfPXYsQz14O2Zvcig7XzwwOylfKz0yKk1hdGguUEksQys9MipNYXRoLlBJO0MtXz4yKk1hdGguUEkmJihfPTAsQz0yKk1hdGguUEkpO2xldCBEPShDLV8pL2IuY3VydmVTdGVwQ291bnQsTz1bXTtmb3IobGV0IFI9XztSPD1DO1IrPUQpTy5wdXNoKFtUK3cqTWF0aC5jb3MoUiksUytFKk1hdGguc2luKFIpXSk7cmV0dXJuIE8ucHVzaChbVCt3Kk1hdGguY29zKEMpLFMrRSpNYXRoLnNpbihDKV0pLE8ucHVzaChbVCxTXSksd20oW09dLGIpfShlLHIsbixpLGEscyxoKSk7cmV0dXJuIGguc3Ryb2tlIT09c28mJmYucHVzaChkKSx0aGlzLl9kKCJhcmMiLGYsaCl9Y3VydmUoZSxyKXtsZXQgbj10aGlzLl9vKHIpLGk9W10sYT1JUShlLG4pO2lmKG4uZmlsbCYmbi5maWxsIT09c28paWYobi5maWxsU3R5bGU9PT0ic29saWQiKXtsZXQgcz1JUShlLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxuKSx7ZGlzYWJsZU11bHRpU3Ryb2tlOiEwLHJvdWdobmVzczpuLnJvdWdobmVzcz9uLnJvdWdobmVzcytuLmZpbGxTaGFwZVJvdWdobmVzc0dhaW46MH0pKTtpLnB1c2goe3R5cGU6ImZpbGxQYXRoIixvcHM6dGhpcy5fbWVyZ2VkU2hhcGUocy5vcHMpfSl9ZWxzZXtsZXQgcz1bXSxsPWU7aWYobC5sZW5ndGgpe2xldCB1PXR5cGVvZiBsWzBdWzBdPT0ibnVtYmVyIj9bbF06bDtmb3IobGV0IGggb2YgdSloLmxlbmd0aDwzP3MucHVzaCguLi5oKTpoLmxlbmd0aD09PTM/cy5wdXNoKC4uLmJMKHpRKFtoWzBdLGhbMF0saFsxXSxoWzJdXSksMTAsKDErbi5yb3VnaG5lc3MpLzIpKTpzLnB1c2goLi4uYkwoelEoaCksMTAsKDErbi5yb3VnaG5lc3MpLzIpKX1zLmxlbmd0aCYmaS5wdXNoKHdtKFtzXSxuKSl9cmV0dXJuIG4uc3Ryb2tlIT09c28mJmkucHVzaChhKSx0aGlzLl9kKCJjdXJ2ZSIsaSxuKX1wb2x5Z29uKGUscil7bGV0IG49dGhpcy5fbyhyKSxpPVtdLGE9S1QoZSwhMCxuKTtyZXR1cm4gbi5maWxsJiYobi5maWxsU3R5bGU9PT0ic29saWQiP2kucHVzaCh4TChbZV0sbikpOmkucHVzaCh3bShbZV0sbikpKSxuLnN0cm9rZSE9PXNvJiZpLnB1c2goYSksdGhpcy5fZCgicG9seWdvbiIsaSxuKX1wYXRoKGUscil7bGV0IG49dGhpcy5fbyhyKSxpPVtdO2lmKCFlKXJldHVybiB0aGlzLl9kKCJwYXRoIixpLG4pO2U9KGV8fCIiKS5yZXBsYWNlKC9cbi9nLCIgIikucmVwbGFjZSgvKC1ccykvZywiLSIpLnJlcGxhY2UoIi8oc3MpL2ciLCIgIik7bGV0IGE9bi5maWxsJiZuLmZpbGwhPT0idHJhbnNwYXJlbnQiJiZuLmZpbGwhPT1zbyxzPW4uc3Ryb2tlIT09c28sbD0hIShuLnNpbXBsaWZpY2F0aW9uJiZuLnNpbXBsaWZpY2F0aW9uPDEpLHU9ZnVuY3Rpb24oZixkLHApe2xldCBtPVZRKEdRKE5MKGYpKSksZz1bXSx5PVtdLHY9WzAsMF0seD1bXSxiPW8oKCk9Pnt4Lmxlbmd0aD49NCYmeS5wdXNoKC4uLmJMKHgsZCkpLHg9W119LCJpIiksVD1vKCgpPT57YigpLHkubGVuZ3RoJiYoZy5wdXNoKHkpLHk9W10pfSwiYyIpO2ZvcihsZXR7a2V5OncsZGF0YTpFfW9mIG0pc3dpdGNoKHcpe2Nhc2UiTSI6VCgpLHY9W0VbMF0sRVsxXV0seS5wdXNoKHYpO2JyZWFrO2Nhc2UiTCI6YigpLHkucHVzaChbRVswXSxFWzFdXSk7YnJlYWs7Y2FzZSJDIjppZigheC5sZW5ndGgpe2xldCBfPXkubGVuZ3RoP3lbeS5sZW5ndGgtMV06djt4LnB1c2goW19bMF0sX1sxXV0pfXgucHVzaChbRVswXSxFWzFdXSkseC5wdXNoKFtFWzJdLEVbM11dKSx4LnB1c2goW0VbNF0sRVs1XV0pO2JyZWFrO2Nhc2UiWiI6YigpLHkucHVzaChbdlswXSx2WzFdXSl9aWYoVCgpLCFwKXJldHVybiBnO2xldCBTPVtdO2ZvcihsZXQgdyBvZiBnKXtsZXQgRT1JRGUodyxwKTtFLmxlbmd0aCYmUy5wdXNoKEUpfXJldHVybiBTfShlLDEsbD80LTQqKG4uc2ltcGxpZmljYXRpb258fDEpOigxK24ucm91Z2huZXNzKS8yKSxoPVBRKGUsbik7aWYoYSlpZihuLmZpbGxTdHlsZT09PSJzb2xpZCIpaWYodS5sZW5ndGg9PT0xKXtsZXQgZj1QUShlLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxuKSx7ZGlzYWJsZU11bHRpU3Ryb2tlOiEwLHJvdWdobmVzczpuLnJvdWdobmVzcz9uLnJvdWdobmVzcytuLmZpbGxTaGFwZVJvdWdobmVzc0dhaW46MH0pKTtpLnB1c2goe3R5cGU6ImZpbGxQYXRoIixvcHM6dGhpcy5fbWVyZ2VkU2hhcGUoZi5vcHMpfSl9ZWxzZSBpLnB1c2goeEwodSxuKSk7ZWxzZSBpLnB1c2god20odSxuKSk7cmV0dXJuIHMmJihsP3UuZm9yRWFjaChmPT57aS5wdXNoKEtUKGYsITEsbikpfSk6aS5wdXNoKGgpKSx0aGlzLl9kKCJwYXRoIixpLG4pfW9wc1RvUGF0aChlLHIpe2xldCBuPSIiO2ZvcihsZXQgaSBvZiBlLm9wcyl7bGV0IGE9dHlwZW9mIHI9PSJudW1iZXIiJiZyPj0wP2kuZGF0YS5tYXAocz0+K3MudG9GaXhlZChyKSk6aS5kYXRhO3N3aXRjaChpLm9wKXtjYXNlIm1vdmUiOm4rPWBNJHthWzBdfSAke2FbMV19IGA7YnJlYWs7Y2FzZSJiY3VydmVUbyI6bis9YEMke2FbMF19ICR7YVsxXX0sICR7YVsyXX0gJHthWzNdfSwgJHthWzRdfSAke2FbNV19IGA7YnJlYWs7Y2FzZSJsaW5lVG8iOm4rPWBMJHthWzBdfSAke2FbMV19IGB9fXJldHVybiBuLnRyaW0oKX10b1BhdGhzKGUpe2xldCByPWUuc2V0c3x8W10sbj1lLm9wdGlvbnN8fHRoaXMuZGVmYXVsdE9wdGlvbnMsaT1bXTtmb3IobGV0IGEgb2Ygcil7bGV0IHM9bnVsbDtzd2l0Y2goYS50eXBlKXtjYXNlInBhdGgiOnM9e2Q6dGhpcy5vcHNUb1BhdGgoYSksc3Ryb2tlOm4uc3Ryb2tlLHN0cm9rZVdpZHRoOm4uc3Ryb2tlV2lkdGgsZmlsbDpzb307YnJlYWs7Y2FzZSJmaWxsUGF0aCI6cz17ZDp0aGlzLm9wc1RvUGF0aChhKSxzdHJva2U6c28sc3Ryb2tlV2lkdGg6MCxmaWxsOm4uZmlsbHx8c299O2JyZWFrO2Nhc2UiZmlsbFNrZXRjaCI6cz10aGlzLmZpbGxTa2V0Y2goYSxuKX1zJiZpLnB1c2gocyl9cmV0dXJuIGl9ZmlsbFNrZXRjaChlLHIpe2xldCBuPXIuZmlsbFdlaWdodDtyZXR1cm4gbjwwJiYobj1yLnN0cm9rZVdpZHRoLzIpLHtkOnRoaXMub3BzVG9QYXRoKGUpLHN0cm9rZTpyLmZpbGx8fHNvLHN0cm9rZVdpZHRoOm4sZmlsbDpzb319X21lcmdlZFNoYXBlKGUpe3JldHVybiBlLmZpbHRlcigocixuKT0+bj09PTB8fHIub3AhPT0ibW92ZSIpfX0sTEw9Y2xhc3N7c3RhdGlje28odGhpcywic3QiKX1jb25zdHJ1Y3RvcihlLHIpe3RoaXMuY2FudmFzPWUsdGhpcy5jdHg9dGhpcy5jYW52YXMuZ2V0Q29udGV4dCgiMmQiKSx0aGlzLmdlbj1uZXcga20ocil9ZHJhdyhlKXtsZXQgcj1lLnNldHN8fFtdLG49ZS5vcHRpb25zfHx0aGlzLmdldERlZmF1bHRPcHRpb25zKCksaT10aGlzLmN0eCxhPWUub3B0aW9ucy5maXhlZERlY2ltYWxQbGFjZURpZ2l0cztmb3IobGV0IHMgb2Ygcilzd2l0Y2gocy50eXBlKXtjYXNlInBhdGgiOmkuc2F2ZSgpLGkuc3Ryb2tlU3R5bGU9bi5zdHJva2U9PT0ibm9uZSI/InRyYW5zcGFyZW50IjpuLnN0cm9rZSxpLmxpbmVXaWR0aD1uLnN0cm9rZVdpZHRoLG4uc3Ryb2tlTGluZURhc2gmJmkuc2V0TGluZURhc2gobi5zdHJva2VMaW5lRGFzaCksbi5zdHJva2VMaW5lRGFzaE9mZnNldCYmKGkubGluZURhc2hPZmZzZXQ9bi5zdHJva2VMaW5lRGFzaE9mZnNldCksdGhpcy5fZHJhd1RvQ29udGV4dChpLHMsYSksaS5yZXN0b3JlKCk7YnJlYWs7Y2FzZSJmaWxsUGF0aCI6e2kuc2F2ZSgpLGkuZmlsbFN0eWxlPW4uZmlsbHx8IiI7bGV0IGw9ZS5zaGFwZT09PSJjdXJ2ZSJ8fGUuc2hhcGU9PT0icG9seWdvbiJ8fGUuc2hhcGU9PT0icGF0aCI/ImV2ZW5vZGQiOiJub256ZXJvIjt0aGlzLl9kcmF3VG9Db250ZXh0KGkscyxhLGwpLGkucmVzdG9yZSgpO2JyZWFrfWNhc2UiZmlsbFNrZXRjaCI6dGhpcy5maWxsU2tldGNoKGkscyxuKX19ZmlsbFNrZXRjaChlLHIsbil7bGV0IGk9bi5maWxsV2VpZ2h0O2k8MCYmKGk9bi5zdHJva2VXaWR0aC8yKSxlLnNhdmUoKSxuLmZpbGxMaW5lRGFzaCYmZS5zZXRMaW5lRGFzaChuLmZpbGxMaW5lRGFzaCksbi5maWxsTGluZURhc2hPZmZzZXQmJihlLmxpbmVEYXNoT2Zmc2V0PW4uZmlsbExpbmVEYXNoT2Zmc2V0KSxlLnN0cm9rZVN0eWxlPW4uZmlsbHx8IiIsZS5saW5lV2lkdGg9aSx0aGlzLl9kcmF3VG9Db250ZXh0KGUscixuLmZpeGVkRGVjaW1hbFBsYWNlRGlnaXRzKSxlLnJlc3RvcmUoKX1fZHJhd1RvQ29udGV4dChlLHIsbixpPSJub256ZXJvIil7ZS5iZWdpblBhdGgoKTtmb3IobGV0IGEgb2Ygci5vcHMpe2xldCBzPXR5cGVvZiBuPT0ibnVtYmVyIiYmbj49MD9hLmRhdGEubWFwKGw9PitsLnRvRml4ZWQobikpOmEuZGF0YTtzd2l0Y2goYS5vcCl7Y2FzZSJtb3ZlIjplLm1vdmVUbyhzWzBdLHNbMV0pO2JyZWFrO2Nhc2UiYmN1cnZlVG8iOmUuYmV6aWVyQ3VydmVUbyhzWzBdLHNbMV0sc1syXSxzWzNdLHNbNF0sc1s1XSk7YnJlYWs7Y2FzZSJsaW5lVG8iOmUubGluZVRvKHNbMF0sc1sxXSl9fXIudHlwZT09PSJmaWxsUGF0aCI/ZS5maWxsKGkpOmUuc3Ryb2tlKCl9Z2V0IGdlbmVyYXRvcigpe3JldHVybiB0aGlzLmdlbn1nZXREZWZhdWx0T3B0aW9ucygpe3JldHVybiB0aGlzLmdlbi5kZWZhdWx0T3B0aW9uc31saW5lKGUscixuLGksYSl7bGV0IHM9dGhpcy5nZW4ubGluZShlLHIsbixpLGEpO3JldHVybiB0aGlzLmRyYXcocyksc31yZWN0YW5nbGUoZSxyLG4saSxhKXtsZXQgcz10aGlzLmdlbi5yZWN0YW5nbGUoZSxyLG4saSxhKTtyZXR1cm4gdGhpcy5kcmF3KHMpLHN9ZWxsaXBzZShlLHIsbixpLGEpe2xldCBzPXRoaXMuZ2VuLmVsbGlwc2UoZSxyLG4saSxhKTtyZXR1cm4gdGhpcy5kcmF3KHMpLHN9Y2lyY2xlKGUscixuLGkpe2xldCBhPXRoaXMuZ2VuLmNpcmNsZShlLHIsbixpKTtyZXR1cm4gdGhpcy5kcmF3KGEpLGF9bGluZWFyUGF0aChlLHIpe2xldCBuPXRoaXMuZ2VuLmxpbmVhclBhdGgoZSxyKTtyZXR1cm4gdGhpcy5kcmF3KG4pLG59cG9seWdvbihlLHIpe2xldCBuPXRoaXMuZ2VuLnBvbHlnb24oZSxyKTtyZXR1cm4gdGhpcy5kcmF3KG4pLG59YXJjKGUscixuLGksYSxzLGw9ITEsdSl7bGV0IGg9dGhpcy5nZW4uYXJjKGUscixuLGksYSxzLGwsdSk7cmV0dXJuIHRoaXMuZHJhdyhoKSxofWN1cnZlKGUscil7bGV0IG49dGhpcy5nZW4uY3VydmUoZSxyKTtyZXR1cm4gdGhpcy5kcmF3KG4pLG59cGF0aChlLHIpe2xldCBuPXRoaXMuZ2VuLnBhdGgoZSxyKTtyZXR1cm4gdGhpcy5kcmF3KG4pLG59fSxqVD0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLFJMPWNsYXNze3N0YXRpY3tvKHRoaXMsIm90Iil9Y29uc3RydWN0b3IoZSxyKXt0aGlzLnN2Zz1lLHRoaXMuZ2VuPW5ldyBrbShyKX1kcmF3KGUpe2xldCByPWUuc2V0c3x8W10sbj1lLm9wdGlvbnN8fHRoaXMuZ2V0RGVmYXVsdE9wdGlvbnMoKSxpPXRoaXMuc3ZnLm93bmVyRG9jdW1lbnR8fHdpbmRvdy5kb2N1bWVudCxhPWkuY3JlYXRlRWxlbWVudE5TKGpULCJnIikscz1lLm9wdGlvbnMuZml4ZWREZWNpbWFsUGxhY2VEaWdpdHM7Zm9yKGxldCBsIG9mIHIpe2xldCB1PW51bGw7c3dpdGNoKGwudHlwZSl7Y2FzZSJwYXRoIjp1PWkuY3JlYXRlRWxlbWVudE5TKGpULCJwYXRoIiksdS5zZXRBdHRyaWJ1dGUoImQiLHRoaXMub3BzVG9QYXRoKGwscykpLHUuc2V0QXR0cmlidXRlKCJzdHJva2UiLG4uc3Ryb2tlKSx1LnNldEF0dHJpYnV0ZSgic3Ryb2tlLXdpZHRoIixuLnN0cm9rZVdpZHRoKyIiKSx1LnNldEF0dHJpYnV0ZSgiZmlsbCIsIm5vbmUiKSxuLnN0cm9rZUxpbmVEYXNoJiZ1LnNldEF0dHJpYnV0ZSgic3Ryb2tlLWRhc2hhcnJheSIsbi5zdHJva2VMaW5lRGFzaC5qb2luKCIgIikudHJpbSgpKSxuLnN0cm9rZUxpbmVEYXNoT2Zmc2V0JiZ1LnNldEF0dHJpYnV0ZSgic3Ryb2tlLWRhc2hvZmZzZXQiLGAke24uc3Ryb2tlTGluZURhc2hPZmZzZXR9YCk7YnJlYWs7Y2FzZSJmaWxsUGF0aCI6dT1pLmNyZWF0ZUVsZW1lbnROUyhqVCwicGF0aCIpLHUuc2V0QXR0cmlidXRlKCJkIix0aGlzLm9wc1RvUGF0aChsLHMpKSx1LnNldEF0dHJpYnV0ZSgic3Ryb2tlIiwibm9uZSIpLHUuc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLCIwIiksdS5zZXRBdHRyaWJ1dGUoImZpbGwiLG4uZmlsbHx8IiIpLGUuc2hhcGUhPT0iY3VydmUiJiZlLnNoYXBlIT09InBvbHlnb24ifHx1LnNldEF0dHJpYnV0ZSgiZmlsbC1ydWxlIiwiZXZlbm9kZCIpO2JyZWFrO2Nhc2UiZmlsbFNrZXRjaCI6dT10aGlzLmZpbGxTa2V0Y2goaSxsLG4pfXUmJmEuYXBwZW5kQ2hpbGQodSl9cmV0dXJuIGF9ZmlsbFNrZXRjaChlLHIsbil7bGV0IGk9bi5maWxsV2VpZ2h0O2k8MCYmKGk9bi5zdHJva2VXaWR0aC8yKTtsZXQgYT1lLmNyZWF0ZUVsZW1lbnROUyhqVCwicGF0aCIpO3JldHVybiBhLnNldEF0dHJpYnV0ZSgiZCIsdGhpcy5vcHNUb1BhdGgocixuLmZpeGVkRGVjaW1hbFBsYWNlRGlnaXRzKSksYS5zZXRBdHRyaWJ1dGUoInN0cm9rZSIsbi5maWxsfHwiIiksYS5zZXRBdHRyaWJ1dGUoInN0cm9rZS13aWR0aCIsaSsiIiksYS5zZXRBdHRyaWJ1dGUoImZpbGwiLCJub25lIiksbi5maWxsTGluZURhc2gmJmEuc2V0QXR0cmlidXRlKCJzdHJva2UtZGFzaGFycmF5IixuLmZpbGxMaW5lRGFzaC5qb2luKCIgIikudHJpbSgpKSxuLmZpbGxMaW5lRGFzaE9mZnNldCYmYS5zZXRBdHRyaWJ1dGUoInN0cm9rZS1kYXNob2Zmc2V0IixgJHtuLmZpbGxMaW5lRGFzaE9mZnNldH1gKSxhfWdldCBnZW5lcmF0b3IoKXtyZXR1cm4gdGhpcy5nZW59Z2V0RGVmYXVsdE9wdGlvbnMoKXtyZXR1cm4gdGhpcy5nZW4uZGVmYXVsdE9wdGlvbnN9b3BzVG9QYXRoKGUscil7cmV0dXJuIHRoaXMuZ2VuLm9wc1RvUGF0aChlLHIpfWxpbmUoZSxyLG4saSxhKXtsZXQgcz10aGlzLmdlbi5saW5lKGUscixuLGksYSk7cmV0dXJuIHRoaXMuZHJhdyhzKX1yZWN0YW5nbGUoZSxyLG4saSxhKXtsZXQgcz10aGlzLmdlbi5yZWN0YW5nbGUoZSxyLG4saSxhKTtyZXR1cm4gdGhpcy5kcmF3KHMpfWVsbGlwc2UoZSxyLG4saSxhKXtsZXQgcz10aGlzLmdlbi5lbGxpcHNlKGUscixuLGksYSk7cmV0dXJuIHRoaXMuZHJhdyhzKX1jaXJjbGUoZSxyLG4saSl7bGV0IGE9dGhpcy5nZW4uY2lyY2xlKGUscixuLGkpO3JldHVybiB0aGlzLmRyYXcoYSl9bGluZWFyUGF0aChlLHIpe2xldCBuPXRoaXMuZ2VuLmxpbmVhclBhdGgoZSxyKTtyZXR1cm4gdGhpcy5kcmF3KG4pfXBvbHlnb24oZSxyKXtsZXQgbj10aGlzLmdlbi5wb2x5Z29uKGUscik7cmV0dXJuIHRoaXMuZHJhdyhuKX1hcmMoZSxyLG4saSxhLHMsbD0hMSx1KXtsZXQgaD10aGlzLmdlbi5hcmMoZSxyLG4saSxhLHMsbCx1KTtyZXR1cm4gdGhpcy5kcmF3KGgpfWN1cnZlKGUscil7bGV0IG49dGhpcy5nZW4uY3VydmUoZSxyKTtyZXR1cm4gdGhpcy5kcmF3KG4pfXBhdGgoZSxyKXtsZXQgbj10aGlzLmdlbi5wYXRoKGUscik7cmV0dXJuIHRoaXMuZHJhdyhuKX19LGplPXtjYW52YXM6bygodCxlKT0+bmV3IExMKHQsZSksImNhbnZhcyIpLHN2ZzpvKCh0LGUpPT5uZXcgUkwodCxlKSwic3ZnIiksZ2VuZXJhdG9yOm8odD0+bmV3IGttKHQpLCJnZW5lcmF0b3IiKSxuZXdTZWVkOm8oKCk9PmttLm5ld1NlZWQoKSwibmV3U2VlZCIpfX0pO2Z1bmN0aW9uIFlRKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnJ9PVllKGUpO2UubGFiZWxTdHlsZT1yO2xldCBuPWh0KGUpLGk9bjtufHwoaT0iYW5jaG9yIik7bGV0IGE9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsaSkuYXR0cigiaWQiLGUuZG9tSWR8fGUuaWQpLHM9MSx7Y3NzU3R5bGVzOmx9PWUsdT1qZS5zdmcoYSksaD1RZShlLHtmaWxsOiJibGFjayIsc3Ryb2tlOiJub25lIixmaWxsU3R5bGU6InNvbGlkIn0pO2UubG9vayE9PSJoYW5kRHJhd24iJiYoaC5yb3VnaG5lc3M9MCk7bGV0IGY9dS5jaXJjbGUoMCwwLHMqMixoKSxkPWEuaW5zZXJ0KCgpPT5mLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gZC5hdHRyKCJjbGFzcyIsImFuY2hvciIpLmF0dHIoInN0eWxlIix6bihsKSksS2UoZSxkKSxlLmludGVyc2VjdD1mdW5jdGlvbihwKXtyZXR1cm4gWC5pbmZvKCJDaXJjbGUgaW50ZXJzZWN0IixlLHMscCksWGUuY2lyY2xlKGUscyxwKX0sYX12YXIgWFE9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt5dCgpO0Z0KCk7SHQoKTt6dCgpO1d0KCk7ZXIoKTtvKFlRLCJhbmNob3IiKX0pO2Z1bmN0aW9uIGpRKHQsZSxyLG4saSxhLHMpe2xldCB1PSh0K3IpLzIsaD0oZStuKS8yLGY9TWF0aC5hdGFuMihuLWUsci10KSxkPShyLXQpLzIscD0obi1lKS8yLG09ZC9pLGc9cC9hLHk9TWF0aC5zcXJ0KG0qKjIrZyoqMik7aWYoeT4xKXRocm93IG5ldyBFcnJvcigiVGhlIGdpdmVuIHJhZGlpIGFyZSB0b28gc21hbGwgdG8gY3JlYXRlIGFuIGFyYyBiZXR3ZWVuIHRoZSBwb2ludHMuIik7bGV0IHY9TWF0aC5zcXJ0KDEteSoqMikseD11K3YqYSpNYXRoLnNpbihmKSoocz8tMToxKSxiPWgtdippKk1hdGguY29zKGYpKihzPy0xOjEpLFQ9TWF0aC5hdGFuMigoZS1iKS9hLCh0LXgpL2kpLHc9TWF0aC5hdGFuMigobi1iKS9hLChyLXgpL2kpLVQ7cyYmdzwwJiYodys9MipNYXRoLlBJKSwhcyYmdz4wJiYody09MipNYXRoLlBJKTtsZXQgRT1bXTtmb3IobGV0IF89MDtfPDIwO18rKyl7bGV0IEM9Xy8xOSxEPVQrQyp3LE89eCtpKk1hdGguY29zKEQpLFI9YithKk1hdGguc2luKEQpO0UucHVzaCh7eDpPLHk6Un0pfXJldHVybiBFfWFzeW5jIGZ1bmN0aW9uIEtRKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1ZZShlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmF9PWF3YWl0IG10KHQsZSxodChlKSkscz1hLndpZHRoK2UucGFkZGluZysyMCxsPWEuaGVpZ2h0K2UucGFkZGluZyx1PWwvMixoPXUvKDIuNStsLzUwKSx7Y3NzU3R5bGVzOmZ9PWUsZD1be3g6cy8yLHk6LWwvMn0se3g6LXMvMix5Oi1sLzJ9LC4uLmpRKC1zLzIsLWwvMiwtcy8yLGwvMixoLHUsITEpLHt4OnMvMix5OmwvMn0sLi4ualEocy8yLGwvMixzLzIsLWwvMixoLHUsITApXSxwPWplLnN2ZyhpKSxtPVFlKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYobS5yb3VnaG5lc3M9MCxtLmZpbGxTdHlsZT0ic29saWQiKTtsZXQgZz1YdChkKSx5PXAucGF0aChnLG0pLHY9aS5pbnNlcnQoKCk9PnksIjpmaXJzdC1jaGlsZCIpO3JldHVybiB2LmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIiksZiYmZS5sb29rIT09ImhhbmREcmF3biImJnYuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLGYpLG4mJmUubG9vayE9PSJoYW5kRHJhd24iJiZ2LnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixuKSx2LmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke2gvMn0sIDApYCksS2UoZSx2KSxlLmludGVyc2VjdD1mdW5jdGlvbih4KXtyZXR1cm4gWGUucG9seWdvbihlLGQseCl9LGl9dmFyIFFRPU4oKCk9PnsidXNlIHN0cmljdCI7RnQoKTtIdCgpO3p0KCk7V3QoKTtvKGpRLCJnZW5lcmF0ZUFyY1BvaW50cyIpO28oS1EsImJvd1RpZVJlY3QiKX0pO2Z1bmN0aW9uIE1hKHQsZSxyLG4pe3JldHVybiB0Lmluc2VydCgicG9seWdvbiIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInBvaW50cyIsbi5tYXAoZnVuY3Rpb24oaSl7cmV0dXJuIGkueCsiLCIraS55fSkuam9pbigiICIpKS5hdHRyKCJjbGFzcyIsImxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1lLzIrIiwiK3IvMisiKSIpfXZhciBJdT1OKCgpPT57InVzZSBzdHJpY3QiO28oTWEsImluc2VydFBvbHlnb25TaGFwZSIpfSk7YXN5bmMgZnVuY3Rpb24gWlEodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVllKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YX09YXdhaXQgbXQodCxlLGh0KGUpKSxzPWEuaGVpZ2h0K2UucGFkZGluZyxsPTEyLHU9YS53aWR0aCtlLnBhZGRpbmcrbCxoPTAsZj11LGQ9LXMscD0wLG09W3t4OmgrbCx5OmR9LHt4OmYseTpkfSx7eDpmLHk6cH0se3g6aCx5OnB9LHt4OmgseTpkK2x9LHt4OmgrbCx5OmR9XSxnLHtjc3NTdHlsZXM6eX09ZTtpZihlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0IHY9amUuc3ZnKGkpLHg9UWUoZSx7fSksYj1YdChtKSxUPXYucGF0aChiLHgpO2c9aS5pbnNlcnQoKCk9PlQsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey11LzJ9LCAke3MvMn0pYCkseSYmZy5hdHRyKCJzdHlsZSIseSl9ZWxzZSBnPU1hKGksdSxzLG0pO3JldHVybiBuJiZnLmF0dHIoInN0eWxlIixuKSxLZShlLGcpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHYpe3JldHVybiBYZS5wb2x5Z29uKGUsbSx2KX0saX12YXIgSlE9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO0h0KCk7enQoKTtXdCgpO0l1KCk7RnQoKTtvKFpRLCJjYXJkIil9KTtmdW5jdGlvbiBlWih0LGUpe2xldHtub2RlU3R5bGVzOnJ9PVllKGUpO2UubGFiZWw9IiI7bGV0IG49dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsaHQoZSkpLmF0dHIoImlkIixlLmRvbUlkPz9lLmlkKSx7Y3NzU3R5bGVzOml9PWUsYT1NYXRoLm1heCgyOCxlLndpZHRoPz8wKSxzPVt7eDowLHk6YS8yfSx7eDphLzIseTowfSx7eDowLHk6LWEvMn0se3g6LWEvMix5OjB9XSxsPWplLnN2ZyhuKSx1PVFlKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYodS5yb3VnaG5lc3M9MCx1LmZpbGxTdHlsZT0ic29saWQiKTtsZXQgaD1YdChzKSxmPWwucGF0aChoLHUpLGQ9bi5pbnNlcnQoKCk9PmYsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBpJiZlLmxvb2shPT0iaGFuZERyYXduIiYmZC5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsaSksciYmZS5sb29rIT09ImhhbmREcmF3biImJmQuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLHIpLGUud2lkdGg9MjgsZS5oZWlnaHQ9MjgsZS5pbnRlcnNlY3Q9ZnVuY3Rpb24ocCl7cmV0dXJuIFhlLnBvbHlnb24oZSxzLHApfSxufXZhciB0Wj1OKCgpPT57InVzZSBzdHJpY3QiO0h0KCk7V3QoKTt6dCgpO0Z0KCk7byhlWiwiY2hvaWNlIil9KTthc3luYyBmdW5jdGlvbiByWih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WWUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphLGhhbGZQYWRkaW5nOnN9PWF3YWl0IG10KHQsZSxodChlKSksbD1hLndpZHRoLzIrcyx1LHtjc3NTdHlsZXM6aH09ZTtpZihlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0IGY9amUuc3ZnKGkpLGQ9UWUoZSx7fSkscD1mLmNpcmNsZSgwLDAsbCoyLGQpO3U9aS5pbnNlcnQoKCk9PnAsIjpmaXJzdC1jaGlsZCIpLHUuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKS5hdHRyKCJzdHlsZSIsem4oaCkpfWVsc2UgdT1pLmluc2VydCgiY2lyY2xlIiwiOmZpcnN0LWNoaWxkIikuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKS5hdHRyKCJzdHlsZSIsbikuYXR0cigiciIsbCkuYXR0cigiY3giLDApLmF0dHIoImN5IiwwKTtyZXR1cm4gS2UoZSx1KSxlLmludGVyc2VjdD1mdW5jdGlvbihmKXtyZXR1cm4gWC5pbmZvKCJDaXJjbGUgaW50ZXJzZWN0IixlLGwsZiksWGUuY2lyY2xlKGUsbCxmKX0saX12YXIgblo9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt5dCgpO0Z0KCk7SHQoKTt6dCgpO1d0KCk7ZXIoKTtvKHJaLCJjaXJjbGUiKX0pO2Z1bmN0aW9uIE9EZSh0KXtsZXQgZT1NYXRoLmNvcyhNYXRoLlBJLzQpLHI9TWF0aC5zaW4oTWF0aC5QSS80KSxuPXQqMixpPXt4Om4vMiplLHk6bi8yKnJ9LGE9e3g6LShuLzIpKmUseTpuLzIqcn0scz17eDotKG4vMikqZSx5Oi0obi8yKSpyfSxsPXt4Om4vMiplLHk6LShuLzIpKnJ9O3JldHVybmBNICR7YS54fSwke2EueX0gTCAke2wueH0sJHtsLnl9CiAgICAgICAgICAgICAgICAgICBNICR7aS54fSwke2kueX0gTCAke3MueH0sJHtzLnl9YH1mdW5jdGlvbiBpWih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WWUoZSk7ZS5sYWJlbFN0eWxlPXIsZS5sYWJlbD0iIjtsZXQgaT10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIixodChlKSkuYXR0cigiaWQiLGUuZG9tSWQ/P2UuaWQpLGE9TWF0aC5tYXgoMzAsZT8ud2lkdGg/PzApLHtjc3NTdHlsZXM6c309ZSxsPWplLnN2ZyhpKSx1PVFlKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYodS5yb3VnaG5lc3M9MCx1LmZpbGxTdHlsZT0ic29saWQiKTtsZXQgaD1sLmNpcmNsZSgwLDAsYSoyLHUpLGY9T0RlKGEpLGQ9bC5wYXRoKGYsdSkscD1pLmluc2VydCgoKT0+aCwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIHAuaW5zZXJ0KCgpPT5kKSxzJiZlLmxvb2shPT0iaGFuZERyYXduIiYmcC5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIscyksbiYmZS5sb29rIT09ImhhbmREcmF3biImJnAuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLG4pLEtlKGUscCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24obSl7cmV0dXJuIFguaW5mbygiY3Jvc3NlZENpcmNsZSBpbnRlcnNlY3QiLGUse3JhZGl1czphLHBvaW50Om19KSxYZS5jaXJjbGUoZSxhLG0pfSxpfXZhciBhWj1OKCgpPT57InVzZSBzdHJpY3QiO3l0KCk7RnQoKTt6dCgpO1d0KCk7SHQoKTtvKE9EZSwiY3JlYXRlTGluZSIpO28oaVosImNyb3NzZWRDaXJjbGUiKX0pO2Z1bmN0aW9uIEtoKHQsZSxyLG49MTAwLGk9MCxhPTE4MCl7bGV0IHM9W10sbD1pKk1hdGguUEkvMTgwLGY9KGEqTWF0aC5QSS8xODAtbCkvKG4tMSk7Zm9yKGxldCBkPTA7ZDxuO2QrKyl7bGV0IHA9bCtkKmYsbT10K3IqTWF0aC5jb3MocCksZz1lK3IqTWF0aC5zaW4ocCk7cy5wdXNoKHt4Oi1tLHk6LWd9KX1yZXR1cm4gc31hc3luYyBmdW5jdGlvbiBzWih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WWUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphLGxhYmVsOnN9PWF3YWl0IG10KHQsZSxodChlKSksbD1hLndpZHRoKyhlLnBhZGRpbmc/PzApLHU9YS5oZWlnaHQrKGUucGFkZGluZz8/MCksaD1NYXRoLm1heCg1LHUqLjEpLHtjc3NTdHlsZXM6Zn09ZSxkPVsuLi5LaChsLzIsLXUvMixoLDMwLC05MCwwKSx7eDotbC8yLWgseTpofSwuLi5LaChsLzIraCoyLC1oLGgsMjAsLTE4MCwtMjcwKSwuLi5LaChsLzIraCoyLGgsaCwyMCwtOTAsLTE4MCkse3g6LWwvMi1oLHk6LXUvMn0sLi4uS2gobC8yLHUvMixoLDIwLDAsOTApXSxwPVt7eDpsLzIseTotdS8yLWh9LHt4Oi1sLzIseTotdS8yLWh9LC4uLktoKGwvMiwtdS8yLGgsMjAsLTkwLDApLHt4Oi1sLzItaCx5Oi1ofSwuLi5LaChsLzIrbCouMSwtaCxoLDIwLC0xODAsLTI3MCksLi4uS2gobC8yK2wqLjEsaCxoLDIwLC05MCwtMTgwKSx7eDotbC8yLWgseTp1LzJ9LC4uLktoKGwvMix1LzIsaCwyMCwwLDkwKSx7eDotbC8yLHk6dS8yK2h9LHt4OmwvMix5OnUvMitofV0sbT1qZS5zdmcoaSksZz1RZShlLHtmaWxsOiJub25lIn0pO2UubG9vayE9PSJoYW5kRHJhd24iJiYoZy5yb3VnaG5lc3M9MCxnLmZpbGxTdHlsZT0ic29saWQiKTtsZXQgdj1YdChkKS5yZXBsYWNlKCJaIiwiIikseD1tLnBhdGgodixnKSxiPVh0KHApLFQ9bS5wYXRoKGIsey4uLmd9KSxTPWkuaW5zZXJ0KCJnIiwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIFMuaW5zZXJ0KCgpPT5ULCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsMCksUy5pbnNlcnQoKCk9PngsIjpmaXJzdC1jaGlsZCIpLFMuYXR0cigiY2xhc3MiLCJ0ZXh0IiksZiYmZS5sb29rIT09ImhhbmREcmF3biImJlMuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLGYpLG4mJmUubG9vayE9PSJoYW5kRHJhd24iJiZTLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixuKSxTLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke2h9LCAwKWApLHMuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LWwvMitoLShhLngtKGEubGVmdD8/MCkpfSwkey11LzIrKGUucGFkZGluZz8/MCkvMi0oYS55LShhLnRvcD8/MCkpfSlgKSxLZShlLFMpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHcpe3JldHVybiBYZS5wb2x5Z29uKGUscCx3KX0saX12YXIgb1o9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO0h0KCk7enQoKTtXdCgpO28oS2gsImdlbmVyYXRlQ2lyY2xlUG9pbnRzIik7byhzWiwiY3VybHlCcmFjZUxlZnQiKX0pO2Z1bmN0aW9uIFFoKHQsZSxyLG49MTAwLGk9MCxhPTE4MCl7bGV0IHM9W10sbD1pKk1hdGguUEkvMTgwLGY9KGEqTWF0aC5QSS8xODAtbCkvKG4tMSk7Zm9yKGxldCBkPTA7ZDxuO2QrKyl7bGV0IHA9bCtkKmYsbT10K3IqTWF0aC5jb3MocCksZz1lK3IqTWF0aC5zaW4ocCk7cy5wdXNoKHt4Om0seTpnfSl9cmV0dXJuIHN9YXN5bmMgZnVuY3Rpb24gbFoodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVllKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YSxsYWJlbDpzfT1hd2FpdCBtdCh0LGUsaHQoZSkpLGw9YS53aWR0aCsoZS5wYWRkaW5nPz8wKSx1PWEuaGVpZ2h0KyhlLnBhZGRpbmc/PzApLGg9TWF0aC5tYXgoNSx1Ki4xKSx7Y3NzU3R5bGVzOmZ9PWUsZD1bLi4uUWgobC8yLC11LzIsaCwyMCwtOTAsMCkse3g6bC8yK2gseTotaH0sLi4uUWgobC8yK2gqMiwtaCxoLDIwLC0xODAsLTI3MCksLi4uUWgobC8yK2gqMixoLGgsMjAsLTkwLC0xODApLHt4OmwvMitoLHk6dS8yfSwuLi5RaChsLzIsdS8yLGgsMjAsMCw5MCldLHA9W3t4Oi1sLzIseTotdS8yLWh9LHt4OmwvMix5Oi11LzItaH0sLi4uUWgobC8yLC11LzIsaCwyMCwtOTAsMCkse3g6bC8yK2gseTotaH0sLi4uUWgobC8yK2gqMiwtaCxoLDIwLC0xODAsLTI3MCksLi4uUWgobC8yK2gqMixoLGgsMjAsLTkwLC0xODApLHt4OmwvMitoLHk6dS8yfSwuLi5RaChsLzIsdS8yLGgsMjAsMCw5MCkse3g6bC8yLHk6dS8yK2h9LHt4Oi1sLzIseTp1LzIraH1dLG09amUuc3ZnKGkpLGc9UWUoZSx7ZmlsbDoibm9uZSJ9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKGcucm91Z2huZXNzPTAsZy5maWxsU3R5bGU9InNvbGlkIik7bGV0IHY9WHQoZCkucmVwbGFjZSgiWiIsIiIpLHg9bS5wYXRoKHYsZyksYj1YdChwKSxUPW0ucGF0aChiLHsuLi5nfSksUz1pLmluc2VydCgiZyIsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBTLmluc2VydCgoKT0+VCwiOmZpcnN0LWNoaWxkIikuYXR0cigic3Ryb2tlLW9wYWNpdHkiLDApLFMuaW5zZXJ0KCgpPT54LCI6Zmlyc3QtY2hpbGQiKSxTLmF0dHIoImNsYXNzIiwidGV4dCIpLGYmJmUubG9vayE9PSJoYW5kRHJhd24iJiZTLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixmKSxuJiZlLmxvb2shPT0iaGFuZERyYXduIiYmUy5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsbiksUy5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstaH0sIDApYCkscy5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstbC8yKyhlLnBhZGRpbmc/PzApLzItKGEueC0oYS5sZWZ0Pz8wKSl9LCR7LXUvMisoZS5wYWRkaW5nPz8wKS8yLShhLnktKGEudG9wPz8wKSl9KWApLEtlKGUsUyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odyl7cmV0dXJuIFhlLnBvbHlnb24oZSxwLHcpfSxpfXZhciBjWj1OKCgpPT57InVzZSBzdHJpY3QiO0Z0KCk7SHQoKTt6dCgpO1d0KCk7byhRaCwiZ2VuZXJhdGVDaXJjbGVQb2ludHMiKTtvKGxaLCJjdXJseUJyYWNlUmlnaHQiKX0pO2Z1bmN0aW9uIElhKHQsZSxyLG49MTAwLGk9MCxhPTE4MCl7bGV0IHM9W10sbD1pKk1hdGguUEkvMTgwLGY9KGEqTWF0aC5QSS8xODAtbCkvKG4tMSk7Zm9yKGxldCBkPTA7ZDxuO2QrKyl7bGV0IHA9bCtkKmYsbT10K3IqTWF0aC5jb3MocCksZz1lK3IqTWF0aC5zaW4ocCk7cy5wdXNoKHt4Oi1tLHk6LWd9KX1yZXR1cm4gc31hc3luYyBmdW5jdGlvbiB1Wih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WWUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphLGxhYmVsOnN9PWF3YWl0IG10KHQsZSxodChlKSksbD1hLndpZHRoKyhlLnBhZGRpbmc/PzApLHU9YS5oZWlnaHQrKGUucGFkZGluZz8/MCksaD1NYXRoLm1heCg1LHUqLjEpLHtjc3NTdHlsZXM6Zn09ZSxkPVsuLi5JYShsLzIsLXUvMixoLDMwLC05MCwwKSx7eDotbC8yLWgseTpofSwuLi5JYShsLzIraCoyLC1oLGgsMjAsLTE4MCwtMjcwKSwuLi5JYShsLzIraCoyLGgsaCwyMCwtOTAsLTE4MCkse3g6LWwvMi1oLHk6LXUvMn0sLi4uSWEobC8yLHUvMixoLDIwLDAsOTApXSxwPVsuLi5JYSgtbC8yK2graC8yLC11LzIsaCwyMCwtOTAsLTE4MCkse3g6bC8yLWgvMix5Omh9LC4uLklhKC1sLzItaC8yLC1oLGgsMjAsMCw5MCksLi4uSWEoLWwvMi1oLzIsaCxoLDIwLC05MCwwKSx7eDpsLzItaC8yLHk6LWh9LC4uLklhKC1sLzIraCtoLzIsdS8yLGgsMzAsLTE4MCwtMjcwKV0sbT1be3g6bC8yLHk6LXUvMi1ofSx7eDotbC8yLHk6LXUvMi1ofSwuLi5JYShsLzIsLXUvMixoLDIwLC05MCwwKSx7eDotbC8yLWgseTotaH0sLi4uSWEobC8yK2gqMiwtaCxoLDIwLC0xODAsLTI3MCksLi4uSWEobC8yK2gqMixoLGgsMjAsLTkwLC0xODApLHt4Oi1sLzItaCx5OnUvMn0sLi4uSWEobC8yLHUvMixoLDIwLDAsOTApLHt4Oi1sLzIseTp1LzIraH0se3g6bC8yLWgtaC8yLHk6dS8yK2h9LC4uLklhKC1sLzIraCtoLzIsLXUvMixoLDIwLC05MCwtMTgwKSx7eDpsLzItaC8yLHk6aH0sLi4uSWEoLWwvMi1oLzIsLWgsaCwyMCwwLDkwKSwuLi5JYSgtbC8yLWgvMixoLGgsMjAsLTkwLDApLHt4OmwvMi1oLzIseTotaH0sLi4uSWEoLWwvMitoK2gvMix1LzIsaCwzMCwtMTgwLC0yNzApXSxnPWplLnN2ZyhpKSx5PVFlKGUse2ZpbGw6Im5vbmUifSk7ZS5sb29rIT09ImhhbmREcmF3biImJih5LnJvdWdobmVzcz0wLHkuZmlsbFN0eWxlPSJzb2xpZCIpO2xldCB4PVh0KGQpLnJlcGxhY2UoIloiLCIiKSxiPWcucGF0aCh4LHkpLFM9WHQocCkucmVwbGFjZSgiWiIsIiIpLHc9Zy5wYXRoKFMseSksRT1YdChtKSxfPWcucGF0aChFLHsuLi55fSksQz1pLmluc2VydCgiZyIsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBDLmluc2VydCgoKT0+XywiOmZpcnN0LWNoaWxkIikuYXR0cigic3Ryb2tlLW9wYWNpdHkiLDApLEMuaW5zZXJ0KCgpPT5iLCI6Zmlyc3QtY2hpbGQiKSxDLmluc2VydCgoKT0+dywiOmZpcnN0LWNoaWxkIiksQy5hdHRyKCJjbGFzcyIsInRleHQiKSxmJiZlLmxvb2shPT0iaGFuZERyYXduIiYmQy5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsZiksbiYmZS5sb29rIT09ImhhbmREcmF3biImJkMuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLG4pLEMuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7aC1oLzR9LCAwKWApLHMuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LWwvMisoZS5wYWRkaW5nPz8wKS8yLShhLngtKGEubGVmdD8/MCkpfSwkey11LzIrKGUucGFkZGluZz8/MCkvMi0oYS55LShhLnRvcD8/MCkpfSlgKSxLZShlLEMpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKEQpe3JldHVybiBYZS5wb2x5Z29uKGUsbSxEKX0saX12YXIgaFo9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO0h0KCk7enQoKTtXdCgpO28oSWEsImdlbmVyYXRlQ2lyY2xlUG9pbnRzIik7byh1WiwiY3VybHlCcmFjZXMiKX0pO2FzeW5jIGZ1bmN0aW9uIGZaKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1ZZShlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmF9PWF3YWl0IG10KHQsZSxodChlKSkscz04MCxsPTIwLHU9TWF0aC5tYXgocywoYS53aWR0aCsoZS5wYWRkaW5nPz8wKSoyKSoxLjI1LGU/LndpZHRoPz8wKSxoPU1hdGgubWF4KGwsYS5oZWlnaHQrKGUucGFkZGluZz8/MCkqMixlPy5oZWlnaHQ/PzApLGY9aC8yLHtjc3NTdHlsZXM6ZH09ZSxwPWplLnN2ZyhpKSxtPVFlKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYobS5yb3VnaG5lc3M9MCxtLmZpbGxTdHlsZT0ic29saWQiKTtsZXQgZz11LHk9aCx2PWctZix4PXkvNCxiPVt7eDp2LHk6MH0se3gseTowfSx7eDowLHk6eS8yfSx7eCx5fSx7eDp2LHl9LC4uLldUKC12LC15LzIsZiw1MCwyNzAsOTApXSxUPVh0KGIpLFM9cC5wYXRoKFQsbSksdz1pLmluc2VydCgoKT0+UywiOmZpcnN0LWNoaWxkIik7cmV0dXJuIHcuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKSxkJiZlLmxvb2shPT0iaGFuZERyYXduIiYmdy5zZWxlY3RDaGlsZHJlbigicGF0aCIpLmF0dHIoInN0eWxlIixkKSxuJiZlLmxvb2shPT0iaGFuZERyYXduIiYmdy5zZWxlY3RDaGlsZHJlbigicGF0aCIpLmF0dHIoInN0eWxlIixuKSx3LmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey11LzJ9LCAkey1oLzJ9KWApLEtlKGUsdyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oRSl7cmV0dXJuIFhlLnBvbHlnb24oZSxiLEUpfSxpfXZhciBkWj1OKCgpPT57InVzZSBzdHJpY3QiO0Z0KCk7SHQoKTt6dCgpO1d0KCk7byhmWiwiY3VydmVkVHJhcGV6b2lkIil9KTthc3luYyBmdW5jdGlvbiBwWih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WWUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphLGxhYmVsOnN9PWF3YWl0IG10KHQsZSxodChlKSksbD1NYXRoLm1heChhLndpZHRoK2UucGFkZGluZyxlLndpZHRoPz8wKSx1PWwvMixoPXUvKDIuNStsLzUwKSxmPU1hdGgubWF4KGEuaGVpZ2h0K2grZS5wYWRkaW5nLGUuaGVpZ2h0Pz8wKSxkLHtjc3NTdHlsZXM6cH09ZTtpZihlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0IG09amUuc3ZnKGkpLGc9QkRlKDAsMCxsLGYsdSxoKSx5PUZEZSgwLGgsbCxmLHUsaCksdj1tLnBhdGgoZyxRZShlLHt9KSkseD1tLnBhdGgoeSxRZShlLHtmaWxsOiJub25lIn0pKTtkPWkuaW5zZXJ0KCgpPT54LCI6Zmlyc3QtY2hpbGQiKSxkPWkuaW5zZXJ0KCgpPT52LCI6Zmlyc3QtY2hpbGQiKSxkLmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIikscCYmZC5hdHRyKCJzdHlsZSIscCl9ZWxzZXtsZXQgbT1QRGUoMCwwLGwsZix1LGgpO2Q9aS5pbnNlcnQoInBhdGgiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJkIixtKS5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInN0eWxlIix6bihwKSkuYXR0cigic3R5bGUiLG4pfXJldHVybiBkLmF0dHIoImxhYmVsLW9mZnNldC15IixoKSxkLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1sLzJ9LCAkey0oZi8yK2gpfSlgKSxLZShlLGQpLHMuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LShhLndpZHRoLzIpLShhLngtKGEubGVmdD8/MCkpfSwgJHstKGEuaGVpZ2h0LzIpKyhlLnBhZGRpbmc/PzApLzEuNS0oYS55LShhLnRvcD8/MCkpfSlgKSxlLmludGVyc2VjdD1mdW5jdGlvbihtKXtsZXQgZz1YZS5yZWN0KGUsbSkseT1nLngtKGUueD8/MCk7aWYodSE9MCYmKE1hdGguYWJzKHkpPChlLndpZHRoPz8wKS8yfHxNYXRoLmFicyh5KT09KGUud2lkdGg/PzApLzImJk1hdGguYWJzKGcueS0oZS55Pz8wKSk+KGUuaGVpZ2h0Pz8wKS8yLWgpKXtsZXQgdj1oKmgqKDEteSp5Lyh1KnUpKTt2PjAmJih2PU1hdGguc3FydCh2KSksdj1oLXYsbS55LShlLnk/PzApPjAmJih2PS12KSxnLnkrPXZ9cmV0dXJuIGd9LGl9dmFyIFBEZSxCRGUsRkRlLG1aPU4oKCk9PnsidXNlIHN0cmljdCI7RnQoKTtIdCgpO3p0KCk7V3QoKTtlcigpO1BEZT1vKCh0LGUscixuLGksYSk9PltgTSR7dH0sJHtlK2F9YCxgYSR7aX0sJHthfSAwLDAsMCAke3J9LDBgLGBhJHtpfSwke2F9IDAsMCwwICR7LXJ9LDBgLGBsMCwke259YCxgYSR7aX0sJHthfSAwLDAsMCAke3J9LDBgLGBsMCwkey1ufWBdLmpvaW4oIiAiKSwiY3JlYXRlQ3lsaW5kZXJQYXRoRCIpLEJEZT1vKCh0LGUscixuLGksYSk9PltgTSR7dH0sJHtlK2F9YCxgTSR7dCtyfSwke2UrYX1gLGBhJHtpfSwke2F9IDAsMCwwICR7LXJ9LDBgLGBsMCwke259YCxgYSR7aX0sJHthfSAwLDAsMCAke3J9LDBgLGBsMCwkey1ufWBdLmpvaW4oIiAiKSwiY3JlYXRlT3V0ZXJDeWxpbmRlclBhdGhEIiksRkRlPW8oKHQsZSxyLG4saSxhKT0+W2BNJHt0LXIvMn0sJHstbi8yfWAsYGEke2l9LCR7YX0gMCwwLDAgJHtyfSwwYF0uam9pbigiICIpLCJjcmVhdGVJbm5lckN5bGluZGVyUGF0aEQiKTtvKHBaLCJjeWxpbmRlciIpfSk7YXN5bmMgZnVuY3Rpb24gZ1oodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVllKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YSxsYWJlbDpzfT1hd2FpdCBtdCh0LGUsaHQoZSkpLGw9YS53aWR0aCtlLnBhZGRpbmcsdT1hLmhlaWdodCtlLnBhZGRpbmcsaD11Ki4yLGY9LWwvMixkPS11LzItaC8yLHtjc3NTdHlsZXM6cH09ZSxtPWplLnN2ZyhpKSxnPVFlKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYoZy5yb3VnaG5lc3M9MCxnLmZpbGxTdHlsZT0ic29saWQiKTtsZXQgeT1be3g6Zix5OmQraH0se3g6LWYseTpkK2h9LHt4Oi1mLHk6LWR9LHt4OmYseTotZH0se3g6Zix5OmR9LHt4Oi1mLHk6ZH0se3g6LWYseTpkK2h9XSx2PW0ucG9seWdvbih5Lm1hcChiPT5bYi54LGIueV0pLGcpLHg9aS5pbnNlcnQoKCk9PnYsIjpmaXJzdC1jaGlsZCIpO3JldHVybiB4LmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIikscCYmZS5sb29rIT09ImhhbmREcmF3biImJnguc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLHApLG4mJmUubG9vayE9PSJoYW5kRHJhd24iJiZ4LnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixuKSxzLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke2YrKGUucGFkZGluZz8/MCkvMi0oYS54LShhLmxlZnQ/PzApKX0sICR7ZCtoKyhlLnBhZGRpbmc/PzApLzItKGEueS0oYS50b3A/PzApKX0pYCksS2UoZSx4KSxlLmludGVyc2VjdD1mdW5jdGlvbihiKXtyZXR1cm4gWGUucmVjdChlLGIpfSxpfXZhciB5Wj1OKCgpPT57InVzZSBzdHJpY3QiO0Z0KCk7SHQoKTt6dCgpO1d0KCk7byhnWiwiZGl2aWRlZFJlY3RhbmdsZSIpfSk7YXN5bmMgZnVuY3Rpb24gdloodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVllKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YSxoYWxmUGFkZGluZzpzfT1hd2FpdCBtdCh0LGUsaHQoZSkpLHU9YS53aWR0aC8yK3MrNSxoPWEud2lkdGgvMitzLGYse2Nzc1N0eWxlczpkfT1lO2lmKGUubG9vaz09PSJoYW5kRHJhd24iKXtsZXQgcD1qZS5zdmcoaSksbT1RZShlLHtyb3VnaG5lc3M6LjIsc3Ryb2tlV2lkdGg6Mi41fSksZz1RZShlLHtyb3VnaG5lc3M6LjIsc3Ryb2tlV2lkdGg6MS41fSkseT1wLmNpcmNsZSgwLDAsdSoyLG0pLHY9cC5jaXJjbGUoMCwwLGgqMixnKTtmPWkuaW5zZXJ0KCJnIiwiOmZpcnN0LWNoaWxkIiksZi5hdHRyKCJjbGFzcyIsem4oZS5jc3NDbGFzc2VzKSkuYXR0cigic3R5bGUiLHpuKGQpKSxmLm5vZGUoKT8uYXBwZW5kQ2hpbGQoeSksZi5ub2RlKCk/LmFwcGVuZENoaWxkKHYpfWVsc2V7Zj1pLmluc2VydCgiZyIsIjpmaXJzdC1jaGlsZCIpO2xldCBwPWYuaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKSxtPWYuaW5zZXJ0KCJjaXJjbGUiKTtmLmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIikuYXR0cigic3R5bGUiLG4pLHAuYXR0cigiY2xhc3MiLCJvdXRlci1jaXJjbGUiKS5hdHRyKCJzdHlsZSIsbikuYXR0cigiciIsdSkuYXR0cigiY3giLDApLmF0dHIoImN5IiwwKSxtLmF0dHIoImNsYXNzIiwiaW5uZXItY2lyY2xlIikuYXR0cigic3R5bGUiLG4pLmF0dHIoInIiLGgpLmF0dHIoImN4IiwwKS5hdHRyKCJjeSIsMCl9cmV0dXJuIEtlKGUsZiksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24ocCl7cmV0dXJuIFguaW5mbygiRG91YmxlQ2lyY2xlIGludGVyc2VjdCIsZSx1LHApLFhlLmNpcmNsZShlLHUscCl9LGl9dmFyIHhaPU4oKCk9PnsidXNlIHN0cmljdCI7eXQoKTtGdCgpO0h0KCk7enQoKTtXdCgpO2VyKCk7byh2WiwiZG91YmxlY2lyY2xlIil9KTtmdW5jdGlvbiBiWih0LGUse2NvbmZpZzp7dGhlbWVWYXJpYWJsZXM6cn19KXtsZXR7bGFiZWxTdHlsZXM6bixub2RlU3R5bGVzOml9PVllKGUpO2UubGFiZWw9IiIsZS5sYWJlbFN0eWxlPW47bGV0IGE9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsaHQoZSkpLmF0dHIoImlkIixlLmRvbUlkPz9lLmlkKSxzPTcse2Nzc1N0eWxlczpsfT1lLHU9amUuc3ZnKGEpLHtub2RlQm9yZGVyOmh9PXIsZj1RZShlLHtmaWxsU3R5bGU6InNvbGlkIn0pO2UubG9vayE9PSJoYW5kRHJhd24iJiYoZi5yb3VnaG5lc3M9MCk7bGV0IGQ9dS5jaXJjbGUoMCwwLHMqMixmKSxwPWEuaW5zZXJ0KCgpPT5kLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gcC5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsYGZpbGw6ICR7aH0gIWltcG9ydGFudDtgKSxsJiZsLmxlbmd0aD4wJiZlLmxvb2shPT0iaGFuZERyYXduIiYmcC5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsbCksaSYmZS5sb29rIT09ImhhbmREcmF3biImJnAuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLGkpLEtlKGUscCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24obSl7cmV0dXJuIFguaW5mbygiZmlsbGVkQ2lyY2xlIGludGVyc2VjdCIsZSx7cmFkaXVzOnMscG9pbnQ6bX0pLFhlLmNpcmNsZShlLHMsbSl9LGF9dmFyIFRaPU4oKCk9PnsidXNlIHN0cmljdCI7V3QoKTt5dCgpO0h0KCk7enQoKTtGdCgpO28oYlosImZpbGxlZENpcmNsZSIpfSk7YXN5bmMgZnVuY3Rpb24gd1oodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVllKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YSxsYWJlbDpzfT1hd2FpdCBtdCh0LGUsaHQoZSkpLGw9YS53aWR0aCsoZS5wYWRkaW5nPz8wKSx1PWwrYS5oZWlnaHQsaD1sK2EuaGVpZ2h0LGY9W3t4OjAseTotdX0se3g6aCx5Oi11fSx7eDpoLzIseTowfV0se2Nzc1N0eWxlczpkfT1lLHA9amUuc3ZnKGkpLG09UWUoZSx7fSk7ZS5sb29rIT09ImhhbmREcmF3biImJihtLnJvdWdobmVzcz0wLG0uZmlsbFN0eWxlPSJzb2xpZCIpO2xldCBnPVh0KGYpLHk9cC5wYXRoKGcsbSksdj1pLmluc2VydCgoKT0+eSwiOmZpcnN0LWNoaWxkIikuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LXUvMn0sICR7dS8yfSlgKTtyZXR1cm4gZCYmZS5sb29rIT09ImhhbmREcmF3biImJnYuc2VsZWN0Q2hpbGRyZW4oInBhdGgiKS5hdHRyKCJzdHlsZSIsZCksbiYmZS5sb29rIT09ImhhbmREcmF3biImJnYuc2VsZWN0Q2hpbGRyZW4oInBhdGgiKS5hdHRyKCJzdHlsZSIsbiksZS53aWR0aD1sLGUuaGVpZ2h0PXUsS2UoZSx2KSxzLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1hLndpZHRoLzItKGEueC0oYS5sZWZ0Pz8wKSl9LCAkey11LzIrKGUucGFkZGluZz8/MCkvMisoYS55LShhLnRvcD8/MCkpfSlgKSxlLmludGVyc2VjdD1mdW5jdGlvbih4KXtyZXR1cm4gWC5pbmZvKCJUcmlhbmdsZSBpbnRlcnNlY3QiLGUsZix4KSxYZS5wb2x5Z29uKGUsZix4KX0saX12YXIga1o9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt5dCgpO0Z0KCk7SHQoKTt6dCgpO1d0KCk7RnQoKTtvKHdaLCJmbGlwcGVkVHJpYW5nbGUiKX0pO2Z1bmN0aW9uIEVaKHQsZSx7ZGlyOnIsY29uZmlnOntzdGF0ZTpuLHRoZW1lVmFyaWFibGVzOml9fSl7bGV0e25vZGVTdHlsZXM6YX09WWUoZSk7ZS5sYWJlbD0iIjtsZXQgcz10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIixodChlKSkuYXR0cigiaWQiLGUuZG9tSWQ/P2UuaWQpLHtjc3NTdHlsZXM6bH09ZSx1PU1hdGgubWF4KDcwLGU/LndpZHRoPz8wKSxoPU1hdGgubWF4KDEwLGU/LmhlaWdodD8/MCk7cj09PSJMUiImJih1PU1hdGgubWF4KDEwLGU/LndpZHRoPz8wKSxoPU1hdGgubWF4KDcwLGU/LmhlaWdodD8/MCkpO2xldCBmPS0xKnUvMixkPS0xKmgvMixwPWplLnN2ZyhzKSxtPVFlKGUse3N0cm9rZTppLmxpbmVDb2xvcixmaWxsOmkubGluZUNvbG9yfSk7ZS5sb29rIT09ImhhbmREcmF3biImJihtLnJvdWdobmVzcz0wLG0uZmlsbFN0eWxlPSJzb2xpZCIpO2xldCBnPXAucmVjdGFuZ2xlKGYsZCx1LGgsbSkseT1zLmluc2VydCgoKT0+ZywiOmZpcnN0LWNoaWxkIik7bCYmZS5sb29rIT09ImhhbmREcmF3biImJnkuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLGwpLGEmJmUubG9vayE9PSJoYW5kRHJhd24iJiZ5LnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixhKSxLZShlLHkpO2xldCB2PW4/LnBhZGRpbmc/PzA7cmV0dXJuIGUud2lkdGgmJmUuaGVpZ2h0JiYoZS53aWR0aCs9di8yfHwwLGUuaGVpZ2h0Kz12LzJ8fDApLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHgpe3JldHVybiBYZS5yZWN0KGUseCl9LHN9dmFyIFNaPU4oKCk9PnsidXNlIHN0cmljdCI7V3QoKTtIdCgpO3p0KCk7RnQoKTtvKEVaLCJmb3JrSm9pbiIpfSk7YXN5bmMgZnVuY3Rpb24gQ1oodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVllKGUpO2UubGFiZWxTdHlsZT1yO2xldCBpPTgwLGE9NTAse3NoYXBlU3ZnOnMsYmJveDpsfT1hd2FpdCBtdCh0LGUsaHQoZSkpLHU9TWF0aC5tYXgoaSxsLndpZHRoKyhlLnBhZGRpbmc/PzApKjIsZT8ud2lkdGg/PzApLGg9TWF0aC5tYXgoYSxsLmhlaWdodCsoZS5wYWRkaW5nPz8wKSoyLGU/LmhlaWdodD8/MCksZj1oLzIse2Nzc1N0eWxlczpkfT1lLHA9amUuc3ZnKHMpLG09UWUoZSx7fSk7ZS5sb29rIT09ImhhbmREcmF3biImJihtLnJvdWdobmVzcz0wLG0uZmlsbFN0eWxlPSJzb2xpZCIpO2xldCBnPVt7eDotdS8yLHk6LWgvMn0se3g6dS8yLWYseTotaC8yfSwuLi5XVCgtdS8yK2YsMCxmLDUwLDkwLDI3MCkse3g6dS8yLWYseTpoLzJ9LHt4Oi11LzIseTpoLzJ9XSx5PVh0KGcpLHY9cC5wYXRoKHksbSkseD1zLmluc2VydCgoKT0+diwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIHguYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKSxkJiZlLmxvb2shPT0iaGFuZERyYXduIiYmeC5zZWxlY3RDaGlsZHJlbigicGF0aCIpLmF0dHIoInN0eWxlIixkKSxuJiZlLmxvb2shPT0iaGFuZERyYXduIiYmeC5zZWxlY3RDaGlsZHJlbigicGF0aCIpLmF0dHIoInN0eWxlIixuKSxLZShlLHgpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGIpe3JldHVybiBYLmluZm8oIlBpbGwgaW50ZXJzZWN0IixlLHtyYWRpdXM6Zixwb2ludDpifSksWGUucG9seWdvbihlLGcsYil9LHN9dmFyIEFaPU4oKCk9PnsidXNlIHN0cmljdCI7eXQoKTtGdCgpO0h0KCk7enQoKTtXdCgpO28oQ1osImhhbGZSb3VuZGVkUmVjdGFuZ2xlIil9KTthc3luYyBmdW5jdGlvbiBfWih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WWUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphfT1hd2FpdCBtdCh0LGUsaHQoZSkpLHM9NCxsPWEuaGVpZ2h0K2UucGFkZGluZyx1PWwvcyxoPWEud2lkdGgrMip1K2UucGFkZGluZyxmPVt7eDp1LHk6MH0se3g6aC11LHk6MH0se3g6aCx5Oi1sLzJ9LHt4OmgtdSx5Oi1sfSx7eDp1LHk6LWx9LHt4OjAseTotbC8yfV0sZCx7Y3NzU3R5bGVzOnB9PWU7aWYoZS5sb29rPT09ImhhbmREcmF3biIpe2xldCBtPWplLnN2ZyhpKSxnPVFlKGUse30pLHk9JERlKDAsMCxoLGwsdSksdj1tLnBhdGgoeSxnKTtkPWkuaW5zZXJ0KCgpPT52LCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstaC8yfSwgJHtsLzJ9KWApLHAmJmQuYXR0cigic3R5bGUiLHApfWVsc2UgZD1NYShpLGgsbCxmKTtyZXR1cm4gbiYmZC5hdHRyKCJzdHlsZSIsbiksZS53aWR0aD1oLGUuaGVpZ2h0PWwsS2UoZSxkKSxlLmludGVyc2VjdD1mdW5jdGlvbihtKXtyZXR1cm4gWGUucG9seWdvbihlLGYsbSl9LGl9dmFyICREZSxEWj1OKCgpPT57InVzZSBzdHJpY3QiO0Z0KCk7SHQoKTt6dCgpO1d0KCk7SXUoKTskRGU9bygodCxlLHIsbixpKT0+W2BNJHt0K2l9LCR7ZX1gLGBMJHt0K3ItaX0sJHtlfWAsYEwke3Qrcn0sJHtlLW4vMn1gLGBMJHt0K3ItaX0sJHtlLW59YCxgTCR7dCtpfSwke2Utbn1gLGBMJHt0fSwke2Utbi8yfWAsIloiXS5qb2luKCIgIiksImNyZWF0ZUhleGFnb25QYXRoRCIpO28oX1osImhleGFnb24iKX0pO2FzeW5jIGZ1bmN0aW9uIExaKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1ZZShlKTtlLmxhYmVsPSIiLGUubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppfT1hd2FpdCBtdCh0LGUsaHQoZSkpLGE9TWF0aC5tYXgoMzAsZT8ud2lkdGg/PzApLHM9TWF0aC5tYXgoMzAsZT8uaGVpZ2h0Pz8wKSx7Y3NzU3R5bGVzOmx9PWUsdT1qZS5zdmcoaSksaD1RZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKGgucm91Z2huZXNzPTAsaC5maWxsU3R5bGU9InNvbGlkIik7bGV0IGY9W3t4OjAseTowfSx7eDphLHk6MH0se3g6MCx5OnN9LHt4OmEseTpzfV0sZD1YdChmKSxwPXUucGF0aChkLGgpLG09aS5pbnNlcnQoKCk9PnAsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBtLmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIiksbCYmZS5sb29rIT09ImhhbmREcmF3biImJm0uc2VsZWN0Q2hpbGRyZW4oInBhdGgiKS5hdHRyKCJzdHlsZSIsbCksbiYmZS5sb29rIT09ImhhbmREcmF3biImJm0uc2VsZWN0Q2hpbGRyZW4oInBhdGgiKS5hdHRyKCJzdHlsZSIsbiksbS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstYS8yfSwgJHstcy8yfSlgKSxLZShlLG0pLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGcpe3JldHVybiBYLmluZm8oIlBpbGwgaW50ZXJzZWN0IixlLHtwb2ludHM6Zn0pLFhlLnBvbHlnb24oZSxmLGcpfSxpfXZhciBSWj1OKCgpPT57InVzZSBzdHJpY3QiO3l0KCk7RnQoKTtIdCgpO3p0KCk7V3QoKTtvKExaLCJob3VyZ2xhc3MiKX0pO2FzeW5jIGZ1bmN0aW9uIE5aKHQsZSx7Y29uZmlnOnt0aGVtZVZhcmlhYmxlczpyLGZsb3djaGFydDpufX0pe2xldHtsYWJlbFN0eWxlczppfT1ZZShlKTtlLmxhYmVsU3R5bGU9aTtsZXQgYT1lLmFzc2V0SGVpZ2h0Pz80OCxzPWUuYXNzZXRXaWR0aD8/NDgsbD1NYXRoLm1heChhLHMpLHU9bj8ud3JhcHBpbmdXaWR0aDtlLndpZHRoPU1hdGgubWF4KGwsdT8/MCk7bGV0e3NoYXBlU3ZnOmgsYmJveDpmLGxhYmVsOmR9PWF3YWl0IG10KHQsZSwiaWNvbi1zaGFwZSBkZWZhdWx0IikscD1lLnBvcz09PSJ0IixtPWwsZz1sLHtub2RlQm9yZGVyOnl9PXIse3N0eWxlc01hcDp2fT1iYyhlKSx4PS1nLzIsYj0tbS8yLFQ9ZS5sYWJlbD84OjAsUz1qZS5zdmcoaCksdz1RZShlLHtzdHJva2U6Im5vbmUiLGZpbGw6Im5vbmUifSk7ZS5sb29rIT09ImhhbmREcmF3biImJih3LnJvdWdobmVzcz0wLHcuZmlsbFN0eWxlPSJzb2xpZCIpO2xldCBFPVMucmVjdGFuZ2xlKHgsYixnLG0sdyksXz1NYXRoLm1heChnLGYud2lkdGgpLEM9bStmLmhlaWdodCtULEQ9Uy5yZWN0YW5nbGUoLV8vMiwtQy8yLF8sQyx7Li4udyxmaWxsOiJ0cmFuc3BhcmVudCIsc3Ryb2tlOiJub25lIn0pLE89aC5pbnNlcnQoKCk9PkUsIjpmaXJzdC1jaGlsZCIpLFI9aC5pbnNlcnQoKCk9PkQpO2lmKGUuaWNvbil7bGV0IGs9aC5hcHBlbmQoImciKTtrLmh0bWwoYDxnPiR7YXdhaXQgRXMoZS5pY29uLHtoZWlnaHQ6bCx3aWR0aDpsLGZhbGxiYWNrUHJlZml4OiIifSl9PC9nPmApO2xldCBMPWsubm9kZSgpLmdldEJCb3goKSxBPUwud2lkdGgsST1MLmhlaWdodCxNPUwueCxQPUwueTtrLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1BLzItTX0sJHtwP2YuaGVpZ2h0LzIrVC8yLUkvMi1QOi1mLmhlaWdodC8yLVQvMi1JLzItUH0pYCksay5hdHRyKCJzdHlsZSIsYGNvbG9yOiAke3YuZ2V0KCJzdHJva2UiKT8/eX07YCl9cmV0dXJuIGQuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LWYud2lkdGgvMi0oZi54LShmLmxlZnQ/PzApKX0sJHtwPy1DLzI6Qy8yLWYuaGVpZ2h0fSlgKSxPLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgwLCR7cD9mLmhlaWdodC8yK1QvMjotZi5oZWlnaHQvMi1ULzJ9KWApLEtlKGUsUiksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oayl7aWYoWC5pbmZvKCJpY29uU3F1YXJlIGludGVyc2VjdCIsZSxrKSwhZS5sYWJlbClyZXR1cm4gWGUucmVjdChlLGspO2xldCBMPWUueD8/MCxBPWUueT8/MCxJPWUuaGVpZ2h0Pz8wLE09W107cmV0dXJuIHA/TT1be3g6TC1mLndpZHRoLzIseTpBLUkvMn0se3g6TCtmLndpZHRoLzIseTpBLUkvMn0se3g6TCtmLndpZHRoLzIseTpBLUkvMitmLmhlaWdodCtUfSx7eDpMK2cvMix5OkEtSS8yK2YuaGVpZ2h0K1R9LHt4OkwrZy8yLHk6QStJLzJ9LHt4OkwtZy8yLHk6QStJLzJ9LHt4OkwtZy8yLHk6QS1JLzIrZi5oZWlnaHQrVH0se3g6TC1mLndpZHRoLzIseTpBLUkvMitmLmhlaWdodCtUfV06TT1be3g6TC1nLzIseTpBLUkvMn0se3g6TCtnLzIseTpBLUkvMn0se3g6TCtnLzIseTpBLUkvMittfSx7eDpMK2Yud2lkdGgvMix5OkEtSS8yK219LHt4OkwrZi53aWR0aC8yLzIseTpBK0kvMn0se3g6TC1mLndpZHRoLzIseTpBK0kvMn0se3g6TC1mLndpZHRoLzIseTpBLUkvMittfSx7eDpMLWcvMix5OkEtSS8yK219XSxYZS5wb2x5Z29uKGUsTSxrKX0saH12YXIgTVo9TigoKT0+eyJ1c2Ugc3RyaWN0IjtXdCgpO3l0KCk7amwoKTtIdCgpO3p0KCk7RnQoKTtvKE5aLCJpY29uIil9KTthc3luYyBmdW5jdGlvbiBJWih0LGUse2NvbmZpZzp7dGhlbWVWYXJpYWJsZXM6cixmbG93Y2hhcnQ6bn19KXtsZXR7bGFiZWxTdHlsZXM6aX09WWUoZSk7ZS5sYWJlbFN0eWxlPWk7bGV0IGE9ZS5hc3NldEhlaWdodD8/NDgscz1lLmFzc2V0V2lkdGg/PzQ4LGw9TWF0aC5tYXgoYSxzKSx1PW4/LndyYXBwaW5nV2lkdGg7ZS53aWR0aD1NYXRoLm1heChsLHU/PzApO2xldHtzaGFwZVN2ZzpoLGJib3g6ZixsYWJlbDpkfT1hd2FpdCBtdCh0LGUsImljb24tc2hhcGUgZGVmYXVsdCIpLHA9MjAsbT1lLmxhYmVsPzg6MCxnPWUucG9zPT09InQiLHtub2RlQm9yZGVyOnksbWFpbkJrZzp2fT1yLHtzdHlsZXNNYXA6eH09YmMoZSksYj1qZS5zdmcoaCksVD1RZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKFQucm91Z2huZXNzPTAsVC5maWxsU3R5bGU9InNvbGlkIik7bGV0IFM9eC5nZXQoImZpbGwiKTtULnN0cm9rZT1TPz92O2xldCB3PWguYXBwZW5kKCJnIik7ZS5pY29uJiZ3Lmh0bWwoYDxnPiR7YXdhaXQgRXMoZS5pY29uLHtoZWlnaHQ6bCx3aWR0aDpsLGZhbGxiYWNrUHJlZml4OiIifSl9PC9nPmApO2xldCBFPXcubm9kZSgpLmdldEJCb3goKSxfPUUud2lkdGgsQz1FLmhlaWdodCxEPUUueCxPPUUueSxSPU1hdGgubWF4KF8sQykqTWF0aC5TUVJUMitwKjIsaz1iLmNpcmNsZSgwLDAsUixUKSxMPU1hdGgubWF4KFIsZi53aWR0aCksQT1SK2YuaGVpZ2h0K20sST1iLnJlY3RhbmdsZSgtTC8yLC1BLzIsTCxBLHsuLi5ULGZpbGw6InRyYW5zcGFyZW50IixzdHJva2U6Im5vbmUifSksTT1oLmluc2VydCgoKT0+aywiOmZpcnN0LWNoaWxkIiksUD1oLmluc2VydCgoKT0+SSk7cmV0dXJuIHcuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LV8vMi1EfSwke2c/Zi5oZWlnaHQvMittLzItQy8yLU86LWYuaGVpZ2h0LzItbS8yLUMvMi1PfSlgKSx3LmF0dHIoInN0eWxlIixgY29sb3I6ICR7eC5nZXQoInN0cm9rZSIpPz95fTtgKSxkLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1mLndpZHRoLzItKGYueC0oZi5sZWZ0Pz8wKSl9LCR7Zz8tQS8yOkEvMi1mLmhlaWdodH0pYCksTS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoMCwke2c/Zi5oZWlnaHQvMittLzI6LWYuaGVpZ2h0LzItbS8yfSlgKSxLZShlLFApLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKEIpe3JldHVybiBYLmluZm8oImljb25TcXVhcmUgaW50ZXJzZWN0IixlLEIpLFhlLnJlY3QoZSxCKX0saH12YXIgT1o9TigoKT0+eyJ1c2Ugc3RyaWN0IjtXdCgpO3l0KCk7amwoKTtIdCgpO3p0KCk7RnQoKTtvKElaLCJpY29uQ2lyY2xlIil9KTt2YXIgT2EsWmg9TigoKT0+eyJ1c2Ugc3RyaWN0IjtPYT1vKCh0LGUscixuLGkpPT5bIk0iLHQraSxlLCJIIix0K3ItaSwiQSIsaSxpLDAsMCwxLHQrcixlK2ksIlYiLGUrbi1pLCJBIixpLGksMCwwLDEsdCtyLWksZStuLCJIIix0K2ksIkEiLGksaSwwLDAsMSx0LGUrbi1pLCJWIixlK2ksIkEiLGksaSwwLDAsMSx0K2ksZSwiWiJdLmpvaW4oIiAiKSwiY3JlYXRlUm91bmRlZFJlY3RQYXRoRCIpfSk7YXN5bmMgZnVuY3Rpb24gUFoodCxlLHtjb25maWc6e3RoZW1lVmFyaWFibGVzOnIsZmxvd2NoYXJ0Om59fSl7bGV0e2xhYmVsU3R5bGVzOml9PVllKGUpO2UubGFiZWxTdHlsZT1pO2xldCBhPWUuYXNzZXRIZWlnaHQ/PzQ4LHM9ZS5hc3NldFdpZHRoPz80OCxsPU1hdGgubWF4KGEscyksdT1uPy53cmFwcGluZ1dpZHRoO2Uud2lkdGg9TWF0aC5tYXgobCx1Pz8wKTtsZXR7c2hhcGVTdmc6aCxiYm94OmYsaGFsZlBhZGRpbmc6ZCxsYWJlbDpwfT1hd2FpdCBtdCh0LGUsImljb24tc2hhcGUgZGVmYXVsdCIpLG09ZS5wb3M9PT0idCIsZz1sK2QqMix5PWwrZCoyLHtub2RlQm9yZGVyOnYsbWFpbkJrZzp4fT1yLHtzdHlsZXNNYXA6Yn09YmMoZSksVD0teS8yLFM9LWcvMix3PWUubGFiZWw/ODowLEU9amUuc3ZnKGgpLF89UWUoZSx7fSk7ZS5sb29rIT09ImhhbmREcmF3biImJihfLnJvdWdobmVzcz0wLF8uZmlsbFN0eWxlPSJzb2xpZCIpO2xldCBDPWIuZ2V0KCJmaWxsIik7Xy5zdHJva2U9Qz8/eDtsZXQgRD1FLnBhdGgoT2EoVCxTLHksZyw1KSxfKSxPPU1hdGgubWF4KHksZi53aWR0aCksUj1nK2YuaGVpZ2h0K3csaz1FLnJlY3RhbmdsZSgtTy8yLC1SLzIsTyxSLHsuLi5fLGZpbGw6InRyYW5zcGFyZW50IixzdHJva2U6Im5vbmUifSksTD1oLmluc2VydCgoKT0+RCwiOmZpcnN0LWNoaWxkIikuYXR0cigiY2xhc3MiLCJpY29uLXNoYXBlMiIpLEE9aC5pbnNlcnQoKCk9PmspO2lmKGUuaWNvbil7bGV0IEk9aC5hcHBlbmQoImciKTtJLmh0bWwoYDxnPiR7YXdhaXQgRXMoZS5pY29uLHtoZWlnaHQ6bCx3aWR0aDpsLGZhbGxiYWNrUHJlZml4OiIifSl9PC9nPmApO2xldCBNPUkubm9kZSgpLmdldEJCb3goKSxQPU0ud2lkdGgsQj1NLmhlaWdodCxGPU0ueCx6PU0ueTtJLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1QLzItRn0sJHttP2YuaGVpZ2h0LzIrdy8yLUIvMi16Oi1mLmhlaWdodC8yLXcvMi1CLzIten0pYCksSS5hdHRyKCJzdHlsZSIsYGNvbG9yOiAke2IuZ2V0KCJzdHJva2UiKT8/dn07YCl9cmV0dXJuIHAuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LWYud2lkdGgvMi0oZi54LShmLmxlZnQ/PzApKX0sJHttPy1SLzI6Ui8yLWYuaGVpZ2h0fSlgKSxMLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgwLCR7bT9mLmhlaWdodC8yK3cvMjotZi5oZWlnaHQvMi13LzJ9KWApLEtlKGUsQSksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oSSl7aWYoWC5pbmZvKCJpY29uU3F1YXJlIGludGVyc2VjdCIsZSxJKSwhZS5sYWJlbClyZXR1cm4gWGUucmVjdChlLEkpO2xldCBNPWUueD8/MCxQPWUueT8/MCxCPWUuaGVpZ2h0Pz8wLEY9W107cmV0dXJuIG0/Rj1be3g6TS1mLndpZHRoLzIseTpQLUIvMn0se3g6TStmLndpZHRoLzIseTpQLUIvMn0se3g6TStmLndpZHRoLzIseTpQLUIvMitmLmhlaWdodCt3fSx7eDpNK3kvMix5OlAtQi8yK2YuaGVpZ2h0K3d9LHt4Ok0reS8yLHk6UCtCLzJ9LHt4Ok0teS8yLHk6UCtCLzJ9LHt4Ok0teS8yLHk6UC1CLzIrZi5oZWlnaHQrd30se3g6TS1mLndpZHRoLzIseTpQLUIvMitmLmhlaWdodCt3fV06Rj1be3g6TS15LzIseTpQLUIvMn0se3g6TSt5LzIseTpQLUIvMn0se3g6TSt5LzIseTpQLUIvMitnfSx7eDpNK2Yud2lkdGgvMix5OlAtQi8yK2d9LHt4Ok0rZi53aWR0aC8yLzIseTpQK0IvMn0se3g6TS1mLndpZHRoLzIseTpQK0IvMn0se3g6TS1mLndpZHRoLzIseTpQLUIvMitnfSx7eDpNLXkvMix5OlAtQi8yK2d9XSxYZS5wb2x5Z29uKGUsRixJKX0saH12YXIgQlo9TigoKT0+eyJ1c2Ugc3RyaWN0IjtXdCgpO3l0KCk7amwoKTtIdCgpO3p0KCk7WmgoKTtGdCgpO28oUFosImljb25Sb3VuZGVkIil9KTthc3luYyBmdW5jdGlvbiBGWih0LGUse2NvbmZpZzp7dGhlbWVWYXJpYWJsZXM6cixmbG93Y2hhcnQ6bn19KXtsZXR7bGFiZWxTdHlsZXM6aX09WWUoZSk7ZS5sYWJlbFN0eWxlPWk7bGV0IGE9ZS5hc3NldEhlaWdodD8/NDgscz1lLmFzc2V0V2lkdGg/PzQ4LGw9TWF0aC5tYXgoYSxzKSx1PW4/LndyYXBwaW5nV2lkdGg7ZS53aWR0aD1NYXRoLm1heChsLHU/PzApO2xldHtzaGFwZVN2ZzpoLGJib3g6ZixoYWxmUGFkZGluZzpkLGxhYmVsOnB9PWF3YWl0IG10KHQsZSwiaWNvbi1zaGFwZSBkZWZhdWx0IiksbT1lLnBvcz09PSJ0IixnPWwrZCoyLHk9bCtkKjIse25vZGVCb3JkZXI6dixtYWluQmtnOnh9PXIse3N0eWxlc01hcDpifT1iYyhlKSxUPS15LzIsUz0tZy8yLHc9ZS5sYWJlbD84OjAsRT1qZS5zdmcoaCksXz1RZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKF8ucm91Z2huZXNzPTAsXy5maWxsU3R5bGU9InNvbGlkIik7bGV0IEM9Yi5nZXQoImZpbGwiKTtfLnN0cm9rZT1DPz94O2xldCBEPUUucGF0aChPYShULFMseSxnLC4xKSxfKSxPPU1hdGgubWF4KHksZi53aWR0aCksUj1nK2YuaGVpZ2h0K3csaz1FLnJlY3RhbmdsZSgtTy8yLC1SLzIsTyxSLHsuLi5fLGZpbGw6InRyYW5zcGFyZW50IixzdHJva2U6Im5vbmUifSksTD1oLmluc2VydCgoKT0+RCwiOmZpcnN0LWNoaWxkIiksQT1oLmluc2VydCgoKT0+ayk7aWYoZS5pY29uKXtsZXQgST1oLmFwcGVuZCgiZyIpO0kuaHRtbChgPGc+JHthd2FpdCBFcyhlLmljb24se2hlaWdodDpsLHdpZHRoOmwsZmFsbGJhY2tQcmVmaXg6IiJ9KX08L2c+YCk7bGV0IE09SS5ub2RlKCkuZ2V0QkJveCgpLFA9TS53aWR0aCxCPU0uaGVpZ2h0LEY9TS54LHo9TS55O0kuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LVAvMi1GfSwke20/Zi5oZWlnaHQvMit3LzItQi8yLXo6LWYuaGVpZ2h0LzItdy8yLUIvMi16fSlgKSxJLmF0dHIoInN0eWxlIixgY29sb3I6ICR7Yi5nZXQoInN0cm9rZSIpPz92fTtgKX1yZXR1cm4gcC5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstZi53aWR0aC8yLShmLngtKGYubGVmdD8/MCkpfSwke20/LVIvMjpSLzItZi5oZWlnaHR9KWApLEwuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKDAsJHttP2YuaGVpZ2h0LzIrdy8yOi1mLmhlaWdodC8yLXcvMn0pYCksS2UoZSxBKSxlLmludGVyc2VjdD1mdW5jdGlvbihJKXtpZihYLmluZm8oImljb25TcXVhcmUgaW50ZXJzZWN0IixlLEkpLCFlLmxhYmVsKXJldHVybiBYZS5yZWN0KGUsSSk7bGV0IE09ZS54Pz8wLFA9ZS55Pz8wLEI9ZS5oZWlnaHQ/PzAsRj1bXTtyZXR1cm4gbT9GPVt7eDpNLWYud2lkdGgvMix5OlAtQi8yfSx7eDpNK2Yud2lkdGgvMix5OlAtQi8yfSx7eDpNK2Yud2lkdGgvMix5OlAtQi8yK2YuaGVpZ2h0K3d9LHt4Ok0reS8yLHk6UC1CLzIrZi5oZWlnaHQrd30se3g6TSt5LzIseTpQK0IvMn0se3g6TS15LzIseTpQK0IvMn0se3g6TS15LzIseTpQLUIvMitmLmhlaWdodCt3fSx7eDpNLWYud2lkdGgvMix5OlAtQi8yK2YuaGVpZ2h0K3d9XTpGPVt7eDpNLXkvMix5OlAtQi8yfSx7eDpNK3kvMix5OlAtQi8yfSx7eDpNK3kvMix5OlAtQi8yK2d9LHt4Ok0rZi53aWR0aC8yLHk6UC1CLzIrZ30se3g6TStmLndpZHRoLzIvMix5OlArQi8yfSx7eDpNLWYud2lkdGgvMix5OlArQi8yfSx7eDpNLWYud2lkdGgvMix5OlAtQi8yK2d9LHt4Ok0teS8yLHk6UC1CLzIrZ31dLFhlLnBvbHlnb24oZSxGLEkpfSxofXZhciAkWj1OKCgpPT57InVzZSBzdHJpY3QiO1d0KCk7eXQoKTtqbCgpO0h0KCk7WmgoKTt6dCgpO0Z0KCk7byhGWiwiaWNvblNxdWFyZSIpfSk7YXN5bmMgZnVuY3Rpb24geloodCxlLHtjb25maWc6e2Zsb3djaGFydDpyfX0pe2xldCBuPW5ldyBJbWFnZTtuLnNyYz1lPy5pbWc/PyIiLGF3YWl0IG4uZGVjb2RlKCk7bGV0IGk9TnVtYmVyKG4ubmF0dXJhbFdpZHRoLnRvU3RyaW5nKCkucmVwbGFjZSgicHgiLCIiKSksYT1OdW1iZXIobi5uYXR1cmFsSGVpZ2h0LnRvU3RyaW5nKCkucmVwbGFjZSgicHgiLCIiKSk7ZS5pbWFnZUFzcGVjdFJhdGlvPWkvYTtsZXR7bGFiZWxTdHlsZXM6c309WWUoZSk7ZS5sYWJlbFN0eWxlPXM7bGV0IGw9cj8ud3JhcHBpbmdXaWR0aDtlLmRlZmF1bHRXaWR0aD1yPy53cmFwcGluZ1dpZHRoO2xldCB1PU1hdGgubWF4KGUubGFiZWw/bD8/MDowLGU/LmFzc2V0V2lkdGg/P2kpLGg9ZS5jb25zdHJhaW50PT09Im9uIiYmZT8uYXNzZXRIZWlnaHQ/ZS5hc3NldEhlaWdodCplLmltYWdlQXNwZWN0UmF0aW86dSxmPWUuY29uc3RyYWludD09PSJvbiI/aC9lLmltYWdlQXNwZWN0UmF0aW86ZT8uYXNzZXRIZWlnaHQ/P2E7ZS53aWR0aD1NYXRoLm1heChoLGw/PzApO2xldHtzaGFwZVN2ZzpkLGJib3g6cCxsYWJlbDptfT1hd2FpdCBtdCh0LGUsImltYWdlLXNoYXBlIGRlZmF1bHQiKSxnPWUucG9zPT09InQiLHk9LWgvMix2PS1mLzIseD1lLmxhYmVsPzg6MCxiPWplLnN2ZyhkKSxUPVFlKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYoVC5yb3VnaG5lc3M9MCxULmZpbGxTdHlsZT0ic29saWQiKTtsZXQgUz1iLnJlY3RhbmdsZSh5LHYsaCxmLFQpLHc9TWF0aC5tYXgoaCxwLndpZHRoKSxFPWYrcC5oZWlnaHQreCxfPWIucmVjdGFuZ2xlKC13LzIsLUUvMix3LEUsey4uLlQsZmlsbDoibm9uZSIsc3Ryb2tlOiJub25lIn0pLEM9ZC5pbnNlcnQoKCk9PlMsIjpmaXJzdC1jaGlsZCIpLEQ9ZC5pbnNlcnQoKCk9Pl8pO2lmKGUuaW1nKXtsZXQgTz1kLmFwcGVuZCgiaW1hZ2UiKTtPLmF0dHIoImhyZWYiLGUuaW1nKSxPLmF0dHIoIndpZHRoIixoKSxPLmF0dHIoImhlaWdodCIsZiksTy5hdHRyKCJwcmVzZXJ2ZUFzcGVjdFJhdGlvIiwibm9uZSIpLE8uYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LWgvMn0sJHtnP0UvMi1mOi1FLzJ9KWApfXJldHVybiBtLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1wLndpZHRoLzItKHAueC0ocC5sZWZ0Pz8wKSl9LCR7Zz8tZi8yLXAuaGVpZ2h0LzIteC8yOmYvMi1wLmhlaWdodC8yK3gvMn0pYCksQy5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoMCwke2c/cC5oZWlnaHQvMit4LzI6LXAuaGVpZ2h0LzIteC8yfSlgKSxLZShlLEQpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKE8pe2lmKFguaW5mbygiaWNvblNxdWFyZSBpbnRlcnNlY3QiLGUsTyksIWUubGFiZWwpcmV0dXJuIFhlLnJlY3QoZSxPKTtsZXQgUj1lLng/PzAsaz1lLnk/PzAsTD1lLmhlaWdodD8/MCxBPVtdO3JldHVybiBnP0E9W3t4OlItcC53aWR0aC8yLHk6ay1MLzJ9LHt4OlIrcC53aWR0aC8yLHk6ay1MLzJ9LHt4OlIrcC53aWR0aC8yLHk6ay1MLzIrcC5oZWlnaHQreH0se3g6UitoLzIseTprLUwvMitwLmhlaWdodCt4fSx7eDpSK2gvMix5OmsrTC8yfSx7eDpSLWgvMix5OmsrTC8yfSx7eDpSLWgvMix5OmstTC8yK3AuaGVpZ2h0K3h9LHt4OlItcC53aWR0aC8yLHk6ay1MLzIrcC5oZWlnaHQreH1dOkE9W3t4OlItaC8yLHk6ay1MLzJ9LHt4OlIraC8yLHk6ay1MLzJ9LHt4OlIraC8yLHk6ay1MLzIrZn0se3g6UitwLndpZHRoLzIseTprLUwvMitmfSx7eDpSK3Aud2lkdGgvMi8yLHk6aytMLzJ9LHt4OlItcC53aWR0aC8yLHk6aytMLzJ9LHt4OlItcC53aWR0aC8yLHk6ay1MLzIrZn0se3g6Ui1oLzIseTprLUwvMitmfV0sWGUucG9seWdvbihlLEEsTyl9LGR9dmFyIEdaPU4oKCk9PnsidXNlIHN0cmljdCI7V3QoKTt5dCgpO0h0KCk7enQoKTtGdCgpO28oelosImltYWdlU3F1YXJlIil9KTthc3luYyBmdW5jdGlvbiBWWih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WWUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphfT1hd2FpdCBtdCh0LGUsaHQoZSkpLHM9TWF0aC5tYXgoYS53aWR0aCsoZS5wYWRkaW5nPz8wKSoyLGU/LndpZHRoPz8wKSxsPU1hdGgubWF4KGEuaGVpZ2h0KyhlLnBhZGRpbmc/PzApKjIsZT8uaGVpZ2h0Pz8wKSx1PVt7eDowLHk6MH0se3g6cyx5OjB9LHt4OnMrMypsLzYseTotbH0se3g6LTMqbC82LHk6LWx9XSxoLHtjc3NTdHlsZXM6Zn09ZTtpZihlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0IGQ9amUuc3ZnKGkpLHA9UWUoZSx7fSksbT1YdCh1KSxnPWQucGF0aChtLHApO2g9aS5pbnNlcnQoKCk9PmcsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1zLzJ9LCAke2wvMn0pYCksZiYmaC5hdHRyKCJzdHlsZSIsZil9ZWxzZSBoPU1hKGkscyxsLHUpO3JldHVybiBuJiZoLmF0dHIoInN0eWxlIixuKSxlLndpZHRoPXMsZS5oZWlnaHQ9bCxLZShlLGgpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGQpe3JldHVybiBYZS5wb2x5Z29uKGUsdSxkKX0saX12YXIgVVo9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO0h0KCk7enQoKTtXdCgpO0l1KCk7byhWWiwiaW52X3RyYXBlem9pZCIpfSk7YXN5bmMgZnVuY3Rpb24gT3UodCxlLHIpe2xldHtsYWJlbFN0eWxlczpuLG5vZGVTdHlsZXM6aX09WWUoZSk7ZS5sYWJlbFN0eWxlPW47bGV0e3NoYXBlU3ZnOmEsYmJveDpzfT1hd2FpdCBtdCh0LGUsaHQoZSkpLGw9TWF0aC5tYXgocy53aWR0aCtyLmxhYmVsUGFkZGluZ1gqMixlPy53aWR0aHx8MCksdT1NYXRoLm1heChzLmhlaWdodCtyLmxhYmVsUGFkZGluZ1kqMixlPy5oZWlnaHR8fDApLGg9LWwvMixmPS11LzIsZCx7cng6cCxyeTptfT1lLHtjc3NTdHlsZXM6Z309ZTtpZihyPy5yeCYmci5yeSYmKHA9ci5yeCxtPXIucnkpLGUubG9vaz09PSJoYW5kRHJhd24iKXtsZXQgeT1qZS5zdmcoYSksdj1RZShlLHt9KSx4PXB8fG0/eS5wYXRoKE9hKGgsZixsLHUscHx8MCksdik6eS5yZWN0YW5nbGUoaCxmLGwsdSx2KTtkPWEuaW5zZXJ0KCgpPT54LCI6Zmlyc3QtY2hpbGQiKSxkLmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIikuYXR0cigic3R5bGUiLHpuKGcpKX1lbHNlIGQ9YS5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxkLmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIikuYXR0cigic3R5bGUiLGkpLmF0dHIoInJ4Iix6bihwKSkuYXR0cigicnkiLHpuKG0pKS5hdHRyKCJ4IixoKS5hdHRyKCJ5IixmKS5hdHRyKCJ3aWR0aCIsbCkuYXR0cigiaGVpZ2h0Iix1KTtyZXR1cm4gS2UoZSxkKSxlLmludGVyc2VjdD1mdW5jdGlvbih5KXtyZXR1cm4gWGUucmVjdChlLHkpfSxhfXZhciBFbT1OKCgpPT57InVzZSBzdHJpY3QiO0Z0KCk7SHQoKTtaaCgpO3p0KCk7V3QoKTtlcigpO28oT3UsImRyYXdSZWN0Iil9KTthc3luYyBmdW5jdGlvbiBIWih0LGUpe2xldHtzaGFwZVN2ZzpyLGJib3g6bixsYWJlbDppfT1hd2FpdCBtdCh0LGUsImxhYmVsIiksYT1yLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBhLmF0dHIoIndpZHRoIiwuMSkuYXR0cigiaGVpZ2h0IiwuMSksci5hdHRyKCJjbGFzcyIsImxhYmVsIGVkZ2VMYWJlbCIpLGkuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LShuLndpZHRoLzIpLShuLngtKG4ubGVmdD8/MCkpfSwgJHstKG4uaGVpZ2h0LzIpLShuLnktKG4udG9wPz8wKSl9KWApLEtlKGUsYSksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odSl7cmV0dXJuIFhlLnJlY3QoZSx1KX0scn12YXIgV1o9TigoKT0+eyJ1c2Ugc3RyaWN0IjtFbSgpO0Z0KCk7SHQoKTtvKEhaLCJsYWJlbFJlY3QiKX0pO2FzeW5jIGZ1bmN0aW9uIHFaKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1ZZShlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmF9PWF3YWl0IG10KHQsZSxodChlKSkscz1NYXRoLm1heChhLndpZHRoKyhlLnBhZGRpbmc/PzApLGU/LndpZHRoPz8wKSxsPU1hdGgubWF4KGEuaGVpZ2h0KyhlLnBhZGRpbmc/PzApLGU/LmhlaWdodD8/MCksdT1be3g6MCx5OjB9LHt4OnMrMypsLzYseTowfSx7eDpzLHk6LWx9LHt4Oi0oMypsKS82LHk6LWx9XSxoLHtjc3NTdHlsZXM6Zn09ZTtpZihlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0IGQ9amUuc3ZnKGkpLHA9UWUoZSx7fSksbT1YdCh1KSxnPWQucGF0aChtLHApO2g9aS5pbnNlcnQoKCk9PmcsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1zLzJ9LCAke2wvMn0pYCksZiYmaC5hdHRyKCJzdHlsZSIsZil9ZWxzZSBoPU1hKGkscyxsLHUpO3JldHVybiBuJiZoLmF0dHIoInN0eWxlIixuKSxlLndpZHRoPXMsZS5oZWlnaHQ9bCxLZShlLGgpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGQpe3JldHVybiBYZS5wb2x5Z29uKGUsdSxkKX0saX12YXIgWVo9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO0h0KCk7enQoKTtXdCgpO0l1KCk7byhxWiwibGVhbl9sZWZ0Iil9KTthc3luYyBmdW5jdGlvbiBYWih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WWUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphfT1hd2FpdCBtdCh0LGUsaHQoZSkpLHM9TWF0aC5tYXgoYS53aWR0aCsoZS5wYWRkaW5nPz8wKSxlPy53aWR0aD8/MCksbD1NYXRoLm1heChhLmhlaWdodCsoZS5wYWRkaW5nPz8wKSxlPy5oZWlnaHQ/PzApLHU9W3t4Oi0zKmwvNix5OjB9LHt4OnMseTowfSx7eDpzKzMqbC82LHk6LWx9LHt4OjAseTotbH1dLGgse2Nzc1N0eWxlczpmfT1lO2lmKGUubG9vaz09PSJoYW5kRHJhd24iKXtsZXQgZD1qZS5zdmcoaSkscD1RZShlLHt9KSxtPVh0KHUpLGc9ZC5wYXRoKG0scCk7aD1pLmluc2VydCgoKT0+ZywiOmZpcnN0LWNoaWxkIikuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LXMvMn0sICR7bC8yfSlgKSxmJiZoLmF0dHIoInN0eWxlIixmKX1lbHNlIGg9TWEoaSxzLGwsdSk7cmV0dXJuIG4mJmguYXR0cigic3R5bGUiLG4pLGUud2lkdGg9cyxlLmhlaWdodD1sLEtlKGUsaCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oZCl7cmV0dXJuIFhlLnBvbHlnb24oZSx1LGQpfSxpfXZhciBqWj1OKCgpPT57InVzZSBzdHJpY3QiO0Z0KCk7SHQoKTt6dCgpO1d0KCk7SXUoKTtvKFhaLCJsZWFuX3JpZ2h0Iil9KTtmdW5jdGlvbiBLWih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WWUoZSk7ZS5sYWJlbD0iIixlLmxhYmVsU3R5bGU9cjtsZXQgaT10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIixodChlKSkuYXR0cigiaWQiLGUuZG9tSWQ/P2UuaWQpLHtjc3NTdHlsZXM6YX09ZSxzPU1hdGgubWF4KDM1LGU/LndpZHRoPz8wKSxsPU1hdGgubWF4KDM1LGU/LmhlaWdodD8/MCksdT03LGg9W3t4OnMseTowfSx7eDowLHk6bCt1LzJ9LHt4OnMtMip1LHk6bCt1LzJ9LHt4OjAseToyKmx9LHt4OnMseTpsLXUvMn0se3g6Mip1LHk6bC11LzJ9XSxmPWplLnN2ZyhpKSxkPVFlKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYoZC5yb3VnaG5lc3M9MCxkLmZpbGxTdHlsZT0ic29saWQiKTtsZXQgcD1YdChoKSxtPWYucGF0aChwLGQpLGc9aS5pbnNlcnQoKCk9Pm0sIjpmaXJzdC1jaGlsZCIpO3JldHVybiBhJiZlLmxvb2shPT0iaGFuZERyYXduIiYmZy5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsYSksbiYmZS5sb29rIT09ImhhbmREcmF3biImJmcuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLG4pLGcuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKC0ke3MvMn0sJHstbH0pYCksS2UoZSxnKSxlLmludGVyc2VjdD1mdW5jdGlvbih5KXtyZXR1cm4gWC5pbmZvKCJsaWdodG5pbmdCb2x0IGludGVyc2VjdCIsZSx5KSxYZS5wb2x5Z29uKGUsaCx5KX0saX12YXIgUVo9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt5dCgpO0Z0KCk7enQoKTtXdCgpO0h0KCk7RnQoKTtvKEtaLCJsaWdodG5pbmdCb2x0Iil9KTthc3luYyBmdW5jdGlvbiBaWih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WWUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphLGxhYmVsOnN9PWF3YWl0IG10KHQsZSxodChlKSksbD1NYXRoLm1heChhLndpZHRoKyhlLnBhZGRpbmc/PzApLGUud2lkdGg/PzApLHU9bC8yLGg9dS8oMi41K2wvNTApLGY9TWF0aC5tYXgoYS5oZWlnaHQraCsoZS5wYWRkaW5nPz8wKSxlLmhlaWdodD8/MCksZD1mKi4xLHAse2Nzc1N0eWxlczptfT1lO2lmKGUubG9vaz09PSJoYW5kRHJhd24iKXtsZXQgZz1qZS5zdmcoaSkseT1HRGUoMCwwLGwsZix1LGgsZCksdj1WRGUoMCxoLGwsZix1LGgpLHg9UWUoZSx7fSksYj1nLnBhdGgoeSx4KSxUPWcucGF0aCh2LHgpO2kuaW5zZXJ0KCgpPT5ULCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJjbGFzcyIsImxpbmUiKSxwPWkuaW5zZXJ0KCgpPT5iLCI6Zmlyc3QtY2hpbGQiKSxwLmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIiksbSYmcC5hdHRyKCJzdHlsZSIsbSl9ZWxzZXtsZXQgZz16RGUoMCwwLGwsZix1LGgsZCk7cD1pLmluc2VydCgicGF0aCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoImQiLGcpLmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIikuYXR0cigic3R5bGUiLHpuKG0pKS5hdHRyKCJzdHlsZSIsbil9cmV0dXJuIHAuYXR0cigibGFiZWwtb2Zmc2V0LXkiLGgpLHAuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LWwvMn0sICR7LShmLzIraCl9KWApLEtlKGUscCkscy5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstKGEud2lkdGgvMiktKGEueC0oYS5sZWZ0Pz8wKSl9LCAkey0oYS5oZWlnaHQvMikraC0oYS55LShhLnRvcD8/MCkpfSlgKSxlLmludGVyc2VjdD1mdW5jdGlvbihnKXtsZXQgeT1YZS5yZWN0KGUsZyksdj15LngtKGUueD8/MCk7aWYodSE9MCYmKE1hdGguYWJzKHYpPChlLndpZHRoPz8wKS8yfHxNYXRoLmFicyh2KT09KGUud2lkdGg/PzApLzImJk1hdGguYWJzKHkueS0oZS55Pz8wKSk+KGUuaGVpZ2h0Pz8wKS8yLWgpKXtsZXQgeD1oKmgqKDEtdip2Lyh1KnUpKTt4PjAmJih4PU1hdGguc3FydCh4KSkseD1oLXgsZy55LShlLnk/PzApPjAmJih4PS14KSx5LnkrPXh9cmV0dXJuIHl9LGl9dmFyIHpEZSxHRGUsVkRlLEpaPU4oKCk9PnsidXNlIHN0cmljdCI7RnQoKTtIdCgpO3p0KCk7V3QoKTtlcigpO3pEZT1vKCh0LGUscixuLGksYSxzKT0+W2BNJHt0fSwke2UrYX1gLGBhJHtpfSwke2F9IDAsMCwwICR7cn0sMGAsYGEke2l9LCR7YX0gMCwwLDAgJHstcn0sMGAsYGwwLCR7bn1gLGBhJHtpfSwke2F9IDAsMCwwICR7cn0sMGAsYGwwLCR7LW59YCxgTSR7dH0sJHtlK2Erc31gLGBhJHtpfSwke2F9IDAsMCwwICR7cn0sMGBdLmpvaW4oIiAiKSwiY3JlYXRlQ3lsaW5kZXJQYXRoRCIpLEdEZT1vKCh0LGUscixuLGksYSxzKT0+W2BNJHt0fSwke2UrYX1gLGBNJHt0K3J9LCR7ZSthfWAsYGEke2l9LCR7YX0gMCwwLDAgJHstcn0sMGAsYGwwLCR7bn1gLGBhJHtpfSwke2F9IDAsMCwwICR7cn0sMGAsYGwwLCR7LW59YCxgTSR7dH0sJHtlK2Erc31gLGBhJHtpfSwke2F9IDAsMCwwICR7cn0sMGBdLmpvaW4oIiAiKSwiY3JlYXRlT3V0ZXJDeWxpbmRlclBhdGhEIiksVkRlPW8oKHQsZSxyLG4saSxhKT0+W2BNJHt0LXIvMn0sJHstbi8yfWAsYGEke2l9LCR7YX0gMCwwLDAgJHtyfSwwYF0uam9pbigiICIpLCJjcmVhdGVJbm5lckN5bGluZGVyUGF0aEQiKTtvKFpaLCJsaW5lZEN5bGluZGVyIil9KTthc3luYyBmdW5jdGlvbiBlSih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WWUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphLGxhYmVsOnN9PWF3YWl0IG10KHQsZSxodChlKSksbD1NYXRoLm1heChhLndpZHRoKyhlLnBhZGRpbmc/PzApKjIsZT8ud2lkdGg/PzApLHU9TWF0aC5tYXgoYS5oZWlnaHQrKGUucGFkZGluZz8/MCkqMixlPy5oZWlnaHQ/PzApLGg9dS80LGY9dStoLHtjc3NTdHlsZXM6ZH09ZSxwPWplLnN2ZyhpKSxtPVFlKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYobS5yb3VnaG5lc3M9MCxtLmZpbGxTdHlsZT0ic29saWQiKTtsZXQgZz1be3g6LWwvMi1sLzIqLjEseTotZi8yfSx7eDotbC8yLWwvMiouMSx5OmYvMn0sLi4uR28oLWwvMi1sLzIqLjEsZi8yLGwvMitsLzIqLjEsZi8yLGgsLjgpLHt4OmwvMitsLzIqLjEseTotZi8yfSx7eDotbC8yLWwvMiouMSx5Oi1mLzJ9LHt4Oi1sLzIseTotZi8yfSx7eDotbC8yLHk6Zi8yKjEuMX0se3g6LWwvMix5Oi1mLzJ9XSx5PXAucG9seWdvbihnLm1hcCh4PT5beC54LHgueV0pLG0pLHY9aS5pbnNlcnQoKCk9PnksIjpmaXJzdC1jaGlsZCIpO3JldHVybiB2LmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIiksZCYmZS5sb29rIT09ImhhbmREcmF3biImJnYuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLGQpLG4mJmUubG9vayE9PSJoYW5kRHJhd24iJiZ2LnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixuKSx2LmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgwLCR7LWgvMn0pYCkscy5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstbC8yKyhlLnBhZGRpbmc/PzApK2wvMiouMS8yLShhLngtKGEubGVmdD8/MCkpfSwkey11LzIrKGUucGFkZGluZz8/MCktaC8yLShhLnktKGEudG9wPz8wKSl9KWApLEtlKGUsdiksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oeCl7cmV0dXJuIFhlLnBvbHlnb24oZSxnLHgpfSxpfXZhciB0Sj1OKCgpPT57InVzZSBzdHJpY3QiO0Z0KCk7SHQoKTtXdCgpO3p0KCk7byhlSiwibGluZWRXYXZlRWRnZWRSZWN0Iil9KTthc3luYyBmdW5jdGlvbiBySih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WWUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphLGxhYmVsOnN9PWF3YWl0IG10KHQsZSxodChlKSksbD1NYXRoLm1heChhLndpZHRoKyhlLnBhZGRpbmc/PzApKjIsZT8ud2lkdGg/PzApLHU9TWF0aC5tYXgoYS5oZWlnaHQrKGUucGFkZGluZz8/MCkqMixlPy5oZWlnaHQ/PzApLGg9NSxmPS1sLzIsZD0tdS8yLHtjc3NTdHlsZXM6cH09ZSxtPWplLnN2ZyhpKSxnPVFlKGUse30pLHk9W3t4OmYtaCx5OmQraH0se3g6Zi1oLHk6ZCt1K2h9LHt4OmYrbC1oLHk6ZCt1K2h9LHt4OmYrbC1oLHk6ZCt1fSx7eDpmK2wseTpkK3V9LHt4OmYrbCx5OmQrdS1ofSx7eDpmK2wraCx5OmQrdS1ofSx7eDpmK2wraCx5OmQtaH0se3g6ZitoLHk6ZC1ofSx7eDpmK2gseTpkfSx7eDpmLHk6ZH0se3g6Zix5OmQraH1dLHY9W3t4OmYseTpkK2h9LHt4OmYrbC1oLHk6ZCtofSx7eDpmK2wtaCx5OmQrdX0se3g6ZitsLHk6ZCt1fSx7eDpmK2wseTpkfSx7eDpmLHk6ZH1dO2UubG9vayE9PSJoYW5kRHJhd24iJiYoZy5yb3VnaG5lc3M9MCxnLmZpbGxTdHlsZT0ic29saWQiKTtsZXQgeD1YdCh5KSxiPW0ucGF0aCh4LGcpLFQ9WHQodiksUz1tLnBhdGgoVCx7Li4uZyxmaWxsOiJub25lIn0pLHc9aS5pbnNlcnQoKCk9PlMsIjpmaXJzdC1jaGlsZCIpO3JldHVybiB3Lmluc2VydCgoKT0+YiwiOmZpcnN0LWNoaWxkIiksdy5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLHAmJmUubG9vayE9PSJoYW5kRHJhd24iJiZ3LnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixwKSxuJiZlLmxvb2shPT0iaGFuZERyYXduIiYmdy5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsbikscy5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstKGEud2lkdGgvMiktaC0oYS54LShhLmxlZnQ/PzApKX0sICR7LShhLmhlaWdodC8yKStoLShhLnktKGEudG9wPz8wKSl9KWApLEtlKGUsdyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oRSl7cmV0dXJuIFhlLnBvbHlnb24oZSx5LEUpfSxpfXZhciBuSj1OKCgpPT57InVzZSBzdHJpY3QiO0Z0KCk7enQoKTtXdCgpO0h0KCk7byhySiwibXVsdGlSZWN0Iil9KTthc3luYyBmdW5jdGlvbiBpSih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WWUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphLGxhYmVsOnN9PWF3YWl0IG10KHQsZSxodChlKSksbD1NYXRoLm1heChhLndpZHRoKyhlLnBhZGRpbmc/PzApKjIsZT8ud2lkdGg/PzApLHU9TWF0aC5tYXgoYS5oZWlnaHQrKGUucGFkZGluZz8/MCkqMixlPy5oZWlnaHQ/PzApLGg9dS80LGY9dStoLGQ9LWwvMixwPS1mLzIsbT01LHtjc3NTdHlsZXM6Z309ZSx5PUdvKGQtbSxwK2YrbSxkK2wtbSxwK2YrbSxoLC44KSx2PXk/Llt5Lmxlbmd0aC0xXSx4PVt7eDpkLW0seTpwK219LHt4OmQtbSx5OnArZittfSwuLi55LHt4OmQrbC1tLHk6di55LW19LHt4OmQrbCx5OnYueS1tfSx7eDpkK2wseTp2LnktMiptfSx7eDpkK2wrbSx5OnYueS0yKm19LHt4OmQrbCttLHk6cC1tfSx7eDpkK20seTpwLW19LHt4OmQrbSx5OnB9LHt4OmQseTpwfSx7eDpkLHk6cCttfV0sYj1be3g6ZCx5OnArbX0se3g6ZCtsLW0seTpwK219LHt4OmQrbC1tLHk6di55LW19LHt4OmQrbCx5OnYueS1tfSx7eDpkK2wseTpwfSx7eDpkLHk6cH1dLFQ9amUuc3ZnKGkpLFM9UWUoZSx7fSk7ZS5sb29rIT09ImhhbmREcmF3biImJihTLnJvdWdobmVzcz0wLFMuZmlsbFN0eWxlPSJzb2xpZCIpO2xldCB3PVh0KHgpLEU9VC5wYXRoKHcsUyksXz1YdChiKSxDPVQucGF0aChfLFMpLEQ9aS5pbnNlcnQoKCk9PkUsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBELmluc2VydCgoKT0+QyksRC5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLGcmJmUubG9vayE9PSJoYW5kRHJhd24iJiZELnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixnKSxuJiZlLmxvb2shPT0iaGFuZERyYXduIiYmRC5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsbiksRC5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoMCwkey1oLzJ9KWApLHMuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LShhLndpZHRoLzIpLW0tKGEueC0oYS5sZWZ0Pz8wKSl9LCAkey0oYS5oZWlnaHQvMikrbS1oLzItKGEueS0oYS50b3A/PzApKX0pYCksS2UoZSxEKSxlLmludGVyc2VjdD1mdW5jdGlvbihPKXtyZXR1cm4gWGUucG9seWdvbihlLHgsTyl9LGl9dmFyIGFKPU4oKCk9PnsidXNlIHN0cmljdCI7RnQoKTtIdCgpO1d0KCk7enQoKTtvKGlKLCJtdWx0aVdhdmVFZGdlZFJlY3RhbmdsZSIpfSk7YXN5bmMgZnVuY3Rpb24gc0oodCxlLHtjb25maWc6e3RoZW1lVmFyaWFibGVzOnJ9fSl7bGV0e2xhYmVsU3R5bGVzOm4sbm9kZVN0eWxlczppfT1ZZShlKTtlLmxhYmVsU3R5bGU9bixlLnVzZUh0bWxMYWJlbHN8fHRyKCkuZmxvd2NoYXJ0Py5odG1sTGFiZWxzIT09ITF8fChlLmNlbnRlckxhYmVsPSEwKTtsZXR7c2hhcGVTdmc6cyxiYm94OmwsbGFiZWw6dX09YXdhaXQgbXQodCxlLGh0KGUpKSxoPU1hdGgubWF4KGwud2lkdGgrKGUucGFkZGluZz8/MCkqMixlPy53aWR0aD8/MCksZj1NYXRoLm1heChsLmhlaWdodCsoZS5wYWRkaW5nPz8wKSoyLGU/LmhlaWdodD8/MCksZD0taC8yLHA9LWYvMix7Y3NzU3R5bGVzOm19PWUsZz1qZS5zdmcocykseT1RZShlLHtmaWxsOnIubm90ZUJrZ0NvbG9yLHN0cm9rZTpyLm5vdGVCb3JkZXJDb2xvcn0pO2UubG9vayE9PSJoYW5kRHJhd24iJiYoeS5yb3VnaG5lc3M9MCx5LmZpbGxTdHlsZT0ic29saWQiKTtsZXQgdj1nLnJlY3RhbmdsZShkLHAsaCxmLHkpLHg9cy5pbnNlcnQoKCk9PnYsIjpmaXJzdC1jaGlsZCIpO3JldHVybiB4LmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIiksbSYmZS5sb29rIT09ImhhbmREcmF3biImJnguc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLG0pLGkmJmUubG9vayE9PSJoYW5kRHJhd24iJiZ4LnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixpKSx1LmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1sLndpZHRoLzItKGwueC0obC5sZWZ0Pz8wKSl9LCAkey0obC5oZWlnaHQvMiktKGwueS0obC50b3A/PzApKX0pYCksS2UoZSx4KSxlLmludGVyc2VjdD1mdW5jdGlvbihiKXtyZXR1cm4gWGUucmVjdChlLGIpfSxzfXZhciBvSj1OKCgpPT57InVzZSBzdHJpY3QiO1d0KCk7SHQoKTt6dCgpO0Z0KCk7bWkoKTtvKHNKLCJub3RlIil9KTthc3luYyBmdW5jdGlvbiBsSih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WWUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphfT1hd2FpdCBtdCh0LGUsaHQoZSkpLHM9YS53aWR0aCtlLnBhZGRpbmcsbD1hLmhlaWdodCtlLnBhZGRpbmcsdT1zK2wsaD1be3g6dS8yLHk6MH0se3g6dSx5Oi11LzJ9LHt4OnUvMix5Oi11fSx7eDowLHk6LXUvMn1dLGYse2Nzc1N0eWxlczpkfT1lO2lmKGUubG9vaz09PSJoYW5kRHJhd24iKXtsZXQgcD1qZS5zdmcoaSksbT1RZShlLHt9KSxnPVVEZSgwLDAsdSkseT1wLnBhdGgoZyxtKTtmPWkuaW5zZXJ0KCgpPT55LCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstdS8yfSwgJHt1LzJ9KWApLGQmJmYuYXR0cigic3R5bGUiLGQpfWVsc2UgZj1NYShpLHUsdSxoKTtyZXR1cm4gbiYmZi5hdHRyKCJzdHlsZSIsbiksS2UoZSxmKSxlLmludGVyc2VjdD1mdW5jdGlvbihwKXtyZXR1cm4gWC5kZWJ1ZyhgQVBBMTIgSW50ZXJzZWN0IGNhbGxlZCBTUExJVApwb2ludDpgLHAsYApub2RlOgpgLGUsYApyZXM6YCxYZS5wb2x5Z29uKGUsaCxwKSksWGUucG9seWdvbihlLGgscCl9LGl9dmFyIFVEZSxjSj1OKCgpPT57InVzZSBzdHJpY3QiO3l0KCk7RnQoKTtIdCgpO3p0KCk7V3QoKTtJdSgpO1VEZT1vKCh0LGUscik9PltgTSR7dCtyLzJ9LCR7ZX1gLGBMJHt0K3J9LCR7ZS1yLzJ9YCxgTCR7dCtyLzJ9LCR7ZS1yfWAsYEwke3R9LCR7ZS1yLzJ9YCwiWiJdLmpvaW4oIiAiKSwiY3JlYXRlRGVjaXNpb25Cb3hQYXRoRCIpO28obEosInF1ZXN0aW9uIil9KTthc3luYyBmdW5jdGlvbiB1Sih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WWUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphLGxhYmVsOnN9PWF3YWl0IG10KHQsZSxodChlKSksbD1NYXRoLm1heChhLndpZHRoKyhlLnBhZGRpbmc/PzApLGU/LndpZHRoPz8wKSx1PU1hdGgubWF4KGEuaGVpZ2h0KyhlLnBhZGRpbmc/PzApLGU/LmhlaWdodD8/MCksaD0tbC8yLGY9LXUvMixkPWYvMixwPVt7eDpoK2QseTpmfSx7eDpoLHk6MH0se3g6aCtkLHk6LWZ9LHt4Oi1oLHk6LWZ9LHt4Oi1oLHk6Zn1dLHtjc3NTdHlsZXM6bX09ZSxnPWplLnN2ZyhpKSx5PVFlKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYoeS5yb3VnaG5lc3M9MCx5LmZpbGxTdHlsZT0ic29saWQiKTtsZXQgdj1YdChwKSx4PWcucGF0aCh2LHkpLGI9aS5pbnNlcnQoKCk9PngsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBiLmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIiksbSYmZS5sb29rIT09ImhhbmREcmF3biImJmIuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLG0pLG4mJmUubG9vayE9PSJoYW5kRHJhd24iJiZiLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixuKSxiLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1kLzJ9LDApYCkscy5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstZC8yLWEud2lkdGgvMi0oYS54LShhLmxlZnQ/PzApKX0sICR7LShhLmhlaWdodC8yKS0oYS55LShhLnRvcD8/MCkpfSlgKSxLZShlLGIpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKFQpe3JldHVybiBYZS5wb2x5Z29uKGUscCxUKX0saX12YXIgaEo9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO0h0KCk7enQoKTtXdCgpO28odUosInJlY3RfbGVmdF9pbnZfYXJyb3ciKX0pO2Z1bmN0aW9uIEhEZSh0LGUpe2UmJnQuYXR0cigic3R5bGUiLGUpfWFzeW5jIGZ1bmN0aW9uIFdEZSh0KXtsZXQgZT1HZShkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZm9yZWlnbk9iamVjdCIpKSxyPWUuYXBwZW5kKCJ4aHRtbDpkaXYiKSxuPXQubGFiZWw7dC5sYWJlbCYmeWkodC5sYWJlbCkmJihuPWF3YWl0IFRoKHQubGFiZWwucmVwbGFjZShaZS5saW5lQnJlYWtSZWdleCxgCmApLG1lKCkpKTtsZXQgaT10LmlzTm9kZT8ibm9kZUxhYmVsIjoiZWRnZUxhYmVsIjtyZXR1cm4gci5odG1sKCc8c3BhbiBjbGFzcz0iJytpKyciICcrKHQubGFiZWxTdHlsZT8nc3R5bGU9IicrdC5sYWJlbFN0eWxlKyciJzoiIikrIj4iK24rIjwvc3Bhbj4iKSxIRGUocix0LmxhYmVsU3R5bGUpLHIuc3R5bGUoImRpc3BsYXkiLCJpbmxpbmUtYmxvY2siKSxyLnN0eWxlKCJwYWRkaW5nLXJpZ2h0IiwiMXB4Iiksci5zdHlsZSgid2hpdGUtc3BhY2UiLCJub3dyYXAiKSxyLmF0dHIoInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIpLGUubm9kZSgpfXZhciBxRGUsVGMscnc9TigoKT0+eyJ1c2Ugc3RyaWN0IjtmcigpO3l0KCk7R3QoKTtwcigpO2VyKCk7byhIRGUsImFwcGx5U3R5bGUiKTtvKFdEZSwiYWRkSHRtbExhYmVsIik7cURlPW8oYXN5bmModCxlLHIsbik9PntsZXQgaT10fHwiIjtpZih0eXBlb2YgaT09Im9iamVjdCImJihpPWlbMF0pLGRyKG1lKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtpPWkucmVwbGFjZSgvXFxufFxuL2csIjxiciAvPiIpLFguaW5mbygidmVydGV4VGV4dCIraSk7bGV0IGE9e2lzTm9kZTpuLGxhYmVsOm5hKGkpLnJlcGxhY2UoL2ZhW2JscnNdPzpmYS1bXHctXSsvZyxsPT5gPGkgY2xhc3M9JyR7bC5yZXBsYWNlKCI6IiwiICIpfSc+PC9pPmApLGxhYmVsU3R5bGU6ZSYmZS5yZXBsYWNlKCJmaWxsOiIsImNvbG9yOiIpfTtyZXR1cm4gYXdhaXQgV0RlKGEpfWVsc2V7bGV0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRleHQiKTthLnNldEF0dHJpYnV0ZSgic3R5bGUiLGUucmVwbGFjZSgiY29sb3I6IiwiZmlsbDoiKSk7bGV0IHM9W107dHlwZW9mIGk9PSJzdHJpbmciP3M9aS5zcGxpdCgvXFxufFxufDxiclxzKlwvPz4vZ2kpOkFycmF5LmlzQXJyYXkoaSk/cz1pOnM9W107Zm9yKGxldCBsIG9mIHMpe2xldCB1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0c3BhbiIpO3Uuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsInhtbDpzcGFjZSIsInByZXNlcnZlIiksdS5zZXRBdHRyaWJ1dGUoImR5IiwiMWVtIiksdS5zZXRBdHRyaWJ1dGUoIngiLCIwIikscj91LnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJ0aXRsZS1yb3ciKTp1LnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJyb3ciKSx1LnRleHRDb250ZW50PWwudHJpbSgpLGEuYXBwZW5kQ2hpbGQodSl9cmV0dXJuIGF9fSwiY3JlYXRlTGFiZWwiKSxUYz1xRGV9KTthc3luYyBmdW5jdGlvbiBmSih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WWUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0IGk7ZS5jc3NDbGFzc2VzP2k9Im5vZGUgIitlLmNzc0NsYXNzZXM6aT0ibm9kZSBkZWZhdWx0IjtsZXQgYT10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIixpKS5hdHRyKCJpZCIsZS5kb21JZHx8ZS5pZCkscz1hLmluc2VydCgiZyIpLGw9YS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuYXR0cigic3R5bGUiLG4pLHU9ZS5kZXNjcmlwdGlvbixoPWUubGFiZWwsZj1sLm5vZGUoKS5hcHBlbmRDaGlsZChhd2FpdCBUYyhoLGUubGFiZWxTdHlsZSwhMCwhMCkpLGQ9e3dpZHRoOjAsaGVpZ2h0OjB9O2lmKGRyKG1lKCk/LmZsb3djaGFydD8uaHRtbExhYmVscykpe2xldCBDPWYuY2hpbGRyZW5bMF0sRD1HZShmKTtkPUMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksRC5hdHRyKCJ3aWR0aCIsZC53aWR0aCksRC5hdHRyKCJoZWlnaHQiLGQuaGVpZ2h0KX1YLmluZm8oIlRleHQgMiIsdSk7bGV0IHA9dXx8W10sbT1mLmdldEJCb3goKSxnPWwubm9kZSgpLmFwcGVuZENoaWxkKGF3YWl0IFRjKHAuam9pbj9wLmpvaW4oIjxici8+Iik6cCxlLmxhYmVsU3R5bGUsITAsITApKSx5PWcuY2hpbGRyZW5bMF0sdj1HZShnKTtkPXkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdi5hdHRyKCJ3aWR0aCIsZC53aWR0aCksdi5hdHRyKCJoZWlnaHQiLGQuaGVpZ2h0KTtsZXQgeD0oZS5wYWRkaW5nfHwwKS8yO0dlKGcpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIisoZC53aWR0aD5tLndpZHRoPzA6KG0ud2lkdGgtZC53aWR0aCkvMikrIiwgIisobS5oZWlnaHQreCs1KSsiKSIpLEdlKGYpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIisoZC53aWR0aDxtLndpZHRoPzA6LShtLndpZHRoLWQud2lkdGgpLzIpKyIsIDApIiksZD1sLm5vZGUoKS5nZXRCQm94KCksbC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistZC53aWR0aC8yKyIsICIrKC1kLmhlaWdodC8yLXgrMykrIikiKTtsZXQgYj1kLndpZHRoKyhlLnBhZGRpbmd8fDApLFQ9ZC5oZWlnaHQrKGUucGFkZGluZ3x8MCksUz0tZC53aWR0aC8yLXgsdz0tZC5oZWlnaHQvMi14LEUsXztpZihlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0IEM9amUuc3ZnKGEpLEQ9UWUoZSx7fSksTz1DLnBhdGgoT2EoUyx3LGIsVCxlLnJ4fHwwKSxEKSxSPUMubGluZSgtZC53aWR0aC8yLXgsLWQuaGVpZ2h0LzIteCttLmhlaWdodCt4LGQud2lkdGgvMit4LC1kLmhlaWdodC8yLXgrbS5oZWlnaHQreCxEKTtfPWEuaW5zZXJ0KCgpPT4oWC5kZWJ1ZygiUm91Z2ggbm9kZSBpbnNlcnQgQ1hDIixPKSxSKSwiOmZpcnN0LWNoaWxkIiksRT1hLmluc2VydCgoKT0+KFguZGVidWcoIlJvdWdoIG5vZGUgaW5zZXJ0IENYQyIsTyksTyksIjpmaXJzdC1jaGlsZCIpfWVsc2UgRT1zLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLF89cy5pbnNlcnQoImxpbmUiKSxFLmF0dHIoImNsYXNzIiwib3V0ZXIgdGl0bGUtc3RhdGUiKS5hdHRyKCJzdHlsZSIsbikuYXR0cigieCIsLWQud2lkdGgvMi14KS5hdHRyKCJ5IiwtZC5oZWlnaHQvMi14KS5hdHRyKCJ3aWR0aCIsZC53aWR0aCsoZS5wYWRkaW5nfHwwKSkuYXR0cigiaGVpZ2h0IixkLmhlaWdodCsoZS5wYWRkaW5nfHwwKSksXy5hdHRyKCJjbGFzcyIsImRpdmlkZXIiKS5hdHRyKCJ4MSIsLWQud2lkdGgvMi14KS5hdHRyKCJ4MiIsZC53aWR0aC8yK3gpLmF0dHIoInkxIiwtZC5oZWlnaHQvMi14K20uaGVpZ2h0K3gpLmF0dHIoInkyIiwtZC5oZWlnaHQvMi14K20uaGVpZ2h0K3gpO3JldHVybiBLZShlLEUpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKEMpe3JldHVybiBYZS5yZWN0KGUsQyl9LGF9dmFyIGRKPU4oKCk9PnsidXNlIHN0cmljdCI7ZnIoKTtwcigpO0Z0KCk7cncoKTtIdCgpO3p0KCk7V3QoKTtHdCgpO1poKCk7eXQoKTtvKGZKLCJyZWN0V2l0aFRpdGxlIil9KTthc3luYyBmdW5jdGlvbiBwSih0LGUpe2xldCByPXtyeDo1LHJ5OjUsY2xhc3NlczoiIixsYWJlbFBhZGRpbmdYOihlPy5wYWRkaW5nfHwwKSoxLGxhYmVsUGFkZGluZ1k6KGU/LnBhZGRpbmd8fDApKjF9O3JldHVybiBPdSh0LGUscil9dmFyIG1KPU4oKCk9PnsidXNlIHN0cmljdCI7RW0oKTtvKHBKLCJyb3VuZGVkUmVjdCIpfSk7YXN5bmMgZnVuY3Rpb24gZ0oodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVllKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YSxsYWJlbDpzfT1hd2FpdCBtdCh0LGUsaHQoZSkpLGw9ZT8ucGFkZGluZz8/MCx1PU1hdGgubWF4KGEud2lkdGgrKGUucGFkZGluZz8/MCkqMixlPy53aWR0aD8/MCksaD1NYXRoLm1heChhLmhlaWdodCsoZS5wYWRkaW5nPz8wKSoyLGU/LmhlaWdodD8/MCksZj0tYS53aWR0aC8yLWwsZD0tYS5oZWlnaHQvMi1sLHtjc3NTdHlsZXM6cH09ZSxtPWplLnN2ZyhpKSxnPVFlKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYoZy5yb3VnaG5lc3M9MCxnLmZpbGxTdHlsZT0ic29saWQiKTtsZXQgeT1be3g6Zix5OmR9LHt4OmYrdSs4LHk6ZH0se3g6Zit1KzgseTpkK2h9LHt4OmYtOCx5OmQraH0se3g6Zi04LHk6ZH0se3g6Zix5OmR9LHt4OmYseTpkK2h9XSx2PW0ucG9seWdvbih5Lm1hcChiPT5bYi54LGIueV0pLGcpLHg9aS5pbnNlcnQoKCk9PnYsIjpmaXJzdC1jaGlsZCIpO3JldHVybiB4LmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIikuYXR0cigic3R5bGUiLHpuKHApKSxuJiZlLmxvb2shPT0iaGFuZERyYXduIiYmeC5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsbikscCYmZS5sb29rIT09ImhhbmREcmF3biImJnguc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLG4pLHMuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LXUvMis0KyhlLnBhZGRpbmc/PzApLShhLngtKGEubGVmdD8/MCkpfSwkey1oLzIrKGUucGFkZGluZz8/MCktKGEueS0oYS50b3A/PzApKX0pYCksS2UoZSx4KSxlLmludGVyc2VjdD1mdW5jdGlvbihiKXtyZXR1cm4gWGUucmVjdChlLGIpfSxpfXZhciB5Sj1OKCgpPT57InVzZSBzdHJpY3QiO0Z0KCk7SHQoKTt6dCgpO1d0KCk7ZXIoKTtvKGdKLCJzaGFkZWRQcm9jZXNzIil9KTthc3luYyBmdW5jdGlvbiB2Sih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WWUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphLGxhYmVsOnN9PWF3YWl0IG10KHQsZSxodChlKSksbD1NYXRoLm1heChhLndpZHRoKyhlLnBhZGRpbmc/PzApKjIsZT8ud2lkdGg/PzApLHU9TWF0aC5tYXgoYS5oZWlnaHQrKGUucGFkZGluZz8/MCkqMixlPy5oZWlnaHQ/PzApLGg9LWwvMixmPS11LzIse2Nzc1N0eWxlczpkfT1lLHA9amUuc3ZnKGkpLG09UWUoZSx7fSk7ZS5sb29rIT09ImhhbmREcmF3biImJihtLnJvdWdobmVzcz0wLG0uZmlsbFN0eWxlPSJzb2xpZCIpO2xldCBnPVt7eDpoLHk6Zn0se3g6aCx5OmYrdX0se3g6aCtsLHk6Zit1fSx7eDpoK2wseTpmLXUvMn1dLHk9WHQoZyksdj1wLnBhdGgoeSxtKSx4PWkuaW5zZXJ0KCgpPT52LCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4geC5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLGQmJmUubG9vayE9PSJoYW5kRHJhd24iJiZ4LnNlbGVjdENoaWxkcmVuKCJwYXRoIikuYXR0cigic3R5bGUiLGQpLG4mJmUubG9vayE9PSJoYW5kRHJhd24iJiZ4LnNlbGVjdENoaWxkcmVuKCJwYXRoIikuYXR0cigic3R5bGUiLG4pLHguYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKDAsICR7dS80fSlgKSxzLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1sLzIrKGUucGFkZGluZz8/MCktKGEueC0oYS5sZWZ0Pz8wKSl9LCAkey11LzQrKGUucGFkZGluZz8/MCktKGEueS0oYS50b3A/PzApKX0pYCksS2UoZSx4KSxlLmludGVyc2VjdD1mdW5jdGlvbihiKXtyZXR1cm4gWGUucG9seWdvbihlLGcsYil9LGl9dmFyIHhKPU4oKCk9PnsidXNlIHN0cmljdCI7RnQoKTtIdCgpO3p0KCk7V3QoKTtvKHZKLCJzbG9wZWRSZWN0Iil9KTthc3luYyBmdW5jdGlvbiBiSih0LGUpe2xldCByPXtyeDowLHJ5OjAsY2xhc3NlczoiIixsYWJlbFBhZGRpbmdYOihlPy5wYWRkaW5nfHwwKSoyLGxhYmVsUGFkZGluZ1k6KGU/LnBhZGRpbmd8fDApKjF9O3JldHVybiBPdSh0LGUscil9dmFyIFRKPU4oKCk9PnsidXNlIHN0cmljdCI7RW0oKTtvKGJKLCJzcXVhcmVSZWN0Iil9KTthc3luYyBmdW5jdGlvbiB3Sih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WWUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphfT1hd2FpdCBtdCh0LGUsaHQoZSkpLHM9YS5oZWlnaHQrZS5wYWRkaW5nLGw9YS53aWR0aCtzLzQrZS5wYWRkaW5nLHUse2Nzc1N0eWxlczpofT1lO2lmKGUubG9vaz09PSJoYW5kRHJhd24iKXtsZXQgZj1qZS5zdmcoaSksZD1RZShlLHt9KSxwPU9hKC1sLzIsLXMvMixsLHMscy8yKSxtPWYucGF0aChwLGQpO3U9aS5pbnNlcnQoKCk9Pm0sIjpmaXJzdC1jaGlsZCIpLHUuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKS5hdHRyKCJzdHlsZSIsem4oaCkpfWVsc2UgdT1pLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLHUuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKS5hdHRyKCJzdHlsZSIsbikuYXR0cigicngiLHMvMikuYXR0cigicnkiLHMvMikuYXR0cigieCIsLWwvMikuYXR0cigieSIsLXMvMikuYXR0cigid2lkdGgiLGwpLmF0dHIoImhlaWdodCIscyk7cmV0dXJuIEtlKGUsdSksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oZil7cmV0dXJuIFhlLnJlY3QoZSxmKX0saX12YXIga0o9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO0h0KCk7enQoKTtXdCgpO1poKCk7ZXIoKTtvKHdKLCJzdGFkaXVtIil9KTthc3luYyBmdW5jdGlvbiBFSih0LGUpe3JldHVybiBPdSh0LGUse3J4OjUscnk6NSxjbGFzc2VzOiJmbG93Y2hhcnQtbm9kZSJ9KX12YXIgU0o9TigoKT0+eyJ1c2Ugc3RyaWN0IjtFbSgpO28oRUosInN0YXRlIil9KTtmdW5jdGlvbiBDSih0LGUse2NvbmZpZzp7dGhlbWVWYXJpYWJsZXM6cn19KXtsZXR7bGFiZWxTdHlsZXM6bixub2RlU3R5bGVzOml9PVllKGUpO2UubGFiZWxTdHlsZT1uO2xldHtjc3NTdHlsZXM6YX09ZSx7bGluZUNvbG9yOnMsc3RhdGVCb3JkZXI6bCxub2RlQm9yZGVyOnV9PXIsaD10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZSBkZWZhdWx0IikuYXR0cigiaWQiLGUuZG9tSWR8fGUuaWQpLGY9amUuc3ZnKGgpLGQ9UWUoZSx7fSk7ZS5sb29rIT09ImhhbmREcmF3biImJihkLnJvdWdobmVzcz0wLGQuZmlsbFN0eWxlPSJzb2xpZCIpO2xldCBwPWYuY2lyY2xlKDAsMCwxNCx7Li4uZCxzdHJva2U6cyxzdHJva2VXaWR0aDoyfSksbT1sPz91LGc9Zi5jaXJjbGUoMCwwLDUsey4uLmQsZmlsbDptLHN0cm9rZTptLHN0cm9rZVdpZHRoOjIsZmlsbFN0eWxlOiJzb2xpZCJ9KSx5PWguaW5zZXJ0KCgpPT5wLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4geS5pbnNlcnQoKCk9PmcpLGEmJnkuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLGEpLGkmJnkuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLGkpLEtlKGUseSksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odil7cmV0dXJuIFhlLmNpcmNsZShlLDcsdil9LGh9dmFyIEFKPU4oKCk9PnsidXNlIHN0cmljdCI7V3QoKTtIdCgpO3p0KCk7RnQoKTtvKENKLCJzdGF0ZUVuZCIpfSk7ZnVuY3Rpb24gX0oodCxlLHtjb25maWc6e3RoZW1lVmFyaWFibGVzOnJ9fSl7bGV0e2xpbmVDb2xvcjpufT1yLGk9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCIpLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxhO2lmKGUubG9vaz09PSJoYW5kRHJhd24iKXtsZXQgbD1qZS5zdmcoaSkuY2lyY2xlKDAsMCwxNCxOUShuKSk7YT1pLmluc2VydCgoKT0+bCksYS5hdHRyKCJjbGFzcyIsInN0YXRlLXN0YXJ0IikuYXR0cigiciIsNykuYXR0cigid2lkdGgiLDE0KS5hdHRyKCJoZWlnaHQiLDE0KX1lbHNlIGE9aS5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpLGEuYXR0cigiY2xhc3MiLCJzdGF0ZS1zdGFydCIpLmF0dHIoInIiLDcpLmF0dHIoIndpZHRoIiwxNCkuYXR0cigiaGVpZ2h0IiwxNCk7cmV0dXJuIEtlKGUsYSksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24ocyl7cmV0dXJuIFhlLmNpcmNsZShlLDcscyl9LGl9dmFyIERKPU4oKCk9PnsidXNlIHN0cmljdCI7V3QoKTtIdCgpO3p0KCk7RnQoKTtvKF9KLCJzdGF0ZVN0YXJ0Iil9KTthc3luYyBmdW5jdGlvbiBMSih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WWUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphfT1hd2FpdCBtdCh0LGUsaHQoZSkpLHM9KGU/LnBhZGRpbmd8fDApLzIsbD1hLndpZHRoK2UucGFkZGluZyx1PWEuaGVpZ2h0K2UucGFkZGluZyxoPS1hLndpZHRoLzItcyxmPS1hLmhlaWdodC8yLXMsZD1be3g6MCx5OjB9LHt4OmwseTowfSx7eDpsLHk6LXV9LHt4OjAseTotdX0se3g6MCx5OjB9LHt4Oi04LHk6MH0se3g6bCs4LHk6MH0se3g6bCs4LHk6LXV9LHt4Oi04LHk6LXV9LHt4Oi04LHk6MH1dO2lmKGUubG9vaz09PSJoYW5kRHJhd24iKXtsZXQgcD1qZS5zdmcoaSksbT1RZShlLHt9KSxnPXAucmVjdGFuZ2xlKGgtOCxmLGwrMTYsdSxtKSx5PXAubGluZShoLGYsaCxmK3UsbSksdj1wLmxpbmUoaCtsLGYsaCtsLGYrdSxtKTtpLmluc2VydCgoKT0+eSwiOmZpcnN0LWNoaWxkIiksaS5pbnNlcnQoKCk9PnYsIjpmaXJzdC1jaGlsZCIpO2xldCB4PWkuaW5zZXJ0KCgpPT5nLCI6Zmlyc3QtY2hpbGQiKSx7Y3NzU3R5bGVzOmJ9PWU7eC5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInN0eWxlIix6bihiKSksS2UoZSx4KX1lbHNle2xldCBwPU1hKGksbCx1LGQpO24mJnAuYXR0cigic3R5bGUiLG4pLEtlKGUscCl9cmV0dXJuIGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHApe3JldHVybiBYZS5wb2x5Z29uKGUsZCxwKX0saX12YXIgUko9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO0h0KCk7enQoKTtXdCgpO0l1KCk7ZXIoKTtvKExKLCJzdWJyb3V0aW5lIil9KTthc3luYyBmdW5jdGlvbiBOSih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WWUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphfT1hd2FpdCBtdCh0LGUsaHQoZSkpLHM9TWF0aC5tYXgoYS53aWR0aCsoZS5wYWRkaW5nPz8wKSoyLGU/LndpZHRoPz8wKSxsPU1hdGgubWF4KGEuaGVpZ2h0KyhlLnBhZGRpbmc/PzApKjIsZT8uaGVpZ2h0Pz8wKSx1PS1zLzIsaD0tbC8yLGY9LjIqbCxkPS4yKmwse2Nzc1N0eWxlczpwfT1lLG09amUuc3ZnKGkpLGc9UWUoZSx7fSkseT1be3g6dS1mLzIseTpofSx7eDp1K3MrZi8yLHk6aH0se3g6dStzK2YvMix5OmgrbH0se3g6dS1mLzIseTpoK2x9XSx2PVt7eDp1K3MtZi8yLHk6aCtsfSx7eDp1K3MrZi8yLHk6aCtsfSx7eDp1K3MrZi8yLHk6aCtsLWR9XTtlLmxvb2shPT0iaGFuZERyYXduIiYmKGcucm91Z2huZXNzPTAsZy5maWxsU3R5bGU9InNvbGlkIik7bGV0IHg9WHQoeSksYj1tLnBhdGgoeCxnKSxUPVh0KHYpLFM9bS5wYXRoKFQsey4uLmcsZmlsbFN0eWxlOiJzb2xpZCJ9KSx3PWkuaW5zZXJ0KCgpPT5TLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gdy5pbnNlcnQoKCk9PmIsIjpmaXJzdC1jaGlsZCIpLHcuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKSxwJiZlLmxvb2shPT0iaGFuZERyYXduIiYmdy5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIscCksbiYmZS5sb29rIT09ImhhbmREcmF3biImJncuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLG4pLEtlKGUsdyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oRSl7cmV0dXJuIFhlLnBvbHlnb24oZSx5LEUpfSxpfXZhciBNSj1OKCgpPT57InVzZSBzdHJpY3QiO0Z0KCk7enQoKTtXdCgpO0h0KCk7byhOSiwidGFnZ2VkUmVjdCIpfSk7YXN5bmMgZnVuY3Rpb24gSUoodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVllKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YSxsYWJlbDpzfT1hd2FpdCBtdCh0LGUsaHQoZSkpLGw9TWF0aC5tYXgoYS53aWR0aCsoZS5wYWRkaW5nPz8wKSoyLGU/LndpZHRoPz8wKSx1PU1hdGgubWF4KGEuaGVpZ2h0KyhlLnBhZGRpbmc/PzApKjIsZT8uaGVpZ2h0Pz8wKSxoPXUvNCxmPS4yKmwsZD0uMip1LHA9dStoLHtjc3NTdHlsZXM6bX09ZSxnPWplLnN2ZyhpKSx5PVFlKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYoeS5yb3VnaG5lc3M9MCx5LmZpbGxTdHlsZT0ic29saWQiKTtsZXQgdj1be3g6LWwvMi1sLzIqLjEseTpwLzJ9LC4uLkdvKC1sLzItbC8yKi4xLHAvMixsLzIrbC8yKi4xLHAvMixoLC44KSx7eDpsLzIrbC8yKi4xLHk6LXAvMn0se3g6LWwvMi1sLzIqLjEseTotcC8yfV0seD0tbC8yK2wvMiouMSxiPS1wLzItZCouNCxUPVt7eDp4K2wtZix5OihiK3UpKjEuNH0se3g6eCtsLHk6Yit1LWR9LHt4OngrbCx5OihiK3UpKi45fSwuLi5Hbyh4K2wsKGIrdSkqMS4zLHgrbC1mLChiK3UpKjEuNSwtdSouMDMsLjUpXSxTPVh0KHYpLHc9Zy5wYXRoKFMseSksRT1YdChUKSxfPWcucGF0aChFLHsuLi55LGZpbGxTdHlsZToic29saWQifSksQz1pLmluc2VydCgoKT0+XywiOmZpcnN0LWNoaWxkIik7cmV0dXJuIEMuaW5zZXJ0KCgpPT53LCI6Zmlyc3QtY2hpbGQiKSxDLmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIiksbSYmZS5sb29rIT09ImhhbmREcmF3biImJkMuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLG0pLG4mJmUubG9vayE9PSJoYW5kRHJhd24iJiZDLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixuKSxDLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgwLCR7LWgvMn0pYCkscy5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstbC8yKyhlLnBhZGRpbmc/PzApLShhLngtKGEubGVmdD8/MCkpfSwkey11LzIrKGUucGFkZGluZz8/MCktaC8yLShhLnktKGEudG9wPz8wKSl9KWApLEtlKGUsQyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oRCl7cmV0dXJuIFhlLnBvbHlnb24oZSx2LEQpfSxpfXZhciBPSj1OKCgpPT57InVzZSBzdHJpY3QiO0Z0KCk7SHQoKTtXdCgpO3p0KCk7byhJSiwidGFnZ2VkV2F2ZUVkZ2VkUmVjdGFuZ2xlIil9KTthc3luYyBmdW5jdGlvbiBQSih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WWUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphfT1hd2FpdCBtdCh0LGUsaHQoZSkpLHM9TWF0aC5tYXgoYS53aWR0aCtlLnBhZGRpbmcsZT8ud2lkdGh8fDApLGw9TWF0aC5tYXgoYS5oZWlnaHQrZS5wYWRkaW5nLGU/LmhlaWdodHx8MCksdT0tcy8yLGg9LWwvMixmPWkuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIGYuYXR0cigiY2xhc3MiLCJ0ZXh0IikuYXR0cigic3R5bGUiLG4pLmF0dHIoInJ4IiwwKS5hdHRyKCJyeSIsMCkuYXR0cigieCIsdSkuYXR0cigieSIsaCkuYXR0cigid2lkdGgiLHMpLmF0dHIoImhlaWdodCIsbCksS2UoZSxmKSxlLmludGVyc2VjdD1mdW5jdGlvbihkKXtyZXR1cm4gWGUucmVjdChlLGQpfSxpfXZhciBCSj1OKCgpPT57InVzZSBzdHJpY3QiO0Z0KCk7SHQoKTt6dCgpO28oUEosInRleHQiKX0pO2FzeW5jIGZ1bmN0aW9uIEZKKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1ZZShlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmEsbGFiZWw6cyxoYWxmUGFkZGluZzpsfT1hd2FpdCBtdCh0LGUsaHQoZSkpLHU9ZS5sb29rPT09Im5lbyI/bCoyOmwsaD1hLmhlaWdodCt1LGY9aC8yLGQ9Zi8oMi41K2gvNTApLHA9YS53aWR0aCtkK3Use2Nzc1N0eWxlczptfT1lLGc7aWYoZS5sb29rPT09ImhhbmREcmF3biIpe2xldCB5PWplLnN2ZyhpKSx2PVhEZSgwLDAscCxoLGQsZikseD1qRGUoMCwwLHAsaCxkLGYpLGI9eS5wYXRoKHYsUWUoZSx7fSkpLFQ9eS5wYXRoKHgsUWUoZSx7ZmlsbDoibm9uZSJ9KSk7Zz1pLmluc2VydCgoKT0+VCwiOmZpcnN0LWNoaWxkIiksZz1pLmluc2VydCgoKT0+YiwiOmZpcnN0LWNoaWxkIiksZy5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLG0mJmcuYXR0cigic3R5bGUiLG0pfWVsc2V7bGV0IHk9WURlKDAsMCxwLGgsZCxmKTtnPWkuaW5zZXJ0KCJwYXRoIiwiOmZpcnN0LWNoaWxkIikuYXR0cigiZCIseSkuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKS5hdHRyKCJzdHlsZSIsem4obSkpLmF0dHIoInN0eWxlIixuKSxnLmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIiksbSYmZy5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsbSksbiYmZy5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIsbil9cmV0dXJuIGcuYXR0cigibGFiZWwtb2Zmc2V0LXgiLGQpLGcuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LXAvMn0sICR7aC8yfSApYCkscy5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstKGEud2lkdGgvMiktZC0oYS54LShhLmxlZnQ/PzApKX0sICR7LShhLmhlaWdodC8yKS0oYS55LShhLnRvcD8/MCkpfSlgKSxLZShlLGcpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHkpe2xldCB2PVhlLnJlY3QoZSx5KSx4PXYueS0oZS55Pz8wKTtpZihmIT0wJiYoTWF0aC5hYnMoeCk8KGUuaGVpZ2h0Pz8wKS8yfHxNYXRoLmFicyh4KT09KGUuaGVpZ2h0Pz8wKS8yJiZNYXRoLmFicyh2LngtKGUueD8/MCkpPihlLndpZHRoPz8wKS8yLWQpKXtsZXQgYj1kKmQqKDEteCp4LyhmKmYpKTtiIT0wJiYoYj1NYXRoLnNxcnQoTWF0aC5hYnMoYikpKSxiPWQtYix5LngtKGUueD8/MCk+MCYmKGI9LWIpLHYueCs9Yn1yZXR1cm4gdn0saX12YXIgWURlLFhEZSxqRGUsJEo9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO3p0KCk7V3QoKTtIdCgpO2VyKCk7WURlPW8oKHQsZSxyLG4saSxhKT0+YE0ke3R9LCR7ZX0KICAgIGEke2l9LCR7YX0gMCwwLDEgMCwkey1ufQogICAgbCR7cn0sMAogICAgYSR7aX0sJHthfSAwLDAsMSAwLCR7bn0KICAgIE0ke3J9LCR7LW59CiAgICBhJHtpfSwke2F9IDAsMCwwIDAsJHtufQogICAgbCR7LXJ9LDBgLCJjcmVhdGVDeWxpbmRlclBhdGhEIiksWERlPW8oKHQsZSxyLG4saSxhKT0+W2BNJHt0fSwke2V9YCxgTSR7dCtyfSwke2V9YCxgYSR7aX0sJHthfSAwLDAsMCAwLCR7LW59YCxgbCR7LXJ9LDBgLGBhJHtpfSwke2F9IDAsMCwwIDAsJHtufWAsYGwke3J9LDBgXS5qb2luKCIgIiksImNyZWF0ZU91dGVyQ3lsaW5kZXJQYXRoRCIpLGpEZT1vKCh0LGUscixuLGksYSk9PltgTSR7dCtyLzJ9LCR7LW4vMn1gLGBhJHtpfSwke2F9IDAsMCwwIDAsJHtufWBdLmpvaW4oIiAiKSwiY3JlYXRlSW5uZXJDeWxpbmRlclBhdGhEIik7byhGSiwidGlsdGVkQ3lsaW5kZXIiKX0pO2FzeW5jIGZ1bmN0aW9uIHpKKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1ZZShlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmF9PWF3YWl0IG10KHQsZSxodChlKSkscz1hLndpZHRoK2UucGFkZGluZyxsPWEuaGVpZ2h0K2UucGFkZGluZyx1PVt7eDotMypsLzYseTowfSx7eDpzKzMqbC82LHk6MH0se3g6cyx5Oi1sfSx7eDowLHk6LWx9XSxoLHtjc3NTdHlsZXM6Zn09ZTtpZihlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0IGQ9amUuc3ZnKGkpLHA9UWUoZSx7fSksbT1YdCh1KSxnPWQucGF0aChtLHApO2g9aS5pbnNlcnQoKCk9PmcsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1zLzJ9LCAke2wvMn0pYCksZiYmaC5hdHRyKCJzdHlsZSIsZil9ZWxzZSBoPU1hKGkscyxsLHUpO3JldHVybiBuJiZoLmF0dHIoInN0eWxlIixuKSxlLndpZHRoPXMsZS5oZWlnaHQ9bCxLZShlLGgpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGQpe3JldHVybiBYZS5wb2x5Z29uKGUsdSxkKX0saX12YXIgR0o9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO0h0KCk7enQoKTtXdCgpO0l1KCk7byh6SiwidHJhcGV6b2lkIil9KTthc3luYyBmdW5jdGlvbiBWSih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WWUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphfT1hd2FpdCBtdCh0LGUsaHQoZSkpLHM9NjAsbD0yMCx1PU1hdGgubWF4KHMsYS53aWR0aCsoZS5wYWRkaW5nPz8wKSoyLGU/LndpZHRoPz8wKSxoPU1hdGgubWF4KGwsYS5oZWlnaHQrKGUucGFkZGluZz8/MCkqMixlPy5oZWlnaHQ/PzApLHtjc3NTdHlsZXM6Zn09ZSxkPWplLnN2ZyhpKSxwPVFlKGUse30pO2UubG9vayE9PSJoYW5kRHJhd24iJiYocC5yb3VnaG5lc3M9MCxwLmZpbGxTdHlsZT0ic29saWQiKTtsZXQgbT1be3g6LXUvMiouOCx5Oi1oLzJ9LHt4OnUvMiouOCx5Oi1oLzJ9LHt4OnUvMix5Oi1oLzIqLjZ9LHt4OnUvMix5OmgvMn0se3g6LXUvMix5OmgvMn0se3g6LXUvMix5Oi1oLzIqLjZ9XSxnPVh0KG0pLHk9ZC5wYXRoKGcscCksdj1pLmluc2VydCgoKT0+eSwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIHYuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKSxmJiZlLmxvb2shPT0iaGFuZERyYXduIiYmdi5zZWxlY3RDaGlsZHJlbigicGF0aCIpLmF0dHIoInN0eWxlIixmKSxuJiZlLmxvb2shPT0iaGFuZERyYXduIiYmdi5zZWxlY3RDaGlsZHJlbigicGF0aCIpLmF0dHIoInN0eWxlIixuKSxLZShlLHYpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHgpe3JldHVybiBYZS5wb2x5Z29uKGUsbSx4KX0saX12YXIgVUo9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO0h0KCk7enQoKTtXdCgpO28oVkosInRyYXBlem9pZGFsUGVudGFnb24iKX0pO2FzeW5jIGZ1bmN0aW9uIEhKKHQsZSl7bGV0e2xhYmVsU3R5bGVzOnIsbm9kZVN0eWxlczpufT1ZZShlKTtlLmxhYmVsU3R5bGU9cjtsZXR7c2hhcGVTdmc6aSxiYm94OmEsbGFiZWw6c309YXdhaXQgbXQodCxlLGh0KGUpKSxsPWRyKG1lKCkuZmxvd2NoYXJ0Py5odG1sTGFiZWxzKSx1PWEud2lkdGgrKGUucGFkZGluZz8/MCksaD11K2EuaGVpZ2h0LGY9dSthLmhlaWdodCxkPVt7eDowLHk6MH0se3g6Zix5OjB9LHt4OmYvMix5Oi1ofV0se2Nzc1N0eWxlczpwfT1lLG09amUuc3ZnKGkpLGc9UWUoZSx7fSk7ZS5sb29rIT09ImhhbmREcmF3biImJihnLnJvdWdobmVzcz0wLGcuZmlsbFN0eWxlPSJzb2xpZCIpO2xldCB5PVh0KGQpLHY9bS5wYXRoKHksZykseD1pLmluc2VydCgoKT0+diwiOmZpcnN0LWNoaWxkIikuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7LWgvMn0sICR7aC8yfSlgKTtyZXR1cm4gcCYmZS5sb29rIT09ImhhbmREcmF3biImJnguc2VsZWN0Q2hpbGRyZW4oInBhdGgiKS5hdHRyKCJzdHlsZSIscCksbiYmZS5sb29rIT09ImhhbmREcmF3biImJnguc2VsZWN0Q2hpbGRyZW4oInBhdGgiKS5hdHRyKCJzdHlsZSIsbiksZS53aWR0aD11LGUuaGVpZ2h0PWgsS2UoZSx4KSxzLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1hLndpZHRoLzItKGEueC0oYS5sZWZ0Pz8wKSl9LCAke2gvMi0oYS5oZWlnaHQrKGUucGFkZGluZz8/MCkvKGw/MjoxKS0oYS55LShhLnRvcD8/MCkpKX0pYCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oYil7cmV0dXJuIFguaW5mbygiVHJpYW5nbGUgaW50ZXJzZWN0IixlLGQsYiksWGUucG9seWdvbihlLGQsYil9LGl9dmFyIFdKPU4oKCk9PnsidXNlIHN0cmljdCI7eXQoKTtGdCgpO0h0KCk7enQoKTtXdCgpO0Z0KCk7cHIoKTtHdCgpO28oSEosInRyaWFuZ2xlIil9KTthc3luYyBmdW5jdGlvbiBxSih0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WWUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0e3NoYXBlU3ZnOmksYmJveDphLGxhYmVsOnN9PWF3YWl0IG10KHQsZSxodChlKSksbD1NYXRoLm1heChhLndpZHRoKyhlLnBhZGRpbmc/PzApKjIsZT8ud2lkdGg/PzApLHU9TWF0aC5tYXgoYS5oZWlnaHQrKGUucGFkZGluZz8/MCkqMixlPy5oZWlnaHQ/PzApLGg9dS84LGY9dStoLHtjc3NTdHlsZXM6ZH09ZSxtPTcwLWwsZz1tPjA/bS8yOjAseT1qZS5zdmcoaSksdj1RZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKHYucm91Z2huZXNzPTAsdi5maWxsU3R5bGU9InNvbGlkIik7bGV0IHg9W3t4Oi1sLzItZyx5OmYvMn0sLi4uR28oLWwvMi1nLGYvMixsLzIrZyxmLzIsaCwuOCkse3g6bC8yK2cseTotZi8yfSx7eDotbC8yLWcseTotZi8yfV0sYj1YdCh4KSxUPXkucGF0aChiLHYpLFM9aS5pbnNlcnQoKCk9PlQsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBTLmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIiksZCYmZS5sb29rIT09ImhhbmREcmF3biImJlMuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLGQpLG4mJmUubG9vayE9PSJoYW5kRHJhd24iJiZTLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixuKSxTLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgwLCR7LWgvMn0pYCkscy5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstbC8yKyhlLnBhZGRpbmc/PzApLShhLngtKGEubGVmdD8/MCkpfSwkey11LzIrKGUucGFkZGluZz8/MCktaC0oYS55LShhLnRvcD8/MCkpfSlgKSxLZShlLFMpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHcpe3JldHVybiBYZS5wb2x5Z29uKGUseCx3KX0saX12YXIgWUo9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO0h0KCk7V3QoKTt6dCgpO28ocUosIndhdmVFZGdlZFJlY3RhbmdsZSIpfSk7YXN5bmMgZnVuY3Rpb24gWEoodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVllKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YX09YXdhaXQgbXQodCxlLGh0KGUpKSxzPTEwMCxsPTUwLHU9TWF0aC5tYXgoYS53aWR0aCsoZS5wYWRkaW5nPz8wKSoyLGU/LndpZHRoPz8wKSxoPU1hdGgubWF4KGEuaGVpZ2h0KyhlLnBhZGRpbmc/PzApKjIsZT8uaGVpZ2h0Pz8wKSxmPXUvaCxkPXUscD1oO2Q+cCpmP3A9ZC9mOmQ9cCpmLGQ9TWF0aC5tYXgoZCxzKSxwPU1hdGgubWF4KHAsbCk7bGV0IG09TWF0aC5taW4ocCouMixwLzQpLGc9cCttKjIse2Nzc1N0eWxlczp5fT1lLHY9amUuc3ZnKGkpLHg9UWUoZSx7fSk7ZS5sb29rIT09ImhhbmREcmF3biImJih4LnJvdWdobmVzcz0wLHguZmlsbFN0eWxlPSJzb2xpZCIpO2xldCBiPVt7eDotZC8yLHk6Zy8yfSwuLi5HbygtZC8yLGcvMixkLzIsZy8yLG0sMSkse3g6ZC8yLHk6LWcvMn0sLi4uR28oZC8yLC1nLzIsLWQvMiwtZy8yLG0sLTEpXSxUPVh0KGIpLFM9di5wYXRoKFQseCksdz1pLmluc2VydCgoKT0+UywiOmZpcnN0LWNoaWxkIik7cmV0dXJuIHcuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKSx5JiZlLmxvb2shPT0iaGFuZERyYXduIiYmdy5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJzdHlsZSIseSksbiYmZS5sb29rIT09ImhhbmREcmF3biImJncuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLG4pLEtlKGUsdyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oRSl7cmV0dXJuIFhlLnBvbHlnb24oZSxiLEUpfSxpfXZhciBqSj1OKCgpPT57InVzZSBzdHJpY3QiO0Z0KCk7SHQoKTt6dCgpO1d0KCk7byhYSiwid2F2ZVJlY3RhbmdsZSIpfSk7YXN5bmMgZnVuY3Rpb24gS0oodCxlKXtsZXR7bGFiZWxTdHlsZXM6cixub2RlU3R5bGVzOm59PVllKGUpO2UubGFiZWxTdHlsZT1yO2xldHtzaGFwZVN2ZzppLGJib3g6YSxsYWJlbDpzfT1hd2FpdCBtdCh0LGUsaHQoZSkpLGw9TWF0aC5tYXgoYS53aWR0aCsoZS5wYWRkaW5nPz8wKSoyLGU/LndpZHRoPz8wKSx1PU1hdGgubWF4KGEuaGVpZ2h0KyhlLnBhZGRpbmc/PzApKjIsZT8uaGVpZ2h0Pz8wKSxoPTUsZj0tbC8yLGQ9LXUvMix7Y3NzU3R5bGVzOnB9PWUsbT1qZS5zdmcoaSksZz1RZShlLHt9KSx5PVt7eDpmLWgseTpkLWh9LHt4OmYtaCx5OmQrdX0se3g6ZitsLHk6ZCt1fSx7eDpmK2wseTpkLWh9XSx2PWBNJHtmLWh9LCR7ZC1ofSBMJHtmK2x9LCR7ZC1ofSBMJHtmK2x9LCR7ZCt1fSBMJHtmLWh9LCR7ZCt1fSBMJHtmLWh9LCR7ZC1ofQogICAgICAgICAgICAgICAgTSR7Zi1ofSwke2R9IEwke2YrbH0sJHtkfQogICAgICAgICAgICAgICAgTSR7Zn0sJHtkLWh9IEwke2Z9LCR7ZCt1fWA7ZS5sb29rIT09ImhhbmREcmF3biImJihnLnJvdWdobmVzcz0wLGcuZmlsbFN0eWxlPSJzb2xpZCIpO2xldCB4PW0ucGF0aCh2LGcpLGI9aS5pbnNlcnQoKCk9PngsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBiLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke2gvMn0sICR7aC8yfSlgKSxiLmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIikscCYmZS5sb29rIT09ImhhbmREcmF3biImJmIuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLHApLG4mJmUubG9vayE9PSJoYW5kRHJhd24iJiZiLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixuKSxzLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey0oYS53aWR0aC8yKStoLzItKGEueC0oYS5sZWZ0Pz8wKSl9LCAkey0oYS5oZWlnaHQvMikraC8yLShhLnktKGEudG9wPz8wKSl9KWApLEtlKGUsYiksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oVCl7cmV0dXJuIFhlLnBvbHlnb24oZSx5LFQpfSxpfXZhciBRSj1OKCgpPT57InVzZSBzdHJpY3QiO0Z0KCk7enQoKTtXdCgpO0h0KCk7byhLSiwid2luZG93UGFuZSIpfSk7YXN5bmMgZnVuY3Rpb24gTUwodCxlKXtsZXQgcj1lO2lmKHIuYWxpYXMmJihlLmxhYmVsPXIuYWxpYXMpLGUubG9vaz09PSJoYW5kRHJhd24iKXtsZXR7dGhlbWVWYXJpYWJsZXM6VX09dHIoKSx7YmFja2dyb3VuZDpLfT1VLGVlPXsuLi5lLGlkOmUuaWQrIi1iYWNrZ3JvdW5kIixsb29rOiJkZWZhdWx0Iixjc3NTdHlsZXM6WyJzdHJva2U6IG5vbmUiLGBmaWxsOiAke0t9YF19O2F3YWl0IE1MKHQsZWUpfWxldCBuPXRyKCk7ZS51c2VIdG1sTGFiZWxzPW4uaHRtbExhYmVscztsZXQgaT1uLmVyPy5kaWFncmFtUGFkZGluZz8/MTAsYT1uLmVyPy5lbnRpdHlQYWRkaW5nPz82LHtjc3NTdHlsZXM6c309ZSx7bGFiZWxTdHlsZXM6bCxub2RlU3R5bGVzOnV9PVllKGUpO2lmKHIuYXR0cmlidXRlcy5sZW5ndGg9PT0wJiZlLmxhYmVsKXtsZXQgVT17cng6MCxyeTowLGxhYmVsUGFkZGluZ1g6aSxsYWJlbFBhZGRpbmdZOmkqMS41LGNsYXNzZXM6IiJ9O3JhKGUubGFiZWwsbikrVS5sYWJlbFBhZGRpbmdYKjI8bi5lci5taW5FbnRpdHlXaWR0aCYmKGUud2lkdGg9bi5lci5taW5FbnRpdHlXaWR0aCk7bGV0IEs9YXdhaXQgT3UodCxlLFUpO2lmKCFkcihuLmh0bWxMYWJlbHMpKXtsZXQgZWU9Sy5zZWxlY3QoInRleHQiKSxZPWVlLm5vZGUoKT8uZ2V0QkJveCgpO2VlLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgkey1ZLndpZHRoLzJ9LCAwKWApfXJldHVybiBLfW4uaHRtbExhYmVsc3x8KGkqPTEuMjUsYSo9MS4yNSk7bGV0IGg9aHQoZSk7aHx8KGg9Im5vZGUgZGVmYXVsdCIpO2xldCBmPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLGgpLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxkPWF3YWl0IEwyKGYsZS5sYWJlbD8/IiIsbiwwLDAsWyJuYW1lIl0sbCk7ZC5oZWlnaHQrPWE7bGV0IHA9MCxtPVtdLGc9W10seT0wLHY9MCx4PTAsYj0wLFQ9ITAsUz0hMDtmb3IobGV0IFUgb2Ygci5hdHRyaWJ1dGVzKXtsZXQgSz1hd2FpdCBMMihmLFUudHlwZSxuLDAscCxbImF0dHJpYnV0ZS10eXBlIl0sbCk7eT1NYXRoLm1heCh5LEsud2lkdGgraSk7bGV0IGVlPWF3YWl0IEwyKGYsVS5uYW1lLG4sMCxwLFsiYXR0cmlidXRlLW5hbWUiXSxsKTt2PU1hdGgubWF4KHYsZWUud2lkdGgraSk7bGV0IFk9YXdhaXQgTDIoZixVLmtleXMuam9pbigpLG4sMCxwLFsiYXR0cmlidXRlLWtleXMiXSxsKTt4PU1hdGgubWF4KHgsWS53aWR0aCtpKTtsZXQgY2U9YXdhaXQgTDIoZixVLmNvbW1lbnQsbiwwLHAsWyJhdHRyaWJ1dGUtY29tbWVudCJdLGwpO2I9TWF0aC5tYXgoYixjZS53aWR0aCtpKTtsZXQgWj1NYXRoLm1heChLLmhlaWdodCxlZS5oZWlnaHQsWS5oZWlnaHQsY2UuaGVpZ2h0KSthO2cucHVzaCh7eU9mZnNldDpwLHJvd0hlaWdodDpafSkscCs9Wn1sZXQgdz00O3g8PWkmJihUPSExLHg9MCx3LS0pLGI8PWkmJihTPSExLGI9MCx3LS0pO2xldCBFPWYubm9kZSgpLmdldEJCb3goKTtpZihkLndpZHRoK2kqMi0oeSt2K3grYik+MCl7bGV0IFU9ZC53aWR0aCtpKjItKHkrdit4K2IpO3krPVUvdyx2Kz1VL3cseD4wJiYoeCs9VS93KSxiPjAmJihiKz1VL3cpfWxldCBfPXkrdit4K2IsQz1qZS5zdmcoZiksRD1RZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKEQucm91Z2huZXNzPTAsRC5maWxsU3R5bGU9InNvbGlkIik7bGV0IE89MDtnLmxlbmd0aD4wJiYoTz1nLnJlZHVjZSgoVSxLKT0+VSsoSz8ucm93SGVpZ2h0Pz8wKSwwKSk7bGV0IFI9TWF0aC5tYXgoRS53aWR0aCtpKjIsZT8ud2lkdGh8fDAsXyksaz1NYXRoLm1heCgoTz8/MCkrZC5oZWlnaHQsZT8uaGVpZ2h0fHwwKSxMPS1SLzIsQT0tay8yO2Yuc2VsZWN0QWxsKCJnOm5vdCg6Zmlyc3QtY2hpbGQpIikuZWFjaCgoVSxLLGVlKT0+e2xldCBZPUdlKGVlW0tdKSxjZT1ZLmF0dHIoInRyYW5zZm9ybSIpLFo9MCx1ZT0wO2lmKGNlKXtsZXQgaj1SZWdFeHAoL3RyYW5zbGF0ZVwoKFteLF0rKSwoW14pXSspXCkvKS5leGVjKGNlKTtqJiYoWj1wYXJzZUZsb2F0KGpbMV0pLHVlPXBhcnNlRmxvYXQoalsyXSksWS5hdHRyKCJjbGFzcyIpLmluY2x1ZGVzKCJhdHRyaWJ1dGUtbmFtZSIpP1orPXk6WS5hdHRyKCJjbGFzcyIpLmluY2x1ZGVzKCJhdHRyaWJ1dGUta2V5cyIpP1orPXkrdjpZLmF0dHIoImNsYXNzIikuaW5jbHVkZXMoImF0dHJpYnV0ZS1jb21tZW50IikmJihaKz15K3YreCkpfVkuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7TCtpLzIrWn0sICR7dWUrQStkLmhlaWdodCthLzJ9KWApfSksZi5zZWxlY3QoIi5uYW1lIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWQud2lkdGgvMisiLCAiKyhBK2EvMikrIikiKTtsZXQgST1DLnJlY3RhbmdsZShMLEEsUixrLEQpLE09Zi5pbnNlcnQoKCk9PkksIjpmaXJzdC1jaGlsZCIpLmF0dHIoInN0eWxlIixzLmpvaW4oIiIpKSx7dGhlbWVWYXJpYWJsZXM6UH09dHIoKSx7cm93RXZlbjpCLHJvd09kZDpGLG5vZGVCb3JkZXI6en09UDttLnB1c2goMCk7Zm9yKGxldFtVLEtdb2YgZy5lbnRyaWVzKCkpe2xldCBZPShVKzEpJTI9PT0wJiZLLnlPZmZzZXQhPT0wLGNlPUMucmVjdGFuZ2xlKEwsZC5oZWlnaHQrQStLPy55T2Zmc2V0LFIsSz8ucm93SGVpZ2h0LHsuLi5ELGZpbGw6WT9COkYsc3Ryb2tlOnp9KTtmLmluc2VydCgoKT0+Y2UsImcubGFiZWwiKS5hdHRyKCJzdHlsZSIscy5qb2luKCIiKSkuYXR0cigiY2xhc3MiLGByb3ctcmVjdC0ke1k/ImV2ZW4iOiJvZGQifWApfWxldCAkPUMubGluZShMLGQuaGVpZ2h0K0EsUitMLGQuaGVpZ2h0K0EsRCk7Zi5pbnNlcnQoKCk9PiQpLmF0dHIoImNsYXNzIiwiZGl2aWRlciIpLCQ9Qy5saW5lKHkrTCxkLmhlaWdodCtBLHkrTCxrK0EsRCksZi5pbnNlcnQoKCk9PiQpLmF0dHIoImNsYXNzIiwiZGl2aWRlciIpLFQmJigkPUMubGluZSh5K3YrTCxkLmhlaWdodCtBLHkrditMLGsrQSxEKSxmLmluc2VydCgoKT0+JCkuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikpLFMmJigkPUMubGluZSh5K3YreCtMLGQuaGVpZ2h0K0EseSt2K3grTCxrK0EsRCksZi5pbnNlcnQoKCk9PiQpLmF0dHIoImNsYXNzIiwiZGl2aWRlciIpKTtmb3IobGV0IFUgb2YgbSkkPUMubGluZShMLGQuaGVpZ2h0K0ErVSxSK0wsZC5oZWlnaHQrQStVLEQpLGYuaW5zZXJ0KCgpPT4kKS5hdHRyKCJjbGFzcyIsImRpdmlkZXIiKTtpZihLZShlLE0pLHUmJmUubG9vayE9PSJoYW5kRHJhd24iKXtsZXQgSz11LnNwbGl0KCI7Iik/LmZpbHRlcihlZT0+ZWUuaW5jbHVkZXMoInN0cm9rZSIpKT8ubWFwKGVlPT5gJHtlZX1gKS5qb2luKCI7ICIpO2Yuc2VsZWN0QWxsKCJwYXRoIikuYXR0cigic3R5bGUiLEs/PyIiKSxmLnNlbGVjdEFsbCgiLnJvdy1yZWN0LWV2ZW4gcGF0aCIpLmF0dHIoInN0eWxlIix1KX1yZXR1cm4gZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oVSl7cmV0dXJuIFhlLnJlY3QoZSxVKX0sZn1hc3luYyBmdW5jdGlvbiBMMih0LGUscixuPTAsaT0wLGE9W10scz0iIil7bGV0IGw9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsYGxhYmVsICR7YS5qb2luKCIgIil9YCkuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7bn0sICR7aX0pYCkuYXR0cigic3R5bGUiLHMpO2UhPT1pYyhlKSYmKGU9aWMoZSksZT1lLnJlcGxhY2VBbGwoIjwiLCImbHQ7IikucmVwbGFjZUFsbCgiPiIsIiZndDsiKSk7bGV0IHU9bC5ub2RlKCkuYXBwZW5kQ2hpbGQoYXdhaXQgcW4obCxlLHt3aWR0aDpyYShlLHIpKzEwMCxzdHlsZTpzLHVzZUh0bWxMYWJlbHM6ci5odG1sTGFiZWxzfSxyKSk7aWYoZS5pbmNsdWRlcygiJmx0OyIpfHxlLmluY2x1ZGVzKCImZ3Q7Iikpe2xldCBmPXUuY2hpbGRyZW5bMF07Zm9yKGYudGV4dENvbnRlbnQ9Zi50ZXh0Q29udGVudC5yZXBsYWNlQWxsKCImbHQ7IiwiPCIpLnJlcGxhY2VBbGwoIiZndDsiLCI+Iik7Zi5jaGlsZE5vZGVzWzBdOylmPWYuY2hpbGROb2Rlc1swXSxmLnRleHRDb250ZW50PWYudGV4dENvbnRlbnQucmVwbGFjZUFsbCgiJmx0OyIsIjwiKS5yZXBsYWNlQWxsKCImZ3Q7IiwiPiIpfWxldCBoPXUuZ2V0QkJveCgpO2lmKGRyKHIuaHRtbExhYmVscykpe2xldCBmPXUuY2hpbGRyZW5bMF07Zi5zdHlsZS50ZXh0QWxpZ249InN0YXJ0IjtsZXQgZD1HZSh1KTtoPWYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZC5hdHRyKCJ3aWR0aCIsaC53aWR0aCksZC5hdHRyKCJoZWlnaHQiLGguaGVpZ2h0KX1yZXR1cm4gaH12YXIgWko9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO0h0KCk7enQoKTtXdCgpO0VtKCk7bWkoKTthbygpO3ByKCk7ZnIoKTtlcigpO28oTUwsImVyQm94Iik7byhMMiwiYWRkVGV4dCIpfSk7YXN5bmMgZnVuY3Rpb24gSkoodCxlLHIsbixpPXIuY2xhc3MucGFkZGluZz8/MTIpe2xldCBhPW4/MDozLHM9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsaHQoZSkpLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxsPW51bGwsdT1udWxsLGg9bnVsbCxmPW51bGwsZD0wLHA9MCxtPTA7aWYobD1zLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiYW5ub3RhdGlvbi1ncm91cCB0ZXh0IiksZS5hbm5vdGF0aW9ucy5sZW5ndGg+MCl7bGV0IGI9ZS5hbm5vdGF0aW9uc1swXTthd2FpdCBudyhsLHt0ZXh0OmBceEFCJHtifVx4QkJgfSwwKSxkPWwubm9kZSgpLmdldEJCb3goKS5oZWlnaHR9dT1zLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwtZ3JvdXAgdGV4dCIpLGF3YWl0IG53KHUsZSwwLFsiZm9udC13ZWlnaHQ6IGJvbGRlciJdKTtsZXQgZz11Lm5vZGUoKS5nZXRCQm94KCk7cD1nLmhlaWdodCxoPXMuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJtZW1iZXJzLWdyb3VwIHRleHQiKTtsZXQgeT0wO2ZvcihsZXQgYiBvZiBlLm1lbWJlcnMpe2xldCBUPWF3YWl0IG53KGgsYix5LFtiLnBhcnNlQ2xhc3NpZmllcigpXSk7eSs9VCthfW09aC5ub2RlKCkuZ2V0QkJveCgpLmhlaWdodCxtPD0wJiYobT1pLzIpLGY9cy5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm1ldGhvZHMtZ3JvdXAgdGV4dCIpO2xldCB2PTA7Zm9yKGxldCBiIG9mIGUubWV0aG9kcyl7bGV0IFQ9YXdhaXQgbncoZixiLHYsW2IucGFyc2VDbGFzc2lmaWVyKCldKTt2Kz1UK2F9bGV0IHg9cy5ub2RlKCkuZ2V0QkJveCgpO2lmKGwhPT1udWxsKXtsZXQgYj1sLm5vZGUoKS5nZXRCQm94KCk7bC5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstYi53aWR0aC8yfSlgKX1yZXR1cm4gdS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstZy53aWR0aC8yfSwgJHtkfSlgKSx4PXMubm9kZSgpLmdldEJCb3goKSxoLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgwLCAke2QrcCtpKjJ9KWApLHg9cy5ub2RlKCkuZ2V0QkJveCgpLGYuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKDAsICR7ZCtwKyhtP20raSo0OmkqMil9KWApLHg9cy5ub2RlKCkuZ2V0QkJveCgpLHtzaGFwZVN2ZzpzLGJib3g6eH19YXN5bmMgZnVuY3Rpb24gbncodCxlLHIsbj1bXSl7bGV0IGk9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuYXR0cigic3R5bGUiLG4uam9pbigiOyAiKSksYT10cigpLHM9InVzZUh0bWxMYWJlbHMiaW4gZT9lLnVzZUh0bWxMYWJlbHM6ZHIoYS5odG1sTGFiZWxzKT8/ITAsbD0iIjsidGV4dCJpbiBlP2w9ZS50ZXh0Omw9ZS5sYWJlbCwhcyYmbC5zdGFydHNXaXRoKCJcXCIpJiYobD1sLnN1YnN0cmluZygxKSkseWkobCkmJihzPSEwKTtsZXQgdT1hd2FpdCBxbihpLGZkKG5hKGwpKSx7d2lkdGg6cmEobCxhKSs1MCxjbGFzc2VzOiJtYXJrZG93bi1ub2RlLWxhYmVsIix1c2VIdG1sTGFiZWxzOnN9LGEpLGgsZj0xO2lmKHMpe2xldCBkPXUuY2hpbGRyZW5bMF0scD1HZSh1KTtmPWQuaW5uZXJIVE1MLnNwbGl0KCI8YnI+IikubGVuZ3RoLGQuaW5uZXJIVE1MLmluY2x1ZGVzKCI8L21hdGg+IikmJihmKz1kLmlubmVySFRNTC5zcGxpdCgiPG1yb3c+IikubGVuZ3RoLTEpO2xldCBtPWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImltZyIpO2lmKG0pe2xldCBnPWwucmVwbGFjZSgvPGltZ1tePl0qPi9nLCIiKS50cmltKCk9PT0iIjthd2FpdCBQcm9taXNlLmFsbChbLi4ubV0ubWFwKHk9Pm5ldyBQcm9taXNlKHY9PntmdW5jdGlvbiB4KCl7aWYoeS5zdHlsZS5kaXNwbGF5PSJmbGV4Iix5LnN0eWxlLmZsZXhEaXJlY3Rpb249ImNvbHVtbiIsZyl7bGV0IGI9YS5mb250U2l6ZT8udG9TdHJpbmcoKT8/d2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuZm9udFNpemUsUz1wYXJzZUludChiLDEwKSo1KyJweCI7eS5zdHlsZS5taW5XaWR0aD1TLHkuc3R5bGUubWF4V2lkdGg9U31lbHNlIHkuc3R5bGUud2lkdGg9IjEwMCUiO3YoeSl9byh4LCJzZXR1cEltYWdlIiksc2V0VGltZW91dCgoKT0+e3kuY29tcGxldGUmJngoKX0pLHkuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLHgpLHkuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIseCl9KSkpfWg9ZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxwLmF0dHIoIndpZHRoIixoLndpZHRoKSxwLmF0dHIoImhlaWdodCIsaC5oZWlnaHQpfWVsc2V7bi5pbmNsdWRlcygiZm9udC13ZWlnaHQ6IGJvbGRlciIpJiZHZSh1KS5zZWxlY3RBbGwoInRzcGFuIikuYXR0cigiZm9udC13ZWlnaHQiLCIiKSxmPXUuY2hpbGRyZW4ubGVuZ3RoO2xldCBkPXUuY2hpbGRyZW5bMF07KHUudGV4dENvbnRlbnQ9PT0iInx8dS50ZXh0Q29udGVudC5pbmNsdWRlcygiJmd0IikpJiYoZC50ZXh0Q29udGVudD1sWzBdK2wuc3Vic3RyaW5nKDEpLnJlcGxhY2VBbGwoIiZndDsiLCI+IikucmVwbGFjZUFsbCgiJmx0OyIsIjwiKS50cmltKCksbFsxXT09PSIgIiYmKGQudGV4dENvbnRlbnQ9ZC50ZXh0Q29udGVudFswXSsiICIrZC50ZXh0Q29udGVudC5zdWJzdHJpbmcoMSkpKSxkLnRleHRDb250ZW50PT09InVuZGVmaW5lZCImJihkLnRleHRDb250ZW50PSIiKSxoPXUuZ2V0QkJveCgpfXJldHVybiBpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCIrKC1oLmhlaWdodC8oMipmKStyKSsiKSIpLGguaGVpZ2h0fXZhciBlZWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtmcigpO21pKCk7RnQoKTtlcigpO0d0KCk7YW8oKTtwcigpO28oSkosInRleHRIZWxwZXIiKTtvKG53LCJhZGRUZXh0Iil9KTthc3luYyBmdW5jdGlvbiB0ZWUodCxlKXtsZXQgcj1tZSgpLG49ci5jbGFzcy5wYWRkaW5nPz8xMixpPW4sYT1lLnVzZUh0bWxMYWJlbHM/P2RyKHIuaHRtbExhYmVscyk/PyEwLHM9ZTtzLmFubm90YXRpb25zPXMuYW5ub3RhdGlvbnM/P1tdLHMubWVtYmVycz1zLm1lbWJlcnM/P1tdLHMubWV0aG9kcz1zLm1ldGhvZHM/P1tdO2xldHtzaGFwZVN2ZzpsLGJib3g6dX09YXdhaXQgSkoodCxlLHIsYSxpKSx7bGFiZWxTdHlsZXM6aCxub2RlU3R5bGVzOmZ9PVllKGUpO2UubGFiZWxTdHlsZT1oLGUuY3NzU3R5bGVzPXMuc3R5bGVzfHwiIjtsZXQgZD1zLnN0eWxlcz8uam9pbigiOyIpfHxmfHwiIjtlLmNzc1N0eWxlc3x8KGUuY3NzU3R5bGVzPWQucmVwbGFjZUFsbCgiIWltcG9ydGFudCIsIiIpLnNwbGl0KCI7IikpO2xldCBwPXMubWVtYmVycy5sZW5ndGg9PT0wJiZzLm1ldGhvZHMubGVuZ3RoPT09MCYmIXIuY2xhc3M/LmhpZGVFbXB0eU1lbWJlcnNCb3gsbT1qZS5zdmcobCksZz1RZShlLHt9KTtlLmxvb2shPT0iaGFuZERyYXduIiYmKGcucm91Z2huZXNzPTAsZy5maWxsU3R5bGU9InNvbGlkIik7bGV0IHk9dS53aWR0aCx2PXUuaGVpZ2h0O3MubWVtYmVycy5sZW5ndGg9PT0wJiZzLm1ldGhvZHMubGVuZ3RoPT09MD92Kz1pOnMubWVtYmVycy5sZW5ndGg+MCYmcy5tZXRob2RzLmxlbmd0aD09PTAmJih2Kz1pKjIpO2xldCB4PS15LzIsYj0tdi8yLFQ9bS5yZWN0YW5nbGUoeC1uLGItbi0ocD9uOnMubWVtYmVycy5sZW5ndGg9PT0wJiZzLm1ldGhvZHMubGVuZ3RoPT09MD8tbi8yOjApLHkrMipuLHYrMipuKyhwP24qMjpzLm1lbWJlcnMubGVuZ3RoPT09MCYmcy5tZXRob2RzLmxlbmd0aD09PTA/LW46MCksZyksUz1sLmluc2VydCgoKT0+VCwiOmZpcnN0LWNoaWxkIik7Uy5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpO2xldCB3PVMubm9kZSgpLmdldEJCb3goKTtsLnNlbGVjdEFsbCgiLnRleHQiKS5lYWNoKChELE8sUik9PntsZXQgaz1HZShSW09dKSxMPWsuYXR0cigidHJhbnNmb3JtIiksQT0wO2lmKEwpe2xldCBCPVJlZ0V4cCgvdHJhbnNsYXRlXCgoW14sXSspLChbXildKylcKS8pLmV4ZWMoTCk7QiYmKEE9cGFyc2VGbG9hdChCWzJdKSl9bGV0IEk9QStiK24tKHA/bjpzLm1lbWJlcnMubGVuZ3RoPT09MCYmcy5tZXRob2RzLmxlbmd0aD09PTA/LW4vMjowKTthfHwoSS09NCk7bGV0IE09eDsoay5hdHRyKCJjbGFzcyIpLmluY2x1ZGVzKCJsYWJlbC1ncm91cCIpfHxrLmF0dHIoImNsYXNzIikuaW5jbHVkZXMoImFubm90YXRpb24tZ3JvdXAiKSkmJihNPS1rLm5vZGUoKT8uZ2V0QkJveCgpLndpZHRoLzJ8fDAsbC5zZWxlY3RBbGwoInRleHQiKS5lYWNoKGZ1bmN0aW9uKFAsQixGKXt3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShGW0JdKS50ZXh0QW5jaG9yPT09Im1pZGRsZSImJihNPTApfSkpLGsuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7TX0sICR7SX0pYCl9KTtsZXQgRT1sLnNlbGVjdCgiLmFubm90YXRpb24tZ3JvdXAiKS5ub2RlKCkuZ2V0QkJveCgpLmhlaWdodC0ocD9uLzI6MCl8fDAsXz1sLnNlbGVjdCgiLmxhYmVsLWdyb3VwIikubm9kZSgpLmdldEJCb3goKS5oZWlnaHQtKHA/bi8yOjApfHwwLEM9bC5zZWxlY3QoIi5tZW1iZXJzLWdyb3VwIikubm9kZSgpLmdldEJCb3goKS5oZWlnaHQtKHA/bi8yOjApfHwwO2lmKHMubWVtYmVycy5sZW5ndGg+MHx8cy5tZXRob2RzLmxlbmd0aD4wfHxwKXtsZXQgRD1tLmxpbmUody54LEUrXytiK24sdy54K3cud2lkdGgsRStfK2IrbixnKTtsLmluc2VydCgoKT0+RCkuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigic3R5bGUiLGQpfWlmKHB8fHMubWVtYmVycy5sZW5ndGg+MHx8cy5tZXRob2RzLmxlbmd0aD4wKXtsZXQgRD1tLmxpbmUody54LEUrXytDK2IraSoyK24sdy54K3cud2lkdGgsRStfK0MrYituK2kqMixnKTtsLmluc2VydCgoKT0+RCkuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigic3R5bGUiLGQpfWlmKHMubG9vayE9PSJoYW5kRHJhd24iJiZsLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0eWxlIixkKSxTLnNlbGVjdCgiOm50aC1jaGlsZCgyKSIpLmF0dHIoInN0eWxlIixkKSxsLnNlbGVjdEFsbCgiLmRpdmlkZXIiKS5zZWxlY3QoInBhdGgiKS5hdHRyKCJzdHlsZSIsZCksZS5sYWJlbFN0eWxlP2wuc2VsZWN0QWxsKCJzcGFuIikuYXR0cigic3R5bGUiLGUubGFiZWxTdHlsZSk6bC5zZWxlY3RBbGwoInNwYW4iKS5hdHRyKCJzdHlsZSIsZCksIWEpe2xldCBEPVJlZ0V4cCgvY29sb3Jccyo6XHMqKFteO10qKS8pLE89RC5leGVjKGQpO2lmKE8pe2xldCBSPU9bMF0ucmVwbGFjZSgiY29sb3IiLCJmaWxsIik7bC5zZWxlY3RBbGwoInRzcGFuIikuYXR0cigic3R5bGUiLFIpfWVsc2UgaWYoaCl7bGV0IFI9RC5leGVjKGgpO2lmKFIpe2xldCBrPVJbMF0ucmVwbGFjZSgiY29sb3IiLCJmaWxsIik7bC5zZWxlY3RBbGwoInRzcGFuIikuYXR0cigic3R5bGUiLGspfX19cmV0dXJuIEtlKGUsUyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oRCl7cmV0dXJuIFhlLnJlY3QoZSxEKX0sbH12YXIgcmVlPU4oKCk9PnsidXNlIHN0cmljdCI7RnQoKTtHdCgpO2ZyKCk7V3QoKTt6dCgpO0h0KCk7ZWVlKCk7cHIoKTtvKHRlZSwiY2xhc3NCb3giKX0pO2FzeW5jIGZ1bmN0aW9uIG5lZSh0LGUpe2xldHtsYWJlbFN0eWxlczpyLG5vZGVTdHlsZXM6bn09WWUoZSk7ZS5sYWJlbFN0eWxlPXI7bGV0IGk9ZSxhPWUscz0yMCxsPTIwLHU9InZlcmlmeU1ldGhvZCJpbiBlLGg9aHQoZSksZj10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIixoKS5hdHRyKCJpZCIsZS5kb21JZD8/ZS5pZCksZDt1P2Q9YXdhaXQgUHUoZixgJmx0OyZsdDske2kudHlwZX0mZ3Q7Jmd0O2AsMCxlLmxhYmVsU3R5bGUpOmQ9YXdhaXQgUHUoZiwiJmx0OyZsdDtFbGVtZW50Jmd0OyZndDsiLDAsZS5sYWJlbFN0eWxlKTtsZXQgcD1kLG09YXdhaXQgUHUoZixpLm5hbWUscCxlLmxhYmVsU3R5bGUrIjsgZm9udC13ZWlnaHQ6IGJvbGQ7Iik7aWYocCs9bStsLHUpe2xldCBFPWF3YWl0IFB1KGYsYCR7aS5yZXF1aXJlbWVudElkP2BpZDogJHtpLnJlcXVpcmVtZW50SWR9YDoiIn1gLHAsZS5sYWJlbFN0eWxlKTtwKz1FO2xldCBfPWF3YWl0IFB1KGYsYCR7aS50ZXh0P2BUZXh0OiAke2kudGV4dH1gOiIifWAscCxlLmxhYmVsU3R5bGUpO3ArPV87bGV0IEM9YXdhaXQgUHUoZixgJHtpLnJpc2s/YFJpc2s6ICR7aS5yaXNrfWA6IiJ9YCxwLGUubGFiZWxTdHlsZSk7cCs9Qyxhd2FpdCBQdShmLGAke2kudmVyaWZ5TWV0aG9kP2BWZXJpZmljYXRpb246ICR7aS52ZXJpZnlNZXRob2R9YDoiIn1gLHAsZS5sYWJlbFN0eWxlKX1lbHNle2xldCBFPWF3YWl0IFB1KGYsYCR7YS50eXBlP2BUeXBlOiAke2EudHlwZX1gOiIifWAscCxlLmxhYmVsU3R5bGUpO3ArPUUsYXdhaXQgUHUoZixgJHthLmRvY1JlZj9gRG9jIFJlZjogJHthLmRvY1JlZn1gOiIifWAscCxlLmxhYmVsU3R5bGUpfWxldCBnPShmLm5vZGUoKT8uZ2V0QkJveCgpLndpZHRoPz8yMDApK3MseT0oZi5ub2RlKCk/LmdldEJCb3goKS5oZWlnaHQ/PzIwMCkrcyx2PS1nLzIseD0teS8yLGI9amUuc3ZnKGYpLFQ9UWUoZSx7fSk7ZS5sb29rIT09ImhhbmREcmF3biImJihULnJvdWdobmVzcz0wLFQuZmlsbFN0eWxlPSJzb2xpZCIpO2xldCBTPWIucmVjdGFuZ2xlKHYseCxnLHksVCksdz1mLmluc2VydCgoKT0+UywiOmZpcnN0LWNoaWxkIik7aWYody5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInN0eWxlIixuKSxmLnNlbGVjdEFsbCgiLmxhYmVsIikuZWFjaCgoRSxfLEMpPT57bGV0IEQ9R2UoQ1tfXSksTz1ELmF0dHIoInRyYW5zZm9ybSIpLFI9MCxrPTA7aWYoTyl7bGV0IE09UmVnRXhwKC90cmFuc2xhdGVcKChbXixdKyksKFteKV0rKVwpLykuZXhlYyhPKTtNJiYoUj1wYXJzZUZsb2F0KE1bMV0pLGs9cGFyc2VGbG9hdChNWzJdKSl9bGV0IEw9ay15LzIsQT12K3MvMjsoXz09PTB8fF89PT0xKSYmKEE9UiksRC5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtBfSwgJHtMK3N9KWApfSkscD5kK20rbCl7bGV0IEU9Yi5saW5lKHYseCtkK20rbCx2K2cseCtkK20rbCxUKTtmLmluc2VydCgoKT0+RSkuYXR0cigic3R5bGUiLG4pfXJldHVybiBLZShlLHcpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKEUpe3JldHVybiBYZS5yZWN0KGUsRSl9LGZ9YXN5bmMgZnVuY3Rpb24gUHUodCxlLHIsbj0iIil7aWYoZT09PSIiKXJldHVybiAwO2xldCBpPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLmF0dHIoInN0eWxlIixuKSxhPW1lKCkscz1hLmh0bWxMYWJlbHM/PyEwLGw9YXdhaXQgcW4oaSxmZChuYShlKSkse3dpZHRoOnJhKGUsYSkrNTAsY2xhc3NlczoibWFya2Rvd24tbm9kZS1sYWJlbCIsdXNlSHRtbExhYmVsczpzLHN0eWxlOm59LGEpLHU7aWYocyl7bGV0IGg9bC5jaGlsZHJlblswXSxmPUdlKGwpO3U9aC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxmLmF0dHIoIndpZHRoIix1LndpZHRoKSxmLmF0dHIoImhlaWdodCIsdS5oZWlnaHQpfWVsc2V7bGV0IGg9bC5jaGlsZHJlblswXTtmb3IobGV0IGYgb2YgaC5jaGlsZHJlbilmLnRleHRDb250ZW50PWYudGV4dENvbnRlbnQucmVwbGFjZUFsbCgiJmd0OyIsIj4iKS5yZXBsYWNlQWxsKCImbHQ7IiwiPCIpLG4mJmYuc2V0QXR0cmlidXRlKCJzdHlsZSIsbik7dT1sLmdldEJCb3goKSx1LmhlaWdodCs9Nn1yZXR1cm4gaS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHstdS53aWR0aC8yfSwkey11LmhlaWdodC8yK3J9KWApLHUuaGVpZ2h0fXZhciBpZWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO0h0KCk7enQoKTtXdCgpO2VyKCk7R3QoKTthbygpO2ZyKCk7byhuZWUsInJlcXVpcmVtZW50Qm94Iik7byhQdSwiYWRkVGV4dCIpfSk7YXN5bmMgZnVuY3Rpb24gYWVlKHQsZSx7Y29uZmlnOnJ9KXtsZXR7bGFiZWxTdHlsZXM6bixub2RlU3R5bGVzOml9PVllKGUpO2UubGFiZWxTdHlsZT1ufHwiIjtsZXQgYT0xMCxzPWUud2lkdGg7ZS53aWR0aD0oZS53aWR0aD8/MjAwKS0xMDtsZXR7c2hhcGVTdmc6bCxiYm94OnUsbGFiZWw6aH09YXdhaXQgbXQodCxlLGh0KGUpKSxmPWUucGFkZGluZ3x8MTAsZD0iIixwOyJ0aWNrZXQiaW4gZSYmZS50aWNrZXQmJnI/LmthbmJhbj8udGlja2V0QmFzZVVybCYmKGQ9cj8ua2FuYmFuPy50aWNrZXRCYXNlVXJsLnJlcGxhY2UoIiNUSUNLRVQjIixlLnRpY2tldCkscD1sLmluc2VydCgic3ZnOmEiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJjbGFzcyIsImthbmJhbi10aWNrZXQtbGluayIpLmF0dHIoInhsaW5rOmhyZWYiLGQpLmF0dHIoInRhcmdldCIsIl9ibGFuayIpKTtsZXQgbT17dXNlSHRtbExhYmVsczplLnVzZUh0bWxMYWJlbHMsbGFiZWxTdHlsZTplLmxhYmVsU3R5bGV8fCIiLHdpZHRoOmUud2lkdGgsaW1nOmUuaW1nLHBhZGRpbmc6ZS5wYWRkaW5nfHw4LGNlbnRlckxhYmVsOiExfSxnLHk7cD97bGFiZWw6ZyxiYm94Onl9PWF3YWl0IEhUKHAsInRpY2tldCJpbiBlJiZlLnRpY2tldHx8IiIsbSk6e2xhYmVsOmcsYmJveDp5fT1hd2FpdCBIVChsLCJ0aWNrZXQiaW4gZSYmZS50aWNrZXR8fCIiLG0pO2xldHtsYWJlbDp2LGJib3g6eH09YXdhaXQgSFQobCwiYXNzaWduZWQiaW4gZSYmZS5hc3NpZ25lZHx8IiIsbSk7ZS53aWR0aD1zO2xldCBiPTEwLFQ9ZT8ud2lkdGh8fDAsUz1NYXRoLm1heCh5LmhlaWdodCx4LmhlaWdodCkvMix3PU1hdGgubWF4KHUuaGVpZ2h0K2IqMixlPy5oZWlnaHR8fDApK1MsRT0tVC8yLF89LXcvMjtoLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhmLVQvMikrIiwgIisoLVMtdS5oZWlnaHQvMikrIikiKSxnLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhmLVQvMikrIiwgIisoLVMrdS5oZWlnaHQvMikrIikiKSx2LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhmK1QvMi14LndpZHRoLTIqYSkrIiwgIisoLVMrdS5oZWlnaHQvMikrIikiKTtsZXQgQyx7cng6RCxyeTpPfT1lLHtjc3NTdHlsZXM6Un09ZTtpZihlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0IGs9amUuc3ZnKGwpLEw9UWUoZSx7fSksQT1EfHxPP2sucGF0aChPYShFLF8sVCx3LER8fDApLEwpOmsucmVjdGFuZ2xlKEUsXyxULHcsTCk7Qz1sLmluc2VydCgoKT0+QSwiOmZpcnN0LWNoaWxkIiksQy5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInN0eWxlIixSfHxudWxsKX1lbHNle0M9bC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxDLmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIF9fQVBBX18iKS5hdHRyKCJzdHlsZSIsaSkuYXR0cigicngiLEQ/PzUpLmF0dHIoInJ5IixPPz81KS5hdHRyKCJ4IixFKS5hdHRyKCJ5IixfKS5hdHRyKCJ3aWR0aCIsVCkuYXR0cigiaGVpZ2h0Iix3KTtsZXQgaz0icHJpb3JpdHkiaW4gZSYmZS5wcmlvcml0eTtpZihrKXtsZXQgTD1sLmFwcGVuZCgibGluZSIpLEE9RSsyLEk9XytNYXRoLmZsb29yKChEPz8wKS8yKSxNPV8rdy1NYXRoLmZsb29yKChEPz8wKS8yKTtMLmF0dHIoIngxIixBKS5hdHRyKCJ5MSIsSSkuYXR0cigieDIiLEEpLmF0dHIoInkyIixNKS5hdHRyKCJzdHJva2Utd2lkdGgiLCI0IikuYXR0cigic3Ryb2tlIixLRGUoaykpfX1yZXR1cm4gS2UoZSxDKSxlLmhlaWdodD13LGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGspe3JldHVybiBYZS5yZWN0KGUsayl9LGx9dmFyIEtEZSxzZWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGdCgpO0h0KCk7WmgoKTt6dCgpO1d0KCk7S0RlPW8odD0+e3N3aXRjaCh0KXtjYXNlIlZlcnkgSGlnaCI6cmV0dXJuInJlZCI7Y2FzZSJIaWdoIjpyZXR1cm4ib3JhbmdlIjtjYXNlIk1lZGl1bSI6cmV0dXJuIG51bGw7Y2FzZSJMb3ciOnJldHVybiJibHVlIjtjYXNlIlZlcnkgTG93IjpyZXR1cm4ibGlnaHRibHVlIn19LCJjb2xvckZyb21Qcmlvcml0eSIpO28oYWVlLCJrYW5iYW5JdGVtIil9KTtmdW5jdGlvbiBvZWUodCl7cmV0dXJuIHQgaW4gSUx9dmFyIFFEZSxaRGUsSUwsT0w9TigoKT0+eyJ1c2Ugc3RyaWN0IjtYUSgpO1FRKCk7SlEoKTt0WigpO25aKCk7YVooKTtvWigpO2NaKCk7aFooKTtkWigpO21aKCk7eVooKTt4WigpO1RaKCk7a1ooKTtTWigpO0FaKCk7RFooKTtSWigpO01aKCk7T1ooKTtCWigpOyRaKCk7R1ooKTtVWigpO1daKCk7WVooKTtqWigpO1FaKCk7SlooKTt0SigpO25KKCk7YUooKTtvSigpO2NKKCk7aEooKTtkSigpO21KKCk7eUooKTt4SigpO1RKKCk7a0ooKTtTSigpO0FKKCk7REooKTtSSigpO01KKCk7T0ooKTtCSigpOyRKKCk7R0ooKTtVSigpO1dKKCk7WUooKTtqSigpO1FKKCk7WkooKTtyZWUoKTtpZWUoKTtzZWUoKTtRRGU9W3tzZW1hbnRpY05hbWU6IlByb2Nlc3MiLG5hbWU6IlJlY3RhbmdsZSIsc2hvcnROYW1lOiJyZWN0IixkZXNjcmlwdGlvbjoiU3RhbmRhcmQgcHJvY2VzcyBzaGFwZSIsYWxpYXNlczpbInByb2MiLCJwcm9jZXNzIiwicmVjdGFuZ2xlIl0saW50ZXJuYWxBbGlhc2VzOlsic3F1YXJlUmVjdCJdLGhhbmRsZXI6Ykp9LHtzZW1hbnRpY05hbWU6IkV2ZW50IixuYW1lOiJSb3VuZGVkIFJlY3RhbmdsZSIsc2hvcnROYW1lOiJyb3VuZGVkIixkZXNjcmlwdGlvbjoiUmVwcmVzZW50cyBhbiBldmVudCIsYWxpYXNlczpbImV2ZW50Il0saW50ZXJuYWxBbGlhc2VzOlsicm91bmRlZFJlY3QiXSxoYW5kbGVyOnBKfSx7c2VtYW50aWNOYW1lOiJUZXJtaW5hbCBQb2ludCIsbmFtZToiU3RhZGl1bSIsc2hvcnROYW1lOiJzdGFkaXVtIixkZXNjcmlwdGlvbjoiVGVybWluYWwgcG9pbnQiLGFsaWFzZXM6WyJ0ZXJtaW5hbCIsInBpbGwiXSxoYW5kbGVyOndKfSx7c2VtYW50aWNOYW1lOiJTdWJwcm9jZXNzIixuYW1lOiJGcmFtZWQgUmVjdGFuZ2xlIixzaG9ydE5hbWU6ImZyLXJlY3QiLGRlc2NyaXB0aW9uOiJTdWJwcm9jZXNzIixhbGlhc2VzOlsic3VicHJvY2VzcyIsInN1YnByb2MiLCJmcmFtZWQtcmVjdGFuZ2xlIiwic3Vicm91dGluZSJdLGhhbmRsZXI6TEp9LHtzZW1hbnRpY05hbWU6IkRhdGFiYXNlIixuYW1lOiJDeWxpbmRlciIsc2hvcnROYW1lOiJjeWwiLGRlc2NyaXB0aW9uOiJEYXRhYmFzZSBzdG9yYWdlIixhbGlhc2VzOlsiZGIiLCJkYXRhYmFzZSIsImN5bGluZGVyIl0saGFuZGxlcjpwWn0se3NlbWFudGljTmFtZToiU3RhcnQiLG5hbWU6IkNpcmNsZSIsc2hvcnROYW1lOiJjaXJjbGUiLGRlc2NyaXB0aW9uOiJTdGFydGluZyBwb2ludCIsYWxpYXNlczpbImNpcmMiXSxoYW5kbGVyOnJafSx7c2VtYW50aWNOYW1lOiJEZWNpc2lvbiIsbmFtZToiRGlhbW9uZCIsc2hvcnROYW1lOiJkaWFtIixkZXNjcmlwdGlvbjoiRGVjaXNpb24tbWFraW5nIHN0ZXAiLGFsaWFzZXM6WyJkZWNpc2lvbiIsImRpYW1vbmQiLCJxdWVzdGlvbiJdLGhhbmRsZXI6bEp9LHtzZW1hbnRpY05hbWU6IlByZXBhcmUgQ29uZGl0aW9uYWwiLG5hbWU6IkhleGFnb24iLHNob3J0TmFtZToiaGV4IixkZXNjcmlwdGlvbjoiUHJlcGFyYXRpb24gb3IgY29uZGl0aW9uIHN0ZXAiLGFsaWFzZXM6WyJoZXhhZ29uIiwicHJlcGFyZSJdLGhhbmRsZXI6X1p9LHtzZW1hbnRpY05hbWU6IkRhdGEgSW5wdXQvT3V0cHV0IixuYW1lOiJMZWFuIFJpZ2h0IixzaG9ydE5hbWU6ImxlYW4tciIsZGVzY3JpcHRpb246IlJlcHJlc2VudHMgaW5wdXQgb3Igb3V0cHV0IixhbGlhc2VzOlsibGVhbi1yaWdodCIsImluLW91dCJdLGludGVybmFsQWxpYXNlczpbImxlYW5fcmlnaHQiXSxoYW5kbGVyOlhafSx7c2VtYW50aWNOYW1lOiJEYXRhIElucHV0L091dHB1dCIsbmFtZToiTGVhbiBMZWZ0IixzaG9ydE5hbWU6ImxlYW4tbCIsZGVzY3JpcHRpb246IlJlcHJlc2VudHMgb3V0cHV0IG9yIGlucHV0IixhbGlhc2VzOlsibGVhbi1sZWZ0Iiwib3V0LWluIl0saW50ZXJuYWxBbGlhc2VzOlsibGVhbl9sZWZ0Il0saGFuZGxlcjpxWn0se3NlbWFudGljTmFtZToiUHJpb3JpdHkgQWN0aW9uIixuYW1lOiJUcmFwZXpvaWQgQmFzZSBCb3R0b20iLHNob3J0TmFtZToidHJhcC1iIixkZXNjcmlwdGlvbjoiUHJpb3JpdHkgYWN0aW9uIixhbGlhc2VzOlsicHJpb3JpdHkiLCJ0cmFwZXpvaWQtYm90dG9tIiwidHJhcGV6b2lkIl0saGFuZGxlcjp6Sn0se3NlbWFudGljTmFtZToiTWFudWFsIE9wZXJhdGlvbiIsbmFtZToiVHJhcGV6b2lkIEJhc2UgVG9wIixzaG9ydE5hbWU6InRyYXAtdCIsZGVzY3JpcHRpb246IlJlcHJlc2VudHMgYSBtYW51YWwgdGFzayIsYWxpYXNlczpbIm1hbnVhbCIsInRyYXBlem9pZC10b3AiLCJpbnYtdHJhcGV6b2lkIl0saW50ZXJuYWxBbGlhc2VzOlsiaW52X3RyYXBlem9pZCJdLGhhbmRsZXI6Vlp9LHtzZW1hbnRpY05hbWU6IlN0b3AiLG5hbWU6IkRvdWJsZSBDaXJjbGUiLHNob3J0TmFtZToiZGJsLWNpcmMiLGRlc2NyaXB0aW9uOiJSZXByZXNlbnRzIGEgc3RvcCBwb2ludCIsYWxpYXNlczpbImRvdWJsZS1jaXJjbGUiXSxpbnRlcm5hbEFsaWFzZXM6WyJkb3VibGVjaXJjbGUiXSxoYW5kbGVyOnZafSx7c2VtYW50aWNOYW1lOiJUZXh0IEJsb2NrIixuYW1lOiJUZXh0IEJsb2NrIixzaG9ydE5hbWU6InRleHQiLGRlc2NyaXB0aW9uOiJUZXh0IGJsb2NrIixoYW5kbGVyOlBKfSx7c2VtYW50aWNOYW1lOiJDYXJkIixuYW1lOiJOb3RjaGVkIFJlY3RhbmdsZSIsc2hvcnROYW1lOiJub3RjaC1yZWN0IixkZXNjcmlwdGlvbjoiUmVwcmVzZW50cyBhIGNhcmQiLGFsaWFzZXM6WyJjYXJkIiwibm90Y2hlZC1yZWN0YW5nbGUiXSxoYW5kbGVyOlpRfSx7c2VtYW50aWNOYW1lOiJMaW5lZC9TaGFkZWQgUHJvY2VzcyIsbmFtZToiTGluZWQgUmVjdGFuZ2xlIixzaG9ydE5hbWU6Imxpbi1yZWN0IixkZXNjcmlwdGlvbjoiTGluZWQgcHJvY2VzcyBzaGFwZSIsYWxpYXNlczpbImxpbmVkLXJlY3RhbmdsZSIsImxpbmVkLXByb2Nlc3MiLCJsaW4tcHJvYyIsInNoYWRlZC1wcm9jZXNzIl0saGFuZGxlcjpnSn0se3NlbWFudGljTmFtZToiU3RhcnQiLG5hbWU6IlNtYWxsIENpcmNsZSIsc2hvcnROYW1lOiJzbS1jaXJjIixkZXNjcmlwdGlvbjoiU21hbGwgc3RhcnRpbmcgcG9pbnQiLGFsaWFzZXM6WyJzdGFydCIsInNtYWxsLWNpcmNsZSJdLGludGVybmFsQWxpYXNlczpbInN0YXRlU3RhcnQiXSxoYW5kbGVyOl9KfSx7c2VtYW50aWNOYW1lOiJTdG9wIixuYW1lOiJGcmFtZWQgQ2lyY2xlIixzaG9ydE5hbWU6ImZyLWNpcmMiLGRlc2NyaXB0aW9uOiJTdG9wIHBvaW50IixhbGlhc2VzOlsic3RvcCIsImZyYW1lZC1jaXJjbGUiXSxpbnRlcm5hbEFsaWFzZXM6WyJzdGF0ZUVuZCJdLGhhbmRsZXI6Q0p9LHtzZW1hbnRpY05hbWU6IkZvcmsvSm9pbiIsbmFtZToiRmlsbGVkIFJlY3RhbmdsZSIsc2hvcnROYW1lOiJmb3JrIixkZXNjcmlwdGlvbjoiRm9yayBvciBqb2luIGluIHByb2Nlc3MgZmxvdyIsYWxpYXNlczpbImpvaW4iXSxpbnRlcm5hbEFsaWFzZXM6WyJmb3JrSm9pbiJdLGhhbmRsZXI6RVp9LHtzZW1hbnRpY05hbWU6IkNvbGxhdGUiLG5hbWU6IkhvdXJnbGFzcyIsc2hvcnROYW1lOiJob3VyZ2xhc3MiLGRlc2NyaXB0aW9uOiJSZXByZXNlbnRzIGEgY29sbGF0ZSBvcGVyYXRpb24iLGFsaWFzZXM6WyJob3VyZ2xhc3MiLCJjb2xsYXRlIl0saGFuZGxlcjpMWn0se3NlbWFudGljTmFtZToiQ29tbWVudCIsbmFtZToiQ3VybHkgQnJhY2UiLHNob3J0TmFtZToiYnJhY2UiLGRlc2NyaXB0aW9uOiJBZGRzIGEgY29tbWVudCIsYWxpYXNlczpbImNvbW1lbnQiLCJicmFjZS1sIl0saGFuZGxlcjpzWn0se3NlbWFudGljTmFtZToiQ29tbWVudCBSaWdodCIsbmFtZToiQ3VybHkgQnJhY2UiLHNob3J0TmFtZToiYnJhY2UtciIsZGVzY3JpcHRpb246IkFkZHMgYSBjb21tZW50IixoYW5kbGVyOmxafSx7c2VtYW50aWNOYW1lOiJDb21tZW50IHdpdGggYnJhY2VzIG9uIGJvdGggc2lkZXMiLG5hbWU6IkN1cmx5IEJyYWNlcyIsc2hvcnROYW1lOiJicmFjZXMiLGRlc2NyaXB0aW9uOiJBZGRzIGEgY29tbWVudCIsaGFuZGxlcjp1Wn0se3NlbWFudGljTmFtZToiQ29tIExpbmsiLG5hbWU6IkxpZ2h0bmluZyBCb2x0IixzaG9ydE5hbWU6ImJvbHQiLGRlc2NyaXB0aW9uOiJDb21tdW5pY2F0aW9uIGxpbmsiLGFsaWFzZXM6WyJjb20tbGluayIsImxpZ2h0bmluZy1ib2x0Il0saGFuZGxlcjpLWn0se3NlbWFudGljTmFtZToiRG9jdW1lbnQiLG5hbWU6IkRvY3VtZW50IixzaG9ydE5hbWU6ImRvYyIsZGVzY3JpcHRpb246IlJlcHJlc2VudHMgYSBkb2N1bWVudCIsYWxpYXNlczpbImRvYyIsImRvY3VtZW50Il0saGFuZGxlcjpxSn0se3NlbWFudGljTmFtZToiRGVsYXkiLG5hbWU6IkhhbGYtUm91bmRlZCBSZWN0YW5nbGUiLHNob3J0TmFtZToiZGVsYXkiLGRlc2NyaXB0aW9uOiJSZXByZXNlbnRzIGEgZGVsYXkiLGFsaWFzZXM6WyJoYWxmLXJvdW5kZWQtcmVjdGFuZ2xlIl0saGFuZGxlcjpDWn0se3NlbWFudGljTmFtZToiRGlyZWN0IEFjY2VzcyBTdG9yYWdlIixuYW1lOiJIb3Jpem9udGFsIEN5bGluZGVyIixzaG9ydE5hbWU6ImgtY3lsIixkZXNjcmlwdGlvbjoiRGlyZWN0IGFjY2VzcyBzdG9yYWdlIixhbGlhc2VzOlsiZGFzIiwiaG9yaXpvbnRhbC1jeWxpbmRlciJdLGhhbmRsZXI6Rkp9LHtzZW1hbnRpY05hbWU6IkRpc2sgU3RvcmFnZSIsbmFtZToiTGluZWQgQ3lsaW5kZXIiLHNob3J0TmFtZToibGluLWN5bCIsZGVzY3JpcHRpb246IkRpc2sgc3RvcmFnZSIsYWxpYXNlczpbImRpc2siLCJsaW5lZC1jeWxpbmRlciJdLGhhbmRsZXI6Wlp9LHtzZW1hbnRpY05hbWU6IkRpc3BsYXkiLG5hbWU6IkN1cnZlZCBUcmFwZXpvaWQiLHNob3J0TmFtZToiY3Vydi10cmFwIixkZXNjcmlwdGlvbjoiUmVwcmVzZW50cyBhIGRpc3BsYXkiLGFsaWFzZXM6WyJjdXJ2ZWQtdHJhcGV6b2lkIiwiZGlzcGxheSJdLGhhbmRsZXI6Zlp9LHtzZW1hbnRpY05hbWU6IkRpdmlkZWQgUHJvY2VzcyIsbmFtZToiRGl2aWRlZCBSZWN0YW5nbGUiLHNob3J0TmFtZToiZGl2LXJlY3QiLGRlc2NyaXB0aW9uOiJEaXZpZGVkIHByb2Nlc3Mgc2hhcGUiLGFsaWFzZXM6WyJkaXYtcHJvYyIsImRpdmlkZWQtcmVjdGFuZ2xlIiwiZGl2aWRlZC1wcm9jZXNzIl0saGFuZGxlcjpnWn0se3NlbWFudGljTmFtZToiRXh0cmFjdCIsbmFtZToiVHJpYW5nbGUiLHNob3J0TmFtZToidHJpIixkZXNjcmlwdGlvbjoiRXh0cmFjdGlvbiBwcm9jZXNzIixhbGlhc2VzOlsiZXh0cmFjdCIsInRyaWFuZ2xlIl0saGFuZGxlcjpISn0se3NlbWFudGljTmFtZToiSW50ZXJuYWwgU3RvcmFnZSIsbmFtZToiV2luZG93IFBhbmUiLHNob3J0TmFtZToid2luLXBhbmUiLGRlc2NyaXB0aW9uOiJJbnRlcm5hbCBzdG9yYWdlIixhbGlhc2VzOlsiaW50ZXJuYWwtc3RvcmFnZSIsIndpbmRvdy1wYW5lIl0saGFuZGxlcjpLSn0se3NlbWFudGljTmFtZToiSnVuY3Rpb24iLG5hbWU6IkZpbGxlZCBDaXJjbGUiLHNob3J0TmFtZToiZi1jaXJjIixkZXNjcmlwdGlvbjoiSnVuY3Rpb24gcG9pbnQiLGFsaWFzZXM6WyJqdW5jdGlvbiIsImZpbGxlZC1jaXJjbGUiXSxoYW5kbGVyOmJafSx7c2VtYW50aWNOYW1lOiJMb29wIExpbWl0IixuYW1lOiJUcmFwZXpvaWRhbCBQZW50YWdvbiIsc2hvcnROYW1lOiJub3RjaC1wZW50IixkZXNjcmlwdGlvbjoiTG9vcCBsaW1pdCBzdGVwIixhbGlhc2VzOlsibG9vcC1saW1pdCIsIm5vdGNoZWQtcGVudGFnb24iXSxoYW5kbGVyOlZKfSx7c2VtYW50aWNOYW1lOiJNYW51YWwgRmlsZSIsbmFtZToiRmxpcHBlZCBUcmlhbmdsZSIsc2hvcnROYW1lOiJmbGlwLXRyaSIsZGVzY3JpcHRpb246Ik1hbnVhbCBmaWxlIG9wZXJhdGlvbiIsYWxpYXNlczpbIm1hbnVhbC1maWxlIiwiZmxpcHBlZC10cmlhbmdsZSJdLGhhbmRsZXI6d1p9LHtzZW1hbnRpY05hbWU6Ik1hbnVhbCBJbnB1dCIsbmFtZToiU2xvcGVkIFJlY3RhbmdsZSIsc2hvcnROYW1lOiJzbC1yZWN0IixkZXNjcmlwdGlvbjoiTWFudWFsIGlucHV0IHN0ZXAiLGFsaWFzZXM6WyJtYW51YWwtaW5wdXQiLCJzbG9wZWQtcmVjdGFuZ2xlIl0saGFuZGxlcjp2Sn0se3NlbWFudGljTmFtZToiTXVsdGktRG9jdW1lbnQiLG5hbWU6IlN0YWNrZWQgRG9jdW1lbnQiLHNob3J0TmFtZToiZG9jcyIsZGVzY3JpcHRpb246Ik11bHRpcGxlIGRvY3VtZW50cyIsYWxpYXNlczpbImRvY3VtZW50cyIsInN0LWRvYyIsInN0YWNrZWQtZG9jdW1lbnQiXSxoYW5kbGVyOmlKfSx7c2VtYW50aWNOYW1lOiJNdWx0aS1Qcm9jZXNzIixuYW1lOiJTdGFja2VkIFJlY3RhbmdsZSIsc2hvcnROYW1lOiJzdC1yZWN0IixkZXNjcmlwdGlvbjoiTXVsdGlwbGUgcHJvY2Vzc2VzIixhbGlhc2VzOlsicHJvY3MiLCJwcm9jZXNzZXMiLCJzdGFja2VkLXJlY3RhbmdsZSJdLGhhbmRsZXI6ckp9LHtzZW1hbnRpY05hbWU6IlN0b3JlZCBEYXRhIixuYW1lOiJCb3cgVGllIFJlY3RhbmdsZSIsc2hvcnROYW1lOiJib3ctcmVjdCIsZGVzY3JpcHRpb246IlN0b3JlZCBkYXRhIixhbGlhc2VzOlsic3RvcmVkLWRhdGEiLCJib3ctdGllLXJlY3RhbmdsZSJdLGhhbmRsZXI6S1F9LHtzZW1hbnRpY05hbWU6IlN1bW1hcnkiLG5hbWU6IkNyb3NzZWQgQ2lyY2xlIixzaG9ydE5hbWU6ImNyb3NzLWNpcmMiLGRlc2NyaXB0aW9uOiJTdW1tYXJ5IixhbGlhc2VzOlsic3VtbWFyeSIsImNyb3NzZWQtY2lyY2xlIl0saGFuZGxlcjppWn0se3NlbWFudGljTmFtZToiVGFnZ2VkIERvY3VtZW50IixuYW1lOiJUYWdnZWQgRG9jdW1lbnQiLHNob3J0TmFtZToidGFnLWRvYyIsZGVzY3JpcHRpb246IlRhZ2dlZCBkb2N1bWVudCIsYWxpYXNlczpbInRhZy1kb2MiLCJ0YWdnZWQtZG9jdW1lbnQiXSxoYW5kbGVyOklKfSx7c2VtYW50aWNOYW1lOiJUYWdnZWQgUHJvY2VzcyIsbmFtZToiVGFnZ2VkIFJlY3RhbmdsZSIsc2hvcnROYW1lOiJ0YWctcmVjdCIsZGVzY3JpcHRpb246IlRhZ2dlZCBwcm9jZXNzIixhbGlhc2VzOlsidGFnZ2VkLXJlY3RhbmdsZSIsInRhZy1wcm9jIiwidGFnZ2VkLXByb2Nlc3MiXSxoYW5kbGVyOk5KfSx7c2VtYW50aWNOYW1lOiJQYXBlciBUYXBlIixuYW1lOiJGbGFnIixzaG9ydE5hbWU6ImZsYWciLGRlc2NyaXB0aW9uOiJQYXBlciB0YXBlIixhbGlhc2VzOlsicGFwZXItdGFwZSJdLGhhbmRsZXI6WEp9LHtzZW1hbnRpY05hbWU6Ik9kZCIsbmFtZToiT2RkIixzaG9ydE5hbWU6Im9kZCIsZGVzY3JpcHRpb246Ik9kZCBzaGFwZSIsaW50ZXJuYWxBbGlhc2VzOlsicmVjdF9sZWZ0X2ludl9hcnJvdyJdLGhhbmRsZXI6dUp9LHtzZW1hbnRpY05hbWU6IkxpbmVkIERvY3VtZW50IixuYW1lOiJMaW5lZCBEb2N1bWVudCIsc2hvcnROYW1lOiJsaW4tZG9jIixkZXNjcmlwdGlvbjoiTGluZWQgZG9jdW1lbnQiLGFsaWFzZXM6WyJsaW5lZC1kb2N1bWVudCJdLGhhbmRsZXI6ZUp9XSxaRGU9bygoKT0+e2xldCBlPVsuLi5PYmplY3QuZW50cmllcyh7c3RhdGU6RUosY2hvaWNlOmVaLG5vdGU6c0oscmVjdFdpdGhUaXRsZTpmSixsYWJlbFJlY3Q6SFosaWNvblNxdWFyZTpGWixpY29uQ2lyY2xlOklaLGljb246TlosaWNvblJvdW5kZWQ6UFosaW1hZ2VTcXVhcmU6elosYW5jaG9yOllRLGthbmJhbkl0ZW06YWVlLGNsYXNzQm94OnRlZSxlckJveDpNTCxyZXF1aXJlbWVudEJveDpuZWV9KSwuLi5RRGUuZmxhdE1hcChyPT5bci5zaG9ydE5hbWUsLi4uImFsaWFzZXMiaW4gcj9yLmFsaWFzZXM6W10sLi4uImludGVybmFsQWxpYXNlcyJpbiByP3IuaW50ZXJuYWxBbGlhc2VzOltdXS5tYXAoaT0+W2ksci5oYW5kbGVyXSkpXTtyZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKGUpfSwiZ2VuZXJhdGVTaGFwZU1hcCIpLElMPVpEZSgpO28ob2VlLCJpc1ZhbGlkU2hhcGUiKX0pO3ZhciBKRGUsaXcsbGVlPU4oKCk9PnsidXNlIHN0cmljdCI7ZnIoKTtQVCgpO0d0KCk7eXQoKTtPTCgpO2VyKCk7cHIoKTtjaSgpO0pEZT0iZmxvd2NoYXJ0LSIsaXc9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnZlcnRleENvdW50ZXI9MDt0aGlzLmNvbmZpZz1tZSgpO3RoaXMudmVydGljZXM9bmV3IE1hcDt0aGlzLmVkZ2VzPVtdO3RoaXMuY2xhc3Nlcz1uZXcgTWFwO3RoaXMuc3ViR3JhcGhzPVtdO3RoaXMuc3ViR3JhcGhMb29rdXA9bmV3IE1hcDt0aGlzLnRvb2x0aXBzPW5ldyBNYXA7dGhpcy5zdWJDb3VudD0wO3RoaXMuZmlyc3RHcmFwaEZsYWc9ITA7dGhpcy5zZWNDb3VudD0tMTt0aGlzLnBvc0Nyb3NzUmVmPVtdO3RoaXMuZnVucz1bXTt0aGlzLnNldEFjY1RpdGxlPUFyO3RoaXMuc2V0QWNjRGVzY3JpcHRpb249THI7dGhpcy5zZXREaWFncmFtVGl0bGU9T3I7dGhpcy5nZXRBY2NUaXRsZT1Ecjt0aGlzLmdldEFjY0Rlc2NyaXB0aW9uPVJyO3RoaXMuZ2V0RGlhZ3JhbVRpdGxlPU5yO3RoaXMuZnVucy5wdXNoKHRoaXMuc2V0dXBUb29sVGlwcy5iaW5kKHRoaXMpKSx0aGlzLmFkZFZlcnRleD10aGlzLmFkZFZlcnRleC5iaW5kKHRoaXMpLHRoaXMuZmlyc3RHcmFwaD10aGlzLmZpcnN0R3JhcGguYmluZCh0aGlzKSx0aGlzLnNldERpcmVjdGlvbj10aGlzLnNldERpcmVjdGlvbi5iaW5kKHRoaXMpLHRoaXMuYWRkU3ViR3JhcGg9dGhpcy5hZGRTdWJHcmFwaC5iaW5kKHRoaXMpLHRoaXMuYWRkTGluaz10aGlzLmFkZExpbmsuYmluZCh0aGlzKSx0aGlzLnNldExpbms9dGhpcy5zZXRMaW5rLmJpbmQodGhpcyksdGhpcy51cGRhdGVMaW5rPXRoaXMudXBkYXRlTGluay5iaW5kKHRoaXMpLHRoaXMuYWRkQ2xhc3M9dGhpcy5hZGRDbGFzcy5iaW5kKHRoaXMpLHRoaXMuc2V0Q2xhc3M9dGhpcy5zZXRDbGFzcy5iaW5kKHRoaXMpLHRoaXMuZGVzdHJ1Y3RMaW5rPXRoaXMuZGVzdHJ1Y3RMaW5rLmJpbmQodGhpcyksdGhpcy5zZXRDbGlja0V2ZW50PXRoaXMuc2V0Q2xpY2tFdmVudC5iaW5kKHRoaXMpLHRoaXMuc2V0VG9vbHRpcD10aGlzLnNldFRvb2x0aXAuYmluZCh0aGlzKSx0aGlzLnVwZGF0ZUxpbmtJbnRlcnBvbGF0ZT10aGlzLnVwZGF0ZUxpbmtJbnRlcnBvbGF0ZS5iaW5kKHRoaXMpLHRoaXMuc2V0Q2xpY2tGdW49dGhpcy5zZXRDbGlja0Z1bi5iaW5kKHRoaXMpLHRoaXMuYmluZEZ1bmN0aW9ucz10aGlzLmJpbmRGdW5jdGlvbnMuYmluZCh0aGlzKSx0aGlzLmxleD17Zmlyc3RHcmFwaDp0aGlzLmZpcnN0R3JhcGguYmluZCh0aGlzKX0sdGhpcy5jbGVhcigpLHRoaXMuc2V0R2VuKCJnZW4tMiIpfXN0YXRpY3tvKHRoaXMsIkZsb3dEQiIpfXNhbml0aXplVGV4dChlKXtyZXR1cm4gWmUuc2FuaXRpemVUZXh0KGUsdGhpcy5jb25maWcpfWxvb2tVcERvbUlkKGUpe2ZvcihsZXQgciBvZiB0aGlzLnZlcnRpY2VzLnZhbHVlcygpKWlmKHIuaWQ9PT1lKXJldHVybiByLmRvbUlkO3JldHVybiBlfWFkZFZlcnRleChlLHIsbixpLGEscyxsPXt9LHUpe2lmKCFlfHxlLnRyaW0oKS5sZW5ndGg9PT0wKXJldHVybjtsZXQgaDtpZih1IT09dm9pZCAwKXtsZXQgbTt1LmluY2x1ZGVzKGAKYCk/bT11K2AKYDptPWB7CmArdStgCn1gLGg9VG0obSx7c2NoZW1hOmJtfSl9bGV0IGY9dGhpcy5lZGdlcy5maW5kKG09Pm0uaWQ9PT1lKTtpZihmKXtsZXQgbT1oO20/LmFuaW1hdGUhPT12b2lkIDAmJihmLmFuaW1hdGU9bS5hbmltYXRlKSxtPy5hbmltYXRpb24hPT12b2lkIDAmJihmLmFuaW1hdGlvbj1tLmFuaW1hdGlvbik7cmV0dXJufWxldCBkLHA9dGhpcy52ZXJ0aWNlcy5nZXQoZSk7aWYocD09PXZvaWQgMCYmKHA9e2lkOmUsbGFiZWxUeXBlOiJ0ZXh0Iixkb21JZDpKRGUrZSsiLSIrdGhpcy52ZXJ0ZXhDb3VudGVyLHN0eWxlczpbXSxjbGFzc2VzOltdfSx0aGlzLnZlcnRpY2VzLnNldChlLHApKSx0aGlzLnZlcnRleENvdW50ZXIrKyxyIT09dm9pZCAwPyh0aGlzLmNvbmZpZz1tZSgpLGQ9dGhpcy5zYW5pdGl6ZVRleHQoci50ZXh0LnRyaW0oKSkscC5sYWJlbFR5cGU9ci50eXBlLGQuc3RhcnRzV2l0aCgnIicpJiZkLmVuZHNXaXRoKCciJykmJihkPWQuc3Vic3RyaW5nKDEsZC5sZW5ndGgtMSkpLHAudGV4dD1kKTpwLnRleHQ9PT12b2lkIDAmJihwLnRleHQ9ZSksbiE9PXZvaWQgMCYmKHAudHlwZT1uKSxpPy5mb3JFYWNoKG09PntwLnN0eWxlcy5wdXNoKG0pfSksYT8uZm9yRWFjaChtPT57cC5jbGFzc2VzLnB1c2gobSl9KSxzIT09dm9pZCAwJiYocC5kaXI9cykscC5wcm9wcz09PXZvaWQgMD9wLnByb3BzPWw6bCE9PXZvaWQgMCYmT2JqZWN0LmFzc2lnbihwLnByb3BzLGwpLGghPT12b2lkIDApe2lmKGguc2hhcGUpe2lmKGguc2hhcGUhPT1oLnNoYXBlLnRvTG93ZXJDYXNlKCl8fGguc2hhcGUuaW5jbHVkZXMoIl8iKSl0aHJvdyBuZXcgRXJyb3IoYE5vIHN1Y2ggc2hhcGU6ICR7aC5zaGFwZX0uIFNoYXBlIG5hbWVzIHNob3VsZCBiZSBsb3dlcmNhc2UuYCk7aWYoIW9lZShoLnNoYXBlKSl0aHJvdyBuZXcgRXJyb3IoYE5vIHN1Y2ggc2hhcGU6ICR7aC5zaGFwZX0uYCk7cC50eXBlPWg/LnNoYXBlfWg/LmxhYmVsJiYocC50ZXh0PWg/LmxhYmVsKSxoPy5pY29uJiYocC5pY29uPWg/Lmljb24sIWgubGFiZWw/LnRyaW0oKSYmcC50ZXh0PT09ZSYmKHAudGV4dD0iIikpLGg/LmZvcm0mJihwLmZvcm09aD8uZm9ybSksaD8ucG9zJiYocC5wb3M9aD8ucG9zKSxoPy5pbWcmJihwLmltZz1oPy5pbWcsIWgubGFiZWw/LnRyaW0oKSYmcC50ZXh0PT09ZSYmKHAudGV4dD0iIikpLGg/LmNvbnN0cmFpbnQmJihwLmNvbnN0cmFpbnQ9aC5jb25zdHJhaW50KSxoLncmJihwLmFzc2V0V2lkdGg9TnVtYmVyKGgudykpLGguaCYmKHAuYXNzZXRIZWlnaHQ9TnVtYmVyKGguaCkpfX1hZGRTaW5nbGVMaW5rKGUscixuLGkpe2xldCBsPXtzdGFydDplLGVuZDpyLHR5cGU6dm9pZCAwLHRleHQ6IiIsbGFiZWxUeXBlOiJ0ZXh0IixjbGFzc2VzOltdLGlzVXNlckRlZmluZWRJZDohMSxpbnRlcnBvbGF0ZTp0aGlzLmVkZ2VzLmRlZmF1bHRJbnRlcnBvbGF0ZX07WC5pbmZvKCJhYmM3OCBHb3QgZWRnZS4uLiIsbCk7bGV0IHU9bi50ZXh0O2lmKHUhPT12b2lkIDAmJihsLnRleHQ9dGhpcy5zYW5pdGl6ZVRleHQodS50ZXh0LnRyaW0oKSksbC50ZXh0LnN0YXJ0c1dpdGgoJyInKSYmbC50ZXh0LmVuZHNXaXRoKCciJykmJihsLnRleHQ9bC50ZXh0LnN1YnN0cmluZygxLGwudGV4dC5sZW5ndGgtMSkpLGwubGFiZWxUeXBlPXUudHlwZSksbiE9PXZvaWQgMCYmKGwudHlwZT1uLnR5cGUsbC5zdHJva2U9bi5zdHJva2UsbC5sZW5ndGg9bi5sZW5ndGg+MTA/MTA6bi5sZW5ndGgpLGkmJiF0aGlzLmVkZ2VzLnNvbWUoaD0+aC5pZD09PWkpKWwuaWQ9aSxsLmlzVXNlckRlZmluZWRJZD0hMDtlbHNle2xldCBoPXRoaXMuZWRnZXMuZmlsdGVyKGY9PmYuc3RhcnQ9PT1sLnN0YXJ0JiZmLmVuZD09PWwuZW5kKTtoLmxlbmd0aD09PTA/bC5pZD1XaChsLnN0YXJ0LGwuZW5kLHtjb3VudGVyOjAscHJlZml4OiJMIn0pOmwuaWQ9V2gobC5zdGFydCxsLmVuZCx7Y291bnRlcjpoLmxlbmd0aCsxLHByZWZpeDoiTCJ9KX1pZih0aGlzLmVkZ2VzLmxlbmd0aDwodGhpcy5jb25maWcubWF4RWRnZXM/PzUwMCkpWC5pbmZvKCJQdXNoaW5nIGVkZ2UuLi4iKSx0aGlzLmVkZ2VzLnB1c2gobCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoYEVkZ2UgbGltaXQgZXhjZWVkZWQuICR7dGhpcy5lZGdlcy5sZW5ndGh9IGVkZ2VzIGZvdW5kLCBidXQgdGhlIGxpbWl0IGlzICR7dGhpcy5jb25maWcubWF4RWRnZXN9LgoKSW5pdGlhbGl6ZSBtZXJtYWlkIHdpdGggbWF4RWRnZXMgc2V0IHRvIGEgaGlnaGVyIG51bWJlciB0byBhbGxvdyBtb3JlIGVkZ2VzLgpZb3UgY2Fubm90IHNldCB0aGlzIGNvbmZpZyB2aWEgY29uZmlndXJhdGlvbiBpbnNpZGUgdGhlIGRpYWdyYW0gYXMgaXQgaXMgYSBzZWN1cmUgY29uZmlnLgpZb3UgaGF2ZSB0byBjYWxsIG1lcm1haWQuaW5pdGlhbGl6ZS5gKX1pc0xpbmtEYXRhKGUpe3JldHVybiBlIT09bnVsbCYmdHlwZW9mIGU9PSJvYmplY3QiJiYiaWQiaW4gZSYmdHlwZW9mIGUuaWQ9PSJzdHJpbmcifWFkZExpbmsoZSxyLG4pe2xldCBpPXRoaXMuaXNMaW5rRGF0YShuKT9uLmlkLnJlcGxhY2UoIkAiLCIiKTp2b2lkIDA7WC5pbmZvKCJhZGRMaW5rIixlLHIsaSk7Zm9yKGxldCBhIG9mIGUpZm9yKGxldCBzIG9mIHIpe2xldCBsPWE9PT1lW2UubGVuZ3RoLTFdLHU9cz09PXJbMF07bCYmdT90aGlzLmFkZFNpbmdsZUxpbmsoYSxzLG4saSk6dGhpcy5hZGRTaW5nbGVMaW5rKGEscyxuLHZvaWQgMCl9fXVwZGF0ZUxpbmtJbnRlcnBvbGF0ZShlLHIpe2UuZm9yRWFjaChuPT57bj09PSJkZWZhdWx0Ij90aGlzLmVkZ2VzLmRlZmF1bHRJbnRlcnBvbGF0ZT1yOnRoaXMuZWRnZXNbbl0uaW50ZXJwb2xhdGU9cn0pfXVwZGF0ZUxpbmsoZSxyKXtlLmZvckVhY2gobj0+e2lmKHR5cGVvZiBuPT0ibnVtYmVyIiYmbj49dGhpcy5lZGdlcy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBUaGUgaW5kZXggJHtufSBmb3IgbGlua1N0eWxlIGlzIG91dCBvZiBib3VuZHMuIFZhbGlkIGluZGljZXMgZm9yIGxpbmtTdHlsZSBhcmUgYmV0d2VlbiAwIGFuZCAke3RoaXMuZWRnZXMubGVuZ3RoLTF9LiAoSGVscDogRW5zdXJlIHRoYXQgdGhlIGluZGV4IGlzIHdpdGhpbiB0aGUgcmFuZ2Ugb2YgZXhpc3RpbmcgZWRnZXMuKWApO249PT0iZGVmYXVsdCI/dGhpcy5lZGdlcy5kZWZhdWx0U3R5bGU9cjoodGhpcy5lZGdlc1tuXS5zdHlsZT1yLCh0aGlzLmVkZ2VzW25dPy5zdHlsZT8ubGVuZ3RoPz8wKT4wJiYhdGhpcy5lZGdlc1tuXT8uc3R5bGU/LnNvbWUoaT0+aT8uc3RhcnRzV2l0aCgiZmlsbCIpKSYmdGhpcy5lZGdlc1tuXT8uc3R5bGU/LnB1c2goImZpbGw6bm9uZSIpKX0pfWFkZENsYXNzKGUscil7bGV0IG49ci5qb2luKCkucmVwbGFjZSgvXFwsL2csIlx4QTdceEE3XHhBNyIpLnJlcGxhY2UoLywvZywiOyIpLnJlcGxhY2UoL8KnwqfCpy9nLCIsIikuc3BsaXQoIjsiKTtlLnNwbGl0KCIsIikuZm9yRWFjaChpPT57bGV0IGE9dGhpcy5jbGFzc2VzLmdldChpKTthPT09dm9pZCAwJiYoYT17aWQ6aSxzdHlsZXM6W10sdGV4dFN0eWxlczpbXX0sdGhpcy5jbGFzc2VzLnNldChpLGEpKSxuPy5mb3JFYWNoKHM9PntpZigvY29sb3IvLmV4ZWMocykpe2xldCBsPXMucmVwbGFjZSgiZmlsbCIsImJnRmlsbCIpO2EudGV4dFN0eWxlcy5wdXNoKGwpfWEuc3R5bGVzLnB1c2gocyl9KX0pfXNldERpcmVjdGlvbihlKXt0aGlzLmRpcmVjdGlvbj1lLC8uKjwvLmV4ZWModGhpcy5kaXJlY3Rpb24pJiYodGhpcy5kaXJlY3Rpb249IlJMIiksLy4qXF4vLmV4ZWModGhpcy5kaXJlY3Rpb24pJiYodGhpcy5kaXJlY3Rpb249IkJUIiksLy4qPi8uZXhlYyh0aGlzLmRpcmVjdGlvbikmJih0aGlzLmRpcmVjdGlvbj0iTFIiKSwvLip2Ly5leGVjKHRoaXMuZGlyZWN0aW9uKSYmKHRoaXMuZGlyZWN0aW9uPSJUQiIpLHRoaXMuZGlyZWN0aW9uPT09IlREIiYmKHRoaXMuZGlyZWN0aW9uPSJUQiIpfXNldENsYXNzKGUscil7Zm9yKGxldCBuIG9mIGUuc3BsaXQoIiwiKSl7bGV0IGk9dGhpcy52ZXJ0aWNlcy5nZXQobik7aSYmaS5jbGFzc2VzLnB1c2gocik7bGV0IGE9dGhpcy5lZGdlcy5maW5kKGw9PmwuaWQ9PT1uKTthJiZhLmNsYXNzZXMucHVzaChyKTtsZXQgcz10aGlzLnN1YkdyYXBoTG9va3VwLmdldChuKTtzJiZzLmNsYXNzZXMucHVzaChyKX19c2V0VG9vbHRpcChlLHIpe2lmKHIhPT12b2lkIDApe3I9dGhpcy5zYW5pdGl6ZVRleHQocik7Zm9yKGxldCBuIG9mIGUuc3BsaXQoIiwiKSl0aGlzLnRvb2x0aXBzLnNldCh0aGlzLnZlcnNpb249PT0iZ2VuLTEiP3RoaXMubG9va1VwRG9tSWQobik6bixyKX19c2V0Q2xpY2tGdW4oZSxyLG4pe2xldCBpPXRoaXMubG9va1VwRG9tSWQoZSk7aWYobWUoKS5zZWN1cml0eUxldmVsIT09Imxvb3NlInx8cj09PXZvaWQgMClyZXR1cm47bGV0IGE9W107aWYodHlwZW9mIG49PSJzdHJpbmciKXthPW4uc3BsaXQoLywoPz0oPzooPzpbXiJdKiIpezJ9KSpbXiJdKiQpLyk7Zm9yKGxldCBsPTA7bDxhLmxlbmd0aDtsKyspe2xldCB1PWFbbF0udHJpbSgpO3Uuc3RhcnRzV2l0aCgnIicpJiZ1LmVuZHNXaXRoKCciJykmJih1PXUuc3Vic3RyKDEsdS5sZW5ndGgtMikpLGFbbF09dX19YS5sZW5ndGg9PT0wJiZhLnB1c2goZSk7bGV0IHM9dGhpcy52ZXJ0aWNlcy5nZXQoZSk7cyYmKHMuaGF2ZUNhbGxiYWNrPSEwLHRoaXMuZnVucy5wdXNoKCgpPT57bGV0IGw9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2lkPSIke2l9Il1gKTtsIT09bnVsbCYmbC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9PntWdC5ydW5GdW5jKHIsLi4uYSl9LCExKX0pKX1zZXRMaW5rKGUscixuKXtlLnNwbGl0KCIsIikuZm9yRWFjaChpPT57bGV0IGE9dGhpcy52ZXJ0aWNlcy5nZXQoaSk7YSE9PXZvaWQgMCYmKGEubGluaz1WdC5mb3JtYXRVcmwocix0aGlzLmNvbmZpZyksYS5saW5rVGFyZ2V0PW4pfSksdGhpcy5zZXRDbGFzcyhlLCJjbGlja2FibGUiKX1nZXRUb29sdGlwKGUpe3JldHVybiB0aGlzLnRvb2x0aXBzLmdldChlKX1zZXRDbGlja0V2ZW50KGUscixuKXtlLnNwbGl0KCIsIikuZm9yRWFjaChpPT57dGhpcy5zZXRDbGlja0Z1bihpLHIsbil9KSx0aGlzLnNldENsYXNzKGUsImNsaWNrYWJsZSIpfWJpbmRGdW5jdGlvbnMoZSl7dGhpcy5mdW5zLmZvckVhY2gocj0+e3IoZSl9KX1nZXREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXJlY3Rpb24/LnRyaW0oKX1nZXRWZXJ0aWNlcygpe3JldHVybiB0aGlzLnZlcnRpY2VzfWdldEVkZ2VzKCl7cmV0dXJuIHRoaXMuZWRnZXN9Z2V0Q2xhc3Nlcygpe3JldHVybiB0aGlzLmNsYXNzZXN9c2V0dXBUb29sVGlwcyhlKXtsZXQgcj1HZSgiLm1lcm1haWRUb29sdGlwIik7KHIuX2dyb3Vwc3x8cilbMF1bMF09PT1udWxsJiYocj1HZSgiYm9keSIpLmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLCJtZXJtYWlkVG9vbHRpcCIpLnN0eWxlKCJvcGFjaXR5IiwwKSksR2UoZSkuc2VsZWN0KCJzdmciKS5zZWxlY3RBbGwoImcubm9kZSIpLm9uKCJtb3VzZW92ZXIiLGE9PntsZXQgcz1HZShhLmN1cnJlbnRUYXJnZXQpO2lmKHMuYXR0cigidGl0bGUiKT09PW51bGwpcmV0dXJuO2xldCB1PWEuY3VycmVudFRhcmdldD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ci50cmFuc2l0aW9uKCkuZHVyYXRpb24oMjAwKS5zdHlsZSgib3BhY2l0eSIsIi45Iiksci50ZXh0KHMuYXR0cigidGl0bGUiKSkuc3R5bGUoImxlZnQiLHdpbmRvdy5zY3JvbGxYK3UubGVmdCsodS5yaWdodC11LmxlZnQpLzIrInB4Iikuc3R5bGUoInRvcCIsd2luZG93LnNjcm9sbFkrdS5ib3R0b20rInB4Iiksci5odG1sKHIuaHRtbCgpLnJlcGxhY2UoLyZsdDticlwvJmd0Oy9nLCI8YnIvPiIpKSxzLmNsYXNzZWQoImhvdmVyIiwhMCl9KS5vbigibW91c2VvdXQiLGE9PntyLnRyYW5zaXRpb24oKS5kdXJhdGlvbig1MDApLnN0eWxlKCJvcGFjaXR5IiwwKSxHZShhLmN1cnJlbnRUYXJnZXQpLmNsYXNzZWQoImhvdmVyIiwhMSl9KX1jbGVhcihlPSJnZW4tMiIpe3RoaXMudmVydGljZXM9bmV3IE1hcCx0aGlzLmNsYXNzZXM9bmV3IE1hcCx0aGlzLmVkZ2VzPVtdLHRoaXMuZnVucz1bdGhpcy5zZXR1cFRvb2xUaXBzLmJpbmQodGhpcyldLHRoaXMuc3ViR3JhcGhzPVtdLHRoaXMuc3ViR3JhcGhMb29rdXA9bmV3IE1hcCx0aGlzLnN1YkNvdW50PTAsdGhpcy50b29sdGlwcz1uZXcgTWFwLHRoaXMuZmlyc3RHcmFwaEZsYWc9ITAsdGhpcy52ZXJzaW9uPWUsdGhpcy5jb25maWc9bWUoKSxrcigpfXNldEdlbihlKXt0aGlzLnZlcnNpb249ZXx8Imdlbi0yIn1kZWZhdWx0U3R5bGUoKXtyZXR1cm4iZmlsbDojZmZhO3N0cm9rZTogI2Y2Njsgc3Ryb2tlLXdpZHRoOiAzcHg7IHN0cm9rZS1kYXNoYXJyYXk6IDUsIDU7ZmlsbDojZmZhO3N0cm9rZTogIzY2NjsifWFkZFN1YkdyYXBoKGUscixuKXtsZXQgaT1lLnRleHQudHJpbSgpLGE9bi50ZXh0O2U9PT1uJiYvXHMvLmV4ZWMobi50ZXh0KSYmKGk9dm9pZCAwKTtsZXQgbD1vKHA9PntsZXQgbT17Ym9vbGVhbjp7fSxudW1iZXI6e30sc3RyaW5nOnt9fSxnPVtdLHk7cmV0dXJue25vZGVMaXN0OnAuZmlsdGVyKGZ1bmN0aW9uKHgpe2xldCBiPXR5cGVvZiB4O3JldHVybiB4LnN0bXQmJnguc3RtdD09PSJkaXIiPyh5PXgudmFsdWUsITEpOngudHJpbSgpPT09IiI/ITE6YiBpbiBtP21bYl0uaGFzT3duUHJvcGVydHkoeCk/ITE6bVtiXVt4XT0hMDpnLmluY2x1ZGVzKHgpPyExOmcucHVzaCh4KX0pLGRpcjp5fX0sInVuaXEiKShyLmZsYXQoKSksdT1sLm5vZGVMaXN0LGg9bC5kaXIsZj1tZSgpLmZsb3djaGFydD8/e307aWYoaD1oPz8oZi5pbmhlcml0RGlyP3RoaXMuZ2V0RGlyZWN0aW9uKCk/P21lKCkuZGlyZWN0aW9uPz92b2lkIDA6dm9pZCAwKSx0aGlzLnZlcnNpb249PT0iZ2VuLTEiKWZvcihsZXQgcD0wO3A8dS5sZW5ndGg7cCsrKXVbcF09dGhpcy5sb29rVXBEb21JZCh1W3BdKTtpPWk/PyJzdWJHcmFwaCIrdGhpcy5zdWJDb3VudCxhPWF8fCIiLGE9dGhpcy5zYW5pdGl6ZVRleHQoYSksdGhpcy5zdWJDb3VudD10aGlzLnN1YkNvdW50KzE7bGV0IGQ9e2lkOmksbm9kZXM6dSx0aXRsZTphLnRyaW0oKSxjbGFzc2VzOltdLGRpcjpoLGxhYmVsVHlwZTpuLnR5cGV9O3JldHVybiBYLmluZm8oIkFkZGluZyIsZC5pZCxkLm5vZGVzLGQuZGlyKSxkLm5vZGVzPXRoaXMubWFrZVVuaXEoZCx0aGlzLnN1YkdyYXBocykubm9kZXMsdGhpcy5zdWJHcmFwaHMucHVzaChkKSx0aGlzLnN1YkdyYXBoTG9va3VwLnNldChpLGQpLGl9Z2V0UG9zRm9ySWQoZSl7Zm9yKGxldFtyLG5db2YgdGhpcy5zdWJHcmFwaHMuZW50cmllcygpKWlmKG4uaWQ9PT1lKXJldHVybiByO3JldHVybi0xfWluZGV4Tm9kZXMyKGUscil7bGV0IG49dGhpcy5zdWJHcmFwaHNbcl0ubm9kZXM7aWYodGhpcy5zZWNDb3VudD10aGlzLnNlY0NvdW50KzEsdGhpcy5zZWNDb3VudD4yZTMpcmV0dXJue3Jlc3VsdDohMSxjb3VudDowfTtpZih0aGlzLnBvc0Nyb3NzUmVmW3RoaXMuc2VjQ291bnRdPXIsdGhpcy5zdWJHcmFwaHNbcl0uaWQ9PT1lKXJldHVybntyZXN1bHQ6ITAsY291bnQ6MH07bGV0IGk9MCxhPTE7Zm9yKDtpPG4ubGVuZ3RoOyl7bGV0IHM9dGhpcy5nZXRQb3NGb3JJZChuW2ldKTtpZihzPj0wKXtsZXQgbD10aGlzLmluZGV4Tm9kZXMyKGUscyk7aWYobC5yZXN1bHQpcmV0dXJue3Jlc3VsdDohMCxjb3VudDphK2wuY291bnR9O2E9YStsLmNvdW50fWk9aSsxfXJldHVybntyZXN1bHQ6ITEsY291bnQ6YX19Z2V0RGVwdGhGaXJzdFBvcyhlKXtyZXR1cm4gdGhpcy5wb3NDcm9zc1JlZltlXX1pbmRleE5vZGVzKCl7dGhpcy5zZWNDb3VudD0tMSx0aGlzLnN1YkdyYXBocy5sZW5ndGg+MCYmdGhpcy5pbmRleE5vZGVzMigibm9uZSIsdGhpcy5zdWJHcmFwaHMubGVuZ3RoLTEpfWdldFN1YkdyYXBocygpe3JldHVybiB0aGlzLnN1YkdyYXBoc31maXJzdEdyYXBoKCl7cmV0dXJuIHRoaXMuZmlyc3RHcmFwaEZsYWc/KHRoaXMuZmlyc3RHcmFwaEZsYWc9ITEsITApOiExfWRlc3RydWN0U3RhcnRMaW5rKGUpe2xldCByPWUudHJpbSgpLG49ImFycm93X29wZW4iO3N3aXRjaChyWzBdKXtjYXNlIjwiOm49ImFycm93X3BvaW50IixyPXIuc2xpY2UoMSk7YnJlYWs7Y2FzZSJ4IjpuPSJhcnJvd19jcm9zcyIscj1yLnNsaWNlKDEpO2JyZWFrO2Nhc2UibyI6bj0iYXJyb3dfY2lyY2xlIixyPXIuc2xpY2UoMSk7YnJlYWt9bGV0IGk9Im5vcm1hbCI7cmV0dXJuIHIuaW5jbHVkZXMoIj0iKSYmKGk9InRoaWNrIiksci5pbmNsdWRlcygiLiIpJiYoaT0iZG90dGVkIikse3R5cGU6bixzdHJva2U6aX19Y291bnRDaGFyKGUscil7bGV0IG49ci5sZW5ndGgsaT0wO2ZvcihsZXQgYT0wO2E8bjsrK2EpclthXT09PWUmJisraTtyZXR1cm4gaX1kZXN0cnVjdEVuZExpbmsoZSl7bGV0IHI9ZS50cmltKCksbj1yLnNsaWNlKDAsLTEpLGk9ImFycm93X29wZW4iO3N3aXRjaChyLnNsaWNlKC0xKSl7Y2FzZSJ4IjppPSJhcnJvd19jcm9zcyIsci5zdGFydHNXaXRoKCJ4IikmJihpPSJkb3VibGVfIitpLG49bi5zbGljZSgxKSk7YnJlYWs7Y2FzZSI+IjppPSJhcnJvd19wb2ludCIsci5zdGFydHNXaXRoKCI8IikmJihpPSJkb3VibGVfIitpLG49bi5zbGljZSgxKSk7YnJlYWs7Y2FzZSJvIjppPSJhcnJvd19jaXJjbGUiLHIuc3RhcnRzV2l0aCgibyIpJiYoaT0iZG91YmxlXyIraSxuPW4uc2xpY2UoMSkpO2JyZWFrfWxldCBhPSJub3JtYWwiLHM9bi5sZW5ndGgtMTtuLnN0YXJ0c1dpdGgoIj0iKSYmKGE9InRoaWNrIiksbi5zdGFydHNXaXRoKCJ+IikmJihhPSJpbnZpc2libGUiKTtsZXQgbD10aGlzLmNvdW50Q2hhcigiLiIsbik7cmV0dXJuIGwmJihhPSJkb3R0ZWQiLHM9bCkse3R5cGU6aSxzdHJva2U6YSxsZW5ndGg6c319ZGVzdHJ1Y3RMaW5rKGUscil7bGV0IG49dGhpcy5kZXN0cnVjdEVuZExpbmsoZSksaTtpZihyKXtpZihpPXRoaXMuZGVzdHJ1Y3RTdGFydExpbmsociksaS5zdHJva2UhPT1uLnN0cm9rZSlyZXR1cm57dHlwZToiSU5WQUxJRCIsc3Ryb2tlOiJJTlZBTElEIn07aWYoaS50eXBlPT09ImFycm93X29wZW4iKWkudHlwZT1uLnR5cGU7ZWxzZXtpZihpLnR5cGUhPT1uLnR5cGUpcmV0dXJue3R5cGU6IklOVkFMSUQiLHN0cm9rZToiSU5WQUxJRCJ9O2kudHlwZT0iZG91YmxlXyIraS50eXBlfXJldHVybiBpLnR5cGU9PT0iZG91YmxlX2Fycm93IiYmKGkudHlwZT0iZG91YmxlX2Fycm93X3BvaW50IiksaS5sZW5ndGg9bi5sZW5ndGgsaX1yZXR1cm4gbn1leGlzdHMoZSxyKXtmb3IobGV0IG4gb2YgZSlpZihuLm5vZGVzLmluY2x1ZGVzKHIpKXJldHVybiEwO3JldHVybiExfW1ha2VVbmlxKGUscil7bGV0IG49W107cmV0dXJuIGUubm9kZXMuZm9yRWFjaCgoaSxhKT0+e3RoaXMuZXhpc3RzKHIsaSl8fG4ucHVzaChlLm5vZGVzW2FdKX0pLHtub2RlczpufX1nZXRUeXBlRnJvbVZlcnRleChlKXtpZihlLmltZylyZXR1cm4iaW1hZ2VTcXVhcmUiO2lmKGUuaWNvbilyZXR1cm4gZS5mb3JtPT09ImNpcmNsZSI/Imljb25DaXJjbGUiOmUuZm9ybT09PSJzcXVhcmUiPyJpY29uU3F1YXJlIjplLmZvcm09PT0icm91bmRlZCI/Imljb25Sb3VuZGVkIjoiaWNvbiI7c3dpdGNoKGUudHlwZSl7Y2FzZSJzcXVhcmUiOmNhc2Ugdm9pZCAwOnJldHVybiJzcXVhcmVSZWN0IjtjYXNlInJvdW5kIjpyZXR1cm4icm91bmRlZFJlY3QiO2Nhc2UiZWxsaXBzZSI6cmV0dXJuImVsbGlwc2UiO2RlZmF1bHQ6cmV0dXJuIGUudHlwZX19ZmluZE5vZGUoZSxyKXtyZXR1cm4gZS5maW5kKG49Pm4uaWQ9PT1yKX1kZXN0cnVjdEVkZ2VUeXBlKGUpe2xldCByPSJub25lIixuPSJhcnJvd19wb2ludCI7c3dpdGNoKGUpe2Nhc2UiYXJyb3dfcG9pbnQiOmNhc2UiYXJyb3dfY2lyY2xlIjpjYXNlImFycm93X2Nyb3NzIjpuPWU7YnJlYWs7Y2FzZSJkb3VibGVfYXJyb3dfcG9pbnQiOmNhc2UiZG91YmxlX2Fycm93X2NpcmNsZSI6Y2FzZSJkb3VibGVfYXJyb3dfY3Jvc3MiOnI9ZS5yZXBsYWNlKCJkb3VibGVfIiwiIiksbj1yO2JyZWFrfXJldHVybnthcnJvd1R5cGVTdGFydDpyLGFycm93VHlwZUVuZDpufX1hZGROb2RlRnJvbVZlcnRleChlLHIsbixpLGEscyl7bGV0IGw9bi5nZXQoZS5pZCksdT1pLmdldChlLmlkKT8/ITEsaD10aGlzLmZpbmROb2RlKHIsZS5pZCk7aWYoaCloLmNzc1N0eWxlcz1lLnN0eWxlcyxoLmNzc0NvbXBpbGVkU3R5bGVzPXRoaXMuZ2V0Q29tcGlsZWRTdHlsZXMoZS5jbGFzc2VzKSxoLmNzc0NsYXNzZXM9ZS5jbGFzc2VzLmpvaW4oIiAiKTtlbHNle2xldCBmPXtpZDplLmlkLGxhYmVsOmUudGV4dCxsYWJlbFN0eWxlOiIiLHBhcmVudElkOmwscGFkZGluZzphLmZsb3djaGFydD8ucGFkZGluZ3x8OCxjc3NTdHlsZXM6ZS5zdHlsZXMsY3NzQ29tcGlsZWRTdHlsZXM6dGhpcy5nZXRDb21waWxlZFN0eWxlcyhbImRlZmF1bHQiLCJub2RlIiwuLi5lLmNsYXNzZXNdKSxjc3NDbGFzc2VzOiJkZWZhdWx0ICIrZS5jbGFzc2VzLmpvaW4oIiAiKSxkaXI6ZS5kaXIsZG9tSWQ6ZS5kb21JZCxsb29rOnMsbGluazplLmxpbmssbGlua1RhcmdldDplLmxpbmtUYXJnZXQsdG9vbHRpcDp0aGlzLmdldFRvb2x0aXAoZS5pZCksaWNvbjplLmljb24scG9zOmUucG9zLGltZzplLmltZyxhc3NldFdpZHRoOmUuYXNzZXRXaWR0aCxhc3NldEhlaWdodDplLmFzc2V0SGVpZ2h0LGNvbnN0cmFpbnQ6ZS5jb25zdHJhaW50fTt1P3IucHVzaCh7Li4uZixpc0dyb3VwOiEwLHNoYXBlOiJyZWN0In0pOnIucHVzaCh7Li4uZixpc0dyb3VwOiExLHNoYXBlOnRoaXMuZ2V0VHlwZUZyb21WZXJ0ZXgoZSl9KX19Z2V0Q29tcGlsZWRTdHlsZXMoZSl7bGV0IHI9W107Zm9yKGxldCBuIG9mIGUpe2xldCBpPXRoaXMuY2xhc3Nlcy5nZXQobik7aT8uc3R5bGVzJiYocj1bLi4uciwuLi5pLnN0eWxlcz8/W11dLm1hcChhPT5hLnRyaW0oKSkpLGk/LnRleHRTdHlsZXMmJihyPVsuLi5yLC4uLmkudGV4dFN0eWxlcz8/W11dLm1hcChhPT5hLnRyaW0oKSkpfXJldHVybiByfWdldERhdGEoKXtsZXQgZT1tZSgpLHI9W10sbj1bXSxpPXRoaXMuZ2V0U3ViR3JhcGhzKCksYT1uZXcgTWFwLHM9bmV3IE1hcDtmb3IobGV0IGg9aS5sZW5ndGgtMTtoPj0wO2gtLSl7bGV0IGY9aVtoXTtmLm5vZGVzLmxlbmd0aD4wJiZzLnNldChmLmlkLCEwKTtmb3IobGV0IGQgb2YgZi5ub2RlcylhLnNldChkLGYuaWQpfWZvcihsZXQgaD1pLmxlbmd0aC0xO2g+PTA7aC0tKXtsZXQgZj1pW2hdO3IucHVzaCh7aWQ6Zi5pZCxsYWJlbDpmLnRpdGxlLGxhYmVsU3R5bGU6IiIscGFyZW50SWQ6YS5nZXQoZi5pZCkscGFkZGluZzo4LGNzc0NvbXBpbGVkU3R5bGVzOnRoaXMuZ2V0Q29tcGlsZWRTdHlsZXMoZi5jbGFzc2VzKSxjc3NDbGFzc2VzOmYuY2xhc3Nlcy5qb2luKCIgIiksc2hhcGU6InJlY3QiLGRpcjpmLmRpcixpc0dyb3VwOiEwLGxvb2s6ZS5sb29rfSl9dGhpcy5nZXRWZXJ0aWNlcygpLmZvckVhY2goaD0+e3RoaXMuYWRkTm9kZUZyb21WZXJ0ZXgoaCxyLGEscyxlLGUubG9va3x8ImNsYXNzaWMiKX0pO2xldCB1PXRoaXMuZ2V0RWRnZXMoKTtyZXR1cm4gdS5mb3JFYWNoKChoLGYpPT57bGV0e2Fycm93VHlwZVN0YXJ0OmQsYXJyb3dUeXBlRW5kOnB9PXRoaXMuZGVzdHJ1Y3RFZGdlVHlwZShoLnR5cGUpLG09Wy4uLnUuZGVmYXVsdFN0eWxlPz9bXV07aC5zdHlsZSYmbS5wdXNoKC4uLmguc3R5bGUpO2xldCBnPXtpZDpXaChoLnN0YXJ0LGguZW5kLHtjb3VudGVyOmYscHJlZml4OiJMIn0saC5pZCksaXNVc2VyRGVmaW5lZElkOmguaXNVc2VyRGVmaW5lZElkLHN0YXJ0Omguc3RhcnQsZW5kOmguZW5kLHR5cGU6aC50eXBlPz8ibm9ybWFsIixsYWJlbDpoLnRleHQsbGFiZWxwb3M6ImMiLHRoaWNrbmVzczpoLnN0cm9rZSxtaW5sZW46aC5sZW5ndGgsY2xhc3NlczpoPy5zdHJva2U9PT0iaW52aXNpYmxlIj8iIjoiZWRnZS10aGlja25lc3Mtbm9ybWFsIGVkZ2UtcGF0dGVybi1zb2xpZCBmbG93Y2hhcnQtbGluayIsYXJyb3dUeXBlU3RhcnQ6aD8uc3Ryb2tlPT09ImludmlzaWJsZSJ8fGg/LnR5cGU9PT0iYXJyb3dfb3BlbiI/Im5vbmUiOmQsYXJyb3dUeXBlRW5kOmg/LnN0cm9rZT09PSJpbnZpc2libGUifHxoPy50eXBlPT09ImFycm93X29wZW4iPyJub25lIjpwLGFycm93aGVhZFN0eWxlOiJmaWxsOiAjMzMzIixjc3NDb21waWxlZFN0eWxlczp0aGlzLmdldENvbXBpbGVkU3R5bGVzKGguY2xhc3NlcyksbGFiZWxTdHlsZTptLHN0eWxlOm0scGF0dGVybjpoLnN0cm9rZSxsb29rOmUubG9vayxhbmltYXRlOmguYW5pbWF0ZSxhbmltYXRpb246aC5hbmltYXRpb24sY3VydmU6aC5pbnRlcnBvbGF0ZXx8dGhpcy5lZGdlcy5kZWZhdWx0SW50ZXJwb2xhdGV8fGUuZmxvd2NoYXJ0Py5jdXJ2ZX07bi5wdXNoKGcpfSkse25vZGVzOnIsZWRnZXM6bixvdGhlcjp7fSxjb25maWc6ZX19ZGVmYXVsdENvbmZpZygpe3JldHVybiAkMy5mbG93Y2hhcnR9fX0pO3ZhciB3YyxTbT1OKCgpPT57InVzZSBzdHJpY3QiO2ZyKCk7d2M9bygodCxlKT0+e2xldCByO3JldHVybiBlPT09InNhbmRib3giJiYocj1HZSgiI2kiK3QpKSwoZT09PSJzYW5kYm94Ij9HZShyLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpOkdlKCJib2R5IikpLnNlbGVjdChgW2lkPSIke3R9Il1gKX0sImdldERpYWdyYW1FbGVtZW50Iil9KTt2YXIgQnUsUjI9TigoKT0+eyJ1c2Ugc3RyaWN0IjtCdT1vKCh7Zmxvd2NoYXJ0OnR9KT0+e2xldCBlPXQ/LnN1YkdyYXBoVGl0bGVNYXJnaW4/LnRvcD8/MCxyPXQ/LnN1YkdyYXBoVGl0bGVNYXJnaW4/LmJvdHRvbT8/MCxuPWUrcjtyZXR1cm57c3ViR3JhcGhUaXRsZVRvcE1hcmdpbjplLHN1YkdyYXBoVGl0bGVCb3R0b21NYXJnaW46cixzdWJHcmFwaFRpdGxlVG90YWxNYXJnaW46bn19LCJnZXRTdWJHcmFwaFRpdGxlTWFyZ2lucyIpfSk7dmFyIGNlZSxlOWUsdDllLHI5ZSxuOWUsaTllLGE5ZSx1ZWUsQ20saGVlLGF3PU4oKCk9PnsidXNlIHN0cmljdCI7R3QoKTtwcigpO3l0KCk7UjIoKTtmcigpO1d0KCk7YW8oKTttTCgpO3J3KCk7WmgoKTt6dCgpO2NlZT1vKGFzeW5jKHQsZSk9PntYLmluZm8oIkNyZWF0aW5nIHN1YmdyYXBoIHJlY3QgZm9yICIsZS5pZCxlKTtsZXQgcj1tZSgpLHt0aGVtZVZhcmlhYmxlczpuLGhhbmREcmF3blNlZWQ6aX09cix7Y2x1c3RlckJrZzphLGNsdXN0ZXJCb3JkZXI6c309bix7bGFiZWxTdHlsZXM6bCxub2RlU3R5bGVzOnUsYm9yZGVyU3R5bGVzOmgsYmFja2dyb3VuZFN0eWxlczpmfT1ZZShlKSxkPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJjbHVzdGVyICIrZS5jc3NDbGFzc2VzKS5hdHRyKCJpZCIsZS5pZCkuYXR0cigiZGF0YS1sb29rIixlLmxvb2spLHA9ZHIoci5mbG93Y2hhcnQuaHRtbExhYmVscyksbT1kLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiY2x1c3Rlci1sYWJlbCAiKSxnPWF3YWl0IHFuKG0sZS5sYWJlbCx7c3R5bGU6ZS5sYWJlbFN0eWxlLHVzZUh0bWxMYWJlbHM6cCxpc05vZGU6ITB9KSx5PWcuZ2V0QkJveCgpO2lmKGRyKHIuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtsZXQgXz1nLmNoaWxkcmVuWzBdLEM9R2UoZyk7eT1fLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEMuYXR0cigid2lkdGgiLHkud2lkdGgpLEMuYXR0cigiaGVpZ2h0Iix5LmhlaWdodCl9bGV0IHY9ZS53aWR0aDw9eS53aWR0aCtlLnBhZGRpbmc/eS53aWR0aCtlLnBhZGRpbmc6ZS53aWR0aDtlLndpZHRoPD15LndpZHRoK2UucGFkZGluZz9lLmRpZmY9KHYtZS53aWR0aCkvMi1lLnBhZGRpbmc6ZS5kaWZmPS1lLnBhZGRpbmc7bGV0IHg9ZS5oZWlnaHQsYj1lLngtdi8yLFQ9ZS55LXgvMjtYLnRyYWNlKCJEYXRhICIsZSxKU09OLnN0cmluZ2lmeShlKSk7bGV0IFM7aWYoZS5sb29rPT09ImhhbmREcmF3biIpe2xldCBfPWplLnN2ZyhkKSxDPVFlKGUse3JvdWdobmVzczouNyxmaWxsOmEsc3Ryb2tlOnMsZmlsbFdlaWdodDozLHNlZWQ6aX0pLEQ9Xy5wYXRoKE9hKGIsVCx2LHgsMCksQyk7Uz1kLmluc2VydCgoKT0+KFguZGVidWcoIlJvdWdoIG5vZGUgaW5zZXJ0IENYQyIsRCksRCksIjpmaXJzdC1jaGlsZCIpLFMuc2VsZWN0KCJwYXRoOm50aC1jaGlsZCgyKSIpLmF0dHIoInN0eWxlIixoLmpvaW4oIjsiKSksUy5zZWxlY3QoInBhdGgiKS5hdHRyKCJzdHlsZSIsZi5qb2luKCI7IikucmVwbGFjZSgiZmlsbCIsInN0cm9rZSIpKX1lbHNlIFM9ZC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxTLmF0dHIoInN0eWxlIix1KS5hdHRyKCJyeCIsZS5yeCkuYXR0cigicnkiLGUucnkpLmF0dHIoIngiLGIpLmF0dHIoInkiLFQpLmF0dHIoIndpZHRoIix2KS5hdHRyKCJoZWlnaHQiLHgpO2xldHtzdWJHcmFwaFRpdGxlVG9wTWFyZ2luOnd9PUJ1KHIpO2lmKG0uYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7ZS54LXkud2lkdGgvMn0sICR7ZS55LWUuaGVpZ2h0LzIrd30pYCksbCl7bGV0IF89bS5zZWxlY3QoInNwYW4iKTtfJiZfLmF0dHIoInN0eWxlIixsKX1sZXQgRT1TLm5vZGUoKS5nZXRCQm94KCk7cmV0dXJuIGUub2Zmc2V0WD0wLGUud2lkdGg9RS53aWR0aCxlLmhlaWdodD1FLmhlaWdodCxlLm9mZnNldFk9eS5oZWlnaHQtZS5wYWRkaW5nLzIsZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oXyl7cmV0dXJuIFhoKGUsXyl9LHtjbHVzdGVyOmQsbGFiZWxCQm94Onl9fSwicmVjdCIpLGU5ZT1vKCh0LGUpPT57bGV0IHI9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vdGUtY2x1c3RlciIpLmF0dHIoImlkIixlLmlkKSxuPXIuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksaT0wKmUucGFkZGluZyxhPWkvMjtuLmF0dHIoInJ4IixlLnJ4KS5hdHRyKCJyeSIsZS5yeSkuYXR0cigieCIsZS54LWUud2lkdGgvMi1hKS5hdHRyKCJ5IixlLnktZS5oZWlnaHQvMi1hKS5hdHRyKCJ3aWR0aCIsZS53aWR0aCtpKS5hdHRyKCJoZWlnaHQiLGUuaGVpZ2h0K2kpLmF0dHIoImZpbGwiLCJub25lIik7bGV0IHM9bi5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiBlLndpZHRoPXMud2lkdGgsZS5oZWlnaHQ9cy5oZWlnaHQsZS5pbnRlcnNlY3Q9ZnVuY3Rpb24obCl7cmV0dXJuIFhoKGUsbCl9LHtjbHVzdGVyOnIsbGFiZWxCQm94Ont3aWR0aDowLGhlaWdodDowfX19LCJub3RlR3JvdXAiKSx0OWU9byhhc3luYyh0LGUpPT57bGV0IHI9bWUoKSx7dGhlbWVWYXJpYWJsZXM6bixoYW5kRHJhd25TZWVkOml9PXIse2FsdEJhY2tncm91bmQ6YSxjb21wb3NpdGVCYWNrZ3JvdW5kOnMsY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kOmwsbm9kZUJvcmRlcjp1fT1uLGg9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsZS5jc3NDbGFzc2VzKS5hdHRyKCJpZCIsZS5pZCkuYXR0cigiZGF0YS1pZCIsZS5pZCkuYXR0cigiZGF0YS1sb29rIixlLmxvb2spLGY9aC5pbnNlcnQoImciLCI6Zmlyc3QtY2hpbGQiKSxkPWguaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJjbHVzdGVyLWxhYmVsIikscD1oLmFwcGVuZCgicmVjdCIpLG09ZC5ub2RlKCkuYXBwZW5kQ2hpbGQoYXdhaXQgVGMoZS5sYWJlbCxlLmxhYmVsU3R5bGUsdm9pZCAwLCEwKSksZz1tLmdldEJCb3goKTtpZihkcihyLmZsb3djaGFydC5odG1sTGFiZWxzKSl7bGV0IEQ9bS5jaGlsZHJlblswXSxPPUdlKG0pO2c9RC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxPLmF0dHIoIndpZHRoIixnLndpZHRoKSxPLmF0dHIoImhlaWdodCIsZy5oZWlnaHQpfWxldCB5PTAqZS5wYWRkaW5nLHY9eS8yLHg9KGUud2lkdGg8PWcud2lkdGgrZS5wYWRkaW5nP2cud2lkdGgrZS5wYWRkaW5nOmUud2lkdGgpK3k7ZS53aWR0aDw9Zy53aWR0aCtlLnBhZGRpbmc/ZS5kaWZmPSh4LWUud2lkdGgpLzItZS5wYWRkaW5nOmUuZGlmZj0tZS5wYWRkaW5nO2xldCBiPWUuaGVpZ2h0K3ksVD1lLmhlaWdodCt5LWcuaGVpZ2h0LTYsUz1lLngteC8yLHc9ZS55LWIvMjtlLndpZHRoPXg7bGV0IEU9ZS55LWUuaGVpZ2h0LzItditnLmhlaWdodCsyLF87aWYoZS5sb29rPT09ImhhbmREcmF3biIpe2xldCBEPWUuY3NzQ2xhc3Nlcy5pbmNsdWRlcygic3RhdGVkaWFncmFtLWNsdXN0ZXItYWx0IiksTz1qZS5zdmcoaCksUj1lLnJ4fHxlLnJ5P08ucGF0aChPYShTLHcseCxiLDEwKSx7cm91Z2huZXNzOi43LGZpbGw6bCxmaWxsU3R5bGU6InNvbGlkIixzdHJva2U6dSxzZWVkOml9KTpPLnJlY3RhbmdsZShTLHcseCxiLHtzZWVkOml9KTtfPWguaW5zZXJ0KCgpPT5SLCI6Zmlyc3QtY2hpbGQiKTtsZXQgaz1PLnJlY3RhbmdsZShTLEUseCxULHtmaWxsOkQ/YTpzLGZpbGxTdHlsZTpEPyJoYWNodXJlIjoic29saWQiLHN0cm9rZTp1LHNlZWQ6aX0pO189aC5pbnNlcnQoKCk9PlIsIjpmaXJzdC1jaGlsZCIpLHA9aC5pbnNlcnQoKCk9PmspfWVsc2UgXz1mLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLF8uYXR0cigiY2xhc3MiLCJvdXRlciIpLmF0dHIoIngiLFMpLmF0dHIoInkiLHcpLmF0dHIoIndpZHRoIix4KS5hdHRyKCJoZWlnaHQiLGIpLmF0dHIoImRhdGEtbG9vayIsZS5sb29rKSxwLmF0dHIoImNsYXNzIiwiaW5uZXIiKS5hdHRyKCJ4IixTKS5hdHRyKCJ5IixFKS5hdHRyKCJ3aWR0aCIseCkuYXR0cigiaGVpZ2h0IixUKTtkLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke2UueC1nLndpZHRoLzJ9LCAke3crMS0oZHIoci5mbG93Y2hhcnQuaHRtbExhYmVscyk/MDozKX0pYCk7bGV0IEM9Xy5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiBlLmhlaWdodD1DLmhlaWdodCxlLm9mZnNldFg9MCxlLm9mZnNldFk9Zy5oZWlnaHQtZS5wYWRkaW5nLzIsZS5sYWJlbEJCb3g9ZyxlLmludGVyc2VjdD1mdW5jdGlvbihEKXtyZXR1cm4gWGgoZSxEKX0se2NsdXN0ZXI6aCxsYWJlbEJCb3g6Z319LCJyb3VuZGVkV2l0aFRpdGxlIikscjllPW8oYXN5bmModCxlKT0+e1guaW5mbygiQ3JlYXRpbmcgc3ViZ3JhcGggcmVjdCBmb3IgIixlLmlkLGUpO2xldCByPW1lKCkse3RoZW1lVmFyaWFibGVzOm4saGFuZERyYXduU2VlZDppfT1yLHtjbHVzdGVyQmtnOmEsY2x1c3RlckJvcmRlcjpzfT1uLHtsYWJlbFN0eWxlczpsLG5vZGVTdHlsZXM6dSxib3JkZXJTdHlsZXM6aCxiYWNrZ3JvdW5kU3R5bGVzOmZ9PVllKGUpLGQ9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImNsdXN0ZXIgIitlLmNzc0NsYXNzZXMpLmF0dHIoImlkIixlLmlkKS5hdHRyKCJkYXRhLWxvb2siLGUubG9vaykscD1kcihyLmZsb3djaGFydC5odG1sTGFiZWxzKSxtPWQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJjbHVzdGVyLWxhYmVsICIpLGc9YXdhaXQgcW4obSxlLmxhYmVsLHtzdHlsZTplLmxhYmVsU3R5bGUsdXNlSHRtbExhYmVsczpwLGlzTm9kZTohMCx3aWR0aDplLndpZHRofSkseT1nLmdldEJCb3goKTtpZihkcihyLmZsb3djaGFydC5odG1sTGFiZWxzKSl7bGV0IF89Zy5jaGlsZHJlblswXSxDPUdlKGcpO3k9Xy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxDLmF0dHIoIndpZHRoIix5LndpZHRoKSxDLmF0dHIoImhlaWdodCIseS5oZWlnaHQpfWxldCB2PWUud2lkdGg8PXkud2lkdGgrZS5wYWRkaW5nP3kud2lkdGgrZS5wYWRkaW5nOmUud2lkdGg7ZS53aWR0aDw9eS53aWR0aCtlLnBhZGRpbmc/ZS5kaWZmPSh2LWUud2lkdGgpLzItZS5wYWRkaW5nOmUuZGlmZj0tZS5wYWRkaW5nO2xldCB4PWUuaGVpZ2h0LGI9ZS54LXYvMixUPWUueS14LzI7WC50cmFjZSgiRGF0YSAiLGUsSlNPTi5zdHJpbmdpZnkoZSkpO2xldCBTO2lmKGUubG9vaz09PSJoYW5kRHJhd24iKXtsZXQgXz1qZS5zdmcoZCksQz1RZShlLHtyb3VnaG5lc3M6LjcsZmlsbDphLHN0cm9rZTpzLGZpbGxXZWlnaHQ6NCxzZWVkOml9KSxEPV8ucGF0aChPYShiLFQsdix4LGUucngpLEMpO1M9ZC5pbnNlcnQoKCk9PihYLmRlYnVnKCJSb3VnaCBub2RlIGluc2VydCBDWEMiLEQpLEQpLCI6Zmlyc3QtY2hpbGQiKSxTLnNlbGVjdCgicGF0aDpudGgtY2hpbGQoMikiKS5hdHRyKCJzdHlsZSIsaC5qb2luKCI7IikpLFMuc2VsZWN0KCJwYXRoIikuYXR0cigic3R5bGUiLGYuam9pbigiOyIpLnJlcGxhY2UoImZpbGwiLCJzdHJva2UiKSl9ZWxzZSBTPWQuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksUy5hdHRyKCJzdHlsZSIsdSkuYXR0cigicngiLGUucngpLmF0dHIoInJ5IixlLnJ5KS5hdHRyKCJ4IixiKS5hdHRyKCJ5IixUKS5hdHRyKCJ3aWR0aCIsdikuYXR0cigiaGVpZ2h0Iix4KTtsZXR7c3ViR3JhcGhUaXRsZVRvcE1hcmdpbjp3fT1CdShyKTtpZihtLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke2UueC15LndpZHRoLzJ9LCAke2UueS1lLmhlaWdodC8yK3d9KWApLGwpe2xldCBfPW0uc2VsZWN0KCJzcGFuIik7XyYmXy5hdHRyKCJzdHlsZSIsbCl9bGV0IEU9Uy5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiBlLm9mZnNldFg9MCxlLndpZHRoPUUud2lkdGgsZS5oZWlnaHQ9RS5oZWlnaHQsZS5vZmZzZXRZPXkuaGVpZ2h0LWUucGFkZGluZy8yLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKF8pe3JldHVybiBYaChlLF8pfSx7Y2x1c3RlcjpkLGxhYmVsQkJveDp5fX0sImthbmJhblNlY3Rpb24iKSxuOWU9bygodCxlKT0+e2xldCByPW1lKCkse3RoZW1lVmFyaWFibGVzOm4saGFuZERyYXduU2VlZDppfT1yLHtub2RlQm9yZGVyOmF9PW4scz10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIixlLmNzc0NsYXNzZXMpLmF0dHIoImlkIixlLmlkKS5hdHRyKCJkYXRhLWxvb2siLGUubG9vayksbD1zLmluc2VydCgiZyIsIjpmaXJzdC1jaGlsZCIpLHU9MCplLnBhZGRpbmcsaD1lLndpZHRoK3U7ZS5kaWZmPS1lLnBhZGRpbmc7bGV0IGY9ZS5oZWlnaHQrdSxkPWUueC1oLzIscD1lLnktZi8yO2Uud2lkdGg9aDtsZXQgbTtpZihlLmxvb2s9PT0iaGFuZERyYXduIil7bGV0IHY9amUuc3ZnKHMpLnJlY3RhbmdsZShkLHAsaCxmLHtmaWxsOiJsaWdodGdyZXkiLHJvdWdobmVzczouNSxzdHJva2VMaW5lRGFzaDpbNV0sc3Ryb2tlOmEsc2VlZDppfSk7bT1zLmluc2VydCgoKT0+diwiOmZpcnN0LWNoaWxkIil9ZWxzZSBtPWwuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksbS5hdHRyKCJjbGFzcyIsImRpdmlkZXIiKS5hdHRyKCJ4IixkKS5hdHRyKCJ5IixwKS5hdHRyKCJ3aWR0aCIsaCkuYXR0cigiaGVpZ2h0IixmKS5hdHRyKCJkYXRhLWxvb2siLGUubG9vayk7bGV0IGc9bS5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiBlLmhlaWdodD1nLmhlaWdodCxlLm9mZnNldFg9MCxlLm9mZnNldFk9MCxlLmludGVyc2VjdD1mdW5jdGlvbih5KXtyZXR1cm4gWGgoZSx5KX0se2NsdXN0ZXI6cyxsYWJlbEJCb3g6e319fSwiZGl2aWRlciIpLGk5ZT1jZWUsYTllPXtyZWN0OmNlZSxzcXVhcmVSZWN0Omk5ZSxyb3VuZGVkV2l0aFRpdGxlOnQ5ZSxub3RlR3JvdXA6ZTllLGRpdmlkZXI6bjllLGthbmJhblNlY3Rpb246cjllfSx1ZWU9bmV3IE1hcCxDbT1vKGFzeW5jKHQsZSk9PntsZXQgcj1lLnNoYXBlfHwicmVjdCIsbj1hd2FpdCBhOWVbcl0odCxlKTtyZXR1cm4gdWVlLnNldChlLmlkLG4pLG59LCJpbnNlcnRDbHVzdGVyIiksaGVlPW8oKCk9Pnt1ZWU9bmV3IE1hcH0sImNsZWFyIil9KTtmdW5jdGlvbiBzdyh0LGUpe2lmKHQ9PT12b2lkIDB8fGU9PT12b2lkIDApcmV0dXJue2FuZ2xlOjAsZGVsdGFYOjAsZGVsdGFZOjB9O3Q9WW4odCksZT1ZbihlKTtsZXRbcixuXT1bdC54LHQueV0sW2ksYV09W2UueCxlLnldLHM9aS1yLGw9YS1uO3JldHVybnthbmdsZTpNYXRoLmF0YW4obC9zKSxkZWx0YVg6cyxkZWx0YVk6bH19dmFyIFZvLFluLG93LFBMPU4oKCk9PnsidXNlIHN0cmljdCI7Vm89e2FnZ3JlZ2F0aW9uOjE4LGV4dGVuc2lvbjoxOCxjb21wb3NpdGlvbjoxOCxkZXBlbmRlbmN5OjYsbG9sbGlwb3A6MTMuNSxhcnJvd19wb2ludDo0fTtvKHN3LCJjYWxjdWxhdGVEZWx0YUFuZEFuZ2xlIik7WW49byh0PT5BcnJheS5pc0FycmF5KHQpP3t4OnRbMF0seTp0WzFdfTp0LCJwb2ludFRyYW5zZm9ybWVyIiksb3c9byh0PT4oe3g6byhmdW5jdGlvbihlLHIsbil7bGV0IGk9MCxhPVluKG5bMF0pLng8WW4obltuLmxlbmd0aC0xXSkueD8ibGVmdCI6InJpZ2h0IjtpZihyPT09MCYmT2JqZWN0Lmhhc093bihWbyx0LmFycm93VHlwZVN0YXJ0KSl7bGV0e2FuZ2xlOm0sZGVsdGFYOmd9PXN3KG5bMF0sblsxXSk7aT1Wb1t0LmFycm93VHlwZVN0YXJ0XSpNYXRoLmNvcyhtKSooZz49MD8xOi0xKX1lbHNlIGlmKHI9PT1uLmxlbmd0aC0xJiZPYmplY3QuaGFzT3duKFZvLHQuYXJyb3dUeXBlRW5kKSl7bGV0e2FuZ2xlOm0sZGVsdGFYOmd9PXN3KG5bbi5sZW5ndGgtMV0sbltuLmxlbmd0aC0yXSk7aT1Wb1t0LmFycm93VHlwZUVuZF0qTWF0aC5jb3MobSkqKGc+PTA/MTotMSl9bGV0IHM9TWF0aC5hYnMoWW4oZSkueC1ZbihuW24ubGVuZ3RoLTFdKS54KSxsPU1hdGguYWJzKFluKGUpLnktWW4obltuLmxlbmd0aC0xXSkueSksdT1NYXRoLmFicyhZbihlKS54LVluKG5bMF0pLngpLGg9TWF0aC5hYnMoWW4oZSkueS1ZbihuWzBdKS55KSxmPVZvW3QuYXJyb3dUeXBlU3RhcnRdLGQ9Vm9bdC5hcnJvd1R5cGVFbmRdLHA9MTtpZihzPGQmJnM+MCYmbDxkKXtsZXQgbT1kK3AtczttKj1hPT09InJpZ2h0Ij8tMToxLGktPW19aWYodTxmJiZ1PjAmJmg8Zil7bGV0IG09ZitwLXU7bSo9YT09PSJyaWdodCI/LTE6MSxpKz1tfXJldHVybiBZbihlKS54K2l9LCJ4IikseTpvKGZ1bmN0aW9uKGUscixuKXtsZXQgaT0wLGE9WW4oblswXSkueTxZbihuW24ubGVuZ3RoLTFdKS55PyJkb3duIjoidXAiO2lmKHI9PT0wJiZPYmplY3QuaGFzT3duKFZvLHQuYXJyb3dUeXBlU3RhcnQpKXtsZXR7YW5nbGU6bSxkZWx0YVk6Z309c3coblswXSxuWzFdKTtpPVZvW3QuYXJyb3dUeXBlU3RhcnRdKk1hdGguYWJzKE1hdGguc2luKG0pKSooZz49MD8xOi0xKX1lbHNlIGlmKHI9PT1uLmxlbmd0aC0xJiZPYmplY3QuaGFzT3duKFZvLHQuYXJyb3dUeXBlRW5kKSl7bGV0e2FuZ2xlOm0sZGVsdGFZOmd9PXN3KG5bbi5sZW5ndGgtMV0sbltuLmxlbmd0aC0yXSk7aT1Wb1t0LmFycm93VHlwZUVuZF0qTWF0aC5hYnMoTWF0aC5zaW4obSkpKihnPj0wPzE6LTEpfWxldCBzPU1hdGguYWJzKFluKGUpLnktWW4obltuLmxlbmd0aC0xXSkueSksbD1NYXRoLmFicyhZbihlKS54LVluKG5bbi5sZW5ndGgtMV0pLngpLHU9TWF0aC5hYnMoWW4oZSkueS1ZbihuWzBdKS55KSxoPU1hdGguYWJzKFluKGUpLngtWW4oblswXSkueCksZj1Wb1t0LmFycm93VHlwZVN0YXJ0XSxkPVZvW3QuYXJyb3dUeXBlRW5kXSxwPTE7aWYoczxkJiZzPjAmJmw8ZCl7bGV0IG09ZCtwLXM7bSo9YT09PSJ1cCI/LTE6MSxpLT1tfWlmKHU8ZiYmdT4wJiZoPGYpe2xldCBtPWYrcC11O20qPWE9PT0idXAiPy0xOjEsaSs9bX1yZXR1cm4gWW4oZSkueStpfSwieSIpfSksImdldExpbmVGdW5jdGlvbnNXaXRoT2Zmc2V0Iil9KTt2YXIgZGVlLHM5ZSxmZWUscGVlPU4oKCk9PnsidXNlIHN0cmljdCI7eXQoKTtkZWU9bygodCxlLHIsbixpLGEpPT57ZS5hcnJvd1R5cGVTdGFydCYmZmVlKHQsInN0YXJ0IixlLmFycm93VHlwZVN0YXJ0LHIsbixpLGEpLGUuYXJyb3dUeXBlRW5kJiZmZWUodCwiZW5kIixlLmFycm93VHlwZUVuZCxyLG4saSxhKX0sImFkZEVkZ2VNYXJrZXJzIiksczllPXthcnJvd19jcm9zczp7dHlwZToiY3Jvc3MiLGZpbGw6ITF9LGFycm93X3BvaW50Ont0eXBlOiJwb2ludCIsZmlsbDohMH0sYXJyb3dfYmFyYjp7dHlwZToiYmFyYiIsZmlsbDohMH0sYXJyb3dfY2lyY2xlOnt0eXBlOiJjaXJjbGUiLGZpbGw6ITF9LGFnZ3JlZ2F0aW9uOnt0eXBlOiJhZ2dyZWdhdGlvbiIsZmlsbDohMX0sZXh0ZW5zaW9uOnt0eXBlOiJleHRlbnNpb24iLGZpbGw6ITF9LGNvbXBvc2l0aW9uOnt0eXBlOiJjb21wb3NpdGlvbiIsZmlsbDohMH0sZGVwZW5kZW5jeTp7dHlwZToiZGVwZW5kZW5jeSIsZmlsbDohMH0sbG9sbGlwb3A6e3R5cGU6ImxvbGxpcG9wIixmaWxsOiExfSxvbmx5X29uZTp7dHlwZToib25seU9uZSIsZmlsbDohMX0semVyb19vcl9vbmU6e3R5cGU6Inplcm9Pck9uZSIsZmlsbDohMX0sb25lX29yX21vcmU6e3R5cGU6Im9uZU9yTW9yZSIsZmlsbDohMX0semVyb19vcl9tb3JlOnt0eXBlOiJ6ZXJvT3JNb3JlIixmaWxsOiExfSxyZXF1aXJlbWVudF9hcnJvdzp7dHlwZToicmVxdWlyZW1lbnRfYXJyb3ciLGZpbGw6ITF9LHJlcXVpcmVtZW50X2NvbnRhaW5zOnt0eXBlOiJyZXF1aXJlbWVudF9jb250YWlucyIsZmlsbDohMX19LGZlZT1vKCh0LGUscixuLGksYSxzKT0+e2xldCBsPXM5ZVtyXTtpZighbCl7WC53YXJuKGBVbmtub3duIGFycm93IHR5cGU6ICR7cn1gKTtyZXR1cm59bGV0IHU9bC50eXBlLGY9YCR7aX1fJHthfS0ke3V9JHtlPT09InN0YXJ0Ij8iU3RhcnQiOiJFbmQifWA7aWYocyYmcy50cmltKCkhPT0iIil7bGV0IGQ9cy5yZXBsYWNlKC9bXlxkQS1aYS16XS9nLCJfIikscD1gJHtmfV8ke2R9YDtpZighZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocCkpe2xldCBtPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGYpO2lmKG0pe2xldCBnPW0uY2xvbmVOb2RlKCEwKTtnLmlkPXAsZy5xdWVyeVNlbGVjdG9yQWxsKCJwYXRoLCBjaXJjbGUsIGxpbmUiKS5mb3JFYWNoKHY9Pnt2LnNldEF0dHJpYnV0ZSgic3Ryb2tlIixzKSxsLmZpbGwmJnYuc2V0QXR0cmlidXRlKCJmaWxsIixzKX0pLG0ucGFyZW50Tm9kZT8uYXBwZW5kQ2hpbGQoZyl9fXQuYXR0cihgbWFya2VyLSR7ZX1gLGB1cmwoJHtufSMke3B9KWApfWVsc2UgdC5hdHRyKGBtYXJrZXItJHtlfWAsYHVybCgke259IyR7Zn0pYCl9LCJhZGRFZGdlTWFya2VyIil9KTtmdW5jdGlvbiBsdyh0LGUpe21lKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMmJnQmJih0LnN0eWxlLndpZHRoPWUubGVuZ3RoKjkrInB4Iix0LnN0eWxlLmhlaWdodD0iMTJweCIpfWZ1bmN0aW9uIGM5ZSh0KXtsZXQgZT1bXSxyPVtdO2ZvcihsZXQgbj0xO248dC5sZW5ndGgtMTtuKyspe2xldCBpPXRbbi0xXSxhPXRbbl0scz10W24rMV07KGkueD09PWEueCYmYS55PT09cy55JiZNYXRoLmFicyhhLngtcy54KT41JiZNYXRoLmFicyhhLnktaS55KT41fHxpLnk9PT1hLnkmJmEueD09PXMueCYmTWF0aC5hYnMoYS54LWkueCk+NSYmTWF0aC5hYnMoYS55LXMueSk+NSkmJihlLnB1c2goYSksci5wdXNoKG4pKX1yZXR1cm57Y29ybmVyUG9pbnRzOmUsY29ybmVyUG9pbnRQb3NpdGlvbnM6cn19dmFyIGN3LGRhLHllZSxOMix1dyxodyxvOWUsbDllLG1lZSxnZWUsdTllLGZ3LEJMPU4oKCk9PnsidXNlIHN0cmljdCI7R3QoKTtwcigpO3l0KCk7YW8oKTtlcigpO1BMKCk7UjIoKTtmcigpO1d0KCk7cncoKTtwZWUoKTt6dCgpO2N3PW5ldyBNYXAsZGE9bmV3IE1hcCx5ZWU9bygoKT0+e2N3LmNsZWFyKCksZGEuY2xlYXIoKX0sImNsZWFyIiksTjI9byh0PT50P3QucmVkdWNlKChyLG4pPT5yKyI7IituLCIiKToiIiwiZ2V0TGFiZWxTdHlsZXMiKSx1dz1vKGFzeW5jKHQsZSk9PntsZXQgcj1kcihtZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKSxuPWF3YWl0IHFuKHQsZS5sYWJlbCx7c3R5bGU6TjIoZS5sYWJlbFN0eWxlKSx1c2VIdG1sTGFiZWxzOnIsYWRkU3ZnQmFja2dyb3VuZDohMCxpc05vZGU6ITF9KTtYLmluZm8oImFiYzgyIixlLGUubGFiZWxUeXBlKTtsZXQgaT10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZUxhYmVsIiksYT1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKTthLm5vZGUoKS5hcHBlbmRDaGlsZChuKTtsZXQgcz1uLmdldEJCb3goKTtpZihyKXtsZXQgdT1uLmNoaWxkcmVuWzBdLGg9R2Uobik7cz11LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGguYXR0cigid2lkdGgiLHMud2lkdGgpLGguYXR0cigiaGVpZ2h0IixzLmhlaWdodCl9YS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistcy53aWR0aC8yKyIsICIrLXMuaGVpZ2h0LzIrIikiKSxjdy5zZXQoZS5pZCxpKSxlLndpZHRoPXMud2lkdGgsZS5oZWlnaHQ9cy5oZWlnaHQ7bGV0IGw7aWYoZS5zdGFydExhYmVsTGVmdCl7bGV0IHU9YXdhaXQgVGMoZS5zdGFydExhYmVsTGVmdCxOMihlLmxhYmVsU3R5bGUpKSxoPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlVGVybWluYWxzIiksZj1oLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiaW5uZXIiKTtsPWYubm9kZSgpLmFwcGVuZENoaWxkKHUpO2xldCBkPXUuZ2V0QkJveCgpO2YuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWQud2lkdGgvMisiLCAiKy1kLmhlaWdodC8yKyIpIiksZGEuZ2V0KGUuaWQpfHxkYS5zZXQoZS5pZCx7fSksZGEuZ2V0KGUuaWQpLnN0YXJ0TGVmdD1oLGx3KGwsZS5zdGFydExhYmVsTGVmdCl9aWYoZS5zdGFydExhYmVsUmlnaHQpe2xldCB1PWF3YWl0IFRjKGUuc3RhcnRMYWJlbFJpZ2h0LE4yKGUubGFiZWxTdHlsZSkpLGg9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VUZXJtaW5hbHMiKSxmPWguaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJpbm5lciIpO2w9aC5ub2RlKCkuYXBwZW5kQ2hpbGQodSksZi5ub2RlKCkuYXBwZW5kQ2hpbGQodSk7bGV0IGQ9dS5nZXRCQm94KCk7Zi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistZC53aWR0aC8yKyIsICIrLWQuaGVpZ2h0LzIrIikiKSxkYS5nZXQoZS5pZCl8fGRhLnNldChlLmlkLHt9KSxkYS5nZXQoZS5pZCkuc3RhcnRSaWdodD1oLGx3KGwsZS5zdGFydExhYmVsUmlnaHQpfWlmKGUuZW5kTGFiZWxMZWZ0KXtsZXQgdT1hd2FpdCBUYyhlLmVuZExhYmVsTGVmdCxOMihlLmxhYmVsU3R5bGUpKSxoPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlVGVybWluYWxzIiksZj1oLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiaW5uZXIiKTtsPWYubm9kZSgpLmFwcGVuZENoaWxkKHUpO2xldCBkPXUuZ2V0QkJveCgpO2YuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWQud2lkdGgvMisiLCAiKy1kLmhlaWdodC8yKyIpIiksaC5ub2RlKCkuYXBwZW5kQ2hpbGQodSksZGEuZ2V0KGUuaWQpfHxkYS5zZXQoZS5pZCx7fSksZGEuZ2V0KGUuaWQpLmVuZExlZnQ9aCxsdyhsLGUuZW5kTGFiZWxMZWZ0KX1pZihlLmVuZExhYmVsUmlnaHQpe2xldCB1PWF3YWl0IFRjKGUuZW5kTGFiZWxSaWdodCxOMihlLmxhYmVsU3R5bGUpKSxoPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlVGVybWluYWxzIiksZj1oLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiaW5uZXIiKTtsPWYubm9kZSgpLmFwcGVuZENoaWxkKHUpO2xldCBkPXUuZ2V0QkJveCgpO2YuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWQud2lkdGgvMisiLCAiKy1kLmhlaWdodC8yKyIpIiksaC5ub2RlKCkuYXBwZW5kQ2hpbGQodSksZGEuZ2V0KGUuaWQpfHxkYS5zZXQoZS5pZCx7fSksZGEuZ2V0KGUuaWQpLmVuZFJpZ2h0PWgsbHcobCxlLmVuZExhYmVsUmlnaHQpfXJldHVybiBufSwiaW5zZXJ0RWRnZUxhYmVsIik7byhsdywic2V0VGVybWluYWxXaWR0aCIpO2h3PW8oKHQsZSk9PntYLmRlYnVnKCJNb3ZpbmcgbGFiZWwgYWJjODggIix0LmlkLHQubGFiZWwsY3cuZ2V0KHQuaWQpLGUpO2xldCByPWUudXBkYXRlZFBhdGg/ZS51cGRhdGVkUGF0aDplLm9yaWdpbmFsUGF0aCxuPW1lKCkse3N1YkdyYXBoVGl0bGVUb3RhbE1hcmdpbjppfT1CdShuKTtpZih0LmxhYmVsKXtsZXQgYT1jdy5nZXQodC5pZCkscz10LngsbD10Lnk7aWYocil7bGV0IHU9VnQuY2FsY0xhYmVsUG9zaXRpb24ocik7WC5kZWJ1ZygiTW92aW5nIGxhYmVsICIrdC5sYWJlbCsiIGZyb20gKCIscywiLCIsbCwiKSB0byAoIix1LngsIiwiLHUueSwiKSBhYmM4OCIpLGUudXBkYXRlZFBhdGgmJihzPXUueCxsPXUueSl9YS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtzfSwgJHtsK2kvMn0pYCl9aWYodC5zdGFydExhYmVsTGVmdCl7bGV0IGE9ZGEuZ2V0KHQuaWQpLnN0YXJ0TGVmdCxzPXQueCxsPXQueTtpZihyKXtsZXQgdT1WdC5jYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uKHQuYXJyb3dUeXBlU3RhcnQ/MTA6MCwic3RhcnRfbGVmdCIscik7cz11LngsbD11Lnl9YS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtzfSwgJHtsfSlgKX1pZih0LnN0YXJ0TGFiZWxSaWdodCl7bGV0IGE9ZGEuZ2V0KHQuaWQpLnN0YXJ0UmlnaHQscz10LngsbD10Lnk7aWYocil7bGV0IHU9VnQuY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbih0LmFycm93VHlwZVN0YXJ0PzEwOjAsInN0YXJ0X3JpZ2h0IixyKTtzPXUueCxsPXUueX1hLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3N9LCAke2x9KWApfWlmKHQuZW5kTGFiZWxMZWZ0KXtsZXQgYT1kYS5nZXQodC5pZCkuZW5kTGVmdCxzPXQueCxsPXQueTtpZihyKXtsZXQgdT1WdC5jYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uKHQuYXJyb3dUeXBlRW5kPzEwOjAsImVuZF9sZWZ0IixyKTtzPXUueCxsPXUueX1hLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3N9LCAke2x9KWApfWlmKHQuZW5kTGFiZWxSaWdodCl7bGV0IGE9ZGEuZ2V0KHQuaWQpLmVuZFJpZ2h0LHM9dC54LGw9dC55O2lmKHIpe2xldCB1PVZ0LmNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb24odC5hcnJvd1R5cGVFbmQ/MTA6MCwiZW5kX3JpZ2h0IixyKTtzPXUueCxsPXUueX1hLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3N9LCAke2x9KWApfX0sInBvc2l0aW9uRWRnZUxhYmVsIiksbzllPW8oKHQsZSk9PntsZXQgcj10Lngsbj10LnksaT1NYXRoLmFicyhlLngtciksYT1NYXRoLmFicyhlLnktbikscz10LndpZHRoLzIsbD10LmhlaWdodC8yO3JldHVybiBpPj1zfHxhPj1sfSwib3V0c2lkZU5vZGUiKSxsOWU9bygodCxlLHIpPT57WC5kZWJ1ZyhgaW50ZXJzZWN0aW9uIGNhbGMgYWJjODk6CiAgb3V0c2lkZVBvaW50OiAke0pTT04uc3RyaW5naWZ5KGUpfQogIGluc2lkZVBvaW50IDogJHtKU09OLnN0cmluZ2lmeShyKX0KICBub2RlICAgICAgICA6IHg6JHt0Lnh9IHk6JHt0Lnl9IHc6JHt0LndpZHRofSBoOiR7dC5oZWlnaHR9YCk7bGV0IG49dC54LGk9dC55LGE9TWF0aC5hYnMobi1yLngpLHM9dC53aWR0aC8yLGw9ci54PGUueD9zLWE6cythLHU9dC5oZWlnaHQvMixoPU1hdGguYWJzKGUueS1yLnkpLGY9TWF0aC5hYnMoZS54LXIueCk7aWYoTWF0aC5hYnMoaS1lLnkpKnM+TWF0aC5hYnMobi1lLngpKnUpe2xldCBkPXIueTxlLnk/ZS55LXUtaTppLXUtZS55O2w9ZipkL2g7bGV0IHA9e3g6ci54PGUueD9yLngrbDpyLngtZitsLHk6ci55PGUueT9yLnkraC1kOnIueS1oK2R9O3JldHVybiBsPT09MCYmKHAueD1lLngscC55PWUueSksZj09PTAmJihwLng9ZS54KSxoPT09MCYmKHAueT1lLnkpLFguZGVidWcoYGFiYzg5IHRvcC9ib3R0b20gY2FsYywgUSAke2h9LCBxICR7ZH0sIFIgJHtmfSwgciAke2x9YCxwKSxwfWVsc2V7ci54PGUueD9sPWUueC1zLW46bD1uLXMtZS54O2xldCBkPWgqbC9mLHA9ci54PGUueD9yLngrZi1sOnIueC1mK2wsbT1yLnk8ZS55P3IueStkOnIueS1kO3JldHVybiBYLmRlYnVnKGBzaWRlcyBjYWxjIGFiYzg5LCBRICR7aH0sIHEgJHtkfSwgUiAke2Z9LCByICR7bH1gLHtfeDpwLF95Om19KSxsPT09MCYmKHA9ZS54LG09ZS55KSxmPT09MCYmKHA9ZS54KSxoPT09MCYmKG09ZS55KSx7eDpwLHk6bX19fSwiaW50ZXJzZWN0aW9uIiksbWVlPW8oKHQsZSk9PntYLndhcm4oImFiYzg4IGN1dFBhdGhBdEludGVyc2VjdCIsdCxlKTtsZXQgcj1bXSxuPXRbMF0saT0hMTtyZXR1cm4gdC5mb3JFYWNoKGE9PntpZihYLmluZm8oImFiYzg4IGNoZWNraW5nIHBvaW50IixhLGUpLCFvOWUoZSxhKSYmIWkpe2xldCBzPWw5ZShlLG4sYSk7WC5kZWJ1ZygiYWJjODggaW5zaWRlIixhLG4scyksWC5kZWJ1ZygiYWJjODggaW50ZXJzZWN0aW9uIixzLGUpO2xldCBsPSExO3IuZm9yRWFjaCh1PT57bD1sfHx1Lng9PT1zLngmJnUueT09PXMueX0pLHIuc29tZSh1PT51Lng9PT1zLngmJnUueT09PXMueSk/WC53YXJuKCJhYmM4OCBubyBpbnRlcnNlY3QiLHMscik6ci5wdXNoKHMpLGk9ITB9ZWxzZSBYLndhcm4oImFiYzg4IG91dHNpZGUiLGEsbiksbj1hLGl8fHIucHVzaChhKX0pLFguZGVidWcoInJldHVybmluZyBwb2ludHMiLHIpLHJ9LCJjdXRQYXRoQXRJbnRlcnNlY3QiKTtvKGM5ZSwiZXh0cmFjdENvcm5lclBvaW50cyIpO2dlZT1vKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj1lLngtdC54LGk9ZS55LXQueSxhPU1hdGguc3FydChuKm4raSppKSxzPXIvYTtyZXR1cm57eDplLngtcypuLHk6ZS55LXMqaX19LCJmaW5kQWRqYWNlbnRQb2ludCIpLHU5ZT1vKGZ1bmN0aW9uKHQpe2xldHtjb3JuZXJQb2ludFBvc2l0aW9uczplfT1jOWUodCkscj1bXTtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKylpZihlLmluY2x1ZGVzKG4pKXtsZXQgaT10W24tMV0sYT10W24rMV0scz10W25dLGw9Z2VlKGkscyw1KSx1PWdlZShhLHMsNSksaD11LngtbC54LGY9dS55LWwueTtyLnB1c2gobCk7bGV0IGQ9TWF0aC5zcXJ0KDIpKjIscD17eDpzLngseTpzLnl9O2lmKE1hdGguYWJzKGEueC1pLngpPjEwJiZNYXRoLmFicyhhLnktaS55KT49MTApe1guZGVidWcoIkNvcm5lciBwb2ludCBmaXhpbmciLE1hdGguYWJzKGEueC1pLngpLE1hdGguYWJzKGEueS1pLnkpKTtsZXQgbT01O3MueD09PWwueD9wPXt4Omg8MD9sLngtbStkOmwueCttLWQseTpmPDA/bC55LWQ6bC55K2R9OnA9e3g6aDwwP2wueC1kOmwueCtkLHk6ZjwwP2wueS1tK2Q6bC55K20tZH19ZWxzZSBYLmRlYnVnKCJDb3JuZXIgcG9pbnQgc2tpcHBpbmcgZml4aW5nIixNYXRoLmFicyhhLngtaS54KSxNYXRoLmFicyhhLnktaS55KSk7ci5wdXNoKHAsdSl9ZWxzZSByLnB1c2godFtuXSk7cmV0dXJuIHJ9LCJmaXhDb3JuZXJzIiksZnc9byhmdW5jdGlvbih0LGUscixuLGksYSxzKXtsZXR7aGFuZERyYXduU2VlZDpsfT1tZSgpLHU9ZS5wb2ludHMsaD0hMSxmPWk7dmFyIGQ9YTtsZXQgcD1bXTtmb3IobGV0IEQgaW4gZS5jc3NDb21waWxlZFN0eWxlcylTMihEKXx8cC5wdXNoKGUuY3NzQ29tcGlsZWRTdHlsZXNbRF0pO2QuaW50ZXJzZWN0JiZmLmludGVyc2VjdCYmKHU9dS5zbGljZSgxLGUucG9pbnRzLmxlbmd0aC0xKSx1LnVuc2hpZnQoZi5pbnRlcnNlY3QodVswXSkpLFguZGVidWcoIkxhc3QgcG9pbnQgQVBBMTIiLGUuc3RhcnQsIi0tPiIsZS5lbmQsdVt1Lmxlbmd0aC0xXSxkLGQuaW50ZXJzZWN0KHVbdS5sZW5ndGgtMV0pKSx1LnB1c2goZC5pbnRlcnNlY3QodVt1Lmxlbmd0aC0xXSkpKSxlLnRvQ2x1c3RlciYmKFguaW5mbygidG8gY2x1c3RlciBhYmM4OCIsci5nZXQoZS50b0NsdXN0ZXIpKSx1PW1lZShlLnBvaW50cyxyLmdldChlLnRvQ2x1c3Rlcikubm9kZSksaD0hMCksZS5mcm9tQ2x1c3RlciYmKFguZGVidWcoImZyb20gY2x1c3RlciBhYmM4OCIsci5nZXQoZS5mcm9tQ2x1c3RlciksSlNPTi5zdHJpbmdpZnkodSxudWxsLDIpKSx1PW1lZSh1LnJldmVyc2UoKSxyLmdldChlLmZyb21DbHVzdGVyKS5ub2RlKS5yZXZlcnNlKCksaD0hMCk7bGV0IG09dS5maWx0ZXIoRD0+IU51bWJlci5pc05hTihELnkpKTttPXU5ZShtKTtsZXQgZz1Obztzd2l0Y2goZz1TdSxlLmN1cnZlKXtjYXNlImxpbmVhciI6Zz1TdTticmVhaztjYXNlImJhc2lzIjpnPU5vO2JyZWFrO2Nhc2UiY2FyZGluYWwiOmc9cXY7YnJlYWs7Y2FzZSJidW1wWCI6Zz1HdjticmVhaztjYXNlImJ1bXBZIjpnPVZ2O2JyZWFrO2Nhc2UiY2F0bXVsbFJvbSI6Zz1qdjticmVhaztjYXNlIm1vbm90b25lWCI6Zz1LdjticmVhaztjYXNlIm1vbm90b25lWSI6Zz1RdjticmVhaztjYXNlIm5hdHVyYWwiOmc9SzA7YnJlYWs7Y2FzZSJzdGVwIjpnPVEwO2JyZWFrO2Nhc2Uic3RlcEFmdGVyIjpnPUp2O2JyZWFrO2Nhc2Uic3RlcEJlZm9yZSI6Zz1adjticmVhaztkZWZhdWx0Omc9Tm99bGV0e3g6eSx5OnZ9PW93KGUpLHg9Q2woKS54KHkpLnkodikuY3VydmUoZyksYjtzd2l0Y2goZS50aGlja25lc3Mpe2Nhc2Uibm9ybWFsIjpiPSJlZGdlLXRoaWNrbmVzcy1ub3JtYWwiO2JyZWFrO2Nhc2UidGhpY2siOmI9ImVkZ2UtdGhpY2tuZXNzLXRoaWNrIjticmVhaztjYXNlImludmlzaWJsZSI6Yj0iZWRnZS10aGlja25lc3MtaW52aXNpYmxlIjticmVhaztkZWZhdWx0OmI9ImVkZ2UtdGhpY2tuZXNzLW5vcm1hbCJ9c3dpdGNoKGUucGF0dGVybil7Y2FzZSJzb2xpZCI6Yis9IiBlZGdlLXBhdHRlcm4tc29saWQiO2JyZWFrO2Nhc2UiZG90dGVkIjpiKz0iIGVkZ2UtcGF0dGVybi1kb3R0ZWQiO2JyZWFrO2Nhc2UiZGFzaGVkIjpiKz0iIGVkZ2UtcGF0dGVybi1kYXNoZWQiO2JyZWFrO2RlZmF1bHQ6Yis9IiBlZGdlLXBhdHRlcm4tc29saWQifWxldCBULFM9eChtKSx3PUFycmF5LmlzQXJyYXkoZS5zdHlsZSk/ZS5zdHlsZTplLnN0eWxlP1tlLnN0eWxlXTpbXSxFPXcuZmluZChEPT5EPy5zdGFydHNXaXRoKCJzdHJva2U6IikpO2lmKGUubG9vaz09PSJoYW5kRHJhd24iKXtsZXQgRD1qZS5zdmcodCk7T2JqZWN0LmFzc2lnbihbXSxtKTtsZXQgTz1ELnBhdGgoUyx7cm91Z2huZXNzOi4zLHNlZWQ6bH0pO2IrPSIgdHJhbnNpdGlvbiIsVD1HZShPKS5zZWxlY3QoInBhdGgiKS5hdHRyKCJpZCIsZS5pZCkuYXR0cigiY2xhc3MiLCIgIitiKyhlLmNsYXNzZXM/IiAiK2UuY2xhc3NlczoiIikpLmF0dHIoInN0eWxlIix3P3cucmVkdWNlKChrLEwpPT5rKyI7IitMLCIiKToiIik7bGV0IFI9VC5hdHRyKCJkIik7VC5hdHRyKCJkIixSKSx0Lm5vZGUoKS5hcHBlbmRDaGlsZChULm5vZGUoKSl9ZWxzZXtsZXQgRD1wLmpvaW4oIjsiKSxPPXc/dy5yZWR1Y2UoKEwsQSk9PkwrQSsiOyIsIiIpOiIiLFI9IiI7ZS5hbmltYXRlJiYoUj0iIGVkZ2UtYW5pbWF0aW9uLWZhc3QiKSxlLmFuaW1hdGlvbiYmKFI9IiBlZGdlLWFuaW1hdGlvbi0iK2UuYW5pbWF0aW9uKTtsZXQgaz1EP0QrIjsiK08rIjsiOk87VD10LmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLFMpLmF0dHIoImlkIixlLmlkKS5hdHRyKCJjbGFzcyIsIiAiK2IrKGUuY2xhc3Nlcz8iICIrZS5jbGFzc2VzOiIiKSsoUj8/IiIpKS5hdHRyKCJzdHlsZSIsayksRT1rLm1hdGNoKC9zdHJva2U6KFteO10rKS8pPy5bMV19bGV0IF89IiI7KG1lKCkuZmxvd2NoYXJ0LmFycm93TWFya2VyQWJzb2x1dGV8fG1lKCkuc3RhdGUuYXJyb3dNYXJrZXJBYnNvbHV0ZSkmJihfPW11KCEwKSksWC5pbmZvKCJhcnJvd1R5cGVTdGFydCIsZS5hcnJvd1R5cGVTdGFydCksWC5pbmZvKCJhcnJvd1R5cGVFbmQiLGUuYXJyb3dUeXBlRW5kKSxkZWUoVCxlLF8scyxuLEUpO2xldCBDPXt9O3JldHVybiBoJiYoQy51cGRhdGVkUGF0aD11KSxDLm9yaWdpbmFsUGF0aD1lLnBvaW50cyxDfSwiaW5zZXJ0RWRnZSIpfSk7dmFyIGg5ZSxmOWUsZDllLHA5ZSxtOWUsZzllLHk5ZSx2OWUseDllLGI5ZSxUOWUsdzllLGs5ZSxFOWUsUzllLEM5ZSxBOWUsZHcsRkw9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt5dCgpO2g5ZT1vKCh0LGUscixuKT0+e2UuZm9yRWFjaChpPT57QTllW2ldKHQscixuKX0pfSwiaW5zZXJ0TWFya2VycyIpLGY5ZT1vKCh0LGUscik9PntYLnRyYWNlKCJNYWtpbmcgbWFya2VycyBmb3IgIixyKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1leHRlbnNpb25TdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGV4dGVuc2lvbiAiK2UpLmF0dHIoInJlZlgiLDE4KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDEsNyBMMTgsMTMgViAxIFoiKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1leHRlbnNpb25FbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBleHRlbnNpb24gIitlKS5hdHRyKCJyZWZYIiwxKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDEgViAxMyBMMTgsNyBaIil9LCJleHRlbnNpb24iKSxkOWU9bygodCxlLHIpPT57dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItY29tcG9zaXRpb25TdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGNvbXBvc2l0aW9uICIrZSkuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWNvbXBvc2l0aW9uRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgY29tcG9zaXRpb24gIitlKS5hdHRyKCJyZWZYIiwxKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIil9LCJjb21wb3NpdGlvbiIpLHA5ZT1vKCh0LGUscik9Pnt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1hZ2dyZWdhdGlvblN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgYWdncmVnYXRpb24gIitlKS5hdHRyKCJyZWZYIiwxOCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIiksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItYWdncmVnYXRpb25FbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBhZ2dyZWdhdGlvbiAiK2UpLmF0dHIoInJlZlgiLDEpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKX0sImFnZ3JlZ2F0aW9uIiksbTllPW8oKHQsZSxyKT0+e3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWRlcGVuZGVuY3lTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGRlcGVuZGVuY3kgIitlKS5hdHRyKCJyZWZYIiw2KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDUsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWRlcGVuZGVuY3lFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBkZXBlbmRlbmN5ICIrZSkuYXR0cigicmVmWCIsMTMpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDE0LDcgTDksMSBaIil9LCJkZXBlbmRlbmN5IiksZzllPW8oKHQsZSxyKT0+e3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWxvbGxpcG9wU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBsb2xsaXBvcCAiK2UpLmF0dHIoInJlZlgiLDEzKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJmaWxsIiwidHJhbnNwYXJlbnQiKS5hdHRyKCJjeCIsNykuYXR0cigiY3kiLDcpLmF0dHIoInIiLDYpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWxvbGxpcG9wRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgbG9sbGlwb3AgIitlKS5hdHRyKCJyZWZYIiwxKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJmaWxsIiwidHJhbnNwYXJlbnQiKS5hdHRyKCJjeCIsNykuYXR0cigiY3kiLDcpLmF0dHIoInIiLDYpfSwibG9sbGlwb3AiKSx5OWU9bygodCxlLHIpPT57dC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItcG9pbnRFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciAiK2UpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiw1KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDgpLmF0dHIoIm1hcmtlckhlaWdodCIsOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgMCBMIDEwIDUgTCAwIDEwIHoiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIiksdC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItcG9pbnRTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyICIrZSkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDQuNSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiw4KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDUgTCAxMCAxMCBMIDEwIDAgeiIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKX0sInBvaW50IiksdjllPW8oKHQsZSxyKT0+e3QuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWNpcmNsZUVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyICIrZSkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDExKS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDExKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDExKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsIjUiKS5hdHRyKCJjeSIsIjUiKS5hdHRyKCJyIiwiNSIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKSx0LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1jaXJjbGVTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyICIrZSkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLC0xKS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDExKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDExKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsIjUiKS5hdHRyKCJjeSIsIjUiKS5hdHRyKCJyIiwiNSIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKX0sImNpcmNsZSIpLHg5ZT1vKCh0LGUscik9Pnt0LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1jcm9zc0VuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGNyb3NzICIrZSkuYXR0cigidmlld0JveCIsIjAgMCAxMSAxMSIpLmF0dHIoInJlZlgiLDEyKS5hdHRyKCJyZWZZIiw1LjIpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTEpLmF0dHIoIm1hcmtlckhlaWdodCIsMTEpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDEgbCA5LDkgTSAxMCwxIGwgLTksOSIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKSx0LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1jcm9zc1N0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgY3Jvc3MgIitlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDExIDExIikuYXR0cigicmVmWCIsLTEpLmF0dHIoInJlZlkiLDUuMikuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMSkuYXR0cigibWFya2VySGVpZ2h0IiwxMSkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDEsMSBsIDksOSBNIDEwLDEgbCAtOSw5IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwyKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpfSwiY3Jvc3MiKSxiOWU9bygodCxlLHIpPT57dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItYmFyYkVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMTQpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTksNyBMOSwxMyBMMTQsNyBMOSwxIFoiKX0sImJhcmIiKSxUOWU9bygodCxlLHIpPT57dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItb25seU9uZVN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgb25seU9uZSAiK2UpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDkpLmF0dHIoIm1hcmtlcldpZHRoIiwxOCkuYXR0cigibWFya2VySGVpZ2h0IiwxOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNOSwwIEw5LDE4IE0xNSwwIEwxNSwxOCIpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLW9ubHlPbmVFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBvbmx5T25lICIrZSkuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDkpLmF0dHIoIm1hcmtlcldpZHRoIiwxOCkuYXR0cigibWFya2VySGVpZ2h0IiwxOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNMywwIEwzLDE4IE05LDAgTDksMTgiKX0sIm9ubHlfb25lIiksdzllPW8oKHQsZSxyKT0+e2xldCBuPXQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLXplcm9Pck9uZVN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgemVyb09yT25lICIrZSkuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsOSkuYXR0cigibWFya2VyV2lkdGgiLDMwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDE4KS5hdHRyKCJvcmllbnQiLCJhdXRvIik7bi5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImN4IiwyMSkuYXR0cigiY3kiLDkpLmF0dHIoInIiLDYpLG4uYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk05LDAgTDksMTgiKTtsZXQgaT10LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi16ZXJvT3JPbmVFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciB6ZXJvT3JPbmUgIitlKS5hdHRyKCJyZWZYIiwzMCkuYXR0cigicmVmWSIsOSkuYXR0cigibWFya2VyV2lkdGgiLDMwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDE4KS5hdHRyKCJvcmllbnQiLCJhdXRvIik7aS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImN4Iiw5KS5hdHRyKCJjeSIsOSkuYXR0cigiciIsNiksaS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTTIxLDAgTDIxLDE4Iil9LCJ6ZXJvX29yX29uZSIpLGs5ZT1vKCh0LGUscik9Pnt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1vbmVPck1vcmVTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIG9uZU9yTW9yZSAiK2UpLmF0dHIoInJlZlgiLDE4KS5hdHRyKCJyZWZZIiwxOCkuYXR0cigibWFya2VyV2lkdGgiLDQ1KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDM2KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0wLDE4IFEgMTgsMCAzNiwxOCBRIDE4LDM2IDAsMTggTTQyLDkgTDQyLDI3IiksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItb25lT3JNb3JlRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgb25lT3JNb3JlICIrZSkuYXR0cigicmVmWCIsMjcpLmF0dHIoInJlZlkiLDE4KS5hdHRyKCJtYXJrZXJXaWR0aCIsNDUpLmF0dHIoIm1hcmtlckhlaWdodCIsMzYpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTTMsOSBMMywyNyBNOSwxOCBRMjcsMCA0NSwxOCBRMjcsMzYgOSwxOCIpfSwib25lX29yX21vcmUiKSxFOWU9bygodCxlLHIpPT57bGV0IG49dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItemVyb09yTW9yZVN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgemVyb09yTW9yZSAiK2UpLmF0dHIoInJlZlgiLDE4KS5hdHRyKCJyZWZZIiwxOCkuYXR0cigibWFya2VyV2lkdGgiLDU3KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDM2KS5hdHRyKCJvcmllbnQiLCJhdXRvIik7bi5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImN4Iiw0OCkuYXR0cigiY3kiLDE4KS5hdHRyKCJyIiw2KSxuLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNMCwxOCBRMTgsMCAzNiwxOCBRMTgsMzYgMCwxOCIpO2xldCBpPXQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLXplcm9Pck1vcmVFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciB6ZXJvT3JNb3JlICIrZSkuYXR0cigicmVmWCIsMzkpLmF0dHIoInJlZlkiLDE4KS5hdHRyKCJtYXJrZXJXaWR0aCIsNTcpLmF0dHIoIm1hcmtlckhlaWdodCIsMzYpLmF0dHIoIm9yaWVudCIsImF1dG8iKTtpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiY3giLDkpLmF0dHIoImN5IiwxOCkuYXR0cigiciIsNiksaS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTTIxLDE4IFEzOSwwIDU3LDE4IFEzOSwzNiAyMSwxOCIpfSwiemVyb19vcl9tb3JlIiksUzllPW8oKHQsZSxyKT0+e3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLXJlcXVpcmVtZW50X2Fycm93RW5kIikuYXR0cigicmVmWCIsMjApLmF0dHIoInJlZlkiLDEwKS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixgTTAsMAogICAgICBMMjAsMTAKICAgICAgTTIwLDEwCiAgICAgIEwwLDIwYCl9LCJyZXF1aXJlbWVudF9hcnJvdyIpLEM5ZT1vKCh0LGUscik9PntsZXQgbj10LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1yZXF1aXJlbWVudF9jb250YWluc1N0YXJ0IikuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsMTApLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyMCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiZyIpO24uYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsMTApLmF0dHIoImN5IiwxMCkuYXR0cigiciIsOSkuYXR0cigiZmlsbCIsIm5vbmUiKSxuLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIiwxKS5hdHRyKCJ4MiIsMTkpLmF0dHIoInkxIiwxMCkuYXR0cigieTIiLDEwKSxuLmFwcGVuZCgibGluZSIpLmF0dHIoInkxIiwxKS5hdHRyKCJ5MiIsMTkpLmF0dHIoIngxIiwxMCkuYXR0cigieDIiLDEwKX0sInJlcXVpcmVtZW50X2NvbnRhaW5zIiksQTllPXtleHRlbnNpb246ZjllLGNvbXBvc2l0aW9uOmQ5ZSxhZ2dyZWdhdGlvbjpwOWUsZGVwZW5kZW5jeTptOWUsbG9sbGlwb3A6ZzllLHBvaW50Onk5ZSxjaXJjbGU6djllLGNyb3NzOng5ZSxiYXJiOmI5ZSxvbmx5X29uZTpUOWUsemVyb19vcl9vbmU6dzllLG9uZV9vcl9tb3JlOms5ZSx6ZXJvX29yX21vcmU6RTllLHJlcXVpcmVtZW50X2Fycm93OlM5ZSxyZXF1aXJlbWVudF9jb250YWluczpDOWV9LGR3PWg5ZX0pO2FzeW5jIGZ1bmN0aW9uIEFtKHQsZSxyKXtsZXQgbixpO2Uuc2hhcGU9PT0icmVjdCImJihlLnJ4JiZlLnJ5P2Uuc2hhcGU9InJvdW5kZWRSZWN0IjplLnNoYXBlPSJzcXVhcmVSZWN0Iik7bGV0IGE9ZS5zaGFwZT9JTFtlLnNoYXBlXTp2b2lkIDA7aWYoIWEpdGhyb3cgbmV3IEVycm9yKGBObyBzdWNoIHNoYXBlOiAke2Uuc2hhcGV9LiBQbGVhc2UgY2hlY2sgeW91ciBzeW50YXguYCk7aWYoZS5saW5rKXtsZXQgcztyLmNvbmZpZy5zZWN1cml0eUxldmVsPT09InNhbmRib3giP3M9Il90b3AiOmUubGlua1RhcmdldCYmKHM9ZS5saW5rVGFyZ2V0fHwiX2JsYW5rIiksbj10Lmluc2VydCgic3ZnOmEiKS5hdHRyKCJ4bGluazpocmVmIixlLmxpbmspLmF0dHIoInRhcmdldCIscz8/bnVsbCksaT1hd2FpdCBhKG4sZSxyKX1lbHNlIGk9YXdhaXQgYSh0LGUsciksbj1pO3JldHVybiBlLnRvb2x0aXAmJmkuYXR0cigidGl0bGUiLGUudG9vbHRpcCkscHcuc2V0KGUuaWQsbiksZS5oYXZlQ2FsbGJhY2smJm4uYXR0cigiY2xhc3MiLG4uYXR0cigiY2xhc3MiKSsiIGNsaWNrYWJsZSIpLG59dmFyIHB3LHZlZSx4ZWUsTTIsbXc9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt5dCgpO09MKCk7cHc9bmV3IE1hcDtvKEFtLCJpbnNlcnROb2RlIik7dmVlPW8oKHQsZSk9Pntwdy5zZXQoZS5pZCx0KX0sInNldE5vZGVFbGVtIikseGVlPW8oKCk9Pntwdy5jbGVhcigpfSwiY2xlYXIiKSxNMj1vKHQ9PntsZXQgZT1wdy5nZXQodC5pZCk7WC50cmFjZSgiVHJhbnNmb3JtaW5nIG5vZGUiLHQuZGlmZix0LCJ0cmFuc2xhdGUoIisodC54LXQud2lkdGgvMi01KSsiLCAiK3Qud2lkdGgvMisiKSIpO2xldCByPTgsbj10LmRpZmZ8fDA7cmV0dXJuIHQuY2x1c3Rlck5vZGU/ZS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisodC54K24tdC53aWR0aC8yKSsiLCAiKyh0LnktdC5oZWlnaHQvMi1yKSsiKSIpOmUuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdC54KyIsICIrdC55KyIpIiksbn0sInBvc2l0aW9uTm9kZSIpfSk7dmFyIGJlZSxUZWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjttaSgpO3ByKCk7eXQoKTthdygpO0JMKCk7RkwoKTttdygpO0Z0KCk7ZXIoKTtiZWU9e2NvbW1vbjpaZSxnZXRDb25maWc6dHIsaW5zZXJ0Q2x1c3RlcjpDbSxpbnNlcnRFZGdlOmZ3LGluc2VydEVkZ2VMYWJlbDp1dyxpbnNlcnRNYXJrZXJzOmR3LGluc2VydE5vZGU6QW0saW50ZXJwb2xhdGVUb0N1cnZlOkE5LGxhYmVsSGVscGVyOm10LGxvZzpYLHBvc2l0aW9uRWRnZUxhYmVsOmh3fX0pO2Z1bmN0aW9uIEQ5ZSh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJzeW1ib2wifHxpaSh0KSYmZmEodCk9PV85ZX12YXIgXzllLG9vLFdkPU4oKCk9PnsidXNlIHN0cmljdCI7QXUoKTtPbygpO185ZT0iW29iamVjdCBTeW1ib2xdIjtvKEQ5ZSwiaXNTeW1ib2wiKTtvbz1EOWV9KTtmdW5jdGlvbiBMOWUodCxlKXtmb3IodmFyIHI9LTEsbj10PT1udWxsPzA6dC5sZW5ndGgsaT1BcnJheShuKTsrK3I8bjspaVtyXT1lKHRbcl0scix0KTtyZXR1cm4gaX12YXIgQnMscWQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKEw5ZSwiYXJyYXlNYXAiKTtCcz1MOWV9KTtmdW5jdGlvbiBFZWUodCl7aWYodHlwZW9mIHQ9PSJzdHJpbmciKXJldHVybiB0O2lmKFB0KHQpKXJldHVybiBCcyh0LEVlZSkrIiI7aWYob28odCkpcmV0dXJuIGtlZT9rZWUuY2FsbCh0KToiIjt2YXIgZT10KyIiO3JldHVybiBlPT0iMCImJjEvdD09LVI5ZT8iLTAiOmV9dmFyIFI5ZSx3ZWUsa2VlLFNlZSxDZWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtNZCgpO3FkKCk7V24oKTtXZCgpO1I5ZT0xLzAsd2VlPWVhP2VhLnByb3RvdHlwZTp2b2lkIDAsa2VlPXdlZT93ZWUudG9TdHJpbmc6dm9pZCAwO28oRWVlLCJiYXNlVG9TdHJpbmciKTtTZWU9RWVlfSk7ZnVuY3Rpb24gTTllKHQpe2Zvcih2YXIgZT10Lmxlbmd0aDtlLS0mJk45ZS50ZXN0KHQuY2hhckF0KGUpKTspO3JldHVybiBlfXZhciBOOWUsQWVlLF9lZT1OKCgpPT57InVzZSBzdHJpY3QiO045ZT0vXHMvO28oTTllLCJ0cmltbWVkRW5kSW5kZXgiKTtBZWU9TTllfSk7ZnVuY3Rpb24gTzllKHQpe3JldHVybiB0JiZ0LnNsaWNlKDAsQWVlKHQpKzEpLnJlcGxhY2UoSTllLCIiKX12YXIgSTllLERlZSxMZWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtfZWUoKTtJOWU9L15ccysvO28oTzllLCJiYXNlVHJpbSIpO0RlZT1POWV9KTtmdW5jdGlvbiB6OWUodCl7aWYodHlwZW9mIHQ9PSJudW1iZXIiKXJldHVybiB0O2lmKG9vKHQpKXJldHVybiBSZWU7aWYoYm4odCkpe3ZhciBlPXR5cGVvZiB0LnZhbHVlT2Y9PSJmdW5jdGlvbiI/dC52YWx1ZU9mKCk6dDt0PWJuKGUpP2UrIiI6ZX1pZih0eXBlb2YgdCE9InN0cmluZyIpcmV0dXJuIHQ9PT0wP3Q6K3Q7dD1EZWUodCk7dmFyIHI9QjllLnRlc3QodCk7cmV0dXJuIHJ8fEY5ZS50ZXN0KHQpPyQ5ZSh0LnNsaWNlKDIpLHI/Mjo4KTpQOWUudGVzdCh0KT9SZWU6K3R9dmFyIFJlZSxQOWUsQjllLEY5ZSwkOWUsTmVlLE1lZT1OKCgpPT57InVzZSBzdHJpY3QiO0xlZSgpO25vKCk7V2QoKTtSZWU9TmFOLFA5ZT0vXlstK10weFswLTlhLWZdKyQvaSxCOWU9L14wYlswMV0rJC9pLEY5ZT0vXjBvWzAtN10rJC9pLCQ5ZT1wYXJzZUludDtvKHo5ZSwidG9OdW1iZXIiKTtOZWU9ejllfSk7ZnVuY3Rpb24gVjllKHQpe2lmKCF0KXJldHVybiB0PT09MD90OjA7aWYodD1OZWUodCksdD09PUllZXx8dD09PS1JZWUpe3ZhciBlPXQ8MD8tMToxO3JldHVybiBlKkc5ZX1yZXR1cm4gdD09PXQ/dDowfXZhciBJZWUsRzllLF9tLCRMPU4oKCk9PnsidXNlIHN0cmljdCI7TWVlKCk7SWVlPTEvMCxHOWU9MTc5NzY5MzEzNDg2MjMxNTdlMjkyO28oVjllLCJ0b0Zpbml0ZSIpO19tPVY5ZX0pO2Z1bmN0aW9uIFU5ZSh0KXt2YXIgZT1fbSh0KSxyPWUlMTtyZXR1cm4gZT09PWU/cj9lLXI6ZTowfXZhciBrYyxEbT1OKCgpPT57InVzZSBzdHJpY3QiOyRMKCk7byhVOWUsInRvSW50ZWdlciIpO2tjPVU5ZX0pO3ZhciBIOWUsZ3csT2VlPU4oKCk9PnsidXNlIHN0cmljdCI7UGgoKTtNbygpO0g5ZT1McyhoaSwiV2Vha01hcCIpLGd3PUg5ZX0pO2Z1bmN0aW9uIFc5ZSgpe312YXIgYWksekw9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKFc5ZSwibm9vcCIpO2FpPVc5ZX0pO2Z1bmN0aW9uIHE5ZSh0LGUpe2Zvcih2YXIgcj0tMSxuPXQ9PW51bGw/MDp0Lmxlbmd0aDsrK3I8biYmZSh0W3JdLHIsdCkhPT0hMTspO3JldHVybiB0fXZhciB5dyxHTD1OKCgpPT57InVzZSBzdHJpY3QiO28ocTllLCJhcnJheUVhY2giKTt5dz1xOWV9KTtmdW5jdGlvbiBZOWUodCxlLHIsbil7Zm9yKHZhciBpPXQubGVuZ3RoLGE9cisobj8xOi0xKTtuP2EtLTorK2E8aTspaWYoZSh0W2FdLGEsdCkpcmV0dXJuIGE7cmV0dXJuLTF9dmFyIHZ3LFZMPU4oKCk9PnsidXNlIHN0cmljdCI7byhZOWUsImJhc2VGaW5kSW5kZXgiKTt2dz1ZOWV9KTtmdW5jdGlvbiBYOWUodCl7cmV0dXJuIHQhPT10fXZhciBQZWUsQmVlPU4oKCk9PnsidXNlIHN0cmljdCI7byhYOWUsImJhc2VJc05hTiIpO1BlZT1YOWV9KTtmdW5jdGlvbiBqOWUodCxlLHIpe2Zvcih2YXIgbj1yLTEsaT10Lmxlbmd0aDsrK248aTspaWYodFtuXT09PWUpcmV0dXJuIG47cmV0dXJuLTF9dmFyIEZlZSwkZWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKGo5ZSwic3RyaWN0SW5kZXhPZiIpO0ZlZT1qOWV9KTtmdW5jdGlvbiBLOWUodCxlLHIpe3JldHVybiBlPT09ZT9GZWUodCxlLHIpOnZ3KHQsUGVlLHIpfXZhciBMbSx4dz1OKCgpPT57InVzZSBzdHJpY3QiO1ZMKCk7QmVlKCk7JGVlKCk7byhLOWUsImJhc2VJbmRleE9mIik7TG09SzllfSk7ZnVuY3Rpb24gUTllKHQsZSl7dmFyIHI9dD09bnVsbD8wOnQubGVuZ3RoO3JldHVybiEhciYmTG0odCxlLDApPi0xfXZhciBidyxVTD1OKCgpPT57InVzZSBzdHJpY3QiO3h3KCk7byhROWUsImFycmF5SW5jbHVkZXMiKTtidz1ROWV9KTt2YXIgWjllLHplZSxHZWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtwOSgpO1o5ZT1tVChPYmplY3Qua2V5cyxPYmplY3QpLHplZT1aOWV9KTtmdW5jdGlvbiB0TGUodCl7aWYoIW1jKHQpKXJldHVybiB6ZWUodCk7dmFyIGU9W107Zm9yKHZhciByIGluIE9iamVjdCh0KSllTGUuY2FsbCh0LHIpJiZyIT0iY29uc3RydWN0b3IiJiZlLnB1c2gocik7cmV0dXJuIGV9dmFyIEo5ZSxlTGUsUm0sVHc9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt1bSgpO0dlZSgpO0o5ZT1PYmplY3QucHJvdG90eXBlLGVMZT1KOWUuaGFzT3duUHJvcGVydHk7byh0TGUsImJhc2VLZXlzIik7Um09dExlfSk7ZnVuY3Rpb24gckxlKHQpe3JldHVybiBmaSh0KT9iVCh0KTpSbSh0KX12YXIgenIsRWM9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt4OSgpO1R3KCk7UG8oKTtvKHJMZSwia2V5cyIpO3pyPXJMZX0pO3ZhciBuTGUsaUxlLGFMZSxwYSxWZWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtwbSgpO0ZkKCk7azkoKTtQbygpO3VtKCk7RWMoKTtuTGU9T2JqZWN0LnByb3RvdHlwZSxpTGU9bkxlLmhhc093blByb3BlcnR5LGFMZT1rVChmdW5jdGlvbih0LGUpe2lmKG1jKGUpfHxmaShlKSl7JG8oZSx6cihlKSx0KTtyZXR1cm59Zm9yKHZhciByIGluIGUpaUxlLmNhbGwoZSxyKSYmZ2ModCxyLGVbcl0pfSkscGE9YUxlfSk7ZnVuY3Rpb24gbExlKHQsZSl7aWYoUHQodCkpcmV0dXJuITE7dmFyIHI9dHlwZW9mIHQ7cmV0dXJuIHI9PSJudW1iZXIifHxyPT0ic3ltYm9sInx8cj09ImJvb2xlYW4ifHx0PT1udWxsfHxvbyh0KT8hMDpvTGUudGVzdCh0KXx8IXNMZS50ZXN0KHQpfHxlIT1udWxsJiZ0IGluIE9iamVjdChlKX12YXIgc0xlLG9MZSxObSx3dz1OKCgpPT57InVzZSBzdHJpY3QiO1duKCk7V2QoKTtzTGU9L1wufFxbKD86W15bXF1dKnwoWyInXSkoPzooPyFcMSlbXlxcXXxcXC4pKj9cMSlcXS8sb0xlPS9eXHcqJC87byhsTGUsImlzS2V5Iik7Tm09bExlfSk7ZnVuY3Rpb24gdUxlKHQpe3ZhciBlPXJtKHQsZnVuY3Rpb24obil7cmV0dXJuIHIuc2l6ZT09PWNMZSYmci5jbGVhcigpLG59KSxyPWUuY2FjaGU7cmV0dXJuIGV9dmFyIGNMZSxVZWUsSGVlPU4oKCk9PnsidXNlIHN0cmljdCI7bzkoKTtjTGU9NTAwO28odUxlLCJtZW1vaXplQ2FwcGVkIik7VWVlPXVMZX0pO3ZhciBoTGUsZkxlLGRMZSxXZWUscWVlPU4oKCk9PnsidXNlIHN0cmljdCI7SGVlKCk7aExlPS9bXi5bXF1dK3xcWyg/OigtP1xkKyg/OlwuXGQrKT8pfChbIiddKSgoPzooPyFcMilbXlxcXXxcXC4pKj8pXDIpXF18KD89KD86XC58XFtcXSkoPzpcLnxcW1xdfCQpKS9nLGZMZT0vXFwoXFwpPy9nLGRMZT1VZWUoZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIHQuY2hhckNvZGVBdCgwKT09PTQ2JiZlLnB1c2goIiIpLHQucmVwbGFjZShoTGUsZnVuY3Rpb24ocixuLGksYSl7ZS5wdXNoKGk/YS5yZXBsYWNlKGZMZSwiJDEiKTpufHxyKX0pLGV9KSxXZWU9ZExlfSk7ZnVuY3Rpb24gcExlKHQpe3JldHVybiB0PT1udWxsPyIiOlNlZSh0KX12YXIga3csSEw9TigoKT0+eyJ1c2Ugc3RyaWN0IjtDZWUoKTtvKHBMZSwidG9TdHJpbmciKTtrdz1wTGV9KTtmdW5jdGlvbiBtTGUodCxlKXtyZXR1cm4gUHQodCk/dDpObSh0LGUpP1t0XTpXZWUoa3codCkpfXZhciBKaCxJMj1OKCgpPT57InVzZSBzdHJpY3QiO1duKCk7d3coKTtxZWUoKTtITCgpO28obUxlLCJjYXN0UGF0aCIpO0poPW1MZX0pO2Z1bmN0aW9uIHlMZSh0KXtpZih0eXBlb2YgdD09InN0cmluZyJ8fG9vKHQpKXJldHVybiB0O3ZhciBlPXQrIiI7cmV0dXJuIGU9PSIwIiYmMS90PT0tZ0xlPyItMCI6ZX12YXIgZ0xlLFNjLE1tPU4oKCk9PnsidXNlIHN0cmljdCI7V2QoKTtnTGU9MS8wO28oeUxlLCJ0b0tleSIpO1NjPXlMZX0pO2Z1bmN0aW9uIHZMZSh0LGUpe2U9SmgoZSx0KTtmb3IodmFyIHI9MCxuPWUubGVuZ3RoO3QhPW51bGwmJnI8bjspdD10W1NjKGVbcisrXSldO3JldHVybiByJiZyPT1uP3Q6dm9pZCAwfXZhciBlZixPMj1OKCgpPT57InVzZSBzdHJpY3QiO0kyKCk7TW0oKTtvKHZMZSwiYmFzZUdldCIpO2VmPXZMZX0pO2Z1bmN0aW9uIHhMZSh0LGUscil7dmFyIG49dD09bnVsbD92b2lkIDA6ZWYodCxlKTtyZXR1cm4gbj09PXZvaWQgMD9yOm59dmFyIFllZSxYZWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtPMigpO28oeExlLCJnZXQiKTtZZWU9eExlfSk7ZnVuY3Rpb24gYkxlKHQsZSl7Zm9yKHZhciByPS0xLG49ZS5sZW5ndGgsaT10Lmxlbmd0aDsrK3I8bjspdFtpK3JdPWVbcl07cmV0dXJuIHR9dmFyIEltLEV3PU4oKCk9PnsidXNlIHN0cmljdCI7byhiTGUsImFycmF5UHVzaCIpO0ltPWJMZX0pO2Z1bmN0aW9uIFRMZSh0KXtyZXR1cm4gUHQodCl8fERsKHQpfHwhIShqZWUmJnQmJnRbamVlXSl9dmFyIGplZSxLZWUsUWVlPU4oKCk9PnsidXNlIHN0cmljdCI7TWQoKTtobSgpO1duKCk7amVlPWVhP2VhLmlzQ29uY2F0U3ByZWFkYWJsZTp2b2lkIDA7byhUTGUsImlzRmxhdHRlbmFibGUiKTtLZWU9VExlfSk7ZnVuY3Rpb24gWmVlKHQsZSxyLG4saSl7dmFyIGE9LTEscz10Lmxlbmd0aDtmb3Iocnx8KHI9S2VlKSxpfHwoaT1bXSk7KythPHM7KXt2YXIgbD10W2FdO2U+MCYmcihsKT9lPjE/WmVlKGwsZS0xLHIsbixpKTpJbShpLGwpOm58fChpW2kubGVuZ3RoXT1sKX1yZXR1cm4gaX12YXIgQ2MsT209TigoKT0+eyJ1c2Ugc3RyaWN0IjtFdygpO1FlZSgpO28oWmVlLCJiYXNlRmxhdHRlbiIpO0NjPVplZX0pO2Z1bmN0aW9uIHdMZSh0KXt2YXIgZT10PT1udWxsPzA6dC5sZW5ndGg7cmV0dXJuIGU/Q2ModCwxKTpbXX12YXIgcXIsU3c9TigoKT0+eyJ1c2Ugc3RyaWN0IjtPbSgpO28od0xlLCJmbGF0dGVuIik7cXI9d0xlfSk7ZnVuY3Rpb24ga0xlKHQpe3JldHVybiB3VChUVCh0LHZvaWQgMCxxciksdCsiIil9dmFyIEplZSxldGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtTdygpO2I5KCk7dzkoKTtvKGtMZSwiZmxhdFJlc3QiKTtKZWU9a0xlfSk7ZnVuY3Rpb24gRUxlKHQsZSxyKXt2YXIgbj0tMSxpPXQubGVuZ3RoO2U8MCYmKGU9LWU+aT8wOmkrZSkscj1yPmk/aTpyLHI8MCYmKHIrPWkpLGk9ZT5yPzA6ci1lPj4+MCxlPj4+PTA7Zm9yKHZhciBhPUFycmF5KGkpOysrbjxpOylhW25dPXRbbitlXTtyZXR1cm4gYX12YXIgQ3csV0w9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKEVMZSwiYmFzZVNsaWNlIik7Q3c9RUxlfSk7ZnVuY3Rpb24gTUxlKHQpe3JldHVybiBOTGUudGVzdCh0KX12YXIgU0xlLENMZSxBTGUsX0xlLERMZSxMTGUsUkxlLE5MZSx0dGUscnRlPU4oKCk9PnsidXNlIHN0cmljdCI7U0xlPSJcXHVkODAwLVxcdWRmZmYiLENMZT0iXFx1MDMwMC1cXHUwMzZmIixBTGU9IlxcdWZlMjAtXFx1ZmUyZiIsX0xlPSJcXHUyMGQwLVxcdTIwZmYiLERMZT1DTGUrQUxlK19MZSxMTGU9IlxcdWZlMGVcXHVmZTBmIixSTGU9IlxcdTIwMGQiLE5MZT1SZWdFeHAoIlsiK1JMZStTTGUrRExlK0xMZSsiXSIpO28oTUxlLCJoYXNVbmljb2RlIik7dHRlPU1MZX0pO2Z1bmN0aW9uIElMZSh0LGUscixuKXt2YXIgaT0tMSxhPXQ9PW51bGw/MDp0Lmxlbmd0aDtmb3IobiYmYSYmKHI9dFsrK2ldKTsrK2k8YTspcj1lKHIsdFtpXSxpLHQpO3JldHVybiByfXZhciBudGUsaXRlPU4oKCk9PnsidXNlIHN0cmljdCI7byhJTGUsImFycmF5UmVkdWNlIik7bnRlPUlMZX0pO2Z1bmN0aW9uIE9MZSh0LGUpe3JldHVybiB0JiYkbyhlLHpyKGUpLHQpfXZhciBhdGUsc3RlPU4oKCk9PnsidXNlIHN0cmljdCI7RmQoKTtFYygpO28oT0xlLCJiYXNlQXNzaWduIik7YXRlPU9MZX0pO2Z1bmN0aW9uIFBMZSh0LGUpe3JldHVybiB0JiYkbyhlLFJzKGUpLHQpfXZhciBvdGUsbHRlPU4oKCk9PnsidXNlIHN0cmljdCI7RmQoKTtVaCgpO28oUExlLCJiYXNlQXNzaWduSW4iKTtvdGU9UExlfSk7ZnVuY3Rpb24gQkxlKHQsZSl7Zm9yKHZhciByPS0xLG49dD09bnVsbD8wOnQubGVuZ3RoLGk9MCxhPVtdOysrcjxuOyl7dmFyIHM9dFtyXTtlKHMscix0KSYmKGFbaSsrXT1zKX1yZXR1cm4gYX12YXIgUG0sQXc9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKEJMZSwiYXJyYXlGaWx0ZXIiKTtQbT1CTGV9KTtmdW5jdGlvbiBGTGUoKXtyZXR1cm5bXX12YXIgX3cscUw9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKEZMZSwic3R1YkFycmF5Iik7X3c9RkxlfSk7dmFyICRMZSx6TGUsY3RlLEdMZSxCbSxEdz1OKCgpPT57InVzZSBzdHJpY3QiO0F3KCk7cUwoKTskTGU9T2JqZWN0LnByb3RvdHlwZSx6TGU9JExlLnByb3BlcnR5SXNFbnVtZXJhYmxlLGN0ZT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLEdMZT1jdGU/ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/W106KHQ9T2JqZWN0KHQpLFBtKGN0ZSh0KSxmdW5jdGlvbihlKXtyZXR1cm4gekxlLmNhbGwodCxlKX0pKX06X3csQm09R0xlfSk7ZnVuY3Rpb24gVkxlKHQsZSl7cmV0dXJuICRvKHQsQm0odCksZSl9dmFyIHV0ZSxodGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGZCgpO0R3KCk7byhWTGUsImNvcHlTeW1ib2xzIik7dXRlPVZMZX0pO3ZhciBVTGUsSExlLEx3LFlMPU4oKCk9PnsidXNlIHN0cmljdCI7RXcoKTtnVCgpO0R3KCk7cUwoKTtVTGU9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxITGU9VUxlP2Z1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXTt0OylJbShlLEJtKHQpKSx0PWNtKHQpO3JldHVybiBlfTpfdyxMdz1ITGV9KTtmdW5jdGlvbiBXTGUodCxlKXtyZXR1cm4gJG8odCxMdyh0KSxlKX12YXIgZnRlLGR0ZT1OKCgpPT57InVzZSBzdHJpY3QiO0ZkKCk7WUwoKTtvKFdMZSwiY29weVN5bWJvbHNJbiIpO2Z0ZT1XTGV9KTtmdW5jdGlvbiBxTGUodCxlLHIpe3ZhciBuPWUodCk7cmV0dXJuIFB0KHQpP246SW0obixyKHQpKX12YXIgUncsWEw9TigoKT0+eyJ1c2Ugc3RyaWN0IjtFdygpO1duKCk7byhxTGUsImJhc2VHZXRBbGxLZXlzIik7Unc9cUxlfSk7ZnVuY3Rpb24gWUxlKHQpe3JldHVybiBSdyh0LHpyLEJtKX12YXIgUDIsakw9TigoKT0+eyJ1c2Ugc3RyaWN0IjtYTCgpO0R3KCk7RWMoKTtvKFlMZSwiZ2V0QWxsS2V5cyIpO1AyPVlMZX0pO2Z1bmN0aW9uIFhMZSh0KXtyZXR1cm4gUncodCxScyxMdyl9dmFyIE53LEtMPU4oKCk9PnsidXNlIHN0cmljdCI7WEwoKTtZTCgpO1VoKCk7byhYTGUsImdldEFsbEtleXNJbiIpO053PVhMZX0pO3ZhciBqTGUsTXcscHRlPU4oKCk9PnsidXNlIHN0cmljdCI7UGgoKTtNbygpO2pMZT1McyhoaSwiRGF0YVZpZXciKSxNdz1qTGV9KTt2YXIgS0xlLEl3LG10ZT1OKCgpPT57InVzZSBzdHJpY3QiO1BoKCk7TW8oKTtLTGU9THMoaGksIlByb21pc2UiKSxJdz1LTGV9KTt2YXIgUUxlLHRmLFFMPU4oKCk9PnsidXNlIHN0cmljdCI7UGgoKTtNbygpO1FMZT1McyhoaSwiU2V0IiksdGY9UUxlfSk7dmFyIGd0ZSxaTGUseXRlLHZ0ZSx4dGUsYnRlLEpMZSxlUmUsdFJlLHJSZSxuUmUsWWQsbG8sWGQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtwdGUoKTtsVCgpO210ZSgpO1FMKCk7T2VlKCk7QXUoKTtpOSgpO2d0ZT0iW29iamVjdCBNYXBdIixaTGU9IltvYmplY3QgT2JqZWN0XSIseXRlPSJbb2JqZWN0IFByb21pc2VdIix2dGU9IltvYmplY3QgU2V0XSIseHRlPSJbb2JqZWN0IFdlYWtNYXBdIixidGU9IltvYmplY3QgRGF0YVZpZXddIixKTGU9X3UoTXcpLGVSZT1fdSgkaCksdFJlPV91KEl3KSxyUmU9X3UodGYpLG5SZT1fdShndyksWWQ9ZmE7KE13JiZZZChuZXcgTXcobmV3IEFycmF5QnVmZmVyKDEpKSkhPWJ0ZXx8JGgmJllkKG5ldyAkaCkhPWd0ZXx8SXcmJllkKEl3LnJlc29sdmUoKSkhPXl0ZXx8dGYmJllkKG5ldyB0ZikhPXZ0ZXx8Z3cmJllkKG5ldyBndykhPXh0ZSkmJihZZD1vKGZ1bmN0aW9uKHQpe3ZhciBlPWZhKHQpLHI9ZT09WkxlP3QuY29uc3RydWN0b3I6dm9pZCAwLG49cj9fdShyKToiIjtpZihuKXN3aXRjaChuKXtjYXNlIEpMZTpyZXR1cm4gYnRlO2Nhc2UgZVJlOnJldHVybiBndGU7Y2FzZSB0UmU6cmV0dXJuIHl0ZTtjYXNlIHJSZTpyZXR1cm4gdnRlO2Nhc2UgblJlOnJldHVybiB4dGV9cmV0dXJuIGV9LCJnZXRUYWciKSk7bG89WWR9KTtmdW5jdGlvbiBzUmUodCl7dmFyIGU9dC5sZW5ndGgscj1uZXcgdC5jb25zdHJ1Y3RvcihlKTtyZXR1cm4gZSYmdHlwZW9mIHRbMF09PSJzdHJpbmciJiZhUmUuY2FsbCh0LCJpbmRleCIpJiYoci5pbmRleD10LmluZGV4LHIuaW5wdXQ9dC5pbnB1dCkscn12YXIgaVJlLGFSZSxUdGUsd3RlPU4oKCk9PnsidXNlIHN0cmljdCI7aVJlPU9iamVjdC5wcm90b3R5cGUsYVJlPWlSZS5oYXNPd25Qcm9wZXJ0eTtvKHNSZSwiaW5pdENsb25lQXJyYXkiKTtUdGU9c1JlfSk7ZnVuY3Rpb24gb1JlKHQsZSl7dmFyIHI9ZT9sbSh0LmJ1ZmZlcik6dC5idWZmZXI7cmV0dXJuIG5ldyB0LmNvbnN0cnVjdG9yKHIsdC5ieXRlT2Zmc2V0LHQuYnl0ZUxlbmd0aCl9dmFyIGt0ZSxFdGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtmVCgpO28ob1JlLCJjbG9uZURhdGFWaWV3Iik7a3RlPW9SZX0pO2Z1bmN0aW9uIGNSZSh0KXt2YXIgZT1uZXcgdC5jb25zdHJ1Y3Rvcih0LnNvdXJjZSxsUmUuZXhlYyh0KSk7cmV0dXJuIGUubGFzdEluZGV4PXQubGFzdEluZGV4LGV9dmFyIGxSZSxTdGUsQ3RlPU4oKCk9PnsidXNlIHN0cmljdCI7bFJlPS9cdyokLztvKGNSZSwiY2xvbmVSZWdFeHAiKTtTdGU9Y1JlfSk7ZnVuY3Rpb24gdVJlKHQpe3JldHVybiBfdGU/T2JqZWN0KF90ZS5jYWxsKHQpKTp7fX12YXIgQXRlLF90ZSxEdGUsTHRlPU4oKCk9PnsidXNlIHN0cmljdCI7TWQoKTtBdGU9ZWE/ZWEucHJvdG90eXBlOnZvaWQgMCxfdGU9QXRlP0F0ZS52YWx1ZU9mOnZvaWQgMDtvKHVSZSwiY2xvbmVTeW1ib2wiKTtEdGU9dVJlfSk7ZnVuY3Rpb24gTFJlKHQsZSxyKXt2YXIgbj10LmNvbnN0cnVjdG9yO3N3aXRjaChlKXtjYXNlIHhSZTpyZXR1cm4gbG0odCk7Y2FzZSBoUmU6Y2FzZSBmUmU6cmV0dXJuIG5ldyBuKCt0KTtjYXNlIGJSZTpyZXR1cm4ga3RlKHQscik7Y2FzZSBUUmU6Y2FzZSB3UmU6Y2FzZSBrUmU6Y2FzZSBFUmU6Y2FzZSBTUmU6Y2FzZSBDUmU6Y2FzZSBBUmU6Y2FzZSBfUmU6Y2FzZSBEUmU6cmV0dXJuIGRUKHQscik7Y2FzZSBkUmU6cmV0dXJuIG5ldyBuO2Nhc2UgcFJlOmNhc2UgeVJlOnJldHVybiBuZXcgbih0KTtjYXNlIG1SZTpyZXR1cm4gU3RlKHQpO2Nhc2UgZ1JlOnJldHVybiBuZXcgbjtjYXNlIHZSZTpyZXR1cm4gRHRlKHQpfX12YXIgaFJlLGZSZSxkUmUscFJlLG1SZSxnUmUseVJlLHZSZSx4UmUsYlJlLFRSZSx3UmUsa1JlLEVSZSxTUmUsQ1JlLEFSZSxfUmUsRFJlLFJ0ZSxOdGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtmVCgpO0V0ZSgpO0N0ZSgpO0x0ZSgpO2Y5KCk7aFJlPSJbb2JqZWN0IEJvb2xlYW5dIixmUmU9IltvYmplY3QgRGF0ZV0iLGRSZT0iW29iamVjdCBNYXBdIixwUmU9IltvYmplY3QgTnVtYmVyXSIsbVJlPSJbb2JqZWN0IFJlZ0V4cF0iLGdSZT0iW29iamVjdCBTZXRdIix5UmU9IltvYmplY3QgU3RyaW5nXSIsdlJlPSJbb2JqZWN0IFN5bWJvbF0iLHhSZT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLGJSZT0iW29iamVjdCBEYXRhVmlld10iLFRSZT0iW29iamVjdCBGbG9hdDMyQXJyYXldIix3UmU9IltvYmplY3QgRmxvYXQ2NEFycmF5XSIsa1JlPSJbb2JqZWN0IEludDhBcnJheV0iLEVSZT0iW29iamVjdCBJbnQxNkFycmF5XSIsU1JlPSJbb2JqZWN0IEludDMyQXJyYXldIixDUmU9IltvYmplY3QgVWludDhBcnJheV0iLEFSZT0iW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iLF9SZT0iW29iamVjdCBVaW50MTZBcnJheV0iLERSZT0iW29iamVjdCBVaW50MzJBcnJheV0iO28oTFJlLCJpbml0Q2xvbmVCeVRhZyIpO1J0ZT1MUmV9KTtmdW5jdGlvbiBOUmUodCl7cmV0dXJuIGlpKHQpJiZsbyh0KT09UlJlfXZhciBSUmUsTXRlLEl0ZT1OKCgpPT57InVzZSBzdHJpY3QiO1hkKCk7T28oKTtSUmU9IltvYmplY3QgTWFwXSI7byhOUmUsImJhc2VJc01hcCIpO010ZT1OUmV9KTt2YXIgT3RlLE1SZSxQdGUsQnRlPU4oKCk9PnsidXNlIHN0cmljdCI7SXRlKCk7QmQoKTtoMigpO090ZT1GbyYmRm8uaXNNYXAsTVJlPU90ZT9CbyhPdGUpOk10ZSxQdGU9TVJlfSk7ZnVuY3Rpb24gT1JlKHQpe3JldHVybiBpaSh0KSYmbG8odCk9PUlSZX12YXIgSVJlLEZ0ZSwkdGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtYZCgpO09vKCk7SVJlPSJbb2JqZWN0IFNldF0iO28oT1JlLCJiYXNlSXNTZXQiKTtGdGU9T1JlfSk7dmFyIHp0ZSxQUmUsR3RlLFZ0ZT1OKCgpPT57InVzZSBzdHJpY3QiOyR0ZSgpO0JkKCk7aDIoKTt6dGU9Rm8mJkZvLmlzU2V0LFBSZT16dGU/Qm8oenRlKTpGdGUsR3RlPVBSZX0pO2Z1bmN0aW9uIE93KHQsZSxyLG4saSxhKXt2YXIgcyxsPWUmQlJlLHU9ZSZGUmUsaD1lJiRSZTtpZihyJiYocz1pP3IodCxuLGksYSk6cih0KSkscyE9PXZvaWQgMClyZXR1cm4gcztpZighYm4odCkpcmV0dXJuIHQ7dmFyIGY9UHQodCk7aWYoZil7aWYocz1UdGUodCksIWwpcmV0dXJuIHBUKHQscyl9ZWxzZXt2YXIgZD1sbyh0KSxwPWQ9PUh0ZXx8ZD09SFJlO2lmKExsKHQpKXJldHVybiBoVCh0LGwpO2lmKGQ9PVd0ZXx8ZD09VXRlfHxwJiYhaSl7aWYocz11fHxwP3t9OnlUKHQpLCFsKXJldHVybiB1P2Z0ZSh0LG90ZShzLHQpKTp1dGUodCxhdGUocyx0KSl9ZWxzZXtpZighX25bZF0pcmV0dXJuIGk/dDp7fTtzPVJ0ZSh0LGQsbCl9fWF8fChhPW5ldyBkYyk7dmFyIG09YS5nZXQodCk7aWYobSlyZXR1cm4gbTthLnNldCh0LHMpLEd0ZSh0KT90LmZvckVhY2goZnVuY3Rpb24odil7cy5hZGQoT3codixlLHIsdix0LGEpKX0pOlB0ZSh0KSYmdC5mb3JFYWNoKGZ1bmN0aW9uKHYseCl7cy5zZXQoeCxPdyh2LGUscix4LHQsYSkpfSk7dmFyIGc9aD91P053OlAyOnU/UnM6enIseT1mP3ZvaWQgMDpnKHQpO3JldHVybiB5dyh5fHx0LGZ1bmN0aW9uKHYseCl7eSYmKHg9dix2PXRbeF0pLGdjKHMseCxPdyh2LGUscix4LHQsYSkpfSksc312YXIgQlJlLEZSZSwkUmUsVXRlLHpSZSxHUmUsVlJlLFVSZSxIdGUsSFJlLFdSZSxxUmUsV3RlLFlSZSxYUmUsalJlLEtSZSxRUmUsWlJlLEpSZSxlTmUsdE5lLHJOZSxuTmUsaU5lLGFOZSxzTmUsb05lLGxOZSxfbixQdyxaTD1OKCgpPT57InVzZSBzdHJpY3QiO2wyKCk7R0woKTtwbSgpO3N0ZSgpO2x0ZSgpO3U5KCk7ZDkoKTtodGUoKTtkdGUoKTtqTCgpO0tMKCk7WGQoKTt3dGUoKTtOdGUoKTttOSgpO1duKCk7ZG0oKTtCdGUoKTtubygpO1Z0ZSgpO0VjKCk7VWgoKTtCUmU9MSxGUmU9MiwkUmU9NCxVdGU9IltvYmplY3QgQXJndW1lbnRzXSIselJlPSJbb2JqZWN0IEFycmF5XSIsR1JlPSJbb2JqZWN0IEJvb2xlYW5dIixWUmU9IltvYmplY3QgRGF0ZV0iLFVSZT0iW29iamVjdCBFcnJvcl0iLEh0ZT0iW29iamVjdCBGdW5jdGlvbl0iLEhSZT0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iLFdSZT0iW29iamVjdCBNYXBdIixxUmU9IltvYmplY3QgTnVtYmVyXSIsV3RlPSJbb2JqZWN0IE9iamVjdF0iLFlSZT0iW29iamVjdCBSZWdFeHBdIixYUmU9IltvYmplY3QgU2V0XSIsalJlPSJbb2JqZWN0IFN0cmluZ10iLEtSZT0iW29iamVjdCBTeW1ib2xdIixRUmU9IltvYmplY3QgV2Vha01hcF0iLFpSZT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLEpSZT0iW29iamVjdCBEYXRhVmlld10iLGVOZT0iW29iamVjdCBGbG9hdDMyQXJyYXldIix0TmU9IltvYmplY3QgRmxvYXQ2NEFycmF5XSIsck5lPSJbb2JqZWN0IEludDhBcnJheV0iLG5OZT0iW29iamVjdCBJbnQxNkFycmF5XSIsaU5lPSJbb2JqZWN0IEludDMyQXJyYXldIixhTmU9IltvYmplY3QgVWludDhBcnJheV0iLHNOZT0iW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iLG9OZT0iW29iamVjdCBVaW50MTZBcnJheV0iLGxOZT0iW29iamVjdCBVaW50MzJBcnJheV0iLF9uPXt9O19uW1V0ZV09X25belJlXT1fbltaUmVdPV9uW0pSZV09X25bR1JlXT1fbltWUmVdPV9uW2VOZV09X25bdE5lXT1fbltyTmVdPV9uW25OZV09X25baU5lXT1fbltXUmVdPV9uW3FSZV09X25bV3RlXT1fbltZUmVdPV9uW1hSZV09X25balJlXT1fbltLUmVdPV9uW2FOZV09X25bc05lXT1fbltvTmVdPV9uW2xOZV09ITA7X25bVVJlXT1fbltIdGVdPV9uW1FSZV09ITE7byhPdywiYmFzZUNsb25lIik7UHc9T3d9KTtmdW5jdGlvbiB1TmUodCl7cmV0dXJuIFB3KHQsY05lKX12YXIgY05lLGFuLEpMPU4oKCk9PnsidXNlIHN0cmljdCI7WkwoKTtjTmU9NDtvKHVOZSwiY2xvbmUiKTthbj11TmV9KTtmdW5jdGlvbiBkTmUodCl7cmV0dXJuIFB3KHQsaE5lfGZOZSl9dmFyIGhOZSxmTmUsZVIscXRlPU4oKCk9PnsidXNlIHN0cmljdCI7WkwoKTtoTmU9MSxmTmU9NDtvKGROZSwiY2xvbmVEZWVwIik7ZVI9ZE5lfSk7ZnVuY3Rpb24gcE5lKHQpe2Zvcih2YXIgZT0tMSxyPXQ9PW51bGw/MDp0Lmxlbmd0aCxuPTAsaT1bXTsrK2U8cjspe3ZhciBhPXRbZV07YSYmKGlbbisrXT1hKX1yZXR1cm4gaX12YXIgQWMsWXRlPU4oKCk9PnsidXNlIHN0cmljdCI7byhwTmUsImNvbXBhY3QiKTtBYz1wTmV9KTtmdW5jdGlvbiBnTmUodCl7cmV0dXJuIHRoaXMuX19kYXRhX18uc2V0KHQsbU5lKSx0aGlzfXZhciBtTmUsWHRlLGp0ZT1OKCgpPT57InVzZSBzdHJpY3QiO21OZT0iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI7byhnTmUsInNldENhY2hlQWRkIik7WHRlPWdOZX0pO2Z1bmN0aW9uIHlOZSh0KXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXModCl9dmFyIEt0ZSxRdGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKHlOZSwic2V0Q2FjaGVIYXMiKTtLdGU9eU5lfSk7ZnVuY3Rpb24gQncodCl7dmFyIGU9LTEscj10PT1udWxsPzA6dC5sZW5ndGg7Zm9yKHRoaXMuX19kYXRhX189bmV3IE9kOysrZTxyOyl0aGlzLmFkZCh0W2VdKX12YXIgRm0sRnc9TigoKT0+eyJ1c2Ugc3RyaWN0IjtjVCgpO2p0ZSgpO1F0ZSgpO28oQncsIlNldENhY2hlIik7QncucHJvdG90eXBlLmFkZD1Cdy5wcm90b3R5cGUucHVzaD1YdGU7QncucHJvdG90eXBlLmhhcz1LdGU7Rm09Qnd9KTtmdW5jdGlvbiB2TmUodCxlKXtmb3IodmFyIHI9LTEsbj10PT1udWxsPzA6dC5sZW5ndGg7KytyPG47KWlmKGUodFtyXSxyLHQpKXJldHVybiEwO3JldHVybiExfXZhciAkdyx0Uj1OKCgpPT57InVzZSBzdHJpY3QiO28odk5lLCJhcnJheVNvbWUiKTskdz12TmV9KTtmdW5jdGlvbiB4TmUodCxlKXtyZXR1cm4gdC5oYXMoZSl9dmFyICRtLHp3PU4oKCk9PnsidXNlIHN0cmljdCI7byh4TmUsImNhY2hlSGFzIik7JG09eE5lfSk7ZnVuY3Rpb24gd05lKHQsZSxyLG4saSxhKXt2YXIgcz1yJmJOZSxsPXQubGVuZ3RoLHU9ZS5sZW5ndGg7aWYobCE9dSYmIShzJiZ1PmwpKXJldHVybiExO3ZhciBoPWEuZ2V0KHQpLGY9YS5nZXQoZSk7aWYoaCYmZilyZXR1cm4gaD09ZSYmZj09dDt2YXIgZD0tMSxwPSEwLG09ciZUTmU/bmV3IEZtOnZvaWQgMDtmb3IoYS5zZXQodCxlKSxhLnNldChlLHQpOysrZDxsOyl7dmFyIGc9dFtkXSx5PWVbZF07aWYobil2YXIgdj1zP24oeSxnLGQsZSx0LGEpOm4oZyx5LGQsdCxlLGEpO2lmKHYhPT12b2lkIDApe2lmKHYpY29udGludWU7cD0hMTticmVha31pZihtKXtpZighJHcoZSxmdW5jdGlvbih4LGIpe2lmKCEkbShtLGIpJiYoZz09PXh8fGkoZyx4LHIsbixhKSkpcmV0dXJuIG0ucHVzaChiKX0pKXtwPSExO2JyZWFrfX1lbHNlIGlmKCEoZz09PXl8fGkoZyx5LHIsbixhKSkpe3A9ITE7YnJlYWt9fXJldHVybiBhLmRlbGV0ZSh0KSxhLmRlbGV0ZShlKSxwfXZhciBiTmUsVE5lLEd3LHJSPU4oKCk9PnsidXNlIHN0cmljdCI7RncoKTt0UigpO3p3KCk7Yk5lPTEsVE5lPTI7byh3TmUsImVxdWFsQXJyYXlzIik7R3c9d05lfSk7ZnVuY3Rpb24ga05lKHQpe3ZhciBlPS0xLHI9QXJyYXkodC5zaXplKTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKG4saSl7clsrK2VdPVtpLG5dfSkscn12YXIgWnRlLEp0ZT1OKCgpPT57InVzZSBzdHJpY3QiO28oa05lLCJtYXBUb0FycmF5Iik7WnRlPWtOZX0pO2Z1bmN0aW9uIEVOZSh0KXt2YXIgZT0tMSxyPUFycmF5KHQuc2l6ZSk7cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbihuKXtyWysrZV09bn0pLHJ9dmFyIHptLFZ3PU4oKCk9PnsidXNlIHN0cmljdCI7byhFTmUsInNldFRvQXJyYXkiKTt6bT1FTmV9KTtmdW5jdGlvbiBGTmUodCxlLHIsbixpLGEscyl7c3dpdGNoKHIpe2Nhc2UgQk5lOmlmKHQuYnl0ZUxlbmd0aCE9ZS5ieXRlTGVuZ3RofHx0LmJ5dGVPZmZzZXQhPWUuYnl0ZU9mZnNldClyZXR1cm4hMTt0PXQuYnVmZmVyLGU9ZS5idWZmZXI7Y2FzZSBQTmU6cmV0dXJuISh0LmJ5dGVMZW5ndGghPWUuYnl0ZUxlbmd0aHx8IWEobmV3IG9tKHQpLG5ldyBvbShlKSkpO2Nhc2UgQU5lOmNhc2UgX05lOmNhc2UgUk5lOnJldHVybiBJbygrdCwrZSk7Y2FzZSBETmU6cmV0dXJuIHQubmFtZT09ZS5uYW1lJiZ0Lm1lc3NhZ2U9PWUubWVzc2FnZTtjYXNlIE5OZTpjYXNlIElOZTpyZXR1cm4gdD09ZSsiIjtjYXNlIExOZTp2YXIgbD1adGU7Y2FzZSBNTmU6dmFyIHU9biZTTmU7aWYobHx8KGw9em0pLHQuc2l6ZSE9ZS5zaXplJiYhdSlyZXR1cm4hMTt2YXIgaD1zLmdldCh0KTtpZihoKXJldHVybiBoPT1lO258PUNOZSxzLnNldCh0LGUpO3ZhciBmPUd3KGwodCksbChlKSxuLGksYSxzKTtyZXR1cm4gcy5kZWxldGUodCksZjtjYXNlIE9OZTppZihuUilyZXR1cm4gblIuY2FsbCh0KT09blIuY2FsbChlKX1yZXR1cm4hMX12YXIgU05lLENOZSxBTmUsX05lLEROZSxMTmUsUk5lLE5OZSxNTmUsSU5lLE9OZSxQTmUsQk5lLGVyZSxuUix0cmUscnJlPU4oKCk9PnsidXNlIHN0cmljdCI7TWQoKTtoOSgpO0lkKCk7clIoKTtKdGUoKTtWdygpO1NOZT0xLENOZT0yLEFOZT0iW29iamVjdCBCb29sZWFuXSIsX05lPSJbb2JqZWN0IERhdGVdIixETmU9IltvYmplY3QgRXJyb3JdIixMTmU9IltvYmplY3QgTWFwXSIsUk5lPSJbb2JqZWN0IE51bWJlcl0iLE5OZT0iW29iamVjdCBSZWdFeHBdIixNTmU9IltvYmplY3QgU2V0XSIsSU5lPSJbb2JqZWN0IFN0cmluZ10iLE9OZT0iW29iamVjdCBTeW1ib2xdIixQTmU9IltvYmplY3QgQXJyYXlCdWZmZXJdIixCTmU9IltvYmplY3QgRGF0YVZpZXddIixlcmU9ZWE/ZWEucHJvdG90eXBlOnZvaWQgMCxuUj1lcmU/ZXJlLnZhbHVlT2Y6dm9pZCAwO28oRk5lLCJlcXVhbEJ5VGFnIik7dHJlPUZOZX0pO2Z1bmN0aW9uIFZOZSh0LGUscixuLGksYSl7dmFyIHM9ciYkTmUsbD1QMih0KSx1PWwubGVuZ3RoLGg9UDIoZSksZj1oLmxlbmd0aDtpZih1IT1mJiYhcylyZXR1cm4hMTtmb3IodmFyIGQ9dTtkLS07KXt2YXIgcD1sW2RdO2lmKCEocz9wIGluIGU6R05lLmNhbGwoZSxwKSkpcmV0dXJuITF9dmFyIG09YS5nZXQodCksZz1hLmdldChlKTtpZihtJiZnKXJldHVybiBtPT1lJiZnPT10O3ZhciB5PSEwO2Euc2V0KHQsZSksYS5zZXQoZSx0KTtmb3IodmFyIHY9czsrK2Q8dTspe3A9bFtkXTt2YXIgeD10W3BdLGI9ZVtwXTtpZihuKXZhciBUPXM/bihiLHgscCxlLHQsYSk6bih4LGIscCx0LGUsYSk7aWYoIShUPT09dm9pZCAwP3g9PT1ifHxpKHgsYixyLG4sYSk6VCkpe3k9ITE7YnJlYWt9dnx8KHY9cD09ImNvbnN0cnVjdG9yIil9aWYoeSYmIXYpe3ZhciBTPXQuY29uc3RydWN0b3Isdz1lLmNvbnN0cnVjdG9yO1MhPXcmJiJjb25zdHJ1Y3RvciJpbiB0JiYiY29uc3RydWN0b3IiaW4gZSYmISh0eXBlb2YgUz09ImZ1bmN0aW9uIiYmUyBpbnN0YW5jZW9mIFMmJnR5cGVvZiB3PT0iZnVuY3Rpb24iJiZ3IGluc3RhbmNlb2YgdykmJih5PSExKX1yZXR1cm4gYS5kZWxldGUodCksYS5kZWxldGUoZSkseX12YXIgJE5lLHpOZSxHTmUsbnJlLGlyZT1OKCgpPT57InVzZSBzdHJpY3QiO2pMKCk7JE5lPTEsek5lPU9iamVjdC5wcm90b3R5cGUsR05lPXpOZS5oYXNPd25Qcm9wZXJ0eTtvKFZOZSwiZXF1YWxPYmplY3RzIik7bnJlPVZOZX0pO2Z1bmN0aW9uIFdOZSh0LGUscixuLGksYSl7dmFyIHM9UHQodCksbD1QdChlKSx1PXM/c3JlOmxvKHQpLGg9bD9zcmU6bG8oZSk7dT11PT1hcmU/VXc6dSxoPWg9PWFyZT9VdzpoO3ZhciBmPXU9PVV3LGQ9aD09VXcscD11PT1oO2lmKHAmJkxsKHQpKXtpZighTGwoZSkpcmV0dXJuITE7cz0hMCxmPSExfWlmKHAmJiFmKXJldHVybiBhfHwoYT1uZXcgZGMpLHN8fEdoKHQpP0d3KHQsZSxyLG4saSxhKTp0cmUodCxlLHUscixuLGksYSk7aWYoIShyJlVOZSkpe3ZhciBtPWYmJm9yZS5jYWxsKHQsIl9fd3JhcHBlZF9fIiksZz1kJiZvcmUuY2FsbChlLCJfX3dyYXBwZWRfXyIpO2lmKG18fGcpe3ZhciB5PW0/dC52YWx1ZSgpOnQsdj1nP2UudmFsdWUoKTplO3JldHVybiBhfHwoYT1uZXcgZGMpLGkoeSx2LHIsbixhKX19cmV0dXJuIHA/KGF8fChhPW5ldyBkYyksbnJlKHQsZSxyLG4saSxhKSk6ITF9dmFyIFVOZSxhcmUsc3JlLFV3LEhOZSxvcmUsbHJlLGNyZT1OKCgpPT57InVzZSBzdHJpY3QiO2wyKCk7clIoKTtycmUoKTtpcmUoKTtYZCgpO1duKCk7ZG0oKTtmMigpO1VOZT0xLGFyZT0iW29iamVjdCBBcmd1bWVudHNdIixzcmU9IltvYmplY3QgQXJyYXldIixVdz0iW29iamVjdCBPYmplY3RdIixITmU9T2JqZWN0LnByb3RvdHlwZSxvcmU9SE5lLmhhc093blByb3BlcnR5O28oV05lLCJiYXNlSXNFcXVhbERlZXAiKTtscmU9V05lfSk7ZnVuY3Rpb24gdXJlKHQsZSxyLG4saSl7cmV0dXJuIHQ9PT1lPyEwOnQ9PW51bGx8fGU9PW51bGx8fCFpaSh0KSYmIWlpKGUpP3QhPT10JiZlIT09ZTpscmUodCxlLHIsbix1cmUsaSl9dmFyIEh3LGlSPU4oKCk9PnsidXNlIHN0cmljdCI7Y3JlKCk7T28oKTtvKHVyZSwiYmFzZUlzRXF1YWwiKTtIdz11cmV9KTtmdW5jdGlvbiBYTmUodCxlLHIsbil7dmFyIGk9ci5sZW5ndGgsYT1pLHM9IW47aWYodD09bnVsbClyZXR1cm4hYTtmb3IodD1PYmplY3QodCk7aS0tOyl7dmFyIGw9cltpXTtpZihzJiZsWzJdP2xbMV0hPT10W2xbMF1dOiEobFswXWluIHQpKXJldHVybiExfWZvcig7KytpPGE7KXtsPXJbaV07dmFyIHU9bFswXSxoPXRbdV0sZj1sWzFdO2lmKHMmJmxbMl0pe2lmKGg9PT12b2lkIDAmJiEodSBpbiB0KSlyZXR1cm4hMX1lbHNle3ZhciBkPW5ldyBkYztpZihuKXZhciBwPW4oaCxmLHUsdCxlLGQpO2lmKCEocD09PXZvaWQgMD9IdyhmLGgscU5lfFlOZSxuLGQpOnApKXJldHVybiExfX1yZXR1cm4hMH12YXIgcU5lLFlOZSxocmUsZnJlPU4oKCk9PnsidXNlIHN0cmljdCI7bDIoKTtpUigpO3FOZT0xLFlOZT0yO28oWE5lLCJiYXNlSXNNYXRjaCIpO2hyZT1YTmV9KTtmdW5jdGlvbiBqTmUodCl7cmV0dXJuIHQ9PT10JiYhYm4odCl9dmFyIFd3LGFSPU4oKCk9PnsidXNlIHN0cmljdCI7bm8oKTtvKGpOZSwiaXNTdHJpY3RDb21wYXJhYmxlIik7V3c9ak5lfSk7ZnVuY3Rpb24gS05lKHQpe2Zvcih2YXIgZT16cih0KSxyPWUubGVuZ3RoO3ItLTspe3ZhciBuPWVbcl0saT10W25dO2Vbcl09W24saSxXdyhpKV19cmV0dXJuIGV9dmFyIGRyZSxwcmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjthUigpO0VjKCk7byhLTmUsImdldE1hdGNoRGF0YSIpO2RyZT1LTmV9KTtmdW5jdGlvbiBRTmUodCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/ITE6clt0XT09PWUmJihlIT09dm9pZCAwfHx0IGluIE9iamVjdChyKSl9fXZhciBxdyxzUj1OKCgpPT57InVzZSBzdHJpY3QiO28oUU5lLCJtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZSIpO3F3PVFOZX0pO2Z1bmN0aW9uIFpOZSh0KXt2YXIgZT1kcmUodCk7cmV0dXJuIGUubGVuZ3RoPT0xJiZlWzBdWzJdP3F3KGVbMF1bMF0sZVswXVsxXSk6ZnVuY3Rpb24ocil7cmV0dXJuIHI9PT10fHxocmUocix0LGUpfX12YXIgbXJlLGdyZT1OKCgpPT57InVzZSBzdHJpY3QiO2ZyZSgpO3ByZSgpO3NSKCk7byhaTmUsImJhc2VNYXRjaGVzIik7bXJlPVpOZX0pO2Z1bmN0aW9uIEpOZSh0LGUpe3JldHVybiB0IT1udWxsJiZlIGluIE9iamVjdCh0KX12YXIgeXJlLHZyZT1OKCgpPT57InVzZSBzdHJpY3QiO28oSk5lLCJiYXNlSGFzSW4iKTt5cmU9Sk5lfSk7ZnVuY3Rpb24gZU1lKHQsZSxyKXtlPUpoKGUsdCk7Zm9yKHZhciBuPS0xLGk9ZS5sZW5ndGgsYT0hMTsrK248aTspe3ZhciBzPVNjKGVbbl0pO2lmKCEoYT10IT1udWxsJiZyKHQscykpKWJyZWFrO3Q9dFtzXX1yZXR1cm4gYXx8KytuIT1pP2E6KGk9dD09bnVsbD8wOnQubGVuZ3RoLCEhaSYmZm0oaSkmJlZoKHMsaSkmJihQdCh0KXx8RGwodCkpKX12YXIgWXcsb1I9TigoKT0+eyJ1c2Ugc3RyaWN0IjtJMigpO2htKCk7V24oKTtwMigpO3ZUKCk7TW0oKTtvKGVNZSwiaGFzUGF0aCIpO1l3PWVNZX0pO2Z1bmN0aW9uIHRNZSh0LGUpe3JldHVybiB0IT1udWxsJiZZdyh0LGUseXJlKX12YXIgWHcsbFI9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt2cmUoKTtvUigpO28odE1lLCJoYXNJbiIpO1h3PXRNZX0pO2Z1bmN0aW9uIGlNZSh0LGUpe3JldHVybiBObSh0KSYmV3coZSk/cXcoU2ModCksZSk6ZnVuY3Rpb24ocil7dmFyIG49WWVlKHIsdCk7cmV0dXJuIG49PT12b2lkIDAmJm49PT1lP1h3KHIsdCk6SHcoZSxuLHJNZXxuTWUpfX12YXIgck1lLG5NZSx4cmUsYnJlPU4oKCk9PnsidXNlIHN0cmljdCI7aVIoKTtYZWUoKTtsUigpO3d3KCk7YVIoKTtzUigpO01tKCk7ck1lPTEsbk1lPTI7byhpTWUsImJhc2VNYXRjaGVzUHJvcGVydHkiKTt4cmU9aU1lfSk7ZnVuY3Rpb24gYU1lKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZT8uW3RdfX12YXIgancsY1I9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKGFNZSwiYmFzZVByb3BlcnR5Iik7anc9YU1lfSk7ZnVuY3Rpb24gc01lKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZWYoZSx0KX19dmFyIFRyZSx3cmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtPMigpO28oc01lLCJiYXNlUHJvcGVydHlEZWVwIik7VHJlPXNNZX0pO2Z1bmN0aW9uIG9NZSh0KXtyZXR1cm4gTm0odCk/ancoU2ModCkpOlRyZSh0KX12YXIga3JlLEVyZT1OKCgpPT57InVzZSBzdHJpY3QiO2NSKCk7d3JlKCk7d3coKTtNbSgpO28ob01lLCJwcm9wZXJ0eSIpO2tyZT1vTWV9KTtmdW5jdGlvbiBsTWUodCl7cmV0dXJuIHR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6dD09bnVsbD90YTp0eXBlb2YgdD09Im9iamVjdCI/UHQodCk/eHJlKHRbMF0sdFsxXSk6bXJlKHQpOmtyZSh0KX12YXIgbW4sb3M9TigoKT0+eyJ1c2Ugc3RyaWN0IjtncmUoKTticmUoKTtMdSgpO1duKCk7RXJlKCk7byhsTWUsImJhc2VJdGVyYXRlZSIpO21uPWxNZX0pO2Z1bmN0aW9uIGNNZSh0LGUscixuKXtmb3IodmFyIGk9LTEsYT10PT1udWxsPzA6dC5sZW5ndGg7KytpPGE7KXt2YXIgcz10W2ldO2UobixzLHIocyksdCl9cmV0dXJuIG59dmFyIFNyZSxDcmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKGNNZSwiYXJyYXlBZ2dyZWdhdG9yIik7U3JlPWNNZX0pO2Z1bmN0aW9uIHVNZSh0LGUpe3JldHVybiB0JiZzbSh0LGUsenIpfXZhciBHbSxLdz1OKCgpPT57InVzZSBzdHJpY3QiO3VUKCk7RWMoKTtvKHVNZSwiYmFzZUZvck93biIpO0dtPXVNZX0pO2Z1bmN0aW9uIGhNZSh0LGUpe3JldHVybiBmdW5jdGlvbihyLG4pe2lmKHI9PW51bGwpcmV0dXJuIHI7aWYoIWZpKHIpKXJldHVybiB0KHIsbik7Zm9yKHZhciBpPXIubGVuZ3RoLGE9ZT9pOi0xLHM9T2JqZWN0KHIpOyhlP2EtLTorK2E8aSkmJm4oc1thXSxhLHMpIT09ITE7KTtyZXR1cm4gcn19dmFyIEFyZSxfcmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtQbygpO28oaE1lLCJjcmVhdGVCYXNlRWFjaCIpO0FyZT1oTWV9KTt2YXIgZk1lLEZzLHJmPU4oKCk9PnsidXNlIHN0cmljdCI7S3coKTtfcmUoKTtmTWU9QXJlKEdtKSxGcz1mTWV9KTtmdW5jdGlvbiBkTWUodCxlLHIsbil7cmV0dXJuIEZzKHQsZnVuY3Rpb24oaSxhLHMpe2UobixpLHIoaSkscyl9KSxufXZhciBEcmUsTHJlPU4oKCk9PnsidXNlIHN0cmljdCI7cmYoKTtvKGRNZSwiYmFzZUFnZ3JlZ2F0b3IiKTtEcmU9ZE1lfSk7ZnVuY3Rpb24gcE1lKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7dmFyIGk9UHQocik/U3JlOkRyZSxhPWU/ZSgpOnt9O3JldHVybiBpKHIsdCxtbihuLDIpLGEpfX12YXIgUnJlLE5yZT1OKCgpPT57InVzZSBzdHJpY3QiO0NyZSgpO0xyZSgpO29zKCk7V24oKTtvKHBNZSwiY3JlYXRlQWdncmVnYXRvciIpO1JyZT1wTWV9KTt2YXIgbU1lLFF3LE1yZT1OKCgpPT57InVzZSBzdHJpY3QiO01vKCk7bU1lPW8oZnVuY3Rpb24oKXtyZXR1cm4gaGkuRGF0ZS5ub3coKX0sIm5vdyIpLFF3PW1NZX0pO3ZhciBJcmUsZ01lLHlNZSxuZixPcmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjttbSgpO0lkKCk7JGQoKTtVaCgpO0lyZT1PYmplY3QucHJvdG90eXBlLGdNZT1JcmUuaGFzT3duUHJvcGVydHkseU1lPXljKGZ1bmN0aW9uKHQsZSl7dD1PYmplY3QodCk7dmFyIHI9LTEsbj1lLmxlbmd0aCxpPW4+Mj9lWzJdOnZvaWQgMDtmb3IoaSYmaW8oZVswXSxlWzFdLGkpJiYobj0xKTsrK3I8bjspZm9yKHZhciBhPWVbcl0scz1ScyhhKSxsPS0xLHU9cy5sZW5ndGg7KytsPHU7KXt2YXIgaD1zW2xdLGY9dFtoXTsoZj09PXZvaWQgMHx8SW8oZixJcmVbaF0pJiYhZ01lLmNhbGwodCxoKSkmJih0W2hdPWFbaF0pfXJldHVybiB0fSksbmY9eU1lfSk7ZnVuY3Rpb24gdk1lKHQsZSxyKXtmb3IodmFyIG49LTEsaT10PT1udWxsPzA6dC5sZW5ndGg7KytuPGk7KWlmKHIoZSx0W25dKSlyZXR1cm4hMDtyZXR1cm4hMX12YXIgWncsdVI9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKHZNZSwiYXJyYXlJbmNsdWRlc1dpdGgiKTtadz12TWV9KTtmdW5jdGlvbiBiTWUodCxlLHIsbil7dmFyIGk9LTEsYT1idyxzPSEwLGw9dC5sZW5ndGgsdT1bXSxoPWUubGVuZ3RoO2lmKCFsKXJldHVybiB1O3ImJihlPUJzKGUsQm8ocikpKSxuPyhhPVp3LHM9ITEpOmUubGVuZ3RoPj14TWUmJihhPSRtLHM9ITEsZT1uZXcgRm0oZSkpO2U6Zm9yKDsrK2k8bDspe3ZhciBmPXRbaV0sZD1yPT1udWxsP2Y6cihmKTtpZihmPW58fGYhPT0wP2Y6MCxzJiZkPT09ZCl7Zm9yKHZhciBwPWg7cC0tOylpZihlW3BdPT09ZCljb250aW51ZSBlO3UucHVzaChmKX1lbHNlIGEoZSxkLG4pfHx1LnB1c2goZil9cmV0dXJuIHV9dmFyIHhNZSxQcmUsQnJlPU4oKCk9PnsidXNlIHN0cmljdCI7RncoKTtVTCgpO3VSKCk7cWQoKTtCZCgpO3p3KCk7eE1lPTIwMDtvKGJNZSwiYmFzZURpZmZlcmVuY2UiKTtQcmU9Yk1lfSk7dmFyIFRNZSxhZixGcmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtCcmUoKTtPbSgpO21tKCk7eFQoKTtUTWU9eWMoZnVuY3Rpb24odCxlKXtyZXR1cm4gUGQodCk/UHJlKHQsQ2MoZSwxLFBkLCEwKSk6W119KSxhZj1UTWV9KTtmdW5jdGlvbiB3TWUodCl7dmFyIGU9dD09bnVsbD8wOnQubGVuZ3RoO3JldHVybiBlP3RbZS0xXTp2b2lkIDB9dmFyIG1hLCRyZT1OKCgpPT57InVzZSBzdHJpY3QiO28od01lLCJsYXN0Iik7bWE9d01lfSk7ZnVuY3Rpb24ga01lKHQsZSxyKXt2YXIgbj10PT1udWxsPzA6dC5sZW5ndGg7cmV0dXJuIG4/KGU9cnx8ZT09PXZvaWQgMD8xOmtjKGUpLEN3KHQsZTwwPzA6ZSxuKSk6W119dmFyIGJpLHpyZT1OKCgpPT57InVzZSBzdHJpY3QiO1dMKCk7RG0oKTtvKGtNZSwiZHJvcCIpO2JpPWtNZX0pO2Z1bmN0aW9uIEVNZSh0LGUscil7dmFyIG49dD09bnVsbD8wOnQubGVuZ3RoO3JldHVybiBuPyhlPXJ8fGU9PT12b2lkIDA/MTprYyhlKSxlPW4tZSxDdyh0LDAsZTwwPzA6ZSkpOltdfXZhciBGdSxHcmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtXTCgpO0RtKCk7byhFTWUsImRyb3BSaWdodCIpO0Z1PUVNZX0pO2Z1bmN0aW9uIFNNZSh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDp0YX12YXIgVm0sSnc9TigoKT0+eyJ1c2Ugc3RyaWN0IjtMdSgpO28oU01lLCJjYXN0RnVuY3Rpb24iKTtWbT1TTWV9KTtmdW5jdGlvbiBDTWUodCxlKXt2YXIgcj1QdCh0KT95dzpGcztyZXR1cm4gcih0LFZtKGUpKX12YXIgQWUsZWs9TigoKT0+eyJ1c2Ugc3RyaWN0IjtHTCgpO3JmKCk7SncoKTtXbigpO28oQ01lLCJmb3JFYWNoIik7QWU9Q01lfSk7dmFyIFZyZT1OKCgpPT57InVzZSBzdHJpY3QiO2VrKCl9KTtmdW5jdGlvbiBBTWUodCxlKXtmb3IodmFyIHI9LTEsbj10PT1udWxsPzA6dC5sZW5ndGg7KytyPG47KWlmKCFlKHRbcl0scix0KSlyZXR1cm4hMTtyZXR1cm4hMH12YXIgVXJlLEhyZT1OKCgpPT57InVzZSBzdHJpY3QiO28oQU1lLCJhcnJheUV2ZXJ5Iik7VXJlPUFNZX0pO2Z1bmN0aW9uIF9NZSh0LGUpe3ZhciByPSEwO3JldHVybiBGcyh0LGZ1bmN0aW9uKG4saSxhKXtyZXR1cm4gcj0hIWUobixpLGEpLHJ9KSxyfXZhciBXcmUscXJlPU4oKCk9PnsidXNlIHN0cmljdCI7cmYoKTtvKF9NZSwiYmFzZUV2ZXJ5Iik7V3JlPV9NZX0pO2Z1bmN0aW9uIERNZSh0LGUscil7dmFyIG49UHQodCk/VXJlOldyZTtyZXR1cm4gciYmaW8odCxlLHIpJiYoZT12b2lkIDApLG4odCxtbihlLDMpKX12YXIgUGEsWXJlPU4oKCk9PnsidXNlIHN0cmljdCI7SHJlKCk7cXJlKCk7b3MoKTtXbigpOyRkKCk7byhETWUsImV2ZXJ5Iik7UGE9RE1lfSk7ZnVuY3Rpb24gTE1lKHQsZSl7dmFyIHI9W107cmV0dXJuIEZzKHQsZnVuY3Rpb24obixpLGEpe2UobixpLGEpJiZyLnB1c2gobil9KSxyfXZhciB0ayxoUj1OKCgpPT57InVzZSBzdHJpY3QiO3JmKCk7byhMTWUsImJhc2VGaWx0ZXIiKTt0az1MTWV9KTtmdW5jdGlvbiBSTWUodCxlKXt2YXIgcj1QdCh0KT9QbTp0aztyZXR1cm4gcih0LG1uKGUsMykpfXZhciBZcixmUj1OKCgpPT57InVzZSBzdHJpY3QiO0F3KCk7aFIoKTtvcygpO1duKCk7byhSTWUsImZpbHRlciIpO1lyPVJNZX0pO2Z1bmN0aW9uIE5NZSh0KXtyZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3ZhciBpPU9iamVjdChlKTtpZighZmkoZSkpe3ZhciBhPW1uKHIsMyk7ZT16cihlKSxyPW8oZnVuY3Rpb24obCl7cmV0dXJuIGEoaVtsXSxsLGkpfSwicHJlZGljYXRlIil9dmFyIHM9dChlLHIsbik7cmV0dXJuIHM+LTE/aVthP2Vbc106c106dm9pZCAwfX12YXIgWHJlLGpyZT1OKCgpPT57InVzZSBzdHJpY3QiO29zKCk7UG8oKTtFYygpO28oTk1lLCJjcmVhdGVGaW5kIik7WHJlPU5NZX0pO2Z1bmN0aW9uIElNZSh0LGUscil7dmFyIG49dD09bnVsbD8wOnQubGVuZ3RoO2lmKCFuKXJldHVybi0xO3ZhciBpPXI9PW51bGw/MDprYyhyKTtyZXR1cm4gaTwwJiYoaT1NTWUobitpLDApKSx2dyh0LG1uKGUsMyksaSl9dmFyIE1NZSxLcmUsUXJlPU4oKCk9PnsidXNlIHN0cmljdCI7VkwoKTtvcygpO0RtKCk7TU1lPU1hdGgubWF4O28oSU1lLCJmaW5kSW5kZXgiKTtLcmU9SU1lfSk7dmFyIE9NZSxscyxacmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtqcmUoKTtRcmUoKTtPTWU9WHJlKEtyZSksbHM9T01lfSk7ZnVuY3Rpb24gUE1lKHQpe3JldHVybiB0JiZ0Lmxlbmd0aD90WzBdOnZvaWQgMH12YXIgaWEsSnJlPU4oKCk9PnsidXNlIHN0cmljdCI7byhQTWUsImhlYWQiKTtpYT1QTWV9KTt2YXIgZW5lPU4oKCk9PnsidXNlIHN0cmljdCI7SnJlKCl9KTtmdW5jdGlvbiBCTWUodCxlKXt2YXIgcj0tMSxuPWZpKHQpP0FycmF5KHQubGVuZ3RoKTpbXTtyZXR1cm4gRnModCxmdW5jdGlvbihpLGEscyl7blsrK3JdPWUoaSxhLHMpfSksbn12YXIgcmssZFI9TigoKT0+eyJ1c2Ugc3RyaWN0IjtyZigpO1BvKCk7byhCTWUsImJhc2VNYXAiKTtyaz1CTWV9KTtmdW5jdGlvbiBGTWUodCxlKXt2YXIgcj1QdCh0KT9CczpyaztyZXR1cm4gcih0LG1uKGUsMykpfXZhciBKZSxVbT1OKCgpPT57InVzZSBzdHJpY3QiO3FkKCk7b3MoKTtkUigpO1duKCk7byhGTWUsIm1hcCIpO0plPUZNZX0pO2Z1bmN0aW9uICRNZSh0LGUpe3JldHVybiBDYyhKZSh0LGUpLDEpfXZhciBnYSxwUj1OKCgpPT57InVzZSBzdHJpY3QiO09tKCk7VW0oKTtvKCRNZSwiZmxhdE1hcCIpO2dhPSRNZX0pO2Z1bmN0aW9uIHpNZSh0LGUpe3JldHVybiB0PT1udWxsP3Q6c20odCxWbShlKSxScyl9dmFyIG1SLHRuZT1OKCgpPT57InVzZSBzdHJpY3QiO3VUKCk7SncoKTtVaCgpO28oek1lLCJmb3JJbiIpO21SPXpNZX0pO2Z1bmN0aW9uIEdNZSh0LGUpe3JldHVybiB0JiZHbSh0LFZtKGUpKX12YXIgZ1Iscm5lPU4oKCk9PnsidXNlIHN0cmljdCI7S3coKTtKdygpO28oR01lLCJmb3JPd24iKTtnUj1HTWV9KTt2YXIgVk1lLFVNZSxITWUseVIsbm5lPU4oKCk9PnsidXNlIHN0cmljdCI7YW0oKTtOcmUoKTtWTWU9T2JqZWN0LnByb3RvdHlwZSxVTWU9Vk1lLmhhc093blByb3BlcnR5LEhNZT1ScmUoZnVuY3Rpb24odCxlLHIpe1VNZS5jYWxsKHQscik/dFtyXS5wdXNoKGUpOnBjKHQscixbZV0pfSkseVI9SE1lfSk7ZnVuY3Rpb24gV01lKHQsZSl7cmV0dXJuIHQ+ZX12YXIgaW5lLGFuZT1OKCgpPT57InVzZSBzdHJpY3QiO28oV01lLCJiYXNlR3QiKTtpbmU9V01lfSk7ZnVuY3Rpb24gWE1lKHQsZSl7cmV0dXJuIHQhPW51bGwmJllNZS5jYWxsKHQsZSl9dmFyIHFNZSxZTWUsc25lLG9uZT1OKCgpPT57InVzZSBzdHJpY3QiO3FNZT1PYmplY3QucHJvdG90eXBlLFlNZT1xTWUuaGFzT3duUHJvcGVydHk7byhYTWUsImJhc2VIYXMiKTtzbmU9WE1lfSk7ZnVuY3Rpb24gak1lKHQsZSl7cmV0dXJuIHQhPW51bGwmJll3KHQsZSxzbmUpfXZhciBCdCxsbmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvbmUoKTtvUigpO28oak1lLCJoYXMiKTtCdD1qTWV9KTtmdW5jdGlvbiBRTWUodCl7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nInx8IVB0KHQpJiZpaSh0KSYmZmEodCk9PUtNZX12YXIgS01lLFRpLG5rPU4oKCk9PnsidXNlIHN0cmljdCI7QXUoKTtXbigpO09vKCk7S01lPSJbb2JqZWN0IFN0cmluZ10iO28oUU1lLCJpc1N0cmluZyIpO1RpPVFNZX0pO2Z1bmN0aW9uIFpNZSh0LGUpe3JldHVybiBCcyhlLGZ1bmN0aW9uKHIpe3JldHVybiB0W3JdfSl9dmFyIGNuZSx1bmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtxZCgpO28oWk1lLCJiYXNlVmFsdWVzIik7Y25lPVpNZX0pO2Z1bmN0aW9uIEpNZSh0KXtyZXR1cm4gdD09bnVsbD9bXTpjbmUodCx6cih0KSl9dmFyIGJyLHZSPU4oKCk9PnsidXNlIHN0cmljdCI7dW5lKCk7RWMoKTtvKEpNZSwidmFsdWVzIik7YnI9Sk1lfSk7ZnVuY3Rpb24gdEllKHQsZSxyLG4pe3Q9ZmkodCk/dDpicih0KSxyPXImJiFuP2tjKHIpOjA7dmFyIGk9dC5sZW5ndGg7cmV0dXJuIHI8MCYmKHI9ZUllKGkrciwwKSksVGkodCk/cjw9aSYmdC5pbmRleE9mKGUscik+LTE6ISFpJiZMbSh0LGUscik+LTF9dmFyIGVJZSxYbixobmU9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt4dygpO1BvKCk7bmsoKTtEbSgpO3ZSKCk7ZUllPU1hdGgubWF4O28odEllLCJpbmNsdWRlcyIpO1huPXRJZX0pO2Z1bmN0aW9uIG5JZSh0LGUscil7dmFyIG49dD09bnVsbD8wOnQubGVuZ3RoO2lmKCFuKXJldHVybi0xO3ZhciBpPXI9PW51bGw/MDprYyhyKTtyZXR1cm4gaTwwJiYoaT1ySWUobitpLDApKSxMbSh0LGUsaSl9dmFyIHJJZSxpayxmbmU9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt4dygpO0RtKCk7ckllPU1hdGgubWF4O28obkllLCJpbmRleE9mIik7aWs9bkllfSk7ZnVuY3Rpb24gbEllKHQpe2lmKHQ9PW51bGwpcmV0dXJuITA7aWYoZmkodCkmJihQdCh0KXx8dHlwZW9mIHQ9PSJzdHJpbmcifHx0eXBlb2YgdC5zcGxpY2U9PSJmdW5jdGlvbiJ8fExsKHQpfHxHaCh0KXx8RGwodCkpKXJldHVybiF0Lmxlbmd0aDt2YXIgZT1sbyh0KTtpZihlPT1pSWV8fGU9PWFJZSlyZXR1cm4hdC5zaXplO2lmKG1jKHQpKXJldHVybiFSbSh0KS5sZW5ndGg7Zm9yKHZhciByIGluIHQpaWYob0llLmNhbGwodCxyKSlyZXR1cm4hMTtyZXR1cm4hMH12YXIgaUllLGFJZSxzSWUsb0llLGhyLGFrPU4oKCk9PnsidXNlIHN0cmljdCI7VHcoKTtYZCgpO2htKCk7V24oKTtQbygpO2RtKCk7dW0oKTtmMigpO2lJZT0iW29iamVjdCBNYXBdIixhSWU9IltvYmplY3QgU2V0XSIsc0llPU9iamVjdC5wcm90b3R5cGUsb0llPXNJZS5oYXNPd25Qcm9wZXJ0eTtvKGxJZSwiaXNFbXB0eSIpO2hyPWxJZX0pO2Z1bmN0aW9uIHVJZSh0KXtyZXR1cm4gaWkodCkmJmZhKHQpPT1jSWV9dmFyIGNJZSxkbmUscG5lPU4oKCk9PnsidXNlIHN0cmljdCI7QXUoKTtPbygpO2NJZT0iW29iamVjdCBSZWdFeHBdIjtvKHVJZSwiYmFzZUlzUmVnRXhwIik7ZG5lPXVJZX0pO3ZhciBtbmUsaEllLFVvLGduZT1OKCgpPT57InVzZSBzdHJpY3QiO3BuZSgpO0JkKCk7aDIoKTttbmU9Rm8mJkZvLmlzUmVnRXhwLGhJZT1tbmU/Qm8obW5lKTpkbmUsVW89aEllfSk7ZnVuY3Rpb24gZkllKHQpe3JldHVybiB0PT09dm9pZCAwfXZhciBtcix5bmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKGZJZSwiaXNVbmRlZmluZWQiKTttcj1mSWV9KTtmdW5jdGlvbiBkSWUodCxlKXtyZXR1cm4gdDxlfXZhciBzayx4Uj1OKCgpPT57InVzZSBzdHJpY3QiO28oZEllLCJiYXNlTHQiKTtzaz1kSWV9KTtmdW5jdGlvbiBwSWUodCxlKXt2YXIgcj17fTtyZXR1cm4gZT1tbihlLDMpLEdtKHQsZnVuY3Rpb24obixpLGEpe3BjKHIsaSxlKG4saSxhKSl9KSxyfXZhciBqZCx2bmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjthbSgpO0t3KCk7b3MoKTtvKHBJZSwibWFwVmFsdWVzIik7amQ9cEllfSk7ZnVuY3Rpb24gbUllKHQsZSxyKXtmb3IodmFyIG49LTEsaT10Lmxlbmd0aDsrK248aTspe3ZhciBhPXRbbl0scz1lKGEpO2lmKHMhPW51bGwmJihsPT09dm9pZCAwP3M9PT1zJiYhb28ocyk6cihzLGwpKSl2YXIgbD1zLHU9YX1yZXR1cm4gdX12YXIgSG0sb2s9TigoKT0+eyJ1c2Ugc3RyaWN0IjtXZCgpO28obUllLCJiYXNlRXh0cmVtdW0iKTtIbT1tSWV9KTtmdW5jdGlvbiBnSWUodCl7cmV0dXJuIHQmJnQubGVuZ3RoP0htKHQsdGEsaW5lKTp2b2lkIDB9dmFyICRzLHhuZT1OKCgpPT57InVzZSBzdHJpY3QiO29rKCk7YW5lKCk7THUoKTtvKGdJZSwibWF4Iik7JHM9Z0llfSk7ZnVuY3Rpb24geUllKHQpe3JldHVybiB0JiZ0Lmxlbmd0aD9IbSh0LHRhLHNrKTp2b2lkIDB9dmFyIE5sLGJSPU4oKCk9PnsidXNlIHN0cmljdCI7b2soKTt4UigpO0x1KCk7byh5SWUsIm1pbiIpO05sPXlJZX0pO2Z1bmN0aW9uIHZJZSh0LGUpe3JldHVybiB0JiZ0Lmxlbmd0aD9IbSh0LG1uKGUsMiksc2spOnZvaWQgMH12YXIgS2QsYm5lPU4oKCk9PnsidXNlIHN0cmljdCI7b2soKTtvcygpO3hSKCk7byh2SWUsIm1pbkJ5Iik7S2Q9dkllfSk7ZnVuY3Rpb24gYkllKHQpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoeEllKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHM7c3dpdGNoKGUubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIXQuY2FsbCh0aGlzKTtjYXNlIDE6cmV0dXJuIXQuY2FsbCh0aGlzLGVbMF0pO2Nhc2UgMjpyZXR1cm4hdC5jYWxsKHRoaXMsZVswXSxlWzFdKTtjYXNlIDM6cmV0dXJuIXQuY2FsbCh0aGlzLGVbMF0sZVsxXSxlWzJdKX1yZXR1cm4hdC5hcHBseSh0aGlzLGUpfX12YXIgeEllLFRuZSx3bmU9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt4SWU9IkV4cGVjdGVkIGEgZnVuY3Rpb24iO28oYkllLCJuZWdhdGUiKTtUbmU9YkllfSk7ZnVuY3Rpb24gVEllKHQsZSxyLG4pe2lmKCFibih0KSlyZXR1cm4gdDtlPUpoKGUsdCk7Zm9yKHZhciBpPS0xLGE9ZS5sZW5ndGgscz1hLTEsbD10O2whPW51bGwmJisraTxhOyl7dmFyIHU9U2MoZVtpXSksaD1yO2lmKHU9PT0iX19wcm90b19fInx8dT09PSJjb25zdHJ1Y3RvciJ8fHU9PT0icHJvdG90eXBlIilyZXR1cm4gdDtpZihpIT1zKXt2YXIgZj1sW3VdO2g9bj9uKGYsdSxsKTp2b2lkIDAsaD09PXZvaWQgMCYmKGg9Ym4oZik/ZjpWaChlW2krMV0pP1tdOnt9KX1nYyhsLHUsaCksbD1sW3VdfXJldHVybiB0fXZhciBrbmUsRW5lPU4oKCk9PnsidXNlIHN0cmljdCI7cG0oKTtJMigpO3AyKCk7bm8oKTtNbSgpO28oVEllLCJiYXNlU2V0Iik7a25lPVRJZX0pO2Z1bmN0aW9uIHdJZSh0LGUscil7Zm9yKHZhciBuPS0xLGk9ZS5sZW5ndGgsYT17fTsrK248aTspe3ZhciBzPWVbbl0sbD1lZih0LHMpO3IobCxzKSYma25lKGEsSmgocyx0KSxsKX1yZXR1cm4gYX12YXIgbGssVFI9TigoKT0+eyJ1c2Ugc3RyaWN0IjtPMigpO0VuZSgpO0kyKCk7byh3SWUsImJhc2VQaWNrQnkiKTtsaz13SWV9KTtmdW5jdGlvbiBrSWUodCxlKXtpZih0PT1udWxsKXJldHVybnt9O3ZhciByPUJzKE53KHQpLGZ1bmN0aW9uKG4pe3JldHVybltuXX0pO3JldHVybiBlPW1uKGUpLGxrKHQscixmdW5jdGlvbihuLGkpe3JldHVybiBlKG4saVswXSl9KX12YXIgenMsU25lPU4oKCk9PnsidXNlIHN0cmljdCI7cWQoKTtvcygpO1RSKCk7S0woKTtvKGtJZSwicGlja0J5Iik7enM9a0llfSk7ZnVuY3Rpb24gRUllKHQsZSl7dmFyIHI9dC5sZW5ndGg7Zm9yKHQuc29ydChlKTtyLS07KXRbcl09dFtyXS52YWx1ZTtyZXR1cm4gdH12YXIgQ25lLEFuZT1OKCgpPT57InVzZSBzdHJpY3QiO28oRUllLCJiYXNlU29ydEJ5Iik7Q25lPUVJZX0pO2Z1bmN0aW9uIFNJZSh0LGUpe2lmKHQhPT1lKXt2YXIgcj10IT09dm9pZCAwLG49dD09PW51bGwsaT10PT09dCxhPW9vKHQpLHM9ZSE9PXZvaWQgMCxsPWU9PT1udWxsLHU9ZT09PWUsaD1vbyhlKTtpZighbCYmIWgmJiFhJiZ0PmV8fGEmJnMmJnUmJiFsJiYhaHx8biYmcyYmdXx8IXImJnV8fCFpKXJldHVybiAxO2lmKCFuJiYhYSYmIWgmJnQ8ZXx8aCYmciYmaSYmIW4mJiFhfHxsJiZyJiZpfHwhcyYmaXx8IXUpcmV0dXJuLTF9cmV0dXJuIDB9dmFyIF9uZSxEbmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtXZCgpO28oU0llLCJjb21wYXJlQXNjZW5kaW5nIik7X25lPVNJZX0pO2Z1bmN0aW9uIENJZSh0LGUscil7Zm9yKHZhciBuPS0xLGk9dC5jcml0ZXJpYSxhPWUuY3JpdGVyaWEscz1pLmxlbmd0aCxsPXIubGVuZ3RoOysrbjxzOyl7dmFyIHU9X25lKGlbbl0sYVtuXSk7aWYodSl7aWYobj49bClyZXR1cm4gdTt2YXIgaD1yW25dO3JldHVybiB1KihoPT0iZGVzYyI/LTE6MSl9fXJldHVybiB0LmluZGV4LWUuaW5kZXh9dmFyIExuZSxSbmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtEbmUoKTtvKENJZSwiY29tcGFyZU11bHRpcGxlIik7TG5lPUNJZX0pO2Z1bmN0aW9uIEFJZSh0LGUscil7ZS5sZW5ndGg/ZT1CcyhlLGZ1bmN0aW9uKGEpe3JldHVybiBQdChhKT9mdW5jdGlvbihzKXtyZXR1cm4gZWYocyxhLmxlbmd0aD09PTE/YVswXTphKX06YX0pOmU9W3RhXTt2YXIgbj0tMTtlPUJzKGUsQm8obW4pKTt2YXIgaT1yayh0LGZ1bmN0aW9uKGEscyxsKXt2YXIgdT1CcyhlLGZ1bmN0aW9uKGgpe3JldHVybiBoKGEpfSk7cmV0dXJue2NyaXRlcmlhOnUsaW5kZXg6KytuLHZhbHVlOmF9fSk7cmV0dXJuIENuZShpLGZ1bmN0aW9uKGEscyl7cmV0dXJuIExuZShhLHMscil9KX12YXIgTm5lLE1uZT1OKCgpPT57InVzZSBzdHJpY3QiO3FkKCk7TzIoKTtvcygpO2RSKCk7QW5lKCk7QmQoKTtSbmUoKTtMdSgpO1duKCk7byhBSWUsImJhc2VPcmRlckJ5Iik7Tm5lPUFJZX0pO3ZhciBfSWUsSW5lLE9uZT1OKCgpPT57InVzZSBzdHJpY3QiO2NSKCk7X0llPWp3KCJsZW5ndGgiKSxJbmU9X0llfSk7ZnVuY3Rpb24gekllKHQpe2Zvcih2YXIgZT1QbmUubGFzdEluZGV4PTA7UG5lLnRlc3QodCk7KSsrZTtyZXR1cm4gZX12YXIgQm5lLERJZSxMSWUsUkllLE5JZSxNSWUsSUllLHdSLGtSLE9JZSxGbmUsJG5lLHpuZSxQSWUsR25lLFZuZSxCSWUsRkllLCRJZSxQbmUsVW5lLEhuZT1OKCgpPT57InVzZSBzdHJpY3QiO0JuZT0iXFx1ZDgwMC1cXHVkZmZmIixESWU9IlxcdTAzMDAtXFx1MDM2ZiIsTEllPSJcXHVmZTIwLVxcdWZlMmYiLFJJZT0iXFx1MjBkMC1cXHUyMGZmIixOSWU9REllK0xJZStSSWUsTUllPSJcXHVmZTBlXFx1ZmUwZiIsSUllPSJbIitCbmUrIl0iLHdSPSJbIitOSWUrIl0iLGtSPSJcXHVkODNjW1xcdWRmZmItXFx1ZGZmZl0iLE9JZT0iKD86Iit3UisifCIra1IrIikiLEZuZT0iW14iK0JuZSsiXSIsJG5lPSIoPzpcXHVkODNjW1xcdWRkZTYtXFx1ZGRmZl0pezJ9Iix6bmU9IltcXHVkODAwLVxcdWRiZmZdW1xcdWRjMDAtXFx1ZGZmZl0iLFBJZT0iXFx1MjAwZCIsR25lPU9JZSsiPyIsVm5lPSJbIitNSWUrIl0/IixCSWU9Iig/OiIrUEllKyIoPzoiK1tGbmUsJG5lLHpuZV0uam9pbigifCIpKyIpIitWbmUrR25lKyIpKiIsRkllPVZuZStHbmUrQkllLCRJZT0iKD86IitbRm5lK3dSKyI/Iix3UiwkbmUsem5lLElJZV0uam9pbigifCIpKyIpIixQbmU9UmVnRXhwKGtSKyIoPz0iK2tSKyIpfCIrJEllK0ZJZSwiZyIpO28oekllLCJ1bmljb2RlU2l6ZSIpO1VuZT16SWV9KTtmdW5jdGlvbiBHSWUodCl7cmV0dXJuIHR0ZSh0KT9VbmUodCk6SW5lKHQpfXZhciBXbmUscW5lPU4oKCk9PnsidXNlIHN0cmljdCI7T25lKCk7cnRlKCk7SG5lKCk7byhHSWUsInN0cmluZ1NpemUiKTtXbmU9R0llfSk7ZnVuY3Rpb24gVkllKHQsZSl7cmV0dXJuIGxrKHQsZSxmdW5jdGlvbihyLG4pe3JldHVybiBYdyh0LG4pfSl9dmFyIFluZSxYbmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtUUigpO2xSKCk7byhWSWUsImJhc2VQaWNrIik7WW5lPVZJZX0pO3ZhciBVSWUsUWQsam5lPU4oKCk9PnsidXNlIHN0cmljdCI7WG5lKCk7ZXRlKCk7VUllPUplZShmdW5jdGlvbih0LGUpe3JldHVybiB0PT1udWxsP3t9OlluZSh0LGUpfSksUWQ9VUllfSk7ZnVuY3Rpb24gcUllKHQsZSxyLG4pe2Zvcih2YXIgaT0tMSxhPVdJZShISWUoKGUtdCkvKHJ8fDEpKSwwKSxzPUFycmF5KGEpO2EtLTspc1tuP2E6KytpXT10LHQrPXI7cmV0dXJuIHN9dmFyIEhJZSxXSWUsS25lLFFuZT1OKCgpPT57InVzZSBzdHJpY3QiO0hJZT1NYXRoLmNlaWwsV0llPU1hdGgubWF4O28ocUllLCJiYXNlUmFuZ2UiKTtLbmU9cUllfSk7ZnVuY3Rpb24gWUllKHQpe3JldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIG4mJnR5cGVvZiBuIT0ibnVtYmVyIiYmaW8oZSxyLG4pJiYocj1uPXZvaWQgMCksZT1fbShlKSxyPT09dm9pZCAwPyhyPWUsZT0wKTpyPV9tKHIpLG49bj09PXZvaWQgMD9lPHI/MTotMTpfbShuKSxLbmUoZSxyLG4sdCl9fXZhciBabmUsSm5lPU4oKCk9PnsidXNlIHN0cmljdCI7UW5lKCk7JGQoKTskTCgpO28oWUllLCJjcmVhdGVSYW5nZSIpO1puZT1ZSWV9KTt2YXIgWEllLEhvLGVpZT1OKCgpPT57InVzZSBzdHJpY3QiO0puZSgpO1hJZT1abmUoKSxIbz1YSWV9KTtmdW5jdGlvbiBqSWUodCxlLHIsbixpKXtyZXR1cm4gaSh0LGZ1bmN0aW9uKGEscyxsKXtyPW4/KG49ITEsYSk6ZShyLGEscyxsKX0pLHJ9dmFyIHRpZSxyaWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKGpJZSwiYmFzZVJlZHVjZSIpO3RpZT1qSWV9KTtmdW5jdGlvbiBLSWUodCxlLHIpe3ZhciBuPVB0KHQpP250ZTp0aWUsaT1hcmd1bWVudHMubGVuZ3RoPDM7cmV0dXJuIG4odCxtbihlLDQpLHIsaSxGcyl9dmFyIFhyLEVSPU4oKCk9PnsidXNlIHN0cmljdCI7aXRlKCk7cmYoKTtvcygpO3JpZSgpO1duKCk7byhLSWUsInJlZHVjZSIpO1hyPUtJZX0pO2Z1bmN0aW9uIFFJZSh0LGUpe3ZhciByPVB0KHQpP1BtOnRrO3JldHVybiByKHQsVG5lKG1uKGUsMykpKX12YXIgc2YsbmllPU4oKCk9PnsidXNlIHN0cmljdCI7QXcoKTtoUigpO29zKCk7V24oKTt3bmUoKTtvKFFJZSwicmVqZWN0Iik7c2Y9UUllfSk7ZnVuY3Rpb24gZU9lKHQpe2lmKHQ9PW51bGwpcmV0dXJuIDA7aWYoZmkodCkpcmV0dXJuIFRpKHQpP1duZSh0KTp0Lmxlbmd0aDt2YXIgZT1sbyh0KTtyZXR1cm4gZT09WkllfHxlPT1KSWU/dC5zaXplOlJtKHQpLmxlbmd0aH12YXIgWkllLEpJZSxTUixpaWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtUdygpO1hkKCk7UG8oKTtuaygpO3FuZSgpO1pJZT0iW29iamVjdCBNYXBdIixKSWU9IltvYmplY3QgU2V0XSI7byhlT2UsInNpemUiKTtTUj1lT2V9KTtmdW5jdGlvbiB0T2UodCxlKXt2YXIgcjtyZXR1cm4gRnModCxmdW5jdGlvbihuLGksYSl7cmV0dXJuIHI9ZShuLGksYSksIXJ9KSwhIXJ9dmFyIGFpZSxzaWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtyZigpO28odE9lLCJiYXNlU29tZSIpO2FpZT10T2V9KTtmdW5jdGlvbiByT2UodCxlLHIpe3ZhciBuPVB0KHQpPyR3OmFpZTtyZXR1cm4gciYmaW8odCxlLHIpJiYoZT12b2lkIDApLG4odCxtbihlLDMpKX12YXIgQjIsb2llPU4oKCk9PnsidXNlIHN0cmljdCI7dFIoKTtvcygpO3NpZSgpO1duKCk7JGQoKTtvKHJPZSwic29tZSIpO0IyPXJPZX0pO3ZhciBuT2UsX2MsbGllPU4oKCk9PnsidXNlIHN0cmljdCI7T20oKTtNbmUoKTttbSgpOyRkKCk7bk9lPXljKGZ1bmN0aW9uKHQsZSl7aWYodD09bnVsbClyZXR1cm5bXTt2YXIgcj1lLmxlbmd0aDtyZXR1cm4gcj4xJiZpbyh0LGVbMF0sZVsxXSk/ZT1bXTpyPjImJmlvKGVbMF0sZVsxXSxlWzJdKSYmKGU9W2VbMF1dKSxObmUodCxDYyhlLDEpLFtdKX0pLF9jPW5PZX0pO3ZhciBpT2UsYU9lLGNpZSx1aWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtRTCgpO3pMKCk7VncoKTtpT2U9MS8wLGFPZT10ZiYmMS96bShuZXcgdGYoWywtMF0pKVsxXT09aU9lP2Z1bmN0aW9uKHQpe3JldHVybiBuZXcgdGYodCl9OmFpLGNpZT1hT2V9KTtmdW5jdGlvbiBvT2UodCxlLHIpe3ZhciBuPS0xLGk9YncsYT10Lmxlbmd0aCxzPSEwLGw9W10sdT1sO2lmKHIpcz0hMSxpPVp3O2Vsc2UgaWYoYT49c09lKXt2YXIgaD1lP251bGw6Y2llKHQpO2lmKGgpcmV0dXJuIHptKGgpO3M9ITEsaT0kbSx1PW5ldyBGbX1lbHNlIHU9ZT9bXTpsO2U6Zm9yKDsrK248YTspe3ZhciBmPXRbbl0sZD1lP2UoZik6ZjtpZihmPXJ8fGYhPT0wP2Y6MCxzJiZkPT09ZCl7Zm9yKHZhciBwPXUubGVuZ3RoO3AtLTspaWYodVtwXT09PWQpY29udGludWUgZTtlJiZ1LnB1c2goZCksbC5wdXNoKGYpfWVsc2UgaSh1LGQscil8fCh1IT09bCYmdS5wdXNoKGQpLGwucHVzaChmKSl9cmV0dXJuIGx9dmFyIHNPZSxXbSxjaz1OKCgpPT57InVzZSBzdHJpY3QiO0Z3KCk7VUwoKTt1UigpO3p3KCk7dWllKCk7VncoKTtzT2U9MjAwO28ob09lLCJiYXNlVW5pcSIpO1dtPW9PZX0pO3ZhciBsT2UsQ1IsaGllPU4oKCk9PnsidXNlIHN0cmljdCI7T20oKTttbSgpO2NrKCk7eFQoKTtsT2U9eWMoZnVuY3Rpb24odCl7cmV0dXJuIFdtKENjKHQsMSxQZCwhMCkpfSksQ1I9bE9lfSk7ZnVuY3Rpb24gY09lKHQpe3JldHVybiB0JiZ0Lmxlbmd0aD9XbSh0KTpbXX12YXIgcW0sZmllPU4oKCk9PnsidXNlIHN0cmljdCI7Y2soKTtvKGNPZSwidW5pcSIpO3FtPWNPZX0pO2Z1bmN0aW9uIHVPZSh0LGUpe3JldHVybiB0JiZ0Lmxlbmd0aD9XbSh0LG1uKGUsMikpOltdfXZhciBkaWUscGllPU4oKCk9PnsidXNlIHN0cmljdCI7b3MoKTtjaygpO28odU9lLCJ1bmlxQnkiKTtkaWU9dU9lfSk7ZnVuY3Rpb24gZk9lKHQpe3ZhciBlPSsraE9lO3JldHVybiBrdyh0KStlfXZhciBoT2UsWmQsbWllPU4oKCk9PnsidXNlIHN0cmljdCI7SEwoKTtoT2U9MDtvKGZPZSwidW5pcXVlSWQiKTtaZD1mT2V9KTtmdW5jdGlvbiBkT2UodCxlLHIpe2Zvcih2YXIgbj0tMSxpPXQubGVuZ3RoLGE9ZS5sZW5ndGgscz17fTsrK248aTspe3ZhciBsPW48YT9lW25dOnZvaWQgMDtyKHMsdFtuXSxsKX1yZXR1cm4gc312YXIgZ2llLHlpZT1OKCgpPT57InVzZSBzdHJpY3QiO28oZE9lLCJiYXNlWmlwT2JqZWN0Iik7Z2llPWRPZX0pO2Z1bmN0aW9uIHBPZSh0LGUpe3JldHVybiBnaWUodHx8W10sZXx8W10sZ2MpfXZhciB1ayx2aWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtwbSgpO3lpZSgpO28ocE9lLCJ6aXBPYmplY3QiKTt1az1wT2V9KTt2YXIgcXQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtWZWUoKTtKTCgpO3F0ZSgpO1l0ZSgpO1Q5KCk7T3JlKCk7RnJlKCk7enJlKCk7R3JlKCk7VnJlKCk7WXJlKCk7ZlIoKTtacmUoKTtlbmUoKTtwUigpO1N3KCk7ZWsoKTt0bmUoKTtybmUoKTtubmUoKTtsbmUoKTtMdSgpO2huZSgpO2ZuZSgpO1duKCk7YWsoKTtuMigpO25vKCk7Z25lKCk7bmsoKTt5bmUoKTtFYygpOyRyZSgpO1VtKCk7dm5lKCk7eG5lKCk7RTkoKTtiUigpO2JuZSgpO3pMKCk7TXJlKCk7am5lKCk7U25lKCk7ZWllKCk7RVIoKTtuaWUoKTtpaWUoKTtvaWUoKTtsaWUoKTtoaWUoKTtmaWUoKTttaWUoKTt2UigpO3ZpZSgpO30pO2Z1bmN0aW9uIGJpZSh0LGUpe3RbZV0/dFtlXSsrOnRbZV09MX1mdW5jdGlvbiBUaWUodCxlKXstLXRbZV18fGRlbGV0ZSB0W2VdfWZ1bmN0aW9uIEYyKHQsZSxyLG4pe3ZhciBpPSIiK2UsYT0iIityO2lmKCF0JiZpPmEpe3ZhciBzPWk7aT1hLGE9c31yZXR1cm4gaSt4aWUrYSt4aWUrKG1yKG4pP21PZTpuKX1mdW5jdGlvbiBnT2UodCxlLHIsbil7dmFyIGk9IiIrZSxhPSIiK3I7aWYoIXQmJmk+YSl7dmFyIHM9aTtpPWEsYT1zfXZhciBsPXt2OmksdzphfTtyZXR1cm4gbiYmKGwubmFtZT1uKSxsfWZ1bmN0aW9uIEFSKHQsZSl7cmV0dXJuIEYyKHQsZS52LGUudyxlLm5hbWUpfXZhciBtT2UsSmQseGllLHNuLGhrPU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTttT2U9IlwwIixKZD0iXDAiLHhpZT0iASIsc249Y2xhc3N7c3RhdGlje28odGhpcywiR3JhcGgiKX1jb25zdHJ1Y3RvcihlPXt9KXt0aGlzLl9pc0RpcmVjdGVkPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJkaXJlY3RlZCIpP2UuZGlyZWN0ZWQ6ITAsdGhpcy5faXNNdWx0aWdyYXBoPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJtdWx0aWdyYXBoIik/ZS5tdWx0aWdyYXBoOiExLHRoaXMuX2lzQ29tcG91bmQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsImNvbXBvdW5kIik/ZS5jb21wb3VuZDohMSx0aGlzLl9sYWJlbD12b2lkIDAsdGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuPU5zKHZvaWQgMCksdGhpcy5fZGVmYXVsdEVkZ2VMYWJlbEZuPU5zKHZvaWQgMCksdGhpcy5fbm9kZXM9e30sdGhpcy5faXNDb21wb3VuZCYmKHRoaXMuX3BhcmVudD17fSx0aGlzLl9jaGlsZHJlbj17fSx0aGlzLl9jaGlsZHJlbltKZF09e30pLHRoaXMuX2luPXt9LHRoaXMuX3ByZWRzPXt9LHRoaXMuX291dD17fSx0aGlzLl9zdWNzPXt9LHRoaXMuX2VkZ2VPYmpzPXt9LHRoaXMuX2VkZ2VMYWJlbHM9e319aXNEaXJlY3RlZCgpe3JldHVybiB0aGlzLl9pc0RpcmVjdGVkfWlzTXVsdGlncmFwaCgpe3JldHVybiB0aGlzLl9pc011bHRpZ3JhcGh9aXNDb21wb3VuZCgpe3JldHVybiB0aGlzLl9pc0NvbXBvdW5kfXNldEdyYXBoKGUpe3JldHVybiB0aGlzLl9sYWJlbD1lLHRoaXN9Z3JhcGgoKXtyZXR1cm4gdGhpcy5fbGFiZWx9c2V0RGVmYXVsdE5vZGVMYWJlbChlKXtyZXR1cm4gQWkoZSl8fChlPU5zKGUpKSx0aGlzLl9kZWZhdWx0Tm9kZUxhYmVsRm49ZSx0aGlzfW5vZGVDb3VudCgpe3JldHVybiB0aGlzLl9ub2RlQ291bnR9bm9kZXMoKXtyZXR1cm4genIodGhpcy5fbm9kZXMpfXNvdXJjZXMoKXt2YXIgZT10aGlzO3JldHVybiBZcih0aGlzLm5vZGVzKCksZnVuY3Rpb24ocil7cmV0dXJuIGhyKGUuX2luW3JdKX0pfXNpbmtzKCl7dmFyIGU9dGhpcztyZXR1cm4gWXIodGhpcy5ub2RlcygpLGZ1bmN0aW9uKHIpe3JldHVybiBocihlLl9vdXRbcl0pfSl9c2V0Tm9kZXMoZSxyKXt2YXIgbj1hcmd1bWVudHMsaT10aGlzO3JldHVybiBBZShlLGZ1bmN0aW9uKGEpe24ubGVuZ3RoPjE/aS5zZXROb2RlKGEscik6aS5zZXROb2RlKGEpfSksdGhpc31zZXROb2RlKGUscil7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLl9ub2RlcyxlKT8oYXJndW1lbnRzLmxlbmd0aD4xJiYodGhpcy5fbm9kZXNbZV09ciksdGhpcyk6KHRoaXMuX25vZGVzW2VdPWFyZ3VtZW50cy5sZW5ndGg+MT9yOnRoaXMuX2RlZmF1bHROb2RlTGFiZWxGbihlKSx0aGlzLl9pc0NvbXBvdW5kJiYodGhpcy5fcGFyZW50W2VdPUpkLHRoaXMuX2NoaWxkcmVuW2VdPXt9LHRoaXMuX2NoaWxkcmVuW0pkXVtlXT0hMCksdGhpcy5faW5bZV09e30sdGhpcy5fcHJlZHNbZV09e30sdGhpcy5fb3V0W2VdPXt9LHRoaXMuX3N1Y3NbZV09e30sKyt0aGlzLl9ub2RlQ291bnQsdGhpcyl9bm9kZShlKXtyZXR1cm4gdGhpcy5fbm9kZXNbZV19aGFzTm9kZShlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuX25vZGVzLGUpfXJlbW92ZU5vZGUoZSl7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuX25vZGVzLGUpKXt2YXIgcj1vKG49PnRoaXMucmVtb3ZlRWRnZSh0aGlzLl9lZGdlT2Jqc1tuXSksInJlbW92ZUVkZ2UiKTtkZWxldGUgdGhpcy5fbm9kZXNbZV0sdGhpcy5faXNDb21wb3VuZCYmKHRoaXMuX3JlbW92ZUZyb21QYXJlbnRzQ2hpbGRMaXN0KGUpLGRlbGV0ZSB0aGlzLl9wYXJlbnRbZV0sQWUodGhpcy5jaGlsZHJlbihlKSxuPT57dGhpcy5zZXRQYXJlbnQobil9KSxkZWxldGUgdGhpcy5fY2hpbGRyZW5bZV0pLEFlKHpyKHRoaXMuX2luW2VdKSxyKSxkZWxldGUgdGhpcy5faW5bZV0sZGVsZXRlIHRoaXMuX3ByZWRzW2VdLEFlKHpyKHRoaXMuX291dFtlXSksciksZGVsZXRlIHRoaXMuX291dFtlXSxkZWxldGUgdGhpcy5fc3Vjc1tlXSwtLXRoaXMuX25vZGVDb3VudH1yZXR1cm4gdGhpc31zZXRQYXJlbnQoZSxyKXtpZighdGhpcy5faXNDb21wb3VuZCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXQgcGFyZW50IGluIGEgbm9uLWNvbXBvdW5kIGdyYXBoIik7aWYobXIocikpcj1KZDtlbHNle3IrPSIiO2Zvcih2YXIgbj1yOyFtcihuKTtuPXRoaXMucGFyZW50KG4pKWlmKG49PT1lKXRocm93IG5ldyBFcnJvcigiU2V0dGluZyAiK3IrIiBhcyBwYXJlbnQgb2YgIitlKyIgd291bGQgY3JlYXRlIGEgY3ljbGUiKTt0aGlzLnNldE5vZGUocil9cmV0dXJuIHRoaXMuc2V0Tm9kZShlKSx0aGlzLl9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdChlKSx0aGlzLl9wYXJlbnRbZV09cix0aGlzLl9jaGlsZHJlbltyXVtlXT0hMCx0aGlzfV9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdChlKXtkZWxldGUgdGhpcy5fY2hpbGRyZW5bdGhpcy5fcGFyZW50W2VdXVtlXX1wYXJlbnQoZSl7aWYodGhpcy5faXNDb21wb3VuZCl7dmFyIHI9dGhpcy5fcGFyZW50W2VdO2lmKHIhPT1KZClyZXR1cm4gcn19Y2hpbGRyZW4oZSl7aWYobXIoZSkmJihlPUpkKSx0aGlzLl9pc0NvbXBvdW5kKXt2YXIgcj10aGlzLl9jaGlsZHJlbltlXTtpZihyKXJldHVybiB6cihyKX1lbHNle2lmKGU9PT1KZClyZXR1cm4gdGhpcy5ub2RlcygpO2lmKHRoaXMuaGFzTm9kZShlKSlyZXR1cm5bXX19cHJlZGVjZXNzb3JzKGUpe3ZhciByPXRoaXMuX3ByZWRzW2VdO2lmKHIpcmV0dXJuIHpyKHIpfXN1Y2Nlc3NvcnMoZSl7dmFyIHI9dGhpcy5fc3Vjc1tlXTtpZihyKXJldHVybiB6cihyKX1uZWlnaGJvcnMoZSl7dmFyIHI9dGhpcy5wcmVkZWNlc3NvcnMoZSk7aWYocilyZXR1cm4gQ1Iocix0aGlzLnN1Y2Nlc3NvcnMoZSkpfWlzTGVhZihlKXt2YXIgcjtyZXR1cm4gdGhpcy5pc0RpcmVjdGVkKCk/cj10aGlzLnN1Y2Nlc3NvcnMoZSk6cj10aGlzLm5laWdoYm9ycyhlKSxyLmxlbmd0aD09PTB9ZmlsdGVyTm9kZXMoZSl7dmFyIHI9bmV3IHRoaXMuY29uc3RydWN0b3Ioe2RpcmVjdGVkOnRoaXMuX2lzRGlyZWN0ZWQsbXVsdGlncmFwaDp0aGlzLl9pc011bHRpZ3JhcGgsY29tcG91bmQ6dGhpcy5faXNDb21wb3VuZH0pO3Iuc2V0R3JhcGgodGhpcy5ncmFwaCgpKTt2YXIgbj10aGlzO0FlKHRoaXMuX25vZGVzLGZ1bmN0aW9uKHMsbCl7ZShsKSYmci5zZXROb2RlKGwscyl9KSxBZSh0aGlzLl9lZGdlT2JqcyxmdW5jdGlvbihzKXtyLmhhc05vZGUocy52KSYmci5oYXNOb2RlKHMudykmJnIuc2V0RWRnZShzLG4uZWRnZShzKSl9KTt2YXIgaT17fTtmdW5jdGlvbiBhKHMpe3ZhciBsPW4ucGFyZW50KHMpO3JldHVybiBsPT09dm9pZCAwfHxyLmhhc05vZGUobCk/KGlbc109bCxsKTpsIGluIGk/aVtsXTphKGwpfXJldHVybiBvKGEsImZpbmRQYXJlbnQiKSx0aGlzLl9pc0NvbXBvdW5kJiZBZShyLm5vZGVzKCksZnVuY3Rpb24ocyl7ci5zZXRQYXJlbnQocyxhKHMpKX0pLHJ9c2V0RGVmYXVsdEVkZ2VMYWJlbChlKXtyZXR1cm4gQWkoZSl8fChlPU5zKGUpKSx0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm49ZSx0aGlzfWVkZ2VDb3VudCgpe3JldHVybiB0aGlzLl9lZGdlQ291bnR9ZWRnZXMoKXtyZXR1cm4gYnIodGhpcy5fZWRnZU9ianMpfXNldFBhdGgoZSxyKXt2YXIgbj10aGlzLGk9YXJndW1lbnRzO3JldHVybiBYcihlLGZ1bmN0aW9uKGEscyl7cmV0dXJuIGkubGVuZ3RoPjE/bi5zZXRFZGdlKGEscyxyKTpuLnNldEVkZ2UoYSxzKSxzfSksdGhpc31zZXRFZGdlKCl7dmFyIGUscixuLGksYT0hMSxzPWFyZ3VtZW50c1swXTt0eXBlb2Ygcz09Im9iamVjdCImJnMhPT1udWxsJiYidiJpbiBzPyhlPXMudixyPXMudyxuPXMubmFtZSxhcmd1bWVudHMubGVuZ3RoPT09MiYmKGk9YXJndW1lbnRzWzFdLGE9ITApKTooZT1zLHI9YXJndW1lbnRzWzFdLG49YXJndW1lbnRzWzNdLGFyZ3VtZW50cy5sZW5ndGg+MiYmKGk9YXJndW1lbnRzWzJdLGE9ITApKSxlPSIiK2Uscj0iIityLG1yKG4pfHwobj0iIituKTt2YXIgbD1GMih0aGlzLl9pc0RpcmVjdGVkLGUscixuKTtpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5fZWRnZUxhYmVscyxsKSlyZXR1cm4gYSYmKHRoaXMuX2VkZ2VMYWJlbHNbbF09aSksdGhpcztpZighbXIobikmJiF0aGlzLl9pc011bHRpZ3JhcGgpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2V0IGEgbmFtZWQgZWRnZSB3aGVuIGlzTXVsdGlncmFwaCA9IGZhbHNlIik7dGhpcy5zZXROb2RlKGUpLHRoaXMuc2V0Tm9kZShyKSx0aGlzLl9lZGdlTGFiZWxzW2xdPWE/aTp0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm4oZSxyLG4pO3ZhciB1PWdPZSh0aGlzLl9pc0RpcmVjdGVkLGUscixuKTtyZXR1cm4gZT11LnYscj11LncsT2JqZWN0LmZyZWV6ZSh1KSx0aGlzLl9lZGdlT2Jqc1tsXT11LGJpZSh0aGlzLl9wcmVkc1tyXSxlKSxiaWUodGhpcy5fc3Vjc1tlXSxyKSx0aGlzLl9pbltyXVtsXT11LHRoaXMuX291dFtlXVtsXT11LHRoaXMuX2VkZ2VDb3VudCsrLHRoaXN9ZWRnZShlLHIsbil7dmFyIGk9YXJndW1lbnRzLmxlbmd0aD09PTE/QVIodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOkYyKHRoaXMuX2lzRGlyZWN0ZWQsZSxyLG4pO3JldHVybiB0aGlzLl9lZGdlTGFiZWxzW2ldfWhhc0VkZ2UoZSxyLG4pe3ZhciBpPWFyZ3VtZW50cy5sZW5ndGg9PT0xP0FSKHRoaXMuX2lzRGlyZWN0ZWQsYXJndW1lbnRzWzBdKTpGMih0aGlzLl9pc0RpcmVjdGVkLGUscixuKTtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuX2VkZ2VMYWJlbHMsaSl9cmVtb3ZlRWRnZShlLHIsbil7dmFyIGk9YXJndW1lbnRzLmxlbmd0aD09PTE/QVIodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOkYyKHRoaXMuX2lzRGlyZWN0ZWQsZSxyLG4pLGE9dGhpcy5fZWRnZU9ianNbaV07cmV0dXJuIGEmJihlPWEudixyPWEudyxkZWxldGUgdGhpcy5fZWRnZUxhYmVsc1tpXSxkZWxldGUgdGhpcy5fZWRnZU9ianNbaV0sVGllKHRoaXMuX3ByZWRzW3JdLGUpLFRpZSh0aGlzLl9zdWNzW2VdLHIpLGRlbGV0ZSB0aGlzLl9pbltyXVtpXSxkZWxldGUgdGhpcy5fb3V0W2VdW2ldLHRoaXMuX2VkZ2VDb3VudC0tKSx0aGlzfWluRWRnZXMoZSxyKXt2YXIgbj10aGlzLl9pbltlXTtpZihuKXt2YXIgaT1icihuKTtyZXR1cm4gcj9ZcihpLGZ1bmN0aW9uKGEpe3JldHVybiBhLnY9PT1yfSk6aX19b3V0RWRnZXMoZSxyKXt2YXIgbj10aGlzLl9vdXRbZV07aWYobil7dmFyIGk9YnIobik7cmV0dXJuIHI/WXIoaSxmdW5jdGlvbihhKXtyZXR1cm4gYS53PT09cn0pOml9fW5vZGVFZGdlcyhlLHIpe3ZhciBuPXRoaXMuaW5FZGdlcyhlLHIpO2lmKG4pcmV0dXJuIG4uY29uY2F0KHRoaXMub3V0RWRnZXMoZSxyKSl9fTtzbi5wcm90b3R5cGUuX25vZGVDb3VudD0wO3NuLnByb3RvdHlwZS5fZWRnZUNvdW50PTA7byhiaWUsImluY3JlbWVudE9ySW5pdEVudHJ5Iik7byhUaWUsImRlY3JlbWVudE9yUmVtb3ZlRW50cnkiKTtvKEYyLCJlZGdlQXJnc1RvSWQiKTtvKGdPZSwiZWRnZUFyZ3NUb09iaiIpO28oQVIsImVkZ2VPYmpUb0lkIil9KTt2YXIgV289TigoKT0+eyJ1c2Ugc3RyaWN0IjtoaygpfSk7ZnVuY3Rpb24gd2llKHQpe3QuX3ByZXYuX25leHQ9dC5fbmV4dCx0Ll9uZXh0Ll9wcmV2PXQuX3ByZXYsZGVsZXRlIHQuX25leHQsZGVsZXRlIHQuX3ByZXZ9ZnVuY3Rpb24geU9lKHQsZSl7aWYodCE9PSJfbmV4dCImJnQhPT0iX3ByZXYiKXJldHVybiBlfXZhciBkayxraWU9TigoKT0+eyJ1c2Ugc3RyaWN0Ijtkaz1jbGFzc3tzdGF0aWN7byh0aGlzLCJMaXN0Iil9Y29uc3RydWN0b3IoKXt2YXIgZT17fTtlLl9uZXh0PWUuX3ByZXY9ZSx0aGlzLl9zZW50aW5lbD1lfWRlcXVldWUoKXt2YXIgZT10aGlzLl9zZW50aW5lbCxyPWUuX3ByZXY7aWYociE9PWUpcmV0dXJuIHdpZShyKSxyfWVucXVldWUoZSl7dmFyIHI9dGhpcy5fc2VudGluZWw7ZS5fcHJldiYmZS5fbmV4dCYmd2llKGUpLGUuX25leHQ9ci5fbmV4dCxyLl9uZXh0Ll9wcmV2PWUsci5fbmV4dD1lLGUuX3ByZXY9cn10b1N0cmluZygpe2Zvcih2YXIgZT1bXSxyPXRoaXMuX3NlbnRpbmVsLG49ci5fcHJldjtuIT09cjspZS5wdXNoKEpTT04uc3RyaW5naWZ5KG4seU9lKSksbj1uLl9wcmV2O3JldHVybiJbIitlLmpvaW4oIiwgIikrIl0ifX07byh3aWUsInVubGluayIpO28oeU9lLCJmaWx0ZXJPdXRMaW5rcyIpfSk7ZnVuY3Rpb24gRWllKHQsZSl7aWYodC5ub2RlQ291bnQoKTw9MSlyZXR1cm5bXTt2YXIgcj1iT2UodCxlfHx2T2UpLG49eE9lKHIuZ3JhcGgsci5idWNrZXRzLHIuemVyb0lkeCk7cmV0dXJuIHFyKEplKG4sZnVuY3Rpb24oaSl7cmV0dXJuIHQub3V0RWRnZXMoaS52LGkudyl9KSl9ZnVuY3Rpb24geE9lKHQsZSxyKXtmb3IodmFyIG49W10saT1lW2UubGVuZ3RoLTFdLGE9ZVswXSxzO3Qubm9kZUNvdW50KCk7KXtmb3IoO3M9YS5kZXF1ZXVlKCk7KV9SKHQsZSxyLHMpO2Zvcig7cz1pLmRlcXVldWUoKTspX1IodCxlLHIscyk7aWYodC5ub2RlQ291bnQoKSl7Zm9yKHZhciBsPWUubGVuZ3RoLTI7bD4wOy0tbClpZihzPWVbbF0uZGVxdWV1ZSgpLHMpe249bi5jb25jYXQoX1IodCxlLHIscywhMCkpO2JyZWFrfX19cmV0dXJuIG59ZnVuY3Rpb24gX1IodCxlLHIsbixpKXt2YXIgYT1pP1tdOnZvaWQgMDtyZXR1cm4gQWUodC5pbkVkZ2VzKG4udiksZnVuY3Rpb24ocyl7dmFyIGw9dC5lZGdlKHMpLHU9dC5ub2RlKHMudik7aSYmYS5wdXNoKHt2OnMudix3OnMud30pLHUub3V0LT1sLERSKGUscix1KX0pLEFlKHQub3V0RWRnZXMobi52KSxmdW5jdGlvbihzKXt2YXIgbD10LmVkZ2UocyksdT1zLncsaD10Lm5vZGUodSk7aC5pbi09bCxEUihlLHIsaCl9KSx0LnJlbW92ZU5vZGUobi52KSxhfWZ1bmN0aW9uIGJPZSh0LGUpe3ZhciByPW5ldyBzbixuPTAsaT0wO0FlKHQubm9kZXMoKSxmdW5jdGlvbihsKXtyLnNldE5vZGUobCx7djpsLGluOjAsb3V0OjB9KX0pLEFlKHQuZWRnZXMoKSxmdW5jdGlvbihsKXt2YXIgdT1yLmVkZ2UobC52LGwudyl8fDAsaD1lKGwpLGY9dStoO3Iuc2V0RWRnZShsLnYsbC53LGYpLGk9TWF0aC5tYXgoaSxyLm5vZGUobC52KS5vdXQrPWgpLG49TWF0aC5tYXgobixyLm5vZGUobC53KS5pbis9aCl9KTt2YXIgYT1IbyhpK24rMykubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBka30pLHM9bisxO3JldHVybiBBZShyLm5vZGVzKCksZnVuY3Rpb24obCl7RFIoYSxzLHIubm9kZShsKSl9KSx7Z3JhcGg6cixidWNrZXRzOmEsemVyb0lkeDpzfX1mdW5jdGlvbiBEUih0LGUscil7ci5vdXQ/ci5pbj90W3Iub3V0LXIuaW4rZV0uZW5xdWV1ZShyKTp0W3QubGVuZ3RoLTFdLmVucXVldWUocik6dFswXS5lbnF1ZXVlKHIpfXZhciB2T2UsU2llPU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTtXbygpO2tpZSgpO3ZPZT1OcygxKTtvKEVpZSwiZ3JlZWR5RkFTIik7byh4T2UsImRvR3JlZWR5RkFTIik7byhfUiwicmVtb3ZlTm9kZSIpO28oYk9lLCJidWlsZFN0YXRlIik7byhEUiwiYXNzaWduQnVja2V0Iil9KTtmdW5jdGlvbiBDaWUodCl7dmFyIGU9dC5ncmFwaCgpLmFjeWNsaWNlcj09PSJncmVlZHkiP0VpZSh0LHIodCkpOlRPZSh0KTtBZShlLGZ1bmN0aW9uKG4pe3ZhciBpPXQuZWRnZShuKTt0LnJlbW92ZUVkZ2UobiksaS5mb3J3YXJkTmFtZT1uLm5hbWUsaS5yZXZlcnNlZD0hMCx0LnNldEVkZ2Uobi53LG4udixpLFpkKCJyZXYiKSl9KTtmdW5jdGlvbiByKG4pe3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gbi5lZGdlKGkpLndlaWdodH19byhyLCJ3ZWlnaHRGbiIpfWZ1bmN0aW9uIFRPZSh0KXt2YXIgZT1bXSxyPXt9LG49e307ZnVuY3Rpb24gaShhKXtPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixhKXx8KG5bYV09ITAsclthXT0hMCxBZSh0Lm91dEVkZ2VzKGEpLGZ1bmN0aW9uKHMpe09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLHMudyk/ZS5wdXNoKHMpOmkocy53KX0pLGRlbGV0ZSByW2FdKX1yZXR1cm4gbyhpLCJkZnMiKSxBZSh0Lm5vZGVzKCksaSksZX1mdW5jdGlvbiBBaWUodCl7QWUodC5lZGdlcygpLGZ1bmN0aW9uKGUpe3ZhciByPXQuZWRnZShlKTtpZihyLnJldmVyc2VkKXt0LnJlbW92ZUVkZ2UoZSk7dmFyIG49ci5mb3J3YXJkTmFtZTtkZWxldGUgci5yZXZlcnNlZCxkZWxldGUgci5mb3J3YXJkTmFtZSx0LnNldEVkZ2UoZS53LGUudixyLG4pfX0pfXZhciBMUj1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7U2llKCk7byhDaWUsInJ1biIpO28oVE9lLCJkZnNGQVMiKTtvKEFpZSwidW5kbyIpfSk7ZnVuY3Rpb24gRGModCxlLHIsbil7dmFyIGk7ZG8gaT1aZChuKTt3aGlsZSh0Lmhhc05vZGUoaSkpO3JldHVybiByLmR1bW15PWUsdC5zZXROb2RlKGksciksaX1mdW5jdGlvbiBEaWUodCl7dmFyIGU9bmV3IHNuKCkuc2V0R3JhcGgodC5ncmFwaCgpKTtyZXR1cm4gQWUodC5ub2RlcygpLGZ1bmN0aW9uKHIpe2Uuc2V0Tm9kZShyLHQubm9kZShyKSl9KSxBZSh0LmVkZ2VzKCksZnVuY3Rpb24ocil7dmFyIG49ZS5lZGdlKHIudixyLncpfHx7d2VpZ2h0OjAsbWlubGVuOjF9LGk9dC5lZGdlKHIpO2Uuc2V0RWRnZShyLnYsci53LHt3ZWlnaHQ6bi53ZWlnaHQraS53ZWlnaHQsbWlubGVuOk1hdGgubWF4KG4ubWlubGVuLGkubWlubGVuKX0pfSksZX1mdW5jdGlvbiBwayh0KXt2YXIgZT1uZXcgc24oe211bHRpZ3JhcGg6dC5pc011bHRpZ3JhcGgoKX0pLnNldEdyYXBoKHQuZ3JhcGgoKSk7cmV0dXJuIEFlKHQubm9kZXMoKSxmdW5jdGlvbihyKXt0LmNoaWxkcmVuKHIpLmxlbmd0aHx8ZS5zZXROb2RlKHIsdC5ub2RlKHIpKX0pLEFlKHQuZWRnZXMoKSxmdW5jdGlvbihyKXtlLnNldEVkZ2Uocix0LmVkZ2UocikpfSksZX1mdW5jdGlvbiBSUih0LGUpe3ZhciByPXQueCxuPXQueSxpPWUueC1yLGE9ZS55LW4scz10LndpZHRoLzIsbD10LmhlaWdodC8yO2lmKCFpJiYhYSl0aHJvdyBuZXcgRXJyb3IoIk5vdCBwb3NzaWJsZSB0byBmaW5kIGludGVyc2VjdGlvbiBpbnNpZGUgb2YgdGhlIHJlY3RhbmdsZSIpO3ZhciB1LGg7cmV0dXJuIE1hdGguYWJzKGEpKnM+TWF0aC5hYnMoaSkqbD8oYTwwJiYobD0tbCksdT1sKmkvYSxoPWwpOihpPDAmJihzPS1zKSx1PXMsaD1zKmEvaSkse3g6cit1LHk6bitofX1mdW5jdGlvbiBvZih0KXt2YXIgZT1KZShIbyhNUih0KSsxKSxmdW5jdGlvbigpe3JldHVybltdfSk7cmV0dXJuIEFlKHQubm9kZXMoKSxmdW5jdGlvbihyKXt2YXIgbj10Lm5vZGUociksaT1uLnJhbms7bXIoaSl8fChlW2ldW24ub3JkZXJdPXIpfSksZX1mdW5jdGlvbiBMaWUodCl7dmFyIGU9TmwoSmUodC5ub2RlcygpLGZ1bmN0aW9uKHIpe3JldHVybiB0Lm5vZGUocikucmFua30pKTtBZSh0Lm5vZGVzKCksZnVuY3Rpb24ocil7dmFyIG49dC5ub2RlKHIpO0J0KG4sInJhbmsiKSYmKG4ucmFuay09ZSl9KX1mdW5jdGlvbiBSaWUodCl7dmFyIGU9TmwoSmUodC5ub2RlcygpLGZ1bmN0aW9uKGEpe3JldHVybiB0Lm5vZGUoYSkucmFua30pKSxyPVtdO0FlKHQubm9kZXMoKSxmdW5jdGlvbihhKXt2YXIgcz10Lm5vZGUoYSkucmFuay1lO3Jbc118fChyW3NdPVtdKSxyW3NdLnB1c2goYSl9KTt2YXIgbj0wLGk9dC5ncmFwaCgpLm5vZGVSYW5rRmFjdG9yO0FlKHIsZnVuY3Rpb24oYSxzKXttcihhKSYmcyVpIT09MD8tLW46biYmQWUoYSxmdW5jdGlvbihsKXt0Lm5vZGUobCkucmFuays9bn0pfSl9ZnVuY3Rpb24gTlIodCxlLHIsbil7dmFyIGk9e3dpZHRoOjAsaGVpZ2h0OjB9O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj00JiYoaS5yYW5rPXIsaS5vcmRlcj1uKSxEYyh0LCJib3JkZXIiLGksZSl9ZnVuY3Rpb24gTVIodCl7cmV0dXJuICRzKEplKHQubm9kZXMoKSxmdW5jdGlvbihlKXt2YXIgcj10Lm5vZGUoZSkucmFuaztpZighbXIocikpcmV0dXJuIHJ9KSl9ZnVuY3Rpb24gTmllKHQsZSl7dmFyIHI9e2xoczpbXSxyaHM6W119O3JldHVybiBBZSh0LGZ1bmN0aW9uKG4pe2Uobik/ci5saHMucHVzaChuKTpyLnJocy5wdXNoKG4pfSkscn1mdW5jdGlvbiBNaWUodCxlKXt2YXIgcj1RdygpO3RyeXtyZXR1cm4gZSgpfWZpbmFsbHl7Y29uc29sZS5sb2codCsiIHRpbWU6ICIrKFF3KCktcikrIm1zIil9fWZ1bmN0aW9uIElpZSh0LGUpe3JldHVybiBlKCl9dmFyIExjPU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTtXbygpO28oRGMsImFkZER1bW15Tm9kZSIpO28oRGllLCJzaW1wbGlmeSIpO28ocGssImFzTm9uQ29tcG91bmRHcmFwaCIpO28oUlIsImludGVyc2VjdFJlY3QiKTtvKG9mLCJidWlsZExheWVyTWF0cml4Iik7byhMaWUsIm5vcm1hbGl6ZVJhbmtzIik7byhSaWUsInJlbW92ZUVtcHR5UmFua3MiKTtvKE5SLCJhZGRCb3JkZXJOb2RlIik7byhNUiwibWF4UmFuayIpO28oTmllLCJwYXJ0aXRpb24iKTtvKE1pZSwidGltZSIpO28oSWllLCJub3RpbWUiKX0pO2Z1bmN0aW9uIFBpZSh0KXtmdW5jdGlvbiBlKHIpe3ZhciBuPXQuY2hpbGRyZW4ociksaT10Lm5vZGUocik7aWYobi5sZW5ndGgmJkFlKG4sZSksT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGksIm1pblJhbmsiKSl7aS5ib3JkZXJMZWZ0PVtdLGkuYm9yZGVyUmlnaHQ9W107Zm9yKHZhciBhPWkubWluUmFuayxzPWkubWF4UmFuaysxO2E8czsrK2EpT2llKHQsImJvcmRlckxlZnQiLCJfYmwiLHIsaSxhKSxPaWUodCwiYm9yZGVyUmlnaHQiLCJfYnIiLHIsaSxhKX19byhlLCJkZnMiKSxBZSh0LmNoaWxkcmVuKCksZSl9ZnVuY3Rpb24gT2llKHQsZSxyLG4saSxhKXt2YXIgcz17d2lkdGg6MCxoZWlnaHQ6MCxyYW5rOmEsYm9yZGVyVHlwZTplfSxsPWlbZV1bYS0xXSx1PURjKHQsImJvcmRlciIscyxyKTtpW2VdW2FdPXUsdC5zZXRQYXJlbnQodSxuKSxsJiZ0LnNldEVkZ2UobCx1LHt3ZWlnaHQ6MX0pfXZhciBCaWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtxdCgpO0xjKCk7byhQaWUsImFkZEJvcmRlclNlZ21lbnRzIik7byhPaWUsImFkZEJvcmRlck5vZGUiKX0pO2Z1bmN0aW9uICRpZSh0KXt2YXIgZT10LmdyYXBoKCkucmFua2Rpci50b0xvd2VyQ2FzZSgpOyhlPT09ImxyInx8ZT09PSJybCIpJiZHaWUodCl9ZnVuY3Rpb24gemllKHQpe3ZhciBlPXQuZ3JhcGgoKS5yYW5rZGlyLnRvTG93ZXJDYXNlKCk7KGU9PT0iYnQifHxlPT09InJsIikmJndPZSh0KSwoZT09PSJsciJ8fGU9PT0icmwiKSYmKGtPZSh0KSxHaWUodCkpfWZ1bmN0aW9uIEdpZSh0KXtBZSh0Lm5vZGVzKCksZnVuY3Rpb24oZSl7RmllKHQubm9kZShlKSl9KSxBZSh0LmVkZ2VzKCksZnVuY3Rpb24oZSl7RmllKHQuZWRnZShlKSl9KX1mdW5jdGlvbiBGaWUodCl7dmFyIGU9dC53aWR0aDt0LndpZHRoPXQuaGVpZ2h0LHQuaGVpZ2h0PWV9ZnVuY3Rpb24gd09lKHQpe0FlKHQubm9kZXMoKSxmdW5jdGlvbihlKXtJUih0Lm5vZGUoZSkpfSksQWUodC5lZGdlcygpLGZ1bmN0aW9uKGUpe3ZhciByPXQuZWRnZShlKTtBZShyLnBvaW50cyxJUiksT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsInkiKSYmSVIocil9KX1mdW5jdGlvbiBJUih0KXt0Lnk9LXQueX1mdW5jdGlvbiBrT2UodCl7QWUodC5ub2RlcygpLGZ1bmN0aW9uKGUpe09SKHQubm9kZShlKSl9KSxBZSh0LmVkZ2VzKCksZnVuY3Rpb24oZSl7dmFyIHI9dC5lZGdlKGUpO0FlKHIucG9pbnRzLE9SKSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwociwieCIpJiZPUihyKX0pfWZ1bmN0aW9uIE9SKHQpe3ZhciBlPXQueDt0Lng9dC55LHQueT1lfXZhciBWaWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtxdCgpO28oJGllLCJhZGp1c3QiKTtvKHppZSwidW5kbyIpO28oR2llLCJzd2FwV2lkdGhIZWlnaHQiKTtvKEZpZSwic3dhcFdpZHRoSGVpZ2h0T25lIik7byh3T2UsInJldmVyc2VZIik7byhJUiwicmV2ZXJzZVlPbmUiKTtvKGtPZSwic3dhcFhZIik7byhPUiwic3dhcFhZT25lIil9KTtmdW5jdGlvbiBVaWUodCl7dC5ncmFwaCgpLmR1bW15Q2hhaW5zPVtdLEFlKHQuZWRnZXMoKSxmdW5jdGlvbihlKXtTT2UodCxlKX0pfWZ1bmN0aW9uIFNPZSh0LGUpe3ZhciByPWUudixuPXQubm9kZShyKS5yYW5rLGk9ZS53LGE9dC5ub2RlKGkpLnJhbmsscz1lLm5hbWUsbD10LmVkZ2UoZSksdT1sLmxhYmVsUmFuaztpZihhIT09bisxKXt0LnJlbW92ZUVkZ2UoZSk7dmFyIGg9dm9pZCAwLGYsZDtmb3IoZD0wLCsrbjtuPGE7KytkLCsrbilsLnBvaW50cz1bXSxoPXt3aWR0aDowLGhlaWdodDowLGVkZ2VMYWJlbDpsLGVkZ2VPYmo6ZSxyYW5rOm59LGY9RGModCwiZWRnZSIsaCwiX2QiKSxuPT09dSYmKGgud2lkdGg9bC53aWR0aCxoLmhlaWdodD1sLmhlaWdodCxoLmR1bW15PSJlZGdlLWxhYmVsIixoLmxhYmVscG9zPWwubGFiZWxwb3MpLHQuc2V0RWRnZShyLGYse3dlaWdodDpsLndlaWdodH0scyksZD09PTAmJnQuZ3JhcGgoKS5kdW1teUNoYWlucy5wdXNoKGYpLHI9Zjt0LnNldEVkZ2UocixpLHt3ZWlnaHQ6bC53ZWlnaHR9LHMpfX1mdW5jdGlvbiBIaWUodCl7QWUodC5ncmFwaCgpLmR1bW15Q2hhaW5zLGZ1bmN0aW9uKGUpe3ZhciByPXQubm9kZShlKSxuPXIuZWRnZUxhYmVsLGk7Zm9yKHQuc2V0RWRnZShyLmVkZ2VPYmosbik7ci5kdW1teTspaT10LnN1Y2Nlc3NvcnMoZSlbMF0sdC5yZW1vdmVOb2RlKGUpLG4ucG9pbnRzLnB1c2goe3g6ci54LHk6ci55fSksci5kdW1teT09PSJlZGdlLWxhYmVsIiYmKG4ueD1yLngsbi55PXIueSxuLndpZHRoPXIud2lkdGgsbi5oZWlnaHQ9ci5oZWlnaHQpLGU9aSxyPXQubm9kZShlKX0pfXZhciBQUj1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7TGMoKTtvKFVpZSwicnVuIik7byhTT2UsIm5vcm1hbGl6ZUVkZ2UiKTtvKEhpZSwidW5kbyIpfSk7ZnVuY3Rpb24gJDIodCl7dmFyIGU9e307ZnVuY3Rpb24gcihuKXt2YXIgaT10Lm5vZGUobik7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikpcmV0dXJuIGkucmFuaztlW25dPSEwO3ZhciBhPU5sKEplKHQub3V0RWRnZXMobiksZnVuY3Rpb24ocyl7cmV0dXJuIHIocy53KS10LmVkZ2UocykubWlubGVufSkpO3JldHVybihhPT09TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZfHxhPT09dm9pZCAwfHxhPT09bnVsbCkmJihhPTApLGkucmFuaz1hfW8ociwiZGZzIiksQWUodC5zb3VyY2VzKCkscil9ZnVuY3Rpb24gZXAodCxlKXtyZXR1cm4gdC5ub2RlKGUudykucmFuay10Lm5vZGUoZS52KS5yYW5rLXQuZWRnZShlKS5taW5sZW59dmFyIG1rPU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTtvKCQyLCJsb25nZXN0UGF0aCIpO28oZXAsInNsYWNrIil9KTtmdW5jdGlvbiBnayh0KXt2YXIgZT1uZXcgc24oe2RpcmVjdGVkOiExfSkscj10Lm5vZGVzKClbMF0sbj10Lm5vZGVDb3VudCgpO2Uuc2V0Tm9kZShyLHt9KTtmb3IodmFyIGksYTtDT2UoZSx0KTxuOylpPUFPZShlLHQpLGE9ZS5oYXNOb2RlKGkudik/ZXAodCxpKTotZXAodCxpKSxfT2UoZSx0LGEpO3JldHVybiBlfWZ1bmN0aW9uIENPZSh0LGUpe2Z1bmN0aW9uIHIobil7QWUoZS5ub2RlRWRnZXMobiksZnVuY3Rpb24oaSl7dmFyIGE9aS52LHM9bj09PWE/aS53OmE7IXQuaGFzTm9kZShzKSYmIWVwKGUsaSkmJih0LnNldE5vZGUocyx7fSksdC5zZXRFZGdlKG4scyx7fSkscihzKSl9KX1yZXR1cm4gbyhyLCJkZnMiKSxBZSh0Lm5vZGVzKCksciksdC5ub2RlQ291bnQoKX1mdW5jdGlvbiBBT2UodCxlKXtyZXR1cm4gS2QoZS5lZGdlcygpLGZ1bmN0aW9uKHIpe2lmKHQuaGFzTm9kZShyLnYpIT09dC5oYXNOb2RlKHIudykpcmV0dXJuIGVwKGUscil9KX1mdW5jdGlvbiBfT2UodCxlLHIpe0FlKHQubm9kZXMoKSxmdW5jdGlvbihuKXtlLm5vZGUobikucmFuays9cn0pfXZhciBCUj1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7V28oKTttaygpO28oZ2ssImZlYXNpYmxlVHJlZSIpO28oQ09lLCJ0aWdodFRyZWUiKTtvKEFPZSwiZmluZE1pblNsYWNrRWRnZSIpO28oX09lLCJzaGlmdFJhbmtzIil9KTt2YXIgcWllPU4oKCk9PnsidXNlIHN0cmljdCJ9KTt2YXIgRlI9TigoKT0+eyJ1c2Ugc3RyaWN0In0pO3ZhciBlWHQsJFI9TigoKT0+eyJ1c2Ugc3RyaWN0IjtxdCgpO0ZSKCk7ZVh0PU5zKDEpfSk7dmFyIFlpZT1OKCgpPT57InVzZSBzdHJpY3QiOyRSKCl9KTt2YXIgelI9TigoKT0+eyJ1c2Ugc3RyaWN0In0pO3ZhciBYaWU9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt6UigpfSk7dmFyIGhYdCxqaWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtxdCgpO2hYdD1OcygxKX0pO2Z1bmN0aW9uIEdSKHQpe3ZhciBlPXt9LHI9e30sbj1bXTtmdW5jdGlvbiBpKGEpe2lmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLGEpKXRocm93IG5ldyB6MjtPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxhKXx8KHJbYV09ITAsZVthXT0hMCxBZSh0LnByZWRlY2Vzc29ycyhhKSxpKSxkZWxldGUgclthXSxuLnB1c2goYSkpfWlmKG8oaSwidmlzaXQiKSxBZSh0LnNpbmtzKCksaSksU1IoZSkhPT10Lm5vZGVDb3VudCgpKXRocm93IG5ldyB6MjtyZXR1cm4gbn1mdW5jdGlvbiB6Migpe312YXIgVlI9TigoKT0+eyJ1c2Ugc3RyaWN0IjtxdCgpO0dSLkN5Y2xlRXhjZXB0aW9uPXoyO28oR1IsInRvcHNvcnQiKTtvKHoyLCJDeWNsZUV4Y2VwdGlvbiIpO3oyLnByb3RvdHlwZT1uZXcgRXJyb3J9KTt2YXIgS2llPU4oKCk9PnsidXNlIHN0cmljdCI7VlIoKX0pO2Z1bmN0aW9uIHlrKHQsZSxyKXtQdChlKXx8KGU9W2VdKTt2YXIgbj0odC5pc0RpcmVjdGVkKCk/dC5zdWNjZXNzb3JzOnQubmVpZ2hib3JzKS5iaW5kKHQpLGk9W10sYT17fTtyZXR1cm4gQWUoZSxmdW5jdGlvbihzKXtpZighdC5oYXNOb2RlKHMpKXRocm93IG5ldyBFcnJvcigiR3JhcGggZG9lcyBub3QgaGF2ZSBub2RlOiAiK3MpO1FpZSh0LHMscj09PSJwb3N0IixhLG4saSl9KSxpfWZ1bmN0aW9uIFFpZSh0LGUscixuLGksYSl7T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sZSl8fChuW2VdPSEwLHJ8fGEucHVzaChlKSxBZShpKGUpLGZ1bmN0aW9uKHMpe1FpZSh0LHMscixuLGksYSl9KSxyJiZhLnB1c2goZSkpfXZhciBVUj1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7byh5aywiZGZzIik7byhRaWUsImRvRGZzIil9KTtmdW5jdGlvbiBIUih0LGUpe3JldHVybiB5ayh0LGUsInBvc3QiKX12YXIgWmllPU4oKCk9PnsidXNlIHN0cmljdCI7VVIoKTtvKEhSLCJwb3N0b3JkZXIiKX0pO2Z1bmN0aW9uIFdSKHQsZSl7cmV0dXJuIHlrKHQsZSwicHJlIil9dmFyIEppZT1OKCgpPT57InVzZSBzdHJpY3QiO1VSKCk7byhXUiwicHJlb3JkZXIiKX0pO3ZhciBlYWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGUigpO2hrKCl9KTt2YXIgdGFlPU4oKCk9PnsidXNlIHN0cmljdCI7cWllKCk7JFIoKTtZaWUoKTtYaWUoKTtqaWUoKTtLaWUoKTtaaWUoKTtKaWUoKTtlYWUoKTt6UigpO1ZSKCl9KTtmdW5jdGlvbiBjZih0KXt0PURpZSh0KSwkMih0KTt2YXIgZT1nayh0KTtZUihlKSxxUihlLHQpO2Zvcih2YXIgcixuO3I9YWFlKGUpOyluPXNhZShlLHQsciksb2FlKGUsdCxyLG4pfWZ1bmN0aW9uIHFSKHQsZSl7dmFyIHI9SFIodCx0Lm5vZGVzKCkpO3I9ci5zbGljZSgwLHIubGVuZ3RoLTEpLEFlKHIsZnVuY3Rpb24obil7TU9lKHQsZSxuKX0pfWZ1bmN0aW9uIE1PZSh0LGUscil7dmFyIG49dC5ub2RlKHIpLGk9bi5wYXJlbnQ7dC5lZGdlKHIsaSkuY3V0dmFsdWU9bmFlKHQsZSxyKX1mdW5jdGlvbiBuYWUodCxlLHIpe3ZhciBuPXQubm9kZShyKSxpPW4ucGFyZW50LGE9ITAscz1lLmVkZ2UocixpKSxsPTA7cmV0dXJuIHN8fChhPSExLHM9ZS5lZGdlKGkscikpLGw9cy53ZWlnaHQsQWUoZS5ub2RlRWRnZXMociksZnVuY3Rpb24odSl7dmFyIGg9dS52PT09cixmPWg/dS53OnUudjtpZihmIT09aSl7dmFyIGQ9aD09PWEscD1lLmVkZ2UodSkud2VpZ2h0O2lmKGwrPWQ/cDotcCxPT2UodCxyLGYpKXt2YXIgbT10LmVkZ2UocixmKS5jdXR2YWx1ZTtsKz1kPy1tOm19fX0pLGx9ZnVuY3Rpb24gWVIodCxlKXthcmd1bWVudHMubGVuZ3RoPDImJihlPXQubm9kZXMoKVswXSksaWFlKHQse30sMSxlKX1mdW5jdGlvbiBpYWUodCxlLHIsbixpKXt2YXIgYT1yLHM9dC5ub2RlKG4pO3JldHVybiBlW25dPSEwLEFlKHQubmVpZ2hib3JzKG4pLGZ1bmN0aW9uKGwpe09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLGwpfHwocj1pYWUodCxlLHIsbCxuKSl9KSxzLmxvdz1hLHMubGltPXIrKyxpP3MucGFyZW50PWk6ZGVsZXRlIHMucGFyZW50LHJ9ZnVuY3Rpb24gYWFlKHQpe3JldHVybiBscyh0LmVkZ2VzKCksZnVuY3Rpb24oZSl7cmV0dXJuIHQuZWRnZShlKS5jdXR2YWx1ZTwwfSl9ZnVuY3Rpb24gc2FlKHQsZSxyKXt2YXIgbj1yLnYsaT1yLnc7ZS5oYXNFZGdlKG4saSl8fChuPXIudyxpPXIudik7dmFyIGE9dC5ub2RlKG4pLHM9dC5ub2RlKGkpLGw9YSx1PSExO2EubGltPnMubGltJiYobD1zLHU9ITApO3ZhciBoPVlyKGUuZWRnZXMoKSxmdW5jdGlvbihmKXtyZXR1cm4gdT09PXJhZSh0LHQubm9kZShmLnYpLGwpJiZ1IT09cmFlKHQsdC5ub2RlKGYudyksbCl9KTtyZXR1cm4gS2QoaCxmdW5jdGlvbihmKXtyZXR1cm4gZXAoZSxmKX0pfWZ1bmN0aW9uIG9hZSh0LGUscixuKXt2YXIgaT1yLnYsYT1yLnc7dC5yZW1vdmVFZGdlKGksYSksdC5zZXRFZGdlKG4udixuLncse30pLFlSKHQpLHFSKHQsZSksSU9lKHQsZSl9ZnVuY3Rpb24gSU9lKHQsZSl7dmFyIHI9bHModC5ub2RlcygpLGZ1bmN0aW9uKGkpe3JldHVybiFlLm5vZGUoaSkucGFyZW50fSksbj1XUih0LHIpO249bi5zbGljZSgxKSxBZShuLGZ1bmN0aW9uKGkpe3ZhciBhPXQubm9kZShpKS5wYXJlbnQscz1lLmVkZ2UoaSxhKSxsPSExO3N8fChzPWUuZWRnZShhLGkpLGw9ITApLGUubm9kZShpKS5yYW5rPWUubm9kZShhKS5yYW5rKyhsP3MubWlubGVuOi1zLm1pbmxlbil9KX1mdW5jdGlvbiBPT2UodCxlLHIpe3JldHVybiB0Lmhhc0VkZ2UoZSxyKX1mdW5jdGlvbiByYWUodCxlLHIpe3JldHVybiByLmxvdzw9ZS5saW0mJmUubGltPD1yLmxpbX12YXIgbGFlPU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTt0YWUoKTtMYygpO0JSKCk7bWsoKTtjZi5pbml0TG93TGltVmFsdWVzPVlSO2NmLmluaXRDdXRWYWx1ZXM9cVI7Y2YuY2FsY0N1dFZhbHVlPW5hZTtjZi5sZWF2ZUVkZ2U9YWFlO2NmLmVudGVyRWRnZT1zYWU7Y2YuZXhjaGFuZ2VFZGdlcz1vYWU7byhjZiwibmV0d29ya1NpbXBsZXgiKTtvKHFSLCJpbml0Q3V0VmFsdWVzIik7byhNT2UsImFzc2lnbkN1dFZhbHVlIik7byhuYWUsImNhbGNDdXRWYWx1ZSIpO28oWVIsImluaXRMb3dMaW1WYWx1ZXMiKTtvKGlhZSwiZGZzQXNzaWduTG93TGltIik7byhhYWUsImxlYXZlRWRnZSIpO28oc2FlLCJlbnRlckVkZ2UiKTtvKG9hZSwiZXhjaGFuZ2VFZGdlcyIpO28oSU9lLCJ1cGRhdGVSYW5rcyIpO28oT09lLCJpc1RyZWVFZGdlIik7byhyYWUsImlzRGVzY2VuZGFudCIpfSk7ZnVuY3Rpb24gWFIodCl7c3dpdGNoKHQuZ3JhcGgoKS5yYW5rZXIpe2Nhc2UibmV0d29yay1zaW1wbGV4IjpjYWUodCk7YnJlYWs7Y2FzZSJ0aWdodC10cmVlIjpCT2UodCk7YnJlYWs7Y2FzZSJsb25nZXN0LXBhdGgiOlBPZSh0KTticmVhaztkZWZhdWx0OmNhZSh0KX19ZnVuY3Rpb24gQk9lKHQpeyQyKHQpLGdrKHQpfWZ1bmN0aW9uIGNhZSh0KXtjZih0KX12YXIgUE9lLGpSPU4oKCk9PnsidXNlIHN0cmljdCI7QlIoKTtsYWUoKTttaygpO28oWFIsInJhbmsiKTtQT2U9JDI7byhCT2UsInRpZ2h0VHJlZVJhbmtlciIpO28oY2FlLCJuZXR3b3JrU2ltcGxleFJhbmtlciIpfSk7ZnVuY3Rpb24gdWFlKHQpe3ZhciBlPURjKHQsInJvb3QiLHt9LCJfcm9vdCIpLHI9Rk9lKHQpLG49JHMoYnIocikpLTEsaT0yKm4rMTt0LmdyYXBoKCkubmVzdGluZ1Jvb3Q9ZSxBZSh0LmVkZ2VzKCksZnVuY3Rpb24ocyl7dC5lZGdlKHMpLm1pbmxlbio9aX0pO3ZhciBhPSRPZSh0KSsxO0FlKHQuY2hpbGRyZW4oKSxmdW5jdGlvbihzKXtoYWUodCxlLGksYSxuLHIscyl9KSx0LmdyYXBoKCkubm9kZVJhbmtGYWN0b3I9aX1mdW5jdGlvbiBoYWUodCxlLHIsbixpLGEscyl7dmFyIGw9dC5jaGlsZHJlbihzKTtpZighbC5sZW5ndGgpe3MhPT1lJiZ0LnNldEVkZ2UoZSxzLHt3ZWlnaHQ6MCxtaW5sZW46cn0pO3JldHVybn12YXIgdT1OUih0LCJfYnQiKSxoPU5SKHQsIl9iYiIpLGY9dC5ub2RlKHMpO3Quc2V0UGFyZW50KHUscyksZi5ib3JkZXJUb3A9dSx0LnNldFBhcmVudChoLHMpLGYuYm9yZGVyQm90dG9tPWgsQWUobCxmdW5jdGlvbihkKXtoYWUodCxlLHIsbixpLGEsZCk7dmFyIHA9dC5ub2RlKGQpLG09cC5ib3JkZXJUb3A/cC5ib3JkZXJUb3A6ZCxnPXAuYm9yZGVyQm90dG9tP3AuYm9yZGVyQm90dG9tOmQseT1wLmJvcmRlclRvcD9uOjIqbix2PW0hPT1nPzE6aS1hW3NdKzE7dC5zZXRFZGdlKHUsbSx7d2VpZ2h0OnksbWlubGVuOnYsbmVzdGluZ0VkZ2U6ITB9KSx0LnNldEVkZ2UoZyxoLHt3ZWlnaHQ6eSxtaW5sZW46dixuZXN0aW5nRWRnZTohMH0pfSksdC5wYXJlbnQocyl8fHQuc2V0RWRnZShlLHUse3dlaWdodDowLG1pbmxlbjppK2Fbc119KX1mdW5jdGlvbiBGT2UodCl7dmFyIGU9e307ZnVuY3Rpb24gcihuLGkpe3ZhciBhPXQuY2hpbGRyZW4obik7YSYmYS5sZW5ndGgmJkFlKGEsZnVuY3Rpb24ocyl7cihzLGkrMSl9KSxlW25dPWl9cmV0dXJuIG8ociwiZGZzIiksQWUodC5jaGlsZHJlbigpLGZ1bmN0aW9uKG4pe3IobiwxKX0pLGV9ZnVuY3Rpb24gJE9lKHQpe3JldHVybiBYcih0LmVkZ2VzKCksZnVuY3Rpb24oZSxyKXtyZXR1cm4gZSt0LmVkZ2Uocikud2VpZ2h0fSwwKX1mdW5jdGlvbiBmYWUodCl7dmFyIGU9dC5ncmFwaCgpO3QucmVtb3ZlTm9kZShlLm5lc3RpbmdSb290KSxkZWxldGUgZS5uZXN0aW5nUm9vdCxBZSh0LmVkZ2VzKCksZnVuY3Rpb24ocil7dmFyIG49dC5lZGdlKHIpO24ubmVzdGluZ0VkZ2UmJnQucmVtb3ZlRWRnZShyKX0pfXZhciBkYWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtxdCgpO0xjKCk7byh1YWUsInJ1biIpO28oaGFlLCJkZnMiKTtvKEZPZSwidHJlZURlcHRocyIpO28oJE9lLCJzdW1XZWlnaHRzIik7byhmYWUsImNsZWFudXAiKX0pO2Z1bmN0aW9uIHBhZSh0LGUscil7dmFyIG49e30saTtBZShyLGZ1bmN0aW9uKGEpe2Zvcih2YXIgcz10LnBhcmVudChhKSxsLHU7czspe2lmKGw9dC5wYXJlbnQocyksbD8odT1uW2xdLG5bbF09cyk6KHU9aSxpPXMpLHUmJnUhPT1zKXtlLnNldEVkZ2UodSxzKTtyZXR1cm59cz1sfX0pfXZhciBtYWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtxdCgpO28ocGFlLCJhZGRTdWJncmFwaENvbnN0cmFpbnRzIil9KTtmdW5jdGlvbiBnYWUodCxlLHIpe3ZhciBuPUdPZSh0KSxpPW5ldyBzbih7Y29tcG91bmQ6ITB9KS5zZXRHcmFwaCh7cm9vdDpufSkuc2V0RGVmYXVsdE5vZGVMYWJlbChmdW5jdGlvbihhKXtyZXR1cm4gdC5ub2RlKGEpfSk7cmV0dXJuIEFlKHQubm9kZXMoKSxmdW5jdGlvbihhKXt2YXIgcz10Lm5vZGUoYSksbD10LnBhcmVudChhKTsocy5yYW5rPT09ZXx8cy5taW5SYW5rPD1lJiZlPD1zLm1heFJhbmspJiYoaS5zZXROb2RlKGEpLGkuc2V0UGFyZW50KGEsbHx8biksQWUodFtyXShhKSxmdW5jdGlvbih1KXt2YXIgaD11LnY9PT1hP3Uudzp1LnYsZj1pLmVkZ2UoaCxhKSxkPW1yKGYpPzA6Zi53ZWlnaHQ7aS5zZXRFZGdlKGgsYSx7d2VpZ2h0OnQuZWRnZSh1KS53ZWlnaHQrZH0pfSksT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIm1pblJhbmsiKSYmaS5zZXROb2RlKGEse2JvcmRlckxlZnQ6cy5ib3JkZXJMZWZ0W2VdLGJvcmRlclJpZ2h0OnMuYm9yZGVyUmlnaHRbZV19KSl9KSxpfWZ1bmN0aW9uIEdPZSh0KXtmb3IodmFyIGU7dC5oYXNOb2RlKGU9WmQoIl9yb290IikpOyk7cmV0dXJuIGV9dmFyIHlhZT1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7V28oKTtvKGdhZSwiYnVpbGRMYXllckdyYXBoIik7byhHT2UsImNyZWF0ZVJvb3ROb2RlIil9KTtmdW5jdGlvbiB2YWUodCxlKXtmb3IodmFyIHI9MCxuPTE7bjxlLmxlbmd0aDsrK24pcis9Vk9lKHQsZVtuLTFdLGVbbl0pO3JldHVybiByfWZ1bmN0aW9uIFZPZSh0LGUscil7Zm9yKHZhciBuPXVrKHIsSmUocixmdW5jdGlvbihoLGYpe3JldHVybiBmfSkpLGk9cXIoSmUoZSxmdW5jdGlvbihoKXtyZXR1cm4gX2MoSmUodC5vdXRFZGdlcyhoKSxmdW5jdGlvbihmKXtyZXR1cm57cG9zOm5bZi53XSx3ZWlnaHQ6dC5lZGdlKGYpLndlaWdodH19KSwicG9zIil9KSksYT0xO2E8ci5sZW5ndGg7KWE8PD0xO3ZhciBzPTIqYS0xO2EtPTE7dmFyIGw9SmUobmV3IEFycmF5KHMpLGZ1bmN0aW9uKCl7cmV0dXJuIDB9KSx1PTA7cmV0dXJuIEFlKGkuZm9yRWFjaChmdW5jdGlvbihoKXt2YXIgZj1oLnBvcythO2xbZl0rPWgud2VpZ2h0O2Zvcih2YXIgZD0wO2Y+MDspZiUyJiYoZCs9bFtmKzFdKSxmPWYtMT4+MSxsW2ZdKz1oLndlaWdodDt1Kz1oLndlaWdodCpkfSkpLHV9dmFyIHhhZT1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7byh2YWUsImNyb3NzQ291bnQiKTtvKFZPZSwidHdvTGF5ZXJDcm9zc0NvdW50Iil9KTtmdW5jdGlvbiBiYWUodCl7dmFyIGU9e30scj1Zcih0Lm5vZGVzKCksZnVuY3Rpb24obCl7cmV0dXJuIXQuY2hpbGRyZW4obCkubGVuZ3RofSksbj0kcyhKZShyLGZ1bmN0aW9uKGwpe3JldHVybiB0Lm5vZGUobCkucmFua30pKSxpPUplKEhvKG4rMSksZnVuY3Rpb24oKXtyZXR1cm5bXX0pO2Z1bmN0aW9uIGEobCl7aWYoIUJ0KGUsbCkpe2VbbF09ITA7dmFyIHU9dC5ub2RlKGwpO2lbdS5yYW5rXS5wdXNoKGwpLEFlKHQuc3VjY2Vzc29ycyhsKSxhKX19byhhLCJkZnMiKTt2YXIgcz1fYyhyLGZ1bmN0aW9uKGwpe3JldHVybiB0Lm5vZGUobCkucmFua30pO3JldHVybiBBZShzLGEpLGl9dmFyIFRhZT1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7byhiYWUsImluaXRPcmRlciIpfSk7ZnVuY3Rpb24gd2FlKHQsZSl7cmV0dXJuIEplKGUsZnVuY3Rpb24ocil7dmFyIG49dC5pbkVkZ2VzKHIpO2lmKG4ubGVuZ3RoKXt2YXIgaT1YcihuLGZ1bmN0aW9uKGEscyl7dmFyIGw9dC5lZGdlKHMpLHU9dC5ub2RlKHMudik7cmV0dXJue3N1bTphLnN1bStsLndlaWdodCp1Lm9yZGVyLHdlaWdodDphLndlaWdodCtsLndlaWdodH19LHtzdW06MCx3ZWlnaHQ6MH0pO3JldHVybnt2OnIsYmFyeWNlbnRlcjppLnN1bS9pLndlaWdodCx3ZWlnaHQ6aS53ZWlnaHR9fWVsc2UgcmV0dXJue3Y6cn19KX12YXIga2FlPU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTtvKHdhZSwiYmFyeWNlbnRlciIpfSk7ZnVuY3Rpb24gRWFlKHQsZSl7dmFyIHI9e307QWUodCxmdW5jdGlvbihpLGEpe3ZhciBzPXJbaS52XT17aW5kZWdyZWU6MCxpbjpbXSxvdXQ6W10sdnM6W2kudl0saTphfTttcihpLmJhcnljZW50ZXIpfHwocy5iYXJ5Y2VudGVyPWkuYmFyeWNlbnRlcixzLndlaWdodD1pLndlaWdodCl9KSxBZShlLmVkZ2VzKCksZnVuY3Rpb24oaSl7dmFyIGE9cltpLnZdLHM9cltpLnddOyFtcihhKSYmIW1yKHMpJiYocy5pbmRlZ3JlZSsrLGEub3V0LnB1c2gocltpLnddKSl9KTt2YXIgbj1ZcihyLGZ1bmN0aW9uKGkpe3JldHVybiFpLmluZGVncmVlfSk7cmV0dXJuIFVPZShuKX1mdW5jdGlvbiBVT2UodCl7dmFyIGU9W107ZnVuY3Rpb24gcihhKXtyZXR1cm4gZnVuY3Rpb24ocyl7cy5tZXJnZWR8fChtcihzLmJhcnljZW50ZXIpfHxtcihhLmJhcnljZW50ZXIpfHxzLmJhcnljZW50ZXI+PWEuYmFyeWNlbnRlcikmJkhPZShhLHMpfX1vKHIsImhhbmRsZUluIik7ZnVuY3Rpb24gbihhKXtyZXR1cm4gZnVuY3Rpb24ocyl7cy5pbi5wdXNoKGEpLC0tcy5pbmRlZ3JlZT09PTAmJnQucHVzaChzKX19Zm9yKG8obiwiaGFuZGxlT3V0Iik7dC5sZW5ndGg7KXt2YXIgaT10LnBvcCgpO2UucHVzaChpKSxBZShpLmluLnJldmVyc2UoKSxyKGkpKSxBZShpLm91dCxuKGkpKX1yZXR1cm4gSmUoWXIoZSxmdW5jdGlvbihhKXtyZXR1cm4hYS5tZXJnZWR9KSxmdW5jdGlvbihhKXtyZXR1cm4gUWQoYSxbInZzIiwiaSIsImJhcnljZW50ZXIiLCJ3ZWlnaHQiXSl9KX1mdW5jdGlvbiBIT2UodCxlKXt2YXIgcj0wLG49MDt0LndlaWdodCYmKHIrPXQuYmFyeWNlbnRlcip0LndlaWdodCxuKz10LndlaWdodCksZS53ZWlnaHQmJihyKz1lLmJhcnljZW50ZXIqZS53ZWlnaHQsbis9ZS53ZWlnaHQpLHQudnM9ZS52cy5jb25jYXQodC52cyksdC5iYXJ5Y2VudGVyPXIvbix0LndlaWdodD1uLHQuaT1NYXRoLm1pbihlLmksdC5pKSxlLm1lcmdlZD0hMH12YXIgU2FlPU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTtvKEVhZSwicmVzb2x2ZUNvbmZsaWN0cyIpO28oVU9lLCJkb1Jlc29sdmVDb25mbGljdHMiKTtvKEhPZSwibWVyZ2VFbnRyaWVzIil9KTtmdW5jdGlvbiBBYWUodCxlKXt2YXIgcj1OaWUodCxmdW5jdGlvbihmKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGYsImJhcnljZW50ZXIiKX0pLG49ci5saHMsaT1fYyhyLnJocyxmdW5jdGlvbihmKXtyZXR1cm4tZi5pfSksYT1bXSxzPTAsbD0wLHU9MDtuLnNvcnQoV09lKCEhZSkpLHU9Q2FlKGEsaSx1KSxBZShuLGZ1bmN0aW9uKGYpe3UrPWYudnMubGVuZ3RoLGEucHVzaChmLnZzKSxzKz1mLmJhcnljZW50ZXIqZi53ZWlnaHQsbCs9Zi53ZWlnaHQsdT1DYWUoYSxpLHUpfSk7dmFyIGg9e3ZzOnFyKGEpfTtyZXR1cm4gbCYmKGguYmFyeWNlbnRlcj1zL2wsaC53ZWlnaHQ9bCksaH1mdW5jdGlvbiBDYWUodCxlLHIpe2Zvcih2YXIgbjtlLmxlbmd0aCYmKG49bWEoZSkpLmk8PXI7KWUucG9wKCksdC5wdXNoKG4udnMpLHIrKztyZXR1cm4gcn1mdW5jdGlvbiBXT2UodCl7cmV0dXJuIGZ1bmN0aW9uKGUscil7cmV0dXJuIGUuYmFyeWNlbnRlcjxyLmJhcnljZW50ZXI/LTE6ZS5iYXJ5Y2VudGVyPnIuYmFyeWNlbnRlcj8xOnQ/ci5pLWUuaTplLmktci5pfX12YXIgX2FlPU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTtMYygpO28oQWFlLCJzb3J0Iik7byhDYWUsImNvbnN1bWVVbnNvcnRhYmxlIik7byhXT2UsImNvbXBhcmVXaXRoQmlhcyIpfSk7ZnVuY3Rpb24gS1IodCxlLHIsbil7dmFyIGk9dC5jaGlsZHJlbihlKSxhPXQubm9kZShlKSxzPWE/YS5ib3JkZXJMZWZ0OnZvaWQgMCxsPWE/YS5ib3JkZXJSaWdodDp2b2lkIDAsdT17fTtzJiYoaT1ZcihpLGZ1bmN0aW9uKGcpe3JldHVybiBnIT09cyYmZyE9PWx9KSk7dmFyIGg9d2FlKHQsaSk7QWUoaCxmdW5jdGlvbihnKXtpZih0LmNoaWxkcmVuKGcudikubGVuZ3RoKXt2YXIgeT1LUih0LGcudixyLG4pO3VbZy52XT15LE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh5LCJiYXJ5Y2VudGVyIikmJllPZShnLHkpfX0pO3ZhciBmPUVhZShoLHIpO3FPZShmLHUpO3ZhciBkPUFhZShmLG4pO2lmKHMmJihkLnZzPXFyKFtzLGQudnMsbF0pLHQucHJlZGVjZXNzb3JzKHMpLmxlbmd0aCkpe3ZhciBwPXQubm9kZSh0LnByZWRlY2Vzc29ycyhzKVswXSksbT10Lm5vZGUodC5wcmVkZWNlc3NvcnMobClbMF0pO09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkLCJiYXJ5Y2VudGVyIil8fChkLmJhcnljZW50ZXI9MCxkLndlaWdodD0wKSxkLmJhcnljZW50ZXI9KGQuYmFyeWNlbnRlcipkLndlaWdodCtwLm9yZGVyK20ub3JkZXIpLyhkLndlaWdodCsyKSxkLndlaWdodCs9Mn1yZXR1cm4gZH1mdW5jdGlvbiBxT2UodCxlKXtBZSh0LGZ1bmN0aW9uKHIpe3IudnM9cXIoci52cy5tYXAoZnVuY3Rpb24obil7cmV0dXJuIGVbbl0/ZVtuXS52czpufSkpfSl9ZnVuY3Rpb24gWU9lKHQsZSl7bXIodC5iYXJ5Y2VudGVyKT8odC5iYXJ5Y2VudGVyPWUuYmFyeWNlbnRlcix0LndlaWdodD1lLndlaWdodCk6KHQuYmFyeWNlbnRlcj0odC5iYXJ5Y2VudGVyKnQud2VpZ2h0K2UuYmFyeWNlbnRlciplLndlaWdodCkvKHQud2VpZ2h0K2Uud2VpZ2h0KSx0LndlaWdodCs9ZS53ZWlnaHQpfXZhciBEYWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtxdCgpO2thZSgpO1NhZSgpO19hZSgpO28oS1IsInNvcnRTdWJncmFwaCIpO28ocU9lLCJleHBhbmRTdWJncmFwaHMiKTtvKFlPZSwibWVyZ2VCYXJ5Y2VudGVycyIpfSk7ZnVuY3Rpb24gTmFlKHQpe3ZhciBlPU1SKHQpLHI9TGFlKHQsSG8oMSxlKzEpLCJpbkVkZ2VzIiksbj1MYWUodCxIbyhlLTEsLTEsLTEpLCJvdXRFZGdlcyIpLGk9YmFlKHQpO1JhZSh0LGkpO2Zvcih2YXIgYT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkscyxsPTAsdT0wO3U8NDsrK2wsKyt1KXtYT2UobCUyP3I6bixsJTQ+PTIpLGk9b2YodCk7dmFyIGg9dmFlKHQsaSk7aDxhJiYodT0wLHM9ZVIoaSksYT1oKX1SYWUodCxzKX1mdW5jdGlvbiBMYWUodCxlLHIpe3JldHVybiBKZShlLGZ1bmN0aW9uKG4pe3JldHVybiBnYWUodCxuLHIpfSl9ZnVuY3Rpb24gWE9lKHQsZSl7dmFyIHI9bmV3IHNuO0FlKHQsZnVuY3Rpb24obil7dmFyIGk9bi5ncmFwaCgpLnJvb3QsYT1LUihuLGkscixlKTtBZShhLnZzLGZ1bmN0aW9uKHMsbCl7bi5ub2RlKHMpLm9yZGVyPWx9KSxwYWUobixyLGEudnMpfSl9ZnVuY3Rpb24gUmFlKHQsZSl7QWUoZSxmdW5jdGlvbihyKXtBZShyLGZ1bmN0aW9uKG4saSl7dC5ub2RlKG4pLm9yZGVyPWl9KX0pfXZhciBNYWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtxdCgpO1dvKCk7TGMoKTttYWUoKTt5YWUoKTt4YWUoKTtUYWUoKTtEYWUoKTtvKE5hZSwib3JkZXIiKTtvKExhZSwiYnVpbGRMYXllckdyYXBocyIpO28oWE9lLCJzd2VlcExheWVyR3JhcGhzIik7byhSYWUsImFzc2lnbk9yZGVyIil9KTtmdW5jdGlvbiBJYWUodCl7dmFyIGU9S09lKHQpO0FlKHQuZ3JhcGgoKS5kdW1teUNoYWlucyxmdW5jdGlvbihyKXtmb3IodmFyIG49dC5ub2RlKHIpLGk9bi5lZGdlT2JqLGE9ak9lKHQsZSxpLnYsaS53KSxzPWEucGF0aCxsPWEubGNhLHU9MCxoPXNbdV0sZj0hMDtyIT09aS53Oyl7aWYobj10Lm5vZGUociksZil7Zm9yKDsoaD1zW3VdKSE9PWwmJnQubm9kZShoKS5tYXhSYW5rPG4ucmFuazspdSsrO2g9PT1sJiYoZj0hMSl9aWYoIWYpe2Zvcig7dTxzLmxlbmd0aC0xJiZ0Lm5vZGUoaD1zW3UrMV0pLm1pblJhbms8PW4ucmFuazspdSsrO2g9c1t1XX10LnNldFBhcmVudChyLGgpLHI9dC5zdWNjZXNzb3JzKHIpWzBdfX0pfWZ1bmN0aW9uIGpPZSh0LGUscixuKXt2YXIgaT1bXSxhPVtdLHM9TWF0aC5taW4oZVtyXS5sb3csZVtuXS5sb3cpLGw9TWF0aC5tYXgoZVtyXS5saW0sZVtuXS5saW0pLHUsaDt1PXI7ZG8gdT10LnBhcmVudCh1KSxpLnB1c2godSk7d2hpbGUodSYmKGVbdV0ubG93PnN8fGw+ZVt1XS5saW0pKTtmb3IoaD11LHU9bjsodT10LnBhcmVudCh1KSkhPT1oOylhLnB1c2godSk7cmV0dXJue3BhdGg6aS5jb25jYXQoYS5yZXZlcnNlKCkpLGxjYTpofX1mdW5jdGlvbiBLT2UodCl7dmFyIGU9e30scj0wO2Z1bmN0aW9uIG4oaSl7dmFyIGE9cjtBZSh0LmNoaWxkcmVuKGkpLG4pLGVbaV09e2xvdzphLGxpbTpyKyt9fXJldHVybiBvKG4sImRmcyIpLEFlKHQuY2hpbGRyZW4oKSxuKSxlfXZhciBPYWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtxdCgpO28oSWFlLCJwYXJlbnREdW1teUNoYWlucyIpO28oak9lLCJmaW5kUGF0aCIpO28oS09lLCJwb3N0b3JkZXIiKX0pO2Z1bmN0aW9uIFFPZSh0LGUpe3ZhciByPXt9O2Z1bmN0aW9uIG4oaSxhKXt2YXIgcz0wLGw9MCx1PWkubGVuZ3RoLGg9bWEoYSk7cmV0dXJuIEFlKGEsZnVuY3Rpb24oZixkKXt2YXIgcD1KT2UodCxmKSxtPXA/dC5ub2RlKHApLm9yZGVyOnU7KHB8fGY9PT1oKSYmKEFlKGEuc2xpY2UobCxkKzEpLGZ1bmN0aW9uKGcpe0FlKHQucHJlZGVjZXNzb3JzKGcpLGZ1bmN0aW9uKHkpe3ZhciB2PXQubm9kZSh5KSx4PXYub3JkZXI7KHg8c3x8bTx4KSYmISh2LmR1bW15JiZ0Lm5vZGUoZykuZHVtbXkpJiZQYWUocix5LGcpfSl9KSxsPWQrMSxzPW0pfSksYX1yZXR1cm4gbyhuLCJ2aXNpdExheWVyIiksWHIoZSxuKSxyfWZ1bmN0aW9uIFpPZSh0LGUpe3ZhciByPXt9O2Z1bmN0aW9uIG4oYSxzLGwsdSxoKXt2YXIgZjtBZShIbyhzLGwpLGZ1bmN0aW9uKGQpe2Y9YVtkXSx0Lm5vZGUoZikuZHVtbXkmJkFlKHQucHJlZGVjZXNzb3JzKGYpLGZ1bmN0aW9uKHApe3ZhciBtPXQubm9kZShwKTttLmR1bW15JiYobS5vcmRlcjx1fHxtLm9yZGVyPmgpJiZQYWUocixwLGYpfSl9KX1vKG4sInNjYW4iKTtmdW5jdGlvbiBpKGEscyl7dmFyIGw9LTEsdSxoPTA7cmV0dXJuIEFlKHMsZnVuY3Rpb24oZixkKXtpZih0Lm5vZGUoZikuZHVtbXk9PT0iYm9yZGVyIil7dmFyIHA9dC5wcmVkZWNlc3NvcnMoZik7cC5sZW5ndGgmJih1PXQubm9kZShwWzBdKS5vcmRlcixuKHMsaCxkLGwsdSksaD1kLGw9dSl9bihzLGgscy5sZW5ndGgsdSxhLmxlbmd0aCl9KSxzfXJldHVybiBvKGksInZpc2l0TGF5ZXIiKSxYcihlLGkpLHJ9ZnVuY3Rpb24gSk9lKHQsZSl7aWYodC5ub2RlKGUpLmR1bW15KXJldHVybiBscyh0LnByZWRlY2Vzc29ycyhlKSxmdW5jdGlvbihyKXtyZXR1cm4gdC5ub2RlKHIpLmR1bW15fSl9ZnVuY3Rpb24gUGFlKHQsZSxyKXtpZihlPnIpe3ZhciBuPWU7ZT1yLHI9bn12YXIgaT10W2VdO2l8fCh0W2VdPWk9e30pLGlbcl09ITB9ZnVuY3Rpb24gZVBlKHQsZSxyKXtpZihlPnIpe3ZhciBuPWU7ZT1yLHI9bn1yZXR1cm4hIXRbZV0mJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0W2VdLHIpfWZ1bmN0aW9uIHRQZSh0LGUscixuKXt2YXIgaT17fSxhPXt9LHM9e307cmV0dXJuIEFlKGUsZnVuY3Rpb24obCl7QWUobCxmdW5jdGlvbih1LGgpe2lbdV09dSxhW3VdPXUsc1t1XT1ofSl9KSxBZShlLGZ1bmN0aW9uKGwpe3ZhciB1PS0xO0FlKGwsZnVuY3Rpb24oaCl7dmFyIGY9bihoKTtpZihmLmxlbmd0aCl7Zj1fYyhmLGZ1bmN0aW9uKHkpe3JldHVybiBzW3ldfSk7Zm9yKHZhciBkPShmLmxlbmd0aC0xKS8yLHA9TWF0aC5mbG9vcihkKSxtPU1hdGguY2VpbChkKTtwPD1tOysrcCl7dmFyIGc9ZltwXTthW2hdPT09aCYmdTxzW2ddJiYhZVBlKHIsaCxnKSYmKGFbZ109aCxhW2hdPWlbaF09aVtnXSx1PXNbZ10pfX19KX0pLHtyb290OmksYWxpZ246YX19ZnVuY3Rpb24gclBlKHQsZSxyLG4saSl7dmFyIGE9e30scz1uUGUodCxlLHIsaSksbD1pPyJib3JkZXJMZWZ0IjoiYm9yZGVyUmlnaHQiO2Z1bmN0aW9uIHUoZCxwKXtmb3IodmFyIG09cy5ub2RlcygpLGc9bS5wb3AoKSx5PXt9O2c7KXlbZ10/ZChnKTooeVtnXT0hMCxtLnB1c2goZyksbT1tLmNvbmNhdChwKGcpKSksZz1tLnBvcCgpfW8odSwiaXRlcmF0ZSIpO2Z1bmN0aW9uIGgoZCl7YVtkXT1zLmluRWRnZXMoZCkucmVkdWNlKGZ1bmN0aW9uKHAsbSl7cmV0dXJuIE1hdGgubWF4KHAsYVttLnZdK3MuZWRnZShtKSl9LDApfW8oaCwicGFzczEiKTtmdW5jdGlvbiBmKGQpe3ZhciBwPXMub3V0RWRnZXMoZCkucmVkdWNlKGZ1bmN0aW9uKGcseSl7cmV0dXJuIE1hdGgubWluKGcsYVt5LnddLXMuZWRnZSh5KSl9LE51bWJlci5QT1NJVElWRV9JTkZJTklUWSksbT10Lm5vZGUoZCk7cCE9PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSYmbS5ib3JkZXJUeXBlIT09bCYmKGFbZF09TWF0aC5tYXgoYVtkXSxwKSl9cmV0dXJuIG8oZiwicGFzczIiKSx1KGgscy5wcmVkZWNlc3NvcnMuYmluZChzKSksdShmLHMuc3VjY2Vzc29ycy5iaW5kKHMpKSxBZShuLGZ1bmN0aW9uKGQpe2FbZF09YVtyW2RdXX0pLGF9ZnVuY3Rpb24gblBlKHQsZSxyLG4pe3ZhciBpPW5ldyBzbixhPXQuZ3JhcGgoKSxzPW9QZShhLm5vZGVzZXAsYS5lZGdlc2VwLG4pO3JldHVybiBBZShlLGZ1bmN0aW9uKGwpe3ZhciB1O0FlKGwsZnVuY3Rpb24oaCl7dmFyIGY9cltoXTtpZihpLnNldE5vZGUoZiksdSl7dmFyIGQ9clt1XSxwPWkuZWRnZShkLGYpO2kuc2V0RWRnZShkLGYsTWF0aC5tYXgocyh0LGgsdSkscHx8MCkpfXU9aH0pfSksaX1mdW5jdGlvbiBpUGUodCxlKXtyZXR1cm4gS2QoYnIoZSksZnVuY3Rpb24ocil7dmFyIG49TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLGk9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO3JldHVybiBtUihyLGZ1bmN0aW9uKGEscyl7dmFyIGw9bFBlKHQscykvMjtuPU1hdGgubWF4KGErbCxuKSxpPU1hdGgubWluKGEtbCxpKX0pLG4taX0pfWZ1bmN0aW9uIGFQZSh0LGUpe3ZhciByPWJyKGUpLG49TmwociksaT0kcyhyKTtBZShbInUiLCJkIl0sZnVuY3Rpb24oYSl7QWUoWyJsIiwiciJdLGZ1bmN0aW9uKHMpe3ZhciBsPWErcyx1PXRbbF0saDtpZih1IT09ZSl7dmFyIGY9YnIodSk7aD1zPT09ImwiP24tTmwoZik6aS0kcyhmKSxoJiYodFtsXT1qZCh1LGZ1bmN0aW9uKGQpe3JldHVybiBkK2h9KSl9fSl9KX1mdW5jdGlvbiBzUGUodCxlKXtyZXR1cm4gamQodC51bCxmdW5jdGlvbihyLG4pe2lmKGUpcmV0dXJuIHRbZS50b0xvd2VyQ2FzZSgpXVtuXTt2YXIgaT1fYyhKZSh0LG4pKTtyZXR1cm4oaVsxXStpWzJdKS8yfSl9ZnVuY3Rpb24gQmFlKHQpe3ZhciBlPW9mKHQpLHI9SGgoUU9lKHQsZSksWk9lKHQsZSkpLG49e30saTtBZShbInUiLCJkIl0sZnVuY3Rpb24ocyl7aT1zPT09InUiP2U6YnIoZSkucmV2ZXJzZSgpLEFlKFsibCIsInIiXSxmdW5jdGlvbihsKXtsPT09InIiJiYoaT1KZShpLGZ1bmN0aW9uKGQpe3JldHVybiBicihkKS5yZXZlcnNlKCl9KSk7dmFyIHU9KHM9PT0idSI/dC5wcmVkZWNlc3NvcnM6dC5zdWNjZXNzb3JzKS5iaW5kKHQpLGg9dFBlKHQsaSxyLHUpLGY9clBlKHQsaSxoLnJvb3QsaC5hbGlnbixsPT09InIiKTtsPT09InIiJiYoZj1qZChmLGZ1bmN0aW9uKGQpe3JldHVybi1kfSkpLG5bcytsXT1mfSl9KTt2YXIgYT1pUGUodCxuKTtyZXR1cm4gYVBlKG4sYSksc1BlKG4sdC5ncmFwaCgpLmFsaWduKX1mdW5jdGlvbiBvUGUodCxlLHIpe3JldHVybiBmdW5jdGlvbihuLGksYSl7dmFyIHM9bi5ub2RlKGkpLGw9bi5ub2RlKGEpLHU9MCxoO2lmKHUrPXMud2lkdGgvMixPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywibGFiZWxwb3MiKSlzd2l0Y2gocy5sYWJlbHBvcy50b0xvd2VyQ2FzZSgpKXtjYXNlImwiOmg9LXMud2lkdGgvMjticmVhaztjYXNlInIiOmg9cy53aWR0aC8yO2JyZWFrfWlmKGgmJih1Kz1yP2g6LWgpLGg9MCx1Kz0ocy5kdW1teT9lOnQpLzIsdSs9KGwuZHVtbXk/ZTp0KS8yLHUrPWwud2lkdGgvMixPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobCwibGFiZWxwb3MiKSlzd2l0Y2gobC5sYWJlbHBvcy50b0xvd2VyQ2FzZSgpKXtjYXNlImwiOmg9bC53aWR0aC8yO2JyZWFrO2Nhc2UiciI6aD0tbC53aWR0aC8yO2JyZWFrfXJldHVybiBoJiYodSs9cj9oOi1oKSxoPTAsdX19ZnVuY3Rpb24gbFBlKHQsZSl7cmV0dXJuIHQubm9kZShlKS53aWR0aH12YXIgRmFlPU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTtXbygpO0xjKCk7byhRT2UsImZpbmRUeXBlMUNvbmZsaWN0cyIpO28oWk9lLCJmaW5kVHlwZTJDb25mbGljdHMiKTtvKEpPZSwiZmluZE90aGVySW5uZXJTZWdtZW50Tm9kZSIpO28oUGFlLCJhZGRDb25mbGljdCIpO28oZVBlLCJoYXNDb25mbGljdCIpO28odFBlLCJ2ZXJ0aWNhbEFsaWdubWVudCIpO28oclBlLCJob3Jpem9udGFsQ29tcGFjdGlvbiIpO28oblBlLCJidWlsZEJsb2NrR3JhcGgiKTtvKGlQZSwiZmluZFNtYWxsZXN0V2lkdGhBbGlnbm1lbnQiKTtvKGFQZSwiYWxpZ25Db29yZGluYXRlcyIpO28oc1BlLCJiYWxhbmNlIik7byhCYWUsInBvc2l0aW9uWCIpO28ob1BlLCJzZXAiKTtvKGxQZSwid2lkdGgiKX0pO2Z1bmN0aW9uICRhZSh0KXt0PXBrKHQpLGNQZSh0KSxnUihCYWUodCksZnVuY3Rpb24oZSxyKXt0Lm5vZGUocikueD1lfSl9ZnVuY3Rpb24gY1BlKHQpe3ZhciBlPW9mKHQpLHI9dC5ncmFwaCgpLnJhbmtzZXAsbj0wO0FlKGUsZnVuY3Rpb24oaSl7dmFyIGE9JHMoSmUoaSxmdW5jdGlvbihzKXtyZXR1cm4gdC5ub2RlKHMpLmhlaWdodH0pKTtBZShpLGZ1bmN0aW9uKHMpe3Qubm9kZShzKS55PW4rYS8yfSksbis9YStyfSl9dmFyIHphZT1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7TGMoKTtGYWUoKTtvKCRhZSwicG9zaXRpb24iKTtvKGNQZSwicG9zaXRpb25ZIil9KTtmdW5jdGlvbiBHMih0LGUpe3ZhciByPWUmJmUuZGVidWdUaW1pbmc/TWllOklpZTtyKCJsYXlvdXQiLCgpPT57dmFyIG49cigiICBidWlsZExheW91dEdyYXBoIiwoKT0+YlBlKHQpKTtyKCIgIHJ1bkxheW91dCIsKCk9PnVQZShuLHIpKSxyKCIgIHVwZGF0ZUlucHV0R3JhcGgiLCgpPT5oUGUodCxuKSl9KX1mdW5jdGlvbiB1UGUodCxlKXtlKCIgICAgbWFrZVNwYWNlRm9yRWRnZUxhYmVscyIsKCk9PlRQZSh0KSksZSgiICAgIHJlbW92ZVNlbGZFZGdlcyIsKCk9PkxQZSh0KSksZSgiICAgIGFjeWNsaWMiLCgpPT5DaWUodCkpLGUoIiAgICBuZXN0aW5nR3JhcGgucnVuIiwoKT0+dWFlKHQpKSxlKCIgICAgcmFuayIsKCk9PlhSKHBrKHQpKSksZSgiICAgIGluamVjdEVkZ2VMYWJlbFByb3hpZXMiLCgpPT53UGUodCkpLGUoIiAgICByZW1vdmVFbXB0eVJhbmtzIiwoKT0+UmllKHQpKSxlKCIgICAgbmVzdGluZ0dyYXBoLmNsZWFudXAiLCgpPT5mYWUodCkpLGUoIiAgICBub3JtYWxpemVSYW5rcyIsKCk9PkxpZSh0KSksZSgiICAgIGFzc2lnblJhbmtNaW5NYXgiLCgpPT5rUGUodCkpLGUoIiAgICByZW1vdmVFZGdlTGFiZWxQcm94aWVzIiwoKT0+RVBlKHQpKSxlKCIgICAgbm9ybWFsaXplLnJ1biIsKCk9PlVpZSh0KSksZSgiICAgIHBhcmVudER1bW15Q2hhaW5zIiwoKT0+SWFlKHQpKSxlKCIgICAgYWRkQm9yZGVyU2VnbWVudHMiLCgpPT5QaWUodCkpLGUoIiAgICBvcmRlciIsKCk9Pk5hZSh0KSksZSgiICAgIGluc2VydFNlbGZFZGdlcyIsKCk9PlJQZSh0KSksZSgiICAgIGFkanVzdENvb3JkaW5hdGVTeXN0ZW0iLCgpPT4kaWUodCkpLGUoIiAgICBwb3NpdGlvbiIsKCk9PiRhZSh0KSksZSgiICAgIHBvc2l0aW9uU2VsZkVkZ2VzIiwoKT0+TlBlKHQpKSxlKCIgICAgcmVtb3ZlQm9yZGVyTm9kZXMiLCgpPT5EUGUodCkpLGUoIiAgICBub3JtYWxpemUudW5kbyIsKCk9PkhpZSh0KSksZSgiICAgIGZpeHVwRWRnZUxhYmVsQ29vcmRzIiwoKT0+QVBlKHQpKSxlKCIgICAgdW5kb0Nvb3JkaW5hdGVTeXN0ZW0iLCgpPT56aWUodCkpLGUoIiAgICB0cmFuc2xhdGVHcmFwaCIsKCk9PlNQZSh0KSksZSgiICAgIGFzc2lnbk5vZGVJbnRlcnNlY3RzIiwoKT0+Q1BlKHQpKSxlKCIgICAgcmV2ZXJzZVBvaW50cyIsKCk9Pl9QZSh0KSksZSgiICAgIGFjeWNsaWMudW5kbyIsKCk9PkFpZSh0KSl9ZnVuY3Rpb24gaFBlKHQsZSl7QWUodC5ub2RlcygpLGZ1bmN0aW9uKHIpe3ZhciBuPXQubm9kZShyKSxpPWUubm9kZShyKTtuJiYobi54PWkueCxuLnk9aS55LGUuY2hpbGRyZW4ocikubGVuZ3RoJiYobi53aWR0aD1pLndpZHRoLG4uaGVpZ2h0PWkuaGVpZ2h0KSl9KSxBZSh0LmVkZ2VzKCksZnVuY3Rpb24ocil7dmFyIG49dC5lZGdlKHIpLGk9ZS5lZGdlKHIpO24ucG9pbnRzPWkucG9pbnRzLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLCJ4IikmJihuLng9aS54LG4ueT1pLnkpfSksdC5ncmFwaCgpLndpZHRoPWUuZ3JhcGgoKS53aWR0aCx0LmdyYXBoKCkuaGVpZ2h0PWUuZ3JhcGgoKS5oZWlnaHR9ZnVuY3Rpb24gYlBlKHQpe3ZhciBlPW5ldyBzbih7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMH0pLHI9WlIodC5ncmFwaCgpKTtyZXR1cm4gZS5zZXRHcmFwaChIaCh7fSxkUGUsUVIocixmUGUpLFFkKHIscFBlKSkpLEFlKHQubm9kZXMoKSxmdW5jdGlvbihuKXt2YXIgaT1aUih0Lm5vZGUobikpO2Uuc2V0Tm9kZShuLG5mKFFSKGksbVBlKSxnUGUpKSxlLnNldFBhcmVudChuLHQucGFyZW50KG4pKX0pLEFlKHQuZWRnZXMoKSxmdW5jdGlvbihuKXt2YXIgaT1aUih0LmVkZ2UobikpO2Uuc2V0RWRnZShuLEhoKHt9LHZQZSxRUihpLHlQZSksUWQoaSx4UGUpKSl9KSxlfWZ1bmN0aW9uIFRQZSh0KXt2YXIgZT10LmdyYXBoKCk7ZS5yYW5rc2VwLz0yLEFlKHQuZWRnZXMoKSxmdW5jdGlvbihyKXt2YXIgbj10LmVkZ2Uocik7bi5taW5sZW4qPTIsbi5sYWJlbHBvcy50b0xvd2VyQ2FzZSgpIT09ImMiJiYoZS5yYW5rZGlyPT09IlRCInx8ZS5yYW5rZGlyPT09IkJUIj9uLndpZHRoKz1uLmxhYmVsb2Zmc2V0Om4uaGVpZ2h0Kz1uLmxhYmVsb2Zmc2V0KX0pfWZ1bmN0aW9uIHdQZSh0KXtBZSh0LmVkZ2VzKCksZnVuY3Rpb24oZSl7dmFyIHI9dC5lZGdlKGUpO2lmKHIud2lkdGgmJnIuaGVpZ2h0KXt2YXIgbj10Lm5vZGUoZS52KSxpPXQubm9kZShlLncpLGE9e3Jhbms6KGkucmFuay1uLnJhbmspLzIrbi5yYW5rLGV9O0RjKHQsImVkZ2UtcHJveHkiLGEsIl9lcCIpfX0pfWZ1bmN0aW9uIGtQZSh0KXt2YXIgZT0wO0FlKHQubm9kZXMoKSxmdW5jdGlvbihyKXt2YXIgbj10Lm5vZGUocik7bi5ib3JkZXJUb3AmJihuLm1pblJhbms9dC5ub2RlKG4uYm9yZGVyVG9wKS5yYW5rLG4ubWF4UmFuaz10Lm5vZGUobi5ib3JkZXJCb3R0b20pLnJhbmssZT0kcyhlLG4ubWF4UmFuaykpfSksdC5ncmFwaCgpLm1heFJhbms9ZX1mdW5jdGlvbiBFUGUodCl7QWUodC5ub2RlcygpLGZ1bmN0aW9uKGUpe3ZhciByPXQubm9kZShlKTtyLmR1bW15PT09ImVkZ2UtcHJveHkiJiYodC5lZGdlKHIuZSkubGFiZWxSYW5rPXIucmFuayx0LnJlbW92ZU5vZGUoZSkpfSl9ZnVuY3Rpb24gU1BlKHQpe3ZhciBlPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxyPTAsbj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksaT0wLGE9dC5ncmFwaCgpLHM9YS5tYXJnaW54fHwwLGw9YS5tYXJnaW55fHwwO2Z1bmN0aW9uIHUoaCl7dmFyIGY9aC54LGQ9aC55LHA9aC53aWR0aCxtPWguaGVpZ2h0O2U9TWF0aC5taW4oZSxmLXAvMikscj1NYXRoLm1heChyLGYrcC8yKSxuPU1hdGgubWluKG4sZC1tLzIpLGk9TWF0aC5tYXgoaSxkK20vMil9byh1LCJnZXRFeHRyZW1lcyIpLEFlKHQubm9kZXMoKSxmdW5jdGlvbihoKXt1KHQubm9kZShoKSl9KSxBZSh0LmVkZ2VzKCksZnVuY3Rpb24oaCl7dmFyIGY9dC5lZGdlKGgpO09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChmLCJ4IikmJnUoZil9KSxlLT1zLG4tPWwsQWUodC5ub2RlcygpLGZ1bmN0aW9uKGgpe3ZhciBmPXQubm9kZShoKTtmLngtPWUsZi55LT1ufSksQWUodC5lZGdlcygpLGZ1bmN0aW9uKGgpe3ZhciBmPXQuZWRnZShoKTtBZShmLnBvaW50cyxmdW5jdGlvbihkKXtkLngtPWUsZC55LT1ufSksT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGYsIngiKSYmKGYueC09ZSksT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGYsInkiKSYmKGYueS09bil9KSxhLndpZHRoPXItZStzLGEuaGVpZ2h0PWktbitsfWZ1bmN0aW9uIENQZSh0KXtBZSh0LmVkZ2VzKCksZnVuY3Rpb24oZSl7dmFyIHI9dC5lZGdlKGUpLG49dC5ub2RlKGUudiksaT10Lm5vZGUoZS53KSxhLHM7ci5wb2ludHM/KGE9ci5wb2ludHNbMF0scz1yLnBvaW50c1tyLnBvaW50cy5sZW5ndGgtMV0pOihyLnBvaW50cz1bXSxhPWkscz1uKSxyLnBvaW50cy51bnNoaWZ0KFJSKG4sYSkpLHIucG9pbnRzLnB1c2goUlIoaSxzKSl9KX1mdW5jdGlvbiBBUGUodCl7QWUodC5lZGdlcygpLGZ1bmN0aW9uKGUpe3ZhciByPXQuZWRnZShlKTtpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwociwieCIpKXN3aXRjaCgoci5sYWJlbHBvcz09PSJsInx8ci5sYWJlbHBvcz09PSJyIikmJihyLndpZHRoLT1yLmxhYmVsb2Zmc2V0KSxyLmxhYmVscG9zKXtjYXNlImwiOnIueC09ci53aWR0aC8yK3IubGFiZWxvZmZzZXQ7YnJlYWs7Y2FzZSJyIjpyLngrPXIud2lkdGgvMityLmxhYmVsb2Zmc2V0O2JyZWFrfX0pfWZ1bmN0aW9uIF9QZSh0KXtBZSh0LmVkZ2VzKCksZnVuY3Rpb24oZSl7dmFyIHI9dC5lZGdlKGUpO3IucmV2ZXJzZWQmJnIucG9pbnRzLnJldmVyc2UoKX0pfWZ1bmN0aW9uIERQZSh0KXtBZSh0Lm5vZGVzKCksZnVuY3Rpb24oZSl7aWYodC5jaGlsZHJlbihlKS5sZW5ndGgpe3ZhciByPXQubm9kZShlKSxuPXQubm9kZShyLmJvcmRlclRvcCksaT10Lm5vZGUoci5ib3JkZXJCb3R0b20pLGE9dC5ub2RlKG1hKHIuYm9yZGVyTGVmdCkpLHM9dC5ub2RlKG1hKHIuYm9yZGVyUmlnaHQpKTtyLndpZHRoPU1hdGguYWJzKHMueC1hLngpLHIuaGVpZ2h0PU1hdGguYWJzKGkueS1uLnkpLHIueD1hLngrci53aWR0aC8yLHIueT1uLnkrci5oZWlnaHQvMn19KSxBZSh0Lm5vZGVzKCksZnVuY3Rpb24oZSl7dC5ub2RlKGUpLmR1bW15PT09ImJvcmRlciImJnQucmVtb3ZlTm9kZShlKX0pfWZ1bmN0aW9uIExQZSh0KXtBZSh0LmVkZ2VzKCksZnVuY3Rpb24oZSl7aWYoZS52PT09ZS53KXt2YXIgcj10Lm5vZGUoZS52KTtyLnNlbGZFZGdlc3x8KHIuc2VsZkVkZ2VzPVtdKSxyLnNlbGZFZGdlcy5wdXNoKHtlLGxhYmVsOnQuZWRnZShlKX0pLHQucmVtb3ZlRWRnZShlKX19KX1mdW5jdGlvbiBSUGUodCl7dmFyIGU9b2YodCk7QWUoZSxmdW5jdGlvbihyKXt2YXIgbj0wO0FlKHIsZnVuY3Rpb24oaSxhKXt2YXIgcz10Lm5vZGUoaSk7cy5vcmRlcj1hK24sQWUocy5zZWxmRWRnZXMsZnVuY3Rpb24obCl7RGModCwic2VsZmVkZ2UiLHt3aWR0aDpsLmxhYmVsLndpZHRoLGhlaWdodDpsLmxhYmVsLmhlaWdodCxyYW5rOnMucmFuayxvcmRlcjphKyArK24sZTpsLmUsbGFiZWw6bC5sYWJlbH0sIl9zZSIpfSksZGVsZXRlIHMuc2VsZkVkZ2VzfSl9KX1mdW5jdGlvbiBOUGUodCl7QWUodC5ub2RlcygpLGZ1bmN0aW9uKGUpe3ZhciByPXQubm9kZShlKTtpZihyLmR1bW15PT09InNlbGZlZGdlIil7dmFyIG49dC5ub2RlKHIuZS52KSxpPW4ueCtuLndpZHRoLzIsYT1uLnkscz1yLngtaSxsPW4uaGVpZ2h0LzI7dC5zZXRFZGdlKHIuZSxyLmxhYmVsKSx0LnJlbW92ZU5vZGUoZSksci5sYWJlbC5wb2ludHM9W3t4OmkrMipzLzMseTphLWx9LHt4OmkrNSpzLzYseTphLWx9LHt4Omkrcyx5OmF9LHt4OmkrNSpzLzYseTphK2x9LHt4OmkrMipzLzMseTphK2x9XSxyLmxhYmVsLng9ci54LHIubGFiZWwueT1yLnl9fSl9ZnVuY3Rpb24gUVIodCxlKXtyZXR1cm4gamQoUWQodCxlKSxOdW1iZXIpfWZ1bmN0aW9uIFpSKHQpe3ZhciBlPXt9O3JldHVybiBBZSh0LGZ1bmN0aW9uKHIsbil7ZVtuLnRvTG93ZXJDYXNlKCldPXJ9KSxlfXZhciBmUGUsZFBlLHBQZSxtUGUsZ1BlLHlQZSx2UGUseFBlLEdhZT1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7V28oKTtCaWUoKTtWaWUoKTtMUigpO1BSKCk7alIoKTtkYWUoKTtNYWUoKTtPYWUoKTt6YWUoKTtMYygpO28oRzIsImxheW91dCIpO28odVBlLCJydW5MYXlvdXQiKTtvKGhQZSwidXBkYXRlSW5wdXRHcmFwaCIpO2ZQZT1bIm5vZGVzZXAiLCJlZGdlc2VwIiwicmFua3NlcCIsIm1hcmdpbngiLCJtYXJnaW55Il0sZFBlPXtyYW5rc2VwOjUwLGVkZ2VzZXA6MjAsbm9kZXNlcDo1MCxyYW5rZGlyOiJ0YiJ9LHBQZT1bImFjeWNsaWNlciIsInJhbmtlciIsInJhbmtkaXIiLCJhbGlnbiJdLG1QZT1bIndpZHRoIiwiaGVpZ2h0Il0sZ1BlPXt3aWR0aDowLGhlaWdodDowfSx5UGU9WyJtaW5sZW4iLCJ3ZWlnaHQiLCJ3aWR0aCIsImhlaWdodCIsImxhYmVsb2Zmc2V0Il0sdlBlPXttaW5sZW46MSx3ZWlnaHQ6MSx3aWR0aDowLGhlaWdodDowLGxhYmVsb2Zmc2V0OjEwLGxhYmVscG9zOiJyIn0seFBlPVsibGFiZWxwb3MiXTtvKGJQZSwiYnVpbGRMYXlvdXRHcmFwaCIpO28oVFBlLCJtYWtlU3BhY2VGb3JFZGdlTGFiZWxzIik7byh3UGUsImluamVjdEVkZ2VMYWJlbFByb3hpZXMiKTtvKGtQZSwiYXNzaWduUmFua01pbk1heCIpO28oRVBlLCJyZW1vdmVFZGdlTGFiZWxQcm94aWVzIik7byhTUGUsInRyYW5zbGF0ZUdyYXBoIik7byhDUGUsImFzc2lnbk5vZGVJbnRlcnNlY3RzIik7byhBUGUsImZpeHVwRWRnZUxhYmVsQ29vcmRzIik7byhfUGUsInJldmVyc2VQb2ludHNGb3JSZXZlcnNlZEVkZ2VzIik7byhEUGUsInJlbW92ZUJvcmRlck5vZGVzIik7byhMUGUsInJlbW92ZVNlbGZFZGdlcyIpO28oUlBlLCJpbnNlcnRTZWxmRWRnZXMiKTtvKE5QZSwicG9zaXRpb25TZWxmRWRnZXMiKTtvKFFSLCJzZWxlY3ROdW1iZXJBdHRycyIpO28oWlIsImNhbm9uaWNhbGl6ZSIpfSk7dmFyIEpSPU4oKCk9PnsidXNlIHN0cmljdCI7TFIoKTtHYWUoKTtQUigpO2pSKCl9KTtmdW5jdGlvbiBxbyh0KXt2YXIgZT17b3B0aW9uczp7ZGlyZWN0ZWQ6dC5pc0RpcmVjdGVkKCksbXVsdGlncmFwaDp0LmlzTXVsdGlncmFwaCgpLGNvbXBvdW5kOnQuaXNDb21wb3VuZCgpfSxub2RlczpNUGUodCksZWRnZXM6SVBlKHQpfTtyZXR1cm4gbXIodC5ncmFwaCgpKXx8KGUudmFsdWU9YW4odC5ncmFwaCgpKSksZX1mdW5jdGlvbiBNUGUodCl7cmV0dXJuIEplKHQubm9kZXMoKSxmdW5jdGlvbihlKXt2YXIgcj10Lm5vZGUoZSksbj10LnBhcmVudChlKSxpPXt2OmV9O3JldHVybiBtcihyKXx8KGkudmFsdWU9ciksbXIobil8fChpLnBhcmVudD1uKSxpfSl9ZnVuY3Rpb24gSVBlKHQpe3JldHVybiBKZSh0LmVkZ2VzKCksZnVuY3Rpb24oZSl7dmFyIHI9dC5lZGdlKGUpLG49e3Y6ZS52LHc6ZS53fTtyZXR1cm4gbXIoZS5uYW1lKXx8KG4ubmFtZT1lLm5hbWUpLG1yKHIpfHwobi52YWx1ZT1yKSxufSl9dmFyIGVOPU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTtoaygpO28ocW8sIndyaXRlIik7byhNUGUsIndyaXRlTm9kZXMiKTtvKElQZSwid3JpdGVFZGdlcyIpfSk7dmFyIFRyLHRwLEhhZSxXYWUsdmssT1BlLHFhZSxZYWUsUFBlLFltLFVhZSxYYWUsamFlLEthZSxRYWUsWmFlPU4oKCk9PnsidXNlIHN0cmljdCI7eXQoKTtXbygpO2VOKCk7VHI9bmV3IE1hcCx0cD1uZXcgTWFwLEhhZT1uZXcgTWFwLFdhZT1vKCgpPT57dHAuY2xlYXIoKSxIYWUuY2xlYXIoKSxUci5jbGVhcigpfSwiY2xlYXIiKSx2az1vKCh0LGUpPT57bGV0IHI9dHAuZ2V0KGUpfHxbXTtyZXR1cm4gWC50cmFjZSgiSW4gaXNEZXNjZW5kYW50IixlLCIgIix0LCIgPSAiLHIuaW5jbHVkZXModCkpLHIuaW5jbHVkZXModCl9LCJpc0Rlc2NlbmRhbnQiKSxPUGU9bygodCxlKT0+e2xldCByPXRwLmdldChlKXx8W107cmV0dXJuIFguaW5mbygiRGVzY2VuZGFudHMgb2YgIixlLCIgaXMgIixyKSxYLmluZm8oIkVkZ2UgaXMgIix0KSx0LnY9PT1lfHx0Lnc9PT1lPyExOnI/ci5pbmNsdWRlcyh0LnYpfHx2ayh0LnYsZSl8fHZrKHQudyxlKXx8ci5pbmNsdWRlcyh0LncpOihYLmRlYnVnKCJUaWx0LCAiLGUsIixub3QgaW4gZGVzY2VuZGFudHMiKSwhMSl9LCJlZGdlSW5DbHVzdGVyIikscWFlPW8oKHQsZSxyLG4pPT57WC53YXJuKCJDb3B5aW5nIGNoaWxkcmVuIG9mICIsdCwicm9vdCIsbiwiZGF0YSIsZS5ub2RlKHQpLG4pO2xldCBpPWUuY2hpbGRyZW4odCl8fFtdO3QhPT1uJiZpLnB1c2godCksWC53YXJuKCJDb3B5aW5nIChub2RlcykgY2x1c3RlcklkIix0LCJub2RlcyIsaSksaS5mb3JFYWNoKGE9PntpZihlLmNoaWxkcmVuKGEpLmxlbmd0aD4wKXFhZShhLGUscixuKTtlbHNle2xldCBzPWUubm9kZShhKTtYLmluZm8oImNwICIsYSwiIHRvICIsbiwiIHdpdGggcGFyZW50ICIsdCksci5zZXROb2RlKGEscyksbiE9PWUucGFyZW50KGEpJiYoWC53YXJuKCJTZXR0aW5nIHBhcmVudCIsYSxlLnBhcmVudChhKSksci5zZXRQYXJlbnQoYSxlLnBhcmVudChhKSkpLHQhPT1uJiZhIT09dD8oWC5kZWJ1ZygiU2V0dGluZyBwYXJlbnQiLGEsdCksci5zZXRQYXJlbnQoYSx0KSk6KFguaW5mbygiSW4gY29weSAiLHQsInJvb3QiLG4sImRhdGEiLGUubm9kZSh0KSxuKSxYLmRlYnVnKCJOb3QgU2V0dGluZyBwYXJlbnQgZm9yIG5vZGU9IixhLCJjbHVzdGVyIT09cm9vdElkIix0IT09biwibm9kZSE9PWNsdXN0ZXJJZCIsYSE9PXQpKTtsZXQgbD1lLmVkZ2VzKGEpO1guZGVidWcoIkNvcHlpbmcgRWRnZXMiLGwpLGwuZm9yRWFjaCh1PT57WC5pbmZvKCJFZGdlIix1KTtsZXQgaD1lLmVkZ2UodS52LHUudyx1Lm5hbWUpO1guaW5mbygiRWRnZSBkYXRhIixoLG4pO3RyeXtPUGUodSxuKT8oWC5pbmZvKCJDb3B5aW5nIGFzICIsdS52LHUudyxoLHUubmFtZSksci5zZXRFZGdlKHUudix1LncsaCx1Lm5hbWUpLFguaW5mbygibmV3R3JhcGggZWRnZXMgIixyLmVkZ2VzKCksci5lZGdlKHIuZWRnZXMoKVswXSkpKTpYLmluZm8oIlNraXBwaW5nIGNvcHkgb2YgZWRnZSAiLHUudiwiLS0+Iix1LncsIiByb290SWQ6ICIsbiwiIGNsdXN0ZXJJZDoiLHQpfWNhdGNoKGYpe1guZXJyb3IoZil9fSl9WC5kZWJ1ZygiUmVtb3Zpbmcgbm9kZSIsYSksZS5yZW1vdmVOb2RlKGEpfSl9LCJjb3B5IiksWWFlPW8oKHQsZSk9PntsZXQgcj1lLmNoaWxkcmVuKHQpLG49Wy4uLnJdO2ZvcihsZXQgaSBvZiByKUhhZS5zZXQoaSx0KSxuPVsuLi5uLC4uLllhZShpLGUpXTtyZXR1cm4gbn0sImV4dHJhY3REZXNjZW5kYW50cyIpLFBQZT1vKCh0LGUscik9PntsZXQgbj10LmVkZ2VzKCkuZmlsdGVyKHU9PnUudj09PWV8fHUudz09PWUpLGk9dC5lZGdlcygpLmZpbHRlcih1PT51LnY9PT1yfHx1Lnc9PT1yKSxhPW4ubWFwKHU9Pih7djp1LnY9PT1lP3I6dS52LHc6dS53PT09ZT9lOnUud30pKSxzPWkubWFwKHU9Pih7djp1LnYsdzp1Lnd9KSk7cmV0dXJuIGEuZmlsdGVyKHU9PnMuc29tZShoPT51LnY9PT1oLnYmJnUudz09PWgudykpfSwiZmluZENvbW1vbkVkZ2VzIiksWW09bygodCxlLHIpPT57bGV0IG49ZS5jaGlsZHJlbih0KTtpZihYLnRyYWNlKCJTZWFyY2hpbmcgY2hpbGRyZW4gb2YgaWQgIix0LG4pLG4ubGVuZ3RoPDEpcmV0dXJuIHQ7bGV0IGk7Zm9yKGxldCBhIG9mIG4pe2xldCBzPVltKGEsZSxyKSxsPVBQZShlLHIscyk7aWYocylpZihsLmxlbmd0aD4wKWk9cztlbHNlIHJldHVybiBzfXJldHVybiBpfSwiZmluZE5vbkNsdXN0ZXJDaGlsZCIpLFVhZT1vKHQ9PiFUci5oYXModCl8fCFUci5nZXQodCkuZXh0ZXJuYWxDb25uZWN0aW9ucz90OlRyLmhhcyh0KT9Uci5nZXQodCkuaWQ6dCwiZ2V0QW5jaG9ySWQiKSxYYWU9bygodCxlKT0+e2lmKCF0fHxlPjEwKXtYLmRlYnVnKCJPcHRpbmcgb3V0LCBubyBncmFwaCAiKTtyZXR1cm59ZWxzZSBYLmRlYnVnKCJPcHRpbmcgaW4sIGdyYXBoICIpO3Qubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3QuY2hpbGRyZW4ocikubGVuZ3RoPjAmJihYLndhcm4oIkNsdXN0ZXIgaWRlbnRpZmllZCIsciwiIFJlcGxhY2VtZW50IGlkIGluIGVkZ2VzOiAiLFltKHIsdCxyKSksdHAuc2V0KHIsWWFlKHIsdCkpLFRyLnNldChyLHtpZDpZbShyLHQsciksY2x1c3RlckRhdGE6dC5ub2RlKHIpfSkpfSksdC5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24ocil7bGV0IG49dC5jaGlsZHJlbihyKSxpPXQuZWRnZXMoKTtuLmxlbmd0aD4wPyhYLmRlYnVnKCJDbHVzdGVyIGlkZW50aWZpZWQiLHIsdHApLGkuZm9yRWFjaChhPT57bGV0IHM9dmsoYS52LHIpLGw9dmsoYS53LHIpO3NebCYmKFgud2FybigiRWRnZTogIixhLCIgbGVhdmVzIGNsdXN0ZXIgIixyKSxYLndhcm4oIkRlc2NlbmRhbnRzIG9mIFhYWCAiLHIsIjogIix0cC5nZXQocikpLFRyLmdldChyKS5leHRlcm5hbENvbm5lY3Rpb25zPSEwKX0pKTpYLmRlYnVnKCJOb3QgYSBjbHVzdGVyICIscix0cCl9KTtmb3IobGV0IHIgb2YgVHIua2V5cygpKXtsZXQgbj1Uci5nZXQocikuaWQsaT10LnBhcmVudChuKTtpIT09ciYmVHIuaGFzKGkpJiYhVHIuZ2V0KGkpLmV4dGVybmFsQ29ubmVjdGlvbnMmJihUci5nZXQocikuaWQ9aSl9dC5lZGdlcygpLmZvckVhY2goZnVuY3Rpb24ocil7bGV0IG49dC5lZGdlKHIpO1gud2FybigiRWRnZSAiK3IudisiIC0+ICIrci53KyI6ICIrSlNPTi5zdHJpbmdpZnkocikpLFgud2FybigiRWRnZSAiK3IudisiIC0+ICIrci53KyI6ICIrSlNPTi5zdHJpbmdpZnkodC5lZGdlKHIpKSk7bGV0IGk9ci52LGE9ci53O2lmKFgud2FybigiRml4IFhYWCIsVHIsImlkczoiLHIudixyLncsIlRyYW5zbGF0aW5nOiAiLFRyLmdldChyLnYpLCIgLS0tICIsVHIuZ2V0KHIudykpLFRyLmdldChyLnYpfHxUci5nZXQoci53KSl7aWYoWC53YXJuKCJGaXhpbmcgYW5kIHRyeWluZyAtIHJlbW92aW5nIFhYWCIsci52LHIudyxyLm5hbWUpLGk9VWFlKHIudiksYT1VYWUoci53KSx0LnJlbW92ZUVkZ2Uoci52LHIudyxyLm5hbWUpLGkhPT1yLnYpe2xldCBzPXQucGFyZW50KGkpO1RyLmdldChzKS5leHRlcm5hbENvbm5lY3Rpb25zPSEwLG4uZnJvbUNsdXN0ZXI9ci52fWlmKGEhPT1yLncpe2xldCBzPXQucGFyZW50KGEpO1RyLmdldChzKS5leHRlcm5hbENvbm5lY3Rpb25zPSEwLG4udG9DbHVzdGVyPXIud31YLndhcm4oIkZpeCBSZXBsYWNpbmcgd2l0aCBYWFgiLGksYSxyLm5hbWUpLHQuc2V0RWRnZShpLGEsbixyLm5hbWUpfX0pLFgud2FybigiQWRqdXN0ZWQgR3JhcGgiLHFvKHQpKSxqYWUodCwwKSxYLnRyYWNlKFRyKX0sImFkanVzdENsdXN0ZXJzQW5kRWRnZXMiKSxqYWU9bygodCxlKT0+e2lmKFgud2FybigiZXh0cmFjdG9yIC0gIixlLHFvKHQpLHQuY2hpbGRyZW4oIkQiKSksZT4xMCl7WC5lcnJvcigiQmFpbGluZyBvdXQiKTtyZXR1cm59bGV0IHI9dC5ub2RlcygpLG49ITE7Zm9yKGxldCBpIG9mIHIpe2xldCBhPXQuY2hpbGRyZW4oaSk7bj1ufHxhLmxlbmd0aD4wfWlmKCFuKXtYLmRlYnVnKCJEb25lLCBubyBub2RlIGhhcyBjaGlsZHJlbiIsdC5ub2RlcygpKTtyZXR1cm59WC5kZWJ1ZygiTm9kZXMgPSAiLHIsZSk7Zm9yKGxldCBpIG9mIHIpaWYoWC5kZWJ1ZygiRXh0cmFjdGluZyBub2RlIixpLFRyLFRyLmhhcyhpKSYmIVRyLmdldChpKS5leHRlcm5hbENvbm5lY3Rpb25zLCF0LnBhcmVudChpKSx0Lm5vZGUoaSksdC5jaGlsZHJlbigiRCIpLCIgRGVwdGggIixlKSwhVHIuaGFzKGkpKVguZGVidWcoIk5vdCBhIGNsdXN0ZXIiLGksZSk7ZWxzZSBpZighVHIuZ2V0KGkpLmV4dGVybmFsQ29ubmVjdGlvbnMmJnQuY2hpbGRyZW4oaSkmJnQuY2hpbGRyZW4oaSkubGVuZ3RoPjApe1gud2FybigiQ2x1c3RlciB3aXRob3V0IGV4dGVybmFsIGNvbm5lY3Rpb25zLCB3aXRob3V0IGEgcGFyZW50IGFuZCB3aXRoIGNoaWxkcmVuIixpLGUpO2xldCBzPXQuZ3JhcGgoKS5yYW5rZGlyPT09IlRCIj8iTFIiOiJUQiI7VHIuZ2V0KGkpPy5jbHVzdGVyRGF0YT8uZGlyJiYocz1Uci5nZXQoaSkuY2x1c3RlckRhdGEuZGlyLFgud2FybigiRml4aW5nIGRpciIsVHIuZ2V0KGkpLmNsdXN0ZXJEYXRhLmRpcixzKSk7bGV0IGw9bmV3IHNuKHttdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwfSkuc2V0R3JhcGgoe3JhbmtkaXI6cyxub2Rlc2VwOjUwLHJhbmtzZXA6NTAsbWFyZ2lueDo4LG1hcmdpbnk6OH0pLnNldERlZmF1bHRFZGdlTGFiZWwoZnVuY3Rpb24oKXtyZXR1cm57fX0pO1gud2FybigiT2xkIGdyYXBoIGJlZm9yZSBjb3B5Iixxbyh0KSkscWFlKGksdCxsLGkpLHQuc2V0Tm9kZShpLHtjbHVzdGVyTm9kZTohMCxpZDppLGNsdXN0ZXJEYXRhOlRyLmdldChpKS5jbHVzdGVyRGF0YSxsYWJlbDpUci5nZXQoaSkubGFiZWwsZ3JhcGg6bH0pLFgud2FybigiTmV3IGdyYXBoIGFmdGVyIGNvcHkgbm9kZTogKCIsaSwiKSIscW8obCkpLFguZGVidWcoIk9sZCBncmFwaCBhZnRlciBjb3B5Iixxbyh0KSl9ZWxzZSBYLndhcm4oIkNsdXN0ZXIgKiogIixpLCIgKipub3QgbWVldGluZyB0aGUgY3JpdGVyaWEgIWV4dGVybmFsQ29ubmVjdGlvbnM6IiwhVHIuZ2V0KGkpLmV4dGVybmFsQ29ubmVjdGlvbnMsIiBubyBwYXJlbnQ6ICIsIXQucGFyZW50KGkpLCIgY2hpbGRyZW4gIix0LmNoaWxkcmVuKGkpJiZ0LmNoaWxkcmVuKGkpLmxlbmd0aD4wLHQuY2hpbGRyZW4oIkQiKSxlKSxYLmRlYnVnKFRyKTtyPXQubm9kZXMoKSxYLndhcm4oIk5ldyBsaXN0IG9mIG5vZGVzIixyKTtmb3IobGV0IGkgb2Ygcil7bGV0IGE9dC5ub2RlKGkpO1gud2FybigiIE5vdyBuZXh0IGxldmVsIixpLGEpLGE/LmNsdXN0ZXJOb2RlJiZqYWUoYS5ncmFwaCxlKzEpfX0sImV4dHJhY3RvciIpLEthZT1vKCh0LGUpPT57aWYoZS5sZW5ndGg9PT0wKXJldHVybltdO2xldCByPU9iamVjdC5hc3NpZ24oW10sZSk7cmV0dXJuIGUuZm9yRWFjaChuPT57bGV0IGk9dC5jaGlsZHJlbihuKSxhPUthZSh0LGkpO3I9Wy4uLnIsLi4uYV19KSxyfSwic29ydGVyIiksUWFlPW8odD0+S2FlKHQsdC5jaGlsZHJlbigpKSwic29ydE5vZGVzQnlIaWVyYXJjaHkiKX0pO3ZhciBlc2U9e307dXIoZXNlLHtyZW5kZXI6KCk9PkJQZX0pO3ZhciBKYWUsQlBlLHRzZT1OKCgpPT57InVzZSBzdHJpY3QiO0pSKCk7ZU4oKTtXbygpO0ZMKCk7RnQoKTtaYWUoKTttdygpO2F3KCk7QkwoKTt5dCgpO1IyKCk7R3QoKTtKYWU9byhhc3luYyh0LGUscixuLGksYSk9PntYLndhcm4oIkdyYXBoIGluIHJlY3Vyc2l2ZSByZW5kZXI6WEFYIixxbyhlKSxpKTtsZXQgcz1lLmdyYXBoKCkucmFua2RpcjtYLnRyYWNlKCJEaXIgaW4gcmVjdXJzaXZlIHJlbmRlciAtIGRpcjoiLHMpO2xldCBsPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJyb290Iik7ZS5ub2RlcygpP1guaW5mbygiUmVjdXJzaXZlIHJlbmRlciBYWFgiLGUubm9kZXMoKSk6WC5pbmZvKCJObyBub2RlcyBmb3VuZCBmb3IiLGUpLGUuZWRnZXMoKS5sZW5ndGg+MCYmWC5pbmZvKCJSZWN1cnNpdmUgZWRnZXMiLGUuZWRnZShlLmVkZ2VzKClbMF0pKTtsZXQgdT1sLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiY2x1c3RlcnMiKSxoPWwuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlUGF0aHMiKSxmPWwuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlTGFiZWxzIiksZD1sLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZXMiKTthd2FpdCBQcm9taXNlLmFsbChlLm5vZGVzKCkubWFwKGFzeW5jIGZ1bmN0aW9uKHkpe2xldCB2PWUubm9kZSh5KTtpZihpIT09dm9pZCAwKXtsZXQgeD1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGkuY2x1c3RlckRhdGEpKTtYLnRyYWNlKGBTZXR0aW5nIGRhdGEgZm9yIHBhcmVudCBjbHVzdGVyIFhYWAogTm9kZS5pZCA9IGAseSxgCiBkYXRhPWAseC5oZWlnaHQsYApQYXJlbnQgY2x1c3RlcmAsaS5oZWlnaHQpLGUuc2V0Tm9kZShpLmlkLHgpLGUucGFyZW50KHkpfHwoWC50cmFjZSgiU2V0dGluZyBwYXJlbnQiLHksaS5pZCksZS5zZXRQYXJlbnQoeSxpLmlkLHgpKX1pZihYLmluZm8oIihJbnNlcnQpIE5vZGUgWFhYIit5KyI6ICIrSlNPTi5zdHJpbmdpZnkoZS5ub2RlKHkpKSksdj8uY2x1c3Rlck5vZGUpe1guaW5mbygiQ2x1c3RlciBpZGVudGlmaWVkIFhCWCIseSx2LndpZHRoLGUubm9kZSh5KSk7bGV0e3JhbmtzZXA6eCxub2Rlc2VwOmJ9PWUuZ3JhcGgoKTt2LmdyYXBoLnNldEdyYXBoKHsuLi52LmdyYXBoLmdyYXBoKCkscmFua3NlcDp4KzI1LG5vZGVzZXA6Yn0pO2xldCBUPWF3YWl0IEphZShkLHYuZ3JhcGgscixuLGUubm9kZSh5KSxhKSxTPVQuZWxlbTtLZSh2LFMpLHYuZGlmZj1ULmRpZmZ8fDAsWC5pbmZvKCJOZXcgY29tcG91bmQgbm9kZSBhZnRlciByZWN1cnNpdmUgcmVuZGVyIFhBWCIseSwid2lkdGgiLHYud2lkdGgsImhlaWdodCIsdi5oZWlnaHQpLHZlZShTLHYpfWVsc2UgZS5jaGlsZHJlbih5KS5sZW5ndGg+MD8oWC50cmFjZSgiQ2x1c3RlciAtIHRoZSBub24gcmVjdXJzaXZlIHBhdGggWEJYIix5LHYuaWQsdix2LndpZHRoLCJHcmFwaDoiLGUpLFgudHJhY2UoWW0odi5pZCxlKSksVHIuc2V0KHYuaWQse2lkOlltKHYuaWQsZSksbm9kZTp2fSkpOihYLnRyYWNlKCJOb2RlIC0gdGhlIG5vbiByZWN1cnNpdmUgcGF0aCBYQVgiLHksZCxlLm5vZGUoeSkscyksYXdhaXQgQW0oZCxlLm5vZGUoeSkse2NvbmZpZzphLGRpcjpzfSkpfSkpLGF3YWl0IG8oYXN5bmMoKT0+e2xldCB5PWUuZWRnZXMoKS5tYXAoYXN5bmMgZnVuY3Rpb24odil7bGV0IHg9ZS5lZGdlKHYudix2Lncsdi5uYW1lKTtYLmluZm8oIkVkZ2UgIit2LnYrIiAtPiAiK3YudysiOiAiK0pTT04uc3RyaW5naWZ5KHYpKSxYLmluZm8oIkVkZ2UgIit2LnYrIiAtPiAiK3YudysiOiAiLHYsIiAiLEpTT04uc3RyaW5naWZ5KGUuZWRnZSh2KSkpLFguaW5mbygiRml4IixUciwiaWRzOiIsdi52LHYudywiVHJhbnNsYXRpbmc6ICIsVHIuZ2V0KHYudiksVHIuZ2V0KHYudykpLGF3YWl0IHV3KGYseCl9KTthd2FpdCBQcm9taXNlLmFsbCh5KX0sInByb2Nlc3NFZGdlcyIpKCksWC5pbmZvKCJHcmFwaCBiZWZvcmUgbGF5b3V0OiIsSlNPTi5zdHJpbmdpZnkocW8oZSkpKSxYLmluZm8oIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBYWFgiKSxYLmluZm8oIiMjIyAgICAgICAgICAgICAgICBMYXlvdXQgICAgICAgICAgICAgICAgICMjIyBYWFgiKSxYLmluZm8oIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBYWFgiKSxHMihlKSxYLmluZm8oIkdyYXBoIGFmdGVyIGxheW91dDoiLEpTT04uc3RyaW5naWZ5KHFvKGUpKSk7bGV0IG09MCx7c3ViR3JhcGhUaXRsZVRvdGFsTWFyZ2luOmd9PUJ1KGEpO3JldHVybiBhd2FpdCBQcm9taXNlLmFsbChRYWUoZSkubWFwKGFzeW5jIGZ1bmN0aW9uKHkpe2xldCB2PWUubm9kZSh5KTtpZihYLmluZm8oIlBvc2l0aW9uIFhCWCA9PiAiK3krIjogKCIrdi54LCIsIit2LnksIikgd2lkdGg6ICIsdi53aWR0aCwiIGhlaWdodDogIix2LmhlaWdodCksdj8uY2x1c3Rlck5vZGUpdi55Kz1nLFguaW5mbygiQSB0YWludGVkIGNsdXN0ZXIgbm9kZSBYQlgxIix5LHYuaWQsdi53aWR0aCx2LmhlaWdodCx2Lngsdi55LGUucGFyZW50KHkpKSxUci5nZXQodi5pZCkubm9kZT12LE0yKHYpO2Vsc2UgaWYoZS5jaGlsZHJlbih5KS5sZW5ndGg+MCl7WC5pbmZvKCJBIHB1cmUgY2x1c3RlciBub2RlIFhCWDEiLHksdi5pZCx2Lngsdi55LHYud2lkdGgsdi5oZWlnaHQsZS5wYXJlbnQoeSkpLHYuaGVpZ2h0Kz1nLGUubm9kZSh2LnBhcmVudElkKTtsZXQgeD12Py5wYWRkaW5nLzJ8fDAsYj12Py5sYWJlbEJCb3g/LmhlaWdodHx8MCxUPWIteHx8MDtYLmRlYnVnKCJPZmZzZXRZIixULCJsYWJlbEhlaWdodCIsYiwiaGFsZlBhZGRpbmciLHgpLGF3YWl0IENtKHUsdiksVHIuZ2V0KHYuaWQpLm5vZGU9dn1lbHNle2xldCB4PWUubm9kZSh2LnBhcmVudElkKTt2LnkrPWcvMixYLmluZm8oIkEgcmVndWxhciBub2RlIFhCWDEgLSB1c2luZyB0aGUgcGFkZGluZyIsdi5pZCwicGFyZW50Iix2LnBhcmVudElkLHYud2lkdGgsdi5oZWlnaHQsdi54LHYueSwib2Zmc2V0WSIsdi5vZmZzZXRZLCJwYXJlbnQiLHgseD8ub2Zmc2V0WSx2KSxNMih2KX19KSksZS5lZGdlcygpLmZvckVhY2goZnVuY3Rpb24oeSl7bGV0IHY9ZS5lZGdlKHkpO1guaW5mbygiRWRnZSAiK3kudisiIC0+ICIreS53KyI6ICIrSlNPTi5zdHJpbmdpZnkodiksdiksdi5wb2ludHMuZm9yRWFjaChTPT5TLnkrPWcvMik7bGV0IHg9ZS5ub2RlKHkudik7dmFyIGI9ZS5ub2RlKHkudyk7bGV0IFQ9ZncoaCx2LFRyLHIseCxiLG4pO2h3KHYsVCl9KSxlLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbih5KXtsZXQgdj1lLm5vZGUoeSk7WC5pbmZvKHksdi50eXBlLHYuZGlmZiksdi5pc0dyb3VwJiYobT12LmRpZmYpfSksWC53YXJuKCJSZXR1cm5pbmcgZnJvbSByZWN1cnNpdmUgcmVuZGVyIFhBWCIsbCxtKSx7ZWxlbTpsLGRpZmY6bX19LCJyZWN1cnNpdmVSZW5kZXIiKSxCUGU9byhhc3luYyh0LGUpPT57bGV0IHI9bmV3IHNuKHttdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwfSkuc2V0R3JhcGgoe3JhbmtkaXI6dC5kaXJlY3Rpb24sbm9kZXNlcDp0LmNvbmZpZz8ubm9kZVNwYWNpbmd8fHQuY29uZmlnPy5mbG93Y2hhcnQ/Lm5vZGVTcGFjaW5nfHx0Lm5vZGVTcGFjaW5nLHJhbmtzZXA6dC5jb25maWc/LnJhbmtTcGFjaW5nfHx0LmNvbmZpZz8uZmxvd2NoYXJ0Py5yYW5rU3BhY2luZ3x8dC5yYW5rU3BhY2luZyxtYXJnaW54OjgsbWFyZ2lueTo4fSkuc2V0RGVmYXVsdEVkZ2VMYWJlbChmdW5jdGlvbigpe3JldHVybnt9fSksbj1lLnNlbGVjdCgiZyIpO2R3KG4sdC5tYXJrZXJzLHQudHlwZSx0LmRpYWdyYW1JZCkseGVlKCkseWVlKCksaGVlKCksV2FlKCksdC5ub2Rlcy5mb3JFYWNoKGE9PntyLnNldE5vZGUoYS5pZCx7Li4uYX0pLGEucGFyZW50SWQmJnIuc2V0UGFyZW50KGEuaWQsYS5wYXJlbnRJZCl9KSxYLmRlYnVnKCJFZGdlczoiLHQuZWRnZXMpLHQuZWRnZXMuZm9yRWFjaChhPT57aWYoYS5zdGFydD09PWEuZW5kKXtsZXQgcz1hLnN0YXJ0LGw9cysiLS0tIitzKyItLS0xIix1PXMrIi0tLSIrcysiLS0tMiIsaD1yLm5vZGUocyk7ci5zZXROb2RlKGwse2RvbUlkOmwsaWQ6bCxwYXJlbnRJZDpoLnBhcmVudElkLGxhYmVsU3R5bGU6IiIsbGFiZWw6IiIscGFkZGluZzowLHNoYXBlOiJsYWJlbFJlY3QiLHN0eWxlOiIiLHdpZHRoOjEwLGhlaWdodDoxMH0pLHIuc2V0UGFyZW50KGwsaC5wYXJlbnRJZCksci5zZXROb2RlKHUse2RvbUlkOnUsaWQ6dSxwYXJlbnRJZDpoLnBhcmVudElkLGxhYmVsU3R5bGU6IiIscGFkZGluZzowLHNoYXBlOiJsYWJlbFJlY3QiLGxhYmVsOiIiLHN0eWxlOiIiLHdpZHRoOjEwLGhlaWdodDoxMH0pLHIuc2V0UGFyZW50KHUsaC5wYXJlbnRJZCk7bGV0IGY9c3RydWN0dXJlZENsb25lKGEpLGQ9c3RydWN0dXJlZENsb25lKGEpLHA9c3RydWN0dXJlZENsb25lKGEpO2YubGFiZWw9IiIsZi5hcnJvd1R5cGVFbmQ9Im5vbmUiLGYuaWQ9cysiLWN5Y2xpYy1zcGVjaWFsLTEiLGQuYXJyb3dUeXBlU3RhcnQ9Im5vbmUiLGQuYXJyb3dUeXBlRW5kPSJub25lIixkLmlkPXMrIi1jeWNsaWMtc3BlY2lhbC1taWQiLHAubGFiZWw9IiIsaC5pc0dyb3VwJiYoZi5mcm9tQ2x1c3Rlcj1zLHAudG9DbHVzdGVyPXMpLHAuaWQ9cysiLWN5Y2xpYy1zcGVjaWFsLTIiLHAuYXJyb3dUeXBlU3RhcnQ9Im5vbmUiLHIuc2V0RWRnZShzLGwsZixzKyItY3ljbGljLXNwZWNpYWwtMCIpLHIuc2V0RWRnZShsLHUsZCxzKyItY3ljbGljLXNwZWNpYWwtMSIpLHIuc2V0RWRnZSh1LHMscCxzKyItY3ljPGxpYy1zcGVjaWFsLTIiKX1lbHNlIHIuc2V0RWRnZShhLnN0YXJ0LGEuZW5kLHsuLi5hfSxhLmlkKX0pLFgud2FybigiR3JhcGggYXQgZmlyc3Q6IixKU09OLnN0cmluZ2lmeShxbyhyKSkpLFhhZShyKSxYLndhcm4oIkdyYXBoIGFmdGVyIFhBWDoiLEpTT04uc3RyaW5naWZ5KHFvKHIpKSk7bGV0IGk9bWUoKTthd2FpdCBKYWUobixyLHQudHlwZSx0LmRpYWdyYW1JZCx2b2lkIDAsaSl9LCJyZW5kZXIiKX0pO3ZhciBWMix0TixGUGUsUmMsdWYscnA9TigoKT0+eyJ1c2Ugc3RyaWN0IjtUZWUoKTt5dCgpO1YyPXt9LHROPW8odD0+e2ZvcihsZXQgZSBvZiB0KVYyW2UubmFtZV09ZX0sInJlZ2lzdGVyTGF5b3V0TG9hZGVycyIpLEZQZT1vKCgpPT57dE4oW3tuYW1lOiJkYWdyZSIsbG9hZGVyOm8oYXN5bmMoKT0+YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KHRzZSgpLGVzZSkpLCJsb2FkZXIiKX1dKX0sInJlZ2lzdGVyRGVmYXVsdExheW91dExvYWRlcnMiKTtGUGUoKTtSYz1vKGFzeW5jKHQsZSk9PntpZighKHQubGF5b3V0QWxnb3JpdGhtIGluIFYyKSl0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gbGF5b3V0IGFsZ29yaXRobTogJHt0LmxheW91dEFsZ29yaXRobX1gKTtsZXQgcj1WMlt0LmxheW91dEFsZ29yaXRobV07cmV0dXJuKGF3YWl0IHIubG9hZGVyKCkpLnJlbmRlcih0LGUsYmVlLHthbGdvcml0aG06ci5hbGdvcml0aG19KX0sInJlbmRlciIpLHVmPW8oKHQ9IiIse2ZhbGxiYWNrOmU9ImRhZ3JlIn09e30pPT57aWYodCBpbiBWMilyZXR1cm4gdDtpZihlIGluIFYyKXJldHVybiBYLndhcm4oYExheW91dCBhbGdvcml0aG0gJHt0fSBpcyBub3QgcmVnaXN0ZXJlZC4gVXNpbmcgJHtlfSBhcyBmYWxsYmFjay5gKSxlO3Rocm93IG5ldyBFcnJvcihgQm90aCBsYXlvdXQgYWxnb3JpdGhtcyAke3R9IGFuZCAke2V9IGFyZSBub3QgcmVnaXN0ZXJlZC5gKX0sImdldFJlZ2lzdGVyZWRMYXlvdXRBbGdvcml0aG0iKX0pO3ZhciBZbywkUGUselBlLG5wPU4oKCk9PnsidXNlIHN0cmljdCI7eGkoKTt5dCgpO1lvPW8oKHQsZSxyLG4pPT57dC5hdHRyKCJjbGFzcyIscik7bGV0e3dpZHRoOmksaGVpZ2h0OmEseDpzLHk6bH09JFBlKHQsZSk7Zm4odCxhLGksbik7bGV0IHU9elBlKHMsbCxpLGEsZSk7dC5hdHRyKCJ2aWV3Qm94Iix1KSxYLmRlYnVnKGB2aWV3Qm94IGNvbmZpZ3VyZWQ6ICR7dX0gd2l0aCBwYWRkaW5nOiAke2V9YCl9LCJzZXR1cFZpZXdQb3J0Rm9yU1ZHIiksJFBlPW8oKHQsZSk9PntsZXQgcj10Lm5vZGUoKT8uZ2V0QkJveCgpfHx7d2lkdGg6MCxoZWlnaHQ6MCx4OjAseTowfTtyZXR1cm57d2lkdGg6ci53aWR0aCtlKjIsaGVpZ2h0OnIuaGVpZ2h0K2UqMix4OnIueCx5OnIueX19LCJjYWxjdWxhdGVEaW1lbnNpb25zV2l0aFBhZGRpbmciKSx6UGU9bygodCxlLHIsbixpKT0+YCR7dC1pfSAke2UtaX0gJHtyfSAke259YCwiY3JlYXRlVmlld0JveCIpfSk7dmFyIEdQZSxWUGUscnNlLG5zZT1OKCgpPT57InVzZSBzdHJpY3QiO2ZyKCk7R3QoKTt5dCgpO1NtKCk7cnAoKTtucCgpO2VyKCk7R1BlPW8oZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5kYi5nZXRDbGFzc2VzKCl9LCJnZXRDbGFzc2VzIiksVlBlPW8oYXN5bmMgZnVuY3Rpb24odCxlLHIsbil7WC5pbmZvKCJSRUYwOiIpLFguaW5mbygiRHJhd2luZyBzdGF0ZSBkaWFncmFtICh2MikiLGUpO2xldHtzZWN1cml0eUxldmVsOmksZmxvd2NoYXJ0OmEsbGF5b3V0OnN9PW1lKCksbDtpPT09InNhbmRib3giJiYobD1HZSgiI2kiK2UpKTtsZXQgdT1pPT09InNhbmRib3giP2wubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQ6ZG9jdW1lbnQ7WC5kZWJ1ZygiQmVmb3JlIGdldERhdGE6ICIpO2xldCBoPW4uZGIuZ2V0RGF0YSgpO1guZGVidWcoIkRhdGE6ICIsaCk7bGV0IGY9d2MoZSxpKSxkPW4uZGIuZ2V0RGlyZWN0aW9uKCk7aC50eXBlPW4udHlwZSxoLmxheW91dEFsZ29yaXRobT11ZihzKSxoLmxheW91dEFsZ29yaXRobT09PSJkYWdyZSImJnM9PT0iZWxrIiYmWC53YXJuKCJmbG93Y2hhcnQtZWxrIHdhcyBtb3ZlZCB0byBhbiBleHRlcm5hbCBwYWNrYWdlIGluIE1lcm1haWQgdjExLiBQbGVhc2UgcmVmZXIgW3JlbGVhc2Ugbm90ZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9tZXJtYWlkLWpzL21lcm1haWQvcmVsZWFzZXMvdGFnL3YxMS4wLjApIGZvciBtb3JlIGRldGFpbHMuIFRoaXMgZGlhZ3JhbSB3aWxsIGJlIHJlbmRlcmVkIHVzaW5nIGBkYWdyZWAgbGF5b3V0IGFzIGEgZmFsbGJhY2suIiksaC5kaXJlY3Rpb249ZCxoLm5vZGVTcGFjaW5nPWE/Lm5vZGVTcGFjaW5nfHw1MCxoLnJhbmtTcGFjaW5nPWE/LnJhbmtTcGFjaW5nfHw1MCxoLm1hcmtlcnM9WyJwb2ludCIsImNpcmNsZSIsImNyb3NzIl0saC5kaWFncmFtSWQ9ZSxYLmRlYnVnKCJSRUYxOiIsaCksYXdhaXQgUmMoaCxmKTtsZXQgcD1oLmNvbmZpZy5mbG93Y2hhcnQ/LmRpYWdyYW1QYWRkaW5nPz84O1Z0Lmluc2VydFRpdGxlKGYsImZsb3djaGFydFRpdGxlVGV4dCIsYT8udGl0bGVUb3BNYXJnaW58fDAsbi5kYi5nZXREaWFncmFtVGl0bGUoKSksWW8oZixwLCJmbG93Y2hhcnQiLGE/LnVzZU1heFdpZHRofHwhMSk7Zm9yKGxldCBtIG9mIGgubm9kZXMpe2xldCBnPUdlKGAjJHtlfSBbaWQ9IiR7bS5pZH0iXWApO2lmKCFnfHwhbS5saW5rKWNvbnRpbnVlO2xldCB5PXUuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImEiKTt5LnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImNsYXNzIixtLmNzc0NsYXNzZXMpLHkuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicmVsIiwibm9vcGVuZXIiKSxpPT09InNhbmRib3giP3kuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidGFyZ2V0IiwiX3RvcCIpOm0ubGlua1RhcmdldCYmeS5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0YXJnZXQiLG0ubGlua1RhcmdldCk7bGV0IHY9Zy5pbnNlcnQoZnVuY3Rpb24oKXtyZXR1cm4geX0sIjpmaXJzdC1jaGlsZCIpLHg9Zy5zZWxlY3QoIi5sYWJlbC1jb250YWluZXIiKTt4JiZ2LmFwcGVuZChmdW5jdGlvbigpe3JldHVybiB4Lm5vZGUoKX0pO2xldCBiPWcuc2VsZWN0KCIubGFiZWwiKTtiJiZ2LmFwcGVuZChmdW5jdGlvbigpe3JldHVybiBiLm5vZGUoKX0pfX0sImRyYXciKSxyc2U9e2dldENsYXNzZXM6R1BlLGRyYXc6VlBlfX0pO3ZhciByTixuTixpc2U9TigoKT0+eyJ1c2Ugc3RyaWN0IjtyTj1mdW5jdGlvbigpe3ZhciB0PW8oZnVuY3Rpb24oSHIsZXQsZ3QsS3Qpe2ZvcihndD1ndHx8e30sS3Q9SHIubGVuZ3RoO0t0LS07Z3RbSHJbS3RdXT1ldCk7cmV0dXJuIGd0fSwibyIpLGU9WzEsNF0scj1bMSwzXSxuPVsxLDVdLGk9WzEsOCw5LDEwLDExLDI3LDM0LDM2LDM4LDQ0LDYwLDg0LDg1LDg2LDg3LDg4LDg5LDEwMiwxMDUsMTA2LDEwOSwxMTEsMTE0LDExNSwxMTYsMTIxLDEyMiwxMjMsMTI0XSxhPVsyLDJdLHM9WzEsMTNdLGw9WzEsMTRdLHU9WzEsMTVdLGg9WzEsMTZdLGY9WzEsMjNdLGQ9WzEsMjVdLHA9WzEsMjZdLG09WzEsMjddLGc9WzEsNDldLHk9WzEsNDhdLHY9WzEsMjldLHg9WzEsMzBdLGI9WzEsMzFdLFQ9WzEsMzJdLFM9WzEsMzNdLHc9WzEsNDRdLEU9WzEsNDZdLF89WzEsNDJdLEM9WzEsNDddLEQ9WzEsNDNdLE89WzEsNTBdLFI9WzEsNDVdLGs9WzEsNTFdLEw9WzEsNTJdLEE9WzEsMzRdLEk9WzEsMzVdLE09WzEsMzZdLFA9WzEsMzddLEI9WzEsNTddLEY9WzEsOCw5LDEwLDExLDI3LDMyLDM0LDM2LDM4LDQ0LDYwLDg0LDg1LDg2LDg3LDg4LDg5LDEwMiwxMDUsMTA2LDEwOSwxMTEsMTE0LDExNSwxMTYsMTIxLDEyMiwxMjMsMTI0XSx6PVsxLDYxXSwkPVsxLDYwXSxVPVsxLDYyXSxLPVs4LDksMTEsNzUsNzcsNzhdLGVlPVsxLDc4XSxZPVsxLDkxXSxjZT1bMSw5Nl0sWj1bMSw5NV0sdWU9WzEsOTJdLFE9WzEsODhdLGo9WzEsOTRdLG5lPVsxLDkwXSx0ZT1bMSw5N10saGU9WzEsOTNdLGxlPVsxLDk4XSxKPVsxLDg5XSxTZT1bOCw5LDEwLDExLDQwLDc1LDc3LDc4XSxzZT1bOCw5LDEwLDExLDQwLDQ2LDc1LDc3LDc4XSxhZT1bOCw5LDEwLDExLDI5LDQwLDQ0LDQ2LDQ4LDUwLDUyLDU0LDU2LDU4LDYwLDYzLDY1LDY3LDY4LDcwLDc1LDc3LDc4LDg5LDEwMiwxMDUsMTA2LDEwOSwxMTEsMTE0LDExNSwxMTZdLE9lPVs4LDksMTEsNDQsNjAsNzUsNzcsNzgsODksMTAyLDEwNSwxMDYsMTA5LDExMSwxMTQsMTE1LDExNl0seWU9WzQ0LDYwLDg5LDEwMiwxMDUsMTA2LDEwOSwxMTEsMTE0LDExNSwxMTZdLEJlPVsxLDEyMV0sSGU9WzEsMTIyXSx6ZT1bMSwxMjRdLExlPVsxLDEyM10sSWU9WzQ0LDYwLDYyLDc0LDg5LDEwMiwxMDUsMTA2LDEwOSwxMTEsMTE0LDExNSwxMTZdLHhlPVsxLDEzM10scT1bMSwxNDddLGRlPVsxLDE0OF0saWU9WzEsMTQ5XSxvZT1bMSwxNTBdLFY9WzEsMTM1XSxUZT1bMSwxMzddLFc9WzEsMTQxXSxwZT1bMSwxNDJdLHZlPVsxLDE0M10sUGU9WzEsMTQ0XSxfZT1bMSwxNDVdLGJlPVsxLDE0Nl0sVmU9WzEsMTUxXSxEZT1bMSwxNTJdLHFlPVsxLDEzMV0sYXQ9WzEsMTMyXSxSdD1bMSwxMzldLHN0PVsxLDEzNF0sVWU9WzEsMTM4XSxjdD1bMSwxMzZdLFdlPVs4LDksMTAsMTEsMjcsMzIsMzQsMzYsMzgsNDQsNjAsODQsODUsODYsODcsODgsODksMTAyLDEwNSwxMDYsMTA5LDExMSwxMTQsMTE1LDExNiwxMjEsMTIyLDEyMywxMjRdLG90PVsxLDE1NF0sWXQ9WzEsMTU2XSxUdD1bOCw5LDExXSxNdD1bOCw5LDEwLDExLDE0LDQ0LDYwLDg5LDEwNSwxMDYsMTA5LDExMSwxMTQsMTE1LDExNl0sYnQ9WzEsMTc2XSx1dD1bMSwxNzJdLFN0PVsxLDE3M10sZnQ9WzEsMTc3XSx2dD1bMSwxNzRdLG50PVsxLDE3NV0scG49Wzc3LDExNiwxMTldLGt0PVs4LDksMTAsMTEsMTIsMTQsMjcsMjksMzIsNDQsNjAsNzUsODQsODUsODYsODcsODgsODksOTAsMTA1LDEwOSwxMTEsMTE0LDExNSwxMTZdLE9uPVsxMCwxMDZdLHRuPVszMSw0OSw1MSw1Myw1NSw1Nyw2Miw2NCw2Niw2Nyw2OSw3MSwxMTYsMTE3LDExOF0sTXI9WzEsMjQ3XSxJcj1bMSwyNDVdLFBuPVsxLDI0OV0sRHQ9WzEsMjQzXSxDZT1bMSwyNDRdLHR0PVsxLDI0Nl0sQ3Q9WzEsMjQ4XSxncj1bMSwyNTBdLHJuPVsxLDI2OF0seW49WzgsOSwxMSwxMDZdLFpyPVs4LDksMTAsMTEsNjAsODQsMTA1LDEwNiwxMDksMTEwLDExMSwxMTJdLE9pPXt0cmFjZTpvKGZ1bmN0aW9uKCl7fSwidHJhY2UiKSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGdyYXBoQ29uZmlnOjQsZG9jdW1lbnQ6NSxsaW5lOjYsc3RhdGVtZW50OjcsU0VNSTo4LE5FV0xJTkU6OSxTUEFDRToxMCxFT0Y6MTEsR1JBUEg6MTIsTk9ESVI6MTMsRElSOjE0LEZpcnN0U3RtdFNlcGFyYXRvcjoxNSxlbmRpbmc6MTYsZW5kVG9rZW46MTcsc3BhY2VMaXN0OjE4LHNwYWNlTGlzdE5ld2xpbmU6MTksdmVydGV4U3RhdGVtZW50OjIwLHNlcGFyYXRvcjoyMSxzdHlsZVN0YXRlbWVudDoyMixsaW5rU3R5bGVTdGF0ZW1lbnQ6MjMsY2xhc3NEZWZTdGF0ZW1lbnQ6MjQsY2xhc3NTdGF0ZW1lbnQ6MjUsY2xpY2tTdGF0ZW1lbnQ6MjYsc3ViZ3JhcGg6MjcsdGV4dE5vVGFnczoyOCxTUVM6MjksdGV4dDozMCxTUUU6MzEsZW5kOjMyLGRpcmVjdGlvbjozMyxhY2NfdGl0bGU6MzQsYWNjX3RpdGxlX3ZhbHVlOjM1LGFjY19kZXNjcjozNixhY2NfZGVzY3JfdmFsdWU6MzcsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZTozOCxzaGFwZURhdGE6MzksU0hBUEVfREFUQTo0MCxsaW5rOjQxLG5vZGU6NDIsc3R5bGVkVmVydGV4OjQzLEFNUDo0NCx2ZXJ0ZXg6NDUsU1RZTEVfU0VQQVJBVE9SOjQ2LGlkU3RyaW5nOjQ3LERPVUJMRUNJUkNMRVNUQVJUOjQ4LERPVUJMRUNJUkNMRUVORDo0OSxQUzo1MCxQRTo1MSwiKC0iOjUyLCItKSI6NTMsU1RBRElVTVNUQVJUOjU0LFNUQURJVU1FTkQ6NTUsU1VCUk9VVElORVNUQVJUOjU2LFNVQlJPVVRJTkVFTkQ6NTcsVkVSVEVYX1dJVEhfUFJPUFNfU1RBUlQ6NTgsIk5PREVfU1RSSU5HW2ZpZWxkXSI6NTksQ09MT046NjAsIk5PREVfU1RSSU5HW3ZhbHVlXSI6NjEsUElQRTo2MixDWUxJTkRFUlNUQVJUOjYzLENZTElOREVSRU5EOjY0LERJQU1PTkRfU1RBUlQ6NjUsRElBTU9ORF9TVE9QOjY2LFRBR0VORDo2NyxUUkFQU1RBUlQ6NjgsVFJBUEVORDo2OSxJTlZUUkFQU1RBUlQ6NzAsSU5WVFJBUEVORDo3MSxsaW5rU3RhdGVtZW50OjcyLGFycm93VGV4dDo3MyxURVNUU1RSOjc0LFNUQVJUX0xJTks6NzUsZWRnZVRleHQ6NzYsTElOSzo3NyxMSU5LX0lEOjc4LGVkZ2VUZXh0VG9rZW46NzksU1RSOjgwLE1EX1NUUjo4MSx0ZXh0VG9rZW46ODIsa2V5d29yZHM6ODMsU1RZTEU6ODQsTElOS1NUWUxFOjg1LENMQVNTREVGOjg2LENMQVNTOjg3LENMSUNLOjg4LERPV046ODksVVA6OTAsdGV4dE5vVGFnc1Rva2VuOjkxLHN0eWxlc09wdDo5MiwiaWRTdHJpbmdbdmVydGV4XSI6OTMsImlkU3RyaW5nW2NsYXNzXSI6OTQsQ0FMTEJBQ0tOQU1FOjk1LENBTExCQUNLQVJHUzo5NixIUkVGOjk3LExJTktfVEFSR0VUOjk4LCJTVFJbbGlua10iOjk5LCJTVFJbdG9vbHRpcF0iOjEwMCxhbHBoYU51bToxMDEsREVGQVVMVDoxMDIsbnVtTGlzdDoxMDMsSU5URVJQT0xBVEU6MTA0LE5VTToxMDUsQ09NTUE6MTA2LHN0eWxlOjEwNyxzdHlsZUNvbXBvbmVudDoxMDgsTk9ERV9TVFJJTkc6MTA5LFVOSVQ6MTEwLEJSS1Q6MTExLFBDVDoxMTIsaWRTdHJpbmdUb2tlbjoxMTMsTUlOVVM6MTE0LE1VTFQ6MTE1LFVOSUNPREVfVEVYVDoxMTYsVEVYVDoxMTcsVEFHU1RBUlQ6MTE4LEVER0VfVEVYVDoxMTksYWxwaGFOdW1Ub2tlbjoxMjAsZGlyZWN0aW9uX3RiOjEyMSxkaXJlY3Rpb25fYnQ6MTIyLGRpcmVjdGlvbl9ybDoxMjMsZGlyZWN0aW9uX2xyOjEyNCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsODoiU0VNSSIsOToiTkVXTElORSIsMTA6IlNQQUNFIiwxMToiRU9GIiwxMjoiR1JBUEgiLDEzOiJOT0RJUiIsMTQ6IkRJUiIsMjc6InN1YmdyYXBoIiwyOToiU1FTIiwzMToiU1FFIiwzMjoiZW5kIiwzNDoiYWNjX3RpdGxlIiwzNToiYWNjX3RpdGxlX3ZhbHVlIiwzNjoiYWNjX2Rlc2NyIiwzNzoiYWNjX2Rlc2NyX3ZhbHVlIiwzODoiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsNDA6IlNIQVBFX0RBVEEiLDQ0OiJBTVAiLDQ2OiJTVFlMRV9TRVBBUkFUT1IiLDQ4OiJET1VCTEVDSVJDTEVTVEFSVCIsNDk6IkRPVUJMRUNJUkNMRUVORCIsNTA6IlBTIiw1MToiUEUiLDUyOiIoLSIsNTM6Ii0pIiw1NDoiU1RBRElVTVNUQVJUIiw1NToiU1RBRElVTUVORCIsNTY6IlNVQlJPVVRJTkVTVEFSVCIsNTc6IlNVQlJPVVRJTkVFTkQiLDU4OiJWRVJURVhfV0lUSF9QUk9QU19TVEFSVCIsNTk6Ik5PREVfU1RSSU5HW2ZpZWxkXSIsNjA6IkNPTE9OIiw2MToiTk9ERV9TVFJJTkdbdmFsdWVdIiw2MjoiUElQRSIsNjM6IkNZTElOREVSU1RBUlQiLDY0OiJDWUxJTkRFUkVORCIsNjU6IkRJQU1PTkRfU1RBUlQiLDY2OiJESUFNT05EX1NUT1AiLDY3OiJUQUdFTkQiLDY4OiJUUkFQU1RBUlQiLDY5OiJUUkFQRU5EIiw3MDoiSU5WVFJBUFNUQVJUIiw3MToiSU5WVFJBUEVORCIsNzQ6IlRFU1RTVFIiLDc1OiJTVEFSVF9MSU5LIiw3NzoiTElOSyIsNzg6IkxJTktfSUQiLDgwOiJTVFIiLDgxOiJNRF9TVFIiLDg0OiJTVFlMRSIsODU6IkxJTktTVFlMRSIsODY6IkNMQVNTREVGIiw4NzoiQ0xBU1MiLDg4OiJDTElDSyIsODk6IkRPV04iLDkwOiJVUCIsOTM6ImlkU3RyaW5nW3ZlcnRleF0iLDk0OiJpZFN0cmluZ1tjbGFzc10iLDk1OiJDQUxMQkFDS05BTUUiLDk2OiJDQUxMQkFDS0FSR1MiLDk3OiJIUkVGIiw5ODoiTElOS19UQVJHRVQiLDk5OiJTVFJbbGlua10iLDEwMDoiU1RSW3Rvb2x0aXBdIiwxMDI6IkRFRkFVTFQiLDEwNDoiSU5URVJQT0xBVEUiLDEwNToiTlVNIiwxMDY6IkNPTU1BIiwxMDk6Ik5PREVfU1RSSU5HIiwxMTA6IlVOSVQiLDExMToiQlJLVCIsMTEyOiJQQ1QiLDExNDoiTUlOVVMiLDExNToiTVVMVCIsMTE2OiJVTklDT0RFX1RFWFQiLDExNzoiVEVYVCIsMTE4OiJUQUdTVEFSVCIsMTE5OiJFREdFX1RFWFQiLDEyMToiZGlyZWN0aW9uX3RiIiwxMjI6ImRpcmVjdGlvbl9idCIsMTIzOiJkaXJlY3Rpb25fcmwiLDEyNDoiZGlyZWN0aW9uX2xyIn0scHJvZHVjdGlvbnNfOlswLFszLDJdLFs1LDBdLFs1LDJdLFs2LDFdLFs2LDFdLFs2LDFdLFs2LDFdLFs2LDFdLFs0LDJdLFs0LDJdLFs0LDJdLFs0LDNdLFsxNiwyXSxbMTYsMV0sWzE3LDFdLFsxNywxXSxbMTcsMV0sWzE1LDFdLFsxNSwxXSxbMTUsMl0sWzE5LDJdLFsxOSwyXSxbMTksMV0sWzE5LDFdLFsxOCwyXSxbMTgsMV0sWzcsMl0sWzcsMl0sWzcsMl0sWzcsMl0sWzcsMl0sWzcsMl0sWzcsOV0sWzcsNl0sWzcsNF0sWzcsMV0sWzcsMl0sWzcsMl0sWzcsMV0sWzIxLDFdLFsyMSwxXSxbMjEsMV0sWzM5LDJdLFszOSwxXSxbMjAsNF0sWzIwLDNdLFsyMCw0XSxbMjAsMl0sWzIwLDJdLFsyMCwxXSxbNDIsMV0sWzQyLDZdLFs0Miw1XSxbNDMsMV0sWzQzLDNdLFs0NSw0XSxbNDUsNF0sWzQ1LDZdLFs0NSw0XSxbNDUsNF0sWzQ1LDRdLFs0NSw4XSxbNDUsNF0sWzQ1LDRdLFs0NSw0XSxbNDUsNl0sWzQ1LDRdLFs0NSw0XSxbNDUsNF0sWzQ1LDRdLFs0NSw0XSxbNDUsMV0sWzQxLDJdLFs0MSwzXSxbNDEsM10sWzQxLDFdLFs0MSwzXSxbNDEsNF0sWzc2LDFdLFs3NiwyXSxbNzYsMV0sWzc2LDFdLFs3MiwxXSxbNzIsMl0sWzczLDNdLFszMCwxXSxbMzAsMl0sWzMwLDFdLFszMCwxXSxbODMsMV0sWzgzLDFdLFs4MywxXSxbODMsMV0sWzgzLDFdLFs4MywxXSxbODMsMV0sWzgzLDFdLFs4MywxXSxbODMsMV0sWzgzLDFdLFsyOCwxXSxbMjgsMl0sWzI4LDFdLFsyOCwxXSxbMjQsNV0sWzI1LDVdLFsyNiwyXSxbMjYsNF0sWzI2LDNdLFsyNiw1XSxbMjYsM10sWzI2LDVdLFsyNiw1XSxbMjYsN10sWzI2LDJdLFsyNiw0XSxbMjYsMl0sWzI2LDRdLFsyNiw0XSxbMjYsNl0sWzIyLDVdLFsyMyw1XSxbMjMsNV0sWzIzLDldLFsyMyw5XSxbMjMsN10sWzIzLDddLFsxMDMsMV0sWzEwMywzXSxbOTIsMV0sWzkyLDNdLFsxMDcsMV0sWzEwNywyXSxbMTA4LDFdLFsxMDgsMV0sWzEwOCwxXSxbMTA4LDFdLFsxMDgsMV0sWzEwOCwxXSxbMTA4LDFdLFsxMDgsMV0sWzExMywxXSxbMTEzLDFdLFsxMTMsMV0sWzExMywxXSxbMTEzLDFdLFsxMTMsMV0sWzExMywxXSxbMTEzLDFdLFsxMTMsMV0sWzExMywxXSxbMTEzLDFdLFs4MiwxXSxbODIsMV0sWzgyLDFdLFs4MiwxXSxbOTEsMV0sWzkxLDFdLFs5MSwxXSxbOTEsMV0sWzkxLDFdLFs5MSwxXSxbOTEsMV0sWzkxLDFdLFs5MSwxXSxbOTEsMV0sWzkxLDFdLFs3OSwxXSxbNzksMV0sWzEyMCwxXSxbMTIwLDFdLFsxMjAsMV0sWzEyMCwxXSxbMTIwLDFdLFsxMjAsMV0sWzEyMCwxXSxbMTIwLDFdLFsxMjAsMV0sWzEyMCwxXSxbMTIwLDFdLFs0NywxXSxbNDcsMl0sWzEwMSwxXSxbMTAxLDJdLFszMywxXSxbMzMsMV0sWzMzLDFdLFszMywxXV0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKGV0LGd0LEt0LGx0LENuLGdlLFFmKXt2YXIgd2U9Z2UubGVuZ3RoLTE7c3dpdGNoKENuKXtjYXNlIDI6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMzooIUFycmF5LmlzQXJyYXkoZ2Vbd2VdKXx8Z2Vbd2VdLmxlbmd0aD4wKSYmZ2Vbd2UtMV0ucHVzaChnZVt3ZV0pLHRoaXMuJD1nZVt3ZS0xXTticmVhaztjYXNlIDQ6Y2FzZSAxODM6dGhpcy4kPWdlW3dlXTticmVhaztjYXNlIDExOmx0LnNldERpcmVjdGlvbigiVEIiKSx0aGlzLiQ9IlRCIjticmVhaztjYXNlIDEyOmx0LnNldERpcmVjdGlvbihnZVt3ZS0xXSksdGhpcy4kPWdlW3dlLTFdO2JyZWFrO2Nhc2UgMjc6dGhpcy4kPWdlW3dlLTFdLm5vZGVzO2JyZWFrO2Nhc2UgMjg6Y2FzZSAyOTpjYXNlIDMwOmNhc2UgMzE6Y2FzZSAzMjp0aGlzLiQ9W107YnJlYWs7Y2FzZSAzMzp0aGlzLiQ9bHQuYWRkU3ViR3JhcGgoZ2Vbd2UtNl0sZ2Vbd2UtMV0sZ2Vbd2UtNF0pO2JyZWFrO2Nhc2UgMzQ6dGhpcy4kPWx0LmFkZFN1YkdyYXBoKGdlW3dlLTNdLGdlW3dlLTFdLGdlW3dlLTNdKTticmVhaztjYXNlIDM1OnRoaXMuJD1sdC5hZGRTdWJHcmFwaCh2b2lkIDAsZ2Vbd2UtMV0sdm9pZCAwKTticmVhaztjYXNlIDM3OnRoaXMuJD1nZVt3ZV0udHJpbSgpLGx0LnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAzODpjYXNlIDM5OnRoaXMuJD1nZVt3ZV0udHJpbSgpLGx0LnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSA0Mzp0aGlzLiQ9Z2Vbd2UtMV0rZ2Vbd2VdO2JyZWFrO2Nhc2UgNDQ6dGhpcy4kPWdlW3dlXTticmVhaztjYXNlIDQ1Omx0LmFkZFZlcnRleChnZVt3ZS0xXVtnZVt3ZS0xXS5sZW5ndGgtMV0sdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsZ2Vbd2VdKSxsdC5hZGRMaW5rKGdlW3dlLTNdLnN0bXQsZ2Vbd2UtMV0sZ2Vbd2UtMl0pLHRoaXMuJD17c3RtdDpnZVt3ZS0xXSxub2RlczpnZVt3ZS0xXS5jb25jYXQoZ2Vbd2UtM10ubm9kZXMpfTticmVhaztjYXNlIDQ2Omx0LmFkZExpbmsoZ2Vbd2UtMl0uc3RtdCxnZVt3ZV0sZ2Vbd2UtMV0pLHRoaXMuJD17c3RtdDpnZVt3ZV0sbm9kZXM6Z2Vbd2VdLmNvbmNhdChnZVt3ZS0yXS5ub2Rlcyl9O2JyZWFrO2Nhc2UgNDc6bHQuYWRkTGluayhnZVt3ZS0zXS5zdG10LGdlW3dlLTFdLGdlW3dlLTJdKSx0aGlzLiQ9e3N0bXQ6Z2Vbd2UtMV0sbm9kZXM6Z2Vbd2UtMV0uY29uY2F0KGdlW3dlLTNdLm5vZGVzKX07YnJlYWs7Y2FzZSA0ODp0aGlzLiQ9e3N0bXQ6Z2Vbd2UtMV0sbm9kZXM6Z2Vbd2UtMV19O2JyZWFrO2Nhc2UgNDk6bHQuYWRkVmVydGV4KGdlW3dlLTFdW2dlW3dlLTFdLmxlbmd0aC0xXSx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCxnZVt3ZV0pLHRoaXMuJD17c3RtdDpnZVt3ZS0xXSxub2RlczpnZVt3ZS0xXSxzaGFwZURhdGE6Z2Vbd2VdfTticmVhaztjYXNlIDUwOnRoaXMuJD17c3RtdDpnZVt3ZV0sbm9kZXM6Z2Vbd2VdfTticmVhaztjYXNlIDUxOnRoaXMuJD1bZ2Vbd2VdXTticmVhaztjYXNlIDUyOmx0LmFkZFZlcnRleChnZVt3ZS01XVtnZVt3ZS01XS5sZW5ndGgtMV0sdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsZ2Vbd2UtNF0pLHRoaXMuJD1nZVt3ZS01XS5jb25jYXQoZ2Vbd2VdKTticmVhaztjYXNlIDUzOnRoaXMuJD1nZVt3ZS00XS5jb25jYXQoZ2Vbd2VdKTticmVhaztjYXNlIDU0OnRoaXMuJD1nZVt3ZV07YnJlYWs7Y2FzZSA1NTp0aGlzLiQ9Z2Vbd2UtMl0sbHQuc2V0Q2xhc3MoZ2Vbd2UtMl0sZ2Vbd2VdKTticmVhaztjYXNlIDU2OnRoaXMuJD1nZVt3ZS0zXSxsdC5hZGRWZXJ0ZXgoZ2Vbd2UtM10sZ2Vbd2UtMV0sInNxdWFyZSIpO2JyZWFrO2Nhc2UgNTc6dGhpcy4kPWdlW3dlLTNdLGx0LmFkZFZlcnRleChnZVt3ZS0zXSxnZVt3ZS0xXSwiZG91YmxlY2lyY2xlIik7YnJlYWs7Y2FzZSA1ODp0aGlzLiQ9Z2Vbd2UtNV0sbHQuYWRkVmVydGV4KGdlW3dlLTVdLGdlW3dlLTJdLCJjaXJjbGUiKTticmVhaztjYXNlIDU5OnRoaXMuJD1nZVt3ZS0zXSxsdC5hZGRWZXJ0ZXgoZ2Vbd2UtM10sZ2Vbd2UtMV0sImVsbGlwc2UiKTticmVhaztjYXNlIDYwOnRoaXMuJD1nZVt3ZS0zXSxsdC5hZGRWZXJ0ZXgoZ2Vbd2UtM10sZ2Vbd2UtMV0sInN0YWRpdW0iKTticmVhaztjYXNlIDYxOnRoaXMuJD1nZVt3ZS0zXSxsdC5hZGRWZXJ0ZXgoZ2Vbd2UtM10sZ2Vbd2UtMV0sInN1YnJvdXRpbmUiKTticmVhaztjYXNlIDYyOnRoaXMuJD1nZVt3ZS03XSxsdC5hZGRWZXJ0ZXgoZ2Vbd2UtN10sZ2Vbd2UtMV0sInJlY3QiLHZvaWQgMCx2b2lkIDAsdm9pZCAwLE9iamVjdC5mcm9tRW50cmllcyhbW2dlW3dlLTVdLGdlW3dlLTNdXV0pKTticmVhaztjYXNlIDYzOnRoaXMuJD1nZVt3ZS0zXSxsdC5hZGRWZXJ0ZXgoZ2Vbd2UtM10sZ2Vbd2UtMV0sImN5bGluZGVyIik7YnJlYWs7Y2FzZSA2NDp0aGlzLiQ9Z2Vbd2UtM10sbHQuYWRkVmVydGV4KGdlW3dlLTNdLGdlW3dlLTFdLCJyb3VuZCIpO2JyZWFrO2Nhc2UgNjU6dGhpcy4kPWdlW3dlLTNdLGx0LmFkZFZlcnRleChnZVt3ZS0zXSxnZVt3ZS0xXSwiZGlhbW9uZCIpO2JyZWFrO2Nhc2UgNjY6dGhpcy4kPWdlW3dlLTVdLGx0LmFkZFZlcnRleChnZVt3ZS01XSxnZVt3ZS0yXSwiaGV4YWdvbiIpO2JyZWFrO2Nhc2UgNjc6dGhpcy4kPWdlW3dlLTNdLGx0LmFkZFZlcnRleChnZVt3ZS0zXSxnZVt3ZS0xXSwib2RkIik7YnJlYWs7Y2FzZSA2ODp0aGlzLiQ9Z2Vbd2UtM10sbHQuYWRkVmVydGV4KGdlW3dlLTNdLGdlW3dlLTFdLCJ0cmFwZXpvaWQiKTticmVhaztjYXNlIDY5OnRoaXMuJD1nZVt3ZS0zXSxsdC5hZGRWZXJ0ZXgoZ2Vbd2UtM10sZ2Vbd2UtMV0sImludl90cmFwZXpvaWQiKTticmVhaztjYXNlIDcwOnRoaXMuJD1nZVt3ZS0zXSxsdC5hZGRWZXJ0ZXgoZ2Vbd2UtM10sZ2Vbd2UtMV0sImxlYW5fcmlnaHQiKTticmVhaztjYXNlIDcxOnRoaXMuJD1nZVt3ZS0zXSxsdC5hZGRWZXJ0ZXgoZ2Vbd2UtM10sZ2Vbd2UtMV0sImxlYW5fbGVmdCIpO2JyZWFrO2Nhc2UgNzI6dGhpcy4kPWdlW3dlXSxsdC5hZGRWZXJ0ZXgoZ2Vbd2VdKTticmVhaztjYXNlIDczOmdlW3dlLTFdLnRleHQ9Z2Vbd2VdLHRoaXMuJD1nZVt3ZS0xXTticmVhaztjYXNlIDc0OmNhc2UgNzU6Z2Vbd2UtMl0udGV4dD1nZVt3ZS0xXSx0aGlzLiQ9Z2Vbd2UtMl07YnJlYWs7Y2FzZSA3Njp0aGlzLiQ9Z2Vbd2VdO2JyZWFrO2Nhc2UgNzc6dmFyIEVpPWx0LmRlc3RydWN0TGluayhnZVt3ZV0sZ2Vbd2UtMl0pO3RoaXMuJD17dHlwZTpFaS50eXBlLHN0cm9rZTpFaS5zdHJva2UsbGVuZ3RoOkVpLmxlbmd0aCx0ZXh0OmdlW3dlLTFdfTticmVhaztjYXNlIDc4OnZhciBFaT1sdC5kZXN0cnVjdExpbmsoZ2Vbd2VdLGdlW3dlLTJdKTt0aGlzLiQ9e3R5cGU6RWkudHlwZSxzdHJva2U6RWkuc3Ryb2tlLGxlbmd0aDpFaS5sZW5ndGgsdGV4dDpnZVt3ZS0xXSxpZDpnZVt3ZS0zXX07YnJlYWs7Y2FzZSA3OTp0aGlzLiQ9e3RleHQ6Z2Vbd2VdLHR5cGU6InRleHQifTticmVhaztjYXNlIDgwOnRoaXMuJD17dGV4dDpnZVt3ZS0xXS50ZXh0KyIiK2dlW3dlXSx0eXBlOmdlW3dlLTFdLnR5cGV9O2JyZWFrO2Nhc2UgODE6dGhpcy4kPXt0ZXh0OmdlW3dlXSx0eXBlOiJzdHJpbmcifTticmVhaztjYXNlIDgyOnRoaXMuJD17dGV4dDpnZVt3ZV0sdHlwZToibWFya2Rvd24ifTticmVhaztjYXNlIDgzOnZhciBFaT1sdC5kZXN0cnVjdExpbmsoZ2Vbd2VdKTt0aGlzLiQ9e3R5cGU6RWkudHlwZSxzdHJva2U6RWkuc3Ryb2tlLGxlbmd0aDpFaS5sZW5ndGh9O2JyZWFrO2Nhc2UgODQ6dmFyIEVpPWx0LmRlc3RydWN0TGluayhnZVt3ZV0pO3RoaXMuJD17dHlwZTpFaS50eXBlLHN0cm9rZTpFaS5zdHJva2UsbGVuZ3RoOkVpLmxlbmd0aCxpZDpnZVt3ZS0xXX07YnJlYWs7Y2FzZSA4NTp0aGlzLiQ9Z2Vbd2UtMV07YnJlYWs7Y2FzZSA4Njp0aGlzLiQ9e3RleHQ6Z2Vbd2VdLHR5cGU6InRleHQifTticmVhaztjYXNlIDg3OnRoaXMuJD17dGV4dDpnZVt3ZS0xXS50ZXh0KyIiK2dlW3dlXSx0eXBlOmdlW3dlLTFdLnR5cGV9O2JyZWFrO2Nhc2UgODg6dGhpcy4kPXt0ZXh0OmdlW3dlXSx0eXBlOiJzdHJpbmcifTticmVhaztjYXNlIDg5OmNhc2UgMTA0OnRoaXMuJD17dGV4dDpnZVt3ZV0sdHlwZToibWFya2Rvd24ifTticmVhaztjYXNlIDEwMTp0aGlzLiQ9e3RleHQ6Z2Vbd2VdLHR5cGU6InRleHQifTticmVhaztjYXNlIDEwMjp0aGlzLiQ9e3RleHQ6Z2Vbd2UtMV0udGV4dCsiIitnZVt3ZV0sdHlwZTpnZVt3ZS0xXS50eXBlfTticmVhaztjYXNlIDEwMzp0aGlzLiQ9e3RleHQ6Z2Vbd2VdLHR5cGU6InRleHQifTticmVhaztjYXNlIDEwNTp0aGlzLiQ9Z2Vbd2UtNF0sbHQuYWRkQ2xhc3MoZ2Vbd2UtMl0sZ2Vbd2VdKTticmVhaztjYXNlIDEwNjp0aGlzLiQ9Z2Vbd2UtNF0sbHQuc2V0Q2xhc3MoZ2Vbd2UtMl0sZ2Vbd2VdKTticmVhaztjYXNlIDEwNzpjYXNlIDExNTp0aGlzLiQ9Z2Vbd2UtMV0sbHQuc2V0Q2xpY2tFdmVudChnZVt3ZS0xXSxnZVt3ZV0pO2JyZWFrO2Nhc2UgMTA4OmNhc2UgMTE2OnRoaXMuJD1nZVt3ZS0zXSxsdC5zZXRDbGlja0V2ZW50KGdlW3dlLTNdLGdlW3dlLTJdKSxsdC5zZXRUb29sdGlwKGdlW3dlLTNdLGdlW3dlXSk7YnJlYWs7Y2FzZSAxMDk6dGhpcy4kPWdlW3dlLTJdLGx0LnNldENsaWNrRXZlbnQoZ2Vbd2UtMl0sZ2Vbd2UtMV0sZ2Vbd2VdKTticmVhaztjYXNlIDExMDp0aGlzLiQ9Z2Vbd2UtNF0sbHQuc2V0Q2xpY2tFdmVudChnZVt3ZS00XSxnZVt3ZS0zXSxnZVt3ZS0yXSksbHQuc2V0VG9vbHRpcChnZVt3ZS00XSxnZVt3ZV0pO2JyZWFrO2Nhc2UgMTExOnRoaXMuJD1nZVt3ZS0yXSxsdC5zZXRMaW5rKGdlW3dlLTJdLGdlW3dlXSk7YnJlYWs7Y2FzZSAxMTI6dGhpcy4kPWdlW3dlLTRdLGx0LnNldExpbmsoZ2Vbd2UtNF0sZ2Vbd2UtMl0pLGx0LnNldFRvb2x0aXAoZ2Vbd2UtNF0sZ2Vbd2VdKTticmVhaztjYXNlIDExMzp0aGlzLiQ9Z2Vbd2UtNF0sbHQuc2V0TGluayhnZVt3ZS00XSxnZVt3ZS0yXSxnZVt3ZV0pO2JyZWFrO2Nhc2UgMTE0OnRoaXMuJD1nZVt3ZS02XSxsdC5zZXRMaW5rKGdlW3dlLTZdLGdlW3dlLTRdLGdlW3dlXSksbHQuc2V0VG9vbHRpcChnZVt3ZS02XSxnZVt3ZS0yXSk7YnJlYWs7Y2FzZSAxMTc6dGhpcy4kPWdlW3dlLTFdLGx0LnNldExpbmsoZ2Vbd2UtMV0sZ2Vbd2VdKTticmVhaztjYXNlIDExODp0aGlzLiQ9Z2Vbd2UtM10sbHQuc2V0TGluayhnZVt3ZS0zXSxnZVt3ZS0yXSksbHQuc2V0VG9vbHRpcChnZVt3ZS0zXSxnZVt3ZV0pO2JyZWFrO2Nhc2UgMTE5OnRoaXMuJD1nZVt3ZS0zXSxsdC5zZXRMaW5rKGdlW3dlLTNdLGdlW3dlLTJdLGdlW3dlXSk7YnJlYWs7Y2FzZSAxMjA6dGhpcy4kPWdlW3dlLTVdLGx0LnNldExpbmsoZ2Vbd2UtNV0sZ2Vbd2UtNF0sZ2Vbd2VdKSxsdC5zZXRUb29sdGlwKGdlW3dlLTVdLGdlW3dlLTJdKTticmVhaztjYXNlIDEyMTp0aGlzLiQ9Z2Vbd2UtNF0sbHQuYWRkVmVydGV4KGdlW3dlLTJdLHZvaWQgMCx2b2lkIDAsZ2Vbd2VdKTticmVhaztjYXNlIDEyMjp0aGlzLiQ9Z2Vbd2UtNF0sbHQudXBkYXRlTGluayhbZ2Vbd2UtMl1dLGdlW3dlXSk7YnJlYWs7Y2FzZSAxMjM6dGhpcy4kPWdlW3dlLTRdLGx0LnVwZGF0ZUxpbmsoZ2Vbd2UtMl0sZ2Vbd2VdKTticmVhaztjYXNlIDEyNDp0aGlzLiQ9Z2Vbd2UtOF0sbHQudXBkYXRlTGlua0ludGVycG9sYXRlKFtnZVt3ZS02XV0sZ2Vbd2UtMl0pLGx0LnVwZGF0ZUxpbmsoW2dlW3dlLTZdXSxnZVt3ZV0pO2JyZWFrO2Nhc2UgMTI1OnRoaXMuJD1nZVt3ZS04XSxsdC51cGRhdGVMaW5rSW50ZXJwb2xhdGUoZ2Vbd2UtNl0sZ2Vbd2UtMl0pLGx0LnVwZGF0ZUxpbmsoZ2Vbd2UtNl0sZ2Vbd2VdKTticmVhaztjYXNlIDEyNjp0aGlzLiQ9Z2Vbd2UtNl0sbHQudXBkYXRlTGlua0ludGVycG9sYXRlKFtnZVt3ZS00XV0sZ2Vbd2VdKTticmVhaztjYXNlIDEyNzp0aGlzLiQ9Z2Vbd2UtNl0sbHQudXBkYXRlTGlua0ludGVycG9sYXRlKGdlW3dlLTRdLGdlW3dlXSk7YnJlYWs7Y2FzZSAxMjg6Y2FzZSAxMzA6dGhpcy4kPVtnZVt3ZV1dO2JyZWFrO2Nhc2UgMTI5OmNhc2UgMTMxOmdlW3dlLTJdLnB1c2goZ2Vbd2VdKSx0aGlzLiQ9Z2Vbd2UtMl07YnJlYWs7Y2FzZSAxMzM6dGhpcy4kPWdlW3dlLTFdK2dlW3dlXTticmVhaztjYXNlIDE4MTp0aGlzLiQ9Z2Vbd2VdO2JyZWFrO2Nhc2UgMTgyOnRoaXMuJD1nZVt3ZS0xXSsiIitnZVt3ZV07YnJlYWs7Y2FzZSAxODQ6dGhpcy4kPWdlW3dlLTFdKyIiK2dlW3dlXTticmVhaztjYXNlIDE4NTp0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IlRCIn07YnJlYWs7Y2FzZSAxODY6dGhpcy4kPXtzdG10OiJkaXIiLHZhbHVlOiJCVCJ9O2JyZWFrO2Nhc2UgMTg3OnRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiUkwifTticmVhaztjYXNlIDE4ODp0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IkxSIn07YnJlYWt9fSwiYW5vbnltb3VzIiksdGFibGU6W3szOjEsNDoyLDk6ZSwxMDpyLDEyOm59LHsxOlszXX0sdChpLGEsezU6Nn0pLHs0OjcsOTplLDEwOnIsMTI6bn0sezQ6OCw5OmUsMTA6ciwxMjpufSx7MTM6WzEsOV0sMTQ6WzEsMTBdfSx7MTpbMiwxXSw2OjExLDc6MTIsODpzLDk6bCwxMDp1LDExOmgsMjA6MTcsMjI6MTgsMjM6MTksMjQ6MjAsMjU6MjEsMjY6MjIsMjc6ZiwzMzoyNCwzNDpkLDM2OnAsMzg6bSw0MjoyOCw0MzozOCw0NDpnLDQ1OjM5LDQ3OjQwLDYwOnksODQ6diw4NTp4LDg2OmIsODc6VCw4ODpTLDg5OncsMTAyOkUsMTA1Ol8sMTA2OkMsMTA5OkQsMTExOk8sMTEzOjQxLDExNDpSLDExNTprLDExNjpMLDEyMTpBLDEyMjpJLDEyMzpNLDEyNDpQfSx0KGksWzIsOV0pLHQoaSxbMiwxMF0pLHQoaSxbMiwxMV0pLHs4OlsxLDU0XSw5OlsxLDU1XSwxMDpCLDE1OjUzLDE4OjU2fSx0KEYsWzIsM10pLHQoRixbMiw0XSksdChGLFsyLDVdKSx0KEYsWzIsNl0pLHQoRixbMiw3XSksdChGLFsyLDhdKSx7ODp6LDk6JCwxMTpVLDIxOjU4LDQxOjU5LDcyOjYzLDc1OlsxLDY0XSw3NzpbMSw2Nl0sNzg6WzEsNjVdfSx7ODp6LDk6JCwxMTpVLDIxOjY3fSx7ODp6LDk6JCwxMTpVLDIxOjY4fSx7ODp6LDk6JCwxMTpVLDIxOjY5fSx7ODp6LDk6JCwxMTpVLDIxOjcwfSx7ODp6LDk6JCwxMTpVLDIxOjcxfSx7ODp6LDk6JCwxMDpbMSw3Ml0sMTE6VSwyMTo3M30sdChGLFsyLDM2XSksezM1OlsxLDc0XX0sezM3OlsxLDc1XX0sdChGLFsyLDM5XSksdChLLFsyLDUwXSx7MTg6NzYsMzk6NzcsMTA6Qiw0MDplZX0pLHsxMDpbMSw3OV19LHsxMDpbMSw4MF19LHsxMDpbMSw4MV19LHsxMDpbMSw4Ml19LHsxNDpZLDQ0OmNlLDYwOlosODA6WzEsODZdLDg5OnVlLDk1OlsxLDgzXSw5NzpbMSw4NF0sMTAxOjg1LDEwNTpRLDEwNjpqLDEwOTpuZSwxMTE6dGUsMTE0OmhlLDExNTpsZSwxMTY6SiwxMjA6ODd9LHQoRixbMiwxODVdKSx0KEYsWzIsMTg2XSksdChGLFsyLDE4N10pLHQoRixbMiwxODhdKSx0KFNlLFsyLDUxXSksdChTZSxbMiw1NF0sezQ2OlsxLDk5XX0pLHQoc2UsWzIsNzJdLHsxMTM6MTEyLDI5OlsxLDEwMF0sNDQ6Zyw0ODpbMSwxMDFdLDUwOlsxLDEwMl0sNTI6WzEsMTAzXSw1NDpbMSwxMDRdLDU2OlsxLDEwNV0sNTg6WzEsMTA2XSw2MDp5LDYzOlsxLDEwN10sNjU6WzEsMTA4XSw2NzpbMSwxMDldLDY4OlsxLDExMF0sNzA6WzEsMTExXSw4OTp3LDEwMjpFLDEwNTpfLDEwNjpDLDEwOTpELDExMTpPLDExNDpSLDExNTprLDExNjpMfSksdChhZSxbMiwxODFdKSx0KGFlLFsyLDE0Ml0pLHQoYWUsWzIsMTQzXSksdChhZSxbMiwxNDRdKSx0KGFlLFsyLDE0NV0pLHQoYWUsWzIsMTQ2XSksdChhZSxbMiwxNDddKSx0KGFlLFsyLDE0OF0pLHQoYWUsWzIsMTQ5XSksdChhZSxbMiwxNTBdKSx0KGFlLFsyLDE1MV0pLHQoYWUsWzIsMTUyXSksdChpLFsyLDEyXSksdChpLFsyLDE4XSksdChpLFsyLDE5XSksezk6WzEsMTEzXX0sdChPZSxbMiwyNl0sezE4OjExNCwxMDpCfSksdChGLFsyLDI3XSksezQyOjExNSw0MzozOCw0NDpnLDQ1OjM5LDQ3OjQwLDYwOnksODk6dywxMDI6RSwxMDU6XywxMDY6QywxMDk6RCwxMTE6TywxMTM6NDEsMTE0OlIsMTE1OmssMTE2Okx9LHQoRixbMiw0MF0pLHQoRixbMiw0MV0pLHQoRixbMiw0Ml0pLHQoeWUsWzIsNzZdLHs3MzoxMTYsNjI6WzEsMTE4XSw3NDpbMSwxMTddfSksezc2OjExOSw3OToxMjAsODA6QmUsODE6SGUsMTE2OnplLDExOTpMZX0sezc1OlsxLDEyNV0sNzc6WzEsMTI2XX0sdChJZSxbMiw4M10pLHQoRixbMiwyOF0pLHQoRixbMiwyOV0pLHQoRixbMiwzMF0pLHQoRixbMiwzMV0pLHQoRixbMiwzMl0pLHsxMDp4ZSwxMjpxLDE0OmRlLDI3OmllLDI4OjEyNywzMjpvZSw0NDpWLDYwOlRlLDc1OlcsODA6WzEsMTI5XSw4MTpbMSwxMzBdLDgzOjE0MCw4NDpwZSw4NTp2ZSw4NjpQZSw4NzpfZSw4ODpiZSw4OTpWZSw5MDpEZSw5MToxMjgsMTA1OnFlLDEwOTphdCwxMTE6UnQsMTE0OnN0LDExNTpVZSwxMTY6Y3R9LHQoV2UsYSx7NToxNTN9KSx0KEYsWzIsMzddKSx0KEYsWzIsMzhdKSx0KEssWzIsNDhdLHs0NDpvdH0pLHQoSyxbMiw0OV0sezE4OjE1NSwxMDpCLDQwOll0fSksdChTZSxbMiw0NF0pLHs0NDpnLDQ3OjE1Nyw2MDp5LDg5OncsMTAyOkUsMTA1Ol8sMTA2OkMsMTA5OkQsMTExOk8sMTEzOjQxLDExNDpSLDExNTprLDExNjpMfSx7MTAyOlsxLDE1OF0sMTAzOjE1OSwxMDU6WzEsMTYwXX0sezQ0OmcsNDc6MTYxLDYwOnksODk6dywxMDI6RSwxMDU6XywxMDY6QywxMDk6RCwxMTE6TywxMTM6NDEsMTE0OlIsMTE1OmssMTE2Okx9LHs0NDpnLDQ3OjE2Miw2MDp5LDg5OncsMTAyOkUsMTA1Ol8sMTA2OkMsMTA5OkQsMTExOk8sMTEzOjQxLDExNDpSLDExNTprLDExNjpMfSx0KFR0LFsyLDEwN10sezEwOlsxLDE2M10sOTY6WzEsMTY0XX0pLHs4MDpbMSwxNjVdfSx0KFR0LFsyLDExNV0sezEyMDoxNjcsMTA6WzEsMTY2XSwxNDpZLDQ0OmNlLDYwOlosODk6dWUsMTA1OlEsMTA2OmosMTA5Om5lLDExMTp0ZSwxMTQ6aGUsMTE1OmxlLDExNjpKfSksdChUdCxbMiwxMTddLHsxMDpbMSwxNjhdfSksdChNdCxbMiwxODNdKSx0KE10LFsyLDE3MF0pLHQoTXQsWzIsMTcxXSksdChNdCxbMiwxNzJdKSx0KE10LFsyLDE3M10pLHQoTXQsWzIsMTc0XSksdChNdCxbMiwxNzVdKSx0KE10LFsyLDE3Nl0pLHQoTXQsWzIsMTc3XSksdChNdCxbMiwxNzhdKSx0KE10LFsyLDE3OV0pLHQoTXQsWzIsMTgwXSksezQ0OmcsNDc6MTY5LDYwOnksODk6dywxMDI6RSwxMDU6XywxMDY6QywxMDk6RCwxMTE6TywxMTM6NDEsMTE0OlIsMTE1OmssMTE2Okx9LHszMDoxNzAsNjc6YnQsODA6dXQsODE6U3QsODI6MTcxLDExNjpmdCwxMTc6dnQsMTE4Om50fSx7MzA6MTc4LDY3OmJ0LDgwOnV0LDgxOlN0LDgyOjE3MSwxMTY6ZnQsMTE3OnZ0LDExODpudH0sezMwOjE4MCw1MDpbMSwxNzldLDY3OmJ0LDgwOnV0LDgxOlN0LDgyOjE3MSwxMTY6ZnQsMTE3OnZ0LDExODpudH0sezMwOjE4MSw2NzpidCw4MDp1dCw4MTpTdCw4MjoxNzEsMTE2OmZ0LDExNzp2dCwxMTg6bnR9LHszMDoxODIsNjc6YnQsODA6dXQsODE6U3QsODI6MTcxLDExNjpmdCwxMTc6dnQsMTE4Om50fSx7MzA6MTgzLDY3OmJ0LDgwOnV0LDgxOlN0LDgyOjE3MSwxMTY6ZnQsMTE3OnZ0LDExODpudH0sezEwOTpbMSwxODRdfSx7MzA6MTg1LDY3OmJ0LDgwOnV0LDgxOlN0LDgyOjE3MSwxMTY6ZnQsMTE3OnZ0LDExODpudH0sezMwOjE4Niw2NTpbMSwxODddLDY3OmJ0LDgwOnV0LDgxOlN0LDgyOjE3MSwxMTY6ZnQsMTE3OnZ0LDExODpudH0sezMwOjE4OCw2NzpidCw4MDp1dCw4MTpTdCw4MjoxNzEsMTE2OmZ0LDExNzp2dCwxMTg6bnR9LHszMDoxODksNjc6YnQsODA6dXQsODE6U3QsODI6MTcxLDExNjpmdCwxMTc6dnQsMTE4Om50fSx7MzA6MTkwLDY3OmJ0LDgwOnV0LDgxOlN0LDgyOjE3MSwxMTY6ZnQsMTE3OnZ0LDExODpudH0sdChhZSxbMiwxODJdKSx0KGksWzIsMjBdKSx0KE9lLFsyLDI1XSksdChLLFsyLDQ2XSx7Mzk6MTkxLDE4OjE5MiwxMDpCLDQwOmVlfSksdCh5ZSxbMiw3M10sezEwOlsxLDE5M119KSx7MTA6WzEsMTk0XX0sezMwOjE5NSw2NzpidCw4MDp1dCw4MTpTdCw4MjoxNzEsMTE2OmZ0LDExNzp2dCwxMTg6bnR9LHs3NzpbMSwxOTZdLDc5OjE5NywxMTY6emUsMTE5OkxlfSx0KHBuLFsyLDc5XSksdChwbixbMiw4MV0pLHQocG4sWzIsODJdKSx0KHBuLFsyLDE2OF0pLHQocG4sWzIsMTY5XSksezc2OjE5OCw3OToxMjAsODA6QmUsODE6SGUsMTE2OnplLDExOTpMZX0sdChJZSxbMiw4NF0pLHs4OnosOTokLDEwOnhlLDExOlUsMTI6cSwxNDpkZSwyMToyMDAsMjc6aWUsMjk6WzEsMTk5XSwzMjpvZSw0NDpWLDYwOlRlLDc1OlcsODM6MTQwLDg0OnBlLDg1OnZlLDg2OlBlLDg3Ol9lLDg4OmJlLDg5OlZlLDkwOkRlLDkxOjIwMSwxMDU6cWUsMTA5OmF0LDExMTpSdCwxMTQ6c3QsMTE1OlVlLDExNjpjdH0sdChrdCxbMiwxMDFdKSx0KGt0LFsyLDEwM10pLHQoa3QsWzIsMTA0XSksdChrdCxbMiwxNTddKSx0KGt0LFsyLDE1OF0pLHQoa3QsWzIsMTU5XSksdChrdCxbMiwxNjBdKSx0KGt0LFsyLDE2MV0pLHQoa3QsWzIsMTYyXSksdChrdCxbMiwxNjNdKSx0KGt0LFsyLDE2NF0pLHQoa3QsWzIsMTY1XSksdChrdCxbMiwxNjZdKSx0KGt0LFsyLDE2N10pLHQoa3QsWzIsOTBdKSx0KGt0LFsyLDkxXSksdChrdCxbMiw5Ml0pLHQoa3QsWzIsOTNdKSx0KGt0LFsyLDk0XSksdChrdCxbMiw5NV0pLHQoa3QsWzIsOTZdKSx0KGt0LFsyLDk3XSksdChrdCxbMiw5OF0pLHQoa3QsWzIsOTldKSx0KGt0LFsyLDEwMF0pLHs2OjExLDc6MTIsODpzLDk6bCwxMDp1LDExOmgsMjA6MTcsMjI6MTgsMjM6MTksMjQ6MjAsMjU6MjEsMjY6MjIsMjc6ZiwzMjpbMSwyMDJdLDMzOjI0LDM0OmQsMzY6cCwzODptLDQyOjI4LDQzOjM4LDQ0OmcsNDU6MzksNDc6NDAsNjA6eSw4NDp2LDg1OngsODY6Yiw4NzpULDg4OlMsODk6dywxMDI6RSwxMDU6XywxMDY6QywxMDk6RCwxMTE6TywxMTM6NDEsMTE0OlIsMTE1OmssMTE2OkwsMTIxOkEsMTIyOkksMTIzOk0sMTI0OlB9LHsxMDpCLDE4OjIwM30sezQ0OlsxLDIwNF19LHQoU2UsWzIsNDNdKSx7MTA6WzEsMjA1XSw0NDpnLDYwOnksODk6dywxMDI6RSwxMDU6XywxMDY6QywxMDk6RCwxMTE6TywxMTM6MTEyLDExNDpSLDExNTprLDExNjpMfSx7MTA6WzEsMjA2XX0sezEwOlsxLDIwN10sMTA2OlsxLDIwOF19LHQoT24sWzIsMTI4XSksezEwOlsxLDIwOV0sNDQ6Zyw2MDp5LDg5OncsMTAyOkUsMTA1Ol8sMTA2OkMsMTA5OkQsMTExOk8sMTEzOjExMiwxMTQ6UiwxMTU6aywxMTY6TH0sezEwOlsxLDIxMF0sNDQ6Zyw2MDp5LDg5OncsMTAyOkUsMTA1Ol8sMTA2OkMsMTA5OkQsMTExOk8sMTEzOjExMiwxMTQ6UiwxMTU6aywxMTY6TH0sezgwOlsxLDIxMV19LHQoVHQsWzIsMTA5XSx7MTA6WzEsMjEyXX0pLHQoVHQsWzIsMTExXSx7MTA6WzEsMjEzXX0pLHs4MDpbMSwyMTRdfSx0KE10LFsyLDE4NF0pLHs4MDpbMSwyMTVdLDk4OlsxLDIxNl19LHQoU2UsWzIsNTVdLHsxMTM6MTEyLDQ0OmcsNjA6eSw4OTp3LDEwMjpFLDEwNTpfLDEwNjpDLDEwOTpELDExMTpPLDExNDpSLDExNTprLDExNjpMfSksezMxOlsxLDIxN10sNjc6YnQsODI6MjE4LDExNjpmdCwxMTc6dnQsMTE4Om50fSx0KHRuLFsyLDg2XSksdCh0bixbMiw4OF0pLHQodG4sWzIsODldKSx0KHRuLFsyLDE1M10pLHQodG4sWzIsMTU0XSksdCh0bixbMiwxNTVdKSx0KHRuLFsyLDE1Nl0pLHs0OTpbMSwyMTldLDY3OmJ0LDgyOjIxOCwxMTY6ZnQsMTE3OnZ0LDExODpudH0sezMwOjIyMCw2NzpidCw4MDp1dCw4MTpTdCw4MjoxNzEsMTE2OmZ0LDExNzp2dCwxMTg6bnR9LHs1MTpbMSwyMjFdLDY3OmJ0LDgyOjIxOCwxMTY6ZnQsMTE3OnZ0LDExODpudH0sezUzOlsxLDIyMl0sNjc6YnQsODI6MjE4LDExNjpmdCwxMTc6dnQsMTE4Om50fSx7NTU6WzEsMjIzXSw2NzpidCw4MjoyMTgsMTE2OmZ0LDExNzp2dCwxMTg6bnR9LHs1NzpbMSwyMjRdLDY3OmJ0LDgyOjIxOCwxMTY6ZnQsMTE3OnZ0LDExODpudH0sezYwOlsxLDIyNV19LHs2NDpbMSwyMjZdLDY3OmJ0LDgyOjIxOCwxMTY6ZnQsMTE3OnZ0LDExODpudH0sezY2OlsxLDIyN10sNjc6YnQsODI6MjE4LDExNjpmdCwxMTc6dnQsMTE4Om50fSx7MzA6MjI4LDY3OmJ0LDgwOnV0LDgxOlN0LDgyOjE3MSwxMTY6ZnQsMTE3OnZ0LDExODpudH0sezMxOlsxLDIyOV0sNjc6YnQsODI6MjE4LDExNjpmdCwxMTc6dnQsMTE4Om50fSx7Njc6YnQsNjk6WzEsMjMwXSw3MTpbMSwyMzFdLDgyOjIxOCwxMTY6ZnQsMTE3OnZ0LDExODpudH0sezY3OmJ0LDY5OlsxLDIzM10sNzE6WzEsMjMyXSw4MjoyMTgsMTE2OmZ0LDExNzp2dCwxMTg6bnR9LHQoSyxbMiw0NV0sezE4OjE1NSwxMDpCLDQwOll0fSksdChLLFsyLDQ3XSx7NDQ6b3R9KSx0KHllLFsyLDc1XSksdCh5ZSxbMiw3NF0pLHs2MjpbMSwyMzRdLDY3OmJ0LDgyOjIxOCwxMTY6ZnQsMTE3OnZ0LDExODpudH0sdCh5ZSxbMiw3N10pLHQocG4sWzIsODBdKSx7Nzc6WzEsMjM1XSw3OToxOTcsMTE2OnplLDExOTpMZX0sezMwOjIzNiw2NzpidCw4MDp1dCw4MTpTdCw4MjoxNzEsMTE2OmZ0LDExNzp2dCwxMTg6bnR9LHQoV2UsYSx7NToyMzd9KSx0KGt0LFsyLDEwMl0pLHQoRixbMiwzNV0pLHs0MzoyMzgsNDQ6Zyw0NTozOSw0Nzo0MCw2MDp5LDg5OncsMTAyOkUsMTA1Ol8sMTA2OkMsMTA5OkQsMTExOk8sMTEzOjQxLDExNDpSLDExNTprLDExNjpMfSx7MTA6QiwxODoyMzl9LHsxMDpNciw2MDpJciw4NDpQbiw5MjoyNDAsMTA1OkR0LDEwNzoyNDEsMTA4OjI0MiwxMDk6Q2UsMTEwOnR0LDExMTpDdCwxMTI6Z3J9LHsxMDpNciw2MDpJciw4NDpQbiw5MjoyNTEsMTA0OlsxLDI1Ml0sMTA1OkR0LDEwNzoyNDEsMTA4OjI0MiwxMDk6Q2UsMTEwOnR0LDExMTpDdCwxMTI6Z3J9LHsxMDpNciw2MDpJciw4NDpQbiw5MjoyNTMsMTA0OlsxLDI1NF0sMTA1OkR0LDEwNzoyNDEsMTA4OjI0MiwxMDk6Q2UsMTEwOnR0LDExMTpDdCwxMTI6Z3J9LHsxMDU6WzEsMjU1XX0sezEwOk1yLDYwOklyLDg0OlBuLDkyOjI1NiwxMDU6RHQsMTA3OjI0MSwxMDg6MjQyLDEwOTpDZSwxMTA6dHQsMTExOkN0LDExMjpncn0sezQ0OmcsNDc6MjU3LDYwOnksODk6dywxMDI6RSwxMDU6XywxMDY6QywxMDk6RCwxMTE6TywxMTM6NDEsMTE0OlIsMTE1OmssMTE2Okx9LHQoVHQsWzIsMTA4XSksezgwOlsxLDI1OF19LHs4MDpbMSwyNTldLDk4OlsxLDI2MF19LHQoVHQsWzIsMTE2XSksdChUdCxbMiwxMThdLHsxMDpbMSwyNjFdfSksdChUdCxbMiwxMTldKSx0KHNlLFsyLDU2XSksdCh0bixbMiw4N10pLHQoc2UsWzIsNTddKSx7NTE6WzEsMjYyXSw2NzpidCw4MjoyMTgsMTE2OmZ0LDExNzp2dCwxMTg6bnR9LHQoc2UsWzIsNjRdKSx0KHNlLFsyLDU5XSksdChzZSxbMiw2MF0pLHQoc2UsWzIsNjFdKSx7MTA5OlsxLDI2M119LHQoc2UsWzIsNjNdKSx0KHNlLFsyLDY1XSksezY2OlsxLDI2NF0sNjc6YnQsODI6MjE4LDExNjpmdCwxMTc6dnQsMTE4Om50fSx0KHNlLFsyLDY3XSksdChzZSxbMiw2OF0pLHQoc2UsWzIsNzBdKSx0KHNlLFsyLDY5XSksdChzZSxbMiw3MV0pLHQoWzEwLDQ0LDYwLDg5LDEwMiwxMDUsMTA2LDEwOSwxMTEsMTE0LDExNSwxMTZdLFsyLDg1XSksdCh5ZSxbMiw3OF0pLHszMTpbMSwyNjVdLDY3OmJ0LDgyOjIxOCwxMTY6ZnQsMTE3OnZ0LDExODpudH0sezY6MTEsNzoxMiw4OnMsOTpsLDEwOnUsMTE6aCwyMDoxNywyMjoxOCwyMzoxOSwyNDoyMCwyNToyMSwyNjoyMiwyNzpmLDMyOlsxLDI2Nl0sMzM6MjQsMzQ6ZCwzNjpwLDM4Om0sNDI6MjgsNDM6MzgsNDQ6Zyw0NTozOSw0Nzo0MCw2MDp5LDg0OnYsODU6eCw4NjpiLDg3OlQsODg6Uyw4OTp3LDEwMjpFLDEwNTpfLDEwNjpDLDEwOTpELDExMTpPLDExMzo0MSwxMTQ6UiwxMTU6aywxMTY6TCwxMjE6QSwxMjI6SSwxMjM6TSwxMjQ6UH0sdChTZSxbMiw1M10pLHs0MzoyNjcsNDQ6Zyw0NTozOSw0Nzo0MCw2MDp5LDg5OncsMTAyOkUsMTA1Ol8sMTA2OkMsMTA5OkQsMTExOk8sMTEzOjQxLDExNDpSLDExNTprLDExNjpMfSx0KFR0LFsyLDEyMV0sezEwNjpybn0pLHQoeW4sWzIsMTMwXSx7MTA4OjI2OSwxMDpNciw2MDpJciw4NDpQbiwxMDU6RHQsMTA5OkNlLDExMDp0dCwxMTE6Q3QsMTEyOmdyfSksdChacixbMiwxMzJdKSx0KFpyLFsyLDEzNF0pLHQoWnIsWzIsMTM1XSksdChacixbMiwxMzZdKSx0KFpyLFsyLDEzN10pLHQoWnIsWzIsMTM4XSksdChacixbMiwxMzldKSx0KFpyLFsyLDE0MF0pLHQoWnIsWzIsMTQxXSksdChUdCxbMiwxMjJdLHsxMDY6cm59KSx7MTA6WzEsMjcwXX0sdChUdCxbMiwxMjNdLHsxMDY6cm59KSx7MTA6WzEsMjcxXX0sdChPbixbMiwxMjldKSx0KFR0LFsyLDEwNV0sezEwNjpybn0pLHQoVHQsWzIsMTA2XSx7MTEzOjExMiw0NDpnLDYwOnksODk6dywxMDI6RSwxMDU6XywxMDY6QywxMDk6RCwxMTE6TywxMTQ6UiwxMTU6aywxMTY6TH0pLHQoVHQsWzIsMTEwXSksdChUdCxbMiwxMTJdLHsxMDpbMSwyNzJdfSksdChUdCxbMiwxMTNdKSx7OTg6WzEsMjczXX0sezUxOlsxLDI3NF19LHs2MjpbMSwyNzVdfSx7NjY6WzEsMjc2XX0sezg6eiw5OiQsMTE6VSwyMToyNzd9LHQoRixbMiwzNF0pLHQoU2UsWzIsNTJdKSx7MTA6TXIsNjA6SXIsODQ6UG4sMTA1OkR0LDEwNzoyNzgsMTA4OjI0MiwxMDk6Q2UsMTEwOnR0LDExMTpDdCwxMTI6Z3J9LHQoWnIsWzIsMTMzXSksezE0OlksNDQ6Y2UsNjA6Wiw4OTp1ZSwxMDE6Mjc5LDEwNTpRLDEwNjpqLDEwOTpuZSwxMTE6dGUsMTE0OmhlLDExNTpsZSwxMTY6SiwxMjA6ODd9LHsxNDpZLDQ0OmNlLDYwOlosODk6dWUsMTAxOjI4MCwxMDU6USwxMDY6aiwxMDk6bmUsMTExOnRlLDExNDpoZSwxMTU6bGUsMTE2OkosMTIwOjg3fSx7OTg6WzEsMjgxXX0sdChUdCxbMiwxMjBdKSx0KHNlLFsyLDU4XSksezMwOjI4Miw2NzpidCw4MDp1dCw4MTpTdCw4MjoxNzEsMTE2OmZ0LDExNzp2dCwxMTg6bnR9LHQoc2UsWzIsNjZdKSx0KFdlLGEsezU6MjgzfSksdCh5bixbMiwxMzFdLHsxMDg6MjY5LDEwOk1yLDYwOklyLDg0OlBuLDEwNTpEdCwxMDk6Q2UsMTEwOnR0LDExMTpDdCwxMTI6Z3J9KSx0KFR0LFsyLDEyNl0sezEyMDoxNjcsMTA6WzEsMjg0XSwxNDpZLDQ0OmNlLDYwOlosODk6dWUsMTA1OlEsMTA2OmosMTA5Om5lLDExMTp0ZSwxMTQ6aGUsMTE1OmxlLDExNjpKfSksdChUdCxbMiwxMjddLHsxMjA6MTY3LDEwOlsxLDI4NV0sMTQ6WSw0NDpjZSw2MDpaLDg5OnVlLDEwNTpRLDEwNjpqLDEwOTpuZSwxMTE6dGUsMTE0OmhlLDExNTpsZSwxMTY6Sn0pLHQoVHQsWzIsMTE0XSksezMxOlsxLDI4Nl0sNjc6YnQsODI6MjE4LDExNjpmdCwxMTc6dnQsMTE4Om50fSx7NjoxMSw3OjEyLDg6cyw5OmwsMTA6dSwxMTpoLDIwOjE3LDIyOjE4LDIzOjE5LDI0OjIwLDI1OjIxLDI2OjIyLDI3OmYsMzI6WzEsMjg3XSwzMzoyNCwzNDpkLDM2OnAsMzg6bSw0MjoyOCw0MzozOCw0NDpnLDQ1OjM5LDQ3OjQwLDYwOnksODQ6diw4NTp4LDg2OmIsODc6VCw4ODpTLDg5OncsMTAyOkUsMTA1Ol8sMTA2OkMsMTA5OkQsMTExOk8sMTEzOjQxLDExNDpSLDExNTprLDExNjpMLDEyMTpBLDEyMjpJLDEyMzpNLDEyNDpQfSx7MTA6TXIsNjA6SXIsODQ6UG4sOTI6Mjg4LDEwNTpEdCwxMDc6MjQxLDEwODoyNDIsMTA5OkNlLDExMDp0dCwxMTE6Q3QsMTEyOmdyfSx7MTA6TXIsNjA6SXIsODQ6UG4sOTI6Mjg5LDEwNTpEdCwxMDc6MjQxLDEwODoyNDIsMTA5OkNlLDExMDp0dCwxMTE6Q3QsMTEyOmdyfSx0KHNlLFsyLDYyXSksdChGLFsyLDMzXSksdChUdCxbMiwxMjRdLHsxMDY6cm59KSx0KFR0LFsyLDEyNV0sezEwNjpybn0pXSxkZWZhdWx0QWN0aW9uczp7fSxwYXJzZUVycm9yOm8oZnVuY3Rpb24oZXQsZ3Qpe2lmKGd0LnJlY292ZXJhYmxlKXRoaXMudHJhY2UoZXQpO2Vsc2V7dmFyIEt0PW5ldyBFcnJvcihldCk7dGhyb3cgS3QuaGFzaD1ndCxLdH19LCJwYXJzZUVycm9yIikscGFyc2U6byhmdW5jdGlvbihldCl7dmFyIGd0PXRoaXMsS3Q9WzBdLGx0PVtdLENuPVtudWxsXSxnZT1bXSxRZj10aGlzLnRhYmxlLHdlPSIiLEVpPTAsbCQ9MCxjJD0wLHRiZT0yLHUkPTEscmJlPWdlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLGppPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksWmY9e3l5Ont9fTtmb3IodmFyICRDIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksJEMpJiYoWmYueXlbJENdPXRoaXMueXlbJENdKTtqaS5zZXRJbnB1dChldCxaZi55eSksWmYueXkubGV4ZXI9amksWmYueXkucGFyc2VyPXRoaXMsdHlwZW9mIGppLnl5bGxvYz4idSImJihqaS55eWxsb2M9e30pO3ZhciB6Qz1qaS55eWxsb2M7Z2UucHVzaCh6Qyk7dmFyIG5iZT1qaS5vcHRpb25zJiZqaS5vcHRpb25zLnJhbmdlczt0eXBlb2YgWmYueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9WmYueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gUWl0KFhzKXtLdC5sZW5ndGg9S3QubGVuZ3RoLTIqWHMsQ24ubGVuZ3RoPUNuLmxlbmd0aC1YcyxnZS5sZW5ndGg9Z2UubGVuZ3RoLVhzfW8oUWl0LCJwb3BTdGFjayIpO2Z1bmN0aW9uIGliZSgpe3ZhciBYcztyZXR1cm4gWHM9bHQucG9wKCl8fGppLmxleCgpfHx1JCx0eXBlb2YgWHMhPSJudW1iZXIiJiYoWHMgaW5zdGFuY2VvZiBBcnJheSYmKGx0PVhzLFhzPWx0LnBvcCgpKSxYcz1ndC5zeW1ib2xzX1tYc118fFhzKSxYc31vKGliZSwibGV4Iik7Zm9yKHZhciBLYSxHQyxKZix3byxaaXQsVkMsYzA9e30sejQsbnUsaCQsRzQ7Oyl7aWYoSmY9S3RbS3QubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbSmZdP3dvPXRoaXMuZGVmYXVsdEFjdGlvbnNbSmZdOigoS2E9PT1udWxsfHx0eXBlb2YgS2E+InUiKSYmKEthPWliZSgpKSx3bz1RZltKZl0mJlFmW0pmXVtLYV0pLHR5cGVvZiB3bz4idSJ8fCF3by5sZW5ndGh8fCF3b1swXSl7dmFyIFVDPSIiO0c0PVtdO2Zvcih6NCBpbiBRZltKZl0pdGhpcy50ZXJtaW5hbHNfW3o0XSYmejQ+dGJlJiZHNC5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bejRdKyInIik7amkuc2hvd1Bvc2l0aW9uP1VDPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKEVpKzEpK2A6CmAramkuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtHNC5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW0thXXx8S2EpKyInIjpVQz0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhFaSsxKSsiOiBVbmV4cGVjdGVkICIrKEthPT11JD8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tLYV18fEthKSsiJyIpLHRoaXMucGFyc2VFcnJvcihVQyx7dGV4dDpqaS5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bS2FdfHxLYSxsaW5lOmppLnl5bGluZW5vLGxvYzp6QyxleHBlY3RlZDpHNH0pfWlmKHdvWzBdaW5zdGFuY2VvZiBBcnJheSYmd28ubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitKZisiLCB0b2tlbjogIitLYSk7c3dpdGNoKHdvWzBdKXtjYXNlIDE6S3QucHVzaChLYSksQ24ucHVzaChqaS55eXRleHQpLGdlLnB1c2goamkueXlsbG9jKSxLdC5wdXNoKHdvWzFdKSxLYT1udWxsLEdDPyhLYT1HQyxHQz1udWxsKToobCQ9amkueXlsZW5nLHdlPWppLnl5dGV4dCxFaT1qaS55eWxpbmVubyx6Qz1qaS55eWxsb2MsYyQ+MCYmYyQtLSk7YnJlYWs7Y2FzZSAyOmlmKG51PXRoaXMucHJvZHVjdGlvbnNfW3dvWzFdXVsxXSxjMC4kPUNuW0NuLmxlbmd0aC1udV0sYzAuXyQ9e2ZpcnN0X2xpbmU6Z2VbZ2UubGVuZ3RoLShudXx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmdlW2dlLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmdlW2dlLmxlbmd0aC0obnV8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46Z2VbZ2UubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxuYmUmJihjMC5fJC5yYW5nZT1bZ2VbZ2UubGVuZ3RoLShudXx8MSldLnJhbmdlWzBdLGdlW2dlLmxlbmd0aC0xXS5yYW5nZVsxXV0pLFZDPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShjMCxbd2UsbCQsRWksWmYueXksd29bMV0sQ24sZ2VdLmNvbmNhdChyYmUpKSx0eXBlb2YgVkM8InUiKXJldHVybiBWQztudSYmKEt0PUt0LnNsaWNlKDAsLTEqbnUqMiksQ249Q24uc2xpY2UoMCwtMSpudSksZ2U9Z2Uuc2xpY2UoMCwtMSpudSkpLEt0LnB1c2godGhpcy5wcm9kdWN0aW9uc19bd29bMV1dWzBdKSxDbi5wdXNoKGMwLiQpLGdlLnB1c2goYzAuXyQpLGgkPVFmW0t0W0t0Lmxlbmd0aC0yXV1bS3RbS3QubGVuZ3RoLTFdXSxLdC5wdXNoKGgkKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfSwicGFyc2UiKX0sZWk9ZnVuY3Rpb24oKXt2YXIgSHI9e0VPRjoxLHBhcnNlRXJyb3I6byhmdW5jdGlvbihndCxLdCl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihndCxLdCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoZ3QpfSwicGFyc2VFcnJvciIpLHNldElucHV0Om8oZnVuY3Rpb24oZXQsZ3Qpe3JldHVybiB0aGlzLnl5PWd0fHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1ldCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30sInNldElucHV0IiksaW5wdXQ6byhmdW5jdGlvbigpe3ZhciBldD10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9ZXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPWV0LHRoaXMubWF0Y2hlZCs9ZXQ7dmFyIGd0PWV0Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gZ3Q/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLGV0fSwiaW5wdXQiKSx1bnB1dDpvKGZ1bmN0aW9uKGV0KXt2YXIgZ3Q9ZXQubGVuZ3RoLEt0PWV0LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9ZXQrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLWd0KSx0aGlzLm9mZnNldC09Z3Q7dmFyIGx0PXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLEt0Lmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09S3QubGVuZ3RoLTEpO3ZhciBDbj10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46S3Q/KEt0Lmxlbmd0aD09PWx0Lmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrbHRbbHQubGVuZ3RoLUt0Lmxlbmd0aF0ubGVuZ3RoLUt0WzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tZ3R9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bQ25bMF0sQ25bMF0rdGhpcy55eWxlbmctZ3RdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sInVucHV0IiksbW9yZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30sIm1vcmUiKSxyZWplY3Q6byhmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sInJlamVjdCIpLGxlc3M6byhmdW5jdGlvbihldCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKGV0KSl9LCJsZXNzIikscGFzdElucHV0Om8oZnVuY3Rpb24oKXt2YXIgZXQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihldC5sZW5ndGg+MjA/Ii4uLiI6IiIpK2V0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSwicGFzdElucHV0IiksdXBjb21pbmdJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIGV0PXRoaXMubWF0Y2g7cmV0dXJuIGV0Lmxlbmd0aDwyMCYmKGV0Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1ldC5sZW5ndGgpKSwoZXQuc3Vic3RyKDAsMjApKyhldC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sInVwY29taW5nSW5wdXQiKSxzaG93UG9zaXRpb246byhmdW5jdGlvbigpe3ZhciBldD10aGlzLnBhc3RJbnB1dCgpLGd0PW5ldyBBcnJheShldC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBldCt0aGlzLnVwY29taW5nSW5wdXQoKStgCmArZ3QrIl4ifSwic2hvd1Bvc2l0aW9uIiksdGVzdF9tYXRjaDpvKGZ1bmN0aW9uKGV0LGd0KXt2YXIgS3QsbHQsQ247aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKENuPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKENuLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLGx0PWV0WzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxsdCYmKHRoaXMueXlsaW5lbm8rPWx0Lmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOmx0P2x0W2x0Lmxlbmd0aC0xXS5sZW5ndGgtbHRbbHQubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rZXRbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9ZXRbMF0sdGhpcy5tYXRjaCs9ZXRbMF0sdGhpcy5tYXRjaGVzPWV0LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKGV0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1ldFswXSxLdD10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxndCx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxLdClyZXR1cm4gS3Q7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIGdlIGluIENuKXRoaXNbZ2VdPUNuW2dlXTtyZXR1cm4hMX1yZXR1cm4hMX0sInRlc3RfbWF0Y2giKSxuZXh0Om8oZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgZXQsZ3QsS3QsbHQ7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgQ249dGhpcy5fY3VycmVudFJ1bGVzKCksZ2U9MDtnZTxDbi5sZW5ndGg7Z2UrKylpZihLdD10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW0NuW2dlXV0pLEt0JiYoIWd0fHxLdFswXS5sZW5ndGg+Z3RbMF0ubGVuZ3RoKSl7aWYoZ3Q9S3QsbHQ9Z2UsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoZXQ9dGhpcy50ZXN0X21hdGNoKEt0LENuW2dlXSksZXQhPT0hMSlyZXR1cm4gZXQ7aWYodGhpcy5fYmFja3RyYWNrKXtndD0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBndD8oZXQ9dGhpcy50ZXN0X21hdGNoKGd0LENuW2x0XSksZXQhPT0hMT9ldDohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sIm5leHQiKSxsZXg6byhmdW5jdGlvbigpe3ZhciBndD10aGlzLm5leHQoKTtyZXR1cm4gZ3R8fHRoaXMubGV4KCl9LCJsZXgiKSxiZWdpbjpvKGZ1bmN0aW9uKGd0KXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goZ3QpfSwiYmVnaW4iKSxwb3BTdGF0ZTpvKGZ1bmN0aW9uKCl7dmFyIGd0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIGd0PjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSwicG9wU3RhdGUiKSxfY3VycmVudFJ1bGVzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSwiX2N1cnJlbnRSdWxlcyIpLHRvcFN0YXRlOm8oZnVuY3Rpb24oZ3Qpe3JldHVybiBndD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKGd0fHwwKSxndD49MD90aGlzLmNvbmRpdGlvblN0YWNrW2d0XToiSU5JVElBTCJ9LCJ0b3BTdGF0ZSIpLHB1c2hTdGF0ZTpvKGZ1bmN0aW9uKGd0KXt0aGlzLmJlZ2luKGd0KX0sInB1c2hTdGF0ZSIpLHN0YXRlU3RhY2tTaXplOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LCJzdGF0ZVN0YWNrU2l6ZSIpLG9wdGlvbnM6e30scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKGd0LEt0LGx0LENuKXt2YXIgZ2U9Q247c3dpdGNoKGx0KXtjYXNlIDA6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDM0O2JyZWFrO2Nhc2UgMTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2JyZWFrO2Nhc2UgMjpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX2Rlc2NyIiksMzY7YnJlYWs7Y2FzZSAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7YnJlYWs7Y2FzZSA0OnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDU6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNjpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSA3OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgic2hhcGVEYXRhIiksS3QueXl0ZXh0PSIiLDQwO2JyZWFrO2Nhc2UgODpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInNoYXBlRGF0YVN0ciIpLDQwO2JyZWFrO2Nhc2UgOTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDQwO2JyZWFrO2Nhc2UgMTA6bGV0IFFmPS9cblxzKi9nO3JldHVybiBLdC55eXRleHQ9S3QueXl0ZXh0LnJlcGxhY2UoUWYsIjxici8+IiksNDA7YnJlYWs7Y2FzZSAxMTpyZXR1cm4gNDA7Y2FzZSAxMjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxMzp0aGlzLmJlZ2luKCJjYWxsYmFja25hbWUiKTticmVhaztjYXNlIDE0OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE1OnRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJjYWxsYmFja2FyZ3MiKTticmVhaztjYXNlIDE2OnJldHVybiA5NTtjYXNlIDE3OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE4OnJldHVybiA5NjtjYXNlIDE5OnJldHVybiJNRF9TVFIiO2Nhc2UgMjA6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjE6dGhpcy5iZWdpbigibWRfc3RyaW5nIik7YnJlYWs7Y2FzZSAyMjpyZXR1cm4iU1RSIjtjYXNlIDIzOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDI0OnRoaXMucHVzaFN0YXRlKCJzdHJpbmciKTticmVhaztjYXNlIDI1OnJldHVybiA4NDtjYXNlIDI2OnJldHVybiAxMDI7Y2FzZSAyNzpyZXR1cm4gODU7Y2FzZSAyODpyZXR1cm4gMTA0O2Nhc2UgMjk6cmV0dXJuIDg2O2Nhc2UgMzA6cmV0dXJuIDg3O2Nhc2UgMzE6cmV0dXJuIDk3O2Nhc2UgMzI6dGhpcy5iZWdpbigiY2xpY2siKTticmVhaztjYXNlIDMzOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDM0OnJldHVybiA4ODtjYXNlIDM1OnJldHVybiBndC5sZXguZmlyc3RHcmFwaCgpJiZ0aGlzLmJlZ2luKCJkaXIiKSwxMjticmVhaztjYXNlIDM2OnJldHVybiBndC5sZXguZmlyc3RHcmFwaCgpJiZ0aGlzLmJlZ2luKCJkaXIiKSwxMjticmVhaztjYXNlIDM3OnJldHVybiBndC5sZXguZmlyc3RHcmFwaCgpJiZ0aGlzLmJlZ2luKCJkaXIiKSwxMjticmVhaztjYXNlIDM4OnJldHVybiAyNztjYXNlIDM5OnJldHVybiAzMjtjYXNlIDQwOnJldHVybiA5ODtjYXNlIDQxOnJldHVybiA5ODtjYXNlIDQyOnJldHVybiA5ODtjYXNlIDQzOnJldHVybiA5ODtjYXNlIDQ0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTM7YnJlYWs7Y2FzZSA0NTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE0O2JyZWFrO2Nhc2UgNDY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNDticmVhaztjYXNlIDQ3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTQ7YnJlYWs7Y2FzZSA0ODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE0O2JyZWFrO2Nhc2UgNDk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNDticmVhaztjYXNlIDUwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTQ7YnJlYWs7Y2FzZSA1MTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE0O2JyZWFrO2Nhc2UgNTI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNDticmVhaztjYXNlIDUzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTQ7YnJlYWs7Y2FzZSA1NDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE0O2JyZWFrO2Nhc2UgNTU6cmV0dXJuIDEyMTtjYXNlIDU2OnJldHVybiAxMjI7Y2FzZSA1NzpyZXR1cm4gMTIzO2Nhc2UgNTg6cmV0dXJuIDEyNDtjYXNlIDU5OnJldHVybiA3ODtjYXNlIDYwOnJldHVybiAxMDU7Y2FzZSA2MTpyZXR1cm4gMTExO2Nhc2UgNjI6cmV0dXJuIDQ2O2Nhc2UgNjM6cmV0dXJuIDYwO2Nhc2UgNjQ6cmV0dXJuIDQ0O2Nhc2UgNjU6cmV0dXJuIDg7Y2FzZSA2NjpyZXR1cm4gMTA2O2Nhc2UgNjc6cmV0dXJuIDExNTtjYXNlIDY4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNzc7YnJlYWs7Y2FzZSA2OTpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImVkZ2VUZXh0IiksNzU7YnJlYWs7Y2FzZSA3MDpyZXR1cm4gMTE5O2Nhc2UgNzE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw3NzticmVhaztjYXNlIDcyOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidGhpY2tFZGdlVGV4dCIpLDc1O2JyZWFrO2Nhc2UgNzM6cmV0dXJuIDExOTtjYXNlIDc0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNzc7YnJlYWs7Y2FzZSA3NTpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImRvdHRlZEVkZ2VUZXh0IiksNzU7YnJlYWs7Y2FzZSA3NjpyZXR1cm4gMTE5O2Nhc2UgNzc6cmV0dXJuIDc3O2Nhc2UgNzg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw1MzticmVhaztjYXNlIDc5OnJldHVybiJURVhUIjtjYXNlIDgwOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiZWxsaXBzZVRleHQiKSw1MjticmVhaztjYXNlIDgxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNTU7YnJlYWs7Y2FzZSA4MjpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRleHQiKSw1NDticmVhaztjYXNlIDgzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNTc7YnJlYWs7Y2FzZSA4NDpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRleHQiKSw1NjticmVhaztjYXNlIDg1OnJldHVybiA1ODtjYXNlIDg2OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidGV4dCIpLDY3O2JyZWFrO2Nhc2UgODc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw2NDticmVhaztjYXNlIDg4OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidGV4dCIpLDYzO2JyZWFrO2Nhc2UgODk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw0OTticmVhaztjYXNlIDkwOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidGV4dCIpLDQ4O2JyZWFrO2Nhc2UgOTE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw2OTticmVhaztjYXNlIDkyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNzE7YnJlYWs7Y2FzZSA5MzpyZXR1cm4gMTE3O2Nhc2UgOTQ6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0cmFwVGV4dCIpLDY4O2JyZWFrO2Nhc2UgOTU6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0cmFwVGV4dCIpLDcwO2JyZWFrO2Nhc2UgOTY6cmV0dXJuIDExODtjYXNlIDk3OnJldHVybiA2NztjYXNlIDk4OnJldHVybiA5MDtjYXNlIDk5OnJldHVybiJTRVAiO2Nhc2UgMTAwOnJldHVybiA4OTtjYXNlIDEwMTpyZXR1cm4gMTE1O2Nhc2UgMTAyOnJldHVybiAxMTE7Y2FzZSAxMDM6cmV0dXJuIDQ0O2Nhc2UgMTA0OnJldHVybiAxMDk7Y2FzZSAxMDU6cmV0dXJuIDExNDtjYXNlIDEwNjpyZXR1cm4gMTE2O2Nhc2UgMTA3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNjI7YnJlYWs7Y2FzZSAxMDg6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0ZXh0IiksNjI7YnJlYWs7Y2FzZSAxMDk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw1MTticmVhaztjYXNlIDExMDpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoInRleHQiKSw1MDticmVhaztjYXNlIDExMTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDMxO2JyZWFrO2Nhc2UgMTEyOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgidGV4dCIpLDI5O2JyZWFrO2Nhc2UgMTEzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNjY7YnJlYWs7Y2FzZSAxMTQ6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJ0ZXh0IiksNjU7YnJlYWs7Y2FzZSAxMTU6cmV0dXJuIlRFWFQiO2Nhc2UgMTE2OnJldHVybiJRVU9URSI7Y2FzZSAxMTc6cmV0dXJuIDk7Y2FzZSAxMTg6cmV0dXJuIDEwO2Nhc2UgMTE5OnJldHVybiAxMX19LCJhbm9ueW1vdXMiKSxydWxlczpbL14oPzphY2NUaXRsZVxzKjpccyopLywvXig/Oig/IVxufHwpKlteXG5dKikvLC9eKD86YWNjRGVzY3Jccyo6XHMqKS8sL14oPzooPyFcbnx8KSpbXlxuXSopLywvXig/OmFjY0Rlc2NyXHMqXHtccyopLywvXig/OltcfV0pLywvXig/OlteXH1dKikvLC9eKD86QFx7KS8sL14oPzpbIl0pLywvXig/OlsiXSkvLC9eKD86W15cIl0rKS8sL14oPzpbXn1eIl0rKS8sL14oPzpcfSkvLC9eKD86Y2FsbFtcc10rKS8sL14oPzpcKFtcc10qXCkpLywvXig/OlwoKS8sL14oPzpbXihdKikvLC9eKD86XCkpLywvXig/OlteKV0qKS8sL14oPzpbXmAiXSspLywvXig/OltgXVsiXSkvLC9eKD86WyJdW2BdKS8sL14oPzpbXiJdKykvLC9eKD86WyJdKS8sL14oPzpbIl0pLywvXig/OnN0eWxlXGIpLywvXig/OmRlZmF1bHRcYikvLC9eKD86bGlua1N0eWxlXGIpLywvXig/OmludGVycG9sYXRlXGIpLywvXig/OmNsYXNzRGVmXGIpLywvXig/OmNsYXNzXGIpLywvXig/OmhyZWZbXHNdKS8sL14oPzpjbGlja1tcc10rKS8sL14oPzpbXHNcbl0pLywvXig/OlteXHNcbl0qKS8sL14oPzpmbG93Y2hhcnQtZWxrXGIpLywvXig/OmdyYXBoXGIpLywvXig/OmZsb3djaGFydFxiKS8sL14oPzpzdWJncmFwaFxiKS8sL14oPzplbmRcYlxzKikvLC9eKD86X3NlbGZcYikvLC9eKD86X2JsYW5rXGIpLywvXig/Ol9wYXJlbnRcYikvLC9eKD86X3RvcFxiKS8sL14oPzooXHI/XG4pKlxzKlxuKS8sL14oPzpccypMUlxiKS8sL14oPzpccypSTFxiKS8sL14oPzpccypUQlxiKS8sL14oPzpccypCVFxiKS8sL14oPzpccypURFxiKS8sL14oPzpccypCUlxiKS8sL14oPzpccyo8KS8sL14oPzpccyo+KS8sL14oPzpccypcXikvLC9eKD86XHMqdlxiKS8sL14oPzouKmRpcmVjdGlvblxzK1RCW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK0JUW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK1JMW15cbl0qKS8sL14oPzouKmRpcmVjdGlvblxzK0xSW15cbl0qKS8sL14oPzpbXlxzXCJdK0AoPz1bXlx7XCJdKSkvLC9eKD86WzAtOV0rKS8sL14oPzojKS8sL14oPzo6OjopLywvXig/OjopLywvXig/OiYpLywvXig/OjspLywvXig/OiwpLywvXig/OlwqKS8sL14oPzpccypbeG88XT8tLStbLXhvPl1ccyopLywvXig/OlxzKlt4bzxdPy0tXHMqKS8sL14oPzpbXi1dfC0oPyEtKSspLywvXig/OlxzKlt4bzxdPz09K1s9eG8+XVxzKikvLC9eKD86XHMqW3hvPF0/PT1ccyopLywvXig/OltePV18PSg/ISkpLywvXig/OlxzKlt4bzxdPy0/XC4rLVt4bz5dP1xzKikvLC9eKD86XHMqW3hvPF0/LVwuXHMqKS8sL14oPzpbXlwuXXxcLig/ISkpLywvXig/OlxzKn5+W1x+XStccyopLywvXig/OlstL1wpXVtcKV0pLywvXig/OlteXChcKVxbXF1ce1x9XXwhXCkrKS8sL14oPzpcKC0pLywvXig/OlxdXCkpLywvXig/OlwoXFspLywvXig/OlxdXF0pLywvXig/OlxbXFspLywvXig/OlxbXHwpLywvXig/Oj4pLywvXig/OlwpXF0pLywvXig/OlxbXCgpLywvXig/OlwpXClcKSkvLC9eKD86XChcKFwoKS8sL14oPzpbXFwoPz1cXSldW1xdXSkvLC9eKD86XC8oPz1cXSlcXSkvLC9eKD86XC8oPyFcXSl8XFwoPyFcXSl8W15cXFxbXF1cKFwpXHtcfVwvXSspLywvXig/OlxbXC8pLywvXig/OlxbXFwpLywvXig/OjwpLywvXig/Oj4pLywvXig/OlxeKS8sL14oPzpcXFx8KS8sL14oPzp2XGIpLywvXig/OlwqKS8sL14oPzojKS8sL14oPzomKS8sL14oPzooW0EtWmEtejAtOSEiXCMkJSYnKitcLmA/XFxfXC9dfC0oPz1bXlw+XC1cLl0pfCg/ISkpKykvLC9eKD86LSkvLC9eKD86W1x1MDBBQVx1MDBCNVx1MDBCQVx1MDBDMC1cdTAwRDZcdTAwRDgtXHUwMEY2XXxbXHUwMEY4LVx1MDJDMVx1MDJDNi1cdTAyRDFcdTAyRTAtXHUwMkU0XHUwMkVDXHUwMkVFXHUwMzcwLVx1MDM3NFx1MDM3Nlx1MDM3N118W1x1MDM3QS1cdTAzN0RcdTAzODZcdTAzODgtXHUwMzhBXHUwMzhDXHUwMzhFLVx1MDNBMVx1MDNBMy1cdTAzRjVdfFtcdTAzRjctXHUwNDgxXHUwNDhBLVx1MDUyN1x1MDUzMS1cdTA1NTZcdTA1NTlcdTA1NjEtXHUwNTg3XHUwNUQwLVx1MDVFQV18W1x1MDVGMC1cdTA1RjJcdTA2MjAtXHUwNjRBXHUwNjZFXHUwNjZGXHUwNjcxLVx1MDZEM1x1MDZENVx1MDZFNVx1MDZFNlx1MDZFRV18W1x1MDZFRlx1MDZGQS1cdTA2RkNcdTA2RkZcdTA3MTBcdTA3MTItXHUwNzJGXHUwNzRELVx1MDdBNVx1MDdCMVx1MDdDQS1cdTA3RUFdfFtcdTA3RjRcdTA3RjVcdTA3RkFcdTA4MDAtXHUwODE1XHUwODFBXHUwODI0XHUwODI4XHUwODQwLVx1MDg1OFx1MDhBMF18W1x1MDhBMi1cdTA4QUNcdTA5MDQtXHUwOTM5XHUwOTNEXHUwOTUwXHUwOTU4LVx1MDk2MVx1MDk3MS1cdTA5NzddfFtcdTA5NzktXHUwOTdGXHUwOTg1LVx1MDk4Q1x1MDk4Rlx1MDk5MFx1MDk5My1cdTA5QThcdTA5QUEtXHUwOUIwXHUwOUIyXXxbXHUwOUI2LVx1MDlCOVx1MDlCRFx1MDlDRVx1MDlEQ1x1MDlERFx1MDlERi1cdTA5RTFcdTA5RjBcdTA5RjFcdTBBMDUtXHUwQTBBXXxbXHUwQTBGXHUwQTEwXHUwQTEzLVx1MEEyOFx1MEEyQS1cdTBBMzBcdTBBMzJcdTBBMzNcdTBBMzVcdTBBMzZcdTBBMzhcdTBBMzldfFtcdTBBNTktXHUwQTVDXHUwQTVFXHUwQTcyLVx1MEE3NFx1MEE4NS1cdTBBOERcdTBBOEYtXHUwQTkxXHUwQTkzLVx1MEFBOF18W1x1MEFBQS1cdTBBQjBcdTBBQjJcdTBBQjNcdTBBQjUtXHUwQUI5XHUwQUJEXHUwQUQwXHUwQUUwXHUwQUUxXHUwQjA1LVx1MEIwQ118W1x1MEIwRlx1MEIxMFx1MEIxMy1cdTBCMjhcdTBCMkEtXHUwQjMwXHUwQjMyXHUwQjMzXHUwQjM1LVx1MEIzOVx1MEIzRFx1MEI1Q118W1x1MEI1RFx1MEI1Ri1cdTBCNjFcdTBCNzFcdTBCODNcdTBCODUtXHUwQjhBXHUwQjhFLVx1MEI5MFx1MEI5Mi1cdTBCOTVcdTBCOTldfFtcdTBCOUFcdTBCOUNcdTBCOUVcdTBCOUZcdTBCQTNcdTBCQTRcdTBCQTgtXHUwQkFBXHUwQkFFLVx1MEJCOVx1MEJEMF18W1x1MEMwNS1cdTBDMENcdTBDMEUtXHUwQzEwXHUwQzEyLVx1MEMyOFx1MEMyQS1cdTBDMzNcdTBDMzUtXHUwQzM5XHUwQzNEXXxbXHUwQzU4XHUwQzU5XHUwQzYwXHUwQzYxXHUwQzg1LVx1MEM4Q1x1MEM4RS1cdTBDOTBcdTBDOTItXHUwQ0E4XHUwQ0FBLVx1MENCM118W1x1MENCNS1cdTBDQjlcdTBDQkRcdTBDREVcdTBDRTBcdTBDRTFcdTBDRjFcdTBDRjJcdTBEMDUtXHUwRDBDXHUwRDBFLVx1MEQxMF18W1x1MEQxMi1cdTBEM0FcdTBEM0RcdTBENEVcdTBENjBcdTBENjFcdTBEN0EtXHUwRDdGXHUwRDg1LVx1MEQ5Nlx1MEQ5QS1cdTBEQjFdfFtcdTBEQjMtXHUwREJCXHUwREJEXHUwREMwLVx1MERDNlx1MEUwMS1cdTBFMzBcdTBFMzJcdTBFMzNcdTBFNDAtXHUwRTQ2XHUwRTgxXXxbXHUwRTgyXHUwRTg0XHUwRTg3XHUwRTg4XHUwRThBXHUwRThEXHUwRTk0LVx1MEU5N1x1MEU5OS1cdTBFOUZcdTBFQTEtXHUwRUEzXXxbXHUwRUE1XHUwRUE3XHUwRUFBXHUwRUFCXHUwRUFELVx1MEVCMFx1MEVCMlx1MEVCM1x1MEVCRFx1MEVDMC1cdTBFQzRcdTBFQzZdfFtcdTBFREMtXHUwRURGXHUwRjAwXHUwRjQwLVx1MEY0N1x1MEY0OS1cdTBGNkNcdTBGODgtXHUwRjhDXHUxMDAwLVx1MTAyQV18W1x1MTAzRlx1MTA1MC1cdTEwNTVcdTEwNUEtXHUxMDVEXHUxMDYxXHUxMDY1XHUxMDY2XHUxMDZFLVx1MTA3MFx1MTA3NS1cdTEwODFdfFtcdTEwOEVcdTEwQTAtXHUxMEM1XHUxMEM3XHUxMENEXHUxMEQwLVx1MTBGQVx1MTBGQy1cdTEyNDhcdTEyNEEtXHUxMjREXXxbXHUxMjUwLVx1MTI1Nlx1MTI1OFx1MTI1QS1cdTEyNURcdTEyNjAtXHUxMjg4XHUxMjhBLVx1MTI4RFx1MTI5MC1cdTEyQjBdfFtcdTEyQjItXHUxMkI1XHUxMkI4LVx1MTJCRVx1MTJDMFx1MTJDMi1cdTEyQzVcdTEyQzgtXHUxMkQ2XHUxMkQ4LVx1MTMxMF18W1x1MTMxMi1cdTEzMTVcdTEzMTgtXHUxMzVBXHUxMzgwLVx1MTM4Rlx1MTNBMC1cdTEzRjRcdTE0MDEtXHUxNjZDXXxbXHUxNjZGLVx1MTY3Rlx1MTY4MS1cdTE2OUFcdTE2QTAtXHUxNkVBXHUxNzAwLVx1MTcwQ1x1MTcwRS1cdTE3MTFdfFtcdTE3MjAtXHUxNzMxXHUxNzQwLVx1MTc1MVx1MTc2MC1cdTE3NkNcdTE3NkUtXHUxNzcwXHUxNzgwLVx1MTdCM1x1MTdEN118W1x1MTdEQ1x1MTgyMC1cdTE4NzdcdTE4ODAtXHUxOEE4XHUxOEFBXHUxOEIwLVx1MThGNVx1MTkwMC1cdTE5MUNdfFtcdTE5NTAtXHUxOTZEXHUxOTcwLVx1MTk3NFx1MTk4MC1cdTE5QUJcdTE5QzEtXHUxOUM3XHUxQTAwLVx1MUExNl18W1x1MUEyMC1cdTFBNTRcdTFBQTdcdTFCMDUtXHUxQjMzXHUxQjQ1LVx1MUI0Qlx1MUI4My1cdTFCQTBcdTFCQUVcdTFCQUZdfFtcdTFCQkEtXHUxQkU1XHUxQzAwLVx1MUMyM1x1MUM0RC1cdTFDNEZcdTFDNUEtXHUxQzdEXHUxQ0U5LVx1MUNFQ118W1x1MUNFRS1cdTFDRjFcdTFDRjVcdTFDRjZcdTFEMDAtXHUxREJGXHUxRTAwLVx1MUYxNVx1MUYxOC1cdTFGMURdfFtcdTFGMjAtXHUxRjQ1XHUxRjQ4LVx1MUY0RFx1MUY1MC1cdTFGNTdcdTFGNTlcdTFGNUJcdTFGNURcdTFGNUYtXHUxRjdEXXxbXHUxRjgwLVx1MUZCNFx1MUZCNi1cdTFGQkNcdTFGQkVcdTFGQzItXHUxRkM0XHUxRkM2LVx1MUZDQ1x1MUZEMC1cdTFGRDNdfFtcdTFGRDYtXHUxRkRCXHUxRkUwLVx1MUZFQ1x1MUZGMi1cdTFGRjRcdTFGRjYtXHUxRkZDXHUyMDcxXHUyMDdGXXxbXHUyMDkwLVx1MjA5Q1x1MjEwMlx1MjEwN1x1MjEwQS1cdTIxMTNcdTIxMTVcdTIxMTktXHUyMTFEXHUyMTI0XHUyMTI2XHUyMTI4XXxbXHUyMTJBLVx1MjEyRFx1MjEyRi1cdTIxMzlcdTIxM0MtXHUyMTNGXHUyMTQ1LVx1MjE0OVx1MjE0RVx1MjE4M1x1MjE4NF18W1x1MkMwMC1cdTJDMkVcdTJDMzAtXHUyQzVFXHUyQzYwLVx1MkNFNFx1MkNFQi1cdTJDRUVcdTJDRjJcdTJDRjNdfFtcdTJEMDAtXHUyRDI1XHUyRDI3XHUyRDJEXHUyRDMwLVx1MkQ2N1x1MkQ2Rlx1MkQ4MC1cdTJEOTZcdTJEQTAtXHUyREE2XXxbXHUyREE4LVx1MkRBRVx1MkRCMC1cdTJEQjZcdTJEQjgtXHUyREJFXHUyREMwLVx1MkRDNlx1MkRDOC1cdTJEQ0VdfFtcdTJERDAtXHUyREQ2XHUyREQ4LVx1MkRERVx1MkUyRlx1MzAwNVx1MzAwNlx1MzAzMS1cdTMwMzVcdTMwM0JcdTMwM0NdfFtcdTMwNDEtXHUzMDk2XHUzMDlELVx1MzA5Rlx1MzBBMS1cdTMwRkFcdTMwRkMtXHUzMEZGXHUzMTA1LVx1MzEyRF18W1x1MzEzMS1cdTMxOEVcdTMxQTAtXHUzMUJBXHUzMUYwLVx1MzFGRlx1MzQwMC1cdTREQjVcdTRFMDAtXHU5RkNDXXxbXHVBMDAwLVx1QTQ4Q1x1QTREMC1cdUE0RkRcdUE1MDAtXHVBNjBDXHVBNjEwLVx1QTYxRlx1QTYyQVx1QTYyQl18W1x1QTY0MC1cdUE2NkVcdUE2N0YtXHVBNjk3XHVBNkEwLVx1QTZFNVx1QTcxNy1cdUE3MUZcdUE3MjItXHVBNzg4XXxbXHVBNzhCLVx1QTc4RVx1QTc5MC1cdUE3OTNcdUE3QTAtXHVBN0FBXHVBN0Y4LVx1QTgwMVx1QTgwMy1cdUE4MDVdfFtcdUE4MDctXHVBODBBXHVBODBDLVx1QTgyMlx1QTg0MC1cdUE4NzNcdUE4ODItXHVBOEIzXHVBOEYyLVx1QThGN1x1QThGQl18W1x1QTkwQS1cdUE5MjVcdUE5MzAtXHVBOTQ2XHVBOTYwLVx1QTk3Q1x1QTk4NC1cdUE5QjJcdUE5Q0ZcdUFBMDAtXHVBQTI4XXxbXHVBQTQwLVx1QUE0Mlx1QUE0NC1cdUFBNEJcdUFBNjAtXHVBQTc2XHVBQTdBXHVBQTgwLVx1QUFBRlx1QUFCMVx1QUFCNV18W1x1QUFCNlx1QUFCOS1cdUFBQkRcdUFBQzBcdUFBQzJcdUFBREItXHVBQUREXHVBQUUwLVx1QUFFQVx1QUFGMi1cdUFBRjRdfFtcdUFCMDEtXHVBQjA2XHVBQjA5LVx1QUIwRVx1QUIxMS1cdUFCMTZcdUFCMjAtXHVBQjI2XHVBQjI4LVx1QUIyRV18W1x1QUJDMC1cdUFCRTJcdUFDMDAtXHVEN0EzXHVEN0IwLVx1RDdDNlx1RDdDQi1cdUQ3RkJcdUY5MDAtXHVGQTZEXXxbXHVGQTcwLVx1RkFEOVx1RkIwMC1cdUZCMDZcdUZCMTMtXHVGQjE3XHVGQjFEXHVGQjFGLVx1RkIyOFx1RkIyQS1cdUZCMzZdfFtcdUZCMzgtXHVGQjNDXHVGQjNFXHVGQjQwXHVGQjQxXHVGQjQzXHVGQjQ0XHVGQjQ2LVx1RkJCMVx1RkJEMy1cdUZEM0RdfFtcdUZENTAtXHVGRDhGXHVGRDkyLVx1RkRDN1x1RkRGMC1cdUZERkJcdUZFNzAtXHVGRTc0XHVGRTc2LVx1RkVGQ118W1x1RkYyMS1cdUZGM0FcdUZGNDEtXHVGRjVBXHVGRjY2LVx1RkZCRVx1RkZDMi1cdUZGQzdcdUZGQ0EtXHVGRkNGXXxbXHVGRkQyLVx1RkZEN1x1RkZEQS1cdUZGRENdKS8sL14oPzpcfCkvLC9eKD86XHwpLywvXig/OlwpKS8sL14oPzpcKCkvLC9eKD86XF0pLywvXig/OlxbKS8sL14oPzooXH0pKS8sL14oPzpceykvLC9eKD86W15cW1xdXChcKVx7XH1cfFwiXSspLywvXig/OiIpLywvXig/Oihccj9cbikrKS8sL14oPzpccykvLC9eKD86JCkvXSxjb25kaXRpb25zOntzaGFwZURhdGFFbmRCcmFja2V0OntydWxlczpbMjEsMjQsNzcsODAsODIsODQsODgsOTAsOTQsOTUsMTA4LDExMCwxMTIsMTE0XSxpbmNsdXNpdmU6ITF9LHNoYXBlRGF0YVN0cjp7cnVsZXM6WzksMTAsMjEsMjQsNzcsODAsODIsODQsODgsOTAsOTQsOTUsMTA4LDExMCwxMTIsMTE0XSxpbmNsdXNpdmU6ITF9LHNoYXBlRGF0YTp7cnVsZXM6WzgsMTEsMTIsMjEsMjQsNzcsODAsODIsODQsODgsOTAsOTQsOTUsMTA4LDExMCwxMTIsMTE0XSxpbmNsdXNpdmU6ITF9LGNhbGxiYWNrYXJnczp7cnVsZXM6WzE3LDE4LDIxLDI0LDc3LDgwLDgyLDg0LDg4LDkwLDk0LDk1LDEwOCwxMTAsMTEyLDExNF0saW5jbHVzaXZlOiExfSxjYWxsYmFja25hbWU6e3J1bGVzOlsxNCwxNSwxNiwyMSwyNCw3Nyw4MCw4Miw4NCw4OCw5MCw5NCw5NSwxMDgsMTEwLDExMiwxMTRdLGluY2x1c2l2ZTohMX0saHJlZjp7cnVsZXM6WzIxLDI0LDc3LDgwLDgyLDg0LDg4LDkwLDk0LDk1LDEwOCwxMTAsMTEyLDExNF0saW5jbHVzaXZlOiExfSxjbGljazp7cnVsZXM6WzIxLDI0LDMzLDM0LDc3LDgwLDgyLDg0LDg4LDkwLDk0LDk1LDEwOCwxMTAsMTEyLDExNF0saW5jbHVzaXZlOiExfSxkb3R0ZWRFZGdlVGV4dDp7cnVsZXM6WzIxLDI0LDc0LDc2LDc3LDgwLDgyLDg0LDg4LDkwLDk0LDk1LDEwOCwxMTAsMTEyLDExNF0saW5jbHVzaXZlOiExfSx0aGlja0VkZ2VUZXh0OntydWxlczpbMjEsMjQsNzEsNzMsNzcsODAsODIsODQsODgsOTAsOTQsOTUsMTA4LDExMCwxMTIsMTE0XSxpbmNsdXNpdmU6ITF9LGVkZ2VUZXh0OntydWxlczpbMjEsMjQsNjgsNzAsNzcsODAsODIsODQsODgsOTAsOTQsOTUsMTA4LDExMCwxMTIsMTE0XSxpbmNsdXNpdmU6ITF9LHRyYXBUZXh0OntydWxlczpbMjEsMjQsNzcsODAsODIsODQsODgsOTAsOTEsOTIsOTMsOTQsOTUsMTA4LDExMCwxMTIsMTE0XSxpbmNsdXNpdmU6ITF9LGVsbGlwc2VUZXh0OntydWxlczpbMjEsMjQsNzcsNzgsNzksODAsODIsODQsODgsOTAsOTQsOTUsMTA4LDExMCwxMTIsMTE0XSxpbmNsdXNpdmU6ITF9LHRleHQ6e3J1bGVzOlsyMSwyNCw3Nyw4MCw4MSw4Miw4Myw4NCw4Nyw4OCw4OSw5MCw5NCw5NSwxMDcsMTA4LDEwOSwxMTAsMTExLDExMiwxMTMsMTE0LDExNV0saW5jbHVzaXZlOiExfSx2ZXJ0ZXg6e3J1bGVzOlsyMSwyNCw3Nyw4MCw4Miw4NCw4OCw5MCw5NCw5NSwxMDgsMTEwLDExMiwxMTRdLGluY2x1c2l2ZTohMX0sZGlyOntydWxlczpbMjEsMjQsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNzcsODAsODIsODQsODgsOTAsOTQsOTUsMTA4LDExMCwxMTIsMTE0XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOls1LDYsMjEsMjQsNzcsODAsODIsODQsODgsOTAsOTQsOTUsMTA4LDExMCwxMTIsMTE0XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzMsMjEsMjQsNzcsODAsODIsODQsODgsOTAsOTQsOTUsMTA4LDExMCwxMTIsMTE0XSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzEsMjEsMjQsNzcsODAsODIsODQsODgsOTAsOTQsOTUsMTA4LDExMCwxMTIsMTE0XSxpbmNsdXNpdmU6ITF9LG1kX3N0cmluZzp7cnVsZXM6WzE5LDIwLDIxLDI0LDc3LDgwLDgyLDg0LDg4LDkwLDk0LDk1LDEwOCwxMTAsMTEyLDExNF0saW5jbHVzaXZlOiExfSxzdHJpbmc6e3J1bGVzOlsyMSwyMiwyMywyNCw3Nyw4MCw4Miw4NCw4OCw5MCw5NCw5NSwxMDgsMTEwLDExMiwxMTRdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMiw0LDcsMTMsMjEsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzEsNzIsNzQsNzUsNzcsODAsODIsODQsODUsODYsODgsOTAsOTQsOTUsOTYsOTcsOTgsOTksMTAwLDEwMSwxMDIsMTAzLDEwNCwxMDUsMTA2LDEwOCwxMTAsMTEyLDExNCwxMTYsMTE3LDExOCwxMTldLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gSHJ9KCk7T2kubGV4ZXI9ZWk7ZnVuY3Rpb24gU24oKXt0aGlzLnl5PXt9fXJldHVybiBvKFNuLCJQYXJzZXIiKSxTbi5wcm90b3R5cGU9T2ksT2kuUGFyc2VyPVNuLG5ldyBTbn0oKTtyTi5wYXJzZXI9ck47bk49ck59KTt2YXIgYXNlLHNzZSxvc2U9TigoKT0+eyJ1c2Ugc3RyaWN0Ijtpc2UoKTthc2U9T2JqZWN0LmFzc2lnbih7fSxuTik7YXNlLnBhcnNlPXQ9PntsZXQgZT10LnJlcGxhY2UoL31ccypcbi9nLGB9CmApO3JldHVybiBuTi5wYXJzZShlKX07c3NlPWFzZX0pO3ZhciBOYyxYbT1OKCgpPT57InVzZSBzdHJpY3QiO05jPW8oKCk9PmAKICAvKiBGb250IEF3ZXNvbWUgaWNvbiBzdHlsaW5nIC0gY29uc29saWRhdGVkICovCiAgLmxhYmVsLWljb24gewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgaGVpZ2h0OiAxZW07CiAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgIHZlcnRpY2FsLWFsaWduOiAtMC4xMjVlbTsKICB9CiAgCiAgLm5vZGUgLmxhYmVsLWljb24gcGF0aCB7CiAgICBmaWxsOiBjdXJyZW50Q29sb3I7CiAgICBzdHJva2U6IHJldmVydDsKICAgIHN0cm9rZS13aWR0aDogcmV2ZXJ0OwogIH0KYCwiZ2V0SWNvblN0eWxlcyIpfSk7dmFyIFVQZSxIUGUsbHNlLGNzZT1OKCgpPT57InVzZSBzdHJpY3QiO0tzKCk7WG0oKTtVUGU9bygodCxlKT0+e2xldCByPWlkLG49cih0LCJyIiksaT1yKHQsImciKSxhPXIodCwiYiIpO3JldHVybiBRYShuLGksYSxlKX0sImZhZGUiKSxIUGU9byh0PT5gLmxhYmVsIHsKICAgIGZvbnQtZmFtaWx5OiAke3QuZm9udEZhbWlseX07CiAgICBjb2xvcjogJHt0Lm5vZGVUZXh0Q29sb3J8fHQudGV4dENvbG9yfTsKICB9CiAgLmNsdXN0ZXItbGFiZWwgdGV4dCB7CiAgICBmaWxsOiAke3QudGl0bGVDb2xvcn07CiAgfQogIC5jbHVzdGVyLWxhYmVsIHNwYW4gewogICAgY29sb3I6ICR7dC50aXRsZUNvbG9yfTsKICB9CiAgLmNsdXN0ZXItbGFiZWwgc3BhbiBwIHsKICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OwogIH0KCiAgLmxhYmVsIHRleHQsc3BhbiB7CiAgICBmaWxsOiAke3Qubm9kZVRleHRDb2xvcnx8dC50ZXh0Q29sb3J9OwogICAgY29sb3I6ICR7dC5ub2RlVGV4dENvbG9yfHx0LnRleHRDb2xvcn07CiAgfQoKICAubm9kZSByZWN0LAogIC5ub2RlIGNpcmNsZSwKICAubm9kZSBlbGxpcHNlLAogIC5ub2RlIHBvbHlnb24sCiAgLm5vZGUgcGF0aCB7CiAgICBmaWxsOiAke3QubWFpbkJrZ307CiAgICBzdHJva2U6ICR7dC5ub2RlQm9yZGVyfTsKICAgIHN0cm9rZS13aWR0aDogMXB4OwogIH0KICAucm91Z2gtbm9kZSAubGFiZWwgdGV4dCAsIC5ub2RlIC5sYWJlbCB0ZXh0LCAuaW1hZ2Utc2hhcGUgLmxhYmVsLCAuaWNvbi1zaGFwZSAubGFiZWwgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICB9CiAgLy8gLmZsb3djaGFydC1sYWJlbCAudGV4dC1vdXRlci10c3BhbiB7CiAgLy8gICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogIC8vIH0KICAvLyAuZmxvd2NoYXJ0LWxhYmVsIC50ZXh0LWlubmVyLXRzcGFuIHsKICAvLyAgIHRleHQtYW5jaG9yOiBzdGFydDsKICAvLyB9CgogIC5ub2RlIC5rYXRleCBwYXRoIHsKICAgIGZpbGw6ICMwMDA7CiAgICBzdHJva2U6ICMwMDA7CiAgICBzdHJva2Utd2lkdGg6IDFweDsKICB9CgogIC5yb3VnaC1ub2RlIC5sYWJlbCwubm9kZSAubGFiZWwsIC5pbWFnZS1zaGFwZSAubGFiZWwsIC5pY29uLXNoYXBlIC5sYWJlbCB7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgfQogIC5ub2RlLmNsaWNrYWJsZSB7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgfQoKCiAgLnJvb3QgLmFuY2hvciBwYXRoIHsKICAgIGZpbGw6ICR7dC5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgICBzdHJva2Utd2lkdGg6IDA7CiAgICBzdHJva2U6ICR7dC5saW5lQ29sb3J9OwogIH0KCiAgLmFycm93aGVhZFBhdGggewogICAgZmlsbDogJHt0LmFycm93aGVhZENvbG9yfTsKICB9CgogIC5lZGdlUGF0aCAucGF0aCB7CiAgICBzdHJva2U6ICR7dC5saW5lQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAyLjBweDsKICB9CgogIC5mbG93Y2hhcnQtbGluayB7CiAgICBzdHJva2U6ICR7dC5saW5lQ29sb3J9OwogICAgZmlsbDogbm9uZTsKICB9CgogIC5lZGdlTGFiZWwgewogICAgYmFja2dyb3VuZC1jb2xvcjogJHt0LmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgcCB7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7dC5lZGdlTGFiZWxCYWNrZ3JvdW5kfTsKICAgIH0KICAgIHJlY3QgewogICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7dC5lZGdlTGFiZWxCYWNrZ3JvdW5kfTsKICAgICAgZmlsbDogJHt0LmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgfQogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KCiAgLyogRm9yIGh0bWwgbGFiZWxzIG9ubHkgKi8KICAubGFiZWxCa2cgewogICAgYmFja2dyb3VuZC1jb2xvcjogJHtVUGUodC5lZGdlTGFiZWxCYWNrZ3JvdW5kLC41KX07CiAgICAvLyBiYWNrZ3JvdW5kLWNvbG9yOgogIH0KCiAgLmNsdXN0ZXIgcmVjdCB7CiAgICBmaWxsOiAke3QuY2x1c3RlckJrZ307CiAgICBzdHJva2U6ICR7dC5jbHVzdGVyQm9yZGVyfTsKICAgIHN0cm9rZS13aWR0aDogMXB4OwogIH0KCiAgLmNsdXN0ZXIgdGV4dCB7CiAgICBmaWxsOiAke3QudGl0bGVDb2xvcn07CiAgfQoKICAuY2x1c3RlciBzcGFuIHsKICAgIGNvbG9yOiAke3QudGl0bGVDb2xvcn07CiAgfQogIC8qIC5jbHVzdGVyIGRpdiB7CiAgICBjb2xvcjogJHt0LnRpdGxlQ29sb3J9OwogIH0gKi8KCiAgZGl2Lm1lcm1haWRUb29sdGlwIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIG1heC13aWR0aDogMjAwcHg7CiAgICBwYWRkaW5nOiAycHg7CiAgICBmb250LWZhbWlseTogJHt0LmZvbnRGYW1pbHl9OwogICAgZm9udC1zaXplOiAxMnB4OwogICAgYmFja2dyb3VuZDogJHt0LnRlcnRpYXJ5Q29sb3J9OwogICAgYm9yZGVyOiAxcHggc29saWQgJHt0LmJvcmRlcjJ9OwogICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB6LWluZGV4OiAxMDA7CiAgfQoKICAuZmxvd2NoYXJ0VGl0bGVUZXh0IHsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICBmb250LXNpemU6IDE4cHg7CiAgICBmaWxsOiAke3QudGV4dENvbG9yfTsKICB9CgogIHJlY3QudGV4dCB7CiAgICBmaWxsOiBub25lOwogICAgc3Ryb2tlLXdpZHRoOiAwOwogIH0KCiAgLmljb24tc2hhcGUsIC5pbWFnZS1zaGFwZSB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3QuZWRnZUxhYmVsQmFja2dyb3VuZH07CiAgICBwIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHt0LmVkZ2VMYWJlbEJhY2tncm91bmR9OwogICAgICBwYWRkaW5nOiAycHg7CiAgICB9CiAgICByZWN0IHsKICAgICAgb3BhY2l0eTogMC41OwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3QuZWRnZUxhYmVsQmFja2dyb3VuZH07CiAgICAgIGZpbGw6ICR7dC5lZGdlTGFiZWxCYWNrZ3JvdW5kfTsKICAgIH0KICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICB9CiAgJHtOYygpfQpgLCJnZXRTdHlsZXMiKSxsc2U9SFBlfSk7dmFyIHhrPXt9O3VyKHhrLHtkaWFncmFtOigpPT5XUGV9KTt2YXIgV1BlLGJrPU4oKCk9PnsidXNlIHN0cmljdCI7R3QoKTtsZWUoKTtuc2UoKTtvc2UoKTtjc2UoKTtXUGU9e3BhcnNlcjpzc2UsZ2V0IGRiKCl7cmV0dXJuIG5ldyBpd30scmVuZGVyZXI6cnNlLHN0eWxlczpsc2UsaW5pdDpvKHQ9Pnt0LmZsb3djaGFydHx8KHQuZmxvd2NoYXJ0PXt9KSx0LmxheW91dCYmbnYoe2xheW91dDp0LmxheW91dH0pLHQuZmxvd2NoYXJ0LmFycm93TWFya2VyQWJzb2x1dGU9dC5hcnJvd01hcmtlckFic29sdXRlLG52KHtmbG93Y2hhcnQ6e2Fycm93TWFya2VyQWJzb2x1dGU6dC5hcnJvd01hcmtlckFic29sdXRlfX0pfSwiaW5pdCIpfX0pO3ZhciBpTixwc2UsbXNlPU4oKCk9PnsidXNlIHN0cmljdCI7aU49ZnVuY3Rpb24oKXt2YXIgdD1vKGZ1bmN0aW9uKHRlLGhlLGxlLEope2ZvcihsZT1sZXx8e30sSj10ZS5sZW5ndGg7Si0tO2xlW3RlW0pdXT1oZSk7cmV0dXJuIGxlfSwibyIpLGU9WzYsOCwxMCwyMiwyNCwyNiwyOCwzMywzNCwzNSwzNiwzNyw0MCw0Myw0NCw1MF0scj1bMSwxMF0sbj1bMSwxMV0saT1bMSwxMl0sYT1bMSwxM10scz1bMSwyMF0sbD1bMSwyMV0sdT1bMSwyMl0saD1bMSwyM10sZj1bMSwyNF0sZD1bMSwxOV0scD1bMSwyNV0sbT1bMSwyNl0sZz1bMSwxOF0seT1bMSwzM10sdj1bMSwzNF0seD1bMSwzNV0sYj1bMSwzNl0sVD1bMSwzN10sUz1bNiw4LDEwLDEzLDE1LDE3LDIwLDIxLDIyLDI0LDI2LDI4LDMzLDM0LDM1LDM2LDM3LDQwLDQzLDQ0LDUwLDYzLDY0LDY1LDY2LDY3XSx3PVsxLDQyXSxFPVsxLDQzXSxfPVsxLDUyXSxDPVs0MCw1MCw2OCw2OV0sRD1bMSw2M10sTz1bMSw2MV0sUj1bMSw1OF0saz1bMSw2Ml0sTD1bMSw2NF0sQT1bNiw4LDEwLDEzLDE3LDIyLDI0LDI2LDI4LDMzLDM0LDM1LDM2LDM3LDQwLDQxLDQyLDQzLDQ0LDQ4LDQ5LDUwLDYzLDY0LDY1LDY2LDY3XSxJPVs2Myw2NCw2NSw2Niw2N10sTT1bMSw4MV0sUD1bMSw4MF0sQj1bMSw3OF0sRj1bMSw3OV0sej1bNiwxMCw0Miw0N10sJD1bNiwxMCwxMyw0MSw0Miw0Nyw0OCw0OV0sVT1bMSw4OV0sSz1bMSw4OF0sZWU9WzEsODddLFk9WzE5LDU2XSxjZT1bMSw5OF0sWj1bMSw5N10sdWU9WzE5LDU2LDU4LDYwXSxRPXt0cmFjZTpvKGZ1bmN0aW9uKCl7fSwidHJhY2UiKSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLEVSX0RJQUdSQU06NCxkb2N1bWVudDo1LEVPRjo2LGxpbmU6NyxTUEFDRTo4LHN0YXRlbWVudDo5LE5FV0xJTkU6MTAsZW50aXR5TmFtZToxMSxyZWxTcGVjOjEyLENPTE9OOjEzLHJvbGU6MTQsU1RZTEVfU0VQQVJBVE9SOjE1LGlkTGlzdDoxNixCTE9DS19TVEFSVDoxNyxhdHRyaWJ1dGVzOjE4LEJMT0NLX1NUT1A6MTksU1FTOjIwLFNRRToyMSx0aXRsZToyMix0aXRsZV92YWx1ZToyMyxhY2NfdGl0bGU6MjQsYWNjX3RpdGxlX3ZhbHVlOjI1LGFjY19kZXNjcjoyNixhY2NfZGVzY3JfdmFsdWU6MjcsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZToyOCxkaXJlY3Rpb246MjksY2xhc3NEZWZTdGF0ZW1lbnQ6MzAsY2xhc3NTdGF0ZW1lbnQ6MzEsc3R5bGVTdGF0ZW1lbnQ6MzIsZGlyZWN0aW9uX3RiOjMzLGRpcmVjdGlvbl9idDozNCxkaXJlY3Rpb25fcmw6MzUsZGlyZWN0aW9uX2xyOjM2LENMQVNTREVGOjM3LHN0eWxlc09wdDozOCxzZXBhcmF0b3I6MzksVU5JQ09ERV9URVhUOjQwLFNUWUxFX1RFWFQ6NDEsQ09NTUE6NDIsQ0xBU1M6NDMsU1RZTEU6NDQsc3R5bGU6NDUsc3R5bGVDb21wb25lbnQ6NDYsU0VNSTo0NyxOVU06NDgsQlJLVDo0OSxFTlRJVFlfTkFNRTo1MCxhdHRyaWJ1dGU6NTEsYXR0cmlidXRlVHlwZTo1MixhdHRyaWJ1dGVOYW1lOjUzLGF0dHJpYnV0ZUtleVR5cGVMaXN0OjU0LGF0dHJpYnV0ZUNvbW1lbnQ6NTUsQVRUUklCVVRFX1dPUkQ6NTYsYXR0cmlidXRlS2V5VHlwZTo1NywiLCI6NTgsQVRUUklCVVRFX0tFWTo1OSxDT01NRU5UOjYwLGNhcmRpbmFsaXR5OjYxLHJlbFR5cGU6NjIsWkVST19PUl9PTkU6NjMsWkVST19PUl9NT1JFOjY0LE9ORV9PUl9NT1JFOjY1LE9OTFlfT05FOjY2LE1EX1BBUkVOVDo2NyxOT05fSURFTlRJRllJTkc6NjgsSURFTlRJRllJTkc6NjksV09SRDo3MCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiRVJfRElBR1JBTSIsNjoiRU9GIiw4OiJTUEFDRSIsMTA6Ik5FV0xJTkUiLDEzOiJDT0xPTiIsMTU6IlNUWUxFX1NFUEFSQVRPUiIsMTc6IkJMT0NLX1NUQVJUIiwxOToiQkxPQ0tfU1RPUCIsMjA6IlNRUyIsMjE6IlNRRSIsMjI6InRpdGxlIiwyMzoidGl0bGVfdmFsdWUiLDI0OiJhY2NfdGl0bGUiLDI1OiJhY2NfdGl0bGVfdmFsdWUiLDI2OiJhY2NfZGVzY3IiLDI3OiJhY2NfZGVzY3JfdmFsdWUiLDI4OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwzMzoiZGlyZWN0aW9uX3RiIiwzNDoiZGlyZWN0aW9uX2J0IiwzNToiZGlyZWN0aW9uX3JsIiwzNjoiZGlyZWN0aW9uX2xyIiwzNzoiQ0xBU1NERUYiLDQwOiJVTklDT0RFX1RFWFQiLDQxOiJTVFlMRV9URVhUIiw0MjoiQ09NTUEiLDQzOiJDTEFTUyIsNDQ6IlNUWUxFIiw0NzoiU0VNSSIsNDg6Ik5VTSIsNDk6IkJSS1QiLDUwOiJFTlRJVFlfTkFNRSIsNTY6IkFUVFJJQlVURV9XT1JEIiw1ODoiLCIsNTk6IkFUVFJJQlVURV9LRVkiLDYwOiJDT01NRU5UIiw2MzoiWkVST19PUl9PTkUiLDY0OiJaRVJPX09SX01PUkUiLDY1OiJPTkVfT1JfTU9SRSIsNjY6Ik9OTFlfT05FIiw2NzoiTURfUEFSRU5UIiw2ODoiTk9OX0lERU5USUZZSU5HIiw2OToiSURFTlRJRllJTkciLDcwOiJXT1JEIn0scHJvZHVjdGlvbnNfOlswLFszLDNdLFs1LDBdLFs1LDJdLFs3LDJdLFs3LDFdLFs3LDFdLFs3LDFdLFs5LDVdLFs5LDldLFs5LDddLFs5LDddLFs5LDRdLFs5LDZdLFs5LDNdLFs5LDVdLFs5LDFdLFs5LDNdLFs5LDddLFs5LDldLFs5LDZdLFs5LDhdLFs5LDRdLFs5LDZdLFs5LDJdLFs5LDJdLFs5LDJdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFsyOSwxXSxbMjksMV0sWzI5LDFdLFsyOSwxXSxbMzAsNF0sWzE2LDFdLFsxNiwxXSxbMTYsM10sWzE2LDNdLFszMSwzXSxbMzIsNF0sWzM4LDFdLFszOCwzXSxbNDUsMV0sWzQ1LDJdLFszOSwxXSxbMzksMV0sWzM5LDFdLFs0NiwxXSxbNDYsMV0sWzQ2LDFdLFs0NiwxXSxbMTEsMV0sWzExLDFdLFsxOCwxXSxbMTgsMl0sWzUxLDJdLFs1MSwzXSxbNTEsM10sWzUxLDRdLFs1MiwxXSxbNTMsMV0sWzU0LDFdLFs1NCwzXSxbNTcsMV0sWzU1LDFdLFsxMiwzXSxbNjEsMV0sWzYxLDFdLFs2MSwxXSxbNjEsMV0sWzYxLDFdLFs2MiwxXSxbNjIsMV0sWzE0LDFdLFsxNCwxXSxbMTQsMV1dLHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbihoZSxsZSxKLFNlLHNlLGFlLE9lKXt2YXIgeWU9YWUubGVuZ3RoLTE7c3dpdGNoKHNlKXtjYXNlIDE6YnJlYWs7Y2FzZSAyOnRoaXMuJD1bXTticmVhaztjYXNlIDM6YWVbeWUtMV0ucHVzaChhZVt5ZV0pLHRoaXMuJD1hZVt5ZS0xXTticmVhaztjYXNlIDQ6Y2FzZSA1OnRoaXMuJD1hZVt5ZV07YnJlYWs7Y2FzZSA2OmNhc2UgNzp0aGlzLiQ9W107YnJlYWs7Y2FzZSA4OlNlLmFkZEVudGl0eShhZVt5ZS00XSksU2UuYWRkRW50aXR5KGFlW3llLTJdKSxTZS5hZGRSZWxhdGlvbnNoaXAoYWVbeWUtNF0sYWVbeWVdLGFlW3llLTJdLGFlW3llLTNdKTticmVhaztjYXNlIDk6U2UuYWRkRW50aXR5KGFlW3llLThdKSxTZS5hZGRFbnRpdHkoYWVbeWUtNF0pLFNlLmFkZFJlbGF0aW9uc2hpcChhZVt5ZS04XSxhZVt5ZV0sYWVbeWUtNF0sYWVbeWUtNV0pLFNlLnNldENsYXNzKFthZVt5ZS04XV0sYWVbeWUtNl0pLFNlLnNldENsYXNzKFthZVt5ZS00XV0sYWVbeWUtMl0pO2JyZWFrO2Nhc2UgMTA6U2UuYWRkRW50aXR5KGFlW3llLTZdKSxTZS5hZGRFbnRpdHkoYWVbeWUtMl0pLFNlLmFkZFJlbGF0aW9uc2hpcChhZVt5ZS02XSxhZVt5ZV0sYWVbeWUtMl0sYWVbeWUtM10pLFNlLnNldENsYXNzKFthZVt5ZS02XV0sYWVbeWUtNF0pO2JyZWFrO2Nhc2UgMTE6U2UuYWRkRW50aXR5KGFlW3llLTZdKSxTZS5hZGRFbnRpdHkoYWVbeWUtNF0pLFNlLmFkZFJlbGF0aW9uc2hpcChhZVt5ZS02XSxhZVt5ZV0sYWVbeWUtNF0sYWVbeWUtNV0pLFNlLnNldENsYXNzKFthZVt5ZS00XV0sYWVbeWUtMl0pO2JyZWFrO2Nhc2UgMTI6U2UuYWRkRW50aXR5KGFlW3llLTNdKSxTZS5hZGRBdHRyaWJ1dGVzKGFlW3llLTNdLGFlW3llLTFdKTticmVhaztjYXNlIDEzOlNlLmFkZEVudGl0eShhZVt5ZS01XSksU2UuYWRkQXR0cmlidXRlcyhhZVt5ZS01XSxhZVt5ZS0xXSksU2Uuc2V0Q2xhc3MoW2FlW3llLTVdXSxhZVt5ZS0zXSk7YnJlYWs7Y2FzZSAxNDpTZS5hZGRFbnRpdHkoYWVbeWUtMl0pO2JyZWFrO2Nhc2UgMTU6U2UuYWRkRW50aXR5KGFlW3llLTRdKSxTZS5zZXRDbGFzcyhbYWVbeWUtNF1dLGFlW3llLTJdKTticmVhaztjYXNlIDE2OlNlLmFkZEVudGl0eShhZVt5ZV0pO2JyZWFrO2Nhc2UgMTc6U2UuYWRkRW50aXR5KGFlW3llLTJdKSxTZS5zZXRDbGFzcyhbYWVbeWUtMl1dLGFlW3llXSk7YnJlYWs7Y2FzZSAxODpTZS5hZGRFbnRpdHkoYWVbeWUtNl0sYWVbeWUtNF0pLFNlLmFkZEF0dHJpYnV0ZXMoYWVbeWUtNl0sYWVbeWUtMV0pO2JyZWFrO2Nhc2UgMTk6U2UuYWRkRW50aXR5KGFlW3llLThdLGFlW3llLTZdKSxTZS5hZGRBdHRyaWJ1dGVzKGFlW3llLThdLGFlW3llLTFdKSxTZS5zZXRDbGFzcyhbYWVbeWUtOF1dLGFlW3llLTNdKTticmVhaztjYXNlIDIwOlNlLmFkZEVudGl0eShhZVt5ZS01XSxhZVt5ZS0zXSk7YnJlYWs7Y2FzZSAyMTpTZS5hZGRFbnRpdHkoYWVbeWUtN10sYWVbeWUtNV0pLFNlLnNldENsYXNzKFthZVt5ZS03XV0sYWVbeWUtMl0pO2JyZWFrO2Nhc2UgMjI6U2UuYWRkRW50aXR5KGFlW3llLTNdLGFlW3llLTFdKTticmVhaztjYXNlIDIzOlNlLmFkZEVudGl0eShhZVt5ZS01XSxhZVt5ZS0zXSksU2Uuc2V0Q2xhc3MoW2FlW3llLTVdXSxhZVt5ZV0pO2JyZWFrO2Nhc2UgMjQ6Y2FzZSAyNTp0aGlzLiQ9YWVbeWVdLnRyaW0oKSxTZS5zZXRBY2NUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMjY6Y2FzZSAyNzp0aGlzLiQ9YWVbeWVdLnRyaW0oKSxTZS5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO2JyZWFrO2Nhc2UgMzI6U2Uuc2V0RGlyZWN0aW9uKCJUQiIpO2JyZWFrO2Nhc2UgMzM6U2Uuc2V0RGlyZWN0aW9uKCJCVCIpO2JyZWFrO2Nhc2UgMzQ6U2Uuc2V0RGlyZWN0aW9uKCJSTCIpO2JyZWFrO2Nhc2UgMzU6U2Uuc2V0RGlyZWN0aW9uKCJMUiIpO2JyZWFrO2Nhc2UgMzY6dGhpcy4kPWFlW3llLTNdLFNlLmFkZENsYXNzKGFlW3llLTJdLGFlW3llLTFdKTticmVhaztjYXNlIDM3OmNhc2UgMzg6Y2FzZSA1NjpjYXNlIDY0OnRoaXMuJD1bYWVbeWVdXTticmVhaztjYXNlIDM5OmNhc2UgNDA6dGhpcy4kPWFlW3llLTJdLmNvbmNhdChbYWVbeWVdXSk7YnJlYWs7Y2FzZSA0MTp0aGlzLiQ9YWVbeWUtMl0sU2Uuc2V0Q2xhc3MoYWVbeWUtMV0sYWVbeWVdKTticmVhaztjYXNlIDQyOnRoaXMuJD1hZVt5ZS0zXSxTZS5hZGRDc3NTdHlsZXMoYWVbeWUtMl0sYWVbeWUtMV0pO2JyZWFrO2Nhc2UgNDM6dGhpcy4kPVthZVt5ZV1dO2JyZWFrO2Nhc2UgNDQ6YWVbeWUtMl0ucHVzaChhZVt5ZV0pLHRoaXMuJD1hZVt5ZS0yXTticmVhaztjYXNlIDQ2OnRoaXMuJD1hZVt5ZS0xXSthZVt5ZV07YnJlYWs7Y2FzZSA1NDpjYXNlIDc2OmNhc2UgNzc6dGhpcy4kPWFlW3llXS5yZXBsYWNlKC8iL2csIiIpO2JyZWFrO2Nhc2UgNTU6Y2FzZSA3ODp0aGlzLiQ9YWVbeWVdO2JyZWFrO2Nhc2UgNTc6YWVbeWVdLnB1c2goYWVbeWUtMV0pLHRoaXMuJD1hZVt5ZV07YnJlYWs7Y2FzZSA1ODp0aGlzLiQ9e3R5cGU6YWVbeWUtMV0sbmFtZTphZVt5ZV19O2JyZWFrO2Nhc2UgNTk6dGhpcy4kPXt0eXBlOmFlW3llLTJdLG5hbWU6YWVbeWUtMV0sa2V5czphZVt5ZV19O2JyZWFrO2Nhc2UgNjA6dGhpcy4kPXt0eXBlOmFlW3llLTJdLG5hbWU6YWVbeWUtMV0sY29tbWVudDphZVt5ZV19O2JyZWFrO2Nhc2UgNjE6dGhpcy4kPXt0eXBlOmFlW3llLTNdLG5hbWU6YWVbeWUtMl0sa2V5czphZVt5ZS0xXSxjb21tZW50OmFlW3llXX07YnJlYWs7Y2FzZSA2MjpjYXNlIDYzOmNhc2UgNjY6dGhpcy4kPWFlW3llXTticmVhaztjYXNlIDY1OmFlW3llLTJdLnB1c2goYWVbeWVdKSx0aGlzLiQ9YWVbeWUtMl07YnJlYWs7Y2FzZSA2Nzp0aGlzLiQ9YWVbeWVdLnJlcGxhY2UoLyIvZywiIik7YnJlYWs7Y2FzZSA2ODp0aGlzLiQ9e2NhcmRBOmFlW3llXSxyZWxUeXBlOmFlW3llLTFdLGNhcmRCOmFlW3llLTJdfTticmVhaztjYXNlIDY5OnRoaXMuJD1TZS5DYXJkaW5hbGl0eS5aRVJPX09SX09ORTticmVhaztjYXNlIDcwOnRoaXMuJD1TZS5DYXJkaW5hbGl0eS5aRVJPX09SX01PUkU7YnJlYWs7Y2FzZSA3MTp0aGlzLiQ9U2UuQ2FyZGluYWxpdHkuT05FX09SX01PUkU7YnJlYWs7Y2FzZSA3Mjp0aGlzLiQ9U2UuQ2FyZGluYWxpdHkuT05MWV9PTkU7YnJlYWs7Y2FzZSA3Mzp0aGlzLiQ9U2UuQ2FyZGluYWxpdHkuTURfUEFSRU5UO2JyZWFrO2Nhc2UgNzQ6dGhpcy4kPVNlLklkZW50aWZpY2F0aW9uLk5PTl9JREVOVElGWUlORzticmVhaztjYXNlIDc1OnRoaXMuJD1TZS5JZGVudGlmaWNhdGlvbi5JREVOVElGWUlORzticmVha319LCJhbm9ueW1vdXMiKSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LHQoZSxbMiwyXSx7NTozfSksezY6WzEsNF0sNzo1LDg6WzEsNl0sOTo3LDEwOlsxLDhdLDExOjksMjI6ciwyNDpuLDI2OmksMjg6YSwyOToxNCwzMDoxNSwzMToxNiwzMjoxNywzMzpzLDM0OmwsMzU6dSwzNjpoLDM3OmYsNDA6ZCw0MzpwLDQ0Om0sNTA6Z30sdChlLFsyLDddLHsxOlsyLDFdfSksdChlLFsyLDNdKSx7OToyNywxMTo5LDIyOnIsMjQ6biwyNjppLDI4OmEsMjk6MTQsMzA6MTUsMzE6MTYsMzI6MTcsMzM6cywzNDpsLDM1OnUsMzY6aCwzNzpmLDQwOmQsNDM6cCw0NDptLDUwOmd9LHQoZSxbMiw1XSksdChlLFsyLDZdKSx0KGUsWzIsMTZdLHsxMjoyOCw2MTozMiwxNTpbMSwyOV0sMTc6WzEsMzBdLDIwOlsxLDMxXSw2Mzp5LDY0OnYsNjU6eCw2NjpiLDY3OlR9KSx7MjM6WzEsMzhdfSx7MjU6WzEsMzldfSx7Mjc6WzEsNDBdfSx0KGUsWzIsMjddKSx0KGUsWzIsMjhdKSx0KGUsWzIsMjldKSx0KGUsWzIsMzBdKSx0KGUsWzIsMzFdKSx0KFMsWzIsNTRdKSx0KFMsWzIsNTVdKSx0KGUsWzIsMzJdKSx0KGUsWzIsMzNdKSx0KGUsWzIsMzRdKSx0KGUsWzIsMzVdKSx7MTY6NDEsNDA6dyw0MTpFfSx7MTY6NDQsNDA6dyw0MTpFfSx7MTY6NDUsNDA6dyw0MTpFfSx0KGUsWzIsNF0pLHsxMTo0Niw0MDpkLDUwOmd9LHsxNjo0Nyw0MDp3LDQxOkV9LHsxODo0OCwxOTpbMSw0OV0sNTE6NTAsNTI6NTEsNTY6X30sezExOjUzLDQwOmQsNTA6Z30sezYyOjU0LDY4OlsxLDU1XSw2OTpbMSw1Nl19LHQoQyxbMiw2OV0pLHQoQyxbMiw3MF0pLHQoQyxbMiw3MV0pLHQoQyxbMiw3Ml0pLHQoQyxbMiw3M10pLHQoZSxbMiwyNF0pLHQoZSxbMiwyNV0pLHQoZSxbMiwyNl0pLHsxMzpELDM4OjU3LDQxOk8sNDI6Uiw0NTo1OSw0Njo2MCw0ODprLDQ5Okx9LHQoQSxbMiwzN10pLHQoQSxbMiwzOF0pLHsxNjo2NSw0MDp3LDQxOkUsNDI6Un0sezEzOkQsMzg6NjYsNDE6Tyw0MjpSLDQ1OjU5LDQ2OjYwLDQ4OmssNDk6TH0sezEzOlsxLDY3XSwxNTpbMSw2OF19LHQoZSxbMiwxN10sezYxOjMyLDEyOjY5LDE3OlsxLDcwXSw0MjpSLDYzOnksNjQ6diw2NTp4LDY2OmIsNjc6VH0pLHsxOTpbMSw3MV19LHQoZSxbMiwxNF0pLHsxODo3MiwxOTpbMiw1Nl0sNTE6NTAsNTI6NTEsNTY6X30sezUzOjczLDU2OlsxLDc0XX0sezU2OlsyLDYyXX0sezIxOlsxLDc1XX0sezYxOjc2LDYzOnksNjQ6diw2NTp4LDY2OmIsNjc6VH0sdChJLFsyLDc0XSksdChJLFsyLDc1XSksezY6TSwxMDpQLDM5Ojc3LDQyOkIsNDc6Rn0sezQwOlsxLDgyXSw0MTpbMSw4M119LHQoeixbMiw0M10sezQ2Ojg0LDEzOkQsNDE6Tyw0ODprLDQ5Okx9KSx0KCQsWzIsNDVdKSx0KCQsWzIsNTBdKSx0KCQsWzIsNTFdKSx0KCQsWzIsNTJdKSx0KCQsWzIsNTNdKSx0KGUsWzIsNDFdLHs0MjpSfSksezY6TSwxMDpQLDM5Ojg1LDQyOkIsNDc6Rn0sezE0Ojg2LDQwOlUsNTA6Syw3MDplZX0sezE2OjkwLDQwOncsNDE6RX0sezExOjkxLDQwOmQsNTA6Z30sezE4OjkyLDE5OlsxLDkzXSw1MTo1MCw1Mjo1MSw1NjpffSx0KGUsWzIsMTJdKSx7MTk6WzIsNTddfSx0KFksWzIsNThdLHs1NDo5NCw1NTo5NSw1Nzo5Niw1OTpjZSw2MDpafSksdChbMTksNTYsNTksNjBdLFsyLDYzXSksdChlLFsyLDIyXSx7MTU6WzEsMTAwXSwxNzpbMSw5OV19KSx0KFs0MCw1MF0sWzIsNjhdKSx0KGUsWzIsMzZdKSx7MTM6RCw0MTpPLDQ1OjEwMSw0Njo2MCw0ODprLDQ5Okx9LHQoZSxbMiw0N10pLHQoZSxbMiw0OF0pLHQoZSxbMiw0OV0pLHQoQSxbMiwzOV0pLHQoQSxbMiw0MF0pLHQoJCxbMiw0Nl0pLHQoZSxbMiw0Ml0pLHQoZSxbMiw4XSksdChlLFsyLDc2XSksdChlLFsyLDc3XSksdChlLFsyLDc4XSksezEzOlsxLDEwMl0sNDI6Un0sezEzOlsxLDEwNF0sMTU6WzEsMTAzXX0sezE5OlsxLDEwNV19LHQoZSxbMiwxNV0pLHQoWSxbMiw1OV0sezU1OjEwNiw1ODpbMSwxMDddLDYwOlp9KSx0KFksWzIsNjBdKSx0KHVlLFsyLDY0XSksdChZLFsyLDY3XSksdCh1ZSxbMiw2Nl0pLHsxODoxMDgsMTk6WzEsMTA5XSw1MTo1MCw1Mjo1MSw1NjpffSx7MTY6MTEwLDQwOncsNDE6RX0sdCh6LFsyLDQ0XSx7NDY6ODQsMTM6RCw0MTpPLDQ4OmssNDk6TH0pLHsxNDoxMTEsNDA6VSw1MDpLLDcwOmVlfSx7MTY6MTEyLDQwOncsNDE6RX0sezE0OjExMyw0MDpVLDUwOkssNzA6ZWV9LHQoZSxbMiwxM10pLHQoWSxbMiw2MV0pLHs1NzoxMTQsNTk6Y2V9LHsxOTpbMSwxMTVdfSx0KGUsWzIsMjBdKSx0KGUsWzIsMjNdLHsxNzpbMSwxMTZdLDQyOlJ9KSx0KGUsWzIsMTFdKSx7MTM6WzEsMTE3XSw0MjpSfSx0KGUsWzIsMTBdKSx0KHVlLFsyLDY1XSksdChlLFsyLDE4XSksezE4OjExOCwxOTpbMSwxMTldLDUxOjUwLDUyOjUxLDU2Ol99LHsxNDoxMjAsNDA6VSw1MDpLLDcwOmVlfSx7MTk6WzEsMTIxXX0sdChlLFsyLDIxXSksdChlLFsyLDldKSx0KGUsWzIsMTldKV0sZGVmYXVsdEFjdGlvbnM6ezUyOlsyLDYyXSw3MjpbMiw1N119LHBhcnNlRXJyb3I6byhmdW5jdGlvbihoZSxsZSl7aWYobGUucmVjb3ZlcmFibGUpdGhpcy50cmFjZShoZSk7ZWxzZXt2YXIgSj1uZXcgRXJyb3IoaGUpO3Rocm93IEouaGFzaD1sZSxKfX0sInBhcnNlRXJyb3IiKSxwYXJzZTpvKGZ1bmN0aW9uKGhlKXt2YXIgbGU9dGhpcyxKPVswXSxTZT1bXSxzZT1bbnVsbF0sYWU9W10sT2U9dGhpcy50YWJsZSx5ZT0iIixCZT0wLEhlPTAsemU9MCxMZT0yLEllPTEseGU9YWUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscT1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLGRlPXt5eTp7fX07Zm9yKHZhciBpZSBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGllKSYmKGRlLnl5W2llXT10aGlzLnl5W2llXSk7cS5zZXRJbnB1dChoZSxkZS55eSksZGUueXkubGV4ZXI9cSxkZS55eS5wYXJzZXI9dGhpcyx0eXBlb2YgcS55eWxsb2M+InUiJiYocS55eWxsb2M9e30pO3ZhciBvZT1xLnl5bGxvYzthZS5wdXNoKG9lKTt2YXIgVj1xLm9wdGlvbnMmJnEub3B0aW9ucy5yYW5nZXM7dHlwZW9mIGRlLnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPWRlLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIFRlKGN0KXtKLmxlbmd0aD1KLmxlbmd0aC0yKmN0LHNlLmxlbmd0aD1zZS5sZW5ndGgtY3QsYWUubGVuZ3RoPWFlLmxlbmd0aC1jdH1vKFRlLCJwb3BTdGFjayIpO2Z1bmN0aW9uIFcoKXt2YXIgY3Q7cmV0dXJuIGN0PVNlLnBvcCgpfHxxLmxleCgpfHxJZSx0eXBlb2YgY3QhPSJudW1iZXIiJiYoY3QgaW5zdGFuY2VvZiBBcnJheSYmKFNlPWN0LGN0PVNlLnBvcCgpKSxjdD1sZS5zeW1ib2xzX1tjdF18fGN0KSxjdH1vKFcsImxleCIpO2Zvcih2YXIgcGUsdmUsUGUsX2UsYmUsVmUsRGU9e30scWUsYXQsUnQsc3Q7Oyl7aWYoUGU9SltKLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW1BlXT9fZT10aGlzLmRlZmF1bHRBY3Rpb25zW1BlXTooKHBlPT09bnVsbHx8dHlwZW9mIHBlPiJ1IikmJihwZT1XKCkpLF9lPU9lW1BlXSYmT2VbUGVdW3BlXSksdHlwZW9mIF9lPiJ1Inx8IV9lLmxlbmd0aHx8IV9lWzBdKXt2YXIgVWU9IiI7c3Q9W107Zm9yKHFlIGluIE9lW1BlXSl0aGlzLnRlcm1pbmFsc19bcWVdJiZxZT5MZSYmc3QucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW3FlXSsiJyIpO3Euc2hvd1Bvc2l0aW9uP1VlPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKEJlKzEpK2A6CmArcS5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK3N0LmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bcGVdfHxwZSkrIiciOlVlPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKEJlKzEpKyI6IFVuZXhwZWN0ZWQgIisocGU9PUllPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW3BlXXx8cGUpKyInIiksdGhpcy5wYXJzZUVycm9yKFVlLHt0ZXh0OnEubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW3BlXXx8cGUsbGluZTpxLnl5bGluZW5vLGxvYzpvZSxleHBlY3RlZDpzdH0pfWlmKF9lWzBdaW5zdGFuY2VvZiBBcnJheSYmX2UubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitQZSsiLCB0b2tlbjogIitwZSk7c3dpdGNoKF9lWzBdKXtjYXNlIDE6Si5wdXNoKHBlKSxzZS5wdXNoKHEueXl0ZXh0KSxhZS5wdXNoKHEueXlsbG9jKSxKLnB1c2goX2VbMV0pLHBlPW51bGwsdmU/KHBlPXZlLHZlPW51bGwpOihIZT1xLnl5bGVuZyx5ZT1xLnl5dGV4dCxCZT1xLnl5bGluZW5vLG9lPXEueXlsbG9jLHplPjAmJnplLS0pO2JyZWFrO2Nhc2UgMjppZihhdD10aGlzLnByb2R1Y3Rpb25zX1tfZVsxXV1bMV0sRGUuJD1zZVtzZS5sZW5ndGgtYXRdLERlLl8kPXtmaXJzdF9saW5lOmFlW2FlLmxlbmd0aC0oYXR8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTphZVthZS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjphZVthZS5sZW5ndGgtKGF0fHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmFlW2FlLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sViYmKERlLl8kLnJhbmdlPVthZVthZS5sZW5ndGgtKGF0fHwxKV0ucmFuZ2VbMF0sYWVbYWUubGVuZ3RoLTFdLnJhbmdlWzFdXSksVmU9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KERlLFt5ZSxIZSxCZSxkZS55eSxfZVsxXSxzZSxhZV0uY29uY2F0KHhlKSksdHlwZW9mIFZlPCJ1IilyZXR1cm4gVmU7YXQmJihKPUouc2xpY2UoMCwtMSphdCoyKSxzZT1zZS5zbGljZSgwLC0xKmF0KSxhZT1hZS5zbGljZSgwLC0xKmF0KSksSi5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW19lWzFdXVswXSksc2UucHVzaChEZS4kKSxhZS5wdXNoKERlLl8kKSxSdD1PZVtKW0oubGVuZ3RoLTJdXVtKW0oubGVuZ3RoLTFdXSxKLnB1c2goUnQpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9LCJwYXJzZSIpfSxqPWZ1bmN0aW9uKCl7dmFyIHRlPXtFT0Y6MSxwYXJzZUVycm9yOm8oZnVuY3Rpb24obGUsSil7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihsZSxKKTtlbHNlIHRocm93IG5ldyBFcnJvcihsZSl9LCJwYXJzZUVycm9yIiksc2V0SW5wdXQ6byhmdW5jdGlvbihoZSxsZSl7cmV0dXJuIHRoaXMueXk9bGV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PWhlLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSwic2V0SW5wdXQiKSxpbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIGhlPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1oZSx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9aGUsdGhpcy5tYXRjaGVkKz1oZTt2YXIgbGU9aGUubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBsZT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksaGV9LCJpbnB1dCIpLHVucHV0Om8oZnVuY3Rpb24oaGUpe3ZhciBsZT1oZS5sZW5ndGgsSj1oZS5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PWhlK3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1sZSksdGhpcy5vZmZzZXQtPWxlO3ZhciBTZT10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxKLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09Si5sZW5ndGgtMSk7dmFyIHNlPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpKPyhKLmxlbmd0aD09PVNlLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrU2VbU2UubGVuZ3RoLUoubGVuZ3RoXS5sZW5ndGgtSlswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWxlfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3NlWzBdLHNlWzBdK3RoaXMueXlsZW5nLWxlXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LCJ1bnB1dCIpLG1vcmU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LCJtb3JlIikscmVqZWN0Om8oZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LCJyZWplY3QiKSxsZXNzOm8oZnVuY3Rpb24oaGUpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShoZSkpfSwibGVzcyIpLHBhc3RJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIGhlPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oaGUubGVuZ3RoPjIwPyIuLi4iOiIiKStoZS5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sInBhc3RJbnB1dCIpLHVwY29taW5nSW5wdXQ6byhmdW5jdGlvbigpe3ZhciBoZT10aGlzLm1hdGNoO3JldHVybiBoZS5sZW5ndGg8MjAmJihoZSs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtaGUubGVuZ3RoKSksKGhlLnN1YnN0cigwLDIwKSsoaGUubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LCJ1cGNvbWluZ0lucHV0Iiksc2hvd1Bvc2l0aW9uOm8oZnVuY3Rpb24oKXt2YXIgaGU9dGhpcy5wYXN0SW5wdXQoKSxsZT1uZXcgQXJyYXkoaGUubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gaGUrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK2xlKyJeIn0sInNob3dQb3NpdGlvbiIpLHRlc3RfbWF0Y2g6byhmdW5jdGlvbihoZSxsZSl7dmFyIEosU2Usc2U7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKHNlPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHNlLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLFNlPWhlWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxTZSYmKHRoaXMueXlsaW5lbm8rPVNlLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOlNlP1NlW1NlLmxlbmd0aC0xXS5sZW5ndGgtU2VbU2UubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4raGVbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9aGVbMF0sdGhpcy5tYXRjaCs9aGVbMF0sdGhpcy5tYXRjaGVzPWhlLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKGhlWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1oZVswXSxKPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLGxlLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLEopcmV0dXJuIEo7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIGFlIGluIHNlKXRoaXNbYWVdPXNlW2FlXTtyZXR1cm4hMX1yZXR1cm4hMX0sInRlc3RfbWF0Y2giKSxuZXh0Om8oZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgaGUsbGUsSixTZTt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBzZT10aGlzLl9jdXJyZW50UnVsZXMoKSxhZT0wO2FlPHNlLmxlbmd0aDthZSsrKWlmKEo9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tzZVthZV1dKSxKJiYoIWxlfHxKWzBdLmxlbmd0aD5sZVswXS5sZW5ndGgpKXtpZihsZT1KLFNlPWFlLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKGhlPXRoaXMudGVzdF9tYXRjaChKLHNlW2FlXSksaGUhPT0hMSlyZXR1cm4gaGU7aWYodGhpcy5fYmFja3RyYWNrKXtsZT0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBsZT8oaGU9dGhpcy50ZXN0X21hdGNoKGxlLHNlW1NlXSksaGUhPT0hMT9oZTohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sIm5leHQiKSxsZXg6byhmdW5jdGlvbigpe3ZhciBsZT10aGlzLm5leHQoKTtyZXR1cm4gbGV8fHRoaXMubGV4KCl9LCJsZXgiKSxiZWdpbjpvKGZ1bmN0aW9uKGxlKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2gobGUpfSwiYmVnaW4iKSxwb3BTdGF0ZTpvKGZ1bmN0aW9uKCl7dmFyIGxlPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIGxlPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSwicG9wU3RhdGUiKSxfY3VycmVudFJ1bGVzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSwiX2N1cnJlbnRSdWxlcyIpLHRvcFN0YXRlOm8oZnVuY3Rpb24obGUpe3JldHVybiBsZT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKGxlfHwwKSxsZT49MD90aGlzLmNvbmRpdGlvblN0YWNrW2xlXToiSU5JVElBTCJ9LCJ0b3BTdGF0ZSIpLHB1c2hTdGF0ZTpvKGZ1bmN0aW9uKGxlKXt0aGlzLmJlZ2luKGxlKX0sInB1c2hTdGF0ZSIpLHN0YXRlU3RhY2tTaXplOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LCJzdGF0ZVN0YWNrU2l6ZSIpLG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKGxlLEosU2Usc2Upe3ZhciBhZT1zZTtzd2l0Y2goU2Upe2Nhc2UgMDpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMjQ7YnJlYWs7Y2FzZSAxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7YnJlYWs7Y2FzZSAyOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwyNjticmVhaztjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjticmVhaztjYXNlIDQ6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgNTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA2OnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDc6cmV0dXJuIDMzO2Nhc2UgODpyZXR1cm4gMzQ7Y2FzZSA5OnJldHVybiAzNTtjYXNlIDEwOnJldHVybiAzNjtjYXNlIDExOnJldHVybiAxMDtjYXNlIDEyOmJyZWFrO2Nhc2UgMTM6cmV0dXJuIDg7Y2FzZSAxNDpyZXR1cm4gNTA7Y2FzZSAxNTpyZXR1cm4gNzA7Y2FzZSAxNjpyZXR1cm4gNDtjYXNlIDE3OnJldHVybiB0aGlzLmJlZ2luKCJibG9jayIpLDE3O2JyZWFrO2Nhc2UgMTg6cmV0dXJuIDQ5O2Nhc2UgMTk6cmV0dXJuIDQ5O2Nhc2UgMjA6cmV0dXJuIDQyO2Nhc2UgMjE6cmV0dXJuIDE1O2Nhc2UgMjI6cmV0dXJuIDEzO2Nhc2UgMjM6YnJlYWs7Y2FzZSAyNDpyZXR1cm4gNTk7Y2FzZSAyNTpyZXR1cm4gNTY7Y2FzZSAyNjpyZXR1cm4gNTY7Y2FzZSAyNzpyZXR1cm4gNjA7Y2FzZSAyODpicmVhaztjYXNlIDI5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTk7YnJlYWs7Y2FzZSAzMDpyZXR1cm4gSi55eXRleHRbMF07Y2FzZSAzMTpyZXR1cm4gMjA7Y2FzZSAzMjpyZXR1cm4gMjE7Y2FzZSAzMzpyZXR1cm4gdGhpcy5iZWdpbigic3R5bGUiKSw0NDticmVhaztjYXNlIDM0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTA7YnJlYWs7Y2FzZSAzNTpicmVhaztjYXNlIDM2OnJldHVybiAxMztjYXNlIDM3OnJldHVybiA0MjtjYXNlIDM4OnJldHVybiA0OTtjYXNlIDM5OnJldHVybiB0aGlzLmJlZ2luKCJzdHlsZSIpLDM3O2JyZWFrO2Nhc2UgNDA6cmV0dXJuIDQzO2Nhc2UgNDE6cmV0dXJuIDYzO2Nhc2UgNDI6cmV0dXJuIDY1O2Nhc2UgNDM6cmV0dXJuIDY1O2Nhc2UgNDQ6cmV0dXJuIDY1O2Nhc2UgNDU6cmV0dXJuIDYzO2Nhc2UgNDY6cmV0dXJuIDYzO2Nhc2UgNDc6cmV0dXJuIDY0O2Nhc2UgNDg6cmV0dXJuIDY0O2Nhc2UgNDk6cmV0dXJuIDY0O2Nhc2UgNTA6cmV0dXJuIDY0O2Nhc2UgNTE6cmV0dXJuIDY0O2Nhc2UgNTI6cmV0dXJuIDY1O2Nhc2UgNTM6cmV0dXJuIDY0O2Nhc2UgNTQ6cmV0dXJuIDY1O2Nhc2UgNTU6cmV0dXJuIDY2O2Nhc2UgNTY6cmV0dXJuIDY2O2Nhc2UgNTc6cmV0dXJuIDY2O2Nhc2UgNTg6cmV0dXJuIDY2O2Nhc2UgNTk6cmV0dXJuIDYzO2Nhc2UgNjA6cmV0dXJuIDY0O2Nhc2UgNjE6cmV0dXJuIDY1O2Nhc2UgNjI6cmV0dXJuIDY3O2Nhc2UgNjM6cmV0dXJuIDY4O2Nhc2UgNjQ6cmV0dXJuIDY5O2Nhc2UgNjU6cmV0dXJuIDY5O2Nhc2UgNjY6cmV0dXJuIDY4O2Nhc2UgNjc6cmV0dXJuIDY4O2Nhc2UgNjg6cmV0dXJuIDY4O2Nhc2UgNjk6cmV0dXJuIDQxO2Nhc2UgNzA6cmV0dXJuIDQ3O2Nhc2UgNzE6cmV0dXJuIDQwO2Nhc2UgNzI6cmV0dXJuIDQ4O2Nhc2UgNzM6cmV0dXJuIEoueXl0ZXh0WzBdO2Nhc2UgNzQ6cmV0dXJuIDZ9fSwiYW5vbnltb3VzIikscnVsZXM6Wy9eKD86YWNjVGl0bGVccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccypce1xzKikvaSwvXig/OltcfV0pL2ksL14oPzpbXlx9XSopL2ksL14oPzouKmRpcmVjdGlvblxzK1RCW15cbl0qKS9pLC9eKD86LipkaXJlY3Rpb25ccytCVFteXG5dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrUkxbXlxuXSopL2ksL14oPzouKmRpcmVjdGlvblxzK0xSW15cbl0qKS9pLC9eKD86W1xuXSspL2ksL14oPzpccyspL2ksL14oPzpbXHNdKykvaSwvXig/OiJbXiIlXHJcblx2XGJcXF0rIikvaSwvXig/OiJbXiJdKiIpL2ksL14oPzplckRpYWdyYW1cYikvaSwvXig/Olx7KS9pLC9eKD86IykvaSwvXig/OiMpL2ksL14oPzosKS9pLC9eKD86Ojo6KS9pLC9eKD86OikvaSwvXig/OlxzKykvaSwvXig/OlxiKCg/OlBLKXwoPzpGSyl8KD86VUspKVxiKS9pLC9eKD86KFteXHNdKilbfl0uKlt+XShbXlxzXSopKS9pLC9eKD86KFtcKkEtWmEtel9cdTAwQzAtXHVGRkZGXVtBLVphLXowLTlcLVxfXFtcXVwoXClcdTAwQzAtXHVGRkZGXCpdKikpL2ksL14oPzoiW14iXSoiKS9pLC9eKD86W1xuXSspL2ksL14oPzpcfSkvaSwvXig/Oi4pL2ksL14oPzpcWykvaSwvXig/OlxdKS9pLC9eKD86c3R5bGVcYikvaSwvXig/Oltcbl0rKS9pLC9eKD86XHMrKS9pLC9eKD86OikvaSwvXig/OiwpL2ksL14oPzojKS9pLC9eKD86Y2xhc3NEZWZcYikvaSwvXig/OmNsYXNzXGIpL2ksL14oPzpvbmUgb3IgemVyb1xiKS9pLC9eKD86b25lIG9yIG1vcmVcYikvaSwvXig/Om9uZSBvciBtYW55XGIpL2ksL14oPzoxXCspL2ksL14oPzpcfG9cYikvaSwvXig/Onplcm8gb3Igb25lXGIpL2ksL14oPzp6ZXJvIG9yIG1vcmVcYikvaSwvXig/Onplcm8gb3IgbWFueVxiKS9pLC9eKD86MFwrKS9pLC9eKD86XH1vXGIpL2ksL14oPzptYW55XCgwXCkpL2ksL14oPzptYW55XCgxXCkpL2ksL14oPzptYW55XGIpL2ksL14oPzpcfVx8KS9pLC9eKD86b25lXGIpL2ksL14oPzpvbmx5IG9uZVxiKS9pLC9eKD86MVxiKS9pLC9eKD86XHxcfCkvaSwvXig/Om9cfCkvaSwvXig/Om9ceykvaSwvXig/Olx8XHspL2ksL14oPzpccyp1XGIpL2ksL14oPzpcLlwuKS9pLC9eKD86LS0pL2ksL14oPzp0b1xiKS9pLC9eKD86b3B0aW9uYWxseSB0b1xiKS9pLC9eKD86XC4tKS9pLC9eKD86LVwuKS9pLC9eKD86KFteXHgwMC1ceDdGXXxcd3wtfFwqKSspL2ksL14oPzo7KS9pLC9eKD86KFteXHgwMC1ceDdGXXxcd3wtfFwqKSspL2ksL14oPzpbMC05XSkvaSwvXig/Oi4pL2ksL14oPzokKS9pXSxjb25kaXRpb25zOntzdHlsZTp7cnVsZXM6WzM0LDM1LDM2LDM3LDM4LDY5LDcwXSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOls1LDZdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbM10saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOlsxXSxpbmNsdXNpdmU6ITF9LGJsb2NrOntydWxlczpbMjMsMjQsMjUsMjYsMjcsMjgsMjksMzBdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMiw0LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDMxLDMyLDMzLDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDcxLDcyLDczLDc0XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIHRlfSgpO1EubGV4ZXI9ajtmdW5jdGlvbiBuZSgpe3RoaXMueXk9e319cmV0dXJuIG8obmUsIlBhcnNlciIpLG5lLnByb3RvdHlwZT1RLFEuUGFyc2VyPW5lLG5ldyBuZX0oKTtpTi5wYXJzZXI9aU47cHNlPWlOfSk7dmFyIFRrLGdzZT1OKCgpPT57InVzZSBzdHJpY3QiO3l0KCk7R3QoKTtjaSgpO2VyKCk7VGs9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmVudGl0aWVzPW5ldyBNYXA7dGhpcy5yZWxhdGlvbnNoaXBzPVtdO3RoaXMuY2xhc3Nlcz1uZXcgTWFwO3RoaXMuZGlyZWN0aW9uPSJUQiI7dGhpcy5DYXJkaW5hbGl0eT17WkVST19PUl9PTkU6IlpFUk9fT1JfT05FIixaRVJPX09SX01PUkU6IlpFUk9fT1JfTU9SRSIsT05FX09SX01PUkU6Ik9ORV9PUl9NT1JFIixPTkxZX09ORToiT05MWV9PTkUiLE1EX1BBUkVOVDoiTURfUEFSRU5UIn07dGhpcy5JZGVudGlmaWNhdGlvbj17Tk9OX0lERU5USUZZSU5HOiJOT05fSURFTlRJRllJTkciLElERU5USUZZSU5HOiJJREVOVElGWUlORyJ9O3RoaXMuc2V0QWNjVGl0bGU9QXI7dGhpcy5nZXRBY2NUaXRsZT1Ecjt0aGlzLnNldEFjY0Rlc2NyaXB0aW9uPUxyO3RoaXMuZ2V0QWNjRGVzY3JpcHRpb249UnI7dGhpcy5zZXREaWFncmFtVGl0bGU9T3I7dGhpcy5nZXREaWFncmFtVGl0bGU9TnI7dGhpcy5nZXRDb25maWc9bygoKT0+bWUoKS5lciwiZ2V0Q29uZmlnIik7dGhpcy5jbGVhcigpLHRoaXMuYWRkRW50aXR5PXRoaXMuYWRkRW50aXR5LmJpbmQodGhpcyksdGhpcy5hZGRBdHRyaWJ1dGVzPXRoaXMuYWRkQXR0cmlidXRlcy5iaW5kKHRoaXMpLHRoaXMuYWRkUmVsYXRpb25zaGlwPXRoaXMuYWRkUmVsYXRpb25zaGlwLmJpbmQodGhpcyksdGhpcy5zZXREaXJlY3Rpb249dGhpcy5zZXREaXJlY3Rpb24uYmluZCh0aGlzKSx0aGlzLmFkZENzc1N0eWxlcz10aGlzLmFkZENzc1N0eWxlcy5iaW5kKHRoaXMpLHRoaXMuYWRkQ2xhc3M9dGhpcy5hZGRDbGFzcy5iaW5kKHRoaXMpLHRoaXMuc2V0Q2xhc3M9dGhpcy5zZXRDbGFzcy5iaW5kKHRoaXMpLHRoaXMuc2V0QWNjVGl0bGU9dGhpcy5zZXRBY2NUaXRsZS5iaW5kKHRoaXMpLHRoaXMuc2V0QWNjRGVzY3JpcHRpb249dGhpcy5zZXRBY2NEZXNjcmlwdGlvbi5iaW5kKHRoaXMpfXN0YXRpY3tvKHRoaXMsIkVyREIiKX1hZGRFbnRpdHkoZSxyPSIiKXtyZXR1cm4gdGhpcy5lbnRpdGllcy5oYXMoZSk/IXRoaXMuZW50aXRpZXMuZ2V0KGUpPy5hbGlhcyYmciYmKHRoaXMuZW50aXRpZXMuZ2V0KGUpLmFsaWFzPXIsWC5pbmZvKGBBZGQgYWxpYXMgJyR7cn0nIHRvIGVudGl0eSAnJHtlfSdgKSk6KHRoaXMuZW50aXRpZXMuc2V0KGUse2lkOmBlbnRpdHktJHtlfS0ke3RoaXMuZW50aXRpZXMuc2l6ZX1gLGxhYmVsOmUsYXR0cmlidXRlczpbXSxhbGlhczpyLHNoYXBlOiJlckJveCIsbG9vazptZSgpLmxvb2s/PyJkZWZhdWx0Iixjc3NDbGFzc2VzOiJkZWZhdWx0Iixjc3NTdHlsZXM6W119KSxYLmluZm8oIkFkZGVkIG5ldyBlbnRpdHkgOiIsZSkpLHRoaXMuZW50aXRpZXMuZ2V0KGUpfWdldEVudGl0eShlKXtyZXR1cm4gdGhpcy5lbnRpdGllcy5nZXQoZSl9Z2V0RW50aXRpZXMoKXtyZXR1cm4gdGhpcy5lbnRpdGllc31nZXRDbGFzc2VzKCl7cmV0dXJuIHRoaXMuY2xhc3Nlc31hZGRBdHRyaWJ1dGVzKGUscil7bGV0IG49dGhpcy5hZGRFbnRpdHkoZSksaTtmb3IoaT1yLmxlbmd0aC0xO2k+PTA7aS0tKXJbaV0ua2V5c3x8KHJbaV0ua2V5cz1bXSkscltpXS5jb21tZW50fHwocltpXS5jb21tZW50PSIiKSxuLmF0dHJpYnV0ZXMucHVzaChyW2ldKSxYLmRlYnVnKCJBZGRlZCBhdHRyaWJ1dGUgIixyW2ldLm5hbWUpfWFkZFJlbGF0aW9uc2hpcChlLHIsbixpKXtsZXQgYT10aGlzLmVudGl0aWVzLmdldChlKSxzPXRoaXMuZW50aXRpZXMuZ2V0KG4pO2lmKCFhfHwhcylyZXR1cm47bGV0IGw9e2VudGl0eUE6YS5pZCxyb2xlQTpyLGVudGl0eUI6cy5pZCxyZWxTcGVjOml9O3RoaXMucmVsYXRpb25zaGlwcy5wdXNoKGwpLFguZGVidWcoIkFkZGVkIG5ldyByZWxhdGlvbnNoaXAgOiIsbCl9Z2V0UmVsYXRpb25zaGlwcygpe3JldHVybiB0aGlzLnJlbGF0aW9uc2hpcHN9Z2V0RGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuZGlyZWN0aW9ufXNldERpcmVjdGlvbihlKXt0aGlzLmRpcmVjdGlvbj1lfWdldENvbXBpbGVkU3R5bGVzKGUpe2xldCByPVtdO2ZvcihsZXQgbiBvZiBlKXtsZXQgaT10aGlzLmNsYXNzZXMuZ2V0KG4pO2k/LnN0eWxlcyYmKHI9Wy4uLnIsLi4uaS5zdHlsZXM/P1tdXS5tYXAoYT0+YS50cmltKCkpKSxpPy50ZXh0U3R5bGVzJiYocj1bLi4uciwuLi5pLnRleHRTdHlsZXM/P1tdXS5tYXAoYT0+YS50cmltKCkpKX1yZXR1cm4gcn1hZGRDc3NTdHlsZXMoZSxyKXtmb3IobGV0IG4gb2YgZSl7bGV0IGk9dGhpcy5lbnRpdGllcy5nZXQobik7aWYoIXJ8fCFpKXJldHVybjtmb3IobGV0IGEgb2YgcilpLmNzc1N0eWxlcy5wdXNoKGEpfX1hZGRDbGFzcyhlLHIpe2UuZm9yRWFjaChuPT57bGV0IGk9dGhpcy5jbGFzc2VzLmdldChuKTtpPT09dm9pZCAwJiYoaT17aWQ6bixzdHlsZXM6W10sdGV4dFN0eWxlczpbXX0sdGhpcy5jbGFzc2VzLnNldChuLGkpKSxyJiZyLmZvckVhY2goZnVuY3Rpb24oYSl7aWYoL2NvbG9yLy5leGVjKGEpKXtsZXQgcz1hLnJlcGxhY2UoImZpbGwiLCJiZ0ZpbGwiKTtpLnRleHRTdHlsZXMucHVzaChzKX1pLnN0eWxlcy5wdXNoKGEpfSl9KX1zZXRDbGFzcyhlLHIpe2ZvcihsZXQgbiBvZiBlKXtsZXQgaT10aGlzLmVudGl0aWVzLmdldChuKTtpZihpKWZvcihsZXQgYSBvZiByKWkuY3NzQ2xhc3Nlcys9IiAiK2F9fWNsZWFyKCl7dGhpcy5lbnRpdGllcz1uZXcgTWFwLHRoaXMuY2xhc3Nlcz1uZXcgTWFwLHRoaXMucmVsYXRpb25zaGlwcz1bXSxrcigpfWdldERhdGEoKXtsZXQgZT1bXSxyPVtdLG49bWUoKTtmb3IobGV0IGEgb2YgdGhpcy5lbnRpdGllcy5rZXlzKCkpe2xldCBzPXRoaXMuZW50aXRpZXMuZ2V0KGEpO3MmJihzLmNzc0NvbXBpbGVkU3R5bGVzPXRoaXMuZ2V0Q29tcGlsZWRTdHlsZXMocy5jc3NDbGFzc2VzLnNwbGl0KCIgIikpLGUucHVzaChzKSl9bGV0IGk9MDtmb3IobGV0IGEgb2YgdGhpcy5yZWxhdGlvbnNoaXBzKXtsZXQgcz17aWQ6V2goYS5lbnRpdHlBLGEuZW50aXR5Qix7cHJlZml4OiJpZCIsY291bnRlcjppKyt9KSx0eXBlOiJub3JtYWwiLGN1cnZlOiJiYXNpcyIsc3RhcnQ6YS5lbnRpdHlBLGVuZDphLmVudGl0eUIsbGFiZWw6YS5yb2xlQSxsYWJlbHBvczoiYyIsdGhpY2tuZXNzOiJub3JtYWwiLGNsYXNzZXM6InJlbGF0aW9uc2hpcExpbmUiLGFycm93VHlwZVN0YXJ0OmEucmVsU3BlYy5jYXJkQi50b0xvd2VyQ2FzZSgpLGFycm93VHlwZUVuZDphLnJlbFNwZWMuY2FyZEEudG9Mb3dlckNhc2UoKSxwYXR0ZXJuOmEucmVsU3BlYy5yZWxUeXBlPT0iSURFTlRJRllJTkciPyJzb2xpZCI6ImRhc2hlZCIsbG9vazpuLmxvb2t9O3IucHVzaChzKX1yZXR1cm57bm9kZXM6ZSxlZGdlczpyLG90aGVyOnt9LGNvbmZpZzpuLGRpcmVjdGlvbjoiVEIifX19fSk7dmFyIGFOPXt9O3VyKGFOLHtkcmF3OigpPT5aUGV9KTt2YXIgWlBlLHlzZT1OKCgpPT57InVzZSBzdHJpY3QiO0d0KCk7eXQoKTtTbSgpO3JwKCk7bnAoKTtlcigpO2ZyKCk7WlBlPW8oYXN5bmMgZnVuY3Rpb24odCxlLHIsbil7WC5pbmZvKCJSRUYwOiIpLFguaW5mbygiRHJhd2luZyBlciBkaWFncmFtICh1bmlmaWVkKSIsZSk7bGV0e3NlY3VyaXR5TGV2ZWw6aSxlcjphLGxheW91dDpzfT1tZSgpLGw9bi5kYi5nZXREYXRhKCksdT13YyhlLGkpO2wudHlwZT1uLnR5cGUsbC5sYXlvdXRBbGdvcml0aG09dWYocyksbC5jb25maWcuZmxvd2NoYXJ0Lm5vZGVTcGFjaW5nPWE/Lm5vZGVTcGFjaW5nfHwxNDAsbC5jb25maWcuZmxvd2NoYXJ0LnJhbmtTcGFjaW5nPWE/LnJhbmtTcGFjaW5nfHw4MCxsLmRpcmVjdGlvbj1uLmRiLmdldERpcmVjdGlvbigpLGwubWFya2Vycz1bIm9ubHlfb25lIiwiemVyb19vcl9vbmUiLCJvbmVfb3JfbW9yZSIsInplcm9fb3JfbW9yZSJdLGwuZGlhZ3JhbUlkPWUsYXdhaXQgUmMobCx1KSxsLmxheW91dEFsZ29yaXRobT09PSJlbGsiJiZ1LnNlbGVjdCgiLmVkZ2VzIikubG93ZXIoKTtsZXQgaD11LnNlbGVjdEFsbCgnW2lkKj0iLWJhY2tncm91bmQiXScpO0FycmF5LmZyb20oaCkubGVuZ3RoPjAmJmguZWFjaChmdW5jdGlvbigpe2xldCBkPUdlKHRoaXMpLG09ZC5hdHRyKCJpZCIpLnJlcGxhY2UoIi1iYWNrZ3JvdW5kIiwiIiksZz11LnNlbGVjdChgIyR7Q1NTLmVzY2FwZShtKX1gKTtpZighZy5lbXB0eSgpKXtsZXQgeT1nLmF0dHIoInRyYW5zZm9ybSIpO2QuYXR0cigidHJhbnNmb3JtIix5KX19KTtsZXQgZj04O1Z0Lmluc2VydFRpdGxlKHUsImVyRGlhZ3JhbVRpdGxlVGV4dCIsYT8udGl0bGVUb3BNYXJnaW4/PzI1LG4uZGIuZ2V0RGlhZ3JhbVRpdGxlKCkpLFlvKHUsZiwiZXJEaWFncmFtIixhPy51c2VNYXhXaWR0aD8/ITApfSwiZHJhdyIpfSk7dmFyIEpQZSxlQmUsdnNlLHhzZT1OKCgpPT57InVzZSBzdHJpY3QiO0tzKCk7SlBlPW8oKHQsZSk9PntsZXQgcj1pZCxuPXIodCwiciIpLGk9cih0LCJnIiksYT1yKHQsImIiKTtyZXR1cm4gUWEobixpLGEsZSl9LCJmYWRlIiksZUJlPW8odD0+YAogIC5lbnRpdHlCb3ggewogICAgZmlsbDogJHt0Lm1haW5Ca2d9OwogICAgc3Ryb2tlOiAke3Qubm9kZUJvcmRlcn07CiAgfQoKICAucmVsYXRpb25zaGlwTGFiZWxCb3ggewogICAgZmlsbDogJHt0LnRlcnRpYXJ5Q29sb3J9OwogICAgb3BhY2l0eTogMC43OwogICAgYmFja2dyb3VuZC1jb2xvcjogJHt0LnRlcnRpYXJ5Q29sb3J9OwogICAgICByZWN0IHsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIH0KICB9CgogIC5sYWJlbEJrZyB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke0pQZSh0LnRlcnRpYXJ5Q29sb3IsLjUpfTsKICB9CgogIC5lZGdlTGFiZWwgLmxhYmVsIHsKICAgIGZpbGw6ICR7dC5ub2RlQm9yZGVyfTsKICAgIGZvbnQtc2l6ZTogMTRweDsKICB9CgogIC5sYWJlbCB7CiAgICBmb250LWZhbWlseTogJHt0LmZvbnRGYW1pbHl9OwogICAgY29sb3I6ICR7dC5ub2RlVGV4dENvbG9yfHx0LnRleHRDb2xvcn07CiAgfQoKICAuZWRnZS1wYXR0ZXJuLWRhc2hlZCB7CiAgICBzdHJva2UtZGFzaGFycmF5OiA4LDg7CiAgfQoKICAubm9kZSByZWN0LAogIC5ub2RlIGNpcmNsZSwKICAubm9kZSBlbGxpcHNlLAogIC5ub2RlIHBvbHlnb24KICB7CiAgICBmaWxsOiAke3QubWFpbkJrZ307CiAgICBzdHJva2U6ICR7dC5ub2RlQm9yZGVyfTsKICAgIHN0cm9rZS13aWR0aDogMXB4OwogIH0KCiAgLnJlbGF0aW9uc2hpcExpbmUgewogICAgc3Ryb2tlOiAke3QubGluZUNvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogMTsKICAgIGZpbGw6IG5vbmU7CiAgfQoKICAubWFya2VyIHsKICAgIGZpbGw6IG5vbmUgIWltcG9ydGFudDsKICAgIHN0cm9rZTogJHt0LmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICAgIHN0cm9rZS13aWR0aDogMTsKICB9CmAsImdldFN0eWxlcyIpLHZzZT1lQmV9KTt2YXIgYnNlPXt9O3VyKGJzZSx7ZGlhZ3JhbTooKT0+dEJlfSk7dmFyIHRCZSxUc2U9TigoKT0+eyJ1c2Ugc3RyaWN0Ijttc2UoKTtnc2UoKTt5c2UoKTt4c2UoKTt0QmU9e3BhcnNlcjpwc2UsZ2V0IGRiKCl7cmV0dXJuIG5ldyBUa30scmVuZGVyZXI6YU4sc3R5bGVzOnZzZX19KTtmdW5jdGlvbiBzaSh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJvYmplY3QiJiZ0IT09bnVsbCYmdHlwZW9mIHQuJHR5cGU9PSJzdHJpbmcifWZ1bmN0aW9uIHlhKHQpe3JldHVybiB0eXBlb2YgdD09Im9iamVjdCImJnQhPT1udWxsJiZ0eXBlb2YgdC4kcmVmVGV4dD09InN0cmluZyJ9ZnVuY3Rpb24gc04odCl7cmV0dXJuIHR5cGVvZiB0PT0ib2JqZWN0IiYmdCE9PW51bGwmJnR5cGVvZiB0Lm5hbWU9PSJzdHJpbmciJiZ0eXBlb2YgdC50eXBlPT0ic3RyaW5nIiYmdHlwZW9mIHQucGF0aD09InN0cmluZyJ9ZnVuY3Rpb24gYXAodCl7cmV0dXJuIHR5cGVvZiB0PT0ib2JqZWN0IiYmdCE9PW51bGwmJnNpKHQuY29udGFpbmVyKSYmeWEodC5yZWZlcmVuY2UpJiZ0eXBlb2YgdC5tZXNzYWdlPT0ic3RyaW5nIn1mdW5jdGlvbiBNbCh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJvYmplY3QiJiZ0IT09bnVsbCYmQXJyYXkuaXNBcnJheSh0LmNvbnRlbnQpfWZ1bmN0aW9uIGhmKHQpe3JldHVybiB0eXBlb2YgdD09Im9iamVjdCImJnQhPT1udWxsJiZ0eXBlb2YgdC50b2tlblR5cGU9PSJvYmplY3QifWZ1bmN0aW9uIFUyKHQpe3JldHVybiBNbCh0KSYmdHlwZW9mIHQuZnVsbFRleHQ9PSJzdHJpbmcifXZhciBpcCxJbD1OKCgpPT57InVzZSBzdHJpY3QiO28oc2ksImlzQXN0Tm9kZSIpO28oeWEsImlzUmVmZXJlbmNlIik7byhzTiwiaXNBc3ROb2RlRGVzY3JpcHRpb24iKTtvKGFwLCJpc0xpbmtpbmdFcnJvciIpO2lwPWNsYXNze3N0YXRpY3tvKHRoaXMsIkFic3RyYWN0QXN0UmVmbGVjdGlvbiIpfWNvbnN0cnVjdG9yKCl7dGhpcy5zdWJ0eXBlcz17fSx0aGlzLmFsbFN1YnR5cGVzPXt9fWlzSW5zdGFuY2UoZSxyKXtyZXR1cm4gc2koZSkmJnRoaXMuaXNTdWJ0eXBlKGUuJHR5cGUscil9aXNTdWJ0eXBlKGUscil7aWYoZT09PXIpcmV0dXJuITA7bGV0IG49dGhpcy5zdWJ0eXBlc1tlXTtufHwobj10aGlzLnN1YnR5cGVzW2VdPXt9KTtsZXQgaT1uW3JdO2lmKGkhPT12b2lkIDApcmV0dXJuIGk7e2xldCBhPXRoaXMuY29tcHV0ZUlzU3VidHlwZShlLHIpO3JldHVybiBuW3JdPWEsYX19Z2V0QWxsU3ViVHlwZXMoZSl7bGV0IHI9dGhpcy5hbGxTdWJ0eXBlc1tlXTtpZihyKXJldHVybiByO3tsZXQgbj10aGlzLmdldEFsbFR5cGVzKCksaT1bXTtmb3IobGV0IGEgb2Ygbil0aGlzLmlzU3VidHlwZShhLGUpJiZpLnB1c2goYSk7cmV0dXJuIHRoaXMuYWxsU3VidHlwZXNbZV09aSxpfX19O28oTWwsImlzQ29tcG9zaXRlQ3N0Tm9kZSIpO28oaGYsImlzTGVhZkNzdE5vZGUiKTtvKFUyLCJpc1Jvb3RDc3ROb2RlIil9KTtmdW5jdGlvbiBhQmUodCl7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIj90OnR5cGVvZiB0PiJ1Ij8idW5kZWZpbmVkIjp0eXBlb2YgdC50b1N0cmluZz09ImZ1bmN0aW9uIj90LnRvU3RyaW5nKCk6T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIHdrKHQpe3JldHVybiEhdCYmdHlwZW9mIHRbU3ltYm9sLml0ZXJhdG9yXT09ImZ1bmN0aW9uIn1mdW5jdGlvbiBlbiguLi50KXtpZih0Lmxlbmd0aD09PTEpe2xldCBlPXRbMF07aWYoZSBpbnN0YW5jZW9mIGNvKXJldHVybiBlO2lmKHdrKGUpKXJldHVybiBuZXcgY28oKCk9PmVbU3ltYm9sLml0ZXJhdG9yXSgpLHI9PnIubmV4dCgpKTtpZih0eXBlb2YgZS5sZW5ndGg9PSJudW1iZXIiKXJldHVybiBuZXcgY28oKCk9Pih7aW5kZXg6MH0pLHI9PnIuaW5kZXg8ZS5sZW5ndGg/e2RvbmU6ITEsdmFsdWU6ZVtyLmluZGV4KytdfTpCYSl9cmV0dXJuIHQubGVuZ3RoPjE/bmV3IGNvKCgpPT4oe2NvbGxJbmRleDowLGFyckluZGV4OjB9KSxlPT57ZG97aWYoZS5pdGVyYXRvcil7bGV0IHI9ZS5pdGVyYXRvci5uZXh0KCk7aWYoIXIuZG9uZSlyZXR1cm4gcjtlLml0ZXJhdG9yPXZvaWQgMH1pZihlLmFycmF5KXtpZihlLmFyckluZGV4PGUuYXJyYXkubGVuZ3RoKXJldHVybntkb25lOiExLHZhbHVlOmUuYXJyYXlbZS5hcnJJbmRleCsrXX07ZS5hcnJheT12b2lkIDAsZS5hcnJJbmRleD0wfWlmKGUuY29sbEluZGV4PHQubGVuZ3RoKXtsZXQgcj10W2UuY29sbEluZGV4KytdO3drKHIpP2UuaXRlcmF0b3I9cltTeW1ib2wuaXRlcmF0b3JdKCk6ciYmdHlwZW9mIHIubGVuZ3RoPT0ibnVtYmVyIiYmKGUuYXJyYXk9cil9fXdoaWxlKGUuaXRlcmF0b3J8fGUuYXJyYXl8fGUuY29sbEluZGV4PHQubGVuZ3RoKTtyZXR1cm4gQmF9KTpIMn12YXIgY28sSDIsQmEsTWMsam0sR3M9TigoKT0+eyJ1c2Ugc3RyaWN0Ijtjbz1jbGFzcyB0e3N0YXRpY3tvKHRoaXMsIlN0cmVhbUltcGwiKX1jb25zdHJ1Y3RvcihlLHIpe3RoaXMuc3RhcnRGbj1lLHRoaXMubmV4dEZuPXJ9aXRlcmF0b3IoKXtsZXQgZT17c3RhdGU6dGhpcy5zdGFydEZuKCksbmV4dDpvKCgpPT50aGlzLm5leHRGbihlLnN0YXRlKSwibmV4dCIpLFtTeW1ib2wuaXRlcmF0b3JdOigpPT5lfTtyZXR1cm4gZX1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiB0aGlzLml0ZXJhdG9yKCl9aXNFbXB0eSgpe3JldHVybiEhdGhpcy5pdGVyYXRvcigpLm5leHQoKS5kb25lfWNvdW50KCl7bGV0IGU9dGhpcy5pdGVyYXRvcigpLHI9MCxuPWUubmV4dCgpO2Zvcig7IW4uZG9uZTspcisrLG49ZS5uZXh0KCk7cmV0dXJuIHJ9dG9BcnJheSgpe2xldCBlPVtdLHI9dGhpcy5pdGVyYXRvcigpLG47ZG8gbj1yLm5leHQoKSxuLnZhbHVlIT09dm9pZCAwJiZlLnB1c2gobi52YWx1ZSk7d2hpbGUoIW4uZG9uZSk7cmV0dXJuIGV9dG9TZXQoKXtyZXR1cm4gbmV3IFNldCh0aGlzKX10b01hcChlLHIpe2xldCBuPXRoaXMubWFwKGk9PltlP2UoaSk6aSxyP3IoaSk6aV0pO3JldHVybiBuZXcgTWFwKG4pfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuam9pbigpfWNvbmNhdChlKXtyZXR1cm4gbmV3IHQoKCk9Pih7Zmlyc3Q6dGhpcy5zdGFydEZuKCksZmlyc3REb25lOiExLGl0ZXJhdG9yOmVbU3ltYm9sLml0ZXJhdG9yXSgpfSkscj0+e2xldCBuO2lmKCFyLmZpcnN0RG9uZSl7ZG8gaWYobj10aGlzLm5leHRGbihyLmZpcnN0KSwhbi5kb25lKXJldHVybiBuO3doaWxlKCFuLmRvbmUpO3IuZmlyc3REb25lPSEwfWRvIGlmKG49ci5pdGVyYXRvci5uZXh0KCksIW4uZG9uZSlyZXR1cm4gbjt3aGlsZSghbi5kb25lKTtyZXR1cm4gQmF9KX1qb2luKGU9IiwiKXtsZXQgcj10aGlzLml0ZXJhdG9yKCksbj0iIixpLGE9ITE7ZG8gaT1yLm5leHQoKSxpLmRvbmV8fChhJiYobis9ZSksbis9YUJlKGkudmFsdWUpKSxhPSEwO3doaWxlKCFpLmRvbmUpO3JldHVybiBufWluZGV4T2YoZSxyPTApe2xldCBuPXRoaXMuaXRlcmF0b3IoKSxpPTAsYT1uLm5leHQoKTtmb3IoOyFhLmRvbmU7KXtpZihpPj1yJiZhLnZhbHVlPT09ZSlyZXR1cm4gaTthPW4ubmV4dCgpLGkrK31yZXR1cm4tMX1ldmVyeShlKXtsZXQgcj10aGlzLml0ZXJhdG9yKCksbj1yLm5leHQoKTtmb3IoOyFuLmRvbmU7KXtpZighZShuLnZhbHVlKSlyZXR1cm4hMTtuPXIubmV4dCgpfXJldHVybiEwfXNvbWUoZSl7bGV0IHI9dGhpcy5pdGVyYXRvcigpLG49ci5uZXh0KCk7Zm9yKDshbi5kb25lOyl7aWYoZShuLnZhbHVlKSlyZXR1cm4hMDtuPXIubmV4dCgpfXJldHVybiExfWZvckVhY2goZSl7bGV0IHI9dGhpcy5pdGVyYXRvcigpLG49MCxpPXIubmV4dCgpO2Zvcig7IWkuZG9uZTspZShpLnZhbHVlLG4pLGk9ci5uZXh0KCksbisrfW1hcChlKXtyZXR1cm4gbmV3IHQodGhpcy5zdGFydEZuLHI9PntsZXR7ZG9uZTpuLHZhbHVlOml9PXRoaXMubmV4dEZuKHIpO3JldHVybiBuP0JhOntkb25lOiExLHZhbHVlOmUoaSl9fSl9ZmlsdGVyKGUpe3JldHVybiBuZXcgdCh0aGlzLnN0YXJ0Rm4scj0+e2xldCBuO2RvIGlmKG49dGhpcy5uZXh0Rm4ociksIW4uZG9uZSYmZShuLnZhbHVlKSlyZXR1cm4gbjt3aGlsZSghbi5kb25lKTtyZXR1cm4gQmF9KX1ub25OdWxsYWJsZSgpe3JldHVybiB0aGlzLmZpbHRlcihlPT5lIT1udWxsKX1yZWR1Y2UoZSxyKXtsZXQgbj10aGlzLml0ZXJhdG9yKCksaT1yLGE9bi5uZXh0KCk7Zm9yKDshYS5kb25lOylpPT09dm9pZCAwP2k9YS52YWx1ZTppPWUoaSxhLnZhbHVlKSxhPW4ubmV4dCgpO3JldHVybiBpfXJlZHVjZVJpZ2h0KGUscil7cmV0dXJuIHRoaXMucmVjdXJzaXZlUmVkdWNlKHRoaXMuaXRlcmF0b3IoKSxlLHIpfXJlY3Vyc2l2ZVJlZHVjZShlLHIsbil7bGV0IGk9ZS5uZXh0KCk7aWYoaS5kb25lKXJldHVybiBuO2xldCBhPXRoaXMucmVjdXJzaXZlUmVkdWNlKGUscixuKTtyZXR1cm4gYT09PXZvaWQgMD9pLnZhbHVlOnIoYSxpLnZhbHVlKX1maW5kKGUpe2xldCByPXRoaXMuaXRlcmF0b3IoKSxuPXIubmV4dCgpO2Zvcig7IW4uZG9uZTspe2lmKGUobi52YWx1ZSkpcmV0dXJuIG4udmFsdWU7bj1yLm5leHQoKX19ZmluZEluZGV4KGUpe2xldCByPXRoaXMuaXRlcmF0b3IoKSxuPTAsaT1yLm5leHQoKTtmb3IoOyFpLmRvbmU7KXtpZihlKGkudmFsdWUpKXJldHVybiBuO2k9ci5uZXh0KCksbisrfXJldHVybi0xfWluY2x1ZGVzKGUpe2xldCByPXRoaXMuaXRlcmF0b3IoKSxuPXIubmV4dCgpO2Zvcig7IW4uZG9uZTspe2lmKG4udmFsdWU9PT1lKXJldHVybiEwO249ci5uZXh0KCl9cmV0dXJuITF9ZmxhdE1hcChlKXtyZXR1cm4gbmV3IHQoKCk9Pih7dGhpczp0aGlzLnN0YXJ0Rm4oKX0pLHI9Pntkb3tpZihyLml0ZXJhdG9yKXtsZXQgYT1yLml0ZXJhdG9yLm5leHQoKTtpZihhLmRvbmUpci5pdGVyYXRvcj12b2lkIDA7ZWxzZSByZXR1cm4gYX1sZXR7ZG9uZTpuLHZhbHVlOml9PXRoaXMubmV4dEZuKHIudGhpcyk7aWYoIW4pe2xldCBhPWUoaSk7aWYod2soYSkpci5pdGVyYXRvcj1hW1N5bWJvbC5pdGVyYXRvcl0oKTtlbHNlIHJldHVybntkb25lOiExLHZhbHVlOmF9fX13aGlsZShyLml0ZXJhdG9yKTtyZXR1cm4gQmF9KX1mbGF0KGUpe2lmKGU9PT12b2lkIDAmJihlPTEpLGU8PTApcmV0dXJuIHRoaXM7bGV0IHI9ZT4xP3RoaXMuZmxhdChlLTEpOnRoaXM7cmV0dXJuIG5ldyB0KCgpPT4oe3RoaXM6ci5zdGFydEZuKCl9KSxuPT57ZG97aWYobi5pdGVyYXRvcil7bGV0IHM9bi5pdGVyYXRvci5uZXh0KCk7aWYocy5kb25lKW4uaXRlcmF0b3I9dm9pZCAwO2Vsc2UgcmV0dXJuIHN9bGV0e2RvbmU6aSx2YWx1ZTphfT1yLm5leHRGbihuLnRoaXMpO2lmKCFpKWlmKHdrKGEpKW4uaXRlcmF0b3I9YVtTeW1ib2wuaXRlcmF0b3JdKCk7ZWxzZSByZXR1cm57ZG9uZTohMSx2YWx1ZTphfX13aGlsZShuLml0ZXJhdG9yKTtyZXR1cm4gQmF9KX1oZWFkKCl7bGV0IHI9dGhpcy5pdGVyYXRvcigpLm5leHQoKTtpZighci5kb25lKXJldHVybiByLnZhbHVlfXRhaWwoZT0xKXtyZXR1cm4gbmV3IHQoKCk9PntsZXQgcj10aGlzLnN0YXJ0Rm4oKTtmb3IobGV0IG49MDtuPGU7bisrKWlmKHRoaXMubmV4dEZuKHIpLmRvbmUpcmV0dXJuIHI7cmV0dXJuIHJ9LHRoaXMubmV4dEZuKX1saW1pdChlKXtyZXR1cm4gbmV3IHQoKCk9Pih7c2l6ZTowLHN0YXRlOnRoaXMuc3RhcnRGbigpfSkscj0+KHIuc2l6ZSsrLHIuc2l6ZT5lP0JhOnRoaXMubmV4dEZuKHIuc3RhdGUpKSl9ZGlzdGluY3QoZSl7cmV0dXJuIG5ldyB0KCgpPT4oe3NldDpuZXcgU2V0LGludGVybmFsU3RhdGU6dGhpcy5zdGFydEZuKCl9KSxyPT57bGV0IG47ZG8gaWYobj10aGlzLm5leHRGbihyLmludGVybmFsU3RhdGUpLCFuLmRvbmUpe2xldCBpPWU/ZShuLnZhbHVlKTpuLnZhbHVlO2lmKCFyLnNldC5oYXMoaSkpcmV0dXJuIHIuc2V0LmFkZChpKSxufXdoaWxlKCFuLmRvbmUpO3JldHVybiBCYX0pfWV4Y2x1ZGUoZSxyKXtsZXQgbj1uZXcgU2V0O2ZvcihsZXQgaSBvZiBlKXtsZXQgYT1yP3IoaSk6aTtuLmFkZChhKX1yZXR1cm4gdGhpcy5maWx0ZXIoaT0+e2xldCBhPXI/cihpKTppO3JldHVybiFuLmhhcyhhKX0pfX07byhhQmUsInRvU3RyaW5nIik7byh3aywiaXNJdGVyYWJsZSIpO0gyPW5ldyBjbygoKT0+e30sKCk9PkJhKSxCYT1PYmplY3QuZnJlZXplKHtkb25lOiEwLHZhbHVlOnZvaWQgMH0pO28oZW4sInN0cmVhbSIpO01jPWNsYXNzIGV4dGVuZHMgY297c3RhdGlje28odGhpcywiVHJlZVN0cmVhbUltcGwiKX1jb25zdHJ1Y3RvcihlLHIsbil7c3VwZXIoKCk9Pih7aXRlcmF0b3JzOm4/LmluY2x1ZGVSb290P1tbZV1bU3ltYm9sLml0ZXJhdG9yXSgpXTpbcihlKVtTeW1ib2wuaXRlcmF0b3JdKCldLHBydW5lZDohMX0pLGk9Pntmb3IoaS5wcnVuZWQmJihpLml0ZXJhdG9ycy5wb3AoKSxpLnBydW5lZD0hMSk7aS5pdGVyYXRvcnMubGVuZ3RoPjA7KXtsZXQgcz1pLml0ZXJhdG9yc1tpLml0ZXJhdG9ycy5sZW5ndGgtMV0ubmV4dCgpO2lmKHMuZG9uZSlpLml0ZXJhdG9ycy5wb3AoKTtlbHNlIHJldHVybiBpLml0ZXJhdG9ycy5wdXNoKHIocy52YWx1ZSlbU3ltYm9sLml0ZXJhdG9yXSgpKSxzfXJldHVybiBCYX0pfWl0ZXJhdG9yKCl7bGV0IGU9e3N0YXRlOnRoaXMuc3RhcnRGbigpLG5leHQ6bygoKT0+dGhpcy5uZXh0Rm4oZS5zdGF0ZSksIm5leHQiKSxwcnVuZTpvKCgpPT57ZS5zdGF0ZS5wcnVuZWQ9ITB9LCJwcnVuZSIpLFtTeW1ib2wuaXRlcmF0b3JdOigpPT5lfTtyZXR1cm4gZX19OyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGEpe3JldHVybiBhLnJlZHVjZSgocyxsKT0+cytsLDApfW8oZSwic3VtIiksdC5zdW09ZTtmdW5jdGlvbiByKGEpe3JldHVybiBhLnJlZHVjZSgocyxsKT0+cypsLDApfW8ociwicHJvZHVjdCIpLHQucHJvZHVjdD1yO2Z1bmN0aW9uIG4oYSl7cmV0dXJuIGEucmVkdWNlKChzLGwpPT5NYXRoLm1pbihzLGwpKX1vKG4sIm1pbiIpLHQubWluPW47ZnVuY3Rpb24gaShhKXtyZXR1cm4gYS5yZWR1Y2UoKHMsbCk9Pk1hdGgubWF4KHMsbCkpfW8oaSwibWF4IiksdC5tYXg9aX0pKGptfHwoam09e30pKX0pO3ZhciBFaz17fTt1cihFayx7RGVmYXVsdE5hbWVSZWdleHA6KCk9PmtrLFJhbmdlQ29tcGFyaXNvbjooKT0+SWMsY29tcGFyZVJhbmdlOigpPT5Tc2UsZmluZENvbW1lbnROb2RlOigpPT51TixmaW5kRGVjbGFyYXRpb25Ob2RlQXRPZmZzZXQ6KCk9Pm9CZSxmaW5kTGVhZk5vZGVBdE9mZnNldDooKT0+aE4sZmluZExlYWZOb2RlQmVmb3JlT2Zmc2V0OigpPT5Dc2UsZmxhdHRlbkNzdDooKT0+c0JlLGdldEludGVyaW9yTm9kZXM6KCk9PnVCZSxnZXROZXh0Tm9kZTooKT0+bEJlLGdldFByZXZpb3VzTm9kZTooKT0+X3NlLGdldFN0YXJ0bGluZU5vZGU6KCk9PmNCZSxpblJhbmdlOigpPT5jTixpc0NoaWxkTm9kZTooKT0+bE4saXNDb21tZW50Tm9kZTooKT0+b04sc3RyZWFtQ3N0OigpPT5zcCx0b0RvY3VtZW50U2VnbWVudDooKT0+b3AsdG9rZW5Ub1JhbmdlOigpPT5LbX0pO2Z1bmN0aW9uIHNwKHQpe3JldHVybiBuZXcgTWModCxlPT5NbChlKT9lLmNvbnRlbnQ6W10se2luY2x1ZGVSb290OiEwfSl9ZnVuY3Rpb24gc0JlKHQpe3JldHVybiBzcCh0KS5maWx0ZXIoaGYpfWZ1bmN0aW9uIGxOKHQsZSl7Zm9yKDt0LmNvbnRhaW5lcjspaWYodD10LmNvbnRhaW5lcix0PT09ZSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBLbSh0KXtyZXR1cm57c3RhcnQ6e2NoYXJhY3Rlcjp0LnN0YXJ0Q29sdW1uLTEsbGluZTp0LnN0YXJ0TGluZS0xfSxlbmQ6e2NoYXJhY3Rlcjp0LmVuZENvbHVtbixsaW5lOnQuZW5kTGluZS0xfX19ZnVuY3Rpb24gb3AodCl7aWYoIXQpcmV0dXJuO2xldHtvZmZzZXQ6ZSxlbmQ6cixyYW5nZTpufT10O3JldHVybntyYW5nZTpuLG9mZnNldDplLGVuZDpyLGxlbmd0aDpyLWV9fWZ1bmN0aW9uIFNzZSh0LGUpe2lmKHQuZW5kLmxpbmU8ZS5zdGFydC5saW5lfHx0LmVuZC5saW5lPT09ZS5zdGFydC5saW5lJiZ0LmVuZC5jaGFyYWN0ZXI8PWUuc3RhcnQuY2hhcmFjdGVyKXJldHVybiBJYy5CZWZvcmU7aWYodC5zdGFydC5saW5lPmUuZW5kLmxpbmV8fHQuc3RhcnQubGluZT09PWUuZW5kLmxpbmUmJnQuc3RhcnQuY2hhcmFjdGVyPj1lLmVuZC5jaGFyYWN0ZXIpcmV0dXJuIEljLkFmdGVyO2xldCByPXQuc3RhcnQubGluZT5lLnN0YXJ0LmxpbmV8fHQuc3RhcnQubGluZT09PWUuc3RhcnQubGluZSYmdC5zdGFydC5jaGFyYWN0ZXI+PWUuc3RhcnQuY2hhcmFjdGVyLG49dC5lbmQubGluZTxlLmVuZC5saW5lfHx0LmVuZC5saW5lPT09ZS5lbmQubGluZSYmdC5lbmQuY2hhcmFjdGVyPD1lLmVuZC5jaGFyYWN0ZXI7cmV0dXJuIHImJm4/SWMuSW5zaWRlOnI/SWMuT3ZlcmxhcEJhY2s6bj9JYy5PdmVybGFwRnJvbnQ6SWMuT3V0c2lkZX1mdW5jdGlvbiBjTih0LGUpe3JldHVybiBTc2UodCxlKT5JYy5BZnRlcn1mdW5jdGlvbiBvQmUodCxlLHI9a2spe2lmKHQpe2lmKGU+MCl7bGV0IG49ZS10Lm9mZnNldCxpPXQudGV4dC5jaGFyQXQobik7ci50ZXN0KGkpfHxlLS19cmV0dXJuIGhOKHQsZSl9fWZ1bmN0aW9uIHVOKHQsZSl7aWYodCl7bGV0IHI9X3NlKHQsITApO2lmKHImJm9OKHIsZSkpcmV0dXJuIHI7aWYoVTIodCkpe2xldCBuPXQuY29udGVudC5maW5kSW5kZXgoaT0+IWkuaGlkZGVuKTtmb3IobGV0IGk9bi0xO2k+PTA7aS0tKXtsZXQgYT10LmNvbnRlbnRbaV07aWYob04oYSxlKSlyZXR1cm4gYX19fX1mdW5jdGlvbiBvTih0LGUpe3JldHVybiBoZih0KSYmZS5pbmNsdWRlcyh0LnRva2VuVHlwZS5uYW1lKX1mdW5jdGlvbiBoTih0LGUpe2lmKGhmKHQpKXJldHVybiB0O2lmKE1sKHQpKXtsZXQgcj1Bc2UodCxlLCExKTtpZihyKXJldHVybiBoTihyLGUpfX1mdW5jdGlvbiBDc2UodCxlKXtpZihoZih0KSlyZXR1cm4gdDtpZihNbCh0KSl7bGV0IHI9QXNlKHQsZSwhMCk7aWYocilyZXR1cm4gQ3NlKHIsZSl9fWZ1bmN0aW9uIEFzZSh0LGUscil7bGV0IG49MCxpPXQuY29udGVudC5sZW5ndGgtMSxhO2Zvcig7bjw9aTspe2xldCBzPU1hdGguZmxvb3IoKG4raSkvMiksbD10LmNvbnRlbnRbc107aWYobC5vZmZzZXQ8PWUmJmwuZW5kPmUpcmV0dXJuIGw7bC5lbmQ8PWU/KGE9cj9sOnZvaWQgMCxuPXMrMSk6aT1zLTF9cmV0dXJuIGF9ZnVuY3Rpb24gX3NlKHQsZT0hMCl7Zm9yKDt0LmNvbnRhaW5lcjspe2xldCByPXQuY29udGFpbmVyLG49ci5jb250ZW50LmluZGV4T2YodCk7Zm9yKDtuPjA7KXtuLS07bGV0IGk9ci5jb250ZW50W25dO2lmKGV8fCFpLmhpZGRlbilyZXR1cm4gaX10PXJ9fWZ1bmN0aW9uIGxCZSh0LGU9ITApe2Zvcig7dC5jb250YWluZXI7KXtsZXQgcj10LmNvbnRhaW5lcixuPXIuY29udGVudC5pbmRleE9mKHQpLGk9ci5jb250ZW50Lmxlbmd0aC0xO2Zvcig7bjxpOyl7bisrO2xldCBhPXIuY29udGVudFtuXTtpZihlfHwhYS5oaWRkZW4pcmV0dXJuIGF9dD1yfX1mdW5jdGlvbiBjQmUodCl7aWYodC5yYW5nZS5zdGFydC5jaGFyYWN0ZXI9PT0wKXJldHVybiB0O2xldCBlPXQucmFuZ2Uuc3RhcnQubGluZSxyPXQsbjtmb3IoO3QuY29udGFpbmVyOyl7bGV0IGk9dC5jb250YWluZXIsYT1uPz9pLmNvbnRlbnQuaW5kZXhPZih0KTtpZihhPT09MD8odD1pLG49dm9pZCAwKToobj1hLTEsdD1pLmNvbnRlbnRbbl0pLHQucmFuZ2Uuc3RhcnQubGluZSE9PWUpYnJlYWs7cj10fXJldHVybiByfWZ1bmN0aW9uIHVCZSh0LGUpe2xldCByPWhCZSh0LGUpO3JldHVybiByP3IucGFyZW50LmNvbnRlbnQuc2xpY2Uoci5hKzEsci5iKTpbXX1mdW5jdGlvbiBoQmUodCxlKXtsZXQgcj1Fc2UodCksbj1Fc2UoZSksaTtmb3IobGV0IGE9MDthPHIubGVuZ3RoJiZhPG4ubGVuZ3RoO2ErKyl7bGV0IHM9clthXSxsPW5bYV07aWYocy5wYXJlbnQ9PT1sLnBhcmVudClpPXtwYXJlbnQ6cy5wYXJlbnQsYTpzLmluZGV4LGI6bC5pbmRleH07ZWxzZSBicmVha31yZXR1cm4gaX1mdW5jdGlvbiBFc2UodCl7bGV0IGU9W107Zm9yKDt0LmNvbnRhaW5lcjspe2xldCByPXQuY29udGFpbmVyLG49ci5jb250ZW50LmluZGV4T2YodCk7ZS5wdXNoKHtwYXJlbnQ6cixpbmRleDpufSksdD1yfXJldHVybiBlLnJldmVyc2UoKX12YXIgSWMsa2ssT2w9TigoKT0+eyJ1c2Ugc3RyaWN0IjtJbCgpO0dzKCk7byhzcCwic3RyZWFtQ3N0Iik7byhzQmUsImZsYXR0ZW5Dc3QiKTtvKGxOLCJpc0NoaWxkTm9kZSIpO28oS20sInRva2VuVG9SYW5nZSIpO28ob3AsInRvRG9jdW1lbnRTZWdtZW50Iik7KGZ1bmN0aW9uKHQpe3RbdC5CZWZvcmU9MF09IkJlZm9yZSIsdFt0LkFmdGVyPTFdPSJBZnRlciIsdFt0Lk92ZXJsYXBGcm9udD0yXT0iT3ZlcmxhcEZyb250Iix0W3QuT3ZlcmxhcEJhY2s9M109Ik92ZXJsYXBCYWNrIix0W3QuSW5zaWRlPTRdPSJJbnNpZGUiLHRbdC5PdXRzaWRlPTVdPSJPdXRzaWRlIn0pKEljfHwoSWM9e30pKTtvKFNzZSwiY29tcGFyZVJhbmdlIik7byhjTiwiaW5SYW5nZSIpO2trPS9eW1x3XHB7TH1dJC91O28ob0JlLCJmaW5kRGVjbGFyYXRpb25Ob2RlQXRPZmZzZXQiKTtvKHVOLCJmaW5kQ29tbWVudE5vZGUiKTtvKG9OLCJpc0NvbW1lbnROb2RlIik7byhoTiwiZmluZExlYWZOb2RlQXRPZmZzZXQiKTtvKENzZSwiZmluZExlYWZOb2RlQmVmb3JlT2Zmc2V0Iik7byhBc2UsImJpbmFyeVNlYXJjaCIpO28oX3NlLCJnZXRQcmV2aW91c05vZGUiKTtvKGxCZSwiZ2V0TmV4dE5vZGUiKTtvKGNCZSwiZ2V0U3RhcnRsaW5lTm9kZSIpO28odUJlLCJnZXRJbnRlcmlvck5vZGVzIik7byhoQmUsImdldENvbW1vblBhcmVudCIpO28oRXNlLCJnZXRQYXJlbnRDaGFpbiIpfSk7ZnVuY3Rpb24gT2ModCl7dGhyb3cgbmV3IEVycm9yKCJFcnJvciEgVGhlIGlucHV0IHZhbHVlIHdhcyBub3QgaGFuZGxlZC4iKX12YXIgbHAsU2s9TigoKT0+eyJ1c2Ugc3RyaWN0IjtscD1jbGFzcyBleHRlbmRzIEVycm9ye3N0YXRpY3tvKHRoaXMsIkVycm9yV2l0aExvY2F0aW9uIil9Y29uc3RydWN0b3IoZSxyKXtzdXBlcihlP2Ake3J9IGF0ICR7ZS5yYW5nZS5zdGFydC5saW5lfToke2UucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyfWA6cil9fTtvKE9jLCJhc3NlcnRVbnJlYWNoYWJsZSIpfSk7dmFyIEoyPXt9O3VyKEoyLHtBYnN0cmFjdEVsZW1lbnQ6KCk9PkptLEFic3RyYWN0UnVsZTooKT0+UW0sQWJzdHJhY3RUeXBlOigpPT5abSxBY3Rpb246KCk9PnZnLEFsdGVybmF0aXZlczooKT0+eGcsQXJyYXlMaXRlcmFsOigpPT5lZyxBcnJheVR5cGU6KCk9PnRnLEFzc2lnbm1lbnQ6KCk9PmJnLEJvb2xlYW5MaXRlcmFsOigpPT5yZyxDaGFyYWN0ZXJSYW5nZTooKT0+VGcsQ29uZGl0aW9uOigpPT5XMixDb25qdW5jdGlvbjooKT0+bmcsQ3Jvc3NSZWZlcmVuY2U6KCk9PndnLERpc2p1bmN0aW9uOigpPT5pZyxFbmRPZkZpbGU6KCk9PmtnLEdyYW1tYXI6KCk9PmFnLEdyYW1tYXJJbXBvcnQ6KCk9PlkyLEdyb3VwOigpPT5FZyxJbmZlcnJlZFR5cGU6KCk9PnNnLEludGVyZmFjZTooKT0+b2csS2V5d29yZDooKT0+U2csTGFuZ2l1bUdyYW1tYXJBc3RSZWZsZWN0aW9uOigpPT5PZyxMYW5naXVtR3JhbW1hclRlcm1pbmFsczooKT0+ZkJlLE5hbWVkQXJndW1lbnQ6KCk9PlgyLE5lZ2F0ZWRUb2tlbjooKT0+Q2csTmVnYXRpb246KCk9PmxnLE51bWJlckxpdGVyYWw6KCk9PmNnLFBhcmFtZXRlcjooKT0+dWcsUGFyYW1ldGVyUmVmZXJlbmNlOigpPT5oZyxQYXJzZXJSdWxlOigpPT5mZyxSZWZlcmVuY2VUeXBlOigpPT5kZyxSZWdleFRva2VuOigpPT5BZyxSZXR1cm5UeXBlOigpPT5qMixSdWxlQ2FsbDooKT0+X2csU2ltcGxlVHlwZTooKT0+cGcsU3RyaW5nTGl0ZXJhbDooKT0+bWcsVGVybWluYWxBbHRlcm5hdGl2ZXM6KCk9PkRnLFRlcm1pbmFsR3JvdXA6KCk9PkxnLFRlcm1pbmFsUnVsZTooKT0+Y3AsVGVybWluYWxSdWxlQ2FsbDooKT0+UmcsVHlwZTooKT0+Z2csVHlwZUF0dHJpYnV0ZTooKT0+SzIsVHlwZURlZmluaXRpb246KCk9PkNrLFVuaW9uVHlwZTooKT0+eWcsVW5vcmRlcmVkR3JvdXA6KCk9Pk5nLFVudGlsVG9rZW46KCk9Pk1nLFZhbHVlTGl0ZXJhbDooKT0+cTIsV2lsZGNhcmQ6KCk9PklnLGlzQWJzdHJhY3RFbGVtZW50OigpPT5RMixpc0Fic3RyYWN0UnVsZTooKT0+ZEJlLGlzQWJzdHJhY3RUeXBlOigpPT5wQmUsaXNBY3Rpb246KCk9PiR1LGlzQWx0ZXJuYXRpdmVzOigpPT5Mayxpc0FycmF5TGl0ZXJhbDooKT0+eEJlLGlzQXJyYXlUeXBlOigpPT5mTixpc0Fzc2lnbm1lbnQ6KCk9PlBsLGlzQm9vbGVhbkxpdGVyYWw6KCk9PmROLGlzQ2hhcmFjdGVyUmFuZ2U6KCk9PlROLGlzQ29uZGl0aW9uOigpPT5tQmUsaXNDb25qdW5jdGlvbjooKT0+cE4saXNDcm9zc1JlZmVyZW5jZTooKT0+dXAsaXNEaXNqdW5jdGlvbjooKT0+bU4saXNFbmRPZkZpbGU6KCk9PndOLGlzRmVhdHVyZU5hbWU6KCk9PmdCZSxpc0dyYW1tYXI6KCk9PmJCZSxpc0dyYW1tYXJJbXBvcnQ6KCk9PlRCZSxpc0dyb3VwOigpPT5mZixpc0luZmVycmVkVHlwZTooKT0+QWssaXNJbnRlcmZhY2U6KCk9Pl9rLGlzS2V5d29yZDooKT0+WG8saXNOYW1lZEFyZ3VtZW50OigpPT53QmUsaXNOZWdhdGVkVG9rZW46KCk9PmtOLGlzTmVnYXRpb246KCk9PmdOLGlzTnVtYmVyTGl0ZXJhbDooKT0+a0JlLGlzUGFyYW1ldGVyOigpPT5FQmUsaXNQYXJhbWV0ZXJSZWZlcmVuY2U6KCk9PnlOLGlzUGFyc2VyUnVsZTooKT0+RmEsaXNQcmltaXRpdmVUeXBlOigpPT5Ec2UsaXNSZWZlcmVuY2VUeXBlOigpPT52Tixpc1JlZ2V4VG9rZW46KCk9PkVOLGlzUmV0dXJuVHlwZTooKT0+eE4saXNSdWxlQ2FsbDooKT0+QmwsaXNTaW1wbGVUeXBlOigpPT5Eayxpc1N0cmluZ0xpdGVyYWw6KCk9PlNCZSxpc1Rlcm1pbmFsQWx0ZXJuYXRpdmVzOigpPT5TTixpc1Rlcm1pbmFsR3JvdXA6KCk9PkNOLGlzVGVybWluYWxSdWxlOigpPT51byxpc1Rlcm1pbmFsUnVsZUNhbGw6KCk9PlJrLGlzVHlwZTooKT0+WjIsaXNUeXBlQXR0cmlidXRlOigpPT5DQmUsaXNUeXBlRGVmaW5pdGlvbjooKT0+eUJlLGlzVW5pb25UeXBlOigpPT5iTixpc1Vub3JkZXJlZEdyb3VwOigpPT5Oayxpc1VudGlsVG9rZW46KCk9PkFOLGlzVmFsdWVMaXRlcmFsOigpPT52QmUsaXNXaWxkY2FyZDooKT0+X04scmVmbGVjdGlvbjooKT0+Y3J9KTtmdW5jdGlvbiBkQmUodCl7cmV0dXJuIGNyLmlzSW5zdGFuY2UodCxRbSl9ZnVuY3Rpb24gcEJlKHQpe3JldHVybiBjci5pc0luc3RhbmNlKHQsWm0pfWZ1bmN0aW9uIG1CZSh0KXtyZXR1cm4gY3IuaXNJbnN0YW5jZSh0LFcyKX1mdW5jdGlvbiBnQmUodCl7cmV0dXJuIERzZSh0KXx8dD09PSJjdXJyZW50Inx8dD09PSJlbnRyeSJ8fHQ9PT0iZXh0ZW5kcyJ8fHQ9PT0iZmFsc2UifHx0PT09ImZyYWdtZW50Inx8dD09PSJncmFtbWFyInx8dD09PSJoaWRkZW4ifHx0PT09ImltcG9ydCJ8fHQ9PT0iaW50ZXJmYWNlInx8dD09PSJyZXR1cm5zInx8dD09PSJ0ZXJtaW5hbCJ8fHQ9PT0idHJ1ZSJ8fHQ9PT0idHlwZSJ8fHQ9PT0iaW5mZXIifHx0PT09ImluZmVycyJ8fHQ9PT0id2l0aCJ8fHR5cGVvZiB0PT0ic3RyaW5nIiYmL1xeP1tfYS16QS1aXVtcd19dKi8udGVzdCh0KX1mdW5jdGlvbiBEc2UodCl7cmV0dXJuIHQ9PT0ic3RyaW5nInx8dD09PSJudW1iZXIifHx0PT09ImJvb2xlYW4ifHx0PT09IkRhdGUifHx0PT09ImJpZ2ludCJ9ZnVuY3Rpb24geUJlKHQpe3JldHVybiBjci5pc0luc3RhbmNlKHQsQ2spfWZ1bmN0aW9uIHZCZSh0KXtyZXR1cm4gY3IuaXNJbnN0YW5jZSh0LHEyKX1mdW5jdGlvbiBRMih0KXtyZXR1cm4gY3IuaXNJbnN0YW5jZSh0LEptKX1mdW5jdGlvbiB4QmUodCl7cmV0dXJuIGNyLmlzSW5zdGFuY2UodCxlZyl9ZnVuY3Rpb24gZk4odCl7cmV0dXJuIGNyLmlzSW5zdGFuY2UodCx0Zyl9ZnVuY3Rpb24gZE4odCl7cmV0dXJuIGNyLmlzSW5zdGFuY2UodCxyZyl9ZnVuY3Rpb24gcE4odCl7cmV0dXJuIGNyLmlzSW5zdGFuY2UodCxuZyl9ZnVuY3Rpb24gbU4odCl7cmV0dXJuIGNyLmlzSW5zdGFuY2UodCxpZyl9ZnVuY3Rpb24gYkJlKHQpe3JldHVybiBjci5pc0luc3RhbmNlKHQsYWcpfWZ1bmN0aW9uIFRCZSh0KXtyZXR1cm4gY3IuaXNJbnN0YW5jZSh0LFkyKX1mdW5jdGlvbiBBayh0KXtyZXR1cm4gY3IuaXNJbnN0YW5jZSh0LHNnKX1mdW5jdGlvbiBfayh0KXtyZXR1cm4gY3IuaXNJbnN0YW5jZSh0LG9nKX1mdW5jdGlvbiB3QmUodCl7cmV0dXJuIGNyLmlzSW5zdGFuY2UodCxYMil9ZnVuY3Rpb24gZ04odCl7cmV0dXJuIGNyLmlzSW5zdGFuY2UodCxsZyl9ZnVuY3Rpb24ga0JlKHQpe3JldHVybiBjci5pc0luc3RhbmNlKHQsY2cpfWZ1bmN0aW9uIEVCZSh0KXtyZXR1cm4gY3IuaXNJbnN0YW5jZSh0LHVnKX1mdW5jdGlvbiB5Tih0KXtyZXR1cm4gY3IuaXNJbnN0YW5jZSh0LGhnKX1mdW5jdGlvbiBGYSh0KXtyZXR1cm4gY3IuaXNJbnN0YW5jZSh0LGZnKX1mdW5jdGlvbiB2Tih0KXtyZXR1cm4gY3IuaXNJbnN0YW5jZSh0LGRnKX1mdW5jdGlvbiB4Tih0KXtyZXR1cm4gY3IuaXNJbnN0YW5jZSh0LGoyKX1mdW5jdGlvbiBEayh0KXtyZXR1cm4gY3IuaXNJbnN0YW5jZSh0LHBnKX1mdW5jdGlvbiBTQmUodCl7cmV0dXJuIGNyLmlzSW5zdGFuY2UodCxtZyl9ZnVuY3Rpb24gdW8odCl7cmV0dXJuIGNyLmlzSW5zdGFuY2UodCxjcCl9ZnVuY3Rpb24gWjIodCl7cmV0dXJuIGNyLmlzSW5zdGFuY2UodCxnZyl9ZnVuY3Rpb24gQ0JlKHQpe3JldHVybiBjci5pc0luc3RhbmNlKHQsSzIpfWZ1bmN0aW9uIGJOKHQpe3JldHVybiBjci5pc0luc3RhbmNlKHQseWcpfWZ1bmN0aW9uICR1KHQpe3JldHVybiBjci5pc0luc3RhbmNlKHQsdmcpfWZ1bmN0aW9uIExrKHQpe3JldHVybiBjci5pc0luc3RhbmNlKHQseGcpfWZ1bmN0aW9uIFBsKHQpe3JldHVybiBjci5pc0luc3RhbmNlKHQsYmcpfWZ1bmN0aW9uIFROKHQpe3JldHVybiBjci5pc0luc3RhbmNlKHQsVGcpfWZ1bmN0aW9uIHVwKHQpe3JldHVybiBjci5pc0luc3RhbmNlKHQsd2cpfWZ1bmN0aW9uIHdOKHQpe3JldHVybiBjci5pc0luc3RhbmNlKHQsa2cpfWZ1bmN0aW9uIGZmKHQpe3JldHVybiBjci5pc0luc3RhbmNlKHQsRWcpfWZ1bmN0aW9uIFhvKHQpe3JldHVybiBjci5pc0luc3RhbmNlKHQsU2cpfWZ1bmN0aW9uIGtOKHQpe3JldHVybiBjci5pc0luc3RhbmNlKHQsQ2cpfWZ1bmN0aW9uIEVOKHQpe3JldHVybiBjci5pc0luc3RhbmNlKHQsQWcpfWZ1bmN0aW9uIEJsKHQpe3JldHVybiBjci5pc0luc3RhbmNlKHQsX2cpfWZ1bmN0aW9uIFNOKHQpe3JldHVybiBjci5pc0luc3RhbmNlKHQsRGcpfWZ1bmN0aW9uIENOKHQpe3JldHVybiBjci5pc0luc3RhbmNlKHQsTGcpfWZ1bmN0aW9uIFJrKHQpe3JldHVybiBjci5pc0luc3RhbmNlKHQsUmcpfWZ1bmN0aW9uIE5rKHQpe3JldHVybiBjci5pc0luc3RhbmNlKHQsTmcpfWZ1bmN0aW9uIEFOKHQpe3JldHVybiBjci5pc0luc3RhbmNlKHQsTWcpfWZ1bmN0aW9uIF9OKHQpe3JldHVybiBjci5pc0luc3RhbmNlKHQsSWcpfXZhciBmQmUsUW0sWm0sVzIsQ2sscTIsSm0sZWcsdGcscmcsbmcsaWcsYWcsWTIsc2csb2csWDIsbGcsY2csdWcsaGcsZmcsZGcsajIscGcsbWcsY3AsZ2csSzIseWcsdmcseGcsYmcsVGcsd2csa2csRWcsU2csQ2csQWcsX2csRGcsTGcsUmcsTmcsTWcsSWcsT2csY3IsUGM9TigoKT0+eyJ1c2Ugc3RyaWN0IjtJbCgpO2ZCZT17SUQ6L1xeP1tfYS16QS1aXVtcd19dKi8sU1RSSU5HOi8iKFxcLnxbXiJcXF0pKiJ8JyhcXC58W14nXFxdKSonLyxOVU1CRVI6L05hTnwtPygoXGQqXC5cZCt8XGQrKShbRWVdWystXT9cZCspP3xJbmZpbml0eSkvLFJlZ2V4TGl0ZXJhbDovXC8oPyFbKis/XSkoPzpbXlxyXG5cWy9cXF18XFwufFxbKD86W15cclxuXF1cXF18XFwuKSpcXSkrXC9bYS16XSovLFdTOi9ccysvLE1MX0NPTU1FTlQ6L1wvXCpbXHNcU10qP1wqXC8vLFNMX0NPTU1FTlQ6L1wvXC9bXlxuXHJdKi99LFFtPSJBYnN0cmFjdFJ1bGUiO28oZEJlLCJpc0Fic3RyYWN0UnVsZSIpO1ptPSJBYnN0cmFjdFR5cGUiO28ocEJlLCJpc0Fic3RyYWN0VHlwZSIpO1cyPSJDb25kaXRpb24iO28obUJlLCJpc0NvbmRpdGlvbiIpO28oZ0JlLCJpc0ZlYXR1cmVOYW1lIik7byhEc2UsImlzUHJpbWl0aXZlVHlwZSIpO0NrPSJUeXBlRGVmaW5pdGlvbiI7byh5QmUsImlzVHlwZURlZmluaXRpb24iKTtxMj0iVmFsdWVMaXRlcmFsIjtvKHZCZSwiaXNWYWx1ZUxpdGVyYWwiKTtKbT0iQWJzdHJhY3RFbGVtZW50IjtvKFEyLCJpc0Fic3RyYWN0RWxlbWVudCIpO2VnPSJBcnJheUxpdGVyYWwiO28oeEJlLCJpc0FycmF5TGl0ZXJhbCIpO3RnPSJBcnJheVR5cGUiO28oZk4sImlzQXJyYXlUeXBlIik7cmc9IkJvb2xlYW5MaXRlcmFsIjtvKGROLCJpc0Jvb2xlYW5MaXRlcmFsIik7bmc9IkNvbmp1bmN0aW9uIjtvKHBOLCJpc0Nvbmp1bmN0aW9uIik7aWc9IkRpc2p1bmN0aW9uIjtvKG1OLCJpc0Rpc2p1bmN0aW9uIik7YWc9IkdyYW1tYXIiO28oYkJlLCJpc0dyYW1tYXIiKTtZMj0iR3JhbW1hckltcG9ydCI7byhUQmUsImlzR3JhbW1hckltcG9ydCIpO3NnPSJJbmZlcnJlZFR5cGUiO28oQWssImlzSW5mZXJyZWRUeXBlIik7b2c9IkludGVyZmFjZSI7byhfaywiaXNJbnRlcmZhY2UiKTtYMj0iTmFtZWRBcmd1bWVudCI7byh3QmUsImlzTmFtZWRBcmd1bWVudCIpO2xnPSJOZWdhdGlvbiI7byhnTiwiaXNOZWdhdGlvbiIpO2NnPSJOdW1iZXJMaXRlcmFsIjtvKGtCZSwiaXNOdW1iZXJMaXRlcmFsIik7dWc9IlBhcmFtZXRlciI7byhFQmUsImlzUGFyYW1ldGVyIik7aGc9IlBhcmFtZXRlclJlZmVyZW5jZSI7byh5TiwiaXNQYXJhbWV0ZXJSZWZlcmVuY2UiKTtmZz0iUGFyc2VyUnVsZSI7byhGYSwiaXNQYXJzZXJSdWxlIik7ZGc9IlJlZmVyZW5jZVR5cGUiO28odk4sImlzUmVmZXJlbmNlVHlwZSIpO2oyPSJSZXR1cm5UeXBlIjtvKHhOLCJpc1JldHVyblR5cGUiKTtwZz0iU2ltcGxlVHlwZSI7byhEaywiaXNTaW1wbGVUeXBlIik7bWc9IlN0cmluZ0xpdGVyYWwiO28oU0JlLCJpc1N0cmluZ0xpdGVyYWwiKTtjcD0iVGVybWluYWxSdWxlIjtvKHVvLCJpc1Rlcm1pbmFsUnVsZSIpO2dnPSJUeXBlIjtvKFoyLCJpc1R5cGUiKTtLMj0iVHlwZUF0dHJpYnV0ZSI7byhDQmUsImlzVHlwZUF0dHJpYnV0ZSIpO3lnPSJVbmlvblR5cGUiO28oYk4sImlzVW5pb25UeXBlIik7dmc9IkFjdGlvbiI7bygkdSwiaXNBY3Rpb24iKTt4Zz0iQWx0ZXJuYXRpdmVzIjtvKExrLCJpc0FsdGVybmF0aXZlcyIpO2JnPSJBc3NpZ25tZW50IjtvKFBsLCJpc0Fzc2lnbm1lbnQiKTtUZz0iQ2hhcmFjdGVyUmFuZ2UiO28oVE4sImlzQ2hhcmFjdGVyUmFuZ2UiKTt3Zz0iQ3Jvc3NSZWZlcmVuY2UiO28odXAsImlzQ3Jvc3NSZWZlcmVuY2UiKTtrZz0iRW5kT2ZGaWxlIjtvKHdOLCJpc0VuZE9mRmlsZSIpO0VnPSJHcm91cCI7byhmZiwiaXNHcm91cCIpO1NnPSJLZXl3b3JkIjtvKFhvLCJpc0tleXdvcmQiKTtDZz0iTmVnYXRlZFRva2VuIjtvKGtOLCJpc05lZ2F0ZWRUb2tlbiIpO0FnPSJSZWdleFRva2VuIjtvKEVOLCJpc1JlZ2V4VG9rZW4iKTtfZz0iUnVsZUNhbGwiO28oQmwsImlzUnVsZUNhbGwiKTtEZz0iVGVybWluYWxBbHRlcm5hdGl2ZXMiO28oU04sImlzVGVybWluYWxBbHRlcm5hdGl2ZXMiKTtMZz0iVGVybWluYWxHcm91cCI7byhDTiwiaXNUZXJtaW5hbEdyb3VwIik7Umc9IlRlcm1pbmFsUnVsZUNhbGwiO28oUmssImlzVGVybWluYWxSdWxlQ2FsbCIpO05nPSJVbm9yZGVyZWRHcm91cCI7byhOaywiaXNVbm9yZGVyZWRHcm91cCIpO01nPSJVbnRpbFRva2VuIjtvKEFOLCJpc1VudGlsVG9rZW4iKTtJZz0iV2lsZGNhcmQiO28oX04sImlzV2lsZGNhcmQiKTtPZz1jbGFzcyBleHRlbmRzIGlwe3N0YXRpY3tvKHRoaXMsIkxhbmdpdW1HcmFtbWFyQXN0UmVmbGVjdGlvbiIpfWdldEFsbFR5cGVzKCl7cmV0dXJuW0ptLFFtLFptLHZnLHhnLGVnLHRnLGJnLHJnLFRnLFcyLG5nLHdnLGlnLGtnLGFnLFkyLEVnLHNnLG9nLFNnLFgyLENnLGxnLGNnLHVnLGhnLGZnLGRnLEFnLGoyLF9nLHBnLG1nLERnLExnLGNwLFJnLGdnLEsyLENrLHlnLE5nLE1nLHEyLElnXX1jb21wdXRlSXNTdWJ0eXBlKGUscil7c3dpdGNoKGUpe2Nhc2Ugdmc6Y2FzZSB4ZzpjYXNlIGJnOmNhc2UgVGc6Y2FzZSB3ZzpjYXNlIGtnOmNhc2UgRWc6Y2FzZSBTZzpjYXNlIENnOmNhc2UgQWc6Y2FzZSBfZzpjYXNlIERnOmNhc2UgTGc6Y2FzZSBSZzpjYXNlIE5nOmNhc2UgTWc6Y2FzZSBJZzpyZXR1cm4gdGhpcy5pc1N1YnR5cGUoSm0scik7Y2FzZSBlZzpjYXNlIGNnOmNhc2UgbWc6cmV0dXJuIHRoaXMuaXNTdWJ0eXBlKHEyLHIpO2Nhc2UgdGc6Y2FzZSBkZzpjYXNlIHBnOmNhc2UgeWc6cmV0dXJuIHRoaXMuaXNTdWJ0eXBlKENrLHIpO2Nhc2Ugcmc6cmV0dXJuIHRoaXMuaXNTdWJ0eXBlKFcyLHIpfHx0aGlzLmlzU3VidHlwZShxMixyKTtjYXNlIG5nOmNhc2UgaWc6Y2FzZSBsZzpjYXNlIGhnOnJldHVybiB0aGlzLmlzU3VidHlwZShXMixyKTtjYXNlIHNnOmNhc2Ugb2c6Y2FzZSBnZzpyZXR1cm4gdGhpcy5pc1N1YnR5cGUoWm0scik7Y2FzZSBmZzpyZXR1cm4gdGhpcy5pc1N1YnR5cGUoUW0scil8fHRoaXMuaXNTdWJ0eXBlKFptLHIpO2Nhc2UgY3A6cmV0dXJuIHRoaXMuaXNTdWJ0eXBlKFFtLHIpO2RlZmF1bHQ6cmV0dXJuITF9fWdldFJlZmVyZW5jZVR5cGUoZSl7bGV0IHI9YCR7ZS5jb250YWluZXIuJHR5cGV9OiR7ZS5wcm9wZXJ0eX1gO3N3aXRjaChyKXtjYXNlIkFjdGlvbjp0eXBlIjpjYXNlIkNyb3NzUmVmZXJlbmNlOnR5cGUiOmNhc2UiSW50ZXJmYWNlOnN1cGVyVHlwZXMiOmNhc2UiUGFyc2VyUnVsZTpyZXR1cm5UeXBlIjpjYXNlIlNpbXBsZVR5cGU6dHlwZVJlZiI6cmV0dXJuIFptO2Nhc2UiR3JhbW1hcjpoaWRkZW5Ub2tlbnMiOmNhc2UiUGFyc2VyUnVsZTpoaWRkZW5Ub2tlbnMiOmNhc2UiUnVsZUNhbGw6cnVsZSI6cmV0dXJuIFFtO2Nhc2UiR3JhbW1hcjp1c2VkR3JhbW1hcnMiOnJldHVybiBhZztjYXNlIk5hbWVkQXJndW1lbnQ6cGFyYW1ldGVyIjpjYXNlIlBhcmFtZXRlclJlZmVyZW5jZTpwYXJhbWV0ZXIiOnJldHVybiB1ZztjYXNlIlRlcm1pbmFsUnVsZUNhbGw6cnVsZSI6cmV0dXJuIGNwO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGAke3J9IGlzIG5vdCBhIHZhbGlkIHJlZmVyZW5jZSBpZC5gKX19Z2V0VHlwZU1ldGFEYXRhKGUpe3N3aXRjaChlKXtjYXNlIEptOnJldHVybntuYW1lOkptLHByb3BlcnRpZXM6W3tuYW1lOiJjYXJkaW5hbGl0eSJ9LHtuYW1lOiJsb29rYWhlYWQifV19O2Nhc2UgZWc6cmV0dXJue25hbWU6ZWcscHJvcGVydGllczpbe25hbWU6ImVsZW1lbnRzIixkZWZhdWx0VmFsdWU6W119XX07Y2FzZSB0ZzpyZXR1cm57bmFtZTp0Zyxwcm9wZXJ0aWVzOlt7bmFtZToiZWxlbWVudFR5cGUifV19O2Nhc2Ugcmc6cmV0dXJue25hbWU6cmcscHJvcGVydGllczpbe25hbWU6InRydWUiLGRlZmF1bHRWYWx1ZTohMX1dfTtjYXNlIG5nOnJldHVybntuYW1lOm5nLHByb3BlcnRpZXM6W3tuYW1lOiJsZWZ0In0se25hbWU6InJpZ2h0In1dfTtjYXNlIGlnOnJldHVybntuYW1lOmlnLHByb3BlcnRpZXM6W3tuYW1lOiJsZWZ0In0se25hbWU6InJpZ2h0In1dfTtjYXNlIGFnOnJldHVybntuYW1lOmFnLHByb3BlcnRpZXM6W3tuYW1lOiJkZWZpbmVzSGlkZGVuVG9rZW5zIixkZWZhdWx0VmFsdWU6ITF9LHtuYW1lOiJoaWRkZW5Ub2tlbnMiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6ImltcG9ydHMiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6ImludGVyZmFjZXMiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6ImlzRGVjbGFyZWQiLGRlZmF1bHRWYWx1ZTohMX0se25hbWU6Im5hbWUifSx7bmFtZToicnVsZXMiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6InR5cGVzIixkZWZhdWx0VmFsdWU6W119LHtuYW1lOiJ1c2VkR3JhbW1hcnMiLGRlZmF1bHRWYWx1ZTpbXX1dfTtjYXNlIFkyOnJldHVybntuYW1lOlkyLHByb3BlcnRpZXM6W3tuYW1lOiJwYXRoIn1dfTtjYXNlIHNnOnJldHVybntuYW1lOnNnLHByb3BlcnRpZXM6W3tuYW1lOiJuYW1lIn1dfTtjYXNlIG9nOnJldHVybntuYW1lOm9nLHByb3BlcnRpZXM6W3tuYW1lOiJhdHRyaWJ1dGVzIixkZWZhdWx0VmFsdWU6W119LHtuYW1lOiJuYW1lIn0se25hbWU6InN1cGVyVHlwZXMiLGRlZmF1bHRWYWx1ZTpbXX1dfTtjYXNlIFgyOnJldHVybntuYW1lOlgyLHByb3BlcnRpZXM6W3tuYW1lOiJjYWxsZWRCeU5hbWUiLGRlZmF1bHRWYWx1ZTohMX0se25hbWU6InBhcmFtZXRlciJ9LHtuYW1lOiJ2YWx1ZSJ9XX07Y2FzZSBsZzpyZXR1cm57bmFtZTpsZyxwcm9wZXJ0aWVzOlt7bmFtZToidmFsdWUifV19O2Nhc2UgY2c6cmV0dXJue25hbWU6Y2cscHJvcGVydGllczpbe25hbWU6InZhbHVlIn1dfTtjYXNlIHVnOnJldHVybntuYW1lOnVnLHByb3BlcnRpZXM6W3tuYW1lOiJuYW1lIn1dfTtjYXNlIGhnOnJldHVybntuYW1lOmhnLHByb3BlcnRpZXM6W3tuYW1lOiJwYXJhbWV0ZXIifV19O2Nhc2UgZmc6cmV0dXJue25hbWU6ZmcscHJvcGVydGllczpbe25hbWU6ImRhdGFUeXBlIn0se25hbWU6ImRlZmluZXNIaWRkZW5Ub2tlbnMiLGRlZmF1bHRWYWx1ZTohMX0se25hbWU6ImRlZmluaXRpb24ifSx7bmFtZToiZW50cnkiLGRlZmF1bHRWYWx1ZTohMX0se25hbWU6ImZyYWdtZW50IixkZWZhdWx0VmFsdWU6ITF9LHtuYW1lOiJoaWRkZW5Ub2tlbnMiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6ImluZmVycmVkVHlwZSJ9LHtuYW1lOiJuYW1lIn0se25hbWU6InBhcmFtZXRlcnMiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6InJldHVyblR5cGUifSx7bmFtZToid2lsZGNhcmQiLGRlZmF1bHRWYWx1ZTohMX1dfTtjYXNlIGRnOnJldHVybntuYW1lOmRnLHByb3BlcnRpZXM6W3tuYW1lOiJyZWZlcmVuY2VUeXBlIn1dfTtjYXNlIGoyOnJldHVybntuYW1lOmoyLHByb3BlcnRpZXM6W3tuYW1lOiJuYW1lIn1dfTtjYXNlIHBnOnJldHVybntuYW1lOnBnLHByb3BlcnRpZXM6W3tuYW1lOiJwcmltaXRpdmVUeXBlIn0se25hbWU6InN0cmluZ1R5cGUifSx7bmFtZToidHlwZVJlZiJ9XX07Y2FzZSBtZzpyZXR1cm57bmFtZTptZyxwcm9wZXJ0aWVzOlt7bmFtZToidmFsdWUifV19O2Nhc2UgY3A6cmV0dXJue25hbWU6Y3AscHJvcGVydGllczpbe25hbWU6ImRlZmluaXRpb24ifSx7bmFtZToiZnJhZ21lbnQiLGRlZmF1bHRWYWx1ZTohMX0se25hbWU6ImhpZGRlbiIsZGVmYXVsdFZhbHVlOiExfSx7bmFtZToibmFtZSJ9LHtuYW1lOiJ0eXBlIn1dfTtjYXNlIGdnOnJldHVybntuYW1lOmdnLHByb3BlcnRpZXM6W3tuYW1lOiJuYW1lIn0se25hbWU6InR5cGUifV19O2Nhc2UgSzI6cmV0dXJue25hbWU6SzIscHJvcGVydGllczpbe25hbWU6ImRlZmF1bHRWYWx1ZSJ9LHtuYW1lOiJpc09wdGlvbmFsIixkZWZhdWx0VmFsdWU6ITF9LHtuYW1lOiJuYW1lIn0se25hbWU6InR5cGUifV19O2Nhc2UgeWc6cmV0dXJue25hbWU6eWcscHJvcGVydGllczpbe25hbWU6InR5cGVzIixkZWZhdWx0VmFsdWU6W119XX07Y2FzZSB2ZzpyZXR1cm57bmFtZTp2Zyxwcm9wZXJ0aWVzOlt7bmFtZToiY2FyZGluYWxpdHkifSx7bmFtZToiZmVhdHVyZSJ9LHtuYW1lOiJpbmZlcnJlZFR5cGUifSx7bmFtZToibG9va2FoZWFkIn0se25hbWU6Im9wZXJhdG9yIn0se25hbWU6InR5cGUifV19O2Nhc2UgeGc6cmV0dXJue25hbWU6eGcscHJvcGVydGllczpbe25hbWU6ImNhcmRpbmFsaXR5In0se25hbWU6ImVsZW1lbnRzIixkZWZhdWx0VmFsdWU6W119LHtuYW1lOiJsb29rYWhlYWQifV19O2Nhc2UgYmc6cmV0dXJue25hbWU6YmcscHJvcGVydGllczpbe25hbWU6ImNhcmRpbmFsaXR5In0se25hbWU6ImZlYXR1cmUifSx7bmFtZToibG9va2FoZWFkIn0se25hbWU6Im9wZXJhdG9yIn0se25hbWU6InRlcm1pbmFsIn1dfTtjYXNlIFRnOnJldHVybntuYW1lOlRnLHByb3BlcnRpZXM6W3tuYW1lOiJjYXJkaW5hbGl0eSJ9LHtuYW1lOiJsZWZ0In0se25hbWU6Imxvb2thaGVhZCJ9LHtuYW1lOiJyaWdodCJ9XX07Y2FzZSB3ZzpyZXR1cm57bmFtZTp3Zyxwcm9wZXJ0aWVzOlt7bmFtZToiY2FyZGluYWxpdHkifSx7bmFtZToiZGVwcmVjYXRlZFN5bnRheCIsZGVmYXVsdFZhbHVlOiExfSx7bmFtZToibG9va2FoZWFkIn0se25hbWU6InRlcm1pbmFsIn0se25hbWU6InR5cGUifV19O2Nhc2Uga2c6cmV0dXJue25hbWU6a2cscHJvcGVydGllczpbe25hbWU6ImNhcmRpbmFsaXR5In0se25hbWU6Imxvb2thaGVhZCJ9XX07Y2FzZSBFZzpyZXR1cm57bmFtZTpFZyxwcm9wZXJ0aWVzOlt7bmFtZToiY2FyZGluYWxpdHkifSx7bmFtZToiZWxlbWVudHMiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6Imd1YXJkQ29uZGl0aW9uIn0se25hbWU6Imxvb2thaGVhZCJ9XX07Y2FzZSBTZzpyZXR1cm57bmFtZTpTZyxwcm9wZXJ0aWVzOlt7bmFtZToiY2FyZGluYWxpdHkifSx7bmFtZToibG9va2FoZWFkIn0se25hbWU6InZhbHVlIn1dfTtjYXNlIENnOnJldHVybntuYW1lOkNnLHByb3BlcnRpZXM6W3tuYW1lOiJjYXJkaW5hbGl0eSJ9LHtuYW1lOiJsb29rYWhlYWQifSx7bmFtZToidGVybWluYWwifV19O2Nhc2UgQWc6cmV0dXJue25hbWU6QWcscHJvcGVydGllczpbe25hbWU6ImNhcmRpbmFsaXR5In0se25hbWU6Imxvb2thaGVhZCJ9LHtuYW1lOiJyZWdleCJ9XX07Y2FzZSBfZzpyZXR1cm57bmFtZTpfZyxwcm9wZXJ0aWVzOlt7bmFtZToiYXJndW1lbnRzIixkZWZhdWx0VmFsdWU6W119LHtuYW1lOiJjYXJkaW5hbGl0eSJ9LHtuYW1lOiJsb29rYWhlYWQifSx7bmFtZToicnVsZSJ9XX07Y2FzZSBEZzpyZXR1cm57bmFtZTpEZyxwcm9wZXJ0aWVzOlt7bmFtZToiY2FyZGluYWxpdHkifSx7bmFtZToiZWxlbWVudHMiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6Imxvb2thaGVhZCJ9XX07Y2FzZSBMZzpyZXR1cm57bmFtZTpMZyxwcm9wZXJ0aWVzOlt7bmFtZToiY2FyZGluYWxpdHkifSx7bmFtZToiZWxlbWVudHMiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6Imxvb2thaGVhZCJ9XX07Y2FzZSBSZzpyZXR1cm57bmFtZTpSZyxwcm9wZXJ0aWVzOlt7bmFtZToiY2FyZGluYWxpdHkifSx7bmFtZToibG9va2FoZWFkIn0se25hbWU6InJ1bGUifV19O2Nhc2UgTmc6cmV0dXJue25hbWU6TmcscHJvcGVydGllczpbe25hbWU6ImNhcmRpbmFsaXR5In0se25hbWU6ImVsZW1lbnRzIixkZWZhdWx0VmFsdWU6W119LHtuYW1lOiJsb29rYWhlYWQifV19O2Nhc2UgTWc6cmV0dXJue25hbWU6TWcscHJvcGVydGllczpbe25hbWU6ImNhcmRpbmFsaXR5In0se25hbWU6Imxvb2thaGVhZCJ9LHtuYW1lOiJ0ZXJtaW5hbCJ9XX07Y2FzZSBJZzpyZXR1cm57bmFtZTpJZyxwcm9wZXJ0aWVzOlt7bmFtZToiY2FyZGluYWxpdHkifSx7bmFtZToibG9va2FoZWFkIn1dfTtkZWZhdWx0OnJldHVybntuYW1lOmUscHJvcGVydGllczpbXX19fX0sY3I9bmV3IE9nfSk7dmFyIElrPXt9O3VyKElrLHthc3NpZ25NYW5kYXRvcnlQcm9wZXJ0aWVzOigpPT5STixjb3B5QXN0Tm9kZTooKT0+TE4sZmluZExvY2FsUmVmZXJlbmNlczooKT0+X0JlLGZpbmRSb290Tm9kZTooKT0+ZXgsZ2V0Q29udGFpbmVyT2ZUeXBlOigpPT5ocCxnZXREb2N1bWVudDooKT0+JGEsaGFzQ29udGFpbmVyT2ZUeXBlOigpPT5BQmUsbGlua0NvbnRlbnRUb0NvbnRhaW5lcjooKT0+TWssc3RyZWFtQWxsQ29udGVudHM6KCk9PkJjLHN0cmVhbUFzdDooKT0+am8sc3RyZWFtQ29udGVudHM6KCk9PnR4LHN0cmVhbVJlZmVyZW5jZXM6KCk9PlBnfSk7ZnVuY3Rpb24gTWsodCl7Zm9yKGxldFtlLHJdb2YgT2JqZWN0LmVudHJpZXModCkpZS5zdGFydHNXaXRoKCIkIil8fChBcnJheS5pc0FycmF5KHIpP3IuZm9yRWFjaCgobixpKT0+e3NpKG4pJiYobi4kY29udGFpbmVyPXQsbi4kY29udGFpbmVyUHJvcGVydHk9ZSxuLiRjb250YWluZXJJbmRleD1pKX0pOnNpKHIpJiYoci4kY29udGFpbmVyPXQsci4kY29udGFpbmVyUHJvcGVydHk9ZSkpfWZ1bmN0aW9uIGhwKHQsZSl7bGV0IHI9dDtmb3IoO3I7KXtpZihlKHIpKXJldHVybiByO3I9ci4kY29udGFpbmVyfX1mdW5jdGlvbiBBQmUodCxlKXtsZXQgcj10O2Zvcig7cjspe2lmKGUocikpcmV0dXJuITA7cj1yLiRjb250YWluZXJ9cmV0dXJuITF9ZnVuY3Rpb24gJGEodCl7bGV0IHI9ZXgodCkuJGRvY3VtZW50O2lmKCFyKXRocm93IG5ldyBFcnJvcigiQVNUIG5vZGUgaGFzIG5vIGRvY3VtZW50LiIpO3JldHVybiByfWZ1bmN0aW9uIGV4KHQpe2Zvcig7dC4kY29udGFpbmVyOyl0PXQuJGNvbnRhaW5lcjtyZXR1cm4gdH1mdW5jdGlvbiB0eCh0LGUpe2lmKCF0KXRocm93IG5ldyBFcnJvcigiTm9kZSBtdXN0IGJlIGFuIEFzdE5vZGUuIik7bGV0IHI9ZT8ucmFuZ2U7cmV0dXJuIG5ldyBjbygoKT0+KHtrZXlzOk9iamVjdC5rZXlzKHQpLGtleUluZGV4OjAsYXJyYXlJbmRleDowfSksbj0+e2Zvcig7bi5rZXlJbmRleDxuLmtleXMubGVuZ3RoOyl7bGV0IGk9bi5rZXlzW24ua2V5SW5kZXhdO2lmKCFpLnN0YXJ0c1dpdGgoIiQiKSl7bGV0IGE9dFtpXTtpZihzaShhKSl7aWYobi5rZXlJbmRleCsrLEROKGEscikpcmV0dXJue2RvbmU6ITEsdmFsdWU6YX19ZWxzZSBpZihBcnJheS5pc0FycmF5KGEpKXtmb3IoO24uYXJyYXlJbmRleDxhLmxlbmd0aDspe2xldCBzPW4uYXJyYXlJbmRleCsrLGw9YVtzXTtpZihzaShsKSYmRE4obCxyKSlyZXR1cm57ZG9uZTohMSx2YWx1ZTpsfX1uLmFycmF5SW5kZXg9MH19bi5rZXlJbmRleCsrfXJldHVybiBCYX0pfWZ1bmN0aW9uIEJjKHQsZSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJSb290IG5vZGUgbXVzdCBiZSBhbiBBc3ROb2RlLiIpO3JldHVybiBuZXcgTWModCxyPT50eChyLGUpKX1mdW5jdGlvbiBqbyh0LGUpe2lmKHQpe2lmKGU/LnJhbmdlJiYhRE4odCxlLnJhbmdlKSlyZXR1cm4gbmV3IE1jKHQsKCk9PltdKX1lbHNlIHRocm93IG5ldyBFcnJvcigiUm9vdCBub2RlIG11c3QgYmUgYW4gQXN0Tm9kZS4iKTtyZXR1cm4gbmV3IE1jKHQscj0+dHgocixlKSx7aW5jbHVkZVJvb3Q6ITB9KX1mdW5jdGlvbiBETih0LGUpe3ZhciByO2lmKCFlKXJldHVybiEwO2xldCBuPShyPXQuJGNzdE5vZGUpPT09bnVsbHx8cj09PXZvaWQgMD92b2lkIDA6ci5yYW5nZTtyZXR1cm4gbj9jTihuLGUpOiExfWZ1bmN0aW9uIFBnKHQpe3JldHVybiBuZXcgY28oKCk9Pih7a2V5czpPYmplY3Qua2V5cyh0KSxrZXlJbmRleDowLGFycmF5SW5kZXg6MH0pLGU9Pntmb3IoO2Uua2V5SW5kZXg8ZS5rZXlzLmxlbmd0aDspe2xldCByPWUua2V5c1tlLmtleUluZGV4XTtpZighci5zdGFydHNXaXRoKCIkIikpe2xldCBuPXRbcl07aWYoeWEobikpcmV0dXJuIGUua2V5SW5kZXgrKyx7ZG9uZTohMSx2YWx1ZTp7cmVmZXJlbmNlOm4sY29udGFpbmVyOnQscHJvcGVydHk6cn19O2lmKEFycmF5LmlzQXJyYXkobikpe2Zvcig7ZS5hcnJheUluZGV4PG4ubGVuZ3RoOyl7bGV0IGk9ZS5hcnJheUluZGV4KyssYT1uW2ldO2lmKHlhKGEpKXJldHVybntkb25lOiExLHZhbHVlOntyZWZlcmVuY2U6YSxjb250YWluZXI6dCxwcm9wZXJ0eTpyLGluZGV4Oml9fX1lLmFycmF5SW5kZXg9MH19ZS5rZXlJbmRleCsrfXJldHVybiBCYX0pfWZ1bmN0aW9uIF9CZSh0LGU9JGEodCkucGFyc2VSZXN1bHQudmFsdWUpe2xldCByPVtdO3JldHVybiBqbyhlKS5mb3JFYWNoKG49PntQZyhuKS5mb3JFYWNoKGk9PntpLnJlZmVyZW5jZS5yZWY9PT10JiZyLnB1c2goaS5yZWZlcmVuY2UpfSl9KSxlbihyKX1mdW5jdGlvbiBSTih0LGUpe2xldCByPXQuZ2V0VHlwZU1ldGFEYXRhKGUuJHR5cGUpLG49ZTtmb3IobGV0IGkgb2Ygci5wcm9wZXJ0aWVzKWkuZGVmYXVsdFZhbHVlIT09dm9pZCAwJiZuW2kubmFtZV09PT12b2lkIDAmJihuW2kubmFtZV09THNlKGkuZGVmYXVsdFZhbHVlKSl9ZnVuY3Rpb24gTHNlKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP1suLi50Lm1hcChMc2UpXTp0fWZ1bmN0aW9uIExOKHQsZSl7bGV0IHI9eyR0eXBlOnQuJHR5cGV9O2ZvcihsZXRbbixpXW9mIE9iamVjdC5lbnRyaWVzKHQpKWlmKCFuLnN0YXJ0c1dpdGgoIiQiKSlpZihzaShpKSlyW25dPUxOKGksZSk7ZWxzZSBpZih5YShpKSlyW25dPWUocixuLGkuJHJlZk5vZGUsaS4kcmVmVGV4dCk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGkpKXtsZXQgYT1bXTtmb3IobGV0IHMgb2YgaSlzaShzKT9hLnB1c2goTE4ocyxlKSk6eWEocyk/YS5wdXNoKGUocixuLHMuJHJlZk5vZGUscy4kcmVmVGV4dCkpOmEucHVzaChzKTtyW25dPWF9ZWxzZSByW25dPWk7cmV0dXJuIE1rKHIpLHJ9dmFyIGNzPU4oKCk9PnsidXNlIHN0cmljdCI7SWwoKTtHcygpO09sKCk7byhNaywibGlua0NvbnRlbnRUb0NvbnRhaW5lciIpO28oaHAsImdldENvbnRhaW5lck9mVHlwZSIpO28oQUJlLCJoYXNDb250YWluZXJPZlR5cGUiKTtvKCRhLCJnZXREb2N1bWVudCIpO28oZXgsImZpbmRSb290Tm9kZSIpO28odHgsInN0cmVhbUNvbnRlbnRzIik7byhCYywic3RyZWFtQWxsQ29udGVudHMiKTtvKGpvLCJzdHJlYW1Bc3QiKTtvKEROLCJpc0FzdE5vZGVJblJhbmdlIik7byhQZywic3RyZWFtUmVmZXJlbmNlcyIpO28oX0JlLCJmaW5kTG9jYWxSZWZlcmVuY2VzIik7byhSTiwiYXNzaWduTWFuZGF0b3J5UHJvcGVydGllcyIpO28oTHNlLCJjb3B5RGVmYXVsdFZhbHVlIik7byhMTiwiY29weUFzdE5vZGUiKX0pO2Z1bmN0aW9uIHNyKHQpe3JldHVybiB0LmNoYXJDb2RlQXQoMCl9ZnVuY3Rpb24gT2sodCxlKXtBcnJheS5pc0FycmF5KHQpP3QuZm9yRWFjaChmdW5jdGlvbihyKXtlLnB1c2gocil9KTplLnB1c2godCl9ZnVuY3Rpb24gQmcodCxlKXtpZih0W2VdPT09ITApdGhyb3ciZHVwbGljYXRlIGZsYWcgIitlO2xldCByPXRbZV07dFtlXT0hMH1mdW5jdGlvbiBmcCh0KXtpZih0PT09dm9pZCAwKXRocm93IEVycm9yKCJJbnRlcm5hbCBFcnJvciAtIFNob3VsZCBuZXZlciBnZXQgaGVyZSEiKTtyZXR1cm4hMH1mdW5jdGlvbiByeCgpe3Rocm93IEVycm9yKCJJbnRlcm5hbCBFcnJvciAtIFNob3VsZCBuZXZlciBnZXQgaGVyZSEiKX1mdW5jdGlvbiBOTih0KXtyZXR1cm4gdC50eXBlPT09IkNoYXJhY3RlciJ9dmFyIE1OPU4oKCk9PnsidXNlIHN0cmljdCI7byhzciwiY2MiKTtvKE9rLCJpbnNlcnRUb1NldCIpO28oQmcsImFkZEZsYWciKTtvKGZwLCJBU1NFUlRfRVhJU1RTIik7byhyeCwiQVNTRVJUX05FVkVSX1JFQUNIX0hFUkUiKTtvKE5OLCJpc0NoYXJhY3RlciIpfSk7dmFyIG54LGl4LElOLFJzZT1OKCgpPT57InVzZSBzdHJpY3QiO01OKCk7bng9W107Zm9yKGxldCB0PXNyKCIwIik7dDw9c3IoIjkiKTt0KyspbngucHVzaCh0KTtpeD1bc3IoIl8iKV0uY29uY2F0KG54KTtmb3IobGV0IHQ9c3IoImEiKTt0PD1zcigieiIpO3QrKylpeC5wdXNoKHQpO2ZvcihsZXQgdD1zcigiQSIpO3Q8PXNyKCJaIik7dCsrKWl4LnB1c2godCk7SU49W3NyKCIgIiksc3IoIlxmIiksc3IoYApgKSxzcigiXHIiKSxzcigiCSIpLHNyKCJcdiIpLHNyKCIJIiksc3IoIlx4QTAiKSxzcigiXHUxNjgwIiksc3IoIlx1MjAwMCIpLHNyKCJcdTIwMDEiKSxzcigiXHUyMDAyIiksc3IoIlx1MjAwMyIpLHNyKCJcdTIwMDQiKSxzcigiXHUyMDA1Iiksc3IoIlx1MjAwNiIpLHNyKCJcdTIwMDciKSxzcigiXHUyMDA4Iiksc3IoIlx1MjAwOSIpLHNyKCJcdTIwMEEiKSxzcigiXHUyMDI4Iiksc3IoIlx1MjAyOSIpLHNyKCJcdTIwMkYiKSxzcigiXHUyMDVGIiksc3IoIlx1MzAwMCIpLHNyKCJcdUZFRkYiKV19KTt2YXIgREJlLFBrLExCZSxkcCxOc2U9TigoKT0+eyJ1c2Ugc3RyaWN0IjtNTigpO1JzZSgpO0RCZT0vWzAtOWEtZkEtRl0vLFBrPS9bMC05XS8sTEJlPS9bMS05XS8sZHA9Y2xhc3N7c3RhdGlje28odGhpcywiUmVnRXhwUGFyc2VyIil9Y29uc3RydWN0b3IoKXt0aGlzLmlkeD0wLHRoaXMuaW5wdXQ9IiIsdGhpcy5ncm91cElkeD0wfXNhdmVTdGF0ZSgpe3JldHVybntpZHg6dGhpcy5pZHgsaW5wdXQ6dGhpcy5pbnB1dCxncm91cElkeDp0aGlzLmdyb3VwSWR4fX1yZXN0b3JlU3RhdGUoZSl7dGhpcy5pZHg9ZS5pZHgsdGhpcy5pbnB1dD1lLmlucHV0LHRoaXMuZ3JvdXBJZHg9ZS5ncm91cElkeH1wYXR0ZXJuKGUpe3RoaXMuaWR4PTAsdGhpcy5pbnB1dD1lLHRoaXMuZ3JvdXBJZHg9MCx0aGlzLmNvbnN1bWVDaGFyKCIvIik7bGV0IHI9dGhpcy5kaXNqdW5jdGlvbigpO3RoaXMuY29uc3VtZUNoYXIoIi8iKTtsZXQgbj17dHlwZToiRmxhZ3MiLGxvYzp7YmVnaW46dGhpcy5pZHgsZW5kOmUubGVuZ3RofSxnbG9iYWw6ITEsaWdub3JlQ2FzZTohMSxtdWx0aUxpbmU6ITEsdW5pY29kZTohMSxzdGlja3k6ITF9O2Zvcig7dGhpcy5pc1JlZ0V4cEZsYWcoKTspc3dpdGNoKHRoaXMucG9wQ2hhcigpKXtjYXNlImciOkJnKG4sImdsb2JhbCIpO2JyZWFrO2Nhc2UiaSI6QmcobiwiaWdub3JlQ2FzZSIpO2JyZWFrO2Nhc2UibSI6QmcobiwibXVsdGlMaW5lIik7YnJlYWs7Y2FzZSJ1IjpCZyhuLCJ1bmljb2RlIik7YnJlYWs7Y2FzZSJ5IjpCZyhuLCJzdGlja3kiKTticmVha31pZih0aGlzLmlkeCE9PXRoaXMuaW5wdXQubGVuZ3RoKXRocm93IEVycm9yKCJSZWR1bmRhbnQgaW5wdXQ6ICIrdGhpcy5pbnB1dC5zdWJzdHJpbmcodGhpcy5pZHgpKTtyZXR1cm57dHlwZToiUGF0dGVybiIsZmxhZ3M6bix2YWx1ZTpyLGxvYzp0aGlzLmxvYygwKX19ZGlzanVuY3Rpb24oKXtsZXQgZT1bXSxyPXRoaXMuaWR4O2ZvcihlLnB1c2godGhpcy5hbHRlcm5hdGl2ZSgpKTt0aGlzLnBlZWtDaGFyKCk9PT0ifCI7KXRoaXMuY29uc3VtZUNoYXIoInwiKSxlLnB1c2godGhpcy5hbHRlcm5hdGl2ZSgpKTtyZXR1cm57dHlwZToiRGlzanVuY3Rpb24iLHZhbHVlOmUsbG9jOnRoaXMubG9jKHIpfX1hbHRlcm5hdGl2ZSgpe2xldCBlPVtdLHI9dGhpcy5pZHg7Zm9yKDt0aGlzLmlzVGVybSgpOyllLnB1c2godGhpcy50ZXJtKCkpO3JldHVybnt0eXBlOiJBbHRlcm5hdGl2ZSIsdmFsdWU6ZSxsb2M6dGhpcy5sb2Mocil9fXRlcm0oKXtyZXR1cm4gdGhpcy5pc0Fzc2VydGlvbigpP3RoaXMuYXNzZXJ0aW9uKCk6dGhpcy5hdG9tKCl9YXNzZXJ0aW9uKCl7bGV0IGU9dGhpcy5pZHg7c3dpdGNoKHRoaXMucG9wQ2hhcigpKXtjYXNlIl4iOnJldHVybnt0eXBlOiJTdGFydEFuY2hvciIsbG9jOnRoaXMubG9jKGUpfTtjYXNlIiQiOnJldHVybnt0eXBlOiJFbmRBbmNob3IiLGxvYzp0aGlzLmxvYyhlKX07Y2FzZSJcXCI6c3dpdGNoKHRoaXMucG9wQ2hhcigpKXtjYXNlImIiOnJldHVybnt0eXBlOiJXb3JkQm91bmRhcnkiLGxvYzp0aGlzLmxvYyhlKX07Y2FzZSJCIjpyZXR1cm57dHlwZToiTm9uV29yZEJvdW5kYXJ5Iixsb2M6dGhpcy5sb2MoZSl9fXRocm93IEVycm9yKCJJbnZhbGlkIEFzc2VydGlvbiBFc2NhcGUiKTtjYXNlIigiOnRoaXMuY29uc3VtZUNoYXIoIj8iKTtsZXQgcjtzd2l0Y2godGhpcy5wb3BDaGFyKCkpe2Nhc2UiPSI6cj0iTG9va2FoZWFkIjticmVhaztjYXNlIiEiOnI9Ik5lZ2F0aXZlTG9va2FoZWFkIjticmVha31mcChyKTtsZXQgbj10aGlzLmRpc2p1bmN0aW9uKCk7cmV0dXJuIHRoaXMuY29uc3VtZUNoYXIoIikiKSx7dHlwZTpyLHZhbHVlOm4sbG9jOnRoaXMubG9jKGUpfX1yZXR1cm4gcngoKX1xdWFudGlmaWVyKGU9ITEpe2xldCByLG49dGhpcy5pZHg7c3dpdGNoKHRoaXMucG9wQ2hhcigpKXtjYXNlIioiOnI9e2F0TGVhc3Q6MCxhdE1vc3Q6MS8wfTticmVhaztjYXNlIisiOnI9e2F0TGVhc3Q6MSxhdE1vc3Q6MS8wfTticmVhaztjYXNlIj8iOnI9e2F0TGVhc3Q6MCxhdE1vc3Q6MX07YnJlYWs7Y2FzZSJ7IjpsZXQgaT10aGlzLmludGVnZXJJbmNsdWRpbmdaZXJvKCk7c3dpdGNoKHRoaXMucG9wQ2hhcigpKXtjYXNlIn0iOnI9e2F0TGVhc3Q6aSxhdE1vc3Q6aX07YnJlYWs7Y2FzZSIsIjpsZXQgYTt0aGlzLmlzRGlnaXQoKT8oYT10aGlzLmludGVnZXJJbmNsdWRpbmdaZXJvKCkscj17YXRMZWFzdDppLGF0TW9zdDphfSk6cj17YXRMZWFzdDppLGF0TW9zdDoxLzB9LHRoaXMuY29uc3VtZUNoYXIoIn0iKTticmVha31pZihlPT09ITAmJnI9PT12b2lkIDApcmV0dXJuO2ZwKHIpO2JyZWFrfWlmKCEoZT09PSEwJiZyPT09dm9pZCAwKSYmZnAocikpcmV0dXJuIHRoaXMucGVla0NoYXIoMCk9PT0iPyI/KHRoaXMuY29uc3VtZUNoYXIoIj8iKSxyLmdyZWVkeT0hMSk6ci5ncmVlZHk9ITAsci50eXBlPSJRdWFudGlmaWVyIixyLmxvYz10aGlzLmxvYyhuKSxyfWF0b20oKXtsZXQgZSxyPXRoaXMuaWR4O3N3aXRjaCh0aGlzLnBlZWtDaGFyKCkpe2Nhc2UiLiI6ZT10aGlzLmRvdEFsbCgpO2JyZWFrO2Nhc2UiXFwiOmU9dGhpcy5hdG9tRXNjYXBlKCk7YnJlYWs7Y2FzZSJbIjplPXRoaXMuY2hhcmFjdGVyQ2xhc3MoKTticmVhaztjYXNlIigiOmU9dGhpcy5ncm91cCgpO2JyZWFrfXJldHVybiBlPT09dm9pZCAwJiZ0aGlzLmlzUGF0dGVybkNoYXJhY3RlcigpJiYoZT10aGlzLnBhdHRlcm5DaGFyYWN0ZXIoKSksZnAoZSk/KGUubG9jPXRoaXMubG9jKHIpLHRoaXMuaXNRdWFudGlmaWVyKCkmJihlLnF1YW50aWZpZXI9dGhpcy5xdWFudGlmaWVyKCkpLGUpOnJ4KCl9ZG90QWxsKCl7cmV0dXJuIHRoaXMuY29uc3VtZUNoYXIoIi4iKSx7dHlwZToiU2V0Iixjb21wbGVtZW50OiEwLHZhbHVlOltzcihgCmApLHNyKCJcciIpLHNyKCJcdTIwMjgiKSxzcigiXHUyMDI5IildfX1hdG9tRXNjYXBlKCl7c3dpdGNoKHRoaXMuY29uc3VtZUNoYXIoIlxcIiksdGhpcy5wZWVrQ2hhcigpKXtjYXNlIjEiOmNhc2UiMiI6Y2FzZSIzIjpjYXNlIjQiOmNhc2UiNSI6Y2FzZSI2IjpjYXNlIjciOmNhc2UiOCI6Y2FzZSI5IjpyZXR1cm4gdGhpcy5kZWNpbWFsRXNjYXBlQXRvbSgpO2Nhc2UiZCI6Y2FzZSJEIjpjYXNlInMiOmNhc2UiUyI6Y2FzZSJ3IjpjYXNlIlciOnJldHVybiB0aGlzLmNoYXJhY3RlckNsYXNzRXNjYXBlKCk7Y2FzZSJmIjpjYXNlIm4iOmNhc2UiciI6Y2FzZSJ0IjpjYXNlInYiOnJldHVybiB0aGlzLmNvbnRyb2xFc2NhcGVBdG9tKCk7Y2FzZSJjIjpyZXR1cm4gdGhpcy5jb250cm9sTGV0dGVyRXNjYXBlQXRvbSgpO2Nhc2UiMCI6cmV0dXJuIHRoaXMubnVsQ2hhcmFjdGVyQXRvbSgpO2Nhc2UieCI6cmV0dXJuIHRoaXMuaGV4RXNjYXBlU2VxdWVuY2VBdG9tKCk7Y2FzZSJ1IjpyZXR1cm4gdGhpcy5yZWdFeHBVbmljb2RlRXNjYXBlU2VxdWVuY2VBdG9tKCk7ZGVmYXVsdDpyZXR1cm4gdGhpcy5pZGVudGl0eUVzY2FwZUF0b20oKX19ZGVjaW1hbEVzY2FwZUF0b20oKXtyZXR1cm57dHlwZToiR3JvdXBCYWNrUmVmZXJlbmNlIix2YWx1ZTp0aGlzLnBvc2l0aXZlSW50ZWdlcigpfX1jaGFyYWN0ZXJDbGFzc0VzY2FwZSgpe2xldCBlLHI9ITE7c3dpdGNoKHRoaXMucG9wQ2hhcigpKXtjYXNlImQiOmU9bng7YnJlYWs7Y2FzZSJEIjplPW54LHI9ITA7YnJlYWs7Y2FzZSJzIjplPUlOO2JyZWFrO2Nhc2UiUyI6ZT1JTixyPSEwO2JyZWFrO2Nhc2UidyI6ZT1peDticmVhaztjYXNlIlciOmU9aXgscj0hMDticmVha31yZXR1cm4gZnAoZSk/e3R5cGU6IlNldCIsdmFsdWU6ZSxjb21wbGVtZW50OnJ9OnJ4KCl9Y29udHJvbEVzY2FwZUF0b20oKXtsZXQgZTtzd2l0Y2godGhpcy5wb3BDaGFyKCkpe2Nhc2UiZiI6ZT1zcigiXGYiKTticmVhaztjYXNlIm4iOmU9c3IoYApgKTticmVhaztjYXNlInIiOmU9c3IoIlxyIik7YnJlYWs7Y2FzZSJ0IjplPXNyKCIJIik7YnJlYWs7Y2FzZSJ2IjplPXNyKCJcdiIpO2JyZWFrfXJldHVybiBmcChlKT97dHlwZToiQ2hhcmFjdGVyIix2YWx1ZTplfTpyeCgpfWNvbnRyb2xMZXR0ZXJFc2NhcGVBdG9tKCl7dGhpcy5jb25zdW1lQ2hhcigiYyIpO2xldCBlPXRoaXMucG9wQ2hhcigpO2lmKC9bYS16QS1aXS8udGVzdChlKT09PSExKXRocm93IEVycm9yKCJJbnZhbGlkICIpO3JldHVybnt0eXBlOiJDaGFyYWN0ZXIiLHZhbHVlOmUudG9VcHBlckNhc2UoKS5jaGFyQ29kZUF0KDApLTY0fX1udWxDaGFyYWN0ZXJBdG9tKCl7cmV0dXJuIHRoaXMuY29uc3VtZUNoYXIoIjAiKSx7dHlwZToiQ2hhcmFjdGVyIix2YWx1ZTpzcigiXDAiKX19aGV4RXNjYXBlU2VxdWVuY2VBdG9tKCl7cmV0dXJuIHRoaXMuY29uc3VtZUNoYXIoIngiKSx0aGlzLnBhcnNlSGV4RGlnaXRzKDIpfXJlZ0V4cFVuaWNvZGVFc2NhcGVTZXF1ZW5jZUF0b20oKXtyZXR1cm4gdGhpcy5jb25zdW1lQ2hhcigidSIpLHRoaXMucGFyc2VIZXhEaWdpdHMoNCl9aWRlbnRpdHlFc2NhcGVBdG9tKCl7bGV0IGU9dGhpcy5wb3BDaGFyKCk7cmV0dXJue3R5cGU6IkNoYXJhY3RlciIsdmFsdWU6c3IoZSl9fWNsYXNzUGF0dGVybkNoYXJhY3RlckF0b20oKXtzd2l0Y2godGhpcy5wZWVrQ2hhcigpKXtjYXNlYApgOmNhc2UiXHIiOmNhc2UiXHUyMDI4IjpjYXNlIlx1MjAyOSI6Y2FzZSJcXCI6Y2FzZSJdIjp0aHJvdyBFcnJvcigiVEJEIik7ZGVmYXVsdDpsZXQgZT10aGlzLnBvcENoYXIoKTtyZXR1cm57dHlwZToiQ2hhcmFjdGVyIix2YWx1ZTpzcihlKX19fWNoYXJhY3RlckNsYXNzKCl7bGV0IGU9W10scj0hMTtmb3IodGhpcy5jb25zdW1lQ2hhcigiWyIpLHRoaXMucGVla0NoYXIoMCk9PT0iXiImJih0aGlzLmNvbnN1bWVDaGFyKCJeIikscj0hMCk7dGhpcy5pc0NsYXNzQXRvbSgpOyl7bGV0IG49dGhpcy5jbGFzc0F0b20oKSxpPW4udHlwZT09PSJDaGFyYWN0ZXIiO2lmKE5OKG4pJiZ0aGlzLmlzUmFuZ2VEYXNoKCkpe3RoaXMuY29uc3VtZUNoYXIoIi0iKTtsZXQgYT10aGlzLmNsYXNzQXRvbSgpLHM9YS50eXBlPT09IkNoYXJhY3RlciI7aWYoTk4oYSkpe2lmKGEudmFsdWU8bi52YWx1ZSl0aHJvdyBFcnJvcigiUmFuZ2Ugb3V0IG9mIG9yZGVyIGluIGNoYXJhY3RlciBjbGFzcyIpO2UucHVzaCh7ZnJvbTpuLnZhbHVlLHRvOmEudmFsdWV9KX1lbHNlIE9rKG4udmFsdWUsZSksZS5wdXNoKHNyKCItIikpLE9rKGEudmFsdWUsZSl9ZWxzZSBPayhuLnZhbHVlLGUpfXJldHVybiB0aGlzLmNvbnN1bWVDaGFyKCJdIikse3R5cGU6IlNldCIsY29tcGxlbWVudDpyLHZhbHVlOmV9fWNsYXNzQXRvbSgpe3N3aXRjaCh0aGlzLnBlZWtDaGFyKCkpe2Nhc2UiXSI6Y2FzZWAKYDpjYXNlIlxyIjpjYXNlIlx1MjAyOCI6Y2FzZSJcdTIwMjkiOnRocm93IEVycm9yKCJUQkQiKTtjYXNlIlxcIjpyZXR1cm4gdGhpcy5jbGFzc0VzY2FwZSgpO2RlZmF1bHQ6cmV0dXJuIHRoaXMuY2xhc3NQYXR0ZXJuQ2hhcmFjdGVyQXRvbSgpfX1jbGFzc0VzY2FwZSgpe3N3aXRjaCh0aGlzLmNvbnN1bWVDaGFyKCJcXCIpLHRoaXMucGVla0NoYXIoKSl7Y2FzZSJiIjpyZXR1cm4gdGhpcy5jb25zdW1lQ2hhcigiYiIpLHt0eXBlOiJDaGFyYWN0ZXIiLHZhbHVlOnNyKCJcYiIpfTtjYXNlImQiOmNhc2UiRCI6Y2FzZSJzIjpjYXNlIlMiOmNhc2UidyI6Y2FzZSJXIjpyZXR1cm4gdGhpcy5jaGFyYWN0ZXJDbGFzc0VzY2FwZSgpO2Nhc2UiZiI6Y2FzZSJuIjpjYXNlInIiOmNhc2UidCI6Y2FzZSJ2IjpyZXR1cm4gdGhpcy5jb250cm9sRXNjYXBlQXRvbSgpO2Nhc2UiYyI6cmV0dXJuIHRoaXMuY29udHJvbExldHRlckVzY2FwZUF0b20oKTtjYXNlIjAiOnJldHVybiB0aGlzLm51bENoYXJhY3RlckF0b20oKTtjYXNlIngiOnJldHVybiB0aGlzLmhleEVzY2FwZVNlcXVlbmNlQXRvbSgpO2Nhc2UidSI6cmV0dXJuIHRoaXMucmVnRXhwVW5pY29kZUVzY2FwZVNlcXVlbmNlQXRvbSgpO2RlZmF1bHQ6cmV0dXJuIHRoaXMuaWRlbnRpdHlFc2NhcGVBdG9tKCl9fWdyb3VwKCl7bGV0IGU9ITA7c3dpdGNoKHRoaXMuY29uc3VtZUNoYXIoIigiKSx0aGlzLnBlZWtDaGFyKDApKXtjYXNlIj8iOnRoaXMuY29uc3VtZUNoYXIoIj8iKSx0aGlzLmNvbnN1bWVDaGFyKCI6IiksZT0hMTticmVhaztkZWZhdWx0OnRoaXMuZ3JvdXBJZHgrKzticmVha31sZXQgcj10aGlzLmRpc2p1bmN0aW9uKCk7dGhpcy5jb25zdW1lQ2hhcigiKSIpO2xldCBuPXt0eXBlOiJHcm91cCIsY2FwdHVyaW5nOmUsdmFsdWU6cn07cmV0dXJuIGUmJihuLmlkeD10aGlzLmdyb3VwSWR4KSxufXBvc2l0aXZlSW50ZWdlcigpe2xldCBlPXRoaXMucG9wQ2hhcigpO2lmKExCZS50ZXN0KGUpPT09ITEpdGhyb3cgRXJyb3IoIkV4cGVjdGluZyBhIHBvc2l0aXZlIGludGVnZXIiKTtmb3IoO1BrLnRlc3QodGhpcy5wZWVrQ2hhcigwKSk7KWUrPXRoaXMucG9wQ2hhcigpO3JldHVybiBwYXJzZUludChlLDEwKX1pbnRlZ2VySW5jbHVkaW5nWmVybygpe2xldCBlPXRoaXMucG9wQ2hhcigpO2lmKFBrLnRlc3QoZSk9PT0hMSl0aHJvdyBFcnJvcigiRXhwZWN0aW5nIGFuIGludGVnZXIiKTtmb3IoO1BrLnRlc3QodGhpcy5wZWVrQ2hhcigwKSk7KWUrPXRoaXMucG9wQ2hhcigpO3JldHVybiBwYXJzZUludChlLDEwKX1wYXR0ZXJuQ2hhcmFjdGVyKCl7bGV0IGU9dGhpcy5wb3BDaGFyKCk7c3dpdGNoKGUpe2Nhc2VgCmA6Y2FzZSJcciI6Y2FzZSJcdTIwMjgiOmNhc2UiXHUyMDI5IjpjYXNlIl4iOmNhc2UiJCI6Y2FzZSJcXCI6Y2FzZSIuIjpjYXNlIioiOmNhc2UiKyI6Y2FzZSI/IjpjYXNlIigiOmNhc2UiKSI6Y2FzZSJbIjpjYXNlInwiOnRocm93IEVycm9yKCJUQkQiKTtkZWZhdWx0OnJldHVybnt0eXBlOiJDaGFyYWN0ZXIiLHZhbHVlOnNyKGUpfX19aXNSZWdFeHBGbGFnKCl7c3dpdGNoKHRoaXMucGVla0NoYXIoMCkpe2Nhc2UiZyI6Y2FzZSJpIjpjYXNlIm0iOmNhc2UidSI6Y2FzZSJ5IjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX1pc1JhbmdlRGFzaCgpe3JldHVybiB0aGlzLnBlZWtDaGFyKCk9PT0iLSImJnRoaXMuaXNDbGFzc0F0b20oMSl9aXNEaWdpdCgpe3JldHVybiBQay50ZXN0KHRoaXMucGVla0NoYXIoMCkpfWlzQ2xhc3NBdG9tKGU9MCl7c3dpdGNoKHRoaXMucGVla0NoYXIoZSkpe2Nhc2UiXSI6Y2FzZWAKYDpjYXNlIlxyIjpjYXNlIlx1MjAyOCI6Y2FzZSJcdTIwMjkiOnJldHVybiExO2RlZmF1bHQ6cmV0dXJuITB9fWlzVGVybSgpe3JldHVybiB0aGlzLmlzQXRvbSgpfHx0aGlzLmlzQXNzZXJ0aW9uKCl9aXNBdG9tKCl7aWYodGhpcy5pc1BhdHRlcm5DaGFyYWN0ZXIoKSlyZXR1cm4hMDtzd2l0Y2godGhpcy5wZWVrQ2hhcigwKSl7Y2FzZSIuIjpjYXNlIlxcIjpjYXNlIlsiOmNhc2UiKCI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19aXNBc3NlcnRpb24oKXtzd2l0Y2godGhpcy5wZWVrQ2hhcigwKSl7Y2FzZSJeIjpjYXNlIiQiOnJldHVybiEwO2Nhc2UiXFwiOnN3aXRjaCh0aGlzLnBlZWtDaGFyKDEpKXtjYXNlImIiOmNhc2UiQiI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX1jYXNlIigiOnJldHVybiB0aGlzLnBlZWtDaGFyKDEpPT09Ij8iJiYodGhpcy5wZWVrQ2hhcigyKT09PSI9Inx8dGhpcy5wZWVrQ2hhcigyKT09PSIhIik7ZGVmYXVsdDpyZXR1cm4hMX19aXNRdWFudGlmaWVyKCl7bGV0IGU9dGhpcy5zYXZlU3RhdGUoKTt0cnl7cmV0dXJuIHRoaXMucXVhbnRpZmllcighMCkhPT12b2lkIDB9Y2F0Y2h7cmV0dXJuITF9ZmluYWxseXt0aGlzLnJlc3RvcmVTdGF0ZShlKX19aXNQYXR0ZXJuQ2hhcmFjdGVyKCl7c3dpdGNoKHRoaXMucGVla0NoYXIoKSl7Y2FzZSJeIjpjYXNlIiQiOmNhc2UiXFwiOmNhc2UiLiI6Y2FzZSIqIjpjYXNlIisiOmNhc2UiPyI6Y2FzZSIoIjpjYXNlIikiOmNhc2UiWyI6Y2FzZSJ8IjpjYXNlIi8iOmNhc2VgCmA6Y2FzZSJcciI6Y2FzZSJcdTIwMjgiOmNhc2UiXHUyMDI5IjpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiEwfX1wYXJzZUhleERpZ2l0cyhlKXtsZXQgcj0iIjtmb3IobGV0IGk9MDtpPGU7aSsrKXtsZXQgYT10aGlzLnBvcENoYXIoKTtpZihEQmUudGVzdChhKT09PSExKXRocm93IEVycm9yKCJFeHBlY3RpbmcgYSBIZXhEZWNpbWFsIGRpZ2l0cyIpO3IrPWF9cmV0dXJue3R5cGU6IkNoYXJhY3RlciIsdmFsdWU6cGFyc2VJbnQociwxNil9fXBlZWtDaGFyKGU9MCl7cmV0dXJuIHRoaXMuaW5wdXRbdGhpcy5pZHgrZV19cG9wQ2hhcigpe2xldCBlPXRoaXMucGVla0NoYXIoMCk7cmV0dXJuIHRoaXMuY29uc3VtZUNoYXIodm9pZCAwKSxlfWNvbnN1bWVDaGFyKGUpe2lmKGUhPT12b2lkIDAmJnRoaXMuaW5wdXRbdGhpcy5pZHhdIT09ZSl0aHJvdyBFcnJvcigiRXhwZWN0ZWQ6ICciK2UrIicgYnV0IGZvdW5kOiAnIit0aGlzLmlucHV0W3RoaXMuaWR4XSsiJyBhdCBvZmZzZXQ6ICIrdGhpcy5pZHgpO2lmKHRoaXMuaWR4Pj10aGlzLmlucHV0Lmxlbmd0aCl0aHJvdyBFcnJvcigiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXQiKTt0aGlzLmlkeCsrfWxvYyhlKXtyZXR1cm57YmVnaW46ZSxlbmQ6dGhpcy5pZHh9fX19KTt2YXIgRmMsTXNlPU4oKCk9PnsidXNlIHN0cmljdCI7RmM9Y2xhc3N7c3RhdGlje28odGhpcywiQmFzZVJlZ0V4cFZpc2l0b3IiKX12aXNpdENoaWxkcmVuKGUpe2ZvcihsZXQgciBpbiBlKXtsZXQgbj1lW3JdO2UuaGFzT3duUHJvcGVydHkocikmJihuLnR5cGUhPT12b2lkIDA/dGhpcy52aXNpdChuKTpBcnJheS5pc0FycmF5KG4pJiZuLmZvckVhY2goaT0+e3RoaXMudmlzaXQoaSl9LHRoaXMpKX19dmlzaXQoZSl7c3dpdGNoKGUudHlwZSl7Y2FzZSJQYXR0ZXJuIjp0aGlzLnZpc2l0UGF0dGVybihlKTticmVhaztjYXNlIkZsYWdzIjp0aGlzLnZpc2l0RmxhZ3MoZSk7YnJlYWs7Y2FzZSJEaXNqdW5jdGlvbiI6dGhpcy52aXNpdERpc2p1bmN0aW9uKGUpO2JyZWFrO2Nhc2UiQWx0ZXJuYXRpdmUiOnRoaXMudmlzaXRBbHRlcm5hdGl2ZShlKTticmVhaztjYXNlIlN0YXJ0QW5jaG9yIjp0aGlzLnZpc2l0U3RhcnRBbmNob3IoZSk7YnJlYWs7Y2FzZSJFbmRBbmNob3IiOnRoaXMudmlzaXRFbmRBbmNob3IoZSk7YnJlYWs7Y2FzZSJXb3JkQm91bmRhcnkiOnRoaXMudmlzaXRXb3JkQm91bmRhcnkoZSk7YnJlYWs7Y2FzZSJOb25Xb3JkQm91bmRhcnkiOnRoaXMudmlzaXROb25Xb3JkQm91bmRhcnkoZSk7YnJlYWs7Y2FzZSJMb29rYWhlYWQiOnRoaXMudmlzaXRMb29rYWhlYWQoZSk7YnJlYWs7Y2FzZSJOZWdhdGl2ZUxvb2thaGVhZCI6dGhpcy52aXNpdE5lZ2F0aXZlTG9va2FoZWFkKGUpO2JyZWFrO2Nhc2UiQ2hhcmFjdGVyIjp0aGlzLnZpc2l0Q2hhcmFjdGVyKGUpO2JyZWFrO2Nhc2UiU2V0Ijp0aGlzLnZpc2l0U2V0KGUpO2JyZWFrO2Nhc2UiR3JvdXAiOnRoaXMudmlzaXRHcm91cChlKTticmVhaztjYXNlIkdyb3VwQmFja1JlZmVyZW5jZSI6dGhpcy52aXNpdEdyb3VwQmFja1JlZmVyZW5jZShlKTticmVhaztjYXNlIlF1YW50aWZpZXIiOnRoaXMudmlzaXRRdWFudGlmaWVyKGUpO2JyZWFrfXRoaXMudmlzaXRDaGlsZHJlbihlKX12aXNpdFBhdHRlcm4oZSl7fXZpc2l0RmxhZ3MoZSl7fXZpc2l0RGlzanVuY3Rpb24oZSl7fXZpc2l0QWx0ZXJuYXRpdmUoZSl7fXZpc2l0U3RhcnRBbmNob3IoZSl7fXZpc2l0RW5kQW5jaG9yKGUpe312aXNpdFdvcmRCb3VuZGFyeShlKXt9dmlzaXROb25Xb3JkQm91bmRhcnkoZSl7fXZpc2l0TG9va2FoZWFkKGUpe312aXNpdE5lZ2F0aXZlTG9va2FoZWFkKGUpe312aXNpdENoYXJhY3RlcihlKXt9dmlzaXRTZXQoZSl7fXZpc2l0R3JvdXAoZSl7fXZpc2l0R3JvdXBCYWNrUmVmZXJlbmNlKGUpe312aXNpdFF1YW50aWZpZXIoZSl7fX19KTt2YXIgYXg9TigoKT0+eyJ1c2Ugc3RyaWN0IjtOc2UoKTtNc2UoKX0pO3ZhciBCaz17fTt1cihCayx7TkVXTElORV9SRUdFWFA6KCk9PlBOLGVzY2FwZVJlZ0V4cDooKT0+bXAsZ2V0Q2FzZUluc2Vuc2l0aXZlUGF0dGVybjooKT0+Rk4sZ2V0VGVybWluYWxQYXJ0czooKT0+UkJlLGlzTXVsdGlsaW5lQ29tbWVudDooKT0+Qk4saXNXaGl0ZXNwYWNlOigpPT5GZyxwYXJ0aWFsTWF0Y2hlczooKT0+JE4scGFydGlhbFJlZ0V4cDooKT0+UHNlLHdoaXRlc3BhY2VDaGFyYWN0ZXJzOigpPT5Pc2V9KTtmdW5jdGlvbiBSQmUodCl7dHJ5e3R5cGVvZiB0IT0ic3RyaW5nIiYmKHQ9dC5zb3VyY2UpLHQ9YC8ke3R9L2A7bGV0IGU9SXNlLnBhdHRlcm4odCkscj1bXTtmb3IobGV0IG4gb2YgZS52YWx1ZS52YWx1ZSlwcC5yZXNldCh0KSxwcC52aXNpdChuKSxyLnB1c2goe3N0YXJ0OnBwLnN0YXJ0UmVnZXhwLGVuZDpwcC5lbmRSZWdleH0pO3JldHVybiByfWNhdGNoe3JldHVybltdfX1mdW5jdGlvbiBCTih0KXt0cnl7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIiYmKHQ9bmV3IFJlZ0V4cCh0KSksdD10LnRvU3RyaW5nKCkscHAucmVzZXQodCkscHAudmlzaXQoSXNlLnBhdHRlcm4odCkpLHBwLm11bHRpbGluZX1jYXRjaHtyZXR1cm4hMX19ZnVuY3Rpb24gRmcodCl7bGV0IGU9dHlwZW9mIHQ9PSJzdHJpbmciP25ldyBSZWdFeHAodCk6dDtyZXR1cm4gT3NlLnNvbWUocj0+ZS50ZXN0KHIpKX1mdW5jdGlvbiBtcCh0KXtyZXR1cm4gdC5yZXBsYWNlKC9bLiorP14ke30oKXxbXF1cXF0vZywiXFwkJiIpfWZ1bmN0aW9uIEZOKHQpe3JldHVybiBBcnJheS5wcm90b3R5cGUubWFwLmNhbGwodCxlPT4vXHcvLnRlc3QoZSk/YFske2UudG9Mb3dlckNhc2UoKX0ke2UudG9VcHBlckNhc2UoKX1dYDptcChlKSkuam9pbigiIil9ZnVuY3Rpb24gJE4odCxlKXtsZXQgcj1Qc2UodCksbj1lLm1hdGNoKHIpO3JldHVybiEhbiYmblswXS5sZW5ndGg+MH1mdW5jdGlvbiBQc2UodCl7dHlwZW9mIHQ9PSJzdHJpbmciJiYodD1uZXcgUmVnRXhwKHQpKTtsZXQgZT10LHI9dC5zb3VyY2Usbj0wO2Z1bmN0aW9uIGkoKXtsZXQgYT0iIixzO2Z1bmN0aW9uIGwoaCl7YSs9ci5zdWJzdHIobixoKSxuKz1ofW8obCwiYXBwZW5kUmF3Iik7ZnVuY3Rpb24gdShoKXthKz0iKD86IityLnN1YnN0cihuLGgpKyJ8JCkiLG4rPWh9Zm9yKG8odSwiYXBwZW5kT3B0aW9uYWwiKTtuPHIubGVuZ3RoOylzd2l0Y2gocltuXSl7Y2FzZSJcXCI6c3dpdGNoKHJbbisxXSl7Y2FzZSJjIjp1KDMpO2JyZWFrO2Nhc2UieCI6dSg0KTticmVhaztjYXNlInUiOmUudW5pY29kZT9yW24rMl09PT0ieyI/dShyLmluZGV4T2YoIn0iLG4pLW4rMSk6dSg2KTp1KDIpO2JyZWFrO2Nhc2UicCI6Y2FzZSJQIjplLnVuaWNvZGU/dShyLmluZGV4T2YoIn0iLG4pLW4rMSk6dSgyKTticmVhaztjYXNlImsiOnUoci5pbmRleE9mKCI+IixuKS1uKzEpO2JyZWFrO2RlZmF1bHQ6dSgyKTticmVha31icmVhaztjYXNlIlsiOnM9L1xbKD86XFwufC4pKj9cXS9nLHMubGFzdEluZGV4PW4scz1zLmV4ZWMocil8fFtdLHUoc1swXS5sZW5ndGgpO2JyZWFrO2Nhc2UifCI6Y2FzZSJeIjpjYXNlIiQiOmNhc2UiKiI6Y2FzZSIrIjpjYXNlIj8iOmwoMSk7YnJlYWs7Y2FzZSJ7IjpzPS9ce1xkKyw/XGQqXH0vZyxzLmxhc3RJbmRleD1uLHM9cy5leGVjKHIpLHM/bChzWzBdLmxlbmd0aCk6dSgxKTticmVhaztjYXNlIigiOmlmKHJbbisxXT09PSI/Iilzd2l0Y2gocltuKzJdKXtjYXNlIjoiOmErPSIoPzoiLG4rPTMsYSs9aSgpKyJ8JCkiO2JyZWFrO2Nhc2UiPSI6YSs9Iig/PSIsbis9MyxhKz1pKCkrIikiO2JyZWFrO2Nhc2UiISI6cz1uLG4rPTMsaSgpLGErPXIuc3Vic3RyKHMsbi1zKTticmVhaztjYXNlIjwiOnN3aXRjaChyW24rM10pe2Nhc2UiPSI6Y2FzZSIhIjpzPW4sbis9NCxpKCksYSs9ci5zdWJzdHIocyxuLXMpO2JyZWFrO2RlZmF1bHQ6bChyLmluZGV4T2YoIj4iLG4pLW4rMSksYSs9aSgpKyJ8JCkiO2JyZWFrfWJyZWFrfWVsc2UgbCgxKSxhKz1pKCkrInwkKSI7YnJlYWs7Y2FzZSIpIjpyZXR1cm4rK24sYTtkZWZhdWx0OnUoMSk7YnJlYWt9cmV0dXJuIGF9cmV0dXJuIG8oaSwicHJvY2VzcyIpLG5ldyBSZWdFeHAoaSgpLHQuZmxhZ3MpfXZhciBQTixJc2UsT04scHAsT3NlLCRnPU4oKCk9PnsidXNlIHN0cmljdCI7YXgoKTtQTj0vXHI/XG4vZ20sSXNlPW5ldyBkcCxPTj1jbGFzcyBleHRlbmRzIEZje3N0YXRpY3tvKHRoaXMsIlRlcm1pbmFsUmVnRXhwVmlzaXRvciIpfWNvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmlzU3RhcnRpbmc9ITAsdGhpcy5lbmRSZWdleHBTdGFjaz1bXSx0aGlzLm11bHRpbGluZT0hMX1nZXQgZW5kUmVnZXgoKXtyZXR1cm4gdGhpcy5lbmRSZWdleHBTdGFjay5qb2luKCIiKX1yZXNldChlKXt0aGlzLm11bHRpbGluZT0hMSx0aGlzLnJlZ2V4PWUsdGhpcy5zdGFydFJlZ2V4cD0iIix0aGlzLmlzU3RhcnRpbmc9ITAsdGhpcy5lbmRSZWdleHBTdGFjaz1bXX12aXNpdEdyb3VwKGUpe2UucXVhbnRpZmllciYmKHRoaXMuaXNTdGFydGluZz0hMSx0aGlzLmVuZFJlZ2V4cFN0YWNrPVtdKX12aXNpdENoYXJhY3RlcihlKXtsZXQgcj1TdHJpbmcuZnJvbUNoYXJDb2RlKGUudmFsdWUpO2lmKCF0aGlzLm11bHRpbGluZSYmcj09PWAKYCYmKHRoaXMubXVsdGlsaW5lPSEwKSxlLnF1YW50aWZpZXIpdGhpcy5pc1N0YXJ0aW5nPSExLHRoaXMuZW5kUmVnZXhwU3RhY2s9W107ZWxzZXtsZXQgbj1tcChyKTt0aGlzLmVuZFJlZ2V4cFN0YWNrLnB1c2gobiksdGhpcy5pc1N0YXJ0aW5nJiYodGhpcy5zdGFydFJlZ2V4cCs9bil9fXZpc2l0U2V0KGUpe2lmKCF0aGlzLm11bHRpbGluZSl7bGV0IHI9dGhpcy5yZWdleC5zdWJzdHJpbmcoZS5sb2MuYmVnaW4sZS5sb2MuZW5kKSxuPW5ldyBSZWdFeHAocik7dGhpcy5tdWx0aWxpbmU9ISFgCmAubWF0Y2gobil9aWYoZS5xdWFudGlmaWVyKXRoaXMuaXNTdGFydGluZz0hMSx0aGlzLmVuZFJlZ2V4cFN0YWNrPVtdO2Vsc2V7bGV0IHI9dGhpcy5yZWdleC5zdWJzdHJpbmcoZS5sb2MuYmVnaW4sZS5sb2MuZW5kKTt0aGlzLmVuZFJlZ2V4cFN0YWNrLnB1c2gociksdGhpcy5pc1N0YXJ0aW5nJiYodGhpcy5zdGFydFJlZ2V4cCs9cil9fXZpc2l0Q2hpbGRyZW4oZSl7ZS50eXBlPT09Ikdyb3VwIiYmZS5xdWFudGlmaWVyfHxzdXBlci52aXNpdENoaWxkcmVuKGUpfX0scHA9bmV3IE9OO28oUkJlLCJnZXRUZXJtaW5hbFBhcnRzIik7byhCTiwiaXNNdWx0aWxpbmVDb21tZW50Iik7T3NlPWBcZgpccglcdiBceEEwXHUxNjgwXHUyMDAwXHUyMDAxXHUyMDAyXHUyMDAzXHUyMDA0XHUyMDA1XHUyMDA2XHUyMDA3XHUyMDA4XHUyMDA5XHUyMDBBXHUyMDI4XHUyMDI5XHUyMDJGXHUyMDVGXHUzMDAwXHVGRUZGYC5zcGxpdCgiIik7byhGZywiaXNXaGl0ZXNwYWNlIik7byhtcCwiZXNjYXBlUmVnRXhwIik7byhGTiwiZ2V0Q2FzZUluc2Vuc2l0aXZlUGF0dGVybiIpO28oJE4sInBhcnRpYWxNYXRjaGVzIik7byhQc2UsInBhcnRpYWxSZWdFeHAiKX0pO3ZhciAkaz17fTt1cigkayx7ZmluZEFzc2lnbm1lbnQ6KCk9PlhOLGZpbmROYW1lQXNzaWdubWVudDooKT0+RmssZmluZE5vZGVGb3JLZXl3b3JkOigpPT5xTixmaW5kTm9kZUZvclByb3BlcnR5OigpPT5veCxmaW5kTm9kZXNGb3JLZXl3b3JkOigpPT5OQmUsZmluZE5vZGVzRm9yS2V5d29yZEludGVybmFsOigpPT5ZTixmaW5kTm9kZXNGb3JQcm9wZXJ0eTooKT0+SE4sZ2V0QWN0aW9uQXRFbGVtZW50OigpPT5Hc2UsZ2V0QWN0aW9uVHlwZTooKT0+VXNlLGdldEFsbFJlYWNoYWJsZVJ1bGVzOigpPT5zeCxnZXRDcm9zc1JlZmVyZW5jZVRlcm1pbmFsOigpPT5WTixnZXRFbnRyeVJ1bGU6KCk9PkJzZSxnZXRFeHBsaWNpdFJ1bGVUeXBlOigpPT56ZyxnZXRIaWRkZW5SdWxlczooKT0+RnNlLGdldFJ1bGVUeXBlOigpPT5qTixnZXRSdWxlVHlwZU5hbWU6KCk9PkJCZSxnZXRUeXBlTmFtZTooKT0+Y3gsaXNBcnJheUNhcmRpbmFsaXR5OigpPT5JQmUsaXNBcnJheU9wZXJhdG9yOigpPT5PQmUsaXNDb21tZW50VGVybWluYWw6KCk9PlVOLGlzRGF0YVR5cGU6KCk9PlBCZSxpc0RhdGFUeXBlUnVsZTooKT0+bHgsaXNPcHRpb25hbENhcmRpbmFsaXR5OigpPT5NQmUsdGVybWluYWxSZWdleDooKT0+R2d9KTtmdW5jdGlvbiBCc2UodCl7cmV0dXJuIHQucnVsZXMuZmluZChlPT5GYShlKSYmZS5lbnRyeSl9ZnVuY3Rpb24gRnNlKHQpe3JldHVybiB0LnJ1bGVzLmZpbHRlcihlPT51byhlKSYmZS5oaWRkZW4pfWZ1bmN0aW9uIHN4KHQsZSl7bGV0IHI9bmV3IFNldCxuPUJzZSh0KTtpZighbilyZXR1cm4gbmV3IFNldCh0LnJ1bGVzKTtsZXQgaT1bbl0uY29uY2F0KEZzZSh0KSk7Zm9yKGxldCBzIG9mIGkpJHNlKHMscixlKTtsZXQgYT1uZXcgU2V0O2ZvcihsZXQgcyBvZiB0LnJ1bGVzKShyLmhhcyhzLm5hbWUpfHx1byhzKSYmcy5oaWRkZW4pJiZhLmFkZChzKTtyZXR1cm4gYX1mdW5jdGlvbiAkc2UodCxlLHIpe2UuYWRkKHQubmFtZSksQmModCkuZm9yRWFjaChuPT57aWYoQmwobil8fHImJlJrKG4pKXtsZXQgaT1uLnJ1bGUucmVmO2kmJiFlLmhhcyhpLm5hbWUpJiYkc2UoaSxlLHIpfX0pfWZ1bmN0aW9uIFZOKHQpe2lmKHQudGVybWluYWwpcmV0dXJuIHQudGVybWluYWw7aWYodC50eXBlLnJlZil7bGV0IGU9RmsodC50eXBlLnJlZik7cmV0dXJuIGU/LnRlcm1pbmFsfX1mdW5jdGlvbiBVTih0KXtyZXR1cm4gdC5oaWRkZW4mJiFGZyhHZyh0KSl9ZnVuY3Rpb24gSE4odCxlKXtyZXR1cm4hdHx8IWU/W106V04odCxlLHQuYXN0Tm9kZSwhMCl9ZnVuY3Rpb24gb3godCxlLHIpe2lmKCF0fHwhZSlyZXR1cm47bGV0IG49V04odCxlLHQuYXN0Tm9kZSwhMCk7aWYobi5sZW5ndGghPT0wKXJldHVybiByIT09dm9pZCAwP3I9TWF0aC5tYXgoMCxNYXRoLm1pbihyLG4ubGVuZ3RoLTEpKTpyPTAsbltyXX1mdW5jdGlvbiBXTih0LGUscixuKXtpZighbil7bGV0IGk9aHAodC5ncmFtbWFyU291cmNlLFBsKTtpZihpJiZpLmZlYXR1cmU9PT1lKXJldHVyblt0XX1yZXR1cm4gTWwodCkmJnQuYXN0Tm9kZT09PXI/dC5jb250ZW50LmZsYXRNYXAoaT0+V04oaSxlLHIsITEpKTpbXX1mdW5jdGlvbiBOQmUodCxlKXtyZXR1cm4gdD9ZTih0LGUsdD8uYXN0Tm9kZSk6W119ZnVuY3Rpb24gcU4odCxlLHIpe2lmKCF0KXJldHVybjtsZXQgbj1ZTih0LGUsdD8uYXN0Tm9kZSk7aWYobi5sZW5ndGghPT0wKXJldHVybiByIT09dm9pZCAwP3I9TWF0aC5tYXgoMCxNYXRoLm1pbihyLG4ubGVuZ3RoLTEpKTpyPTAsbltyXX1mdW5jdGlvbiBZTih0LGUscil7aWYodC5hc3ROb2RlIT09cilyZXR1cm5bXTtpZihYbyh0LmdyYW1tYXJTb3VyY2UpJiZ0LmdyYW1tYXJTb3VyY2UudmFsdWU9PT1lKXJldHVyblt0XTtsZXQgbj1zcCh0KS5pdGVyYXRvcigpLGksYT1bXTtkbyBpZihpPW4ubmV4dCgpLCFpLmRvbmUpe2xldCBzPWkudmFsdWU7cy5hc3ROb2RlPT09cj9YbyhzLmdyYW1tYXJTb3VyY2UpJiZzLmdyYW1tYXJTb3VyY2UudmFsdWU9PT1lJiZhLnB1c2gocyk6bi5wcnVuZSgpfXdoaWxlKCFpLmRvbmUpO3JldHVybiBhfWZ1bmN0aW9uIFhOKHQpe3ZhciBlO2xldCByPXQuYXN0Tm9kZTtmb3IoO3I9PT0oKGU9dC5jb250YWluZXIpPT09bnVsbHx8ZT09PXZvaWQgMD92b2lkIDA6ZS5hc3ROb2RlKTspe2xldCBuPWhwKHQuZ3JhbW1hclNvdXJjZSxQbCk7aWYobilyZXR1cm4gbjt0PXQuY29udGFpbmVyfX1mdW5jdGlvbiBGayh0KXtsZXQgZT10O3JldHVybiBBayhlKSYmKCR1KGUuJGNvbnRhaW5lcik/ZT1lLiRjb250YWluZXIuJGNvbnRhaW5lcjpGYShlLiRjb250YWluZXIpP2U9ZS4kY29udGFpbmVyOk9jKGUuJGNvbnRhaW5lcikpLHpzZSh0LGUsbmV3IE1hcCl9ZnVuY3Rpb24genNlKHQsZSxyKXt2YXIgbjtmdW5jdGlvbiBpKGEscyl7bGV0IGw7cmV0dXJuIGhwKGEsUGwpfHwobD16c2UocyxzLHIpKSxyLnNldCh0LGwpLGx9aWYobyhpLCJnbyIpLHIuaGFzKHQpKXJldHVybiByLmdldCh0KTtyLnNldCh0LHZvaWQgMCk7Zm9yKGxldCBhIG9mIEJjKGUpKXtpZihQbChhKSYmYS5mZWF0dXJlLnRvTG93ZXJDYXNlKCk9PT0ibmFtZSIpcmV0dXJuIHIuc2V0KHQsYSksYTtpZihCbChhKSYmRmEoYS5ydWxlLnJlZikpcmV0dXJuIGkoYSxhLnJ1bGUucmVmKTtpZihEayhhKSYmKCEoKG49YS50eXBlUmVmKT09PW51bGx8fG49PT12b2lkIDApJiZuLnJlZikpcmV0dXJuIGkoYSxhLnR5cGVSZWYucmVmKX19ZnVuY3Rpb24gR3NlKHQpe2xldCBlPXQuJGNvbnRhaW5lcjtpZihmZihlKSl7bGV0IHI9ZS5lbGVtZW50cyxuPXIuaW5kZXhPZih0KTtmb3IobGV0IGk9bi0xO2k+PTA7aS0tKXtsZXQgYT1yW2ldO2lmKCR1KGEpKXJldHVybiBhO3tsZXQgcz1CYyhyW2ldKS5maW5kKCR1KTtpZihzKXJldHVybiBzfX19aWYoUTIoZSkpcmV0dXJuIEdzZShlKX1mdW5jdGlvbiBNQmUodCxlKXtyZXR1cm4gdD09PSI/Inx8dD09PSIqInx8ZmYoZSkmJiEhZS5ndWFyZENvbmRpdGlvbn1mdW5jdGlvbiBJQmUodCl7cmV0dXJuIHQ9PT0iKiJ8fHQ9PT0iKyJ9ZnVuY3Rpb24gT0JlKHQpe3JldHVybiB0PT09Iis9In1mdW5jdGlvbiBseCh0KXtyZXR1cm4gVnNlKHQsbmV3IFNldCl9ZnVuY3Rpb24gVnNlKHQsZSl7aWYoZS5oYXModCkpcmV0dXJuITA7ZS5hZGQodCk7Zm9yKGxldCByIG9mIEJjKHQpKWlmKEJsKHIpKXtpZighci5ydWxlLnJlZnx8RmEoci5ydWxlLnJlZikmJiFWc2Uoci5ydWxlLnJlZixlKSlyZXR1cm4hMX1lbHNle2lmKFBsKHIpKXJldHVybiExO2lmKCR1KHIpKXJldHVybiExfXJldHVybiEhdC5kZWZpbml0aW9ufWZ1bmN0aW9uIFBCZSh0KXtyZXR1cm4gR04odC50eXBlLG5ldyBTZXQpfWZ1bmN0aW9uIEdOKHQsZSl7aWYoZS5oYXModCkpcmV0dXJuITA7aWYoZS5hZGQodCksZk4odCkpcmV0dXJuITE7aWYodk4odCkpcmV0dXJuITE7aWYoYk4odCkpcmV0dXJuIHQudHlwZXMuZXZlcnkocj0+R04ocixlKSk7aWYoRGsodCkpe2lmKHQucHJpbWl0aXZlVHlwZSE9PXZvaWQgMClyZXR1cm4hMDtpZih0LnN0cmluZ1R5cGUhPT12b2lkIDApcmV0dXJuITA7aWYodC50eXBlUmVmIT09dm9pZCAwKXtsZXQgcj10LnR5cGVSZWYucmVmO3JldHVybiBaMihyKT9HTihyLnR5cGUsZSk6ITF9ZWxzZSByZXR1cm4hMX1lbHNlIHJldHVybiExfWZ1bmN0aW9uIHpnKHQpe2lmKHQuaW5mZXJyZWRUeXBlKXJldHVybiB0LmluZmVycmVkVHlwZS5uYW1lO2lmKHQuZGF0YVR5cGUpcmV0dXJuIHQuZGF0YVR5cGU7aWYodC5yZXR1cm5UeXBlKXtsZXQgZT10LnJldHVyblR5cGUucmVmO2lmKGUpe2lmKEZhKGUpKXJldHVybiBlLm5hbWU7aWYoX2soZSl8fFoyKGUpKXJldHVybiBlLm5hbWV9fX1mdW5jdGlvbiBjeCh0KXt2YXIgZTtpZihGYSh0KSlyZXR1cm4gbHgodCk/dC5uYW1lOihlPXpnKHQpKSE9PW51bGwmJmUhPT12b2lkIDA/ZTp0Lm5hbWU7aWYoX2sodCl8fFoyKHQpfHx4Tih0KSlyZXR1cm4gdC5uYW1lO2lmKCR1KHQpKXtsZXQgcj1Vc2UodCk7aWYocilyZXR1cm4gcn1lbHNlIGlmKEFrKHQpKXJldHVybiB0Lm5hbWU7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZ2V0IG5hbWUgb2YgVW5rbm93biBUeXBlIil9ZnVuY3Rpb24gVXNlKHQpe3ZhciBlO2lmKHQuaW5mZXJyZWRUeXBlKXJldHVybiB0LmluZmVycmVkVHlwZS5uYW1lO2lmKCEoKGU9dC50eXBlKT09PW51bGx8fGU9PT12b2lkIDApJiZlLnJlZilyZXR1cm4gY3godC50eXBlLnJlZil9ZnVuY3Rpb24gQkJlKHQpe3ZhciBlLHIsbjtyZXR1cm4gdW8odCk/KHI9KGU9dC50eXBlKT09PW51bGx8fGU9PT12b2lkIDA/dm9pZCAwOmUubmFtZSkhPT1udWxsJiZyIT09dm9pZCAwP3I6InN0cmluZyI6bHgodCk/dC5uYW1lOihuPXpnKHQpKSE9PW51bGwmJm4hPT12b2lkIDA/bjp0Lm5hbWV9ZnVuY3Rpb24gak4odCl7dmFyIGUscixuO3JldHVybiB1byh0KT8ocj0oZT10LnR5cGUpPT09bnVsbHx8ZT09PXZvaWQgMD92b2lkIDA6ZS5uYW1lKSE9PW51bGwmJnIhPT12b2lkIDA/cjoic3RyaW5nIjoobj16Zyh0KSkhPT1udWxsJiZuIT09dm9pZCAwP246dC5uYW1lfWZ1bmN0aW9uIEdnKHQpe2xldCBlPXtzOiExLGk6ITEsdTohMX0scj1WZyh0LmRlZmluaXRpb24sZSksbj1PYmplY3QuZW50cmllcyhlKS5maWx0ZXIoKFssaV0pPT5pKS5tYXAoKFtpXSk9PmkpLmpvaW4oIiIpO3JldHVybiBuZXcgUmVnRXhwKHIsbil9ZnVuY3Rpb24gVmcodCxlKXtpZihTTih0KSlyZXR1cm4gRkJlKHQpO2lmKENOKHQpKXJldHVybiAkQmUodCk7aWYoVE4odCkpcmV0dXJuIFZCZSh0KTtpZihSayh0KSl7bGV0IHI9dC5ydWxlLnJlZjtpZighcil0aHJvdyBuZXcgRXJyb3IoIk1pc3NpbmcgcnVsZSByZWZlcmVuY2UuIik7cmV0dXJuIHp1KFZnKHIuZGVmaW5pdGlvbikse2NhcmRpbmFsaXR5OnQuY2FyZGluYWxpdHksbG9va2FoZWFkOnQubG9va2FoZWFkfSl9ZWxzZXtpZihrTih0KSlyZXR1cm4gR0JlKHQpO2lmKEFOKHQpKXJldHVybiB6QmUodCk7aWYoRU4odCkpe2xldCByPXQucmVnZXgubGFzdEluZGV4T2YoIi8iKSxuPXQucmVnZXguc3Vic3RyaW5nKDEsciksaT10LnJlZ2V4LnN1YnN0cmluZyhyKzEpO3JldHVybiBlJiYoZS5pPWkuaW5jbHVkZXMoImkiKSxlLnM9aS5pbmNsdWRlcygicyIpLGUudT1pLmluY2x1ZGVzKCJ1IikpLHp1KG4se2NhcmRpbmFsaXR5OnQuY2FyZGluYWxpdHksbG9va2FoZWFkOnQubG9va2FoZWFkLHdyYXA6ITF9KX1lbHNle2lmKF9OKHQpKXJldHVybiB6dShLTix7Y2FyZGluYWxpdHk6dC5jYXJkaW5hbGl0eSxsb29rYWhlYWQ6dC5sb29rYWhlYWR9KTt0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdGVybWluYWwgZWxlbWVudDogJHt0Py4kdHlwZX1gKX19fWZ1bmN0aW9uIEZCZSh0KXtyZXR1cm4genUodC5lbGVtZW50cy5tYXAoZT0+VmcoZSkpLmpvaW4oInwiKSx7Y2FyZGluYWxpdHk6dC5jYXJkaW5hbGl0eSxsb29rYWhlYWQ6dC5sb29rYWhlYWR9KX1mdW5jdGlvbiAkQmUodCl7cmV0dXJuIHp1KHQuZWxlbWVudHMubWFwKGU9PlZnKGUpKS5qb2luKCIiKSx7Y2FyZGluYWxpdHk6dC5jYXJkaW5hbGl0eSxsb29rYWhlYWQ6dC5sb29rYWhlYWR9KX1mdW5jdGlvbiB6QmUodCl7cmV0dXJuIHp1KGAke0tOfSo/JHtWZyh0LnRlcm1pbmFsKX1gLHtjYXJkaW5hbGl0eTp0LmNhcmRpbmFsaXR5LGxvb2thaGVhZDp0Lmxvb2thaGVhZH0pfWZ1bmN0aW9uIEdCZSh0KXtyZXR1cm4genUoYCg/ISR7VmcodC50ZXJtaW5hbCl9KSR7S059Kj9gLHtjYXJkaW5hbGl0eTp0LmNhcmRpbmFsaXR5LGxvb2thaGVhZDp0Lmxvb2thaGVhZH0pfWZ1bmN0aW9uIFZCZSh0KXtyZXR1cm4gdC5yaWdodD96dShgWyR7ek4odC5sZWZ0KX0tJHt6Tih0LnJpZ2h0KX1dYCx7Y2FyZGluYWxpdHk6dC5jYXJkaW5hbGl0eSxsb29rYWhlYWQ6dC5sb29rYWhlYWQsd3JhcDohMX0pOnp1KHpOKHQubGVmdCkse2NhcmRpbmFsaXR5OnQuY2FyZGluYWxpdHksbG9va2FoZWFkOnQubG9va2FoZWFkLHdyYXA6ITF9KX1mdW5jdGlvbiB6Tih0KXtyZXR1cm4gbXAodC52YWx1ZSl9ZnVuY3Rpb24genUodCxlKXt2YXIgcjtyZXR1cm4oZS53cmFwIT09ITF8fGUubG9va2FoZWFkKSYmKHQ9YCgkeyhyPWUubG9va2FoZWFkKSE9PW51bGwmJnIhPT12b2lkIDA/cjoiIn0ke3R9KWApLGUuY2FyZGluYWxpdHk/YCR7dH0ke2UuY2FyZGluYWxpdHl9YDp0fXZhciBLTixGbD1OKCgpPT57InVzZSBzdHJpY3QiO1NrKCk7UGMoKTtJbCgpO2NzKCk7T2woKTskZygpO28oQnNlLCJnZXRFbnRyeVJ1bGUiKTtvKEZzZSwiZ2V0SGlkZGVuUnVsZXMiKTtvKHN4LCJnZXRBbGxSZWFjaGFibGVSdWxlcyIpO28oJHNlLCJydWxlRGZzIik7byhWTiwiZ2V0Q3Jvc3NSZWZlcmVuY2VUZXJtaW5hbCIpO28oVU4sImlzQ29tbWVudFRlcm1pbmFsIik7byhITiwiZmluZE5vZGVzRm9yUHJvcGVydHkiKTtvKG94LCJmaW5kTm9kZUZvclByb3BlcnR5Iik7byhXTiwiZmluZE5vZGVzRm9yUHJvcGVydHlJbnRlcm5hbCIpO28oTkJlLCJmaW5kTm9kZXNGb3JLZXl3b3JkIik7byhxTiwiZmluZE5vZGVGb3JLZXl3b3JkIik7byhZTiwiZmluZE5vZGVzRm9yS2V5d29yZEludGVybmFsIik7byhYTiwiZmluZEFzc2lnbm1lbnQiKTtvKEZrLCJmaW5kTmFtZUFzc2lnbm1lbnQiKTtvKHpzZSwiZmluZE5hbWVBc3NpZ25tZW50SW50ZXJuYWwiKTtvKEdzZSwiZ2V0QWN0aW9uQXRFbGVtZW50Iik7byhNQmUsImlzT3B0aW9uYWxDYXJkaW5hbGl0eSIpO28oSUJlLCJpc0FycmF5Q2FyZGluYWxpdHkiKTtvKE9CZSwiaXNBcnJheU9wZXJhdG9yIik7byhseCwiaXNEYXRhVHlwZVJ1bGUiKTtvKFZzZSwiaXNEYXRhVHlwZVJ1bGVJbnRlcm5hbCIpO28oUEJlLCJpc0RhdGFUeXBlIik7byhHTiwiaXNEYXRhVHlwZUludGVybmFsIik7byh6ZywiZ2V0RXhwbGljaXRSdWxlVHlwZSIpO28oY3gsImdldFR5cGVOYW1lIik7byhVc2UsImdldEFjdGlvblR5cGUiKTtvKEJCZSwiZ2V0UnVsZVR5cGVOYW1lIik7byhqTiwiZ2V0UnVsZVR5cGUiKTtvKEdnLCJ0ZXJtaW5hbFJlZ2V4Iik7S049L1tcc1xTXS8uc291cmNlO28oVmcsImFic3RyYWN0RWxlbWVudFRvUmVnZXgiKTtvKEZCZSwidGVybWluYWxBbHRlcm5hdGl2ZXNUb1JlZ2V4Iik7bygkQmUsInRlcm1pbmFsR3JvdXBUb1JlZ2V4Iik7byh6QmUsInVudGlsVG9rZW5Ub1JlZ2V4Iik7byhHQmUsIm5lZ2F0ZVRva2VuVG9SZWdleCIpO28oVkJlLCJjaGFyYWN0ZXJSYW5nZVRvUmVnZXgiKTtvKHpOLCJrZXl3b3JkVG9SZWdleCIpO28oenUsIndpdGhDYXJkaW5hbGl0eSIpfSk7ZnVuY3Rpb24gUU4odCl7bGV0IGU9W10scj10LkdyYW1tYXI7Zm9yKGxldCBuIG9mIHIucnVsZXMpdW8obikmJlVOKG4pJiZCTihHZyhuKSkmJmUucHVzaChuLm5hbWUpO3JldHVybnttdWx0aWxpbmVDb21tZW50UnVsZXM6ZSxuYW1lUmVnZXhwOmtrfX12YXIgWk49TigoKT0+eyJ1c2Ugc3RyaWN0IjtPbCgpO0ZsKCk7JGcoKTtQYygpO28oUU4sImNyZWF0ZUdyYW1tYXJDb25maWciKX0pO3ZhciBKTj1OKCgpPT57InVzZSBzdHJpY3QifSk7ZnVuY3Rpb24gVWcodCl7Y29uc29sZSYmY29uc29sZS5lcnJvciYmY29uc29sZS5lcnJvcihgRXJyb3I6ICR7dH1gKX1mdW5jdGlvbiB1eCh0KXtjb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybihgV2FybmluZzogJHt0fWApfXZhciBIc2U9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKFVnLCJQUklOVF9FUlJPUiIpO28odXgsIlBSSU5UX1dBUk5JTkciKX0pO2Z1bmN0aW9uIGh4KHQpe2xldCBlPW5ldyBEYXRlKCkuZ2V0VGltZSgpLHI9dCgpO3JldHVybnt0aW1lOm5ldyBEYXRlKCkuZ2V0VGltZSgpLWUsdmFsdWU6cn19dmFyIFdzZT1OKCgpPT57InVzZSBzdHJpY3QiO28oaHgsInRpbWVyIil9KTtmdW5jdGlvbiBmeCh0KXtmdW5jdGlvbiBlKCl7fW8oZSwiRmFrZUNvbnN0cnVjdG9yIiksZS5wcm90b3R5cGU9dDtsZXQgcj1uZXcgZTtmdW5jdGlvbiBuKCl7cmV0dXJuIHR5cGVvZiByLmJhcn1yZXR1cm4gbyhuLCJmYWtlQWNjZXNzIiksbigpLG4oKSx0OygwLGV2YWwpKHQpfXZhciBxc2U9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKGZ4LCJ0b0Zhc3RQcm9wZXJ0aWVzIil9KTt2YXIgSGc9TigoKT0+eyJ1c2Ugc3RyaWN0IjtIc2UoKTtXc2UoKTtxc2UoKX0pO2Z1bmN0aW9uIFVCZSh0KXtyZXR1cm4gSEJlKHQpP3QuTEFCRUw6dC5uYW1lfWZ1bmN0aW9uIEhCZSh0KXtyZXR1cm4gVGkodC5MQUJFTCkmJnQuTEFCRUwhPT0iIn1mdW5jdGlvbiB6ayh0KXtyZXR1cm4gSmUodCxXZyl9ZnVuY3Rpb24gV2codCl7ZnVuY3Rpb24gZShyKXtyZXR1cm4gSmUocixXZyl9aWYobyhlLCJjb252ZXJ0RGVmaW5pdGlvbiIpLHQgaW5zdGFuY2VvZiBvbil7bGV0IHI9e3R5cGU6Ik5vblRlcm1pbmFsIixuYW1lOnQubm9uVGVybWluYWxOYW1lLGlkeDp0LmlkeH07cmV0dXJuIFRpKHQubGFiZWwpJiYoci5sYWJlbD10LmxhYmVsKSxyfWVsc2V7aWYodCBpbnN0YW5jZW9mIERuKXJldHVybnt0eXBlOiJBbHRlcm5hdGl2ZSIsZGVmaW5pdGlvbjplKHQuZGVmaW5pdGlvbil9O2lmKHQgaW5zdGFuY2VvZiBsbilyZXR1cm57dHlwZToiT3B0aW9uIixpZHg6dC5pZHgsZGVmaW5pdGlvbjplKHQuZGVmaW5pdGlvbil9O2lmKHQgaW5zdGFuY2VvZiBMbilyZXR1cm57dHlwZToiUmVwZXRpdGlvbk1hbmRhdG9yeSIsaWR4OnQuaWR4LGRlZmluaXRpb246ZSh0LmRlZmluaXRpb24pfTtpZih0IGluc3RhbmNlb2YgUm4pcmV0dXJue3R5cGU6IlJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yIixpZHg6dC5pZHgsc2VwYXJhdG9yOldnKG5ldyBFcih7dGVybWluYWxUeXBlOnQuc2VwYXJhdG9yfSkpLGRlZmluaXRpb246ZSh0LmRlZmluaXRpb24pfTtpZih0IGluc3RhbmNlb2YgVG4pcmV0dXJue3R5cGU6IlJlcGV0aXRpb25XaXRoU2VwYXJhdG9yIixpZHg6dC5pZHgsc2VwYXJhdG9yOldnKG5ldyBFcih7dGVybWluYWxUeXBlOnQuc2VwYXJhdG9yfSkpLGRlZmluaXRpb246ZSh0LmRlZmluaXRpb24pfTtpZih0IGluc3RhbmNlb2YgUHIpcmV0dXJue3R5cGU6IlJlcGV0aXRpb24iLGlkeDp0LmlkeCxkZWZpbml0aW9uOmUodC5kZWZpbml0aW9uKX07aWYodCBpbnN0YW5jZW9mIHduKXJldHVybnt0eXBlOiJBbHRlcm5hdGlvbiIsaWR4OnQuaWR4LGRlZmluaXRpb246ZSh0LmRlZmluaXRpb24pfTtpZih0IGluc3RhbmNlb2YgRXIpe2xldCByPXt0eXBlOiJUZXJtaW5hbCIsbmFtZTp0LnRlcm1pbmFsVHlwZS5uYW1lLGxhYmVsOlVCZSh0LnRlcm1pbmFsVHlwZSksaWR4OnQuaWR4fTtUaSh0LmxhYmVsKSYmKHIudGVybWluYWxMYWJlbD10LmxhYmVsKTtsZXQgbj10LnRlcm1pbmFsVHlwZS5QQVRURVJOO3JldHVybiB0LnRlcm1pbmFsVHlwZS5QQVRURVJOJiYoci5wYXR0ZXJuPVVvKG4pP24uc291cmNlOm4pLHJ9ZWxzZXtpZih0IGluc3RhbmNlb2YgdXMpcmV0dXJue3R5cGU6IlJ1bGUiLG5hbWU6dC5uYW1lLG9yZ1RleHQ6dC5vcmdUZXh0LGRlZmluaXRpb246ZSh0LmRlZmluaXRpb24pfTt0aHJvdyBFcnJvcigibm9uIGV4aGF1c3RpdmUgbWF0Y2giKX19fXZhciBobyxvbix1cyxEbixsbixMbixSbixQcixUbix3bixFcixHaz1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7byhVQmUsInRva2VuTGFiZWwiKTtvKEhCZSwiaGFzVG9rZW5MYWJlbCIpO2hvPWNsYXNze3N0YXRpY3tvKHRoaXMsIkFic3RyYWN0UHJvZHVjdGlvbiIpfWdldCBkZWZpbml0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmluaXRpb259c2V0IGRlZmluaXRpb24oZSl7dGhpcy5fZGVmaW5pdGlvbj1lfWNvbnN0cnVjdG9yKGUpe3RoaXMuX2RlZmluaXRpb249ZX1hY2NlcHQoZSl7ZS52aXNpdCh0aGlzKSxBZSh0aGlzLmRlZmluaXRpb24scj0+e3IuYWNjZXB0KGUpfSl9fSxvbj1jbGFzcyBleHRlbmRzIGhve3N0YXRpY3tvKHRoaXMsIk5vblRlcm1pbmFsIil9Y29uc3RydWN0b3IoZSl7c3VwZXIoW10pLHRoaXMuaWR4PTEscGEodGhpcyx6cyhlLHI9PnIhPT12b2lkIDApKX1zZXQgZGVmaW5pdGlvbihlKXt9Z2V0IGRlZmluaXRpb24oKXtyZXR1cm4gdGhpcy5yZWZlcmVuY2VkUnVsZSE9PXZvaWQgMD90aGlzLnJlZmVyZW5jZWRSdWxlLmRlZmluaXRpb246W119YWNjZXB0KGUpe2UudmlzaXQodGhpcyl9fSx1cz1jbGFzcyBleHRlbmRzIGhve3N0YXRpY3tvKHRoaXMsIlJ1bGUiKX1jb25zdHJ1Y3RvcihlKXtzdXBlcihlLmRlZmluaXRpb24pLHRoaXMub3JnVGV4dD0iIixwYSh0aGlzLHpzKGUscj0+ciE9PXZvaWQgMCkpfX0sRG49Y2xhc3MgZXh0ZW5kcyBob3tzdGF0aWN7byh0aGlzLCJBbHRlcm5hdGl2ZSIpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKGUuZGVmaW5pdGlvbiksdGhpcy5pZ25vcmVBbWJpZ3VpdGllcz0hMSxwYSh0aGlzLHpzKGUscj0+ciE9PXZvaWQgMCkpfX0sbG49Y2xhc3MgZXh0ZW5kcyBob3tzdGF0aWN7byh0aGlzLCJPcHRpb24iKX1jb25zdHJ1Y3RvcihlKXtzdXBlcihlLmRlZmluaXRpb24pLHRoaXMuaWR4PTEscGEodGhpcyx6cyhlLHI9PnIhPT12b2lkIDApKX19LExuPWNsYXNzIGV4dGVuZHMgaG97c3RhdGlje28odGhpcywiUmVwZXRpdGlvbk1hbmRhdG9yeSIpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKGUuZGVmaW5pdGlvbiksdGhpcy5pZHg9MSxwYSh0aGlzLHpzKGUscj0+ciE9PXZvaWQgMCkpfX0sUm49Y2xhc3MgZXh0ZW5kcyBob3tzdGF0aWN7byh0aGlzLCJSZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvciIpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKGUuZGVmaW5pdGlvbiksdGhpcy5pZHg9MSxwYSh0aGlzLHpzKGUscj0+ciE9PXZvaWQgMCkpfX0sUHI9Y2xhc3MgZXh0ZW5kcyBob3tzdGF0aWN7byh0aGlzLCJSZXBldGl0aW9uIil9Y29uc3RydWN0b3IoZSl7c3VwZXIoZS5kZWZpbml0aW9uKSx0aGlzLmlkeD0xLHBhKHRoaXMsenMoZSxyPT5yIT09dm9pZCAwKSl9fSxUbj1jbGFzcyBleHRlbmRzIGhve3N0YXRpY3tvKHRoaXMsIlJlcGV0aXRpb25XaXRoU2VwYXJhdG9yIil9Y29uc3RydWN0b3IoZSl7c3VwZXIoZS5kZWZpbml0aW9uKSx0aGlzLmlkeD0xLHBhKHRoaXMsenMoZSxyPT5yIT09dm9pZCAwKSl9fSx3bj1jbGFzcyBleHRlbmRzIGhve3N0YXRpY3tvKHRoaXMsIkFsdGVybmF0aW9uIil9Z2V0IGRlZmluaXRpb24oKXtyZXR1cm4gdGhpcy5fZGVmaW5pdGlvbn1zZXQgZGVmaW5pdGlvbihlKXt0aGlzLl9kZWZpbml0aW9uPWV9Y29uc3RydWN0b3IoZSl7c3VwZXIoZS5kZWZpbml0aW9uKSx0aGlzLmlkeD0xLHRoaXMuaWdub3JlQW1iaWd1aXRpZXM9ITEsdGhpcy5oYXNQcmVkaWNhdGVzPSExLHBhKHRoaXMsenMoZSxyPT5yIT09dm9pZCAwKSl9fSxFcj1jbGFzc3tzdGF0aWN7byh0aGlzLCJUZXJtaW5hbCIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuaWR4PTEscGEodGhpcyx6cyhlLHI9PnIhPT12b2lkIDApKX1hY2NlcHQoZSl7ZS52aXNpdCh0aGlzKX19O28oemssInNlcmlhbGl6ZUdyYW1tYXIiKTtvKFdnLCJzZXJpYWxpemVQcm9kdWN0aW9uIil9KTt2YXIgaHMsWXNlPU4oKCk9PnsidXNlIHN0cmljdCI7R2soKTtocz1jbGFzc3tzdGF0aWN7byh0aGlzLCJHQXN0VmlzaXRvciIpfXZpc2l0KGUpe2xldCByPWU7c3dpdGNoKHIuY29uc3RydWN0b3Ipe2Nhc2Ugb246cmV0dXJuIHRoaXMudmlzaXROb25UZXJtaW5hbChyKTtjYXNlIERuOnJldHVybiB0aGlzLnZpc2l0QWx0ZXJuYXRpdmUocik7Y2FzZSBsbjpyZXR1cm4gdGhpcy52aXNpdE9wdGlvbihyKTtjYXNlIExuOnJldHVybiB0aGlzLnZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeShyKTtjYXNlIFJuOnJldHVybiB0aGlzLnZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3Iocik7Y2FzZSBUbjpyZXR1cm4gdGhpcy52aXNpdFJlcGV0aXRpb25XaXRoU2VwYXJhdG9yKHIpO2Nhc2UgUHI6cmV0dXJuIHRoaXMudmlzaXRSZXBldGl0aW9uKHIpO2Nhc2Ugd246cmV0dXJuIHRoaXMudmlzaXRBbHRlcm5hdGlvbihyKTtjYXNlIEVyOnJldHVybiB0aGlzLnZpc2l0VGVybWluYWwocik7Y2FzZSB1czpyZXR1cm4gdGhpcy52aXNpdFJ1bGUocik7ZGVmYXVsdDp0aHJvdyBFcnJvcigibm9uIGV4aGF1c3RpdmUgbWF0Y2giKX19dmlzaXROb25UZXJtaW5hbChlKXt9dmlzaXRBbHRlcm5hdGl2ZShlKXt9dmlzaXRPcHRpb24oZSl7fXZpc2l0UmVwZXRpdGlvbihlKXt9dmlzaXRSZXBldGl0aW9uTWFuZGF0b3J5KGUpe312aXNpdFJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yKGUpe312aXNpdFJlcGV0aXRpb25XaXRoU2VwYXJhdG9yKGUpe312aXNpdEFsdGVybmF0aW9uKGUpe312aXNpdFRlcm1pbmFsKGUpe312aXNpdFJ1bGUoZSl7fX19KTtmdW5jdGlvbiBlTSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIERufHx0IGluc3RhbmNlb2YgbG58fHQgaW5zdGFuY2VvZiBQcnx8dCBpbnN0YW5jZW9mIExufHx0IGluc3RhbmNlb2YgUm58fHQgaW5zdGFuY2VvZiBUbnx8dCBpbnN0YW5jZW9mIEVyfHx0IGluc3RhbmNlb2YgdXN9ZnVuY3Rpb24gZ3AodCxlPVtdKXtyZXR1cm4gdCBpbnN0YW5jZW9mIGxufHx0IGluc3RhbmNlb2YgUHJ8fHQgaW5zdGFuY2VvZiBUbj8hMDp0IGluc3RhbmNlb2Ygd24/QjIodC5kZWZpbml0aW9uLG49PmdwKG4sZSkpOnQgaW5zdGFuY2VvZiBvbiYmWG4oZSx0KT8hMTp0IGluc3RhbmNlb2YgaG8/KHQgaW5zdGFuY2VvZiBvbiYmZS5wdXNoKHQpLFBhKHQuZGVmaW5pdGlvbixuPT5ncChuLGUpKSk6ITF9ZnVuY3Rpb24gdE0odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB3bn1mdW5jdGlvbiBWcyh0KXtpZih0IGluc3RhbmNlb2Ygb24pcmV0dXJuIlNVQlJVTEUiO2lmKHQgaW5zdGFuY2VvZiBsbilyZXR1cm4iT1BUSU9OIjtpZih0IGluc3RhbmNlb2Ygd24pcmV0dXJuIk9SIjtpZih0IGluc3RhbmNlb2YgTG4pcmV0dXJuIkFUX0xFQVNUX09ORSI7aWYodCBpbnN0YW5jZW9mIFJuKXJldHVybiJBVF9MRUFTVF9PTkVfU0VQIjtpZih0IGluc3RhbmNlb2YgVG4pcmV0dXJuIk1BTllfU0VQIjtpZih0IGluc3RhbmNlb2YgUHIpcmV0dXJuIk1BTlkiO2lmKHQgaW5zdGFuY2VvZiBFcilyZXR1cm4iQ09OU1VNRSI7dGhyb3cgRXJyb3IoIm5vbiBleGhhdXN0aXZlIG1hdGNoIil9dmFyIFhzZT1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7R2soKTtvKGVNLCJpc1NlcXVlbmNlUHJvZCIpO28oZ3AsImlzT3B0aW9uYWxQcm9kIik7byh0TSwiaXNCcmFuY2hpbmdQcm9kIik7byhWcywiZ2V0UHJvZHVjdGlvbkRzbE5hbWUiKX0pO3ZhciBmcz1OKCgpPT57InVzZSBzdHJpY3QiO0drKCk7WXNlKCk7WHNlKCl9KTtmdW5jdGlvbiBqc2UodCxlLHIpe3JldHVybltuZXcgbG4oe2RlZmluaXRpb246W25ldyBFcih7dGVybWluYWxUeXBlOnQuc2VwYXJhdG9yfSldLmNvbmNhdCh0LmRlZmluaXRpb24pfSldLmNvbmNhdChlLHIpfXZhciBHdSxWaz1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7ZnMoKTtHdT1jbGFzc3tzdGF0aWN7byh0aGlzLCJSZXN0V2Fsa2VyIil9d2FsayhlLHI9W10pe0FlKGUuZGVmaW5pdGlvbiwobixpKT0+e2xldCBhPWJpKGUuZGVmaW5pdGlvbixpKzEpO2lmKG4gaW5zdGFuY2VvZiBvbil0aGlzLndhbGtQcm9kUmVmKG4sYSxyKTtlbHNlIGlmKG4gaW5zdGFuY2VvZiBFcil0aGlzLndhbGtUZXJtaW5hbChuLGEscik7ZWxzZSBpZihuIGluc3RhbmNlb2YgRG4pdGhpcy53YWxrRmxhdChuLGEscik7ZWxzZSBpZihuIGluc3RhbmNlb2YgbG4pdGhpcy53YWxrT3B0aW9uKG4sYSxyKTtlbHNlIGlmKG4gaW5zdGFuY2VvZiBMbil0aGlzLndhbGtBdExlYXN0T25lKG4sYSxyKTtlbHNlIGlmKG4gaW5zdGFuY2VvZiBSbil0aGlzLndhbGtBdExlYXN0T25lU2VwKG4sYSxyKTtlbHNlIGlmKG4gaW5zdGFuY2VvZiBUbil0aGlzLndhbGtNYW55U2VwKG4sYSxyKTtlbHNlIGlmKG4gaW5zdGFuY2VvZiBQcil0aGlzLndhbGtNYW55KG4sYSxyKTtlbHNlIGlmKG4gaW5zdGFuY2VvZiB3bil0aGlzLndhbGtPcihuLGEscik7ZWxzZSB0aHJvdyBFcnJvcigibm9uIGV4aGF1c3RpdmUgbWF0Y2giKX0pfXdhbGtUZXJtaW5hbChlLHIsbil7fXdhbGtQcm9kUmVmKGUscixuKXt9d2Fsa0ZsYXQoZSxyLG4pe2xldCBpPXIuY29uY2F0KG4pO3RoaXMud2FsayhlLGkpfXdhbGtPcHRpb24oZSxyLG4pe2xldCBpPXIuY29uY2F0KG4pO3RoaXMud2FsayhlLGkpfXdhbGtBdExlYXN0T25lKGUscixuKXtsZXQgaT1bbmV3IGxuKHtkZWZpbml0aW9uOmUuZGVmaW5pdGlvbn0pXS5jb25jYXQocixuKTt0aGlzLndhbGsoZSxpKX13YWxrQXRMZWFzdE9uZVNlcChlLHIsbil7bGV0IGk9anNlKGUscixuKTt0aGlzLndhbGsoZSxpKX13YWxrTWFueShlLHIsbil7bGV0IGk9W25ldyBsbih7ZGVmaW5pdGlvbjplLmRlZmluaXRpb259KV0uY29uY2F0KHIsbik7dGhpcy53YWxrKGUsaSl9d2Fsa01hbnlTZXAoZSxyLG4pe2xldCBpPWpzZShlLHIsbik7dGhpcy53YWxrKGUsaSl9d2Fsa09yKGUscixuKXtsZXQgaT1yLmNvbmNhdChuKTtBZShlLmRlZmluaXRpb24sYT0+e2xldCBzPW5ldyBEbih7ZGVmaW5pdGlvbjpbYV19KTt0aGlzLndhbGsocyxpKX0pfX07byhqc2UsInJlc3RGb3JSZXBldGl0aW9uV2l0aFNlcGFyYXRvciIpfSk7ZnVuY3Rpb24geXAodCl7aWYodCBpbnN0YW5jZW9mIG9uKXJldHVybiB5cCh0LnJlZmVyZW5jZWRSdWxlKTtpZih0IGluc3RhbmNlb2YgRXIpcmV0dXJuIFlCZSh0KTtpZihlTSh0KSlyZXR1cm4gV0JlKHQpO2lmKHRNKHQpKXJldHVybiBxQmUodCk7dGhyb3cgRXJyb3IoIm5vbiBleGhhdXN0aXZlIG1hdGNoIil9ZnVuY3Rpb24gV0JlKHQpe2xldCBlPVtdLHI9dC5kZWZpbml0aW9uLG49MCxpPXIubGVuZ3RoPm4sYSxzPSEwO2Zvcig7aSYmczspYT1yW25dLHM9Z3AoYSksZT1lLmNvbmNhdCh5cChhKSksbj1uKzEsaT1yLmxlbmd0aD5uO3JldHVybiBxbShlKX1mdW5jdGlvbiBxQmUodCl7bGV0IGU9SmUodC5kZWZpbml0aW9uLHI9PnlwKHIpKTtyZXR1cm4gcW0ocXIoZSkpfWZ1bmN0aW9uIFlCZSh0KXtyZXR1cm5bdC50ZXJtaW5hbFR5cGVdfXZhciByTT1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7ZnMoKTtvKHlwLCJmaXJzdCIpO28oV0JlLCJmaXJzdEZvclNlcXVlbmNlIik7byhxQmUsImZpcnN0Rm9yQnJhbmNoaW5nIik7byhZQmUsImZpcnN0Rm9yVGVybWluYWwiKX0pO3ZhciBVayxuTT1OKCgpPT57InVzZSBzdHJpY3QiO1VrPSJffklOfl8ifSk7ZnVuY3Rpb24gS3NlKHQpe2xldCBlPXt9O3JldHVybiBBZSh0LHI9PntsZXQgbj1uZXcgaU0ocikuc3RhcnRXYWxraW5nKCk7cGEoZSxuKX0pLGV9ZnVuY3Rpb24gWEJlKHQsZSl7cmV0dXJuIHQubmFtZStlK1VrfXZhciBpTSxRc2U9TigoKT0+eyJ1c2Ugc3RyaWN0IjtWaygpO3JNKCk7cXQoKTtuTSgpO2ZzKCk7aU09Y2xhc3MgZXh0ZW5kcyBHdXtzdGF0aWN7byh0aGlzLCJSZXN5bmNGb2xsb3dzV2Fsa2VyIil9Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLnRvcFByb2Q9ZSx0aGlzLmZvbGxvd3M9e319c3RhcnRXYWxraW5nKCl7cmV0dXJuIHRoaXMud2Fsayh0aGlzLnRvcFByb2QpLHRoaXMuZm9sbG93c313YWxrVGVybWluYWwoZSxyLG4pe313YWxrUHJvZFJlZihlLHIsbil7bGV0IGk9WEJlKGUucmVmZXJlbmNlZFJ1bGUsZS5pZHgpK3RoaXMudG9wUHJvZC5uYW1lLGE9ci5jb25jYXQobikscz1uZXcgRG4oe2RlZmluaXRpb246YX0pLGw9eXAocyk7dGhpcy5mb2xsb3dzW2ldPWx9fTtvKEtzZSwiY29tcHV0ZUFsbFByb2RzRm9sbG93cyIpO28oWEJlLCJidWlsZEJldHdlZW5Qcm9kc0ZvbGxvd1ByZWZpeCIpfSk7ZnVuY3Rpb24gcWcodCl7bGV0IGU9dC50b1N0cmluZygpO2lmKEhrLmhhc093blByb3BlcnR5KGUpKXJldHVybiBIa1tlXTt7bGV0IHI9akJlLnBhdHRlcm4oZSk7cmV0dXJuIEhrW2VdPXIscn19ZnVuY3Rpb24gWnNlKCl7SGs9e319dmFyIEhrLGpCZSxXaz1OKCgpPT57InVzZSBzdHJpY3QiO2F4KCk7SGs9e30sakJlPW5ldyBkcDtvKHFnLCJnZXRSZWdFeHBBc3QiKTtvKFpzZSwiY2xlYXJSZWdFeHBQYXJzZXJDYWNoZSIpfSk7ZnVuY3Rpb24gdG9lKHQsZT0hMSl7dHJ5e2xldCByPXFnKHQpO3JldHVybiBhTShyLnZhbHVlLHt9LHIuZmxhZ3MuaWdub3JlQ2FzZSl9Y2F0Y2gocil7aWYoci5tZXNzYWdlPT09ZW9lKWUmJnV4KGAke2R4fQlVbmFibGUgdG8gb3B0aW1pemU6IDwgJHt0LnRvU3RyaW5nKCl9ID4KCUNvbXBsZW1lbnQgU2V0cyBjYW5ub3QgYmUgYXV0b21hdGljYWxseSBvcHRpbWl6ZWQuCglUaGlzIHdpbGwgZGlzYWJsZSB0aGUgbGV4ZXIncyBmaXJzdCBjaGFyIG9wdGltaXphdGlvbnMuCglTZWU6IGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL3Jlc29sdmluZ19sZXhlcl9lcnJvcnMuaHRtbCNDT01QTEVNRU5UIGZvciBkZXRhaWxzLmApO2Vsc2V7bGV0IG49IiI7ZSYmKG49YAoJVGhpcyB3aWxsIGRpc2FibGUgdGhlIGxleGVyJ3MgZmlyc3QgY2hhciBvcHRpbWl6YXRpb25zLgoJU2VlOiBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9ndWlkZS9yZXNvbHZpbmdfbGV4ZXJfZXJyb3JzLmh0bWwjUkVHRVhQX1BBUlNJTkcgZm9yIGRldGFpbHMuYCksVWcoYCR7ZHh9CglGYWlsZWQgcGFyc2luZzogPCAke3QudG9TdHJpbmcoKX0gPgoJVXNpbmcgdGhlIEBjaGV2cm90YWluL3JlZ2V4cC10by1hc3QgbGlicmFyeQoJUGxlYXNlIG9wZW4gYW4gaXNzdWUgYXQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9jaGV2cm90YWluL2NoZXZyb3RhaW4vaXNzdWVzYCtuKX19cmV0dXJuW119ZnVuY3Rpb24gYU0odCxlLHIpe3N3aXRjaCh0LnR5cGUpe2Nhc2UiRGlzanVuY3Rpb24iOmZvcihsZXQgaT0wO2k8dC52YWx1ZS5sZW5ndGg7aSsrKWFNKHQudmFsdWVbaV0sZSxyKTticmVhaztjYXNlIkFsdGVybmF0aXZlIjpsZXQgbj10LnZhbHVlO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKXtsZXQgYT1uW2ldO3N3aXRjaChhLnR5cGUpe2Nhc2UiRW5kQW5jaG9yIjpjYXNlIkdyb3VwQmFja1JlZmVyZW5jZSI6Y2FzZSJMb29rYWhlYWQiOmNhc2UiTmVnYXRpdmVMb29rYWhlYWQiOmNhc2UiU3RhcnRBbmNob3IiOmNhc2UiV29yZEJvdW5kYXJ5IjpjYXNlIk5vbldvcmRCb3VuZGFyeSI6Y29udGludWV9bGV0IHM9YTtzd2l0Y2gocy50eXBlKXtjYXNlIkNoYXJhY3RlciI6cWsocy52YWx1ZSxlLHIpO2JyZWFrO2Nhc2UiU2V0IjppZihzLmNvbXBsZW1lbnQ9PT0hMCl0aHJvdyBFcnJvcihlb2UpO0FlKHMudmFsdWUsdT0+e2lmKHR5cGVvZiB1PT0ibnVtYmVyIilxayh1LGUscik7ZWxzZXtsZXQgaD11O2lmKHI9PT0hMClmb3IobGV0IGY9aC5mcm9tO2Y8PWgudG87ZisrKXFrKGYsZSxyKTtlbHNle2ZvcihsZXQgZj1oLmZyb207Zjw9aC50byYmZjxZZztmKyspcWsoZixlLHIpO2lmKGgudG8+PVlnKXtsZXQgZj1oLmZyb20+PVlnP2guZnJvbTpZZyxkPWgudG8scD0kYyhmKSxtPSRjKGQpO2ZvcihsZXQgZz1wO2c8PW07ZysrKWVbZ109Z319fX0pO2JyZWFrO2Nhc2UiR3JvdXAiOmFNKHMudmFsdWUsZSxyKTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKCJOb24gRXhoYXVzdGl2ZSBNYXRjaCIpfWxldCBsPXMucXVhbnRpZmllciE9PXZvaWQgMCYmcy5xdWFudGlmaWVyLmF0TGVhc3Q9PT0wO2lmKHMudHlwZT09PSJHcm91cCImJnNNKHMpPT09ITF8fHMudHlwZSE9PSJHcm91cCImJmw9PT0hMSlicmVha31icmVhaztkZWZhdWx0OnRocm93IEVycm9yKCJub24gZXhoYXVzdGl2ZSBtYXRjaCEiKX1yZXR1cm4gYnIoZSl9ZnVuY3Rpb24gcWsodCxlLHIpe2xldCBuPSRjKHQpO2Vbbl09bixyPT09ITAmJktCZSh0LGUpfWZ1bmN0aW9uIEtCZSh0LGUpe2xldCByPVN0cmluZy5mcm9tQ2hhckNvZGUodCksbj1yLnRvVXBwZXJDYXNlKCk7aWYobiE9PXIpe2xldCBpPSRjKG4uY2hhckNvZGVBdCgwKSk7ZVtpXT1pfWVsc2V7bGV0IGk9ci50b0xvd2VyQ2FzZSgpO2lmKGkhPT1yKXtsZXQgYT0kYyhpLmNoYXJDb2RlQXQoMCkpO2VbYV09YX19fWZ1bmN0aW9uIEpzZSh0LGUpe3JldHVybiBscyh0LnZhbHVlLHI9PntpZih0eXBlb2Ygcj09Im51bWJlciIpcmV0dXJuIFhuKGUscik7e2xldCBuPXI7cmV0dXJuIGxzKGUsaT0+bi5mcm9tPD1pJiZpPD1uLnRvKSE9PXZvaWQgMH19KX1mdW5jdGlvbiBzTSh0KXtsZXQgZT10LnF1YW50aWZpZXI7cmV0dXJuIGUmJmUuYXRMZWFzdD09PTA/ITA6dC52YWx1ZT9QdCh0LnZhbHVlKT9QYSh0LnZhbHVlLHNNKTpzTSh0LnZhbHVlKTohMX1mdW5jdGlvbiBZayh0LGUpe2lmKGUgaW5zdGFuY2VvZiBSZWdFeHApe2xldCByPXFnKGUpLG49bmV3IG9NKHQpO3JldHVybiBuLnZpc2l0KHIpLG4uZm91bmR9ZWxzZSByZXR1cm4gbHMoZSxyPT5Ybih0LHIuY2hhckNvZGVBdCgwKSkpIT09dm9pZCAwfXZhciBlb2UsZHgsb00scm9lPU4oKCk9PnsidXNlIHN0cmljdCI7YXgoKTtxdCgpO0hnKCk7V2soKTtsTSgpO2VvZT0iQ29tcGxlbWVudCBTZXRzIGFyZSBub3Qgc3VwcG9ydGVkIGZvciBmaXJzdCBjaGFyIG9wdGltaXphdGlvbiIsZHg9YFVuYWJsZSB0byB1c2UgImZpcnN0IGNoYXIiIGxleGVyIG9wdGltaXphdGlvbnM6CmA7byh0b2UsImdldE9wdGltaXplZFN0YXJ0Q29kZXNJbmRpY2VzIik7byhhTSwiZmlyc3RDaGFyT3B0aW1pemVkSW5kaWNlcyIpO28ocWssImFkZE9wdGltaXplZElkeFRvUmVzdWx0Iik7byhLQmUsImhhbmRsZUlnbm9yZUNhc2UiKTtvKEpzZSwiZmluZENvZGUiKTtvKHNNLCJpc1dob2xlT3B0aW9uYWwiKTtvTT1jbGFzcyBleHRlbmRzIEZje3N0YXRpY3tvKHRoaXMsIkNoYXJDb2RlRmluZGVyIil9Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLnRhcmdldENoYXJDb2Rlcz1lLHRoaXMuZm91bmQ9ITF9dmlzaXRDaGlsZHJlbihlKXtpZih0aGlzLmZvdW5kIT09ITApe3N3aXRjaChlLnR5cGUpe2Nhc2UiTG9va2FoZWFkIjp0aGlzLnZpc2l0TG9va2FoZWFkKGUpO3JldHVybjtjYXNlIk5lZ2F0aXZlTG9va2FoZWFkIjp0aGlzLnZpc2l0TmVnYXRpdmVMb29rYWhlYWQoZSk7cmV0dXJufXN1cGVyLnZpc2l0Q2hpbGRyZW4oZSl9fXZpc2l0Q2hhcmFjdGVyKGUpe1huKHRoaXMudGFyZ2V0Q2hhckNvZGVzLGUudmFsdWUpJiYodGhpcy5mb3VuZD0hMCl9dmlzaXRTZXQoZSl7ZS5jb21wbGVtZW50P0pzZShlLHRoaXMudGFyZ2V0Q2hhckNvZGVzKT09PXZvaWQgMCYmKHRoaXMuZm91bmQ9ITApOkpzZShlLHRoaXMudGFyZ2V0Q2hhckNvZGVzKSE9PXZvaWQgMCYmKHRoaXMuZm91bmQ9ITApfX07byhZaywiY2FuTWF0Y2hDaGFyQ29kZSIpfSk7ZnVuY3Rpb24gYW9lKHQsZSl7ZT1uZihlLHt1c2VTdGlja3k6dU0sZGVidWc6ITEsc2FmZU1vZGU6ITEscG9zaXRpb25UcmFja2luZzoiZnVsbCIsbGluZVRlcm1pbmF0b3JDaGFyYWN0ZXJzOlsiXHIiLGAKYF0sdHJhY2VyOm8oKGIsVCk9PlQoKSwidHJhY2VyIil9KTtsZXQgcj1lLnRyYWNlcjtyKCJpbml0Q2hhckNvZGVUb09wdGltaXplZEluZGV4TWFwIiwoKT0+e3BGZSgpfSk7bGV0IG47cigiUmVqZWN0IExleGVyLk5BIiwoKT0+e249c2YodCxiPT5iW3ZwXT09PUtuLk5BKX0pO2xldCBpPSExLGE7cigiVHJhbnNmb3JtIFBhdHRlcm5zIiwoKT0+e2k9ITEsYT1KZShuLGI9PntsZXQgVD1iW3ZwXTtpZihVbyhUKSl7bGV0IFM9VC5zb3VyY2U7cmV0dXJuIFMubGVuZ3RoPT09MSYmUyE9PSJeIiYmUyE9PSIkIiYmUyE9PSIuIiYmIVQuaWdub3JlQ2FzZT9TOlMubGVuZ3RoPT09MiYmU1swXT09PSJcXCImJiFYbihbImQiLCJEIiwicyIsIlMiLCJ0IiwiciIsIm4iLCJ0IiwiMCIsImMiLCJiIiwiQiIsImYiLCJ2IiwidyIsIlciXSxTWzFdKT9TWzFdOmUudXNlU3RpY2t5P2lvZShUKTpub2UoVCl9ZWxzZXtpZihBaShUKSlyZXR1cm4gaT0hMCx7ZXhlYzpUfTtpZih0eXBlb2YgVD09Im9iamVjdCIpcmV0dXJuIGk9ITAsVDtpZih0eXBlb2YgVD09InN0cmluZyIpe2lmKFQubGVuZ3RoPT09MSlyZXR1cm4gVDt7bGV0IFM9VC5yZXBsYWNlKC9bXFxeJC4qKz8oKVtcXXt9fF0vZywiXFwkJiIpLHc9bmV3IFJlZ0V4cChTKTtyZXR1cm4gZS51c2VTdGlja3k/aW9lKHcpOm5vZSh3KX19ZWxzZSB0aHJvdyBFcnJvcigibm9uIGV4aGF1c3RpdmUgbWF0Y2giKX19KX0pO2xldCBzLGwsdSxoLGY7cigibWlzYyBtYXBwaW5nIiwoKT0+e3M9SmUobixiPT5iLnRva2VuVHlwZUlkeCksbD1KZShuLGI9PntsZXQgVD1iLkdST1VQO2lmKFQhPT1Lbi5TS0lQUEVEKXtpZihUaShUKSlyZXR1cm4gVDtpZihtcihUKSlyZXR1cm4hMTt0aHJvdyBFcnJvcigibm9uIGV4aGF1c3RpdmUgbWF0Y2giKX19KSx1PUplKG4sYj0+e2xldCBUPWIuTE9OR0VSX0FMVDtpZihUKXJldHVybiBQdChUKT9KZShULHc9PmlrKG4sdykpOltpayhuLFQpXX0pLGg9SmUobixiPT5iLlBVU0hfTU9ERSksZj1KZShuLGI9PkJ0KGIsIlBPUF9NT0RFIikpfSk7bGV0IGQ7cigiTGluZSBUZXJtaW5hdG9yIEhhbmRsaW5nIiwoKT0+e2xldCBiPWRvZShlLmxpbmVUZXJtaW5hdG9yQ2hhcmFjdGVycyk7ZD1KZShuLFQ9PiExKSxlLnBvc2l0aW9uVHJhY2tpbmchPT0ib25seU9mZnNldCImJihkPUplKG4sVD0+QnQoVCwiTElORV9CUkVBS1MiKT8hIVQuTElORV9CUkVBS1M6Zm9lKFQsYik9PT0hMSYmWWsoYixULlBBVFRFUk4pKSl9KTtsZXQgcCxtLGcseTtyKCJNaXNjIE1hcHBpbmcgIzIiLCgpPT57cD1KZShuLHVvZSksbT1KZShhLGZGZSksZz1YcihuLChiLFQpPT57bGV0IFM9VC5HUk9VUDtyZXR1cm4gVGkoUykmJlMhPT1Lbi5TS0lQUEVEJiYoYltTXT1bXSksYn0se30pLHk9SmUoYSwoYixUKT0+KHtwYXR0ZXJuOmFbVF0sbG9uZ2VyQWx0OnVbVF0sY2FuTGluZVRlcm1pbmF0b3I6ZFtUXSxpc0N1c3RvbTpwW1RdLHNob3J0Om1bVF0sZ3JvdXA6bFtUXSxwdXNoOmhbVF0scG9wOmZbVF0sdG9rZW5UeXBlSWR4OnNbVF0sdG9rZW5UeXBlOm5bVF19KSl9KTtsZXQgdj0hMCx4PVtdO3JldHVybiBlLnNhZmVNb2RlfHxyKCJGaXJzdCBDaGFyIE9wdGltaXphdGlvbiIsKCk9Pnt4PVhyKG4sKGIsVCxTKT0+e2lmKHR5cGVvZiBULlBBVFRFUk49PSJzdHJpbmciKXtsZXQgdz1ULlBBVFRFUk4uY2hhckNvZGVBdCgwKSxFPSRjKHcpO2NNKGIsRSx5W1NdKX1lbHNlIGlmKFB0KFQuU1RBUlRfQ0hBUlNfSElOVCkpe2xldCB3O0FlKFQuU1RBUlRfQ0hBUlNfSElOVCxFPT57bGV0IF89dHlwZW9mIEU9PSJzdHJpbmciP0UuY2hhckNvZGVBdCgwKTpFLEM9JGMoXyk7dyE9PUMmJih3PUMsY00oYixDLHlbU10pKX0pfWVsc2UgaWYoVW8oVC5QQVRURVJOKSlpZihULlBBVFRFUk4udW5pY29kZSl2PSExLGUuZW5zdXJlT3B0aW1pemF0aW9ucyYmVWcoYCR7ZHh9CVVuYWJsZSB0byBhbmFseXplIDwgJHtULlBBVFRFUk4udG9TdHJpbmcoKX0gPiBwYXR0ZXJuLgoJVGhlIHJlZ2V4cCB1bmljb2RlIGZsYWcgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQgYnkgdGhlIHJlZ2V4cC10by1hc3QgbGlicmFyeS4KCVRoaXMgd2lsbCBkaXNhYmxlIHRoZSBsZXhlcidzIGZpcnN0IGNoYXIgb3B0aW1pemF0aW9ucy4KCUZvciBkZXRhaWxzIFNlZTogaHR0cHM6Ly9jaGV2cm90YWluLmlvL2RvY3MvZ3VpZGUvcmVzb2x2aW5nX2xleGVyX2Vycm9ycy5odG1sI1VOSUNPREVfT1BUSU1JWkVgKTtlbHNle2xldCB3PXRvZShULlBBVFRFUk4sZS5lbnN1cmVPcHRpbWl6YXRpb25zKTtocih3KSYmKHY9ITEpLEFlKHcsRT0+e2NNKGIsRSx5W1NdKX0pfWVsc2UgZS5lbnN1cmVPcHRpbWl6YXRpb25zJiZVZyhgJHtkeH0JVG9rZW5UeXBlOiA8JHtULm5hbWV9PiBpcyB1c2luZyBhIGN1c3RvbSB0b2tlbiBwYXR0ZXJuIHdpdGhvdXQgcHJvdmlkaW5nIDxzdGFydF9jaGFyc19oaW50PiBwYXJhbWV0ZXIuCglUaGlzIHdpbGwgZGlzYWJsZSB0aGUgbGV4ZXIncyBmaXJzdCBjaGFyIG9wdGltaXphdGlvbnMuCglGb3IgZGV0YWlscyBTZWU6IGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL3Jlc29sdmluZ19sZXhlcl9lcnJvcnMuaHRtbCNDVVNUT01fT1BUSU1JWkVgKSx2PSExO3JldHVybiBifSxbXSl9KSx7ZW1wdHlHcm91cHM6ZyxwYXR0ZXJuSWR4VG9Db25maWc6eSxjaGFyQ29kZVRvUGF0dGVybklkeFRvQ29uZmlnOngsaGFzQ3VzdG9tOmksY2FuQmVPcHRpbWl6ZWQ6dn19ZnVuY3Rpb24gc29lKHQsZSl7bGV0IHI9W10sbj1aQmUodCk7cj1yLmNvbmNhdChuLmVycm9ycyk7bGV0IGk9SkJlKG4udmFsaWQpLGE9aS52YWxpZDtyZXR1cm4gcj1yLmNvbmNhdChpLmVycm9ycykscj1yLmNvbmNhdChRQmUoYSkpLHI9ci5jb25jYXQob0ZlKGEpKSxyPXIuY29uY2F0KGxGZShhLGUpKSxyPXIuY29uY2F0KGNGZShhKSkscn1mdW5jdGlvbiBRQmUodCl7bGV0IGU9W10scj1Zcih0LG49PlVvKG5bdnBdKSk7cmV0dXJuIGU9ZS5jb25jYXQodEZlKHIpKSxlPWUuY29uY2F0KGlGZShyKSksZT1lLmNvbmNhdChhRmUocikpLGU9ZS5jb25jYXQoc0ZlKHIpKSxlPWUuY29uY2F0KHJGZShyKSksZX1mdW5jdGlvbiBaQmUodCl7bGV0IGU9WXIodCxpPT4hQnQoaSx2cCkpLHI9SmUoZSxpPT4oe21lc3NhZ2U6IlRva2VuIFR5cGU6IC0+IitpLm5hbWUrIjwtIG1pc3Npbmcgc3RhdGljICdQQVRURVJOJyBwcm9wZXJ0eSIsdHlwZTpqbi5NSVNTSU5HX1BBVFRFUk4sdG9rZW5UeXBlczpbaV19KSksbj1hZih0LGUpO3JldHVybntlcnJvcnM6cix2YWxpZDpufX1mdW5jdGlvbiBKQmUodCl7bGV0IGU9WXIodCxpPT57bGV0IGE9aVt2cF07cmV0dXJuIVVvKGEpJiYhQWkoYSkmJiFCdChhLCJleGVjIikmJiFUaShhKX0pLHI9SmUoZSxpPT4oe21lc3NhZ2U6IlRva2VuIFR5cGU6IC0+IitpLm5hbWUrIjwtIHN0YXRpYyAnUEFUVEVSTicgY2FuIG9ubHkgYmUgYSBSZWdFeHAsIGEgRnVuY3Rpb24gbWF0Y2hpbmcgdGhlIHtDdXN0b21QYXR0ZXJuTWF0Y2hlckZ1bmN9IHR5cGUgb3IgYW4gT2JqZWN0IG1hdGNoaW5nIHRoZSB7SUN1c3RvbVBhdHRlcm59IGludGVyZmFjZS4iLHR5cGU6am4uSU5WQUxJRF9QQVRURVJOLHRva2VuVHlwZXM6W2ldfSkpLG49YWYodCxlKTtyZXR1cm57ZXJyb3JzOnIsdmFsaWQ6bn19ZnVuY3Rpb24gdEZlKHQpe2NsYXNzIGUgZXh0ZW5kcyBGY3tzdGF0aWN7byh0aGlzLCJFbmRBbmNob3JGaW5kZXIiKX1jb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5mb3VuZD0hMX12aXNpdEVuZEFuY2hvcihhKXt0aGlzLmZvdW5kPSEwfX1sZXQgcj1Zcih0LGk9PntsZXQgYT1pLlBBVFRFUk47dHJ5e2xldCBzPXFnKGEpLGw9bmV3IGU7cmV0dXJuIGwudmlzaXQocyksbC5mb3VuZH1jYXRjaHtyZXR1cm4gZUZlLnRlc3QoYS5zb3VyY2UpfX0pO3JldHVybiBKZShyLGk9Pih7bWVzc2FnZTpgVW5leHBlY3RlZCBSZWdFeHAgQW5jaG9yIEVycm9yOgoJVG9rZW4gVHlwZTogLT5gK2kubmFtZStgPC0gc3RhdGljICdQQVRURVJOJyBjYW5ub3QgY29udGFpbiBlbmQgb2YgaW5wdXQgYW5jaG9yICckJwoJU2VlIGNoZXZyb3RhaW4uaW8vZG9jcy9ndWlkZS9yZXNvbHZpbmdfbGV4ZXJfZXJyb3JzLmh0bWwjQU5DSE9SUwlmb3IgZGV0YWlscy5gLHR5cGU6am4uRU9JX0FOQ0hPUl9GT1VORCx0b2tlblR5cGVzOltpXX0pKX1mdW5jdGlvbiByRmUodCl7bGV0IGU9WXIodCxuPT5uLlBBVFRFUk4udGVzdCgiIikpO3JldHVybiBKZShlLG49Pih7bWVzc2FnZToiVG9rZW4gVHlwZTogLT4iK24ubmFtZSsiPC0gc3RhdGljICdQQVRURVJOJyBtdXN0IG5vdCBtYXRjaCBhbiBlbXB0eSBzdHJpbmciLHR5cGU6am4uRU1QVFlfTUFUQ0hfUEFUVEVSTix0b2tlblR5cGVzOltuXX0pKX1mdW5jdGlvbiBpRmUodCl7Y2xhc3MgZSBleHRlbmRzIEZje3N0YXRpY3tvKHRoaXMsIlN0YXJ0QW5jaG9yRmluZGVyIil9Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuZm91bmQ9ITF9dmlzaXRTdGFydEFuY2hvcihhKXt0aGlzLmZvdW5kPSEwfX1sZXQgcj1Zcih0LGk9PntsZXQgYT1pLlBBVFRFUk47dHJ5e2xldCBzPXFnKGEpLGw9bmV3IGU7cmV0dXJuIGwudmlzaXQocyksbC5mb3VuZH1jYXRjaHtyZXR1cm4gbkZlLnRlc3QoYS5zb3VyY2UpfX0pO3JldHVybiBKZShyLGk9Pih7bWVzc2FnZTpgVW5leHBlY3RlZCBSZWdFeHAgQW5jaG9yIEVycm9yOgoJVG9rZW4gVHlwZTogLT5gK2kubmFtZStgPC0gc3RhdGljICdQQVRURVJOJyBjYW5ub3QgY29udGFpbiBzdGFydCBvZiBpbnB1dCBhbmNob3IgJ14nCglTZWUgaHR0cHM6Ly9jaGV2cm90YWluLmlvL2RvY3MvZ3VpZGUvcmVzb2x2aW5nX2xleGVyX2Vycm9ycy5odG1sI0FOQ0hPUlMJZm9yIGRldGFpbHMuYCx0eXBlOmpuLlNPSV9BTkNIT1JfRk9VTkQsdG9rZW5UeXBlczpbaV19KSl9ZnVuY3Rpb24gYUZlKHQpe2xldCBlPVlyKHQsbj0+e2xldCBpPW5bdnBdO3JldHVybiBpIGluc3RhbmNlb2YgUmVnRXhwJiYoaS5tdWx0aWxpbmV8fGkuZ2xvYmFsKX0pO3JldHVybiBKZShlLG49Pih7bWVzc2FnZToiVG9rZW4gVHlwZTogLT4iK24ubmFtZSsiPC0gc3RhdGljICdQQVRURVJOJyBtYXkgTk9UIGNvbnRhaW4gZ2xvYmFsKCdnJykgb3IgbXVsdGlsaW5lKCdtJykiLHR5cGU6am4uVU5TVVBQT1JURURfRkxBR1NfRk9VTkQsdG9rZW5UeXBlczpbbl19KSl9ZnVuY3Rpb24gc0ZlKHQpe2xldCBlPVtdLHI9SmUodCxhPT5Ycih0LChzLGwpPT4oYS5QQVRURVJOLnNvdXJjZT09PWwuUEFUVEVSTi5zb3VyY2UmJiFYbihlLGwpJiZsLlBBVFRFUk4hPT1Lbi5OQSYmKGUucHVzaChsKSxzLnB1c2gobCkpLHMpLFtdKSk7cj1BYyhyKTtsZXQgbj1ZcihyLGE9PmEubGVuZ3RoPjEpO3JldHVybiBKZShuLGE9PntsZXQgcz1KZShhLHU9PnUubmFtZSk7cmV0dXJue21lc3NhZ2U6YFRoZSBzYW1lIFJlZ0V4cCBwYXR0ZXJuIC0+JHtpYShhKS5QQVRURVJOfTwtaGFzIGJlZW4gdXNlZCBpbiBhbGwgb2YgdGhlIGZvbGxvd2luZyBUb2tlbiBUeXBlczogJHtzLmpvaW4oIiwgIil9IDwtYCx0eXBlOmpuLkRVUExJQ0FURV9QQVRURVJOU19GT1VORCx0b2tlblR5cGVzOmF9fSl9ZnVuY3Rpb24gb0ZlKHQpe2xldCBlPVlyKHQsbj0+e2lmKCFCdChuLCJHUk9VUCIpKXJldHVybiExO2xldCBpPW4uR1JPVVA7cmV0dXJuIGkhPT1Lbi5TS0lQUEVEJiZpIT09S24uTkEmJiFUaShpKX0pO3JldHVybiBKZShlLG49Pih7bWVzc2FnZToiVG9rZW4gVHlwZTogLT4iK24ubmFtZSsiPC0gc3RhdGljICdHUk9VUCcgY2FuIG9ubHkgYmUgTGV4ZXIuU0tJUFBFRC9MZXhlci5OQS9BIFN0cmluZyIsdHlwZTpqbi5JTlZBTElEX0dST1VQX1RZUEVfRk9VTkQsdG9rZW5UeXBlczpbbl19KSl9ZnVuY3Rpb24gbEZlKHQsZSl7bGV0IHI9WXIodCxpPT5pLlBVU0hfTU9ERSE9PXZvaWQgMCYmIVhuKGUsaS5QVVNIX01PREUpKTtyZXR1cm4gSmUocixpPT4oe21lc3NhZ2U6YFRva2VuIFR5cGU6IC0+JHtpLm5hbWV9PC0gc3RhdGljICdQVVNIX01PREUnIHZhbHVlIGNhbm5vdCByZWZlciB0byBhIExleGVyIE1vZGUgLT4ke2kuUFVTSF9NT0RFfTwtd2hpY2ggZG9lcyBub3QgZXhpc3RgLHR5cGU6am4uUFVTSF9NT0RFX0RPRVNfTk9UX0VYSVNULHRva2VuVHlwZXM6W2ldfSkpfWZ1bmN0aW9uIGNGZSh0KXtsZXQgZT1bXSxyPVhyKHQsKG4saSxhKT0+e2xldCBzPWkuUEFUVEVSTjtyZXR1cm4gcz09PUtuLk5BfHwoVGkocyk/bi5wdXNoKHtzdHI6cyxpZHg6YSx0b2tlblR5cGU6aX0pOlVvKHMpJiZoRmUocykmJm4ucHVzaCh7c3RyOnMuc291cmNlLGlkeDphLHRva2VuVHlwZTppfSkpLG59LFtdKTtyZXR1cm4gQWUodCwobixpKT0+e0FlKHIsKHtzdHI6YSxpZHg6cyx0b2tlblR5cGU6bH0pPT57aWYoaTxzJiZ1RmUoYSxuLlBBVFRFUk4pKXtsZXQgdT1gVG9rZW46IC0+JHtsLm5hbWV9PC0gY2FuIG5ldmVyIGJlIG1hdGNoZWQuCkJlY2F1c2UgaXQgYXBwZWFycyBBRlRFUiB0aGUgVG9rZW4gVHlwZSAtPiR7bi5uYW1lfTwtaW4gdGhlIGxleGVyJ3MgZGVmaW5pdGlvbi4KU2VlIGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL3Jlc29sdmluZ19sZXhlcl9lcnJvcnMuaHRtbCNVTlJFQUNIQUJMRWA7ZS5wdXNoKHttZXNzYWdlOnUsdHlwZTpqbi5VTlJFQUNIQUJMRV9QQVRURVJOLHRva2VuVHlwZXM6W24sbF19KX19KX0pLGV9ZnVuY3Rpb24gdUZlKHQsZSl7aWYoVW8oZSkpe2xldCByPWUuZXhlYyh0KTtyZXR1cm4gciE9PW51bGwmJnIuaW5kZXg9PT0wfWVsc2V7aWYoQWkoZSkpcmV0dXJuIGUodCwwLFtdLHt9KTtpZihCdChlLCJleGVjIikpcmV0dXJuIGUuZXhlYyh0LDAsW10se30pO2lmKHR5cGVvZiBlPT0ic3RyaW5nIilyZXR1cm4gZT09PXQ7dGhyb3cgRXJyb3IoIm5vbiBleGhhdXN0aXZlIG1hdGNoIil9fWZ1bmN0aW9uIGhGZSh0KXtyZXR1cm4gbHMoWyIuIiwiXFwiLCJbIiwiXSIsInwiLCJeIiwiJCIsIigiLCIpIiwiPyIsIioiLCIrIiwieyJdLHI9PnQuc291cmNlLmluZGV4T2YocikhPT0tMSk9PT12b2lkIDB9ZnVuY3Rpb24gbm9lKHQpe2xldCBlPXQuaWdub3JlQ2FzZT8iaSI6IiI7cmV0dXJuIG5ldyBSZWdFeHAoYF4oPzoke3Quc291cmNlfSlgLGUpfWZ1bmN0aW9uIGlvZSh0KXtsZXQgZT10Lmlnbm9yZUNhc2U/Iml5IjoieSI7cmV0dXJuIG5ldyBSZWdFeHAoYCR7dC5zb3VyY2V9YCxlKX1mdW5jdGlvbiBvb2UodCxlLHIpe2xldCBuPVtdO3JldHVybiBCdCh0LFhnKXx8bi5wdXNoKHttZXNzYWdlOiJBIE11bHRpTW9kZSBMZXhlciBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQgd2l0aG91dCBhIDwiK1hnK2A+IHByb3BlcnR5IGluIGl0cyBkZWZpbml0aW9uCmAsdHlwZTpqbi5NVUxUSV9NT0RFX0xFWEVSX1dJVEhPVVRfREVGQVVMVF9NT0RFfSksQnQodCxYayl8fG4ucHVzaCh7bWVzc2FnZToiQSBNdWx0aU1vZGUgTGV4ZXIgY2Fubm90IGJlIGluaXRpYWxpemVkIHdpdGhvdXQgYSA8IitYaytgPiBwcm9wZXJ0eSBpbiBpdHMgZGVmaW5pdGlvbgpgLHR5cGU6am4uTVVMVElfTU9ERV9MRVhFUl9XSVRIT1VUX01PREVTX1BST1BFUlRZfSksQnQodCxYaykmJkJ0KHQsWGcpJiYhQnQodC5tb2Rlcyx0LmRlZmF1bHRNb2RlKSYmbi5wdXNoKHttZXNzYWdlOmBBIE11bHRpTW9kZSBMZXhlciBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQgd2l0aCBhICR7WGd9OiA8JHt0LmRlZmF1bHRNb2RlfT53aGljaCBkb2VzIG5vdCBleGlzdApgLHR5cGU6am4uTVVMVElfTU9ERV9MRVhFUl9ERUZBVUxUX01PREVfVkFMVUVfRE9FU19OT1RfRVhJU1R9KSxCdCh0LFhrKSYmQWUodC5tb2RlcywoaSxhKT0+e0FlKGksKHMsbCk9PntpZihtcihzKSluLnB1c2goe21lc3NhZ2U6YEEgTGV4ZXIgY2Fubm90IGJlIGluaXRpYWxpemVkIHVzaW5nIGFuIHVuZGVmaW5lZCBUb2tlbiBUeXBlLiBNb2RlOjwke2F9PiBhdCBpbmRleDogPCR7bH0+CmAsdHlwZTpqbi5MRVhFUl9ERUZJTklUSU9OX0NBTk5PVF9DT05UQUlOX1VOREVGSU5FRH0pO2Vsc2UgaWYoQnQocywiTE9OR0VSX0FMVCIpKXtsZXQgdT1QdChzLkxPTkdFUl9BTFQpP3MuTE9OR0VSX0FMVDpbcy5MT05HRVJfQUxUXTtBZSh1LGg9PnshbXIoaCkmJiFYbihpLGgpJiZuLnB1c2goe21lc3NhZ2U6YEEgTXVsdGlNb2RlIExleGVyIGNhbm5vdCBiZSBpbml0aWFsaXplZCB3aXRoIGEgbG9uZ2VyX2FsdCA8JHtoLm5hbWV9PiBvbiB0b2tlbiA8JHtzLm5hbWV9PiBvdXRzaWRlIG9mIG1vZGUgPCR7YX0+CmAsdHlwZTpqbi5NVUxUSV9NT0RFX0xFWEVSX0xPTkdFUl9BTFRfTk9UX0lOX0NVUlJFTlRfTU9ERX0pfSl9fSl9KSxufWZ1bmN0aW9uIGxvZSh0LGUscil7bGV0IG49W10saT0hMSxhPUFjKHFyKGJyKHQubW9kZXMpKSkscz1zZihhLHU9PnVbdnBdPT09S24uTkEpLGw9ZG9lKHIpO3JldHVybiBlJiZBZShzLHU9PntsZXQgaD1mb2UodSxsKTtpZihoIT09ITEpe2xldCBkPXttZXNzYWdlOmRGZSh1LGgpLHR5cGU6aC5pc3N1ZSx0b2tlblR5cGU6dX07bi5wdXNoKGQpfWVsc2UgQnQodSwiTElORV9CUkVBS1MiKT91LkxJTkVfQlJFQUtTPT09ITAmJihpPSEwKTpZayhsLHUuUEFUVEVSTikmJihpPSEwKX0pLGUmJiFpJiZuLnB1c2goe21lc3NhZ2U6YFdhcm5pbmc6IE5vIExJTkVfQlJFQUtTIEZvdW5kLgoJVGhpcyBMZXhlciBoYXMgYmVlbiBkZWZpbmVkIHRvIHRyYWNrIGxpbmUgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiwKCUJ1dCBub25lIG9mIHRoZSBUb2tlbiBUeXBlcyBjYW4gYmUgaWRlbnRpZmllZCBhcyBtYXRjaGluZyBhIGxpbmUgdGVybWluYXRvci4KCVNlZSBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9ndWlkZS9yZXNvbHZpbmdfbGV4ZXJfZXJyb3JzLmh0bWwjTElORV9CUkVBS1MgCglmb3IgZGV0YWlscy5gLHR5cGU6am4uTk9fTElORV9CUkVBS1NfRkxBR1N9KSxufWZ1bmN0aW9uIGNvZSh0KXtsZXQgZT17fSxyPXpyKHQpO3JldHVybiBBZShyLG49PntsZXQgaT10W25dO2lmKFB0KGkpKWVbbl09W107ZWxzZSB0aHJvdyBFcnJvcigibm9uIGV4aGF1c3RpdmUgbWF0Y2giKX0pLGV9ZnVuY3Rpb24gdW9lKHQpe2xldCBlPXQuUEFUVEVSTjtpZihVbyhlKSlyZXR1cm4hMTtpZihBaShlKSlyZXR1cm4hMDtpZihCdChlLCJleGVjIikpcmV0dXJuITA7aWYoVGkoZSkpcmV0dXJuITE7dGhyb3cgRXJyb3IoIm5vbiBleGhhdXN0aXZlIG1hdGNoIil9ZnVuY3Rpb24gZkZlKHQpe3JldHVybiBUaSh0KSYmdC5sZW5ndGg9PT0xP3QuY2hhckNvZGVBdCgwKTohMX1mdW5jdGlvbiBmb2UodCxlKXtpZihCdCh0LCJMSU5FX0JSRUFLUyIpKXJldHVybiExO2lmKFVvKHQuUEFUVEVSTikpe3RyeXtZayhlLHQuUEFUVEVSTil9Y2F0Y2gocil7cmV0dXJue2lzc3VlOmpuLklERU5USUZZX1RFUk1JTkFUT1IsZXJyTXNnOnIubWVzc2FnZX19cmV0dXJuITF9ZWxzZXtpZihUaSh0LlBBVFRFUk4pKXJldHVybiExO2lmKHVvZSh0KSlyZXR1cm57aXNzdWU6am4uQ1VTVE9NX0xJTkVfQlJFQUt9O3Rocm93IEVycm9yKCJub24gZXhoYXVzdGl2ZSBtYXRjaCIpfX1mdW5jdGlvbiBkRmUodCxlKXtpZihlLmlzc3VlPT09am4uSURFTlRJRllfVEVSTUlOQVRPUilyZXR1cm5gV2FybmluZzogdW5hYmxlIHRvIGlkZW50aWZ5IGxpbmUgdGVybWluYXRvciB1c2FnZSBpbiBwYXR0ZXJuLgoJVGhlIHByb2JsZW0gaXMgaW4gdGhlIDwke3QubmFtZX0+IFRva2VuIFR5cGUKCSBSb290IGNhdXNlOiAke2UuZXJyTXNnfS4KCUZvciBkZXRhaWxzIFNlZTogaHR0cHM6Ly9jaGV2cm90YWluLmlvL2RvY3MvZ3VpZGUvcmVzb2x2aW5nX2xleGVyX2Vycm9ycy5odG1sI0lERU5USUZZX1RFUk1JTkFUT1JgO2lmKGUuaXNzdWU9PT1qbi5DVVNUT01fTElORV9CUkVBSylyZXR1cm5gV2FybmluZzogQSBDdXN0b20gVG9rZW4gUGF0dGVybiBzaG91bGQgc3BlY2lmeSB0aGUgPGxpbmVfYnJlYWtzPiBvcHRpb24uCglUaGUgcHJvYmxlbSBpcyBpbiB0aGUgPCR7dC5uYW1lfT4gVG9rZW4gVHlwZQoJRm9yIGRldGFpbHMgU2VlOiBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9ndWlkZS9yZXNvbHZpbmdfbGV4ZXJfZXJyb3JzLmh0bWwjQ1VTVE9NX0xJTkVfQlJFQUtgO3Rocm93IEVycm9yKCJub24gZXhoYXVzdGl2ZSBtYXRjaCIpfWZ1bmN0aW9uIGRvZSh0KXtyZXR1cm4gSmUodCxyPT5UaShyKT9yLmNoYXJDb2RlQXQoMCk6cil9ZnVuY3Rpb24gY00odCxlLHIpe3RbZV09PT12b2lkIDA/dFtlXT1bcl06dFtlXS5wdXNoKHIpfWZ1bmN0aW9uICRjKHQpe3JldHVybiB0PFlnP3Q6amtbdF19ZnVuY3Rpb24gcEZlKCl7aWYoaHIoamspKXtqaz1uZXcgQXJyYXkoNjU1MzYpO2ZvcihsZXQgdD0wO3Q8NjU1MzY7dCsrKWprW3RdPXQ+MjU1PzI1NSt+fih0LzI1NSk6dH19dmFyIHZwLFhnLFhrLHVNLGVGZSxuRmUsaG9lLFlnLGprLGxNPU4oKCk9PnsidXNlIHN0cmljdCI7YXgoKTtweCgpO3F0KCk7SGcoKTtyb2UoKTtXaygpO3ZwPSJQQVRURVJOIixYZz0iZGVmYXVsdE1vZGUiLFhrPSJtb2RlcyIsdU09dHlwZW9mIG5ldyBSZWdFeHAoIig/OikiKS5zdGlja3k9PSJib29sZWFuIjtvKGFvZSwiYW5hbHl6ZVRva2VuVHlwZXMiKTtvKHNvZSwidmFsaWRhdGVQYXR0ZXJucyIpO28oUUJlLCJ2YWxpZGF0ZVJlZ0V4cFBhdHRlcm4iKTtvKFpCZSwiZmluZE1pc3NpbmdQYXR0ZXJucyIpO28oSkJlLCJmaW5kSW52YWxpZFBhdHRlcm5zIik7ZUZlPS9bXlxcXVskXS87byh0RmUsImZpbmRFbmRPZklucHV0QW5jaG9yIik7byhyRmUsImZpbmRFbXB0eU1hdGNoUmVnRXhwcyIpO25GZT0vW15cXFtdW1xeXXxeXF4vO28oaUZlLCJmaW5kU3RhcnRPZklucHV0QW5jaG9yIik7byhhRmUsImZpbmRVbnN1cHBvcnRlZEZsYWdzIik7byhzRmUsImZpbmREdXBsaWNhdGVQYXR0ZXJucyIpO28ob0ZlLCJmaW5kSW52YWxpZEdyb3VwVHlwZSIpO28obEZlLCJmaW5kTW9kZXNUaGF0RG9Ob3RFeGlzdCIpO28oY0ZlLCJmaW5kVW5yZWFjaGFibGVQYXR0ZXJucyIpO28odUZlLCJ0ZXN0VG9rZW5UeXBlIik7byhoRmUsIm5vTWV0YUNoYXIiKTtvKG5vZSwiYWRkU3RhcnRPZklucHV0Iik7byhpb2UsImFkZFN0aWNreUZsYWciKTtvKG9vZSwicGVyZm9ybVJ1bnRpbWVDaGVja3MiKTtvKGxvZSwicGVyZm9ybVdhcm5pbmdSdW50aW1lQ2hlY2tzIik7byhjb2UsImNsb25lRW1wdHlHcm91cHMiKTtvKHVvZSwiaXNDdXN0b21QYXR0ZXJuIik7byhmRmUsImlzU2hvcnRQYXR0ZXJuIik7aG9lPXt0ZXN0Om8oZnVuY3Rpb24odCl7bGV0IGU9dC5sZW5ndGg7Zm9yKGxldCByPXRoaXMubGFzdEluZGV4O3I8ZTtyKyspe2xldCBuPXQuY2hhckNvZGVBdChyKTtpZihuPT09MTApcmV0dXJuIHRoaXMubGFzdEluZGV4PXIrMSwhMDtpZihuPT09MTMpcmV0dXJuIHQuY2hhckNvZGVBdChyKzEpPT09MTA/dGhpcy5sYXN0SW5kZXg9cisyOnRoaXMubGFzdEluZGV4PXIrMSwhMH1yZXR1cm4hMX0sInRlc3QiKSxsYXN0SW5kZXg6MH07byhmb2UsImNoZWNrTGluZUJyZWFrc0lzc3VlcyIpO28oZEZlLCJidWlsZExpbmVCcmVha0lzc3VlTWVzc2FnZSIpO28oZG9lLCJnZXRDaGFyQ29kZXMiKTtvKGNNLCJhZGRUb01hcE9mQXJyYXlzIik7WWc9MjU2LGprPVtdO28oJGMsImNoYXJDb2RlVG9PcHRpbWl6ZWRJbmRleCIpO28ocEZlLCJpbml0Q2hhckNvZGVUb09wdGltaXplZEluZGV4TWFwIil9KTtmdW5jdGlvbiBWdSh0LGUpe2xldCByPXQudG9rZW5UeXBlSWR4O3JldHVybiByPT09ZS50b2tlblR5cGVJZHg/ITA6ZS5pc1BhcmVudD09PSEwJiZlLmNhdGVnb3J5TWF0Y2hlc01hcFtyXT09PSEwfWZ1bmN0aW9uIGpnKHQsZSl7cmV0dXJuIHQudG9rZW5UeXBlSWR4PT09ZS50b2tlblR5cGVJZHh9ZnVuY3Rpb24gVXUodCl7bGV0IGU9bUZlKHQpO2dGZShlKSx2RmUoZSkseUZlKGUpLEFlKGUscj0+e3IuaXNQYXJlbnQ9ci5jYXRlZ29yeU1hdGNoZXMubGVuZ3RoPjB9KX1mdW5jdGlvbiBtRmUodCl7bGV0IGU9YW4odCkscj10LG49ITA7Zm9yKDtuOyl7cj1BYyhxcihKZShyLGE9PmEuQ0FURUdPUklFUykpKTtsZXQgaT1hZihyLGUpO2U9ZS5jb25jYXQoaSksaHIoaSk/bj0hMTpyPWl9cmV0dXJuIGV9ZnVuY3Rpb24gZ0ZlKHQpe0FlKHQsZT0+e2hNKGUpfHwoZ29lW3BvZV09ZSxlLnRva2VuVHlwZUlkeD1wb2UrKyksbW9lKGUpJiYhUHQoZS5DQVRFR09SSUVTKSYmKGUuQ0FURUdPUklFUz1bZS5DQVRFR09SSUVTXSksbW9lKGUpfHwoZS5DQVRFR09SSUVTPVtdKSx4RmUoZSl8fChlLmNhdGVnb3J5TWF0Y2hlcz1bXSksYkZlKGUpfHwoZS5jYXRlZ29yeU1hdGNoZXNNYXA9e30pfSl9ZnVuY3Rpb24geUZlKHQpe0FlKHQsZT0+e2UuY2F0ZWdvcnlNYXRjaGVzPVtdLEFlKGUuY2F0ZWdvcnlNYXRjaGVzTWFwLChyLG4pPT57ZS5jYXRlZ29yeU1hdGNoZXMucHVzaChnb2Vbbl0udG9rZW5UeXBlSWR4KX0pfSl9ZnVuY3Rpb24gdkZlKHQpe0FlKHQsZT0+e3lvZShbXSxlKX0pfWZ1bmN0aW9uIHlvZSh0LGUpe0FlKHQscj0+e2UuY2F0ZWdvcnlNYXRjaGVzTWFwW3IudG9rZW5UeXBlSWR4XT0hMH0pLEFlKGUuQ0FURUdPUklFUyxyPT57bGV0IG49dC5jb25jYXQoZSk7WG4obixyKXx8eW9lKG4scil9KX1mdW5jdGlvbiBoTSh0KXtyZXR1cm4gQnQodCwidG9rZW5UeXBlSWR4Iil9ZnVuY3Rpb24gbW9lKHQpe3JldHVybiBCdCh0LCJDQVRFR09SSUVTIil9ZnVuY3Rpb24geEZlKHQpe3JldHVybiBCdCh0LCJjYXRlZ29yeU1hdGNoZXMiKX1mdW5jdGlvbiBiRmUodCl7cmV0dXJuIEJ0KHQsImNhdGVnb3J5TWF0Y2hlc01hcCIpfWZ1bmN0aW9uIHZvZSh0KXtyZXR1cm4gQnQodCwidG9rZW5UeXBlSWR4Iil9dmFyIHBvZSxnb2UseHA9TigoKT0+eyJ1c2Ugc3RyaWN0IjtxdCgpO28oVnUsInRva2VuU3RydWN0dXJlZE1hdGNoZXIiKTtvKGpnLCJ0b2tlblN0cnVjdHVyZWRNYXRjaGVyTm9DYXRlZ29yaWVzIik7cG9lPTEsZ29lPXt9O28oVXUsImF1Z21lbnRUb2tlblR5cGVzIik7byhtRmUsImV4cGFuZENhdGVnb3JpZXMiKTtvKGdGZSwiYXNzaWduVG9rZW5EZWZhdWx0UHJvcHMiKTtvKHlGZSwiYXNzaWduQ2F0ZWdvcmllc1Rva2Vuc1Byb3AiKTtvKHZGZSwiYXNzaWduQ2F0ZWdvcmllc01hcFByb3AiKTtvKHlvZSwic2luZ2xlQXNzaWduQ2F0ZWdvcmllc1Rva3NNYXAiKTtvKGhNLCJoYXNTaG9ydEtleVByb3BlcnR5Iik7byhtb2UsImhhc0NhdGVnb3JpZXNQcm9wZXJ0eSIpO28oeEZlLCJoYXNFeHRlbmRpbmdUb2tlbnNUeXBlc1Byb3BlcnR5Iik7byhiRmUsImhhc0V4dGVuZGluZ1Rva2Vuc1R5cGVzTWFwUHJvcGVydHkiKTtvKHZvZSwiaXNUb2tlblR5cGUiKX0pO3ZhciBLZyxmTT1OKCgpPT57InVzZSBzdHJpY3QiO0tnPXtidWlsZFVuYWJsZVRvUG9wTGV4ZXJNb2RlTWVzc2FnZSh0KXtyZXR1cm5gVW5hYmxlIHRvIHBvcCBMZXhlciBNb2RlIGFmdGVyIGVuY291bnRlcmluZyBUb2tlbiAtPiR7dC5pbWFnZX08LSBUaGUgTW9kZSBTdGFjayBpcyBlbXB0eWB9LGJ1aWxkVW5leHBlY3RlZENoYXJhY3RlcnNNZXNzYWdlKHQsZSxyLG4saSl7cmV0dXJuYHVuZXhwZWN0ZWQgY2hhcmFjdGVyOiAtPiR7dC5jaGFyQXQoZSl9PC0gYXQgb2Zmc2V0OiAke2V9LCBza2lwcGVkICR7cn0gY2hhcmFjdGVycy5gfX19KTt2YXIgam4sbXgsS24scHg9TigoKT0+eyJ1c2Ugc3RyaWN0IjtsTSgpO3F0KCk7SGcoKTt4cCgpO2ZNKCk7V2soKTsoZnVuY3Rpb24odCl7dFt0Lk1JU1NJTkdfUEFUVEVSTj0wXT0iTUlTU0lOR19QQVRURVJOIix0W3QuSU5WQUxJRF9QQVRURVJOPTFdPSJJTlZBTElEX1BBVFRFUk4iLHRbdC5FT0lfQU5DSE9SX0ZPVU5EPTJdPSJFT0lfQU5DSE9SX0ZPVU5EIix0W3QuVU5TVVBQT1JURURfRkxBR1NfRk9VTkQ9M109IlVOU1VQUE9SVEVEX0ZMQUdTX0ZPVU5EIix0W3QuRFVQTElDQVRFX1BBVFRFUk5TX0ZPVU5EPTRdPSJEVVBMSUNBVEVfUEFUVEVSTlNfRk9VTkQiLHRbdC5JTlZBTElEX0dST1VQX1RZUEVfRk9VTkQ9NV09IklOVkFMSURfR1JPVVBfVFlQRV9GT1VORCIsdFt0LlBVU0hfTU9ERV9ET0VTX05PVF9FWElTVD02XT0iUFVTSF9NT0RFX0RPRVNfTk9UX0VYSVNUIix0W3QuTVVMVElfTU9ERV9MRVhFUl9XSVRIT1VUX0RFRkFVTFRfTU9ERT03XT0iTVVMVElfTU9ERV9MRVhFUl9XSVRIT1VUX0RFRkFVTFRfTU9ERSIsdFt0Lk1VTFRJX01PREVfTEVYRVJfV0lUSE9VVF9NT0RFU19QUk9QRVJUWT04XT0iTVVMVElfTU9ERV9MRVhFUl9XSVRIT1VUX01PREVTX1BST1BFUlRZIix0W3QuTVVMVElfTU9ERV9MRVhFUl9ERUZBVUxUX01PREVfVkFMVUVfRE9FU19OT1RfRVhJU1Q9OV09Ik1VTFRJX01PREVfTEVYRVJfREVGQVVMVF9NT0RFX1ZBTFVFX0RPRVNfTk9UX0VYSVNUIix0W3QuTEVYRVJfREVGSU5JVElPTl9DQU5OT1RfQ09OVEFJTl9VTkRFRklORUQ9MTBdPSJMRVhFUl9ERUZJTklUSU9OX0NBTk5PVF9DT05UQUlOX1VOREVGSU5FRCIsdFt0LlNPSV9BTkNIT1JfRk9VTkQ9MTFdPSJTT0lfQU5DSE9SX0ZPVU5EIix0W3QuRU1QVFlfTUFUQ0hfUEFUVEVSTj0xMl09IkVNUFRZX01BVENIX1BBVFRFUk4iLHRbdC5OT19MSU5FX0JSRUFLU19GTEFHUz0xM109Ik5PX0xJTkVfQlJFQUtTX0ZMQUdTIix0W3QuVU5SRUFDSEFCTEVfUEFUVEVSTj0xNF09IlVOUkVBQ0hBQkxFX1BBVFRFUk4iLHRbdC5JREVOVElGWV9URVJNSU5BVE9SPTE1XT0iSURFTlRJRllfVEVSTUlOQVRPUiIsdFt0LkNVU1RPTV9MSU5FX0JSRUFLPTE2XT0iQ1VTVE9NX0xJTkVfQlJFQUsiLHRbdC5NVUxUSV9NT0RFX0xFWEVSX0xPTkdFUl9BTFRfTk9UX0lOX0NVUlJFTlRfTU9ERT0xN109Ik1VTFRJX01PREVfTEVYRVJfTE9OR0VSX0FMVF9OT1RfSU5fQ1VSUkVOVF9NT0RFIn0pKGpufHwoam49e30pKTtteD17ZGVmZXJEZWZpbml0aW9uRXJyb3JzSGFuZGxpbmc6ITEscG9zaXRpb25UcmFja2luZzoiZnVsbCIsbGluZVRlcm1pbmF0b3JzUGF0dGVybjovXG58XHJcbj8vZyxsaW5lVGVybWluYXRvckNoYXJhY3RlcnM6W2AKYCwiXHIiXSxlbnN1cmVPcHRpbWl6YXRpb25zOiExLHNhZmVNb2RlOiExLGVycm9yTWVzc2FnZVByb3ZpZGVyOktnLHRyYWNlSW5pdFBlcmY6ITEsc2tpcFZhbGlkYXRpb25zOiExLHJlY292ZXJ5RW5hYmxlZDohMH07T2JqZWN0LmZyZWV6ZShteCk7S249Y2xhc3N7c3RhdGlje28odGhpcywiTGV4ZXIiKX1jb25zdHJ1Y3RvcihlLHI9bXgpe2lmKHRoaXMubGV4ZXJEZWZpbml0aW9uPWUsdGhpcy5sZXhlckRlZmluaXRpb25FcnJvcnM9W10sdGhpcy5sZXhlckRlZmluaXRpb25XYXJuaW5nPVtdLHRoaXMucGF0dGVybklkeFRvQ29uZmlnPXt9LHRoaXMuY2hhckNvZGVUb1BhdHRlcm5JZHhUb0NvbmZpZz17fSx0aGlzLm1vZGVzPVtdLHRoaXMuZW1wdHlHcm91cHM9e30sdGhpcy50cmFja1N0YXJ0TGluZXM9ITAsdGhpcy50cmFja0VuZExpbmVzPSEwLHRoaXMuaGFzQ3VzdG9tPSExLHRoaXMuY2FuTW9kZUJlT3B0aW1pemVkPXt9LHRoaXMuVFJBQ0VfSU5JVD0oaSxhKT0+e2lmKHRoaXMudHJhY2VJbml0UGVyZj09PSEwKXt0aGlzLnRyYWNlSW5pdEluZGVudCsrO2xldCBzPW5ldyBBcnJheSh0aGlzLnRyYWNlSW5pdEluZGVudCsxKS5qb2luKCIJIik7dGhpcy50cmFjZUluaXRJbmRlbnQ8dGhpcy50cmFjZUluaXRNYXhJZGVudCYmY29uc29sZS5sb2coYCR7c30tLT4gPCR7aX0+YCk7bGV0e3RpbWU6bCx2YWx1ZTp1fT1oeChhKSxoPWw+MTA/Y29uc29sZS53YXJuOmNvbnNvbGUubG9nO3JldHVybiB0aGlzLnRyYWNlSW5pdEluZGVudDx0aGlzLnRyYWNlSW5pdE1heElkZW50JiZoKGAke3N9PC0tIDwke2l9PiB0aW1lOiAke2x9bXNgKSx0aGlzLnRyYWNlSW5pdEluZGVudC0tLHV9ZWxzZSByZXR1cm4gYSgpfSx0eXBlb2Ygcj09ImJvb2xlYW4iKXRocm93IEVycm9yKGBUaGUgc2Vjb25kIGFyZ3VtZW50IHRvIHRoZSBMZXhlciBjb25zdHJ1Y3RvciBpcyBub3cgYW4gSUxleGVyQ29uZmlnIE9iamVjdC4KYSBib29sZWFuIDJuZCBhcmd1bWVudCBpcyBubyBsb25nZXIgc3VwcG9ydGVkYCk7dGhpcy5jb25maWc9cGEoe30sbXgscik7bGV0IG49dGhpcy5jb25maWcudHJhY2VJbml0UGVyZjtuPT09ITA/KHRoaXMudHJhY2VJbml0TWF4SWRlbnQ9MS8wLHRoaXMudHJhY2VJbml0UGVyZj0hMCk6dHlwZW9mIG49PSJudW1iZXIiJiYodGhpcy50cmFjZUluaXRNYXhJZGVudD1uLHRoaXMudHJhY2VJbml0UGVyZj0hMCksdGhpcy50cmFjZUluaXRJbmRlbnQ9LTEsdGhpcy5UUkFDRV9JTklUKCJMZXhlciBDb25zdHJ1Y3RvciIsKCk9PntsZXQgaSxhPSEwO3RoaXMuVFJBQ0VfSU5JVCgiTGV4ZXIgQ29uZmlnIGhhbmRsaW5nIiwoKT0+e2lmKHRoaXMuY29uZmlnLmxpbmVUZXJtaW5hdG9yc1BhdHRlcm49PT1teC5saW5lVGVybWluYXRvcnNQYXR0ZXJuKXRoaXMuY29uZmlnLmxpbmVUZXJtaW5hdG9yc1BhdHRlcm49aG9lO2Vsc2UgaWYodGhpcy5jb25maWcubGluZVRlcm1pbmF0b3JDaGFyYWN0ZXJzPT09bXgubGluZVRlcm1pbmF0b3JDaGFyYWN0ZXJzKXRocm93IEVycm9yKGBFcnJvcjogTWlzc2luZyA8bGluZVRlcm1pbmF0b3JDaGFyYWN0ZXJzPiBwcm9wZXJ0eSBvbiB0aGUgTGV4ZXIgY29uZmlnLgoJRm9yIGRldGFpbHMgU2VlOiBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9ndWlkZS9yZXNvbHZpbmdfbGV4ZXJfZXJyb3JzLmh0bWwjTUlTU0lOR19MSU5FX1RFUk1fQ0hBUlNgKTtpZihyLnNhZmVNb2RlJiZyLmVuc3VyZU9wdGltaXphdGlvbnMpdGhyb3cgRXJyb3IoJyJzYWZlTW9kZSIgYW5kICJlbnN1cmVPcHRpbWl6YXRpb25zIiBmbGFncyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLicpO3RoaXMudHJhY2tTdGFydExpbmVzPS9mdWxsfG9ubHlTdGFydC9pLnRlc3QodGhpcy5jb25maWcucG9zaXRpb25UcmFja2luZyksdGhpcy50cmFja0VuZExpbmVzPS9mdWxsL2kudGVzdCh0aGlzLmNvbmZpZy5wb3NpdGlvblRyYWNraW5nKSxQdChlKT9pPXttb2Rlczp7ZGVmYXVsdE1vZGU6YW4oZSl9LGRlZmF1bHRNb2RlOlhnfTooYT0hMSxpPWFuKGUpKX0pLHRoaXMuY29uZmlnLnNraXBWYWxpZGF0aW9ucz09PSExJiYodGhpcy5UUkFDRV9JTklUKCJwZXJmb3JtUnVudGltZUNoZWNrcyIsKCk9Pnt0aGlzLmxleGVyRGVmaW5pdGlvbkVycm9ycz10aGlzLmxleGVyRGVmaW5pdGlvbkVycm9ycy5jb25jYXQob29lKGksdGhpcy50cmFja1N0YXJ0TGluZXMsdGhpcy5jb25maWcubGluZVRlcm1pbmF0b3JDaGFyYWN0ZXJzKSl9KSx0aGlzLlRSQUNFX0lOSVQoInBlcmZvcm1XYXJuaW5nUnVudGltZUNoZWNrcyIsKCk9Pnt0aGlzLmxleGVyRGVmaW5pdGlvbldhcm5pbmc9dGhpcy5sZXhlckRlZmluaXRpb25XYXJuaW5nLmNvbmNhdChsb2UoaSx0aGlzLnRyYWNrU3RhcnRMaW5lcyx0aGlzLmNvbmZpZy5saW5lVGVybWluYXRvckNoYXJhY3RlcnMpKX0pKSxpLm1vZGVzPWkubW9kZXM/aS5tb2Rlczp7fSxBZShpLm1vZGVzLChsLHUpPT57aS5tb2Rlc1t1XT1zZihsLGg9Pm1yKGgpKX0pO2xldCBzPXpyKGkubW9kZXMpO2lmKEFlKGkubW9kZXMsKGwsdSk9Pnt0aGlzLlRSQUNFX0lOSVQoYE1vZGU6IDwke3V9PiBwcm9jZXNzaW5nYCwoKT0+e2lmKHRoaXMubW9kZXMucHVzaCh1KSx0aGlzLmNvbmZpZy5za2lwVmFsaWRhdGlvbnM9PT0hMSYmdGhpcy5UUkFDRV9JTklUKCJ2YWxpZGF0ZVBhdHRlcm5zIiwoKT0+e3RoaXMubGV4ZXJEZWZpbml0aW9uRXJyb3JzPXRoaXMubGV4ZXJEZWZpbml0aW9uRXJyb3JzLmNvbmNhdChzb2UobCxzKSl9KSxocih0aGlzLmxleGVyRGVmaW5pdGlvbkVycm9ycykpe1V1KGwpO2xldCBoO3RoaXMuVFJBQ0VfSU5JVCgiYW5hbHl6ZVRva2VuVHlwZXMiLCgpPT57aD1hb2UobCx7bGluZVRlcm1pbmF0b3JDaGFyYWN0ZXJzOnRoaXMuY29uZmlnLmxpbmVUZXJtaW5hdG9yQ2hhcmFjdGVycyxwb3NpdGlvblRyYWNraW5nOnIucG9zaXRpb25UcmFja2luZyxlbnN1cmVPcHRpbWl6YXRpb25zOnIuZW5zdXJlT3B0aW1pemF0aW9ucyxzYWZlTW9kZTpyLnNhZmVNb2RlLHRyYWNlcjp0aGlzLlRSQUNFX0lOSVR9KX0pLHRoaXMucGF0dGVybklkeFRvQ29uZmlnW3VdPWgucGF0dGVybklkeFRvQ29uZmlnLHRoaXMuY2hhckNvZGVUb1BhdHRlcm5JZHhUb0NvbmZpZ1t1XT1oLmNoYXJDb2RlVG9QYXR0ZXJuSWR4VG9Db25maWcsdGhpcy5lbXB0eUdyb3Vwcz1wYSh7fSx0aGlzLmVtcHR5R3JvdXBzLGguZW1wdHlHcm91cHMpLHRoaXMuaGFzQ3VzdG9tPWguaGFzQ3VzdG9tfHx0aGlzLmhhc0N1c3RvbSx0aGlzLmNhbk1vZGVCZU9wdGltaXplZFt1XT1oLmNhbkJlT3B0aW1pemVkfX0pfSksdGhpcy5kZWZhdWx0TW9kZT1pLmRlZmF1bHRNb2RlLCFocih0aGlzLmxleGVyRGVmaW5pdGlvbkVycm9ycykmJiF0aGlzLmNvbmZpZy5kZWZlckRlZmluaXRpb25FcnJvcnNIYW5kbGluZyl7bGV0IHU9SmUodGhpcy5sZXhlckRlZmluaXRpb25FcnJvcnMsaD0+aC5tZXNzYWdlKS5qb2luKGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpgKTt0aHJvdyBuZXcgRXJyb3IoYEVycm9ycyBkZXRlY3RlZCBpbiBkZWZpbml0aW9uIG9mIExleGVyOgpgK3UpfUFlKHRoaXMubGV4ZXJEZWZpbml0aW9uV2FybmluZyxsPT57dXgobC5tZXNzYWdlKX0pLHRoaXMuVFJBQ0VfSU5JVCgiQ2hvb3Npbmcgc3ViLW1ldGhvZHMgaW1wbGVtZW50YXRpb25zIiwoKT0+e2lmKHVNPyh0aGlzLmNob3BJbnB1dD10YSx0aGlzLm1hdGNoPXRoaXMubWF0Y2hXaXRoVGVzdCk6KHRoaXMudXBkYXRlTGFzdEluZGV4PWFpLHRoaXMubWF0Y2g9dGhpcy5tYXRjaFdpdGhFeGVjKSxhJiYodGhpcy5oYW5kbGVNb2Rlcz1haSksdGhpcy50cmFja1N0YXJ0TGluZXM9PT0hMSYmKHRoaXMuY29tcHV0ZU5ld0NvbHVtbj10YSksdGhpcy50cmFja0VuZExpbmVzPT09ITEmJih0aGlzLnVwZGF0ZVRva2VuRW5kTGluZUNvbHVtbkxvY2F0aW9uPWFpKSwvZnVsbC9pLnRlc3QodGhpcy5jb25maWcucG9zaXRpb25UcmFja2luZykpdGhpcy5jcmVhdGVUb2tlbkluc3RhbmNlPXRoaXMuY3JlYXRlRnVsbFRva2VuO2Vsc2UgaWYoL29ubHlTdGFydC9pLnRlc3QodGhpcy5jb25maWcucG9zaXRpb25UcmFja2luZykpdGhpcy5jcmVhdGVUb2tlbkluc3RhbmNlPXRoaXMuY3JlYXRlU3RhcnRPbmx5VG9rZW47ZWxzZSBpZigvb25seU9mZnNldC9pLnRlc3QodGhpcy5jb25maWcucG9zaXRpb25UcmFja2luZykpdGhpcy5jcmVhdGVUb2tlbkluc3RhbmNlPXRoaXMuY3JlYXRlT2Zmc2V0T25seVRva2VuO2Vsc2UgdGhyb3cgRXJyb3IoYEludmFsaWQgPHBvc2l0aW9uVHJhY2tpbmc+IGNvbmZpZyBvcHRpb246ICIke3RoaXMuY29uZmlnLnBvc2l0aW9uVHJhY2tpbmd9ImApO3RoaXMuaGFzQ3VzdG9tPyh0aGlzLmFkZFRva2VuPXRoaXMuYWRkVG9rZW5Vc2luZ1B1c2gsdGhpcy5oYW5kbGVQYXlsb2FkPXRoaXMuaGFuZGxlUGF5bG9hZFdpdGhDdXN0b20pOih0aGlzLmFkZFRva2VuPXRoaXMuYWRkVG9rZW5Vc2luZ01lbWJlckFjY2Vzcyx0aGlzLmhhbmRsZVBheWxvYWQ9dGhpcy5oYW5kbGVQYXlsb2FkTm9DdXN0b20pfSksdGhpcy5UUkFDRV9JTklUKCJGYWlsZWQgT3B0aW1pemF0aW9uIFdhcm5pbmdzIiwoKT0+e2xldCBsPVhyKHRoaXMuY2FuTW9kZUJlT3B0aW1pemVkLCh1LGgsZik9PihoPT09ITEmJnUucHVzaChmKSx1KSxbXSk7aWYoci5lbnN1cmVPcHRpbWl6YXRpb25zJiYhaHIobCkpdGhyb3cgRXJyb3IoYExleGVyIE1vZGVzOiA8ICR7bC5qb2luKCIsICIpfSA+IGNhbm5vdCBiZSBvcHRpbWl6ZWQuCgkgRGlzYWJsZSB0aGUgImVuc3VyZU9wdGltaXphdGlvbnMiIGxleGVyIGNvbmZpZyBmbGFnIHRvIHNpbGVudGx5IGlnbm9yZSB0aGlzIGFuZCBydW4gdGhlIGxleGVyIGluIGFuIHVuLW9wdGltaXplZCBtb2RlLgoJIE9yIGluc3BlY3QgdGhlIGNvbnNvbGUgbG9nIGZvciBkZXRhaWxzIG9uIGhvdyB0byByZXNvbHZlIHRoZXNlIGlzc3Vlcy5gKX0pLHRoaXMuVFJBQ0VfSU5JVCgiY2xlYXJSZWdFeHBQYXJzZXJDYWNoZSIsKCk9Pntac2UoKX0pLHRoaXMuVFJBQ0VfSU5JVCgidG9GYXN0UHJvcGVydGllcyIsKCk9PntmeCh0aGlzKX0pfSl9dG9rZW5pemUoZSxyPXRoaXMuZGVmYXVsdE1vZGUpe2lmKCFocih0aGlzLmxleGVyRGVmaW5pdGlvbkVycm9ycykpe2xldCBpPUplKHRoaXMubGV4ZXJEZWZpbml0aW9uRXJyb3JzLGE9PmEubWVzc2FnZSkuam9pbihgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KYCk7dGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gVG9rZW5pemUgYmVjYXVzZSBFcnJvcnMgZGV0ZWN0ZWQgaW4gZGVmaW5pdGlvbiBvZiBMZXhlcjoKYCtpKX1yZXR1cm4gdGhpcy50b2tlbml6ZUludGVybmFsKGUscil9dG9rZW5pemVJbnRlcm5hbChlLHIpe2xldCBuLGksYSxzLGwsdSxoLGYsZCxwLG0sZyx5LHYseCxiLFQ9ZSxTPVQubGVuZ3RoLHc9MCxFPTAsXz10aGlzLmhhc0N1c3RvbT8wOk1hdGguZmxvb3IoZS5sZW5ndGgvMTApLEM9bmV3IEFycmF5KF8pLEQ9W10sTz10aGlzLnRyYWNrU3RhcnRMaW5lcz8xOnZvaWQgMCxSPXRoaXMudHJhY2tTdGFydExpbmVzPzE6dm9pZCAwLGs9Y29lKHRoaXMuZW1wdHlHcm91cHMpLEw9dGhpcy50cmFja1N0YXJ0TGluZXMsQT10aGlzLmNvbmZpZy5saW5lVGVybWluYXRvcnNQYXR0ZXJuLEk9MCxNPVtdLFA9W10sQj1bXSxGPVtdO09iamVjdC5mcmVlemUoRik7bGV0IHo7ZnVuY3Rpb24gJCgpe3JldHVybiBNfW8oJCwiZ2V0UG9zc2libGVQYXR0ZXJuc1Nsb3ciKTtmdW5jdGlvbiBVKFope2xldCB1ZT0kYyhaKSxRPVBbdWVdO3JldHVybiBRPT09dm9pZCAwP0Y6UX1vKFUsImdldFBvc3NpYmxlUGF0dGVybnNPcHRpbWl6ZWQiKTtsZXQgSz1vKFo9PntpZihCLmxlbmd0aD09PTEmJloudG9rZW5UeXBlLlBVU0hfTU9ERT09PXZvaWQgMCl7bGV0IHVlPXRoaXMuY29uZmlnLmVycm9yTWVzc2FnZVByb3ZpZGVyLmJ1aWxkVW5hYmxlVG9Qb3BMZXhlck1vZGVNZXNzYWdlKFopO0QucHVzaCh7b2Zmc2V0Olouc3RhcnRPZmZzZXQsbGluZTpaLnN0YXJ0TGluZSxjb2x1bW46Wi5zdGFydENvbHVtbixsZW5ndGg6Wi5pbWFnZS5sZW5ndGgsbWVzc2FnZTp1ZX0pfWVsc2V7Qi5wb3AoKTtsZXQgdWU9bWEoQik7TT10aGlzLnBhdHRlcm5JZHhUb0NvbmZpZ1t1ZV0sUD10aGlzLmNoYXJDb2RlVG9QYXR0ZXJuSWR4VG9Db25maWdbdWVdLEk9TS5sZW5ndGg7bGV0IFE9dGhpcy5jYW5Nb2RlQmVPcHRpbWl6ZWRbdWVdJiZ0aGlzLmNvbmZpZy5zYWZlTW9kZT09PSExO1AmJlE/ej1VOno9JH19LCJwb3BfbW9kZSIpO2Z1bmN0aW9uIGVlKFope0IucHVzaChaKSxQPXRoaXMuY2hhckNvZGVUb1BhdHRlcm5JZHhUb0NvbmZpZ1taXSxNPXRoaXMucGF0dGVybklkeFRvQ29uZmlnW1pdLEk9TS5sZW5ndGgsST1NLmxlbmd0aDtsZXQgdWU9dGhpcy5jYW5Nb2RlQmVPcHRpbWl6ZWRbWl0mJnRoaXMuY29uZmlnLnNhZmVNb2RlPT09ITE7UCYmdWU/ej1VOno9JH1vKGVlLCJwdXNoX21vZGUiKSxlZS5jYWxsKHRoaXMscik7bGV0IFksY2U9dGhpcy5jb25maWcucmVjb3ZlcnlFbmFibGVkO2Zvcig7dzxTOyl7dT1udWxsO2xldCBaPVQuY2hhckNvZGVBdCh3KSx1ZT16KFopLFE9dWUubGVuZ3RoO2ZvcihuPTA7bjxRO24rKyl7WT11ZVtuXTtsZXQgaj1ZLnBhdHRlcm47aD1udWxsO2xldCBuZT1ZLnNob3J0O2lmKG5lIT09ITE/Wj09PW5lJiYodT1qKTpZLmlzQ3VzdG9tPT09ITA/KGI9ai5leGVjKFQsdyxDLGspLGIhPT1udWxsPyh1PWJbMF0sYi5wYXlsb2FkIT09dm9pZCAwJiYoaD1iLnBheWxvYWQpKTp1PW51bGwpOih0aGlzLnVwZGF0ZUxhc3RJbmRleChqLHcpLHU9dGhpcy5tYXRjaChqLGUsdykpLHUhPT1udWxsKXtpZihsPVkubG9uZ2VyQWx0LGwhPT12b2lkIDApe2xldCB0ZT1sLmxlbmd0aDtmb3IoYT0wO2E8dGU7YSsrKXtsZXQgaGU9TVtsW2FdXSxsZT1oZS5wYXR0ZXJuO2lmKGY9bnVsbCxoZS5pc0N1c3RvbT09PSEwPyhiPWxlLmV4ZWMoVCx3LEMsayksYiE9PW51bGw/KHM9YlswXSxiLnBheWxvYWQhPT12b2lkIDAmJihmPWIucGF5bG9hZCkpOnM9bnVsbCk6KHRoaXMudXBkYXRlTGFzdEluZGV4KGxlLHcpLHM9dGhpcy5tYXRjaChsZSxlLHcpKSxzJiZzLmxlbmd0aD51Lmxlbmd0aCl7dT1zLGg9ZixZPWhlO2JyZWFrfX19YnJlYWt9fWlmKHUhPT1udWxsKXtpZihkPXUubGVuZ3RoLHA9WS5ncm91cCxwIT09dm9pZCAwJiYobT1ZLnRva2VuVHlwZUlkeCxnPXRoaXMuY3JlYXRlVG9rZW5JbnN0YW5jZSh1LHcsbSxZLnRva2VuVHlwZSxPLFIsZCksdGhpcy5oYW5kbGVQYXlsb2FkKGcsaCkscD09PSExP0U9dGhpcy5hZGRUb2tlbihDLEUsZyk6a1twXS5wdXNoKGcpKSxlPXRoaXMuY2hvcElucHV0KGUsZCksdz13K2QsUj10aGlzLmNvbXB1dGVOZXdDb2x1bW4oUixkKSxMPT09ITAmJlkuY2FuTGluZVRlcm1pbmF0b3I9PT0hMCl7bGV0IGo9MCxuZSx0ZTtBLmxhc3RJbmRleD0wO2RvIG5lPUEudGVzdCh1KSxuZT09PSEwJiYodGU9QS5sYXN0SW5kZXgtMSxqKyspO3doaWxlKG5lPT09ITApO2ohPT0wJiYoTz1PK2osUj1kLXRlLHRoaXMudXBkYXRlVG9rZW5FbmRMaW5lQ29sdW1uTG9jYXRpb24oZyxwLHRlLGosTyxSLGQpKX10aGlzLmhhbmRsZU1vZGVzKFksSyxlZSxnKX1lbHNle2xldCBqPXcsbmU9Tyx0ZT1SLGhlPWNlPT09ITE7Zm9yKDtoZT09PSExJiZ3PFM7KWZvcihlPXRoaXMuY2hvcElucHV0KGUsMSksdysrLGk9MDtpPEk7aSsrKXtsZXQgbGU9TVtpXSxKPWxlLnBhdHRlcm4sU2U9bGUuc2hvcnQ7aWYoU2UhPT0hMT9ULmNoYXJDb2RlQXQodyk9PT1TZSYmKGhlPSEwKTpsZS5pc0N1c3RvbT09PSEwP2hlPUouZXhlYyhULHcsQyxrKSE9PW51bGw6KHRoaXMudXBkYXRlTGFzdEluZGV4KEosdyksaGU9Si5leGVjKGUpIT09bnVsbCksaGU9PT0hMClicmVha31pZih5PXctaixSPXRoaXMuY29tcHV0ZU5ld0NvbHVtbihSLHkpLHg9dGhpcy5jb25maWcuZXJyb3JNZXNzYWdlUHJvdmlkZXIuYnVpbGRVbmV4cGVjdGVkQ2hhcmFjdGVyc01lc3NhZ2UoVCxqLHksbmUsdGUpLEQucHVzaCh7b2Zmc2V0OmosbGluZTpuZSxjb2x1bW46dGUsbGVuZ3RoOnksbWVzc2FnZTp4fSksY2U9PT0hMSlicmVha319cmV0dXJuIHRoaXMuaGFzQ3VzdG9tfHwoQy5sZW5ndGg9RSkse3Rva2VuczpDLGdyb3VwczprLGVycm9yczpEfX1oYW5kbGVNb2RlcyhlLHIsbixpKXtpZihlLnBvcD09PSEwKXtsZXQgYT1lLnB1c2g7cihpKSxhIT09dm9pZCAwJiZuLmNhbGwodGhpcyxhKX1lbHNlIGUucHVzaCE9PXZvaWQgMCYmbi5jYWxsKHRoaXMsZS5wdXNoKX1jaG9wSW5wdXQoZSxyKXtyZXR1cm4gZS5zdWJzdHJpbmcocil9dXBkYXRlTGFzdEluZGV4KGUscil7ZS5sYXN0SW5kZXg9cn11cGRhdGVUb2tlbkVuZExpbmVDb2x1bW5Mb2NhdGlvbihlLHIsbixpLGEscyxsKXtsZXQgdSxoO3IhPT12b2lkIDAmJih1PW49PT1sLTEsaD11Py0xOjAsaT09PTEmJnU9PT0hMHx8KGUuZW5kTGluZT1hK2gsZS5lbmRDb2x1bW49cy0xKy1oKSl9Y29tcHV0ZU5ld0NvbHVtbihlLHIpe3JldHVybiBlK3J9Y3JlYXRlT2Zmc2V0T25seVRva2VuKGUscixuLGkpe3JldHVybntpbWFnZTplLHN0YXJ0T2Zmc2V0OnIsdG9rZW5UeXBlSWR4Om4sdG9rZW5UeXBlOml9fWNyZWF0ZVN0YXJ0T25seVRva2VuKGUscixuLGksYSxzKXtyZXR1cm57aW1hZ2U6ZSxzdGFydE9mZnNldDpyLHN0YXJ0TGluZTphLHN0YXJ0Q29sdW1uOnMsdG9rZW5UeXBlSWR4Om4sdG9rZW5UeXBlOml9fWNyZWF0ZUZ1bGxUb2tlbihlLHIsbixpLGEscyxsKXtyZXR1cm57aW1hZ2U6ZSxzdGFydE9mZnNldDpyLGVuZE9mZnNldDpyK2wtMSxzdGFydExpbmU6YSxlbmRMaW5lOmEsc3RhcnRDb2x1bW46cyxlbmRDb2x1bW46cytsLTEsdG9rZW5UeXBlSWR4Om4sdG9rZW5UeXBlOml9fWFkZFRva2VuVXNpbmdQdXNoKGUscixuKXtyZXR1cm4gZS5wdXNoKG4pLHJ9YWRkVG9rZW5Vc2luZ01lbWJlckFjY2VzcyhlLHIsbil7cmV0dXJuIGVbcl09bixyKysscn1oYW5kbGVQYXlsb2FkTm9DdXN0b20oZSxyKXt9aGFuZGxlUGF5bG9hZFdpdGhDdXN0b20oZSxyKXtyIT09bnVsbCYmKGUucGF5bG9hZD1yKX1tYXRjaFdpdGhUZXN0KGUscixuKXtyZXR1cm4gZS50ZXN0KHIpPT09ITA/ci5zdWJzdHJpbmcobixlLmxhc3RJbmRleCk6bnVsbH1tYXRjaFdpdGhFeGVjKGUscil7bGV0IG49ZS5leGVjKHIpO3JldHVybiBuIT09bnVsbD9uWzBdOm51bGx9fTtLbi5TS0lQUEVEPSJUaGlzIG1hcmtzIGEgc2tpcHBlZCBUb2tlbiBwYXR0ZXJuLCB0aGlzIG1lYW5zIGVhY2ggdG9rZW4gaWRlbnRpZmllZCBieSBpdCB3aWxsYmUgY29uc3VtZWQgYW5kIHRoZW4gdGhyb3duIGludG8gb2JsaXZpb24sIHRoaXMgY2FuIGJlIHVzZWQgdG8gZm9yIGV4YW1wbGUgdG8gY29tcGxldGVseSBpZ25vcmUgd2hpdGVzcGFjZS4iO0tuLk5BPS9OT1RfQVBQTElDQUJMRS99KTtmdW5jdGlvbiBIdSh0KXtyZXR1cm4gZE0odCk/dC5MQUJFTDp0Lm5hbWV9ZnVuY3Rpb24gZE0odCl7cmV0dXJuIFRpKHQuTEFCRUwpJiZ0LkxBQkVMIT09IiJ9ZnVuY3Rpb24gZGYodCl7cmV0dXJuIHdGZSh0KX1mdW5jdGlvbiB3RmUodCl7bGV0IGU9dC5wYXR0ZXJuLHI9e307aWYoci5uYW1lPXQubmFtZSxtcihlKXx8KHIuUEFUVEVSTj1lKSxCdCh0LFRGZSkpdGhyb3dgVGhlIHBhcmVudCBwcm9wZXJ0eSBpcyBubyBsb25nZXIgc3VwcG9ydGVkLgpTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9jaGV2cm90YWluL2NoZXZyb3RhaW4vaXNzdWVzLzU2NCNpc3N1ZWNvbW1lbnQtMzQ5MDYyMzQ2IGZvciBkZXRhaWxzLmA7cmV0dXJuIEJ0KHQseG9lKSYmKHIuQ0FURUdPUklFUz10W3hvZV0pLFV1KFtyXSksQnQodCxib2UpJiYoci5MQUJFTD10W2JvZV0pLEJ0KHQsVG9lKSYmKHIuR1JPVVA9dFtUb2VdKSxCdCh0LGtvZSkmJihyLlBPUF9NT0RFPXRba29lXSksQnQodCx3b2UpJiYoci5QVVNIX01PREU9dFt3b2VdKSxCdCh0LEVvZSkmJihyLkxPTkdFUl9BTFQ9dFtFb2VdKSxCdCh0LFNvZSkmJihyLkxJTkVfQlJFQUtTPXRbU29lXSksQnQodCxDb2UpJiYoci5TVEFSVF9DSEFSU19ISU5UPXRbQ29lXSkscn1mdW5jdGlvbiBXdSh0LGUscixuLGksYSxzLGwpe3JldHVybntpbWFnZTplLHN0YXJ0T2Zmc2V0OnIsZW5kT2Zmc2V0Om4sc3RhcnRMaW5lOmksZW5kTGluZTphLHN0YXJ0Q29sdW1uOnMsZW5kQ29sdW1uOmwsdG9rZW5UeXBlSWR4OnQudG9rZW5UeXBlSWR4LHRva2VuVHlwZTp0fX1mdW5jdGlvbiBneCh0LGUpe3JldHVybiBWdSh0LGUpfXZhciBURmUseG9lLGJvZSxUb2Usd29lLGtvZSxFb2UsU29lLENvZSxmbyxicD1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7cHgoKTt4cCgpO28oSHUsInRva2VuTGFiZWwiKTtvKGRNLCJoYXNUb2tlbkxhYmVsIik7VEZlPSJwYXJlbnQiLHhvZT0iY2F0ZWdvcmllcyIsYm9lPSJsYWJlbCIsVG9lPSJncm91cCIsd29lPSJwdXNoX21vZGUiLGtvZT0icG9wX21vZGUiLEVvZT0ibG9uZ2VyX2FsdCIsU29lPSJsaW5lX2JyZWFrcyIsQ29lPSJzdGFydF9jaGFyc19oaW50IjtvKGRmLCJjcmVhdGVUb2tlbiIpO28od0ZlLCJjcmVhdGVUb2tlbkludGVybmFsIik7Zm89ZGYoe25hbWU6IkVPRiIscGF0dGVybjpLbi5OQX0pO1V1KFtmb10pO28oV3UsImNyZWF0ZVRva2VuSW5zdGFuY2UiKTtvKGd4LCJ0b2tlbk1hdGNoZXIiKX0pO3ZhciBxdSxBb2UsJGwsUWc9TigoKT0+eyJ1c2Ugc3RyaWN0IjticCgpO3F0KCk7ZnMoKTtxdT17YnVpbGRNaXNtYXRjaFRva2VuTWVzc2FnZSh7ZXhwZWN0ZWQ6dCxhY3R1YWw6ZSxwcmV2aW91czpyLHJ1bGVOYW1lOm59KXtyZXR1cm5gRXhwZWN0aW5nICR7ZE0odCk/YC0tPiAke0h1KHQpfSA8LS1gOmB0b2tlbiBvZiB0eXBlIC0tPiAke3QubmFtZX0gPC0tYH0gYnV0IGZvdW5kIC0tPiAnJHtlLmltYWdlfScgPC0tYH0sYnVpbGROb3RBbGxJbnB1dFBhcnNlZE1lc3NhZ2Uoe2ZpcnN0UmVkdW5kYW50OnQscnVsZU5hbWU6ZX0pe3JldHVybiJSZWR1bmRhbnQgaW5wdXQsIGV4cGVjdGluZyBFT0YgYnV0IGZvdW5kOiAiK3QuaW1hZ2V9LGJ1aWxkTm9WaWFibGVBbHRNZXNzYWdlKHtleHBlY3RlZFBhdGhzUGVyQWx0OnQsYWN0dWFsOmUscHJldmlvdXM6cixjdXN0b21Vc2VyRGVzY3JpcHRpb246bixydWxlTmFtZTppfSl7bGV0IGE9IkV4cGVjdGluZzogIixsPWAKYnV0IGZvdW5kOiAnYCtpYShlKS5pbWFnZSsiJyI7aWYobilyZXR1cm4gYStuK2w7e2xldCB1PVhyKHQsKHAsbSk9PnAuY29uY2F0KG0pLFtdKSxoPUplKHUscD0+YFske0plKHAsbT0+SHUobSkpLmpvaW4oIiwgIil9XWApLGQ9YG9uZSBvZiB0aGVzZSBwb3NzaWJsZSBUb2tlbiBzZXF1ZW5jZXM6CiR7SmUoaCwocCxtKT0+YCAgJHttKzF9LiAke3B9YCkuam9pbihgCmApfWA7cmV0dXJuIGErZCtsfX0sYnVpbGRFYXJseUV4aXRNZXNzYWdlKHtleHBlY3RlZEl0ZXJhdGlvblBhdGhzOnQsYWN0dWFsOmUsY3VzdG9tVXNlckRlc2NyaXB0aW9uOnIscnVsZU5hbWU6bn0pe2xldCBpPSJFeHBlY3Rpbmc6ICIscz1gCmJ1dCBmb3VuZDogJ2AraWEoZSkuaW1hZ2UrIiciO2lmKHIpcmV0dXJuIGkrcitzO3tsZXQgdT1gZXhwZWN0aW5nIGF0IGxlYXN0IG9uZSBpdGVyYXRpb24gd2hpY2ggc3RhcnRzIHdpdGggb25lIG9mIHRoZXNlIHBvc3NpYmxlIFRva2VuIHNlcXVlbmNlczo6CiAgPCR7SmUodCxoPT5gWyR7SmUoaCxmPT5IdShmKSkuam9pbigiLCIpfV1gKS5qb2luKCIgLCIpfT5gO3JldHVybiBpK3Urc319fTtPYmplY3QuZnJlZXplKHF1KTtBb2U9e2J1aWxkUnVsZU5vdEZvdW5kRXJyb3IodCxlKXtyZXR1cm4iSW52YWxpZCBncmFtbWFyLCByZWZlcmVuY2UgdG8gYSBydWxlIHdoaWNoIGlzIG5vdCBkZWZpbmVkOiAtPiIrZS5ub25UZXJtaW5hbE5hbWUrYDwtCmluc2lkZSB0b3AgbGV2ZWwgcnVsZTogLT5gK3QubmFtZSsiPC0ifX0sJGw9e2J1aWxkRHVwbGljYXRlRm91bmRFcnJvcih0LGUpe2Z1bmN0aW9uIHIoZil7cmV0dXJuIGYgaW5zdGFuY2VvZiBFcj9mLnRlcm1pbmFsVHlwZS5uYW1lOmYgaW5zdGFuY2VvZiBvbj9mLm5vblRlcm1pbmFsTmFtZToiIn1vKHIsImdldEV4dHJhUHJvZHVjdGlvbkFyZ3VtZW50Iik7bGV0IG49dC5uYW1lLGk9aWEoZSksYT1pLmlkeCxzPVZzKGkpLGw9cihpKSx1PWE+MCxoPWAtPiR7c30ke3U/YToiIn08LSAke2w/YHdpdGggYXJndW1lbnQ6IC0+JHtsfTwtYDoiIn0KICAgICAgICAgICAgICAgICAgYXBwZWFycyBtb3JlIHRoYW4gb25jZSAoJHtlLmxlbmd0aH0gdGltZXMpIGluIHRoZSB0b3AgbGV2ZWwgcnVsZTogLT4ke259PC0uICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgIEZvciBmdXJ0aGVyIGRldGFpbHMgc2VlOiBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9GQVEuaHRtbCNOVU1FUklDQUxfU1VGRklYRVMgCiAgICAgICAgICAgICAgICAgIGA7cmV0dXJuIGg9aC5yZXBsYWNlKC9bIFx0XSsvZywiICIpLGg9aC5yZXBsYWNlKC9cc1xzKy9nLGAKYCksaH0sYnVpbGROYW1lc3BhY2VDb25mbGljdEVycm9yKHQpe3JldHVybmBOYW1lc3BhY2UgY29uZmxpY3QgZm91bmQgaW4gZ3JhbW1hci4KVGhlIGdyYW1tYXIgaGFzIGJvdGggYSBUZXJtaW5hbChUb2tlbikgYW5kIGEgTm9uLVRlcm1pbmFsKFJ1bGUpIG5hbWVkOiA8JHt0Lm5hbWV9Pi4KVG8gcmVzb2x2ZSB0aGlzIG1ha2Ugc3VyZSBlYWNoIFRlcm1pbmFsIGFuZCBOb24tVGVybWluYWwgbmFtZXMgYXJlIHVuaXF1ZQpUaGlzIGlzIGVhc3kgdG8gYWNjb21wbGlzaCBieSB1c2luZyB0aGUgY29udmVudGlvbiB0aGF0IFRlcm1pbmFsIG5hbWVzIHN0YXJ0IHdpdGggYW4gdXBwZXJjYXNlIGxldHRlcgphbmQgTm9uLVRlcm1pbmFsIG5hbWVzIHN0YXJ0IHdpdGggYSBsb3dlciBjYXNlIGxldHRlci5gfSxidWlsZEFsdGVybmF0aW9uUHJlZml4QW1iaWd1aXR5RXJyb3IodCl7bGV0IGU9SmUodC5wcmVmaXhQYXRoLGk9Pkh1KGkpKS5qb2luKCIsICIpLHI9dC5hbHRlcm5hdGlvbi5pZHg9PT0wPyIiOnQuYWx0ZXJuYXRpb24uaWR4O3JldHVybmBBbWJpZ3VvdXMgYWx0ZXJuYXRpdmVzOiA8JHt0LmFtYmlndWl0eUluZGljZXMuam9pbigiICwiKX0+IGR1ZSB0byBjb21tb24gbG9va2FoZWFkIHByZWZpeAppbiA8T1Ike3J9PiBpbnNpZGUgPCR7dC50b3BMZXZlbFJ1bGUubmFtZX0+IFJ1bGUsCjwke2V9PiBtYXkgYXBwZWFycyBhcyBhIHByZWZpeCBwYXRoIGluIGFsbCB0aGVzZSBhbHRlcm5hdGl2ZXMuClNlZTogaHR0cHM6Ly9jaGV2cm90YWluLmlvL2RvY3MvZ3VpZGUvcmVzb2x2aW5nX2dyYW1tYXJfZXJyb3JzLmh0bWwjQ09NTU9OX1BSRUZJWApGb3IgRnVydGhlciBkZXRhaWxzLmB9LGJ1aWxkQWx0ZXJuYXRpb25BbWJpZ3VpdHlFcnJvcih0KXtsZXQgZT1KZSh0LnByZWZpeFBhdGgsaT0+SHUoaSkpLmpvaW4oIiwgIikscj10LmFsdGVybmF0aW9uLmlkeD09PTA/IiI6dC5hbHRlcm5hdGlvbi5pZHgsbj1gQW1iaWd1b3VzIEFsdGVybmF0aXZlcyBEZXRlY3RlZDogPCR7dC5hbWJpZ3VpdHlJbmRpY2VzLmpvaW4oIiAsIil9PiBpbiA8T1Ike3J9PiBpbnNpZGUgPCR7dC50b3BMZXZlbFJ1bGUubmFtZX0+IFJ1bGUsCjwke2V9PiBtYXkgYXBwZWFycyBhcyBhIHByZWZpeCBwYXRoIGluIGFsbCB0aGVzZSBhbHRlcm5hdGl2ZXMuCmA7cmV0dXJuIG49bitgU2VlOiBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9ndWlkZS9yZXNvbHZpbmdfZ3JhbW1hcl9lcnJvcnMuaHRtbCNBTUJJR1VPVVNfQUxURVJOQVRJVkVTCkZvciBGdXJ0aGVyIGRldGFpbHMuYCxufSxidWlsZEVtcHR5UmVwZXRpdGlvbkVycm9yKHQpe2xldCBlPVZzKHQucmVwZXRpdGlvbik7cmV0dXJuIHQucmVwZXRpdGlvbi5pZHghPT0wJiYoZSs9dC5yZXBldGl0aW9uLmlkeCksYFRoZSByZXBldGl0aW9uIDwke2V9PiB3aXRoaW4gUnVsZSA8JHt0LnRvcExldmVsUnVsZS5uYW1lfT4gY2FuIG5ldmVyIGNvbnN1bWUgYW55IHRva2Vucy4KVGhpcyBjb3VsZCBsZWFkIHRvIGFuIGluZmluaXRlIGxvb3AuYH0sYnVpbGRUb2tlbk5hbWVFcnJvcih0KXtyZXR1cm4iZGVwcmVjYXRlZCJ9LGJ1aWxkRW1wdHlBbHRlcm5hdGlvbkVycm9yKHQpe3JldHVybmBBbWJpZ3VvdXMgZW1wdHkgYWx0ZXJuYXRpdmU6IDwke3QuZW1wdHlDaG9pY2VJZHgrMX0+IGluIDxPUiR7dC5hbHRlcm5hdGlvbi5pZHh9PiBpbnNpZGUgPCR7dC50b3BMZXZlbFJ1bGUubmFtZX0+IFJ1bGUuCk9ubHkgdGhlIGxhc3QgYWx0ZXJuYXRpdmUgbWF5IGJlIGFuIGVtcHR5IGFsdGVybmF0aXZlLmB9LGJ1aWxkVG9vTWFueUFsdGVybmF0aXZlc0Vycm9yKHQpe3JldHVybmBBbiBBbHRlcm5hdGlvbiBjYW5ub3QgaGF2ZSBtb3JlIHRoYW4gMjU2IGFsdGVybmF0aXZlczoKPE9SJHt0LmFsdGVybmF0aW9uLmlkeH0+IGluc2lkZSA8JHt0LnRvcExldmVsUnVsZS5uYW1lfT4gUnVsZS4KIGhhcyAke3QuYWx0ZXJuYXRpb24uZGVmaW5pdGlvbi5sZW5ndGgrMX0gYWx0ZXJuYXRpdmVzLmB9LGJ1aWxkTGVmdFJlY3Vyc2lvbkVycm9yKHQpe2xldCBlPXQudG9wTGV2ZWxSdWxlLm5hbWUscj1KZSh0LmxlZnRSZWN1cnNpb25QYXRoLGE9PmEubmFtZSksbj1gJHtlfSAtLT4gJHtyLmNvbmNhdChbZV0pLmpvaW4oIiAtLT4gIil9YDtyZXR1cm5gTGVmdCBSZWN1cnNpb24gZm91bmQgaW4gZ3JhbW1hci4KcnVsZTogPCR7ZX0+IGNhbiBiZSBpbnZva2VkIGZyb20gaXRzZWxmIChkaXJlY3RseSBvciBpbmRpcmVjdGx5KQp3aXRob3V0IGNvbnN1bWluZyBhbnkgVG9rZW5zLiBUaGUgZ3JhbW1hciBwYXRoIHRoYXQgY2F1c2VzIHRoaXMgaXM6IAogJHtufQogVG8gZml4IHRoaXMgcmVmYWN0b3IgeW91ciBncmFtbWFyIHRvIHJlbW92ZSB0aGUgbGVmdCByZWN1cnNpb24uCnNlZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTExfcGFyc2VyI0xlZnRfZmFjdG9yaW5nLmB9LGJ1aWxkSW52YWxpZFJ1bGVOYW1lRXJyb3IodCl7cmV0dXJuImRlcHJlY2F0ZWQifSxidWlsZER1cGxpY2F0ZVJ1bGVOYW1lRXJyb3IodCl7bGV0IGU7cmV0dXJuIHQudG9wTGV2ZWxSdWxlIGluc3RhbmNlb2YgdXM/ZT10LnRvcExldmVsUnVsZS5uYW1lOmU9dC50b3BMZXZlbFJ1bGUsYER1cGxpY2F0ZSBkZWZpbml0aW9uLCBydWxlOiAtPiR7ZX08LSBpcyBhbHJlYWR5IGRlZmluZWQgaW4gdGhlIGdyYW1tYXI6IC0+JHt0LmdyYW1tYXJOYW1lfTwtYH19fSk7ZnVuY3Rpb24gX29lKHQsZSl7bGV0IHI9bmV3IHBNKHQsZSk7cmV0dXJuIHIucmVzb2x2ZVJlZnMoKSxyLmVycm9yc312YXIgcE0sRG9lPU4oKCk9PnsidXNlIHN0cmljdCI7VXMoKTtxdCgpO2ZzKCk7byhfb2UsInJlc29sdmVHcmFtbWFyIik7cE09Y2xhc3MgZXh0ZW5kcyBoc3tzdGF0aWN7byh0aGlzLCJHYXN0UmVmUmVzb2x2ZXJWaXNpdG9yIil9Y29uc3RydWN0b3IoZSxyKXtzdXBlcigpLHRoaXMubmFtZVRvVG9wUnVsZT1lLHRoaXMuZXJyTXNnUHJvdmlkZXI9cix0aGlzLmVycm9ycz1bXX1yZXNvbHZlUmVmcygpe0FlKGJyKHRoaXMubmFtZVRvVG9wUnVsZSksZT0+e3RoaXMuY3VyclRvcExldmVsPWUsZS5hY2NlcHQodGhpcyl9KX12aXNpdE5vblRlcm1pbmFsKGUpe2xldCByPXRoaXMubmFtZVRvVG9wUnVsZVtlLm5vblRlcm1pbmFsTmFtZV07aWYocillLnJlZmVyZW5jZWRSdWxlPXI7ZWxzZXtsZXQgbj10aGlzLmVyck1zZ1Byb3ZpZGVyLmJ1aWxkUnVsZU5vdEZvdW5kRXJyb3IodGhpcy5jdXJyVG9wTGV2ZWwsZSk7dGhpcy5lcnJvcnMucHVzaCh7bWVzc2FnZTpuLHR5cGU6VmkuVU5SRVNPTFZFRF9TVUJSVUxFX1JFRixydWxlTmFtZTp0aGlzLmN1cnJUb3BMZXZlbC5uYW1lLHVucmVzb2x2ZWRSZWZOYW1lOmUubm9uVGVybWluYWxOYW1lfSl9fX19KTtmdW5jdGlvbiBKayh0LGUscj1bXSl7cj1hbihyKTtsZXQgbj1bXSxpPTA7ZnVuY3Rpb24gYShsKXtyZXR1cm4gbC5jb25jYXQoYmkodCxpKzEpKX1vKGEsInJlbWFpbmluZ1BhdGhXaXRoIik7ZnVuY3Rpb24gcyhsKXtsZXQgdT1KayhhKGwpLGUscik7cmV0dXJuIG4uY29uY2F0KHUpfWZvcihvKHMsImdldEFsdGVybmF0aXZlc0ZvclByb2QiKTtyLmxlbmd0aDxlJiZpPHQubGVuZ3RoOyl7bGV0IGw9dFtpXTtpZihsIGluc3RhbmNlb2YgRG4pcmV0dXJuIHMobC5kZWZpbml0aW9uKTtpZihsIGluc3RhbmNlb2Ygb24pcmV0dXJuIHMobC5kZWZpbml0aW9uKTtpZihsIGluc3RhbmNlb2YgbG4pbj1zKGwuZGVmaW5pdGlvbik7ZWxzZSBpZihsIGluc3RhbmNlb2YgTG4pe2xldCB1PWwuZGVmaW5pdGlvbi5jb25jYXQoW25ldyBQcih7ZGVmaW5pdGlvbjpsLmRlZmluaXRpb259KV0pO3JldHVybiBzKHUpfWVsc2UgaWYobCBpbnN0YW5jZW9mIFJuKXtsZXQgdT1bbmV3IERuKHtkZWZpbml0aW9uOmwuZGVmaW5pdGlvbn0pLG5ldyBQcih7ZGVmaW5pdGlvbjpbbmV3IEVyKHt0ZXJtaW5hbFR5cGU6bC5zZXBhcmF0b3J9KV0uY29uY2F0KGwuZGVmaW5pdGlvbil9KV07cmV0dXJuIHModSl9ZWxzZSBpZihsIGluc3RhbmNlb2YgVG4pe2xldCB1PWwuZGVmaW5pdGlvbi5jb25jYXQoW25ldyBQcih7ZGVmaW5pdGlvbjpbbmV3IEVyKHt0ZXJtaW5hbFR5cGU6bC5zZXBhcmF0b3J9KV0uY29uY2F0KGwuZGVmaW5pdGlvbil9KV0pO249cyh1KX1lbHNlIGlmKGwgaW5zdGFuY2VvZiBQcil7bGV0IHU9bC5kZWZpbml0aW9uLmNvbmNhdChbbmV3IFByKHtkZWZpbml0aW9uOmwuZGVmaW5pdGlvbn0pXSk7bj1zKHUpfWVsc2V7aWYobCBpbnN0YW5jZW9mIHduKXJldHVybiBBZShsLmRlZmluaXRpb24sdT0+e2hyKHUuZGVmaW5pdGlvbik9PT0hMSYmKG49cyh1LmRlZmluaXRpb24pKX0pLG47aWYobCBpbnN0YW5jZW9mIEVyKXIucHVzaChsLnRlcm1pbmFsVHlwZSk7ZWxzZSB0aHJvdyBFcnJvcigibm9uIGV4aGF1c3RpdmUgbWF0Y2giKX1pKyt9cmV0dXJuIG4ucHVzaCh7cGFydGlhbFBhdGg6cixzdWZmaXhEZWY6YmkodCxpKX0pLG59ZnVuY3Rpb24gZUUodCxlLHIsbil7bGV0IGk9IkVYSVRfTk9ORV9URVJNSU5BTCIsYT1baV0scz0iRVhJVF9BTFRFUk5BVElWRSIsbD0hMSx1PWUubGVuZ3RoLGg9dS1uLTEsZj1bXSxkPVtdO2ZvcihkLnB1c2goe2lkeDotMSxkZWY6dCxydWxlU3RhY2s6W10sb2NjdXJyZW5jZVN0YWNrOltdfSk7IWhyKGQpOyl7bGV0IHA9ZC5wb3AoKTtpZihwPT09cyl7bCYmbWEoZCkuaWR4PD1oJiZkLnBvcCgpO2NvbnRpbnVlfWxldCBtPXAuZGVmLGc9cC5pZHgseT1wLnJ1bGVTdGFjayx2PXAub2NjdXJyZW5jZVN0YWNrO2lmKGhyKG0pKWNvbnRpbnVlO2xldCB4PW1bMF07aWYoeD09PWkpe2xldCBiPXtpZHg6ZyxkZWY6YmkobSkscnVsZVN0YWNrOkZ1KHkpLG9jY3VycmVuY2VTdGFjazpGdSh2KX07ZC5wdXNoKGIpfWVsc2UgaWYoeCBpbnN0YW5jZW9mIEVyKWlmKGc8dS0xKXtsZXQgYj1nKzEsVD1lW2JdO2lmKHIoVCx4LnRlcm1pbmFsVHlwZSkpe2xldCBTPXtpZHg6YixkZWY6YmkobSkscnVsZVN0YWNrOnksb2NjdXJyZW5jZVN0YWNrOnZ9O2QucHVzaChTKX19ZWxzZSBpZihnPT09dS0xKWYucHVzaCh7bmV4dFRva2VuVHlwZTp4LnRlcm1pbmFsVHlwZSxuZXh0VG9rZW5PY2N1cnJlbmNlOnguaWR4LHJ1bGVTdGFjazp5LG9jY3VycmVuY2VTdGFjazp2fSksbD0hMDtlbHNlIHRocm93IEVycm9yKCJub24gZXhoYXVzdGl2ZSBtYXRjaCIpO2Vsc2UgaWYoeCBpbnN0YW5jZW9mIG9uKXtsZXQgYj1hbih5KTtiLnB1c2goeC5ub25UZXJtaW5hbE5hbWUpO2xldCBUPWFuKHYpO1QucHVzaCh4LmlkeCk7bGV0IFM9e2lkeDpnLGRlZjp4LmRlZmluaXRpb24uY29uY2F0KGEsYmkobSkpLHJ1bGVTdGFjazpiLG9jY3VycmVuY2VTdGFjazpUfTtkLnB1c2goUyl9ZWxzZSBpZih4IGluc3RhbmNlb2YgbG4pe2xldCBiPXtpZHg6ZyxkZWY6YmkobSkscnVsZVN0YWNrOnksb2NjdXJyZW5jZVN0YWNrOnZ9O2QucHVzaChiKSxkLnB1c2gocyk7bGV0IFQ9e2lkeDpnLGRlZjp4LmRlZmluaXRpb24uY29uY2F0KGJpKG0pKSxydWxlU3RhY2s6eSxvY2N1cnJlbmNlU3RhY2s6dn07ZC5wdXNoKFQpfWVsc2UgaWYoeCBpbnN0YW5jZW9mIExuKXtsZXQgYj1uZXcgUHIoe2RlZmluaXRpb246eC5kZWZpbml0aW9uLGlkeDp4LmlkeH0pLFQ9eC5kZWZpbml0aW9uLmNvbmNhdChbYl0sYmkobSkpLFM9e2lkeDpnLGRlZjpULHJ1bGVTdGFjazp5LG9jY3VycmVuY2VTdGFjazp2fTtkLnB1c2goUyl9ZWxzZSBpZih4IGluc3RhbmNlb2YgUm4pe2xldCBiPW5ldyBFcih7dGVybWluYWxUeXBlOnguc2VwYXJhdG9yfSksVD1uZXcgUHIoe2RlZmluaXRpb246W2JdLmNvbmNhdCh4LmRlZmluaXRpb24pLGlkeDp4LmlkeH0pLFM9eC5kZWZpbml0aW9uLmNvbmNhdChbVF0sYmkobSkpLHc9e2lkeDpnLGRlZjpTLHJ1bGVTdGFjazp5LG9jY3VycmVuY2VTdGFjazp2fTtkLnB1c2godyl9ZWxzZSBpZih4IGluc3RhbmNlb2YgVG4pe2xldCBiPXtpZHg6ZyxkZWY6YmkobSkscnVsZVN0YWNrOnksb2NjdXJyZW5jZVN0YWNrOnZ9O2QucHVzaChiKSxkLnB1c2gocyk7bGV0IFQ9bmV3IEVyKHt0ZXJtaW5hbFR5cGU6eC5zZXBhcmF0b3J9KSxTPW5ldyBQcih7ZGVmaW5pdGlvbjpbVF0uY29uY2F0KHguZGVmaW5pdGlvbiksaWR4OnguaWR4fSksdz14LmRlZmluaXRpb24uY29uY2F0KFtTXSxiaShtKSksRT17aWR4OmcsZGVmOncscnVsZVN0YWNrOnksb2NjdXJyZW5jZVN0YWNrOnZ9O2QucHVzaChFKX1lbHNlIGlmKHggaW5zdGFuY2VvZiBQcil7bGV0IGI9e2lkeDpnLGRlZjpiaShtKSxydWxlU3RhY2s6eSxvY2N1cnJlbmNlU3RhY2s6dn07ZC5wdXNoKGIpLGQucHVzaChzKTtsZXQgVD1uZXcgUHIoe2RlZmluaXRpb246eC5kZWZpbml0aW9uLGlkeDp4LmlkeH0pLFM9eC5kZWZpbml0aW9uLmNvbmNhdChbVF0sYmkobSkpLHc9e2lkeDpnLGRlZjpTLHJ1bGVTdGFjazp5LG9jY3VycmVuY2VTdGFjazp2fTtkLnB1c2godyl9ZWxzZSBpZih4IGluc3RhbmNlb2Ygd24pZm9yKGxldCBiPXguZGVmaW5pdGlvbi5sZW5ndGgtMTtiPj0wO2ItLSl7bGV0IFQ9eC5kZWZpbml0aW9uW2JdLFM9e2lkeDpnLGRlZjpULmRlZmluaXRpb24uY29uY2F0KGJpKG0pKSxydWxlU3RhY2s6eSxvY2N1cnJlbmNlU3RhY2s6dn07ZC5wdXNoKFMpLGQucHVzaChzKX1lbHNlIGlmKHggaW5zdGFuY2VvZiBEbilkLnB1c2goe2lkeDpnLGRlZjp4LmRlZmluaXRpb24uY29uY2F0KGJpKG0pKSxydWxlU3RhY2s6eSxvY2N1cnJlbmNlU3RhY2s6dn0pO2Vsc2UgaWYoeCBpbnN0YW5jZW9mIHVzKWQucHVzaChrRmUoeCxnLHksdikpO2Vsc2UgdGhyb3cgRXJyb3IoIm5vbiBleGhhdXN0aXZlIG1hdGNoIil9cmV0dXJuIGZ9ZnVuY3Rpb24ga0ZlKHQsZSxyLG4pe2xldCBpPWFuKHIpO2kucHVzaCh0Lm5hbWUpO2xldCBhPWFuKG4pO3JldHVybiBhLnB1c2goMSkse2lkeDplLGRlZjp0LmRlZmluaXRpb24scnVsZVN0YWNrOmksb2NjdXJyZW5jZVN0YWNrOmF9fXZhciBtTSxLayxaZyxRayx5eCxaayx2eCx4eD1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7ck0oKTtWaygpO2ZzKCk7bU09Y2xhc3MgZXh0ZW5kcyBHdXtzdGF0aWN7byh0aGlzLCJBYnN0cmFjdE5leHRQb3NzaWJsZVRva2Vuc1dhbGtlciIpfWNvbnN0cnVjdG9yKGUscil7c3VwZXIoKSx0aGlzLnRvcFByb2Q9ZSx0aGlzLnBhdGg9cix0aGlzLnBvc3NpYmxlVG9rVHlwZXM9W10sdGhpcy5uZXh0UHJvZHVjdGlvbk5hbWU9IiIsdGhpcy5uZXh0UHJvZHVjdGlvbk9jY3VycmVuY2U9MCx0aGlzLmZvdW5kPSExLHRoaXMuaXNBdEVuZE9mUGF0aD0hMX1zdGFydFdhbGtpbmcoKXtpZih0aGlzLmZvdW5kPSExLHRoaXMucGF0aC5ydWxlU3RhY2tbMF0hPT10aGlzLnRvcFByb2QubmFtZSl0aHJvdyBFcnJvcigiVGhlIHBhdGggZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgd2Fsa2VyJ3MgdG9wIFJ1bGUhIik7cmV0dXJuIHRoaXMucnVsZVN0YWNrPWFuKHRoaXMucGF0aC5ydWxlU3RhY2spLnJldmVyc2UoKSx0aGlzLm9jY3VycmVuY2VTdGFjaz1hbih0aGlzLnBhdGgub2NjdXJyZW5jZVN0YWNrKS5yZXZlcnNlKCksdGhpcy5ydWxlU3RhY2sucG9wKCksdGhpcy5vY2N1cnJlbmNlU3RhY2sucG9wKCksdGhpcy51cGRhdGVFeHBlY3RlZE5leHQoKSx0aGlzLndhbGsodGhpcy50b3BQcm9kKSx0aGlzLnBvc3NpYmxlVG9rVHlwZXN9d2FsayhlLHI9W10pe3RoaXMuZm91bmR8fHN1cGVyLndhbGsoZSxyKX13YWxrUHJvZFJlZihlLHIsbil7aWYoZS5yZWZlcmVuY2VkUnVsZS5uYW1lPT09dGhpcy5uZXh0UHJvZHVjdGlvbk5hbWUmJmUuaWR4PT09dGhpcy5uZXh0UHJvZHVjdGlvbk9jY3VycmVuY2Upe2xldCBpPXIuY29uY2F0KG4pO3RoaXMudXBkYXRlRXhwZWN0ZWROZXh0KCksdGhpcy53YWxrKGUucmVmZXJlbmNlZFJ1bGUsaSl9fXVwZGF0ZUV4cGVjdGVkTmV4dCgpe2hyKHRoaXMucnVsZVN0YWNrKT8odGhpcy5uZXh0UHJvZHVjdGlvbk5hbWU9IiIsdGhpcy5uZXh0UHJvZHVjdGlvbk9jY3VycmVuY2U9MCx0aGlzLmlzQXRFbmRPZlBhdGg9ITApOih0aGlzLm5leHRQcm9kdWN0aW9uTmFtZT10aGlzLnJ1bGVTdGFjay5wb3AoKSx0aGlzLm5leHRQcm9kdWN0aW9uT2NjdXJyZW5jZT10aGlzLm9jY3VycmVuY2VTdGFjay5wb3AoKSl9fSxLaz1jbGFzcyBleHRlbmRzIG1Ne3N0YXRpY3tvKHRoaXMsIk5leHRBZnRlclRva2VuV2Fsa2VyIil9Y29uc3RydWN0b3IoZSxyKXtzdXBlcihlLHIpLHRoaXMucGF0aD1yLHRoaXMubmV4dFRlcm1pbmFsTmFtZT0iIix0aGlzLm5leHRUZXJtaW5hbE9jY3VycmVuY2U9MCx0aGlzLm5leHRUZXJtaW5hbE5hbWU9dGhpcy5wYXRoLmxhc3RUb2submFtZSx0aGlzLm5leHRUZXJtaW5hbE9jY3VycmVuY2U9dGhpcy5wYXRoLmxhc3RUb2tPY2N1cnJlbmNlfXdhbGtUZXJtaW5hbChlLHIsbil7aWYodGhpcy5pc0F0RW5kT2ZQYXRoJiZlLnRlcm1pbmFsVHlwZS5uYW1lPT09dGhpcy5uZXh0VGVybWluYWxOYW1lJiZlLmlkeD09PXRoaXMubmV4dFRlcm1pbmFsT2NjdXJyZW5jZSYmIXRoaXMuZm91bmQpe2xldCBpPXIuY29uY2F0KG4pLGE9bmV3IERuKHtkZWZpbml0aW9uOml9KTt0aGlzLnBvc3NpYmxlVG9rVHlwZXM9eXAoYSksdGhpcy5mb3VuZD0hMH19fSxaZz1jbGFzcyBleHRlbmRzIEd1e3N0YXRpY3tvKHRoaXMsIkFic3RyYWN0TmV4dFRlcm1pbmFsQWZ0ZXJQcm9kdWN0aW9uV2Fsa2VyIil9Y29uc3RydWN0b3IoZSxyKXtzdXBlcigpLHRoaXMudG9wUnVsZT1lLHRoaXMub2NjdXJyZW5jZT1yLHRoaXMucmVzdWx0PXt0b2tlbjp2b2lkIDAsb2NjdXJyZW5jZTp2b2lkIDAsaXNFbmRPZlJ1bGU6dm9pZCAwfX1zdGFydFdhbGtpbmcoKXtyZXR1cm4gdGhpcy53YWxrKHRoaXMudG9wUnVsZSksdGhpcy5yZXN1bHR9fSxRaz1jbGFzcyBleHRlbmRzIFpne3N0YXRpY3tvKHRoaXMsIk5leHRUZXJtaW5hbEFmdGVyTWFueVdhbGtlciIpfXdhbGtNYW55KGUscixuKXtpZihlLmlkeD09PXRoaXMub2NjdXJyZW5jZSl7bGV0IGk9aWEoci5jb25jYXQobikpO3RoaXMucmVzdWx0LmlzRW5kT2ZSdWxlPWk9PT12b2lkIDAsaSBpbnN0YW5jZW9mIEVyJiYodGhpcy5yZXN1bHQudG9rZW49aS50ZXJtaW5hbFR5cGUsdGhpcy5yZXN1bHQub2NjdXJyZW5jZT1pLmlkeCl9ZWxzZSBzdXBlci53YWxrTWFueShlLHIsbil9fSx5eD1jbGFzcyBleHRlbmRzIFpne3N0YXRpY3tvKHRoaXMsIk5leHRUZXJtaW5hbEFmdGVyTWFueVNlcFdhbGtlciIpfXdhbGtNYW55U2VwKGUscixuKXtpZihlLmlkeD09PXRoaXMub2NjdXJyZW5jZSl7bGV0IGk9aWEoci5jb25jYXQobikpO3RoaXMucmVzdWx0LmlzRW5kT2ZSdWxlPWk9PT12b2lkIDAsaSBpbnN0YW5jZW9mIEVyJiYodGhpcy5yZXN1bHQudG9rZW49aS50ZXJtaW5hbFR5cGUsdGhpcy5yZXN1bHQub2NjdXJyZW5jZT1pLmlkeCl9ZWxzZSBzdXBlci53YWxrTWFueVNlcChlLHIsbil9fSxaaz1jbGFzcyBleHRlbmRzIFpne3N0YXRpY3tvKHRoaXMsIk5leHRUZXJtaW5hbEFmdGVyQXRMZWFzdE9uZVdhbGtlciIpfXdhbGtBdExlYXN0T25lKGUscixuKXtpZihlLmlkeD09PXRoaXMub2NjdXJyZW5jZSl7bGV0IGk9aWEoci5jb25jYXQobikpO3RoaXMucmVzdWx0LmlzRW5kT2ZSdWxlPWk9PT12b2lkIDAsaSBpbnN0YW5jZW9mIEVyJiYodGhpcy5yZXN1bHQudG9rZW49aS50ZXJtaW5hbFR5cGUsdGhpcy5yZXN1bHQub2NjdXJyZW5jZT1pLmlkeCl9ZWxzZSBzdXBlci53YWxrQXRMZWFzdE9uZShlLHIsbil9fSx2eD1jbGFzcyBleHRlbmRzIFpne3N0YXRpY3tvKHRoaXMsIk5leHRUZXJtaW5hbEFmdGVyQXRMZWFzdE9uZVNlcFdhbGtlciIpfXdhbGtBdExlYXN0T25lU2VwKGUscixuKXtpZihlLmlkeD09PXRoaXMub2NjdXJyZW5jZSl7bGV0IGk9aWEoci5jb25jYXQobikpO3RoaXMucmVzdWx0LmlzRW5kT2ZSdWxlPWk9PT12b2lkIDAsaSBpbnN0YW5jZW9mIEVyJiYodGhpcy5yZXN1bHQudG9rZW49aS50ZXJtaW5hbFR5cGUsdGhpcy5yZXN1bHQub2NjdXJyZW5jZT1pLmlkeCl9ZWxzZSBzdXBlci53YWxrQXRMZWFzdE9uZVNlcChlLHIsbil9fTtvKEprLCJwb3NzaWJsZVBhdGhzRnJvbSIpO28oZUUsIm5leHRQb3NzaWJsZVRva2Vuc0FmdGVyIik7byhrRmUsImV4cGFuZFRvcExldmVsUnVsZSIpfSk7ZnVuY3Rpb24gYngodCl7aWYodCBpbnN0YW5jZW9mIGxufHx0PT09Ik9wdGlvbiIpcmV0dXJuIFFuLk9QVElPTjtpZih0IGluc3RhbmNlb2YgUHJ8fHQ9PT0iUmVwZXRpdGlvbiIpcmV0dXJuIFFuLlJFUEVUSVRJT047aWYodCBpbnN0YW5jZW9mIExufHx0PT09IlJlcGV0aXRpb25NYW5kYXRvcnkiKXJldHVybiBRbi5SRVBFVElUSU9OX01BTkRBVE9SWTtpZih0IGluc3RhbmNlb2YgUm58fHQ9PT0iUmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3IiKXJldHVybiBRbi5SRVBFVElUSU9OX01BTkRBVE9SWV9XSVRIX1NFUEFSQVRPUjtpZih0IGluc3RhbmNlb2YgVG58fHQ9PT0iUmVwZXRpdGlvbldpdGhTZXBhcmF0b3IiKXJldHVybiBRbi5SRVBFVElUSU9OX1dJVEhfU0VQQVJBVE9SO2lmKHQgaW5zdGFuY2VvZiB3bnx8dD09PSJBbHRlcm5hdGlvbiIpcmV0dXJuIFFuLkFMVEVSTkFUSU9OO3Rocm93IEVycm9yKCJub24gZXhoYXVzdGl2ZSBtYXRjaCIpfWZ1bmN0aW9uIHJFKHQpe2xldHtvY2N1cnJlbmNlOmUscnVsZTpyLHByb2RUeXBlOm4sbWF4TG9va2FoZWFkOml9PXQsYT1ieChuKTtyZXR1cm4gYT09PVFuLkFMVEVSTkFUSU9OP0pnKGUscixpKTplMShlLHIsYSxpKX1mdW5jdGlvbiBSb2UodCxlLHIsbixpLGEpe2xldCBzPUpnKHQsZSxyKSxsPUJvZShzKT9qZzpWdTtyZXR1cm4gYShzLG4sbCxpKX1mdW5jdGlvbiBOb2UodCxlLHIsbixpLGEpe2xldCBzPWUxKHQsZSxpLHIpLGw9Qm9lKHMpP2pnOlZ1O3JldHVybiBhKHNbMF0sbCxuKX1mdW5jdGlvbiBNb2UodCxlLHIsbil7bGV0IGk9dC5sZW5ndGgsYT1QYSh0LHM9PlBhKHMsbD0+bC5sZW5ndGg9PT0xKSk7aWYoZSlyZXR1cm4gZnVuY3Rpb24ocyl7bGV0IGw9SmUocyx1PT51LkdBVEUpO2ZvcihsZXQgdT0wO3U8aTt1Kyspe2xldCBoPXRbdV0sZj1oLmxlbmd0aCxkPWxbdV07aWYoIShkIT09dm9pZCAwJiZkLmNhbGwodGhpcyk9PT0hMSkpZTpmb3IobGV0IHA9MDtwPGY7cCsrKXtsZXQgbT1oW3BdLGc9bS5sZW5ndGg7Zm9yKGxldCB5PTA7eTxnO3krKyl7bGV0IHY9dGhpcy5MQSh5KzEpO2lmKHIodixtW3ldKT09PSExKWNvbnRpbnVlIGV9cmV0dXJuIHV9fX07aWYoYSYmIW4pe2xldCBzPUplKHQsdT0+cXIodSkpLGw9WHIocywodSxoLGYpPT4oQWUoaCxkPT57QnQodSxkLnRva2VuVHlwZUlkeCl8fCh1W2QudG9rZW5UeXBlSWR4XT1mKSxBZShkLmNhdGVnb3J5TWF0Y2hlcyxwPT57QnQodSxwKXx8KHVbcF09Zil9KX0pLHUpLHt9KTtyZXR1cm4gZnVuY3Rpb24oKXtsZXQgdT10aGlzLkxBKDEpO3JldHVybiBsW3UudG9rZW5UeXBlSWR4XX19ZWxzZSByZXR1cm4gZnVuY3Rpb24oKXtmb3IobGV0IHM9MDtzPGk7cysrKXtsZXQgbD10W3NdLHU9bC5sZW5ndGg7ZTpmb3IobGV0IGg9MDtoPHU7aCsrKXtsZXQgZj1sW2hdLGQ9Zi5sZW5ndGg7Zm9yKGxldCBwPTA7cDxkO3ArKyl7bGV0IG09dGhpcy5MQShwKzEpO2lmKHIobSxmW3BdKT09PSExKWNvbnRpbnVlIGV9cmV0dXJuIHN9fX19ZnVuY3Rpb24gSW9lKHQsZSxyKXtsZXQgbj1QYSh0LGE9PmEubGVuZ3RoPT09MSksaT10Lmxlbmd0aDtpZihuJiYhcil7bGV0IGE9cXIodCk7aWYoYS5sZW5ndGg9PT0xJiZocihhWzBdLmNhdGVnb3J5TWF0Y2hlcykpe2xldCBsPWFbMF0udG9rZW5UeXBlSWR4O3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLkxBKDEpLnRva2VuVHlwZUlkeD09PWx9fWVsc2V7bGV0IHM9WHIoYSwobCx1LGgpPT4obFt1LnRva2VuVHlwZUlkeF09ITAsQWUodS5jYXRlZ29yeU1hdGNoZXMsZj0+e2xbZl09ITB9KSxsKSxbXSk7cmV0dXJuIGZ1bmN0aW9uKCl7bGV0IGw9dGhpcy5MQSgxKTtyZXR1cm4gc1tsLnRva2VuVHlwZUlkeF09PT0hMH19fWVsc2UgcmV0dXJuIGZ1bmN0aW9uKCl7ZTpmb3IobGV0IGE9MDthPGk7YSsrKXtsZXQgcz10W2FdLGw9cy5sZW5ndGg7Zm9yKGxldCB1PTA7dTxsO3UrKyl7bGV0IGg9dGhpcy5MQSh1KzEpO2lmKGUoaCxzW3VdKT09PSExKWNvbnRpbnVlIGV9cmV0dXJuITB9cmV0dXJuITF9fWZ1bmN0aW9uIExvZSh0KXtsZXQgZT1uZXcgQXJyYXkodCk7Zm9yKGxldCByPTA7cjx0O3IrKyllW3JdPVtdO3JldHVybiBlfWZ1bmN0aW9uIGdNKHQpe2xldCBlPVsiIl07Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspe2xldCBuPXRbcl0saT1bXTtmb3IobGV0IGE9MDthPGUubGVuZ3RoO2ErKyl7bGV0IHM9ZVthXTtpLnB1c2gocysiXyIrbi50b2tlblR5cGVJZHgpO2ZvcihsZXQgbD0wO2w8bi5jYXRlZ29yeU1hdGNoZXMubGVuZ3RoO2wrKyl7bGV0IHU9Il8iK24uY2F0ZWdvcnlNYXRjaGVzW2xdO2kucHVzaChzK3UpfX1lPWl9cmV0dXJuIGV9ZnVuY3Rpb24gRUZlKHQsZSxyKXtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKyl7aWYobj09PXIpY29udGludWU7bGV0IGk9dFtuXTtmb3IobGV0IGE9MDthPGUubGVuZ3RoO2ErKyl7bGV0IHM9ZVthXTtpZihpW3NdPT09ITApcmV0dXJuITF9fXJldHVybiEwfWZ1bmN0aW9uIE9vZSh0LGUpe2xldCByPUplKHQscz0+SmsoW3NdLDEpKSxuPUxvZShyLmxlbmd0aCksaT1KZShyLHM9PntsZXQgbD17fTtyZXR1cm4gQWUocyx1PT57bGV0IGg9Z00odS5wYXJ0aWFsUGF0aCk7QWUoaCxmPT57bFtmXT0hMH0pfSksbH0pLGE9cjtmb3IobGV0IHM9MTtzPD1lO3MrKyl7bGV0IGw9YTthPUxvZShsLmxlbmd0aCk7Zm9yKGxldCB1PTA7dTxsLmxlbmd0aDt1Kyspe2xldCBoPWxbdV07Zm9yKGxldCBmPTA7ZjxoLmxlbmd0aDtmKyspe2xldCBkPWhbZl0ucGFydGlhbFBhdGgscD1oW2ZdLnN1ZmZpeERlZixtPWdNKGQpO2lmKEVGZShpLG0sdSl8fGhyKHApfHxkLmxlbmd0aD09PWUpe2xldCB5PW5bdV07aWYobkUoeSxkKT09PSExKXt5LnB1c2goZCk7Zm9yKGxldCB2PTA7djxtLmxlbmd0aDt2Kyspe2xldCB4PW1bdl07aVt1XVt4XT0hMH19fWVsc2V7bGV0IHk9SmsocCxzKzEsZCk7YVt1XT1hW3VdLmNvbmNhdCh5KSxBZSh5LHY9PntsZXQgeD1nTSh2LnBhcnRpYWxQYXRoKTtBZSh4LGI9PntpW3VdW2JdPSEwfSl9KX19fX1yZXR1cm4gbn1mdW5jdGlvbiBKZyh0LGUscixuKXtsZXQgaT1uZXcgdEUodCxRbi5BTFRFUk5BVElPTixuKTtyZXR1cm4gZS5hY2NlcHQoaSksT29lKGkucmVzdWx0LHIpfWZ1bmN0aW9uIGUxKHQsZSxyLG4pe2xldCBpPW5ldyB0RSh0LHIpO2UuYWNjZXB0KGkpO2xldCBhPWkucmVzdWx0LGw9bmV3IHlNKGUsdCxyKS5zdGFydFdhbGtpbmcoKSx1PW5ldyBEbih7ZGVmaW5pdGlvbjphfSksaD1uZXcgRG4oe2RlZmluaXRpb246bH0pO3JldHVybiBPb2UoW3UsaF0sbil9ZnVuY3Rpb24gbkUodCxlKXtlOmZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXtsZXQgbj10W3JdO2lmKG4ubGVuZ3RoPT09ZS5sZW5ndGgpe2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKXtsZXQgYT1lW2ldLHM9bltpXTtpZigoYT09PXN8fHMuY2F0ZWdvcnlNYXRjaGVzTWFwW2EudG9rZW5UeXBlSWR4XSE9PXZvaWQgMCk9PT0hMSljb250aW51ZSBlfXJldHVybiEwfX1yZXR1cm4hMX1mdW5jdGlvbiBQb2UodCxlKXtyZXR1cm4gdC5sZW5ndGg8ZS5sZW5ndGgmJlBhKHQsKHIsbik9PntsZXQgaT1lW25dO3JldHVybiByPT09aXx8aS5jYXRlZ29yeU1hdGNoZXNNYXBbci50b2tlblR5cGVJZHhdfSl9ZnVuY3Rpb24gQm9lKHQpe3JldHVybiBQYSh0LGU9PlBhKGUscj0+UGEocixuPT5ocihuLmNhdGVnb3J5TWF0Y2hlcykpKSl9dmFyIFFuLHlNLHRFLHQxPU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTt4eCgpO1ZrKCk7eHAoKTtmcygpOyhmdW5jdGlvbih0KXt0W3QuT1BUSU9OPTBdPSJPUFRJT04iLHRbdC5SRVBFVElUSU9OPTFdPSJSRVBFVElUSU9OIix0W3QuUkVQRVRJVElPTl9NQU5EQVRPUlk9Ml09IlJFUEVUSVRJT05fTUFOREFUT1JZIix0W3QuUkVQRVRJVElPTl9NQU5EQVRPUllfV0lUSF9TRVBBUkFUT1I9M109IlJFUEVUSVRJT05fTUFOREFUT1JZX1dJVEhfU0VQQVJBVE9SIix0W3QuUkVQRVRJVElPTl9XSVRIX1NFUEFSQVRPUj00XT0iUkVQRVRJVElPTl9XSVRIX1NFUEFSQVRPUiIsdFt0LkFMVEVSTkFUSU9OPTVdPSJBTFRFUk5BVElPTiJ9KShRbnx8KFFuPXt9KSk7byhieCwiZ2V0UHJvZFR5cGUiKTtvKHJFLCJnZXRMb29rYWhlYWRQYXRocyIpO28oUm9lLCJidWlsZExvb2thaGVhZEZ1bmNGb3JPciIpO28oTm9lLCJidWlsZExvb2thaGVhZEZ1bmNGb3JPcHRpb25hbFByb2QiKTtvKE1vZSwiYnVpbGRBbHRlcm5hdGl2ZXNMb29rQWhlYWRGdW5jIik7byhJb2UsImJ1aWxkU2luZ2xlQWx0ZXJuYXRpdmVMb29rYWhlYWRGdW5jdGlvbiIpO3lNPWNsYXNzIGV4dGVuZHMgR3V7c3RhdGlje28odGhpcywiUmVzdERlZmluaXRpb25GaW5kZXJXYWxrZXIiKX1jb25zdHJ1Y3RvcihlLHIsbil7c3VwZXIoKSx0aGlzLnRvcFByb2Q9ZSx0aGlzLnRhcmdldE9jY3VycmVuY2U9cix0aGlzLnRhcmdldFByb2RUeXBlPW59c3RhcnRXYWxraW5nKCl7cmV0dXJuIHRoaXMud2Fsayh0aGlzLnRvcFByb2QpLHRoaXMucmVzdERlZn1jaGVja0lzVGFyZ2V0KGUscixuLGkpe3JldHVybiBlLmlkeD09PXRoaXMudGFyZ2V0T2NjdXJyZW5jZSYmdGhpcy50YXJnZXRQcm9kVHlwZT09PXI/KHRoaXMucmVzdERlZj1uLmNvbmNhdChpKSwhMCk6ITF9d2Fsa09wdGlvbihlLHIsbil7dGhpcy5jaGVja0lzVGFyZ2V0KGUsUW4uT1BUSU9OLHIsbil8fHN1cGVyLndhbGtPcHRpb24oZSxyLG4pfXdhbGtBdExlYXN0T25lKGUscixuKXt0aGlzLmNoZWNrSXNUYXJnZXQoZSxRbi5SRVBFVElUSU9OX01BTkRBVE9SWSxyLG4pfHxzdXBlci53YWxrT3B0aW9uKGUscixuKX13YWxrQXRMZWFzdE9uZVNlcChlLHIsbil7dGhpcy5jaGVja0lzVGFyZ2V0KGUsUW4uUkVQRVRJVElPTl9NQU5EQVRPUllfV0lUSF9TRVBBUkFUT1IscixuKXx8c3VwZXIud2Fsa09wdGlvbihlLHIsbil9d2Fsa01hbnkoZSxyLG4pe3RoaXMuY2hlY2tJc1RhcmdldChlLFFuLlJFUEVUSVRJT04scixuKXx8c3VwZXIud2Fsa09wdGlvbihlLHIsbil9d2Fsa01hbnlTZXAoZSxyLG4pe3RoaXMuY2hlY2tJc1RhcmdldChlLFFuLlJFUEVUSVRJT05fV0lUSF9TRVBBUkFUT1IscixuKXx8c3VwZXIud2Fsa09wdGlvbihlLHIsbil9fSx0RT1jbGFzcyBleHRlbmRzIGhze3N0YXRpY3tvKHRoaXMsIkluc2lkZURlZmluaXRpb25GaW5kZXJWaXNpdG9yIil9Y29uc3RydWN0b3IoZSxyLG4pe3N1cGVyKCksdGhpcy50YXJnZXRPY2N1cnJlbmNlPWUsdGhpcy50YXJnZXRQcm9kVHlwZT1yLHRoaXMudGFyZ2V0UmVmPW4sdGhpcy5yZXN1bHQ9W119Y2hlY2tJc1RhcmdldChlLHIpe2UuaWR4PT09dGhpcy50YXJnZXRPY2N1cnJlbmNlJiZ0aGlzLnRhcmdldFByb2RUeXBlPT09ciYmKHRoaXMudGFyZ2V0UmVmPT09dm9pZCAwfHxlPT09dGhpcy50YXJnZXRSZWYpJiYodGhpcy5yZXN1bHQ9ZS5kZWZpbml0aW9uKX12aXNpdE9wdGlvbihlKXt0aGlzLmNoZWNrSXNUYXJnZXQoZSxRbi5PUFRJT04pfXZpc2l0UmVwZXRpdGlvbihlKXt0aGlzLmNoZWNrSXNUYXJnZXQoZSxRbi5SRVBFVElUSU9OKX12aXNpdFJlcGV0aXRpb25NYW5kYXRvcnkoZSl7dGhpcy5jaGVja0lzVGFyZ2V0KGUsUW4uUkVQRVRJVElPTl9NQU5EQVRPUlkpfXZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3IoZSl7dGhpcy5jaGVja0lzVGFyZ2V0KGUsUW4uUkVQRVRJVElPTl9NQU5EQVRPUllfV0lUSF9TRVBBUkFUT1IpfXZpc2l0UmVwZXRpdGlvbldpdGhTZXBhcmF0b3IoZSl7dGhpcy5jaGVja0lzVGFyZ2V0KGUsUW4uUkVQRVRJVElPTl9XSVRIX1NFUEFSQVRPUil9dmlzaXRBbHRlcm5hdGlvbihlKXt0aGlzLmNoZWNrSXNUYXJnZXQoZSxRbi5BTFRFUk5BVElPTil9fTtvKExvZSwiaW5pdGlhbGl6ZUFycmF5T2ZBcnJheXMiKTtvKGdNLCJwYXRoVG9IYXNoS2V5cyIpO28oRUZlLCJpc1VuaXF1ZVByZWZpeEhhc2giKTtvKE9vZSwibG9va0FoZWFkU2VxdWVuY2VGcm9tQWx0ZXJuYXRpdmVzIik7byhKZywiZ2V0TG9va2FoZWFkUGF0aHNGb3JPciIpO28oZTEsImdldExvb2thaGVhZFBhdGhzRm9yT3B0aW9uYWxQcm9kIik7byhuRSwiY29udGFpbnNQYXRoIik7byhQb2UsImlzU3RyaWN0UHJlZml4T2ZQYXRoIik7byhCb2UsImFyZVRva2VuQ2F0ZWdvcmllc05vdFVzZWQiKX0pO2Z1bmN0aW9uIEZvZSh0KXtsZXQgZT10Lmxvb2thaGVhZFN0cmF0ZWd5LnZhbGlkYXRlKHtydWxlczp0LnJ1bGVzLHRva2VuVHlwZXM6dC50b2tlblR5cGVzLGdyYW1tYXJOYW1lOnQuZ3JhbW1hck5hbWV9KTtyZXR1cm4gSmUoZSxyPT5PYmplY3QuYXNzaWduKHt0eXBlOlZpLkNVU1RPTV9MT09LQUhFQURfVkFMSURBVElPTn0scikpfWZ1bmN0aW9uICRvZSh0LGUscixuKXtsZXQgaT1nYSh0LHU9PlNGZSh1LHIpKSxhPVJGZSh0LGUscikscz1nYSh0LHU9Pl9GZSh1LHIpKSxsPWdhKHQsdT0+QUZlKHUsdCxuLHIpKTtyZXR1cm4gaS5jb25jYXQoYSxzLGwpfWZ1bmN0aW9uIFNGZSh0LGUpe2xldCByPW5ldyB2TTt0LmFjY2VwdChyKTtsZXQgbj1yLmFsbFByb2R1Y3Rpb25zLGk9eVIobixDRmUpLGE9enMoaSxsPT5sLmxlbmd0aD4xKTtyZXR1cm4gSmUoYnIoYSksbD0+e2xldCB1PWlhKGwpLGg9ZS5idWlsZER1cGxpY2F0ZUZvdW5kRXJyb3IodCxsKSxmPVZzKHUpLGQ9e21lc3NhZ2U6aCx0eXBlOlZpLkRVUExJQ0FURV9QUk9EVUNUSU9OUyxydWxlTmFtZTp0Lm5hbWUsZHNsTmFtZTpmLG9jY3VycmVuY2U6dS5pZHh9LHA9em9lKHUpO3JldHVybiBwJiYoZC5wYXJhbWV0ZXI9cCksZH0pfWZ1bmN0aW9uIENGZSh0KXtyZXR1cm5gJHtWcyh0KX1fI18ke3QuaWR4fV8jXyR7em9lKHQpfWB9ZnVuY3Rpb24gem9lKHQpe3JldHVybiB0IGluc3RhbmNlb2YgRXI/dC50ZXJtaW5hbFR5cGUubmFtZTp0IGluc3RhbmNlb2Ygb24/dC5ub25UZXJtaW5hbE5hbWU6IiJ9ZnVuY3Rpb24gQUZlKHQsZSxyLG4pe2xldCBpPVtdO2lmKFhyKGUsKHMsbCk9PmwubmFtZT09PXQubmFtZT9zKzE6cywwKT4xKXtsZXQgcz1uLmJ1aWxkRHVwbGljYXRlUnVsZU5hbWVFcnJvcih7dG9wTGV2ZWxSdWxlOnQsZ3JhbW1hck5hbWU6cn0pO2kucHVzaCh7bWVzc2FnZTpzLHR5cGU6VmkuRFVQTElDQVRFX1JVTEVfTkFNRSxydWxlTmFtZTp0Lm5hbWV9KX1yZXR1cm4gaX1mdW5jdGlvbiBHb2UodCxlLHIpe2xldCBuPVtdLGk7cmV0dXJuIFhuKGUsdCl8fChpPWBJbnZhbGlkIHJ1bGUgb3ZlcnJpZGUsIHJ1bGU6IC0+JHt0fTwtIGNhbm5vdCBiZSBvdmVycmlkZGVuIGluIHRoZSBncmFtbWFyOiAtPiR7cn08LWFzIGl0IGlzIG5vdCBkZWZpbmVkIGluIGFueSBvZiB0aGUgc3VwZXIgZ3JhbW1hcnMgYCxuLnB1c2goe21lc3NhZ2U6aSx0eXBlOlZpLklOVkFMSURfUlVMRV9PVkVSUklERSxydWxlTmFtZTp0fSkpLG59ZnVuY3Rpb24gYk0odCxlLHIsbj1bXSl7bGV0IGk9W10sYT1pRShlLmRlZmluaXRpb24pO2lmKGhyKGEpKXJldHVybltdO3tsZXQgcz10Lm5hbWU7WG4oYSx0KSYmaS5wdXNoKHttZXNzYWdlOnIuYnVpbGRMZWZ0UmVjdXJzaW9uRXJyb3Ioe3RvcExldmVsUnVsZTp0LGxlZnRSZWN1cnNpb25QYXRoOm59KSx0eXBlOlZpLkxFRlRfUkVDVVJTSU9OLHJ1bGVOYW1lOnN9KTtsZXQgdT1hZihhLG4uY29uY2F0KFt0XSkpLGg9Z2EodSxmPT57bGV0IGQ9YW4obik7cmV0dXJuIGQucHVzaChmKSxiTSh0LGYscixkKX0pO3JldHVybiBpLmNvbmNhdChoKX19ZnVuY3Rpb24gaUUodCl7bGV0IGU9W107aWYoaHIodCkpcmV0dXJuIGU7bGV0IHI9aWEodCk7aWYociBpbnN0YW5jZW9mIG9uKWUucHVzaChyLnJlZmVyZW5jZWRSdWxlKTtlbHNlIGlmKHIgaW5zdGFuY2VvZiBEbnx8ciBpbnN0YW5jZW9mIGxufHxyIGluc3RhbmNlb2YgTG58fHIgaW5zdGFuY2VvZiBSbnx8ciBpbnN0YW5jZW9mIFRufHxyIGluc3RhbmNlb2YgUHIpZT1lLmNvbmNhdChpRShyLmRlZmluaXRpb24pKTtlbHNlIGlmKHIgaW5zdGFuY2VvZiB3billPXFyKEplKHIuZGVmaW5pdGlvbixhPT5pRShhLmRlZmluaXRpb24pKSk7ZWxzZSBpZighKHIgaW5zdGFuY2VvZiBFcikpdGhyb3cgRXJyb3IoIm5vbiBleGhhdXN0aXZlIG1hdGNoIik7bGV0IG49Z3AociksaT10Lmxlbmd0aD4xO2lmKG4mJmkpe2xldCBhPWJpKHQpO3JldHVybiBlLmNvbmNhdChpRShhKSl9ZWxzZSByZXR1cm4gZX1mdW5jdGlvbiBWb2UodCxlKXtsZXQgcj1uZXcgVHg7dC5hY2NlcHQocik7bGV0IG49ci5hbHRlcm5hdGlvbnM7cmV0dXJuIGdhKG4sYT0+e2xldCBzPUZ1KGEuZGVmaW5pdGlvbik7cmV0dXJuIGdhKHMsKGwsdSk9PntsZXQgaD1lRShbbF0sW10sVnUsMSk7cmV0dXJuIGhyKGgpP1t7bWVzc2FnZTplLmJ1aWxkRW1wdHlBbHRlcm5hdGlvbkVycm9yKHt0b3BMZXZlbFJ1bGU6dCxhbHRlcm5hdGlvbjphLGVtcHR5Q2hvaWNlSWR4OnV9KSx0eXBlOlZpLk5PTkVfTEFTVF9FTVBUWV9BTFQscnVsZU5hbWU6dC5uYW1lLG9jY3VycmVuY2U6YS5pZHgsYWx0ZXJuYXRpdmU6dSsxfV06W119KX0pfWZ1bmN0aW9uIFVvZSh0LGUscil7bGV0IG49bmV3IFR4O3QuYWNjZXB0KG4pO2xldCBpPW4uYWx0ZXJuYXRpb25zO3JldHVybiBpPXNmKGkscz0+cy5pZ25vcmVBbWJpZ3VpdGllcz09PSEwKSxnYShpLHM9PntsZXQgbD1zLmlkeCx1PXMubWF4TG9va2FoZWFkfHxlLGg9SmcobCx0LHUscyksZj1ERmUoaCxzLHQsciksZD1MRmUoaCxzLHQscik7cmV0dXJuIGYuY29uY2F0KGQpfSl9ZnVuY3Rpb24gX0ZlKHQsZSl7bGV0IHI9bmV3IFR4O3QuYWNjZXB0KHIpO2xldCBuPXIuYWx0ZXJuYXRpb25zO3JldHVybiBnYShuLGE9PmEuZGVmaW5pdGlvbi5sZW5ndGg+MjU1P1t7bWVzc2FnZTplLmJ1aWxkVG9vTWFueUFsdGVybmF0aXZlc0Vycm9yKHt0b3BMZXZlbFJ1bGU6dCxhbHRlcm5hdGlvbjphfSksdHlwZTpWaS5UT09fTUFOWV9BTFRTLHJ1bGVOYW1lOnQubmFtZSxvY2N1cnJlbmNlOmEuaWR4fV06W10pfWZ1bmN0aW9uIEhvZSh0LGUscil7bGV0IG49W107cmV0dXJuIEFlKHQsaT0+e2xldCBhPW5ldyB4TTtpLmFjY2VwdChhKTtsZXQgcz1hLmFsbFByb2R1Y3Rpb25zO0FlKHMsbD0+e2xldCB1PWJ4KGwpLGg9bC5tYXhMb29rYWhlYWR8fGUsZj1sLmlkeCxwPWUxKGYsaSx1LGgpWzBdO2lmKGhyKHFyKHApKSl7bGV0IG09ci5idWlsZEVtcHR5UmVwZXRpdGlvbkVycm9yKHt0b3BMZXZlbFJ1bGU6aSxyZXBldGl0aW9uOmx9KTtuLnB1c2goe21lc3NhZ2U6bSx0eXBlOlZpLk5PX05PTl9FTVBUWV9MT09LQUhFQUQscnVsZU5hbWU6aS5uYW1lfSl9fSl9KSxufWZ1bmN0aW9uIERGZSh0LGUscixuKXtsZXQgaT1bXSxhPVhyKHQsKGwsdSxoKT0+KGUuZGVmaW5pdGlvbltoXS5pZ25vcmVBbWJpZ3VpdGllcz09PSEwfHxBZSh1LGY9PntsZXQgZD1baF07QWUodCwocCxtKT0+e2ghPT1tJiZuRShwLGYpJiZlLmRlZmluaXRpb25bbV0uaWdub3JlQW1iaWd1aXRpZXMhPT0hMCYmZC5wdXNoKG0pfSksZC5sZW5ndGg+MSYmIW5FKGksZikmJihpLnB1c2goZiksbC5wdXNoKHthbHRzOmQscGF0aDpmfSkpfSksbCksW10pO3JldHVybiBKZShhLGw9PntsZXQgdT1KZShsLmFsdHMsZj0+ZisxKTtyZXR1cm57bWVzc2FnZTpuLmJ1aWxkQWx0ZXJuYXRpb25BbWJpZ3VpdHlFcnJvcih7dG9wTGV2ZWxSdWxlOnIsYWx0ZXJuYXRpb246ZSxhbWJpZ3VpdHlJbmRpY2VzOnUscHJlZml4UGF0aDpsLnBhdGh9KSx0eXBlOlZpLkFNQklHVU9VU19BTFRTLHJ1bGVOYW1lOnIubmFtZSxvY2N1cnJlbmNlOmUuaWR4LGFsdGVybmF0aXZlczpsLmFsdHN9fSl9ZnVuY3Rpb24gTEZlKHQsZSxyLG4pe2xldCBpPVhyKHQsKHMsbCx1KT0+e2xldCBoPUplKGwsZj0+KHtpZHg6dSxwYXRoOmZ9KSk7cmV0dXJuIHMuY29uY2F0KGgpfSxbXSk7cmV0dXJuIEFjKGdhKGkscz0+e2lmKGUuZGVmaW5pdGlvbltzLmlkeF0uaWdub3JlQW1iaWd1aXRpZXM9PT0hMClyZXR1cm5bXTtsZXQgdT1zLmlkeCxoPXMucGF0aCxmPVlyKGkscD0+ZS5kZWZpbml0aW9uW3AuaWR4XS5pZ25vcmVBbWJpZ3VpdGllcyE9PSEwJiZwLmlkeDx1JiZQb2UocC5wYXRoLGgpKTtyZXR1cm4gSmUoZixwPT57bGV0IG09W3AuaWR4KzEsdSsxXSxnPWUuaWR4PT09MD8iIjplLmlkeDtyZXR1cm57bWVzc2FnZTpuLmJ1aWxkQWx0ZXJuYXRpb25QcmVmaXhBbWJpZ3VpdHlFcnJvcih7dG9wTGV2ZWxSdWxlOnIsYWx0ZXJuYXRpb246ZSxhbWJpZ3VpdHlJbmRpY2VzOm0scHJlZml4UGF0aDpwLnBhdGh9KSx0eXBlOlZpLkFNQklHVU9VU19QUkVGSVhfQUxUUyxydWxlTmFtZTpyLm5hbWUsb2NjdXJyZW5jZTpnLGFsdGVybmF0aXZlczptfX0pfSkpfWZ1bmN0aW9uIFJGZSh0LGUscil7bGV0IG49W10saT1KZShlLGE9PmEubmFtZSk7cmV0dXJuIEFlKHQsYT0+e2xldCBzPWEubmFtZTtpZihYbihpLHMpKXtsZXQgbD1yLmJ1aWxkTmFtZXNwYWNlQ29uZmxpY3RFcnJvcihhKTtuLnB1c2goe21lc3NhZ2U6bCx0eXBlOlZpLkNPTkZMSUNUX1RPS0VOU19SVUxFU19OQU1FU1BBQ0UscnVsZU5hbWU6c30pfX0pLG59dmFyIHZNLFR4LHhNLHd4PU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTtVcygpO2ZzKCk7dDEoKTt4eCgpO3hwKCk7byhGb2UsInZhbGlkYXRlTG9va2FoZWFkIik7bygkb2UsInZhbGlkYXRlR3JhbW1hciIpO28oU0ZlLCJ2YWxpZGF0ZUR1cGxpY2F0ZVByb2R1Y3Rpb25zIik7byhDRmUsImlkZW50aWZ5UHJvZHVjdGlvbkZvckR1cGxpY2F0ZXMiKTtvKHpvZSwiZ2V0RXh0cmFQcm9kdWN0aW9uQXJndW1lbnQiKTt2TT1jbGFzcyBleHRlbmRzIGhze3N0YXRpY3tvKHRoaXMsIk9jY3VycmVuY2VWYWxpZGF0aW9uQ29sbGVjdG9yIil9Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuYWxsUHJvZHVjdGlvbnM9W119dmlzaXROb25UZXJtaW5hbChlKXt0aGlzLmFsbFByb2R1Y3Rpb25zLnB1c2goZSl9dmlzaXRPcHRpb24oZSl7dGhpcy5hbGxQcm9kdWN0aW9ucy5wdXNoKGUpfXZpc2l0UmVwZXRpdGlvbldpdGhTZXBhcmF0b3IoZSl7dGhpcy5hbGxQcm9kdWN0aW9ucy5wdXNoKGUpfXZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeShlKXt0aGlzLmFsbFByb2R1Y3Rpb25zLnB1c2goZSl9dmlzaXRSZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvcihlKXt0aGlzLmFsbFByb2R1Y3Rpb25zLnB1c2goZSl9dmlzaXRSZXBldGl0aW9uKGUpe3RoaXMuYWxsUHJvZHVjdGlvbnMucHVzaChlKX12aXNpdEFsdGVybmF0aW9uKGUpe3RoaXMuYWxsUHJvZHVjdGlvbnMucHVzaChlKX12aXNpdFRlcm1pbmFsKGUpe3RoaXMuYWxsUHJvZHVjdGlvbnMucHVzaChlKX19O28oQUZlLCJ2YWxpZGF0ZVJ1bGVEb2VzTm90QWxyZWFkeUV4aXN0Iik7byhHb2UsInZhbGlkYXRlUnVsZUlzT3ZlcnJpZGRlbiIpO28oYk0sInZhbGlkYXRlTm9MZWZ0UmVjdXJzaW9uIik7byhpRSwiZ2V0Rmlyc3ROb25lVGVybWluYWwiKTtUeD1jbGFzcyBleHRlbmRzIGhze3N0YXRpY3tvKHRoaXMsIk9yQ29sbGVjdG9yIil9Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuYWx0ZXJuYXRpb25zPVtdfXZpc2l0QWx0ZXJuYXRpb24oZSl7dGhpcy5hbHRlcm5hdGlvbnMucHVzaChlKX19O28oVm9lLCJ2YWxpZGF0ZUVtcHR5T3JBbHRlcm5hdGl2ZSIpO28oVW9lLCJ2YWxpZGF0ZUFtYmlndW91c0FsdGVybmF0aW9uQWx0ZXJuYXRpdmVzIik7eE09Y2xhc3MgZXh0ZW5kcyBoc3tzdGF0aWN7byh0aGlzLCJSZXBldGl0aW9uQ29sbGVjdG9yIil9Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuYWxsUHJvZHVjdGlvbnM9W119dmlzaXRSZXBldGl0aW9uV2l0aFNlcGFyYXRvcihlKXt0aGlzLmFsbFByb2R1Y3Rpb25zLnB1c2goZSl9dmlzaXRSZXBldGl0aW9uTWFuZGF0b3J5KGUpe3RoaXMuYWxsUHJvZHVjdGlvbnMucHVzaChlKX12aXNpdFJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yKGUpe3RoaXMuYWxsUHJvZHVjdGlvbnMucHVzaChlKX12aXNpdFJlcGV0aXRpb24oZSl7dGhpcy5hbGxQcm9kdWN0aW9ucy5wdXNoKGUpfX07byhfRmUsInZhbGlkYXRlVG9vTWFueUFsdHMiKTtvKEhvZSwidmFsaWRhdGVTb21lTm9uRW1wdHlMb29rYWhlYWRQYXRoIik7byhERmUsImNoZWNrQWx0ZXJuYXRpdmVzQW1iaWd1aXRpZXMiKTtvKExGZSwiY2hlY2tQcmVmaXhBbHRlcm5hdGl2ZXNBbWJpZ3VpdGllcyIpO28oUkZlLCJjaGVja1Rlcm1pbmFsQW5kTm9uZVRlcm1pbmFsc05hbWVTcGFjZSIpfSk7ZnVuY3Rpb24gV29lKHQpe2xldCBlPW5mKHQse2Vyck1zZ1Byb3ZpZGVyOkFvZX0pLHI9e307cmV0dXJuIEFlKHQucnVsZXMsbj0+e3Jbbi5uYW1lXT1ufSksX29lKHIsZS5lcnJNc2dQcm92aWRlcil9ZnVuY3Rpb24gcW9lKHQpe3JldHVybiB0PW5mKHQse2Vyck1zZ1Byb3ZpZGVyOiRsfSksJG9lKHQucnVsZXMsdC50b2tlblR5cGVzLHQuZXJyTXNnUHJvdmlkZXIsdC5ncmFtbWFyTmFtZSl9dmFyIFlvZT1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7RG9lKCk7d3goKTtRZygpO28oV29lLCJyZXNvbHZlR3JhbW1hciIpO28ocW9lLCJ2YWxpZGF0ZUdyYW1tYXIiKX0pO2Z1bmN0aW9uIHBmKHQpe3JldHVybiBYbihab2UsdC5uYW1lKX12YXIgWG9lLGpvZSxLb2UsUW9lLFpvZSxyMSxUcCxreCxFeCxTeCxuMT1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7WG9lPSJNaXNtYXRjaGVkVG9rZW5FeGNlcHRpb24iLGpvZT0iTm9WaWFibGVBbHRFeGNlcHRpb24iLEtvZT0iRWFybHlFeGl0RXhjZXB0aW9uIixRb2U9Ik5vdEFsbElucHV0UGFyc2VkRXhjZXB0aW9uIixab2U9W1hvZSxqb2UsS29lLFFvZV07T2JqZWN0LmZyZWV6ZShab2UpO28ocGYsImlzUmVjb2duaXRpb25FeGNlcHRpb24iKTtyMT1jbGFzcyBleHRlbmRzIEVycm9ye3N0YXRpY3tvKHRoaXMsIlJlY29nbml0aW9uRXhjZXB0aW9uIil9Y29uc3RydWN0b3IoZSxyKXtzdXBlcihlKSx0aGlzLnRva2VuPXIsdGhpcy5yZXN5bmNlZFRva2Vucz1bXSxPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxuZXcudGFyZ2V0LnByb3RvdHlwZSksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcil9fSxUcD1jbGFzcyBleHRlbmRzIHIxe3N0YXRpY3tvKHRoaXMsIk1pc21hdGNoZWRUb2tlbkV4Y2VwdGlvbiIpfWNvbnN0cnVjdG9yKGUscixuKXtzdXBlcihlLHIpLHRoaXMucHJldmlvdXNUb2tlbj1uLHRoaXMubmFtZT1Yb2V9fSxreD1jbGFzcyBleHRlbmRzIHIxe3N0YXRpY3tvKHRoaXMsIk5vVmlhYmxlQWx0RXhjZXB0aW9uIil9Y29uc3RydWN0b3IoZSxyLG4pe3N1cGVyKGUsciksdGhpcy5wcmV2aW91c1Rva2VuPW4sdGhpcy5uYW1lPWpvZX19LEV4PWNsYXNzIGV4dGVuZHMgcjF7c3RhdGlje28odGhpcywiTm90QWxsSW5wdXRQYXJzZWRFeGNlcHRpb24iKX1jb25zdHJ1Y3RvcihlLHIpe3N1cGVyKGUsciksdGhpcy5uYW1lPVFvZX19LFN4PWNsYXNzIGV4dGVuZHMgcjF7c3RhdGlje28odGhpcywiRWFybHlFeGl0RXhjZXB0aW9uIil9Y29uc3RydWN0b3IoZSxyLG4pe3N1cGVyKGUsciksdGhpcy5wcmV2aW91c1Rva2VuPW4sdGhpcy5uYW1lPUtvZX19fSk7ZnVuY3Rpb24gTkZlKHQsZSxyLG4saSxhLHMpe2xldCBsPXRoaXMuZ2V0S2V5Rm9yQXV0b21hdGljTG9va2FoZWFkKG4saSksdT10aGlzLmZpcnN0QWZ0ZXJSZXBNYXBbbF07aWYodT09PXZvaWQgMCl7bGV0IHA9dGhpcy5nZXRDdXJyUnVsZUZ1bGxOYW1lKCksbT10aGlzLmdldEdBc3RQcm9kdWN0aW9ucygpW3BdO3U9bmV3IGEobSxpKS5zdGFydFdhbGtpbmcoKSx0aGlzLmZpcnN0QWZ0ZXJSZXBNYXBbbF09dX1sZXQgaD11LnRva2VuLGY9dS5vY2N1cnJlbmNlLGQ9dS5pc0VuZE9mUnVsZTt0aGlzLlJVTEVfU1RBQ0subGVuZ3RoPT09MSYmZCYmaD09PXZvaWQgMCYmKGg9Zm8sZj0xKSwhKGg9PT12b2lkIDB8fGY9PT12b2lkIDApJiZ0aGlzLnNob3VsZEluUmVwZXRpdGlvblJlY292ZXJ5QmVUcmllZChoLGYscykmJnRoaXMudHJ5SW5SZXBldGl0aW9uUmVjb3ZlcnkodCxlLHIsaCl9dmFyIFRNLGtNLHdNLGFFLEVNPU4oKCk9PnsidXNlIHN0cmljdCI7YnAoKTtxdCgpO24xKCk7bk0oKTtVcygpO1RNPXt9LGtNPSJJblJ1bGVSZWNvdmVyeUV4Y2VwdGlvbiIsd009Y2xhc3MgZXh0ZW5kcyBFcnJvcntzdGF0aWN7byh0aGlzLCJJblJ1bGVSZWNvdmVyeUV4Y2VwdGlvbiIpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKGUpLHRoaXMubmFtZT1rTX19LGFFPWNsYXNze3N0YXRpY3tvKHRoaXMsIlJlY292ZXJhYmxlIil9aW5pdFJlY292ZXJhYmxlKGUpe3RoaXMuZmlyc3RBZnRlclJlcE1hcD17fSx0aGlzLnJlc3luY0ZvbGxvd3M9e30sdGhpcy5yZWNvdmVyeUVuYWJsZWQ9QnQoZSwicmVjb3ZlcnlFbmFibGVkIik/ZS5yZWNvdmVyeUVuYWJsZWQ6ZHMucmVjb3ZlcnlFbmFibGVkLHRoaXMucmVjb3ZlcnlFbmFibGVkJiYodGhpcy5hdHRlbXB0SW5SZXBldGl0aW9uUmVjb3Zlcnk9TkZlKX1nZXRUb2tlblRvSW5zZXJ0KGUpe2xldCByPVd1KGUsIiIsTmFOLE5hTixOYU4sTmFOLE5hTixOYU4pO3JldHVybiByLmlzSW5zZXJ0ZWRJblJlY292ZXJ5PSEwLHJ9Y2FuVG9rZW5UeXBlQmVJbnNlcnRlZEluUmVjb3ZlcnkoZSl7cmV0dXJuITB9Y2FuVG9rZW5UeXBlQmVEZWxldGVkSW5SZWNvdmVyeShlKXtyZXR1cm4hMH10cnlJblJlcGV0aXRpb25SZWNvdmVyeShlLHIsbixpKXtsZXQgYT10aGlzLmZpbmRSZVN5bmNUb2tlblR5cGUoKSxzPXRoaXMuZXhwb3J0TGV4ZXJTdGF0ZSgpLGw9W10sdT0hMSxoPXRoaXMuTEEoMSksZj10aGlzLkxBKDEpLGQ9bygoKT0+e2xldCBwPXRoaXMuTEEoMCksbT10aGlzLmVycm9yTWVzc2FnZVByb3ZpZGVyLmJ1aWxkTWlzbWF0Y2hUb2tlbk1lc3NhZ2Uoe2V4cGVjdGVkOmksYWN0dWFsOmgscHJldmlvdXM6cCxydWxlTmFtZTp0aGlzLmdldEN1cnJSdWxlRnVsbE5hbWUoKX0pLGc9bmV3IFRwKG0saCx0aGlzLkxBKDApKTtnLnJlc3luY2VkVG9rZW5zPUZ1KGwpLHRoaXMuU0FWRV9FUlJPUihnKX0sImdlbmVyYXRlRXJyb3JNZXNzYWdlIik7Zm9yKDshdTspaWYodGhpcy50b2tlbk1hdGNoZXIoZixpKSl7ZCgpO3JldHVybn1lbHNlIGlmKG4uY2FsbCh0aGlzKSl7ZCgpLGUuYXBwbHkodGhpcyxyKTtyZXR1cm59ZWxzZSB0aGlzLnRva2VuTWF0Y2hlcihmLGEpP3U9ITA6KGY9dGhpcy5TS0lQX1RPS0VOKCksdGhpcy5hZGRUb1Jlc3luY1Rva2VucyhmLGwpKTt0aGlzLmltcG9ydExleGVyU3RhdGUocyl9c2hvdWxkSW5SZXBldGl0aW9uUmVjb3ZlcnlCZVRyaWVkKGUscixuKXtyZXR1cm4hKG49PT0hMXx8dGhpcy50b2tlbk1hdGNoZXIodGhpcy5MQSgxKSxlKXx8dGhpcy5pc0JhY2tUcmFja2luZygpfHx0aGlzLmNhblBlcmZvcm1JblJ1bGVSZWNvdmVyeShlLHRoaXMuZ2V0Rm9sbG93c0ZvckluUnVsZVJlY292ZXJ5KGUscikpKX1nZXRGb2xsb3dzRm9ySW5SdWxlUmVjb3ZlcnkoZSxyKXtsZXQgbj10aGlzLmdldEN1cnJlbnRHcmFtbWFyUGF0aChlLHIpO3JldHVybiB0aGlzLmdldE5leHRQb3NzaWJsZVRva2VuVHlwZXMobil9dHJ5SW5SdWxlUmVjb3ZlcnkoZSxyKXtpZih0aGlzLmNhblJlY292ZXJXaXRoU2luZ2xlVG9rZW5JbnNlcnRpb24oZSxyKSlyZXR1cm4gdGhpcy5nZXRUb2tlblRvSW5zZXJ0KGUpO2lmKHRoaXMuY2FuUmVjb3ZlcldpdGhTaW5nbGVUb2tlbkRlbGV0aW9uKGUpKXtsZXQgbj10aGlzLlNLSVBfVE9LRU4oKTtyZXR1cm4gdGhpcy5jb25zdW1lVG9rZW4oKSxufXRocm93IG5ldyB3TSgic2FkIHNhZCBwYW5kYSIpfWNhblBlcmZvcm1JblJ1bGVSZWNvdmVyeShlLHIpe3JldHVybiB0aGlzLmNhblJlY292ZXJXaXRoU2luZ2xlVG9rZW5JbnNlcnRpb24oZSxyKXx8dGhpcy5jYW5SZWNvdmVyV2l0aFNpbmdsZVRva2VuRGVsZXRpb24oZSl9Y2FuUmVjb3ZlcldpdGhTaW5nbGVUb2tlbkluc2VydGlvbihlLHIpe2lmKCF0aGlzLmNhblRva2VuVHlwZUJlSW5zZXJ0ZWRJblJlY292ZXJ5KGUpfHxocihyKSlyZXR1cm4hMTtsZXQgbj10aGlzLkxBKDEpO3JldHVybiBscyhyLGE9PnRoaXMudG9rZW5NYXRjaGVyKG4sYSkpIT09dm9pZCAwfWNhblJlY292ZXJXaXRoU2luZ2xlVG9rZW5EZWxldGlvbihlKXtyZXR1cm4gdGhpcy5jYW5Ub2tlblR5cGVCZURlbGV0ZWRJblJlY292ZXJ5KGUpP3RoaXMudG9rZW5NYXRjaGVyKHRoaXMuTEEoMiksZSk6ITF9aXNJbkN1cnJlbnRSdWxlUmVTeW5jU2V0KGUpe2xldCByPXRoaXMuZ2V0Q3VyckZvbGxvd0tleSgpLG49dGhpcy5nZXRGb2xsb3dTZXRGcm9tRm9sbG93S2V5KHIpO3JldHVybiBYbihuLGUpfWZpbmRSZVN5bmNUb2tlblR5cGUoKXtsZXQgZT10aGlzLmZsYXR0ZW5Gb2xsb3dTZXQoKSxyPXRoaXMuTEEoMSksbj0yO2Zvcig7Oyl7bGV0IGk9bHMoZSxhPT5neChyLGEpKTtpZihpIT09dm9pZCAwKXJldHVybiBpO3I9dGhpcy5MQShuKSxuKyt9fWdldEN1cnJGb2xsb3dLZXkoKXtpZih0aGlzLlJVTEVfU1RBQ0subGVuZ3RoPT09MSlyZXR1cm4gVE07bGV0IGU9dGhpcy5nZXRMYXN0RXhwbGljaXRSdWxlU2hvcnROYW1lKCkscj10aGlzLmdldExhc3RFeHBsaWNpdFJ1bGVPY2N1cnJlbmNlSW5kZXgoKSxuPXRoaXMuZ2V0UHJldmlvdXNFeHBsaWNpdFJ1bGVTaG9ydE5hbWUoKTtyZXR1cm57cnVsZU5hbWU6dGhpcy5zaG9ydFJ1bGVOYW1lVG9GdWxsTmFtZShlKSxpZHhJbkNhbGxpbmdSdWxlOnIsaW5SdWxlOnRoaXMuc2hvcnRSdWxlTmFtZVRvRnVsbE5hbWUobil9fWJ1aWxkRnVsbEZvbGxvd0tleVN0YWNrKCl7bGV0IGU9dGhpcy5SVUxFX1NUQUNLLHI9dGhpcy5SVUxFX09DQ1VSUkVOQ0VfU1RBQ0s7cmV0dXJuIEplKGUsKG4saSk9Pmk9PT0wP1RNOntydWxlTmFtZTp0aGlzLnNob3J0UnVsZU5hbWVUb0Z1bGxOYW1lKG4pLGlkeEluQ2FsbGluZ1J1bGU6cltpXSxpblJ1bGU6dGhpcy5zaG9ydFJ1bGVOYW1lVG9GdWxsTmFtZShlW2ktMV0pfSl9ZmxhdHRlbkZvbGxvd1NldCgpe2xldCBlPUplKHRoaXMuYnVpbGRGdWxsRm9sbG93S2V5U3RhY2soKSxyPT50aGlzLmdldEZvbGxvd1NldEZyb21Gb2xsb3dLZXkocikpO3JldHVybiBxcihlKX1nZXRGb2xsb3dTZXRGcm9tRm9sbG93S2V5KGUpe2lmKGU9PT1UTSlyZXR1cm5bZm9dO2xldCByPWUucnVsZU5hbWUrZS5pZHhJbkNhbGxpbmdSdWxlK1VrK2UuaW5SdWxlO3JldHVybiB0aGlzLnJlc3luY0ZvbGxvd3Nbcl19YWRkVG9SZXN5bmNUb2tlbnMoZSxyKXtyZXR1cm4gdGhpcy50b2tlbk1hdGNoZXIoZSxmbyl8fHIucHVzaChlKSxyfXJlU3luY1RvKGUpe2xldCByPVtdLG49dGhpcy5MQSgxKTtmb3IoO3RoaXMudG9rZW5NYXRjaGVyKG4sZSk9PT0hMTspbj10aGlzLlNLSVBfVE9LRU4oKSx0aGlzLmFkZFRvUmVzeW5jVG9rZW5zKG4scik7cmV0dXJuIEZ1KHIpfWF0dGVtcHRJblJlcGV0aXRpb25SZWNvdmVyeShlLHIsbixpLGEscyxsKXt9Z2V0Q3VycmVudEdyYW1tYXJQYXRoKGUscil7bGV0IG49dGhpcy5nZXRIdW1hblJlYWRhYmxlUnVsZVN0YWNrKCksaT1hbih0aGlzLlJVTEVfT0NDVVJSRU5DRV9TVEFDSyk7cmV0dXJue3J1bGVTdGFjazpuLG9jY3VycmVuY2VTdGFjazppLGxhc3RUb2s6ZSxsYXN0VG9rT2NjdXJyZW5jZTpyfX1nZXRIdW1hblJlYWRhYmxlUnVsZVN0YWNrKCl7cmV0dXJuIEplKHRoaXMuUlVMRV9TVEFDSyxlPT50aGlzLnNob3J0UnVsZU5hbWVUb0Z1bGxOYW1lKGUpKX19O28oTkZlLCJhdHRlbXB0SW5SZXBldGl0aW9uUmVjb3ZlcnkiKX0pO2Z1bmN0aW9uIHNFKHQsZSxyKXtyZXR1cm4gcnxlfHR9dmFyIG9FPU4oKCk9PnsidXNlIHN0cmljdCI7byhzRSwiZ2V0S2V5Rm9yQXV0b21hdGljTG9va2FoZWFkIil9KTt2YXIgWXUsU009TigoKT0+eyJ1c2Ugc3RyaWN0IjtxdCgpO1FnKCk7VXMoKTt3eCgpO3QxKCk7WXU9Y2xhc3N7c3RhdGlje28odGhpcywiTExrTG9va2FoZWFkU3RyYXRlZ3kiKX1jb25zdHJ1Y3RvcihlKXt2YXIgcjt0aGlzLm1heExvb2thaGVhZD0ocj1lPy5tYXhMb29rYWhlYWQpIT09bnVsbCYmciE9PXZvaWQgMD9yOmRzLm1heExvb2thaGVhZH12YWxpZGF0ZShlKXtsZXQgcj10aGlzLnZhbGlkYXRlTm9MZWZ0UmVjdXJzaW9uKGUucnVsZXMpO2lmKGhyKHIpKXtsZXQgbj10aGlzLnZhbGlkYXRlRW1wdHlPckFsdGVybmF0aXZlcyhlLnJ1bGVzKSxpPXRoaXMudmFsaWRhdGVBbWJpZ3VvdXNBbHRlcm5hdGlvbkFsdGVybmF0aXZlcyhlLnJ1bGVzLHRoaXMubWF4TG9va2FoZWFkKSxhPXRoaXMudmFsaWRhdGVTb21lTm9uRW1wdHlMb29rYWhlYWRQYXRoKGUucnVsZXMsdGhpcy5tYXhMb29rYWhlYWQpO3JldHVyblsuLi5yLC4uLm4sLi4uaSwuLi5hXX1yZXR1cm4gcn12YWxpZGF0ZU5vTGVmdFJlY3Vyc2lvbihlKXtyZXR1cm4gZ2EoZSxyPT5iTShyLHIsJGwpKX12YWxpZGF0ZUVtcHR5T3JBbHRlcm5hdGl2ZXMoZSl7cmV0dXJuIGdhKGUscj0+Vm9lKHIsJGwpKX12YWxpZGF0ZUFtYmlndW91c0FsdGVybmF0aW9uQWx0ZXJuYXRpdmVzKGUscil7cmV0dXJuIGdhKGUsbj0+VW9lKG4sciwkbCkpfXZhbGlkYXRlU29tZU5vbkVtcHR5TG9va2FoZWFkUGF0aChlLHIpe3JldHVybiBIb2UoZSxyLCRsKX1idWlsZExvb2thaGVhZEZvckFsdGVybmF0aW9uKGUpe3JldHVybiBSb2UoZS5wcm9kT2NjdXJyZW5jZSxlLnJ1bGUsZS5tYXhMb29rYWhlYWQsZS5oYXNQcmVkaWNhdGVzLGUuZHluYW1pY1Rva2Vuc0VuYWJsZWQsTW9lKX1idWlsZExvb2thaGVhZEZvck9wdGlvbmFsKGUpe3JldHVybiBOb2UoZS5wcm9kT2NjdXJyZW5jZSxlLnJ1bGUsZS5tYXhMb29rYWhlYWQsZS5keW5hbWljVG9rZW5zRW5hYmxlZCxieChlLnByb2RUeXBlKSxJb2UpfX19KTtmdW5jdGlvbiBNRmUodCl7bEUucmVzZXQoKSx0LmFjY2VwdChsRSk7bGV0IGU9bEUuZHNsTWV0aG9kcztyZXR1cm4gbEUucmVzZXQoKSxlfXZhciBjRSxDTSxsRSxKb2U9TigoKT0+eyJ1c2Ugc3RyaWN0IjtxdCgpO1VzKCk7b0UoKTtmcygpO1NNKCk7Y0U9Y2xhc3N7c3RhdGlje28odGhpcywiTG9va3NBaGVhZCIpfWluaXRMb29rc0FoZWFkKGUpe3RoaXMuZHluYW1pY1Rva2Vuc0VuYWJsZWQ9QnQoZSwiZHluYW1pY1Rva2Vuc0VuYWJsZWQiKT9lLmR5bmFtaWNUb2tlbnNFbmFibGVkOmRzLmR5bmFtaWNUb2tlbnNFbmFibGVkLHRoaXMubWF4TG9va2FoZWFkPUJ0KGUsIm1heExvb2thaGVhZCIpP2UubWF4TG9va2FoZWFkOmRzLm1heExvb2thaGVhZCx0aGlzLmxvb2thaGVhZFN0cmF0ZWd5PUJ0KGUsImxvb2thaGVhZFN0cmF0ZWd5Iik/ZS5sb29rYWhlYWRTdHJhdGVneTpuZXcgWXUoe21heExvb2thaGVhZDp0aGlzLm1heExvb2thaGVhZH0pLHRoaXMubG9va0FoZWFkRnVuY3NDYWNoZT1uZXcgTWFwfXByZUNvbXB1dGVMb29rYWhlYWRGdW5jdGlvbnMoZSl7QWUoZSxyPT57dGhpcy5UUkFDRV9JTklUKGAke3IubmFtZX0gUnVsZSBMb29rYWhlYWRgLCgpPT57bGV0e2FsdGVybmF0aW9uOm4scmVwZXRpdGlvbjppLG9wdGlvbjphLHJlcGV0aXRpb25NYW5kYXRvcnk6cyxyZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvcjpsLHJlcGV0aXRpb25XaXRoU2VwYXJhdG9yOnV9PU1GZShyKTtBZShuLGg9PntsZXQgZj1oLmlkeD09PTA/IiI6aC5pZHg7dGhpcy5UUkFDRV9JTklUKGAke1ZzKGgpfSR7Zn1gLCgpPT57bGV0IGQ9dGhpcy5sb29rYWhlYWRTdHJhdGVneS5idWlsZExvb2thaGVhZEZvckFsdGVybmF0aW9uKHtwcm9kT2NjdXJyZW5jZTpoLmlkeCxydWxlOnIsbWF4TG9va2FoZWFkOmgubWF4TG9va2FoZWFkfHx0aGlzLm1heExvb2thaGVhZCxoYXNQcmVkaWNhdGVzOmguaGFzUHJlZGljYXRlcyxkeW5hbWljVG9rZW5zRW5hYmxlZDp0aGlzLmR5bmFtaWNUb2tlbnNFbmFibGVkfSkscD1zRSh0aGlzLmZ1bGxSdWxlTmFtZVRvU2hvcnRbci5uYW1lXSwyNTYsaC5pZHgpO3RoaXMuc2V0TGFGdW5jQ2FjaGUocCxkKX0pfSksQWUoaSxoPT57dGhpcy5jb21wdXRlTG9va2FoZWFkRnVuYyhyLGguaWR4LDc2OCwiUmVwZXRpdGlvbiIsaC5tYXhMb29rYWhlYWQsVnMoaCkpfSksQWUoYSxoPT57dGhpcy5jb21wdXRlTG9va2FoZWFkRnVuYyhyLGguaWR4LDUxMiwiT3B0aW9uIixoLm1heExvb2thaGVhZCxWcyhoKSl9KSxBZShzLGg9Pnt0aGlzLmNvbXB1dGVMb29rYWhlYWRGdW5jKHIsaC5pZHgsMTAyNCwiUmVwZXRpdGlvbk1hbmRhdG9yeSIsaC5tYXhMb29rYWhlYWQsVnMoaCkpfSksQWUobCxoPT57dGhpcy5jb21wdXRlTG9va2FoZWFkRnVuYyhyLGguaWR4LDE1MzYsIlJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yIixoLm1heExvb2thaGVhZCxWcyhoKSl9KSxBZSh1LGg9Pnt0aGlzLmNvbXB1dGVMb29rYWhlYWRGdW5jKHIsaC5pZHgsMTI4MCwiUmVwZXRpdGlvbldpdGhTZXBhcmF0b3IiLGgubWF4TG9va2FoZWFkLFZzKGgpKX0pfSl9KX1jb21wdXRlTG9va2FoZWFkRnVuYyhlLHIsbixpLGEscyl7dGhpcy5UUkFDRV9JTklUKGAke3N9JHtyPT09MD8iIjpyfWAsKCk9PntsZXQgbD10aGlzLmxvb2thaGVhZFN0cmF0ZWd5LmJ1aWxkTG9va2FoZWFkRm9yT3B0aW9uYWwoe3Byb2RPY2N1cnJlbmNlOnIscnVsZTplLG1heExvb2thaGVhZDphfHx0aGlzLm1heExvb2thaGVhZCxkeW5hbWljVG9rZW5zRW5hYmxlZDp0aGlzLmR5bmFtaWNUb2tlbnNFbmFibGVkLHByb2RUeXBlOml9KSx1PXNFKHRoaXMuZnVsbFJ1bGVOYW1lVG9TaG9ydFtlLm5hbWVdLG4scik7dGhpcy5zZXRMYUZ1bmNDYWNoZSh1LGwpfSl9Z2V0S2V5Rm9yQXV0b21hdGljTG9va2FoZWFkKGUscil7bGV0IG49dGhpcy5nZXRMYXN0RXhwbGljaXRSdWxlU2hvcnROYW1lKCk7cmV0dXJuIHNFKG4sZSxyKX1nZXRMYUZ1bmNGcm9tQ2FjaGUoZSl7cmV0dXJuIHRoaXMubG9va0FoZWFkRnVuY3NDYWNoZS5nZXQoZSl9c2V0TGFGdW5jQ2FjaGUoZSxyKXt0aGlzLmxvb2tBaGVhZEZ1bmNzQ2FjaGUuc2V0KGUscil9fSxDTT1jbGFzcyBleHRlbmRzIGhze3N0YXRpY3tvKHRoaXMsIkRzbE1ldGhvZHNDb2xsZWN0b3JWaXNpdG9yIil9Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuZHNsTWV0aG9kcz17b3B0aW9uOltdLGFsdGVybmF0aW9uOltdLHJlcGV0aXRpb246W10scmVwZXRpdGlvbldpdGhTZXBhcmF0b3I6W10scmVwZXRpdGlvbk1hbmRhdG9yeTpbXSxyZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvcjpbXX19cmVzZXQoKXt0aGlzLmRzbE1ldGhvZHM9e29wdGlvbjpbXSxhbHRlcm5hdGlvbjpbXSxyZXBldGl0aW9uOltdLHJlcGV0aXRpb25XaXRoU2VwYXJhdG9yOltdLHJlcGV0aXRpb25NYW5kYXRvcnk6W10scmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3I6W119fXZpc2l0T3B0aW9uKGUpe3RoaXMuZHNsTWV0aG9kcy5vcHRpb24ucHVzaChlKX12aXNpdFJlcGV0aXRpb25XaXRoU2VwYXJhdG9yKGUpe3RoaXMuZHNsTWV0aG9kcy5yZXBldGl0aW9uV2l0aFNlcGFyYXRvci5wdXNoKGUpfXZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeShlKXt0aGlzLmRzbE1ldGhvZHMucmVwZXRpdGlvbk1hbmRhdG9yeS5wdXNoKGUpfXZpc2l0UmVwZXRpdGlvbk1hbmRhdG9yeVdpdGhTZXBhcmF0b3IoZSl7dGhpcy5kc2xNZXRob2RzLnJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yLnB1c2goZSl9dmlzaXRSZXBldGl0aW9uKGUpe3RoaXMuZHNsTWV0aG9kcy5yZXBldGl0aW9uLnB1c2goZSl9dmlzaXRBbHRlcm5hdGlvbihlKXt0aGlzLmRzbE1ldGhvZHMuYWx0ZXJuYXRpb24ucHVzaChlKX19LGxFPW5ldyBDTTtvKE1GZSwiY29sbGVjdE1ldGhvZHMiKX0pO2Z1bmN0aW9uIERNKHQsZSl7aXNOYU4odC5zdGFydE9mZnNldCk9PT0hMD8odC5zdGFydE9mZnNldD1lLnN0YXJ0T2Zmc2V0LHQuZW5kT2Zmc2V0PWUuZW5kT2Zmc2V0KTp0LmVuZE9mZnNldDxlLmVuZE9mZnNldCYmKHQuZW5kT2Zmc2V0PWUuZW5kT2Zmc2V0KX1mdW5jdGlvbiBMTSh0LGUpe2lzTmFOKHQuc3RhcnRPZmZzZXQpPT09ITA/KHQuc3RhcnRPZmZzZXQ9ZS5zdGFydE9mZnNldCx0LnN0YXJ0Q29sdW1uPWUuc3RhcnRDb2x1bW4sdC5zdGFydExpbmU9ZS5zdGFydExpbmUsdC5lbmRPZmZzZXQ9ZS5lbmRPZmZzZXQsdC5lbmRDb2x1bW49ZS5lbmRDb2x1bW4sdC5lbmRMaW5lPWUuZW5kTGluZSk6dC5lbmRPZmZzZXQ8ZS5lbmRPZmZzZXQmJih0LmVuZE9mZnNldD1lLmVuZE9mZnNldCx0LmVuZENvbHVtbj1lLmVuZENvbHVtbix0LmVuZExpbmU9ZS5lbmRMaW5lKX1mdW5jdGlvbiBlbGUodCxlLHIpe3QuY2hpbGRyZW5bcl09PT12b2lkIDA/dC5jaGlsZHJlbltyXT1bZV06dC5jaGlsZHJlbltyXS5wdXNoKGUpfWZ1bmN0aW9uIHRsZSh0LGUscil7dC5jaGlsZHJlbltlXT09PXZvaWQgMD90LmNoaWxkcmVuW2VdPVtyXTp0LmNoaWxkcmVuW2VdLnB1c2gocil9dmFyIHJsZT1OKCgpPT57InVzZSBzdHJpY3QiO28oRE0sInNldE5vZGVMb2NhdGlvbk9ubHlPZmZzZXQiKTtvKExNLCJzZXROb2RlTG9jYXRpb25GdWxsIik7byhlbGUsImFkZFRlcm1pbmFsVG9Dc3QiKTtvKHRsZSwiYWRkTm9uZVRlcm1pbmFsVG9Dc3QiKX0pO2Z1bmN0aW9uIFJNKHQsZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsSUZlLHtlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMSx2YWx1ZTplfSl9dmFyIElGZSxubGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtJRmU9Im5hbWUiO28oUk0sImRlZmluZU5hbWVQcm9wIil9KTtmdW5jdGlvbiBPRmUodCxlKXtsZXQgcj16cih0KSxuPXIubGVuZ3RoO2ZvcihsZXQgaT0wO2k8bjtpKyspe2xldCBhPXJbaV0scz10W2FdLGw9cy5sZW5ndGg7Zm9yKGxldCB1PTA7dTxsO3UrKyl7bGV0IGg9c1t1XTtoLnRva2VuVHlwZUlkeD09PXZvaWQgMCYmdGhpc1toLm5hbWVdKGguY2hpbGRyZW4sZSl9fX1mdW5jdGlvbiBpbGUodCxlKXtsZXQgcj1vKGZ1bmN0aW9uKCl7fSwiZGVyaXZlZENvbnN0cnVjdG9yIik7Uk0ocix0KyJCYXNlU2VtYW50aWNzIik7bGV0IG49e3Zpc2l0Om8oZnVuY3Rpb24oaSxhKXtpZihQdChpKSYmKGk9aVswXSksIW1yKGkpKXJldHVybiB0aGlzW2kubmFtZV0oaS5jaGlsZHJlbixhKX0sInZpc2l0IiksdmFsaWRhdGVWaXNpdG9yOm8oZnVuY3Rpb24oKXtsZXQgaT1QRmUodGhpcyxlKTtpZighaHIoaSkpe2xldCBhPUplKGkscz0+cy5tc2cpO3Rocm93IEVycm9yKGBFcnJvcnMgRGV0ZWN0ZWQgaW4gQ1NUIFZpc2l0b3IgPCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfT46Cgkke2Euam9pbihgCgpgKS5yZXBsYWNlKC9cbi9nLGAKCWApfWApfX0sInZhbGlkYXRlVmlzaXRvciIpfTtyZXR1cm4gci5wcm90b3R5cGU9bixyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIuX1JVTEVfTkFNRVM9ZSxyfWZ1bmN0aW9uIGFsZSh0LGUscil7bGV0IG49byhmdW5jdGlvbigpe30sImRlcml2ZWRDb25zdHJ1Y3RvciIpO1JNKG4sdCsiQmFzZVNlbWFudGljc1dpdGhEZWZhdWx0cyIpO2xldCBpPU9iamVjdC5jcmVhdGUoci5wcm90b3R5cGUpO3JldHVybiBBZShlLGE9PntpW2FdPU9GZX0pLG4ucHJvdG90eXBlPWksbi5wcm90b3R5cGUuY29uc3RydWN0b3I9bixufWZ1bmN0aW9uIFBGZSh0LGUpe3JldHVybiBCRmUodCxlKX1mdW5jdGlvbiBCRmUodCxlKXtsZXQgcj1ZcihlLGk9PkFpKHRbaV0pPT09ITEpLG49SmUocixpPT4oe21zZzpgTWlzc2luZyB2aXNpdG9yIG1ldGhvZDogPCR7aX0+IG9uICR7dC5jb25zdHJ1Y3Rvci5uYW1lfSBDU1QgVmlzaXRvci5gLHR5cGU6Tk0uTUlTU0lOR19NRVRIT0QsbWV0aG9kTmFtZTppfSkpO3JldHVybiBBYyhuKX12YXIgTk0sc2xlPU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTtubGUoKTtvKE9GZSwiZGVmYXVsdFZpc2l0Iik7byhpbGUsImNyZWF0ZUJhc2VTZW1hbnRpY1Zpc2l0b3JDb25zdHJ1Y3RvciIpO28oYWxlLCJjcmVhdGVCYXNlVmlzaXRvckNvbnN0cnVjdG9yV2l0aERlZmF1bHRzIik7KGZ1bmN0aW9uKHQpe3RbdC5SRURVTkRBTlRfTUVUSE9EPTBdPSJSRURVTkRBTlRfTUVUSE9EIix0W3QuTUlTU0lOR19NRVRIT0Q9MV09Ik1JU1NJTkdfTUVUSE9EIn0pKE5NfHwoTk09e30pKTtvKFBGZSwidmFsaWRhdGVWaXNpdG9yIik7byhCRmUsInZhbGlkYXRlTWlzc2luZ0NzdE1ldGhvZHMiKX0pO3ZhciBkRSxvbGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtybGUoKTtxdCgpO3NsZSgpO1VzKCk7ZEU9Y2xhc3N7c3RhdGlje28odGhpcywiVHJlZUJ1aWxkZXIiKX1pbml0VHJlZUJ1aWxkZXIoZSl7aWYodGhpcy5DU1RfU1RBQ0s9W10sdGhpcy5vdXRwdXRDc3Q9ZS5vdXRwdXRDc3QsdGhpcy5ub2RlTG9jYXRpb25UcmFja2luZz1CdChlLCJub2RlTG9jYXRpb25UcmFja2luZyIpP2Uubm9kZUxvY2F0aW9uVHJhY2tpbmc6ZHMubm9kZUxvY2F0aW9uVHJhY2tpbmcsIXRoaXMub3V0cHV0Q3N0KXRoaXMuY3N0SW52b2NhdGlvblN0YXRlVXBkYXRlPWFpLHRoaXMuY3N0RmluYWxseVN0YXRlVXBkYXRlPWFpLHRoaXMuY3N0UG9zdFRlcm1pbmFsPWFpLHRoaXMuY3N0UG9zdE5vblRlcm1pbmFsPWFpLHRoaXMuY3N0UG9zdFJ1bGU9YWk7ZWxzZSBpZigvZnVsbC9pLnRlc3QodGhpcy5ub2RlTG9jYXRpb25UcmFja2luZykpdGhpcy5yZWNvdmVyeUVuYWJsZWQ/KHRoaXMuc2V0Tm9kZUxvY2F0aW9uRnJvbVRva2VuPUxNLHRoaXMuc2V0Tm9kZUxvY2F0aW9uRnJvbU5vZGU9TE0sdGhpcy5jc3RQb3N0UnVsZT1haSx0aGlzLnNldEluaXRpYWxOb2RlTG9jYXRpb249dGhpcy5zZXRJbml0aWFsTm9kZUxvY2F0aW9uRnVsbFJlY292ZXJ5KToodGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tVG9rZW49YWksdGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tTm9kZT1haSx0aGlzLmNzdFBvc3RSdWxlPXRoaXMuY3N0UG9zdFJ1bGVGdWxsLHRoaXMuc2V0SW5pdGlhbE5vZGVMb2NhdGlvbj10aGlzLnNldEluaXRpYWxOb2RlTG9jYXRpb25GdWxsUmVndWxhcik7ZWxzZSBpZigvb25seU9mZnNldC9pLnRlc3QodGhpcy5ub2RlTG9jYXRpb25UcmFja2luZykpdGhpcy5yZWNvdmVyeUVuYWJsZWQ/KHRoaXMuc2V0Tm9kZUxvY2F0aW9uRnJvbVRva2VuPURNLHRoaXMuc2V0Tm9kZUxvY2F0aW9uRnJvbU5vZGU9RE0sdGhpcy5jc3RQb3N0UnVsZT1haSx0aGlzLnNldEluaXRpYWxOb2RlTG9jYXRpb249dGhpcy5zZXRJbml0aWFsTm9kZUxvY2F0aW9uT25seU9mZnNldFJlY292ZXJ5KToodGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tVG9rZW49YWksdGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tTm9kZT1haSx0aGlzLmNzdFBvc3RSdWxlPXRoaXMuY3N0UG9zdFJ1bGVPbmx5T2Zmc2V0LHRoaXMuc2V0SW5pdGlhbE5vZGVMb2NhdGlvbj10aGlzLnNldEluaXRpYWxOb2RlTG9jYXRpb25Pbmx5T2Zmc2V0UmVndWxhcik7ZWxzZSBpZigvbm9uZS9pLnRlc3QodGhpcy5ub2RlTG9jYXRpb25UcmFja2luZykpdGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tVG9rZW49YWksdGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tTm9kZT1haSx0aGlzLmNzdFBvc3RSdWxlPWFpLHRoaXMuc2V0SW5pdGlhbE5vZGVMb2NhdGlvbj1haTtlbHNlIHRocm93IEVycm9yKGBJbnZhbGlkIDxub2RlTG9jYXRpb25UcmFja2luZz4gY29uZmlnIG9wdGlvbjogIiR7ZS5ub2RlTG9jYXRpb25UcmFja2luZ30iYCl9c2V0SW5pdGlhbE5vZGVMb2NhdGlvbk9ubHlPZmZzZXRSZWNvdmVyeShlKXtlLmxvY2F0aW9uPXtzdGFydE9mZnNldDpOYU4sZW5kT2Zmc2V0Ok5hTn19c2V0SW5pdGlhbE5vZGVMb2NhdGlvbk9ubHlPZmZzZXRSZWd1bGFyKGUpe2UubG9jYXRpb249e3N0YXJ0T2Zmc2V0OnRoaXMuTEEoMSkuc3RhcnRPZmZzZXQsZW5kT2Zmc2V0Ok5hTn19c2V0SW5pdGlhbE5vZGVMb2NhdGlvbkZ1bGxSZWNvdmVyeShlKXtlLmxvY2F0aW9uPXtzdGFydE9mZnNldDpOYU4sc3RhcnRMaW5lOk5hTixzdGFydENvbHVtbjpOYU4sZW5kT2Zmc2V0Ok5hTixlbmRMaW5lOk5hTixlbmRDb2x1bW46TmFOfX1zZXRJbml0aWFsTm9kZUxvY2F0aW9uRnVsbFJlZ3VsYXIoZSl7bGV0IHI9dGhpcy5MQSgxKTtlLmxvY2F0aW9uPXtzdGFydE9mZnNldDpyLnN0YXJ0T2Zmc2V0LHN0YXJ0TGluZTpyLnN0YXJ0TGluZSxzdGFydENvbHVtbjpyLnN0YXJ0Q29sdW1uLGVuZE9mZnNldDpOYU4sZW5kTGluZTpOYU4sZW5kQ29sdW1uOk5hTn19Y3N0SW52b2NhdGlvblN0YXRlVXBkYXRlKGUpe2xldCByPXtuYW1lOmUsY2hpbGRyZW46T2JqZWN0LmNyZWF0ZShudWxsKX07dGhpcy5zZXRJbml0aWFsTm9kZUxvY2F0aW9uKHIpLHRoaXMuQ1NUX1NUQUNLLnB1c2gocil9Y3N0RmluYWxseVN0YXRlVXBkYXRlKCl7dGhpcy5DU1RfU1RBQ0sucG9wKCl9Y3N0UG9zdFJ1bGVGdWxsKGUpe2xldCByPXRoaXMuTEEoMCksbj1lLmxvY2F0aW9uO24uc3RhcnRPZmZzZXQ8PXIuc3RhcnRPZmZzZXQ/KG4uZW5kT2Zmc2V0PXIuZW5kT2Zmc2V0LG4uZW5kTGluZT1yLmVuZExpbmUsbi5lbmRDb2x1bW49ci5lbmRDb2x1bW4pOihuLnN0YXJ0T2Zmc2V0PU5hTixuLnN0YXJ0TGluZT1OYU4sbi5zdGFydENvbHVtbj1OYU4pfWNzdFBvc3RSdWxlT25seU9mZnNldChlKXtsZXQgcj10aGlzLkxBKDApLG49ZS5sb2NhdGlvbjtuLnN0YXJ0T2Zmc2V0PD1yLnN0YXJ0T2Zmc2V0P24uZW5kT2Zmc2V0PXIuZW5kT2Zmc2V0Om4uc3RhcnRPZmZzZXQ9TmFOfWNzdFBvc3RUZXJtaW5hbChlLHIpe2xldCBuPXRoaXMuQ1NUX1NUQUNLW3RoaXMuQ1NUX1NUQUNLLmxlbmd0aC0xXTtlbGUobixyLGUpLHRoaXMuc2V0Tm9kZUxvY2F0aW9uRnJvbVRva2VuKG4ubG9jYXRpb24scil9Y3N0UG9zdE5vblRlcm1pbmFsKGUscil7bGV0IG49dGhpcy5DU1RfU1RBQ0tbdGhpcy5DU1RfU1RBQ0subGVuZ3RoLTFdO3RsZShuLHIsZSksdGhpcy5zZXROb2RlTG9jYXRpb25Gcm9tTm9kZShuLmxvY2F0aW9uLGUubG9jYXRpb24pfWdldEJhc2VDc3RWaXNpdG9yQ29uc3RydWN0b3IoKXtpZihtcih0aGlzLmJhc2VDc3RWaXNpdG9yQ29uc3RydWN0b3IpKXtsZXQgZT1pbGUodGhpcy5jbGFzc05hbWUsenIodGhpcy5nYXN0UHJvZHVjdGlvbnNDYWNoZSkpO3JldHVybiB0aGlzLmJhc2VDc3RWaXNpdG9yQ29uc3RydWN0b3I9ZSxlfXJldHVybiB0aGlzLmJhc2VDc3RWaXNpdG9yQ29uc3RydWN0b3J9Z2V0QmFzZUNzdFZpc2l0b3JDb25zdHJ1Y3RvcldpdGhEZWZhdWx0cygpe2lmKG1yKHRoaXMuYmFzZUNzdFZpc2l0b3JXaXRoRGVmYXVsdHNDb25zdHJ1Y3Rvcikpe2xldCBlPWFsZSh0aGlzLmNsYXNzTmFtZSx6cih0aGlzLmdhc3RQcm9kdWN0aW9uc0NhY2hlKSx0aGlzLmdldEJhc2VDc3RWaXNpdG9yQ29uc3RydWN0b3IoKSk7cmV0dXJuIHRoaXMuYmFzZUNzdFZpc2l0b3JXaXRoRGVmYXVsdHNDb25zdHJ1Y3Rvcj1lLGV9cmV0dXJuIHRoaXMuYmFzZUNzdFZpc2l0b3JXaXRoRGVmYXVsdHNDb25zdHJ1Y3Rvcn1nZXRMYXN0RXhwbGljaXRSdWxlU2hvcnROYW1lKCl7bGV0IGU9dGhpcy5SVUxFX1NUQUNLO3JldHVybiBlW2UubGVuZ3RoLTFdfWdldFByZXZpb3VzRXhwbGljaXRSdWxlU2hvcnROYW1lKCl7bGV0IGU9dGhpcy5SVUxFX1NUQUNLO3JldHVybiBlW2UubGVuZ3RoLTJdfWdldExhc3RFeHBsaWNpdFJ1bGVPY2N1cnJlbmNlSW5kZXgoKXtsZXQgZT10aGlzLlJVTEVfT0NDVVJSRU5DRV9TVEFDSztyZXR1cm4gZVtlLmxlbmd0aC0xXX19fSk7dmFyIHBFLGxsZT1OKCgpPT57InVzZSBzdHJpY3QiO1VzKCk7cEU9Y2xhc3N7c3RhdGlje28odGhpcywiTGV4ZXJBZGFwdGVyIil9aW5pdExleGVyQWRhcHRlcigpe3RoaXMudG9rVmVjdG9yPVtdLHRoaXMudG9rVmVjdG9yTGVuZ3RoPTAsdGhpcy5jdXJySWR4PS0xfXNldCBpbnB1dChlKXtpZih0aGlzLnNlbGZBbmFseXNpc0RvbmUhPT0hMCl0aHJvdyBFcnJvcigiTWlzc2luZyA8cGVyZm9ybVNlbGZBbmFseXNpcz4gaW52b2NhdGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBQYXJzZXIncyBjb25zdHJ1Y3Rvci4iKTt0aGlzLnJlc2V0KCksdGhpcy50b2tWZWN0b3I9ZSx0aGlzLnRva1ZlY3Rvckxlbmd0aD1lLmxlbmd0aH1nZXQgaW5wdXQoKXtyZXR1cm4gdGhpcy50b2tWZWN0b3J9U0tJUF9UT0tFTigpe3JldHVybiB0aGlzLmN1cnJJZHg8PXRoaXMudG9rVmVjdG9yLmxlbmd0aC0yPyh0aGlzLmNvbnN1bWVUb2tlbigpLHRoaXMuTEEoMSkpOmkxfUxBKGUpe2xldCByPXRoaXMuY3VycklkeCtlO3JldHVybiByPDB8fHRoaXMudG9rVmVjdG9yTGVuZ3RoPD1yP2kxOnRoaXMudG9rVmVjdG9yW3JdfWNvbnN1bWVUb2tlbigpe3RoaXMuY3VycklkeCsrfWV4cG9ydExleGVyU3RhdGUoKXtyZXR1cm4gdGhpcy5jdXJySWR4fWltcG9ydExleGVyU3RhdGUoZSl7dGhpcy5jdXJySWR4PWV9cmVzZXRMZXhlclN0YXRlKCl7dGhpcy5jdXJySWR4PS0xfW1vdmVUb1Rlcm1pbmF0ZWRTdGF0ZSgpe3RoaXMuY3VycklkeD10aGlzLnRva1ZlY3Rvci5sZW5ndGgtMX1nZXRMZXhlclBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuZXhwb3J0TGV4ZXJTdGF0ZSgpfX19KTt2YXIgbUUsY2xlPU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTtuMSgpO1VzKCk7UWcoKTt3eCgpO2ZzKCk7bUU9Y2xhc3N7c3RhdGlje28odGhpcywiUmVjb2duaXplckFwaSIpfUFDVElPTihlKXtyZXR1cm4gZS5jYWxsKHRoaXMpfWNvbnN1bWUoZSxyLG4pe3JldHVybiB0aGlzLmNvbnN1bWVJbnRlcm5hbChyLGUsbil9c3VicnVsZShlLHIsbil7cmV0dXJuIHRoaXMuc3VicnVsZUludGVybmFsKHIsZSxuKX1vcHRpb24oZSxyKXtyZXR1cm4gdGhpcy5vcHRpb25JbnRlcm5hbChyLGUpfW9yKGUscil7cmV0dXJuIHRoaXMub3JJbnRlcm5hbChyLGUpfW1hbnkoZSxyKXtyZXR1cm4gdGhpcy5tYW55SW50ZXJuYWwoZSxyKX1hdExlYXN0T25lKGUscil7cmV0dXJuIHRoaXMuYXRMZWFzdE9uZUludGVybmFsKGUscil9Q09OU1VNRShlLHIpe3JldHVybiB0aGlzLmNvbnN1bWVJbnRlcm5hbChlLDAscil9Q09OU1VNRTEoZSxyKXtyZXR1cm4gdGhpcy5jb25zdW1lSW50ZXJuYWwoZSwxLHIpfUNPTlNVTUUyKGUscil7cmV0dXJuIHRoaXMuY29uc3VtZUludGVybmFsKGUsMixyKX1DT05TVU1FMyhlLHIpe3JldHVybiB0aGlzLmNvbnN1bWVJbnRlcm5hbChlLDMscil9Q09OU1VNRTQoZSxyKXtyZXR1cm4gdGhpcy5jb25zdW1lSW50ZXJuYWwoZSw0LHIpfUNPTlNVTUU1KGUscil7cmV0dXJuIHRoaXMuY29uc3VtZUludGVybmFsKGUsNSxyKX1DT05TVU1FNihlLHIpe3JldHVybiB0aGlzLmNvbnN1bWVJbnRlcm5hbChlLDYscil9Q09OU1VNRTcoZSxyKXtyZXR1cm4gdGhpcy5jb25zdW1lSW50ZXJuYWwoZSw3LHIpfUNPTlNVTUU4KGUscil7cmV0dXJuIHRoaXMuY29uc3VtZUludGVybmFsKGUsOCxyKX1DT05TVU1FOShlLHIpe3JldHVybiB0aGlzLmNvbnN1bWVJbnRlcm5hbChlLDkscil9U1VCUlVMRShlLHIpe3JldHVybiB0aGlzLnN1YnJ1bGVJbnRlcm5hbChlLDAscil9U1VCUlVMRTEoZSxyKXtyZXR1cm4gdGhpcy5zdWJydWxlSW50ZXJuYWwoZSwxLHIpfVNVQlJVTEUyKGUscil7cmV0dXJuIHRoaXMuc3VicnVsZUludGVybmFsKGUsMixyKX1TVUJSVUxFMyhlLHIpe3JldHVybiB0aGlzLnN1YnJ1bGVJbnRlcm5hbChlLDMscil9U1VCUlVMRTQoZSxyKXtyZXR1cm4gdGhpcy5zdWJydWxlSW50ZXJuYWwoZSw0LHIpfVNVQlJVTEU1KGUscil7cmV0dXJuIHRoaXMuc3VicnVsZUludGVybmFsKGUsNSxyKX1TVUJSVUxFNihlLHIpe3JldHVybiB0aGlzLnN1YnJ1bGVJbnRlcm5hbChlLDYscil9U1VCUlVMRTcoZSxyKXtyZXR1cm4gdGhpcy5zdWJydWxlSW50ZXJuYWwoZSw3LHIpfVNVQlJVTEU4KGUscil7cmV0dXJuIHRoaXMuc3VicnVsZUludGVybmFsKGUsOCxyKX1TVUJSVUxFOShlLHIpe3JldHVybiB0aGlzLnN1YnJ1bGVJbnRlcm5hbChlLDkscil9T1BUSU9OKGUpe3JldHVybiB0aGlzLm9wdGlvbkludGVybmFsKGUsMCl9T1BUSU9OMShlKXtyZXR1cm4gdGhpcy5vcHRpb25JbnRlcm5hbChlLDEpfU9QVElPTjIoZSl7cmV0dXJuIHRoaXMub3B0aW9uSW50ZXJuYWwoZSwyKX1PUFRJT04zKGUpe3JldHVybiB0aGlzLm9wdGlvbkludGVybmFsKGUsMyl9T1BUSU9ONChlKXtyZXR1cm4gdGhpcy5vcHRpb25JbnRlcm5hbChlLDQpfU9QVElPTjUoZSl7cmV0dXJuIHRoaXMub3B0aW9uSW50ZXJuYWwoZSw1KX1PUFRJT042KGUpe3JldHVybiB0aGlzLm9wdGlvbkludGVybmFsKGUsNil9T1BUSU9ONyhlKXtyZXR1cm4gdGhpcy5vcHRpb25JbnRlcm5hbChlLDcpfU9QVElPTjgoZSl7cmV0dXJuIHRoaXMub3B0aW9uSW50ZXJuYWwoZSw4KX1PUFRJT045KGUpe3JldHVybiB0aGlzLm9wdGlvbkludGVybmFsKGUsOSl9T1IoZSl7cmV0dXJuIHRoaXMub3JJbnRlcm5hbChlLDApfU9SMShlKXtyZXR1cm4gdGhpcy5vckludGVybmFsKGUsMSl9T1IyKGUpe3JldHVybiB0aGlzLm9ySW50ZXJuYWwoZSwyKX1PUjMoZSl7cmV0dXJuIHRoaXMub3JJbnRlcm5hbChlLDMpfU9SNChlKXtyZXR1cm4gdGhpcy5vckludGVybmFsKGUsNCl9T1I1KGUpe3JldHVybiB0aGlzLm9ySW50ZXJuYWwoZSw1KX1PUjYoZSl7cmV0dXJuIHRoaXMub3JJbnRlcm5hbChlLDYpfU9SNyhlKXtyZXR1cm4gdGhpcy5vckludGVybmFsKGUsNyl9T1I4KGUpe3JldHVybiB0aGlzLm9ySW50ZXJuYWwoZSw4KX1PUjkoZSl7cmV0dXJuIHRoaXMub3JJbnRlcm5hbChlLDkpfU1BTlkoZSl7dGhpcy5tYW55SW50ZXJuYWwoMCxlKX1NQU5ZMShlKXt0aGlzLm1hbnlJbnRlcm5hbCgxLGUpfU1BTlkyKGUpe3RoaXMubWFueUludGVybmFsKDIsZSl9TUFOWTMoZSl7dGhpcy5tYW55SW50ZXJuYWwoMyxlKX1NQU5ZNChlKXt0aGlzLm1hbnlJbnRlcm5hbCg0LGUpfU1BTlk1KGUpe3RoaXMubWFueUludGVybmFsKDUsZSl9TUFOWTYoZSl7dGhpcy5tYW55SW50ZXJuYWwoNixlKX1NQU5ZNyhlKXt0aGlzLm1hbnlJbnRlcm5hbCg3LGUpfU1BTlk4KGUpe3RoaXMubWFueUludGVybmFsKDgsZSl9TUFOWTkoZSl7dGhpcy5tYW55SW50ZXJuYWwoOSxlKX1NQU5ZX1NFUChlKXt0aGlzLm1hbnlTZXBGaXJzdEludGVybmFsKDAsZSl9TUFOWV9TRVAxKGUpe3RoaXMubWFueVNlcEZpcnN0SW50ZXJuYWwoMSxlKX1NQU5ZX1NFUDIoZSl7dGhpcy5tYW55U2VwRmlyc3RJbnRlcm5hbCgyLGUpfU1BTllfU0VQMyhlKXt0aGlzLm1hbnlTZXBGaXJzdEludGVybmFsKDMsZSl9TUFOWV9TRVA0KGUpe3RoaXMubWFueVNlcEZpcnN0SW50ZXJuYWwoNCxlKX1NQU5ZX1NFUDUoZSl7dGhpcy5tYW55U2VwRmlyc3RJbnRlcm5hbCg1LGUpfU1BTllfU0VQNihlKXt0aGlzLm1hbnlTZXBGaXJzdEludGVybmFsKDYsZSl9TUFOWV9TRVA3KGUpe3RoaXMubWFueVNlcEZpcnN0SW50ZXJuYWwoNyxlKX1NQU5ZX1NFUDgoZSl7dGhpcy5tYW55U2VwRmlyc3RJbnRlcm5hbCg4LGUpfU1BTllfU0VQOShlKXt0aGlzLm1hbnlTZXBGaXJzdEludGVybmFsKDksZSl9QVRfTEVBU1RfT05FKGUpe3RoaXMuYXRMZWFzdE9uZUludGVybmFsKDAsZSl9QVRfTEVBU1RfT05FMShlKXtyZXR1cm4gdGhpcy5hdExlYXN0T25lSW50ZXJuYWwoMSxlKX1BVF9MRUFTVF9PTkUyKGUpe3RoaXMuYXRMZWFzdE9uZUludGVybmFsKDIsZSl9QVRfTEVBU1RfT05FMyhlKXt0aGlzLmF0TGVhc3RPbmVJbnRlcm5hbCgzLGUpfUFUX0xFQVNUX09ORTQoZSl7dGhpcy5hdExlYXN0T25lSW50ZXJuYWwoNCxlKX1BVF9MRUFTVF9PTkU1KGUpe3RoaXMuYXRMZWFzdE9uZUludGVybmFsKDUsZSl9QVRfTEVBU1RfT05FNihlKXt0aGlzLmF0TGVhc3RPbmVJbnRlcm5hbCg2LGUpfUFUX0xFQVNUX09ORTcoZSl7dGhpcy5hdExlYXN0T25lSW50ZXJuYWwoNyxlKX1BVF9MRUFTVF9PTkU4KGUpe3RoaXMuYXRMZWFzdE9uZUludGVybmFsKDgsZSl9QVRfTEVBU1RfT05FOShlKXt0aGlzLmF0TGVhc3RPbmVJbnRlcm5hbCg5LGUpfUFUX0xFQVNUX09ORV9TRVAoZSl7dGhpcy5hdExlYXN0T25lU2VwRmlyc3RJbnRlcm5hbCgwLGUpfUFUX0xFQVNUX09ORV9TRVAxKGUpe3RoaXMuYXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWwoMSxlKX1BVF9MRUFTVF9PTkVfU0VQMihlKXt0aGlzLmF0TGVhc3RPbmVTZXBGaXJzdEludGVybmFsKDIsZSl9QVRfTEVBU1RfT05FX1NFUDMoZSl7dGhpcy5hdExlYXN0T25lU2VwRmlyc3RJbnRlcm5hbCgzLGUpfUFUX0xFQVNUX09ORV9TRVA0KGUpe3RoaXMuYXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWwoNCxlKX1BVF9MRUFTVF9PTkVfU0VQNShlKXt0aGlzLmF0TGVhc3RPbmVTZXBGaXJzdEludGVybmFsKDUsZSl9QVRfTEVBU1RfT05FX1NFUDYoZSl7dGhpcy5hdExlYXN0T25lU2VwRmlyc3RJbnRlcm5hbCg2LGUpfUFUX0xFQVNUX09ORV9TRVA3KGUpe3RoaXMuYXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWwoNyxlKX1BVF9MRUFTVF9PTkVfU0VQOChlKXt0aGlzLmF0TGVhc3RPbmVTZXBGaXJzdEludGVybmFsKDgsZSl9QVRfTEVBU1RfT05FX1NFUDkoZSl7dGhpcy5hdExlYXN0T25lU2VwRmlyc3RJbnRlcm5hbCg5LGUpfVJVTEUoZSxyLG49YTEpe2lmKFhuKHRoaXMuZGVmaW5lZFJ1bGVzTmFtZXMsZSkpe2xldCBzPXttZXNzYWdlOiRsLmJ1aWxkRHVwbGljYXRlUnVsZU5hbWVFcnJvcih7dG9wTGV2ZWxSdWxlOmUsZ3JhbW1hck5hbWU6dGhpcy5jbGFzc05hbWV9KSx0eXBlOlZpLkRVUExJQ0FURV9SVUxFX05BTUUscnVsZU5hbWU6ZX07dGhpcy5kZWZpbml0aW9uRXJyb3JzLnB1c2gocyl9dGhpcy5kZWZpbmVkUnVsZXNOYW1lcy5wdXNoKGUpO2xldCBpPXRoaXMuZGVmaW5lUnVsZShlLHIsbik7cmV0dXJuIHRoaXNbZV09aSxpfU9WRVJSSURFX1JVTEUoZSxyLG49YTEpe2xldCBpPUdvZShlLHRoaXMuZGVmaW5lZFJ1bGVzTmFtZXMsdGhpcy5jbGFzc05hbWUpO3RoaXMuZGVmaW5pdGlvbkVycm9ycz10aGlzLmRlZmluaXRpb25FcnJvcnMuY29uY2F0KGkpO2xldCBhPXRoaXMuZGVmaW5lUnVsZShlLHIsbik7cmV0dXJuIHRoaXNbZV09YSxhfUJBQ0tUUkFDSyhlLHIpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuaXNCYWNrVHJhY2tpbmdTdGFjay5wdXNoKDEpO2xldCBuPXRoaXMuc2F2ZVJlY29nU3RhdGUoKTt0cnl7cmV0dXJuIGUuYXBwbHkodGhpcyxyKSwhMH1jYXRjaChpKXtpZihwZihpKSlyZXR1cm4hMTt0aHJvdyBpfWZpbmFsbHl7dGhpcy5yZWxvYWRSZWNvZ1N0YXRlKG4pLHRoaXMuaXNCYWNrVHJhY2tpbmdTdGFjay5wb3AoKX19fWdldEdBc3RQcm9kdWN0aW9ucygpe3JldHVybiB0aGlzLmdhc3RQcm9kdWN0aW9uc0NhY2hlfWdldFNlcmlhbGl6ZWRHYXN0UHJvZHVjdGlvbnMoKXtyZXR1cm4gemsoYnIodGhpcy5nYXN0UHJvZHVjdGlvbnNDYWNoZSkpfX19KTt2YXIgZ0UsdWxlPU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTtvRSgpO24xKCk7dDEoKTt4eCgpO1VzKCk7RU0oKTticCgpO3hwKCk7Z0U9Y2xhc3N7c3RhdGlje28odGhpcywiUmVjb2duaXplckVuZ2luZSIpfWluaXRSZWNvZ25pemVyRW5naW5lKGUscil7aWYodGhpcy5jbGFzc05hbWU9dGhpcy5jb25zdHJ1Y3Rvci5uYW1lLHRoaXMuc2hvcnRSdWxlTmFtZVRvRnVsbD17fSx0aGlzLmZ1bGxSdWxlTmFtZVRvU2hvcnQ9e30sdGhpcy5ydWxlU2hvcnROYW1lSWR4PTI1Nix0aGlzLnRva2VuTWF0Y2hlcj1qZyx0aGlzLnN1YnJ1bGVJZHg9MCx0aGlzLmRlZmluZWRSdWxlc05hbWVzPVtdLHRoaXMudG9rZW5zTWFwPXt9LHRoaXMuaXNCYWNrVHJhY2tpbmdTdGFjaz1bXSx0aGlzLlJVTEVfU1RBQ0s9W10sdGhpcy5SVUxFX09DQ1VSUkVOQ0VfU1RBQ0s9W10sdGhpcy5nYXN0UHJvZHVjdGlvbnNDYWNoZT17fSxCdChyLCJzZXJpYWxpemVkR3JhbW1hciIpKXRocm93IEVycm9yKGBUaGUgUGFyc2VyJ3MgY29uZmlndXJhdGlvbiBjYW4gbm8gbG9uZ2VyIGNvbnRhaW4gYSA8c2VyaWFsaXplZEdyYW1tYXI+IHByb3BlcnR5LgoJU2VlOiBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9jaGFuZ2VzL0JSRUFLSU5HX0NIQU5HRVMuaHRtbCNfNi0wLTAKCUZvciBGdXJ0aGVyIGRldGFpbHMuYCk7aWYoUHQoZSkpe2lmKGhyKGUpKXRocm93IEVycm9yKGBBIFRva2VuIFZvY2FidWxhcnkgY2Fubm90IGJlIGVtcHR5LgoJTm90ZSB0aGF0IHRoZSBmaXJzdCBhcmd1bWVudCBmb3IgdGhlIHBhcnNlciBjb25zdHJ1Y3RvcgoJaXMgbm8gbG9uZ2VyIGEgVG9rZW4gdmVjdG9yIChzaW5jZSB2NC4wKS5gKTtpZih0eXBlb2YgZVswXS5zdGFydE9mZnNldD09Im51bWJlciIpdGhyb3cgRXJyb3IoYFRoZSBQYXJzZXIgY29uc3RydWN0b3Igbm8gbG9uZ2VyIGFjY2VwdHMgYSB0b2tlbiB2ZWN0b3IgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LgoJU2VlOiBodHRwczovL2NoZXZyb3RhaW4uaW8vZG9jcy9jaGFuZ2VzL0JSRUFLSU5HX0NIQU5HRVMuaHRtbCNfNC0wLTAKCUZvciBGdXJ0aGVyIGRldGFpbHMuYCl9aWYoUHQoZSkpdGhpcy50b2tlbnNNYXA9WHIoZSwoYSxzKT0+KGFbcy5uYW1lXT1zLGEpLHt9KTtlbHNlIGlmKEJ0KGUsIm1vZGVzIikmJlBhKHFyKGJyKGUubW9kZXMpKSx2b2UpKXtsZXQgYT1xcihicihlLm1vZGVzKSkscz1xbShhKTt0aGlzLnRva2Vuc01hcD1YcihzLChsLHUpPT4obFt1Lm5hbWVdPXUsbCkse30pfWVsc2UgaWYoYm4oZSkpdGhpcy50b2tlbnNNYXA9YW4oZSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIjx0b2tlbnNEaWN0aW9uYXJ5PiBhcmd1bWVudCBtdXN0IGJlIEFuIEFycmF5IG9mIFRva2VuIGNvbnN0cnVjdG9ycywgQSBkaWN0aW9uYXJ5IG9mIFRva2VuIGNvbnN0cnVjdG9ycyBvciBhbiBJTXVsdGlNb2RlTGV4ZXJEZWZpbml0aW9uIik7dGhpcy50b2tlbnNNYXAuRU9GPWZvO2xldCBuPUJ0KGUsIm1vZGVzIik/cXIoYnIoZS5tb2RlcykpOmJyKGUpLGk9UGEobixhPT5ocihhLmNhdGVnb3J5TWF0Y2hlcykpO3RoaXMudG9rZW5NYXRjaGVyPWk/amc6VnUsVXUoYnIodGhpcy50b2tlbnNNYXApKX1kZWZpbmVSdWxlKGUscixuKXtpZih0aGlzLnNlbGZBbmFseXNpc0RvbmUpdGhyb3cgRXJyb3IoYEdyYW1tYXIgcnVsZSA8JHtlfT4gbWF5IG5vdCBiZSBkZWZpbmVkIGFmdGVyIHRoZSAncGVyZm9ybVNlbGZBbmFseXNpcycgbWV0aG9kIGhhcyBiZWVuIGNhbGxlZCcKTWFrZSBzdXJlIHRoYXQgYWxsIGdyYW1tYXIgcnVsZSBkZWZpbml0aW9ucyBhcmUgZG9uZSBiZWZvcmUgJ3BlcmZvcm1TZWxmQW5hbHlzaXMnIGlzIGNhbGxlZC5gKTtsZXQgaT1CdChuLCJyZXN5bmNFbmFibGVkIik/bi5yZXN5bmNFbmFibGVkOmExLnJlc3luY0VuYWJsZWQsYT1CdChuLCJyZWNvdmVyeVZhbHVlRnVuYyIpP24ucmVjb3ZlcnlWYWx1ZUZ1bmM6YTEucmVjb3ZlcnlWYWx1ZUZ1bmMscz10aGlzLnJ1bGVTaG9ydE5hbWVJZHg8PDEyO3RoaXMucnVsZVNob3J0TmFtZUlkeCsrLHRoaXMuc2hvcnRSdWxlTmFtZVRvRnVsbFtzXT1lLHRoaXMuZnVsbFJ1bGVOYW1lVG9TaG9ydFtlXT1zO2xldCBsO3JldHVybiB0aGlzLm91dHB1dENzdD09PSEwP2w9byhmdW5jdGlvbiguLi5mKXt0cnl7dGhpcy5ydWxlSW52b2NhdGlvblN0YXRlVXBkYXRlKHMsZSx0aGlzLnN1YnJ1bGVJZHgpLHIuYXBwbHkodGhpcyxmKTtsZXQgZD10aGlzLkNTVF9TVEFDS1t0aGlzLkNTVF9TVEFDSy5sZW5ndGgtMV07cmV0dXJuIHRoaXMuY3N0UG9zdFJ1bGUoZCksZH1jYXRjaChkKXtyZXR1cm4gdGhpcy5pbnZva2VSdWxlQ2F0Y2goZCxpLGEpfWZpbmFsbHl7dGhpcy5ydWxlRmluYWxseVN0YXRlVXBkYXRlKCl9fSwiaW52b2tlUnVsZVdpdGhUcnkiKTpsPW8oZnVuY3Rpb24oLi4uZil7dHJ5e3JldHVybiB0aGlzLnJ1bGVJbnZvY2F0aW9uU3RhdGVVcGRhdGUocyxlLHRoaXMuc3VicnVsZUlkeCksci5hcHBseSh0aGlzLGYpfWNhdGNoKGQpe3JldHVybiB0aGlzLmludm9rZVJ1bGVDYXRjaChkLGksYSl9ZmluYWxseXt0aGlzLnJ1bGVGaW5hbGx5U3RhdGVVcGRhdGUoKX19LCJpbnZva2VSdWxlV2l0aFRyeUNzdCIpLE9iamVjdC5hc3NpZ24obCx7cnVsZU5hbWU6ZSxvcmlnaW5hbEdyYW1tYXJBY3Rpb246cn0pfWludm9rZVJ1bGVDYXRjaChlLHIsbil7bGV0IGk9dGhpcy5SVUxFX1NUQUNLLmxlbmd0aD09PTEsYT1yJiYhdGhpcy5pc0JhY2tUcmFja2luZygpJiZ0aGlzLnJlY292ZXJ5RW5hYmxlZDtpZihwZihlKSl7bGV0IHM9ZTtpZihhKXtsZXQgbD10aGlzLmZpbmRSZVN5bmNUb2tlblR5cGUoKTtpZih0aGlzLmlzSW5DdXJyZW50UnVsZVJlU3luY1NldChsKSlpZihzLnJlc3luY2VkVG9rZW5zPXRoaXMucmVTeW5jVG8obCksdGhpcy5vdXRwdXRDc3Qpe2xldCB1PXRoaXMuQ1NUX1NUQUNLW3RoaXMuQ1NUX1NUQUNLLmxlbmd0aC0xXTtyZXR1cm4gdS5yZWNvdmVyZWROb2RlPSEwLHV9ZWxzZSByZXR1cm4gbihlKTtlbHNle2lmKHRoaXMub3V0cHV0Q3N0KXtsZXQgdT10aGlzLkNTVF9TVEFDS1t0aGlzLkNTVF9TVEFDSy5sZW5ndGgtMV07dS5yZWNvdmVyZWROb2RlPSEwLHMucGFydGlhbENzdFJlc3VsdD11fXRocm93IHN9fWVsc2V7aWYoaSlyZXR1cm4gdGhpcy5tb3ZlVG9UZXJtaW5hdGVkU3RhdGUoKSxuKGUpO3Rocm93IHN9fWVsc2UgdGhyb3cgZX1vcHRpb25JbnRlcm5hbChlLHIpe2xldCBuPXRoaXMuZ2V0S2V5Rm9yQXV0b21hdGljTG9va2FoZWFkKDUxMixyKTtyZXR1cm4gdGhpcy5vcHRpb25JbnRlcm5hbExvZ2ljKGUscixuKX1vcHRpb25JbnRlcm5hbExvZ2ljKGUscixuKXtsZXQgaT10aGlzLmdldExhRnVuY0Zyb21DYWNoZShuKSxhO2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXthPWUuREVGO2xldCBzPWUuR0FURTtpZihzIT09dm9pZCAwKXtsZXQgbD1pO2k9bygoKT0+cy5jYWxsKHRoaXMpJiZsLmNhbGwodGhpcyksImxvb2tBaGVhZEZ1bmMiKX19ZWxzZSBhPWU7aWYoaS5jYWxsKHRoaXMpPT09ITApcmV0dXJuIGEuY2FsbCh0aGlzKX1hdExlYXN0T25lSW50ZXJuYWwoZSxyKXtsZXQgbj10aGlzLmdldEtleUZvckF1dG9tYXRpY0xvb2thaGVhZCgxMDI0LGUpO3JldHVybiB0aGlzLmF0TGVhc3RPbmVJbnRlcm5hbExvZ2ljKGUscixuKX1hdExlYXN0T25lSW50ZXJuYWxMb2dpYyhlLHIsbil7bGV0IGk9dGhpcy5nZXRMYUZ1bmNGcm9tQ2FjaGUobiksYTtpZih0eXBlb2YgciE9ImZ1bmN0aW9uIil7YT1yLkRFRjtsZXQgcz1yLkdBVEU7aWYocyE9PXZvaWQgMCl7bGV0IGw9aTtpPW8oKCk9PnMuY2FsbCh0aGlzKSYmbC5jYWxsKHRoaXMpLCJsb29rQWhlYWRGdW5jIil9fWVsc2UgYT1yO2lmKGkuY2FsbCh0aGlzKT09PSEwKXtsZXQgcz10aGlzLmRvU2luZ2xlUmVwZXRpdGlvbihhKTtmb3IoO2kuY2FsbCh0aGlzKT09PSEwJiZzPT09ITA7KXM9dGhpcy5kb1NpbmdsZVJlcGV0aXRpb24oYSl9ZWxzZSB0aHJvdyB0aGlzLnJhaXNlRWFybHlFeGl0RXhjZXB0aW9uKGUsUW4uUkVQRVRJVElPTl9NQU5EQVRPUlksci5FUlJfTVNHKTt0aGlzLmF0dGVtcHRJblJlcGV0aXRpb25SZWNvdmVyeSh0aGlzLmF0TGVhc3RPbmVJbnRlcm5hbCxbZSxyXSxpLDEwMjQsZSxaayl9YXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWwoZSxyKXtsZXQgbj10aGlzLmdldEtleUZvckF1dG9tYXRpY0xvb2thaGVhZCgxNTM2LGUpO3RoaXMuYXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWxMb2dpYyhlLHIsbil9YXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWxMb2dpYyhlLHIsbil7bGV0IGk9ci5ERUYsYT1yLlNFUDtpZih0aGlzLmdldExhRnVuY0Zyb21DYWNoZShuKS5jYWxsKHRoaXMpPT09ITApe2kuY2FsbCh0aGlzKTtsZXQgbD1vKCgpPT50aGlzLnRva2VuTWF0Y2hlcih0aGlzLkxBKDEpLGEpLCJzZXBhcmF0b3JMb29rQWhlYWRGdW5jIik7Zm9yKDt0aGlzLnRva2VuTWF0Y2hlcih0aGlzLkxBKDEpLGEpPT09ITA7KXRoaXMuQ09OU1VNRShhKSxpLmNhbGwodGhpcyk7dGhpcy5hdHRlbXB0SW5SZXBldGl0aW9uUmVjb3ZlcnkodGhpcy5yZXBldGl0aW9uU2VwU2Vjb25kSW50ZXJuYWwsW2UsYSxsLGksdnhdLGwsMTUzNixlLHZ4KX1lbHNlIHRocm93IHRoaXMucmFpc2VFYXJseUV4aXRFeGNlcHRpb24oZSxRbi5SRVBFVElUSU9OX01BTkRBVE9SWV9XSVRIX1NFUEFSQVRPUixyLkVSUl9NU0cpfW1hbnlJbnRlcm5hbChlLHIpe2xldCBuPXRoaXMuZ2V0S2V5Rm9yQXV0b21hdGljTG9va2FoZWFkKDc2OCxlKTtyZXR1cm4gdGhpcy5tYW55SW50ZXJuYWxMb2dpYyhlLHIsbil9bWFueUludGVybmFsTG9naWMoZSxyLG4pe2xldCBpPXRoaXMuZ2V0TGFGdW5jRnJvbUNhY2hlKG4pLGE7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpe2E9ci5ERUY7bGV0IGw9ci5HQVRFO2lmKGwhPT12b2lkIDApe2xldCB1PWk7aT1vKCgpPT5sLmNhbGwodGhpcykmJnUuY2FsbCh0aGlzKSwibG9va2FoZWFkRnVuY3Rpb24iKX19ZWxzZSBhPXI7bGV0IHM9ITA7Zm9yKDtpLmNhbGwodGhpcyk9PT0hMCYmcz09PSEwOylzPXRoaXMuZG9TaW5nbGVSZXBldGl0aW9uKGEpO3RoaXMuYXR0ZW1wdEluUmVwZXRpdGlvblJlY292ZXJ5KHRoaXMubWFueUludGVybmFsLFtlLHJdLGksNzY4LGUsUWsscyl9bWFueVNlcEZpcnN0SW50ZXJuYWwoZSxyKXtsZXQgbj10aGlzLmdldEtleUZvckF1dG9tYXRpY0xvb2thaGVhZCgxMjgwLGUpO3RoaXMubWFueVNlcEZpcnN0SW50ZXJuYWxMb2dpYyhlLHIsbil9bWFueVNlcEZpcnN0SW50ZXJuYWxMb2dpYyhlLHIsbil7bGV0IGk9ci5ERUYsYT1yLlNFUDtpZih0aGlzLmdldExhRnVuY0Zyb21DYWNoZShuKS5jYWxsKHRoaXMpPT09ITApe2kuY2FsbCh0aGlzKTtsZXQgbD1vKCgpPT50aGlzLnRva2VuTWF0Y2hlcih0aGlzLkxBKDEpLGEpLCJzZXBhcmF0b3JMb29rQWhlYWRGdW5jIik7Zm9yKDt0aGlzLnRva2VuTWF0Y2hlcih0aGlzLkxBKDEpLGEpPT09ITA7KXRoaXMuQ09OU1VNRShhKSxpLmNhbGwodGhpcyk7dGhpcy5hdHRlbXB0SW5SZXBldGl0aW9uUmVjb3ZlcnkodGhpcy5yZXBldGl0aW9uU2VwU2Vjb25kSW50ZXJuYWwsW2UsYSxsLGkseXhdLGwsMTI4MCxlLHl4KX19cmVwZXRpdGlvblNlcFNlY29uZEludGVybmFsKGUscixuLGksYSl7Zm9yKDtuKCk7KXRoaXMuQ09OU1VNRShyKSxpLmNhbGwodGhpcyk7dGhpcy5hdHRlbXB0SW5SZXBldGl0aW9uUmVjb3ZlcnkodGhpcy5yZXBldGl0aW9uU2VwU2Vjb25kSW50ZXJuYWwsW2UscixuLGksYV0sbiwxNTM2LGUsYSl9ZG9TaW5nbGVSZXBldGl0aW9uKGUpe2xldCByPXRoaXMuZ2V0TGV4ZXJQb3NpdGlvbigpO3JldHVybiBlLmNhbGwodGhpcyksdGhpcy5nZXRMZXhlclBvc2l0aW9uKCk+cn1vckludGVybmFsKGUscil7bGV0IG49dGhpcy5nZXRLZXlGb3JBdXRvbWF0aWNMb29rYWhlYWQoMjU2LHIpLGk9UHQoZSk/ZTplLkRFRixzPXRoaXMuZ2V0TGFGdW5jRnJvbUNhY2hlKG4pLmNhbGwodGhpcyxpKTtpZihzIT09dm9pZCAwKXJldHVybiBpW3NdLkFMVC5jYWxsKHRoaXMpO3RoaXMucmFpc2VOb0FsdEV4Y2VwdGlvbihyLGUuRVJSX01TRyl9cnVsZUZpbmFsbHlTdGF0ZVVwZGF0ZSgpe2lmKHRoaXMuUlVMRV9TVEFDSy5wb3AoKSx0aGlzLlJVTEVfT0NDVVJSRU5DRV9TVEFDSy5wb3AoKSx0aGlzLmNzdEZpbmFsbHlTdGF0ZVVwZGF0ZSgpLHRoaXMuUlVMRV9TVEFDSy5sZW5ndGg9PT0wJiZ0aGlzLmlzQXRFbmRPZklucHV0KCk9PT0hMSl7bGV0IGU9dGhpcy5MQSgxKSxyPXRoaXMuZXJyb3JNZXNzYWdlUHJvdmlkZXIuYnVpbGROb3RBbGxJbnB1dFBhcnNlZE1lc3NhZ2Uoe2ZpcnN0UmVkdW5kYW50OmUscnVsZU5hbWU6dGhpcy5nZXRDdXJyUnVsZUZ1bGxOYW1lKCl9KTt0aGlzLlNBVkVfRVJST1IobmV3IEV4KHIsZSkpfX1zdWJydWxlSW50ZXJuYWwoZSxyLG4pe2xldCBpO3RyeXtsZXQgYT1uIT09dm9pZCAwP24uQVJHUzp2b2lkIDA7cmV0dXJuIHRoaXMuc3VicnVsZUlkeD1yLGk9ZS5hcHBseSh0aGlzLGEpLHRoaXMuY3N0UG9zdE5vblRlcm1pbmFsKGksbiE9PXZvaWQgMCYmbi5MQUJFTCE9PXZvaWQgMD9uLkxBQkVMOmUucnVsZU5hbWUpLGl9Y2F0Y2goYSl7dGhyb3cgdGhpcy5zdWJydWxlSW50ZXJuYWxFcnJvcihhLG4sZS5ydWxlTmFtZSl9fXN1YnJ1bGVJbnRlcm5hbEVycm9yKGUscixuKXt0aHJvdyBwZihlKSYmZS5wYXJ0aWFsQ3N0UmVzdWx0IT09dm9pZCAwJiYodGhpcy5jc3RQb3N0Tm9uVGVybWluYWwoZS5wYXJ0aWFsQ3N0UmVzdWx0LHIhPT12b2lkIDAmJnIuTEFCRUwhPT12b2lkIDA/ci5MQUJFTDpuKSxkZWxldGUgZS5wYXJ0aWFsQ3N0UmVzdWx0KSxlfWNvbnN1bWVJbnRlcm5hbChlLHIsbil7bGV0IGk7dHJ5e2xldCBhPXRoaXMuTEEoMSk7dGhpcy50b2tlbk1hdGNoZXIoYSxlKT09PSEwPyh0aGlzLmNvbnN1bWVUb2tlbigpLGk9YSk6dGhpcy5jb25zdW1lSW50ZXJuYWxFcnJvcihlLGEsbil9Y2F0Y2goYSl7aT10aGlzLmNvbnN1bWVJbnRlcm5hbFJlY292ZXJ5KGUscixhKX1yZXR1cm4gdGhpcy5jc3RQb3N0VGVybWluYWwobiE9PXZvaWQgMCYmbi5MQUJFTCE9PXZvaWQgMD9uLkxBQkVMOmUubmFtZSxpKSxpfWNvbnN1bWVJbnRlcm5hbEVycm9yKGUscixuKXtsZXQgaSxhPXRoaXMuTEEoMCk7dGhyb3cgbiE9PXZvaWQgMCYmbi5FUlJfTVNHP2k9bi5FUlJfTVNHOmk9dGhpcy5lcnJvck1lc3NhZ2VQcm92aWRlci5idWlsZE1pc21hdGNoVG9rZW5NZXNzYWdlKHtleHBlY3RlZDplLGFjdHVhbDpyLHByZXZpb3VzOmEscnVsZU5hbWU6dGhpcy5nZXRDdXJyUnVsZUZ1bGxOYW1lKCl9KSx0aGlzLlNBVkVfRVJST1IobmV3IFRwKGkscixhKSl9Y29uc3VtZUludGVybmFsUmVjb3ZlcnkoZSxyLG4pe2lmKHRoaXMucmVjb3ZlcnlFbmFibGVkJiZuLm5hbWU9PT0iTWlzbWF0Y2hlZFRva2VuRXhjZXB0aW9uIiYmIXRoaXMuaXNCYWNrVHJhY2tpbmcoKSl7bGV0IGk9dGhpcy5nZXRGb2xsb3dzRm9ySW5SdWxlUmVjb3ZlcnkoZSxyKTt0cnl7cmV0dXJuIHRoaXMudHJ5SW5SdWxlUmVjb3ZlcnkoZSxpKX1jYXRjaChhKXt0aHJvdyBhLm5hbWU9PT1rTT9uOmF9fWVsc2UgdGhyb3cgbn1zYXZlUmVjb2dTdGF0ZSgpe2xldCBlPXRoaXMuZXJyb3JzLHI9YW4odGhpcy5SVUxFX1NUQUNLKTtyZXR1cm57ZXJyb3JzOmUsbGV4ZXJTdGF0ZTp0aGlzLmV4cG9ydExleGVyU3RhdGUoKSxSVUxFX1NUQUNLOnIsQ1NUX1NUQUNLOnRoaXMuQ1NUX1NUQUNLfX1yZWxvYWRSZWNvZ1N0YXRlKGUpe3RoaXMuZXJyb3JzPWUuZXJyb3JzLHRoaXMuaW1wb3J0TGV4ZXJTdGF0ZShlLmxleGVyU3RhdGUpLHRoaXMuUlVMRV9TVEFDSz1lLlJVTEVfU1RBQ0t9cnVsZUludm9jYXRpb25TdGF0ZVVwZGF0ZShlLHIsbil7dGhpcy5SVUxFX09DQ1VSUkVOQ0VfU1RBQ0sucHVzaChuKSx0aGlzLlJVTEVfU1RBQ0sucHVzaChlKSx0aGlzLmNzdEludm9jYXRpb25TdGF0ZVVwZGF0ZShyKX1pc0JhY2tUcmFja2luZygpe3JldHVybiB0aGlzLmlzQmFja1RyYWNraW5nU3RhY2subGVuZ3RoIT09MH1nZXRDdXJyUnVsZUZ1bGxOYW1lKCl7bGV0IGU9dGhpcy5nZXRMYXN0RXhwbGljaXRSdWxlU2hvcnROYW1lKCk7cmV0dXJuIHRoaXMuc2hvcnRSdWxlTmFtZVRvRnVsbFtlXX1zaG9ydFJ1bGVOYW1lVG9GdWxsTmFtZShlKXtyZXR1cm4gdGhpcy5zaG9ydFJ1bGVOYW1lVG9GdWxsW2VdfWlzQXRFbmRPZklucHV0KCl7cmV0dXJuIHRoaXMudG9rZW5NYXRjaGVyKHRoaXMuTEEoMSksZm8pfXJlc2V0KCl7dGhpcy5yZXNldExleGVyU3RhdGUoKSx0aGlzLnN1YnJ1bGVJZHg9MCx0aGlzLmlzQmFja1RyYWNraW5nU3RhY2s9W10sdGhpcy5lcnJvcnM9W10sdGhpcy5SVUxFX1NUQUNLPVtdLHRoaXMuQ1NUX1NUQUNLPVtdLHRoaXMuUlVMRV9PQ0NVUlJFTkNFX1NUQUNLPVtdfX19KTt2YXIgeUUsaGxlPU4oKCk9PnsidXNlIHN0cmljdCI7bjEoKTtxdCgpO3QxKCk7VXMoKTt5RT1jbGFzc3tzdGF0aWN7byh0aGlzLCJFcnJvckhhbmRsZXIiKX1pbml0RXJyb3JIYW5kbGVyKGUpe3RoaXMuX2Vycm9ycz1bXSx0aGlzLmVycm9yTWVzc2FnZVByb3ZpZGVyPUJ0KGUsImVycm9yTWVzc2FnZVByb3ZpZGVyIik/ZS5lcnJvck1lc3NhZ2VQcm92aWRlcjpkcy5lcnJvck1lc3NhZ2VQcm92aWRlcn1TQVZFX0VSUk9SKGUpe2lmKHBmKGUpKXJldHVybiBlLmNvbnRleHQ9e3J1bGVTdGFjazp0aGlzLmdldEh1bWFuUmVhZGFibGVSdWxlU3RhY2soKSxydWxlT2NjdXJyZW5jZVN0YWNrOmFuKHRoaXMuUlVMRV9PQ0NVUlJFTkNFX1NUQUNLKX0sdGhpcy5fZXJyb3JzLnB1c2goZSksZTt0aHJvdyBFcnJvcigiVHJ5aW5nIHRvIHNhdmUgYW4gRXJyb3Igd2hpY2ggaXMgbm90IGEgUmVjb2duaXRpb25FeGNlcHRpb24iKX1nZXQgZXJyb3JzKCl7cmV0dXJuIGFuKHRoaXMuX2Vycm9ycyl9c2V0IGVycm9ycyhlKXt0aGlzLl9lcnJvcnM9ZX1yYWlzZUVhcmx5RXhpdEV4Y2VwdGlvbihlLHIsbil7bGV0IGk9dGhpcy5nZXRDdXJyUnVsZUZ1bGxOYW1lKCksYT10aGlzLmdldEdBc3RQcm9kdWN0aW9ucygpW2ldLGw9ZTEoZSxhLHIsdGhpcy5tYXhMb29rYWhlYWQpWzBdLHU9W107Zm9yKGxldCBmPTE7Zjw9dGhpcy5tYXhMb29rYWhlYWQ7ZisrKXUucHVzaCh0aGlzLkxBKGYpKTtsZXQgaD10aGlzLmVycm9yTWVzc2FnZVByb3ZpZGVyLmJ1aWxkRWFybHlFeGl0TWVzc2FnZSh7ZXhwZWN0ZWRJdGVyYXRpb25QYXRoczpsLGFjdHVhbDp1LHByZXZpb3VzOnRoaXMuTEEoMCksY3VzdG9tVXNlckRlc2NyaXB0aW9uOm4scnVsZU5hbWU6aX0pO3Rocm93IHRoaXMuU0FWRV9FUlJPUihuZXcgU3goaCx0aGlzLkxBKDEpLHRoaXMuTEEoMCkpKX1yYWlzZU5vQWx0RXhjZXB0aW9uKGUscil7bGV0IG49dGhpcy5nZXRDdXJyUnVsZUZ1bGxOYW1lKCksaT10aGlzLmdldEdBc3RQcm9kdWN0aW9ucygpW25dLGE9SmcoZSxpLHRoaXMubWF4TG9va2FoZWFkKSxzPVtdO2ZvcihsZXQgaD0xO2g8PXRoaXMubWF4TG9va2FoZWFkO2grKylzLnB1c2godGhpcy5MQShoKSk7bGV0IGw9dGhpcy5MQSgwKSx1PXRoaXMuZXJyb3JNZXNzYWdlUHJvdmlkZXIuYnVpbGROb1ZpYWJsZUFsdE1lc3NhZ2Uoe2V4cGVjdGVkUGF0aHNQZXJBbHQ6YSxhY3R1YWw6cyxwcmV2aW91czpsLGN1c3RvbVVzZXJEZXNjcmlwdGlvbjpyLHJ1bGVOYW1lOnRoaXMuZ2V0Q3VyclJ1bGVGdWxsTmFtZSgpfSk7dGhyb3cgdGhpcy5TQVZFX0VSUk9SKG5ldyBreCh1LHRoaXMuTEEoMSksbCkpfX19KTt2YXIgdkUsZmxlPU4oKCk9PnsidXNlIHN0cmljdCI7eHgoKTtxdCgpO3ZFPWNsYXNze3N0YXRpY3tvKHRoaXMsIkNvbnRlbnRBc3Npc3QiKX1pbml0Q29udGVudEFzc2lzdCgpe31jb21wdXRlQ29udGVudEFzc2lzdChlLHIpe2xldCBuPXRoaXMuZ2FzdFByb2R1Y3Rpb25zQ2FjaGVbZV07aWYobXIobikpdGhyb3cgRXJyb3IoYFJ1bGUgLT4ke2V9PC0gZG9lcyBub3QgZXhpc3QgaW4gdGhpcyBncmFtbWFyLmApO3JldHVybiBlRShbbl0scix0aGlzLnRva2VuTWF0Y2hlcix0aGlzLm1heExvb2thaGVhZCl9Z2V0TmV4dFBvc3NpYmxlVG9rZW5UeXBlcyhlKXtsZXQgcj1pYShlLnJ1bGVTdGFjayksaT10aGlzLmdldEdBc3RQcm9kdWN0aW9ucygpW3JdO3JldHVybiBuZXcgS2soaSxlKS5zdGFydFdhbGtpbmcoKX19fSk7ZnVuY3Rpb24gQXgodCxlLHIsbj0hMSl7YkUocik7bGV0IGk9bWEodGhpcy5yZWNvcmRpbmdQcm9kU3RhY2spLGE9QWkoZSk/ZTplLkRFRixzPW5ldyB0KHtkZWZpbml0aW9uOltdLGlkeDpyfSk7cmV0dXJuIG4mJihzLnNlcGFyYXRvcj1lLlNFUCksQnQoZSwiTUFYX0xPT0tBSEVBRCIpJiYocy5tYXhMb29rYWhlYWQ9ZS5NQVhfTE9PS0FIRUFEKSx0aGlzLnJlY29yZGluZ1Byb2RTdGFjay5wdXNoKHMpLGEuY2FsbCh0aGlzKSxpLmRlZmluaXRpb24ucHVzaChzKSx0aGlzLnJlY29yZGluZ1Byb2RTdGFjay5wb3AoKSxURX1mdW5jdGlvbiB6RmUodCxlKXtiRShlKTtsZXQgcj1tYSh0aGlzLnJlY29yZGluZ1Byb2RTdGFjayksbj1QdCh0KT09PSExLGk9bj09PSExP3Q6dC5ERUYsYT1uZXcgd24oe2RlZmluaXRpb246W10saWR4OmUsaWdub3JlQW1iaWd1aXRpZXM6biYmdC5JR05PUkVfQU1CSUdVSVRJRVM9PT0hMH0pO0J0KHQsIk1BWF9MT09LQUhFQUQiKSYmKGEubWF4TG9va2FoZWFkPXQuTUFYX0xPT0tBSEVBRCk7bGV0IHM9QjIoaSxsPT5BaShsLkdBVEUpKTtyZXR1cm4gYS5oYXNQcmVkaWNhdGVzPXMsci5kZWZpbml0aW9uLnB1c2goYSksQWUoaSxsPT57bGV0IHU9bmV3IERuKHtkZWZpbml0aW9uOltdfSk7YS5kZWZpbml0aW9uLnB1c2godSksQnQobCwiSUdOT1JFX0FNQklHVUlUSUVTIik/dS5pZ25vcmVBbWJpZ3VpdGllcz1sLklHTk9SRV9BTUJJR1VJVElFUzpCdChsLCJHQVRFIikmJih1Lmlnbm9yZUFtYmlndWl0aWVzPSEwKSx0aGlzLnJlY29yZGluZ1Byb2RTdGFjay5wdXNoKHUpLGwuQUxULmNhbGwodGhpcyksdGhpcy5yZWNvcmRpbmdQcm9kU3RhY2sucG9wKCl9KSxURX1mdW5jdGlvbiBtbGUodCl7cmV0dXJuIHQ9PT0wPyIiOmAke3R9YH1mdW5jdGlvbiBiRSh0KXtpZih0PDB8fHQ+cGxlKXtsZXQgZT1uZXcgRXJyb3IoYEludmFsaWQgRFNMIE1ldGhvZCBpZHggdmFsdWU6IDwke3R9PgoJSWR4IHZhbHVlIG11c3QgYmUgYSBub25lIG5lZ2F0aXZlIHZhbHVlIHNtYWxsZXIgdGhhbiAke3BsZSsxfWApO3Rocm93IGUuS05PV05fUkVDT1JERVJfRVJST1I9ITAsZX19dmFyIFRFLGRsZSxwbGUsZ2xlLHlsZSwkRmUseEUsdmxlPU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTtmcygpO3B4KCk7eHAoKTticCgpO1VzKCk7b0UoKTtURT17ZGVzY3JpcHRpb246IlRoaXMgT2JqZWN0IGluZGljYXRlcyB0aGUgUGFyc2VyIGlzIGR1cmluZyBSZWNvcmRpbmcgUGhhc2UifTtPYmplY3QuZnJlZXplKFRFKTtkbGU9ITAscGxlPU1hdGgucG93KDIsOCktMSxnbGU9ZGYoe25hbWU6IlJFQ09SRElOR19QSEFTRV9UT0tFTiIscGF0dGVybjpLbi5OQX0pO1V1KFtnbGVdKTt5bGU9V3UoZ2xlLGBUaGlzIElUb2tlbiBpbmRpY2F0ZXMgdGhlIFBhcnNlciBpcyBpbiBSZWNvcmRpbmcgUGhhc2UKCVNlZTogaHR0cHM6Ly9jaGV2cm90YWluLmlvL2RvY3MvZ3VpZGUvaW50ZXJuYWxzLmh0bWwjZ3JhbW1hci1yZWNvcmRpbmcgZm9yIGRldGFpbHNgLC0xLC0xLC0xLC0xLC0xLC0xKTtPYmplY3QuZnJlZXplKHlsZSk7JEZlPXtuYW1lOmBUaGlzIENTVE5vZGUgaW5kaWNhdGVzIHRoZSBQYXJzZXIgaXMgaW4gUmVjb3JkaW5nIFBoYXNlCglTZWU6IGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL2ludGVybmFscy5odG1sI2dyYW1tYXItcmVjb3JkaW5nIGZvciBkZXRhaWxzYCxjaGlsZHJlbjp7fX0seEU9Y2xhc3N7c3RhdGlje28odGhpcywiR2FzdFJlY29yZGVyIil9aW5pdEdhc3RSZWNvcmRlcihlKXt0aGlzLnJlY29yZGluZ1Byb2RTdGFjaz1bXSx0aGlzLlJFQ09SRElOR19QSEFTRT0hMX1lbmFibGVSZWNvcmRpbmcoKXt0aGlzLlJFQ09SRElOR19QSEFTRT0hMCx0aGlzLlRSQUNFX0lOSVQoIkVuYWJsZSBSZWNvcmRpbmciLCgpPT57Zm9yKGxldCBlPTA7ZTwxMDtlKyspe2xldCByPWU+MD9lOiIiO3RoaXNbYENPTlNVTUUke3J9YF09ZnVuY3Rpb24obixpKXtyZXR1cm4gdGhpcy5jb25zdW1lSW50ZXJuYWxSZWNvcmQobixlLGkpfSx0aGlzW2BTVUJSVUxFJHtyfWBdPWZ1bmN0aW9uKG4saSl7cmV0dXJuIHRoaXMuc3VicnVsZUludGVybmFsUmVjb3JkKG4sZSxpKX0sdGhpc1tgT1BUSU9OJHtyfWBdPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLm9wdGlvbkludGVybmFsUmVjb3JkKG4sZSl9LHRoaXNbYE9SJHtyfWBdPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLm9ySW50ZXJuYWxSZWNvcmQobixlKX0sdGhpc1tgTUFOWSR7cn1gXT1mdW5jdGlvbihuKXt0aGlzLm1hbnlJbnRlcm5hbFJlY29yZChlLG4pfSx0aGlzW2BNQU5ZX1NFUCR7cn1gXT1mdW5jdGlvbihuKXt0aGlzLm1hbnlTZXBGaXJzdEludGVybmFsUmVjb3JkKGUsbil9LHRoaXNbYEFUX0xFQVNUX09ORSR7cn1gXT1mdW5jdGlvbihuKXt0aGlzLmF0TGVhc3RPbmVJbnRlcm5hbFJlY29yZChlLG4pfSx0aGlzW2BBVF9MRUFTVF9PTkVfU0VQJHtyfWBdPWZ1bmN0aW9uKG4pe3RoaXMuYXRMZWFzdE9uZVNlcEZpcnN0SW50ZXJuYWxSZWNvcmQoZSxuKX19dGhpcy5jb25zdW1lPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdGhpcy5jb25zdW1lSW50ZXJuYWxSZWNvcmQocixlLG4pfSx0aGlzLnN1YnJ1bGU9ZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0aGlzLnN1YnJ1bGVJbnRlcm5hbFJlY29yZChyLGUsbil9LHRoaXMub3B0aW9uPWZ1bmN0aW9uKGUscil7cmV0dXJuIHRoaXMub3B0aW9uSW50ZXJuYWxSZWNvcmQocixlKX0sdGhpcy5vcj1mdW5jdGlvbihlLHIpe3JldHVybiB0aGlzLm9ySW50ZXJuYWxSZWNvcmQocixlKX0sdGhpcy5tYW55PWZ1bmN0aW9uKGUscil7dGhpcy5tYW55SW50ZXJuYWxSZWNvcmQoZSxyKX0sdGhpcy5hdExlYXN0T25lPWZ1bmN0aW9uKGUscil7dGhpcy5hdExlYXN0T25lSW50ZXJuYWxSZWNvcmQoZSxyKX0sdGhpcy5BQ1RJT049dGhpcy5BQ1RJT05fUkVDT1JELHRoaXMuQkFDS1RSQUNLPXRoaXMuQkFDS1RSQUNLX1JFQ09SRCx0aGlzLkxBPXRoaXMuTEFfUkVDT1JEfSl9ZGlzYWJsZVJlY29yZGluZygpe3RoaXMuUkVDT1JESU5HX1BIQVNFPSExLHRoaXMuVFJBQ0VfSU5JVCgiRGVsZXRpbmcgUmVjb3JkaW5nIG1ldGhvZHMiLCgpPT57bGV0IGU9dGhpcztmb3IobGV0IHI9MDtyPDEwO3IrKyl7bGV0IG49cj4wP3I6IiI7ZGVsZXRlIGVbYENPTlNVTUUke259YF0sZGVsZXRlIGVbYFNVQlJVTEUke259YF0sZGVsZXRlIGVbYE9QVElPTiR7bn1gXSxkZWxldGUgZVtgT1Ike259YF0sZGVsZXRlIGVbYE1BTlkke259YF0sZGVsZXRlIGVbYE1BTllfU0VQJHtufWBdLGRlbGV0ZSBlW2BBVF9MRUFTVF9PTkUke259YF0sZGVsZXRlIGVbYEFUX0xFQVNUX09ORV9TRVAke259YF19ZGVsZXRlIGUuY29uc3VtZSxkZWxldGUgZS5zdWJydWxlLGRlbGV0ZSBlLm9wdGlvbixkZWxldGUgZS5vcixkZWxldGUgZS5tYW55LGRlbGV0ZSBlLmF0TGVhc3RPbmUsZGVsZXRlIGUuQUNUSU9OLGRlbGV0ZSBlLkJBQ0tUUkFDSyxkZWxldGUgZS5MQX0pfUFDVElPTl9SRUNPUkQoZSl7fUJBQ0tUUkFDS19SRUNPUkQoZSxyKXtyZXR1cm4oKT0+ITB9TEFfUkVDT1JEKGUpe3JldHVybiBpMX10b3BMZXZlbFJ1bGVSZWNvcmQoZSxyKXt0cnl7bGV0IG49bmV3IHVzKHtkZWZpbml0aW9uOltdLG5hbWU6ZX0pO3JldHVybiBuLm5hbWU9ZSx0aGlzLnJlY29yZGluZ1Byb2RTdGFjay5wdXNoKG4pLHIuY2FsbCh0aGlzKSx0aGlzLnJlY29yZGluZ1Byb2RTdGFjay5wb3AoKSxufWNhdGNoKG4pe2lmKG4uS05PV05fUkVDT1JERVJfRVJST1IhPT0hMCl0cnl7bi5tZXNzYWdlPW4ubWVzc2FnZStgCgkgVGhpcyBlcnJvciB3YXMgdGhyb3duIGR1cmluZyB0aGUgImdyYW1tYXIgcmVjb3JkaW5nIHBoYXNlIiBGb3IgbW9yZSBpbmZvIHNlZToKCWh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL2ludGVybmFscy5odG1sI2dyYW1tYXItcmVjb3JkaW5nYH1jYXRjaHt0aHJvdyBufXRocm93IG59fW9wdGlvbkludGVybmFsUmVjb3JkKGUscil7cmV0dXJuIEF4LmNhbGwodGhpcyxsbixlLHIpfWF0TGVhc3RPbmVJbnRlcm5hbFJlY29yZChlLHIpe0F4LmNhbGwodGhpcyxMbixyLGUpfWF0TGVhc3RPbmVTZXBGaXJzdEludGVybmFsUmVjb3JkKGUscil7QXguY2FsbCh0aGlzLFJuLHIsZSxkbGUpfW1hbnlJbnRlcm5hbFJlY29yZChlLHIpe0F4LmNhbGwodGhpcyxQcixyLGUpfW1hbnlTZXBGaXJzdEludGVybmFsUmVjb3JkKGUscil7QXguY2FsbCh0aGlzLFRuLHIsZSxkbGUpfW9ySW50ZXJuYWxSZWNvcmQoZSxyKXtyZXR1cm4gekZlLmNhbGwodGhpcyxlLHIpfXN1YnJ1bGVJbnRlcm5hbFJlY29yZChlLHIsbil7aWYoYkUociksIWV8fEJ0KGUsInJ1bGVOYW1lIik9PT0hMSl7bGV0IGw9bmV3IEVycm9yKGA8U1VCUlVMRSR7bWxlKHIpfT4gYXJndW1lbnQgaXMgaW52YWxpZCBleHBlY3RpbmcgYSBQYXJzZXIgbWV0aG9kIHJlZmVyZW5jZSBidXQgZ290OiA8JHtKU09OLnN0cmluZ2lmeShlKX0+CiBpbnNpZGUgdG9wIGxldmVsIHJ1bGU6IDwke3RoaXMucmVjb3JkaW5nUHJvZFN0YWNrWzBdLm5hbWV9PmApO3Rocm93IGwuS05PV05fUkVDT1JERVJfRVJST1I9ITAsbH1sZXQgaT1tYSh0aGlzLnJlY29yZGluZ1Byb2RTdGFjayksYT1lLnJ1bGVOYW1lLHM9bmV3IG9uKHtpZHg6cixub25UZXJtaW5hbE5hbWU6YSxsYWJlbDpuPy5MQUJFTCxyZWZlcmVuY2VkUnVsZTp2b2lkIDB9KTtyZXR1cm4gaS5kZWZpbml0aW9uLnB1c2gocyksdGhpcy5vdXRwdXRDc3Q/JEZlOlRFfWNvbnN1bWVJbnRlcm5hbFJlY29yZChlLHIsbil7aWYoYkUociksIWhNKGUpKXtsZXQgcz1uZXcgRXJyb3IoYDxDT05TVU1FJHttbGUocil9PiBhcmd1bWVudCBpcyBpbnZhbGlkIGV4cGVjdGluZyBhIFRva2VuVHlwZSByZWZlcmVuY2UgYnV0IGdvdDogPCR7SlNPTi5zdHJpbmdpZnkoZSl9PgogaW5zaWRlIHRvcCBsZXZlbCBydWxlOiA8JHt0aGlzLnJlY29yZGluZ1Byb2RTdGFja1swXS5uYW1lfT5gKTt0aHJvdyBzLktOT1dOX1JFQ09SREVSX0VSUk9SPSEwLHN9bGV0IGk9bWEodGhpcy5yZWNvcmRpbmdQcm9kU3RhY2spLGE9bmV3IEVyKHtpZHg6cix0ZXJtaW5hbFR5cGU6ZSxsYWJlbDpuPy5MQUJFTH0pO3JldHVybiBpLmRlZmluaXRpb24ucHVzaChhKSx5bGV9fTtvKEF4LCJyZWNvcmRQcm9kIik7byh6RmUsInJlY29yZE9yUHJvZCIpO28obWxlLCJnZXRJZHhTdWZmaXgiKTtvKGJFLCJhc3NlcnRNZXRob2RJZHhJc1ZhbGlkIil9KTt2YXIgd0UseGxlPU4oKCk9PnsidXNlIHN0cmljdCI7cXQoKTtIZygpO1VzKCk7d0U9Y2xhc3N7c3RhdGlje28odGhpcywiUGVyZm9ybWFuY2VUcmFjZXIiKX1pbml0UGVyZm9ybWFuY2VUcmFjZXIoZSl7aWYoQnQoZSwidHJhY2VJbml0UGVyZiIpKXtsZXQgcj1lLnRyYWNlSW5pdFBlcmYsbj10eXBlb2Ygcj09Im51bWJlciI7dGhpcy50cmFjZUluaXRNYXhJZGVudD1uP3I6MS8wLHRoaXMudHJhY2VJbml0UGVyZj1uP3I+MDpyfWVsc2UgdGhpcy50cmFjZUluaXRNYXhJZGVudD0wLHRoaXMudHJhY2VJbml0UGVyZj1kcy50cmFjZUluaXRQZXJmO3RoaXMudHJhY2VJbml0SW5kZW50PS0xfVRSQUNFX0lOSVQoZSxyKXtpZih0aGlzLnRyYWNlSW5pdFBlcmY9PT0hMCl7dGhpcy50cmFjZUluaXRJbmRlbnQrKztsZXQgbj1uZXcgQXJyYXkodGhpcy50cmFjZUluaXRJbmRlbnQrMSkuam9pbigiCSIpO3RoaXMudHJhY2VJbml0SW5kZW50PHRoaXMudHJhY2VJbml0TWF4SWRlbnQmJmNvbnNvbGUubG9nKGAke259LS0+IDwke2V9PmApO2xldHt0aW1lOmksdmFsdWU6YX09aHgocikscz1pPjEwP2NvbnNvbGUud2Fybjpjb25zb2xlLmxvZztyZXR1cm4gdGhpcy50cmFjZUluaXRJbmRlbnQ8dGhpcy50cmFjZUluaXRNYXhJZGVudCYmcyhgJHtufTwtLSA8JHtlfT4gdGltZTogJHtpfW1zYCksdGhpcy50cmFjZUluaXRJbmRlbnQtLSxhfWVsc2UgcmV0dXJuIHIoKX19fSk7ZnVuY3Rpb24gYmxlKHQsZSl7ZS5mb3JFYWNoKHI9PntsZXQgbj1yLnByb3RvdHlwZTtPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhuKS5mb3JFYWNoKGk9PntpZihpPT09ImNvbnN0cnVjdG9yIilyZXR1cm47bGV0IGE9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGkpO2EmJihhLmdldHx8YS5zZXQpP09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSxpLGEpOnQucHJvdG90eXBlW2ldPXIucHJvdG90eXBlW2ldfSl9KX12YXIgVGxlPU4oKCk9PnsidXNlIHN0cmljdCI7byhibGUsImFwcGx5TWl4aW5zIil9KTtmdW5jdGlvbiBrRSh0PXZvaWQgMCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fXZhciBpMSxkcyxhMSxWaSxfeCxEeCxVcz1OKCgpPT57InVzZSBzdHJpY3QiO3F0KCk7SGcoKTtRc2UoKTticCgpO1FnKCk7WW9lKCk7RU0oKTtKb2UoKTtvbGUoKTtsbGUoKTtjbGUoKTt1bGUoKTtobGUoKTtmbGUoKTt2bGUoKTt4bGUoKTtUbGUoKTt3eCgpO2kxPVd1KGZvLCIiLE5hTixOYU4sTmFOLE5hTixOYU4sTmFOKTtPYmplY3QuZnJlZXplKGkxKTtkcz1PYmplY3QuZnJlZXplKHtyZWNvdmVyeUVuYWJsZWQ6ITEsbWF4TG9va2FoZWFkOjMsZHluYW1pY1Rva2Vuc0VuYWJsZWQ6ITEsb3V0cHV0Q3N0OiEwLGVycm9yTWVzc2FnZVByb3ZpZGVyOnF1LG5vZGVMb2NhdGlvblRyYWNraW5nOiJub25lIix0cmFjZUluaXRQZXJmOiExLHNraXBWYWxpZGF0aW9uczohMX0pLGExPU9iamVjdC5mcmVlemUoe3JlY292ZXJ5VmFsdWVGdW5jOm8oKCk9Pnt9LCJyZWNvdmVyeVZhbHVlRnVuYyIpLHJlc3luY0VuYWJsZWQ6ITB9KTsoZnVuY3Rpb24odCl7dFt0LklOVkFMSURfUlVMRV9OQU1FPTBdPSJJTlZBTElEX1JVTEVfTkFNRSIsdFt0LkRVUExJQ0FURV9SVUxFX05BTUU9MV09IkRVUExJQ0FURV9SVUxFX05BTUUiLHRbdC5JTlZBTElEX1JVTEVfT1ZFUlJJREU9Ml09IklOVkFMSURfUlVMRV9PVkVSUklERSIsdFt0LkRVUExJQ0FURV9QUk9EVUNUSU9OUz0zXT0iRFVQTElDQVRFX1BST0RVQ1RJT05TIix0W3QuVU5SRVNPTFZFRF9TVUJSVUxFX1JFRj00XT0iVU5SRVNPTFZFRF9TVUJSVUxFX1JFRiIsdFt0LkxFRlRfUkVDVVJTSU9OPTVdPSJMRUZUX1JFQ1VSU0lPTiIsdFt0Lk5PTkVfTEFTVF9FTVBUWV9BTFQ9Nl09Ik5PTkVfTEFTVF9FTVBUWV9BTFQiLHRbdC5BTUJJR1VPVVNfQUxUUz03XT0iQU1CSUdVT1VTX0FMVFMiLHRbdC5DT05GTElDVF9UT0tFTlNfUlVMRVNfTkFNRVNQQUNFPThdPSJDT05GTElDVF9UT0tFTlNfUlVMRVNfTkFNRVNQQUNFIix0W3QuSU5WQUxJRF9UT0tFTl9OQU1FPTldPSJJTlZBTElEX1RPS0VOX05BTUUiLHRbdC5OT19OT05fRU1QVFlfTE9PS0FIRUFEPTEwXT0iTk9fTk9OX0VNUFRZX0xPT0tBSEVBRCIsdFt0LkFNQklHVU9VU19QUkVGSVhfQUxUUz0xMV09IkFNQklHVU9VU19QUkVGSVhfQUxUUyIsdFt0LlRPT19NQU5ZX0FMVFM9MTJdPSJUT09fTUFOWV9BTFRTIix0W3QuQ1VTVE9NX0xPT0tBSEVBRF9WQUxJREFUSU9OPTEzXT0iQ1VTVE9NX0xPT0tBSEVBRF9WQUxJREFUSU9OIn0pKFZpfHwoVmk9e30pKTtvKGtFLCJFTVBUWV9BTFQiKTtfeD1jbGFzcyB0e3N0YXRpY3tvKHRoaXMsIlBhcnNlciIpfXN0YXRpYyBwZXJmb3JtU2VsZkFuYWx5c2lzKGUpe3Rocm93IEVycm9yKCJUaGUgKipzdGF0aWMqKiBgcGVyZm9ybVNlbGZBbmFseXNpc2AgbWV0aG9kIGhhcyBiZWVuIGRlcHJlY2F0ZWQuCVxuVXNlIHRoZSAqKmluc3RhbmNlKiogbWV0aG9kIHdpdGggdGhlIHNhbWUgbmFtZSBpbnN0ZWFkLiIpfXBlcmZvcm1TZWxmQW5hbHlzaXMoKXt0aGlzLlRSQUNFX0lOSVQoInBlcmZvcm1TZWxmQW5hbHlzaXMiLCgpPT57bGV0IGU7dGhpcy5zZWxmQW5hbHlzaXNEb25lPSEwO2xldCByPXRoaXMuY2xhc3NOYW1lO3RoaXMuVFJBQ0VfSU5JVCgidG9GYXN0UHJvcHMiLCgpPT57ZngodGhpcyl9KSx0aGlzLlRSQUNFX0lOSVQoIkdyYW1tYXIgUmVjb3JkaW5nIiwoKT0+e3RyeXt0aGlzLmVuYWJsZVJlY29yZGluZygpLEFlKHRoaXMuZGVmaW5lZFJ1bGVzTmFtZXMsaT0+e2xldCBzPXRoaXNbaV0ub3JpZ2luYWxHcmFtbWFyQWN0aW9uLGw7dGhpcy5UUkFDRV9JTklUKGAke2l9IFJ1bGVgLCgpPT57bD10aGlzLnRvcExldmVsUnVsZVJlY29yZChpLHMpfSksdGhpcy5nYXN0UHJvZHVjdGlvbnNDYWNoZVtpXT1sfSl9ZmluYWxseXt0aGlzLmRpc2FibGVSZWNvcmRpbmcoKX19KTtsZXQgbj1bXTtpZih0aGlzLlRSQUNFX0lOSVQoIkdyYW1tYXIgUmVzb2x2aW5nIiwoKT0+e249V29lKHtydWxlczpicih0aGlzLmdhc3RQcm9kdWN0aW9uc0NhY2hlKX0pLHRoaXMuZGVmaW5pdGlvbkVycm9ycz10aGlzLmRlZmluaXRpb25FcnJvcnMuY29uY2F0KG4pfSksdGhpcy5UUkFDRV9JTklUKCJHcmFtbWFyIFZhbGlkYXRpb25zIiwoKT0+e2lmKGhyKG4pJiZ0aGlzLnNraXBWYWxpZGF0aW9ucz09PSExKXtsZXQgaT1xb2Uoe3J1bGVzOmJyKHRoaXMuZ2FzdFByb2R1Y3Rpb25zQ2FjaGUpLHRva2VuVHlwZXM6YnIodGhpcy50b2tlbnNNYXApLGVyck1zZ1Byb3ZpZGVyOiRsLGdyYW1tYXJOYW1lOnJ9KSxhPUZvZSh7bG9va2FoZWFkU3RyYXRlZ3k6dGhpcy5sb29rYWhlYWRTdHJhdGVneSxydWxlczpicih0aGlzLmdhc3RQcm9kdWN0aW9uc0NhY2hlKSx0b2tlblR5cGVzOmJyKHRoaXMudG9rZW5zTWFwKSxncmFtbWFyTmFtZTpyfSk7dGhpcy5kZWZpbml0aW9uRXJyb3JzPXRoaXMuZGVmaW5pdGlvbkVycm9ycy5jb25jYXQoaSxhKX19KSxocih0aGlzLmRlZmluaXRpb25FcnJvcnMpJiYodGhpcy5yZWNvdmVyeUVuYWJsZWQmJnRoaXMuVFJBQ0VfSU5JVCgiY29tcHV0ZUFsbFByb2RzRm9sbG93cyIsKCk9PntsZXQgaT1Lc2UoYnIodGhpcy5nYXN0UHJvZHVjdGlvbnNDYWNoZSkpO3RoaXMucmVzeW5jRm9sbG93cz1pfSksdGhpcy5UUkFDRV9JTklUKCJDb21wdXRlTG9va2FoZWFkRnVuY3Rpb25zIiwoKT0+e3ZhciBpLGE7KGE9KGk9dGhpcy5sb29rYWhlYWRTdHJhdGVneSkuaW5pdGlhbGl6ZSk9PT1udWxsfHxhPT09dm9pZCAwfHxhLmNhbGwoaSx7cnVsZXM6YnIodGhpcy5nYXN0UHJvZHVjdGlvbnNDYWNoZSl9KSx0aGlzLnByZUNvbXB1dGVMb29rYWhlYWRGdW5jdGlvbnMoYnIodGhpcy5nYXN0UHJvZHVjdGlvbnNDYWNoZSkpfSkpLCF0LkRFRkVSX0RFRklOSVRJT05fRVJST1JTX0hBTkRMSU5HJiYhaHIodGhpcy5kZWZpbml0aW9uRXJyb3JzKSl0aHJvdyBlPUplKHRoaXMuZGVmaW5pdGlvbkVycm9ycyxpPT5pLm1lc3NhZ2UpLG5ldyBFcnJvcihgUGFyc2VyIERlZmluaXRpb24gRXJyb3JzIGRldGVjdGVkOgogJHtlLmpvaW4oYAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmApfWApfSl9Y29uc3RydWN0b3IoZSxyKXt0aGlzLmRlZmluaXRpb25FcnJvcnM9W10sdGhpcy5zZWxmQW5hbHlzaXNEb25lPSExO2xldCBuPXRoaXM7aWYobi5pbml0RXJyb3JIYW5kbGVyKHIpLG4uaW5pdExleGVyQWRhcHRlcigpLG4uaW5pdExvb2tzQWhlYWQociksbi5pbml0UmVjb2duaXplckVuZ2luZShlLHIpLG4uaW5pdFJlY292ZXJhYmxlKHIpLG4uaW5pdFRyZWVCdWlsZGVyKHIpLG4uaW5pdENvbnRlbnRBc3Npc3QoKSxuLmluaXRHYXN0UmVjb3JkZXIociksbi5pbml0UGVyZm9ybWFuY2VUcmFjZXIociksQnQociwiaWdub3JlZElzc3VlcyIpKXRocm93IG5ldyBFcnJvcihgVGhlIDxpZ25vcmVkSXNzdWVzPiBJUGFyc2VyQ29uZmlnIHByb3BlcnR5IGhhcyBiZWVuIGRlcHJlY2F0ZWQuCglQbGVhc2UgdXNlIHRoZSA8SUdOT1JFX0FNQklHVUlUSUVTPiBmbGFnIG9uIHRoZSByZWxldmFudCBEU0wgbWV0aG9kIGluc3RlYWQuCglTZWU6IGh0dHBzOi8vY2hldnJvdGFpbi5pby9kb2NzL2d1aWRlL3Jlc29sdmluZ19ncmFtbWFyX2Vycm9ycy5odG1sI0lHTk9SSU5HX0FNQklHVUlUSUVTCglGb3IgZnVydGhlciBkZXRhaWxzLmApO3RoaXMuc2tpcFZhbGlkYXRpb25zPUJ0KHIsInNraXBWYWxpZGF0aW9ucyIpP3Iuc2tpcFZhbGlkYXRpb25zOmRzLnNraXBWYWxpZGF0aW9uc319O194LkRFRkVSX0RFRklOSVRJT05fRVJST1JTX0hBTkRMSU5HPSExO2JsZShfeCxbYUUsY0UsZEUscEUsZ0UsbUUseUUsdkUseEUsd0VdKTtEeD1jbGFzcyBleHRlbmRzIF94e3N0YXRpY3tvKHRoaXMsIkVtYmVkZGVkQWN0aW9uc1BhcnNlciIpfWNvbnN0cnVjdG9yKGUscj1kcyl7bGV0IG49YW4ocik7bi5vdXRwdXRDc3Q9ITEsc3VwZXIoZSxuKX19fSk7dmFyIHdsZT1OKCgpPT57InVzZSBzdHJpY3QiO2ZzKCl9KTt2YXIga2xlPU4oKCk9PnsidXNlIHN0cmljdCJ9KTt2YXIgRWxlPU4oKCk9PnsidXNlIHN0cmljdCI7d2xlKCk7a2xlKCl9KTt2YXIgU2xlPU4oKCk9PnsidXNlIHN0cmljdCI7Sk4oKX0pO3ZhciBtZj1OKCgpPT57InVzZSBzdHJpY3QiO0pOKCk7VXMoKTtweCgpO2JwKCk7dDEoKTtTTSgpO1FnKCk7bjEoKTtmTSgpO2ZzKCk7ZnMoKTtFbGUoKTtTbGUoKX0pO2Z1bmN0aW9uIHdwKHQsZSxyKXtyZXR1cm5gJHt0Lm5hbWV9XyR7ZX1fJHtyfWB9ZnVuY3Rpb24gRGxlKHQpe2xldCBlPXtkZWNpc2lvbk1hcDp7fSxkZWNpc2lvblN0YXRlczpbXSxydWxlVG9TdGFydFN0YXRlOm5ldyBNYXAscnVsZVRvU3RvcFN0YXRlOm5ldyBNYXAsc3RhdGVzOltdfTtZRmUoZSx0KTtsZXQgcj10Lmxlbmd0aDtmb3IobGV0IG49MDtuPHI7bisrKXtsZXQgaT10W25dLGE9a3AoZSxpLGkpO2EhPT12b2lkIDAmJmkkZShlLGksYSl9cmV0dXJuIGV9ZnVuY3Rpb24gWUZlKHQsZSl7bGV0IHI9ZS5sZW5ndGg7Zm9yKGxldCBuPTA7bjxyO24rKyl7bGV0IGk9ZVtuXSxhPWFhKHQsaSx2b2lkIDAse3R5cGU6VkZlfSkscz1hYSh0LGksdm9pZCAwLHt0eXBlOmwxfSk7YS5zdG9wPXMsdC5ydWxlVG9TdGFydFN0YXRlLnNldChpLGEpLHQucnVsZVRvU3RvcFN0YXRlLnNldChpLHMpfX1mdW5jdGlvbiBMbGUodCxlLHIpe3JldHVybiByIGluc3RhbmNlb2YgRXI/SU0odCxlLHIudGVybWluYWxUeXBlLHIpOnIgaW5zdGFuY2VvZiBvbj9uJGUodCxlLHIpOnIgaW5zdGFuY2VvZiB3bj9aRmUodCxlLHIpOnIgaW5zdGFuY2VvZiBsbj9KRmUodCxlLHIpOnIgaW5zdGFuY2VvZiBQcj9YRmUodCxlLHIpOnIgaW5zdGFuY2VvZiBUbj9qRmUodCxlLHIpOnIgaW5zdGFuY2VvZiBMbj9LRmUodCxlLHIpOnIgaW5zdGFuY2VvZiBSbj9RRmUodCxlLHIpOmtwKHQsZSxyKX1mdW5jdGlvbiBYRmUodCxlLHIpe2xldCBuPWFhKHQsZSxyLHt0eXBlOkFsZX0pO3lmKHQsbik7bGV0IGk9YzEodCxlLG4scixrcCh0LGUscikpO3JldHVybiBObGUodCxlLHIsaSl9ZnVuY3Rpb24gakZlKHQsZSxyKXtsZXQgbj1hYSh0LGUscix7dHlwZTpBbGV9KTt5Zih0LG4pO2xldCBpPWMxKHQsZSxuLHIsa3AodCxlLHIpKSxhPUlNKHQsZSxyLnNlcGFyYXRvcixyKTtyZXR1cm4gTmxlKHQsZSxyLGksYSl9ZnVuY3Rpb24gS0ZlKHQsZSxyKXtsZXQgbj1hYSh0LGUscix7dHlwZTpDbGV9KTt5Zih0LG4pO2xldCBpPWMxKHQsZSxuLHIsa3AodCxlLHIpKTtyZXR1cm4gUmxlKHQsZSxyLGkpfWZ1bmN0aW9uIFFGZSh0LGUscil7bGV0IG49YWEodCxlLHIse3R5cGU6Q2xlfSk7eWYodCxuKTtsZXQgaT1jMSh0LGUsbixyLGtwKHQsZSxyKSksYT1JTSh0LGUsci5zZXBhcmF0b3Iscik7cmV0dXJuIFJsZSh0LGUscixpLGEpfWZ1bmN0aW9uIFpGZSh0LGUscil7bGV0IG49YWEodCxlLHIse3R5cGU6Z2Z9KTt5Zih0LG4pO2xldCBpPUplKHIuZGVmaW5pdGlvbixzPT5MbGUodCxlLHMpKTtyZXR1cm4gYzEodCxlLG4sciwuLi5pKX1mdW5jdGlvbiBKRmUodCxlLHIpe2xldCBuPWFhKHQsZSxyLHt0eXBlOmdmfSk7eWYodCxuKTtsZXQgaT1jMSh0LGUsbixyLGtwKHQsZSxyKSk7cmV0dXJuIGUkZSh0LGUscixpKX1mdW5jdGlvbiBrcCh0LGUscil7bGV0IG49WXIoSmUoci5kZWZpbml0aW9uLGk9PkxsZSh0LGUsaSkpLGk9PmkhPT12b2lkIDApO3JldHVybiBuLmxlbmd0aD09PTE/blswXTpuLmxlbmd0aD09PTA/dm9pZCAwOnIkZSh0LG4pfWZ1bmN0aW9uIFJsZSh0LGUscixuLGkpe2xldCBhPW4ubGVmdCxzPW4ucmlnaHQsbD1hYSh0LGUscix7dHlwZTpxRmV9KTt5Zih0LGwpO2xldCB1PWFhKHQsZSxyLHt0eXBlOl9sZX0pO3JldHVybiBhLmxvb3BiYWNrPWwsdS5sb29wYmFjaz1sLHQuZGVjaXNpb25NYXBbd3AoZSxpPyJSZXBldGl0aW9uTWFuZGF0b3J5V2l0aFNlcGFyYXRvciI6IlJlcGV0aXRpb25NYW5kYXRvcnkiLHIuaWR4KV09bCxEaShzLGwpLGk9PT12b2lkIDA/KERpKGwsYSksRGkobCx1KSk6KERpKGwsdSksRGkobCxpLmxlZnQpLERpKGkucmlnaHQsYSkpLHtsZWZ0OmEscmlnaHQ6dX19ZnVuY3Rpb24gTmxlKHQsZSxyLG4saSl7bGV0IGE9bi5sZWZ0LHM9bi5yaWdodCxsPWFhKHQsZSxyLHt0eXBlOldGZX0pO3lmKHQsbCk7bGV0IHU9YWEodCxlLHIse3R5cGU6X2xlfSksaD1hYSh0LGUscix7dHlwZTpIRmV9KTtyZXR1cm4gbC5sb29wYmFjaz1oLHUubG9vcGJhY2s9aCxEaShsLGEpLERpKGwsdSksRGkocyxoKSxpIT09dm9pZCAwPyhEaShoLHUpLERpKGgsaS5sZWZ0KSxEaShpLnJpZ2h0LGEpKTpEaShoLGwpLHQuZGVjaXNpb25NYXBbd3AoZSxpPyJSZXBldGl0aW9uV2l0aFNlcGFyYXRvciI6IlJlcGV0aXRpb24iLHIuaWR4KV09bCx7bGVmdDpsLHJpZ2h0OnV9fWZ1bmN0aW9uIGUkZSh0LGUscixuKXtsZXQgaT1uLmxlZnQsYT1uLnJpZ2h0O3JldHVybiBEaShpLGEpLHQuZGVjaXNpb25NYXBbd3AoZSwiT3B0aW9uIixyLmlkeCldPWksbn1mdW5jdGlvbiB5Zih0LGUpe3JldHVybiB0LmRlY2lzaW9uU3RhdGVzLnB1c2goZSksZS5kZWNpc2lvbj10LmRlY2lzaW9uU3RhdGVzLmxlbmd0aC0xLGUuZGVjaXNpb259ZnVuY3Rpb24gYzEodCxlLHIsbiwuLi5pKXtsZXQgYT1hYSh0LGUsbix7dHlwZTpVRmUsc3RhcnQ6cn0pO3IuZW5kPWE7Zm9yKGxldCBsIG9mIGkpbCE9PXZvaWQgMD8oRGkocixsLmxlZnQpLERpKGwucmlnaHQsYSkpOkRpKHIsYSk7bGV0IHM9e2xlZnQ6cixyaWdodDphfTtyZXR1cm4gdC5kZWNpc2lvbk1hcFt3cChlLHQkZShuKSxuLmlkeCldPXIsc31mdW5jdGlvbiB0JGUodCl7aWYodCBpbnN0YW5jZW9mIHduKXJldHVybiJBbHRlcm5hdGlvbiI7aWYodCBpbnN0YW5jZW9mIGxuKXJldHVybiJPcHRpb24iO2lmKHQgaW5zdGFuY2VvZiBQcilyZXR1cm4iUmVwZXRpdGlvbiI7aWYodCBpbnN0YW5jZW9mIFRuKXJldHVybiJSZXBldGl0aW9uV2l0aFNlcGFyYXRvciI7aWYodCBpbnN0YW5jZW9mIExuKXJldHVybiJSZXBldGl0aW9uTWFuZGF0b3J5IjtpZih0IGluc3RhbmNlb2YgUm4pcmV0dXJuIlJlcGV0aXRpb25NYW5kYXRvcnlXaXRoU2VwYXJhdG9yIjt0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgcHJvZHVjdGlvbiB0eXBlIGVuY291bnRlcmVkIil9ZnVuY3Rpb24gciRlKHQsZSl7bGV0IHI9ZS5sZW5ndGg7Zm9yKGxldCBhPTA7YTxyLTE7YSsrKXtsZXQgcz1lW2FdLGw7cy5sZWZ0LnRyYW5zaXRpb25zLmxlbmd0aD09PTEmJihsPXMubGVmdC50cmFuc2l0aW9uc1swXSk7bGV0IHU9bCBpbnN0YW5jZW9mIG8xLGg9bCxmPWVbYSsxXS5sZWZ0O3MubGVmdC50eXBlPT09Z2YmJnMucmlnaHQudHlwZT09PWdmJiZsIT09dm9pZCAwJiYodSYmaC5mb2xsb3dTdGF0ZT09PXMucmlnaHR8fGwudGFyZ2V0PT09cy5yaWdodCk/KHU/aC5mb2xsb3dTdGF0ZT1mOmwudGFyZ2V0PWYsYSRlKHQscy5yaWdodCkpOkRpKHMucmlnaHQsZil9bGV0IG49ZVswXSxpPWVbci0xXTtyZXR1cm57bGVmdDpuLmxlZnQscmlnaHQ6aS5yaWdodH19ZnVuY3Rpb24gSU0odCxlLHIsbil7bGV0IGk9YWEodCxlLG4se3R5cGU6Z2Z9KSxhPWFhKHQsZSxuLHt0eXBlOmdmfSk7cmV0dXJuIE9NKGksbmV3IHMxKGEscikpLHtsZWZ0OmkscmlnaHQ6YX19ZnVuY3Rpb24gbiRlKHQsZSxyKXtsZXQgbj1yLnJlZmVyZW5jZWRSdWxlLGk9dC5ydWxlVG9TdGFydFN0YXRlLmdldChuKSxhPWFhKHQsZSxyLHt0eXBlOmdmfSkscz1hYSh0LGUscix7dHlwZTpnZn0pLGw9bmV3IG8xKGksbixzKTtyZXR1cm4gT00oYSxsKSx7bGVmdDphLHJpZ2h0OnN9fWZ1bmN0aW9uIGkkZSh0LGUscil7bGV0IG49dC5ydWxlVG9TdGFydFN0YXRlLmdldChlKTtEaShuLHIubGVmdCk7bGV0IGk9dC5ydWxlVG9TdG9wU3RhdGUuZ2V0KGUpO3JldHVybiBEaShyLnJpZ2h0LGkpLHtsZWZ0Om4scmlnaHQ6aX19ZnVuY3Rpb24gRGkodCxlKXtsZXQgcj1uZXcgUngoZSk7T00odCxyKX1mdW5jdGlvbiBhYSh0LGUscixuKXtsZXQgaT1PYmplY3QuYXNzaWduKHthdG46dCxwcm9kdWN0aW9uOnIsZXBzaWxvbk9ubHlUcmFuc2l0aW9uczohMSxydWxlOmUsdHJhbnNpdGlvbnM6W10sbmV4dFRva2VuV2l0aGluUnVsZTpbXSxzdGF0ZU51bWJlcjp0LnN0YXRlcy5sZW5ndGh9LG4pO3JldHVybiB0LnN0YXRlcy5wdXNoKGkpLGl9ZnVuY3Rpb24gT00odCxlKXt0LnRyYW5zaXRpb25zLmxlbmd0aD09PTAmJih0LmVwc2lsb25Pbmx5VHJhbnNpdGlvbnM9ZS5pc0Vwc2lsb24oKSksdC50cmFuc2l0aW9ucy5wdXNoKGUpfWZ1bmN0aW9uIGEkZSh0LGUpe3Quc3RhdGVzLnNwbGljZSh0LnN0YXRlcy5pbmRleE9mKGUpLDEpfXZhciBnZixWRmUsQ2xlLEFsZSxsMSxVRmUsSEZlLFdGZSxxRmUsX2xlLEx4LHMxLFJ4LG8xLE1sZT1OKCgpPT57InVzZSBzdHJpY3QiO1VtKCk7ZlIoKTttZigpO28od3AsImJ1aWxkQVROS2V5Iik7Z2Y9MSxWRmU9MixDbGU9NCxBbGU9NSxsMT03LFVGZT04LEhGZT05LFdGZT0xMCxxRmU9MTEsX2xlPTEyLEx4PWNsYXNze3N0YXRpY3tvKHRoaXMsIkFic3RyYWN0VHJhbnNpdGlvbiIpfWNvbnN0cnVjdG9yKGUpe3RoaXMudGFyZ2V0PWV9aXNFcHNpbG9uKCl7cmV0dXJuITF9fSxzMT1jbGFzcyBleHRlbmRzIEx4e3N0YXRpY3tvKHRoaXMsIkF0b21UcmFuc2l0aW9uIil9Y29uc3RydWN0b3IoZSxyKXtzdXBlcihlKSx0aGlzLnRva2VuVHlwZT1yfX0sUng9Y2xhc3MgZXh0ZW5kcyBMeHtzdGF0aWN7byh0aGlzLCJFcHNpbG9uVHJhbnNpdGlvbiIpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKGUpfWlzRXBzaWxvbigpe3JldHVybiEwfX0sbzE9Y2xhc3MgZXh0ZW5kcyBMeHtzdGF0aWN7byh0aGlzLCJSdWxlVHJhbnNpdGlvbiIpfWNvbnN0cnVjdG9yKGUscixuKXtzdXBlcihlKSx0aGlzLnJ1bGU9cix0aGlzLmZvbGxvd1N0YXRlPW59aXNFcHNpbG9uKCl7cmV0dXJuITB9fTtvKERsZSwiY3JlYXRlQVROIik7byhZRmUsImNyZWF0ZVJ1bGVTdGFydEFuZFN0b3BBVE5TdGF0ZXMiKTtvKExsZSwiYXRvbSIpO28oWEZlLCJyZXBldGl0aW9uIik7byhqRmUsInJlcGV0aXRpb25TZXAiKTtvKEtGZSwicmVwZXRpdGlvbk1hbmRhdG9yeSIpO28oUUZlLCJyZXBldGl0aW9uTWFuZGF0b3J5U2VwIik7byhaRmUsImFsdGVybmF0aW9uIik7byhKRmUsIm9wdGlvbiIpO28oa3AsImJsb2NrIik7byhSbGUsInBsdXMiKTtvKE5sZSwic3RhciIpO28oZSRlLCJvcHRpb25hbCIpO28oeWYsImRlZmluZURlY2lzaW9uU3RhdGUiKTtvKGMxLCJtYWtlQWx0cyIpO28odCRlLCJnZXRQcm9kVHlwZSIpO28ociRlLCJtYWtlQmxvY2siKTtvKElNLCJ0b2tlblJlZiIpO28obiRlLCJydWxlUmVmIik7byhpJGUsImJ1aWxkUnVsZUhhbmRsZSIpO28oRGksImVwc2lsb24iKTtvKGFhLCJuZXdTdGF0ZSIpO28oT00sImFkZFRyYW5zaXRpb24iKTtvKGEkZSwicmVtb3ZlU3RhdGUiKX0pO2Z1bmN0aW9uIFBNKHQsZT0hMCl7cmV0dXJuYCR7ZT9gYSR7dC5hbHR9YDoiIn1zJHt0LnN0YXRlLnN0YXRlTnVtYmVyfToke3Quc3RhY2subWFwKHI9PnIuc3RhdGVOdW1iZXIudG9TdHJpbmcoKSkuam9pbigiXyIpfWB9dmFyIE54LHUxLElsZT1OKCgpPT57InVzZSBzdHJpY3QiO1VtKCk7Tng9e30sdTE9Y2xhc3N7c3RhdGlje28odGhpcywiQVROQ29uZmlnU2V0Iil9Y29uc3RydWN0b3IoKXt0aGlzLm1hcD17fSx0aGlzLmNvbmZpZ3M9W119Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5jb25maWdzLmxlbmd0aH1maW5hbGl6ZSgpe3RoaXMubWFwPXt9fWFkZChlKXtsZXQgcj1QTShlKTtyIGluIHRoaXMubWFwfHwodGhpcy5tYXBbcl09dGhpcy5jb25maWdzLmxlbmd0aCx0aGlzLmNvbmZpZ3MucHVzaChlKSl9Z2V0IGVsZW1lbnRzKCl7cmV0dXJuIHRoaXMuY29uZmlnc31nZXQgYWx0cygpe3JldHVybiBKZSh0aGlzLmNvbmZpZ3MsZT0+ZS5hbHQpfWdldCBrZXkoKXtsZXQgZT0iIjtmb3IobGV0IHIgaW4gdGhpcy5tYXApZSs9cisiOiI7cmV0dXJuIGV9fTtvKFBNLCJnZXRBVE5Db25maWdLZXkiKX0pO2Z1bmN0aW9uIHMkZSh0LGUpe2xldCByPXt9O3JldHVybiBuPT57bGV0IGk9bi50b1N0cmluZygpLGE9cltpXTtyZXR1cm4gYSE9PXZvaWQgMHx8KGE9e2F0blN0YXJ0U3RhdGU6dCxkZWNpc2lvbjplLHN0YXRlczp7fX0scltpXT1hKSxhfX1mdW5jdGlvbiBQbGUodCxlPSEwKXtsZXQgcj1uZXcgU2V0O2ZvcihsZXQgbiBvZiB0KXtsZXQgaT1uZXcgU2V0O2ZvcihsZXQgYSBvZiBuKXtpZihhPT09dm9pZCAwKXtpZihlKWJyZWFrO3JldHVybiExfWxldCBzPVthLnRva2VuVHlwZUlkeF0uY29uY2F0KGEuY2F0ZWdvcnlNYXRjaGVzKTtmb3IobGV0IGwgb2YgcylpZihyLmhhcyhsKSl7aWYoIWkuaGFzKGwpKXJldHVybiExfWVsc2Ugci5hZGQobCksaS5hZGQobCl9fXJldHVybiEwfWZ1bmN0aW9uIG8kZSh0KXtsZXQgZT10LmRlY2lzaW9uU3RhdGVzLmxlbmd0aCxyPUFycmF5KGUpO2ZvcihsZXQgbj0wO248ZTtuKyspcltuXT1zJGUodC5kZWNpc2lvblN0YXRlc1tuXSxuKTtyZXR1cm4gcn1mdW5jdGlvbiBCTSh0LGUscixuKXtsZXQgaT10W2VdKHIpLGE9aS5zdGFydDtpZihhPT09dm9pZCAwKXtsZXQgbD12JGUoaS5hdG5TdGFydFN0YXRlKTthPSRsZShpLEZsZShsKSksaS5zdGFydD1hfXJldHVybiBsJGUuYXBwbHkodGhpcyxbaSxhLHIsbl0pfWZ1bmN0aW9uIGwkZSh0LGUscixuKXtsZXQgaT1lLGE9MSxzPVtdLGw9dGhpcy5MQShhKyspO2Zvcig7Oyl7bGV0IHU9cCRlKGksbCk7aWYodT09PXZvaWQgMCYmKHU9YyRlLmFwcGx5KHRoaXMsW3QsaSxsLGEscixuXSkpLHU9PT1OeClyZXR1cm4gZCRlKHMsaSxsKTtpZih1LmlzQWNjZXB0U3RhdGU9PT0hMClyZXR1cm4gdS5wcmVkaWN0aW9uO2k9dSxzLnB1c2gobCksbD10aGlzLkxBKGErKyl9fWZ1bmN0aW9uIGMkZSh0LGUscixuLGksYSl7bGV0IHM9bSRlKGUuY29uZmlncyxyLGkpO2lmKHMuc2l6ZT09PTApcmV0dXJuIEJsZSh0LGUscixOeCksTng7bGV0IGw9RmxlKHMpLHU9eSRlKHMsaSk7aWYodSE9PXZvaWQgMClsLmlzQWNjZXB0U3RhdGU9ITAsbC5wcmVkaWN0aW9uPXUsbC5jb25maWdzLnVuaXF1ZUFsdD11O2Vsc2UgaWYodyRlKHMpKXtsZXQgaD1ObChzLmFsdHMpO2wuaXNBY2NlcHRTdGF0ZT0hMCxsLnByZWRpY3Rpb249aCxsLmNvbmZpZ3MudW5pcXVlQWx0PWgsdSRlLmFwcGx5KHRoaXMsW3QsbixzLmFsdHMsYV0pfXJldHVybiBsPUJsZSh0LGUscixsKSxsfWZ1bmN0aW9uIHUkZSh0LGUscixuKXtsZXQgaT1bXTtmb3IobGV0IGg9MTtoPD1lO2grKylpLnB1c2godGhpcy5MQShoKS50b2tlblR5cGUpO2xldCBhPXQuYXRuU3RhcnRTdGF0ZSxzPWEucnVsZSxsPWEucHJvZHVjdGlvbix1PWgkZSh7dG9wTGV2ZWxSdWxlOnMsYW1iaWd1aXR5SW5kaWNlczpyLHByb2R1Y3Rpb246bCxwcmVmaXhQYXRoOml9KTtuKHUpfWZ1bmN0aW9uIGgkZSh0KXtsZXQgZT1KZSh0LnByZWZpeFBhdGgsaT0+SHUoaSkpLmpvaW4oIiwgIikscj10LnByb2R1Y3Rpb24uaWR4PT09MD8iIjp0LnByb2R1Y3Rpb24uaWR4LG49YEFtYmlndW91cyBBbHRlcm5hdGl2ZXMgRGV0ZWN0ZWQ6IDwke3QuYW1iaWd1aXR5SW5kaWNlcy5qb2luKCIsICIpfT4gaW4gPCR7ZiRlKHQucHJvZHVjdGlvbil9JHtyfT4gaW5zaWRlIDwke3QudG9wTGV2ZWxSdWxlLm5hbWV9PiBSdWxlLAo8JHtlfT4gbWF5IGFwcGVhcnMgYXMgYSBwcmVmaXggcGF0aCBpbiBhbGwgdGhlc2UgYWx0ZXJuYXRpdmVzLgpgO3JldHVybiBuPW4rYFNlZTogaHR0cHM6Ly9jaGV2cm90YWluLmlvL2RvY3MvZ3VpZGUvcmVzb2x2aW5nX2dyYW1tYXJfZXJyb3JzLmh0bWwjQU1CSUdVT1VTX0FMVEVSTkFUSVZFUwpGb3IgRnVydGhlciBkZXRhaWxzLmAsbn1mdW5jdGlvbiBmJGUodCl7aWYodCBpbnN0YW5jZW9mIG9uKXJldHVybiJTVUJSVUxFIjtpZih0IGluc3RhbmNlb2YgbG4pcmV0dXJuIk9QVElPTiI7aWYodCBpbnN0YW5jZW9mIHduKXJldHVybiJPUiI7aWYodCBpbnN0YW5jZW9mIExuKXJldHVybiJBVF9MRUFTVF9PTkUiO2lmKHQgaW5zdGFuY2VvZiBSbilyZXR1cm4iQVRfTEVBU1RfT05FX1NFUCI7aWYodCBpbnN0YW5jZW9mIFRuKXJldHVybiJNQU5ZX1NFUCI7aWYodCBpbnN0YW5jZW9mIFByKXJldHVybiJNQU5ZIjtpZih0IGluc3RhbmNlb2YgRXIpcmV0dXJuIkNPTlNVTUUiO3Rocm93IEVycm9yKCJub24gZXhoYXVzdGl2ZSBtYXRjaCIpfWZ1bmN0aW9uIGQkZSh0LGUscil7bGV0IG49Z2EoZS5jb25maWdzLmVsZW1lbnRzLGE9PmEuc3RhdGUudHJhbnNpdGlvbnMpLGk9ZGllKG4uZmlsdGVyKGE9PmEgaW5zdGFuY2VvZiBzMSkubWFwKGE9PmEudG9rZW5UeXBlKSxhPT5hLnRva2VuVHlwZUlkeCk7cmV0dXJue2FjdHVhbFRva2VuOnIscG9zc2libGVUb2tlblR5cGVzOmksdG9rZW5QYXRoOnR9fWZ1bmN0aW9uIHAkZSh0LGUpe3JldHVybiB0LmVkZ2VzW2UudG9rZW5UeXBlSWR4XX1mdW5jdGlvbiBtJGUodCxlLHIpe2xldCBuPW5ldyB1MSxpPVtdO2ZvcihsZXQgcyBvZiB0LmVsZW1lbnRzKXtpZihyLmlzKHMuYWx0KT09PSExKWNvbnRpbnVlO2lmKHMuc3RhdGUudHlwZT09PWwxKXtpLnB1c2gocyk7Y29udGludWV9bGV0IGw9cy5zdGF0ZS50cmFuc2l0aW9ucy5sZW5ndGg7Zm9yKGxldCB1PTA7dTxsO3UrKyl7bGV0IGg9cy5zdGF0ZS50cmFuc2l0aW9uc1t1XSxmPWckZShoLGUpO2YhPT12b2lkIDAmJm4uYWRkKHtzdGF0ZTpmLGFsdDpzLmFsdCxzdGFjazpzLnN0YWNrfSl9fWxldCBhO2lmKGkubGVuZ3RoPT09MCYmbi5zaXplPT09MSYmKGE9biksYT09PXZvaWQgMCl7YT1uZXcgdTE7Zm9yKGxldCBzIG9mIG4uZWxlbWVudHMpU0UocyxhKX1pZihpLmxlbmd0aD4wJiYhYiRlKGEpKWZvcihsZXQgcyBvZiBpKWEuYWRkKHMpO3JldHVybiBhfWZ1bmN0aW9uIGckZSh0LGUpe2lmKHQgaW5zdGFuY2VvZiBzMSYmZ3goZSx0LnRva2VuVHlwZSkpcmV0dXJuIHQudGFyZ2V0fWZ1bmN0aW9uIHkkZSh0LGUpe2xldCByO2ZvcihsZXQgbiBvZiB0LmVsZW1lbnRzKWlmKGUuaXMobi5hbHQpPT09ITApe2lmKHI9PT12b2lkIDApcj1uLmFsdDtlbHNlIGlmKHIhPT1uLmFsdClyZXR1cm59cmV0dXJuIHJ9ZnVuY3Rpb24gRmxlKHQpe3JldHVybntjb25maWdzOnQsZWRnZXM6e30saXNBY2NlcHRTdGF0ZTohMSxwcmVkaWN0aW9uOi0xfX1mdW5jdGlvbiBCbGUodCxlLHIsbil7cmV0dXJuIG49JGxlKHQsbiksZS5lZGdlc1tyLnRva2VuVHlwZUlkeF09bixufWZ1bmN0aW9uICRsZSh0LGUpe2lmKGU9PT1OeClyZXR1cm4gZTtsZXQgcj1lLmNvbmZpZ3Mua2V5LG49dC5zdGF0ZXNbcl07cmV0dXJuIG4hPT12b2lkIDA/bjooZS5jb25maWdzLmZpbmFsaXplKCksdC5zdGF0ZXNbcl09ZSxlKX1mdW5jdGlvbiB2JGUodCl7bGV0IGU9bmV3IHUxLHI9dC50cmFuc2l0aW9ucy5sZW5ndGg7Zm9yKGxldCBuPTA7bjxyO24rKyl7bGV0IGE9e3N0YXRlOnQudHJhbnNpdGlvbnNbbl0udGFyZ2V0LGFsdDpuLHN0YWNrOltdfTtTRShhLGUpfXJldHVybiBlfWZ1bmN0aW9uIFNFKHQsZSl7bGV0IHI9dC5zdGF0ZTtpZihyLnR5cGU9PT1sMSl7aWYodC5zdGFjay5sZW5ndGg+MCl7bGV0IGk9Wy4uLnQuc3RhY2tdLHM9e3N0YXRlOmkucG9wKCksYWx0OnQuYWx0LHN0YWNrOml9O1NFKHMsZSl9ZWxzZSBlLmFkZCh0KTtyZXR1cm59ci5lcHNpbG9uT25seVRyYW5zaXRpb25zfHxlLmFkZCh0KTtsZXQgbj1yLnRyYW5zaXRpb25zLmxlbmd0aDtmb3IobGV0IGk9MDtpPG47aSsrKXtsZXQgYT1yLnRyYW5zaXRpb25zW2ldLHM9eCRlKHQsYSk7cyE9PXZvaWQgMCYmU0UocyxlKX19ZnVuY3Rpb24geCRlKHQsZSl7aWYoZSBpbnN0YW5jZW9mIFJ4KXJldHVybntzdGF0ZTplLnRhcmdldCxhbHQ6dC5hbHQsc3RhY2s6dC5zdGFja307aWYoZSBpbnN0YW5jZW9mIG8xKXtsZXQgcj1bLi4udC5zdGFjayxlLmZvbGxvd1N0YXRlXTtyZXR1cm57c3RhdGU6ZS50YXJnZXQsYWx0OnQuYWx0LHN0YWNrOnJ9fX1mdW5jdGlvbiBiJGUodCl7Zm9yKGxldCBlIG9mIHQuZWxlbWVudHMpaWYoZS5zdGF0ZS50eXBlPT09bDEpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gVCRlKHQpe2ZvcihsZXQgZSBvZiB0LmVsZW1lbnRzKWlmKGUuc3RhdGUudHlwZSE9PWwxKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIHckZSh0KXtpZihUJGUodCkpcmV0dXJuITA7bGV0IGU9ayRlKHQuZWxlbWVudHMpO3JldHVybiBFJGUoZSkmJiFTJGUoZSl9ZnVuY3Rpb24gayRlKHQpe2xldCBlPW5ldyBNYXA7Zm9yKGxldCByIG9mIHQpe2xldCBuPVBNKHIsITEpLGk9ZS5nZXQobik7aT09PXZvaWQgMCYmKGk9e30sZS5zZXQobixpKSksaVtyLmFsdF09ITB9cmV0dXJuIGV9ZnVuY3Rpb24gRSRlKHQpe2ZvcihsZXQgZSBvZiBBcnJheS5mcm9tKHQudmFsdWVzKCkpKWlmKE9iamVjdC5rZXlzKGUpLmxlbmd0aD4xKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFMkZSh0KXtmb3IobGV0IGUgb2YgQXJyYXkuZnJvbSh0LnZhbHVlcygpKSlpZihPYmplY3Qua2V5cyhlKS5sZW5ndGg9PT0xKXJldHVybiEwO3JldHVybiExfXZhciBFRSxPbGUsTXgsemxlPU4oKCk9PnsidXNlIHN0cmljdCI7bWYoKTtNbGUoKTtJbGUoKTtiUigpO3BSKCk7cGllKCk7VW0oKTtTdygpO2VrKCk7YWsoKTtFUigpO28ocyRlLCJjcmVhdGVERkFDYWNoZSIpO0VFPWNsYXNze3N0YXRpY3tvKHRoaXMsIlByZWRpY2F0ZVNldCIpfWNvbnN0cnVjdG9yKCl7dGhpcy5wcmVkaWNhdGVzPVtdfWlzKGUpe3JldHVybiBlPj10aGlzLnByZWRpY2F0ZXMubGVuZ3RofHx0aGlzLnByZWRpY2F0ZXNbZV19c2V0KGUscil7dGhpcy5wcmVkaWNhdGVzW2VdPXJ9dG9TdHJpbmcoKXtsZXQgZT0iIixyPXRoaXMucHJlZGljYXRlcy5sZW5ndGg7Zm9yKGxldCBuPTA7bjxyO24rKyllKz10aGlzLnByZWRpY2F0ZXNbbl09PT0hMD8iMSI6IjAiO3JldHVybiBlfX0sT2xlPW5ldyBFRSxNeD1jbGFzcyBleHRlbmRzIFl1e3N0YXRpY3tvKHRoaXMsIkxMU3Rhckxvb2thaGVhZFN0cmF0ZWd5Iil9Y29uc3RydWN0b3IoZSl7dmFyIHI7c3VwZXIoKSx0aGlzLmxvZ2dpbmc9KHI9ZT8ubG9nZ2luZykhPT1udWxsJiZyIT09dm9pZCAwP3I6bj0+Y29uc29sZS5sb2cobil9aW5pdGlhbGl6ZShlKXt0aGlzLmF0bj1EbGUoZS5ydWxlcyksdGhpcy5kZmFzPW8kZSh0aGlzLmF0bil9dmFsaWRhdGVBbWJpZ3VvdXNBbHRlcm5hdGlvbkFsdGVybmF0aXZlcygpe3JldHVybltdfXZhbGlkYXRlRW1wdHlPckFsdGVybmF0aXZlcygpe3JldHVybltdfWJ1aWxkTG9va2FoZWFkRm9yQWx0ZXJuYXRpb24oZSl7bGV0e3Byb2RPY2N1cnJlbmNlOnIscnVsZTpuLGhhc1ByZWRpY2F0ZXM6aSxkeW5hbWljVG9rZW5zRW5hYmxlZDphfT1lLHM9dGhpcy5kZmFzLGw9dGhpcy5sb2dnaW5nLHU9d3AobiwiQWx0ZXJuYXRpb24iLHIpLGY9dGhpcy5hdG4uZGVjaXNpb25NYXBbdV0uZGVjaXNpb24sZD1KZShyRSh7bWF4TG9va2FoZWFkOjEsb2NjdXJyZW5jZTpyLHByb2RUeXBlOiJBbHRlcm5hdGlvbiIscnVsZTpufSkscD0+SmUocCxtPT5tWzBdKSk7aWYoUGxlKGQsITEpJiYhYSl7bGV0IHA9WHIoZCwobSxnLHkpPT4oQWUoZyx2PT57diYmKG1bdi50b2tlblR5cGVJZHhdPXksQWUodi5jYXRlZ29yeU1hdGNoZXMseD0+e21beF09eX0pKX0pLG0pLHt9KTtyZXR1cm4gaT9mdW5jdGlvbihtKXt2YXIgZztsZXQgeT10aGlzLkxBKDEpLHY9cFt5LnRva2VuVHlwZUlkeF07aWYobSE9PXZvaWQgMCYmdiE9PXZvaWQgMCl7bGV0IHg9KGc9bVt2XSk9PT1udWxsfHxnPT09dm9pZCAwP3ZvaWQgMDpnLkdBVEU7aWYoeCE9PXZvaWQgMCYmeC5jYWxsKHRoaXMpPT09ITEpcmV0dXJufXJldHVybiB2fTpmdW5jdGlvbigpe2xldCBtPXRoaXMuTEEoMSk7cmV0dXJuIHBbbS50b2tlblR5cGVJZHhdfX1lbHNlIHJldHVybiBpP2Z1bmN0aW9uKHApe2xldCBtPW5ldyBFRSxnPXA9PT12b2lkIDA/MDpwLmxlbmd0aDtmb3IobGV0IHY9MDt2PGc7disrKXtsZXQgeD1wPy5bdl0uR0FURTttLnNldCh2LHg9PT12b2lkIDB8fHguY2FsbCh0aGlzKSl9bGV0IHk9Qk0uY2FsbCh0aGlzLHMsZixtLGwpO3JldHVybiB0eXBlb2YgeT09Im51bWJlciI/eTp2b2lkIDB9OmZ1bmN0aW9uKCl7bGV0IHA9Qk0uY2FsbCh0aGlzLHMsZixPbGUsbCk7cmV0dXJuIHR5cGVvZiBwPT0ibnVtYmVyIj9wOnZvaWQgMH19YnVpbGRMb29rYWhlYWRGb3JPcHRpb25hbChlKXtsZXR7cHJvZE9jY3VycmVuY2U6cixydWxlOm4scHJvZFR5cGU6aSxkeW5hbWljVG9rZW5zRW5hYmxlZDphfT1lLHM9dGhpcy5kZmFzLGw9dGhpcy5sb2dnaW5nLHU9d3AobixpLHIpLGY9dGhpcy5hdG4uZGVjaXNpb25NYXBbdV0uZGVjaXNpb24sZD1KZShyRSh7bWF4TG9va2FoZWFkOjEsb2NjdXJyZW5jZTpyLHByb2RUeXBlOmkscnVsZTpufSkscD0+SmUocCxtPT5tWzBdKSk7aWYoUGxlKGQpJiZkWzBdWzBdJiYhYSl7bGV0IHA9ZFswXSxtPXFyKHApO2lmKG0ubGVuZ3RoPT09MSYmaHIobVswXS5jYXRlZ29yeU1hdGNoZXMpKXtsZXQgeT1tWzBdLnRva2VuVHlwZUlkeDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5MQSgxKS50b2tlblR5cGVJZHg9PT15fX1lbHNle2xldCBnPVhyKG0sKHksdik9Pih2IT09dm9pZCAwJiYoeVt2LnRva2VuVHlwZUlkeF09ITAsQWUodi5jYXRlZ29yeU1hdGNoZXMseD0+e3lbeF09ITB9KSkseSkse30pO3JldHVybiBmdW5jdGlvbigpe2xldCB5PXRoaXMuTEEoMSk7cmV0dXJuIGdbeS50b2tlblR5cGVJZHhdPT09ITB9fX1yZXR1cm4gZnVuY3Rpb24oKXtsZXQgcD1CTS5jYWxsKHRoaXMscyxmLE9sZSxsKTtyZXR1cm4gdHlwZW9mIHA9PSJvYmplY3QiPyExOnA9PT0wfX19O28oUGxlLCJpc0xMMVNlcXVlbmNlIik7byhvJGUsImluaXRBVE5TaW11bGF0b3IiKTtvKEJNLCJhZGFwdGl2ZVByZWRpY3QiKTtvKGwkZSwicGVyZm9ybUxvb2thaGVhZCIpO28oYyRlLCJjb21wdXRlTG9va2FoZWFkVGFyZ2V0Iik7byh1JGUsInJlcG9ydExvb2thaGVhZEFtYmlndWl0eSIpO28oaCRlLCJidWlsZEFtYmlndWl0eUVycm9yIik7byhmJGUsImdldFByb2R1Y3Rpb25Ec2xOYW1lIik7byhkJGUsImJ1aWxkQWRhcHRpdmVQcmVkaWN0RXJyb3IiKTtvKHAkZSwiZ2V0RXhpc3RpbmdUYXJnZXRTdGF0ZSIpO28obSRlLCJjb21wdXRlUmVhY2hTZXQiKTtvKGckZSwiZ2V0UmVhY2hhYmxlVGFyZ2V0Iik7byh5JGUsImdldFVuaXF1ZUFsdCIpO28oRmxlLCJuZXdERkFTdGF0ZSIpO28oQmxlLCJhZGRERkFFZGdlIik7bygkbGUsImFkZERGQVN0YXRlIik7byh2JGUsImNvbXB1dGVTdGFydFN0YXRlIik7byhTRSwiY2xvc3VyZSIpO28oeCRlLCJnZXRFcHNpbG9uVGFyZ2V0Iik7byhiJGUsImhhc0NvbmZpZ0luUnVsZVN0b3BTdGF0ZSIpO28oVCRlLCJhbGxDb25maWdzSW5SdWxlU3RvcFN0YXRlcyIpO28odyRlLCJoYXNDb25mbGljdFRlcm1pbmF0aW5nUHJlZGljdGlvbiIpO28oayRlLCJnZXRDb25mbGljdGluZ0FsdFNldHMiKTtvKEUkZSwiaGFzQ29uZmxpY3RpbmdBbHRTZXQiKTtvKFMkZSwiaGFzU3RhdGVBc3NvY2lhdGVkV2l0aE9uZUFsdCIpfSk7dmFyIEdsZT1OKCgpPT57InVzZSBzdHJpY3QiO3psZSgpfSk7dmFyIFZsZSxGTSxVbGUsQ0UsanIsQnIsQUUsSGxlLCRNLFdsZSxxbGUsWWxlLFhsZSx6TSxqbGUsS2xlLFFsZSxfRSxoMSxmMSxHTSxkMSxabGUsVk0sVU0sSE0sV00scU0sSmxlLGVjZSxZTSx0Y2UsWE0sSXgscmNlLG5jZSxpY2UsYWNlLHNjZSxvY2UsbGNlLGNjZSxERSx1Y2UsaGNlLGZjZSxkY2UscGNlLG1jZSxnY2UseWNlLHZjZSx4Y2UsYmNlLExFLFRjZSx3Y2Usa2NlLEVjZSxTY2UsQ2NlLEFjZSxfY2UsRGNlLExjZSxSY2UsTmNlLE1jZSxqTSxLTSxJY2UsT2NlLFBjZSxCY2UsRmNlLCRjZSx6Y2UsR2NlLFZjZSxRTSwkZSxaTT1OKCgpPT57InVzZSBzdHJpY3QiOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHIpe3JldHVybiB0eXBlb2Ygcj09InN0cmluZyJ9byhlLCJpcyIpLHQuaXM9ZX0pKFZsZXx8KFZsZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHIpe3JldHVybiB0eXBlb2Ygcj09InN0cmluZyJ9byhlLCJpcyIpLHQuaXM9ZX0pKEZNfHwoRk09e30pKTsoZnVuY3Rpb24odCl7dC5NSU5fVkFMVUU9LTIxNDc0ODM2NDgsdC5NQVhfVkFMVUU9MjE0NzQ4MzY0NztmdW5jdGlvbiBlKHIpe3JldHVybiB0eXBlb2Ygcj09Im51bWJlciImJnQuTUlOX1ZBTFVFPD1yJiZyPD10Lk1BWF9WQUxVRX1vKGUsImlzIiksdC5pcz1lfSkoVWxlfHwoVWxlPXt9KSk7KGZ1bmN0aW9uKHQpe3QuTUlOX1ZBTFVFPTAsdC5NQVhfVkFMVUU9MjE0NzQ4MzY0NztmdW5jdGlvbiBlKHIpe3JldHVybiB0eXBlb2Ygcj09Im51bWJlciImJnQuTUlOX1ZBTFVFPD1yJiZyPD10Lk1BWF9WQUxVRX1vKGUsImlzIiksdC5pcz1lfSkoQ0V8fChDRT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSl7cmV0dXJuIG49PT1OdW1iZXIuTUFYX1ZBTFVFJiYobj1DRS5NQVhfVkFMVUUpLGk9PT1OdW1iZXIuTUFYX1ZBTFVFJiYoaT1DRS5NQVhfVkFMVUUpLHtsaW5lOm4sY2hhcmFjdGVyOml9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuICRlLm9iamVjdExpdGVyYWwoaSkmJiRlLnVpbnRlZ2VyKGkubGluZSkmJiRlLnVpbnRlZ2VyKGkuY2hhcmFjdGVyKX1vKHIsImlzIiksdC5pcz1yfSkoanJ8fChqcj17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSxhLHMpe2lmKCRlLnVpbnRlZ2VyKG4pJiYkZS51aW50ZWdlcihpKSYmJGUudWludGVnZXIoYSkmJiRlLnVpbnRlZ2VyKHMpKXJldHVybntzdGFydDpqci5jcmVhdGUobixpKSxlbmQ6anIuY3JlYXRlKGEscyl9O2lmKGpyLmlzKG4pJiZqci5pcyhpKSlyZXR1cm57c3RhcnQ6bixlbmQ6aX07dGhyb3cgbmV3IEVycm9yKGBSYW5nZSNjcmVhdGUgY2FsbGVkIHdpdGggaW52YWxpZCBhcmd1bWVudHNbJHtufSwgJHtpfSwgJHthfSwgJHtzfV1gKX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiAkZS5vYmplY3RMaXRlcmFsKGkpJiZqci5pcyhpLnN0YXJ0KSYmanIuaXMoaS5lbmQpfW8ociwiaXMiKSx0LmlzPXJ9KShCcnx8KEJyPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpKXtyZXR1cm57dXJpOm4scmFuZ2U6aX19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gJGUub2JqZWN0TGl0ZXJhbChpKSYmQnIuaXMoaS5yYW5nZSkmJigkZS5zdHJpbmcoaS51cmkpfHwkZS51bmRlZmluZWQoaS51cmkpKX1vKHIsImlzIiksdC5pcz1yfSkoQUV8fChBRT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSxhLHMpe3JldHVybnt0YXJnZXRVcmk6bix0YXJnZXRSYW5nZTppLHRhcmdldFNlbGVjdGlvblJhbmdlOmEsb3JpZ2luU2VsZWN0aW9uUmFuZ2U6c319byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gJGUub2JqZWN0TGl0ZXJhbChpKSYmQnIuaXMoaS50YXJnZXRSYW5nZSkmJiRlLnN0cmluZyhpLnRhcmdldFVyaSkmJkJyLmlzKGkudGFyZ2V0U2VsZWN0aW9uUmFuZ2UpJiYoQnIuaXMoaS5vcmlnaW5TZWxlY3Rpb25SYW5nZSl8fCRlLnVuZGVmaW5lZChpLm9yaWdpblNlbGVjdGlvblJhbmdlKSl9byhyLCJpcyIpLHQuaXM9cn0pKEhsZXx8KEhsZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSxhLHMpe3JldHVybntyZWQ6bixncmVlbjppLGJsdWU6YSxhbHBoYTpzfX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiAkZS5vYmplY3RMaXRlcmFsKGkpJiYkZS5udW1iZXJSYW5nZShpLnJlZCwwLDEpJiYkZS5udW1iZXJSYW5nZShpLmdyZWVuLDAsMSkmJiRlLm51bWJlclJhbmdlKGkuYmx1ZSwwLDEpJiYkZS5udW1iZXJSYW5nZShpLmFscGhhLDAsMSl9byhyLCJpcyIpLHQuaXM9cn0pKCRNfHwoJE09e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGkpe3JldHVybntyYW5nZTpuLGNvbG9yOml9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuICRlLm9iamVjdExpdGVyYWwoaSkmJkJyLmlzKGkucmFuZ2UpJiYkTS5pcyhpLmNvbG9yKX1vKHIsImlzIiksdC5pcz1yfSkoV2xlfHwoV2xlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpLGEpe3JldHVybntsYWJlbDpuLHRleHRFZGl0OmksYWRkaXRpb25hbFRleHRFZGl0czphfX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiAkZS5vYmplY3RMaXRlcmFsKGkpJiYkZS5zdHJpbmcoaS5sYWJlbCkmJigkZS51bmRlZmluZWQoaS50ZXh0RWRpdCl8fGYxLmlzKGkpKSYmKCRlLnVuZGVmaW5lZChpLmFkZGl0aW9uYWxUZXh0RWRpdHMpfHwkZS50eXBlZEFycmF5KGkuYWRkaXRpb25hbFRleHRFZGl0cyxmMS5pcykpfW8ociwiaXMiKSx0LmlzPXJ9KShxbGV8fChxbGU9e30pKTsoZnVuY3Rpb24odCl7dC5Db21tZW50PSJjb21tZW50Iix0LkltcG9ydHM9ImltcG9ydHMiLHQuUmVnaW9uPSJyZWdpb24ifSkoWWxlfHwoWWxlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpLGEscyxsLHUpe2xldCBoPXtzdGFydExpbmU6bixlbmRMaW5lOml9O3JldHVybiAkZS5kZWZpbmVkKGEpJiYoaC5zdGFydENoYXJhY3Rlcj1hKSwkZS5kZWZpbmVkKHMpJiYoaC5lbmRDaGFyYWN0ZXI9cyksJGUuZGVmaW5lZChsKSYmKGgua2luZD1sKSwkZS5kZWZpbmVkKHUpJiYoaC5jb2xsYXBzZWRUZXh0PXUpLGh9byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gJGUub2JqZWN0TGl0ZXJhbChpKSYmJGUudWludGVnZXIoaS5zdGFydExpbmUpJiYkZS51aW50ZWdlcihpLnN0YXJ0TGluZSkmJigkZS51bmRlZmluZWQoaS5zdGFydENoYXJhY3Rlcil8fCRlLnVpbnRlZ2VyKGkuc3RhcnRDaGFyYWN0ZXIpKSYmKCRlLnVuZGVmaW5lZChpLmVuZENoYXJhY3Rlcil8fCRlLnVpbnRlZ2VyKGkuZW5kQ2hhcmFjdGVyKSkmJigkZS51bmRlZmluZWQoaS5raW5kKXx8JGUuc3RyaW5nKGkua2luZCkpfW8ociwiaXMiKSx0LmlzPXJ9KShYbGV8fChYbGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGkpe3JldHVybntsb2NhdGlvbjpuLG1lc3NhZ2U6aX19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gJGUuZGVmaW5lZChpKSYmQUUuaXMoaS5sb2NhdGlvbikmJiRlLnN0cmluZyhpLm1lc3NhZ2UpfW8ociwiaXMiKSx0LmlzPXJ9KSh6TXx8KHpNPXt9KSk7KGZ1bmN0aW9uKHQpe3QuRXJyb3I9MSx0Lldhcm5pbmc9Mix0LkluZm9ybWF0aW9uPTMsdC5IaW50PTR9KShqbGV8fChqbGU9e30pKTsoZnVuY3Rpb24odCl7dC5Vbm5lY2Vzc2FyeT0xLHQuRGVwcmVjYXRlZD0yfSkoS2xlfHwoS2xlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUocil7bGV0IG49cjtyZXR1cm4gJGUub2JqZWN0TGl0ZXJhbChuKSYmJGUuc3RyaW5nKG4uaHJlZil9byhlLCJpcyIpLHQuaXM9ZX0pKFFsZXx8KFFsZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSxhLHMsbCx1KXtsZXQgaD17cmFuZ2U6bixtZXNzYWdlOml9O3JldHVybiAkZS5kZWZpbmVkKGEpJiYoaC5zZXZlcml0eT1hKSwkZS5kZWZpbmVkKHMpJiYoaC5jb2RlPXMpLCRlLmRlZmluZWQobCkmJihoLnNvdXJjZT1sKSwkZS5kZWZpbmVkKHUpJiYoaC5yZWxhdGVkSW5mb3JtYXRpb249dSksaH1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXt2YXIgaTtsZXQgYT1uO3JldHVybiAkZS5kZWZpbmVkKGEpJiZCci5pcyhhLnJhbmdlKSYmJGUuc3RyaW5nKGEubWVzc2FnZSkmJigkZS5udW1iZXIoYS5zZXZlcml0eSl8fCRlLnVuZGVmaW5lZChhLnNldmVyaXR5KSkmJigkZS5pbnRlZ2VyKGEuY29kZSl8fCRlLnN0cmluZyhhLmNvZGUpfHwkZS51bmRlZmluZWQoYS5jb2RlKSkmJigkZS51bmRlZmluZWQoYS5jb2RlRGVzY3JpcHRpb24pfHwkZS5zdHJpbmcoKGk9YS5jb2RlRGVzY3JpcHRpb24pPT09bnVsbHx8aT09PXZvaWQgMD92b2lkIDA6aS5ocmVmKSkmJigkZS5zdHJpbmcoYS5zb3VyY2UpfHwkZS51bmRlZmluZWQoYS5zb3VyY2UpKSYmKCRlLnVuZGVmaW5lZChhLnJlbGF0ZWRJbmZvcm1hdGlvbil8fCRlLnR5cGVkQXJyYXkoYS5yZWxhdGVkSW5mb3JtYXRpb24sek0uaXMpKX1vKHIsImlzIiksdC5pcz1yfSkoX0V8fChfRT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSwuLi5hKXtsZXQgcz17dGl0bGU6bixjb21tYW5kOml9O3JldHVybiAkZS5kZWZpbmVkKGEpJiZhLmxlbmd0aD4wJiYocy5hcmd1bWVudHM9YSksc31vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiAkZS5kZWZpbmVkKGkpJiYkZS5zdHJpbmcoaS50aXRsZSkmJiRlLnN0cmluZyhpLmNvbW1hbmQpfW8ociwiaXMiKSx0LmlzPXJ9KShoMXx8KGgxPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoYSxzKXtyZXR1cm57cmFuZ2U6YSxuZXdUZXh0OnN9fW8oZSwicmVwbGFjZSIpLHQucmVwbGFjZT1lO2Z1bmN0aW9uIHIoYSxzKXtyZXR1cm57cmFuZ2U6e3N0YXJ0OmEsZW5kOmF9LG5ld1RleHQ6c319byhyLCJpbnNlcnQiKSx0Lmluc2VydD1yO2Z1bmN0aW9uIG4oYSl7cmV0dXJue3JhbmdlOmEsbmV3VGV4dDoiIn19byhuLCJkZWwiKSx0LmRlbD1uO2Z1bmN0aW9uIGkoYSl7bGV0IHM9YTtyZXR1cm4gJGUub2JqZWN0TGl0ZXJhbChzKSYmJGUuc3RyaW5nKHMubmV3VGV4dCkmJkJyLmlzKHMucmFuZ2UpfW8oaSwiaXMiKSx0LmlzPWl9KShmMXx8KGYxPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpLGEpe2xldCBzPXtsYWJlbDpufTtyZXR1cm4gaSE9PXZvaWQgMCYmKHMubmVlZHNDb25maXJtYXRpb249aSksYSE9PXZvaWQgMCYmKHMuZGVzY3JpcHRpb249YSksc31vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiAkZS5vYmplY3RMaXRlcmFsKGkpJiYkZS5zdHJpbmcoaS5sYWJlbCkmJigkZS5ib29sZWFuKGkubmVlZHNDb25maXJtYXRpb24pfHxpLm5lZWRzQ29uZmlybWF0aW9uPT09dm9pZCAwKSYmKCRlLnN0cmluZyhpLmRlc2NyaXB0aW9uKXx8aS5kZXNjcmlwdGlvbj09PXZvaWQgMCl9byhyLCJpcyIpLHQuaXM9cn0pKEdNfHwoR009e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyKXtsZXQgbj1yO3JldHVybiAkZS5zdHJpbmcobil9byhlLCJpcyIpLHQuaXM9ZX0pKGQxfHwoZDE9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShhLHMsbCl7cmV0dXJue3JhbmdlOmEsbmV3VGV4dDpzLGFubm90YXRpb25JZDpsfX1vKGUsInJlcGxhY2UiKSx0LnJlcGxhY2U9ZTtmdW5jdGlvbiByKGEscyxsKXtyZXR1cm57cmFuZ2U6e3N0YXJ0OmEsZW5kOmF9LG5ld1RleHQ6cyxhbm5vdGF0aW9uSWQ6bH19byhyLCJpbnNlcnQiKSx0Lmluc2VydD1yO2Z1bmN0aW9uIG4oYSxzKXtyZXR1cm57cmFuZ2U6YSxuZXdUZXh0OiIiLGFubm90YXRpb25JZDpzfX1vKG4sImRlbCIpLHQuZGVsPW47ZnVuY3Rpb24gaShhKXtsZXQgcz1hO3JldHVybiBmMS5pcyhzKSYmKEdNLmlzKHMuYW5ub3RhdGlvbklkKXx8ZDEuaXMocy5hbm5vdGF0aW9uSWQpKX1vKGksImlzIiksdC5pcz1pfSkoWmxlfHwoWmxlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpKXtyZXR1cm57dGV4dERvY3VtZW50Om4sZWRpdHM6aX19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gJGUuZGVmaW5lZChpKSYmWU0uaXMoaS50ZXh0RG9jdW1lbnQpJiZBcnJheS5pc0FycmF5KGkuZWRpdHMpfW8ociwiaXMiKSx0LmlzPXJ9KShWTXx8KFZNPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpLGEpe2xldCBzPXtraW5kOiJjcmVhdGUiLHVyaTpufTtyZXR1cm4gaSE9PXZvaWQgMCYmKGkub3ZlcndyaXRlIT09dm9pZCAwfHxpLmlnbm9yZUlmRXhpc3RzIT09dm9pZCAwKSYmKHMub3B0aW9ucz1pKSxhIT09dm9pZCAwJiYocy5hbm5vdGF0aW9uSWQ9YSksc31vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiBpJiZpLmtpbmQ9PT0iY3JlYXRlIiYmJGUuc3RyaW5nKGkudXJpKSYmKGkub3B0aW9ucz09PXZvaWQgMHx8KGkub3B0aW9ucy5vdmVyd3JpdGU9PT12b2lkIDB8fCRlLmJvb2xlYW4oaS5vcHRpb25zLm92ZXJ3cml0ZSkpJiYoaS5vcHRpb25zLmlnbm9yZUlmRXhpc3RzPT09dm9pZCAwfHwkZS5ib29sZWFuKGkub3B0aW9ucy5pZ25vcmVJZkV4aXN0cykpKSYmKGkuYW5ub3RhdGlvbklkPT09dm9pZCAwfHxkMS5pcyhpLmFubm90YXRpb25JZCkpfW8ociwiaXMiKSx0LmlzPXJ9KShVTXx8KFVNPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpLGEscyl7bGV0IGw9e2tpbmQ6InJlbmFtZSIsb2xkVXJpOm4sbmV3VXJpOml9O3JldHVybiBhIT09dm9pZCAwJiYoYS5vdmVyd3JpdGUhPT12b2lkIDB8fGEuaWdub3JlSWZFeGlzdHMhPT12b2lkIDApJiYobC5vcHRpb25zPWEpLHMhPT12b2lkIDAmJihsLmFubm90YXRpb25JZD1zKSxsfW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIGkmJmkua2luZD09PSJyZW5hbWUiJiYkZS5zdHJpbmcoaS5vbGRVcmkpJiYkZS5zdHJpbmcoaS5uZXdVcmkpJiYoaS5vcHRpb25zPT09dm9pZCAwfHwoaS5vcHRpb25zLm92ZXJ3cml0ZT09PXZvaWQgMHx8JGUuYm9vbGVhbihpLm9wdGlvbnMub3ZlcndyaXRlKSkmJihpLm9wdGlvbnMuaWdub3JlSWZFeGlzdHM9PT12b2lkIDB8fCRlLmJvb2xlYW4oaS5vcHRpb25zLmlnbm9yZUlmRXhpc3RzKSkpJiYoaS5hbm5vdGF0aW9uSWQ9PT12b2lkIDB8fGQxLmlzKGkuYW5ub3RhdGlvbklkKSl9byhyLCJpcyIpLHQuaXM9cn0pKEhNfHwoSE09e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGksYSl7bGV0IHM9e2tpbmQ6ImRlbGV0ZSIsdXJpOm59O3JldHVybiBpIT09dm9pZCAwJiYoaS5yZWN1cnNpdmUhPT12b2lkIDB8fGkuaWdub3JlSWZOb3RFeGlzdHMhPT12b2lkIDApJiYocy5vcHRpb25zPWkpLGEhPT12b2lkIDAmJihzLmFubm90YXRpb25JZD1hKSxzfW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIGkmJmkua2luZD09PSJkZWxldGUiJiYkZS5zdHJpbmcoaS51cmkpJiYoaS5vcHRpb25zPT09dm9pZCAwfHwoaS5vcHRpb25zLnJlY3Vyc2l2ZT09PXZvaWQgMHx8JGUuYm9vbGVhbihpLm9wdGlvbnMucmVjdXJzaXZlKSkmJihpLm9wdGlvbnMuaWdub3JlSWZOb3RFeGlzdHM9PT12b2lkIDB8fCRlLmJvb2xlYW4oaS5vcHRpb25zLmlnbm9yZUlmTm90RXhpc3RzKSkpJiYoaS5hbm5vdGF0aW9uSWQ9PT12b2lkIDB8fGQxLmlzKGkuYW5ub3RhdGlvbklkKSl9byhyLCJpcyIpLHQuaXM9cn0pKFdNfHwoV009e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyKXtsZXQgbj1yO3JldHVybiBuJiYobi5jaGFuZ2VzIT09dm9pZCAwfHxuLmRvY3VtZW50Q2hhbmdlcyE9PXZvaWQgMCkmJihuLmRvY3VtZW50Q2hhbmdlcz09PXZvaWQgMHx8bi5kb2N1bWVudENoYW5nZXMuZXZlcnkoaT0+JGUuc3RyaW5nKGkua2luZCk/VU0uaXMoaSl8fEhNLmlzKGkpfHxXTS5pcyhpKTpWTS5pcyhpKSkpfW8oZSwiaXMiKSx0LmlzPWV9KShxTXx8KHFNPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobil7cmV0dXJue3VyaTpufX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiAkZS5kZWZpbmVkKGkpJiYkZS5zdHJpbmcoaS51cmkpfW8ociwiaXMiKSx0LmlzPXJ9KShKbGV8fChKbGU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGkpe3JldHVybnt1cmk6bix2ZXJzaW9uOml9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuICRlLmRlZmluZWQoaSkmJiRlLnN0cmluZyhpLnVyaSkmJiRlLmludGVnZXIoaS52ZXJzaW9uKX1vKHIsImlzIiksdC5pcz1yfSkoZWNlfHwoZWNlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpKXtyZXR1cm57dXJpOm4sdmVyc2lvbjppfX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiAkZS5kZWZpbmVkKGkpJiYkZS5zdHJpbmcoaS51cmkpJiYoaS52ZXJzaW9uPT09bnVsbHx8JGUuaW50ZWdlcihpLnZlcnNpb24pKX1vKHIsImlzIiksdC5pcz1yfSkoWU18fChZTT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSxhLHMpe3JldHVybnt1cmk6bixsYW5ndWFnZUlkOmksdmVyc2lvbjphLHRleHQ6c319byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gJGUuZGVmaW5lZChpKSYmJGUuc3RyaW5nKGkudXJpKSYmJGUuc3RyaW5nKGkubGFuZ3VhZ2VJZCkmJiRlLmludGVnZXIoaS52ZXJzaW9uKSYmJGUuc3RyaW5nKGkudGV4dCl9byhyLCJpcyIpLHQuaXM9cn0pKHRjZXx8KHRjZT17fSkpOyhmdW5jdGlvbih0KXt0LlBsYWluVGV4dD0icGxhaW50ZXh0Iix0Lk1hcmtkb3duPSJtYXJrZG93biI7ZnVuY3Rpb24gZShyKXtsZXQgbj1yO3JldHVybiBuPT09dC5QbGFpblRleHR8fG49PT10Lk1hcmtkb3dufW8oZSwiaXMiKSx0LmlzPWV9KShYTXx8KFhNPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUocil7bGV0IG49cjtyZXR1cm4gJGUub2JqZWN0TGl0ZXJhbChyKSYmWE0uaXMobi5raW5kKSYmJGUuc3RyaW5nKG4udmFsdWUpfW8oZSwiaXMiKSx0LmlzPWV9KShJeHx8KEl4PXt9KSk7KGZ1bmN0aW9uKHQpe3QuVGV4dD0xLHQuTWV0aG9kPTIsdC5GdW5jdGlvbj0zLHQuQ29uc3RydWN0b3I9NCx0LkZpZWxkPTUsdC5WYXJpYWJsZT02LHQuQ2xhc3M9Nyx0LkludGVyZmFjZT04LHQuTW9kdWxlPTksdC5Qcm9wZXJ0eT0xMCx0LlVuaXQ9MTEsdC5WYWx1ZT0xMix0LkVudW09MTMsdC5LZXl3b3JkPTE0LHQuU25pcHBldD0xNSx0LkNvbG9yPTE2LHQuRmlsZT0xNyx0LlJlZmVyZW5jZT0xOCx0LkZvbGRlcj0xOSx0LkVudW1NZW1iZXI9MjAsdC5Db25zdGFudD0yMSx0LlN0cnVjdD0yMix0LkV2ZW50PTIzLHQuT3BlcmF0b3I9MjQsdC5UeXBlUGFyYW1ldGVyPTI1fSkocmNlfHwocmNlPXt9KSk7KGZ1bmN0aW9uKHQpe3QuUGxhaW5UZXh0PTEsdC5TbmlwcGV0PTJ9KShuY2V8fChuY2U9e30pKTsoZnVuY3Rpb24odCl7dC5EZXByZWNhdGVkPTF9KShpY2V8fChpY2U9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGksYSl7cmV0dXJue25ld1RleHQ6bixpbnNlcnQ6aSxyZXBsYWNlOmF9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIGkmJiRlLnN0cmluZyhpLm5ld1RleHQpJiZCci5pcyhpLmluc2VydCkmJkJyLmlzKGkucmVwbGFjZSl9byhyLCJpcyIpLHQuaXM9cn0pKGFjZXx8KGFjZT17fSkpOyhmdW5jdGlvbih0KXt0LmFzSXM9MSx0LmFkanVzdEluZGVudGF0aW9uPTJ9KShzY2V8fChzY2U9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyKXtsZXQgbj1yO3JldHVybiBuJiYoJGUuc3RyaW5nKG4uZGV0YWlsKXx8bi5kZXRhaWw9PT12b2lkIDApJiYoJGUuc3RyaW5nKG4uZGVzY3JpcHRpb24pfHxuLmRlc2NyaXB0aW9uPT09dm9pZCAwKX1vKGUsImlzIiksdC5pcz1lfSkob2NlfHwob2NlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUocil7cmV0dXJue2xhYmVsOnJ9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZX0pKGxjZXx8KGxjZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHIsbil7cmV0dXJue2l0ZW1zOnJ8fFtdLGlzSW5jb21wbGV0ZTohIW59fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZX0pKGNjZXx8KGNjZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4pe3JldHVybiBuLnJlcGxhY2UoL1tcXGAqX3t9W1xdKCkjK1wtLiFdL2csIlxcJCYiKX1vKGUsImZyb21QbGFpblRleHQiKSx0LmZyb21QbGFpblRleHQ9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuICRlLnN0cmluZyhpKXx8JGUub2JqZWN0TGl0ZXJhbChpKSYmJGUuc3RyaW5nKGkubGFuZ3VhZ2UpJiYkZS5zdHJpbmcoaS52YWx1ZSl9byhyLCJpcyIpLHQuaXM9cn0pKERFfHwoREU9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyKXtsZXQgbj1yO3JldHVybiEhbiYmJGUub2JqZWN0TGl0ZXJhbChuKSYmKEl4LmlzKG4uY29udGVudHMpfHxERS5pcyhuLmNvbnRlbnRzKXx8JGUudHlwZWRBcnJheShuLmNvbnRlbnRzLERFLmlzKSkmJihyLnJhbmdlPT09dm9pZCAwfHxCci5pcyhyLnJhbmdlKSl9byhlLCJpcyIpLHQuaXM9ZX0pKHVjZXx8KHVjZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHIsbil7cmV0dXJuIG4/e2xhYmVsOnIsZG9jdW1lbnRhdGlvbjpufTp7bGFiZWw6cn19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lfSkoaGNlfHwoaGNlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUocixuLC4uLmkpe2xldCBhPXtsYWJlbDpyfTtyZXR1cm4gJGUuZGVmaW5lZChuKSYmKGEuZG9jdW1lbnRhdGlvbj1uKSwkZS5kZWZpbmVkKGkpP2EucGFyYW1ldGVycz1pOmEucGFyYW1ldGVycz1bXSxhfW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZX0pKGZjZXx8KGZjZT17fSkpOyhmdW5jdGlvbih0KXt0LlRleHQ9MSx0LlJlYWQ9Mix0LldyaXRlPTN9KShkY2V8fChkY2U9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyLG4pe2xldCBpPXtyYW5nZTpyfTtyZXR1cm4gJGUubnVtYmVyKG4pJiYoaS5raW5kPW4pLGl9byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lfSkocGNlfHwocGNlPXt9KSk7KGZ1bmN0aW9uKHQpe3QuRmlsZT0xLHQuTW9kdWxlPTIsdC5OYW1lc3BhY2U9Myx0LlBhY2thZ2U9NCx0LkNsYXNzPTUsdC5NZXRob2Q9Nix0LlByb3BlcnR5PTcsdC5GaWVsZD04LHQuQ29uc3RydWN0b3I9OSx0LkVudW09MTAsdC5JbnRlcmZhY2U9MTEsdC5GdW5jdGlvbj0xMix0LlZhcmlhYmxlPTEzLHQuQ29uc3RhbnQ9MTQsdC5TdHJpbmc9MTUsdC5OdW1iZXI9MTYsdC5Cb29sZWFuPTE3LHQuQXJyYXk9MTgsdC5PYmplY3Q9MTksdC5LZXk9MjAsdC5OdWxsPTIxLHQuRW51bU1lbWJlcj0yMix0LlN0cnVjdD0yMyx0LkV2ZW50PTI0LHQuT3BlcmF0b3I9MjUsdC5UeXBlUGFyYW1ldGVyPTI2fSkobWNlfHwobWNlPXt9KSk7KGZ1bmN0aW9uKHQpe3QuRGVwcmVjYXRlZD0xfSkoZ2NlfHwoZ2NlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUocixuLGksYSxzKXtsZXQgbD17bmFtZTpyLGtpbmQ6bixsb2NhdGlvbjp7dXJpOmEscmFuZ2U6aX19O3JldHVybiBzJiYobC5jb250YWluZXJOYW1lPXMpLGx9byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lfSkoeWNlfHwoeWNlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUocixuLGksYSl7cmV0dXJuIGEhPT12b2lkIDA/e25hbWU6cixraW5kOm4sbG9jYXRpb246e3VyaTppLHJhbmdlOmF9fTp7bmFtZTpyLGtpbmQ6bixsb2NhdGlvbjp7dXJpOml9fX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWV9KSh2Y2V8fCh2Y2U9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGksYSxzLGwsdSl7bGV0IGg9e25hbWU6bixkZXRhaWw6aSxraW5kOmEscmFuZ2U6cyxzZWxlY3Rpb25SYW5nZTpsfTtyZXR1cm4gdSE9PXZvaWQgMCYmKGguY2hpbGRyZW49dSksaH1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiBpJiYkZS5zdHJpbmcoaS5uYW1lKSYmJGUubnVtYmVyKGkua2luZCkmJkJyLmlzKGkucmFuZ2UpJiZCci5pcyhpLnNlbGVjdGlvblJhbmdlKSYmKGkuZGV0YWlsPT09dm9pZCAwfHwkZS5zdHJpbmcoaS5kZXRhaWwpKSYmKGkuZGVwcmVjYXRlZD09PXZvaWQgMHx8JGUuYm9vbGVhbihpLmRlcHJlY2F0ZWQpKSYmKGkuY2hpbGRyZW49PT12b2lkIDB8fEFycmF5LmlzQXJyYXkoaS5jaGlsZHJlbikpJiYoaS50YWdzPT09dm9pZCAwfHxBcnJheS5pc0FycmF5KGkudGFncykpfW8ociwiaXMiKSx0LmlzPXJ9KSh4Y2V8fCh4Y2U9e30pKTsoZnVuY3Rpb24odCl7dC5FbXB0eT0iIix0LlF1aWNrRml4PSJxdWlja2ZpeCIsdC5SZWZhY3Rvcj0icmVmYWN0b3IiLHQuUmVmYWN0b3JFeHRyYWN0PSJyZWZhY3Rvci5leHRyYWN0Iix0LlJlZmFjdG9ySW5saW5lPSJyZWZhY3Rvci5pbmxpbmUiLHQuUmVmYWN0b3JSZXdyaXRlPSJyZWZhY3Rvci5yZXdyaXRlIix0LlNvdXJjZT0ic291cmNlIix0LlNvdXJjZU9yZ2FuaXplSW1wb3J0cz0ic291cmNlLm9yZ2FuaXplSW1wb3J0cyIsdC5Tb3VyY2VGaXhBbGw9InNvdXJjZS5maXhBbGwifSkoYmNlfHwoYmNlPXt9KSk7KGZ1bmN0aW9uKHQpe3QuSW52b2tlZD0xLHQuQXV0b21hdGljPTJ9KShMRXx8KExFPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpLGEpe2xldCBzPXtkaWFnbm9zdGljczpufTtyZXR1cm4gaSE9bnVsbCYmKHMub25seT1pKSxhIT1udWxsJiYocy50cmlnZ2VyS2luZD1hKSxzfW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuICRlLmRlZmluZWQoaSkmJiRlLnR5cGVkQXJyYXkoaS5kaWFnbm9zdGljcyxfRS5pcykmJihpLm9ubHk9PT12b2lkIDB8fCRlLnR5cGVkQXJyYXkoaS5vbmx5LCRlLnN0cmluZykpJiYoaS50cmlnZ2VyS2luZD09PXZvaWQgMHx8aS50cmlnZ2VyS2luZD09PUxFLkludm9rZWR8fGkudHJpZ2dlcktpbmQ9PT1MRS5BdXRvbWF0aWMpfW8ociwiaXMiKSx0LmlzPXJ9KShUY2V8fChUY2U9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGksYSl7bGV0IHM9e3RpdGxlOm59LGw9ITA7cmV0dXJuIHR5cGVvZiBpPT0ic3RyaW5nIj8obD0hMSxzLmtpbmQ9aSk6aDEuaXMoaSk/cy5jb21tYW5kPWk6cy5lZGl0PWksbCYmYSE9PXZvaWQgMCYmKHMua2luZD1hKSxzfW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIGkmJiRlLnN0cmluZyhpLnRpdGxlKSYmKGkuZGlhZ25vc3RpY3M9PT12b2lkIDB8fCRlLnR5cGVkQXJyYXkoaS5kaWFnbm9zdGljcyxfRS5pcykpJiYoaS5raW5kPT09dm9pZCAwfHwkZS5zdHJpbmcoaS5raW5kKSkmJihpLmVkaXQhPT12b2lkIDB8fGkuY29tbWFuZCE9PXZvaWQgMCkmJihpLmNvbW1hbmQ9PT12b2lkIDB8fGgxLmlzKGkuY29tbWFuZCkpJiYoaS5pc1ByZWZlcnJlZD09PXZvaWQgMHx8JGUuYm9vbGVhbihpLmlzUHJlZmVycmVkKSkmJihpLmVkaXQ9PT12b2lkIDB8fHFNLmlzKGkuZWRpdCkpfW8ociwiaXMiKSx0LmlzPXJ9KSh3Y2V8fCh3Y2U9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGkpe2xldCBhPXtyYW5nZTpufTtyZXR1cm4gJGUuZGVmaW5lZChpKSYmKGEuZGF0YT1pKSxhfW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuICRlLmRlZmluZWQoaSkmJkJyLmlzKGkucmFuZ2UpJiYoJGUudW5kZWZpbmVkKGkuY29tbWFuZCl8fGgxLmlzKGkuY29tbWFuZCkpfW8ociwiaXMiKSx0LmlzPXJ9KShrY2V8fChrY2U9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGkpe3JldHVybnt0YWJTaXplOm4saW5zZXJ0U3BhY2VzOml9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuICRlLmRlZmluZWQoaSkmJiRlLnVpbnRlZ2VyKGkudGFiU2l6ZSkmJiRlLmJvb2xlYW4oaS5pbnNlcnRTcGFjZXMpfW8ociwiaXMiKSx0LmlzPXJ9KShFY2V8fChFY2U9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGksYSl7cmV0dXJue3JhbmdlOm4sdGFyZ2V0OmksZGF0YTphfX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiAkZS5kZWZpbmVkKGkpJiZCci5pcyhpLnJhbmdlKSYmKCRlLnVuZGVmaW5lZChpLnRhcmdldCl8fCRlLnN0cmluZyhpLnRhcmdldCkpfW8ociwiaXMiKSx0LmlzPXJ9KShTY2V8fChTY2U9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLGkpe3JldHVybntyYW5nZTpuLHBhcmVudDppfX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWU7ZnVuY3Rpb24gcihuKXtsZXQgaT1uO3JldHVybiAkZS5vYmplY3RMaXRlcmFsKGkpJiZCci5pcyhpLnJhbmdlKSYmKGkucGFyZW50PT09dm9pZCAwfHx0LmlzKGkucGFyZW50KSl9byhyLCJpcyIpLHQuaXM9cn0pKENjZXx8KENjZT17fSkpOyhmdW5jdGlvbih0KXt0Lm5hbWVzcGFjZT0ibmFtZXNwYWNlIix0LnR5cGU9InR5cGUiLHQuY2xhc3M9ImNsYXNzIix0LmVudW09ImVudW0iLHQuaW50ZXJmYWNlPSJpbnRlcmZhY2UiLHQuc3RydWN0PSJzdHJ1Y3QiLHQudHlwZVBhcmFtZXRlcj0idHlwZVBhcmFtZXRlciIsdC5wYXJhbWV0ZXI9InBhcmFtZXRlciIsdC52YXJpYWJsZT0idmFyaWFibGUiLHQucHJvcGVydHk9InByb3BlcnR5Iix0LmVudW1NZW1iZXI9ImVudW1NZW1iZXIiLHQuZXZlbnQ9ImV2ZW50Iix0LmZ1bmN0aW9uPSJmdW5jdGlvbiIsdC5tZXRob2Q9Im1ldGhvZCIsdC5tYWNybz0ibWFjcm8iLHQua2V5d29yZD0ia2V5d29yZCIsdC5tb2RpZmllcj0ibW9kaWZpZXIiLHQuY29tbWVudD0iY29tbWVudCIsdC5zdHJpbmc9InN0cmluZyIsdC5udW1iZXI9Im51bWJlciIsdC5yZWdleHA9InJlZ2V4cCIsdC5vcGVyYXRvcj0ib3BlcmF0b3IiLHQuZGVjb3JhdG9yPSJkZWNvcmF0b3IifSkoQWNlfHwoQWNlPXt9KSk7KGZ1bmN0aW9uKHQpe3QuZGVjbGFyYXRpb249ImRlY2xhcmF0aW9uIix0LmRlZmluaXRpb249ImRlZmluaXRpb24iLHQucmVhZG9ubHk9InJlYWRvbmx5Iix0LnN0YXRpYz0ic3RhdGljIix0LmRlcHJlY2F0ZWQ9ImRlcHJlY2F0ZWQiLHQuYWJzdHJhY3Q9ImFic3RyYWN0Iix0LmFzeW5jPSJhc3luYyIsdC5tb2RpZmljYXRpb249Im1vZGlmaWNhdGlvbiIsdC5kb2N1bWVudGF0aW9uPSJkb2N1bWVudGF0aW9uIix0LmRlZmF1bHRMaWJyYXJ5PSJkZWZhdWx0TGlicmFyeSJ9KShfY2V8fChfY2U9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyKXtsZXQgbj1yO3JldHVybiAkZS5vYmplY3RMaXRlcmFsKG4pJiYobi5yZXN1bHRJZD09PXZvaWQgMHx8dHlwZW9mIG4ucmVzdWx0SWQ9PSJzdHJpbmciKSYmQXJyYXkuaXNBcnJheShuLmRhdGEpJiYobi5kYXRhLmxlbmd0aD09PTB8fHR5cGVvZiBuLmRhdGFbMF09PSJudW1iZXIiKX1vKGUsImlzIiksdC5pcz1lfSkoRGNlfHwoRGNlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpKXtyZXR1cm57cmFuZ2U6bix0ZXh0Oml9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIGkhPW51bGwmJkJyLmlzKGkucmFuZ2UpJiYkZS5zdHJpbmcoaS50ZXh0KX1vKHIsImlzIiksdC5pcz1yfSkoTGNlfHwoTGNlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpLGEpe3JldHVybntyYW5nZTpuLHZhcmlhYmxlTmFtZTppLGNhc2VTZW5zaXRpdmVMb29rdXA6YX19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gaSE9bnVsbCYmQnIuaXMoaS5yYW5nZSkmJiRlLmJvb2xlYW4oaS5jYXNlU2Vuc2l0aXZlTG9va3VwKSYmKCRlLnN0cmluZyhpLnZhcmlhYmxlTmFtZSl8fGkudmFyaWFibGVOYW1lPT09dm9pZCAwKX1vKHIsImlzIiksdC5pcz1yfSkoUmNlfHwoUmNlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobixpKXtyZXR1cm57cmFuZ2U6bixleHByZXNzaW9uOml9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuIGkhPW51bGwmJkJyLmlzKGkucmFuZ2UpJiYoJGUuc3RyaW5nKGkuZXhwcmVzc2lvbil8fGkuZXhwcmVzc2lvbj09PXZvaWQgMCl9byhyLCJpcyIpLHQuaXM9cn0pKE5jZXx8KE5jZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSl7cmV0dXJue2ZyYW1lSWQ6bixzdG9wcGVkTG9jYXRpb246aX19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gJGUuZGVmaW5lZChpKSYmQnIuaXMobi5zdG9wcGVkTG9jYXRpb24pfW8ociwiaXMiKSx0LmlzPXJ9KShNY2V8fChNY2U9e30pKTsoZnVuY3Rpb24odCl7dC5UeXBlPTEsdC5QYXJhbWV0ZXI9MjtmdW5jdGlvbiBlKHIpe3JldHVybiByPT09MXx8cj09PTJ9byhlLCJpcyIpLHQuaXM9ZX0pKGpNfHwoak09e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuKXtyZXR1cm57dmFsdWU6bn19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lO2Z1bmN0aW9uIHIobil7bGV0IGk9bjtyZXR1cm4gJGUub2JqZWN0TGl0ZXJhbChpKSYmKGkudG9vbHRpcD09PXZvaWQgMHx8JGUuc3RyaW5nKGkudG9vbHRpcCl8fEl4LmlzKGkudG9vbHRpcCkpJiYoaS5sb2NhdGlvbj09PXZvaWQgMHx8QUUuaXMoaS5sb2NhdGlvbikpJiYoaS5jb21tYW5kPT09dm9pZCAwfHxoMS5pcyhpLmNvbW1hbmQpKX1vKHIsImlzIiksdC5pcz1yfSkoS018fChLTT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSxhKXtsZXQgcz17cG9zaXRpb246bixsYWJlbDppfTtyZXR1cm4gYSE9PXZvaWQgMCYmKHMua2luZD1hKSxzfW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKG4pe2xldCBpPW47cmV0dXJuICRlLm9iamVjdExpdGVyYWwoaSkmJmpyLmlzKGkucG9zaXRpb24pJiYoJGUuc3RyaW5nKGkubGFiZWwpfHwkZS50eXBlZEFycmF5KGkubGFiZWwsS00uaXMpKSYmKGkua2luZD09PXZvaWQgMHx8ak0uaXMoaS5raW5kKSkmJmkudGV4dEVkaXRzPT09dm9pZCAwfHwkZS50eXBlZEFycmF5KGkudGV4dEVkaXRzLGYxLmlzKSYmKGkudG9vbHRpcD09PXZvaWQgMHx8JGUuc3RyaW5nKGkudG9vbHRpcCl8fEl4LmlzKGkudG9vbHRpcCkpJiYoaS5wYWRkaW5nTGVmdD09PXZvaWQgMHx8JGUuYm9vbGVhbihpLnBhZGRpbmdMZWZ0KSkmJihpLnBhZGRpbmdSaWdodD09PXZvaWQgMHx8JGUuYm9vbGVhbihpLnBhZGRpbmdSaWdodCkpfW8ociwiaXMiKSx0LmlzPXJ9KShJY2V8fChJY2U9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyKXtyZXR1cm57a2luZDoic25pcHBldCIsdmFsdWU6cn19byhlLCJjcmVhdGVTbmlwcGV0IiksdC5jcmVhdGVTbmlwcGV0PWV9KShPY2V8fChPY2U9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyLG4saSxhKXtyZXR1cm57aW5zZXJ0VGV4dDpyLGZpbHRlclRleHQ6bixyYW5nZTppLGNvbW1hbmQ6YX19byhlLCJjcmVhdGUiKSx0LmNyZWF0ZT1lfSkoUGNlfHwoUGNlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUocil7cmV0dXJue2l0ZW1zOnJ9fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZX0pKEJjZXx8KEJjZT17fSkpOyhmdW5jdGlvbih0KXt0Lkludm9rZWQ9MCx0LkF1dG9tYXRpYz0xfSkoRmNlfHwoRmNlPXt9KSk7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUocixuKXtyZXR1cm57cmFuZ2U6cix0ZXh0Om59fW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZX0pKCRjZXx8KCRjZT17fSkpOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHIsbil7cmV0dXJue3RyaWdnZXJLaW5kOnIsc2VsZWN0ZWRDb21wbGV0aW9uSW5mbzpufX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWV9KSh6Y2V8fCh6Y2U9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyKXtsZXQgbj1yO3JldHVybiAkZS5vYmplY3RMaXRlcmFsKG4pJiZGTS5pcyhuLnVyaSkmJiRlLnN0cmluZyhuLm5hbWUpfW8oZSwiaXMiKSx0LmlzPWV9KShHY2V8fChHY2U9e30pKTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShhLHMsbCx1KXtyZXR1cm4gbmV3IFFNKGEscyxsLHUpfW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKGEpe2xldCBzPWE7cmV0dXJuISEoJGUuZGVmaW5lZChzKSYmJGUuc3RyaW5nKHMudXJpKSYmKCRlLnVuZGVmaW5lZChzLmxhbmd1YWdlSWQpfHwkZS5zdHJpbmcocy5sYW5ndWFnZUlkKSkmJiRlLnVpbnRlZ2VyKHMubGluZUNvdW50KSYmJGUuZnVuYyhzLmdldFRleHQpJiYkZS5mdW5jKHMucG9zaXRpb25BdCkmJiRlLmZ1bmMocy5vZmZzZXRBdCkpfW8ociwiaXMiKSx0LmlzPXI7ZnVuY3Rpb24gbihhLHMpe2xldCBsPWEuZ2V0VGV4dCgpLHU9aShzLChmLGQpPT57bGV0IHA9Zi5yYW5nZS5zdGFydC5saW5lLWQucmFuZ2Uuc3RhcnQubGluZTtyZXR1cm4gcD09PTA/Zi5yYW5nZS5zdGFydC5jaGFyYWN0ZXItZC5yYW5nZS5zdGFydC5jaGFyYWN0ZXI6cH0pLGg9bC5sZW5ndGg7Zm9yKGxldCBmPXUubGVuZ3RoLTE7Zj49MDtmLS0pe2xldCBkPXVbZl0scD1hLm9mZnNldEF0KGQucmFuZ2Uuc3RhcnQpLG09YS5vZmZzZXRBdChkLnJhbmdlLmVuZCk7aWYobTw9aClsPWwuc3Vic3RyaW5nKDAscCkrZC5uZXdUZXh0K2wuc3Vic3RyaW5nKG0sbC5sZW5ndGgpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJPdmVybGFwcGluZyBlZGl0Iik7aD1wfXJldHVybiBsfW8obiwiYXBwbHlFZGl0cyIpLHQuYXBwbHlFZGl0cz1uO2Z1bmN0aW9uIGkoYSxzKXtpZihhLmxlbmd0aDw9MSlyZXR1cm4gYTtsZXQgbD1hLmxlbmd0aC8yfDAsdT1hLnNsaWNlKDAsbCksaD1hLnNsaWNlKGwpO2kodSxzKSxpKGgscyk7bGV0IGY9MCxkPTAscD0wO2Zvcig7Zjx1Lmxlbmd0aCYmZDxoLmxlbmd0aDspcyh1W2ZdLGhbZF0pPD0wP2FbcCsrXT11W2YrK106YVtwKytdPWhbZCsrXTtmb3IoO2Y8dS5sZW5ndGg7KWFbcCsrXT11W2YrK107Zm9yKDtkPGgubGVuZ3RoOylhW3ArK109aFtkKytdO3JldHVybiBhfW8oaSwibWVyZ2VTb3J0Iil9KShWY2V8fChWY2U9e30pKTtRTT1jbGFzc3tzdGF0aWN7byh0aGlzLCJGdWxsVGV4dERvY3VtZW50Iil9Y29uc3RydWN0b3IoZSxyLG4saSl7dGhpcy5fdXJpPWUsdGhpcy5fbGFuZ3VhZ2VJZD1yLHRoaXMuX3ZlcnNpb249bix0aGlzLl9jb250ZW50PWksdGhpcy5fbGluZU9mZnNldHM9dm9pZCAwfWdldCB1cmkoKXtyZXR1cm4gdGhpcy5fdXJpfWdldCBsYW5ndWFnZUlkKCl7cmV0dXJuIHRoaXMuX2xhbmd1YWdlSWR9Z2V0IHZlcnNpb24oKXtyZXR1cm4gdGhpcy5fdmVyc2lvbn1nZXRUZXh0KGUpe2lmKGUpe2xldCByPXRoaXMub2Zmc2V0QXQoZS5zdGFydCksbj10aGlzLm9mZnNldEF0KGUuZW5kKTtyZXR1cm4gdGhpcy5fY29udGVudC5zdWJzdHJpbmcocixuKX1yZXR1cm4gdGhpcy5fY29udGVudH11cGRhdGUoZSxyKXt0aGlzLl9jb250ZW50PWUudGV4dCx0aGlzLl92ZXJzaW9uPXIsdGhpcy5fbGluZU9mZnNldHM9dm9pZCAwfWdldExpbmVPZmZzZXRzKCl7aWYodGhpcy5fbGluZU9mZnNldHM9PT12b2lkIDApe2xldCBlPVtdLHI9dGhpcy5fY29udGVudCxuPSEwO2ZvcihsZXQgaT0wO2k8ci5sZW5ndGg7aSsrKXtuJiYoZS5wdXNoKGkpLG49ITEpO2xldCBhPXIuY2hhckF0KGkpO249YT09PSJcciJ8fGE9PT1gCmAsYT09PSJcciImJmkrMTxyLmxlbmd0aCYmci5jaGFyQXQoaSsxKT09PWAKYCYmaSsrfW4mJnIubGVuZ3RoPjAmJmUucHVzaChyLmxlbmd0aCksdGhpcy5fbGluZU9mZnNldHM9ZX1yZXR1cm4gdGhpcy5fbGluZU9mZnNldHN9cG9zaXRpb25BdChlKXtlPU1hdGgubWF4KE1hdGgubWluKGUsdGhpcy5fY29udGVudC5sZW5ndGgpLDApO2xldCByPXRoaXMuZ2V0TGluZU9mZnNldHMoKSxuPTAsaT1yLmxlbmd0aDtpZihpPT09MClyZXR1cm4ganIuY3JlYXRlKDAsZSk7Zm9yKDtuPGk7KXtsZXQgcz1NYXRoLmZsb29yKChuK2kpLzIpO3Jbc10+ZT9pPXM6bj1zKzF9bGV0IGE9bi0xO3JldHVybiBqci5jcmVhdGUoYSxlLXJbYV0pfW9mZnNldEF0KGUpe2xldCByPXRoaXMuZ2V0TGluZU9mZnNldHMoKTtpZihlLmxpbmU+PXIubGVuZ3RoKXJldHVybiB0aGlzLl9jb250ZW50Lmxlbmd0aDtpZihlLmxpbmU8MClyZXR1cm4gMDtsZXQgbj1yW2UubGluZV0saT1lLmxpbmUrMTxyLmxlbmd0aD9yW2UubGluZSsxXTp0aGlzLl9jb250ZW50Lmxlbmd0aDtyZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4obitlLmNoYXJhY3RlcixpKSxuKX1nZXQgbGluZUNvdW50KCl7cmV0dXJuIHRoaXMuZ2V0TGluZU9mZnNldHMoKS5sZW5ndGh9fTsoZnVuY3Rpb24odCl7bGV0IGU9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztmdW5jdGlvbiByKG0pe3JldHVybiB0eXBlb2YgbTwidSJ9byhyLCJkZWZpbmVkIiksdC5kZWZpbmVkPXI7ZnVuY3Rpb24gbihtKXtyZXR1cm4gdHlwZW9mIG0+InUifW8obiwidW5kZWZpbmVkIiksdC51bmRlZmluZWQ9bjtmdW5jdGlvbiBpKG0pe3JldHVybiBtPT09ITB8fG09PT0hMX1vKGksImJvb2xlYW4iKSx0LmJvb2xlYW49aTtmdW5jdGlvbiBhKG0pe3JldHVybiBlLmNhbGwobSk9PT0iW29iamVjdCBTdHJpbmddIn1vKGEsInN0cmluZyIpLHQuc3RyaW5nPWE7ZnVuY3Rpb24gcyhtKXtyZXR1cm4gZS5jYWxsKG0pPT09IltvYmplY3QgTnVtYmVyXSJ9byhzLCJudW1iZXIiKSx0Lm51bWJlcj1zO2Z1bmN0aW9uIGwobSxnLHkpe3JldHVybiBlLmNhbGwobSk9PT0iW29iamVjdCBOdW1iZXJdIiYmZzw9bSYmbTw9eX1vKGwsIm51bWJlclJhbmdlIiksdC5udW1iZXJSYW5nZT1sO2Z1bmN0aW9uIHUobSl7cmV0dXJuIGUuY2FsbChtKT09PSJbb2JqZWN0IE51bWJlcl0iJiYtMjE0NzQ4MzY0ODw9bSYmbTw9MjE0NzQ4MzY0N31vKHUsImludGVnZXIiKSx0LmludGVnZXI9dTtmdW5jdGlvbiBoKG0pe3JldHVybiBlLmNhbGwobSk9PT0iW29iamVjdCBOdW1iZXJdIiYmMDw9bSYmbTw9MjE0NzQ4MzY0N31vKGgsInVpbnRlZ2VyIiksdC51aW50ZWdlcj1oO2Z1bmN0aW9uIGYobSl7cmV0dXJuIGUuY2FsbChtKT09PSJbb2JqZWN0IEZ1bmN0aW9uXSJ9byhmLCJmdW5jIiksdC5mdW5jPWY7ZnVuY3Rpb24gZChtKXtyZXR1cm4gbSE9PW51bGwmJnR5cGVvZiBtPT0ib2JqZWN0In1vKGQsIm9iamVjdExpdGVyYWwiKSx0Lm9iamVjdExpdGVyYWw9ZDtmdW5jdGlvbiBwKG0sZyl7cmV0dXJuIEFycmF5LmlzQXJyYXkobSkmJm0uZXZlcnkoZyl9byhwLCJ0eXBlZEFycmF5IiksdC50eXBlZEFycmF5PXB9KSgkZXx8KCRlPXt9KSl9KTt2YXIgT3gsUHgsRXAsU3AsSk0scDEsUkU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtaTSgpO09sKCk7T3g9Y2xhc3N7c3RhdGlje28odGhpcywiQ3N0Tm9kZUJ1aWxkZXIiKX1jb25zdHJ1Y3Rvcigpe3RoaXMubm9kZVN0YWNrPVtdfWdldCBjdXJyZW50KCl7dmFyIGU7cmV0dXJuKGU9dGhpcy5ub2RlU3RhY2tbdGhpcy5ub2RlU3RhY2subGVuZ3RoLTFdKSE9PW51bGwmJmUhPT12b2lkIDA/ZTp0aGlzLnJvb3ROb2RlfWJ1aWxkUm9vdE5vZGUoZSl7cmV0dXJuIHRoaXMucm9vdE5vZGU9bmV3IHAxKGUpLHRoaXMucm9vdE5vZGUucm9vdD10aGlzLnJvb3ROb2RlLHRoaXMubm9kZVN0YWNrPVt0aGlzLnJvb3ROb2RlXSx0aGlzLnJvb3ROb2RlfWJ1aWxkQ29tcG9zaXRlTm9kZShlKXtsZXQgcj1uZXcgU3A7cmV0dXJuIHIuZ3JhbW1hclNvdXJjZT1lLHIucm9vdD10aGlzLnJvb3ROb2RlLHRoaXMuY3VycmVudC5jb250ZW50LnB1c2gociksdGhpcy5ub2RlU3RhY2sucHVzaChyKSxyfWJ1aWxkTGVhZk5vZGUoZSxyKXtsZXQgbj1uZXcgRXAoZS5zdGFydE9mZnNldCxlLmltYWdlLmxlbmd0aCxLbShlKSxlLnRva2VuVHlwZSwhcik7cmV0dXJuIG4uZ3JhbW1hclNvdXJjZT1yLG4ucm9vdD10aGlzLnJvb3ROb2RlLHRoaXMuY3VycmVudC5jb250ZW50LnB1c2gobiksbn1yZW1vdmVOb2RlKGUpe2xldCByPWUuY29udGFpbmVyO2lmKHIpe2xldCBuPXIuY29udGVudC5pbmRleE9mKGUpO24+PTAmJnIuY29udGVudC5zcGxpY2UobiwxKX19YWRkSGlkZGVuTm9kZXMoZSl7bGV0IHI9W107Zm9yKGxldCBhIG9mIGUpe2xldCBzPW5ldyBFcChhLnN0YXJ0T2Zmc2V0LGEuaW1hZ2UubGVuZ3RoLEttKGEpLGEudG9rZW5UeXBlLCEwKTtzLnJvb3Q9dGhpcy5yb290Tm9kZSxyLnB1c2gocyl9bGV0IG49dGhpcy5jdXJyZW50LGk9ITE7aWYobi5jb250ZW50Lmxlbmd0aD4wKXtuLmNvbnRlbnQucHVzaCguLi5yKTtyZXR1cm59Zm9yKDtuLmNvbnRhaW5lcjspe2xldCBhPW4uY29udGFpbmVyLmNvbnRlbnQuaW5kZXhPZihuKTtpZihhPjApe24uY29udGFpbmVyLmNvbnRlbnQuc3BsaWNlKGEsMCwuLi5yKSxpPSEwO2JyZWFrfW49bi5jb250YWluZXJ9aXx8dGhpcy5yb290Tm9kZS5jb250ZW50LnVuc2hpZnQoLi4ucil9Y29uc3RydWN0KGUpe2xldCByPXRoaXMuY3VycmVudDt0eXBlb2YgZS4kdHlwZT09InN0cmluZyImJih0aGlzLmN1cnJlbnQuYXN0Tm9kZT1lKSxlLiRjc3ROb2RlPXI7bGV0IG49dGhpcy5ub2RlU3RhY2sucG9wKCk7bj8uY29udGVudC5sZW5ndGg9PT0wJiZ0aGlzLnJlbW92ZU5vZGUobil9fSxQeD1jbGFzc3tzdGF0aWN7byh0aGlzLCJBYnN0cmFjdENzdE5vZGUiKX1nZXQgcGFyZW50KCl7cmV0dXJuIHRoaXMuY29udGFpbmVyfWdldCBmZWF0dXJlKCl7cmV0dXJuIHRoaXMuZ3JhbW1hclNvdXJjZX1nZXQgaGlkZGVuKCl7cmV0dXJuITF9Z2V0IGFzdE5vZGUoKXt2YXIgZSxyO2xldCBuPXR5cGVvZigoZT10aGlzLl9hc3ROb2RlKT09PW51bGx8fGU9PT12b2lkIDA/dm9pZCAwOmUuJHR5cGUpPT0ic3RyaW5nIj90aGlzLl9hc3ROb2RlOihyPXRoaXMuY29udGFpbmVyKT09PW51bGx8fHI9PT12b2lkIDA/dm9pZCAwOnIuYXN0Tm9kZTtpZighbil0aHJvdyBuZXcgRXJyb3IoIlRoaXMgbm9kZSBoYXMgbm8gYXNzb2NpYXRlZCBBU1QgZWxlbWVudCIpO3JldHVybiBufXNldCBhc3ROb2RlKGUpe3RoaXMuX2FzdE5vZGU9ZX1nZXQgZWxlbWVudCgpe3JldHVybiB0aGlzLmFzdE5vZGV9Z2V0IHRleHQoKXtyZXR1cm4gdGhpcy5yb290LmZ1bGxUZXh0LnN1YnN0cmluZyh0aGlzLm9mZnNldCx0aGlzLmVuZCl9fSxFcD1jbGFzcyBleHRlbmRzIFB4e3N0YXRpY3tvKHRoaXMsIkxlYWZDc3ROb2RlSW1wbCIpfWdldCBvZmZzZXQoKXtyZXR1cm4gdGhpcy5fb2Zmc2V0fWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5fbGVuZ3RofWdldCBlbmQoKXtyZXR1cm4gdGhpcy5fb2Zmc2V0K3RoaXMuX2xlbmd0aH1nZXQgaGlkZGVuKCl7cmV0dXJuIHRoaXMuX2hpZGRlbn1nZXQgdG9rZW5UeXBlKCl7cmV0dXJuIHRoaXMuX3Rva2VuVHlwZX1nZXQgcmFuZ2UoKXtyZXR1cm4gdGhpcy5fcmFuZ2V9Y29uc3RydWN0b3IoZSxyLG4saSxhPSExKXtzdXBlcigpLHRoaXMuX2hpZGRlbj1hLHRoaXMuX29mZnNldD1lLHRoaXMuX3Rva2VuVHlwZT1pLHRoaXMuX2xlbmd0aD1yLHRoaXMuX3JhbmdlPW59fSxTcD1jbGFzcyBleHRlbmRzIFB4e3N0YXRpY3tvKHRoaXMsIkNvbXBvc2l0ZUNzdE5vZGVJbXBsIil9Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29udGVudD1uZXcgSk0odGhpcyl9Z2V0IGNoaWxkcmVuKCl7cmV0dXJuIHRoaXMuY29udGVudH1nZXQgb2Zmc2V0KCl7dmFyIGUscjtyZXR1cm4ocj0oZT10aGlzLmZpcnN0Tm9uSGlkZGVuTm9kZSk9PT1udWxsfHxlPT09dm9pZCAwP3ZvaWQgMDplLm9mZnNldCkhPT1udWxsJiZyIT09dm9pZCAwP3I6MH1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuZW5kLXRoaXMub2Zmc2V0fWdldCBlbmQoKXt2YXIgZSxyO3JldHVybihyPShlPXRoaXMubGFzdE5vbkhpZGRlbk5vZGUpPT09bnVsbHx8ZT09PXZvaWQgMD92b2lkIDA6ZS5lbmQpIT09bnVsbCYmciE9PXZvaWQgMD9yOjB9Z2V0IHJhbmdlKCl7bGV0IGU9dGhpcy5maXJzdE5vbkhpZGRlbk5vZGUscj10aGlzLmxhc3ROb25IaWRkZW5Ob2RlO2lmKGUmJnIpe2lmKHRoaXMuX3JhbmdlQ2FjaGU9PT12b2lkIDApe2xldHtyYW5nZTpufT1lLHtyYW5nZTppfT1yO3RoaXMuX3JhbmdlQ2FjaGU9e3N0YXJ0Om4uc3RhcnQsZW5kOmkuZW5kLmxpbmU8bi5zdGFydC5saW5lP24uc3RhcnQ6aS5lbmR9fXJldHVybiB0aGlzLl9yYW5nZUNhY2hlfWVsc2UgcmV0dXJue3N0YXJ0OmpyLmNyZWF0ZSgwLDApLGVuZDpqci5jcmVhdGUoMCwwKX19Z2V0IGZpcnN0Tm9uSGlkZGVuTm9kZSgpe2ZvcihsZXQgZSBvZiB0aGlzLmNvbnRlbnQpaWYoIWUuaGlkZGVuKXJldHVybiBlO3JldHVybiB0aGlzLmNvbnRlbnRbMF19Z2V0IGxhc3ROb25IaWRkZW5Ob2RlKCl7Zm9yKGxldCBlPXRoaXMuY29udGVudC5sZW5ndGgtMTtlPj0wO2UtLSl7bGV0IHI9dGhpcy5jb250ZW50W2VdO2lmKCFyLmhpZGRlbilyZXR1cm4gcn1yZXR1cm4gdGhpcy5jb250ZW50W3RoaXMuY29udGVudC5sZW5ndGgtMV19fSxKTT1jbGFzcyB0IGV4dGVuZHMgQXJyYXl7c3RhdGlje28odGhpcywiQ3N0Tm9kZUNvbnRhaW5lciIpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5wYXJlbnQ9ZSxPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyx0LnByb3RvdHlwZSl9cHVzaCguLi5lKXtyZXR1cm4gdGhpcy5hZGRQYXJlbnRzKGUpLHN1cGVyLnB1c2goLi4uZSl9dW5zaGlmdCguLi5lKXtyZXR1cm4gdGhpcy5hZGRQYXJlbnRzKGUpLHN1cGVyLnVuc2hpZnQoLi4uZSl9c3BsaWNlKGUsciwuLi5uKXtyZXR1cm4gdGhpcy5hZGRQYXJlbnRzKG4pLHN1cGVyLnNwbGljZShlLHIsLi4ubil9YWRkUGFyZW50cyhlKXtmb3IobGV0IHIgb2YgZSlyLmNvbnRhaW5lcj10aGlzLnBhcmVudH19LHAxPWNsYXNzIGV4dGVuZHMgU3B7c3RhdGlje28odGhpcywiUm9vdENzdE5vZGVJbXBsIil9Z2V0IHRleHQoKXtyZXR1cm4gdGhpcy5fdGV4dC5zdWJzdHJpbmcodGhpcy5vZmZzZXQsdGhpcy5lbmQpfWdldCBmdWxsVGV4dCgpe3JldHVybiB0aGlzLl90ZXh0fWNvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5fdGV4dD0iIix0aGlzLl90ZXh0PWU/PyIifX19KTtmdW5jdGlvbiBlSSh0KXtyZXR1cm4gdC4kdHlwZT09PU5FfXZhciBORSxVY2UsSGNlLEJ4LEZ4LE1FLG0xLCR4LEMkZSx0SSx6eD1OKCgpPT57InVzZSBzdHJpY3QiO21mKCk7R2xlKCk7UGMoKTtGbCgpO2NzKCk7UkUoKTtORT1TeW1ib2woIkRhdGF0eXBlIik7byhlSSwiaXNEYXRhVHlwZU5vZGUiKTtVY2U9Ilx1MjAwQiIsSGNlPW8odD0+dC5lbmRzV2l0aChVY2UpP3Q6dCtVY2UsIndpdGhSdWxlU3VmZml4IiksQng9Y2xhc3N7c3RhdGlje28odGhpcywiQWJzdHJhY3RMYW5naXVtUGFyc2VyIil9Y29uc3RydWN0b3IoZSl7dGhpcy5fdW5vcmRlcmVkR3JvdXBzPW5ldyBNYXAsdGhpcy5hbGxSdWxlcz1uZXcgTWFwLHRoaXMubGV4ZXI9ZS5wYXJzZXIuTGV4ZXI7bGV0IHI9dGhpcy5sZXhlci5kZWZpbml0aW9uLG49ZS5MYW5ndWFnZU1ldGFEYXRhLm1vZGU9PT0icHJvZHVjdGlvbiI7dGhpcy53cmFwcGVyPW5ldyB0SShyLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlLnBhcnNlci5QYXJzZXJDb25maWcpLHtza2lwVmFsaWRhdGlvbnM6bixlcnJvck1lc3NhZ2VQcm92aWRlcjplLnBhcnNlci5QYXJzZXJFcnJvck1lc3NhZ2VQcm92aWRlcn0pKX1hbHRlcm5hdGl2ZXMoZSxyKXt0aGlzLndyYXBwZXIud3JhcE9yKGUscil9b3B0aW9uYWwoZSxyKXt0aGlzLndyYXBwZXIud3JhcE9wdGlvbihlLHIpfW1hbnkoZSxyKXt0aGlzLndyYXBwZXIud3JhcE1hbnkoZSxyKX1hdExlYXN0T25lKGUscil7dGhpcy53cmFwcGVyLndyYXBBdExlYXN0T25lKGUscil9Z2V0UnVsZShlKXtyZXR1cm4gdGhpcy5hbGxSdWxlcy5nZXQoZSl9aXNSZWNvcmRpbmcoKXtyZXR1cm4gdGhpcy53cmFwcGVyLklTX1JFQ09SRElOR31nZXQgdW5vcmRlcmVkR3JvdXBzKCl7cmV0dXJuIHRoaXMuX3Vub3JkZXJlZEdyb3Vwc31nZXRSdWxlU3RhY2soKXtyZXR1cm4gdGhpcy53cmFwcGVyLlJVTEVfU1RBQ0t9ZmluYWxpemUoKXt0aGlzLndyYXBwZXIud3JhcFNlbGZBbmFseXNpcygpfX0sRng9Y2xhc3MgZXh0ZW5kcyBCeHtzdGF0aWN7byh0aGlzLCJMYW5naXVtUGFyc2VyIil9Z2V0IGN1cnJlbnQoKXtyZXR1cm4gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXX1jb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx0aGlzLm5vZGVCdWlsZGVyPW5ldyBPeCx0aGlzLnN0YWNrPVtdLHRoaXMuYXNzaWdubWVudE1hcD1uZXcgTWFwLHRoaXMubGlua2VyPWUucmVmZXJlbmNlcy5MaW5rZXIsdGhpcy5jb252ZXJ0ZXI9ZS5wYXJzZXIuVmFsdWVDb252ZXJ0ZXIsdGhpcy5hc3RSZWZsZWN0aW9uPWUuc2hhcmVkLkFzdFJlZmxlY3Rpb259cnVsZShlLHIpe2xldCBuPXRoaXMuY29tcHV0ZVJ1bGVUeXBlKGUpLGk9dGhpcy53cmFwcGVyLkRFRklORV9SVUxFKEhjZShlLm5hbWUpLHRoaXMuc3RhcnRJbXBsZW1lbnRhdGlvbihuLHIpLmJpbmQodGhpcykpO3JldHVybiB0aGlzLmFsbFJ1bGVzLnNldChlLm5hbWUsaSksZS5lbnRyeSYmKHRoaXMubWFpblJ1bGU9aSksaX1jb21wdXRlUnVsZVR5cGUoZSl7aWYoIWUuZnJhZ21lbnQpe2lmKGx4KGUpKXJldHVybiBORTt7bGV0IHI9emcoZSk7cmV0dXJuIHI/P2UubmFtZX19fXBhcnNlKGUscj17fSl7dGhpcy5ub2RlQnVpbGRlci5idWlsZFJvb3ROb2RlKGUpO2xldCBuPXRoaXMubGV4ZXJSZXN1bHQ9dGhpcy5sZXhlci50b2tlbml6ZShlKTt0aGlzLndyYXBwZXIuaW5wdXQ9bi50b2tlbnM7bGV0IGk9ci5ydWxlP3RoaXMuYWxsUnVsZXMuZ2V0KHIucnVsZSk6dGhpcy5tYWluUnVsZTtpZighaSl0aHJvdyBuZXcgRXJyb3Ioci5ydWxlP2BObyBydWxlIGZvdW5kIHdpdGggbmFtZSAnJHtyLnJ1bGV9J2A6Ik5vIG1haW4gcnVsZSBhdmFpbGFibGUuIik7bGV0IGE9aS5jYWxsKHRoaXMud3JhcHBlcix7fSk7cmV0dXJuIHRoaXMubm9kZUJ1aWxkZXIuYWRkSGlkZGVuTm9kZXMobi5oaWRkZW4pLHRoaXMudW5vcmRlcmVkR3JvdXBzLmNsZWFyKCksdGhpcy5sZXhlclJlc3VsdD12b2lkIDAse3ZhbHVlOmEsbGV4ZXJFcnJvcnM6bi5lcnJvcnMsbGV4ZXJSZXBvcnQ6bi5yZXBvcnQscGFyc2VyRXJyb3JzOnRoaXMud3JhcHBlci5lcnJvcnN9fXN0YXJ0SW1wbGVtZW50YXRpb24oZSxyKXtyZXR1cm4gbj0+e2xldCBpPSF0aGlzLmlzUmVjb3JkaW5nKCkmJmUhPT12b2lkIDA7aWYoaSl7bGV0IHM9eyR0eXBlOmV9O3RoaXMuc3RhY2sucHVzaChzKSxlPT09TkUmJihzLnZhbHVlPSIiKX1sZXQgYTt0cnl7YT1yKG4pfWNhdGNoe2E9dm9pZCAwfXJldHVybiBhPT09dm9pZCAwJiZpJiYoYT10aGlzLmNvbnN0cnVjdCgpKSxhfX1leHRyYWN0SGlkZGVuVG9rZW5zKGUpe2xldCByPXRoaXMubGV4ZXJSZXN1bHQuaGlkZGVuO2lmKCFyLmxlbmd0aClyZXR1cm5bXTtsZXQgbj1lLnN0YXJ0T2Zmc2V0O2ZvcihsZXQgaT0wO2k8ci5sZW5ndGg7aSsrKWlmKHJbaV0uc3RhcnRPZmZzZXQ+bilyZXR1cm4gci5zcGxpY2UoMCxpKTtyZXR1cm4gci5zcGxpY2UoMCxyLmxlbmd0aCl9Y29uc3VtZShlLHIsbil7bGV0IGk9dGhpcy53cmFwcGVyLndyYXBDb25zdW1lKGUscik7aWYoIXRoaXMuaXNSZWNvcmRpbmcoKSYmdGhpcy5pc1ZhbGlkVG9rZW4oaSkpe2xldCBhPXRoaXMuZXh0cmFjdEhpZGRlblRva2VucyhpKTt0aGlzLm5vZGVCdWlsZGVyLmFkZEhpZGRlbk5vZGVzKGEpO2xldCBzPXRoaXMubm9kZUJ1aWxkZXIuYnVpbGRMZWFmTm9kZShpLG4pLHthc3NpZ25tZW50OmwsaXNDcm9zc1JlZjp1fT10aGlzLmdldEFzc2lnbm1lbnQobiksaD10aGlzLmN1cnJlbnQ7aWYobCl7bGV0IGY9WG8obik/aS5pbWFnZTp0aGlzLmNvbnZlcnRlci5jb252ZXJ0KGkuaW1hZ2Uscyk7dGhpcy5hc3NpZ24obC5vcGVyYXRvcixsLmZlYXR1cmUsZixzLHUpfWVsc2UgaWYoZUkoaCkpe2xldCBmPWkuaW1hZ2U7WG8obil8fChmPXRoaXMuY29udmVydGVyLmNvbnZlcnQoZixzKS50b1N0cmluZygpKSxoLnZhbHVlKz1mfX19aXNWYWxpZFRva2VuKGUpe3JldHVybiFlLmlzSW5zZXJ0ZWRJblJlY292ZXJ5JiYhaXNOYU4oZS5zdGFydE9mZnNldCkmJnR5cGVvZiBlLmVuZE9mZnNldD09Im51bWJlciImJiFpc05hTihlLmVuZE9mZnNldCl9c3VicnVsZShlLHIsbixpLGEpe2xldCBzOyF0aGlzLmlzUmVjb3JkaW5nKCkmJiFuJiYocz10aGlzLm5vZGVCdWlsZGVyLmJ1aWxkQ29tcG9zaXRlTm9kZShpKSk7bGV0IGw9dGhpcy53cmFwcGVyLndyYXBTdWJydWxlKGUscixhKTshdGhpcy5pc1JlY29yZGluZygpJiZzJiZzLmxlbmd0aD4wJiZ0aGlzLnBlcmZvcm1TdWJydWxlQXNzaWdubWVudChsLGkscyl9cGVyZm9ybVN1YnJ1bGVBc3NpZ25tZW50KGUscixuKXtsZXR7YXNzaWdubWVudDppLGlzQ3Jvc3NSZWY6YX09dGhpcy5nZXRBc3NpZ25tZW50KHIpO2lmKGkpdGhpcy5hc3NpZ24oaS5vcGVyYXRvcixpLmZlYXR1cmUsZSxuLGEpO2Vsc2UgaWYoIWkpe2xldCBzPXRoaXMuY3VycmVudDtpZihlSShzKSlzLnZhbHVlKz1lLnRvU3RyaW5nKCk7ZWxzZSBpZih0eXBlb2YgZT09Im9iamVjdCImJmUpe2xldCB1PXRoaXMuYXNzaWduV2l0aG91dE92ZXJyaWRlKGUscyk7dGhpcy5zdGFjay5wb3AoKSx0aGlzLnN0YWNrLnB1c2godSl9fX1hY3Rpb24oZSxyKXtpZighdGhpcy5pc1JlY29yZGluZygpKXtsZXQgbj10aGlzLmN1cnJlbnQ7aWYoci5mZWF0dXJlJiZyLm9wZXJhdG9yKXtuPXRoaXMuY29uc3RydWN0KCksdGhpcy5ub2RlQnVpbGRlci5yZW1vdmVOb2RlKG4uJGNzdE5vZGUpLHRoaXMubm9kZUJ1aWxkZXIuYnVpbGRDb21wb3NpdGVOb2RlKHIpLmNvbnRlbnQucHVzaChuLiRjc3ROb2RlKTtsZXQgYT17JHR5cGU6ZX07dGhpcy5zdGFjay5wdXNoKGEpLHRoaXMuYXNzaWduKHIub3BlcmF0b3Isci5mZWF0dXJlLG4sbi4kY3N0Tm9kZSwhMSl9ZWxzZSBuLiR0eXBlPWV9fWNvbnN0cnVjdCgpe2lmKHRoaXMuaXNSZWNvcmRpbmcoKSlyZXR1cm47bGV0IGU9dGhpcy5jdXJyZW50O3JldHVybiBNayhlKSx0aGlzLm5vZGVCdWlsZGVyLmNvbnN0cnVjdChlKSx0aGlzLnN0YWNrLnBvcCgpLGVJKGUpP3RoaXMuY29udmVydGVyLmNvbnZlcnQoZS52YWx1ZSxlLiRjc3ROb2RlKTooUk4odGhpcy5hc3RSZWZsZWN0aW9uLGUpLGUpfWdldEFzc2lnbm1lbnQoZSl7aWYoIXRoaXMuYXNzaWdubWVudE1hcC5oYXMoZSkpe2xldCByPWhwKGUsUGwpO3RoaXMuYXNzaWdubWVudE1hcC5zZXQoZSx7YXNzaWdubWVudDpyLGlzQ3Jvc3NSZWY6cj91cChyLnRlcm1pbmFsKTohMX0pfXJldHVybiB0aGlzLmFzc2lnbm1lbnRNYXAuZ2V0KGUpfWFzc2lnbihlLHIsbixpLGEpe2xldCBzPXRoaXMuY3VycmVudCxsO3N3aXRjaChhJiZ0eXBlb2Ygbj09InN0cmluZyI/bD10aGlzLmxpbmtlci5idWlsZFJlZmVyZW5jZShzLHIsaSxuKTpsPW4sZSl7Y2FzZSI9Ijp7c1tyXT1sO2JyZWFrfWNhc2UiPz0iOntzW3JdPSEwO2JyZWFrfWNhc2UiKz0iOkFycmF5LmlzQXJyYXkoc1tyXSl8fChzW3JdPVtdKSxzW3JdLnB1c2gobCl9fWFzc2lnbldpdGhvdXRPdmVycmlkZShlLHIpe2ZvcihsZXRbaSxhXW9mIE9iamVjdC5lbnRyaWVzKHIpKXtsZXQgcz1lW2ldO3M9PT12b2lkIDA/ZVtpXT1hOkFycmF5LmlzQXJyYXkocykmJkFycmF5LmlzQXJyYXkoYSkmJihhLnB1c2goLi4ucyksZVtpXT1hKX1sZXQgbj1lLiRjc3ROb2RlO3JldHVybiBuJiYobi5hc3ROb2RlPXZvaWQgMCxlLiRjc3ROb2RlPXZvaWQgMCksZX1nZXQgZGVmaW5pdGlvbkVycm9ycygpe3JldHVybiB0aGlzLndyYXBwZXIuZGVmaW5pdGlvbkVycm9yc319LE1FPWNsYXNze3N0YXRpY3tvKHRoaXMsIkFic3RyYWN0UGFyc2VyRXJyb3JNZXNzYWdlUHJvdmlkZXIiKX1idWlsZE1pc21hdGNoVG9rZW5NZXNzYWdlKGUpe3JldHVybiBxdS5idWlsZE1pc21hdGNoVG9rZW5NZXNzYWdlKGUpfWJ1aWxkTm90QWxsSW5wdXRQYXJzZWRNZXNzYWdlKGUpe3JldHVybiBxdS5idWlsZE5vdEFsbElucHV0UGFyc2VkTWVzc2FnZShlKX1idWlsZE5vVmlhYmxlQWx0TWVzc2FnZShlKXtyZXR1cm4gcXUuYnVpbGROb1ZpYWJsZUFsdE1lc3NhZ2UoZSl9YnVpbGRFYXJseUV4aXRNZXNzYWdlKGUpe3JldHVybiBxdS5idWlsZEVhcmx5RXhpdE1lc3NhZ2UoZSl9fSxtMT1jbGFzcyBleHRlbmRzIE1Fe3N0YXRpY3tvKHRoaXMsIkxhbmdpdW1QYXJzZXJFcnJvck1lc3NhZ2VQcm92aWRlciIpfWJ1aWxkTWlzbWF0Y2hUb2tlbk1lc3NhZ2Uoe2V4cGVjdGVkOmUsYWN0dWFsOnJ9KXtyZXR1cm5gRXhwZWN0aW5nICR7ZS5MQUJFTD8iYCIrZS5MQUJFTCsiYCI6ZS5uYW1lLmVuZHNXaXRoKCI6S1ciKT9ga2V5d29yZCAnJHtlLm5hbWUuc3Vic3RyaW5nKDAsZS5uYW1lLmxlbmd0aC0zKX0nYDpgdG9rZW4gb2YgdHlwZSAnJHtlLm5hbWV9J2B9IGJ1dCBmb3VuZCBcYCR7ci5pbWFnZX1cYC5gfWJ1aWxkTm90QWxsSW5wdXRQYXJzZWRNZXNzYWdlKHtmaXJzdFJlZHVuZGFudDplfSl7cmV0dXJuYEV4cGVjdGluZyBlbmQgb2YgZmlsZSBidXQgZm91bmQgXGAke2UuaW1hZ2V9XGAuYH19LCR4PWNsYXNzIGV4dGVuZHMgQnh7c3RhdGlje28odGhpcywiTGFuZ2l1bUNvbXBsZXRpb25QYXJzZXIiKX1jb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy50b2tlbnM9W10sdGhpcy5lbGVtZW50U3RhY2s9W10sdGhpcy5sYXN0RWxlbWVudFN0YWNrPVtdLHRoaXMubmV4dFRva2VuSW5kZXg9MCx0aGlzLnN0YWNrU2l6ZT0wfWFjdGlvbigpe31jb25zdHJ1Y3QoKXt9cGFyc2UoZSl7dGhpcy5yZXNldFN0YXRlKCk7bGV0IHI9dGhpcy5sZXhlci50b2tlbml6ZShlLHttb2RlOiJwYXJ0aWFsIn0pO3JldHVybiB0aGlzLnRva2Vucz1yLnRva2Vucyx0aGlzLndyYXBwZXIuaW5wdXQ9Wy4uLnRoaXMudG9rZW5zXSx0aGlzLm1haW5SdWxlLmNhbGwodGhpcy53cmFwcGVyLHt9KSx0aGlzLnVub3JkZXJlZEdyb3Vwcy5jbGVhcigpLHt0b2tlbnM6dGhpcy50b2tlbnMsZWxlbWVudFN0YWNrOlsuLi50aGlzLmxhc3RFbGVtZW50U3RhY2tdLHRva2VuSW5kZXg6dGhpcy5uZXh0VG9rZW5JbmRleH19cnVsZShlLHIpe2xldCBuPXRoaXMud3JhcHBlci5ERUZJTkVfUlVMRShIY2UoZS5uYW1lKSx0aGlzLnN0YXJ0SW1wbGVtZW50YXRpb24ocikuYmluZCh0aGlzKSk7cmV0dXJuIHRoaXMuYWxsUnVsZXMuc2V0KGUubmFtZSxuKSxlLmVudHJ5JiYodGhpcy5tYWluUnVsZT1uKSxufXJlc2V0U3RhdGUoKXt0aGlzLmVsZW1lbnRTdGFjaz1bXSx0aGlzLmxhc3RFbGVtZW50U3RhY2s9W10sdGhpcy5uZXh0VG9rZW5JbmRleD0wLHRoaXMuc3RhY2tTaXplPTB9c3RhcnRJbXBsZW1lbnRhdGlvbihlKXtyZXR1cm4gcj0+e2xldCBuPXRoaXMua2VlcFN0YWNrU2l6ZSgpO3RyeXtlKHIpfWZpbmFsbHl7dGhpcy5yZXNldFN0YWNrU2l6ZShuKX19fXJlbW92ZVVuZXhwZWN0ZWRFbGVtZW50cygpe3RoaXMuZWxlbWVudFN0YWNrLnNwbGljZSh0aGlzLnN0YWNrU2l6ZSl9a2VlcFN0YWNrU2l6ZSgpe2xldCBlPXRoaXMuZWxlbWVudFN0YWNrLmxlbmd0aDtyZXR1cm4gdGhpcy5zdGFja1NpemU9ZSxlfXJlc2V0U3RhY2tTaXplKGUpe3RoaXMucmVtb3ZlVW5leHBlY3RlZEVsZW1lbnRzKCksdGhpcy5zdGFja1NpemU9ZX1jb25zdW1lKGUscixuKXt0aGlzLndyYXBwZXIud3JhcENvbnN1bWUoZSxyKSx0aGlzLmlzUmVjb3JkaW5nKCl8fCh0aGlzLmxhc3RFbGVtZW50U3RhY2s9Wy4uLnRoaXMuZWxlbWVudFN0YWNrLG5dLHRoaXMubmV4dFRva2VuSW5kZXg9dGhpcy5jdXJySWR4KzEpfXN1YnJ1bGUoZSxyLG4saSxhKXt0aGlzLmJlZm9yZShpKSx0aGlzLndyYXBwZXIud3JhcFN1YnJ1bGUoZSxyLGEpLHRoaXMuYWZ0ZXIoaSl9YmVmb3JlKGUpe3RoaXMuaXNSZWNvcmRpbmcoKXx8dGhpcy5lbGVtZW50U3RhY2sucHVzaChlKX1hZnRlcihlKXtpZighdGhpcy5pc1JlY29yZGluZygpKXtsZXQgcj10aGlzLmVsZW1lbnRTdGFjay5sYXN0SW5kZXhPZihlKTtyPj0wJiZ0aGlzLmVsZW1lbnRTdGFjay5zcGxpY2Uocil9fWdldCBjdXJySWR4KCl7cmV0dXJuIHRoaXMud3JhcHBlci5jdXJySWR4fX0sQyRlPXtyZWNvdmVyeUVuYWJsZWQ6ITAsbm9kZUxvY2F0aW9uVHJhY2tpbmc6ImZ1bGwiLHNraXBWYWxpZGF0aW9uczohMCxlcnJvck1lc3NhZ2VQcm92aWRlcjpuZXcgbTF9LHRJPWNsYXNzIGV4dGVuZHMgRHh7c3RhdGlje28odGhpcywiQ2hldnJvdGFpbldyYXBwZXIiKX1jb25zdHJ1Y3RvcihlLHIpe2xldCBuPXImJiJtYXhMb29rYWhlYWQiaW4gcjtzdXBlcihlLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LEMkZSkse2xvb2thaGVhZFN0cmF0ZWd5Om4/bmV3IFl1KHttYXhMb29rYWhlYWQ6ci5tYXhMb29rYWhlYWR9KTpuZXcgTXgoe2xvZ2dpbmc6ci5za2lwVmFsaWRhdGlvbnM/KCk9Pnt9OnZvaWQgMH0pfSkscikpfWdldCBJU19SRUNPUkRJTkcoKXtyZXR1cm4gdGhpcy5SRUNPUkRJTkdfUEhBU0V9REVGSU5FX1JVTEUoZSxyKXtyZXR1cm4gdGhpcy5SVUxFKGUscil9d3JhcFNlbGZBbmFseXNpcygpe3RoaXMucGVyZm9ybVNlbGZBbmFseXNpcygpfXdyYXBDb25zdW1lKGUscil7cmV0dXJuIHRoaXMuY29uc3VtZShlLHIpfXdyYXBTdWJydWxlKGUscixuKXtyZXR1cm4gdGhpcy5zdWJydWxlKGUscix7QVJHUzpbbl19KX13cmFwT3IoZSxyKXt0aGlzLm9yKGUscil9d3JhcE9wdGlvbihlLHIpe3RoaXMub3B0aW9uKGUscil9d3JhcE1hbnkoZSxyKXt0aGlzLm1hbnkoZSxyKX13cmFwQXRMZWFzdE9uZShlLHIpe3RoaXMuYXRMZWFzdE9uZShlLHIpfX19KTtmdW5jdGlvbiBHeCh0LGUscil7cmV0dXJuIEEkZSh7cGFyc2VyOmUsdG9rZW5zOnIscnVsZU5hbWVzOm5ldyBNYXB9LHQpLGV9ZnVuY3Rpb24gQSRlKHQsZSl7bGV0IHI9c3goZSwhMSksbj1lbihlLnJ1bGVzKS5maWx0ZXIoRmEpLmZpbHRlcihpPT5yLmhhcyhpKSk7Zm9yKGxldCBpIG9mIG4pe2xldCBhPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0KSx7Y29uc3VtZToxLG9wdGlvbmFsOjEsc3VicnVsZToxLG1hbnk6MSxvcjoxfSk7dC5wYXJzZXIucnVsZShpLENwKGEsaS5kZWZpbml0aW9uKSl9fWZ1bmN0aW9uIENwKHQsZSxyPSExKXtsZXQgbjtpZihYbyhlKSluPUkkZSh0LGUpO2Vsc2UgaWYoJHUoZSkpbj1fJGUodCxlKTtlbHNlIGlmKFBsKGUpKW49Q3AodCxlLnRlcm1pbmFsKTtlbHNlIGlmKHVwKGUpKW49V2NlKHQsZSk7ZWxzZSBpZihCbChlKSluPUQkZSh0LGUpO2Vsc2UgaWYoTGsoZSkpbj1SJGUodCxlKTtlbHNlIGlmKE5rKGUpKW49TiRlKHQsZSk7ZWxzZSBpZihmZihlKSluPU0kZSh0LGUpO2Vsc2UgaWYod04oZSkpe2xldCBpPXQuY29uc3VtZSsrO249bygoKT0+dC5wYXJzZXIuY29uc3VtZShpLGZvLGUpLCJtZXRob2QiKX1lbHNlIHRocm93IG5ldyBscChlLiRjc3ROb2RlLGBVbmV4cGVjdGVkIGVsZW1lbnQgdHlwZTogJHtlLiR0eXBlfWApO3JldHVybiBxY2UodCxyP3ZvaWQgMDpJRShlKSxuLGUuY2FyZGluYWxpdHkpfWZ1bmN0aW9uIF8kZSh0LGUpe2xldCByPWN4KGUpO3JldHVybigpPT50LnBhcnNlci5hY3Rpb24ocixlKX1mdW5jdGlvbiBEJGUodCxlKXtsZXQgcj1lLnJ1bGUucmVmO2lmKEZhKHIpKXtsZXQgbj10LnN1YnJ1bGUrKyxpPXIuZnJhZ21lbnQsYT1lLmFyZ3VtZW50cy5sZW5ndGg+MD9MJGUocixlLmFyZ3VtZW50cyk6KCk9Pih7fSk7cmV0dXJuIHM9PnQucGFyc2VyLnN1YnJ1bGUobixZY2UodCxyKSxpLGUsYShzKSl9ZWxzZSBpZih1byhyKSl7bGV0IG49dC5jb25zdW1lKyssaT1ySSh0LHIubmFtZSk7cmV0dXJuKCk9PnQucGFyc2VyLmNvbnN1bWUobixpLGUpfWVsc2UgaWYocilPYyhyKTtlbHNlIHRocm93IG5ldyBscChlLiRjc3ROb2RlLGBVbmRlZmluZWQgcnVsZTogJHtlLnJ1bGUuJHJlZlRleHR9YCl9ZnVuY3Rpb24gTCRlKHQsZSl7bGV0IHI9ZS5tYXAobj0+WHUobi52YWx1ZSkpO3JldHVybiBuPT57bGV0IGk9e307Zm9yKGxldCBhPTA7YTxyLmxlbmd0aDthKyspe2xldCBzPXQucGFyYW1ldGVyc1thXSxsPXJbYV07aVtzLm5hbWVdPWwobil9cmV0dXJuIGl9fWZ1bmN0aW9uIFh1KHQpe2lmKG1OKHQpKXtsZXQgZT1YdSh0LmxlZnQpLHI9WHUodC5yaWdodCk7cmV0dXJuIG49PmUobil8fHIobil9ZWxzZSBpZihwTih0KSl7bGV0IGU9WHUodC5sZWZ0KSxyPVh1KHQucmlnaHQpO3JldHVybiBuPT5lKG4pJiZyKG4pfWVsc2UgaWYoZ04odCkpe2xldCBlPVh1KHQudmFsdWUpO3JldHVybiByPT4hZShyKX1lbHNlIGlmKHlOKHQpKXtsZXQgZT10LnBhcmFtZXRlci5yZWYubmFtZTtyZXR1cm4gcj0+ciE9PXZvaWQgMCYmcltlXT09PSEwfWVsc2UgaWYoZE4odCkpe2xldCBlPSEhdC50cnVlO3JldHVybigpPT5lfU9jKHQpfWZ1bmN0aW9uIFIkZSh0LGUpe2lmKGUuZWxlbWVudHMubGVuZ3RoPT09MSlyZXR1cm4gQ3AodCxlLmVsZW1lbnRzWzBdKTt7bGV0IHI9W107Zm9yKGxldCBpIG9mIGUuZWxlbWVudHMpe2xldCBhPXtBTFQ6Q3AodCxpLCEwKX0scz1JRShpKTtzJiYoYS5HQVRFPVh1KHMpKSxyLnB1c2goYSl9bGV0IG49dC5vcisrO3JldHVybiBpPT50LnBhcnNlci5hbHRlcm5hdGl2ZXMobixyLm1hcChhPT57bGV0IHM9e0FMVDpvKCgpPT5hLkFMVChpKSwiQUxUIil9LGw9YS5HQVRFO3JldHVybiBsJiYocy5HQVRFPSgpPT5sKGkpKSxzfSkpfX1mdW5jdGlvbiBOJGUodCxlKXtpZihlLmVsZW1lbnRzLmxlbmd0aD09PTEpcmV0dXJuIENwKHQsZS5lbGVtZW50c1swXSk7bGV0IHI9W107Zm9yKGxldCBsIG9mIGUuZWxlbWVudHMpe2xldCB1PXtBTFQ6Q3AodCxsLCEwKX0saD1JRShsKTtoJiYodS5HQVRFPVh1KGgpKSxyLnB1c2godSl9bGV0IG49dC5vcisrLGk9bygobCx1KT0+e2xldCBoPXUuZ2V0UnVsZVN0YWNrKCkuam9pbigiLSIpO3JldHVybmB1R3JvdXBfJHtsfV8ke2h9YH0sImlkRnVuYyIpLGE9byhsPT50LnBhcnNlci5hbHRlcm5hdGl2ZXMobixyLm1hcCgodSxoKT0+e2xldCBmPXtBTFQ6bygoKT0+ITAsIkFMVCIpfSxkPXQucGFyc2VyO2YuQUxUPSgpPT57aWYodS5BTFQobCksIWQuaXNSZWNvcmRpbmcoKSl7bGV0IG09aShuLGQpO2QudW5vcmRlcmVkR3JvdXBzLmdldChtKXx8ZC51bm9yZGVyZWRHcm91cHMuc2V0KG0sW10pO2xldCBnPWQudW5vcmRlcmVkR3JvdXBzLmdldChtKTt0eXBlb2YgZz8uW2hdPiJ1IiYmKGdbaF09ITApfX07bGV0IHA9dS5HQVRFO3JldHVybiBwP2YuR0FURT0oKT0+cChsKTpmLkdBVEU9KCk9PntsZXQgbT1kLnVub3JkZXJlZEdyb3Vwcy5nZXQoaShuLGQpKTtyZXR1cm4hbT8uW2hdfSxmfSkpLCJhbHRlcm5hdGl2ZXMiKSxzPXFjZSh0LElFKGUpLGEsIioiKTtyZXR1cm4gbD0+e3MobCksdC5wYXJzZXIuaXNSZWNvcmRpbmcoKXx8dC5wYXJzZXIudW5vcmRlcmVkR3JvdXBzLmRlbGV0ZShpKG4sdC5wYXJzZXIpKX19ZnVuY3Rpb24gTSRlKHQsZSl7bGV0IHI9ZS5lbGVtZW50cy5tYXAobj0+Q3AodCxuKSk7cmV0dXJuIG49PnIuZm9yRWFjaChpPT5pKG4pKX1mdW5jdGlvbiBJRSh0KXtpZihmZih0KSlyZXR1cm4gdC5ndWFyZENvbmRpdGlvbn1mdW5jdGlvbiBXY2UodCxlLHI9ZS50ZXJtaW5hbCl7aWYocilpZihCbChyKSYmRmEoci5ydWxlLnJlZikpe2xldCBuPXIucnVsZS5yZWYsaT10LnN1YnJ1bGUrKztyZXR1cm4gYT0+dC5wYXJzZXIuc3VicnVsZShpLFljZSh0LG4pLCExLGUsYSl9ZWxzZSBpZihCbChyKSYmdW8oci5ydWxlLnJlZikpe2xldCBuPXQuY29uc3VtZSsrLGk9ckkodCxyLnJ1bGUucmVmLm5hbWUpO3JldHVybigpPT50LnBhcnNlci5jb25zdW1lKG4saSxlKX1lbHNlIGlmKFhvKHIpKXtsZXQgbj10LmNvbnN1bWUrKyxpPXJJKHQsci52YWx1ZSk7cmV0dXJuKCk9PnQucGFyc2VyLmNvbnN1bWUobixpLGUpfWVsc2UgdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgYnVpbGQgY3Jvc3MgcmVmZXJlbmNlIHBhcnNlciIpO2Vsc2V7aWYoIWUudHlwZS5yZWYpdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgcmVzb2x2ZSByZWZlcmVuY2UgdG8gdHlwZTogIitlLnR5cGUuJHJlZlRleHQpO2xldCBuPUZrKGUudHlwZS5yZWYpLGk9bj8udGVybWluYWw7aWYoIWkpdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCBuYW1lIGFzc2lnbm1lbnQgZm9yIHR5cGU6ICIrY3goZS50eXBlLnJlZikpO3JldHVybiBXY2UodCxlLGkpfX1mdW5jdGlvbiBJJGUodCxlKXtsZXQgcj10LmNvbnN1bWUrKyxuPXQudG9rZW5zW2UudmFsdWVdO2lmKCFuKXRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGZpbmQgdG9rZW4gZm9yIGtleXdvcmQ6ICIrZS52YWx1ZSk7cmV0dXJuKCk9PnQucGFyc2VyLmNvbnN1bWUocixuLGUpfWZ1bmN0aW9uIHFjZSh0LGUscixuKXtsZXQgaT1lJiZYdShlKTtpZighbilpZihpKXtsZXQgYT10Lm9yKys7cmV0dXJuIHM9PnQucGFyc2VyLmFsdGVybmF0aXZlcyhhLFt7QUxUOm8oKCk9PnIocyksIkFMVCIpLEdBVEU6bygoKT0+aShzKSwiR0FURSIpfSx7QUxUOmtFKCksR0FURTpvKCgpPT4haShzKSwiR0FURSIpfV0pfWVsc2UgcmV0dXJuIHI7aWYobj09PSIqIil7bGV0IGE9dC5tYW55Kys7cmV0dXJuIHM9PnQucGFyc2VyLm1hbnkoYSx7REVGOm8oKCk9PnIocyksIkRFRiIpLEdBVEU6aT8oKT0+aShzKTp2b2lkIDB9KX1lbHNlIGlmKG49PT0iKyIpe2xldCBhPXQubWFueSsrO2lmKGkpe2xldCBzPXQub3IrKztyZXR1cm4gbD0+dC5wYXJzZXIuYWx0ZXJuYXRpdmVzKHMsW3tBTFQ6bygoKT0+dC5wYXJzZXIuYXRMZWFzdE9uZShhLHtERUY6bygoKT0+cihsKSwiREVGIil9KSwiQUxUIiksR0FURTpvKCgpPT5pKGwpLCJHQVRFIil9LHtBTFQ6a0UoKSxHQVRFOm8oKCk9PiFpKGwpLCJHQVRFIil9XSl9ZWxzZSByZXR1cm4gcz0+dC5wYXJzZXIuYXRMZWFzdE9uZShhLHtERUY6bygoKT0+cihzKSwiREVGIil9KX1lbHNlIGlmKG49PT0iPyIpe2xldCBhPXQub3B0aW9uYWwrKztyZXR1cm4gcz0+dC5wYXJzZXIub3B0aW9uYWwoYSx7REVGOm8oKCk9PnIocyksIkRFRiIpLEdBVEU6aT8oKT0+aShzKTp2b2lkIDB9KX1lbHNlIE9jKG4pfWZ1bmN0aW9uIFljZSh0LGUpe2xldCByPU8kZSh0LGUpLG49dC5wYXJzZXIuZ2V0UnVsZShyKTtpZighbil0aHJvdyBuZXcgRXJyb3IoYFJ1bGUgIiR7cn0iIG5vdCBmb3VuZC4iYCk7cmV0dXJuIG59ZnVuY3Rpb24gTyRlKHQsZSl7aWYoRmEoZSkpcmV0dXJuIGUubmFtZTtpZih0LnJ1bGVOYW1lcy5oYXMoZSkpcmV0dXJuIHQucnVsZU5hbWVzLmdldChlKTt7bGV0IHI9ZSxuPXIuJGNvbnRhaW5lcixpPWUuJHR5cGU7Zm9yKDshRmEobik7KShmZihuKXx8TGsobil8fE5rKG4pKSYmKGk9bi5lbGVtZW50cy5pbmRleE9mKHIpLnRvU3RyaW5nKCkrIjoiK2kpLHI9bixuPW4uJGNvbnRhaW5lcjtyZXR1cm4gaT1uLm5hbWUrIjoiK2ksdC5ydWxlTmFtZXMuc2V0KGUsaSksaX19ZnVuY3Rpb24gckkodCxlKXtsZXQgcj10LnRva2Vuc1tlXTtpZighcil0aHJvdyBuZXcgRXJyb3IoYFRva2VuICIke2V9IiBub3QgZm91bmQuImApO3JldHVybiByfXZhciBPRT1OKCgpPT57InVzZSBzdHJpY3QiO21mKCk7UGMoKTtTaygpO0dzKCk7RmwoKTtvKEd4LCJjcmVhdGVQYXJzZXIiKTtvKEEkZSwiYnVpbGRSdWxlcyIpO28oQ3AsImJ1aWxkRWxlbWVudCIpO28oXyRlLCJidWlsZEFjdGlvbiIpO28oRCRlLCJidWlsZFJ1bGVDYWxsIik7byhMJGUsImJ1aWxkUnVsZUNhbGxQcmVkaWNhdGUiKTtvKFh1LCJidWlsZFByZWRpY2F0ZSIpO28oUiRlLCJidWlsZEFsdGVybmF0aXZlcyIpO28oTiRlLCJidWlsZFVub3JkZXJlZEdyb3VwIik7byhNJGUsImJ1aWxkR3JvdXAiKTtvKElFLCJnZXRHdWFyZENvbmRpdGlvbiIpO28oV2NlLCJidWlsZENyb3NzUmVmZXJlbmNlIik7byhJJGUsImJ1aWxkS2V5d29yZCIpO28ocWNlLCJ3cmFwIik7byhZY2UsImdldFJ1bGUiKTtvKE8kZSwiZ2V0UnVsZU5hbWUiKTtvKHJJLCJnZXRUb2tlbiIpfSk7ZnVuY3Rpb24gbkkodCl7bGV0IGU9dC5HcmFtbWFyLHI9dC5wYXJzZXIuTGV4ZXIsbj1uZXcgJHgodCk7cmV0dXJuIEd4KGUsbixyLmRlZmluaXRpb24pLG4uZmluYWxpemUoKSxufXZhciBpST1OKCgpPT57InVzZSBzdHJpY3QiO3p4KCk7T0UoKTtvKG5JLCJjcmVhdGVDb21wbGV0aW9uUGFyc2VyIil9KTtmdW5jdGlvbiBhSSh0KXtsZXQgZT1YY2UodCk7cmV0dXJuIGUuZmluYWxpemUoKSxlfWZ1bmN0aW9uIFhjZSh0KXtsZXQgZT10LkdyYW1tYXIscj10LnBhcnNlci5MZXhlcixuPW5ldyBGeCh0KTtyZXR1cm4gR3goZSxuLHIuZGVmaW5pdGlvbil9dmFyIHNJPU4oKCk9PnsidXNlIHN0cmljdCI7engoKTtPRSgpO28oYUksImNyZWF0ZUxhbmdpdW1QYXJzZXIiKTtvKFhjZSwicHJlcGFyZUxhbmdpdW1QYXJzZXIiKX0pO3ZhciBqdSxQRT1OKCgpPT57InVzZSBzdHJpY3QiO21mKCk7UGMoKTtjcygpO0ZsKCk7JGcoKTtHcygpO2p1PWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRUb2tlbkJ1aWxkZXIiKX1jb25zdHJ1Y3Rvcigpe3RoaXMuZGlhZ25vc3RpY3M9W119YnVpbGRUb2tlbnMoZSxyKXtsZXQgbj1lbihzeChlLCExKSksaT10aGlzLmJ1aWxkVGVybWluYWxUb2tlbnMobiksYT10aGlzLmJ1aWxkS2V5d29yZFRva2VucyhuLGkscik7cmV0dXJuIGkuZm9yRWFjaChzPT57bGV0IGw9cy5QQVRURVJOO3R5cGVvZiBsPT0ib2JqZWN0IiYmbCYmInRlc3QiaW4gbCYmRmcobCk/YS51bnNoaWZ0KHMpOmEucHVzaChzKX0pLGF9Zmx1c2hMZXhpbmdSZXBvcnQoZSl7cmV0dXJue2RpYWdub3N0aWNzOnRoaXMucG9wRGlhZ25vc3RpY3MoKX19cG9wRGlhZ25vc3RpY3MoKXtsZXQgZT1bLi4udGhpcy5kaWFnbm9zdGljc107cmV0dXJuIHRoaXMuZGlhZ25vc3RpY3M9W10sZX1idWlsZFRlcm1pbmFsVG9rZW5zKGUpe3JldHVybiBlLmZpbHRlcih1bykuZmlsdGVyKHI9PiFyLmZyYWdtZW50KS5tYXAocj0+dGhpcy5idWlsZFRlcm1pbmFsVG9rZW4ocikpLnRvQXJyYXkoKX1idWlsZFRlcm1pbmFsVG9rZW4oZSl7bGV0IHI9R2coZSksbj10aGlzLnJlcXVpcmVzQ3VzdG9tUGF0dGVybihyKT90aGlzLnJlZ2V4UGF0dGVybkZ1bmN0aW9uKHIpOnIsaT17bmFtZTplLm5hbWUsUEFUVEVSTjpufTtyZXR1cm4gdHlwZW9mIG49PSJmdW5jdGlvbiImJihpLkxJTkVfQlJFQUtTPSEwKSxlLmhpZGRlbiYmKGkuR1JPVVA9Rmcocik/S24uU0tJUFBFRDoiaGlkZGVuIiksaX1yZXF1aXJlc0N1c3RvbVBhdHRlcm4oZSl7cmV0dXJuIGUuZmxhZ3MuaW5jbHVkZXMoInUiKXx8ZS5mbGFncy5pbmNsdWRlcygicyIpPyEwOiEhKGUuc291cmNlLmluY2x1ZGVzKCI/PD0iKXx8ZS5zb3VyY2UuaW5jbHVkZXMoIj88ISIpKX1yZWdleFBhdHRlcm5GdW5jdGlvbihlKXtsZXQgcj1uZXcgUmVnRXhwKGUsZS5mbGFncysieSIpO3JldHVybihuLGkpPT4oci5sYXN0SW5kZXg9aSxyLmV4ZWMobikpfWJ1aWxkS2V5d29yZFRva2VucyhlLHIsbil7cmV0dXJuIGUuZmlsdGVyKEZhKS5mbGF0TWFwKGk9PkJjKGkpLmZpbHRlcihYbykpLmRpc3RpbmN0KGk9PmkudmFsdWUpLnRvQXJyYXkoKS5zb3J0KChpLGEpPT5hLnZhbHVlLmxlbmd0aC1pLnZhbHVlLmxlbmd0aCkubWFwKGk9PnRoaXMuYnVpbGRLZXl3b3JkVG9rZW4oaSxyLCEhbj8uY2FzZUluc2Vuc2l0aXZlKSl9YnVpbGRLZXl3b3JkVG9rZW4oZSxyLG4pe2xldCBpPXRoaXMuYnVpbGRLZXl3b3JkUGF0dGVybihlLG4pLGE9e25hbWU6ZS52YWx1ZSxQQVRURVJOOmksTE9OR0VSX0FMVDp0aGlzLmZpbmRMb25nZXJBbHQoZSxyKX07cmV0dXJuIHR5cGVvZiBpPT0iZnVuY3Rpb24iJiYoYS5MSU5FX0JSRUFLUz0hMCksYX1idWlsZEtleXdvcmRQYXR0ZXJuKGUscil7cmV0dXJuIHI/bmV3IFJlZ0V4cChGTihlLnZhbHVlKSk6ZS52YWx1ZX1maW5kTG9uZ2VyQWx0KGUscil7cmV0dXJuIHIucmVkdWNlKChuLGkpPT57bGV0IGE9aT8uUEFUVEVSTjtyZXR1cm4gYT8uc291cmNlJiYkTigiXiIrYS5zb3VyY2UrIiQiLGUudmFsdWUpJiZuLnB1c2goaSksbn0sW10pfX19KTt2YXIgQXAsemMsb0k9TigoKT0+eyJ1c2Ugc3RyaWN0IjtQYygpO0ZsKCk7QXA9Y2xhc3N7c3RhdGlje28odGhpcywiRGVmYXVsdFZhbHVlQ29udmVydGVyIil9Y29udmVydChlLHIpe2xldCBuPXIuZ3JhbW1hclNvdXJjZTtpZih1cChuKSYmKG49Vk4obikpLEJsKG4pKXtsZXQgaT1uLnJ1bGUucmVmO2lmKCFpKXRocm93IG5ldyBFcnJvcigiVGhpcyBjc3Qgbm9kZSB3YXMgbm90IHBhcnNlZCBieSBhIHJ1bGUuIik7cmV0dXJuIHRoaXMucnVuQ29udmVydGVyKGksZSxyKX1yZXR1cm4gZX1ydW5Db252ZXJ0ZXIoZSxyLG4pe3ZhciBpO3N3aXRjaChlLm5hbWUudG9VcHBlckNhc2UoKSl7Y2FzZSJJTlQiOnJldHVybiB6Yy5jb252ZXJ0SW50KHIpO2Nhc2UiU1RSSU5HIjpyZXR1cm4gemMuY29udmVydFN0cmluZyhyKTtjYXNlIklEIjpyZXR1cm4gemMuY29udmVydElEKHIpfXN3aXRjaCgoaT1qTihlKSk9PT1udWxsfHxpPT09dm9pZCAwP3ZvaWQgMDppLnRvTG93ZXJDYXNlKCkpe2Nhc2UibnVtYmVyIjpyZXR1cm4gemMuY29udmVydE51bWJlcihyKTtjYXNlImJvb2xlYW4iOnJldHVybiB6Yy5jb252ZXJ0Qm9vbGVhbihyKTtjYXNlImJpZ2ludCI6cmV0dXJuIHpjLmNvbnZlcnRCaWdpbnQocik7Y2FzZSJkYXRlIjpyZXR1cm4gemMuY29udmVydERhdGUocik7ZGVmYXVsdDpyZXR1cm4gcn19fTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShoKXtsZXQgZj0iIjtmb3IobGV0IGQ9MTtkPGgubGVuZ3RoLTE7ZCsrKXtsZXQgcD1oLmNoYXJBdChkKTtpZihwPT09IlxcIil7bGV0IG09aC5jaGFyQXQoKytkKTtmKz1yKG0pfWVsc2UgZis9cH1yZXR1cm4gZn1vKGUsImNvbnZlcnRTdHJpbmciKSx0LmNvbnZlcnRTdHJpbmc9ZTtmdW5jdGlvbiByKGgpe3N3aXRjaChoKXtjYXNlImIiOnJldHVybiJcYiI7Y2FzZSJmIjpyZXR1cm4iXGYiO2Nhc2UibiI6cmV0dXJuYApgO2Nhc2UiciI6cmV0dXJuIlxyIjtjYXNlInQiOnJldHVybiIJIjtjYXNlInYiOnJldHVybiJcdiI7Y2FzZSIwIjpyZXR1cm4iXDAiO2RlZmF1bHQ6cmV0dXJuIGh9fW8ociwiY29udmVydEVzY2FwZUNoYXJhY3RlciIpO2Z1bmN0aW9uIG4oaCl7cmV0dXJuIGguY2hhckF0KDApPT09Il4iP2guc3Vic3RyaW5nKDEpOmh9byhuLCJjb252ZXJ0SUQiKSx0LmNvbnZlcnRJRD1uO2Z1bmN0aW9uIGkoaCl7cmV0dXJuIHBhcnNlSW50KGgpfW8oaSwiY29udmVydEludCIpLHQuY29udmVydEludD1pO2Z1bmN0aW9uIGEoaCl7cmV0dXJuIEJpZ0ludChoKX1vKGEsImNvbnZlcnRCaWdpbnQiKSx0LmNvbnZlcnRCaWdpbnQ9YTtmdW5jdGlvbiBzKGgpe3JldHVybiBuZXcgRGF0ZShoKX1vKHMsImNvbnZlcnREYXRlIiksdC5jb252ZXJ0RGF0ZT1zO2Z1bmN0aW9uIGwoaCl7cmV0dXJuIE51bWJlcihoKX1vKGwsImNvbnZlcnROdW1iZXIiKSx0LmNvbnZlcnROdW1iZXI9bDtmdW5jdGlvbiB1KGgpe3JldHVybiBoLnRvTG93ZXJDYXNlKCk9PT0idHJ1ZSJ9byh1LCJjb252ZXJ0Qm9vbGVhbiIpLHQuY29udmVydEJvb2xlYW49dX0pKHpjfHwoemM9e30pKX0pO3ZhciBoST1QaSh1ST0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodUksIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBsSTtmdW5jdGlvbiBjSSgpe2lmKGxJPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiTm8gcnVudGltZSBhYnN0cmFjdGlvbiBsYXllciBpbnN0YWxsZWQiKTtyZXR1cm4gbEl9byhjSSwiUkFMIik7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUocil7aWYocj09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIk5vIHJ1bnRpbWUgYWJzdHJhY3Rpb24gbGF5ZXIgcHJvdmlkZWQiKTtsST1yfW8oZSwiaW5zdGFsbCIpLHQuaW5zdGFsbD1lfSkoY0l8fChjST17fSkpO3VJLmRlZmF1bHQ9Y0l9KTt2YXIgUWNlPVBpKHphPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh6YSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7emEuc3RyaW5nQXJyYXk9emEuYXJyYXk9emEuZnVuYz16YS5lcnJvcj16YS5udW1iZXI9emEuc3RyaW5nPXphLmJvb2xlYW49dm9pZCAwO2Z1bmN0aW9uIFAkZSh0KXtyZXR1cm4gdD09PSEwfHx0PT09ITF9byhQJGUsImJvb2xlYW4iKTt6YS5ib29sZWFuPVAkZTtmdW5jdGlvbiBqY2UodCl7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nInx8dCBpbnN0YW5jZW9mIFN0cmluZ31vKGpjZSwic3RyaW5nIik7emEuc3RyaW5nPWpjZTtmdW5jdGlvbiBCJGUodCl7cmV0dXJuIHR5cGVvZiB0PT0ibnVtYmVyInx8dCBpbnN0YW5jZW9mIE51bWJlcn1vKEIkZSwibnVtYmVyIik7emEubnVtYmVyPUIkZTtmdW5jdGlvbiBGJGUodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBFcnJvcn1vKEYkZSwiZXJyb3IiKTt6YS5lcnJvcj1GJGU7ZnVuY3Rpb24gJCRlKHQpe3JldHVybiB0eXBlb2YgdD09ImZ1bmN0aW9uIn1vKCQkZSwiZnVuYyIpO3phLmZ1bmM9JCRlO2Z1bmN0aW9uIEtjZSh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KX1vKEtjZSwiYXJyYXkiKTt6YS5hcnJheT1LY2U7ZnVuY3Rpb24geiRlKHQpe3JldHVybiBLY2UodCkmJnQuZXZlcnkoZT0+amNlKGUpKX1vKHokZSwic3RyaW5nQXJyYXkiKTt6YS5zdHJpbmdBcnJheT16JGV9KTt2YXIgZEk9UGkoZzE9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGcxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtnMS5FbWl0dGVyPWcxLkV2ZW50PXZvaWQgMDt2YXIgRyRlPWhJKCksWmNlOyhmdW5jdGlvbih0KXtsZXQgZT17ZGlzcG9zZSgpe319O3QuTm9uZT1mdW5jdGlvbigpe3JldHVybiBlfX0pKFpjZXx8KGcxLkV2ZW50PVpjZT17fSkpO3ZhciBmST1jbGFzc3tzdGF0aWN7byh0aGlzLCJDYWxsYmFja0xpc3QiKX1hZGQoZSxyPW51bGwsbil7dGhpcy5fY2FsbGJhY2tzfHwodGhpcy5fY2FsbGJhY2tzPVtdLHRoaXMuX2NvbnRleHRzPVtdKSx0aGlzLl9jYWxsYmFja3MucHVzaChlKSx0aGlzLl9jb250ZXh0cy5wdXNoKHIpLEFycmF5LmlzQXJyYXkobikmJm4ucHVzaCh7ZGlzcG9zZTpvKCgpPT50aGlzLnJlbW92ZShlLHIpLCJkaXNwb3NlIil9KX1yZW1vdmUoZSxyPW51bGwpe2lmKCF0aGlzLl9jYWxsYmFja3MpcmV0dXJuO2xldCBuPSExO2ZvcihsZXQgaT0wLGE9dGhpcy5fY2FsbGJhY2tzLmxlbmd0aDtpPGE7aSsrKWlmKHRoaXMuX2NhbGxiYWNrc1tpXT09PWUpaWYodGhpcy5fY29udGV4dHNbaV09PT1yKXt0aGlzLl9jYWxsYmFja3Muc3BsaWNlKGksMSksdGhpcy5fY29udGV4dHMuc3BsaWNlKGksMSk7cmV0dXJufWVsc2Ugbj0hMDtpZihuKXRocm93IG5ldyBFcnJvcigiV2hlbiBhZGRpbmcgYSBsaXN0ZW5lciB3aXRoIGEgY29udGV4dCwgeW91IHNob3VsZCByZW1vdmUgaXQgd2l0aCB0aGUgc2FtZSBjb250ZXh0Iil9aW52b2tlKC4uLmUpe2lmKCF0aGlzLl9jYWxsYmFja3MpcmV0dXJuW107bGV0IHI9W10sbj10aGlzLl9jYWxsYmFja3Muc2xpY2UoMCksaT10aGlzLl9jb250ZXh0cy5zbGljZSgwKTtmb3IobGV0IGE9MCxzPW4ubGVuZ3RoO2E8czthKyspdHJ5e3IucHVzaChuW2FdLmFwcGx5KGlbYV0sZSkpfWNhdGNoKGwpeygwLEckZS5kZWZhdWx0KSgpLmNvbnNvbGUuZXJyb3IobCl9cmV0dXJuIHJ9aXNFbXB0eSgpe3JldHVybiF0aGlzLl9jYWxsYmFja3N8fHRoaXMuX2NhbGxiYWNrcy5sZW5ndGg9PT0wfWRpc3Bvc2UoKXt0aGlzLl9jYWxsYmFja3M9dm9pZCAwLHRoaXMuX2NvbnRleHRzPXZvaWQgMH19LEJFPWNsYXNzIHR7c3RhdGlje28odGhpcywiRW1pdHRlciIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuX29wdGlvbnM9ZX1nZXQgZXZlbnQoKXtyZXR1cm4gdGhpcy5fZXZlbnR8fCh0aGlzLl9ldmVudD0oZSxyLG4pPT57dGhpcy5fY2FsbGJhY2tzfHwodGhpcy5fY2FsbGJhY2tzPW5ldyBmSSksdGhpcy5fb3B0aW9ucyYmdGhpcy5fb3B0aW9ucy5vbkZpcnN0TGlzdGVuZXJBZGQmJnRoaXMuX2NhbGxiYWNrcy5pc0VtcHR5KCkmJnRoaXMuX29wdGlvbnMub25GaXJzdExpc3RlbmVyQWRkKHRoaXMpLHRoaXMuX2NhbGxiYWNrcy5hZGQoZSxyKTtsZXQgaT17ZGlzcG9zZTpvKCgpPT57dGhpcy5fY2FsbGJhY2tzJiYodGhpcy5fY2FsbGJhY2tzLnJlbW92ZShlLHIpLGkuZGlzcG9zZT10Ll9ub29wLHRoaXMuX29wdGlvbnMmJnRoaXMuX29wdGlvbnMub25MYXN0TGlzdGVuZXJSZW1vdmUmJnRoaXMuX2NhbGxiYWNrcy5pc0VtcHR5KCkmJnRoaXMuX29wdGlvbnMub25MYXN0TGlzdGVuZXJSZW1vdmUodGhpcykpfSwiZGlzcG9zZSIpfTtyZXR1cm4gQXJyYXkuaXNBcnJheShuKSYmbi5wdXNoKGkpLGl9KSx0aGlzLl9ldmVudH1maXJlKGUpe3RoaXMuX2NhbGxiYWNrcyYmdGhpcy5fY2FsbGJhY2tzLmludm9rZS5jYWxsKHRoaXMuX2NhbGxiYWNrcyxlKX1kaXNwb3NlKCl7dGhpcy5fY2FsbGJhY2tzJiYodGhpcy5fY2FsbGJhY2tzLmRpc3Bvc2UoKSx0aGlzLl9jYWxsYmFja3M9dm9pZCAwKX19O2cxLkVtaXR0ZXI9QkU7QkUuX25vb3A9ZnVuY3Rpb24oKXt9fSk7dmFyIEpjZT1QaSh5MT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeTEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3kxLkNhbmNlbGxhdGlvblRva2VuU291cmNlPXkxLkNhbmNlbGxhdGlvblRva2VuPXZvaWQgMDt2YXIgViRlPWhJKCksVSRlPVFjZSgpLHBJPWRJKCksRkU7KGZ1bmN0aW9uKHQpe3QuTm9uZT1PYmplY3QuZnJlZXplKHtpc0NhbmNlbGxhdGlvblJlcXVlc3RlZDohMSxvbkNhbmNlbGxhdGlvblJlcXVlc3RlZDpwSS5FdmVudC5Ob25lfSksdC5DYW5jZWxsZWQ9T2JqZWN0LmZyZWV6ZSh7aXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQ6ITAsb25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQ6cEkuRXZlbnQuTm9uZX0pO2Z1bmN0aW9uIGUocil7bGV0IG49cjtyZXR1cm4gbiYmKG49PT10Lk5vbmV8fG49PT10LkNhbmNlbGxlZHx8VSRlLmJvb2xlYW4obi5pc0NhbmNlbGxhdGlvblJlcXVlc3RlZCkmJiEhbi5vbkNhbmNlbGxhdGlvblJlcXVlc3RlZCl9byhlLCJpcyIpLHQuaXM9ZX0pKEZFfHwoeTEuQ2FuY2VsbGF0aW9uVG9rZW49RkU9e30pKTt2YXIgSCRlPU9iamVjdC5mcmVlemUoZnVuY3Rpb24odCxlKXtsZXQgcj0oMCxWJGUuZGVmYXVsdCkoKS50aW1lci5zZXRUaW1lb3V0KHQuYmluZChlKSwwKTtyZXR1cm57ZGlzcG9zZSgpe3IuZGlzcG9zZSgpfX19KSwkRT1jbGFzc3tzdGF0aWN7byh0aGlzLCJNdXRhYmxlVG9rZW4iKX1jb25zdHJ1Y3Rvcigpe3RoaXMuX2lzQ2FuY2VsbGVkPSExfWNhbmNlbCgpe3RoaXMuX2lzQ2FuY2VsbGVkfHwodGhpcy5faXNDYW5jZWxsZWQ9ITAsdGhpcy5fZW1pdHRlciYmKHRoaXMuX2VtaXR0ZXIuZmlyZSh2b2lkIDApLHRoaXMuZGlzcG9zZSgpKSl9Z2V0IGlzQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKCl7cmV0dXJuIHRoaXMuX2lzQ2FuY2VsbGVkfWdldCBvbkNhbmNlbGxhdGlvblJlcXVlc3RlZCgpe3JldHVybiB0aGlzLl9pc0NhbmNlbGxlZD9IJGU6KHRoaXMuX2VtaXR0ZXJ8fCh0aGlzLl9lbWl0dGVyPW5ldyBwSS5FbWl0dGVyKSx0aGlzLl9lbWl0dGVyLmV2ZW50KX1kaXNwb3NlKCl7dGhpcy5fZW1pdHRlciYmKHRoaXMuX2VtaXR0ZXIuZGlzcG9zZSgpLHRoaXMuX2VtaXR0ZXI9dm9pZCAwKX19LG1JPWNsYXNze3N0YXRpY3tvKHRoaXMsIkNhbmNlbGxhdGlvblRva2VuU291cmNlIil9Z2V0IHRva2VuKCl7cmV0dXJuIHRoaXMuX3Rva2VufHwodGhpcy5fdG9rZW49bmV3ICRFKSx0aGlzLl90b2tlbn1jYW5jZWwoKXt0aGlzLl90b2tlbj90aGlzLl90b2tlbi5jYW5jZWwoKTp0aGlzLl90b2tlbj1GRS5DYW5jZWxsZWR9ZGlzcG9zZSgpe3RoaXMuX3Rva2VuP3RoaXMuX3Rva2VuIGluc3RhbmNlb2YgJEUmJnRoaXMuX3Rva2VuLmRpc3Bvc2UoKTp0aGlzLl90b2tlbj1GRS5Ob25lfX07eTEuQ2FuY2VsbGF0aW9uVG9rZW5Tb3VyY2U9bUl9KTt2YXIgeXI9e307dmFyIEtvPU4oKCk9PnsidXNlIHN0cmljdCI7Q3IoeXIsQWEoSmNlKCksMSkpfSk7ZnVuY3Rpb24gZ0koKXtyZXR1cm4gbmV3IFByb21pc2UodD0+e3R5cGVvZiBzZXRJbW1lZGlhdGU+InUiP3NldFRpbWVvdXQodCwwKTpzZXRJbW1lZGlhdGUodCl9KX1mdW5jdGlvbiBHRSgpe3JldHVybiB6RT1wZXJmb3JtYW5jZS5ub3coKSxuZXcgeXIuQ2FuY2VsbGF0aW9uVG9rZW5Tb3VyY2V9ZnVuY3Rpb24gdHVlKHQpe2V1ZT10fWZ1bmN0aW9uIFZjKHQpe3JldHVybiB0PT09R2N9YXN5bmMgZnVuY3Rpb24gd2kodCl7aWYodD09PXlyLkNhbmNlbGxhdGlvblRva2VuLk5vbmUpcmV0dXJuO2xldCBlPXBlcmZvcm1hbmNlLm5vdygpO2lmKGUtekU+PWV1ZSYmKHpFPWUsYXdhaXQgZ0koKSx6RT1wZXJmb3JtYW5jZS5ub3coKSksdC5pc0NhbmNlbGxhdGlvblJlcXVlc3RlZCl0aHJvdyBHY312YXIgekUsZXVlLEdjLHBzLFFvPU4oKCk9PnsidXNlIHN0cmljdCI7S28oKTtvKGdJLCJkZWxheU5leHRUaWNrIik7ekU9MCxldWU9MTA7byhHRSwic3RhcnRDYW5jZWxhYmxlT3BlcmF0aW9uIik7byh0dWUsInNldEludGVycnVwdGlvblBlcmlvZCIpO0djPVN5bWJvbCgiT3BlcmF0aW9uQ2FuY2VsbGVkIik7byhWYywiaXNPcGVyYXRpb25DYW5jZWxsZWQiKTtvKHdpLCJpbnRlcnJ1cHRBbmRDaGVjayIpO3BzPWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmVycmVkIil9Y29uc3RydWN0b3IoKXt0aGlzLnByb21pc2U9bmV3IFByb21pc2UoKGUscik9Pnt0aGlzLnJlc29sdmU9bj0+KGUobiksdGhpcyksdGhpcy5yZWplY3Q9bj0+KHIobiksdGhpcyl9KX19fSk7ZnVuY3Rpb24geUkodCxlKXtpZih0Lmxlbmd0aDw9MSlyZXR1cm4gdDtsZXQgcj10Lmxlbmd0aC8yfDAsbj10LnNsaWNlKDAsciksaT10LnNsaWNlKHIpO3lJKG4sZSkseUkoaSxlKTtsZXQgYT0wLHM9MCxsPTA7Zm9yKDthPG4ubGVuZ3RoJiZzPGkubGVuZ3RoOyllKG5bYV0saVtzXSk8PTA/dFtsKytdPW5bYSsrXTp0W2wrK109aVtzKytdO2Zvcig7YTxuLmxlbmd0aDspdFtsKytdPW5bYSsrXTtmb3IoO3M8aS5sZW5ndGg7KXRbbCsrXT1pW3MrK107cmV0dXJuIHR9ZnVuY3Rpb24gcnVlKHQsZSxyPTApe2xldCBuPWU/W3JdOltdO2ZvcihsZXQgaT0wO2k8dC5sZW5ndGg7aSsrKXtsZXQgYT10LmNoYXJDb2RlQXQoaSk7bnVlKGEpJiYoYT09PTEzJiZpKzE8dC5sZW5ndGgmJnQuY2hhckNvZGVBdChpKzEpPT09MTAmJmkrKyxuLnB1c2gocitpKzEpKX1yZXR1cm4gbn1mdW5jdGlvbiBudWUodCl7cmV0dXJuIHQ9PT0xM3x8dD09PTEwfWZ1bmN0aW9uIGl1ZSh0KXtsZXQgZT10LnN0YXJ0LHI9dC5lbmQ7cmV0dXJuIGUubGluZT5yLmxpbmV8fGUubGluZT09PXIubGluZSYmZS5jaGFyYWN0ZXI+ci5jaGFyYWN0ZXI/e3N0YXJ0OnIsZW5kOmV9OnR9ZnVuY3Rpb24gVyRlKHQpe2xldCBlPWl1ZSh0LnJhbmdlKTtyZXR1cm4gZSE9PXQucmFuZ2U/e25ld1RleHQ6dC5uZXdUZXh0LHJhbmdlOmV9OnR9dmFyIFZFLHYxLGF1ZT1OKCgpPT57InVzZSBzdHJpY3QiO1ZFPWNsYXNzIHR7c3RhdGlje28odGhpcywiRnVsbFRleHREb2N1bWVudCIpfWNvbnN0cnVjdG9yKGUscixuLGkpe3RoaXMuX3VyaT1lLHRoaXMuX2xhbmd1YWdlSWQ9cix0aGlzLl92ZXJzaW9uPW4sdGhpcy5fY29udGVudD1pLHRoaXMuX2xpbmVPZmZzZXRzPXZvaWQgMH1nZXQgdXJpKCl7cmV0dXJuIHRoaXMuX3VyaX1nZXQgbGFuZ3VhZ2VJZCgpe3JldHVybiB0aGlzLl9sYW5ndWFnZUlkfWdldCB2ZXJzaW9uKCl7cmV0dXJuIHRoaXMuX3ZlcnNpb259Z2V0VGV4dChlKXtpZihlKXtsZXQgcj10aGlzLm9mZnNldEF0KGUuc3RhcnQpLG49dGhpcy5vZmZzZXRBdChlLmVuZCk7cmV0dXJuIHRoaXMuX2NvbnRlbnQuc3Vic3RyaW5nKHIsbil9cmV0dXJuIHRoaXMuX2NvbnRlbnR9dXBkYXRlKGUscil7Zm9yKGxldCBuIG9mIGUpaWYodC5pc0luY3JlbWVudGFsKG4pKXtsZXQgaT1pdWUobi5yYW5nZSksYT10aGlzLm9mZnNldEF0KGkuc3RhcnQpLHM9dGhpcy5vZmZzZXRBdChpLmVuZCk7dGhpcy5fY29udGVudD10aGlzLl9jb250ZW50LnN1YnN0cmluZygwLGEpK24udGV4dCt0aGlzLl9jb250ZW50LnN1YnN0cmluZyhzLHRoaXMuX2NvbnRlbnQubGVuZ3RoKTtsZXQgbD1NYXRoLm1heChpLnN0YXJ0LmxpbmUsMCksdT1NYXRoLm1heChpLmVuZC5saW5lLDApLGg9dGhpcy5fbGluZU9mZnNldHMsZj1ydWUobi50ZXh0LCExLGEpO2lmKHUtbD09PWYubGVuZ3RoKWZvcihsZXQgcD0wLG09Zi5sZW5ndGg7cDxtO3ArKyloW3ArbCsxXT1mW3BdO2Vsc2UgZi5sZW5ndGg8MWU0P2guc3BsaWNlKGwrMSx1LWwsLi4uZik6dGhpcy5fbGluZU9mZnNldHM9aD1oLnNsaWNlKDAsbCsxKS5jb25jYXQoZixoLnNsaWNlKHUrMSkpO2xldCBkPW4udGV4dC5sZW5ndGgtKHMtYSk7aWYoZCE9PTApZm9yKGxldCBwPWwrMStmLmxlbmd0aCxtPWgubGVuZ3RoO3A8bTtwKyspaFtwXT1oW3BdK2R9ZWxzZSBpZih0LmlzRnVsbChuKSl0aGlzLl9jb250ZW50PW4udGV4dCx0aGlzLl9saW5lT2Zmc2V0cz12b2lkIDA7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gY2hhbmdlIGV2ZW50IHJlY2VpdmVkIik7dGhpcy5fdmVyc2lvbj1yfWdldExpbmVPZmZzZXRzKCl7cmV0dXJuIHRoaXMuX2xpbmVPZmZzZXRzPT09dm9pZCAwJiYodGhpcy5fbGluZU9mZnNldHM9cnVlKHRoaXMuX2NvbnRlbnQsITApKSx0aGlzLl9saW5lT2Zmc2V0c31wb3NpdGlvbkF0KGUpe2U9TWF0aC5tYXgoTWF0aC5taW4oZSx0aGlzLl9jb250ZW50Lmxlbmd0aCksMCk7bGV0IHI9dGhpcy5nZXRMaW5lT2Zmc2V0cygpLG49MCxpPXIubGVuZ3RoO2lmKGk9PT0wKXJldHVybntsaW5lOjAsY2hhcmFjdGVyOmV9O2Zvcig7bjxpOyl7bGV0IHM9TWF0aC5mbG9vcigobitpKS8yKTtyW3NdPmU/aT1zOm49cysxfWxldCBhPW4tMTtyZXR1cm4gZT10aGlzLmVuc3VyZUJlZm9yZUVPTChlLHJbYV0pLHtsaW5lOmEsY2hhcmFjdGVyOmUtclthXX19b2Zmc2V0QXQoZSl7bGV0IHI9dGhpcy5nZXRMaW5lT2Zmc2V0cygpO2lmKGUubGluZT49ci5sZW5ndGgpcmV0dXJuIHRoaXMuX2NvbnRlbnQubGVuZ3RoO2lmKGUubGluZTwwKXJldHVybiAwO2xldCBuPXJbZS5saW5lXTtpZihlLmNoYXJhY3Rlcjw9MClyZXR1cm4gbjtsZXQgaT1lLmxpbmUrMTxyLmxlbmd0aD9yW2UubGluZSsxXTp0aGlzLl9jb250ZW50Lmxlbmd0aCxhPU1hdGgubWluKG4rZS5jaGFyYWN0ZXIsaSk7cmV0dXJuIHRoaXMuZW5zdXJlQmVmb3JlRU9MKGEsbil9ZW5zdXJlQmVmb3JlRU9MKGUscil7Zm9yKDtlPnImJm51ZSh0aGlzLl9jb250ZW50LmNoYXJDb2RlQXQoZS0xKSk7KWUtLTtyZXR1cm4gZX1nZXQgbGluZUNvdW50KCl7cmV0dXJuIHRoaXMuZ2V0TGluZU9mZnNldHMoKS5sZW5ndGh9c3RhdGljIGlzSW5jcmVtZW50YWwoZSl7bGV0IHI9ZTtyZXR1cm4gciE9bnVsbCYmdHlwZW9mIHIudGV4dD09InN0cmluZyImJnIucmFuZ2UhPT12b2lkIDAmJihyLnJhbmdlTGVuZ3RoPT09dm9pZCAwfHx0eXBlb2Ygci5yYW5nZUxlbmd0aD09Im51bWJlciIpfXN0YXRpYyBpc0Z1bGwoZSl7bGV0IHI9ZTtyZXR1cm4gciE9bnVsbCYmdHlwZW9mIHIudGV4dD09InN0cmluZyImJnIucmFuZ2U9PT12b2lkIDAmJnIucmFuZ2VMZW5ndGg9PT12b2lkIDB9fTsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShpLGEscyxsKXtyZXR1cm4gbmV3IFZFKGksYSxzLGwpfW8oZSwiY3JlYXRlIiksdC5jcmVhdGU9ZTtmdW5jdGlvbiByKGksYSxzKXtpZihpIGluc3RhbmNlb2YgVkUpcmV0dXJuIGkudXBkYXRlKGEscyksaTt0aHJvdyBuZXcgRXJyb3IoIlRleHREb2N1bWVudC51cGRhdGU6IGRvY3VtZW50IG11c3QgYmUgY3JlYXRlZCBieSBUZXh0RG9jdW1lbnQuY3JlYXRlIil9byhyLCJ1cGRhdGUiKSx0LnVwZGF0ZT1yO2Z1bmN0aW9uIG4oaSxhKXtsZXQgcz1pLmdldFRleHQoKSxsPXlJKGEubWFwKFckZSksKGYsZCk9PntsZXQgcD1mLnJhbmdlLnN0YXJ0LmxpbmUtZC5yYW5nZS5zdGFydC5saW5lO3JldHVybiBwPT09MD9mLnJhbmdlLnN0YXJ0LmNoYXJhY3Rlci1kLnJhbmdlLnN0YXJ0LmNoYXJhY3RlcjpwfSksdT0wLGg9W107Zm9yKGxldCBmIG9mIGwpe2xldCBkPWkub2Zmc2V0QXQoZi5yYW5nZS5zdGFydCk7aWYoZDx1KXRocm93IG5ldyBFcnJvcigiT3ZlcmxhcHBpbmcgZWRpdCIpO2Q+dSYmaC5wdXNoKHMuc3Vic3RyaW5nKHUsZCkpLGYubmV3VGV4dC5sZW5ndGgmJmgucHVzaChmLm5ld1RleHQpLHU9aS5vZmZzZXRBdChmLnJhbmdlLmVuZCl9cmV0dXJuIGgucHVzaChzLnN1YnN0cih1KSksaC5qb2luKCIiKX1vKG4sImFwcGx5RWRpdHMiKSx0LmFwcGx5RWRpdHM9bn0pKHYxfHwodjE9e30pKTtvKHlJLCJtZXJnZVNvcnQiKTtvKHJ1ZSwiY29tcHV0ZUxpbmVPZmZzZXRzIik7byhudWUsImlzRU9MIik7byhpdWUsImdldFdlbGxmb3JtZWRSYW5nZSIpO28oVyRlLCJnZXRXZWxsZm9ybWVkRWRpdCIpfSk7dmFyIHN1ZSxtcyx4MSx2ST1OKCgpPT57InVzZSBzdHJpY3QiOygoKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgdD17NDcwOmk9PntmdW5jdGlvbiBhKHUpe2lmKHR5cGVvZiB1IT0ic3RyaW5nIil0aHJvdyBuZXcgVHlwZUVycm9yKCJQYXRoIG11c3QgYmUgYSBzdHJpbmcuIFJlY2VpdmVkICIrSlNPTi5zdHJpbmdpZnkodSkpfW8oYSwiZSIpO2Z1bmN0aW9uIHModSxoKXtmb3IodmFyIGYsZD0iIixwPTAsbT0tMSxnPTAseT0wO3k8PXUubGVuZ3RoOysreSl7aWYoeTx1Lmxlbmd0aClmPXUuY2hhckNvZGVBdCh5KTtlbHNle2lmKGY9PT00NylicmVhaztmPTQ3fWlmKGY9PT00Nyl7aWYoIShtPT09eS0xfHxnPT09MSkpaWYobSE9PXktMSYmZz09PTIpe2lmKGQubGVuZ3RoPDJ8fHAhPT0yfHxkLmNoYXJDb2RlQXQoZC5sZW5ndGgtMSkhPT00Nnx8ZC5jaGFyQ29kZUF0KGQubGVuZ3RoLTIpIT09NDYpe2lmKGQubGVuZ3RoPjIpe3ZhciB2PWQubGFzdEluZGV4T2YoIi8iKTtpZih2IT09ZC5sZW5ndGgtMSl7dj09PS0xPyhkPSIiLHA9MCk6cD0oZD1kLnNsaWNlKDAsdikpLmxlbmd0aC0xLWQubGFzdEluZGV4T2YoIi8iKSxtPXksZz0wO2NvbnRpbnVlfX1lbHNlIGlmKGQubGVuZ3RoPT09Mnx8ZC5sZW5ndGg9PT0xKXtkPSIiLHA9MCxtPXksZz0wO2NvbnRpbnVlfX1oJiYoZC5sZW5ndGg+MD9kKz0iLy4uIjpkPSIuLiIscD0yKX1lbHNlIGQubGVuZ3RoPjA/ZCs9Ii8iK3Uuc2xpY2UobSsxLHkpOmQ9dS5zbGljZShtKzEseSkscD15LW0tMTttPXksZz0wfWVsc2UgZj09PTQ2JiZnIT09LTE/KytnOmc9LTF9cmV0dXJuIGR9byhzLCJyIik7dmFyIGw9e3Jlc29sdmU6byhmdW5jdGlvbigpe2Zvcih2YXIgdSxoPSIiLGY9ITEsZD1hcmd1bWVudHMubGVuZ3RoLTE7ZD49LTEmJiFmO2QtLSl7dmFyIHA7ZD49MD9wPWFyZ3VtZW50c1tkXToodT09PXZvaWQgMCYmKHU9cHJvY2Vzcy5jd2QoKSkscD11KSxhKHApLHAubGVuZ3RoIT09MCYmKGg9cCsiLyIraCxmPXAuY2hhckNvZGVBdCgwKT09PTQ3KX1yZXR1cm4gaD1zKGgsIWYpLGY/aC5sZW5ndGg+MD8iLyIraDoiLyI6aC5sZW5ndGg+MD9oOiIuIn0sInJlc29sdmUiKSxub3JtYWxpemU6byhmdW5jdGlvbih1KXtpZihhKHUpLHUubGVuZ3RoPT09MClyZXR1cm4iLiI7dmFyIGg9dS5jaGFyQ29kZUF0KDApPT09NDcsZj11LmNoYXJDb2RlQXQodS5sZW5ndGgtMSk9PT00NztyZXR1cm4odT1zKHUsIWgpKS5sZW5ndGghPT0wfHxofHwodT0iLiIpLHUubGVuZ3RoPjAmJmYmJih1Kz0iLyIpLGg/Ii8iK3U6dX0sIm5vcm1hbGl6ZSIpLGlzQWJzb2x1dGU6byhmdW5jdGlvbih1KXtyZXR1cm4gYSh1KSx1Lmxlbmd0aD4wJiZ1LmNoYXJDb2RlQXQoMCk9PT00N30sImlzQWJzb2x1dGUiKSxqb2luOm8oZnVuY3Rpb24oKXtpZihhcmd1bWVudHMubGVuZ3RoPT09MClyZXR1cm4iLiI7Zm9yKHZhciB1LGg9MDtoPGFyZ3VtZW50cy5sZW5ndGg7KytoKXt2YXIgZj1hcmd1bWVudHNbaF07YShmKSxmLmxlbmd0aD4wJiYodT09PXZvaWQgMD91PWY6dSs9Ii8iK2YpfXJldHVybiB1PT09dm9pZCAwPyIuIjpsLm5vcm1hbGl6ZSh1KX0sImpvaW4iKSxyZWxhdGl2ZTpvKGZ1bmN0aW9uKHUsaCl7aWYoYSh1KSxhKGgpLHU9PT1ofHwodT1sLnJlc29sdmUodSkpPT09KGg9bC5yZXNvbHZlKGgpKSlyZXR1cm4iIjtmb3IodmFyIGY9MTtmPHUubGVuZ3RoJiZ1LmNoYXJDb2RlQXQoZik9PT00NzsrK2YpO2Zvcih2YXIgZD11Lmxlbmd0aCxwPWQtZixtPTE7bTxoLmxlbmd0aCYmaC5jaGFyQ29kZUF0KG0pPT09NDc7KyttKTtmb3IodmFyIGc9aC5sZW5ndGgtbSx5PXA8Zz9wOmcsdj0tMSx4PTA7eDw9eTsrK3gpe2lmKHg9PT15KXtpZihnPnkpe2lmKGguY2hhckNvZGVBdChtK3gpPT09NDcpcmV0dXJuIGguc2xpY2UobSt4KzEpO2lmKHg9PT0wKXJldHVybiBoLnNsaWNlKG0reCl9ZWxzZSBwPnkmJih1LmNoYXJDb2RlQXQoZit4KT09PTQ3P3Y9eDp4PT09MCYmKHY9MCkpO2JyZWFrfXZhciBiPXUuY2hhckNvZGVBdChmK3gpO2lmKGIhPT1oLmNoYXJDb2RlQXQobSt4KSlicmVhaztiPT09NDcmJih2PXgpfXZhciBUPSIiO2Zvcih4PWYrdisxO3g8PWQ7Kyt4KXghPT1kJiZ1LmNoYXJDb2RlQXQoeCkhPT00N3x8KFQubGVuZ3RoPT09MD9UKz0iLi4iOlQrPSIvLi4iKTtyZXR1cm4gVC5sZW5ndGg+MD9UK2guc2xpY2UobSt2KToobSs9dixoLmNoYXJDb2RlQXQobSk9PT00NyYmKyttLGguc2xpY2UobSkpfSwicmVsYXRpdmUiKSxfbWFrZUxvbmc6byhmdW5jdGlvbih1KXtyZXR1cm4gdX0sIl9tYWtlTG9uZyIpLGRpcm5hbWU6byhmdW5jdGlvbih1KXtpZihhKHUpLHUubGVuZ3RoPT09MClyZXR1cm4iLiI7Zm9yKHZhciBoPXUuY2hhckNvZGVBdCgwKSxmPWg9PT00NyxkPS0xLHA9ITAsbT11Lmxlbmd0aC0xO20+PTE7LS1tKWlmKChoPXUuY2hhckNvZGVBdChtKSk9PT00Nyl7aWYoIXApe2Q9bTticmVha319ZWxzZSBwPSExO3JldHVybiBkPT09LTE/Zj8iLyI6Ii4iOmYmJmQ9PT0xPyIvLyI6dS5zbGljZSgwLGQpfSwiZGlybmFtZSIpLGJhc2VuYW1lOm8oZnVuY3Rpb24odSxoKXtpZihoIT09dm9pZCAwJiZ0eXBlb2YgaCE9InN0cmluZyIpdGhyb3cgbmV3IFR5cGVFcnJvcignImV4dCIgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZycpO2EodSk7dmFyIGYsZD0wLHA9LTEsbT0hMDtpZihoIT09dm9pZCAwJiZoLmxlbmd0aD4wJiZoLmxlbmd0aDw9dS5sZW5ndGgpe2lmKGgubGVuZ3RoPT09dS5sZW5ndGgmJmg9PT11KXJldHVybiIiO3ZhciBnPWgubGVuZ3RoLTEseT0tMTtmb3IoZj11Lmxlbmd0aC0xO2Y+PTA7LS1mKXt2YXIgdj11LmNoYXJDb2RlQXQoZik7aWYodj09PTQ3KXtpZighbSl7ZD1mKzE7YnJlYWt9fWVsc2UgeT09PS0xJiYobT0hMSx5PWYrMSksZz49MCYmKHY9PT1oLmNoYXJDb2RlQXQoZyk/LS1nPT0tMSYmKHA9Zik6KGc9LTEscD15KSl9cmV0dXJuIGQ9PT1wP3A9eTpwPT09LTEmJihwPXUubGVuZ3RoKSx1LnNsaWNlKGQscCl9Zm9yKGY9dS5sZW5ndGgtMTtmPj0wOy0tZilpZih1LmNoYXJDb2RlQXQoZik9PT00Nyl7aWYoIW0pe2Q9ZisxO2JyZWFrfX1lbHNlIHA9PT0tMSYmKG09ITEscD1mKzEpO3JldHVybiBwPT09LTE/IiI6dS5zbGljZShkLHApfSwiYmFzZW5hbWUiKSxleHRuYW1lOm8oZnVuY3Rpb24odSl7YSh1KTtmb3IodmFyIGg9LTEsZj0wLGQ9LTEscD0hMCxtPTAsZz11Lmxlbmd0aC0xO2c+PTA7LS1nKXt2YXIgeT11LmNoYXJDb2RlQXQoZyk7aWYoeSE9PTQ3KWQ9PT0tMSYmKHA9ITEsZD1nKzEpLHk9PT00Nj9oPT09LTE/aD1nOm0hPT0xJiYobT0xKTpoIT09LTEmJihtPS0xKTtlbHNlIGlmKCFwKXtmPWcrMTticmVha319cmV0dXJuIGg9PT0tMXx8ZD09PS0xfHxtPT09MHx8bT09PTEmJmg9PT1kLTEmJmg9PT1mKzE/IiI6dS5zbGljZShoLGQpfSwiZXh0bmFtZSIpLGZvcm1hdDpvKGZ1bmN0aW9uKHUpe2lmKHU9PT1udWxsfHx0eXBlb2YgdSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJwYXRoT2JqZWN0IiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIHUpO3JldHVybiBmdW5jdGlvbihoLGYpe3ZhciBkPWYuZGlyfHxmLnJvb3QscD1mLmJhc2V8fChmLm5hbWV8fCIiKSsoZi5leHR8fCIiKTtyZXR1cm4gZD9kPT09Zi5yb290P2QrcDpkKyIvIitwOnB9KDAsdSl9LCJmb3JtYXQiKSxwYXJzZTpvKGZ1bmN0aW9uKHUpe2EodSk7dmFyIGg9e3Jvb3Q6IiIsZGlyOiIiLGJhc2U6IiIsZXh0OiIiLG5hbWU6IiJ9O2lmKHUubGVuZ3RoPT09MClyZXR1cm4gaDt2YXIgZixkPXUuY2hhckNvZGVBdCgwKSxwPWQ9PT00NztwPyhoLnJvb3Q9Ii8iLGY9MSk6Zj0wO2Zvcih2YXIgbT0tMSxnPTAseT0tMSx2PSEwLHg9dS5sZW5ndGgtMSxiPTA7eD49ZjstLXgpaWYoKGQ9dS5jaGFyQ29kZUF0KHgpKSE9PTQ3KXk9PT0tMSYmKHY9ITEseT14KzEpLGQ9PT00Nj9tPT09LTE/bT14OmIhPT0xJiYoYj0xKTptIT09LTEmJihiPS0xKTtlbHNlIGlmKCF2KXtnPXgrMTticmVha31yZXR1cm4gbT09PS0xfHx5PT09LTF8fGI9PT0wfHxiPT09MSYmbT09PXktMSYmbT09PWcrMT95IT09LTEmJihoLmJhc2U9aC5uYW1lPWc9PT0wJiZwP3Uuc2xpY2UoMSx5KTp1LnNsaWNlKGcseSkpOihnPT09MCYmcD8oaC5uYW1lPXUuc2xpY2UoMSxtKSxoLmJhc2U9dS5zbGljZSgxLHkpKTooaC5uYW1lPXUuc2xpY2UoZyxtKSxoLmJhc2U9dS5zbGljZShnLHkpKSxoLmV4dD11LnNsaWNlKG0seSkpLGc+MD9oLmRpcj11LnNsaWNlKDAsZy0xKTpwJiYoaC5kaXI9Ii8iKSxofSwicGFyc2UiKSxzZXA6Ii8iLGRlbGltaXRlcjoiOiIsd2luMzI6bnVsbCxwb3NpeDpudWxsfTtsLnBvc2l4PWwsaS5leHBvcnRzPWx9fSxlPXt9O2Z1bmN0aW9uIHIoaSl7dmFyIGE9ZVtpXTtpZihhIT09dm9pZCAwKXJldHVybiBhLmV4cG9ydHM7dmFyIHM9ZVtpXT17ZXhwb3J0czp7fX07cmV0dXJuIHRbaV0ocyxzLmV4cG9ydHMscikscy5leHBvcnRzfW8ociwiciIpLHIuZD0oaSxhKT0+e2Zvcih2YXIgcyBpbiBhKXIubyhhLHMpJiYhci5vKGkscykmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLHMse2VudW1lcmFibGU6ITAsZ2V0OmFbc119KX0sci5vPShpLGEpPT5PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSxhKSxyLnI9aT0+e3R5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9O3ZhciBuPXt9OygoKT0+e2xldCBpO3IucihuKSxyLmQobix7VVJJOm8oKCk9PnAsIlVSSSIpLFV0aWxzOm8oKCk9Pk8sIlV0aWxzIil9KSx0eXBlb2YgcHJvY2Vzcz09Im9iamVjdCI/aT1wcm9jZXNzLnBsYXRmb3JtPT09IndpbjMyIjp0eXBlb2YgbmF2aWdhdG9yPT0ib2JqZWN0IiYmKGk9bmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJXaW5kb3dzIik+PTApO2xldCBhPS9eXHdbXHdcZCsuLV0qJC8scz0vXlwvLyxsPS9eXC9cLy87ZnVuY3Rpb24gdShSLGspe2lmKCFSLnNjaGVtZSYmayl0aHJvdyBuZXcgRXJyb3IoYFtVcmlFcnJvcl06IFNjaGVtZSBpcyBtaXNzaW5nOiB7c2NoZW1lOiAiIiwgYXV0aG9yaXR5OiAiJHtSLmF1dGhvcml0eX0iLCBwYXRoOiAiJHtSLnBhdGh9IiwgcXVlcnk6ICIke1IucXVlcnl9IiwgZnJhZ21lbnQ6ICIke1IuZnJhZ21lbnR9In1gKTtpZihSLnNjaGVtZSYmIWEudGVzdChSLnNjaGVtZSkpdGhyb3cgbmV3IEVycm9yKCJbVXJpRXJyb3JdOiBTY2hlbWUgY29udGFpbnMgaWxsZWdhbCBjaGFyYWN0ZXJzLiIpO2lmKFIucGF0aCl7aWYoUi5hdXRob3JpdHkpe2lmKCFzLnRlc3QoUi5wYXRoKSl0aHJvdyBuZXcgRXJyb3IoJ1tVcmlFcnJvcl06IElmIGEgVVJJIGNvbnRhaW5zIGFuIGF1dGhvcml0eSBjb21wb25lbnQsIHRoZW4gdGhlIHBhdGggY29tcG9uZW50IG11c3QgZWl0aGVyIGJlIGVtcHR5IG9yIGJlZ2luIHdpdGggYSBzbGFzaCAoIi8iKSBjaGFyYWN0ZXInKX1lbHNlIGlmKGwudGVzdChSLnBhdGgpKXRocm93IG5ldyBFcnJvcignW1VyaUVycm9yXTogSWYgYSBVUkkgZG9lcyBub3QgY29udGFpbiBhbiBhdXRob3JpdHkgY29tcG9uZW50LCB0aGVuIHRoZSBwYXRoIGNhbm5vdCBiZWdpbiB3aXRoIHR3byBzbGFzaCBjaGFyYWN0ZXJzICgiLy8iKScpfX1vKHUsInMiKTtsZXQgaD0iIixmPSIvIixkPS9eKChbXjovPyNdKz8pOik/KFwvXC8oW14vPyNdKikpPyhbXj8jXSopKFw/KFteI10qKSk/KCMoLiopKT8vO2NsYXNzIHB7c3RhdGlje28odGhpcywiZiIpfXN0YXRpYyBpc1VyaShrKXtyZXR1cm4gayBpbnN0YW5jZW9mIHB8fCEhayYmdHlwZW9mIGsuYXV0aG9yaXR5PT0ic3RyaW5nIiYmdHlwZW9mIGsuZnJhZ21lbnQ9PSJzdHJpbmciJiZ0eXBlb2Ygay5wYXRoPT0ic3RyaW5nIiYmdHlwZW9mIGsucXVlcnk9PSJzdHJpbmciJiZ0eXBlb2Ygay5zY2hlbWU9PSJzdHJpbmciJiZ0eXBlb2Ygay5mc1BhdGg9PSJzdHJpbmciJiZ0eXBlb2Ygay53aXRoPT0iZnVuY3Rpb24iJiZ0eXBlb2Ygay50b1N0cmluZz09ImZ1bmN0aW9uIn1zY2hlbWU7YXV0aG9yaXR5O3BhdGg7cXVlcnk7ZnJhZ21lbnQ7Y29uc3RydWN0b3IoayxMLEEsSSxNLFA9ITEpe3R5cGVvZiBrPT0ib2JqZWN0Ij8odGhpcy5zY2hlbWU9ay5zY2hlbWV8fGgsdGhpcy5hdXRob3JpdHk9ay5hdXRob3JpdHl8fGgsdGhpcy5wYXRoPWsucGF0aHx8aCx0aGlzLnF1ZXJ5PWsucXVlcnl8fGgsdGhpcy5mcmFnbWVudD1rLmZyYWdtZW50fHxoKToodGhpcy5zY2hlbWU9ZnVuY3Rpb24oQixGKXtyZXR1cm4gQnx8Rj9COiJmaWxlIn0oayxQKSx0aGlzLmF1dGhvcml0eT1MfHxoLHRoaXMucGF0aD1mdW5jdGlvbihCLEYpe3N3aXRjaChCKXtjYXNlImh0dHBzIjpjYXNlImh0dHAiOmNhc2UiZmlsZSI6Rj9GWzBdIT09ZiYmKEY9ZitGKTpGPWZ9cmV0dXJuIEZ9KHRoaXMuc2NoZW1lLEF8fGgpLHRoaXMucXVlcnk9SXx8aCx0aGlzLmZyYWdtZW50PU18fGgsdSh0aGlzLFApKX1nZXQgZnNQYXRoKCl7cmV0dXJuIGIodGhpcywhMSl9d2l0aChrKXtpZighaylyZXR1cm4gdGhpcztsZXR7c2NoZW1lOkwsYXV0aG9yaXR5OkEscGF0aDpJLHF1ZXJ5Ok0sZnJhZ21lbnQ6UH09aztyZXR1cm4gTD09PXZvaWQgMD9MPXRoaXMuc2NoZW1lOkw9PT1udWxsJiYoTD1oKSxBPT09dm9pZCAwP0E9dGhpcy5hdXRob3JpdHk6QT09PW51bGwmJihBPWgpLEk9PT12b2lkIDA/ST10aGlzLnBhdGg6ST09PW51bGwmJihJPWgpLE09PT12b2lkIDA/TT10aGlzLnF1ZXJ5Ok09PT1udWxsJiYoTT1oKSxQPT09dm9pZCAwP1A9dGhpcy5mcmFnbWVudDpQPT09bnVsbCYmKFA9aCksTD09PXRoaXMuc2NoZW1lJiZBPT09dGhpcy5hdXRob3JpdHkmJkk9PT10aGlzLnBhdGgmJk09PT10aGlzLnF1ZXJ5JiZQPT09dGhpcy5mcmFnbWVudD90aGlzOm5ldyBnKEwsQSxJLE0sUCl9c3RhdGljIHBhcnNlKGssTD0hMSl7bGV0IEE9ZC5leGVjKGspO3JldHVybiBBP25ldyBnKEFbMl18fGgsRShBWzRdfHxoKSxFKEFbNV18fGgpLEUoQVs3XXx8aCksRShBWzldfHxoKSxMKTpuZXcgZyhoLGgsaCxoLGgpfXN0YXRpYyBmaWxlKGspe2xldCBMPWg7aWYoaSYmKGs9ay5yZXBsYWNlKC9cXC9nLGYpKSxrWzBdPT09ZiYma1sxXT09PWYpe2xldCBBPWsuaW5kZXhPZihmLDIpO0E9PT0tMT8oTD1rLnN1YnN0cmluZygyKSxrPWYpOihMPWsuc3Vic3RyaW5nKDIsQSksaz1rLnN1YnN0cmluZyhBKXx8Zil9cmV0dXJuIG5ldyBnKCJmaWxlIixMLGssaCxoKX1zdGF0aWMgZnJvbShrKXtsZXQgTD1uZXcgZyhrLnNjaGVtZSxrLmF1dGhvcml0eSxrLnBhdGgsay5xdWVyeSxrLmZyYWdtZW50KTtyZXR1cm4gdShMLCEwKSxMfXRvU3RyaW5nKGs9ITEpe3JldHVybiBUKHRoaXMsayl9dG9KU09OKCl7cmV0dXJuIHRoaXN9c3RhdGljIHJldml2ZShrKXtpZihrKXtpZihrIGluc3RhbmNlb2YgcClyZXR1cm4gazt7bGV0IEw9bmV3IGcoayk7cmV0dXJuIEwuX2Zvcm1hdHRlZD1rLmV4dGVybmFsLEwuX2ZzUGF0aD1rLl9zZXA9PT1tP2suZnNQYXRoOm51bGwsTH19cmV0dXJuIGt9fWxldCBtPWk/MTp2b2lkIDA7Y2xhc3MgZyBleHRlbmRzIHB7c3RhdGlje28odGhpcywibCIpfV9mb3JtYXR0ZWQ9bnVsbDtfZnNQYXRoPW51bGw7Z2V0IGZzUGF0aCgpe3JldHVybiB0aGlzLl9mc1BhdGh8fCh0aGlzLl9mc1BhdGg9Yih0aGlzLCExKSksdGhpcy5fZnNQYXRofXRvU3RyaW5nKGs9ITEpe3JldHVybiBrP1QodGhpcywhMCk6KHRoaXMuX2Zvcm1hdHRlZHx8KHRoaXMuX2Zvcm1hdHRlZD1UKHRoaXMsITEpKSx0aGlzLl9mb3JtYXR0ZWQpfXRvSlNPTigpe2xldCBrPXskbWlkOjF9O3JldHVybiB0aGlzLl9mc1BhdGgmJihrLmZzUGF0aD10aGlzLl9mc1BhdGgsay5fc2VwPW0pLHRoaXMuX2Zvcm1hdHRlZCYmKGsuZXh0ZXJuYWw9dGhpcy5fZm9ybWF0dGVkKSx0aGlzLnBhdGgmJihrLnBhdGg9dGhpcy5wYXRoKSx0aGlzLnNjaGVtZSYmKGsuc2NoZW1lPXRoaXMuc2NoZW1lKSx0aGlzLmF1dGhvcml0eSYmKGsuYXV0aG9yaXR5PXRoaXMuYXV0aG9yaXR5KSx0aGlzLnF1ZXJ5JiYoay5xdWVyeT10aGlzLnF1ZXJ5KSx0aGlzLmZyYWdtZW50JiYoay5mcmFnbWVudD10aGlzLmZyYWdtZW50KSxrfX1sZXQgeT17NTg6IiUzQSIsNDc6IiUyRiIsNjM6IiUzRiIsMzU6IiUyMyIsOTE6IiU1QiIsOTM6IiU1RCIsNjQ6IiU0MCIsMzM6IiUyMSIsMzY6IiUyNCIsMzg6IiUyNiIsMzk6IiUyNyIsNDA6IiUyOCIsNDE6IiUyOSIsNDI6IiUyQSIsNDM6IiUyQiIsNDQ6IiUyQyIsNTk6IiUzQiIsNjE6IiUzRCIsMzI6IiUyMCJ9O2Z1bmN0aW9uIHYoUixrLEwpe2xldCBBLEk9LTE7Zm9yKGxldCBNPTA7TTxSLmxlbmd0aDtNKyspe2xldCBQPVIuY2hhckNvZGVBdChNKTtpZihQPj05NyYmUDw9MTIyfHxQPj02NSYmUDw9OTB8fFA+PTQ4JiZQPD01N3x8UD09PTQ1fHxQPT09NDZ8fFA9PT05NXx8UD09PTEyNnx8ayYmUD09PTQ3fHxMJiZQPT09OTF8fEwmJlA9PT05M3x8TCYmUD09PTU4KUkhPT0tMSYmKEErPWVuY29kZVVSSUNvbXBvbmVudChSLnN1YnN0cmluZyhJLE0pKSxJPS0xKSxBIT09dm9pZCAwJiYoQSs9Ui5jaGFyQXQoTSkpO2Vsc2V7QT09PXZvaWQgMCYmKEE9Ui5zdWJzdHIoMCxNKSk7bGV0IEI9eVtQXTtCIT09dm9pZCAwPyhJIT09LTEmJihBKz1lbmNvZGVVUklDb21wb25lbnQoUi5zdWJzdHJpbmcoSSxNKSksST0tMSksQSs9Qik6ST09PS0xJiYoST1NKX19cmV0dXJuIEkhPT0tMSYmKEErPWVuY29kZVVSSUNvbXBvbmVudChSLnN1YnN0cmluZyhJKSkpLEEhPT12b2lkIDA/QTpSfW8odiwiZCIpO2Z1bmN0aW9uIHgoUil7bGV0IGs7Zm9yKGxldCBMPTA7TDxSLmxlbmd0aDtMKyspe2xldCBBPVIuY2hhckNvZGVBdChMKTtBPT09MzV8fEE9PT02Mz8oaz09PXZvaWQgMCYmKGs9Ui5zdWJzdHIoMCxMKSksays9eVtBXSk6ayE9PXZvaWQgMCYmKGsrPVJbTF0pfXJldHVybiBrIT09dm9pZCAwP2s6Un1vKHgsInAiKTtmdW5jdGlvbiBiKFIsayl7bGV0IEw7cmV0dXJuIEw9Ui5hdXRob3JpdHkmJlIucGF0aC5sZW5ndGg+MSYmUi5zY2hlbWU9PT0iZmlsZSI/YC8vJHtSLmF1dGhvcml0eX0ke1IucGF0aH1gOlIucGF0aC5jaGFyQ29kZUF0KDApPT09NDcmJihSLnBhdGguY2hhckNvZGVBdCgxKT49NjUmJlIucGF0aC5jaGFyQ29kZUF0KDEpPD05MHx8Ui5wYXRoLmNoYXJDb2RlQXQoMSk+PTk3JiZSLnBhdGguY2hhckNvZGVBdCgxKTw9MTIyKSYmUi5wYXRoLmNoYXJDb2RlQXQoMik9PT01OD9rP1IucGF0aC5zdWJzdHIoMSk6Ui5wYXRoWzFdLnRvTG93ZXJDYXNlKCkrUi5wYXRoLnN1YnN0cigyKTpSLnBhdGgsaSYmKEw9TC5yZXBsYWNlKC9cLy9nLCJcXCIpKSxMfW8oYiwibSIpO2Z1bmN0aW9uIFQoUixrKXtsZXQgTD1rP3g6dixBPSIiLHtzY2hlbWU6SSxhdXRob3JpdHk6TSxwYXRoOlAscXVlcnk6QixmcmFnbWVudDpGfT1SO2lmKEkmJihBKz1JLEErPSI6IiksKE18fEk9PT0iZmlsZSIpJiYoQSs9ZixBKz1mKSxNKXtsZXQgej1NLmluZGV4T2YoIkAiKTtpZih6IT09LTEpe2xldCAkPU0uc3Vic3RyKDAseik7TT1NLnN1YnN0cih6KzEpLHo9JC5sYXN0SW5kZXhPZigiOiIpLHo9PT0tMT9BKz1MKCQsITEsITEpOihBKz1MKCQuc3Vic3RyKDAseiksITEsITEpLEErPSI6IixBKz1MKCQuc3Vic3RyKHorMSksITEsITApKSxBKz0iQCJ9TT1NLnRvTG93ZXJDYXNlKCksej1NLmxhc3RJbmRleE9mKCI6Iiksej09PS0xP0ErPUwoTSwhMSwhMCk6KEErPUwoTS5zdWJzdHIoMCx6KSwhMSwhMCksQSs9TS5zdWJzdHIoeikpfWlmKFApe2lmKFAubGVuZ3RoPj0zJiZQLmNoYXJDb2RlQXQoMCk9PT00NyYmUC5jaGFyQ29kZUF0KDIpPT09NTgpe2xldCB6PVAuY2hhckNvZGVBdCgxKTt6Pj02NSYmejw9OTAmJihQPWAvJHtTdHJpbmcuZnJvbUNoYXJDb2RlKHorMzIpfToke1Auc3Vic3RyKDMpfWApfWVsc2UgaWYoUC5sZW5ndGg+PTImJlAuY2hhckNvZGVBdCgxKT09PTU4KXtsZXQgej1QLmNoYXJDb2RlQXQoMCk7ej49NjUmJno8PTkwJiYoUD1gJHtTdHJpbmcuZnJvbUNoYXJDb2RlKHorMzIpfToke1Auc3Vic3RyKDIpfWApfUErPUwoUCwhMCwhMSl9cmV0dXJuIEImJihBKz0iPyIsQSs9TChCLCExLCExKSksRiYmKEErPSIjIixBKz1rP0Y6dihGLCExLCExKSksQX1vKFQsInkiKTtmdW5jdGlvbiBTKFIpe3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KFIpfWNhdGNoe3JldHVybiBSLmxlbmd0aD4zP1Iuc3Vic3RyKDAsMykrUyhSLnN1YnN0cigzKSk6Un19byhTLCJ2Iik7bGV0IHc9LyglWzAtOUEtWmEtel1bMC05QS1aYS16XSkrL2c7ZnVuY3Rpb24gRShSKXtyZXR1cm4gUi5tYXRjaCh3KT9SLnJlcGxhY2UodyxrPT5TKGspKTpSfW8oRSwiQyIpO3ZhciBfPXIoNDcwKTtsZXQgQz1fLnBvc2l4fHxfLEQ9Ii8iO3ZhciBPOyhmdW5jdGlvbihSKXtSLmpvaW5QYXRoPWZ1bmN0aW9uKGssLi4uTCl7cmV0dXJuIGsud2l0aCh7cGF0aDpDLmpvaW4oay5wYXRoLC4uLkwpfSl9LFIucmVzb2x2ZVBhdGg9ZnVuY3Rpb24oaywuLi5MKXtsZXQgQT1rLnBhdGgsST0hMTtBWzBdIT09RCYmKEE9RCtBLEk9ITApO2xldCBNPUMucmVzb2x2ZShBLC4uLkwpO3JldHVybiBJJiZNWzBdPT09RCYmIWsuYXV0aG9yaXR5JiYoTT1NLnN1YnN0cmluZygxKSksay53aXRoKHtwYXRoOk19KX0sUi5kaXJuYW1lPWZ1bmN0aW9uKGspe2lmKGsucGF0aC5sZW5ndGg9PT0wfHxrLnBhdGg9PT1EKXJldHVybiBrO2xldCBMPUMuZGlybmFtZShrLnBhdGgpO3JldHVybiBMLmxlbmd0aD09PTEmJkwuY2hhckNvZGVBdCgwKT09PTQ2JiYoTD0iIiksay53aXRoKHtwYXRoOkx9KX0sUi5iYXNlbmFtZT1mdW5jdGlvbihrKXtyZXR1cm4gQy5iYXNlbmFtZShrLnBhdGgpfSxSLmV4dG5hbWU9ZnVuY3Rpb24oayl7cmV0dXJuIEMuZXh0bmFtZShrLnBhdGgpfX0pKE98fChPPXt9KSl9KSgpLHN1ZT1ufSkoKTsoe1VSSTptcyxVdGlsczp4MX09c3VlKX0pO3ZhciBncyxVYz1OKCgpPT57InVzZSBzdHJpY3QiO3ZJKCk7KGZ1bmN0aW9uKHQpe3QuYmFzZW5hbWU9eDEuYmFzZW5hbWUsdC5kaXJuYW1lPXgxLmRpcm5hbWUsdC5leHRuYW1lPXgxLmV4dG5hbWUsdC5qb2luUGF0aD14MS5qb2luUGF0aCx0LnJlc29sdmVQYXRoPXgxLnJlc29sdmVQYXRoO2Z1bmN0aW9uIGUoaSxhKXtyZXR1cm4gaT8udG9TdHJpbmcoKT09PWE/LnRvU3RyaW5nKCl9byhlLCJlcXVhbHMiKSx0LmVxdWFscz1lO2Z1bmN0aW9uIHIoaSxhKXtsZXQgcz10eXBlb2YgaT09InN0cmluZyI/aTppLnBhdGgsbD10eXBlb2YgYT09InN0cmluZyI/YTphLnBhdGgsdT1zLnNwbGl0KCIvIikuZmlsdGVyKG09Pm0ubGVuZ3RoPjApLGg9bC5zcGxpdCgiLyIpLmZpbHRlcihtPT5tLmxlbmd0aD4wKSxmPTA7Zm9yKDtmPHUubGVuZ3RoJiZ1W2ZdPT09aFtmXTtmKyspO2xldCBkPSIuLi8iLnJlcGVhdCh1Lmxlbmd0aC1mKSxwPWguc2xpY2UoZikuam9pbigiLyIpO3JldHVybiBkK3B9byhyLCJyZWxhdGl2ZSIpLHQucmVsYXRpdmU9cjtmdW5jdGlvbiBuKGkpe3JldHVybiBtcy5wYXJzZShpLnRvU3RyaW5nKCkpLnRvU3RyaW5nKCl9byhuLCJub3JtYWxpemUiKSx0Lm5vcm1hbGl6ZT1ufSkoZ3N8fChncz17fSkpfSk7dmFyIGtuLFZ4LFV4LGIxPU4oKCk9PnsidXNlIHN0cmljdCI7YXVlKCk7YjEoKTtLbygpO0dzKCk7VWMoKTsoZnVuY3Rpb24odCl7dFt0LkNoYW5nZWQ9MF09IkNoYW5nZWQiLHRbdC5QYXJzZWQ9MV09IlBhcnNlZCIsdFt0LkluZGV4ZWRDb250ZW50PTJdPSJJbmRleGVkQ29udGVudCIsdFt0LkNvbXB1dGVkU2NvcGVzPTNdPSJDb21wdXRlZFNjb3BlcyIsdFt0LkxpbmtlZD00XT0iTGlua2VkIix0W3QuSW5kZXhlZFJlZmVyZW5jZXM9NV09IkluZGV4ZWRSZWZlcmVuY2VzIix0W3QuVmFsaWRhdGVkPTZdPSJWYWxpZGF0ZWQifSkoa258fChrbj17fSkpO1Z4PWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRMYW5naXVtRG9jdW1lbnRGYWN0b3J5Iil9Y29uc3RydWN0b3IoZSl7dGhpcy5zZXJ2aWNlUmVnaXN0cnk9ZS5TZXJ2aWNlUmVnaXN0cnksdGhpcy50ZXh0RG9jdW1lbnRzPWUud29ya3NwYWNlLlRleHREb2N1bWVudHMsdGhpcy5maWxlU3lzdGVtUHJvdmlkZXI9ZS53b3Jrc3BhY2UuRmlsZVN5c3RlbVByb3ZpZGVyfWFzeW5jIGZyb21VcmkoZSxyPXlyLkNhbmNlbGxhdGlvblRva2VuLk5vbmUpe2xldCBuPWF3YWl0IHRoaXMuZmlsZVN5c3RlbVByb3ZpZGVyLnJlYWRGaWxlKGUpO3JldHVybiB0aGlzLmNyZWF0ZUFzeW5jKGUsbixyKX1mcm9tVGV4dERvY3VtZW50KGUscixuKXtyZXR1cm4gcj1yPz9tcy5wYXJzZShlLnVyaSkseXIuQ2FuY2VsbGF0aW9uVG9rZW4uaXMobik/dGhpcy5jcmVhdGVBc3luYyhyLGUsbik6dGhpcy5jcmVhdGUocixlLG4pfWZyb21TdHJpbmcoZSxyLG4pe3JldHVybiB5ci5DYW5jZWxsYXRpb25Ub2tlbi5pcyhuKT90aGlzLmNyZWF0ZUFzeW5jKHIsZSxuKTp0aGlzLmNyZWF0ZShyLGUsbil9ZnJvbU1vZGVsKGUscil7cmV0dXJuIHRoaXMuY3JlYXRlKHIseyRtb2RlbDplfSl9Y3JlYXRlKGUscixuKXtpZih0eXBlb2Ygcj09InN0cmluZyIpe2xldCBpPXRoaXMucGFyc2UoZSxyLG4pO3JldHVybiB0aGlzLmNyZWF0ZUxhbmdpdW1Eb2N1bWVudChpLGUsdm9pZCAwLHIpfWVsc2UgaWYoIiRtb2RlbCJpbiByKXtsZXQgaT17dmFsdWU6ci4kbW9kZWwscGFyc2VyRXJyb3JzOltdLGxleGVyRXJyb3JzOltdfTtyZXR1cm4gdGhpcy5jcmVhdGVMYW5naXVtRG9jdW1lbnQoaSxlKX1lbHNle2xldCBpPXRoaXMucGFyc2UoZSxyLmdldFRleHQoKSxuKTtyZXR1cm4gdGhpcy5jcmVhdGVMYW5naXVtRG9jdW1lbnQoaSxlLHIpfX1hc3luYyBjcmVhdGVBc3luYyhlLHIsbil7aWYodHlwZW9mIHI9PSJzdHJpbmciKXtsZXQgaT1hd2FpdCB0aGlzLnBhcnNlQXN5bmMoZSxyLG4pO3JldHVybiB0aGlzLmNyZWF0ZUxhbmdpdW1Eb2N1bWVudChpLGUsdm9pZCAwLHIpfWVsc2V7bGV0IGk9YXdhaXQgdGhpcy5wYXJzZUFzeW5jKGUsci5nZXRUZXh0KCksbik7cmV0dXJuIHRoaXMuY3JlYXRlTGFuZ2l1bURvY3VtZW50KGksZSxyKX19Y3JlYXRlTGFuZ2l1bURvY3VtZW50KGUscixuLGkpe2xldCBhO2lmKG4pYT17cGFyc2VSZXN1bHQ6ZSx1cmk6cixzdGF0ZTprbi5QYXJzZWQscmVmZXJlbmNlczpbXSx0ZXh0RG9jdW1lbnQ6bn07ZWxzZXtsZXQgcz10aGlzLmNyZWF0ZVRleHREb2N1bWVudEdldHRlcihyLGkpO2E9e3BhcnNlUmVzdWx0OmUsdXJpOnIsc3RhdGU6a24uUGFyc2VkLHJlZmVyZW5jZXM6W10sZ2V0IHRleHREb2N1bWVudCgpe3JldHVybiBzKCl9fX1yZXR1cm4gZS52YWx1ZS4kZG9jdW1lbnQ9YSxhfWFzeW5jIHVwZGF0ZShlLHIpe3ZhciBuLGk7bGV0IGE9KG49ZS5wYXJzZVJlc3VsdC52YWx1ZS4kY3N0Tm9kZSk9PT1udWxsfHxuPT09dm9pZCAwP3ZvaWQgMDpuLnJvb3QuZnVsbFRleHQscz0oaT10aGlzLnRleHREb2N1bWVudHMpPT09bnVsbHx8aT09PXZvaWQgMD92b2lkIDA6aS5nZXQoZS51cmkudG9TdHJpbmcoKSksbD1zP3MuZ2V0VGV4dCgpOmF3YWl0IHRoaXMuZmlsZVN5c3RlbVByb3ZpZGVyLnJlYWRGaWxlKGUudXJpKTtpZihzKU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJ0ZXh0RG9jdW1lbnQiLHt2YWx1ZTpzfSk7ZWxzZXtsZXQgdT10aGlzLmNyZWF0ZVRleHREb2N1bWVudEdldHRlcihlLnVyaSxsKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwidGV4dERvY3VtZW50Iix7Z2V0OnV9KX1yZXR1cm4gYSE9PWwmJihlLnBhcnNlUmVzdWx0PWF3YWl0IHRoaXMucGFyc2VBc3luYyhlLnVyaSxsLHIpLGUucGFyc2VSZXN1bHQudmFsdWUuJGRvY3VtZW50PWUpLGUuc3RhdGU9a24uUGFyc2VkLGV9cGFyc2UoZSxyLG4pe3JldHVybiB0aGlzLnNlcnZpY2VSZWdpc3RyeS5nZXRTZXJ2aWNlcyhlKS5wYXJzZXIuTGFuZ2l1bVBhcnNlci5wYXJzZShyLG4pfXBhcnNlQXN5bmMoZSxyLG4pe3JldHVybiB0aGlzLnNlcnZpY2VSZWdpc3RyeS5nZXRTZXJ2aWNlcyhlKS5wYXJzZXIuQXN5bmNQYXJzZXIucGFyc2UocixuKX1jcmVhdGVUZXh0RG9jdW1lbnRHZXR0ZXIoZSxyKXtsZXQgbj10aGlzLnNlcnZpY2VSZWdpc3RyeSxpO3JldHVybigpPT5pPz8oaT12MS5jcmVhdGUoZS50b1N0cmluZygpLG4uZ2V0U2VydmljZXMoZSkuTGFuZ3VhZ2VNZXRhRGF0YS5sYW5ndWFnZUlkLDAscj8/IiIpKX19LFV4PWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRMYW5naXVtRG9jdW1lbnRzIil9Y29uc3RydWN0b3IoZSl7dGhpcy5kb2N1bWVudE1hcD1uZXcgTWFwLHRoaXMubGFuZ2l1bURvY3VtZW50RmFjdG9yeT1lLndvcmtzcGFjZS5MYW5naXVtRG9jdW1lbnRGYWN0b3J5LHRoaXMuc2VydmljZVJlZ2lzdHJ5PWUuU2VydmljZVJlZ2lzdHJ5fWdldCBhbGwoKXtyZXR1cm4gZW4odGhpcy5kb2N1bWVudE1hcC52YWx1ZXMoKSl9YWRkRG9jdW1lbnQoZSl7bGV0IHI9ZS51cmkudG9TdHJpbmcoKTtpZih0aGlzLmRvY3VtZW50TWFwLmhhcyhyKSl0aHJvdyBuZXcgRXJyb3IoYEEgZG9jdW1lbnQgd2l0aCB0aGUgVVJJICcke3J9JyBpcyBhbHJlYWR5IHByZXNlbnQuYCk7dGhpcy5kb2N1bWVudE1hcC5zZXQocixlKX1nZXREb2N1bWVudChlKXtsZXQgcj1lLnRvU3RyaW5nKCk7cmV0dXJuIHRoaXMuZG9jdW1lbnRNYXAuZ2V0KHIpfWFzeW5jIGdldE9yQ3JlYXRlRG9jdW1lbnQoZSxyKXtsZXQgbj10aGlzLmdldERvY3VtZW50KGUpO3JldHVybiBufHwobj1hd2FpdCB0aGlzLmxhbmdpdW1Eb2N1bWVudEZhY3RvcnkuZnJvbVVyaShlLHIpLHRoaXMuYWRkRG9jdW1lbnQobiksbil9Y3JlYXRlRG9jdW1lbnQoZSxyLG4pe2lmKG4pcmV0dXJuIHRoaXMubGFuZ2l1bURvY3VtZW50RmFjdG9yeS5mcm9tU3RyaW5nKHIsZSxuKS50aGVuKGk9Pih0aGlzLmFkZERvY3VtZW50KGkpLGkpKTt7bGV0IGk9dGhpcy5sYW5naXVtRG9jdW1lbnRGYWN0b3J5LmZyb21TdHJpbmcocixlKTtyZXR1cm4gdGhpcy5hZGREb2N1bWVudChpKSxpfX1oYXNEb2N1bWVudChlKXtyZXR1cm4gdGhpcy5kb2N1bWVudE1hcC5oYXMoZS50b1N0cmluZygpKX1pbnZhbGlkYXRlRG9jdW1lbnQoZSl7bGV0IHI9ZS50b1N0cmluZygpLG49dGhpcy5kb2N1bWVudE1hcC5nZXQocik7cmV0dXJuIG4mJih0aGlzLnNlcnZpY2VSZWdpc3RyeS5nZXRTZXJ2aWNlcyhlKS5yZWZlcmVuY2VzLkxpbmtlci51bmxpbmsobiksbi5zdGF0ZT1rbi5DaGFuZ2VkLG4ucHJlY29tcHV0ZWRTY29wZXM9dm9pZCAwLG4uZGlhZ25vc3RpY3M9dm9pZCAwKSxufWRlbGV0ZURvY3VtZW50KGUpe2xldCByPWUudG9TdHJpbmcoKSxuPXRoaXMuZG9jdW1lbnRNYXAuZ2V0KHIpO3JldHVybiBuJiYobi5zdGF0ZT1rbi5DaGFuZ2VkLHRoaXMuZG9jdW1lbnRNYXAuZGVsZXRlKHIpKSxufX19KTt2YXIgeEksSHgsYkk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtLbygpO0lsKCk7Y3MoKTtRbygpO2IxKCk7eEk9U3ltYm9sKCJyZWZfcmVzb2x2aW5nIiksSHg9Y2xhc3N7c3RhdGlje28odGhpcywiRGVmYXVsdExpbmtlciIpfWNvbnN0cnVjdG9yKGUpe3RoaXMucmVmbGVjdGlvbj1lLnNoYXJlZC5Bc3RSZWZsZWN0aW9uLHRoaXMubGFuZ2l1bURvY3VtZW50cz0oKT0+ZS5zaGFyZWQud29ya3NwYWNlLkxhbmdpdW1Eb2N1bWVudHMsdGhpcy5zY29wZVByb3ZpZGVyPWUucmVmZXJlbmNlcy5TY29wZVByb3ZpZGVyLHRoaXMuYXN0Tm9kZUxvY2F0b3I9ZS53b3Jrc3BhY2UuQXN0Tm9kZUxvY2F0b3J9YXN5bmMgbGluayhlLHI9eXIuQ2FuY2VsbGF0aW9uVG9rZW4uTm9uZSl7Zm9yKGxldCBuIG9mIGpvKGUucGFyc2VSZXN1bHQudmFsdWUpKWF3YWl0IHdpKHIpLFBnKG4pLmZvckVhY2goaT0+dGhpcy5kb0xpbmsoaSxlKSl9ZG9MaW5rKGUscil7dmFyIG47bGV0IGk9ZS5yZWZlcmVuY2U7aWYoaS5fcmVmPT09dm9pZCAwKXtpLl9yZWY9eEk7dHJ5e2xldCBhPXRoaXMuZ2V0Q2FuZGlkYXRlKGUpO2lmKGFwKGEpKWkuX3JlZj1hO2Vsc2UgaWYoaS5fbm9kZURlc2NyaXB0aW9uPWEsdGhpcy5sYW5naXVtRG9jdW1lbnRzKCkuaGFzRG9jdW1lbnQoYS5kb2N1bWVudFVyaSkpe2xldCBzPXRoaXMubG9hZEFzdE5vZGUoYSk7aS5fcmVmPXM/P3RoaXMuY3JlYXRlTGlua2luZ0Vycm9yKGUsYSl9ZWxzZSBpLl9yZWY9dm9pZCAwfWNhdGNoKGEpe2NvbnNvbGUuZXJyb3IoYEFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlc29sdmluZyByZWZlcmVuY2UgdG8gJyR7aS4kcmVmVGV4dH0nOmAsYSk7bGV0IHM9KG49YS5tZXNzYWdlKSE9PW51bGwmJm4hPT12b2lkIDA/bjpTdHJpbmcoYSk7aS5fcmVmPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx7bWVzc2FnZTpgQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVzb2x2aW5nIHJlZmVyZW5jZSB0byAnJHtpLiRyZWZUZXh0fSc6ICR7c31gfSl9ci5yZWZlcmVuY2VzLnB1c2goaSl9fXVubGluayhlKXtmb3IobGV0IHIgb2YgZS5yZWZlcmVuY2VzKWRlbGV0ZSByLl9yZWYsZGVsZXRlIHIuX25vZGVEZXNjcmlwdGlvbjtlLnJlZmVyZW5jZXM9W119Z2V0Q2FuZGlkYXRlKGUpe2xldCBuPXRoaXMuc2NvcGVQcm92aWRlci5nZXRTY29wZShlKS5nZXRFbGVtZW50KGUucmVmZXJlbmNlLiRyZWZUZXh0KTtyZXR1cm4gbj8/dGhpcy5jcmVhdGVMaW5raW5nRXJyb3IoZSl9YnVpbGRSZWZlcmVuY2UoZSxyLG4saSl7bGV0IGE9dGhpcyxzPXskcmVmTm9kZTpuLCRyZWZUZXh0OmksZ2V0IHJlZigpe3ZhciBsO2lmKHNpKHRoaXMuX3JlZikpcmV0dXJuIHRoaXMuX3JlZjtpZihzTih0aGlzLl9ub2RlRGVzY3JpcHRpb24pKXtsZXQgdT1hLmxvYWRBc3ROb2RlKHRoaXMuX25vZGVEZXNjcmlwdGlvbik7dGhpcy5fcmVmPXU/P2EuY3JlYXRlTGlua2luZ0Vycm9yKHtyZWZlcmVuY2U6cyxjb250YWluZXI6ZSxwcm9wZXJ0eTpyfSx0aGlzLl9ub2RlRGVzY3JpcHRpb24pfWVsc2UgaWYodGhpcy5fcmVmPT09dm9pZCAwKXt0aGlzLl9yZWY9eEk7bGV0IHU9ZXgoZSkuJGRvY3VtZW50LGg9YS5nZXRMaW5rZWROb2RlKHtyZWZlcmVuY2U6cyxjb250YWluZXI6ZSxwcm9wZXJ0eTpyfSk7aWYoaC5lcnJvciYmdSYmdS5zdGF0ZTxrbi5Db21wdXRlZFNjb3BlcylyZXR1cm4gdGhpcy5fcmVmPXZvaWQgMDt0aGlzLl9yZWY9KGw9aC5ub2RlKSE9PW51bGwmJmwhPT12b2lkIDA/bDpoLmVycm9yLHRoaXMuX25vZGVEZXNjcmlwdGlvbj1oLmRlc2NyLHU/LnJlZmVyZW5jZXMucHVzaCh0aGlzKX1lbHNlIGlmKHRoaXMuX3JlZj09PXhJKXRocm93IG5ldyBFcnJvcihgQ3ljbGljIHJlZmVyZW5jZSByZXNvbHV0aW9uIGRldGVjdGVkOiAke2EuYXN0Tm9kZUxvY2F0b3IuZ2V0QXN0Tm9kZVBhdGgoZSl9LyR7cn0gKHN5bWJvbCAnJHtpfScpYCk7cmV0dXJuIHNpKHRoaXMuX3JlZik/dGhpcy5fcmVmOnZvaWQgMH0sZ2V0ICRub2RlRGVzY3JpcHRpb24oKXtyZXR1cm4gdGhpcy5fbm9kZURlc2NyaXB0aW9ufSxnZXQgZXJyb3IoKXtyZXR1cm4gYXAodGhpcy5fcmVmKT90aGlzLl9yZWY6dm9pZCAwfX07cmV0dXJuIHN9Z2V0TGlua2VkTm9kZShlKXt2YXIgcjt0cnl7bGV0IG49dGhpcy5nZXRDYW5kaWRhdGUoZSk7aWYoYXAobikpcmV0dXJue2Vycm9yOm59O2xldCBpPXRoaXMubG9hZEFzdE5vZGUobik7cmV0dXJuIGk/e25vZGU6aSxkZXNjcjpufTp7ZGVzY3I6bixlcnJvcjp0aGlzLmNyZWF0ZUxpbmtpbmdFcnJvcihlLG4pfX1jYXRjaChuKXtjb25zb2xlLmVycm9yKGBBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSByZXNvbHZpbmcgcmVmZXJlbmNlIHRvICcke2UucmVmZXJlbmNlLiRyZWZUZXh0fSc6YCxuKTtsZXQgaT0ocj1uLm1lc3NhZ2UpIT09bnVsbCYmciE9PXZvaWQgMD9yOlN0cmluZyhuKTtyZXR1cm57ZXJyb3I6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHttZXNzYWdlOmBBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSByZXNvbHZpbmcgcmVmZXJlbmNlIHRvICcke2UucmVmZXJlbmNlLiRyZWZUZXh0fSc6ICR7aX1gfSl9fX1sb2FkQXN0Tm9kZShlKXtpZihlLm5vZGUpcmV0dXJuIGUubm9kZTtsZXQgcj10aGlzLmxhbmdpdW1Eb2N1bWVudHMoKS5nZXREb2N1bWVudChlLmRvY3VtZW50VXJpKTtpZihyKXJldHVybiB0aGlzLmFzdE5vZGVMb2NhdG9yLmdldEFzdE5vZGUoci5wYXJzZVJlc3VsdC52YWx1ZSxlLnBhdGgpfWNyZWF0ZUxpbmtpbmdFcnJvcihlLHIpe2xldCBuPWV4KGUuY29udGFpbmVyKS4kZG9jdW1lbnQ7biYmbi5zdGF0ZTxrbi5Db21wdXRlZFNjb3BlcyYmY29uc29sZS53YXJuKGBBdHRlbXB0ZWQgcmVmZXJlbmNlIHJlc29sdXRpb24gYmVmb3JlIGRvY3VtZW50IHJlYWNoZWQgQ29tcHV0ZWRTY29wZXMgc3RhdGUgKCR7bi51cml9KS5gKTtsZXQgaT10aGlzLnJlZmxlY3Rpb24uZ2V0UmVmZXJlbmNlVHlwZShlKTtyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHttZXNzYWdlOmBDb3VsZCBub3QgcmVzb2x2ZSByZWZlcmVuY2UgdG8gJHtpfSBuYW1lZCAnJHtlLnJlZmVyZW5jZS4kcmVmVGV4dH0nLmAsdGFyZ2V0RGVzY3JpcHRpb246cn0pfX19KTtmdW5jdGlvbiBvdWUodCl7cmV0dXJuIHR5cGVvZiB0Lm5hbWU9PSJzdHJpbmcifXZhciBXeCxUST1OKCgpPT57InVzZSBzdHJpY3QiO0ZsKCk7byhvdWUsImlzTmFtZWQiKTtXeD1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZhdWx0TmFtZVByb3ZpZGVyIil9Z2V0TmFtZShlKXtpZihvdWUoZSkpcmV0dXJuIGUubmFtZX1nZXROYW1lTm9kZShlKXtyZXR1cm4gb3goZS4kY3N0Tm9kZSwibmFtZSIpfX19KTt2YXIgcXgsd0k9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGbCgpO0lsKCk7Y3MoKTtPbCgpO0dzKCk7VWMoKTtxeD1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZhdWx0UmVmZXJlbmNlcyIpfWNvbnN0cnVjdG9yKGUpe3RoaXMubmFtZVByb3ZpZGVyPWUucmVmZXJlbmNlcy5OYW1lUHJvdmlkZXIsdGhpcy5pbmRleD1lLnNoYXJlZC53b3Jrc3BhY2UuSW5kZXhNYW5hZ2VyLHRoaXMubm9kZUxvY2F0b3I9ZS53b3Jrc3BhY2UuQXN0Tm9kZUxvY2F0b3J9ZmluZERlY2xhcmF0aW9uKGUpe2lmKGUpe2xldCByPVhOKGUpLG49ZS5hc3ROb2RlO2lmKHImJm4pe2xldCBpPW5bci5mZWF0dXJlXTtpZih5YShpKSlyZXR1cm4gaS5yZWY7aWYoQXJyYXkuaXNBcnJheShpKSl7Zm9yKGxldCBhIG9mIGkpaWYoeWEoYSkmJmEuJHJlZk5vZGUmJmEuJHJlZk5vZGUub2Zmc2V0PD1lLm9mZnNldCYmYS4kcmVmTm9kZS5lbmQ+PWUuZW5kKXJldHVybiBhLnJlZn19aWYobil7bGV0IGk9dGhpcy5uYW1lUHJvdmlkZXIuZ2V0TmFtZU5vZGUobik7aWYoaSYmKGk9PT1lfHxsTihlLGkpKSlyZXR1cm4gbn19fWZpbmREZWNsYXJhdGlvbk5vZGUoZSl7bGV0IHI9dGhpcy5maW5kRGVjbGFyYXRpb24oZSk7aWYocj8uJGNzdE5vZGUpe2xldCBuPXRoaXMubmFtZVByb3ZpZGVyLmdldE5hbWVOb2RlKHIpO3JldHVybiBuPz9yLiRjc3ROb2RlfX1maW5kUmVmZXJlbmNlcyhlLHIpe2xldCBuPVtdO2lmKHIuaW5jbHVkZURlY2xhcmF0aW9uKXtsZXQgYT10aGlzLmdldFJlZmVyZW5jZVRvU2VsZihlKTthJiZuLnB1c2goYSl9bGV0IGk9dGhpcy5pbmRleC5maW5kQWxsUmVmZXJlbmNlcyhlLHRoaXMubm9kZUxvY2F0b3IuZ2V0QXN0Tm9kZVBhdGgoZSkpO3JldHVybiByLmRvY3VtZW50VXJpJiYoaT1pLmZpbHRlcihhPT5ncy5lcXVhbHMoYS5zb3VyY2VVcmksci5kb2N1bWVudFVyaSkpKSxuLnB1c2goLi4uaSksZW4obil9Z2V0UmVmZXJlbmNlVG9TZWxmKGUpe2xldCByPXRoaXMubmFtZVByb3ZpZGVyLmdldE5hbWVOb2RlKGUpO2lmKHIpe2xldCBuPSRhKGUpLGk9dGhpcy5ub2RlTG9jYXRvci5nZXRBc3ROb2RlUGF0aChlKTtyZXR1cm57c291cmNlVXJpOm4udXJpLHNvdXJjZVBhdGg6aSx0YXJnZXRVcmk6bi51cmksdGFyZ2V0UGF0aDppLHNlZ21lbnQ6b3AociksbG9jYWw6ITB9fX19fSk7dmFyIHpsLF9wLFQxPU4oKCk9PnsidXNlIHN0cmljdCI7R3MoKTt6bD1jbGFzc3tzdGF0aWN7byh0aGlzLCJNdWx0aU1hcCIpfWNvbnN0cnVjdG9yKGUpe2lmKHRoaXMubWFwPW5ldyBNYXAsZSlmb3IobGV0W3Isbl1vZiBlKXRoaXMuYWRkKHIsbil9Z2V0IHNpemUoKXtyZXR1cm4gam0uc3VtKGVuKHRoaXMubWFwLnZhbHVlcygpKS5tYXAoZT0+ZS5sZW5ndGgpKX1jbGVhcigpe3RoaXMubWFwLmNsZWFyKCl9ZGVsZXRlKGUscil7aWYocj09PXZvaWQgMClyZXR1cm4gdGhpcy5tYXAuZGVsZXRlKGUpO3tsZXQgbj10aGlzLm1hcC5nZXQoZSk7aWYobil7bGV0IGk9bi5pbmRleE9mKHIpO2lmKGk+PTApcmV0dXJuIG4ubGVuZ3RoPT09MT90aGlzLm1hcC5kZWxldGUoZSk6bi5zcGxpY2UoaSwxKSwhMH1yZXR1cm4hMX19Z2V0KGUpe3ZhciByO3JldHVybihyPXRoaXMubWFwLmdldChlKSkhPT1udWxsJiZyIT09dm9pZCAwP3I6W119aGFzKGUscil7aWYocj09PXZvaWQgMClyZXR1cm4gdGhpcy5tYXAuaGFzKGUpO3tsZXQgbj10aGlzLm1hcC5nZXQoZSk7cmV0dXJuIG4/bi5pbmRleE9mKHIpPj0wOiExfX1hZGQoZSxyKXtyZXR1cm4gdGhpcy5tYXAuaGFzKGUpP3RoaXMubWFwLmdldChlKS5wdXNoKHIpOnRoaXMubWFwLnNldChlLFtyXSksdGhpc31hZGRBbGwoZSxyKXtyZXR1cm4gdGhpcy5tYXAuaGFzKGUpP3RoaXMubWFwLmdldChlKS5wdXNoKC4uLnIpOnRoaXMubWFwLnNldChlLEFycmF5LmZyb20ocikpLHRoaXN9Zm9yRWFjaChlKXt0aGlzLm1hcC5mb3JFYWNoKChyLG4pPT5yLmZvckVhY2goaT0+ZShpLG4sdGhpcykpKX1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiB0aGlzLmVudHJpZXMoKS5pdGVyYXRvcigpfWVudHJpZXMoKXtyZXR1cm4gZW4odGhpcy5tYXAuZW50cmllcygpKS5mbGF0TWFwKChbZSxyXSk9PnIubWFwKG49PltlLG5dKSl9a2V5cygpe3JldHVybiBlbih0aGlzLm1hcC5rZXlzKCkpfXZhbHVlcygpe3JldHVybiBlbih0aGlzLm1hcC52YWx1ZXMoKSkuZmxhdCgpfWVudHJpZXNHcm91cGVkQnlLZXkoKXtyZXR1cm4gZW4odGhpcy5tYXAuZW50cmllcygpKX19LF9wPWNsYXNze3N0YXRpY3tvKHRoaXMsIkJpTWFwIil9Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5tYXAuc2l6ZX1jb25zdHJ1Y3RvcihlKXtpZih0aGlzLm1hcD1uZXcgTWFwLHRoaXMuaW52ZXJzZT1uZXcgTWFwLGUpZm9yKGxldFtyLG5db2YgZSl0aGlzLnNldChyLG4pfWNsZWFyKCl7dGhpcy5tYXAuY2xlYXIoKSx0aGlzLmludmVyc2UuY2xlYXIoKX1zZXQoZSxyKXtyZXR1cm4gdGhpcy5tYXAuc2V0KGUsciksdGhpcy5pbnZlcnNlLnNldChyLGUpLHRoaXN9Z2V0KGUpe3JldHVybiB0aGlzLm1hcC5nZXQoZSl9Z2V0S2V5KGUpe3JldHVybiB0aGlzLmludmVyc2UuZ2V0KGUpfWRlbGV0ZShlKXtsZXQgcj10aGlzLm1hcC5nZXQoZSk7cmV0dXJuIHIhPT12b2lkIDA/KHRoaXMubWFwLmRlbGV0ZShlKSx0aGlzLmludmVyc2UuZGVsZXRlKHIpLCEwKTohMX19fSk7dmFyIFl4LGtJPU4oKCk9PnsidXNlIHN0cmljdCI7S28oKTtjcygpO1QxKCk7UW8oKTtZeD1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZhdWx0U2NvcGVDb21wdXRhdGlvbiIpfWNvbnN0cnVjdG9yKGUpe3RoaXMubmFtZVByb3ZpZGVyPWUucmVmZXJlbmNlcy5OYW1lUHJvdmlkZXIsdGhpcy5kZXNjcmlwdGlvbnM9ZS53b3Jrc3BhY2UuQXN0Tm9kZURlc2NyaXB0aW9uUHJvdmlkZXJ9YXN5bmMgY29tcHV0ZUV4cG9ydHMoZSxyPXlyLkNhbmNlbGxhdGlvblRva2VuLk5vbmUpe3JldHVybiB0aGlzLmNvbXB1dGVFeHBvcnRzRm9yTm9kZShlLnBhcnNlUmVzdWx0LnZhbHVlLGUsdm9pZCAwLHIpfWFzeW5jIGNvbXB1dGVFeHBvcnRzRm9yTm9kZShlLHIsbj10eCxpPXlyLkNhbmNlbGxhdGlvblRva2VuLk5vbmUpe2xldCBhPVtdO3RoaXMuZXhwb3J0Tm9kZShlLGEscik7Zm9yKGxldCBzIG9mIG4oZSkpYXdhaXQgd2koaSksdGhpcy5leHBvcnROb2RlKHMsYSxyKTtyZXR1cm4gYX1leHBvcnROb2RlKGUscixuKXtsZXQgaT10aGlzLm5hbWVQcm92aWRlci5nZXROYW1lKGUpO2kmJnIucHVzaCh0aGlzLmRlc2NyaXB0aW9ucy5jcmVhdGVEZXNjcmlwdGlvbihlLGksbikpfWFzeW5jIGNvbXB1dGVMb2NhbFNjb3BlcyhlLHI9eXIuQ2FuY2VsbGF0aW9uVG9rZW4uTm9uZSl7bGV0IG49ZS5wYXJzZVJlc3VsdC52YWx1ZSxpPW5ldyB6bDtmb3IobGV0IGEgb2YgQmMobikpYXdhaXQgd2kociksdGhpcy5wcm9jZXNzTm9kZShhLGUsaSk7cmV0dXJuIGl9cHJvY2Vzc05vZGUoZSxyLG4pe2xldCBpPWUuJGNvbnRhaW5lcjtpZihpKXtsZXQgYT10aGlzLm5hbWVQcm92aWRlci5nZXROYW1lKGUpO2EmJm4uYWRkKGksdGhpcy5kZXNjcmlwdGlvbnMuY3JlYXRlRGVzY3JpcHRpb24oZSxhLHIpKX19fX0pO3ZhciB3MSxYeCxxJGUsRUk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtHcygpO3cxPWNsYXNze3N0YXRpY3tvKHRoaXMsIlN0cmVhbVNjb3BlIil9Y29uc3RydWN0b3IoZSxyLG4pe3ZhciBpO3RoaXMuZWxlbWVudHM9ZSx0aGlzLm91dGVyU2NvcGU9cix0aGlzLmNhc2VJbnNlbnNpdGl2ZT0oaT1uPy5jYXNlSW5zZW5zaXRpdmUpIT09bnVsbCYmaSE9PXZvaWQgMD9pOiExfWdldEFsbEVsZW1lbnRzKCl7cmV0dXJuIHRoaXMub3V0ZXJTY29wZT90aGlzLmVsZW1lbnRzLmNvbmNhdCh0aGlzLm91dGVyU2NvcGUuZ2V0QWxsRWxlbWVudHMoKSk6dGhpcy5lbGVtZW50c31nZXRFbGVtZW50KGUpe2xldCByPXRoaXMuY2FzZUluc2Vuc2l0aXZlP3RoaXMuZWxlbWVudHMuZmluZChuPT5uLm5hbWUudG9Mb3dlckNhc2UoKT09PWUudG9Mb3dlckNhc2UoKSk6dGhpcy5lbGVtZW50cy5maW5kKG49Pm4ubmFtZT09PWUpO2lmKHIpcmV0dXJuIHI7aWYodGhpcy5vdXRlclNjb3BlKXJldHVybiB0aGlzLm91dGVyU2NvcGUuZ2V0RWxlbWVudChlKX19LFh4PWNsYXNze3N0YXRpY3tvKHRoaXMsIk1hcFNjb3BlIil9Y29uc3RydWN0b3IoZSxyLG4pe3ZhciBpO3RoaXMuZWxlbWVudHM9bmV3IE1hcCx0aGlzLmNhc2VJbnNlbnNpdGl2ZT0oaT1uPy5jYXNlSW5zZW5zaXRpdmUpIT09bnVsbCYmaSE9PXZvaWQgMD9pOiExO2ZvcihsZXQgYSBvZiBlKXtsZXQgcz10aGlzLmNhc2VJbnNlbnNpdGl2ZT9hLm5hbWUudG9Mb3dlckNhc2UoKTphLm5hbWU7dGhpcy5lbGVtZW50cy5zZXQocyxhKX10aGlzLm91dGVyU2NvcGU9cn1nZXRFbGVtZW50KGUpe2xldCByPXRoaXMuY2FzZUluc2Vuc2l0aXZlP2UudG9Mb3dlckNhc2UoKTplLG49dGhpcy5lbGVtZW50cy5nZXQocik7aWYobilyZXR1cm4gbjtpZih0aGlzLm91dGVyU2NvcGUpcmV0dXJuIHRoaXMub3V0ZXJTY29wZS5nZXRFbGVtZW50KGUpfWdldEFsbEVsZW1lbnRzKCl7bGV0IGU9ZW4odGhpcy5lbGVtZW50cy52YWx1ZXMoKSk7cmV0dXJuIHRoaXMub3V0ZXJTY29wZSYmKGU9ZS5jb25jYXQodGhpcy5vdXRlclNjb3BlLmdldEFsbEVsZW1lbnRzKCkpKSxlfX0scSRlPXtnZXRFbGVtZW50KCl7fSxnZXRBbGxFbGVtZW50cygpe3JldHVybiBIMn19fSk7dmFyIGsxLGp4LERwLFVFLEUxLEhFPU4oKCk9PnsidXNlIHN0cmljdCI7azE9Y2xhc3N7c3RhdGlje28odGhpcywiRGlzcG9zYWJsZUNhY2hlIil9Y29uc3RydWN0b3IoKXt0aGlzLnRvRGlzcG9zZT1bXSx0aGlzLmlzRGlzcG9zZWQ9ITF9b25EaXNwb3NlKGUpe3RoaXMudG9EaXNwb3NlLnB1c2goZSl9ZGlzcG9zZSgpe3RoaXMudGhyb3dJZkRpc3Bvc2VkKCksdGhpcy5jbGVhcigpLHRoaXMuaXNEaXNwb3NlZD0hMCx0aGlzLnRvRGlzcG9zZS5mb3JFYWNoKGU9PmUuZGlzcG9zZSgpKX10aHJvd0lmRGlzcG9zZWQoKXtpZih0aGlzLmlzRGlzcG9zZWQpdGhyb3cgbmV3IEVycm9yKCJUaGlzIGNhY2hlIGhhcyBhbHJlYWR5IGJlZW4gZGlzcG9zZWQiKX19LGp4PWNsYXNzIGV4dGVuZHMgazF7c3RhdGlje28odGhpcywiU2ltcGxlQ2FjaGUiKX1jb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jYWNoZT1uZXcgTWFwfWhhcyhlKXtyZXR1cm4gdGhpcy50aHJvd0lmRGlzcG9zZWQoKSx0aGlzLmNhY2hlLmhhcyhlKX1zZXQoZSxyKXt0aGlzLnRocm93SWZEaXNwb3NlZCgpLHRoaXMuY2FjaGUuc2V0KGUscil9Z2V0KGUscil7aWYodGhpcy50aHJvd0lmRGlzcG9zZWQoKSx0aGlzLmNhY2hlLmhhcyhlKSlyZXR1cm4gdGhpcy5jYWNoZS5nZXQoZSk7aWYocil7bGV0IG49cigpO3JldHVybiB0aGlzLmNhY2hlLnNldChlLG4pLG59ZWxzZSByZXR1cm59ZGVsZXRlKGUpe3JldHVybiB0aGlzLnRocm93SWZEaXNwb3NlZCgpLHRoaXMuY2FjaGUuZGVsZXRlKGUpfWNsZWFyKCl7dGhpcy50aHJvd0lmRGlzcG9zZWQoKSx0aGlzLmNhY2hlLmNsZWFyKCl9fSxEcD1jbGFzcyBleHRlbmRzIGsxe3N0YXRpY3tvKHRoaXMsIkNvbnRleHRDYWNoZSIpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5jYWNoZT1uZXcgTWFwLHRoaXMuY29udmVydGVyPWU/PyhyPT5yKX1oYXMoZSxyKXtyZXR1cm4gdGhpcy50aHJvd0lmRGlzcG9zZWQoKSx0aGlzLmNhY2hlRm9yQ29udGV4dChlKS5oYXMocil9c2V0KGUscixuKXt0aGlzLnRocm93SWZEaXNwb3NlZCgpLHRoaXMuY2FjaGVGb3JDb250ZXh0KGUpLnNldChyLG4pfWdldChlLHIsbil7dGhpcy50aHJvd0lmRGlzcG9zZWQoKTtsZXQgaT10aGlzLmNhY2hlRm9yQ29udGV4dChlKTtpZihpLmhhcyhyKSlyZXR1cm4gaS5nZXQocik7aWYobil7bGV0IGE9bigpO3JldHVybiBpLnNldChyLGEpLGF9ZWxzZSByZXR1cm59ZGVsZXRlKGUscil7cmV0dXJuIHRoaXMudGhyb3dJZkRpc3Bvc2VkKCksdGhpcy5jYWNoZUZvckNvbnRleHQoZSkuZGVsZXRlKHIpfWNsZWFyKGUpe2lmKHRoaXMudGhyb3dJZkRpc3Bvc2VkKCksZSl7bGV0IHI9dGhpcy5jb252ZXJ0ZXIoZSk7dGhpcy5jYWNoZS5kZWxldGUocil9ZWxzZSB0aGlzLmNhY2hlLmNsZWFyKCl9Y2FjaGVGb3JDb250ZXh0KGUpe2xldCByPXRoaXMuY29udmVydGVyKGUpLG49dGhpcy5jYWNoZS5nZXQocik7cmV0dXJuIG58fChuPW5ldyBNYXAsdGhpcy5jYWNoZS5zZXQocixuKSksbn19LFVFPWNsYXNzIGV4dGVuZHMgRHB7c3RhdGlje28odGhpcywiRG9jdW1lbnRDYWNoZSIpfWNvbnN0cnVjdG9yKGUscil7c3VwZXIobj0+bi50b1N0cmluZygpKSxyPyh0aGlzLnRvRGlzcG9zZS5wdXNoKGUud29ya3NwYWNlLkRvY3VtZW50QnVpbGRlci5vbkRvY3VtZW50UGhhc2UocixuPT57dGhpcy5jbGVhcihuLnVyaS50b1N0cmluZygpKX0pKSx0aGlzLnRvRGlzcG9zZS5wdXNoKGUud29ya3NwYWNlLkRvY3VtZW50QnVpbGRlci5vblVwZGF0ZSgobixpKT0+e2ZvcihsZXQgYSBvZiBpKXRoaXMuY2xlYXIoYSl9KSkpOnRoaXMudG9EaXNwb3NlLnB1c2goZS53b3Jrc3BhY2UuRG9jdW1lbnRCdWlsZGVyLm9uVXBkYXRlKChuLGkpPT57bGV0IGE9bi5jb25jYXQoaSk7Zm9yKGxldCBzIG9mIGEpdGhpcy5jbGVhcihzKX0pKX19LEUxPWNsYXNzIGV4dGVuZHMganh7c3RhdGlje28odGhpcywiV29ya3NwYWNlQ2FjaGUiKX1jb25zdHJ1Y3RvcihlLHIpe3N1cGVyKCkscj8odGhpcy50b0Rpc3Bvc2UucHVzaChlLndvcmtzcGFjZS5Eb2N1bWVudEJ1aWxkZXIub25CdWlsZFBoYXNlKHIsKCk9Pnt0aGlzLmNsZWFyKCl9KSksdGhpcy50b0Rpc3Bvc2UucHVzaChlLndvcmtzcGFjZS5Eb2N1bWVudEJ1aWxkZXIub25VcGRhdGUoKG4saSk9PntpLmxlbmd0aD4wJiZ0aGlzLmNsZWFyKCl9KSkpOnRoaXMudG9EaXNwb3NlLnB1c2goZS53b3Jrc3BhY2UuRG9jdW1lbnRCdWlsZGVyLm9uVXBkYXRlKCgpPT57dGhpcy5jbGVhcigpfSkpfX19KTt2YXIgS3gsU0k9TigoKT0+eyJ1c2Ugc3RyaWN0IjtFSSgpO2NzKCk7R3MoKTtIRSgpO0t4PWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRTY29wZVByb3ZpZGVyIil9Y29uc3RydWN0b3IoZSl7dGhpcy5yZWZsZWN0aW9uPWUuc2hhcmVkLkFzdFJlZmxlY3Rpb24sdGhpcy5uYW1lUHJvdmlkZXI9ZS5yZWZlcmVuY2VzLk5hbWVQcm92aWRlcix0aGlzLmRlc2NyaXB0aW9ucz1lLndvcmtzcGFjZS5Bc3ROb2RlRGVzY3JpcHRpb25Qcm92aWRlcix0aGlzLmluZGV4TWFuYWdlcj1lLnNoYXJlZC53b3Jrc3BhY2UuSW5kZXhNYW5hZ2VyLHRoaXMuZ2xvYmFsU2NvcGVDYWNoZT1uZXcgRTEoZS5zaGFyZWQpfWdldFNjb3BlKGUpe2xldCByPVtdLG49dGhpcy5yZWZsZWN0aW9uLmdldFJlZmVyZW5jZVR5cGUoZSksaT0kYShlLmNvbnRhaW5lcikucHJlY29tcHV0ZWRTY29wZXM7aWYoaSl7bGV0IHM9ZS5jb250YWluZXI7ZG97bGV0IGw9aS5nZXQocyk7bC5sZW5ndGg+MCYmci5wdXNoKGVuKGwpLmZpbHRlcih1PT50aGlzLnJlZmxlY3Rpb24uaXNTdWJ0eXBlKHUudHlwZSxuKSkpLHM9cy4kY29udGFpbmVyfXdoaWxlKHMpfWxldCBhPXRoaXMuZ2V0R2xvYmFsU2NvcGUobixlKTtmb3IobGV0IHM9ci5sZW5ndGgtMTtzPj0wO3MtLSlhPXRoaXMuY3JlYXRlU2NvcGUocltzXSxhKTtyZXR1cm4gYX1jcmVhdGVTY29wZShlLHIsbil7cmV0dXJuIG5ldyB3MShlbihlKSxyLG4pfWNyZWF0ZVNjb3BlRm9yTm9kZXMoZSxyLG4pe2xldCBpPWVuKGUpLm1hcChhPT57bGV0IHM9dGhpcy5uYW1lUHJvdmlkZXIuZ2V0TmFtZShhKTtpZihzKXJldHVybiB0aGlzLmRlc2NyaXB0aW9ucy5jcmVhdGVEZXNjcmlwdGlvbihhLHMpfSkubm9uTnVsbGFibGUoKTtyZXR1cm4gbmV3IHcxKGkscixuKX1nZXRHbG9iYWxTY29wZShlLHIpe3JldHVybiB0aGlzLmdsb2JhbFNjb3BlQ2FjaGUuZ2V0KGUsKCk9Pm5ldyBYeCh0aGlzLmluZGV4TWFuYWdlci5hbGxFbGVtZW50cyhlKSkpfX19KTtmdW5jdGlvbiBDSSh0KXtyZXR1cm4gdHlwZW9mIHQuJGNvbW1lbnQ9PSJzdHJpbmcifWZ1bmN0aW9uIGx1ZSh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJvYmplY3QiJiYhIXQmJigiJHJlZiJpbiB0fHwiJGVycm9yImluIHQpfXZhciBReCxXRT1OKCgpPT57InVzZSBzdHJpY3QiO3ZJKCk7SWwoKTtjcygpO0ZsKCk7byhDSSwiaXNBc3ROb2RlV2l0aENvbW1lbnQiKTtvKGx1ZSwiaXNJbnRlcm1lZGlhdGVSZWZlcmVuY2UiKTtReD1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZhdWx0SnNvblNlcmlhbGl6ZXIiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLmlnbm9yZVByb3BlcnRpZXM9bmV3IFNldChbIiRjb250YWluZXIiLCIkY29udGFpbmVyUHJvcGVydHkiLCIkY29udGFpbmVySW5kZXgiLCIkZG9jdW1lbnQiLCIkY3N0Tm9kZSJdKSx0aGlzLmxhbmdpdW1Eb2N1bWVudHM9ZS5zaGFyZWQud29ya3NwYWNlLkxhbmdpdW1Eb2N1bWVudHMsdGhpcy5hc3ROb2RlTG9jYXRvcj1lLndvcmtzcGFjZS5Bc3ROb2RlTG9jYXRvcix0aGlzLm5hbWVQcm92aWRlcj1lLnJlZmVyZW5jZXMuTmFtZVByb3ZpZGVyLHRoaXMuY29tbWVudFByb3ZpZGVyPWUuZG9jdW1lbnRhdGlvbi5Db21tZW50UHJvdmlkZXJ9c2VyaWFsaXplKGUscil7bGV0IG49cj8/e30saT1yPy5yZXBsYWNlcixhPW8oKGwsdSk9PnRoaXMucmVwbGFjZXIobCx1LG4pLCJkZWZhdWx0UmVwbGFjZXIiKSxzPWk/KGwsdSk9PmkobCx1LGEpOmE7dHJ5e3JldHVybiB0aGlzLmN1cnJlbnREb2N1bWVudD0kYShlKSxKU09OLnN0cmluZ2lmeShlLHMscj8uc3BhY2UpfWZpbmFsbHl7dGhpcy5jdXJyZW50RG9jdW1lbnQ9dm9pZCAwfX1kZXNlcmlhbGl6ZShlLHIpe2xldCBuPXI/P3t9LGk9SlNPTi5wYXJzZShlKTtyZXR1cm4gdGhpcy5saW5rTm9kZShpLGksbiksaX1yZXBsYWNlcihlLHIse3JlZlRleHQ6bixzb3VyY2VUZXh0OmksdGV4dFJlZ2lvbnM6YSxjb21tZW50czpzLHVyaUNvbnZlcnRlcjpsfSl7dmFyIHUsaCxmLGQ7aWYoIXRoaXMuaWdub3JlUHJvcGVydGllcy5oYXMoZSkpaWYoeWEocikpe2xldCBwPXIucmVmLG09bj9yLiRyZWZUZXh0OnZvaWQgMDtpZihwKXtsZXQgZz0kYShwKSx5PSIiO3RoaXMuY3VycmVudERvY3VtZW50JiZ0aGlzLmN1cnJlbnREb2N1bWVudCE9PWcmJihsP3k9bChnLnVyaSxyKTp5PWcudXJpLnRvU3RyaW5nKCkpO2xldCB2PXRoaXMuYXN0Tm9kZUxvY2F0b3IuZ2V0QXN0Tm9kZVBhdGgocCk7cmV0dXJueyRyZWY6YCR7eX0jJHt2fWAsJHJlZlRleHQ6bX19ZWxzZSByZXR1cm57JGVycm9yOihoPSh1PXIuZXJyb3IpPT09bnVsbHx8dT09PXZvaWQgMD92b2lkIDA6dS5tZXNzYWdlKSE9PW51bGwmJmghPT12b2lkIDA/aDoiQ291bGQgbm90IHJlc29sdmUgcmVmZXJlbmNlIiwkcmVmVGV4dDptfX1lbHNlIGlmKHNpKHIpKXtsZXQgcDtpZihhJiYocD10aGlzLmFkZEFzdE5vZGVSZWdpb25XaXRoQXNzaWdubWVudHNUbyhPYmplY3QuYXNzaWduKHt9LHIpKSwoIWV8fHIuJGRvY3VtZW50KSYmcD8uJHRleHRSZWdpb24mJihwLiR0ZXh0UmVnaW9uLmRvY3VtZW50VVJJPShmPXRoaXMuY3VycmVudERvY3VtZW50KT09PW51bGx8fGY9PT12b2lkIDA/dm9pZCAwOmYudXJpLnRvU3RyaW5nKCkpKSxpJiYhZSYmKHA/PyhwPU9iamVjdC5hc3NpZ24oe30scikpLHAuJHNvdXJjZVRleHQ9KGQ9ci4kY3N0Tm9kZSk9PT1udWxsfHxkPT09dm9pZCAwP3ZvaWQgMDpkLnRleHQpLHMpe3A/PyhwPU9iamVjdC5hc3NpZ24oe30scikpO2xldCBtPXRoaXMuY29tbWVudFByb3ZpZGVyLmdldENvbW1lbnQocik7bSYmKHAuJGNvbW1lbnQ9bS5yZXBsYWNlKC9cci9nLCIiKSl9cmV0dXJuIHA/P3J9ZWxzZSByZXR1cm4gcn1hZGRBc3ROb2RlUmVnaW9uV2l0aEFzc2lnbm1lbnRzVG8oZSl7bGV0IHI9byhuPT4oe29mZnNldDpuLm9mZnNldCxlbmQ6bi5lbmQsbGVuZ3RoOm4ubGVuZ3RoLHJhbmdlOm4ucmFuZ2V9KSwiY3JlYXRlRG9jdW1lbnRTZWdtZW50Iik7aWYoZS4kY3N0Tm9kZSl7bGV0IG49ZS4kdGV4dFJlZ2lvbj1yKGUuJGNzdE5vZGUpLGk9bi5hc3NpZ25tZW50cz17fTtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZmlsdGVyKGE9PiFhLnN0YXJ0c1dpdGgoIiQiKSkuZm9yRWFjaChhPT57bGV0IHM9SE4oZS4kY3N0Tm9kZSxhKS5tYXAocik7cy5sZW5ndGghPT0wJiYoaVthXT1zKX0pLGV9fWxpbmtOb2RlKGUscixuLGksYSxzKXtmb3IobGV0W3UsaF1vZiBPYmplY3QuZW50cmllcyhlKSlpZihBcnJheS5pc0FycmF5KGgpKWZvcihsZXQgZj0wO2Y8aC5sZW5ndGg7ZisrKXtsZXQgZD1oW2ZdO2x1ZShkKT9oW2ZdPXRoaXMucmV2aXZlUmVmZXJlbmNlKGUsdSxyLGQsbik6c2koZCkmJnRoaXMubGlua05vZGUoZCxyLG4sZSx1LGYpfWVsc2UgbHVlKGgpP2VbdV09dGhpcy5yZXZpdmVSZWZlcmVuY2UoZSx1LHIsaCxuKTpzaShoKSYmdGhpcy5saW5rTm9kZShoLHIsbixlLHUpO2xldCBsPWU7bC4kY29udGFpbmVyPWksbC4kY29udGFpbmVyUHJvcGVydHk9YSxsLiRjb250YWluZXJJbmRleD1zfXJldml2ZVJlZmVyZW5jZShlLHIsbixpLGEpe2xldCBzPWkuJHJlZlRleHQsbD1pLiRlcnJvcjtpZihpLiRyZWYpe2xldCB1PXRoaXMuZ2V0UmVmTm9kZShuLGkuJHJlZixhLnVyaUNvbnZlcnRlcik7aWYoc2kodSkpcmV0dXJuIHN8fChzPXRoaXMubmFtZVByb3ZpZGVyLmdldE5hbWUodSkpLHskcmVmVGV4dDpzPz8iIixyZWY6dX07bD11fWlmKGwpe2xldCB1PXskcmVmVGV4dDpzPz8iIn07cmV0dXJuIHUuZXJyb3I9e2NvbnRhaW5lcjplLHByb3BlcnR5OnIsbWVzc2FnZTpsLHJlZmVyZW5jZTp1fSx1fWVsc2UgcmV0dXJufWdldFJlZk5vZGUoZSxyLG4pe3RyeXtsZXQgaT1yLmluZGV4T2YoIiMiKTtpZihpPT09MCl7bGV0IHU9dGhpcy5hc3ROb2RlTG9jYXRvci5nZXRBc3ROb2RlKGUsci5zdWJzdHJpbmcoMSkpO3JldHVybiB1fHwiQ291bGQgbm90IHJlc29sdmUgcGF0aDogIityfWlmKGk8MCl7bGV0IHU9bj9uKHIpOm1zLnBhcnNlKHIpLGg9dGhpcy5sYW5naXVtRG9jdW1lbnRzLmdldERvY3VtZW50KHUpO3JldHVybiBoP2gucGFyc2VSZXN1bHQudmFsdWU6IkNvdWxkIG5vdCBmaW5kIGRvY3VtZW50IGZvciBVUkk6ICIrcn1sZXQgYT1uP24oci5zdWJzdHJpbmcoMCxpKSk6bXMucGFyc2Uoci5zdWJzdHJpbmcoMCxpKSkscz10aGlzLmxhbmdpdW1Eb2N1bWVudHMuZ2V0RG9jdW1lbnQoYSk7aWYoIXMpcmV0dXJuIkNvdWxkIG5vdCBmaW5kIGRvY3VtZW50IGZvciBVUkk6ICIrcjtpZihpPT09ci5sZW5ndGgtMSlyZXR1cm4gcy5wYXJzZVJlc3VsdC52YWx1ZTtsZXQgbD10aGlzLmFzdE5vZGVMb2NhdG9yLmdldEFzdE5vZGUocy5wYXJzZVJlc3VsdC52YWx1ZSxyLnN1YnN0cmluZyhpKzEpKTtyZXR1cm4gbHx8IkNvdWxkIG5vdCByZXNvbHZlIFVSSTogIityfWNhdGNoKGkpe3JldHVybiBTdHJpbmcoaSl9fX19KTt2YXIgWngsQUk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtVYygpO1p4PWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRTZXJ2aWNlUmVnaXN0cnkiKX1nZXQgbWFwKCl7cmV0dXJuIHRoaXMuZmlsZUV4dGVuc2lvbk1hcH1jb25zdHJ1Y3RvcihlKXt0aGlzLmxhbmd1YWdlSWRNYXA9bmV3IE1hcCx0aGlzLmZpbGVFeHRlbnNpb25NYXA9bmV3IE1hcCx0aGlzLnRleHREb2N1bWVudHM9ZT8ud29ya3NwYWNlLlRleHREb2N1bWVudHN9cmVnaXN0ZXIoZSl7bGV0IHI9ZS5MYW5ndWFnZU1ldGFEYXRhO2ZvcihsZXQgbiBvZiByLmZpbGVFeHRlbnNpb25zKXRoaXMuZmlsZUV4dGVuc2lvbk1hcC5oYXMobikmJmNvbnNvbGUud2FybihgVGhlIGZpbGUgZXh0ZW5zaW9uICR7bn0gaXMgdXNlZCBieSBtdWx0aXBsZSBsYW5ndWFnZXMuIEl0IGlzIG5vdyBhc3NpZ25lZCB0byAnJHtyLmxhbmd1YWdlSWR9Jy5gKSx0aGlzLmZpbGVFeHRlbnNpb25NYXAuc2V0KG4sZSk7dGhpcy5sYW5ndWFnZUlkTWFwLnNldChyLmxhbmd1YWdlSWQsZSksdGhpcy5sYW5ndWFnZUlkTWFwLnNpemU9PT0xP3RoaXMuc2luZ2xldG9uPWU6dGhpcy5zaW5nbGV0b249dm9pZCAwfWdldFNlcnZpY2VzKGUpe3ZhciByLG47aWYodGhpcy5zaW5nbGV0b24hPT12b2lkIDApcmV0dXJuIHRoaXMuc2luZ2xldG9uO2lmKHRoaXMubGFuZ3VhZ2VJZE1hcC5zaXplPT09MCl0aHJvdyBuZXcgRXJyb3IoIlRoZSBzZXJ2aWNlIHJlZ2lzdHJ5IGlzIGVtcHR5LiBVc2UgYHJlZ2lzdGVyYCB0byByZWdpc3RlciB0aGUgc2VydmljZXMgb2YgYSBsYW5ndWFnZS4iKTtsZXQgaT0obj0ocj10aGlzLnRleHREb2N1bWVudHMpPT09bnVsbHx8cj09PXZvaWQgMD92b2lkIDA6ci5nZXQoZSkpPT09bnVsbHx8bj09PXZvaWQgMD92b2lkIDA6bi5sYW5ndWFnZUlkO2lmKGkhPT12b2lkIDApe2xldCBsPXRoaXMubGFuZ3VhZ2VJZE1hcC5nZXQoaSk7aWYobClyZXR1cm4gbH1sZXQgYT1ncy5leHRuYW1lKGUpLHM9dGhpcy5maWxlRXh0ZW5zaW9uTWFwLmdldChhKTtpZighcyl0aHJvdyBpP25ldyBFcnJvcihgVGhlIHNlcnZpY2UgcmVnaXN0cnkgY29udGFpbnMgbm8gc2VydmljZXMgZm9yIHRoZSBleHRlbnNpb24gJyR7YX0nIGZvciBsYW5ndWFnZSAnJHtpfScuYCk6bmV3IEVycm9yKGBUaGUgc2VydmljZSByZWdpc3RyeSBjb250YWlucyBubyBzZXJ2aWNlcyBmb3IgdGhlIGV4dGVuc2lvbiAnJHthfScuYCk7cmV0dXJuIHN9aGFzU2VydmljZXMoZSl7dHJ5e3JldHVybiB0aGlzLmdldFNlcnZpY2VzKGUpLCEwfWNhdGNoe3JldHVybiExfX1nZXQgYWxsKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5sYW5ndWFnZUlkTWFwLnZhbHVlcygpKX19fSk7ZnVuY3Rpb24gTHAodCl7cmV0dXJue2NvZGU6dH19dmFyIFMxLEp4LGViPU4oKCk9PnsidXNlIHN0cmljdCI7cG8oKTtUMSgpO1FvKCk7R3MoKTtvKExwLCJkaWFnbm9zdGljRGF0YSIpOyhmdW5jdGlvbih0KXt0LmFsbD1bImZhc3QiLCJzbG93IiwiYnVpbHQtaW4iXX0pKFMxfHwoUzE9e30pKTtKeD1jbGFzc3tzdGF0aWN7byh0aGlzLCJWYWxpZGF0aW9uUmVnaXN0cnkiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLmVudHJpZXM9bmV3IHpsLHRoaXMuZW50cmllc0JlZm9yZT1bXSx0aGlzLmVudHJpZXNBZnRlcj1bXSx0aGlzLnJlZmxlY3Rpb249ZS5zaGFyZWQuQXN0UmVmbGVjdGlvbn1yZWdpc3RlcihlLHI9dGhpcyxuPSJmYXN0Iil7aWYobj09PSJidWlsdC1pbiIpdGhyb3cgbmV3IEVycm9yKCJUaGUgJ2J1aWx0LWluJyBjYXRlZ29yeSBpcyByZXNlcnZlZCBmb3IgbGV4ZXIsIHBhcnNlciwgYW5kIGxpbmtlciBlcnJvcnMuIik7Zm9yKGxldFtpLGFdb2YgT2JqZWN0LmVudHJpZXMoZSkpe2xldCBzPWE7aWYoQXJyYXkuaXNBcnJheShzKSlmb3IobGV0IGwgb2Ygcyl7bGV0IHU9e2NoZWNrOnRoaXMud3JhcFZhbGlkYXRpb25FeGNlcHRpb24obCxyKSxjYXRlZ29yeTpufTt0aGlzLmFkZEVudHJ5KGksdSl9ZWxzZSBpZih0eXBlb2Ygcz09ImZ1bmN0aW9uIil7bGV0IGw9e2NoZWNrOnRoaXMud3JhcFZhbGlkYXRpb25FeGNlcHRpb24ocyxyKSxjYXRlZ29yeTpufTt0aGlzLmFkZEVudHJ5KGksbCl9ZWxzZSBPYyhzKX19d3JhcFZhbGlkYXRpb25FeGNlcHRpb24oZSxyKXtyZXR1cm4gYXN5bmMobixpLGEpPT57YXdhaXQgdGhpcy5oYW5kbGVFeGNlcHRpb24oKCk9PmUuY2FsbChyLG4saSxhKSwiQW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHZhbGlkYXRpb24iLGksbil9fWFzeW5jIGhhbmRsZUV4Y2VwdGlvbihlLHIsbixpKXt0cnl7YXdhaXQgZSgpfWNhdGNoKGEpe2lmKFZjKGEpKXRocm93IGE7Y29uc29sZS5lcnJvcihgJHtyfTpgLGEpLGEgaW5zdGFuY2VvZiBFcnJvciYmYS5zdGFjayYmY29uc29sZS5lcnJvcihhLnN0YWNrKTtsZXQgcz1hIGluc3RhbmNlb2YgRXJyb3I/YS5tZXNzYWdlOlN0cmluZyhhKTtuKCJlcnJvciIsYCR7cn06ICR7c31gLHtub2RlOml9KX19YWRkRW50cnkoZSxyKXtpZihlPT09IkFzdE5vZGUiKXt0aGlzLmVudHJpZXMuYWRkKCJBc3ROb2RlIixyKTtyZXR1cm59Zm9yKGxldCBuIG9mIHRoaXMucmVmbGVjdGlvbi5nZXRBbGxTdWJUeXBlcyhlKSl0aGlzLmVudHJpZXMuYWRkKG4scil9Z2V0Q2hlY2tzKGUscil7bGV0IG49ZW4odGhpcy5lbnRyaWVzLmdldChlKSkuY29uY2F0KHRoaXMuZW50cmllcy5nZXQoIkFzdE5vZGUiKSk7cmV0dXJuIHImJihuPW4uZmlsdGVyKGk9PnIuaW5jbHVkZXMoaS5jYXRlZ29yeSkpKSxuLm1hcChpPT5pLmNoZWNrKX1yZWdpc3RlckJlZm9yZURvY3VtZW50KGUscj10aGlzKXt0aGlzLmVudHJpZXNCZWZvcmUucHVzaCh0aGlzLndyYXBQcmVwYXJhdGlvbkV4Y2VwdGlvbihlLCJBbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgc2V0LXVwIG9mIHRoZSB2YWxpZGF0aW9uIixyKSl9cmVnaXN0ZXJBZnRlckRvY3VtZW50KGUscj10aGlzKXt0aGlzLmVudHJpZXNBZnRlci5wdXNoKHRoaXMud3JhcFByZXBhcmF0aW9uRXhjZXB0aW9uKGUsIkFuIGVycm9yIG9jY3VycmVkIGR1cmluZyB0ZWFyLWRvd24gb2YgdGhlIHZhbGlkYXRpb24iLHIpKX13cmFwUHJlcGFyYXRpb25FeGNlcHRpb24oZSxyLG4pe3JldHVybiBhc3luYyhpLGEscyxsKT0+e2F3YWl0IHRoaXMuaGFuZGxlRXhjZXB0aW9uKCgpPT5lLmNhbGwobixpLGEscyxsKSxyLGEsaSl9fWdldCBjaGVja3NCZWZvcmUoKXtyZXR1cm4gdGhpcy5lbnRyaWVzQmVmb3JlfWdldCBjaGVja3NBZnRlcigpe3JldHVybiB0aGlzLmVudHJpZXNBZnRlcn19fSk7ZnVuY3Rpb24gY3VlKHQpe2lmKHQucmFuZ2UpcmV0dXJuIHQucmFuZ2U7bGV0IGU7cmV0dXJuIHR5cGVvZiB0LnByb3BlcnR5PT0ic3RyaW5nIj9lPW94KHQubm9kZS4kY3N0Tm9kZSx0LnByb3BlcnR5LHQuaW5kZXgpOnR5cGVvZiB0LmtleXdvcmQ9PSJzdHJpbmciJiYoZT1xTih0Lm5vZGUuJGNzdE5vZGUsdC5rZXl3b3JkLHQuaW5kZXgpKSxlPz8oZT10Lm5vZGUuJGNzdE5vZGUpLGU/ZS5yYW5nZTp7c3RhcnQ6e2xpbmU6MCxjaGFyYWN0ZXI6MH0sZW5kOntsaW5lOjAsY2hhcmFjdGVyOjB9fX1mdW5jdGlvbiBxRSh0KXtzd2l0Y2godCl7Y2FzZSJlcnJvciI6cmV0dXJuIDE7Y2FzZSJ3YXJuaW5nIjpyZXR1cm4gMjtjYXNlImluZm8iOnJldHVybiAzO2Nhc2UiaGludCI6cmV0dXJuIDQ7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgZGlhZ25vc3RpYyBzZXZlcml0eTogIit0KX19ZnVuY3Rpb24gdXVlKHQpe3N3aXRjaCh0KXtjYXNlImVycm9yIjpyZXR1cm4gTHAoWm8uTGV4aW5nRXJyb3IpO2Nhc2Uid2FybmluZyI6cmV0dXJuIExwKFpvLkxleGluZ1dhcm5pbmcpO2Nhc2UiaW5mbyI6cmV0dXJuIExwKFpvLkxleGluZ0luZm8pO2Nhc2UiaGludCI6cmV0dXJuIExwKFpvLkxleGluZ0hpbnQpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGRpYWdub3N0aWMgc2V2ZXJpdHk6ICIrdCl9fXZhciB0YixabyxfST1OKCgpPT57InVzZSBzdHJpY3QiO0tvKCk7RmwoKTtjcygpO09sKCk7UW8oKTtlYigpO3RiPWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHREb2N1bWVudFZhbGlkYXRvciIpfWNvbnN0cnVjdG9yKGUpe3RoaXMudmFsaWRhdGlvblJlZ2lzdHJ5PWUudmFsaWRhdGlvbi5WYWxpZGF0aW9uUmVnaXN0cnksdGhpcy5tZXRhZGF0YT1lLkxhbmd1YWdlTWV0YURhdGF9YXN5bmMgdmFsaWRhdGVEb2N1bWVudChlLHI9e30sbj15ci5DYW5jZWxsYXRpb25Ub2tlbi5Ob25lKXtsZXQgaT1lLnBhcnNlUmVzdWx0LGE9W107aWYoYXdhaXQgd2kobiksKCFyLmNhdGVnb3JpZXN8fHIuY2F0ZWdvcmllcy5pbmNsdWRlcygiYnVpbHQtaW4iKSkmJih0aGlzLnByb2Nlc3NMZXhpbmdFcnJvcnMoaSxhLHIpLHIuc3RvcEFmdGVyTGV4aW5nRXJyb3JzJiZhLnNvbWUocz0+e3ZhciBsO3JldHVybigobD1zLmRhdGEpPT09bnVsbHx8bD09PXZvaWQgMD92b2lkIDA6bC5jb2RlKT09PVpvLkxleGluZ0Vycm9yfSl8fCh0aGlzLnByb2Nlc3NQYXJzaW5nRXJyb3JzKGksYSxyKSxyLnN0b3BBZnRlclBhcnNpbmdFcnJvcnMmJmEuc29tZShzPT57dmFyIGw7cmV0dXJuKChsPXMuZGF0YSk9PT1udWxsfHxsPT09dm9pZCAwP3ZvaWQgMDpsLmNvZGUpPT09Wm8uUGFyc2luZ0Vycm9yfSkpfHwodGhpcy5wcm9jZXNzTGlua2luZ0Vycm9ycyhlLGEsciksci5zdG9wQWZ0ZXJMaW5raW5nRXJyb3JzJiZhLnNvbWUocz0+e3ZhciBsO3JldHVybigobD1zLmRhdGEpPT09bnVsbHx8bD09PXZvaWQgMD92b2lkIDA6bC5jb2RlKT09PVpvLkxpbmtpbmdFcnJvcn0pKSkpcmV0dXJuIGE7dHJ5e2EucHVzaCguLi5hd2FpdCB0aGlzLnZhbGlkYXRlQXN0KGkudmFsdWUscixuKSl9Y2F0Y2gocyl7aWYoVmMocykpdGhyb3cgcztjb25zb2xlLmVycm9yKCJBbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgdmFsaWRhdGlvbjoiLHMpfXJldHVybiBhd2FpdCB3aShuKSxhfXByb2Nlc3NMZXhpbmdFcnJvcnMoZSxyLG4pe3ZhciBpLGEscztsZXQgbD1bLi4uZS5sZXhlckVycm9ycywuLi4oYT0oaT1lLmxleGVyUmVwb3J0KT09PW51bGx8fGk9PT12b2lkIDA/dm9pZCAwOmkuZGlhZ25vc3RpY3MpIT09bnVsbCYmYSE9PXZvaWQgMD9hOltdXTtmb3IobGV0IHUgb2YgbCl7bGV0IGg9KHM9dS5zZXZlcml0eSkhPT1udWxsJiZzIT09dm9pZCAwP3M6ImVycm9yIixmPXtzZXZlcml0eTpxRShoKSxyYW5nZTp7c3RhcnQ6e2xpbmU6dS5saW5lLTEsY2hhcmFjdGVyOnUuY29sdW1uLTF9LGVuZDp7bGluZTp1LmxpbmUtMSxjaGFyYWN0ZXI6dS5jb2x1bW4rdS5sZW5ndGgtMX19LG1lc3NhZ2U6dS5tZXNzYWdlLGRhdGE6dXVlKGgpLHNvdXJjZTp0aGlzLmdldFNvdXJjZSgpfTtyLnB1c2goZil9fXByb2Nlc3NQYXJzaW5nRXJyb3JzKGUscixuKXtmb3IobGV0IGkgb2YgZS5wYXJzZXJFcnJvcnMpe2xldCBhO2lmKGlzTmFOKGkudG9rZW4uc3RhcnRPZmZzZXQpKXtpZigicHJldmlvdXNUb2tlbiJpbiBpKXtsZXQgcz1pLnByZXZpb3VzVG9rZW47aWYoaXNOYU4ocy5zdGFydE9mZnNldCkpe2xldCBsPXtsaW5lOjAsY2hhcmFjdGVyOjB9O2E9e3N0YXJ0OmwsZW5kOmx9fWVsc2V7bGV0IGw9e2xpbmU6cy5lbmRMaW5lLTEsY2hhcmFjdGVyOnMuZW5kQ29sdW1ufTthPXtzdGFydDpsLGVuZDpsfX19fWVsc2UgYT1LbShpLnRva2VuKTtpZihhKXtsZXQgcz17c2V2ZXJpdHk6cUUoImVycm9yIikscmFuZ2U6YSxtZXNzYWdlOmkubWVzc2FnZSxkYXRhOkxwKFpvLlBhcnNpbmdFcnJvciksc291cmNlOnRoaXMuZ2V0U291cmNlKCl9O3IucHVzaChzKX19fXByb2Nlc3NMaW5raW5nRXJyb3JzKGUscixuKXtmb3IobGV0IGkgb2YgZS5yZWZlcmVuY2VzKXtsZXQgYT1pLmVycm9yO2lmKGEpe2xldCBzPXtub2RlOmEuY29udGFpbmVyLHByb3BlcnR5OmEucHJvcGVydHksaW5kZXg6YS5pbmRleCxkYXRhOntjb2RlOlpvLkxpbmtpbmdFcnJvcixjb250YWluZXJUeXBlOmEuY29udGFpbmVyLiR0eXBlLHByb3BlcnR5OmEucHJvcGVydHkscmVmVGV4dDphLnJlZmVyZW5jZS4kcmVmVGV4dH19O3IucHVzaCh0aGlzLnRvRGlhZ25vc3RpYygiZXJyb3IiLGEubWVzc2FnZSxzKSl9fX1hc3luYyB2YWxpZGF0ZUFzdChlLHIsbj15ci5DYW5jZWxsYXRpb25Ub2tlbi5Ob25lKXtsZXQgaT1bXSxhPW8oKHMsbCx1KT0+e2kucHVzaCh0aGlzLnRvRGlhZ25vc3RpYyhzLGwsdSkpfSwiYWNjZXB0b3IiKTtyZXR1cm4gYXdhaXQgdGhpcy52YWxpZGF0ZUFzdEJlZm9yZShlLHIsYSxuKSxhd2FpdCB0aGlzLnZhbGlkYXRlQXN0Tm9kZXMoZSxyLGEsbiksYXdhaXQgdGhpcy52YWxpZGF0ZUFzdEFmdGVyKGUscixhLG4pLGl9YXN5bmMgdmFsaWRhdGVBc3RCZWZvcmUoZSxyLG4saT15ci5DYW5jZWxsYXRpb25Ub2tlbi5Ob25lKXt2YXIgYTtsZXQgcz10aGlzLnZhbGlkYXRpb25SZWdpc3RyeS5jaGVja3NCZWZvcmU7Zm9yKGxldCBsIG9mIHMpYXdhaXQgd2koaSksYXdhaXQgbChlLG4sKGE9ci5jYXRlZ29yaWVzKSE9PW51bGwmJmEhPT12b2lkIDA/YTpbXSxpKX1hc3luYyB2YWxpZGF0ZUFzdE5vZGVzKGUscixuLGk9eXIuQ2FuY2VsbGF0aW9uVG9rZW4uTm9uZSl7YXdhaXQgUHJvbWlzZS5hbGwoam8oZSkubWFwKGFzeW5jIGE9Pnthd2FpdCB3aShpKTtsZXQgcz10aGlzLnZhbGlkYXRpb25SZWdpc3RyeS5nZXRDaGVja3MoYS4kdHlwZSxyLmNhdGVnb3JpZXMpO2ZvcihsZXQgbCBvZiBzKWF3YWl0IGwoYSxuLGkpfSkpfWFzeW5jIHZhbGlkYXRlQXN0QWZ0ZXIoZSxyLG4saT15ci5DYW5jZWxsYXRpb25Ub2tlbi5Ob25lKXt2YXIgYTtsZXQgcz10aGlzLnZhbGlkYXRpb25SZWdpc3RyeS5jaGVja3NBZnRlcjtmb3IobGV0IGwgb2Ygcylhd2FpdCB3aShpKSxhd2FpdCBsKGUsbiwoYT1yLmNhdGVnb3JpZXMpIT09bnVsbCYmYSE9PXZvaWQgMD9hOltdLGkpfXRvRGlhZ25vc3RpYyhlLHIsbil7cmV0dXJue21lc3NhZ2U6cixyYW5nZTpjdWUobiksc2V2ZXJpdHk6cUUoZSksY29kZTpuLmNvZGUsY29kZURlc2NyaXB0aW9uOm4uY29kZURlc2NyaXB0aW9uLHRhZ3M6bi50YWdzLHJlbGF0ZWRJbmZvcm1hdGlvbjpuLnJlbGF0ZWRJbmZvcm1hdGlvbixkYXRhOm4uZGF0YSxzb3VyY2U6dGhpcy5nZXRTb3VyY2UoKX19Z2V0U291cmNlKCl7cmV0dXJuIHRoaXMubWV0YWRhdGEubGFuZ3VhZ2VJZH19O28oY3VlLCJnZXREaWFnbm9zdGljUmFuZ2UiKTtvKHFFLCJ0b0RpYWdub3N0aWNTZXZlcml0eSIpO28odXVlLCJ0b0RpYWdub3N0aWNEYXRhIik7KGZ1bmN0aW9uKHQpe3QuTGV4aW5nRXJyb3I9ImxleGluZy1lcnJvciIsdC5MZXhpbmdXYXJuaW5nPSJsZXhpbmctd2FybmluZyIsdC5MZXhpbmdJbmZvPSJsZXhpbmctaW5mbyIsdC5MZXhpbmdIaW50PSJsZXhpbmctaGludCIsdC5QYXJzaW5nRXJyb3I9InBhcnNpbmctZXJyb3IiLHQuTGlua2luZ0Vycm9yPSJsaW5raW5nLWVycm9yIn0pKFpvfHwoWm89e30pKX0pO3ZhciByYixuYixEST1OKCgpPT57InVzZSBzdHJpY3QiO0tvKCk7SWwoKTtjcygpO09sKCk7UW8oKTtVYygpO3JiPWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRBc3ROb2RlRGVzY3JpcHRpb25Qcm92aWRlciIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuYXN0Tm9kZUxvY2F0b3I9ZS53b3Jrc3BhY2UuQXN0Tm9kZUxvY2F0b3IsdGhpcy5uYW1lUHJvdmlkZXI9ZS5yZWZlcmVuY2VzLk5hbWVQcm92aWRlcn1jcmVhdGVEZXNjcmlwdGlvbihlLHIsbil7bGV0IGk9bj8/JGEoZSk7cj8/KHI9dGhpcy5uYW1lUHJvdmlkZXIuZ2V0TmFtZShlKSk7bGV0IGE9dGhpcy5hc3ROb2RlTG9jYXRvci5nZXRBc3ROb2RlUGF0aChlKTtpZighcil0aHJvdyBuZXcgRXJyb3IoYE5vZGUgYXQgcGF0aCAke2F9IGhhcyBubyBuYW1lLmApO2xldCBzLGw9bygoKT0+e3ZhciB1O3JldHVybiBzPz8ocz1vcCgodT10aGlzLm5hbWVQcm92aWRlci5nZXROYW1lTm9kZShlKSkhPT1udWxsJiZ1IT09dm9pZCAwP3U6ZS4kY3N0Tm9kZSkpfSwibmFtZVNlZ21lbnRHZXR0ZXIiKTtyZXR1cm57bm9kZTplLG5hbWU6cixnZXQgbmFtZVNlZ21lbnQoKXtyZXR1cm4gbCgpfSxzZWxlY3Rpb25TZWdtZW50Om9wKGUuJGNzdE5vZGUpLHR5cGU6ZS4kdHlwZSxkb2N1bWVudFVyaTppLnVyaSxwYXRoOmF9fX0sbmI9Y2xhc3N7c3RhdGlje28odGhpcywiRGVmYXVsdFJlZmVyZW5jZURlc2NyaXB0aW9uUHJvdmlkZXIiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLm5vZGVMb2NhdG9yPWUud29ya3NwYWNlLkFzdE5vZGVMb2NhdG9yfWFzeW5jIGNyZWF0ZURlc2NyaXB0aW9ucyhlLHI9eXIuQ2FuY2VsbGF0aW9uVG9rZW4uTm9uZSl7bGV0IG49W10saT1lLnBhcnNlUmVzdWx0LnZhbHVlO2ZvcihsZXQgYSBvZiBqbyhpKSlhd2FpdCB3aShyKSxQZyhhKS5maWx0ZXIocz0+IWFwKHMpKS5mb3JFYWNoKHM9PntsZXQgbD10aGlzLmNyZWF0ZURlc2NyaXB0aW9uKHMpO2wmJm4ucHVzaChsKX0pO3JldHVybiBufWNyZWF0ZURlc2NyaXB0aW9uKGUpe2xldCByPWUucmVmZXJlbmNlLiRub2RlRGVzY3JpcHRpb24sbj1lLnJlZmVyZW5jZS4kcmVmTm9kZTtpZighcnx8IW4pcmV0dXJuO2xldCBpPSRhKGUuY29udGFpbmVyKS51cmk7cmV0dXJue3NvdXJjZVVyaTppLHNvdXJjZVBhdGg6dGhpcy5ub2RlTG9jYXRvci5nZXRBc3ROb2RlUGF0aChlLmNvbnRhaW5lciksdGFyZ2V0VXJpOnIuZG9jdW1lbnRVcmksdGFyZ2V0UGF0aDpyLnBhdGgsc2VnbWVudDpvcChuKSxsb2NhbDpncy5lcXVhbHMoci5kb2N1bWVudFVyaSxpKX19fX0pO3ZhciBpYixMST1OKCgpPT57InVzZSBzdHJpY3QiO2liPWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRBc3ROb2RlTG9jYXRvciIpfWNvbnN0cnVjdG9yKCl7dGhpcy5zZWdtZW50U2VwYXJhdG9yPSIvIix0aGlzLmluZGV4U2VwYXJhdG9yPSJAIn1nZXRBc3ROb2RlUGF0aChlKXtpZihlLiRjb250YWluZXIpe2xldCByPXRoaXMuZ2V0QXN0Tm9kZVBhdGgoZS4kY29udGFpbmVyKSxuPXRoaXMuZ2V0UGF0aFNlZ21lbnQoZSk7cmV0dXJuIHIrdGhpcy5zZWdtZW50U2VwYXJhdG9yK259cmV0dXJuIiJ9Z2V0UGF0aFNlZ21lbnQoeyRjb250YWluZXJQcm9wZXJ0eTplLCRjb250YWluZXJJbmRleDpyfSl7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJNaXNzaW5nICckY29udGFpbmVyUHJvcGVydHknIGluIEFTVCBub2RlLiIpO3JldHVybiByIT09dm9pZCAwP2UrdGhpcy5pbmRleFNlcGFyYXRvcityOmV9Z2V0QXN0Tm9kZShlLHIpe3JldHVybiByLnNwbGl0KHRoaXMuc2VnbWVudFNlcGFyYXRvcikucmVkdWNlKChpLGEpPT57aWYoIWl8fGEubGVuZ3RoPT09MClyZXR1cm4gaTtsZXQgcz1hLmluZGV4T2YodGhpcy5pbmRleFNlcGFyYXRvcik7aWYocz4wKXtsZXQgbD1hLnN1YnN0cmluZygwLHMpLHU9cGFyc2VJbnQoYS5zdWJzdHJpbmcocysxKSksaD1pW2xdO3JldHVybiBoPy5bdV19cmV0dXJuIGlbYV19LGUpfX19KTt2YXIgWm49e307dmFyIFlFPU4oKCk9PnsidXNlIHN0cmljdCI7Q3IoWm4sQWEoZEkoKSwxKSl9KTt2YXIgYWIsUkk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtZRSgpO1FvKCk7YWI9Y2xhc3N7c3RhdGlje28odGhpcywiRGVmYXVsdENvbmZpZ3VyYXRpb25Qcm92aWRlciIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuX3JlYWR5PW5ldyBwcyx0aGlzLnNldHRpbmdzPXt9LHRoaXMud29ya3NwYWNlQ29uZmlnPSExLHRoaXMub25Db25maWd1cmF0aW9uU2VjdGlvblVwZGF0ZUVtaXR0ZXI9bmV3IFpuLkVtaXR0ZXIsdGhpcy5zZXJ2aWNlUmVnaXN0cnk9ZS5TZXJ2aWNlUmVnaXN0cnl9Z2V0IHJlYWR5KCl7cmV0dXJuIHRoaXMuX3JlYWR5LnByb21pc2V9aW5pdGlhbGl6ZShlKXt2YXIgcixuO3RoaXMud29ya3NwYWNlQ29uZmlnPShuPShyPWUuY2FwYWJpbGl0aWVzLndvcmtzcGFjZSk9PT1udWxsfHxyPT09dm9pZCAwP3ZvaWQgMDpyLmNvbmZpZ3VyYXRpb24pIT09bnVsbCYmbiE9PXZvaWQgMD9uOiExfWFzeW5jIGluaXRpYWxpemVkKGUpe2lmKHRoaXMud29ya3NwYWNlQ29uZmlnKXtpZihlLnJlZ2lzdGVyKXtsZXQgcj10aGlzLnNlcnZpY2VSZWdpc3RyeS5hbGw7ZS5yZWdpc3Rlcih7c2VjdGlvbjpyLm1hcChuPT50aGlzLnRvU2VjdGlvbk5hbWUobi5MYW5ndWFnZU1ldGFEYXRhLmxhbmd1YWdlSWQpKX0pfWlmKGUuZmV0Y2hDb25maWd1cmF0aW9uKXtsZXQgcj10aGlzLnNlcnZpY2VSZWdpc3RyeS5hbGwubWFwKGk9Pih7c2VjdGlvbjp0aGlzLnRvU2VjdGlvbk5hbWUoaS5MYW5ndWFnZU1ldGFEYXRhLmxhbmd1YWdlSWQpfSkpLG49YXdhaXQgZS5mZXRjaENvbmZpZ3VyYXRpb24ocik7ci5mb3JFYWNoKChpLGEpPT57dGhpcy51cGRhdGVTZWN0aW9uQ29uZmlndXJhdGlvbihpLnNlY3Rpb24sblthXSl9KX19dGhpcy5fcmVhZHkucmVzb2x2ZSgpfXVwZGF0ZUNvbmZpZ3VyYXRpb24oZSl7ZS5zZXR0aW5ncyYmT2JqZWN0LmtleXMoZS5zZXR0aW5ncykuZm9yRWFjaChyPT57bGV0IG49ZS5zZXR0aW5nc1tyXTt0aGlzLnVwZGF0ZVNlY3Rpb25Db25maWd1cmF0aW9uKHIsbiksdGhpcy5vbkNvbmZpZ3VyYXRpb25TZWN0aW9uVXBkYXRlRW1pdHRlci5maXJlKHtzZWN0aW9uOnIsY29uZmlndXJhdGlvbjpufSl9KX11cGRhdGVTZWN0aW9uQ29uZmlndXJhdGlvbihlLHIpe3RoaXMuc2V0dGluZ3NbZV09cn1hc3luYyBnZXRDb25maWd1cmF0aW9uKGUscil7YXdhaXQgdGhpcy5yZWFkeTtsZXQgbj10aGlzLnRvU2VjdGlvbk5hbWUoZSk7aWYodGhpcy5zZXR0aW5nc1tuXSlyZXR1cm4gdGhpcy5zZXR0aW5nc1tuXVtyXX10b1NlY3Rpb25OYW1lKGUpe3JldHVybmAke2V9YH1nZXQgb25Db25maWd1cmF0aW9uU2VjdGlvblVwZGF0ZSgpe3JldHVybiB0aGlzLm9uQ29uZmlndXJhdGlvblNlY3Rpb25VcGRhdGVFbWl0dGVyLmV2ZW50fX19KTt2YXIgdmYsTkk9TigoKT0+eyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShyKXtyZXR1cm57ZGlzcG9zZTpvKGFzeW5jKCk9PmF3YWl0IHIoKSwiZGlzcG9zZSIpfX1vKGUsImNyZWF0ZSIpLHQuY3JlYXRlPWV9KSh2Znx8KHZmPXt9KSl9KTt2YXIgc2IsTUk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtLbygpO05JKCk7VDEoKTtRbygpO0dzKCk7ZWIoKTtiMSgpO3NiPWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHREb2N1bWVudEJ1aWxkZXIiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLnVwZGF0ZUJ1aWxkT3B0aW9ucz17dmFsaWRhdGlvbjp7Y2F0ZWdvcmllczpbImJ1aWx0LWluIiwiZmFzdCJdfX0sdGhpcy51cGRhdGVMaXN0ZW5lcnM9W10sdGhpcy5idWlsZFBoYXNlTGlzdGVuZXJzPW5ldyB6bCx0aGlzLmRvY3VtZW50UGhhc2VMaXN0ZW5lcnM9bmV3IHpsLHRoaXMuYnVpbGRTdGF0ZT1uZXcgTWFwLHRoaXMuZG9jdW1lbnRCdWlsZFdhaXRlcnM9bmV3IE1hcCx0aGlzLmN1cnJlbnRTdGF0ZT1rbi5DaGFuZ2VkLHRoaXMubGFuZ2l1bURvY3VtZW50cz1lLndvcmtzcGFjZS5MYW5naXVtRG9jdW1lbnRzLHRoaXMubGFuZ2l1bURvY3VtZW50RmFjdG9yeT1lLndvcmtzcGFjZS5MYW5naXVtRG9jdW1lbnRGYWN0b3J5LHRoaXMudGV4dERvY3VtZW50cz1lLndvcmtzcGFjZS5UZXh0RG9jdW1lbnRzLHRoaXMuaW5kZXhNYW5hZ2VyPWUud29ya3NwYWNlLkluZGV4TWFuYWdlcix0aGlzLnNlcnZpY2VSZWdpc3RyeT1lLlNlcnZpY2VSZWdpc3RyeX1hc3luYyBidWlsZChlLHI9e30sbj15ci5DYW5jZWxsYXRpb25Ub2tlbi5Ob25lKXt2YXIgaSxhO2ZvcihsZXQgcyBvZiBlKXtsZXQgbD1zLnVyaS50b1N0cmluZygpO2lmKHMuc3RhdGU9PT1rbi5WYWxpZGF0ZWQpe2lmKHR5cGVvZiByLnZhbGlkYXRpb249PSJib29sZWFuIiYmci52YWxpZGF0aW9uKXMuc3RhdGU9a24uSW5kZXhlZFJlZmVyZW5jZXMscy5kaWFnbm9zdGljcz12b2lkIDAsdGhpcy5idWlsZFN0YXRlLmRlbGV0ZShsKTtlbHNlIGlmKHR5cGVvZiByLnZhbGlkYXRpb249PSJvYmplY3QiKXtsZXQgdT10aGlzLmJ1aWxkU3RhdGUuZ2V0KGwpLGg9KGk9dT8ucmVzdWx0KT09PW51bGx8fGk9PT12b2lkIDA/dm9pZCAwOmkudmFsaWRhdGlvbkNoZWNrcztpZihoKXtsZXQgZD0oKGE9ci52YWxpZGF0aW9uLmNhdGVnb3JpZXMpIT09bnVsbCYmYSE9PXZvaWQgMD9hOlMxLmFsbCkuZmlsdGVyKHA9PiFoLmluY2x1ZGVzKHApKTtkLmxlbmd0aD4wJiYodGhpcy5idWlsZFN0YXRlLnNldChsLHtjb21wbGV0ZWQ6ITEsb3B0aW9uczp7dmFsaWRhdGlvbjpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sci52YWxpZGF0aW9uKSx7Y2F0ZWdvcmllczpkfSl9LHJlc3VsdDp1LnJlc3VsdH0pLHMuc3RhdGU9a24uSW5kZXhlZFJlZmVyZW5jZXMpfX19ZWxzZSB0aGlzLmJ1aWxkU3RhdGUuZGVsZXRlKGwpfXRoaXMuY3VycmVudFN0YXRlPWtuLkNoYW5nZWQsYXdhaXQgdGhpcy5lbWl0VXBkYXRlKGUubWFwKHM9PnMudXJpKSxbXSksYXdhaXQgdGhpcy5idWlsZERvY3VtZW50cyhlLHIsbil9YXN5bmMgdXBkYXRlKGUscixuPXlyLkNhbmNlbGxhdGlvblRva2VuLk5vbmUpe3RoaXMuY3VycmVudFN0YXRlPWtuLkNoYW5nZWQ7Zm9yKGxldCBzIG9mIHIpdGhpcy5sYW5naXVtRG9jdW1lbnRzLmRlbGV0ZURvY3VtZW50KHMpLHRoaXMuYnVpbGRTdGF0ZS5kZWxldGUocy50b1N0cmluZygpKSx0aGlzLmluZGV4TWFuYWdlci5yZW1vdmUocyk7Zm9yKGxldCBzIG9mIGUpe2lmKCF0aGlzLmxhbmdpdW1Eb2N1bWVudHMuaW52YWxpZGF0ZURvY3VtZW50KHMpKXtsZXQgdT10aGlzLmxhbmdpdW1Eb2N1bWVudEZhY3RvcnkuZnJvbU1vZGVsKHskdHlwZToiSU5WQUxJRCJ9LHMpO3Uuc3RhdGU9a24uQ2hhbmdlZCx0aGlzLmxhbmdpdW1Eb2N1bWVudHMuYWRkRG9jdW1lbnQodSl9dGhpcy5idWlsZFN0YXRlLmRlbGV0ZShzLnRvU3RyaW5nKCkpfWxldCBpPWVuKGUpLmNvbmNhdChyKS5tYXAocz0+cy50b1N0cmluZygpKS50b1NldCgpO3RoaXMubGFuZ2l1bURvY3VtZW50cy5hbGwuZmlsdGVyKHM9PiFpLmhhcyhzLnVyaS50b1N0cmluZygpKSYmdGhpcy5zaG91bGRSZWxpbmsocyxpKSkuZm9yRWFjaChzPT57dGhpcy5zZXJ2aWNlUmVnaXN0cnkuZ2V0U2VydmljZXMocy51cmkpLnJlZmVyZW5jZXMuTGlua2VyLnVubGluayhzKSxzLnN0YXRlPU1hdGgubWluKHMuc3RhdGUsa24uQ29tcHV0ZWRTY29wZXMpLHMuZGlhZ25vc3RpY3M9dm9pZCAwfSksYXdhaXQgdGhpcy5lbWl0VXBkYXRlKGUsciksYXdhaXQgd2kobik7bGV0IGE9dGhpcy5zb3J0RG9jdW1lbnRzKHRoaXMubGFuZ2l1bURvY3VtZW50cy5hbGwuZmlsdGVyKHM9Pnt2YXIgbDtyZXR1cm4gcy5zdGF0ZTxrbi5MaW5rZWR8fCEoISgobD10aGlzLmJ1aWxkU3RhdGUuZ2V0KHMudXJpLnRvU3RyaW5nKCkpKT09PW51bGx8fGw9PT12b2lkIDApJiZsLmNvbXBsZXRlZCl9KS50b0FycmF5KCkpO2F3YWl0IHRoaXMuYnVpbGREb2N1bWVudHMoYSx0aGlzLnVwZGF0ZUJ1aWxkT3B0aW9ucyxuKX1hc3luYyBlbWl0VXBkYXRlKGUscil7YXdhaXQgUHJvbWlzZS5hbGwodGhpcy51cGRhdGVMaXN0ZW5lcnMubWFwKG49Pm4oZSxyKSkpfXNvcnREb2N1bWVudHMoZSl7bGV0IHI9MCxuPWUubGVuZ3RoLTE7Zm9yKDtyPG47KXtmb3IoO3I8ZS5sZW5ndGgmJnRoaXMuaGFzVGV4dERvY3VtZW50KGVbcl0pOylyKys7Zm9yKDtuPj0wJiYhdGhpcy5oYXNUZXh0RG9jdW1lbnQoZVtuXSk7KW4tLTtyPG4mJihbZVtyXSxlW25dXT1bZVtuXSxlW3JdXSl9cmV0dXJuIGV9aGFzVGV4dERvY3VtZW50KGUpe3ZhciByO3JldHVybiEhKCEoKHI9dGhpcy50ZXh0RG9jdW1lbnRzKT09PW51bGx8fHI9PT12b2lkIDApJiZyLmdldChlLnVyaSkpfXNob3VsZFJlbGluayhlLHIpe3JldHVybiBlLnJlZmVyZW5jZXMuc29tZShuPT5uLmVycm9yIT09dm9pZCAwKT8hMDp0aGlzLmluZGV4TWFuYWdlci5pc0FmZmVjdGVkKGUscil9b25VcGRhdGUoZSl7cmV0dXJuIHRoaXMudXBkYXRlTGlzdGVuZXJzLnB1c2goZSksdmYuY3JlYXRlKCgpPT57bGV0IHI9dGhpcy51cGRhdGVMaXN0ZW5lcnMuaW5kZXhPZihlKTtyPj0wJiZ0aGlzLnVwZGF0ZUxpc3RlbmVycy5zcGxpY2UociwxKX0pfWFzeW5jIGJ1aWxkRG9jdW1lbnRzKGUscixuKXt0aGlzLnByZXBhcmVCdWlsZChlLHIpLGF3YWl0IHRoaXMucnVuQ2FuY2VsYWJsZShlLGtuLlBhcnNlZCxuLGE9PnRoaXMubGFuZ2l1bURvY3VtZW50RmFjdG9yeS51cGRhdGUoYSxuKSksYXdhaXQgdGhpcy5ydW5DYW5jZWxhYmxlKGUsa24uSW5kZXhlZENvbnRlbnQsbixhPT50aGlzLmluZGV4TWFuYWdlci51cGRhdGVDb250ZW50KGEsbikpLGF3YWl0IHRoaXMucnVuQ2FuY2VsYWJsZShlLGtuLkNvbXB1dGVkU2NvcGVzLG4sYXN5bmMgYT0+e2xldCBzPXRoaXMuc2VydmljZVJlZ2lzdHJ5LmdldFNlcnZpY2VzKGEudXJpKS5yZWZlcmVuY2VzLlNjb3BlQ29tcHV0YXRpb247YS5wcmVjb21wdXRlZFNjb3Blcz1hd2FpdCBzLmNvbXB1dGVMb2NhbFNjb3BlcyhhLG4pfSksYXdhaXQgdGhpcy5ydW5DYW5jZWxhYmxlKGUsa24uTGlua2VkLG4sYT0+dGhpcy5zZXJ2aWNlUmVnaXN0cnkuZ2V0U2VydmljZXMoYS51cmkpLnJlZmVyZW5jZXMuTGlua2VyLmxpbmsoYSxuKSksYXdhaXQgdGhpcy5ydW5DYW5jZWxhYmxlKGUsa24uSW5kZXhlZFJlZmVyZW5jZXMsbixhPT50aGlzLmluZGV4TWFuYWdlci51cGRhdGVSZWZlcmVuY2VzKGEsbikpO2xldCBpPWUuZmlsdGVyKGE9PnRoaXMuc2hvdWxkVmFsaWRhdGUoYSkpO2F3YWl0IHRoaXMucnVuQ2FuY2VsYWJsZShpLGtuLlZhbGlkYXRlZCxuLGE9PnRoaXMudmFsaWRhdGUoYSxuKSk7Zm9yKGxldCBhIG9mIGUpe2xldCBzPXRoaXMuYnVpbGRTdGF0ZS5nZXQoYS51cmkudG9TdHJpbmcoKSk7cyYmKHMuY29tcGxldGVkPSEwKX19cHJlcGFyZUJ1aWxkKGUscil7Zm9yKGxldCBuIG9mIGUpe2xldCBpPW4udXJpLnRvU3RyaW5nKCksYT10aGlzLmJ1aWxkU3RhdGUuZ2V0KGkpOyghYXx8YS5jb21wbGV0ZWQpJiZ0aGlzLmJ1aWxkU3RhdGUuc2V0KGkse2NvbXBsZXRlZDohMSxvcHRpb25zOnIscmVzdWx0OmE/LnJlc3VsdH0pfX1hc3luYyBydW5DYW5jZWxhYmxlKGUscixuLGkpe2xldCBhPWUuZmlsdGVyKGw9Pmwuc3RhdGU8cik7Zm9yKGxldCBsIG9mIGEpYXdhaXQgd2kobiksYXdhaXQgaShsKSxsLnN0YXRlPXIsYXdhaXQgdGhpcy5ub3RpZnlEb2N1bWVudFBoYXNlKGwscixuKTtsZXQgcz1lLmZpbHRlcihsPT5sLnN0YXRlPT09cik7YXdhaXQgdGhpcy5ub3RpZnlCdWlsZFBoYXNlKHMscixuKSx0aGlzLmN1cnJlbnRTdGF0ZT1yfW9uQnVpbGRQaGFzZShlLHIpe3JldHVybiB0aGlzLmJ1aWxkUGhhc2VMaXN0ZW5lcnMuYWRkKGUsciksdmYuY3JlYXRlKCgpPT57dGhpcy5idWlsZFBoYXNlTGlzdGVuZXJzLmRlbGV0ZShlLHIpfSl9b25Eb2N1bWVudFBoYXNlKGUscil7cmV0dXJuIHRoaXMuZG9jdW1lbnRQaGFzZUxpc3RlbmVycy5hZGQoZSxyKSx2Zi5jcmVhdGUoKCk9Pnt0aGlzLmRvY3VtZW50UGhhc2VMaXN0ZW5lcnMuZGVsZXRlKGUscil9KX13YWl0VW50aWwoZSxyLG4pe2xldCBpO2lmKHImJiJwYXRoImluIHI/aT1yOm49cixuPz8obj15ci5DYW5jZWxsYXRpb25Ub2tlbi5Ob25lKSxpKXtsZXQgYT10aGlzLmxhbmdpdW1Eb2N1bWVudHMuZ2V0RG9jdW1lbnQoaSk7aWYoYSYmYS5zdGF0ZT5lKXJldHVybiBQcm9taXNlLnJlc29sdmUoaSl9cmV0dXJuIHRoaXMuY3VycmVudFN0YXRlPj1lP1Byb21pc2UucmVzb2x2ZSh2b2lkIDApOm4uaXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQ/UHJvbWlzZS5yZWplY3QoR2MpOm5ldyBQcm9taXNlKChhLHMpPT57bGV0IGw9dGhpcy5vbkJ1aWxkUGhhc2UoZSwoKT0+e2lmKGwuZGlzcG9zZSgpLHUuZGlzcG9zZSgpLGkpe2xldCBoPXRoaXMubGFuZ2l1bURvY3VtZW50cy5nZXREb2N1bWVudChpKTthKGg/LnVyaSl9ZWxzZSBhKHZvaWQgMCl9KSx1PW4ub25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQoKCk9PntsLmRpc3Bvc2UoKSx1LmRpc3Bvc2UoKSxzKEdjKX0pfSl9YXN5bmMgbm90aWZ5RG9jdW1lbnRQaGFzZShlLHIsbil7bGV0IGE9dGhpcy5kb2N1bWVudFBoYXNlTGlzdGVuZXJzLmdldChyKS5zbGljZSgpO2ZvcihsZXQgcyBvZiBhKXRyeXthd2FpdCBzKGUsbil9Y2F0Y2gobCl7aWYoIVZjKGwpKXRocm93IGx9fWFzeW5jIG5vdGlmeUJ1aWxkUGhhc2UoZSxyLG4pe2lmKGUubGVuZ3RoPT09MClyZXR1cm47bGV0IGE9dGhpcy5idWlsZFBoYXNlTGlzdGVuZXJzLmdldChyKS5zbGljZSgpO2ZvcihsZXQgcyBvZiBhKWF3YWl0IHdpKG4pLGF3YWl0IHMoZSxuKX1zaG91bGRWYWxpZGF0ZShlKXtyZXR1cm4hIXRoaXMuZ2V0QnVpbGRPcHRpb25zKGUpLnZhbGlkYXRpb259YXN5bmMgdmFsaWRhdGUoZSxyKXt2YXIgbixpO2xldCBhPXRoaXMuc2VydmljZVJlZ2lzdHJ5LmdldFNlcnZpY2VzKGUudXJpKS52YWxpZGF0aW9uLkRvY3VtZW50VmFsaWRhdG9yLHM9dGhpcy5nZXRCdWlsZE9wdGlvbnMoZSkudmFsaWRhdGlvbixsPXR5cGVvZiBzPT0ib2JqZWN0Ij9zOnZvaWQgMCx1PWF3YWl0IGEudmFsaWRhdGVEb2N1bWVudChlLGwscik7ZS5kaWFnbm9zdGljcz9lLmRpYWdub3N0aWNzLnB1c2goLi4udSk6ZS5kaWFnbm9zdGljcz11O2xldCBoPXRoaXMuYnVpbGRTdGF0ZS5nZXQoZS51cmkudG9TdHJpbmcoKSk7aWYoaCl7KG49aC5yZXN1bHQpIT09bnVsbCYmbiE9PXZvaWQgMHx8KGgucmVzdWx0PXt9KTtsZXQgZj0oaT1sPy5jYXRlZ29yaWVzKSE9PW51bGwmJmkhPT12b2lkIDA/aTpTMS5hbGw7aC5yZXN1bHQudmFsaWRhdGlvbkNoZWNrcz9oLnJlc3VsdC52YWxpZGF0aW9uQ2hlY2tzLnB1c2goLi4uZik6aC5yZXN1bHQudmFsaWRhdGlvbkNoZWNrcz1bLi4uZl19fWdldEJ1aWxkT3B0aW9ucyhlKXt2YXIgcixuO3JldHVybihuPShyPXRoaXMuYnVpbGRTdGF0ZS5nZXQoZS51cmkudG9TdHJpbmcoKSkpPT09bnVsbHx8cj09PXZvaWQgMD92b2lkIDA6ci5vcHRpb25zKSE9PW51bGwmJm4hPT12b2lkIDA/bjp7fX19fSk7dmFyIG9iLElJPU4oKCk9PnsidXNlIHN0cmljdCI7Y3MoKTtIRSgpO0tvKCk7R3MoKTtVYygpO29iPWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRJbmRleE1hbmFnZXIiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLnN5bWJvbEluZGV4PW5ldyBNYXAsdGhpcy5zeW1ib2xCeVR5cGVJbmRleD1uZXcgRHAsdGhpcy5yZWZlcmVuY2VJbmRleD1uZXcgTWFwLHRoaXMuZG9jdW1lbnRzPWUud29ya3NwYWNlLkxhbmdpdW1Eb2N1bWVudHMsdGhpcy5zZXJ2aWNlUmVnaXN0cnk9ZS5TZXJ2aWNlUmVnaXN0cnksdGhpcy5hc3RSZWZsZWN0aW9uPWUuQXN0UmVmbGVjdGlvbn1maW5kQWxsUmVmZXJlbmNlcyhlLHIpe2xldCBuPSRhKGUpLnVyaSxpPVtdO3JldHVybiB0aGlzLnJlZmVyZW5jZUluZGV4LmZvckVhY2goYT0+e2EuZm9yRWFjaChzPT57Z3MuZXF1YWxzKHMudGFyZ2V0VXJpLG4pJiZzLnRhcmdldFBhdGg9PT1yJiZpLnB1c2gocyl9KX0pLGVuKGkpfWFsbEVsZW1lbnRzKGUscil7bGV0IG49ZW4odGhpcy5zeW1ib2xJbmRleC5rZXlzKCkpO3JldHVybiByJiYobj1uLmZpbHRlcihpPT4hcnx8ci5oYXMoaSkpKSxuLm1hcChpPT50aGlzLmdldEZpbGVEZXNjcmlwdGlvbnMoaSxlKSkuZmxhdCgpfWdldEZpbGVEZXNjcmlwdGlvbnMoZSxyKXt2YXIgbjtyZXR1cm4gcj90aGlzLnN5bWJvbEJ5VHlwZUluZGV4LmdldChlLHIsKCk9Pnt2YXIgYTtyZXR1cm4oKGE9dGhpcy5zeW1ib2xJbmRleC5nZXQoZSkpIT09bnVsbCYmYSE9PXZvaWQgMD9hOltdKS5maWx0ZXIobD0+dGhpcy5hc3RSZWZsZWN0aW9uLmlzU3VidHlwZShsLnR5cGUscikpfSk6KG49dGhpcy5zeW1ib2xJbmRleC5nZXQoZSkpIT09bnVsbCYmbiE9PXZvaWQgMD9uOltdfXJlbW92ZShlKXtsZXQgcj1lLnRvU3RyaW5nKCk7dGhpcy5zeW1ib2xJbmRleC5kZWxldGUociksdGhpcy5zeW1ib2xCeVR5cGVJbmRleC5jbGVhcihyKSx0aGlzLnJlZmVyZW5jZUluZGV4LmRlbGV0ZShyKX1hc3luYyB1cGRhdGVDb250ZW50KGUscj15ci5DYW5jZWxsYXRpb25Ub2tlbi5Ob25lKXtsZXQgaT1hd2FpdCB0aGlzLnNlcnZpY2VSZWdpc3RyeS5nZXRTZXJ2aWNlcyhlLnVyaSkucmVmZXJlbmNlcy5TY29wZUNvbXB1dGF0aW9uLmNvbXB1dGVFeHBvcnRzKGUsciksYT1lLnVyaS50b1N0cmluZygpO3RoaXMuc3ltYm9sSW5kZXguc2V0KGEsaSksdGhpcy5zeW1ib2xCeVR5cGVJbmRleC5jbGVhcihhKX1hc3luYyB1cGRhdGVSZWZlcmVuY2VzKGUscj15ci5DYW5jZWxsYXRpb25Ub2tlbi5Ob25lKXtsZXQgaT1hd2FpdCB0aGlzLnNlcnZpY2VSZWdpc3RyeS5nZXRTZXJ2aWNlcyhlLnVyaSkud29ya3NwYWNlLlJlZmVyZW5jZURlc2NyaXB0aW9uUHJvdmlkZXIuY3JlYXRlRGVzY3JpcHRpb25zKGUscik7dGhpcy5yZWZlcmVuY2VJbmRleC5zZXQoZS51cmkudG9TdHJpbmcoKSxpKX1pc0FmZmVjdGVkKGUscil7bGV0IG49dGhpcy5yZWZlcmVuY2VJbmRleC5nZXQoZS51cmkudG9TdHJpbmcoKSk7cmV0dXJuIG4/bi5zb21lKGk9PiFpLmxvY2FsJiZyLmhhcyhpLnRhcmdldFVyaS50b1N0cmluZygpKSk6ITF9fX0pO3ZhciBsYixPST1OKCgpPT57InVzZSBzdHJpY3QiO0tvKCk7UW8oKTtVYygpO2xiPWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRXb3Jrc3BhY2VNYW5hZ2VyIil9Y29uc3RydWN0b3IoZSl7dGhpcy5pbml0aWFsQnVpbGRPcHRpb25zPXt9LHRoaXMuX3JlYWR5PW5ldyBwcyx0aGlzLnNlcnZpY2VSZWdpc3RyeT1lLlNlcnZpY2VSZWdpc3RyeSx0aGlzLmxhbmdpdW1Eb2N1bWVudHM9ZS53b3Jrc3BhY2UuTGFuZ2l1bURvY3VtZW50cyx0aGlzLmRvY3VtZW50QnVpbGRlcj1lLndvcmtzcGFjZS5Eb2N1bWVudEJ1aWxkZXIsdGhpcy5maWxlU3lzdGVtUHJvdmlkZXI9ZS53b3Jrc3BhY2UuRmlsZVN5c3RlbVByb3ZpZGVyLHRoaXMubXV0ZXg9ZS53b3Jrc3BhY2UuV29ya3NwYWNlTG9ja31nZXQgcmVhZHkoKXtyZXR1cm4gdGhpcy5fcmVhZHkucHJvbWlzZX1nZXQgd29ya3NwYWNlRm9sZGVycygpe3JldHVybiB0aGlzLmZvbGRlcnN9aW5pdGlhbGl6ZShlKXt2YXIgcjt0aGlzLmZvbGRlcnM9KHI9ZS53b3Jrc3BhY2VGb2xkZXJzKSE9PW51bGwmJnIhPT12b2lkIDA/cjp2b2lkIDB9aW5pdGlhbGl6ZWQoZSl7cmV0dXJuIHRoaXMubXV0ZXgud3JpdGUocj0+e3ZhciBuO3JldHVybiB0aGlzLmluaXRpYWxpemVXb3Jrc3BhY2UoKG49dGhpcy5mb2xkZXJzKSE9PW51bGwmJm4hPT12b2lkIDA/bjpbXSxyKX0pfWFzeW5jIGluaXRpYWxpemVXb3Jrc3BhY2UoZSxyPXlyLkNhbmNlbGxhdGlvblRva2VuLk5vbmUpe2xldCBuPWF3YWl0IHRoaXMucGVyZm9ybVN0YXJ0dXAoZSk7YXdhaXQgd2kociksYXdhaXQgdGhpcy5kb2N1bWVudEJ1aWxkZXIuYnVpbGQobix0aGlzLmluaXRpYWxCdWlsZE9wdGlvbnMscil9YXN5bmMgcGVyZm9ybVN0YXJ0dXAoZSl7bGV0IHI9dGhpcy5zZXJ2aWNlUmVnaXN0cnkuYWxsLmZsYXRNYXAoYT0+YS5MYW5ndWFnZU1ldGFEYXRhLmZpbGVFeHRlbnNpb25zKSxuPVtdLGk9byhhPT57bi5wdXNoKGEpLHRoaXMubGFuZ2l1bURvY3VtZW50cy5oYXNEb2N1bWVudChhLnVyaSl8fHRoaXMubGFuZ2l1bURvY3VtZW50cy5hZGREb2N1bWVudChhKX0sImNvbGxlY3RvciIpO3JldHVybiBhd2FpdCB0aGlzLmxvYWRBZGRpdGlvbmFsRG9jdW1lbnRzKGUsaSksYXdhaXQgUHJvbWlzZS5hbGwoZS5tYXAoYT0+W2EsdGhpcy5nZXRSb290Rm9sZGVyKGEpXSkubWFwKGFzeW5jIGE9PnRoaXMudHJhdmVyc2VGb2xkZXIoLi4uYSxyLGkpKSksdGhpcy5fcmVhZHkucmVzb2x2ZSgpLG59bG9hZEFkZGl0aW9uYWxEb2N1bWVudHMoZSxyKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCl9Z2V0Um9vdEZvbGRlcihlKXtyZXR1cm4gbXMucGFyc2UoZS51cmkpfWFzeW5jIHRyYXZlcnNlRm9sZGVyKGUscixuLGkpe2xldCBhPWF3YWl0IHRoaXMuZmlsZVN5c3RlbVByb3ZpZGVyLnJlYWREaXJlY3Rvcnkocik7YXdhaXQgUHJvbWlzZS5hbGwoYS5tYXAoYXN5bmMgcz0+e2lmKHRoaXMuaW5jbHVkZUVudHJ5KGUscyxuKSl7aWYocy5pc0RpcmVjdG9yeSlhd2FpdCB0aGlzLnRyYXZlcnNlRm9sZGVyKGUscy51cmksbixpKTtlbHNlIGlmKHMuaXNGaWxlKXtsZXQgbD1hd2FpdCB0aGlzLmxhbmdpdW1Eb2N1bWVudHMuZ2V0T3JDcmVhdGVEb2N1bWVudChzLnVyaSk7aShsKX19fSkpfWluY2x1ZGVFbnRyeShlLHIsbil7bGV0IGk9Z3MuYmFzZW5hbWUoci51cmkpO2lmKGkuc3RhcnRzV2l0aCgiLiIpKXJldHVybiExO2lmKHIuaXNEaXJlY3RvcnkpcmV0dXJuIGkhPT0ibm9kZV9tb2R1bGVzIiYmaSE9PSJvdXQiO2lmKHIuaXNGaWxlKXtsZXQgYT1ncy5leHRuYW1lKHIudXJpKTtyZXR1cm4gbi5pbmNsdWRlcyhhKX1yZXR1cm4hMX19fSk7ZnVuY3Rpb24gakUodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCkmJih0Lmxlbmd0aD09PTB8fCJuYW1lImluIHRbMF0pfWZ1bmN0aW9uIEJJKHQpe3JldHVybiB0JiYibW9kZXMiaW4gdCYmImRlZmF1bHRNb2RlImluIHR9ZnVuY3Rpb24gUEkodCl7cmV0dXJuIWpFKHQpJiYhQkkodCl9dmFyIGNiLFhFLFJwLEtFPU4oKCk9PnsidXNlIHN0cmljdCI7bWYoKTtjYj1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZhdWx0TGV4ZXJFcnJvck1lc3NhZ2VQcm92aWRlciIpfWJ1aWxkVW5leHBlY3RlZENoYXJhY3RlcnNNZXNzYWdlKGUscixuLGksYSl7cmV0dXJuIEtnLmJ1aWxkVW5leHBlY3RlZENoYXJhY3RlcnNNZXNzYWdlKGUscixuLGksYSl9YnVpbGRVbmFibGVUb1BvcExleGVyTW9kZU1lc3NhZ2UoZSl7cmV0dXJuIEtnLmJ1aWxkVW5hYmxlVG9Qb3BMZXhlck1vZGVNZXNzYWdlKGUpfX0sWEU9e21vZGU6ImZ1bGwifSxScD1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZhdWx0TGV4ZXIiKX1jb25zdHJ1Y3RvcihlKXt0aGlzLmVycm9yTWVzc2FnZVByb3ZpZGVyPWUucGFyc2VyLkxleGVyRXJyb3JNZXNzYWdlUHJvdmlkZXIsdGhpcy50b2tlbkJ1aWxkZXI9ZS5wYXJzZXIuVG9rZW5CdWlsZGVyO2xldCByPXRoaXMudG9rZW5CdWlsZGVyLmJ1aWxkVG9rZW5zKGUuR3JhbW1hcix7Y2FzZUluc2Vuc2l0aXZlOmUuTGFuZ3VhZ2VNZXRhRGF0YS5jYXNlSW5zZW5zaXRpdmV9KTt0aGlzLnRva2VuVHlwZXM9dGhpcy50b1Rva2VuVHlwZURpY3Rpb25hcnkocik7bGV0IG49UEkocik/T2JqZWN0LnZhbHVlcyhyKTpyLGk9ZS5MYW5ndWFnZU1ldGFEYXRhLm1vZGU9PT0icHJvZHVjdGlvbiI7dGhpcy5jaGV2cm90YWluTGV4ZXI9bmV3IEtuKG4se3Bvc2l0aW9uVHJhY2tpbmc6ImZ1bGwiLHNraXBWYWxpZGF0aW9uczppLGVycm9yTWVzc2FnZVByb3ZpZGVyOnRoaXMuZXJyb3JNZXNzYWdlUHJvdmlkZXJ9KX1nZXQgZGVmaW5pdGlvbigpe3JldHVybiB0aGlzLnRva2VuVHlwZXN9dG9rZW5pemUoZSxyPVhFKXt2YXIgbixpLGE7bGV0IHM9dGhpcy5jaGV2cm90YWluTGV4ZXIudG9rZW5pemUoZSk7cmV0dXJue3Rva2VuczpzLnRva2VucyxlcnJvcnM6cy5lcnJvcnMsaGlkZGVuOihuPXMuZ3JvdXBzLmhpZGRlbikhPT1udWxsJiZuIT09dm9pZCAwP246W10scmVwb3J0OihhPShpPXRoaXMudG9rZW5CdWlsZGVyKS5mbHVzaExleGluZ1JlcG9ydCk9PT1udWxsfHxhPT09dm9pZCAwP3ZvaWQgMDphLmNhbGwoaSxlKX19dG9Ub2tlblR5cGVEaWN0aW9uYXJ5KGUpe2lmKFBJKGUpKXJldHVybiBlO2xldCByPUJJKGUpP09iamVjdC52YWx1ZXMoZS5tb2RlcykuZmxhdCgpOmUsbj17fTtyZXR1cm4gci5mb3JFYWNoKGk9Pm5baS5uYW1lXT1pKSxufX07byhqRSwiaXNUb2tlblR5cGVBcnJheSIpO28oQkksImlzSU11bHRpTW9kZUxleGVyRGVmaW5pdGlvbiIpO28oUEksImlzVG9rZW5UeXBlRGljdGlvbmFyeSIpfSk7ZnVuY3Rpb24gekkodCxlLHIpe2xldCBuLGk7dHlwZW9mIHQ9PSJzdHJpbmciPyhpPWUsbj1yKTooaT10LnJhbmdlLnN0YXJ0LG49ZSksaXx8KGk9anIuY3JlYXRlKDAsMCkpO2xldCBhPWR1ZSh0KSxzPVZJKG4pLGw9WCRlKHtsaW5lczphLHBvc2l0aW9uOmksb3B0aW9uczpzfSk7cmV0dXJuIEokZSh7aW5kZXg6MCx0b2tlbnM6bCxwb3NpdGlvbjppfSl9ZnVuY3Rpb24gR0kodCxlKXtsZXQgcj1WSShlKSxuPWR1ZSh0KTtpZihuLmxlbmd0aD09PTApcmV0dXJuITE7bGV0IGk9blswXSxhPW5bbi5sZW5ndGgtMV0scz1yLnN0YXJ0LGw9ci5lbmQ7cmV0dXJuISFzPy5leGVjKGkpJiYhIWw/LmV4ZWMoYSl9ZnVuY3Rpb24gZHVlKHQpe2xldCBlPSIiO3JldHVybiB0eXBlb2YgdD09InN0cmluZyI/ZT10OmU9dC50ZXh0LGUuc3BsaXQoUE4pfWZ1bmN0aW9uIFgkZSh0KXt2YXIgZSxyLG47bGV0IGk9W10sYT10LnBvc2l0aW9uLmxpbmUscz10LnBvc2l0aW9uLmNoYXJhY3Rlcjtmb3IobGV0IGw9MDtsPHQubGluZXMubGVuZ3RoO2wrKyl7bGV0IHU9bD09PTAsaD1sPT09dC5saW5lcy5sZW5ndGgtMSxmPXQubGluZXNbbF0sZD0wO2lmKHUmJnQub3B0aW9ucy5zdGFydCl7bGV0IG09KGU9dC5vcHRpb25zLnN0YXJ0KT09PW51bGx8fGU9PT12b2lkIDA/dm9pZCAwOmUuZXhlYyhmKTttJiYoZD1tLmluZGV4K21bMF0ubGVuZ3RoKX1lbHNle2xldCBtPShyPXQub3B0aW9ucy5saW5lKT09PW51bGx8fHI9PT12b2lkIDA/dm9pZCAwOnIuZXhlYyhmKTttJiYoZD1tLmluZGV4K21bMF0ubGVuZ3RoKX1pZihoKXtsZXQgbT0obj10Lm9wdGlvbnMuZW5kKT09PW51bGx8fG49PT12b2lkIDA/dm9pZCAwOm4uZXhlYyhmKTttJiYoZj1mLnN1YnN0cmluZygwLG0uaW5kZXgpKX1pZihmPWYuc3Vic3RyaW5nKDAsWiRlKGYpKSwkSShmLGQpPj1mLmxlbmd0aCl7aWYoaS5sZW5ndGg+MCl7bGV0IG09anIuY3JlYXRlKGEscyk7aS5wdXNoKHt0eXBlOiJicmVhayIsY29udGVudDoiIixyYW5nZTpCci5jcmVhdGUobSxtKX0pfX1lbHNle2h1ZS5sYXN0SW5kZXg9ZDtsZXQgbT1odWUuZXhlYyhmKTtpZihtKXtsZXQgZz1tWzBdLHk9bVsxXSx2PWpyLmNyZWF0ZShhLHMrZCkseD1qci5jcmVhdGUoYSxzK2QrZy5sZW5ndGgpO2kucHVzaCh7dHlwZToidGFnIixjb250ZW50OnkscmFuZ2U6QnIuY3JlYXRlKHYseCl9KSxkKz1nLmxlbmd0aCxkPSRJKGYsZCl9aWYoZDxmLmxlbmd0aCl7bGV0IGc9Zi5zdWJzdHJpbmcoZCkseT1BcnJheS5mcm9tKGcubWF0Y2hBbGwoWSRlKSk7aS5wdXNoKC4uLmokZSh5LGcsYSxzK2QpKX19YSsrLHM9MH1yZXR1cm4gaS5sZW5ndGg+MCYmaVtpLmxlbmd0aC0xXS50eXBlPT09ImJyZWFrIj9pLnNsaWNlKDAsLTEpOml9ZnVuY3Rpb24gaiRlKHQsZSxyLG4pe2xldCBpPVtdO2lmKHQubGVuZ3RoPT09MCl7bGV0IGE9anIuY3JlYXRlKHIsbikscz1qci5jcmVhdGUocixuK2UubGVuZ3RoKTtpLnB1c2goe3R5cGU6InRleHQiLGNvbnRlbnQ6ZSxyYW5nZTpCci5jcmVhdGUoYSxzKX0pfWVsc2V7bGV0IGE9MDtmb3IobGV0IGwgb2YgdCl7bGV0IHU9bC5pbmRleCxoPWUuc3Vic3RyaW5nKGEsdSk7aC5sZW5ndGg+MCYmaS5wdXNoKHt0eXBlOiJ0ZXh0Iixjb250ZW50OmUuc3Vic3RyaW5nKGEsdSkscmFuZ2U6QnIuY3JlYXRlKGpyLmNyZWF0ZShyLGErbiksanIuY3JlYXRlKHIsdStuKSl9KTtsZXQgZj1oLmxlbmd0aCsxLGQ9bFsxXTtpZihpLnB1c2goe3R5cGU6ImlubGluZS10YWciLGNvbnRlbnQ6ZCxyYW5nZTpCci5jcmVhdGUoanIuY3JlYXRlKHIsYStmK24pLGpyLmNyZWF0ZShyLGErZitkLmxlbmd0aCtuKSl9KSxmKz1kLmxlbmd0aCxsLmxlbmd0aD09PTQpe2YrPWxbMl0ubGVuZ3RoO2xldCBwPWxbM107aS5wdXNoKHt0eXBlOiJ0ZXh0Iixjb250ZW50OnAscmFuZ2U6QnIuY3JlYXRlKGpyLmNyZWF0ZShyLGErZituKSxqci5jcmVhdGUocixhK2YrcC5sZW5ndGgrbikpfSl9ZWxzZSBpLnB1c2goe3R5cGU6InRleHQiLGNvbnRlbnQ6IiIscmFuZ2U6QnIuY3JlYXRlKGpyLmNyZWF0ZShyLGErZituKSxqci5jcmVhdGUocixhK2YrbikpfSk7YT11K2xbMF0ubGVuZ3RofWxldCBzPWUuc3Vic3RyaW5nKGEpO3MubGVuZ3RoPjAmJmkucHVzaCh7dHlwZToidGV4dCIsY29udGVudDpzLHJhbmdlOkJyLmNyZWF0ZShqci5jcmVhdGUocixhK24pLGpyLmNyZWF0ZShyLGErbitzLmxlbmd0aCkpfSl9cmV0dXJuIGl9ZnVuY3Rpb24gJEkodCxlKXtsZXQgcj10LnN1YnN0cmluZyhlKS5tYXRjaChLJGUpO3JldHVybiByP2Urci5pbmRleDp0Lmxlbmd0aH1mdW5jdGlvbiBaJGUodCl7bGV0IGU9dC5tYXRjaChRJGUpO2lmKGUmJnR5cGVvZiBlLmluZGV4PT0ibnVtYmVyIilyZXR1cm4gZS5pbmRleH1mdW5jdGlvbiBKJGUodCl7dmFyIGUscixuLGk7bGV0IGE9anIuY3JlYXRlKHQucG9zaXRpb24ubGluZSx0LnBvc2l0aW9uLmNoYXJhY3Rlcik7aWYodC50b2tlbnMubGVuZ3RoPT09MClyZXR1cm4gbmV3IFFFKFtdLEJyLmNyZWF0ZShhLGEpKTtsZXQgcz1bXTtmb3IoO3QuaW5kZXg8dC50b2tlbnMubGVuZ3RoOyl7bGV0IGg9ZXplKHQsc1tzLmxlbmd0aC0xXSk7aCYmcy5wdXNoKGgpfWxldCBsPShyPShlPXNbMF0pPT09bnVsbHx8ZT09PXZvaWQgMD92b2lkIDA6ZS5yYW5nZS5zdGFydCkhPT1udWxsJiZyIT09dm9pZCAwP3I6YSx1PShpPShuPXNbcy5sZW5ndGgtMV0pPT09bnVsbHx8bj09PXZvaWQgMD92b2lkIDA6bi5yYW5nZS5lbmQpIT09bnVsbCYmaSE9PXZvaWQgMD9pOmE7cmV0dXJuIG5ldyBRRShzLEJyLmNyZWF0ZShsLHUpKX1mdW5jdGlvbiBlemUodCxlKXtsZXQgcj10LnRva2Vuc1t0LmluZGV4XTtpZihyLnR5cGU9PT0idGFnIilyZXR1cm4gbXVlKHQsITEpO2lmKHIudHlwZT09PSJ0ZXh0Inx8ci50eXBlPT09ImlubGluZS10YWciKXJldHVybiBwdWUodCk7dHplKHIsZSksdC5pbmRleCsrfWZ1bmN0aW9uIHR6ZSh0LGUpe2lmKGUpe2xldCByPW5ldyBaRSgiIix0LnJhbmdlKTsiaW5saW5lcyJpbiBlP2UuaW5saW5lcy5wdXNoKHIpOmUuY29udGVudC5pbmxpbmVzLnB1c2gocil9fWZ1bmN0aW9uIHB1ZSh0KXtsZXQgZT10LnRva2Vuc1t0LmluZGV4XSxyPWUsbj1lLGk9W107Zm9yKDtlJiZlLnR5cGUhPT0iYnJlYWsiJiZlLnR5cGUhPT0idGFnIjspaS5wdXNoKHJ6ZSh0KSksbj1lLGU9dC50b2tlbnNbdC5pbmRleF07cmV0dXJuIG5ldyBoYihpLEJyLmNyZWF0ZShyLnJhbmdlLnN0YXJ0LG4ucmFuZ2UuZW5kKSl9ZnVuY3Rpb24gcnplKHQpe3JldHVybiB0LnRva2Vuc1t0LmluZGV4XS50eXBlPT09ImlubGluZS10YWciP211ZSh0LCEwKTpndWUodCl9ZnVuY3Rpb24gbXVlKHQsZSl7bGV0IHI9dC50b2tlbnNbdC5pbmRleCsrXSxuPXIuY29udGVudC5zdWJzdHJpbmcoMSksaT10LnRva2Vuc1t0LmluZGV4XTtpZihpPy50eXBlPT09InRleHQiKWlmKGUpe2xldCBhPWd1ZSh0KTtyZXR1cm4gbmV3IHViKG4sbmV3IGhiKFthXSxhLnJhbmdlKSxlLEJyLmNyZWF0ZShyLnJhbmdlLnN0YXJ0LGEucmFuZ2UuZW5kKSl9ZWxzZXtsZXQgYT1wdWUodCk7cmV0dXJuIG5ldyB1YihuLGEsZSxCci5jcmVhdGUoci5yYW5nZS5zdGFydCxhLnJhbmdlLmVuZCkpfWVsc2V7bGV0IGE9ci5yYW5nZTtyZXR1cm4gbmV3IHViKG4sbmV3IGhiKFtdLGEpLGUsYSl9fWZ1bmN0aW9uIGd1ZSh0KXtsZXQgZT10LnRva2Vuc1t0LmluZGV4KytdO3JldHVybiBuZXcgWkUoZS5jb250ZW50LGUucmFuZ2UpfWZ1bmN0aW9uIFZJKHQpe2lmKCF0KXJldHVybiBWSSh7c3RhcnQ6Ii8qKiIsZW5kOiIqLyIsbGluZToiKiJ9KTtsZXR7c3RhcnQ6ZSxlbmQ6cixsaW5lOm59PXQ7cmV0dXJue3N0YXJ0OkZJKGUsITApLGVuZDpGSShyLCExKSxsaW5lOkZJKG4sITApfX1mdW5jdGlvbiBGSSh0LGUpe2lmKHR5cGVvZiB0PT0ic3RyaW5nInx8dHlwZW9mIHQ9PSJvYmplY3QiKXtsZXQgcj10eXBlb2YgdD09InN0cmluZyI/bXAodCk6dC5zb3VyY2U7cmV0dXJuIGU/bmV3IFJlZ0V4cChgXlxccyoke3J9YCk6bmV3IFJlZ0V4cChgXFxzKiR7cn1cXHMqJGApfWVsc2UgcmV0dXJuIHR9ZnVuY3Rpb24gbnplKHQsZSxyKXt2YXIgbixpO2lmKHQ9PT0ibGlua3BsYWluInx8dD09PSJsaW5rY29kZSJ8fHQ9PT0ibGluayIpe2xldCBhPWUuaW5kZXhPZigiICIpLHM9ZTtpZihhPjApe2xldCB1PSRJKGUsYSk7cz1lLnN1YnN0cmluZyh1KSxlPWUuc3Vic3RyaW5nKDAsYSl9cmV0dXJuKHQ9PT0ibGlua2NvZGUifHx0PT09ImxpbmsiJiZyLmxpbms9PT0iY29kZSIpJiYocz1gXGAke3N9XGBgKSwoaT0obj1yLnJlbmRlckxpbmspPT09bnVsbHx8bj09PXZvaWQgMD92b2lkIDA6bi5jYWxsKHIsZSxzKSkhPT1udWxsJiZpIT09dm9pZCAwP2k6aXplKGUscyl9fWZ1bmN0aW9uIGl6ZSh0LGUpe3RyeXtyZXR1cm4gbXMucGFyc2UodCwhMCksYFske2V9XSgke3R9KWB9Y2F0Y2h7cmV0dXJuIHR9fWZ1bmN0aW9uIGZ1ZSh0KXtyZXR1cm4gdC5lbmRzV2l0aChgCmApP2AKYDpgCgpgfXZhciBodWUsWSRlLEskZSxRJGUsUUUsdWIsaGIsWkUsVUk9TigoKT0+eyJ1c2Ugc3RyaWN0IjtaTSgpOyRnKCk7VWMoKTtvKHpJLCJwYXJzZUpTRG9jIik7byhHSSwiaXNKU0RvYyIpO28oZHVlLCJnZXRMaW5lcyIpO2h1ZT0vXHMqKEAoW1xwe0x9XVtccHtMfVxwe059XSopPykvdXksWSRlPS9ceyhAW1xwe0x9XVtccHtMfVxwe059XSopKFxzKikoW15cclxufV0rKT9cfS9ndTtvKFgkZSwidG9rZW5pemUiKTtvKGokZSwiYnVpbGRJbmxpbmVUb2tlbnMiKTtLJGU9L1xTLyxRJGU9L1xzKiQvO28oJEksInNraXBXaGl0ZXNwYWNlIik7byhaJGUsImxhc3RDaGFyYWN0ZXIiKTtvKEokZSwicGFyc2VKU0RvY0NvbW1lbnQiKTtvKGV6ZSwicGFyc2VKU0RvY0VsZW1lbnQiKTtvKHR6ZSwiYXBwZW5kRW1wdHlMaW5lIik7byhwdWUsInBhcnNlSlNEb2NUZXh0Iik7byhyemUsInBhcnNlSlNEb2NJbmxpbmUiKTtvKG11ZSwicGFyc2VKU0RvY1RhZyIpO28oZ3VlLCJwYXJzZUpTRG9jTGluZSIpO28oVkksIm5vcm1hbGl6ZU9wdGlvbnMiKTtvKEZJLCJub3JtYWxpemVPcHRpb24iKTtRRT1jbGFzc3tzdGF0aWN7byh0aGlzLCJKU0RvY0NvbW1lbnRJbXBsIil9Y29uc3RydWN0b3IoZSxyKXt0aGlzLmVsZW1lbnRzPWUsdGhpcy5yYW5nZT1yfWdldFRhZyhlKXtyZXR1cm4gdGhpcy5nZXRBbGxUYWdzKCkuZmluZChyPT5yLm5hbWU9PT1lKX1nZXRUYWdzKGUpe3JldHVybiB0aGlzLmdldEFsbFRhZ3MoKS5maWx0ZXIocj0+ci5uYW1lPT09ZSl9Z2V0QWxsVGFncygpe3JldHVybiB0aGlzLmVsZW1lbnRzLmZpbHRlcihlPT4ibmFtZSJpbiBlKX10b1N0cmluZygpe2xldCBlPSIiO2ZvcihsZXQgciBvZiB0aGlzLmVsZW1lbnRzKWlmKGUubGVuZ3RoPT09MCllPXIudG9TdHJpbmcoKTtlbHNle2xldCBuPXIudG9TdHJpbmcoKTtlKz1mdWUoZSkrbn1yZXR1cm4gZS50cmltKCl9dG9NYXJrZG93bihlKXtsZXQgcj0iIjtmb3IobGV0IG4gb2YgdGhpcy5lbGVtZW50cylpZihyLmxlbmd0aD09PTApcj1uLnRvTWFya2Rvd24oZSk7ZWxzZXtsZXQgaT1uLnRvTWFya2Rvd24oZSk7cis9ZnVlKHIpK2l9cmV0dXJuIHIudHJpbSgpfX0sdWI9Y2xhc3N7c3RhdGlje28odGhpcywiSlNEb2NUYWdJbXBsIil9Y29uc3RydWN0b3IoZSxyLG4saSl7dGhpcy5uYW1lPWUsdGhpcy5jb250ZW50PXIsdGhpcy5pbmxpbmU9bix0aGlzLnJhbmdlPWl9dG9TdHJpbmcoKXtsZXQgZT1gQCR7dGhpcy5uYW1lfWAscj10aGlzLmNvbnRlbnQudG9TdHJpbmcoKTtyZXR1cm4gdGhpcy5jb250ZW50LmlubGluZXMubGVuZ3RoPT09MT9lPWAke2V9ICR7cn1gOnRoaXMuY29udGVudC5pbmxpbmVzLmxlbmd0aD4xJiYoZT1gJHtlfQoke3J9YCksdGhpcy5pbmxpbmU/YHske2V9fWA6ZX10b01hcmtkb3duKGUpe3ZhciByLG47cmV0dXJuKG49KHI9ZT8ucmVuZGVyVGFnKT09PW51bGx8fHI9PT12b2lkIDA/dm9pZCAwOnIuY2FsbChlLHRoaXMpKSE9PW51bGwmJm4hPT12b2lkIDA/bjp0aGlzLnRvTWFya2Rvd25EZWZhdWx0KGUpfXRvTWFya2Rvd25EZWZhdWx0KGUpe2xldCByPXRoaXMuY29udGVudC50b01hcmtkb3duKGUpO2lmKHRoaXMuaW5saW5lKXtsZXQgYT1uemUodGhpcy5uYW1lLHIsZT8/e30pO2lmKHR5cGVvZiBhPT0ic3RyaW5nIilyZXR1cm4gYX1sZXQgbj0iIjtlPy50YWc9PT0iaXRhbGljInx8ZT8udGFnPT09dm9pZCAwP249IioiOmU/LnRhZz09PSJib2xkIj9uPSIqKiI6ZT8udGFnPT09ImJvbGQtaXRhbGljIiYmKG49IioqKiIpO2xldCBpPWAke259QCR7dGhpcy5uYW1lfSR7bn1gO3JldHVybiB0aGlzLmNvbnRlbnQuaW5saW5lcy5sZW5ndGg9PT0xP2k9YCR7aX0gXHUyMDE0ICR7cn1gOnRoaXMuY29udGVudC5pbmxpbmVzLmxlbmd0aD4xJiYoaT1gJHtpfQoke3J9YCksdGhpcy5pbmxpbmU/YHske2l9fWA6aX19O28obnplLCJyZW5kZXJJbmxpbmVUYWciKTtvKGl6ZSwicmVuZGVyTGlua0RlZmF1bHQiKTtoYj1jbGFzc3tzdGF0aWN7byh0aGlzLCJKU0RvY1RleHRJbXBsIil9Y29uc3RydWN0b3IoZSxyKXt0aGlzLmlubGluZXM9ZSx0aGlzLnJhbmdlPXJ9dG9TdHJpbmcoKXtsZXQgZT0iIjtmb3IobGV0IHI9MDtyPHRoaXMuaW5saW5lcy5sZW5ndGg7cisrKXtsZXQgbj10aGlzLmlubGluZXNbcl0saT10aGlzLmlubGluZXNbcisxXTtlKz1uLnRvU3RyaW5nKCksaSYmaS5yYW5nZS5zdGFydC5saW5lPm4ucmFuZ2Uuc3RhcnQubGluZSYmKGUrPWAKYCl9cmV0dXJuIGV9dG9NYXJrZG93bihlKXtsZXQgcj0iIjtmb3IobGV0IG49MDtuPHRoaXMuaW5saW5lcy5sZW5ndGg7bisrKXtsZXQgaT10aGlzLmlubGluZXNbbl0sYT10aGlzLmlubGluZXNbbisxXTtyKz1pLnRvTWFya2Rvd24oZSksYSYmYS5yYW5nZS5zdGFydC5saW5lPmkucmFuZ2Uuc3RhcnQubGluZSYmKHIrPWAKYCl9cmV0dXJuIHJ9fSxaRT1jbGFzc3tzdGF0aWN7byh0aGlzLCJKU0RvY0xpbmVJbXBsIil9Y29uc3RydWN0b3IoZSxyKXt0aGlzLnRleHQ9ZSx0aGlzLnJhbmdlPXJ9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy50ZXh0fXRvTWFya2Rvd24oKXtyZXR1cm4gdGhpcy50ZXh0fX07byhmdWUsImZpbGxOZXdsaW5lcyIpfSk7dmFyIGZiLEhJPU4oKCk9PnsidXNlIHN0cmljdCI7Y3MoKTtVSSgpO2ZiPWNsYXNze3N0YXRpY3tvKHRoaXMsIkpTRG9jRG9jdW1lbnRhdGlvblByb3ZpZGVyIil9Y29uc3RydWN0b3IoZSl7dGhpcy5pbmRleE1hbmFnZXI9ZS5zaGFyZWQud29ya3NwYWNlLkluZGV4TWFuYWdlcix0aGlzLmNvbW1lbnRQcm92aWRlcj1lLmRvY3VtZW50YXRpb24uQ29tbWVudFByb3ZpZGVyfWdldERvY3VtZW50YXRpb24oZSl7bGV0IHI9dGhpcy5jb21tZW50UHJvdmlkZXIuZ2V0Q29tbWVudChlKTtpZihyJiZHSShyKSlyZXR1cm4gekkocikudG9NYXJrZG93bih7cmVuZGVyTGluazpvKChpLGEpPT50aGlzLmRvY3VtZW50YXRpb25MaW5rUmVuZGVyZXIoZSxpLGEpLCJyZW5kZXJMaW5rIikscmVuZGVyVGFnOm8oaT0+dGhpcy5kb2N1bWVudGF0aW9uVGFnUmVuZGVyZXIoZSxpKSwicmVuZGVyVGFnIil9KX1kb2N1bWVudGF0aW9uTGlua1JlbmRlcmVyKGUscixuKXt2YXIgaTtsZXQgYT0oaT10aGlzLmZpbmROYW1lSW5QcmVjb21wdXRlZFNjb3BlcyhlLHIpKSE9PW51bGwmJmkhPT12b2lkIDA/aTp0aGlzLmZpbmROYW1lSW5HbG9iYWxTY29wZShlLHIpO2lmKGEmJmEubmFtZVNlZ21lbnQpe2xldCBzPWEubmFtZVNlZ21lbnQucmFuZ2Uuc3RhcnQubGluZSsxLGw9YS5uYW1lU2VnbWVudC5yYW5nZS5zdGFydC5jaGFyYWN0ZXIrMSx1PWEuZG9jdW1lbnRVcmkud2l0aCh7ZnJhZ21lbnQ6YEwke3N9LCR7bH1gfSk7cmV0dXJuYFske259XSgke3UudG9TdHJpbmcoKX0pYH1lbHNlIHJldHVybn1kb2N1bWVudGF0aW9uVGFnUmVuZGVyZXIoZSxyKXt9ZmluZE5hbWVJblByZWNvbXB1dGVkU2NvcGVzKGUscil7bGV0IGk9JGEoZSkucHJlY29tcHV0ZWRTY29wZXM7aWYoIWkpcmV0dXJuO2xldCBhPWU7ZG97bGV0IGw9aS5nZXQoYSkuZmluZCh1PT51Lm5hbWU9PT1yKTtpZihsKXJldHVybiBsO2E9YS4kY29udGFpbmVyfXdoaWxlKGEpfWZpbmROYW1lSW5HbG9iYWxTY29wZShlLHIpe3JldHVybiB0aGlzLmluZGV4TWFuYWdlci5hbGxFbGVtZW50cygpLmZpbmQoaT0+aS5uYW1lPT09cil9fX0pO3ZhciBkYixXST1OKCgpPT57InVzZSBzdHJpY3QiO1dFKCk7T2woKTtkYj1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZhdWx0Q29tbWVudFByb3ZpZGVyIil9Y29uc3RydWN0b3IoZSl7dGhpcy5ncmFtbWFyQ29uZmlnPSgpPT5lLnBhcnNlci5HcmFtbWFyQ29uZmlnfWdldENvbW1lbnQoZSl7dmFyIHI7cmV0dXJuIENJKGUpP2UuJGNvbW1lbnQ6KHI9dU4oZS4kY3N0Tm9kZSx0aGlzLmdyYW1tYXJDb25maWcoKS5tdWx0aWxpbmVDb21tZW50UnVsZXMpKT09PW51bGx8fHI9PT12b2lkIDA/dm9pZCAwOnIudGV4dH19fSk7dmFyIHBiLHFJLFlJLFhJPU4oKCk9PnsidXNlIHN0cmljdCI7UW8oKTtZRSgpO3BiPWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRBc3luY1BhcnNlciIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuc3luY1BhcnNlcj1lLnBhcnNlci5MYW5naXVtUGFyc2VyfXBhcnNlKGUscil7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLnN5bmNQYXJzZXIucGFyc2UoZSkpfX0scUk9Y2xhc3N7c3RhdGlje28odGhpcywiQWJzdHJhY3RUaHJlYWRlZEFzeW5jUGFyc2VyIil9Y29uc3RydWN0b3IoZSl7dGhpcy50aHJlYWRDb3VudD04LHRoaXMudGVybWluYXRpb25EZWxheT0yMDAsdGhpcy53b3JrZXJQb29sPVtdLHRoaXMucXVldWU9W10sdGhpcy5oeWRyYXRvcj1lLnNlcmlhbGl6ZXIuSHlkcmF0b3J9aW5pdGlhbGl6ZVdvcmtlcnMoKXtmb3IoO3RoaXMud29ya2VyUG9vbC5sZW5ndGg8dGhpcy50aHJlYWRDb3VudDspe2xldCBlPXRoaXMuY3JlYXRlV29ya2VyKCk7ZS5vblJlYWR5KCgpPT57aWYodGhpcy5xdWV1ZS5sZW5ndGg+MCl7bGV0IHI9dGhpcy5xdWV1ZS5zaGlmdCgpO3ImJihlLmxvY2soKSxyLnJlc29sdmUoZSkpfX0pLHRoaXMud29ya2VyUG9vbC5wdXNoKGUpfX1hc3luYyBwYXJzZShlLHIpe2xldCBuPWF3YWl0IHRoaXMuYWNxdWlyZVBhcnNlcldvcmtlcihyKSxpPW5ldyBwcyxhLHM9ci5vbkNhbmNlbGxhdGlvblJlcXVlc3RlZCgoKT0+e2E9c2V0VGltZW91dCgoKT0+e3RoaXMudGVybWluYXRlV29ya2VyKG4pfSx0aGlzLnRlcm1pbmF0aW9uRGVsYXkpfSk7cmV0dXJuIG4ucGFyc2UoZSkudGhlbihsPT57bGV0IHU9dGhpcy5oeWRyYXRvci5oeWRyYXRlKGwpO2kucmVzb2x2ZSh1KX0pLmNhdGNoKGw9PntpLnJlamVjdChsKX0pLmZpbmFsbHkoKCk9PntzLmRpc3Bvc2UoKSxjbGVhclRpbWVvdXQoYSl9KSxpLnByb21pc2V9dGVybWluYXRlV29ya2VyKGUpe2UudGVybWluYXRlKCk7bGV0IHI9dGhpcy53b3JrZXJQb29sLmluZGV4T2YoZSk7cj49MCYmdGhpcy53b3JrZXJQb29sLnNwbGljZShyLDEpfWFzeW5jIGFjcXVpcmVQYXJzZXJXb3JrZXIoZSl7dGhpcy5pbml0aWFsaXplV29ya2VycygpO2ZvcihsZXQgbiBvZiB0aGlzLndvcmtlclBvb2wpaWYobi5yZWFkeSlyZXR1cm4gbi5sb2NrKCksbjtsZXQgcj1uZXcgcHM7cmV0dXJuIGUub25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQoKCk9PntsZXQgbj10aGlzLnF1ZXVlLmluZGV4T2Yocik7bj49MCYmdGhpcy5xdWV1ZS5zcGxpY2UobiwxKSxyLnJlamVjdChHYyl9KSx0aGlzLnF1ZXVlLnB1c2gociksci5wcm9taXNlfX0sWUk9Y2xhc3N7c3RhdGlje28odGhpcywiUGFyc2VyV29ya2VyIil9Z2V0IHJlYWR5KCl7cmV0dXJuIHRoaXMuX3JlYWR5fWdldCBvblJlYWR5KCl7cmV0dXJuIHRoaXMub25SZWFkeUVtaXR0ZXIuZXZlbnR9Y29uc3RydWN0b3IoZSxyLG4saSl7dGhpcy5vblJlYWR5RW1pdHRlcj1uZXcgWm4uRW1pdHRlcix0aGlzLmRlZmVycmVkPW5ldyBwcyx0aGlzLl9yZWFkeT0hMCx0aGlzLl9wYXJzaW5nPSExLHRoaXMuc2VuZE1lc3NhZ2U9ZSx0aGlzLl90ZXJtaW5hdGU9aSxyKGE9PntsZXQgcz1hO3RoaXMuZGVmZXJyZWQucmVzb2x2ZShzKSx0aGlzLnVubG9jaygpfSksbihhPT57dGhpcy5kZWZlcnJlZC5yZWplY3QoYSksdGhpcy51bmxvY2soKX0pfXRlcm1pbmF0ZSgpe3RoaXMuZGVmZXJyZWQucmVqZWN0KEdjKSx0aGlzLl90ZXJtaW5hdGUoKX1sb2NrKCl7dGhpcy5fcmVhZHk9ITF9dW5sb2NrKCl7dGhpcy5fcGFyc2luZz0hMSx0aGlzLl9yZWFkeT0hMCx0aGlzLm9uUmVhZHlFbWl0dGVyLmZpcmUoKX1wYXJzZShlKXtpZih0aGlzLl9wYXJzaW5nKXRocm93IG5ldyBFcnJvcigiUGFyc2VyIHdvcmtlciBpcyBidXN5Iik7cmV0dXJuIHRoaXMuX3BhcnNpbmc9ITAsdGhpcy5kZWZlcnJlZD1uZXcgcHMsdGhpcy5zZW5kTWVzc2FnZShlKSx0aGlzLmRlZmVycmVkLnByb21pc2V9fX0pO3ZhciBtYixqST1OKCgpPT57InVzZSBzdHJpY3QiO0tvKCk7UW8oKTttYj1jbGFzc3tzdGF0aWN7byh0aGlzLCJEZWZhdWx0V29ya3NwYWNlTG9jayIpfWNvbnN0cnVjdG9yKCl7dGhpcy5wcmV2aW91c1Rva2VuU291cmNlPW5ldyB5ci5DYW5jZWxsYXRpb25Ub2tlblNvdXJjZSx0aGlzLndyaXRlUXVldWU9W10sdGhpcy5yZWFkUXVldWU9W10sdGhpcy5kb25lPSEwfXdyaXRlKGUpe3RoaXMuY2FuY2VsV3JpdGUoKTtsZXQgcj1HRSgpO3JldHVybiB0aGlzLnByZXZpb3VzVG9rZW5Tb3VyY2U9cix0aGlzLmVucXVldWUodGhpcy53cml0ZVF1ZXVlLGUsci50b2tlbil9cmVhZChlKXtyZXR1cm4gdGhpcy5lbnF1ZXVlKHRoaXMucmVhZFF1ZXVlLGUpfWVucXVldWUoZSxyLG49eXIuQ2FuY2VsbGF0aW9uVG9rZW4uTm9uZSl7bGV0IGk9bmV3IHBzLGE9e2FjdGlvbjpyLGRlZmVycmVkOmksY2FuY2VsbGF0aW9uVG9rZW46bn07cmV0dXJuIGUucHVzaChhKSx0aGlzLnBlcmZvcm1OZXh0T3BlcmF0aW9uKCksaS5wcm9taXNlfWFzeW5jIHBlcmZvcm1OZXh0T3BlcmF0aW9uKCl7aWYoIXRoaXMuZG9uZSlyZXR1cm47bGV0IGU9W107aWYodGhpcy53cml0ZVF1ZXVlLmxlbmd0aD4wKWUucHVzaCh0aGlzLndyaXRlUXVldWUuc2hpZnQoKSk7ZWxzZSBpZih0aGlzLnJlYWRRdWV1ZS5sZW5ndGg+MCllLnB1c2goLi4udGhpcy5yZWFkUXVldWUuc3BsaWNlKDAsdGhpcy5yZWFkUXVldWUubGVuZ3RoKSk7ZWxzZSByZXR1cm47dGhpcy5kb25lPSExLGF3YWl0IFByb21pc2UuYWxsKGUubWFwKGFzeW5jKHthY3Rpb246cixkZWZlcnJlZDpuLGNhbmNlbGxhdGlvblRva2VuOml9KT0+e3RyeXtsZXQgYT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5yKGkpKTtuLnJlc29sdmUoYSl9Y2F0Y2goYSl7VmMoYSk/bi5yZXNvbHZlKHZvaWQgMCk6bi5yZWplY3QoYSl9fSkpLHRoaXMuZG9uZT0hMCx0aGlzLnBlcmZvcm1OZXh0T3BlcmF0aW9uKCl9Y2FuY2VsV3JpdGUoKXt0aGlzLnByZXZpb3VzVG9rZW5Tb3VyY2UuY2FuY2VsKCl9fX0pO3ZhciBnYixLST1OKCgpPT57InVzZSBzdHJpY3QiO1JFKCk7UGMoKTtJbCgpO2NzKCk7VDEoKTtPbCgpO2diPWNsYXNze3N0YXRpY3tvKHRoaXMsIkRlZmF1bHRIeWRyYXRvciIpfWNvbnN0cnVjdG9yKGUpe3RoaXMuZ3JhbW1hckVsZW1lbnRJZE1hcD1uZXcgX3AsdGhpcy50b2tlblR5cGVJZE1hcD1uZXcgX3AsdGhpcy5ncmFtbWFyPWUuR3JhbW1hcix0aGlzLmxleGVyPWUucGFyc2VyLkxleGVyLHRoaXMubGlua2VyPWUucmVmZXJlbmNlcy5MaW5rZXJ9ZGVoeWRyYXRlKGUpe3JldHVybntsZXhlckVycm9yczplLmxleGVyRXJyb3JzLGxleGVyUmVwb3J0OmUubGV4ZXJSZXBvcnQ/dGhpcy5kZWh5ZHJhdGVMZXhlclJlcG9ydChlLmxleGVyUmVwb3J0KTp2b2lkIDAscGFyc2VyRXJyb3JzOmUucGFyc2VyRXJyb3JzLm1hcChyPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30scikse21lc3NhZ2U6ci5tZXNzYWdlfSkpLHZhbHVlOnRoaXMuZGVoeWRyYXRlQXN0Tm9kZShlLnZhbHVlLHRoaXMuY3JlYXRlRGVoeXJhdGlvbkNvbnRleHQoZS52YWx1ZSkpfX1kZWh5ZHJhdGVMZXhlclJlcG9ydChlKXtyZXR1cm4gZX1jcmVhdGVEZWh5cmF0aW9uQ29udGV4dChlKXtsZXQgcj1uZXcgTWFwLG49bmV3IE1hcDtmb3IobGV0IGkgb2Ygam8oZSkpci5zZXQoaSx7fSk7aWYoZS4kY3N0Tm9kZSlmb3IobGV0IGkgb2Ygc3AoZS4kY3N0Tm9kZSkpbi5zZXQoaSx7fSk7cmV0dXJue2FzdE5vZGVzOnIsY3N0Tm9kZXM6bn19ZGVoeWRyYXRlQXN0Tm9kZShlLHIpe2xldCBuPXIuYXN0Tm9kZXMuZ2V0KGUpO24uJHR5cGU9ZS4kdHlwZSxuLiRjb250YWluZXJJbmRleD1lLiRjb250YWluZXJJbmRleCxuLiRjb250YWluZXJQcm9wZXJ0eT1lLiRjb250YWluZXJQcm9wZXJ0eSxlLiRjc3ROb2RlIT09dm9pZCAwJiYobi4kY3N0Tm9kZT10aGlzLmRlaHlkcmF0ZUNzdE5vZGUoZS4kY3N0Tm9kZSxyKSk7Zm9yKGxldFtpLGFdb2YgT2JqZWN0LmVudHJpZXMoZSkpaWYoIWkuc3RhcnRzV2l0aCgiJCIpKWlmKEFycmF5LmlzQXJyYXkoYSkpe2xldCBzPVtdO25baV09cztmb3IobGV0IGwgb2YgYSlzaShsKT9zLnB1c2godGhpcy5kZWh5ZHJhdGVBc3ROb2RlKGwscikpOnlhKGwpP3MucHVzaCh0aGlzLmRlaHlkcmF0ZVJlZmVyZW5jZShsLHIpKTpzLnB1c2gobCl9ZWxzZSBzaShhKT9uW2ldPXRoaXMuZGVoeWRyYXRlQXN0Tm9kZShhLHIpOnlhKGEpP25baV09dGhpcy5kZWh5ZHJhdGVSZWZlcmVuY2UoYSxyKTphIT09dm9pZCAwJiYobltpXT1hKTtyZXR1cm4gbn1kZWh5ZHJhdGVSZWZlcmVuY2UoZSxyKXtsZXQgbj17fTtyZXR1cm4gbi4kcmVmVGV4dD1lLiRyZWZUZXh0LGUuJHJlZk5vZGUmJihuLiRyZWZOb2RlPXIuY3N0Tm9kZXMuZ2V0KGUuJHJlZk5vZGUpKSxufWRlaHlkcmF0ZUNzdE5vZGUoZSxyKXtsZXQgbj1yLmNzdE5vZGVzLmdldChlKTtyZXR1cm4gVTIoZSk/bi5mdWxsVGV4dD1lLmZ1bGxUZXh0Om4uZ3JhbW1hclNvdXJjZT10aGlzLmdldEdyYW1tYXJFbGVtZW50SWQoZS5ncmFtbWFyU291cmNlKSxuLmhpZGRlbj1lLmhpZGRlbixuLmFzdE5vZGU9ci5hc3ROb2Rlcy5nZXQoZS5hc3ROb2RlKSxNbChlKT9uLmNvbnRlbnQ9ZS5jb250ZW50Lm1hcChpPT50aGlzLmRlaHlkcmF0ZUNzdE5vZGUoaSxyKSk6aGYoZSkmJihuLnRva2VuVHlwZT1lLnRva2VuVHlwZS5uYW1lLG4ub2Zmc2V0PWUub2Zmc2V0LG4ubGVuZ3RoPWUubGVuZ3RoLG4uc3RhcnRMaW5lPWUucmFuZ2Uuc3RhcnQubGluZSxuLnN0YXJ0Q29sdW1uPWUucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyLG4uZW5kTGluZT1lLnJhbmdlLmVuZC5saW5lLG4uZW5kQ29sdW1uPWUucmFuZ2UuZW5kLmNoYXJhY3Rlciksbn1oeWRyYXRlKGUpe2xldCByPWUudmFsdWUsbj10aGlzLmNyZWF0ZUh5ZHJhdGlvbkNvbnRleHQocik7cmV0dXJuIiRjc3ROb2RlImluIHImJnRoaXMuaHlkcmF0ZUNzdE5vZGUoci4kY3N0Tm9kZSxuKSx7bGV4ZXJFcnJvcnM6ZS5sZXhlckVycm9ycyxsZXhlclJlcG9ydDplLmxleGVyUmVwb3J0LHBhcnNlckVycm9yczplLnBhcnNlckVycm9ycyx2YWx1ZTp0aGlzLmh5ZHJhdGVBc3ROb2RlKHIsbil9fWNyZWF0ZUh5ZHJhdGlvbkNvbnRleHQoZSl7bGV0IHI9bmV3IE1hcCxuPW5ldyBNYXA7Zm9yKGxldCBhIG9mIGpvKGUpKXIuc2V0KGEse30pO2xldCBpO2lmKGUuJGNzdE5vZGUpZm9yKGxldCBhIG9mIHNwKGUuJGNzdE5vZGUpKXtsZXQgczsiZnVsbFRleHQiaW4gYT8ocz1uZXcgcDEoYS5mdWxsVGV4dCksaT1zKToiY29udGVudCJpbiBhP3M9bmV3IFNwOiJ0b2tlblR5cGUiaW4gYSYmKHM9dGhpcy5oeWRyYXRlQ3N0TGVhZk5vZGUoYSkpLHMmJihuLnNldChhLHMpLHMucm9vdD1pKX1yZXR1cm57YXN0Tm9kZXM6cixjc3ROb2RlczpufX1oeWRyYXRlQXN0Tm9kZShlLHIpe2xldCBuPXIuYXN0Tm9kZXMuZ2V0KGUpO24uJHR5cGU9ZS4kdHlwZSxuLiRjb250YWluZXJJbmRleD1lLiRjb250YWluZXJJbmRleCxuLiRjb250YWluZXJQcm9wZXJ0eT1lLiRjb250YWluZXJQcm9wZXJ0eSxlLiRjc3ROb2RlJiYobi4kY3N0Tm9kZT1yLmNzdE5vZGVzLmdldChlLiRjc3ROb2RlKSk7Zm9yKGxldFtpLGFdb2YgT2JqZWN0LmVudHJpZXMoZSkpaWYoIWkuc3RhcnRzV2l0aCgiJCIpKWlmKEFycmF5LmlzQXJyYXkoYSkpe2xldCBzPVtdO25baV09cztmb3IobGV0IGwgb2YgYSlzaShsKT9zLnB1c2godGhpcy5zZXRQYXJlbnQodGhpcy5oeWRyYXRlQXN0Tm9kZShsLHIpLG4pKTp5YShsKT9zLnB1c2godGhpcy5oeWRyYXRlUmVmZXJlbmNlKGwsbixpLHIpKTpzLnB1c2gobCl9ZWxzZSBzaShhKT9uW2ldPXRoaXMuc2V0UGFyZW50KHRoaXMuaHlkcmF0ZUFzdE5vZGUoYSxyKSxuKTp5YShhKT9uW2ldPXRoaXMuaHlkcmF0ZVJlZmVyZW5jZShhLG4saSxyKTphIT09dm9pZCAwJiYobltpXT1hKTtyZXR1cm4gbn1zZXRQYXJlbnQoZSxyKXtyZXR1cm4gZS4kY29udGFpbmVyPXIsZX1oeWRyYXRlUmVmZXJlbmNlKGUscixuLGkpe3JldHVybiB0aGlzLmxpbmtlci5idWlsZFJlZmVyZW5jZShyLG4saS5jc3ROb2Rlcy5nZXQoZS4kcmVmTm9kZSksZS4kcmVmVGV4dCl9aHlkcmF0ZUNzdE5vZGUoZSxyLG49MCl7bGV0IGk9ci5jc3ROb2Rlcy5nZXQoZSk7aWYodHlwZW9mIGUuZ3JhbW1hclNvdXJjZT09Im51bWJlciImJihpLmdyYW1tYXJTb3VyY2U9dGhpcy5nZXRHcmFtbWFyRWxlbWVudChlLmdyYW1tYXJTb3VyY2UpKSxpLmFzdE5vZGU9ci5hc3ROb2Rlcy5nZXQoZS5hc3ROb2RlKSxNbChpKSlmb3IobGV0IGEgb2YgZS5jb250ZW50KXtsZXQgcz10aGlzLmh5ZHJhdGVDc3ROb2RlKGEscixuKyspO2kuY29udGVudC5wdXNoKHMpfXJldHVybiBpfWh5ZHJhdGVDc3RMZWFmTm9kZShlKXtsZXQgcj10aGlzLmdldFRva2VuVHlwZShlLnRva2VuVHlwZSksbj1lLm9mZnNldCxpPWUubGVuZ3RoLGE9ZS5zdGFydExpbmUscz1lLnN0YXJ0Q29sdW1uLGw9ZS5lbmRMaW5lLHU9ZS5lbmRDb2x1bW4saD1lLmhpZGRlbjtyZXR1cm4gbmV3IEVwKG4saSx7c3RhcnQ6e2xpbmU6YSxjaGFyYWN0ZXI6c30sZW5kOntsaW5lOmwsY2hhcmFjdGVyOnV9fSxyLGgpfWdldFRva2VuVHlwZShlKXtyZXR1cm4gdGhpcy5sZXhlci5kZWZpbml0aW9uW2VdfWdldEdyYW1tYXJFbGVtZW50SWQoZSl7aWYoZSlyZXR1cm4gdGhpcy5ncmFtbWFyRWxlbWVudElkTWFwLnNpemU9PT0wJiZ0aGlzLmNyZWF0ZUdyYW1tYXJFbGVtZW50SWRNYXAoKSx0aGlzLmdyYW1tYXJFbGVtZW50SWRNYXAuZ2V0KGUpfWdldEdyYW1tYXJFbGVtZW50KGUpe3JldHVybiB0aGlzLmdyYW1tYXJFbGVtZW50SWRNYXAuc2l6ZT09PTAmJnRoaXMuY3JlYXRlR3JhbW1hckVsZW1lbnRJZE1hcCgpLHRoaXMuZ3JhbW1hckVsZW1lbnRJZE1hcC5nZXRLZXkoZSl9Y3JlYXRlR3JhbW1hckVsZW1lbnRJZE1hcCgpe2xldCBlPTA7Zm9yKGxldCByIG9mIGpvKHRoaXMuZ3JhbW1hcikpUTIocikmJnRoaXMuZ3JhbW1hckVsZW1lbnRJZE1hcC5zZXQocixlKyspfX19KTtmdW5jdGlvbiB2YSh0KXtyZXR1cm57ZG9jdW1lbnRhdGlvbjp7Q29tbWVudFByb3ZpZGVyOm8oZT0+bmV3IGRiKGUpLCJDb21tZW50UHJvdmlkZXIiKSxEb2N1bWVudGF0aW9uUHJvdmlkZXI6byhlPT5uZXcgZmIoZSksIkRvY3VtZW50YXRpb25Qcm92aWRlciIpfSxwYXJzZXI6e0FzeW5jUGFyc2VyOm8oZT0+bmV3IHBiKGUpLCJBc3luY1BhcnNlciIpLEdyYW1tYXJDb25maWc6byhlPT5RTihlKSwiR3JhbW1hckNvbmZpZyIpLExhbmdpdW1QYXJzZXI6byhlPT5hSShlKSwiTGFuZ2l1bVBhcnNlciIpLENvbXBsZXRpb25QYXJzZXI6byhlPT5uSShlKSwiQ29tcGxldGlvblBhcnNlciIpLFZhbHVlQ29udmVydGVyOm8oKCk9Pm5ldyBBcCwiVmFsdWVDb252ZXJ0ZXIiKSxUb2tlbkJ1aWxkZXI6bygoKT0+bmV3IGp1LCJUb2tlbkJ1aWxkZXIiKSxMZXhlcjpvKGU9Pm5ldyBScChlKSwiTGV4ZXIiKSxQYXJzZXJFcnJvck1lc3NhZ2VQcm92aWRlcjpvKCgpPT5uZXcgbTEsIlBhcnNlckVycm9yTWVzc2FnZVByb3ZpZGVyIiksTGV4ZXJFcnJvck1lc3NhZ2VQcm92aWRlcjpvKCgpPT5uZXcgY2IsIkxleGVyRXJyb3JNZXNzYWdlUHJvdmlkZXIiKX0sd29ya3NwYWNlOntBc3ROb2RlTG9jYXRvcjpvKCgpPT5uZXcgaWIsIkFzdE5vZGVMb2NhdG9yIiksQXN0Tm9kZURlc2NyaXB0aW9uUHJvdmlkZXI6byhlPT5uZXcgcmIoZSksIkFzdE5vZGVEZXNjcmlwdGlvblByb3ZpZGVyIiksUmVmZXJlbmNlRGVzY3JpcHRpb25Qcm92aWRlcjpvKGU9Pm5ldyBuYihlKSwiUmVmZXJlbmNlRGVzY3JpcHRpb25Qcm92aWRlciIpfSxyZWZlcmVuY2VzOntMaW5rZXI6byhlPT5uZXcgSHgoZSksIkxpbmtlciIpLE5hbWVQcm92aWRlcjpvKCgpPT5uZXcgV3gsIk5hbWVQcm92aWRlciIpLFNjb3BlUHJvdmlkZXI6byhlPT5uZXcgS3goZSksIlNjb3BlUHJvdmlkZXIiKSxTY29wZUNvbXB1dGF0aW9uOm8oZT0+bmV3IFl4KGUpLCJTY29wZUNvbXB1dGF0aW9uIiksUmVmZXJlbmNlczpvKGU9Pm5ldyBxeChlKSwiUmVmZXJlbmNlcyIpfSxzZXJpYWxpemVyOntIeWRyYXRvcjpvKGU9Pm5ldyBnYihlKSwiSHlkcmF0b3IiKSxKc29uU2VyaWFsaXplcjpvKGU9Pm5ldyBReChlKSwiSnNvblNlcmlhbGl6ZXIiKX0sdmFsaWRhdGlvbjp7RG9jdW1lbnRWYWxpZGF0b3I6byhlPT5uZXcgdGIoZSksIkRvY3VtZW50VmFsaWRhdG9yIiksVmFsaWRhdGlvblJlZ2lzdHJ5Om8oZT0+bmV3IEp4KGUpLCJWYWxpZGF0aW9uUmVnaXN0cnkiKX0sc2hhcmVkOm8oKCk9PnQuc2hhcmVkLCJzaGFyZWQiKX19ZnVuY3Rpb24geGEodCl7cmV0dXJue1NlcnZpY2VSZWdpc3RyeTpvKGU9Pm5ldyBaeChlKSwiU2VydmljZVJlZ2lzdHJ5Iiksd29ya3NwYWNlOntMYW5naXVtRG9jdW1lbnRzOm8oZT0+bmV3IFV4KGUpLCJMYW5naXVtRG9jdW1lbnRzIiksTGFuZ2l1bURvY3VtZW50RmFjdG9yeTpvKGU9Pm5ldyBWeChlKSwiTGFuZ2l1bURvY3VtZW50RmFjdG9yeSIpLERvY3VtZW50QnVpbGRlcjpvKGU9Pm5ldyBzYihlKSwiRG9jdW1lbnRCdWlsZGVyIiksSW5kZXhNYW5hZ2VyOm8oZT0+bmV3IG9iKGUpLCJJbmRleE1hbmFnZXIiKSxXb3Jrc3BhY2VNYW5hZ2VyOm8oZT0+bmV3IGxiKGUpLCJXb3Jrc3BhY2VNYW5hZ2VyIiksRmlsZVN5c3RlbVByb3ZpZGVyOm8oZT0+dC5maWxlU3lzdGVtUHJvdmlkZXIoZSksIkZpbGVTeXN0ZW1Qcm92aWRlciIpLFdvcmtzcGFjZUxvY2s6bygoKT0+bmV3IG1iLCJXb3Jrc3BhY2VMb2NrIiksQ29uZmlndXJhdGlvblByb3ZpZGVyOm8oZT0+bmV3IGFiKGUpLCJDb25maWd1cmF0aW9uUHJvdmlkZXIiKX19fXZhciBRST1OKCgpPT57InVzZSBzdHJpY3QiO1pOKCk7aUkoKTtzSSgpO1BFKCk7b0koKTtiSSgpO1RJKCk7d0koKTtrSSgpO1NJKCk7V0UoKTtBSSgpO19JKCk7ZWIoKTtESSgpO0xJKCk7UkkoKTtNSSgpO2IxKCk7SUkoKTtPSSgpO0tFKCk7SEkoKTtXSSgpO3p4KCk7WEkoKTtqSSgpO0tJKCk7byh2YSwiY3JlYXRlRGVmYXVsdENvcmVNb2R1bGUiKTtvKHhhLCJjcmVhdGVEZWZhdWx0U2hhcmVkQ29yZU1vZHVsZSIpfSk7ZnVuY3Rpb24gR24odCxlLHIsbixpLGEscyxsLHUpe2xldCBoPVt0LGUscixuLGksYSxzLGwsdV0ucmVkdWNlKEpFLHt9KTtyZXR1cm4gVHVlKGgpfWZ1bmN0aW9uIGJ1ZSh0KXtpZih0JiZ0W3h1ZV0pZm9yKGxldCBlIG9mIE9iamVjdC52YWx1ZXModCkpYnVlKGUpO3JldHVybiB0fWZ1bmN0aW9uIFR1ZSh0LGUpe2xldCByPW5ldyBQcm94eSh7fSx7ZGVsZXRlUHJvcGVydHk6bygoKT0+ITEsImRlbGV0ZVByb3BlcnR5Iiksc2V0Om8oKCk9Pnt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXQgcHJvcGVydHkgb24gaW5qZWN0ZWQgc2VydmljZSBjb250YWluZXIiKX0sInNldCIpLGdldDpvKChuLGkpPT5pPT09eHVlPyEwOnZ1ZShuLGksdCxlfHxyKSwiZ2V0IiksZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOm8oKG4saSk9Pih2dWUobixpLHQsZXx8ciksT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGkpKSwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiksaGFzOm8oKG4saSk9PmkgaW4gdCwiaGFzIiksb3duS2V5czpvKCgpPT5bLi4uT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModCldLCJvd25LZXlzIil9KTtyZXR1cm4gcn1mdW5jdGlvbiB2dWUodCxlLHIsbil7aWYoZSBpbiB0KXtpZih0W2VdaW5zdGFuY2VvZiBFcnJvcil0aHJvdyBuZXcgRXJyb3IoIkNvbnN0cnVjdGlvbiBmYWlsdXJlLiBQbGVhc2UgbWFrZSBzdXJlIHRoYXQgeW91ciBkZXBlbmRlbmNpZXMgYXJlIGNvbnN0cnVjdGFibGUuIix7Y2F1c2U6dFtlXX0pO2lmKHRbZV09PT15dWUpdGhyb3cgbmV3IEVycm9yKCdDeWNsZSBkZXRlY3RlZC4gUGxlYXNlIG1ha2UgIicrU3RyaW5nKGUpKyciIGxhenkuIFZpc2l0IGh0dHBzOi8vbGFuZ2l1bS5vcmcvZG9jcy9yZWZlcmVuY2UvY29uZmlndXJhdGlvbi1zZXJ2aWNlcy8jcmVzb2x2aW5nLWN5Y2xpYy1kZXBlbmRlbmNpZXMnKTtyZXR1cm4gdFtlXX1lbHNlIGlmKGUgaW4gcil7bGV0IGk9cltlXTt0W2VdPXl1ZTt0cnl7dFtlXT10eXBlb2YgaT09ImZ1bmN0aW9uIj9pKG4pOlR1ZShpLG4pfWNhdGNoKGEpe3Rocm93IHRbZV09YSBpbnN0YW5jZW9mIEVycm9yP2E6dm9pZCAwLGF9cmV0dXJuIHRbZV19ZWxzZSByZXR1cm59ZnVuY3Rpb24gSkUodCxlKXtpZihlKXtmb3IobGV0W3Isbl1vZiBPYmplY3QuZW50cmllcyhlKSlpZihuIT09dm9pZCAwKXtsZXQgaT10W3JdO2khPT1udWxsJiZuIT09bnVsbCYmdHlwZW9mIGk9PSJvYmplY3QiJiZ0eXBlb2Ygbj09Im9iamVjdCI/dFtyXT1KRShpLG4pOnRbcl09bn19cmV0dXJuIHR9dmFyIFpJLHh1ZSx5dWUsSkk9TigoKT0+eyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24odCl7dC5tZXJnZT0oZSxyKT0+SkUoSkUoe30sZSkscil9KShaSXx8KFpJPXt9KSk7byhHbiwiaW5qZWN0Iik7eHVlPVN5bWJvbCgiaXNQcm94eSIpO28oYnVlLCJlYWdlckxvYWQiKTtvKFR1ZSwiX2luamVjdCIpO3l1ZT1TeW1ib2woKTtvKHZ1ZSwiX3Jlc29sdmUiKTtvKEpFLCJfbWVyZ2UiKX0pO3ZhciB3dWU9TigoKT0+eyJ1c2Ugc3RyaWN0In0pO3ZhciBrdWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtXSSgpO0hJKCk7VUkoKX0pO3ZhciBFdWU9TigoKT0+eyJ1c2Ugc3RyaWN0In0pO3ZhciBTdWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtaTigpO0V1ZSgpfSk7dmFyIGVPLE5wLGVTLHRPLEN1ZT1OKCgpPT57InVzZSBzdHJpY3QiO21mKCk7UEUoKTtLRSgpO2VPPXtpbmRlbnRUb2tlbk5hbWU6IklOREVOVCIsZGVkZW50VG9rZW5OYW1lOiJERURFTlQiLHdoaXRlc3BhY2VUb2tlbk5hbWU6IldTIixpZ25vcmVJbmRlbnRhdGlvbkRlbGltaXRlcnM6W119OyhmdW5jdGlvbih0KXt0LlJFR1VMQVI9ImluZGVudGF0aW9uLXNlbnNpdGl2ZSIsdC5JR05PUkVfSU5ERU5UQVRJT049Imlnbm9yZS1pbmRlbnRhdGlvbiJ9KShOcHx8KE5wPXt9KSk7ZVM9Y2xhc3MgZXh0ZW5kcyBqdXtzdGF0aWN7byh0aGlzLCJJbmRlbnRhdGlvbkF3YXJlVG9rZW5CdWlsZGVyIil9Y29uc3RydWN0b3IoZT1lTyl7c3VwZXIoKSx0aGlzLmluZGVudGF0aW9uU3RhY2s9WzBdLHRoaXMud2hpdGVzcGFjZVJlZ0V4cD0vWyBcdF0rL3ksdGhpcy5vcHRpb25zPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlTyksZSksdGhpcy5pbmRlbnRUb2tlblR5cGU9ZGYoe25hbWU6dGhpcy5vcHRpb25zLmluZGVudFRva2VuTmFtZSxwYXR0ZXJuOnRoaXMuaW5kZW50TWF0Y2hlci5iaW5kKHRoaXMpLGxpbmVfYnJlYWtzOiExfSksdGhpcy5kZWRlbnRUb2tlblR5cGU9ZGYoe25hbWU6dGhpcy5vcHRpb25zLmRlZGVudFRva2VuTmFtZSxwYXR0ZXJuOnRoaXMuZGVkZW50TWF0Y2hlci5iaW5kKHRoaXMpLGxpbmVfYnJlYWtzOiExfSl9YnVpbGRUb2tlbnMoZSxyKXtsZXQgbj1zdXBlci5idWlsZFRva2VucyhlLHIpO2lmKCFqRShuKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdG9rZW5zIGJ1aWx0IGJ5IGRlZmF1bHQgYnVpbGRlciIpO2xldHtpbmRlbnRUb2tlbk5hbWU6aSxkZWRlbnRUb2tlbk5hbWU6YSx3aGl0ZXNwYWNlVG9rZW5OYW1lOnMsaWdub3JlSW5kZW50YXRpb25EZWxpbWl0ZXJzOmx9PXRoaXMub3B0aW9ucyx1LGgsZixkPVtdO2ZvcihsZXQgcCBvZiBuKXtmb3IobGV0W20sZ11vZiBsKXAubmFtZT09PW0/cC5QVVNIX01PREU9TnAuSUdOT1JFX0lOREVOVEFUSU9OOnAubmFtZT09PWcmJihwLlBPUF9NT0RFPSEwKTtwLm5hbWU9PT1hP3U9cDpwLm5hbWU9PT1pP2g9cDpwLm5hbWU9PT1zP2Y9cDpkLnB1c2gocCl9aWYoIXV8fCFofHwhZil0aHJvdyBuZXcgRXJyb3IoIlNvbWUgaW5kZW50YXRpb24vd2hpdGVzcGFjZSB0b2tlbnMgbm90IGZvdW5kISIpO3JldHVybiBsLmxlbmd0aD4wP3ttb2Rlczp7W05wLlJFR1VMQVJdOlt1LGgsLi4uZCxmXSxbTnAuSUdOT1JFX0lOREVOVEFUSU9OXTpbLi4uZCxmXX0sZGVmYXVsdE1vZGU6TnAuUkVHVUxBUn06W3UsaCxmLC4uLmRdfWZsdXNoTGV4aW5nUmVwb3J0KGUpe2xldCByPXN1cGVyLmZsdXNoTGV4aW5nUmVwb3J0KGUpO3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30scikse3JlbWFpbmluZ0RlZGVudHM6dGhpcy5mbHVzaFJlbWFpbmluZ0RlZGVudHMoZSl9KX1pc1N0YXJ0T2ZMaW5lKGUscil7cmV0dXJuIHI9PT0wfHxgXHIKYC5pbmNsdWRlcyhlW3ItMV0pfW1hdGNoV2hpdGVzcGFjZShlLHIsbixpKXt2YXIgYTt0aGlzLndoaXRlc3BhY2VSZWdFeHAubGFzdEluZGV4PXI7bGV0IHM9dGhpcy53aGl0ZXNwYWNlUmVnRXhwLmV4ZWMoZSk7cmV0dXJue2N1cnJJbmRlbnRMZXZlbDooYT1zPy5bMF0ubGVuZ3RoKSE9PW51bGwmJmEhPT12b2lkIDA/YTowLHByZXZJbmRlbnRMZXZlbDp0aGlzLmluZGVudGF0aW9uU3RhY2suYXQoLTEpLG1hdGNoOnN9fWNyZWF0ZUluZGVudGF0aW9uVG9rZW5JbnN0YW5jZShlLHIsbixpKXtsZXQgYT10aGlzLmdldExpbmVOdW1iZXIocixpKTtyZXR1cm4gV3UoZSxuLGksaStuLmxlbmd0aCxhLGEsMSxuLmxlbmd0aCl9Z2V0TGluZU51bWJlcihlLHIpe3JldHVybiBlLnN1YnN0cmluZygwLHIpLnNwbGl0KC9cclxufFxyfFxuLykubGVuZ3RofWluZGVudE1hdGNoZXIoZSxyLG4saSl7aWYoIXRoaXMuaXNTdGFydE9mTGluZShlLHIpKXJldHVybiBudWxsO2xldHtjdXJySW5kZW50TGV2ZWw6YSxwcmV2SW5kZW50TGV2ZWw6cyxtYXRjaDpsfT10aGlzLm1hdGNoV2hpdGVzcGFjZShlLHIsbixpKTtyZXR1cm4gYTw9cz9udWxsOih0aGlzLmluZGVudGF0aW9uU3RhY2sucHVzaChhKSxsKX1kZWRlbnRNYXRjaGVyKGUscixuLGkpe3ZhciBhLHMsbCx1O2lmKCF0aGlzLmlzU3RhcnRPZkxpbmUoZSxyKSlyZXR1cm4gbnVsbDtsZXR7Y3VyckluZGVudExldmVsOmgscHJldkluZGVudExldmVsOmYsbWF0Y2g6ZH09dGhpcy5tYXRjaFdoaXRlc3BhY2UoZSxyLG4saSk7aWYoaD49ZilyZXR1cm4gbnVsbDtsZXQgcD10aGlzLmluZGVudGF0aW9uU3RhY2subGFzdEluZGV4T2YoaCk7aWYocD09PS0xKXJldHVybiB0aGlzLmRpYWdub3N0aWNzLnB1c2goe3NldmVyaXR5OiJlcnJvciIsbWVzc2FnZTpgSW52YWxpZCBkZWRlbnQgbGV2ZWwgJHtofSBhdCBvZmZzZXQ6ICR7cn0uIEN1cnJlbnQgaW5kZW50YXRpb24gc3RhY2s6ICR7dGhpcy5pbmRlbnRhdGlvblN0YWNrfWAsb2Zmc2V0OnIsbGVuZ3RoOihzPShhPWQ/LlswXSk9PT1udWxsfHxhPT09dm9pZCAwP3ZvaWQgMDphLmxlbmd0aCkhPT1udWxsJiZzIT09dm9pZCAwP3M6MCxsaW5lOnRoaXMuZ2V0TGluZU51bWJlcihlLHIpLGNvbHVtbjoxfSksbnVsbDtsZXQgbT10aGlzLmluZGVudGF0aW9uU3RhY2subGVuZ3RoLXAtMSxnPSh1PShsPWUuc3Vic3RyaW5nKDAscikubWF0Y2goL1tcclxuXSskLykpPT09bnVsbHx8bD09PXZvaWQgMD92b2lkIDA6bFswXS5sZW5ndGgpIT09bnVsbCYmdSE9PXZvaWQgMD91OjE7Zm9yKGxldCB5PTA7eTxtO3krKyl7bGV0IHY9dGhpcy5jcmVhdGVJbmRlbnRhdGlvblRva2VuSW5zdGFuY2UodGhpcy5kZWRlbnRUb2tlblR5cGUsZSwiIixyLShnLTEpKTtuLnB1c2godiksdGhpcy5pbmRlbnRhdGlvblN0YWNrLnBvcCgpfXJldHVybiBudWxsfWJ1aWxkVGVybWluYWxUb2tlbihlKXtsZXQgcj1zdXBlci5idWlsZFRlcm1pbmFsVG9rZW4oZSkse2luZGVudFRva2VuTmFtZTpuLGRlZGVudFRva2VuTmFtZTppLHdoaXRlc3BhY2VUb2tlbk5hbWU6YX09dGhpcy5vcHRpb25zO3JldHVybiByLm5hbWU9PT1uP3RoaXMuaW5kZW50VG9rZW5UeXBlOnIubmFtZT09PWk/dGhpcy5kZWRlbnRUb2tlblR5cGU6ci5uYW1lPT09YT9kZih7bmFtZTphLHBhdHRlcm46dGhpcy53aGl0ZXNwYWNlUmVnRXhwLGdyb3VwOktuLlNLSVBQRUR9KTpyfWZsdXNoUmVtYWluaW5nRGVkZW50cyhlKXtsZXQgcj1bXTtmb3IoO3RoaXMuaW5kZW50YXRpb25TdGFjay5sZW5ndGg+MTspci5wdXNoKHRoaXMuY3JlYXRlSW5kZW50YXRpb25Ub2tlbkluc3RhbmNlKHRoaXMuZGVkZW50VG9rZW5UeXBlLGUsIiIsZS5sZW5ndGgpKSx0aGlzLmluZGVudGF0aW9uU3RhY2sucG9wKCk7cmV0dXJuIHRoaXMuaW5kZW50YXRpb25TdGFjaz1bMF0scn19LHRPPWNsYXNzIGV4dGVuZHMgUnB7c3RhdGlje28odGhpcywiSW5kZW50YXRpb25Bd2FyZUxleGVyIil9Y29uc3RydWN0b3IoZSl7aWYoc3VwZXIoZSksZS5wYXJzZXIuVG9rZW5CdWlsZGVyIGluc3RhbmNlb2YgZVMpdGhpcy5pbmRlbnRhdGlvblRva2VuQnVpbGRlcj1lLnBhcnNlci5Ub2tlbkJ1aWxkZXI7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIkluZGVudGF0aW9uQXdhcmVMZXhlciByZXF1aXJlcyBhbiBhY2NvbXBhbnlpbmcgSW5kZW50YXRpb25Bd2FyZVRva2VuQnVpbGRlciIpfXRva2VuaXplKGUscj1YRSl7bGV0IG49c3VwZXIudG9rZW5pemUoZSksaT1uLnJlcG9ydDtyPy5tb2RlPT09ImZ1bGwiJiZuLnRva2Vucy5wdXNoKC4uLmkucmVtYWluaW5nRGVkZW50cyksaS5yZW1haW5pbmdEZWRlbnRzPVtdO2xldHtpbmRlbnRUb2tlblR5cGU6YSxkZWRlbnRUb2tlblR5cGU6c309dGhpcy5pbmRlbnRhdGlvblRva2VuQnVpbGRlcixsPWEudG9rZW5UeXBlSWR4LHU9cy50b2tlblR5cGVJZHgsaD1bXSxmPW4udG9rZW5zLmxlbmd0aC0xO2ZvcihsZXQgZD0wO2Q8ZjtkKyspe2xldCBwPW4udG9rZW5zW2RdLG09bi50b2tlbnNbZCsxXTtpZihwLnRva2VuVHlwZUlkeD09PWwmJm0udG9rZW5UeXBlSWR4PT09dSl7ZCsrO2NvbnRpbnVlfWgucHVzaChwKX1yZXR1cm4gZj49MCYmaC5wdXNoKG4udG9rZW5zW2ZdKSxuLnRva2Vucz1oLG59fX0pO3ZhciBBdWU9TigoKT0+eyJ1c2Ugc3RyaWN0In0pO3ZhciBfdWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtYSSgpO2lJKCk7UkUoKTtDdWUoKTtzSSgpO3p4KCk7S0UoKTtPRSgpO0F1ZSgpO1BFKCk7b0koKX0pO3ZhciBEdWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtiSSgpO1RJKCk7d0koKTtFSSgpO2tJKCk7U0koKX0pO3ZhciBMdWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtLSSgpO1dFKCl9KTt2YXIgdFMsYmEsck89TigoKT0+eyJ1c2Ugc3RyaWN0Ijt0Uz1jbGFzc3tzdGF0aWN7byh0aGlzLCJFbXB0eUZpbGVTeXN0ZW1Qcm92aWRlciIpfXJlYWRGaWxlKCl7dGhyb3cgbmV3IEVycm9yKCJObyBmaWxlIHN5c3RlbSBpcyBhdmFpbGFibGUuIil9YXN5bmMgcmVhZERpcmVjdG9yeSgpe3JldHVybltdfX0sYmE9e2ZpbGVTeXN0ZW1Qcm92aWRlcjpvKCgpPT5uZXcgdFMsImZpbGVTeXN0ZW1Qcm92aWRlciIpfX0pO2Z1bmN0aW9uIG96ZSgpe2xldCB0PUduKHhhKGJhKSxzemUpLGU9R24odmEoe3NoYXJlZDp0fSksYXplKTtyZXR1cm4gdC5TZXJ2aWNlUmVnaXN0cnkucmVnaXN0ZXIoZSksZX1mdW5jdGlvbiBIYyh0KXt2YXIgZTtsZXQgcj1vemUoKSxuPXIuc2VyaWFsaXplci5Kc29uU2VyaWFsaXplci5kZXNlcmlhbGl6ZSh0KTtyZXR1cm4gci5zaGFyZWQud29ya3NwYWNlLkxhbmdpdW1Eb2N1bWVudEZhY3RvcnkuZnJvbU1vZGVsKG4sbXMucGFyc2UoYG1lbW9yeTovLyR7KGU9bi5uYW1lKSE9PW51bGwmJmUhPT12b2lkIDA/ZToiZ3JhbW1hciJ9LmxhbmdpdW1gKSksbn12YXIgYXplLHN6ZSxSdWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtRSSgpO0pJKCk7UGMoKTtyTygpO1VjKCk7YXplPXtHcmFtbWFyOm8oKCk9Pnt9LCJHcmFtbWFyIiksTGFuZ3VhZ2VNZXRhRGF0YTpvKCgpPT4oe2Nhc2VJbnNlbnNpdGl2ZTohMSxmaWxlRXh0ZW5zaW9uczpbIi5sYW5naXVtIl0sbGFuZ3VhZ2VJZDoibGFuZ2l1bSJ9KSwiTGFuZ3VhZ2VNZXRhRGF0YSIpfSxzemU9e0FzdFJlZmxlY3Rpb246bygoKT0+bmV3IE9nLCJBc3RSZWZsZWN0aW9uIil9O28ob3plLCJjcmVhdGVNaW5pbWFsR3JhbW1hclNlcnZpY2VzIik7byhIYywibG9hZEdyYW1tYXJGcm9tSnNvbiIpfSk7dmFyIEdyPXt9O3VyKEdyLHtBc3RVdGlsczooKT0+SWssQmlNYXA6KCk9Pl9wLENhbmNlbGxhdGlvbjooKT0+eXIsQ29udGV4dENhY2hlOigpPT5EcCxDc3RVdGlsczooKT0+RWssRE9ORV9SRVNVTFQ6KCk9PkJhLERlZmVycmVkOigpPT5wcyxEaXNwb3NhYmxlOigpPT52ZixEaXNwb3NhYmxlQ2FjaGU6KCk9PmsxLERvY3VtZW50Q2FjaGU6KCk9PlVFLEVNUFRZX1NUUkVBTTooKT0+SDIsRXJyb3JXaXRoTG9jYXRpb246KCk9PmxwLEdyYW1tYXJVdGlsczooKT0+JGssTXVsdGlNYXA6KCk9PnpsLE9wZXJhdGlvbkNhbmNlbGxlZDooKT0+R2MsUmVkdWN0aW9uOigpPT5qbSxSZWdFeHBVdGlsczooKT0+QmssU2ltcGxlQ2FjaGU6KCk9Pmp4LFN0cmVhbUltcGw6KCk9PmNvLFRyZWVTdHJlYW1JbXBsOigpPT5NYyxVUkk6KCk9Pm1zLFVyaVV0aWxzOigpPT5ncyxXb3Jrc3BhY2VDYWNoZTooKT0+RTEsYXNzZXJ0VW5yZWFjaGFibGU6KCk9Pk9jLGRlbGF5TmV4dFRpY2s6KCk9PmdJLGludGVycnVwdEFuZENoZWNrOigpPT53aSxpc09wZXJhdGlvbkNhbmNlbGxlZDooKT0+VmMsbG9hZEdyYW1tYXJGcm9tSnNvbjooKT0+SGMsc2V0SW50ZXJydXB0aW9uUGVyaW9kOigpPT50dWUsc3RhcnRDYW5jZWxhYmxlT3BlcmF0aW9uOigpPT5HRSxzdHJlYW06KCk9PmVufSk7dmFyIE51ZT1OKCgpPT57InVzZSBzdHJpY3QiO0hFKCk7WUUoKTtDcihHcixabik7VDEoKTtOSSgpO1NrKCk7UnVlKCk7UW8oKTtHcygpO1VjKCk7Y3MoKTtLbygpO09sKCk7RmwoKTskZygpfSk7dmFyIE11ZT1OKCgpPT57InVzZSBzdHJpY3QiO19JKCk7ZWIoKX0pO3ZhciBJdWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtESSgpO0xJKCk7UkkoKTtNSSgpO2IxKCk7ck8oKTtJSSgpO2pJKCk7T0koKX0pO3ZhciBUYT17fTt1cihUYSx7QWJzdHJhY3RBc3RSZWZsZWN0aW9uOigpPT5pcCxBYnN0cmFjdENzdE5vZGU6KCk9PlB4LEFic3RyYWN0TGFuZ2l1bVBhcnNlcjooKT0+QngsQWJzdHJhY3RQYXJzZXJFcnJvck1lc3NhZ2VQcm92aWRlcjooKT0+TUUsQWJzdHJhY3RUaHJlYWRlZEFzeW5jUGFyc2VyOigpPT5xSSxBc3RVdGlsczooKT0+SWssQmlNYXA6KCk9Pl9wLENhbmNlbGxhdGlvbjooKT0+eXIsQ29tcG9zaXRlQ3N0Tm9kZUltcGw6KCk9PlNwLENvbnRleHRDYWNoZTooKT0+RHAsQ3N0Tm9kZUJ1aWxkZXI6KCk9Pk94LENzdFV0aWxzOigpPT5FayxERUZBVUxUX1RPS0VOSVpFX09QVElPTlM6KCk9PlhFLERPTkVfUkVTVUxUOigpPT5CYSxEYXRhdHlwZVN5bWJvbDooKT0+TkUsRGVmYXVsdEFzdE5vZGVEZXNjcmlwdGlvblByb3ZpZGVyOigpPT5yYixEZWZhdWx0QXN0Tm9kZUxvY2F0b3I6KCk9PmliLERlZmF1bHRBc3luY1BhcnNlcjooKT0+cGIsRGVmYXVsdENvbW1lbnRQcm92aWRlcjooKT0+ZGIsRGVmYXVsdENvbmZpZ3VyYXRpb25Qcm92aWRlcjooKT0+YWIsRGVmYXVsdERvY3VtZW50QnVpbGRlcjooKT0+c2IsRGVmYXVsdERvY3VtZW50VmFsaWRhdG9yOigpPT50YixEZWZhdWx0SHlkcmF0b3I6KCk9PmdiLERlZmF1bHRJbmRleE1hbmFnZXI6KCk9Pm9iLERlZmF1bHRKc29uU2VyaWFsaXplcjooKT0+UXgsRGVmYXVsdExhbmdpdW1Eb2N1bWVudEZhY3Rvcnk6KCk9PlZ4LERlZmF1bHRMYW5naXVtRG9jdW1lbnRzOigpPT5VeCxEZWZhdWx0TGV4ZXI6KCk9PlJwLERlZmF1bHRMZXhlckVycm9yTWVzc2FnZVByb3ZpZGVyOigpPT5jYixEZWZhdWx0TGlua2VyOigpPT5IeCxEZWZhdWx0TmFtZVByb3ZpZGVyOigpPT5XeCxEZWZhdWx0UmVmZXJlbmNlRGVzY3JpcHRpb25Qcm92aWRlcjooKT0+bmIsRGVmYXVsdFJlZmVyZW5jZXM6KCk9PnF4LERlZmF1bHRTY29wZUNvbXB1dGF0aW9uOigpPT5ZeCxEZWZhdWx0U2NvcGVQcm92aWRlcjooKT0+S3gsRGVmYXVsdFNlcnZpY2VSZWdpc3RyeTooKT0+WngsRGVmYXVsdFRva2VuQnVpbGRlcjooKT0+anUsRGVmYXVsdFZhbHVlQ29udmVydGVyOigpPT5BcCxEZWZhdWx0V29ya3NwYWNlTG9jazooKT0+bWIsRGVmYXVsdFdvcmtzcGFjZU1hbmFnZXI6KCk9PmxiLERlZmVycmVkOigpPT5wcyxEaXNwb3NhYmxlOigpPT52ZixEaXNwb3NhYmxlQ2FjaGU6KCk9PmsxLERvY3VtZW50Q2FjaGU6KCk9PlVFLERvY3VtZW50U3RhdGU6KCk9PmtuLERvY3VtZW50VmFsaWRhdG9yOigpPT5abyxFTVBUWV9TQ09QRTooKT0+cSRlLEVNUFRZX1NUUkVBTTooKT0+SDIsRW1wdHlGaWxlU3lzdGVtOigpPT5iYSxFbXB0eUZpbGVTeXN0ZW1Qcm92aWRlcjooKT0+dFMsRXJyb3JXaXRoTG9jYXRpb246KCk9PmxwLEdyYW1tYXJBU1Q6KCk9PkoyLEdyYW1tYXJVdGlsczooKT0+JGssSW5kZW50YXRpb25Bd2FyZUxleGVyOigpPT50TyxJbmRlbnRhdGlvbkF3YXJlVG9rZW5CdWlsZGVyOigpPT5lUyxKU0RvY0RvY3VtZW50YXRpb25Qcm92aWRlcjooKT0+ZmIsTGFuZ2l1bUNvbXBsZXRpb25QYXJzZXI6KCk9PiR4LExhbmdpdW1QYXJzZXI6KCk9PkZ4LExhbmdpdW1QYXJzZXJFcnJvck1lc3NhZ2VQcm92aWRlcjooKT0+bTEsTGVhZkNzdE5vZGVJbXBsOigpPT5FcCxMZXhpbmdNb2RlOigpPT5OcCxNYXBTY29wZTooKT0+WHgsTW9kdWxlOigpPT5aSSxNdWx0aU1hcDooKT0+emwsT3BlcmF0aW9uQ2FuY2VsbGVkOigpPT5HYyxQYXJzZXJXb3JrZXI6KCk9PllJLFJlZHVjdGlvbjooKT0+am0sUmVnRXhwVXRpbHM6KCk9PkJrLFJvb3RDc3ROb2RlSW1wbDooKT0+cDEsU2ltcGxlQ2FjaGU6KCk9Pmp4LFN0cmVhbUltcGw6KCk9PmNvLFN0cmVhbVNjb3BlOigpPT53MSxUZXh0RG9jdW1lbnQ6KCk9PnYxLFRyZWVTdHJlYW1JbXBsOigpPT5NYyxVUkk6KCk9Pm1zLFVyaVV0aWxzOigpPT5ncyxWYWxpZGF0aW9uQ2F0ZWdvcnk6KCk9PlMxLFZhbGlkYXRpb25SZWdpc3RyeTooKT0+SngsVmFsdWVDb252ZXJ0ZXI6KCk9PnpjLFdvcmtzcGFjZUNhY2hlOigpPT5FMSxhc3NlcnRVbnJlYWNoYWJsZTooKT0+T2MsY3JlYXRlQ29tcGxldGlvblBhcnNlcjooKT0+bkksY3JlYXRlRGVmYXVsdENvcmVNb2R1bGU6KCk9PnZhLGNyZWF0ZURlZmF1bHRTaGFyZWRDb3JlTW9kdWxlOigpPT54YSxjcmVhdGVHcmFtbWFyQ29uZmlnOigpPT5RTixjcmVhdGVMYW5naXVtUGFyc2VyOigpPT5hSSxjcmVhdGVQYXJzZXI6KCk9Pkd4LGRlbGF5TmV4dFRpY2s6KCk9PmdJLGRpYWdub3N0aWNEYXRhOigpPT5McCxlYWdlckxvYWQ6KCk9PmJ1ZSxnZXREaWFnbm9zdGljUmFuZ2U6KCk9PmN1ZSxpbmRlbnRhdGlvbkJ1aWxkZXJEZWZhdWx0T3B0aW9uczooKT0+ZU8saW5qZWN0OigpPT5HbixpbnRlcnJ1cHRBbmRDaGVjazooKT0+d2ksaXNBc3ROb2RlOigpPT5zaSxpc0FzdE5vZGVEZXNjcmlwdGlvbjooKT0+c04saXNBc3ROb2RlV2l0aENvbW1lbnQ6KCk9PkNJLGlzQ29tcG9zaXRlQ3N0Tm9kZTooKT0+TWwsaXNJTXVsdGlNb2RlTGV4ZXJEZWZpbml0aW9uOigpPT5CSSxpc0pTRG9jOigpPT5HSSxpc0xlYWZDc3ROb2RlOigpPT5oZixpc0xpbmtpbmdFcnJvcjooKT0+YXAsaXNOYW1lZDooKT0+b3VlLGlzT3BlcmF0aW9uQ2FuY2VsbGVkOigpPT5WYyxpc1JlZmVyZW5jZTooKT0+eWEsaXNSb290Q3N0Tm9kZTooKT0+VTIsaXNUb2tlblR5cGVBcnJheTooKT0+akUsaXNUb2tlblR5cGVEaWN0aW9uYXJ5OigpPT5QSSxsb2FkR3JhbW1hckZyb21Kc29uOigpPT5IYyxwYXJzZUpTRG9jOigpPT56SSxwcmVwYXJlTGFuZ2l1bVBhcnNlcjooKT0+WGNlLHNldEludGVycnVwdGlvblBlcmlvZDooKT0+dHVlLHN0YXJ0Q2FuY2VsYWJsZU9wZXJhdGlvbjooKT0+R0Usc3RyZWFtOigpPT5lbix0b0RpYWdub3N0aWNEYXRhOigpPT51dWUsdG9EaWFnbm9zdGljU2V2ZXJpdHk6KCk9PnFFfSk7dmFyIHBvPU4oKCk9PnsidXNlIHN0cmljdCI7UUkoKTtKSSgpO0FJKCk7d3VlKCk7SWwoKTtrdWUoKTtTdWUoKTtfdWUoKTtEdWUoKTtMdWUoKTtOdWUoKTtDcihUYSxHcik7TXVlKCk7SXVlKCk7UGMoKX0pO2Z1bmN0aW9uIFZ1ZSh0KXtyZXR1cm4gR2wuaXNJbnN0YW5jZSh0LHliKX1mdW5jdGlvbiBVdWUodCl7cmV0dXJuIEdsLmlzSW5zdGFuY2UodCxDMSl9ZnVuY3Rpb24gSHVlKHQpe3JldHVybiBHbC5pc0luc3RhbmNlKHQsQTEpfWZ1bmN0aW9uIFd1ZSh0KXtyZXR1cm4gR2wuaXNJbnN0YW5jZSh0LF8xKX1mdW5jdGlvbiBxdWUodCl7cmV0dXJuIEdsLmlzSW5zdGFuY2UodCx2Yil9ZnVuY3Rpb24gWXVlKHQpe3JldHVybiBHbC5pc0luc3RhbmNlKHQsRDEpfWZ1bmN0aW9uIFh1ZSh0KXtyZXR1cm4gR2wuaXNJbnN0YW5jZSh0LHhiKX1mdW5jdGlvbiBqdWUodCl7cmV0dXJuIEdsLmlzSW5zdGFuY2UodCxiYil9ZnVuY3Rpb24gS3VlKHQpe3JldHVybiBHbC5pc0luc3RhbmNlKHQsVGIpfWZ1bmN0aW9uIFF1ZSh0KXtyZXR1cm4gR2wuaXNJbnN0YW5jZSh0LHdiKX1mdW5jdGlvbiBadWUodCl7cmV0dXJuIEdsLmlzSW5zdGFuY2UodCxrYil9dmFyIGx6ZSx4dCxmTyx5YixyUyxDMSxuUyxpUyxuTyxBMSxpTyxhTyxzTyxfMSxvTyx2YixhUyxsTyxEMSxjTyx4YixiYixUYix3YixjUyx1TyxrYixoTyxzUyxvUyxsUyxKdWUsR2wsT3VlLGN6ZSxQdWUsdXplLEJ1ZSxoemUsRnVlLGZ6ZSwkdWUsZHplLHp1ZSxwemUsR3VlLG16ZSxnemUseXplLHZ6ZSx4emUsYnplLFR6ZSx3emUseXMsZE8scE8sbU8sZ08seU8sdk8seE8sa3plLEV6ZSxTemUsQ3plLHhmLEt1LEdhLEF6ZSxWYT1OKCgpPT57InVzZSBzdHJpY3QiO3BvKCk7cG8oKTtwbygpO3BvKCk7bHplPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSx4dD1vKCh0LGUpPT5semUodCwibmFtZSIse3ZhbHVlOmUsY29uZmlndXJhYmxlOiEwfSksIl9fbmFtZSIpLGZPPSJTdGF0ZW1lbnQiLHliPSJBcmNoaXRlY3R1cmUiO28oVnVlLCJpc0FyY2hpdGVjdHVyZSIpO3h0KFZ1ZSwiaXNBcmNoaXRlY3R1cmUiKTtyUz0iQXhpcyIsQzE9IkJyYW5jaCI7byhVdWUsImlzQnJhbmNoIik7eHQoVXVlLCJpc0JyYW5jaCIpO25TPSJDaGVja291dCIsaVM9IkNoZXJyeVBpY2tpbmciLG5PPSJDbGFzc0RlZlN0YXRlbWVudCIsQTE9IkNvbW1pdCI7byhIdWUsImlzQ29tbWl0Iik7eHQoSHVlLCJpc0NvbW1pdCIpO2lPPSJDdXJ2ZSIsYU89IkVkZ2UiLHNPPSJFbnRyeSIsXzE9IkdpdEdyYXBoIjtvKFd1ZSwiaXNHaXRHcmFwaCIpO3h0KFd1ZSwiaXNHaXRHcmFwaCIpO29PPSJHcm91cCIsdmI9IkluZm8iO28ocXVlLCJpc0luZm8iKTt4dChxdWUsImlzSW5mbyIpO2FTPSJJdGVtIixsTz0iSnVuY3Rpb24iLEQxPSJNZXJnZSI7byhZdWUsImlzTWVyZ2UiKTt4dChZdWUsImlzTWVyZ2UiKTtjTz0iT3B0aW9uIix4Yj0iUGFja2V0IjtvKFh1ZSwiaXNQYWNrZXQiKTt4dChYdWUsImlzUGFja2V0Iik7YmI9IlBhY2tldEJsb2NrIjtvKGp1ZSwiaXNQYWNrZXRCbG9jayIpO3h0KGp1ZSwiaXNQYWNrZXRCbG9jayIpO1RiPSJQaWUiO28oS3VlLCJpc1BpZSIpO3h0KEt1ZSwiaXNQaWUiKTt3Yj0iUGllU2VjdGlvbiI7byhRdWUsImlzUGllU2VjdGlvbiIpO3h0KFF1ZSwiaXNQaWVTZWN0aW9uIik7Y1M9IlJhZGFyIix1Tz0iU2VydmljZSIsa2I9IlRyZWVtYXAiO28oWnVlLCJpc1RyZWVtYXAiKTt4dChadWUsImlzVHJlZW1hcCIpO2hPPSJUcmVlbWFwUm93IixzUz0iRGlyZWN0aW9uIixvUz0iTGVhZiIsbFM9IlNlY3Rpb24iLEp1ZT1jbGFzcyBleHRlbmRzIGlwe3N0YXRpY3tvKHRoaXMsIk1lcm1haWRBc3RSZWZsZWN0aW9uIil9c3RhdGlje3h0KHRoaXMsIk1lcm1haWRBc3RSZWZsZWN0aW9uIil9Z2V0QWxsVHlwZXMoKXtyZXR1cm5beWIsclMsQzEsblMsaVMsbk8sQTEsaU8sc1MsYU8sc08sXzEsb08sdmIsYVMsbE8sb1MsRDEsY08seGIsYmIsVGIsd2IsY1MsbFMsdU8sZk8sa2IsaE9dfWNvbXB1dGVJc1N1YnR5cGUodCxlKXtzd2l0Y2godCl7Y2FzZSBDMTpjYXNlIG5TOmNhc2UgaVM6Y2FzZSBBMTpjYXNlIEQxOnJldHVybiB0aGlzLmlzU3VidHlwZShmTyxlKTtjYXNlIHNTOnJldHVybiB0aGlzLmlzU3VidHlwZShfMSxlKTtjYXNlIG9TOmNhc2UgbFM6cmV0dXJuIHRoaXMuaXNTdWJ0eXBlKGFTLGUpO2RlZmF1bHQ6cmV0dXJuITF9fWdldFJlZmVyZW5jZVR5cGUodCl7bGV0IGU9YCR7dC5jb250YWluZXIuJHR5cGV9OiR7dC5wcm9wZXJ0eX1gO3N3aXRjaChlKXtjYXNlIkVudHJ5OmF4aXMiOnJldHVybiByUztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgJHtlfSBpcyBub3QgYSB2YWxpZCByZWZlcmVuY2UgaWQuYCl9fWdldFR5cGVNZXRhRGF0YSh0KXtzd2l0Y2godCl7Y2FzZSB5YjpyZXR1cm57bmFtZTp5Yixwcm9wZXJ0aWVzOlt7bmFtZToiYWNjRGVzY3IifSx7bmFtZToiYWNjVGl0bGUifSx7bmFtZToiZWRnZXMiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6Imdyb3VwcyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToianVuY3Rpb25zIixkZWZhdWx0VmFsdWU6W119LHtuYW1lOiJzZXJ2aWNlcyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToidGl0bGUifV19O2Nhc2UgclM6cmV0dXJue25hbWU6clMscHJvcGVydGllczpbe25hbWU6ImxhYmVsIn0se25hbWU6Im5hbWUifV19O2Nhc2UgQzE6cmV0dXJue25hbWU6QzEscHJvcGVydGllczpbe25hbWU6Im5hbWUifSx7bmFtZToib3JkZXIifV19O2Nhc2UgblM6cmV0dXJue25hbWU6blMscHJvcGVydGllczpbe25hbWU6ImJyYW5jaCJ9XX07Y2FzZSBpUzpyZXR1cm57bmFtZTppUyxwcm9wZXJ0aWVzOlt7bmFtZToiaWQifSx7bmFtZToicGFyZW50In0se25hbWU6InRhZ3MiLGRlZmF1bHRWYWx1ZTpbXX1dfTtjYXNlIG5POnJldHVybntuYW1lOm5PLHByb3BlcnRpZXM6W3tuYW1lOiJjbGFzc05hbWUifSx7bmFtZToic3R5bGVUZXh0In1dfTtjYXNlIEExOnJldHVybntuYW1lOkExLHByb3BlcnRpZXM6W3tuYW1lOiJpZCJ9LHtuYW1lOiJtZXNzYWdlIn0se25hbWU6InRhZ3MiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6InR5cGUifV19O2Nhc2UgaU86cmV0dXJue25hbWU6aU8scHJvcGVydGllczpbe25hbWU6ImVudHJpZXMiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6ImxhYmVsIn0se25hbWU6Im5hbWUifV19O2Nhc2UgYU86cmV0dXJue25hbWU6YU8scHJvcGVydGllczpbe25hbWU6Imxoc0RpciJ9LHtuYW1lOiJsaHNHcm91cCIsZGVmYXVsdFZhbHVlOiExfSx7bmFtZToibGhzSWQifSx7bmFtZToibGhzSW50byIsZGVmYXVsdFZhbHVlOiExfSx7bmFtZToicmhzRGlyIn0se25hbWU6InJoc0dyb3VwIixkZWZhdWx0VmFsdWU6ITF9LHtuYW1lOiJyaHNJZCJ9LHtuYW1lOiJyaHNJbnRvIixkZWZhdWx0VmFsdWU6ITF9LHtuYW1lOiJ0aXRsZSJ9XX07Y2FzZSBzTzpyZXR1cm57bmFtZTpzTyxwcm9wZXJ0aWVzOlt7bmFtZToiYXhpcyJ9LHtuYW1lOiJ2YWx1ZSJ9XX07Y2FzZSBfMTpyZXR1cm57bmFtZTpfMSxwcm9wZXJ0aWVzOlt7bmFtZToiYWNjRGVzY3IifSx7bmFtZToiYWNjVGl0bGUifSx7bmFtZToic3RhdGVtZW50cyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToidGl0bGUifV19O2Nhc2Ugb086cmV0dXJue25hbWU6b08scHJvcGVydGllczpbe25hbWU6Imljb24ifSx7bmFtZToiaWQifSx7bmFtZToiaW4ifSx7bmFtZToidGl0bGUifV19O2Nhc2UgdmI6cmV0dXJue25hbWU6dmIscHJvcGVydGllczpbe25hbWU6ImFjY0Rlc2NyIn0se25hbWU6ImFjY1RpdGxlIn0se25hbWU6InRpdGxlIn1dfTtjYXNlIGFTOnJldHVybntuYW1lOmFTLHByb3BlcnRpZXM6W3tuYW1lOiJjbGFzc1NlbGVjdG9yIn0se25hbWU6Im5hbWUifV19O2Nhc2UgbE86cmV0dXJue25hbWU6bE8scHJvcGVydGllczpbe25hbWU6ImlkIn0se25hbWU6ImluIn1dfTtjYXNlIEQxOnJldHVybntuYW1lOkQxLHByb3BlcnRpZXM6W3tuYW1lOiJicmFuY2gifSx7bmFtZToiaWQifSx7bmFtZToidGFncyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToidHlwZSJ9XX07Y2FzZSBjTzpyZXR1cm57bmFtZTpjTyxwcm9wZXJ0aWVzOlt7bmFtZToibmFtZSJ9LHtuYW1lOiJ2YWx1ZSIsZGVmYXVsdFZhbHVlOiExfV19O2Nhc2UgeGI6cmV0dXJue25hbWU6eGIscHJvcGVydGllczpbe25hbWU6ImFjY0Rlc2NyIn0se25hbWU6ImFjY1RpdGxlIn0se25hbWU6ImJsb2NrcyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToidGl0bGUifV19O2Nhc2UgYmI6cmV0dXJue25hbWU6YmIscHJvcGVydGllczpbe25hbWU6ImJpdHMifSx7bmFtZToiZW5kIn0se25hbWU6ImxhYmVsIn0se25hbWU6InN0YXJ0In1dfTtjYXNlIFRiOnJldHVybntuYW1lOlRiLHByb3BlcnRpZXM6W3tuYW1lOiJhY2NEZXNjciJ9LHtuYW1lOiJhY2NUaXRsZSJ9LHtuYW1lOiJzZWN0aW9ucyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToic2hvd0RhdGEiLGRlZmF1bHRWYWx1ZTohMX0se25hbWU6InRpdGxlIn1dfTtjYXNlIHdiOnJldHVybntuYW1lOndiLHByb3BlcnRpZXM6W3tuYW1lOiJsYWJlbCJ9LHtuYW1lOiJ2YWx1ZSJ9XX07Y2FzZSBjUzpyZXR1cm57bmFtZTpjUyxwcm9wZXJ0aWVzOlt7bmFtZToiYWNjRGVzY3IifSx7bmFtZToiYWNjVGl0bGUifSx7bmFtZToiYXhlcyIsZGVmYXVsdFZhbHVlOltdfSx7bmFtZToiY3VydmVzIixkZWZhdWx0VmFsdWU6W119LHtuYW1lOiJvcHRpb25zIixkZWZhdWx0VmFsdWU6W119LHtuYW1lOiJ0aXRsZSJ9XX07Y2FzZSB1TzpyZXR1cm57bmFtZTp1Tyxwcm9wZXJ0aWVzOlt7bmFtZToiaWNvbiJ9LHtuYW1lOiJpY29uVGV4dCJ9LHtuYW1lOiJpZCJ9LHtuYW1lOiJpbiJ9LHtuYW1lOiJ0aXRsZSJ9XX07Y2FzZSBrYjpyZXR1cm57bmFtZTprYixwcm9wZXJ0aWVzOlt7bmFtZToiYWNjRGVzY3IifSx7bmFtZToiYWNjVGl0bGUifSx7bmFtZToidGl0bGUifSx7bmFtZToiVHJlZW1hcFJvd3MiLGRlZmF1bHRWYWx1ZTpbXX1dfTtjYXNlIGhPOnJldHVybntuYW1lOmhPLHByb3BlcnRpZXM6W3tuYW1lOiJpbmRlbnQifSx7bmFtZToiaXRlbSJ9XX07Y2FzZSBzUzpyZXR1cm57bmFtZTpzUyxwcm9wZXJ0aWVzOlt7bmFtZToiYWNjRGVzY3IifSx7bmFtZToiYWNjVGl0bGUifSx7bmFtZToiZGlyIn0se25hbWU6InN0YXRlbWVudHMiLGRlZmF1bHRWYWx1ZTpbXX0se25hbWU6InRpdGxlIn1dfTtjYXNlIG9TOnJldHVybntuYW1lOm9TLHByb3BlcnRpZXM6W3tuYW1lOiJjbGFzc1NlbGVjdG9yIn0se25hbWU6Im5hbWUifSx7bmFtZToidmFsdWUifV19O2Nhc2UgbFM6cmV0dXJue25hbWU6bFMscHJvcGVydGllczpbe25hbWU6ImNsYXNzU2VsZWN0b3IifSx7bmFtZToibmFtZSJ9XX07ZGVmYXVsdDpyZXR1cm57bmFtZTp0LHByb3BlcnRpZXM6W119fX19LEdsPW5ldyBKdWUsY3plPXh0KCgpPT5PdWU/PyhPdWU9SGMoYHsiJHR5cGUiOiJHcmFtbWFyIiwiaXNEZWNsYXJlZCI6dHJ1ZSwibmFtZSI6IkluZm8iLCJpbXBvcnRzIjpbXSwicnVsZXMiOlt7IiR0eXBlIjoiUGFyc2VyUnVsZSIsImVudHJ5Ijp0cnVlLCJuYW1lIjoiSW5mbyIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxMiJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IioifSx7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiaW5mbyJ9LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTIifSwiYXJndW1lbnRzIjpbXSwiY2FyZGluYWxpdHkiOiIqIn0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoic2hvd0luZm8ifSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEyIn0sImFyZ3VtZW50cyI6W10sImNhcmRpbmFsaXR5IjoiKiJ9XSwiY2FyZGluYWxpdHkiOiI/In0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyIn0sImFyZ3VtZW50cyI6W10sImNhcmRpbmFsaXR5IjoiPyJ9XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwiZnJhZ21lbnQiOnRydWUsIm5hbWUiOiJFT0wiLCJkYXRhVHlwZSI6InN0cmluZyIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTIifSwiYXJndW1lbnRzIjpbXSwiY2FyZGluYWxpdHkiOiIrIn0seyIkdHlwZSI6IkVuZE9mRmlsZSJ9XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwiZnJhZ21lbnQiOnRydWUsIm5hbWUiOiJUaXRsZUFuZEFjY2Vzc2liaWxpdGllcyIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiYWNjRGVzY3IiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A0In0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJhY2NUaXRsZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDUifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InRpdGxlIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANiJ9LCJhcmd1bWVudHMiOltdfX1dfSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEifSwiYXJndW1lbnRzIjpbXX1dLCJjYXJkaW5hbGl0eSI6IisifSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJCT09MRUFOIiwidHlwZSI6eyIkdHlwZSI6IlJldHVyblR5cGUiLCJuYW1lIjoiYm9vbGVhbiJ9LCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiVGVybWluYWxBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJDaGFyYWN0ZXJSYW5nZSIsImxlZnQiOnsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJ0cnVlIn19LHsiJHR5cGUiOiJDaGFyYWN0ZXJSYW5nZSIsImxlZnQiOnsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJmYWxzZSJ9fV19LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiQUNDX0RFU0NSIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSphY2NEZXNjcig/OltcXFxcdCBdKjooW15cXFxcblxcXFxyXSo/KD89JSUpfFteXFxcXG5cXFxccl0qKXxcXFxccyp7KFtefV0qKX0pLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiQUNDX1RJVExFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSphY2NUaXRsZVtcXFxcdCBdKjooPzpbXlxcXFxuXFxcXHJdKj8oPz0lJSl8W15cXFxcblxcXFxyXSopLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiVElUTEUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKnRpdGxlKD86W1xcXFx0IF1bXlxcXFxuXFxcXHJdKj8oPz0lJSl8W1xcXFx0IF1bXlxcXFxuXFxcXHJdKnwpLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiRkxPQVQiLCJ0eXBlIjp7IiR0eXBlIjoiUmV0dXJuVHlwZSIsIm5hbWUiOiJudW1iZXIifSwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bMC05XStcXFxcLlswLTldKyg/IVxcXFwuKS8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IklOVCIsInR5cGUiOnsiJHR5cGUiOiJSZXR1cm5UeXBlIiwibmFtZSI6Im51bWJlciJ9LCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiLzB8WzEtOV1bMC05XSooPyFcXFxcLikvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJOVU1CRVIiLCJ0eXBlIjp7IiR0eXBlIjoiUmV0dXJuVHlwZSIsIm5hbWUiOiJudW1iZXIifSwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlRlcm1pbmFsQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiVGVybWluYWxSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANyJ9fSx7IiR0eXBlIjoiVGVybWluYWxSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAOCJ9fV19LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiU1RSSU5HIiwidHlwZSI6eyIkdHlwZSI6IlJldHVyblR5cGUiLCJuYW1lIjoic3RyaW5nIn0sImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvXFwiKFteXFwiXFxcXFxcXFxdfFxcXFxcXFxcLikqXFwifCcoW14nXFxcXFxcXFxdfFxcXFxcXFxcLikqJy8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IklEIiwidHlwZSI6eyIkdHlwZSI6IlJldHVyblR5cGUiLCJuYW1lIjoic3RyaW5nIn0sImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx3XShbLVxcXFx3XSpcXFxcdyk/LyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiTkVXTElORSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvXFxcXHI/XFxcXG4vIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6IldISVRFU1BBQ0UiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKy8ifSwiZnJhZ21lbnQiOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwiaGlkZGVuIjp0cnVlLCJuYW1lIjoiWUFNTCIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvLS0tW1xcXFx0IF0qXFxcXHI/XFxcXG4oPzpbXFxcXFNcXFxcc10qP1xcXFxyP1xcXFxuKT8tLS0oPzpcXFxccj9cXFxcbnwoPyFcXFxcUykpLyJ9LCJmcmFnbWVudCI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJoaWRkZW4iOnRydWUsIm5hbWUiOiJESVJFQ1RJVkUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKiUle1tcXFxcU1xcXFxzXSo/fSUlKD86XFxcXHI/XFxcXG58KD8hXFxcXFMpKS8ifSwiZnJhZ21lbnQiOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwiaGlkZGVuIjp0cnVlLCJuYW1lIjoiU0lOR0xFX0xJTkVfQ09NTUVOVCIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0qJSVbXlxcXFxuXFxcXHJdKi8ifSwiZnJhZ21lbnQiOmZhbHNlfV0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJpbnRlcmZhY2VzIjpbXSwidHlwZXMiOltdLCJ1c2VkR3JhbW1hcnMiOltdfWApKSwiSW5mb0dyYW1tYXIiKSx1emU9eHQoKCk9PlB1ZT8/KFB1ZT1IYyhgeyIkdHlwZSI6IkdyYW1tYXIiLCJpc0RlY2xhcmVkIjp0cnVlLCJuYW1lIjoiUGFja2V0IiwiaW1wb3J0cyI6W10sInJ1bGVzIjpbeyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJlbnRyeSI6dHJ1ZSwibmFtZSI6IlBhY2tldCIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxMyJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IioifSx7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoicGFja2V0In0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6InBhY2tldC1iZXRhIn1dfSx7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDMifSwiYXJndW1lbnRzIjpbXX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiYmxvY2tzIiwib3BlcmF0b3IiOiIrPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTMifSwiYXJndW1lbnRzIjpbXX1dLCJjYXJkaW5hbGl0eSI6IioifV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJQYWNrZXRCbG9jayIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJzdGFydCIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDkifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6Ii0ifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJlbmQiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A5In0sImFyZ3VtZW50cyI6W119fV0sImNhcmRpbmFsaXR5IjoiPyJ9XX0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiKyJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImJpdHMiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A5In0sImFyZ3VtZW50cyI6W119fV19XX0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IjoifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJsYWJlbCIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDExIn0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIifSwiYXJndW1lbnRzIjpbXX1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsImZyYWdtZW50Ijp0cnVlLCJuYW1lIjoiRU9MIiwiZGF0YVR5cGUiOiJzdHJpbmciLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEzIn0sImFyZ3VtZW50cyI6W10sImNhcmRpbmFsaXR5IjoiKyJ9LHsiJHR5cGUiOiJFbmRPZkZpbGUifV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsImZyYWdtZW50Ijp0cnVlLCJuYW1lIjoiVGl0bGVBbmRBY2Nlc3NpYmlsaXRpZXMiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImFjY0Rlc2NyIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANSJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiYWNjVGl0bGUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A2In0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJ0aXRsZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDcifSwiYXJndW1lbnRzIjpbXX19XX0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyIn0sImFyZ3VtZW50cyI6W119XSwiY2FyZGluYWxpdHkiOiIrIn0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiQk9PTEVBTiIsInR5cGUiOnsiJHR5cGUiOiJSZXR1cm5UeXBlIiwibmFtZSI6ImJvb2xlYW4ifSwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlRlcm1pbmFsQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiQ2hhcmFjdGVyUmFuZ2UiLCJsZWZ0Ijp7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoidHJ1ZSJ9fSx7IiR0eXBlIjoiQ2hhcmFjdGVyUmFuZ2UiLCJsZWZ0Ijp7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiZmFsc2UifX1dfSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IkFDQ19ERVNDUiIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0qYWNjRGVzY3IoPzpbXFxcXHQgXSo6KFteXFxcXG5cXFxccl0qPyg/PSUlKXxbXlxcXFxuXFxcXHJdKil8XFxcXHMqeyhbXn1dKil9KS8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IkFDQ19USVRMRSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0qYWNjVGl0bGVbXFxcXHQgXSo6KD86W15cXFxcblxcXFxyXSo/KD89JSUpfFteXFxcXG5cXFxccl0qKS8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IlRJVExFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSp0aXRsZSg/OltcXFxcdCBdW15cXFxcblxcXFxyXSo/KD89JSUpfFtcXFxcdCBdW15cXFxcblxcXFxyXSp8KS8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IkZMT0FUIiwidHlwZSI6eyIkdHlwZSI6IlJldHVyblR5cGUiLCJuYW1lIjoibnVtYmVyIn0sImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvWzAtOV0rXFxcXC5bMC05XSsoPyFcXFxcLikvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJJTlQiLCJ0eXBlIjp7IiR0eXBlIjoiUmV0dXJuVHlwZSIsIm5hbWUiOiJudW1iZXIifSwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii8wfFsxLTldWzAtOV0qKD8hXFxcXC4pLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiTlVNQkVSIiwidHlwZSI6eyIkdHlwZSI6IlJldHVyblR5cGUiLCJuYW1lIjoibnVtYmVyIn0sImRlZmluaXRpb24iOnsiJHR5cGUiOiJUZXJtaW5hbEFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlRlcm1pbmFsUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDgifX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDkifX1dfSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IlNUUklORyIsInR5cGUiOnsiJHR5cGUiOiJSZXR1cm5UeXBlIiwibmFtZSI6InN0cmluZyJ9LCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1xcIihbXlxcIlxcXFxcXFxcXXxcXFxcXFxcXC4pKlxcInwnKFteJ1xcXFxcXFxcXXxcXFxcXFxcXC4pKicvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJJRCIsInR5cGUiOnsiJHR5cGUiOiJSZXR1cm5UeXBlIiwibmFtZSI6InN0cmluZyJ9LCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcd10oWy1cXFxcd10qXFxcXHcpPy8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6Ik5FV0xJTkUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1xcXFxyP1xcXFxuLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJoaWRkZW4iOnRydWUsIm5hbWUiOiJXSElURVNQQUNFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSsvIn0sImZyYWdtZW50IjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6IllBTUwiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiLy0tLVtcXFxcdCBdKlxcXFxyP1xcXFxuKD86W1xcXFxTXFxcXHNdKj9cXFxccj9cXFxcbik/LS0tKD86XFxcXHI/XFxcXG58KD8hXFxcXFMpKS8ifSwiZnJhZ21lbnQiOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwiaGlkZGVuIjp0cnVlLCJuYW1lIjoiRElSRUNUSVZFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSolJXtbXFxcXFNcXFxcc10qP30lJSg/OlxcXFxyP1xcXFxufCg/IVxcXFxTKSkvIn0sImZyYWdtZW50IjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6IlNJTkdMRV9MSU5FX0NPTU1FTlQiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKiUlW15cXFxcblxcXFxyXSovIn0sImZyYWdtZW50IjpmYWxzZX1dLCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwiaW50ZXJmYWNlcyI6W10sInR5cGVzIjpbXSwidXNlZEdyYW1tYXJzIjpbXX1gKSksIlBhY2tldEdyYW1tYXIiKSxoemU9eHQoKCk9PkJ1ZT8/KEJ1ZT1IYyhgeyIkdHlwZSI6IkdyYW1tYXIiLCJpc0RlY2xhcmVkIjp0cnVlLCJuYW1lIjoiUGllIiwiaW1wb3J0cyI6W10sInJ1bGVzIjpbeyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJlbnRyeSI6dHJ1ZSwibmFtZSI6IlBpZSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxMyJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IioifSx7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoicGllIn0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoic2hvd0RhdGEiLCJvcGVyYXRvciI6Ij89IiwidGVybWluYWwiOnsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJzaG93RGF0YSJ9LCJjYXJkaW5hbGl0eSI6Ij8ifSx7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDMifSwiYXJndW1lbnRzIjpbXX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoic2VjdGlvbnMiLCJvcGVyYXRvciI6Iis9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMSJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxMyJ9LCJhcmd1bWVudHMiOltdfV0sImNhcmRpbmFsaXR5IjoiKiJ9XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6IlBpZVNlY3Rpb24iLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImxhYmVsIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTEifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiI6In0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoidmFsdWUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxMCJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyIn0sImFyZ3VtZW50cyI6W119XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJmcmFnbWVudCI6dHJ1ZSwibmFtZSI6IkVPTCIsImRhdGFUeXBlIjoic3RyaW5nIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxMyJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IisifSx7IiR0eXBlIjoiRW5kT2ZGaWxlIn1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJmcmFnbWVudCI6dHJ1ZSwibmFtZSI6IlRpdGxlQW5kQWNjZXNzaWJpbGl0aWVzIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJhY2NEZXNjciIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDUifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImFjY1RpdGxlIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANiJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoidGl0bGUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A3In0sImFyZ3VtZW50cyI6W119fV19LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMiJ9LCJhcmd1bWVudHMiOltdfV0sImNhcmRpbmFsaXR5IjoiKyJ9LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IkJPT0xFQU4iLCJ0eXBlIjp7IiR0eXBlIjoiUmV0dXJuVHlwZSIsIm5hbWUiOiJib29sZWFuIn0sImRlZmluaXRpb24iOnsiJHR5cGUiOiJUZXJtaW5hbEFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkNoYXJhY3RlclJhbmdlIiwibGVmdCI6eyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6InRydWUifX0seyIkdHlwZSI6IkNoYXJhY3RlclJhbmdlIiwibGVmdCI6eyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6ImZhbHNlIn19XX0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJBQ0NfREVTQ1IiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKmFjY0Rlc2NyKD86W1xcXFx0IF0qOihbXlxcXFxuXFxcXHJdKj8oPz0lJSl8W15cXFxcblxcXFxyXSopfFxcXFxzKnsoW159XSopfSkvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJBQ0NfVElUTEUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKmFjY1RpdGxlW1xcXFx0IF0qOig/OlteXFxcXG5cXFxccl0qPyg/PSUlKXxbXlxcXFxuXFxcXHJdKikvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJUSVRMRSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0qdGl0bGUoPzpbXFxcXHQgXVteXFxcXG5cXFxccl0qPyg/PSUlKXxbXFxcXHQgXVteXFxcXG5cXFxccl0qfCkvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJGTE9BVCIsInR5cGUiOnsiJHR5cGUiOiJSZXR1cm5UeXBlIiwibmFtZSI6Im51bWJlciJ9LCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1swLTldK1xcXFwuWzAtOV0rKD8hXFxcXC4pLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiSU5UIiwidHlwZSI6eyIkdHlwZSI6IlJldHVyblR5cGUiLCJuYW1lIjoibnVtYmVyIn0sImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvMHxbMS05XVswLTldKig/IVxcXFwuKS8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6Ik5VTUJFUiIsInR5cGUiOnsiJHR5cGUiOiJSZXR1cm5UeXBlIiwibmFtZSI6Im51bWJlciJ9LCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiVGVybWluYWxBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJUZXJtaW5hbFJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A4In19LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A5In19XX0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJTVFJJTkciLCJ0eXBlIjp7IiR0eXBlIjoiUmV0dXJuVHlwZSIsIm5hbWUiOiJzdHJpbmcifSwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9cXCIoW15cXCJcXFxcXFxcXF18XFxcXFxcXFwuKSpcXCJ8JyhbXidcXFxcXFxcXF18XFxcXFxcXFwuKSonLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiSUQiLCJ0eXBlIjp7IiR0eXBlIjoiUmV0dXJuVHlwZSIsIm5hbWUiOiJzdHJpbmcifSwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHddKFstXFxcXHddKlxcXFx3KT8vIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJORVdMSU5FIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9cXFxccj9cXFxcbi8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwiaGlkZGVuIjp0cnVlLCJuYW1lIjoiV0hJVEVTUEFDRSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0rLyJ9LCJmcmFnbWVudCI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJoaWRkZW4iOnRydWUsIm5hbWUiOiJZQU1MIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii8tLS1bXFxcXHQgXSpcXFxccj9cXFxcbig/OltcXFxcU1xcXFxzXSo/XFxcXHI/XFxcXG4pPy0tLSg/OlxcXFxyP1xcXFxufCg/IVxcXFxTKSkvIn0sImZyYWdtZW50IjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6IkRJUkVDVElWRSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0qJSV7W1xcXFxTXFxcXHNdKj99JSUoPzpcXFxccj9cXFxcbnwoPyFcXFxcUykpLyJ9LCJmcmFnbWVudCI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJoaWRkZW4iOnRydWUsIm5hbWUiOiJTSU5HTEVfTElORV9DT01NRU5UIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSolJVteXFxcXG5cXFxccl0qLyJ9LCJmcmFnbWVudCI6ZmFsc2V9XSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sImludGVyZmFjZXMiOltdLCJ0eXBlcyI6W10sInVzZWRHcmFtbWFycyI6W119YCkpLCJQaWVHcmFtbWFyIiksZnplPXh0KCgpPT5GdWU/PyhGdWU9SGMoYHsiJHR5cGUiOiJHcmFtbWFyIiwiaXNEZWNsYXJlZCI6dHJ1ZSwibmFtZSI6IkFyY2hpdGVjdHVyZSIsImltcG9ydHMiOltdLCJydWxlcyI6W3siJHR5cGUiOiJQYXJzZXJSdWxlIiwiZW50cnkiOnRydWUsIm5hbWUiOiJBcmNoaXRlY3R1cmUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMjMifSwiYXJndW1lbnRzIjpbXSwiY2FyZGluYWxpdHkiOiIqIn0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6ImFyY2hpdGVjdHVyZS1iZXRhIn0seyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyMyJ9LCJhcmd1bWVudHMiOltdfSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEzIn0sImFyZ3VtZW50cyI6W119LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMSJ9LCJhcmd1bWVudHMiOltdfV0sImNhcmRpbmFsaXR5IjoiKiJ9XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwiZnJhZ21lbnQiOnRydWUsIm5hbWUiOiJTdGF0ZW1lbnQiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJncm91cHMiLCJvcGVyYXRvciI6Iis9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANSJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoic2VydmljZXMiLCJvcGVyYXRvciI6Iis9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANiJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoianVuY3Rpb25zIiwib3BlcmF0b3IiOiIrPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDcifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImVkZ2VzIiwib3BlcmF0b3IiOiIrPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDgifSwiYXJndW1lbnRzIjpbXX19XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwiZnJhZ21lbnQiOnRydWUsIm5hbWUiOiJMZWZ0UG9ydCIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IjoifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJsaHNEaXIiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A5In0sImFyZ3VtZW50cyI6W119fV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsImZyYWdtZW50Ijp0cnVlLCJuYW1lIjoiUmlnaHRQb3J0IiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJyaHNEaXIiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A5In0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiOiJ9XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwiZnJhZ21lbnQiOnRydWUsIm5hbWUiOiJBcnJvdyIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyIn0sImFyZ3VtZW50cyI6W119LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6Imxoc0ludG8iLCJvcGVyYXRvciI6Ij89IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTEifSwiYXJndW1lbnRzIjpbXX0sImNhcmRpbmFsaXR5IjoiPyJ9LHsiJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiItLSJ9LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6Ii0ifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJ0aXRsZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDI5In0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiLSJ9XX1dfSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJyaHNJbnRvIiwib3BlcmF0b3IiOiI/PSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDExIn0sImFyZ3VtZW50cyI6W119LCJjYXJkaW5hbGl0eSI6Ij8ifSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDMifSwiYXJndW1lbnRzIjpbXX1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJuYW1lIjoiR3JvdXAiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJncm91cCJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImlkIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMjIifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6Imljb24iLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyOCJ9LCJhcmd1bWVudHMiOltdfSwiY2FyZGluYWxpdHkiOiI/In0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoidGl0bGUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyOSJ9LCJhcmd1bWVudHMiOltdfSwiY2FyZGluYWxpdHkiOiI/In0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiaW4ifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJpbiIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIyIn0sImFyZ3VtZW50cyI6W119fV0sImNhcmRpbmFsaXR5IjoiPyJ9LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTIifSwiYXJndW1lbnRzIjpbXX1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJTZXJ2aWNlIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoic2VydmljZSJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImlkIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMjIifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6Imljb25UZXh0Iiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMjEifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6Imljb24iLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyOCJ9LCJhcmd1bWVudHMiOltdfX1dLCJjYXJkaW5hbGl0eSI6Ij8ifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJ0aXRsZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDI5In0sImFyZ3VtZW50cyI6W119LCJjYXJkaW5hbGl0eSI6Ij8ifSx7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJpbiJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImluIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMjIifSwiYXJndW1lbnRzIjpbXX19XSwiY2FyZGluYWxpdHkiOiI/In0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxMiJ9LCJhcmd1bWVudHMiOltdfV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6Ikp1bmN0aW9uIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoianVuY3Rpb24ifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJpZCIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIyIn0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJpbiJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImluIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMjIifSwiYXJndW1lbnRzIjpbXX19XSwiY2FyZGluYWxpdHkiOiI/In0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxMiJ9LCJhcmd1bWVudHMiOltdfV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6IkVkZ2UiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6Imxoc0lkIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMjIifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6Imxoc0dyb3VwIiwib3BlcmF0b3IiOiI/PSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEwIn0sImFyZ3VtZW50cyI6W119LCJjYXJkaW5hbGl0eSI6Ij8ifSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDQifSwiYXJndW1lbnRzIjpbXX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoicmhzSWQiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyMiJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoicmhzR3JvdXAiLCJvcGVyYXRvciI6Ij89IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTAifSwiYXJndW1lbnRzIjpbXX0sImNhcmRpbmFsaXR5IjoiPyJ9LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTIifSwiYXJndW1lbnRzIjpbXX1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IkFSUk9XX0RJUkVDVElPTiIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJUZXJtaW5hbEFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlRlcm1pbmFsQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiVGVybWluYWxBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJDaGFyYWN0ZXJSYW5nZSIsImxlZnQiOnsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJMIn19LHsiJHR5cGUiOiJDaGFyYWN0ZXJSYW5nZSIsImxlZnQiOnsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJSIn19XX0seyIkdHlwZSI6IkNoYXJhY3RlclJhbmdlIiwibGVmdCI6eyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IlQifX1dfSx7IiR0eXBlIjoiQ2hhcmFjdGVyUmFuZ2UiLCJsZWZ0Ijp7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiQiJ9fV19LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiQVJST1dfR1JPVVAiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1xcXFx7Z3JvdXBcXFxcfS8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IkFSUk9XX0lOVE8iLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiLzx8Pi8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsImZyYWdtZW50Ijp0cnVlLCJuYW1lIjoiRU9MIiwiZGF0YVR5cGUiOiJzdHJpbmciLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIzIn0sImFyZ3VtZW50cyI6W10sImNhcmRpbmFsaXR5IjoiKyJ9LHsiJHR5cGUiOiJFbmRPZkZpbGUifV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsImZyYWdtZW50Ijp0cnVlLCJuYW1lIjoiVGl0bGVBbmRBY2Nlc3NpYmlsaXRpZXMiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImFjY0Rlc2NyIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTUifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImFjY1RpdGxlIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTYifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InRpdGxlIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTcifSwiYXJndW1lbnRzIjpbXX19XX0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxMiJ9LCJhcmd1bWVudHMiOltdfV0sImNhcmRpbmFsaXR5IjoiKyJ9LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IkJPT0xFQU4iLCJ0eXBlIjp7IiR0eXBlIjoiUmV0dXJuVHlwZSIsIm5hbWUiOiJib29sZWFuIn0sImRlZmluaXRpb24iOnsiJHR5cGUiOiJUZXJtaW5hbEFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkNoYXJhY3RlclJhbmdlIiwibGVmdCI6eyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6InRydWUifX0seyIkdHlwZSI6IkNoYXJhY3RlclJhbmdlIiwibGVmdCI6eyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6ImZhbHNlIn19XX0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJBQ0NfREVTQ1IiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKmFjY0Rlc2NyKD86W1xcXFx0IF0qOihbXlxcXFxuXFxcXHJdKj8oPz0lJSl8W15cXFxcblxcXFxyXSopfFxcXFxzKnsoW159XSopfSkvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJBQ0NfVElUTEUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKmFjY1RpdGxlW1xcXFx0IF0qOig/OlteXFxcXG5cXFxccl0qPyg/PSUlKXxbXlxcXFxuXFxcXHJdKikvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJUSVRMRSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0qdGl0bGUoPzpbXFxcXHQgXVteXFxcXG5cXFxccl0qPyg/PSUlKXxbXFxcXHQgXVteXFxcXG5cXFxccl0qfCkvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJGTE9BVCIsInR5cGUiOnsiJHR5cGUiOiJSZXR1cm5UeXBlIiwibmFtZSI6Im51bWJlciJ9LCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1swLTldK1xcXFwuWzAtOV0rKD8hXFxcXC4pLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiSU5UIiwidHlwZSI6eyIkdHlwZSI6IlJldHVyblR5cGUiLCJuYW1lIjoibnVtYmVyIn0sImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvMHxbMS05XVswLTldKig/IVxcXFwuKS8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6Ik5VTUJFUiIsInR5cGUiOnsiJHR5cGUiOiJSZXR1cm5UeXBlIiwibmFtZSI6Im51bWJlciJ9LCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiVGVybWluYWxBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJUZXJtaW5hbFJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxOCJ9fSx7IiR0eXBlIjoiVGVybWluYWxSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTkifX1dfSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IlNUUklORyIsInR5cGUiOnsiJHR5cGUiOiJSZXR1cm5UeXBlIiwibmFtZSI6InN0cmluZyJ9LCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1xcIihbXlxcIlxcXFxcXFxcXXxcXFxcXFxcXC4pKlxcInwnKFteJ1xcXFxcXFxcXXxcXFxcXFxcXC4pKicvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJJRCIsInR5cGUiOnsiJHR5cGUiOiJSZXR1cm5UeXBlIiwibmFtZSI6InN0cmluZyJ9LCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcd10oWy1cXFxcd10qXFxcXHcpPy8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6Ik5FV0xJTkUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1xcXFxyP1xcXFxuLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJoaWRkZW4iOnRydWUsIm5hbWUiOiJXSElURVNQQUNFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSsvIn0sImZyYWdtZW50IjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6IllBTUwiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiLy0tLVtcXFxcdCBdKlxcXFxyP1xcXFxuKD86W1xcXFxTXFxcXHNdKj9cXFxccj9cXFxcbik/LS0tKD86XFxcXHI/XFxcXG58KD8hXFxcXFMpKS8ifSwiZnJhZ21lbnQiOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwiaGlkZGVuIjp0cnVlLCJuYW1lIjoiRElSRUNUSVZFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSolJXtbXFxcXFNcXFxcc10qP30lJSg/OlxcXFxyP1xcXFxufCg/IVxcXFxTKSkvIn0sImZyYWdtZW50IjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6IlNJTkdMRV9MSU5FX0NPTU1FTlQiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKiUlW15cXFxcblxcXFxyXSovIn0sImZyYWdtZW50IjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJBUkNIX0lDT04iLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1xcXFwoW1xcXFx3LTpdK1xcXFwpLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiQVJDSF9USVRMRSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvXFxcXFtbXFxcXHcgXStcXFxcXS8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfV0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJpbnRlcmZhY2VzIjpbXSwidHlwZXMiOltdLCJ1c2VkR3JhbW1hcnMiOltdfWApKSwiQXJjaGl0ZWN0dXJlR3JhbW1hciIpLGR6ZT14dCgoKT0+JHVlPz8oJHVlPUhjKGB7IiR0eXBlIjoiR3JhbW1hciIsImlzRGVjbGFyZWQiOnRydWUsIm5hbWUiOiJHaXRHcmFwaCIsImltcG9ydHMiOltdLCJydWxlcyI6W3siJHR5cGUiOiJQYXJzZXJSdWxlIiwiZW50cnkiOnRydWUsIm5hbWUiOiJHaXRHcmFwaCIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxOSJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IioifSx7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiZ2l0R3JhcGgifSx7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJnaXRHcmFwaCJ9LHsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiI6In1dfSx7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiZ2l0R3JhcGg6In0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiZ2l0R3JhcGgifSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIifSwiYXJndW1lbnRzIjpbXX0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IjoifV19XX0seyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxOSJ9LCJhcmd1bWVudHMiOltdfSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDkifSwiYXJndW1lbnRzIjpbXX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoic3RhdGVtZW50cyIsIm9wZXJhdG9yIjoiKz0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxIn0sImFyZ3VtZW50cyI6W119fV0sImNhcmRpbmFsaXR5IjoiKiJ9XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6IlN0YXRlbWVudCIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMyJ9LCJhcmd1bWVudHMiOltdfSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDQifSwiYXJndW1lbnRzIjpbXX0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A1In0sImFyZ3VtZW50cyI6W119LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANiJ9LCJhcmd1bWVudHMiOltdfSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDcifSwiYXJndW1lbnRzIjpbXX1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJEaXJlY3Rpb24iLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJkaXIiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IkxSIn0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IlRCIn0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IkJUIn1dfX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJuYW1lIjoiQ29tbWl0IiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiY29tbWl0In0seyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiaWQ6In0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiaWQiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxNyJ9LCJhcmd1bWVudHMiOltdfX1dfSx7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJtc2c6IiwiY2FyZGluYWxpdHkiOiI/In0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoibWVzc2FnZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE3In0sImFyZ3VtZW50cyI6W119fV19LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6InRhZzoifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJ0YWdzIiwib3BlcmF0b3IiOiIrPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE3In0sImFyZ3VtZW50cyI6W119fV19LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6InR5cGU6In0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoidHlwZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiTk9STUFMIn0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IlJFVkVSU0UifSx7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiSElHSExJR0hUIn1dfX1dfV0sImNhcmRpbmFsaXR5IjoiKiJ9LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAOCJ9LCJhcmd1bWVudHMiOltdfV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6IkJyYW5jaCIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6ImJyYW5jaCJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6Im5hbWUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyNCJ9LCJhcmd1bWVudHMiOltdfSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE3In0sImFyZ3VtZW50cyI6W119XX19LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6Im9yZGVyOiJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6Im9yZGVyIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTUifSwiYXJndW1lbnRzIjpbXX19XSwiY2FyZGluYWxpdHkiOiI/In0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A4In0sImFyZ3VtZW50cyI6W119XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJuYW1lIjoiTWVyZ2UiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJtZXJnZSJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImJyYW5jaCIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDI0In0sImFyZ3VtZW50cyI6W119LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTcifSwiYXJndW1lbnRzIjpbXX1dfX0seyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiaWQ6In0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiaWQiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxNyJ9LCJhcmd1bWVudHMiOltdfX1dfSx7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJ0YWc6In0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoidGFncyIsIm9wZXJhdG9yIjoiKz0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxNyJ9LCJhcmd1bWVudHMiOltdfX1dfSx7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJ0eXBlOiJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InR5cGUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6Ik5PUk1BTCJ9LHsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJSRVZFUlNFIn0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IkhJR0hMSUdIVCJ9XX19XX1dLCJjYXJkaW5hbGl0eSI6IioifSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDgifSwiYXJndW1lbnRzIjpbXX1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJDaGVja291dCIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6ImNoZWNrb3V0In0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6InN3aXRjaCJ9XX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiYnJhbmNoIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMjQifSwiYXJndW1lbnRzIjpbXX0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxNyJ9LCJhcmd1bWVudHMiOltdfV19fSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDgifSwiYXJndW1lbnRzIjpbXX1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJDaGVycnlQaWNraW5nIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiY2hlcnJ5LXBpY2sifSx7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJpZDoifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJpZCIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE3In0sImFyZ3VtZW50cyI6W119fV19LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6InRhZzoifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJ0YWdzIiwib3BlcmF0b3IiOiIrPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE3In0sImFyZ3VtZW50cyI6W119fV19LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6InBhcmVudDoifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJwYXJlbnQiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxNyJ9LCJhcmd1bWVudHMiOltdfX1dfV0sImNhcmRpbmFsaXR5IjoiKiJ9LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAOCJ9LCJhcmd1bWVudHMiOltdfV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwiZnJhZ21lbnQiOnRydWUsIm5hbWUiOiJFT0wiLCJkYXRhVHlwZSI6InN0cmluZyIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTkifSwiYXJndW1lbnRzIjpbXSwiY2FyZGluYWxpdHkiOiIrIn0seyIkdHlwZSI6IkVuZE9mRmlsZSJ9XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwiZnJhZ21lbnQiOnRydWUsIm5hbWUiOiJUaXRsZUFuZEFjY2Vzc2liaWxpdGllcyIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiYWNjRGVzY3IiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxMSJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiYWNjVGl0bGUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxMiJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoidGl0bGUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxMyJ9LCJhcmd1bWVudHMiOltdfX1dfSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDgifSwiYXJndW1lbnRzIjpbXX1dLCJjYXJkaW5hbGl0eSI6IisifSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJCT09MRUFOIiwidHlwZSI6eyIkdHlwZSI6IlJldHVyblR5cGUiLCJuYW1lIjoiYm9vbGVhbiJ9LCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiVGVybWluYWxBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJDaGFyYWN0ZXJSYW5nZSIsImxlZnQiOnsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJ0cnVlIn19LHsiJHR5cGUiOiJDaGFyYWN0ZXJSYW5nZSIsImxlZnQiOnsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJmYWxzZSJ9fV19LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiQUNDX0RFU0NSIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSphY2NEZXNjcig/OltcXFxcdCBdKjooW15cXFxcblxcXFxyXSo/KD89JSUpfFteXFxcXG5cXFxccl0qKXxcXFxccyp7KFtefV0qKX0pLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiQUNDX1RJVExFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSphY2NUaXRsZVtcXFxcdCBdKjooPzpbXlxcXFxuXFxcXHJdKj8oPz0lJSl8W15cXFxcblxcXFxyXSopLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiVElUTEUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKnRpdGxlKD86W1xcXFx0IF1bXlxcXFxuXFxcXHJdKj8oPz0lJSl8W1xcXFx0IF1bXlxcXFxuXFxcXHJdKnwpLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiRkxPQVQiLCJ0eXBlIjp7IiR0eXBlIjoiUmV0dXJuVHlwZSIsIm5hbWUiOiJudW1iZXIifSwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bMC05XStcXFxcLlswLTldKyg/IVxcXFwuKS8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IklOVCIsInR5cGUiOnsiJHR5cGUiOiJSZXR1cm5UeXBlIiwibmFtZSI6Im51bWJlciJ9LCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiLzB8WzEtOV1bMC05XSooPyFcXFxcLikvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJOVU1CRVIiLCJ0eXBlIjp7IiR0eXBlIjoiUmV0dXJuVHlwZSIsIm5hbWUiOiJudW1iZXIifSwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlRlcm1pbmFsQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiVGVybWluYWxSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTQifX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE1In19XX0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJTVFJJTkciLCJ0eXBlIjp7IiR0eXBlIjoiUmV0dXJuVHlwZSIsIm5hbWUiOiJzdHJpbmcifSwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9cXCIoW15cXCJcXFxcXFxcXF18XFxcXFxcXFwuKSpcXCJ8JyhbXidcXFxcXFxcXF18XFxcXFxcXFwuKSonLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiSUQiLCJ0eXBlIjp7IiR0eXBlIjoiUmV0dXJuVHlwZSIsIm5hbWUiOiJzdHJpbmcifSwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHddKFstXFxcXHddKlxcXFx3KT8vIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJORVdMSU5FIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9cXFxccj9cXFxcbi8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwiaGlkZGVuIjp0cnVlLCJuYW1lIjoiV0hJVEVTUEFDRSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0rLyJ9LCJmcmFnbWVudCI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJoaWRkZW4iOnRydWUsIm5hbWUiOiJZQU1MIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii8tLS1bXFxcXHQgXSpcXFxccj9cXFxcbig/OltcXFxcU1xcXFxzXSo/XFxcXHI/XFxcXG4pPy0tLSg/OlxcXFxyP1xcXFxufCg/IVxcXFxTKSkvIn0sImZyYWdtZW50IjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6IkRJUkVDVElWRSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0qJSV7W1xcXFxTXFxcXHNdKj99JSUoPzpcXFxccj9cXFxcbnwoPyFcXFxcUykpLyJ9LCJmcmFnbWVudCI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJoaWRkZW4iOnRydWUsIm5hbWUiOiJTSU5HTEVfTElORV9DT01NRU5UIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSolJVteXFxcXG5cXFxccl0qLyJ9LCJmcmFnbWVudCI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiUkVGRVJFTkNFIiwidHlwZSI6eyIkdHlwZSI6IlJldHVyblR5cGUiLCJuYW1lIjoic3RyaW5nIn0sImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvXFxcXHcoWy1cXFxcLi9cXFxcd10qWy1cXFxcd10pPy8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfV0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJpbnRlcmZhY2VzIjpbXSwidHlwZXMiOltdLCJ1c2VkR3JhbW1hcnMiOltdfWApKSwiR2l0R3JhcGhHcmFtbWFyIikscHplPXh0KCgpPT56dWU/Pyh6dWU9SGMoYHsiJHR5cGUiOiJHcmFtbWFyIiwiaXNEZWNsYXJlZCI6dHJ1ZSwibmFtZSI6IlJhZGFyIiwiaW1wb3J0cyI6W10sInJ1bGVzIjpbeyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJlbnRyeSI6dHJ1ZSwibmFtZSI6IlJhZGFyIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIwIn0sImFyZ3VtZW50cyI6W10sImNhcmRpbmFsaXR5IjoiKiJ9LHsiJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJyYWRhci1iZXRhIn0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6InJhZGFyLWJldGE6In0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoicmFkYXItYmV0YSJ9LHsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiI6In1dfV19LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMjAifSwiYXJndW1lbnRzIjpbXSwiY2FyZGluYWxpdHkiOiIqIn0seyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxMCJ9LCJhcmd1bWVudHMiOltdfSx7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJheGlzIn0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiYXhlcyIsIm9wZXJhdG9yIjoiKz0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyIn0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiIsIn0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiYXhlcyIsIm9wZXJhdG9yIjoiKz0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyIn0sImFyZ3VtZW50cyI6W119fV0sImNhcmRpbmFsaXR5IjoiKiJ9XX0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiY3VydmUifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJjdXJ2ZXMiLCJvcGVyYXRvciI6Iis9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMyJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiLCJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImN1cnZlcyIsIm9wZXJhdG9yIjoiKz0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AzIn0sImFyZ3VtZW50cyI6W119fV0sImNhcmRpbmFsaXR5IjoiKiJ9XX0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJvcHRpb25zIiwib3BlcmF0b3IiOiIrPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDcifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IiwifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJvcHRpb25zIiwib3BlcmF0b3IiOiIrPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDcifSwiYXJndW1lbnRzIjpbXX19XSwiY2FyZGluYWxpdHkiOiIqIn1dfSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIwIn0sImFyZ3VtZW50cyI6W119XSwiY2FyZGluYWxpdHkiOiIqIn1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJmcmFnbWVudCI6dHJ1ZSwibmFtZSI6IkxhYmVsIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiWyJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImxhYmVsIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTgifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJdIn1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJuYW1lIjoiQXhpcyIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoibmFtZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE5In0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEifSwiYXJndW1lbnRzIjpbXSwiY2FyZGluYWxpdHkiOiI/In1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJDdXJ2ZSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoibmFtZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE5In0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEifSwiYXJndW1lbnRzIjpbXSwiY2FyZGluYWxpdHkiOiI/In0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6InsifSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDQifSwiYXJndW1lbnRzIjpbXX0seyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6In0ifV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwiZnJhZ21lbnQiOnRydWUsIm5hbWUiOiJFbnRyaWVzIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIwIn0sImFyZ3VtZW50cyI6W10sImNhcmRpbmFsaXR5IjoiKiJ9LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImVudHJpZXMiLCJvcGVyYXRvciI6Iis9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANiJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiLCJ9LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMjAifSwiYXJndW1lbnRzIjpbXSwiY2FyZGluYWxpdHkiOiIqIn0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiZW50cmllcyIsIm9wZXJhdG9yIjoiKz0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A2In0sImFyZ3VtZW50cyI6W119fV0sImNhcmRpbmFsaXR5IjoiKiJ9LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMjAifSwiYXJndW1lbnRzIjpbXSwiY2FyZGluYWxpdHkiOiIqIn1dfSx7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMjAifSwiYXJndW1lbnRzIjpbXSwiY2FyZGluYWxpdHkiOiIqIn0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiZW50cmllcyIsIm9wZXJhdG9yIjoiKz0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A1In0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiIsIn0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyMCJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IioifSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJlbnRyaWVzIiwib3BlcmF0b3IiOiIrPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDUifSwiYXJndW1lbnRzIjpbXX19XSwiY2FyZGluYWxpdHkiOiIqIn0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyMCJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IioifV19XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6IkRldGFpbGVkRW50cnkiLCJyZXR1cm5UeXBlIjp7IiRyZWYiOiIjL2ludGVyZmFjZXNAMCJ9LCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImF4aXMiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IkNyb3NzUmVmZXJlbmNlIiwidHlwZSI6eyIkcmVmIjoiIy9ydWxlc0AyIn0sInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE5In0sImFyZ3VtZW50cyI6W119LCJkZXByZWNhdGVkU3ludGF4IjpmYWxzZX19LHsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiI6IiwiY2FyZGluYWxpdHkiOiI/In0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoidmFsdWUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxNyJ9LCJhcmd1bWVudHMiOltdfX1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJOdW1iZXJFbnRyeSIsInJldHVyblR5cGUiOnsiJHJlZiI6IiMvaW50ZXJmYWNlc0AwIn0sImRlZmluaXRpb24iOnsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InZhbHVlIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTcifSwiYXJndW1lbnRzIjpbXX19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6Ik9wdGlvbiIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoibmFtZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoic2hvd0xlZ2VuZCJ9fSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJ2YWx1ZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDExIn0sImFyZ3VtZW50cyI6W119fV19LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoibmFtZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoidGlja3MifX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoidmFsdWUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxNyJ9LCJhcmd1bWVudHMiOltdfX1dfSx7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6Im5hbWUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6Im1heCJ9fSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJ2YWx1ZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE3In0sImFyZ3VtZW50cyI6W119fV19LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoibmFtZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoibWluIn19LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InZhbHVlIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTcifSwiYXJndW1lbnRzIjpbXX19XX0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJuYW1lIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJncmF0aWN1bGUifX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoidmFsdWUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A4In0sImFyZ3VtZW50cyI6W119fV19XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJHUkFUSUNVTEUiLCJ0eXBlIjp7IiR0eXBlIjoiUmV0dXJuVHlwZSIsIm5hbWUiOiJzdHJpbmcifSwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlRlcm1pbmFsQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiQ2hhcmFjdGVyUmFuZ2UiLCJsZWZ0Ijp7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiY2lyY2xlIn19LHsiJHR5cGUiOiJDaGFyYWN0ZXJSYW5nZSIsImxlZnQiOnsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJwb2x5Z29uIn19XX0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJmcmFnbWVudCI6dHJ1ZSwibmFtZSI6IkVPTCIsImRhdGFUeXBlIjoic3RyaW5nIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyMCJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6IisifSx7IiR0eXBlIjoiRW5kT2ZGaWxlIn1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJmcmFnbWVudCI6dHJ1ZSwibmFtZSI6IlRpdGxlQW5kQWNjZXNzaWJpbGl0aWVzIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJhY2NEZXNjciIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEyIn0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJhY2NUaXRsZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDEzIn0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJ0aXRsZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE0In0sImFyZ3VtZW50cyI6W119fV19LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAOSJ9LCJhcmd1bWVudHMiOltdfV0sImNhcmRpbmFsaXR5IjoiKyJ9LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IkJPT0xFQU4iLCJ0eXBlIjp7IiR0eXBlIjoiUmV0dXJuVHlwZSIsIm5hbWUiOiJib29sZWFuIn0sImRlZmluaXRpb24iOnsiJHR5cGUiOiJUZXJtaW5hbEFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkNoYXJhY3RlclJhbmdlIiwibGVmdCI6eyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6InRydWUifX0seyIkdHlwZSI6IkNoYXJhY3RlclJhbmdlIiwibGVmdCI6eyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6ImZhbHNlIn19XX0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJBQ0NfREVTQ1IiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKmFjY0Rlc2NyKD86W1xcXFx0IF0qOihbXlxcXFxuXFxcXHJdKj8oPz0lJSl8W15cXFxcblxcXFxyXSopfFxcXFxzKnsoW159XSopfSkvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJBQ0NfVElUTEUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKmFjY1RpdGxlW1xcXFx0IF0qOig/OlteXFxcXG5cXFxccl0qPyg/PSUlKXxbXlxcXFxuXFxcXHJdKikvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJUSVRMRSIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvW1xcXFx0IF0qdGl0bGUoPzpbXFxcXHQgXVteXFxcXG5cXFxccl0qPyg/PSUlKXxbXFxcXHQgXVteXFxcXG5cXFxccl0qfCkvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJGTE9BVCIsInR5cGUiOnsiJHR5cGUiOiJSZXR1cm5UeXBlIiwibmFtZSI6Im51bWJlciJ9LCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1swLTldK1xcXFwuWzAtOV0rKD8hXFxcXC4pLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiSU5UIiwidHlwZSI6eyIkdHlwZSI6IlJldHVyblR5cGUiLCJuYW1lIjoibnVtYmVyIn0sImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvMHxbMS05XVswLTldKig/IVxcXFwuKS8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6Ik5VTUJFUiIsInR5cGUiOnsiJHR5cGUiOiJSZXR1cm5UeXBlIiwibmFtZSI6Im51bWJlciJ9LCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiVGVybWluYWxBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJUZXJtaW5hbFJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxNSJ9fSx7IiR0eXBlIjoiVGVybWluYWxSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTYifX1dfSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IlNUUklORyIsInR5cGUiOnsiJHR5cGUiOiJSZXR1cm5UeXBlIiwibmFtZSI6InN0cmluZyJ9LCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1xcIihbXlxcIlxcXFxcXFxcXXxcXFxcXFxcXC4pKlxcInwnKFteJ1xcXFxcXFxcXXxcXFxcXFxcXC4pKicvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJJRCIsInR5cGUiOnsiJHR5cGUiOiJSZXR1cm5UeXBlIiwibmFtZSI6InN0cmluZyJ9LCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcd10oWy1cXFxcd10qXFxcXHcpPy8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6Ik5FV0xJTkUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1xcXFxyP1xcXFxuLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJoaWRkZW4iOnRydWUsIm5hbWUiOiJXSElURVNQQUNFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSsvIn0sImZyYWdtZW50IjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6IllBTUwiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiLy0tLVtcXFxcdCBdKlxcXFxyP1xcXFxuKD86W1xcXFxTXFxcXHNdKj9cXFxccj9cXFxcbik/LS0tKD86XFxcXHI/XFxcXG58KD8hXFxcXFMpKS8ifSwiZnJhZ21lbnQiOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwiaGlkZGVuIjp0cnVlLCJuYW1lIjoiRElSRUNUSVZFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSolJXtbXFxcXFNcXFxcc10qP30lJSg/OlxcXFxyP1xcXFxufCg/IVxcXFxTKSkvIn0sImZyYWdtZW50IjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6IlNJTkdMRV9MSU5FX0NPTU1FTlQiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKiUlW15cXFxcblxcXFxyXSovIn0sImZyYWdtZW50IjpmYWxzZX1dLCJpbnRlcmZhY2VzIjpbeyIkdHlwZSI6IkludGVyZmFjZSIsIm5hbWUiOiJFbnRyeSIsImF0dHJpYnV0ZXMiOlt7IiR0eXBlIjoiVHlwZUF0dHJpYnV0ZSIsIm5hbWUiOiJheGlzIiwiaXNPcHRpb25hbCI6dHJ1ZSwidHlwZSI6eyIkdHlwZSI6IlJlZmVyZW5jZVR5cGUiLCJyZWZlcmVuY2VUeXBlIjp7IiR0eXBlIjoiU2ltcGxlVHlwZSIsInR5cGVSZWYiOnsiJHJlZiI6IiMvcnVsZXNAMiJ9fX19LHsiJHR5cGUiOiJUeXBlQXR0cmlidXRlIiwibmFtZSI6InZhbHVlIiwidHlwZSI6eyIkdHlwZSI6IlNpbXBsZVR5cGUiLCJwcmltaXRpdmVUeXBlIjoibnVtYmVyIn0sImlzT3B0aW9uYWwiOmZhbHNlfV0sInN1cGVyVHlwZXMiOltdfV0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJ0eXBlcyI6W10sInVzZWRHcmFtbWFycyI6W119YCkpLCJSYWRhckdyYW1tYXIiKSxtemU9eHQoKCk9Pkd1ZT8/KEd1ZT1IYyhgeyIkdHlwZSI6IkdyYW1tYXIiLCJpc0RlY2xhcmVkIjp0cnVlLCJuYW1lIjoiVHJlZW1hcCIsInJ1bGVzIjpbeyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJmcmFnbWVudCI6dHJ1ZSwibmFtZSI6IlRpdGxlQW5kQWNjZXNzaWJpbGl0aWVzIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiYWNjRGVzY3IiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyIn0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJhY2NUaXRsZSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDMifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6InRpdGxlIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNANCJ9LCJhcmd1bWVudHMiOltdfX1dLCJjYXJkaW5hbGl0eSI6IisifSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJCT09MRUFOIiwidHlwZSI6eyIkdHlwZSI6IlJldHVyblR5cGUiLCJuYW1lIjoiYm9vbGVhbiJ9LCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiVGVybWluYWxBbHRlcm5hdGl2ZXMiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJDaGFyYWN0ZXJSYW5nZSIsImxlZnQiOnsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJ0cnVlIn19LHsiJHR5cGUiOiJDaGFyYWN0ZXJSYW5nZSIsImxlZnQiOnsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJmYWxzZSJ9fV19LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiQUNDX0RFU0NSIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSphY2NEZXNjcig/OltcXFxcdCBdKjooW15cXFxcblxcXFxyXSo/KD89JSUpfFteXFxcXG5cXFxccl0qKXxcXFxccyp7KFtefV0qKX0pLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiQUNDX1RJVExFIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bXFxcXHQgXSphY2NUaXRsZVtcXFxcdCBdKjooPzpbXlxcXFxuXFxcXHJdKj8oPz0lJSl8W15cXFxcblxcXFxyXSopLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiVElUTEUiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1tcXFxcdCBdKnRpdGxlKD86W1xcXFx0IF1bXlxcXFxuXFxcXHJdKj8oPz0lJSl8W1xcXFx0IF1bXlxcXFxuXFxcXHJdKnwpLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwiZW50cnkiOnRydWUsIm5hbWUiOiJUcmVlbWFwIiwicmV0dXJuVHlwZSI6eyIkcmVmIjoiIy9pbnRlcmZhY2VzQDQifSwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDYifSwiYXJndW1lbnRzIjpbXX0seyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AwIn0sImFyZ3VtZW50cyI6W119LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6IlRyZWVtYXBSb3dzIiwib3BlcmF0b3IiOiIrPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE0In0sImFyZ3VtZW50cyI6W119fV0sImNhcmRpbmFsaXR5IjoiKiJ9XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiVFJFRU1BUF9LRVlXT1JEIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlRlcm1pbmFsQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiQ2hhcmFjdGVyUmFuZ2UiLCJsZWZ0Ijp7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoidHJlZW1hcC1iZXRhIn19LHsiJHR5cGUiOiJDaGFyYWN0ZXJSYW5nZSIsImxlZnQiOnsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiJ0cmVlbWFwIn19XX0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJDTEFTU19ERUYiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL2NsYXNzRGVmXFxcXHMrKFthLXpBLVpfXVthLXpBLVowLTlfXSspKD86XFxcXHMrKFteO1xcXFxyXFxcXG5dKikpPyg/OjspPy8ifSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IlNUWUxFX1NFUEFSQVRPUiIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJDaGFyYWN0ZXJSYW5nZSIsImxlZnQiOnsiJHR5cGUiOiJLZXl3b3JkIiwidmFsdWUiOiI6OjoifX0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJTRVBBUkFUT1IiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiQ2hhcmFjdGVyUmFuZ2UiLCJsZWZ0Ijp7IiR0eXBlIjoiS2V5d29yZCIsInZhbHVlIjoiOiJ9fSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW4iOmZhbHNlfSx7IiR0eXBlIjoiVGVybWluYWxSdWxlIiwibmFtZSI6IkNPTU1BIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IkNoYXJhY3RlclJhbmdlIiwibGVmdCI6eyIkdHlwZSI6IktleXdvcmQiLCJ2YWx1ZSI6IiwifX0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6IldTIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bIFxcXFx0XSsvIn0sImZyYWdtZW50IjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6Ik1MX0NPTU1FTlQiLCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiUmVnZXhUb2tlbiIsInJlZ2V4IjoiL1xcXFwlXFxcXCVbXlxcXFxuXSovIn0sImZyYWdtZW50IjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsImhpZGRlbiI6dHJ1ZSwibmFtZSI6Ik5MIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9cXFxccj9cXFxcbi8ifSwiZnJhZ21lbnQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJUcmVlbWFwUm93IiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJpbmRlbnQiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxOSJ9LCJhcmd1bWVudHMiOltdfSwiY2FyZGluYWxpdHkiOiI/In0seyIkdHlwZSI6IkFsdGVybmF0aXZlcyIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiaXRlbSIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE2In0sImFyZ3VtZW50cyI6W119fSx7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE1In0sImFyZ3VtZW50cyI6W119XX1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJDbGFzc0RlZiIsImRhdGFUeXBlIjoic3RyaW5nIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A3In0sImFyZ3VtZW50cyI6W119LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6Ikl0ZW0iLCJyZXR1cm5UeXBlIjp7IiRyZWYiOiIjL2ludGVyZmFjZXNAMCJ9LCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDE4In0sImFyZ3VtZW50cyI6W119LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTcifSwiYXJndW1lbnRzIjpbXX1dfSwiZGVmaW5lc0hpZGRlblRva2VucyI6ZmFsc2UsImVudHJ5IjpmYWxzZSwiZnJhZ21lbnQiOmZhbHNlLCJoaWRkZW5Ub2tlbnMiOltdLCJwYXJhbWV0ZXJzIjpbXSwid2lsZGNhcmQiOmZhbHNlfSx7IiR0eXBlIjoiUGFyc2VyUnVsZSIsIm5hbWUiOiJTZWN0aW9uIiwicmV0dXJuVHlwZSI6eyIkcmVmIjoiIy9pbnRlcmZhY2VzQDEifSwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiQXNzaWdubWVudCIsImZlYXR1cmUiOiJuYW1lIiwib3BlcmF0b3IiOiI9IiwidGVybWluYWwiOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMjMifSwiYXJndW1lbnRzIjpbXX19LHsiJHR5cGUiOiJHcm91cCIsImVsZW1lbnRzIjpbeyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0A4In0sImFyZ3VtZW50cyI6W119LHsiJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6ImNsYXNzU2VsZWN0b3IiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyMCJ9LCJhcmd1bWVudHMiOltdfX1dLCJjYXJkaW5hbGl0eSI6Ij8ifV19LCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiZW50cnkiOmZhbHNlLCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlblRva2VucyI6W10sInBhcmFtZXRlcnMiOltdLCJ3aWxkY2FyZCI6ZmFsc2V9LHsiJHR5cGUiOiJQYXJzZXJSdWxlIiwibmFtZSI6IkxlYWYiLCJyZXR1cm5UeXBlIjp7IiRyZWYiOiIjL2ludGVyZmFjZXNAMiJ9LCJkZWZpbml0aW9uIjp7IiR0eXBlIjoiR3JvdXAiLCJlbGVtZW50cyI6W3siJHR5cGUiOiJBc3NpZ25tZW50IiwiZmVhdHVyZSI6Im5hbWUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyMyJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxOSJ9LCJhcmd1bWVudHMiOltdLCJjYXJkaW5hbGl0eSI6Ij8ifSx7IiR0eXBlIjoiQWx0ZXJuYXRpdmVzIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDkifSwiYXJndW1lbnRzIjpbXX0seyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AxMCJ9LCJhcmd1bWVudHMiOltdfV19LHsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMTkifSwiYXJndW1lbnRzIjpbXSwiY2FyZGluYWxpdHkiOiI/In0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoidmFsdWUiLCJvcGVyYXRvciI6Ij0iLCJ0ZXJtaW5hbCI6eyIkdHlwZSI6IlJ1bGVDYWxsIiwicnVsZSI6eyIkcmVmIjoiIy9ydWxlc0AyMiJ9LCJhcmd1bWVudHMiOltdfX0seyIkdHlwZSI6Ikdyb3VwIiwiZWxlbWVudHMiOlt7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDgifSwiYXJndW1lbnRzIjpbXX0seyIkdHlwZSI6IkFzc2lnbm1lbnQiLCJmZWF0dXJlIjoiY2xhc3NTZWxlY3RvciIsIm9wZXJhdG9yIjoiPSIsInRlcm1pbmFsIjp7IiR0eXBlIjoiUnVsZUNhbGwiLCJydWxlIjp7IiRyZWYiOiIjL3J1bGVzQDIwIn0sImFyZ3VtZW50cyI6W119fV0sImNhcmRpbmFsaXR5IjoiPyJ9XX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJJTkRFTlRBVElPTiIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvWyBcXFxcdF17MSx9LyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiSUQyIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9bYS16QS1aX11bYS16QS1aMC05X10qLyJ9LCJmcmFnbWVudCI6ZmFsc2UsImhpZGRlbiI6ZmFsc2V9LHsiJHR5cGUiOiJUZXJtaW5hbFJ1bGUiLCJuYW1lIjoiTlVNQkVSMiIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSZWdleFRva2VuIiwicmVnZXgiOiIvWzAtOV9cXFxcLlxcXFwsXSsvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX0seyIkdHlwZSI6IlBhcnNlclJ1bGUiLCJuYW1lIjoiTXlOdW1iZXIiLCJkYXRhVHlwZSI6Im51bWJlciIsImRlZmluaXRpb24iOnsiJHR5cGUiOiJSdWxlQ2FsbCIsInJ1bGUiOnsiJHJlZiI6IiMvcnVsZXNAMjEifSwiYXJndW1lbnRzIjpbXX0sImRlZmluZXNIaWRkZW5Ub2tlbnMiOmZhbHNlLCJlbnRyeSI6ZmFsc2UsImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwicGFyYW1ldGVycyI6W10sIndpbGRjYXJkIjpmYWxzZX0seyIkdHlwZSI6IlRlcm1pbmFsUnVsZSIsIm5hbWUiOiJTVFJJTkcyIiwiZGVmaW5pdGlvbiI6eyIkdHlwZSI6IlJlZ2V4VG9rZW4iLCJyZWdleCI6Ii9cXCJbXlxcIl0qXFwifCdbXiddKicvIn0sImZyYWdtZW50IjpmYWxzZSwiaGlkZGVuIjpmYWxzZX1dLCJpbnRlcmZhY2VzIjpbeyIkdHlwZSI6IkludGVyZmFjZSIsIm5hbWUiOiJJdGVtIiwiYXR0cmlidXRlcyI6W3siJHR5cGUiOiJUeXBlQXR0cmlidXRlIiwibmFtZSI6Im5hbWUiLCJ0eXBlIjp7IiR0eXBlIjoiU2ltcGxlVHlwZSIsInByaW1pdGl2ZVR5cGUiOiJzdHJpbmcifSwiaXNPcHRpb25hbCI6ZmFsc2V9LHsiJHR5cGUiOiJUeXBlQXR0cmlidXRlIiwibmFtZSI6ImNsYXNzU2VsZWN0b3IiLCJpc09wdGlvbmFsIjp0cnVlLCJ0eXBlIjp7IiR0eXBlIjoiU2ltcGxlVHlwZSIsInByaW1pdGl2ZVR5cGUiOiJzdHJpbmcifX1dLCJzdXBlclR5cGVzIjpbXX0seyIkdHlwZSI6IkludGVyZmFjZSIsIm5hbWUiOiJTZWN0aW9uIiwic3VwZXJUeXBlcyI6W3siJHJlZiI6IiMvaW50ZXJmYWNlc0AwIn1dLCJhdHRyaWJ1dGVzIjpbXX0seyIkdHlwZSI6IkludGVyZmFjZSIsIm5hbWUiOiJMZWFmIiwic3VwZXJUeXBlcyI6W3siJHJlZiI6IiMvaW50ZXJmYWNlc0AwIn1dLCJhdHRyaWJ1dGVzIjpbeyIkdHlwZSI6IlR5cGVBdHRyaWJ1dGUiLCJuYW1lIjoidmFsdWUiLCJ0eXBlIjp7IiR0eXBlIjoiU2ltcGxlVHlwZSIsInByaW1pdGl2ZVR5cGUiOiJudW1iZXIifSwiaXNPcHRpb25hbCI6ZmFsc2V9XX0seyIkdHlwZSI6IkludGVyZmFjZSIsIm5hbWUiOiJDbGFzc0RlZlN0YXRlbWVudCIsImF0dHJpYnV0ZXMiOlt7IiR0eXBlIjoiVHlwZUF0dHJpYnV0ZSIsIm5hbWUiOiJjbGFzc05hbWUiLCJ0eXBlIjp7IiR0eXBlIjoiU2ltcGxlVHlwZSIsInByaW1pdGl2ZVR5cGUiOiJzdHJpbmcifSwiaXNPcHRpb25hbCI6ZmFsc2V9LHsiJHR5cGUiOiJUeXBlQXR0cmlidXRlIiwibmFtZSI6InN0eWxlVGV4dCIsInR5cGUiOnsiJHR5cGUiOiJTaW1wbGVUeXBlIiwicHJpbWl0aXZlVHlwZSI6InN0cmluZyJ9LCJpc09wdGlvbmFsIjpmYWxzZX1dLCJzdXBlclR5cGVzIjpbXX0seyIkdHlwZSI6IkludGVyZmFjZSIsIm5hbWUiOiJUcmVlbWFwIiwiYXR0cmlidXRlcyI6W3siJHR5cGUiOiJUeXBlQXR0cmlidXRlIiwibmFtZSI6IlRyZWVtYXBSb3dzIiwidHlwZSI6eyIkdHlwZSI6IkFycmF5VHlwZSIsImVsZW1lbnRUeXBlIjp7IiR0eXBlIjoiU2ltcGxlVHlwZSIsInR5cGVSZWYiOnsiJHJlZiI6IiMvcnVsZXNAMTQifX19LCJpc09wdGlvbmFsIjpmYWxzZX0seyIkdHlwZSI6IlR5cGVBdHRyaWJ1dGUiLCJuYW1lIjoidGl0bGUiLCJpc09wdGlvbmFsIjp0cnVlLCJ0eXBlIjp7IiR0eXBlIjoiU2ltcGxlVHlwZSIsInByaW1pdGl2ZVR5cGUiOiJzdHJpbmcifX0seyIkdHlwZSI6IlR5cGVBdHRyaWJ1dGUiLCJuYW1lIjoiYWNjVGl0bGUiLCJpc09wdGlvbmFsIjp0cnVlLCJ0eXBlIjp7IiR0eXBlIjoiU2ltcGxlVHlwZSIsInByaW1pdGl2ZVR5cGUiOiJzdHJpbmcifX0seyIkdHlwZSI6IlR5cGVBdHRyaWJ1dGUiLCJuYW1lIjoiYWNjRGVzY3IiLCJpc09wdGlvbmFsIjp0cnVlLCJ0eXBlIjp7IiR0eXBlIjoiU2ltcGxlVHlwZSIsInByaW1pdGl2ZVR5cGUiOiJzdHJpbmcifX1dLCJzdXBlclR5cGVzIjpbXX1dLCJkZWZpbmVzSGlkZGVuVG9rZW5zIjpmYWxzZSwiaGlkZGVuVG9rZW5zIjpbXSwiaW1wb3J0cyI6W10sInR5cGVzIjpbXSwidXNlZEdyYW1tYXJzIjpbXSwiJGNvbW1lbnQiOiIvKipcXG4gKiBUcmVlbWFwIGdyYW1tYXIgZm9yIExhbmdpdW1cXG4gKiBDb252ZXJ0ZWQgZnJvbSBtaW5kbWFwIGdyYW1tYXJcXG4gKlxcbiAqIFRoZSBNTF9DT01NRU5UIGFuZCBOTCBoaWRkZW4gdGVybWluYWxzIGhhbmRsZSB3aGl0ZXNwYWNlLCBjb21tZW50cywgYW5kIG5ld2xpbmVzXFxuICogYmVmb3JlIHRoZSB0cmVlbWFwIGtleXdvcmQsIGFsbG93aW5nIGZvciBlbXB0eSBsaW5lcyBhbmQgY29tbWVudHMgYmVmb3JlIHRoZVxcbiAqIHRyZWVtYXAgZGVjbGFyYXRpb24uXFxuICovIn1gKSksIlRyZWVtYXBHcmFtbWFyIiksZ3plPXtsYW5ndWFnZUlkOiJpbmZvIixmaWxlRXh0ZW5zaW9uczpbIi5tbWQiLCIubWVybWFpZCJdLGNhc2VJbnNlbnNpdGl2ZTohMSxtb2RlOiJwcm9kdWN0aW9uIn0seXplPXtsYW5ndWFnZUlkOiJwYWNrZXQiLGZpbGVFeHRlbnNpb25zOlsiLm1tZCIsIi5tZXJtYWlkIl0sY2FzZUluc2Vuc2l0aXZlOiExLG1vZGU6InByb2R1Y3Rpb24ifSx2emU9e2xhbmd1YWdlSWQ6InBpZSIsZmlsZUV4dGVuc2lvbnM6WyIubW1kIiwiLm1lcm1haWQiXSxjYXNlSW5zZW5zaXRpdmU6ITEsbW9kZToicHJvZHVjdGlvbiJ9LHh6ZT17bGFuZ3VhZ2VJZDoiYXJjaGl0ZWN0dXJlIixmaWxlRXh0ZW5zaW9uczpbIi5tbWQiLCIubWVybWFpZCJdLGNhc2VJbnNlbnNpdGl2ZTohMSxtb2RlOiJwcm9kdWN0aW9uIn0sYnplPXtsYW5ndWFnZUlkOiJnaXRHcmFwaCIsZmlsZUV4dGVuc2lvbnM6WyIubW1kIiwiLm1lcm1haWQiXSxjYXNlSW5zZW5zaXRpdmU6ITEsbW9kZToicHJvZHVjdGlvbiJ9LFR6ZT17bGFuZ3VhZ2VJZDoicmFkYXIiLGZpbGVFeHRlbnNpb25zOlsiLm1tZCIsIi5tZXJtYWlkIl0sY2FzZUluc2Vuc2l0aXZlOiExLG1vZGU6InByb2R1Y3Rpb24ifSx3emU9e2xhbmd1YWdlSWQ6InRyZWVtYXAiLGZpbGVFeHRlbnNpb25zOlsiLm1tZCIsIi5tZXJtYWlkIl0sY2FzZUluc2Vuc2l0aXZlOiExLG1vZGU6InByb2R1Y3Rpb24ifSx5cz17QXN0UmVmbGVjdGlvbjp4dCgoKT0+bmV3IEp1ZSwiQXN0UmVmbGVjdGlvbiIpfSxkTz17R3JhbW1hcjp4dCgoKT0+Y3plKCksIkdyYW1tYXIiKSxMYW5ndWFnZU1ldGFEYXRhOnh0KCgpPT5nemUsIkxhbmd1YWdlTWV0YURhdGEiKSxwYXJzZXI6e319LHBPPXtHcmFtbWFyOnh0KCgpPT51emUoKSwiR3JhbW1hciIpLExhbmd1YWdlTWV0YURhdGE6eHQoKCk9Pnl6ZSwiTGFuZ3VhZ2VNZXRhRGF0YSIpLHBhcnNlcjp7fX0sbU89e0dyYW1tYXI6eHQoKCk9Pmh6ZSgpLCJHcmFtbWFyIiksTGFuZ3VhZ2VNZXRhRGF0YTp4dCgoKT0+dnplLCJMYW5ndWFnZU1ldGFEYXRhIikscGFyc2VyOnt9fSxnTz17R3JhbW1hcjp4dCgoKT0+ZnplKCksIkdyYW1tYXIiKSxMYW5ndWFnZU1ldGFEYXRhOnh0KCgpPT54emUsIkxhbmd1YWdlTWV0YURhdGEiKSxwYXJzZXI6e319LHlPPXtHcmFtbWFyOnh0KCgpPT5kemUoKSwiR3JhbW1hciIpLExhbmd1YWdlTWV0YURhdGE6eHQoKCk9PmJ6ZSwiTGFuZ3VhZ2VNZXRhRGF0YSIpLHBhcnNlcjp7fX0sdk89e0dyYW1tYXI6eHQoKCk9PnB6ZSgpLCJHcmFtbWFyIiksTGFuZ3VhZ2VNZXRhRGF0YTp4dCgoKT0+VHplLCJMYW5ndWFnZU1ldGFEYXRhIikscGFyc2VyOnt9fSx4Tz17R3JhbW1hcjp4dCgoKT0+bXplKCksIkdyYW1tYXIiKSxMYW5ndWFnZU1ldGFEYXRhOnh0KCgpPT53emUsIkxhbmd1YWdlTWV0YURhdGEiKSxwYXJzZXI6e319LGt6ZT0vYWNjRGVzY3IoPzpbXHQgXSo6KFteXG5ccl0qKXxccyp7KFtefV0qKX0pLyxFemU9L2FjY1RpdGxlW1x0IF0qOihbXlxuXHJdKikvLFN6ZT0vdGl0bGUoW1x0IF1bXlxuXHJdKnwpLyxDemU9e0FDQ19ERVNDUjpremUsQUNDX1RJVExFOkV6ZSxUSVRMRTpTemV9LHhmPWNsYXNzIGV4dGVuZHMgQXB7c3RhdGlje28odGhpcywiQWJzdHJhY3RNZXJtYWlkVmFsdWVDb252ZXJ0ZXIiKX1zdGF0aWN7eHQodGhpcywiQWJzdHJhY3RNZXJtYWlkVmFsdWVDb252ZXJ0ZXIiKX1ydW5Db252ZXJ0ZXIodCxlLHIpe2xldCBuPXRoaXMucnVuQ29tbW9uQ29udmVydGVyKHQsZSxyKTtyZXR1cm4gbj09PXZvaWQgMCYmKG49dGhpcy5ydW5DdXN0b21Db252ZXJ0ZXIodCxlLHIpKSxuPT09dm9pZCAwP3N1cGVyLnJ1bkNvbnZlcnRlcih0LGUscik6bn1ydW5Db21tb25Db252ZXJ0ZXIodCxlLHIpe2xldCBuPUN6ZVt0Lm5hbWVdO2lmKG49PT12b2lkIDApcmV0dXJuO2xldCBpPW4uZXhlYyhlKTtpZihpIT09bnVsbCl7aWYoaVsxXSE9PXZvaWQgMClyZXR1cm4gaVsxXS50cmltKCkucmVwbGFjZSgvW1x0IF17Mix9L2dtLCIgIik7aWYoaVsyXSE9PXZvaWQgMClyZXR1cm4gaVsyXS5yZXBsYWNlKC9eXHMqL2dtLCIiKS5yZXBsYWNlKC9ccyskL2dtLCIiKS5yZXBsYWNlKC9bXHQgXXsyLH0vZ20sIiAiKS5yZXBsYWNlKC9bXG5ccl17Mix9L2dtLGAKYCl9fX0sS3U9Y2xhc3MgZXh0ZW5kcyB4ZntzdGF0aWN7byh0aGlzLCJDb21tb25WYWx1ZUNvbnZlcnRlciIpfXN0YXRpY3t4dCh0aGlzLCJDb21tb25WYWx1ZUNvbnZlcnRlciIpfXJ1bkN1c3RvbUNvbnZlcnRlcih0LGUscil7fX0sR2E9Y2xhc3MgZXh0ZW5kcyBqdXtzdGF0aWN7byh0aGlzLCJBYnN0cmFjdE1lcm1haWRUb2tlbkJ1aWxkZXIiKX1zdGF0aWN7eHQodGhpcywiQWJzdHJhY3RNZXJtYWlkVG9rZW5CdWlsZGVyIil9Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLmtleXdvcmRzPW5ldyBTZXQodCl9YnVpbGRLZXl3b3JkVG9rZW5zKHQsZSxyKXtsZXQgbj1zdXBlci5idWlsZEtleXdvcmRUb2tlbnModCxlLHIpO3JldHVybiBuLmZvckVhY2goaT0+e3RoaXMua2V5d29yZHMuaGFzKGkubmFtZSkmJmkuUEFUVEVSTiE9PXZvaWQgMCYmKGkuUEFUVEVSTj1uZXcgUmVnRXhwKGkuUEFUVEVSTi50b1N0cmluZygpKyIoPzooPz0lJSl8KD8hXFxTKSkiKSl9KSxufX0sQXplPWNsYXNzIGV4dGVuZHMgR2F7c3RhdGlje28odGhpcywiQ29tbW9uVG9rZW5CdWlsZGVyIil9c3RhdGlje3h0KHRoaXMsIkNvbW1vblRva2VuQnVpbGRlciIpfX19KTtmdW5jdGlvbiBoUyh0PWJhKXtsZXQgZT1Hbih4YSh0KSx5cykscj1Hbih2YSh7c2hhcmVkOmV9KSx5Tyx1Uyk7cmV0dXJuIGUuU2VydmljZVJlZ2lzdHJ5LnJlZ2lzdGVyKHIpLHtzaGFyZWQ6ZSxHaXRHcmFwaDpyfX12YXIgX3plLHVTLGJPPU4oKCk9PnsidXNlIHN0cmljdCI7VmEoKTtwbygpO196ZT1jbGFzcyBleHRlbmRzIEdhe3N0YXRpY3tvKHRoaXMsIkdpdEdyYXBoVG9rZW5CdWlsZGVyIil9c3RhdGlje3h0KHRoaXMsIkdpdEdyYXBoVG9rZW5CdWlsZGVyIil9Y29uc3RydWN0b3IoKXtzdXBlcihbImdpdEdyYXBoIl0pfX0sdVM9e3BhcnNlcjp7VG9rZW5CdWlsZGVyOnh0KCgpPT5uZXcgX3plLCJUb2tlbkJ1aWxkZXIiKSxWYWx1ZUNvbnZlcnRlcjp4dCgoKT0+bmV3IEt1LCJWYWx1ZUNvbnZlcnRlciIpfX07byhoUywiY3JlYXRlR2l0R3JhcGhTZXJ2aWNlcyIpO3h0KGhTLCJjcmVhdGVHaXRHcmFwaFNlcnZpY2VzIil9KTtmdW5jdGlvbiBkUyh0PWJhKXtsZXQgZT1Hbih4YSh0KSx5cykscj1Hbih2YSh7c2hhcmVkOmV9KSxkTyxmUyk7cmV0dXJuIGUuU2VydmljZVJlZ2lzdHJ5LnJlZ2lzdGVyKHIpLHtzaGFyZWQ6ZSxJbmZvOnJ9fXZhciBEemUsZlMsVE89TigoKT0+eyJ1c2Ugc3RyaWN0IjtWYSgpO3BvKCk7RHplPWNsYXNzIGV4dGVuZHMgR2F7c3RhdGlje28odGhpcywiSW5mb1Rva2VuQnVpbGRlciIpfXN0YXRpY3t4dCh0aGlzLCJJbmZvVG9rZW5CdWlsZGVyIil9Y29uc3RydWN0b3IoKXtzdXBlcihbImluZm8iLCJzaG93SW5mbyJdKX19LGZTPXtwYXJzZXI6e1Rva2VuQnVpbGRlcjp4dCgoKT0+bmV3IER6ZSwiVG9rZW5CdWlsZGVyIiksVmFsdWVDb252ZXJ0ZXI6eHQoKCk9Pm5ldyBLdSwiVmFsdWVDb252ZXJ0ZXIiKX19O28oZFMsImNyZWF0ZUluZm9TZXJ2aWNlcyIpO3h0KGRTLCJjcmVhdGVJbmZvU2VydmljZXMiKX0pO2Z1bmN0aW9uIG1TKHQ9YmEpe2xldCBlPUduKHhhKHQpLHlzKSxyPUduKHZhKHtzaGFyZWQ6ZX0pLHBPLHBTKTtyZXR1cm4gZS5TZXJ2aWNlUmVnaXN0cnkucmVnaXN0ZXIocikse3NoYXJlZDplLFBhY2tldDpyfX12YXIgTHplLHBTLHdPPU4oKCk9PnsidXNlIHN0cmljdCI7VmEoKTtwbygpO0x6ZT1jbGFzcyBleHRlbmRzIEdhe3N0YXRpY3tvKHRoaXMsIlBhY2tldFRva2VuQnVpbGRlciIpfXN0YXRpY3t4dCh0aGlzLCJQYWNrZXRUb2tlbkJ1aWxkZXIiKX1jb25zdHJ1Y3Rvcigpe3N1cGVyKFsicGFja2V0Il0pfX0scFM9e3BhcnNlcjp7VG9rZW5CdWlsZGVyOnh0KCgpPT5uZXcgTHplLCJUb2tlbkJ1aWxkZXIiKSxWYWx1ZUNvbnZlcnRlcjp4dCgoKT0+bmV3IEt1LCJWYWx1ZUNvbnZlcnRlciIpfX07byhtUywiY3JlYXRlUGFja2V0U2VydmljZXMiKTt4dChtUywiY3JlYXRlUGFja2V0U2VydmljZXMiKX0pO2Z1bmN0aW9uIHlTKHQ9YmEpe2xldCBlPUduKHhhKHQpLHlzKSxyPUduKHZhKHtzaGFyZWQ6ZX0pLG1PLGdTKTtyZXR1cm4gZS5TZXJ2aWNlUmVnaXN0cnkucmVnaXN0ZXIocikse3NoYXJlZDplLFBpZTpyfX12YXIgUnplLE56ZSxnUyxrTz1OKCgpPT57InVzZSBzdHJpY3QiO1ZhKCk7cG8oKTtSemU9Y2xhc3MgZXh0ZW5kcyBHYXtzdGF0aWN7byh0aGlzLCJQaWVUb2tlbkJ1aWxkZXIiKX1zdGF0aWN7eHQodGhpcywiUGllVG9rZW5CdWlsZGVyIil9Y29uc3RydWN0b3IoKXtzdXBlcihbInBpZSIsInNob3dEYXRhIl0pfX0sTnplPWNsYXNzIGV4dGVuZHMgeGZ7c3RhdGlje28odGhpcywiUGllVmFsdWVDb252ZXJ0ZXIiKX1zdGF0aWN7eHQodGhpcywiUGllVmFsdWVDb252ZXJ0ZXIiKX1ydW5DdXN0b21Db252ZXJ0ZXIodCxlLHIpe2lmKHQubmFtZT09PSJQSUVfU0VDVElPTl9MQUJFTCIpcmV0dXJuIGUucmVwbGFjZSgvIi9nLCIiKS50cmltKCl9fSxnUz17cGFyc2VyOntUb2tlbkJ1aWxkZXI6eHQoKCk9Pm5ldyBSemUsIlRva2VuQnVpbGRlciIpLFZhbHVlQ29udmVydGVyOnh0KCgpPT5uZXcgTnplLCJWYWx1ZUNvbnZlcnRlciIpfX07byh5UywiY3JlYXRlUGllU2VydmljZXMiKTt4dCh5UywiY3JlYXRlUGllU2VydmljZXMiKX0pO2Z1bmN0aW9uIHhTKHQ9YmEpe2xldCBlPUduKHhhKHQpLHlzKSxyPUduKHZhKHtzaGFyZWQ6ZX0pLGdPLHZTKTtyZXR1cm4gZS5TZXJ2aWNlUmVnaXN0cnkucmVnaXN0ZXIocikse3NoYXJlZDplLEFyY2hpdGVjdHVyZTpyfX12YXIgTXplLEl6ZSx2UyxFTz1OKCgpPT57InVzZSBzdHJpY3QiO1ZhKCk7cG8oKTtNemU9Y2xhc3MgZXh0ZW5kcyBHYXtzdGF0aWN7byh0aGlzLCJBcmNoaXRlY3R1cmVUb2tlbkJ1aWxkZXIiKX1zdGF0aWN7eHQodGhpcywiQXJjaGl0ZWN0dXJlVG9rZW5CdWlsZGVyIil9Y29uc3RydWN0b3IoKXtzdXBlcihbImFyY2hpdGVjdHVyZSJdKX19LEl6ZT1jbGFzcyBleHRlbmRzIHhme3N0YXRpY3tvKHRoaXMsIkFyY2hpdGVjdHVyZVZhbHVlQ29udmVydGVyIil9c3RhdGlje3h0KHRoaXMsIkFyY2hpdGVjdHVyZVZhbHVlQ29udmVydGVyIil9cnVuQ3VzdG9tQ29udmVydGVyKHQsZSxyKXtpZih0Lm5hbWU9PT0iQVJDSF9JQ09OIilyZXR1cm4gZS5yZXBsYWNlKC9bKCldL2csIiIpLnRyaW0oKTtpZih0Lm5hbWU9PT0iQVJDSF9URVhUX0lDT04iKXJldHVybiBlLnJlcGxhY2UoL1siKCldL2csIiIpO2lmKHQubmFtZT09PSJBUkNIX1RJVExFIilyZXR1cm4gZS5yZXBsYWNlKC9bW1xdXS9nLCIiKS50cmltKCl9fSx2Uz17cGFyc2VyOntUb2tlbkJ1aWxkZXI6eHQoKCk9Pm5ldyBNemUsIlRva2VuQnVpbGRlciIpLFZhbHVlQ29udmVydGVyOnh0KCgpPT5uZXcgSXplLCJWYWx1ZUNvbnZlcnRlciIpfX07byh4UywiY3JlYXRlQXJjaGl0ZWN0dXJlU2VydmljZXMiKTt4dCh4UywiY3JlYXRlQXJjaGl0ZWN0dXJlU2VydmljZXMiKX0pO2Z1bmN0aW9uIFRTKHQ9YmEpe2xldCBlPUduKHhhKHQpLHlzKSxyPUduKHZhKHtzaGFyZWQ6ZX0pLHZPLGJTKTtyZXR1cm4gZS5TZXJ2aWNlUmVnaXN0cnkucmVnaXN0ZXIocikse3NoYXJlZDplLFJhZGFyOnJ9fXZhciBPemUsYlMsU089TigoKT0+eyJ1c2Ugc3RyaWN0IjtWYSgpO3BvKCk7T3plPWNsYXNzIGV4dGVuZHMgR2F7c3RhdGlje28odGhpcywiUmFkYXJUb2tlbkJ1aWxkZXIiKX1zdGF0aWN7eHQodGhpcywiUmFkYXJUb2tlbkJ1aWxkZXIiKX1jb25zdHJ1Y3Rvcigpe3N1cGVyKFsicmFkYXItYmV0YSJdKX19LGJTPXtwYXJzZXI6e1Rva2VuQnVpbGRlcjp4dCgoKT0+bmV3IE96ZSwiVG9rZW5CdWlsZGVyIiksVmFsdWVDb252ZXJ0ZXI6eHQoKCk9Pm5ldyBLdSwiVmFsdWVDb252ZXJ0ZXIiKX19O28oVFMsImNyZWF0ZVJhZGFyU2VydmljZXMiKTt4dChUUywiY3JlYXRlUmFkYXJTZXJ2aWNlcyIpfSk7ZnVuY3Rpb24gZWhlKHQpe2xldCBlPXQudmFsaWRhdGlvbi5UcmVlbWFwVmFsaWRhdG9yLHI9dC52YWxpZGF0aW9uLlZhbGlkYXRpb25SZWdpc3RyeTtpZihyKXtsZXQgbj17VHJlZW1hcDplLmNoZWNrU2luZ2xlUm9vdC5iaW5kKGUpfTtyLnJlZ2lzdGVyKG4sZSl9fWZ1bmN0aW9uIGtTKHQ9YmEpe2xldCBlPUduKHhhKHQpLHlzKSxyPUduKHZhKHtzaGFyZWQ6ZX0pLHhPLHdTKTtyZXR1cm4gZS5TZXJ2aWNlUmVnaXN0cnkucmVnaXN0ZXIociksZWhlKHIpLHtzaGFyZWQ6ZSxUcmVlbWFwOnJ9fXZhciBQemUsQnplLEZ6ZSwkemUsd1MsQ089TigoKT0+eyJ1c2Ugc3RyaWN0IjtWYSgpO3BvKCk7UHplPWNsYXNzIGV4dGVuZHMgR2F7c3RhdGlje28odGhpcywiVHJlZW1hcFRva2VuQnVpbGRlciIpfXN0YXRpY3t4dCh0aGlzLCJUcmVlbWFwVG9rZW5CdWlsZGVyIil9Y29uc3RydWN0b3IoKXtzdXBlcihbInRyZWVtYXAiXSl9fSxCemU9L2NsYXNzRGVmXHMrKFtBLVpfYS16XVx3KykoPzpccysoW15cblxyO10qKSk/Oz8vLEZ6ZT1jbGFzcyBleHRlbmRzIHhme3N0YXRpY3tvKHRoaXMsIlRyZWVtYXBWYWx1ZUNvbnZlcnRlciIpfXN0YXRpY3t4dCh0aGlzLCJUcmVlbWFwVmFsdWVDb252ZXJ0ZXIiKX1ydW5DdXN0b21Db252ZXJ0ZXIodCxlLHIpe2lmKHQubmFtZT09PSJOVU1CRVIyIilyZXR1cm4gcGFyc2VGbG9hdChlLnJlcGxhY2UoLywvZywiIikpO2lmKHQubmFtZT09PSJTRVBBUkFUT1IiKXJldHVybiBlLnN1YnN0cmluZygxLGUubGVuZ3RoLTEpO2lmKHQubmFtZT09PSJTVFJJTkcyIilyZXR1cm4gZS5zdWJzdHJpbmcoMSxlLmxlbmd0aC0xKTtpZih0Lm5hbWU9PT0iSU5ERU5UQVRJT04iKXJldHVybiBlLmxlbmd0aDtpZih0Lm5hbWU9PT0iQ2xhc3NEZWYiKXtpZih0eXBlb2YgZSE9InN0cmluZyIpcmV0dXJuIGU7bGV0IG49QnplLmV4ZWMoZSk7aWYobilyZXR1cm57JHR5cGU6IkNsYXNzRGVmU3RhdGVtZW50IixjbGFzc05hbWU6blsxXSxzdHlsZVRleHQ6blsyXXx8dm9pZCAwfX19fTtvKGVoZSwicmVnaXN0ZXJWYWxpZGF0aW9uQ2hlY2tzIik7eHQoZWhlLCJyZWdpc3RlclZhbGlkYXRpb25DaGVja3MiKTskemU9Y2xhc3N7c3RhdGlje28odGhpcywiVHJlZW1hcFZhbGlkYXRvciIpfXN0YXRpY3t4dCh0aGlzLCJUcmVlbWFwVmFsaWRhdG9yIil9Y2hlY2tTaW5nbGVSb290KHQsZSl7bGV0IHI7Zm9yKGxldCBuIG9mIHQuVHJlZW1hcFJvd3Mpbi5pdGVtJiYocj09PXZvaWQgMCYmbi5pbmRlbnQ9PT12b2lkIDA/cj0wOm4uaW5kZW50PT09dm9pZCAwP2UoImVycm9yIiwiTXVsdGlwbGUgcm9vdCBub2RlcyBhcmUgbm90IGFsbG93ZWQgaW4gYSB0cmVlbWFwLiIse25vZGU6bixwcm9wZXJ0eToiaXRlbSJ9KTpyIT09dm9pZCAwJiZyPj1wYXJzZUludChuLmluZGVudCwxMCkmJmUoImVycm9yIiwiTXVsdGlwbGUgcm9vdCBub2RlcyBhcmUgbm90IGFsbG93ZWQgaW4gYSB0cmVlbWFwLiIse25vZGU6bixwcm9wZXJ0eToiaXRlbSJ9KSl9fSx3Uz17cGFyc2VyOntUb2tlbkJ1aWxkZXI6eHQoKCk9Pm5ldyBQemUsIlRva2VuQnVpbGRlciIpLFZhbHVlQ29udmVydGVyOnh0KCgpPT5uZXcgRnplLCJWYWx1ZUNvbnZlcnRlciIpfSx2YWxpZGF0aW9uOntUcmVlbWFwVmFsaWRhdG9yOnh0KCgpPT5uZXcgJHplLCJUcmVlbWFwVmFsaWRhdG9yIil9fTtvKGtTLCJjcmVhdGVUcmVlbWFwU2VydmljZXMiKTt4dChrUywiY3JlYXRlVHJlZW1hcFNlcnZpY2VzIil9KTt2YXIgdGhlPXt9O3VyKHRoZSx7SW5mb01vZHVsZTooKT0+ZlMsY3JlYXRlSW5mb1NlcnZpY2VzOigpPT5kU30pO3ZhciByaGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtUTygpO1ZhKCl9KTt2YXIgbmhlPXt9O3VyKG5oZSx7UGFja2V0TW9kdWxlOigpPT5wUyxjcmVhdGVQYWNrZXRTZXJ2aWNlczooKT0+bVN9KTt2YXIgaWhlPU4oKCk9PnsidXNlIHN0cmljdCI7d08oKTtWYSgpfSk7dmFyIGFoZT17fTt1cihhaGUse1BpZU1vZHVsZTooKT0+Z1MsY3JlYXRlUGllU2VydmljZXM6KCk9PnlTfSk7dmFyIHNoZT1OKCgpPT57InVzZSBzdHJpY3QiO2tPKCk7VmEoKX0pO3ZhciBvaGU9e307dXIob2hlLHtBcmNoaXRlY3R1cmVNb2R1bGU6KCk9PnZTLGNyZWF0ZUFyY2hpdGVjdHVyZVNlcnZpY2VzOigpPT54U30pO3ZhciBsaGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtFTygpO1ZhKCl9KTt2YXIgY2hlPXt9O3VyKGNoZSx7R2l0R3JhcGhNb2R1bGU6KCk9PnVTLGNyZWF0ZUdpdEdyYXBoU2VydmljZXM6KCk9PmhTfSk7dmFyIHVoZT1OKCgpPT57InVzZSBzdHJpY3QiO2JPKCk7VmEoKX0pO3ZhciBoaGU9e307dXIoaGhlLHtSYWRhck1vZHVsZTooKT0+YlMsY3JlYXRlUmFkYXJTZXJ2aWNlczooKT0+VFN9KTt2YXIgZmhlPU4oKCk9PnsidXNlIHN0cmljdCI7U08oKTtWYSgpfSk7dmFyIGRoZT17fTt1cihkaGUse1RyZWVtYXBNb2R1bGU6KCk9PndTLGNyZWF0ZVRyZWVtYXBTZXJ2aWNlczooKT0+a1N9KTt2YXIgcGhlPU4oKCk9PnsidXNlIHN0cmljdCI7Q08oKTtWYSgpfSk7YXN5bmMgZnVuY3Rpb24gdnModCxlKXtsZXQgcj16emVbdF07aWYoIXIpdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGRpYWdyYW0gdHlwZTogJHt0fWApO1F1W3RdfHxhd2FpdCByKCk7bGV0IGk9UXVbdF0ucGFyc2UoZSk7aWYoaS5sZXhlckVycm9ycy5sZW5ndGg+MHx8aS5wYXJzZXJFcnJvcnMubGVuZ3RoPjApdGhyb3cgbmV3IEd6ZShpKTtyZXR1cm4gaS52YWx1ZX12YXIgUXUsenplLEd6ZSxiZj1OKCgpPT57InVzZSBzdHJpY3QiO2JPKCk7VE8oKTt3TygpO2tPKCk7RU8oKTtTTygpO0NPKCk7VmEoKTtRdT17fSx6emU9e2luZm86eHQoYXN5bmMoKT0+e2xldHtjcmVhdGVJbmZvU2VydmljZXM6dH09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KHJoZSgpLHRoZSkpLGU9dCgpLkluZm8ucGFyc2VyLkxhbmdpdW1QYXJzZXI7UXUuaW5mbz1lfSwiaW5mbyIpLHBhY2tldDp4dChhc3luYygpPT57bGV0e2NyZWF0ZVBhY2tldFNlcnZpY2VzOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihpaGUoKSxuaGUpKSxlPXQoKS5QYWNrZXQucGFyc2VyLkxhbmdpdW1QYXJzZXI7UXUucGFja2V0PWV9LCJwYWNrZXQiKSxwaWU6eHQoYXN5bmMoKT0+e2xldHtjcmVhdGVQaWVTZXJ2aWNlczp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oc2hlKCksYWhlKSksZT10KCkuUGllLnBhcnNlci5MYW5naXVtUGFyc2VyO1F1LnBpZT1lfSwicGllIiksYXJjaGl0ZWN0dXJlOnh0KGFzeW5jKCk9PntsZXR7Y3JlYXRlQXJjaGl0ZWN0dXJlU2VydmljZXM6dH09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KGxoZSgpLG9oZSkpLGU9dCgpLkFyY2hpdGVjdHVyZS5wYXJzZXIuTGFuZ2l1bVBhcnNlcjtRdS5hcmNoaXRlY3R1cmU9ZX0sImFyY2hpdGVjdHVyZSIpLGdpdEdyYXBoOnh0KGFzeW5jKCk9PntsZXR7Y3JlYXRlR2l0R3JhcGhTZXJ2aWNlczp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4odWhlKCksY2hlKSksZT10KCkuR2l0R3JhcGgucGFyc2VyLkxhbmdpdW1QYXJzZXI7UXUuZ2l0R3JhcGg9ZX0sImdpdEdyYXBoIikscmFkYXI6eHQoYXN5bmMoKT0+e2xldHtjcmVhdGVSYWRhclNlcnZpY2VzOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihmaGUoKSxoaGUpKSxlPXQoKS5SYWRhci5wYXJzZXIuTGFuZ2l1bVBhcnNlcjtRdS5yYWRhcj1lfSwicmFkYXIiKSx0cmVlbWFwOnh0KGFzeW5jKCk9PntsZXR7Y3JlYXRlVHJlZW1hcFNlcnZpY2VzOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihwaGUoKSxkaGUpKSxlPXQoKS5UcmVlbWFwLnBhcnNlci5MYW5naXVtUGFyc2VyO1F1LnRyZWVtYXA9ZX0sInRyZWVtYXAiKX07byh2cywicGFyc2UiKTt4dCh2cywicGFyc2UiKTtHemU9Y2xhc3MgZXh0ZW5kcyBFcnJvcntzdGF0aWN7byh0aGlzLCJNZXJtYWlkUGFyc2VFcnJvciIpfWNvbnN0cnVjdG9yKHQpe2xldCBlPXQubGV4ZXJFcnJvcnMubWFwKG49Pm4ubWVzc2FnZSkuam9pbihgCmApLHI9dC5wYXJzZXJFcnJvcnMubWFwKG49Pm4ubWVzc2FnZSkuam9pbihgCmApO3N1cGVyKGBQYXJzaW5nIGZhaWxlZDogJHtlfSAke3J9YCksdGhpcy5yZXN1bHQ9dH1zdGF0aWN7eHQodGhpcywiTWVybWFpZFBhcnNlRXJyb3IiKX19fSk7ZnVuY3Rpb24gSm8odCxlKXt0LmFjY0Rlc2NyJiZlLnNldEFjY0Rlc2NyaXB0aW9uPy4odC5hY2NEZXNjciksdC5hY2NUaXRsZSYmZS5zZXRBY2NUaXRsZT8uKHQuYWNjVGl0bGUpLHQudGl0bGUmJmUuc2V0RGlhZ3JhbVRpdGxlPy4odC50aXRsZSl9dmFyIE1wPU4oKCk9PnsidXNlIHN0cmljdCI7byhKbywicG9wdWxhdGVDb21tb25EYiIpfSk7dmFyIEtyLEVTPU4oKCk9PnsidXNlIHN0cmljdCI7S3I9e05PUk1BTDowLFJFVkVSU0U6MSxISUdITElHSFQ6MixNRVJHRTozLENIRVJSWV9QSUNLOjR9fSk7dmFyIFRmLFNTPU4oKCk9PnsidXNlIHN0cmljdCI7VGY9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5pbml0PWU7dGhpcy5yZWNvcmRzPXRoaXMuaW5pdCgpfXN0YXRpY3tvKHRoaXMsIkltcGVyYXRpdmVTdGF0ZSIpfXJlc2V0KCl7dGhpcy5yZWNvcmRzPXRoaXMuaW5pdCgpfX19KTtmdW5jdGlvbiBBTygpe3JldHVybiBSOSh7bGVuZ3RoOjd9KX1mdW5jdGlvbiBVemUodCxlKXtsZXQgcj1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiB0LnJlZHVjZSgobixpKT0+e2xldCBhPWUoaSk7cmV0dXJuIHJbYV18fChyW2FdPSEwLG4ucHVzaChpKSksbn0sW10pfWZ1bmN0aW9uIG1oZSh0LGUscil7bGV0IG49dC5pbmRleE9mKGUpO249PT0tMT90LnB1c2gocik6dC5zcGxpY2UobiwxLHIpfWZ1bmN0aW9uIHloZSh0KXtsZXQgZT10LnJlZHVjZSgoaSxhKT0+aS5zZXE+YS5zZXE/aTphLHRbMF0pLHI9IiI7dC5mb3JFYWNoKGZ1bmN0aW9uKGkpe2k9PT1lP3IrPSIJKiI6cis9Igl8In0pO2xldCBuPVtyLGUuaWQsZS5zZXFdO2ZvcihsZXQgaSBpbiBBdC5yZWNvcmRzLmJyYW5jaGVzKUF0LnJlY29yZHMuYnJhbmNoZXMuZ2V0KGkpPT09ZS5pZCYmbi5wdXNoKGkpO2lmKFguZGVidWcobi5qb2luKCIgIikpLGUucGFyZW50cyYmZS5wYXJlbnRzLmxlbmd0aD09MiYmZS5wYXJlbnRzWzBdJiZlLnBhcmVudHNbMV0pe2xldCBpPUF0LnJlY29yZHMuY29tbWl0cy5nZXQoZS5wYXJlbnRzWzBdKTttaGUodCxlLGkpLGUucGFyZW50c1sxXSYmdC5wdXNoKEF0LnJlY29yZHMuY29tbWl0cy5nZXQoZS5wYXJlbnRzWzFdKSl9ZWxzZXtpZihlLnBhcmVudHMubGVuZ3RoPT0wKXJldHVybjtpZihlLnBhcmVudHNbMF0pe2xldCBpPUF0LnJlY29yZHMuY29tbWl0cy5nZXQoZS5wYXJlbnRzWzBdKTttaGUodCxlLGkpfX10PVV6ZSh0LGk9PmkuaWQpLHloZSh0KX12YXIgVnplLElwLEF0LEh6ZSxXemUscXplLFl6ZSxYemUsanplLEt6ZSxnaGUsUXplLFp6ZSxKemUsZUdlLHRHZSx2aGUsckdlLG5HZSxpR2UsQ1MsX089TigoKT0+eyJ1c2Ugc3RyaWN0Ijt5dCgpO2VyKCk7bWkoKTtwcigpO2NpKCk7RVMoKTtTUygpO19hKCk7VnplPW9yLmdpdEdyYXBoLElwPW8oKCk9PiRuKHsuLi5WemUsLi4udHIoKS5naXRHcmFwaH0pLCJnZXRDb25maWciKSxBdD1uZXcgVGYoKCk9PntsZXQgdD1JcCgpLGU9dC5tYWluQnJhbmNoTmFtZSxyPXQubWFpbkJyYW5jaE9yZGVyO3JldHVybnttYWluQnJhbmNoTmFtZTplLGNvbW1pdHM6bmV3IE1hcCxoZWFkOm51bGwsYnJhbmNoQ29uZmlnOm5ldyBNYXAoW1tlLHtuYW1lOmUsb3JkZXI6cn1dXSksYnJhbmNoZXM6bmV3IE1hcChbW2UsbnVsbF1dKSxjdXJyQnJhbmNoOmUsZGlyZWN0aW9uOiJMUiIsc2VxOjAsb3B0aW9uczp7fX19KTtvKEFPLCJnZXRJRCIpO28oVXplLCJ1bmlxQnkiKTtIemU9byhmdW5jdGlvbih0KXtBdC5yZWNvcmRzLmRpcmVjdGlvbj10fSwic2V0RGlyZWN0aW9uIiksV3plPW8oZnVuY3Rpb24odCl7WC5kZWJ1Zygib3B0aW9ucyBzdHIiLHQpLHQ9dD8udHJpbSgpLHQ9dHx8Int9Ijt0cnl7QXQucmVjb3Jkcy5vcHRpb25zPUpTT04ucGFyc2UodCl9Y2F0Y2goZSl7WC5lcnJvcigiZXJyb3Igd2hpbGUgcGFyc2luZyBnaXRHcmFwaCBvcHRpb25zIixlLm1lc3NhZ2UpfX0sInNldE9wdGlvbnMiKSxxemU9byhmdW5jdGlvbigpe3JldHVybiBBdC5yZWNvcmRzLm9wdGlvbnN9LCJnZXRPcHRpb25zIiksWXplPW8oZnVuY3Rpb24odCl7bGV0IGU9dC5tc2cscj10LmlkLG49dC50eXBlLGk9dC50YWdzO1guaW5mbygiY29tbWl0IixlLHIsbixpKSxYLmRlYnVnKCJFbnRlcmluZyBjb21taXQ6IixlLHIsbixpKTtsZXQgYT1JcCgpO3I9WmUuc2FuaXRpemVUZXh0KHIsYSksZT1aZS5zYW5pdGl6ZVRleHQoZSxhKSxpPWk/Lm1hcChsPT5aZS5zYW5pdGl6ZVRleHQobCxhKSk7bGV0IHM9e2lkOnJ8fEF0LnJlY29yZHMuc2VxKyItIitBTygpLG1lc3NhZ2U6ZSxzZXE6QXQucmVjb3Jkcy5zZXErKyx0eXBlOm4/P0tyLk5PUk1BTCx0YWdzOmk/P1tdLHBhcmVudHM6QXQucmVjb3Jkcy5oZWFkPT1udWxsP1tdOltBdC5yZWNvcmRzLmhlYWQuaWRdLGJyYW5jaDpBdC5yZWNvcmRzLmN1cnJCcmFuY2h9O0F0LnJlY29yZHMuaGVhZD1zLFguaW5mbygibWFpbiBicmFuY2giLGEubWFpbkJyYW5jaE5hbWUpLEF0LnJlY29yZHMuY29tbWl0cy5oYXMocy5pZCkmJlgud2FybihgQ29tbWl0IElEICR7cy5pZH0gYWxyZWFkeSBleGlzdHNgKSxBdC5yZWNvcmRzLmNvbW1pdHMuc2V0KHMuaWQscyksQXQucmVjb3Jkcy5icmFuY2hlcy5zZXQoQXQucmVjb3Jkcy5jdXJyQnJhbmNoLHMuaWQpLFguZGVidWcoImluIHB1c2hDb21taXQgIitzLmlkKX0sImNvbW1pdCIpLFh6ZT1vKGZ1bmN0aW9uKHQpe2xldCBlPXQubmFtZSxyPXQub3JkZXI7aWYoZT1aZS5zYW5pdGl6ZVRleHQoZSxJcCgpKSxBdC5yZWNvcmRzLmJyYW5jaGVzLmhhcyhlKSl0aHJvdyBuZXcgRXJyb3IoYFRyeWluZyB0byBjcmVhdGUgYW4gZXhpc3RpbmcgYnJhbmNoLiAoSGVscDogRWl0aGVyIHVzZSBhIG5ldyBuYW1lIGlmIHlvdSB3YW50IGNyZWF0ZSBhIG5ldyBicmFuY2ggb3IgdHJ5IHVzaW5nICJjaGVja291dCAke2V9IilgKTtBdC5yZWNvcmRzLmJyYW5jaGVzLnNldChlLEF0LnJlY29yZHMuaGVhZCE9bnVsbD9BdC5yZWNvcmRzLmhlYWQuaWQ6bnVsbCksQXQucmVjb3Jkcy5icmFuY2hDb25maWcuc2V0KGUse25hbWU6ZSxvcmRlcjpyfSksZ2hlKGUpLFguZGVidWcoImluIGNyZWF0ZUJyYW5jaCIpfSwiYnJhbmNoIiksanplPW8odD0+e2xldCBlPXQuYnJhbmNoLHI9dC5pZCxuPXQudHlwZSxpPXQudGFncyxhPUlwKCk7ZT1aZS5zYW5pdGl6ZVRleHQoZSxhKSxyJiYocj1aZS5zYW5pdGl6ZVRleHQocixhKSk7bGV0IHM9QXQucmVjb3Jkcy5icmFuY2hlcy5nZXQoQXQucmVjb3Jkcy5jdXJyQnJhbmNoKSxsPUF0LnJlY29yZHMuYnJhbmNoZXMuZ2V0KGUpLHU9cz9BdC5yZWNvcmRzLmNvbW1pdHMuZ2V0KHMpOnZvaWQgMCxoPWw/QXQucmVjb3Jkcy5jb21taXRzLmdldChsKTp2b2lkIDA7aWYodSYmaCYmdS5icmFuY2g9PT1lKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IG1lcmdlIGJyYW5jaCAnJHtlfScgaW50byBpdHNlbGYuYCk7aWYoQXQucmVjb3Jkcy5jdXJyQnJhbmNoPT09ZSl7bGV0IHA9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQ2Fubm90IG1lcmdlIGEgYnJhbmNoIHRvIGl0c2VsZicpO3Rocm93IHAuaGFzaD17dGV4dDpgbWVyZ2UgJHtlfWAsdG9rZW46YG1lcmdlICR7ZX1gLGV4cGVjdGVkOlsiYnJhbmNoIGFiYyJdfSxwfWlmKHU9PT12b2lkIDB8fCF1KXtsZXQgcD1uZXcgRXJyb3IoYEluY29ycmVjdCB1c2FnZSBvZiAibWVyZ2UiLiBDdXJyZW50IGJyYW5jaCAoJHtBdC5yZWNvcmRzLmN1cnJCcmFuY2h9KWhhcyBubyBjb21taXRzYCk7dGhyb3cgcC5oYXNoPXt0ZXh0OmBtZXJnZSAke2V9YCx0b2tlbjpgbWVyZ2UgJHtlfWAsZXhwZWN0ZWQ6WyJjb21taXQiXX0scH1pZighQXQucmVjb3Jkcy5icmFuY2hlcy5oYXMoZSkpe2xldCBwPW5ldyBFcnJvcignSW5jb3JyZWN0IHVzYWdlIG9mICJtZXJnZSIuIEJyYW5jaCB0byBiZSBtZXJnZWQgKCcrZSsiKSBkb2VzIG5vdCBleGlzdCIpO3Rocm93IHAuaGFzaD17dGV4dDpgbWVyZ2UgJHtlfWAsdG9rZW46YG1lcmdlICR7ZX1gLGV4cGVjdGVkOltgYnJhbmNoICR7ZX1gXX0scH1pZihoPT09dm9pZCAwfHwhaCl7bGV0IHA9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQnJhbmNoIHRvIGJlIG1lcmdlZCAoJytlKyIpIGhhcyBubyBjb21taXRzIik7dGhyb3cgcC5oYXNoPXt0ZXh0OmBtZXJnZSAke2V9YCx0b2tlbjpgbWVyZ2UgJHtlfWAsZXhwZWN0ZWQ6WyciY29tbWl0IiddfSxwfWlmKHU9PT1oKXtsZXQgcD1uZXcgRXJyb3IoJ0luY29ycmVjdCB1c2FnZSBvZiAibWVyZ2UiLiBCb3RoIGJyYW5jaGVzIGhhdmUgc2FtZSBoZWFkJyk7dGhyb3cgcC5oYXNoPXt0ZXh0OmBtZXJnZSAke2V9YCx0b2tlbjpgbWVyZ2UgJHtlfWAsZXhwZWN0ZWQ6WyJicmFuY2ggYWJjIl19LHB9aWYociYmQXQucmVjb3Jkcy5jb21taXRzLmhhcyhyKSl7bGV0IHA9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgIm1lcmdlIi4gQ29tbWl0IHdpdGggaWQ6JytyKyIgYWxyZWFkeSBleGlzdHMsIHVzZSBkaWZmZXJlbnQgY3VzdG9tIGlkIik7dGhyb3cgcC5oYXNoPXt0ZXh0OmBtZXJnZSAke2V9ICR7cn0gJHtufSAke2k/LmpvaW4oIiAiKX1gLHRva2VuOmBtZXJnZSAke2V9ICR7cn0gJHtufSAke2k/LmpvaW4oIiAiKX1gLGV4cGVjdGVkOltgbWVyZ2UgJHtlfSAke3J9X1VOSVFVRSAke259ICR7aT8uam9pbigiICIpfWBdfSxwfWxldCBmPWx8fCIiLGQ9e2lkOnJ8fGAke0F0LnJlY29yZHMuc2VxfS0ke0FPKCl9YCxtZXNzYWdlOmBtZXJnZWQgYnJhbmNoICR7ZX0gaW50byAke0F0LnJlY29yZHMuY3VyckJyYW5jaH1gLHNlcTpBdC5yZWNvcmRzLnNlcSsrLHBhcmVudHM6QXQucmVjb3Jkcy5oZWFkPT1udWxsP1tdOltBdC5yZWNvcmRzLmhlYWQuaWQsZl0sYnJhbmNoOkF0LnJlY29yZHMuY3VyckJyYW5jaCx0eXBlOktyLk1FUkdFLGN1c3RvbVR5cGU6bixjdXN0b21JZDohIXIsdGFnczppPz9bXX07QXQucmVjb3Jkcy5oZWFkPWQsQXQucmVjb3Jkcy5jb21taXRzLnNldChkLmlkLGQpLEF0LnJlY29yZHMuYnJhbmNoZXMuc2V0KEF0LnJlY29yZHMuY3VyckJyYW5jaCxkLmlkKSxYLmRlYnVnKEF0LnJlY29yZHMuYnJhbmNoZXMpLFguZGVidWcoImluIG1lcmdlQnJhbmNoIil9LCJtZXJnZSIpLEt6ZT1vKGZ1bmN0aW9uKHQpe2xldCBlPXQuaWQscj10LnRhcmdldElkLG49dC50YWdzLGk9dC5wYXJlbnQ7WC5kZWJ1ZygiRW50ZXJpbmcgY2hlcnJ5UGljazoiLGUscixuKTtsZXQgYT1JcCgpO2lmKGU9WmUuc2FuaXRpemVUZXh0KGUsYSkscj1aZS5zYW5pdGl6ZVRleHQocixhKSxuPW4/Lm1hcCh1PT5aZS5zYW5pdGl6ZVRleHQodSxhKSksaT1aZS5zYW5pdGl6ZVRleHQoaSxhKSwhZXx8IUF0LnJlY29yZHMuY29tbWl0cy5oYXMoZSkpe2xldCB1PW5ldyBFcnJvcignSW5jb3JyZWN0IHVzYWdlIG9mICJjaGVycnlQaWNrIi4gU291cmNlIGNvbW1pdCBpZCBzaG91bGQgZXhpc3QgYW5kIHByb3ZpZGVkJyk7dGhyb3cgdS5oYXNoPXt0ZXh0OmBjaGVycnlQaWNrICR7ZX0gJHtyfWAsdG9rZW46YGNoZXJyeVBpY2sgJHtlfSAke3J9YCxleHBlY3RlZDpbImNoZXJyeS1waWNrIGFiYyJdfSx1fWxldCBzPUF0LnJlY29yZHMuY29tbWl0cy5nZXQoZSk7aWYocz09PXZvaWQgMHx8IXMpdGhyb3cgbmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgImNoZXJyeVBpY2siLiBTb3VyY2UgY29tbWl0IGlkIHNob3VsZCBleGlzdCBhbmQgcHJvdmlkZWQnKTtpZihpJiYhKEFycmF5LmlzQXJyYXkocy5wYXJlbnRzKSYmcy5wYXJlbnRzLmluY2x1ZGVzKGkpKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgb3BlcmF0aW9uOiBUaGUgc3BlY2lmaWVkIHBhcmVudCBjb21taXQgaXMgbm90IGFuIGltbWVkaWF0ZSBwYXJlbnQgb2YgdGhlIGNoZXJyeS1waWNrZWQgY29tbWl0LiIpO2xldCBsPXMuYnJhbmNoO2lmKHMudHlwZT09PUtyLk1FUkdFJiYhaSl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCB1c2FnZSBvZiBjaGVycnktcGljazogSWYgdGhlIHNvdXJjZSBjb21taXQgaXMgYSBtZXJnZSBjb21taXQsIGFuIGltbWVkaWF0ZSBwYXJlbnQgY29tbWl0IG11c3QgYmUgc3BlY2lmaWVkLiIpO2lmKCFyfHwhQXQucmVjb3Jkcy5jb21taXRzLmhhcyhyKSl7aWYobD09PUF0LnJlY29yZHMuY3VyckJyYW5jaCl7bGV0IGQ9bmV3IEVycm9yKCdJbmNvcnJlY3QgdXNhZ2Ugb2YgImNoZXJyeVBpY2siLiBTb3VyY2UgY29tbWl0IGlzIGFscmVhZHkgb24gY3VycmVudCBicmFuY2gnKTt0aHJvdyBkLmhhc2g9e3RleHQ6YGNoZXJyeVBpY2sgJHtlfSAke3J9YCx0b2tlbjpgY2hlcnJ5UGljayAke2V9ICR7cn1gLGV4cGVjdGVkOlsiY2hlcnJ5LXBpY2sgYWJjIl19LGR9bGV0IHU9QXQucmVjb3Jkcy5icmFuY2hlcy5nZXQoQXQucmVjb3Jkcy5jdXJyQnJhbmNoKTtpZih1PT09dm9pZCAwfHwhdSl7bGV0IGQ9bmV3IEVycm9yKGBJbmNvcnJlY3QgdXNhZ2Ugb2YgImNoZXJyeS1waWNrIi4gQ3VycmVudCBicmFuY2ggKCR7QXQucmVjb3Jkcy5jdXJyQnJhbmNofSloYXMgbm8gY29tbWl0c2ApO3Rocm93IGQuaGFzaD17dGV4dDpgY2hlcnJ5UGljayAke2V9ICR7cn1gLHRva2VuOmBjaGVycnlQaWNrICR7ZX0gJHtyfWAsZXhwZWN0ZWQ6WyJjaGVycnktcGljayBhYmMiXX0sZH1sZXQgaD1BdC5yZWNvcmRzLmNvbW1pdHMuZ2V0KHUpO2lmKGg9PT12b2lkIDB8fCFoKXtsZXQgZD1uZXcgRXJyb3IoYEluY29ycmVjdCB1c2FnZSBvZiAiY2hlcnJ5LXBpY2siLiBDdXJyZW50IGJyYW5jaCAoJHtBdC5yZWNvcmRzLmN1cnJCcmFuY2h9KWhhcyBubyBjb21taXRzYCk7dGhyb3cgZC5oYXNoPXt0ZXh0OmBjaGVycnlQaWNrICR7ZX0gJHtyfWAsdG9rZW46YGNoZXJyeVBpY2sgJHtlfSAke3J9YCxleHBlY3RlZDpbImNoZXJyeS1waWNrIGFiYyJdfSxkfWxldCBmPXtpZDpBdC5yZWNvcmRzLnNlcSsiLSIrQU8oKSxtZXNzYWdlOmBjaGVycnktcGlja2VkICR7cz8ubWVzc2FnZX0gaW50byAke0F0LnJlY29yZHMuY3VyckJyYW5jaH1gLHNlcTpBdC5yZWNvcmRzLnNlcSsrLHBhcmVudHM6QXQucmVjb3Jkcy5oZWFkPT1udWxsP1tdOltBdC5yZWNvcmRzLmhlYWQuaWQscy5pZF0sYnJhbmNoOkF0LnJlY29yZHMuY3VyckJyYW5jaCx0eXBlOktyLkNIRVJSWV9QSUNLLHRhZ3M6bj9uLmZpbHRlcihCb29sZWFuKTpbYGNoZXJyeS1waWNrOiR7cy5pZH0ke3MudHlwZT09PUtyLk1FUkdFP2B8cGFyZW50OiR7aX1gOiIifWBdfTtBdC5yZWNvcmRzLmhlYWQ9ZixBdC5yZWNvcmRzLmNvbW1pdHMuc2V0KGYuaWQsZiksQXQucmVjb3Jkcy5icmFuY2hlcy5zZXQoQXQucmVjb3Jkcy5jdXJyQnJhbmNoLGYuaWQpLFguZGVidWcoQXQucmVjb3Jkcy5icmFuY2hlcyksWC5kZWJ1ZygiaW4gY2hlcnJ5UGljayIpfX0sImNoZXJyeVBpY2siKSxnaGU9byhmdW5jdGlvbih0KXtpZih0PVplLnNhbml0aXplVGV4dCh0LElwKCkpLEF0LnJlY29yZHMuYnJhbmNoZXMuaGFzKHQpKXtBdC5yZWNvcmRzLmN1cnJCcmFuY2g9dDtsZXQgZT1BdC5yZWNvcmRzLmJyYW5jaGVzLmdldChBdC5yZWNvcmRzLmN1cnJCcmFuY2gpO2U9PT12b2lkIDB8fCFlP0F0LnJlY29yZHMuaGVhZD1udWxsOkF0LnJlY29yZHMuaGVhZD1BdC5yZWNvcmRzLmNvbW1pdHMuZ2V0KGUpPz9udWxsfWVsc2V7bGV0IGU9bmV3IEVycm9yKGBUcnlpbmcgdG8gY2hlY2tvdXQgYnJhbmNoIHdoaWNoIGlzIG5vdCB5ZXQgY3JlYXRlZC4gKEhlbHAgdHJ5IHVzaW5nICJicmFuY2ggJHt0fSIpYCk7dGhyb3cgZS5oYXNoPXt0ZXh0OmBjaGVja291dCAke3R9YCx0b2tlbjpgY2hlY2tvdXQgJHt0fWAsZXhwZWN0ZWQ6W2BicmFuY2ggJHt0fWBdfSxlfX0sImNoZWNrb3V0Iik7byhtaGUsInVwc2VydCIpO28oeWhlLCJwcmV0dHlQcmludENvbW1pdEhpc3RvcnkiKTtRemU9byhmdW5jdGlvbigpe1guZGVidWcoQXQucmVjb3Jkcy5jb21taXRzKTtsZXQgdD12aGUoKVswXTt5aGUoW3RdKX0sInByZXR0eVByaW50IiksWnplPW8oZnVuY3Rpb24oKXtBdC5yZXNldCgpLGtyKCl9LCJjbGVhciIpLEp6ZT1vKGZ1bmN0aW9uKCl7cmV0dXJuWy4uLkF0LnJlY29yZHMuYnJhbmNoQ29uZmlnLnZhbHVlcygpXS5tYXAoKGUscik9PmUub3JkZXIhPT1udWxsJiZlLm9yZGVyIT09dm9pZCAwP2U6ey4uLmUsb3JkZXI6cGFyc2VGbG9hdChgMC4ke3J9YCl9KS5zb3J0KChlLHIpPT4oZS5vcmRlcj8/MCktKHIub3JkZXI/PzApKS5tYXAoKHtuYW1lOmV9KT0+KHtuYW1lOmV9KSl9LCJnZXRCcmFuY2hlc0FzT2JqQXJyYXkiKSxlR2U9byhmdW5jdGlvbigpe3JldHVybiBBdC5yZWNvcmRzLmJyYW5jaGVzfSwiZ2V0QnJhbmNoZXMiKSx0R2U9byhmdW5jdGlvbigpe3JldHVybiBBdC5yZWNvcmRzLmNvbW1pdHN9LCJnZXRDb21taXRzIiksdmhlPW8oZnVuY3Rpb24oKXtsZXQgdD1bLi4uQXQucmVjb3Jkcy5jb21taXRzLnZhbHVlcygpXTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKGUpe1guZGVidWcoZS5pZCl9KSx0LnNvcnQoKGUscik9PmUuc2VxLXIuc2VxKSx0fSwiZ2V0Q29tbWl0c0FycmF5IiksckdlPW8oZnVuY3Rpb24oKXtyZXR1cm4gQXQucmVjb3Jkcy5jdXJyQnJhbmNofSwiZ2V0Q3VycmVudEJyYW5jaCIpLG5HZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIEF0LnJlY29yZHMuZGlyZWN0aW9ufSwiZ2V0RGlyZWN0aW9uIiksaUdlPW8oZnVuY3Rpb24oKXtyZXR1cm4gQXQucmVjb3Jkcy5oZWFkfSwiZ2V0SGVhZCIpLENTPXtjb21taXRUeXBlOktyLGdldENvbmZpZzpJcCxzZXREaXJlY3Rpb246SHplLHNldE9wdGlvbnM6V3plLGdldE9wdGlvbnM6cXplLGNvbW1pdDpZemUsYnJhbmNoOlh6ZSxtZXJnZTpqemUsY2hlcnJ5UGljazpLemUsY2hlY2tvdXQ6Z2hlLHByZXR0eVByaW50OlF6ZSxjbGVhcjpaemUsZ2V0QnJhbmNoZXNBc09iakFycmF5Okp6ZSxnZXRCcmFuY2hlczplR2UsZ2V0Q29tbWl0czp0R2UsZ2V0Q29tbWl0c0FycmF5OnZoZSxnZXRDdXJyZW50QnJhbmNoOnJHZSxnZXREaXJlY3Rpb246bkdlLGdldEhlYWQ6aUdlLHNldEFjY1RpdGxlOkFyLGdldEFjY1RpdGxlOkRyLGdldEFjY0Rlc2NyaXB0aW9uOlJyLHNldEFjY0Rlc2NyaXB0aW9uOkxyLHNldERpYWdyYW1UaXRsZTpPcixnZXREaWFncmFtVGl0bGU6TnJ9fSk7dmFyIGFHZSxzR2Usb0dlLGxHZSxjR2UsdUdlLGhHZSx4aGUsYmhlPU4oKCk9PnsidXNlIHN0cmljdCI7YmYoKTt5dCgpO01wKCk7X08oKTtFUygpO2FHZT1vKCh0LGUpPT57Sm8odCxlKSx0LmRpciYmZS5zZXREaXJlY3Rpb24odC5kaXIpO2ZvcihsZXQgciBvZiB0LnN0YXRlbWVudHMpc0dlKHIsZSl9LCJwb3B1bGF0ZSIpLHNHZT1vKCh0LGUpPT57bGV0IG49e0NvbW1pdDpvKGk9PmUuY29tbWl0KG9HZShpKSksIkNvbW1pdCIpLEJyYW5jaDpvKGk9PmUuYnJhbmNoKGxHZShpKSksIkJyYW5jaCIpLE1lcmdlOm8oaT0+ZS5tZXJnZShjR2UoaSkpLCJNZXJnZSIpLENoZWNrb3V0Om8oaT0+ZS5jaGVja291dCh1R2UoaSkpLCJDaGVja291dCIpLENoZXJyeVBpY2tpbmc6byhpPT5lLmNoZXJyeVBpY2soaEdlKGkpKSwiQ2hlcnJ5UGlja2luZyIpfVt0LiR0eXBlXTtuP24odCk6WC5lcnJvcihgVW5rbm93biBzdGF0ZW1lbnQgdHlwZTogJHt0LiR0eXBlfWApfSwicGFyc2VTdGF0ZW1lbnQiKSxvR2U9byh0PT4oe2lkOnQuaWQsbXNnOnQubWVzc2FnZT8/IiIsdHlwZTp0LnR5cGUhPT12b2lkIDA/S3JbdC50eXBlXTpLci5OT1JNQUwsdGFnczp0LnRhZ3M/P3ZvaWQgMH0pLCJwYXJzZUNvbW1pdCIpLGxHZT1vKHQ9Pih7bmFtZTp0Lm5hbWUsb3JkZXI6dC5vcmRlcj8/MH0pLCJwYXJzZUJyYW5jaCIpLGNHZT1vKHQ9Pih7YnJhbmNoOnQuYnJhbmNoLGlkOnQuaWQ/PyIiLHR5cGU6dC50eXBlIT09dm9pZCAwP0tyW3QudHlwZV06dm9pZCAwLHRhZ3M6dC50YWdzPz92b2lkIDB9KSwicGFyc2VNZXJnZSIpLHVHZT1vKHQ9PnQuYnJhbmNoLCJwYXJzZUNoZWNrb3V0IiksaEdlPW8odD0+KHtpZDp0LmlkLHRhcmdldElkOiIiLHRhZ3M6dC50YWdzPy5sZW5ndGg9PT0wP3ZvaWQgMDp0LnRhZ3MscGFyZW50OnQucGFyZW50fSksInBhcnNlQ2hlcnJ5UGlja2luZyIpLHhoZT17cGFyc2U6byhhc3luYyB0PT57bGV0IGU9YXdhaXQgdnMoImdpdEdyYXBoIix0KTtYLmRlYnVnKGUpLGFHZShlLENTKX0sInBhcnNlIil9fSk7dmFyIGZHZSxlbCxrZixFZixXYyxadSxPcCxIcyxXcyxBUyxFYixfUyx3ZixGcixkR2Usd2hlLGtoZSxwR2UsbUdlLGdHZSx5R2UsdkdlLHhHZSxiR2UsVEdlLHdHZSxrR2UsRUdlLFNHZSxUaGUsQ0dlLFNiLEFHZSxfR2UsREdlLExHZSxSR2UsRWhlLFNoZT1OKCgpPT57InVzZSBzdHJpY3QiO2ZyKCk7R3QoKTt5dCgpO2VyKCk7RVMoKTtmR2U9bWUoKSxlbD1mR2U/LmdpdEdyYXBoLGtmPTEwLEVmPTQwLFdjPTQsWnU9MixPcD04LEhzPW5ldyBNYXAsV3M9bmV3IE1hcCxBUz0zMCxFYj1uZXcgTWFwLF9TPVtdLHdmPTAsRnI9IkxSIixkR2U9bygoKT0+e0hzLmNsZWFyKCksV3MuY2xlYXIoKSxFYi5jbGVhcigpLHdmPTAsX1M9W10sRnI9IkxSIn0sImNsZWFyIiksd2hlPW8odD0+e2xldCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iik7cmV0dXJuKHR5cGVvZiB0PT0ic3RyaW5nIj90LnNwbGl0KC9cXG58XG58PGJyXHMqXC8/Pi9naSk6dCkuZm9yRWFjaChuPT57bGV0IGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRzcGFuIik7aS5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwieG1sOnNwYWNlIiwicHJlc2VydmUiKSxpLnNldEF0dHJpYnV0ZSgiZHkiLCIxZW0iKSxpLnNldEF0dHJpYnV0ZSgieCIsIjAiKSxpLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJyb3ciKSxpLnRleHRDb250ZW50PW4udHJpbSgpLGUuYXBwZW5kQ2hpbGQoaSl9KSxlfSwiZHJhd1RleHQiKSxraGU9byh0PT57bGV0IGUscixuO3JldHVybiBGcj09PSJCVCI/KHI9bygoaSxhKT0+aTw9YSwiY29tcGFyaXNvbkZ1bmMiKSxuPTEvMCk6KHI9bygoaSxhKT0+aT49YSwiY29tcGFyaXNvbkZ1bmMiKSxuPTApLHQuZm9yRWFjaChpPT57bGV0IGE9RnI9PT0iVEIifHxGcj09IkJUIj9Xcy5nZXQoaSk/Lnk6V3MuZ2V0KGkpPy54O2EhPT12b2lkIDAmJnIoYSxuKSYmKGU9aSxuPWEpfSksZX0sImZpbmRDbG9zZXN0UGFyZW50IikscEdlPW8odD0+e2xldCBlPSIiLHI9MS8wO3JldHVybiB0LmZvckVhY2gobj0+e2xldCBpPVdzLmdldChuKS55O2k8PXImJihlPW4scj1pKX0pLGV8fHZvaWQgMH0sImZpbmRDbG9zZXN0UGFyZW50QlQiKSxtR2U9bygodCxlLHIpPT57bGV0IG49cixpPXIsYT1bXTt0LmZvckVhY2gocz0+e2xldCBsPWUuZ2V0KHMpO2lmKCFsKXRocm93IG5ldyBFcnJvcihgQ29tbWl0IG5vdCBmb3VuZCBmb3Iga2V5ICR7c31gKTtsLnBhcmVudHMubGVuZ3RoPyhuPXlHZShsKSxpPU1hdGgubWF4KG4saSkpOmEucHVzaChsKSx2R2UobCxuKX0pLG49aSxhLmZvckVhY2gocz0+e3hHZShzLG4scil9KSx0LmZvckVhY2gocz0+e2xldCBsPWUuZ2V0KHMpO2lmKGw/LnBhcmVudHMubGVuZ3RoKXtsZXQgdT1wR2UobC5wYXJlbnRzKTtuPVdzLmdldCh1KS55LUVmLG48PWkmJihpPW4pO2xldCBoPUhzLmdldChsLmJyYW5jaCkucG9zLGY9bi1rZjtXcy5zZXQobC5pZCx7eDpoLHk6Zn0pfX0pfSwic2V0UGFyYWxsZWxCVFBvcyIpLGdHZT1vKHQ9PntsZXQgZT1raGUodC5wYXJlbnRzLmZpbHRlcihuPT5uIT09bnVsbCkpO2lmKCFlKXRocm93IG5ldyBFcnJvcihgQ2xvc2VzdCBwYXJlbnQgbm90IGZvdW5kIGZvciBjb21taXQgJHt0LmlkfWApO2xldCByPVdzLmdldChlKT8ueTtpZihyPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgQ2xvc2VzdCBwYXJlbnQgcG9zaXRpb24gbm90IGZvdW5kIGZvciBjb21taXQgJHt0LmlkfWApO3JldHVybiByfSwiZmluZENsb3Nlc3RQYXJlbnRQb3MiKSx5R2U9byh0PT5nR2UodCkrRWYsImNhbGN1bGF0ZUNvbW1pdFBvc2l0aW9uIiksdkdlPW8oKHQsZSk9PntsZXQgcj1Icy5nZXQodC5icmFuY2gpO2lmKCFyKXRocm93IG5ldyBFcnJvcihgQnJhbmNoIG5vdCBmb3VuZCBmb3IgY29tbWl0ICR7dC5pZH1gKTtsZXQgbj1yLnBvcyxpPWUra2Y7cmV0dXJuIFdzLnNldCh0LmlkLHt4Om4seTppfSkse3g6bix5Oml9fSwic2V0Q29tbWl0UG9zaXRpb24iKSx4R2U9bygodCxlLHIpPT57bGV0IG49SHMuZ2V0KHQuYnJhbmNoKTtpZighbil0aHJvdyBuZXcgRXJyb3IoYEJyYW5jaCBub3QgZm91bmQgZm9yIGNvbW1pdCAke3QuaWR9YCk7bGV0IGk9ZStyLGE9bi5wb3M7V3Muc2V0KHQuaWQse3g6YSx5Oml9KX0sInNldFJvb3RQb3NpdGlvbiIpLGJHZT1vKCh0LGUscixuLGksYSk9PntpZihhPT09S3IuSElHSExJR0hUKXQuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsci54LTEwKS5hdHRyKCJ5IixyLnktMTApLmF0dHIoIndpZHRoIiwyMCkuYXR0cigiaGVpZ2h0IiwyMCkuYXR0cigiY2xhc3MiLGBjb21taXQgJHtlLmlkfSBjb21taXQtaGlnaGxpZ2h0JHtpJU9wfSAke259LW91dGVyYCksdC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IixyLngtNikuYXR0cigieSIsci55LTYpLmF0dHIoIndpZHRoIiwxMikuYXR0cigiaGVpZ2h0IiwxMikuYXR0cigiY2xhc3MiLGBjb21taXQgJHtlLmlkfSBjb21taXQke2klT3B9ICR7bn0taW5uZXJgKTtlbHNlIGlmKGE9PT1Lci5DSEVSUllfUElDSyl0LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLHIueCkuYXR0cigiY3kiLHIueSkuYXR0cigiciIsMTApLmF0dHIoImNsYXNzIixgY29tbWl0ICR7ZS5pZH0gJHtufWApLHQuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsci54LTMpLmF0dHIoImN5IixyLnkrMikuYXR0cigiciIsMi43NSkuYXR0cigiZmlsbCIsIiNmZmYiKS5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke2UuaWR9ICR7bn1gKSx0LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLHIueCszKS5hdHRyKCJjeSIsci55KzIpLmF0dHIoInIiLDIuNzUpLmF0dHIoImZpbGwiLCIjZmZmIikuYXR0cigiY2xhc3MiLGBjb21taXQgJHtlLmlkfSAke259YCksdC5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsci54KzMpLmF0dHIoInkxIixyLnkrMSkuYXR0cigieDIiLHIueCkuYXR0cigieTIiLHIueS01KS5hdHRyKCJzdHJva2UiLCIjZmZmIikuYXR0cigiY2xhc3MiLGBjb21taXQgJHtlLmlkfSAke259YCksdC5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsci54LTMpLmF0dHIoInkxIixyLnkrMSkuYXR0cigieDIiLHIueCkuYXR0cigieTIiLHIueS01KS5hdHRyKCJzdHJva2UiLCIjZmZmIikuYXR0cigiY2xhc3MiLGBjb21taXQgJHtlLmlkfSAke259YCk7ZWxzZXtsZXQgcz10LmFwcGVuZCgiY2lyY2xlIik7aWYocy5hdHRyKCJjeCIsci54KSxzLmF0dHIoImN5IixyLnkpLHMuYXR0cigiciIsZS50eXBlPT09S3IuTUVSR0U/OToxMCkscy5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke2UuaWR9IGNvbW1pdCR7aSVPcH1gKSxhPT09S3IuTUVSR0Upe2xldCBsPXQuYXBwZW5kKCJjaXJjbGUiKTtsLmF0dHIoImN4IixyLngpLGwuYXR0cigiY3kiLHIueSksbC5hdHRyKCJyIiw2KSxsLmF0dHIoImNsYXNzIixgY29tbWl0ICR7bn0gJHtlLmlkfSBjb21taXQke2klT3B9YCl9YT09PUtyLlJFVkVSU0UmJnQuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsYE0gJHtyLngtNX0sJHtyLnktNX1MJHtyLngrNX0sJHtyLnkrNX1NJHtyLngtNX0sJHtyLnkrNX1MJHtyLngrNX0sJHtyLnktNX1gKS5hdHRyKCJjbGFzcyIsYGNvbW1pdCAke259ICR7ZS5pZH0gY29tbWl0JHtpJU9wfWApfX0sImRyYXdDb21taXRCdWxsZXQiKSxUR2U9bygodCxlLHIsbik9PntpZihlLnR5cGUhPT1Lci5DSEVSUllfUElDSyYmKGUuY3VzdG9tSWQmJmUudHlwZT09PUtyLk1FUkdFfHxlLnR5cGUhPT1Lci5NRVJHRSkmJmVsPy5zaG93Q29tbWl0TGFiZWwpe2xldCBpPXQuYXBwZW5kKCJnIiksYT1pLmluc2VydCgicmVjdCIpLmF0dHIoImNsYXNzIiwiY29tbWl0LWxhYmVsLWJrZyIpLHM9aS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixuKS5hdHRyKCJ5IixyLnkrMjUpLmF0dHIoImNsYXNzIiwiY29tbWl0LWxhYmVsIikudGV4dChlLmlkKSxsPXMubm9kZSgpPy5nZXRCQm94KCk7aWYobCYmKGEuYXR0cigieCIsci5wb3NXaXRoT2Zmc2V0LWwud2lkdGgvMi1adSkuYXR0cigieSIsci55KzEzLjUpLmF0dHIoIndpZHRoIixsLndpZHRoKzIqWnUpLmF0dHIoImhlaWdodCIsbC5oZWlnaHQrMipadSksRnI9PT0iVEIifHxGcj09PSJCVCI/KGEuYXR0cigieCIsci54LShsLndpZHRoKzQqV2MrNSkpLmF0dHIoInkiLHIueS0xMikscy5hdHRyKCJ4IixyLngtKGwud2lkdGgrNCpXYykpLmF0dHIoInkiLHIueStsLmhlaWdodC0xMikpOnMuYXR0cigieCIsci5wb3NXaXRoT2Zmc2V0LWwud2lkdGgvMiksZWwucm90YXRlQ29tbWl0TGFiZWwpKWlmKEZyPT09IlRCInx8RnI9PT0iQlQiKXMuYXR0cigidHJhbnNmb3JtIiwicm90YXRlKC00NSwgIityLngrIiwgIityLnkrIikiKSxhLmF0dHIoInRyYW5zZm9ybSIsInJvdGF0ZSgtNDUsICIrci54KyIsICIrci55KyIpIik7ZWxzZXtsZXQgdT0tNy41LShsLndpZHRoKzEwKS8yNSo5LjUsaD0xMCtsLndpZHRoLzI1KjguNTtpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3UrIiwgIitoKyIpIHJvdGF0ZSgtNDUsICIrbisiLCAiK3IueSsiKSIpfX19LCJkcmF3Q29tbWl0TGFiZWwiKSx3R2U9bygodCxlLHIsbik9PntpZihlLnRhZ3MubGVuZ3RoPjApe2xldCBpPTAsYT0wLHM9MCxsPVtdO2ZvcihsZXQgdSBvZiBlLnRhZ3MucmV2ZXJzZSgpKXtsZXQgaD10Lmluc2VydCgicG9seWdvbiIpLGY9dC5hcHBlbmQoImNpcmNsZSIpLGQ9dC5hcHBlbmQoInRleHQiKS5hdHRyKCJ5IixyLnktMTYtaSkuYXR0cigiY2xhc3MiLCJ0YWctbGFiZWwiKS50ZXh0KHUpLHA9ZC5ub2RlKCk/LmdldEJCb3goKTtpZighcCl0aHJvdyBuZXcgRXJyb3IoIlRhZyBiYm94IG5vdCBmb3VuZCIpO2E9TWF0aC5tYXgoYSxwLndpZHRoKSxzPU1hdGgubWF4KHMscC5oZWlnaHQpLGQuYXR0cigieCIsci5wb3NXaXRoT2Zmc2V0LXAud2lkdGgvMiksbC5wdXNoKHt0YWc6ZCxob2xlOmYscmVjdDpoLHlPZmZzZXQ6aX0pLGkrPTIwfWZvcihsZXR7dGFnOnUsaG9sZTpoLHJlY3Q6Zix5T2Zmc2V0OmR9b2YgbCl7bGV0IHA9cy8yLG09ci55LTE5LjItZDtpZihmLmF0dHIoImNsYXNzIiwidGFnLWxhYmVsLWJrZyIpLmF0dHIoInBvaW50cyIsYAogICAgICAke24tYS8yLVdjLzJ9LCR7bStadX0gIAogICAgICAke24tYS8yLVdjLzJ9LCR7bS1adX0KICAgICAgJHtyLnBvc1dpdGhPZmZzZXQtYS8yLVdjfSwke20tcC1adX0KICAgICAgJHtyLnBvc1dpdGhPZmZzZXQrYS8yK1djfSwke20tcC1adX0KICAgICAgJHtyLnBvc1dpdGhPZmZzZXQrYS8yK1djfSwke20rcCtadX0KICAgICAgJHtyLnBvc1dpdGhPZmZzZXQtYS8yLVdjfSwke20rcCtadX1gKSxoLmF0dHIoImN5IixtKS5hdHRyKCJjeCIsbi1hLzIrV2MvMikuYXR0cigiciIsMS41KS5hdHRyKCJjbGFzcyIsInRhZy1ob2xlIiksRnI9PT0iVEIifHxGcj09PSJCVCIpe2xldCBnPW4rZDtmLmF0dHIoImNsYXNzIiwidGFnLWxhYmVsLWJrZyIpLmF0dHIoInBvaW50cyIsYAogICAgICAgICR7ci54fSwke2crMn0KICAgICAgICAke3IueH0sJHtnLTJ9CiAgICAgICAgJHtyLngra2Z9LCR7Zy1wLTJ9CiAgICAgICAgJHtyLngra2YrYSs0fSwke2ctcC0yfQogICAgICAgICR7ci54K2tmK2ErNH0sJHtnK3ArMn0KICAgICAgICAke3IueCtrZn0sJHtnK3ArMn1gKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMTIsMTIpIHJvdGF0ZSg0NSwgIityLngrIiwiK24rIikiKSxoLmF0dHIoImN4IixyLngrV2MvMikuYXR0cigiY3kiLGcpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgxMiwxMikgcm90YXRlKDQ1LCAiK3IueCsiLCIrbisiKSIpLHUuYXR0cigieCIsci54KzUpLmF0dHIoInkiLGcrMykuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDE0LDE0KSByb3RhdGUoNDUsICIrci54KyIsIituKyIpIil9fX19LCJkcmF3Q29tbWl0VGFncyIpLGtHZT1vKHQ9Pntzd2l0Y2godC5jdXN0b21UeXBlPz90LnR5cGUpe2Nhc2UgS3IuTk9STUFMOnJldHVybiJjb21taXQtbm9ybWFsIjtjYXNlIEtyLlJFVkVSU0U6cmV0dXJuImNvbW1pdC1yZXZlcnNlIjtjYXNlIEtyLkhJR0hMSUdIVDpyZXR1cm4iY29tbWl0LWhpZ2hsaWdodCI7Y2FzZSBLci5NRVJHRTpyZXR1cm4iY29tbWl0LW1lcmdlIjtjYXNlIEtyLkNIRVJSWV9QSUNLOnJldHVybiJjb21taXQtY2hlcnJ5LXBpY2siO2RlZmF1bHQ6cmV0dXJuImNvbW1pdC1ub3JtYWwifX0sImdldENvbW1pdENsYXNzVHlwZSIpLEVHZT1vKCh0LGUscixuKT0+e2xldCBpPXt4OjAseTowfTtpZih0LnBhcmVudHMubGVuZ3RoPjApe2xldCBhPWtoZSh0LnBhcmVudHMpO2lmKGEpe2xldCBzPW4uZ2V0KGEpPz9pO3JldHVybiBlPT09IlRCIj9zLnkrRWY6ZT09PSJCVCI/KG4uZ2V0KHQuaWQpPz9pKS55LUVmOnMueCtFZn19ZWxzZSByZXR1cm4gZT09PSJUQiI/QVM6ZT09PSJCVCI/KG4uZ2V0KHQuaWQpPz9pKS55LUVmOjA7cmV0dXJuIDB9LCJjYWxjdWxhdGVQb3NpdGlvbiIpLFNHZT1vKCh0LGUscik9PntsZXQgbj1Gcj09PSJCVCImJnI/ZTplK2tmLGk9RnI9PT0iVEIifHxGcj09PSJCVCI/bjpIcy5nZXQodC5icmFuY2gpPy5wb3MsYT1Gcj09PSJUQiJ8fEZyPT09IkJUIj9Icy5nZXQodC5icmFuY2gpPy5wb3M6bjtpZihhPT09dm9pZCAwfHxpPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgUG9zaXRpb24gd2VyZSB1bmRlZmluZWQgZm9yIGNvbW1pdCAke3QuaWR9YCk7cmV0dXJue3g6YSx5OmkscG9zV2l0aE9mZnNldDpufX0sImdldENvbW1pdFBvc2l0aW9uIiksVGhlPW8oKHQsZSxyKT0+e2lmKCFlbCl0aHJvdyBuZXcgRXJyb3IoIkdpdEdyYXBoIGNvbmZpZyBub3QgZm91bmQiKTtsZXQgbj10LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiY29tbWl0LWJ1bGxldHMiKSxpPXQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJjb21taXQtbGFiZWxzIiksYT1Gcj09PSJUQiJ8fEZyPT09IkJUIj9BUzowLHM9Wy4uLmUua2V5cygpXSxsPWVsPy5wYXJhbGxlbENvbW1pdHM/PyExLHU9bygoZixkKT0+e2xldCBwPWUuZ2V0KGYpPy5zZXEsbT1lLmdldChkKT8uc2VxO3JldHVybiBwIT09dm9pZCAwJiZtIT09dm9pZCAwP3AtbTowfSwic29ydEtleXMiKSxoPXMuc29ydCh1KTtGcj09PSJCVCImJihsJiZtR2UoaCxlLGEpLGg9aC5yZXZlcnNlKCkpLGguZm9yRWFjaChmPT57bGV0IGQ9ZS5nZXQoZik7aWYoIWQpdGhyb3cgbmV3IEVycm9yKGBDb21taXQgbm90IGZvdW5kIGZvciBrZXkgJHtmfWApO2wmJihhPUVHZShkLEZyLGEsV3MpKTtsZXQgcD1TR2UoZCxhLGwpO2lmKHIpe2xldCBtPWtHZShkKSxnPWQuY3VzdG9tVHlwZT8/ZC50eXBlLHk9SHMuZ2V0KGQuYnJhbmNoKT8uaW5kZXg/PzA7YkdlKG4sZCxwLG0seSxnKSxUR2UoaSxkLHAsYSksd0dlKGksZCxwLGEpfUZyPT09IlRCInx8RnI9PT0iQlQiP1dzLnNldChkLmlkLHt4OnAueCx5OnAucG9zV2l0aE9mZnNldH0pOldzLnNldChkLmlkLHt4OnAucG9zV2l0aE9mZnNldCx5OnAueX0pLGE9RnI9PT0iQlQiJiZsP2ErRWY6YStFZitrZixhPndmJiYod2Y9YSl9KX0sImRyYXdDb21taXRzIiksQ0dlPW8oKHQsZSxyLG4saSk9PntsZXQgcz0oRnI9PT0iVEIifHxGcj09PSJCVCI/ci54PG4ueDpyLnk8bi55KT9lLmJyYW5jaDp0LmJyYW5jaCxsPW8oaD0+aC5icmFuY2g9PT1zLCJpc09uQnJhbmNoVG9HZXRDdXJ2ZSIpLHU9byhoPT5oLnNlcT50LnNlcSYmaC5zZXE8ZS5zZXEsImlzQmV0d2VlbkNvbW1pdHMiKTtyZXR1cm5bLi4uaS52YWx1ZXMoKV0uc29tZShoPT51KGgpJiZsKGgpKX0sInNob3VsZFJlcm91dGVBcnJvdyIpLFNiPW8oKHQsZSxyPTApPT57bGV0IG49dCtNYXRoLmFicyh0LWUpLzI7aWYocj41KXJldHVybiBuO2lmKF9TLmV2ZXJ5KHM9Pk1hdGguYWJzKHMtbik+PTEwKSlyZXR1cm4gX1MucHVzaChuKSxuO2xldCBhPU1hdGguYWJzKHQtZSk7cmV0dXJuIFNiKHQsZS1hLzUscisxKX0sImZpbmRMYW5lIiksQUdlPW8oKHQsZSxyLG4pPT57bGV0IGk9V3MuZ2V0KGUuaWQpLGE9V3MuZ2V0KHIuaWQpO2lmKGk9PT12b2lkIDB8fGE9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBDb21taXQgcG9zaXRpb25zIG5vdCBmb3VuZCBmb3IgY29tbWl0cyAke2UuaWR9IGFuZCAke3IuaWR9YCk7bGV0IHM9Q0dlKGUscixpLGEsbiksbD0iIix1PSIiLGg9MCxmPTAsZD1Icy5nZXQoci5icmFuY2gpPy5pbmRleDtyLnR5cGU9PT1Lci5NRVJHRSYmZS5pZCE9PXIucGFyZW50c1swXSYmKGQ9SHMuZ2V0KGUuYnJhbmNoKT8uaW5kZXgpO2xldCBwO2lmKHMpe2w9IkEgMTAgMTAsIDAsIDAsIDAsIix1PSJBIDEwIDEwLCAwLCAwLCAxLCIsaD0xMCxmPTEwO2xldCBtPWkueTxhLnk/U2IoaS55LGEueSk6U2IoYS55LGkueSksZz1pLng8YS54P1NiKGkueCxhLngpOlNiKGEueCxpLngpO0ZyPT09IlRCIj9pLng8YS54P3A9YE0gJHtpLnh9ICR7aS55fSBMICR7Zy1ofSAke2kueX0gJHt1fSAke2d9ICR7aS55K2Z9IEwgJHtnfSAke2EueS1ofSAke2x9ICR7ZytmfSAke2EueX0gTCAke2EueH0gJHthLnl9YDooZD1Icy5nZXQoZS5icmFuY2gpPy5pbmRleCxwPWBNICR7aS54fSAke2kueX0gTCAke2craH0gJHtpLnl9ICR7bH0gJHtnfSAke2kueStmfSBMICR7Z30gJHthLnktaH0gJHt1fSAke2ctZn0gJHthLnl9IEwgJHthLnh9ICR7YS55fWApOkZyPT09IkJUIj9pLng8YS54P3A9YE0gJHtpLnh9ICR7aS55fSBMICR7Zy1ofSAke2kueX0gJHtsfSAke2d9ICR7aS55LWZ9IEwgJHtnfSAke2EueStofSAke3V9ICR7ZytmfSAke2EueX0gTCAke2EueH0gJHthLnl9YDooZD1Icy5nZXQoZS5icmFuY2gpPy5pbmRleCxwPWBNICR7aS54fSAke2kueX0gTCAke2craH0gJHtpLnl9ICR7dX0gJHtnfSAke2kueS1mfSBMICR7Z30gJHthLnkraH0gJHtsfSAke2ctZn0gJHthLnl9IEwgJHthLnh9ICR7YS55fWApOmkueTxhLnk/cD1gTSAke2kueH0gJHtpLnl9IEwgJHtpLnh9ICR7bS1ofSAke2x9ICR7aS54K2Z9ICR7bX0gTCAke2EueC1ofSAke219ICR7dX0gJHthLnh9ICR7bStmfSBMICR7YS54fSAke2EueX1gOihkPUhzLmdldChlLmJyYW5jaCk/LmluZGV4LHA9YE0gJHtpLnh9ICR7aS55fSBMICR7aS54fSAke20raH0gJHt1fSAke2kueCtmfSAke219IEwgJHthLngtaH0gJHttfSAke2x9ICR7YS54fSAke20tZn0gTCAke2EueH0gJHthLnl9YCl9ZWxzZSBsPSJBIDIwIDIwLCAwLCAwLCAwLCIsdT0iQSAyMCAyMCwgMCwgMCwgMSwiLGg9MjAsZj0yMCxGcj09PSJUQiI/KGkueDxhLngmJihyLnR5cGU9PT1Lci5NRVJHRSYmZS5pZCE9PXIucGFyZW50c1swXT9wPWBNICR7aS54fSAke2kueX0gTCAke2kueH0gJHthLnktaH0gJHtsfSAke2kueCtmfSAke2EueX0gTCAke2EueH0gJHthLnl9YDpwPWBNICR7aS54fSAke2kueX0gTCAke2EueC1ofSAke2kueX0gJHt1fSAke2EueH0gJHtpLnkrZn0gTCAke2EueH0gJHthLnl9YCksaS54PmEueCYmKGw9IkEgMjAgMjAsIDAsIDAsIDAsIix1PSJBIDIwIDIwLCAwLCAwLCAxLCIsaD0yMCxmPTIwLHIudHlwZT09PUtyLk1FUkdFJiZlLmlkIT09ci5wYXJlbnRzWzBdP3A9YE0gJHtpLnh9ICR7aS55fSBMICR7aS54fSAke2EueS1ofSAke3V9ICR7aS54LWZ9ICR7YS55fSBMICR7YS54fSAke2EueX1gOnA9YE0gJHtpLnh9ICR7aS55fSBMICR7YS54K2h9ICR7aS55fSAke2x9ICR7YS54fSAke2kueStmfSBMICR7YS54fSAke2EueX1gKSxpLng9PT1hLngmJihwPWBNICR7aS54fSAke2kueX0gTCAke2EueH0gJHthLnl9YCkpOkZyPT09IkJUIj8oaS54PGEueCYmKHIudHlwZT09PUtyLk1FUkdFJiZlLmlkIT09ci5wYXJlbnRzWzBdP3A9YE0gJHtpLnh9ICR7aS55fSBMICR7aS54fSAke2EueStofSAke3V9ICR7aS54K2Z9ICR7YS55fSBMICR7YS54fSAke2EueX1gOnA9YE0gJHtpLnh9ICR7aS55fSBMICR7YS54LWh9ICR7aS55fSAke2x9ICR7YS54fSAke2kueS1mfSBMICR7YS54fSAke2EueX1gKSxpLng+YS54JiYobD0iQSAyMCAyMCwgMCwgMCwgMCwiLHU9IkEgMjAgMjAsIDAsIDAsIDEsIixoPTIwLGY9MjAsci50eXBlPT09S3IuTUVSR0UmJmUuaWQhPT1yLnBhcmVudHNbMF0/cD1gTSAke2kueH0gJHtpLnl9IEwgJHtpLnh9ICR7YS55K2h9ICR7bH0gJHtpLngtZn0gJHthLnl9IEwgJHthLnh9ICR7YS55fWA6cD1gTSAke2kueH0gJHtpLnl9IEwgJHthLngtaH0gJHtpLnl9ICR7bH0gJHthLnh9ICR7aS55LWZ9IEwgJHthLnh9ICR7YS55fWApLGkueD09PWEueCYmKHA9YE0gJHtpLnh9ICR7aS55fSBMICR7YS54fSAke2EueX1gKSk6KGkueTxhLnkmJihyLnR5cGU9PT1Lci5NRVJHRSYmZS5pZCE9PXIucGFyZW50c1swXT9wPWBNICR7aS54fSAke2kueX0gTCAke2EueC1ofSAke2kueX0gJHt1fSAke2EueH0gJHtpLnkrZn0gTCAke2EueH0gJHthLnl9YDpwPWBNICR7aS54fSAke2kueX0gTCAke2kueH0gJHthLnktaH0gJHtsfSAke2kueCtmfSAke2EueX0gTCAke2EueH0gJHthLnl9YCksaS55PmEueSYmKHIudHlwZT09PUtyLk1FUkdFJiZlLmlkIT09ci5wYXJlbnRzWzBdP3A9YE0gJHtpLnh9ICR7aS55fSBMICR7YS54LWh9ICR7aS55fSAke2x9ICR7YS54fSAke2kueS1mfSBMICR7YS54fSAke2EueX1gOnA9YE0gJHtpLnh9ICR7aS55fSBMICR7aS54fSAke2EueStofSAke3V9ICR7aS54K2Z9ICR7YS55fSBMICR7YS54fSAke2EueX1gKSxpLnk9PT1hLnkmJihwPWBNICR7aS54fSAke2kueX0gTCAke2EueH0gJHthLnl9YCkpO2lmKHA9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJMaW5lIGRlZmluaXRpb24gbm90IGZvdW5kIik7dC5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixwKS5hdHRyKCJjbGFzcyIsImFycm93IGFycm93IitkJU9wKX0sImRyYXdBcnJvdyIpLF9HZT1vKCh0LGUpPT57bGV0IHI9dC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImNvbW1pdC1hcnJvd3MiKTtbLi4uZS5rZXlzKCldLmZvckVhY2gobj0+e2xldCBpPWUuZ2V0KG4pO2kucGFyZW50cyYmaS5wYXJlbnRzLmxlbmd0aD4wJiZpLnBhcmVudHMuZm9yRWFjaChhPT57QUdlKHIsZS5nZXQoYSksaSxlKX0pfSl9LCJkcmF3QXJyb3dzIiksREdlPW8oKHQsZSk9PntsZXQgcj10LmFwcGVuZCgiZyIpO2UuZm9yRWFjaCgobixpKT0+e2xldCBhPWklT3Ascz1Icy5nZXQobi5uYW1lKT8ucG9zO2lmKHM9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBQb3NpdGlvbiBub3QgZm91bmQgZm9yIGJyYW5jaCAke24ubmFtZX1gKTtsZXQgbD1yLmFwcGVuZCgibGluZSIpO2wuYXR0cigieDEiLDApLGwuYXR0cigieTEiLHMpLGwuYXR0cigieDIiLHdmKSxsLmF0dHIoInkyIixzKSxsLmF0dHIoImNsYXNzIiwiYnJhbmNoIGJyYW5jaCIrYSksRnI9PT0iVEIiPyhsLmF0dHIoInkxIixBUyksbC5hdHRyKCJ4MSIscyksbC5hdHRyKCJ5MiIsd2YpLGwuYXR0cigieDIiLHMpKTpGcj09PSJCVCImJihsLmF0dHIoInkxIix3ZiksbC5hdHRyKCJ4MSIscyksbC5hdHRyKCJ5MiIsQVMpLGwuYXR0cigieDIiLHMpKSxfUy5wdXNoKHMpO2xldCB1PW4ubmFtZSxoPXdoZSh1KSxmPXIuaW5zZXJ0KCJyZWN0IikscD1yLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiYnJhbmNoTGFiZWwiKS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIGJyYW5jaC1sYWJlbCIrYSk7cC5ub2RlKCkuYXBwZW5kQ2hpbGQoaCk7bGV0IG09aC5nZXRCQm94KCk7Zi5hdHRyKCJjbGFzcyIsImJyYW5jaExhYmVsQmtnIGxhYmVsIithKS5hdHRyKCJyeCIsNCkuYXR0cigicnkiLDQpLmF0dHIoIngiLC1tLndpZHRoLTQtKGVsPy5yb3RhdGVDb21taXRMYWJlbD09PSEwPzMwOjApKS5hdHRyKCJ5IiwtbS5oZWlnaHQvMis4KS5hdHRyKCJ3aWR0aCIsbS53aWR0aCsxOCkuYXR0cigiaGVpZ2h0IixtLmhlaWdodCs0KSxwLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKygtbS53aWR0aC0xNC0oZWw/LnJvdGF0ZUNvbW1pdExhYmVsPT09ITA/MzA6MCkpKyIsICIrKHMtbS5oZWlnaHQvMi0xKSsiKSIpLEZyPT09IlRCIj8oZi5hdHRyKCJ4IixzLW0ud2lkdGgvMi0xMCkuYXR0cigieSIsMCkscC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisocy1tLndpZHRoLzItNSkrIiwgMCkiKSk6RnI9PT0iQlQiPyhmLmF0dHIoIngiLHMtbS53aWR0aC8yLTEwKS5hdHRyKCJ5Iix3ZikscC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisocy1tLndpZHRoLzItNSkrIiwgIit3ZisiKSIpKTpmLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgtMTksICIrKHMtbS5oZWlnaHQvMikrIikiKX0pfSwiZHJhd0JyYW5jaGVzIiksTEdlPW8oZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gSHMuc2V0KHQse3BvczplLGluZGV4OnJ9KSxlKz01MCsoaT80MDowKSsoRnI9PT0iVEIifHxGcj09PSJCVCI/bi53aWR0aC8yOjApLGV9LCJzZXRCcmFuY2hQb3NpdGlvbiIpLFJHZT1vKGZ1bmN0aW9uKHQsZSxyLG4pe2lmKGRHZSgpLFguZGVidWcoImluIGdpdGdyYXBoIHJlbmRlcmVyIix0K2AKYCwiaWQ6IixlLHIpLCFlbCl0aHJvdyBuZXcgRXJyb3IoIkdpdEdyYXBoIGNvbmZpZyBub3QgZm91bmQiKTtsZXQgaT1lbC5yb3RhdGVDb21taXRMYWJlbD8/ITEsYT1uLmRiO0ViPWEuZ2V0Q29tbWl0cygpO2xldCBzPWEuZ2V0QnJhbmNoZXNBc09iakFycmF5KCk7RnI9YS5nZXREaXJlY3Rpb24oKTtsZXQgbD1HZShgW2lkPSIke2V9Il1gKSx1PTA7cy5mb3JFYWNoKChoLGYpPT57bGV0IGQ9d2hlKGgubmFtZSkscD1sLmFwcGVuZCgiZyIpLG09cC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImJyYW5jaExhYmVsIiksZz1tLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwgYnJhbmNoLWxhYmVsIik7Zy5ub2RlKCk/LmFwcGVuZENoaWxkKGQpO2xldCB5PWQuZ2V0QkJveCgpO3U9TEdlKGgubmFtZSx1LGYseSxpKSxnLnJlbW92ZSgpLG0ucmVtb3ZlKCkscC5yZW1vdmUoKX0pLFRoZShsLEViLCExKSxlbC5zaG93QnJhbmNoZXMmJkRHZShsLHMpLF9HZShsLEViKSxUaGUobCxFYiwhMCksVnQuaW5zZXJ0VGl0bGUobCwiZ2l0VGl0bGVUZXh0IixlbC50aXRsZVRvcE1hcmdpbj8/MCxhLmdldERpYWdyYW1UaXRsZSgpKSxBQSh2b2lkIDAsbCxlbC5kaWFncmFtUGFkZGluZyxlbC51c2VNYXhXaWR0aCl9LCJkcmF3IiksRWhlPXtkcmF3OlJHZX19KTt2YXIgTkdlLENoZSxBaGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtOR2U9byh0PT5gCiAgLmNvbW1pdC1pZCwKICAuY29tbWl0LW1zZywKICAuYnJhbmNoLWxhYmVsIHsKICAgIGZpbGw6IGxpZ2h0Z3JleTsKICAgIGNvbG9yOiBsaWdodGdyZXk7CiAgICBmb250LWZhbWlseTogJ3RyZWJ1Y2hldCBtcycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmOwogICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpOwogIH0KICAke1swLDEsMiwzLDQsNSw2LDddLm1hcChlPT5gCiAgICAgICAgLmJyYW5jaC1sYWJlbCR7ZX0geyBmaWxsOiAke3RbImdpdEJyYW5jaExhYmVsIitlXX07IH0KICAgICAgICAuY29tbWl0JHtlfSB7IHN0cm9rZTogJHt0WyJnaXQiK2VdfTsgZmlsbDogJHt0WyJnaXQiK2VdfTsgfQogICAgICAgIC5jb21taXQtaGlnaGxpZ2h0JHtlfSB7IHN0cm9rZTogJHt0WyJnaXRJbnYiK2VdfTsgZmlsbDogJHt0WyJnaXRJbnYiK2VdfTsgfQogICAgICAgIC5sYWJlbCR7ZX0gIHsgZmlsbDogJHt0WyJnaXQiK2VdfTsgfQogICAgICAgIC5hcnJvdyR7ZX0geyBzdHJva2U6ICR7dFsiZ2l0IitlXX07IH0KICAgICAgICBgKS5qb2luKGAKYCl9CgogIC5icmFuY2ggewogICAgc3Ryb2tlLXdpZHRoOiAxOwogICAgc3Ryb2tlOiAke3QubGluZUNvbG9yfTsKICAgIHN0cm9rZS1kYXNoYXJyYXk6IDI7CiAgfQogIC5jb21taXQtbGFiZWwgeyBmb250LXNpemU6ICR7dC5jb21taXRMYWJlbEZvbnRTaXplfTsgZmlsbDogJHt0LmNvbW1pdExhYmVsQ29sb3J9O30KICAuY29tbWl0LWxhYmVsLWJrZyB7IGZvbnQtc2l6ZTogJHt0LmNvbW1pdExhYmVsRm9udFNpemV9OyBmaWxsOiAke3QuY29tbWl0TGFiZWxCYWNrZ3JvdW5kfTsgb3BhY2l0eTogMC41OyB9CiAgLnRhZy1sYWJlbCB7IGZvbnQtc2l6ZTogJHt0LnRhZ0xhYmVsRm9udFNpemV9OyBmaWxsOiAke3QudGFnTGFiZWxDb2xvcn07fQogIC50YWctbGFiZWwtYmtnIHsgZmlsbDogJHt0LnRhZ0xhYmVsQmFja2dyb3VuZH07IHN0cm9rZTogJHt0LnRhZ0xhYmVsQm9yZGVyfTsgfQogIC50YWctaG9sZSB7IGZpbGw6ICR7dC50ZXh0Q29sb3J9OyB9CgogIC5jb21taXQtbWVyZ2UgewogICAgc3Ryb2tlOiAke3QucHJpbWFyeUNvbG9yfTsKICAgIGZpbGw6ICR7dC5wcmltYXJ5Q29sb3J9OwogIH0KICAuY29tbWl0LXJldmVyc2UgewogICAgc3Ryb2tlOiAke3QucHJpbWFyeUNvbG9yfTsKICAgIGZpbGw6ICR7dC5wcmltYXJ5Q29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAzOwogIH0KICAuY29tbWl0LWhpZ2hsaWdodC1vdXRlciB7CiAgfQogIC5jb21taXQtaGlnaGxpZ2h0LWlubmVyIHsKICAgIHN0cm9rZTogJHt0LnByaW1hcnlDb2xvcn07CiAgICBmaWxsOiAke3QucHJpbWFyeUNvbG9yfTsKICB9CgogIC5hcnJvdyB7IHN0cm9rZS13aWR0aDogODsgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kOyBmaWxsOiBub25lfQogIC5naXRUaXRsZVRleHQgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIGZvbnQtc2l6ZTogMThweDsKICAgIGZpbGw6ICR7dC50ZXh0Q29sb3J9OwogIH0KYCwiZ2V0U3R5bGVzIiksQ2hlPU5HZX0pO3ZhciBfaGU9e307dXIoX2hlLHtkaWFncmFtOigpPT5NR2V9KTt2YXIgTUdlLERoZT1OKCgpPT57InVzZSBzdHJpY3QiO2JoZSgpO19PKCk7U2hlKCk7QWhlKCk7TUdlPXtwYXJzZXI6eGhlLGRiOkNTLHJlbmRlcmVyOkVoZSxzdHlsZXM6Q2hlfX0pO3ZhciBETyxOaGUsTWhlPU4oKCk9PnsidXNlIHN0cmljdCI7RE89ZnVuY3Rpb24oKXt2YXIgdD1vKGZ1bmN0aW9uKEwsQSxJLE0pe2ZvcihJPUl8fHt9LE09TC5sZW5ndGg7TS0tO0lbTFtNXV09QSk7cmV0dXJuIEl9LCJvIiksZT1bNiw4LDEwLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMzLDM1LDM2LDM4LDQwXSxyPVsxLDI2XSxuPVsxLDI3XSxpPVsxLDI4XSxhPVsxLDI5XSxzPVsxLDMwXSxsPVsxLDMxXSx1PVsxLDMyXSxoPVsxLDMzXSxmPVsxLDM0XSxkPVsxLDldLHA9WzEsMTBdLG09WzEsMTFdLGc9WzEsMTJdLHk9WzEsMTNdLHY9WzEsMTRdLHg9WzEsMTVdLGI9WzEsMTZdLFQ9WzEsMTldLFM9WzEsMjBdLHc9WzEsMjFdLEU9WzEsMjJdLF89WzEsMjNdLEM9WzEsMjVdLEQ9WzEsMzVdLE89e3RyYWNlOm8oZnVuY3Rpb24oKXt9LCJ0cmFjZSIpLHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsZ2FudHQ6NCxkb2N1bWVudDo1LEVPRjo2LGxpbmU6NyxTUEFDRTo4LHN0YXRlbWVudDo5LE5MOjEwLHdlZWtkYXk6MTEsd2Vla2RheV9tb25kYXk6MTIsd2Vla2RheV90dWVzZGF5OjEzLHdlZWtkYXlfd2VkbmVzZGF5OjE0LHdlZWtkYXlfdGh1cnNkYXk6MTUsd2Vla2RheV9mcmlkYXk6MTYsd2Vla2RheV9zYXR1cmRheToxNyx3ZWVrZGF5X3N1bmRheToxOCx3ZWVrZW5kOjE5LHdlZWtlbmRfZnJpZGF5OjIwLHdlZWtlbmRfc2F0dXJkYXk6MjEsZGF0ZUZvcm1hdDoyMixpbmNsdXNpdmVFbmREYXRlczoyMyx0b3BBeGlzOjI0LGF4aXNGb3JtYXQ6MjUsdGlja0ludGVydmFsOjI2LGV4Y2x1ZGVzOjI3LGluY2x1ZGVzOjI4LHRvZGF5TWFya2VyOjI5LHRpdGxlOjMwLGFjY190aXRsZTozMSxhY2NfdGl0bGVfdmFsdWU6MzIsYWNjX2Rlc2NyOjMzLGFjY19kZXNjcl92YWx1ZTozNCxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjM1LHNlY3Rpb246MzYsY2xpY2tTdGF0ZW1lbnQ6MzcsdGFza1R4dDozOCx0YXNrRGF0YTozOSxjbGljazo0MCxjYWxsYmFja25hbWU6NDEsY2FsbGJhY2thcmdzOjQyLGhyZWY6NDMsY2xpY2tTdGF0ZW1lbnREZWJ1Zzo0NCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiZ2FudHQiLDY6IkVPRiIsODoiU1BBQ0UiLDEwOiJOTCIsMTI6IndlZWtkYXlfbW9uZGF5IiwxMzoid2Vla2RheV90dWVzZGF5IiwxNDoid2Vla2RheV93ZWRuZXNkYXkiLDE1OiJ3ZWVrZGF5X3RodXJzZGF5IiwxNjoid2Vla2RheV9mcmlkYXkiLDE3OiJ3ZWVrZGF5X3NhdHVyZGF5IiwxODoid2Vla2RheV9zdW5kYXkiLDIwOiJ3ZWVrZW5kX2ZyaWRheSIsMjE6IndlZWtlbmRfc2F0dXJkYXkiLDIyOiJkYXRlRm9ybWF0IiwyMzoiaW5jbHVzaXZlRW5kRGF0ZXMiLDI0OiJ0b3BBeGlzIiwyNToiYXhpc0Zvcm1hdCIsMjY6InRpY2tJbnRlcnZhbCIsMjc6ImV4Y2x1ZGVzIiwyODoiaW5jbHVkZXMiLDI5OiJ0b2RheU1hcmtlciIsMzA6InRpdGxlIiwzMToiYWNjX3RpdGxlIiwzMjoiYWNjX3RpdGxlX3ZhbHVlIiwzMzoiYWNjX2Rlc2NyIiwzNDoiYWNjX2Rlc2NyX3ZhbHVlIiwzNToiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsMzY6InNlY3Rpb24iLDM4OiJ0YXNrVHh0IiwzOToidGFza0RhdGEiLDQwOiJjbGljayIsNDE6ImNhbGxiYWNrbmFtZSIsNDI6ImNhbGxiYWNrYXJncyIsNDM6ImhyZWYifSxwcm9kdWN0aW9uc186WzAsWzMsM10sWzUsMF0sWzUsMl0sWzcsMl0sWzcsMV0sWzcsMV0sWzcsMV0sWzExLDFdLFsxMSwxXSxbMTEsMV0sWzExLDFdLFsxMSwxXSxbMTEsMV0sWzExLDFdLFsxOSwxXSxbMTksMV0sWzksMV0sWzksMV0sWzksMV0sWzksMV0sWzksMV0sWzksMV0sWzksMV0sWzksMV0sWzksMV0sWzksMV0sWzksMV0sWzksMl0sWzksMl0sWzksMV0sWzksMV0sWzksMV0sWzksMl0sWzM3LDJdLFszNywzXSxbMzcsM10sWzM3LDRdLFszNywzXSxbMzcsNF0sWzM3LDJdLFs0NCwyXSxbNDQsM10sWzQ0LDNdLFs0NCw0XSxbNDQsM10sWzQ0LDRdLFs0NCwyXV0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKEEsSSxNLFAsQixGLHope3ZhciAkPUYubGVuZ3RoLTE7c3dpdGNoKEIpe2Nhc2UgMTpyZXR1cm4gRlskLTFdO2Nhc2UgMjp0aGlzLiQ9W107YnJlYWs7Y2FzZSAzOkZbJC0xXS5wdXNoKEZbJF0pLHRoaXMuJD1GWyQtMV07YnJlYWs7Y2FzZSA0OmNhc2UgNTp0aGlzLiQ9RlskXTticmVhaztjYXNlIDY6Y2FzZSA3OnRoaXMuJD1bXTticmVhaztjYXNlIDg6UC5zZXRXZWVrZGF5KCJtb25kYXkiKTticmVhaztjYXNlIDk6UC5zZXRXZWVrZGF5KCJ0dWVzZGF5Iik7YnJlYWs7Y2FzZSAxMDpQLnNldFdlZWtkYXkoIndlZG5lc2RheSIpO2JyZWFrO2Nhc2UgMTE6UC5zZXRXZWVrZGF5KCJ0aHVyc2RheSIpO2JyZWFrO2Nhc2UgMTI6UC5zZXRXZWVrZGF5KCJmcmlkYXkiKTticmVhaztjYXNlIDEzOlAuc2V0V2Vla2RheSgic2F0dXJkYXkiKTticmVhaztjYXNlIDE0OlAuc2V0V2Vla2RheSgic3VuZGF5Iik7YnJlYWs7Y2FzZSAxNTpQLnNldFdlZWtlbmQoImZyaWRheSIpO2JyZWFrO2Nhc2UgMTY6UC5zZXRXZWVrZW5kKCJzYXR1cmRheSIpO2JyZWFrO2Nhc2UgMTc6UC5zZXREYXRlRm9ybWF0KEZbJF0uc3Vic3RyKDExKSksdGhpcy4kPUZbJF0uc3Vic3RyKDExKTticmVhaztjYXNlIDE4OlAuZW5hYmxlSW5jbHVzaXZlRW5kRGF0ZXMoKSx0aGlzLiQ9RlskXS5zdWJzdHIoMTgpO2JyZWFrO2Nhc2UgMTk6UC5Ub3BBeGlzKCksdGhpcy4kPUZbJF0uc3Vic3RyKDgpO2JyZWFrO2Nhc2UgMjA6UC5zZXRBeGlzRm9ybWF0KEZbJF0uc3Vic3RyKDExKSksdGhpcy4kPUZbJF0uc3Vic3RyKDExKTticmVhaztjYXNlIDIxOlAuc2V0VGlja0ludGVydmFsKEZbJF0uc3Vic3RyKDEzKSksdGhpcy4kPUZbJF0uc3Vic3RyKDEzKTticmVhaztjYXNlIDIyOlAuc2V0RXhjbHVkZXMoRlskXS5zdWJzdHIoOSkpLHRoaXMuJD1GWyRdLnN1YnN0cig5KTticmVhaztjYXNlIDIzOlAuc2V0SW5jbHVkZXMoRlskXS5zdWJzdHIoOSkpLHRoaXMuJD1GWyRdLnN1YnN0cig5KTticmVhaztjYXNlIDI0OlAuc2V0VG9kYXlNYXJrZXIoRlskXS5zdWJzdHIoMTIpKSx0aGlzLiQ9RlskXS5zdWJzdHIoMTIpO2JyZWFrO2Nhc2UgMjc6UC5zZXREaWFncmFtVGl0bGUoRlskXS5zdWJzdHIoNikpLHRoaXMuJD1GWyRdLnN1YnN0cig2KTticmVhaztjYXNlIDI4OnRoaXMuJD1GWyRdLnRyaW0oKSxQLnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAyOTpjYXNlIDMwOnRoaXMuJD1GWyRdLnRyaW0oKSxQLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAzMTpQLmFkZFNlY3Rpb24oRlskXS5zdWJzdHIoOCkpLHRoaXMuJD1GWyRdLnN1YnN0cig4KTticmVhaztjYXNlIDMzOlAuYWRkVGFzayhGWyQtMV0sRlskXSksdGhpcy4kPSJ0YXNrIjticmVhaztjYXNlIDM0OnRoaXMuJD1GWyQtMV0sUC5zZXRDbGlja0V2ZW50KEZbJC0xXSxGWyRdLG51bGwpO2JyZWFrO2Nhc2UgMzU6dGhpcy4kPUZbJC0yXSxQLnNldENsaWNrRXZlbnQoRlskLTJdLEZbJC0xXSxGWyRdKTticmVhaztjYXNlIDM2OnRoaXMuJD1GWyQtMl0sUC5zZXRDbGlja0V2ZW50KEZbJC0yXSxGWyQtMV0sbnVsbCksUC5zZXRMaW5rKEZbJC0yXSxGWyRdKTticmVhaztjYXNlIDM3OnRoaXMuJD1GWyQtM10sUC5zZXRDbGlja0V2ZW50KEZbJC0zXSxGWyQtMl0sRlskLTFdKSxQLnNldExpbmsoRlskLTNdLEZbJF0pO2JyZWFrO2Nhc2UgMzg6dGhpcy4kPUZbJC0yXSxQLnNldENsaWNrRXZlbnQoRlskLTJdLEZbJF0sbnVsbCksUC5zZXRMaW5rKEZbJC0yXSxGWyQtMV0pO2JyZWFrO2Nhc2UgMzk6dGhpcy4kPUZbJC0zXSxQLnNldENsaWNrRXZlbnQoRlskLTNdLEZbJC0xXSxGWyRdKSxQLnNldExpbmsoRlskLTNdLEZbJC0yXSk7YnJlYWs7Y2FzZSA0MDp0aGlzLiQ9RlskLTFdLFAuc2V0TGluayhGWyQtMV0sRlskXSk7YnJlYWs7Y2FzZSA0MTpjYXNlIDQ3OnRoaXMuJD1GWyQtMV0rIiAiK0ZbJF07YnJlYWs7Y2FzZSA0MjpjYXNlIDQzOmNhc2UgNDU6dGhpcy4kPUZbJC0yXSsiICIrRlskLTFdKyIgIitGWyRdO2JyZWFrO2Nhc2UgNDQ6Y2FzZSA0Njp0aGlzLiQ9RlskLTNdKyIgIitGWyQtMl0rIiAiK0ZbJC0xXSsiICIrRlskXTticmVha319LCJhbm9ueW1vdXMiKSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LHQoZSxbMiwyXSx7NTozfSksezY6WzEsNF0sNzo1LDg6WzEsNl0sOTo3LDEwOlsxLDhdLDExOjE3LDEyOnIsMTM6biwxNDppLDE1OmEsMTY6cywxNzpsLDE4OnUsMTk6MTgsMjA6aCwyMTpmLDIyOmQsMjM6cCwyNDptLDI1OmcsMjY6eSwyNzp2LDI4OngsMjk6YiwzMDpULDMxOlMsMzM6dywzNTpFLDM2Ol8sMzc6MjQsMzg6Qyw0MDpEfSx0KGUsWzIsN10sezE6WzIsMV19KSx0KGUsWzIsM10pLHs5OjM2LDExOjE3LDEyOnIsMTM6biwxNDppLDE1OmEsMTY6cywxNzpsLDE4OnUsMTk6MTgsMjA6aCwyMTpmLDIyOmQsMjM6cCwyNDptLDI1OmcsMjY6eSwyNzp2LDI4OngsMjk6YiwzMDpULDMxOlMsMzM6dywzNTpFLDM2Ol8sMzc6MjQsMzg6Qyw0MDpEfSx0KGUsWzIsNV0pLHQoZSxbMiw2XSksdChlLFsyLDE3XSksdChlLFsyLDE4XSksdChlLFsyLDE5XSksdChlLFsyLDIwXSksdChlLFsyLDIxXSksdChlLFsyLDIyXSksdChlLFsyLDIzXSksdChlLFsyLDI0XSksdChlLFsyLDI1XSksdChlLFsyLDI2XSksdChlLFsyLDI3XSksezMyOlsxLDM3XX0sezM0OlsxLDM4XX0sdChlLFsyLDMwXSksdChlLFsyLDMxXSksdChlLFsyLDMyXSksezM5OlsxLDM5XX0sdChlLFsyLDhdKSx0KGUsWzIsOV0pLHQoZSxbMiwxMF0pLHQoZSxbMiwxMV0pLHQoZSxbMiwxMl0pLHQoZSxbMiwxM10pLHQoZSxbMiwxNF0pLHQoZSxbMiwxNV0pLHQoZSxbMiwxNl0pLHs0MTpbMSw0MF0sNDM6WzEsNDFdfSx0KGUsWzIsNF0pLHQoZSxbMiwyOF0pLHQoZSxbMiwyOV0pLHQoZSxbMiwzM10pLHQoZSxbMiwzNF0sezQyOlsxLDQyXSw0MzpbMSw0M119KSx0KGUsWzIsNDBdLHs0MTpbMSw0NF19KSx0KGUsWzIsMzVdLHs0MzpbMSw0NV19KSx0KGUsWzIsMzZdKSx0KGUsWzIsMzhdLHs0MjpbMSw0Nl19KSx0KGUsWzIsMzddKSx0KGUsWzIsMzldKV0sZGVmYXVsdEFjdGlvbnM6e30scGFyc2VFcnJvcjpvKGZ1bmN0aW9uKEEsSSl7aWYoSS5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKEEpO2Vsc2V7dmFyIE09bmV3IEVycm9yKEEpO3Rocm93IE0uaGFzaD1JLE19fSwicGFyc2VFcnJvciIpLHBhcnNlOm8oZnVuY3Rpb24oQSl7dmFyIEk9dGhpcyxNPVswXSxQPVtdLEI9W251bGxdLEY9W10sej10aGlzLnRhYmxlLCQ9IiIsVT0wLEs9MCxlZT0wLFk9MixjZT0xLFo9Ri5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSx1ZT1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLFE9e3l5Ont9fTtmb3IodmFyIGogaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxqKSYmKFEueXlbal09dGhpcy55eVtqXSk7dWUuc2V0SW5wdXQoQSxRLnl5KSxRLnl5LmxleGVyPXVlLFEueXkucGFyc2VyPXRoaXMsdHlwZW9mIHVlLnl5bGxvYz4idSImJih1ZS55eWxsb2M9e30pO3ZhciBuZT11ZS55eWxsb2M7Ri5wdXNoKG5lKTt2YXIgdGU9dWUub3B0aW9ucyYmdWUub3B0aW9ucy5yYW5nZXM7dHlwZW9mIFEueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9US55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBoZShxKXtNLmxlbmd0aD1NLmxlbmd0aC0yKnEsQi5sZW5ndGg9Qi5sZW5ndGgtcSxGLmxlbmd0aD1GLmxlbmd0aC1xfW8oaGUsInBvcFN0YWNrIik7ZnVuY3Rpb24gbGUoKXt2YXIgcTtyZXR1cm4gcT1QLnBvcCgpfHx1ZS5sZXgoKXx8Y2UsdHlwZW9mIHEhPSJudW1iZXIiJiYocSBpbnN0YW5jZW9mIEFycmF5JiYoUD1xLHE9UC5wb3AoKSkscT1JLnN5bWJvbHNfW3FdfHxxKSxxfW8obGUsImxleCIpO2Zvcih2YXIgSixTZSxzZSxhZSxPZSx5ZSxCZT17fSxIZSx6ZSxMZSxJZTs7KXtpZihzZT1NW00ubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbc2VdP2FlPXRoaXMuZGVmYXVsdEFjdGlvbnNbc2VdOigoSj09PW51bGx8fHR5cGVvZiBKPiJ1IikmJihKPWxlKCkpLGFlPXpbc2VdJiZ6W3NlXVtKXSksdHlwZW9mIGFlPiJ1Inx8IWFlLmxlbmd0aHx8IWFlWzBdKXt2YXIgeGU9IiI7SWU9W107Zm9yKEhlIGluIHpbc2VdKXRoaXMudGVybWluYWxzX1tIZV0mJkhlPlkmJkllLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tIZV0rIiciKTt1ZS5zaG93UG9zaXRpb24/eGU9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoVSsxKStgOgpgK3VlLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArSWUuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tKXXx8SikrIiciOnhlPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKFUrMSkrIjogVW5leHBlY3RlZCAiKyhKPT1jZT8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tKXXx8SikrIiciKSx0aGlzLnBhcnNlRXJyb3IoeGUse3RleHQ6dWUubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW0pdfHxKLGxpbmU6dWUueXlsaW5lbm8sbG9jOm5lLGV4cGVjdGVkOkllfSl9aWYoYWVbMF1pbnN0YW5jZW9mIEFycmF5JiZhZS5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK3NlKyIsIHRva2VuOiAiK0opO3N3aXRjaChhZVswXSl7Y2FzZSAxOk0ucHVzaChKKSxCLnB1c2godWUueXl0ZXh0KSxGLnB1c2godWUueXlsbG9jKSxNLnB1c2goYWVbMV0pLEo9bnVsbCxTZT8oSj1TZSxTZT1udWxsKTooSz11ZS55eWxlbmcsJD11ZS55eXRleHQsVT11ZS55eWxpbmVubyxuZT11ZS55eWxsb2MsZWU+MCYmZWUtLSk7YnJlYWs7Y2FzZSAyOmlmKHplPXRoaXMucHJvZHVjdGlvbnNfW2FlWzFdXVsxXSxCZS4kPUJbQi5sZW5ndGgtemVdLEJlLl8kPXtmaXJzdF9saW5lOkZbRi5sZW5ndGgtKHplfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6RltGLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOkZbRi5sZW5ndGgtKHplfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOkZbRi5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LHRlJiYoQmUuXyQucmFuZ2U9W0ZbRi5sZW5ndGgtKHplfHwxKV0ucmFuZ2VbMF0sRltGLmxlbmd0aC0xXS5yYW5nZVsxXV0pLHllPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShCZSxbJCxLLFUsUS55eSxhZVsxXSxCLEZdLmNvbmNhdChaKSksdHlwZW9mIHllPCJ1IilyZXR1cm4geWU7emUmJihNPU0uc2xpY2UoMCwtMSp6ZSoyKSxCPUIuc2xpY2UoMCwtMSp6ZSksRj1GLnNsaWNlKDAsLTEqemUpKSxNLnB1c2godGhpcy5wcm9kdWN0aW9uc19bYWVbMV1dWzBdKSxCLnB1c2goQmUuJCksRi5wdXNoKEJlLl8kKSxMZT16W01bTS5sZW5ndGgtMl1dW01bTS5sZW5ndGgtMV1dLE0ucHVzaChMZSk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH0sInBhcnNlIil9LFI9ZnVuY3Rpb24oKXt2YXIgTD17RU9GOjEscGFyc2VFcnJvcjpvKGZ1bmN0aW9uKEksTSl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihJLE0pO2Vsc2UgdGhyb3cgbmV3IEVycm9yKEkpfSwicGFyc2VFcnJvciIpLHNldElucHV0Om8oZnVuY3Rpb24oQSxJKXtyZXR1cm4gdGhpcy55eT1JfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1BLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSwic2V0SW5wdXQiKSxpbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIEE9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPUEsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPUEsdGhpcy5tYXRjaGVkKz1BO3ZhciBJPUEubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBJPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxBfSwiaW5wdXQiKSx1bnB1dDpvKGZ1bmN0aW9uKEEpe3ZhciBJPUEubGVuZ3RoLE09QS5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PUErdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLUkpLHRoaXMub2Zmc2V0LT1JO3ZhciBQPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLE0ubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1NLmxlbmd0aC0xKTt2YXIgQj10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46TT8oTS5sZW5ndGg9PT1QLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrUFtQLmxlbmd0aC1NLmxlbmd0aF0ubGVuZ3RoLU1bMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1JfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W0JbMF0sQlswXSt0aGlzLnl5bGVuZy1JXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LCJ1bnB1dCIpLG1vcmU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LCJtb3JlIikscmVqZWN0Om8oZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LCJyZWplY3QiKSxsZXNzOm8oZnVuY3Rpb24oQSl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKEEpKX0sImxlc3MiKSxwYXN0SW5wdXQ6byhmdW5jdGlvbigpe3ZhciBBPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oQS5sZW5ndGg+MjA/Ii4uLiI6IiIpK0Euc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LCJwYXN0SW5wdXQiKSx1cGNvbWluZ0lucHV0Om8oZnVuY3Rpb24oKXt2YXIgQT10aGlzLm1hdGNoO3JldHVybiBBLmxlbmd0aDwyMCYmKEErPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLUEubGVuZ3RoKSksKEEuc3Vic3RyKDAsMjApKyhBLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSwidXBjb21pbmdJbnB1dCIpLHNob3dQb3NpdGlvbjpvKGZ1bmN0aW9uKCl7dmFyIEE9dGhpcy5wYXN0SW5wdXQoKSxJPW5ldyBBcnJheShBLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIEErdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK0krIl4ifSwic2hvd1Bvc2l0aW9uIiksdGVzdF9tYXRjaDpvKGZ1bmN0aW9uKEEsSSl7dmFyIE0sUCxCO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihCPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKEIueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksUD1BWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxQJiYodGhpcy55eWxpbmVubys9UC5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpQP1BbUC5sZW5ndGgtMV0ubGVuZ3RoLVBbUC5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitBWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPUFbMF0sdGhpcy5tYXRjaCs9QVswXSx0aGlzLm1hdGNoZXM9QSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShBWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1BWzBdLE09dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsSSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxNKXJldHVybiBNO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBGIGluIEIpdGhpc1tGXT1CW0ZdO3JldHVybiExfXJldHVybiExfSwidGVzdF9tYXRjaCIpLG5leHQ6byhmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBBLEksTSxQO3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIEI9dGhpcy5fY3VycmVudFJ1bGVzKCksRj0wO0Y8Qi5sZW5ndGg7RisrKWlmKE09dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tCW0ZdXSksTSYmKCFJfHxNWzBdLmxlbmd0aD5JWzBdLmxlbmd0aCkpe2lmKEk9TSxQPUYsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoQT10aGlzLnRlc3RfbWF0Y2goTSxCW0ZdKSxBIT09ITEpcmV0dXJuIEE7aWYodGhpcy5fYmFja3RyYWNrKXtJPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIEk/KEE9dGhpcy50ZXN0X21hdGNoKEksQltQXSksQSE9PSExP0E6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LCJuZXh0IiksbGV4Om8oZnVuY3Rpb24oKXt2YXIgST10aGlzLm5leHQoKTtyZXR1cm4gSXx8dGhpcy5sZXgoKX0sImxleCIpLGJlZ2luOm8oZnVuY3Rpb24oSSl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKEkpfSwiYmVnaW4iKSxwb3BTdGF0ZTpvKGZ1bmN0aW9uKCl7dmFyIEk9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gST4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sInBvcFN0YXRlIiksX2N1cnJlbnRSdWxlczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sIl9jdXJyZW50UnVsZXMiKSx0b3BTdGF0ZTpvKGZ1bmN0aW9uKEkpe3JldHVybiBJPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoSXx8MCksST49MD90aGlzLmNvbmRpdGlvblN0YWNrW0ldOiJJTklUSUFMIn0sInRvcFN0YXRlIikscHVzaFN0YXRlOm8oZnVuY3Rpb24oSSl7dGhpcy5iZWdpbihJKX0sInB1c2hTdGF0ZSIpLHN0YXRlU3RhY2tTaXplOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LCJzdGF0ZVN0YWNrU2l6ZSIpLG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKEksTSxQLEIpe3ZhciBGPUI7c3dpdGNoKFApe2Nhc2UgMDpyZXR1cm4gdGhpcy5iZWdpbigib3Blbl9kaXJlY3RpdmUiKSwib3Blbl9kaXJlY3RpdmUiO2JyZWFrO2Nhc2UgMTpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMzE7YnJlYWs7Y2FzZSAyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7YnJlYWs7Y2FzZSAzOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwzMzticmVhaztjYXNlIDQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjticmVhaztjYXNlIDU6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgNjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA3OnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDg6YnJlYWs7Y2FzZSA5OmJyZWFrO2Nhc2UgMTA6YnJlYWs7Y2FzZSAxMTpyZXR1cm4gMTA7Y2FzZSAxMjpicmVhaztjYXNlIDEzOmJyZWFrO2Nhc2UgMTQ6dGhpcy5iZWdpbigiaHJlZiIpO2JyZWFrO2Nhc2UgMTU6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTY6cmV0dXJuIDQzO2Nhc2UgMTc6dGhpcy5iZWdpbigiY2FsbGJhY2tuYW1lIik7YnJlYWs7Y2FzZSAxODp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxOTp0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiY2FsbGJhY2thcmdzIik7YnJlYWs7Y2FzZSAyMDpyZXR1cm4gNDE7Y2FzZSAyMTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyMjpyZXR1cm4gNDI7Y2FzZSAyMzp0aGlzLmJlZ2luKCJjbGljayIpO2JyZWFrO2Nhc2UgMjQ6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjU6cmV0dXJuIDQwO2Nhc2UgMjY6cmV0dXJuIDQ7Y2FzZSAyNzpyZXR1cm4gMjI7Y2FzZSAyODpyZXR1cm4gMjM7Y2FzZSAyOTpyZXR1cm4gMjQ7Y2FzZSAzMDpyZXR1cm4gMjU7Y2FzZSAzMTpyZXR1cm4gMjY7Y2FzZSAzMjpyZXR1cm4gMjg7Y2FzZSAzMzpyZXR1cm4gMjc7Y2FzZSAzNDpyZXR1cm4gMjk7Y2FzZSAzNTpyZXR1cm4gMTI7Y2FzZSAzNjpyZXR1cm4gMTM7Y2FzZSAzNzpyZXR1cm4gMTQ7Y2FzZSAzODpyZXR1cm4gMTU7Y2FzZSAzOTpyZXR1cm4gMTY7Y2FzZSA0MDpyZXR1cm4gMTc7Y2FzZSA0MTpyZXR1cm4gMTg7Y2FzZSA0MjpyZXR1cm4gMjA7Y2FzZSA0MzpyZXR1cm4gMjE7Y2FzZSA0NDpyZXR1cm4iZGF0ZSI7Y2FzZSA0NTpyZXR1cm4gMzA7Y2FzZSA0NjpyZXR1cm4iYWNjRGVzY3JpcHRpb24iO2Nhc2UgNDc6cmV0dXJuIDM2O2Nhc2UgNDg6cmV0dXJuIDM4O2Nhc2UgNDk6cmV0dXJuIDM5O2Nhc2UgNTA6cmV0dXJuIjoiO2Nhc2UgNTE6cmV0dXJuIDY7Y2FzZSA1MjpyZXR1cm4iSU5WQUxJRCJ9fSwiYW5vbnltb3VzIikscnVsZXM6Wy9eKD86JSVceykvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpbXH1dKS9pLC9eKD86W15cfV0qKS9pLC9eKD86JSUoPyFceykqW15cbl0qKS9pLC9eKD86W15cfV0lJSpbXlxuXSopL2ksL14oPzolJSpbXlxuXSpbXG5dKikvaSwvXig/Oltcbl0rKS9pLC9eKD86XHMrKS9pLC9eKD86JVteXG5dKikvaSwvXig/OmhyZWZbXHNdK1siXSkvaSwvXig/OlsiXSkvaSwvXig/OlteIl0qKS9pLC9eKD86Y2FsbFtcc10rKS9pLC9eKD86XChbXHNdKlwpKS9pLC9eKD86XCgpL2ksL14oPzpbXihdKikvaSwvXig/OlwpKS9pLC9eKD86W14pXSopL2ksL14oPzpjbGlja1tcc10rKS9pLC9eKD86W1xzXG5dKS9pLC9eKD86W15cc1xuXSopL2ksL14oPzpnYW50dFxiKS9pLC9eKD86ZGF0ZUZvcm1hdFxzW14jXG47XSspL2ksL14oPzppbmNsdXNpdmVFbmREYXRlc1xiKS9pLC9eKD86dG9wQXhpc1xiKS9pLC9eKD86YXhpc0Zvcm1hdFxzW14jXG47XSspL2ksL14oPzp0aWNrSW50ZXJ2YWxcc1teI1xuO10rKS9pLC9eKD86aW5jbHVkZXNcc1teI1xuO10rKS9pLC9eKD86ZXhjbHVkZXNcc1teI1xuO10rKS9pLC9eKD86dG9kYXlNYXJrZXJcc1teXG47XSspL2ksL14oPzp3ZWVrZGF5XHMrbW9uZGF5XGIpL2ksL14oPzp3ZWVrZGF5XHMrdHVlc2RheVxiKS9pLC9eKD86d2Vla2RheVxzK3dlZG5lc2RheVxiKS9pLC9eKD86d2Vla2RheVxzK3RodXJzZGF5XGIpL2ksL14oPzp3ZWVrZGF5XHMrZnJpZGF5XGIpL2ksL14oPzp3ZWVrZGF5XHMrc2F0dXJkYXlcYikvaSwvXig/OndlZWtkYXlccytzdW5kYXlcYikvaSwvXig/OndlZWtlbmRccytmcmlkYXlcYikvaSwvXig/OndlZWtlbmRccytzYXR1cmRheVxiKS9pLC9eKD86XGRcZFxkXGQtXGRcZC1cZFxkXGIpL2ksL14oPzp0aXRsZVxzW15cbl0rKS9pLC9eKD86YWNjRGVzY3JpcHRpb25cc1teI1xuO10rKS9pLC9eKD86c2VjdGlvblxzW15cbl0rKS9pLC9eKD86W146XG5dKykvaSwvXig/OjpbXiNcbjtdKykvaSwvXig/OjopL2ksL14oPzokKS9pLC9eKD86LikvaV0sY29uZGl0aW9uczp7YWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzYsN10saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOls0XSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzJdLGluY2x1c2l2ZTohMX0sY2FsbGJhY2thcmdzOntydWxlczpbMjEsMjJdLGluY2x1c2l2ZTohMX0sY2FsbGJhY2tuYW1lOntydWxlczpbMTgsMTksMjBdLGluY2x1c2l2ZTohMX0saHJlZjp7cnVsZXM6WzE1LDE2XSxpbmNsdXNpdmU6ITF9LGNsaWNrOntydWxlczpbMjQsMjVdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwzLDUsOCw5LDEwLDExLDEyLDEzLDE0LDE3LDIzLDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyXSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIEx9KCk7Ty5sZXhlcj1SO2Z1bmN0aW9uIGsoKXt0aGlzLnl5PXt9fXJldHVybiBvKGssIlBhcnNlciIpLGsucHJvdG90eXBlPU8sTy5QYXJzZXI9ayxuZXcga30oKTtETy5wYXJzZXI9RE87TmhlPURPfSk7dmFyIEloZT1QaSgoTE8sUk8pPT57InVzZSBzdHJpY3QiOyhmdW5jdGlvbih0LGUpe3R5cGVvZiBMTz09Im9iamVjdCImJnR5cGVvZiBSTzwidSI/Uk8uZXhwb3J0cz1lKCk6dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZD9kZWZpbmUoZSk6KHQ9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHx8c2VsZikuZGF5anNfcGx1Z2luX2lzb1dlZWs9ZSgpfSkoTE8sZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIHQ9ImRheSI7cmV0dXJuIGZ1bmN0aW9uKGUscixuKXt2YXIgaT1vKGZ1bmN0aW9uKGwpe3JldHVybiBsLmFkZCg0LWwuaXNvV2Vla2RheSgpLHQpfSwiYSIpLGE9ci5wcm90b3R5cGU7YS5pc29XZWVrWWVhcj1mdW5jdGlvbigpe3JldHVybiBpKHRoaXMpLnllYXIoKX0sYS5pc29XZWVrPWZ1bmN0aW9uKGwpe2lmKCF0aGlzLiR1dGlscygpLnUobCkpcmV0dXJuIHRoaXMuYWRkKDcqKGwtdGhpcy5pc29XZWVrKCkpLHQpO3ZhciB1LGgsZixkLHA9aSh0aGlzKSxtPSh1PXRoaXMuaXNvV2Vla1llYXIoKSxoPXRoaXMuJHUsZj0oaD9uLnV0YzpuKSgpLnllYXIodSkuc3RhcnRPZigieWVhciIpLGQ9NC1mLmlzb1dlZWtkYXkoKSxmLmlzb1dlZWtkYXkoKT40JiYoZCs9NyksZi5hZGQoZCx0KSk7cmV0dXJuIHAuZGlmZihtLCJ3ZWVrIikrMX0sYS5pc29XZWVrZGF5PWZ1bmN0aW9uKGwpe3JldHVybiB0aGlzLiR1dGlscygpLnUobCk/dGhpcy5kYXkoKXx8Nzp0aGlzLmRheSh0aGlzLmRheSgpJTc/bDpsLTcpfTt2YXIgcz1hLnN0YXJ0T2Y7YS5zdGFydE9mPWZ1bmN0aW9uKGwsdSl7dmFyIGg9dGhpcy4kdXRpbHMoKSxmPSEhaC51KHUpfHx1O3JldHVybiBoLnAobCk9PT0iaXNvd2VlayI/Zj90aGlzLmRhdGUodGhpcy5kYXRlKCktKHRoaXMuaXNvV2Vla2RheSgpLTEpKS5zdGFydE9mKCJkYXkiKTp0aGlzLmRhdGUodGhpcy5kYXRlKCktMS0odGhpcy5pc29XZWVrZGF5KCktMSkrNykuZW5kT2YoImRheSIpOnMuYmluZCh0aGlzKShsLHUpfX19KX0pO3ZhciBPaGU9UGkoKE5PLE1PKT0+eyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24odCxlKXt0eXBlb2YgTk89PSJvYmplY3QiJiZ0eXBlb2YgTU88InUiP01PLmV4cG9ydHM9ZSgpOnR5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJmRlZmluZS5hbWQ/ZGVmaW5lKGUpOih0PXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR8fHNlbGYpLmRheWpzX3BsdWdpbl9jdXN0b21QYXJzZUZvcm1hdD1lKCl9KShOTyxmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD17TFRTOiJoOm1tOnNzIEEiLExUOiJoOm1tIEEiLEw6Ik1NL0REL1lZWVkiLExMOiJNTU1NIEQsIFlZWVkiLExMTDoiTU1NTSBELCBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgTU1NTSBELCBZWVlZIGg6bW0gQSJ9LGU9LyhcW1teW10qXF0pfChbLV86Ly4sKClcc10rKXwoQXxhfFF8WVlZWXxZWT98d3c/fE1NP00/TT98RG98REQ/fGhoP3xISD98bW0/fHNzP3xTezEsM318enxaWj8pL2cscj0vXGQvLG49L1xkXGQvLGk9L1xkXGQ/LyxhPS9cZCpbXi1fOi8sKClcc1xkXSsvLHM9e30sbD1vKGZ1bmN0aW9uKGcpe3JldHVybihnPStnKSsoZz42OD8xOTAwOjJlMyl9LCJhIiksdT1vKGZ1bmN0aW9uKGcpe3JldHVybiBmdW5jdGlvbih5KXt0aGlzW2ddPSt5fX0sImYiKSxoPVsvWystXVxkXGQ6PyhcZFxkKT98Wi8sZnVuY3Rpb24oZyl7KHRoaXMuem9uZXx8KHRoaXMuem9uZT17fSkpLm9mZnNldD1mdW5jdGlvbih5KXtpZigheXx8eT09PSJaIilyZXR1cm4gMDt2YXIgdj15Lm1hdGNoKC8oWystXXxcZFxkKS9nKSx4PTYwKnZbMV0rKCt2WzJdfHwwKTtyZXR1cm4geD09PTA/MDp2WzBdPT09IisiPy14Onh9KGcpfV0sZj1vKGZ1bmN0aW9uKGcpe3ZhciB5PXNbZ107cmV0dXJuIHkmJih5LmluZGV4T2Y/eTp5LnMuY29uY2F0KHkuZikpfSwidSIpLGQ9byhmdW5jdGlvbihnLHkpe3ZhciB2LHg9cy5tZXJpZGllbTtpZih4KXtmb3IodmFyIGI9MTtiPD0yNDtiKz0xKWlmKGcuaW5kZXhPZih4KGIsMCx5KSk+LTEpe3Y9Yj4xMjticmVha319ZWxzZSB2PWc9PT0oeT8icG0iOiJQTSIpO3JldHVybiB2fSwiZCIpLHA9e0E6W2EsZnVuY3Rpb24oZyl7dGhpcy5hZnRlcm5vb249ZChnLCExKX1dLGE6W2EsZnVuY3Rpb24oZyl7dGhpcy5hZnRlcm5vb249ZChnLCEwKX1dLFE6W3IsZnVuY3Rpb24oZyl7dGhpcy5tb250aD0zKihnLTEpKzF9XSxTOltyLGZ1bmN0aW9uKGcpe3RoaXMubWlsbGlzZWNvbmRzPTEwMCorZ31dLFNTOltuLGZ1bmN0aW9uKGcpe3RoaXMubWlsbGlzZWNvbmRzPTEwKitnfV0sU1NTOlsvXGR7M30vLGZ1bmN0aW9uKGcpe3RoaXMubWlsbGlzZWNvbmRzPStnfV0sczpbaSx1KCJzZWNvbmRzIildLHNzOltpLHUoInNlY29uZHMiKV0sbTpbaSx1KCJtaW51dGVzIildLG1tOltpLHUoIm1pbnV0ZXMiKV0sSDpbaSx1KCJob3VycyIpXSxoOltpLHUoImhvdXJzIildLEhIOltpLHUoImhvdXJzIildLGhoOltpLHUoImhvdXJzIildLEQ6W2ksdSgiZGF5IildLEREOltuLHUoImRheSIpXSxEbzpbYSxmdW5jdGlvbihnKXt2YXIgeT1zLm9yZGluYWwsdj1nLm1hdGNoKC9cZCsvKTtpZih0aGlzLmRheT12WzBdLHkpZm9yKHZhciB4PTE7eDw9MzE7eCs9MSl5KHgpLnJlcGxhY2UoL1xbfFxdL2csIiIpPT09ZyYmKHRoaXMuZGF5PXgpfV0sdzpbaSx1KCJ3ZWVrIildLHd3OltuLHUoIndlZWsiKV0sTTpbaSx1KCJtb250aCIpXSxNTTpbbix1KCJtb250aCIpXSxNTU06W2EsZnVuY3Rpb24oZyl7dmFyIHk9ZigibW9udGhzIiksdj0oZigibW9udGhzU2hvcnQiKXx8eS5tYXAoZnVuY3Rpb24oeCl7cmV0dXJuIHguc2xpY2UoMCwzKX0pKS5pbmRleE9mKGcpKzE7aWYodjwxKXRocm93IG5ldyBFcnJvcjt0aGlzLm1vbnRoPXYlMTJ8fHZ9XSxNTU1NOlthLGZ1bmN0aW9uKGcpe3ZhciB5PWYoIm1vbnRocyIpLmluZGV4T2YoZykrMTtpZih5PDEpdGhyb3cgbmV3IEVycm9yO3RoaXMubW9udGg9eSUxMnx8eX1dLFk6Wy9bKy1dP1xkKy8sdSgieWVhciIpXSxZWTpbbixmdW5jdGlvbihnKXt0aGlzLnllYXI9bChnKX1dLFlZWVk6Wy9cZHs0fS8sdSgieWVhciIpXSxaOmgsWlo6aH07ZnVuY3Rpb24gbShnKXt2YXIgeSx2O3k9Zyx2PXMmJnMuZm9ybWF0cztmb3IodmFyIHg9KGc9eS5yZXBsYWNlKC8oXFtbXlxdXStdKXwoTFRTP3xsezEsNH18THsxLDR9KS9nLGZ1bmN0aW9uKEMsRCxPKXt2YXIgUj1PJiZPLnRvVXBwZXJDYXNlKCk7cmV0dXJuIER8fHZbT118fHRbT118fHZbUl0ucmVwbGFjZSgvKFxbW15cXV0rXSl8KE1NTU18TU18RER8ZGRkZCkvZyxmdW5jdGlvbihrLEwsQSl7cmV0dXJuIEx8fEEuc2xpY2UoMSl9KX0pKS5tYXRjaChlKSxiPXgubGVuZ3RoLFQ9MDtUPGI7VCs9MSl7dmFyIFM9eFtUXSx3PXBbU10sRT13JiZ3WzBdLF89dyYmd1sxXTt4W1RdPV8/e3JlZ2V4OkUscGFyc2VyOl99OlMucmVwbGFjZSgvXlxbfFxdJC9nLCIiKX1yZXR1cm4gZnVuY3Rpb24oQyl7Zm9yKHZhciBEPXt9LE89MCxSPTA7TzxiO08rPTEpe3ZhciBrPXhbT107aWYodHlwZW9mIGs9PSJzdHJpbmciKVIrPWsubGVuZ3RoO2Vsc2V7dmFyIEw9ay5yZWdleCxBPWsucGFyc2VyLEk9Qy5zbGljZShSKSxNPUwuZXhlYyhJKVswXTtBLmNhbGwoRCxNKSxDPUMucmVwbGFjZShNLCIiKX19cmV0dXJuIGZ1bmN0aW9uKFApe3ZhciBCPVAuYWZ0ZXJub29uO2lmKEIhPT12b2lkIDApe3ZhciBGPVAuaG91cnM7Qj9GPDEyJiYoUC5ob3Vycys9MTIpOkY9PT0xMiYmKFAuaG91cnM9MCksZGVsZXRlIFAuYWZ0ZXJub29ufX0oRCksRH19cmV0dXJuIG8obSwibCIpLGZ1bmN0aW9uKGcseSx2KXt2LnAuY3VzdG9tUGFyc2VGb3JtYXQ9ITAsZyYmZy5wYXJzZVR3b0RpZ2l0WWVhciYmKGw9Zy5wYXJzZVR3b0RpZ2l0WWVhcik7dmFyIHg9eS5wcm90b3R5cGUsYj14LnBhcnNlO3gucGFyc2U9ZnVuY3Rpb24oVCl7dmFyIFM9VC5kYXRlLHc9VC51dGMsRT1ULmFyZ3M7dGhpcy4kdT13O3ZhciBfPUVbMV07aWYodHlwZW9mIF89PSJzdHJpbmciKXt2YXIgQz1FWzJdPT09ITAsRD1FWzNdPT09ITAsTz1DfHxELFI9RVsyXTtEJiYoUj1FWzJdKSxzPXRoaXMuJGxvY2FsZSgpLCFDJiZSJiYocz12LkxzW1JdKSx0aGlzLiRkPWZ1bmN0aW9uKEksTSxQLEIpe3RyeXtpZihbIngiLCJYIl0uaW5kZXhPZihNKT4tMSlyZXR1cm4gbmV3IERhdGUoKE09PT0iWCI/MWUzOjEpKkkpO3ZhciBGPW0oTSkoSSksej1GLnllYXIsJD1GLm1vbnRoLFU9Ri5kYXksSz1GLmhvdXJzLGVlPUYubWludXRlcyxZPUYuc2Vjb25kcyxjZT1GLm1pbGxpc2Vjb25kcyxaPUYuem9uZSx1ZT1GLndlZWssUT1uZXcgRGF0ZSxqPVV8fCh6fHwkPzE6US5nZXREYXRlKCkpLG5lPXp8fFEuZ2V0RnVsbFllYXIoKSx0ZT0wO3omJiEkfHwodGU9JD4wPyQtMTpRLmdldE1vbnRoKCkpO3ZhciBoZSxsZT1LfHwwLEo9ZWV8fDAsU2U9WXx8MCxzZT1jZXx8MDtyZXR1cm4gWj9uZXcgRGF0ZShEYXRlLlVUQyhuZSx0ZSxqLGxlLEosU2Usc2UrNjAqWi5vZmZzZXQqMWUzKSk6UD9uZXcgRGF0ZShEYXRlLlVUQyhuZSx0ZSxqLGxlLEosU2Usc2UpKTooaGU9bmV3IERhdGUobmUsdGUsaixsZSxKLFNlLHNlKSx1ZSYmKGhlPUIoaGUpLndlZWsodWUpLnRvRGF0ZSgpKSxoZSl9Y2F0Y2h7cmV0dXJuIG5ldyBEYXRlKCIiKX19KFMsXyx3LHYpLHRoaXMuaW5pdCgpLFImJlIhPT0hMCYmKHRoaXMuJEw9dGhpcy5sb2NhbGUoUikuJEwpLE8mJlMhPXRoaXMuZm9ybWF0KF8pJiYodGhpcy4kZD1uZXcgRGF0ZSgiIikpLHM9e319ZWxzZSBpZihfIGluc3RhbmNlb2YgQXJyYXkpZm9yKHZhciBrPV8ubGVuZ3RoLEw9MTtMPD1rO0wrPTEpe0VbMV09X1tMLTFdO3ZhciBBPXYuYXBwbHkodGhpcyxFKTtpZihBLmlzVmFsaWQoKSl7dGhpcy4kZD1BLiRkLHRoaXMuJEw9QS4kTCx0aGlzLmluaXQoKTticmVha31MPT09ayYmKHRoaXMuJGQ9bmV3IERhdGUoIiIpKX1lbHNlIGIuY2FsbCh0aGlzLFQpfX19KX0pO3ZhciBQaGU9UGkoKElPLE9PKT0+eyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24odCxlKXt0eXBlb2YgSU89PSJvYmplY3QiJiZ0eXBlb2YgT088InUiP09PLmV4cG9ydHM9ZSgpOnR5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJmRlZmluZS5hbWQ/ZGVmaW5lKGUpOih0PXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR8fHNlbGYpLmRheWpzX3BsdWdpbl9hZHZhbmNlZEZvcm1hdD1lKCl9KShJTyxmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj1lLnByb3RvdHlwZSxuPXIuZm9ybWF0O3IuZm9ybWF0PWZ1bmN0aW9uKGkpe3ZhciBhPXRoaXMscz10aGlzLiRsb2NhbGUoKTtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG4uYmluZCh0aGlzKShpKTt2YXIgbD10aGlzLiR1dGlscygpLHU9KGl8fCJZWVlZLU1NLUREVEhIOm1tOnNzWiIpLnJlcGxhY2UoL1xbKFteXF1dKyldfFF8d298d3d8d3xXV3xXfHp6enx6fGdnZ2d8R0dHR3xEb3xYfHh8a3sxLDJ9fFMvZyxmdW5jdGlvbihoKXtzd2l0Y2goaCl7Y2FzZSJRIjpyZXR1cm4gTWF0aC5jZWlsKChhLiRNKzEpLzMpO2Nhc2UiRG8iOnJldHVybiBzLm9yZGluYWwoYS4kRCk7Y2FzZSJnZ2dnIjpyZXR1cm4gYS53ZWVrWWVhcigpO2Nhc2UiR0dHRyI6cmV0dXJuIGEuaXNvV2Vla1llYXIoKTtjYXNlIndvIjpyZXR1cm4gcy5vcmRpbmFsKGEud2VlaygpLCJXIik7Y2FzZSJ3IjpjYXNlInd3IjpyZXR1cm4gbC5zKGEud2VlaygpLGg9PT0idyI/MToyLCIwIik7Y2FzZSJXIjpjYXNlIldXIjpyZXR1cm4gbC5zKGEuaXNvV2VlaygpLGg9PT0iVyI/MToyLCIwIik7Y2FzZSJrIjpjYXNlImtrIjpyZXR1cm4gbC5zKFN0cmluZyhhLiRIPT09MD8yNDphLiRIKSxoPT09ImsiPzE6MiwiMCIpO2Nhc2UiWCI6cmV0dXJuIE1hdGguZmxvb3IoYS4kZC5nZXRUaW1lKCkvMWUzKTtjYXNlIngiOnJldHVybiBhLiRkLmdldFRpbWUoKTtjYXNlInoiOnJldHVybiJbIithLm9mZnNldE5hbWUoKSsiXSI7Y2FzZSJ6enoiOnJldHVybiJbIithLm9mZnNldE5hbWUoImxvbmciKSsiXSI7ZGVmYXVsdDpyZXR1cm4gaH19KTtyZXR1cm4gbi5iaW5kKHRoaXMpKHUpfX19KX0pO2Z1bmN0aW9uIFpoZSh0LGUscil7bGV0IG49ITA7Zm9yKDtuOyluPSExLHIuZm9yRWFjaChmdW5jdGlvbihpKXtsZXQgYT0iXlxccyoiK2krIlxccyokIixzPW5ldyBSZWdFeHAoYSk7dFswXS5tYXRjaChzKSYmKGVbaV09ITAsdC5zaGlmdCgxKSxuPSEwKX0pfXZhciAkaGUsbW8semhlLEdoZSxWaGUsQmhlLHFjLCRPLHpPLEdPLENiLEFiLFZPLFVPLFJTLFIxLEhPLFVoZSxXTyxfYixxTyxZTyxOUyxQTyxCR2UsRkdlLCRHZSx6R2UsR0dlLFZHZSxVR2UsSEdlLFdHZSxxR2UsWUdlLFhHZSxqR2UsS0dlLFFHZSxaR2UsSkdlLGVWZSx0VmUsclZlLG5WZSxpVmUsYVZlLEhoZSxzVmUsb1ZlLGxWZSxXaGUsY1ZlLEJPLHFoZSxZaGUsRFMsTDEsdVZlLGhWZSxGTyxMUyxVaSxYaGUsZlZlLFBwLGRWZSxGaGUscFZlLGpoZSxtVmUsS2hlLGdWZSx5VmUsUWhlLEpoZT1OKCgpPT57InVzZSBzdHJpY3QiOyRoZT1BYShaMCgpLDEpLG1vPUFhKFU0KCksMSksemhlPUFhKEloZSgpLDEpLEdoZT1BYShPaGUoKSwxKSxWaGU9QWEoUGhlKCksMSk7eXQoKTtHdCgpO2VyKCk7Y2koKTttby5kZWZhdWx0LmV4dGVuZCh6aGUuZGVmYXVsdCk7bW8uZGVmYXVsdC5leHRlbmQoR2hlLmRlZmF1bHQpO21vLmRlZmF1bHQuZXh0ZW5kKFZoZS5kZWZhdWx0KTtCaGU9e2ZyaWRheTo1LHNhdHVyZGF5OjZ9LHFjPSIiLCRPPSIiLEdPPSIiLENiPVtdLEFiPVtdLFZPPW5ldyBNYXAsVU89W10sUlM9W10sUjE9IiIsSE89IiIsVWhlPVsiYWN0aXZlIiwiZG9uZSIsImNyaXQiLCJtaWxlc3RvbmUiLCJ2ZXJ0Il0sV089W10sX2I9ITEscU89ITEsWU89InN1bmRheSIsTlM9InNhdHVyZGF5IixQTz0wLEJHZT1vKGZ1bmN0aW9uKCl7VU89W10sUlM9W10sUjE9IiIsV089W10sRFM9MCxGTz12b2lkIDAsTFM9dm9pZCAwLFVpPVtdLHFjPSIiLCRPPSIiLEhPPSIiLHpPPXZvaWQgMCxHTz0iIixDYj1bXSxBYj1bXSxfYj0hMSxxTz0hMSxQTz0wLFZPPW5ldyBNYXAsa3IoKSxZTz0ic3VuZGF5IixOUz0ic2F0dXJkYXkifSwiY2xlYXIiKSxGR2U9byhmdW5jdGlvbih0KXskTz10fSwic2V0QXhpc0Zvcm1hdCIpLCRHZT1vKGZ1bmN0aW9uKCl7cmV0dXJuICRPfSwiZ2V0QXhpc0Zvcm1hdCIpLHpHZT1vKGZ1bmN0aW9uKHQpe3pPPXR9LCJzZXRUaWNrSW50ZXJ2YWwiKSxHR2U9byhmdW5jdGlvbigpe3JldHVybiB6T30sImdldFRpY2tJbnRlcnZhbCIpLFZHZT1vKGZ1bmN0aW9uKHQpe0dPPXR9LCJzZXRUb2RheU1hcmtlciIpLFVHZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIEdPfSwiZ2V0VG9kYXlNYXJrZXIiKSxIR2U9byhmdW5jdGlvbih0KXtxYz10fSwic2V0RGF0ZUZvcm1hdCIpLFdHZT1vKGZ1bmN0aW9uKCl7X2I9ITB9LCJlbmFibGVJbmNsdXNpdmVFbmREYXRlcyIpLHFHZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIF9ifSwiZW5kRGF0ZXNBcmVJbmNsdXNpdmUiKSxZR2U9byhmdW5jdGlvbigpe3FPPSEwfSwiZW5hYmxlVG9wQXhpcyIpLFhHZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIHFPfSwidG9wQXhpc0VuYWJsZWQiKSxqR2U9byhmdW5jdGlvbih0KXtITz10fSwic2V0RGlzcGxheU1vZGUiKSxLR2U9byhmdW5jdGlvbigpe3JldHVybiBIT30sImdldERpc3BsYXlNb2RlIiksUUdlPW8oZnVuY3Rpb24oKXtyZXR1cm4gcWN9LCJnZXREYXRlRm9ybWF0IiksWkdlPW8oZnVuY3Rpb24odCl7Q2I9dC50b0xvd2VyQ2FzZSgpLnNwbGl0KC9bXHMsXSsvKX0sInNldEluY2x1ZGVzIiksSkdlPW8oZnVuY3Rpb24oKXtyZXR1cm4gQ2J9LCJnZXRJbmNsdWRlcyIpLGVWZT1vKGZ1bmN0aW9uKHQpe0FiPXQudG9Mb3dlckNhc2UoKS5zcGxpdCgvW1xzLF0rLyl9LCJzZXRFeGNsdWRlcyIpLHRWZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIEFifSwiZ2V0RXhjbHVkZXMiKSxyVmU9byhmdW5jdGlvbigpe3JldHVybiBWT30sImdldExpbmtzIiksblZlPW8oZnVuY3Rpb24odCl7UjE9dCxVTy5wdXNoKHQpfSwiYWRkU2VjdGlvbiIpLGlWZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIFVPfSwiZ2V0U2VjdGlvbnMiKSxhVmU9byhmdW5jdGlvbigpe2xldCB0PUZoZSgpLGU9MTAscj0wO2Zvcig7IXQmJnI8ZTspdD1GaGUoKSxyKys7cmV0dXJuIFJTPVVpLFJTfSwiZ2V0VGFza3MiKSxIaGU9byhmdW5jdGlvbih0LGUscixuKXtyZXR1cm4gbi5pbmNsdWRlcyh0LmZvcm1hdChlLnRyaW0oKSkpPyExOnIuaW5jbHVkZXMoIndlZWtlbmRzIikmJih0Lmlzb1dlZWtkYXkoKT09PUJoZVtOU118fHQuaXNvV2Vla2RheSgpPT09QmhlW05TXSsxKXx8ci5pbmNsdWRlcyh0LmZvcm1hdCgiZGRkZCIpLnRvTG93ZXJDYXNlKCkpPyEwOnIuaW5jbHVkZXModC5mb3JtYXQoZS50cmltKCkpKX0sImlzSW52YWxpZERhdGUiKSxzVmU9byhmdW5jdGlvbih0KXtZTz10fSwic2V0V2Vla2RheSIpLG9WZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIFlPfSwiZ2V0V2Vla2RheSIpLGxWZT1vKGZ1bmN0aW9uKHQpe05TPXR9LCJzZXRXZWVrZW5kIiksV2hlPW8oZnVuY3Rpb24odCxlLHIsbil7aWYoIXIubGVuZ3RofHx0Lm1hbnVhbEVuZFRpbWUpcmV0dXJuO2xldCBpO3Quc3RhcnRUaW1lIGluc3RhbmNlb2YgRGF0ZT9pPSgwLG1vLmRlZmF1bHQpKHQuc3RhcnRUaW1lKTppPSgwLG1vLmRlZmF1bHQpKHQuc3RhcnRUaW1lLGUsITApLGk9aS5hZGQoMSwiZCIpO2xldCBhO3QuZW5kVGltZSBpbnN0YW5jZW9mIERhdGU/YT0oMCxtby5kZWZhdWx0KSh0LmVuZFRpbWUpOmE9KDAsbW8uZGVmYXVsdCkodC5lbmRUaW1lLGUsITApO2xldFtzLGxdPWNWZShpLGEsZSxyLG4pO3QuZW5kVGltZT1zLnRvRGF0ZSgpLHQucmVuZGVyRW5kVGltZT1sfSwiY2hlY2tUYXNrRGF0ZXMiKSxjVmU9byhmdW5jdGlvbih0LGUscixuLGkpe2xldCBhPSExLHM9bnVsbDtmb3IoO3Q8PWU7KWF8fChzPWUudG9EYXRlKCkpLGE9SGhlKHQscixuLGkpLGEmJihlPWUuYWRkKDEsImQiKSksdD10LmFkZCgxLCJkIik7cmV0dXJuW2Usc119LCJmaXhUYXNrRGF0ZXMiKSxCTz1vKGZ1bmN0aW9uKHQsZSxyKXtyPXIudHJpbSgpO2xldCBpPS9eYWZ0ZXJccysoPzxpZHM+W1xkXHctIF0rKS8uZXhlYyhyKTtpZihpIT09bnVsbCl7bGV0IHM9bnVsbDtmb3IobGV0IHUgb2YgaS5ncm91cHMuaWRzLnNwbGl0KCIgIikpe2xldCBoPVBwKHUpO2ghPT12b2lkIDAmJighc3x8aC5lbmRUaW1lPnMuZW5kVGltZSkmJihzPWgpfWlmKHMpcmV0dXJuIHMuZW5kVGltZTtsZXQgbD1uZXcgRGF0ZTtyZXR1cm4gbC5zZXRIb3VycygwLDAsMCwwKSxsfWxldCBhPSgwLG1vLmRlZmF1bHQpKHIsZS50cmltKCksITApO2lmKGEuaXNWYWxpZCgpKXJldHVybiBhLnRvRGF0ZSgpO3tYLmRlYnVnKCJJbnZhbGlkIGRhdGU6IityKSxYLmRlYnVnKCJXaXRoIGRhdGUgZm9ybWF0OiIrZS50cmltKCkpO2xldCBzPW5ldyBEYXRlKHIpO2lmKHM9PT12b2lkIDB8fGlzTmFOKHMuZ2V0VGltZSgpKXx8cy5nZXRGdWxsWWVhcigpPC0xZTR8fHMuZ2V0RnVsbFllYXIoKT4xZTQpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGRhdGU6IityKTtyZXR1cm4gc319LCJnZXRTdGFydERhdGUiKSxxaGU9byhmdW5jdGlvbih0KXtsZXQgZT0vXihcZCsoPzpcLlxkKyk/KShbTWRobXN3eV18bXMpJC8uZXhlYyh0LnRyaW0oKSk7cmV0dXJuIGUhPT1udWxsP1tOdW1iZXIucGFyc2VGbG9hdChlWzFdKSxlWzJdXTpbTmFOLCJtcyJdfSwicGFyc2VEdXJhdGlvbiIpLFloZT1vKGZ1bmN0aW9uKHQsZSxyLG49ITEpe3I9ci50cmltKCk7bGV0IGE9L151bnRpbFxzKyg/PGlkcz5bXGRcdy0gXSspLy5leGVjKHIpO2lmKGEhPT1udWxsKXtsZXQgZj1udWxsO2ZvcihsZXQgcCBvZiBhLmdyb3Vwcy5pZHMuc3BsaXQoIiAiKSl7bGV0IG09UHAocCk7bSE9PXZvaWQgMCYmKCFmfHxtLnN0YXJ0VGltZTxmLnN0YXJ0VGltZSkmJihmPW0pfWlmKGYpcmV0dXJuIGYuc3RhcnRUaW1lO2xldCBkPW5ldyBEYXRlO3JldHVybiBkLnNldEhvdXJzKDAsMCwwLDApLGR9bGV0IHM9KDAsbW8uZGVmYXVsdCkocixlLnRyaW0oKSwhMCk7aWYocy5pc1ZhbGlkKCkpcmV0dXJuIG4mJihzPXMuYWRkKDEsImQiKSkscy50b0RhdGUoKTtsZXQgbD0oMCxtby5kZWZhdWx0KSh0KSxbdSxoXT1xaGUocik7aWYoIU51bWJlci5pc05hTih1KSl7bGV0IGY9bC5hZGQodSxoKTtmLmlzVmFsaWQoKSYmKGw9Zil9cmV0dXJuIGwudG9EYXRlKCl9LCJnZXRFbmREYXRlIiksRFM9MCxMMT1vKGZ1bmN0aW9uKHQpe3JldHVybiB0PT09dm9pZCAwPyhEUz1EUysxLCJ0YXNrIitEUyk6dH0sInBhcnNlSWQiKSx1VmU9byhmdW5jdGlvbih0LGUpe2xldCByO2Uuc3Vic3RyKDAsMSk9PT0iOiI/cj1lLnN1YnN0cigxLGUubGVuZ3RoKTpyPWU7bGV0IG49ci5zcGxpdCgiLCIpLGk9e307WmhlKG4saSxVaGUpO2ZvcihsZXQgcz0wO3M8bi5sZW5ndGg7cysrKW5bc109bltzXS50cmltKCk7bGV0IGE9IiI7c3dpdGNoKG4ubGVuZ3RoKXtjYXNlIDE6aS5pZD1MMSgpLGkuc3RhcnRUaW1lPXQuZW5kVGltZSxhPW5bMF07YnJlYWs7Y2FzZSAyOmkuaWQ9TDEoKSxpLnN0YXJ0VGltZT1CTyh2b2lkIDAscWMsblswXSksYT1uWzFdO2JyZWFrO2Nhc2UgMzppLmlkPUwxKG5bMF0pLGkuc3RhcnRUaW1lPUJPKHZvaWQgMCxxYyxuWzFdKSxhPW5bMl07YnJlYWs7ZGVmYXVsdDp9cmV0dXJuIGEmJihpLmVuZFRpbWU9WWhlKGkuc3RhcnRUaW1lLHFjLGEsX2IpLGkubWFudWFsRW5kVGltZT0oMCxtby5kZWZhdWx0KShhLCJZWVlZLU1NLUREIiwhMCkuaXNWYWxpZCgpLFdoZShpLHFjLEFiLENiKSksaX0sImNvbXBpbGVEYXRhIiksaFZlPW8oZnVuY3Rpb24odCxlKXtsZXQgcjtlLnN1YnN0cigwLDEpPT09IjoiP3I9ZS5zdWJzdHIoMSxlLmxlbmd0aCk6cj1lO2xldCBuPXIuc3BsaXQoIiwiKSxpPXt9O1poZShuLGksVWhlKTtmb3IobGV0IGE9MDthPG4ubGVuZ3RoO2ErKyluW2FdPW5bYV0udHJpbSgpO3N3aXRjaChuLmxlbmd0aCl7Y2FzZSAxOmkuaWQ9TDEoKSxpLnN0YXJ0VGltZT17dHlwZToicHJldlRhc2tFbmQiLGlkOnR9LGkuZW5kVGltZT17ZGF0YTpuWzBdfTticmVhaztjYXNlIDI6aS5pZD1MMSgpLGkuc3RhcnRUaW1lPXt0eXBlOiJnZXRTdGFydERhdGUiLHN0YXJ0RGF0YTpuWzBdfSxpLmVuZFRpbWU9e2RhdGE6blsxXX07YnJlYWs7Y2FzZSAzOmkuaWQ9TDEoblswXSksaS5zdGFydFRpbWU9e3R5cGU6ImdldFN0YXJ0RGF0ZSIsc3RhcnREYXRhOm5bMV19LGkuZW5kVGltZT17ZGF0YTpuWzJdfTticmVhaztkZWZhdWx0On1yZXR1cm4gaX0sInBhcnNlRGF0YSIpLFVpPVtdLFhoZT17fSxmVmU9byhmdW5jdGlvbih0LGUpe2xldCByPXtzZWN0aW9uOlIxLHR5cGU6UjEscHJvY2Vzc2VkOiExLG1hbnVhbEVuZFRpbWU6ITEscmVuZGVyRW5kVGltZTpudWxsLHJhdzp7ZGF0YTplfSx0YXNrOnQsY2xhc3NlczpbXX0sbj1oVmUoTFMsZSk7ci5yYXcuc3RhcnRUaW1lPW4uc3RhcnRUaW1lLHIucmF3LmVuZFRpbWU9bi5lbmRUaW1lLHIuaWQ9bi5pZCxyLnByZXZUYXNrSWQ9TFMsci5hY3RpdmU9bi5hY3RpdmUsci5kb25lPW4uZG9uZSxyLmNyaXQ9bi5jcml0LHIubWlsZXN0b25lPW4ubWlsZXN0b25lLHIudmVydD1uLnZlcnQsci5vcmRlcj1QTyxQTysrO2xldCBpPVVpLnB1c2gocik7TFM9ci5pZCxYaGVbci5pZF09aS0xfSwiYWRkVGFzayIpLFBwPW8oZnVuY3Rpb24odCl7bGV0IGU9WGhlW3RdO3JldHVybiBVaVtlXX0sImZpbmRUYXNrQnlJZCIpLGRWZT1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9e3NlY3Rpb246UjEsdHlwZTpSMSxkZXNjcmlwdGlvbjp0LHRhc2s6dCxjbGFzc2VzOltdfSxuPXVWZShGTyxlKTtyLnN0YXJ0VGltZT1uLnN0YXJ0VGltZSxyLmVuZFRpbWU9bi5lbmRUaW1lLHIuaWQ9bi5pZCxyLmFjdGl2ZT1uLmFjdGl2ZSxyLmRvbmU9bi5kb25lLHIuY3JpdD1uLmNyaXQsci5taWxlc3RvbmU9bi5taWxlc3RvbmUsci52ZXJ0PW4udmVydCxGTz1yLFJTLnB1c2gocil9LCJhZGRUYXNrT3JnIiksRmhlPW8oZnVuY3Rpb24oKXtsZXQgdD1vKGZ1bmN0aW9uKHIpe2xldCBuPVVpW3JdLGk9IiI7c3dpdGNoKFVpW3JdLnJhdy5zdGFydFRpbWUudHlwZSl7Y2FzZSJwcmV2VGFza0VuZCI6e2xldCBhPVBwKG4ucHJldlRhc2tJZCk7bi5zdGFydFRpbWU9YS5lbmRUaW1lO2JyZWFrfWNhc2UiZ2V0U3RhcnREYXRlIjppPUJPKHZvaWQgMCxxYyxVaVtyXS5yYXcuc3RhcnRUaW1lLnN0YXJ0RGF0YSksaSYmKFVpW3JdLnN0YXJ0VGltZT1pKTticmVha31yZXR1cm4gVWlbcl0uc3RhcnRUaW1lJiYoVWlbcl0uZW5kVGltZT1ZaGUoVWlbcl0uc3RhcnRUaW1lLHFjLFVpW3JdLnJhdy5lbmRUaW1lLmRhdGEsX2IpLFVpW3JdLmVuZFRpbWUmJihVaVtyXS5wcm9jZXNzZWQ9ITAsVWlbcl0ubWFudWFsRW5kVGltZT0oMCxtby5kZWZhdWx0KShVaVtyXS5yYXcuZW5kVGltZS5kYXRhLCJZWVlZLU1NLUREIiwhMCkuaXNWYWxpZCgpLFdoZShVaVtyXSxxYyxBYixDYikpKSxVaVtyXS5wcm9jZXNzZWR9LCJjb21waWxlVGFzayIpLGU9ITA7Zm9yKGxldFtyLG5db2YgVWkuZW50cmllcygpKXQociksZT1lJiZuLnByb2Nlc3NlZDtyZXR1cm4gZX0sImNvbXBpbGVUYXNrcyIpLHBWZT1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9ZTttZSgpLnNlY3VyaXR5TGV2ZWwhPT0ibG9vc2UiJiYocj0oMCwkaGUuc2FuaXRpemVVcmwpKGUpKSx0LnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbihuKXtQcChuKSE9PXZvaWQgMCYmKEtoZShuLCgpPT57d2luZG93Lm9wZW4ociwiX3NlbGYiKX0pLFZPLnNldChuLHIpKX0pLGpoZSh0LCJjbGlja2FibGUiKX0sInNldExpbmsiKSxqaGU9byhmdW5jdGlvbih0LGUpe3Quc3BsaXQoIiwiKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe2xldCBuPVBwKHIpO24hPT12b2lkIDAmJm4uY2xhc3Nlcy5wdXNoKGUpfSl9LCJzZXRDbGFzcyIpLG1WZT1vKGZ1bmN0aW9uKHQsZSxyKXtpZihtZSgpLnNlY3VyaXR5TGV2ZWwhPT0ibG9vc2UifHxlPT09dm9pZCAwKXJldHVybjtsZXQgbj1bXTtpZih0eXBlb2Ygcj09InN0cmluZyIpe249ci5zcGxpdCgvLCg/PSg/Oig/OlteIl0qIil7Mn0pKlteIl0qJCkvKTtmb3IobGV0IGE9MDthPG4ubGVuZ3RoO2ErKyl7bGV0IHM9blthXS50cmltKCk7cy5zdGFydHNXaXRoKCciJykmJnMuZW5kc1dpdGgoJyInKSYmKHM9cy5zdWJzdHIoMSxzLmxlbmd0aC0yKSksblthXT1zfX1uLmxlbmd0aD09PTAmJm4ucHVzaCh0KSxQcCh0KSE9PXZvaWQgMCYmS2hlKHQsKCk9PntWdC5ydW5GdW5jKGUsLi4ubil9KX0sInNldENsaWNrRnVuIiksS2hlPW8oZnVuY3Rpb24odCxlKXtXTy5wdXNoKGZ1bmN0aW9uKCl7bGV0IHI9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2lkPSIke3R9Il1gKTtyIT09bnVsbCYmci5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXtlKCl9KX0sZnVuY3Rpb24oKXtsZXQgcj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbaWQ9IiR7dH0tdGV4dCJdYCk7ciE9PW51bGwmJnIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7ZSgpfSl9KX0sInB1c2hGdW4iKSxnVmU9byhmdW5jdGlvbih0LGUscil7dC5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24obil7bVZlKG4sZSxyKX0pLGpoZSh0LCJjbGlja2FibGUiKX0sInNldENsaWNrRXZlbnQiKSx5VmU9byhmdW5jdGlvbih0KXtXTy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UodCl9KX0sImJpbmRGdW5jdGlvbnMiKSxRaGU9e2dldENvbmZpZzpvKCgpPT5tZSgpLmdhbnR0LCJnZXRDb25maWciKSxjbGVhcjpCR2Usc2V0RGF0ZUZvcm1hdDpIR2UsZ2V0RGF0ZUZvcm1hdDpRR2UsZW5hYmxlSW5jbHVzaXZlRW5kRGF0ZXM6V0dlLGVuZERhdGVzQXJlSW5jbHVzaXZlOnFHZSxlbmFibGVUb3BBeGlzOllHZSx0b3BBeGlzRW5hYmxlZDpYR2Usc2V0QXhpc0Zvcm1hdDpGR2UsZ2V0QXhpc0Zvcm1hdDokR2Usc2V0VGlja0ludGVydmFsOnpHZSxnZXRUaWNrSW50ZXJ2YWw6R0dlLHNldFRvZGF5TWFya2VyOlZHZSxnZXRUb2RheU1hcmtlcjpVR2Usc2V0QWNjVGl0bGU6QXIsZ2V0QWNjVGl0bGU6RHIsc2V0RGlhZ3JhbVRpdGxlOk9yLGdldERpYWdyYW1UaXRsZTpOcixzZXREaXNwbGF5TW9kZTpqR2UsZ2V0RGlzcGxheU1vZGU6S0dlLHNldEFjY0Rlc2NyaXB0aW9uOkxyLGdldEFjY0Rlc2NyaXB0aW9uOlJyLGFkZFNlY3Rpb246blZlLGdldFNlY3Rpb25zOmlWZSxnZXRUYXNrczphVmUsYWRkVGFzazpmVmUsZmluZFRhc2tCeUlkOlBwLGFkZFRhc2tPcmc6ZFZlLHNldEluY2x1ZGVzOlpHZSxnZXRJbmNsdWRlczpKR2Usc2V0RXhjbHVkZXM6ZVZlLGdldEV4Y2x1ZGVzOnRWZSxzZXRDbGlja0V2ZW50OmdWZSxzZXRMaW5rOnBWZSxnZXRMaW5rczpyVmUsYmluZEZ1bmN0aW9uczp5VmUscGFyc2VEdXJhdGlvbjpxaGUsaXNJbnZhbGlkRGF0ZTpIaGUsc2V0V2Vla2RheTpzVmUsZ2V0V2Vla2RheTpvVmUsc2V0V2Vla2VuZDpsVmV9O28oWmhlLCJnZXRUYXNrVGFncyIpfSk7dmFyIE1TLHZWZSxlZmUseFZlLEp1LGJWZSx0ZmUscmZlPU4oKCk9PnsidXNlIHN0cmljdCI7TVM9QWEoVTQoKSwxKTt5dCgpO2ZyKCk7cHIoKTtHdCgpO3hpKCk7dlZlPW8oZnVuY3Rpb24oKXtYLmRlYnVnKCJTb21ldGhpbmcgaXMgY2FsbGluZywgc2V0Q29uZiwgcmVtb3ZlIHRoZSBjYWxsIil9LCJzZXRDb25mIiksZWZlPXttb25kYXk6TmgsdHVlc2RheTpJNSx3ZWRuZXNkYXk6TzUsdGh1cnNkYXk6ZmMsZnJpZGF5OlA1LHNhdHVyZGF5OkI1LHN1bmRheTp3bH0seFZlPW8oKHQsZSk9PntsZXQgcj1bLi4udF0ubWFwKCgpPT4tMS8wKSxuPVsuLi50XS5zb3J0KChhLHMpPT5hLnN0YXJ0VGltZS1zLnN0YXJ0VGltZXx8YS5vcmRlci1zLm9yZGVyKSxpPTA7Zm9yKGxldCBhIG9mIG4pZm9yKGxldCBzPTA7czxyLmxlbmd0aDtzKyspaWYoYS5zdGFydFRpbWU+PXJbc10pe3Jbc109YS5lbmRUaW1lLGEub3JkZXI9cytlLHM+aSYmKGk9cyk7YnJlYWt9cmV0dXJuIGl9LCJnZXRNYXhJbnRlcnNlY3Rpb25zIiksYlZlPW8oZnVuY3Rpb24odCxlLHIsbil7bGV0IGk9bWUoKS5nYW50dCxhPW1lKCkuc2VjdXJpdHlMZXZlbCxzO2E9PT0ic2FuZGJveCImJihzPUdlKCIjaSIrZSkpO2xldCBsPWE9PT0ic2FuZGJveCI/R2Uocy5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KTpHZSgiYm9keSIpLHU9YT09PSJzYW5kYm94Ij9zLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50OmRvY3VtZW50LGg9dS5nZXRFbGVtZW50QnlJZChlKTtKdT1oLnBhcmVudEVsZW1lbnQub2Zmc2V0V2lkdGgsSnU9PT12b2lkIDAmJihKdT0xMjAwKSxpLnVzZVdpZHRoIT09dm9pZCAwJiYoSnU9aS51c2VXaWR0aCk7bGV0IGY9bi5kYi5nZXRUYXNrcygpLGQ9W107Zm9yKGxldCBDIG9mIGYpZC5wdXNoKEMudHlwZSk7ZD1fKGQpO2xldCBwPXt9LG09MippLnRvcFBhZGRpbmc7aWYobi5kYi5nZXREaXNwbGF5TW9kZSgpPT09ImNvbXBhY3QifHxpLmRpc3BsYXlNb2RlPT09ImNvbXBhY3QiKXtsZXQgQz17fTtmb3IobGV0IE8gb2YgZilDW08uc2VjdGlvbl09PT12b2lkIDA/Q1tPLnNlY3Rpb25dPVtPXTpDW08uc2VjdGlvbl0ucHVzaChPKTtsZXQgRD0wO2ZvcihsZXQgTyBvZiBPYmplY3Qua2V5cyhDKSl7bGV0IFI9eFZlKENbT10sRCkrMTtEKz1SLG0rPVIqKGkuYmFySGVpZ2h0K2kuYmFyR2FwKSxwW09dPVJ9fWVsc2V7bSs9Zi5sZW5ndGgqKGkuYmFySGVpZ2h0K2kuYmFyR2FwKTtmb3IobGV0IEMgb2YgZClwW0NdPWYuZmlsdGVyKEQ9PkQudHlwZT09PUMpLmxlbmd0aH1oLnNldEF0dHJpYnV0ZSgidmlld0JveCIsIjAgMCAiK0p1KyIgIittKTtsZXQgZz1sLnNlbGVjdChgW2lkPSIke2V9Il1gKSx5PXo1KCkuZG9tYWluKFtXMyhmLGZ1bmN0aW9uKEMpe3JldHVybiBDLnN0YXJ0VGltZX0pLEgzKGYsZnVuY3Rpb24oQyl7cmV0dXJuIEMuZW5kVGltZX0pXSkucmFuZ2VSb3VuZChbMCxKdS1pLmxlZnRQYWRkaW5nLWkucmlnaHRQYWRkaW5nXSk7ZnVuY3Rpb24gdihDLEQpe2xldCBPPUMuc3RhcnRUaW1lLFI9RC5zdGFydFRpbWUsaz0wO3JldHVybiBPPlI/az0xOk88UiYmKGs9LTEpLGt9byh2LCJ0YXNrQ29tcGFyZSIpLGYuc29ydCh2KSx4KGYsSnUsbSksZm4oZyxtLEp1LGkudXNlTWF4V2lkdGgpLGcuYXBwZW5kKCJ0ZXh0IikudGV4dChuLmRiLmdldERpYWdyYW1UaXRsZSgpKS5hdHRyKCJ4IixKdS8yKS5hdHRyKCJ5IixpLnRpdGxlVG9wTWFyZ2luKS5hdHRyKCJjbGFzcyIsInRpdGxlVGV4dCIpO2Z1bmN0aW9uIHgoQyxELE8pe2xldCBSPWkuYmFySGVpZ2h0LGs9UitpLmJhckdhcCxMPWkudG9wUGFkZGluZyxBPWkubGVmdFBhZGRpbmcsST1UbCgpLmRvbWFpbihbMCxkLmxlbmd0aF0pLnJhbmdlKFsiIzAwQjlGQSIsIiNGOTUwMDIiXSkuaW50ZXJwb2xhdGUoYV8pO1QoayxMLEEsRCxPLEMsbi5kYi5nZXRFeGNsdWRlcygpLG4uZGIuZ2V0SW5jbHVkZXMoKSksUyhBLEwsRCxPKSxiKEMsayxMLEEsUixJLEQsTyksdyhrLEwsQSxSLEkpLEUoQSxMLEQsTyl9byh4LCJtYWtlR2FudHQiKTtmdW5jdGlvbiBiKEMsRCxPLFIsayxMLEEpe0Muc29ydCgoeiwkKT0+ei52ZXJ0PT09JC52ZXJ0PzA6ei52ZXJ0PzE6LTEpO2xldCBNPVsuLi5uZXcgU2V0KEMubWFwKHo9Pnoub3JkZXIpKV0ubWFwKHo9PkMuZmluZCgkPT4kLm9yZGVyPT09eikpO2cuYXBwZW5kKCJnIikuc2VsZWN0QWxsKCJyZWN0IikuZGF0YShNKS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLDApLmF0dHIoInkiLGZ1bmN0aW9uKHosJCl7cmV0dXJuICQ9ei5vcmRlciwkKkQrTy0yfSkuYXR0cigid2lkdGgiLGZ1bmN0aW9uKCl7cmV0dXJuIEEtaS5yaWdodFBhZGRpbmcvMn0pLmF0dHIoImhlaWdodCIsRCkuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKHope2ZvcihsZXRbJCxVXW9mIGQuZW50cmllcygpKWlmKHoudHlwZT09PVUpcmV0dXJuInNlY3Rpb24gc2VjdGlvbiIrJCVpLm51bWJlclNlY3Rpb25TdHlsZXM7cmV0dXJuInNlY3Rpb24gc2VjdGlvbjAifSkuZW50ZXIoKTtsZXQgUD1nLmFwcGVuZCgiZyIpLnNlbGVjdEFsbCgicmVjdCIpLmRhdGEoQykuZW50ZXIoKSxCPW4uZGIuZ2V0TGlua3MoKTtpZihQLmFwcGVuZCgicmVjdCIpLmF0dHIoImlkIixmdW5jdGlvbih6KXtyZXR1cm4gei5pZH0pLmF0dHIoInJ4IiwzKS5hdHRyKCJyeSIsMykuYXR0cigieCIsZnVuY3Rpb24oeil7cmV0dXJuIHoubWlsZXN0b25lP3koei5zdGFydFRpbWUpK1IrLjUqKHkoei5lbmRUaW1lKS15KHouc3RhcnRUaW1lKSktLjUqazp5KHouc3RhcnRUaW1lKStSfSkuYXR0cigieSIsZnVuY3Rpb24oeiwkKXtyZXR1cm4gJD16Lm9yZGVyLHoudmVydD9pLmdyaWRMaW5lU3RhcnRQYWRkaW5nOiQqRCtPfSkuYXR0cigid2lkdGgiLGZ1bmN0aW9uKHope3JldHVybiB6Lm1pbGVzdG9uZT9rOnoudmVydD8uMDgqazp5KHoucmVuZGVyRW5kVGltZXx8ei5lbmRUaW1lKS15KHouc3RhcnRUaW1lKX0pLmF0dHIoImhlaWdodCIsZnVuY3Rpb24oeil7cmV0dXJuIHoudmVydD9mLmxlbmd0aCooaS5iYXJIZWlnaHQraS5iYXJHYXApK2kuYmFySGVpZ2h0KjI6a30pLmF0dHIoInRyYW5zZm9ybS1vcmlnaW4iLGZ1bmN0aW9uKHosJCl7cmV0dXJuICQ9ei5vcmRlciwoeSh6LnN0YXJ0VGltZSkrUisuNSooeSh6LmVuZFRpbWUpLXkoei5zdGFydFRpbWUpKSkudG9TdHJpbmcoKSsicHggIisoJCpEK08rLjUqaykudG9TdHJpbmcoKSsicHgifSkuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKHope2xldCAkPSJ0YXNrIixVPSIiO3ouY2xhc3Nlcy5sZW5ndGg+MCYmKFU9ei5jbGFzc2VzLmpvaW4oIiAiKSk7bGV0IEs9MDtmb3IobGV0W1ksY2Vdb2YgZC5lbnRyaWVzKCkpei50eXBlPT09Y2UmJihLPVklaS5udW1iZXJTZWN0aW9uU3R5bGVzKTtsZXQgZWU9IiI7cmV0dXJuIHouYWN0aXZlP3ouY3JpdD9lZSs9IiBhY3RpdmVDcml0IjplZT0iIGFjdGl2ZSI6ei5kb25lP3ouY3JpdD9lZT0iIGRvbmVDcml0IjplZT0iIGRvbmUiOnouY3JpdCYmKGVlKz0iIGNyaXQiKSxlZS5sZW5ndGg9PT0wJiYoZWU9IiB0YXNrIiksei5taWxlc3RvbmUmJihlZT0iIG1pbGVzdG9uZSAiK2VlKSx6LnZlcnQmJihlZT0iIHZlcnQgIitlZSksZWUrPUssZWUrPSIgIitVLCQrZWV9KSxQLmFwcGVuZCgidGV4dCIpLmF0dHIoImlkIixmdW5jdGlvbih6KXtyZXR1cm4gei5pZCsiLXRleHQifSkudGV4dChmdW5jdGlvbih6KXtyZXR1cm4gei50YXNrfSkuYXR0cigiZm9udC1zaXplIixpLmZvbnRTaXplKS5hdHRyKCJ4IixmdW5jdGlvbih6KXtsZXQgJD15KHouc3RhcnRUaW1lKSxVPXkoei5yZW5kZXJFbmRUaW1lfHx6LmVuZFRpbWUpO2lmKHoubWlsZXN0b25lJiYoJCs9LjUqKHkoei5lbmRUaW1lKS15KHouc3RhcnRUaW1lKSktLjUqayxVPSQrayksei52ZXJ0KXJldHVybiB5KHouc3RhcnRUaW1lKStSO2xldCBLPXRoaXMuZ2V0QkJveCgpLndpZHRoO3JldHVybiBLPlUtJD9VK0srMS41KmkubGVmdFBhZGRpbmc+QT8kK1ItNTpVK1IrNTooVS0kKS8yKyQrUn0pLmF0dHIoInkiLGZ1bmN0aW9uKHosJCl7cmV0dXJuIHoudmVydD9pLmdyaWRMaW5lU3RhcnRQYWRkaW5nK2YubGVuZ3RoKihpLmJhckhlaWdodCtpLmJhckdhcCkrNjA6KCQ9ei5vcmRlciwkKkQraS5iYXJIZWlnaHQvMisoaS5mb250U2l6ZS8yLTIpK08pfSkuYXR0cigidGV4dC1oZWlnaHQiLGspLmF0dHIoImNsYXNzIixmdW5jdGlvbih6KXtsZXQgJD15KHouc3RhcnRUaW1lKSxVPXkoei5lbmRUaW1lKTt6Lm1pbGVzdG9uZSYmKFU9JCtrKTtsZXQgSz10aGlzLmdldEJCb3goKS53aWR0aCxlZT0iIjt6LmNsYXNzZXMubGVuZ3RoPjAmJihlZT16LmNsYXNzZXMuam9pbigiICIpKTtsZXQgWT0wO2ZvcihsZXRbWix1ZV1vZiBkLmVudHJpZXMoKSl6LnR5cGU9PT11ZSYmKFk9WiVpLm51bWJlclNlY3Rpb25TdHlsZXMpO2xldCBjZT0iIjtyZXR1cm4gei5hY3RpdmUmJih6LmNyaXQ/Y2U9ImFjdGl2ZUNyaXRUZXh0IitZOmNlPSJhY3RpdmVUZXh0IitZKSx6LmRvbmU/ei5jcml0P2NlPWNlKyIgZG9uZUNyaXRUZXh0IitZOmNlPWNlKyIgZG9uZVRleHQiK1k6ei5jcml0JiYoY2U9Y2UrIiBjcml0VGV4dCIrWSksei5taWxlc3RvbmUmJihjZSs9IiBtaWxlc3RvbmVUZXh0Iiksei52ZXJ0JiYoY2UrPSIgdmVydFRleHQiKSxLPlUtJD9VK0srMS41KmkubGVmdFBhZGRpbmc+QT9lZSsiIHRhc2tUZXh0T3V0c2lkZUxlZnQgdGFza1RleHRPdXRzaWRlIitZKyIgIitjZTplZSsiIHRhc2tUZXh0T3V0c2lkZVJpZ2h0IHRhc2tUZXh0T3V0c2lkZSIrWSsiICIrY2UrIiB3aWR0aC0iK0s6ZWUrIiB0YXNrVGV4dCB0YXNrVGV4dCIrWSsiICIrY2UrIiB3aWR0aC0iK0t9KSxtZSgpLnNlY3VyaXR5TGV2ZWw9PT0ic2FuZGJveCIpe2xldCB6O3o9R2UoIiNpIitlKTtsZXQgJD16Lm5vZGVzKClbMF0uY29udGVudERvY3VtZW50O1AuZmlsdGVyKGZ1bmN0aW9uKFUpe3JldHVybiBCLmhhcyhVLmlkKX0pLmVhY2goZnVuY3Rpb24oVSl7dmFyIEs9JC5xdWVyeVNlbGVjdG9yKCIjIitVLmlkKSxlZT0kLnF1ZXJ5U2VsZWN0b3IoIiMiK1UuaWQrIi10ZXh0Iik7bGV0IFk9Sy5wYXJlbnROb2RlO3ZhciBjZT0kLmNyZWF0ZUVsZW1lbnQoImEiKTtjZS5zZXRBdHRyaWJ1dGUoInhsaW5rOmhyZWYiLEIuZ2V0KFUuaWQpKSxjZS5zZXRBdHRyaWJ1dGUoInRhcmdldCIsIl90b3AiKSxZLmFwcGVuZENoaWxkKGNlKSxjZS5hcHBlbmRDaGlsZChLKSxjZS5hcHBlbmRDaGlsZChlZSl9KX19byhiLCJkcmF3UmVjdHMiKTtmdW5jdGlvbiBUKEMsRCxPLFIsayxMLEEsSSl7aWYoQS5sZW5ndGg9PT0wJiZJLmxlbmd0aD09PTApcmV0dXJuO2xldCBNLFA7Zm9yKGxldHtzdGFydFRpbWU6SyxlbmRUaW1lOmVlfW9mIEwpKE09PT12b2lkIDB8fEs8TSkmJihNPUspLChQPT09dm9pZCAwfHxlZT5QKSYmKFA9ZWUpO2lmKCFNfHwhUClyZXR1cm47aWYoKDAsTVMuZGVmYXVsdCkoUCkuZGlmZigoMCxNUy5kZWZhdWx0KShNKSwieWVhciIpPjUpe1gud2FybigiVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgbWluIGFuZCBtYXggdGltZSBpcyBtb3JlIHRoYW4gNSB5ZWFycy4gVGhpcyB3aWxsIGNhdXNlIHBlcmZvcm1hbmNlIGlzc3Vlcy4gU2tpcHBpbmcgZHJhd2luZyBleGNsdWRlIGRheXMuIik7cmV0dXJufWxldCBCPW4uZGIuZ2V0RGF0ZUZvcm1hdCgpLEY9W10sej1udWxsLCQ9KDAsTVMuZGVmYXVsdCkoTSk7Zm9yKDskLnZhbHVlT2YoKTw9UDspbi5kYi5pc0ludmFsaWREYXRlKCQsQixBLEkpP3o/ei5lbmQ9JDp6PXtzdGFydDokLGVuZDokfTp6JiYoRi5wdXNoKHopLHo9bnVsbCksJD0kLmFkZCgxLCJkIik7Zy5hcHBlbmQoImciKS5zZWxlY3RBbGwoInJlY3QiKS5kYXRhKEYpLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiaWQiLGZ1bmN0aW9uKEspe3JldHVybiJleGNsdWRlLSIrSy5zdGFydC5mb3JtYXQoIllZWVktTU0tREQiKX0pLmF0dHIoIngiLGZ1bmN0aW9uKEspe3JldHVybiB5KEsuc3RhcnQpK099KS5hdHRyKCJ5IixpLmdyaWRMaW5lU3RhcnRQYWRkaW5nKS5hdHRyKCJ3aWR0aCIsZnVuY3Rpb24oSyl7bGV0IGVlPUsuZW5kLmFkZCgxLCJkYXkiKTtyZXR1cm4geShlZSkteShLLnN0YXJ0KX0pLmF0dHIoImhlaWdodCIsay1ELWkuZ3JpZExpbmVTdGFydFBhZGRpbmcpLmF0dHIoInRyYW5zZm9ybS1vcmlnaW4iLGZ1bmN0aW9uKEssZWUpe3JldHVybih5KEsuc3RhcnQpK08rLjUqKHkoSy5lbmQpLXkoSy5zdGFydCkpKS50b1N0cmluZygpKyJweCAiKyhlZSpDKy41KmspLnRvU3RyaW5nKCkrInB4In0pLmF0dHIoImNsYXNzIiwiZXhjbHVkZS1yYW5nZSIpfW8oVCwiZHJhd0V4Y2x1ZGVEYXlzIik7ZnVuY3Rpb24gUyhDLEQsTyxSKXtsZXQgaz16QSh5KS50aWNrU2l6ZSgtUitEK2kuZ3JpZExpbmVTdGFydFBhZGRpbmcpLnRpY2tGb3JtYXQoTGQobi5kYi5nZXRBeGlzRm9ybWF0KCl8fGkuYXhpc0Zvcm1hdHx8IiVZLSVtLSVkIikpLEE9L14oWzEtOV1cZCopKG1pbGxpc2Vjb25kfHNlY29uZHxtaW51dGV8aG91cnxkYXl8d2Vla3xtb250aCkkLy5leGVjKG4uZGIuZ2V0VGlja0ludGVydmFsKCl8fGkudGlja0ludGVydmFsKTtpZihBIT09bnVsbCl7bGV0IEk9QVsxXSxNPUFbMl0sUD1uLmRiLmdldFdlZWtkYXkoKXx8aS53ZWVrZGF5O3N3aXRjaChNKXtjYXNlIm1pbGxpc2Vjb25kIjprLnRpY2tzKHVjLmV2ZXJ5KEkpKTticmVhaztjYXNlInNlY29uZCI6ay50aWNrcyhlby5ldmVyeShJKSk7YnJlYWs7Y2FzZSJtaW51dGUiOmsudGlja3Mod3UuZXZlcnkoSSkpO2JyZWFrO2Nhc2UiaG91ciI6ay50aWNrcyhrdS5ldmVyeShJKSk7YnJlYWs7Y2FzZSJkYXkiOmsudGlja3MoUm8uZXZlcnkoSSkpO2JyZWFrO2Nhc2Uid2VlayI6ay50aWNrcyhlZmVbUF0uZXZlcnkoSSkpO2JyZWFrO2Nhc2UibW9udGgiOmsudGlja3MoRXUuZXZlcnkoSSkpO2JyZWFrfX1pZihnLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiZ3JpZCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK0MrIiwgIisoUi01MCkrIikiKS5jYWxsKGspLnNlbGVjdEFsbCgidGV4dCIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImZpbGwiLCIjMDAwIikuYXR0cigic3Ryb2tlIiwibm9uZSIpLmF0dHIoImZvbnQtc2l6ZSIsMTApLmF0dHIoImR5IiwiMWVtIiksbi5kYi50b3BBeGlzRW5hYmxlZCgpfHxpLnRvcEF4aXMpe2xldCBJPSRBKHkpLnRpY2tTaXplKC1SK0QraS5ncmlkTGluZVN0YXJ0UGFkZGluZykudGlja0Zvcm1hdChMZChuLmRiLmdldEF4aXNGb3JtYXQoKXx8aS5heGlzRm9ybWF0fHwiJVktJW0tJWQiKSk7aWYoQSE9PW51bGwpe2xldCBNPUFbMV0sUD1BWzJdLEI9bi5kYi5nZXRXZWVrZGF5KCl8fGkud2Vla2RheTtzd2l0Y2goUCl7Y2FzZSJtaWxsaXNlY29uZCI6SS50aWNrcyh1Yy5ldmVyeShNKSk7YnJlYWs7Y2FzZSJzZWNvbmQiOkkudGlja3MoZW8uZXZlcnkoTSkpO2JyZWFrO2Nhc2UibWludXRlIjpJLnRpY2tzKHd1LmV2ZXJ5KE0pKTticmVhaztjYXNlImhvdXIiOkkudGlja3Moa3UuZXZlcnkoTSkpO2JyZWFrO2Nhc2UiZGF5IjpJLnRpY2tzKFJvLmV2ZXJ5KE0pKTticmVhaztjYXNlIndlZWsiOkkudGlja3MoZWZlW0JdLmV2ZXJ5KE0pKTticmVhaztjYXNlIm1vbnRoIjpJLnRpY2tzKEV1LmV2ZXJ5KE0pKTticmVha319Zy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImdyaWQiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitDKyIsICIrRCsiKSIpLmNhbGwoSSkuc2VsZWN0QWxsKCJ0ZXh0Iikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiZmlsbCIsIiMwMDAiKS5hdHRyKCJzdHJva2UiLCJub25lIikuYXR0cigiZm9udC1zaXplIiwxMCl9fW8oUywibWFrZUdyaWQiKTtmdW5jdGlvbiB3KEMsRCl7bGV0IE89MCxSPU9iamVjdC5rZXlzKHApLm1hcChrPT5bayxwW2tdXSk7Zy5hcHBlbmQoImciKS5zZWxlY3RBbGwoInRleHQiKS5kYXRhKFIpLmVudGVyKCkuYXBwZW5kKGZ1bmN0aW9uKGspe2xldCBMPWtbMF0uc3BsaXQoWmUubGluZUJyZWFrUmVnZXgpLEE9LShMLmxlbmd0aC0xKS8yLEk9dS5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidGV4dCIpO0kuc2V0QXR0cmlidXRlKCJkeSIsQSsiZW0iKTtmb3IobGV0W00sUF1vZiBMLmVudHJpZXMoKSl7bGV0IEI9dS5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidHNwYW4iKTtCLnNldEF0dHJpYnV0ZSgiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLEIuc2V0QXR0cmlidXRlKCJ4IiwiMTAiKSxNPjAmJkIuc2V0QXR0cmlidXRlKCJkeSIsIjFlbSIpLEIudGV4dENvbnRlbnQ9UCxJLmFwcGVuZENoaWxkKEIpfXJldHVybiBJfSkuYXR0cigieCIsMTApLmF0dHIoInkiLGZ1bmN0aW9uKGssTCl7aWYoTD4wKWZvcihsZXQgQT0wO0E8TDtBKyspcmV0dXJuIE8rPVJbTC0xXVsxXSxrWzFdKkMvMitPKkMrRDtlbHNlIHJldHVybiBrWzFdKkMvMitEfSkuYXR0cigiZm9udC1zaXplIixpLnNlY3Rpb25Gb250U2l6ZSkuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKGspe2ZvcihsZXRbTCxBXW9mIGQuZW50cmllcygpKWlmKGtbMF09PT1BKXJldHVybiJzZWN0aW9uVGl0bGUgc2VjdGlvblRpdGxlIitMJWkubnVtYmVyU2VjdGlvblN0eWxlcztyZXR1cm4ic2VjdGlvblRpdGxlIn0pfW8odywidmVydExhYmVscyIpO2Z1bmN0aW9uIEUoQyxELE8sUil7bGV0IGs9bi5kYi5nZXRUb2RheU1hcmtlcigpO2lmKGs9PT0ib2ZmIilyZXR1cm47bGV0IEw9Zy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRvZGF5IiksQT1uZXcgRGF0ZSxJPUwuYXBwZW5kKCJsaW5lIik7SS5hdHRyKCJ4MSIseShBKStDKS5hdHRyKCJ4MiIseShBKStDKS5hdHRyKCJ5MSIsaS50aXRsZVRvcE1hcmdpbikuYXR0cigieTIiLFItaS50aXRsZVRvcE1hcmdpbikuYXR0cigiY2xhc3MiLCJ0b2RheSIpLGshPT0iIiYmSS5hdHRyKCJzdHlsZSIsay5yZXBsYWNlKC8sL2csIjsiKSl9byhFLCJkcmF3VG9kYXkiKTtmdW5jdGlvbiBfKEMpe2xldCBEPXt9LE89W107Zm9yKGxldCBSPTAsaz1DLmxlbmd0aDtSPGs7KytSKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChELENbUl0pfHwoRFtDW1JdXT0hMCxPLnB1c2goQ1tSXSkpO3JldHVybiBPfW8oXywiY2hlY2tVbmlxdWUiKX0sImRyYXciKSx0ZmU9e3NldENvbmY6dlZlLGRyYXc6YlZlfX0pO3ZhciBUVmUsbmZlLGlmZT1OKCgpPT57InVzZSBzdHJpY3QiO1RWZT1vKHQ9PmAKICAubWVybWFpZC1tYWluLWZvbnQgewogICAgICAgIGZvbnQtZmFtaWx5OiAke3QuZm9udEZhbWlseX07CiAgfQoKICAuZXhjbHVkZS1yYW5nZSB7CiAgICBmaWxsOiAke3QuZXhjbHVkZUJrZ0NvbG9yfTsKICB9CgogIC5zZWN0aW9uIHsKICAgIHN0cm9rZTogbm9uZTsKICAgIG9wYWNpdHk6IDAuMjsKICB9CgogIC5zZWN0aW9uMCB7CiAgICBmaWxsOiAke3Quc2VjdGlvbkJrZ0NvbG9yfTsKICB9CgogIC5zZWN0aW9uMiB7CiAgICBmaWxsOiAke3Quc2VjdGlvbkJrZ0NvbG9yMn07CiAgfQoKICAuc2VjdGlvbjEsCiAgLnNlY3Rpb24zIHsKICAgIGZpbGw6ICR7dC5hbHRTZWN0aW9uQmtnQ29sb3J9OwogICAgb3BhY2l0eTogMC4yOwogIH0KCiAgLnNlY3Rpb25UaXRsZTAgewogICAgZmlsbDogJHt0LnRpdGxlQ29sb3J9OwogIH0KCiAgLnNlY3Rpb25UaXRsZTEgewogICAgZmlsbDogJHt0LnRpdGxlQ29sb3J9OwogIH0KCiAgLnNlY3Rpb25UaXRsZTIgewogICAgZmlsbDogJHt0LnRpdGxlQ29sb3J9OwogIH0KCiAgLnNlY3Rpb25UaXRsZTMgewogICAgZmlsbDogJHt0LnRpdGxlQ29sb3J9OwogIH0KCiAgLnNlY3Rpb25UaXRsZSB7CiAgICB0ZXh0LWFuY2hvcjogc3RhcnQ7CiAgICBmb250LWZhbWlseTogJHt0LmZvbnRGYW1pbHl9OwogIH0KCgogIC8qIEdyaWQgYW5kIGF4aXMgKi8KCiAgLmdyaWQgLnRpY2sgewogICAgc3Ryb2tlOiAke3QuZ3JpZENvbG9yfTsKICAgIG9wYWNpdHk6IDAuODsKICAgIHNoYXBlLXJlbmRlcmluZzogY3Jpc3BFZGdlczsKICB9CgogIC5ncmlkIC50aWNrIHRleHQgewogICAgZm9udC1mYW1pbHk6ICR7dC5mb250RmFtaWx5fTsKICAgIGZpbGw6ICR7dC50ZXh0Q29sb3J9OwogIH0KCiAgLmdyaWQgcGF0aCB7CiAgICBzdHJva2Utd2lkdGg6IDA7CiAgfQoKCiAgLyogVG9kYXkgbGluZSAqLwoKICAudG9kYXkgewogICAgZmlsbDogbm9uZTsKICAgIHN0cm9rZTogJHt0LnRvZGF5TGluZUNvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogMnB4OwogIH0KCgogIC8qIFRhc2sgc3R5bGluZyAqLwoKICAvKiBEZWZhdWx0IHRhc2sgKi8KCiAgLnRhc2sgewogICAgc3Ryb2tlLXdpZHRoOiAyOwogIH0KCiAgLnRhc2tUZXh0IHsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICBmb250LWZhbWlseTogJHt0LmZvbnRGYW1pbHl9OwogIH0KCiAgLnRhc2tUZXh0T3V0c2lkZVJpZ2h0IHsKICAgIGZpbGw6ICR7dC50YXNrVGV4dERhcmtDb2xvcn07CiAgICB0ZXh0LWFuY2hvcjogc3RhcnQ7CiAgICBmb250LWZhbWlseTogJHt0LmZvbnRGYW1pbHl9OwogIH0KCiAgLnRhc2tUZXh0T3V0c2lkZUxlZnQgewogICAgZmlsbDogJHt0LnRhc2tUZXh0RGFya0NvbG9yfTsKICAgIHRleHQtYW5jaG9yOiBlbmQ7CiAgfQoKCiAgLyogU3BlY2lhbCBjYXNlIGNsaWNrYWJsZSAqLwoKICAudGFzay5jbGlja2FibGUgewogICAgY3Vyc29yOiBwb2ludGVyOwogIH0KCiAgLnRhc2tUZXh0LmNsaWNrYWJsZSB7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBmaWxsOiAke3QudGFza1RleHRDbGlja2FibGVDb2xvcn0gIWltcG9ydGFudDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogIH0KCiAgLnRhc2tUZXh0T3V0c2lkZUxlZnQuY2xpY2thYmxlIHsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGZpbGw6ICR7dC50YXNrVGV4dENsaWNrYWJsZUNvbG9yfSAhaW1wb3J0YW50OwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgfQoKICAudGFza1RleHRPdXRzaWRlUmlnaHQuY2xpY2thYmxlIHsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGZpbGw6ICR7dC50YXNrVGV4dENsaWNrYWJsZUNvbG9yfSAhaW1wb3J0YW50OwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgfQoKCiAgLyogU3BlY2lmaWMgdGFzayBzZXR0aW5ncyBmb3IgdGhlIHNlY3Rpb25zKi8KCiAgLnRhc2tUZXh0MCwKICAudGFza1RleHQxLAogIC50YXNrVGV4dDIsCiAgLnRhc2tUZXh0MyB7CiAgICBmaWxsOiAke3QudGFza1RleHRDb2xvcn07CiAgfQoKICAudGFzazAsCiAgLnRhc2sxLAogIC50YXNrMiwKICAudGFzazMgewogICAgZmlsbDogJHt0LnRhc2tCa2dDb2xvcn07CiAgICBzdHJva2U6ICR7dC50YXNrQm9yZGVyQ29sb3J9OwogIH0KCiAgLnRhc2tUZXh0T3V0c2lkZTAsCiAgLnRhc2tUZXh0T3V0c2lkZTIKICB7CiAgICBmaWxsOiAke3QudGFza1RleHRPdXRzaWRlQ29sb3J9OwogIH0KCiAgLnRhc2tUZXh0T3V0c2lkZTEsCiAgLnRhc2tUZXh0T3V0c2lkZTMgewogICAgZmlsbDogJHt0LnRhc2tUZXh0T3V0c2lkZUNvbG9yfTsKICB9CgoKICAvKiBBY3RpdmUgdGFzayAqLwoKICAuYWN0aXZlMCwKICAuYWN0aXZlMSwKICAuYWN0aXZlMiwKICAuYWN0aXZlMyB7CiAgICBmaWxsOiAke3QuYWN0aXZlVGFza0JrZ0NvbG9yfTsKICAgIHN0cm9rZTogJHt0LmFjdGl2ZVRhc2tCb3JkZXJDb2xvcn07CiAgfQoKICAuYWN0aXZlVGV4dDAsCiAgLmFjdGl2ZVRleHQxLAogIC5hY3RpdmVUZXh0MiwKICAuYWN0aXZlVGV4dDMgewogICAgZmlsbDogJHt0LnRhc2tUZXh0RGFya0NvbG9yfSAhaW1wb3J0YW50OwogIH0KCgogIC8qIENvbXBsZXRlZCB0YXNrICovCgogIC5kb25lMCwKICAuZG9uZTEsCiAgLmRvbmUyLAogIC5kb25lMyB7CiAgICBzdHJva2U6ICR7dC5kb25lVGFza0JvcmRlckNvbG9yfTsKICAgIGZpbGw6ICR7dC5kb25lVGFza0JrZ0NvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogMjsKICB9CgogIC5kb25lVGV4dDAsCiAgLmRvbmVUZXh0MSwKICAuZG9uZVRleHQyLAogIC5kb25lVGV4dDMgewogICAgZmlsbDogJHt0LnRhc2tUZXh0RGFya0NvbG9yfSAhaW1wb3J0YW50OwogIH0KCgogIC8qIFRhc2tzIG9uIHRoZSBjcml0aWNhbCBsaW5lICovCgogIC5jcml0MCwKICAuY3JpdDEsCiAgLmNyaXQyLAogIC5jcml0MyB7CiAgICBzdHJva2U6ICR7dC5jcml0Qm9yZGVyQ29sb3J9OwogICAgZmlsbDogJHt0LmNyaXRCa2dDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6IDI7CiAgfQoKICAuYWN0aXZlQ3JpdDAsCiAgLmFjdGl2ZUNyaXQxLAogIC5hY3RpdmVDcml0MiwKICAuYWN0aXZlQ3JpdDMgewogICAgc3Ryb2tlOiAke3QuY3JpdEJvcmRlckNvbG9yfTsKICAgIGZpbGw6ICR7dC5hY3RpdmVUYXNrQmtnQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAyOwogIH0KCiAgLmRvbmVDcml0MCwKICAuZG9uZUNyaXQxLAogIC5kb25lQ3JpdDIsCiAgLmRvbmVDcml0MyB7CiAgICBzdHJva2U6ICR7dC5jcml0Qm9yZGVyQ29sb3J9OwogICAgZmlsbDogJHt0LmRvbmVUYXNrQmtnQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAyOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgc2hhcGUtcmVuZGVyaW5nOiBjcmlzcEVkZ2VzOwogIH0KCiAgLm1pbGVzdG9uZSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZykgc2NhbGUoMC44LDAuOCk7CiAgfQoKICAubWlsZXN0b25lVGV4dCB7CiAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgfQogIC5kb25lQ3JpdFRleHQwLAogIC5kb25lQ3JpdFRleHQxLAogIC5kb25lQ3JpdFRleHQyLAogIC5kb25lQ3JpdFRleHQzIHsKICAgIGZpbGw6ICR7dC50YXNrVGV4dERhcmtDb2xvcn0gIWltcG9ydGFudDsKICB9CgogIC52ZXJ0IHsKICAgIHN0cm9rZTogJHt0LnZlcnRMaW5lQ29sb3J9OwogIH0KCiAgLnZlcnRUZXh0IHsKICAgIGZvbnQtc2l6ZTogMTVweDsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICBmaWxsOiAke3QudmVydExpbmVDb2xvcn0gIWltcG9ydGFudDsKICB9CgogIC5hY3RpdmVDcml0VGV4dDAsCiAgLmFjdGl2ZUNyaXRUZXh0MSwKICAuYWN0aXZlQ3JpdFRleHQyLAogIC5hY3RpdmVDcml0VGV4dDMgewogICAgZmlsbDogJHt0LnRhc2tUZXh0RGFya0NvbG9yfSAhaW1wb3J0YW50OwogIH0KCiAgLnRpdGxlVGV4dCB7CiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogICAgZm9udC1zaXplOiAxOHB4OwogICAgZmlsbDogJHt0LnRpdGxlQ29sb3J8fHQudGV4dENvbG9yfTsKICAgIGZvbnQtZmFtaWx5OiAke3QuZm9udEZhbWlseX07CiAgfQpgLCJnZXRTdHlsZXMiKSxuZmU9VFZlfSk7dmFyIGFmZT17fTt1cihhZmUse2RpYWdyYW06KCk9PndWZX0pO3ZhciB3VmUsc2ZlPU4oKCk9PnsidXNlIHN0cmljdCI7TWhlKCk7SmhlKCk7cmZlKCk7aWZlKCk7d1ZlPXtwYXJzZXI6TmhlLGRiOlFoZSxyZW5kZXJlcjp0ZmUsc3R5bGVzOm5mZX19KTt2YXIgY2ZlLHVmZT1OKCgpPT57InVzZSBzdHJpY3QiO2JmKCk7eXQoKTtjZmU9e3BhcnNlOm8oYXN5bmMgdD0+e2xldCBlPWF3YWl0IHZzKCJpbmZvIix0KTtYLmRlYnVnKGUpfSwicGFyc2UiKX19KTt2YXIgRGIsWE89TigoKT0+e0RiPXtuYW1lOiJtZXJtYWlkIix2ZXJzaW9uOiIxMS45LjAiLGRlc2NyaXB0aW9uOiJNYXJrZG93bi1pc2ggc3ludGF4IGZvciBnZW5lcmF0aW5nIGZsb3djaGFydHMsIG1pbmRtYXBzLCBzZXF1ZW5jZSBkaWFncmFtcywgY2xhc3MgZGlhZ3JhbXMsIGdhbnR0IGNoYXJ0cywgZ2l0IGdyYXBocyBhbmQgbW9yZS4iLHR5cGU6Im1vZHVsZSIsbW9kdWxlOiIuL2Rpc3QvbWVybWFpZC5jb3JlLm1qcyIsdHlwZXM6Ii4vZGlzdC9tZXJtYWlkLmQudHMiLGV4cG9ydHM6eyIuIjp7dHlwZXM6Ii4vZGlzdC9tZXJtYWlkLmQudHMiLGltcG9ydDoiLi9kaXN0L21lcm1haWQuY29yZS5tanMiLGRlZmF1bHQ6Ii4vZGlzdC9tZXJtYWlkLmNvcmUubWpzIn0sIi4vKiI6Ii4vKiJ9LGtleXdvcmRzOlsiZGlhZ3JhbSIsIm1hcmtkb3duIiwiZmxvd2NoYXJ0Iiwic2VxdWVuY2UgZGlhZ3JhbSIsImdhbnR0IiwiY2xhc3MgZGlhZ3JhbSIsImdpdCBncmFwaCIsIm1pbmRtYXAiLCJwYWNrZXQgZGlhZ3JhbSIsImM0IGRpYWdyYW0iLCJlciBkaWFncmFtIiwicGllIGNoYXJ0IiwicGllIGRpYWdyYW0iLCJxdWFkcmFudCBjaGFydCIsInJlcXVpcmVtZW50IGRpYWdyYW0iLCJncmFwaCJdLHNjcmlwdHM6e2NsZWFuOiJyaW1yYWYgZGlzdCIsZGV2OiJwbnBtIC13IGRldiIsImRvY3M6Y29kZSI6InR5cGVkb2Mgc3JjL2RlZmF1bHRDb25maWcudHMgc3JjL2NvbmZpZy50cyBzcmMvbWVybWFpZC50cyAmJiBwcmV0dGllciAtLXdyaXRlIC4vc3JjL2RvY3MvY29uZmlnL3NldHVwIiwiZG9jczpidWlsZCI6InJpbXJhZiAuLi8uLi9kb2NzICYmIHBucG0gZG9jczpjb2RlICYmIHBucG0gZG9jczpzcGVsbGNoZWNrICYmIHRzeCBzY3JpcHRzL2RvY3MuY2xpLm10cyIsImRvY3M6dmVyaWZ5IjoicG5wbSBkb2NzOmNvZGUgJiYgcG5wbSBkb2NzOnNwZWxsY2hlY2sgJiYgdHN4IHNjcmlwdHMvZG9jcy5jbGkubXRzIC0tdmVyaWZ5IiwiZG9jczpwcmU6dml0ZXByZXNzIjoicG5wbSAtLWZpbHRlciAuL3NyYy9kb2NzIHByZWZldGNoICYmIHJpbXJhZiBzcmMvdml0ZXByZXNzICYmIHBucG0gZG9jczpjb2RlICYmIHRzeCBzY3JpcHRzL2RvY3MuY2xpLm10cyAtLXZpdGVwcmVzcyAmJiBwbnBtIC0tZmlsdGVyIC4vc3JjL3ZpdGVwcmVzcyBpbnN0YWxsIC0tbm8tZnJvemVuLWxvY2tmaWxlIC0taWdub3JlLXNjcmlwdHMiLCJkb2NzOmJ1aWxkOnZpdGVwcmVzcyI6InBucG0gZG9jczpwcmU6dml0ZXByZXNzICYmIChjZCBzcmMvdml0ZXByZXNzICYmIHBucG0gcnVuIGJ1aWxkKSAmJiBjcHkgLS1mbGF0IHNyYy9kb2NzL2xhbmRpbmcvIC4vc3JjL3ZpdGVwcmVzcy8udml0ZXByZXNzL2Rpc3QvbGFuZGluZyIsImRvY3M6ZGV2IjoncG5wbSBkb2NzOnByZTp2aXRlcHJlc3MgJiYgY29uY3VycmVudGx5ICJwbnBtIC0tZmlsdGVyIC4vc3JjL3ZpdGVwcmVzcyBkZXYiICJ0c3ggc2NyaXB0cy9kb2NzLmNsaS5tdHMgLS13YXRjaCAtLXZpdGVwcmVzcyInLCJkb2NzOmRldjpkb2NrZXIiOidwbnBtIGRvY3M6cHJlOnZpdGVwcmVzcyAmJiBjb25jdXJyZW50bHkgInBucG0gLS1maWx0ZXIgLi9zcmMvdml0ZXByZXNzIGRldjpkb2NrZXIiICJ0c3ggc2NyaXB0cy9kb2NzLmNsaS5tdHMgLS13YXRjaCAtLXZpdGVwcmVzcyInLCJkb2NzOnNlcnZlIjoicG5wbSBkb2NzOmJ1aWxkOnZpdGVwcmVzcyAmJiB2aXRlcHJlc3Mgc2VydmUgc3JjL3ZpdGVwcmVzcyIsImRvY3M6c3BlbGxjaGVjayI6J2NzcGVsbCAic3JjL2RvY3MvKiovKi5tZCInLCJkb2NzOnJlbGVhc2UtdmVyc2lvbiI6InRzeCBzY3JpcHRzL3VwZGF0ZS1yZWxlYXNlLXZlcnNpb24ubXRzIiwiZG9jczp2ZXJpZnktdmVyc2lvbiI6InRzeCBzY3JpcHRzL3VwZGF0ZS1yZWxlYXNlLXZlcnNpb24ubXRzIC0tdmVyaWZ5IiwidHlwZXM6YnVpbGQtY29uZmlnIjoidHN4IHNjcmlwdHMvY3JlYXRlLXR5cGVzLWZyb20tanNvbi1zY2hlbWEubXRzIiwidHlwZXM6dmVyaWZ5LWNvbmZpZyI6InRzeCBzY3JpcHRzL2NyZWF0ZS10eXBlcy1mcm9tLWpzb24tc2NoZW1hLm10cyAtLXZlcmlmeSIsY2hlY2tDaXJjbGU6Im5weCBtYWRnZSAtLWNpcmN1bGFyIC4vc3JjIixwcmVwdWJsaXNoT25seToicG5wbSBkb2NzOnZlcmlmeS12ZXJzaW9uIn0scmVwb3NpdG9yeTp7dHlwZToiZ2l0Iix1cmw6Imh0dHBzOi8vZ2l0aHViLmNvbS9tZXJtYWlkLWpzL21lcm1haWQifSxhdXRob3I6IktudXQgU3ZlaWRxdmlzdCIsbGljZW5zZToiTUlUIixzdGFuZGFyZDp7aWdub3JlOlsiKiovcGFyc2VyLyouanMiLCJkaXN0LyoqLyouanMiLCJjeXByZXNzLyoqLyouanMiXSxnbG9iYWxzOlsicGFnZSJdfSxkZXBlbmRlbmNpZXM6eyJAYnJhaW50cmVlL3Nhbml0aXplLXVybCI6Il43LjAuNCIsIkBpY29uaWZ5L3V0aWxzIjoiXjIuMS4zMyIsIkBtZXJtYWlkLWpzL3BhcnNlciI6IndvcmtzcGFjZTpeIiwiQHR5cGVzL2QzIjoiXjcuNC4zIixjeXRvc2NhcGU6Il4zLjI5LjMiLCJjeXRvc2NhcGUtY29zZS1iaWxrZW50IjoiXjQuMS4wIiwiY3l0b3NjYXBlLWZjb3NlIjoiXjIuMi4wIixkMzoiXjcuOS4wIiwiZDMtc2Fua2V5IjoiXjAuMTIuMyIsImRhZ3JlLWQzLWVzIjoiNy4wLjExIixkYXlqczoiXjEuMTEuMTMiLGRvbXB1cmlmeToiXjMuMi41IixrYXRleDoiXjAuMTYuMjIiLGtocm9tYToiXjIuMS4wIiwibG9kYXNoLWVzIjoiXjQuMTcuMjEiLG1hcmtlZDoiXjE2LjAuMCIscm91Z2hqczoiXjQuNi42IixzdHlsaXM6Il40LjMuNiIsInRzLWRlZGVudCI6Il4yLjIuMCIsdXVpZDoiXjExLjEuMCJ9LGRldkRlcGVuZGVuY2llczp7IkBhZG9iZS9qc29uc2NoZW1hMm1kIjoiXjguMC4yIiwiQGljb25pZnkvdHlwZXMiOiJeMi4wLjAiLCJAdHlwZXMvY3l0b3NjYXBlIjoiXjMuMjEuOSIsIkB0eXBlcy9jeXRvc2NhcGUtZmNvc2UiOiJeMi4yLjQiLCJAdHlwZXMvZDMtc2Fua2V5IjoiXjAuMTIuNCIsIkB0eXBlcy9kMy1zY2FsZSI6Il40LjAuOSIsIkB0eXBlcy9kMy1zY2FsZS1jaHJvbWF0aWMiOiJeMy4xLjAiLCJAdHlwZXMvZDMtc2VsZWN0aW9uIjoiXjMuMC4xMSIsIkB0eXBlcy9kMy1zaGFwZSI6Il4zLjEuNyIsIkB0eXBlcy9qc2RvbSI6Il4yMS4xLjciLCJAdHlwZXMva2F0ZXgiOiJeMC4xNi43IiwiQHR5cGVzL2xvZGFzaC1lcyI6Il40LjE3LjEyIiwiQHR5cGVzL21pY3JvbWF0Y2giOiJeNC4wLjkiLCJAdHlwZXMvc3R5bGlzIjoiXjQuMi43IiwiQHR5cGVzL3V1aWQiOiJeMTAuMC4wIixhanY6Il44LjE3LjEiLGNhbnZhczoiXjMuMS4wIixjaG9raWRhcjoiMy42LjAiLGNvbmN1cnJlbnRseToiXjkuMS4yIiwiY3NzdHJlZS12YWxpZGF0b3IiOiJeNC4wLjEiLGdsb2JieToiXjE0LjAuMiIsamlzb246Il4wLjQuMTgiLCJqcy1iYXNlNjQiOiJeMy43LjciLGpzZG9tOiJeMjYuMS4wIiwianNvbi1zY2hlbWEtdG8tdHlwZXNjcmlwdCI6Il4xNS4wLjQiLG1pY3JvbWF0Y2g6Il40LjAuOCIsInBhdGgtYnJvd3NlcmlmeSI6Il4xLjAuMSIscHJldHRpZXI6Il4zLjUuMiIscmVtYXJrOiJeMTUuMC4xIiwicmVtYXJrLWZyb250bWF0dGVyIjoiXjUuMC4wIiwicmVtYXJrLWdmbSI6Il40LjAuMSIscmltcmFmOiJeNi4wLjEiLCJzdGFydC1zZXJ2ZXItYW5kLXRlc3QiOiJeMi4wLjEwIiwidHlwZS1mZXN0IjoiXjQuMzUuMCIsdHlwZWRvYzoiXjAuMjcuOCIsInR5cGVkb2MtcGx1Z2luLW1hcmtkb3duIjoiXjQuNC4yIix0eXBlc2NyaXB0OiJ+NS43LjMiLCJ1bmlzdC11dGlsLWZsYXRtYXAiOiJeMS4wLjAiLCJ1bmlzdC11dGlsLXZpc2l0IjoiXjUuMC4wIix2aXRlcHJlc3M6Il4xLjAuMiIsInZpdGVwcmVzcy1wbHVnaW4tc2VhcmNoIjoiMS4wLjQtYWxwaGEuMjIifSxmaWxlczpbImRpc3QvIiwiUkVBRE1FLm1kIl0scHVibGlzaENvbmZpZzp7YWNjZXNzOiJwdWJsaWMifX19KTt2YXIgQVZlLF9WZSxoZmUsZmZlPU4oKCk9PnsidXNlIHN0cmljdCI7WE8oKTtBVmU9e3ZlcnNpb246RGIudmVyc2lvbisiIn0sX1ZlPW8oKCk9PkFWZS52ZXJzaW9uLCJnZXRWZXJzaW9uIiksaGZlPXtnZXRWZXJzaW9uOl9WZX19KTt2YXIgTGksVmw9TigoKT0+eyJ1c2Ugc3RyaWN0IjtmcigpO0d0KCk7TGk9byh0PT57bGV0e3NlY3VyaXR5TGV2ZWw6ZX09bWUoKSxyPUdlKCJib2R5Iik7aWYoZT09PSJzYW5kYm94Iil7bGV0IGE9R2UoYCNpJHt0fWApLm5vZGUoKT8uY29udGVudERvY3VtZW50Pz9kb2N1bWVudDtyPUdlKGEuYm9keSl9cmV0dXJuIHIuc2VsZWN0KGAjJHt0fWApfSwic2VsZWN0U3ZnRWxlbWVudCIpfSk7dmFyIERWZSxkZmUscGZlPU4oKCk9PnsidXNlIHN0cmljdCI7eXQoKTtWbCgpO3hpKCk7RFZlPW8oKHQsZSxyKT0+e1guZGVidWcoYHJlbmRlcmluZyBpbmZvIGRpYWdyYW0KYCt0KTtsZXQgbj1MaShlKTtmbihuLDEwMCw0MDAsITApLG4uYXBwZW5kKCJnIikuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMTAwKS5hdHRyKCJ5Iiw0MCkuYXR0cigiY2xhc3MiLCJ2ZXJzaW9uIikuYXR0cigiZm9udC1zaXplIiwzMikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dChgdiR7cn1gKX0sImRyYXciKSxkZmU9e2RyYXc6RFZlfX0pO3ZhciBtZmU9e307dXIobWZlLHtkaWFncmFtOigpPT5MVmV9KTt2YXIgTFZlLGdmZT1OKCgpPT57InVzZSBzdHJpY3QiO3VmZSgpO2ZmZSgpO3BmZSgpO0xWZT17cGFyc2VyOmNmZSxkYjpoZmUscmVuZGVyZXI6ZGZlfX0pO3ZhciB4ZmUsak8sSVMsS08sTVZlLElWZSxPVmUsUFZlLEJWZSxGVmUsJFZlLE9TLFFPPU4oKCk9PnsidXNlIHN0cmljdCI7eXQoKTtjaSgpO19hKCk7eGZlPW9yLnBpZSxqTz17c2VjdGlvbnM6bmV3IE1hcCxzaG93RGF0YTohMSxjb25maWc6eGZlfSxJUz1qTy5zZWN0aW9ucyxLTz1qTy5zaG93RGF0YSxNVmU9c3RydWN0dXJlZENsb25lKHhmZSksSVZlPW8oKCk9PnN0cnVjdHVyZWRDbG9uZShNVmUpLCJnZXRDb25maWciKSxPVmU9bygoKT0+e0lTPW5ldyBNYXAsS089ak8uc2hvd0RhdGEsa3IoKX0sImNsZWFyIiksUFZlPW8oKHtsYWJlbDp0LHZhbHVlOmV9KT0+e0lTLmhhcyh0KXx8KElTLnNldCh0LGUpLFguZGVidWcoYGFkZGVkIG5ldyBzZWN0aW9uOiAke3R9LCB3aXRoIHZhbHVlOiAke2V9YCkpfSwiYWRkU2VjdGlvbiIpLEJWZT1vKCgpPT5JUywiZ2V0U2VjdGlvbnMiKSxGVmU9byh0PT57S089dH0sInNldFNob3dEYXRhIiksJFZlPW8oKCk9PktPLCJnZXRTaG93RGF0YSIpLE9TPXtnZXRDb25maWc6SVZlLGNsZWFyOk9WZSxzZXREaWFncmFtVGl0bGU6T3IsZ2V0RGlhZ3JhbVRpdGxlOk5yLHNldEFjY1RpdGxlOkFyLGdldEFjY1RpdGxlOkRyLHNldEFjY0Rlc2NyaXB0aW9uOkxyLGdldEFjY0Rlc2NyaXB0aW9uOlJyLGFkZFNlY3Rpb246UFZlLGdldFNlY3Rpb25zOkJWZSxzZXRTaG93RGF0YTpGVmUsZ2V0U2hvd0RhdGE6JFZlfX0pO3ZhciB6VmUsYmZlLFRmZT1OKCgpPT57InVzZSBzdHJpY3QiO2JmKCk7eXQoKTtNcCgpO1FPKCk7elZlPW8oKHQsZSk9PntKbyh0LGUpLGUuc2V0U2hvd0RhdGEodC5zaG93RGF0YSksdC5zZWN0aW9ucy5tYXAoZS5hZGRTZWN0aW9uKX0sInBvcHVsYXRlRGIiKSxiZmU9e3BhcnNlOm8oYXN5bmMgdD0+e2xldCBlPWF3YWl0IHZzKCJwaWUiLHQpO1guZGVidWcoZSkselZlKGUsT1MpfSwicGFyc2UiKX19KTt2YXIgR1ZlLHdmZSxrZmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtHVmU9byh0PT5gCiAgLnBpZUNpcmNsZXsKICAgIHN0cm9rZTogJHt0LnBpZVN0cm9rZUNvbG9yfTsKICAgIHN0cm9rZS13aWR0aCA6ICR7dC5waWVTdHJva2VXaWR0aH07CiAgICBvcGFjaXR5IDogJHt0LnBpZU9wYWNpdHl9OwogIH0KICAucGllT3V0ZXJDaXJjbGV7CiAgICBzdHJva2U6ICR7dC5waWVPdXRlclN0cm9rZUNvbG9yfTsKICAgIHN0cm9rZS13aWR0aDogJHt0LnBpZU91dGVyU3Ryb2tlV2lkdGh9OwogICAgZmlsbDogbm9uZTsKICB9CiAgLnBpZVRpdGxlVGV4dCB7CiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogICAgZm9udC1zaXplOiAke3QucGllVGl0bGVUZXh0U2l6ZX07CiAgICBmaWxsOiAke3QucGllVGl0bGVUZXh0Q29sb3J9OwogICAgZm9udC1mYW1pbHk6ICR7dC5mb250RmFtaWx5fTsKICB9CiAgLnNsaWNlIHsKICAgIGZvbnQtZmFtaWx5OiAke3QuZm9udEZhbWlseX07CiAgICBmaWxsOiAke3QucGllU2VjdGlvblRleHRDb2xvcn07CiAgICBmb250LXNpemU6JHt0LnBpZVNlY3Rpb25UZXh0U2l6ZX07CiAgICAvLyBmaWxsOiB3aGl0ZTsKICB9CiAgLmxlZ2VuZCB0ZXh0IHsKICAgIGZpbGw6ICR7dC5waWVMZWdlbmRUZXh0Q29sb3J9OwogICAgZm9udC1mYW1pbHk6ICR7dC5mb250RmFtaWx5fTsKICAgIGZvbnQtc2l6ZTogJHt0LnBpZUxlZ2VuZFRleHRTaXplfTsKICB9CmAsImdldFN0eWxlcyIpLHdmZT1HVmV9KTt2YXIgVlZlLFVWZSxFZmUsU2ZlPU4oKCk9PnsidXNlIHN0cmljdCI7ZnIoKTtHdCgpO3l0KCk7VmwoKTt4aSgpO2VyKCk7VlZlPW8odD0+e2xldCBlPVsuLi50LmVudHJpZXMoKV0ubWFwKG49Pih7bGFiZWw6blswXSx2YWx1ZTpuWzFdfSkpLnNvcnQoKG4saSk9PmkudmFsdWUtbi52YWx1ZSk7cmV0dXJuIHE1KCkudmFsdWUobj0+bi52YWx1ZSkoZSl9LCJjcmVhdGVQaWVBcmNzIiksVVZlPW8oKHQsZSxyLG4pPT57WC5kZWJ1ZyhgcmVuZGVyaW5nIHBpZSBjaGFydApgK3QpO2xldCBpPW4uZGIsYT1tZSgpLHM9JG4oaS5nZXRDb25maWcoKSxhLnBpZSksbD00MCx1PTE4LGg9NCxmPTQ1MCxkPWYscD1MaShlKSxtPXAuYXBwZW5kKCJnIik7bS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitkLzIrIiwiK2YvMisiKSIpO2xldHt0aGVtZVZhcmlhYmxlczpnfT1hLFt5XT16byhnLnBpZU91dGVyU3Ryb2tlV2lkdGgpO3k/Pz0yO2xldCB2PXMudGV4dFBvc2l0aW9uLHg9TWF0aC5taW4oZCxmKS8yLWwsYj1TbCgpLmlubmVyUmFkaXVzKDApLm91dGVyUmFkaXVzKHgpLFQ9U2woKS5pbm5lclJhZGl1cyh4KnYpLm91dGVyUmFkaXVzKHgqdik7bS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IiwwKS5hdHRyKCJjeSIsMCkuYXR0cigiciIseCt5LzIpLmF0dHIoImNsYXNzIiwicGllT3V0ZXJDaXJjbGUiKTtsZXQgUz1pLmdldFNlY3Rpb25zKCksdz1WVmUoUyksRT1bZy5waWUxLGcucGllMixnLnBpZTMsZy5waWU0LGcucGllNSxnLnBpZTYsZy5waWU3LGcucGllOCxnLnBpZTksZy5waWUxMCxnLnBpZTExLGcucGllMTJdLF89SnMoRSk7bS5zZWxlY3RBbGwoIm15U2xpY2VzIikuZGF0YSh3KS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLGIpLmF0dHIoImZpbGwiLGs9Pl8oay5kYXRhLmxhYmVsKSkuYXR0cigiY2xhc3MiLCJwaWVDaXJjbGUiKTtsZXQgQz0wO1MuZm9yRWFjaChrPT57Qys9a30pLG0uc2VsZWN0QWxsKCJteVNsaWNlcyIpLmRhdGEodykuZW50ZXIoKS5hcHBlbmQoInRleHQiKS50ZXh0KGs9PihrLmRhdGEudmFsdWUvQyoxMDApLnRvRml4ZWQoMCkrIiUiKS5hdHRyKCJ0cmFuc2Zvcm0iLGs9PiJ0cmFuc2xhdGUoIitULmNlbnRyb2lkKGspKyIpIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiY2xhc3MiLCJzbGljZSIpLG0uYXBwZW5kKCJ0ZXh0IikudGV4dChpLmdldERpYWdyYW1UaXRsZSgpKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwtKGYtNTApLzIpLmF0dHIoImNsYXNzIiwicGllVGl0bGVUZXh0Iik7bGV0IEQ9bS5zZWxlY3RBbGwoIi5sZWdlbmQiKS5kYXRhKF8uZG9tYWluKCkpLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsZWdlbmQiKS5hdHRyKCJ0cmFuc2Zvcm0iLChrLEwpPT57bGV0IEE9dStoLEk9QSpfLmRvbWFpbigpLmxlbmd0aC8yLE09MTIqdSxQPUwqQS1JO3JldHVybiJ0cmFuc2xhdGUoIitNKyIsIitQKyIpIn0pO0QuYXBwZW5kKCJyZWN0IikuYXR0cigid2lkdGgiLHUpLmF0dHIoImhlaWdodCIsdSkuc3R5bGUoImZpbGwiLF8pLnN0eWxlKCJzdHJva2UiLF8pLEQuZGF0YSh3KS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4Iix1K2gpLmF0dHIoInkiLHUtaCkudGV4dChrPT57bGV0e2xhYmVsOkwsdmFsdWU6QX09ay5kYXRhO3JldHVybiBpLmdldFNob3dEYXRhKCk/YCR7TH0gWyR7QX1dYDpMfSk7bGV0IE89TWF0aC5tYXgoLi4uRC5zZWxlY3RBbGwoInRleHQiKS5ub2RlcygpLm1hcChrPT5rPy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aD8/MCkpLFI9ZCtsK3UraCtPO3AuYXR0cigidmlld0JveCIsYDAgMCAke1J9ICR7Zn1gKSxmbihwLGYsUixzLnVzZU1heFdpZHRoKX0sImRyYXciKSxFZmU9e2RyYXc6VVZlfX0pO3ZhciBDZmU9e307dXIoQ2ZlLHtkaWFncmFtOigpPT5IVmV9KTt2YXIgSFZlLEFmZT1OKCgpPT57InVzZSBzdHJpY3QiO1RmZSgpO1FPKCk7a2ZlKCk7U2ZlKCk7SFZlPXtwYXJzZXI6YmZlLGRiOk9TLHJlbmRlcmVyOkVmZSxzdHlsZXM6d2ZlfX0pO3ZhciBaTyxMZmUsUmZlPU4oKCk9PnsidXNlIHN0cmljdCI7Wk89ZnVuY3Rpb24oKXt2YXIgdD1vKGZ1bmN0aW9uKFRlLFcscGUsdmUpe2ZvcihwZT1wZXx8e30sdmU9VGUubGVuZ3RoO3ZlLS07cGVbVGVbdmVdXT1XKTtyZXR1cm4gcGV9LCJvIiksZT1bMSwzXSxyPVsxLDRdLG49WzEsNV0saT1bMSw2XSxhPVsxLDddLHM9WzEsNCw1LDEwLDEyLDEzLDE0LDE4LDI1LDM1LDM3LDM5LDQxLDQyLDQ4LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDYwLDYxLDYzLDY0LDY1LDY2LDY3XSxsPVsxLDQsNSwxMCwxMiwxMywxNCwxOCwyNSwyOCwzNSwzNywzOSw0MSw0Miw0OCw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw2MCw2MSw2Myw2NCw2NSw2Niw2N10sdT1bNTUsNTYsNTddLGg9WzIsMzZdLGY9WzEsMzddLGQ9WzEsMzZdLHA9WzEsMzhdLG09WzEsMzVdLGc9WzEsNDNdLHk9WzEsNDFdLHY9WzEsMTRdLHg9WzEsMjNdLGI9WzEsMThdLFQ9WzEsMTldLFM9WzEsMjBdLHc9WzEsMjFdLEU9WzEsMjJdLF89WzEsMjRdLEM9WzEsMjVdLEQ9WzEsMjZdLE89WzEsMjddLFI9WzEsMjhdLGs9WzEsMjldLEw9WzEsMzJdLEE9WzEsMzNdLEk9WzEsMzRdLE09WzEsMzldLFA9WzEsNDBdLEI9WzEsNDJdLEY9WzEsNDRdLHo9WzEsNjJdLCQ9WzEsNjFdLFU9WzQsNSw4LDEwLDEyLDEzLDE0LDE4LDQ0LDQ3LDQ5LDU1LDU2LDU3LDYzLDY0LDY1LDY2LDY3XSxLPVsxLDY1XSxlZT1bMSw2Nl0sWT1bMSw2N10sY2U9WzEsNjhdLFo9WzEsNjldLHVlPVsxLDcwXSxRPVsxLDcxXSxqPVsxLDcyXSxuZT1bMSw3M10sdGU9WzEsNzRdLGhlPVsxLDc1XSxsZT1bMSw3Nl0sSj1bNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMThdLFNlPVsxLDkwXSxzZT1bMSw5MV0sYWU9WzEsOTJdLE9lPVsxLDk5XSx5ZT1bMSw5M10sQmU9WzEsOTZdLEhlPVsxLDk0XSx6ZT1bMSw5NV0sTGU9WzEsOTddLEllPVsxLDk4XSx4ZT1bMSwxMDJdLHE9WzEwLDU1LDU2LDU3XSxkZT1bNCw1LDYsOCwxMCwxMSwxMywxNywxOCwxOSwyMCw1NSw1Niw1N10saWU9e3RyYWNlOm8oZnVuY3Rpb24oKXt9LCJ0cmFjZSIpLHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLGlkU3RyaW5nVG9rZW46MyxBTFBIQTo0LE5VTTo1LE5PREVfU1RSSU5HOjYsRE9XTjo3LE1JTlVTOjgsREVGQVVMVDo5LENPTU1BOjEwLENPTE9OOjExLEFNUDoxMixCUktUOjEzLE1VTFQ6MTQsVU5JQ09ERV9URVhUOjE1LHN0eWxlQ29tcG9uZW50OjE2LFVOSVQ6MTcsU1BBQ0U6MTgsU1RZTEU6MTksUENUOjIwLGlkU3RyaW5nOjIxLHN0eWxlOjIyLHN0eWxlc09wdDoyMyxjbGFzc0RlZlN0YXRlbWVudDoyNCxDTEFTU0RFRjoyNSxzdGFydDoyNixlb2w6MjcsUVVBRFJBTlQ6MjgsZG9jdW1lbnQ6MjksbGluZTozMCxzdGF0ZW1lbnQ6MzEsYXhpc0RldGFpbHM6MzIscXVhZHJhbnREZXRhaWxzOjMzLHBvaW50czozNCx0aXRsZTozNSx0aXRsZV92YWx1ZTozNixhY2NfdGl0bGU6MzcsYWNjX3RpdGxlX3ZhbHVlOjM4LGFjY19kZXNjcjozOSxhY2NfZGVzY3JfdmFsdWU6NDAsYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZTo0MSxzZWN0aW9uOjQyLHRleHQ6NDMscG9pbnRfc3RhcnQ6NDQscG9pbnRfeDo0NSxwb2ludF95OjQ2LGNsYXNzX25hbWU6NDcsIlgtQVhJUyI6NDgsIkFYSVMtVEVYVC1ERUxJTUlURVIiOjQ5LCJZLUFYSVMiOjUwLFFVQURSQU5UXzE6NTEsUVVBRFJBTlRfMjo1MixRVUFEUkFOVF8zOjUzLFFVQURSQU5UXzQ6NTQsTkVXTElORTo1NSxTRU1JOjU2LEVPRjo1NyxhbHBoYU51bVRva2VuOjU4LHRleHROb1RhZ3NUb2tlbjo1OSxTVFI6NjAsTURfU1RSOjYxLGFscGhhTnVtOjYyLFBVTkNUVUFUSU9OOjYzLFBMVVM6NjQsRVFVQUxTOjY1LERPVDo2NixVTkRFUlNDT1JFOjY3LCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw0OiJBTFBIQSIsNToiTlVNIiw2OiJOT0RFX1NUUklORyIsNzoiRE9XTiIsODoiTUlOVVMiLDk6IkRFRkFVTFQiLDEwOiJDT01NQSIsMTE6IkNPTE9OIiwxMjoiQU1QIiwxMzoiQlJLVCIsMTQ6Ik1VTFQiLDE1OiJVTklDT0RFX1RFWFQiLDE3OiJVTklUIiwxODoiU1BBQ0UiLDE5OiJTVFlMRSIsMjA6IlBDVCIsMjU6IkNMQVNTREVGIiwyODoiUVVBRFJBTlQiLDM1OiJ0aXRsZSIsMzY6InRpdGxlX3ZhbHVlIiwzNzoiYWNjX3RpdGxlIiwzODoiYWNjX3RpdGxlX3ZhbHVlIiwzOToiYWNjX2Rlc2NyIiw0MDoiYWNjX2Rlc2NyX3ZhbHVlIiw0MToiYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSIsNDI6InNlY3Rpb24iLDQ0OiJwb2ludF9zdGFydCIsNDU6InBvaW50X3giLDQ2OiJwb2ludF95Iiw0NzoiY2xhc3NfbmFtZSIsNDg6IlgtQVhJUyIsNDk6IkFYSVMtVEVYVC1ERUxJTUlURVIiLDUwOiJZLUFYSVMiLDUxOiJRVUFEUkFOVF8xIiw1MjoiUVVBRFJBTlRfMiIsNTM6IlFVQURSQU5UXzMiLDU0OiJRVUFEUkFOVF80Iiw1NToiTkVXTElORSIsNTY6IlNFTUkiLDU3OiJFT0YiLDYwOiJTVFIiLDYxOiJNRF9TVFIiLDYzOiJQVU5DVFVBVElPTiIsNjQ6IlBMVVMiLDY1OiJFUVVBTFMiLDY2OiJET1QiLDY3OiJVTkRFUlNDT1JFIn0scHJvZHVjdGlvbnNfOlswLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFsxNiwxXSxbMTYsMV0sWzE2LDFdLFsxNiwxXSxbMTYsMV0sWzE2LDFdLFsxNiwxXSxbMTYsMV0sWzE2LDFdLFsxNiwxXSxbMjEsMV0sWzIxLDJdLFsyMiwxXSxbMjIsMl0sWzIzLDFdLFsyMywzXSxbMjQsNV0sWzI2LDJdLFsyNiwyXSxbMjYsMl0sWzI5LDBdLFsyOSwyXSxbMzAsMl0sWzMxLDBdLFszMSwxXSxbMzEsMl0sWzMxLDFdLFszMSwxXSxbMzEsMV0sWzMxLDJdLFszMSwyXSxbMzEsMl0sWzMxLDFdLFszMSwxXSxbMzQsNF0sWzM0LDVdLFszNCw1XSxbMzQsNl0sWzMyLDRdLFszMiwzXSxbMzIsMl0sWzMyLDRdLFszMiwzXSxbMzIsMl0sWzMzLDJdLFszMywyXSxbMzMsMl0sWzMzLDJdLFsyNywxXSxbMjcsMV0sWzI3LDFdLFs0MywxXSxbNDMsMl0sWzQzLDFdLFs0MywxXSxbNjIsMV0sWzYyLDJdLFs1OCwxXSxbNTgsMV0sWzU4LDFdLFs1OCwxXSxbNTgsMV0sWzU4LDFdLFs1OCwxXSxbNTgsMV0sWzU4LDFdLFs1OCwxXSxbNTgsMV0sWzU5LDFdLFs1OSwxXSxbNTksMV1dLHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbihXLHBlLHZlLFBlLF9lLGJlLFZlKXt2YXIgRGU9YmUubGVuZ3RoLTE7c3dpdGNoKF9lKXtjYXNlIDIzOnRoaXMuJD1iZVtEZV07YnJlYWs7Y2FzZSAyNDp0aGlzLiQ9YmVbRGUtMV0rIiIrYmVbRGVdO2JyZWFrO2Nhc2UgMjY6dGhpcy4kPWJlW0RlLTFdK2JlW0RlXTticmVhaztjYXNlIDI3OnRoaXMuJD1bYmVbRGVdLnRyaW0oKV07YnJlYWs7Y2FzZSAyODpiZVtEZS0yXS5wdXNoKGJlW0RlXS50cmltKCkpLHRoaXMuJD1iZVtEZS0yXTticmVhaztjYXNlIDI5OnRoaXMuJD1iZVtEZS00XSxQZS5hZGRDbGFzcyhiZVtEZS0yXSxiZVtEZV0pO2JyZWFrO2Nhc2UgMzc6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgNDI6dGhpcy4kPWJlW0RlXS50cmltKCksUGUuc2V0RGlhZ3JhbVRpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSA0Mzp0aGlzLiQ9YmVbRGVdLnRyaW0oKSxQZS5zZXRBY2NUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgNDQ6Y2FzZSA0NTp0aGlzLiQ9YmVbRGVdLnRyaW0oKSxQZS5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO2JyZWFrO2Nhc2UgNDY6UGUuYWRkU2VjdGlvbihiZVtEZV0uc3Vic3RyKDgpKSx0aGlzLiQ9YmVbRGVdLnN1YnN0cig4KTticmVhaztjYXNlIDQ3OlBlLmFkZFBvaW50KGJlW0RlLTNdLCIiLGJlW0RlLTFdLGJlW0RlXSxbXSk7YnJlYWs7Y2FzZSA0ODpQZS5hZGRQb2ludChiZVtEZS00XSxiZVtEZS0zXSxiZVtEZS0xXSxiZVtEZV0sW10pO2JyZWFrO2Nhc2UgNDk6UGUuYWRkUG9pbnQoYmVbRGUtNF0sIiIsYmVbRGUtMl0sYmVbRGUtMV0sYmVbRGVdKTticmVhaztjYXNlIDUwOlBlLmFkZFBvaW50KGJlW0RlLTVdLGJlW0RlLTRdLGJlW0RlLTJdLGJlW0RlLTFdLGJlW0RlXSk7YnJlYWs7Y2FzZSA1MTpQZS5zZXRYQXhpc0xlZnRUZXh0KGJlW0RlLTJdKSxQZS5zZXRYQXhpc1JpZ2h0VGV4dChiZVtEZV0pO2JyZWFrO2Nhc2UgNTI6YmVbRGUtMV0udGV4dCs9IiBcdTI3RjYgIixQZS5zZXRYQXhpc0xlZnRUZXh0KGJlW0RlLTFdKTticmVhaztjYXNlIDUzOlBlLnNldFhBeGlzTGVmdFRleHQoYmVbRGVdKTticmVhaztjYXNlIDU0OlBlLnNldFlBeGlzQm90dG9tVGV4dChiZVtEZS0yXSksUGUuc2V0WUF4aXNUb3BUZXh0KGJlW0RlXSk7YnJlYWs7Y2FzZSA1NTpiZVtEZS0xXS50ZXh0Kz0iIFx1MjdGNiAiLFBlLnNldFlBeGlzQm90dG9tVGV4dChiZVtEZS0xXSk7YnJlYWs7Y2FzZSA1NjpQZS5zZXRZQXhpc0JvdHRvbVRleHQoYmVbRGVdKTticmVhaztjYXNlIDU3OlBlLnNldFF1YWRyYW50MVRleHQoYmVbRGVdKTticmVhaztjYXNlIDU4OlBlLnNldFF1YWRyYW50MlRleHQoYmVbRGVdKTticmVhaztjYXNlIDU5OlBlLnNldFF1YWRyYW50M1RleHQoYmVbRGVdKTticmVhaztjYXNlIDYwOlBlLnNldFF1YWRyYW50NFRleHQoYmVbRGVdKTticmVhaztjYXNlIDY0OnRoaXMuJD17dGV4dDpiZVtEZV0sdHlwZToidGV4dCJ9O2JyZWFrO2Nhc2UgNjU6dGhpcy4kPXt0ZXh0OmJlW0RlLTFdLnRleHQrIiIrYmVbRGVdLHR5cGU6YmVbRGUtMV0udHlwZX07YnJlYWs7Y2FzZSA2Njp0aGlzLiQ9e3RleHQ6YmVbRGVdLHR5cGU6InRleHQifTticmVhaztjYXNlIDY3OnRoaXMuJD17dGV4dDpiZVtEZV0sdHlwZToibWFya2Rvd24ifTticmVhaztjYXNlIDY4OnRoaXMuJD1iZVtEZV07YnJlYWs7Y2FzZSA2OTp0aGlzLiQ9YmVbRGUtMV0rIiIrYmVbRGVdO2JyZWFrfX0sImFub255bW91cyIpLHRhYmxlOlt7MTg6ZSwyNjoxLDI3OjIsMjg6ciw1NTpuLDU2OmksNTc6YX0sezE6WzNdfSx7MTg6ZSwyNjo4LDI3OjIsMjg6ciw1NTpuLDU2OmksNTc6YX0sezE4OmUsMjY6OSwyNzoyLDI4OnIsNTU6biw1NjppLDU3OmF9LHQocyxbMiwzM10sezI5OjEwfSksdChsLFsyLDYxXSksdChsLFsyLDYyXSksdChsLFsyLDYzXSksezE6WzIsMzBdfSx7MTpbMiwzMV19LHQodSxoLHszMDoxMSwzMToxMiwyNDoxMywzMjoxNSwzMzoxNiwzNDoxNyw0MzozMCw1ODozMSwxOlsyLDMyXSw0OmYsNTpkLDEwOnAsMTI6bSwxMzpnLDE0OnksMTg6diwyNTp4LDM1OmIsMzc6VCwzOTpTLDQxOncsNDI6RSw0ODpfLDUwOkMsNTE6RCw1MjpPLDUzOlIsNTQ6ayw2MDpMLDYxOkEsNjM6SSw2NDpNLDY1OlAsNjY6Qiw2NzpGfSksdChzLFsyLDM0XSksezI3OjQ1LDU1Om4sNTY6aSw1NzphfSx0KHUsWzIsMzddKSx0KHUsaCx7MjQ6MTMsMzI6MTUsMzM6MTYsMzQ6MTcsNDM6MzAsNTg6MzEsMzE6NDYsNDpmLDU6ZCwxMDpwLDEyOm0sMTM6ZywxNDp5LDE4OnYsMjU6eCwzNTpiLDM3OlQsMzk6Uyw0MTp3LDQyOkUsNDg6Xyw1MDpDLDUxOkQsNTI6Tyw1MzpSLDU0OmssNjA6TCw2MTpBLDYzOkksNjQ6TSw2NTpQLDY2OkIsNjc6Rn0pLHQodSxbMiwzOV0pLHQodSxbMiw0MF0pLHQodSxbMiw0MV0pLHszNjpbMSw0N119LHszODpbMSw0OF19LHs0MDpbMSw0OV19LHQodSxbMiw0NV0pLHQodSxbMiw0Nl0pLHsxODpbMSw1MF19LHs0OmYsNTpkLDEwOnAsMTI6bSwxMzpnLDE0OnksNDM6NTEsNTg6MzEsNjA6TCw2MTpBLDYzOkksNjQ6TSw2NTpQLDY2OkIsNjc6Rn0sezQ6Ziw1OmQsMTA6cCwxMjptLDEzOmcsMTQ6eSw0Mzo1Miw1ODozMSw2MDpMLDYxOkEsNjM6SSw2NDpNLDY1OlAsNjY6Qiw2NzpGfSx7NDpmLDU6ZCwxMDpwLDEyOm0sMTM6ZywxNDp5LDQzOjUzLDU4OjMxLDYwOkwsNjE6QSw2MzpJLDY0Ok0sNjU6UCw2NjpCLDY3OkZ9LHs0OmYsNTpkLDEwOnAsMTI6bSwxMzpnLDE0OnksNDM6NTQsNTg6MzEsNjA6TCw2MTpBLDYzOkksNjQ6TSw2NTpQLDY2OkIsNjc6Rn0sezQ6Ziw1OmQsMTA6cCwxMjptLDEzOmcsMTQ6eSw0Mzo1NSw1ODozMSw2MDpMLDYxOkEsNjM6SSw2NDpNLDY1OlAsNjY6Qiw2NzpGfSx7NDpmLDU6ZCwxMDpwLDEyOm0sMTM6ZywxNDp5LDQzOjU2LDU4OjMxLDYwOkwsNjE6QSw2MzpJLDY0Ok0sNjU6UCw2NjpCLDY3OkZ9LHs0OmYsNTpkLDg6eiwxMDpwLDEyOm0sMTM6ZywxNDp5LDE4OiQsNDQ6WzEsNTddLDQ3OlsxLDU4XSw1ODo2MCw1OTo1OSw2MzpJLDY0Ok0sNjU6UCw2NjpCLDY3OkZ9LHQoVSxbMiw2NF0pLHQoVSxbMiw2Nl0pLHQoVSxbMiw2N10pLHQoVSxbMiw3MF0pLHQoVSxbMiw3MV0pLHQoVSxbMiw3Ml0pLHQoVSxbMiw3M10pLHQoVSxbMiw3NF0pLHQoVSxbMiw3NV0pLHQoVSxbMiw3Nl0pLHQoVSxbMiw3N10pLHQoVSxbMiw3OF0pLHQoVSxbMiw3OV0pLHQoVSxbMiw4MF0pLHQocyxbMiwzNV0pLHQodSxbMiwzOF0pLHQodSxbMiw0Ml0pLHQodSxbMiw0M10pLHQodSxbMiw0NF0pLHszOjY0LDQ6Syw1OmVlLDY6WSw3OmNlLDg6Wiw5OnVlLDEwOlEsMTE6aiwxMjpuZSwxMzp0ZSwxNDpoZSwxNTpsZSwyMTo2M30sdCh1LFsyLDUzXSx7NTk6NTksNTg6NjAsNDpmLDU6ZCw4OnosMTA6cCwxMjptLDEzOmcsMTQ6eSwxODokLDQ5OlsxLDc3XSw2MzpJLDY0Ok0sNjU6UCw2NjpCLDY3OkZ9KSx0KHUsWzIsNTZdLHs1OTo1OSw1ODo2MCw0OmYsNTpkLDg6eiwxMDpwLDEyOm0sMTM6ZywxNDp5LDE4OiQsNDk6WzEsNzhdLDYzOkksNjQ6TSw2NTpQLDY2OkIsNjc6Rn0pLHQodSxbMiw1N10sezU5OjU5LDU4OjYwLDQ6Ziw1OmQsODp6LDEwOnAsMTI6bSwxMzpnLDE0OnksMTg6JCw2MzpJLDY0Ok0sNjU6UCw2NjpCLDY3OkZ9KSx0KHUsWzIsNThdLHs1OTo1OSw1ODo2MCw0OmYsNTpkLDg6eiwxMDpwLDEyOm0sMTM6ZywxNDp5LDE4OiQsNjM6SSw2NDpNLDY1OlAsNjY6Qiw2NzpGfSksdCh1LFsyLDU5XSx7NTk6NTksNTg6NjAsNDpmLDU6ZCw4OnosMTA6cCwxMjptLDEzOmcsMTQ6eSwxODokLDYzOkksNjQ6TSw2NTpQLDY2OkIsNjc6Rn0pLHQodSxbMiw2MF0sezU5OjU5LDU4OjYwLDQ6Ziw1OmQsODp6LDEwOnAsMTI6bSwxMzpnLDE0OnksMTg6JCw2MzpJLDY0Ok0sNjU6UCw2NjpCLDY3OkZ9KSx7NDU6WzEsNzldfSx7NDQ6WzEsODBdfSx0KFUsWzIsNjVdKSx0KFUsWzIsODFdKSx0KFUsWzIsODJdKSx0KFUsWzIsODNdKSx7Mzo4Miw0OkssNTplZSw2OlksNzpjZSw4OlosOTp1ZSwxMDpRLDExOmosMTI6bmUsMTM6dGUsMTQ6aGUsMTU6bGUsMTg6WzEsODFdfSx0KEosWzIsMjNdKSx0KEosWzIsMV0pLHQoSixbMiwyXSksdChKLFsyLDNdKSx0KEosWzIsNF0pLHQoSixbMiw1XSksdChKLFsyLDZdKSx0KEosWzIsN10pLHQoSixbMiw4XSksdChKLFsyLDldKSx0KEosWzIsMTBdKSx0KEosWzIsMTFdKSx0KEosWzIsMTJdKSx0KHUsWzIsNTJdLHs1ODozMSw0Mzo4Myw0OmYsNTpkLDEwOnAsMTI6bSwxMzpnLDE0OnksNjA6TCw2MTpBLDYzOkksNjQ6TSw2NTpQLDY2OkIsNjc6Rn0pLHQodSxbMiw1NV0sezU4OjMxLDQzOjg0LDQ6Ziw1OmQsMTA6cCwxMjptLDEzOmcsMTQ6eSw2MDpMLDYxOkEsNjM6SSw2NDpNLDY1OlAsNjY6Qiw2NzpGfSksezQ2OlsxLDg1XX0sezQ1OlsxLDg2XX0sezQ6U2UsNTpzZSw2OmFlLDg6T2UsMTE6eWUsMTM6QmUsMTY6ODksMTc6SGUsMTg6emUsMTk6TGUsMjA6SWUsMjI6ODgsMjM6ODd9LHQoSixbMiwyNF0pLHQodSxbMiw1MV0sezU5OjU5LDU4OjYwLDQ6Ziw1OmQsODp6LDEwOnAsMTI6bSwxMzpnLDE0OnksMTg6JCw2MzpJLDY0Ok0sNjU6UCw2NjpCLDY3OkZ9KSx0KHUsWzIsNTRdLHs1OTo1OSw1ODo2MCw0OmYsNTpkLDg6eiwxMDpwLDEyOm0sMTM6ZywxNDp5LDE4OiQsNjM6SSw2NDpNLDY1OlAsNjY6Qiw2NzpGfSksdCh1LFsyLDQ3XSx7MjI6ODgsMTY6ODksMjM6MTAwLDQ6U2UsNTpzZSw2OmFlLDg6T2UsMTE6eWUsMTM6QmUsMTc6SGUsMTg6emUsMTk6TGUsMjA6SWV9KSx7NDY6WzEsMTAxXX0sdCh1LFsyLDI5XSx7MTA6eGV9KSx0KHEsWzIsMjddLHsxNjoxMDMsNDpTZSw1OnNlLDY6YWUsODpPZSwxMTp5ZSwxMzpCZSwxNzpIZSwxODp6ZSwxOTpMZSwyMDpJZX0pLHQoZGUsWzIsMjVdKSx0KGRlLFsyLDEzXSksdChkZSxbMiwxNF0pLHQoZGUsWzIsMTVdKSx0KGRlLFsyLDE2XSksdChkZSxbMiwxN10pLHQoZGUsWzIsMThdKSx0KGRlLFsyLDE5XSksdChkZSxbMiwyMF0pLHQoZGUsWzIsMjFdKSx0KGRlLFsyLDIyXSksdCh1LFsyLDQ5XSx7MTA6eGV9KSx0KHUsWzIsNDhdLHsyMjo4OCwxNjo4OSwyMzoxMDQsNDpTZSw1OnNlLDY6YWUsODpPZSwxMTp5ZSwxMzpCZSwxNzpIZSwxODp6ZSwxOTpMZSwyMDpJZX0pLHs0OlNlLDU6c2UsNjphZSw4Ok9lLDExOnllLDEzOkJlLDE2Ojg5LDE3OkhlLDE4OnplLDE5OkxlLDIwOkllLDIyOjEwNX0sdChkZSxbMiwyNl0pLHQodSxbMiw1MF0sezEwOnhlfSksdChxLFsyLDI4XSx7MTY6MTAzLDQ6U2UsNTpzZSw2OmFlLDg6T2UsMTE6eWUsMTM6QmUsMTc6SGUsMTg6emUsMTk6TGUsMjA6SWV9KV0sZGVmYXVsdEFjdGlvbnM6ezg6WzIsMzBdLDk6WzIsMzFdfSxwYXJzZUVycm9yOm8oZnVuY3Rpb24oVyxwZSl7aWYocGUucmVjb3ZlcmFibGUpdGhpcy50cmFjZShXKTtlbHNle3ZhciB2ZT1uZXcgRXJyb3IoVyk7dGhyb3cgdmUuaGFzaD1wZSx2ZX19LCJwYXJzZUVycm9yIikscGFyc2U6byhmdW5jdGlvbihXKXt2YXIgcGU9dGhpcyx2ZT1bMF0sUGU9W10sX2U9W251bGxdLGJlPVtdLFZlPXRoaXMudGFibGUsRGU9IiIscWU9MCxhdD0wLFJ0PTAsc3Q9MixVZT0xLGN0PWJlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLFdlPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksb3Q9e3l5Ont9fTtmb3IodmFyIFl0IGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksWXQpJiYob3QueXlbWXRdPXRoaXMueXlbWXRdKTtXZS5zZXRJbnB1dChXLG90Lnl5KSxvdC55eS5sZXhlcj1XZSxvdC55eS5wYXJzZXI9dGhpcyx0eXBlb2YgV2UueXlsbG9jPiJ1IiYmKFdlLnl5bGxvYz17fSk7dmFyIFR0PVdlLnl5bGxvYztiZS5wdXNoKFR0KTt2YXIgTXQ9V2Uub3B0aW9ucyYmV2Uub3B0aW9ucy5yYW5nZXM7dHlwZW9mIG90Lnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPW90Lnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIGJ0KENlKXt2ZS5sZW5ndGg9dmUubGVuZ3RoLTIqQ2UsX2UubGVuZ3RoPV9lLmxlbmd0aC1DZSxiZS5sZW5ndGg9YmUubGVuZ3RoLUNlfW8oYnQsInBvcFN0YWNrIik7ZnVuY3Rpb24gdXQoKXt2YXIgQ2U7cmV0dXJuIENlPVBlLnBvcCgpfHxXZS5sZXgoKXx8VWUsdHlwZW9mIENlIT0ibnVtYmVyIiYmKENlIGluc3RhbmNlb2YgQXJyYXkmJihQZT1DZSxDZT1QZS5wb3AoKSksQ2U9cGUuc3ltYm9sc19bQ2VdfHxDZSksQ2V9byh1dCwibGV4Iik7Zm9yKHZhciBTdCxmdCx2dCxudCxwbixrdCxPbj17fSx0bixNcixJcixQbjs7KXtpZih2dD12ZVt2ZS5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1t2dF0/bnQ9dGhpcy5kZWZhdWx0QWN0aW9uc1t2dF06KChTdD09PW51bGx8fHR5cGVvZiBTdD4idSIpJiYoU3Q9dXQoKSksbnQ9VmVbdnRdJiZWZVt2dF1bU3RdKSx0eXBlb2YgbnQ+InUifHwhbnQubGVuZ3RofHwhbnRbMF0pe3ZhciBEdD0iIjtQbj1bXTtmb3IodG4gaW4gVmVbdnRdKXRoaXMudGVybWluYWxzX1t0bl0mJnRuPnN0JiZQbi5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bdG5dKyInIik7V2Uuc2hvd1Bvc2l0aW9uP0R0PSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKHFlKzEpK2A6CmArV2Uuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtQbi5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW1N0XXx8U3QpKyInIjpEdD0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhxZSsxKSsiOiBVbmV4cGVjdGVkICIrKFN0PT1VZT8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tTdF18fFN0KSsiJyIpLHRoaXMucGFyc2VFcnJvcihEdCx7dGV4dDpXZS5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bU3RdfHxTdCxsaW5lOldlLnl5bGluZW5vLGxvYzpUdCxleHBlY3RlZDpQbn0pfWlmKG50WzBdaW5zdGFuY2VvZiBBcnJheSYmbnQubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIit2dCsiLCB0b2tlbjogIitTdCk7c3dpdGNoKG50WzBdKXtjYXNlIDE6dmUucHVzaChTdCksX2UucHVzaChXZS55eXRleHQpLGJlLnB1c2goV2UueXlsbG9jKSx2ZS5wdXNoKG50WzFdKSxTdD1udWxsLGZ0PyhTdD1mdCxmdD1udWxsKTooYXQ9V2UueXlsZW5nLERlPVdlLnl5dGV4dCxxZT1XZS55eWxpbmVubyxUdD1XZS55eWxsb2MsUnQ+MCYmUnQtLSk7YnJlYWs7Y2FzZSAyOmlmKE1yPXRoaXMucHJvZHVjdGlvbnNfW250WzFdXVsxXSxPbi4kPV9lW19lLmxlbmd0aC1Ncl0sT24uXyQ9e2ZpcnN0X2xpbmU6YmVbYmUubGVuZ3RoLShNcnx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmJlW2JlLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmJlW2JlLmxlbmd0aC0oTXJ8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46YmVbYmUubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxNdCYmKE9uLl8kLnJhbmdlPVtiZVtiZS5sZW5ndGgtKE1yfHwxKV0ucmFuZ2VbMF0sYmVbYmUubGVuZ3RoLTFdLnJhbmdlWzFdXSksa3Q9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KE9uLFtEZSxhdCxxZSxvdC55eSxudFsxXSxfZSxiZV0uY29uY2F0KGN0KSksdHlwZW9mIGt0PCJ1IilyZXR1cm4ga3Q7TXImJih2ZT12ZS5zbGljZSgwLC0xKk1yKjIpLF9lPV9lLnNsaWNlKDAsLTEqTXIpLGJlPWJlLnNsaWNlKDAsLTEqTXIpKSx2ZS5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW250WzFdXVswXSksX2UucHVzaChPbi4kKSxiZS5wdXNoKE9uLl8kKSxJcj1WZVt2ZVt2ZS5sZW5ndGgtMl1dW3ZlW3ZlLmxlbmd0aC0xXV0sdmUucHVzaChJcik7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH0sInBhcnNlIil9LG9lPWZ1bmN0aW9uKCl7dmFyIFRlPXtFT0Y6MSxwYXJzZUVycm9yOm8oZnVuY3Rpb24ocGUsdmUpe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IocGUsdmUpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKHBlKX0sInBhcnNlRXJyb3IiKSxzZXRJbnB1dDpvKGZ1bmN0aW9uKFcscGUpe3JldHVybiB0aGlzLnl5PXBlfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1XLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSwic2V0SW5wdXQiKSxpbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIFc9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPVcsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPVcsdGhpcy5tYXRjaGVkKz1XO3ZhciBwZT1XLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gcGU/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLFd9LCJpbnB1dCIpLHVucHV0Om8oZnVuY3Rpb24oVyl7dmFyIHBlPVcubGVuZ3RoLHZlPVcuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD1XK3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1wZSksdGhpcy5vZmZzZXQtPXBlO3ZhciBQZT10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSx2ZS5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPXZlLmxlbmd0aC0xKTt2YXIgX2U9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnZlPyh2ZS5sZW5ndGg9PT1QZS5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK1BlW1BlLmxlbmd0aC12ZS5sZW5ndGhdLmxlbmd0aC12ZVswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLXBlfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W19lWzBdLF9lWzBdK3RoaXMueXlsZW5nLXBlXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LCJ1bnB1dCIpLG1vcmU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LCJtb3JlIikscmVqZWN0Om8oZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LCJyZWplY3QiKSxsZXNzOm8oZnVuY3Rpb24oVyl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKFcpKX0sImxlc3MiKSxwYXN0SW5wdXQ6byhmdW5jdGlvbigpe3ZhciBXPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oVy5sZW5ndGg+MjA/Ii4uLiI6IiIpK1cuc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LCJwYXN0SW5wdXQiKSx1cGNvbWluZ0lucHV0Om8oZnVuY3Rpb24oKXt2YXIgVz10aGlzLm1hdGNoO3JldHVybiBXLmxlbmd0aDwyMCYmKFcrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLVcubGVuZ3RoKSksKFcuc3Vic3RyKDAsMjApKyhXLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSwidXBjb21pbmdJbnB1dCIpLHNob3dQb3NpdGlvbjpvKGZ1bmN0aW9uKCl7dmFyIFc9dGhpcy5wYXN0SW5wdXQoKSxwZT1uZXcgQXJyYXkoVy5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBXK3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtwZSsiXiJ9LCJzaG93UG9zaXRpb24iKSx0ZXN0X21hdGNoOm8oZnVuY3Rpb24oVyxwZSl7dmFyIHZlLFBlLF9lO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihfZT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihfZS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxQZT1XWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxQZSYmKHRoaXMueXlsaW5lbm8rPVBlLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOlBlP1BlW1BlLmxlbmd0aC0xXS5sZW5ndGgtUGVbUGUubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rV1swXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1XWzBdLHRoaXMubWF0Y2grPVdbMF0sdGhpcy5tYXRjaGVzPVcsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoV1swXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9V1swXSx2ZT10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxwZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSx2ZSlyZXR1cm4gdmU7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIGJlIGluIF9lKXRoaXNbYmVdPV9lW2JlXTtyZXR1cm4hMX1yZXR1cm4hMX0sInRlc3RfbWF0Y2giKSxuZXh0Om8oZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgVyxwZSx2ZSxQZTt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBfZT10aGlzLl9jdXJyZW50UnVsZXMoKSxiZT0wO2JlPF9lLmxlbmd0aDtiZSsrKWlmKHZlPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbX2VbYmVdXSksdmUmJighcGV8fHZlWzBdLmxlbmd0aD5wZVswXS5sZW5ndGgpKXtpZihwZT12ZSxQZT1iZSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihXPXRoaXMudGVzdF9tYXRjaCh2ZSxfZVtiZV0pLFchPT0hMSlyZXR1cm4gVztpZih0aGlzLl9iYWNrdHJhY2spe3BlPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIHBlPyhXPXRoaXMudGVzdF9tYXRjaChwZSxfZVtQZV0pLFchPT0hMT9XOiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSwibmV4dCIpLGxleDpvKGZ1bmN0aW9uKCl7dmFyIHBlPXRoaXMubmV4dCgpO3JldHVybiBwZXx8dGhpcy5sZXgoKX0sImxleCIpLGJlZ2luOm8oZnVuY3Rpb24ocGUpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChwZSl9LCJiZWdpbiIpLHBvcFN0YXRlOm8oZnVuY3Rpb24oKXt2YXIgcGU9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gcGU+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LCJwb3BTdGF0ZSIpLF9jdXJyZW50UnVsZXM6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LCJfY3VycmVudFJ1bGVzIiksdG9wU3RhdGU6byhmdW5jdGlvbihwZSl7cmV0dXJuIHBlPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMocGV8fDApLHBlPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbcGVdOiJJTklUSUFMIn0sInRvcFN0YXRlIikscHVzaFN0YXRlOm8oZnVuY3Rpb24ocGUpe3RoaXMuYmVnaW4ocGUpfSwicHVzaFN0YXRlIiksc3RhdGVTdGFja1NpemU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sInN0YXRlU3RhY2tTaXplIiksb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24ocGUsdmUsUGUsX2Upe3ZhciBiZT1fZTtzd2l0Y2goUGUpe2Nhc2UgMDpicmVhaztjYXNlIDE6YnJlYWs7Y2FzZSAyOnJldHVybiA1NTtjYXNlIDM6YnJlYWs7Y2FzZSA0OnJldHVybiB0aGlzLmJlZ2luKCJ0aXRsZSIpLDM1O2JyZWFrO2Nhc2UgNTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJ0aXRsZV92YWx1ZSI7YnJlYWs7Y2FzZSA2OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwzNzticmVhaztjYXNlIDc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjticmVhaztjYXNlIDg6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDM5O2JyZWFrO2Nhc2UgOTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2JyZWFrO2Nhc2UgMTA6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgMTE6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTI6cmV0dXJuImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiO2Nhc2UgMTM6cmV0dXJuIDQ4O2Nhc2UgMTQ6cmV0dXJuIDUwO2Nhc2UgMTU6cmV0dXJuIDQ5O2Nhc2UgMTY6cmV0dXJuIDUxO2Nhc2UgMTc6cmV0dXJuIDUyO2Nhc2UgMTg6cmV0dXJuIDUzO2Nhc2UgMTk6cmV0dXJuIDU0O2Nhc2UgMjA6cmV0dXJuIDI1O2Nhc2UgMjE6dGhpcy5iZWdpbigibWRfc3RyaW5nIik7YnJlYWs7Y2FzZSAyMjpyZXR1cm4iTURfU1RSIjtjYXNlIDIzOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDI0OnRoaXMuYmVnaW4oInN0cmluZyIpO2JyZWFrO2Nhc2UgMjU6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjY6cmV0dXJuIlNUUiI7Y2FzZSAyNzp0aGlzLmJlZ2luKCJjbGFzc19uYW1lIik7YnJlYWs7Y2FzZSAyODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDQ3O2JyZWFrO2Nhc2UgMjk6cmV0dXJuIHRoaXMuYmVnaW4oInBvaW50X3N0YXJ0IiksNDQ7YnJlYWs7Y2FzZSAzMDpyZXR1cm4gdGhpcy5iZWdpbigicG9pbnRfeCIpLDQ1O2JyZWFrO2Nhc2UgMzE6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMzI6dGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oInBvaW50X3kiKTticmVhaztjYXNlIDMzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNDY7YnJlYWs7Y2FzZSAzNDpyZXR1cm4gMjg7Y2FzZSAzNTpyZXR1cm4gNDtjYXNlIDM2OnJldHVybiAxMTtjYXNlIDM3OnJldHVybiA2NDtjYXNlIDM4OnJldHVybiAxMDtjYXNlIDM5OnJldHVybiA2NTtjYXNlIDQwOnJldHVybiA2NTtjYXNlIDQxOnJldHVybiAxNDtjYXNlIDQyOnJldHVybiAxMztjYXNlIDQzOnJldHVybiA2NztjYXNlIDQ0OnJldHVybiA2NjtjYXNlIDQ1OnJldHVybiAxMjtjYXNlIDQ2OnJldHVybiA4O2Nhc2UgNDc6cmV0dXJuIDU7Y2FzZSA0ODpyZXR1cm4gMTg7Y2FzZSA0OTpyZXR1cm4gNTY7Y2FzZSA1MDpyZXR1cm4gNjM7Y2FzZSA1MTpyZXR1cm4gNTd9fSwiYW5vbnltb3VzIikscnVsZXM6Wy9eKD86JSUoPyFceylbXlxuXSopL2ksL14oPzpbXlx9XSUlW15cbl0qKS9pLC9eKD86W1xuXHJdKykvaSwvXig/OiUlW15cbl0qKS9pLC9eKD86dGl0bGVcYikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpbXH1dKS9pLC9eKD86W15cfV0qKS9pLC9eKD86ICp4LWF4aXMgKikvaSwvXig/OiAqeS1heGlzICopL2ksL14oPzogKi0tKz4gKikvaSwvXig/OiAqcXVhZHJhbnQtMSAqKS9pLC9eKD86ICpxdWFkcmFudC0yICopL2ksL14oPzogKnF1YWRyYW50LTMgKikvaSwvXig/OiAqcXVhZHJhbnQtNCAqKS9pLC9eKD86Y2xhc3NEZWZcYikvaSwvXig/OlsiXVtgXSkvaSwvXig/OlteYCJdKykvaSwvXig/OltgXVsiXSkvaSwvXig/OlsiXSkvaSwvXig/OlsiXSkvaSwvXig/OlteIl0qKS9pLC9eKD86Ojo6KS9pLC9eKD86Xlx3KykvaSwvXig/OlxzKjpccypcW1xzKikvaSwvXig/OigxKXwoMCguXGQrKT8pKS9pLC9eKD86XHMqXF0gKikvaSwvXig/OlxzKixccyopL2ksL14oPzooMSl8KDAoLlxkKyk/KSkvaSwvXig/OiAqcXVhZHJhbnRDaGFydCAqKS9pLC9eKD86W0EtWmEtel0rKS9pLC9eKD86OikvaSwvXig/OlwrKS9pLC9eKD86LCkvaSwvXig/Oj0pL2ksL14oPzo9KS9pLC9eKD86XCopL2ksL14oPzojKS9pLC9eKD86W1xfXSkvaSwvXig/OlwuKS9pLC9eKD86JikvaSwvXig/Oi0pL2ksL14oPzpbMC05XSspL2ksL14oPzpccykvaSwvXig/OjspL2ksL14oPzpbISIjJCUmJyorLC0uYD9cXF8vXSkvaSwvXig/OiQpL2ldLGNvbmRpdGlvbnM6e2NsYXNzX25hbWU6e3J1bGVzOlsyOF0saW5jbHVzaXZlOiExfSxwb2ludF95OntydWxlczpbMzNdLGluY2x1c2l2ZTohMX0scG9pbnRfeDp7cnVsZXM6WzMyXSxpbmNsdXNpdmU6ITF9LHBvaW50X3N0YXJ0OntydWxlczpbMzAsMzFdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzExLDEyXSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzldLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbN10saW5jbHVzaXZlOiExfSx0aXRsZTp7cnVsZXM6WzVdLGluY2x1c2l2ZTohMX0sbWRfc3RyaW5nOntydWxlczpbMjIsMjNdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbMjUsMjZdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw2LDgsMTAsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjQsMjcsMjksMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTFdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gVGV9KCk7aWUubGV4ZXI9b2U7ZnVuY3Rpb24gVigpe3RoaXMueXk9e319cmV0dXJuIG8oViwiUGFyc2VyIiksVi5wcm90b3R5cGU9aWUsaWUuUGFyc2VyPVYsbmV3IFZ9KCk7Wk8ucGFyc2VyPVpPO0xmZT1aT30pO3ZhciB4cyxQUyxOZmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtmcigpO19hKCk7eXQoKTtCeSgpO3hzPWRoKCksUFM9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmNsYXNzZXM9bmV3IE1hcDt0aGlzLmNvbmZpZz10aGlzLmdldERlZmF1bHRDb25maWcoKSx0aGlzLnRoZW1lQ29uZmlnPXRoaXMuZ2V0RGVmYXVsdFRoZW1lQ29uZmlnKCksdGhpcy5kYXRhPXRoaXMuZ2V0RGVmYXVsdERhdGEoKX1zdGF0aWN7byh0aGlzLCJRdWFkcmFudEJ1aWxkZXIiKX1nZXREZWZhdWx0RGF0YSgpe3JldHVybnt0aXRsZVRleHQ6IiIscXVhZHJhbnQxVGV4dDoiIixxdWFkcmFudDJUZXh0OiIiLHF1YWRyYW50M1RleHQ6IiIscXVhZHJhbnQ0VGV4dDoiIix4QXhpc0xlZnRUZXh0OiIiLHhBeGlzUmlnaHRUZXh0OiIiLHlBeGlzQm90dG9tVGV4dDoiIix5QXhpc1RvcFRleHQ6IiIscG9pbnRzOltdfX1nZXREZWZhdWx0Q29uZmlnKCl7cmV0dXJue3Nob3dYQXhpczohMCxzaG93WUF4aXM6ITAsc2hvd1RpdGxlOiEwLGNoYXJ0SGVpZ2h0Om9yLnF1YWRyYW50Q2hhcnQ/LmNoYXJ0V2lkdGh8fDUwMCxjaGFydFdpZHRoOm9yLnF1YWRyYW50Q2hhcnQ/LmNoYXJ0SGVpZ2h0fHw1MDAsdGl0bGVQYWRkaW5nOm9yLnF1YWRyYW50Q2hhcnQ/LnRpdGxlUGFkZGluZ3x8MTAsdGl0bGVGb250U2l6ZTpvci5xdWFkcmFudENoYXJ0Py50aXRsZUZvbnRTaXplfHwyMCxxdWFkcmFudFBhZGRpbmc6b3IucXVhZHJhbnRDaGFydD8ucXVhZHJhbnRQYWRkaW5nfHw1LHhBeGlzTGFiZWxQYWRkaW5nOm9yLnF1YWRyYW50Q2hhcnQ/LnhBeGlzTGFiZWxQYWRkaW5nfHw1LHlBeGlzTGFiZWxQYWRkaW5nOm9yLnF1YWRyYW50Q2hhcnQ/LnlBeGlzTGFiZWxQYWRkaW5nfHw1LHhBeGlzTGFiZWxGb250U2l6ZTpvci5xdWFkcmFudENoYXJ0Py54QXhpc0xhYmVsRm9udFNpemV8fDE2LHlBeGlzTGFiZWxGb250U2l6ZTpvci5xdWFkcmFudENoYXJ0Py55QXhpc0xhYmVsRm9udFNpemV8fDE2LHF1YWRyYW50TGFiZWxGb250U2l6ZTpvci5xdWFkcmFudENoYXJ0Py5xdWFkcmFudExhYmVsRm9udFNpemV8fDE2LHF1YWRyYW50VGV4dFRvcFBhZGRpbmc6b3IucXVhZHJhbnRDaGFydD8ucXVhZHJhbnRUZXh0VG9wUGFkZGluZ3x8NSxwb2ludFRleHRQYWRkaW5nOm9yLnF1YWRyYW50Q2hhcnQ/LnBvaW50VGV4dFBhZGRpbmd8fDUscG9pbnRMYWJlbEZvbnRTaXplOm9yLnF1YWRyYW50Q2hhcnQ/LnBvaW50TGFiZWxGb250U2l6ZXx8MTIscG9pbnRSYWRpdXM6b3IucXVhZHJhbnRDaGFydD8ucG9pbnRSYWRpdXN8fDUseEF4aXNQb3NpdGlvbjpvci5xdWFkcmFudENoYXJ0Py54QXhpc1Bvc2l0aW9ufHwidG9wIix5QXhpc1Bvc2l0aW9uOm9yLnF1YWRyYW50Q2hhcnQ/LnlBeGlzUG9zaXRpb258fCJsZWZ0IixxdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlV2lkdGg6b3IucXVhZHJhbnRDaGFydD8ucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZVdpZHRofHwxLHF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VXaWR0aDpvci5xdWFkcmFudENoYXJ0Py5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlV2lkdGh8fDJ9fWdldERlZmF1bHRUaGVtZUNvbmZpZygpe3JldHVybntxdWFkcmFudDFGaWxsOnhzLnF1YWRyYW50MUZpbGwscXVhZHJhbnQyRmlsbDp4cy5xdWFkcmFudDJGaWxsLHF1YWRyYW50M0ZpbGw6eHMucXVhZHJhbnQzRmlsbCxxdWFkcmFudDRGaWxsOnhzLnF1YWRyYW50NEZpbGwscXVhZHJhbnQxVGV4dEZpbGw6eHMucXVhZHJhbnQxVGV4dEZpbGwscXVhZHJhbnQyVGV4dEZpbGw6eHMucXVhZHJhbnQyVGV4dEZpbGwscXVhZHJhbnQzVGV4dEZpbGw6eHMucXVhZHJhbnQzVGV4dEZpbGwscXVhZHJhbnQ0VGV4dEZpbGw6eHMucXVhZHJhbnQ0VGV4dEZpbGwscXVhZHJhbnRQb2ludEZpbGw6eHMucXVhZHJhbnRQb2ludEZpbGwscXVhZHJhbnRQb2ludFRleHRGaWxsOnhzLnF1YWRyYW50UG9pbnRUZXh0RmlsbCxxdWFkcmFudFhBeGlzVGV4dEZpbGw6eHMucXVhZHJhbnRYQXhpc1RleHRGaWxsLHF1YWRyYW50WUF4aXNUZXh0RmlsbDp4cy5xdWFkcmFudFlBeGlzVGV4dEZpbGwscXVhZHJhbnRUaXRsZUZpbGw6eHMucXVhZHJhbnRUaXRsZUZpbGwscXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGw6eHMucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGwscXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGw6eHMucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGx9fWNsZWFyKCl7dGhpcy5jb25maWc9dGhpcy5nZXREZWZhdWx0Q29uZmlnKCksdGhpcy50aGVtZUNvbmZpZz10aGlzLmdldERlZmF1bHRUaGVtZUNvbmZpZygpLHRoaXMuZGF0YT10aGlzLmdldERlZmF1bHREYXRhKCksdGhpcy5jbGFzc2VzPW5ldyBNYXAsWC5pbmZvKCJjbGVhciBjYWxsZWQiKX1zZXREYXRhKGUpe3RoaXMuZGF0YT17Li4udGhpcy5kYXRhLC4uLmV9fWFkZFBvaW50cyhlKXt0aGlzLmRhdGEucG9pbnRzPVsuLi5lLC4uLnRoaXMuZGF0YS5wb2ludHNdfWFkZENsYXNzKGUscil7dGhpcy5jbGFzc2VzLnNldChlLHIpfXNldENvbmZpZyhlKXtYLnRyYWNlKCJzZXRDb25maWcgY2FsbGVkIHdpdGg6ICIsZSksdGhpcy5jb25maWc9ey4uLnRoaXMuY29uZmlnLC4uLmV9fXNldFRoZW1lQ29uZmlnKGUpe1gudHJhY2UoInNldFRoZW1lQ29uZmlnIGNhbGxlZCB3aXRoOiAiLGUpLHRoaXMudGhlbWVDb25maWc9ey4uLnRoaXMudGhlbWVDb25maWcsLi4uZX19Y2FsY3VsYXRlU3BhY2UoZSxyLG4saSl7bGV0IGE9dGhpcy5jb25maWcueEF4aXNMYWJlbFBhZGRpbmcqMit0aGlzLmNvbmZpZy54QXhpc0xhYmVsRm9udFNpemUscz17dG9wOmU9PT0idG9wIiYmcj9hOjAsYm90dG9tOmU9PT0iYm90dG9tIiYmcj9hOjB9LGw9dGhpcy5jb25maWcueUF4aXNMYWJlbFBhZGRpbmcqMit0aGlzLmNvbmZpZy55QXhpc0xhYmVsRm9udFNpemUsdT17bGVmdDp0aGlzLmNvbmZpZy55QXhpc1Bvc2l0aW9uPT09ImxlZnQiJiZuP2w6MCxyaWdodDp0aGlzLmNvbmZpZy55QXhpc1Bvc2l0aW9uPT09InJpZ2h0IiYmbj9sOjB9LGg9dGhpcy5jb25maWcudGl0bGVGb250U2l6ZSt0aGlzLmNvbmZpZy50aXRsZVBhZGRpbmcqMixmPXt0b3A6aT9oOjB9LGQ9dGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nK3UubGVmdCxwPXRoaXMuY29uZmlnLnF1YWRyYW50UGFkZGluZytzLnRvcCtmLnRvcCxtPXRoaXMuY29uZmlnLmNoYXJ0V2lkdGgtdGhpcy5jb25maWcucXVhZHJhbnRQYWRkaW5nKjItdS5sZWZ0LXUucmlnaHQsZz10aGlzLmNvbmZpZy5jaGFydEhlaWdodC10aGlzLmNvbmZpZy5xdWFkcmFudFBhZGRpbmcqMi1zLnRvcC1zLmJvdHRvbS1mLnRvcCx5PW0vMix2PWcvMjtyZXR1cm57eEF4aXNTcGFjZTpzLHlBeGlzU3BhY2U6dSx0aXRsZVNwYWNlOmYscXVhZHJhbnRTcGFjZTp7cXVhZHJhbnRMZWZ0OmQscXVhZHJhbnRUb3A6cCxxdWFkcmFudFdpZHRoOm0scXVhZHJhbnRIYWxmV2lkdGg6eSxxdWFkcmFudEhlaWdodDpnLHF1YWRyYW50SGFsZkhlaWdodDp2fX19Z2V0QXhpc0xhYmVscyhlLHIsbixpKXtsZXR7cXVhZHJhbnRTcGFjZTphLHRpdGxlU3BhY2U6c309aSx7cXVhZHJhbnRIYWxmSGVpZ2h0OmwscXVhZHJhbnRIZWlnaHQ6dSxxdWFkcmFudExlZnQ6aCxxdWFkcmFudEhhbGZXaWR0aDpmLHF1YWRyYW50VG9wOmQscXVhZHJhbnRXaWR0aDpwfT1hLG09ISF0aGlzLmRhdGEueEF4aXNSaWdodFRleHQsZz0hIXRoaXMuZGF0YS55QXhpc1RvcFRleHQseT1bXTtyZXR1cm4gdGhpcy5kYXRhLnhBeGlzTGVmdFRleHQmJnImJnkucHVzaCh7dGV4dDp0aGlzLmRhdGEueEF4aXNMZWZ0VGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRYQXhpc1RleHRGaWxsLHg6aCsobT9mLzI6MCkseTplPT09InRvcCI/dGhpcy5jb25maWcueEF4aXNMYWJlbFBhZGRpbmcrcy50b3A6dGhpcy5jb25maWcueEF4aXNMYWJlbFBhZGRpbmcrZCt1K3RoaXMuY29uZmlnLnF1YWRyYW50UGFkZGluZyxmb250U2l6ZTp0aGlzLmNvbmZpZy54QXhpc0xhYmVsRm9udFNpemUsdmVydGljYWxQb3M6bT8iY2VudGVyIjoibGVmdCIsaG9yaXpvbnRhbFBvczoidG9wIixyb3RhdGlvbjowfSksdGhpcy5kYXRhLnhBeGlzUmlnaHRUZXh0JiZyJiZ5LnB1c2goe3RleHQ6dGhpcy5kYXRhLnhBeGlzUmlnaHRUZXh0LGZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudFhBeGlzVGV4dEZpbGwseDpoK2YrKG0/Zi8yOjApLHk6ZT09PSJ0b3AiP3RoaXMuY29uZmlnLnhBeGlzTGFiZWxQYWRkaW5nK3MudG9wOnRoaXMuY29uZmlnLnhBeGlzTGFiZWxQYWRkaW5nK2QrdSt0aGlzLmNvbmZpZy5xdWFkcmFudFBhZGRpbmcsZm9udFNpemU6dGhpcy5jb25maWcueEF4aXNMYWJlbEZvbnRTaXplLHZlcnRpY2FsUG9zOm0/ImNlbnRlciI6ImxlZnQiLGhvcml6b250YWxQb3M6InRvcCIscm90YXRpb246MH0pLHRoaXMuZGF0YS55QXhpc0JvdHRvbVRleHQmJm4mJnkucHVzaCh7dGV4dDp0aGlzLmRhdGEueUF4aXNCb3R0b21UZXh0LGZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudFlBeGlzVGV4dEZpbGwseDp0aGlzLmNvbmZpZy55QXhpc1Bvc2l0aW9uPT09ImxlZnQiP3RoaXMuY29uZmlnLnlBeGlzTGFiZWxQYWRkaW5nOnRoaXMuY29uZmlnLnlBeGlzTGFiZWxQYWRkaW5nK2grcCt0aGlzLmNvbmZpZy5xdWFkcmFudFBhZGRpbmcseTpkK3UtKGc/bC8yOjApLGZvbnRTaXplOnRoaXMuY29uZmlnLnlBeGlzTGFiZWxGb250U2l6ZSx2ZXJ0aWNhbFBvczpnPyJjZW50ZXIiOiJsZWZ0Iixob3Jpem9udGFsUG9zOiJ0b3AiLHJvdGF0aW9uOi05MH0pLHRoaXMuZGF0YS55QXhpc1RvcFRleHQmJm4mJnkucHVzaCh7dGV4dDp0aGlzLmRhdGEueUF4aXNUb3BUZXh0LGZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudFlBeGlzVGV4dEZpbGwseDp0aGlzLmNvbmZpZy55QXhpc1Bvc2l0aW9uPT09ImxlZnQiP3RoaXMuY29uZmlnLnlBeGlzTGFiZWxQYWRkaW5nOnRoaXMuY29uZmlnLnlBeGlzTGFiZWxQYWRkaW5nK2grcCt0aGlzLmNvbmZpZy5xdWFkcmFudFBhZGRpbmcseTpkK2wtKGc/bC8yOjApLGZvbnRTaXplOnRoaXMuY29uZmlnLnlBeGlzTGFiZWxGb250U2l6ZSx2ZXJ0aWNhbFBvczpnPyJjZW50ZXIiOiJsZWZ0Iixob3Jpem9udGFsUG9zOiJ0b3AiLHJvdGF0aW9uOi05MH0pLHl9Z2V0UXVhZHJhbnRzKGUpe2xldHtxdWFkcmFudFNwYWNlOnJ9PWUse3F1YWRyYW50SGFsZkhlaWdodDpuLHF1YWRyYW50TGVmdDppLHF1YWRyYW50SGFsZldpZHRoOmEscXVhZHJhbnRUb3A6c309cixsPVt7dGV4dDp7dGV4dDp0aGlzLmRhdGEucXVhZHJhbnQxVGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnQxVGV4dEZpbGwseDowLHk6MCxmb250U2l6ZTp0aGlzLmNvbmZpZy5xdWFkcmFudExhYmVsRm9udFNpemUsdmVydGljYWxQb3M6ImNlbnRlciIsaG9yaXpvbnRhbFBvczoibWlkZGxlIixyb3RhdGlvbjowfSx4OmkrYSx5OnMsd2lkdGg6YSxoZWlnaHQ6bixmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnQxRmlsbH0se3RleHQ6e3RleHQ6dGhpcy5kYXRhLnF1YWRyYW50MlRleHQsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50MlRleHRGaWxsLHg6MCx5OjAsZm9udFNpemU6dGhpcy5jb25maWcucXVhZHJhbnRMYWJlbEZvbnRTaXplLHZlcnRpY2FsUG9zOiJjZW50ZXIiLGhvcml6b250YWxQb3M6Im1pZGRsZSIscm90YXRpb246MH0seDppLHk6cyx3aWR0aDphLGhlaWdodDpuLGZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudDJGaWxsfSx7dGV4dDp7dGV4dDp0aGlzLmRhdGEucXVhZHJhbnQzVGV4dCxmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnQzVGV4dEZpbGwseDowLHk6MCxmb250U2l6ZTp0aGlzLmNvbmZpZy5xdWFkcmFudExhYmVsRm9udFNpemUsdmVydGljYWxQb3M6ImNlbnRlciIsaG9yaXpvbnRhbFBvczoibWlkZGxlIixyb3RhdGlvbjowfSx4OmkseTpzK24sd2lkdGg6YSxoZWlnaHQ6bixmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnQzRmlsbH0se3RleHQ6e3RleHQ6dGhpcy5kYXRhLnF1YWRyYW50NFRleHQsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50NFRleHRGaWxsLHg6MCx5OjAsZm9udFNpemU6dGhpcy5jb25maWcucXVhZHJhbnRMYWJlbEZvbnRTaXplLHZlcnRpY2FsUG9zOiJjZW50ZXIiLGhvcml6b250YWxQb3M6Im1pZGRsZSIscm90YXRpb246MH0seDppK2EseTpzK24sd2lkdGg6YSxoZWlnaHQ6bixmaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnQ0RmlsbH1dO2ZvcihsZXQgdSBvZiBsKXUudGV4dC54PXUueCt1LndpZHRoLzIsdGhpcy5kYXRhLnBvaW50cy5sZW5ndGg9PT0wPyh1LnRleHQueT11LnkrdS5oZWlnaHQvMix1LnRleHQuaG9yaXpvbnRhbFBvcz0ibWlkZGxlIik6KHUudGV4dC55PXUueSt0aGlzLmNvbmZpZy5xdWFkcmFudFRleHRUb3BQYWRkaW5nLHUudGV4dC5ob3Jpem9udGFsUG9zPSJ0b3AiKTtyZXR1cm4gbH1nZXRRdWFkcmFudFBvaW50cyhlKXtsZXR7cXVhZHJhbnRTcGFjZTpyfT1lLHtxdWFkcmFudEhlaWdodDpuLHF1YWRyYW50TGVmdDppLHF1YWRyYW50VG9wOmEscXVhZHJhbnRXaWR0aDpzfT1yLGw9VGwoKS5kb21haW4oWzAsMV0pLnJhbmdlKFtpLHMraV0pLHU9VGwoKS5kb21haW4oWzAsMV0pLnJhbmdlKFtuK2EsYV0pO3JldHVybiB0aGlzLmRhdGEucG9pbnRzLm1hcChmPT57bGV0IGQ9dGhpcy5jbGFzc2VzLmdldChmLmNsYXNzTmFtZSk7cmV0dXJuIGQmJihmPXsuLi5kLC4uLmZ9KSx7eDpsKGYueCkseTp1KGYueSksZmlsbDpmLmNvbG9yPz90aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50UG9pbnRGaWxsLHJhZGl1czpmLnJhZGl1cz8/dGhpcy5jb25maWcucG9pbnRSYWRpdXMsdGV4dDp7dGV4dDpmLnRleHQsZmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50UG9pbnRUZXh0RmlsbCx4OmwoZi54KSx5OnUoZi55KSt0aGlzLmNvbmZpZy5wb2ludFRleHRQYWRkaW5nLHZlcnRpY2FsUG9zOiJjZW50ZXIiLGhvcml6b250YWxQb3M6InRvcCIsZm9udFNpemU6dGhpcy5jb25maWcucG9pbnRMYWJlbEZvbnRTaXplLHJvdGF0aW9uOjB9LHN0cm9rZUNvbG9yOmYuc3Ryb2tlQ29sb3I/P3RoaXMudGhlbWVDb25maWcucXVhZHJhbnRQb2ludEZpbGwsc3Ryb2tlV2lkdGg6Zi5zdHJva2VXaWR0aD8/IjBweCJ9fSl9Z2V0Qm9yZGVycyhlKXtsZXQgcj10aGlzLmNvbmZpZy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlV2lkdGgvMix7cXVhZHJhbnRTcGFjZTpufT1lLHtxdWFkcmFudEhhbGZIZWlnaHQ6aSxxdWFkcmFudEhlaWdodDphLHF1YWRyYW50TGVmdDpzLHF1YWRyYW50SGFsZldpZHRoOmwscXVhZHJhbnRUb3A6dSxxdWFkcmFudFdpZHRoOmh9PW47cmV0dXJuW3tzdHJva2VGaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGwsc3Ryb2tlV2lkdGg6dGhpcy5jb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZVdpZHRoLHgxOnMtcix5MTp1LHgyOnMraCtyLHkyOnV9LHtzdHJva2VGaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGwsc3Ryb2tlV2lkdGg6dGhpcy5jb25maWcucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZVdpZHRoLHgxOnMraCx5MTp1K3IseDI6cytoLHkyOnUrYS1yfSx7c3Ryb2tlRmlsbDp0aGlzLnRoZW1lQ29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsLHN0cm9rZVdpZHRoOnRoaXMuY29uZmlnLnF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VXaWR0aCx4MTpzLXIseTE6dSthLHgyOnMraCtyLHkyOnUrYX0se3N0cm9rZUZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlRmlsbCxzdHJva2VXaWR0aDp0aGlzLmNvbmZpZy5xdWFkcmFudEV4dGVybmFsQm9yZGVyU3Ryb2tlV2lkdGgseDE6cyx5MTp1K3IseDI6cyx5Mjp1K2Etcn0se3N0cm9rZUZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbCxzdHJva2VXaWR0aDp0aGlzLmNvbmZpZy5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlV2lkdGgseDE6cytsLHkxOnUrcix4MjpzK2wseTI6dSthLXJ9LHtzdHJva2VGaWxsOnRoaXMudGhlbWVDb25maWcucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGwsc3Ryb2tlV2lkdGg6dGhpcy5jb25maWcucXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZVdpZHRoLHgxOnMrcix5MTp1K2kseDI6cytoLXIseTI6dStpfV19Z2V0VGl0bGUoZSl7aWYoZSlyZXR1cm57dGV4dDp0aGlzLmRhdGEudGl0bGVUZXh0LGZpbGw6dGhpcy50aGVtZUNvbmZpZy5xdWFkcmFudFRpdGxlRmlsbCxmb250U2l6ZTp0aGlzLmNvbmZpZy50aXRsZUZvbnRTaXplLGhvcml6b250YWxQb3M6InRvcCIsdmVydGljYWxQb3M6ImNlbnRlciIscm90YXRpb246MCx5OnRoaXMuY29uZmlnLnRpdGxlUGFkZGluZyx4OnRoaXMuY29uZmlnLmNoYXJ0V2lkdGgvMn19YnVpbGQoKXtsZXQgZT10aGlzLmNvbmZpZy5zaG93WEF4aXMmJiEhKHRoaXMuZGF0YS54QXhpc0xlZnRUZXh0fHx0aGlzLmRhdGEueEF4aXNSaWdodFRleHQpLHI9dGhpcy5jb25maWcuc2hvd1lBeGlzJiYhISh0aGlzLmRhdGEueUF4aXNUb3BUZXh0fHx0aGlzLmRhdGEueUF4aXNCb3R0b21UZXh0KSxuPXRoaXMuY29uZmlnLnNob3dUaXRsZSYmISF0aGlzLmRhdGEudGl0bGVUZXh0LGk9dGhpcy5kYXRhLnBvaW50cy5sZW5ndGg+MD8iYm90dG9tIjp0aGlzLmNvbmZpZy54QXhpc1Bvc2l0aW9uLGE9dGhpcy5jYWxjdWxhdGVTcGFjZShpLGUscixuKTtyZXR1cm57cG9pbnRzOnRoaXMuZ2V0UXVhZHJhbnRQb2ludHMoYSkscXVhZHJhbnRzOnRoaXMuZ2V0UXVhZHJhbnRzKGEpLGF4aXNMYWJlbHM6dGhpcy5nZXRBeGlzTGFiZWxzKGksZSxyLGEpLGJvcmRlckxpbmVzOnRoaXMuZ2V0Qm9yZGVycyhhKSx0aXRsZTp0aGlzLmdldFRpdGxlKG4pfX19fSk7ZnVuY3Rpb24gSk8odCl7cmV0dXJuIS9eIz8oW1xkQS1GYS1mXXs2fXxbXGRBLUZhLWZdezN9KSQvLnRlc3QodCl9ZnVuY3Rpb24gTWZlKHQpe3JldHVybiEvXlxkKyQvLnRlc3QodCl9ZnVuY3Rpb24gSWZlKHQpe3JldHVybiEvXlxkK3B4JC8udGVzdCh0KX12YXIgQnAsT2ZlPU4oKCk9PnsidXNlIHN0cmljdCI7QnA9Y2xhc3MgZXh0ZW5kcyBFcnJvcntzdGF0aWN7byh0aGlzLCJJbnZhbGlkU3R5bGVFcnJvciIpfWNvbnN0cnVjdG9yKGUscixuKXtzdXBlcihgdmFsdWUgZm9yICR7ZX0gJHtyfSBpcyBpbnZhbGlkLCBwbGVhc2UgdXNlIGEgdmFsaWQgJHtufWApLHRoaXMubmFtZT0iSW52YWxpZFN0eWxlRXJyb3IifX07byhKTywidmFsaWRhdGVIZXhDb2RlIik7byhNZmUsInZhbGlkYXRlTnVtYmVyIik7byhJZmUsInZhbGlkYXRlU2l6ZUluUGl4ZWxzIil9KTtmdW5jdGlvbiBlaCh0KXtyZXR1cm4gd3IodC50cmltKCksWVZlKX1mdW5jdGlvbiBYVmUodCl7d2Euc2V0RGF0YSh7cXVhZHJhbnQxVGV4dDplaCh0LnRleHQpfSl9ZnVuY3Rpb24galZlKHQpe3dhLnNldERhdGEoe3F1YWRyYW50MlRleHQ6ZWgodC50ZXh0KX0pfWZ1bmN0aW9uIEtWZSh0KXt3YS5zZXREYXRhKHtxdWFkcmFudDNUZXh0OmVoKHQudGV4dCl9KX1mdW5jdGlvbiBRVmUodCl7d2Euc2V0RGF0YSh7cXVhZHJhbnQ0VGV4dDplaCh0LnRleHQpfSl9ZnVuY3Rpb24gWlZlKHQpe3dhLnNldERhdGEoe3hBeGlzTGVmdFRleHQ6ZWgodC50ZXh0KX0pfWZ1bmN0aW9uIEpWZSh0KXt3YS5zZXREYXRhKHt4QXhpc1JpZ2h0VGV4dDplaCh0LnRleHQpfSl9ZnVuY3Rpb24gZVVlKHQpe3dhLnNldERhdGEoe3lBeGlzVG9wVGV4dDplaCh0LnRleHQpfSl9ZnVuY3Rpb24gdFVlKHQpe3dhLnNldERhdGEoe3lBeGlzQm90dG9tVGV4dDplaCh0LnRleHQpfSl9ZnVuY3Rpb24gZVAodCl7bGV0IGU9e307Zm9yKGxldCByIG9mIHQpe2xldFtuLGldPXIudHJpbSgpLnNwbGl0KC9ccyo6XHMqLyk7aWYobj09PSJyYWRpdXMiKXtpZihNZmUoaSkpdGhyb3cgbmV3IEJwKG4saSwibnVtYmVyIik7ZS5yYWRpdXM9cGFyc2VJbnQoaSl9ZWxzZSBpZihuPT09ImNvbG9yIil7aWYoSk8oaSkpdGhyb3cgbmV3IEJwKG4saSwiaGV4IGNvZGUiKTtlLmNvbG9yPWl9ZWxzZSBpZihuPT09InN0cm9rZS1jb2xvciIpe2lmKEpPKGkpKXRocm93IG5ldyBCcChuLGksImhleCBjb2RlIik7ZS5zdHJva2VDb2xvcj1pfWVsc2UgaWYobj09PSJzdHJva2Utd2lkdGgiKXtpZihJZmUoaSkpdGhyb3cgbmV3IEJwKG4saSwibnVtYmVyIG9mIHBpeGVscyAoZWcuIDEwcHgpIik7ZS5zdHJva2VXaWR0aD1pfWVsc2UgdGhyb3cgbmV3IEVycm9yKGBzdHlsZSBuYW1lZCAke259IGlzIG5vdCBzdXBwb3J0ZWQuYCl9cmV0dXJuIGV9ZnVuY3Rpb24gclVlKHQsZSxyLG4saSl7bGV0IGE9ZVAoaSk7d2EuYWRkUG9pbnRzKFt7eDpyLHk6bix0ZXh0OmVoKHQudGV4dCksY2xhc3NOYW1lOmUsLi4uYX1dKX1mdW5jdGlvbiBuVWUodCxlKXt3YS5hZGRDbGFzcyh0LGVQKGUpKX1mdW5jdGlvbiBpVWUodCl7d2Euc2V0Q29uZmlnKHtjaGFydFdpZHRoOnR9KX1mdW5jdGlvbiBhVWUodCl7d2Euc2V0Q29uZmlnKHtjaGFydEhlaWdodDp0fSl9ZnVuY3Rpb24gc1VlKCl7bGV0IHQ9bWUoKSx7dGhlbWVWYXJpYWJsZXM6ZSxxdWFkcmFudENoYXJ0OnJ9PXQ7cmV0dXJuIHImJndhLnNldENvbmZpZyhyKSx3YS5zZXRUaGVtZUNvbmZpZyh7cXVhZHJhbnQxRmlsbDplLnF1YWRyYW50MUZpbGwscXVhZHJhbnQyRmlsbDplLnF1YWRyYW50MkZpbGwscXVhZHJhbnQzRmlsbDplLnF1YWRyYW50M0ZpbGwscXVhZHJhbnQ0RmlsbDplLnF1YWRyYW50NEZpbGwscXVhZHJhbnQxVGV4dEZpbGw6ZS5xdWFkcmFudDFUZXh0RmlsbCxxdWFkcmFudDJUZXh0RmlsbDplLnF1YWRyYW50MlRleHRGaWxsLHF1YWRyYW50M1RleHRGaWxsOmUucXVhZHJhbnQzVGV4dEZpbGwscXVhZHJhbnQ0VGV4dEZpbGw6ZS5xdWFkcmFudDRUZXh0RmlsbCxxdWFkcmFudFBvaW50RmlsbDplLnF1YWRyYW50UG9pbnRGaWxsLHF1YWRyYW50UG9pbnRUZXh0RmlsbDplLnF1YWRyYW50UG9pbnRUZXh0RmlsbCxxdWFkcmFudFhBeGlzVGV4dEZpbGw6ZS5xdWFkcmFudFhBeGlzVGV4dEZpbGwscXVhZHJhbnRZQXhpc1RleHRGaWxsOmUucXVhZHJhbnRZQXhpc1RleHRGaWxsLHF1YWRyYW50RXh0ZXJuYWxCb3JkZXJTdHJva2VGaWxsOmUucXVhZHJhbnRFeHRlcm5hbEJvcmRlclN0cm9rZUZpbGwscXVhZHJhbnRJbnRlcm5hbEJvcmRlclN0cm9rZUZpbGw6ZS5xdWFkcmFudEludGVybmFsQm9yZGVyU3Ryb2tlRmlsbCxxdWFkcmFudFRpdGxlRmlsbDplLnF1YWRyYW50VGl0bGVGaWxsfSksd2Euc2V0RGF0YSh7dGl0bGVUZXh0Ok5yKCl9KSx3YS5idWlsZCgpfXZhciBZVmUsd2Esb1VlLFBmZSxCZmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtHdCgpO3ByKCk7Y2koKTtOZmUoKTtPZmUoKTtZVmU9bWUoKTtvKGVoLCJ0ZXh0U2FuaXRpemVyIik7d2E9bmV3IFBTO28oWFZlLCJzZXRRdWFkcmFudDFUZXh0Iik7byhqVmUsInNldFF1YWRyYW50MlRleHQiKTtvKEtWZSwic2V0UXVhZHJhbnQzVGV4dCIpO28oUVZlLCJzZXRRdWFkcmFudDRUZXh0Iik7byhaVmUsInNldFhBeGlzTGVmdFRleHQiKTtvKEpWZSwic2V0WEF4aXNSaWdodFRleHQiKTtvKGVVZSwic2V0WUF4aXNUb3BUZXh0Iik7byh0VWUsInNldFlBeGlzQm90dG9tVGV4dCIpO28oZVAsInBhcnNlU3R5bGVzIik7byhyVWUsImFkZFBvaW50Iik7byhuVWUsImFkZENsYXNzIik7byhpVWUsInNldFdpZHRoIik7byhhVWUsInNldEhlaWdodCIpO28oc1VlLCJnZXRRdWFkcmFudERhdGEiKTtvVWU9byhmdW5jdGlvbigpe3dhLmNsZWFyKCksa3IoKX0sImNsZWFyIiksUGZlPXtzZXRXaWR0aDppVWUsc2V0SGVpZ2h0OmFVZSxzZXRRdWFkcmFudDFUZXh0OlhWZSxzZXRRdWFkcmFudDJUZXh0OmpWZSxzZXRRdWFkcmFudDNUZXh0OktWZSxzZXRRdWFkcmFudDRUZXh0OlFWZSxzZXRYQXhpc0xlZnRUZXh0OlpWZSxzZXRYQXhpc1JpZ2h0VGV4dDpKVmUsc2V0WUF4aXNUb3BUZXh0OmVVZSxzZXRZQXhpc0JvdHRvbVRleHQ6dFVlLHBhcnNlU3R5bGVzOmVQLGFkZFBvaW50OnJVZSxhZGRDbGFzczpuVWUsZ2V0UXVhZHJhbnREYXRhOnNVZSxjbGVhcjpvVWUsc2V0QWNjVGl0bGU6QXIsZ2V0QWNjVGl0bGU6RHIsc2V0RGlhZ3JhbVRpdGxlOk9yLGdldERpYWdyYW1UaXRsZTpOcixnZXRBY2NEZXNjcmlwdGlvbjpScixzZXRBY2NEZXNjcmlwdGlvbjpMcn19KTt2YXIgbFVlLEZmZSwkZmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtmcigpO0d0KCk7eXQoKTt4aSgpO2xVZT1vKCh0LGUscixuKT0+e2Z1bmN0aW9uIGkoQyl7cmV0dXJuIEM9PT0idG9wIj8iaGFuZ2luZyI6Im1pZGRsZSJ9byhpLCJnZXREb21pbmFudEJhc2VMaW5lIik7ZnVuY3Rpb24gYShDKXtyZXR1cm4gQz09PSJsZWZ0Ij8ic3RhcnQiOiJtaWRkbGUifW8oYSwiZ2V0VGV4dEFuY2hvciIpO2Z1bmN0aW9uIHMoQyl7cmV0dXJuYHRyYW5zbGF0ZSgke0MueH0sICR7Qy55fSkgcm90YXRlKCR7Qy5yb3RhdGlvbnx8MH0pYH1vKHMsImdldFRyYW5zZm9ybWF0aW9uIik7bGV0IGw9bWUoKTtYLmRlYnVnKGBSZW5kZXJpbmcgcXVhZHJhbnQgY2hhcnQKYCt0KTtsZXQgdT1sLnNlY3VyaXR5TGV2ZWwsaDt1PT09InNhbmRib3giJiYoaD1HZSgiI2kiK2UpKTtsZXQgZD0odT09PSJzYW5kYm94Ij9HZShoLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpOkdlKCJib2R5IikpLnNlbGVjdChgW2lkPSIke2V9Il1gKSxwPWQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJtYWluIiksbT1sLnF1YWRyYW50Q2hhcnQ/LmNoYXJ0V2lkdGg/PzUwMCxnPWwucXVhZHJhbnRDaGFydD8uY2hhcnRIZWlnaHQ/PzUwMDtmbihkLGcsbSxsLnF1YWRyYW50Q2hhcnQ/LnVzZU1heFdpZHRoPz8hMCksZC5hdHRyKCJ2aWV3Qm94IiwiMCAwICIrbSsiICIrZyksbi5kYi5zZXRIZWlnaHQoZyksbi5kYi5zZXRXaWR0aChtKTtsZXQgeT1uLmRiLmdldFF1YWRyYW50RGF0YSgpLHY9cC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInF1YWRyYW50cyIpLHg9cC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImJvcmRlciIpLGI9cC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImRhdGEtcG9pbnRzIiksVD1wLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWxzIiksUz1wLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidGl0bGUiKTt5LnRpdGxlJiZTLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dHIoImZpbGwiLHkudGl0bGUuZmlsbCkuYXR0cigiZm9udC1zaXplIix5LnRpdGxlLmZvbnRTaXplKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsaSh5LnRpdGxlLmhvcml6b250YWxQb3MpKS5hdHRyKCJ0ZXh0LWFuY2hvciIsYSh5LnRpdGxlLnZlcnRpY2FsUG9zKSkuYXR0cigidHJhbnNmb3JtIixzKHkudGl0bGUpKS50ZXh0KHkudGl0bGUudGV4dCkseS5ib3JkZXJMaW5lcyYmeC5zZWxlY3RBbGwoImxpbmUiKS5kYXRhKHkuYm9yZGVyTGluZXMpLmVudGVyKCkuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLEM9PkMueDEpLmF0dHIoInkxIixDPT5DLnkxKS5hdHRyKCJ4MiIsQz0+Qy54MikuYXR0cigieTIiLEM9PkMueTIpLnN0eWxlKCJzdHJva2UiLEM9PkMuc3Ryb2tlRmlsbCkuc3R5bGUoInN0cm9rZS13aWR0aCIsQz0+Qy5zdHJva2VXaWR0aCk7bGV0IHc9di5zZWxlY3RBbGwoImcucXVhZHJhbnQiKS5kYXRhKHkucXVhZHJhbnRzKS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwicXVhZHJhbnQiKTt3LmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLEM9PkMueCkuYXR0cigieSIsQz0+Qy55KS5hdHRyKCJ3aWR0aCIsQz0+Qy53aWR0aCkuYXR0cigiaGVpZ2h0IixDPT5DLmhlaWdodCkuYXR0cigiZmlsbCIsQz0+Qy5maWxsKSx3LmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dHIoImZpbGwiLEM9PkMudGV4dC5maWxsKS5hdHRyKCJmb250LXNpemUiLEM9PkMudGV4dC5mb250U2l6ZSkuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLEM9PmkoQy50ZXh0Lmhvcml6b250YWxQb3MpKS5hdHRyKCJ0ZXh0LWFuY2hvciIsQz0+YShDLnRleHQudmVydGljYWxQb3MpKS5hdHRyKCJ0cmFuc2Zvcm0iLEM9PnMoQy50ZXh0KSkudGV4dChDPT5DLnRleHQudGV4dCksVC5zZWxlY3RBbGwoImcubGFiZWwiKS5kYXRhKHkuYXhpc0xhYmVscykuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMCkuYXR0cigieSIsMCkudGV4dChDPT5DLnRleHQpLmF0dHIoImZpbGwiLEM9PkMuZmlsbCkuYXR0cigiZm9udC1zaXplIixDPT5DLmZvbnRTaXplKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsQz0+aShDLmhvcml6b250YWxQb3MpKS5hdHRyKCJ0ZXh0LWFuY2hvciIsQz0+YShDLnZlcnRpY2FsUG9zKSkuYXR0cigidHJhbnNmb3JtIixDPT5zKEMpKTtsZXQgXz1iLnNlbGVjdEFsbCgiZy5kYXRhLXBvaW50IikuZGF0YSh5LnBvaW50cykuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImRhdGEtcG9pbnQiKTtfLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLEM9PkMueCkuYXR0cigiY3kiLEM9PkMueSkuYXR0cigiciIsQz0+Qy5yYWRpdXMpLmF0dHIoImZpbGwiLEM9PkMuZmlsbCkuYXR0cigic3Ryb2tlIixDPT5DLnN0cm9rZUNvbG9yKS5hdHRyKCJzdHJva2Utd2lkdGgiLEM9PkMuc3Ryb2tlV2lkdGgpLF8uYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMCkuYXR0cigieSIsMCkudGV4dChDPT5DLnRleHQudGV4dCkuYXR0cigiZmlsbCIsQz0+Qy50ZXh0LmZpbGwpLmF0dHIoImZvbnQtc2l6ZSIsQz0+Qy50ZXh0LmZvbnRTaXplKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsQz0+aShDLnRleHQuaG9yaXpvbnRhbFBvcykpLmF0dHIoInRleHQtYW5jaG9yIixDPT5hKEMudGV4dC52ZXJ0aWNhbFBvcykpLmF0dHIoInRyYW5zZm9ybSIsQz0+cyhDLnRleHQpKX0sImRyYXciKSxGZmU9e2RyYXc6bFVlfX0pO3ZhciB6ZmU9e307dXIoemZlLHtkaWFncmFtOigpPT5jVWV9KTt2YXIgY1VlLEdmZT1OKCgpPT57InVzZSBzdHJpY3QiO1JmZSgpO0JmZSgpOyRmZSgpO2NVZT17cGFyc2VyOkxmZSxkYjpQZmUscmVuZGVyZXI6RmZlLHN0eWxlczpvKCgpPT4iIiwic3R5bGVzIil9fSk7dmFyIHRQLEhmZSxXZmU9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt0UD1mdW5jdGlvbigpe3ZhciB0PW8oZnVuY3Rpb24oSSxNLFAsQil7Zm9yKFA9UHx8e30sQj1JLmxlbmd0aDtCLS07UFtJW0JdXT1NKTtyZXR1cm4gUH0sIm8iKSxlPVsxLDEwLDEyLDE0LDE2LDE4LDE5LDIxLDIzXSxyPVsyLDZdLG49WzEsM10saT1bMSw1XSxhPVsxLDZdLHM9WzEsN10sbD1bMSw1LDEwLDEyLDE0LDE2LDE4LDE5LDIxLDIzLDM0LDM1LDM2XSx1PVsxLDI1XSxoPVsxLDI2XSxmPVsxLDI4XSxkPVsxLDI5XSxwPVsxLDMwXSxtPVsxLDMxXSxnPVsxLDMyXSx5PVsxLDMzXSx2PVsxLDM0XSx4PVsxLDM1XSxiPVsxLDM2XSxUPVsxLDM3XSxTPVsxLDQzXSx3PVsxLDQyXSxFPVsxLDQ3XSxfPVsxLDUwXSxDPVsxLDEwLDEyLDE0LDE2LDE4LDE5LDIxLDIzLDM0LDM1LDM2XSxEPVsxLDEwLDEyLDE0LDE2LDE4LDE5LDIxLDIzLDI0LDI2LDI3LDI4LDM0LDM1LDM2XSxPPVsxLDEwLDEyLDE0LDE2LDE4LDE5LDIxLDIzLDI0LDI2LDI3LDI4LDM0LDM1LDM2LDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwXSxSPVsxLDY0XSxrPXt0cmFjZTpvKGZ1bmN0aW9uKCl7fSwidHJhY2UiKSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGVvbDo0LFhZQ0hBUlQ6NSxjaGFydENvbmZpZzo2LGRvY3VtZW50OjcsQ0hBUlRfT1JJRU5UQVRJT046OCxzdGF0ZW1lbnQ6OSx0aXRsZToxMCx0ZXh0OjExLFhfQVhJUzoxMixwYXJzZVhBeGlzOjEzLFlfQVhJUzoxNCxwYXJzZVlBeGlzOjE1LExJTkU6MTYscGxvdERhdGE6MTcsQkFSOjE4LGFjY190aXRsZToxOSxhY2NfdGl0bGVfdmFsdWU6MjAsYWNjX2Rlc2NyOjIxLGFjY19kZXNjcl92YWx1ZToyMixhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjIzLFNRVUFSRV9CUkFDRVNfU1RBUlQ6MjQsY29tbWFTZXBhcmF0ZWROdW1iZXJzOjI1LFNRVUFSRV9CUkFDRVNfRU5EOjI2LE5VTUJFUl9XSVRIX0RFQ0lNQUw6MjcsQ09NTUE6MjgseEF4aXNEYXRhOjI5LGJhbmREYXRhOjMwLEFSUk9XX0RFTElNSVRFUjozMSxjb21tYVNlcGFyYXRlZFRleHRzOjMyLHlBeGlzRGF0YTozMyxORVdMSU5FOjM0LFNFTUk6MzUsRU9GOjM2LGFscGhhTnVtOjM3LFNUUjozOCxNRF9TVFI6MzksYWxwaGFOdW1Ub2tlbjo0MCxBTVA6NDEsTlVNOjQyLEFMUEhBOjQzLFBMVVM6NDQsRVFVQUxTOjQ1LE1VTFQ6NDYsRE9UOjQ3LEJSS1Q6NDgsTUlOVVM6NDksVU5ERVJTQ09SRTo1MCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNToiWFlDSEFSVCIsODoiQ0hBUlRfT1JJRU5UQVRJT04iLDEwOiJ0aXRsZSIsMTI6IlhfQVhJUyIsMTQ6IllfQVhJUyIsMTY6IkxJTkUiLDE4OiJCQVIiLDE5OiJhY2NfdGl0bGUiLDIwOiJhY2NfdGl0bGVfdmFsdWUiLDIxOiJhY2NfZGVzY3IiLDIyOiJhY2NfZGVzY3JfdmFsdWUiLDIzOiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwyNDoiU1FVQVJFX0JSQUNFU19TVEFSVCIsMjY6IlNRVUFSRV9CUkFDRVNfRU5EIiwyNzoiTlVNQkVSX1dJVEhfREVDSU1BTCIsMjg6IkNPTU1BIiwzMToiQVJST1dfREVMSU1JVEVSIiwzNDoiTkVXTElORSIsMzU6IlNFTUkiLDM2OiJFT0YiLDM4OiJTVFIiLDM5OiJNRF9TVFIiLDQxOiJBTVAiLDQyOiJOVU0iLDQzOiJBTFBIQSIsNDQ6IlBMVVMiLDQ1OiJFUVVBTFMiLDQ2OiJNVUxUIiw0NzoiRE9UIiw0ODoiQlJLVCIsNDk6Ik1JTlVTIiw1MDoiVU5ERVJTQ09SRSJ9LHByb2R1Y3Rpb25zXzpbMCxbMywyXSxbMywzXSxbMywyXSxbMywxXSxbNiwxXSxbNywwXSxbNywyXSxbOSwyXSxbOSwyXSxbOSwyXSxbOSwyXSxbOSwyXSxbOSwzXSxbOSwyXSxbOSwzXSxbOSwyXSxbOSwyXSxbOSwxXSxbMTcsM10sWzI1LDNdLFsyNSwxXSxbMTMsMV0sWzEzLDJdLFsxMywxXSxbMjksMV0sWzI5LDNdLFszMCwzXSxbMzIsM10sWzMyLDFdLFsxNSwxXSxbMTUsMl0sWzE1LDFdLFszMywzXSxbNCwxXSxbNCwxXSxbNCwxXSxbMTEsMV0sWzExLDFdLFsxMSwxXSxbMzcsMV0sWzM3LDJdLFs0MCwxXSxbNDAsMV0sWzQwLDFdLFs0MCwxXSxbNDAsMV0sWzQwLDFdLFs0MCwxXSxbNDAsMV0sWzQwLDFdLFs0MCwxXV0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKE0sUCxCLEYseiwkLFUpe3ZhciBLPSQubGVuZ3RoLTE7c3dpdGNoKHope2Nhc2UgNTpGLnNldE9yaWVudGF0aW9uKCRbS10pO2JyZWFrO2Nhc2UgOTpGLnNldERpYWdyYW1UaXRsZSgkW0tdLnRleHQudHJpbSgpKTticmVhaztjYXNlIDEyOkYuc2V0TGluZURhdGEoe3RleHQ6IiIsdHlwZToidGV4dCJ9LCRbS10pO2JyZWFrO2Nhc2UgMTM6Ri5zZXRMaW5lRGF0YSgkW0stMV0sJFtLXSk7YnJlYWs7Y2FzZSAxNDpGLnNldEJhckRhdGEoe3RleHQ6IiIsdHlwZToidGV4dCJ9LCRbS10pO2JyZWFrO2Nhc2UgMTU6Ri5zZXRCYXJEYXRhKCRbSy0xXSwkW0tdKTticmVhaztjYXNlIDE2OnRoaXMuJD0kW0tdLnRyaW0oKSxGLnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAxNzpjYXNlIDE4OnRoaXMuJD0kW0tdLnRyaW0oKSxGLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAxOTp0aGlzLiQ9JFtLLTFdO2JyZWFrO2Nhc2UgMjA6dGhpcy4kPVtOdW1iZXIoJFtLLTJdKSwuLi4kW0tdXTticmVhaztjYXNlIDIxOnRoaXMuJD1bTnVtYmVyKCRbS10pXTticmVhaztjYXNlIDIyOkYuc2V0WEF4aXNUaXRsZSgkW0tdKTticmVhaztjYXNlIDIzOkYuc2V0WEF4aXNUaXRsZSgkW0stMV0pO2JyZWFrO2Nhc2UgMjQ6Ri5zZXRYQXhpc1RpdGxlKHt0eXBlOiJ0ZXh0Iix0ZXh0OiIifSk7YnJlYWs7Y2FzZSAyNTpGLnNldFhBeGlzQmFuZCgkW0tdKTticmVhaztjYXNlIDI2OkYuc2V0WEF4aXNSYW5nZURhdGEoTnVtYmVyKCRbSy0yXSksTnVtYmVyKCRbS10pKTticmVhaztjYXNlIDI3OnRoaXMuJD0kW0stMV07YnJlYWs7Y2FzZSAyODp0aGlzLiQ9WyRbSy0yXSwuLi4kW0tdXTticmVhaztjYXNlIDI5OnRoaXMuJD1bJFtLXV07YnJlYWs7Y2FzZSAzMDpGLnNldFlBeGlzVGl0bGUoJFtLXSk7YnJlYWs7Y2FzZSAzMTpGLnNldFlBeGlzVGl0bGUoJFtLLTFdKTticmVhaztjYXNlIDMyOkYuc2V0WUF4aXNUaXRsZSh7dHlwZToidGV4dCIsdGV4dDoiIn0pO2JyZWFrO2Nhc2UgMzM6Ri5zZXRZQXhpc1JhbmdlRGF0YShOdW1iZXIoJFtLLTJdKSxOdW1iZXIoJFtLXSkpO2JyZWFrO2Nhc2UgMzc6dGhpcy4kPXt0ZXh0OiRbS10sdHlwZToidGV4dCJ9O2JyZWFrO2Nhc2UgMzg6dGhpcy4kPXt0ZXh0OiRbS10sdHlwZToidGV4dCJ9O2JyZWFrO2Nhc2UgMzk6dGhpcy4kPXt0ZXh0OiRbS10sdHlwZToibWFya2Rvd24ifTticmVhaztjYXNlIDQwOnRoaXMuJD0kW0tdO2JyZWFrO2Nhc2UgNDE6dGhpcy4kPSRbSy0xXSsiIiskW0tdO2JyZWFrfX0sImFub255bW91cyIpLHRhYmxlOlt0KGUscix7MzoxLDQ6Miw3OjQsNTpuLDM0OmksMzU6YSwzNjpzfSksezE6WzNdfSx0KGUscix7NDoyLDc6NCwzOjgsNTpuLDM0OmksMzU6YSwzNjpzfSksdChlLHIsezQ6Miw3OjQsNjo5LDM6MTAsNTpuLDg6WzEsMTFdLDM0OmksMzU6YSwzNjpzfSksezE6WzIsNF0sOToxMiwxMDpbMSwxM10sMTI6WzEsMTRdLDE0OlsxLDE1XSwxNjpbMSwxNl0sMTg6WzEsMTddLDE5OlsxLDE4XSwyMTpbMSwxOV0sMjM6WzEsMjBdfSx0KGwsWzIsMzRdKSx0KGwsWzIsMzVdKSx0KGwsWzIsMzZdKSx7MTpbMiwxXX0sdChlLHIsezQ6Miw3OjQsMzoyMSw1Om4sMzQ6aSwzNTphLDM2OnN9KSx7MTpbMiwzXX0sdChsLFsyLDVdKSx0KGUsWzIsN10sezQ6MjIsMzQ6aSwzNTphLDM2OnN9KSx7MTE6MjMsMzc6MjQsMzg6dSwzOTpoLDQwOjI3LDQxOmYsNDI6ZCw0MzpwLDQ0Om0sNDU6Zyw0Njp5LDQ3OnYsNDg6eCw0OTpiLDUwOlR9LHsxMTozOSwxMzozOCwyNDpTLDI3OncsMjk6NDAsMzA6NDEsMzc6MjQsMzg6dSwzOTpoLDQwOjI3LDQxOmYsNDI6ZCw0MzpwLDQ0Om0sNDU6Zyw0Njp5LDQ3OnYsNDg6eCw0OTpiLDUwOlR9LHsxMTo0NSwxNTo0NCwyNzpFLDMzOjQ2LDM3OjI0LDM4OnUsMzk6aCw0MDoyNyw0MTpmLDQyOmQsNDM6cCw0NDptLDQ1OmcsNDY6eSw0Nzp2LDQ4OngsNDk6Yiw1MDpUfSx7MTE6NDksMTc6NDgsMjQ6XywzNzoyNCwzODp1LDM5OmgsNDA6MjcsNDE6Ziw0MjpkLDQzOnAsNDQ6bSw0NTpnLDQ2OnksNDc6diw0ODp4LDQ5OmIsNTA6VH0sezExOjUyLDE3OjUxLDI0Ol8sMzc6MjQsMzg6dSwzOTpoLDQwOjI3LDQxOmYsNDI6ZCw0MzpwLDQ0Om0sNDU6Zyw0Njp5LDQ3OnYsNDg6eCw0OTpiLDUwOlR9LHsyMDpbMSw1M119LHsyMjpbMSw1NF19LHQoQyxbMiwxOF0pLHsxOlsyLDJdfSx0KEMsWzIsOF0pLHQoQyxbMiw5XSksdChELFsyLDM3XSx7NDA6NTUsNDE6Ziw0MjpkLDQzOnAsNDQ6bSw0NTpnLDQ2OnksNDc6diw0ODp4LDQ5OmIsNTA6VH0pLHQoRCxbMiwzOF0pLHQoRCxbMiwzOV0pLHQoTyxbMiw0MF0pLHQoTyxbMiw0Ml0pLHQoTyxbMiw0M10pLHQoTyxbMiw0NF0pLHQoTyxbMiw0NV0pLHQoTyxbMiw0Nl0pLHQoTyxbMiw0N10pLHQoTyxbMiw0OF0pLHQoTyxbMiw0OV0pLHQoTyxbMiw1MF0pLHQoTyxbMiw1MV0pLHQoQyxbMiwxMF0pLHQoQyxbMiwyMl0sezMwOjQxLDI5OjU2LDI0OlMsMjc6d30pLHQoQyxbMiwyNF0pLHQoQyxbMiwyNV0pLHszMTpbMSw1N119LHsxMTo1OSwzMjo1OCwzNzoyNCwzODp1LDM5OmgsNDA6MjcsNDE6Ziw0MjpkLDQzOnAsNDQ6bSw0NTpnLDQ2OnksNDc6diw0ODp4LDQ5OmIsNTA6VH0sdChDLFsyLDExXSksdChDLFsyLDMwXSx7MzM6NjAsMjc6RX0pLHQoQyxbMiwzMl0pLHszMTpbMSw2MV19LHQoQyxbMiwxMl0pLHsxNzo2MiwyNDpffSx7MjU6NjMsMjc6Un0sdChDLFsyLDE0XSksezE3OjY1LDI0Ol99LHQoQyxbMiwxNl0pLHQoQyxbMiwxN10pLHQoTyxbMiw0MV0pLHQoQyxbMiwyM10pLHsyNzpbMSw2Nl19LHsyNjpbMSw2N119LHsyNjpbMiwyOV0sMjg6WzEsNjhdfSx0KEMsWzIsMzFdKSx7Mjc6WzEsNjldfSx0KEMsWzIsMTNdKSx7MjY6WzEsNzBdfSx7MjY6WzIsMjFdLDI4OlsxLDcxXX0sdChDLFsyLDE1XSksdChDLFsyLDI2XSksdChDLFsyLDI3XSksezExOjU5LDMyOjcyLDM3OjI0LDM4OnUsMzk6aCw0MDoyNyw0MTpmLDQyOmQsNDM6cCw0NDptLDQ1OmcsNDY6eSw0Nzp2LDQ4OngsNDk6Yiw1MDpUfSx0KEMsWzIsMzNdKSx0KEMsWzIsMTldKSx7MjU6NzMsMjc6Un0sezI2OlsyLDI4XX0sezI2OlsyLDIwXX1dLGRlZmF1bHRBY3Rpb25zOns4OlsyLDFdLDEwOlsyLDNdLDIxOlsyLDJdLDcyOlsyLDI4XSw3MzpbMiwyMF19LHBhcnNlRXJyb3I6byhmdW5jdGlvbihNLFApe2lmKFAucmVjb3ZlcmFibGUpdGhpcy50cmFjZShNKTtlbHNle3ZhciBCPW5ldyBFcnJvcihNKTt0aHJvdyBCLmhhc2g9UCxCfX0sInBhcnNlRXJyb3IiKSxwYXJzZTpvKGZ1bmN0aW9uKE0pe3ZhciBQPXRoaXMsQj1bMF0sRj1bXSx6PVtudWxsXSwkPVtdLFU9dGhpcy50YWJsZSxLPSIiLGVlPTAsWT0wLGNlPTAsWj0yLHVlPTEsUT0kLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLGo9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxuZT17eXk6e319O2Zvcih2YXIgdGUgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSx0ZSkmJihuZS55eVt0ZV09dGhpcy55eVt0ZV0pO2ouc2V0SW5wdXQoTSxuZS55eSksbmUueXkubGV4ZXI9aixuZS55eS5wYXJzZXI9dGhpcyx0eXBlb2Ygai55eWxsb2M+InUiJiYoai55eWxsb2M9e30pO3ZhciBoZT1qLnl5bGxvYzskLnB1c2goaGUpO3ZhciBsZT1qLm9wdGlvbnMmJmoub3B0aW9ucy5yYW5nZXM7dHlwZW9mIG5lLnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPW5lLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIEooaWUpe0IubGVuZ3RoPUIubGVuZ3RoLTIqaWUsei5sZW5ndGg9ei5sZW5ndGgtaWUsJC5sZW5ndGg9JC5sZW5ndGgtaWV9byhKLCJwb3BTdGFjayIpO2Z1bmN0aW9uIFNlKCl7dmFyIGllO3JldHVybiBpZT1GLnBvcCgpfHxqLmxleCgpfHx1ZSx0eXBlb2YgaWUhPSJudW1iZXIiJiYoaWUgaW5zdGFuY2VvZiBBcnJheSYmKEY9aWUsaWU9Ri5wb3AoKSksaWU9UC5zeW1ib2xzX1tpZV18fGllKSxpZX1vKFNlLCJsZXgiKTtmb3IodmFyIHNlLGFlLE9lLHllLEJlLEhlLHplPXt9LExlLEllLHhlLHE7Oyl7aWYoT2U9QltCLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW09lXT95ZT10aGlzLmRlZmF1bHRBY3Rpb25zW09lXTooKHNlPT09bnVsbHx8dHlwZW9mIHNlPiJ1IikmJihzZT1TZSgpKSx5ZT1VW09lXSYmVVtPZV1bc2VdKSx0eXBlb2YgeWU+InUifHwheWUubGVuZ3RofHwheWVbMF0pe3ZhciBkZT0iIjtxPVtdO2ZvcihMZSBpbiBVW09lXSl0aGlzLnRlcm1pbmFsc19bTGVdJiZMZT5aJiZxLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tMZV0rIiciKTtqLnNob3dQb3NpdGlvbj9kZT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhlZSsxKStgOgpgK2ouc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtxLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bc2VdfHxzZSkrIiciOmRlPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGVlKzEpKyI6IFVuZXhwZWN0ZWQgIisoc2U9PXVlPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW3NlXXx8c2UpKyInIiksdGhpcy5wYXJzZUVycm9yKGRlLHt0ZXh0OmoubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW3NlXXx8c2UsbGluZTpqLnl5bGluZW5vLGxvYzpoZSxleHBlY3RlZDpxfSl9aWYoeWVbMF1pbnN0YW5jZW9mIEFycmF5JiZ5ZS5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK09lKyIsIHRva2VuOiAiK3NlKTtzd2l0Y2goeWVbMF0pe2Nhc2UgMTpCLnB1c2goc2UpLHoucHVzaChqLnl5dGV4dCksJC5wdXNoKGoueXlsbG9jKSxCLnB1c2goeWVbMV0pLHNlPW51bGwsYWU/KHNlPWFlLGFlPW51bGwpOihZPWoueXlsZW5nLEs9ai55eXRleHQsZWU9ai55eWxpbmVubyxoZT1qLnl5bGxvYyxjZT4wJiZjZS0tKTticmVhaztjYXNlIDI6aWYoSWU9dGhpcy5wcm9kdWN0aW9uc19beWVbMV1dWzFdLHplLiQ9elt6Lmxlbmd0aC1JZV0semUuXyQ9e2ZpcnN0X2xpbmU6JFskLmxlbmd0aC0oSWV8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTokWyQubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46JFskLmxlbmd0aC0oSWV8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46JFskLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sbGUmJih6ZS5fJC5yYW5nZT1bJFskLmxlbmd0aC0oSWV8fDEpXS5yYW5nZVswXSwkWyQubGVuZ3RoLTFdLnJhbmdlWzFdXSksSGU9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KHplLFtLLFksZWUsbmUueXkseWVbMV0seiwkXS5jb25jYXQoUSkpLHR5cGVvZiBIZTwidSIpcmV0dXJuIEhlO0llJiYoQj1CLnNsaWNlKDAsLTEqSWUqMiksej16LnNsaWNlKDAsLTEqSWUpLCQ9JC5zbGljZSgwLC0xKkllKSksQi5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW3llWzFdXVswXSksei5wdXNoKHplLiQpLCQucHVzaCh6ZS5fJCkseGU9VVtCW0IubGVuZ3RoLTJdXVtCW0IubGVuZ3RoLTFdXSxCLnB1c2goeGUpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9LCJwYXJzZSIpfSxMPWZ1bmN0aW9uKCl7dmFyIEk9e0VPRjoxLHBhcnNlRXJyb3I6byhmdW5jdGlvbihQLEIpe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoUCxCKTtlbHNlIHRocm93IG5ldyBFcnJvcihQKX0sInBhcnNlRXJyb3IiKSxzZXRJbnB1dDpvKGZ1bmN0aW9uKE0sUCl7cmV0dXJuIHRoaXMueXk9UHx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9TSx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30sInNldElucHV0IiksaW5wdXQ6byhmdW5jdGlvbigpe3ZhciBNPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1NLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1NLHRoaXMubWF0Y2hlZCs9TTt2YXIgUD1NLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gUD8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksTX0sImlucHV0IiksdW5wdXQ6byhmdW5jdGlvbihNKXt2YXIgUD1NLmxlbmd0aCxCPU0uc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD1NK3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1QKSx0aGlzLm9mZnNldC09UDt2YXIgRj10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxCLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09Qi5sZW5ndGgtMSk7dmFyIHo9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOkI/KEIubGVuZ3RoPT09Ri5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK0ZbRi5sZW5ndGgtQi5sZW5ndGhdLmxlbmd0aC1CWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tUH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt6WzBdLHpbMF0rdGhpcy55eWxlbmctUF0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSwidW5wdXQiKSxtb3JlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSwibW9yZSIpLHJlamVjdDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSwicmVqZWN0IiksbGVzczpvKGZ1bmN0aW9uKE0pe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShNKSl9LCJsZXNzIikscGFzdElucHV0Om8oZnVuY3Rpb24oKXt2YXIgTT10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKE0ubGVuZ3RoPjIwPyIuLi4iOiIiKStNLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSwicGFzdElucHV0IiksdXBjb21pbmdJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIE09dGhpcy5tYXRjaDtyZXR1cm4gTS5sZW5ndGg8MjAmJihNKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1NLmxlbmd0aCkpLChNLnN1YnN0cigwLDIwKSsoTS5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sInVwY29taW5nSW5wdXQiKSxzaG93UG9zaXRpb246byhmdW5jdGlvbigpe3ZhciBNPXRoaXMucGFzdElucHV0KCksUD1uZXcgQXJyYXkoTS5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiBNK3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtQKyJeIn0sInNob3dQb3NpdGlvbiIpLHRlc3RfbWF0Y2g6byhmdW5jdGlvbihNLFApe3ZhciBCLEYsejtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoej17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih6Lnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLEY9TVswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksRiYmKHRoaXMueXlsaW5lbm8rPUYubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46Rj9GW0YubGVuZ3RoLTFdLmxlbmd0aC1GW0YubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rTVswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1NWzBdLHRoaXMubWF0Y2grPU1bMF0sdGhpcy5tYXRjaGVzPU0sdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoTVswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9TVswXSxCPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLFAsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksQilyZXR1cm4gQjtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgJCBpbiB6KXRoaXNbJF09elskXTtyZXR1cm4hMX1yZXR1cm4hMX0sInRlc3RfbWF0Y2giKSxuZXh0Om8oZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgTSxQLEIsRjt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciB6PXRoaXMuX2N1cnJlbnRSdWxlcygpLCQ9MDskPHoubGVuZ3RoOyQrKylpZihCPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbelskXV0pLEImJighUHx8QlswXS5sZW5ndGg+UFswXS5sZW5ndGgpKXtpZihQPUIsRj0kLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKE09dGhpcy50ZXN0X21hdGNoKEIselskXSksTSE9PSExKXJldHVybiBNO2lmKHRoaXMuX2JhY2t0cmFjayl7UD0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBQPyhNPXRoaXMudGVzdF9tYXRjaChQLHpbRl0pLE0hPT0hMT9NOiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSwibmV4dCIpLGxleDpvKGZ1bmN0aW9uKCl7dmFyIFA9dGhpcy5uZXh0KCk7cmV0dXJuIFB8fHRoaXMubGV4KCl9LCJsZXgiKSxiZWdpbjpvKGZ1bmN0aW9uKFApe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChQKX0sImJlZ2luIikscG9wU3RhdGU6byhmdW5jdGlvbigpe3ZhciBQPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIFA+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LCJwb3BTdGF0ZSIpLF9jdXJyZW50UnVsZXM6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LCJfY3VycmVudFJ1bGVzIiksdG9wU3RhdGU6byhmdW5jdGlvbihQKXtyZXR1cm4gUD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKFB8fDApLFA+PTA/dGhpcy5jb25kaXRpb25TdGFja1tQXToiSU5JVElBTCJ9LCJ0b3BTdGF0ZSIpLHB1c2hTdGF0ZTpvKGZ1bmN0aW9uKFApe3RoaXMuYmVnaW4oUCl9LCJwdXNoU3RhdGUiKSxzdGF0ZVN0YWNrU2l6ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSwic3RhdGVTdGFja1NpemUiKSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbihQLEIsRix6KXt2YXIgJD16O3N3aXRjaChGKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOmJyZWFrO2Nhc2UgMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDM0O2JyZWFrO2Nhc2UgMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDM0O2JyZWFrO2Nhc2UgNDpyZXR1cm4gMzQ7Y2FzZSA1OmJyZWFrO2Nhc2UgNjpyZXR1cm4gMTA7Y2FzZSA3OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiYWNjX3RpdGxlIiksMTk7YnJlYWs7Y2FzZSA4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7YnJlYWs7Y2FzZSA5OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiYWNjX2Rlc2NyIiksMjE7YnJlYWs7Y2FzZSAxMDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2JyZWFrO2Nhc2UgMTE6dGhpcy5wdXNoU3RhdGUoImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDEyOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDEzOnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDE0OnJldHVybiA1O2Nhc2UgMTU6cmV0dXJuIDg7Y2FzZSAxNjpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImF4aXNfZGF0YSIpLCJYX0FYSVMiO2JyZWFrO2Nhc2UgMTc6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJheGlzX2RhdGEiKSwiWV9BWElTIjticmVhaztjYXNlIDE4OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiYXhpc19iYW5kX2RhdGEiKSwyNDticmVhaztjYXNlIDE5OnJldHVybiAzMTtjYXNlIDIwOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiZGF0YSIpLDE2O2JyZWFrO2Nhc2UgMjE6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJkYXRhIiksMTg7YnJlYWs7Y2FzZSAyMjpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImRhdGFfaW5uZXIiKSwyNDticmVhaztjYXNlIDIzOnJldHVybiAyNztjYXNlIDI0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMjY7YnJlYWs7Y2FzZSAyNTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyNjp0aGlzLnB1c2hTdGF0ZSgic3RyaW5nIik7YnJlYWs7Y2FzZSAyNzp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyODpyZXR1cm4iU1RSIjtjYXNlIDI5OnJldHVybiAyNDtjYXNlIDMwOnJldHVybiAyNjtjYXNlIDMxOnJldHVybiA0MztjYXNlIDMyOnJldHVybiJDT0xPTiI7Y2FzZSAzMzpyZXR1cm4gNDQ7Y2FzZSAzNDpyZXR1cm4gMjg7Y2FzZSAzNTpyZXR1cm4gNDU7Y2FzZSAzNjpyZXR1cm4gNDY7Y2FzZSAzNzpyZXR1cm4gNDg7Y2FzZSAzODpyZXR1cm4gNTA7Y2FzZSAzOTpyZXR1cm4gNDc7Y2FzZSA0MDpyZXR1cm4gNDE7Y2FzZSA0MTpyZXR1cm4gNDk7Y2FzZSA0MjpyZXR1cm4gNDI7Y2FzZSA0MzpicmVhaztjYXNlIDQ0OnJldHVybiAzNTtjYXNlIDQ1OnJldHVybiAzNn19LCJhbm9ueW1vdXMiKSxydWxlczpbL14oPzolJSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzooXHI/XG4pKS9pLC9eKD86KFxyP1xuKSkvaSwvXig/OltcblxyXSspL2ksL14oPzolJVteXG5dKikvaSwvXig/OnRpdGxlXGIpL2ksL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86XHspL2ksL14oPzpbXlx9XSopL2ksL14oPzp4eWNoYXJ0LWJldGFcYikvaSwvXig/Oig/OnZlcnRpY2FsfGhvcml6b250YWwpKS9pLC9eKD86eC1heGlzXGIpL2ksL14oPzp5LWF4aXNcYikvaSwvXig/OlxbKS9pLC9eKD86LS0+KS9pLC9eKD86bGluZVxiKS9pLC9eKD86YmFyXGIpL2ksL14oPzpcWykvaSwvXig/OlsrLV0/KD86XGQrKD86XC5cZCspP3xcLlxkKykpL2ksL14oPzpcXSkvaSwvXig/Oig/OmBcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx7IHRoaXNcLnB1c2hTdGF0ZVwobWRfc3RyaW5nXCk7IFx9XG48bWRfc3RyaW5nPlwoXD86XChcPyFgIlwpXC5cKVwrICAgICAgICAgICAgICAgICAgXHsgcmV0dXJuIE1EX1NUUjsgXH1cbjxtZF9zdHJpbmc+XChcPzpgKSkvaSwvXig/OlsiXSkvaSwvXig/OlsiXSkvaSwvXig/OlteIl0qKS9pLC9eKD86XFspL2ksL14oPzpcXSkvaSwvXig/OltBLVphLXpdKykvaSwvXig/OjopL2ksL14oPzpcKykvaSwvXig/OiwpL2ksL14oPzo9KS9pLC9eKD86XCopL2ksL14oPzojKS9pLC9eKD86W1xfXSkvaSwvXig/OlwuKS9pLC9eKD86JikvaSwvXig/Oi0pL2ksL14oPzpbMC05XSspL2ksL14oPzpccyspL2ksL14oPzo7KS9pLC9eKD86JCkvaV0sY29uZGl0aW9uczp7ZGF0YV9pbm5lcjp7cnVsZXM6WzAsMSw0LDUsNiw3LDksMTEsMTQsMTUsMTYsMTcsMjAsMjEsMjMsMjQsMjUsMjYsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDVdLGluY2x1c2l2ZTohMH0sZGF0YTp7cnVsZXM6WzAsMSwzLDQsNSw2LDcsOSwxMSwxNCwxNSwxNiwxNywyMCwyMSwyMiwyNSwyNiwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NV0saW5jbHVzaXZlOiEwfSxheGlzX2JhbmRfZGF0YTp7cnVsZXM6WzAsMSw0LDUsNiw3LDksMTEsMTQsMTUsMTYsMTcsMjAsMjEsMjQsMjUsMjYsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDVdLGluY2x1c2l2ZTohMH0sYXhpc19kYXRhOntydWxlczpbMCwxLDIsNCw1LDYsNyw5LDExLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIzLDI1LDI2LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1XSxpbmNsdXNpdmU6ITB9LGFjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOlsxMiwxM10saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOlsxMF0saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOls4XSxpbmNsdXNpdmU6ITF9LHRpdGxlOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LG1kX3N0cmluZzp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxzdHJpbmc6e3J1bGVzOlsyNywyOF0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDQsNSw2LDcsOSwxMSwxNCwxNSwxNiwxNywyMCwyMSwyNSwyNiwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NV0saW5jbHVzaXZlOiEwfX19O3JldHVybiBJfSgpO2subGV4ZXI9TDtmdW5jdGlvbiBBKCl7dGhpcy55eT17fX1yZXR1cm4gbyhBLCJQYXJzZXIiKSxBLnByb3RvdHlwZT1rLGsuUGFyc2VyPUEsbmV3IEF9KCk7dFAucGFyc2VyPXRQO0hmZT10UH0pO2Z1bmN0aW9uIHJQKHQpe3JldHVybiB0LnR5cGU9PT0iYmFyIn1mdW5jdGlvbiBCUyh0KXtyZXR1cm4gdC50eXBlPT09ImJhbmQifWZ1bmN0aW9uIE4xKHQpe3JldHVybiB0LnR5cGU9PT0ibGluZWFyIn12YXIgRlM9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKHJQLCJpc0JhclBsb3QiKTtvKEJTLCJpc0JhbmRBeGlzRGF0YSIpO28oTjEsImlzTGluZWFyQXhpc0RhdGEiKX0pO3ZhciBNMSxuUD1OKCgpPT57InVzZSBzdHJpY3QiO2FvKCk7TTE9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5wYXJlbnRHcm91cD1lfXN0YXRpY3tvKHRoaXMsIlRleHREaW1lbnNpb25DYWxjdWxhdG9yV2l0aEZvbnQiKX1nZXRNYXhEaW1lbnNpb24oZSxyKXtpZighdGhpcy5wYXJlbnRHcm91cClyZXR1cm57d2lkdGg6ZS5yZWR1Y2UoKGEscyk9Pk1hdGgubWF4KHMubGVuZ3RoLGEpLDApKnIsaGVpZ2h0OnJ9O2xldCBuPXt3aWR0aDowLGhlaWdodDowfSxpPXRoaXMucGFyZW50R3JvdXAuYXBwZW5kKCJnIikuYXR0cigidmlzaWJpbGl0eSIsImhpZGRlbiIpLmF0dHIoImZvbnQtc2l6ZSIscik7Zm9yKGxldCBhIG9mIGUpe2xldCBzPXdRKGksMSxhKSxsPXM/cy53aWR0aDphLmxlbmd0aCpyLHU9cz9zLmhlaWdodDpyO24ud2lkdGg9TWF0aC5tYXgobi53aWR0aCxsKSxuLmhlaWdodD1NYXRoLm1heChuLmhlaWdodCx1KX1yZXR1cm4gaS5yZW1vdmUoKSxufX19KTt2YXIgSTEsaVA9TigoKT0+eyJ1c2Ugc3RyaWN0IjtJMT1jbGFzc3tjb25zdHJ1Y3RvcihlLHIsbixpKXt0aGlzLmF4aXNDb25maWc9ZTt0aGlzLnRpdGxlPXI7dGhpcy50ZXh0RGltZW5zaW9uQ2FsY3VsYXRvcj1uO3RoaXMuYXhpc1RoZW1lQ29uZmlnPWk7dGhpcy5ib3VuZGluZ1JlY3Q9e3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH07dGhpcy5heGlzUG9zaXRpb249ImxlZnQiO3RoaXMuc2hvd1RpdGxlPSExO3RoaXMuc2hvd0xhYmVsPSExO3RoaXMuc2hvd1RpY2s9ITE7dGhpcy5zaG93QXhpc0xpbmU9ITE7dGhpcy5vdXRlclBhZGRpbmc9MDt0aGlzLnRpdGxlVGV4dEhlaWdodD0wO3RoaXMubGFiZWxUZXh0SGVpZ2h0PTA7dGhpcy5yYW5nZT1bMCwxMF0sdGhpcy5ib3VuZGluZ1JlY3Q9e3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH0sdGhpcy5heGlzUG9zaXRpb249ImxlZnQifXN0YXRpY3tvKHRoaXMsIkJhc2VBeGlzIil9c2V0UmFuZ2UoZSl7dGhpcy5yYW5nZT1lLHRoaXMuYXhpc1Bvc2l0aW9uPT09ImxlZnQifHx0aGlzLmF4aXNQb3NpdGlvbj09PSJyaWdodCI/dGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0PWVbMV0tZVswXTp0aGlzLmJvdW5kaW5nUmVjdC53aWR0aD1lWzFdLWVbMF0sdGhpcy5yZWNhbGN1bGF0ZVNjYWxlKCl9Z2V0UmFuZ2UoKXtyZXR1cm5bdGhpcy5yYW5nZVswXSt0aGlzLm91dGVyUGFkZGluZyx0aGlzLnJhbmdlWzFdLXRoaXMub3V0ZXJQYWRkaW5nXX1zZXRBeGlzUG9zaXRpb24oZSl7dGhpcy5heGlzUG9zaXRpb249ZSx0aGlzLnNldFJhbmdlKHRoaXMucmFuZ2UpfWdldFRpY2tEaXN0YW5jZSgpe2xldCBlPXRoaXMuZ2V0UmFuZ2UoKTtyZXR1cm4gTWF0aC5hYnMoZVswXS1lWzFdKS90aGlzLmdldFRpY2tWYWx1ZXMoKS5sZW5ndGh9Z2V0QXhpc091dGVyUGFkZGluZygpe3JldHVybiB0aGlzLm91dGVyUGFkZGluZ31nZXRMYWJlbERpbWVuc2lvbigpe3JldHVybiB0aGlzLnRleHREaW1lbnNpb25DYWxjdWxhdG9yLmdldE1heERpbWVuc2lvbih0aGlzLmdldFRpY2tWYWx1ZXMoKS5tYXAoZT0+ZS50b1N0cmluZygpKSx0aGlzLmF4aXNDb25maWcubGFiZWxGb250U2l6ZSl9cmVjYWxjdWxhdGVPdXRlclBhZGRpbmdUb0RyYXdCYXIoKXsuNyp0aGlzLmdldFRpY2tEaXN0YW5jZSgpPnRoaXMub3V0ZXJQYWRkaW5nKjImJih0aGlzLm91dGVyUGFkZGluZz1NYXRoLmZsb29yKC43KnRoaXMuZ2V0VGlja0Rpc3RhbmNlKCkvMikpLHRoaXMucmVjYWxjdWxhdGVTY2FsZSgpfWNhbGN1bGF0ZVNwYWNlSWZEcmF3bkhvcml6b250YWxseShlKXtsZXQgcj1lLmhlaWdodDtpZih0aGlzLmF4aXNDb25maWcuc2hvd0F4aXNMaW5lJiZyPnRoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoJiYoci09dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGgsdGhpcy5zaG93QXhpc0xpbmU9ITApLHRoaXMuYXhpc0NvbmZpZy5zaG93TGFiZWwpe2xldCBuPXRoaXMuZ2V0TGFiZWxEaW1lbnNpb24oKSxpPS4yKmUud2lkdGg7dGhpcy5vdXRlclBhZGRpbmc9TWF0aC5taW4obi53aWR0aC8yLGkpO2xldCBhPW4uaGVpZ2h0K3RoaXMuYXhpc0NvbmZpZy5sYWJlbFBhZGRpbmcqMjt0aGlzLmxhYmVsVGV4dEhlaWdodD1uLmhlaWdodCxhPD1yJiYoci09YSx0aGlzLnNob3dMYWJlbD0hMCl9aWYodGhpcy5heGlzQ29uZmlnLnNob3dUaWNrJiZyPj10aGlzLmF4aXNDb25maWcudGlja0xlbmd0aCYmKHRoaXMuc2hvd1RpY2s9ITAsci09dGhpcy5heGlzQ29uZmlnLnRpY2tMZW5ndGgpLHRoaXMuYXhpc0NvbmZpZy5zaG93VGl0bGUmJnRoaXMudGl0bGUpe2xldCBuPXRoaXMudGV4dERpbWVuc2lvbkNhbGN1bGF0b3IuZ2V0TWF4RGltZW5zaW9uKFt0aGlzLnRpdGxlXSx0aGlzLmF4aXNDb25maWcudGl0bGVGb250U2l6ZSksaT1uLmhlaWdodCt0aGlzLmF4aXNDb25maWcudGl0bGVQYWRkaW5nKjI7dGhpcy50aXRsZVRleHRIZWlnaHQ9bi5oZWlnaHQsaTw9ciYmKHItPWksdGhpcy5zaG93VGl0bGU9ITApfXRoaXMuYm91bmRpbmdSZWN0LndpZHRoPWUud2lkdGgsdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0PWUuaGVpZ2h0LXJ9Y2FsY3VsYXRlU3BhY2VJZkRyYXduVmVydGljYWwoZSl7bGV0IHI9ZS53aWR0aDtpZih0aGlzLmF4aXNDb25maWcuc2hvd0F4aXNMaW5lJiZyPnRoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoJiYoci09dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGgsdGhpcy5zaG93QXhpc0xpbmU9ITApLHRoaXMuYXhpc0NvbmZpZy5zaG93TGFiZWwpe2xldCBuPXRoaXMuZ2V0TGFiZWxEaW1lbnNpb24oKSxpPS4yKmUuaGVpZ2h0O3RoaXMub3V0ZXJQYWRkaW5nPU1hdGgubWluKG4uaGVpZ2h0LzIsaSk7bGV0IGE9bi53aWR0aCt0aGlzLmF4aXNDb25maWcubGFiZWxQYWRkaW5nKjI7YTw9ciYmKHItPWEsdGhpcy5zaG93TGFiZWw9ITApfWlmKHRoaXMuYXhpc0NvbmZpZy5zaG93VGljayYmcj49dGhpcy5heGlzQ29uZmlnLnRpY2tMZW5ndGgmJih0aGlzLnNob3dUaWNrPSEwLHItPXRoaXMuYXhpc0NvbmZpZy50aWNrTGVuZ3RoKSx0aGlzLmF4aXNDb25maWcuc2hvd1RpdGxlJiZ0aGlzLnRpdGxlKXtsZXQgbj10aGlzLnRleHREaW1lbnNpb25DYWxjdWxhdG9yLmdldE1heERpbWVuc2lvbihbdGhpcy50aXRsZV0sdGhpcy5heGlzQ29uZmlnLnRpdGxlRm9udFNpemUpLGk9bi5oZWlnaHQrdGhpcy5heGlzQ29uZmlnLnRpdGxlUGFkZGluZyoyO3RoaXMudGl0bGVUZXh0SGVpZ2h0PW4uaGVpZ2h0LGk8PXImJihyLT1pLHRoaXMuc2hvd1RpdGxlPSEwKX10aGlzLmJvdW5kaW5nUmVjdC53aWR0aD1lLndpZHRoLXIsdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0PWUuaGVpZ2h0fWNhbGN1bGF0ZVNwYWNlKGUpe3JldHVybiB0aGlzLmF4aXNQb3NpdGlvbj09PSJsZWZ0Inx8dGhpcy5heGlzUG9zaXRpb249PT0icmlnaHQiP3RoaXMuY2FsY3VsYXRlU3BhY2VJZkRyYXduVmVydGljYWwoZSk6dGhpcy5jYWxjdWxhdGVTcGFjZUlmRHJhd25Ib3Jpem9udGFsbHkoZSksdGhpcy5yZWNhbGN1bGF0ZVNjYWxlKCkse3dpZHRoOnRoaXMuYm91bmRpbmdSZWN0LndpZHRoLGhlaWdodDp0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHR9fXNldEJvdW5kaW5nQm94WFkoZSl7dGhpcy5ib3VuZGluZ1JlY3QueD1lLngsdGhpcy5ib3VuZGluZ1JlY3QueT1lLnl9Z2V0RHJhd2FibGVFbGVtZW50c0ZvckxlZnRBeGlzKCl7bGV0IGU9W107aWYodGhpcy5zaG93QXhpc0xpbmUpe2xldCByPXRoaXMuYm91bmRpbmdSZWN0LngrdGhpcy5ib3VuZGluZ1JlY3Qud2lkdGgtdGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGgvMjtlLnB1c2goe3R5cGU6InBhdGgiLGdyb3VwVGV4dHM6WyJsZWZ0LWF4aXMiLCJheGlzbC1saW5lIl0sZGF0YTpbe3BhdGg6YE0gJHtyfSwke3RoaXMuYm91bmRpbmdSZWN0Lnl9IEwgJHtyfSwke3RoaXMuYm91bmRpbmdSZWN0LnkrdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0fSBgLHN0cm9rZUZpbGw6dGhpcy5heGlzVGhlbWVDb25maWcuYXhpc0xpbmVDb2xvcixzdHJva2VXaWR0aDp0aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aH1dfSl9aWYodGhpcy5zaG93TGFiZWwmJmUucHVzaCh7dHlwZToidGV4dCIsZ3JvdXBUZXh0czpbImxlZnQtYXhpcyIsImxhYmVsIl0sZGF0YTp0aGlzLmdldFRpY2tWYWx1ZXMoKS5tYXAocj0+KHt0ZXh0OnIudG9TdHJpbmcoKSx4OnRoaXMuYm91bmRpbmdSZWN0LngrdGhpcy5ib3VuZGluZ1JlY3Qud2lkdGgtKHRoaXMuc2hvd0xhYmVsP3RoaXMuYXhpc0NvbmZpZy5sYWJlbFBhZGRpbmc6MCktKHRoaXMuc2hvd1RpY2s/dGhpcy5heGlzQ29uZmlnLnRpY2tMZW5ndGg6MCktKHRoaXMuc2hvd0F4aXNMaW5lP3RoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoOjApLHk6dGhpcy5nZXRTY2FsZVZhbHVlKHIpLGZpbGw6dGhpcy5heGlzVGhlbWVDb25maWcubGFiZWxDb2xvcixmb250U2l6ZTp0aGlzLmF4aXNDb25maWcubGFiZWxGb250U2l6ZSxyb3RhdGlvbjowLHZlcnRpY2FsUG9zOiJtaWRkbGUiLGhvcml6b250YWxQb3M6InJpZ2h0In0pKX0pLHRoaXMuc2hvd1RpY2spe2xldCByPXRoaXMuYm91bmRpbmdSZWN0LngrdGhpcy5ib3VuZGluZ1JlY3Qud2lkdGgtKHRoaXMuc2hvd0F4aXNMaW5lP3RoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoOjApO2UucHVzaCh7dHlwZToicGF0aCIsZ3JvdXBUZXh0czpbImxlZnQtYXhpcyIsInRpY2tzIl0sZGF0YTp0aGlzLmdldFRpY2tWYWx1ZXMoKS5tYXAobj0+KHtwYXRoOmBNICR7cn0sJHt0aGlzLmdldFNjYWxlVmFsdWUobil9IEwgJHtyLXRoaXMuYXhpc0NvbmZpZy50aWNrTGVuZ3RofSwke3RoaXMuZ2V0U2NhbGVWYWx1ZShuKX1gLHN0cm9rZUZpbGw6dGhpcy5heGlzVGhlbWVDb25maWcudGlja0NvbG9yLHN0cm9rZVdpZHRoOnRoaXMuYXhpc0NvbmZpZy50aWNrV2lkdGh9KSl9KX1yZXR1cm4gdGhpcy5zaG93VGl0bGUmJmUucHVzaCh7dHlwZToidGV4dCIsZ3JvdXBUZXh0czpbImxlZnQtYXhpcyIsInRpdGxlIl0sZGF0YTpbe3RleHQ6dGhpcy50aXRsZSx4OnRoaXMuYm91bmRpbmdSZWN0LngrdGhpcy5heGlzQ29uZmlnLnRpdGxlUGFkZGluZyx5OnRoaXMuYm91bmRpbmdSZWN0LnkrdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0LzIsZmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy50aXRsZUNvbG9yLGZvbnRTaXplOnRoaXMuYXhpc0NvbmZpZy50aXRsZUZvbnRTaXplLHJvdGF0aW9uOjI3MCx2ZXJ0aWNhbFBvczoidG9wIixob3Jpem9udGFsUG9zOiJjZW50ZXIifV19KSxlfWdldERyYXdhYmxlRWxlbWVudHNGb3JCb3R0b21BeGlzKCl7bGV0IGU9W107aWYodGhpcy5zaG93QXhpc0xpbmUpe2xldCByPXRoaXMuYm91bmRpbmdSZWN0LnkrdGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGgvMjtlLnB1c2goe3R5cGU6InBhdGgiLGdyb3VwVGV4dHM6WyJib3R0b20tYXhpcyIsImF4aXMtbGluZSJdLGRhdGE6W3twYXRoOmBNICR7dGhpcy5ib3VuZGluZ1JlY3QueH0sJHtyfSBMICR7dGhpcy5ib3VuZGluZ1JlY3QueCt0aGlzLmJvdW5kaW5nUmVjdC53aWR0aH0sJHtyfWAsc3Ryb2tlRmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy5heGlzTGluZUNvbG9yLHN0cm9rZVdpZHRoOnRoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRofV19KX1pZih0aGlzLnNob3dMYWJlbCYmZS5wdXNoKHt0eXBlOiJ0ZXh0Iixncm91cFRleHRzOlsiYm90dG9tLWF4aXMiLCJsYWJlbCJdLGRhdGE6dGhpcy5nZXRUaWNrVmFsdWVzKCkubWFwKHI9Pih7dGV4dDpyLnRvU3RyaW5nKCkseDp0aGlzLmdldFNjYWxlVmFsdWUocikseTp0aGlzLmJvdW5kaW5nUmVjdC55K3RoaXMuYXhpc0NvbmZpZy5sYWJlbFBhZGRpbmcrKHRoaXMuc2hvd1RpY2s/dGhpcy5heGlzQ29uZmlnLnRpY2tMZW5ndGg6MCkrKHRoaXMuc2hvd0F4aXNMaW5lP3RoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoOjApLGZpbGw6dGhpcy5heGlzVGhlbWVDb25maWcubGFiZWxDb2xvcixmb250U2l6ZTp0aGlzLmF4aXNDb25maWcubGFiZWxGb250U2l6ZSxyb3RhdGlvbjowLHZlcnRpY2FsUG9zOiJ0b3AiLGhvcml6b250YWxQb3M6ImNlbnRlciJ9KSl9KSx0aGlzLnNob3dUaWNrKXtsZXQgcj10aGlzLmJvdW5kaW5nUmVjdC55Kyh0aGlzLnNob3dBeGlzTGluZT90aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aDowKTtlLnB1c2goe3R5cGU6InBhdGgiLGdyb3VwVGV4dHM6WyJib3R0b20tYXhpcyIsInRpY2tzIl0sZGF0YTp0aGlzLmdldFRpY2tWYWx1ZXMoKS5tYXAobj0+KHtwYXRoOmBNICR7dGhpcy5nZXRTY2FsZVZhbHVlKG4pfSwke3J9IEwgJHt0aGlzLmdldFNjYWxlVmFsdWUobil9LCR7cit0aGlzLmF4aXNDb25maWcudGlja0xlbmd0aH1gLHN0cm9rZUZpbGw6dGhpcy5heGlzVGhlbWVDb25maWcudGlja0NvbG9yLHN0cm9rZVdpZHRoOnRoaXMuYXhpc0NvbmZpZy50aWNrV2lkdGh9KSl9KX1yZXR1cm4gdGhpcy5zaG93VGl0bGUmJmUucHVzaCh7dHlwZToidGV4dCIsZ3JvdXBUZXh0czpbImJvdHRvbS1heGlzIiwidGl0bGUiXSxkYXRhOlt7dGV4dDp0aGlzLnRpdGxlLHg6dGhpcy5yYW5nZVswXSsodGhpcy5yYW5nZVsxXS10aGlzLnJhbmdlWzBdKS8yLHk6dGhpcy5ib3VuZGluZ1JlY3QueSt0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQtdGhpcy5heGlzQ29uZmlnLnRpdGxlUGFkZGluZy10aGlzLnRpdGxlVGV4dEhlaWdodCxmaWxsOnRoaXMuYXhpc1RoZW1lQ29uZmlnLnRpdGxlQ29sb3IsZm9udFNpemU6dGhpcy5heGlzQ29uZmlnLnRpdGxlRm9udFNpemUscm90YXRpb246MCx2ZXJ0aWNhbFBvczoidG9wIixob3Jpem9udGFsUG9zOiJjZW50ZXIifV19KSxlfWdldERyYXdhYmxlRWxlbWVudHNGb3JUb3BBeGlzKCl7bGV0IGU9W107aWYodGhpcy5zaG93QXhpc0xpbmUpe2xldCByPXRoaXMuYm91bmRpbmdSZWN0LnkrdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0LXRoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoLzI7ZS5wdXNoKHt0eXBlOiJwYXRoIixncm91cFRleHRzOlsidG9wLWF4aXMiLCJheGlzLWxpbmUiXSxkYXRhOlt7cGF0aDpgTSAke3RoaXMuYm91bmRpbmdSZWN0Lnh9LCR7cn0gTCAke3RoaXMuYm91bmRpbmdSZWN0LngrdGhpcy5ib3VuZGluZ1JlY3Qud2lkdGh9LCR7cn1gLHN0cm9rZUZpbGw6dGhpcy5heGlzVGhlbWVDb25maWcuYXhpc0xpbmVDb2xvcixzdHJva2VXaWR0aDp0aGlzLmF4aXNDb25maWcuYXhpc0xpbmVXaWR0aH1dfSl9aWYodGhpcy5zaG93TGFiZWwmJmUucHVzaCh7dHlwZToidGV4dCIsZ3JvdXBUZXh0czpbInRvcC1heGlzIiwibGFiZWwiXSxkYXRhOnRoaXMuZ2V0VGlja1ZhbHVlcygpLm1hcChyPT4oe3RleHQ6ci50b1N0cmluZygpLHg6dGhpcy5nZXRTY2FsZVZhbHVlKHIpLHk6dGhpcy5ib3VuZGluZ1JlY3QueSsodGhpcy5zaG93VGl0bGU/dGhpcy50aXRsZVRleHRIZWlnaHQrdGhpcy5heGlzQ29uZmlnLnRpdGxlUGFkZGluZyoyOjApK3RoaXMuYXhpc0NvbmZpZy5sYWJlbFBhZGRpbmcsZmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy5sYWJlbENvbG9yLGZvbnRTaXplOnRoaXMuYXhpc0NvbmZpZy5sYWJlbEZvbnRTaXplLHJvdGF0aW9uOjAsdmVydGljYWxQb3M6InRvcCIsaG9yaXpvbnRhbFBvczoiY2VudGVyIn0pKX0pLHRoaXMuc2hvd1RpY2spe2xldCByPXRoaXMuYm91bmRpbmdSZWN0Lnk7ZS5wdXNoKHt0eXBlOiJwYXRoIixncm91cFRleHRzOlsidG9wLWF4aXMiLCJ0aWNrcyJdLGRhdGE6dGhpcy5nZXRUaWNrVmFsdWVzKCkubWFwKG49Pih7cGF0aDpgTSAke3RoaXMuZ2V0U2NhbGVWYWx1ZShuKX0sJHtyK3RoaXMuYm91bmRpbmdSZWN0LmhlaWdodC0odGhpcy5zaG93QXhpc0xpbmU/dGhpcy5heGlzQ29uZmlnLmF4aXNMaW5lV2lkdGg6MCl9IEwgJHt0aGlzLmdldFNjYWxlVmFsdWUobil9LCR7cit0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQtdGhpcy5heGlzQ29uZmlnLnRpY2tMZW5ndGgtKHRoaXMuc2hvd0F4aXNMaW5lP3RoaXMuYXhpc0NvbmZpZy5heGlzTGluZVdpZHRoOjApfWAsc3Ryb2tlRmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy50aWNrQ29sb3Isc3Ryb2tlV2lkdGg6dGhpcy5heGlzQ29uZmlnLnRpY2tXaWR0aH0pKX0pfXJldHVybiB0aGlzLnNob3dUaXRsZSYmZS5wdXNoKHt0eXBlOiJ0ZXh0Iixncm91cFRleHRzOlsidG9wLWF4aXMiLCJ0aXRsZSJdLGRhdGE6W3t0ZXh0OnRoaXMudGl0bGUseDp0aGlzLmJvdW5kaW5nUmVjdC54K3RoaXMuYm91bmRpbmdSZWN0LndpZHRoLzIseTp0aGlzLmJvdW5kaW5nUmVjdC55K3RoaXMuYXhpc0NvbmZpZy50aXRsZVBhZGRpbmcsZmlsbDp0aGlzLmF4aXNUaGVtZUNvbmZpZy50aXRsZUNvbG9yLGZvbnRTaXplOnRoaXMuYXhpc0NvbmZpZy50aXRsZUZvbnRTaXplLHJvdGF0aW9uOjAsdmVydGljYWxQb3M6InRvcCIsaG9yaXpvbnRhbFBvczoiY2VudGVyIn1dfSksZX1nZXREcmF3YWJsZUVsZW1lbnRzKCl7aWYodGhpcy5heGlzUG9zaXRpb249PT0ibGVmdCIpcmV0dXJuIHRoaXMuZ2V0RHJhd2FibGVFbGVtZW50c0ZvckxlZnRBeGlzKCk7aWYodGhpcy5heGlzUG9zaXRpb249PT0icmlnaHQiKXRocm93IEVycm9yKCJEcmF3aW5nIG9mIHJpZ2h0IGF4aXMgaXMgbm90IGltcGxlbWVudGVkIik7cmV0dXJuIHRoaXMuYXhpc1Bvc2l0aW9uPT09ImJvdHRvbSI/dGhpcy5nZXREcmF3YWJsZUVsZW1lbnRzRm9yQm90dG9tQXhpcygpOnRoaXMuYXhpc1Bvc2l0aW9uPT09InRvcCI/dGhpcy5nZXREcmF3YWJsZUVsZW1lbnRzRm9yVG9wQXhpcygpOltdfX19KTt2YXIgJFMscWZlPU4oKCk9PnsidXNlIHN0cmljdCI7ZnIoKTt5dCgpO2lQKCk7JFM9Y2xhc3MgZXh0ZW5kcyBJMXtzdGF0aWN7byh0aGlzLCJCYW5kQXhpcyIpfWNvbnN0cnVjdG9yKGUscixuLGksYSl7c3VwZXIoZSxpLGEsciksdGhpcy5jYXRlZ29yaWVzPW4sdGhpcy5zY2FsZT1WMCgpLmRvbWFpbih0aGlzLmNhdGVnb3JpZXMpLnJhbmdlKHRoaXMuZ2V0UmFuZ2UoKSl9c2V0UmFuZ2UoZSl7c3VwZXIuc2V0UmFuZ2UoZSl9cmVjYWxjdWxhdGVTY2FsZSgpe3RoaXMuc2NhbGU9VjAoKS5kb21haW4odGhpcy5jYXRlZ29yaWVzKS5yYW5nZSh0aGlzLmdldFJhbmdlKCkpLnBhZGRpbmdJbm5lcigxKS5wYWRkaW5nT3V0ZXIoMCkuYWxpZ24oLjUpLFgudHJhY2UoIkJhbmRBeGlzIGF4aXMgZmluYWwgY2F0ZWdvcmllcywgcmFuZ2U6ICIsdGhpcy5jYXRlZ29yaWVzLHRoaXMuZ2V0UmFuZ2UoKSl9Z2V0VGlja1ZhbHVlcygpe3JldHVybiB0aGlzLmNhdGVnb3JpZXN9Z2V0U2NhbGVWYWx1ZShlKXtyZXR1cm4gdGhpcy5zY2FsZShlKT8/dGhpcy5nZXRSYW5nZSgpWzBdfX19KTt2YXIgelMsWWZlPU4oKCk9PnsidXNlIHN0cmljdCI7ZnIoKTtpUCgpO3pTPWNsYXNzIGV4dGVuZHMgSTF7c3RhdGlje28odGhpcywiTGluZWFyQXhpcyIpfWNvbnN0cnVjdG9yKGUscixuLGksYSl7c3VwZXIoZSxpLGEsciksdGhpcy5kb21haW49bix0aGlzLnNjYWxlPVRsKCkuZG9tYWluKHRoaXMuZG9tYWluKS5yYW5nZSh0aGlzLmdldFJhbmdlKCkpfWdldFRpY2tWYWx1ZXMoKXtyZXR1cm4gdGhpcy5zY2FsZS50aWNrcygpfXJlY2FsY3VsYXRlU2NhbGUoKXtsZXQgZT1bLi4udGhpcy5kb21haW5dO3RoaXMuYXhpc1Bvc2l0aW9uPT09ImxlZnQiJiZlLnJldmVyc2UoKSx0aGlzLnNjYWxlPVRsKCkuZG9tYWluKGUpLnJhbmdlKHRoaXMuZ2V0UmFuZ2UoKSl9Z2V0U2NhbGVWYWx1ZShlKXtyZXR1cm4gdGhpcy5zY2FsZShlKX19fSk7ZnVuY3Rpb24gYVAodCxlLHIsbil7bGV0IGk9bmV3IE0xKG4pO3JldHVybiBCUyh0KT9uZXcgJFMoZSxyLHQuY2F0ZWdvcmllcyx0LnRpdGxlLGkpOm5ldyB6UyhlLHIsW3QubWluLHQubWF4XSx0LnRpdGxlLGkpfXZhciBYZmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtGUygpO25QKCk7cWZlKCk7WWZlKCk7byhhUCwiZ2V0QXhpcyIpfSk7ZnVuY3Rpb24gamZlKHQsZSxyLG4pe2xldCBpPW5ldyBNMShuKTtyZXR1cm4gbmV3IHNQKGksdCxlLHIpfXZhciBzUCxLZmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtuUCgpO3NQPWNsYXNze2NvbnN0cnVjdG9yKGUscixuLGkpe3RoaXMudGV4dERpbWVuc2lvbkNhbGN1bGF0b3I9ZTt0aGlzLmNoYXJ0Q29uZmlnPXI7dGhpcy5jaGFydERhdGE9bjt0aGlzLmNoYXJ0VGhlbWVDb25maWc9aTt0aGlzLmJvdW5kaW5nUmVjdD17eDowLHk6MCx3aWR0aDowLGhlaWdodDowfSx0aGlzLnNob3dDaGFydFRpdGxlPSExfXN0YXRpY3tvKHRoaXMsIkNoYXJ0VGl0bGUiKX1zZXRCb3VuZGluZ0JveFhZKGUpe3RoaXMuYm91bmRpbmdSZWN0Lng9ZS54LHRoaXMuYm91bmRpbmdSZWN0Lnk9ZS55fWNhbGN1bGF0ZVNwYWNlKGUpe2xldCByPXRoaXMudGV4dERpbWVuc2lvbkNhbGN1bGF0b3IuZ2V0TWF4RGltZW5zaW9uKFt0aGlzLmNoYXJ0RGF0YS50aXRsZV0sdGhpcy5jaGFydENvbmZpZy50aXRsZUZvbnRTaXplKSxuPU1hdGgubWF4KHIud2lkdGgsZS53aWR0aCksaT1yLmhlaWdodCsyKnRoaXMuY2hhcnRDb25maWcudGl0bGVQYWRkaW5nO3JldHVybiByLndpZHRoPD1uJiZyLmhlaWdodDw9aSYmdGhpcy5jaGFydENvbmZpZy5zaG93VGl0bGUmJnRoaXMuY2hhcnREYXRhLnRpdGxlJiYodGhpcy5ib3VuZGluZ1JlY3Qud2lkdGg9bix0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQ9aSx0aGlzLnNob3dDaGFydFRpdGxlPSEwKSx7d2lkdGg6dGhpcy5ib3VuZGluZ1JlY3Qud2lkdGgsaGVpZ2h0OnRoaXMuYm91bmRpbmdSZWN0LmhlaWdodH19Z2V0RHJhd2FibGVFbGVtZW50cygpe2xldCBlPVtdO3JldHVybiB0aGlzLnNob3dDaGFydFRpdGxlJiZlLnB1c2goe2dyb3VwVGV4dHM6WyJjaGFydC10aXRsZSJdLHR5cGU6InRleHQiLGRhdGE6W3tmb250U2l6ZTp0aGlzLmNoYXJ0Q29uZmlnLnRpdGxlRm9udFNpemUsdGV4dDp0aGlzLmNoYXJ0RGF0YS50aXRsZSx2ZXJ0aWNhbFBvczoibWlkZGxlIixob3Jpem9udGFsUG9zOiJjZW50ZXIiLHg6dGhpcy5ib3VuZGluZ1JlY3QueCt0aGlzLmJvdW5kaW5nUmVjdC53aWR0aC8yLHk6dGhpcy5ib3VuZGluZ1JlY3QueSt0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQvMixmaWxsOnRoaXMuY2hhcnRUaGVtZUNvbmZpZy50aXRsZUNvbG9yLHJvdGF0aW9uOjB9XX0pLGV9fTtvKGpmZSwiZ2V0Q2hhcnRUaXRsZUNvbXBvbmVudCIpfSk7dmFyIEdTLFFmZT1OKCgpPT57InVzZSBzdHJpY3QiO2ZyKCk7R1M9Y2xhc3N7Y29uc3RydWN0b3IoZSxyLG4saSxhKXt0aGlzLnBsb3REYXRhPWU7dGhpcy54QXhpcz1yO3RoaXMueUF4aXM9bjt0aGlzLm9yaWVudGF0aW9uPWk7dGhpcy5wbG90SW5kZXg9YX1zdGF0aWN7byh0aGlzLCJMaW5lUGxvdCIpfWdldERyYXdhYmxlRWxlbWVudCgpe2xldCBlPXRoaXMucGxvdERhdGEuZGF0YS5tYXAobj0+W3RoaXMueEF4aXMuZ2V0U2NhbGVWYWx1ZShuWzBdKSx0aGlzLnlBeGlzLmdldFNjYWxlVmFsdWUoblsxXSldKSxyO3JldHVybiB0aGlzLm9yaWVudGF0aW9uPT09Imhvcml6b250YWwiP3I9Q2woKS55KG49Pm5bMF0pLngobj0+blsxXSkoZSk6cj1DbCgpLngobj0+blswXSkueShuPT5uWzFdKShlKSxyP1t7Z3JvdXBUZXh0czpbInBsb3QiLGBsaW5lLXBsb3QtJHt0aGlzLnBsb3RJbmRleH1gXSx0eXBlOiJwYXRoIixkYXRhOlt7cGF0aDpyLHN0cm9rZUZpbGw6dGhpcy5wbG90RGF0YS5zdHJva2VGaWxsLHN0cm9rZVdpZHRoOnRoaXMucGxvdERhdGEuc3Ryb2tlV2lkdGh9XX1dOltdfX19KTt2YXIgVlMsWmZlPU4oKCk9PnsidXNlIHN0cmljdCI7VlM9Y2xhc3N7Y29uc3RydWN0b3IoZSxyLG4saSxhLHMpe3RoaXMuYmFyRGF0YT1lO3RoaXMuYm91bmRpbmdSZWN0PXI7dGhpcy54QXhpcz1uO3RoaXMueUF4aXM9aTt0aGlzLm9yaWVudGF0aW9uPWE7dGhpcy5wbG90SW5kZXg9c31zdGF0aWN7byh0aGlzLCJCYXJQbG90Iil9Z2V0RHJhd2FibGVFbGVtZW50KCl7bGV0IGU9dGhpcy5iYXJEYXRhLmRhdGEubWFwKGE9Plt0aGlzLnhBeGlzLmdldFNjYWxlVmFsdWUoYVswXSksdGhpcy55QXhpcy5nZXRTY2FsZVZhbHVlKGFbMV0pXSksbj1NYXRoLm1pbih0aGlzLnhBeGlzLmdldEF4aXNPdXRlclBhZGRpbmcoKSoyLHRoaXMueEF4aXMuZ2V0VGlja0Rpc3RhbmNlKCkpKigxLS4wNSksaT1uLzI7cmV0dXJuIHRoaXMub3JpZW50YXRpb249PT0iaG9yaXpvbnRhbCI/W3tncm91cFRleHRzOlsicGxvdCIsYGJhci1wbG90LSR7dGhpcy5wbG90SW5kZXh9YF0sdHlwZToicmVjdCIsZGF0YTplLm1hcChhPT4oe3g6dGhpcy5ib3VuZGluZ1JlY3QueCx5OmFbMF0taSxoZWlnaHQ6bix3aWR0aDphWzFdLXRoaXMuYm91bmRpbmdSZWN0LngsZmlsbDp0aGlzLmJhckRhdGEuZmlsbCxzdHJva2VXaWR0aDowLHN0cm9rZUZpbGw6dGhpcy5iYXJEYXRhLmZpbGx9KSl9XTpbe2dyb3VwVGV4dHM6WyJwbG90IixgYmFyLXBsb3QtJHt0aGlzLnBsb3RJbmRleH1gXSx0eXBlOiJyZWN0IixkYXRhOmUubWFwKGE9Pih7eDphWzBdLWkseTphWzFdLHdpZHRoOm4saGVpZ2h0OnRoaXMuYm91bmRpbmdSZWN0LnkrdGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0LWFbMV0sZmlsbDp0aGlzLmJhckRhdGEuZmlsbCxzdHJva2VXaWR0aDowLHN0cm9rZUZpbGw6dGhpcy5iYXJEYXRhLmZpbGx9KSl9XX19fSk7ZnVuY3Rpb24gSmZlKHQsZSxyKXtyZXR1cm4gbmV3IG9QKHQsZSxyKX12YXIgb1AsZWRlPU4oKCk9PnsidXNlIHN0cmljdCI7UWZlKCk7WmZlKCk7b1A9Y2xhc3N7Y29uc3RydWN0b3IoZSxyLG4pe3RoaXMuY2hhcnRDb25maWc9ZTt0aGlzLmNoYXJ0RGF0YT1yO3RoaXMuY2hhcnRUaGVtZUNvbmZpZz1uO3RoaXMuYm91bmRpbmdSZWN0PXt4OjAseTowLHdpZHRoOjAsaGVpZ2h0OjB9fXN0YXRpY3tvKHRoaXMsIkJhc2VQbG90Iil9c2V0QXhlcyhlLHIpe3RoaXMueEF4aXM9ZSx0aGlzLnlBeGlzPXJ9c2V0Qm91bmRpbmdCb3hYWShlKXt0aGlzLmJvdW5kaW5nUmVjdC54PWUueCx0aGlzLmJvdW5kaW5nUmVjdC55PWUueX1jYWxjdWxhdGVTcGFjZShlKXtyZXR1cm4gdGhpcy5ib3VuZGluZ1JlY3Qud2lkdGg9ZS53aWR0aCx0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHQ9ZS5oZWlnaHQse3dpZHRoOnRoaXMuYm91bmRpbmdSZWN0LndpZHRoLGhlaWdodDp0aGlzLmJvdW5kaW5nUmVjdC5oZWlnaHR9fWdldERyYXdhYmxlRWxlbWVudHMoKXtpZighKHRoaXMueEF4aXMmJnRoaXMueUF4aXMpKXRocm93IEVycm9yKCJBeGVzIG11c3QgYmUgcGFzc2VkIHRvIHJlbmRlciBQbG90cyIpO2xldCBlPVtdO2ZvcihsZXRbcixuXW9mIHRoaXMuY2hhcnREYXRhLnBsb3RzLmVudHJpZXMoKSlzd2l0Y2gobi50eXBlKXtjYXNlImxpbmUiOntsZXQgaT1uZXcgR1Mobix0aGlzLnhBeGlzLHRoaXMueUF4aXMsdGhpcy5jaGFydENvbmZpZy5jaGFydE9yaWVudGF0aW9uLHIpO2UucHVzaCguLi5pLmdldERyYXdhYmxlRWxlbWVudCgpKX1icmVhaztjYXNlImJhciI6e2xldCBpPW5ldyBWUyhuLHRoaXMuYm91bmRpbmdSZWN0LHRoaXMueEF4aXMsdGhpcy55QXhpcyx0aGlzLmNoYXJ0Q29uZmlnLmNoYXJ0T3JpZW50YXRpb24scik7ZS5wdXNoKC4uLmkuZ2V0RHJhd2FibGVFbGVtZW50KCkpfWJyZWFrfXJldHVybiBlfX07byhKZmUsImdldFBsb3RDb21wb25lbnQiKX0pO3ZhciBVUyx0ZGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtYZmUoKTtLZmUoKTtlZGUoKTtGUygpO1VTPWNsYXNze2NvbnN0cnVjdG9yKGUscixuLGkpe3RoaXMuY2hhcnRDb25maWc9ZTt0aGlzLmNoYXJ0RGF0YT1yO3RoaXMuY29tcG9uZW50U3RvcmU9e3RpdGxlOmpmZShlLHIsbixpKSxwbG90OkpmZShlLHIsbikseEF4aXM6YVAoci54QXhpcyxlLnhBeGlzLHt0aXRsZUNvbG9yOm4ueEF4aXNUaXRsZUNvbG9yLGxhYmVsQ29sb3I6bi54QXhpc0xhYmVsQ29sb3IsdGlja0NvbG9yOm4ueEF4aXNUaWNrQ29sb3IsYXhpc0xpbmVDb2xvcjpuLnhBeGlzTGluZUNvbG9yfSxpKSx5QXhpczphUChyLnlBeGlzLGUueUF4aXMse3RpdGxlQ29sb3I6bi55QXhpc1RpdGxlQ29sb3IsbGFiZWxDb2xvcjpuLnlBeGlzTGFiZWxDb2xvcix0aWNrQ29sb3I6bi55QXhpc1RpY2tDb2xvcixheGlzTGluZUNvbG9yOm4ueUF4aXNMaW5lQ29sb3J9LGkpfX1zdGF0aWN7byh0aGlzLCJPcmNoZXN0cmF0b3IiKX1jYWxjdWxhdGVWZXJ0aWNhbFNwYWNlKCl7bGV0IGU9dGhpcy5jaGFydENvbmZpZy53aWR0aCxyPXRoaXMuY2hhcnRDb25maWcuaGVpZ2h0LG49MCxpPTAsYT1NYXRoLmZsb29yKGUqdGhpcy5jaGFydENvbmZpZy5wbG90UmVzZXJ2ZWRTcGFjZVBlcmNlbnQvMTAwKSxzPU1hdGguZmxvb3Iocip0aGlzLmNoYXJ0Q29uZmlnLnBsb3RSZXNlcnZlZFNwYWNlUGVyY2VudC8xMDApLGw9dGhpcy5jb21wb25lbnRTdG9yZS5wbG90LmNhbGN1bGF0ZVNwYWNlKHt3aWR0aDphLGhlaWdodDpzfSk7ZS09bC53aWR0aCxyLT1sLmhlaWdodCxsPXRoaXMuY29tcG9uZW50U3RvcmUudGl0bGUuY2FsY3VsYXRlU3BhY2Uoe3dpZHRoOnRoaXMuY2hhcnRDb25maWcud2lkdGgsaGVpZ2h0OnJ9KSxpPWwuaGVpZ2h0LHItPWwuaGVpZ2h0LHRoaXMuY29tcG9uZW50U3RvcmUueEF4aXMuc2V0QXhpc1Bvc2l0aW9uKCJib3R0b20iKSxsPXRoaXMuY29tcG9uZW50U3RvcmUueEF4aXMuY2FsY3VsYXRlU3BhY2Uoe3dpZHRoOmUsaGVpZ2h0OnJ9KSxyLT1sLmhlaWdodCx0aGlzLmNvbXBvbmVudFN0b3JlLnlBeGlzLnNldEF4aXNQb3NpdGlvbigibGVmdCIpLGw9dGhpcy5jb21wb25lbnRTdG9yZS55QXhpcy5jYWxjdWxhdGVTcGFjZSh7d2lkdGg6ZSxoZWlnaHQ6cn0pLG49bC53aWR0aCxlLT1sLndpZHRoLGU+MCYmKGErPWUsZT0wKSxyPjAmJihzKz1yLHI9MCksdGhpcy5jb21wb25lbnRTdG9yZS5wbG90LmNhbGN1bGF0ZVNwYWNlKHt3aWR0aDphLGhlaWdodDpzfSksdGhpcy5jb21wb25lbnRTdG9yZS5wbG90LnNldEJvdW5kaW5nQm94WFkoe3g6bix5Oml9KSx0aGlzLmNvbXBvbmVudFN0b3JlLnhBeGlzLnNldFJhbmdlKFtuLG4rYV0pLHRoaXMuY29tcG9uZW50U3RvcmUueEF4aXMuc2V0Qm91bmRpbmdCb3hYWSh7eDpuLHk6aStzfSksdGhpcy5jb21wb25lbnRTdG9yZS55QXhpcy5zZXRSYW5nZShbaSxpK3NdKSx0aGlzLmNvbXBvbmVudFN0b3JlLnlBeGlzLnNldEJvdW5kaW5nQm94WFkoe3g6MCx5Oml9KSx0aGlzLmNoYXJ0RGF0YS5wbG90cy5zb21lKHU9PnJQKHUpKSYmdGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5yZWNhbGN1bGF0ZU91dGVyUGFkZGluZ1RvRHJhd0JhcigpfWNhbGN1bGF0ZUhvcml6b250YWxTcGFjZSgpe2xldCBlPXRoaXMuY2hhcnRDb25maWcud2lkdGgscj10aGlzLmNoYXJ0Q29uZmlnLmhlaWdodCxuPTAsaT0wLGE9MCxzPU1hdGguZmxvb3IoZSp0aGlzLmNoYXJ0Q29uZmlnLnBsb3RSZXNlcnZlZFNwYWNlUGVyY2VudC8xMDApLGw9TWF0aC5mbG9vcihyKnRoaXMuY2hhcnRDb25maWcucGxvdFJlc2VydmVkU3BhY2VQZXJjZW50LzEwMCksdT10aGlzLmNvbXBvbmVudFN0b3JlLnBsb3QuY2FsY3VsYXRlU3BhY2Uoe3dpZHRoOnMsaGVpZ2h0Omx9KTtlLT11LndpZHRoLHItPXUuaGVpZ2h0LHU9dGhpcy5jb21wb25lbnRTdG9yZS50aXRsZS5jYWxjdWxhdGVTcGFjZSh7d2lkdGg6dGhpcy5jaGFydENvbmZpZy53aWR0aCxoZWlnaHQ6cn0pLG49dS5oZWlnaHQsci09dS5oZWlnaHQsdGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5zZXRBeGlzUG9zaXRpb24oImxlZnQiKSx1PXRoaXMuY29tcG9uZW50U3RvcmUueEF4aXMuY2FsY3VsYXRlU3BhY2Uoe3dpZHRoOmUsaGVpZ2h0OnJ9KSxlLT11LndpZHRoLGk9dS53aWR0aCx0aGlzLmNvbXBvbmVudFN0b3JlLnlBeGlzLnNldEF4aXNQb3NpdGlvbigidG9wIiksdT10aGlzLmNvbXBvbmVudFN0b3JlLnlBeGlzLmNhbGN1bGF0ZVNwYWNlKHt3aWR0aDplLGhlaWdodDpyfSksci09dS5oZWlnaHQsYT1uK3UuaGVpZ2h0LGU+MCYmKHMrPWUsZT0wKSxyPjAmJihsKz1yLHI9MCksdGhpcy5jb21wb25lbnRTdG9yZS5wbG90LmNhbGN1bGF0ZVNwYWNlKHt3aWR0aDpzLGhlaWdodDpsfSksdGhpcy5jb21wb25lbnRTdG9yZS5wbG90LnNldEJvdW5kaW5nQm94WFkoe3g6aSx5OmF9KSx0aGlzLmNvbXBvbmVudFN0b3JlLnlBeGlzLnNldFJhbmdlKFtpLGkrc10pLHRoaXMuY29tcG9uZW50U3RvcmUueUF4aXMuc2V0Qm91bmRpbmdCb3hYWSh7eDppLHk6bn0pLHRoaXMuY29tcG9uZW50U3RvcmUueEF4aXMuc2V0UmFuZ2UoW2EsYStsXSksdGhpcy5jb21wb25lbnRTdG9yZS54QXhpcy5zZXRCb3VuZGluZ0JveFhZKHt4OjAseTphfSksdGhpcy5jaGFydERhdGEucGxvdHMuc29tZShoPT5yUChoKSkmJnRoaXMuY29tcG9uZW50U3RvcmUueEF4aXMucmVjYWxjdWxhdGVPdXRlclBhZGRpbmdUb0RyYXdCYXIoKX1jYWxjdWxhdGVTcGFjZSgpe3RoaXMuY2hhcnRDb25maWcuY2hhcnRPcmllbnRhdGlvbj09PSJob3Jpem9udGFsIj90aGlzLmNhbGN1bGF0ZUhvcml6b250YWxTcGFjZSgpOnRoaXMuY2FsY3VsYXRlVmVydGljYWxTcGFjZSgpfWdldERyYXdhYmxlRWxlbWVudCgpe3RoaXMuY2FsY3VsYXRlU3BhY2UoKTtsZXQgZT1bXTt0aGlzLmNvbXBvbmVudFN0b3JlLnBsb3Quc2V0QXhlcyh0aGlzLmNvbXBvbmVudFN0b3JlLnhBeGlzLHRoaXMuY29tcG9uZW50U3RvcmUueUF4aXMpO2ZvcihsZXQgciBvZiBPYmplY3QudmFsdWVzKHRoaXMuY29tcG9uZW50U3RvcmUpKWUucHVzaCguLi5yLmdldERyYXdhYmxlRWxlbWVudHMoKSk7cmV0dXJuIGV9fX0pO3ZhciBIUyxyZGU9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt0ZGUoKTtIUz1jbGFzc3tzdGF0aWN7byh0aGlzLCJYWUNoYXJ0QnVpbGRlciIpfXN0YXRpYyBidWlsZChlLHIsbixpKXtyZXR1cm4gbmV3IFVTKGUscixuLGkpLmdldERyYXdhYmxlRWxlbWVudCgpfX19KTtmdW5jdGlvbiBpZGUoKXtsZXQgdD1kaCgpLGU9dHIoKTtyZXR1cm4gJG4odC54eUNoYXJ0LGUudGhlbWVWYXJpYWJsZXMueHlDaGFydCl9ZnVuY3Rpb24gYWRlKCl7bGV0IHQ9dHIoKTtyZXR1cm4gJG4ob3IueHlDaGFydCx0Lnh5Q2hhcnQpfWZ1bmN0aW9uIHNkZSgpe3JldHVybnt5QXhpczp7dHlwZToibGluZWFyIix0aXRsZToiIixtaW46MS8wLG1heDotMS8wfSx4QXhpczp7dHlwZToiYmFuZCIsdGl0bGU6IiIsY2F0ZWdvcmllczpbXX0sdGl0bGU6IiIscGxvdHM6W119fWZ1bmN0aW9uIHVQKHQpe2xldCBlPXRyKCk7cmV0dXJuIHdyKHQudHJpbSgpLGUpfWZ1bmN0aW9uIGRVZSh0KXtuZGU9dH1mdW5jdGlvbiBwVWUodCl7dD09PSJob3Jpem9udGFsIj9SYi5jaGFydE9yaWVudGF0aW9uPSJob3Jpem9udGFsIjpSYi5jaGFydE9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCJ9ZnVuY3Rpb24gbVVlKHQpe2NuLnhBeGlzLnRpdGxlPXVQKHQudGV4dCl9ZnVuY3Rpb24gb2RlKHQsZSl7Y24ueEF4aXM9e3R5cGU6ImxpbmVhciIsdGl0bGU6Y24ueEF4aXMudGl0bGUsbWluOnQsbWF4OmV9LFdTPSEwfWZ1bmN0aW9uIGdVZSh0KXtjbi54QXhpcz17dHlwZToiYmFuZCIsdGl0bGU6Y24ueEF4aXMudGl0bGUsY2F0ZWdvcmllczp0Lm1hcChlPT51UChlLnRleHQpKX0sV1M9ITB9ZnVuY3Rpb24geVVlKHQpe2NuLnlBeGlzLnRpdGxlPXVQKHQudGV4dCl9ZnVuY3Rpb24gdlVlKHQsZSl7Y24ueUF4aXM9e3R5cGU6ImxpbmVhciIsdGl0bGU6Y24ueUF4aXMudGl0bGUsbWluOnQsbWF4OmV9LGNQPSEwfWZ1bmN0aW9uIHhVZSh0KXtsZXQgZT1NYXRoLm1pbiguLi50KSxyPU1hdGgubWF4KC4uLnQpLG49TjEoY24ueUF4aXMpP2NuLnlBeGlzLm1pbjoxLzAsaT1OMShjbi55QXhpcyk/Y24ueUF4aXMubWF4Oi0xLzA7Y24ueUF4aXM9e3R5cGU6ImxpbmVhciIsdGl0bGU6Y24ueUF4aXMudGl0bGUsbWluOk1hdGgubWluKG4sZSksbWF4Ok1hdGgubWF4KGkscil9fWZ1bmN0aW9uIGxkZSh0KXtsZXQgZT1bXTtpZih0Lmxlbmd0aD09PTApcmV0dXJuIGU7aWYoIVdTKXtsZXQgcj1OMShjbi54QXhpcyk/Y24ueEF4aXMubWluOjEvMCxuPU4xKGNuLnhBeGlzKT9jbi54QXhpcy5tYXg6LTEvMDtvZGUoTWF0aC5taW4ociwxKSxNYXRoLm1heChuLHQubGVuZ3RoKSl9aWYoY1B8fHhVZSh0KSxCUyhjbi54QXhpcykmJihlPWNuLnhBeGlzLmNhdGVnb3JpZXMubWFwKChyLG4pPT5bcix0W25dXSkpLE4xKGNuLnhBeGlzKSl7bGV0IHI9Y24ueEF4aXMubWluLG49Y24ueEF4aXMubWF4LGk9KG4tcikvKHQubGVuZ3RoLTEpLGE9W107Zm9yKGxldCBzPXI7czw9bjtzKz1pKWEucHVzaChgJHtzfWApO2U9YS5tYXAoKHMsbCk9PltzLHRbbF1dKX1yZXR1cm4gZX1mdW5jdGlvbiBjZGUodCl7cmV0dXJuIGxQW3Q9PT0wPzA6dCVsUC5sZW5ndGhdfWZ1bmN0aW9uIGJVZSh0LGUpe2xldCByPWxkZShlKTtjbi5wbG90cy5wdXNoKHt0eXBlOiJsaW5lIixzdHJva2VGaWxsOmNkZShMYiksc3Ryb2tlV2lkdGg6MixkYXRhOnJ9KSxMYisrfWZ1bmN0aW9uIFRVZSh0LGUpe2xldCByPWxkZShlKTtjbi5wbG90cy5wdXNoKHt0eXBlOiJiYXIiLGZpbGw6Y2RlKExiKSxkYXRhOnJ9KSxMYisrfWZ1bmN0aW9uIHdVZSgpe2lmKGNuLnBsb3RzLmxlbmd0aD09PTApdGhyb3cgRXJyb3IoIk5vIFBsb3QgdG8gcmVuZGVyLCBwbGVhc2UgcHJvdmlkZSBhIHBsb3Qgd2l0aCBzb21lIGRhdGEiKTtyZXR1cm4gY24udGl0bGU9TnIoKSxIUy5idWlsZChSYixjbixOYixuZGUpfWZ1bmN0aW9uIGtVZSgpe3JldHVybiBOYn1mdW5jdGlvbiBFVWUoKXtyZXR1cm4gUmJ9ZnVuY3Rpb24gU1VlKCl7cmV0dXJuIGNufXZhciBMYixuZGUsUmIsTmIsY24sbFAsV1MsY1AsQ1VlLHVkZSxoZGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjttaSgpO19hKCk7QnkoKTtlcigpO3ByKCk7Y2koKTtyZGUoKTtGUygpO0xiPTAsUmI9YWRlKCksTmI9aWRlKCksY249c2RlKCksbFA9TmIucGxvdENvbG9yUGFsZXR0ZS5zcGxpdCgiLCIpLm1hcCh0PT50LnRyaW0oKSksV1M9ITEsY1A9ITE7byhpZGUsImdldENoYXJ0RGVmYXVsdFRoZW1lQ29uZmlnIik7byhhZGUsImdldENoYXJ0RGVmYXVsdENvbmZpZyIpO28oc2RlLCJnZXRDaGFydERlZmF1bHREYXRhIik7byh1UCwidGV4dFNhbml0aXplciIpO28oZFVlLCJzZXRUbXBTVkdHIik7byhwVWUsInNldE9yaWVudGF0aW9uIik7byhtVWUsInNldFhBeGlzVGl0bGUiKTtvKG9kZSwic2V0WEF4aXNSYW5nZURhdGEiKTtvKGdVZSwic2V0WEF4aXNCYW5kIik7byh5VWUsInNldFlBeGlzVGl0bGUiKTtvKHZVZSwic2V0WUF4aXNSYW5nZURhdGEiKTtvKHhVZSwic2V0WUF4aXNSYW5nZUZyb21QbG90RGF0YSIpO28obGRlLCJ0cmFuc2Zvcm1EYXRhV2l0aG91dENhdGVnb3J5Iik7byhjZGUsImdldFBsb3RDb2xvckZyb21QYWxldHRlIik7byhiVWUsInNldExpbmVEYXRhIik7byhUVWUsInNldEJhckRhdGEiKTtvKHdVZSwiZ2V0RHJhd2FibGVFbGVtIik7byhrVWUsImdldENoYXJ0VGhlbWVDb25maWciKTtvKEVVZSwiZ2V0Q2hhcnRDb25maWciKTtvKFNVZSwiZ2V0WFlDaGFydERhdGEiKTtDVWU9byhmdW5jdGlvbigpe2tyKCksTGI9MCxSYj1hZGUoKSxjbj1zZGUoKSxOYj1pZGUoKSxsUD1OYi5wbG90Q29sb3JQYWxldHRlLnNwbGl0KCIsIikubWFwKHQ9PnQudHJpbSgpKSxXUz0hMSxjUD0hMX0sImNsZWFyIiksdWRlPXtnZXREcmF3YWJsZUVsZW06d1VlLGNsZWFyOkNVZSxzZXRBY2NUaXRsZTpBcixnZXRBY2NUaXRsZTpEcixzZXREaWFncmFtVGl0bGU6T3IsZ2V0RGlhZ3JhbVRpdGxlOk5yLGdldEFjY0Rlc2NyaXB0aW9uOlJyLHNldEFjY0Rlc2NyaXB0aW9uOkxyLHNldE9yaWVudGF0aW9uOnBVZSxzZXRYQXhpc1RpdGxlOm1VZSxzZXRYQXhpc1JhbmdlRGF0YTpvZGUsc2V0WEF4aXNCYW5kOmdVZSxzZXRZQXhpc1RpdGxlOnlVZSxzZXRZQXhpc1JhbmdlRGF0YTp2VWUsc2V0TGluZURhdGE6YlVlLHNldEJhckRhdGE6VFVlLHNldFRtcFNWR0c6ZFVlLGdldENoYXJ0VGhlbWVDb25maWc6a1VlLGdldENoYXJ0Q29uZmlnOkVVZSxnZXRYWUNoYXJ0RGF0YTpTVWV9fSk7dmFyIEFVZSxmZGUsZGRlPU4oKCk9PnsidXNlIHN0cmljdCI7eXQoKTtWbCgpO3hpKCk7QVVlPW8oKHQsZSxyLG4pPT57bGV0IGk9bi5kYixhPWkuZ2V0Q2hhcnRUaGVtZUNvbmZpZygpLHM9aS5nZXRDaGFydENvbmZpZygpLGw9aS5nZXRYWUNoYXJ0RGF0YSgpLnBsb3RzWzBdLmRhdGEubWFwKFQ9PlRbMV0pO2Z1bmN0aW9uIHUoVCl7cmV0dXJuIFQ9PT0idG9wIj8idGV4dC1iZWZvcmUtZWRnZSI6Im1pZGRsZSJ9byh1LCJnZXREb21pbmFudEJhc2VMaW5lIik7ZnVuY3Rpb24gaChUKXtyZXR1cm4gVD09PSJsZWZ0Ij8ic3RhcnQiOlQ9PT0icmlnaHQiPyJlbmQiOiJtaWRkbGUifW8oaCwiZ2V0VGV4dEFuY2hvciIpO2Z1bmN0aW9uIGYoVCl7cmV0dXJuYHRyYW5zbGF0ZSgke1QueH0sICR7VC55fSkgcm90YXRlKCR7VC5yb3RhdGlvbnx8MH0pYH1vKGYsImdldFRleHRUcmFuc2Zvcm1hdGlvbiIpLFguZGVidWcoYFJlbmRlcmluZyB4eWNoYXJ0IGNoYXJ0CmArdCk7bGV0IGQ9TGkoZSkscD1kLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibWFpbiIpLG09cC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ3aWR0aCIscy53aWR0aCkuYXR0cigiaGVpZ2h0IixzLmhlaWdodCkuYXR0cigiY2xhc3MiLCJiYWNrZ3JvdW5kIik7Zm4oZCxzLmhlaWdodCxzLndpZHRoLCEwKSxkLmF0dHIoInZpZXdCb3giLGAwIDAgJHtzLndpZHRofSAke3MuaGVpZ2h0fWApLG0uYXR0cigiZmlsbCIsYS5iYWNrZ3JvdW5kQ29sb3IpLGkuc2V0VG1wU1ZHRyhkLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibWVybWFpZC10bXAtZ3JvdXAiKSk7bGV0IGc9aS5nZXREcmF3YWJsZUVsZW0oKSx5PXt9O2Z1bmN0aW9uIHYoVCl7bGV0IFM9cCx3PSIiO2ZvcihsZXRbRV1vZiBULmVudHJpZXMoKSl7bGV0IF89cDtFPjAmJnlbd10mJihfPXlbd10pLHcrPVRbRV0sUz15W3ddLFN8fChTPXlbd109Xy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsVFtFXSkpfXJldHVybiBTfW8odiwiZ2V0R3JvdXAiKTtmb3IobGV0IFQgb2YgZyl7aWYoVC5kYXRhLmxlbmd0aD09PTApY29udGludWU7bGV0IFM9dihULmdyb3VwVGV4dHMpO3N3aXRjaChULnR5cGUpe2Nhc2UicmVjdCI6aWYoUy5zZWxlY3RBbGwoInJlY3QiKS5kYXRhKFQuZGF0YSkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4Iix3PT53LngpLmF0dHIoInkiLHc9PncueSkuYXR0cigid2lkdGgiLHc9Pncud2lkdGgpLmF0dHIoImhlaWdodCIsdz0+dy5oZWlnaHQpLmF0dHIoImZpbGwiLHc9PncuZmlsbCkuYXR0cigic3Ryb2tlIix3PT53LnN0cm9rZUZpbGwpLmF0dHIoInN0cm9rZS13aWR0aCIsdz0+dy5zdHJva2VXaWR0aCkscy5zaG93RGF0YUxhYmVsKWlmKHMuY2hhcnRPcmllbnRhdGlvbj09PSJob3Jpem9udGFsIil7bGV0IF89ZnVuY3Rpb24oTyxSKXtsZXR7ZGF0YTprLGxhYmVsOkx9PU87cmV0dXJuIFIqTC5sZW5ndGgqLjc8PWsud2lkdGgtMTB9O3ZhciB4PV87byhfLCJmaXRzSG9yaXpvbnRhbGx5Iik7bGV0IHc9LjcsRT1ULmRhdGEubWFwKChPLFIpPT4oe2RhdGE6TyxsYWJlbDpsW1JdLnRvU3RyaW5nKCl9KSkuZmlsdGVyKE89Pk8uZGF0YS53aWR0aD4wJiZPLmRhdGEuaGVpZ2h0PjApLEM9RS5tYXAoTz0+e2xldHtkYXRhOlJ9PU8saz1SLmhlaWdodCouNztmb3IoOyFfKE8saykmJms+MDspay09MTtyZXR1cm4ga30pLEQ9TWF0aC5mbG9vcihNYXRoLm1pbiguLi5DKSk7Uy5zZWxlY3RBbGwoInRleHQiKS5kYXRhKEUpLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsTz0+Ty5kYXRhLngrTy5kYXRhLndpZHRoLTEwKS5hdHRyKCJ5IixPPT5PLmRhdGEueStPLmRhdGEuaGVpZ2h0LzIpLmF0dHIoInRleHQtYW5jaG9yIiwiZW5kIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJmaWxsIiwiYmxhY2siKS5hdHRyKCJmb250LXNpemUiLGAke0R9cHhgKS50ZXh0KE89Pk8ubGFiZWwpfWVsc2V7bGV0IF89ZnVuY3Rpb24oTyxSLGspe2xldHtkYXRhOkwsbGFiZWw6QX09TyxNPVIqQS5sZW5ndGgqLjcsUD1MLngrTC53aWR0aC8yLEI9UC1NLzIsRj1QK00vMix6PUI+PUwueCYmRjw9TC54K0wud2lkdGgsJD1MLnkraytSPD1MLnkrTC5oZWlnaHQ7cmV0dXJuIHomJiR9O3ZhciBiPV87byhfLCJmaXRzSW5CYXIiKTtsZXQgdz0xMCxFPVQuZGF0YS5tYXAoKE8sUik9Pih7ZGF0YTpPLGxhYmVsOmxbUl0udG9TdHJpbmcoKX0pKS5maWx0ZXIoTz0+Ty5kYXRhLndpZHRoPjAmJk8uZGF0YS5oZWlnaHQ+MCksQz1FLm1hcChPPT57bGV0e2RhdGE6UixsYWJlbDprfT1PLEw9Ui53aWR0aC8oay5sZW5ndGgqLjcpO2Zvcig7IV8oTyxMLDEwKSYmTD4wOylMLT0xO3JldHVybiBMfSksRD1NYXRoLmZsb29yKE1hdGgubWluKC4uLkMpKTtTLnNlbGVjdEFsbCgidGV4dCIpLmRhdGEoRSkuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixPPT5PLmRhdGEueCtPLmRhdGEud2lkdGgvMikuYXR0cigieSIsTz0+Ty5kYXRhLnkrMTApLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJoYW5naW5nIikuYXR0cigiZmlsbCIsImJsYWNrIikuYXR0cigiZm9udC1zaXplIixgJHtEfXB4YCkudGV4dChPPT5PLmxhYmVsKX1icmVhaztjYXNlInRleHQiOlMuc2VsZWN0QWxsKCJ0ZXh0IikuZGF0YShULmRhdGEpLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigiZmlsbCIsdz0+dy5maWxsKS5hdHRyKCJmb250LXNpemUiLHc9PncuZm9udFNpemUpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIix3PT51KHcudmVydGljYWxQb3MpKS5hdHRyKCJ0ZXh0LWFuY2hvciIsdz0+aCh3Lmhvcml6b250YWxQb3MpKS5hdHRyKCJ0cmFuc2Zvcm0iLHc9PmYodykpLnRleHQodz0+dy50ZXh0KTticmVhaztjYXNlInBhdGgiOlMuc2VsZWN0QWxsKCJwYXRoIikuZGF0YShULmRhdGEpLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsdz0+dy5wYXRoKS5hdHRyKCJmaWxsIix3PT53LmZpbGw/dy5maWxsOiJub25lIikuYXR0cigic3Ryb2tlIix3PT53LnN0cm9rZUZpbGwpLmF0dHIoInN0cm9rZS13aWR0aCIsdz0+dy5zdHJva2VXaWR0aCk7YnJlYWt9fX0sImRyYXciKSxmZGU9e2RyYXc6QVVlfX0pO3ZhciBwZGU9e307dXIocGRlLHtkaWFncmFtOigpPT5fVWV9KTt2YXIgX1VlLG1kZT1OKCgpPT57InVzZSBzdHJpY3QiO1dmZSgpO2hkZSgpO2RkZSgpO19VZT17cGFyc2VyOkhmZSxkYjp1ZGUscmVuZGVyZXI6ZmRlfX0pO3ZhciBoUCx2ZGUseGRlPU4oKCk9PnsidXNlIHN0cmljdCI7aFA9ZnVuY3Rpb24oKXt2YXIgdD1vKGZ1bmN0aW9uKGllLG9lLFYsVGUpe2ZvcihWPVZ8fHt9LFRlPWllLmxlbmd0aDtUZS0tO1ZbaWVbVGVdXT1vZSk7cmV0dXJuIFZ9LCJvIiksZT1bMSwzXSxyPVsxLDRdLG49WzEsNV0saT1bMSw2XSxhPVs1LDYsOCw5LDExLDEzLDIxLDIyLDIzLDI0LDQxLDQyLDQzLDQ0LDQ1LDQ2LDU0LDcyLDc0LDc3LDg5LDkwXSxzPVsxLDIyXSxsPVsyLDddLHU9WzEsMjZdLGg9WzEsMjddLGY9WzEsMjhdLGQ9WzEsMjldLHA9WzEsMzNdLG09WzEsMzRdLGc9WzEsMzVdLHk9WzEsMzZdLHY9WzEsMzddLHg9WzEsMzhdLGI9WzEsMjRdLFQ9WzEsMzFdLFM9WzEsMzJdLHc9WzEsMzBdLEU9WzEsMzldLF89WzEsNDBdLEM9WzUsOCw5LDExLDEzLDIxLDIyLDIzLDI0LDQxLDQyLDQzLDQ0LDQ1LDQ2LDU0LDcyLDc0LDc3LDg5LDkwXSxEPVsxLDYxXSxPPVs4OSw5MF0sUj1bNSw4LDksMTEsMTMsMjEsMjIsMjMsMjQsMjcsMjksNDEsNDIsNDMsNDQsNDUsNDYsNTQsNjEsNjMsNzIsNzQsNzUsNzYsNzcsODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTBdLGs9WzI3LDI5XSxMPVsxLDcwXSxBPVsxLDcxXSxJPVsxLDcyXSxNPVsxLDczXSxQPVsxLDc0XSxCPVsxLDc1XSxGPVsxLDc2XSx6PVsxLDgzXSwkPVsxLDgwXSxVPVsxLDg0XSxLPVsxLDg1XSxlZT1bMSw4Nl0sWT1bMSw4N10sY2U9WzEsODhdLFo9WzEsODldLHVlPVsxLDkwXSxRPVsxLDkxXSxqPVsxLDkyXSxuZT1bNSw4LDksMTEsMTMsMjEsMjIsMjMsMjQsMjcsNDEsNDIsNDMsNDQsNDUsNDYsNTQsNzIsNzQsNzUsNzYsNzcsODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTBdLHRlPVs2Myw2NF0saGU9WzEsMTAxXSxsZT1bNSw4LDksMTEsMTMsMjEsMjIsMjMsMjQsNDEsNDIsNDMsNDQsNDUsNDYsNTQsNzIsNzQsNzYsNzcsODksOTBdLEo9WzUsOCw5LDExLDEzLDIxLDIyLDIzLDI0LDQxLDQyLDQzLDQ0LDQ1LDQ2LDU0LDcyLDc0LDc1LDc2LDc3LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwXSxTZT1bMSwxMTBdLHNlPVsxLDEwNl0sYWU9WzEsMTA3XSxPZT1bMSwxMDhdLHllPVsxLDEwOV0sQmU9WzEsMTExXSxIZT1bMSwxMTZdLHplPVsxLDExN10sTGU9WzEsMTE0XSxJZT1bMSwxMTVdLHhlPXt0cmFjZTpvKGZ1bmN0aW9uKCl7fSwidHJhY2UiKSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGRpcmVjdGl2ZTo0LE5FV0xJTkU6NSxSRDo2LGRpYWdyYW06NyxFT0Y6OCxhY2NfdGl0bGU6OSxhY2NfdGl0bGVfdmFsdWU6MTAsYWNjX2Rlc2NyOjExLGFjY19kZXNjcl92YWx1ZToxMixhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjEzLHJlcXVpcmVtZW50RGVmOjE0LGVsZW1lbnREZWY6MTUscmVsYXRpb25zaGlwRGVmOjE2LGRpcmVjdGlvbjoxNyxzdHlsZVN0YXRlbWVudDoxOCxjbGFzc0RlZlN0YXRlbWVudDoxOSxjbGFzc1N0YXRlbWVudDoyMCxkaXJlY3Rpb25fdGI6MjEsZGlyZWN0aW9uX2J0OjIyLGRpcmVjdGlvbl9ybDoyMyxkaXJlY3Rpb25fbHI6MjQscmVxdWlyZW1lbnRUeXBlOjI1LHJlcXVpcmVtZW50TmFtZToyNixTVFJVQ1RfU1RBUlQ6MjcscmVxdWlyZW1lbnRCb2R5OjI4LFNUWUxFX1NFUEFSQVRPUjoyOSxpZExpc3Q6MzAsSUQ6MzEsQ09MT05TRVA6MzIsaWQ6MzMsVEVYVDozNCx0ZXh0OjM1LFJJU0s6MzYscmlza0xldmVsOjM3LFZFUklGWU1USEQ6MzgsdmVyaWZ5VHlwZTozOSxTVFJVQ1RfU1RPUDo0MCxSRVFVSVJFTUVOVDo0MSxGVU5DVElPTkFMX1JFUVVJUkVNRU5UOjQyLElOVEVSRkFDRV9SRVFVSVJFTUVOVDo0MyxQRVJGT1JNQU5DRV9SRVFVSVJFTUVOVDo0NCxQSFlTSUNBTF9SRVFVSVJFTUVOVDo0NSxERVNJR05fQ09OU1RSQUlOVDo0NixMT1dfUklTSzo0NyxNRURfUklTSzo0OCxISUdIX1JJU0s6NDksVkVSSUZZX0FOQUxZU0lTOjUwLFZFUklGWV9ERU1PTlNUUkFUSU9OOjUxLFZFUklGWV9JTlNQRUNUSU9OOjUyLFZFUklGWV9URVNUOjUzLEVMRU1FTlQ6NTQsZWxlbWVudE5hbWU6NTUsZWxlbWVudEJvZHk6NTYsVFlQRTo1Nyx0eXBlOjU4LERPQ1JFRjo1OSxyZWY6NjAsRU5EX0FSUk9XX0w6NjEscmVsYXRpb25zaGlwOjYyLExJTkU6NjMsRU5EX0FSUk9XX1I6NjQsQ09OVEFJTlM6NjUsQ09QSUVTOjY2LERFUklWRVM6NjcsU0FUSVNGSUVTOjY4LFZFUklGSUVTOjY5LFJFRklORVM6NzAsVFJBQ0VTOjcxLENMQVNTREVGOjcyLHN0eWxlc09wdDo3MyxDTEFTUzo3NCxBTFBIQTo3NSxDT01NQTo3NixTVFlMRTo3NyxzdHlsZTo3OCxzdHlsZUNvbXBvbmVudDo3OSxOVU06ODAsQ09MT046ODEsVU5JVDo4MixTUEFDRTo4MyxCUktUOjg0LFBDVDo4NSxNSU5VUzo4NixMQUJFTDo4NyxTRU1JQ09MT046ODgsdW5xU3RyaW5nOjg5LHFTdHJpbmc6OTAsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDU6Ik5FV0xJTkUiLDY6IlJEIiw4OiJFT0YiLDk6ImFjY190aXRsZSIsMTA6ImFjY190aXRsZV92YWx1ZSIsMTE6ImFjY19kZXNjciIsMTI6ImFjY19kZXNjcl92YWx1ZSIsMTM6ImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiLDIxOiJkaXJlY3Rpb25fdGIiLDIyOiJkaXJlY3Rpb25fYnQiLDIzOiJkaXJlY3Rpb25fcmwiLDI0OiJkaXJlY3Rpb25fbHIiLDI3OiJTVFJVQ1RfU1RBUlQiLDI5OiJTVFlMRV9TRVBBUkFUT1IiLDMxOiJJRCIsMzI6IkNPTE9OU0VQIiwzNDoiVEVYVCIsMzY6IlJJU0siLDM4OiJWRVJJRllNVEhEIiw0MDoiU1RSVUNUX1NUT1AiLDQxOiJSRVFVSVJFTUVOVCIsNDI6IkZVTkNUSU9OQUxfUkVRVUlSRU1FTlQiLDQzOiJJTlRFUkZBQ0VfUkVRVUlSRU1FTlQiLDQ0OiJQRVJGT1JNQU5DRV9SRVFVSVJFTUVOVCIsNDU6IlBIWVNJQ0FMX1JFUVVJUkVNRU5UIiw0NjoiREVTSUdOX0NPTlNUUkFJTlQiLDQ3OiJMT1dfUklTSyIsNDg6Ik1FRF9SSVNLIiw0OToiSElHSF9SSVNLIiw1MDoiVkVSSUZZX0FOQUxZU0lTIiw1MToiVkVSSUZZX0RFTU9OU1RSQVRJT04iLDUyOiJWRVJJRllfSU5TUEVDVElPTiIsNTM6IlZFUklGWV9URVNUIiw1NDoiRUxFTUVOVCIsNTc6IlRZUEUiLDU5OiJET0NSRUYiLDYxOiJFTkRfQVJST1dfTCIsNjM6IkxJTkUiLDY0OiJFTkRfQVJST1dfUiIsNjU6IkNPTlRBSU5TIiw2NjoiQ09QSUVTIiw2NzoiREVSSVZFUyIsNjg6IlNBVElTRklFUyIsNjk6IlZFUklGSUVTIiw3MDoiUkVGSU5FUyIsNzE6IlRSQUNFUyIsNzI6IkNMQVNTREVGIiw3NDoiQ0xBU1MiLDc1OiJBTFBIQSIsNzY6IkNPTU1BIiw3NzoiU1RZTEUiLDgwOiJOVU0iLDgxOiJDT0xPTiIsODI6IlVOSVQiLDgzOiJTUEFDRSIsODQ6IkJSS1QiLDg1OiJQQ1QiLDg2OiJNSU5VUyIsODc6IkxBQkVMIiw4ODoiU0VNSUNPTE9OIiw4OToidW5xU3RyaW5nIiw5MDoicVN0cmluZyJ9LHByb2R1Y3Rpb25zXzpbMCxbMywzXSxbMywyXSxbMyw0XSxbNCwyXSxbNCwyXSxbNCwxXSxbNywwXSxbNywyXSxbNywyXSxbNywyXSxbNywyXSxbNywyXSxbNywyXSxbNywyXSxbNywyXSxbNywyXSxbMTcsMV0sWzE3LDFdLFsxNywxXSxbMTcsMV0sWzE0LDVdLFsxNCw3XSxbMjgsNV0sWzI4LDVdLFsyOCw1XSxbMjgsNV0sWzI4LDJdLFsyOCwxXSxbMjUsMV0sWzI1LDFdLFsyNSwxXSxbMjUsMV0sWzI1LDFdLFsyNSwxXSxbMzcsMV0sWzM3LDFdLFszNywxXSxbMzksMV0sWzM5LDFdLFszOSwxXSxbMzksMV0sWzE1LDVdLFsxNSw3XSxbNTYsNV0sWzU2LDVdLFs1NiwyXSxbNTYsMV0sWzE2LDVdLFsxNiw1XSxbNjIsMV0sWzYyLDFdLFs2MiwxXSxbNjIsMV0sWzYyLDFdLFs2MiwxXSxbNjIsMV0sWzE5LDNdLFsyMCwzXSxbMjAsM10sWzMwLDFdLFszMCwzXSxbMzAsMV0sWzMwLDNdLFsxOCwzXSxbNzMsMV0sWzczLDNdLFs3OCwxXSxbNzgsMl0sWzc5LDFdLFs3OSwxXSxbNzksMV0sWzc5LDFdLFs3OSwxXSxbNzksMV0sWzc5LDFdLFs3OSwxXSxbNzksMV0sWzc5LDFdLFsyNiwxXSxbMjYsMV0sWzMzLDFdLFszMywxXSxbMzUsMV0sWzM1LDFdLFs1NSwxXSxbNTUsMV0sWzU4LDFdLFs1OCwxXSxbNjAsMV0sWzYwLDFdXSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24ob2UsVixUZSxXLHBlLHZlLFBlKXt2YXIgX2U9dmUubGVuZ3RoLTE7c3dpdGNoKHBlKXtjYXNlIDQ6dGhpcy4kPXZlW19lXS50cmltKCksVy5zZXRBY2NUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgNTpjYXNlIDY6dGhpcy4kPXZlW19lXS50cmltKCksVy5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO2JyZWFrO2Nhc2UgNzp0aGlzLiQ9W107YnJlYWs7Y2FzZSAxNzpXLnNldERpcmVjdGlvbigiVEIiKTticmVhaztjYXNlIDE4Olcuc2V0RGlyZWN0aW9uKCJCVCIpO2JyZWFrO2Nhc2UgMTk6Vy5zZXREaXJlY3Rpb24oIlJMIik7YnJlYWs7Y2FzZSAyMDpXLnNldERpcmVjdGlvbigiTFIiKTticmVhaztjYXNlIDIxOlcuYWRkUmVxdWlyZW1lbnQodmVbX2UtM10sdmVbX2UtNF0pO2JyZWFrO2Nhc2UgMjI6Vy5hZGRSZXF1aXJlbWVudCh2ZVtfZS01XSx2ZVtfZS02XSksVy5zZXRDbGFzcyhbdmVbX2UtNV1dLHZlW19lLTNdKTticmVhaztjYXNlIDIzOlcuc2V0TmV3UmVxSWQodmVbX2UtMl0pO2JyZWFrO2Nhc2UgMjQ6Vy5zZXROZXdSZXFUZXh0KHZlW19lLTJdKTticmVhaztjYXNlIDI1Olcuc2V0TmV3UmVxUmlzayh2ZVtfZS0yXSk7YnJlYWs7Y2FzZSAyNjpXLnNldE5ld1JlcVZlcmlmeU1ldGhvZCh2ZVtfZS0yXSk7YnJlYWs7Y2FzZSAyOTp0aGlzLiQ9Vy5SZXF1aXJlbWVudFR5cGUuUkVRVUlSRU1FTlQ7YnJlYWs7Y2FzZSAzMDp0aGlzLiQ9Vy5SZXF1aXJlbWVudFR5cGUuRlVOQ1RJT05BTF9SRVFVSVJFTUVOVDticmVhaztjYXNlIDMxOnRoaXMuJD1XLlJlcXVpcmVtZW50VHlwZS5JTlRFUkZBQ0VfUkVRVUlSRU1FTlQ7YnJlYWs7Y2FzZSAzMjp0aGlzLiQ9Vy5SZXF1aXJlbWVudFR5cGUuUEVSRk9STUFOQ0VfUkVRVUlSRU1FTlQ7YnJlYWs7Y2FzZSAzMzp0aGlzLiQ9Vy5SZXF1aXJlbWVudFR5cGUuUEhZU0lDQUxfUkVRVUlSRU1FTlQ7YnJlYWs7Y2FzZSAzNDp0aGlzLiQ9Vy5SZXF1aXJlbWVudFR5cGUuREVTSUdOX0NPTlNUUkFJTlQ7YnJlYWs7Y2FzZSAzNTp0aGlzLiQ9Vy5SaXNrTGV2ZWwuTE9XX1JJU0s7YnJlYWs7Y2FzZSAzNjp0aGlzLiQ9Vy5SaXNrTGV2ZWwuTUVEX1JJU0s7YnJlYWs7Y2FzZSAzNzp0aGlzLiQ9Vy5SaXNrTGV2ZWwuSElHSF9SSVNLO2JyZWFrO2Nhc2UgMzg6dGhpcy4kPVcuVmVyaWZ5VHlwZS5WRVJJRllfQU5BTFlTSVM7YnJlYWs7Y2FzZSAzOTp0aGlzLiQ9Vy5WZXJpZnlUeXBlLlZFUklGWV9ERU1PTlNUUkFUSU9OO2JyZWFrO2Nhc2UgNDA6dGhpcy4kPVcuVmVyaWZ5VHlwZS5WRVJJRllfSU5TUEVDVElPTjticmVhaztjYXNlIDQxOnRoaXMuJD1XLlZlcmlmeVR5cGUuVkVSSUZZX1RFU1Q7YnJlYWs7Y2FzZSA0MjpXLmFkZEVsZW1lbnQodmVbX2UtM10pO2JyZWFrO2Nhc2UgNDM6Vy5hZGRFbGVtZW50KHZlW19lLTVdKSxXLnNldENsYXNzKFt2ZVtfZS01XV0sdmVbX2UtM10pO2JyZWFrO2Nhc2UgNDQ6Vy5zZXROZXdFbGVtZW50VHlwZSh2ZVtfZS0yXSk7YnJlYWs7Y2FzZSA0NTpXLnNldE5ld0VsZW1lbnREb2NSZWYodmVbX2UtMl0pO2JyZWFrO2Nhc2UgNDg6Vy5hZGRSZWxhdGlvbnNoaXAodmVbX2UtMl0sdmVbX2VdLHZlW19lLTRdKTticmVhaztjYXNlIDQ5OlcuYWRkUmVsYXRpb25zaGlwKHZlW19lLTJdLHZlW19lLTRdLHZlW19lXSk7YnJlYWs7Y2FzZSA1MDp0aGlzLiQ9Vy5SZWxhdGlvbnNoaXBzLkNPTlRBSU5TO2JyZWFrO2Nhc2UgNTE6dGhpcy4kPVcuUmVsYXRpb25zaGlwcy5DT1BJRVM7YnJlYWs7Y2FzZSA1Mjp0aGlzLiQ9Vy5SZWxhdGlvbnNoaXBzLkRFUklWRVM7YnJlYWs7Y2FzZSA1Mzp0aGlzLiQ9Vy5SZWxhdGlvbnNoaXBzLlNBVElTRklFUzticmVhaztjYXNlIDU0OnRoaXMuJD1XLlJlbGF0aW9uc2hpcHMuVkVSSUZJRVM7YnJlYWs7Y2FzZSA1NTp0aGlzLiQ9Vy5SZWxhdGlvbnNoaXBzLlJFRklORVM7YnJlYWs7Y2FzZSA1Njp0aGlzLiQ9Vy5SZWxhdGlvbnNoaXBzLlRSQUNFUzticmVhaztjYXNlIDU3OnRoaXMuJD12ZVtfZS0yXSxXLmRlZmluZUNsYXNzKHZlW19lLTFdLHZlW19lXSk7YnJlYWs7Y2FzZSA1ODpXLnNldENsYXNzKHZlW19lLTFdLHZlW19lXSk7YnJlYWs7Y2FzZSA1OTpXLnNldENsYXNzKFt2ZVtfZS0yXV0sdmVbX2VdKTticmVhaztjYXNlIDYwOmNhc2UgNjI6dGhpcy4kPVt2ZVtfZV1dO2JyZWFrO2Nhc2UgNjE6Y2FzZSA2Mzp0aGlzLiQ9dmVbX2UtMl0uY29uY2F0KFt2ZVtfZV1dKTticmVhaztjYXNlIDY0OnRoaXMuJD12ZVtfZS0yXSxXLnNldENzc1N0eWxlKHZlW19lLTFdLHZlW19lXSk7YnJlYWs7Y2FzZSA2NTp0aGlzLiQ9W3ZlW19lXV07YnJlYWs7Y2FzZSA2Njp2ZVtfZS0yXS5wdXNoKHZlW19lXSksdGhpcy4kPXZlW19lLTJdO2JyZWFrO2Nhc2UgNjg6dGhpcy4kPXZlW19lLTFdK3ZlW19lXTticmVha319LCJhbm9ueW1vdXMiKSx0YWJsZTpbezM6MSw0OjIsNjplLDk6ciwxMTpuLDEzOml9LHsxOlszXX0sezM6OCw0OjIsNTpbMSw3XSw2OmUsOTpyLDExOm4sMTM6aX0sezU6WzEsOV19LHsxMDpbMSwxMF19LHsxMjpbMSwxMV19LHQoYSxbMiw2XSksezM6MTIsNDoyLDY6ZSw5OnIsMTE6biwxMzppfSx7MTpbMiwyXX0sezQ6MTcsNTpzLDc6MTMsODpsLDk6ciwxMTpuLDEzOmksMTQ6MTQsMTU6MTUsMTY6MTYsMTc6MTgsMTg6MTksMTk6MjAsMjA6MjEsMjE6dSwyMjpoLDIzOmYsMjQ6ZCwyNToyMywzMzoyNSw0MTpwLDQyOm0sNDM6Zyw0NDp5LDQ1OnYsNDY6eCw1NDpiLDcyOlQsNzQ6Uyw3Nzp3LDg5OkUsOTA6X30sdChhLFsyLDRdKSx0KGEsWzIsNV0pLHsxOlsyLDFdfSx7ODpbMSw0MV19LHs0OjE3LDU6cyw3OjQyLDg6bCw5OnIsMTE6biwxMzppLDE0OjE0LDE1OjE1LDE2OjE2LDE3OjE4LDE4OjE5LDE5OjIwLDIwOjIxLDIxOnUsMjI6aCwyMzpmLDI0OmQsMjU6MjMsMzM6MjUsNDE6cCw0MjptLDQzOmcsNDQ6eSw0NTp2LDQ2OngsNTQ6Yiw3MjpULDc0OlMsNzc6dyw4OTpFLDkwOl99LHs0OjE3LDU6cyw3OjQzLDg6bCw5OnIsMTE6biwxMzppLDE0OjE0LDE1OjE1LDE2OjE2LDE3OjE4LDE4OjE5LDE5OjIwLDIwOjIxLDIxOnUsMjI6aCwyMzpmLDI0OmQsMjU6MjMsMzM6MjUsNDE6cCw0MjptLDQzOmcsNDQ6eSw0NTp2LDQ2OngsNTQ6Yiw3MjpULDc0OlMsNzc6dyw4OTpFLDkwOl99LHs0OjE3LDU6cyw3OjQ0LDg6bCw5OnIsMTE6biwxMzppLDE0OjE0LDE1OjE1LDE2OjE2LDE3OjE4LDE4OjE5LDE5OjIwLDIwOjIxLDIxOnUsMjI6aCwyMzpmLDI0OmQsMjU6MjMsMzM6MjUsNDE6cCw0MjptLDQzOmcsNDQ6eSw0NTp2LDQ2OngsNTQ6Yiw3MjpULDc0OlMsNzc6dyw4OTpFLDkwOl99LHs0OjE3LDU6cyw3OjQ1LDg6bCw5OnIsMTE6biwxMzppLDE0OjE0LDE1OjE1LDE2OjE2LDE3OjE4LDE4OjE5LDE5OjIwLDIwOjIxLDIxOnUsMjI6aCwyMzpmLDI0OmQsMjU6MjMsMzM6MjUsNDE6cCw0MjptLDQzOmcsNDQ6eSw0NTp2LDQ2OngsNTQ6Yiw3MjpULDc0OlMsNzc6dyw4OTpFLDkwOl99LHs0OjE3LDU6cyw3OjQ2LDg6bCw5OnIsMTE6biwxMzppLDE0OjE0LDE1OjE1LDE2OjE2LDE3OjE4LDE4OjE5LDE5OjIwLDIwOjIxLDIxOnUsMjI6aCwyMzpmLDI0OmQsMjU6MjMsMzM6MjUsNDE6cCw0MjptLDQzOmcsNDQ6eSw0NTp2LDQ2OngsNTQ6Yiw3MjpULDc0OlMsNzc6dyw4OTpFLDkwOl99LHs0OjE3LDU6cyw3OjQ3LDg6bCw5OnIsMTE6biwxMzppLDE0OjE0LDE1OjE1LDE2OjE2LDE3OjE4LDE4OjE5LDE5OjIwLDIwOjIxLDIxOnUsMjI6aCwyMzpmLDI0OmQsMjU6MjMsMzM6MjUsNDE6cCw0MjptLDQzOmcsNDQ6eSw0NTp2LDQ2OngsNTQ6Yiw3MjpULDc0OlMsNzc6dyw4OTpFLDkwOl99LHs0OjE3LDU6cyw3OjQ4LDg6bCw5OnIsMTE6biwxMzppLDE0OjE0LDE1OjE1LDE2OjE2LDE3OjE4LDE4OjE5LDE5OjIwLDIwOjIxLDIxOnUsMjI6aCwyMzpmLDI0OmQsMjU6MjMsMzM6MjUsNDE6cCw0MjptLDQzOmcsNDQ6eSw0NTp2LDQ2OngsNTQ6Yiw3MjpULDc0OlMsNzc6dyw4OTpFLDkwOl99LHs0OjE3LDU6cyw3OjQ5LDg6bCw5OnIsMTE6biwxMzppLDE0OjE0LDE1OjE1LDE2OjE2LDE3OjE4LDE4OjE5LDE5OjIwLDIwOjIxLDIxOnUsMjI6aCwyMzpmLDI0OmQsMjU6MjMsMzM6MjUsNDE6cCw0MjptLDQzOmcsNDQ6eSw0NTp2LDQ2OngsNTQ6Yiw3MjpULDc0OlMsNzc6dyw4OTpFLDkwOl99LHs0OjE3LDU6cyw3OjUwLDg6bCw5OnIsMTE6biwxMzppLDE0OjE0LDE1OjE1LDE2OjE2LDE3OjE4LDE4OjE5LDE5OjIwLDIwOjIxLDIxOnUsMjI6aCwyMzpmLDI0OmQsMjU6MjMsMzM6MjUsNDE6cCw0MjptLDQzOmcsNDQ6eSw0NTp2LDQ2OngsNTQ6Yiw3MjpULDc0OlMsNzc6dyw4OTpFLDkwOl99LHsyNjo1MSw4OTpbMSw1Ml0sOTA6WzEsNTNdfSx7NTU6NTQsODk6WzEsNTVdLDkwOlsxLDU2XX0sezI5OlsxLDU5XSw2MTpbMSw1N10sNjM6WzEsNThdfSx0KEMsWzIsMTddKSx0KEMsWzIsMThdKSx0KEMsWzIsMTldKSx0KEMsWzIsMjBdKSx7MzA6NjAsMzM6NjIsNzU6RCw4OTpFLDkwOl99LHszMDo2MywzMzo2Miw3NTpELDg5OkUsOTA6X30sezMwOjY0LDMzOjYyLDc1OkQsODk6RSw5MDpffSx0KE8sWzIsMjldKSx0KE8sWzIsMzBdKSx0KE8sWzIsMzFdKSx0KE8sWzIsMzJdKSx0KE8sWzIsMzNdKSx0KE8sWzIsMzRdKSx0KFIsWzIsODFdKSx0KFIsWzIsODJdKSx7MTpbMiwzXX0sezg6WzIsOF19LHs4OlsyLDldfSx7ODpbMiwxMF19LHs4OlsyLDExXX0sezg6WzIsMTJdfSx7ODpbMiwxM119LHs4OlsyLDE0XX0sezg6WzIsMTVdfSx7ODpbMiwxNl19LHsyNzpbMSw2NV0sMjk6WzEsNjZdfSx0KGssWzIsNzldKSx0KGssWzIsODBdKSx7Mjc6WzEsNjddLDI5OlsxLDY4XX0sdChrLFsyLDg1XSksdChrLFsyLDg2XSksezYyOjY5LDY1OkwsNjY6QSw2NzpJLDY4Ok0sNjk6UCw3MDpCLDcxOkZ9LHs2Mjo3Nyw2NTpMLDY2OkEsNjc6SSw2ODpNLDY5OlAsNzA6Qiw3MTpGfSx7MzA6NzgsMzM6NjIsNzU6RCw4OTpFLDkwOl99LHs3Mzo3OSw3NTp6LDc2OiQsNzg6ODEsNzk6ODIsODA6VSw4MTpLLDgyOmVlLDgzOlksODQ6Y2UsODU6Wiw4Njp1ZSw4NzpRLDg4Omp9LHQobmUsWzIsNjBdKSx0KG5lLFsyLDYyXSksezczOjkzLDc1OnosNzY6JCw3ODo4MSw3OTo4Miw4MDpVLDgxOkssODI6ZWUsODM6WSw4NDpjZSw4NTpaLDg2OnVlLDg3OlEsODg6an0sezMwOjk0LDMzOjYyLDc1OkQsNzY6JCw4OTpFLDkwOl99LHs1OlsxLDk1XX0sezMwOjk2LDMzOjYyLDc1OkQsODk6RSw5MDpffSx7NTpbMSw5N119LHszMDo5OCwzMzo2Miw3NTpELDg5OkUsOTA6X30sezYzOlsxLDk5XX0sdCh0ZSxbMiw1MF0pLHQodGUsWzIsNTFdKSx0KHRlLFsyLDUyXSksdCh0ZSxbMiw1M10pLHQodGUsWzIsNTRdKSx0KHRlLFsyLDU1XSksdCh0ZSxbMiw1Nl0pLHs2NDpbMSwxMDBdfSx0KEMsWzIsNTldLHs3NjokfSksdChDLFsyLDY0XSx7NzY6aGV9KSx7MzM6MTAzLDc1OlsxLDEwMl0sODk6RSw5MDpffSx0KGxlLFsyLDY1XSx7Nzk6MTA0LDc1OnosODA6VSw4MTpLLDgyOmVlLDgzOlksODQ6Y2UsODU6Wiw4Njp1ZSw4NzpRLDg4Omp9KSx0KEosWzIsNjddKSx0KEosWzIsNjldKSx0KEosWzIsNzBdKSx0KEosWzIsNzFdKSx0KEosWzIsNzJdKSx0KEosWzIsNzNdKSx0KEosWzIsNzRdKSx0KEosWzIsNzVdKSx0KEosWzIsNzZdKSx0KEosWzIsNzddKSx0KEosWzIsNzhdKSx0KEMsWzIsNTddLHs3NjpoZX0pLHQoQyxbMiw1OF0sezc2OiR9KSx7NTpTZSwyODoxMDUsMzE6c2UsMzQ6YWUsMzY6T2UsMzg6eWUsNDA6QmV9LHsyNzpbMSwxMTJdLDc2OiR9LHs1OkhlLDQwOnplLDU2OjExMyw1NzpMZSw1OTpJZX0sezI3OlsxLDExOF0sNzY6JH0sezMzOjExOSw4OTpFLDkwOl99LHszMzoxMjAsODk6RSw5MDpffSx7NzU6eiw3ODoxMjEsNzk6ODIsODA6VSw4MTpLLDgyOmVlLDgzOlksODQ6Y2UsODU6Wiw4Njp1ZSw4NzpRLDg4Omp9LHQobmUsWzIsNjFdKSx0KG5lLFsyLDYzXSksdChKLFsyLDY4XSksdChDLFsyLDIxXSksezMyOlsxLDEyMl19LHszMjpbMSwxMjNdfSx7MzI6WzEsMTI0XX0sezMyOlsxLDEyNV19LHs1OlNlLDI4OjEyNiwzMTpzZSwzNDphZSwzNjpPZSwzODp5ZSw0MDpCZX0sdChDLFsyLDI4XSksezU6WzEsMTI3XX0sdChDLFsyLDQyXSksezMyOlsxLDEyOF19LHszMjpbMSwxMjldfSx7NTpIZSw0MDp6ZSw1NjoxMzAsNTc6TGUsNTk6SWV9LHQoQyxbMiw0N10pLHs1OlsxLDEzMV19LHQoQyxbMiw0OF0pLHQoQyxbMiw0OV0pLHQobGUsWzIsNjZdLHs3OToxMDQsNzU6eiw4MDpVLDgxOkssODI6ZWUsODM6WSw4NDpjZSw4NTpaLDg2OnVlLDg3OlEsODg6an0pLHszMzoxMzIsODk6RSw5MDpffSx7MzU6MTMzLDg5OlsxLDEzNF0sOTA6WzEsMTM1XX0sezM3OjEzNiw0NzpbMSwxMzddLDQ4OlsxLDEzOF0sNDk6WzEsMTM5XX0sezM5OjE0MCw1MDpbMSwxNDFdLDUxOlsxLDE0Ml0sNTI6WzEsMTQzXSw1MzpbMSwxNDRdfSx0KEMsWzIsMjddKSx7NTpTZSwyODoxNDUsMzE6c2UsMzQ6YWUsMzY6T2UsMzg6eWUsNDA6QmV9LHs1ODoxNDYsODk6WzEsMTQ3XSw5MDpbMSwxNDhdfSx7NjA6MTQ5LDg5OlsxLDE1MF0sOTA6WzEsMTUxXX0sdChDLFsyLDQ2XSksezU6SGUsNDA6emUsNTY6MTUyLDU3OkxlLDU5OkllfSx7NTpbMSwxNTNdfSx7NTpbMSwxNTRdfSx7NTpbMiw4M119LHs1OlsyLDg0XX0sezU6WzEsMTU1XX0sezU6WzIsMzVdfSx7NTpbMiwzNl19LHs1OlsyLDM3XX0sezU6WzEsMTU2XX0sezU6WzIsMzhdfSx7NTpbMiwzOV19LHs1OlsyLDQwXX0sezU6WzIsNDFdfSx0KEMsWzIsMjJdKSx7NTpbMSwxNTddfSx7NTpbMiw4N119LHs1OlsyLDg4XX0sezU6WzEsMTU4XX0sezU6WzIsODldfSx7NTpbMiw5MF19LHQoQyxbMiw0M10pLHs1OlNlLDI4OjE1OSwzMTpzZSwzNDphZSwzNjpPZSwzODp5ZSw0MDpCZX0sezU6U2UsMjg6MTYwLDMxOnNlLDM0OmFlLDM2Ok9lLDM4OnllLDQwOkJlfSx7NTpTZSwyODoxNjEsMzE6c2UsMzQ6YWUsMzY6T2UsMzg6eWUsNDA6QmV9LHs1OlNlLDI4OjE2MiwzMTpzZSwzNDphZSwzNjpPZSwzODp5ZSw0MDpCZX0sezU6SGUsNDA6emUsNTY6MTYzLDU3OkxlLDU5OkllfSx7NTpIZSw0MDp6ZSw1NjoxNjQsNTc6TGUsNTk6SWV9LHQoQyxbMiwyM10pLHQoQyxbMiwyNF0pLHQoQyxbMiwyNV0pLHQoQyxbMiwyNl0pLHQoQyxbMiw0NF0pLHQoQyxbMiw0NV0pXSxkZWZhdWx0QWN0aW9uczp7ODpbMiwyXSwxMjpbMiwxXSw0MTpbMiwzXSw0MjpbMiw4XSw0MzpbMiw5XSw0NDpbMiwxMF0sNDU6WzIsMTFdLDQ2OlsyLDEyXSw0NzpbMiwxM10sNDg6WzIsMTRdLDQ5OlsyLDE1XSw1MDpbMiwxNl0sMTM0OlsyLDgzXSwxMzU6WzIsODRdLDEzNzpbMiwzNV0sMTM4OlsyLDM2XSwxMzk6WzIsMzddLDE0MTpbMiwzOF0sMTQyOlsyLDM5XSwxNDM6WzIsNDBdLDE0NDpbMiw0MV0sMTQ3OlsyLDg3XSwxNDg6WzIsODhdLDE1MDpbMiw4OV0sMTUxOlsyLDkwXX0scGFyc2VFcnJvcjpvKGZ1bmN0aW9uKG9lLFYpe2lmKFYucmVjb3ZlcmFibGUpdGhpcy50cmFjZShvZSk7ZWxzZXt2YXIgVGU9bmV3IEVycm9yKG9lKTt0aHJvdyBUZS5oYXNoPVYsVGV9fSwicGFyc2VFcnJvciIpLHBhcnNlOm8oZnVuY3Rpb24ob2Upe3ZhciBWPXRoaXMsVGU9WzBdLFc9W10scGU9W251bGxdLHZlPVtdLFBlPXRoaXMudGFibGUsX2U9IiIsYmU9MCxWZT0wLERlPTAscWU9MixhdD0xLFJ0PXZlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHN0PU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksVWU9e3l5Ont9fTtmb3IodmFyIGN0IGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksY3QpJiYoVWUueXlbY3RdPXRoaXMueXlbY3RdKTtzdC5zZXRJbnB1dChvZSxVZS55eSksVWUueXkubGV4ZXI9c3QsVWUueXkucGFyc2VyPXRoaXMsdHlwZW9mIHN0Lnl5bGxvYz4idSImJihzdC55eWxsb2M9e30pO3ZhciBXZT1zdC55eWxsb2M7dmUucHVzaChXZSk7dmFyIG90PXN0Lm9wdGlvbnMmJnN0Lm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBVZS55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1VZS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBZdChJcil7VGUubGVuZ3RoPVRlLmxlbmd0aC0yKklyLHBlLmxlbmd0aD1wZS5sZW5ndGgtSXIsdmUubGVuZ3RoPXZlLmxlbmd0aC1Jcn1vKFl0LCJwb3BTdGFjayIpO2Z1bmN0aW9uIFR0KCl7dmFyIElyO3JldHVybiBJcj1XLnBvcCgpfHxzdC5sZXgoKXx8YXQsdHlwZW9mIElyIT0ibnVtYmVyIiYmKElyIGluc3RhbmNlb2YgQXJyYXkmJihXPUlyLElyPVcucG9wKCkpLElyPVYuc3ltYm9sc19bSXJdfHxJciksSXJ9byhUdCwibGV4Iik7Zm9yKHZhciBNdCxidCx1dCxTdCxmdCx2dCxudD17fSxwbixrdCxPbix0bjs7KXtpZih1dD1UZVtUZS5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1t1dF0/U3Q9dGhpcy5kZWZhdWx0QWN0aW9uc1t1dF06KChNdD09PW51bGx8fHR5cGVvZiBNdD4idSIpJiYoTXQ9VHQoKSksU3Q9UGVbdXRdJiZQZVt1dF1bTXRdKSx0eXBlb2YgU3Q+InUifHwhU3QubGVuZ3RofHwhU3RbMF0pe3ZhciBNcj0iIjt0bj1bXTtmb3IocG4gaW4gUGVbdXRdKXRoaXMudGVybWluYWxzX1twbl0mJnBuPnFlJiZ0bi5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bcG5dKyInIik7c3Quc2hvd1Bvc2l0aW9uP01yPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGJlKzEpK2A6CmArc3Quc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCt0bi5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW010XXx8TXQpKyInIjpNcj0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhiZSsxKSsiOiBVbmV4cGVjdGVkICIrKE10PT1hdD8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tNdF18fE10KSsiJyIpLHRoaXMucGFyc2VFcnJvcihNcix7dGV4dDpzdC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bTXRdfHxNdCxsaW5lOnN0Lnl5bGluZW5vLGxvYzpXZSxleHBlY3RlZDp0bn0pfWlmKFN0WzBdaW5zdGFuY2VvZiBBcnJheSYmU3QubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIit1dCsiLCB0b2tlbjogIitNdCk7c3dpdGNoKFN0WzBdKXtjYXNlIDE6VGUucHVzaChNdCkscGUucHVzaChzdC55eXRleHQpLHZlLnB1c2goc3QueXlsbG9jKSxUZS5wdXNoKFN0WzFdKSxNdD1udWxsLGJ0PyhNdD1idCxidD1udWxsKTooVmU9c3QueXlsZW5nLF9lPXN0Lnl5dGV4dCxiZT1zdC55eWxpbmVubyxXZT1zdC55eWxsb2MsRGU+MCYmRGUtLSk7YnJlYWs7Y2FzZSAyOmlmKGt0PXRoaXMucHJvZHVjdGlvbnNfW1N0WzFdXVsxXSxudC4kPXBlW3BlLmxlbmd0aC1rdF0sbnQuXyQ9e2ZpcnN0X2xpbmU6dmVbdmUubGVuZ3RoLShrdHx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOnZlW3ZlLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnZlW3ZlLmxlbmd0aC0oa3R8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dmVbdmUubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxvdCYmKG50Ll8kLnJhbmdlPVt2ZVt2ZS5sZW5ndGgtKGt0fHwxKV0ucmFuZ2VbMF0sdmVbdmUubGVuZ3RoLTFdLnJhbmdlWzFdXSksdnQ9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KG50LFtfZSxWZSxiZSxVZS55eSxTdFsxXSxwZSx2ZV0uY29uY2F0KFJ0KSksdHlwZW9mIHZ0PCJ1IilyZXR1cm4gdnQ7a3QmJihUZT1UZS5zbGljZSgwLC0xKmt0KjIpLHBlPXBlLnNsaWNlKDAsLTEqa3QpLHZlPXZlLnNsaWNlKDAsLTEqa3QpKSxUZS5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW1N0WzFdXVswXSkscGUucHVzaChudC4kKSx2ZS5wdXNoKG50Ll8kKSxPbj1QZVtUZVtUZS5sZW5ndGgtMl1dW1RlW1RlLmxlbmd0aC0xXV0sVGUucHVzaChPbik7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH0sInBhcnNlIil9LHE9ZnVuY3Rpb24oKXt2YXIgaWU9e0VPRjoxLHBhcnNlRXJyb3I6byhmdW5jdGlvbihWLFRlKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKFYsVGUpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKFYpfSwicGFyc2VFcnJvciIpLHNldElucHV0Om8oZnVuY3Rpb24ob2UsVil7cmV0dXJuIHRoaXMueXk9Vnx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9b2UsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LCJzZXRJbnB1dCIpLGlucHV0Om8oZnVuY3Rpb24oKXt2YXIgb2U9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPW9lLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1vZSx0aGlzLm1hdGNoZWQrPW9lO3ZhciBWPW9lLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gVj8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksb2V9LCJpbnB1dCIpLHVucHV0Om8oZnVuY3Rpb24ob2Upe3ZhciBWPW9lLmxlbmd0aCxUZT1vZS5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PW9lK3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1WKSx0aGlzLm9mZnNldC09Vjt2YXIgVz10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxUZS5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPVRlLmxlbmd0aC0xKTt2YXIgcGU9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOlRlPyhUZS5sZW5ndGg9PT1XLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrV1tXLmxlbmd0aC1UZS5sZW5ndGhdLmxlbmd0aC1UZVswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLVZ9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bcGVbMF0scGVbMF0rdGhpcy55eWxlbmctVl0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSwidW5wdXQiKSxtb3JlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSwibW9yZSIpLHJlamVjdDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSwicmVqZWN0IiksbGVzczpvKGZ1bmN0aW9uKG9lKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2Uob2UpKX0sImxlc3MiKSxwYXN0SW5wdXQ6byhmdW5jdGlvbigpe3ZhciBvZT10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKG9lLmxlbmd0aD4yMD8iLi4uIjoiIikrb2Uuc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LCJwYXN0SW5wdXQiKSx1cGNvbWluZ0lucHV0Om8oZnVuY3Rpb24oKXt2YXIgb2U9dGhpcy5tYXRjaDtyZXR1cm4gb2UubGVuZ3RoPDIwJiYob2UrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLW9lLmxlbmd0aCkpLChvZS5zdWJzdHIoMCwyMCkrKG9lLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSwidXBjb21pbmdJbnB1dCIpLHNob3dQb3NpdGlvbjpvKGZ1bmN0aW9uKCl7dmFyIG9lPXRoaXMucGFzdElucHV0KCksVj1uZXcgQXJyYXkob2UubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gb2UrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK1YrIl4ifSwic2hvd1Bvc2l0aW9uIiksdGVzdF9tYXRjaDpvKGZ1bmN0aW9uKG9lLFYpe3ZhciBUZSxXLHBlO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihwZT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihwZS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxXPW9lWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxXJiYodGhpcy55eWxpbmVubys9Vy5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpXP1dbVy5sZW5ndGgtMV0ubGVuZ3RoLVdbVy5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitvZVswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz1vZVswXSx0aGlzLm1hdGNoKz1vZVswXSx0aGlzLm1hdGNoZXM9b2UsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2Uob2VbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPW9lWzBdLFRlPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLFYsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksVGUpcmV0dXJuIFRlO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciB2ZSBpbiBwZSl0aGlzW3ZlXT1wZVt2ZV07cmV0dXJuITF9cmV0dXJuITF9LCJ0ZXN0X21hdGNoIiksbmV4dDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIG9lLFYsVGUsVzt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBwZT10aGlzLl9jdXJyZW50UnVsZXMoKSx2ZT0wO3ZlPHBlLmxlbmd0aDt2ZSsrKWlmKFRlPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbcGVbdmVdXSksVGUmJighVnx8VGVbMF0ubGVuZ3RoPlZbMF0ubGVuZ3RoKSl7aWYoVj1UZSxXPXZlLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKG9lPXRoaXMudGVzdF9tYXRjaChUZSxwZVt2ZV0pLG9lIT09ITEpcmV0dXJuIG9lO2lmKHRoaXMuX2JhY2t0cmFjayl7Vj0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBWPyhvZT10aGlzLnRlc3RfbWF0Y2goVixwZVtXXSksb2UhPT0hMT9vZTohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sIm5leHQiKSxsZXg6byhmdW5jdGlvbigpe3ZhciBWPXRoaXMubmV4dCgpO3JldHVybiBWfHx0aGlzLmxleCgpfSwibGV4IiksYmVnaW46byhmdW5jdGlvbihWKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goVil9LCJiZWdpbiIpLHBvcFN0YXRlOm8oZnVuY3Rpb24oKXt2YXIgVj10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBWPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSwicG9wU3RhdGUiKSxfY3VycmVudFJ1bGVzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSwiX2N1cnJlbnRSdWxlcyIpLHRvcFN0YXRlOm8oZnVuY3Rpb24oVil7cmV0dXJuIFY9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhWfHwwKSxWPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbVl06IklOSVRJQUwifSwidG9wU3RhdGUiKSxwdXNoU3RhdGU6byhmdW5jdGlvbihWKXt0aGlzLmJlZ2luKFYpfSwicHVzaFN0YXRlIiksc3RhdGVTdGFja1NpemU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sInN0YXRlU3RhY2tTaXplIiksb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24oVixUZSxXLHBlKXt2YXIgdmU9cGU7c3dpdGNoKFcpe2Nhc2UgMDpyZXR1cm4idGl0bGUiO2Nhc2UgMTpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksOTticmVhaztjYXNlIDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjticmVhaztjYXNlIDM6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDExO2JyZWFrO2Nhc2UgNDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2JyZWFrO2Nhc2UgNTp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSA2OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDc6cmV0dXJuImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiO2Nhc2UgODpyZXR1cm4gMjE7Y2FzZSA5OnJldHVybiAyMjtjYXNlIDEwOnJldHVybiAyMztjYXNlIDExOnJldHVybiAyNDtjYXNlIDEyOnJldHVybiA1O2Nhc2UgMTM6YnJlYWs7Y2FzZSAxNDpicmVhaztjYXNlIDE1OmJyZWFrO2Nhc2UgMTY6cmV0dXJuIDg7Y2FzZSAxNzpyZXR1cm4gNjtjYXNlIDE4OnJldHVybiAyNztjYXNlIDE5OnJldHVybiA0MDtjYXNlIDIwOnJldHVybiAyOTtjYXNlIDIxOnJldHVybiAzMjtjYXNlIDIyOnJldHVybiAzMTtjYXNlIDIzOnJldHVybiAzNDtjYXNlIDI0OnJldHVybiAzNjtjYXNlIDI1OnJldHVybiAzODtjYXNlIDI2OnJldHVybiA0MTtjYXNlIDI3OnJldHVybiA0MjtjYXNlIDI4OnJldHVybiA0MztjYXNlIDI5OnJldHVybiA0NDtjYXNlIDMwOnJldHVybiA0NTtjYXNlIDMxOnJldHVybiA0NjtjYXNlIDMyOnJldHVybiA0NztjYXNlIDMzOnJldHVybiA0ODtjYXNlIDM0OnJldHVybiA0OTtjYXNlIDM1OnJldHVybiA1MDtjYXNlIDM2OnJldHVybiA1MTtjYXNlIDM3OnJldHVybiA1MjtjYXNlIDM4OnJldHVybiA1MztjYXNlIDM5OnJldHVybiA1NDtjYXNlIDQwOnJldHVybiA2NTtjYXNlIDQxOnJldHVybiA2NjtjYXNlIDQyOnJldHVybiA2NztjYXNlIDQzOnJldHVybiA2ODtjYXNlIDQ0OnJldHVybiA2OTtjYXNlIDQ1OnJldHVybiA3MDtjYXNlIDQ2OnJldHVybiA3MTtjYXNlIDQ3OnJldHVybiA1NztjYXNlIDQ4OnJldHVybiA1OTtjYXNlIDQ5OnJldHVybiB0aGlzLmJlZ2luKCJzdHlsZSIpLDc3O2JyZWFrO2Nhc2UgNTA6cmV0dXJuIDc1O2Nhc2UgNTE6cmV0dXJuIDgxO2Nhc2UgNTI6cmV0dXJuIDg4O2Nhc2UgNTM6cmV0dXJuIlBFUkNFTlQiO2Nhc2UgNTQ6cmV0dXJuIDg2O2Nhc2UgNTU6cmV0dXJuIDg0O2Nhc2UgNTY6YnJlYWs7Y2FzZSA1Nzp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDU4OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDU5OnJldHVybiB0aGlzLmJlZ2luKCJzdHlsZSIpLDcyO2JyZWFrO2Nhc2UgNjA6cmV0dXJuIHRoaXMuYmVnaW4oInN0eWxlIiksNzQ7YnJlYWs7Y2FzZSA2MTpyZXR1cm4gNjE7Y2FzZSA2MjpyZXR1cm4gNjQ7Y2FzZSA2MzpyZXR1cm4gNjM7Y2FzZSA2NDp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDY1OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDY2OnJldHVybiJxU3RyaW5nIjtjYXNlIDY3OnJldHVybiBUZS55eXRleHQ9VGUueXl0ZXh0LnRyaW0oKSw4OTticmVhaztjYXNlIDY4OnJldHVybiA3NTtjYXNlIDY5OnJldHVybiA4MDtjYXNlIDcwOnJldHVybiA3Nn19LCJhbm9ueW1vdXMiKSxydWxlczpbL14oPzp0aXRsZVxzW14jXG47XSspL2ksL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrVEJbXlxuXSopL2ksL14oPzouKmRpcmVjdGlvblxzK0JUW15cbl0qKS9pLC9eKD86LipkaXJlY3Rpb25ccytSTFteXG5dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrTFJbXlxuXSopL2ksL14oPzooXHI/XG4pKykvaSwvXig/OlxzKykvaSwvXig/OiNbXlxuXSopL2ksL14oPzolW15cbl0qKS9pLC9eKD86JCkvaSwvXig/OnJlcXVpcmVtZW50RGlhZ3JhbVxiKS9pLC9eKD86XHspL2ksL14oPzpcfSkvaSwvXig/Ojp7M30pL2ksL14oPzo6KS9pLC9eKD86aWRcYikvaSwvXig/OnRleHRcYikvaSwvXig/OnJpc2tcYikvaSwvXig/OnZlcmlmeU1ldGhvZFxiKS9pLC9eKD86cmVxdWlyZW1lbnRcYikvaSwvXig/OmZ1bmN0aW9uYWxSZXF1aXJlbWVudFxiKS9pLC9eKD86aW50ZXJmYWNlUmVxdWlyZW1lbnRcYikvaSwvXig/OnBlcmZvcm1hbmNlUmVxdWlyZW1lbnRcYikvaSwvXig/OnBoeXNpY2FsUmVxdWlyZW1lbnRcYikvaSwvXig/OmRlc2lnbkNvbnN0cmFpbnRcYikvaSwvXig/Omxvd1xiKS9pLC9eKD86bWVkaXVtXGIpL2ksL14oPzpoaWdoXGIpL2ksL14oPzphbmFseXNpc1xiKS9pLC9eKD86ZGVtb25zdHJhdGlvblxiKS9pLC9eKD86aW5zcGVjdGlvblxiKS9pLC9eKD86dGVzdFxiKS9pLC9eKD86ZWxlbWVudFxiKS9pLC9eKD86Y29udGFpbnNcYikvaSwvXig/OmNvcGllc1xiKS9pLC9eKD86ZGVyaXZlc1xiKS9pLC9eKD86c2F0aXNmaWVzXGIpL2ksL14oPzp2ZXJpZmllc1xiKS9pLC9eKD86cmVmaW5lc1xiKS9pLC9eKD86dHJhY2VzXGIpL2ksL14oPzp0eXBlXGIpL2ksL14oPzpkb2NyZWZcYikvaSwvXig/OnN0eWxlXGIpL2ksL14oPzpcdyspL2ksL14oPzo6KS9pLC9eKD86OykvaSwvXig/OiUpL2ksL14oPzotKS9pLC9eKD86IykvaSwvXig/OiApL2ksL14oPzpbIl0pL2ksL14oPzpcbikvaSwvXig/OmNsYXNzRGVmXGIpL2ksL14oPzpjbGFzc1xiKS9pLC9eKD86PC0pL2ksL14oPzotPikvaSwvXig/Oi0pL2ksL14oPzpbIl0pL2ksL14oPzpbIl0pL2ksL14oPzpbXiJdKikvaSwvXig/Oltcd11bXjosXHJcblx7XDxcPlwtXD1dKikvaSwvXig/Olx3KykvaSwvXig/OlswLTldKykvaSwvXig/OiwpL2ldLGNvbmRpdGlvbnM6e2FjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOls2LDcsNjgsNjksNzBdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbNCw2OCw2OSw3MF0saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOlsyLDY4LDY5LDcwXSxpbmNsdXNpdmU6ITF9LHN0eWxlOntydWxlczpbNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNjgsNjksNzBdLGluY2x1c2l2ZTohMX0sdW5xU3RyaW5nOntydWxlczpbNjgsNjksNzBdLGluY2x1c2l2ZTohMX0sdG9rZW46e3J1bGVzOls2OCw2OSw3MF0saW5jbHVzaXZlOiExfSxzdHJpbmc6e3J1bGVzOls2NSw2Niw2OCw2OSw3MF0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDMsNSw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTksNjAsNjEsNjIsNjMsNjQsNjcsNjgsNjksNzBdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gaWV9KCk7eGUubGV4ZXI9cTtmdW5jdGlvbiBkZSgpe3RoaXMueXk9e319cmV0dXJuIG8oZGUsIlBhcnNlciIpLGRlLnByb3RvdHlwZT14ZSx4ZS5QYXJzZXI9ZGUsbmV3IGRlfSgpO2hQLnBhcnNlcj1oUDt2ZGU9aFB9KTt2YXIgcVMsYmRlPU4oKCk9PnsidXNlIHN0cmljdCI7R3QoKTt5dCgpO2NpKCk7cVM9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnJlbGF0aW9ucz1bXTt0aGlzLmxhdGVzdFJlcXVpcmVtZW50PXRoaXMuZ2V0SW5pdGlhbFJlcXVpcmVtZW50KCk7dGhpcy5yZXF1aXJlbWVudHM9bmV3IE1hcDt0aGlzLmxhdGVzdEVsZW1lbnQ9dGhpcy5nZXRJbml0aWFsRWxlbWVudCgpO3RoaXMuZWxlbWVudHM9bmV3IE1hcDt0aGlzLmNsYXNzZXM9bmV3IE1hcDt0aGlzLmRpcmVjdGlvbj0iVEIiO3RoaXMuUmVxdWlyZW1lbnRUeXBlPXtSRVFVSVJFTUVOVDoiUmVxdWlyZW1lbnQiLEZVTkNUSU9OQUxfUkVRVUlSRU1FTlQ6IkZ1bmN0aW9uYWwgUmVxdWlyZW1lbnQiLElOVEVSRkFDRV9SRVFVSVJFTUVOVDoiSW50ZXJmYWNlIFJlcXVpcmVtZW50IixQRVJGT1JNQU5DRV9SRVFVSVJFTUVOVDoiUGVyZm9ybWFuY2UgUmVxdWlyZW1lbnQiLFBIWVNJQ0FMX1JFUVVJUkVNRU5UOiJQaHlzaWNhbCBSZXF1aXJlbWVudCIsREVTSUdOX0NPTlNUUkFJTlQ6IkRlc2lnbiBDb25zdHJhaW50In07dGhpcy5SaXNrTGV2ZWw9e0xPV19SSVNLOiJMb3ciLE1FRF9SSVNLOiJNZWRpdW0iLEhJR0hfUklTSzoiSGlnaCJ9O3RoaXMuVmVyaWZ5VHlwZT17VkVSSUZZX0FOQUxZU0lTOiJBbmFseXNpcyIsVkVSSUZZX0RFTU9OU1RSQVRJT046IkRlbW9uc3RyYXRpb24iLFZFUklGWV9JTlNQRUNUSU9OOiJJbnNwZWN0aW9uIixWRVJJRllfVEVTVDoiVGVzdCJ9O3RoaXMuUmVsYXRpb25zaGlwcz17Q09OVEFJTlM6ImNvbnRhaW5zIixDT1BJRVM6ImNvcGllcyIsREVSSVZFUzoiZGVyaXZlcyIsU0FUSVNGSUVTOiJzYXRpc2ZpZXMiLFZFUklGSUVTOiJ2ZXJpZmllcyIsUkVGSU5FUzoicmVmaW5lcyIsVFJBQ0VTOiJ0cmFjZXMifTt0aGlzLnNldEFjY1RpdGxlPUFyO3RoaXMuZ2V0QWNjVGl0bGU9RHI7dGhpcy5zZXRBY2NEZXNjcmlwdGlvbj1Mcjt0aGlzLmdldEFjY0Rlc2NyaXB0aW9uPVJyO3RoaXMuc2V0RGlhZ3JhbVRpdGxlPU9yO3RoaXMuZ2V0RGlhZ3JhbVRpdGxlPU5yO3RoaXMuZ2V0Q29uZmlnPW8oKCk9Pm1lKCkucmVxdWlyZW1lbnQsImdldENvbmZpZyIpO3RoaXMuY2xlYXIoKSx0aGlzLnNldERpcmVjdGlvbj10aGlzLnNldERpcmVjdGlvbi5iaW5kKHRoaXMpLHRoaXMuYWRkUmVxdWlyZW1lbnQ9dGhpcy5hZGRSZXF1aXJlbWVudC5iaW5kKHRoaXMpLHRoaXMuc2V0TmV3UmVxSWQ9dGhpcy5zZXROZXdSZXFJZC5iaW5kKHRoaXMpLHRoaXMuc2V0TmV3UmVxUmlzaz10aGlzLnNldE5ld1JlcVJpc2suYmluZCh0aGlzKSx0aGlzLnNldE5ld1JlcVRleHQ9dGhpcy5zZXROZXdSZXFUZXh0LmJpbmQodGhpcyksdGhpcy5zZXROZXdSZXFWZXJpZnlNZXRob2Q9dGhpcy5zZXROZXdSZXFWZXJpZnlNZXRob2QuYmluZCh0aGlzKSx0aGlzLmFkZEVsZW1lbnQ9dGhpcy5hZGRFbGVtZW50LmJpbmQodGhpcyksdGhpcy5zZXROZXdFbGVtZW50VHlwZT10aGlzLnNldE5ld0VsZW1lbnRUeXBlLmJpbmQodGhpcyksdGhpcy5zZXROZXdFbGVtZW50RG9jUmVmPXRoaXMuc2V0TmV3RWxlbWVudERvY1JlZi5iaW5kKHRoaXMpLHRoaXMuYWRkUmVsYXRpb25zaGlwPXRoaXMuYWRkUmVsYXRpb25zaGlwLmJpbmQodGhpcyksdGhpcy5zZXRDc3NTdHlsZT10aGlzLnNldENzc1N0eWxlLmJpbmQodGhpcyksdGhpcy5zZXRDbGFzcz10aGlzLnNldENsYXNzLmJpbmQodGhpcyksdGhpcy5kZWZpbmVDbGFzcz10aGlzLmRlZmluZUNsYXNzLmJpbmQodGhpcyksdGhpcy5zZXRBY2NUaXRsZT10aGlzLnNldEFjY1RpdGxlLmJpbmQodGhpcyksdGhpcy5zZXRBY2NEZXNjcmlwdGlvbj10aGlzLnNldEFjY0Rlc2NyaXB0aW9uLmJpbmQodGhpcyl9c3RhdGlje28odGhpcywiUmVxdWlyZW1lbnREQiIpfWdldERpcmVjdGlvbigpe3JldHVybiB0aGlzLmRpcmVjdGlvbn1zZXREaXJlY3Rpb24oZSl7dGhpcy5kaXJlY3Rpb249ZX1yZXNldExhdGVzdFJlcXVpcmVtZW50KCl7dGhpcy5sYXRlc3RSZXF1aXJlbWVudD10aGlzLmdldEluaXRpYWxSZXF1aXJlbWVudCgpfXJlc2V0TGF0ZXN0RWxlbWVudCgpe3RoaXMubGF0ZXN0RWxlbWVudD10aGlzLmdldEluaXRpYWxFbGVtZW50KCl9Z2V0SW5pdGlhbFJlcXVpcmVtZW50KCl7cmV0dXJue3JlcXVpcmVtZW50SWQ6IiIsdGV4dDoiIixyaXNrOiIiLHZlcmlmeU1ldGhvZDoiIixuYW1lOiIiLHR5cGU6IiIsY3NzU3R5bGVzOltdLGNsYXNzZXM6WyJkZWZhdWx0Il19fWdldEluaXRpYWxFbGVtZW50KCl7cmV0dXJue25hbWU6IiIsdHlwZToiIixkb2NSZWY6IiIsY3NzU3R5bGVzOltdLGNsYXNzZXM6WyJkZWZhdWx0Il19fWFkZFJlcXVpcmVtZW50KGUscil7cmV0dXJuIHRoaXMucmVxdWlyZW1lbnRzLmhhcyhlKXx8dGhpcy5yZXF1aXJlbWVudHMuc2V0KGUse25hbWU6ZSx0eXBlOnIscmVxdWlyZW1lbnRJZDp0aGlzLmxhdGVzdFJlcXVpcmVtZW50LnJlcXVpcmVtZW50SWQsdGV4dDp0aGlzLmxhdGVzdFJlcXVpcmVtZW50LnRleHQscmlzazp0aGlzLmxhdGVzdFJlcXVpcmVtZW50LnJpc2ssdmVyaWZ5TWV0aG9kOnRoaXMubGF0ZXN0UmVxdWlyZW1lbnQudmVyaWZ5TWV0aG9kLGNzc1N0eWxlczpbXSxjbGFzc2VzOlsiZGVmYXVsdCJdfSksdGhpcy5yZXNldExhdGVzdFJlcXVpcmVtZW50KCksdGhpcy5yZXF1aXJlbWVudHMuZ2V0KGUpfWdldFJlcXVpcmVtZW50cygpe3JldHVybiB0aGlzLnJlcXVpcmVtZW50c31zZXROZXdSZXFJZChlKXt0aGlzLmxhdGVzdFJlcXVpcmVtZW50IT09dm9pZCAwJiYodGhpcy5sYXRlc3RSZXF1aXJlbWVudC5yZXF1aXJlbWVudElkPWUpfXNldE5ld1JlcVRleHQoZSl7dGhpcy5sYXRlc3RSZXF1aXJlbWVudCE9PXZvaWQgMCYmKHRoaXMubGF0ZXN0UmVxdWlyZW1lbnQudGV4dD1lKX1zZXROZXdSZXFSaXNrKGUpe3RoaXMubGF0ZXN0UmVxdWlyZW1lbnQhPT12b2lkIDAmJih0aGlzLmxhdGVzdFJlcXVpcmVtZW50LnJpc2s9ZSl9c2V0TmV3UmVxVmVyaWZ5TWV0aG9kKGUpe3RoaXMubGF0ZXN0UmVxdWlyZW1lbnQhPT12b2lkIDAmJih0aGlzLmxhdGVzdFJlcXVpcmVtZW50LnZlcmlmeU1ldGhvZD1lKX1hZGRFbGVtZW50KGUpe3JldHVybiB0aGlzLmVsZW1lbnRzLmhhcyhlKXx8KHRoaXMuZWxlbWVudHMuc2V0KGUse25hbWU6ZSx0eXBlOnRoaXMubGF0ZXN0RWxlbWVudC50eXBlLGRvY1JlZjp0aGlzLmxhdGVzdEVsZW1lbnQuZG9jUmVmLGNzc1N0eWxlczpbXSxjbGFzc2VzOlsiZGVmYXVsdCJdfSksWC5pbmZvKCJBZGRlZCBuZXcgZWxlbWVudDogIixlKSksdGhpcy5yZXNldExhdGVzdEVsZW1lbnQoKSx0aGlzLmVsZW1lbnRzLmdldChlKX1nZXRFbGVtZW50cygpe3JldHVybiB0aGlzLmVsZW1lbnRzfXNldE5ld0VsZW1lbnRUeXBlKGUpe3RoaXMubGF0ZXN0RWxlbWVudCE9PXZvaWQgMCYmKHRoaXMubGF0ZXN0RWxlbWVudC50eXBlPWUpfXNldE5ld0VsZW1lbnREb2NSZWYoZSl7dGhpcy5sYXRlc3RFbGVtZW50IT09dm9pZCAwJiYodGhpcy5sYXRlc3RFbGVtZW50LmRvY1JlZj1lKX1hZGRSZWxhdGlvbnNoaXAoZSxyLG4pe3RoaXMucmVsYXRpb25zLnB1c2goe3R5cGU6ZSxzcmM6cixkc3Q6bn0pfWdldFJlbGF0aW9uc2hpcHMoKXtyZXR1cm4gdGhpcy5yZWxhdGlvbnN9Y2xlYXIoKXt0aGlzLnJlbGF0aW9ucz1bXSx0aGlzLnJlc2V0TGF0ZXN0UmVxdWlyZW1lbnQoKSx0aGlzLnJlcXVpcmVtZW50cz1uZXcgTWFwLHRoaXMucmVzZXRMYXRlc3RFbGVtZW50KCksdGhpcy5lbGVtZW50cz1uZXcgTWFwLHRoaXMuY2xhc3Nlcz1uZXcgTWFwLGtyKCl9c2V0Q3NzU3R5bGUoZSxyKXtmb3IobGV0IG4gb2YgZSl7bGV0IGk9dGhpcy5yZXF1aXJlbWVudHMuZ2V0KG4pPz90aGlzLmVsZW1lbnRzLmdldChuKTtpZighcnx8IWkpcmV0dXJuO2ZvcihsZXQgYSBvZiByKWEuaW5jbHVkZXMoIiwiKT9pLmNzc1N0eWxlcy5wdXNoKC4uLmEuc3BsaXQoIiwiKSk6aS5jc3NTdHlsZXMucHVzaChhKX19c2V0Q2xhc3MoZSxyKXtmb3IobGV0IG4gb2YgZSl7bGV0IGk9dGhpcy5yZXF1aXJlbWVudHMuZ2V0KG4pPz90aGlzLmVsZW1lbnRzLmdldChuKTtpZihpKWZvcihsZXQgYSBvZiByKXtpLmNsYXNzZXMucHVzaChhKTtsZXQgcz10aGlzLmNsYXNzZXMuZ2V0KGEpPy5zdHlsZXM7cyYmaS5jc3NTdHlsZXMucHVzaCguLi5zKX19fWRlZmluZUNsYXNzKGUscil7Zm9yKGxldCBuIG9mIGUpe2xldCBpPXRoaXMuY2xhc3Nlcy5nZXQobik7aT09PXZvaWQgMCYmKGk9e2lkOm4sc3R5bGVzOltdLHRleHRTdHlsZXM6W119LHRoaXMuY2xhc3Nlcy5zZXQobixpKSksciYmci5mb3JFYWNoKGZ1bmN0aW9uKGEpe2lmKC9jb2xvci8uZXhlYyhhKSl7bGV0IHM9YS5yZXBsYWNlKCJmaWxsIiwiYmdGaWxsIik7aS50ZXh0U3R5bGVzLnB1c2gocyl9aS5zdHlsZXMucHVzaChhKX0pLHRoaXMucmVxdWlyZW1lbnRzLmZvckVhY2goYT0+e2EuY2xhc3Nlcy5pbmNsdWRlcyhuKSYmYS5jc3NTdHlsZXMucHVzaCguLi5yLmZsYXRNYXAocz0+cy5zcGxpdCgiLCIpKSl9KSx0aGlzLmVsZW1lbnRzLmZvckVhY2goYT0+e2EuY2xhc3Nlcy5pbmNsdWRlcyhuKSYmYS5jc3NTdHlsZXMucHVzaCguLi5yLmZsYXRNYXAocz0+cy5zcGxpdCgiLCIpKSl9KX19Z2V0Q2xhc3Nlcygpe3JldHVybiB0aGlzLmNsYXNzZXN9Z2V0RGF0YSgpe2xldCBlPW1lKCkscj1bXSxuPVtdO2ZvcihsZXQgaSBvZiB0aGlzLnJlcXVpcmVtZW50cy52YWx1ZXMoKSl7bGV0IGE9aTthLmlkPWkubmFtZSxhLmNzc1N0eWxlcz1pLmNzc1N0eWxlcyxhLmNzc0NsYXNzZXM9aS5jbGFzc2VzLmpvaW4oIiAiKSxhLnNoYXBlPSJyZXF1aXJlbWVudEJveCIsYS5sb29rPWUubG9vayxyLnB1c2goYSl9Zm9yKGxldCBpIG9mIHRoaXMuZWxlbWVudHMudmFsdWVzKCkpe2xldCBhPWk7YS5zaGFwZT0icmVxdWlyZW1lbnRCb3giLGEubG9vaz1lLmxvb2ssYS5pZD1pLm5hbWUsYS5jc3NTdHlsZXM9aS5jc3NTdHlsZXMsYS5jc3NDbGFzc2VzPWkuY2xhc3Nlcy5qb2luKCIgIiksci5wdXNoKGEpfWZvcihsZXQgaSBvZiB0aGlzLnJlbGF0aW9ucyl7bGV0IGE9MCxzPWkudHlwZT09PXRoaXMuUmVsYXRpb25zaGlwcy5DT05UQUlOUyxsPXtpZDpgJHtpLnNyY30tJHtpLmRzdH0tJHthfWAsc3RhcnQ6dGhpcy5yZXF1aXJlbWVudHMuZ2V0KGkuc3JjKT8ubmFtZT8/dGhpcy5lbGVtZW50cy5nZXQoaS5zcmMpPy5uYW1lLGVuZDp0aGlzLnJlcXVpcmVtZW50cy5nZXQoaS5kc3QpPy5uYW1lPz90aGlzLmVsZW1lbnRzLmdldChpLmRzdCk/Lm5hbWUsbGFiZWw6YCZsdDsmbHQ7JHtpLnR5cGV9Jmd0OyZndDtgLGNsYXNzZXM6InJlbGF0aW9uc2hpcExpbmUiLHN0eWxlOlsiZmlsbDpub25lIixzPyIiOiJzdHJva2UtZGFzaGFycmF5OiAxMCw3Il0sbGFiZWxwb3M6ImMiLHRoaWNrbmVzczoibm9ybWFsIix0eXBlOiJub3JtYWwiLHBhdHRlcm46cz8ibm9ybWFsIjoiZGFzaGVkIixhcnJvd1R5cGVTdGFydDpzPyJyZXF1aXJlbWVudF9jb250YWlucyI6IiIsYXJyb3dUeXBlRW5kOnM/IiI6InJlcXVpcmVtZW50X2Fycm93Iixsb29rOmUubG9va307bi5wdXNoKGwpLGErK31yZXR1cm57bm9kZXM6cixlZGdlczpuLG90aGVyOnt9LGNvbmZpZzplLGRpcmVjdGlvbjp0aGlzLmdldERpcmVjdGlvbigpfX19fSk7dmFyIE5VZSxUZGUsd2RlPU4oKCk9PnsidXNlIHN0cmljdCI7TlVlPW8odD0+YAoKICBtYXJrZXIgewogICAgZmlsbDogJHt0LnJlbGF0aW9uQ29sb3J9OwogICAgc3Ryb2tlOiAke3QucmVsYXRpb25Db2xvcn07CiAgfQoKICBtYXJrZXIuY3Jvc3MgewogICAgc3Ryb2tlOiAke3QubGluZUNvbG9yfTsKICB9CgogIHN2ZyB7CiAgICBmb250LWZhbWlseTogJHt0LmZvbnRGYW1pbHl9OwogICAgZm9udC1zaXplOiAke3QuZm9udFNpemV9OwogIH0KCiAgLnJlcUJveCB7CiAgICBmaWxsOiAke3QucmVxdWlyZW1lbnRCYWNrZ3JvdW5kfTsKICAgIGZpbGwtb3BhY2l0eTogMS4wOwogICAgc3Ryb2tlOiAke3QucmVxdWlyZW1lbnRCb3JkZXJDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6ICR7dC5yZXF1aXJlbWVudEJvcmRlclNpemV9OwogIH0KICAKICAucmVxVGl0bGUsIC5yZXFMYWJlbHsKICAgIGZpbGw6ICAke3QucmVxdWlyZW1lbnRUZXh0Q29sb3J9OwogIH0KICAucmVxTGFiZWxCb3ggewogICAgZmlsbDogJHt0LnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kfTsKICAgIGZpbGwtb3BhY2l0eTogMS4wOwogIH0KCiAgLnJlcS10aXRsZS1saW5lIHsKICAgIHN0cm9rZTogJHt0LnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAke3QucmVxdWlyZW1lbnRCb3JkZXJTaXplfTsKICB9CiAgLnJlbGF0aW9uc2hpcExpbmUgewogICAgc3Ryb2tlOiAke3QucmVsYXRpb25Db2xvcn07CiAgICBzdHJva2Utd2lkdGg6IDE7CiAgfQogIC5yZWxhdGlvbnNoaXBMYWJlbCB7CiAgICBmaWxsOiAke3QucmVsYXRpb25MYWJlbENvbG9yfTsKICB9CiAgLmRpdmlkZXIgewogICAgc3Ryb2tlOiAke3Qubm9kZUJvcmRlcn07CiAgICBzdHJva2Utd2lkdGg6IDE7CiAgfQogIC5sYWJlbCB7CiAgICBmb250LWZhbWlseTogJHt0LmZvbnRGYW1pbHl9OwogICAgY29sb3I6ICR7dC5ub2RlVGV4dENvbG9yfHx0LnRleHRDb2xvcn07CiAgfQogIC5sYWJlbCB0ZXh0LHNwYW4gewogICAgZmlsbDogJHt0Lm5vZGVUZXh0Q29sb3J8fHQudGV4dENvbG9yfTsKICAgIGNvbG9yOiAke3Qubm9kZVRleHRDb2xvcnx8dC50ZXh0Q29sb3J9OwogIH0KICAubGFiZWxCa2cgewogICAgYmFja2dyb3VuZC1jb2xvcjogJHt0LmVkZ2VMYWJlbEJhY2tncm91bmR9OwogIH0KCmAsImdldFN0eWxlcyIpLFRkZT1OVWV9KTt2YXIgZlA9e307dXIoZlAse2RyYXc6KCk9Pk1VZX0pO3ZhciBNVWUsa2RlPU4oKCk9PnsidXNlIHN0cmljdCI7R3QoKTt5dCgpO1NtKCk7cnAoKTtucCgpO2VyKCk7TVVlPW8oYXN5bmMgZnVuY3Rpb24odCxlLHIsbil7WC5pbmZvKCJSRUYwOiIpLFguaW5mbygiRHJhd2luZyByZXF1aXJlbWVudCBkaWFncmFtICh1bmlmaWVkKSIsZSk7bGV0e3NlY3VyaXR5TGV2ZWw6aSxzdGF0ZTphLGxheW91dDpzfT1tZSgpLGw9bi5kYi5nZXREYXRhKCksdT13YyhlLGkpO2wudHlwZT1uLnR5cGUsbC5sYXlvdXRBbGdvcml0aG09dWYocyksbC5ub2RlU3BhY2luZz1hPy5ub2RlU3BhY2luZz8/NTAsbC5yYW5rU3BhY2luZz1hPy5yYW5rU3BhY2luZz8/NTAsbC5tYXJrZXJzPVsicmVxdWlyZW1lbnRfY29udGFpbnMiLCJyZXF1aXJlbWVudF9hcnJvdyJdLGwuZGlhZ3JhbUlkPWUsYXdhaXQgUmMobCx1KTtsZXQgaD04O1Z0Lmluc2VydFRpdGxlKHUsInJlcXVpcmVtZW50RGlhZ3JhbVRpdGxlVGV4dCIsYT8udGl0bGVUb3BNYXJnaW4/PzI1LG4uZGIuZ2V0RGlhZ3JhbVRpdGxlKCkpLFlvKHUsaCwicmVxdWlyZW1lbnREaWFncmFtIixhPy51c2VNYXhXaWR0aD8/ITApfSwiZHJhdyIpfSk7dmFyIEVkZT17fTt1cihFZGUse2RpYWdyYW06KCk9PklVZX0pO3ZhciBJVWUsU2RlPU4oKCk9PnsidXNlIHN0cmljdCI7eGRlKCk7YmRlKCk7d2RlKCk7a2RlKCk7SVVlPXtwYXJzZXI6dmRlLGdldCBkYigpe3JldHVybiBuZXcgcVN9LHJlbmRlcmVyOmZQLHN0eWxlczpUZGV9fSk7dmFyIGRQLF9kZSxEZGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtkUD1mdW5jdGlvbigpe3ZhciB0PW8oZnVuY3Rpb24oUSxqLG5lLHRlKXtmb3IobmU9bmV8fHt9LHRlPVEubGVuZ3RoO3RlLS07bmVbUVt0ZV1dPWopO3JldHVybiBuZX0sIm8iKSxlPVsxLDJdLHI9WzEsM10sbj1bMSw0XSxpPVsyLDRdLGE9WzEsOV0scz1bMSwxMV0sbD1bMSwxM10sdT1bMSwxNF0saD1bMSwxNl0sZj1bMSwxN10sZD1bMSwxOF0scD1bMSwyNF0sbT1bMSwyNV0sZz1bMSwyNl0seT1bMSwyN10sdj1bMSwyOF0seD1bMSwyOV0sYj1bMSwzMF0sVD1bMSwzMV0sUz1bMSwzMl0sdz1bMSwzM10sRT1bMSwzNF0sXz1bMSwzNV0sQz1bMSwzNl0sRD1bMSwzN10sTz1bMSwzOF0sUj1bMSwzOV0saz1bMSw0MV0sTD1bMSw0Ml0sQT1bMSw0M10sST1bMSw0NF0sTT1bMSw0NV0sUD1bMSw0Nl0sQj1bMSw0LDUsMTMsMTQsMTYsMTgsMjEsMjMsMjksMzAsMzEsMzMsMzUsMzYsMzcsMzgsMzksNDEsNDMsNDQsNDYsNDcsNDgsNDksNTAsNTIsNTMsNTQsNTksNjAsNjEsNjIsNzBdLEY9WzQsNSwxNiw1MCw1Miw1M10sej1bNCw1LDEzLDE0LDE2LDE4LDIxLDIzLDI5LDMwLDMxLDMzLDM1LDM2LDM3LDM4LDM5LDQxLDQzLDQ0LDQ2LDUwLDUyLDUzLDU0LDU5LDYwLDYxLDYyLDcwXSwkPVs0LDUsMTMsMTQsMTYsMTgsMjEsMjMsMjksMzAsMzEsMzMsMzUsMzYsMzcsMzgsMzksNDEsNDMsNDQsNDYsNDksNTAsNTIsNTMsNTQsNTksNjAsNjEsNjIsNzBdLFU9WzQsNSwxMywxNCwxNiwxOCwyMSwyMywyOSwzMCwzMSwzMywzNSwzNiwzNywzOCwzOSw0MSw0Myw0NCw0Niw0OCw1MCw1Miw1Myw1NCw1OSw2MCw2MSw2Miw3MF0sSz1bNCw1LDEzLDE0LDE2LDE4LDIxLDIzLDI5LDMwLDMxLDMzLDM1LDM2LDM3LDM4LDM5LDQxLDQzLDQ0LDQ2LDQ3LDUwLDUyLDUzLDU0LDU5LDYwLDYxLDYyLDcwXSxlZT1bNjgsNjksNzBdLFk9WzEsMTIyXSxjZT17dHJhY2U6byhmdW5jdGlvbigpe30sInRyYWNlIikseXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxTUEFDRTo0LE5FV0xJTkU6NSxTRDo2LGRvY3VtZW50OjcsbGluZTo4LHN0YXRlbWVudDo5LGJveF9zZWN0aW9uOjEwLGJveF9saW5lOjExLHBhcnRpY2lwYW50X3N0YXRlbWVudDoxMixjcmVhdGU6MTMsYm94OjE0LHJlc3RPZkxpbmU6MTUsZW5kOjE2LHNpZ25hbDoxNyxhdXRvbnVtYmVyOjE4LE5VTToxOSxvZmY6MjAsYWN0aXZhdGU6MjEsYWN0b3I6MjIsZGVhY3RpdmF0ZToyMyxub3RlX3N0YXRlbWVudDoyNCxsaW5rc19zdGF0ZW1lbnQ6MjUsbGlua19zdGF0ZW1lbnQ6MjYscHJvcGVydGllc19zdGF0ZW1lbnQ6MjcsZGV0YWlsc19zdGF0ZW1lbnQ6MjgsdGl0bGU6MjksbGVnYWN5X3RpdGxlOjMwLGFjY190aXRsZTozMSxhY2NfdGl0bGVfdmFsdWU6MzIsYWNjX2Rlc2NyOjMzLGFjY19kZXNjcl92YWx1ZTozNCxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjM1LGxvb3A6MzYscmVjdDozNyxvcHQ6MzgsYWx0OjM5LGVsc2Vfc2VjdGlvbnM6NDAscGFyOjQxLHBhcl9zZWN0aW9uczo0MixwYXJfb3Zlcjo0Myxjcml0aWNhbDo0NCxvcHRpb25fc2VjdGlvbnM6NDUsYnJlYWs6NDYsb3B0aW9uOjQ3LGFuZDo0OCxlbHNlOjQ5LHBhcnRpY2lwYW50OjUwLEFTOjUxLHBhcnRpY2lwYW50X2FjdG9yOjUyLGRlc3Ryb3k6NTMsbm90ZTo1NCxwbGFjZW1lbnQ6NTUsdGV4dDI6NTYsb3Zlcjo1NyxhY3Rvcl9wYWlyOjU4LGxpbmtzOjU5LGxpbms6NjAscHJvcGVydGllczo2MSxkZXRhaWxzOjYyLHNwYWNlTGlzdDo2MywiLCI6NjQsbGVmdF9vZjo2NSxyaWdodF9vZjo2NixzaWduYWx0eXBlOjY3LCIrIjo2OCwiLSI6NjksQUNUT1I6NzAsU09MSURfT1BFTl9BUlJPVzo3MSxET1RURURfT1BFTl9BUlJPVzo3MixTT0xJRF9BUlJPVzo3MyxCSURJUkVDVElPTkFMX1NPTElEX0FSUk9XOjc0LERPVFRFRF9BUlJPVzo3NSxCSURJUkVDVElPTkFMX0RPVFRFRF9BUlJPVzo3NixTT0xJRF9DUk9TUzo3NyxET1RURURfQ1JPU1M6NzgsU09MSURfUE9JTlQ6NzksRE9UVEVEX1BPSU5UOjgwLFRYVDo4MSwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiU1BBQ0UiLDU6Ik5FV0xJTkUiLDY6IlNEIiwxMzoiY3JlYXRlIiwxNDoiYm94IiwxNToicmVzdE9mTGluZSIsMTY6ImVuZCIsMTg6ImF1dG9udW1iZXIiLDE5OiJOVU0iLDIwOiJvZmYiLDIxOiJhY3RpdmF0ZSIsMjM6ImRlYWN0aXZhdGUiLDI5OiJ0aXRsZSIsMzA6ImxlZ2FjeV90aXRsZSIsMzE6ImFjY190aXRsZSIsMzI6ImFjY190aXRsZV92YWx1ZSIsMzM6ImFjY19kZXNjciIsMzQ6ImFjY19kZXNjcl92YWx1ZSIsMzU6ImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiLDM2OiJsb29wIiwzNzoicmVjdCIsMzg6Im9wdCIsMzk6ImFsdCIsNDE6InBhciIsNDM6InBhcl9vdmVyIiw0NDoiY3JpdGljYWwiLDQ2OiJicmVhayIsNDc6Im9wdGlvbiIsNDg6ImFuZCIsNDk6ImVsc2UiLDUwOiJwYXJ0aWNpcGFudCIsNTE6IkFTIiw1MjoicGFydGljaXBhbnRfYWN0b3IiLDUzOiJkZXN0cm95Iiw1NDoibm90ZSIsNTc6Im92ZXIiLDU5OiJsaW5rcyIsNjA6ImxpbmsiLDYxOiJwcm9wZXJ0aWVzIiw2MjoiZGV0YWlscyIsNjQ6IiwiLDY1OiJsZWZ0X29mIiw2NjoicmlnaHRfb2YiLDY4OiIrIiw2OToiLSIsNzA6IkFDVE9SIiw3MToiU09MSURfT1BFTl9BUlJPVyIsNzI6IkRPVFRFRF9PUEVOX0FSUk9XIiw3MzoiU09MSURfQVJST1ciLDc0OiJCSURJUkVDVElPTkFMX1NPTElEX0FSUk9XIiw3NToiRE9UVEVEX0FSUk9XIiw3NjoiQklESVJFQ1RJT05BTF9ET1RURURfQVJST1ciLDc3OiJTT0xJRF9DUk9TUyIsNzg6IkRPVFRFRF9DUk9TUyIsNzk6IlNPTElEX1BPSU5UIiw4MDoiRE9UVEVEX1BPSU5UIiw4MToiVFhUIn0scHJvZHVjdGlvbnNfOlswLFszLDJdLFszLDJdLFszLDJdLFs3LDBdLFs3LDJdLFs4LDJdLFs4LDFdLFs4LDFdLFsxMCwwXSxbMTAsMl0sWzExLDJdLFsxMSwxXSxbMTEsMV0sWzksMV0sWzksMl0sWzksNF0sWzksMl0sWzksNF0sWzksM10sWzksM10sWzksMl0sWzksM10sWzksM10sWzksMl0sWzksMl0sWzksMl0sWzksMl0sWzksMl0sWzksMV0sWzksMV0sWzksMl0sWzksMl0sWzksMV0sWzksNF0sWzksNF0sWzksNF0sWzksNF0sWzksNF0sWzksNF0sWzksNF0sWzksNF0sWzQ1LDFdLFs0NSw0XSxbNDIsMV0sWzQyLDRdLFs0MCwxXSxbNDAsNF0sWzEyLDVdLFsxMiwzXSxbMTIsNV0sWzEyLDNdLFsxMiwzXSxbMjQsNF0sWzI0LDRdLFsyNSwzXSxbMjYsM10sWzI3LDNdLFsyOCwzXSxbNjMsMl0sWzYzLDFdLFs1OCwzXSxbNTgsMV0sWzU1LDFdLFs1NSwxXSxbMTcsNV0sWzE3LDVdLFsxNyw0XSxbMjIsMV0sWzY3LDFdLFs2NywxXSxbNjcsMV0sWzY3LDFdLFs2NywxXSxbNjcsMV0sWzY3LDFdLFs2NywxXSxbNjcsMV0sWzY3LDFdLFs1NiwxXV0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKGosbmUsdGUsaGUsbGUsSixTZSl7dmFyIHNlPUoubGVuZ3RoLTE7c3dpdGNoKGxlKXtjYXNlIDM6cmV0dXJuIGhlLmFwcGx5KEpbc2VdKSxKW3NlXTticmVhaztjYXNlIDQ6Y2FzZSA5OnRoaXMuJD1bXTticmVhaztjYXNlIDU6Y2FzZSAxMDpKW3NlLTFdLnB1c2goSltzZV0pLHRoaXMuJD1KW3NlLTFdO2JyZWFrO2Nhc2UgNjpjYXNlIDc6Y2FzZSAxMTpjYXNlIDEyOnRoaXMuJD1KW3NlXTticmVhaztjYXNlIDg6Y2FzZSAxMzp0aGlzLiQ9W107YnJlYWs7Y2FzZSAxNTpKW3NlXS50eXBlPSJjcmVhdGVQYXJ0aWNpcGFudCIsdGhpcy4kPUpbc2VdO2JyZWFrO2Nhc2UgMTY6SltzZS0xXS51bnNoaWZ0KHt0eXBlOiJib3hTdGFydCIsYm94RGF0YTpoZS5wYXJzZUJveERhdGEoSltzZS0yXSl9KSxKW3NlLTFdLnB1c2goe3R5cGU6ImJveEVuZCIsYm94VGV4dDpKW3NlLTJdfSksdGhpcy4kPUpbc2UtMV07YnJlYWs7Y2FzZSAxODp0aGlzLiQ9e3R5cGU6InNlcXVlbmNlSW5kZXgiLHNlcXVlbmNlSW5kZXg6TnVtYmVyKEpbc2UtMl0pLHNlcXVlbmNlSW5kZXhTdGVwOk51bWJlcihKW3NlLTFdKSxzZXF1ZW5jZVZpc2libGU6ITAsc2lnbmFsVHlwZTpoZS5MSU5FVFlQRS5BVVRPTlVNQkVSfTticmVhaztjYXNlIDE5OnRoaXMuJD17dHlwZToic2VxdWVuY2VJbmRleCIsc2VxdWVuY2VJbmRleDpOdW1iZXIoSltzZS0xXSksc2VxdWVuY2VJbmRleFN0ZXA6MSxzZXF1ZW5jZVZpc2libGU6ITAsc2lnbmFsVHlwZTpoZS5MSU5FVFlQRS5BVVRPTlVNQkVSfTticmVhaztjYXNlIDIwOnRoaXMuJD17dHlwZToic2VxdWVuY2VJbmRleCIsc2VxdWVuY2VWaXNpYmxlOiExLHNpZ25hbFR5cGU6aGUuTElORVRZUEUuQVVUT05VTUJFUn07YnJlYWs7Y2FzZSAyMTp0aGlzLiQ9e3R5cGU6InNlcXVlbmNlSW5kZXgiLHNlcXVlbmNlVmlzaWJsZTohMCxzaWduYWxUeXBlOmhlLkxJTkVUWVBFLkFVVE9OVU1CRVJ9O2JyZWFrO2Nhc2UgMjI6dGhpcy4kPXt0eXBlOiJhY3RpdmVTdGFydCIsc2lnbmFsVHlwZTpoZS5MSU5FVFlQRS5BQ1RJVkVfU1RBUlQsYWN0b3I6SltzZS0xXS5hY3Rvcn07YnJlYWs7Y2FzZSAyMzp0aGlzLiQ9e3R5cGU6ImFjdGl2ZUVuZCIsc2lnbmFsVHlwZTpoZS5MSU5FVFlQRS5BQ1RJVkVfRU5ELGFjdG9yOkpbc2UtMV0uYWN0b3J9O2JyZWFrO2Nhc2UgMjk6aGUuc2V0RGlhZ3JhbVRpdGxlKEpbc2VdLnN1YnN0cmluZyg2KSksdGhpcy4kPUpbc2VdLnN1YnN0cmluZyg2KTticmVhaztjYXNlIDMwOmhlLnNldERpYWdyYW1UaXRsZShKW3NlXS5zdWJzdHJpbmcoNykpLHRoaXMuJD1KW3NlXS5zdWJzdHJpbmcoNyk7YnJlYWs7Y2FzZSAzMTp0aGlzLiQ9SltzZV0udHJpbSgpLGhlLnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAzMjpjYXNlIDMzOnRoaXMuJD1KW3NlXS50cmltKCksaGUuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDM0Okpbc2UtMV0udW5zaGlmdCh7dHlwZToibG9vcFN0YXJ0Iixsb29wVGV4dDpoZS5wYXJzZU1lc3NhZ2UoSltzZS0yXSksc2lnbmFsVHlwZTpoZS5MSU5FVFlQRS5MT09QX1NUQVJUfSksSltzZS0xXS5wdXNoKHt0eXBlOiJsb29wRW5kIixsb29wVGV4dDpKW3NlLTJdLHNpZ25hbFR5cGU6aGUuTElORVRZUEUuTE9PUF9FTkR9KSx0aGlzLiQ9SltzZS0xXTticmVhaztjYXNlIDM1Okpbc2UtMV0udW5zaGlmdCh7dHlwZToicmVjdFN0YXJ0Iixjb2xvcjpoZS5wYXJzZU1lc3NhZ2UoSltzZS0yXSksc2lnbmFsVHlwZTpoZS5MSU5FVFlQRS5SRUNUX1NUQVJUfSksSltzZS0xXS5wdXNoKHt0eXBlOiJyZWN0RW5kIixjb2xvcjpoZS5wYXJzZU1lc3NhZ2UoSltzZS0yXSksc2lnbmFsVHlwZTpoZS5MSU5FVFlQRS5SRUNUX0VORH0pLHRoaXMuJD1KW3NlLTFdO2JyZWFrO2Nhc2UgMzY6SltzZS0xXS51bnNoaWZ0KHt0eXBlOiJvcHRTdGFydCIsb3B0VGV4dDpoZS5wYXJzZU1lc3NhZ2UoSltzZS0yXSksc2lnbmFsVHlwZTpoZS5MSU5FVFlQRS5PUFRfU1RBUlR9KSxKW3NlLTFdLnB1c2goe3R5cGU6Im9wdEVuZCIsb3B0VGV4dDpoZS5wYXJzZU1lc3NhZ2UoSltzZS0yXSksc2lnbmFsVHlwZTpoZS5MSU5FVFlQRS5PUFRfRU5EfSksdGhpcy4kPUpbc2UtMV07YnJlYWs7Y2FzZSAzNzpKW3NlLTFdLnVuc2hpZnQoe3R5cGU6ImFsdFN0YXJ0IixhbHRUZXh0OmhlLnBhcnNlTWVzc2FnZShKW3NlLTJdKSxzaWduYWxUeXBlOmhlLkxJTkVUWVBFLkFMVF9TVEFSVH0pLEpbc2UtMV0ucHVzaCh7dHlwZToiYWx0RW5kIixzaWduYWxUeXBlOmhlLkxJTkVUWVBFLkFMVF9FTkR9KSx0aGlzLiQ9SltzZS0xXTticmVhaztjYXNlIDM4Okpbc2UtMV0udW5zaGlmdCh7dHlwZToicGFyU3RhcnQiLHBhclRleHQ6aGUucGFyc2VNZXNzYWdlKEpbc2UtMl0pLHNpZ25hbFR5cGU6aGUuTElORVRZUEUuUEFSX1NUQVJUfSksSltzZS0xXS5wdXNoKHt0eXBlOiJwYXJFbmQiLHNpZ25hbFR5cGU6aGUuTElORVRZUEUuUEFSX0VORH0pLHRoaXMuJD1KW3NlLTFdO2JyZWFrO2Nhc2UgMzk6SltzZS0xXS51bnNoaWZ0KHt0eXBlOiJwYXJTdGFydCIscGFyVGV4dDpoZS5wYXJzZU1lc3NhZ2UoSltzZS0yXSksc2lnbmFsVHlwZTpoZS5MSU5FVFlQRS5QQVJfT1ZFUl9TVEFSVH0pLEpbc2UtMV0ucHVzaCh7dHlwZToicGFyRW5kIixzaWduYWxUeXBlOmhlLkxJTkVUWVBFLlBBUl9FTkR9KSx0aGlzLiQ9SltzZS0xXTticmVhaztjYXNlIDQwOkpbc2UtMV0udW5zaGlmdCh7dHlwZToiY3JpdGljYWxTdGFydCIsY3JpdGljYWxUZXh0OmhlLnBhcnNlTWVzc2FnZShKW3NlLTJdKSxzaWduYWxUeXBlOmhlLkxJTkVUWVBFLkNSSVRJQ0FMX1NUQVJUfSksSltzZS0xXS5wdXNoKHt0eXBlOiJjcml0aWNhbEVuZCIsc2lnbmFsVHlwZTpoZS5MSU5FVFlQRS5DUklUSUNBTF9FTkR9KSx0aGlzLiQ9SltzZS0xXTticmVhaztjYXNlIDQxOkpbc2UtMV0udW5zaGlmdCh7dHlwZToiYnJlYWtTdGFydCIsYnJlYWtUZXh0OmhlLnBhcnNlTWVzc2FnZShKW3NlLTJdKSxzaWduYWxUeXBlOmhlLkxJTkVUWVBFLkJSRUFLX1NUQVJUfSksSltzZS0xXS5wdXNoKHt0eXBlOiJicmVha0VuZCIsb3B0VGV4dDpoZS5wYXJzZU1lc3NhZ2UoSltzZS0yXSksc2lnbmFsVHlwZTpoZS5MSU5FVFlQRS5CUkVBS19FTkR9KSx0aGlzLiQ9SltzZS0xXTticmVhaztjYXNlIDQzOnRoaXMuJD1KW3NlLTNdLmNvbmNhdChbe3R5cGU6Im9wdGlvbiIsb3B0aW9uVGV4dDpoZS5wYXJzZU1lc3NhZ2UoSltzZS0xXSksc2lnbmFsVHlwZTpoZS5MSU5FVFlQRS5DUklUSUNBTF9PUFRJT059LEpbc2VdXSk7YnJlYWs7Y2FzZSA0NTp0aGlzLiQ9SltzZS0zXS5jb25jYXQoW3t0eXBlOiJhbmQiLHBhclRleHQ6aGUucGFyc2VNZXNzYWdlKEpbc2UtMV0pLHNpZ25hbFR5cGU6aGUuTElORVRZUEUuUEFSX0FORH0sSltzZV1dKTticmVhaztjYXNlIDQ3OnRoaXMuJD1KW3NlLTNdLmNvbmNhdChbe3R5cGU6ImVsc2UiLGFsdFRleHQ6aGUucGFyc2VNZXNzYWdlKEpbc2UtMV0pLHNpZ25hbFR5cGU6aGUuTElORVRZUEUuQUxUX0VMU0V9LEpbc2VdXSk7YnJlYWs7Y2FzZSA0ODpKW3NlLTNdLmRyYXc9InBhcnRpY2lwYW50IixKW3NlLTNdLnR5cGU9ImFkZFBhcnRpY2lwYW50IixKW3NlLTNdLmRlc2NyaXB0aW9uPWhlLnBhcnNlTWVzc2FnZShKW3NlLTFdKSx0aGlzLiQ9SltzZS0zXTticmVhaztjYXNlIDQ5Okpbc2UtMV0uZHJhdz0icGFydGljaXBhbnQiLEpbc2UtMV0udHlwZT0iYWRkUGFydGljaXBhbnQiLHRoaXMuJD1KW3NlLTFdO2JyZWFrO2Nhc2UgNTA6SltzZS0zXS5kcmF3PSJhY3RvciIsSltzZS0zXS50eXBlPSJhZGRQYXJ0aWNpcGFudCIsSltzZS0zXS5kZXNjcmlwdGlvbj1oZS5wYXJzZU1lc3NhZ2UoSltzZS0xXSksdGhpcy4kPUpbc2UtM107YnJlYWs7Y2FzZSA1MTpKW3NlLTFdLmRyYXc9ImFjdG9yIixKW3NlLTFdLnR5cGU9ImFkZFBhcnRpY2lwYW50Iix0aGlzLiQ9SltzZS0xXTticmVhaztjYXNlIDUyOkpbc2UtMV0udHlwZT0iZGVzdHJveVBhcnRpY2lwYW50Iix0aGlzLiQ9SltzZS0xXTticmVhaztjYXNlIDUzOnRoaXMuJD1bSltzZS0xXSx7dHlwZToiYWRkTm90ZSIscGxhY2VtZW50Okpbc2UtMl0sYWN0b3I6SltzZS0xXS5hY3Rvcix0ZXh0Okpbc2VdfV07YnJlYWs7Y2FzZSA1NDpKW3NlLTJdPVtdLmNvbmNhdChKW3NlLTFdLEpbc2UtMV0pLnNsaWNlKDAsMiksSltzZS0yXVswXT1KW3NlLTJdWzBdLmFjdG9yLEpbc2UtMl1bMV09SltzZS0yXVsxXS5hY3Rvcix0aGlzLiQ9W0pbc2UtMV0se3R5cGU6ImFkZE5vdGUiLHBsYWNlbWVudDpoZS5QTEFDRU1FTlQuT1ZFUixhY3RvcjpKW3NlLTJdLnNsaWNlKDAsMiksdGV4dDpKW3NlXX1dO2JyZWFrO2Nhc2UgNTU6dGhpcy4kPVtKW3NlLTFdLHt0eXBlOiJhZGRMaW5rcyIsYWN0b3I6SltzZS0xXS5hY3Rvcix0ZXh0Okpbc2VdfV07YnJlYWs7Y2FzZSA1Njp0aGlzLiQ9W0pbc2UtMV0se3R5cGU6ImFkZEFMaW5rIixhY3RvcjpKW3NlLTFdLmFjdG9yLHRleHQ6SltzZV19XTticmVhaztjYXNlIDU3OnRoaXMuJD1bSltzZS0xXSx7dHlwZToiYWRkUHJvcGVydGllcyIsYWN0b3I6SltzZS0xXS5hY3Rvcix0ZXh0Okpbc2VdfV07YnJlYWs7Y2FzZSA1ODp0aGlzLiQ9W0pbc2UtMV0se3R5cGU6ImFkZERldGFpbHMiLGFjdG9yOkpbc2UtMV0uYWN0b3IsdGV4dDpKW3NlXX1dO2JyZWFrO2Nhc2UgNjE6dGhpcy4kPVtKW3NlLTJdLEpbc2VdXTticmVhaztjYXNlIDYyOnRoaXMuJD1KW3NlXTticmVhaztjYXNlIDYzOnRoaXMuJD1oZS5QTEFDRU1FTlQuTEVGVE9GO2JyZWFrO2Nhc2UgNjQ6dGhpcy4kPWhlLlBMQUNFTUVOVC5SSUdIVE9GO2JyZWFrO2Nhc2UgNjU6dGhpcy4kPVtKW3NlLTRdLEpbc2UtMV0se3R5cGU6ImFkZE1lc3NhZ2UiLGZyb206SltzZS00XS5hY3Rvcix0bzpKW3NlLTFdLmFjdG9yLHNpZ25hbFR5cGU6SltzZS0zXSxtc2c6SltzZV0sYWN0aXZhdGU6ITB9LHt0eXBlOiJhY3RpdmVTdGFydCIsc2lnbmFsVHlwZTpoZS5MSU5FVFlQRS5BQ1RJVkVfU1RBUlQsYWN0b3I6SltzZS0xXS5hY3Rvcn1dO2JyZWFrO2Nhc2UgNjY6dGhpcy4kPVtKW3NlLTRdLEpbc2UtMV0se3R5cGU6ImFkZE1lc3NhZ2UiLGZyb206SltzZS00XS5hY3Rvcix0bzpKW3NlLTFdLmFjdG9yLHNpZ25hbFR5cGU6SltzZS0zXSxtc2c6SltzZV19LHt0eXBlOiJhY3RpdmVFbmQiLHNpZ25hbFR5cGU6aGUuTElORVRZUEUuQUNUSVZFX0VORCxhY3RvcjpKW3NlLTRdLmFjdG9yfV07YnJlYWs7Y2FzZSA2Nzp0aGlzLiQ9W0pbc2UtM10sSltzZS0xXSx7dHlwZToiYWRkTWVzc2FnZSIsZnJvbTpKW3NlLTNdLmFjdG9yLHRvOkpbc2UtMV0uYWN0b3Isc2lnbmFsVHlwZTpKW3NlLTJdLG1zZzpKW3NlXX1dO2JyZWFrO2Nhc2UgNjg6dGhpcy4kPXt0eXBlOiJhZGRQYXJ0aWNpcGFudCIsYWN0b3I6SltzZV19O2JyZWFrO2Nhc2UgNjk6dGhpcy4kPWhlLkxJTkVUWVBFLlNPTElEX09QRU47YnJlYWs7Y2FzZSA3MDp0aGlzLiQ9aGUuTElORVRZUEUuRE9UVEVEX09QRU47YnJlYWs7Y2FzZSA3MTp0aGlzLiQ9aGUuTElORVRZUEUuU09MSUQ7YnJlYWs7Y2FzZSA3Mjp0aGlzLiQ9aGUuTElORVRZUEUuQklESVJFQ1RJT05BTF9TT0xJRDticmVhaztjYXNlIDczOnRoaXMuJD1oZS5MSU5FVFlQRS5ET1RURUQ7YnJlYWs7Y2FzZSA3NDp0aGlzLiQ9aGUuTElORVRZUEUuQklESVJFQ1RJT05BTF9ET1RURUQ7YnJlYWs7Y2FzZSA3NTp0aGlzLiQ9aGUuTElORVRZUEUuU09MSURfQ1JPU1M7YnJlYWs7Y2FzZSA3Njp0aGlzLiQ9aGUuTElORVRZUEUuRE9UVEVEX0NST1NTO2JyZWFrO2Nhc2UgNzc6dGhpcy4kPWhlLkxJTkVUWVBFLlNPTElEX1BPSU5UO2JyZWFrO2Nhc2UgNzg6dGhpcy4kPWhlLkxJTkVUWVBFLkRPVFRFRF9QT0lOVDticmVhaztjYXNlIDc5OnRoaXMuJD1oZS5wYXJzZU1lc3NhZ2UoSltzZV0udHJpbSgpLnN1YnN0cmluZygxKSk7YnJlYWt9fSwiYW5vbnltb3VzIiksdGFibGU6W3szOjEsNDplLDU6ciw2Om59LHsxOlszXX0sezM6NSw0OmUsNTpyLDY6bn0sezM6Niw0OmUsNTpyLDY6bn0sdChbMSw0LDUsMTMsMTQsMTgsMjEsMjMsMjksMzAsMzEsMzMsMzUsMzYsMzcsMzgsMzksNDEsNDMsNDQsNDYsNTAsNTIsNTMsNTQsNTksNjAsNjEsNjIsNzBdLGksezc6N30pLHsxOlsyLDFdfSx7MTpbMiwyXX0sezE6WzIsM10sNDphLDU6cyw4OjgsOToxMCwxMjoxMiwxMzpsLDE0OnUsMTc6MTUsMTg6aCwyMTpmLDIyOjQwLDIzOmQsMjQ6MTksMjU6MjAsMjY6MjEsMjc6MjIsMjg6MjMsMjk6cCwzMDptLDMxOmcsMzM6eSwzNTp2LDM2OngsMzc6YiwzODpULDM5OlMsNDE6dyw0MzpFLDQ0Ol8sNDY6Qyw1MDpELDUyOk8sNTM6Uiw1NDprLDU5OkwsNjA6QSw2MTpJLDYyOk0sNzA6UH0sdChCLFsyLDVdKSx7OTo0NywxMjoxMiwxMzpsLDE0OnUsMTc6MTUsMTg6aCwyMTpmLDIyOjQwLDIzOmQsMjQ6MTksMjU6MjAsMjY6MjEsMjc6MjIsMjg6MjMsMjk6cCwzMDptLDMxOmcsMzM6eSwzNTp2LDM2OngsMzc6YiwzODpULDM5OlMsNDE6dyw0MzpFLDQ0Ol8sNDY6Qyw1MDpELDUyOk8sNTM6Uiw1NDprLDU5OkwsNjA6QSw2MTpJLDYyOk0sNzA6UH0sdChCLFsyLDddKSx0KEIsWzIsOF0pLHQoQixbMiwxNF0pLHsxMjo0OCw1MDpELDUyOk8sNTM6Un0sezE1OlsxLDQ5XX0sezU6WzEsNTBdfSx7NTpbMSw1M10sMTk6WzEsNTFdLDIwOlsxLDUyXX0sezIyOjU0LDcwOlB9LHsyMjo1NSw3MDpQfSx7NTpbMSw1Nl19LHs1OlsxLDU3XX0sezU6WzEsNThdfSx7NTpbMSw1OV19LHs1OlsxLDYwXX0sdChCLFsyLDI5XSksdChCLFsyLDMwXSksezMyOlsxLDYxXX0sezM0OlsxLDYyXX0sdChCLFsyLDMzXSksezE1OlsxLDYzXX0sezE1OlsxLDY0XX0sezE1OlsxLDY1XX0sezE1OlsxLDY2XX0sezE1OlsxLDY3XX0sezE1OlsxLDY4XX0sezE1OlsxLDY5XX0sezE1OlsxLDcwXX0sezIyOjcxLDcwOlB9LHsyMjo3Miw3MDpQfSx7MjI6NzMsNzA6UH0sezY3Ojc0LDcxOlsxLDc1XSw3MjpbMSw3Nl0sNzM6WzEsNzddLDc0OlsxLDc4XSw3NTpbMSw3OV0sNzY6WzEsODBdLDc3OlsxLDgxXSw3ODpbMSw4Ml0sNzk6WzEsODNdLDgwOlsxLDg0XX0sezU1Ojg1LDU3OlsxLDg2XSw2NTpbMSw4N10sNjY6WzEsODhdfSx7MjI6ODksNzA6UH0sezIyOjkwLDcwOlB9LHsyMjo5MSw3MDpQfSx7MjI6OTIsNzA6UH0sdChbNSw1MSw2NCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MV0sWzIsNjhdKSx0KEIsWzIsNl0pLHQoQixbMiwxNV0pLHQoRixbMiw5XSx7MTA6OTN9KSx0KEIsWzIsMTddKSx7NTpbMSw5NV0sMTk6WzEsOTRdfSx7NTpbMSw5Nl19LHQoQixbMiwyMV0pLHs1OlsxLDk3XX0sezU6WzEsOThdfSx0KEIsWzIsMjRdKSx0KEIsWzIsMjVdKSx0KEIsWzIsMjZdKSx0KEIsWzIsMjddKSx0KEIsWzIsMjhdKSx0KEIsWzIsMzFdKSx0KEIsWzIsMzJdKSx0KHosaSx7Nzo5OX0pLHQoeixpLHs3OjEwMH0pLHQoeixpLHs3OjEwMX0pLHQoJCxpLHs0MDoxMDIsNzoxMDN9KSx0KFUsaSx7NDI6MTA0LDc6MTA1fSksdChVLGksezc6MTA1LDQyOjEwNn0pLHQoSyxpLHs0NToxMDcsNzoxMDh9KSx0KHosaSx7NzoxMDl9KSx7NTpbMSwxMTFdLDUxOlsxLDExMF19LHs1OlsxLDExM10sNTE6WzEsMTEyXX0sezU6WzEsMTE0XX0sezIyOjExNyw2ODpbMSwxMTVdLDY5OlsxLDExNl0sNzA6UH0sdChlZSxbMiw2OV0pLHQoZWUsWzIsNzBdKSx0KGVlLFsyLDcxXSksdChlZSxbMiw3Ml0pLHQoZWUsWzIsNzNdKSx0KGVlLFsyLDc0XSksdChlZSxbMiw3NV0pLHQoZWUsWzIsNzZdKSx0KGVlLFsyLDc3XSksdChlZSxbMiw3OF0pLHsyMjoxMTgsNzA6UH0sezIyOjEyMCw1ODoxMTksNzA6UH0sezcwOlsyLDYzXX0sezcwOlsyLDY0XX0sezU2OjEyMSw4MTpZfSx7NTY6MTIzLDgxOll9LHs1NjoxMjQsODE6WX0sezU2OjEyNSw4MTpZfSx7NDpbMSwxMjhdLDU6WzEsMTMwXSwxMToxMjcsMTI6MTI5LDE2OlsxLDEyNl0sNTA6RCw1MjpPLDUzOlJ9LHs1OlsxLDEzMV19LHQoQixbMiwxOV0pLHQoQixbMiwyMF0pLHQoQixbMiwyMl0pLHQoQixbMiwyM10pLHs0OmEsNTpzLDg6OCw5OjEwLDEyOjEyLDEzOmwsMTQ6dSwxNjpbMSwxMzJdLDE3OjE1LDE4OmgsMjE6ZiwyMjo0MCwyMzpkLDI0OjE5LDI1OjIwLDI2OjIxLDI3OjIyLDI4OjIzLDI5OnAsMzA6bSwzMTpnLDMzOnksMzU6diwzNjp4LDM3OmIsMzg6VCwzOTpTLDQxOncsNDM6RSw0NDpfLDQ2OkMsNTA6RCw1MjpPLDUzOlIsNTQ6ayw1OTpMLDYwOkEsNjE6SSw2MjpNLDcwOlB9LHs0OmEsNTpzLDg6OCw5OjEwLDEyOjEyLDEzOmwsMTQ6dSwxNjpbMSwxMzNdLDE3OjE1LDE4OmgsMjE6ZiwyMjo0MCwyMzpkLDI0OjE5LDI1OjIwLDI2OjIxLDI3OjIyLDI4OjIzLDI5OnAsMzA6bSwzMTpnLDMzOnksMzU6diwzNjp4LDM3OmIsMzg6VCwzOTpTLDQxOncsNDM6RSw0NDpfLDQ2OkMsNTA6RCw1MjpPLDUzOlIsNTQ6ayw1OTpMLDYwOkEsNjE6SSw2MjpNLDcwOlB9LHs0OmEsNTpzLDg6OCw5OjEwLDEyOjEyLDEzOmwsMTQ6dSwxNjpbMSwxMzRdLDE3OjE1LDE4OmgsMjE6ZiwyMjo0MCwyMzpkLDI0OjE5LDI1OjIwLDI2OjIxLDI3OjIyLDI4OjIzLDI5OnAsMzA6bSwzMTpnLDMzOnksMzU6diwzNjp4LDM3OmIsMzg6VCwzOTpTLDQxOncsNDM6RSw0NDpfLDQ2OkMsNTA6RCw1MjpPLDUzOlIsNTQ6ayw1OTpMLDYwOkEsNjE6SSw2MjpNLDcwOlB9LHsxNjpbMSwxMzVdfSx7NDphLDU6cyw4OjgsOToxMCwxMjoxMiwxMzpsLDE0OnUsMTY6WzIsNDZdLDE3OjE1LDE4OmgsMjE6ZiwyMjo0MCwyMzpkLDI0OjE5LDI1OjIwLDI2OjIxLDI3OjIyLDI4OjIzLDI5OnAsMzA6bSwzMTpnLDMzOnksMzU6diwzNjp4LDM3OmIsMzg6VCwzOTpTLDQxOncsNDM6RSw0NDpfLDQ2OkMsNDk6WzEsMTM2XSw1MDpELDUyOk8sNTM6Uiw1NDprLDU5OkwsNjA6QSw2MTpJLDYyOk0sNzA6UH0sezE2OlsxLDEzN119LHs0OmEsNTpzLDg6OCw5OjEwLDEyOjEyLDEzOmwsMTQ6dSwxNjpbMiw0NF0sMTc6MTUsMTg6aCwyMTpmLDIyOjQwLDIzOmQsMjQ6MTksMjU6MjAsMjY6MjEsMjc6MjIsMjg6MjMsMjk6cCwzMDptLDMxOmcsMzM6eSwzNTp2LDM2OngsMzc6YiwzODpULDM5OlMsNDE6dyw0MzpFLDQ0Ol8sNDY6Qyw0ODpbMSwxMzhdLDUwOkQsNTI6Tyw1MzpSLDU0OmssNTk6TCw2MDpBLDYxOkksNjI6TSw3MDpQfSx7MTY6WzEsMTM5XX0sezE2OlsxLDE0MF19LHs0OmEsNTpzLDg6OCw5OjEwLDEyOjEyLDEzOmwsMTQ6dSwxNjpbMiw0Ml0sMTc6MTUsMTg6aCwyMTpmLDIyOjQwLDIzOmQsMjQ6MTksMjU6MjAsMjY6MjEsMjc6MjIsMjg6MjMsMjk6cCwzMDptLDMxOmcsMzM6eSwzNTp2LDM2OngsMzc6YiwzODpULDM5OlMsNDE6dyw0MzpFLDQ0Ol8sNDY6Qyw0NzpbMSwxNDFdLDUwOkQsNTI6Tyw1MzpSLDU0OmssNTk6TCw2MDpBLDYxOkksNjI6TSw3MDpQfSx7NDphLDU6cyw4OjgsOToxMCwxMjoxMiwxMzpsLDE0OnUsMTY6WzEsMTQyXSwxNzoxNSwxODpoLDIxOmYsMjI6NDAsMjM6ZCwyNDoxOSwyNToyMCwyNjoyMSwyNzoyMiwyODoyMywyOTpwLDMwOm0sMzE6ZywzMzp5LDM1OnYsMzY6eCwzNzpiLDM4OlQsMzk6Uyw0MTp3LDQzOkUsNDQ6Xyw0NjpDLDUwOkQsNTI6Tyw1MzpSLDU0OmssNTk6TCw2MDpBLDYxOkksNjI6TSw3MDpQfSx7MTU6WzEsMTQzXX0sdChCLFsyLDQ5XSksezE1OlsxLDE0NF19LHQoQixbMiw1MV0pLHQoQixbMiw1Ml0pLHsyMjoxNDUsNzA6UH0sezIyOjE0Niw3MDpQfSx7NTY6MTQ3LDgxOll9LHs1NjoxNDgsODE6WX0sezU2OjE0OSw4MTpZfSx7NjQ6WzEsMTUwXSw4MTpbMiw2Ml19LHs1OlsyLDU1XX0sezU6WzIsNzldfSx7NTpbMiw1Nl19LHs1OlsyLDU3XX0sezU6WzIsNThdfSx0KEIsWzIsMTZdKSx0KEYsWzIsMTBdKSx7MTI6MTUxLDUwOkQsNTI6Tyw1MzpSfSx0KEYsWzIsMTJdKSx0KEYsWzIsMTNdKSx0KEIsWzIsMThdKSx0KEIsWzIsMzRdKSx0KEIsWzIsMzVdKSx0KEIsWzIsMzZdKSx0KEIsWzIsMzddKSx7MTU6WzEsMTUyXX0sdChCLFsyLDM4XSksezE1OlsxLDE1M119LHQoQixbMiwzOV0pLHQoQixbMiw0MF0pLHsxNTpbMSwxNTRdfSx0KEIsWzIsNDFdKSx7NTpbMSwxNTVdfSx7NTpbMSwxNTZdfSx7NTY6MTU3LDgxOll9LHs1NjoxNTgsODE6WX0sezU6WzIsNjddfSx7NTpbMiw1M119LHs1OlsyLDU0XX0sezIyOjE1OSw3MDpQfSx0KEYsWzIsMTFdKSx0KCQsaSx7NzoxMDMsNDA6MTYwfSksdChVLGksezc6MTA1LDQyOjE2MX0pLHQoSyxpLHs3OjEwOCw0NToxNjJ9KSx0KEIsWzIsNDhdKSx0KEIsWzIsNTBdKSx7NTpbMiw2NV19LHs1OlsyLDY2XX0sezgxOlsyLDYxXX0sezE2OlsyLDQ3XX0sezE2OlsyLDQ1XX0sezE2OlsyLDQzXX1dLGRlZmF1bHRBY3Rpb25zOns1OlsyLDFdLDY6WzIsMl0sODc6WzIsNjNdLDg4OlsyLDY0XSwxMjE6WzIsNTVdLDEyMjpbMiw3OV0sMTIzOlsyLDU2XSwxMjQ6WzIsNTddLDEyNTpbMiw1OF0sMTQ3OlsyLDY3XSwxNDg6WzIsNTNdLDE0OTpbMiw1NF0sMTU3OlsyLDY1XSwxNTg6WzIsNjZdLDE1OTpbMiw2MV0sMTYwOlsyLDQ3XSwxNjE6WzIsNDVdLDE2MjpbMiw0M119LHBhcnNlRXJyb3I6byhmdW5jdGlvbihqLG5lKXtpZihuZS5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKGopO2Vsc2V7dmFyIHRlPW5ldyBFcnJvcihqKTt0aHJvdyB0ZS5oYXNoPW5lLHRlfX0sInBhcnNlRXJyb3IiKSxwYXJzZTpvKGZ1bmN0aW9uKGope3ZhciBuZT10aGlzLHRlPVswXSxoZT1bXSxsZT1bbnVsbF0sSj1bXSxTZT10aGlzLnRhYmxlLHNlPSIiLGFlPTAsT2U9MCx5ZT0wLEJlPTIsSGU9MSx6ZT1KLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLExlPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksSWU9e3l5Ont9fTtmb3IodmFyIHhlIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXkseGUpJiYoSWUueXlbeGVdPXRoaXMueXlbeGVdKTtMZS5zZXRJbnB1dChqLEllLnl5KSxJZS55eS5sZXhlcj1MZSxJZS55eS5wYXJzZXI9dGhpcyx0eXBlb2YgTGUueXlsbG9jPiJ1IiYmKExlLnl5bGxvYz17fSk7dmFyIHE9TGUueXlsbG9jO0oucHVzaChxKTt2YXIgZGU9TGUub3B0aW9ucyYmTGUub3B0aW9ucy5yYW5nZXM7dHlwZW9mIEllLnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPUllLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIGllKFJ0KXt0ZS5sZW5ndGg9dGUubGVuZ3RoLTIqUnQsbGUubGVuZ3RoPWxlLmxlbmd0aC1SdCxKLmxlbmd0aD1KLmxlbmd0aC1SdH1vKGllLCJwb3BTdGFjayIpO2Z1bmN0aW9uIG9lKCl7dmFyIFJ0O3JldHVybiBSdD1oZS5wb3AoKXx8TGUubGV4KCl8fEhlLHR5cGVvZiBSdCE9Im51bWJlciImJihSdCBpbnN0YW5jZW9mIEFycmF5JiYoaGU9UnQsUnQ9aGUucG9wKCkpLFJ0PW5lLnN5bWJvbHNfW1J0XXx8UnQpLFJ0fW8ob2UsImxleCIpO2Zvcih2YXIgVixUZSxXLHBlLHZlLFBlLF9lPXt9LGJlLFZlLERlLHFlOzspe2lmKFc9dGVbdGUubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbV10/cGU9dGhpcy5kZWZhdWx0QWN0aW9uc1tXXTooKFY9PT1udWxsfHx0eXBlb2YgVj4idSIpJiYoVj1vZSgpKSxwZT1TZVtXXSYmU2VbV11bVl0pLHR5cGVvZiBwZT4idSJ8fCFwZS5sZW5ndGh8fCFwZVswXSl7dmFyIGF0PSIiO3FlPVtdO2ZvcihiZSBpbiBTZVtXXSl0aGlzLnRlcm1pbmFsc19bYmVdJiZiZT5CZSYmcWUucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW2JlXSsiJyIpO0xlLnNob3dQb3NpdGlvbj9hdD0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhhZSsxKStgOgpgK0xlLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArcWUuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tWXXx8VikrIiciOmF0PSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGFlKzEpKyI6IFVuZXhwZWN0ZWQgIisoVj09SGU/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bVl18fFYpKyInIiksdGhpcy5wYXJzZUVycm9yKGF0LHt0ZXh0OkxlLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tWXXx8VixsaW5lOkxlLnl5bGluZW5vLGxvYzpxLGV4cGVjdGVkOnFlfSl9aWYocGVbMF1pbnN0YW5jZW9mIEFycmF5JiZwZS5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK1crIiwgdG9rZW46ICIrVik7c3dpdGNoKHBlWzBdKXtjYXNlIDE6dGUucHVzaChWKSxsZS5wdXNoKExlLnl5dGV4dCksSi5wdXNoKExlLnl5bGxvYyksdGUucHVzaChwZVsxXSksVj1udWxsLFRlPyhWPVRlLFRlPW51bGwpOihPZT1MZS55eWxlbmcsc2U9TGUueXl0ZXh0LGFlPUxlLnl5bGluZW5vLHE9TGUueXlsbG9jLHllPjAmJnllLS0pO2JyZWFrO2Nhc2UgMjppZihWZT10aGlzLnByb2R1Y3Rpb25zX1twZVsxXV1bMV0sX2UuJD1sZVtsZS5sZW5ndGgtVmVdLF9lLl8kPXtmaXJzdF9saW5lOkpbSi5sZW5ndGgtKFZlfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6SltKLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOkpbSi5sZW5ndGgtKFZlfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOkpbSi5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LGRlJiYoX2UuXyQucmFuZ2U9W0pbSi5sZW5ndGgtKFZlfHwxKV0ucmFuZ2VbMF0sSltKLmxlbmd0aC0xXS5yYW5nZVsxXV0pLFBlPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShfZSxbc2UsT2UsYWUsSWUueXkscGVbMV0sbGUsSl0uY29uY2F0KHplKSksdHlwZW9mIFBlPCJ1IilyZXR1cm4gUGU7VmUmJih0ZT10ZS5zbGljZSgwLC0xKlZlKjIpLGxlPWxlLnNsaWNlKDAsLTEqVmUpLEo9Si5zbGljZSgwLC0xKlZlKSksdGUucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1twZVsxXV1bMF0pLGxlLnB1c2goX2UuJCksSi5wdXNoKF9lLl8kKSxEZT1TZVt0ZVt0ZS5sZW5ndGgtMl1dW3RlW3RlLmxlbmd0aC0xXV0sdGUucHVzaChEZSk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH0sInBhcnNlIil9LFo9ZnVuY3Rpb24oKXt2YXIgUT17RU9GOjEscGFyc2VFcnJvcjpvKGZ1bmN0aW9uKG5lLHRlKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKG5lLHRlKTtlbHNlIHRocm93IG5ldyBFcnJvcihuZSl9LCJwYXJzZUVycm9yIiksc2V0SW5wdXQ6byhmdW5jdGlvbihqLG5lKXtyZXR1cm4gdGhpcy55eT1uZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9aix0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30sInNldElucHV0IiksaW5wdXQ6byhmdW5jdGlvbigpe3ZhciBqPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz1qLHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz1qLHRoaXMubWF0Y2hlZCs9ajt2YXIgbmU9ai5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIG5lPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxqfSwiaW5wdXQiKSx1bnB1dDpvKGZ1bmN0aW9uKGope3ZhciBuZT1qLmxlbmd0aCx0ZT1qLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9ait0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtbmUpLHRoaXMub2Zmc2V0LT1uZTt2YXIgaGU9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksdGUubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT10ZS5sZW5ndGgtMSk7dmFyIGxlPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0ZT8odGUubGVuZ3RoPT09aGUubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStoZVtoZS5sZW5ndGgtdGUubGVuZ3RoXS5sZW5ndGgtdGVbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtsZVswXSxsZVswXSt0aGlzLnl5bGVuZy1uZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSwidW5wdXQiKSxtb3JlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSwibW9yZSIpLHJlamVjdDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSwicmVqZWN0IiksbGVzczpvKGZ1bmN0aW9uKGope3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShqKSl9LCJsZXNzIikscGFzdElucHV0Om8oZnVuY3Rpb24oKXt2YXIgaj10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKGoubGVuZ3RoPjIwPyIuLi4iOiIiKStqLnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSwicGFzdElucHV0IiksdXBjb21pbmdJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIGo9dGhpcy5tYXRjaDtyZXR1cm4gai5sZW5ndGg8MjAmJihqKz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC1qLmxlbmd0aCkpLChqLnN1YnN0cigwLDIwKSsoai5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sInVwY29taW5nSW5wdXQiKSxzaG93UG9zaXRpb246byhmdW5jdGlvbigpe3ZhciBqPXRoaXMucGFzdElucHV0KCksbmU9bmV3IEFycmF5KGoubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gait0aGlzLnVwY29taW5nSW5wdXQoKStgCmArbmUrIl4ifSwic2hvd1Bvc2l0aW9uIiksdGVzdF9tYXRjaDpvKGZ1bmN0aW9uKGosbmUpe3ZhciB0ZSxoZSxsZTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYobGU9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYobGUueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksaGU9alswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksaGUmJih0aGlzLnl5bGluZW5vKz1oZS5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpoZT9oZVtoZS5sZW5ndGgtMV0ubGVuZ3RoLWhlW2hlLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK2pbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9alswXSx0aGlzLm1hdGNoKz1qWzBdLHRoaXMubWF0Y2hlcz1qLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKGpbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPWpbMF0sdGU9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsbmUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksdGUpcmV0dXJuIHRlO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBKIGluIGxlKXRoaXNbSl09bGVbSl07cmV0dXJuITF9cmV0dXJuITF9LCJ0ZXN0X21hdGNoIiksbmV4dDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIGosbmUsdGUsaGU7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgbGU9dGhpcy5fY3VycmVudFJ1bGVzKCksSj0wO0o8bGUubGVuZ3RoO0orKylpZih0ZT10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2xlW0pdXSksdGUmJighbmV8fHRlWzBdLmxlbmd0aD5uZVswXS5sZW5ndGgpKXtpZihuZT10ZSxoZT1KLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKGo9dGhpcy50ZXN0X21hdGNoKHRlLGxlW0pdKSxqIT09ITEpcmV0dXJuIGo7aWYodGhpcy5fYmFja3RyYWNrKXtuZT0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBuZT8oaj10aGlzLnRlc3RfbWF0Y2gobmUsbGVbaGVdKSxqIT09ITE/ajohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sIm5leHQiKSxsZXg6byhmdW5jdGlvbigpe3ZhciBuZT10aGlzLm5leHQoKTtyZXR1cm4gbmV8fHRoaXMubGV4KCl9LCJsZXgiKSxiZWdpbjpvKGZ1bmN0aW9uKG5lKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2gobmUpfSwiYmVnaW4iKSxwb3BTdGF0ZTpvKGZ1bmN0aW9uKCl7dmFyIG5lPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIG5lPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSwicG9wU3RhdGUiKSxfY3VycmVudFJ1bGVzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSwiX2N1cnJlbnRSdWxlcyIpLHRvcFN0YXRlOm8oZnVuY3Rpb24obmUpe3JldHVybiBuZT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKG5lfHwwKSxuZT49MD90aGlzLmNvbmRpdGlvblN0YWNrW25lXToiSU5JVElBTCJ9LCJ0b3BTdGF0ZSIpLHB1c2hTdGF0ZTpvKGZ1bmN0aW9uKG5lKXt0aGlzLmJlZ2luKG5lKX0sInB1c2hTdGF0ZSIpLHN0YXRlU3RhY2tTaXplOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LCJzdGF0ZVN0YWNrU2l6ZSIpLG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKG5lLHRlLGhlLGxlKXt2YXIgSj1sZTtzd2l0Y2goaGUpe2Nhc2UgMDpyZXR1cm4gNTtjYXNlIDE6YnJlYWs7Y2FzZSAyOmJyZWFrO2Nhc2UgMzpicmVhaztjYXNlIDQ6YnJlYWs7Y2FzZSA1OmJyZWFrO2Nhc2UgNjpyZXR1cm4gMTk7Y2FzZSA3OnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksMTQ7YnJlYWs7Y2FzZSA4OnJldHVybiB0aGlzLmJlZ2luKCJJRCIpLDUwO2JyZWFrO2Nhc2UgOTpyZXR1cm4gdGhpcy5iZWdpbigiSUQiKSw1MjticmVhaztjYXNlIDEwOnJldHVybiAxMztjYXNlIDExOnJldHVybiB0aGlzLmJlZ2luKCJJRCIpLDUzO2JyZWFrO2Nhc2UgMTI6cmV0dXJuIHRlLnl5dGV4dD10ZS55eXRleHQudHJpbSgpLHRoaXMuYmVnaW4oIkFMSUFTIiksNzA7YnJlYWs7Y2FzZSAxMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJMSU5FIiksNTE7YnJlYWs7Y2FzZSAxNDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKSw1O2JyZWFrO2Nhc2UgMTU6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSwzNjticmVhaztjYXNlIDE2OnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksMzc7YnJlYWs7Y2FzZSAxNzpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDM4O2JyZWFrO2Nhc2UgMTg6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSwzOTticmVhaztjYXNlIDE5OnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksNDk7YnJlYWs7Y2FzZSAyMDpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDQxO2JyZWFrO2Nhc2UgMjE6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSw0MzticmVhaztjYXNlIDIyOnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksNDg7YnJlYWs7Y2FzZSAyMzpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDQ0O2JyZWFrO2Nhc2UgMjQ6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSw0NzticmVhaztjYXNlIDI1OnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksNDY7YnJlYWs7Y2FzZSAyNjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE1O2JyZWFrO2Nhc2UgMjc6cmV0dXJuIDE2O2Nhc2UgMjg6cmV0dXJuIDY1O2Nhc2UgMjk6cmV0dXJuIDY2O2Nhc2UgMzA6cmV0dXJuIDU5O2Nhc2UgMzE6cmV0dXJuIDYwO2Nhc2UgMzI6cmV0dXJuIDYxO2Nhc2UgMzM6cmV0dXJuIDYyO2Nhc2UgMzQ6cmV0dXJuIDU3O2Nhc2UgMzU6cmV0dXJuIDU0O2Nhc2UgMzY6cmV0dXJuIHRoaXMuYmVnaW4oIklEIiksMjE7YnJlYWs7Y2FzZSAzNzpyZXR1cm4gdGhpcy5iZWdpbigiSUQiKSwyMzticmVhaztjYXNlIDM4OnJldHVybiAyOTtjYXNlIDM5OnJldHVybiAzMDtjYXNlIDQwOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwzMTticmVhaztjYXNlIDQxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7YnJlYWs7Y2FzZSA0MjpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX2Rlc2NyIiksMzM7YnJlYWs7Y2FzZSA0MzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfZGVzY3JfdmFsdWUiO2JyZWFrO2Nhc2UgNDQ6dGhpcy5iZWdpbigiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgNDU6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNDY6cmV0dXJuImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiO2Nhc2UgNDc6cmV0dXJuIDY7Y2FzZSA0ODpyZXR1cm4gMTg7Y2FzZSA0OTpyZXR1cm4gMjA7Y2FzZSA1MDpyZXR1cm4gNjQ7Y2FzZSA1MTpyZXR1cm4gNTtjYXNlIDUyOnJldHVybiB0ZS55eXRleHQ9dGUueXl0ZXh0LnRyaW0oKSw3MDticmVhaztjYXNlIDUzOnJldHVybiA3MztjYXNlIDU0OnJldHVybiA3NDtjYXNlIDU1OnJldHVybiA3NTtjYXNlIDU2OnJldHVybiA3NjtjYXNlIDU3OnJldHVybiA3MTtjYXNlIDU4OnJldHVybiA3MjtjYXNlIDU5OnJldHVybiA3NztjYXNlIDYwOnJldHVybiA3ODtjYXNlIDYxOnJldHVybiA3OTtjYXNlIDYyOnJldHVybiA4MDtjYXNlIDYzOnJldHVybiA4MTtjYXNlIDY0OnJldHVybiA4MTtjYXNlIDY1OnJldHVybiA2ODtjYXNlIDY2OnJldHVybiA2OTtjYXNlIDY3OnJldHVybiA1O2Nhc2UgNjg6cmV0dXJuIklOVkFMSUQifX0sImFub255bW91cyIpLHJ1bGVzOlsvXig/Oltcbl0rKS9pLC9eKD86XHMrKS9pLC9eKD86KCg/IVxuKVxzKSspL2ksL14oPzojW15cbl0qKS9pLC9eKD86JSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzpbMC05XSsoPz1bIFxuXSspKS9pLC9eKD86Ym94XGIpL2ksL14oPzpwYXJ0aWNpcGFudFxiKS9pLC9eKD86YWN0b3JcYikvaSwvXig/OmNyZWF0ZVxiKS9pLC9eKD86ZGVzdHJveVxiKS9pLC9eKD86W15cPC0+XC0+OlxuLDtdKz8oW1wtXSpbXlw8LT5cLT46XG4sO10rPykqPyg/PSgoPyFcbilccykrYXMoPyFcbilcc3xbI1xuO118JCkpL2ksL14oPzphc1xiKS9pLC9eKD86KD86KSkvaSwvXig/Omxvb3BcYikvaSwvXig/OnJlY3RcYikvaSwvXig/Om9wdFxiKS9pLC9eKD86YWx0XGIpL2ksL14oPzplbHNlXGIpL2ksL14oPzpwYXJcYikvaSwvXig/OnBhcl9vdmVyXGIpL2ksL14oPzphbmRcYikvaSwvXig/OmNyaXRpY2FsXGIpL2ksL14oPzpvcHRpb25cYikvaSwvXig/OmJyZWFrXGIpL2ksL14oPzooPzpbOl0/KD86bm8pP3dyYXApP1teI1xuO10qKS9pLC9eKD86ZW5kXGIpL2ksL14oPzpsZWZ0IG9mXGIpL2ksL14oPzpyaWdodCBvZlxiKS9pLC9eKD86bGlua3NcYikvaSwvXig/OmxpbmtcYikvaSwvXig/OnByb3BlcnRpZXNcYikvaSwvXig/OmRldGFpbHNcYikvaSwvXig/Om92ZXJcYikvaSwvXig/Om5vdGVcYikvaSwvXig/OmFjdGl2YXRlXGIpL2ksL14oPzpkZWFjdGl2YXRlXGIpL2ksL14oPzp0aXRsZVxzW14jXG47XSspL2ksL14oPzp0aXRsZTpcc1teI1xuO10rKS9pLC9eKD86YWNjVGl0bGVccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccyo6XHMqKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86YWNjRGVzY3Jccypce1xzKikvaSwvXig/OltcfV0pL2ksL14oPzpbXlx9XSopL2ksL14oPzpzZXF1ZW5jZURpYWdyYW1cYikvaSwvXig/OmF1dG9udW1iZXJcYikvaSwvXig/Om9mZlxiKS9pLC9eKD86LCkvaSwvXig/OjspL2ksL14oPzpbXlwrXDwtPlwtPjpcbiw7XSsoKD8hKC14fC0teHwtXCl8LS1cKSkpW1wtXSpbXlwrXDwtPlwtPjpcbiw7XSspKikvaSwvXig/Oi0+PikvaSwvXig/Ojw8LT4+KS9pLC9eKD86LS0+PikvaSwvXig/Ojw8LS0+PikvaSwvXig/Oi0+KS9pLC9eKD86LS0+KS9pLC9eKD86LVt4XSkvaSwvXig/Oi0tW3hdKS9pLC9eKD86LVtcKV0pL2ksL14oPzotLVtcKV0pL2ksL14oPzo6KD86KD86bm8pP3dyYXApP1teI1xuO10qKS9pLC9eKD86OikvaSwvXig/OlwrKS9pLC9eKD86LSkvaSwvXig/OiQpL2ksL14oPzouKS9pXSxjb25kaXRpb25zOnthY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbNDUsNDZdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbNDNdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbNDFdLGluY2x1c2l2ZTohMX0sSUQ6e3J1bGVzOlsyLDMsMTJdLGluY2x1c2l2ZTohMX0sQUxJQVM6e3J1bGVzOlsyLDMsMTMsMTRdLGluY2x1c2l2ZTohMX0sTElORTp7cnVsZXM6WzIsMywyNl0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDMsNCw1LDYsNyw4LDksMTAsMTEsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDIsNDQsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjhdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gUX0oKTtjZS5sZXhlcj1aO2Z1bmN0aW9uIHVlKCl7dGhpcy55eT17fX1yZXR1cm4gbyh1ZSwiUGFyc2VyIiksdWUucHJvdG90eXBlPWNlLGNlLlBhcnNlcj11ZSxuZXcgdWV9KCk7ZFAucGFyc2VyPWRQO19kZT1kUH0pO3ZhciBGVWUsJFVlLHpVZSxZUyxMZGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtHdCgpO3l0KCk7U1MoKTtwcigpO2NpKCk7RlVlPXtTT0xJRDowLERPVFRFRDoxLE5PVEU6MixTT0xJRF9DUk9TUzozLERPVFRFRF9DUk9TUzo0LFNPTElEX09QRU46NSxET1RURURfT1BFTjo2LExPT1BfU1RBUlQ6MTAsTE9PUF9FTkQ6MTEsQUxUX1NUQVJUOjEyLEFMVF9FTFNFOjEzLEFMVF9FTkQ6MTQsT1BUX1NUQVJUOjE1LE9QVF9FTkQ6MTYsQUNUSVZFX1NUQVJUOjE3LEFDVElWRV9FTkQ6MTgsUEFSX1NUQVJUOjE5LFBBUl9BTkQ6MjAsUEFSX0VORDoyMSxSRUNUX1NUQVJUOjIyLFJFQ1RfRU5EOjIzLFNPTElEX1BPSU5UOjI0LERPVFRFRF9QT0lOVDoyNSxBVVRPTlVNQkVSOjI2LENSSVRJQ0FMX1NUQVJUOjI3LENSSVRJQ0FMX09QVElPTjoyOCxDUklUSUNBTF9FTkQ6MjksQlJFQUtfU1RBUlQ6MzAsQlJFQUtfRU5EOjMxLFBBUl9PVkVSX1NUQVJUOjMyLEJJRElSRUNUSU9OQUxfU09MSUQ6MzMsQklESVJFQ1RJT05BTF9ET1RURUQ6MzR9LCRVZT17RklMTEVEOjAsT1BFTjoxfSx6VWU9e0xFRlRPRjowLFJJR0hUT0Y6MSxPVkVSOjJ9LFlTPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zdGF0ZT1uZXcgVGYoKCk9Pih7cHJldkFjdG9yOnZvaWQgMCxhY3RvcnM6bmV3IE1hcCxjcmVhdGVkQWN0b3JzOm5ldyBNYXAsZGVzdHJveWVkQWN0b3JzOm5ldyBNYXAsYm94ZXM6W10sbWVzc2FnZXM6W10sbm90ZXM6W10sc2VxdWVuY2VOdW1iZXJzRW5hYmxlZDohMSx3cmFwRW5hYmxlZDp2b2lkIDAsY3VycmVudEJveDp2b2lkIDAsbGFzdENyZWF0ZWQ6dm9pZCAwLGxhc3REZXN0cm95ZWQ6dm9pZCAwfSkpO3RoaXMuc2V0QWNjVGl0bGU9QXI7dGhpcy5zZXRBY2NEZXNjcmlwdGlvbj1Mcjt0aGlzLnNldERpYWdyYW1UaXRsZT1Pcjt0aGlzLmdldEFjY1RpdGxlPURyO3RoaXMuZ2V0QWNjRGVzY3JpcHRpb249UnI7dGhpcy5nZXREaWFncmFtVGl0bGU9TnI7dGhpcy5hcHBseT10aGlzLmFwcGx5LmJpbmQodGhpcyksdGhpcy5wYXJzZUJveERhdGE9dGhpcy5wYXJzZUJveERhdGEuYmluZCh0aGlzKSx0aGlzLnBhcnNlTWVzc2FnZT10aGlzLnBhcnNlTWVzc2FnZS5iaW5kKHRoaXMpLHRoaXMuY2xlYXIoKSx0aGlzLnNldFdyYXAobWUoKS53cmFwKSx0aGlzLkxJTkVUWVBFPUZVZSx0aGlzLkFSUk9XVFlQRT0kVWUsdGhpcy5QTEFDRU1FTlQ9elVlfXN0YXRpY3tvKHRoaXMsIlNlcXVlbmNlREIiKX1hZGRCb3goZSl7dGhpcy5zdGF0ZS5yZWNvcmRzLmJveGVzLnB1c2goe25hbWU6ZS50ZXh0LHdyYXA6ZS53cmFwPz90aGlzLmF1dG9XcmFwKCksZmlsbDplLmNvbG9yLGFjdG9yS2V5czpbXX0pLHRoaXMuc3RhdGUucmVjb3Jkcy5jdXJyZW50Qm94PXRoaXMuc3RhdGUucmVjb3Jkcy5ib3hlcy5zbGljZSgtMSlbMF19YWRkQWN0b3IoZSxyLG4saSl7bGV0IGE9dGhpcy5zdGF0ZS5yZWNvcmRzLmN1cnJlbnRCb3gscz10aGlzLnN0YXRlLnJlY29yZHMuYWN0b3JzLmdldChlKTtpZihzKXtpZih0aGlzLnN0YXRlLnJlY29yZHMuY3VycmVudEJveCYmcy5ib3gmJnRoaXMuc3RhdGUucmVjb3Jkcy5jdXJyZW50Qm94IT09cy5ib3gpdGhyb3cgbmV3IEVycm9yKGBBIHNhbWUgcGFydGljaXBhbnQgc2hvdWxkIG9ubHkgYmUgZGVmaW5lZCBpbiBvbmUgQm94OiAke3MubmFtZX0gY2FuJ3QgYmUgaW4gJyR7cy5ib3gubmFtZX0nIGFuZCBpbiAnJHt0aGlzLnN0YXRlLnJlY29yZHMuY3VycmVudEJveC5uYW1lfScgYXQgdGhlIHNhbWUgdGltZS5gKTtpZihhPXMuYm94P3MuYm94OnRoaXMuc3RhdGUucmVjb3Jkcy5jdXJyZW50Qm94LHMuYm94PWEscyYmcj09PXMubmFtZSYmbj09bnVsbClyZXR1cm59aWYobj8udGV4dD09bnVsbCYmKG49e3RleHQ6cix0eXBlOml9KSwoaT09bnVsbHx8bi50ZXh0PT1udWxsKSYmKG49e3RleHQ6cix0eXBlOml9KSx0aGlzLnN0YXRlLnJlY29yZHMuYWN0b3JzLnNldChlLHtib3g6YSxuYW1lOnIsZGVzY3JpcHRpb246bi50ZXh0LHdyYXA6bi53cmFwPz90aGlzLmF1dG9XcmFwKCkscHJldkFjdG9yOnRoaXMuc3RhdGUucmVjb3Jkcy5wcmV2QWN0b3IsbGlua3M6e30scHJvcGVydGllczp7fSxhY3RvckNudDpudWxsLHJlY3REYXRhOm51bGwsdHlwZTppPz8icGFydGljaXBhbnQifSksdGhpcy5zdGF0ZS5yZWNvcmRzLnByZXZBY3Rvcil7bGV0IGw9dGhpcy5zdGF0ZS5yZWNvcmRzLmFjdG9ycy5nZXQodGhpcy5zdGF0ZS5yZWNvcmRzLnByZXZBY3Rvcik7bCYmKGwubmV4dEFjdG9yPWUpfXRoaXMuc3RhdGUucmVjb3Jkcy5jdXJyZW50Qm94JiZ0aGlzLnN0YXRlLnJlY29yZHMuY3VycmVudEJveC5hY3RvcktleXMucHVzaChlKSx0aGlzLnN0YXRlLnJlY29yZHMucHJldkFjdG9yPWV9YWN0aXZhdGlvbkNvdW50KGUpe2xldCByLG49MDtpZighZSlyZXR1cm4gMDtmb3Iocj0wO3I8dGhpcy5zdGF0ZS5yZWNvcmRzLm1lc3NhZ2VzLmxlbmd0aDtyKyspdGhpcy5zdGF0ZS5yZWNvcmRzLm1lc3NhZ2VzW3JdLnR5cGU9PT10aGlzLkxJTkVUWVBFLkFDVElWRV9TVEFSVCYmdGhpcy5zdGF0ZS5yZWNvcmRzLm1lc3NhZ2VzW3JdLmZyb209PT1lJiZuKyssdGhpcy5zdGF0ZS5yZWNvcmRzLm1lc3NhZ2VzW3JdLnR5cGU9PT10aGlzLkxJTkVUWVBFLkFDVElWRV9FTkQmJnRoaXMuc3RhdGUucmVjb3Jkcy5tZXNzYWdlc1tyXS5mcm9tPT09ZSYmbi0tO3JldHVybiBufWFkZE1lc3NhZ2UoZSxyLG4saSl7dGhpcy5zdGF0ZS5yZWNvcmRzLm1lc3NhZ2VzLnB1c2goe2lkOnRoaXMuc3RhdGUucmVjb3Jkcy5tZXNzYWdlcy5sZW5ndGgudG9TdHJpbmcoKSxmcm9tOmUsdG86cixtZXNzYWdlOm4udGV4dCx3cmFwOm4ud3JhcD8/dGhpcy5hdXRvV3JhcCgpLGFuc3dlcjppfSl9YWRkU2lnbmFsKGUscixuLGksYT0hMSl7aWYoaT09PXRoaXMuTElORVRZUEUuQUNUSVZFX0VORCYmdGhpcy5hY3RpdmF0aW9uQ291bnQoZT8/IiIpPDEpe2xldCBsPW5ldyBFcnJvcigiVHJ5aW5nIHRvIGluYWN0aXZhdGUgYW4gaW5hY3RpdmUgcGFydGljaXBhbnQgKCIrZSsiKSIpO3Rocm93IGwuaGFzaD17dGV4dDoiLT4+LSIsdG9rZW46Ii0+Pi0iLGxpbmU6IjEiLGxvYzp7Zmlyc3RfbGluZToxLGxhc3RfbGluZToxLGZpcnN0X2NvbHVtbjoxLGxhc3RfY29sdW1uOjF9LGV4cGVjdGVkOlsiJ0FDVElWRV9QQVJUSUNJUEFOVCciXX0sbH1yZXR1cm4gdGhpcy5zdGF0ZS5yZWNvcmRzLm1lc3NhZ2VzLnB1c2goe2lkOnRoaXMuc3RhdGUucmVjb3Jkcy5tZXNzYWdlcy5sZW5ndGgudG9TdHJpbmcoKSxmcm9tOmUsdG86cixtZXNzYWdlOm4/LnRleHQ/PyIiLHdyYXA6bj8ud3JhcD8/dGhpcy5hdXRvV3JhcCgpLHR5cGU6aSxhY3RpdmF0ZTphfSksITB9aGFzQXRMZWFzdE9uZUJveCgpe3JldHVybiB0aGlzLnN0YXRlLnJlY29yZHMuYm94ZXMubGVuZ3RoPjB9aGFzQXRMZWFzdE9uZUJveFdpdGhUaXRsZSgpe3JldHVybiB0aGlzLnN0YXRlLnJlY29yZHMuYm94ZXMuc29tZShlPT5lLm5hbWUpfWdldE1lc3NhZ2VzKCl7cmV0dXJuIHRoaXMuc3RhdGUucmVjb3Jkcy5tZXNzYWdlc31nZXRCb3hlcygpe3JldHVybiB0aGlzLnN0YXRlLnJlY29yZHMuYm94ZXN9Z2V0QWN0b3JzKCl7cmV0dXJuIHRoaXMuc3RhdGUucmVjb3Jkcy5hY3RvcnN9Z2V0Q3JlYXRlZEFjdG9ycygpe3JldHVybiB0aGlzLnN0YXRlLnJlY29yZHMuY3JlYXRlZEFjdG9yc31nZXREZXN0cm95ZWRBY3RvcnMoKXtyZXR1cm4gdGhpcy5zdGF0ZS5yZWNvcmRzLmRlc3Ryb3llZEFjdG9yc31nZXRBY3RvcihlKXtyZXR1cm4gdGhpcy5zdGF0ZS5yZWNvcmRzLmFjdG9ycy5nZXQoZSl9Z2V0QWN0b3JLZXlzKCl7cmV0dXJuWy4uLnRoaXMuc3RhdGUucmVjb3Jkcy5hY3RvcnMua2V5cygpXX1lbmFibGVTZXF1ZW5jZU51bWJlcnMoKXt0aGlzLnN0YXRlLnJlY29yZHMuc2VxdWVuY2VOdW1iZXJzRW5hYmxlZD0hMH1kaXNhYmxlU2VxdWVuY2VOdW1iZXJzKCl7dGhpcy5zdGF0ZS5yZWNvcmRzLnNlcXVlbmNlTnVtYmVyc0VuYWJsZWQ9ITF9c2hvd1NlcXVlbmNlTnVtYmVycygpe3JldHVybiB0aGlzLnN0YXRlLnJlY29yZHMuc2VxdWVuY2VOdW1iZXJzRW5hYmxlZH1zZXRXcmFwKGUpe3RoaXMuc3RhdGUucmVjb3Jkcy53cmFwRW5hYmxlZD1lfWV4dHJhY3RXcmFwKGUpe2lmKGU9PT12b2lkIDApcmV0dXJue307ZT1lLnRyaW0oKTtsZXQgcj0vXjo/d3JhcDovLmV4ZWMoZSkhPT1udWxsPyEwOi9eOj9ub3dyYXA6Ly5leGVjKGUpIT09bnVsbD8hMTp2b2lkIDA7cmV0dXJue2NsZWFuZWRUZXh0OihyPT09dm9pZCAwP2U6ZS5yZXBsYWNlKC9eOj8oPzpubyk/d3JhcDovLCIiKSkudHJpbSgpLHdyYXA6cn19YXV0b1dyYXAoKXtyZXR1cm4gdGhpcy5zdGF0ZS5yZWNvcmRzLndyYXBFbmFibGVkIT09dm9pZCAwP3RoaXMuc3RhdGUucmVjb3Jkcy53cmFwRW5hYmxlZDptZSgpLnNlcXVlbmNlPy53cmFwPz8hMX1jbGVhcigpe3RoaXMuc3RhdGUucmVzZXQoKSxrcigpfXBhcnNlTWVzc2FnZShlKXtsZXQgcj1lLnRyaW0oKSx7d3JhcDpuLGNsZWFuZWRUZXh0Oml9PXRoaXMuZXh0cmFjdFdyYXAociksYT17dGV4dDppLHdyYXA6bn07cmV0dXJuIFguZGVidWcoYHBhcnNlTWVzc2FnZTogJHtKU09OLnN0cmluZ2lmeShhKX1gKSxhfXBhcnNlQm94RGF0YShlKXtsZXQgcj0vXigoPzpyZ2JhP3xoc2xhPylccypcKC4qXCl8XHcqKSguKikkLy5leGVjKGUpLG49cj8uWzFdP3JbMV0udHJpbSgpOiJ0cmFuc3BhcmVudCIsaT1yPy5bMl0/clsyXS50cmltKCk6dm9pZCAwO2lmKHdpbmRvdz8uQ1NTKXdpbmRvdy5DU1Muc3VwcG9ydHMoImNvbG9yIixuKXx8KG49InRyYW5zcGFyZW50IixpPWUudHJpbSgpKTtlbHNle2xldCBsPW5ldyBPcHRpb24oKS5zdHlsZTtsLmNvbG9yPW4sbC5jb2xvciE9PW4mJihuPSJ0cmFuc3BhcmVudCIsaT1lLnRyaW0oKSl9bGV0e3dyYXA6YSxjbGVhbmVkVGV4dDpzfT10aGlzLmV4dHJhY3RXcmFwKGkpO3JldHVybnt0ZXh0OnM/d3IocyxtZSgpKTp2b2lkIDAsY29sb3I6bix3cmFwOmF9fWFkZE5vdGUoZSxyLG4pe2xldCBpPXthY3RvcjplLHBsYWNlbWVudDpyLG1lc3NhZ2U6bi50ZXh0LHdyYXA6bi53cmFwPz90aGlzLmF1dG9XcmFwKCl9LGE9W10uY29uY2F0KGUsZSk7dGhpcy5zdGF0ZS5yZWNvcmRzLm5vdGVzLnB1c2goaSksdGhpcy5zdGF0ZS5yZWNvcmRzLm1lc3NhZ2VzLnB1c2goe2lkOnRoaXMuc3RhdGUucmVjb3Jkcy5tZXNzYWdlcy5sZW5ndGgudG9TdHJpbmcoKSxmcm9tOmFbMF0sdG86YVsxXSxtZXNzYWdlOm4udGV4dCx3cmFwOm4ud3JhcD8/dGhpcy5hdXRvV3JhcCgpLHR5cGU6dGhpcy5MSU5FVFlQRS5OT1RFLHBsYWNlbWVudDpyfSl9YWRkTGlua3MoZSxyKXtsZXQgbj10aGlzLmdldEFjdG9yKGUpO3RyeXtsZXQgaT13cihyLnRleHQsbWUoKSk7aT1pLnJlcGxhY2UoLyZlcXVhbHM7L2csIj0iKSxpPWkucmVwbGFjZSgvJmFtcDsvZywiJiIpO2xldCBhPUpTT04ucGFyc2UoaSk7dGhpcy5pbnNlcnRMaW5rcyhuLGEpfWNhdGNoKGkpe1guZXJyb3IoImVycm9yIHdoaWxlIHBhcnNpbmcgYWN0b3IgbGluayB0ZXh0IixpKX19YWRkQUxpbmsoZSxyKXtsZXQgbj10aGlzLmdldEFjdG9yKGUpO3RyeXtsZXQgaT17fSxhPXdyKHIudGV4dCxtZSgpKSxzPWEuaW5kZXhPZigiQCIpO2E9YS5yZXBsYWNlKC8mZXF1YWxzOy9nLCI9IiksYT1hLnJlcGxhY2UoLyZhbXA7L2csIiYiKTtsZXQgbD1hLnNsaWNlKDAscy0xKS50cmltKCksdT1hLnNsaWNlKHMrMSkudHJpbSgpO2lbbF09dSx0aGlzLmluc2VydExpbmtzKG4saSl9Y2F0Y2goaSl7WC5lcnJvcigiZXJyb3Igd2hpbGUgcGFyc2luZyBhY3RvciBsaW5rIHRleHQiLGkpfX1pbnNlcnRMaW5rcyhlLHIpe2lmKGUubGlua3M9PW51bGwpZS5saW5rcz1yO2Vsc2UgZm9yKGxldCBuIGluIHIpZS5saW5rc1tuXT1yW25dfWFkZFByb3BlcnRpZXMoZSxyKXtsZXQgbj10aGlzLmdldEFjdG9yKGUpO3RyeXtsZXQgaT13cihyLnRleHQsbWUoKSksYT1KU09OLnBhcnNlKGkpO3RoaXMuaW5zZXJ0UHJvcGVydGllcyhuLGEpfWNhdGNoKGkpe1guZXJyb3IoImVycm9yIHdoaWxlIHBhcnNpbmcgYWN0b3IgcHJvcGVydGllcyB0ZXh0IixpKX19aW5zZXJ0UHJvcGVydGllcyhlLHIpe2lmKGUucHJvcGVydGllcz09bnVsbCllLnByb3BlcnRpZXM9cjtlbHNlIGZvcihsZXQgbiBpbiByKWUucHJvcGVydGllc1tuXT1yW25dfWJveEVuZCgpe3RoaXMuc3RhdGUucmVjb3Jkcy5jdXJyZW50Qm94PXZvaWQgMH1hZGREZXRhaWxzKGUscil7bGV0IG49dGhpcy5nZXRBY3RvcihlKSxpPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHIudGV4dCk7dHJ5e2xldCBhPWkuaW5uZXJIVE1MLHM9SlNPTi5wYXJzZShhKTtzLnByb3BlcnRpZXMmJnRoaXMuaW5zZXJ0UHJvcGVydGllcyhuLHMucHJvcGVydGllcykscy5saW5rcyYmdGhpcy5pbnNlcnRMaW5rcyhuLHMubGlua3MpfWNhdGNoKGEpe1guZXJyb3IoImVycm9yIHdoaWxlIHBhcnNpbmcgYWN0b3IgZGV0YWlscyB0ZXh0IixhKX19Z2V0QWN0b3JQcm9wZXJ0eShlLHIpe2lmKGU/LnByb3BlcnRpZXMhPT12b2lkIDApcmV0dXJuIGUucHJvcGVydGllc1tyXX1hcHBseShlKXtpZihBcnJheS5pc0FycmF5KGUpKWUuZm9yRWFjaChyPT57dGhpcy5hcHBseShyKX0pO2Vsc2Ugc3dpdGNoKGUudHlwZSl7Y2FzZSJzZXF1ZW5jZUluZGV4Ijp0aGlzLnN0YXRlLnJlY29yZHMubWVzc2FnZXMucHVzaCh7aWQ6dGhpcy5zdGF0ZS5yZWNvcmRzLm1lc3NhZ2VzLmxlbmd0aC50b1N0cmluZygpLGZyb206dm9pZCAwLHRvOnZvaWQgMCxtZXNzYWdlOntzdGFydDplLnNlcXVlbmNlSW5kZXgsc3RlcDplLnNlcXVlbmNlSW5kZXhTdGVwLHZpc2libGU6ZS5zZXF1ZW5jZVZpc2libGV9LHdyYXA6ITEsdHlwZTplLnNpZ25hbFR5cGV9KTticmVhaztjYXNlImFkZFBhcnRpY2lwYW50Ijp0aGlzLmFkZEFjdG9yKGUuYWN0b3IsZS5hY3RvcixlLmRlc2NyaXB0aW9uLGUuZHJhdyk7YnJlYWs7Y2FzZSJjcmVhdGVQYXJ0aWNpcGFudCI6aWYodGhpcy5zdGF0ZS5yZWNvcmRzLmFjdG9ycy5oYXMoZS5hY3RvcikpdGhyb3cgbmV3IEVycm9yKCJJdCBpcyBub3QgcG9zc2libGUgdG8gaGF2ZSBhY3RvcnMgd2l0aCB0aGUgc2FtZSBpZCwgZXZlbiBpZiBvbmUgaXMgZGVzdHJveWVkIGJlZm9yZSB0aGUgbmV4dCBpcyBjcmVhdGVkLiBVc2UgJ0FTJyBhbGlhc2VzIHRvIHNpbXVsYXRlIHRoZSBiZWhhdmlvciIpO3RoaXMuc3RhdGUucmVjb3Jkcy5sYXN0Q3JlYXRlZD1lLmFjdG9yLHRoaXMuYWRkQWN0b3IoZS5hY3RvcixlLmFjdG9yLGUuZGVzY3JpcHRpb24sZS5kcmF3KSx0aGlzLnN0YXRlLnJlY29yZHMuY3JlYXRlZEFjdG9ycy5zZXQoZS5hY3Rvcix0aGlzLnN0YXRlLnJlY29yZHMubWVzc2FnZXMubGVuZ3RoKTticmVhaztjYXNlImRlc3Ryb3lQYXJ0aWNpcGFudCI6dGhpcy5zdGF0ZS5yZWNvcmRzLmxhc3REZXN0cm95ZWQ9ZS5hY3Rvcix0aGlzLnN0YXRlLnJlY29yZHMuZGVzdHJveWVkQWN0b3JzLnNldChlLmFjdG9yLHRoaXMuc3RhdGUucmVjb3Jkcy5tZXNzYWdlcy5sZW5ndGgpO2JyZWFrO2Nhc2UiYWN0aXZlU3RhcnQiOnRoaXMuYWRkU2lnbmFsKGUuYWN0b3Isdm9pZCAwLHZvaWQgMCxlLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiYWN0aXZlRW5kIjp0aGlzLmFkZFNpZ25hbChlLmFjdG9yLHZvaWQgMCx2b2lkIDAsZS5zaWduYWxUeXBlKTticmVhaztjYXNlImFkZE5vdGUiOnRoaXMuYWRkTm90ZShlLmFjdG9yLGUucGxhY2VtZW50LGUudGV4dCk7YnJlYWs7Y2FzZSJhZGRMaW5rcyI6dGhpcy5hZGRMaW5rcyhlLmFjdG9yLGUudGV4dCk7YnJlYWs7Y2FzZSJhZGRBTGluayI6dGhpcy5hZGRBTGluayhlLmFjdG9yLGUudGV4dCk7YnJlYWs7Y2FzZSJhZGRQcm9wZXJ0aWVzIjp0aGlzLmFkZFByb3BlcnRpZXMoZS5hY3RvcixlLnRleHQpO2JyZWFrO2Nhc2UiYWRkRGV0YWlscyI6dGhpcy5hZGREZXRhaWxzKGUuYWN0b3IsZS50ZXh0KTticmVhaztjYXNlImFkZE1lc3NhZ2UiOmlmKHRoaXMuc3RhdGUucmVjb3Jkcy5sYXN0Q3JlYXRlZCl7aWYoZS50byE9PXRoaXMuc3RhdGUucmVjb3Jkcy5sYXN0Q3JlYXRlZCl0aHJvdyBuZXcgRXJyb3IoIlRoZSBjcmVhdGVkIHBhcnRpY2lwYW50ICIrdGhpcy5zdGF0ZS5yZWNvcmRzLmxhc3RDcmVhdGVkLm5hbWUrIiBkb2VzIG5vdCBoYXZlIGFuIGFzc29jaWF0ZWQgY3JlYXRpbmcgbWVzc2FnZSBhZnRlciBpdHMgZGVjbGFyYXRpb24uIFBsZWFzZSBjaGVjayB0aGUgc2VxdWVuY2UgZGlhZ3JhbS4iKTt0aGlzLnN0YXRlLnJlY29yZHMubGFzdENyZWF0ZWQ9dm9pZCAwfWVsc2UgaWYodGhpcy5zdGF0ZS5yZWNvcmRzLmxhc3REZXN0cm95ZWQpe2lmKGUudG8hPT10aGlzLnN0YXRlLnJlY29yZHMubGFzdERlc3Ryb3llZCYmZS5mcm9tIT09dGhpcy5zdGF0ZS5yZWNvcmRzLmxhc3REZXN0cm95ZWQpdGhyb3cgbmV3IEVycm9yKCJUaGUgZGVzdHJveWVkIHBhcnRpY2lwYW50ICIrdGhpcy5zdGF0ZS5yZWNvcmRzLmxhc3REZXN0cm95ZWQubmFtZSsiIGRvZXMgbm90IGhhdmUgYW4gYXNzb2NpYXRlZCBkZXN0cm95aW5nIG1lc3NhZ2UgYWZ0ZXIgaXRzIGRlY2xhcmF0aW9uLiBQbGVhc2UgY2hlY2sgdGhlIHNlcXVlbmNlIGRpYWdyYW0uIik7dGhpcy5zdGF0ZS5yZWNvcmRzLmxhc3REZXN0cm95ZWQ9dm9pZCAwfXRoaXMuYWRkU2lnbmFsKGUuZnJvbSxlLnRvLGUubXNnLGUuc2lnbmFsVHlwZSxlLmFjdGl2YXRlKTticmVhaztjYXNlImJveFN0YXJ0Ijp0aGlzLmFkZEJveChlLmJveERhdGEpO2JyZWFrO2Nhc2UiYm94RW5kIjp0aGlzLmJveEVuZCgpO2JyZWFrO2Nhc2UibG9vcFN0YXJ0Ijp0aGlzLmFkZFNpZ25hbCh2b2lkIDAsdm9pZCAwLGUubG9vcFRleHQsZS5zaWduYWxUeXBlKTticmVhaztjYXNlImxvb3BFbmQiOnRoaXMuYWRkU2lnbmFsKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGUuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJyZWN0U3RhcnQiOnRoaXMuYWRkU2lnbmFsKHZvaWQgMCx2b2lkIDAsZS5jb2xvcixlLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UicmVjdEVuZCI6dGhpcy5hZGRTaWduYWwodm9pZCAwLHZvaWQgMCx2b2lkIDAsZS5zaWduYWxUeXBlKTticmVhaztjYXNlIm9wdFN0YXJ0Ijp0aGlzLmFkZFNpZ25hbCh2b2lkIDAsdm9pZCAwLGUub3B0VGV4dCxlLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2Uib3B0RW5kIjp0aGlzLmFkZFNpZ25hbCh2b2lkIDAsdm9pZCAwLHZvaWQgMCxlLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiYWx0U3RhcnQiOnRoaXMuYWRkU2lnbmFsKHZvaWQgMCx2b2lkIDAsZS5hbHRUZXh0LGUuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJlbHNlIjp0aGlzLmFkZFNpZ25hbCh2b2lkIDAsdm9pZCAwLGUuYWx0VGV4dCxlLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiYWx0RW5kIjp0aGlzLmFkZFNpZ25hbCh2b2lkIDAsdm9pZCAwLHZvaWQgMCxlLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2Uic2V0QWNjVGl0bGUiOkFyKGUudGV4dCk7YnJlYWs7Y2FzZSJwYXJTdGFydCI6dGhpcy5hZGRTaWduYWwodm9pZCAwLHZvaWQgMCxlLnBhclRleHQsZS5zaWduYWxUeXBlKTticmVhaztjYXNlImFuZCI6dGhpcy5hZGRTaWduYWwodm9pZCAwLHZvaWQgMCxlLnBhclRleHQsZS5zaWduYWxUeXBlKTticmVhaztjYXNlInBhckVuZCI6dGhpcy5hZGRTaWduYWwodm9pZCAwLHZvaWQgMCx2b2lkIDAsZS5zaWduYWxUeXBlKTticmVhaztjYXNlImNyaXRpY2FsU3RhcnQiOnRoaXMuYWRkU2lnbmFsKHZvaWQgMCx2b2lkIDAsZS5jcml0aWNhbFRleHQsZS5zaWduYWxUeXBlKTticmVhaztjYXNlIm9wdGlvbiI6dGhpcy5hZGRTaWduYWwodm9pZCAwLHZvaWQgMCxlLm9wdGlvblRleHQsZS5zaWduYWxUeXBlKTticmVhaztjYXNlImNyaXRpY2FsRW5kIjp0aGlzLmFkZFNpZ25hbCh2b2lkIDAsdm9pZCAwLHZvaWQgMCxlLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiYnJlYWtTdGFydCI6dGhpcy5hZGRTaWduYWwodm9pZCAwLHZvaWQgMCxlLmJyZWFrVGV4dCxlLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiYnJlYWtFbmQiOnRoaXMuYWRkU2lnbmFsKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGUuc2lnbmFsVHlwZSk7YnJlYWt9fWdldENvbmZpZygpe3JldHVybiBtZSgpLnNlcXVlbmNlfX19KTt2YXIgR1VlLFJkZSxOZGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtHVWU9byh0PT5gLmFjdG9yIHsKICAgIHN0cm9rZTogJHt0LmFjdG9yQm9yZGVyfTsKICAgIGZpbGw6ICR7dC5hY3RvckJrZ307CiAgfQoKICB0ZXh0LmFjdG9yID4gdHNwYW4gewogICAgZmlsbDogJHt0LmFjdG9yVGV4dENvbG9yfTsKICAgIHN0cm9rZTogbm9uZTsKICB9CgogIC5hY3Rvci1saW5lIHsKICAgIHN0cm9rZTogJHt0LmFjdG9yTGluZUNvbG9yfTsKICB9CgogIC5tZXNzYWdlTGluZTAgewogICAgc3Ryb2tlLXdpZHRoOiAxLjU7CiAgICBzdHJva2UtZGFzaGFycmF5OiBub25lOwogICAgc3Ryb2tlOiAke3Quc2lnbmFsQ29sb3J9OwogIH0KCiAgLm1lc3NhZ2VMaW5lMSB7CiAgICBzdHJva2Utd2lkdGg6IDEuNTsKICAgIHN0cm9rZS1kYXNoYXJyYXk6IDIsIDI7CiAgICBzdHJva2U6ICR7dC5zaWduYWxDb2xvcn07CiAgfQoKICAjYXJyb3doZWFkIHBhdGggewogICAgZmlsbDogJHt0LnNpZ25hbENvbG9yfTsKICAgIHN0cm9rZTogJHt0LnNpZ25hbENvbG9yfTsKICB9CgogIC5zZXF1ZW5jZU51bWJlciB7CiAgICBmaWxsOiAke3Quc2VxdWVuY2VOdW1iZXJDb2xvcn07CiAgfQoKICAjc2VxdWVuY2VudW1iZXIgewogICAgZmlsbDogJHt0LnNpZ25hbENvbG9yfTsKICB9CgogICNjcm9zc2hlYWQgcGF0aCB7CiAgICBmaWxsOiAke3Quc2lnbmFsQ29sb3J9OwogICAgc3Ryb2tlOiAke3Quc2lnbmFsQ29sb3J9OwogIH0KCiAgLm1lc3NhZ2VUZXh0IHsKICAgIGZpbGw6ICR7dC5zaWduYWxUZXh0Q29sb3J9OwogICAgc3Ryb2tlOiBub25lOwogIH0KCiAgLmxhYmVsQm94IHsKICAgIHN0cm9rZTogJHt0LmxhYmVsQm94Qm9yZGVyQ29sb3J9OwogICAgZmlsbDogJHt0LmxhYmVsQm94QmtnQ29sb3J9OwogIH0KCiAgLmxhYmVsVGV4dCwgLmxhYmVsVGV4dCA+IHRzcGFuIHsKICAgIGZpbGw6ICR7dC5sYWJlbFRleHRDb2xvcn07CiAgICBzdHJva2U6IG5vbmU7CiAgfQoKICAubG9vcFRleHQsIC5sb29wVGV4dCA+IHRzcGFuIHsKICAgIGZpbGw6ICR7dC5sb29wVGV4dENvbG9yfTsKICAgIHN0cm9rZTogbm9uZTsKICB9CgogIC5sb29wTGluZSB7CiAgICBzdHJva2Utd2lkdGg6IDJweDsKICAgIHN0cm9rZS1kYXNoYXJyYXk6IDIsIDI7CiAgICBzdHJva2U6ICR7dC5sYWJlbEJveEJvcmRlckNvbG9yfTsKICAgIGZpbGw6ICR7dC5sYWJlbEJveEJvcmRlckNvbG9yfTsKICB9CgogIC5ub3RlIHsKICAgIC8vc3Ryb2tlOiAjZGVjYzkzOwogICAgc3Ryb2tlOiAke3Qubm90ZUJvcmRlckNvbG9yfTsKICAgIGZpbGw6ICR7dC5ub3RlQmtnQ29sb3J9OwogIH0KCiAgLm5vdGVUZXh0LCAubm90ZVRleHQgPiB0c3BhbiB7CiAgICBmaWxsOiAke3Qubm90ZVRleHRDb2xvcn07CiAgICBzdHJva2U6IG5vbmU7CiAgfQoKICAuYWN0aXZhdGlvbjAgewogICAgZmlsbDogJHt0LmFjdGl2YXRpb25Ca2dDb2xvcn07CiAgICBzdHJva2U6ICR7dC5hY3RpdmF0aW9uQm9yZGVyQ29sb3J9OwogIH0KCiAgLmFjdGl2YXRpb24xIHsKICAgIGZpbGw6ICR7dC5hY3RpdmF0aW9uQmtnQ29sb3J9OwogICAgc3Ryb2tlOiAke3QuYWN0aXZhdGlvbkJvcmRlckNvbG9yfTsKICB9CgogIC5hY3RpdmF0aW9uMiB7CiAgICBmaWxsOiAke3QuYWN0aXZhdGlvbkJrZ0NvbG9yfTsKICAgIHN0cm9rZTogJHt0LmFjdGl2YXRpb25Cb3JkZXJDb2xvcn07CiAgfQoKICAuYWN0b3JQb3B1cE1lbnUgewogICAgcG9zaXRpb246IGFic29sdXRlOwogIH0KCiAgLmFjdG9yUG9wdXBNZW51UGFuZWwgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgZmlsbDogJHt0LmFjdG9yQmtnfTsKICAgIGJveC1zaGFkb3c6IDBweCA4cHggMTZweCAwcHggcmdiYSgwLDAsMCwwLjIpOwogICAgZmlsdGVyOiBkcm9wLXNoYWRvdygzcHggNXB4IDJweCByZ2IoMCAwIDAgLyAwLjQpKTsKfQogIC5hY3Rvci1tYW4gbGluZSB7CiAgICBzdHJva2U6ICR7dC5hY3RvckJvcmRlcn07CiAgICBmaWxsOiAke3QuYWN0b3JCa2d9OwogIH0KICAuYWN0b3ItbWFuIGNpcmNsZSwgbGluZSB7CiAgICBzdHJva2U6ICR7dC5hY3RvckJvcmRlcn07CiAgICBmaWxsOiAke3QuYWN0b3JCa2d9OwogICAgc3Ryb2tlLXdpZHRoOiAycHg7CiAgfQpgLCJnZXRTdHlsZXMiKSxSZGU9R1VlfSk7dmFyIHBQLFNmLElkZSxPZGUsVlVlLE1kZSxtUCxVVWUsSFVlLE1iLEZwLFBkZSxZYyxnUCxXVWUscVVlLFlVZSxYVWUsalVlLEtVZSxRVWUsQmRlLFpVZSxKVWUsZUhlLHRIZSxySGUsbkhlLGlIZSxGZGUsYUhlLHlQLHNIZSxkaSwkZGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtwcigpO3QyKCk7ZXIoKTtwUD1BYShaMCgpLDEpO21pKCk7U2Y9MTgqMixJZGU9ImFjdG9yLXRvcCIsT2RlPSJhY3Rvci1ib3R0b20iLFZVZT0iYWN0b3ItYm94IixNZGU9ImFjdG9yLW1hbiIsbVA9byhmdW5jdGlvbih0LGUpe3JldHVybiBOZCh0LGUpfSwiZHJhd1JlY3QiKSxVVWU9byhmdW5jdGlvbih0LGUscixuLGkpe2lmKGUubGlua3M9PT12b2lkIDB8fGUubGlua3M9PT1udWxsfHxPYmplY3Qua2V5cyhlLmxpbmtzKS5sZW5ndGg9PT0wKXJldHVybntoZWlnaHQ6MCx3aWR0aDowfTtsZXQgYT1lLmxpbmtzLHM9ZS5hY3RvckNudCxsPWUucmVjdERhdGE7dmFyIHU9Im5vbmUiO2kmJih1PSJibG9jayAhaW1wb3J0YW50Iik7bGV0IGg9dC5hcHBlbmQoImciKTtoLmF0dHIoImlkIiwiYWN0b3IiK3MrIl9wb3B1cCIpLGguYXR0cigiY2xhc3MiLCJhY3RvclBvcHVwTWVudSIpLGguYXR0cigiZGlzcGxheSIsdSk7dmFyIGY9IiI7bC5jbGFzcyE9PXZvaWQgMCYmKGY9IiAiK2wuY2xhc3MpO2xldCBkPWwud2lkdGg+cj9sLndpZHRoOnIscD1oLmFwcGVuZCgicmVjdCIpO2lmKHAuYXR0cigiY2xhc3MiLCJhY3RvclBvcHVwTWVudVBhbmVsIitmKSxwLmF0dHIoIngiLGwueCkscC5hdHRyKCJ5IixsLmhlaWdodCkscC5hdHRyKCJmaWxsIixsLmZpbGwpLHAuYXR0cigic3Ryb2tlIixsLnN0cm9rZSkscC5hdHRyKCJ3aWR0aCIsZCkscC5hdHRyKCJoZWlnaHQiLGwuaGVpZ2h0KSxwLmF0dHIoInJ4IixsLnJ4KSxwLmF0dHIoInJ5IixsLnJ5KSxhIT1udWxsKXt2YXIgbT0yMDtmb3IobGV0IHYgaW4gYSl7dmFyIGc9aC5hcHBlbmQoImEiKSx5PSgwLHBQLnNhbml0aXplVXJsKShhW3ZdKTtnLmF0dHIoInhsaW5rOmhyZWYiLHkpLGcuYXR0cigidGFyZ2V0IiwiX2JsYW5rIiksc0hlKG4pKHYsZyxsLngrMTAsbC5oZWlnaHQrbSxkLDIwLHtjbGFzczoiYWN0b3IifSxuKSxtKz0zMH19cmV0dXJuIHAuYXR0cigiaGVpZ2h0IixtKSx7aGVpZ2h0OmwuaGVpZ2h0K20sd2lkdGg6ZH19LCJkcmF3UG9wdXAiKSxIVWU9byhmdW5jdGlvbih0KXtyZXR1cm4idmFyIHB1ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJyIrdCsiJyk7IGlmIChwdSAhPSBudWxsKSB7IHB1LnN0eWxlLmRpc3BsYXkgPSBwdS5zdHlsZS5kaXNwbGF5ID09ICdibG9jaycgPyAnbm9uZScgOiAnYmxvY2snOyB9In0sInBvcHVwTWVudVRvZ2dsZSIpLE1iPW8oYXN5bmMgZnVuY3Rpb24odCxlLHI9bnVsbCl7bGV0IG49dC5hcHBlbmQoImZvcmVpZ25PYmplY3QiKSxpPWF3YWl0IFRoKGUudGV4dCx0cigpKSxzPW4uYXBwZW5kKCJ4aHRtbDpkaXYiKS5hdHRyKCJzdHlsZSIsIndpZHRoOiBmaXQtY29udGVudDsiKS5hdHRyKCJ4bWxucyIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiKS5odG1sKGkpLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZihuLmF0dHIoImhlaWdodCIsTWF0aC5yb3VuZChzLmhlaWdodCkpLmF0dHIoIndpZHRoIixNYXRoLnJvdW5kKHMud2lkdGgpKSxlLmNsYXNzPT09Im5vdGVUZXh0Iil7bGV0IGw9dC5ub2RlKCkuZmlyc3RDaGlsZDtsLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IixzLmhlaWdodCsyKmUudGV4dE1hcmdpbik7bGV0IHU9bC5nZXRCQm94KCk7bi5hdHRyKCJ4IixNYXRoLnJvdW5kKHUueCt1LndpZHRoLzItcy53aWR0aC8yKSkuYXR0cigieSIsTWF0aC5yb3VuZCh1LnkrdS5oZWlnaHQvMi1zLmhlaWdodC8yKSl9ZWxzZSBpZihyKXtsZXR7c3RhcnR4Omwsc3RvcHg6dSxzdGFydHk6aH09cjtpZihsPnUpe2xldCBmPWw7bD11LHU9Zn1uLmF0dHIoIngiLE1hdGgucm91bmQobCtNYXRoLmFicyhsLXUpLzItcy53aWR0aC8yKSksZS5jbGFzcz09PSJsb29wVGV4dCI/bi5hdHRyKCJ5IixNYXRoLnJvdW5kKGgpKTpuLmF0dHIoInkiLE1hdGgucm91bmQoaC1zLmhlaWdodCkpfXJldHVybltuXX0sImRyYXdLYXRleCIpLEZwPW8oZnVuY3Rpb24odCxlKXtsZXQgcj0wLG49MCxpPWUudGV4dC5zcGxpdChaZS5saW5lQnJlYWtSZWdleCksW2Esc109em8oZS5mb250U2l6ZSksbD1bXSx1PTAsaD1vKCgpPT5lLnksInlmdW5jIik7aWYoZS52YWxpZ24hPT12b2lkIDAmJmUudGV4dE1hcmdpbiE9PXZvaWQgMCYmZS50ZXh0TWFyZ2luPjApc3dpdGNoKGUudmFsaWduKXtjYXNlInRvcCI6Y2FzZSJzdGFydCI6aD1vKCgpPT5NYXRoLnJvdW5kKGUueStlLnRleHRNYXJnaW4pLCJ5ZnVuYyIpO2JyZWFrO2Nhc2UibWlkZGxlIjpjYXNlImNlbnRlciI6aD1vKCgpPT5NYXRoLnJvdW5kKGUueSsocituK2UudGV4dE1hcmdpbikvMiksInlmdW5jIik7YnJlYWs7Y2FzZSJib3R0b20iOmNhc2UiZW5kIjpoPW8oKCk9Pk1hdGgucm91bmQoZS55KyhyK24rMiplLnRleHRNYXJnaW4pLWUudGV4dE1hcmdpbiksInlmdW5jIik7YnJlYWt9aWYoZS5hbmNob3IhPT12b2lkIDAmJmUudGV4dE1hcmdpbiE9PXZvaWQgMCYmZS53aWR0aCE9PXZvaWQgMClzd2l0Y2goZS5hbmNob3Ipe2Nhc2UibGVmdCI6Y2FzZSJzdGFydCI6ZS54PU1hdGgucm91bmQoZS54K2UudGV4dE1hcmdpbiksZS5hbmNob3I9InN0YXJ0IixlLmRvbWluYW50QmFzZWxpbmU9Im1pZGRsZSIsZS5hbGlnbm1lbnRCYXNlbGluZT0ibWlkZGxlIjticmVhaztjYXNlIm1pZGRsZSI6Y2FzZSJjZW50ZXIiOmUueD1NYXRoLnJvdW5kKGUueCtlLndpZHRoLzIpLGUuYW5jaG9yPSJtaWRkbGUiLGUuZG9taW5hbnRCYXNlbGluZT0ibWlkZGxlIixlLmFsaWdubWVudEJhc2VsaW5lPSJtaWRkbGUiO2JyZWFrO2Nhc2UicmlnaHQiOmNhc2UiZW5kIjplLng9TWF0aC5yb3VuZChlLngrZS53aWR0aC1lLnRleHRNYXJnaW4pLGUuYW5jaG9yPSJlbmQiLGUuZG9taW5hbnRCYXNlbGluZT0ibWlkZGxlIixlLmFsaWdubWVudEJhc2VsaW5lPSJtaWRkbGUiO2JyZWFrfWZvcihsZXRbZixkXW9mIGkuZW50cmllcygpKXtlLnRleHRNYXJnaW4hPT12b2lkIDAmJmUudGV4dE1hcmdpbj09PTAmJmEhPT12b2lkIDAmJih1PWYqYSk7bGV0IHA9dC5hcHBlbmQoInRleHQiKTtwLmF0dHIoIngiLGUueCkscC5hdHRyKCJ5IixoKCkpLGUuYW5jaG9yIT09dm9pZCAwJiZwLmF0dHIoInRleHQtYW5jaG9yIixlLmFuY2hvcikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLGUuZG9taW5hbnRCYXNlbGluZSkuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIixlLmFsaWdubWVudEJhc2VsaW5lKSxlLmZvbnRGYW1pbHkhPT12b2lkIDAmJnAuc3R5bGUoImZvbnQtZmFtaWx5IixlLmZvbnRGYW1pbHkpLHMhPT12b2lkIDAmJnAuc3R5bGUoImZvbnQtc2l6ZSIscyksZS5mb250V2VpZ2h0IT09dm9pZCAwJiZwLnN0eWxlKCJmb250LXdlaWdodCIsZS5mb250V2VpZ2h0KSxlLmZpbGwhPT12b2lkIDAmJnAuYXR0cigiZmlsbCIsZS5maWxsKSxlLmNsYXNzIT09dm9pZCAwJiZwLmF0dHIoImNsYXNzIixlLmNsYXNzKSxlLmR5IT09dm9pZCAwP3AuYXR0cigiZHkiLGUuZHkpOnUhPT0wJiZwLmF0dHIoImR5Iix1KTtsZXQgbT1kfHxDOTtpZihlLnRzcGFuKXtsZXQgZz1wLmFwcGVuZCgidHNwYW4iKTtnLmF0dHIoIngiLGUueCksZS5maWxsIT09dm9pZCAwJiZnLmF0dHIoImZpbGwiLGUuZmlsbCksZy50ZXh0KG0pfWVsc2UgcC50ZXh0KG0pO2UudmFsaWduIT09dm9pZCAwJiZlLnRleHRNYXJnaW4hPT12b2lkIDAmJmUudGV4dE1hcmdpbj4wJiYobis9KHAuX2dyb3Vwc3x8cClbMF1bMF0uZ2V0QkJveCgpLmhlaWdodCxyPW4pLGwucHVzaChwKX1yZXR1cm4gbH0sImRyYXdUZXh0IiksUGRlPW8oZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKGksYSxzLGwsdSl7cmV0dXJuIGkrIiwiK2ErIiAiKyhpK3MpKyIsIithKyIgIisoaStzKSsiLCIrKGErbC11KSsiICIrKGkrcy11KjEuMikrIiwiKyhhK2wpKyIgIitpKyIsIisoYStsKX1vKHIsImdlblBvaW50cyIpO2xldCBuPXQuYXBwZW5kKCJwb2x5Z29uIik7cmV0dXJuIG4uYXR0cigicG9pbnRzIixyKGUueCxlLnksZS53aWR0aCxlLmhlaWdodCw3KSksbi5hdHRyKCJjbGFzcyIsImxhYmVsQm94IiksZS55PWUueStlLmhlaWdodC8yLEZwKHQsZSksbn0sImRyYXdMYWJlbCIpLFljPS0xLGdQPW8oKHQsZSxyLG4pPT57dC5zZWxlY3QmJnIuZm9yRWFjaChpPT57bGV0IGE9ZS5nZXQoaSkscz10LnNlbGVjdCgiI2FjdG9yIithLmFjdG9yQ250KTshbi5taXJyb3JBY3RvcnMmJmEuc3RvcHk/cy5hdHRyKCJ5MiIsYS5zdG9weSthLmhlaWdodC8yKTpuLm1pcnJvckFjdG9ycyYmcy5hdHRyKCJ5MiIsYS5zdG9weSl9KX0sImZpeExpZmVMaW5lSGVpZ2h0cyIpLFdVZT1vKGZ1bmN0aW9uKHQsZSxyLG4pe2xldCBpPW4/ZS5zdG9weTplLnN0YXJ0eSxhPWUueCtlLndpZHRoLzIscz1pK2UuaGVpZ2h0LGw9dC5hcHBlbmQoImciKS5sb3dlcigpO3ZhciB1PWw7bnx8KFljKyssT2JqZWN0LmtleXMoZS5saW5rc3x8e30pLmxlbmd0aCYmIXIuZm9yY2VNZW51cyYmdS5hdHRyKCJvbmNsaWNrIixIVWUoYGFjdG9yJHtZY31fcG9wdXBgKSkuYXR0cigiY3Vyc29yIiwicG9pbnRlciIpLHUuYXBwZW5kKCJsaW5lIikuYXR0cigiaWQiLCJhY3RvciIrWWMpLmF0dHIoIngxIixhKS5hdHRyKCJ5MSIscykuYXR0cigieDIiLGEpLmF0dHIoInkyIiwyZTMpLmF0dHIoImNsYXNzIiwiYWN0b3ItbGluZSAyMDAiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIwLjVweCIpLmF0dHIoInN0cm9rZSIsIiM5OTkiKS5hdHRyKCJuYW1lIixlLm5hbWUpLHU9bC5hcHBlbmQoImciKSxlLmFjdG9yQ250PVljLGUubGlua3MhPW51bGwmJnUuYXR0cigiaWQiLCJyb290LSIrWWMpKTtsZXQgaD1BbCgpO3ZhciBmPSJhY3RvciI7ZS5wcm9wZXJ0aWVzPy5jbGFzcz9mPWUucHJvcGVydGllcy5jbGFzczpoLmZpbGw9IiNlYWVhZWEiLG4/Zis9YCAke09kZX1gOmYrPWAgJHtJZGV9YCxoLng9ZS54LGgueT1pLGgud2lkdGg9ZS53aWR0aCxoLmhlaWdodD1lLmhlaWdodCxoLmNsYXNzPWYsaC5yeD0zLGgucnk9MyxoLm5hbWU9ZS5uYW1lO2xldCBkPW1QKHUsaCk7aWYoZS5yZWN0RGF0YT1oLGUucHJvcGVydGllcz8uaWNvbil7bGV0IG09ZS5wcm9wZXJ0aWVzLmljb24udHJpbSgpO20uY2hhckF0KDApPT09IkAiP0tZKHUsaC54K2gud2lkdGgtMjAsaC55KzEwLG0uc3Vic3RyKDEpKTpqWSh1LGgueCtoLndpZHRoLTIwLGgueSsxMCxtKX15UChyLHlpKGUuZGVzY3JpcHRpb24pKShlLmRlc2NyaXB0aW9uLHUsaC54LGgueSxoLndpZHRoLGguaGVpZ2h0LHtjbGFzczpgYWN0b3IgJHtWVWV9YH0scik7bGV0IHA9ZS5oZWlnaHQ7aWYoZC5ub2RlKXtsZXQgbT1kLm5vZGUoKS5nZXRCQm94KCk7ZS5oZWlnaHQ9bS5oZWlnaHQscD1tLmhlaWdodH1yZXR1cm4gcH0sImRyYXdBY3RvclR5cGVQYXJ0aWNpcGFudCIpLHFVZT1vKGZ1bmN0aW9uKHQsZSxyLG4pe2xldCBpPW4/ZS5zdG9weTplLnN0YXJ0eSxhPWUueCtlLndpZHRoLzIscz1pKzgwLGw9dC5hcHBlbmQoImciKS5sb3dlcigpO258fChZYysrLGwuYXBwZW5kKCJsaW5lIikuYXR0cigiaWQiLCJhY3RvciIrWWMpLmF0dHIoIngxIixhKS5hdHRyKCJ5MSIscykuYXR0cigieDIiLGEpLmF0dHIoInkyIiwyZTMpLmF0dHIoImNsYXNzIiwiYWN0b3ItbGluZSAyMDAiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIwLjVweCIpLmF0dHIoInN0cm9rZSIsIiM5OTkiKS5hdHRyKCJuYW1lIixlLm5hbWUpLGUuYWN0b3JDbnQ9WWMpO2xldCB1PXQuYXBwZW5kKCJnIiksaD1NZGU7bj9oKz1gICR7T2RlfWA6aCs9YCAke0lkZX1gLHUuYXR0cigiY2xhc3MiLGgpLHUuYXR0cigibmFtZSIsZS5uYW1lKTtsZXQgZj1BbCgpO2YueD1lLngsZi55PWksZi5maWxsPSIjZWFlYWVhIixmLndpZHRoPWUud2lkdGgsZi5oZWlnaHQ9ZS5oZWlnaHQsZi5jbGFzcz0iYWN0b3IiLGYucng9MyxmLnJ5PTMsdS5hcHBlbmQoImxpbmUiKS5hdHRyKCJpZCIsImFjdG9yLW1hbi10b3JzbyIrWWMpLmF0dHIoIngxIixhKS5hdHRyKCJ5MSIsaSsyNSkuYXR0cigieDIiLGEpLmF0dHIoInkyIixpKzQ1KSx1LmFwcGVuZCgibGluZSIpLmF0dHIoImlkIiwiYWN0b3ItbWFuLWFybXMiK1ljKS5hdHRyKCJ4MSIsYS1TZi8yKS5hdHRyKCJ5MSIsaSszMykuYXR0cigieDIiLGErU2YvMikuYXR0cigieTIiLGkrMzMpLHUuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLGEtU2YvMikuYXR0cigieTEiLGkrNjApLmF0dHIoIngyIixhKS5hdHRyKCJ5MiIsaSs0NSksdS5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsYSkuYXR0cigieTEiLGkrNDUpLmF0dHIoIngyIixhK1NmLzItMikuYXR0cigieTIiLGkrNjApO2xldCBkPXUuYXBwZW5kKCJjaXJjbGUiKTtkLmF0dHIoImN4IixlLngrZS53aWR0aC8yKSxkLmF0dHIoImN5IixpKzEwKSxkLmF0dHIoInIiLDE1KSxkLmF0dHIoIndpZHRoIixlLndpZHRoKSxkLmF0dHIoImhlaWdodCIsZS5oZWlnaHQpO2xldCBwPXUubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gZS5oZWlnaHQ9cC5oZWlnaHQseVAocix5aShlLmRlc2NyaXB0aW9uKSkoZS5kZXNjcmlwdGlvbix1LGYueCxmLnkrMzUsZi53aWR0aCxmLmhlaWdodCx7Y2xhc3M6YGFjdG9yICR7TWRlfWB9LHIpLGUuaGVpZ2h0fSwiZHJhd0FjdG9yVHlwZUFjdG9yIiksWVVlPW8oYXN5bmMgZnVuY3Rpb24odCxlLHIsbil7c3dpdGNoKGUudHlwZSl7Y2FzZSJhY3RvciI6cmV0dXJuIGF3YWl0IHFVZSh0LGUscixuKTtjYXNlInBhcnRpY2lwYW50IjpyZXR1cm4gYXdhaXQgV1VlKHQsZSxyLG4pfX0sImRyYXdBY3RvciIpLFhVZT1vKGZ1bmN0aW9uKHQsZSxyKXtsZXQgaT10LmFwcGVuZCgiZyIpO0JkZShpLGUpLGUubmFtZSYmeVAocikoZS5uYW1lLGksZS54LGUueStyLmJveFRleHRNYXJnaW4rKGUudGV4dE1heEhlaWdodHx8MCkvMixlLndpZHRoLDAse2NsYXNzOiJ0ZXh0In0sciksaS5sb3dlcigpfSwiZHJhd0JveCIpLGpVZT1vKGZ1bmN0aW9uKHQpe3JldHVybiB0LmFwcGVuZCgiZyIpfSwiYW5jaG9yRWxlbWVudCIpLEtVZT1vKGZ1bmN0aW9uKHQsZSxyLG4saSl7bGV0IGE9QWwoKSxzPWUuYW5jaG9yZWQ7YS54PWUuc3RhcnR4LGEueT1lLnN0YXJ0eSxhLmNsYXNzPSJhY3RpdmF0aW9uIitpJTMsYS53aWR0aD1lLnN0b3B4LWUuc3RhcnR4LGEuaGVpZ2h0PXItZS5zdGFydHksbVAocyxhKX0sImRyYXdBY3RpdmF0aW9uIiksUVVlPW8oYXN5bmMgZnVuY3Rpb24odCxlLHIsbil7bGV0e2JveE1hcmdpbjppLGJveFRleHRNYXJnaW46YSxsYWJlbEJveEhlaWdodDpzLGxhYmVsQm94V2lkdGg6bCxtZXNzYWdlRm9udEZhbWlseTp1LG1lc3NhZ2VGb250U2l6ZTpoLG1lc3NhZ2VGb250V2VpZ2h0OmZ9PW4sZD10LmFwcGVuZCgiZyIpLHA9byhmdW5jdGlvbih5LHYseCxiKXtyZXR1cm4gZC5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIseSkuYXR0cigieTEiLHYpLmF0dHIoIngyIix4KS5hdHRyKCJ5MiIsYikuYXR0cigiY2xhc3MiLCJsb29wTGluZSIpfSwiZHJhd0xvb3BMaW5lIik7cChlLnN0YXJ0eCxlLnN0YXJ0eSxlLnN0b3B4LGUuc3RhcnR5KSxwKGUuc3RvcHgsZS5zdGFydHksZS5zdG9weCxlLnN0b3B5KSxwKGUuc3RhcnR4LGUuc3RvcHksZS5zdG9weCxlLnN0b3B5KSxwKGUuc3RhcnR4LGUuc3RhcnR5LGUuc3RhcnR4LGUuc3RvcHkpLGUuc2VjdGlvbnMhPT12b2lkIDAmJmUuc2VjdGlvbnMuZm9yRWFjaChmdW5jdGlvbih5KXtwKGUuc3RhcnR4LHkueSxlLnN0b3B4LHkueSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIzLCAzIil9KTtsZXQgbT1lMigpO20udGV4dD1yLG0ueD1lLnN0YXJ0eCxtLnk9ZS5zdGFydHksbS5mb250RmFtaWx5PXUsbS5mb250U2l6ZT1oLG0uZm9udFdlaWdodD1mLG0uYW5jaG9yPSJtaWRkbGUiLG0udmFsaWduPSJtaWRkbGUiLG0udHNwYW49ITEsbS53aWR0aD1sfHw1MCxtLmhlaWdodD1zfHwyMCxtLnRleHRNYXJnaW49YSxtLmNsYXNzPSJsYWJlbFRleHQiLFBkZShkLG0pLG09RmRlKCksbS50ZXh0PWUudGl0bGUsbS54PWUuc3RhcnR4K2wvMisoZS5zdG9weC1lLnN0YXJ0eCkvMixtLnk9ZS5zdGFydHkraSthLG0uYW5jaG9yPSJtaWRkbGUiLG0udmFsaWduPSJtaWRkbGUiLG0udGV4dE1hcmdpbj1hLG0uY2xhc3M9Imxvb3BUZXh0IixtLmZvbnRGYW1pbHk9dSxtLmZvbnRTaXplPWgsbS5mb250V2VpZ2h0PWYsbS53cmFwPSEwO2xldCBnPXlpKG0udGV4dCk/YXdhaXQgTWIoZCxtLGUpOkZwKGQsbSk7aWYoZS5zZWN0aW9uVGl0bGVzIT09dm9pZCAwKXtmb3IobGV0W3ksdl1vZiBPYmplY3QuZW50cmllcyhlLnNlY3Rpb25UaXRsZXMpKWlmKHYubWVzc2FnZSl7bS50ZXh0PXYubWVzc2FnZSxtLng9ZS5zdGFydHgrKGUuc3RvcHgtZS5zdGFydHgpLzIsbS55PWUuc2VjdGlvbnNbeV0ueStpK2EsbS5jbGFzcz0ibG9vcFRleHQiLG0uYW5jaG9yPSJtaWRkbGUiLG0udmFsaWduPSJtaWRkbGUiLG0udHNwYW49ITEsbS5mb250RmFtaWx5PXUsbS5mb250U2l6ZT1oLG0uZm9udFdlaWdodD1mLG0ud3JhcD1lLndyYXAseWkobS50ZXh0KT8oZS5zdGFydHk9ZS5zZWN0aW9uc1t5XS55LGF3YWl0IE1iKGQsbSxlKSk6RnAoZCxtKTtsZXQgeD1NYXRoLnJvdW5kKGcubWFwKGI9PihiLl9ncm91cHN8fGIpWzBdWzBdLmdldEJCb3goKS5oZWlnaHQpLnJlZHVjZSgoYixUKT0+YitUKSk7ZS5zZWN0aW9uc1t5XS5oZWlnaHQrPXgtKGkrYSl9fXJldHVybiBlLmhlaWdodD1NYXRoLnJvdW5kKGUuc3RvcHktZS5zdGFydHkpLGR9LCJkcmF3TG9vcCIpLEJkZT1vKGZ1bmN0aW9uKHQsZSl7aVQodCxlKX0sImRyYXdCYWNrZ3JvdW5kUmVjdCIpLFpVZT1vKGZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJzeW1ib2wiKS5hdHRyKCJpZCIsImRhdGFiYXNlIikuYXR0cigiZmlsbC1ydWxlIiwiZXZlbm9kZCIpLmF0dHIoImNsaXAtcnVsZSIsImV2ZW5vZGQiKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJzY2FsZSguNSkiKS5hdHRyKCJkIiwiTTEyLjI1OC4wMDFsLjI1Ni4wMDQuMjU1LjAwNS4yNTMuMDA4LjI1MS4wMS4yNDkuMDEyLjI0Ny4wMTUuMjQ2LjAxNi4yNDIuMDE5LjI0MS4wMi4yMzkuMDIzLjIzNi4wMjQuMjMzLjAyNy4yMzEuMDI4LjIyOS4wMzEuMjI1LjAzMi4yMjMuMDM0LjIyLjAzNi4yMTcuMDM4LjIxNC4wNC4yMTEuMDQxLjIwOC4wNDMuMjA1LjA0NS4yMDEuMDQ2LjE5OC4wNDguMTk0LjA1LjE5MS4wNTEuMTg3LjA1My4xODMuMDU0LjE4LjA1Ni4xNzUuMDU3LjE3Mi4wNTkuMTY4LjA2LjE2My4wNjEuMTYuMDYzLjE1NS4wNjQuMTUuMDY2LjA3NC4wMzMuMDczLjAzMy4wNzEuMDM0LjA3LjAzNC4wNjkuMDM1LjA2OC4wMzUuMDY3LjAzNS4wNjYuMDM1LjA2NC4wMzYuMDY0LjAzNi4wNjIuMDM2LjA2LjAzNi4wNi4wMzcuMDU4LjAzNy4wNTguMDM3LjA1NS4wMzguMDU1LjAzOC4wNTMuMDM4LjA1Mi4wMzguMDUxLjAzOS4wNS4wMzkuMDQ4LjAzOS4wNDcuMDM5LjA0NS4wNC4wNDQuMDQuMDQzLjA0LjA0MS4wNC4wNC4wNDEuMDM5LjA0MS4wMzcuMDQxLjAzNi4wNDEuMDM0LjA0MS4wMzMuMDQyLjAzMi4wNDIuMDMuMDQyLjAyOS4wNDIuMDI3LjA0Mi4wMjYuMDQzLjAyNC4wNDMuMDIzLjA0My4wMjEuMDQzLjAyLjA0My4wMTguMDQ0LjAxNy4wNDMuMDE1LjA0NC4wMTMuMDQ0LjAxMi4wNDQuMDExLjA0NS4wMDkuMDQ0LjAwNy4wNDUuMDA2LjA0NS4wMDQuMDQ1LjAwMi4wNDUuMDAxLjA0NXYxN2wtLjAwMS4wNDUtLjAwMi4wNDUtLjAwNC4wNDUtLjAwNi4wNDUtLjAwNy4wNDUtLjAwOS4wNDQtLjAxMS4wNDUtLjAxMi4wNDQtLjAxMy4wNDQtLjAxNS4wNDQtLjAxNy4wNDMtLjAxOC4wNDQtLjAyLjA0My0uMDIxLjA0My0uMDIzLjA0My0uMDI0LjA0My0uMDI2LjA0My0uMDI3LjA0Mi0uMDI5LjA0Mi0uMDMuMDQyLS4wMzIuMDQyLS4wMzMuMDQyLS4wMzQuMDQxLS4wMzYuMDQxLS4wMzcuMDQxLS4wMzkuMDQxLS4wNC4wNDEtLjA0MS4wNC0uMDQzLjA0LS4wNDQuMDQtLjA0NS4wNC0uMDQ3LjAzOS0uMDQ4LjAzOS0uMDUuMDM5LS4wNTEuMDM5LS4wNTIuMDM4LS4wNTMuMDM4LS4wNTUuMDM4LS4wNTUuMDM4LS4wNTguMDM3LS4wNTguMDM3LS4wNi4wMzctLjA2LjAzNi0uMDYyLjAzNi0uMDY0LjAzNi0uMDY0LjAzNi0uMDY2LjAzNS0uMDY3LjAzNS0uMDY4LjAzNS0uMDY5LjAzNS0uMDcuMDM0LS4wNzEuMDM0LS4wNzMuMDMzLS4wNzQuMDMzLS4xNS4wNjYtLjE1NS4wNjQtLjE2LjA2My0uMTYzLjA2MS0uMTY4LjA2LS4xNzIuMDU5LS4xNzUuMDU3LS4xOC4wNTYtLjE4My4wNTQtLjE4Ny4wNTMtLjE5MS4wNTEtLjE5NC4wNS0uMTk4LjA0OC0uMjAxLjA0Ni0uMjA1LjA0NS0uMjA4LjA0My0uMjExLjA0MS0uMjE0LjA0LS4yMTcuMDM4LS4yMi4wMzYtLjIyMy4wMzQtLjIyNS4wMzItLjIyOS4wMzEtLjIzMS4wMjgtLjIzMy4wMjctLjIzNi4wMjQtLjIzOS4wMjMtLjI0MS4wMi0uMjQyLjAxOS0uMjQ2LjAxNi0uMjQ3LjAxNS0uMjQ5LjAxMi0uMjUxLjAxLS4yNTMuMDA4LS4yNTUuMDA1LS4yNTYuMDA0LS4yNTguMDAxLS4yNTgtLjAwMS0uMjU2LS4wMDQtLjI1NS0uMDA1LS4yNTMtLjAwOC0uMjUxLS4wMS0uMjQ5LS4wMTItLjI0Ny0uMDE1LS4yNDUtLjAxNi0uMjQzLS4wMTktLjI0MS0uMDItLjIzOC0uMDIzLS4yMzYtLjAyNC0uMjM0LS4wMjctLjIzMS0uMDI4LS4yMjgtLjAzMS0uMjI2LS4wMzItLjIyMy0uMDM0LS4yMi0uMDM2LS4yMTctLjAzOC0uMjE0LS4wNC0uMjExLS4wNDEtLjIwOC0uMDQzLS4yMDQtLjA0NS0uMjAxLS4wNDYtLjE5OC0uMDQ4LS4xOTUtLjA1LS4xOS0uMDUxLS4xODctLjA1My0uMTg0LS4wNTQtLjE3OS0uMDU2LS4xNzYtLjA1Ny0uMTcyLS4wNTktLjE2Ny0uMDYtLjE2NC0uMDYxLS4xNTktLjA2My0uMTU1LS4wNjQtLjE1MS0uMDY2LS4wNzQtLjAzMy0uMDcyLS4wMzMtLjA3Mi0uMDM0LS4wNy0uMDM0LS4wNjktLjAzNS0uMDY4LS4wMzUtLjA2Ny0uMDM1LS4wNjYtLjAzNS0uMDY0LS4wMzYtLjA2My0uMDM2LS4wNjItLjAzNi0uMDYxLS4wMzYtLjA2LS4wMzctLjA1OC0uMDM3LS4wNTctLjAzNy0uMDU2LS4wMzgtLjA1NS0uMDM4LS4wNTMtLjAzOC0uMDUyLS4wMzgtLjA1MS0uMDM5LS4wNDktLjAzOS0uMDQ5LS4wMzktLjA0Ni0uMDM5LS4wNDYtLjA0LS4wNDQtLjA0LS4wNDMtLjA0LS4wNDEtLjA0LS4wNC0uMDQxLS4wMzktLjA0MS0uMDM3LS4wNDEtLjAzNi0uMDQxLS4wMzQtLjA0MS0uMDMzLS4wNDItLjAzMi0uMDQyLS4wMy0uMDQyLS4wMjktLjA0Mi0uMDI3LS4wNDItLjAyNi0uMDQzLS4wMjQtLjA0My0uMDIzLS4wNDMtLjAyMS0uMDQzLS4wMi0uMDQzLS4wMTgtLjA0NC0uMDE3LS4wNDMtLjAxNS0uMDQ0LS4wMTMtLjA0NC0uMDEyLS4wNDQtLjAxMS0uMDQ1LS4wMDktLjA0NC0uMDA3LS4wNDUtLjAwNi0uMDQ1LS4wMDQtLjA0NS0uMDAyLS4wNDUtLjAwMS0uMDQ1di0xN2wuMDAxLS4wNDUuMDAyLS4wNDUuMDA0LS4wNDUuMDA2LS4wNDUuMDA3LS4wNDUuMDA5LS4wNDQuMDExLS4wNDUuMDEyLS4wNDQuMDEzLS4wNDQuMDE1LS4wNDQuMDE3LS4wNDMuMDE4LS4wNDQuMDItLjA0My4wMjEtLjA0My4wMjMtLjA0My4wMjQtLjA0My4wMjYtLjA0My4wMjctLjA0Mi4wMjktLjA0Mi4wMy0uMDQyLjAzMi0uMDQyLjAzMy0uMDQyLjAzNC0uMDQxLjAzNi0uMDQxLjAzNy0uMDQxLjAzOS0uMDQxLjA0LS4wNDEuMDQxLS4wNC4wNDMtLjA0LjA0NC0uMDQuMDQ2LS4wNC4wNDYtLjAzOS4wNDktLjAzOS4wNDktLjAzOS4wNTEtLjAzOS4wNTItLjAzOC4wNTMtLjAzOC4wNTUtLjAzOC4wNTYtLjAzOC4wNTctLjAzNy4wNTgtLjAzNy4wNi0uMDM3LjA2MS0uMDM2LjA2Mi0uMDM2LjA2My0uMDM2LjA2NC0uMDM2LjA2Ni0uMDM1LjA2Ny0uMDM1LjA2OC0uMDM1LjA2OS0uMDM1LjA3LS4wMzQuMDcyLS4wMzQuMDcyLS4wMzMuMDc0LS4wMzMuMTUxLS4wNjYuMTU1LS4wNjQuMTU5LS4wNjMuMTY0LS4wNjEuMTY3LS4wNi4xNzItLjA1OS4xNzYtLjA1Ny4xNzktLjA1Ni4xODQtLjA1NC4xODctLjA1My4xOS0uMDUxLjE5NS0uMDUuMTk4LS4wNDguMjAxLS4wNDYuMjA0LS4wNDUuMjA4LS4wNDMuMjExLS4wNDEuMjE0LS4wNC4yMTctLjAzOC4yMi0uMDM2LjIyMy0uMDM0LjIyNi0uMDMyLjIyOC0uMDMxLjIzMS0uMDI4LjIzNC0uMDI3LjIzNi0uMDI0LjIzOC0uMDIzLjI0MS0uMDIuMjQzLS4wMTkuMjQ1LS4wMTYuMjQ3LS4wMTUuMjQ5LS4wMTIuMjUxLS4wMS4yNTMtLjAwOC4yNTUtLjAwNS4yNTYtLjAwNC4yNTgtLjAwMS4yNTguMDAxem0tOS4yNTggMjAuNDk5di4wMWwuMDAxLjAyMS4wMDMuMDIxLjAwNC4wMjIuMDA1LjAyMS4wMDYuMDIyLjAwNy4wMjIuMDA5LjAyMy4wMS4wMjIuMDExLjAyMy4wMTIuMDIzLjAxMy4wMjMuMDE1LjAyMy4wMTYuMDI0LjAxNy4wMjMuMDE4LjAyNC4wMTkuMDI0LjAyMS4wMjQuMDIyLjAyNS4wMjMuMDI0LjAyNC4wMjUuMDUyLjA0OS4wNTYuMDUuMDYxLjA1MS4wNjYuMDUxLjA3LjA1MS4wNzUuMDUxLjA3OS4wNTIuMDg0LjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk3LjA1Mi4xMDIuMDUxLjEwNS4wNTIuMTEuMDUyLjExNC4wNTEuMTE5LjA1MS4xMjMuMDUxLjEyNy4wNS4xMzEuMDUuMTM1LjA1LjEzOS4wNDguMTQ0LjA0OS4xNDcuMDQ3LjE1Mi4wNDcuMTU1LjA0Ny4xNi4wNDUuMTYzLjA0NS4xNjcuMDQzLjE3MS4wNDMuMTc2LjA0MS4xNzguMDQxLjE4My4wMzkuMTg3LjAzOS4xOS4wMzcuMTk0LjAzNS4xOTcuMDM1LjIwMi4wMzMuMjA0LjAzMS4yMDkuMDMuMjEyLjAyOS4yMTYuMDI3LjIxOS4wMjUuMjIyLjAyNC4yMjYuMDIxLjIzLjAyLjIzMy4wMTguMjM2LjAxNi4yNC4wMTUuMjQzLjAxMi4yNDYuMDEuMjQ5LjAwOC4yNTMuMDA1LjI1Ni4wMDQuMjU5LjAwMS4yNi0uMDAxLjI1Ny0uMDA0LjI1NC0uMDA1LjI1LS4wMDguMjQ3LS4wMTEuMjQ0LS4wMTIuMjQxLS4wMTQuMjM3LS4wMTYuMjMzLS4wMTguMjMxLS4wMjEuMjI2LS4wMjEuMjI0LS4wMjQuMjItLjAyNi4yMTYtLjAyNy4yMTItLjAyOC4yMS0uMDMxLjIwNS0uMDMxLjIwMi0uMDM0LjE5OC0uMDM0LjE5NC0uMDM2LjE5MS0uMDM3LjE4Ny0uMDM5LjE4My0uMDQuMTc5LS4wNC4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0NC4xNjMtLjA0NS4xNi0uMDQ2LjE1NS0uMDQ2LjE1Mi0uMDQ3LjE0OC0uMDQ4LjE0My0uMDQ5LjEzOS0uMDQ5LjEzNi0uMDUuMTMxLS4wNS4xMjYtLjA1LjEyMy0uMDUxLjExOC0uMDUyLjExNC0uMDUxLjExLS4wNTIuMTA2LS4wNTIuMTAxLS4wNTIuMDk2LS4wNTIuMDkyLS4wNTIuMDg4LS4wNTMuMDgzLS4wNTEuMDc5LS4wNTIuMDc0LS4wNTIuMDctLjA1MS4wNjUtLjA1MS4wNi0uMDUxLjA1Ni0uMDUuMDUxLS4wNS4wMjMtLjAyNC4wMjMtLjAyNS4wMjEtLjAyNC4wMi0uMDI0LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDI0LjAxNS0uMDIzLjAxNC0uMDI0LjAxMy0uMDIzLjAxMi0uMDIzLjAxLS4wMjMuMDEtLjAyMi4wMDgtLjAyMi4wMDYtLjAyMi4wMDYtLjAyMi4wMDQtLjAyMi4wMDQtLjAyMS4wMDEtLjAyMS4wMDEtLjAyMXYtNC4xMjdsLS4wNzcuMDU1LS4wOC4wNTMtLjA4My4wNTQtLjA4NS4wNTMtLjA4Ny4wNTItLjA5LjA1Mi0uMDkzLjA1MS0uMDk1LjA1LS4wOTcuMDUtLjEuMDQ5LS4xMDIuMDQ5LS4xMDUuMDQ4LS4xMDYuMDQ3LS4xMDkuMDQ3LS4xMTEuMDQ2LS4xMTQuMDQ1LS4xMTUuMDQ1LS4xMTguMDQ0LS4xMi4wNDMtLjEyMi4wNDItLjEyNC4wNDItLjEyNi4wNDEtLjEyOC4wNC0uMTMuMDQtLjEzMi4wMzgtLjEzNC4wMzgtLjEzNS4wMzctLjEzOC4wMzctLjEzOS4wMzUtLjE0Mi4wMzUtLjE0My4wMzQtLjE0NC4wMzMtLjE0Ny4wMzItLjE0OC4wMzEtLjE1LjAzLS4xNTEuMDMtLjE1My4wMjktLjE1NC4wMjctLjE1Ni4wMjctLjE1OC4wMjYtLjE1OS4wMjUtLjE2MS4wMjQtLjE2Mi4wMjMtLjE2My4wMjItLjE2NS4wMjEtLjE2Ni4wMi0uMTY3LjAxOS0uMTY5LjAxOC0uMTY5LjAxNy0uMTcxLjAxNi0uMTczLjAxNS0uMTczLjAxNC0uMTc1LjAxMy0uMTc1LjAxMi0uMTc3LjAxMS0uMTc4LjAxLS4xNzkuMDA4LS4xNzkuMDA4LS4xODEuMDA2LS4xODIuMDA1LS4xODIuMDA0LS4xODQuMDAzLS4xODQuMDAyaC0uMzdsLS4xODQtLjAwMi0uMTg0LS4wMDMtLjE4Mi0uMDA0LS4xODItLjAwNS0uMTgxLS4wMDYtLjE3OS0uMDA4LS4xNzktLjAwOC0uMTc4LS4wMS0uMTc2LS4wMTEtLjE3Ni0uMDEyLS4xNzUtLjAxMy0uMTczLS4wMTQtLjE3Mi0uMDE1LS4xNzEtLjAxNi0uMTctLjAxNy0uMTY5LS4wMTgtLjE2Ny0uMDE5LS4xNjYtLjAyLS4xNjUtLjAyMS0uMTYzLS4wMjItLjE2Mi0uMDIzLS4xNjEtLjAyNC0uMTU5LS4wMjUtLjE1Ny0uMDI2LS4xNTYtLjAyNy0uMTU1LS4wMjctLjE1My0uMDI5LS4xNTEtLjAzLS4xNS0uMDMtLjE0OC0uMDMxLS4xNDYtLjAzMi0uMTQ1LS4wMzMtLjE0My0uMDM0LS4xNDEtLjAzNS0uMTQtLjAzNS0uMTM3LS4wMzctLjEzNi0uMDM3LS4xMzQtLjAzOC0uMTMyLS4wMzgtLjEzLS4wNC0uMTI4LS4wNC0uMTI2LS4wNDEtLjEyNC0uMDQyLS4xMjItLjA0Mi0uMTItLjA0NC0uMTE3LS4wNDMtLjExNi0uMDQ1LS4xMTMtLjA0NS0uMTEyLS4wNDYtLjEwOS0uMDQ3LS4xMDYtLjA0Ny0uMTA1LS4wNDgtLjEwMi0uMDQ5LS4xLS4wNDktLjA5Ny0uMDUtLjA5NS0uMDUtLjA5My0uMDUyLS4wOS0uMDUxLS4wODctLjA1Mi0uMDg1LS4wNTMtLjA4My0uMDU0LS4wOC0uMDU0LS4wNzctLjA1NHY0LjEyN3ptMC01LjY1NHYuMDExbC4wMDEuMDIxLjAwMy4wMjEuMDA0LjAyMS4wMDUuMDIyLjAwNi4wMjIuMDA3LjAyMi4wMDkuMDIyLjAxLjAyMi4wMTEuMDIzLjAxMi4wMjMuMDEzLjAyMy4wMTUuMDI0LjAxNi4wMjMuMDE3LjAyNC4wMTguMDI0LjAxOS4wMjQuMDIxLjAyNC4wMjIuMDI0LjAyMy4wMjUuMDI0LjAyNC4wNTIuMDUuMDU2LjA1LjA2MS4wNS4wNjYuMDUxLjA3LjA1MS4wNzUuMDUyLjA3OS4wNTEuMDg0LjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk3LjA1Mi4xMDIuMDUyLjEwNS4wNTIuMTEuMDUxLjExNC4wNTEuMTE5LjA1Mi4xMjMuMDUuMTI3LjA1MS4xMzEuMDUuMTM1LjA0OS4xMzkuMDQ5LjE0NC4wNDguMTQ3LjA0OC4xNTIuMDQ3LjE1NS4wNDYuMTYuMDQ1LjE2My4wNDUuMTY3LjA0NC4xNzEuMDQyLjE3Ni4wNDIuMTc4LjA0LjE4My4wNC4xODcuMDM4LjE5LjAzNy4xOTQuMDM2LjE5Ny4wMzQuMjAyLjAzMy4yMDQuMDMyLjIwOS4wMy4yMTIuMDI4LjIxNi4wMjcuMjE5LjAyNS4yMjIuMDI0LjIyNi4wMjIuMjMuMDIuMjMzLjAxOC4yMzYuMDE2LjI0LjAxNC4yNDMuMDEyLjI0Ni4wMS4yNDkuMDA4LjI1My4wMDYuMjU2LjAwMy4yNTkuMDAxLjI2LS4wMDEuMjU3LS4wMDMuMjU0LS4wMDYuMjUtLjAwOC4yNDctLjAxLjI0NC0uMDEyLjI0MS0uMDE1LjIzNy0uMDE2LjIzMy0uMDE4LjIzMS0uMDIuMjI2LS4wMjIuMjI0LS4wMjQuMjItLjAyNS4yMTYtLjAyNy4yMTItLjAyOS4yMS0uMDMuMjA1LS4wMzIuMjAyLS4wMzMuMTk4LS4wMzUuMTk0LS4wMzYuMTkxLS4wMzcuMTg3LS4wMzkuMTgzLS4wMzkuMTc5LS4wNDEuMTc1LS4wNDIuMTcyLS4wNDMuMTY4LS4wNDQuMTYzLS4wNDUuMTYtLjA0NS4xNTUtLjA0Ny4xNTItLjA0Ny4xNDgtLjA0OC4xNDMtLjA0OC4xMzktLjA1LjEzNi0uMDQ5LjEzMS0uMDUuMTI2LS4wNTEuMTIzLS4wNTEuMTE4LS4wNTEuMTE0LS4wNTIuMTEtLjA1Mi4xMDYtLjA1Mi4xMDEtLjA1Mi4wOTYtLjA1Mi4wOTItLjA1Mi4wODgtLjA1Mi4wODMtLjA1Mi4wNzktLjA1Mi4wNzQtLjA1MS4wNy0uMDUyLjA2NS0uMDUxLjA2LS4wNS4wNTYtLjA1MS4wNTEtLjA0OS4wMjMtLjAyNS4wMjMtLjAyNC4wMjEtLjAyNS4wMi0uMDI0LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDI0LjAxNS0uMDIzLjAxNC0uMDIzLjAxMy0uMDI0LjAxMi0uMDIyLjAxLS4wMjMuMDEtLjAyMy4wMDgtLjAyMi4wMDYtLjAyMi4wMDYtLjAyMi4wMDQtLjAyMS4wMDQtLjAyMi4wMDEtLjAyMS4wMDEtLjAyMXYtNC4xMzlsLS4wNzcuMDU0LS4wOC4wNTQtLjA4My4wNTQtLjA4NS4wNTItLjA4Ny4wNTMtLjA5LjA1MS0uMDkzLjA1MS0uMDk1LjA1MS0uMDk3LjA1LS4xLjA0OS0uMTAyLjA0OS0uMTA1LjA0OC0uMTA2LjA0Ny0uMTA5LjA0Ny0uMTExLjA0Ni0uMTE0LjA0NS0uMTE1LjA0NC0uMTE4LjA0NC0uMTIuMDQ0LS4xMjIuMDQyLS4xMjQuMDQyLS4xMjYuMDQxLS4xMjguMDQtLjEzLjAzOS0uMTMyLjAzOS0uMTM0LjAzOC0uMTM1LjAzNy0uMTM4LjAzNi0uMTM5LjAzNi0uMTQyLjAzNS0uMTQzLjAzMy0uMTQ0LjAzMy0uMTQ3LjAzMy0uMTQ4LjAzMS0uMTUuMDMtLjE1MS4wMy0uMTUzLjAyOC0uMTU0LjAyOC0uMTU2LjAyNy0uMTU4LjAyNi0uMTU5LjAyNS0uMTYxLjAyNC0uMTYyLjAyMy0uMTYzLjAyMi0uMTY1LjAyMS0uMTY2LjAyLS4xNjcuMDE5LS4xNjkuMDE4LS4xNjkuMDE3LS4xNzEuMDE2LS4xNzMuMDE1LS4xNzMuMDE0LS4xNzUuMDEzLS4xNzUuMDEyLS4xNzcuMDExLS4xNzguMDA5LS4xNzkuMDA5LS4xNzkuMDA3LS4xODEuMDA3LS4xODIuMDA1LS4xODIuMDA0LS4xODQuMDAzLS4xODQuMDAyaC0uMzdsLS4xODQtLjAwMi0uMTg0LS4wMDMtLjE4Mi0uMDA0LS4xODItLjAwNS0uMTgxLS4wMDctLjE3OS0uMDA3LS4xNzktLjAwOS0uMTc4LS4wMDktLjE3Ni0uMDExLS4xNzYtLjAxMi0uMTc1LS4wMTMtLjE3My0uMDE0LS4xNzItLjAxNS0uMTcxLS4wMTYtLjE3LS4wMTctLjE2OS0uMDE4LS4xNjctLjAxOS0uMTY2LS4wMi0uMTY1LS4wMjEtLjE2My0uMDIyLS4xNjItLjAyMy0uMTYxLS4wMjQtLjE1OS0uMDI1LS4xNTctLjAyNi0uMTU2LS4wMjctLjE1NS0uMDI4LS4xNTMtLjAyOC0uMTUxLS4wMy0uMTUtLjAzLS4xNDgtLjAzMS0uMTQ2LS4wMzMtLjE0NS0uMDMzLS4xNDMtLjAzMy0uMTQxLS4wMzUtLjE0LS4wMzYtLjEzNy0uMDM2LS4xMzYtLjAzNy0uMTM0LS4wMzgtLjEzMi0uMDM5LS4xMy0uMDM5LS4xMjgtLjA0LS4xMjYtLjA0MS0uMTI0LS4wNDItLjEyMi0uMDQzLS4xMi0uMDQzLS4xMTctLjA0NC0uMTE2LS4wNDQtLjExMy0uMDQ2LS4xMTItLjA0Ni0uMTA5LS4wNDYtLjEwNi0uMDQ3LS4xMDUtLjA0OC0uMTAyLS4wNDktLjEtLjA0OS0uMDk3LS4wNS0uMDk1LS4wNTEtLjA5My0uMDUxLS4wOS0uMDUxLS4wODctLjA1My0uMDg1LS4wNTItLjA4My0uMDU0LS4wOC0uMDU0LS4wNzctLjA1NHY0LjEzOXptMC01LjY2NnYuMDExbC4wMDEuMDIuMDAzLjAyMi4wMDQuMDIxLjAwNS4wMjIuMDA2LjAyMS4wMDcuMDIyLjAwOS4wMjMuMDEuMDIyLjAxMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNS4wMjMuMDE2LjAyNC4wMTcuMDI0LjAxOC4wMjMuMDE5LjAyNC4wMjEuMDI1LjAyMi4wMjQuMDIzLjAyNC4wMjQuMDI1LjA1Mi4wNS4wNTYuMDUuMDYxLjA1LjA2Ni4wNTEuMDcuMDUxLjA3NS4wNTIuMDc5LjA1MS4wODQuMDUyLjA4OC4wNTIuMDkyLjA1Mi4wOTcuMDUyLjEwMi4wNTIuMTA1LjA1MS4xMS4wNTIuMTE0LjA1MS4xMTkuMDUxLjEyMy4wNTEuMTI3LjA1LjEzMS4wNS4xMzUuMDUuMTM5LjA0OS4xNDQuMDQ4LjE0Ny4wNDguMTUyLjA0Ny4xNTUuMDQ2LjE2LjA0NS4xNjMuMDQ1LjE2Ny4wNDMuMTcxLjA0My4xNzYuMDQyLjE3OC4wNC4xODMuMDQuMTg3LjAzOC4xOS4wMzcuMTk0LjAzNi4xOTcuMDM0LjIwMi4wMzMuMjA0LjAzMi4yMDkuMDMuMjEyLjAyOC4yMTYuMDI3LjIxOS4wMjUuMjIyLjAyNC4yMjYuMDIxLjIzLjAyLjIzMy4wMTguMjM2LjAxNy4yNC4wMTQuMjQzLjAxMi4yNDYuMDEuMjQ5LjAwOC4yNTMuMDA2LjI1Ni4wMDMuMjU5LjAwMS4yNi0uMDAxLjI1Ny0uMDAzLjI1NC0uMDA2LjI1LS4wMDguMjQ3LS4wMS4yNDQtLjAxMy4yNDEtLjAxNC4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyLjIyNi0uMDIyLjIyNC0uMDI0LjIyLS4wMjUuMjE2LS4wMjcuMjEyLS4wMjkuMjEtLjAzLjIwNS0uMDMyLjIwMi0uMDMzLjE5OC0uMDM1LjE5NC0uMDM2LjE5MS0uMDM3LjE4Ny0uMDM5LjE4My0uMDM5LjE3OS0uMDQxLjE3NS0uMDQyLjE3Mi0uMDQzLjE2OC0uMDQ0LjE2My0uMDQ1LjE2LS4wNDUuMTU1LS4wNDcuMTUyLS4wNDcuMTQ4LS4wNDguMTQzLS4wNDkuMTM5LS4wNDkuMTM2LS4wNDkuMTMxLS4wNTEuMTI2LS4wNS4xMjMtLjA1MS4xMTgtLjA1Mi4xMTQtLjA1MS4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUyLjA4My0uMDUyLjA3OS0uMDUyLjA3NC0uMDUyLjA3LS4wNTEuMDY1LS4wNTEuMDYtLjA1MS4wNTYtLjA1LjA1MS0uMDQ5LjAyMy0uMDI1LjAyMy0uMDI1LjAyMS0uMDI0LjAyLS4wMjQuMDE5LS4wMjQuMDE4LS4wMjQuMDE3LS4wMjQuMDE1LS4wMjMuMDE0LS4wMjQuMDEzLS4wMjMuMDEyLS4wMjMuMDEtLjAyMi4wMS0uMDIzLjAwOC0uMDIyLjAwNi0uMDIyLjAwNi0uMDIyLjAwNC0uMDIyLjAwNC0uMDIxLjAwMS0uMDIxLjAwMS0uMDIxdi00LjE1M2wtLjA3Ny4wNTQtLjA4LjA1NC0uMDgzLjA1My0uMDg1LjA1My0uMDg3LjA1My0uMDkuMDUxLS4wOTMuMDUxLS4wOTUuMDUxLS4wOTcuMDUtLjEuMDQ5LS4xMDIuMDQ4LS4xMDUuMDQ4LS4xMDYuMDQ4LS4xMDkuMDQ2LS4xMTEuMDQ2LS4xMTQuMDQ2LS4xMTUuMDQ0LS4xMTguMDQ0LS4xMi4wNDMtLjEyMi4wNDMtLjEyNC4wNDItLjEyNi4wNDEtLjEyOC4wNC0uMTMuMDM5LS4xMzIuMDM5LS4xMzQuMDM4LS4xMzUuMDM3LS4xMzguMDM2LS4xMzkuMDM2LS4xNDIuMDM0LS4xNDMuMDM0LS4xNDQuMDMzLS4xNDcuMDMyLS4xNDguMDMyLS4xNS4wMy0uMTUxLjAzLS4xNTMuMDI4LS4xNTQuMDI4LS4xNTYuMDI3LS4xNTguMDI2LS4xNTkuMDI0LS4xNjEuMDI0LS4xNjIuMDIzLS4xNjMuMDIzLS4xNjUuMDIxLS4xNjYuMDItLjE2Ny4wMTktLjE2OS4wMTgtLjE2OS4wMTctLjE3MS4wMTYtLjE3My4wMTUtLjE3My4wMTQtLjE3NS4wMTMtLjE3NS4wMTItLjE3Ny4wMS0uMTc4LjAxLS4xNzkuMDA5LS4xNzkuMDA3LS4xODEuMDA2LS4xODIuMDA2LS4xODIuMDA0LS4xODQuMDAzLS4xODQuMDAxLS4xODUuMDAxLS4xODUtLjAwMS0uMTg0LS4wMDEtLjE4NC0uMDAzLS4xODItLjAwNC0uMTgyLS4wMDYtLjE4MS0uMDA2LS4xNzktLjAwNy0uMTc5LS4wMDktLjE3OC0uMDEtLjE3Ni0uMDEtLjE3Ni0uMDEyLS4xNzUtLjAxMy0uMTczLS4wMTQtLjE3Mi0uMDE1LS4xNzEtLjAxNi0uMTctLjAxNy0uMTY5LS4wMTgtLjE2Ny0uMDE5LS4xNjYtLjAyLS4xNjUtLjAyMS0uMTYzLS4wMjMtLjE2Mi0uMDIzLS4xNjEtLjAyNC0uMTU5LS4wMjQtLjE1Ny0uMDI2LS4xNTYtLjAyNy0uMTU1LS4wMjgtLjE1My0uMDI4LS4xNTEtLjAzLS4xNS0uMDMtLjE0OC0uMDMyLS4xNDYtLjAzMi0uMTQ1LS4wMzMtLjE0My0uMDM0LS4xNDEtLjAzNC0uMTQtLjAzNi0uMTM3LS4wMzYtLjEzNi0uMDM3LS4xMzQtLjAzOC0uMTMyLS4wMzktLjEzLS4wMzktLjEyOC0uMDQxLS4xMjYtLjA0MS0uMTI0LS4wNDEtLjEyMi0uMDQzLS4xMi0uMDQzLS4xMTctLjA0NC0uMTE2LS4wNDQtLjExMy0uMDQ2LS4xMTItLjA0Ni0uMTA5LS4wNDYtLjEwNi0uMDQ4LS4xMDUtLjA0OC0uMTAyLS4wNDgtLjEtLjA1LS4wOTctLjA0OS0uMDk1LS4wNTEtLjA5My0uMDUxLS4wOS0uMDUyLS4wODctLjA1Mi0uMDg1LS4wNTMtLjA4My0uMDUzLS4wOC0uMDU0LS4wNzctLjA1NHY0LjE1M3ptOC43NC04LjE3OWwtLjI1Ny4wMDQtLjI1NC4wMDUtLjI1LjAwOC0uMjQ3LjAxMS0uMjQ0LjAxMi0uMjQxLjAxNC0uMjM3LjAxNi0uMjMzLjAxOC0uMjMxLjAyMS0uMjI2LjAyMi0uMjI0LjAyMy0uMjIuMDI2LS4yMTYuMDI3LS4yMTIuMDI4LS4yMS4wMzEtLjIwNS4wMzItLjIwMi4wMzMtLjE5OC4wMzQtLjE5NC4wMzYtLjE5MS4wMzgtLjE4Ny4wMzgtLjE4My4wNC0uMTc5LjA0MS0uMTc1LjA0Mi0uMTcyLjA0My0uMTY4LjA0My0uMTYzLjA0NS0uMTYuMDQ2LS4xNTUuMDQ2LS4xNTIuMDQ4LS4xNDguMDQ4LS4xNDMuMDQ4LS4xMzkuMDQ5LS4xMzYuMDUtLjEzMS4wNS0uMTI2LjA1MS0uMTIzLjA1MS0uMTE4LjA1MS0uMTE0LjA1Mi0uMTEuMDUyLS4xMDYuMDUyLS4xMDEuMDUyLS4wOTYuMDUyLS4wOTIuMDUyLS4wODguMDUyLS4wODMuMDUyLS4wNzkuMDUyLS4wNzQuMDUxLS4wNy4wNTItLjA2NS4wNTEtLjA2LjA1LS4wNTYuMDUtLjA1MS4wNS0uMDIzLjAyNS0uMDIzLjAyNC0uMDIxLjAyNC0uMDIuMDI1LS4wMTkuMDI0LS4wMTguMDI0LS4wMTcuMDIzLS4wMTUuMDI0LS4wMTQuMDIzLS4wMTMuMDIzLS4wMTIuMDIzLS4wMS4wMjMtLjAxLjAyMi0uMDA4LjAyMi0uMDA2LjAyMy0uMDA2LjAyMS0uMDA0LjAyMi0uMDA0LjAyMS0uMDAxLjAyMS0uMDAxLjAyMS4wMDEuMDIxLjAwMS4wMjEuMDA0LjAyMS4wMDQuMDIyLjAwNi4wMjEuMDA2LjAyMy4wMDguMDIyLjAxLjAyMi4wMS4wMjMuMDEyLjAyMy4wMTMuMDIzLjAxNC4wMjMuMDE1LjAyNC4wMTcuMDIzLjAxOC4wMjQuMDE5LjAyNC4wMi4wMjUuMDIxLjAyNC4wMjMuMDI0LjAyMy4wMjUuMDUxLjA1LjA1Ni4wNS4wNi4wNS4wNjUuMDUxLjA3LjA1Mi4wNzQuMDUxLjA3OS4wNTIuMDgzLjA1Mi4wODguMDUyLjA5Mi4wNTIuMDk2LjA1Mi4xMDEuMDUyLjEwNi4wNTIuMTEuMDUyLjExNC4wNTIuMTE4LjA1MS4xMjMuMDUxLjEyNi4wNTEuMTMxLjA1LjEzNi4wNS4xMzkuMDQ5LjE0My4wNDguMTQ4LjA0OC4xNTIuMDQ4LjE1NS4wNDYuMTYuMDQ2LjE2My4wNDUuMTY4LjA0My4xNzIuMDQzLjE3NS4wNDIuMTc5LjA0MS4xODMuMDQuMTg3LjAzOC4xOTEuMDM4LjE5NC4wMzYuMTk4LjAzNC4yMDIuMDMzLjIwNS4wMzIuMjEuMDMxLjIxMi4wMjguMjE2LjAyNy4yMi4wMjYuMjI0LjAyMy4yMjYuMDIyLjIzMS4wMjEuMjMzLjAxOC4yMzcuMDE2LjI0MS4wMTQuMjQ0LjAxMi4yNDcuMDExLjI1LjAwOC4yNTQuMDA1LjI1Ny4wMDQuMjYuMDAxLjI2LS4wMDEuMjU3LS4wMDQuMjU0LS4wMDUuMjUtLjAwOC4yNDctLjAxMS4yNDQtLjAxMi4yNDEtLjAxNC4yMzctLjAxNi4yMzMtLjAxOC4yMzEtLjAyMS4yMjYtLjAyMi4yMjQtLjAyMy4yMi0uMDI2LjIxNi0uMDI3LjIxMi0uMDI4LjIxLS4wMzEuMjA1LS4wMzIuMjAyLS4wMzMuMTk4LS4wMzQuMTk0LS4wMzYuMTkxLS4wMzguMTg3LS4wMzguMTgzLS4wNC4xNzktLjA0MS4xNzUtLjA0Mi4xNzItLjA0My4xNjgtLjA0My4xNjMtLjA0NS4xNi0uMDQ2LjE1NS0uMDQ2LjE1Mi0uMDQ4LjE0OC0uMDQ4LjE0My0uMDQ4LjEzOS0uMDQ5LjEzNi0uMDUuMTMxLS4wNS4xMjYtLjA1MS4xMjMtLjA1MS4xMTgtLjA1MS4xMTQtLjA1Mi4xMS0uMDUyLjEwNi0uMDUyLjEwMS0uMDUyLjA5Ni0uMDUyLjA5Mi0uMDUyLjA4OC0uMDUyLjA4My0uMDUyLjA3OS0uMDUyLjA3NC0uMDUxLjA3LS4wNTIuMDY1LS4wNTEuMDYtLjA1LjA1Ni0uMDUuMDUxLS4wNS4wMjMtLjAyNS4wMjMtLjAyNC4wMjEtLjAyNC4wMi0uMDI1LjAxOS0uMDI0LjAxOC0uMDI0LjAxNy0uMDIzLjAxNS0uMDI0LjAxNC0uMDIzLjAxMy0uMDIzLjAxMi0uMDIzLjAxLS4wMjMuMDEtLjAyMi4wMDgtLjAyMi4wMDYtLjAyMy4wMDYtLjAyMS4wMDQtLjAyMi4wMDQtLjAyMS4wMDEtLjAyMS4wMDEtLjAyMS0uMDAxLS4wMjEtLjAwMS0uMDIxLS4wMDQtLjAyMS0uMDA0LS4wMjItLjAwNi0uMDIxLS4wMDYtLjAyMy0uMDA4LS4wMjItLjAxLS4wMjItLjAxLS4wMjMtLjAxMi0uMDIzLS4wMTMtLjAyMy0uMDE0LS4wMjMtLjAxNS0uMDI0LS4wMTctLjAyMy0uMDE4LS4wMjQtLjAxOS0uMDI0LS4wMi0uMDI1LS4wMjEtLjAyNC0uMDIzLS4wMjQtLjAyMy0uMDI1LS4wNTEtLjA1LS4wNTYtLjA1LS4wNi0uMDUtLjA2NS0uMDUxLS4wNy0uMDUyLS4wNzQtLjA1MS0uMDc5LS4wNTItLjA4My0uMDUyLS4wODgtLjA1Mi0uMDkyLS4wNTItLjA5Ni0uMDUyLS4xMDEtLjA1Mi0uMTA2LS4wNTItLjExLS4wNTItLjExNC0uMDUyLS4xMTgtLjA1MS0uMTIzLS4wNTEtLjEyNi0uMDUxLS4xMzEtLjA1LS4xMzYtLjA1LS4xMzktLjA0OS0uMTQzLS4wNDgtLjE0OC0uMDQ4LS4xNTItLjA0OC0uMTU1LS4wNDYtLjE2LS4wNDYtLjE2My0uMDQ1LS4xNjgtLjA0My0uMTcyLS4wNDMtLjE3NS0uMDQyLS4xNzktLjA0MS0uMTgzLS4wNC0uMTg3LS4wMzgtLjE5MS0uMDM4LS4xOTQtLjAzNi0uMTk4LS4wMzQtLjIwMi0uMDMzLS4yMDUtLjAzMi0uMjEtLjAzMS0uMjEyLS4wMjgtLjIxNi0uMDI3LS4yMi0uMDI2LS4yMjQtLjAyMy0uMjI2LS4wMjItLjIzMS0uMDIxLS4yMzMtLjAxOC0uMjM3LS4wMTYtLjI0MS0uMDE0LS4yNDQtLjAxMi0uMjQ3LS4wMTEtLjI1LS4wMDgtLjI1NC0uMDA1LS4yNTctLjAwNC0uMjYtLjAwMS0uMjYuMDAxeiIpfSwiaW5zZXJ0RGF0YWJhc2VJY29uIiksSlVlPW8oZnVuY3Rpb24odCl7dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoInN5bWJvbCIpLmF0dHIoImlkIiwiY29tcHV0ZXIiKS5hdHRyKCJ3aWR0aCIsIjI0IikuYXR0cigiaGVpZ2h0IiwiMjQiKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJzY2FsZSguNSkiKS5hdHRyKCJkIiwiTTIgMnYxM2gyMHYtMTNoLTIwem0xOCAxMWgtMTZ2LTloMTZ2OXptLTEwLjIyOCA2bC40NjYtMWgzLjUyNGwuNDY3IDFoLTQuNDU3em0xNC4yMjggM2gtMjRsMi02aDIuMTA0bC0xLjMzIDRoMTguNDVsLTEuMjk3LTRoMi4wNzNsMiA2em0tNS0xMGgtMTR2LTdoMTR2N3oiKX0sImluc2VydENvbXB1dGVySWNvbiIpLGVIZT1vKGZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJzeW1ib2wiKS5hdHRyKCJpZCIsImNsb2NrIikuYXR0cigid2lkdGgiLCIyNCIpLmF0dHIoImhlaWdodCIsIjI0IikuYXBwZW5kKCJwYXRoIikuYXR0cigidHJhbnNmb3JtIiwic2NhbGUoLjUpIikuYXR0cigiZCIsIk0xMiAyYzUuNTE0IDAgMTAgNC40ODYgMTAgMTBzLTQuNDg2IDEwLTEwIDEwLTEwLTQuNDg2LTEwLTEwIDQuNDg2LTEwIDEwLTEwem0wLTJjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJzNS4zNzMgMTIgMTIgMTIgMTItNS4zNzMgMTItMTItNS4zNzMtMTItMTItMTJ6bTUuODQ4IDEyLjQ1OWMuMjAyLjAzOC4yMDIuMzMzLjAwMS4zNzItMS45MDcuMzYxLTYuMDQ1IDEuMTExLTYuNTQ3IDEuMTExLS43MTkgMC0xLjMwMS0uNTgyLTEuMzAxLTEuMzAxIDAtLjUxMi43Ny01LjQ0NyAxLjEyNS03LjQ0NS4wMzQtLjE5Mi4zMTItLjE4MS4zNDMuMDE0bC45ODUgNi4yMzggNS4zOTQgMS4wMTF6Iil9LCJpbnNlcnRDbG9ja0ljb24iKSx0SGU9byhmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJhcnJvd2hlYWQiKS5hdHRyKCJyZWZYIiw3LjkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTIpLmF0dHIoIm1hcmtlckhlaWdodCIsMTIpLmF0dHIoIm9yaWVudCIsImF1dG8tc3RhcnQtcmV2ZXJzZSIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIC0xIDAgTCAxMCA1IEwgMCAxMCB6Iil9LCJpbnNlcnRBcnJvd0hlYWQiKSxySGU9byhmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJmaWxsZWQtaGVhZCIpLmF0dHIoInJlZlgiLDE1LjUpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDE0LDcgTDksMSBaIil9LCJpbnNlcnRBcnJvd0ZpbGxlZEhlYWQiKSxuSGU9byhmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJzZXF1ZW5jZW51bWJlciIpLmF0dHIoInJlZlgiLDE1KS5hdHRyKCJyZWZZIiwxNSkuYXR0cigibWFya2VyV2lkdGgiLDYwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsMTUpLmF0dHIoImN5IiwxNSkuYXR0cigiciIsNil9LCJpbnNlcnRTZXF1ZW5jZU51bWJlciIpLGlIZT1vKGZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImNyb3NzaGVhZCIpLmF0dHIoIm1hcmtlcldpZHRoIiwxNSkuYXR0cigibWFya2VySGVpZ2h0Iiw4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXR0cigicmVmWCIsNCkuYXR0cigicmVmWSIsNC41KS5hcHBlbmQoInBhdGgiKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInN0cm9rZSIsIiMwMDAwMDAiKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjAsIDAiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxcHQiKS5hdHRyKCJkIiwiTSAxLDIgTCA2LDcgTSA2LDIgTCAxLDciKX0sImluc2VydEFycm93Q3Jvc3NIZWFkIiksRmRlPW8oZnVuY3Rpb24oKXtyZXR1cm57eDowLHk6MCxmaWxsOnZvaWQgMCxhbmNob3I6dm9pZCAwLHN0eWxlOiIjNjY2Iix3aWR0aDp2b2lkIDAsaGVpZ2h0OnZvaWQgMCx0ZXh0TWFyZ2luOjAscng6MCxyeTowLHRzcGFuOiEwLHZhbGlnbjp2b2lkIDB9fSwiZ2V0VGV4dE9iaiIpLGFIZT1vKGZ1bmN0aW9uKCl7cmV0dXJue3g6MCx5OjAsZmlsbDoiI0VERjJBRSIsc3Ryb2tlOiIjNjY2Iix3aWR0aDoxMDAsYW5jaG9yOiJzdGFydCIsaGVpZ2h0OjEwMCxyeDowLHJ5OjB9fSwiZ2V0Tm90ZVJlY3QiKSx5UD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoYSxzLGwsdSxoLGYsZCl7bGV0IHA9cy5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixsK2gvMikuYXR0cigieSIsdStmLzIrNSkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dChhKTtpKHAsZCl9byh0LCJieVRleHQiKTtmdW5jdGlvbiBlKGEscyxsLHUsaCxmLGQscCl7bGV0e2FjdG9yRm9udFNpemU6bSxhY3RvckZvbnRGYW1pbHk6ZyxhY3RvckZvbnRXZWlnaHQ6eX09cCxbdix4XT16byhtKSxiPWEuc3BsaXQoWmUubGluZUJyZWFrUmVnZXgpO2ZvcihsZXQgVD0wO1Q8Yi5sZW5ndGg7VCsrKXtsZXQgUz1UKnYtdiooYi5sZW5ndGgtMSkvMix3PXMuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsbCtoLzIpLmF0dHIoInkiLHUpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnN0eWxlKCJmb250LXNpemUiLHgpLnN0eWxlKCJmb250LXdlaWdodCIseSkuc3R5bGUoImZvbnQtZmFtaWx5IixnKTt3LmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixsK2gvMikuYXR0cigiZHkiLFMpLnRleHQoYltUXSksdy5hdHRyKCJ5Iix1K2YvMikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLGkodyxkKX19byhlLCJieVRzcGFuIik7ZnVuY3Rpb24gcihhLHMsbCx1LGgsZixkLHApe2xldCBtPXMuYXBwZW5kKCJzd2l0Y2giKSx5PW0uYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigieCIsbCkuYXR0cigieSIsdSkuYXR0cigid2lkdGgiLGgpLmF0dHIoImhlaWdodCIsZikuYXBwZW5kKCJ4aHRtbDpkaXYiKS5zdHlsZSgiZGlzcGxheSIsInRhYmxlIikuc3R5bGUoImhlaWdodCIsIjEwMCUiKS5zdHlsZSgid2lkdGgiLCIxMDAlIik7eS5hcHBlbmQoImRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUtY2VsbCIpLnN0eWxlKCJ0ZXh0LWFsaWduIiwiY2VudGVyIikuc3R5bGUoInZlcnRpY2FsLWFsaWduIiwibWlkZGxlIikudGV4dChhKSxlKGEsbSxsLHUsaCxmLGQscCksaSh5LGQpfW8ociwiYnlGbyIpO2FzeW5jIGZ1bmN0aW9uIG4oYSxzLGwsdSxoLGYsZCxwKXtsZXQgbT1hd2FpdCBoZChhLHRyKCkpLGc9cy5hcHBlbmQoInN3aXRjaCIpLHY9Zy5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ4IixsK2gvMi1tLndpZHRoLzIpLmF0dHIoInkiLHUrZi8yLW0uaGVpZ2h0LzIpLmF0dHIoIndpZHRoIixtLndpZHRoKS5hdHRyKCJoZWlnaHQiLG0uaGVpZ2h0KS5hcHBlbmQoInhodG1sOmRpdiIpLnN0eWxlKCJoZWlnaHQiLCIxMDAlIikuc3R5bGUoIndpZHRoIiwiMTAwJSIpO3YuYXBwZW5kKCJkaXYiKS5zdHlsZSgidGV4dC1hbGlnbiIsImNlbnRlciIpLnN0eWxlKCJ2ZXJ0aWNhbC1hbGlnbiIsIm1pZGRsZSIpLmh0bWwoYXdhaXQgVGgoYSx0cigpKSksZShhLGcsbCx1LGgsZixkLHApLGkodixkKX1vKG4sImJ5S2F0ZXgiKTtmdW5jdGlvbiBpKGEscyl7Zm9yKGxldCBsIGluIHMpcy5oYXNPd25Qcm9wZXJ0eShsKSYmYS5hdHRyKGwsc1tsXSl9cmV0dXJuIG8oaSwiX3NldFRleHRBdHRycyIpLGZ1bmN0aW9uKGEscz0hMSl7cmV0dXJuIHM/bjphLnRleHRQbGFjZW1lbnQ9PT0iZm8iP3I6YS50ZXh0UGxhY2VtZW50PT09Im9sZCI/dDplfX0oKSxzSGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGksYSxzLGwsdSxoLGYpe2xldCBkPWEuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIscykuYXR0cigieSIsbCkuc3R5bGUoInRleHQtYW5jaG9yIiwic3RhcnQiKS50ZXh0KGkpO24oZCxmKX1vKHQsImJ5VGV4dCIpO2Z1bmN0aW9uIGUoaSxhLHMsbCx1LGgsZixkKXtsZXR7YWN0b3JGb250U2l6ZTpwLGFjdG9yRm9udEZhbWlseTptLGFjdG9yRm9udFdlaWdodDpnfT1kLHk9aS5zcGxpdChaZS5saW5lQnJlYWtSZWdleCk7Zm9yKGxldCB2PTA7djx5Lmxlbmd0aDt2Kyspe2xldCB4PXYqcC1wKih5Lmxlbmd0aC0xKS8yLGI9YS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixzKS5hdHRyKCJ5IixsKS5zdHlsZSgidGV4dC1hbmNob3IiLCJzdGFydCIpLnN0eWxlKCJmb250LXNpemUiLHApLnN0eWxlKCJmb250LXdlaWdodCIsZykuc3R5bGUoImZvbnQtZmFtaWx5IixtKTtiLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixzKS5hdHRyKCJkeSIseCkudGV4dCh5W3ZdKSxiLmF0dHIoInkiLGwraC8yKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsImNlbnRyYWwiKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJjZW50cmFsIiksbihiLGYpfX1vKGUsImJ5VHNwYW4iKTtmdW5jdGlvbiByKGksYSxzLGwsdSxoLGYsZCl7bGV0IHA9YS5hcHBlbmQoInN3aXRjaCIpLGc9cC5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ4IixzKS5hdHRyKCJ5IixsKS5hdHRyKCJ3aWR0aCIsdSkuYXR0cigiaGVpZ2h0IixoKS5hcHBlbmQoInhodG1sOmRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUiKS5zdHlsZSgiaGVpZ2h0IiwiMTAwJSIpLnN0eWxlKCJ3aWR0aCIsIjEwMCUiKTtnLmFwcGVuZCgiZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS50ZXh0KGkpLGUoaSxwLHMsbCx1LGgsZixkKSxuKGcsZil9byhyLCJieUZvIik7ZnVuY3Rpb24gbihpLGEpe2ZvcihsZXQgcyBpbiBhKWEuaGFzT3duUHJvcGVydHkocykmJmkuYXR0cihzLGFbc10pfXJldHVybiBvKG4sIl9zZXRUZXh0QXR0cnMiKSxmdW5jdGlvbihpKXtyZXR1cm4gaS50ZXh0UGxhY2VtZW50PT09ImZvIj9yOmkudGV4dFBsYWNlbWVudD09PSJvbGQiP3Q6ZX19KCksZGk9e2RyYXdSZWN0Om1QLGRyYXdUZXh0OkZwLGRyYXdMYWJlbDpQZGUsZHJhd0FjdG9yOllVZSxkcmF3Qm94OlhVZSxkcmF3UG9wdXA6VVVlLGFuY2hvckVsZW1lbnQ6alVlLGRyYXdBY3RpdmF0aW9uOktVZSxkcmF3TG9vcDpRVWUsZHJhd0JhY2tncm91bmRSZWN0OkJkZSxpbnNlcnRBcnJvd0hlYWQ6dEhlLGluc2VydEFycm93RmlsbGVkSGVhZDpySGUsaW5zZXJ0U2VxdWVuY2VOdW1iZXI6bkhlLGluc2VydEFycm93Q3Jvc3NIZWFkOmlIZSxpbnNlcnREYXRhYmFzZUljb246WlVlLGluc2VydENvbXB1dGVySWNvbjpKVWUsaW5zZXJ0Q2xvY2tJY29uOmVIZSxnZXRUZXh0T2JqOkZkZSxnZXROb3RlUmVjdDphSGUsZml4TGlmZUxpbmVIZWlnaHRzOmdQLHNhbml0aXplVXJsOnBQLnNhbml0aXplVXJsfX0pO2FzeW5jIGZ1bmN0aW9uIGxIZSh0LGUpe3J0LmJ1bXBWZXJ0aWNhbFBvcygxMCk7bGV0e3N0YXJ0eDpyLHN0b3B4Om4sbWVzc2FnZTppfT1lLGE9WmUuc3BsaXRCcmVha3MoaSkubGVuZ3RoLHM9eWkoaSksbD1zP2F3YWl0IGhkKGksbWUoKSk6VnQuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMoaSwkcChOZSkpO2lmKCFzKXtsZXQgZD1sLmhlaWdodC9hO2UuaGVpZ2h0Kz1kLHJ0LmJ1bXBWZXJ0aWNhbFBvcyhkKX1sZXQgdSxoPWwuaGVpZ2h0LTEwLGY9bC53aWR0aDtpZihyPT09bil7dT1ydC5nZXRWZXJ0aWNhbFBvcygpK2gsTmUucmlnaHRBbmdsZXN8fChoKz1OZS5ib3hNYXJnaW4sdT1ydC5nZXRWZXJ0aWNhbFBvcygpK2gpLGgrPTMwO2xldCBkPVplLmdldE1heChmLzIsTmUud2lkdGgvMik7cnQuaW5zZXJ0KHItZCxydC5nZXRWZXJ0aWNhbFBvcygpLTEwK2gsbitkLHJ0LmdldFZlcnRpY2FsUG9zKCkrMzAraCl9ZWxzZSBoKz1OZS5ib3hNYXJnaW4sdT1ydC5nZXRWZXJ0aWNhbFBvcygpK2gscnQuaW5zZXJ0KHIsdS0xMCxuLHUpO3JldHVybiBydC5idW1wVmVydGljYWxQb3MoaCksZS5oZWlnaHQrPWgsZS5zdG9weT1lLnN0YXJ0eStlLmhlaWdodCxydC5pbnNlcnQoZS5mcm9tQm91bmRzLGUuc3RhcnR5LGUudG9Cb3VuZHMsZS5zdG9weSksdX1mdW5jdGlvbiBYYyh0LGUscixuLGkpe3J0LmJ1bXBWZXJ0aWNhbFBvcyhyKTtsZXQgYT1uO2lmKGUuaWQmJmUubWVzc2FnZSYmdFtlLmlkXSl7bGV0IHM9dFtlLmlkXS53aWR0aCxsPSRwKE5lKTtlLm1lc3NhZ2U9VnQud3JhcExhYmVsKGBbJHtlLm1lc3NhZ2V9XWAscy0yKk5lLndyYXBQYWRkaW5nLGwpLGUud2lkdGg9cyxlLndyYXA9ITA7bGV0IHU9VnQuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMoZS5tZXNzYWdlLGwpLGg9WmUuZ2V0TWF4KHUuaGVpZ2h0LE5lLmxhYmVsQm94SGVpZ2h0KTthPW4raCxYLmRlYnVnKGAke2h9IC0gJHtlLm1lc3NhZ2V9YCl9aShlKSxydC5idW1wVmVydGljYWxQb3MoYSl9ZnVuY3Rpb24gaEhlKHQsZSxyLG4saSxhLHMpe2Z1bmN0aW9uIGwoaCxmKXtoLng8aS5nZXQodC5mcm9tKS54PyhydC5pbnNlcnQoZS5zdG9weC1mLGUuc3RhcnR5LGUuc3RhcnR4LGUuc3RvcHkraC5oZWlnaHQvMitOZS5ub3RlTWFyZ2luKSxlLnN0b3B4PWUuc3RvcHgrZik6KHJ0Lmluc2VydChlLnN0YXJ0eCxlLnN0YXJ0eSxlLnN0b3B4K2YsZS5zdG9weStoLmhlaWdodC8yK05lLm5vdGVNYXJnaW4pLGUuc3RvcHg9ZS5zdG9weC1mKX1vKGwsInJlY2VpdmVyQWRqdXN0bWVudCIpO2Z1bmN0aW9uIHUoaCxmKXtoLng8aS5nZXQodC50bykueD8ocnQuaW5zZXJ0KGUuc3RhcnR4LWYsZS5zdGFydHksZS5zdG9weCxlLnN0b3B5K2guaGVpZ2h0LzIrTmUubm90ZU1hcmdpbiksZS5zdGFydHg9ZS5zdGFydHgrZik6KHJ0Lmluc2VydChlLnN0b3B4LGUuc3RhcnR5LGUuc3RhcnR4K2YsZS5zdG9weStoLmhlaWdodC8yK05lLm5vdGVNYXJnaW4pLGUuc3RhcnR4PWUuc3RhcnR4LWYpfWlmKG8odSwic2VuZGVyQWRqdXN0bWVudCIpLGEuZ2V0KHQudG8pPT1uKXtsZXQgaD1pLmdldCh0LnRvKSxmPWgudHlwZT09ImFjdG9yIj9TZi8yKzM6aC53aWR0aC8yKzM7bChoLGYpLGguc3RhcnR5PXItaC5oZWlnaHQvMixydC5idW1wVmVydGljYWxQb3MoaC5oZWlnaHQvMil9ZWxzZSBpZihzLmdldCh0LmZyb20pPT1uKXtsZXQgaD1pLmdldCh0LmZyb20pO2lmKE5lLm1pcnJvckFjdG9ycyl7bGV0IGY9aC50eXBlPT0iYWN0b3IiP1NmLzI6aC53aWR0aC8yO3UoaCxmKX1oLnN0b3B5PXItaC5oZWlnaHQvMixydC5idW1wVmVydGljYWxQb3MoaC5oZWlnaHQvMil9ZWxzZSBpZihzLmdldCh0LnRvKT09bil7bGV0IGg9aS5nZXQodC50byk7aWYoTmUubWlycm9yQWN0b3JzKXtsZXQgZj1oLnR5cGU9PSJhY3RvciI/U2YvMiszOmgud2lkdGgvMiszO2woaCxmKX1oLnN0b3B5PXItaC5oZWlnaHQvMixydC5idW1wVmVydGljYWxQb3MoaC5oZWlnaHQvMil9fWFzeW5jIGZ1bmN0aW9uIGRIZSh0LGUscil7bGV0IG49e307Zm9yKGxldCBpIG9mIGUpaWYodC5nZXQoaS50bykmJnQuZ2V0KGkuZnJvbSkpe2xldCBhPXQuZ2V0KGkudG8pO2lmKGkucGxhY2VtZW50PT09ci5kYi5QTEFDRU1FTlQuTEVGVE9GJiYhYS5wcmV2QWN0b3J8fGkucGxhY2VtZW50PT09ci5kYi5QTEFDRU1FTlQuUklHSFRPRiYmIWEubmV4dEFjdG9yKWNvbnRpbnVlO2xldCBzPWkucGxhY2VtZW50IT09dm9pZCAwLGw9IXMsdT1zP08xKE5lKTokcChOZSksaD1pLndyYXA/VnQud3JhcExhYmVsKGkubWVzc2FnZSxOZS53aWR0aC0yKk5lLndyYXBQYWRkaW5nLHUpOmkubWVzc2FnZSxkPSh5aShoKT9hd2FpdCBoZChpLm1lc3NhZ2UsbWUoKSk6VnQuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMoaCx1KSkud2lkdGgrMipOZS53cmFwUGFkZGluZztsJiZpLmZyb209PT1hLm5leHRBY3Rvcj9uW2kudG9dPVplLmdldE1heChuW2kudG9dfHwwLGQpOmwmJmkuZnJvbT09PWEucHJldkFjdG9yP25baS5mcm9tXT1aZS5nZXRNYXgobltpLmZyb21dfHwwLGQpOmwmJmkuZnJvbT09PWkudG8/KG5baS5mcm9tXT1aZS5nZXRNYXgobltpLmZyb21dfHwwLGQvMiksbltpLnRvXT1aZS5nZXRNYXgobltpLnRvXXx8MCxkLzIpKTppLnBsYWNlbWVudD09PXIuZGIuUExBQ0VNRU5ULlJJR0hUT0Y/bltpLmZyb21dPVplLmdldE1heChuW2kuZnJvbV18fDAsZCk6aS5wbGFjZW1lbnQ9PT1yLmRiLlBMQUNFTUVOVC5MRUZUT0Y/blthLnByZXZBY3Rvcl09WmUuZ2V0TWF4KG5bYS5wcmV2QWN0b3JdfHwwLGQpOmkucGxhY2VtZW50PT09ci5kYi5QTEFDRU1FTlQuT1ZFUiYmKGEucHJldkFjdG9yJiYoblthLnByZXZBY3Rvcl09WmUuZ2V0TWF4KG5bYS5wcmV2QWN0b3JdfHwwLGQvMikpLGEubmV4dEFjdG9yJiYobltpLmZyb21dPVplLmdldE1heChuW2kuZnJvbV18fDAsZC8yKSkpfXJldHVybiBYLmRlYnVnKCJtYXhNZXNzYWdlV2lkdGhQZXJBY3RvcjoiLG4pLG59YXN5bmMgZnVuY3Rpb24gbUhlKHQsZSxyKXtsZXQgbj0wO2ZvcihsZXQgYSBvZiB0LmtleXMoKSl7bGV0IHM9dC5nZXQoYSk7cy53cmFwJiYocy5kZXNjcmlwdGlvbj1WdC53cmFwTGFiZWwocy5kZXNjcmlwdGlvbixOZS53aWR0aC0yKk5lLndyYXBQYWRkaW5nLHZQKE5lKSkpO2xldCBsPXlpKHMuZGVzY3JpcHRpb24pP2F3YWl0IGhkKHMuZGVzY3JpcHRpb24sbWUoKSk6VnQuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMocy5kZXNjcmlwdGlvbix2UChOZSkpO3Mud2lkdGg9cy53cmFwP05lLndpZHRoOlplLmdldE1heChOZS53aWR0aCxsLndpZHRoKzIqTmUud3JhcFBhZGRpbmcpLHMuaGVpZ2h0PXMud3JhcD9aZS5nZXRNYXgobC5oZWlnaHQsTmUuaGVpZ2h0KTpOZS5oZWlnaHQsbj1aZS5nZXRNYXgobixzLmhlaWdodCl9Zm9yKGxldCBhIGluIGUpe2xldCBzPXQuZ2V0KGEpO2lmKCFzKWNvbnRpbnVlO2xldCBsPXQuZ2V0KHMubmV4dEFjdG9yKTtpZighbCl7bGV0IGQ9ZVthXStOZS5hY3Rvck1hcmdpbi1zLndpZHRoLzI7cy5tYXJnaW49WmUuZ2V0TWF4KGQsTmUuYWN0b3JNYXJnaW4pO2NvbnRpbnVlfWxldCBoPWVbYV0rTmUuYWN0b3JNYXJnaW4tcy53aWR0aC8yLWwud2lkdGgvMjtzLm1hcmdpbj1aZS5nZXRNYXgoaCxOZS5hY3Rvck1hcmdpbil9bGV0IGk9MDtyZXR1cm4gci5mb3JFYWNoKGE9PntsZXQgcz0kcChOZSksbD1hLmFjdG9yS2V5cy5yZWR1Y2UoKGYsZCk9PmYrPXQuZ2V0KGQpLndpZHRoKyh0LmdldChkKS5tYXJnaW58fDApLDApO2wtPTIqTmUuYm94VGV4dE1hcmdpbixhLndyYXAmJihhLm5hbWU9VnQud3JhcExhYmVsKGEubmFtZSxsLTIqTmUud3JhcFBhZGRpbmcscykpO2xldCB1PVZ0LmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKGEubmFtZSxzKTtpPVplLmdldE1heCh1LmhlaWdodCxpKTtsZXQgaD1aZS5nZXRNYXgobCx1LndpZHRoKzIqTmUud3JhcFBhZGRpbmcpO2lmKGEubWFyZ2luPU5lLmJveFRleHRNYXJnaW4sbDxoKXtsZXQgZj0oaC1sKS8yO2EubWFyZ2luKz1mfX0pLHIuZm9yRWFjaChhPT5hLnRleHRNYXhIZWlnaHQ9aSksWmUuZ2V0TWF4KG4sTmUuaGVpZ2h0KX12YXIgTmUscnQsb0hlLCRwLE8xLHZQLGNIZSx1SGUseFAsR2RlLFZkZSxYUyx6ZGUsZkhlLHBIZSxnSGUseUhlLHZIZSxVZGUsSGRlPU4oKCk9PnsidXNlIHN0cmljdCI7ZnIoKTskZGUoKTt5dCgpO3ByKCk7cHIoKTt0MigpO0d0KCk7ZzAoKTtlcigpO3hpKCk7TmU9e30scnQ9e2RhdGE6e3N0YXJ0eDp2b2lkIDAsc3RvcHg6dm9pZCAwLHN0YXJ0eTp2b2lkIDAsc3RvcHk6dm9pZCAwfSx2ZXJ0aWNhbFBvczowLHNlcXVlbmNlSXRlbXM6W10sYWN0aXZhdGlvbnM6W10sbW9kZWxzOntnZXRIZWlnaHQ6byhmdW5jdGlvbigpe3JldHVybiBNYXRoLm1heC5hcHBseShudWxsLHRoaXMuYWN0b3JzLmxlbmd0aD09PTA/WzBdOnRoaXMuYWN0b3JzLm1hcCh0PT50LmhlaWdodHx8MCkpKyh0aGlzLmxvb3BzLmxlbmd0aD09PTA/MDp0aGlzLmxvb3BzLm1hcCh0PT50LmhlaWdodHx8MCkucmVkdWNlKCh0LGUpPT50K2UpKSsodGhpcy5tZXNzYWdlcy5sZW5ndGg9PT0wPzA6dGhpcy5tZXNzYWdlcy5tYXAodD0+dC5oZWlnaHR8fDApLnJlZHVjZSgodCxlKT0+dCtlKSkrKHRoaXMubm90ZXMubGVuZ3RoPT09MD8wOnRoaXMubm90ZXMubWFwKHQ9PnQuaGVpZ2h0fHwwKS5yZWR1Y2UoKHQsZSk9PnQrZSkpfSwiZ2V0SGVpZ2h0IiksY2xlYXI6byhmdW5jdGlvbigpe3RoaXMuYWN0b3JzPVtdLHRoaXMuYm94ZXM9W10sdGhpcy5sb29wcz1bXSx0aGlzLm1lc3NhZ2VzPVtdLHRoaXMubm90ZXM9W119LCJjbGVhciIpLGFkZEJveDpvKGZ1bmN0aW9uKHQpe3RoaXMuYm94ZXMucHVzaCh0KX0sImFkZEJveCIpLGFkZEFjdG9yOm8oZnVuY3Rpb24odCl7dGhpcy5hY3RvcnMucHVzaCh0KX0sImFkZEFjdG9yIiksYWRkTG9vcDpvKGZ1bmN0aW9uKHQpe3RoaXMubG9vcHMucHVzaCh0KX0sImFkZExvb3AiKSxhZGRNZXNzYWdlOm8oZnVuY3Rpb24odCl7dGhpcy5tZXNzYWdlcy5wdXNoKHQpfSwiYWRkTWVzc2FnZSIpLGFkZE5vdGU6byhmdW5jdGlvbih0KXt0aGlzLm5vdGVzLnB1c2godCl9LCJhZGROb3RlIiksbGFzdEFjdG9yOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hY3RvcnNbdGhpcy5hY3RvcnMubGVuZ3RoLTFdfSwibGFzdEFjdG9yIiksbGFzdExvb3A6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmxvb3BzW3RoaXMubG9vcHMubGVuZ3RoLTFdfSwibGFzdExvb3AiKSxsYXN0TWVzc2FnZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVzc2FnZXNbdGhpcy5tZXNzYWdlcy5sZW5ndGgtMV19LCJsYXN0TWVzc2FnZSIpLGxhc3ROb3RlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3Rlc1t0aGlzLm5vdGVzLmxlbmd0aC0xXX0sImxhc3ROb3RlIiksYWN0b3JzOltdLGJveGVzOltdLGxvb3BzOltdLG1lc3NhZ2VzOltdLG5vdGVzOltdfSxpbml0Om8oZnVuY3Rpb24oKXt0aGlzLnNlcXVlbmNlSXRlbXM9W10sdGhpcy5hY3RpdmF0aW9ucz1bXSx0aGlzLm1vZGVscy5jbGVhcigpLHRoaXMuZGF0YT17c3RhcnR4OnZvaWQgMCxzdG9weDp2b2lkIDAsc3RhcnR5OnZvaWQgMCxzdG9weTp2b2lkIDB9LHRoaXMudmVydGljYWxQb3M9MCxWZGUobWUoKSl9LCJpbml0IiksdXBkYXRlVmFsOm8oZnVuY3Rpb24odCxlLHIsbil7dFtlXT09PXZvaWQgMD90W2VdPXI6dFtlXT1uKHIsdFtlXSl9LCJ1cGRhdGVWYWwiKSx1cGRhdGVCb3VuZHM6byhmdW5jdGlvbih0LGUscixuKXtsZXQgaT10aGlzLGE9MDtmdW5jdGlvbiBzKGwpe3JldHVybiBvKGZ1bmN0aW9uKGgpe2ErKztsZXQgZj1pLnNlcXVlbmNlSXRlbXMubGVuZ3RoLWErMTtpLnVwZGF0ZVZhbChoLCJzdGFydHkiLGUtZipOZS5ib3hNYXJnaW4sTWF0aC5taW4pLGkudXBkYXRlVmFsKGgsInN0b3B5IixuK2YqTmUuYm94TWFyZ2luLE1hdGgubWF4KSxpLnVwZGF0ZVZhbChydC5kYXRhLCJzdGFydHgiLHQtZipOZS5ib3hNYXJnaW4sTWF0aC5taW4pLGkudXBkYXRlVmFsKHJ0LmRhdGEsInN0b3B4IixyK2YqTmUuYm94TWFyZ2luLE1hdGgubWF4KSxsIT09ImFjdGl2YXRpb24iJiYoaS51cGRhdGVWYWwoaCwic3RhcnR4Iix0LWYqTmUuYm94TWFyZ2luLE1hdGgubWluKSxpLnVwZGF0ZVZhbChoLCJzdG9weCIscitmKk5lLmJveE1hcmdpbixNYXRoLm1heCksaS51cGRhdGVWYWwocnQuZGF0YSwic3RhcnR5IixlLWYqTmUuYm94TWFyZ2luLE1hdGgubWluKSxpLnVwZGF0ZVZhbChydC5kYXRhLCJzdG9weSIsbitmKk5lLmJveE1hcmdpbixNYXRoLm1heCkpfSwidXBkYXRlSXRlbUJvdW5kcyIpfW8ocywidXBkYXRlRm4iKSx0aGlzLnNlcXVlbmNlSXRlbXMuZm9yRWFjaChzKCkpLHRoaXMuYWN0aXZhdGlvbnMuZm9yRWFjaChzKCJhY3RpdmF0aW9uIikpfSwidXBkYXRlQm91bmRzIiksaW5zZXJ0Om8oZnVuY3Rpb24odCxlLHIsbil7bGV0IGk9WmUuZ2V0TWluKHQsciksYT1aZS5nZXRNYXgodCxyKSxzPVplLmdldE1pbihlLG4pLGw9WmUuZ2V0TWF4KGUsbik7dGhpcy51cGRhdGVWYWwocnQuZGF0YSwic3RhcnR4IixpLE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbChydC5kYXRhLCJzdGFydHkiLHMsTWF0aC5taW4pLHRoaXMudXBkYXRlVmFsKHJ0LmRhdGEsInN0b3B4IixhLE1hdGgubWF4KSx0aGlzLnVwZGF0ZVZhbChydC5kYXRhLCJzdG9weSIsbCxNYXRoLm1heCksdGhpcy51cGRhdGVCb3VuZHMoaSxzLGEsbCl9LCJpbnNlcnQiKSxuZXdBY3RpdmF0aW9uOm8oZnVuY3Rpb24odCxlLHIpe2xldCBuPXIuZ2V0KHQuZnJvbSksaT1YUyh0LmZyb20pLmxlbmd0aHx8MCxhPW4ueCtuLndpZHRoLzIrKGktMSkqTmUuYWN0aXZhdGlvbldpZHRoLzI7dGhpcy5hY3RpdmF0aW9ucy5wdXNoKHtzdGFydHg6YSxzdGFydHk6dGhpcy52ZXJ0aWNhbFBvcysyLHN0b3B4OmErTmUuYWN0aXZhdGlvbldpZHRoLHN0b3B5OnZvaWQgMCxhY3Rvcjp0LmZyb20sYW5jaG9yZWQ6ZGkuYW5jaG9yRWxlbWVudChlKX0pfSwibmV3QWN0aXZhdGlvbiIpLGVuZEFjdGl2YXRpb246byhmdW5jdGlvbih0KXtsZXQgZT10aGlzLmFjdGl2YXRpb25zLm1hcChmdW5jdGlvbihyKXtyZXR1cm4gci5hY3Rvcn0pLmxhc3RJbmRleE9mKHQuZnJvbSk7cmV0dXJuIHRoaXMuYWN0aXZhdGlvbnMuc3BsaWNlKGUsMSlbMF19LCJlbmRBY3RpdmF0aW9uIiksY3JlYXRlTG9vcDpvKGZ1bmN0aW9uKHQ9e21lc3NhZ2U6dm9pZCAwLHdyYXA6ITEsd2lkdGg6dm9pZCAwfSxlKXtyZXR1cm57c3RhcnR4OnZvaWQgMCxzdGFydHk6dGhpcy52ZXJ0aWNhbFBvcyxzdG9weDp2b2lkIDAsc3RvcHk6dm9pZCAwLHRpdGxlOnQubWVzc2FnZSx3cmFwOnQud3JhcCx3aWR0aDp0LndpZHRoLGhlaWdodDowLGZpbGw6ZX19LCJjcmVhdGVMb29wIiksbmV3TG9vcDpvKGZ1bmN0aW9uKHQ9e21lc3NhZ2U6dm9pZCAwLHdyYXA6ITEsd2lkdGg6dm9pZCAwfSxlKXt0aGlzLnNlcXVlbmNlSXRlbXMucHVzaCh0aGlzLmNyZWF0ZUxvb3AodCxlKSl9LCJuZXdMb29wIiksZW5kTG9vcDpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VxdWVuY2VJdGVtcy5wb3AoKX0sImVuZExvb3AiKSxpc0xvb3BPdmVybGFwOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXF1ZW5jZUl0ZW1zLmxlbmd0aD90aGlzLnNlcXVlbmNlSXRlbXNbdGhpcy5zZXF1ZW5jZUl0ZW1zLmxlbmd0aC0xXS5vdmVybGFwOiExfSwiaXNMb29wT3ZlcmxhcCIpLGFkZFNlY3Rpb25Ub0xvb3A6byhmdW5jdGlvbih0KXtsZXQgZT10aGlzLnNlcXVlbmNlSXRlbXMucG9wKCk7ZS5zZWN0aW9ucz1lLnNlY3Rpb25zfHxbXSxlLnNlY3Rpb25UaXRsZXM9ZS5zZWN0aW9uVGl0bGVzfHxbXSxlLnNlY3Rpb25zLnB1c2goe3k6cnQuZ2V0VmVydGljYWxQb3MoKSxoZWlnaHQ6MH0pLGUuc2VjdGlvblRpdGxlcy5wdXNoKHQpLHRoaXMuc2VxdWVuY2VJdGVtcy5wdXNoKGUpfSwiYWRkU2VjdGlvblRvTG9vcCIpLHNhdmVWZXJ0aWNhbFBvczpvKGZ1bmN0aW9uKCl7dGhpcy5pc0xvb3BPdmVybGFwKCkmJih0aGlzLnNhdmVkVmVydGljYWxQb3M9dGhpcy52ZXJ0aWNhbFBvcyl9LCJzYXZlVmVydGljYWxQb3MiKSxyZXNldFZlcnRpY2FsUG9zOm8oZnVuY3Rpb24oKXt0aGlzLmlzTG9vcE92ZXJsYXAoKSYmKHRoaXMudmVydGljYWxQb3M9dGhpcy5zYXZlZFZlcnRpY2FsUG9zKX0sInJlc2V0VmVydGljYWxQb3MiKSxidW1wVmVydGljYWxQb3M6byhmdW5jdGlvbih0KXt0aGlzLnZlcnRpY2FsUG9zPXRoaXMudmVydGljYWxQb3MrdCx0aGlzLmRhdGEuc3RvcHk9WmUuZ2V0TWF4KHRoaXMuZGF0YS5zdG9weSx0aGlzLnZlcnRpY2FsUG9zKX0sImJ1bXBWZXJ0aWNhbFBvcyIpLGdldFZlcnRpY2FsUG9zOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52ZXJ0aWNhbFBvc30sImdldFZlcnRpY2FsUG9zIiksZ2V0Qm91bmRzOm8oZnVuY3Rpb24oKXtyZXR1cm57Ym91bmRzOnRoaXMuZGF0YSxtb2RlbHM6dGhpcy5tb2RlbHN9fSwiZ2V0Qm91bmRzIil9LG9IZT1vKGFzeW5jIGZ1bmN0aW9uKHQsZSl7cnQuYnVtcFZlcnRpY2FsUG9zKE5lLmJveE1hcmdpbiksZS5oZWlnaHQ9TmUuYm94TWFyZ2luLGUuc3RhcnR5PXJ0LmdldFZlcnRpY2FsUG9zKCk7bGV0IHI9QWwoKTtyLng9ZS5zdGFydHgsci55PWUuc3RhcnR5LHIud2lkdGg9ZS53aWR0aHx8TmUud2lkdGgsci5jbGFzcz0ibm90ZSI7bGV0IG49dC5hcHBlbmQoImciKSxpPWRpLmRyYXdSZWN0KG4sciksYT1lMigpO2EueD1lLnN0YXJ0eCxhLnk9ZS5zdGFydHksYS53aWR0aD1yLndpZHRoLGEuZHk9IjFlbSIsYS50ZXh0PWUubWVzc2FnZSxhLmNsYXNzPSJub3RlVGV4dCIsYS5mb250RmFtaWx5PU5lLm5vdGVGb250RmFtaWx5LGEuZm9udFNpemU9TmUubm90ZUZvbnRTaXplLGEuZm9udFdlaWdodD1OZS5ub3RlRm9udFdlaWdodCxhLmFuY2hvcj1OZS5ub3RlQWxpZ24sYS50ZXh0TWFyZ2luPU5lLm5vdGVNYXJnaW4sYS52YWxpZ249ImNlbnRlciI7bGV0IHM9eWkoYS50ZXh0KT9hd2FpdCBNYihuLGEpOkZwKG4sYSksbD1NYXRoLnJvdW5kKHMubWFwKHU9Pih1Ll9ncm91cHN8fHUpWzBdWzBdLmdldEJCb3goKS5oZWlnaHQpLnJlZHVjZSgodSxoKT0+dStoKSk7aS5hdHRyKCJoZWlnaHQiLGwrMipOZS5ub3RlTWFyZ2luKSxlLmhlaWdodCs9bCsyKk5lLm5vdGVNYXJnaW4scnQuYnVtcFZlcnRpY2FsUG9zKGwrMipOZS5ub3RlTWFyZ2luKSxlLnN0b3B5PWUuc3RhcnR5K2wrMipOZS5ub3RlTWFyZ2luLGUuc3RvcHg9ZS5zdGFydHgrci53aWR0aCxydC5pbnNlcnQoZS5zdGFydHgsZS5zdGFydHksZS5zdG9weCxlLnN0b3B5KSxydC5tb2RlbHMuYWRkTm90ZShlKX0sImRyYXdOb3RlIiksJHA9byh0PT4oe2ZvbnRGYW1pbHk6dC5tZXNzYWdlRm9udEZhbWlseSxmb250U2l6ZTp0Lm1lc3NhZ2VGb250U2l6ZSxmb250V2VpZ2h0OnQubWVzc2FnZUZvbnRXZWlnaHR9KSwibWVzc2FnZUZvbnQiKSxPMT1vKHQ9Pih7Zm9udEZhbWlseTp0Lm5vdGVGb250RmFtaWx5LGZvbnRTaXplOnQubm90ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dC5ub3RlRm9udFdlaWdodH0pLCJub3RlRm9udCIpLHZQPW8odD0+KHtmb250RmFtaWx5OnQuYWN0b3JGb250RmFtaWx5LGZvbnRTaXplOnQuYWN0b3JGb250U2l6ZSxmb250V2VpZ2h0OnQuYWN0b3JGb250V2VpZ2h0fSksImFjdG9yRm9udCIpO28obEhlLCJib3VuZE1lc3NhZ2UiKTtjSGU9byhhc3luYyBmdW5jdGlvbih0LGUscixuKXtsZXR7c3RhcnR4Omksc3RvcHg6YSxzdGFydHk6cyxtZXNzYWdlOmwsdHlwZTp1LHNlcXVlbmNlSW5kZXg6aCxzZXF1ZW5jZVZpc2libGU6Zn09ZSxkPVZ0LmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKGwsJHAoTmUpKSxwPWUyKCk7cC54PWkscC55PXMrMTAscC53aWR0aD1hLWkscC5jbGFzcz0ibWVzc2FnZVRleHQiLHAuZHk9IjFlbSIscC50ZXh0PWwscC5mb250RmFtaWx5PU5lLm1lc3NhZ2VGb250RmFtaWx5LHAuZm9udFNpemU9TmUubWVzc2FnZUZvbnRTaXplLHAuZm9udFdlaWdodD1OZS5tZXNzYWdlRm9udFdlaWdodCxwLmFuY2hvcj1OZS5tZXNzYWdlQWxpZ24scC52YWxpZ249ImNlbnRlciIscC50ZXh0TWFyZ2luPU5lLndyYXBQYWRkaW5nLHAudHNwYW49ITEseWkocC50ZXh0KT9hd2FpdCBNYih0LHAse3N0YXJ0eDppLHN0b3B4OmEsc3RhcnR5OnJ9KTpGcCh0LHApO2xldCBtPWQud2lkdGgsZztpPT09YT9OZS5yaWdodEFuZ2xlcz9nPXQuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsYE0gICR7aX0sJHtyfSBIICR7aStaZS5nZXRNYXgoTmUud2lkdGgvMixtLzIpfSBWICR7cisyNX0gSCAke2l9YCk6Zz10LmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNICIraSsiLCIrcisiIEMgIisoaSs2MCkrIiwiKyhyLTEwKSsiICIrKGkrNjApKyIsIisociszMCkrIiAiK2krIiwiKyhyKzIwKSk6KGc9dC5hcHBlbmQoImxpbmUiKSxnLmF0dHIoIngxIixpKSxnLmF0dHIoInkxIixyKSxnLmF0dHIoIngyIixhKSxnLmF0dHIoInkyIixyKSksdT09PW4uZGIuTElORVRZUEUuRE9UVEVEfHx1PT09bi5kYi5MSU5FVFlQRS5ET1RURURfQ1JPU1N8fHU9PT1uLmRiLkxJTkVUWVBFLkRPVFRFRF9QT0lOVHx8dT09PW4uZGIuTElORVRZUEUuRE9UVEVEX09QRU58fHU9PT1uLmRiLkxJTkVUWVBFLkJJRElSRUNUSU9OQUxfRE9UVEVEPyhnLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMywgMyIpLGcuYXR0cigiY2xhc3MiLCJtZXNzYWdlTGluZTEiKSk6Zy5hdHRyKCJjbGFzcyIsIm1lc3NhZ2VMaW5lMCIpO2xldCB5PSIiO05lLmFycm93TWFya2VyQWJzb2x1dGUmJih5PW11KCEwKSksZy5hdHRyKCJzdHJva2Utd2lkdGgiLDIpLGcuYXR0cigic3Ryb2tlIiwibm9uZSIpLGcuc3R5bGUoImZpbGwiLCJub25lIiksKHU9PT1uLmRiLkxJTkVUWVBFLlNPTElEfHx1PT09bi5kYi5MSU5FVFlQRS5ET1RURUQpJiZnLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIit5KyIjYXJyb3doZWFkKSIpLCh1PT09bi5kYi5MSU5FVFlQRS5CSURJUkVDVElPTkFMX1NPTElEfHx1PT09bi5kYi5MSU5FVFlQRS5CSURJUkVDVElPTkFMX0RPVFRFRCkmJihnLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK3krIiNhcnJvd2hlYWQpIiksZy5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIreSsiI2Fycm93aGVhZCkiKSksKHU9PT1uLmRiLkxJTkVUWVBFLlNPTElEX1BPSU5UfHx1PT09bi5kYi5MSU5FVFlQRS5ET1RURURfUE9JTlQpJiZnLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIit5KyIjZmlsbGVkLWhlYWQpIiksKHU9PT1uLmRiLkxJTkVUWVBFLlNPTElEX0NST1NTfHx1PT09bi5kYi5MSU5FVFlQRS5ET1RURURfQ1JPU1MpJiZnLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIit5KyIjY3Jvc3NoZWFkKSIpLChmfHxOZS5zaG93U2VxdWVuY2VOdW1iZXJzKSYmKGcuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIreSsiI3NlcXVlbmNlbnVtYmVyKSIpLHQuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsaSkuYXR0cigieSIscis0KS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJmb250LXNpemUiLCIxMnB4IikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJjbGFzcyIsInNlcXVlbmNlTnVtYmVyIikudGV4dChoKSl9LCJkcmF3TWVzc2FnZSIpLHVIZT1vKGZ1bmN0aW9uKHQsZSxyLG4saSxhLHMpe2xldCBsPTAsdT0wLGgsZj0wO2ZvcihsZXQgZCBvZiBuKXtsZXQgcD1lLmdldChkKSxtPXAuYm94O2gmJmghPW0mJihzfHxydC5tb2RlbHMuYWRkQm94KGgpLHUrPU5lLmJveE1hcmdpbitoLm1hcmdpbiksbSYmbSE9aCYmKHN8fChtLng9bCt1LG0ueT1pKSx1Kz1tLm1hcmdpbikscC53aWR0aD1wLndpZHRofHxOZS53aWR0aCxwLmhlaWdodD1aZS5nZXRNYXgocC5oZWlnaHR8fE5lLmhlaWdodCxOZS5oZWlnaHQpLHAubWFyZ2luPXAubWFyZ2lufHxOZS5hY3Rvck1hcmdpbixmPVplLmdldE1heChmLHAuaGVpZ2h0KSxyLmdldChwLm5hbWUpJiYodSs9cC53aWR0aC8yKSxwLng9bCt1LHAuc3RhcnR5PXJ0LmdldFZlcnRpY2FsUG9zKCkscnQuaW5zZXJ0KHAueCxpLHAueCtwLndpZHRoLHAuaGVpZ2h0KSxsKz1wLndpZHRoK3UscC5ib3gmJihwLmJveC53aWR0aD1sK20ubWFyZ2luLXAuYm94LngpLHU9cC5tYXJnaW4saD1wLmJveCxydC5tb2RlbHMuYWRkQWN0b3IocCl9aCYmIXMmJnJ0Lm1vZGVscy5hZGRCb3goaCkscnQuYnVtcFZlcnRpY2FsUG9zKGYpfSwiYWRkQWN0b3JSZW5kZXJpbmdEYXRhIikseFA9byhhc3luYyBmdW5jdGlvbih0LGUscixuKXtpZihuKXtsZXQgaT0wO3J0LmJ1bXBWZXJ0aWNhbFBvcyhOZS5ib3hNYXJnaW4qMik7Zm9yKGxldCBhIG9mIHIpe2xldCBzPWUuZ2V0KGEpO3Muc3RvcHl8fChzLnN0b3B5PXJ0LmdldFZlcnRpY2FsUG9zKCkpO2xldCBsPWF3YWl0IGRpLmRyYXdBY3Rvcih0LHMsTmUsITApO2k9WmUuZ2V0TWF4KGksbCl9cnQuYnVtcFZlcnRpY2FsUG9zKGkrTmUuYm94TWFyZ2luKX1lbHNlIGZvcihsZXQgaSBvZiByKXtsZXQgYT1lLmdldChpKTthd2FpdCBkaS5kcmF3QWN0b3IodCxhLE5lLCExKX19LCJkcmF3QWN0b3JzIiksR2RlPW8oZnVuY3Rpb24odCxlLHIsbil7bGV0IGk9MCxhPTA7Zm9yKGxldCBzIG9mIHIpe2xldCBsPWUuZ2V0KHMpLHU9cEhlKGwpLGg9ZGkuZHJhd1BvcHVwKHQsbCx1LE5lLE5lLmZvcmNlTWVudXMsbik7aC5oZWlnaHQ+aSYmKGk9aC5oZWlnaHQpLGgud2lkdGgrbC54PmEmJihhPWgud2lkdGgrbC54KX1yZXR1cm57bWF4SGVpZ2h0OmksbWF4V2lkdGg6YX19LCJkcmF3QWN0b3JzUG9wdXAiKSxWZGU9byhmdW5jdGlvbih0KXtVbihOZSx0KSx0LmZvbnRGYW1pbHkmJihOZS5hY3RvckZvbnRGYW1pbHk9TmUubm90ZUZvbnRGYW1pbHk9TmUubWVzc2FnZUZvbnRGYW1pbHk9dC5mb250RmFtaWx5KSx0LmZvbnRTaXplJiYoTmUuYWN0b3JGb250U2l6ZT1OZS5ub3RlRm9udFNpemU9TmUubWVzc2FnZUZvbnRTaXplPXQuZm9udFNpemUpLHQuZm9udFdlaWdodCYmKE5lLmFjdG9yRm9udFdlaWdodD1OZS5ub3RlRm9udFdlaWdodD1OZS5tZXNzYWdlRm9udFdlaWdodD10LmZvbnRXZWlnaHQpfSwic2V0Q29uZiIpLFhTPW8oZnVuY3Rpb24odCl7cmV0dXJuIHJ0LmFjdGl2YXRpb25zLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS5hY3Rvcj09PXR9KX0sImFjdG9yQWN0aXZhdGlvbnMiKSx6ZGU9byhmdW5jdGlvbih0LGUpe2xldCByPWUuZ2V0KHQpLG49WFModCksaT1uLnJlZHVjZShmdW5jdGlvbihzLGwpe3JldHVybiBaZS5nZXRNaW4ocyxsLnN0YXJ0eCl9LHIueCtyLndpZHRoLzItMSksYT1uLnJlZHVjZShmdW5jdGlvbihzLGwpe3JldHVybiBaZS5nZXRNYXgocyxsLnN0b3B4KX0sci54K3Iud2lkdGgvMisxKTtyZXR1cm5baSxhXX0sImFjdGl2YXRpb25Cb3VuZHMiKTtvKFhjLCJhZGp1c3RMb29wSGVpZ2h0Rm9yV3JhcCIpO28oaEhlLCJhZGp1c3RDcmVhdGVkRGVzdHJveWVkRGF0YSIpO2ZIZT1vKGFzeW5jIGZ1bmN0aW9uKHQsZSxyLG4pe2xldHtzZWN1cml0eUxldmVsOmksc2VxdWVuY2U6YX09bWUoKTtOZT1hO2xldCBzO2k9PT0ic2FuZGJveCImJihzPUdlKCIjaSIrZSkpO2xldCBsPWk9PT0ic2FuZGJveCI/R2Uocy5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KTpHZSgiYm9keSIpLHU9aT09PSJzYW5kYm94Ij9zLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50OmRvY3VtZW50O3J0LmluaXQoKSxYLmRlYnVnKG4uZGIpO2xldCBoPWk9PT0ic2FuZGJveCI/bC5zZWxlY3QoYFtpZD0iJHtlfSJdYCk6R2UoYFtpZD0iJHtlfSJdYCksZj1uLmRiLmdldEFjdG9ycygpLGQ9bi5kYi5nZXRDcmVhdGVkQWN0b3JzKCkscD1uLmRiLmdldERlc3Ryb3llZEFjdG9ycygpLG09bi5kYi5nZXRCb3hlcygpLGc9bi5kYi5nZXRBY3RvcktleXMoKSx5PW4uZGIuZ2V0TWVzc2FnZXMoKSx2PW4uZGIuZ2V0RGlhZ3JhbVRpdGxlKCkseD1uLmRiLmhhc0F0TGVhc3RPbmVCb3goKSxiPW4uZGIuaGFzQXRMZWFzdE9uZUJveFdpdGhUaXRsZSgpLFQ9YXdhaXQgZEhlKGYseSxuKTtpZihOZS5oZWlnaHQ9YXdhaXQgbUhlKGYsVCxtKSxkaS5pbnNlcnRDb21wdXRlckljb24oaCksZGkuaW5zZXJ0RGF0YWJhc2VJY29uKGgpLGRpLmluc2VydENsb2NrSWNvbihoKSx4JiYocnQuYnVtcFZlcnRpY2FsUG9zKE5lLmJveE1hcmdpbiksYiYmcnQuYnVtcFZlcnRpY2FsUG9zKG1bMF0udGV4dE1heEhlaWdodCkpLE5lLmhpZGVVbnVzZWRQYXJ0aWNpcGFudHM9PT0hMCl7bGV0IEI9bmV3IFNldDt5LmZvckVhY2goRj0+e0IuYWRkKEYuZnJvbSksQi5hZGQoRi50byl9KSxnPWcuZmlsdGVyKEY9PkIuaGFzKEYpKX11SGUoaCxmLGQsZywwLHksITEpO2xldCBTPWF3YWl0IHZIZSh5LGYsVCxuKTtkaS5pbnNlcnRBcnJvd0hlYWQoaCksZGkuaW5zZXJ0QXJyb3dDcm9zc0hlYWQoaCksZGkuaW5zZXJ0QXJyb3dGaWxsZWRIZWFkKGgpLGRpLmluc2VydFNlcXVlbmNlTnVtYmVyKGgpO2Z1bmN0aW9uIHcoQixGKXtsZXQgej1ydC5lbmRBY3RpdmF0aW9uKEIpO3ouc3RhcnR5KzE4PkYmJih6LnN0YXJ0eT1GLTYsRis9MTIpLGRpLmRyYXdBY3RpdmF0aW9uKGgseixGLE5lLFhTKEIuZnJvbSkubGVuZ3RoKSxydC5pbnNlcnQoei5zdGFydHgsRi0xMCx6LnN0b3B4LEYpfW8odywiYWN0aXZlRW5kIik7bGV0IEU9MSxfPTEsQz1bXSxEPVtdLE89MDtmb3IobGV0IEIgb2YgeSl7bGV0IEYseiwkO3N3aXRjaChCLnR5cGUpe2Nhc2Ugbi5kYi5MSU5FVFlQRS5OT1RFOnJ0LnJlc2V0VmVydGljYWxQb3MoKSx6PUIubm90ZU1vZGVsLGF3YWl0IG9IZShoLHopO2JyZWFrO2Nhc2Ugbi5kYi5MSU5FVFlQRS5BQ1RJVkVfU1RBUlQ6cnQubmV3QWN0aXZhdGlvbihCLGgsZik7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLkFDVElWRV9FTkQ6dyhCLHJ0LmdldFZlcnRpY2FsUG9zKCkpO2JyZWFrO2Nhc2Ugbi5kYi5MSU5FVFlQRS5MT09QX1NUQVJUOlhjKFMsQixOZS5ib3hNYXJnaW4sTmUuYm94TWFyZ2luK05lLmJveFRleHRNYXJnaW4sVT0+cnQubmV3TG9vcChVKSk7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLkxPT1BfRU5EOkY9cnQuZW5kTG9vcCgpLGF3YWl0IGRpLmRyYXdMb29wKGgsRiwibG9vcCIsTmUpLHJ0LmJ1bXBWZXJ0aWNhbFBvcyhGLnN0b3B5LXJ0LmdldFZlcnRpY2FsUG9zKCkpLHJ0Lm1vZGVscy5hZGRMb29wKEYpO2JyZWFrO2Nhc2Ugbi5kYi5MSU5FVFlQRS5SRUNUX1NUQVJUOlhjKFMsQixOZS5ib3hNYXJnaW4sTmUuYm94TWFyZ2luLFU9PnJ0Lm5ld0xvb3Aodm9pZCAwLFUubWVzc2FnZSkpO2JyZWFrO2Nhc2Ugbi5kYi5MSU5FVFlQRS5SRUNUX0VORDpGPXJ0LmVuZExvb3AoKSxELnB1c2goRikscnQubW9kZWxzLmFkZExvb3AoRikscnQuYnVtcFZlcnRpY2FsUG9zKEYuc3RvcHktcnQuZ2V0VmVydGljYWxQb3MoKSk7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLk9QVF9TVEFSVDpYYyhTLEIsTmUuYm94TWFyZ2luLE5lLmJveE1hcmdpbitOZS5ib3hUZXh0TWFyZ2luLFU9PnJ0Lm5ld0xvb3AoVSkpO2JyZWFrO2Nhc2Ugbi5kYi5MSU5FVFlQRS5PUFRfRU5EOkY9cnQuZW5kTG9vcCgpLGF3YWl0IGRpLmRyYXdMb29wKGgsRiwib3B0IixOZSkscnQuYnVtcFZlcnRpY2FsUG9zKEYuc3RvcHktcnQuZ2V0VmVydGljYWxQb3MoKSkscnQubW9kZWxzLmFkZExvb3AoRik7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLkFMVF9TVEFSVDpYYyhTLEIsTmUuYm94TWFyZ2luLE5lLmJveE1hcmdpbitOZS5ib3hUZXh0TWFyZ2luLFU9PnJ0Lm5ld0xvb3AoVSkpO2JyZWFrO2Nhc2Ugbi5kYi5MSU5FVFlQRS5BTFRfRUxTRTpYYyhTLEIsTmUuYm94TWFyZ2luK05lLmJveFRleHRNYXJnaW4sTmUuYm94TWFyZ2luLFU9PnJ0LmFkZFNlY3Rpb25Ub0xvb3AoVSkpO2JyZWFrO2Nhc2Ugbi5kYi5MSU5FVFlQRS5BTFRfRU5EOkY9cnQuZW5kTG9vcCgpLGF3YWl0IGRpLmRyYXdMb29wKGgsRiwiYWx0IixOZSkscnQuYnVtcFZlcnRpY2FsUG9zKEYuc3RvcHktcnQuZ2V0VmVydGljYWxQb3MoKSkscnQubW9kZWxzLmFkZExvb3AoRik7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLlBBUl9TVEFSVDpjYXNlIG4uZGIuTElORVRZUEUuUEFSX09WRVJfU1RBUlQ6WGMoUyxCLE5lLmJveE1hcmdpbixOZS5ib3hNYXJnaW4rTmUuYm94VGV4dE1hcmdpbixVPT5ydC5uZXdMb29wKFUpKSxydC5zYXZlVmVydGljYWxQb3MoKTticmVhaztjYXNlIG4uZGIuTElORVRZUEUuUEFSX0FORDpYYyhTLEIsTmUuYm94TWFyZ2luK05lLmJveFRleHRNYXJnaW4sTmUuYm94TWFyZ2luLFU9PnJ0LmFkZFNlY3Rpb25Ub0xvb3AoVSkpO2JyZWFrO2Nhc2Ugbi5kYi5MSU5FVFlQRS5QQVJfRU5EOkY9cnQuZW5kTG9vcCgpLGF3YWl0IGRpLmRyYXdMb29wKGgsRiwicGFyIixOZSkscnQuYnVtcFZlcnRpY2FsUG9zKEYuc3RvcHktcnQuZ2V0VmVydGljYWxQb3MoKSkscnQubW9kZWxzLmFkZExvb3AoRik7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLkFVVE9OVU1CRVI6RT1CLm1lc3NhZ2Uuc3RhcnR8fEUsXz1CLm1lc3NhZ2Uuc3RlcHx8XyxCLm1lc3NhZ2UudmlzaWJsZT9uLmRiLmVuYWJsZVNlcXVlbmNlTnVtYmVycygpOm4uZGIuZGlzYWJsZVNlcXVlbmNlTnVtYmVycygpO2JyZWFrO2Nhc2Ugbi5kYi5MSU5FVFlQRS5DUklUSUNBTF9TVEFSVDpYYyhTLEIsTmUuYm94TWFyZ2luLE5lLmJveE1hcmdpbitOZS5ib3hUZXh0TWFyZ2luLFU9PnJ0Lm5ld0xvb3AoVSkpO2JyZWFrO2Nhc2Ugbi5kYi5MSU5FVFlQRS5DUklUSUNBTF9PUFRJT046WGMoUyxCLE5lLmJveE1hcmdpbitOZS5ib3hUZXh0TWFyZ2luLE5lLmJveE1hcmdpbixVPT5ydC5hZGRTZWN0aW9uVG9Mb29wKFUpKTticmVhaztjYXNlIG4uZGIuTElORVRZUEUuQ1JJVElDQUxfRU5EOkY9cnQuZW5kTG9vcCgpLGF3YWl0IGRpLmRyYXdMb29wKGgsRiwiY3JpdGljYWwiLE5lKSxydC5idW1wVmVydGljYWxQb3MoRi5zdG9weS1ydC5nZXRWZXJ0aWNhbFBvcygpKSxydC5tb2RlbHMuYWRkTG9vcChGKTticmVhaztjYXNlIG4uZGIuTElORVRZUEUuQlJFQUtfU1RBUlQ6WGMoUyxCLE5lLmJveE1hcmdpbixOZS5ib3hNYXJnaW4rTmUuYm94VGV4dE1hcmdpbixVPT5ydC5uZXdMb29wKFUpKTticmVhaztjYXNlIG4uZGIuTElORVRZUEUuQlJFQUtfRU5EOkY9cnQuZW5kTG9vcCgpLGF3YWl0IGRpLmRyYXdMb29wKGgsRiwiYnJlYWsiLE5lKSxydC5idW1wVmVydGljYWxQb3MoRi5zdG9weS1ydC5nZXRWZXJ0aWNhbFBvcygpKSxydC5tb2RlbHMuYWRkTG9vcChGKTticmVhaztkZWZhdWx0OnRyeXskPUIubXNnTW9kZWwsJC5zdGFydHk9cnQuZ2V0VmVydGljYWxQb3MoKSwkLnNlcXVlbmNlSW5kZXg9RSwkLnNlcXVlbmNlVmlzaWJsZT1uLmRiLnNob3dTZXF1ZW5jZU51bWJlcnMoKTtsZXQgVT1hd2FpdCBsSGUoaCwkKTtoSGUoQiwkLFUsTyxmLGQscCksQy5wdXNoKHttZXNzYWdlTW9kZWw6JCxsaW5lU3RhcnRZOlV9KSxydC5tb2RlbHMuYWRkTWVzc2FnZSgkKX1jYXRjaChVKXtYLmVycm9yKCJlcnJvciB3aGlsZSBkcmF3aW5nIG1lc3NhZ2UiLFUpfX1bbi5kYi5MSU5FVFlQRS5TT0xJRF9PUEVOLG4uZGIuTElORVRZUEUuRE9UVEVEX09QRU4sbi5kYi5MSU5FVFlQRS5TT0xJRCxuLmRiLkxJTkVUWVBFLkRPVFRFRCxuLmRiLkxJTkVUWVBFLlNPTElEX0NST1NTLG4uZGIuTElORVRZUEUuRE9UVEVEX0NST1NTLG4uZGIuTElORVRZUEUuU09MSURfUE9JTlQsbi5kYi5MSU5FVFlQRS5ET1RURURfUE9JTlQsbi5kYi5MSU5FVFlQRS5CSURJUkVDVElPTkFMX1NPTElELG4uZGIuTElORVRZUEUuQklESVJFQ1RJT05BTF9ET1RURURdLmluY2x1ZGVzKEIudHlwZSkmJihFPUUrXyksTysrfVguZGVidWcoImNyZWF0ZWRBY3RvcnMiLGQpLFguZGVidWcoImRlc3Ryb3llZEFjdG9ycyIscCksYXdhaXQgeFAoaCxmLGcsITEpO2ZvcihsZXQgQiBvZiBDKWF3YWl0IGNIZShoLEIubWVzc2FnZU1vZGVsLEIubGluZVN0YXJ0WSxuKTtOZS5taXJyb3JBY3RvcnMmJmF3YWl0IHhQKGgsZixnLCEwKSxELmZvckVhY2goQj0+ZGkuZHJhd0JhY2tncm91bmRSZWN0KGgsQikpLGdQKGgsZixnLE5lKTtmb3IobGV0IEIgb2YgcnQubW9kZWxzLmJveGVzKUIuaGVpZ2h0PXJ0LmdldFZlcnRpY2FsUG9zKCktQi55LHJ0Lmluc2VydChCLngsQi55LEIueCtCLndpZHRoLEIuaGVpZ2h0KSxCLnN0YXJ0eD1CLngsQi5zdGFydHk9Qi55LEIuc3RvcHg9Qi5zdGFydHgrQi53aWR0aCxCLnN0b3B5PUIuc3RhcnR5K0IuaGVpZ2h0LEIuc3Ryb2tlPSJyZ2IoMCwwLDAsIDAuNSkiLGRpLmRyYXdCb3goaCxCLE5lKTt4JiZydC5idW1wVmVydGljYWxQb3MoTmUuYm94TWFyZ2luKTtsZXQgUj1HZGUoaCxmLGcsdSkse2JvdW5kczprfT1ydC5nZXRCb3VuZHMoKTtrLnN0YXJ0eD09PXZvaWQgMCYmKGsuc3RhcnR4PTApLGsuc3RhcnR5PT09dm9pZCAwJiYoay5zdGFydHk9MCksay5zdG9weD09PXZvaWQgMCYmKGsuc3RvcHg9MCksay5zdG9weT09PXZvaWQgMCYmKGsuc3RvcHk9MCk7bGV0IEw9ay5zdG9weS1rLnN0YXJ0eTtMPFIubWF4SGVpZ2h0JiYoTD1SLm1heEhlaWdodCk7bGV0IEE9TCsyKk5lLmRpYWdyYW1NYXJnaW5ZO05lLm1pcnJvckFjdG9ycyYmKEE9QS1OZS5ib3hNYXJnaW4rTmUuYm90dG9tTWFyZ2luQWRqKTtsZXQgST1rLnN0b3B4LWsuc3RhcnR4O0k8Ui5tYXhXaWR0aCYmKEk9Ui5tYXhXaWR0aCk7bGV0IE09SSsyKk5lLmRpYWdyYW1NYXJnaW5YO3YmJmguYXBwZW5kKCJ0ZXh0IikudGV4dCh2KS5hdHRyKCJ4Iiwoay5zdG9weC1rLnN0YXJ0eCkvMi0yKk5lLmRpYWdyYW1NYXJnaW5YKS5hdHRyKCJ5IiwtMjUpLGZuKGgsQSxNLE5lLnVzZU1heFdpZHRoKTtsZXQgUD12PzQwOjA7aC5hdHRyKCJ2aWV3Qm94IixrLnN0YXJ0eC1OZS5kaWFncmFtTWFyZ2luWCsiIC0iKyhOZS5kaWFncmFtTWFyZ2luWStQKSsiICIrTSsiICIrKEErUCkpLFguZGVidWcoIm1vZGVsczoiLHJ0Lm1vZGVscyl9LCJkcmF3Iik7byhkSGUsImdldE1heE1lc3NhZ2VXaWR0aFBlckFjdG9yIik7cEhlPW8oZnVuY3Rpb24odCl7bGV0IGU9MCxyPXZQKE5lKTtmb3IobGV0IG4gaW4gdC5saW5rcyl7bGV0IGE9VnQuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMobixyKS53aWR0aCsyKk5lLndyYXBQYWRkaW5nKzIqTmUuYm94TWFyZ2luO2U8YSYmKGU9YSl9cmV0dXJuIGV9LCJnZXRSZXF1aXJlZFBvcHVwV2lkdGgiKTtvKG1IZSwiY2FsY3VsYXRlQWN0b3JNYXJnaW5zIik7Z0hlPW8oYXN5bmMgZnVuY3Rpb24odCxlLHIpe2xldCBuPWUuZ2V0KHQuZnJvbSksaT1lLmdldCh0LnRvKSxhPW4ueCxzPWkueCxsPXQud3JhcCYmdC5tZXNzYWdlLHU9eWkodC5tZXNzYWdlKT9hd2FpdCBoZCh0Lm1lc3NhZ2UsbWUoKSk6VnQuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMobD9WdC53cmFwTGFiZWwodC5tZXNzYWdlLE5lLndpZHRoLE8xKE5lKSk6dC5tZXNzYWdlLE8xKE5lKSksaD17d2lkdGg6bD9OZS53aWR0aDpaZS5nZXRNYXgoTmUud2lkdGgsdS53aWR0aCsyKk5lLm5vdGVNYXJnaW4pLGhlaWdodDowLHN0YXJ0eDpuLngsc3RvcHg6MCxzdGFydHk6MCxzdG9weTowLG1lc3NhZ2U6dC5tZXNzYWdlfTtyZXR1cm4gdC5wbGFjZW1lbnQ9PT1yLmRiLlBMQUNFTUVOVC5SSUdIVE9GPyhoLndpZHRoPWw/WmUuZ2V0TWF4KE5lLndpZHRoLHUud2lkdGgpOlplLmdldE1heChuLndpZHRoLzIraS53aWR0aC8yLHUud2lkdGgrMipOZS5ub3RlTWFyZ2luKSxoLnN0YXJ0eD1hKyhuLndpZHRoK05lLmFjdG9yTWFyZ2luKS8yKTp0LnBsYWNlbWVudD09PXIuZGIuUExBQ0VNRU5ULkxFRlRPRj8oaC53aWR0aD1sP1plLmdldE1heChOZS53aWR0aCx1LndpZHRoKzIqTmUubm90ZU1hcmdpbik6WmUuZ2V0TWF4KG4ud2lkdGgvMitpLndpZHRoLzIsdS53aWR0aCsyKk5lLm5vdGVNYXJnaW4pLGguc3RhcnR4PWEtaC53aWR0aCsobi53aWR0aC1OZS5hY3Rvck1hcmdpbikvMik6dC50bz09PXQuZnJvbT8odT1WdC5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhsP1Z0LndyYXBMYWJlbCh0Lm1lc3NhZ2UsWmUuZ2V0TWF4KE5lLndpZHRoLG4ud2lkdGgpLE8xKE5lKSk6dC5tZXNzYWdlLE8xKE5lKSksaC53aWR0aD1sP1plLmdldE1heChOZS53aWR0aCxuLndpZHRoKTpaZS5nZXRNYXgobi53aWR0aCxOZS53aWR0aCx1LndpZHRoKzIqTmUubm90ZU1hcmdpbiksaC5zdGFydHg9YSsobi53aWR0aC1oLndpZHRoKS8yKTooaC53aWR0aD1NYXRoLmFicyhhK24ud2lkdGgvMi0ocytpLndpZHRoLzIpKStOZS5hY3Rvck1hcmdpbixoLnN0YXJ0eD1hPHM/YStuLndpZHRoLzItTmUuYWN0b3JNYXJnaW4vMjpzK2kud2lkdGgvMi1OZS5hY3Rvck1hcmdpbi8yKSxsJiYoaC5tZXNzYWdlPVZ0LndyYXBMYWJlbCh0Lm1lc3NhZ2UsaC53aWR0aC0yKk5lLndyYXBQYWRkaW5nLE8xKE5lKSkpLFguZGVidWcoYE5NOlske2guc3RhcnR4fSwke2guc3RvcHh9LCR7aC5zdGFydHl9LCR7aC5zdG9weX06JHtoLndpZHRofSwke2guaGVpZ2h0fT0ke3QubWVzc2FnZX1dYCksaH0sImJ1aWxkTm90ZU1vZGVsIikseUhlPW8oZnVuY3Rpb24odCxlLHIpe2lmKCFbci5kYi5MSU5FVFlQRS5TT0xJRF9PUEVOLHIuZGIuTElORVRZUEUuRE9UVEVEX09QRU4sci5kYi5MSU5FVFlQRS5TT0xJRCxyLmRiLkxJTkVUWVBFLkRPVFRFRCxyLmRiLkxJTkVUWVBFLlNPTElEX0NST1NTLHIuZGIuTElORVRZUEUuRE9UVEVEX0NST1NTLHIuZGIuTElORVRZUEUuU09MSURfUE9JTlQsci5kYi5MSU5FVFlQRS5ET1RURURfUE9JTlQsci5kYi5MSU5FVFlQRS5CSURJUkVDVElPTkFMX1NPTElELHIuZGIuTElORVRZUEUuQklESVJFQ1RJT05BTF9ET1RURURdLmluY2x1ZGVzKHQudHlwZSkpcmV0dXJue307bGV0W24saV09emRlKHQuZnJvbSxlKSxbYSxzXT16ZGUodC50byxlKSxsPW48PWEsdT1sP2k6bixoPWw/YTpzLGY9TWF0aC5hYnMoYS1zKT4yLGQ9byh5PT5sPy15OnksImFkanVzdFZhbHVlIik7dC5mcm9tPT09dC50bz9oPXU6KHQuYWN0aXZhdGUmJiFmJiYoaCs9ZChOZS5hY3RpdmF0aW9uV2lkdGgvMi0xKSksW3IuZGIuTElORVRZUEUuU09MSURfT1BFTixyLmRiLkxJTkVUWVBFLkRPVFRFRF9PUEVOXS5pbmNsdWRlcyh0LnR5cGUpfHwoaCs9ZCgzKSksW3IuZGIuTElORVRZUEUuQklESVJFQ1RJT05BTF9TT0xJRCxyLmRiLkxJTkVUWVBFLkJJRElSRUNUSU9OQUxfRE9UVEVEXS5pbmNsdWRlcyh0LnR5cGUpJiYodS09ZCgzKSkpO2xldCBwPVtuLGksYSxzXSxtPU1hdGguYWJzKHUtaCk7dC53cmFwJiZ0Lm1lc3NhZ2UmJih0Lm1lc3NhZ2U9VnQud3JhcExhYmVsKHQubWVzc2FnZSxaZS5nZXRNYXgobSsyKk5lLndyYXBQYWRkaW5nLE5lLndpZHRoKSwkcChOZSkpKTtsZXQgZz1WdC5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyh0Lm1lc3NhZ2UsJHAoTmUpKTtyZXR1cm57d2lkdGg6WmUuZ2V0TWF4KHQud3JhcD8wOmcud2lkdGgrMipOZS53cmFwUGFkZGluZyxtKzIqTmUud3JhcFBhZGRpbmcsTmUud2lkdGgpLGhlaWdodDowLHN0YXJ0eDp1LHN0b3B4Omgsc3RhcnR5OjAsc3RvcHk6MCxtZXNzYWdlOnQubWVzc2FnZSx0eXBlOnQudHlwZSx3cmFwOnQud3JhcCxmcm9tQm91bmRzOk1hdGgubWluLmFwcGx5KG51bGwscCksdG9Cb3VuZHM6TWF0aC5tYXguYXBwbHkobnVsbCxwKX19LCJidWlsZE1lc3NhZ2VNb2RlbCIpLHZIZT1vKGFzeW5jIGZ1bmN0aW9uKHQsZSxyLG4pe2xldCBpPXt9LGE9W10scyxsLHU7Zm9yKGxldCBoIG9mIHQpe3N3aXRjaChoLnR5cGUpe2Nhc2Ugbi5kYi5MSU5FVFlQRS5MT09QX1NUQVJUOmNhc2Ugbi5kYi5MSU5FVFlQRS5BTFRfU1RBUlQ6Y2FzZSBuLmRiLkxJTkVUWVBFLk9QVF9TVEFSVDpjYXNlIG4uZGIuTElORVRZUEUuUEFSX1NUQVJUOmNhc2Ugbi5kYi5MSU5FVFlQRS5QQVJfT1ZFUl9TVEFSVDpjYXNlIG4uZGIuTElORVRZUEUuQ1JJVElDQUxfU1RBUlQ6Y2FzZSBuLmRiLkxJTkVUWVBFLkJSRUFLX1NUQVJUOmEucHVzaCh7aWQ6aC5pZCxtc2c6aC5tZXNzYWdlLGZyb206TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsdG86TnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIsd2lkdGg6MH0pO2JyZWFrO2Nhc2Ugbi5kYi5MSU5FVFlQRS5BTFRfRUxTRTpjYXNlIG4uZGIuTElORVRZUEUuUEFSX0FORDpjYXNlIG4uZGIuTElORVRZUEUuQ1JJVElDQUxfT1BUSU9OOmgubWVzc2FnZSYmKHM9YS5wb3AoKSxpW3MuaWRdPXMsaVtoLmlkXT1zLGEucHVzaChzKSk7YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLkxPT1BfRU5EOmNhc2Ugbi5kYi5MSU5FVFlQRS5BTFRfRU5EOmNhc2Ugbi5kYi5MSU5FVFlQRS5PUFRfRU5EOmNhc2Ugbi5kYi5MSU5FVFlQRS5QQVJfRU5EOmNhc2Ugbi5kYi5MSU5FVFlQRS5DUklUSUNBTF9FTkQ6Y2FzZSBuLmRiLkxJTkVUWVBFLkJSRUFLX0VORDpzPWEucG9wKCksaVtzLmlkXT1zO2JyZWFrO2Nhc2Ugbi5kYi5MSU5FVFlQRS5BQ1RJVkVfU1RBUlQ6e2xldCBkPWUuZ2V0KGguZnJvbT9oLmZyb206aC50by5hY3RvcikscD1YUyhoLmZyb20/aC5mcm9tOmgudG8uYWN0b3IpLmxlbmd0aCxtPWQueCtkLndpZHRoLzIrKHAtMSkqTmUuYWN0aXZhdGlvbldpZHRoLzIsZz17c3RhcnR4Om0sc3RvcHg6bStOZS5hY3RpdmF0aW9uV2lkdGgsYWN0b3I6aC5mcm9tLGVuYWJsZWQ6ITB9O3J0LmFjdGl2YXRpb25zLnB1c2goZyl9YnJlYWs7Y2FzZSBuLmRiLkxJTkVUWVBFLkFDVElWRV9FTkQ6e2xldCBkPXJ0LmFjdGl2YXRpb25zLm1hcChwPT5wLmFjdG9yKS5sYXN0SW5kZXhPZihoLmZyb20pO3J0LmFjdGl2YXRpb25zLnNwbGljZShkLDEpLnNwbGljZSgwLDEpfWJyZWFrfWgucGxhY2VtZW50IT09dm9pZCAwPyhsPWF3YWl0IGdIZShoLGUsbiksaC5ub3RlTW9kZWw9bCxhLmZvckVhY2goZD0+e3M9ZCxzLmZyb209WmUuZ2V0TWluKHMuZnJvbSxsLnN0YXJ0eCkscy50bz1aZS5nZXRNYXgocy50byxsLnN0YXJ0eCtsLndpZHRoKSxzLndpZHRoPVplLmdldE1heChzLndpZHRoLE1hdGguYWJzKHMuZnJvbS1zLnRvKSktTmUubGFiZWxCb3hXaWR0aH0pKToodT15SGUoaCxlLG4pLGgubXNnTW9kZWw9dSx1LnN0YXJ0eCYmdS5zdG9weCYmYS5sZW5ndGg+MCYmYS5mb3JFYWNoKGQ9PntpZihzPWQsdS5zdGFydHg9PT11LnN0b3B4KXtsZXQgcD1lLmdldChoLmZyb20pLG09ZS5nZXQoaC50byk7cy5mcm9tPVplLmdldE1pbihwLngtdS53aWR0aC8yLHAueC1wLndpZHRoLzIscy5mcm9tKSxzLnRvPVplLmdldE1heChtLngrdS53aWR0aC8yLG0ueCtwLndpZHRoLzIscy50bykscy53aWR0aD1aZS5nZXRNYXgocy53aWR0aCxNYXRoLmFicyhzLnRvLXMuZnJvbSkpLU5lLmxhYmVsQm94V2lkdGh9ZWxzZSBzLmZyb209WmUuZ2V0TWluKHUuc3RhcnR4LHMuZnJvbSkscy50bz1aZS5nZXRNYXgodS5zdG9weCxzLnRvKSxzLndpZHRoPVplLmdldE1heChzLndpZHRoLHUud2lkdGgpLU5lLmxhYmVsQm94V2lkdGh9KSl9cmV0dXJuIHJ0LmFjdGl2YXRpb25zPVtdLFguZGVidWcoIkxvb3AgdHlwZSB3aWR0aHM6IixpKSxpfSwiY2FsY3VsYXRlTG9vcEJvdW5kcyIpLFVkZT17Ym91bmRzOnJ0LGRyYXdBY3RvcnM6eFAsZHJhd0FjdG9yc1BvcHVwOkdkZSxzZXRDb25mOlZkZSxkcmF3OmZIZX19KTt2YXIgV2RlPXt9O3VyKFdkZSx7ZGlhZ3JhbTooKT0+eEhlfSk7dmFyIHhIZSxxZGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtEZGUoKTtMZGUoKTtOZGUoKTtHdCgpO0hkZSgpO3hIZT17cGFyc2VyOl9kZSxnZXQgZGIoKXtyZXR1cm4gbmV3IFlTfSxyZW5kZXJlcjpVZGUsc3R5bGVzOlJkZSxpbml0Om8odD0+e3Quc2VxdWVuY2V8fCh0LnNlcXVlbmNlPXt9KSx0LndyYXAmJih0LnNlcXVlbmNlLndyYXA9dC53cmFwLG52KHtzZXF1ZW5jZTp7d3JhcDp0LndyYXB9fSkpfSwiaW5pdCIpfX0pO3ZhciBiUCxqUyxUUD1OKCgpPT57InVzZSBzdHJpY3QiO2JQPWZ1bmN0aW9uKCl7dmFyIHQ9byhmdW5jdGlvbihJZSx4ZSxxLGRlKXtmb3IocT1xfHx7fSxkZT1JZS5sZW5ndGg7ZGUtLTtxW0llW2RlXV09eGUpO3JldHVybiBxfSwibyIpLGU9WzEsMThdLHI9WzEsMTldLG49WzEsMjBdLGk9WzEsNDFdLGE9WzEsNDJdLHM9WzEsMjZdLGw9WzEsMjRdLHU9WzEsMjVdLGg9WzEsMzJdLGY9WzEsMzNdLGQ9WzEsMzRdLHA9WzEsNDVdLG09WzEsMzVdLGc9WzEsMzZdLHk9WzEsMzddLHY9WzEsMzhdLHg9WzEsMjddLGI9WzEsMjhdLFQ9WzEsMjldLFM9WzEsMzBdLHc9WzEsMzFdLEU9WzEsNDRdLF89WzEsNDZdLEM9WzEsNDNdLEQ9WzEsNDddLE89WzEsOV0sUj1bMSw4LDldLGs9WzEsNThdLEw9WzEsNTldLEE9WzEsNjBdLEk9WzEsNjFdLE09WzEsNjJdLFA9WzEsNjNdLEI9WzEsNjRdLEY9WzEsOCw5LDQxXSx6PVsxLDc2XSwkPVsxLDgsOSwxMiwxMywyMiwzOSw0MSw0NCw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Nyw3OV0sVT1bMSw4LDksMTIsMTMsMTcsMjAsMjIsMzksNDEsNDQsNDgsNTgsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzcsNzksODQsOTksMTAxLDEwMl0sSz1bMTMsNTgsODQsOTksMTAxLDEwMl0sZWU9WzEzLDU4LDcxLDcyLDg0LDk5LDEwMSwxMDJdLFk9WzEzLDU4LDY2LDY3LDY4LDY5LDcwLDg0LDk5LDEwMSwxMDJdLGNlPVsxLDk4XSxaPVsxLDExNV0sdWU9WzEsMTA3XSxRPVsxLDExM10saj1bMSwxMDhdLG5lPVsxLDEwOV0sdGU9WzEsMTEwXSxoZT1bMSwxMTFdLGxlPVsxLDExMl0sSj1bMSwxMTRdLFNlPVsyMiw1OCw1OSw4MCw4NCw4NSw4Niw4Nyw4OCw4OV0sc2U9WzEsOCw5LDM5LDQxLDQ0XSxhZT1bMSw4LDksMjJdLE9lPVsxLDE0M10seWU9WzEsOCw5LDU5XSxCZT1bMSw4LDksMjIsNTgsNTksODAsODQsODUsODYsODcsODgsODldLEhlPXt0cmFjZTpvKGZ1bmN0aW9uKCl7fSwidHJhY2UiKSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLG1lcm1haWREb2M6NCxzdGF0ZW1lbnRzOjUsZ3JhcGhDb25maWc6NixDTEFTU19ESUFHUkFNOjcsTkVXTElORTo4LEVPRjo5LHN0YXRlbWVudDoxMCxjbGFzc0xhYmVsOjExLFNRUzoxMixTVFI6MTMsU1FFOjE0LG5hbWVzcGFjZU5hbWU6MTUsYWxwaGFOdW1Ub2tlbjoxNixET1Q6MTcsY2xhc3NOYW1lOjE4LGNsYXNzTGl0ZXJhbE5hbWU6MTksR0VORVJJQ1RZUEU6MjAscmVsYXRpb25TdGF0ZW1lbnQ6MjEsTEFCRUw6MjIsbmFtZXNwYWNlU3RhdGVtZW50OjIzLGNsYXNzU3RhdGVtZW50OjI0LG1lbWJlclN0YXRlbWVudDoyNSxhbm5vdGF0aW9uU3RhdGVtZW50OjI2LGNsaWNrU3RhdGVtZW50OjI3LHN0eWxlU3RhdGVtZW50OjI4LGNzc0NsYXNzU3RhdGVtZW50OjI5LG5vdGVTdGF0ZW1lbnQ6MzAsY2xhc3NEZWZTdGF0ZW1lbnQ6MzEsZGlyZWN0aW9uOjMyLGFjY190aXRsZTozMyxhY2NfdGl0bGVfdmFsdWU6MzQsYWNjX2Rlc2NyOjM1LGFjY19kZXNjcl92YWx1ZTozNixhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjM3LG5hbWVzcGFjZUlkZW50aWZpZXI6MzgsU1RSVUNUX1NUQVJUOjM5LGNsYXNzU3RhdGVtZW50czo0MCxTVFJVQ1RfU1RPUDo0MSxOQU1FU1BBQ0U6NDIsY2xhc3NJZGVudGlmaWVyOjQzLFNUWUxFX1NFUEFSQVRPUjo0NCxtZW1iZXJzOjQ1LENMQVNTOjQ2LEFOTk9UQVRJT05fU1RBUlQ6NDcsQU5OT1RBVElPTl9FTkQ6NDgsTUVNQkVSOjQ5LFNFUEFSQVRPUjo1MCxyZWxhdGlvbjo1MSxOT1RFX0ZPUjo1Mixub3RlVGV4dDo1MyxOT1RFOjU0LENMQVNTREVGOjU1LGNsYXNzTGlzdDo1NixzdHlsZXNPcHQ6NTcsQUxQSEE6NTgsQ09NTUE6NTksZGlyZWN0aW9uX3RiOjYwLGRpcmVjdGlvbl9idDo2MSxkaXJlY3Rpb25fcmw6NjIsZGlyZWN0aW9uX2xyOjYzLHJlbGF0aW9uVHlwZTo2NCxsaW5lVHlwZTo2NSxBR0dSRUdBVElPTjo2NixFWFRFTlNJT046NjcsQ09NUE9TSVRJT046NjgsREVQRU5ERU5DWTo2OSxMT0xMSVBPUDo3MCxMSU5FOjcxLERPVFRFRF9MSU5FOjcyLENBTExCQUNLOjczLExJTks6NzQsTElOS19UQVJHRVQ6NzUsQ0xJQ0s6NzYsQ0FMTEJBQ0tfTkFNRTo3NyxDQUxMQkFDS19BUkdTOjc4LEhSRUY6NzksU1RZTEU6ODAsQ1NTQ0xBU1M6ODEsc3R5bGU6ODIsc3R5bGVDb21wb25lbnQ6ODMsTlVNOjg0LENPTE9OOjg1LFVOSVQ6ODYsU1BBQ0U6ODcsQlJLVDo4OCxQQ1Q6ODksY29tbWVudFRva2VuOjkwLHRleHRUb2tlbjo5MSxncmFwaENvZGVUb2tlbnM6OTIsdGV4dE5vVGFnc1Rva2VuOjkzLFRBR1NUQVJUOjk0LFRBR0VORDo5NSwiPT0iOjk2LCItLSI6OTcsREVGQVVMVDo5OCxNSU5VUzo5OSxrZXl3b3JkczoxMDAsVU5JQ09ERV9URVhUOjEwMSxCUVVPVEVfU1RSOjEwMiwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNzoiQ0xBU1NfRElBR1JBTSIsODoiTkVXTElORSIsOToiRU9GIiwxMjoiU1FTIiwxMzoiU1RSIiwxNDoiU1FFIiwxNzoiRE9UIiwyMDoiR0VORVJJQ1RZUEUiLDIyOiJMQUJFTCIsMzM6ImFjY190aXRsZSIsMzQ6ImFjY190aXRsZV92YWx1ZSIsMzU6ImFjY19kZXNjciIsMzY6ImFjY19kZXNjcl92YWx1ZSIsMzc6ImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiLDM5OiJTVFJVQ1RfU1RBUlQiLDQxOiJTVFJVQ1RfU1RPUCIsNDI6Ik5BTUVTUEFDRSIsNDQ6IlNUWUxFX1NFUEFSQVRPUiIsNDY6IkNMQVNTIiw0NzoiQU5OT1RBVElPTl9TVEFSVCIsNDg6IkFOTk9UQVRJT05fRU5EIiw0OToiTUVNQkVSIiw1MDoiU0VQQVJBVE9SIiw1MjoiTk9URV9GT1IiLDU0OiJOT1RFIiw1NToiQ0xBU1NERUYiLDU4OiJBTFBIQSIsNTk6IkNPTU1BIiw2MDoiZGlyZWN0aW9uX3RiIiw2MToiZGlyZWN0aW9uX2J0Iiw2MjoiZGlyZWN0aW9uX3JsIiw2MzoiZGlyZWN0aW9uX2xyIiw2NjoiQUdHUkVHQVRJT04iLDY3OiJFWFRFTlNJT04iLDY4OiJDT01QT1NJVElPTiIsNjk6IkRFUEVOREVOQ1kiLDcwOiJMT0xMSVBPUCIsNzE6IkxJTkUiLDcyOiJET1RURURfTElORSIsNzM6IkNBTExCQUNLIiw3NDoiTElOSyIsNzU6IkxJTktfVEFSR0VUIiw3NjoiQ0xJQ0siLDc3OiJDQUxMQkFDS19OQU1FIiw3ODoiQ0FMTEJBQ0tfQVJHUyIsNzk6IkhSRUYiLDgwOiJTVFlMRSIsODE6IkNTU0NMQVNTIiw4NDoiTlVNIiw4NToiQ09MT04iLDg2OiJVTklUIiw4NzoiU1BBQ0UiLDg4OiJCUktUIiw4OToiUENUIiw5MjoiZ3JhcGhDb2RlVG9rZW5zIiw5NDoiVEFHU1RBUlQiLDk1OiJUQUdFTkQiLDk2OiI9PSIsOTc6Ii0tIiw5ODoiREVGQVVMVCIsOTk6Ik1JTlVTIiwxMDA6ImtleXdvcmRzIiwxMDE6IlVOSUNPREVfVEVYVCIsMTAyOiJCUVVPVEVfU1RSIn0scHJvZHVjdGlvbnNfOlswLFszLDFdLFszLDFdLFs0LDFdLFs2LDRdLFs1LDFdLFs1LDJdLFs1LDNdLFsxMSwzXSxbMTUsMV0sWzE1LDNdLFsxNSwyXSxbMTgsMV0sWzE4LDNdLFsxOCwxXSxbMTgsMl0sWzE4LDJdLFsxOCwyXSxbMTAsMV0sWzEwLDJdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMl0sWzEwLDJdLFsxMCwxXSxbMjMsNF0sWzIzLDVdLFszOCwyXSxbNDAsMV0sWzQwLDJdLFs0MCwzXSxbMjQsMV0sWzI0LDNdLFsyNCw0XSxbMjQsNl0sWzQzLDJdLFs0MywzXSxbMjYsNF0sWzQ1LDFdLFs0NSwyXSxbMjUsMV0sWzI1LDJdLFsyNSwxXSxbMjUsMV0sWzIxLDNdLFsyMSw0XSxbMjEsNF0sWzIxLDVdLFszMCwzXSxbMzAsMl0sWzMxLDNdLFs1NiwxXSxbNTYsM10sWzMyLDFdLFszMiwxXSxbMzIsMV0sWzMyLDFdLFs1MSwzXSxbNTEsMl0sWzUxLDJdLFs1MSwxXSxbNjQsMV0sWzY0LDFdLFs2NCwxXSxbNjQsMV0sWzY0LDFdLFs2NSwxXSxbNjUsMV0sWzI3LDNdLFsyNyw0XSxbMjcsM10sWzI3LDRdLFsyNyw0XSxbMjcsNV0sWzI3LDNdLFsyNyw0XSxbMjcsNF0sWzI3LDVdLFsyNyw0XSxbMjcsNV0sWzI3LDVdLFsyNyw2XSxbMjgsM10sWzI5LDNdLFs1NywxXSxbNTcsM10sWzgyLDFdLFs4MiwyXSxbODMsMV0sWzgzLDFdLFs4MywxXSxbODMsMV0sWzgzLDFdLFs4MywxXSxbODMsMV0sWzgzLDFdLFs4MywxXSxbOTAsMV0sWzkwLDFdLFs5MSwxXSxbOTEsMV0sWzkxLDFdLFs5MSwxXSxbOTEsMV0sWzkxLDFdLFs5MSwxXSxbOTMsMV0sWzkzLDFdLFs5MywxXSxbOTMsMV0sWzE2LDFdLFsxNiwxXSxbMTYsMV0sWzE2LDFdLFsxOSwxXSxbNTMsMV1dLHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbih4ZSxxLGRlLGllLG9lLFYsVGUpe3ZhciBXPVYubGVuZ3RoLTE7c3dpdGNoKG9lKXtjYXNlIDg6dGhpcy4kPVZbVy0xXTticmVhaztjYXNlIDk6Y2FzZSAxMjpjYXNlIDE0OnRoaXMuJD1WW1ddO2JyZWFrO2Nhc2UgMTA6Y2FzZSAxMzp0aGlzLiQ9VltXLTJdKyIuIitWW1ddO2JyZWFrO2Nhc2UgMTE6Y2FzZSAxNTp0aGlzLiQ9VltXLTFdK1ZbV107YnJlYWs7Y2FzZSAxNjpjYXNlIDE3OnRoaXMuJD1WW1ctMV0rIn4iK1ZbV10rIn4iO2JyZWFrO2Nhc2UgMTg6aWUuYWRkUmVsYXRpb24oVltXXSk7YnJlYWs7Y2FzZSAxOTpWW1ctMV0udGl0bGU9aWUuY2xlYW51cExhYmVsKFZbV10pLGllLmFkZFJlbGF0aW9uKFZbVy0xXSk7YnJlYWs7Y2FzZSAzMDp0aGlzLiQ9VltXXS50cmltKCksaWUuc2V0QWNjVGl0bGUodGhpcy4kKTticmVhaztjYXNlIDMxOmNhc2UgMzI6dGhpcy4kPVZbV10udHJpbSgpLGllLnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAzMzppZS5hZGRDbGFzc2VzVG9OYW1lc3BhY2UoVltXLTNdLFZbVy0xXSk7YnJlYWs7Y2FzZSAzNDppZS5hZGRDbGFzc2VzVG9OYW1lc3BhY2UoVltXLTRdLFZbVy0xXSk7YnJlYWs7Y2FzZSAzNTp0aGlzLiQ9VltXXSxpZS5hZGROYW1lc3BhY2UoVltXXSk7YnJlYWs7Y2FzZSAzNjp0aGlzLiQ9W1ZbV11dO2JyZWFrO2Nhc2UgMzc6dGhpcy4kPVtWW1ctMV1dO2JyZWFrO2Nhc2UgMzg6VltXXS51bnNoaWZ0KFZbVy0yXSksdGhpcy4kPVZbV107YnJlYWs7Y2FzZSA0MDppZS5zZXRDc3NDbGFzcyhWW1ctMl0sVltXXSk7YnJlYWs7Y2FzZSA0MTppZS5hZGRNZW1iZXJzKFZbVy0zXSxWW1ctMV0pO2JyZWFrO2Nhc2UgNDI6aWUuc2V0Q3NzQ2xhc3MoVltXLTVdLFZbVy0zXSksaWUuYWRkTWVtYmVycyhWW1ctNV0sVltXLTFdKTticmVhaztjYXNlIDQzOnRoaXMuJD1WW1ddLGllLmFkZENsYXNzKFZbV10pO2JyZWFrO2Nhc2UgNDQ6dGhpcy4kPVZbVy0xXSxpZS5hZGRDbGFzcyhWW1ctMV0pLGllLnNldENsYXNzTGFiZWwoVltXLTFdLFZbV10pO2JyZWFrO2Nhc2UgNDU6aWUuYWRkQW5ub3RhdGlvbihWW1ddLFZbVy0yXSk7YnJlYWs7Y2FzZSA0NjpjYXNlIDU5OnRoaXMuJD1bVltXXV07YnJlYWs7Y2FzZSA0NzpWW1ddLnB1c2goVltXLTFdKSx0aGlzLiQ9VltXXTticmVhaztjYXNlIDQ4OmJyZWFrO2Nhc2UgNDk6aWUuYWRkTWVtYmVyKFZbVy0xXSxpZS5jbGVhbnVwTGFiZWwoVltXXSkpO2JyZWFrO2Nhc2UgNTA6YnJlYWs7Y2FzZSA1MTpicmVhaztjYXNlIDUyOnRoaXMuJD17aWQxOlZbVy0yXSxpZDI6VltXXSxyZWxhdGlvbjpWW1ctMV0scmVsYXRpb25UaXRsZTE6Im5vbmUiLHJlbGF0aW9uVGl0bGUyOiJub25lIn07YnJlYWs7Y2FzZSA1Mzp0aGlzLiQ9e2lkMTpWW1ctM10saWQyOlZbV10scmVsYXRpb246VltXLTFdLHJlbGF0aW9uVGl0bGUxOlZbVy0yXSxyZWxhdGlvblRpdGxlMjoibm9uZSJ9O2JyZWFrO2Nhc2UgNTQ6dGhpcy4kPXtpZDE6VltXLTNdLGlkMjpWW1ddLHJlbGF0aW9uOlZbVy0yXSxyZWxhdGlvblRpdGxlMToibm9uZSIscmVsYXRpb25UaXRsZTI6VltXLTFdfTticmVhaztjYXNlIDU1OnRoaXMuJD17aWQxOlZbVy00XSxpZDI6VltXXSxyZWxhdGlvbjpWW1ctMl0scmVsYXRpb25UaXRsZTE6VltXLTNdLHJlbGF0aW9uVGl0bGUyOlZbVy0xXX07YnJlYWs7Y2FzZSA1NjppZS5hZGROb3RlKFZbV10sVltXLTFdKTticmVhaztjYXNlIDU3OmllLmFkZE5vdGUoVltXXSk7YnJlYWs7Y2FzZSA1ODp0aGlzLiQ9VltXLTJdLGllLmRlZmluZUNsYXNzKFZbVy0xXSxWW1ddKTticmVhaztjYXNlIDYwOnRoaXMuJD1WW1ctMl0uY29uY2F0KFtWW1ddXSk7YnJlYWs7Y2FzZSA2MTppZS5zZXREaXJlY3Rpb24oIlRCIik7YnJlYWs7Y2FzZSA2MjppZS5zZXREaXJlY3Rpb24oIkJUIik7YnJlYWs7Y2FzZSA2MzppZS5zZXREaXJlY3Rpb24oIlJMIik7YnJlYWs7Y2FzZSA2NDppZS5zZXREaXJlY3Rpb24oIkxSIik7YnJlYWs7Y2FzZSA2NTp0aGlzLiQ9e3R5cGUxOlZbVy0yXSx0eXBlMjpWW1ddLGxpbmVUeXBlOlZbVy0xXX07YnJlYWs7Y2FzZSA2Njp0aGlzLiQ9e3R5cGUxOiJub25lIix0eXBlMjpWW1ddLGxpbmVUeXBlOlZbVy0xXX07YnJlYWs7Y2FzZSA2Nzp0aGlzLiQ9e3R5cGUxOlZbVy0xXSx0eXBlMjoibm9uZSIsbGluZVR5cGU6VltXXX07YnJlYWs7Y2FzZSA2ODp0aGlzLiQ9e3R5cGUxOiJub25lIix0eXBlMjoibm9uZSIsbGluZVR5cGU6VltXXX07YnJlYWs7Y2FzZSA2OTp0aGlzLiQ9aWUucmVsYXRpb25UeXBlLkFHR1JFR0FUSU9OO2JyZWFrO2Nhc2UgNzA6dGhpcy4kPWllLnJlbGF0aW9uVHlwZS5FWFRFTlNJT047YnJlYWs7Y2FzZSA3MTp0aGlzLiQ9aWUucmVsYXRpb25UeXBlLkNPTVBPU0lUSU9OO2JyZWFrO2Nhc2UgNzI6dGhpcy4kPWllLnJlbGF0aW9uVHlwZS5ERVBFTkRFTkNZO2JyZWFrO2Nhc2UgNzM6dGhpcy4kPWllLnJlbGF0aW9uVHlwZS5MT0xMSVBPUDticmVhaztjYXNlIDc0OnRoaXMuJD1pZS5saW5lVHlwZS5MSU5FO2JyZWFrO2Nhc2UgNzU6dGhpcy4kPWllLmxpbmVUeXBlLkRPVFRFRF9MSU5FO2JyZWFrO2Nhc2UgNzY6Y2FzZSA4Mjp0aGlzLiQ9VltXLTJdLGllLnNldENsaWNrRXZlbnQoVltXLTFdLFZbV10pO2JyZWFrO2Nhc2UgNzc6Y2FzZSA4Mzp0aGlzLiQ9VltXLTNdLGllLnNldENsaWNrRXZlbnQoVltXLTJdLFZbVy0xXSksaWUuc2V0VG9vbHRpcChWW1ctMl0sVltXXSk7YnJlYWs7Y2FzZSA3ODp0aGlzLiQ9VltXLTJdLGllLnNldExpbmsoVltXLTFdLFZbV10pO2JyZWFrO2Nhc2UgNzk6dGhpcy4kPVZbVy0zXSxpZS5zZXRMaW5rKFZbVy0yXSxWW1ctMV0sVltXXSk7YnJlYWs7Y2FzZSA4MDp0aGlzLiQ9VltXLTNdLGllLnNldExpbmsoVltXLTJdLFZbVy0xXSksaWUuc2V0VG9vbHRpcChWW1ctMl0sVltXXSk7YnJlYWs7Y2FzZSA4MTp0aGlzLiQ9VltXLTRdLGllLnNldExpbmsoVltXLTNdLFZbVy0yXSxWW1ddKSxpZS5zZXRUb29sdGlwKFZbVy0zXSxWW1ctMV0pO2JyZWFrO2Nhc2UgODQ6dGhpcy4kPVZbVy0zXSxpZS5zZXRDbGlja0V2ZW50KFZbVy0yXSxWW1ctMV0sVltXXSk7YnJlYWs7Y2FzZSA4NTp0aGlzLiQ9VltXLTRdLGllLnNldENsaWNrRXZlbnQoVltXLTNdLFZbVy0yXSxWW1ctMV0pLGllLnNldFRvb2x0aXAoVltXLTNdLFZbV10pO2JyZWFrO2Nhc2UgODY6dGhpcy4kPVZbVy0zXSxpZS5zZXRMaW5rKFZbVy0yXSxWW1ddKTticmVhaztjYXNlIDg3OnRoaXMuJD1WW1ctNF0saWUuc2V0TGluayhWW1ctM10sVltXLTFdLFZbV10pO2JyZWFrO2Nhc2UgODg6dGhpcy4kPVZbVy00XSxpZS5zZXRMaW5rKFZbVy0zXSxWW1ctMV0pLGllLnNldFRvb2x0aXAoVltXLTNdLFZbV10pO2JyZWFrO2Nhc2UgODk6dGhpcy4kPVZbVy01XSxpZS5zZXRMaW5rKFZbVy00XSxWW1ctMl0sVltXXSksaWUuc2V0VG9vbHRpcChWW1ctNF0sVltXLTFdKTticmVhaztjYXNlIDkwOnRoaXMuJD1WW1ctMl0saWUuc2V0Q3NzU3R5bGUoVltXLTFdLFZbV10pO2JyZWFrO2Nhc2UgOTE6aWUuc2V0Q3NzQ2xhc3MoVltXLTFdLFZbV10pO2JyZWFrO2Nhc2UgOTI6dGhpcy4kPVtWW1ddXTticmVhaztjYXNlIDkzOlZbVy0yXS5wdXNoKFZbV10pLHRoaXMuJD1WW1ctMl07YnJlYWs7Y2FzZSA5NTp0aGlzLiQ9VltXLTFdK1ZbV107YnJlYWt9fSwiYW5vbnltb3VzIiksdGFibGU6W3szOjEsNDoyLDU6Myw2OjQsNzpbMSw2XSwxMDo1LDE2OjM5LDE4OjIxLDE5OjQwLDIxOjcsMjM6OCwyNDo5LDI1OjEwLDI2OjExLDI3OjEyLDI4OjEzLDI5OjE0LDMwOjE1LDMxOjE2LDMyOjE3LDMzOmUsMzU6ciwzNzpuLDM4OjIyLDQyOmksNDM6MjMsNDY6YSw0NzpzLDQ5OmwsNTA6dSw1MjpoLDU0OmYsNTU6ZCw1ODpwLDYwOm0sNjE6Zyw2Mjp5LDYzOnYsNzM6eCw3NDpiLDc2OlQsODA6Uyw4MTp3LDg0OkUsOTk6XywxMDE6QywxMDI6RH0sezE6WzNdfSx7MTpbMiwxXX0sezE6WzIsMl19LHsxOlsyLDNdfSx0KE8sWzIsNV0sezg6WzEsNDhdfSksezg6WzEsNDldfSx0KFIsWzIsMThdLHsyMjpbMSw1MF19KSx0KFIsWzIsMjBdKSx0KFIsWzIsMjFdKSx0KFIsWzIsMjJdKSx0KFIsWzIsMjNdKSx0KFIsWzIsMjRdKSx0KFIsWzIsMjVdKSx0KFIsWzIsMjZdKSx0KFIsWzIsMjddKSx0KFIsWzIsMjhdKSx0KFIsWzIsMjldKSx7MzQ6WzEsNTFdfSx7MzY6WzEsNTJdfSx0KFIsWzIsMzJdKSx0KFIsWzIsNDhdLHs1MTo1Myw2NDo1Niw2NTo1NywxMzpbMSw1NF0sMjI6WzEsNTVdLDY2OmssNjc6TCw2ODpBLDY5OkksNzA6TSw3MTpQLDcyOkJ9KSx7Mzk6WzEsNjVdfSx0KEYsWzIsMzldLHszOTpbMSw2N10sNDQ6WzEsNjZdfSksdChSLFsyLDUwXSksdChSLFsyLDUxXSksezE2OjY4LDU4OnAsODQ6RSw5OTpfLDEwMTpDfSx7MTY6MzksMTg6NjksMTk6NDAsNTg6cCw4NDpFLDk5Ol8sMTAxOkMsMTAyOkR9LHsxNjozOSwxODo3MCwxOTo0MCw1ODpwLDg0OkUsOTk6XywxMDE6QywxMDI6RH0sezE2OjM5LDE4OjcxLDE5OjQwLDU4OnAsODQ6RSw5OTpfLDEwMTpDLDEwMjpEfSx7NTg6WzEsNzJdfSx7MTM6WzEsNzNdfSx7MTY6MzksMTg6NzQsMTk6NDAsNTg6cCw4NDpFLDk5Ol8sMTAxOkMsMTAyOkR9LHsxMzp6LDUzOjc1fSx7NTY6NzcsNTg6WzEsNzhdfSx0KFIsWzIsNjFdKSx0KFIsWzIsNjJdKSx0KFIsWzIsNjNdKSx0KFIsWzIsNjRdKSx0KCQsWzIsMTJdLHsxNjozOSwxOTo0MCwxODo4MCwxNzpbMSw3OV0sMjA6WzEsODFdLDU4OnAsODQ6RSw5OTpfLDEwMTpDLDEwMjpEfSksdCgkLFsyLDE0XSx7MjA6WzEsODJdfSksezE1OjgzLDE2Ojg0LDU4OnAsODQ6RSw5OTpfLDEwMTpDfSx7MTY6MzksMTg6ODUsMTk6NDAsNTg6cCw4NDpFLDk5Ol8sMTAxOkMsMTAyOkR9LHQoVSxbMiwxMThdKSx0KFUsWzIsMTE5XSksdChVLFsyLDEyMF0pLHQoVSxbMiwxMjFdKSx0KFsxLDgsOSwxMiwxMywyMCwyMiwzOSw0MSw0NCw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Nyw3OV0sWzIsMTIyXSksdChPLFsyLDZdLHsxMDo1LDIxOjcsMjM6OCwyNDo5LDI1OjEwLDI2OjExLDI3OjEyLDI4OjEzLDI5OjE0LDMwOjE1LDMxOjE2LDMyOjE3LDE4OjIxLDM4OjIyLDQzOjIzLDE2OjM5LDE5OjQwLDU6ODYsMzM6ZSwzNTpyLDM3Om4sNDI6aSw0NjphLDQ3OnMsNDk6bCw1MDp1LDUyOmgsNTQ6Ziw1NTpkLDU4OnAsNjA6bSw2MTpnLDYyOnksNjM6diw3Mzp4LDc0OmIsNzY6VCw4MDpTLDgxOncsODQ6RSw5OTpfLDEwMTpDLDEwMjpEfSksezU6ODcsMTA6NSwxNjozOSwxODoyMSwxOTo0MCwyMTo3LDIzOjgsMjQ6OSwyNToxMCwyNjoxMSwyNzoxMiwyODoxMywyOToxNCwzMDoxNSwzMToxNiwzMjoxNywzMzplLDM1OnIsMzc6biwzODoyMiw0MjppLDQzOjIzLDQ2OmEsNDc6cyw0OTpsLDUwOnUsNTI6aCw1NDpmLDU1OmQsNTg6cCw2MDptLDYxOmcsNjI6eSw2Mzp2LDczOngsNzQ6Yiw3NjpULDgwOlMsODE6dyw4NDpFLDk5Ol8sMTAxOkMsMTAyOkR9LHQoUixbMiwxOV0pLHQoUixbMiwzMF0pLHQoUixbMiwzMV0pLHsxMzpbMSw4OV0sMTY6MzksMTg6ODgsMTk6NDAsNTg6cCw4NDpFLDk5Ol8sMTAxOkMsMTAyOkR9LHs1MTo5MCw2NDo1Niw2NTo1Nyw2NjprLDY3OkwsNjg6QSw2OTpJLDcwOk0sNzE6UCw3MjpCfSx0KFIsWzIsNDldKSx7NjU6OTEsNzE6UCw3MjpCfSx0KEssWzIsNjhdLHs2NDo5Miw2NjprLDY3OkwsNjg6QSw2OTpJLDcwOk19KSx0KGVlLFsyLDY5XSksdChlZSxbMiw3MF0pLHQoZWUsWzIsNzFdKSx0KGVlLFsyLDcyXSksdChlZSxbMiw3M10pLHQoWSxbMiw3NF0pLHQoWSxbMiw3NV0pLHs4OlsxLDk0XSwyNDo5NSw0MDo5Myw0MzoyMyw0NjphfSx7MTY6OTYsNTg6cCw4NDpFLDk5Ol8sMTAxOkN9LHs0NTo5Nyw0OTpjZX0sezQ4OlsxLDk5XX0sezEzOlsxLDEwMF19LHsxMzpbMSwxMDFdfSx7Nzc6WzEsMTAyXSw3OTpbMSwxMDNdfSx7MjI6Wiw1NzoxMDQsNTg6dWUsODA6USw4MjoxMDUsODM6MTA2LDg0OmosODU6bmUsODY6dGUsODc6aGUsODg6bGUsODk6Sn0sezU4OlsxLDExNl19LHsxMzp6LDUzOjExN30sdChSLFsyLDU3XSksdChSLFsyLDEyM10pLHsyMjpaLDU3OjExOCw1ODp1ZSw1OTpbMSwxMTldLDgwOlEsODI6MTA1LDgzOjEwNiw4NDpqLDg1Om5lLDg2OnRlLDg3OmhlLDg4OmxlLDg5Okp9LHQoU2UsWzIsNTldKSx7MTY6MzksMTg6MTIwLDE5OjQwLDU4OnAsODQ6RSw5OTpfLDEwMTpDLDEwMjpEfSx0KCQsWzIsMTVdKSx0KCQsWzIsMTZdKSx0KCQsWzIsMTddKSx7Mzk6WzIsMzVdfSx7MTU6MTIyLDE2Ojg0LDE3OlsxLDEyMV0sMzk6WzIsOV0sNTg6cCw4NDpFLDk5Ol8sMTAxOkN9LHQoc2UsWzIsNDNdLHsxMToxMjMsMTI6WzEsMTI0XX0pLHQoTyxbMiw3XSksezk6WzEsMTI1XX0sdChhZSxbMiw1Ml0pLHsxNjozOSwxODoxMjYsMTk6NDAsNTg6cCw4NDpFLDk5Ol8sMTAxOkMsMTAyOkR9LHsxMzpbMSwxMjhdLDE2OjM5LDE4OjEyNywxOTo0MCw1ODpwLDg0OkUsOTk6XywxMDE6QywxMDI6RH0sdChLLFsyLDY3XSx7NjQ6MTI5LDY2OmssNjc6TCw2ODpBLDY5OkksNzA6TX0pLHQoSyxbMiw2Nl0pLHs0MTpbMSwxMzBdfSx7MjQ6OTUsNDA6MTMxLDQzOjIzLDQ2OmF9LHs4OlsxLDEzMl0sNDE6WzIsMzZdfSx0KEYsWzIsNDBdLHszOTpbMSwxMzNdfSksezQxOlsxLDEzNF19LHs0MTpbMiw0Nl0sNDU6MTM1LDQ5OmNlfSx7MTY6MzksMTg6MTM2LDE5OjQwLDU4OnAsODQ6RSw5OTpfLDEwMTpDLDEwMjpEfSx0KFIsWzIsNzZdLHsxMzpbMSwxMzddfSksdChSLFsyLDc4XSx7MTM6WzEsMTM5XSw3NTpbMSwxMzhdfSksdChSLFsyLDgyXSx7MTM6WzEsMTQwXSw3ODpbMSwxNDFdfSksezEzOlsxLDE0Ml19LHQoUixbMiw5MF0sezU5Ok9lfSksdCh5ZSxbMiw5Ml0sezgzOjE0NCwyMjpaLDU4OnVlLDgwOlEsODQ6aiw4NTpuZSw4Njp0ZSw4NzpoZSw4ODpsZSw4OTpKfSksdChCZSxbMiw5NF0pLHQoQmUsWzIsOTZdKSx0KEJlLFsyLDk3XSksdChCZSxbMiw5OF0pLHQoQmUsWzIsOTldKSx0KEJlLFsyLDEwMF0pLHQoQmUsWzIsMTAxXSksdChCZSxbMiwxMDJdKSx0KEJlLFsyLDEwM10pLHQoQmUsWzIsMTA0XSksdChSLFsyLDkxXSksdChSLFsyLDU2XSksdChSLFsyLDU4XSx7NTk6T2V9KSx7NTg6WzEsMTQ1XX0sdCgkLFsyLDEzXSksezE1OjE0NiwxNjo4NCw1ODpwLDg0OkUsOTk6XywxMDE6Q30sezM5OlsyLDExXX0sdChzZSxbMiw0NF0pLHsxMzpbMSwxNDddfSx7MTpbMiw0XX0sdChhZSxbMiw1NF0pLHQoYWUsWzIsNTNdKSx7MTY6MzksMTg6MTQ4LDE5OjQwLDU4OnAsODQ6RSw5OTpfLDEwMTpDLDEwMjpEfSx0KEssWzIsNjVdKSx0KFIsWzIsMzNdKSx7NDE6WzEsMTQ5XX0sezI0Ojk1LDQwOjE1MCw0MTpbMiwzN10sNDM6MjMsNDY6YX0sezQ1OjE1MSw0OTpjZX0sdChGLFsyLDQxXSksezQxOlsyLDQ3XX0sdChSLFsyLDQ1XSksdChSLFsyLDc3XSksdChSLFsyLDc5XSksdChSLFsyLDgwXSx7NzU6WzEsMTUyXX0pLHQoUixbMiw4M10pLHQoUixbMiw4NF0sezEzOlsxLDE1M119KSx0KFIsWzIsODZdLHsxMzpbMSwxNTVdLDc1OlsxLDE1NF19KSx7MjI6Wiw1ODp1ZSw4MDpRLDgyOjE1Niw4MzoxMDYsODQ6aiw4NTpuZSw4Njp0ZSw4NzpoZSw4ODpsZSw4OTpKfSx0KEJlLFsyLDk1XSksdChTZSxbMiw2MF0pLHszOTpbMiwxMF19LHsxNDpbMSwxNTddfSx0KGFlLFsyLDU1XSksdChSLFsyLDM0XSksezQxOlsyLDM4XX0sezQxOlsxLDE1OF19LHQoUixbMiw4MV0pLHQoUixbMiw4NV0pLHQoUixbMiw4N10pLHQoUixbMiw4OF0sezc1OlsxLDE1OV19KSx0KHllLFsyLDkzXSx7ODM6MTQ0LDIyOlosNTg6dWUsODA6USw4NDpqLDg1Om5lLDg2OnRlLDg3OmhlLDg4OmxlLDg5Okp9KSx0KHNlLFsyLDhdKSx0KEYsWzIsNDJdKSx0KFIsWzIsODldKV0sZGVmYXVsdEFjdGlvbnM6ezI6WzIsMV0sMzpbMiwyXSw0OlsyLDNdLDgzOlsyLDM1XSwxMjI6WzIsMTFdLDEyNTpbMiw0XSwxMzU6WzIsNDddLDE0NjpbMiwxMF0sMTUwOlsyLDM4XX0scGFyc2VFcnJvcjpvKGZ1bmN0aW9uKHhlLHEpe2lmKHEucmVjb3ZlcmFibGUpdGhpcy50cmFjZSh4ZSk7ZWxzZXt2YXIgZGU9bmV3IEVycm9yKHhlKTt0aHJvdyBkZS5oYXNoPXEsZGV9fSwicGFyc2VFcnJvciIpLHBhcnNlOm8oZnVuY3Rpb24oeGUpe3ZhciBxPXRoaXMsZGU9WzBdLGllPVtdLG9lPVtudWxsXSxWPVtdLFRlPXRoaXMudGFibGUsVz0iIixwZT0wLHZlPTAsUGU9MCxfZT0yLGJlPTEsVmU9Vi5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxEZT1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLHFlPXt5eTp7fX07Zm9yKHZhciBhdCBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGF0KSYmKHFlLnl5W2F0XT10aGlzLnl5W2F0XSk7RGUuc2V0SW5wdXQoeGUscWUueXkpLHFlLnl5LmxleGVyPURlLHFlLnl5LnBhcnNlcj10aGlzLHR5cGVvZiBEZS55eWxsb2M+InUiJiYoRGUueXlsbG9jPXt9KTt2YXIgUnQ9RGUueXlsbG9jO1YucHVzaChSdCk7dmFyIHN0PURlLm9wdGlvbnMmJkRlLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBxZS55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1xZS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBVZShrdCl7ZGUubGVuZ3RoPWRlLmxlbmd0aC0yKmt0LG9lLmxlbmd0aD1vZS5sZW5ndGgta3QsVi5sZW5ndGg9Vi5sZW5ndGgta3R9byhVZSwicG9wU3RhY2siKTtmdW5jdGlvbiBjdCgpe3ZhciBrdDtyZXR1cm4ga3Q9aWUucG9wKCl8fERlLmxleCgpfHxiZSx0eXBlb2Yga3QhPSJudW1iZXIiJiYoa3QgaW5zdGFuY2VvZiBBcnJheSYmKGllPWt0LGt0PWllLnBvcCgpKSxrdD1xLnN5bWJvbHNfW2t0XXx8a3QpLGt0fW8oY3QsImxleCIpO2Zvcih2YXIgV2Usb3QsWXQsVHQsTXQsYnQsdXQ9e30sU3QsZnQsdnQsbnQ7Oyl7aWYoWXQ9ZGVbZGUubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbWXRdP1R0PXRoaXMuZGVmYXVsdEFjdGlvbnNbWXRdOigoV2U9PT1udWxsfHx0eXBlb2YgV2U+InUiKSYmKFdlPWN0KCkpLFR0PVRlW1l0XSYmVGVbWXRdW1dlXSksdHlwZW9mIFR0PiJ1Inx8IVR0Lmxlbmd0aHx8IVR0WzBdKXt2YXIgcG49IiI7bnQ9W107Zm9yKFN0IGluIFRlW1l0XSl0aGlzLnRlcm1pbmFsc19bU3RdJiZTdD5fZSYmbnQucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW1N0XSsiJyIpO0RlLnNob3dQb3NpdGlvbj9wbj0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhwZSsxKStgOgpgK0RlLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArbnQuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tXZV18fFdlKSsiJyI6cG49IlBhcnNlIGVycm9yIG9uIGxpbmUgIisocGUrMSkrIjogVW5leHBlY3RlZCAiKyhXZT09YmU/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bV2VdfHxXZSkrIiciKSx0aGlzLnBhcnNlRXJyb3IocG4se3RleHQ6RGUubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW1dlXXx8V2UsbGluZTpEZS55eWxpbmVubyxsb2M6UnQsZXhwZWN0ZWQ6bnR9KX1pZihUdFswXWluc3RhbmNlb2YgQXJyYXkmJlR0Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrWXQrIiwgdG9rZW46ICIrV2UpO3N3aXRjaChUdFswXSl7Y2FzZSAxOmRlLnB1c2goV2UpLG9lLnB1c2goRGUueXl0ZXh0KSxWLnB1c2goRGUueXlsbG9jKSxkZS5wdXNoKFR0WzFdKSxXZT1udWxsLG90PyhXZT1vdCxvdD1udWxsKToodmU9RGUueXlsZW5nLFc9RGUueXl0ZXh0LHBlPURlLnl5bGluZW5vLFJ0PURlLnl5bGxvYyxQZT4wJiZQZS0tKTticmVhaztjYXNlIDI6aWYoZnQ9dGhpcy5wcm9kdWN0aW9uc19bVHRbMV1dWzFdLHV0LiQ9b2Vbb2UubGVuZ3RoLWZ0XSx1dC5fJD17Zmlyc3RfbGluZTpWW1YubGVuZ3RoLShmdHx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOlZbVi5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjpWW1YubGVuZ3RoLShmdHx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpWW1YubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxzdCYmKHV0Ll8kLnJhbmdlPVtWW1YubGVuZ3RoLShmdHx8MSldLnJhbmdlWzBdLFZbVi5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxidD10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkodXQsW1csdmUscGUscWUueXksVHRbMV0sb2UsVl0uY29uY2F0KFZlKSksdHlwZW9mIGJ0PCJ1IilyZXR1cm4gYnQ7ZnQmJihkZT1kZS5zbGljZSgwLC0xKmZ0KjIpLG9lPW9lLnNsaWNlKDAsLTEqZnQpLFY9Vi5zbGljZSgwLC0xKmZ0KSksZGUucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1tUdFsxXV1bMF0pLG9lLnB1c2godXQuJCksVi5wdXNoKHV0Ll8kKSx2dD1UZVtkZVtkZS5sZW5ndGgtMl1dW2RlW2RlLmxlbmd0aC0xXV0sZGUucHVzaCh2dCk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH0sInBhcnNlIil9LHplPWZ1bmN0aW9uKCl7dmFyIEllPXtFT0Y6MSxwYXJzZUVycm9yOm8oZnVuY3Rpb24ocSxkZSl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihxLGRlKTtlbHNlIHRocm93IG5ldyBFcnJvcihxKX0sInBhcnNlRXJyb3IiKSxzZXRJbnB1dDpvKGZ1bmN0aW9uKHhlLHEpe3JldHVybiB0aGlzLnl5PXF8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXhlLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSwic2V0SW5wdXQiKSxpbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIHhlPXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz14ZSx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9eGUsdGhpcy5tYXRjaGVkKz14ZTt2YXIgcT14ZS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIHE/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLHhlfSwiaW5wdXQiKSx1bnB1dDpvKGZ1bmN0aW9uKHhlKXt2YXIgcT14ZS5sZW5ndGgsZGU9eGUuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD14ZSt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtcSksdGhpcy5vZmZzZXQtPXE7dmFyIGllPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLGRlLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09ZGUubGVuZ3RoLTEpO3ZhciBvZT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46ZGU/KGRlLmxlbmd0aD09PWllLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkraWVbaWUubGVuZ3RoLWRlLmxlbmd0aF0ubGVuZ3RoLWRlWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tcX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtvZVswXSxvZVswXSt0aGlzLnl5bGVuZy1xXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LCJ1bnB1dCIpLG1vcmU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LCJtb3JlIikscmVqZWN0Om8oZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LCJyZWplY3QiKSxsZXNzOm8oZnVuY3Rpb24oeGUpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSh4ZSkpfSwibGVzcyIpLHBhc3RJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIHhlPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oeGUubGVuZ3RoPjIwPyIuLi4iOiIiKSt4ZS5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sInBhc3RJbnB1dCIpLHVwY29taW5nSW5wdXQ6byhmdW5jdGlvbigpe3ZhciB4ZT10aGlzLm1hdGNoO3JldHVybiB4ZS5sZW5ndGg8MjAmJih4ZSs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAteGUubGVuZ3RoKSksKHhlLnN1YnN0cigwLDIwKSsoeGUubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LCJ1cGNvbWluZ0lucHV0Iiksc2hvd1Bvc2l0aW9uOm8oZnVuY3Rpb24oKXt2YXIgeGU9dGhpcy5wYXN0SW5wdXQoKSxxPW5ldyBBcnJheSh4ZS5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiB4ZSt0aGlzLnVwY29taW5nSW5wdXQoKStgCmArcSsiXiJ9LCJzaG93UG9zaXRpb24iKSx0ZXN0X21hdGNoOm8oZnVuY3Rpb24oeGUscSl7dmFyIGRlLGllLG9lO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihvZT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihvZS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxpZT14ZVswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksaWUmJih0aGlzLnl5bGluZW5vKz1pZS5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjppZT9pZVtpZS5sZW5ndGgtMV0ubGVuZ3RoLWllW2llLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK3hlWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXhlWzBdLHRoaXMubWF0Y2grPXhlWzBdLHRoaXMubWF0Y2hlcz14ZSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh4ZVswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9eGVbMF0sZGU9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMscSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxkZSlyZXR1cm4gZGU7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIFYgaW4gb2UpdGhpc1tWXT1vZVtWXTtyZXR1cm4hMX1yZXR1cm4hMX0sInRlc3RfbWF0Y2giKSxuZXh0Om8oZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgeGUscSxkZSxpZTt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBvZT10aGlzLl9jdXJyZW50UnVsZXMoKSxWPTA7VjxvZS5sZW5ndGg7VisrKWlmKGRlPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbb2VbVl1dKSxkZSYmKCFxfHxkZVswXS5sZW5ndGg+cVswXS5sZW5ndGgpKXtpZihxPWRlLGllPVYsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoeGU9dGhpcy50ZXN0X21hdGNoKGRlLG9lW1ZdKSx4ZSE9PSExKXJldHVybiB4ZTtpZih0aGlzLl9iYWNrdHJhY2spe3E9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gcT8oeGU9dGhpcy50ZXN0X21hdGNoKHEsb2VbaWVdKSx4ZSE9PSExP3hlOiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSwibmV4dCIpLGxleDpvKGZ1bmN0aW9uKCl7dmFyIHE9dGhpcy5uZXh0KCk7cmV0dXJuIHF8fHRoaXMubGV4KCl9LCJsZXgiKSxiZWdpbjpvKGZ1bmN0aW9uKHEpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChxKX0sImJlZ2luIikscG9wU3RhdGU6byhmdW5jdGlvbigpe3ZhciBxPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIHE+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LCJwb3BTdGF0ZSIpLF9jdXJyZW50UnVsZXM6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LCJfY3VycmVudFJ1bGVzIiksdG9wU3RhdGU6byhmdW5jdGlvbihxKXtyZXR1cm4gcT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKHF8fDApLHE+PTA/dGhpcy5jb25kaXRpb25TdGFja1txXToiSU5JVElBTCJ9LCJ0b3BTdGF0ZSIpLHB1c2hTdGF0ZTpvKGZ1bmN0aW9uKHEpe3RoaXMuYmVnaW4ocSl9LCJwdXNoU3RhdGUiKSxzdGF0ZVN0YWNrU2l6ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSwic3RhdGVTdGFja1NpemUiKSxvcHRpb25zOnt9LHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbihxLGRlLGllLG9lKXt2YXIgVj1vZTtzd2l0Y2goaWUpe2Nhc2UgMDpyZXR1cm4gNjA7Y2FzZSAxOnJldHVybiA2MTtjYXNlIDI6cmV0dXJuIDYyO2Nhc2UgMzpyZXR1cm4gNjM7Y2FzZSA0OmJyZWFrO2Nhc2UgNTpicmVhaztjYXNlIDY6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDMzO2JyZWFrO2Nhc2UgNzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2JyZWFrO2Nhc2UgODpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX2Rlc2NyIiksMzU7YnJlYWs7Y2FzZSA5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7YnJlYWs7Y2FzZSAxMDp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSAxMTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxMjpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSAxMzpyZXR1cm4gODtjYXNlIDE0OmJyZWFrO2Nhc2UgMTU6cmV0dXJuIDc7Y2FzZSAxNjpyZXR1cm4gNztjYXNlIDE3OnJldHVybiJFREdFX1NUQVRFIjtjYXNlIDE4OnRoaXMuYmVnaW4oImNhbGxiYWNrX25hbWUiKTticmVhaztjYXNlIDE5OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDIwOnRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJjYWxsYmFja19hcmdzIik7YnJlYWs7Y2FzZSAyMTpyZXR1cm4gNzc7Y2FzZSAyMjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyMzpyZXR1cm4gNzg7Y2FzZSAyNDp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyNTpyZXR1cm4iU1RSIjtjYXNlIDI2OnRoaXMuYmVnaW4oInN0cmluZyIpO2JyZWFrO2Nhc2UgMjc6cmV0dXJuIDgwO2Nhc2UgMjg6cmV0dXJuIDU1O2Nhc2UgMjk6cmV0dXJuIHRoaXMuYmVnaW4oIm5hbWVzcGFjZSIpLDQyO2JyZWFrO2Nhc2UgMzA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw4O2JyZWFrO2Nhc2UgMzE6YnJlYWs7Y2FzZSAzMjpyZXR1cm4gdGhpcy5iZWdpbigibmFtZXNwYWNlLWJvZHkiKSwzOTticmVhaztjYXNlIDMzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNDE7YnJlYWs7Y2FzZSAzNDpyZXR1cm4iRU9GX0lOX1NUUlVDVCI7Y2FzZSAzNTpyZXR1cm4gODtjYXNlIDM2OmJyZWFrO2Nhc2UgMzc6cmV0dXJuIkVER0VfU1RBVEUiO2Nhc2UgMzg6cmV0dXJuIHRoaXMuYmVnaW4oImNsYXNzIiksNDY7YnJlYWs7Y2FzZSAzOTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDg7YnJlYWs7Y2FzZSA0MDpicmVhaztjYXNlIDQxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDQxO2JyZWFrO2Nhc2UgNDI6cmV0dXJuIHRoaXMuYmVnaW4oImNsYXNzLWJvZHkiKSwzOTticmVhaztjYXNlIDQzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksNDE7YnJlYWs7Y2FzZSA0NDpyZXR1cm4iRU9GX0lOX1NUUlVDVCI7Y2FzZSA0NTpyZXR1cm4iRURHRV9TVEFURSI7Y2FzZSA0NjpyZXR1cm4iT1BFTl9JTl9TVFJVQ1QiO2Nhc2UgNDc6YnJlYWs7Y2FzZSA0ODpyZXR1cm4iTUVNQkVSIjtjYXNlIDQ5OnJldHVybiA4MTtjYXNlIDUwOnJldHVybiA3MztjYXNlIDUxOnJldHVybiA3NDtjYXNlIDUyOnJldHVybiA3NjtjYXNlIDUzOnJldHVybiA1MjtjYXNlIDU0OnJldHVybiA1NDtjYXNlIDU1OnJldHVybiA0NztjYXNlIDU2OnJldHVybiA0ODtjYXNlIDU3OnJldHVybiA3OTtjYXNlIDU4OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDU5OnJldHVybiJHRU5FUklDVFlQRSI7Y2FzZSA2MDp0aGlzLmJlZ2luKCJnZW5lcmljIik7YnJlYWs7Y2FzZSA2MTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA2MjpyZXR1cm4iQlFVT1RFX1NUUiI7Y2FzZSA2Mzp0aGlzLmJlZ2luKCJicXN0cmluZyIpO2JyZWFrO2Nhc2UgNjQ6cmV0dXJuIDc1O2Nhc2UgNjU6cmV0dXJuIDc1O2Nhc2UgNjY6cmV0dXJuIDc1O2Nhc2UgNjc6cmV0dXJuIDc1O2Nhc2UgNjg6cmV0dXJuIDY3O2Nhc2UgNjk6cmV0dXJuIDY3O2Nhc2UgNzA6cmV0dXJuIDY5O2Nhc2UgNzE6cmV0dXJuIDY5O2Nhc2UgNzI6cmV0dXJuIDY4O2Nhc2UgNzM6cmV0dXJuIDY2O2Nhc2UgNzQ6cmV0dXJuIDcwO2Nhc2UgNzU6cmV0dXJuIDcxO2Nhc2UgNzY6cmV0dXJuIDcyO2Nhc2UgNzc6cmV0dXJuIDIyO2Nhc2UgNzg6cmV0dXJuIDQ0O2Nhc2UgNzk6cmV0dXJuIDk5O2Nhc2UgODA6cmV0dXJuIDE3O2Nhc2UgODE6cmV0dXJuIlBMVVMiO2Nhc2UgODI6cmV0dXJuIDg1O2Nhc2UgODM6cmV0dXJuIDU5O2Nhc2UgODQ6cmV0dXJuIDg4O2Nhc2UgODU6cmV0dXJuIDg4O2Nhc2UgODY6cmV0dXJuIDg5O2Nhc2UgODc6cmV0dXJuIkVRVUFMUyI7Y2FzZSA4ODpyZXR1cm4iRVFVQUxTIjtjYXNlIDg5OnJldHVybiA1ODtjYXNlIDkwOnJldHVybiAxMjtjYXNlIDkxOnJldHVybiAxNDtjYXNlIDkyOnJldHVybiJQVU5DVFVBVElPTiI7Y2FzZSA5MzpyZXR1cm4gODQ7Y2FzZSA5NDpyZXR1cm4gMTAxO2Nhc2UgOTU6cmV0dXJuIDg3O2Nhc2UgOTY6cmV0dXJuIDg3O2Nhc2UgOTc6cmV0dXJuIDl9fSwiYW5vbnltb3VzIikscnVsZXM6Wy9eKD86LipkaXJlY3Rpb25ccytUQlteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytCVFteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytSTFteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytMUlteXG5dKikvLC9eKD86JSUoPyFceykqW15cbl0qKFxyP1xuPykrKS8sL14oPzolJVteXG5dKihccj9cbikqKS8sL14oPzphY2NUaXRsZVxzKjpccyopLywvXig/Oig/IVxufHwpKlteXG5dKikvLC9eKD86YWNjRGVzY3Jccyo6XHMqKS8sL14oPzooPyFcbnx8KSpbXlxuXSopLywvXig/OmFjY0Rlc2NyXHMqXHtccyopLywvXig/OltcfV0pLywvXig/OlteXH1dKikvLC9eKD86XHMqKFxyP1xuKSspLywvXig/OlxzKykvLC9eKD86Y2xhc3NEaWFncmFtLXYyXGIpLywvXig/OmNsYXNzRGlhZ3JhbVxiKS8sL14oPzpcW1wqXF0pLywvXig/OmNhbGxbXHNdKykvLC9eKD86XChbXHNdKlwpKS8sL14oPzpcKCkvLC9eKD86W14oXSopLywvXig/OlwpKS8sL14oPzpbXildKikvLC9eKD86WyJdKS8sL14oPzpbXiJdKikvLC9eKD86WyJdKS8sL14oPzpzdHlsZVxiKS8sL14oPzpjbGFzc0RlZlxiKS8sL14oPzpuYW1lc3BhY2VcYikvLC9eKD86XHMqKFxyP1xuKSspLywvXig/OlxzKykvLC9eKD86W3tdKS8sL14oPzpbfV0pLywvXig/OiQpLywvXig/OlxzKihccj9cbikrKS8sL14oPzpccyspLywvXig/OlxbXCpcXSkvLC9eKD86Y2xhc3NcYikvLC9eKD86XHMqKFxyP1xuKSspLywvXig/OlxzKykvLC9eKD86W31dKS8sL14oPzpbe10pLywvXig/Olt9XSkvLC9eKD86JCkvLC9eKD86XFtcKlxdKS8sL14oPzpbe10pLywvXig/Oltcbl0pLywvXig/Oltee31cbl0qKS8sL14oPzpjc3NDbGFzc1xiKS8sL14oPzpjYWxsYmFja1xiKS8sL14oPzpsaW5rXGIpLywvXig/OmNsaWNrXGIpLywvXig/Om5vdGUgZm9yXGIpLywvXig/Om5vdGVcYikvLC9eKD86PDwpLywvXig/Oj4+KS8sL14oPzpocmVmXGIpLywvXig/Olt+XSkvLC9eKD86W15+XSopLywvXig/On4pLywvXig/OltgXSkvLC9eKD86W15gXSspLywvXig/OltgXSkvLC9eKD86X3NlbGZcYikvLC9eKD86X2JsYW5rXGIpLywvXig/Ol9wYXJlbnRcYikvLC9eKD86X3RvcFxiKS8sL14oPzpccyo8XHwpLywvXig/OlxzKlx8PikvLC9eKD86XHMqPikvLC9eKD86XHMqPCkvLC9eKD86XHMqXCopLywvXig/OlxzKm9cYikvLC9eKD86XHMqXChcKSkvLC9eKD86LS0pLywvXig/OlwuXC4pLywvXig/Ojp7MX1bXjpcbjtdKykvLC9eKD86OnszfSkvLC9eKD86LSkvLC9eKD86XC4pLywvXig/OlwrKS8sL14oPzo6KS8sL14oPzosKS8sL14oPzojKS8sL14oPzojKS8sL14oPzolKS8sL14oPzo9KS8sL14oPzo9KS8sL14oPzpcdyspLywvXig/OlxbKS8sL14oPzpcXSkvLC9eKD86WyEiIyQlJicqKywtLmA/XFwvXSkvLC9eKD86WzAtOV0rKS8sL14oPzpbXHUwMEFBXHUwMEI1XHUwMEJBXHUwMEMwLVx1MDBENlx1MDBEOC1cdTAwRjZdfFtcdTAwRjgtXHUwMkMxXHUwMkM2LVx1MDJEMVx1MDJFMC1cdTAyRTRcdTAyRUNcdTAyRUVcdTAzNzAtXHUwMzc0XHUwMzc2XHUwMzc3XXxbXHUwMzdBLVx1MDM3RFx1MDM4Nlx1MDM4OC1cdTAzOEFcdTAzOENcdTAzOEUtXHUwM0ExXHUwM0EzLVx1MDNGNV18W1x1MDNGNy1cdTA0ODFcdTA0OEEtXHUwNTI3XHUwNTMxLVx1MDU1Nlx1MDU1OVx1MDU2MS1cdTA1ODdcdTA1RDAtXHUwNUVBXXxbXHUwNUYwLVx1MDVGMlx1MDYyMC1cdTA2NEFcdTA2NkVcdTA2NkZcdTA2NzEtXHUwNkQzXHUwNkQ1XHUwNkU1XHUwNkU2XHUwNkVFXXxbXHUwNkVGXHUwNkZBLVx1MDZGQ1x1MDZGRlx1MDcxMFx1MDcxMi1cdTA3MkZcdTA3NEQtXHUwN0E1XHUwN0IxXHUwN0NBLVx1MDdFQV18W1x1MDdGNFx1MDdGNVx1MDdGQVx1MDgwMC1cdTA4MTVcdTA4MUFcdTA4MjRcdTA4MjhcdTA4NDAtXHUwODU4XHUwOEEwXXxbXHUwOEEyLVx1MDhBQ1x1MDkwNC1cdTA5MzlcdTA5M0RcdTA5NTBcdTA5NTgtXHUwOTYxXHUwOTcxLVx1MDk3N118W1x1MDk3OS1cdTA5N0ZcdTA5ODUtXHUwOThDXHUwOThGXHUwOTkwXHUwOTkzLVx1MDlBOFx1MDlBQS1cdTA5QjBcdTA5QjJdfFtcdTA5QjYtXHUwOUI5XHUwOUJEXHUwOUNFXHUwOURDXHUwOUREXHUwOURGLVx1MDlFMVx1MDlGMFx1MDlGMVx1MEEwNS1cdTBBMEFdfFtcdTBBMEZcdTBBMTBcdTBBMTMtXHUwQTI4XHUwQTJBLVx1MEEzMFx1MEEzMlx1MEEzM1x1MEEzNVx1MEEzNlx1MEEzOFx1MEEzOV18W1x1MEE1OS1cdTBBNUNcdTBBNUVcdTBBNzItXHUwQTc0XHUwQTg1LVx1MEE4RFx1MEE4Ri1cdTBBOTFcdTBBOTMtXHUwQUE4XXxbXHUwQUFBLVx1MEFCMFx1MEFCMlx1MEFCM1x1MEFCNS1cdTBBQjlcdTBBQkRcdTBBRDBcdTBBRTBcdTBBRTFcdTBCMDUtXHUwQjBDXXxbXHUwQjBGXHUwQjEwXHUwQjEzLVx1MEIyOFx1MEIyQS1cdTBCMzBcdTBCMzJcdTBCMzNcdTBCMzUtXHUwQjM5XHUwQjNEXHUwQjVDXXxbXHUwQjVEXHUwQjVGLVx1MEI2MVx1MEI3MVx1MEI4M1x1MEI4NS1cdTBCOEFcdTBCOEUtXHUwQjkwXHUwQjkyLVx1MEI5NVx1MEI5OV18W1x1MEI5QVx1MEI5Q1x1MEI5RVx1MEI5Rlx1MEJBM1x1MEJBNFx1MEJBOC1cdTBCQUFcdTBCQUUtXHUwQkI5XHUwQkQwXXxbXHUwQzA1LVx1MEMwQ1x1MEMwRS1cdTBDMTBcdTBDMTItXHUwQzI4XHUwQzJBLVx1MEMzM1x1MEMzNS1cdTBDMzlcdTBDM0RdfFtcdTBDNThcdTBDNTlcdTBDNjBcdTBDNjFcdTBDODUtXHUwQzhDXHUwQzhFLVx1MEM5MFx1MEM5Mi1cdTBDQThcdTBDQUEtXHUwQ0IzXXxbXHUwQ0I1LVx1MENCOVx1MENCRFx1MENERVx1MENFMFx1MENFMVx1MENGMVx1MENGMlx1MEQwNS1cdTBEMENcdTBEMEUtXHUwRDEwXXxbXHUwRDEyLVx1MEQzQVx1MEQzRFx1MEQ0RVx1MEQ2MFx1MEQ2MVx1MEQ3QS1cdTBEN0ZcdTBEODUtXHUwRDk2XHUwRDlBLVx1MERCMV18W1x1MERCMy1cdTBEQkJcdTBEQkRcdTBEQzAtXHUwREM2XHUwRTAxLVx1MEUzMFx1MEUzMlx1MEUzM1x1MEU0MC1cdTBFNDZcdTBFODFdfFtcdTBFODJcdTBFODRcdTBFODdcdTBFODhcdTBFOEFcdTBFOERcdTBFOTQtXHUwRTk3XHUwRTk5LVx1MEU5Rlx1MEVBMS1cdTBFQTNdfFtcdTBFQTVcdTBFQTdcdTBFQUFcdTBFQUJcdTBFQUQtXHUwRUIwXHUwRUIyXHUwRUIzXHUwRUJEXHUwRUMwLVx1MEVDNFx1MEVDNl18W1x1MEVEQy1cdTBFREZcdTBGMDBcdTBGNDAtXHUwRjQ3XHUwRjQ5LVx1MEY2Q1x1MEY4OC1cdTBGOENcdTEwMDAtXHUxMDJBXXxbXHUxMDNGXHUxMDUwLVx1MTA1NVx1MTA1QS1cdTEwNURcdTEwNjFcdTEwNjVcdTEwNjZcdTEwNkUtXHUxMDcwXHUxMDc1LVx1MTA4MV18W1x1MTA4RVx1MTBBMC1cdTEwQzVcdTEwQzdcdTEwQ0RcdTEwRDAtXHUxMEZBXHUxMEZDLVx1MTI0OFx1MTI0QS1cdTEyNERdfFtcdTEyNTAtXHUxMjU2XHUxMjU4XHUxMjVBLVx1MTI1RFx1MTI2MC1cdTEyODhcdTEyOEEtXHUxMjhEXHUxMjkwLVx1MTJCMF18W1x1MTJCMi1cdTEyQjVcdTEyQjgtXHUxMkJFXHUxMkMwXHUxMkMyLVx1MTJDNVx1MTJDOC1cdTEyRDZcdTEyRDgtXHUxMzEwXXxbXHUxMzEyLVx1MTMxNVx1MTMxOC1cdTEzNUFcdTEzODAtXHUxMzhGXHUxM0EwLVx1MTNGNFx1MTQwMS1cdTE2NkNdfFtcdTE2NkYtXHUxNjdGXHUxNjgxLVx1MTY5QVx1MTZBMC1cdTE2RUFcdTE3MDAtXHUxNzBDXHUxNzBFLVx1MTcxMV18W1x1MTcyMC1cdTE3MzFcdTE3NDAtXHUxNzUxXHUxNzYwLVx1MTc2Q1x1MTc2RS1cdTE3NzBcdTE3ODAtXHUxN0IzXHUxN0Q3XXxbXHUxN0RDXHUxODIwLVx1MTg3N1x1MTg4MC1cdTE4QThcdTE4QUFcdTE4QjAtXHUxOEY1XHUxOTAwLVx1MTkxQ118W1x1MTk1MC1cdTE5NkRcdTE5NzAtXHUxOTc0XHUxOTgwLVx1MTlBQlx1MTlDMS1cdTE5QzdcdTFBMDAtXHUxQTE2XXxbXHUxQTIwLVx1MUE1NFx1MUFBN1x1MUIwNS1cdTFCMzNcdTFCNDUtXHUxQjRCXHUxQjgzLVx1MUJBMFx1MUJBRVx1MUJBRl18W1x1MUJCQS1cdTFCRTVcdTFDMDAtXHUxQzIzXHUxQzRELVx1MUM0Rlx1MUM1QS1cdTFDN0RcdTFDRTktXHUxQ0VDXXxbXHUxQ0VFLVx1MUNGMVx1MUNGNVx1MUNGNlx1MUQwMC1cdTFEQkZcdTFFMDAtXHUxRjE1XHUxRjE4LVx1MUYxRF18W1x1MUYyMC1cdTFGNDVcdTFGNDgtXHUxRjREXHUxRjUwLVx1MUY1N1x1MUY1OVx1MUY1Qlx1MUY1RFx1MUY1Ri1cdTFGN0RdfFtcdTFGODAtXHUxRkI0XHUxRkI2LVx1MUZCQ1x1MUZCRVx1MUZDMi1cdTFGQzRcdTFGQzYtXHUxRkNDXHUxRkQwLVx1MUZEM118W1x1MUZENi1cdTFGREJcdTFGRTAtXHUxRkVDXHUxRkYyLVx1MUZGNFx1MUZGNi1cdTFGRkNcdTIwNzFcdTIwN0ZdfFtcdTIwOTAtXHUyMDlDXHUyMTAyXHUyMTA3XHUyMTBBLVx1MjExM1x1MjExNVx1MjExOS1cdTIxMURcdTIxMjRcdTIxMjZcdTIxMjhdfFtcdTIxMkEtXHUyMTJEXHUyMTJGLVx1MjEzOVx1MjEzQy1cdTIxM0ZcdTIxNDUtXHUyMTQ5XHUyMTRFXHUyMTgzXHUyMTg0XXxbXHUyQzAwLVx1MkMyRVx1MkMzMC1cdTJDNUVcdTJDNjAtXHUyQ0U0XHUyQ0VCLVx1MkNFRVx1MkNGMlx1MkNGM118W1x1MkQwMC1cdTJEMjVcdTJEMjdcdTJEMkRcdTJEMzAtXHUyRDY3XHUyRDZGXHUyRDgwLVx1MkQ5Nlx1MkRBMC1cdTJEQTZdfFtcdTJEQTgtXHUyREFFXHUyREIwLVx1MkRCNlx1MkRCOC1cdTJEQkVcdTJEQzAtXHUyREM2XHUyREM4LVx1MkRDRV18W1x1MkREMC1cdTJERDZcdTJERDgtXHUyRERFXHUyRTJGXHUzMDA1XHUzMDA2XHUzMDMxLVx1MzAzNVx1MzAzQlx1MzAzQ118W1x1MzA0MS1cdTMwOTZcdTMwOUQtXHUzMDlGXHUzMEExLVx1MzBGQVx1MzBGQy1cdTMwRkZcdTMxMDUtXHUzMTJEXXxbXHUzMTMxLVx1MzE4RVx1MzFBMC1cdTMxQkFcdTMxRjAtXHUzMUZGXHUzNDAwLVx1NERCNVx1NEUwMC1cdTlGQ0NdfFtcdUEwMDAtXHVBNDhDXHVBNEQwLVx1QTRGRFx1QTUwMC1cdUE2MENcdUE2MTAtXHVBNjFGXHVBNjJBXHVBNjJCXXxbXHVBNjQwLVx1QTY2RVx1QTY3Ri1cdUE2OTdcdUE2QTAtXHVBNkU1XHVBNzE3LVx1QTcxRlx1QTcyMi1cdUE3ODhdfFtcdUE3OEItXHVBNzhFXHVBNzkwLVx1QTc5M1x1QTdBMC1cdUE3QUFcdUE3RjgtXHVBODAxXHVBODAzLVx1QTgwNV18W1x1QTgwNy1cdUE4MEFcdUE4MEMtXHVBODIyXHVBODQwLVx1QTg3M1x1QTg4Mi1cdUE4QjNcdUE4RjItXHVBOEY3XHVBOEZCXXxbXHVBOTBBLVx1QTkyNVx1QTkzMC1cdUE5NDZcdUE5NjAtXHVBOTdDXHVBOTg0LVx1QTlCMlx1QTlDRlx1QUEwMC1cdUFBMjhdfFtcdUFBNDAtXHVBQTQyXHVBQTQ0LVx1QUE0Qlx1QUE2MC1cdUFBNzZcdUFBN0FcdUFBODAtXHVBQUFGXHVBQUIxXHVBQUI1XXxbXHVBQUI2XHVBQUI5LVx1QUFCRFx1QUFDMFx1QUFDMlx1QUFEQi1cdUFBRERcdUFBRTAtXHVBQUVBXHVBQUYyLVx1QUFGNF18W1x1QUIwMS1cdUFCMDZcdUFCMDktXHVBQjBFXHVBQjExLVx1QUIxNlx1QUIyMC1cdUFCMjZcdUFCMjgtXHVBQjJFXXxbXHVBQkMwLVx1QUJFMlx1QUMwMC1cdUQ3QTNcdUQ3QjAtXHVEN0M2XHVEN0NCLVx1RDdGQlx1RjkwMC1cdUZBNkRdfFtcdUZBNzAtXHVGQUQ5XHVGQjAwLVx1RkIwNlx1RkIxMy1cdUZCMTdcdUZCMURcdUZCMUYtXHVGQjI4XHVGQjJBLVx1RkIzNl18W1x1RkIzOC1cdUZCM0NcdUZCM0VcdUZCNDBcdUZCNDFcdUZCNDNcdUZCNDRcdUZCNDYtXHVGQkIxXHVGQkQzLVx1RkQzRF18W1x1RkQ1MC1cdUZEOEZcdUZEOTItXHVGREM3XHVGREYwLVx1RkRGQlx1RkU3MC1cdUZFNzRcdUZFNzYtXHVGRUZDXXxbXHVGRjIxLVx1RkYzQVx1RkY0MS1cdUZGNUFcdUZGNjYtXHVGRkJFXHVGRkMyLVx1RkZDN1x1RkZDQS1cdUZGQ0ZdfFtcdUZGRDItXHVGRkQ3XHVGRkRBLVx1RkZEQ10pLywvXig/OlxzKS8sL14oPzpccykvLC9eKD86JCkvXSxjb25kaXRpb25zOnsibmFtZXNwYWNlLWJvZHkiOntydWxlczpbMjYsMzMsMzQsMzUsMzYsMzcsMzgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNjAsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTddLGluY2x1c2l2ZTohMX0sbmFtZXNwYWNlOntydWxlczpbMjYsMjksMzAsMzEsMzIsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNjAsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTddLGluY2x1c2l2ZTohMX0sImNsYXNzLWJvZHkiOntydWxlczpbMjYsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNjAsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTddLGluY2x1c2l2ZTohMX0sY2xhc3M6e3J1bGVzOlsyNiwzOSw0MCw0MSw0Miw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw2MCw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5N10saW5jbHVzaXZlOiExfSxhY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbMTEsMTIsMjYsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNjAsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTddLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbOSwyNiw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw2MCw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5N10saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOls3LDI2LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDYwLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk3XSxpbmNsdXNpdmU6ITF9LGNhbGxiYWNrX2FyZ3M6e3J1bGVzOlsyMiwyMywyNiw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw2MCw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5N10saW5jbHVzaXZlOiExfSxjYWxsYmFja19uYW1lOntydWxlczpbMTksMjAsMjEsMjYsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNjAsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTddLGluY2x1c2l2ZTohMX0saHJlZjp7cnVsZXM6WzI2LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDYwLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk3XSxpbmNsdXNpdmU6ITF9LHN0cnVjdDp7cnVsZXM6WzI2LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDYwLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk3XSxpbmNsdXNpdmU6ITF9LGdlbmVyaWM6e3J1bGVzOlsyNiw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5N10saW5jbHVzaXZlOiExfSxicXN0cmluZzp7cnVsZXM6WzI2LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk3XSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzI0LDI1LDI2LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDYwLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk3XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMiwzLDQsNSw2LDgsMTAsMTMsMTQsMTUsMTYsMTcsMTgsMjYsMjcsMjgsMjksMzgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNjAsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTYsOTddLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gSWV9KCk7SGUubGV4ZXI9emU7ZnVuY3Rpb24gTGUoKXt0aGlzLnl5PXt9fXJldHVybiBvKExlLCJQYXJzZXIiKSxMZS5wcm90b3R5cGU9SGUsSGUuUGFyc2VyPUxlLG5ldyBMZX0oKTtiUC5wYXJzZXI9YlA7alM9YlB9KTt2YXIgamRlLEliLEtkZT1OKCgpPT57InVzZSBzdHJpY3QiO0d0KCk7cHIoKTtqZGU9WyIjIiwiKyIsIn4iLCItIiwiIl0sSWI9Y2xhc3N7c3RhdGlje28odGhpcywiQ2xhc3NNZW1iZXIiKX1jb25zdHJ1Y3RvcihlLHIpe3RoaXMubWVtYmVyVHlwZT1yLHRoaXMudmlzaWJpbGl0eT0iIix0aGlzLmNsYXNzaWZpZXI9IiIsdGhpcy50ZXh0PSIiO2xldCBuPXdyKGUsbWUoKSk7dGhpcy5wYXJzZU1lbWJlcihuKX1nZXREaXNwbGF5RGV0YWlscygpe2xldCBlPXRoaXMudmlzaWJpbGl0eStpYyh0aGlzLmlkKTt0aGlzLm1lbWJlclR5cGU9PT0ibWV0aG9kIiYmKGUrPWAoJHtpYyh0aGlzLnBhcmFtZXRlcnMudHJpbSgpKX0pYCx0aGlzLnJldHVyblR5cGUmJihlKz0iIDogIitpYyh0aGlzLnJldHVyblR5cGUpKSksZT1lLnRyaW0oKTtsZXQgcj10aGlzLnBhcnNlQ2xhc3NpZmllcigpO3JldHVybntkaXNwbGF5VGV4dDplLGNzc1N0eWxlOnJ9fXBhcnNlTWVtYmVyKGUpe2xldCByPSIiO2lmKHRoaXMubWVtYmVyVHlwZT09PSJtZXRob2QiKXtsZXQgYT0vKFsjK34tXSk/KC4rKVwoKC4qKVwpKFtccyQqXSk/KC4qKShbJCpdKT8vLmV4ZWMoZSk7aWYoYSl7bGV0IHM9YVsxXT9hWzFdLnRyaW0oKToiIjtpZihqZGUuaW5jbHVkZXMocykmJih0aGlzLnZpc2liaWxpdHk9cyksdGhpcy5pZD1hWzJdLHRoaXMucGFyYW1ldGVycz1hWzNdP2FbM10udHJpbSgpOiIiLHI9YVs0XT9hWzRdLnRyaW0oKToiIix0aGlzLnJldHVyblR5cGU9YVs1XT9hWzVdLnRyaW0oKToiIixyPT09IiIpe2xldCBsPXRoaXMucmV0dXJuVHlwZS5zdWJzdHJpbmcodGhpcy5yZXR1cm5UeXBlLmxlbmd0aC0xKTsvWyQqXS8uZXhlYyhsKSYmKHI9bCx0aGlzLnJldHVyblR5cGU9dGhpcy5yZXR1cm5UeXBlLnN1YnN0cmluZygwLHRoaXMucmV0dXJuVHlwZS5sZW5ndGgtMSkpfX19ZWxzZXtsZXQgaT1lLmxlbmd0aCxhPWUuc3Vic3RyaW5nKDAsMSkscz1lLnN1YnN0cmluZyhpLTEpO2pkZS5pbmNsdWRlcyhhKSYmKHRoaXMudmlzaWJpbGl0eT1hKSwvWyQqXS8uZXhlYyhzKSYmKHI9cyksdGhpcy5pZD1lLnN1YnN0cmluZyh0aGlzLnZpc2liaWxpdHk9PT0iIj8wOjEscj09PSIiP2k6aS0xKX10aGlzLmNsYXNzaWZpZXI9cix0aGlzLmlkPXRoaXMuaWQuc3RhcnRzV2l0aCgiICIpPyIgIit0aGlzLmlkLnRyaW0oKTp0aGlzLmlkLnRyaW0oKTtsZXQgbj1gJHt0aGlzLnZpc2liaWxpdHk/IlxcIit0aGlzLnZpc2liaWxpdHk6IiJ9JHtpYyh0aGlzLmlkKX0ke3RoaXMubWVtYmVyVHlwZT09PSJtZXRob2QiP2AoJHtpYyh0aGlzLnBhcmFtZXRlcnMpfSkke3RoaXMucmV0dXJuVHlwZT8iIDogIitpYyh0aGlzLnJldHVyblR5cGUpOiIifWA6IiJ9YDt0aGlzLnRleHQ9bi5yZXBsYWNlQWxsKCI8IiwiJmx0OyIpLnJlcGxhY2VBbGwoIj4iLCImZ3Q7IiksdGhpcy50ZXh0LnN0YXJ0c1dpdGgoIlxcJmx0OyIpJiYodGhpcy50ZXh0PXRoaXMudGV4dC5yZXBsYWNlKCJcXCZsdDsiLCJ+IikpfXBhcnNlQ2xhc3NpZmllcigpe3N3aXRjaCh0aGlzLmNsYXNzaWZpZXIpe2Nhc2UiKiI6cmV0dXJuImZvbnQtc3R5bGU6aXRhbGljOyI7Y2FzZSIkIjpyZXR1cm4idGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTsiO2RlZmF1bHQ6cmV0dXJuIiJ9fX19KTt2YXIgS1MsUWRlLHpwLFAxLHdQPU4oKCk9PnsidXNlIHN0cmljdCI7ZnIoKTt5dCgpO0d0KCk7cHIoKTtlcigpO2NpKCk7S2RlKCk7S1M9ImNsYXNzSWQtIixRZGU9MCx6cD1vKHQ9PlplLnNhbml0aXplVGV4dCh0LG1lKCkpLCJzYW5pdGl6ZVRleHQiKSxQMT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMucmVsYXRpb25zPVtdO3RoaXMuY2xhc3Nlcz1uZXcgTWFwO3RoaXMuc3R5bGVDbGFzc2VzPW5ldyBNYXA7dGhpcy5ub3Rlcz1bXTt0aGlzLmludGVyZmFjZXM9W107dGhpcy5uYW1lc3BhY2VzPW5ldyBNYXA7dGhpcy5uYW1lc3BhY2VDb3VudGVyPTA7dGhpcy5mdW5jdGlvbnM9W107dGhpcy5saW5lVHlwZT17TElORTowLERPVFRFRF9MSU5FOjF9O3RoaXMucmVsYXRpb25UeXBlPXtBR0dSRUdBVElPTjowLEVYVEVOU0lPTjoxLENPTVBPU0lUSU9OOjIsREVQRU5ERU5DWTozLExPTExJUE9QOjR9O3RoaXMuc2V0dXBUb29sVGlwcz1vKGU9PntsZXQgcj1HZSgiLm1lcm1haWRUb29sdGlwIik7KHIuX2dyb3Vwc3x8cilbMF1bMF09PT1udWxsJiYocj1HZSgiYm9keSIpLmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLCJtZXJtYWlkVG9vbHRpcCIpLnN0eWxlKCJvcGFjaXR5IiwwKSksR2UoZSkuc2VsZWN0KCJzdmciKS5zZWxlY3RBbGwoImcubm9kZSIpLm9uKCJtb3VzZW92ZXIiLGE9PntsZXQgcz1HZShhLmN1cnJlbnRUYXJnZXQpO2lmKHMuYXR0cigidGl0bGUiKT09PW51bGwpcmV0dXJuO2xldCB1PXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ci50cmFuc2l0aW9uKCkuZHVyYXRpb24oMjAwKS5zdHlsZSgib3BhY2l0eSIsIi45Iiksci50ZXh0KHMuYXR0cigidGl0bGUiKSkuc3R5bGUoImxlZnQiLHdpbmRvdy5zY3JvbGxYK3UubGVmdCsodS5yaWdodC11LmxlZnQpLzIrInB4Iikuc3R5bGUoInRvcCIsd2luZG93LnNjcm9sbFkrdS50b3AtMTQrZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ArInB4Iiksci5odG1sKHIuaHRtbCgpLnJlcGxhY2UoLyZsdDticlwvJmd0Oy9nLCI8YnIvPiIpKSxzLmNsYXNzZWQoImhvdmVyIiwhMCl9KS5vbigibW91c2VvdXQiLGE9PntyLnRyYW5zaXRpb24oKS5kdXJhdGlvbig1MDApLnN0eWxlKCJvcGFjaXR5IiwwKSxHZShhLmN1cnJlbnRUYXJnZXQpLmNsYXNzZWQoImhvdmVyIiwhMSl9KX0sInNldHVwVG9vbFRpcHMiKTt0aGlzLmRpcmVjdGlvbj0iVEIiO3RoaXMuc2V0QWNjVGl0bGU9QXI7dGhpcy5nZXRBY2NUaXRsZT1Ecjt0aGlzLnNldEFjY0Rlc2NyaXB0aW9uPUxyO3RoaXMuZ2V0QWNjRGVzY3JpcHRpb249UnI7dGhpcy5zZXREaWFncmFtVGl0bGU9T3I7dGhpcy5nZXREaWFncmFtVGl0bGU9TnI7dGhpcy5nZXRDb25maWc9bygoKT0+bWUoKS5jbGFzcywiZ2V0Q29uZmlnIik7dGhpcy5mdW5jdGlvbnMucHVzaCh0aGlzLnNldHVwVG9vbFRpcHMuYmluZCh0aGlzKSksdGhpcy5jbGVhcigpLHRoaXMuYWRkUmVsYXRpb249dGhpcy5hZGRSZWxhdGlvbi5iaW5kKHRoaXMpLHRoaXMuYWRkQ2xhc3Nlc1RvTmFtZXNwYWNlPXRoaXMuYWRkQ2xhc3Nlc1RvTmFtZXNwYWNlLmJpbmQodGhpcyksdGhpcy5hZGROYW1lc3BhY2U9dGhpcy5hZGROYW1lc3BhY2UuYmluZCh0aGlzKSx0aGlzLnNldENzc0NsYXNzPXRoaXMuc2V0Q3NzQ2xhc3MuYmluZCh0aGlzKSx0aGlzLmFkZE1lbWJlcnM9dGhpcy5hZGRNZW1iZXJzLmJpbmQodGhpcyksdGhpcy5hZGRDbGFzcz10aGlzLmFkZENsYXNzLmJpbmQodGhpcyksdGhpcy5zZXRDbGFzc0xhYmVsPXRoaXMuc2V0Q2xhc3NMYWJlbC5iaW5kKHRoaXMpLHRoaXMuYWRkQW5ub3RhdGlvbj10aGlzLmFkZEFubm90YXRpb24uYmluZCh0aGlzKSx0aGlzLmFkZE1lbWJlcj10aGlzLmFkZE1lbWJlci5iaW5kKHRoaXMpLHRoaXMuY2xlYW51cExhYmVsPXRoaXMuY2xlYW51cExhYmVsLmJpbmQodGhpcyksdGhpcy5hZGROb3RlPXRoaXMuYWRkTm90ZS5iaW5kKHRoaXMpLHRoaXMuZGVmaW5lQ2xhc3M9dGhpcy5kZWZpbmVDbGFzcy5iaW5kKHRoaXMpLHRoaXMuc2V0RGlyZWN0aW9uPXRoaXMuc2V0RGlyZWN0aW9uLmJpbmQodGhpcyksdGhpcy5zZXRMaW5rPXRoaXMuc2V0TGluay5iaW5kKHRoaXMpLHRoaXMuYmluZEZ1bmN0aW9ucz10aGlzLmJpbmRGdW5jdGlvbnMuYmluZCh0aGlzKSx0aGlzLmNsZWFyPXRoaXMuY2xlYXIuYmluZCh0aGlzKSx0aGlzLnNldFRvb2x0aXA9dGhpcy5zZXRUb29sdGlwLmJpbmQodGhpcyksdGhpcy5zZXRDbGlja0V2ZW50PXRoaXMuc2V0Q2xpY2tFdmVudC5iaW5kKHRoaXMpLHRoaXMuc2V0Q3NzU3R5bGU9dGhpcy5zZXRDc3NTdHlsZS5iaW5kKHRoaXMpfXN0YXRpY3tvKHRoaXMsIkNsYXNzREIiKX1zcGxpdENsYXNzTmFtZUFuZFR5cGUoZSl7bGV0IHI9WmUuc2FuaXRpemVUZXh0KGUsbWUoKSksbj0iIixpPXI7aWYoci5pbmRleE9mKCJ+Iik+MCl7bGV0IGE9ci5zcGxpdCgifiIpO2k9enAoYVswXSksbj16cChhWzFdKX1yZXR1cm57Y2xhc3NOYW1lOmksdHlwZTpufX1zZXRDbGFzc0xhYmVsKGUscil7bGV0IG49WmUuc2FuaXRpemVUZXh0KGUsbWUoKSk7ciYmKHI9enAocikpO2xldHtjbGFzc05hbWU6aX09dGhpcy5zcGxpdENsYXNzTmFtZUFuZFR5cGUobik7dGhpcy5jbGFzc2VzLmdldChpKS5sYWJlbD1yLHRoaXMuY2xhc3Nlcy5nZXQoaSkudGV4dD1gJHtyfSR7dGhpcy5jbGFzc2VzLmdldChpKS50eXBlP2A8JHt0aGlzLmNsYXNzZXMuZ2V0KGkpLnR5cGV9PmA6IiJ9YH1hZGRDbGFzcyhlKXtsZXQgcj1aZS5zYW5pdGl6ZVRleHQoZSxtZSgpKSx7Y2xhc3NOYW1lOm4sdHlwZTppfT10aGlzLnNwbGl0Q2xhc3NOYW1lQW5kVHlwZShyKTtpZih0aGlzLmNsYXNzZXMuaGFzKG4pKXJldHVybjtsZXQgYT1aZS5zYW5pdGl6ZVRleHQobixtZSgpKTt0aGlzLmNsYXNzZXMuc2V0KGEse2lkOmEsdHlwZTppLGxhYmVsOmEsdGV4dDpgJHthfSR7aT9gJmx0OyR7aX0mZ3Q7YDoiIn1gLHNoYXBlOiJjbGFzc0JveCIsY3NzQ2xhc3NlczoiZGVmYXVsdCIsbWV0aG9kczpbXSxtZW1iZXJzOltdLGFubm90YXRpb25zOltdLHN0eWxlczpbXSxkb21JZDpLUythKyItIitRZGV9KSxRZGUrK31hZGRJbnRlcmZhY2UoZSxyKXtsZXQgbj17aWQ6YGludGVyZmFjZSR7dGhpcy5pbnRlcmZhY2VzLmxlbmd0aH1gLGxhYmVsOmUsY2xhc3NJZDpyfTt0aGlzLmludGVyZmFjZXMucHVzaChuKX1sb29rVXBEb21JZChlKXtsZXQgcj1aZS5zYW5pdGl6ZVRleHQoZSxtZSgpKTtpZih0aGlzLmNsYXNzZXMuaGFzKHIpKXJldHVybiB0aGlzLmNsYXNzZXMuZ2V0KHIpLmRvbUlkO3Rocm93IG5ldyBFcnJvcigiQ2xhc3Mgbm90IGZvdW5kOiAiK3IpfWNsZWFyKCl7dGhpcy5yZWxhdGlvbnM9W10sdGhpcy5jbGFzc2VzPW5ldyBNYXAsdGhpcy5ub3Rlcz1bXSx0aGlzLmludGVyZmFjZXM9W10sdGhpcy5mdW5jdGlvbnM9W10sdGhpcy5mdW5jdGlvbnMucHVzaCh0aGlzLnNldHVwVG9vbFRpcHMuYmluZCh0aGlzKSksdGhpcy5uYW1lc3BhY2VzPW5ldyBNYXAsdGhpcy5uYW1lc3BhY2VDb3VudGVyPTAsdGhpcy5kaXJlY3Rpb249IlRCIixrcigpfWdldENsYXNzKGUpe3JldHVybiB0aGlzLmNsYXNzZXMuZ2V0KGUpfWdldENsYXNzZXMoKXtyZXR1cm4gdGhpcy5jbGFzc2VzfWdldFJlbGF0aW9ucygpe3JldHVybiB0aGlzLnJlbGF0aW9uc31nZXROb3Rlcygpe3JldHVybiB0aGlzLm5vdGVzfWFkZFJlbGF0aW9uKGUpe1guZGVidWcoIkFkZGluZyByZWxhdGlvbjogIitKU09OLnN0cmluZ2lmeShlKSk7bGV0IHI9W3RoaXMucmVsYXRpb25UeXBlLkxPTExJUE9QLHRoaXMucmVsYXRpb25UeXBlLkFHR1JFR0FUSU9OLHRoaXMucmVsYXRpb25UeXBlLkNPTVBPU0lUSU9OLHRoaXMucmVsYXRpb25UeXBlLkRFUEVOREVOQ1ksdGhpcy5yZWxhdGlvblR5cGUuRVhURU5TSU9OXTtlLnJlbGF0aW9uLnR5cGUxPT09dGhpcy5yZWxhdGlvblR5cGUuTE9MTElQT1AmJiFyLmluY2x1ZGVzKGUucmVsYXRpb24udHlwZTIpPyh0aGlzLmFkZENsYXNzKGUuaWQyKSx0aGlzLmFkZEludGVyZmFjZShlLmlkMSxlLmlkMiksZS5pZDE9YGludGVyZmFjZSR7dGhpcy5pbnRlcmZhY2VzLmxlbmd0aC0xfWApOmUucmVsYXRpb24udHlwZTI9PT10aGlzLnJlbGF0aW9uVHlwZS5MT0xMSVBPUCYmIXIuaW5jbHVkZXMoZS5yZWxhdGlvbi50eXBlMSk/KHRoaXMuYWRkQ2xhc3MoZS5pZDEpLHRoaXMuYWRkSW50ZXJmYWNlKGUuaWQyLGUuaWQxKSxlLmlkMj1gaW50ZXJmYWNlJHt0aGlzLmludGVyZmFjZXMubGVuZ3RoLTF9YCk6KHRoaXMuYWRkQ2xhc3MoZS5pZDEpLHRoaXMuYWRkQ2xhc3MoZS5pZDIpKSxlLmlkMT10aGlzLnNwbGl0Q2xhc3NOYW1lQW5kVHlwZShlLmlkMSkuY2xhc3NOYW1lLGUuaWQyPXRoaXMuc3BsaXRDbGFzc05hbWVBbmRUeXBlKGUuaWQyKS5jbGFzc05hbWUsZS5yZWxhdGlvblRpdGxlMT1aZS5zYW5pdGl6ZVRleHQoZS5yZWxhdGlvblRpdGxlMS50cmltKCksbWUoKSksZS5yZWxhdGlvblRpdGxlMj1aZS5zYW5pdGl6ZVRleHQoZS5yZWxhdGlvblRpdGxlMi50cmltKCksbWUoKSksdGhpcy5yZWxhdGlvbnMucHVzaChlKX1hZGRBbm5vdGF0aW9uKGUscil7bGV0IG49dGhpcy5zcGxpdENsYXNzTmFtZUFuZFR5cGUoZSkuY2xhc3NOYW1lO3RoaXMuY2xhc3Nlcy5nZXQobikuYW5ub3RhdGlvbnMucHVzaChyKX1hZGRNZW1iZXIoZSxyKXt0aGlzLmFkZENsYXNzKGUpO2xldCBuPXRoaXMuc3BsaXRDbGFzc05hbWVBbmRUeXBlKGUpLmNsYXNzTmFtZSxpPXRoaXMuY2xhc3Nlcy5nZXQobik7aWYodHlwZW9mIHI9PSJzdHJpbmciKXtsZXQgYT1yLnRyaW0oKTthLnN0YXJ0c1dpdGgoIjw8IikmJmEuZW5kc1dpdGgoIj4+Iik/aS5hbm5vdGF0aW9ucy5wdXNoKHpwKGEuc3Vic3RyaW5nKDIsYS5sZW5ndGgtMikpKTphLmluZGV4T2YoIikiKT4wP2kubWV0aG9kcy5wdXNoKG5ldyBJYihhLCJtZXRob2QiKSk6YSYmaS5tZW1iZXJzLnB1c2gobmV3IEliKGEsImF0dHJpYnV0ZSIpKX19YWRkTWVtYmVycyhlLHIpe0FycmF5LmlzQXJyYXkocikmJihyLnJldmVyc2UoKSxyLmZvckVhY2gobj0+dGhpcy5hZGRNZW1iZXIoZSxuKSkpfWFkZE5vdGUoZSxyKXtsZXQgbj17aWQ6YG5vdGUke3RoaXMubm90ZXMubGVuZ3RofWAsY2xhc3M6cix0ZXh0OmV9O3RoaXMubm90ZXMucHVzaChuKX1jbGVhbnVwTGFiZWwoZSl7cmV0dXJuIGUuc3RhcnRzV2l0aCgiOiIpJiYoZT1lLnN1YnN0cmluZygxKSksenAoZS50cmltKCkpfXNldENzc0NsYXNzKGUscil7ZS5zcGxpdCgiLCIpLmZvckVhY2gobj0+e2xldCBpPW47L1xkLy5leGVjKG5bMF0pJiYoaT1LUytpKTtsZXQgYT10aGlzLmNsYXNzZXMuZ2V0KGkpO2EmJihhLmNzc0NsYXNzZXMrPSIgIityKX0pfWRlZmluZUNsYXNzKGUscil7Zm9yKGxldCBuIG9mIGUpe2xldCBpPXRoaXMuc3R5bGVDbGFzc2VzLmdldChuKTtpPT09dm9pZCAwJiYoaT17aWQ6bixzdHlsZXM6W10sdGV4dFN0eWxlczpbXX0sdGhpcy5zdHlsZUNsYXNzZXMuc2V0KG4saSkpLHImJnIuZm9yRWFjaChhPT57aWYoL2NvbG9yLy5leGVjKGEpKXtsZXQgcz1hLnJlcGxhY2UoImZpbGwiLCJiZ0ZpbGwiKTtpLnRleHRTdHlsZXMucHVzaChzKX1pLnN0eWxlcy5wdXNoKGEpfSksdGhpcy5jbGFzc2VzLmZvckVhY2goYT0+e2EuY3NzQ2xhc3Nlcy5pbmNsdWRlcyhuKSYmYS5zdHlsZXMucHVzaCguLi5yLmZsYXRNYXAocz0+cy5zcGxpdCgiLCIpKSl9KX19c2V0VG9vbHRpcChlLHIpe2Uuc3BsaXQoIiwiKS5mb3JFYWNoKG49PntyIT09dm9pZCAwJiYodGhpcy5jbGFzc2VzLmdldChuKS50b29sdGlwPXpwKHIpKX0pfWdldFRvb2x0aXAoZSxyKXtyZXR1cm4gciYmdGhpcy5uYW1lc3BhY2VzLmhhcyhyKT90aGlzLm5hbWVzcGFjZXMuZ2V0KHIpLmNsYXNzZXMuZ2V0KGUpLnRvb2x0aXA6dGhpcy5jbGFzc2VzLmdldChlKS50b29sdGlwfXNldExpbmsoZSxyLG4pe2xldCBpPW1lKCk7ZS5zcGxpdCgiLCIpLmZvckVhY2goYT0+e2xldCBzPWE7L1xkLy5leGVjKGFbMF0pJiYocz1LUytzKTtsZXQgbD10aGlzLmNsYXNzZXMuZ2V0KHMpO2wmJihsLmxpbms9VnQuZm9ybWF0VXJsKHIsaSksaS5zZWN1cml0eUxldmVsPT09InNhbmRib3giP2wubGlua1RhcmdldD0iX3RvcCI6dHlwZW9mIG49PSJzdHJpbmciP2wubGlua1RhcmdldD16cChuKTpsLmxpbmtUYXJnZXQ9Il9ibGFuayIpfSksdGhpcy5zZXRDc3NDbGFzcyhlLCJjbGlja2FibGUiKX1zZXRDbGlja0V2ZW50KGUscixuKXtlLnNwbGl0KCIsIikuZm9yRWFjaChpPT57dGhpcy5zZXRDbGlja0Z1bmMoaSxyLG4pLHRoaXMuY2xhc3Nlcy5nZXQoaSkuaGF2ZUNhbGxiYWNrPSEwfSksdGhpcy5zZXRDc3NDbGFzcyhlLCJjbGlja2FibGUiKX1zZXRDbGlja0Z1bmMoZSxyLG4pe2xldCBpPVplLnNhbml0aXplVGV4dChlLG1lKCkpO2lmKG1lKCkuc2VjdXJpdHlMZXZlbCE9PSJsb29zZSJ8fHI9PT12b2lkIDApcmV0dXJuO2xldCBzPWk7aWYodGhpcy5jbGFzc2VzLmhhcyhzKSl7bGV0IGw9dGhpcy5sb29rVXBEb21JZChzKSx1PVtdO2lmKHR5cGVvZiBuPT0ic3RyaW5nIil7dT1uLnNwbGl0KC8sKD89KD86KD86W14iXSoiKXsyfSkqW14iXSokKS8pO2ZvcihsZXQgaD0wO2g8dS5sZW5ndGg7aCsrKXtsZXQgZj11W2hdLnRyaW0oKTtmLnN0YXJ0c1dpdGgoJyInKSYmZi5lbmRzV2l0aCgnIicpJiYoZj1mLnN1YnN0cigxLGYubGVuZ3RoLTIpKSx1W2hdPWZ9fXUubGVuZ3RoPT09MCYmdS5wdXNoKGwpLHRoaXMuZnVuY3Rpb25zLnB1c2goKCk9PntsZXQgaD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbaWQ9IiR7bH0iXWApO2ghPT1udWxsJiZoLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+e1Z0LnJ1bkZ1bmMociwuLi51KX0sITEpfSl9fWJpbmRGdW5jdGlvbnMoZSl7dGhpcy5mdW5jdGlvbnMuZm9yRWFjaChyPT57cihlKX0pfWdldERpcmVjdGlvbigpe3JldHVybiB0aGlzLmRpcmVjdGlvbn1zZXREaXJlY3Rpb24oZSl7dGhpcy5kaXJlY3Rpb249ZX1hZGROYW1lc3BhY2UoZSl7dGhpcy5uYW1lc3BhY2VzLmhhcyhlKXx8KHRoaXMubmFtZXNwYWNlcy5zZXQoZSx7aWQ6ZSxjbGFzc2VzOm5ldyBNYXAsY2hpbGRyZW46e30sZG9tSWQ6S1MrZSsiLSIrdGhpcy5uYW1lc3BhY2VDb3VudGVyfSksdGhpcy5uYW1lc3BhY2VDb3VudGVyKyspfWdldE5hbWVzcGFjZShlKXtyZXR1cm4gdGhpcy5uYW1lc3BhY2VzLmdldChlKX1nZXROYW1lc3BhY2VzKCl7cmV0dXJuIHRoaXMubmFtZXNwYWNlc31hZGRDbGFzc2VzVG9OYW1lc3BhY2UoZSxyKXtpZih0aGlzLm5hbWVzcGFjZXMuaGFzKGUpKWZvcihsZXQgbiBvZiByKXtsZXR7Y2xhc3NOYW1lOml9PXRoaXMuc3BsaXRDbGFzc05hbWVBbmRUeXBlKG4pO3RoaXMuY2xhc3Nlcy5nZXQoaSkucGFyZW50PWUsdGhpcy5uYW1lc3BhY2VzLmdldChlKS5jbGFzc2VzLnNldChpLHRoaXMuY2xhc3Nlcy5nZXQoaSkpfX1zZXRDc3NTdHlsZShlLHIpe2xldCBuPXRoaXMuY2xhc3Nlcy5nZXQoZSk7aWYoISghcnx8IW4pKWZvcihsZXQgaSBvZiByKWkuaW5jbHVkZXMoIiwiKT9uLnN0eWxlcy5wdXNoKC4uLmkuc3BsaXQoIiwiKSk6bi5zdHlsZXMucHVzaChpKX1nZXRBcnJvd01hcmtlcihlKXtsZXQgcjtzd2l0Y2goZSl7Y2FzZSAwOnI9ImFnZ3JlZ2F0aW9uIjticmVhaztjYXNlIDE6cj0iZXh0ZW5zaW9uIjticmVhaztjYXNlIDI6cj0iY29tcG9zaXRpb24iO2JyZWFrO2Nhc2UgMzpyPSJkZXBlbmRlbmN5IjticmVhaztjYXNlIDQ6cj0ibG9sbGlwb3AiO2JyZWFrO2RlZmF1bHQ6cj0ibm9uZSJ9cmV0dXJuIHJ9Z2V0RGF0YSgpe2xldCBlPVtdLHI9W10sbj1tZSgpO2ZvcihsZXQgYSBvZiB0aGlzLm5hbWVzcGFjZXMua2V5cygpKXtsZXQgcz10aGlzLm5hbWVzcGFjZXMuZ2V0KGEpO2lmKHMpe2xldCBsPXtpZDpzLmlkLGxhYmVsOnMuaWQsaXNHcm91cDohMCxwYWRkaW5nOm4uY2xhc3MucGFkZGluZz8/MTYsc2hhcGU6InJlY3QiLGNzc1N0eWxlczpbImZpbGw6IG5vbmUiLCJzdHJva2U6IGJsYWNrIl0sbG9vazpuLmxvb2t9O2UucHVzaChsKX19Zm9yKGxldCBhIG9mIHRoaXMuY2xhc3Nlcy5rZXlzKCkpe2xldCBzPXRoaXMuY2xhc3Nlcy5nZXQoYSk7aWYocyl7bGV0IGw9cztsLnBhcmVudElkPXMucGFyZW50LGwubG9vaz1uLmxvb2ssZS5wdXNoKGwpfX1sZXQgaT0wO2ZvcihsZXQgYSBvZiB0aGlzLm5vdGVzKXtpKys7bGV0IHM9e2lkOmEuaWQsbGFiZWw6YS50ZXh0LGlzR3JvdXA6ITEsc2hhcGU6Im5vdGUiLHBhZGRpbmc6bi5jbGFzcy5wYWRkaW5nPz82LGNzc1N0eWxlczpbInRleHQtYWxpZ246IGxlZnQiLCJ3aGl0ZS1zcGFjZTogbm93cmFwIixgZmlsbDogJHtuLnRoZW1lVmFyaWFibGVzLm5vdGVCa2dDb2xvcn1gLGBzdHJva2U6ICR7bi50aGVtZVZhcmlhYmxlcy5ub3RlQm9yZGVyQ29sb3J9YF0sbG9vazpuLmxvb2t9O2UucHVzaChzKTtsZXQgbD10aGlzLmNsYXNzZXMuZ2V0KGEuY2xhc3MpPy5pZD8/IiI7aWYobCl7bGV0IHU9e2lkOmBlZGdlTm90ZSR7aX1gLHN0YXJ0OmEuaWQsZW5kOmwsdHlwZToibm9ybWFsIix0aGlja25lc3M6Im5vcm1hbCIsY2xhc3NlczoicmVsYXRpb24iLGFycm93VHlwZVN0YXJ0OiJub25lIixhcnJvd1R5cGVFbmQ6Im5vbmUiLGFycm93aGVhZFN0eWxlOiIiLGxhYmVsU3R5bGU6WyIiXSxzdHlsZTpbImZpbGw6IG5vbmUiXSxwYXR0ZXJuOiJkb3R0ZWQiLGxvb2s6bi5sb29rfTtyLnB1c2godSl9fWZvcihsZXQgYSBvZiB0aGlzLmludGVyZmFjZXMpe2xldCBzPXtpZDphLmlkLGxhYmVsOmEubGFiZWwsaXNHcm91cDohMSxzaGFwZToicmVjdCIsY3NzU3R5bGVzOlsib3BhY2l0eTogMDsiXSxsb29rOm4ubG9va307ZS5wdXNoKHMpfWk9MDtmb3IobGV0IGEgb2YgdGhpcy5yZWxhdGlvbnMpe2krKztsZXQgcz17aWQ6V2goYS5pZDEsYS5pZDIse3ByZWZpeDoiaWQiLGNvdW50ZXI6aX0pLHN0YXJ0OmEuaWQxLGVuZDphLmlkMix0eXBlOiJub3JtYWwiLGxhYmVsOmEudGl0bGUsbGFiZWxwb3M6ImMiLHRoaWNrbmVzczoibm9ybWFsIixjbGFzc2VzOiJyZWxhdGlvbiIsYXJyb3dUeXBlU3RhcnQ6dGhpcy5nZXRBcnJvd01hcmtlcihhLnJlbGF0aW9uLnR5cGUxKSxhcnJvd1R5cGVFbmQ6dGhpcy5nZXRBcnJvd01hcmtlcihhLnJlbGF0aW9uLnR5cGUyKSxzdGFydExhYmVsUmlnaHQ6YS5yZWxhdGlvblRpdGxlMT09PSJub25lIj8iIjphLnJlbGF0aW9uVGl0bGUxLGVuZExhYmVsTGVmdDphLnJlbGF0aW9uVGl0bGUyPT09Im5vbmUiPyIiOmEucmVsYXRpb25UaXRsZTIsYXJyb3doZWFkU3R5bGU6IiIsbGFiZWxTdHlsZTpbImRpc3BsYXk6IGlubGluZS1ibG9jayJdLHN0eWxlOmEuc3R5bGV8fCIiLHBhdHRlcm46YS5yZWxhdGlvbi5saW5lVHlwZT09MT8iZGFzaGVkIjoic29saWQiLGxvb2s6bi5sb29rfTtyLnB1c2gocyl9cmV0dXJue25vZGVzOmUsZWRnZXM6cixvdGhlcjp7fSxjb25maWc6bixkaXJlY3Rpb246dGhpcy5nZXREaXJlY3Rpb24oKX19fX0pO3ZhciBrSGUsUVMsa1A9TigoKT0+eyJ1c2Ugc3RyaWN0IjtYbSgpO2tIZT1vKHQ9PmBnLmNsYXNzR3JvdXAgdGV4dCB7CiAgZmlsbDogJHt0Lm5vZGVCb3JkZXJ8fHQuY2xhc3NUZXh0fTsKICBzdHJva2U6IG5vbmU7CiAgZm9udC1mYW1pbHk6ICR7dC5mb250RmFtaWx5fTsKICBmb250LXNpemU6IDEwcHg7CgogIC50aXRsZSB7CiAgICBmb250LXdlaWdodDogYm9sZGVyOwogIH0KCn0KCi5ub2RlTGFiZWwsIC5lZGdlTGFiZWwgewogIGNvbG9yOiAke3QuY2xhc3NUZXh0fTsKfQouZWRnZUxhYmVsIC5sYWJlbCByZWN0IHsKICBmaWxsOiAke3QubWFpbkJrZ307Cn0KLmxhYmVsIHRleHQgewogIGZpbGw6ICR7dC5jbGFzc1RleHR9Owp9CgoubGFiZWxCa2cgewogIGJhY2tncm91bmQ6ICR7dC5tYWluQmtnfTsKfQouZWRnZUxhYmVsIC5sYWJlbCBzcGFuIHsKICBiYWNrZ3JvdW5kOiAke3QubWFpbkJrZ307Cn0KCi5jbGFzc1RpdGxlIHsKICBmb250LXdlaWdodDogYm9sZGVyOwp9Ci5ub2RlIHJlY3QsCiAgLm5vZGUgY2lyY2xlLAogIC5ub2RlIGVsbGlwc2UsCiAgLm5vZGUgcG9seWdvbiwKICAubm9kZSBwYXRoIHsKICAgIGZpbGw6ICR7dC5tYWluQmtnfTsKICAgIHN0cm9rZTogJHt0Lm5vZGVCb3JkZXJ9OwogICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgfQoKCi5kaXZpZGVyIHsKICBzdHJva2U6ICR7dC5ub2RlQm9yZGVyfTsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCmcuY2xpY2thYmxlIHsKICBjdXJzb3I6IHBvaW50ZXI7Cn0KCmcuY2xhc3NHcm91cCByZWN0IHsKICBmaWxsOiAke3QubWFpbkJrZ307CiAgc3Ryb2tlOiAke3Qubm9kZUJvcmRlcn07Cn0KCmcuY2xhc3NHcm91cCBsaW5lIHsKICBzdHJva2U6ICR7dC5ub2RlQm9yZGVyfTsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCi5jbGFzc0xhYmVsIC5ib3ggewogIHN0cm9rZTogbm9uZTsKICBzdHJva2Utd2lkdGg6IDA7CiAgZmlsbDogJHt0Lm1haW5Ca2d9OwogIG9wYWNpdHk6IDAuNTsKfQoKLmNsYXNzTGFiZWwgLmxhYmVsIHsKICBmaWxsOiAke3Qubm9kZUJvcmRlcn07CiAgZm9udC1zaXplOiAxMHB4Owp9CgoucmVsYXRpb24gewogIHN0cm9rZTogJHt0LmxpbmVDb2xvcn07CiAgc3Ryb2tlLXdpZHRoOiAxOwogIGZpbGw6IG5vbmU7Cn0KCi5kYXNoZWQtbGluZXsKICBzdHJva2UtZGFzaGFycmF5OiAzOwp9CgouZG90dGVkLWxpbmV7CiAgc3Ryb2tlLWRhc2hhcnJheTogMSAyOwp9CgojY29tcG9zaXRpb25TdGFydCwgLmNvbXBvc2l0aW9uIHsKICBmaWxsOiAke3QubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZTogJHt0LmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNjb21wb3NpdGlvbkVuZCwgLmNvbXBvc2l0aW9uIHsKICBmaWxsOiAke3QubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZTogJHt0LmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNkZXBlbmRlbmN5U3RhcnQsIC5kZXBlbmRlbmN5IHsKICBmaWxsOiAke3QubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZTogJHt0LmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNkZXBlbmRlbmN5U3RhcnQsIC5kZXBlbmRlbmN5IHsKICBmaWxsOiAke3QubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZTogJHt0LmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNleHRlbnNpb25TdGFydCwgLmV4dGVuc2lvbiB7CiAgZmlsbDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICBzdHJva2U6ICR7dC5saW5lQ29sb3J9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlLXdpZHRoOiAxOwp9CgojZXh0ZW5zaW9uRW5kLCAuZXh0ZW5zaW9uIHsKICBmaWxsOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogIHN0cm9rZTogJHt0LmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCiNhZ2dyZWdhdGlvblN0YXJ0LCAuYWdncmVnYXRpb24gewogIGZpbGw6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlOiAke3QubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZS13aWR0aDogMTsKfQoKI2FnZ3JlZ2F0aW9uRW5kLCAuYWdncmVnYXRpb24gewogIGZpbGw6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlOiAke3QubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZS13aWR0aDogMTsKfQoKI2xvbGxpcG9wU3RhcnQsIC5sb2xsaXBvcCB7CiAgZmlsbDogJHt0Lm1haW5Ca2d9ICFpbXBvcnRhbnQ7CiAgc3Ryb2tlOiAke3QubGluZUNvbG9yfSAhaW1wb3J0YW50OwogIHN0cm9rZS13aWR0aDogMTsKfQoKI2xvbGxpcG9wRW5kLCAubG9sbGlwb3AgewogIGZpbGw6ICR7dC5tYWluQmtnfSAhaW1wb3J0YW50OwogIHN0cm9rZTogJHt0LmxpbmVDb2xvcn0gIWltcG9ydGFudDsKICBzdHJva2Utd2lkdGg6IDE7Cn0KCi5lZGdlVGVybWluYWxzIHsKICBmb250LXNpemU6IDExcHg7CiAgbGluZS1oZWlnaHQ6IGluaXRpYWw7Cn0KCi5jbGFzc1RpdGxlVGV4dCB7CiAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICBmb250LXNpemU6IDE4cHg7CiAgZmlsbDogJHt0LnRleHRDb2xvcn07Cn0KICAke05jKCl9CmAsImdldFN0eWxlcyIpLFFTPWtIZX0pO3ZhciBFSGUsU0hlLENIZSxaUyxFUD1OKCgpPT57InVzZSBzdHJpY3QiO0d0KCk7eXQoKTtTbSgpO3JwKCk7bnAoKTtlcigpO0VIZT1vKCh0LGU9IlRCIik9PntpZighdC5kb2MpcmV0dXJuIGU7bGV0IHI9ZTtmb3IobGV0IG4gb2YgdC5kb2Mpbi5zdG10PT09ImRpciImJihyPW4udmFsdWUpO3JldHVybiByfSwiZ2V0RGlyIiksU0hlPW8oZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5kYi5nZXRDbGFzc2VzKCl9LCJnZXRDbGFzc2VzIiksQ0hlPW8oYXN5bmMgZnVuY3Rpb24odCxlLHIsbil7WC5pbmZvKCJSRUYwOiIpLFguaW5mbygiRHJhd2luZyBjbGFzcyBkaWFncmFtICh2MykiLGUpO2xldHtzZWN1cml0eUxldmVsOmksc3RhdGU6YSxsYXlvdXQ6c309bWUoKSxsPW4uZGIuZ2V0RGF0YSgpLHU9d2MoZSxpKTtsLnR5cGU9bi50eXBlLGwubGF5b3V0QWxnb3JpdGhtPXVmKHMpLGwubm9kZVNwYWNpbmc9YT8ubm9kZVNwYWNpbmd8fDUwLGwucmFua1NwYWNpbmc9YT8ucmFua1NwYWNpbmd8fDUwLGwubWFya2Vycz1bImFnZ3JlZ2F0aW9uIiwiZXh0ZW5zaW9uIiwiY29tcG9zaXRpb24iLCJkZXBlbmRlbmN5IiwibG9sbGlwb3AiXSxsLmRpYWdyYW1JZD1lLGF3YWl0IFJjKGwsdSk7bGV0IGg9ODtWdC5pbnNlcnRUaXRsZSh1LCJjbGFzc0RpYWdyYW1UaXRsZVRleHQiLGE/LnRpdGxlVG9wTWFyZ2luPz8yNSxuLmRiLmdldERpYWdyYW1UaXRsZSgpKSxZbyh1LGgsImNsYXNzRGlhZ3JhbSIsYT8udXNlTWF4V2lkdGg/PyEwKX0sImRyYXciKSxaUz17Z2V0Q2xhc3NlczpTSGUsZHJhdzpDSGUsZ2V0RGlyOkVIZX19KTt2YXIgWmRlPXt9O3VyKFpkZSx7ZGlhZ3JhbTooKT0+QUhlfSk7dmFyIEFIZSxKZGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtUUCgpO3dQKCk7a1AoKTtFUCgpO0FIZT17cGFyc2VyOmpTLGdldCBkYigpe3JldHVybiBuZXcgUDF9LHJlbmRlcmVyOlpTLHN0eWxlczpRUyxpbml0Om8odD0+e3QuY2xhc3N8fCh0LmNsYXNzPXt9KSx0LmNsYXNzLmFycm93TWFya2VyQWJzb2x1dGU9dC5hcnJvd01hcmtlckFic29sdXRlfSwiaW5pdCIpfX0pO3ZhciBycGU9e307dXIocnBlLHtkaWFncmFtOigpPT5SSGV9KTt2YXIgUkhlLG5wZT1OKCgpPT57InVzZSBzdHJpY3QiO1RQKCk7d1AoKTtrUCgpO0VQKCk7UkhlPXtwYXJzZXI6alMsZ2V0IGRiKCl7cmV0dXJuIG5ldyBQMX0scmVuZGVyZXI6WlMsc3R5bGVzOlFTLGluaXQ6byh0PT57dC5jbGFzc3x8KHQuY2xhc3M9e30pLHQuY2xhc3MuYXJyb3dNYXJrZXJBYnNvbHV0ZT10LmFycm93TWFya2VyQWJzb2x1dGV9LCJpbml0Iil9fSk7dmFyIFNQLEpTLENQPU4oKCk9PnsidXNlIHN0cmljdCI7U1A9ZnVuY3Rpb24oKXt2YXIgdD1vKGZ1bmN0aW9uKEYseiwkLFUpe2ZvcigkPSR8fHt9LFU9Ri5sZW5ndGg7VS0tOyRbRltVXV09eik7cmV0dXJuICR9LCJvIiksZT1bMSwyXSxyPVsxLDNdLG49WzEsNF0saT1bMiw0XSxhPVsxLDldLHM9WzEsMTFdLGw9WzEsMTZdLHU9WzEsMTddLGg9WzEsMThdLGY9WzEsMTldLGQ9WzEsMzNdLHA9WzEsMjBdLG09WzEsMjFdLGc9WzEsMjJdLHk9WzEsMjNdLHY9WzEsMjRdLHg9WzEsMjZdLGI9WzEsMjddLFQ9WzEsMjhdLFM9WzEsMjldLHc9WzEsMzBdLEU9WzEsMzFdLF89WzEsMzJdLEM9WzEsMzVdLEQ9WzEsMzZdLE89WzEsMzddLFI9WzEsMzhdLGs9WzEsMzRdLEw9WzEsNCw1LDE2LDE3LDE5LDIxLDIyLDI0LDI1LDI2LDI3LDI4LDI5LDMzLDM1LDM3LDM4LDQxLDQ1LDQ4LDUxLDUyLDUzLDU0LDU3XSxBPVsxLDQsNSwxNCwxNSwxNiwxNywxOSwyMSwyMiwyNCwyNSwyNiwyNywyOCwyOSwzMywzNSwzNywzOCwzOSw0MCw0MSw0NSw0OCw1MSw1Miw1Myw1NCw1N10sST1bNCw1LDE2LDE3LDE5LDIxLDIyLDI0LDI1LDI2LDI3LDI4LDI5LDMzLDM1LDM3LDM4LDQxLDQ1LDQ4LDUxLDUyLDUzLDU0LDU3XSxNPXt0cmFjZTpvKGZ1bmN0aW9uKCl7fSwidHJhY2UiKSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLFNQQUNFOjQsTkw6NSxTRDo2LGRvY3VtZW50OjcsbGluZTo4LHN0YXRlbWVudDo5LGNsYXNzRGVmU3RhdGVtZW50OjEwLHN0eWxlU3RhdGVtZW50OjExLGNzc0NsYXNzU3RhdGVtZW50OjEyLGlkU3RhdGVtZW50OjEzLERFU0NSOjE0LCItLT4iOjE1LEhJREVfRU1QVFk6MTYsc2NhbGU6MTcsV0lEVEg6MTgsQ09NUE9TSVRfU1RBVEU6MTksU1RSVUNUX1NUQVJUOjIwLFNUUlVDVF9TVE9QOjIxLFNUQVRFX0RFU0NSOjIyLEFTOjIzLElEOjI0LEZPUks6MjUsSk9JTjoyNixDSE9JQ0U6MjcsQ09OQ1VSUkVOVDoyOCxub3RlOjI5LG5vdGVQb3NpdGlvbjozMCxOT1RFX1RFWFQ6MzEsZGlyZWN0aW9uOjMyLGFjY190aXRsZTozMyxhY2NfdGl0bGVfdmFsdWU6MzQsYWNjX2Rlc2NyOjM1LGFjY19kZXNjcl92YWx1ZTozNixhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjM3LENMSUNLOjM4LFNUUklORzozOSxIUkVGOjQwLGNsYXNzRGVmOjQxLENMQVNTREVGX0lEOjQyLENMQVNTREVGX1NUWUxFT1BUUzo0MyxERUZBVUxUOjQ0LHN0eWxlOjQ1LFNUWUxFX0lEUzo0NixTVFlMRURFRl9TVFlMRU9QVFM6NDcsY2xhc3M6NDgsQ0xBU1NFTlRJVFlfSURTOjQ5LFNUWUxFQ0xBU1M6NTAsZGlyZWN0aW9uX3RiOjUxLGRpcmVjdGlvbl9idDo1MixkaXJlY3Rpb25fcmw6NTMsZGlyZWN0aW9uX2xyOjU0LGVvbDo1NSwiOyI6NTYsRURHRV9TVEFURTo1NyxTVFlMRV9TRVBBUkFUT1I6NTgsbGVmdF9vZjo1OSxyaWdodF9vZjo2MCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiU1BBQ0UiLDU6Ik5MIiw2OiJTRCIsMTQ6IkRFU0NSIiwxNToiLS0+IiwxNjoiSElERV9FTVBUWSIsMTc6InNjYWxlIiwxODoiV0lEVEgiLDE5OiJDT01QT1NJVF9TVEFURSIsMjA6IlNUUlVDVF9TVEFSVCIsMjE6IlNUUlVDVF9TVE9QIiwyMjoiU1RBVEVfREVTQ1IiLDIzOiJBUyIsMjQ6IklEIiwyNToiRk9SSyIsMjY6IkpPSU4iLDI3OiJDSE9JQ0UiLDI4OiJDT05DVVJSRU5UIiwyOToibm90ZSIsMzE6Ik5PVEVfVEVYVCIsMzM6ImFjY190aXRsZSIsMzQ6ImFjY190aXRsZV92YWx1ZSIsMzU6ImFjY19kZXNjciIsMzY6ImFjY19kZXNjcl92YWx1ZSIsMzc6ImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiLDM4OiJDTElDSyIsMzk6IlNUUklORyIsNDA6IkhSRUYiLDQxOiJjbGFzc0RlZiIsNDI6IkNMQVNTREVGX0lEIiw0MzoiQ0xBU1NERUZfU1RZTEVPUFRTIiw0NDoiREVGQVVMVCIsNDU6InN0eWxlIiw0NjoiU1RZTEVfSURTIiw0NzoiU1RZTEVERUZfU1RZTEVPUFRTIiw0ODoiY2xhc3MiLDQ5OiJDTEFTU0VOVElUWV9JRFMiLDUwOiJTVFlMRUNMQVNTIiw1MToiZGlyZWN0aW9uX3RiIiw1MjoiZGlyZWN0aW9uX2J0Iiw1MzoiZGlyZWN0aW9uX3JsIiw1NDoiZGlyZWN0aW9uX2xyIiw1NjoiOyIsNTc6IkVER0VfU1RBVEUiLDU4OiJTVFlMRV9TRVBBUkFUT1IiLDU5OiJsZWZ0X29mIiw2MDoicmlnaHRfb2YifSxwcm9kdWN0aW9uc186WzAsWzMsMl0sWzMsMl0sWzMsMl0sWzcsMF0sWzcsMl0sWzgsMl0sWzgsMV0sWzgsMV0sWzksMV0sWzksMV0sWzksMV0sWzksMV0sWzksMl0sWzksM10sWzksNF0sWzksMV0sWzksMl0sWzksMV0sWzksNF0sWzksM10sWzksNl0sWzksMV0sWzksMV0sWzksMV0sWzksMV0sWzksNF0sWzksNF0sWzksMV0sWzksMl0sWzksMl0sWzksMV0sWzksNV0sWzksNV0sWzEwLDNdLFsxMCwzXSxbMTEsM10sWzEyLDNdLFszMiwxXSxbMzIsMV0sWzMyLDFdLFszMiwxXSxbNTUsMV0sWzU1LDFdLFsxMywxXSxbMTMsMV0sWzEzLDNdLFsxMywzXSxbMzAsMV0sWzMwLDFdXSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24oeiwkLFUsSyxlZSxZLGNlKXt2YXIgWj1ZLmxlbmd0aC0xO3N3aXRjaChlZSl7Y2FzZSAzOnJldHVybiBLLnNldFJvb3REb2MoWVtaXSksWVtaXTticmVhaztjYXNlIDQ6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgNTpZW1pdIT0ibmwiJiYoWVtaLTFdLnB1c2goWVtaXSksdGhpcy4kPVlbWi0xXSk7YnJlYWs7Y2FzZSA2OmNhc2UgNzp0aGlzLiQ9WVtaXTticmVhaztjYXNlIDg6dGhpcy4kPSJubCI7YnJlYWs7Y2FzZSAxMjp0aGlzLiQ9WVtaXTticmVhaztjYXNlIDEzOmxldCBuZT1ZW1otMV07bmUuZGVzY3JpcHRpb249Sy50cmltQ29sb24oWVtaXSksdGhpcy4kPW5lO2JyZWFrO2Nhc2UgMTQ6dGhpcy4kPXtzdG10OiJyZWxhdGlvbiIsc3RhdGUxOllbWi0yXSxzdGF0ZTI6WVtaXX07YnJlYWs7Y2FzZSAxNTpsZXQgdGU9Sy50cmltQ29sb24oWVtaXSk7dGhpcy4kPXtzdG10OiJyZWxhdGlvbiIsc3RhdGUxOllbWi0zXSxzdGF0ZTI6WVtaLTFdLGRlc2NyaXB0aW9uOnRlfTticmVhaztjYXNlIDE5OnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOllbWi0zXSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjoiIixkb2M6WVtaLTFdfTticmVhaztjYXNlIDIwOnZhciB1ZT1ZW1pdLFE9WVtaLTJdLnRyaW0oKTtpZihZW1pdLm1hdGNoKCI6Iikpe3ZhciBqPVlbWl0uc3BsaXQoIjoiKTt1ZT1qWzBdLFE9W1EsalsxXV19dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6dWUsdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246UX07YnJlYWs7Y2FzZSAyMTp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpZW1otM10sdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246WVtaLTVdLGRvYzpZW1otMV19O2JyZWFrO2Nhc2UgMjI6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6WVtaXSx0eXBlOiJmb3JrIn07YnJlYWs7Y2FzZSAyMzp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpZW1pdLHR5cGU6ImpvaW4ifTticmVhaztjYXNlIDI0OnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOllbWl0sdHlwZToiY2hvaWNlIn07YnJlYWs7Y2FzZSAyNTp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpLLmdldERpdmlkZXJJZCgpLHR5cGU6ImRpdmlkZXIifTticmVhaztjYXNlIDI2OnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOllbWi0xXS50cmltKCksbm90ZTp7cG9zaXRpb246WVtaLTJdLnRyaW0oKSx0ZXh0OllbWl0udHJpbSgpfX07YnJlYWs7Y2FzZSAyOTp0aGlzLiQ9WVtaXS50cmltKCksSy5zZXRBY2NUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMzA6Y2FzZSAzMTp0aGlzLiQ9WVtaXS50cmltKCksSy5zZXRBY2NEZXNjcmlwdGlvbih0aGlzLiQpO2JyZWFrO2Nhc2UgMzI6dGhpcy4kPXtzdG10OiJjbGljayIsaWQ6WVtaLTNdLHVybDpZW1otMl0sdG9vbHRpcDpZW1otMV19O2JyZWFrO2Nhc2UgMzM6dGhpcy4kPXtzdG10OiJjbGljayIsaWQ6WVtaLTNdLHVybDpZW1otMV0sdG9vbHRpcDoiIn07YnJlYWs7Y2FzZSAzNDpjYXNlIDM1OnRoaXMuJD17c3RtdDoiY2xhc3NEZWYiLGlkOllbWi0xXS50cmltKCksY2xhc3NlczpZW1pdLnRyaW0oKX07YnJlYWs7Y2FzZSAzNjp0aGlzLiQ9e3N0bXQ6InN0eWxlIixpZDpZW1otMV0udHJpbSgpLHN0eWxlQ2xhc3M6WVtaXS50cmltKCl9O2JyZWFrO2Nhc2UgMzc6dGhpcy4kPXtzdG10OiJhcHBseUNsYXNzIixpZDpZW1otMV0udHJpbSgpLHN0eWxlQ2xhc3M6WVtaXS50cmltKCl9O2JyZWFrO2Nhc2UgMzg6Sy5zZXREaXJlY3Rpb24oIlRCIiksdGhpcy4kPXtzdG10OiJkaXIiLHZhbHVlOiJUQiJ9O2JyZWFrO2Nhc2UgMzk6Sy5zZXREaXJlY3Rpb24oIkJUIiksdGhpcy4kPXtzdG10OiJkaXIiLHZhbHVlOiJCVCJ9O2JyZWFrO2Nhc2UgNDA6Sy5zZXREaXJlY3Rpb24oIlJMIiksdGhpcy4kPXtzdG10OiJkaXIiLHZhbHVlOiJSTCJ9O2JyZWFrO2Nhc2UgNDE6Sy5zZXREaXJlY3Rpb24oIkxSIiksdGhpcy4kPXtzdG10OiJkaXIiLHZhbHVlOiJMUiJ9O2JyZWFrO2Nhc2UgNDQ6Y2FzZSA0NTp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpZW1pdLnRyaW0oKSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjoiIn07YnJlYWs7Y2FzZSA0Njp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpZW1otMl0udHJpbSgpLGNsYXNzZXM6W1lbWl0udHJpbSgpXSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjoiIn07YnJlYWs7Y2FzZSA0Nzp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpZW1otMl0udHJpbSgpLGNsYXNzZXM6W1lbWl0udHJpbSgpXSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjoiIn07YnJlYWt9fSwiYW5vbnltb3VzIiksdGFibGU6W3szOjEsNDplLDU6ciw2Om59LHsxOlszXX0sezM6NSw0OmUsNTpyLDY6bn0sezM6Niw0OmUsNTpyLDY6bn0sdChbMSw0LDUsMTYsMTcsMTksMjIsMjQsMjUsMjYsMjcsMjgsMjksMzMsMzUsMzcsMzgsNDEsNDUsNDgsNTEsNTIsNTMsNTQsNTddLGksezc6N30pLHsxOlsyLDFdfSx7MTpbMiwyXX0sezE6WzIsM10sNDphLDU6cyw4OjgsOToxMCwxMDoxMiwxMToxMywxMjoxNCwxMzoxNSwxNjpsLDE3OnUsMTk6aCwyMjpmLDI0OmQsMjU6cCwyNjptLDI3OmcsMjg6eSwyOTp2LDMyOjI1LDMzOngsMzU6YiwzNzpULDM4OlMsNDE6dyw0NTpFLDQ4Ol8sNTE6Qyw1MjpELDUzOk8sNTQ6Uiw1NzprfSx0KEwsWzIsNV0pLHs5OjM5LDEwOjEyLDExOjEzLDEyOjE0LDEzOjE1LDE2OmwsMTc6dSwxOTpoLDIyOmYsMjQ6ZCwyNTpwLDI2Om0sMjc6ZywyODp5LDI5OnYsMzI6MjUsMzM6eCwzNTpiLDM3OlQsMzg6Uyw0MTp3LDQ1OkUsNDg6Xyw1MTpDLDUyOkQsNTM6Tyw1NDpSLDU3Omt9LHQoTCxbMiw3XSksdChMLFsyLDhdKSx0KEwsWzIsOV0pLHQoTCxbMiwxMF0pLHQoTCxbMiwxMV0pLHQoTCxbMiwxMl0sezE0OlsxLDQwXSwxNTpbMSw0MV19KSx0KEwsWzIsMTZdKSx7MTg6WzEsNDJdfSx0KEwsWzIsMThdLHsyMDpbMSw0M119KSx7MjM6WzEsNDRdfSx0KEwsWzIsMjJdKSx0KEwsWzIsMjNdKSx0KEwsWzIsMjRdKSx0KEwsWzIsMjVdKSx7MzA6NDUsMzE6WzEsNDZdLDU5OlsxLDQ3XSw2MDpbMSw0OF19LHQoTCxbMiwyOF0pLHszNDpbMSw0OV19LHszNjpbMSw1MF19LHQoTCxbMiwzMV0pLHsxMzo1MSwyNDpkLDU3Omt9LHs0MjpbMSw1Ml0sNDQ6WzEsNTNdfSx7NDY6WzEsNTRdfSx7NDk6WzEsNTVdfSx0KEEsWzIsNDRdLHs1ODpbMSw1Nl19KSx0KEEsWzIsNDVdLHs1ODpbMSw1N119KSx0KEwsWzIsMzhdKSx0KEwsWzIsMzldKSx0KEwsWzIsNDBdKSx0KEwsWzIsNDFdKSx0KEwsWzIsNl0pLHQoTCxbMiwxM10pLHsxMzo1OCwyNDpkLDU3Omt9LHQoTCxbMiwxN10pLHQoSSxpLHs3OjU5fSksezI0OlsxLDYwXX0sezI0OlsxLDYxXX0sezIzOlsxLDYyXX0sezI0OlsyLDQ4XX0sezI0OlsyLDQ5XX0sdChMLFsyLDI5XSksdChMLFsyLDMwXSksezM5OlsxLDYzXSw0MDpbMSw2NF19LHs0MzpbMSw2NV19LHs0MzpbMSw2Nl19LHs0NzpbMSw2N119LHs1MDpbMSw2OF19LHsyNDpbMSw2OV19LHsyNDpbMSw3MF19LHQoTCxbMiwxNF0sezE0OlsxLDcxXX0pLHs0OmEsNTpzLDg6OCw5OjEwLDEwOjEyLDExOjEzLDEyOjE0LDEzOjE1LDE2OmwsMTc6dSwxOTpoLDIxOlsxLDcyXSwyMjpmLDI0OmQsMjU6cCwyNjptLDI3OmcsMjg6eSwyOTp2LDMyOjI1LDMzOngsMzU6YiwzNzpULDM4OlMsNDE6dyw0NTpFLDQ4Ol8sNTE6Qyw1MjpELDUzOk8sNTQ6Uiw1NzprfSx0KEwsWzIsMjBdLHsyMDpbMSw3M119KSx7MzE6WzEsNzRdfSx7MjQ6WzEsNzVdfSx7Mzk6WzEsNzZdfSx7Mzk6WzEsNzddfSx0KEwsWzIsMzRdKSx0KEwsWzIsMzVdKSx0KEwsWzIsMzZdKSx0KEwsWzIsMzddKSx0KEEsWzIsNDZdKSx0KEEsWzIsNDddKSx0KEwsWzIsMTVdKSx0KEwsWzIsMTldKSx0KEksaSx7Nzo3OH0pLHQoTCxbMiwyNl0pLHQoTCxbMiwyN10pLHs1OlsxLDc5XX0sezU6WzEsODBdfSx7NDphLDU6cyw4OjgsOToxMCwxMDoxMiwxMToxMywxMjoxNCwxMzoxNSwxNjpsLDE3OnUsMTk6aCwyMTpbMSw4MV0sMjI6ZiwyNDpkLDI1OnAsMjY6bSwyNzpnLDI4OnksMjk6diwzMjoyNSwzMzp4LDM1OmIsMzc6VCwzODpTLDQxOncsNDU6RSw0ODpfLDUxOkMsNTI6RCw1MzpPLDU0OlIsNTc6a30sdChMLFsyLDMyXSksdChMLFsyLDMzXSksdChMLFsyLDIxXSldLGRlZmF1bHRBY3Rpb25zOns1OlsyLDFdLDY6WzIsMl0sNDc6WzIsNDhdLDQ4OlsyLDQ5XX0scGFyc2VFcnJvcjpvKGZ1bmN0aW9uKHosJCl7aWYoJC5yZWNvdmVyYWJsZSl0aGlzLnRyYWNlKHopO2Vsc2V7dmFyIFU9bmV3IEVycm9yKHopO3Rocm93IFUuaGFzaD0kLFV9fSwicGFyc2VFcnJvciIpLHBhcnNlOm8oZnVuY3Rpb24oeil7dmFyICQ9dGhpcyxVPVswXSxLPVtdLGVlPVtudWxsXSxZPVtdLGNlPXRoaXMudGFibGUsWj0iIix1ZT0wLFE9MCxqPTAsbmU9Mix0ZT0xLGhlPVkuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksbGU9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxKPXt5eTp7fX07Zm9yKHZhciBTZSBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LFNlKSYmKEoueXlbU2VdPXRoaXMueXlbU2VdKTtsZS5zZXRJbnB1dCh6LEoueXkpLEoueXkubGV4ZXI9bGUsSi55eS5wYXJzZXI9dGhpcyx0eXBlb2YgbGUueXlsbG9jPiJ1IiYmKGxlLnl5bGxvYz17fSk7dmFyIHNlPWxlLnl5bGxvYztZLnB1c2goc2UpO3ZhciBhZT1sZS5vcHRpb25zJiZsZS5vcHRpb25zLnJhbmdlczt0eXBlb2YgSi55eS5wYXJzZUVycm9yPT0iZnVuY3Rpb24iP3RoaXMucGFyc2VFcnJvcj1KLnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Z1bmN0aW9uIE9lKFcpe1UubGVuZ3RoPVUubGVuZ3RoLTIqVyxlZS5sZW5ndGg9ZWUubGVuZ3RoLVcsWS5sZW5ndGg9WS5sZW5ndGgtV31vKE9lLCJwb3BTdGFjayIpO2Z1bmN0aW9uIHllKCl7dmFyIFc7cmV0dXJuIFc9Sy5wb3AoKXx8bGUubGV4KCl8fHRlLHR5cGVvZiBXIT0ibnVtYmVyIiYmKFcgaW5zdGFuY2VvZiBBcnJheSYmKEs9VyxXPUsucG9wKCkpLFc9JC5zeW1ib2xzX1tXXXx8VyksV31vKHllLCJsZXgiKTtmb3IodmFyIEJlLEhlLHplLExlLEllLHhlLHE9e30sZGUsaWUsb2UsVjs7KXtpZih6ZT1VW1UubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbemVdP0xlPXRoaXMuZGVmYXVsdEFjdGlvbnNbemVdOigoQmU9PT1udWxsfHx0eXBlb2YgQmU+InUiKSYmKEJlPXllKCkpLExlPWNlW3plXSYmY2VbemVdW0JlXSksdHlwZW9mIExlPiJ1Inx8IUxlLmxlbmd0aHx8IUxlWzBdKXt2YXIgVGU9IiI7Vj1bXTtmb3IoZGUgaW4gY2VbemVdKXRoaXMudGVybWluYWxzX1tkZV0mJmRlPm5lJiZWLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tkZV0rIiciKTtsZS5zaG93UG9zaXRpb24/VGU9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisodWUrMSkrYDoKYCtsZS5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK1Yuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tCZV18fEJlKSsiJyI6VGU9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisodWUrMSkrIjogVW5leHBlY3RlZCAiKyhCZT09dGU/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bQmVdfHxCZSkrIiciKSx0aGlzLnBhcnNlRXJyb3IoVGUse3RleHQ6bGUubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW0JlXXx8QmUsbGluZTpsZS55eWxpbmVubyxsb2M6c2UsZXhwZWN0ZWQ6Vn0pfWlmKExlWzBdaW5zdGFuY2VvZiBBcnJheSYmTGUubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIit6ZSsiLCB0b2tlbjogIitCZSk7c3dpdGNoKExlWzBdKXtjYXNlIDE6VS5wdXNoKEJlKSxlZS5wdXNoKGxlLnl5dGV4dCksWS5wdXNoKGxlLnl5bGxvYyksVS5wdXNoKExlWzFdKSxCZT1udWxsLEhlPyhCZT1IZSxIZT1udWxsKTooUT1sZS55eWxlbmcsWj1sZS55eXRleHQsdWU9bGUueXlsaW5lbm8sc2U9bGUueXlsbG9jLGo+MCYmai0tKTticmVhaztjYXNlIDI6aWYoaWU9dGhpcy5wcm9kdWN0aW9uc19bTGVbMV1dWzFdLHEuJD1lZVtlZS5sZW5ndGgtaWVdLHEuXyQ9e2ZpcnN0X2xpbmU6WVtZLmxlbmd0aC0oaWV8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpZW1kubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46WVtZLmxlbmd0aC0oaWV8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46WVtZLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sYWUmJihxLl8kLnJhbmdlPVtZW1kubGVuZ3RoLShpZXx8MSldLnJhbmdlWzBdLFlbWS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx4ZT10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkocSxbWixRLHVlLEoueXksTGVbMV0sZWUsWV0uY29uY2F0KGhlKSksdHlwZW9mIHhlPCJ1IilyZXR1cm4geGU7aWUmJihVPVUuc2xpY2UoMCwtMSppZSoyKSxlZT1lZS5zbGljZSgwLC0xKmllKSxZPVkuc2xpY2UoMCwtMSppZSkpLFUucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1tMZVsxXV1bMF0pLGVlLnB1c2gocS4kKSxZLnB1c2gocS5fJCksb2U9Y2VbVVtVLmxlbmd0aC0yXV1bVVtVLmxlbmd0aC0xXV0sVS5wdXNoKG9lKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfSwicGFyc2UiKX0sUD1mdW5jdGlvbigpe3ZhciBGPXtFT0Y6MSxwYXJzZUVycm9yOm8oZnVuY3Rpb24oJCxVKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKCQsVSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoJCl9LCJwYXJzZUVycm9yIiksc2V0SW5wdXQ6byhmdW5jdGlvbih6LCQpe3JldHVybiB0aGlzLnl5PSR8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXosdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LCJzZXRJbnB1dCIpLGlucHV0Om8oZnVuY3Rpb24oKXt2YXIgej10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9eix0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9eix0aGlzLm1hdGNoZWQrPXo7dmFyICQ9ei5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuICQ/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLHp9LCJpbnB1dCIpLHVucHV0Om8oZnVuY3Rpb24oeil7dmFyICQ9ei5sZW5ndGgsVT16LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9eit0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtJCksdGhpcy5vZmZzZXQtPSQ7dmFyIEs9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksVS5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPVUubGVuZ3RoLTEpO3ZhciBlZT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46VT8oVS5sZW5ndGg9PT1LLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrS1tLLmxlbmd0aC1VLmxlbmd0aF0ubGVuZ3RoLVVbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi0kfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2VlWzBdLGVlWzBdK3RoaXMueXlsZW5nLSRdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sInVucHV0IiksbW9yZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30sIm1vcmUiKSxyZWplY3Q6byhmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sInJlamVjdCIpLGxlc3M6byhmdW5jdGlvbih6KXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoeikpfSwibGVzcyIpLHBhc3RJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIHo9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybih6Lmxlbmd0aD4yMD8iLi4uIjoiIikrei5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sInBhc3RJbnB1dCIpLHVwY29taW5nSW5wdXQ6byhmdW5jdGlvbigpe3ZhciB6PXRoaXMubWF0Y2g7cmV0dXJuIHoubGVuZ3RoPDIwJiYoeis9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtei5sZW5ndGgpKSwoei5zdWJzdHIoMCwyMCkrKHoubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LCJ1cGNvbWluZ0lucHV0Iiksc2hvd1Bvc2l0aW9uOm8oZnVuY3Rpb24oKXt2YXIgej10aGlzLnBhc3RJbnB1dCgpLCQ9bmV3IEFycmF5KHoubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4geit0aGlzLnVwY29taW5nSW5wdXQoKStgCmArJCsiXiJ9LCJzaG93UG9zaXRpb24iKSx0ZXN0X21hdGNoOm8oZnVuY3Rpb24oeiwkKXt2YXIgVSxLLGVlO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihlZT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihlZS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxLPXpbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLEsmJih0aGlzLnl5bGluZW5vKz1LLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOks/S1tLLmxlbmd0aC0xXS5sZW5ndGgtS1tLLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK3pbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9elswXSx0aGlzLm1hdGNoKz16WzBdLHRoaXMubWF0Y2hlcz16LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKHpbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPXpbMF0sVT10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcywkLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLFUpcmV0dXJuIFU7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIFkgaW4gZWUpdGhpc1tZXT1lZVtZXTtyZXR1cm4hMX1yZXR1cm4hMX0sInRlc3RfbWF0Y2giKSxuZXh0Om8oZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgeiwkLFUsSzt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBlZT10aGlzLl9jdXJyZW50UnVsZXMoKSxZPTA7WTxlZS5sZW5ndGg7WSsrKWlmKFU9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tlZVtZXV0pLFUmJighJHx8VVswXS5sZW5ndGg+JFswXS5sZW5ndGgpKXtpZigkPVUsSz1ZLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKHo9dGhpcy50ZXN0X21hdGNoKFUsZWVbWV0pLHohPT0hMSlyZXR1cm4gejtpZih0aGlzLl9iYWNrdHJhY2speyQ9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gJD8oej10aGlzLnRlc3RfbWF0Y2goJCxlZVtLXSkseiE9PSExP3o6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LCJuZXh0IiksbGV4Om8oZnVuY3Rpb24oKXt2YXIgJD10aGlzLm5leHQoKTtyZXR1cm4gJHx8dGhpcy5sZXgoKX0sImxleCIpLGJlZ2luOm8oZnVuY3Rpb24oJCl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKCQpfSwiYmVnaW4iKSxwb3BTdGF0ZTpvKGZ1bmN0aW9uKCl7dmFyICQ9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gJD4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sInBvcFN0YXRlIiksX2N1cnJlbnRSdWxlczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sIl9jdXJyZW50UnVsZXMiKSx0b3BTdGF0ZTpvKGZ1bmN0aW9uKCQpe3JldHVybiAkPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMoJHx8MCksJD49MD90aGlzLmNvbmRpdGlvblN0YWNrWyRdOiJJTklUSUFMIn0sInRvcFN0YXRlIikscHVzaFN0YXRlOm8oZnVuY3Rpb24oJCl7dGhpcy5iZWdpbigkKX0sInB1c2hTdGF0ZSIpLHN0YXRlU3RhY2tTaXplOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LCJzdGF0ZVN0YWNrU2l6ZSIpLG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKCQsVSxLLGVlKXt2YXIgWT1lZTtzd2l0Y2goSyl7Y2FzZSAwOnJldHVybiAzODtjYXNlIDE6cmV0dXJuIDQwO2Nhc2UgMjpyZXR1cm4gMzk7Y2FzZSAzOnJldHVybiA0NDtjYXNlIDQ6cmV0dXJuIDUxO2Nhc2UgNTpyZXR1cm4gNTI7Y2FzZSA2OnJldHVybiA1MztjYXNlIDc6cmV0dXJuIDU0O2Nhc2UgODpicmVhaztjYXNlIDk6YnJlYWs7Y2FzZSAxMDpyZXR1cm4gNTtjYXNlIDExOmJyZWFrO2Nhc2UgMTI6YnJlYWs7Y2FzZSAxMzpicmVhaztjYXNlIDE0OmJyZWFrO2Nhc2UgMTU6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJTQ0FMRSIpLDE3O2JyZWFrO2Nhc2UgMTY6cmV0dXJuIDE4O2Nhc2UgMTc6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTg6cmV0dXJuIHRoaXMuYmVnaW4oImFjY190aXRsZSIpLDMzO2JyZWFrO2Nhc2UgMTk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjticmVhaztjYXNlIDIwOnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwzNTticmVhaztjYXNlIDIxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7YnJlYWs7Y2FzZSAyMjp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSAyMzp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyNDpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSAyNTpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIkNMQVNTREVGIiksNDE7YnJlYWs7Y2FzZSAyNjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJDTEFTU0RFRklEIiksIkRFRkFVTFRfQ0xBU1NERUZfSUQiO2JyZWFrO2Nhc2UgMjc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiQ0xBU1NERUZJRCIpLDQyO2JyZWFrO2Nhc2UgMjg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw0MzticmVhaztjYXNlIDI5OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiQ0xBU1MiKSw0ODticmVhaztjYXNlIDMwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIkNMQVNTX1NUWUxFIiksNDk7YnJlYWs7Y2FzZSAzMTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDUwO2JyZWFrO2Nhc2UgMzI6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJTVFlMRSIpLDQ1O2JyZWFrO2Nhc2UgMzM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiU1RZTEVERUZfU1RZTEVTIiksNDY7YnJlYWs7Y2FzZSAzNDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDQ3O2JyZWFrO2Nhc2UgMzU6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJTQ0FMRSIpLDE3O2JyZWFrO2Nhc2UgMzY6cmV0dXJuIDE4O2Nhc2UgMzc6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMzg6dGhpcy5wdXNoU3RhdGUoIlNUQVRFIik7YnJlYWs7Y2FzZSAzOTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLFUueXl0ZXh0PVUueXl0ZXh0LnNsaWNlKDAsLTgpLnRyaW0oKSwyNTticmVhaztjYXNlIDQwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksVS55eXRleHQ9VS55eXRleHQuc2xpY2UoMCwtOCkudHJpbSgpLDI2O2JyZWFrO2Nhc2UgNDE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxVLnl5dGV4dD1VLnl5dGV4dC5zbGljZSgwLC0xMCkudHJpbSgpLDI3O2JyZWFrO2Nhc2UgNDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxVLnl5dGV4dD1VLnl5dGV4dC5zbGljZSgwLC04KS50cmltKCksMjU7YnJlYWs7Y2FzZSA0MzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLFUueXl0ZXh0PVUueXl0ZXh0LnNsaWNlKDAsLTgpLnRyaW0oKSwyNjticmVhaztjYXNlIDQ0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksVS55eXRleHQ9VS55eXRleHQuc2xpY2UoMCwtMTApLnRyaW0oKSwyNzticmVhaztjYXNlIDQ1OnJldHVybiA1MTtjYXNlIDQ2OnJldHVybiA1MjtjYXNlIDQ3OnJldHVybiA1MztjYXNlIDQ4OnJldHVybiA1NDtjYXNlIDQ5OnRoaXMucHVzaFN0YXRlKCJTVEFURV9TVFJJTkciKTticmVhaztjYXNlIDUwOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiU1RBVEVfSUQiKSwiQVMiO2JyZWFrO2Nhc2UgNTE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiSUQiO2JyZWFrO2Nhc2UgNTI6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNTM6cmV0dXJuIlNUQVRFX0RFU0NSIjtjYXNlIDU0OnJldHVybiAxOTtjYXNlIDU1OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDU2OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoInN0cnVjdCIpLDIwO2JyZWFrO2Nhc2UgNTc6YnJlYWs7Y2FzZSA1ODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDIxO2JyZWFrO2Nhc2UgNTk6YnJlYWs7Y2FzZSA2MDpyZXR1cm4gdGhpcy5iZWdpbigiTk9URSIpLDI5O2JyZWFrO2Nhc2UgNjE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiTk9URV9JRCIpLDU5O2JyZWFrO2Nhc2UgNjI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiTk9URV9JRCIpLDYwO2JyZWFrO2Nhc2UgNjM6dGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJGTE9BVElOR19OT1RFIik7YnJlYWs7Y2FzZSA2NDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJGTE9BVElOR19OT1RFX0lEIiksIkFTIjticmVhaztjYXNlIDY1OmJyZWFrO2Nhc2UgNjY6cmV0dXJuIk5PVEVfVEVYVCI7Y2FzZSA2NzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJJRCI7YnJlYWs7Y2FzZSA2ODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJOT1RFX1RFWFQiKSwyNDticmVhaztjYXNlIDY5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksVS55eXRleHQ9VS55eXRleHQuc3Vic3RyKDIpLnRyaW0oKSwzMTticmVhaztjYXNlIDcwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksVS55eXRleHQ9VS55eXRleHQuc2xpY2UoMCwtOCkudHJpbSgpLDMxO2JyZWFrO2Nhc2UgNzE6cmV0dXJuIDY7Y2FzZSA3MjpyZXR1cm4gNjtjYXNlIDczOnJldHVybiAxNjtjYXNlIDc0OnJldHVybiA1NztjYXNlIDc1OnJldHVybiAyNDtjYXNlIDc2OnJldHVybiBVLnl5dGV4dD1VLnl5dGV4dC50cmltKCksMTQ7YnJlYWs7Y2FzZSA3NzpyZXR1cm4gMTU7Y2FzZSA3ODpyZXR1cm4gMjg7Y2FzZSA3OTpyZXR1cm4gNTg7Y2FzZSA4MDpyZXR1cm4gNTtjYXNlIDgxOnJldHVybiJJTlZBTElEIn19LCJhbm9ueW1vdXMiKSxydWxlczpbL14oPzpjbGlja1xiKS9pLC9eKD86aHJlZlxiKS9pLC9eKD86IlteIl0qIikvaSwvXig/OmRlZmF1bHRcYikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrVEJbXlxuXSopL2ksL14oPzouKmRpcmVjdGlvblxzK0JUW15cbl0qKS9pLC9eKD86LipkaXJlY3Rpb25ccytSTFteXG5dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrTFJbXlxuXSopL2ksL14oPzolJSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzpbXG5dKykvaSwvXig/Oltcc10rKS9pLC9eKD86KCg/IVxuKVxzKSspL2ksL14oPzojW15cbl0qKS9pLC9eKD86JVteXG5dKikvaSwvXig/OnNjYWxlXHMrKS9pLC9eKD86XGQrKS9pLC9eKD86XHMrd2lkdGhcYikvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpbXH1dKS9pLC9eKD86W15cfV0qKS9pLC9eKD86Y2xhc3NEZWZccyspL2ksL14oPzpERUZBVUxUXHMrKS9pLC9eKD86XHcrXHMrKS9pLC9eKD86W15cbl0qKS9pLC9eKD86Y2xhc3NccyspL2ksL14oPzooXHcrKSsoKCxccypcdyspKikpL2ksL14oPzpbXlxuXSopL2ksL14oPzpzdHlsZVxzKykvaSwvXig/OltcdyxdK1xzKykvaSwvXig/OlteXG5dKikvaSwvXig/OnNjYWxlXHMrKS9pLC9eKD86XGQrKS9pLC9eKD86XHMrd2lkdGhcYikvaSwvXig/OnN0YXRlXHMrKS9pLC9eKD86Lio8PGZvcms+PikvaSwvXig/Oi4qPDxqb2luPj4pL2ksL14oPzouKjw8Y2hvaWNlPj4pL2ksL14oPzouKlxbXFtmb3JrXF1cXSkvaSwvXig/Oi4qXFtcW2pvaW5cXVxdKS9pLC9eKD86LipcW1xbY2hvaWNlXF1cXSkvaSwvXig/Oi4qZGlyZWN0aW9uXHMrVEJbXlxuXSopL2ksL14oPzouKmRpcmVjdGlvblxzK0JUW15cbl0qKS9pLC9eKD86LipkaXJlY3Rpb25ccytSTFteXG5dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrTFJbXlxuXSopL2ksL14oPzpbIl0pL2ksL14oPzpccyphc1xzKykvaSwvXig/OlteXG5ce10qKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpbXlxuXHNce10rKS9pLC9eKD86XG4pL2ksL14oPzpceykvaSwvXig/OiUlKD8hXHspW15cbl0qKS9pLC9eKD86XH0pL2ksL14oPzpbXG5dKS9pLC9eKD86bm90ZVxzKykvaSwvXig/OmxlZnQgb2ZcYikvaSwvXig/OnJpZ2h0IG9mXGIpL2ksL14oPzoiKS9pLC9eKD86XHMqYXNccyopL2ksL14oPzpbIl0pL2ksL14oPzpbXiJdKikvaSwvXig/OlteXG5dKikvaSwvXig/OlxzKlteOlxuXHNcLV0rKS9pLC9eKD86XHMqOlteOlxuO10rKS9pLC9eKD86W1xzXFNdKj9lbmQgbm90ZVxiKS9pLC9eKD86c3RhdGVEaWFncmFtXHMrKS9pLC9eKD86c3RhdGVEaWFncmFtLXYyXHMrKS9pLC9eKD86aGlkZSBlbXB0eSBkZXNjcmlwdGlvblxiKS9pLC9eKD86XFtcKlxdKS9pLC9eKD86W146XG5cc1wtXHtdKykvaSwvXig/OlxzKjpbXjpcbjtdKykvaSwvXig/Oi0tPikvaSwvXig/Oi0tKS9pLC9eKD86Ojo6KS9pLC9eKD86JCkvaSwvXig/Oi4pL2ldLGNvbmRpdGlvbnM6e0xJTkU6e3J1bGVzOlsxMiwxM10saW5jbHVzaXZlOiExfSxzdHJ1Y3Q6e3J1bGVzOlsxMiwxMywyNSwyOSwzMiwzOCw0NSw0Niw0Nyw0OCw1Nyw1OCw1OSw2MCw3NCw3NSw3Niw3Nyw3OF0saW5jbHVzaXZlOiExfSxGTE9BVElOR19OT1RFX0lEOntydWxlczpbNjddLGluY2x1c2l2ZTohMX0sRkxPQVRJTkdfTk9URTp7cnVsZXM6WzY0LDY1LDY2XSxpbmNsdXNpdmU6ITF9LE5PVEVfVEVYVDp7cnVsZXM6WzY5LDcwXSxpbmNsdXNpdmU6ITF9LE5PVEVfSUQ6e3J1bGVzOls2OF0saW5jbHVzaXZlOiExfSxOT1RFOntydWxlczpbNjEsNjIsNjNdLGluY2x1c2l2ZTohMX0sU1RZTEVERUZfU1RZTEVPUFRTOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LFNUWUxFREVGX1NUWUxFUzp7cnVsZXM6WzM0XSxpbmNsdXNpdmU6ITF9LFNUWUxFX0lEUzp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxTVFlMRTp7cnVsZXM6WzMzXSxpbmNsdXNpdmU6ITF9LENMQVNTX1NUWUxFOntydWxlczpbMzFdLGluY2x1c2l2ZTohMX0sQ0xBU1M6e3J1bGVzOlszMF0saW5jbHVzaXZlOiExfSxDTEFTU0RFRklEOntydWxlczpbMjhdLGluY2x1c2l2ZTohMX0sQ0xBU1NERUY6e3J1bGVzOlsyNiwyN10saW5jbHVzaXZlOiExfSxhY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbMjMsMjRdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbMjFdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbMTldLGluY2x1c2l2ZTohMX0sU0NBTEU6e3J1bGVzOlsxNiwxNywzNiwzN10saW5jbHVzaXZlOiExfSxBTElBUzp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxTVEFURV9JRDp7cnVsZXM6WzUxXSxpbmNsdXNpdmU6ITF9LFNUQVRFX1NUUklORzp7cnVsZXM6WzUyLDUzXSxpbmNsdXNpdmU6ITF9LEZPUktfU1RBVEU6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sU1RBVEU6e3J1bGVzOlsxMiwxMywzOSw0MCw0MSw0Miw0Myw0NCw0OSw1MCw1NCw1NSw1Nl0saW5jbHVzaXZlOiExfSxJRDp7cnVsZXM6WzEyLDEzXSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEzLDE0LDE1LDE4LDIwLDIyLDI1LDI5LDMyLDM1LDM4LDU2LDYwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc5LDgwLDgxXSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIEZ9KCk7TS5sZXhlcj1QO2Z1bmN0aW9uIEIoKXt0aGlzLnl5PXt9fXJldHVybiBvKEIsIlBhcnNlciIpLEIucHJvdG90eXBlPU0sTS5QYXJzZXI9QixuZXcgQn0oKTtTUC5wYXJzZXI9U1A7SlM9U1B9KTt2YXIgc3BlLGU2LEFQLENmLEdwLE9iLG9wZSxscGUsY3BlLFZwLHQ2LF9QLERQLExQLFJQLE5QLHI2LG42LHVwZSxocGUsTVAsSVAsZnBlLGRwZSxCMSxPSGUscHBlLE9QLFBIZSxCSGUsbXBlLGdwZSxGSGUseXBlLCRIZSx2cGUsUFAsQlAseHBlLGk2LGJwZSxGUCxhNj1OKCgpPT57InVzZSBzdHJpY3QiO3NwZT0iVEIiLGU2PSJUQiIsQVA9ImRpciIsQ2Y9InN0YXRlIixHcD0icm9vdCIsT2I9InJlbGF0aW9uIixvcGU9ImNsYXNzRGVmIixscGU9InN0eWxlIixjcGU9ImFwcGx5Q2xhc3MiLFZwPSJkZWZhdWx0Iix0Nj0iZGl2aWRlciIsX1A9ImZpbGw6bm9uZSIsRFA9ImZpbGw6ICMzMzMiLExQPSJjIixSUD0idGV4dCIsTlA9Im5vcm1hbCIscjY9InJlY3QiLG42PSJyZWN0V2l0aFRpdGxlIix1cGU9InN0YXRlU3RhcnQiLGhwZT0ic3RhdGVFbmQiLE1QPSJkaXZpZGVyIixJUD0icm91bmRlZFdpdGhUaXRsZSIsZnBlPSJub3RlIixkcGU9Im5vdGVHcm91cCIsQjE9InN0YXRlZGlhZ3JhbSIsT0hlPSJzdGF0ZSIscHBlPWAke0IxfS0ke09IZX1gLE9QPSJ0cmFuc2l0aW9uIixQSGU9Im5vdGUiLEJIZT0ibm90ZS1lZGdlIixtcGU9YCR7T1B9ICR7QkhlfWAsZ3BlPWAke0IxfS0ke1BIZX1gLEZIZT0iY2x1c3RlciIseXBlPWAke0IxfS0ke0ZIZX1gLCRIZT0iY2x1c3Rlci1hbHQiLHZwZT1gJHtCMX0tJHskSGV9YCxQUD0icGFyZW50IixCUD0ibm90ZSIseHBlPSJzdGF0ZSIsaTY9Ii0tLS0iLGJwZT1gJHtpNn0ke0JQfWAsRlA9YCR7aTZ9JHtQUH1gfSk7ZnVuY3Rpb24gJFAodD0iIixlPTAscj0iIixuPWk2KXtsZXQgaT1yIT09bnVsbCYmci5sZW5ndGg+MD9gJHtufSR7cn1gOiIiO3JldHVybmAke3hwZX0tJHt0fSR7aX0tJHtlfWB9ZnVuY3Rpb24gczYodCxlLHIpe2lmKCFlLmlkfHxlLmlkPT09Ijwvam9pbj48L2Zvcms+Inx8ZS5pZD09PSI8L2Nob2ljZT4iKXJldHVybjtlLmNzc0NsYXNzZXMmJihBcnJheS5pc0FycmF5KGUuY3NzQ29tcGlsZWRTdHlsZXMpfHwoZS5jc3NDb21waWxlZFN0eWxlcz1bXSksZS5jc3NDbGFzc2VzLnNwbGl0KCIgIikuZm9yRWFjaChpPT57bGV0IGE9ci5nZXQoaSk7YSYmKGUuY3NzQ29tcGlsZWRTdHlsZXM9Wy4uLmUuY3NzQ29tcGlsZWRTdHlsZXM/P1tdLC4uLmEuc3R5bGVzXSl9KSk7bGV0IG49dC5maW5kKGk9PmkuaWQ9PT1lLmlkKTtuP09iamVjdC5hc3NpZ24obixlKTp0LnB1c2goZSl9ZnVuY3Rpb24gR0hlKHQpe3JldHVybiB0Py5jbGFzc2VzPy5qb2luKCIgIik/PyIifWZ1bmN0aW9uIFZIZSh0KXtyZXR1cm4gdD8uc3R5bGVzPz9bXX12YXIgbzYsQWYsekhlLFRwZSxGMSx3cGUsa3BlPU4oKCk9PnsidXNlIHN0cmljdCI7R3QoKTt5dCgpO3ByKCk7YTYoKTtvNj1uZXcgTWFwLEFmPTA7bygkUCwic3RhdGVEb21JZCIpO3pIZT1vKCh0LGUscixuLGksYSxzLGwpPT57WC50cmFjZSgiaXRlbXMiLGUpLGUuZm9yRWFjaCh1PT57c3dpdGNoKHUuc3RtdCl7Y2FzZSBDZjpGMSh0LHUscixuLGksYSxzLGwpO2JyZWFrO2Nhc2UgVnA6RjEodCx1LHIsbixpLGEscyxsKTticmVhaztjYXNlIE9iOntGMSh0LHUuc3RhdGUxLHIsbixpLGEscyxsKSxGMSh0LHUuc3RhdGUyLHIsbixpLGEscyxsKTtsZXQgaD17aWQ6ImVkZ2UiK0FmLHN0YXJ0OnUuc3RhdGUxLmlkLGVuZDp1LnN0YXRlMi5pZCxhcnJvd2hlYWQ6Im5vcm1hbCIsYXJyb3dUeXBlRW5kOiJhcnJvd19iYXJiIixzdHlsZTpfUCxsYWJlbFN0eWxlOiIiLGxhYmVsOlplLnNhbml0aXplVGV4dCh1LmRlc2NyaXB0aW9uPz8iIixtZSgpKSxhcnJvd2hlYWRTdHlsZTpEUCxsYWJlbHBvczpMUCxsYWJlbFR5cGU6UlAsdGhpY2tuZXNzOk5QLGNsYXNzZXM6T1AsbG9vazpzfTtpLnB1c2goaCksQWYrK31icmVha319KX0sInNldHVwRG9jIiksVHBlPW8oKHQsZT1lNik9PntsZXQgcj1lO2lmKHQuZG9jKWZvcihsZXQgbiBvZiB0LmRvYyluLnN0bXQ9PT0iZGlyIiYmKHI9bi52YWx1ZSk7cmV0dXJuIHJ9LCJnZXREaXIiKTtvKHM2LCJpbnNlcnRPclVwZGF0ZU5vZGUiKTtvKEdIZSwiZ2V0Q2xhc3Nlc0Zyb21EYkluZm8iKTtvKFZIZSwiZ2V0U3R5bGVzRnJvbURiSW5mbyIpO0YxPW8oKHQsZSxyLG4saSxhLHMsbCk9PntsZXQgdT1lLmlkLGg9ci5nZXQodSksZj1HSGUoaCksZD1WSGUoaCkscD1tZSgpO2lmKFguaW5mbygiZGF0YUZldGNoZXIgcGFyc2VkSXRlbSIsZSxoLGQpLHUhPT0icm9vdCIpe2xldCBtPXI2O2Uuc3RhcnQ9PT0hMD9tPXVwZTplLnN0YXJ0PT09ITEmJihtPWhwZSksZS50eXBlIT09VnAmJihtPWUudHlwZSksbzYuZ2V0KHUpfHxvNi5zZXQodSx7aWQ6dSxzaGFwZTptLGRlc2NyaXB0aW9uOlplLnNhbml0aXplVGV4dCh1LHApLGNzc0NsYXNzZXM6YCR7Zn0gJHtwcGV9YCxjc3NTdHlsZXM6ZH0pO2xldCBnPW82LmdldCh1KTtlLmRlc2NyaXB0aW9uJiYoQXJyYXkuaXNBcnJheShnLmRlc2NyaXB0aW9uKT8oZy5zaGFwZT1uNixnLmRlc2NyaXB0aW9uLnB1c2goZS5kZXNjcmlwdGlvbikpOmcuZGVzY3JpcHRpb24/Lmxlbmd0aCYmZy5kZXNjcmlwdGlvbi5sZW5ndGg+MD8oZy5zaGFwZT1uNixnLmRlc2NyaXB0aW9uPT09dT9nLmRlc2NyaXB0aW9uPVtlLmRlc2NyaXB0aW9uXTpnLmRlc2NyaXB0aW9uPVtnLmRlc2NyaXB0aW9uLGUuZGVzY3JpcHRpb25dKTooZy5zaGFwZT1yNixnLmRlc2NyaXB0aW9uPWUuZGVzY3JpcHRpb24pLGcuZGVzY3JpcHRpb249WmUuc2FuaXRpemVUZXh0T3JBcnJheShnLmRlc2NyaXB0aW9uLHApKSxnLmRlc2NyaXB0aW9uPy5sZW5ndGg9PT0xJiZnLnNoYXBlPT09bjYmJihnLnR5cGU9PT0iZ3JvdXAiP2cuc2hhcGU9SVA6Zy5zaGFwZT1yNiksIWcudHlwZSYmZS5kb2MmJihYLmluZm8oIlNldHRpbmcgY2x1c3RlciBmb3IgWENYIix1LFRwZShlKSksZy50eXBlPSJncm91cCIsZy5pc0dyb3VwPSEwLGcuZGlyPVRwZShlKSxnLnNoYXBlPWUudHlwZT09PXQ2P01QOklQLGcuY3NzQ2xhc3Nlcz1gJHtnLmNzc0NsYXNzZXN9ICR7eXBlfSAke2E/dnBlOiIifWApO2xldCB5PXtsYWJlbFN0eWxlOiIiLHNoYXBlOmcuc2hhcGUsbGFiZWw6Zy5kZXNjcmlwdGlvbixjc3NDbGFzc2VzOmcuY3NzQ2xhc3Nlcyxjc3NDb21waWxlZFN0eWxlczpbXSxjc3NTdHlsZXM6Zy5jc3NTdHlsZXMsaWQ6dSxkaXI6Zy5kaXIsZG9tSWQ6JFAodSxBZiksdHlwZTpnLnR5cGUsaXNHcm91cDpnLnR5cGU9PT0iZ3JvdXAiLHBhZGRpbmc6OCxyeDoxMCxyeToxMCxsb29rOnN9O2lmKHkuc2hhcGU9PT1NUCYmKHkubGFiZWw9IiIpLHQmJnQuaWQhPT0icm9vdCImJihYLnRyYWNlKCJTZXR0aW5nIG5vZGUgIix1LCIgdG8gYmUgY2hpbGQgb2YgaXRzIHBhcmVudCAiLHQuaWQpLHkucGFyZW50SWQ9dC5pZCkseS5jZW50ZXJMYWJlbD0hMCxlLm5vdGUpe2xldCB2PXtsYWJlbFN0eWxlOiIiLHNoYXBlOmZwZSxsYWJlbDplLm5vdGUudGV4dCxjc3NDbGFzc2VzOmdwZSxjc3NTdHlsZXM6W10sY3NzQ29tcGlsZWRTdHlsZXM6W10saWQ6dSticGUrIi0iK0FmLGRvbUlkOiRQKHUsQWYsQlApLHR5cGU6Zy50eXBlLGlzR3JvdXA6Zy50eXBlPT09Imdyb3VwIixwYWRkaW5nOnAuZmxvd2NoYXJ0Py5wYWRkaW5nLGxvb2s6cyxwb3NpdGlvbjplLm5vdGUucG9zaXRpb259LHg9dStGUCxiPXtsYWJlbFN0eWxlOiIiLHNoYXBlOmRwZSxsYWJlbDplLm5vdGUudGV4dCxjc3NDbGFzc2VzOmcuY3NzQ2xhc3Nlcyxjc3NTdHlsZXM6W10saWQ6dStGUCxkb21JZDokUCh1LEFmLFBQKSx0eXBlOiJncm91cCIsaXNHcm91cDohMCxwYWRkaW5nOjE2LGxvb2s6cyxwb3NpdGlvbjplLm5vdGUucG9zaXRpb259O0FmKyssYi5pZD14LHYucGFyZW50SWQ9eCxzNihuLGIsbCksczYobix2LGwpLHM2KG4seSxsKTtsZXQgVD11LFM9di5pZDtlLm5vdGUucG9zaXRpb249PT0ibGVmdCBvZiImJihUPXYuaWQsUz11KSxpLnB1c2goe2lkOlQrIi0iK1Msc3RhcnQ6VCxlbmQ6UyxhcnJvd2hlYWQ6Im5vbmUiLGFycm93VHlwZUVuZDoiIixzdHlsZTpfUCxsYWJlbFN0eWxlOiIiLGNsYXNzZXM6bXBlLGFycm93aGVhZFN0eWxlOkRQLGxhYmVscG9zOkxQLGxhYmVsVHlwZTpSUCx0aGlja25lc3M6TlAsbG9vazpzfSl9ZWxzZSBzNihuLHksbCl9ZS5kb2MmJihYLnRyYWNlKCJBZGRpbmcgbm9kZXMgY2hpbGRyZW4gIiksekhlKGUsZS5kb2MscixuLGksIWEscyxsKSl9LCJkYXRhRmV0Y2hlciIpLHdwZT1vKCgpPT57bzYuY2xlYXIoKSxBZj0wfSwicmVzZXQiKX0pO3ZhciB6UCxVSGUsSEhlLEVwZSxHUD1OKCgpPT57InVzZSBzdHJpY3QiO0d0KCk7eXQoKTtTbSgpO3JwKCk7bnAoKTtlcigpO2E2KCk7elA9bygodCxlPWU2KT0+e2lmKCF0LmRvYylyZXR1cm4gZTtsZXQgcj1lO2ZvcihsZXQgbiBvZiB0LmRvYyluLnN0bXQ9PT0iZGlyIiYmKHI9bi52YWx1ZSk7cmV0dXJuIHJ9LCJnZXREaXIiKSxVSGU9byhmdW5jdGlvbih0LGUpe3JldHVybiBlLmRiLmdldENsYXNzZXMoKX0sImdldENsYXNzZXMiKSxISGU9byhhc3luYyBmdW5jdGlvbih0LGUscixuKXtYLmluZm8oIlJFRjA6IiksWC5pbmZvKCJEcmF3aW5nIHN0YXRlIGRpYWdyYW0gKHYyKSIsZSk7bGV0e3NlY3VyaXR5TGV2ZWw6aSxzdGF0ZTphLGxheW91dDpzfT1tZSgpO24uZGIuZXh0cmFjdChuLmRiLmdldFJvb3REb2NWMigpKTtsZXQgbD1uLmRiLmdldERhdGEoKSx1PXdjKGUsaSk7bC50eXBlPW4udHlwZSxsLmxheW91dEFsZ29yaXRobT1zLGwubm9kZVNwYWNpbmc9YT8ubm9kZVNwYWNpbmd8fDUwLGwucmFua1NwYWNpbmc9YT8ucmFua1NwYWNpbmd8fDUwLGwubWFya2Vycz1bImJhcmIiXSxsLmRpYWdyYW1JZD1lLGF3YWl0IFJjKGwsdSk7bGV0IGg9ODt0cnl7KHR5cGVvZiBuLmRiLmdldExpbmtzPT0iZnVuY3Rpb24iP24uZGIuZ2V0TGlua3MoKTpuZXcgTWFwKS5mb3JFYWNoKChkLHApPT57bGV0IG09dHlwZW9mIHA9PSJzdHJpbmciP3A6dHlwZW9mIHA/LmlkPT0ic3RyaW5nIj9wLmlkOiIiO2lmKCFtKXtYLndhcm4oIlx1MjZBMFx1RkUwRiBJbnZhbGlkIG9yIG1pc3Npbmcgc3RhdGVJZCBmcm9tIGtleToiLEpTT04uc3RyaW5naWZ5KHApKTtyZXR1cm59bGV0IGc9dS5ub2RlKCk/LnF1ZXJ5U2VsZWN0b3JBbGwoImciKSx5O2lmKGc/LmZvckVhY2goVD0+e1QudGV4dENvbnRlbnQ/LnRyaW0oKT09PW0mJih5PVQpfSksIXkpe1gud2FybigiXHUyNkEwXHVGRTBGIENvdWxkIG5vdCBmaW5kIG5vZGUgbWF0Y2hpbmcgdGV4dDoiLG0pO3JldHVybn1sZXQgdj15LnBhcmVudE5vZGU7aWYoIXYpe1gud2FybigiXHUyNkEwXHVGRTBGIE5vZGUgaGFzIG5vIHBhcmVudCwgY2Fubm90IHdyYXA6IixtKTtyZXR1cm59bGV0IHg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImEiKSxiPWQudXJsLnJlcGxhY2UoL14iK3wiKyQvZywiIik7aWYoeC5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsInhsaW5rOmhyZWYiLGIpLHguc2V0QXR0cmlidXRlKCJ0YXJnZXQiLCJfYmxhbmsiKSxkLnRvb2x0aXApe2xldCBUPWQudG9vbHRpcC5yZXBsYWNlKC9eIit8IiskL2csIiIpO3guc2V0QXR0cmlidXRlKCJ0aXRsZSIsVCl9di5yZXBsYWNlQ2hpbGQoeCx5KSx4LmFwcGVuZENoaWxkKHkpLFguaW5mbygiXHV7MUY1MTd9IFdyYXBwZWQgbm9kZSBpbiA8YT4gdGFnIGZvcjoiLG0sZC51cmwpfSl9Y2F0Y2goZil7WC5lcnJvcigiXHUyNzRDIEVycm9yIGluamVjdGluZyBjbGlja2FibGUgbGlua3M6IixmKX1WdC5pbnNlcnRUaXRsZSh1LCJzdGF0ZWRpYWdyYW1UaXRsZVRleHQiLGE/LnRpdGxlVG9wTWFyZ2luPz8yNSxuLmRiLmdldERpYWdyYW1UaXRsZSgpKSxZbyh1LGgsQjEsYT8udXNlTWF4V2lkdGg/PyEwKX0sImRyYXciKSxFcGU9e2dldENsYXNzZXM6VUhlLGRyYXc6SEhlLGdldERpcjp6UH19KTt2YXIgYnMsU3BlLENwZSxsNix0bCxjNj1OKCgpPT57InVzZSBzdHJpY3QiO0d0KCk7eXQoKTtlcigpO3ByKCk7Y2koKTtrcGUoKTtHUCgpO2E2KCk7YnM9e1NUQVJUX05PREU6IlsqXSIsU1RBUlRfVFlQRToic3RhcnQiLEVORF9OT0RFOiJbKl0iLEVORF9UWVBFOiJlbmQiLENPTE9SX0tFWVdPUkQ6ImNvbG9yIixGSUxMX0tFWVdPUkQ6ImZpbGwiLEJHX0ZJTEw6ImJnRmlsbCIsU1RZTEVDTEFTU19TRVA6IiwifSxTcGU9bygoKT0+bmV3IE1hcCwibmV3Q2xhc3Nlc0xpc3QiKSxDcGU9bygoKT0+KHtyZWxhdGlvbnM6W10sc3RhdGVzOm5ldyBNYXAsZG9jdW1lbnRzOnt9fSksIm5ld0RvYyIpLGw2PW8odD0+SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0KSksImNsb25lIiksdGw9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy52ZXJzaW9uPWU7dGhpcy5ub2Rlcz1bXTt0aGlzLmVkZ2VzPVtdO3RoaXMucm9vdERvYz1bXTt0aGlzLmNsYXNzZXM9U3BlKCk7dGhpcy5kb2N1bWVudHM9e3Jvb3Q6Q3BlKCl9O3RoaXMuY3VycmVudERvY3VtZW50PXRoaXMuZG9jdW1lbnRzLnJvb3Q7dGhpcy5zdGFydEVuZENvdW50PTA7dGhpcy5kaXZpZGVyQ250PTA7dGhpcy5saW5rcz1uZXcgTWFwO3RoaXMuZ2V0QWNjVGl0bGU9RHI7dGhpcy5zZXRBY2NUaXRsZT1Bcjt0aGlzLmdldEFjY0Rlc2NyaXB0aW9uPVJyO3RoaXMuc2V0QWNjRGVzY3JpcHRpb249THI7dGhpcy5zZXREaWFncmFtVGl0bGU9T3I7dGhpcy5nZXREaWFncmFtVGl0bGU9TnI7dGhpcy5jbGVhcigpLHRoaXMuc2V0Um9vdERvYz10aGlzLnNldFJvb3REb2MuYmluZCh0aGlzKSx0aGlzLmdldERpdmlkZXJJZD10aGlzLmdldERpdmlkZXJJZC5iaW5kKHRoaXMpLHRoaXMuc2V0RGlyZWN0aW9uPXRoaXMuc2V0RGlyZWN0aW9uLmJpbmQodGhpcyksdGhpcy50cmltQ29sb249dGhpcy50cmltQ29sb24uYmluZCh0aGlzKX1zdGF0aWN7byh0aGlzLCJTdGF0ZURCIil9c3RhdGlje3RoaXMucmVsYXRpb25UeXBlPXtBR0dSRUdBVElPTjowLEVYVEVOU0lPTjoxLENPTVBPU0lUSU9OOjIsREVQRU5ERU5DWTozfX1leHRyYWN0KGUpe3RoaXMuY2xlYXIoITApO2ZvcihsZXQgaSBvZiBBcnJheS5pc0FycmF5KGUpP2U6ZS5kb2Mpc3dpdGNoKGkuc3RtdCl7Y2FzZSBDZjp0aGlzLmFkZFN0YXRlKGkuaWQudHJpbSgpLGkudHlwZSxpLmRvYyxpLmRlc2NyaXB0aW9uLGkubm90ZSk7YnJlYWs7Y2FzZSBPYjp0aGlzLmFkZFJlbGF0aW9uKGkuc3RhdGUxLGkuc3RhdGUyLGkuZGVzY3JpcHRpb24pO2JyZWFrO2Nhc2Ugb3BlOnRoaXMuYWRkU3R5bGVDbGFzcyhpLmlkLnRyaW0oKSxpLmNsYXNzZXMpO2JyZWFrO2Nhc2UgbHBlOnRoaXMuaGFuZGxlU3R5bGVEZWYoaSk7YnJlYWs7Y2FzZSBjcGU6dGhpcy5zZXRDc3NDbGFzcyhpLmlkLnRyaW0oKSxpLnN0eWxlQ2xhc3MpO2JyZWFrO2Nhc2UiY2xpY2siOnRoaXMuYWRkTGluayhpLmlkLGkudXJsLGkudG9vbHRpcCk7YnJlYWt9bGV0IHI9dGhpcy5nZXRTdGF0ZXMoKSxuPW1lKCk7d3BlKCksRjEodm9pZCAwLHRoaXMuZ2V0Um9vdERvY1YyKCkscix0aGlzLm5vZGVzLHRoaXMuZWRnZXMsITAsbi5sb29rLHRoaXMuY2xhc3Nlcyk7Zm9yKGxldCBpIG9mIHRoaXMubm9kZXMpaWYoQXJyYXkuaXNBcnJheShpLmxhYmVsKSl7aWYoaS5kZXNjcmlwdGlvbj1pLmxhYmVsLnNsaWNlKDEpLGkuaXNHcm91cCYmaS5kZXNjcmlwdGlvbi5sZW5ndGg+MCl0aHJvdyBuZXcgRXJyb3IoYEdyb3VwIG5vZGVzIGNhbiBvbmx5IGhhdmUgbGFiZWwuIFJlbW92ZSB0aGUgYWRkaXRpb25hbCBkZXNjcmlwdGlvbiBmb3Igbm9kZSBbJHtpLmlkfV1gKTtpLmxhYmVsPWkubGFiZWxbMF19fWhhbmRsZVN0eWxlRGVmKGUpe2xldCByPWUuaWQudHJpbSgpLnNwbGl0KCIsIiksbj1lLnN0eWxlQ2xhc3Muc3BsaXQoIiwiKTtmb3IobGV0IGkgb2Ygcil7bGV0IGE9dGhpcy5nZXRTdGF0ZShpKTtpZighYSl7bGV0IHM9aS50cmltKCk7dGhpcy5hZGRTdGF0ZShzKSxhPXRoaXMuZ2V0U3RhdGUocyl9YSYmKGEuc3R5bGVzPW4ubWFwKHM9PnMucmVwbGFjZSgvOy9nLCIiKT8udHJpbSgpKSl9fXNldFJvb3REb2MoZSl7WC5pbmZvKCJTZXR0aW5nIHJvb3QgZG9jIixlKSx0aGlzLnJvb3REb2M9ZSx0aGlzLnZlcnNpb249PT0xP3RoaXMuZXh0cmFjdChlKTp0aGlzLmV4dHJhY3QodGhpcy5nZXRSb290RG9jVjIoKSl9ZG9jVHJhbnNsYXRvcihlLHIsbil7aWYoci5zdG10PT09T2Ipe3RoaXMuZG9jVHJhbnNsYXRvcihlLHIuc3RhdGUxLCEwKSx0aGlzLmRvY1RyYW5zbGF0b3IoZSxyLnN0YXRlMiwhMSk7cmV0dXJufWlmKHIuc3RtdD09PUNmJiYoci5pZD09PWJzLlNUQVJUX05PREU/KHIuaWQ9ZS5pZCsobj8iX3N0YXJ0IjoiX2VuZCIpLHIuc3RhcnQ9bik6ci5pZD1yLmlkLnRyaW0oKSksci5zdG10IT09R3AmJnIuc3RtdCE9PUNmfHwhci5kb2MpcmV0dXJuO2xldCBpPVtdLGE9W107Zm9yKGxldCBzIG9mIHIuZG9jKWlmKHMudHlwZT09PXQ2KXtsZXQgbD1sNihzKTtsLmRvYz1sNihhKSxpLnB1c2gobCksYT1bXX1lbHNlIGEucHVzaChzKTtpZihpLmxlbmd0aD4wJiZhLmxlbmd0aD4wKXtsZXQgcz17c3RtdDpDZixpZDpMOSgpLHR5cGU6ImRpdmlkZXIiLGRvYzpsNihhKX07aS5wdXNoKGw2KHMpKSxyLmRvYz1pfXIuZG9jLmZvckVhY2gocz0+dGhpcy5kb2NUcmFuc2xhdG9yKHIscywhMCkpfWdldFJvb3REb2NWMigpe3JldHVybiB0aGlzLmRvY1RyYW5zbGF0b3Ioe2lkOkdwLHN0bXQ6R3B9LHtpZDpHcCxzdG10OkdwLGRvYzp0aGlzLnJvb3REb2N9LCEwKSx7aWQ6R3AsZG9jOnRoaXMucm9vdERvY319YWRkU3RhdGUoZSxyPVZwLG49dm9pZCAwLGk9dm9pZCAwLGE9dm9pZCAwLHM9dm9pZCAwLGw9dm9pZCAwLHU9dm9pZCAwKXtsZXQgaD1lPy50cmltKCk7aWYoIXRoaXMuY3VycmVudERvY3VtZW50LnN0YXRlcy5oYXMoaCkpWC5pbmZvKCJBZGRpbmcgc3RhdGUgIixoLGkpLHRoaXMuY3VycmVudERvY3VtZW50LnN0YXRlcy5zZXQoaCx7c3RtdDpDZixpZDpoLGRlc2NyaXB0aW9uczpbXSx0eXBlOnIsZG9jOm4sbm90ZTphLGNsYXNzZXM6W10sc3R5bGVzOltdLHRleHRTdHlsZXM6W119KTtlbHNle2xldCBmPXRoaXMuY3VycmVudERvY3VtZW50LnN0YXRlcy5nZXQoaCk7aWYoIWYpdGhyb3cgbmV3IEVycm9yKGBTdGF0ZSBub3QgZm91bmQ6ICR7aH1gKTtmLmRvY3x8KGYuZG9jPW4pLGYudHlwZXx8KGYudHlwZT1yKX1pZihpJiYoWC5pbmZvKCJTZXR0aW5nIHN0YXRlIGRlc2NyaXB0aW9uIixoLGkpLChBcnJheS5pc0FycmF5KGkpP2k6W2ldKS5mb3JFYWNoKGQ9PnRoaXMuYWRkRGVzY3JpcHRpb24oaCxkLnRyaW0oKSkpKSxhKXtsZXQgZj10aGlzLmN1cnJlbnREb2N1bWVudC5zdGF0ZXMuZ2V0KGgpO2lmKCFmKXRocm93IG5ldyBFcnJvcihgU3RhdGUgbm90IGZvdW5kOiAke2h9YCk7Zi5ub3RlPWEsZi5ub3RlLnRleHQ9WmUuc2FuaXRpemVUZXh0KGYubm90ZS50ZXh0LG1lKCkpfXMmJihYLmluZm8oIlNldHRpbmcgc3RhdGUgY2xhc3NlcyIsaCxzKSwoQXJyYXkuaXNBcnJheShzKT9zOltzXSkuZm9yRWFjaChkPT50aGlzLnNldENzc0NsYXNzKGgsZC50cmltKCkpKSksbCYmKFguaW5mbygiU2V0dGluZyBzdGF0ZSBzdHlsZXMiLGgsbCksKEFycmF5LmlzQXJyYXkobCk/bDpbbF0pLmZvckVhY2goZD0+dGhpcy5zZXRTdHlsZShoLGQudHJpbSgpKSkpLHUmJihYLmluZm8oIlNldHRpbmcgc3RhdGUgc3R5bGVzIixoLGwpLChBcnJheS5pc0FycmF5KHUpP3U6W3VdKS5mb3JFYWNoKGQ9PnRoaXMuc2V0VGV4dFN0eWxlKGgsZC50cmltKCkpKSl9Y2xlYXIoZSl7dGhpcy5ub2Rlcz1bXSx0aGlzLmVkZ2VzPVtdLHRoaXMuZG9jdW1lbnRzPXtyb290OkNwZSgpfSx0aGlzLmN1cnJlbnREb2N1bWVudD10aGlzLmRvY3VtZW50cy5yb290LHRoaXMuc3RhcnRFbmRDb3VudD0wLHRoaXMuY2xhc3Nlcz1TcGUoKSxlfHwodGhpcy5saW5rcz1uZXcgTWFwLGtyKCkpfWdldFN0YXRlKGUpe3JldHVybiB0aGlzLmN1cnJlbnREb2N1bWVudC5zdGF0ZXMuZ2V0KGUpfWdldFN0YXRlcygpe3JldHVybiB0aGlzLmN1cnJlbnREb2N1bWVudC5zdGF0ZXN9bG9nRG9jdW1lbnRzKCl7WC5pbmZvKCJEb2N1bWVudHMgPSAiLHRoaXMuZG9jdW1lbnRzKX1nZXRSZWxhdGlvbnMoKXtyZXR1cm4gdGhpcy5jdXJyZW50RG9jdW1lbnQucmVsYXRpb25zfWFkZExpbmsoZSxyLG4pe3RoaXMubGlua3Muc2V0KGUse3VybDpyLHRvb2x0aXA6bn0pLFgud2FybigiQWRkaW5nIGxpbmsiLGUscixuKX1nZXRMaW5rcygpe3JldHVybiB0aGlzLmxpbmtzfXN0YXJ0SWRJZk5lZWRlZChlPSIiKXtyZXR1cm4gZT09PWJzLlNUQVJUX05PREU/KHRoaXMuc3RhcnRFbmRDb3VudCsrLGAke2JzLlNUQVJUX1RZUEV9JHt0aGlzLnN0YXJ0RW5kQ291bnR9YCk6ZX1zdGFydFR5cGVJZk5lZWRlZChlPSIiLHI9VnApe3JldHVybiBlPT09YnMuU1RBUlRfTk9ERT9icy5TVEFSVF9UWVBFOnJ9ZW5kSWRJZk5lZWRlZChlPSIiKXtyZXR1cm4gZT09PWJzLkVORF9OT0RFPyh0aGlzLnN0YXJ0RW5kQ291bnQrKyxgJHticy5FTkRfVFlQRX0ke3RoaXMuc3RhcnRFbmRDb3VudH1gKTplfWVuZFR5cGVJZk5lZWRlZChlPSIiLHI9VnApe3JldHVybiBlPT09YnMuRU5EX05PREU/YnMuRU5EX1RZUEU6cn1hZGRSZWxhdGlvbk9ianMoZSxyLG49IiIpe2xldCBpPXRoaXMuc3RhcnRJZElmTmVlZGVkKGUuaWQudHJpbSgpKSxhPXRoaXMuc3RhcnRUeXBlSWZOZWVkZWQoZS5pZC50cmltKCksZS50eXBlKSxzPXRoaXMuc3RhcnRJZElmTmVlZGVkKHIuaWQudHJpbSgpKSxsPXRoaXMuc3RhcnRUeXBlSWZOZWVkZWQoci5pZC50cmltKCksci50eXBlKTt0aGlzLmFkZFN0YXRlKGksYSxlLmRvYyxlLmRlc2NyaXB0aW9uLGUubm90ZSxlLmNsYXNzZXMsZS5zdHlsZXMsZS50ZXh0U3R5bGVzKSx0aGlzLmFkZFN0YXRlKHMsbCxyLmRvYyxyLmRlc2NyaXB0aW9uLHIubm90ZSxyLmNsYXNzZXMsci5zdHlsZXMsci50ZXh0U3R5bGVzKSx0aGlzLmN1cnJlbnREb2N1bWVudC5yZWxhdGlvbnMucHVzaCh7aWQxOmksaWQyOnMscmVsYXRpb25UaXRsZTpaZS5zYW5pdGl6ZVRleHQobixtZSgpKX0pfWFkZFJlbGF0aW9uKGUscixuKXtpZih0eXBlb2YgZT09Im9iamVjdCImJnR5cGVvZiByPT0ib2JqZWN0Iil0aGlzLmFkZFJlbGF0aW9uT2JqcyhlLHIsbik7ZWxzZSBpZih0eXBlb2YgZT09InN0cmluZyImJnR5cGVvZiByPT0ic3RyaW5nIil7bGV0IGk9dGhpcy5zdGFydElkSWZOZWVkZWQoZS50cmltKCkpLGE9dGhpcy5zdGFydFR5cGVJZk5lZWRlZChlKSxzPXRoaXMuZW5kSWRJZk5lZWRlZChyLnRyaW0oKSksbD10aGlzLmVuZFR5cGVJZk5lZWRlZChyKTt0aGlzLmFkZFN0YXRlKGksYSksdGhpcy5hZGRTdGF0ZShzLGwpLHRoaXMuY3VycmVudERvY3VtZW50LnJlbGF0aW9ucy5wdXNoKHtpZDE6aSxpZDI6cyxyZWxhdGlvblRpdGxlOm4/WmUuc2FuaXRpemVUZXh0KG4sbWUoKSk6dm9pZCAwfSl9fWFkZERlc2NyaXB0aW9uKGUscil7bGV0IG49dGhpcy5jdXJyZW50RG9jdW1lbnQuc3RhdGVzLmdldChlKSxpPXIuc3RhcnRzV2l0aCgiOiIpP3IucmVwbGFjZSgiOiIsIiIpLnRyaW0oKTpyO24/LmRlc2NyaXB0aW9ucz8ucHVzaChaZS5zYW5pdGl6ZVRleHQoaSxtZSgpKSl9Y2xlYW51cExhYmVsKGUpe3JldHVybiBlLnN0YXJ0c1dpdGgoIjoiKT9lLnNsaWNlKDIpLnRyaW0oKTplLnRyaW0oKX1nZXREaXZpZGVySWQoKXtyZXR1cm4gdGhpcy5kaXZpZGVyQ250KyssYGRpdmlkZXItaWQtJHt0aGlzLmRpdmlkZXJDbnR9YH1hZGRTdHlsZUNsYXNzKGUscj0iIil7dGhpcy5jbGFzc2VzLmhhcyhlKXx8dGhpcy5jbGFzc2VzLnNldChlLHtpZDplLHN0eWxlczpbXSx0ZXh0U3R5bGVzOltdfSk7bGV0IG49dGhpcy5jbGFzc2VzLmdldChlKTtyJiZuJiZyLnNwbGl0KGJzLlNUWUxFQ0xBU1NfU0VQKS5mb3JFYWNoKGk9PntsZXQgYT1pLnJlcGxhY2UoLyhbXjtdKik7LywiJDEiKS50cmltKCk7aWYoUmVnRXhwKGJzLkNPTE9SX0tFWVdPUkQpLmV4ZWMoaSkpe2xldCBsPWEucmVwbGFjZShicy5GSUxMX0tFWVdPUkQsYnMuQkdfRklMTCkucmVwbGFjZShicy5DT0xPUl9LRVlXT1JELGJzLkZJTExfS0VZV09SRCk7bi50ZXh0U3R5bGVzLnB1c2gobCl9bi5zdHlsZXMucHVzaChhKX0pfWdldENsYXNzZXMoKXtyZXR1cm4gdGhpcy5jbGFzc2VzfXNldENzc0NsYXNzKGUscil7ZS5zcGxpdCgiLCIpLmZvckVhY2gobj0+e2xldCBpPXRoaXMuZ2V0U3RhdGUobik7aWYoIWkpe2xldCBhPW4udHJpbSgpO3RoaXMuYWRkU3RhdGUoYSksaT10aGlzLmdldFN0YXRlKGEpfWk/LmNsYXNzZXM/LnB1c2gocil9KX1zZXRTdHlsZShlLHIpe3RoaXMuZ2V0U3RhdGUoZSk/LnN0eWxlcz8ucHVzaChyKX1zZXRUZXh0U3R5bGUoZSxyKXt0aGlzLmdldFN0YXRlKGUpPy50ZXh0U3R5bGVzPy5wdXNoKHIpfWdldERpcmVjdGlvblN0YXRlbWVudCgpe3JldHVybiB0aGlzLnJvb3REb2MuZmluZChlPT5lLnN0bXQ9PT1BUCl9Z2V0RGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0RGlyZWN0aW9uU3RhdGVtZW50KCk/LnZhbHVlPz9zcGV9c2V0RGlyZWN0aW9uKGUpe2xldCByPXRoaXMuZ2V0RGlyZWN0aW9uU3RhdGVtZW50KCk7cj9yLnZhbHVlPWU6dGhpcy5yb290RG9jLnVuc2hpZnQoe3N0bXQ6QVAsdmFsdWU6ZX0pfXRyaW1Db2xvbihlKXtyZXR1cm4gZS5zdGFydHNXaXRoKCI6Iik/ZS5zbGljZSgxKS50cmltKCk6ZS50cmltKCl9Z2V0RGF0YSgpe2xldCBlPW1lKCk7cmV0dXJue25vZGVzOnRoaXMubm9kZXMsZWRnZXM6dGhpcy5lZGdlcyxvdGhlcjp7fSxjb25maWc6ZSxkaXJlY3Rpb246elAodGhpcy5nZXRSb290RG9jVjIoKSl9fWdldENvbmZpZygpe3JldHVybiBtZSgpLnN0YXRlfX19KTt2YXIgV0hlLHU2LFZQPU4oKCk9PnsidXNlIHN0cmljdCI7V0hlPW8odD0+YApkZWZzICNzdGF0ZWRpYWdyYW0tYmFyYkVuZCB7CiAgICBmaWxsOiAke3QudHJhbnNpdGlvbkNvbG9yfTsKICAgIHN0cm9rZTogJHt0LnRyYW5zaXRpb25Db2xvcn07CiAgfQpnLnN0YXRlR3JvdXAgdGV4dCB7CiAgZmlsbDogJHt0Lm5vZGVCb3JkZXJ9OwogIHN0cm9rZTogbm9uZTsKICBmb250LXNpemU6IDEwcHg7Cn0KZy5zdGF0ZUdyb3VwIHRleHQgewogIGZpbGw6ICR7dC50ZXh0Q29sb3J9OwogIHN0cm9rZTogbm9uZTsKICBmb250LXNpemU6IDEwcHg7Cgp9Cmcuc3RhdGVHcm91cCAuc3RhdGUtdGl0bGUgewogIGZvbnQtd2VpZ2h0OiBib2xkZXI7CiAgZmlsbDogJHt0LnN0YXRlTGFiZWxDb2xvcn07Cn0KCmcuc3RhdGVHcm91cCByZWN0IHsKICBmaWxsOiAke3QubWFpbkJrZ307CiAgc3Ryb2tlOiAke3Qubm9kZUJvcmRlcn07Cn0KCmcuc3RhdGVHcm91cCBsaW5lIHsKICBzdHJva2U6ICR7dC5saW5lQ29sb3J9OwogIHN0cm9rZS13aWR0aDogMTsKfQoKLnRyYW5zaXRpb24gewogIHN0cm9rZTogJHt0LnRyYW5zaXRpb25Db2xvcn07CiAgc3Ryb2tlLXdpZHRoOiAxOwogIGZpbGw6IG5vbmU7Cn0KCi5zdGF0ZUdyb3VwIC5jb21wb3NpdCB7CiAgZmlsbDogJHt0LmJhY2tncm91bmR9OwogIGJvcmRlci1ib3R0b206IDFweAp9Cgouc3RhdGVHcm91cCAuYWx0LWNvbXBvc2l0IHsKICBmaWxsOiAjZTBlMGUwOwogIGJvcmRlci1ib3R0b206IDFweAp9Cgouc3RhdGUtbm90ZSB7CiAgc3Ryb2tlOiAke3Qubm90ZUJvcmRlckNvbG9yfTsKICBmaWxsOiAke3Qubm90ZUJrZ0NvbG9yfTsKCiAgdGV4dCB7CiAgICBmaWxsOiAke3Qubm90ZVRleHRDb2xvcn07CiAgICBzdHJva2U6IG5vbmU7CiAgICBmb250LXNpemU6IDEwcHg7CiAgfQp9Cgouc3RhdGVMYWJlbCAuYm94IHsKICBzdHJva2U6IG5vbmU7CiAgc3Ryb2tlLXdpZHRoOiAwOwogIGZpbGw6ICR7dC5tYWluQmtnfTsKICBvcGFjaXR5OiAwLjU7Cn0KCi5lZGdlTGFiZWwgLmxhYmVsIHJlY3QgewogIGZpbGw6ICR7dC5sYWJlbEJhY2tncm91bmRDb2xvcn07CiAgb3BhY2l0eTogMC41Owp9Ci5lZGdlTGFiZWwgewogIGJhY2tncm91bmQtY29sb3I6ICR7dC5lZGdlTGFiZWxCYWNrZ3JvdW5kfTsKICBwIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICR7dC5lZGdlTGFiZWxCYWNrZ3JvdW5kfTsKICB9CiAgcmVjdCB7CiAgICBvcGFjaXR5OiAwLjU7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3QuZWRnZUxhYmVsQmFja2dyb3VuZH07CiAgICBmaWxsOiAke3QuZWRnZUxhYmVsQmFja2dyb3VuZH07CiAgfQogIHRleHQtYWxpZ246IGNlbnRlcjsKfQouZWRnZUxhYmVsIC5sYWJlbCB0ZXh0IHsKICBmaWxsOiAke3QudHJhbnNpdGlvbkxhYmVsQ29sb3J8fHQudGVydGlhcnlUZXh0Q29sb3J9Owp9Ci5sYWJlbCBkaXYgLmVkZ2VMYWJlbCB7CiAgY29sb3I6ICR7dC50cmFuc2l0aW9uTGFiZWxDb2xvcnx8dC50ZXJ0aWFyeVRleHRDb2xvcn07Cn0KCi5zdGF0ZUxhYmVsIHRleHQgewogIGZpbGw6ICR7dC5zdGF0ZUxhYmVsQ29sb3J9OwogIGZvbnQtc2l6ZTogMTBweDsKICBmb250LXdlaWdodDogYm9sZDsKfQoKLm5vZGUgY2lyY2xlLnN0YXRlLXN0YXJ0IHsKICBmaWxsOiAke3Quc3BlY2lhbFN0YXRlQ29sb3J9OwogIHN0cm9rZTogJHt0LnNwZWNpYWxTdGF0ZUNvbG9yfTsKfQoKLm5vZGUgLmZvcmstam9pbiB7CiAgZmlsbDogJHt0LnNwZWNpYWxTdGF0ZUNvbG9yfTsKICBzdHJva2U6ICR7dC5zcGVjaWFsU3RhdGVDb2xvcn07Cn0KCi5ub2RlIGNpcmNsZS5zdGF0ZS1lbmQgewogIGZpbGw6ICR7dC5pbm5lckVuZEJhY2tncm91bmR9OwogIHN0cm9rZTogJHt0LmJhY2tncm91bmR9OwogIHN0cm9rZS13aWR0aDogMS41Cn0KLmVuZC1zdGF0ZS1pbm5lciB7CiAgZmlsbDogJHt0LmNvbXBvc2l0ZUJhY2tncm91bmR8fHQuYmFja2dyb3VuZH07CiAgLy8gc3Ryb2tlOiAke3QuYmFja2dyb3VuZH07CiAgc3Ryb2tlLXdpZHRoOiAxLjUKfQoKLm5vZGUgcmVjdCB7CiAgZmlsbDogJHt0LnN0YXRlQmtnfHx0Lm1haW5Ca2d9OwogIHN0cm9rZTogJHt0LnN0YXRlQm9yZGVyfHx0Lm5vZGVCb3JkZXJ9OwogIHN0cm9rZS13aWR0aDogMXB4Owp9Ci5ub2RlIHBvbHlnb24gewogIGZpbGw6ICR7dC5tYWluQmtnfTsKICBzdHJva2U6ICR7dC5zdGF0ZUJvcmRlcnx8dC5ub2RlQm9yZGVyfTs7CiAgc3Ryb2tlLXdpZHRoOiAxcHg7Cn0KI3N0YXRlZGlhZ3JhbS1iYXJiRW5kIHsKICBmaWxsOiAke3QubGluZUNvbG9yfTsKfQoKLnN0YXRlZGlhZ3JhbS1jbHVzdGVyIHJlY3QgewogIGZpbGw6ICR7dC5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR9OwogIHN0cm9rZTogJHt0LnN0YXRlQm9yZGVyfHx0Lm5vZGVCb3JkZXJ9OwogIHN0cm9rZS13aWR0aDogMXB4Owp9CgouY2x1c3Rlci1sYWJlbCwgLm5vZGVMYWJlbCB7CiAgY29sb3I6ICR7dC5zdGF0ZUxhYmVsQ29sb3J9OwogIC8vIGxpbmUtaGVpZ2h0OiAxOwp9Cgouc3RhdGVkaWFncmFtLWNsdXN0ZXIgcmVjdC5vdXRlciB7CiAgcng6IDVweDsKICByeTogNXB4Owp9Ci5zdGF0ZWRpYWdyYW0tc3RhdGUgLmRpdmlkZXIgewogIHN0cm9rZTogJHt0LnN0YXRlQm9yZGVyfHx0Lm5vZGVCb3JkZXJ9Owp9Cgouc3RhdGVkaWFncmFtLXN0YXRlIC50aXRsZS1zdGF0ZSB7CiAgcng6IDVweDsKICByeTogNXB4Owp9Ci5zdGF0ZWRpYWdyYW0tY2x1c3Rlci5zdGF0ZWRpYWdyYW0tY2x1c3RlciAuaW5uZXIgewogIGZpbGw6ICR7dC5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0LmJhY2tncm91bmR9Owp9Ci5zdGF0ZWRpYWdyYW0tY2x1c3Rlci5zdGF0ZWRpYWdyYW0tY2x1c3Rlci1hbHQgLmlubmVyIHsKICBmaWxsOiAke3QuYWx0QmFja2dyb3VuZD90LmFsdEJhY2tncm91bmQ6IiNlZmVmZWYifTsKfQoKLnN0YXRlZGlhZ3JhbS1jbHVzdGVyIC5pbm5lciB7CiAgcng6MDsKICByeTowOwp9Cgouc3RhdGVkaWFncmFtLXN0YXRlIHJlY3QuYmFzaWMgewogIHJ4OiA1cHg7CiAgcnk6IDVweDsKfQouc3RhdGVkaWFncmFtLXN0YXRlIHJlY3QuZGl2aWRlciB7CiAgc3Ryb2tlLWRhc2hhcnJheTogMTAsMTA7CiAgZmlsbDogJHt0LmFsdEJhY2tncm91bmQ/dC5hbHRCYWNrZ3JvdW5kOiIjZWZlZmVmIn07Cn0KCi5ub3RlLWVkZ2UgewogIHN0cm9rZS1kYXNoYXJyYXk6IDU7Cn0KCi5zdGF0ZWRpYWdyYW0tbm90ZSByZWN0IHsKICBmaWxsOiAke3Qubm90ZUJrZ0NvbG9yfTsKICBzdHJva2U6ICR7dC5ub3RlQm9yZGVyQ29sb3J9OwogIHN0cm9rZS13aWR0aDogMXB4OwogIHJ4OiAwOwogIHJ5OiAwOwp9Ci5zdGF0ZWRpYWdyYW0tbm90ZSByZWN0IHsKICBmaWxsOiAke3Qubm90ZUJrZ0NvbG9yfTsKICBzdHJva2U6ICR7dC5ub3RlQm9yZGVyQ29sb3J9OwogIHN0cm9rZS13aWR0aDogMXB4OwogIHJ4OiAwOwogIHJ5OiAwOwp9Cgouc3RhdGVkaWFncmFtLW5vdGUgdGV4dCB7CiAgZmlsbDogJHt0Lm5vdGVUZXh0Q29sb3J9Owp9Cgouc3RhdGVkaWFncmFtLW5vdGUgLm5vZGVMYWJlbCB7CiAgY29sb3I6ICR7dC5ub3RlVGV4dENvbG9yfTsKfQouc3RhdGVkaWFncmFtIC5lZGdlTGFiZWwgewogIGNvbG9yOiByZWQ7IC8vICR7dC5ub3RlVGV4dENvbG9yfTsKfQoKI2RlcGVuZGVuY3lTdGFydCwgI2RlcGVuZGVuY3lFbmQgewogIGZpbGw6ICR7dC5saW5lQ29sb3J9OwogIHN0cm9rZTogJHt0LmxpbmVDb2xvcn07CiAgc3Ryb2tlLXdpZHRoOiAxOwp9Cgouc3RhdGVkaWFncmFtVGl0bGVUZXh0IHsKICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogIGZvbnQtc2l6ZTogMThweDsKICBmaWxsOiAke3QudGV4dENvbG9yfTsKfQpgLCJnZXRTdHlsZXMiKSx1Nj1XSGV9KTt2YXIgcUhlLFlIZSxYSGUsakhlLF9wZSxLSGUsUUhlLFpIZSxKSGUsVVAsQXBlLERwZSxMcGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtmcigpO2M2KCk7ZXIoKTtwcigpO0d0KCk7eXQoKTtxSGU9byh0PT50LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY2xhc3MiLCJzdGFydC1zdGF0ZSIpLmF0dHIoInIiLG1lKCkuc3RhdGUuc2l6ZVVuaXQpLmF0dHIoImN4IixtZSgpLnN0YXRlLnBhZGRpbmcrbWUoKS5zdGF0ZS5zaXplVW5pdCkuYXR0cigiY3kiLG1lKCkuc3RhdGUucGFkZGluZyttZSgpLnN0YXRlLnNpemVVbml0KSwiZHJhd1N0YXJ0U3RhdGUiKSxZSGU9byh0PT50LmFwcGVuZCgibGluZSIpLnN0eWxlKCJzdHJva2UiLCJncmV5Iikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIzIikuYXR0cigieDEiLG1lKCkuc3RhdGUudGV4dEhlaWdodCkuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDIiLG1lKCkuc3RhdGUudGV4dEhlaWdodCoyKS5hdHRyKCJ5MSIsMCkuYXR0cigieTIiLDApLCJkcmF3RGl2aWRlciIpLFhIZT1vKCh0LGUpPT57bGV0IHI9dC5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IiwyKm1lKCkuc3RhdGUucGFkZGluZykuYXR0cigieSIsbWUoKS5zdGF0ZS50ZXh0SGVpZ2h0KzIqbWUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJmb250LXNpemUiLG1lKCkuc3RhdGUuZm9udFNpemUpLmF0dHIoImNsYXNzIiwic3RhdGUtdGl0bGUiKS50ZXh0KGUuaWQpLG49ci5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiB0Lmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLG1lKCkuc3RhdGUucGFkZGluZykuYXR0cigieSIsbWUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ3aWR0aCIsbi53aWR0aCsyKm1lKCkuc3RhdGUucGFkZGluZykuYXR0cigiaGVpZ2h0IixuLmhlaWdodCsyKm1lKCkuc3RhdGUucGFkZGluZykuYXR0cigicngiLG1lKCkuc3RhdGUucmFkaXVzKSxyfSwiZHJhd1NpbXBsZVN0YXRlIiksakhlPW8oKHQsZSk9PntsZXQgcj1vKGZ1bmN0aW9uKHAsbSxnKXtsZXQgeT1wLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IiwyKm1lKCkuc3RhdGUucGFkZGluZykudGV4dChtKTtnfHx5LmF0dHIoImR5IixtZSgpLnN0YXRlLnRleHRIZWlnaHQpfSwiYWRkVHNwYW4iKSxpPXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMiptZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInkiLG1lKCkuc3RhdGUudGV4dEhlaWdodCsxLjMqbWUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJmb250LXNpemUiLG1lKCkuc3RhdGUuZm9udFNpemUpLmF0dHIoImNsYXNzIiwic3RhdGUtdGl0bGUiKS50ZXh0KGUuZGVzY3JpcHRpb25zWzBdKS5ub2RlKCkuZ2V0QkJveCgpLGE9aS5oZWlnaHQscz10LmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLG1lKCkuc3RhdGUucGFkZGluZykuYXR0cigieSIsYSttZSgpLnN0YXRlLnBhZGRpbmcqLjQrbWUoKS5zdGF0ZS5kaXZpZGVyTWFyZ2luK21lKCkuc3RhdGUudGV4dEhlaWdodCkuYXR0cigiY2xhc3MiLCJzdGF0ZS1kZXNjcmlwdGlvbiIpLGw9ITAsdT0hMDtlLmRlc2NyaXB0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHApe2x8fChyKHMscCx1KSx1PSExKSxsPSExfSk7bGV0IGg9dC5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsbWUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5MSIsbWUoKS5zdGF0ZS5wYWRkaW5nK2ErbWUoKS5zdGF0ZS5kaXZpZGVyTWFyZ2luLzIpLmF0dHIoInkyIixtZSgpLnN0YXRlLnBhZGRpbmcrYSttZSgpLnN0YXRlLmRpdmlkZXJNYXJnaW4vMikuYXR0cigiY2xhc3MiLCJkZXNjci1kaXZpZGVyIiksZj1zLm5vZGUoKS5nZXRCQm94KCksZD1NYXRoLm1heChmLndpZHRoLGkud2lkdGgpO3JldHVybiBoLmF0dHIoIngyIixkKzMqbWUoKS5zdGF0ZS5wYWRkaW5nKSx0Lmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLG1lKCkuc3RhdGUucGFkZGluZykuYXR0cigieSIsbWUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ3aWR0aCIsZCsyKm1lKCkuc3RhdGUucGFkZGluZykuYXR0cigiaGVpZ2h0IixmLmhlaWdodCthKzIqbWUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJyeCIsbWUoKS5zdGF0ZS5yYWRpdXMpLHR9LCJkcmF3RGVzY3JTdGF0ZSIpLF9wZT1vKCh0LGUscik9PntsZXQgbj1tZSgpLnN0YXRlLnBhZGRpbmcsaT0yKm1lKCkuc3RhdGUucGFkZGluZyxhPXQubm9kZSgpLmdldEJCb3goKSxzPWEud2lkdGgsbD1hLngsdT10LmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDApLmF0dHIoInkiLG1lKCkuc3RhdGUudGl0bGVTaGlmdCkuYXR0cigiZm9udC1zaXplIixtZSgpLnN0YXRlLmZvbnRTaXplKS5hdHRyKCJjbGFzcyIsInN0YXRlLXRpdGxlIikudGV4dChlLmlkKSxmPXUubm9kZSgpLmdldEJCb3goKS53aWR0aCtpLGQ9TWF0aC5tYXgoZixzKTtkPT09cyYmKGQ9ZCtpKTtsZXQgcCxtPXQubm9kZSgpLmdldEJCb3goKTtlLmRvYyxwPWwtbixmPnMmJihwPShzLWQpLzIrbiksTWF0aC5hYnMobC1tLngpPG4mJmY+cyYmKHA9bC0oZi1zKS8yKTtsZXQgZz0xLW1lKCkuc3RhdGUudGV4dEhlaWdodDtyZXR1cm4gdC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ4IixwKS5hdHRyKCJ5IixnKS5hdHRyKCJjbGFzcyIscj8iYWx0LWNvbXBvc2l0IjoiY29tcG9zaXQiKS5hdHRyKCJ3aWR0aCIsZCkuYXR0cigiaGVpZ2h0IixtLmhlaWdodCttZSgpLnN0YXRlLnRleHRIZWlnaHQrbWUoKS5zdGF0ZS50aXRsZVNoaWZ0KzEpLmF0dHIoInJ4IiwiMCIpLHUuYXR0cigieCIscCtuKSxmPD1zJiZ1LmF0dHIoIngiLGwrKGQtaSkvMi1mLzIrbiksdC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ4IixwKS5hdHRyKCJ5IixtZSgpLnN0YXRlLnRpdGxlU2hpZnQtbWUoKS5zdGF0ZS50ZXh0SGVpZ2h0LW1lKCkuc3RhdGUucGFkZGluZykuYXR0cigid2lkdGgiLGQpLmF0dHIoImhlaWdodCIsbWUoKS5zdGF0ZS50ZXh0SGVpZ2h0KjMpLmF0dHIoInJ4IixtZSgpLnN0YXRlLnJhZGl1cyksdC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ4IixwKS5hdHRyKCJ5IixtZSgpLnN0YXRlLnRpdGxlU2hpZnQtbWUoKS5zdGF0ZS50ZXh0SGVpZ2h0LW1lKCkuc3RhdGUucGFkZGluZykuYXR0cigid2lkdGgiLGQpLmF0dHIoImhlaWdodCIsbS5oZWlnaHQrMysyKm1lKCkuc3RhdGUudGV4dEhlaWdodCkuYXR0cigicngiLG1lKCkuc3RhdGUucmFkaXVzKSx0fSwiYWRkVGl0bGVBbmRCb3giKSxLSGU9byh0PT4odC5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImNsYXNzIiwiZW5kLXN0YXRlLW91dGVyIikuYXR0cigiciIsbWUoKS5zdGF0ZS5zaXplVW5pdCttZSgpLnN0YXRlLm1pbmlQYWRkaW5nKS5hdHRyKCJjeCIsbWUoKS5zdGF0ZS5wYWRkaW5nK21lKCkuc3RhdGUuc2l6ZVVuaXQrbWUoKS5zdGF0ZS5taW5pUGFkZGluZykuYXR0cigiY3kiLG1lKCkuc3RhdGUucGFkZGluZyttZSgpLnN0YXRlLnNpemVVbml0K21lKCkuc3RhdGUubWluaVBhZGRpbmcpLHQuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjbGFzcyIsImVuZC1zdGF0ZS1pbm5lciIpLmF0dHIoInIiLG1lKCkuc3RhdGUuc2l6ZVVuaXQpLmF0dHIoImN4IixtZSgpLnN0YXRlLnBhZGRpbmcrbWUoKS5zdGF0ZS5zaXplVW5pdCsyKS5hdHRyKCJjeSIsbWUoKS5zdGF0ZS5wYWRkaW5nK21lKCkuc3RhdGUuc2l6ZVVuaXQrMikpLCJkcmF3RW5kU3RhdGUiKSxRSGU9bygodCxlKT0+e2xldCByPW1lKCkuc3RhdGUuZm9ya1dpZHRoLG49bWUoKS5zdGF0ZS5mb3JrSGVpZ2h0O2lmKGUucGFyZW50SWQpe2xldCBpPXI7cj1uLG49aX1yZXR1cm4gdC5hcHBlbmQoInJlY3QiKS5zdHlsZSgic3Ryb2tlIiwiYmxhY2siKS5zdHlsZSgiZmlsbCIsImJsYWNrIikuYXR0cigid2lkdGgiLHIpLmF0dHIoImhlaWdodCIsbikuYXR0cigieCIsbWUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5IixtZSgpLnN0YXRlLnBhZGRpbmcpfSwiZHJhd0ZvcmtKb2luU3RhdGUiKSxaSGU9bygodCxlLHIsbik9PntsZXQgaT0wLGE9bi5hcHBlbmQoInRleHQiKTthLnN0eWxlKCJ0ZXh0LWFuY2hvciIsInN0YXJ0IiksYS5hdHRyKCJjbGFzcyIsIm5vdGVUZXh0Iik7bGV0IHM9dC5yZXBsYWNlKC9cclxuL2csIjxici8+Iik7cz1zLnJlcGxhY2UoL1xuL2csIjxici8+Iik7bGV0IGw9cy5zcGxpdChaZS5saW5lQnJlYWtSZWdleCksdT0xLjI1Km1lKCkuc3RhdGUubm90ZU1hcmdpbjtmb3IobGV0IGggb2YgbCl7bGV0IGY9aC50cmltKCk7aWYoZi5sZW5ndGg+MCl7bGV0IGQ9YS5hcHBlbmQoInRzcGFuIik7aWYoZC50ZXh0KGYpLHU9PT0wKXtsZXQgcD1kLm5vZGUoKS5nZXRCQm94KCk7dSs9cC5oZWlnaHR9aSs9dSxkLmF0dHIoIngiLGUrbWUoKS5zdGF0ZS5ub3RlTWFyZ2luKSxkLmF0dHIoInkiLHIraSsxLjI1Km1lKCkuc3RhdGUubm90ZU1hcmdpbil9fXJldHVybnt0ZXh0V2lkdGg6YS5ub2RlKCkuZ2V0QkJveCgpLndpZHRoLHRleHRIZWlnaHQ6aX19LCJfZHJhd0xvbmdUZXh0IiksSkhlPW8oKHQsZSk9PntlLmF0dHIoImNsYXNzIiwic3RhdGUtbm90ZSIpO2xldCByPWUuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsMCkuYXR0cigieSIsbWUoKS5zdGF0ZS5wYWRkaW5nKSxuPWUuYXBwZW5kKCJnIikse3RleHRXaWR0aDppLHRleHRIZWlnaHQ6YX09WkhlKHQsMCwwLG4pO3JldHVybiByLmF0dHIoImhlaWdodCIsYSsyKm1lKCkuc3RhdGUubm90ZU1hcmdpbiksci5hdHRyKCJ3aWR0aCIsaSttZSgpLnN0YXRlLm5vdGVNYXJnaW4qMikscn0sImRyYXdOb3RlIiksVVA9byhmdW5jdGlvbih0LGUpe2xldCByPWUuaWQsbj17aWQ6cixsYWJlbDplLmlkLHdpZHRoOjAsaGVpZ2h0OjB9LGk9dC5hcHBlbmQoImciKS5hdHRyKCJpZCIscikuYXR0cigiY2xhc3MiLCJzdGF0ZUdyb3VwIik7ZS50eXBlPT09InN0YXJ0IiYmcUhlKGkpLGUudHlwZT09PSJlbmQiJiZLSGUoaSksKGUudHlwZT09PSJmb3JrInx8ZS50eXBlPT09ImpvaW4iKSYmUUhlKGksZSksZS50eXBlPT09Im5vdGUiJiZKSGUoZS5ub3RlLnRleHQsaSksZS50eXBlPT09ImRpdmlkZXIiJiZZSGUoaSksZS50eXBlPT09ImRlZmF1bHQiJiZlLmRlc2NyaXB0aW9ucy5sZW5ndGg9PT0wJiZYSGUoaSxlKSxlLnR5cGU9PT0iZGVmYXVsdCImJmUuZGVzY3JpcHRpb25zLmxlbmd0aD4wJiZqSGUoaSxlKTtsZXQgYT1pLm5vZGUoKS5nZXRCQm94KCk7cmV0dXJuIG4ud2lkdGg9YS53aWR0aCsyKm1lKCkuc3RhdGUucGFkZGluZyxuLmhlaWdodD1hLmhlaWdodCsyKm1lKCkuc3RhdGUucGFkZGluZyxufSwiZHJhd1N0YXRlIiksQXBlPTAsRHBlPW8oZnVuY3Rpb24odCxlLHIpe2xldCBuPW8oZnVuY3Rpb24odSl7c3dpdGNoKHUpe2Nhc2UgdGwucmVsYXRpb25UeXBlLkFHR1JFR0FUSU9OOnJldHVybiJhZ2dyZWdhdGlvbiI7Y2FzZSB0bC5yZWxhdGlvblR5cGUuRVhURU5TSU9OOnJldHVybiJleHRlbnNpb24iO2Nhc2UgdGwucmVsYXRpb25UeXBlLkNPTVBPU0lUSU9OOnJldHVybiJjb21wb3NpdGlvbiI7Y2FzZSB0bC5yZWxhdGlvblR5cGUuREVQRU5ERU5DWTpyZXR1cm4iZGVwZW5kZW5jeSJ9fSwiZ2V0UmVsYXRpb25UeXBlIik7ZS5wb2ludHM9ZS5wb2ludHMuZmlsdGVyKHU9PiFOdW1iZXIuaXNOYU4odS55KSk7bGV0IGk9ZS5wb2ludHMsYT1DbCgpLngoZnVuY3Rpb24odSl7cmV0dXJuIHUueH0pLnkoZnVuY3Rpb24odSl7cmV0dXJuIHUueX0pLmN1cnZlKE5vKSxzPXQuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsYShpKSkuYXR0cigiaWQiLCJlZGdlIitBcGUpLmF0dHIoImNsYXNzIiwidHJhbnNpdGlvbiIpLGw9IiI7aWYobWUoKS5zdGF0ZS5hcnJvd01hcmtlckFic29sdXRlJiYobD1tdSghMCkpLHMuYXR0cigibWFya2VyLWVuZCIsInVybCgiK2wrIiMiK24odGwucmVsYXRpb25UeXBlLkRFUEVOREVOQ1kpKyJFbmQpIiksci50aXRsZSE9PXZvaWQgMCl7bGV0IHU9dC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInN0YXRlTGFiZWwiKSx7eDpoLHk6Zn09VnQuY2FsY0xhYmVsUG9zaXRpb24oZS5wb2ludHMpLGQ9WmUuZ2V0Um93cyhyLnRpdGxlKSxwPTAsbT1bXSxnPTAseT0wO2ZvcihsZXQgYj0wO2I8PWQubGVuZ3RoO2IrKyl7bGV0IFQ9dS5hcHBlbmQoInRleHQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQoZFtiXSkuYXR0cigieCIsaCkuYXR0cigieSIsZitwKSxTPVQubm9kZSgpLmdldEJCb3goKTtnPU1hdGgubWF4KGcsUy53aWR0aCkseT1NYXRoLm1pbih5LFMueCksWC5pbmZvKFMueCxoLGYrcCkscD09PTAmJihwPVQubm9kZSgpLmdldEJCb3goKS5oZWlnaHQsWC5pbmZvKCJUaXRsZSBoZWlnaHQiLHAsZikpLG0ucHVzaChUKX1sZXQgdj1wKmQubGVuZ3RoO2lmKGQubGVuZ3RoPjEpe2xldCBiPShkLmxlbmd0aC0xKSpwKi41O20uZm9yRWFjaCgoVCxTKT0+VC5hdHRyKCJ5IixmK1MqcC1iKSksdj1wKmQubGVuZ3RofWxldCB4PXUubm9kZSgpLmdldEJCb3goKTt1Lmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoImNsYXNzIiwiYm94IikuYXR0cigieCIsaC1nLzItbWUoKS5zdGF0ZS5wYWRkaW5nLzIpLmF0dHIoInkiLGYtdi8yLW1lKCkuc3RhdGUucGFkZGluZy8yLTMuNSkuYXR0cigid2lkdGgiLGcrbWUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLHYrbWUoKS5zdGF0ZS5wYWRkaW5nKSxYLmluZm8oeCl9QXBlKyt9LCJkcmF3RWRnZSIpfSk7dmFyIGdvLEhQLGVXZSx0V2UscldlLG5XZSxScGUsTnBlLE1wZT1OKCgpPT57InVzZSBzdHJpY3QiO2ZyKCk7SlIoKTtXbygpO3l0KCk7cHIoKTtMcGUoKTtHdCgpO3hpKCk7SFA9e30sZVdlPW8oZnVuY3Rpb24oKXt9LCJzZXRDb25mIiksdFdlPW8oZnVuY3Rpb24odCl7dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiZGVwZW5kZW5jeUVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOSw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpfSwiaW5zZXJ0TWFya2VycyIpLHJXZT1vKGZ1bmN0aW9uKHQsZSxyLG4pe2dvPW1lKCkuc3RhdGU7bGV0IGk9bWUoKS5zZWN1cml0eUxldmVsLGE7aT09PSJzYW5kYm94IiYmKGE9R2UoIiNpIitlKSk7bGV0IHM9aT09PSJzYW5kYm94Ij9HZShhLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpOkdlKCJib2R5IiksbD1pPT09InNhbmRib3giP2Eubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQ6ZG9jdW1lbnQ7WC5kZWJ1ZygiUmVuZGVyaW5nIGRpYWdyYW0gIit0KTtsZXQgdT1zLnNlbGVjdChgW2lkPScke2V9J11gKTt0V2UodSk7bGV0IGg9bi5kYi5nZXRSb290RG9jKCk7UnBlKGgsdSx2b2lkIDAsITEscyxsLG4pO2xldCBmPWdvLnBhZGRpbmcsZD11Lm5vZGUoKS5nZXRCQm94KCkscD1kLndpZHRoK2YqMixtPWQuaGVpZ2h0K2YqMixnPXAqMS43NTtmbih1LG0sZyxnby51c2VNYXhXaWR0aCksdS5hdHRyKCJ2aWV3Qm94IixgJHtkLngtZ28ucGFkZGluZ30gICR7ZC55LWdvLnBhZGRpbmd9IGArcCsiICIrbSl9LCJkcmF3IiksbldlPW8odD0+dD90Lmxlbmd0aCpnby5mb250U2l6ZUZhY3RvcjoxLCJnZXRMYWJlbFdpZHRoIiksUnBlPW8oKHQsZSxyLG4saSxhLHMpPT57bGV0IGw9bmV3IHNuKHtjb21wb3VuZDohMCxtdWx0aWdyYXBoOiEwfSksdSxoPSEwO2Zvcih1PTA7dTx0Lmxlbmd0aDt1KyspaWYodFt1XS5zdG10PT09InJlbGF0aW9uIil7aD0hMTticmVha31yP2wuc2V0R3JhcGgoe3JhbmtkaXI6IkxSIixtdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwLHJhbmtlcjoidGlnaHQtdHJlZSIscmFua3NlcDpoPzE6Z28uZWRnZUxlbmd0aEZhY3Rvcixub2RlU2VwOmg/MTo1MCxpc011bHRpR3JhcGg6ITB9KTpsLnNldEdyYXBoKHtyYW5rZGlyOiJUQiIsbXVsdGlncmFwaDohMCxjb21wb3VuZDohMCxyYW5rc2VwOmg/MTpnby5lZGdlTGVuZ3RoRmFjdG9yLG5vZGVTZXA6aD8xOjUwLHJhbmtlcjoidGlnaHQtdHJlZSIsaXNNdWx0aUdyYXBoOiEwfSksbC5zZXREZWZhdWx0RWRnZUxhYmVsKGZ1bmN0aW9uKCl7cmV0dXJue319KTtsZXQgZj1zLmRiLmdldFN0YXRlcygpLGQ9cy5kYi5nZXRSZWxhdGlvbnMoKSxwPU9iamVjdC5rZXlzKGYpLG09ITA7Zm9yKGxldCBiIG9mIHApe2xldCBUPWZbYl07ciYmKFQucGFyZW50SWQ9cik7bGV0IFM7aWYoVC5kb2Mpe2xldCB3PWUuYXBwZW5kKCJnIikuYXR0cigiaWQiLFQuaWQpLmF0dHIoImNsYXNzIiwic3RhdGVHcm91cCIpO2lmKFM9UnBlKFQuZG9jLHcsVC5pZCwhbixpLGEscyksbSl7dz1fcGUodyxULG4pO2xldCBFPXcubm9kZSgpLmdldEJCb3goKTtTLndpZHRoPUUud2lkdGgsUy5oZWlnaHQ9RS5oZWlnaHQrZ28ucGFkZGluZy8yLEhQW1QuaWRdPXt5OmdvLmNvbXBvc2l0VGl0bGVTaXplfX1lbHNle2xldCBFPXcubm9kZSgpLmdldEJCb3goKTtTLndpZHRoPUUud2lkdGgsUy5oZWlnaHQ9RS5oZWlnaHR9fWVsc2UgUz1VUChlLFQsbCk7aWYoVC5ub3RlKXtsZXQgdz17ZGVzY3JpcHRpb25zOltdLGlkOlQuaWQrIi1ub3RlIixub3RlOlQubm90ZSx0eXBlOiJub3RlIn0sRT1VUChlLHcsbCk7VC5ub3RlLnBvc2l0aW9uPT09ImxlZnQgb2YiPyhsLnNldE5vZGUoUy5pZCsiLW5vdGUiLEUpLGwuc2V0Tm9kZShTLmlkLFMpKToobC5zZXROb2RlKFMuaWQsUyksbC5zZXROb2RlKFMuaWQrIi1ub3RlIixFKSksbC5zZXRQYXJlbnQoUy5pZCxTLmlkKyItZ3JvdXAiKSxsLnNldFBhcmVudChTLmlkKyItbm90ZSIsUy5pZCsiLWdyb3VwIil9ZWxzZSBsLnNldE5vZGUoUy5pZCxTKX1YLmRlYnVnKCJDb3VudD0iLGwubm9kZUNvdW50KCksbCk7bGV0IGc9MDtkLmZvckVhY2goZnVuY3Rpb24oYil7ZysrLFguZGVidWcoIlNldHRpbmcgZWRnZSIsYiksbC5zZXRFZGdlKGIuaWQxLGIuaWQyLHtyZWxhdGlvbjpiLHdpZHRoOm5XZShiLnRpdGxlKSxoZWlnaHQ6Z28ubGFiZWxIZWlnaHQqWmUuZ2V0Um93cyhiLnRpdGxlKS5sZW5ndGgsbGFiZWxwb3M6ImMifSwiaWQiK2cpfSksRzIobCksWC5kZWJ1ZygiR3JhcGggYWZ0ZXIgbGF5b3V0IixsLm5vZGVzKCkpO2xldCB5PWUubm9kZSgpO2wubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe2IhPT12b2lkIDAmJmwubm9kZShiKSE9PXZvaWQgMD8oWC53YXJuKCJOb2RlICIrYisiOiAiK0pTT04uc3RyaW5naWZ5KGwubm9kZShiKSkpLGkuc2VsZWN0KCIjIit5LmlkKyIgIyIrYikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKGwubm9kZShiKS54LWwubm9kZShiKS53aWR0aC8yKSsiLCIrKGwubm9kZShiKS55KyhIUFtiXT9IUFtiXS55OjApLWwubm9kZShiKS5oZWlnaHQvMikrIiApIiksaS5zZWxlY3QoIiMiK3kuaWQrIiAjIitiKS5hdHRyKCJkYXRhLXgtc2hpZnQiLGwubm9kZShiKS54LWwubm9kZShiKS53aWR0aC8yKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIiMiK3kuaWQrIiAjIitiKyIgLmRpdmlkZXIiKS5mb3JFYWNoKFM9PntsZXQgdz1TLnBhcmVudEVsZW1lbnQsRT0wLF89MDt3JiYody5wYXJlbnRFbGVtZW50JiYoRT13LnBhcmVudEVsZW1lbnQuZ2V0QkJveCgpLndpZHRoKSxfPXBhcnNlSW50KHcuZ2V0QXR0cmlidXRlKCJkYXRhLXgtc2hpZnQiKSwxMCksTnVtYmVyLmlzTmFOKF8pJiYoXz0wKSksUy5zZXRBdHRyaWJ1dGUoIngxIiwwLV8rOCksUy5zZXRBdHRyaWJ1dGUoIngyIixFLV8tOCl9KSk6WC5kZWJ1ZygiTm8gTm9kZSAiK2IrIjogIitKU09OLnN0cmluZ2lmeShsLm5vZGUoYikpKX0pO2xldCB2PXkuZ2V0QkJveCgpO2wuZWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe2IhPT12b2lkIDAmJmwuZWRnZShiKSE9PXZvaWQgMCYmKFguZGVidWcoIkVkZ2UgIitiLnYrIiAtPiAiK2IudysiOiAiK0pTT04uc3RyaW5naWZ5KGwuZWRnZShiKSkpLERwZShlLGwuZWRnZShiKSxsLmVkZ2UoYikucmVsYXRpb24pKX0pLHY9eS5nZXRCQm94KCk7bGV0IHg9e2lkOnJ8fCJyb290IixsYWJlbDpyfHwicm9vdCIsd2lkdGg6MCxoZWlnaHQ6MH07cmV0dXJuIHgud2lkdGg9di53aWR0aCsyKmdvLnBhZGRpbmcseC5oZWlnaHQ9di5oZWlnaHQrMipnby5wYWRkaW5nLFguZGVidWcoIkRvYyByZW5kZXJlZCIseCxsKSx4fSwicmVuZGVyRG9jIiksTnBlPXtzZXRDb25mOmVXZSxkcmF3OnJXZX19KTt2YXIgSXBlPXt9O3VyKElwZSx7ZGlhZ3JhbTooKT0+aVdlfSk7dmFyIGlXZSxPcGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtDUCgpO2M2KCk7VlAoKTtNcGUoKTtpV2U9e3BhcnNlcjpKUyxnZXQgZGIoKXtyZXR1cm4gbmV3IHRsKDEpfSxyZW5kZXJlcjpOcGUsc3R5bGVzOnU2LGluaXQ6byh0PT57dC5zdGF0ZXx8KHQuc3RhdGU9e30pLHQuc3RhdGUuYXJyb3dNYXJrZXJBYnNvbHV0ZT10LmFycm93TWFya2VyQWJzb2x1dGV9LCJpbml0Iil9fSk7dmFyIEZwZT17fTt1cihGcGUse2RpYWdyYW06KCk9PmxXZX0pO3ZhciBsV2UsJHBlPU4oKCk9PnsidXNlIHN0cmljdCI7Q1AoKTtjNigpO1ZQKCk7R1AoKTtsV2U9e3BhcnNlcjpKUyxnZXQgZGIoKXtyZXR1cm4gbmV3IHRsKDIpfSxyZW5kZXJlcjpFcGUsc3R5bGVzOnU2LGluaXQ6byh0PT57dC5zdGF0ZXx8KHQuc3RhdGU9e30pLHQuc3RhdGUuYXJyb3dNYXJrZXJBYnNvbHV0ZT10LmFycm93TWFya2VyQWJzb2x1dGV9LCJpbml0Iil9fSk7dmFyIFdQLFZwZSxVcGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtXUD1mdW5jdGlvbigpe3ZhciB0PW8oZnVuY3Rpb24oZCxwLG0sZyl7Zm9yKG09bXx8e30sZz1kLmxlbmd0aDtnLS07bVtkW2ddXT1wKTtyZXR1cm4gbX0sIm8iKSxlPVs2LDgsMTAsMTEsMTIsMTQsMTYsMTcsMThdLHI9WzEsOV0sbj1bMSwxMF0saT1bMSwxMV0sYT1bMSwxMl0scz1bMSwxM10sbD1bMSwxNF0sdT17dHJhY2U6byhmdW5jdGlvbigpe30sInRyYWNlIikseXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6Myxqb3VybmV5OjQsZG9jdW1lbnQ6NSxFT0Y6NixsaW5lOjcsU1BBQ0U6OCxzdGF0ZW1lbnQ6OSxORVdMSU5FOjEwLHRpdGxlOjExLGFjY190aXRsZToxMixhY2NfdGl0bGVfdmFsdWU6MTMsYWNjX2Rlc2NyOjE0LGFjY19kZXNjcl92YWx1ZToxNSxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjE2LHNlY3Rpb246MTcsdGFza05hbWU6MTgsdGFza0RhdGE6MTksJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6ImpvdXJuZXkiLDY6IkVPRiIsODoiU1BBQ0UiLDEwOiJORVdMSU5FIiwxMToidGl0bGUiLDEyOiJhY2NfdGl0bGUiLDEzOiJhY2NfdGl0bGVfdmFsdWUiLDE0OiJhY2NfZGVzY3IiLDE1OiJhY2NfZGVzY3JfdmFsdWUiLDE2OiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIiwxNzoic2VjdGlvbiIsMTg6InRhc2tOYW1lIiwxOToidGFza0RhdGEifSxwcm9kdWN0aW9uc186WzAsWzMsM10sWzUsMF0sWzUsMl0sWzcsMl0sWzcsMV0sWzcsMV0sWzcsMV0sWzksMV0sWzksMl0sWzksMl0sWzksMV0sWzksMV0sWzksMl1dLHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbihwLG0sZyx5LHYseCxiKXt2YXIgVD14Lmxlbmd0aC0xO3N3aXRjaCh2KXtjYXNlIDE6cmV0dXJuIHhbVC0xXTtjYXNlIDI6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMzp4W1QtMV0ucHVzaCh4W1RdKSx0aGlzLiQ9eFtULTFdO2JyZWFrO2Nhc2UgNDpjYXNlIDU6dGhpcy4kPXhbVF07YnJlYWs7Y2FzZSA2OmNhc2UgNzp0aGlzLiQ9W107YnJlYWs7Y2FzZSA4Onkuc2V0RGlhZ3JhbVRpdGxlKHhbVF0uc3Vic3RyKDYpKSx0aGlzLiQ9eFtUXS5zdWJzdHIoNik7YnJlYWs7Y2FzZSA5OnRoaXMuJD14W1RdLnRyaW0oKSx5LnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAxMDpjYXNlIDExOnRoaXMuJD14W1RdLnRyaW0oKSx5LnNldEFjY0Rlc2NyaXB0aW9uKHRoaXMuJCk7YnJlYWs7Y2FzZSAxMjp5LmFkZFNlY3Rpb24oeFtUXS5zdWJzdHIoOCkpLHRoaXMuJD14W1RdLnN1YnN0cig4KTticmVhaztjYXNlIDEzOnkuYWRkVGFzayh4W1QtMV0seFtUXSksdGhpcy4kPSJ0YXNrIjticmVha319LCJhbm9ueW1vdXMiKSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LHQoZSxbMiwyXSx7NTozfSksezY6WzEsNF0sNzo1LDg6WzEsNl0sOTo3LDEwOlsxLDhdLDExOnIsMTI6biwxNDppLDE2OmEsMTc6cywxODpsfSx0KGUsWzIsN10sezE6WzIsMV19KSx0KGUsWzIsM10pLHs5OjE1LDExOnIsMTI6biwxNDppLDE2OmEsMTc6cywxODpsfSx0KGUsWzIsNV0pLHQoZSxbMiw2XSksdChlLFsyLDhdKSx7MTM6WzEsMTZdfSx7MTU6WzEsMTddfSx0KGUsWzIsMTFdKSx0KGUsWzIsMTJdKSx7MTk6WzEsMThdfSx0KGUsWzIsNF0pLHQoZSxbMiw5XSksdChlLFsyLDEwXSksdChlLFsyLDEzXSldLGRlZmF1bHRBY3Rpb25zOnt9LHBhcnNlRXJyb3I6byhmdW5jdGlvbihwLG0pe2lmKG0ucmVjb3ZlcmFibGUpdGhpcy50cmFjZShwKTtlbHNle3ZhciBnPW5ldyBFcnJvcihwKTt0aHJvdyBnLmhhc2g9bSxnfX0sInBhcnNlRXJyb3IiKSxwYXJzZTpvKGZ1bmN0aW9uKHApe3ZhciBtPXRoaXMsZz1bMF0seT1bXSx2PVtudWxsXSx4PVtdLGI9dGhpcy50YWJsZSxUPSIiLFM9MCx3PTAsRT0wLF89MixDPTEsRD14LnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLE89T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxSPXt5eTp7fX07Zm9yKHZhciBrIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksaykmJihSLnl5W2tdPXRoaXMueXlba10pO08uc2V0SW5wdXQocCxSLnl5KSxSLnl5LmxleGVyPU8sUi55eS5wYXJzZXI9dGhpcyx0eXBlb2YgTy55eWxsb2M+InUiJiYoTy55eWxsb2M9e30pO3ZhciBMPU8ueXlsbG9jO3gucHVzaChMKTt2YXIgQT1PLm9wdGlvbnMmJk8ub3B0aW9ucy5yYW5nZXM7dHlwZW9mIFIueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9Ui55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBJKFEpe2cubGVuZ3RoPWcubGVuZ3RoLTIqUSx2Lmxlbmd0aD12Lmxlbmd0aC1RLHgubGVuZ3RoPXgubGVuZ3RoLVF9byhJLCJwb3BTdGFjayIpO2Z1bmN0aW9uIE0oKXt2YXIgUTtyZXR1cm4gUT15LnBvcCgpfHxPLmxleCgpfHxDLHR5cGVvZiBRIT0ibnVtYmVyIiYmKFEgaW5zdGFuY2VvZiBBcnJheSYmKHk9USxRPXkucG9wKCkpLFE9bS5zeW1ib2xzX1tRXXx8USksUX1vKE0sImxleCIpO2Zvcih2YXIgUCxCLEYseiwkLFUsSz17fSxlZSxZLGNlLFo7Oyl7aWYoRj1nW2cubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbRl0/ej10aGlzLmRlZmF1bHRBY3Rpb25zW0ZdOigoUD09PW51bGx8fHR5cGVvZiBQPiJ1IikmJihQPU0oKSksej1iW0ZdJiZiW0ZdW1BdKSx0eXBlb2Ygej4idSJ8fCF6Lmxlbmd0aHx8IXpbMF0pe3ZhciB1ZT0iIjtaPVtdO2ZvcihlZSBpbiBiW0ZdKXRoaXMudGVybWluYWxzX1tlZV0mJmVlPl8mJloucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW2VlXSsiJyIpO08uc2hvd1Bvc2l0aW9uP3VlPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKFMrMSkrYDoKYCtPLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArWi5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW1BdfHxQKSsiJyI6dWU9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoUysxKSsiOiBVbmV4cGVjdGVkICIrKFA9PUM/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19bUF18fFApKyInIiksdGhpcy5wYXJzZUVycm9yKHVlLHt0ZXh0Ok8ubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW1BdfHxQLGxpbmU6Ty55eWxpbmVubyxsb2M6TCxleHBlY3RlZDpafSl9aWYoelswXWluc3RhbmNlb2YgQXJyYXkmJnoubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitGKyIsIHRva2VuOiAiK1ApO3N3aXRjaCh6WzBdKXtjYXNlIDE6Zy5wdXNoKFApLHYucHVzaChPLnl5dGV4dCkseC5wdXNoKE8ueXlsbG9jKSxnLnB1c2goelsxXSksUD1udWxsLEI/KFA9QixCPW51bGwpOih3PU8ueXlsZW5nLFQ9Ty55eXRleHQsUz1PLnl5bGluZW5vLEw9Ty55eWxsb2MsRT4wJiZFLS0pO2JyZWFrO2Nhc2UgMjppZihZPXRoaXMucHJvZHVjdGlvbnNfW3pbMV1dWzFdLEsuJD12W3YubGVuZ3RoLVldLEsuXyQ9e2ZpcnN0X2xpbmU6eFt4Lmxlbmd0aC0oWXx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOnhbeC5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp4W3gubGVuZ3RoLShZfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnhbeC5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LEEmJihLLl8kLnJhbmdlPVt4W3gubGVuZ3RoLShZfHwxKV0ucmFuZ2VbMF0seFt4Lmxlbmd0aC0xXS5yYW5nZVsxXV0pLFU9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KEssW1QsdyxTLFIueXkselsxXSx2LHhdLmNvbmNhdChEKSksdHlwZW9mIFU8InUiKXJldHVybiBVO1kmJihnPWcuc2xpY2UoMCwtMSpZKjIpLHY9di5zbGljZSgwLC0xKlkpLHg9eC5zbGljZSgwLC0xKlkpKSxnLnB1c2godGhpcy5wcm9kdWN0aW9uc19belsxXV1bMF0pLHYucHVzaChLLiQpLHgucHVzaChLLl8kKSxjZT1iW2dbZy5sZW5ndGgtMl1dW2dbZy5sZW5ndGgtMV1dLGcucHVzaChjZSk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH0sInBhcnNlIil9LGg9ZnVuY3Rpb24oKXt2YXIgZD17RU9GOjEscGFyc2VFcnJvcjpvKGZ1bmN0aW9uKG0sZyl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihtLGcpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKG0pfSwicGFyc2VFcnJvciIpLHNldElucHV0Om8oZnVuY3Rpb24ocCxtKXtyZXR1cm4gdGhpcy55eT1tfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1wLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSwic2V0SW5wdXQiKSxpbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIHA9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPXAsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXAsdGhpcy5tYXRjaGVkKz1wO3ZhciBtPXAubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiBtPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxwfSwiaW5wdXQiKSx1bnB1dDpvKGZ1bmN0aW9uKHApe3ZhciBtPXAubGVuZ3RoLGc9cC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PXArdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLW0pLHRoaXMub2Zmc2V0LT1tO3ZhciB5PXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLGcubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1nLmxlbmd0aC0xKTt2YXIgdj10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46Zz8oZy5sZW5ndGg9PT15Lmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkreVt5Lmxlbmd0aC1nLmxlbmd0aF0ubGVuZ3RoLWdbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1tfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3ZbMF0sdlswXSt0aGlzLnl5bGVuZy1tXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LCJ1bnB1dCIpLG1vcmU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LCJtb3JlIikscmVqZWN0Om8oZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LCJyZWplY3QiKSxsZXNzOm8oZnVuY3Rpb24ocCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKHApKX0sImxlc3MiKSxwYXN0SW5wdXQ6byhmdW5jdGlvbigpe3ZhciBwPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4ocC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Auc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LCJwYXN0SW5wdXQiKSx1cGNvbWluZ0lucHV0Om8oZnVuY3Rpb24oKXt2YXIgcD10aGlzLm1hdGNoO3JldHVybiBwLmxlbmd0aDwyMCYmKHArPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXAubGVuZ3RoKSksKHAuc3Vic3RyKDAsMjApKyhwLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSwidXBjb21pbmdJbnB1dCIpLHNob3dQb3NpdGlvbjpvKGZ1bmN0aW9uKCl7dmFyIHA9dGhpcy5wYXN0SW5wdXQoKSxtPW5ldyBBcnJheShwLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIHArdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK20rIl4ifSwic2hvd1Bvc2l0aW9uIiksdGVzdF9tYXRjaDpvKGZ1bmN0aW9uKHAsbSl7dmFyIGcseSx2O2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJih2PXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHYueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSkseT1wWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSx5JiYodGhpcy55eWxpbmVubys9eS5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjp5P3lbeS5sZW5ndGgtMV0ubGVuZ3RoLXlbeS5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitwWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXBbMF0sdGhpcy5tYXRjaCs9cFswXSx0aGlzLm1hdGNoZXM9cCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShwWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1wWzBdLGc9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsbSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxnKXJldHVybiBnO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciB4IGluIHYpdGhpc1t4XT12W3hdO3JldHVybiExfXJldHVybiExfSwidGVzdF9tYXRjaCIpLG5leHQ6byhmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBwLG0sZyx5O3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIHY9dGhpcy5fY3VycmVudFJ1bGVzKCkseD0wO3g8di5sZW5ndGg7eCsrKWlmKGc9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1t2W3hdXSksZyYmKCFtfHxnWzBdLmxlbmd0aD5tWzBdLmxlbmd0aCkpe2lmKG09Zyx5PXgsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYocD10aGlzLnRlc3RfbWF0Y2goZyx2W3hdKSxwIT09ITEpcmV0dXJuIHA7aWYodGhpcy5fYmFja3RyYWNrKXttPSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIG0/KHA9dGhpcy50ZXN0X21hdGNoKG0sdlt5XSkscCE9PSExP3A6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LCJuZXh0IiksbGV4Om8oZnVuY3Rpb24oKXt2YXIgbT10aGlzLm5leHQoKTtyZXR1cm4gbXx8dGhpcy5sZXgoKX0sImxleCIpLGJlZ2luOm8oZnVuY3Rpb24obSl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKG0pfSwiYmVnaW4iKSxwb3BTdGF0ZTpvKGZ1bmN0aW9uKCl7dmFyIG09dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gbT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sInBvcFN0YXRlIiksX2N1cnJlbnRSdWxlczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sIl9jdXJyZW50UnVsZXMiKSx0b3BTdGF0ZTpvKGZ1bmN0aW9uKG0pe3JldHVybiBtPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMobXx8MCksbT49MD90aGlzLmNvbmRpdGlvblN0YWNrW21dOiJJTklUSUFMIn0sInRvcFN0YXRlIikscHVzaFN0YXRlOm8oZnVuY3Rpb24obSl7dGhpcy5iZWdpbihtKX0sInB1c2hTdGF0ZSIpLHN0YXRlU3RhY2tTaXplOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LCJzdGF0ZVN0YWNrU2l6ZSIpLG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKG0sZyx5LHYpe3ZhciB4PXY7c3dpdGNoKHkpe2Nhc2UgMDpicmVhaztjYXNlIDE6YnJlYWs7Y2FzZSAyOnJldHVybiAxMDtjYXNlIDM6YnJlYWs7Y2FzZSA0OmJyZWFrO2Nhc2UgNTpyZXR1cm4gNDtjYXNlIDY6cmV0dXJuIDExO2Nhc2UgNzpyZXR1cm4gdGhpcy5iZWdpbigiYWNjX3RpdGxlIiksMTI7YnJlYWs7Y2FzZSA4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY190aXRsZV92YWx1ZSI7YnJlYWs7Y2FzZSA5OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfZGVzY3IiKSwxNDticmVhaztjYXNlIDEwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7YnJlYWs7Y2FzZSAxMTp0aGlzLmJlZ2luKCJhY2NfZGVzY3JfbXVsdGlsaW5lIik7YnJlYWs7Y2FzZSAxMjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxMzpyZXR1cm4iYWNjX2Rlc2NyX211bHRpbGluZV92YWx1ZSI7Y2FzZSAxNDpyZXR1cm4gMTc7Y2FzZSAxNTpyZXR1cm4gMTg7Y2FzZSAxNjpyZXR1cm4gMTk7Y2FzZSAxNzpyZXR1cm4iOiI7Y2FzZSAxODpyZXR1cm4gNjtjYXNlIDE5OnJldHVybiJJTlZBTElEIn19LCJhbm9ueW1vdXMiKSxydWxlczpbL14oPzolKD8hXHspW15cbl0qKS9pLC9eKD86W15cfV0lJVteXG5dKikvaSwvXig/Oltcbl0rKS9pLC9eKD86XHMrKS9pLC9eKD86I1teXG5dKikvaSwvXig/OmpvdXJuZXlcYikvaSwvXig/OnRpdGxlXHNbXiNcbjtdKykvaSwvXig/OmFjY1RpdGxlXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqOlxzKikvaSwvXig/Oig/IVxufHwpKlteXG5dKikvaSwvXig/OmFjY0Rlc2NyXHMqXHtccyopL2ksL14oPzpbXH1dKS9pLC9eKD86W15cfV0qKS9pLC9eKD86c2VjdGlvblxzW14jOlxuO10rKS9pLC9eKD86W14jOlxuO10rKS9pLC9eKD86OlteI1xuO10rKS9pLC9eKD86OikvaSwvXig/OiQpL2ksL14oPzouKS9pXSxjb25kaXRpb25zOnthY2NfZGVzY3JfbXVsdGlsaW5lOntydWxlczpbMTIsMTNdLGluY2x1c2l2ZTohMX0sYWNjX2Rlc2NyOntydWxlczpbMTBdLGluY2x1c2l2ZTohMX0sYWNjX3RpdGxlOntydWxlczpbOF0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDIsMyw0LDUsNiw3LDksMTEsMTQsMTUsMTYsMTcsMTgsMTldLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gZH0oKTt1LmxleGVyPWg7ZnVuY3Rpb24gZigpe3RoaXMueXk9e319cmV0dXJuIG8oZiwiUGFyc2VyIiksZi5wcm90b3R5cGU9dSx1LlBhcnNlcj1mLG5ldyBmfSgpO1dQLnBhcnNlcj1XUDtWcGU9V1B9KTt2YXIgJDEscVAsUGIsQmIsZldlLGRXZSxwV2UsbVdlLGdXZSx5V2UsdldlLEhwZSx4V2UsWVAsV3BlPU4oKCk9PnsidXNlIHN0cmljdCI7R3QoKTtjaSgpOyQxPSIiLHFQPVtdLFBiPVtdLEJiPVtdLGZXZT1vKGZ1bmN0aW9uKCl7cVAubGVuZ3RoPTAsUGIubGVuZ3RoPTAsJDE9IiIsQmIubGVuZ3RoPTAsa3IoKX0sImNsZWFyIiksZFdlPW8oZnVuY3Rpb24odCl7JDE9dCxxUC5wdXNoKHQpfSwiYWRkU2VjdGlvbiIpLHBXZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIHFQfSwiZ2V0U2VjdGlvbnMiKSxtV2U9byhmdW5jdGlvbigpe2xldCB0PUhwZSgpLGU9MTAwLHI9MDtmb3IoOyF0JiZyPGU7KXQ9SHBlKCkscisrO3JldHVybiBQYi5wdXNoKC4uLkJiKSxQYn0sImdldFRhc2tzIiksZ1dlPW8oZnVuY3Rpb24oKXtsZXQgdD1bXTtyZXR1cm4gUGIuZm9yRWFjaChyPT57ci5wZW9wbGUmJnQucHVzaCguLi5yLnBlb3BsZSl9KSxbLi4ubmV3IFNldCh0KV0uc29ydCgpfSwidXBkYXRlQWN0b3JzIikseVdlPW8oZnVuY3Rpb24odCxlKXtsZXQgcj1lLnN1YnN0cigxKS5zcGxpdCgiOiIpLG49MCxpPVtdO3IubGVuZ3RoPT09MT8obj1OdW1iZXIoclswXSksaT1bXSk6KG49TnVtYmVyKHJbMF0pLGk9clsxXS5zcGxpdCgiLCIpKTtsZXQgYT1pLm1hcChsPT5sLnRyaW0oKSkscz17c2VjdGlvbjokMSx0eXBlOiQxLHBlb3BsZTphLHRhc2s6dCxzY29yZTpufTtCYi5wdXNoKHMpfSwiYWRkVGFzayIpLHZXZT1vKGZ1bmN0aW9uKHQpe2xldCBlPXtzZWN0aW9uOiQxLHR5cGU6JDEsZGVzY3JpcHRpb246dCx0YXNrOnQsY2xhc3NlczpbXX07UGIucHVzaChlKX0sImFkZFRhc2tPcmciKSxIcGU9byhmdW5jdGlvbigpe2xldCB0PW8oZnVuY3Rpb24ocil7cmV0dXJuIEJiW3JdLnByb2Nlc3NlZH0sImNvbXBpbGVUYXNrIiksZT0hMDtmb3IobGV0W3Isbl1vZiBCYi5lbnRyaWVzKCkpdChyKSxlPWUmJm4ucHJvY2Vzc2VkO3JldHVybiBlfSwiY29tcGlsZVRhc2tzIikseFdlPW8oZnVuY3Rpb24oKXtyZXR1cm4gZ1dlKCl9LCJnZXRBY3RvcnMiKSxZUD17Z2V0Q29uZmlnOm8oKCk9Pm1lKCkuam91cm5leSwiZ2V0Q29uZmlnIiksY2xlYXI6ZldlLHNldERpYWdyYW1UaXRsZTpPcixnZXREaWFncmFtVGl0bGU6TnIsc2V0QWNjVGl0bGU6QXIsZ2V0QWNjVGl0bGU6RHIsc2V0QWNjRGVzY3JpcHRpb246THIsZ2V0QWNjRGVzY3JpcHRpb246UnIsYWRkU2VjdGlvbjpkV2UsZ2V0U2VjdGlvbnM6cFdlLGdldFRhc2tzOm1XZSxhZGRUYXNrOnlXZSxhZGRUYXNrT3JnOnZXZSxnZXRBY3RvcnM6eFdlfX0pO3ZhciBiV2UscXBlLFlwZT1OKCgpPT57InVzZSBzdHJpY3QiO1htKCk7YldlPW8odD0+YC5sYWJlbCB7CiAgICBmb250LWZhbWlseTogJHt0LmZvbnRGYW1pbHl9OwogICAgY29sb3I6ICR7dC50ZXh0Q29sb3J9OwogIH0KICAubW91dGggewogICAgc3Ryb2tlOiAjNjY2OwogIH0KCiAgbGluZSB7CiAgICBzdHJva2U6ICR7dC50ZXh0Q29sb3J9CiAgfQoKICAubGVnZW5kIHsKICAgIGZpbGw6ICR7dC50ZXh0Q29sb3J9OwogICAgZm9udC1mYW1pbHk6ICR7dC5mb250RmFtaWx5fTsKICB9CgogIC5sYWJlbCB0ZXh0IHsKICAgIGZpbGw6ICMzMzM7CiAgfQogIC5sYWJlbCB7CiAgICBjb2xvcjogJHt0LnRleHRDb2xvcn0KICB9CgogIC5mYWNlIHsKICAgICR7dC5mYWNlQ29sb3I/YGZpbGw6ICR7dC5mYWNlQ29sb3J9YDoiZmlsbDogI0ZGRjhEQyJ9OwogICAgc3Ryb2tlOiAjOTk5OwogIH0KCiAgLm5vZGUgcmVjdCwKICAubm9kZSBjaXJjbGUsCiAgLm5vZGUgZWxsaXBzZSwKICAubm9kZSBwb2x5Z29uLAogIC5ub2RlIHBhdGggewogICAgZmlsbDogJHt0Lm1haW5Ca2d9OwogICAgc3Ryb2tlOiAke3Qubm9kZUJvcmRlcn07CiAgICBzdHJva2Utd2lkdGg6IDFweDsKICB9CgogIC5ub2RlIC5sYWJlbCB7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgfQogIC5ub2RlLmNsaWNrYWJsZSB7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgfQoKICAuYXJyb3doZWFkUGF0aCB7CiAgICBmaWxsOiAke3QuYXJyb3doZWFkQ29sb3J9OwogIH0KCiAgLmVkZ2VQYXRoIC5wYXRoIHsKICAgIHN0cm9rZTogJHt0LmxpbmVDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6IDEuNXB4OwogIH0KCiAgLmZsb3djaGFydC1saW5rIHsKICAgIHN0cm9rZTogJHt0LmxpbmVDb2xvcn07CiAgICBmaWxsOiBub25lOwogIH0KCiAgLmVkZ2VMYWJlbCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3QuZWRnZUxhYmVsQmFja2dyb3VuZH07CiAgICByZWN0IHsKICAgICAgb3BhY2l0eTogMC41OwogICAgfQogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KCiAgLmNsdXN0ZXIgcmVjdCB7CiAgfQoKICAuY2x1c3RlciB0ZXh0IHsKICAgIGZpbGw6ICR7dC50aXRsZUNvbG9yfTsKICB9CgogIGRpdi5tZXJtYWlkVG9vbHRpcCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBtYXgtd2lkdGg6IDIwMHB4OwogICAgcGFkZGluZzogMnB4OwogICAgZm9udC1mYW1pbHk6ICR7dC5mb250RmFtaWx5fTsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGJhY2tncm91bmQ6ICR7dC50ZXJ0aWFyeUNvbG9yfTsKICAgIGJvcmRlcjogMXB4IHNvbGlkICR7dC5ib3JkZXIyfTsKICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgei1pbmRleDogMTAwOwogIH0KCiAgLnRhc2stdHlwZS0wLCAuc2VjdGlvbi10eXBlLTAgIHsKICAgICR7dC5maWxsVHlwZTA/YGZpbGw6ICR7dC5maWxsVHlwZTB9YDoiIn07CiAgfQogIC50YXNrLXR5cGUtMSwgLnNlY3Rpb24tdHlwZS0xICB7CiAgICAke3QuZmlsbFR5cGUwP2BmaWxsOiAke3QuZmlsbFR5cGUxfWA6IiJ9OwogIH0KICAudGFzay10eXBlLTIsIC5zZWN0aW9uLXR5cGUtMiAgewogICAgJHt0LmZpbGxUeXBlMD9gZmlsbDogJHt0LmZpbGxUeXBlMn1gOiIifTsKICB9CiAgLnRhc2stdHlwZS0zLCAuc2VjdGlvbi10eXBlLTMgIHsKICAgICR7dC5maWxsVHlwZTA/YGZpbGw6ICR7dC5maWxsVHlwZTN9YDoiIn07CiAgfQogIC50YXNrLXR5cGUtNCwgLnNlY3Rpb24tdHlwZS00ICB7CiAgICAke3QuZmlsbFR5cGUwP2BmaWxsOiAke3QuZmlsbFR5cGU0fWA6IiJ9OwogIH0KICAudGFzay10eXBlLTUsIC5zZWN0aW9uLXR5cGUtNSAgewogICAgJHt0LmZpbGxUeXBlMD9gZmlsbDogJHt0LmZpbGxUeXBlNX1gOiIifTsKICB9CiAgLnRhc2stdHlwZS02LCAuc2VjdGlvbi10eXBlLTYgIHsKICAgICR7dC5maWxsVHlwZTA/YGZpbGw6ICR7dC5maWxsVHlwZTZ9YDoiIn07CiAgfQogIC50YXNrLXR5cGUtNywgLnNlY3Rpb24tdHlwZS03ICB7CiAgICAke3QuZmlsbFR5cGUwP2BmaWxsOiAke3QuZmlsbFR5cGU3fWA6IiJ9OwogIH0KCiAgLmFjdG9yLTAgewogICAgJHt0LmFjdG9yMD9gZmlsbDogJHt0LmFjdG9yMH1gOiIifTsKICB9CiAgLmFjdG9yLTEgewogICAgJHt0LmFjdG9yMT9gZmlsbDogJHt0LmFjdG9yMX1gOiIifTsKICB9CiAgLmFjdG9yLTIgewogICAgJHt0LmFjdG9yMj9gZmlsbDogJHt0LmFjdG9yMn1gOiIifTsKICB9CiAgLmFjdG9yLTMgewogICAgJHt0LmFjdG9yMz9gZmlsbDogJHt0LmFjdG9yM31gOiIifTsKICB9CiAgLmFjdG9yLTQgewogICAgJHt0LmFjdG9yND9gZmlsbDogJHt0LmFjdG9yNH1gOiIifTsKICB9CiAgLmFjdG9yLTUgewogICAgJHt0LmFjdG9yNT9gZmlsbDogJHt0LmFjdG9yNX1gOiIifTsKICB9CiAgJHtOYygpfQpgLCJnZXRTdHlsZXMiKSxxcGU9YldlfSk7dmFyIFhQLFRXZSxqcGUsS3BlLHdXZSxrV2UsWHBlLEVXZSxTV2UsUXBlLENXZSx6MSxacGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtmcigpO3QyKCk7WFA9byhmdW5jdGlvbih0LGUpe3JldHVybiBOZCh0LGUpfSwiZHJhd1JlY3QiKSxUV2U9byhmdW5jdGlvbih0LGUpe2xldCBuPXQuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsZS5jeCkuYXR0cigiY3kiLGUuY3kpLmF0dHIoImNsYXNzIiwiZmFjZSIpLmF0dHIoInIiLDE1KS5hdHRyKCJzdHJva2Utd2lkdGgiLDIpLmF0dHIoIm92ZXJmbG93IiwidmlzaWJsZSIpLGk9dC5hcHBlbmQoImciKTtpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLGUuY3gtMTUvMykuYXR0cigiY3kiLGUuY3ktMTUvMykuYXR0cigiciIsMS41KS5hdHRyKCJzdHJva2Utd2lkdGgiLDIpLmF0dHIoImZpbGwiLCIjNjY2IikuYXR0cigic3Ryb2tlIiwiIzY2NiIpLGkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsZS5jeCsxNS8zKS5hdHRyKCJjeSIsZS5jeS0xNS8zKS5hdHRyKCJyIiwxLjUpLmF0dHIoInN0cm9rZS13aWR0aCIsMikuYXR0cigiZmlsbCIsIiM2NjYiKS5hdHRyKCJzdHJva2UiLCIjNjY2Iik7ZnVuY3Rpb24gYSh1KXtsZXQgaD1TbCgpLnN0YXJ0QW5nbGUoTWF0aC5QSS8yKS5lbmRBbmdsZSgzKihNYXRoLlBJLzIpKS5pbm5lclJhZGl1cyg3LjUpLm91dGVyUmFkaXVzKDYuODE4MTgxODE4MTgxODE3NSk7dS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigiZCIsaCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrZS5jeCsiLCIrKGUuY3krMikrIikiKX1vKGEsInNtaWxlIik7ZnVuY3Rpb24gcyh1KXtsZXQgaD1TbCgpLnN0YXJ0QW5nbGUoMypNYXRoLlBJLzIpLmVuZEFuZ2xlKDUqKE1hdGguUEkvMikpLmlubmVyUmFkaXVzKDcuNSkub3V0ZXJSYWRpdXMoNi44MTgxODE4MTgxODE4MTc1KTt1LmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwibW91dGgiKS5hdHRyKCJkIixoKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitlLmN4KyIsIisoZS5jeSs3KSsiKSIpfW8ocywic2FkIik7ZnVuY3Rpb24gbCh1KXt1LmFwcGVuZCgibGluZSIpLmF0dHIoImNsYXNzIiwibW91dGgiKS5hdHRyKCJzdHJva2UiLDIpLmF0dHIoIngxIixlLmN4LTUpLmF0dHIoInkxIixlLmN5KzcpLmF0dHIoIngyIixlLmN4KzUpLmF0dHIoInkyIixlLmN5KzcpLmF0dHIoImNsYXNzIiwibW91dGgiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxcHgiKS5hdHRyKCJzdHJva2UiLCIjNjY2Iil9cmV0dXJuIG8obCwiYW1iaXZhbGVudCIpLGUuc2NvcmU+Mz9hKGkpOmUuc2NvcmU8Mz9zKGkpOmwoaSksbn0sImRyYXdGYWNlIiksanBlPW8oZnVuY3Rpb24odCxlKXtsZXQgcj10LmFwcGVuZCgiY2lyY2xlIik7cmV0dXJuIHIuYXR0cigiY3giLGUuY3gpLHIuYXR0cigiY3kiLGUuY3kpLHIuYXR0cigiY2xhc3MiLCJhY3Rvci0iK2UucG9zKSxyLmF0dHIoImZpbGwiLGUuZmlsbCksci5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKSxyLmF0dHIoInIiLGUuciksci5jbGFzcyE9PXZvaWQgMCYmci5hdHRyKCJjbGFzcyIsci5jbGFzcyksZS50aXRsZSE9PXZvaWQgMCYmci5hcHBlbmQoInRpdGxlIikudGV4dChlLnRpdGxlKSxyfSwiZHJhd0NpcmNsZSIpLEtwZT1vKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIFhZKHQsZSl9LCJkcmF3VGV4dCIpLHdXZT1vKGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihpLGEscyxsLHUpe3JldHVybiBpKyIsIithKyIgIisoaStzKSsiLCIrYSsiICIrKGkrcykrIiwiKyhhK2wtdSkrIiAiKyhpK3MtdSoxLjIpKyIsIisoYStsKSsiICIraSsiLCIrKGErbCl9byhyLCJnZW5Qb2ludHMiKTtsZXQgbj10LmFwcGVuZCgicG9seWdvbiIpO24uYXR0cigicG9pbnRzIixyKGUueCxlLnksNTAsMjAsNykpLG4uYXR0cigiY2xhc3MiLCJsYWJlbEJveCIpLGUueT1lLnkrZS5sYWJlbE1hcmdpbixlLng9ZS54Ky41KmUubGFiZWxNYXJnaW4sS3BlKHQsZSl9LCJkcmF3TGFiZWwiKSxrV2U9byhmdW5jdGlvbih0LGUscil7bGV0IG49dC5hcHBlbmQoImciKSxpPUFsKCk7aS54PWUueCxpLnk9ZS55LGkuZmlsbD1lLmZpbGwsaS53aWR0aD1yLndpZHRoKmUudGFza0NvdW50K3IuZGlhZ3JhbU1hcmdpblgqKGUudGFza0NvdW50LTEpLGkuaGVpZ2h0PXIuaGVpZ2h0LGkuY2xhc3M9ImpvdXJuZXktc2VjdGlvbiBzZWN0aW9uLXR5cGUtIitlLm51bSxpLnJ4PTMsaS5yeT0zLFhQKG4saSksUXBlKHIpKGUudGV4dCxuLGkueCxpLnksaS53aWR0aCxpLmhlaWdodCx7Y2xhc3M6ImpvdXJuZXktc2VjdGlvbiBzZWN0aW9uLXR5cGUtIitlLm51bX0scixlLmNvbG91cil9LCJkcmF3U2VjdGlvbiIpLFhwZT0tMSxFV2U9byhmdW5jdGlvbih0LGUscil7bGV0IG49ZS54K3Iud2lkdGgvMixpPXQuYXBwZW5kKCJnIik7WHBlKys7bGV0IGE9MzAwKzUqMzA7aS5hcHBlbmQoImxpbmUiKS5hdHRyKCJpZCIsInRhc2siK1hwZSkuYXR0cigieDEiLG4pLmF0dHIoInkxIixlLnkpLmF0dHIoIngyIixuKS5hdHRyKCJ5MiIsYSkuYXR0cigiY2xhc3MiLCJ0YXNrLWxpbmUiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxcHgiKS5hdHRyKCJzdHJva2UtZGFzaGFycmF5IiwiNCAyIikuYXR0cigic3Ryb2tlIiwiIzY2NiIpLFRXZShpLHtjeDpuLGN5OjMwMCsoNS1lLnNjb3JlKSozMCxzY29yZTplLnNjb3JlfSk7bGV0IHM9QWwoKTtzLng9ZS54LHMueT1lLnkscy5maWxsPWUuZmlsbCxzLndpZHRoPXIud2lkdGgscy5oZWlnaHQ9ci5oZWlnaHQscy5jbGFzcz0idGFzayB0YXNrLXR5cGUtIitlLm51bSxzLnJ4PTMscy5yeT0zLFhQKGkscyk7bGV0IGw9ZS54KzE0O2UucGVvcGxlLmZvckVhY2godT0+e2xldCBoPWUuYWN0b3JzW3VdLmNvbG9yLGY9e2N4OmwsY3k6ZS55LHI6NyxmaWxsOmgsc3Ryb2tlOiIjMDAwIix0aXRsZTp1LHBvczplLmFjdG9yc1t1XS5wb3NpdGlvbn07anBlKGksZiksbCs9MTB9KSxRcGUocikoZS50YXNrLGkscy54LHMueSxzLndpZHRoLHMuaGVpZ2h0LHtjbGFzczoidGFzayJ9LHIsZS5jb2xvdXIpfSwiZHJhd1Rhc2siKSxTV2U9byhmdW5jdGlvbih0LGUpe2lUKHQsZSl9LCJkcmF3QmFja2dyb3VuZFJlY3QiKSxRcGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGksYSxzLGwsdSxoLGYsZCl7bGV0IHA9YS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixzK3UvMikuYXR0cigieSIsbCtoLzIrNSkuc3R5bGUoImZvbnQtY29sb3IiLGQpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQoaSk7bihwLGYpfW8odCwiYnlUZXh0Iik7ZnVuY3Rpb24gZShpLGEscyxsLHUsaCxmLGQscCl7bGV0e3Rhc2tGb250U2l6ZTptLHRhc2tGb250RmFtaWx5Omd9PWQseT1pLnNwbGl0KC88YnJccypcLz8+L2dpKTtmb3IobGV0IHY9MDt2PHkubGVuZ3RoO3YrKyl7bGV0IHg9diptLW0qKHkubGVuZ3RoLTEpLzIsYj1hLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLHMrdS8yKS5hdHRyKCJ5IixsKS5hdHRyKCJmaWxsIixwKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5zdHlsZSgiZm9udC1zaXplIixtKS5zdHlsZSgiZm9udC1mYW1pbHkiLGcpO2IuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLHMrdS8yKS5hdHRyKCJkeSIseCkudGV4dCh5W3ZdKSxiLmF0dHIoInkiLGwraC8yKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsImNlbnRyYWwiKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJjZW50cmFsIiksbihiLGYpfX1vKGUsImJ5VHNwYW4iKTtmdW5jdGlvbiByKGksYSxzLGwsdSxoLGYsZCl7bGV0IHA9YS5hcHBlbmQoInN3aXRjaCIpLGc9cC5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ4IixzKS5hdHRyKCJ5IixsKS5hdHRyKCJ3aWR0aCIsdSkuYXR0cigiaGVpZ2h0IixoKS5hdHRyKCJwb3NpdGlvbiIsImZpeGVkIikuYXBwZW5kKCJ4aHRtbDpkaXYiKS5zdHlsZSgiZGlzcGxheSIsInRhYmxlIikuc3R5bGUoImhlaWdodCIsIjEwMCUiKS5zdHlsZSgid2lkdGgiLCIxMDAlIik7Zy5hcHBlbmQoImRpdiIpLmF0dHIoImNsYXNzIiwibGFiZWwiKS5zdHlsZSgiZGlzcGxheSIsInRhYmxlLWNlbGwiKS5zdHlsZSgidGV4dC1hbGlnbiIsImNlbnRlciIpLnN0eWxlKCJ2ZXJ0aWNhbC1hbGlnbiIsIm1pZGRsZSIpLnRleHQoaSksZShpLHAscyxsLHUsaCxmLGQpLG4oZyxmKX1vKHIsImJ5Rm8iKTtmdW5jdGlvbiBuKGksYSl7Zm9yKGxldCBzIGluIGEpcyBpbiBhJiZpLmF0dHIocyxhW3NdKX1yZXR1cm4gbyhuLCJfc2V0VGV4dEF0dHJzIiksZnVuY3Rpb24oaSl7cmV0dXJuIGkudGV4dFBsYWNlbWVudD09PSJmbyI/cjppLnRleHRQbGFjZW1lbnQ9PT0ib2xkIj90OmV9fSgpLENXZT1vKGZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImFycm93aGVhZCIpLmF0dHIoInJlZlgiLDUpLmF0dHIoInJlZlkiLDIpLmF0dHIoIm1hcmtlcldpZHRoIiw2KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDQpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwLDAgViA0IEw2LDIgWiIpfSwiaW5pdEdyYXBoaWNzIiksejE9e2RyYXdSZWN0OlhQLGRyYXdDaXJjbGU6anBlLGRyYXdTZWN0aW9uOmtXZSxkcmF3VGV4dDpLcGUsZHJhd0xhYmVsOndXZSxkcmF3VGFzazpFV2UsZHJhd0JhY2tncm91bmRSZWN0OlNXZSxpbml0R3JhcGhpY3M6Q1dlfX0pO2Z1bmN0aW9uIF9XZSh0KXtsZXQgZT1tZSgpLmpvdXJuZXkscj1lLm1heExhYmVsV2lkdGg7aDY9MDtsZXQgbj02MDtPYmplY3Qua2V5cyh0aCkuZm9yRWFjaChpPT57bGV0IGE9dGhbaV0uY29sb3Iscz17Y3g6MjAsY3k6bixyOjcsZmlsbDphLHN0cm9rZToiIzAwMCIscG9zOnRoW2ldLnBvc2l0aW9ufTt6MS5kcmF3Q2lyY2xlKHQscyk7bGV0IGw9dC5hcHBlbmQoInRleHQiKS5hdHRyKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIikudGV4dChpKSx1PWwubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO2wucmVtb3ZlKCk7bGV0IGg9W107aWYodTw9ciloPVtpXTtlbHNle2xldCBmPWkuc3BsaXQoIiAiKSxkPSIiO2w9dC5hcHBlbmQoInRleHQiKS5hdHRyKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIiksZi5mb3JFYWNoKHA9PntsZXQgbT1kP2Ake2R9ICR7cH1gOnA7aWYobC50ZXh0KG0pLGwubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoPnIpe2lmKGQmJmgucHVzaChkKSxkPXAsbC50ZXh0KHApLGwubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoPnIpe2xldCB5PSIiO2ZvcihsZXQgdiBvZiBwKXkrPXYsbC50ZXh0KHkrIi0iKSxsLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aD5yJiYoaC5wdXNoKHkuc2xpY2UoMCwtMSkrIi0iKSx5PXYpO2Q9eX19ZWxzZSBkPW19KSxkJiZoLnB1c2goZCksbC5yZW1vdmUoKX1oLmZvckVhY2goKGYsZCk9PntsZXQgcD17eDo0MCx5Om4rNytkKjIwLGZpbGw6IiM2NjYiLHRleHQ6Zix0ZXh0TWFyZ2luOmUuYm94VGV4dE1hcmdpbj8/NX0sZz16MS5kcmF3VGV4dCh0LHApLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtnPmg2JiZnPmUubGVmdE1hcmdpbi1nJiYoaDY9Zyl9KSxuKz1NYXRoLm1heCgyMCxoLmxlbmd0aCoyMCl9KX12YXIgQVdlLHRoLGg2LFVsLF9mLERXZSxybCxqUCxKcGUsTFdlLEtQLGUwZT1OKCgpPT57InVzZSBzdHJpY3QiO2ZyKCk7WnBlKCk7R3QoKTt4aSgpO0FXZT1vKGZ1bmN0aW9uKHQpe09iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24ocil7VWxbcl09dFtyXX0pfSwic2V0Q29uZiIpLHRoPXt9LGg2PTA7byhfV2UsImRyYXdBY3RvckxlZ2VuZCIpO1VsPW1lKCkuam91cm5leSxfZj0wLERXZT1vKGZ1bmN0aW9uKHQsZSxyLG4pe2xldCBpPW1lKCksYT1pLmpvdXJuZXkudGl0bGVDb2xvcixzPWkuam91cm5leS50aXRsZUZvbnRTaXplLGw9aS5qb3VybmV5LnRpdGxlRm9udEZhbWlseSx1PWkuc2VjdXJpdHlMZXZlbCxoO3U9PT0ic2FuZGJveCImJihoPUdlKCIjaSIrZSkpO2xldCBmPXU9PT0ic2FuZGJveCI/R2UoaC5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KTpHZSgiYm9keSIpO3JsLmluaXQoKTtsZXQgZD1mLnNlbGVjdCgiIyIrZSk7ejEuaW5pdEdyYXBoaWNzKGQpO2xldCBwPW4uZGIuZ2V0VGFza3MoKSxtPW4uZGIuZ2V0RGlhZ3JhbVRpdGxlKCksZz1uLmRiLmdldEFjdG9ycygpO2ZvcihsZXQgUyBpbiB0aClkZWxldGUgdGhbU107bGV0IHk9MDtnLmZvckVhY2goUz0+e3RoW1NdPXtjb2xvcjpVbC5hY3RvckNvbG91cnNbeSVVbC5hY3RvckNvbG91cnMubGVuZ3RoXSxwb3NpdGlvbjp5fSx5Kyt9KSxfV2UoZCksX2Y9VWwubGVmdE1hcmdpbitoNixybC5pbnNlcnQoMCwwLF9mLE9iamVjdC5rZXlzKHRoKS5sZW5ndGgqNTApLExXZShkLHAsMCk7bGV0IHY9cmwuZ2V0Qm91bmRzKCk7bSYmZC5hcHBlbmQoInRleHQiKS50ZXh0KG0pLmF0dHIoIngiLF9mKS5hdHRyKCJmb250LXNpemUiLHMpLmF0dHIoImZvbnQtd2VpZ2h0IiwiYm9sZCIpLmF0dHIoInkiLDI1KS5hdHRyKCJmaWxsIixhKS5hdHRyKCJmb250LWZhbWlseSIsbCk7bGV0IHg9di5zdG9weS12LnN0YXJ0eSsyKlVsLmRpYWdyYW1NYXJnaW5ZLGI9X2Yrdi5zdG9weCsyKlVsLmRpYWdyYW1NYXJnaW5YO2ZuKGQseCxiLFVsLnVzZU1heFdpZHRoKSxkLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIixfZikuYXR0cigieTEiLFVsLmhlaWdodCo0KS5hdHRyKCJ4MiIsYi1fZi00KS5hdHRyKCJ5MiIsVWwuaGVpZ2h0KjQpLmF0dHIoInN0cm9rZS13aWR0aCIsNCkuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCNhcnJvd2hlYWQpIik7bGV0IFQ9bT83MDowO2QuYXR0cigidmlld0JveCIsYCR7di5zdGFydHh9IC0yNSAke2J9ICR7eCtUfWApLGQuYXR0cigicHJlc2VydmVBc3BlY3RSYXRpbyIsInhNaW5ZTWluIG1lZXQiKSxkLmF0dHIoImhlaWdodCIseCtUKzI1KX0sImRyYXciKSxybD17ZGF0YTp7c3RhcnR4OnZvaWQgMCxzdG9weDp2b2lkIDAsc3RhcnR5OnZvaWQgMCxzdG9weTp2b2lkIDB9LHZlcnRpY2FsUG9zOjAsc2VxdWVuY2VJdGVtczpbXSxpbml0Om8oZnVuY3Rpb24oKXt0aGlzLnNlcXVlbmNlSXRlbXM9W10sdGhpcy5kYXRhPXtzdGFydHg6dm9pZCAwLHN0b3B4OnZvaWQgMCxzdGFydHk6dm9pZCAwLHN0b3B5OnZvaWQgMH0sdGhpcy52ZXJ0aWNhbFBvcz0wfSwiaW5pdCIpLHVwZGF0ZVZhbDpvKGZ1bmN0aW9uKHQsZSxyLG4pe3RbZV09PT12b2lkIDA/dFtlXT1yOnRbZV09bihyLHRbZV0pfSwidXBkYXRlVmFsIiksdXBkYXRlQm91bmRzOm8oZnVuY3Rpb24odCxlLHIsbil7bGV0IGk9bWUoKS5qb3VybmV5LGE9dGhpcyxzPTA7ZnVuY3Rpb24gbCh1KXtyZXR1cm4gbyhmdW5jdGlvbihmKXtzKys7bGV0IGQ9YS5zZXF1ZW5jZUl0ZW1zLmxlbmd0aC1zKzE7YS51cGRhdGVWYWwoZiwic3RhcnR5IixlLWQqaS5ib3hNYXJnaW4sTWF0aC5taW4pLGEudXBkYXRlVmFsKGYsInN0b3B5IixuK2QqaS5ib3hNYXJnaW4sTWF0aC5tYXgpLGEudXBkYXRlVmFsKHJsLmRhdGEsInN0YXJ0eCIsdC1kKmkuYm94TWFyZ2luLE1hdGgubWluKSxhLnVwZGF0ZVZhbChybC5kYXRhLCJzdG9weCIscitkKmkuYm94TWFyZ2luLE1hdGgubWF4KSx1IT09ImFjdGl2YXRpb24iJiYoYS51cGRhdGVWYWwoZiwic3RhcnR4Iix0LWQqaS5ib3hNYXJnaW4sTWF0aC5taW4pLGEudXBkYXRlVmFsKGYsInN0b3B4IixyK2QqaS5ib3hNYXJnaW4sTWF0aC5tYXgpLGEudXBkYXRlVmFsKHJsLmRhdGEsInN0YXJ0eSIsZS1kKmkuYm94TWFyZ2luLE1hdGgubWluKSxhLnVwZGF0ZVZhbChybC5kYXRhLCJzdG9weSIsbitkKmkuYm94TWFyZ2luLE1hdGgubWF4KSl9LCJ1cGRhdGVJdGVtQm91bmRzIil9byhsLCJ1cGRhdGVGbiIpLHRoaXMuc2VxdWVuY2VJdGVtcy5mb3JFYWNoKGwoKSl9LCJ1cGRhdGVCb3VuZHMiKSxpbnNlcnQ6byhmdW5jdGlvbih0LGUscixuKXtsZXQgaT1NYXRoLm1pbih0LHIpLGE9TWF0aC5tYXgodCxyKSxzPU1hdGgubWluKGUsbiksbD1NYXRoLm1heChlLG4pO3RoaXMudXBkYXRlVmFsKHJsLmRhdGEsInN0YXJ0eCIsaSxNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwocmwuZGF0YSwic3RhcnR5IixzLE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbChybC5kYXRhLCJzdG9weCIsYSxNYXRoLm1heCksdGhpcy51cGRhdGVWYWwocmwuZGF0YSwic3RvcHkiLGwsTWF0aC5tYXgpLHRoaXMudXBkYXRlQm91bmRzKGkscyxhLGwpfSwiaW5zZXJ0IiksYnVtcFZlcnRpY2FsUG9zOm8oZnVuY3Rpb24odCl7dGhpcy52ZXJ0aWNhbFBvcz10aGlzLnZlcnRpY2FsUG9zK3QsdGhpcy5kYXRhLnN0b3B5PXRoaXMudmVydGljYWxQb3N9LCJidW1wVmVydGljYWxQb3MiKSxnZXRWZXJ0aWNhbFBvczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmVydGljYWxQb3N9LCJnZXRWZXJ0aWNhbFBvcyIpLGdldEJvdW5kczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YX0sImdldEJvdW5kcyIpfSxqUD1VbC5zZWN0aW9uRmlsbHMsSnBlPVVsLnNlY3Rpb25Db2xvdXJzLExXZT1vKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj1tZSgpLmpvdXJuZXksaT0iIixhPW4uaGVpZ2h0KjIrbi5kaWFncmFtTWFyZ2luWSxzPXIrYSxsPTAsdT0iI0NDQyIsaD0iYmxhY2siLGY9MDtmb3IobGV0W2QscF1vZiBlLmVudHJpZXMoKSl7aWYoaSE9PXAuc2VjdGlvbil7dT1qUFtsJWpQLmxlbmd0aF0sZj1sJWpQLmxlbmd0aCxoPUpwZVtsJUpwZS5sZW5ndGhdO2xldCBnPTAseT1wLnNlY3Rpb247Zm9yKGxldCB4PWQ7eDxlLmxlbmd0aCYmZVt4XS5zZWN0aW9uPT15O3grKylnPWcrMTtsZXQgdj17eDpkKm4udGFza01hcmdpbitkKm4ud2lkdGgrX2YseTo1MCx0ZXh0OnAuc2VjdGlvbixmaWxsOnUsbnVtOmYsY29sb3VyOmgsdGFza0NvdW50Omd9O3oxLmRyYXdTZWN0aW9uKHQsdixuKSxpPXAuc2VjdGlvbixsKyt9bGV0IG09cC5wZW9wbGUucmVkdWNlKChnLHkpPT4odGhbeV0mJihnW3ldPXRoW3ldKSxnKSx7fSk7cC54PWQqbi50YXNrTWFyZ2luK2Qqbi53aWR0aCtfZixwLnk9cyxwLndpZHRoPW4uZGlhZ3JhbU1hcmdpblgscC5oZWlnaHQ9bi5kaWFncmFtTWFyZ2luWSxwLmNvbG91cj1oLHAuZmlsbD11LHAubnVtPWYscC5hY3RvcnM9bSx6MS5kcmF3VGFzayh0LHAsbikscmwuaW5zZXJ0KHAueCxwLnkscC54K3Aud2lkdGgrbi50YXNrTWFyZ2luLDMwMCs1KjMwKX19LCJkcmF3VGFza3MiKSxLUD17c2V0Q29uZjpBV2UsZHJhdzpEV2V9fSk7dmFyIHQwZT17fTt1cih0MGUse2RpYWdyYW06KCk9PlJXZX0pO3ZhciBSV2UscjBlPU4oKCk9PnsidXNlIHN0cmljdCI7VXBlKCk7V3BlKCk7WXBlKCk7ZTBlKCk7UldlPXtwYXJzZXI6VnBlLGRiOllQLHJlbmRlcmVyOktQLHN0eWxlczpxcGUsaW5pdDpvKHQ9PntLUC5zZXRDb25mKHQuam91cm5leSksWVAuY2xlYXIoKX0sImluaXQiKX19KTt2YXIgWlAsYzBlLHUwZT1OKCgpPT57InVzZSBzdHJpY3QiO1pQPWZ1bmN0aW9uKCl7dmFyIHQ9byhmdW5jdGlvbihwLG0sZyx5KXtmb3IoZz1nfHx7fSx5PXAubGVuZ3RoO3ktLTtnW3BbeV1dPW0pO3JldHVybiBnfSwibyIpLGU9WzYsOCwxMCwxMSwxMiwxNCwxNiwxNywyMCwyMV0scj1bMSw5XSxuPVsxLDEwXSxpPVsxLDExXSxhPVsxLDEyXSxzPVsxLDEzXSxsPVsxLDE2XSx1PVsxLDE3XSxoPXt0cmFjZTpvKGZ1bmN0aW9uKCl7fSwidHJhY2UiKSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLHRpbWVsaW5lOjQsZG9jdW1lbnQ6NSxFT0Y6NixsaW5lOjcsU1BBQ0U6OCxzdGF0ZW1lbnQ6OSxORVdMSU5FOjEwLHRpdGxlOjExLGFjY190aXRsZToxMixhY2NfdGl0bGVfdmFsdWU6MTMsYWNjX2Rlc2NyOjE0LGFjY19kZXNjcl92YWx1ZToxNSxhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlOjE2LHNlY3Rpb246MTcscGVyaW9kX3N0YXRlbWVudDoxOCxldmVudF9zdGF0ZW1lbnQ6MTkscGVyaW9kOjIwLGV2ZW50OjIxLCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw0OiJ0aW1lbGluZSIsNjoiRU9GIiw4OiJTUEFDRSIsMTA6Ik5FV0xJTkUiLDExOiJ0aXRsZSIsMTI6ImFjY190aXRsZSIsMTM6ImFjY190aXRsZV92YWx1ZSIsMTQ6ImFjY19kZXNjciIsMTU6ImFjY19kZXNjcl92YWx1ZSIsMTY6ImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiLDE3OiJzZWN0aW9uIiwyMDoicGVyaW9kIiwyMToiZXZlbnQifSxwcm9kdWN0aW9uc186WzAsWzMsM10sWzUsMF0sWzUsMl0sWzcsMl0sWzcsMV0sWzcsMV0sWzcsMV0sWzksMV0sWzksMl0sWzksMl0sWzksMV0sWzksMV0sWzksMV0sWzksMV0sWzE4LDFdLFsxOSwxXV0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKG0sZyx5LHYseCxiLFQpe3ZhciBTPWIubGVuZ3RoLTE7c3dpdGNoKHgpe2Nhc2UgMTpyZXR1cm4gYltTLTFdO2Nhc2UgMjp0aGlzLiQ9W107YnJlYWs7Y2FzZSAzOmJbUy0xXS5wdXNoKGJbU10pLHRoaXMuJD1iW1MtMV07YnJlYWs7Y2FzZSA0OmNhc2UgNTp0aGlzLiQ9YltTXTticmVhaztjYXNlIDY6Y2FzZSA3OnRoaXMuJD1bXTticmVhaztjYXNlIDg6di5nZXRDb21tb25EYigpLnNldERpYWdyYW1UaXRsZShiW1NdLnN1YnN0cig2KSksdGhpcy4kPWJbU10uc3Vic3RyKDYpO2JyZWFrO2Nhc2UgOTp0aGlzLiQ9YltTXS50cmltKCksdi5nZXRDb21tb25EYigpLnNldEFjY1RpdGxlKHRoaXMuJCk7YnJlYWs7Y2FzZSAxMDpjYXNlIDExOnRoaXMuJD1iW1NdLnRyaW0oKSx2LmdldENvbW1vbkRiKCkuc2V0QWNjRGVzY3JpcHRpb24odGhpcy4kKTticmVhaztjYXNlIDEyOnYuYWRkU2VjdGlvbihiW1NdLnN1YnN0cig4KSksdGhpcy4kPWJbU10uc3Vic3RyKDgpO2JyZWFrO2Nhc2UgMTU6di5hZGRUYXNrKGJbU10sMCwiIiksdGhpcy4kPWJbU107YnJlYWs7Y2FzZSAxNjp2LmFkZEV2ZW50KGJbU10uc3Vic3RyKDIpKSx0aGlzLiQ9YltTXTticmVha319LCJhbm9ueW1vdXMiKSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LHQoZSxbMiwyXSx7NTozfSksezY6WzEsNF0sNzo1LDg6WzEsNl0sOTo3LDEwOlsxLDhdLDExOnIsMTI6biwxNDppLDE2OmEsMTc6cywxODoxNCwxOToxNSwyMDpsLDIxOnV9LHQoZSxbMiw3XSx7MTpbMiwxXX0pLHQoZSxbMiwzXSksezk6MTgsMTE6ciwxMjpuLDE0OmksMTY6YSwxNzpzLDE4OjE0LDE5OjE1LDIwOmwsMjE6dX0sdChlLFsyLDVdKSx0KGUsWzIsNl0pLHQoZSxbMiw4XSksezEzOlsxLDE5XX0sezE1OlsxLDIwXX0sdChlLFsyLDExXSksdChlLFsyLDEyXSksdChlLFsyLDEzXSksdChlLFsyLDE0XSksdChlLFsyLDE1XSksdChlLFsyLDE2XSksdChlLFsyLDRdKSx0KGUsWzIsOV0pLHQoZSxbMiwxMF0pXSxkZWZhdWx0QWN0aW9uczp7fSxwYXJzZUVycm9yOm8oZnVuY3Rpb24obSxnKXtpZihnLnJlY292ZXJhYmxlKXRoaXMudHJhY2UobSk7ZWxzZXt2YXIgeT1uZXcgRXJyb3IobSk7dGhyb3cgeS5oYXNoPWcseX19LCJwYXJzZUVycm9yIikscGFyc2U6byhmdW5jdGlvbihtKXt2YXIgZz10aGlzLHk9WzBdLHY9W10seD1bbnVsbF0sYj1bXSxUPXRoaXMudGFibGUsUz0iIix3PTAsRT0wLF89MCxDPTIsRD0xLE89Yi5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxSPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksaz17eXk6e319O2Zvcih2YXIgTCBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LEwpJiYoay55eVtMXT10aGlzLnl5W0xdKTtSLnNldElucHV0KG0say55eSksay55eS5sZXhlcj1SLGsueXkucGFyc2VyPXRoaXMsdHlwZW9mIFIueXlsbG9jPiJ1IiYmKFIueXlsbG9jPXt9KTt2YXIgQT1SLnl5bGxvYztiLnB1c2goQSk7dmFyIEk9Ui5vcHRpb25zJiZSLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBrLnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPWsueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gTShqKXt5Lmxlbmd0aD15Lmxlbmd0aC0yKmoseC5sZW5ndGg9eC5sZW5ndGgtaixiLmxlbmd0aD1iLmxlbmd0aC1qfW8oTSwicG9wU3RhY2siKTtmdW5jdGlvbiBQKCl7dmFyIGo7cmV0dXJuIGo9di5wb3AoKXx8Ui5sZXgoKXx8RCx0eXBlb2YgaiE9Im51bWJlciImJihqIGluc3RhbmNlb2YgQXJyYXkmJih2PWosaj12LnBvcCgpKSxqPWcuc3ltYm9sc19bal18fGopLGp9byhQLCJsZXgiKTtmb3IodmFyIEIsRix6LCQsVSxLLGVlPXt9LFksY2UsWix1ZTs7KXtpZih6PXlbeS5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1t6XT8kPXRoaXMuZGVmYXVsdEFjdGlvbnNbel06KChCPT09bnVsbHx8dHlwZW9mIEI+InUiKSYmKEI9UCgpKSwkPVRbel0mJlRbel1bQl0pLHR5cGVvZiAkPiJ1Inx8ISQubGVuZ3RofHwhJFswXSl7dmFyIFE9IiI7dWU9W107Zm9yKFkgaW4gVFt6XSl0aGlzLnRlcm1pbmFsc19bWV0mJlk+QyYmdWUucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW1ldKyInIik7Ui5zaG93UG9zaXRpb24/UT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyh3KzEpK2A6CmArUi5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK3VlLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bQl18fEIpKyInIjpRPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKHcrMSkrIjogVW5leHBlY3RlZCAiKyhCPT1EPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW0JdfHxCKSsiJyIpLHRoaXMucGFyc2VFcnJvcihRLHt0ZXh0OlIubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW0JdfHxCLGxpbmU6Ui55eWxpbmVubyxsb2M6QSxleHBlY3RlZDp1ZX0pfWlmKCRbMF1pbnN0YW5jZW9mIEFycmF5JiYkLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIreisiLCB0b2tlbjogIitCKTtzd2l0Y2goJFswXSl7Y2FzZSAxOnkucHVzaChCKSx4LnB1c2goUi55eXRleHQpLGIucHVzaChSLnl5bGxvYykseS5wdXNoKCRbMV0pLEI9bnVsbCxGPyhCPUYsRj1udWxsKTooRT1SLnl5bGVuZyxTPVIueXl0ZXh0LHc9Ui55eWxpbmVubyxBPVIueXlsbG9jLF8+MCYmXy0tKTticmVhaztjYXNlIDI6aWYoY2U9dGhpcy5wcm9kdWN0aW9uc19bJFsxXV1bMV0sZWUuJD14W3gubGVuZ3RoLWNlXSxlZS5fJD17Zmlyc3RfbGluZTpiW2IubGVuZ3RoLShjZXx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmJbYi5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjpiW2IubGVuZ3RoLShjZXx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpiW2IubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxJJiYoZWUuXyQucmFuZ2U9W2JbYi5sZW5ndGgtKGNlfHwxKV0ucmFuZ2VbMF0sYltiLmxlbmd0aC0xXS5yYW5nZVsxXV0pLEs9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KGVlLFtTLEUsdyxrLnl5LCRbMV0seCxiXS5jb25jYXQoTykpLHR5cGVvZiBLPCJ1IilyZXR1cm4gSztjZSYmKHk9eS5zbGljZSgwLC0xKmNlKjIpLHg9eC5zbGljZSgwLC0xKmNlKSxiPWIuc2xpY2UoMCwtMSpjZSkpLHkucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1skWzFdXVswXSkseC5wdXNoKGVlLiQpLGIucHVzaChlZS5fJCksWj1UW3lbeS5sZW5ndGgtMl1dW3lbeS5sZW5ndGgtMV1dLHkucHVzaChaKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfSwicGFyc2UiKX0sZj1mdW5jdGlvbigpe3ZhciBwPXtFT0Y6MSxwYXJzZUVycm9yOm8oZnVuY3Rpb24oZyx5KXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKGcseSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoZyl9LCJwYXJzZUVycm9yIiksc2V0SW5wdXQ6byhmdW5jdGlvbihtLGcpe3JldHVybiB0aGlzLnl5PWd8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PW0sdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LCJzZXRJbnB1dCIpLGlucHV0Om8oZnVuY3Rpb24oKXt2YXIgbT10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9bSx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9bSx0aGlzLm1hdGNoZWQrPW07dmFyIGc9bS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIGc/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLG19LCJpbnB1dCIpLHVucHV0Om8oZnVuY3Rpb24obSl7dmFyIGc9bS5sZW5ndGgseT1tLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9bSt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtZyksdGhpcy5vZmZzZXQtPWc7dmFyIHY9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSkseS5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPXkubGVuZ3RoLTEpO3ZhciB4PXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp5Pyh5Lmxlbmd0aD09PXYubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKSt2W3YubGVuZ3RoLXkubGVuZ3RoXS5sZW5ndGgteVswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWd9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1beFswXSx4WzBdK3RoaXMueXlsZW5nLWddKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sInVucHV0IiksbW9yZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30sIm1vcmUiKSxyZWplY3Q6byhmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sInJlamVjdCIpLGxlc3M6byhmdW5jdGlvbihtKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UobSkpfSwibGVzcyIpLHBhc3RJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIG09dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihtLmxlbmd0aD4yMD8iLi4uIjoiIikrbS5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sInBhc3RJbnB1dCIpLHVwY29taW5nSW5wdXQ6byhmdW5jdGlvbigpe3ZhciBtPXRoaXMubWF0Y2g7cmV0dXJuIG0ubGVuZ3RoPDIwJiYobSs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtbS5sZW5ndGgpKSwobS5zdWJzdHIoMCwyMCkrKG0ubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LCJ1cGNvbWluZ0lucHV0Iiksc2hvd1Bvc2l0aW9uOm8oZnVuY3Rpb24oKXt2YXIgbT10aGlzLnBhc3RJbnB1dCgpLGc9bmV3IEFycmF5KG0ubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gbSt0aGlzLnVwY29taW5nSW5wdXQoKStgCmArZysiXiJ9LCJzaG93UG9zaXRpb24iKSx0ZXN0X21hdGNoOm8oZnVuY3Rpb24obSxnKXt2YXIgeSx2LHg7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKHg9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoeC55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSx2PW1bMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLHYmJih0aGlzLnl5bGluZW5vKz12Lmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnY/dlt2Lmxlbmd0aC0xXS5sZW5ndGgtdlt2Lmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK21bMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9bVswXSx0aGlzLm1hdGNoKz1tWzBdLHRoaXMubWF0Y2hlcz1tLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKG1bMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPW1bMF0seT10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxnLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLHkpcmV0dXJuIHk7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIGIgaW4geCl0aGlzW2JdPXhbYl07cmV0dXJuITF9cmV0dXJuITF9LCJ0ZXN0X21hdGNoIiksbmV4dDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIG0sZyx5LHY7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgeD10aGlzLl9jdXJyZW50UnVsZXMoKSxiPTA7Yjx4Lmxlbmd0aDtiKyspaWYoeT10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW3hbYl1dKSx5JiYoIWd8fHlbMF0ubGVuZ3RoPmdbMF0ubGVuZ3RoKSl7aWYoZz15LHY9Yix0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihtPXRoaXMudGVzdF9tYXRjaCh5LHhbYl0pLG0hPT0hMSlyZXR1cm4gbTtpZih0aGlzLl9iYWNrdHJhY2spe2c9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gZz8obT10aGlzLnRlc3RfbWF0Y2goZyx4W3ZdKSxtIT09ITE/bTohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sIm5leHQiKSxsZXg6byhmdW5jdGlvbigpe3ZhciBnPXRoaXMubmV4dCgpO3JldHVybiBnfHx0aGlzLmxleCgpfSwibGV4IiksYmVnaW46byhmdW5jdGlvbihnKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goZyl9LCJiZWdpbiIpLHBvcFN0YXRlOm8oZnVuY3Rpb24oKXt2YXIgZz10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBnPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSwicG9wU3RhdGUiKSxfY3VycmVudFJ1bGVzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSwiX2N1cnJlbnRSdWxlcyIpLHRvcFN0YXRlOm8oZnVuY3Rpb24oZyl7cmV0dXJuIGc9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhnfHwwKSxnPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbZ106IklOSVRJQUwifSwidG9wU3RhdGUiKSxwdXNoU3RhdGU6byhmdW5jdGlvbihnKXt0aGlzLmJlZ2luKGcpfSwicHVzaFN0YXRlIiksc3RhdGVTdGFja1NpemU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sInN0YXRlU3RhY2tTaXplIiksb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24oZyx5LHYseCl7dmFyIGI9eDtzd2l0Y2godil7Y2FzZSAwOmJyZWFrO2Nhc2UgMTpicmVhaztjYXNlIDI6cmV0dXJuIDEwO2Nhc2UgMzpicmVhaztjYXNlIDQ6YnJlYWs7Y2FzZSA1OnJldHVybiA0O2Nhc2UgNjpyZXR1cm4gMTE7Y2FzZSA3OnJldHVybiB0aGlzLmJlZ2luKCJhY2NfdGl0bGUiKSwxMjticmVhaztjYXNlIDg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX3RpdGxlX3ZhbHVlIjticmVhaztjYXNlIDk6cmV0dXJuIHRoaXMuYmVnaW4oImFjY19kZXNjciIpLDE0O2JyZWFrO2Nhc2UgMTA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiYWNjX2Rlc2NyX3ZhbHVlIjticmVhaztjYXNlIDExOnRoaXMuYmVnaW4oImFjY19kZXNjcl9tdWx0aWxpbmUiKTticmVhaztjYXNlIDEyOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDEzOnJldHVybiJhY2NfZGVzY3JfbXVsdGlsaW5lX3ZhbHVlIjtjYXNlIDE0OnJldHVybiAxNztjYXNlIDE1OnJldHVybiAyMTtjYXNlIDE2OnJldHVybiAyMDtjYXNlIDE3OnJldHVybiA2O2Nhc2UgMTg6cmV0dXJuIklOVkFMSUQifX0sImFub255bW91cyIpLHJ1bGVzOlsvXig/OiUoPyFceylbXlxuXSopL2ksL14oPzpbXlx9XSUlW15cbl0qKS9pLC9eKD86W1xuXSspL2ksL14oPzpccyspL2ksL14oPzojW15cbl0qKS9pLC9eKD86dGltZWxpbmVcYikvaSwvXig/OnRpdGxlXHNbXlxuXSspL2ksL14oPzphY2NUaXRsZVxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKjpccyopL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzphY2NEZXNjclxzKlx7XHMqKS9pLC9eKD86W1x9XSkvaSwvXig/OlteXH1dKikvaSwvXig/OnNlY3Rpb25cc1teOlxuXSspL2ksL14oPzo6XHMoPzpbXjpcbl18Oig/IVxzKSkrKS9pLC9eKD86W14jOlxuXSspL2ksL14oPzokKS9pLC9eKD86LikvaV0sY29uZGl0aW9uczp7YWNjX2Rlc2NyX211bHRpbGluZTp7cnVsZXM6WzEyLDEzXSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcjp7cnVsZXM6WzEwXSxpbmNsdXNpdmU6ITF9LGFjY190aXRsZTp7cnVsZXM6WzhdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw1LDYsNyw5LDExLDE0LDE1LDE2LDE3LDE4XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIHB9KCk7aC5sZXhlcj1mO2Z1bmN0aW9uIGQoKXt0aGlzLnl5PXt9fXJldHVybiBvKGQsIlBhcnNlciIpLGQucHJvdG90eXBlPWgsaC5QYXJzZXI9ZCxuZXcgZH0oKTtaUC5wYXJzZXI9WlA7YzBlPVpQfSk7dmFyIGVCPXt9O3VyKGVCLHthZGRFdmVudDooKT0+eDBlLGFkZFNlY3Rpb246KCk9Pm0wZSxhZGRUYXNrOigpPT52MGUsYWRkVGFza09yZzooKT0+YjBlLGNsZWFyOigpPT5wMGUsZGVmYXVsdDooKT0+eldlLGdldENvbW1vbkRiOigpPT5kMGUsZ2V0U2VjdGlvbnM6KCk9PmcwZSxnZXRUYXNrczooKT0+eTBlfSk7dmFyIEcxLGYwZSxKUCxmNixWMSxkMGUscDBlLG0wZSxnMGUseTBlLHYwZSx4MGUsYjBlLGgwZSx6V2UsVDBlPU4oKCk9PnsidXNlIHN0cmljdCI7Y2koKTtHMT0iIixmMGU9MCxKUD1bXSxmNj1bXSxWMT1bXSxkMGU9bygoKT0+cnYsImdldENvbW1vbkRiIikscDBlPW8oZnVuY3Rpb24oKXtKUC5sZW5ndGg9MCxmNi5sZW5ndGg9MCxHMT0iIixWMS5sZW5ndGg9MCxrcigpfSwiY2xlYXIiKSxtMGU9byhmdW5jdGlvbih0KXtHMT10LEpQLnB1c2godCl9LCJhZGRTZWN0aW9uIiksZzBlPW8oZnVuY3Rpb24oKXtyZXR1cm4gSlB9LCJnZXRTZWN0aW9ucyIpLHkwZT1vKGZ1bmN0aW9uKCl7bGV0IHQ9aDBlKCksZT0xMDAscj0wO2Zvcig7IXQmJnI8ZTspdD1oMGUoKSxyKys7cmV0dXJuIGY2LnB1c2goLi4uVjEpLGY2fSwiZ2V0VGFza3MiKSx2MGU9byhmdW5jdGlvbih0LGUscil7bGV0IG49e2lkOmYwZSsrLHNlY3Rpb246RzEsdHlwZTpHMSx0YXNrOnQsc2NvcmU6ZXx8MCxldmVudHM6cj9bcl06W119O1YxLnB1c2gobil9LCJhZGRUYXNrIikseDBlPW8oZnVuY3Rpb24odCl7VjEuZmluZChyPT5yLmlkPT09ZjBlLTEpLmV2ZW50cy5wdXNoKHQpfSwiYWRkRXZlbnQiKSxiMGU9byhmdW5jdGlvbih0KXtsZXQgZT17c2VjdGlvbjpHMSx0eXBlOkcxLGRlc2NyaXB0aW9uOnQsdGFzazp0LGNsYXNzZXM6W119O2Y2LnB1c2goZSl9LCJhZGRUYXNrT3JnIiksaDBlPW8oZnVuY3Rpb24oKXtsZXQgdD1vKGZ1bmN0aW9uKHIpe3JldHVybiBWMVtyXS5wcm9jZXNzZWR9LCJjb21waWxlVGFzayIpLGU9ITA7Zm9yKGxldFtyLG5db2YgVjEuZW50cmllcygpKXQociksZT1lJiZuLnByb2Nlc3NlZDtyZXR1cm4gZX0sImNvbXBpbGVUYXNrcyIpLHpXZT17Y2xlYXI6cDBlLGdldENvbW1vbkRiOmQwZSxhZGRTZWN0aW9uOm0wZSxnZXRTZWN0aW9uczpnMGUsZ2V0VGFza3M6eTBlLGFkZFRhc2s6djBlLGFkZFRhc2tPcmc6YjBlLGFkZEV2ZW50OngwZX19KTtmdW5jdGlvbiBTMGUodCxlKXt0LmVhY2goZnVuY3Rpb24oKXt2YXIgcj1HZSh0aGlzKSxuPXIudGV4dCgpLnNwbGl0KC8oXHMrfDxicj4pLykucmV2ZXJzZSgpLGksYT1bXSxzPTEuMSxsPXIuYXR0cigieSIpLHU9cGFyc2VGbG9hdChyLmF0dHIoImR5IikpLGg9ci50ZXh0KG51bGwpLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IixsKS5hdHRyKCJkeSIsdSsiZW0iKTtmb3IobGV0IGY9MDtmPG4ubGVuZ3RoO2YrKylpPW5bbi5sZW5ndGgtMS1mXSxhLnB1c2goaSksaC50ZXh0KGEuam9pbigiICIpLnRyaW0oKSksKGgubm9kZSgpLmdldENvbXB1dGVkVGV4dExlbmd0aCgpPmV8fGk9PT0iPGJyPiIpJiYoYS5wb3AoKSxoLnRleHQoYS5qb2luKCIgIikudHJpbSgpKSxpPT09Ijxicj4iP2E9WyIiXTphPVtpXSxoPXIuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLDApLmF0dHIoInkiLGwpLmF0dHIoImR5IixzKyJlbSIpLnRleHQoaSkpfSl9dmFyIEdXZSxkNixWV2UsVVdlLGswZSxIV2UsV1dlLHcwZSxxV2UsWVdlLFhXZSx0QixFMGUsaldlLEtXZSxRV2UsWldlLERmLEMwZT1OKCgpPT57InVzZSBzdHJpY3QiO2ZyKCk7R1dlPTEyLGQ2PW8oZnVuY3Rpb24odCxlKXtsZXQgcj10LmFwcGVuZCgicmVjdCIpO3JldHVybiByLmF0dHIoIngiLGUueCksci5hdHRyKCJ5IixlLnkpLHIuYXR0cigiZmlsbCIsZS5maWxsKSxyLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLHIuYXR0cigid2lkdGgiLGUud2lkdGgpLHIuYXR0cigiaGVpZ2h0IixlLmhlaWdodCksci5hdHRyKCJyeCIsZS5yeCksci5hdHRyKCJyeSIsZS5yeSksZS5jbGFzcyE9PXZvaWQgMCYmci5hdHRyKCJjbGFzcyIsZS5jbGFzcykscn0sImRyYXdSZWN0IiksVldlPW8oZnVuY3Rpb24odCxlKXtsZXQgbj10LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLGUuY3gpLmF0dHIoImN5IixlLmN5KS5hdHRyKCJjbGFzcyIsImZhY2UiKS5hdHRyKCJyIiwxNSkuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJvdmVyZmxvdyIsInZpc2libGUiKSxpPXQuYXBwZW5kKCJnIik7aS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IixlLmN4LTE1LzMpLmF0dHIoImN5IixlLmN5LTE1LzMpLmF0dHIoInIiLDEuNSkuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJmaWxsIiwiIzY2NiIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKSxpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLGUuY3grMTUvMykuYXR0cigiY3kiLGUuY3ktMTUvMykuYXR0cigiciIsMS41KS5hdHRyKCJzdHJva2Utd2lkdGgiLDIpLmF0dHIoImZpbGwiLCIjNjY2IikuYXR0cigic3Ryb2tlIiwiIzY2NiIpO2Z1bmN0aW9uIGEodSl7bGV0IGg9U2woKS5zdGFydEFuZ2xlKE1hdGguUEkvMikuZW5kQW5nbGUoMyooTWF0aC5QSS8yKSkuaW5uZXJSYWRpdXMoNy41KS5vdXRlclJhZGl1cyg2LjgxODE4MTgxODE4MTgxNzUpO3UuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJtb3V0aCIpLmF0dHIoImQiLGgpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2UuY3grIiwiKyhlLmN5KzIpKyIpIil9byhhLCJzbWlsZSIpO2Z1bmN0aW9uIHModSl7bGV0IGg9U2woKS5zdGFydEFuZ2xlKDMqTWF0aC5QSS8yKS5lbmRBbmdsZSg1KihNYXRoLlBJLzIpKS5pbm5lclJhZGl1cyg3LjUpLm91dGVyUmFkaXVzKDYuODE4MTgxODE4MTgxODE3NSk7dS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigiZCIsaCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrZS5jeCsiLCIrKGUuY3krNykrIikiKX1vKHMsInNhZCIpO2Z1bmN0aW9uIGwodSl7dS5hcHBlbmQoImxpbmUiKS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigic3Ryb2tlIiwyKS5hdHRyKCJ4MSIsZS5jeC01KS5hdHRyKCJ5MSIsZS5jeSs3KS5hdHRyKCJ4MiIsZS5jeCs1KS5hdHRyKCJ5MiIsZS5jeSs3KS5hdHRyKCJjbGFzcyIsIm1vdXRoIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IikuYXR0cigic3Ryb2tlIiwiIzY2NiIpfXJldHVybiBvKGwsImFtYml2YWxlbnQiKSxlLnNjb3JlPjM/YShpKTplLnNjb3JlPDM/cyhpKTpsKGkpLG59LCJkcmF3RmFjZSIpLFVXZT1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9dC5hcHBlbmQoImNpcmNsZSIpO3JldHVybiByLmF0dHIoImN4IixlLmN4KSxyLmF0dHIoImN5IixlLmN5KSxyLmF0dHIoImNsYXNzIiwiYWN0b3ItIitlLnBvcyksci5hdHRyKCJmaWxsIixlLmZpbGwpLHIuYXR0cigic3Ryb2tlIixlLnN0cm9rZSksci5hdHRyKCJyIixlLnIpLHIuY2xhc3MhPT12b2lkIDAmJnIuYXR0cigiY2xhc3MiLHIuY2xhc3MpLGUudGl0bGUhPT12b2lkIDAmJnIuYXBwZW5kKCJ0aXRsZSIpLnRleHQoZS50aXRsZSkscn0sImRyYXdDaXJjbGUiKSxrMGU9byhmdW5jdGlvbih0LGUpe2xldCByPWUudGV4dC5yZXBsYWNlKC88YnJccypcLz8+L2dpLCIgIiksbj10LmFwcGVuZCgidGV4dCIpO24uYXR0cigieCIsZS54KSxuLmF0dHIoInkiLGUueSksbi5hdHRyKCJjbGFzcyIsImxlZ2VuZCIpLG4uc3R5bGUoInRleHQtYW5jaG9yIixlLmFuY2hvciksZS5jbGFzcyE9PXZvaWQgMCYmbi5hdHRyKCJjbGFzcyIsZS5jbGFzcyk7bGV0IGk9bi5hcHBlbmQoInRzcGFuIik7cmV0dXJuIGkuYXR0cigieCIsZS54K2UudGV4dE1hcmdpbioyKSxpLnRleHQociksbn0sImRyYXdUZXh0IiksSFdlPW8oZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKGksYSxzLGwsdSl7cmV0dXJuIGkrIiwiK2ErIiAiKyhpK3MpKyIsIithKyIgIisoaStzKSsiLCIrKGErbC11KSsiICIrKGkrcy11KjEuMikrIiwiKyhhK2wpKyIgIitpKyIsIisoYStsKX1vKHIsImdlblBvaW50cyIpO2xldCBuPXQuYXBwZW5kKCJwb2x5Z29uIik7bi5hdHRyKCJwb2ludHMiLHIoZS54LGUueSw1MCwyMCw3KSksbi5hdHRyKCJjbGFzcyIsImxhYmVsQm94IiksZS55PWUueStlLmxhYmVsTWFyZ2luLGUueD1lLngrLjUqZS5sYWJlbE1hcmdpbixrMGUodCxlKX0sImRyYXdMYWJlbCIpLFdXZT1vKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj10LmFwcGVuZCgiZyIpLGk9dEIoKTtpLng9ZS54LGkueT1lLnksaS5maWxsPWUuZmlsbCxpLndpZHRoPXIud2lkdGgsaS5oZWlnaHQ9ci5oZWlnaHQsaS5jbGFzcz0iam91cm5leS1zZWN0aW9uIHNlY3Rpb24tdHlwZS0iK2UubnVtLGkucng9MyxpLnJ5PTMsZDYobixpKSxFMGUocikoZS50ZXh0LG4saS54LGkueSxpLndpZHRoLGkuaGVpZ2h0LHtjbGFzczoiam91cm5leS1zZWN0aW9uIHNlY3Rpb24tdHlwZS0iK2UubnVtfSxyLGUuY29sb3VyKX0sImRyYXdTZWN0aW9uIiksdzBlPS0xLHFXZT1vKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj1lLngrci53aWR0aC8yLGk9dC5hcHBlbmQoImciKTt3MGUrKztsZXQgYT0zMDArNSozMDtpLmFwcGVuZCgibGluZSIpLmF0dHIoImlkIiwidGFzayIrdzBlKS5hdHRyKCJ4MSIsbikuYXR0cigieTEiLGUueSkuYXR0cigieDIiLG4pLmF0dHIoInkyIixhKS5hdHRyKCJjbGFzcyIsInRhc2stbGluZSIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFweCIpLmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLCI0IDIiKS5hdHRyKCJzdHJva2UiLCIjNjY2IiksVldlKGkse2N4Om4sY3k6MzAwKyg1LWUuc2NvcmUpKjMwLHNjb3JlOmUuc2NvcmV9KTtsZXQgcz10QigpO3MueD1lLngscy55PWUueSxzLmZpbGw9ZS5maWxsLHMud2lkdGg9ci53aWR0aCxzLmhlaWdodD1yLmhlaWdodCxzLmNsYXNzPSJ0YXNrIHRhc2stdHlwZS0iK2UubnVtLHMucng9MyxzLnJ5PTMsZDYoaSxzKSxFMGUocikoZS50YXNrLGkscy54LHMueSxzLndpZHRoLHMuaGVpZ2h0LHtjbGFzczoidGFzayJ9LHIsZS5jb2xvdXIpfSwiZHJhd1Rhc2siKSxZV2U9byhmdW5jdGlvbih0LGUpe2Q2KHQse3g6ZS5zdGFydHgseTplLnN0YXJ0eSx3aWR0aDplLnN0b3B4LWUuc3RhcnR4LGhlaWdodDplLnN0b3B5LWUuc3RhcnR5LGZpbGw6ZS5maWxsLGNsYXNzOiJyZWN0In0pLmxvd2VyKCl9LCJkcmF3QmFja2dyb3VuZFJlY3QiKSxYV2U9byhmdW5jdGlvbigpe3JldHVybnt4OjAseTowLGZpbGw6dm9pZCAwLCJ0ZXh0LWFuY2hvciI6InN0YXJ0Iix3aWR0aDoxMDAsaGVpZ2h0OjEwMCx0ZXh0TWFyZ2luOjAscng6MCxyeTowfX0sImdldFRleHRPYmoiKSx0Qj1vKGZ1bmN0aW9uKCl7cmV0dXJue3g6MCx5OjAsd2lkdGg6MTAwLGFuY2hvcjoic3RhcnQiLGhlaWdodDoxMDAscng6MCxyeTowfX0sImdldE5vdGVSZWN0IiksRTBlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChpLGEscyxsLHUsaCxmLGQpe2xldCBwPWEuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIscyt1LzIpLmF0dHIoInkiLGwraC8yKzUpLnN0eWxlKCJmb250LWNvbG9yIixkKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KGkpO24ocCxmKX1vKHQsImJ5VGV4dCIpO2Z1bmN0aW9uIGUoaSxhLHMsbCx1LGgsZixkLHApe2xldHt0YXNrRm9udFNpemU6bSx0YXNrRm9udEZhbWlseTpnfT1kLHk9aS5zcGxpdCgvPGJyXHMqXC8/Pi9naSk7Zm9yKGxldCB2PTA7djx5Lmxlbmd0aDt2Kyspe2xldCB4PXYqbS1tKih5Lmxlbmd0aC0xKS8yLGI9YS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixzK3UvMikuYXR0cigieSIsbCkuYXR0cigiZmlsbCIscCkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuc3R5bGUoImZvbnQtc2l6ZSIsbSkuc3R5bGUoImZvbnQtZmFtaWx5IixnKTtiLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixzK3UvMikuYXR0cigiZHkiLHgpLnRleHQoeVt2XSksYi5hdHRyKCJ5IixsK2gvMikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLG4oYixmKX19byhlLCJieVRzcGFuIik7ZnVuY3Rpb24gcihpLGEscyxsLHUsaCxmLGQpe2xldCBwPWEuYXBwZW5kKCJzd2l0Y2giKSxnPXAuYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigieCIscykuYXR0cigieSIsbCkuYXR0cigid2lkdGgiLHUpLmF0dHIoImhlaWdodCIsaCkuYXR0cigicG9zaXRpb24iLCJmaXhlZCIpLmFwcGVuZCgieGh0bWw6ZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZSIpLnN0eWxlKCJoZWlnaHQiLCIxMDAlIikuc3R5bGUoIndpZHRoIiwiMTAwJSIpO2cuYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS50ZXh0KGkpLGUoaSxwLHMsbCx1LGgsZixkKSxuKGcsZil9byhyLCJieUZvIik7ZnVuY3Rpb24gbihpLGEpe2ZvcihsZXQgcyBpbiBhKXMgaW4gYSYmaS5hdHRyKHMsYVtzXSl9cmV0dXJuIG8obiwiX3NldFRleHRBdHRycyIpLGZ1bmN0aW9uKGkpe3JldHVybiBpLnRleHRQbGFjZW1lbnQ9PT0iZm8iP3I6aS50ZXh0UGxhY2VtZW50PT09Im9sZCI/dDplfX0oKSxqV2U9byhmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJhcnJvd2hlYWQiKS5hdHRyKCJyZWZYIiw1KS5hdHRyKCJyZWZZIiwyKS5hdHRyKCJtYXJrZXJXaWR0aCIsNikuYXR0cigibWFya2VySGVpZ2h0Iiw0KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCwwIFYgNCBMNiwyIFoiKX0sImluaXRHcmFwaGljcyIpO28oUzBlLCJ3cmFwIik7S1dlPW8oZnVuY3Rpb24odCxlLHIsbil7bGV0IGk9ciVHV2UtMSxhPXQuYXBwZW5kKCJnIik7ZS5zZWN0aW9uPWksYS5hdHRyKCJjbGFzcyIsKGUuY2xhc3M/ZS5jbGFzcysiICI6IiIpKyJ0aW1lbGluZS1ub2RlICIrKCJzZWN0aW9uLSIraSkpO2xldCBzPWEuYXBwZW5kKCJnIiksbD1hLmFwcGVuZCgiZyIpLGg9bC5hcHBlbmQoInRleHQiKS50ZXh0KGUuZGVzY3IpLmF0dHIoImR5IiwiMWVtIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmNhbGwoUzBlLGUud2lkdGgpLm5vZGUoKS5nZXRCQm94KCksZj1uLmZvbnRTaXplPy5yZXBsYWNlP24uZm9udFNpemUucmVwbGFjZSgicHgiLCIiKTpuLmZvbnRTaXplO3JldHVybiBlLmhlaWdodD1oLmhlaWdodCtmKjEuMSouNStlLnBhZGRpbmcsZS5oZWlnaHQ9TWF0aC5tYXgoZS5oZWlnaHQsZS5tYXhIZWlnaHQpLGUud2lkdGg9ZS53aWR0aCsyKmUucGFkZGluZyxsLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2Uud2lkdGgvMisiLCAiK2UucGFkZGluZy8yKyIpIiksWldlKHMsZSxpLG4pLGV9LCJkcmF3Tm9kZSIpLFFXZT1vKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj10LmFwcGVuZCgiZyIpLGE9bi5hcHBlbmQoInRleHQiKS50ZXh0KGUuZGVzY3IpLmF0dHIoImR5IiwiMWVtIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmNhbGwoUzBlLGUud2lkdGgpLm5vZGUoKS5nZXRCQm94KCkscz1yLmZvbnRTaXplPy5yZXBsYWNlP3IuZm9udFNpemUucmVwbGFjZSgicHgiLCIiKTpyLmZvbnRTaXplO3JldHVybiBuLnJlbW92ZSgpLGEuaGVpZ2h0K3MqMS4xKi41K2UucGFkZGluZ30sImdldFZpcnR1YWxOb2RlSGVpZ2h0IiksWldlPW8oZnVuY3Rpb24odCxlLHIpe3QuYXBwZW5kKCJwYXRoIikuYXR0cigiaWQiLCJub2RlLSIrZS5pZCkuYXR0cigiY2xhc3MiLCJub2RlLWJrZyBub2RlLSIrZS50eXBlKS5hdHRyKCJkIixgTTAgJHtlLmhlaWdodC01fSB2JHstZS5oZWlnaHQrMio1fSBxMCwtNSA1LC01IGgke2Uud2lkdGgtMio1fSBxNSwwIDUsNSB2JHtlLmhlaWdodC01fSBIMCBaYCksdC5hcHBlbmQoImxpbmUiKS5hdHRyKCJjbGFzcyIsIm5vZGUtbGluZS0iK3IpLmF0dHIoIngxIiwwKS5hdHRyKCJ5MSIsZS5oZWlnaHQpLmF0dHIoIngyIixlLndpZHRoKS5hdHRyKCJ5MiIsZS5oZWlnaHQpfSwiZGVmYXVsdEJrZyIpLERmPXtkcmF3UmVjdDpkNixkcmF3Q2lyY2xlOlVXZSxkcmF3U2VjdGlvbjpXV2UsZHJhd1RleHQ6azBlLGRyYXdMYWJlbDpIV2UsZHJhd1Rhc2s6cVdlLGRyYXdCYWNrZ3JvdW5kUmVjdDpZV2UsZ2V0VGV4dE9iajpYV2UsZ2V0Tm90ZVJlY3Q6dEIsaW5pdEdyYXBoaWNzOmpXZSxkcmF3Tm9kZTpLV2UsZ2V0VmlydHVhbE5vZGVIZWlnaHQ6UVdlfX0pO3ZhciBKV2UsQTBlLGVxZSxfMGUsRDBlPU4oKCk9PnsidXNlIHN0cmljdCI7ZnIoKTtDMGUoKTt5dCgpO0d0KCk7eGkoKTtKV2U9byhmdW5jdGlvbih0LGUscixuKXtsZXQgaT1tZSgpLGE9aS50aW1lbGluZT8ubGVmdE1hcmdpbj8/NTA7WC5kZWJ1ZygidGltZWxpbmUiLG4uZGIpO2xldCBzPWkuc2VjdXJpdHlMZXZlbCxsO3M9PT0ic2FuZGJveCImJihsPUdlKCIjaSIrZSkpO2xldCBoPShzPT09InNhbmRib3giP0dlKGwubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keSk6R2UoImJvZHkiKSkuc2VsZWN0KCIjIitlKTtoLmFwcGVuZCgiZyIpO2xldCBmPW4uZGIuZ2V0VGFza3MoKSxkPW4uZGIuZ2V0Q29tbW9uRGIoKS5nZXREaWFncmFtVGl0bGUoKTtYLmRlYnVnKCJ0YXNrIixmKSxEZi5pbml0R3JhcGhpY3MoaCk7bGV0IHA9bi5kYi5nZXRTZWN0aW9ucygpO1guZGVidWcoInNlY3Rpb25zIixwKTtsZXQgbT0wLGc9MCx5PTAsdj0wLHg9NTArYSxiPTUwO3Y9NTA7bGV0IFQ9MCxTPSEwO3AuZm9yRWFjaChmdW5jdGlvbihEKXtsZXQgTz17bnVtYmVyOlQsZGVzY3I6RCxzZWN0aW9uOlQsd2lkdGg6MTUwLHBhZGRpbmc6MjAsbWF4SGVpZ2h0Om19LFI9RGYuZ2V0VmlydHVhbE5vZGVIZWlnaHQoaCxPLGkpO1guZGVidWcoInNlY3Rpb25IZWlnaHQgYmVmb3JlIGRyYXciLFIpLG09TWF0aC5tYXgobSxSKzIwKX0pO2xldCB3PTAsRT0wO1guZGVidWcoInRhc2tzLmxlbmd0aCIsZi5sZW5ndGgpO2ZvcihsZXRbRCxPXW9mIGYuZW50cmllcygpKXtsZXQgUj17bnVtYmVyOkQsZGVzY3I6TyxzZWN0aW9uOk8uc2VjdGlvbix3aWR0aDoxNTAscGFkZGluZzoyMCxtYXhIZWlnaHQ6Z30saz1EZi5nZXRWaXJ0dWFsTm9kZUhlaWdodChoLFIsaSk7WC5kZWJ1ZygidGFza0hlaWdodCBiZWZvcmUgZHJhdyIsayksZz1NYXRoLm1heChnLGsrMjApLHc9TWF0aC5tYXgodyxPLmV2ZW50cy5sZW5ndGgpO2xldCBMPTA7Zm9yKGxldCBBIG9mIE8uZXZlbnRzKXtsZXQgST17ZGVzY3I6QSxzZWN0aW9uOk8uc2VjdGlvbixudW1iZXI6Ty5zZWN0aW9uLHdpZHRoOjE1MCxwYWRkaW5nOjIwLG1heEhlaWdodDo1MH07TCs9RGYuZ2V0VmlydHVhbE5vZGVIZWlnaHQoaCxJLGkpfU8uZXZlbnRzLmxlbmd0aD4wJiYoTCs9KE8uZXZlbnRzLmxlbmd0aC0xKSoxMCksRT1NYXRoLm1heChFLEwpfVguZGVidWcoIm1heFNlY3Rpb25IZWlnaHQgYmVmb3JlIGRyYXciLG0pLFguZGVidWcoIm1heFRhc2tIZWlnaHQgYmVmb3JlIGRyYXciLGcpLHAmJnAubGVuZ3RoPjA/cC5mb3JFYWNoKEQ9PntsZXQgTz1mLmZpbHRlcihBPT5BLnNlY3Rpb249PT1EKSxSPXtudW1iZXI6VCxkZXNjcjpELHNlY3Rpb246VCx3aWR0aDoyMDAqTWF0aC5tYXgoTy5sZW5ndGgsMSktNTAscGFkZGluZzoyMCxtYXhIZWlnaHQ6bX07WC5kZWJ1Zygic2VjdGlvbk5vZGUiLFIpO2xldCBrPWguYXBwZW5kKCJnIiksTD1EZi5kcmF3Tm9kZShrLFIsVCxpKTtYLmRlYnVnKCJzZWN0aW9uTm9kZSBvdXRwdXQiLEwpLGsuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7eH0sICR7dn0pYCksYis9bSs1MCxPLmxlbmd0aD4wJiZBMGUoaCxPLFQseCxiLGcsaSx3LEUsbSwhMSkseCs9MjAwKk1hdGgubWF4KE8ubGVuZ3RoLDEpLGI9dixUKyt9KTooUz0hMSxBMGUoaCxmLFQseCxiLGcsaSx3LEUsbSwhMCkpO2xldCBfPWgubm9kZSgpLmdldEJCb3goKTtYLmRlYnVnKCJib3VuZHMiLF8pLGQmJmguYXBwZW5kKCJ0ZXh0IikudGV4dChkKS5hdHRyKCJ4IixfLndpZHRoLzItYSkuYXR0cigiZm9udC1zaXplIiwiNGV4IikuYXR0cigiZm9udC13ZWlnaHQiLCJib2xkIikuYXR0cigieSIsMjApLHk9Uz9tK2crMTUwOmcrMTAwLGguYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsaW5lV3JhcHBlciIpLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIixhKS5hdHRyKCJ5MSIseSkuYXR0cigieDIiLF8ud2lkdGgrMyphKS5hdHRyKCJ5MiIseSkuYXR0cigic3Ryb2tlLXdpZHRoIiw0KS5hdHRyKCJzdHJva2UiLCJibGFjayIpLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoI2Fycm93aGVhZCkiKSxMbyh2b2lkIDAsaCxpLnRpbWVsaW5lPy5wYWRkaW5nPz81MCxpLnRpbWVsaW5lPy51c2VNYXhXaWR0aD8/ITEpfSwiZHJhdyIpLEEwZT1vKGZ1bmN0aW9uKHQsZSxyLG4saSxhLHMsbCx1LGgsZil7Zm9yKGxldCBkIG9mIGUpe2xldCBwPXtkZXNjcjpkLnRhc2ssc2VjdGlvbjpyLG51bWJlcjpyLHdpZHRoOjE1MCxwYWRkaW5nOjIwLG1heEhlaWdodDphfTtYLmRlYnVnKCJ0YXNrTm9kZSIscCk7bGV0IG09dC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRhc2tXcmFwcGVyIikseT1EZi5kcmF3Tm9kZShtLHAscixzKS5oZWlnaHQ7aWYoWC5kZWJ1ZygidGFza0hlaWdodCBhZnRlciBkcmF3Iix5KSxtLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke259LCAke2l9KWApLGE9TWF0aC5tYXgoYSx5KSxkLmV2ZW50cyl7bGV0IHY9dC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxpbmVXcmFwcGVyIikseD1hO2krPTEwMCx4PXgrZXFlKHQsZC5ldmVudHMscixuLGkscyksaS09MTAwLHYuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLG4rMTkwLzIpLmF0dHIoInkxIixpK2EpLmF0dHIoIngyIixuKzE5MC8yKS5hdHRyKCJ5MiIsaSthKzEwMCt1KzEwMCkuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJzdHJva2UiLCJibGFjayIpLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoI2Fycm93aGVhZCkiKS5hdHRyKCJzdHJva2UtZGFzaGFycmF5IiwiNSw1Iil9bj1uKzIwMCxmJiYhcy50aW1lbGluZT8uZGlzYWJsZU11bHRpY29sb3ImJnIrK31pPWktMTB9LCJkcmF3VGFza3MiKSxlcWU9byhmdW5jdGlvbih0LGUscixuLGksYSl7bGV0IHM9MCxsPWk7aT1pKzEwMDtmb3IobGV0IHUgb2YgZSl7bGV0IGg9e2Rlc2NyOnUsc2VjdGlvbjpyLG51bWJlcjpyLHdpZHRoOjE1MCxwYWRkaW5nOjIwLG1heEhlaWdodDo1MH07WC5kZWJ1ZygiZXZlbnROb2RlIixoKTtsZXQgZj10LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiZXZlbnRXcmFwcGVyIikscD1EZi5kcmF3Tm9kZShmLGgscixhKS5oZWlnaHQ7cz1zK3AsZi5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtufSwgJHtpfSlgKSxpPWkrMTArcH1yZXR1cm4gaT1sLHN9LCJkcmF3RXZlbnRzIiksXzBlPXtzZXRDb25mOm8oKCk9Pnt9LCJzZXRDb25mIiksZHJhdzpKV2V9fSk7dmFyIHRxZSxycWUsTDBlLFIwZT1OKCgpPT57InVzZSBzdHJpY3QiO0tzKCk7dHFlPW8odD0+e2xldCBlPSIiO2ZvcihsZXQgcj0wO3I8dC5USEVNRV9DT0xPUl9MSU1JVDtyKyspdFsibGluZUNvbG9yIityXT10WyJsaW5lQ29sb3IiK3JdfHx0WyJjU2NhbGVJbnYiK3JdLGxhKHRbImxpbmVDb2xvciIrcl0pP3RbImxpbmVDb2xvciIrcl09THQodFsibGluZUNvbG9yIityXSwyMCk6dFsibGluZUNvbG9yIityXT1PdCh0WyJsaW5lQ29sb3IiK3JdLDIwKTtmb3IobGV0IHI9MDtyPHQuVEhFTUVfQ09MT1JfTElNSVQ7cisrKXtsZXQgbj0iIisoMTctMypyKTtlKz1gCiAgICAuc2VjdGlvbi0ke3ItMX0gcmVjdCwgLnNlY3Rpb24tJHtyLTF9IHBhdGgsIC5zZWN0aW9uLSR7ci0xfSBjaXJjbGUsIC5zZWN0aW9uLSR7ci0xfSBwYXRoICB7CiAgICAgIGZpbGw6ICR7dFsiY1NjYWxlIityXX07CiAgICB9CiAgICAuc2VjdGlvbi0ke3ItMX0gdGV4dCB7CiAgICAgZmlsbDogJHt0WyJjU2NhbGVMYWJlbCIrcl19OwogICAgfQogICAgLm5vZGUtaWNvbi0ke3ItMX0gewogICAgICBmb250LXNpemU6IDQwcHg7CiAgICAgIGNvbG9yOiAke3RbImNTY2FsZUxhYmVsIityXX07CiAgICB9CiAgICAuc2VjdGlvbi1lZGdlLSR7ci0xfXsKICAgICAgc3Ryb2tlOiAke3RbImNTY2FsZSIrcl19OwogICAgfQogICAgLmVkZ2UtZGVwdGgtJHtyLTF9ewogICAgICBzdHJva2Utd2lkdGg6ICR7bn07CiAgICB9CiAgICAuc2VjdGlvbi0ke3ItMX0gbGluZSB7CiAgICAgIHN0cm9rZTogJHt0WyJjU2NhbGVJbnYiK3JdfSA7CiAgICAgIHN0cm9rZS13aWR0aDogMzsKICAgIH0KCiAgICAubGluZVdyYXBwZXIgbGluZXsKICAgICAgc3Ryb2tlOiAke3RbImNTY2FsZUxhYmVsIityXX0gOwogICAgfQoKICAgIC5kaXNhYmxlZCwgLmRpc2FibGVkIGNpcmNsZSwgLmRpc2FibGVkIHRleHQgewogICAgICBmaWxsOiBsaWdodGdyYXk7CiAgICB9CiAgICAuZGlzYWJsZWQgdGV4dCB7CiAgICAgIGZpbGw6ICNlZmVmZWY7CiAgICB9CiAgICBgfXJldHVybiBlfSwiZ2VuU2VjdGlvbnMiKSxycWU9byh0PT5gCiAgLmVkZ2UgewogICAgc3Ryb2tlLXdpZHRoOiAzOwogIH0KICAke3RxZSh0KX0KICAuc2VjdGlvbi1yb290IHJlY3QsIC5zZWN0aW9uLXJvb3QgcGF0aCwgLnNlY3Rpb24tcm9vdCBjaXJjbGUgIHsKICAgIGZpbGw6ICR7dC5naXQwfTsKICB9CiAgLnNlY3Rpb24tcm9vdCB0ZXh0IHsKICAgIGZpbGw6ICR7dC5naXRCcmFuY2hMYWJlbDB9OwogIH0KICAuaWNvbi1jb250YWluZXIgewogICAgaGVpZ2h0OjEwMCU7CiAgICBkaXNwbGF5OiBmbGV4OwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogIH0KICAuZWRnZSB7CiAgICBmaWxsOiBub25lOwogIH0KICAuZXZlbnRXcmFwcGVyICB7CiAgIGZpbHRlcjogYnJpZ2h0bmVzcygxMjAlKTsKICB9CmAsImdldFN0eWxlcyIpLEwwZT1ycWV9KTt2YXIgTjBlPXt9O3VyKE4wZSx7ZGlhZ3JhbTooKT0+bnFlfSk7dmFyIG5xZSxNMGU9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt1MGUoKTtUMGUoKTtEMGUoKTtSMGUoKTtucWU9e2RiOmVCLHJlbmRlcmVyOl8wZSxwYXJzZXI6YzBlLHN0eWxlczpMMGV9fSk7dmFyIHJCLFAwZSxCMGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtyQj1mdW5jdGlvbigpe3ZhciB0PW8oZnVuY3Rpb24oUyx3LEUsXyl7Zm9yKEU9RXx8e30sXz1TLmxlbmd0aDtfLS07RVtTW19dXT13KTtyZXR1cm4gRX0sIm8iKSxlPVsxLDRdLHI9WzEsMTNdLG49WzEsMTJdLGk9WzEsMTVdLGE9WzEsMTZdLHM9WzEsMjBdLGw9WzEsMTldLHU9WzYsNyw4XSxoPVsxLDI2XSxmPVsxLDI0XSxkPVsxLDI1XSxwPVs2LDcsMTFdLG09WzEsNiwxMywxNSwxNiwxOSwyMl0sZz1bMSwzM10seT1bMSwzNF0sdj1bMSw2LDcsMTEsMTMsMTUsMTYsMTksMjJdLHg9e3RyYWNlOm8oZnVuY3Rpb24oKXt9LCJ0cmFjZSIpLHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsbWluZE1hcDo0LHNwYWNlTGluZXM6NSxTUEFDRUxJTkU6NixOTDo3LE1JTkRNQVA6OCxkb2N1bWVudDo5LHN0b3A6MTAsRU9GOjExLHN0YXRlbWVudDoxMixTUEFDRUxJU1Q6MTMsbm9kZToxNCxJQ09OOjE1LENMQVNTOjE2LG5vZGVXaXRoSWQ6MTcsbm9kZVdpdGhvdXRJZDoxOCxOT0RFX0RTVEFSVDoxOSxOT0RFX0RFU0NSOjIwLE5PREVfREVORDoyMSxOT0RFX0lEOjIyLCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw2OiJTUEFDRUxJTkUiLDc6Ik5MIiw4OiJNSU5ETUFQIiwxMToiRU9GIiwxMzoiU1BBQ0VMSVNUIiwxNToiSUNPTiIsMTY6IkNMQVNTIiwxOToiTk9ERV9EU1RBUlQiLDIwOiJOT0RFX0RFU0NSIiwyMToiTk9ERV9ERU5EIiwyMjoiTk9ERV9JRCJ9LHByb2R1Y3Rpb25zXzpbMCxbMywxXSxbMywyXSxbNSwxXSxbNSwyXSxbNSwyXSxbNCwyXSxbNCwzXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMl0sWzEwLDJdLFs5LDNdLFs5LDJdLFsxMiwyXSxbMTIsMl0sWzEyLDJdLFsxMiwxXSxbMTIsMV0sWzEyLDFdLFsxMiwxXSxbMTIsMV0sWzE0LDFdLFsxNCwxXSxbMTgsM10sWzE3LDFdLFsxNyw0XV0scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKHcsRSxfLEMsRCxPLFIpe3ZhciBrPU8ubGVuZ3RoLTE7c3dpdGNoKEQpe2Nhc2UgNjpjYXNlIDc6cmV0dXJuIEM7Y2FzZSA4OkMuZ2V0TG9nZ2VyKCkudHJhY2UoIlN0b3AgTkwgIik7YnJlYWs7Y2FzZSA5OkMuZ2V0TG9nZ2VyKCkudHJhY2UoIlN0b3AgRU9GICIpO2JyZWFrO2Nhc2UgMTE6Qy5nZXRMb2dnZXIoKS50cmFjZSgiU3RvcCBOTDIgIik7YnJlYWs7Y2FzZSAxMjpDLmdldExvZ2dlcigpLnRyYWNlKCJTdG9wIEVPRjIgIik7YnJlYWs7Y2FzZSAxNTpDLmdldExvZ2dlcigpLmluZm8oIk5vZGU6ICIsT1trXS5pZCksQy5hZGROb2RlKE9bay0xXS5sZW5ndGgsT1trXS5pZCxPW2tdLmRlc2NyLE9ba10udHlwZSk7YnJlYWs7Y2FzZSAxNjpDLmdldExvZ2dlcigpLnRyYWNlKCJJY29uOiAiLE9ba10pLEMuZGVjb3JhdGVOb2RlKHtpY29uOk9ba119KTticmVhaztjYXNlIDE3OmNhc2UgMjE6Qy5kZWNvcmF0ZU5vZGUoe2NsYXNzOk9ba119KTticmVhaztjYXNlIDE4OkMuZ2V0TG9nZ2VyKCkudHJhY2UoIlNQQUNFTElTVCIpO2JyZWFrO2Nhc2UgMTk6Qy5nZXRMb2dnZXIoKS50cmFjZSgiTm9kZTogIixPW2tdLmlkKSxDLmFkZE5vZGUoMCxPW2tdLmlkLE9ba10uZGVzY3IsT1trXS50eXBlKTticmVhaztjYXNlIDIwOkMuZGVjb3JhdGVOb2RlKHtpY29uOk9ba119KTticmVhaztjYXNlIDI1OkMuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZm91bmQgLi4iLE9bay0yXSksdGhpcy4kPXtpZDpPW2stMV0sZGVzY3I6T1trLTFdLHR5cGU6Qy5nZXRUeXBlKE9bay0yXSxPW2tdKX07YnJlYWs7Y2FzZSAyNjp0aGlzLiQ9e2lkOk9ba10sZGVzY3I6T1trXSx0eXBlOkMubm9kZVR5cGUuREVGQVVMVH07YnJlYWs7Y2FzZSAyNzpDLmdldExvZ2dlcigpLnRyYWNlKCJub2RlIGZvdW5kIC4uIixPW2stM10pLHRoaXMuJD17aWQ6T1trLTNdLGRlc2NyOk9bay0xXSx0eXBlOkMuZ2V0VHlwZShPW2stMl0sT1trXSl9O2JyZWFrfX0sImFub255bW91cyIpLHRhYmxlOlt7MzoxLDQ6Miw1OjMsNjpbMSw1XSw4OmV9LHsxOlszXX0sezE6WzIsMV19LHs0OjYsNjpbMSw3XSw3OlsxLDhdLDg6ZX0sezY6ciw3OlsxLDEwXSw5OjksMTI6MTEsMTM6biwxNDoxNCwxNTppLDE2OmEsMTc6MTcsMTg6MTgsMTk6cywyMjpsfSx0KHUsWzIsM10pLHsxOlsyLDJdfSx0KHUsWzIsNF0pLHQodSxbMiw1XSksezE6WzIsNl0sNjpyLDEyOjIxLDEzOm4sMTQ6MTQsMTU6aSwxNjphLDE3OjE3LDE4OjE4LDE5OnMsMjI6bH0sezY6ciw5OjIyLDEyOjExLDEzOm4sMTQ6MTQsMTU6aSwxNjphLDE3OjE3LDE4OjE4LDE5OnMsMjI6bH0sezY6aCw3OmYsMTA6MjMsMTE6ZH0sdChwLFsyLDIyXSx7MTc6MTcsMTg6MTgsMTQ6MjcsMTU6WzEsMjhdLDE2OlsxLDI5XSwxOTpzLDIyOmx9KSx0KHAsWzIsMThdKSx0KHAsWzIsMTldKSx0KHAsWzIsMjBdKSx0KHAsWzIsMjFdKSx0KHAsWzIsMjNdKSx0KHAsWzIsMjRdKSx0KHAsWzIsMjZdLHsxOTpbMSwzMF19KSx7MjA6WzEsMzFdfSx7NjpoLDc6ZiwxMDozMiwxMTpkfSx7MTpbMiw3XSw2OnIsMTI6MjEsMTM6biwxNDoxNCwxNTppLDE2OmEsMTc6MTcsMTg6MTgsMTk6cywyMjpsfSx0KG0sWzIsMTRdLHs3OmcsMTE6eX0pLHQodixbMiw4XSksdCh2LFsyLDldKSx0KHYsWzIsMTBdKSx0KHAsWzIsMTVdKSx0KHAsWzIsMTZdKSx0KHAsWzIsMTddKSx7MjA6WzEsMzVdfSx7MjE6WzEsMzZdfSx0KG0sWzIsMTNdLHs3OmcsMTE6eX0pLHQodixbMiwxMV0pLHQodixbMiwxMl0pLHsyMTpbMSwzN119LHQocCxbMiwyNV0pLHQocCxbMiwyN10pXSxkZWZhdWx0QWN0aW9uczp7MjpbMiwxXSw2OlsyLDJdfSxwYXJzZUVycm9yOm8oZnVuY3Rpb24odyxFKXtpZihFLnJlY292ZXJhYmxlKXRoaXMudHJhY2Uodyk7ZWxzZXt2YXIgXz1uZXcgRXJyb3Iodyk7dGhyb3cgXy5oYXNoPUUsX319LCJwYXJzZUVycm9yIikscGFyc2U6byhmdW5jdGlvbih3KXt2YXIgRT10aGlzLF89WzBdLEM9W10sRD1bbnVsbF0sTz1bXSxSPXRoaXMudGFibGUsaz0iIixMPTAsQT0wLEk9MCxNPTIsUD0xLEI9Ty5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxGPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksej17eXk6e319O2Zvcih2YXIgJCBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LCQpJiYoei55eVskXT10aGlzLnl5WyRdKTtGLnNldElucHV0KHcsei55eSksei55eS5sZXhlcj1GLHoueXkucGFyc2VyPXRoaXMsdHlwZW9mIEYueXlsbG9jPiJ1IiYmKEYueXlsbG9jPXt9KTt2YXIgVT1GLnl5bGxvYztPLnB1c2goVSk7dmFyIEs9Ri5vcHRpb25zJiZGLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiB6Lnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPXoueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gZWUoYWUpe18ubGVuZ3RoPV8ubGVuZ3RoLTIqYWUsRC5sZW5ndGg9RC5sZW5ndGgtYWUsTy5sZW5ndGg9Ty5sZW5ndGgtYWV9byhlZSwicG9wU3RhY2siKTtmdW5jdGlvbiBZKCl7dmFyIGFlO3JldHVybiBhZT1DLnBvcCgpfHxGLmxleCgpfHxQLHR5cGVvZiBhZSE9Im51bWJlciImJihhZSBpbnN0YW5jZW9mIEFycmF5JiYoQz1hZSxhZT1DLnBvcCgpKSxhZT1FLnN5bWJvbHNfW2FlXXx8YWUpLGFlfW8oWSwibGV4Iik7Zm9yKHZhciBjZSxaLHVlLFEsaixuZSx0ZT17fSxoZSxsZSxKLFNlOzspe2lmKHVlPV9bXy5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1t1ZV0/UT10aGlzLmRlZmF1bHRBY3Rpb25zW3VlXTooKGNlPT09bnVsbHx8dHlwZW9mIGNlPiJ1IikmJihjZT1ZKCkpLFE9Ult1ZV0mJlJbdWVdW2NlXSksdHlwZW9mIFE+InUifHwhUS5sZW5ndGh8fCFRWzBdKXt2YXIgc2U9IiI7U2U9W107Zm9yKGhlIGluIFJbdWVdKXRoaXMudGVybWluYWxzX1toZV0mJmhlPk0mJlNlLnB1c2goIiciK3RoaXMudGVybWluYWxzX1toZV0rIiciKTtGLnNob3dQb3NpdGlvbj9zZT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhMKzEpK2A6CmArRi5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK1NlLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bY2VdfHxjZSkrIiciOnNlPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKEwrMSkrIjogVW5leHBlY3RlZCAiKyhjZT09UD8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tjZV18fGNlKSsiJyIpLHRoaXMucGFyc2VFcnJvcihzZSx7dGV4dDpGLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tjZV18fGNlLGxpbmU6Ri55eWxpbmVubyxsb2M6VSxleHBlY3RlZDpTZX0pfWlmKFFbMF1pbnN0YW5jZW9mIEFycmF5JiZRLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrdWUrIiwgdG9rZW46ICIrY2UpO3N3aXRjaChRWzBdKXtjYXNlIDE6Xy5wdXNoKGNlKSxELnB1c2goRi55eXRleHQpLE8ucHVzaChGLnl5bGxvYyksXy5wdXNoKFFbMV0pLGNlPW51bGwsWj8oY2U9WixaPW51bGwpOihBPUYueXlsZW5nLGs9Ri55eXRleHQsTD1GLnl5bGluZW5vLFU9Ri55eWxsb2MsST4wJiZJLS0pO2JyZWFrO2Nhc2UgMjppZihsZT10aGlzLnByb2R1Y3Rpb25zX1tRWzFdXVsxXSx0ZS4kPURbRC5sZW5ndGgtbGVdLHRlLl8kPXtmaXJzdF9saW5lOk9bTy5sZW5ndGgtKGxlfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6T1tPLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOk9bTy5sZW5ndGgtKGxlfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOk9bTy5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LEsmJih0ZS5fJC5yYW5nZT1bT1tPLmxlbmd0aC0obGV8fDEpXS5yYW5nZVswXSxPW08ubGVuZ3RoLTFdLnJhbmdlWzFdXSksbmU9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KHRlLFtrLEEsTCx6Lnl5LFFbMV0sRCxPXS5jb25jYXQoQikpLHR5cGVvZiBuZTwidSIpcmV0dXJuIG5lO2xlJiYoXz1fLnNsaWNlKDAsLTEqbGUqMiksRD1ELnNsaWNlKDAsLTEqbGUpLE89Ty5zbGljZSgwLC0xKmxlKSksXy5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW1FbMV1dWzBdKSxELnB1c2godGUuJCksTy5wdXNoKHRlLl8kKSxKPVJbX1tfLmxlbmd0aC0yXV1bX1tfLmxlbmd0aC0xXV0sXy5wdXNoKEopO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9LCJwYXJzZSIpfSxiPWZ1bmN0aW9uKCl7dmFyIFM9e0VPRjoxLHBhcnNlRXJyb3I6byhmdW5jdGlvbihFLF8pe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoRSxfKTtlbHNlIHRocm93IG5ldyBFcnJvcihFKX0sInBhcnNlRXJyb3IiKSxzZXRJbnB1dDpvKGZ1bmN0aW9uKHcsRSl7cmV0dXJuIHRoaXMueXk9RXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9dyx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30sInNldElucHV0IiksaW5wdXQ6byhmdW5jdGlvbigpe3ZhciB3PXRoaXMuX2lucHV0WzBdO3RoaXMueXl0ZXh0Kz13LHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz13LHRoaXMubWF0Y2hlZCs9dzt2YXIgRT13Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTtyZXR1cm4gRT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksd30sImlucHV0IiksdW5wdXQ6byhmdW5jdGlvbih3KXt2YXIgRT13Lmxlbmd0aCxfPXcuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD13K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1FKSx0aGlzLm9mZnNldC09RTt2YXIgQz10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxfLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09Xy5sZW5ndGgtMSk7dmFyIEQ9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOl8/KF8ubGVuZ3RoPT09Qy5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK0NbQy5sZW5ndGgtXy5sZW5ndGhdLmxlbmd0aC1fWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tRX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtEWzBdLERbMF0rdGhpcy55eWxlbmctRV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSwidW5wdXQiKSxtb3JlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSwibW9yZSIpLHJlamVjdDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil0aGlzLl9iYWNrdHJhY2s9ITA7ZWxzZSByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pO3JldHVybiB0aGlzfSwicmVqZWN0IiksbGVzczpvKGZ1bmN0aW9uKHcpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSh3KSl9LCJsZXNzIikscGFzdElucHV0Om8oZnVuY3Rpb24oKXt2YXIgdz10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKHcubGVuZ3RoPjIwPyIuLi4iOiIiKSt3LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSwicGFzdElucHV0IiksdXBjb21pbmdJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIHc9dGhpcy5tYXRjaDtyZXR1cm4gdy5sZW5ndGg8MjAmJih3Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC13Lmxlbmd0aCkpLCh3LnN1YnN0cigwLDIwKSsody5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sInVwY29taW5nSW5wdXQiKSxzaG93UG9zaXRpb246byhmdW5jdGlvbigpe3ZhciB3PXRoaXMucGFzdElucHV0KCksRT1uZXcgQXJyYXkody5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiB3K3RoaXMudXBjb21pbmdJbnB1dCgpK2AKYCtFKyJeIn0sInNob3dQb3NpdGlvbiIpLHRlc3RfbWF0Y2g6byhmdW5jdGlvbih3LEUpe3ZhciBfLEMsRDtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoRD17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihELnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLEM9d1swXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyksQyYmKHRoaXMueXlsaW5lbm8rPUMubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46Qz9DW0MubGVuZ3RoLTFdLmxlbmd0aC1DW0MubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rd1swXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz13WzBdLHRoaXMubWF0Y2grPXdbMF0sdGhpcy5tYXRjaGVzPXcsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2Uod1swXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9d1swXSxfPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLEUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksXylyZXR1cm4gXztpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgTyBpbiBEKXRoaXNbT109RFtPXTtyZXR1cm4hMX1yZXR1cm4hMX0sInRlc3RfbWF0Y2giKSxuZXh0Om8oZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKTt2YXIgdyxFLF8sQzt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBEPXRoaXMuX2N1cnJlbnRSdWxlcygpLE89MDtPPEQubGVuZ3RoO08rKylpZihfPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbRFtPXV0pLF8mJighRXx8X1swXS5sZW5ndGg+RVswXS5sZW5ndGgpKXtpZihFPV8sQz1PLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKHc9dGhpcy50ZXN0X21hdGNoKF8sRFtPXSksdyE9PSExKXJldHVybiB3O2lmKHRoaXMuX2JhY2t0cmFjayl7RT0hMTtjb250aW51ZX1lbHNlIHJldHVybiExfWVsc2UgaWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBFPyh3PXRoaXMudGVzdF9tYXRjaChFLERbQ10pLHchPT0hMT93OiExKTp0aGlzLl9pbnB1dD09PSIiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gVW5yZWNvZ25pemVkIHRleHQuCmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSwibmV4dCIpLGxleDpvKGZ1bmN0aW9uKCl7dmFyIEU9dGhpcy5uZXh0KCk7cmV0dXJuIEV8fHRoaXMubGV4KCl9LCJsZXgiKSxiZWdpbjpvKGZ1bmN0aW9uKEUpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChFKX0sImJlZ2luIikscG9wU3RhdGU6byhmdW5jdGlvbigpe3ZhciBFPXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE7cmV0dXJuIEU+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LCJwb3BTdGF0ZSIpLF9jdXJyZW50UnVsZXM6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LCJfY3VycmVudFJ1bGVzIiksdG9wU3RhdGU6byhmdW5jdGlvbihFKXtyZXR1cm4gRT10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKEV8fDApLEU+PTA/dGhpcy5jb25kaXRpb25TdGFja1tFXToiSU5JVElBTCJ9LCJ0b3BTdGF0ZSIpLHB1c2hTdGF0ZTpvKGZ1bmN0aW9uKEUpe3RoaXMuYmVnaW4oRSl9LCJwdXNoU3RhdGUiKSxzdGF0ZVN0YWNrU2l6ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSwic3RhdGVTdGFja1NpemUiKSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbihFLF8sQyxEKXt2YXIgTz1EO3N3aXRjaChDKXtjYXNlIDA6cmV0dXJuIEUuZ2V0TG9nZ2VyKCkudHJhY2UoIkZvdW5kIGNvbW1lbnQiLF8ueXl0ZXh0KSw2O2JyZWFrO2Nhc2UgMTpyZXR1cm4gODtjYXNlIDI6dGhpcy5iZWdpbigiQ0xBU1MiKTticmVhaztjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxNjticmVhaztjYXNlIDQ6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNTpFLmdldExvZ2dlcigpLnRyYWNlKCJCZWdpbiBpY29uIiksdGhpcy5iZWdpbigiSUNPTiIpO2JyZWFrO2Nhc2UgNjpyZXR1cm4gRS5nZXRMb2dnZXIoKS50cmFjZSgiU1BBQ0VMSU5FIiksNjticmVhaztjYXNlIDc6cmV0dXJuIDc7Y2FzZSA4OnJldHVybiAxNTtjYXNlIDk6RS5nZXRMb2dnZXIoKS50cmFjZSgiZW5kIGljb24iKSx0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxMDpyZXR1cm4gRS5nZXRMb2dnZXIoKS50cmFjZSgiRXhwbG9kaW5nIG5vZGUiKSx0aGlzLmJlZ2luKCJOT0RFIiksMTk7YnJlYWs7Y2FzZSAxMTpyZXR1cm4gRS5nZXRMb2dnZXIoKS50cmFjZSgiQ2xvdWQiKSx0aGlzLmJlZ2luKCJOT0RFIiksMTk7YnJlYWs7Y2FzZSAxMjpyZXR1cm4gRS5nZXRMb2dnZXIoKS50cmFjZSgiRXhwbG9zaW9uIEJhbmciKSx0aGlzLmJlZ2luKCJOT0RFIiksMTk7YnJlYWs7Y2FzZSAxMzpyZXR1cm4gRS5nZXRMb2dnZXIoKS50cmFjZSgiQ2xvdWQgQmFuZyIpLHRoaXMuYmVnaW4oIk5PREUiKSwxOTticmVhaztjYXNlIDE0OnJldHVybiB0aGlzLmJlZ2luKCJOT0RFIiksMTk7YnJlYWs7Y2FzZSAxNTpyZXR1cm4gdGhpcy5iZWdpbigiTk9ERSIpLDE5O2JyZWFrO2Nhc2UgMTY6cmV0dXJuIHRoaXMuYmVnaW4oIk5PREUiKSwxOTticmVhaztjYXNlIDE3OnJldHVybiB0aGlzLmJlZ2luKCJOT0RFIiksMTk7YnJlYWs7Y2FzZSAxODpyZXR1cm4gMTM7Y2FzZSAxOTpyZXR1cm4gMjI7Y2FzZSAyMDpyZXR1cm4gMTE7Y2FzZSAyMTp0aGlzLmJlZ2luKCJOU1RSMiIpO2JyZWFrO2Nhc2UgMjI6cmV0dXJuIk5PREVfREVTQ1IiO2Nhc2UgMjM6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjQ6RS5nZXRMb2dnZXIoKS50cmFjZSgiU3RhcnRpbmcgTlNUUiIpLHRoaXMuYmVnaW4oIk5TVFIiKTticmVhaztjYXNlIDI1OnJldHVybiBFLmdldExvZ2dlcigpLnRyYWNlKCJkZXNjcmlwdGlvbjoiLF8ueXl0ZXh0KSwiTk9ERV9ERVNDUiI7YnJlYWs7Y2FzZSAyNjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyNzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLEUuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICkpIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSAyODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLEUuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICkiKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDI5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksRS5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgLi4uIixfLnl5dGV4dCksIk5PREVfREVORCI7YnJlYWs7Y2FzZSAzMDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLEUuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICgoIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSAzMTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLEUuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICgtIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSAzMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLEUuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICgtIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSAzMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLEUuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICgoIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSAzNDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLEUuZ2V0TG9nZ2VyKCkudHJhY2UoIm5vZGUgZW5kICgoIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSAzNTpyZXR1cm4gRS5nZXRMb2dnZXIoKS50cmFjZSgiTG9uZyBkZXNjcmlwdGlvbjoiLF8ueXl0ZXh0KSwyMDticmVhaztjYXNlIDM2OnJldHVybiBFLmdldExvZ2dlcigpLnRyYWNlKCJMb25nIGRlc2NyaXB0aW9uOiIsXy55eXRleHQpLDIwO2JyZWFrfX0sImFub255bW91cyIpLHJ1bGVzOlsvXig/OlxzKiUlLiopL2ksL14oPzptaW5kbWFwXGIpL2ksL14oPzo6OjopL2ksL14oPzouKykvaSwvXig/OlxuKS9pLC9eKD86OjppY29uXCgpL2ksL14oPzpbXHNdK1tcbl0pL2ksL14oPzpbXG5dKykvaSwvXig/OlteXCldKykvaSwvXig/OlwpKS9pLC9eKD86LVwpKS9pLC9eKD86XCgtKS9pLC9eKD86XClcKSkvaSwvXig/OlwpKS9pLC9eKD86XChcKCkvaSwvXig/Olx7XHspL2ksL14oPzpcKCkvaSwvXig/OlxbKS9pLC9eKD86W1xzXSspL2ksL14oPzpbXlwoXFtcblwpXHtcfV0rKS9pLC9eKD86JCkvaSwvXig/OlsiXVtgXSkvaSwvXig/OlteYCJdKykvaSwvXig/OltgXVsiXSkvaSwvXig/OlsiXSkvaSwvXig/OlteIl0rKS9pLC9eKD86WyJdKS9pLC9eKD86W1wpXVwpKS9pLC9eKD86W1wpXSkvaSwvXig/OltcXV0pL2ksL14oPzpcfVx9KS9pLC9eKD86XCgtKS9pLC9eKD86LVwpKS9pLC9eKD86XChcKCkvaSwvXig/OlwoKS9pLC9eKD86W15cKVxdXChcfV0rKS9pLC9eKD86LisoPyFcKFwoKSkvaV0sY29uZGl0aW9uczp7Q0xBU1M6e3J1bGVzOlszLDRdLGluY2x1c2l2ZTohMX0sSUNPTjp7cnVsZXM6WzgsOV0saW5jbHVzaXZlOiExfSxOU1RSMjp7cnVsZXM6WzIyLDIzXSxpbmNsdXNpdmU6ITF9LE5TVFI6e3J1bGVzOlsyNSwyNl0saW5jbHVzaXZlOiExfSxOT0RFOntydWxlczpbMjEsMjQsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzZdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDUsNiw3LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwXSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIFN9KCk7eC5sZXhlcj1iO2Z1bmN0aW9uIFQoKXt0aGlzLnl5PXt9fXJldHVybiBvKFQsIlBhcnNlciIpLFQucHJvdG90eXBlPXgseC5QYXJzZXI9VCxuZXcgVH0oKTtyQi5wYXJzZXI9ckI7UDBlPXJCfSk7dmFyIG9xZSxwNixGMGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtHdCgpO3ByKCk7eXQoKTtfYSgpO29xZT17REVGQVVMVDowLE5PX0JPUkRFUjowLFJPVU5ERURfUkVDVDoxLFJFQ1Q6MixDSVJDTEU6MyxDTE9VRDo0LEJBTkc6NSxIRVhBR09OOjZ9LHA2PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5ub2Rlcz1bXTt0aGlzLmNvdW50PTA7dGhpcy5lbGVtZW50cz17fTt0aGlzLmdldExvZ2dlcj10aGlzLmdldExvZ2dlci5iaW5kKHRoaXMpLHRoaXMubm9kZVR5cGU9b3FlLHRoaXMuY2xlYXIoKSx0aGlzLmdldFR5cGU9dGhpcy5nZXRUeXBlLmJpbmQodGhpcyksdGhpcy5nZXRNaW5kbWFwPXRoaXMuZ2V0TWluZG1hcC5iaW5kKHRoaXMpLHRoaXMuZ2V0RWxlbWVudEJ5SWQ9dGhpcy5nZXRFbGVtZW50QnlJZC5iaW5kKHRoaXMpLHRoaXMuZ2V0UGFyZW50PXRoaXMuZ2V0UGFyZW50LmJpbmQodGhpcyksdGhpcy5nZXRNaW5kbWFwPXRoaXMuZ2V0TWluZG1hcC5iaW5kKHRoaXMpLHRoaXMuYWRkTm9kZT10aGlzLmFkZE5vZGUuYmluZCh0aGlzKSx0aGlzLmRlY29yYXRlTm9kZT10aGlzLmRlY29yYXRlTm9kZS5iaW5kKHRoaXMpfXN0YXRpY3tvKHRoaXMsIk1pbmRtYXBEQiIpfWNsZWFyKCl7dGhpcy5ub2Rlcz1bXSx0aGlzLmNvdW50PTAsdGhpcy5lbGVtZW50cz17fX1nZXRQYXJlbnQoZSl7Zm9yKGxldCByPXRoaXMubm9kZXMubGVuZ3RoLTE7cj49MDtyLS0paWYodGhpcy5ub2Rlc1tyXS5sZXZlbDxlKXJldHVybiB0aGlzLm5vZGVzW3JdO3JldHVybiBudWxsfWdldE1pbmRtYXAoKXtyZXR1cm4gdGhpcy5ub2Rlcy5sZW5ndGg+MD90aGlzLm5vZGVzWzBdOm51bGx9YWRkTm9kZShlLHIsbixpKXtYLmluZm8oImFkZE5vZGUiLGUscixuLGkpO2xldCBhPW1lKCkscz1hLm1pbmRtYXA/LnBhZGRpbmc/P29yLm1pbmRtYXAucGFkZGluZztzd2l0Y2goaSl7Y2FzZSB0aGlzLm5vZGVUeXBlLlJPVU5ERURfUkVDVDpjYXNlIHRoaXMubm9kZVR5cGUuUkVDVDpjYXNlIHRoaXMubm9kZVR5cGUuSEVYQUdPTjpzKj0yO2JyZWFrfWxldCBsPXtpZDp0aGlzLmNvdW50Kyssbm9kZUlkOndyKHIsYSksbGV2ZWw6ZSxkZXNjcjp3cihuLGEpLHR5cGU6aSxjaGlsZHJlbjpbXSx3aWR0aDphLm1pbmRtYXA/Lm1heE5vZGVXaWR0aD8/b3IubWluZG1hcC5tYXhOb2RlV2lkdGgscGFkZGluZzpzfSx1PXRoaXMuZ2V0UGFyZW50KGUpO2lmKHUpdS5jaGlsZHJlbi5wdXNoKGwpLHRoaXMubm9kZXMucHVzaChsKTtlbHNlIGlmKHRoaXMubm9kZXMubGVuZ3RoPT09MCl0aGlzLm5vZGVzLnB1c2gobCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoYFRoZXJlIGNhbiBiZSBvbmx5IG9uZSByb290LiBObyBwYXJlbnQgY291bGQgYmUgZm91bmQgZm9yICgiJHtsLmRlc2NyfSIpYCl9Z2V0VHlwZShlLHIpe3N3aXRjaChYLmRlYnVnKCJJbiBnZXQgdHlwZSIsZSxyKSxlKXtjYXNlIlsiOnJldHVybiB0aGlzLm5vZGVUeXBlLlJFQ1Q7Y2FzZSIoIjpyZXR1cm4gcj09PSIpIj90aGlzLm5vZGVUeXBlLlJPVU5ERURfUkVDVDp0aGlzLm5vZGVUeXBlLkNMT1VEO2Nhc2UiKCgiOnJldHVybiB0aGlzLm5vZGVUeXBlLkNJUkNMRTtjYXNlIikiOnJldHVybiB0aGlzLm5vZGVUeXBlLkNMT1VEO2Nhc2UiKSkiOnJldHVybiB0aGlzLm5vZGVUeXBlLkJBTkc7Y2FzZSJ7eyI6cmV0dXJuIHRoaXMubm9kZVR5cGUuSEVYQUdPTjtkZWZhdWx0OnJldHVybiB0aGlzLm5vZGVUeXBlLkRFRkFVTFR9fXNldEVsZW1lbnRGb3JJZChlLHIpe3RoaXMuZWxlbWVudHNbZV09cn1nZXRFbGVtZW50QnlJZChlKXtyZXR1cm4gdGhpcy5lbGVtZW50c1tlXX1kZWNvcmF0ZU5vZGUoZSl7aWYoIWUpcmV0dXJuO2xldCByPW1lKCksbj10aGlzLm5vZGVzW3RoaXMubm9kZXMubGVuZ3RoLTFdO2UuaWNvbiYmKG4uaWNvbj13cihlLmljb24scikpLGUuY2xhc3MmJihuLmNsYXNzPXdyKGUuY2xhc3MscikpfXR5cGUyU3RyKGUpe3N3aXRjaChlKXtjYXNlIHRoaXMubm9kZVR5cGUuREVGQVVMVDpyZXR1cm4ibm8tYm9yZGVyIjtjYXNlIHRoaXMubm9kZVR5cGUuUkVDVDpyZXR1cm4icmVjdCI7Y2FzZSB0aGlzLm5vZGVUeXBlLlJPVU5ERURfUkVDVDpyZXR1cm4icm91bmRlZC1yZWN0IjtjYXNlIHRoaXMubm9kZVR5cGUuQ0lSQ0xFOnJldHVybiJjaXJjbGUiO2Nhc2UgdGhpcy5ub2RlVHlwZS5DTE9VRDpyZXR1cm4iY2xvdWQiO2Nhc2UgdGhpcy5ub2RlVHlwZS5CQU5HOnJldHVybiJiYW5nIjtjYXNlIHRoaXMubm9kZVR5cGUuSEVYQUdPTjpyZXR1cm4iaGV4Z29uIjtkZWZhdWx0OnJldHVybiJuby1ib3JkZXIifX1nZXRMb2dnZXIoKXtyZXR1cm4gWH19fSk7ZnVuY3Rpb24gcWkodCl7IkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mIjtyZXR1cm4gcWk9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmdHlwZW9mIFN5bWJvbC5pdGVyYXRvcj09InN5bWJvbCI/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmdHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LHFpKHQpfWZ1bmN0aW9uIFZmKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gJDBlKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLmtleSxuKX19ZnVuY3Rpb24gVWYodCxlLHIpe3JldHVybiBlJiYkMGUodC5wcm90b3R5cGUsZSksciYmJDBlKHQsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH1mdW5jdGlvbiBpZ2UodCxlLHIpe3JldHVybiBlIGluIHQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnRbZV09cix0fWZ1bmN0aW9uIFJpKHQsZSl7cmV0dXJuIGNxZSh0KXx8aHFlKHQsZSl8fFBCKHQsZSl8fGRxZSgpfWZ1bmN0aW9uIGFnZSh0KXtyZXR1cm4gbHFlKHQpfHx1cWUodCl8fFBCKHQpfHxmcWUoKX1mdW5jdGlvbiBscWUodCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4geEIodCl9ZnVuY3Rpb24gY3FlKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHR9ZnVuY3Rpb24gdXFlKHQpe2lmKHR5cGVvZiBTeW1ib2w8InUiJiZ0W1N5bWJvbC5pdGVyYXRvcl0hPW51bGx8fHRbIkBAaXRlcmF0b3IiXSE9bnVsbClyZXR1cm4gQXJyYXkuZnJvbSh0KX1mdW5jdGlvbiBocWUodCxlKXt2YXIgcj10PT1udWxsP251bGw6dHlwZW9mIFN5bWJvbDwidSImJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKHIhPW51bGwpe3ZhciBuPVtdLGk9ITAsYT0hMSxzLGw7dHJ5e2ZvcihyPXIuY2FsbCh0KTshKGk9KHM9ci5uZXh0KCkpLmRvbmUpJiYobi5wdXNoKHMudmFsdWUpLCEoZSYmbi5sZW5ndGg9PT1lKSk7aT0hMCk7fWNhdGNoKHUpe2E9ITAsbD11fWZpbmFsbHl7dHJ5eyFpJiZyLnJldHVybiE9bnVsbCYmci5yZXR1cm4oKX1maW5hbGx5e2lmKGEpdGhyb3cgbH19cmV0dXJuIG59fWZ1bmN0aW9uIFBCKHQsZSl7aWYodCl7aWYodHlwZW9mIHQ9PSJzdHJpbmciKXJldHVybiB4Qih0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtpZihyPT09Ik9iamVjdCImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSkscj09PSJNYXAifHxyPT09IlNldCIpcmV0dXJuIEFycmF5LmZyb20odCk7aWYocj09PSJBcmd1bWVudHMifHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKSlyZXR1cm4geEIodCxlKX19ZnVuY3Rpb24geEIodCxlKXsoZT09bnVsbHx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheShlKTtyPGU7cisrKW5bcl09dFtyXTtyZXR1cm4gbn1mdW5jdGlvbiBmcWUoKXt0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS4KSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLmApfWZ1bmN0aW9uIGRxZSgpe3Rocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuCkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5gKX1mdW5jdGlvbiB2byh0LGUpe3ZhciByPXR5cGVvZiBTeW1ib2w8InUiJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheSh0KXx8KHI9UEIodCkpfHxlJiZ0JiZ0eXBlb2YgdC5sZW5ndGg9PSJudW1iZXIiKXtyJiYodD1yKTt2YXIgbj0wLGk9byhmdW5jdGlvbigpe30sIkYiKTtyZXR1cm57czppLG46byhmdW5jdGlvbigpe3JldHVybiBuPj10Lmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6dFtuKytdfX0sIm4iKSxlOm8oZnVuY3Rpb24odSl7dGhyb3cgdX0sImUiKSxmOml9fXRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS4KSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLmApfXZhciBhPSEwLHM9ITEsbDtyZXR1cm57czpvKGZ1bmN0aW9uKCl7cj1yLmNhbGwodCl9LCJzIiksbjpvKGZ1bmN0aW9uKCl7dmFyIHU9ci5uZXh0KCk7cmV0dXJuIGE9dS5kb25lLHV9LCJuIiksZTpvKGZ1bmN0aW9uKHUpe3M9ITAsbD11fSwiZSIpLGY6byhmdW5jdGlvbigpe3RyeXshYSYmci5yZXR1cm4hPW51bGwmJnIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGx9fSwiZiIpfX1mdW5jdGlvbiBQcWUodCl7dmFyIGU9dHlwZW9mIHQ7cmV0dXJuIHQhPW51bGwmJihlPT0ib2JqZWN0Inx8ZT09ImZ1bmN0aW9uIil9ZnVuY3Rpb24gQnFlKHQsZSl7cmV0dXJuIGU9e2V4cG9ydHM6e319LHQoZSxlLmV4cG9ydHMpLGUuZXhwb3J0c31mdW5jdGlvbiBIcWUodCl7Zm9yKHZhciBlPXQubGVuZ3RoO2UtLSYmVXFlLnRlc3QodC5jaGFyQXQoZSkpOyk7cmV0dXJuIGV9ZnVuY3Rpb24gWXFlKHQpe3JldHVybiB0JiZ0LnNsaWNlKDAsV3FlKHQpKzEpLnJlcGxhY2UocXFlLCIiKX1mdW5jdGlvbiBacWUodCl7dmFyIGU9S3FlLmNhbGwodCxGYikscj10W0ZiXTt0cnl7dFtGYl09dm9pZCAwO3ZhciBuPSEwfWNhdGNoe312YXIgaT1RcWUuY2FsbCh0KTtyZXR1cm4gbiYmKGU/dFtGYl09cjpkZWxldGUgdFtGYl0pLGl9ZnVuY3Rpb24gclllKHQpe3JldHVybiB0WWUuY2FsbCh0KX1mdW5jdGlvbiBzWWUodCl7cmV0dXJuIHQ9PW51bGw/dD09PXZvaWQgMD9hWWU6aVllOlYwZSYmVjBlIGluIE9iamVjdCh0KT9KcWUodCk6blllKHQpfWZ1bmN0aW9uIG9ZZSh0KXtyZXR1cm4gdCE9bnVsbCYmdHlwZW9mIHQ9PSJvYmplY3QifWZ1bmN0aW9uIHVZZSh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJzeW1ib2wifHxsWWUodCkmJm1nZSh0KT09Y1llfWZ1bmN0aW9uIG1ZZSh0KXtpZih0eXBlb2YgdD09Im51bWJlciIpcmV0dXJuIHQ7aWYoZDQodCkpcmV0dXJuIFUwZTtpZihLcCh0KSl7dmFyIGU9dHlwZW9mIHQudmFsdWVPZj09ImZ1bmN0aW9uIj90LnZhbHVlT2YoKTp0O3Q9S3AoZSk/ZSsiIjplfWlmKHR5cGVvZiB0IT0ic3RyaW5nIilyZXR1cm4gdD09PTA/dDordDt0PVhxZSh0KTt2YXIgcj1mWWUudGVzdCh0KTtyZXR1cm4gcnx8ZFllLnRlc3QodCk/cFllKHQuc2xpY2UoMikscj8yOjgpOmhZZS50ZXN0KHQpP1UwZTordH1mdW5jdGlvbiB4WWUodCxlLHIpe3ZhciBuLGksYSxzLGwsdSxoPTAsZj0hMSxkPSExLHA9ITA7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcihnWWUpO2U9SDBlKGUpfHwwLEtwKHIpJiYoZj0hIXIubGVhZGluZyxkPSJtYXhXYWl0ImluIHIsYT1kP3lZZShIMGUoci5tYXhXYWl0KXx8MCxlKTphLHA9InRyYWlsaW5nImluIHI/ISFyLnRyYWlsaW5nOnApO2Z1bmN0aW9uIG0oRSl7dmFyIF89bixDPWk7cmV0dXJuIG49aT12b2lkIDAsaD1FLHM9dC5hcHBseShDLF8pLHN9byhtLCJpbnZva2VGdW5jIik7ZnVuY3Rpb24gZyhFKXtyZXR1cm4gaD1FLGw9c2V0VGltZW91dCh4LGUpLGY/bShFKTpzfW8oZywibGVhZGluZ0VkZ2UiKTtmdW5jdGlvbiB5KEUpe3ZhciBfPUUtdSxDPUUtaCxEPWUtXztyZXR1cm4gZD92WWUoRCxhLUMpOkR9byh5LCJyZW1haW5pbmdXYWl0Iik7ZnVuY3Rpb24gdihFKXt2YXIgXz1FLXUsQz1FLWg7cmV0dXJuIHU9PT12b2lkIDB8fF8+PWV8fF88MHx8ZCYmQz49YX1vKHYsInNob3VsZEludm9rZSIpO2Z1bmN0aW9uIHgoKXt2YXIgRT1uQigpO2lmKHYoRSkpcmV0dXJuIGIoRSk7bD1zZXRUaW1lb3V0KHgseShFKSl9byh4LCJ0aW1lckV4cGlyZWQiKTtmdW5jdGlvbiBiKEUpe3JldHVybiBsPXZvaWQgMCxwJiZuP20oRSk6KG49aT12b2lkIDAscyl9byhiLCJ0cmFpbGluZ0VkZ2UiKTtmdW5jdGlvbiBUKCl7bCE9PXZvaWQgMCYmY2xlYXJUaW1lb3V0KGwpLGg9MCxuPXU9aT1sPXZvaWQgMH1vKFQsImNhbmNlbCIpO2Z1bmN0aW9uIFMoKXtyZXR1cm4gbD09PXZvaWQgMD9zOmIobkIoKSl9byhTLCJmbHVzaCIpO2Z1bmN0aW9uIHcoKXt2YXIgRT1uQigpLF89dihFKTtpZihuPWFyZ3VtZW50cyxpPXRoaXMsdT1FLF8pe2lmKGw9PT12b2lkIDApcmV0dXJuIGcodSk7aWYoZClyZXR1cm4gY2xlYXJUaW1lb3V0KGwpLGw9c2V0VGltZW91dCh4LGUpLG0odSl9cmV0dXJuIGw9PT12b2lkIDAmJihsPXNldFRpbWVvdXQoeCxlKSksc31yZXR1cm4gbyh3LCJkZWJvdW5jZWQiKSx3LmNhbmNlbD1ULHcuZmx1c2g9Uyx3fWZ1bmN0aW9uIGVDKHQsZSxyLG4saSxhKXt2YXIgcztyZXR1cm4gbGkodCk/cz10OnM9bnlbdF18fG55LmV1Y2xpZGVhbixlPT09MCYmbGkodCk/cyhpLGEpOnMoZSxyLG4saSxhKX1mdW5jdGlvbiBoamUodCxlKXtpZih0Qyh0KSlyZXR1cm4hMTt2YXIgcj10eXBlb2YgdDtyZXR1cm4gcj09Im51bWJlciJ8fHI9PSJzeW1ib2wifHxyPT0iYm9vbGVhbiJ8fHQ9PW51bGx8fGQ0KHQpPyEwOnVqZS50ZXN0KHQpfHwhY2plLnRlc3QodCl8fGUhPW51bGwmJnQgaW4gT2JqZWN0KGUpfWZ1bmN0aW9uIHlqZSh0KXtpZighS3AodCkpcmV0dXJuITE7dmFyIGU9bWdlKHQpO3JldHVybiBlPT1wamV8fGU9PW1qZXx8ZT09ZGplfHxlPT1namV9ZnVuY3Rpb24gYmplKHQpe3JldHVybiEhdW1lJiZ1bWUgaW4gdH1mdW5jdGlvbiBFamUodCl7aWYodCE9bnVsbCl7dHJ5e3JldHVybiBramUuY2FsbCh0KX1jYXRjaHt9dHJ5e3JldHVybiB0KyIifWNhdGNoe319cmV0dXJuIiJ9ZnVuY3Rpb24gTWplKHQpe2lmKCFLcCh0KXx8VGplKHQpKXJldHVybiExO3ZhciBlPXZqZSh0KT9OamU6QWplO3JldHVybiBlLnRlc3QoU2plKHQpKX1mdW5jdGlvbiBPamUodCxlKXtyZXR1cm4gdD8uW2VdfWZ1bmN0aW9uIEJqZSh0LGUpe3ZhciByPVBqZSh0LGUpO3JldHVybiBJamUocik/cjp2b2lkIDB9ZnVuY3Rpb24gJGplKCl7dGhpcy5fX2RhdGFfXz1zND9zNChudWxsKTp7fSx0aGlzLnNpemU9MH1mdW5jdGlvbiBHamUodCl7dmFyIGU9dGhpcy5oYXModCkmJmRlbGV0ZSB0aGlzLl9fZGF0YV9fW3RdO3JldHVybiB0aGlzLnNpemUtPWU/MTowLGV9ZnVuY3Rpb24gcWplKHQpe3ZhciBlPXRoaXMuX19kYXRhX187aWYoczQpe3ZhciByPWVbdF07cmV0dXJuIHI9PT1VamU/dm9pZCAwOnJ9cmV0dXJuIFdqZS5jYWxsKGUsdCk/ZVt0XTp2b2lkIDB9ZnVuY3Rpb24gS2plKHQpe3ZhciBlPXRoaXMuX19kYXRhX187cmV0dXJuIHM0P2VbdF0hPT12b2lkIDA6amplLmNhbGwoZSx0KX1mdW5jdGlvbiBKamUodCxlKXt2YXIgcj10aGlzLl9fZGF0YV9fO3JldHVybiB0aGlzLnNpemUrPXRoaXMuaGFzKHQpPzA6MSxyW3RdPXM0JiZlPT09dm9pZCAwP1pqZTplLHRoaXN9ZnVuY3Rpb24gb3kodCl7dmFyIGU9LTEscj10PT1udWxsPzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2U8cjspe3ZhciBuPXRbZV07dGhpcy5zZXQoblswXSxuWzFdKX19ZnVuY3Rpb24gdEtlKCl7dGhpcy5fX2RhdGFfXz1bXSx0aGlzLnNpemU9MH1mdW5jdGlvbiBuS2UodCxlKXtyZXR1cm4gdD09PWV8fHQhPT10JiZlIT09ZX1mdW5jdGlvbiBpS2UodCxlKXtmb3IodmFyIHI9dC5sZW5ndGg7ci0tOylpZih6Z2UodFtyXVswXSxlKSlyZXR1cm4gcjtyZXR1cm4tMX1mdW5jdGlvbiBvS2UodCl7dmFyIGU9dGhpcy5fX2RhdGFfXyxyPXJDKGUsdCk7aWYocjwwKXJldHVybiExO3ZhciBuPWUubGVuZ3RoLTE7cmV0dXJuIHI9PW4/ZS5wb3AoKTpzS2UuY2FsbChlLHIsMSksLS10aGlzLnNpemUsITB9ZnVuY3Rpb24gY0tlKHQpe3ZhciBlPXRoaXMuX19kYXRhX18scj1yQyhlLHQpO3JldHVybiByPDA/dm9pZCAwOmVbcl1bMV19ZnVuY3Rpb24gaEtlKHQpe3JldHVybiByQyh0aGlzLl9fZGF0YV9fLHQpPi0xfWZ1bmN0aW9uIGRLZSh0LGUpe3ZhciByPXRoaXMuX19kYXRhX18sbj1yQyhyLHQpO3JldHVybiBuPDA/KCsrdGhpcy5zaXplLHIucHVzaChbdCxlXSkpOnJbbl1bMV09ZSx0aGlzfWZ1bmN0aW9uIGx5KHQpe3ZhciBlPS0xLHI9dD09bnVsbD8wOnQubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytlPHI7KXt2YXIgbj10W2VdO3RoaXMuc2V0KG5bMF0sblsxXSl9fWZ1bmN0aW9uIHZLZSgpe3RoaXMuc2l6ZT0wLHRoaXMuX19kYXRhX189e2hhc2g6bmV3IGhtZSxtYXA6bmV3KHlLZXx8bUtlKSxzdHJpbmc6bmV3IGhtZX19ZnVuY3Rpb24gYktlKHQpe3ZhciBlPXR5cGVvZiB0O3JldHVybiBlPT0ic3RyaW5nInx8ZT09Im51bWJlciJ8fGU9PSJzeW1ib2wifHxlPT0iYm9vbGVhbiI/dCE9PSJfX3Byb3RvX18iOnQ9PT1udWxsfWZ1bmN0aW9uIHdLZSh0LGUpe3ZhciByPXQuX19kYXRhX187cmV0dXJuIFRLZShlKT9yW3R5cGVvZiBlPT0ic3RyaW5nIj8ic3RyaW5nIjoiaGFzaCJdOnIubWFwfWZ1bmN0aW9uIGtLZSh0KXt2YXIgZT1uQyh0aGlzLHQpLmRlbGV0ZSh0KTtyZXR1cm4gdGhpcy5zaXplLT1lPzE6MCxlfWZ1bmN0aW9uIFNLZSh0KXtyZXR1cm4gbkModGhpcyx0KS5nZXQodCl9ZnVuY3Rpb24gQUtlKHQpe3JldHVybiBuQyh0aGlzLHQpLmhhcyh0KX1mdW5jdGlvbiBES2UodCxlKXt2YXIgcj1uQyh0aGlzLHQpLG49ci5zaXplO3JldHVybiByLnNldCh0LGUpLHRoaXMuc2l6ZSs9ci5zaXplPT1uPzA6MSx0aGlzfWZ1bmN0aW9uIGN5KHQpe3ZhciBlPS0xLHI9dD09bnVsbD8wOnQubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytlPHI7KXt2YXIgbj10W2VdO3RoaXMuc2V0KG5bMF0sblsxXSl9fWZ1bmN0aW9uIFlCKHQsZSl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiJ8fGUhPW51bGwmJnR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoUktlKTt2YXIgcj1vKGZ1bmN0aW9uKCl7dmFyIG49YXJndW1lbnRzLGk9ZT9lLmFwcGx5KHRoaXMsbik6blswXSxhPXIuY2FjaGU7aWYoYS5oYXMoaSkpcmV0dXJuIGEuZ2V0KGkpO3ZhciBzPXQuYXBwbHkodGhpcyxuKTtyZXR1cm4gci5jYWNoZT1hLnNldChpLHMpfHxhLHN9LCJtZW1vaXplZCIpO3JldHVybiByLmNhY2hlPW5ldyhZQi5DYWNoZXx8R2dlKSxyfWZ1bmN0aW9uIElLZSh0KXt2YXIgZT1OS2UodCxmdW5jdGlvbihuKXtyZXR1cm4gci5zaXplPT09TUtlJiZyLmNsZWFyKCksbn0pLHI9ZS5jYWNoZTtyZXR1cm4gZX1mdW5jdGlvbiAkS2UodCxlKXtmb3IodmFyIHI9LTEsbj10PT1udWxsPzA6dC5sZW5ndGgsaT1BcnJheShuKTsrK3I8bjspaVtyXT1lKHRbcl0scix0KTtyZXR1cm4gaX1mdW5jdGlvbiBIZ2UodCl7aWYodHlwZW9mIHQ9PSJzdHJpbmciKXJldHVybiB0O2lmKHRDKHQpKXJldHVybiBVZ2UodCxIZ2UpKyIiO2lmKGQ0KHQpKXJldHVybiBkbWU/ZG1lLmNhbGwodCk6IiI7dmFyIGU9dCsiIjtyZXR1cm4gZT09IjAiJiYxL3Q9PS16S2U/Ii0wIjplfWZ1bmN0aW9uIFZLZSh0KXtyZXR1cm4gdD09bnVsbD8iIjpHS2UodCl9ZnVuY3Rpb24gVUtlKHQsZSl7cmV0dXJuIHRDKHQpP3Q6ZmplKHQsZSk/W3RdOlZnZShXZ2UodCkpfWZ1bmN0aW9uIFdLZSh0KXtpZih0eXBlb2YgdD09InN0cmluZyJ8fGQ0KHQpKXJldHVybiB0O3ZhciBlPXQrIiI7cmV0dXJuIGU9PSIwIiYmMS90PT0tSEtlPyItMCI6ZX1mdW5jdGlvbiBxS2UodCxlKXtlPXFnZShlLHQpO2Zvcih2YXIgcj0wLG49ZS5sZW5ndGg7dCE9bnVsbCYmcjxuOyl0PXRbWEIoZVtyKytdKV07cmV0dXJuIHImJnI9PW4/dDp2b2lkIDB9ZnVuY3Rpb24gWEtlKHQsZSxyKXt2YXIgbj10PT1udWxsP3ZvaWQgMDpZS2UodCxlKTtyZXR1cm4gbj09PXZvaWQgMD9yOm59ZnVuY3Rpb24gUUtlKHQsZSxyKXtlPT0iX19wcm90b19fIiYmcG1lP3BtZSh0LGUse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOnIsd3JpdGFibGU6ITB9KTp0W2VdPXJ9ZnVuY3Rpb24gdFFlKHQsZSxyKXt2YXIgbj10W2VdOyghKGVRZS5jYWxsKHQsZSkmJnpnZShuLHIpKXx8cj09PXZvaWQgMCYmIShlIGluIHQpKSYmWktlKHQsZSxyKX1mdW5jdGlvbiBhUWUodCxlKXt2YXIgcj10eXBlb2YgdDtyZXR1cm4gZT1lPz9uUWUsISFlJiYocj09Im51bWJlciJ8fHIhPSJzeW1ib2wiJiZpUWUudGVzdCh0KSkmJnQ+LTEmJnQlMT09MCYmdDxlfWZ1bmN0aW9uIG9RZSh0LGUscixuKXtpZighS3AodCkpcmV0dXJuIHQ7ZT1xZ2UoZSx0KTtmb3IodmFyIGk9LTEsYT1lLmxlbmd0aCxzPWEtMSxsPXQ7bCE9bnVsbCYmKytpPGE7KXt2YXIgdT1YQihlW2ldKSxoPXI7aWYodT09PSJfX3Byb3RvX18ifHx1PT09ImNvbnN0cnVjdG9yInx8dT09PSJwcm90b3R5cGUiKXJldHVybiB0O2lmKGkhPXMpe3ZhciBmPWxbdV07aD1uP24oZix1LGwpOnZvaWQgMCxoPT09dm9pZCAwJiYoaD1LcChmKT9mOnNRZShlW2krMV0pP1tdOnt9KX1yUWUobCx1LGgpLGw9bFt1XX1yZXR1cm4gdH1mdW5jdGlvbiBjUWUodCxlLHIpe3JldHVybiB0PT1udWxsP3Q6bFFlKHQsZSxyKX1mdW5jdGlvbiBoUWUodCxlKXt2YXIgcj0tMSxuPXQubGVuZ3RoO2ZvcihlfHwoZT1BcnJheShuKSk7KytyPG47KWVbcl09dFtyXTtyZXR1cm4gZX1mdW5jdGlvbiBkUWUodCl7cmV0dXJuIHRDKHQpP1VnZSh0LFhCKTpkNCh0KT9bdF06ZlFlKFZnZShXZ2UodCkpKX1mdW5jdGlvbiBLQih0LGUscixuKXtmb3IodmFyIGk9W10sYT1uZXcgYXkscz10LmN5KCksbD1zLmhhc0NvbXBvdW5kTm9kZXMoKSx1PTA7dTx0Lmxlbmd0aDt1Kyspe3ZhciBoPXRbdV07cj9pLnB1c2goaCk6bCYmbihpLGEsaCl9Zm9yKDtpLmxlbmd0aD4wOyl7dmFyIGY9aS5zaGlmdCgpO2UoZiksYS5hZGQoZi5pZCgpKSxsJiZuKGksYSxmKX1yZXR1cm4gdH1mdW5jdGlvbiBYZ2UodCxlLHIpe2lmKHIuaXNQYXJlbnQoKSlmb3IodmFyIG49ci5fcHJpdmF0ZS5jaGlsZHJlbixpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciBhPW5baV07ZS5oYXMoYS5pZCgpKXx8dC5wdXNoKGEpfX1mdW5jdGlvbiBqZ2UodCxlLHIpe2lmKHIuaXNDaGlsZCgpKXt2YXIgbj1yLl9wcml2YXRlLnBhcmVudDtlLmhhcyhuLmlkKCkpfHx0LnB1c2gobil9fWZ1bmN0aW9uIE5RZSh0LGUscil7amdlKHQsZSxyKSxYZ2UodCxlLHIpfWZ1bmN0aW9uIGNCKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj10aGlzO2lmKGU9PT12b2lkIDAmJihlPSEwKSxyLmxlbmd0aCE9PTApaWYoci5pc05vZGUoKSYmIXIucmVtb3ZlZCgpKXtmb3IodmFyIG49MCxpPXJbMF0sYT1pLl9wcml2YXRlLmVkZ2VzLHM9MDtzPGEubGVuZ3RoO3MrKyl7dmFyIGw9YVtzXTshZSYmbC5pc0xvb3AoKXx8KG4rPXQoaSxsKSl9cmV0dXJuIG59ZWxzZSByZXR1cm59fWZ1bmN0aW9uIEgxKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe2Zvcih2YXIgbixpPXRoaXMubm9kZXMoKSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBzPWlbYV0sbD1zW3RdKHIpO2whPT12b2lkIDAmJihuPT09dm9pZCAwfHxlKGwsbikpJiYobj1sKX1yZXR1cm4gbn19ZnVuY3Rpb24gR2IoKXtyZXR1cm4hMX1mdW5jdGlvbiB3Nigpe3JldHVybiEwfWZ1bmN0aW9uIGFDKCl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTpRUWUsZT1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxyPTA7cjxibWUubGVuZ3RoO3IrKyl7dmFyIG49Ym1lW3JdO3RoaXNbbl09dFtuXXx8aTFlW25dfXRoaXMuY29udGV4dD1lfHx0aGlzLmNvbnRleHQsdGhpcy5saXN0ZW5lcnM9W10sdGhpcy5lbWl0dGluZz0wfWZ1bmN0aW9uIGMxZSh0LGUscil7dmFyIG49ci5fcHJpdmF0ZSxpPW4uc3R5bGVDYWNoZT1uLnN0eWxlQ2FjaGV8fFtdLGE7cmV0dXJuKGE9aVt0XSkhPW51bGx8fChhPWlbdF09ZShyKSksYX1mdW5jdGlvbiBzQyh0LGUpe3JldHVybiB0PUJmKHQpLG8oZnVuY3Rpb24obil7cmV0dXJuIGMxZSh0LGUsbil9LCJjYWNoZWRTdHlsZUZ1bmN0aW9uIil9ZnVuY3Rpb24gb0ModCxlKXt0PUJmKHQpO3ZhciByPW8oZnVuY3Rpb24oaSl7cmV0dXJuIGUuY2FsbChpKX0sInNlbGZGbiIpO3JldHVybiBvKGZ1bmN0aW9uKCl7dmFyIGk9dGhpc1swXTtpZihpKXJldHVybiBjMWUodCxyLGkpfSwiY2FjaGVkUHJvdG90eXBlU3R5bGVGdW5jdGlvbiIpfWZ1bmN0aW9uIGhCKHQsZSl7dmFyIHI9dC5fcHJpdmF0ZSxuPXIuZGF0YS5wYXJlbnQ/dC5wYXJlbnRzKCk6bnVsbDtpZihuKWZvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgYT1uW2ldO2lmKCFlKGEpKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIFFCKHQpe3ZhciBlPXQub2sscj10LmVkZ2VPa1ZpYU5vZGV8fHQub2ssbj10LnBhcmVudE9rfHx0Lm9rO3JldHVybiBmdW5jdGlvbigpe3ZhciBpPXRoaXMuY3koKTtpZighaS5zdHlsZUVuYWJsZWQoKSlyZXR1cm4hMDt2YXIgYT10aGlzWzBdLHM9aS5oYXNDb21wb3VuZE5vZGVzKCk7aWYoYSl7dmFyIGw9YS5fcHJpdmF0ZTtpZighZShhKSlyZXR1cm4hMTtpZihhLmlzTm9kZSgpKXJldHVybiFzfHxoQihhLG4pO3ZhciB1PWwuc291cmNlLGg9bC50YXJnZXQ7cmV0dXJuIHIodSkmJighc3x8aEIodSxyKSkmJih1PT09aHx8cihoKSYmKCFzfHxoQihoLHIpKSl9fX1mdW5jdGlvbiB3bWUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLHI9W107aWYoZS5sZW5ndGg9PT0yKXt2YXIgbj1lWzBdLGk9ZVsxXTt0aGlzLm9uKHQuZXZlbnQsbixpKX1lbHNlIGlmKGUubGVuZ3RoPT09MSYmbGkoZVswXSkpe3ZhciBhPWVbMF07dGhpcy5vbih0LmV2ZW50LGEpfWVsc2UgaWYoZS5sZW5ndGg9PT0wfHxlLmxlbmd0aD09PTEmJkVuKGVbMF0pKXtmb3IodmFyIHM9ZS5sZW5ndGg9PT0xP2VbMF06bnVsbCxsPTA7bDx0aGlzLmxlbmd0aDtsKyspe3ZhciB1PXRoaXNbbF0saD0hdC5hYmxlRmllbGR8fHUuX3ByaXZhdGVbdC5hYmxlRmllbGRdLGY9dS5fcHJpdmF0ZVt0LmZpZWxkXSE9dC52YWx1ZTtpZih0Lm92ZXJyaWRlQWJsZSl7dmFyIGQ9dC5vdmVycmlkZUFibGUodSk7aWYoZCE9PXZvaWQgMCYmKGg9ZCwhZCkpcmV0dXJuIHRoaXN9aCYmKHUuX3ByaXZhdGVbdC5maWVsZF09dC52YWx1ZSxmJiZyLnB1c2godSkpfXZhciBwPXRoaXMuc3Bhd24ocik7cC51cGRhdGVTdHlsZSgpLHAuZW1pdCh0LmV2ZW50KSxzJiZwLmVtaXQocyl9cmV0dXJuIHRoaXN9fWZ1bmN0aW9uIGh5KHQpe09mW3QuZmllbGRdPWZ1bmN0aW9uKCl7dmFyIGU9dGhpc1swXTtpZihlKXtpZih0Lm92ZXJyaWRlRmllbGQpe3ZhciByPXQub3ZlcnJpZGVGaWVsZChlKTtpZihyIT09dm9pZCAwKXJldHVybiByfXJldHVybiBlLl9wcml2YXRlW3QuZmllbGRdfX0sT2ZbdC5vbl09d21lKHtldmVudDp0Lm9uLGZpZWxkOnQuZmllbGQsYWJsZUZpZWxkOnQuYWJsZUZpZWxkLG92ZXJyaWRlQWJsZTp0Lm92ZXJyaWRlQWJsZSx2YWx1ZTohMH0pLE9mW3Qub2ZmXT13bWUoe2V2ZW50OnQub2ZmLGZpZWxkOnQuZmllbGQsYWJsZUZpZWxkOnQuYWJsZUZpZWxkLG92ZXJyaWRlQWJsZTp0Lm92ZXJyaWRlQWJsZSx2YWx1ZTohMX0pfWZ1bmN0aW9uIENtZSh0KXtyZXR1cm4gbyhmdW5jdGlvbihyKXtmb3IodmFyIG49W10saT0wO2k8dGhpcy5sZW5ndGg7aSsrKXt2YXIgYT10aGlzW2ldLHM9YS5fcHJpdmF0ZVt0LmF0dHJdO3MmJm4ucHVzaChzKX1yZXR1cm4gdGhpcy5zcGF3bihuLCEwKS5maWx0ZXIocil9LCJzb3VyY2VJbXBsIil9ZnVuY3Rpb24gQW1lKHQpe3JldHVybiBvKGZ1bmN0aW9uKHIpe3ZhciBuPVtdLGk9dGhpcy5fcHJpdmF0ZS5jeSxhPXR8fHt9O1p0KHIpJiYocj1pLiQocikpO2Zvcih2YXIgcz0wO3M8ci5sZW5ndGg7cysrKWZvcih2YXIgbD1yW3NdLl9wcml2YXRlLmVkZ2VzLHU9MDt1PGwubGVuZ3RoO3UrKyl7dmFyIGg9bFt1XSxmPWguX3ByaXZhdGUuZGF0YSxkPXRoaXMuaGFzRWxlbWVudFdpdGhJZChmLnNvdXJjZSkmJnIuaGFzRWxlbWVudFdpdGhJZChmLnRhcmdldCkscD1yLmhhc0VsZW1lbnRXaXRoSWQoZi5zb3VyY2UpJiZ0aGlzLmhhc0VsZW1lbnRXaXRoSWQoZi50YXJnZXQpLG09ZHx8cDttJiYoKGEudGhpc0lzU3JjfHxhLnRoaXNJc1RndCkmJihhLnRoaXNJc1NyYyYmIWR8fGEudGhpc0lzVGd0JiYhcCl8fG4ucHVzaChoKSl9cmV0dXJuIHRoaXMuc3Bhd24obiwhMCl9LCJlZGdlc1dpdGhJbXBsIil9ZnVuY3Rpb24gX21lKHQpe3ZhciBlPXtjb2RpcmVjdGVkOiExfTtyZXR1cm4gdD1pcih7fSxlLHQpLG8oZnVuY3Rpb24obil7Zm9yKHZhciBpPVtdLGE9dGhpcy5lZGdlcygpLHM9dCxsPTA7bDxhLmxlbmd0aDtsKyspZm9yKHZhciB1PWFbbF0saD11Ll9wcml2YXRlLGY9aC5zb3VyY2UsZD1mLl9wcml2YXRlLmRhdGEuaWQscD1oLmRhdGEudGFyZ2V0LG09Zi5fcHJpdmF0ZS5lZGdlcyxnPTA7ZzxtLmxlbmd0aDtnKyspe3ZhciB5PW1bZ10sdj15Ll9wcml2YXRlLmRhdGEseD12LnRhcmdldCxiPXYuc291cmNlLFQ9eD09PXAmJmI9PT1kLFM9ZD09PXgmJnA9PT1iOyhzLmNvZGlyZWN0ZWQmJlR8fCFzLmNvZGlyZWN0ZWQmJihUfHxTKSkmJmkucHVzaCh5KX1yZXR1cm4gdGhpcy5zcGF3bihpLCEwKS5maWx0ZXIobil9LCJwYXJhbGxlbEVkZ2VzSW1wbCIpfWZ1bmN0aW9uIGxaZSh0LGUscixuKXt2YXIgaT00LGE9LjAwMSxzPTFlLTcsbD0xMCx1PTExLGg9MS8odS0xKSxmPXR5cGVvZiBGbG9hdDMyQXJyYXk8InUiO2lmKGFyZ3VtZW50cy5sZW5ndGghPT00KXJldHVybiExO2Zvcih2YXIgZD0wO2Q8NDsrK2QpaWYodHlwZW9mIGFyZ3VtZW50c1tkXSE9Im51bWJlciJ8fGlzTmFOKGFyZ3VtZW50c1tkXSl8fCFpc0Zpbml0ZShhcmd1bWVudHNbZF0pKXJldHVybiExO3Q9TWF0aC5taW4odCwxKSxyPU1hdGgubWluKHIsMSksdD1NYXRoLm1heCh0LDApLHI9TWF0aC5tYXgociwwKTt2YXIgcD1mP25ldyBGbG9hdDMyQXJyYXkodSk6bmV3IEFycmF5KHUpO2Z1bmN0aW9uIG0oTyxSKXtyZXR1cm4gMS0zKlIrMypPfW8obSwiQSIpO2Z1bmN0aW9uIGcoTyxSKXtyZXR1cm4gMypSLTYqT31vKGcsIkIiKTtmdW5jdGlvbiB5KE8pe3JldHVybiAzKk99byh5LCJDIik7ZnVuY3Rpb24gdihPLFIsayl7cmV0dXJuKChtKFIsaykqTytnKFIsaykpKk8reShSKSkqT31vKHYsImNhbGNCZXppZXIiKTtmdW5jdGlvbiB4KE8sUixrKXtyZXR1cm4gMyptKFIsaykqTypPKzIqZyhSLGspKk8reShSKX1vKHgsImdldFNsb3BlIik7ZnVuY3Rpb24gYihPLFIpe2Zvcih2YXIgaz0wO2s8aTsrK2spe3ZhciBMPXgoUix0LHIpO2lmKEw9PT0wKXJldHVybiBSO3ZhciBBPXYoUix0LHIpLU87Ui09QS9MfXJldHVybiBSfW8oYiwibmV3dG9uUmFwaHNvbkl0ZXJhdGUiKTtmdW5jdGlvbiBUKCl7Zm9yKHZhciBPPTA7Tzx1OysrTylwW09dPXYoTypoLHQscil9byhULCJjYWxjU2FtcGxlVmFsdWVzIik7ZnVuY3Rpb24gUyhPLFIsayl7dmFyIEwsQSxJPTA7ZG8gQT1SKyhrLVIpLzIsTD12KEEsdCxyKS1PLEw+MD9rPUE6Uj1BO3doaWxlKE1hdGguYWJzKEwpPnMmJisrSTxsKTtyZXR1cm4gQX1vKFMsImJpbmFyeVN1YmRpdmlkZSIpO2Z1bmN0aW9uIHcoTyl7Zm9yKHZhciBSPTAsaz0xLEw9dS0xO2shPT1MJiZwW2tdPD1POysraylSKz1oOy0tazt2YXIgQT0oTy1wW2tdKS8ocFtrKzFdLXBba10pLEk9UitBKmgsTT14KEksdCxyKTtyZXR1cm4gTT49YT9iKE8sSSk6TT09PTA/STpTKE8sUixSK2gpfW8odywiZ2V0VEZvclgiKTt2YXIgRT0hMTtmdW5jdGlvbiBfKCl7RT0hMCwodCE9PWV8fHIhPT1uKSYmVCgpfW8oXywicHJlY29tcHV0ZSIpO3ZhciBDPW8oZnVuY3Rpb24oUil7cmV0dXJuIEV8fF8oKSx0PT09ZSYmcj09PW4/UjpSPT09MD8wOlI9PT0xPzE6dih3KFIpLGUsbil9LCJmIik7Qy5nZXRDb250cm9sUG9pbnRzPWZ1bmN0aW9uKCl7cmV0dXJuW3t4OnQseTplfSx7eDpyLHk6bn1dfTt2YXIgRD0iZ2VuZXJhdGVCZXppZXIoIitbdCxlLHIsbl0rIikiO3JldHVybiBDLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIER9LEN9ZnVuY3Rpb24gRG1lKHQsZSxyLG4saSl7aWYobj09PTF8fGU9PT1yKXJldHVybiByO3ZhciBhPWkoZSxyLG4pO3JldHVybiB0PT1udWxsfHwoKHQucm91bmRWYWx1ZXx8dC5jb2xvcikmJihhPU1hdGgucm91bmQoYSkpLHQubWluIT09dm9pZCAwJiYoYT1NYXRoLm1heChhLHQubWluKSksdC5tYXghPT12b2lkIDAmJihhPU1hdGgubWluKGEsdC5tYXgpKSksYX1mdW5jdGlvbiBMbWUodCxlKXtyZXR1cm4gdC5wZlZhbHVlIT1udWxsfHx0LnZhbHVlIT1udWxsP3QucGZWYWx1ZSE9bnVsbCYmKGU9PW51bGx8fGUudHlwZS51bml0cyE9PSIlIik/dC5wZlZhbHVlOnQudmFsdWU6dH1mdW5jdGlvbiBXMSh0LGUscixuLGkpe3ZhciBhPWkhPW51bGw/aS50eXBlOm51bGw7cjwwP3I9MDpyPjEmJihyPTEpO3ZhciBzPUxtZSh0LGkpLGw9TG1lKGUsaSk7aWYoX3QocykmJl90KGwpKXJldHVybiBEbWUoYSxzLGwscixuKTtpZihFbihzKSYmRW4obCkpe2Zvcih2YXIgdT1bXSxoPTA7aDxsLmxlbmd0aDtoKyspe3ZhciBmPXNbaF0sZD1sW2hdO2lmKGYhPW51bGwmJmQhPW51bGwpe3ZhciBwPURtZShhLGYsZCxyLG4pO3UucHVzaChwKX1lbHNlIHUucHVzaChkKX1yZXR1cm4gdX19ZnVuY3Rpb24gdVplKHQsZSxyLG4pe3ZhciBpPSFuLGE9dC5fcHJpdmF0ZSxzPWUuX3ByaXZhdGUsbD1zLmVhc2luZyx1PXMuc3RhcnRUaW1lLGg9bj90OnQuY3koKSxmPWguc3R5bGUoKTtpZighcy5lYXNpbmdJbXBsKWlmKGw9PW51bGwpcy5lYXNpbmdJbXBsPU02LmxpbmVhcjtlbHNle3ZhciBkO2lmKFp0KGwpKXt2YXIgcD1mLnBhcnNlKCJ0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbiIsbCk7ZD1wLnZhbHVlfWVsc2UgZD1sO3ZhciBtLGc7WnQoZCk/KG09ZCxnPVtdKToobT1kWzFdLGc9ZC5zbGljZSgyKS5tYXAoZnVuY3Rpb24oRil7cmV0dXJuK0Z9KSksZy5sZW5ndGg+MD8obT09PSJzcHJpbmciJiZnLnB1c2gocy5kdXJhdGlvbikscy5lYXNpbmdJbXBsPU02W21dLmFwcGx5KG51bGwsZykpOnMuZWFzaW5nSW1wbD1NNlttXX12YXIgeT1zLmVhc2luZ0ltcGwsdjtpZihzLmR1cmF0aW9uPT09MD92PTE6dj0oci11KS9zLmR1cmF0aW9uLHMuYXBwbHlpbmcmJih2PXMucHJvZ3Jlc3MpLHY8MD92PTA6dj4xJiYodj0xKSxzLmRlbGF5PT1udWxsKXt2YXIgeD1zLnN0YXJ0UG9zaXRpb24sYj1zLnBvc2l0aW9uO2lmKGImJmkmJiF0LmxvY2tlZCgpKXt2YXIgVD17fTtWYih4LngsYi54KSYmKFQueD1XMSh4LngsYi54LHYseSkpLFZiKHgueSxiLnkpJiYoVC55PVcxKHgueSxiLnksdix5KSksdC5wb3NpdGlvbihUKX12YXIgUz1zLnN0YXJ0UGFuLHc9cy5wYW4sRT1hLnBhbixfPXchPW51bGwmJm47XyYmKFZiKFMueCx3LngpJiYoRS54PVcxKFMueCx3Lngsdix5KSksVmIoUy55LHcueSkmJihFLnk9VzEoUy55LHcueSx2LHkpKSx0LmVtaXQoInBhbiIpKTt2YXIgQz1zLnN0YXJ0Wm9vbSxEPXMuem9vbSxPPUQhPW51bGwmJm47TyYmKFZiKEMsRCkmJihhLnpvb209aTQoYS5taW5ab29tLFcxKEMsRCx2LHkpLGEubWF4Wm9vbSkpLHQuZW1pdCgiem9vbSIpKSwoX3x8TykmJnQuZW1pdCgidmlld3BvcnQiKTt2YXIgUj1zLnN0eWxlO2lmKFImJlIubGVuZ3RoPjAmJmkpe2Zvcih2YXIgaz0wO2s8Ui5sZW5ndGg7aysrKXt2YXIgTD1SW2tdLEE9TC5uYW1lLEk9TCxNPXMuc3RhcnRTdHlsZVtBXSxQPWYucHJvcGVydGllc1tNLm5hbWVdLEI9VzEoTSxJLHYseSxQKTtmLm92ZXJyaWRlQnlwYXNzKHQsQSxCKX10LmVtaXQoInN0eWxlIil9fXJldHVybiBzLnByb2dyZXNzPXYsdn1mdW5jdGlvbiBWYih0LGUpe3JldHVybiB0PT1udWxsfHxlPT1udWxsPyExOl90KHQpJiZfdChlKT8hMDohISh0JiZlKX1mdW5jdGlvbiBoWmUodCxlLHIsbil7dmFyIGk9ZS5fcHJpdmF0ZTtpLnN0YXJ0ZWQ9ITAsaS5zdGFydFRpbWU9ci1pLnByb2dyZXNzKmkuZHVyYXRpb259ZnVuY3Rpb24gUm1lKHQsZSl7dmFyIHI9ZS5fcHJpdmF0ZS5hbmlFbGVzLG49W107ZnVuY3Rpb24gaShmLGQpe3ZhciBwPWYuX3ByaXZhdGUsbT1wLmFuaW1hdGlvbi5jdXJyZW50LGc9cC5hbmltYXRpb24ucXVldWUseT0hMTtpZihtLmxlbmd0aD09PTApe3ZhciB2PWcuc2hpZnQoKTt2JiZtLnB1c2godil9Zm9yKHZhciB4PW8oZnVuY3Rpb24oRSl7Zm9yKHZhciBfPUUubGVuZ3RoLTE7Xz49MDtfLS0pe3ZhciBDPUVbX107QygpfUUuc3BsaWNlKDAsRS5sZW5ndGgpfSwiY2FsbGJhY2tzIiksYj1tLmxlbmd0aC0xO2I+PTA7Yi0tKXt2YXIgVD1tW2JdLFM9VC5fcHJpdmF0ZTtpZihTLnN0b3BwZWQpe20uc3BsaWNlKGIsMSksUy5ob29rZWQ9ITEsUy5wbGF5aW5nPSExLFMuc3RhcnRlZD0hMSx4KFMuZnJhbWVzKTtjb250aW51ZX0hUy5wbGF5aW5nJiYhUy5hcHBseWluZ3x8KFMucGxheWluZyYmUy5hcHBseWluZyYmKFMuYXBwbHlpbmc9ITEpLFMuc3RhcnRlZHx8aFplKGYsVCx0KSx1WmUoZixULHQsZCksUy5hcHBseWluZyYmKFMuYXBwbHlpbmc9ITEpLHgoUy5mcmFtZXMpLFMuc3RlcCE9bnVsbCYmUy5zdGVwKHQpLFQuY29tcGxldGVkKCkmJihtLnNwbGljZShiLDEpLFMuaG9va2VkPSExLFMucGxheWluZz0hMSxTLnN0YXJ0ZWQ9ITEseChTLmNvbXBsZXRlcykpLHk9ITApfXJldHVybiFkJiZtLmxlbmd0aD09PTAmJmcubGVuZ3RoPT09MCYmbi5wdXNoKGYpLHl9byhpLCJzdGVwT25lIik7Zm9yKHZhciBhPSExLHM9MDtzPHIubGVuZ3RoO3MrKyl7dmFyIGw9cltzXSx1PWkobCk7YT1hfHx1fXZhciBoPWkoZSwhMCk7KGF8fGgpJiYoci5sZW5ndGg+MD9lLm5vdGlmeSgiZHJhdyIscik6ZS5ub3RpZnkoImRyYXciKSksci51bm1lcmdlKG4pLGUuZW1pdCgic3RlcCIpfWZ1bmN0aW9uIGgxZSh0KXt0aGlzLm9wdGlvbnM9aXIoe30seFplLGJaZSx0KX1mdW5jdGlvbiBmMWUodCl7dGhpcy5vcHRpb25zPWlyKHt9LFRaZSx0KX1mdW5jdGlvbiBkMWUodCl7dGhpcy5vcHRpb25zPWlyKHt9LHdaZSx0KX1mdW5jdGlvbiB1Qyh0KXt0aGlzLm9wdGlvbnM9aXIoe30sa1plLHQpLHRoaXMub3B0aW9ucy5sYXlvdXQ9dGhpczt2YXIgZT10aGlzLm9wdGlvbnMuZWxlcy5ub2RlcygpLHI9dGhpcy5vcHRpb25zLmVsZXMuZWRnZXMoKSxuPXIuZmlsdGVyKGZ1bmN0aW9uKGkpe3ZhciBhPWkuc291cmNlKCkuZGF0YSgiaWQiKSxzPWkudGFyZ2V0KCkuZGF0YSgiaWQiKSxsPWUuc29tZShmdW5jdGlvbihoKXtyZXR1cm4gaC5kYXRhKCJpZCIpPT09YX0pLHU9ZS5zb21lKGZ1bmN0aW9uKGgpe3JldHVybiBoLmRhdGEoImlkIik9PT1zfSk7cmV0dXJuIWx8fCF1fSk7dGhpcy5vcHRpb25zLmVsZXM9dGhpcy5vcHRpb25zLmVsZXMubm90KG4pfWZ1bmN0aW9uIG0xZSh0KXt0aGlzLm9wdGlvbnM9aXIoe30selplLHQpfWZ1bmN0aW9uIGVGKHQpe3RoaXMub3B0aW9ucz1pcih7fSxHWmUsdCl9ZnVuY3Rpb24gZzFlKHQpe3RoaXMub3B0aW9ucz1pcih7fSxWWmUsdCl9ZnVuY3Rpb24geTFlKHQpe3RoaXMub3B0aW9ucz1pcih7fSxVWmUsdCl9ZnVuY3Rpb24gdjFlKHQpe3RoaXMub3B0aW9ucz10LHRoaXMubm90aWZpY2F0aW9ucz0wfWZ1bmN0aW9uIFQxZSh0LGUpe2UucmFkaXVzPT09MD90LmxpbmVUbyhlLmN4LGUuY3kpOnQuYXJjKGUuY3gsZS5jeSxlLnJhZGl1cyxlLnN0YXJ0QW5nbGUsZS5lbmRBbmdsZSxlLmNvdW50ZXJDbG9ja3dpc2UpfWZ1bmN0aW9uIHJGKHQsZSxyLG4pe3ZhciBpPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTohMDtyZXR1cm4gbj09PTB8fGUucmFkaXVzPT09MD97Y3g6ZS54LGN5OmUueSxyYWRpdXM6MCxzdGFydFg6ZS54LHN0YXJ0WTplLnksc3RvcFg6ZS54LHN0b3BZOmUueSxzdGFydEFuZ2xlOnZvaWQgMCxlbmRBbmdsZTp2b2lkIDAsY291bnRlckNsb2Nrd2lzZTp2b2lkIDB9OihxWmUodCxlLHIsbixpKSx7Y3g6X0IsY3k6REIscmFkaXVzOllwLHN0YXJ0WDp4MWUsc3RhcnRZOmIxZSxzdG9wWDpMQixzdG9wWTpSQixzdGFydEFuZ2xlOktjLmFuZytNYXRoLlBJLzIqWHAsZW5kQW5nbGU6bmwuYW5nLU1hdGguUEkvMipYcCxjb3VudGVyQ2xvY2t3aXNlOlA2fSl9ZnVuY3Rpb24gdzFlKHQpe3ZhciBlPVtdO2lmKHQhPW51bGwpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cis9Mil7dmFyIG49dFtyXSxpPXRbcisxXTtlLnB1c2goe3g6bix5Oml9KX1yZXR1cm4gZX19ZnVuY3Rpb24gWVplKHQsZSxyKXtmb3IodmFyIG49byhmdW5jdGlvbihoLGYsZCxwKXtyZXR1cm4gc2EoaCxmLGQscCl9LCJxYmV6aWVyQXQkMSIpLGk9ZS5fcHJpdmF0ZSxhPWkucnN0eWxlLmJlemllclB0cyxzPTA7czx0LmJlemllclByb2pQY3RzLmxlbmd0aDtzKyspe3ZhciBsPXQuYmV6aWVyUHJvalBjdHNbc107YS5wdXNoKHt4Om4oclswXSxyWzJdLHJbNF0sbCkseTpuKHJbMV0sclszXSxyWzVdLGwpfSl9fWZ1bmN0aW9uIGtKZSh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO3QubGluZVRvKG4ueCxuLnkpfX1mdW5jdGlvbiBFSmUodCxlLHIpe2Zvcih2YXIgbixpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBhPWVbaV07aT09PTAmJihuPWEpLHQubGluZVRvKGEueCxhLnkpfXQucXVhZHJhdGljQ3VydmVUbyhyLngsci55LG4ueCxuLnkpfWZ1bmN0aW9uIGptZSh0LGUscil7dC5iZWdpblBhdGgmJnQuYmVnaW5QYXRoKCk7Zm9yKHZhciBuPWUsaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgYT1uW2ldO3QubGluZVRvKGEueCxhLnkpfXZhciBzPXIsbD1yWzBdO3QubW92ZVRvKGwueCxsLnkpO2Zvcih2YXIgaT0xO2k8cy5sZW5ndGg7aSsrKXt2YXIgYT1zW2ldO3QubGluZVRvKGEueCxhLnkpfXQuY2xvc2VQYXRoJiZ0LmNsb3NlUGF0aCgpfWZ1bmN0aW9uIFNKZSh0LGUscixuLGkpe3QuYmVnaW5QYXRoJiZ0LmJlZ2luUGF0aCgpLHQuYXJjKHIsbixpLDAsTWF0aC5QSSoyLCExKTt2YXIgYT1lLHM9YVswXTt0Lm1vdmVUbyhzLngscy55KTtmb3IodmFyIGw9MDtsPGEubGVuZ3RoO2wrKyl7dmFyIHU9YVtsXTt0LmxpbmVUbyh1LngsdS55KX10LmNsb3NlUGF0aCYmdC5jbG9zZVBhdGgoKX1mdW5jdGlvbiBDSmUodCxlLHIsbil7dC5hcmMoZSxyLG4sMCxNYXRoLlBJKjIsITEpfWZ1bmN0aW9uIG1CKHQsZSxyLG4saSl7dmFyIGE9YXJndW1lbnRzLmxlbmd0aD41JiZhcmd1bWVudHNbNV0hPT12b2lkIDA/YXJndW1lbnRzWzVdOjUscz1hcmd1bWVudHMubGVuZ3RoPjY/YXJndW1lbnRzWzZdOnZvaWQgMDt0LmJlZ2luUGF0aCgpLHQubW92ZVRvKGUrYSxyKSx0LmxpbmVUbyhlK24tYSxyKSx0LnF1YWRyYXRpY0N1cnZlVG8oZStuLHIsZStuLHIrYSksdC5saW5lVG8oZStuLHIraS1hKSx0LnF1YWRyYXRpY0N1cnZlVG8oZStuLHIraSxlK24tYSxyK2kpLHQubGluZVRvKGUrYSxyK2kpLHQucXVhZHJhdGljQ3VydmVUbyhlLHIraSxlLHIraS1hKSx0LmxpbmVUbyhlLHIrYSksdC5xdWFkcmF0aWNDdXJ2ZVRvKGUscixlK2EsciksdC5jbG9zZVBhdGgoKSxzP3Quc3Ryb2tlKCk6dC5maWxsKCl9ZnVuY3Rpb24gS21lKHQsZSxyKXt2YXIgbj10LmNyZWF0ZVNoYWRlcihlKTtpZih0LnNoYWRlclNvdXJjZShuLHIpLHQuY29tcGlsZVNoYWRlcihuKSwhdC5nZXRTaGFkZXJQYXJhbWV0ZXIobix0LkNPTVBJTEVfU1RBVFVTKSl0aHJvdyBuZXcgRXJyb3IodC5nZXRTaGFkZXJJbmZvTG9nKG4pKTtyZXR1cm4gbn1mdW5jdGlvbiBNSmUodCxlLHIpe3ZhciBuPUttZSh0LHQuVkVSVEVYX1NIQURFUixlKSxpPUttZSh0LHQuRlJBR01FTlRfU0hBREVSLHIpLGE9dC5jcmVhdGVQcm9ncmFtKCk7aWYodC5hdHRhY2hTaGFkZXIoYSxuKSx0LmF0dGFjaFNoYWRlcihhLGkpLHQubGlua1Byb2dyYW0oYSksIXQuZ2V0UHJvZ3JhbVBhcmFtZXRlcihhLHQuTElOS19TVEFUVVMpKXRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGluaXRpYWxpemUgc2hhZGVycyIpO3JldHVybiBhfWZ1bmN0aW9uIElKZSh0LGUscil7cj09PXZvaWQgMCYmKHI9ZSk7dmFyIG49dC5tYWtlT2Zmc2NyZWVuQ2FudmFzKGUsciksaT1uLmNvbnRleHQ9bi5nZXRDb250ZXh0KCIyZCIpO3JldHVybiBuLmNsZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIGkuY2xlYXJSZWN0KDAsMCxuLndpZHRoLG4uaGVpZ2h0KX0sbi5jbGVhcigpLG59ZnVuY3Rpb24gYUYodCl7dmFyIGU9dC5waXhlbFJhdGlvLHI9dC5jeS56b29tKCksbj10LmN5LnBhbigpO3JldHVybnt6b29tOnIqZSxwYW46e3g6bi54KmUseTpuLnkqZX19fWZ1bmN0aW9uIGdCKHQsZSxyLG4saSl7dmFyIGE9bipyK2UueCxzPWkqcitlLnk7cmV0dXJuIHM9TWF0aC5yb3VuZCh0LmNhbnZhc0hlaWdodC1zKSxbYSxzXX1mdW5jdGlvbiBBNih0LGUscil7dmFyIG49dFswXS8yNTUsaT10WzFdLzI1NSxhPXRbMl0vMjU1LHM9ZSxsPXJ8fG5ldyBBcnJheSg0KTtyZXR1cm4gbFswXT1uKnMsbFsxXT1pKnMsbFsyXT1hKnMsbFszXT1zLGx9ZnVuY3Rpb24gXzYodCxlKXt2YXIgcj1lfHxuZXcgQXJyYXkoNCk7cmV0dXJuIHJbMF09KHQ+PjAmMjU1KS8yNTUsclsxXT0odD4+OCYyNTUpLzI1NSxyWzJdPSh0Pj4xNiYyNTUpLzI1NSxyWzNdPSh0Pj4yNCYyNTUpLzI1NSxyfWZ1bmN0aW9uIE9KZSh0KXtyZXR1cm4gdFswXSsodFsxXTw8OCkrKHRbMl08PDE2KSsodFszXTw8MjQpfWZ1bmN0aW9uIFBKZSh0LGUpe3ZhciByPXQuY3JlYXRlVGV4dHVyZSgpO3JldHVybiByLmJ1ZmZlcj1mdW5jdGlvbihuKXt0LmJpbmRUZXh0dXJlKHQuVEVYVFVSRV8yRCxyKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9XUkFQX1MsdC5DTEFNUF9UT19FREdFKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9XUkFQX1QsdC5DTEFNUF9UT19FREdFKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9NQUdfRklMVEVSLHQuTElORUFSKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9NSU5fRklMVEVSLHQuTElORUFSX01JUE1BUF9ORUFSRVNUKSx0LnBpeGVsU3RvcmVpKHQuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCEwKSx0LnRleEltYWdlMkQodC5URVhUVVJFXzJELDAsdC5SR0JBLHQuUkdCQSx0LlVOU0lHTkVEX0JZVEUsbiksdC5nZW5lcmF0ZU1pcG1hcCh0LlRFWFRVUkVfMkQpLHQuYmluZFRleHR1cmUodC5URVhUVVJFXzJELG51bGwpfSxyLmRlbGV0ZVRleHR1cmU9ZnVuY3Rpb24oKXt0LmRlbGV0ZVRleHR1cmUocil9LHJ9ZnVuY3Rpb24gTzFlKHQsZSl7c3dpdGNoKGUpe2Nhc2UiZmxvYXQiOnJldHVyblsxLHQuRkxPQVQsNF07Y2FzZSJ2ZWMyIjpyZXR1cm5bMix0LkZMT0FULDRdO2Nhc2UidmVjMyI6cmV0dXJuWzMsdC5GTE9BVCw0XTtjYXNlInZlYzQiOnJldHVybls0LHQuRkxPQVQsNF07Y2FzZSJpbnQiOnJldHVyblsxLHQuSU5ULDRdO2Nhc2UiaXZlYzIiOnJldHVyblsyLHQuSU5ULDRdfX1mdW5jdGlvbiBQMWUodCxlLHIpe3N3aXRjaChlKXtjYXNlIHQuRkxPQVQ6cmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkocik7Y2FzZSB0LklOVDpyZXR1cm4gbmV3IEludDMyQXJyYXkocil9fWZ1bmN0aW9uIEJKZSh0LGUscixuLGksYSl7c3dpdGNoKGUpe2Nhc2UgdC5GTE9BVDpyZXR1cm4gbmV3IEZsb2F0MzJBcnJheShyLmJ1ZmZlcixhKm4saSk7Y2FzZSB0LklOVDpyZXR1cm4gbmV3IEludDMyQXJyYXkoci5idWZmZXIsYSpuLGkpfX1mdW5jdGlvbiBGSmUodCxlLHIsbil7dmFyIGk9TzFlKHQsZSksYT1SaShpLDIpLHM9YVswXSxsPWFbMV0sdT1QMWUodCxsLG4pLGg9dC5jcmVhdGVCdWZmZXIoKTtyZXR1cm4gdC5iaW5kQnVmZmVyKHQuQVJSQVlfQlVGRkVSLGgpLHQuYnVmZmVyRGF0YSh0LkFSUkFZX0JVRkZFUix1LHQuU1RBVElDX0RSQVcpLGw9PT10LkZMT0FUP3QudmVydGV4QXR0cmliUG9pbnRlcihyLHMsbCwhMSwwLDApOmw9PT10LklOVCYmdC52ZXJ0ZXhBdHRyaWJJUG9pbnRlcihyLHMsbCwwLDApLHQuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkociksdC5iaW5kQnVmZmVyKHQuQVJSQVlfQlVGRkVSLG51bGwpLGh9ZnVuY3Rpb24geW8odCxlLHIsbil7dmFyIGk9TzFlKHQsciksYT1SaShpLDMpLHM9YVswXSxsPWFbMV0sdT1hWzJdLGg9UDFlKHQsbCxlKnMpLGY9cyp1LGQ9dC5jcmVhdGVCdWZmZXIoKTt0LmJpbmRCdWZmZXIodC5BUlJBWV9CVUZGRVIsZCksdC5idWZmZXJEYXRhKHQuQVJSQVlfQlVGRkVSLGUqZix0LkRZTkFNSUNfRFJBVyksdC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShuKSxsPT09dC5GTE9BVD90LnZlcnRleEF0dHJpYlBvaW50ZXIobixzLGwsITEsZiwwKTpsPT09dC5JTlQmJnQudmVydGV4QXR0cmliSVBvaW50ZXIobixzLGwsZiwwKSx0LnZlcnRleEF0dHJpYkRpdmlzb3IobiwxKSx0LmJpbmRCdWZmZXIodC5BUlJBWV9CVUZGRVIsbnVsbCk7Zm9yKHZhciBwPW5ldyBBcnJheShlKSxtPTA7bTxlO20rKylwW21dPUJKZSh0LGwsaCxmLHMsbSk7cmV0dXJuIGQuZGF0YUFycmF5PWgsZC5zdHJpZGU9ZixkLnNpemU9cyxkLmdldFZpZXc9ZnVuY3Rpb24oZyl7cmV0dXJuIHBbZ119LGQuc2V0UG9pbnQ9ZnVuY3Rpb24oZyx5LHYpe3ZhciB4PXBbZ107eFswXT15LHhbMV09dn0sZC5idWZmZXJTdWJEYXRhPWZ1bmN0aW9uKGcpe3QuYmluZEJ1ZmZlcih0LkFSUkFZX0JVRkZFUixkKSxnP3QuYnVmZmVyU3ViRGF0YSh0LkFSUkFZX0JVRkZFUiwwLGgsMCxnKnMpOnQuYnVmZmVyU3ViRGF0YSh0LkFSUkFZX0JVRkZFUiwwLGgpfSxkfWZ1bmN0aW9uICRKZSh0KXt2YXIgZT10LmNyZWF0ZUZyYW1lYnVmZmVyKCk7dC5iaW5kRnJhbWVidWZmZXIodC5GUkFNRUJVRkZFUixlKTt2YXIgcj10LmNyZWF0ZVRleHR1cmUoKTtyZXR1cm4gdC5iaW5kVGV4dHVyZSh0LlRFWFRVUkVfMkQsciksdC50ZXhQYXJhbWV0ZXJpKHQuVEVYVFVSRV8yRCx0LlRFWFRVUkVfTUlOX0ZJTFRFUix0LkxJTkVBUiksdC50ZXhQYXJhbWV0ZXJpKHQuVEVYVFVSRV8yRCx0LlRFWFRVUkVfV1JBUF9TLHQuQ0xBTVBfVE9fRURHRSksdC50ZXhQYXJhbWV0ZXJpKHQuVEVYVFVSRV8yRCx0LlRFWFRVUkVfV1JBUF9ULHQuQ0xBTVBfVE9fRURHRSksdC5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0LkZSQU1FQlVGRkVSLHQuQ09MT1JfQVRUQUNITUVOVDAsdC5URVhUVVJFXzJELHIsMCksdC5iaW5kRnJhbWVidWZmZXIodC5GUkFNRUJVRkZFUixudWxsKSxlLnNldEZyYW1lYnVmZmVyQXR0YWNobWVudFNpemVzPWZ1bmN0aW9uKG4saSl7dC5iaW5kVGV4dHVyZSh0LlRFWFRVUkVfMkQsciksdC50ZXhJbWFnZTJEKHQuVEVYVFVSRV8yRCwwLHQuUkdCQSxuLGksMCx0LlJHQkEsdC5VTlNJR05FRF9CWVRFLG51bGwpfSxlfWZ1bmN0aW9uIFpiKCl7dmFyIHQ9bmV3IFFtZSg5KTtyZXR1cm4gUW1lIT1GbG9hdDMyQXJyYXkmJih0WzFdPTAsdFsyXT0wLHRbM109MCx0WzVdPTAsdFs2XT0wLHRbN109MCksdFswXT0xLHRbNF09MSx0WzhdPTEsdH1mdW5jdGlvbiBCMWUodCl7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTEsdFs1XT0wLHRbNl09MCx0WzddPTAsdFs4XT0xLHR9ZnVuY3Rpb24gekplKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0scz1lWzNdLGw9ZVs0XSx1PWVbNV0saD1lWzZdLGY9ZVs3XSxkPWVbOF0scD1yWzBdLG09clsxXSxnPXJbMl0seT1yWzNdLHY9cls0XSx4PXJbNV0sYj1yWzZdLFQ9cls3XSxTPXJbOF07cmV0dXJuIHRbMF09cCpuK20qcytnKmgsdFsxXT1wKmkrbSpsK2cqZix0WzJdPXAqYSttKnUrZypkLHRbM109eSpuK3Yqcyt4KmgsdFs0XT15KmkrdipsK3gqZix0WzVdPXkqYSt2KnUreCpkLHRbNl09YipuK1QqcytTKmgsdFs3XT1iKmkrVCpsK1MqZix0WzhdPWIqYStUKnUrUypkLHR9ZnVuY3Rpb24gajYodCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxzPWVbM10sbD1lWzRdLHU9ZVs1XSxoPWVbNl0sZj1lWzddLGQ9ZVs4XSxwPXJbMF0sbT1yWzFdO3JldHVybiB0WzBdPW4sdFsxXT1pLHRbMl09YSx0WzNdPXMsdFs0XT1sLHRbNV09dSx0WzZdPXAqbittKnMraCx0WzddPXAqaSttKmwrZix0WzhdPXAqYSttKnUrZCx0fWZ1bmN0aW9uIEYxZSh0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLHM9ZVszXSxsPWVbNF0sdT1lWzVdLGg9ZVs2XSxmPWVbN10sZD1lWzhdLHA9TWF0aC5zaW4ociksbT1NYXRoLmNvcyhyKTtyZXR1cm4gdFswXT1tKm4rcCpzLHRbMV09bSppK3AqbCx0WzJdPW0qYStwKnUsdFszXT1tKnMtcCpuLHRbNF09bSpsLXAqaSx0WzVdPW0qdS1wKmEsdFs2XT1oLHRbN109Zix0WzhdPWQsdH1mdW5jdGlvbiBzRih0LGUscil7dmFyIG49clswXSxpPXJbMV07cmV0dXJuIHRbMF09biplWzBdLHRbMV09biplWzFdLHRbMl09biplWzJdLHRbM109aSplWzNdLHRbNF09aSplWzRdLHRbNV09aSplWzVdLHRbNl09ZVs2XSx0WzddPWVbN10sdFs4XT1lWzhdLHR9ZnVuY3Rpb24gR0plKHQsZSxyKXtyZXR1cm4gdFswXT0yL2UsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0tMi9yLHRbNV09MCx0WzZdPS0xLHRbN109MSx0WzhdPTEsdH1mdW5jdGlvbiBISmUodCxlKXtyZXR1cm4gdC5pbnRlcnNlY3Rpb24/dC5pbnRlcnNlY3Rpb24oZSk6bmV3IFNldChhZ2UodCkuZmlsdGVyKGZ1bmN0aW9uKHIpe3JldHVybiBlLmhhcyhyKX0pKX1mdW5jdGlvbiBlZ2UodCxlKXtyZXR1cm4icmdiYSgiLmNvbmNhdCh0WzBdLCIsICIpLmNvbmNhdCh0WzFdLCIsICIpLmNvbmNhdCh0WzJdLCIsICIpLmNvbmNhdChlLCIpIil9ZnVuY3Rpb24gWEplKHQpe3ZhciBlPXQmJnQuc3R5bGUmJnQuc3R5bGUuYmFja2dyb3VuZENvbG9yfHwid2hpdGUiO3JldHVybiBoZ2UoZSl9ZnVuY3Rpb24gakplKHQpe3t2YXIgZT10LnJlbmRlcjt0LnJlbmRlcj1mdW5jdGlvbihhKXthPWF8fHt9O3ZhciBzPXQuY3k7dC53ZWJnbCYmKHMuem9vbSgpPkwxZT8oS0plKHQpLGUuY2FsbCh0LGEpKTooUUplKHQpLEcxZSh0LGEsSmIuU0NSRUVOKSkpfX17dmFyIHI9dC5tYXRjaENhbnZhc1NpemU7dC5tYXRjaENhbnZhc1NpemU9ZnVuY3Rpb24oYSl7ci5jYWxsKHQsYSksdC5waWNraW5nRnJhbWVCdWZmZXIuc2V0RnJhbWVidWZmZXJBdHRhY2htZW50U2l6ZXModC5jYW52YXNXaWR0aCx0LmNhbnZhc0hlaWdodCksdC5waWNraW5nRnJhbWVCdWZmZXIubmVlZHNEcmF3PSEwfX10LmZpbmROZWFyZXN0RWxlbWVudHM9ZnVuY3Rpb24oYSxzLGwsdSl7cmV0dXJuIG5ldCh0LGEscyl9O3t2YXIgbj10LmludmFsaWRhdGVDYWNoZWRaU29ydGVkRWxlczt0LmludmFsaWRhdGVDYWNoZWRaU29ydGVkRWxlcz1mdW5jdGlvbigpe24uY2FsbCh0KSx0LnBpY2tpbmdGcmFtZUJ1ZmZlci5uZWVkc0RyYXc9ITB9fXt2YXIgaT10Lm5vdGlmeTt0Lm5vdGlmeT1mdW5jdGlvbihhLHMpe2kuY2FsbCh0LGEscyksYT09PSJ2aWV3cG9ydCJ8fGE9PT0iYm91bmRzIj90LnBpY2tpbmdGcmFtZUJ1ZmZlci5uZWVkc0RyYXc9ITA6YT09PSJiYWNrZ3JvdW5kIiYmdC5lbGVEcmF3aW5nLmludmFsaWRhdGUocyx7dHlwZToibm9kZS1ib2R5In0pfX19ZnVuY3Rpb24gS0plKHQpe3ZhciBlPXQuZGF0YS5jb250ZXh0c1t0LldFQkdMXTtlLmNsZWFyKGUuQ09MT1JfQlVGRkVSX0JJVHxlLkRFUFRIX0JVRkZFUl9CSVQpfWZ1bmN0aW9uIFFKZSh0KXt2YXIgZT1vKGZ1bmN0aW9uKG4pe24uc2F2ZSgpLG4uc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxuLmNsZWFyUmVjdCgwLDAsdC5jYW52YXNXaWR0aCx0LmNhbnZhc0hlaWdodCksbi5yZXN0b3JlKCl9LCJjbGVhciIpO2UodC5kYXRhLmNvbnRleHRzW3QuTk9ERV0pLGUodC5kYXRhLmNvbnRleHRzW3QuRFJBR10pfWZ1bmN0aW9uIFpKZSh0KXt2YXIgZT10LmNhbnZhc1dpZHRoLHI9dC5jYW52YXNIZWlnaHQsbj1hRih0KSxpPW4ucGFuLGE9bi56b29tLHM9WmIoKTtqNihzLHMsW2kueCxpLnldKSxzRihzLHMsW2EsYV0pO3ZhciBsPVpiKCk7R0plKGwsZSxyKTt2YXIgdT1aYigpO3JldHVybiB6SmUodSxsLHMpLHV9ZnVuY3Rpb24gejFlKHQsZSl7dmFyIHI9dC5jYW52YXNXaWR0aCxuPXQuY2FudmFzSGVpZ2h0LGk9YUYodCksYT1pLnBhbixzPWkuem9vbTtlLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksZS5jbGVhclJlY3QoMCwwLHIsbiksZS50cmFuc2xhdGUoYS54LGEueSksZS5zY2FsZShzLHMpfWZ1bmN0aW9uIEpKZSh0LGUpe3QuZHJhd1NlbGVjdGlvblJlY3RhbmdsZShlLGZ1bmN0aW9uKHIpe3JldHVybiB6MWUodCxyKX0pfWZ1bmN0aW9uIGVldCh0KXt2YXIgZT10LmRhdGEuY29udGV4dHNbdC5OT0RFXTtlLnNhdmUoKSx6MWUodCxlKSxlLnN0cm9rZVN0eWxlPSJyZ2JhKDAsIDAsIDAsIDAuMykiLGUuYmVnaW5QYXRoKCksZS5tb3ZlVG8oLTFlMywwKSxlLmxpbmVUbygxZTMsMCksZS5zdHJva2UoKSxlLmJlZ2luUGF0aCgpLGUubW92ZVRvKDAsLTFlMyksZS5saW5lVG8oMCwxZTMpLGUuc3Ryb2tlKCksZS5yZXN0b3JlKCl9ZnVuY3Rpb24gdGV0KHQpe3ZhciBlPW8oZnVuY3Rpb24oaSxhLHMpe2Zvcih2YXIgbD1pLmF0bGFzTWFuYWdlci5nZXRSZW5kZXJUeXBlT3B0cyhhKSx1PXQuZGF0YS5jb250ZXh0c1t0Lk5PREVdLGg9LjEyNSxmPWwuYXRsYXNDb2xsZWN0aW9uLmF0bGFzZXMsZD0wO2Q8Zi5sZW5ndGg7ZCsrKXt2YXIgcD1mW2RdLG09cC5jYW52YXMsZz1tLndpZHRoLHk9bS5oZWlnaHQsdj1nKmQseD1tLmhlaWdodCpzO3Uuc2F2ZSgpLHUuc2NhbGUoaCxoKSx1LmRyYXdJbWFnZShtLHYseCksdS5zdHJva2VTdHlsZT0iYmxhY2siLHUucmVjdCh2LHgsZyx5KSx1LnN0cm9rZSgpLHUucmVzdG9yZSgpfX0sImRyYXciKSxyPTA7ZSh0LmVsZURyYXdpbmcsIm5vZGUtYm9keSIscisrKSxlKHQuZWxlRHJhd2luZywibm9kZS1sYWJlbCIscisrKX1mdW5jdGlvbiByZXQodCxlLHIsbixpKXt2YXIgYSxzLGwsdSxoPWFGKHQpLGY9aC5wYW4sZD1oLnpvb207aWYobj09PXZvaWQgMHx8aT09PXZvaWQgMCl7dmFyIHA9Z0IodCxmLGQsZSxyKSxtPVJpKHAsMiksZz1tWzBdLHk9bVsxXSx2PTY7YT1nLXYvMixzPXktdi8yLGw9dix1PXZ9ZWxzZXt2YXIgeD1nQih0LGYsZCxlLHIpLGI9UmkoeCwyKSxUPWJbMF0sUz1iWzFdLHc9Z0IodCxmLGQsbixpKSxFPVJpKHcsMiksXz1FWzBdLEM9RVsxXTthPVQscz1DLGw9TWF0aC5hYnMoXy1UKSx1PU1hdGguYWJzKEMtUyl9aWYobD09PTB8fHU9PT0wKXJldHVybltdO3ZhciBEPXQuZGF0YS5jb250ZXh0c1t0LldFQkdMXTtELmJpbmRGcmFtZWJ1ZmZlcihELkZSQU1FQlVGRkVSLHQucGlja2luZ0ZyYW1lQnVmZmVyKSx0LnBpY2tpbmdGcmFtZUJ1ZmZlci5uZWVkc0RyYXcmJihELnZpZXdwb3J0KDAsMCxELmNhbnZhcy53aWR0aCxELmNhbnZhcy5oZWlnaHQpLEcxZSh0LG51bGwsSmIuUElDS0lORyksdC5waWNraW5nRnJhbWVCdWZmZXIubmVlZHNEcmF3PSExKTt2YXIgTz1sKnUsUj1uZXcgVWludDhBcnJheShPKjQpO0QucmVhZFBpeGVscyhhLHMsbCx1LEQuUkdCQSxELlVOU0lHTkVEX0JZVEUsUiksRC5iaW5kRnJhbWVidWZmZXIoRC5GUkFNRUJVRkZFUixudWxsKTtmb3IodmFyIGs9bmV3IFNldCxMPTA7TDxPO0wrKyl7dmFyIEE9Ui5zbGljZShMKjQsTCo0KzQpLEk9T0plKEEpLTE7ST49MCYmay5hZGQoSSl9cmV0dXJuIGt9ZnVuY3Rpb24gbmV0KHQsZSxyKXt2YXIgbj1yZXQodCxlLHIpLGk9dC5nZXRDYWNoZWRaU29ydGVkRWxlcygpLGEscyxsPXZvKG4pLHU7dHJ5e2ZvcihsLnMoKTshKHU9bC5uKCkpLmRvbmU7KXt2YXIgaD11LnZhbHVlLGY9aVtoXTtpZighYSYmZi5pc05vZGUoKSYmKGE9ZiksIXMmJmYuaXNFZGdlKCkmJihzPWYpLGEmJnMpYnJlYWt9fWNhdGNoKGQpe2wuZShkKX1maW5hbGx5e2wuZigpfXJldHVyblthLHNdLmZpbHRlcihCb29sZWFuKX1mdW5jdGlvbiBHMWUodCxlLHIpe3ZhciBuLGk7dC53ZWJnbERlYnVnJiYoaT1bXSxuPXBlcmZvcm1hbmNlLm5vdygpKTt2YXIgYT10LmVsZURyYXdpbmcscz0wO2lmKHIuc2NyZWVuJiZ0LmRhdGEuY2FudmFzTmVlZHNSZWRyYXdbdC5TRUxFQ1RfQk9YXSYmSkplKHQsZSksdC5kYXRhLmNhbnZhc05lZWRzUmVkcmF3W3QuTk9ERV18fHIucGlja2luZyl7dmFyIGw9byhmdW5jdGlvbihrLEwpe0wrPTEsay5pc05vZGUoKT8oYS5kcmF3VGV4dHVyZShrLEwsIm5vZGUtdW5kZXJsYXkiKSxhLmRyYXdUZXh0dXJlKGssTCwibm9kZS1ib2R5IiksYS5kcmF3VGV4dHVyZShrLEwsIm5vZGUtbGFiZWwiKSxhLmRyYXdUZXh0dXJlKGssTCwibm9kZS1vdmVybGF5IikpOihhLmRyYXdFZGdlTGluZShrLEwpLGEuZHJhd0VkZ2VBcnJvdyhrLEwsInNvdXJjZSIpLGEuZHJhd0VkZ2VBcnJvdyhrLEwsInRhcmdldCIpLGEuZHJhd1RleHR1cmUoayxMLCJlZGdlLWxhYmVsIikpfSwiZHJhdyIpLHU9dC5kYXRhLmNvbnRleHRzW3QuV0VCR0xdO3Iuc2NyZWVuPyh1LmNsZWFyQ29sb3IoMCwwLDAsMCksdS5lbmFibGUodS5CTEVORCksdS5ibGVuZEZ1bmModS5PTkUsdS5PTkVfTUlOVVNfU1JDX0FMUEhBKSk6dS5kaXNhYmxlKHUuQkxFTkQpLHUuY2xlYXIodS5DT0xPUl9CVUZGRVJfQklUfHUuREVQVEhfQlVGRkVSX0JJVCksdS52aWV3cG9ydCgwLDAsdS5jYW52YXMud2lkdGgsdS5jYW52YXMuaGVpZ2h0KTt2YXIgaD1aSmUodCksZj10LmdldENhY2hlZFpTb3J0ZWRFbGVzKCk7aWYocz1mLmxlbmd0aCxhLnN0YXJ0RnJhbWUoaCxpLHIpLHIuc2NyZWVuKXtmb3IodmFyIGQ9MDtkPGYubm9uZHJhZy5sZW5ndGg7ZCsrKWwoZi5ub25kcmFnW2RdLGQpO2Zvcih2YXIgcD0wO3A8Zi5kcmFnLmxlbmd0aDtwKyspbChmLmRyYWdbcF0sLTEpfWVsc2UgaWYoci5waWNraW5nKWZvcih2YXIgbT0wO208Zi5sZW5ndGg7bSsrKWwoZlttXSxtKTthLmVuZEZyYW1lKCksdC5kYXRhLmdjJiYoY29uc29sZS5sb2coIkdhcmJhZ2UgQ29sbGVjdCEiKSx0LmRhdGEuZ2M9ITEsYS5nYygpKSxyLnNjcmVlbiYmdC53ZWJnbERlYnVnU2hvd0F0bGFzZXMmJihlZXQodCksdGV0KHQpKSx0LmRhdGEuY2FudmFzTmVlZHNSZWRyYXdbdC5OT0RFXT0hMSx0LmRhdGEuY2FudmFzTmVlZHNSZWRyYXdbdC5EUkFHXT0hMX1pZih0LndlYmdsRGVidWcpe3ZhciBnPXBlcmZvcm1hbmNlLm5vdygpLHk9ITAsdj0wLHg9MCxiPXZvKGkpLFQ7dHJ5e2ZvcihiLnMoKTshKFQ9Yi5uKCkpLmRvbmU7KXt2YXIgUz1ULnZhbHVlO3YrKyx4Kz1TLmNvdW50fX1jYXRjaChSKXtiLmUoUil9ZmluYWxseXtiLmYoKX12YXIgdz1NYXRoLmNlaWwoZy1uKSxFPSIiLmNvbmNhdChzLCIgZWxlbWVudHMsICIpLmNvbmNhdCh4LCIgcmVjdGFuZ2xlcywgIikuY29uY2F0KHYsIiBiYXRjaGVzIik7aWYoeSljb25zb2xlLmxvZygiV2ViR0wgKCIuY29uY2F0KHIubmFtZSwiKSAtICIpLmNvbmNhdChFKSk7ZWxzZXtjb25zb2xlLmxvZygiV2ViR0wgcmVuZGVyICgiLmNvbmNhdChyLm5hbWUsIikgLSBmcmFtZSB0aW1lICIpLmNvbmNhdCh3LCJtcyIpKSxjb25zb2xlLmxvZygiICAiLmNvbmNhdChFKSksY29uc29sZS5sb2coIlRleHR1cmUgQXRsYXNlcyBVc2VkOiIpO3ZhciBfPWEuZ2V0QXRsYXNEZWJ1Z0luZm8oKSxDPXZvKF8pLEQ7dHJ5e2ZvcihDLnMoKTshKEQ9Qy5uKCkpLmRvbmU7KXt2YXIgTz1ELnZhbHVlO2NvbnNvbGUubG9nKCIgICIuY29uY2F0KE8udHlwZSwiOiAiKS5jb25jYXQoTy5rZXlDb3VudCwiIGtleXMsICIpLmNvbmNhdChPLmF0bGFzQ291bnQsIiBhdGxhc2VzIikpfX1jYXRjaChSKXtDLmUoUil9ZmluYWxseXtDLmYoKX1jb25zb2xlLmxvZygiIil9fX1mdW5jdGlvbiBpZXQodCxlKXtmb3IodmFyIHI9YXRvYih0KSxuPW5ldyBBcnJheUJ1ZmZlcihyLmxlbmd0aCksaT1uZXcgVWludDhBcnJheShuKSxhPTA7YTxyLmxlbmd0aDthKyspaVthXT1yLmNoYXJDb2RlQXQoYSk7cmV0dXJuIG5ldyBCbG9iKFtuXSx7dHlwZTplfSl9ZnVuY3Rpb24gbmdlKHQpe3ZhciBlPXQuaW5kZXhPZigiLCIpO3JldHVybiB0LnN1YnN0cihlKzEpfWZ1bmN0aW9uIFUxZSh0LGUscil7dmFyIG49byhmdW5jdGlvbigpe3JldHVybiBlLnRvRGF0YVVSTChyLHQucXVhbGl0eSl9LCJnZXRCNjRVcmkiKTtzd2l0Y2godC5vdXRwdXQpe2Nhc2UiYmxvYi1wcm9taXNlIjpyZXR1cm4gbmV3IHN5KGZ1bmN0aW9uKGksYSl7dHJ5e2UudG9CbG9iKGZ1bmN0aW9uKHMpe3MhPW51bGw/aShzKTphKG5ldyBFcnJvcigiYGNhbnZhcy50b0Jsb2IoKWAgc2VudCBhIG51bGwgdmFsdWUgaW4gaXRzIGNhbGxiYWNrIikpfSxyLHQucXVhbGl0eSl9Y2F0Y2gocyl7YShzKX19KTtjYXNlImJsb2IiOnJldHVybiBpZXQobmdlKG4oKSkscik7Y2FzZSJiYXNlNjQiOnJldHVybiBuZ2UobigpKTtjYXNlImJhc2U2NHVyaSI6ZGVmYXVsdDpyZXR1cm4gbigpfX1mdW5jdGlvbiBXMWUodCl7dmFyIGU9dGhpcyxyPWUuY3kud2luZG93KCksbj1yLmRvY3VtZW50O3Qud2ViZ2wmJihTci5DQU5WQVNfTEFZRVJTPWUuQ0FOVkFTX0xBWUVSUz00LGNvbnNvbGUubG9nKCJ3ZWJnbCByZW5kZXJpbmcgZW5hYmxlZCIpKSxlLmRhdGE9e2NhbnZhc2VzOm5ldyBBcnJheShTci5DQU5WQVNfTEFZRVJTKSxjb250ZXh0czpuZXcgQXJyYXkoU3IuQ0FOVkFTX0xBWUVSUyksY2FudmFzTmVlZHNSZWRyYXc6bmV3IEFycmF5KFNyLkNBTlZBU19MQVlFUlMpLGJ1ZmZlckNhbnZhc2VzOm5ldyBBcnJheShTci5CVUZGRVJfQ09VTlQpLGJ1ZmZlckNvbnRleHRzOm5ldyBBcnJheShTci5DQU5WQVNfTEFZRVJTKX07dmFyIGk9Ii13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsYT0icmdiYSgwLDAsMCwwKSI7ZS5kYXRhLmNhbnZhc0NvbnRhaW5lcj1uLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3ZhciBzPWUuZGF0YS5jYW52YXNDb250YWluZXIuc3R5bGU7ZS5kYXRhLmNhbnZhc0NvbnRhaW5lci5zdHlsZVtpXT1hLHMucG9zaXRpb249InJlbGF0aXZlIixzLnpJbmRleD0iMCIscy5vdmVyZmxvdz0iaGlkZGVuIjt2YXIgbD10LmN5LmNvbnRhaW5lcigpO2wuYXBwZW5kQ2hpbGQoZS5kYXRhLmNhbnZhc0NvbnRhaW5lciksbC5zdHlsZVtpXT1hO3ZhciB1PXsiLXdlYmtpdC11c2VyLXNlbGVjdCI6Im5vbmUiLCItbW96LXVzZXItc2VsZWN0IjoiLW1vei1ub25lIiwidXNlci1zZWxlY3QiOiJub25lIiwiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIjoicmdiYSgwLDAsMCwwKSIsIm91dGxpbmUtc3R5bGUiOiJub25lIn07a3FlKCkmJih1WyItbXMtdG91Y2gtYWN0aW9uIl09Im5vbmUiLHVbInRvdWNoLWFjdGlvbiJdPSJub25lIik7Zm9yKHZhciBoPTA7aDxTci5DQU5WQVNfTEFZRVJTO2grKyl7dmFyIGY9ZS5kYXRhLmNhbnZhc2VzW2hdPW4uY3JlYXRlRWxlbWVudCgiY2FudmFzIiksZD1Tci5DQU5WQVNfVFlQRVNbaF07ZS5kYXRhLmNvbnRleHRzW2hdPWYuZ2V0Q29udGV4dChkKSxlLmRhdGEuY29udGV4dHNbaF18fG9pKCJDb3VsZCBub3QgY3JlYXRlIGNhbnZhcyBvZiB0eXBlICIrZCksT2JqZWN0LmtleXModSkuZm9yRWFjaChmdW5jdGlvbihRKXtmLnN0eWxlW1FdPXVbUV19KSxmLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsZi5zZXRBdHRyaWJ1dGUoImRhdGEtaWQiLCJsYXllciIraCksZi5zdHlsZS56SW5kZXg9U3RyaW5nKFNyLkNBTlZBU19MQVlFUlMtaCksZS5kYXRhLmNhbnZhc0NvbnRhaW5lci5hcHBlbmRDaGlsZChmKSxlLmRhdGEuY2FudmFzTmVlZHNSZWRyYXdbaF09ITF9ZS5kYXRhLnRvcENhbnZhcz1lLmRhdGEuY2FudmFzZXNbMF0sZS5kYXRhLmNhbnZhc2VzW1NyLk5PREVdLnNldEF0dHJpYnV0ZSgiZGF0YS1pZCIsImxheWVyIitTci5OT0RFKyItbm9kZSIpLGUuZGF0YS5jYW52YXNlc1tTci5TRUxFQ1RfQk9YXS5zZXRBdHRyaWJ1dGUoImRhdGEtaWQiLCJsYXllciIrU3IuU0VMRUNUX0JPWCsiLXNlbGVjdGJveCIpLGUuZGF0YS5jYW52YXNlc1tTci5EUkFHXS5zZXRBdHRyaWJ1dGUoImRhdGEtaWQiLCJsYXllciIrU3IuRFJBRysiLWRyYWciKSxlLmRhdGEuY2FudmFzZXNbU3IuV0VCR0xdJiZlLmRhdGEuY2FudmFzZXNbU3IuV0VCR0xdLnNldEF0dHJpYnV0ZSgiZGF0YS1pZCIsImxheWVyIitTci5XRUJHTCsiLXdlYmdsIik7Zm9yKHZhciBoPTA7aDxTci5CVUZGRVJfQ09VTlQ7aCsrKWUuZGF0YS5idWZmZXJDYW52YXNlc1toXT1uLmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLGUuZGF0YS5idWZmZXJDb250ZXh0c1toXT1lLmRhdGEuYnVmZmVyQ2FudmFzZXNbaF0uZ2V0Q29udGV4dCgiMmQiKSxlLmRhdGEuYnVmZmVyQ2FudmFzZXNbaF0uc3R5bGUucG9zaXRpb249ImFic29sdXRlIixlLmRhdGEuYnVmZmVyQ2FudmFzZXNbaF0uc2V0QXR0cmlidXRlKCJkYXRhLWlkIiwiYnVmZmVyIitoKSxlLmRhdGEuYnVmZmVyQ2FudmFzZXNbaF0uc3R5bGUuekluZGV4PVN0cmluZygtaC0xKSxlLmRhdGEuYnVmZmVyQ2FudmFzZXNbaF0uc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIjtlLnBhdGhzRW5hYmxlZD0hMDt2YXIgcD1ZcygpLG09byhmdW5jdGlvbihqKXtyZXR1cm57eDooai54MStqLngyKS8yLHk6KGoueTErai55MikvMn19LCJnZXRCb3hDZW50ZXIiKSxnPW8oZnVuY3Rpb24oail7cmV0dXJue3g6LWoudy8yLHk6LWouaC8yfX0sImdldENlbnRlck9mZnNldCIpLHk9byhmdW5jdGlvbihqKXt2YXIgbmU9alswXS5fcHJpdmF0ZSx0ZT1uZS5vbGRCYWNrZ3JvdW5kVGltZXN0YW1wPT09bmUuYmFja2dyb3VuZFRpbWVzdGFtcDtyZXR1cm4hdGV9LCJiYWNrZ3JvdW5kVGltZXN0YW1wSGFzQ2hhbmdlZCIpLHY9byhmdW5jdGlvbihqKXtyZXR1cm4galswXS5fcHJpdmF0ZS5ub2RlS2V5fSwiZ2V0U3R5bGVLZXkiKSx4PW8oZnVuY3Rpb24oail7cmV0dXJuIGpbMF0uX3ByaXZhdGUubGFiZWxTdHlsZUtleX0sImdldExhYmVsS2V5IiksYj1vKGZ1bmN0aW9uKGope3JldHVybiBqWzBdLl9wcml2YXRlLnNvdXJjZUxhYmVsU3R5bGVLZXl9LCJnZXRTb3VyY2VMYWJlbEtleSIpLFQ9byhmdW5jdGlvbihqKXtyZXR1cm4galswXS5fcHJpdmF0ZS50YXJnZXRMYWJlbFN0eWxlS2V5fSwiZ2V0VGFyZ2V0TGFiZWxLZXkiKSxTPW8oZnVuY3Rpb24oaixuZSx0ZSxoZSxsZSl7cmV0dXJuIGUuZHJhd0VsZW1lbnQoaixuZSx0ZSwhMSwhMSxsZSl9LCJkcmF3RWxlbWVudCIpLHc9byhmdW5jdGlvbihqLG5lLHRlLGhlLGxlKXtyZXR1cm4gZS5kcmF3RWxlbWVudFRleHQoaixuZSx0ZSxoZSwibWFpbiIsbGUpfSwiZHJhd0xhYmVsIiksRT1vKGZ1bmN0aW9uKGosbmUsdGUsaGUsbGUpe3JldHVybiBlLmRyYXdFbGVtZW50VGV4dChqLG5lLHRlLGhlLCJzb3VyY2UiLGxlKX0sImRyYXdTb3VyY2VMYWJlbCIpLF89byhmdW5jdGlvbihqLG5lLHRlLGhlLGxlKXtyZXR1cm4gZS5kcmF3RWxlbWVudFRleHQoaixuZSx0ZSxoZSwidGFyZ2V0IixsZSl9LCJkcmF3VGFyZ2V0TGFiZWwiKSxDPW8oZnVuY3Rpb24oail7cmV0dXJuIGouYm91bmRpbmdCb3goKSxqWzBdLl9wcml2YXRlLmJvZHlCb3VuZHN9LCJnZXRFbGVtZW50Qm94IiksRD1vKGZ1bmN0aW9uKGope3JldHVybiBqLmJvdW5kaW5nQm94KCksalswXS5fcHJpdmF0ZS5sYWJlbEJvdW5kcy5tYWlufHxwfSwiZ2V0TGFiZWxCb3giKSxPPW8oZnVuY3Rpb24oail7cmV0dXJuIGouYm91bmRpbmdCb3goKSxqWzBdLl9wcml2YXRlLmxhYmVsQm91bmRzLnNvdXJjZXx8cH0sImdldFNvdXJjZUxhYmVsQm94IiksUj1vKGZ1bmN0aW9uKGope3JldHVybiBqLmJvdW5kaW5nQm94KCksalswXS5fcHJpdmF0ZS5sYWJlbEJvdW5kcy50YXJnZXR8fHB9LCJnZXRUYXJnZXRMYWJlbEJveCIpLGs9byhmdW5jdGlvbihqLG5lKXtyZXR1cm4gbmV9LCJpc0xhYmVsVmlzaWJsZUF0U2NhbGUiKSxMPW8oZnVuY3Rpb24oail7cmV0dXJuIG0oQyhqKSl9LCJnZXRFbGVtZW50Um90YXRpb25Qb2ludCIpLEE9byhmdW5jdGlvbihqLG5lLHRlKXt2YXIgaGU9aj9qKyItIjoiIjtyZXR1cm57eDpuZS54K3RlLnBzdHlsZShoZSsidGV4dC1tYXJnaW4teCIpLnBmVmFsdWUseTpuZS55K3RlLnBzdHlsZShoZSsidGV4dC1tYXJnaW4teSIpLnBmVmFsdWV9fSwiYWRkVGV4dE1hcmdpbiIpLEk9byhmdW5jdGlvbihqLG5lLHRlKXt2YXIgaGU9alswXS5fcHJpdmF0ZS5yc2NyYXRjaDtyZXR1cm57eDpoZVtuZV0seTpoZVt0ZV19fSwiZ2V0UnNQdCIpLE09byhmdW5jdGlvbihqKXtyZXR1cm4gQSgiIixJKGosImxhYmVsWCIsImxhYmVsWSIpLGopfSwiZ2V0TGFiZWxSb3RhdGlvblBvaW50IiksUD1vKGZ1bmN0aW9uKGope3JldHVybiBBKCJzb3VyY2UiLEkoaiwic291cmNlTGFiZWxYIiwic291cmNlTGFiZWxZIiksail9LCJnZXRTb3VyY2VMYWJlbFJvdGF0aW9uUG9pbnQiKSxCPW8oZnVuY3Rpb24oail7cmV0dXJuIEEoInRhcmdldCIsSShqLCJ0YXJnZXRMYWJlbFgiLCJ0YXJnZXRMYWJlbFkiKSxqKX0sImdldFRhcmdldExhYmVsUm90YXRpb25Qb2ludCIpLEY9byhmdW5jdGlvbihqKXtyZXR1cm4gZyhDKGopKX0sImdldEVsZW1lbnRSb3RhdGlvbk9mZnNldCIpLHo9byhmdW5jdGlvbihqKXtyZXR1cm4gZyhPKGopKX0sImdldFNvdXJjZUxhYmVsUm90YXRpb25PZmZzZXQiKSwkPW8oZnVuY3Rpb24oail7cmV0dXJuIGcoUihqKSl9LCJnZXRUYXJnZXRMYWJlbFJvdGF0aW9uT2Zmc2V0IiksVT1vKGZ1bmN0aW9uKGope3ZhciBuZT1EKGopLHRlPWcoRChqKSk7aWYoai5pc05vZGUoKSl7c3dpdGNoKGoucHN0eWxlKCJ0ZXh0LWhhbGlnbiIpLnZhbHVlKXtjYXNlImxlZnQiOnRlLng9LW5lLnctKG5lLmxlZnRQYWR8fDApO2JyZWFrO2Nhc2UicmlnaHQiOnRlLng9LShuZS5yaWdodFBhZHx8MCk7YnJlYWt9c3dpdGNoKGoucHN0eWxlKCJ0ZXh0LXZhbGlnbiIpLnZhbHVlKXtjYXNlInRvcCI6dGUueT0tbmUuaC0obmUudG9wUGFkfHwwKTticmVhaztjYXNlImJvdHRvbSI6dGUueT0tKG5lLmJvdFBhZHx8MCk7YnJlYWt9fXJldHVybiB0ZX0sImdldExhYmVsUm90YXRpb25PZmZzZXQiKSxLPWUuZGF0YS5lbGVUeHJDYWNoZT1uZXcgamIoZSx7Z2V0S2V5OnYsZG9lc0VsZUludmFsaWRhdGVLZXk6eSxkcmF3RWxlbWVudDpTLGdldEJvdW5kaW5nQm94OkMsZ2V0Um90YXRpb25Qb2ludDpMLGdldFJvdGF0aW9uT2Zmc2V0OkYsYWxsb3dFZGdlVHhyQ2FjaGluZzohMSxhbGxvd1BhcmVudFR4ckNhY2hpbmc6ITF9KSxlZT1lLmRhdGEubGJsVHhyQ2FjaGU9bmV3IGpiKGUse2dldEtleTp4LGRyYXdFbGVtZW50OncsZ2V0Qm91bmRpbmdCb3g6RCxnZXRSb3RhdGlvblBvaW50Ok0sZ2V0Um90YXRpb25PZmZzZXQ6VSxpc1Zpc2libGU6a30pLFk9ZS5kYXRhLnNsYlR4ckNhY2hlPW5ldyBqYihlLHtnZXRLZXk6YixkcmF3RWxlbWVudDpFLGdldEJvdW5kaW5nQm94Ok8sZ2V0Um90YXRpb25Qb2ludDpQLGdldFJvdGF0aW9uT2Zmc2V0OnosaXNWaXNpYmxlOmt9KSxjZT1lLmRhdGEudGxiVHhyQ2FjaGU9bmV3IGpiKGUse2dldEtleTpULGRyYXdFbGVtZW50Ol8sZ2V0Qm91bmRpbmdCb3g6UixnZXRSb3RhdGlvblBvaW50OkIsZ2V0Um90YXRpb25PZmZzZXQ6JCxpc1Zpc2libGU6a30pLFo9ZS5kYXRhLmx5clR4ckNhY2hlPW5ldyBSMWUoZSk7ZS5vblVwZGF0ZUVsZUNhbGNzKG8oZnVuY3Rpb24oaixuZSl7Sy5pbnZhbGlkYXRlRWxlbWVudHMobmUpLGVlLmludmFsaWRhdGVFbGVtZW50cyhuZSksWS5pbnZhbGlkYXRlRWxlbWVudHMobmUpLGNlLmludmFsaWRhdGVFbGVtZW50cyhuZSksWi5pbnZhbGlkYXRlRWxlbWVudHMobmUpO2Zvcih2YXIgdGU9MDt0ZTxuZS5sZW5ndGg7dGUrKyl7dmFyIGhlPW5lW3RlXS5fcHJpdmF0ZTtoZS5vbGRCYWNrZ3JvdW5kVGltZXN0YW1wPWhlLmJhY2tncm91bmRUaW1lc3RhbXB9fSwiaW52YWxpZGF0ZVRleHR1cmVDYWNoZXMiKSk7dmFyIHVlPW8oZnVuY3Rpb24oail7Zm9yKHZhciBuZT0wO25lPGoubGVuZ3RoO25lKyspWi5lbnF1ZXVlRWxlbWVudFJlZmluZW1lbnQoaltuZV0uZWxlKX0sInJlZmluZUluTGF5ZXJzIik7Sy5vbkRlcXVldWUodWUpLGVlLm9uRGVxdWV1ZSh1ZSksWS5vbkRlcXVldWUodWUpLGNlLm9uRGVxdWV1ZSh1ZSksdC53ZWJnbCYmZS5pbml0V2ViZ2wodCx7Z2V0U3R5bGVLZXk6dixnZXRMYWJlbEtleTp4LGRyYXdFbGVtZW50OlMsZHJhd0xhYmVsOncsZ2V0RWxlbWVudEJveDpDLGdldExhYmVsQm94OkQsZ2V0RWxlbWVudFJvdGF0aW9uUG9pbnQ6TCxnZXRFbGVtZW50Um90YXRpb25PZmZzZXQ6RixnZXRMYWJlbFJvdGF0aW9uUG9pbnQ6TSxnZXRMYWJlbFJvdGF0aW9uT2Zmc2V0OlV9KX1mdW5jdGlvbiBYMWUodCxlLHIpe3ZhciBuPXIsaT1vKGZ1bmN0aW9uKEMpe2huKCJDYW4gbm90IHJlZ2lzdGVyIGAiK2UrImAgZm9yIGAiK3QrImAgc2luY2UgYCIrQysiYCBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgcHJvdG90eXBlIGFuZCBjYW4gbm90IGJlIG92ZXJyaWRkZW4iKX0sIm92ZXJyaWRlRXJyIik7aWYodD09PSJjb3JlIil7aWYodTQucHJvdG90eXBlW2VdKXJldHVybiBpKGUpO3U0LnByb3RvdHlwZVtlXT1yfWVsc2UgaWYodD09PSJjb2xsZWN0aW9uIil7aWYoU2EucHJvdG90eXBlW2VdKXJldHVybiBpKGUpO1NhLnByb3RvdHlwZVtlXT1yfWVsc2UgaWYodD09PSJsYXlvdXQiKXtmb3IodmFyIGE9byhmdW5jdGlvbihDKXt0aGlzLm9wdGlvbnM9QyxyLmNhbGwodGhpcyxDKSxVcih0aGlzLl9wcml2YXRlKXx8KHRoaXMuX3ByaXZhdGU9e30pLHRoaXMuX3ByaXZhdGUuY3k9Qy5jeSx0aGlzLl9wcml2YXRlLmxpc3RlbmVycz1bXSx0aGlzLmNyZWF0ZUVtaXR0ZXIoKX0sIkxheW91dCIpLHM9YS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShyLnByb3RvdHlwZSksbD1bXSx1PTA7dTxsLmxlbmd0aDt1Kyspe3ZhciBoPWxbdV07c1toXT1zW2hdfHxmdW5jdGlvbigpe3JldHVybiB0aGlzfX1zLnN0YXJ0JiYhcy5ydW4/cy5ydW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGFydCgpLHRoaXN9OiFzLnN0YXJ0JiZzLnJ1biYmKHMuc3RhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ydW4oKSx0aGlzfSk7dmFyIGY9ci5wcm90b3R5cGUuc3RvcDtzLnN0b3A9ZnVuY3Rpb24oKXt2YXIgXz10aGlzLm9wdGlvbnM7aWYoXyYmXy5hbmltYXRlKXt2YXIgQz10aGlzLmFuaW1hdGlvbnM7aWYoQylmb3IodmFyIEQ9MDtEPEMubGVuZ3RoO0QrKylDW0RdLnN0b3AoKX1yZXR1cm4gZj9mLmNhbGwodGhpcyk6dGhpcy5lbWl0KCJsYXlvdXRzdG9wIiksdGhpc30scy5kZXN0cm95fHwocy5kZXN0cm95PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxzLmN5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuY3l9O3ZhciBkPW8oZnVuY3Rpb24oQyl7cmV0dXJuIEMuX3ByaXZhdGUuY3l9LCJnZXRDeSIpLHA9e2FkZEV2ZW50RmllbGRzOm8oZnVuY3Rpb24oQyxEKXtELmxheW91dD1DLEQuY3k9ZChDKSxELnRhcmdldD1DfSwiYWRkRXZlbnRGaWVsZHMiKSxidWJibGU6byhmdW5jdGlvbigpe3JldHVybiEwfSwiYnViYmxlIikscGFyZW50Om8oZnVuY3Rpb24oQyl7cmV0dXJuIGQoQyl9LCJwYXJlbnQiKX07aXIocyx7Y3JlYXRlRW1pdHRlcjpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuZW1pdHRlcj1uZXcgYUMocCx0aGlzKSx0aGlzfSwiY3JlYXRlRW1pdHRlciIpLGVtaXR0ZXI6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmVtaXR0ZXJ9LCJlbWl0dGVyIiksb246byhmdW5jdGlvbihDLEQpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5vbihDLEQpLHRoaXN9LCJvbiIpLG9uZTpvKGZ1bmN0aW9uKEMsRCl7cmV0dXJuIHRoaXMuZW1pdHRlcigpLm9uZShDLEQpLHRoaXN9LCJvbmUiKSxvbmNlOm8oZnVuY3Rpb24oQyxEKXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkub25lKEMsRCksdGhpc30sIm9uY2UiKSxyZW1vdmVMaXN0ZW5lcjpvKGZ1bmN0aW9uKEMsRCl7cmV0dXJuIHRoaXMuZW1pdHRlcigpLnJlbW92ZUxpc3RlbmVyKEMsRCksdGhpc30sInJlbW92ZUxpc3RlbmVyIikscmVtb3ZlQWxsTGlzdGVuZXJzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkucmVtb3ZlQWxsTGlzdGVuZXJzKCksdGhpc30sInJlbW92ZUFsbExpc3RlbmVycyIpLGVtaXQ6byhmdW5jdGlvbihDLEQpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5lbWl0KEMsRCksdGhpc30sImVtaXQiKX0pLHVuLmV2ZW50QWxpYXNlc09uKHMpLG49YX1lbHNlIGlmKHQ9PT0icmVuZGVyZXIiJiZlIT09Im51bGwiJiZlIT09ImJhc2UiKXt2YXIgbT1qMWUoInJlbmRlcmVyIiwiYmFzZSIpLGc9bS5wcm90b3R5cGUseT1yLHY9ci5wcm90b3R5cGUseD1vKGZ1bmN0aW9uKCl7bS5hcHBseSh0aGlzLGFyZ3VtZW50cykseS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LCJSZW5kZXJlciIpLGI9eC5wcm90b3R5cGU7Zm9yKHZhciBUIGluIGcpe3ZhciBTPWdbVF0sdz12W1RdIT1udWxsO2lmKHcpcmV0dXJuIGkoVCk7YltUXT1TfWZvcih2YXIgRSBpbiB2KWJbRV09dltFXTtnLmNsaWVudEZ1bmN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKF8pe2JbX109YltfXXx8ZnVuY3Rpb24oKXtvaSgiUmVuZGVyZXIgZG9lcyBub3QgaW1wbGVtZW50IGByZW5kZXJlci4iK18rIigpYCBvbiBpdHMgcHJvdG90eXBlIil9fSksbj14fWVsc2UgaWYodD09PSJfX3Byb3RvX18ifHx0PT09ImNvbnN0cnVjdG9yInx8dD09PSJwcm90b3R5cGUiKXJldHVybiBvaSh0KyIgaXMgYW4gaWxsZWdhbCB0eXBlIHRvIGJlIHJlZ2lzdGVyZWQsIHBvc3NpYmx5IGxlYWQgdG8gcHJvdG90eXBlIHBvbGx1dGlvbnMiKTtyZXR1cm4gZmdlKHttYXA6cTFlLGtleXM6W3QsZV0sdmFsdWU6bn0pfWZ1bmN0aW9uIGoxZSh0LGUpe3JldHVybiBkZ2Uoe21hcDpxMWUsa2V5czpbdCxlXX0pfWZ1bmN0aW9uIHVldCh0LGUscixuLGkpe3JldHVybiBmZ2Uoe21hcDpZMWUsa2V5czpbdCxlLHIsbl0sdmFsdWU6aX0pfWZ1bmN0aW9uIGhldCh0LGUscixuKXtyZXR1cm4gZGdlKHttYXA6WTFlLGtleXM6W3QsZSxyLG5dfSl9dmFyIEhpLHowZSxwcWUsc2dlLG1xZSxncWUsaDQsWnQsbGksRW4sVXIseXFlLF90LHZxZSxGNix4byxmNCxvZ2UsQkIsbGdlLHhxZSxQZixicWUsVHFlLHdxZSxrcWUsZTQsRkIsSzYsY2dlLEcwZSxXaSxFcWUsU3FlLENxZSxBcWUsX3FlLERxZSx1Z2UsTHFlLGlyLFJxZSxOcWUsTXFlLElxZSxoZ2UsT3FlLGZnZSxkZ2UsS3AsV2IsRnFlLCRxZSx6cWUsR3FlLFE2LFZxZSxuQixVcWUsV3FlLHFxZSxYcWUsanFlLHR5LHBnZSxLcWUsUXFlLEZiLEpxZSxlWWUsdFllLG5ZZSxpWWUsYVllLFYwZSxtZ2UsbFllLGNZZSxkNCxVMGUsaFllLGZZZSxkWWUscFllLEgwZSxnWWUseVllLHZZZSxwNCxpQixnZ2UsYlllLCQ2LG5oLFgxLHlnZSxxYix2Z2UsdDQscjQsVFllLExmLG02LHdZZSxCZix4Z2Usa1llLFcwZSxFWWUsU1llLCRCLGJnZSx6NixxMGUsekIsb2ksVGdlLGhuLENZZSxRYyxBWWUsd2dlLF9ZZSxrZ2Usb2EsRmYsR0IsRFllLFdsLE5mLExZZSxaYyxSWWUsTlllLGF5LFo2LFkwZSxuNCxNWWUsbTQsSVllLE9ZZSxQWWUsQlllLEZZZSwkWWUselllLEdZZSxWWWUsVVllLEhZZSxhQixXWWUscVllLEo2LEVnZSxqMSxZWWUsWFllLGpZZSxLWWUsUVllLGc2LFZCLFNnZSxRcCxXcCxaWWUsc2EsUTEsSlllLGk0LFlzLGVYZSx0WGUsclhlLENnZSxuWGUsRDYsTDYsWDBlLFVCLHJ5LGlYZSxBZ2UsX2dlLGFYZSxzWGUsb1hlLGxYZSxjWGUsdVhlLHFzLGloLGhYZSxHNixWNixmWGUsanAsWWIsc0IsTWYsYTQsZFhlLHk2LFRzLERnZSxiQixacCxMZ2UsSEIscFhlLFRCLG1YZSxnWGUsajBlLFoxLEswZSxKMSx5WGUsd0IsdlhlLHhYZSxiWGUsVFhlLFJnZSx3WGUsa1hlLEVYZSxTWGUsQ1hlLEFYZSxfWGUsUTBlLERYZSxMWGUsTmdlLFowZSxKMGUsUlhlLE5YZSwkYixueSxNWGUsV0IsVTYsb0IsTWdlLElnZSxJWGUsT1hlLFBYZSxlbWUsdG1lLEJYZSxGWGUsJFhlLHpYZSxHWGUscm1lLFZYZSxVWGUsSFhlLFdYZSxubWUsdjYscVhlLFlYZSxpbWUsWFhlLGpYZSxLWGUsUVhlLFpYZSxKWGUsYW1lLGVqZSxzbWUsdGplLHJqZSxuamUseDYsaWplLGI2LGFqZSxPZ2UsUGdlLEJnZSxGZ2UsYWgsb21lLCRnZSxsbWUsY21lLHNqZSxzeSxrQixKcCxvamUsbGplLHRDLGNqZSx1amUsZmplLGRqZSxwamUsbWplLGdqZSx2amUseGplLGxCLHVtZSxUamUsd2plLGtqZSxTamUsQ2plLEFqZSxfamUsRGplLExqZSxSamUsTmplLElqZSxQamUscUIsRmplLHM0LHpqZSxWamUsVWplLEhqZSxXamUsWWplLFhqZSxqamUsUWplLFpqZSxlS2UsaG1lLHJLZSx6Z2UsckMsYUtlLHNLZSxsS2UsdUtlLGZLZSxwS2UsbUtlLGdLZSx5S2UseEtlLFRLZSxuQyxFS2UsQ0tlLF9LZSxMS2UsR2dlLFJLZSxOS2UsTUtlLE9LZSxQS2UsQktlLEZLZSxWZ2UsVWdlLHpLZSxmbWUsZG1lLEdLZSxXZ2UscWdlLEhLZSxYQixZS2UsaktlLEtLZSxwbWUsWktlLEpLZSxlUWUsclFlLG5RZSxpUWUsc1FlLGxRZSx1UWUsZlFlLHBRZSxtUWUsZ1FlLHVuLHlRZSxSNixWcixnbiwkdCxFQix2UWUseFFlLGJRZSxVMSxSZixTQixUUWUsd1FlLGtRZSxFUWUsU1FlLFlnZSxDUWUsQVFlLGpCLF9RZSxwaSxWbixEUWUsTFFlLFJRZSwkZix6ZixJZixhbCxpeSxvNCxLZ2UsTVFlLGlDLHFsLFFnZSxaZ2UsbW1lLElRZSxleSxIZixpbCxIbCxxcCx6YixUNix1QixPUWUsUFFlLEpnZSxlMWUsZ21lLGw0LHltZSx2bWUsQlFlLFhiLGc0LHQxZSxGUWUsJFFlLHpRZSxHUWUsVlFlLFVRZSxIUWUsV1FlLHFRZSx4bWUsWVFlLFhRZSxqUWUscjFlLG4xZSxLUWUsaTFlLGJtZSxRUWUsR2YsYTFlLFRtZSxaUWUsSlFlLGs2LHMxZSxvMWUsUXIsZVplLGwxZSxINix0WmUsclplLE42LEVhLHV5LG5aZSxpWmUsYVplLHNaZSxPZixIYSxrbWUsRW1lLFNtZSxTYSxNbixvWmUsY1plLE5uLE02LGZaZSxkWmUsRTYsdTFlLENCLEk2LHBaZSxtWmUsQUIsTzYscWEsS2IsZ1plLHk0LFpCLEpjLGxDLEpCLGthLGNDLFVhLFdhLHlaZSx2WmUsZTAsYzQsdTQsVzYseFplLGJaZSxxMSxObWUsVFplLHdaZSxmQixrWmUsRVplLFNaZSxDWmUsQVplLF9aZSxwMWUsRFplLExaZSxSWmUsTW1lLE5aZSxNWmUscTYsSVplLE9aZSxQWmUsQlplLEZaZSwkWmUsSW1lLHpaZSxHWmUsVlplLFVaZSxIWmUsT21lLFBtZSx0RixyMCxZNixfQixEQixLYyxubCxCbWUsRm1lLFhwLFA2LHJoLFVwLFlwLGpjLFkxLFM2LHgxZSxiMWUsTEIsUkIsJG1lLHptZSxXWmUscVplLFlhLHY0LG5GLGV1LGsxZSxFMWUsWFplLFMxZSxHbWUsVm1lLGhDLGZDLEMxZSxBMWUsZnksc2gseDQsVW1lLGpaZSxfMWUsZHksZEIsRDFlLEtaZSxIbWUsQzYsQjYsTkIsTDFlLFFaZSxaWmUsSlplLGVKZSx0SmUsckplLG5KZSxpSmUsYUplLHNKZSxvSmUsbEplLGNKZSxLMSx1SmUsamIsWWksaEplLFFiLFg2LGZKZSxkSmUscEplLG1KZSxnSmUseUplLHZKZSx4SmUsV21lLGJKZSxxbWUsVEplLFIxZSxDYSxZbWUsd0plLE4xZSxYbWUsdHUsQUplLF9KZSxESmUsTEplLFJKZSxwQixvaCxNMWUsaUYsbjAscHksSTFlLHdzLE5KZSxVYixRbWUsSmIsSGIsVkplLFVKZSxXSmUseUIsWm1lLEptZSx2QixxSmUsWUplLCQxZSxXZix0Z2UscmdlLE1CLElCLFYxZSxIcCxiNCxIMWUsYWV0LFNyLHNldCxvZXQsY2V0LHExZSxZMWUsT0IsSzFlLHQwLGZldCxzbCxvRj1OKCgpPT57InVzZSBzdHJpY3QiO28ocWksIl90eXBlb2YiKTtvKFZmLCJfY2xhc3NDYWxsQ2hlY2siKTtvKCQwZSwiX2RlZmluZVByb3BlcnRpZXMiKTtvKFVmLCJfY3JlYXRlQ2xhc3MiKTtvKGlnZSwiX2RlZmluZVByb3BlcnR5JDEiKTtvKFJpLCJfc2xpY2VkVG9BcnJheSIpO28oYWdlLCJfdG9Db25zdW1hYmxlQXJyYXkiKTtvKGxxZSwiX2FycmF5V2l0aG91dEhvbGVzIik7byhjcWUsIl9hcnJheVdpdGhIb2xlcyIpO28odXFlLCJfaXRlcmFibGVUb0FycmF5Iik7byhocWUsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIpO28oUEIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIpO28oeEIsIl9hcnJheUxpa2VUb0FycmF5Iik7byhmcWUsIl9ub25JdGVyYWJsZVNwcmVhZCIpO28oZHFlLCJfbm9uSXRlcmFibGVSZXN0Iik7byh2bywiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiKTtIaT10eXBlb2Ygd2luZG93PiJ1Ij9udWxsOndpbmRvdyx6MGU9SGk/SGkubmF2aWdhdG9yOm51bGw7SGkmJkhpLmRvY3VtZW50O3BxZT1xaSgiIiksc2dlPXFpKHt9KSxtcWU9cWkoZnVuY3Rpb24oKXt9KSxncWU9dHlwZW9mIEhUTUxFbGVtZW50PiJ1Ij8idW5kZWZpbmVkIjpxaShIVE1MRWxlbWVudCksaDQ9byhmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5pbnN0YW5jZVN0cmluZyYmbGkoZS5pbnN0YW5jZVN0cmluZyk/ZS5pbnN0YW5jZVN0cmluZygpOm51bGx9LCJpbnN0YW5jZVN0ciIpLFp0PW8oZnVuY3Rpb24oZSl7cmV0dXJuIGUhPW51bGwmJnFpKGUpPT1wcWV9LCJzdHJpbmciKSxsaT1vKGZ1bmN0aW9uKGUpe3JldHVybiBlIT1udWxsJiZxaShlKT09PW1xZX0sImZuIiksRW49byhmdW5jdGlvbihlKXtyZXR1cm4heG8oZSkmJihBcnJheS5pc0FycmF5P0FycmF5LmlzQXJyYXkoZSk6ZSE9bnVsbCYmZSBpbnN0YW5jZW9mIEFycmF5KX0sImFycmF5IiksVXI9byhmdW5jdGlvbihlKXtyZXR1cm4gZSE9bnVsbCYmcWkoZSk9PT1zZ2UmJiFFbihlKSYmZS5jb25zdHJ1Y3Rvcj09PU9iamVjdH0sInBsYWluT2JqZWN0IikseXFlPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGUhPW51bGwmJnFpKGUpPT09c2dlfSwib2JqZWN0IiksX3Q9byhmdW5jdGlvbihlKXtyZXR1cm4gZSE9bnVsbCYmcWkoZSk9PT1xaSgxKSYmIWlzTmFOKGUpfSwibnVtYmVyIiksdnFlPW8oZnVuY3Rpb24oZSl7cmV0dXJuIF90KGUpJiZNYXRoLmZsb29yKGUpPT09ZX0sImludGVnZXIiKSxGNj1vKGZ1bmN0aW9uKGUpe2lmKGdxZSE9PSJ1bmRlZmluZWQiKXJldHVybiBlIT1udWxsJiZlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnR9LCJodG1sRWxlbWVudCIpLHhvPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGY0KGUpfHxvZ2UoZSl9LCJlbGVtZW50T3JDb2xsZWN0aW9uIiksZjQ9byhmdW5jdGlvbihlKXtyZXR1cm4gaDQoZSk9PT0iY29sbGVjdGlvbiImJmUuX3ByaXZhdGUuc2luZ2xlfSwiZWxlbWVudCIpLG9nZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBoNChlKT09PSJjb2xsZWN0aW9uIiYmIWUuX3ByaXZhdGUuc2luZ2xlfSwiY29sbGVjdGlvbiIpLEJCPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGg0KGUpPT09ImNvcmUifSwiY29yZSIpLGxnZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBoNChlKT09PSJzdHlsZXNoZWV0In0sInN0eWxlc2hlZXQiKSx4cWU9byhmdW5jdGlvbihlKXtyZXR1cm4gaDQoZSk9PT0iZXZlbnQifSwiZXZlbnQiKSxQZj1vKGZ1bmN0aW9uKGUpe3JldHVybiBlPT1udWxsPyEwOiEhKGU9PT0iInx8ZS5tYXRjaCgvXlxzKyQvKSl9LCJlbXB0eVN0cmluZyIpLGJxZT1vKGZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgSFRNTEVsZW1lbnQ+InUiPyExOmUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudH0sImRvbUVsZW1lbnQiKSxUcWU9byhmdW5jdGlvbihlKXtyZXR1cm4gVXIoZSkmJl90KGUueDEpJiZfdChlLngyKSYmX3QoZS55MSkmJl90KGUueTIpfSwiYm91bmRpbmdCb3giKSx3cWU9byhmdW5jdGlvbihlKXtyZXR1cm4geXFlKGUpJiZsaShlLnRoZW4pfSwicHJvbWlzZSIpLGtxZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIHowZSYmejBlLnVzZXJBZ2VudC5tYXRjaCgvbXNpZXx0cmlkZW50fGVkZ2UvaSl9LCJtcyIpLGU0PW8oZnVuY3Rpb24oZSxyKXtyfHwocj1vKGZ1bmN0aW9uKCl7aWYoYXJndW1lbnRzLmxlbmd0aD09PTEpcmV0dXJuIGFyZ3VtZW50c1swXTtpZihhcmd1bWVudHMubGVuZ3RoPT09MClyZXR1cm4idW5kZWZpbmVkIjtmb3IodmFyIGE9W10scz0wO3M8YXJndW1lbnRzLmxlbmd0aDtzKyspYS5wdXNoKGFyZ3VtZW50c1tzXSk7cmV0dXJuIGEuam9pbigiJCIpfSwia2V5Rm4iKSk7dmFyIG49byhmdW5jdGlvbiBpKCl7dmFyIGE9dGhpcyxzPWFyZ3VtZW50cyxsLHU9ci5hcHBseShhLHMpLGg9aS5jYWNoZTtyZXR1cm4obD1oW3VdKXx8KGw9aFt1XT1lLmFwcGx5KGEscykpLGx9LCJtZW1vaXplZEZuIik7cmV0dXJuIG4uY2FjaGU9e30sbn0sIm1lbW9pemUiKSxGQj1lNChmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKC8oW0EtWl0pL2csZnVuY3Rpb24oZSl7cmV0dXJuIi0iK2UudG9Mb3dlckNhc2UoKX0pfSksSzY9ZTQoZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvKC1cdykvZyxmdW5jdGlvbihlKXtyZXR1cm4gZVsxXS50b1VwcGVyQ2FzZSgpfSl9KSxjZ2U9ZTQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlWzBdLnRvVXBwZXJDYXNlKCkrZS5zdWJzdHJpbmcoMSl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrIiQiK2V9KSxHMGU9byhmdW5jdGlvbihlKXtyZXR1cm4gUGYoZSk/ZTplLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Uuc3Vic3RyaW5nKDEpfSwiY2FwaXRhbGl6ZSIpLFdpPSIoPzpbLStdPyg/Oig/OlxcZCt8XFxkKlxcLlxcZCspKD86W0VlXVsrLV0/XFxkKyk/KSkiLEVxZT0icmdiW2FdP1xcKCgiK1dpKyJbJV0/KVxccyosXFxzKigiK1dpKyJbJV0/KVxccyosXFxzKigiK1dpKyJbJV0/KSg/OlxccyosXFxzKigiK1dpKyIpKT9cXCkiLFNxZT0icmdiW2FdP1xcKCg/OiIrV2krIlslXT8pXFxzKixcXHMqKD86IitXaSsiWyVdPylcXHMqLFxccyooPzoiK1dpKyJbJV0/KSg/OlxccyosXFxzKig/OiIrV2krIikpP1xcKSIsQ3FlPSJoc2xbYV0/XFwoKCIrV2krIilcXHMqLFxccyooIitXaSsiWyVdKVxccyosXFxzKigiK1dpKyJbJV0pKD86XFxzKixcXHMqKCIrV2krIikpP1xcKSIsQXFlPSJoc2xbYV0/XFwoKD86IitXaSsiKVxccyosXFxzKig/OiIrV2krIlslXSlcXHMqLFxccyooPzoiK1dpKyJbJV0pKD86XFxzKixcXHMqKD86IitXaSsiKSk/XFwpIixfcWU9IlxcI1swLTlhLWZBLUZdezN9IixEcWU9IlxcI1swLTlhLWZBLUZdezZ9Iix1Z2U9byhmdW5jdGlvbihlLHIpe3JldHVybiBlPHI/LTE6ZT5yPzE6MH0sImFzY2VuZGluZyIpLExxZT1vKGZ1bmN0aW9uKGUscil7cmV0dXJuLTEqdWdlKGUscil9LCJkZXNjZW5kaW5nIiksaXI9T2JqZWN0LmFzc2lnbiE9bnVsbD9PYmplY3QuYXNzaWduLmJpbmQoT2JqZWN0KTpmdW5jdGlvbih0KXtmb3IodmFyIGU9YXJndW1lbnRzLHI9MTtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtpZihuIT1udWxsKWZvcih2YXIgaT1PYmplY3Qua2V5cyhuKSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBzPWlbYV07dFtzXT1uW3NdfX1yZXR1cm4gdH0sUnFlPW8oZnVuY3Rpb24oZSl7aWYoISghKGUubGVuZ3RoPT09NHx8ZS5sZW5ndGg9PT03KXx8ZVswXSE9PSIjIikpe3ZhciByPWUubGVuZ3RoPT09NCxuLGksYSxzPTE2O3JldHVybiByPyhuPXBhcnNlSW50KGVbMV0rZVsxXSxzKSxpPXBhcnNlSW50KGVbMl0rZVsyXSxzKSxhPXBhcnNlSW50KGVbM10rZVszXSxzKSk6KG49cGFyc2VJbnQoZVsxXStlWzJdLHMpLGk9cGFyc2VJbnQoZVszXStlWzRdLHMpLGE9cGFyc2VJbnQoZVs1XStlWzZdLHMpKSxbbixpLGFdfX0sImhleDJ0dXBsZSIpLE5xZT1vKGZ1bmN0aW9uKGUpe3ZhciByLG4saSxhLHMsbCx1LGg7ZnVuY3Rpb24gZihnLHksdil7cmV0dXJuIHY8MCYmKHYrPTEpLHY+MSYmKHYtPTEpLHY8MS82P2crKHktZykqNip2OnY8MS8yP3k6djwyLzM/ZysoeS1nKSooMi8zLXYpKjY6Z31vKGYsImh1ZTJyZ2IiKTt2YXIgZD1uZXcgUmVnRXhwKCJeIitDcWUrIiQiKS5leGVjKGUpO2lmKGQpe2lmKG49cGFyc2VJbnQoZFsxXSksbjwwP249KDM2MC0gLTEqbiUzNjApJTM2MDpuPjM2MCYmKG49biUzNjApLG4vPTM2MCxpPXBhcnNlRmxvYXQoZFsyXSksaTwwfHxpPjEwMHx8KGk9aS8xMDAsYT1wYXJzZUZsb2F0KGRbM10pLGE8MHx8YT4xMDApfHwoYT1hLzEwMCxzPWRbNF0scyE9PXZvaWQgMCYmKHM9cGFyc2VGbG9hdChzKSxzPDB8fHM+MSkpKXJldHVybjtpZihpPT09MClsPXU9aD1NYXRoLnJvdW5kKGEqMjU1KTtlbHNle3ZhciBwPWE8LjU/YSooMStpKTphK2ktYSppLG09MiphLXA7bD1NYXRoLnJvdW5kKDI1NSpmKG0scCxuKzEvMykpLHU9TWF0aC5yb3VuZCgyNTUqZihtLHAsbikpLGg9TWF0aC5yb3VuZCgyNTUqZihtLHAsbi0xLzMpKX1yPVtsLHUsaCxzXX1yZXR1cm4gcn0sImhzbDJ0dXBsZSIpLE1xZT1vKGZ1bmN0aW9uKGUpe3ZhciByLG49bmV3IFJlZ0V4cCgiXiIrRXFlKyIkIikuZXhlYyhlKTtpZihuKXtyPVtdO2Zvcih2YXIgaT1bXSxhPTE7YTw9MzthKyspe3ZhciBzPW5bYV07aWYoc1tzLmxlbmd0aC0xXT09PSIlIiYmKGlbYV09ITApLHM9cGFyc2VGbG9hdChzKSxpW2FdJiYocz1zLzEwMCoyNTUpLHM8MHx8cz4yNTUpcmV0dXJuO3IucHVzaChNYXRoLmZsb29yKHMpKX12YXIgbD1pWzFdfHxpWzJdfHxpWzNdLHU9aVsxXSYmaVsyXSYmaVszXTtpZihsJiYhdSlyZXR1cm47dmFyIGg9bls0XTtpZihoIT09dm9pZCAwKXtpZihoPXBhcnNlRmxvYXQoaCksaDwwfHxoPjEpcmV0dXJuO3IucHVzaChoKX19cmV0dXJuIHJ9LCJyZ2IydHVwbGUiKSxJcWU9byhmdW5jdGlvbihlKXtyZXR1cm4gT3FlW2UudG9Mb3dlckNhc2UoKV19LCJjb2xvcm5hbWUydHVwbGUiKSxoZ2U9byhmdW5jdGlvbihlKXtyZXR1cm4oRW4oZSk/ZTpudWxsKXx8SXFlKGUpfHxScWUoZSl8fE1xZShlKXx8TnFlKGUpfSwiY29sb3IydHVwbGUiKSxPcWU9e3RyYW5zcGFyZW50OlswLDAsMCwwXSxhbGljZWJsdWU6WzI0MCwyNDgsMjU1XSxhbnRpcXVld2hpdGU6WzI1MCwyMzUsMjE1XSxhcXVhOlswLDI1NSwyNTVdLGFxdWFtYXJpbmU6WzEyNywyNTUsMjEyXSxhenVyZTpbMjQwLDI1NSwyNTVdLGJlaWdlOlsyNDUsMjQ1LDIyMF0sYmlzcXVlOlsyNTUsMjI4LDE5Nl0sYmxhY2s6WzAsMCwwXSxibGFuY2hlZGFsbW9uZDpbMjU1LDIzNSwyMDVdLGJsdWU6WzAsMCwyNTVdLGJsdWV2aW9sZXQ6WzEzOCw0MywyMjZdLGJyb3duOlsxNjUsNDIsNDJdLGJ1cmx5d29vZDpbMjIyLDE4NCwxMzVdLGNhZGV0Ymx1ZTpbOTUsMTU4LDE2MF0sY2hhcnRyZXVzZTpbMTI3LDI1NSwwXSxjaG9jb2xhdGU6WzIxMCwxMDUsMzBdLGNvcmFsOlsyNTUsMTI3LDgwXSxjb3JuZmxvd2VyYmx1ZTpbMTAwLDE0OSwyMzddLGNvcm5zaWxrOlsyNTUsMjQ4LDIyMF0sY3JpbXNvbjpbMjIwLDIwLDYwXSxjeWFuOlswLDI1NSwyNTVdLGRhcmtibHVlOlswLDAsMTM5XSxkYXJrY3lhbjpbMCwxMzksMTM5XSxkYXJrZ29sZGVucm9kOlsxODQsMTM0LDExXSxkYXJrZ3JheTpbMTY5LDE2OSwxNjldLGRhcmtncmVlbjpbMCwxMDAsMF0sZGFya2dyZXk6WzE2OSwxNjksMTY5XSxkYXJra2hha2k6WzE4OSwxODMsMTA3XSxkYXJrbWFnZW50YTpbMTM5LDAsMTM5XSxkYXJrb2xpdmVncmVlbjpbODUsMTA3LDQ3XSxkYXJrb3JhbmdlOlsyNTUsMTQwLDBdLGRhcmtvcmNoaWQ6WzE1Myw1MCwyMDRdLGRhcmtyZWQ6WzEzOSwwLDBdLGRhcmtzYWxtb246WzIzMywxNTAsMTIyXSxkYXJrc2VhZ3JlZW46WzE0MywxODgsMTQzXSxkYXJrc2xhdGVibHVlOls3Miw2MSwxMzldLGRhcmtzbGF0ZWdyYXk6WzQ3LDc5LDc5XSxkYXJrc2xhdGVncmV5Ols0Nyw3OSw3OV0sZGFya3R1cnF1b2lzZTpbMCwyMDYsMjA5XSxkYXJrdmlvbGV0OlsxNDgsMCwyMTFdLGRlZXBwaW5rOlsyNTUsMjAsMTQ3XSxkZWVwc2t5Ymx1ZTpbMCwxOTEsMjU1XSxkaW1ncmF5OlsxMDUsMTA1LDEwNV0sZGltZ3JleTpbMTA1LDEwNSwxMDVdLGRvZGdlcmJsdWU6WzMwLDE0NCwyNTVdLGZpcmVicmljazpbMTc4LDM0LDM0XSxmbG9yYWx3aGl0ZTpbMjU1LDI1MCwyNDBdLGZvcmVzdGdyZWVuOlszNCwxMzksMzRdLGZ1Y2hzaWE6WzI1NSwwLDI1NV0sZ2FpbnNib3JvOlsyMjAsMjIwLDIyMF0sZ2hvc3R3aGl0ZTpbMjQ4LDI0OCwyNTVdLGdvbGQ6WzI1NSwyMTUsMF0sZ29sZGVucm9kOlsyMTgsMTY1LDMyXSxncmF5OlsxMjgsMTI4LDEyOF0sZ3JleTpbMTI4LDEyOCwxMjhdLGdyZWVuOlswLDEyOCwwXSxncmVlbnllbGxvdzpbMTczLDI1NSw0N10saG9uZXlkZXc6WzI0MCwyNTUsMjQwXSxob3RwaW5rOlsyNTUsMTA1LDE4MF0saW5kaWFucmVkOlsyMDUsOTIsOTJdLGluZGlnbzpbNzUsMCwxMzBdLGl2b3J5OlsyNTUsMjU1LDI0MF0sa2hha2k6WzI0MCwyMzAsMTQwXSxsYXZlbmRlcjpbMjMwLDIzMCwyNTBdLGxhdmVuZGVyYmx1c2g6WzI1NSwyNDAsMjQ1XSxsYXduZ3JlZW46WzEyNCwyNTIsMF0sbGVtb25jaGlmZm9uOlsyNTUsMjUwLDIwNV0sbGlnaHRibHVlOlsxNzMsMjE2LDIzMF0sbGlnaHRjb3JhbDpbMjQwLDEyOCwxMjhdLGxpZ2h0Y3lhbjpbMjI0LDI1NSwyNTVdLGxpZ2h0Z29sZGVucm9keWVsbG93OlsyNTAsMjUwLDIxMF0sbGlnaHRncmF5OlsyMTEsMjExLDIxMV0sbGlnaHRncmVlbjpbMTQ0LDIzOCwxNDRdLGxpZ2h0Z3JleTpbMjExLDIxMSwyMTFdLGxpZ2h0cGluazpbMjU1LDE4MiwxOTNdLGxpZ2h0c2FsbW9uOlsyNTUsMTYwLDEyMl0sbGlnaHRzZWFncmVlbjpbMzIsMTc4LDE3MF0sbGlnaHRza3libHVlOlsxMzUsMjA2LDI1MF0sbGlnaHRzbGF0ZWdyYXk6WzExOSwxMzYsMTUzXSxsaWdodHNsYXRlZ3JleTpbMTE5LDEzNiwxNTNdLGxpZ2h0c3RlZWxibHVlOlsxNzYsMTk2LDIyMl0sbGlnaHR5ZWxsb3c6WzI1NSwyNTUsMjI0XSxsaW1lOlswLDI1NSwwXSxsaW1lZ3JlZW46WzUwLDIwNSw1MF0sbGluZW46WzI1MCwyNDAsMjMwXSxtYWdlbnRhOlsyNTUsMCwyNTVdLG1hcm9vbjpbMTI4LDAsMF0sbWVkaXVtYXF1YW1hcmluZTpbMTAyLDIwNSwxNzBdLG1lZGl1bWJsdWU6WzAsMCwyMDVdLG1lZGl1bW9yY2hpZDpbMTg2LDg1LDIxMV0sbWVkaXVtcHVycGxlOlsxNDcsMTEyLDIxOV0sbWVkaXVtc2VhZ3JlZW46WzYwLDE3OSwxMTNdLG1lZGl1bXNsYXRlYmx1ZTpbMTIzLDEwNCwyMzhdLG1lZGl1bXNwcmluZ2dyZWVuOlswLDI1MCwxNTRdLG1lZGl1bXR1cnF1b2lzZTpbNzIsMjA5LDIwNF0sbWVkaXVtdmlvbGV0cmVkOlsxOTksMjEsMTMzXSxtaWRuaWdodGJsdWU6WzI1LDI1LDExMl0sbWludGNyZWFtOlsyNDUsMjU1LDI1MF0sbWlzdHlyb3NlOlsyNTUsMjI4LDIyNV0sbW9jY2FzaW46WzI1NSwyMjgsMTgxXSxuYXZham93aGl0ZTpbMjU1LDIyMiwxNzNdLG5hdnk6WzAsMCwxMjhdLG9sZGxhY2U6WzI1MywyNDUsMjMwXSxvbGl2ZTpbMTI4LDEyOCwwXSxvbGl2ZWRyYWI6WzEwNywxNDIsMzVdLG9yYW5nZTpbMjU1LDE2NSwwXSxvcmFuZ2VyZWQ6WzI1NSw2OSwwXSxvcmNoaWQ6WzIxOCwxMTIsMjE0XSxwYWxlZ29sZGVucm9kOlsyMzgsMjMyLDE3MF0scGFsZWdyZWVuOlsxNTIsMjUxLDE1Ml0scGFsZXR1cnF1b2lzZTpbMTc1LDIzOCwyMzhdLHBhbGV2aW9sZXRyZWQ6WzIxOSwxMTIsMTQ3XSxwYXBheWF3aGlwOlsyNTUsMjM5LDIxM10scGVhY2hwdWZmOlsyNTUsMjE4LDE4NV0scGVydTpbMjA1LDEzMyw2M10scGluazpbMjU1LDE5MiwyMDNdLHBsdW06WzIyMSwxNjAsMjIxXSxwb3dkZXJibHVlOlsxNzYsMjI0LDIzMF0scHVycGxlOlsxMjgsMCwxMjhdLHJlZDpbMjU1LDAsMF0scm9zeWJyb3duOlsxODgsMTQzLDE0M10scm95YWxibHVlOls2NSwxMDUsMjI1XSxzYWRkbGVicm93bjpbMTM5LDY5LDE5XSxzYWxtb246WzI1MCwxMjgsMTE0XSxzYW5keWJyb3duOlsyNDQsMTY0LDk2XSxzZWFncmVlbjpbNDYsMTM5LDg3XSxzZWFzaGVsbDpbMjU1LDI0NSwyMzhdLHNpZW5uYTpbMTYwLDgyLDQ1XSxzaWx2ZXI6WzE5MiwxOTIsMTkyXSxza3libHVlOlsxMzUsMjA2LDIzNV0sc2xhdGVibHVlOlsxMDYsOTAsMjA1XSxzbGF0ZWdyYXk6WzExMiwxMjgsMTQ0XSxzbGF0ZWdyZXk6WzExMiwxMjgsMTQ0XSxzbm93OlsyNTUsMjUwLDI1MF0sc3ByaW5nZ3JlZW46WzAsMjU1LDEyN10sc3RlZWxibHVlOls3MCwxMzAsMTgwXSx0YW46WzIxMCwxODAsMTQwXSx0ZWFsOlswLDEyOCwxMjhdLHRoaXN0bGU6WzIxNiwxOTEsMjE2XSx0b21hdG86WzI1NSw5OSw3MV0sdHVycXVvaXNlOls2NCwyMjQsMjA4XSx2aW9sZXQ6WzIzOCwxMzAsMjM4XSx3aGVhdDpbMjQ1LDIyMiwxNzldLHdoaXRlOlsyNTUsMjU1LDI1NV0sd2hpdGVzbW9rZTpbMjQ1LDI0NSwyNDVdLHllbGxvdzpbMjU1LDI1NSwwXSx5ZWxsb3dncmVlbjpbMTU0LDIwNSw1MF19LGZnZT1vKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj1lLm1hcCxuPWUua2V5cyxpPW4ubGVuZ3RoLGE9MDthPGk7YSsrKXt2YXIgcz1uW2FdO2lmKFVyKHMpKXRocm93IEVycm9yKCJUcmllZCB0byBzZXQgbWFwIHdpdGggb2JqZWN0IGtleSIpO2E8bi5sZW5ndGgtMT8ocltzXT09bnVsbCYmKHJbc109e30pLHI9cltzXSk6cltzXT1lLnZhbHVlfX0sInNldE1hcCIpLGRnZT1vKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj1lLm1hcCxuPWUua2V5cyxpPW4ubGVuZ3RoLGE9MDthPGk7YSsrKXt2YXIgcz1uW2FdO2lmKFVyKHMpKXRocm93IEVycm9yKCJUcmllZCB0byBnZXQgbWFwIHdpdGggb2JqZWN0IGtleSIpO2lmKHI9cltzXSxyPT1udWxsKXJldHVybiByfXJldHVybiByfSwiZ2V0TWFwIik7byhQcWUsImlzT2JqZWN0Iik7S3A9UHFlLFdiPXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHNlbGY8InUiP3NlbGY6e307byhCcWUsImNyZWF0ZUNvbW1vbmpzTW9kdWxlIik7RnFlPXR5cGVvZiBXYj09Im9iamVjdCImJldiJiZXYi5PYmplY3Q9PT1PYmplY3QmJldiLCRxZT1GcWUsenFlPXR5cGVvZiBzZWxmPT0ib2JqZWN0IiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsR3FlPSRxZXx8enFlfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLFE2PUdxZSxWcWU9byhmdW5jdGlvbigpe3JldHVybiBRNi5EYXRlLm5vdygpfSwibm93IiksbkI9VnFlLFVxZT0vXHMvO28oSHFlLCJ0cmltbWVkRW5kSW5kZXgiKTtXcWU9SHFlLHFxZT0vXlxzKy87byhZcWUsImJhc2VUcmltIik7WHFlPVlxZSxqcWU9UTYuU3ltYm9sLHR5PWpxZSxwZ2U9T2JqZWN0LnByb3RvdHlwZSxLcWU9cGdlLmhhc093blByb3BlcnR5LFFxZT1wZ2UudG9TdHJpbmcsRmI9dHk/dHkudG9TdHJpbmdUYWc6dm9pZCAwO28oWnFlLCJnZXRSYXdUYWciKTtKcWU9WnFlLGVZZT1PYmplY3QucHJvdG90eXBlLHRZZT1lWWUudG9TdHJpbmc7byhyWWUsIm9iamVjdFRvU3RyaW5nIik7blllPXJZZSxpWWU9IltvYmplY3QgTnVsbF0iLGFZZT0iW29iamVjdCBVbmRlZmluZWRdIixWMGU9dHk/dHkudG9TdHJpbmdUYWc6dm9pZCAwO28oc1llLCJiYXNlR2V0VGFnIik7bWdlPXNZZTtvKG9ZZSwiaXNPYmplY3RMaWtlIik7bFllPW9ZZSxjWWU9IltvYmplY3QgU3ltYm9sXSI7byh1WWUsImlzU3ltYm9sIik7ZDQ9dVllLFUwZT1OYU4saFllPS9eWy0rXTB4WzAtOWEtZl0rJC9pLGZZZT0vXjBiWzAxXSskL2ksZFllPS9eMG9bMC03XSskL2kscFllPXBhcnNlSW50O28obVllLCJ0b051bWJlciIpO0gwZT1tWWUsZ1llPSJFeHBlY3RlZCBhIGZ1bmN0aW9uIix5WWU9TWF0aC5tYXgsdlllPU1hdGgubWluO28oeFllLCJkZWJvdW5jZSIpO3A0PXhZZSxpQj1IaT9IaS5wZXJmb3JtYW5jZTpudWxsLGdnZT1pQiYmaUIubm93P2Z1bmN0aW9uKCl7cmV0dXJuIGlCLm5vdygpfTpmdW5jdGlvbigpe3JldHVybiBEYXRlLm5vdygpfSxiWWU9ZnVuY3Rpb24oKXtpZihIaSl7aWYoSGkucmVxdWVzdEFuaW1hdGlvbkZyYW1lKXJldHVybiBmdW5jdGlvbih0KXtIaS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodCl9O2lmKEhpLm1velJlcXVlc3RBbmltYXRpb25GcmFtZSlyZXR1cm4gZnVuY3Rpb24odCl7SGkubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lKHQpfTtpZihIaS53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUpcmV0dXJuIGZ1bmN0aW9uKHQpe0hpLndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSh0KX07aWYoSGkubXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWUpcmV0dXJuIGZ1bmN0aW9uKHQpe0hpLm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lKHQpfX1yZXR1cm4gZnVuY3Rpb24odCl7dCYmc2V0VGltZW91dChmdW5jdGlvbigpe3QoZ2dlKCkpfSwxZTMvNjApfX0oKSwkNj1vKGZ1bmN0aW9uKGUpe3JldHVybiBiWWUoZSl9LCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiKSxuaD1nZ2UsWDE9OTI2MSx5Z2U9NjU1OTkscWI9NTM4MSx2Z2U9byhmdW5jdGlvbihlKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOlgxLG49cixpO2k9ZS5uZXh0KCksIWkuZG9uZTspbj1uKnlnZStpLnZhbHVlfDA7cmV0dXJuIG59LCJoYXNoSXRlcmFibGVJbnRzIiksdDQ9byhmdW5jdGlvbihlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06WDE7cmV0dXJuIHIqeWdlK2V8MH0sImhhc2hJbnQiKSxyND1vKGZ1bmN0aW9uKGUpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpxYjtyZXR1cm4ocjw8NSkrcitlfDB9LCJoYXNoSW50QWx0IiksVFllPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gZSoyMDk3MTUyK3J9LCJjb21iaW5lSGFzaGVzIiksTGY9byhmdW5jdGlvbihlKXtyZXR1cm4gZVswXSoyMDk3MTUyK2VbMV19LCJjb21iaW5lSGFzaGVzQXJyYXkiKSxtNj1vKGZ1bmN0aW9uKGUscil7cmV0dXJuW3Q0KGVbMF0sclswXSkscjQoZVsxXSxyWzFdKV19LCJoYXNoQXJyYXlzIiksd1llPW8oZnVuY3Rpb24oZSxyKXt2YXIgbj17dmFsdWU6MCxkb25lOiExfSxpPTAsYT1lLmxlbmd0aCxzPXtuZXh0Om8oZnVuY3Rpb24oKXtyZXR1cm4gaTxhP24udmFsdWU9ZVtpKytdOm4uZG9uZT0hMCxufSwibmV4dCIpfTtyZXR1cm4gdmdlKHMscil9LCJoYXNoSW50c0FycmF5IiksQmY9byhmdW5jdGlvbihlLHIpe3ZhciBuPXt2YWx1ZTowLGRvbmU6ITF9LGk9MCxhPWUubGVuZ3RoLHM9e25leHQ6byhmdW5jdGlvbigpe3JldHVybiBpPGE/bi52YWx1ZT1lLmNoYXJDb2RlQXQoaSsrKTpuLmRvbmU9ITAsbn0sIm5leHQiKX07cmV0dXJuIHZnZShzLHIpfSwiaGFzaFN0cmluZyIpLHhnZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIGtZZShhcmd1bWVudHMpfSwiaGFzaFN0cmluZ3MiKSxrWWU9byhmdW5jdGlvbihlKXtmb3IodmFyIHIsbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgaT1lW25dO249PT0wP3I9QmYoaSk6cj1CZihpLHIpfXJldHVybiByfSwiaGFzaFN0cmluZ3NBcnJheSIpLFcwZT0hMCxFWWU9Y29uc29sZS53YXJuIT1udWxsLFNZZT1jb25zb2xlLnRyYWNlIT1udWxsLCRCPU51bWJlci5NQVhfU0FGRV9JTlRFR0VSfHw5MDA3MTk5MjU0NzQwOTkxLGJnZT1vKGZ1bmN0aW9uKCl7cmV0dXJuITB9LCJ0cnVlaWZ5IiksejY9byhmdW5jdGlvbigpe3JldHVybiExfSwiZmFsc2lmeSIpLHEwZT1vKGZ1bmN0aW9uKCl7cmV0dXJuIDB9LCJ6ZXJvaWZ5IiksekI9byhmdW5jdGlvbigpe30sIm5vb3AiKSxvaT1vKGZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcihlKX0sImVycm9yIiksVGdlPW8oZnVuY3Rpb24oZSl7aWYoZSE9PXZvaWQgMClXMGU9ISFlO2Vsc2UgcmV0dXJuIFcwZX0sIndhcm5pbmdzIiksaG49byhmdW5jdGlvbihlKXtUZ2UoKSYmKEVZZT9jb25zb2xlLndhcm4oZSk6KGNvbnNvbGUubG9nKGUpLFNZZSYmY29uc29sZS50cmFjZSgpKSl9LCJ3YXJuIiksQ1llPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGlyKHt9LGUpfSwiY2xvbmUiKSxRYz1vKGZ1bmN0aW9uKGUpe3JldHVybiBlPT1udWxsP2U6RW4oZSk/ZS5zbGljZSgpOlVyKGUpP0NZZShlKTplfSwiY29weSIpLEFZZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNsaWNlKCl9LCJjb3B5QXJyYXkiKSx3Z2U9byhmdW5jdGlvbihlLHIpe2ZvcihyPWU9IiI7ZSsrPDM2O3IrPWUqNTEmNTI/KGVeMTU/OF5NYXRoLnJhbmRvbSgpKihlXjIwPzE2OjQpOjQpLnRvU3RyaW5nKDE2KToiLSIpO3JldHVybiByfSwidXVpZCIpLF9ZZT17fSxrZ2U9byhmdW5jdGlvbigpe3JldHVybiBfWWV9LCJzdGF0aWNFbXB0eU9iamVjdCIpLG9hPW8oZnVuY3Rpb24oZSl7dmFyIHI9T2JqZWN0LmtleXMoZSk7cmV0dXJuIGZ1bmN0aW9uKG4pe2Zvcih2YXIgaT17fSxhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBzPXJbYV0sbD1uPy5bc107aVtzXT1sPT09dm9pZCAwP2Vbc106bH1yZXR1cm4gaX19LCJkZWZhdWx0cyIpLEZmPW8oZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaT1lLmxlbmd0aC0xO2k+PTAmJiEoZVtpXT09PXImJihlLnNwbGljZShpLDEpLG4pKTtpLS0pO30sInJlbW92ZUZyb21BcnJheSIpLEdCPW8oZnVuY3Rpb24oZSl7ZS5zcGxpY2UoMCxlLmxlbmd0aCl9LCJjbGVhckFycmF5IiksRFllPW8oZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXTtlLnB1c2goaSl9fSwicHVzaCIpLFdsPW8oZnVuY3Rpb24oZSxyLG4pe3JldHVybiBuJiYocj1jZ2UobixyKSksZVtyXX0sImdldFByZWZpeGVkUHJvcGVydHkiKSxOZj1vKGZ1bmN0aW9uKGUscixuLGkpe24mJihyPWNnZShuLHIpKSxlW3JdPWl9LCJzZXRQcmVmaXhlZFByb3BlcnR5IiksTFllPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe1ZmKHRoaXMsdCksdGhpcy5fb2JqPXt9fXJldHVybiBvKHQsIk9iamVjdE1hcCIpLFVmKHQsW3trZXk6InNldCIsdmFsdWU6byhmdW5jdGlvbihyLG4pe3JldHVybiB0aGlzLl9vYmpbcl09bix0aGlzfSwic2V0Iil9LHtrZXk6ImRlbGV0ZSIsdmFsdWU6byhmdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fb2JqW3JdPXZvaWQgMCx0aGlzfSwiX2RlbGV0ZSIpfSx7a2V5OiJjbGVhciIsdmFsdWU6byhmdW5jdGlvbigpe3RoaXMuX29iaj17fX0sImNsZWFyIil9LHtrZXk6ImhhcyIsdmFsdWU6byhmdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fb2JqW3JdIT09dm9pZCAwfSwiaGFzIil9LHtrZXk6ImdldCIsdmFsdWU6byhmdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fb2JqW3JdfSwiZ2V0Iil9XSksdH0oKSxaYz10eXBlb2YgTWFwPCJ1Ij9NYXA6TFllLFJZZT0idW5kZWZpbmVkIixOWWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe2lmKFZmKHRoaXMsdCksdGhpcy5fb2JqPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5zaXplPTAsZSE9bnVsbCl7dmFyIHI7ZS5pbnN0YW5jZVN0cmluZyE9bnVsbCYmZS5pbnN0YW5jZVN0cmluZygpPT09dGhpcy5pbnN0YW5jZVN0cmluZygpP3I9ZS50b0FycmF5KCk6cj1lO2Zvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKXRoaXMuYWRkKHJbbl0pfX1yZXR1cm4gbyh0LCJPYmplY3RTZXQiKSxVZih0LFt7a2V5OiJpbnN0YW5jZVN0cmluZyIsdmFsdWU6byhmdW5jdGlvbigpe3JldHVybiJzZXQifSwiaW5zdGFuY2VTdHJpbmciKX0se2tleToiYWRkIix2YWx1ZTpvKGZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX29iajtuW3JdIT09MSYmKG5bcl09MSx0aGlzLnNpemUrKyl9LCJhZGQiKX0se2tleToiZGVsZXRlIix2YWx1ZTpvKGZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX29iajtuW3JdPT09MSYmKG5bcl09MCx0aGlzLnNpemUtLSl9LCJfZGVsZXRlIil9LHtrZXk6ImNsZWFyIix2YWx1ZTpvKGZ1bmN0aW9uKCl7dGhpcy5fb2JqPU9iamVjdC5jcmVhdGUobnVsbCl9LCJjbGVhciIpfSx7a2V5OiJoYXMiLHZhbHVlOm8oZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX29ialtyXT09PTF9LCJoYXMiKX0se2tleToidG9BcnJheSIsdmFsdWU6byhmdW5jdGlvbigpe3ZhciByPXRoaXM7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX29iaikuZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVybiByLmhhcyhuKX0pfSwidG9BcnJheSIpfSx7a2V5OiJmb3JFYWNoIix2YWx1ZTpvKGZ1bmN0aW9uKHIsbil7cmV0dXJuIHRoaXMudG9BcnJheSgpLmZvckVhY2gocixuKX0sImZvckVhY2giKX1dKSx0fSgpLGF5PSh0eXBlb2YgU2V0PiJ1Ij8idW5kZWZpbmVkIjpxaShTZXQpKSE9PVJZZT9TZXQ6TlllLFo2PW8oZnVuY3Rpb24oZSxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ITA7aWYoZT09PXZvaWQgMHx8cj09PXZvaWQgMHx8IUJCKGUpKXtvaSgiQW4gZWxlbWVudCBtdXN0IGhhdmUgYSBjb3JlIHJlZmVyZW5jZSBhbmQgcGFyYW1ldGVycyBzZXQiKTtyZXR1cm59dmFyIGk9ci5ncm91cDtpZihpPT1udWxsJiYoci5kYXRhJiZyLmRhdGEuc291cmNlIT1udWxsJiZyLmRhdGEudGFyZ2V0IT1udWxsP2k9ImVkZ2VzIjppPSJub2RlcyIpLGkhPT0ibm9kZXMiJiZpIT09ImVkZ2VzIil7b2koIkFuIGVsZW1lbnQgbXVzdCBiZSBvZiB0eXBlIGBub2Rlc2Agb3IgYGVkZ2VzYDsgeW91IHNwZWNpZmllZCBgIitpKyJgIik7cmV0dXJufXRoaXMubGVuZ3RoPTEsdGhpc1swXT10aGlzO3ZhciBhPXRoaXMuX3ByaXZhdGU9e2N5OmUsc2luZ2xlOiEwLGRhdGE6ci5kYXRhfHx7fSxwb3NpdGlvbjpyLnBvc2l0aW9ufHx7eDowLHk6MH0sYXV0b1dpZHRoOnZvaWQgMCxhdXRvSGVpZ2h0OnZvaWQgMCxhdXRvUGFkZGluZzp2b2lkIDAsY29tcG91bmRCb3VuZHNDbGVhbjohMSxsaXN0ZW5lcnM6W10sZ3JvdXA6aSxzdHlsZTp7fSxyc3R5bGU6e30sc3R5bGVDeHRzOltdLHN0eWxlS2V5czp7fSxyZW1vdmVkOiEwLHNlbGVjdGVkOiEhci5zZWxlY3RlZCxzZWxlY3RhYmxlOnIuc2VsZWN0YWJsZT09PXZvaWQgMD8hMDohIXIuc2VsZWN0YWJsZSxsb2NrZWQ6ISFyLmxvY2tlZCxncmFiYmVkOiExLGdyYWJiYWJsZTpyLmdyYWJiYWJsZT09PXZvaWQgMD8hMDohIXIuZ3JhYmJhYmxlLHBhbm5hYmxlOnIucGFubmFibGU9PT12b2lkIDA/aT09PSJlZGdlcyI6ISFyLnBhbm5hYmxlLGFjdGl2ZTohMSxjbGFzc2VzOm5ldyBheSxhbmltYXRpb246e2N1cnJlbnQ6W10scXVldWU6W119LHJzY3JhdGNoOnt9LHNjcmF0Y2g6ci5zY3JhdGNofHx7fSxlZGdlczpbXSxjaGlsZHJlbjpbXSxwYXJlbnQ6ci5wYXJlbnQmJnIucGFyZW50LmlzTm9kZSgpP3IucGFyZW50Om51bGwsdHJhdmVyc2FsQ2FjaGU6e30sYmFja2dyb3VuZGluZzohMSxiYkNhY2hlOm51bGwsYmJDYWNoZVNoaWZ0Ont4OjAseTowfSxib2R5Qm91bmRzOm51bGwsb3ZlcmxheUJvdW5kczpudWxsLGxhYmVsQm91bmRzOnthbGw6bnVsbCxzb3VyY2U6bnVsbCx0YXJnZXQ6bnVsbCxtYWluOm51bGx9LGFycm93Qm91bmRzOntzb3VyY2U6bnVsbCx0YXJnZXQ6bnVsbCwibWlkLXNvdXJjZSI6bnVsbCwibWlkLXRhcmdldCI6bnVsbH19O2lmKGEucG9zaXRpb24ueD09bnVsbCYmKGEucG9zaXRpb24ueD0wKSxhLnBvc2l0aW9uLnk9PW51bGwmJihhLnBvc2l0aW9uLnk9MCksci5yZW5kZXJlZFBvc2l0aW9uKXt2YXIgcz1yLnJlbmRlcmVkUG9zaXRpb24sbD1lLnBhbigpLHU9ZS56b29tKCk7YS5wb3NpdGlvbj17eDoocy54LWwueCkvdSx5OihzLnktbC55KS91fX12YXIgaD1bXTtFbihyLmNsYXNzZXMpP2g9ci5jbGFzc2VzOlp0KHIuY2xhc3NlcykmJihoPXIuY2xhc3Nlcy5zcGxpdCgvXHMrLykpO2Zvcih2YXIgZj0wLGQ9aC5sZW5ndGg7ZjxkO2YrKyl7dmFyIHA9aFtmXTshcHx8cD09PSIifHxhLmNsYXNzZXMuYWRkKHApfXRoaXMuY3JlYXRlRW1pdHRlcigpO3ZhciBtPXIuc3R5bGV8fHIuY3NzO20mJihobigiU2V0dGluZyBhIGBzdHlsZWAgYnlwYXNzIGF0IGVsZW1lbnQgY3JlYXRpb24gc2hvdWxkIGJlIGRvbmUgb25seSB3aGVuIGFic29sdXRlbHkgbmVjZXNzYXJ5LiAgVHJ5IHRvIHVzZSB0aGUgc3R5bGVzaGVldCBpbnN0ZWFkLiIpLHRoaXMuc3R5bGUobSkpLChuPT09dm9pZCAwfHxuKSYmdGhpcy5yZXN0b3JlKCl9LCJFbGVtZW50IiksWTBlPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGU9e2JmczplLmJmc3x8IWUuZGZzLGRmczplLmRmc3x8IWUuYmZzfSxvKGZ1bmN0aW9uKG4saSxhKXt2YXIgcztVcihuKSYmIXhvKG4pJiYocz1uLG49cy5yb290c3x8cy5yb290LGk9cy52aXNpdCxhPXMuZGlyZWN0ZWQpLGE9YXJndW1lbnRzLmxlbmd0aD09PTImJiFsaShpKT9pOmEsaT1saShpKT9pOmZ1bmN0aW9uKCl7fTtmb3IodmFyIGw9dGhpcy5fcHJpdmF0ZS5jeSx1PW49WnQobik/dGhpcy5maWx0ZXIobik6bixoPVtdLGY9W10sZD17fSxwPXt9LG09e30sZz0wLHksdj10aGlzLmJ5R3JvdXAoKSx4PXYubm9kZXMsYj12LmVkZ2VzLFQ9MDtUPHUubGVuZ3RoO1QrKyl7dmFyIFM9dVtUXSx3PVMuaWQoKTtTLmlzTm9kZSgpJiYoaC51bnNoaWZ0KFMpLGUuYmZzJiYobVt3XT0hMCxmLnB1c2goUykpLHBbd109MCl9Zm9yKHZhciBFPW8oZnVuY3Rpb24oKXt2YXIgTD1lLmJmcz9oLnNoaWZ0KCk6aC5wb3AoKSxBPUwuaWQoKTtpZihlLmRmcyl7aWYobVtBXSlyZXR1cm4iY29udGludWUiO21bQV09ITAsZi5wdXNoKEwpfXZhciBJPXBbQV0sTT1kW0FdLFA9TSE9bnVsbD9NLnNvdXJjZSgpOm51bGwsQj1NIT1udWxsP00udGFyZ2V0KCk6bnVsbCxGPU09PW51bGw/dm9pZCAwOkwuc2FtZShQKT9CWzBdOlBbMF0sej12b2lkIDA7aWYoej1pKEwsTSxGLGcrKyxJKSx6PT09ITApcmV0dXJuIHk9TCwiYnJlYWsiO2lmKHo9PT0hMSlyZXR1cm4iYnJlYWsiO2Zvcih2YXIgJD1MLmNvbm5lY3RlZEVkZ2VzKCkuZmlsdGVyKGZ1bmN0aW9uKGNlKXtyZXR1cm4oIWF8fGNlLnNvdXJjZSgpLnNhbWUoTCkpJiZiLmhhcyhjZSl9KSxVPTA7VTwkLmxlbmd0aDtVKyspe3ZhciBLPSRbVV0sZWU9Sy5jb25uZWN0ZWROb2RlcygpLmZpbHRlcihmdW5jdGlvbihjZSl7cmV0dXJuIWNlLnNhbWUoTCkmJnguaGFzKGNlKX0pLFk9ZWUuaWQoKTtlZS5sZW5ndGghPT0wJiYhbVtZXSYmKGVlPWVlWzBdLGgucHVzaChlZSksZS5iZnMmJihtW1ldPSEwLGYucHVzaChlZSkpLGRbWV09SyxwW1ldPXBbQV0rMSl9fSwiX2xvb3AiKTtoLmxlbmd0aCE9PTA7KXt2YXIgXz1FKCk7aWYoXyE9PSJjb250aW51ZSImJl89PT0iYnJlYWsiKWJyZWFrfWZvcih2YXIgQz1sLmNvbGxlY3Rpb24oKSxEPTA7RDxmLmxlbmd0aDtEKyspe3ZhciBPPWZbRF0sUj1kW08uaWQoKV07UiE9bnVsbCYmQy5wdXNoKFIpLEMucHVzaChPKX1yZXR1cm57cGF0aDpsLmNvbGxlY3Rpb24oQyksZm91bmQ6bC5jb2xsZWN0aW9uKHkpfX0sInNlYXJjaEZuIil9LCJkZWZpbmVTZWFyY2giKSxuND17YnJlYWR0aEZpcnN0U2VhcmNoOlkwZSh7YmZzOiEwfSksZGVwdGhGaXJzdFNlYXJjaDpZMGUoe2RmczohMH0pfTtuNC5iZnM9bjQuYnJlYWR0aEZpcnN0U2VhcmNoO240LmRmcz1uNC5kZXB0aEZpcnN0U2VhcmNoO01ZZT1CcWUoZnVuY3Rpb24odCxlKXsoZnVuY3Rpb24oKXt2YXIgcixuLGksYSxzLGwsdSxoLGYsZCxwLG0sZyx5LHY7aT1NYXRoLmZsb29yLGQ9TWF0aC5taW4sbj1vKGZ1bmN0aW9uKHgsYil7cmV0dXJuIHg8Yj8tMTp4PmI/MTowfSwiZGVmYXVsdENtcCIpLGY9byhmdW5jdGlvbih4LGIsVCxTLHcpe3ZhciBFO2lmKFQ9PW51bGwmJihUPTApLHc9PW51bGwmJih3PW4pLFQ8MCl0aHJvdyBuZXcgRXJyb3IoImxvIG11c3QgYmUgbm9uLW5lZ2F0aXZlIik7Zm9yKFM9PW51bGwmJihTPXgubGVuZ3RoKTtUPFM7KUU9aSgoVCtTKS8yKSx3KGIseFtFXSk8MD9TPUU6VD1FKzE7cmV0dXJuW10uc3BsaWNlLmFwcGx5KHgsW1QsVC1UXS5jb25jYXQoYikpLGJ9LCJpbnNvcnQiKSxsPW8oZnVuY3Rpb24oeCxiLFQpe3JldHVybiBUPT1udWxsJiYoVD1uKSx4LnB1c2goYikseSh4LDAseC5sZW5ndGgtMSxUKX0sImhlYXBwdXNoIikscz1vKGZ1bmN0aW9uKHgsYil7dmFyIFQsUztyZXR1cm4gYj09bnVsbCYmKGI9biksVD14LnBvcCgpLHgubGVuZ3RoPyhTPXhbMF0seFswXT1ULHYoeCwwLGIpKTpTPVQsU30sImhlYXBwb3AiKSxoPW8oZnVuY3Rpb24oeCxiLFQpe3ZhciBTO3JldHVybiBUPT1udWxsJiYoVD1uKSxTPXhbMF0seFswXT1iLHYoeCwwLFQpLFN9LCJoZWFwcmVwbGFjZSIpLHU9byhmdW5jdGlvbih4LGIsVCl7dmFyIFM7cmV0dXJuIFQ9PW51bGwmJihUPW4pLHgubGVuZ3RoJiZUKHhbMF0sYik8MCYmKFM9W3hbMF0sYl0sYj1TWzBdLHhbMF09U1sxXSx2KHgsMCxUKSksYn0sImhlYXBwdXNocG9wIiksYT1vKGZ1bmN0aW9uKHgsYil7dmFyIFQsUyx3LEUsXyxDO2ZvcihiPT1udWxsJiYoYj1uKSxFPWZ1bmN0aW9uKCl7Qz1bXTtmb3IodmFyIEQ9MCxPPWkoeC5sZW5ndGgvMik7MDw9Tz9EPE86RD5POzA8PU8/RCsrOkQtLSlDLnB1c2goRCk7cmV0dXJuIEN9LmFwcGx5KHRoaXMpLnJldmVyc2UoKSxfPVtdLFM9MCx3PUUubGVuZ3RoO1M8dztTKyspVD1FW1NdLF8ucHVzaCh2KHgsVCxiKSk7cmV0dXJuIF99LCJoZWFwaWZ5IiksZz1vKGZ1bmN0aW9uKHgsYixUKXt2YXIgUztpZihUPT1udWxsJiYoVD1uKSxTPXguaW5kZXhPZihiKSxTIT09LTEpcmV0dXJuIHkoeCwwLFMsVCksdih4LFMsVCl9LCJ1cGRhdGVJdGVtIikscD1vKGZ1bmN0aW9uKHgsYixUKXt2YXIgUyx3LEUsXyxDO2lmKFQ9PW51bGwmJihUPW4pLHc9eC5zbGljZSgwLGIpLCF3Lmxlbmd0aClyZXR1cm4gdztmb3IoYSh3LFQpLEM9eC5zbGljZShiKSxFPTAsXz1DLmxlbmd0aDtFPF87RSsrKVM9Q1tFXSx1KHcsUyxUKTtyZXR1cm4gdy5zb3J0KFQpLnJldmVyc2UoKX0sIm5sYXJnZXN0IiksbT1vKGZ1bmN0aW9uKHgsYixUKXt2YXIgUyx3LEUsXyxDLEQsTyxSLGs7aWYoVD09bnVsbCYmKFQ9biksYioxMDw9eC5sZW5ndGgpe2lmKEU9eC5zbGljZSgwLGIpLnNvcnQoVCksIUUubGVuZ3RoKXJldHVybiBFO2Zvcih3PUVbRS5sZW5ndGgtMV0sTz14LnNsaWNlKGIpLF89MCxEPU8ubGVuZ3RoO188RDtfKyspUz1PW19dLFQoUyx3KTwwJiYoZihFLFMsMCxudWxsLFQpLEUucG9wKCksdz1FW0UubGVuZ3RoLTFdKTtyZXR1cm4gRX1mb3IoYSh4LFQpLGs9W10sQz0wLFI9ZChiLHgubGVuZ3RoKTswPD1SP0M8UjpDPlI7MDw9Uj8rK0M6LS1DKWsucHVzaChzKHgsVCkpO3JldHVybiBrfSwibnNtYWxsZXN0IikseT1vKGZ1bmN0aW9uKHgsYixULFMpe3ZhciB3LEUsXztmb3IoUz09bnVsbCYmKFM9biksdz14W1RdO1Q+Yjspe2lmKF89VC0xPj4xLEU9eFtfXSxTKHcsRSk8MCl7eFtUXT1FLFQ9Xztjb250aW51ZX1icmVha31yZXR1cm4geFtUXT13fSwiX3NpZnRkb3duIiksdj1vKGZ1bmN0aW9uKHgsYixUKXt2YXIgUyx3LEUsXyxDO2ZvcihUPT1udWxsJiYoVD1uKSx3PXgubGVuZ3RoLEM9YixFPXhbYl0sUz0yKmIrMTtTPHc7KV89UysxLF88dyYmIShUKHhbU10seFtfXSk8MCkmJihTPV8pLHhbYl09eFtTXSxiPVMsUz0yKmIrMTtyZXR1cm4geFtiXT1FLHkoeCxDLGIsVCl9LCJfc2lmdHVwIikscj1mdW5jdGlvbigpe3gucHVzaD1sLHgucG9wPXMseC5yZXBsYWNlPWgseC5wdXNocG9wPXUseC5oZWFwaWZ5PWEseC51cGRhdGVJdGVtPWcseC5ubGFyZ2VzdD1wLHgubnNtYWxsZXN0PW07ZnVuY3Rpb24geChiKXt0aGlzLmNtcD1iPz9uLHRoaXMubm9kZXM9W119cmV0dXJuIG8oeCwiSGVhcCIpLHgucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oYil7cmV0dXJuIGwodGhpcy5ub2RlcyxiLHRoaXMuY21wKX0seC5wcm90b3R5cGUucG9wPWZ1bmN0aW9uKCl7cmV0dXJuIHModGhpcy5ub2Rlcyx0aGlzLmNtcCl9LHgucHJvdG90eXBlLnBlZWs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2Rlc1swXX0seC5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubm9kZXMuaW5kZXhPZihiKSE9PS0xfSx4LnByb3RvdHlwZS5yZXBsYWNlPWZ1bmN0aW9uKGIpe3JldHVybiBoKHRoaXMubm9kZXMsYix0aGlzLmNtcCl9LHgucHJvdG90eXBlLnB1c2hwb3A9ZnVuY3Rpb24oYil7cmV0dXJuIHUodGhpcy5ub2RlcyxiLHRoaXMuY21wKX0seC5wcm90b3R5cGUuaGVhcGlmeT1mdW5jdGlvbigpe3JldHVybiBhKHRoaXMubm9kZXMsdGhpcy5jbXApfSx4LnByb3RvdHlwZS51cGRhdGVJdGVtPWZ1bmN0aW9uKGIpe3JldHVybiBnKHRoaXMubm9kZXMsYix0aGlzLmNtcCl9LHgucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZXM9W119LHgucHJvdG90eXBlLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZXMubGVuZ3RoPT09MH0seC5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVzLmxlbmd0aH0seC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgYjtyZXR1cm4gYj1uZXcgeCxiLm5vZGVzPXRoaXMubm9kZXMuc2xpY2UoMCksYn0seC5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVzLnNsaWNlKDApfSx4LnByb3RvdHlwZS5pbnNlcnQ9eC5wcm90b3R5cGUucHVzaCx4LnByb3RvdHlwZS50b3A9eC5wcm90b3R5cGUucGVlayx4LnByb3RvdHlwZS5mcm9udD14LnByb3RvdHlwZS5wZWVrLHgucHJvdG90eXBlLmhhcz14LnByb3RvdHlwZS5jb250YWlucyx4LnByb3RvdHlwZS5jb3B5PXgucHJvdG90eXBlLmNsb25lLHh9KCksZnVuY3Rpb24oeCxiKXtyZXR1cm4gdC5leHBvcnRzPWIoKX0odGhpcyxmdW5jdGlvbigpe3JldHVybiByfSl9KS5jYWxsKFdiKX0pLG00PU1ZZSxJWWU9b2Eoe3Jvb3Q6bnVsbCx3ZWlnaHQ6byhmdW5jdGlvbihlKXtyZXR1cm4gMX0sIndlaWdodCIpLGRpcmVjdGVkOiExfSksT1llPXtkaWprc3RyYTpvKGZ1bmN0aW9uKGUpe2lmKCFVcihlKSl7dmFyIHI9YXJndW1lbnRzO2U9e3Jvb3Q6clswXSx3ZWlnaHQ6clsxXSxkaXJlY3RlZDpyWzJdfX12YXIgbj1JWWUoZSksaT1uLnJvb3QsYT1uLndlaWdodCxzPW4uZGlyZWN0ZWQsbD10aGlzLHU9YSxoPVp0KGkpP3RoaXMuZmlsdGVyKGkpWzBdOmlbMF0sZj17fSxkPXt9LHA9e30sbT10aGlzLmJ5R3JvdXAoKSxnPW0ubm9kZXMseT1tLmVkZ2VzO3kudW5tZXJnZUJ5KGZ1bmN0aW9uKEkpe3JldHVybiBJLmlzTG9vcCgpfSk7Zm9yKHZhciB2PW8oZnVuY3Rpb24oTSl7cmV0dXJuIGZbTS5pZCgpXX0sImdldERpc3QiKSx4PW8oZnVuY3Rpb24oTSxQKXtmW00uaWQoKV09UCxiLnVwZGF0ZUl0ZW0oTSl9LCJzZXREaXN0IiksYj1uZXcgbTQoZnVuY3Rpb24oSSxNKXtyZXR1cm4gdihJKS12KE0pfSksVD0wO1Q8Zy5sZW5ndGg7VCsrKXt2YXIgUz1nW1RdO2ZbUy5pZCgpXT1TLnNhbWUoaCk/MDoxLzAsYi5wdXNoKFMpfWZvcih2YXIgdz1vKGZ1bmN0aW9uKE0sUCl7Zm9yKHZhciBCPShzP00uZWRnZXNUbyhQKTpNLmVkZ2VzV2l0aChQKSkuaW50ZXJzZWN0KHkpLEY9MS8wLHosJD0wOyQ8Qi5sZW5ndGg7JCsrKXt2YXIgVT1CWyRdLEs9dShVKTsoSzxGfHwheikmJihGPUssej1VKX1yZXR1cm57ZWRnZTp6LGRpc3Q6Rn19LCJkaXN0QmV0d2VlbiIpO2Iuc2l6ZSgpPjA7KXt2YXIgRT1iLnBvcCgpLF89dihFKSxDPUUuaWQoKTtpZihwW0NdPV8sXyE9PTEvMClmb3IodmFyIEQ9RS5uZWlnaGJvcmhvb2QoKS5pbnRlcnNlY3QoZyksTz0wO088RC5sZW5ndGg7TysrKXt2YXIgUj1EW09dLGs9Ui5pZCgpLEw9dyhFLFIpLEE9XytMLmRpc3Q7QTx2KFIpJiYoeChSLEEpLGRba109e25vZGU6RSxlZGdlOkwuZWRnZX0pfX1yZXR1cm57ZGlzdGFuY2VUbzpvKGZ1bmN0aW9uKE0pe3ZhciBQPVp0KE0pP2cuZmlsdGVyKE0pWzBdOk1bMF07cmV0dXJuIHBbUC5pZCgpXX0sImRpc3RhbmNlVG8iKSxwYXRoVG86byhmdW5jdGlvbihNKXt2YXIgUD1adChNKT9nLmZpbHRlcihNKVswXTpNWzBdLEI9W10sRj1QLHo9Ri5pZCgpO2lmKFAubGVuZ3RoPjApZm9yKEIudW5zaGlmdChQKTtkW3pdOyl7dmFyICQ9ZFt6XTtCLnVuc2hpZnQoJC5lZGdlKSxCLnVuc2hpZnQoJC5ub2RlKSxGPSQubm9kZSx6PUYuaWQoKX1yZXR1cm4gbC5zcGF3bihCKX0sInBhdGhUbyIpfX0sImRpamtzdHJhIil9LFBZZT17a3J1c2thbDpvKGZ1bmN0aW9uKGUpe2U9ZXx8ZnVuY3Rpb24oVCl7cmV0dXJuIDF9O2Zvcih2YXIgcj10aGlzLmJ5R3JvdXAoKSxuPXIubm9kZXMsaT1yLmVkZ2VzLGE9bi5sZW5ndGgscz1uZXcgQXJyYXkoYSksbD1uLHU9byhmdW5jdGlvbihTKXtmb3IodmFyIHc9MDt3PHMubGVuZ3RoO3crKyl7dmFyIEU9c1t3XTtpZihFLmhhcyhTKSlyZXR1cm4gd319LCJmaW5kU2V0SW5kZXgiKSxoPTA7aDxhO2grKylzW2hdPXRoaXMuc3Bhd24obltoXSk7Zm9yKHZhciBmPWkuc29ydChmdW5jdGlvbihULFMpe3JldHVybiBlKFQpLWUoUyl9KSxkPTA7ZDxmLmxlbmd0aDtkKyspe3ZhciBwPWZbZF0sbT1wLnNvdXJjZSgpWzBdLGc9cC50YXJnZXQoKVswXSx5PXUobSksdj11KGcpLHg9c1t5XSxiPXNbdl07eSE9PXYmJihsLm1lcmdlKHApLHgubWVyZ2UoYikscy5zcGxpY2UodiwxKSl9cmV0dXJuIGx9LCJrcnVza2FsIil9LEJZZT1vYSh7cm9vdDpudWxsLGdvYWw6bnVsbCx3ZWlnaHQ6byhmdW5jdGlvbihlKXtyZXR1cm4gMX0sIndlaWdodCIpLGhldXJpc3RpYzpvKGZ1bmN0aW9uKGUpe3JldHVybiAwfSwiaGV1cmlzdGljIiksZGlyZWN0ZWQ6ITF9KSxGWWU9e2FTdGFyOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5jeSgpLG49QlllKGUpLGk9bi5yb290LGE9bi5nb2FsLHM9bi5oZXVyaXN0aWMsbD1uLmRpcmVjdGVkLHU9bi53ZWlnaHQ7aT1yLmNvbGxlY3Rpb24oaSlbMF0sYT1yLmNvbGxlY3Rpb24oYSlbMF07dmFyIGg9aS5pZCgpLGY9YS5pZCgpLGQ9e30scD17fSxtPXt9LGc9bmV3IG00KGZ1bmN0aW9uKHosJCl7cmV0dXJuIHBbei5pZCgpXS1wWyQuaWQoKV19KSx5PW5ldyBheSx2PXt9LHg9e30sYj1vKGZ1bmN0aW9uKCQsVSl7Zy5wdXNoKCQpLHkuYWRkKFUpfSwiYWRkVG9PcGVuU2V0IiksVCxTLHc9byhmdW5jdGlvbigpe1Q9Zy5wb3AoKSxTPVQuaWQoKSx5LmRlbGV0ZShTKX0sInBvcEZyb21PcGVuU2V0IiksRT1vKGZ1bmN0aW9uKCQpe3JldHVybiB5LmhhcygkKX0sImlzSW5PcGVuU2V0Iik7YihpLGgpLGRbaF09MCxwW2hdPXMoaSk7Zm9yKHZhciBfPTA7Zy5zaXplKCk+MDspe2lmKHcoKSxfKyssUz09PWYpe2Zvcih2YXIgQz1bXSxEPWEsTz1mLFI9eFtPXTtDLnVuc2hpZnQoRCksUiE9bnVsbCYmQy51bnNoaWZ0KFIpLEQ9dltPXSxEIT1udWxsOylPPUQuaWQoKSxSPXhbT107cmV0dXJue2ZvdW5kOiEwLGRpc3RhbmNlOmRbU10scGF0aDp0aGlzLnNwYXduKEMpLHN0ZXBzOl99fW1bU109ITA7Zm9yKHZhciBrPVQuX3ByaXZhdGUuZWRnZXMsTD0wO0w8ay5sZW5ndGg7TCsrKXt2YXIgQT1rW0xdO2lmKHRoaXMuaGFzRWxlbWVudFdpdGhJZChBLmlkKCkpJiYhKGwmJkEuZGF0YSgic291cmNlIikhPT1TKSl7dmFyIEk9QS5zb3VyY2UoKSxNPUEudGFyZ2V0KCksUD1JLmlkKCkhPT1TP0k6TSxCPVAuaWQoKTtpZih0aGlzLmhhc0VsZW1lbnRXaXRoSWQoQikmJiFtW0JdKXt2YXIgRj1kW1NdK3UoQSk7aWYoIUUoQikpe2RbQl09RixwW0JdPUYrcyhQKSxiKFAsQiksdltCXT1ULHhbQl09QTtjb250aW51ZX1GPGRbQl0mJihkW0JdPUYscFtCXT1GK3MoUCksdltCXT1ULHhbQl09QSl9fX19cmV0dXJue2ZvdW5kOiExLGRpc3RhbmNlOnZvaWQgMCxwYXRoOnZvaWQgMCxzdGVwczpffX0sImFTdGFyIil9LCRZZT1vYSh7d2VpZ2h0Om8oZnVuY3Rpb24oZSl7cmV0dXJuIDF9LCJ3ZWlnaHQiKSxkaXJlY3RlZDohMX0pLHpZZT17ZmxveWRXYXJzaGFsbDpvKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj10aGlzLmN5KCksbj0kWWUoZSksaT1uLndlaWdodCxhPW4uZGlyZWN0ZWQscz1pLGw9dGhpcy5ieUdyb3VwKCksdT1sLm5vZGVzLGg9bC5lZGdlcyxmPXUubGVuZ3RoLGQ9ZipmLHA9byhmdW5jdGlvbihLKXtyZXR1cm4gdS5pbmRleE9mKEspfSwiaW5kZXhPZiIpLG09byhmdW5jdGlvbihLKXtyZXR1cm4gdVtLXX0sImF0SW5kZXgiKSxnPW5ldyBBcnJheShkKSx5PTA7eTxkO3krKyl7dmFyIHY9eSVmLHg9KHktdikvZjt4PT09dj9nW3ldPTA6Z1t5XT0xLzB9Zm9yKHZhciBiPW5ldyBBcnJheShkKSxUPW5ldyBBcnJheShkKSxTPTA7UzxoLmxlbmd0aDtTKyspe3ZhciB3PWhbU10sRT13LnNvdXJjZSgpWzBdLF89dy50YXJnZXQoKVswXTtpZihFIT09Xyl7dmFyIEM9cChFKSxEPXAoXyksTz1DKmYrRCxSPXModyk7aWYoZ1tPXT5SJiYoZ1tPXT1SLGJbT109RCxUW09dPXcpLCFhKXt2YXIgaz1EKmYrQzshYSYmZ1trXT5SJiYoZ1trXT1SLGJba109QyxUW2tdPXcpfX19Zm9yKHZhciBMPTA7TDxmO0wrKylmb3IodmFyIEE9MDtBPGY7QSsrKWZvcih2YXIgST1BKmYrTCxNPTA7TTxmO00rKyl7dmFyIFA9QSpmK00sQj1MKmYrTTtnW0ldK2dbQl08Z1tQXSYmKGdbUF09Z1tJXStnW0JdLGJbUF09YltJXSl9dmFyIEY9byhmdW5jdGlvbihLKXtyZXR1cm4oWnQoSyk/ci5maWx0ZXIoSyk6SylbMF19LCJnZXRBcmdFbGUiKSx6PW8oZnVuY3Rpb24oSyl7cmV0dXJuIHAoRihLKSl9LCJpbmRleE9mQXJnRWxlIiksJD17ZGlzdGFuY2U6byhmdW5jdGlvbihLLGVlKXt2YXIgWT16KEspLGNlPXooZWUpO3JldHVybiBnW1kqZitjZV19LCJkaXN0YW5jZSIpLHBhdGg6byhmdW5jdGlvbihLLGVlKXt2YXIgWT16KEspLGNlPXooZWUpLFo9bShZKTtpZihZPT09Y2UpcmV0dXJuIFouY29sbGVjdGlvbigpO2lmKGJbWSpmK2NlXT09bnVsbClyZXR1cm4gci5jb2xsZWN0aW9uKCk7dmFyIHVlPXIuY29sbGVjdGlvbigpLFE9WSxqO2Zvcih1ZS5tZXJnZShaKTtZIT09Y2U7KVE9WSxZPWJbWSpmK2NlXSxqPVRbUSpmK1ldLHVlLm1lcmdlKGopLHVlLm1lcmdlKG0oWSkpO3JldHVybiB1ZX0sInBhdGgiKX07cmV0dXJuICR9LCJmbG95ZFdhcnNoYWxsIil9LEdZZT1vYSh7d2VpZ2h0Om8oZnVuY3Rpb24oZSl7cmV0dXJuIDF9LCJ3ZWlnaHQiKSxkaXJlY3RlZDohMSxyb290Om51bGx9KSxWWWU9e2JlbGxtYW5Gb3JkOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcyxuPUdZZShlKSxpPW4ud2VpZ2h0LGE9bi5kaXJlY3RlZCxzPW4ucm9vdCxsPWksdT10aGlzLGg9dGhpcy5jeSgpLGY9dGhpcy5ieUdyb3VwKCksZD1mLmVkZ2VzLHA9Zi5ub2RlcyxtPXAubGVuZ3RoLGc9bmV3IFpjLHk9ITEsdj1bXTtzPWguY29sbGVjdGlvbihzKVswXSxkLnVubWVyZ2VCeShmdW5jdGlvbihzZSl7cmV0dXJuIHNlLmlzTG9vcCgpfSk7Zm9yKHZhciB4PWQubGVuZ3RoLGI9byhmdW5jdGlvbihhZSl7dmFyIE9lPWcuZ2V0KGFlLmlkKCkpO3JldHVybiBPZXx8KE9lPXt9LGcuc2V0KGFlLmlkKCksT2UpKSxPZX0sImdldEluZm8iKSxUPW8oZnVuY3Rpb24oYWUpe3JldHVybihadChhZSk/aC4kKGFlKTphZSlbMF19LCJnZXROb2RlRnJvbVRvIiksUz1vKGZ1bmN0aW9uKGFlKXtyZXR1cm4gYihUKGFlKSkuZGlzdH0sImRpc3RhbmNlVG8iKSx3PW8oZnVuY3Rpb24oYWUpe2Zvcih2YXIgT2U9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOnMseWU9VChhZSksQmU9W10sSGU9eWU7Oyl7aWYoSGU9PW51bGwpcmV0dXJuIHIuc3Bhd24oKTt2YXIgemU9YihIZSksTGU9emUuZWRnZSxJZT16ZS5wcmVkO2lmKEJlLnVuc2hpZnQoSGVbMF0pLEhlLnNhbWUoT2UpJiZCZS5sZW5ndGg+MClicmVhaztMZSE9bnVsbCYmQmUudW5zaGlmdChMZSksSGU9SWV9cmV0dXJuIHUuc3Bhd24oQmUpfSwicGF0aFRvIiksRT0wO0U8bTtFKyspe3ZhciBfPXBbRV0sQz1iKF8pO18uc2FtZShzKT9DLmRpc3Q9MDpDLmRpc3Q9MS8wLEMucHJlZD1udWxsLEMuZWRnZT1udWxsfWZvcih2YXIgRD0hMSxPPW8oZnVuY3Rpb24oYWUsT2UseWUsQmUsSGUsemUpe3ZhciBMZT1CZS5kaXN0K3plO0xlPEhlLmRpc3QmJiF5ZS5zYW1lKEJlLmVkZ2UpJiYoSGUuZGlzdD1MZSxIZS5wcmVkPWFlLEhlLmVkZ2U9eWUsRD0hMCl9LCJjaGVja0ZvckVkZ2VSZXBsYWNlbWVudCIpLFI9MTtSPG07UisrKXtEPSExO2Zvcih2YXIgaz0wO2s8eDtrKyspe3ZhciBMPWRba10sQT1MLnNvdXJjZSgpLEk9TC50YXJnZXQoKSxNPWwoTCksUD1iKEEpLEI9YihJKTtPKEEsSSxMLFAsQixNKSxhfHxPKEksQSxMLEIsUCxNKX1pZighRClicmVha31pZihEKWZvcih2YXIgRj1bXSx6PTA7ejx4O3orKyl7dmFyICQ9ZFt6XSxVPSQuc291cmNlKCksSz0kLnRhcmdldCgpLGVlPWwoJCksWT1iKFUpLmRpc3QsY2U9YihLKS5kaXN0O2lmKFkrZWU8Y2V8fCFhJiZjZStlZTxZKWlmKHl8fChobigiR3JhcGggY29udGFpbnMgYSBuZWdhdGl2ZSB3ZWlnaHQgY3ljbGUgZm9yIEJlbGxtYW4tRm9yZCIpLHk9ITApLGUuZmluZE5lZ2F0aXZlV2VpZ2h0Q3ljbGVzIT09ITEpe3ZhciBaPVtdO1krZWU8Y2UmJloucHVzaChVKSwhYSYmY2UrZWU8WSYmWi5wdXNoKEspO2Zvcih2YXIgdWU9Wi5sZW5ndGgsUT0wO1E8dWU7USsrKXt2YXIgaj1aW1FdLG5lPVtqXTtuZS5wdXNoKGIoaikuZWRnZSk7Zm9yKHZhciB0ZT1iKGopLnByZWQ7bmUuaW5kZXhPZih0ZSk9PT0tMTspbmUucHVzaCh0ZSksbmUucHVzaChiKHRlKS5lZGdlKSx0ZT1iKHRlKS5wcmVkO25lPW5lLnNsaWNlKG5lLmluZGV4T2YodGUpKTtmb3IodmFyIGhlPW5lWzBdLmlkKCksbGU9MCxKPTI7SjxuZS5sZW5ndGg7Sis9MiluZVtKXS5pZCgpPGhlJiYoaGU9bmVbSl0uaWQoKSxsZT1KKTtuZT1uZS5zbGljZShsZSkuY29uY2F0KG5lLnNsaWNlKDAsbGUpKSxuZS5wdXNoKG5lWzBdKTt2YXIgU2U9bmUubWFwKGZ1bmN0aW9uKHNlKXtyZXR1cm4gc2UuaWQoKX0pLmpvaW4oIiwiKTtGLmluZGV4T2YoU2UpPT09LTEmJih2LnB1c2godS5zcGF3bihuZSkpLEYucHVzaChTZSkpfX1lbHNlIGJyZWFrfXJldHVybntkaXN0YW5jZVRvOlMscGF0aFRvOncsaGFzTmVnYXRpdmVXZWlnaHRDeWNsZTp5LG5lZ2F0aXZlV2VpZ2h0Q3ljbGVzOnZ9fSwiYmVsbG1hbkZvcmQiKX0sVVllPU1hdGguc3FydCgyKSxIWWU9byhmdW5jdGlvbihlLHIsbil7bi5sZW5ndGg9PT0wJiZvaSgiS2FyZ2VyLVN0ZWluIG11c3QgYmUgcnVuIG9uIGEgY29ubmVjdGVkIChzdWIpZ3JhcGgiKTtmb3IodmFyIGk9bltlXSxhPWlbMV0scz1pWzJdLGw9clthXSx1PXJbc10saD1uLGY9aC5sZW5ndGgtMTtmPj0wO2YtLSl7dmFyIGQ9aFtmXSxwPWRbMV0sbT1kWzJdOyhyW3BdPT09bCYmclttXT09PXV8fHJbcF09PT11JiZyW21dPT09bCkmJmguc3BsaWNlKGYsMSl9Zm9yKHZhciBnPTA7ZzxoLmxlbmd0aDtnKyspe3ZhciB5PWhbZ107eVsxXT09PXU/KGhbZ109eS5zbGljZSgpLGhbZ11bMV09bCk6eVsyXT09PXUmJihoW2ddPXkuc2xpY2UoKSxoW2ddWzJdPWwpfWZvcih2YXIgdj0wO3Y8ci5sZW5ndGg7disrKXJbdl09PT11JiYoclt2XT1sKTtyZXR1cm4gaH0sImNvbGxhcHNlIiksYUI9byhmdW5jdGlvbihlLHIsbixpKXtmb3IoO24+aTspe3ZhciBhPU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpyLmxlbmd0aCk7cj1IWWUoYSxlLHIpLG4tLX1yZXR1cm4gcn0sImNvbnRyYWN0VW50aWwiKSxXWWU9e2thcmdlclN0ZWluOm8oZnVuY3Rpb24oKXt2YXIgZT10aGlzLHI9dGhpcy5ieUdyb3VwKCksbj1yLm5vZGVzLGk9ci5lZGdlcztpLnVubWVyZ2VCeShmdW5jdGlvbihCKXtyZXR1cm4gQi5pc0xvb3AoKX0pO3ZhciBhPW4ubGVuZ3RoLHM9aS5sZW5ndGgsbD1NYXRoLmNlaWwoTWF0aC5wb3coTWF0aC5sb2coYSkvTWF0aC5MTjIsMikpLHU9TWF0aC5mbG9vcihhL1VZZSk7aWYoYTwyKXtvaSgiQXQgbGVhc3QgMiBub2RlcyBhcmUgcmVxdWlyZWQgZm9yIEthcmdlci1TdGVpbiBhbGdvcml0aG0iKTtyZXR1cm59Zm9yKHZhciBoPVtdLGY9MDtmPHM7ZisrKXt2YXIgZD1pW2ZdO2gucHVzaChbZixuLmluZGV4T2YoZC5zb3VyY2UoKSksbi5pbmRleE9mKGQudGFyZ2V0KCkpXSl9Zm9yKHZhciBwPTEvMCxtPVtdLGc9bmV3IEFycmF5KGEpLHk9bmV3IEFycmF5KGEpLHY9bmV3IEFycmF5KGEpLHg9byhmdW5jdGlvbihGLHope2Zvcih2YXIgJD0wOyQ8YTskKyspelskXT1GWyRdfSwiY29weU5vZGVzTWFwIiksYj0wO2I8PWw7YisrKXtmb3IodmFyIFQ9MDtUPGE7VCsrKXlbVF09VDt2YXIgUz1hQih5LGguc2xpY2UoKSxhLHUpLHc9Uy5zbGljZSgpO3goeSx2KTt2YXIgRT1hQih5LFMsdSwyKSxfPWFCKHYsdyx1LDIpO0UubGVuZ3RoPD1fLmxlbmd0aCYmRS5sZW5ndGg8cD8ocD1FLmxlbmd0aCxtPUUseCh5LGcpKTpfLmxlbmd0aDw9RS5sZW5ndGgmJl8ubGVuZ3RoPHAmJihwPV8ubGVuZ3RoLG09Xyx4KHYsZykpfWZvcih2YXIgQz10aGlzLnNwYXduKG0ubWFwKGZ1bmN0aW9uKEIpe3JldHVybiBpW0JbMF1dfSkpLEQ9dGhpcy5zcGF3bigpLE89dGhpcy5zcGF3bigpLFI9Z1swXSxrPTA7azxnLmxlbmd0aDtrKyspe3ZhciBMPWdba10sQT1uW2tdO0w9PT1SP0QubWVyZ2UoQSk6Ty5tZXJnZShBKX12YXIgST1vKGZ1bmN0aW9uKEYpe3ZhciB6PWUuc3Bhd24oKTtyZXR1cm4gRi5mb3JFYWNoKGZ1bmN0aW9uKCQpe3oubWVyZ2UoJCksJC5jb25uZWN0ZWRFZGdlcygpLmZvckVhY2goZnVuY3Rpb24oVSl7ZS5jb250YWlucyhVKSYmIUMuY29udGFpbnMoVSkmJnoubWVyZ2UoVSl9KX0pLHp9LCJjb25zdHJ1Y3RDb21wb25lbnQiKSxNPVtJKEQpLEkoTyldLFA9e2N1dDpDLGNvbXBvbmVudHM6TSxwYXJ0aXRpb24xOkQscGFydGl0aW9uMjpPfTtyZXR1cm4gUH0sImthcmdlclN0ZWluIil9LHFZZT1vKGZ1bmN0aW9uKGUpe3JldHVybnt4OmUueCx5OmUueX19LCJjb3B5UG9zaXRpb24iKSxKNj1vKGZ1bmN0aW9uKGUscixuKXtyZXR1cm57eDplLngqcituLngseTplLnkqcituLnl9fSwibW9kZWxUb1JlbmRlcmVkUG9zaXRpb24iKSxFZ2U9byhmdW5jdGlvbihlLHIsbil7cmV0dXJue3g6KGUueC1uLngpL3IseTooZS55LW4ueSkvcn19LCJyZW5kZXJlZFRvTW9kZWxQb3NpdGlvbiIpLGoxPW8oZnVuY3Rpb24oZSl7cmV0dXJue3g6ZVswXSx5OmVbMV19fSwiYXJyYXkycG9pbnQiKSxZWWU9byhmdW5jdGlvbihlKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOjAsbj1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ZS5sZW5ndGgsaT0xLzAsYT1yO2E8bjthKyspe3ZhciBzPWVbYV07aXNGaW5pdGUocykmJihpPU1hdGgubWluKHMsaSkpfXJldHVybiBpfSwibWluIiksWFllPW8oZnVuY3Rpb24oZSl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTowLG49YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOmUubGVuZ3RoLGk9LTEvMCxhPXI7YTxuO2ErKyl7dmFyIHM9ZVthXTtpc0Zpbml0ZShzKSYmKGk9TWF0aC5tYXgocyxpKSl9cmV0dXJuIGl9LCJtYXgiKSxqWWU9byhmdW5jdGlvbihlKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOjAsbj1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ZS5sZW5ndGgsaT0wLGE9MCxzPXI7czxuO3MrKyl7dmFyIGw9ZVtzXTtpc0Zpbml0ZShsKSYmKGkrPWwsYSsrKX1yZXR1cm4gaS9hfSwibWVhbiIpLEtZZT1vKGZ1bmN0aW9uKGUpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTowLG49YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOmUubGVuZ3RoLGk9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiEwLGE9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOiEwLHM9YXJndW1lbnRzLmxlbmd0aD41JiZhcmd1bWVudHNbNV0hPT12b2lkIDA/YXJndW1lbnRzWzVdOiEwO2k/ZT1lLnNsaWNlKHIsbik6KG48ZS5sZW5ndGgmJmUuc3BsaWNlKG4sZS5sZW5ndGgtbikscj4wJiZlLnNwbGljZSgwLHIpKTtmb3IodmFyIGw9MCx1PWUubGVuZ3RoLTE7dT49MDt1LS0pe3ZhciBoPWVbdV07cz9pc0Zpbml0ZShoKXx8KGVbdV09LTEvMCxsKyspOmUuc3BsaWNlKHUsMSl9YSYmZS5zb3J0KGZ1bmN0aW9uKHAsbSl7cmV0dXJuIHAtbX0pO3ZhciBmPWUubGVuZ3RoLGQ9TWF0aC5mbG9vcihmLzIpO3JldHVybiBmJTIhPT0wP2VbZCsxK2xdOihlW2QtMStsXStlW2QrbF0pLzJ9LCJtZWRpYW4iKSxRWWU9byhmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5QSSplLzE4MH0sImRlZzJyYWQiKSxnNj1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIE1hdGguYXRhbjIocixlKS1NYXRoLlBJLzJ9LCJnZXRBbmdsZUZyb21EaXNwIiksVkI9TWF0aC5sb2cyfHxmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5sb2codCkvTWF0aC5sb2coMil9LFNnZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBlPjA/MTplPDA/LTE6MH0sInNpZ251bSIpLFFwPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gTWF0aC5zcXJ0KFdwKGUscikpfSwiZGlzdCIpLFdwPW8oZnVuY3Rpb24oZSxyKXt2YXIgbj1yLngtZS54LGk9ci55LWUueTtyZXR1cm4gbipuK2kqaX0sInNxZGlzdCIpLFpZZT1vKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj1lLmxlbmd0aCxuPTAsaT0wO2k8cjtpKyspbis9ZVtpXTtmb3IodmFyIGE9MDthPHI7YSsrKWVbYV09ZVthXS9uO3JldHVybiBlfSwiaW5QbGFjZVN1bU5vcm1hbGl6ZSIpLHNhPW8oZnVuY3Rpb24oZSxyLG4saSl7cmV0dXJuKDEtaSkqKDEtaSkqZSsyKigxLWkpKmkqcitpKmkqbn0sInFiZXppZXJBdCIpLFExPW8oZnVuY3Rpb24oZSxyLG4saSl7cmV0dXJue3g6c2EoZS54LHIueCxuLngsaSkseTpzYShlLnksci55LG4ueSxpKX19LCJxYmV6aWVyUHRBdCIpLEpZZT1vKGZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPXt4OnIueC1lLngseTpyLnktZS55fSxzPVFwKGUsciksbD17eDphLngvcyx5OmEueS9zfTtyZXR1cm4gbj1uPz8wLGk9aT8/bipzLHt4OmUueCtsLngqaSx5OmUueStsLnkqaX19LCJsaW5lQXQiKSxpND1vKGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gTWF0aC5tYXgoZSxNYXRoLm1pbihuLHIpKX0sImJvdW5kIiksWXM9byhmdW5jdGlvbihlKXtpZihlPT1udWxsKXJldHVybnt4MToxLzAseTE6MS8wLHgyOi0xLzAseTI6LTEvMCx3OjAsaDowfTtpZihlLngxIT1udWxsJiZlLnkxIT1udWxsKXtpZihlLngyIT1udWxsJiZlLnkyIT1udWxsJiZlLngyPj1lLngxJiZlLnkyPj1lLnkxKXJldHVybnt4MTplLngxLHkxOmUueTEseDI6ZS54Mix5MjplLnkyLHc6ZS54Mi1lLngxLGg6ZS55Mi1lLnkxfTtpZihlLnchPW51bGwmJmUuaCE9bnVsbCYmZS53Pj0wJiZlLmg+PTApcmV0dXJue3gxOmUueDEseTE6ZS55MSx4MjplLngxK2Uudyx5MjplLnkxK2UuaCx3OmUudyxoOmUuaH19fSwibWFrZUJvdW5kaW5nQm94IiksZVhlPW8oZnVuY3Rpb24oZSl7cmV0dXJue3gxOmUueDEseDI6ZS54Mix3OmUudyx5MTplLnkxLHkyOmUueTIsaDplLmh9fSwiY29weUJvdW5kaW5nQm94IiksdFhlPW8oZnVuY3Rpb24oZSl7ZS54MT0xLzAsZS55MT0xLzAsZS54Mj0tMS8wLGUueTI9LTEvMCxlLnc9MCxlLmg9MH0sImNsZWFyQm91bmRpbmdCb3giKSxyWGU9byhmdW5jdGlvbihlLHIsbil7cmV0dXJue3gxOmUueDErcix4MjplLngyK3IseTE6ZS55MStuLHkyOmUueTIrbix3OmUudyxoOmUuaH19LCJzaGlmdEJvdW5kaW5nQm94IiksQ2dlPW8oZnVuY3Rpb24oZSxyKXtlLngxPU1hdGgubWluKGUueDEsci54MSksZS54Mj1NYXRoLm1heChlLngyLHIueDIpLGUudz1lLngyLWUueDEsZS55MT1NYXRoLm1pbihlLnkxLHIueTEpLGUueTI9TWF0aC5tYXgoZS55MixyLnkyKSxlLmg9ZS55Mi1lLnkxfSwidXBkYXRlQm91bmRpbmdCb3giKSxuWGU9byhmdW5jdGlvbihlLHIsbil7ZS54MT1NYXRoLm1pbihlLngxLHIpLGUueDI9TWF0aC5tYXgoZS54MixyKSxlLnc9ZS54Mi1lLngxLGUueTE9TWF0aC5taW4oZS55MSxuKSxlLnkyPU1hdGgubWF4KGUueTIsbiksZS5oPWUueTItZS55MX0sImV4cGFuZEJvdW5kaW5nQm94QnlQb2ludCIpLEQ2PW8oZnVuY3Rpb24oZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOjA7cmV0dXJuIGUueDEtPXIsZS54Mis9cixlLnkxLT1yLGUueTIrPXIsZS53PWUueDItZS54MSxlLmg9ZS55Mi1lLnkxLGV9LCJleHBhbmRCb3VuZGluZ0JveCIpLEw2PW8oZnVuY3Rpb24oZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOlswXSxuLGksYSxzO2lmKHIubGVuZ3RoPT09MSluPWk9YT1zPXJbMF07ZWxzZSBpZihyLmxlbmd0aD09PTIpbj1hPXJbMF0scz1pPXJbMV07ZWxzZSBpZihyLmxlbmd0aD09PTQpe3ZhciBsPVJpKHIsNCk7bj1sWzBdLGk9bFsxXSxhPWxbMl0scz1sWzNdfXJldHVybiBlLngxLT1zLGUueDIrPWksZS55MS09bixlLnkyKz1hLGUudz1lLngyLWUueDEsZS5oPWUueTItZS55MSxlfSwiZXhwYW5kQm91bmRpbmdCb3hTaWRlcyIpLFgwZT1vKGZ1bmN0aW9uKGUscil7ZS54MT1yLngxLGUueTE9ci55MSxlLngyPXIueDIsZS55Mj1yLnkyLGUudz1lLngyLWUueDEsZS5oPWUueTItZS55MX0sImFzc2lnbkJvdW5kaW5nQm94IiksVUI9byhmdW5jdGlvbihlLHIpe3JldHVybiEoZS54MT5yLngyfHxyLngxPmUueDJ8fGUueDI8ci54MXx8ci54MjxlLngxfHxlLnkyPHIueTF8fHIueTI8ZS55MXx8ZS55MT5yLnkyfHxyLnkxPmUueTIpfSwiYm91bmRpbmdCb3hlc0ludGVyc2VjdCIpLHJ5PW8oZnVuY3Rpb24oZSxyLG4pe3JldHVybiBlLngxPD1yJiZyPD1lLngyJiZlLnkxPD1uJiZuPD1lLnkyfSwiaW5Cb3VuZGluZ0JveCIpLGlYZT1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIHJ5KGUsci54LHIueSl9LCJwb2ludEluQm91bmRpbmdCb3giKSxBZ2U9byhmdW5jdGlvbihlLHIpe3JldHVybiByeShlLHIueDEsci55MSkmJnJ5KGUsci54MixyLnkyKX0sImJvdW5kaW5nQm94SW5Cb3VuZGluZ0JveCIpLF9nZT1vKGZ1bmN0aW9uKGUscixuLGksYSxzLGwpe3ZhciB1PWFyZ3VtZW50cy5sZW5ndGg+NyYmYXJndW1lbnRzWzddIT09dm9pZCAwP2FyZ3VtZW50c1s3XToiYXV0byIsaD11PT09ImF1dG8iP1pwKGEscyk6dSxmPWEvMixkPXMvMjtoPU1hdGgubWluKGgsZixkKTt2YXIgcD1oIT09ZixtPWghPT1kLGc7aWYocCl7dmFyIHk9bi1mK2gtbCx2PWktZC1sLHg9bitmLWgrbCxiPXY7aWYoZz1NZihlLHIsbixpLHksdix4LGIsITEpLGcubGVuZ3RoPjApcmV0dXJuIGd9aWYobSl7dmFyIFQ9bitmK2wsUz1pLWQraC1sLHc9VCxFPWkrZC1oK2w7aWYoZz1NZihlLHIsbixpLFQsUyx3LEUsITEpLGcubGVuZ3RoPjApcmV0dXJuIGd9aWYocCl7dmFyIF89bi1mK2gtbCxDPWkrZCtsLEQ9bitmLWgrbCxPPUM7aWYoZz1NZihlLHIsbixpLF8sQyxELE8sITEpLGcubGVuZ3RoPjApcmV0dXJuIGd9aWYobSl7dmFyIFI9bi1mLWwsaz1pLWQraC1sLEw9UixBPWkrZC1oK2w7aWYoZz1NZihlLHIsbixpLFIsayxMLEEsITEpLGcubGVuZ3RoPjApcmV0dXJuIGd9dmFyIEk7e3ZhciBNPW4tZitoLFA9aS1kK2g7aWYoST1ZYihlLHIsbixpLE0sUCxoK2wpLEkubGVuZ3RoPjAmJklbMF08PU0mJklbMV08PVApcmV0dXJuW0lbMF0sSVsxXV19e3ZhciBCPW4rZi1oLEY9aS1kK2g7aWYoST1ZYihlLHIsbixpLEIsRixoK2wpLEkubGVuZ3RoPjAmJklbMF0+PUImJklbMV08PUYpcmV0dXJuW0lbMF0sSVsxXV19e3ZhciB6PW4rZi1oLCQ9aStkLWg7aWYoST1ZYihlLHIsbixpLHosJCxoK2wpLEkubGVuZ3RoPjAmJklbMF0+PXomJklbMV0+PSQpcmV0dXJuW0lbMF0sSVsxXV19e3ZhciBVPW4tZitoLEs9aStkLWg7aWYoST1ZYihlLHIsbixpLFUsSyxoK2wpLEkubGVuZ3RoPjAmJklbMF08PVUmJklbMV0+PUspcmV0dXJuW0lbMF0sSVsxXV19cmV0dXJuW119LCJyb3VuZFJlY3RhbmdsZUludGVyc2VjdExpbmUiKSxhWGU9byhmdW5jdGlvbihlLHIsbixpLGEscyxsKXt2YXIgdT1sLGg9TWF0aC5taW4obixhKSxmPU1hdGgubWF4KG4sYSksZD1NYXRoLm1pbihpLHMpLHA9TWF0aC5tYXgoaSxzKTtyZXR1cm4gaC11PD1lJiZlPD1mK3UmJmQtdTw9ciYmcjw9cCt1fSwiaW5MaW5lVmljaW5pdHkiKSxzWGU9byhmdW5jdGlvbihlLHIsbixpLGEscyxsLHUsaCl7dmFyIGY9e3gxOk1hdGgubWluKG4sbCxhKS1oLHgyOk1hdGgubWF4KG4sbCxhKStoLHkxOk1hdGgubWluKGksdSxzKS1oLHkyOk1hdGgubWF4KGksdSxzKStofTtyZXR1cm4hKGU8Zi54MXx8ZT5mLngyfHxyPGYueTF8fHI+Zi55Mil9LCJpbkJlemllclZpY2luaXR5Iiksb1hlPW8oZnVuY3Rpb24oZSxyLG4saSl7bi09aTt2YXIgYT1yKnItNCplKm47aWYoYTwwKXJldHVybltdO3ZhciBzPU1hdGguc3FydChhKSxsPTIqZSx1PSgtcitzKS9sLGg9KC1yLXMpL2w7cmV0dXJuW3UsaF19LCJzb2x2ZVF1YWRyYXRpYyIpLGxYZT1vKGZ1bmN0aW9uKGUscixuLGksYSl7dmFyIHM9MWUtNTtlPT09MCYmKGU9cyksci89ZSxuLz1lLGkvPWU7dmFyIGwsdSxoLGYsZCxwLG0sZztpZih1PSgzKm4tcipyKS85LGg9LSgyNyppKStyKig5Km4tMioocipyKSksaC89NTQsbD11KnUqdStoKmgsYVsxXT0wLG09ci8zLGw+MCl7ZD1oK01hdGguc3FydChsKSxkPWQ8MD8tTWF0aC5wb3coLWQsMS8zKTpNYXRoLnBvdyhkLDEvMykscD1oLU1hdGguc3FydChsKSxwPXA8MD8tTWF0aC5wb3coLXAsMS8zKTpNYXRoLnBvdyhwLDEvMyksYVswXT0tbStkK3AsbSs9KGQrcCkvMixhWzRdPWFbMl09LW0sbT1NYXRoLnNxcnQoMykqKC1wK2QpLzIsYVszXT1tLGFbNV09LW07cmV0dXJufWlmKGFbNV09YVszXT0wLGw9PT0wKXtnPWg8MD8tTWF0aC5wb3coLWgsMS8zKTpNYXRoLnBvdyhoLDEvMyksYVswXT0tbSsyKmcsYVs0XT1hWzJdPS0oZyttKTtyZXR1cm59dT0tdSxmPXUqdSp1LGY9TWF0aC5hY29zKGgvTWF0aC5zcXJ0KGYpKSxnPTIqTWF0aC5zcXJ0KHUpLGFbMF09LW0rZypNYXRoLmNvcyhmLzMpLGFbMl09LW0rZypNYXRoLmNvcygoZisyKk1hdGguUEkpLzMpLGFbNF09LW0rZypNYXRoLmNvcygoZis0Kk1hdGguUEkpLzMpfSwic29sdmVDdWJpYyIpLGNYZT1vKGZ1bmN0aW9uKGUscixuLGksYSxzLGwsdSl7dmFyIGg9MSpuKm4tNCpuKmErMipuKmwrNCphKmEtNCphKmwrbCpsK2kqaS00KmkqcysyKmkqdSs0KnMqcy00KnMqdSt1KnUsZj0xKjkqbiphLTMqbipuLTMqbipsLTYqYSphKzMqYSpsKzkqaSpzLTMqaSppLTMqaSp1LTYqcypzKzMqcyp1LGQ9MSozKm4qbi02Km4qYStuKmwtbiplKzIqYSphKzIqYSplLWwqZSszKmkqaS02KmkqcytpKnUtaSpyKzIqcypzKzIqcypyLXUqcixwPTEqbiphLW4qbituKmUtYSplK2kqcy1pKmkraSpyLXMqcixtPVtdO2xYZShoLGYsZCxwLG0pO2Zvcih2YXIgZz0xZS03LHk9W10sdj0wO3Y8Njt2Kz0yKU1hdGguYWJzKG1bdisxXSk8ZyYmbVt2XT49MCYmbVt2XTw9MSYmeS5wdXNoKG1bdl0pO3kucHVzaCgxKSx5LnB1c2goMCk7Zm9yKHZhciB4PS0xLGIsVCxTLHc9MDt3PHkubGVuZ3RoO3crKyliPU1hdGgucG93KDEteVt3XSwyKSpuKzIqKDEteVt3XSkqeVt3XSphK3lbd10qeVt3XSpsLFQ9TWF0aC5wb3coMS15W3ddLDIpKmkrMiooMS15W3ddKSp5W3ddKnMreVt3XSp5W3ddKnUsUz1NYXRoLnBvdyhiLWUsMikrTWF0aC5wb3coVC1yLDIpLHg+PTA/Uzx4JiYoeD1TKTp4PVM7cmV0dXJuIHh9LCJzcWRpc3RUb1F1YWRyYXRpY0JlemllciIpLHVYZT1vKGZ1bmN0aW9uKGUscixuLGksYSxzKXt2YXIgbD1bZS1uLHItaV0sdT1bYS1uLHMtaV0saD11WzBdKnVbMF0rdVsxXSp1WzFdLGY9bFswXSpsWzBdK2xbMV0qbFsxXSxkPWxbMF0qdVswXStsWzFdKnVbMV0scD1kKmQvaDtyZXR1cm4gZDwwP2Y6cD5oPyhlLWEpKihlLWEpKyhyLXMpKihyLXMpOmYtcH0sInNxZGlzdFRvRmluaXRlTGluZSIpLHFzPW8oZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaSxhLHMsbCx1LGg9MCxmPTA7ZjxuLmxlbmd0aC8yO2YrKylpZihpPW5bZioyXSxhPW5bZioyKzFdLGYrMTxuLmxlbmd0aC8yPyhzPW5bKGYrMSkqMl0sbD1uWyhmKzEpKjIrMV0pOihzPW5bKGYrMS1uLmxlbmd0aC8yKSoyXSxsPW5bKGYrMS1uLmxlbmd0aC8yKSoyKzFdKSwhKGk9PWUmJnM9PWUpKWlmKGk+PWUmJmU+PXN8fGk8PWUmJmU8PXMpdT0oZS1pKS8ocy1pKSoobC1hKSthLHU+ciYmaCsrO2Vsc2UgY29udGludWU7cmV0dXJuIGglMiE9PTB9LCJwb2ludEluc2lkZVBvbHlnb25Qb2ludHMiKSxpaD1vKGZ1bmN0aW9uKGUscixuLGksYSxzLGwsdSxoKXt2YXIgZj1uZXcgQXJyYXkobi5sZW5ndGgpLGQ7dVswXSE9bnVsbD8oZD1NYXRoLmF0YW4odVsxXS91WzBdKSx1WzBdPDA/ZD1kK01hdGguUEkvMjpkPS1kLU1hdGguUEkvMik6ZD11O2Zvcih2YXIgcD1NYXRoLmNvcygtZCksbT1NYXRoLnNpbigtZCksZz0wO2c8Zi5sZW5ndGgvMjtnKyspZltnKjJdPXMvMioobltnKjJdKnAtbltnKjIrMV0qbSksZltnKjIrMV09bC8yKihuW2cqMisxXSpwK25bZyoyXSptKSxmW2cqMl0rPWksZltnKjIrMV0rPWE7dmFyIHk7aWYoaD4wKXt2YXIgdj1WNihmLC1oKTt5PUc2KHYpfWVsc2UgeT1mO3JldHVybiBxcyhlLHIseSl9LCJwb2ludEluc2lkZVBvbHlnb24iKSxoWGU9byhmdW5jdGlvbihlLHIsbixpLGEscyxsLHUpe2Zvcih2YXIgaD1uZXcgQXJyYXkobi5sZW5ndGgqMiksZj0wO2Y8dS5sZW5ndGg7ZisrKXt2YXIgZD11W2ZdO2hbZio0KzBdPWQuc3RhcnRYLGhbZio0KzFdPWQuc3RhcnRZLGhbZio0KzJdPWQuc3RvcFgsaFtmKjQrM109ZC5zdG9wWTt2YXIgcD1NYXRoLnBvdyhkLmN4LWUsMikrTWF0aC5wb3coZC5jeS1yLDIpO2lmKHA8PU1hdGgucG93KGQucmFkaXVzLDIpKXJldHVybiEwfXJldHVybiBxcyhlLHIsaCl9LCJwb2ludEluc2lkZVJvdW5kUG9seWdvbiIpLEc2PW8oZnVuY3Rpb24oZSl7Zm9yKHZhciByPW5ldyBBcnJheShlLmxlbmd0aC8yKSxuLGksYSxzLGwsdSxoLGYsZD0wO2Q8ZS5sZW5ndGgvNDtkKyspe249ZVtkKjRdLGk9ZVtkKjQrMV0sYT1lW2QqNCsyXSxzPWVbZCo0KzNdLGQ8ZS5sZW5ndGgvNC0xPyhsPWVbKGQrMSkqNF0sdT1lWyhkKzEpKjQrMV0saD1lWyhkKzEpKjQrMl0sZj1lWyhkKzEpKjQrM10pOihsPWVbMF0sdT1lWzFdLGg9ZVsyXSxmPWVbM10pO3ZhciBwPU1mKG4saSxhLHMsbCx1LGgsZiwhMCk7cltkKjJdPXBbMF0scltkKjIrMV09cFsxXX1yZXR1cm4gcn0sImpvaW5MaW5lcyIpLFY2PW8oZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49bmV3IEFycmF5KGUubGVuZ3RoKjIpLGksYSxzLGwsdT0wO3U8ZS5sZW5ndGgvMjt1Kyspe2k9ZVt1KjJdLGE9ZVt1KjIrMV0sdTxlLmxlbmd0aC8yLTE/KHM9ZVsodSsxKSoyXSxsPWVbKHUrMSkqMisxXSk6KHM9ZVswXSxsPWVbMV0pO3ZhciBoPWwtYSxmPS0ocy1pKSxkPU1hdGguc3FydChoKmgrZipmKSxwPWgvZCxtPWYvZDtuW3UqNF09aStwKnIsblt1KjQrMV09YSttKnIsblt1KjQrMl09cytwKnIsblt1KjQrM109bCttKnJ9cmV0dXJuIG59LCJleHBhbmRQb2x5Z29uIiksZlhlPW8oZnVuY3Rpb24oZSxyLG4saSxhLHMpe3ZhciBsPW4tZSx1PWktcjtsLz1hLHUvPXM7dmFyIGg9TWF0aC5zcXJ0KGwqbCt1KnUpLGY9aC0xO2lmKGY8MClyZXR1cm5bXTt2YXIgZD1mL2g7cmV0dXJuWyhuLWUpKmQrZSwoaS1yKSpkK3JdfSwiaW50ZXJzZWN0TGluZUVsbGlwc2UiKSxqcD1vKGZ1bmN0aW9uKGUscixuLGksYSxzLGwpe3JldHVybiBlLT1hLHItPXMsZS89bi8yK2wsci89aS8yK2wsZSplK3Iqcjw9MX0sImNoZWNrSW5FbGxpcHNlIiksWWI9byhmdW5jdGlvbihlLHIsbixpLGEscyxsKXt2YXIgdT1bbi1lLGktcl0saD1bZS1hLHItc10sZj11WzBdKnVbMF0rdVsxXSp1WzFdLGQ9MiooaFswXSp1WzBdK2hbMV0qdVsxXSkscD1oWzBdKmhbMF0raFsxXSpoWzFdLWwqbCxtPWQqZC00KmYqcDtpZihtPDApcmV0dXJuW107dmFyIGc9KC1kK01hdGguc3FydChtKSkvKDIqZikseT0oLWQtTWF0aC5zcXJ0KG0pKS8oMipmKSx2PU1hdGgubWluKGcseSkseD1NYXRoLm1heChnLHkpLGI9W107aWYodj49MCYmdjw9MSYmYi5wdXNoKHYpLHg+PTAmJng8PTEmJmIucHVzaCh4KSxiLmxlbmd0aD09PTApcmV0dXJuW107dmFyIFQ9YlswXSp1WzBdK2UsUz1iWzBdKnVbMV0rcjtpZihiLmxlbmd0aD4xKXtpZihiWzBdPT1iWzFdKXJldHVybltULFNdO3ZhciB3PWJbMV0qdVswXStlLEU9YlsxXSp1WzFdK3I7cmV0dXJuW1QsUyx3LEVdfWVsc2UgcmV0dXJuW1QsU119LCJpbnRlcnNlY3RMaW5lQ2lyY2xlIiksc0I9byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIHI8PWUmJmU8PW58fG48PWUmJmU8PXI/ZTplPD1yJiZyPD1ufHxuPD1yJiZyPD1lP3I6bn0sIm1pZE9mVGhyZWUiKSxNZj1vKGZ1bmN0aW9uKGUscixuLGksYSxzLGwsdSxoKXt2YXIgZj1lLWEsZD1uLWUscD1sLWEsbT1yLXMsZz1pLXIseT11LXMsdj1wKm0teSpmLHg9ZCptLWcqZixiPXkqZC1wKmc7aWYoYiE9PTApe3ZhciBUPXYvYixTPXgvYix3PS4wMDEsRT0wLXcsXz0xK3c7cmV0dXJuIEU8PVQmJlQ8PV8mJkU8PVMmJlM8PV8/W2UrVCpkLHIrVCpnXTpoP1tlK1QqZCxyK1QqZ106W119ZWxzZSByZXR1cm4gdj09PTB8fHg9PT0wP3NCKGUsbixsKT09PWw/W2wsdV06c0IoZSxuLGEpPT09YT9bYSxzXTpzQihhLGwsbik9PT1uP1tuLGldOltdOltdfSwiZmluaXRlTGluZXNJbnRlcnNlY3QiKSxhND1vKGZ1bmN0aW9uKGUscixuLGksYSxzLGwsdSl7dmFyIGg9W10sZixkPW5ldyBBcnJheShuLmxlbmd0aCkscD0hMDtzPT1udWxsJiYocD0hMSk7dmFyIG07aWYocCl7Zm9yKHZhciBnPTA7ZzxkLmxlbmd0aC8yO2crKylkW2cqMl09bltnKjJdKnMraSxkW2cqMisxXT1uW2cqMisxXSpsK2E7aWYodT4wKXt2YXIgeT1WNihkLC11KTttPUc2KHkpfWVsc2UgbT1kfWVsc2UgbT1uO2Zvcih2YXIgdix4LGIsVCxTPTA7UzxtLmxlbmd0aC8yO1MrKyl2PW1bUyoyXSx4PW1bUyoyKzFdLFM8bS5sZW5ndGgvMi0xPyhiPW1bKFMrMSkqMl0sVD1tWyhTKzEpKjIrMV0pOihiPW1bMF0sVD1tWzFdKSxmPU1mKGUscixpLGEsdix4LGIsVCksZi5sZW5ndGghPT0wJiZoLnB1c2goZlswXSxmWzFdKTtyZXR1cm4gaH0sInBvbHlnb25JbnRlcnNlY3RMaW5lIiksZFhlPW8oZnVuY3Rpb24oZSxyLG4saSxhLHMsbCx1LGgpe3ZhciBmPVtdLGQscD1uZXcgQXJyYXkobi5sZW5ndGgqMik7aC5mb3JFYWNoKGZ1bmN0aW9uKGIsVCl7VD09PTA/KHBbcC5sZW5ndGgtMl09Yi5zdGFydFgscFtwLmxlbmd0aC0xXT1iLnN0YXJ0WSk6KHBbVCo0LTJdPWIuc3RhcnRYLHBbVCo0LTFdPWIuc3RhcnRZKSxwW1QqNF09Yi5zdG9wWCxwW1QqNCsxXT1iLnN0b3BZLGQ9WWIoZSxyLGksYSxiLmN4LGIuY3ksYi5yYWRpdXMpLGQubGVuZ3RoIT09MCYmZi5wdXNoKGRbMF0sZFsxXSl9KTtmb3IodmFyIG09MDttPHAubGVuZ3RoLzQ7bSsrKWQ9TWYoZSxyLGksYSxwW20qNF0scFttKjQrMV0scFttKjQrMl0scFttKjQrM10sITEpLGQubGVuZ3RoIT09MCYmZi5wdXNoKGRbMF0sZFsxXSk7aWYoZi5sZW5ndGg+Mil7Zm9yKHZhciBnPVtmWzBdLGZbMV1dLHk9TWF0aC5wb3coZ1swXS1lLDIpK01hdGgucG93KGdbMV0tciwyKSx2PTE7djxmLmxlbmd0aC8yO3YrKyl7dmFyIHg9TWF0aC5wb3coZlt2KjJdLWUsMikrTWF0aC5wb3coZlt2KjIrMV0tciwyKTt4PD15JiYoZ1swXT1mW3YqMl0sZ1sxXT1mW3YqMisxXSx5PXgpfXJldHVybiBnfXJldHVybiBmfSwicm91bmRQb2x5Z29uSW50ZXJzZWN0TGluZSIpLHk2PW8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPVtlWzBdLXJbMF0sZVsxXS1yWzFdXSxhPU1hdGguc3FydChpWzBdKmlbMF0raVsxXSppWzFdKSxzPShhLW4pL2E7cmV0dXJuIHM8MCYmKHM9MWUtNSksW3JbMF0rcyppWzBdLHJbMV0rcyppWzFdXX0sInNob3J0ZW5JbnRlcnNlY3Rpb24iKSxUcz1vKGZ1bmN0aW9uKGUscil7dmFyIG49YkIoZSxyKTtyZXR1cm4gbj1EZ2Uobiksbn0sImdlbmVyYXRlVW5pdE5nb25Qb2ludHNGaXRUb1NxdWFyZSIpLERnZT1vKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcixuLGk9ZS5sZW5ndGgvMixhPTEvMCxzPTEvMCxsPS0xLzAsdT0tMS8wLGg9MDtoPGk7aCsrKXI9ZVsyKmhdLG49ZVsyKmgrMV0sYT1NYXRoLm1pbihhLHIpLGw9TWF0aC5tYXgobCxyKSxzPU1hdGgubWluKHMsbiksdT1NYXRoLm1heCh1LG4pO2Zvcih2YXIgZj0yLyhsLWEpLGQ9Mi8odS1zKSxwPTA7cDxpO3ArKylyPWVbMipwXT1lWzIqcF0qZixuPWVbMipwKzFdPWVbMipwKzFdKmQsYT1NYXRoLm1pbihhLHIpLGw9TWF0aC5tYXgobCxyKSxzPU1hdGgubWluKHMsbiksdT1NYXRoLm1heCh1LG4pO2lmKHM8LTEpZm9yKHZhciBtPTA7bTxpO20rKyluPWVbMiptKzFdPWVbMiptKzFdKygtMS1zKTtyZXR1cm4gZX0sImZpdFBvbHlnb25Ub1NxdWFyZSIpLGJCPW8oZnVuY3Rpb24oZSxyKXt2YXIgbj0xL2UqMipNYXRoLlBJLGk9ZSUyPT09MD9NYXRoLlBJLzIrbi8yOk1hdGguUEkvMjtpKz1yO2Zvcih2YXIgYT1uZXcgQXJyYXkoZSoyKSxzLGw9MDtsPGU7bCsrKXM9bCpuK2ksYVsyKmxdPU1hdGguY29zKHMpLGFbMipsKzFdPU1hdGguc2luKC1zKTtyZXR1cm4gYX0sImdlbmVyYXRlVW5pdE5nb25Qb2ludHMiKSxacD1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIE1hdGgubWluKGUvNCxyLzQsOCl9LCJnZXRSb3VuZFJlY3RhbmdsZVJhZGl1cyIpLExnZT1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIE1hdGgubWluKGUvMTAsci8xMCw4KX0sImdldFJvdW5kUG9seWdvblJhZGl1cyIpLEhCPW8oZnVuY3Rpb24oKXtyZXR1cm4gOH0sImdldEN1dFJlY3RhbmdsZUNvcm5lckxlbmd0aCIpLHBYZT1vKGZ1bmN0aW9uKGUscixuKXtyZXR1cm5bZS0yKnIrbiwyKihyLWUpLGVdfSwiYmV6aWVyUHRzVG9RdWFkQ29lZmYiKSxUQj1vKGZ1bmN0aW9uKGUscil7cmV0dXJue2hlaWdodE9mZnNldDpNYXRoLm1pbigxNSwuMDUqciksd2lkdGhPZmZzZXQ6TWF0aC5taW4oMTAwLC4yNSplKSxjdHJsUHRPZmZzZXRQY3Q6LjA1fX0sImdldEJhcnJlbEN1cnZlQ29uc3RhbnRzIiksbVhlPW9hKHtkYW1waW5nRmFjdG9yOi44LHByZWNpc2lvbjoxZS02LGl0ZXJhdGlvbnM6MjAwLHdlaWdodDpvKGZ1bmN0aW9uKGUpe3JldHVybiAxfSwid2VpZ2h0Iil9KSxnWGU9e3BhZ2VSYW5rOm8oZnVuY3Rpb24oZSl7Zm9yKHZhciByPW1YZShlKSxuPXIuZGFtcGluZ0ZhY3RvcixpPXIucHJlY2lzaW9uLGE9ci5pdGVyYXRpb25zLHM9ci53ZWlnaHQsbD10aGlzLl9wcml2YXRlLmN5LHU9dGhpcy5ieUdyb3VwKCksaD11Lm5vZGVzLGY9dS5lZGdlcyxkPWgubGVuZ3RoLHA9ZCpkLG09Zi5sZW5ndGgsZz1uZXcgQXJyYXkocCkseT1uZXcgQXJyYXkoZCksdj0oMS1uKS9kLHg9MDt4PGQ7eCsrKXtmb3IodmFyIGI9MDtiPGQ7YisrKXt2YXIgVD14KmQrYjtnW1RdPTB9eVt4XT0wfWZvcih2YXIgUz0wO1M8bTtTKyspe3ZhciB3PWZbU10sRT13LmRhdGEoInNvdXJjZSIpLF89dy5kYXRhKCJ0YXJnZXQiKTtpZihFIT09Xyl7dmFyIEM9aC5pbmRleE9mSWQoRSksRD1oLmluZGV4T2ZJZChfKSxPPXModyksUj1EKmQrQztnW1JdKz1PLHlbQ10rPU99fWZvcih2YXIgaz0xL2QrdixMPTA7TDxkO0wrKylpZih5W0xdPT09MClmb3IodmFyIEE9MDtBPGQ7QSsrKXt2YXIgST1BKmQrTDtnW0ldPWt9ZWxzZSBmb3IodmFyIE09MDtNPGQ7TSsrKXt2YXIgUD1NKmQrTDtnW1BdPWdbUF0veVtMXSt2fWZvcih2YXIgQj1uZXcgQXJyYXkoZCksRj1uZXcgQXJyYXkoZCkseiwkPTA7JDxkOyQrKylCWyRdPTE7Zm9yKHZhciBVPTA7VTxhO1UrKyl7Zm9yKHZhciBLPTA7SzxkO0srKylGW0tdPTA7Zm9yKHZhciBlZT0wO2VlPGQ7ZWUrKylmb3IodmFyIFk9MDtZPGQ7WSsrKXt2YXIgY2U9ZWUqZCtZO0ZbZWVdKz1nW2NlXSpCW1ldfVpZZShGKSx6PUIsQj1GLEY9ejtmb3IodmFyIFo9MCx1ZT0wO3VlPGQ7dWUrKyl7dmFyIFE9elt1ZV0tQlt1ZV07Wis9USpRfWlmKFo8aSlicmVha312YXIgaj17cmFuazpvKGZ1bmN0aW9uKHRlKXtyZXR1cm4gdGU9bC5jb2xsZWN0aW9uKHRlKVswXSxCW2guaW5kZXhPZih0ZSldfSwicmFuayIpfTtyZXR1cm4gan0sInBhZ2VSYW5rIil9LGowZT1vYSh7cm9vdDpudWxsLHdlaWdodDpvKGZ1bmN0aW9uKGUpe3JldHVybiAxfSwid2VpZ2h0IiksZGlyZWN0ZWQ6ITEsYWxwaGE6MH0pLFoxPXtkZWdyZWVDZW50cmFsaXR5Tm9ybWFsaXplZDpvKGZ1bmN0aW9uKGUpe2U9ajBlKGUpO3ZhciByPXRoaXMuY3koKSxuPXRoaXMubm9kZXMoKSxpPW4ubGVuZ3RoO2lmKGUuZGlyZWN0ZWQpe2Zvcih2YXIgZj17fSxkPXt9LHA9MCxtPTAsZz0wO2c8aTtnKyspe3ZhciB5PW5bZ10sdj15LmlkKCk7ZS5yb290PXk7dmFyIHg9dGhpcy5kZWdyZWVDZW50cmFsaXR5KGUpO3A8eC5pbmRlZ3JlZSYmKHA9eC5pbmRlZ3JlZSksbTx4Lm91dGRlZ3JlZSYmKG09eC5vdXRkZWdyZWUpLGZbdl09eC5pbmRlZ3JlZSxkW3ZdPXgub3V0ZGVncmVlfXJldHVybntpbmRlZ3JlZTpvKGZ1bmN0aW9uKFQpe3JldHVybiBwPT0wPzA6KFp0KFQpJiYoVD1yLmZpbHRlcihUKSksZltULmlkKCldL3ApfSwiaW5kZWdyZWUiKSxvdXRkZWdyZWU6byhmdW5jdGlvbihUKXtyZXR1cm4gbT09PTA/MDooWnQoVCkmJihUPXIuZmlsdGVyKFQpKSxkW1QuaWQoKV0vbSl9LCJvdXRkZWdyZWUiKX19ZWxzZXtmb3IodmFyIGE9e30scz0wLGw9MDtsPGk7bCsrKXt2YXIgdT1uW2xdO2Uucm9vdD11O3ZhciBoPXRoaXMuZGVncmVlQ2VudHJhbGl0eShlKTtzPGguZGVncmVlJiYocz1oLmRlZ3JlZSksYVt1LmlkKCldPWguZGVncmVlfXJldHVybntkZWdyZWU6byhmdW5jdGlvbihUKXtyZXR1cm4gcz09PTA/MDooWnQoVCkmJihUPXIuZmlsdGVyKFQpKSxhW1QuaWQoKV0vcyl9LCJkZWdyZWUiKX19fSwiZGVncmVlQ2VudHJhbGl0eU5vcm1hbGl6ZWQiKSxkZWdyZWVDZW50cmFsaXR5Om8oZnVuY3Rpb24oZSl7ZT1qMGUoZSk7dmFyIHI9dGhpcy5jeSgpLG49dGhpcyxpPWUsYT1pLnJvb3Qscz1pLndlaWdodCxsPWkuZGlyZWN0ZWQsdT1pLmFscGhhO2lmKGE9ci5jb2xsZWN0aW9uKGEpWzBdLGwpe2Zvcih2YXIgbT1hLmNvbm5lY3RlZEVkZ2VzKCksZz1tLmZpbHRlcihmdW5jdGlvbihFKXtyZXR1cm4gRS50YXJnZXQoKS5zYW1lKGEpJiZuLmhhcyhFKX0pLHk9bS5maWx0ZXIoZnVuY3Rpb24oRSl7cmV0dXJuIEUuc291cmNlKCkuc2FtZShhKSYmbi5oYXMoRSl9KSx2PWcubGVuZ3RoLHg9eS5sZW5ndGgsYj0wLFQ9MCxTPTA7UzxnLmxlbmd0aDtTKyspYis9cyhnW1NdKTtmb3IodmFyIHc9MDt3PHkubGVuZ3RoO3crKylUKz1zKHlbd10pO3JldHVybntpbmRlZ3JlZTpNYXRoLnBvdyh2LDEtdSkqTWF0aC5wb3coYix1KSxvdXRkZWdyZWU6TWF0aC5wb3coeCwxLXUpKk1hdGgucG93KFQsdSl9fWVsc2V7Zm9yKHZhciBoPWEuY29ubmVjdGVkRWRnZXMoKS5pbnRlcnNlY3Rpb24obiksZj1oLmxlbmd0aCxkPTAscD0wO3A8aC5sZW5ndGg7cCsrKWQrPXMoaFtwXSk7cmV0dXJue2RlZ3JlZTpNYXRoLnBvdyhmLDEtdSkqTWF0aC5wb3coZCx1KX19fSwiZGVncmVlQ2VudHJhbGl0eSIpfTtaMS5kYz1aMS5kZWdyZWVDZW50cmFsaXR5O1oxLmRjbj1aMS5kZWdyZWVDZW50cmFsaXR5Tm9ybWFsaXNlZD1aMS5kZWdyZWVDZW50cmFsaXR5Tm9ybWFsaXplZDtLMGU9b2Eoe2hhcm1vbmljOiEwLHdlaWdodDpvKGZ1bmN0aW9uKCl7cmV0dXJuIDF9LCJ3ZWlnaHQiKSxkaXJlY3RlZDohMSxyb290Om51bGx9KSxKMT17Y2xvc2VuZXNzQ2VudHJhbGl0eU5vcm1hbGl6ZWQ6byhmdW5jdGlvbihlKXtmb3IodmFyIHI9SzBlKGUpLG49ci5oYXJtb25pYyxpPXIud2VpZ2h0LGE9ci5kaXJlY3RlZCxzPXRoaXMuY3koKSxsPXt9LHU9MCxoPXRoaXMubm9kZXMoKSxmPXRoaXMuZmxveWRXYXJzaGFsbCh7d2VpZ2h0OmksZGlyZWN0ZWQ6YX0pLGQ9MDtkPGgubGVuZ3RoO2QrKyl7Zm9yKHZhciBwPTAsbT1oW2RdLGc9MDtnPGgubGVuZ3RoO2crKylpZihkIT09Zyl7dmFyIHk9Zi5kaXN0YW5jZShtLGhbZ10pO24/cCs9MS95OnArPXl9bnx8KHA9MS9wKSx1PHAmJih1PXApLGxbbS5pZCgpXT1wfXJldHVybntjbG9zZW5lc3M6byhmdW5jdGlvbih4KXtyZXR1cm4gdT09MD8wOihadCh4KT94PXMuZmlsdGVyKHgpWzBdLmlkKCk6eD14LmlkKCksbFt4XS91KX0sImNsb3NlbmVzcyIpfX0sImNsb3NlbmVzc0NlbnRyYWxpdHlOb3JtYWxpemVkIiksY2xvc2VuZXNzQ2VudHJhbGl0eTpvKGZ1bmN0aW9uKGUpe3ZhciByPUswZShlKSxuPXIucm9vdCxpPXIud2VpZ2h0LGE9ci5kaXJlY3RlZCxzPXIuaGFybW9uaWM7bj10aGlzLmZpbHRlcihuKVswXTtmb3IodmFyIGw9dGhpcy5kaWprc3RyYSh7cm9vdDpuLHdlaWdodDppLGRpcmVjdGVkOmF9KSx1PTAsaD10aGlzLm5vZGVzKCksZj0wO2Y8aC5sZW5ndGg7ZisrKXt2YXIgZD1oW2ZdO2lmKCFkLnNhbWUobikpe3ZhciBwPWwuZGlzdGFuY2VUbyhkKTtzP3UrPTEvcDp1Kz1wfX1yZXR1cm4gcz91OjEvdX0sImNsb3NlbmVzc0NlbnRyYWxpdHkiKX07SjEuY2M9SjEuY2xvc2VuZXNzQ2VudHJhbGl0eTtKMS5jY249SjEuY2xvc2VuZXNzQ2VudHJhbGl0eU5vcm1hbGlzZWQ9SjEuY2xvc2VuZXNzQ2VudHJhbGl0eU5vcm1hbGl6ZWQ7eVhlPW9hKHt3ZWlnaHQ6bnVsbCxkaXJlY3RlZDohMX0pLHdCPXtiZXR3ZWVubmVzc0NlbnRyYWxpdHk6byhmdW5jdGlvbihlKXtmb3IodmFyIHI9eVhlKGUpLG49ci5kaXJlY3RlZCxpPXIud2VpZ2h0LGE9aSE9bnVsbCxzPXRoaXMuY3koKSxsPXRoaXMubm9kZXMoKSx1PXt9LGg9e30sZj0wLGQ9e3NldDpvKGZ1bmN0aW9uKFQsUyl7aFtUXT1TLFM+ZiYmKGY9Uyl9LCJzZXQiKSxnZXQ6byhmdW5jdGlvbihUKXtyZXR1cm4gaFtUXX0sImdldCIpfSxwPTA7cDxsLmxlbmd0aDtwKyspe3ZhciBtPWxbcF0sZz1tLmlkKCk7bj91W2ddPW0ub3V0Z29lcnMoKS5ub2RlcygpOnVbZ109bS5vcGVuTmVpZ2hib3Job29kKCkubm9kZXMoKSxkLnNldChnLDApfWZvcih2YXIgeT1vKGZ1bmN0aW9uKFQpe2Zvcih2YXIgUz1sW1RdLmlkKCksdz1bXSxFPXt9LF89e30sQz17fSxEPW5ldyBtNChmdW5jdGlvbihZLGNlKXtyZXR1cm4gQ1tZXS1DW2NlXX0pLE89MDtPPGwubGVuZ3RoO08rKyl7dmFyIFI9bFtPXS5pZCgpO0VbUl09W10sX1tSXT0wLENbUl09MS8wfWZvcihfW1NdPTEsQ1tTXT0wLEQucHVzaChTKTshRC5lbXB0eSgpOyl7dmFyIGs9RC5wb3AoKTtpZih3LnB1c2goayksYSlmb3IodmFyIEw9MDtMPHVba10ubGVuZ3RoO0wrKyl7dmFyIEE9dVtrXVtMXSxJPXMuZ2V0RWxlbWVudEJ5SWQoayksTT12b2lkIDA7SS5lZGdlc1RvKEEpLmxlbmd0aD4wP009SS5lZGdlc1RvKEEpWzBdOk09QS5lZGdlc1RvKEkpWzBdO3ZhciBQPWkoTSk7QT1BLmlkKCksQ1tBXT5DW2tdK1AmJihDW0FdPUNba10rUCxELm5vZGVzLmluZGV4T2YoQSk8MD9ELnB1c2goQSk6RC51cGRhdGVJdGVtKEEpLF9bQV09MCxFW0FdPVtdKSxDW0FdPT1DW2tdK1AmJihfW0FdPV9bQV0rX1trXSxFW0FdLnB1c2goaykpfWVsc2UgZm9yKHZhciBCPTA7Qjx1W2tdLmxlbmd0aDtCKyspe3ZhciBGPXVba11bQl0uaWQoKTtDW0ZdPT0xLzAmJihELnB1c2goRiksQ1tGXT1DW2tdKzEpLENbRl09PUNba10rMSYmKF9bRl09X1tGXStfW2tdLEVbRl0ucHVzaChrKSl9fWZvcih2YXIgej17fSwkPTA7JDxsLmxlbmd0aDskKyspeltsWyRdLmlkKCldPTA7Zm9yKDt3Lmxlbmd0aD4wOyl7Zm9yKHZhciBVPXcucG9wKCksSz0wO0s8RVtVXS5sZW5ndGg7SysrKXt2YXIgZWU9RVtVXVtLXTt6W2VlXT16W2VlXStfW2VlXS9fW1VdKigxK3pbVV0pfVUhPWxbVF0uaWQoKSYmZC5zZXQoVSxkLmdldChVKSt6W1VdKX19LCJfbG9vcCIpLHY9MDt2PGwubGVuZ3RoO3YrKyl5KHYpO3ZhciB4PXtiZXR3ZWVubmVzczpvKGZ1bmN0aW9uKFQpe3ZhciBTPXMuY29sbGVjdGlvbihUKS5pZCgpO3JldHVybiBkLmdldChTKX0sImJldHdlZW5uZXNzIiksYmV0d2Vlbm5lc3NOb3JtYWxpemVkOm8oZnVuY3Rpb24oVCl7aWYoZj09MClyZXR1cm4gMDt2YXIgUz1zLmNvbGxlY3Rpb24oVCkuaWQoKTtyZXR1cm4gZC5nZXQoUykvZn0sImJldHdlZW5uZXNzTm9ybWFsaXplZCIpfTtyZXR1cm4geC5iZXR3ZWVubmVzc05vcm1hbGlzZWQ9eC5iZXR3ZWVubmVzc05vcm1hbGl6ZWQseH0sImJldHdlZW5uZXNzQ2VudHJhbGl0eSIpfTt3Qi5iYz13Qi5iZXR3ZWVubmVzc0NlbnRyYWxpdHk7dlhlPW9hKHtleHBhbmRGYWN0b3I6MixpbmZsYXRlRmFjdG9yOjIsbXVsdEZhY3RvcjoxLG1heEl0ZXJhdGlvbnM6MjAsYXR0cmlidXRlczpbZnVuY3Rpb24odCl7cmV0dXJuIDF9XX0pLHhYZT1vKGZ1bmN0aW9uKGUpe3JldHVybiB2WGUoZSl9LCJzZXRPcHRpb25zIiksYlhlPW8oZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49MCxpPTA7aTxyLmxlbmd0aDtpKyspbis9cltpXShlKTtyZXR1cm4gbn0sImdldFNpbWlsYXJpdHkiKSxUWGU9byhmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPTA7aTxyO2krKyllW2kqcitpXT1ufSwiYWRkTG9vcHMiKSxSZ2U9byhmdW5jdGlvbihlLHIpe2Zvcih2YXIgbixpPTA7aTxyO2krKyl7bj0wO2Zvcih2YXIgYT0wO2E8cjthKyspbis9ZVthKnIraV07Zm9yKHZhciBzPTA7czxyO3MrKyllW3MqcitpXT1lW3MqcitpXS9ufX0sIm5vcm1hbGl6ZSIpLHdYZT1vKGZ1bmN0aW9uKGUscixuKXtmb3IodmFyIGk9bmV3IEFycmF5KG4qbiksYT0wO2E8bjthKyspe2Zvcih2YXIgcz0wO3M8bjtzKyspaVthKm4rc109MDtmb3IodmFyIGw9MDtsPG47bCsrKWZvcih2YXIgdT0wO3U8bjt1KyspaVthKm4rdV0rPWVbYSpuK2xdKnJbbCpuK3VdfXJldHVybiBpfSwibW11bHQiKSxrWGU9byhmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPWUuc2xpY2UoMCksYT0xO2E8bjthKyspZT13WGUoZSxpLHIpO3JldHVybiBlfSwiZXhwYW5kIiksRVhlPW8oZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaT1uZXcgQXJyYXkocipyKSxhPTA7YTxyKnI7YSsrKWlbYV09TWF0aC5wb3coZVthXSxuKTtyZXR1cm4gUmdlKGksciksaX0sImluZmxhdGUiKSxTWGU9byhmdW5jdGlvbihlLHIsbixpKXtmb3IodmFyIGE9MDthPG47YSsrKXt2YXIgcz1NYXRoLnJvdW5kKGVbYV0qTWF0aC5wb3coMTAsaSkpL01hdGgucG93KDEwLGkpLGw9TWF0aC5yb3VuZChyW2FdKk1hdGgucG93KDEwLGkpKS9NYXRoLnBvdygxMCxpKTtpZihzIT09bClyZXR1cm4hMX1yZXR1cm4hMH0sImhhc0NvbnZlcmdlZCIpLENYZT1vKGZ1bmN0aW9uKGUscixuLGkpe2Zvcih2YXIgYT1bXSxzPTA7czxyO3MrKyl7Zm9yKHZhciBsPVtdLHU9MDt1PHI7dSsrKU1hdGgucm91bmQoZVtzKnIrdV0qMWUzKS8xZTM+MCYmbC5wdXNoKG5bdV0pO2wubGVuZ3RoIT09MCYmYS5wdXNoKGkuY29sbGVjdGlvbihsKSl9cmV0dXJuIGF9LCJhc3NpZ24iKSxBWGU9byhmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWlmKCFyW25dfHxlW25dLmlkKCkhPT1yW25dLmlkKCkpcmV0dXJuITE7cmV0dXJuITB9LCJpc0R1cGxpY2F0ZSIpLF9YZT1vKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKWZvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXIhPW4mJkFYZShlW3JdLGVbbl0pJiZlLnNwbGljZShuLDEpO3JldHVybiBlfSwicmVtb3ZlRHVwbGljYXRlcyIpLFEwZT1vKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj10aGlzLm5vZGVzKCksbj10aGlzLmVkZ2VzKCksaT10aGlzLmN5KCksYT14WGUoZSkscz17fSxsPTA7bDxyLmxlbmd0aDtsKyspc1tyW2xdLmlkKCldPWw7Zm9yKHZhciB1PXIubGVuZ3RoLGg9dSp1LGY9bmV3IEFycmF5KGgpLGQscD0wO3A8aDtwKyspZltwXT0wO2Zvcih2YXIgbT0wO208bi5sZW5ndGg7bSsrKXt2YXIgZz1uW21dLHk9c1tnLnNvdXJjZSgpLmlkKCldLHY9c1tnLnRhcmdldCgpLmlkKCldLHg9YlhlKGcsYS5hdHRyaWJ1dGVzKTtmW3kqdSt2XSs9eCxmW3YqdSt5XSs9eH1UWGUoZix1LGEubXVsdEZhY3RvciksUmdlKGYsdSk7Zm9yKHZhciBiPSEwLFQ9MDtiJiZUPGEubWF4SXRlcmF0aW9uczspYj0hMSxkPWtYZShmLHUsYS5leHBhbmRGYWN0b3IpLGY9RVhlKGQsdSxhLmluZmxhdGVGYWN0b3IpLFNYZShmLGQsaCw0KXx8KGI9ITApLFQrKzt2YXIgUz1DWGUoZix1LHIsaSk7cmV0dXJuIFM9X1hlKFMpLFN9LCJtYXJrb3ZDbHVzdGVyaW5nIiksRFhlPXttYXJrb3ZDbHVzdGVyaW5nOlEwZSxtY2w6UTBlfSxMWGU9byhmdW5jdGlvbihlKXtyZXR1cm4gZX0sImlkZW50aXR5IiksTmdlPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gTWF0aC5hYnMoci1lKX0sImFic0RpZmYiKSxaMGU9byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIGUrTmdlKHIsbil9LCJhZGRBYnNEaWZmIiksSjBlPW8oZnVuY3Rpb24oZSxyLG4pe3JldHVybiBlK01hdGgucG93KG4tciwyKX0sImFkZFNxdWFyZWREaWZmIiksUlhlPW8oZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguc3FydChlKX0sInNxcnQiKSxOWGU9byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIE1hdGgubWF4KGUsTmdlKHIsbikpfSwibWF4QWJzRGlmZiIpLCRiPW8oZnVuY3Rpb24oZSxyLG4saSxhKXtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aD41JiZhcmd1bWVudHNbNV0hPT12b2lkIDA/YXJndW1lbnRzWzVdOkxYZSxsPWksdSxoLGY9MDtmPGU7ZisrKXU9cihmKSxoPW4oZiksbD1hKGwsdSxoKTtyZXR1cm4gcyhsKX0sImdldERpc3RhbmNlIiksbnk9e2V1Y2xpZGVhbjpvKGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gZT49Mj8kYihlLHIsbiwwLEowZSxSWGUpOiRiKGUscixuLDAsWjBlKX0sImV1Y2xpZGVhbiIpLHNxdWFyZWRFdWNsaWRlYW46byhmdW5jdGlvbihlLHIsbil7cmV0dXJuICRiKGUscixuLDAsSjBlKX0sInNxdWFyZWRFdWNsaWRlYW4iKSxtYW5oYXR0YW46byhmdW5jdGlvbihlLHIsbil7cmV0dXJuICRiKGUscixuLDAsWjBlKX0sIm1hbmhhdHRhbiIpLG1heDpvKGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gJGIoZSxyLG4sLTEvMCxOWGUpfSwibWF4Iil9O255WyJzcXVhcmVkLWV1Y2xpZGVhbiJdPW55LnNxdWFyZWRFdWNsaWRlYW47bnkuc3F1YXJlZGV1Y2xpZGVhbj1ueS5zcXVhcmVkRXVjbGlkZWFuO28oZUMsImNsdXN0ZXJpbmdEaXN0YW5jZSIpO01YZT1vYSh7azoyLG06MixzZW5zaXRpdml0eVRocmVzaG9sZDoxZS00LGRpc3RhbmNlOiJldWNsaWRlYW4iLG1heEl0ZXJhdGlvbnM6MTAsYXR0cmlidXRlczpbXSx0ZXN0TW9kZTohMSx0ZXN0Q2VudHJvaWRzOm51bGx9KSxXQj1vKGZ1bmN0aW9uKGUpe3JldHVybiBNWGUoZSl9LCJzZXRPcHRpb25zIiksVTY9byhmdW5jdGlvbihlLHIsbixpLGEpe3ZhciBzPWEhPT0ia01lZG9pZHMiLGw9cz9mdW5jdGlvbihkKXtyZXR1cm4gbltkXX06ZnVuY3Rpb24oZCl7cmV0dXJuIGlbZF0obil9LHU9byhmdW5jdGlvbihwKXtyZXR1cm4gaVtwXShyKX0sImdldFEiKSxoPW4sZj1yO3JldHVybiBlQyhlLGkubGVuZ3RoLGwsdSxoLGYpfSwiZ2V0RGlzdCIpLG9CPW8oZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaT1uLmxlbmd0aCxhPW5ldyBBcnJheShpKSxzPW5ldyBBcnJheShpKSxsPW5ldyBBcnJheShyKSx1PW51bGwsaD0wO2g8aTtoKyspYVtoXT1lLm1pbihuW2hdKS52YWx1ZSxzW2hdPWUubWF4KG5baF0pLnZhbHVlO2Zvcih2YXIgZj0wO2Y8cjtmKyspe3U9W107Zm9yKHZhciBkPTA7ZDxpO2QrKyl1W2RdPU1hdGgucmFuZG9tKCkqKHNbZF0tYVtkXSkrYVtkXTtsW2ZdPXV9cmV0dXJuIGx9LCJyYW5kb21DZW50cm9pZHMiKSxNZ2U9byhmdW5jdGlvbihlLHIsbixpLGEpe2Zvcih2YXIgcz0xLzAsbD0wLHU9MDt1PHIubGVuZ3RoO3UrKyl7dmFyIGg9VTYobixlLHJbdV0saSxhKTtoPHMmJihzPWgsbD11KX1yZXR1cm4gbH0sImNsYXNzaWZ5IiksSWdlPW8oZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaT1bXSxhPW51bGwscz0wO3M8ci5sZW5ndGg7cysrKWE9cltzXSxuW2EuaWQoKV09PT1lJiZpLnB1c2goYSk7cmV0dXJuIGl9LCJidWlsZENsdXN0ZXIiKSxJWGU9byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIE1hdGguYWJzKHItZSk8PW59LCJoYXZlVmFsdWVzQ29udmVyZ2VkIiksT1hlPW8oZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKWZvcih2YXIgYT0wO2E8ZVtpXS5sZW5ndGg7YSsrKXt2YXIgcz1NYXRoLmFicyhlW2ldW2FdLXJbaV1bYV0pO2lmKHM+bilyZXR1cm4hMX1yZXR1cm4hMH0sImhhdmVNYXRyaWNlc0NvbnZlcmdlZCIpLFBYZT1vKGZ1bmN0aW9uKGUscixuKXtmb3IodmFyIGk9MDtpPG47aSsrKWlmKGU9PT1yW2ldKXJldHVybiEwO3JldHVybiExfSwic2VlbkJlZm9yZSIpLGVtZT1vKGZ1bmN0aW9uKGUscil7dmFyIG49bmV3IEFycmF5KHIpO2lmKGUubGVuZ3RoPDUwKWZvcih2YXIgaT0wO2k8cjtpKyspe2Zvcih2YXIgYT1lW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSplLmxlbmd0aCldO1BYZShhLG4saSk7KWE9ZVtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqZS5sZW5ndGgpXTtuW2ldPWF9ZWxzZSBmb3IodmFyIHM9MDtzPHI7cysrKW5bc109ZVtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqZS5sZW5ndGgpXTtyZXR1cm4gbn0sInJhbmRvbU1lZG9pZHMiKSx0bWU9byhmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPTAsYT0wO2E8ci5sZW5ndGg7YSsrKWkrPVU2KCJtYW5oYXR0YW4iLHJbYV0sZSxuLCJrTWVkb2lkcyIpO3JldHVybiBpfSwiZmluZENvc3QiKSxCWGU9byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLmN5KCksbj10aGlzLm5vZGVzKCksaT1udWxsLGE9V0IoZSkscz1uZXcgQXJyYXkoYS5rKSxsPXt9LHU7YS50ZXN0TW9kZT90eXBlb2YgYS50ZXN0Q2VudHJvaWRzPT0ibnVtYmVyIj8oYS50ZXN0Q2VudHJvaWRzLHU9b0IobixhLmssYS5hdHRyaWJ1dGVzKSk6cWkoYS50ZXN0Q2VudHJvaWRzKT09PSJvYmplY3QiP3U9YS50ZXN0Q2VudHJvaWRzOnU9b0IobixhLmssYS5hdHRyaWJ1dGVzKTp1PW9CKG4sYS5rLGEuYXR0cmlidXRlcyk7Zm9yKHZhciBoPSEwLGY9MDtoJiZmPGEubWF4SXRlcmF0aW9uczspe2Zvcih2YXIgZD0wO2Q8bi5sZW5ndGg7ZCsrKWk9bltkXSxsW2kuaWQoKV09TWdlKGksdSxhLmRpc3RhbmNlLGEuYXR0cmlidXRlcywia01lYW5zIik7aD0hMTtmb3IodmFyIHA9MDtwPGEuaztwKyspe3ZhciBtPUlnZShwLG4sbCk7aWYobS5sZW5ndGghPT0wKXtmb3IodmFyIGc9YS5hdHRyaWJ1dGVzLmxlbmd0aCx5PXVbcF0sdj1uZXcgQXJyYXkoZykseD1uZXcgQXJyYXkoZyksYj0wO2I8ZztiKyspe3hbYl09MDtmb3IodmFyIFQ9MDtUPG0ubGVuZ3RoO1QrKylpPW1bVF0seFtiXSs9YS5hdHRyaWJ1dGVzW2JdKGkpO3ZbYl09eFtiXS9tLmxlbmd0aCxJWGUodltiXSx5W2JdLGEuc2Vuc2l0aXZpdHlUaHJlc2hvbGQpfHwoaD0hMCl9dVtwXT12LHNbcF09ci5jb2xsZWN0aW9uKG0pfX1mKyt9cmV0dXJuIHN9LCJrTWVhbnMiKSxGWGU9byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLmN5KCksbj10aGlzLm5vZGVzKCksaT1udWxsLGE9V0IoZSkscz1uZXcgQXJyYXkoYS5rKSxsLHU9e30saCxmPW5ldyBBcnJheShhLmspO2EudGVzdE1vZGU/dHlwZW9mIGEudGVzdENlbnRyb2lkcz09Im51bWJlciJ8fChxaShhLnRlc3RDZW50cm9pZHMpPT09Im9iamVjdCI/bD1hLnRlc3RDZW50cm9pZHM6bD1lbWUobixhLmspKTpsPWVtZShuLGEuayk7Zm9yKHZhciBkPSEwLHA9MDtkJiZwPGEubWF4SXRlcmF0aW9uczspe2Zvcih2YXIgbT0wO208bi5sZW5ndGg7bSsrKWk9blttXSx1W2kuaWQoKV09TWdlKGksbCxhLmRpc3RhbmNlLGEuYXR0cmlidXRlcywia01lZG9pZHMiKTtkPSExO2Zvcih2YXIgZz0wO2c8bC5sZW5ndGg7ZysrKXt2YXIgeT1JZ2UoZyxuLHUpO2lmKHkubGVuZ3RoIT09MCl7ZltnXT10bWUobFtnXSx5LGEuYXR0cmlidXRlcyk7Zm9yKHZhciB2PTA7djx5Lmxlbmd0aDt2KyspaD10bWUoeVt2XSx5LGEuYXR0cmlidXRlcyksaDxmW2ddJiYoZltnXT1oLGxbZ109eVt2XSxkPSEwKTtzW2ddPXIuY29sbGVjdGlvbih5KX19cCsrfXJldHVybiBzfSwia01lZG9pZHMiKSwkWGU9byhmdW5jdGlvbihlLHIsbixpLGEpe2Zvcih2YXIgcyxsLHU9MDt1PHIubGVuZ3RoO3UrKylmb3IodmFyIGg9MDtoPGUubGVuZ3RoO2grKylpW3VdW2hdPU1hdGgucG93KG5bdV1baF0sYS5tKTtmb3IodmFyIGY9MDtmPGUubGVuZ3RoO2YrKylmb3IodmFyIGQ9MDtkPGEuYXR0cmlidXRlcy5sZW5ndGg7ZCsrKXtzPTAsbD0wO2Zvcih2YXIgcD0wO3A8ci5sZW5ndGg7cCsrKXMrPWlbcF1bZl0qYS5hdHRyaWJ1dGVzW2RdKHJbcF0pLGwrPWlbcF1bZl07ZVtmXVtkXT1zL2x9fSwidXBkYXRlQ2VudHJvaWRzIikselhlPW8oZnVuY3Rpb24oZSxyLG4saSxhKXtmb3IodmFyIHM9MDtzPGUubGVuZ3RoO3MrKylyW3NdPWVbc10uc2xpY2UoKTtmb3IodmFyIGwsdSxoLGY9Mi8oYS5tLTEpLGQ9MDtkPG4ubGVuZ3RoO2QrKylmb3IodmFyIHA9MDtwPGkubGVuZ3RoO3ArKyl7bD0wO2Zvcih2YXIgbT0wO208bi5sZW5ndGg7bSsrKXU9VTYoYS5kaXN0YW5jZSxpW3BdLG5bZF0sYS5hdHRyaWJ1dGVzLCJjbWVhbnMiKSxoPVU2KGEuZGlzdGFuY2UsaVtwXSxuW21dLGEuYXR0cmlidXRlcywiY21lYW5zIiksbCs9TWF0aC5wb3codS9oLGYpO2VbcF1bZF09MS9sfX0sInVwZGF0ZU1lbWJlcnNoaXAiKSxHWGU9byhmdW5jdGlvbihlLHIsbixpKXtmb3IodmFyIGE9bmV3IEFycmF5KG4uaykscz0wO3M8YS5sZW5ndGg7cysrKWFbc109W107Zm9yKHZhciBsLHUsaD0wO2g8ci5sZW5ndGg7aCsrKXtsPS0xLzAsdT0tMTtmb3IodmFyIGY9MDtmPHJbMF0ubGVuZ3RoO2YrKylyW2hdW2ZdPmwmJihsPXJbaF1bZl0sdT1mKTthW3VdLnB1c2goZVtoXSl9Zm9yKHZhciBkPTA7ZDxhLmxlbmd0aDtkKyspYVtkXT1pLmNvbGxlY3Rpb24oYVtkXSk7cmV0dXJuIGF9LCJhc3NpZ24iKSxybWU9byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLmN5KCksbj10aGlzLm5vZGVzKCksaT1XQihlKSxhLHMsbCx1LGg7dT1uZXcgQXJyYXkobi5sZW5ndGgpO2Zvcih2YXIgZj0wO2Y8bi5sZW5ndGg7ZisrKXVbZl09bmV3IEFycmF5KGkuayk7bD1uZXcgQXJyYXkobi5sZW5ndGgpO2Zvcih2YXIgZD0wO2Q8bi5sZW5ndGg7ZCsrKWxbZF09bmV3IEFycmF5KGkuayk7Zm9yKHZhciBwPTA7cDxuLmxlbmd0aDtwKyspe2Zvcih2YXIgbT0wLGc9MDtnPGkuaztnKyspbFtwXVtnXT1NYXRoLnJhbmRvbSgpLG0rPWxbcF1bZ107Zm9yKHZhciB5PTA7eTxpLms7eSsrKWxbcF1beV09bFtwXVt5XS9tfXM9bmV3IEFycmF5KGkuayk7Zm9yKHZhciB2PTA7djxpLms7disrKXNbdl09bmV3IEFycmF5KGkuYXR0cmlidXRlcy5sZW5ndGgpO2g9bmV3IEFycmF5KG4ubGVuZ3RoKTtmb3IodmFyIHg9MDt4PG4ubGVuZ3RoO3grKyloW3hdPW5ldyBBcnJheShpLmspO2Zvcih2YXIgYj0hMCxUPTA7YiYmVDxpLm1heEl0ZXJhdGlvbnM7KWI9ITEsJFhlKHMsbixsLGgsaSkselhlKGwsdSxzLG4saSksT1hlKGwsdSxpLnNlbnNpdGl2aXR5VGhyZXNob2xkKXx8KGI9ITApLFQrKztyZXR1cm4gYT1HWGUobixsLGkscikse2NsdXN0ZXJzOmEsZGVncmVlT2ZNZW1iZXJzaGlwOmx9fSwiZnV6enlDTWVhbnMiKSxWWGU9e2tNZWFuczpCWGUsa01lZG9pZHM6RlhlLGZ1enp5Q01lYW5zOnJtZSxmY206cm1lfSxVWGU9b2Eoe2Rpc3RhbmNlOiJldWNsaWRlYW4iLGxpbmthZ2U6Im1pbiIsbW9kZToidGhyZXNob2xkIix0aHJlc2hvbGQ6MS8wLGFkZERlbmRyb2dyYW06ITEsZGVuZHJvZ3JhbURlcHRoOjAsYXR0cmlidXRlczpbXX0pLEhYZT17c2luZ2xlOiJtaW4iLGNvbXBsZXRlOiJtYXgifSxXWGU9byhmdW5jdGlvbihlKXt2YXIgcj1VWGUoZSksbj1IWGVbci5saW5rYWdlXTtyZXR1cm4gbiE9bnVsbCYmKHIubGlua2FnZT1uKSxyfSwic2V0T3B0aW9ucyIpLG5tZT1vKGZ1bmN0aW9uKGUscixuLGksYSl7Zm9yKHZhciBzPTAsbD0xLzAsdSxoPWEuYXR0cmlidXRlcyxmPW8oZnVuY3Rpb24oRCxPKXtyZXR1cm4gZUMoYS5kaXN0YW5jZSxoLmxlbmd0aCxmdW5jdGlvbihSKXtyZXR1cm4gaFtSXShEKX0sZnVuY3Rpb24oUil7cmV0dXJuIGhbUl0oTyl9LEQsTyl9LCJnZXREaXN0IiksZD0wO2Q8ZS5sZW5ndGg7ZCsrKXt2YXIgcD1lW2RdLmtleSxtPW5bcF1baVtwXV07bTxsJiYocz1wLGw9bSl9aWYoYS5tb2RlPT09InRocmVzaG9sZCImJmw+PWEudGhyZXNob2xkfHxhLm1vZGU9PT0iZGVuZHJvZ3JhbSImJmUubGVuZ3RoPT09MSlyZXR1cm4hMTt2YXIgZz1yW3NdLHk9cltpW3NdXSx2O2EubW9kZT09PSJkZW5kcm9ncmFtIj92PXtsZWZ0OmcscmlnaHQ6eSxrZXk6Zy5rZXl9OnY9e3ZhbHVlOmcudmFsdWUuY29uY2F0KHkudmFsdWUpLGtleTpnLmtleX0sZVtnLmluZGV4XT12LGUuc3BsaWNlKHkuaW5kZXgsMSkscltnLmtleV09djtmb3IodmFyIHg9MDt4PGUubGVuZ3RoO3grKyl7dmFyIGI9ZVt4XTtnLmtleT09PWIua2V5P3U9MS8wOmEubGlua2FnZT09PSJtaW4iPyh1PW5bZy5rZXldW2Iua2V5XSxuW2cua2V5XVtiLmtleV0+blt5LmtleV1bYi5rZXldJiYodT1uW3kua2V5XVtiLmtleV0pKTphLmxpbmthZ2U9PT0ibWF4Ij8odT1uW2cua2V5XVtiLmtleV0sbltnLmtleV1bYi5rZXldPG5beS5rZXldW2Iua2V5XSYmKHU9blt5LmtleV1bYi5rZXldKSk6YS5saW5rYWdlPT09Im1lYW4iP3U9KG5bZy5rZXldW2Iua2V5XSpnLnNpemUrblt5LmtleV1bYi5rZXldKnkuc2l6ZSkvKGcuc2l6ZSt5LnNpemUpOmEubW9kZT09PSJkZW5kcm9ncmFtIj91PWYoYi52YWx1ZSxnLnZhbHVlKTp1PWYoYi52YWx1ZVswXSxnLnZhbHVlWzBdKSxuW2cua2V5XVtiLmtleV09bltiLmtleV1bZy5rZXldPXV9Zm9yKHZhciBUPTA7VDxlLmxlbmd0aDtUKyspe3ZhciBTPWVbVF0ua2V5O2lmKGlbU109PT1nLmtleXx8aVtTXT09PXkua2V5KXtmb3IodmFyIHc9UyxFPTA7RTxlLmxlbmd0aDtFKyspe3ZhciBfPWVbRV0ua2V5O25bU11bX108bltTXVt3XSYmKHc9Xyl9aVtTXT13fWVbVF0uaW5kZXg9VH1yZXR1cm4gZy5rZXk9eS5rZXk9Zy5pbmRleD15LmluZGV4PW51bGwsITB9LCJtZXJnZUNsb3Nlc3QiKSx2Nj1vKGZ1bmN0aW9uIHQoZSxyLG4pe2UmJihlLnZhbHVlP3IucHVzaChlLnZhbHVlKTooZS5sZWZ0JiZ0KGUubGVmdCxyKSxlLnJpZ2h0JiZ0KGUucmlnaHQscikpKX0sImdldEFsbENoaWxkcmVuIikscVhlPW8oZnVuY3Rpb24gdChlLHIpe2lmKCFlKXJldHVybiIiO2lmKGUubGVmdCYmZS5yaWdodCl7dmFyIG49dChlLmxlZnQsciksaT10KGUucmlnaHQsciksYT1yLmFkZCh7Z3JvdXA6Im5vZGVzIixkYXRhOntpZDpuKyIsIitpfX0pO3JldHVybiByLmFkZCh7Z3JvdXA6ImVkZ2VzIixkYXRhOntzb3VyY2U6bix0YXJnZXQ6YS5pZCgpfX0pLHIuYWRkKHtncm91cDoiZWRnZXMiLGRhdGE6e3NvdXJjZTppLHRhcmdldDphLmlkKCl9fSksYS5pZCgpfWVsc2UgaWYoZS52YWx1ZSlyZXR1cm4gZS52YWx1ZS5pZCgpfSwiYnVpbGREZW5kcm9ncmFtIiksWVhlPW8oZnVuY3Rpb24gdChlLHIsbil7aWYoIWUpcmV0dXJuW107dmFyIGk9W10sYT1bXSxzPVtdO3JldHVybiByPT09MD8oZS5sZWZ0JiZ2NihlLmxlZnQsaSksZS5yaWdodCYmdjYoZS5yaWdodCxhKSxzPWkuY29uY2F0KGEpLFtuLmNvbGxlY3Rpb24ocyldKTpyPT09MT9lLnZhbHVlP1tuLmNvbGxlY3Rpb24oZS52YWx1ZSldOihlLmxlZnQmJnY2KGUubGVmdCxpKSxlLnJpZ2h0JiZ2NihlLnJpZ2h0LGEpLFtuLmNvbGxlY3Rpb24oaSksbi5jb2xsZWN0aW9uKGEpXSk6ZS52YWx1ZT9bbi5jb2xsZWN0aW9uKGUudmFsdWUpXTooZS5sZWZ0JiYoaT10KGUubGVmdCxyLTEsbikpLGUucmlnaHQmJihhPXQoZS5yaWdodCxyLTEsbikpLGkuY29uY2F0KGEpKX0sImJ1aWxkQ2x1c3RlcnNGcm9tVHJlZSIpLGltZT1vKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj10aGlzLmN5KCksbj10aGlzLm5vZGVzKCksaT1XWGUoZSksYT1pLmF0dHJpYnV0ZXMscz1vKGZ1bmN0aW9uKFQsUyl7cmV0dXJuIGVDKGkuZGlzdGFuY2UsYS5sZW5ndGgsZnVuY3Rpb24odyl7cmV0dXJuIGFbd10oVCl9LGZ1bmN0aW9uKHcpe3JldHVybiBhW3ddKFMpfSxULFMpfSwiZ2V0RGlzdCIpLGw9W10sdT1bXSxoPVtdLGY9W10sZD0wO2Q8bi5sZW5ndGg7ZCsrKXt2YXIgcD17dmFsdWU6aS5tb2RlPT09ImRlbmRyb2dyYW0iP25bZF06W25bZF1dLGtleTpkLGluZGV4OmR9O2xbZF09cCxmW2RdPXAsdVtkXT1bXSxoW2RdPTB9Zm9yKHZhciBtPTA7bTxsLmxlbmd0aDttKyspZm9yKHZhciBnPTA7Zzw9bTtnKyspe3ZhciB5PXZvaWQgMDtpLm1vZGU9PT0iZGVuZHJvZ3JhbSI/eT1tPT09Zz8xLzA6cyhsW21dLnZhbHVlLGxbZ10udmFsdWUpOnk9bT09PWc/MS8wOnMobFttXS52YWx1ZVswXSxsW2ddLnZhbHVlWzBdKSx1W21dW2ddPXksdVtnXVttXT15LHk8dVttXVtoW21dXSYmKGhbbV09Zyl9Zm9yKHZhciB2PW5tZShsLGYsdSxoLGkpO3Y7KXY9bm1lKGwsZix1LGgsaSk7dmFyIHg7cmV0dXJuIGkubW9kZT09PSJkZW5kcm9ncmFtIj8oeD1ZWGUobFswXSxpLmRlbmRyb2dyYW1EZXB0aCxyKSxpLmFkZERlbmRyb2dyYW0mJnFYZShsWzBdLHIpKTooeD1uZXcgQXJyYXkobC5sZW5ndGgpLGwuZm9yRWFjaChmdW5jdGlvbihiLFQpe2Iua2V5PWIuaW5kZXg9bnVsbCx4W1RdPXIuY29sbGVjdGlvbihiLnZhbHVlKX0pKSx4fSwiaGllcmFyY2hpY2FsQ2x1c3RlcmluZyIpLFhYZT17aGllcmFyY2hpY2FsQ2x1c3RlcmluZzppbWUsaGNhOmltZX0salhlPW9hKHtkaXN0YW5jZToiZXVjbGlkZWFuIixwcmVmZXJlbmNlOiJtZWRpYW4iLGRhbXBpbmc6LjgsbWF4SXRlcmF0aW9uczoxZTMsbWluSXRlcmF0aW9uczoxMDAsYXR0cmlidXRlczpbXX0pLEtYZT1vKGZ1bmN0aW9uKGUpe3ZhciByPWUuZGFtcGluZyxuPWUucHJlZmVyZW5jZTsuNTw9ciYmcjwxfHxvaSgiRGFtcGluZyBtdXN0IHJhbmdlIG9uIFswLjUsIDEpLiAgR290OiAiLmNvbmNhdChyKSk7dmFyIGk9WyJtZWRpYW4iLCJtZWFuIiwibWluIiwibWF4Il07cmV0dXJuIGkuc29tZShmdW5jdGlvbihhKXtyZXR1cm4gYT09PW59KXx8X3Qobil8fG9pKCJQcmVmZXJlbmNlIG11c3QgYmUgb25lIG9mIFsiLmNvbmNhdChpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4iJyIuY29uY2F0KGEsIiciKX0pLmpvaW4oIiwgIiksIl0gb3IgYSBudW1iZXIuICBHb3Q6ICIpLmNvbmNhdChuKSksalhlKGUpfSwic2V0T3B0aW9ucyIpLFFYZT1vKGZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPW8oZnVuY3Rpb24obCx1KXtyZXR1cm4gaVt1XShsKX0sImF0dHIiKTtyZXR1cm4tZUMoZSxpLmxlbmd0aCxmdW5jdGlvbihzKXtyZXR1cm4gYShyLHMpfSxmdW5jdGlvbihzKXtyZXR1cm4gYShuLHMpfSxyLG4pfSwiZ2V0U2ltaWxhcml0eSIpLFpYZT1vKGZ1bmN0aW9uKGUscil7dmFyIG49bnVsbDtyZXR1cm4gcj09PSJtZWRpYW4iP249S1llKGUpOnI9PT0ibWVhbiI/bj1qWWUoZSk6cj09PSJtaW4iP249WVllKGUpOnI9PT0ibWF4Ij9uPVhZZShlKTpuPXIsbn0sImdldFByZWZlcmVuY2UiKSxKWGU9byhmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPVtdLGE9MDthPGU7YSsrKXJbYSplK2FdK25bYSplK2FdPjAmJmkucHVzaChhKTtyZXR1cm4gaX0sImZpbmRFeGVtcGxhcnMiKSxhbWU9byhmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPVtdLGE9MDthPGU7YSsrKXtmb3IodmFyIHM9LTEsbD0tMS8wLHU9MDt1PG4ubGVuZ3RoO3UrKyl7dmFyIGg9blt1XTtyW2EqZStoXT5sJiYocz1oLGw9clthKmUraF0pfXM+MCYmaS5wdXNoKHMpfWZvcih2YXIgZj0wO2Y8bi5sZW5ndGg7ZisrKWlbbltmXV09bltmXTtyZXR1cm4gaX0sImFzc2lnbkNsdXN0ZXJzIiksZWplPW8oZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaT1hbWUoZSxyLG4pLGE9MDthPG4ubGVuZ3RoO2ErKyl7Zm9yKHZhciBzPVtdLGw9MDtsPGkubGVuZ3RoO2wrKylpW2xdPT09blthXSYmcy5wdXNoKGwpO2Zvcih2YXIgdT0tMSxoPS0xLzAsZj0wO2Y8cy5sZW5ndGg7ZisrKXtmb3IodmFyIGQ9MCxwPTA7cDxzLmxlbmd0aDtwKyspZCs9cltzW3BdKmUrc1tmXV07ZD5oJiYodT1mLGg9ZCl9blthXT1zW3VdfXJldHVybiBpPWFtZShlLHIsbiksaX0sImFzc2lnbiIpLHNtZT1vKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj10aGlzLmN5KCksbj10aGlzLm5vZGVzKCksaT1LWGUoZSksYT17fSxzPTA7czxuLmxlbmd0aDtzKyspYVtuW3NdLmlkKCldPXM7dmFyIGwsdSxoLGYsZCxwO2w9bi5sZW5ndGgsdT1sKmwsaD1uZXcgQXJyYXkodSk7Zm9yKHZhciBtPTA7bTx1O20rKyloW21dPS0xLzA7Zm9yKHZhciBnPTA7ZzxsO2crKylmb3IodmFyIHk9MDt5PGw7eSsrKWchPT15JiYoaFtnKmwreV09UVhlKGkuZGlzdGFuY2UsbltnXSxuW3ldLGkuYXR0cmlidXRlcykpO2Y9WlhlKGgsaS5wcmVmZXJlbmNlKTtmb3IodmFyIHY9MDt2PGw7disrKWhbdipsK3ZdPWY7ZD1uZXcgQXJyYXkodSk7Zm9yKHZhciB4PTA7eDx1O3grKylkW3hdPTA7cD1uZXcgQXJyYXkodSk7Zm9yKHZhciBiPTA7Yjx1O2IrKylwW2JdPTA7Zm9yKHZhciBUPW5ldyBBcnJheShsKSxTPW5ldyBBcnJheShsKSx3PW5ldyBBcnJheShsKSxFPTA7RTxsO0UrKylUW0VdPTAsU1tFXT0wLHdbRV09MDtmb3IodmFyIF89bmV3IEFycmF5KGwqaS5taW5JdGVyYXRpb25zKSxDPTA7QzxfLmxlbmd0aDtDKyspX1tDXT0wO3ZhciBEO2ZvcihEPTA7RDxpLm1heEl0ZXJhdGlvbnM7RCsrKXtmb3IodmFyIE89MDtPPGw7TysrKXtmb3IodmFyIFI9LTEvMCxrPS0xLzAsTD0tMSxBPTAsST0wO0k8bDtJKyspVFtJXT1kW08qbCtJXSxBPXBbTypsK0ldK2hbTypsK0ldLEE+PVI/KGs9UixSPUEsTD1JKTpBPmsmJihrPUEpO2Zvcih2YXIgTT0wO008bDtNKyspZFtPKmwrTV09KDEtaS5kYW1waW5nKSooaFtPKmwrTV0tUikraS5kYW1waW5nKlRbTV07ZFtPKmwrTF09KDEtaS5kYW1waW5nKSooaFtPKmwrTF0taykraS5kYW1waW5nKlRbTF19Zm9yKHZhciBQPTA7UDxsO1ArKyl7Zm9yKHZhciBCPTAsRj0wO0Y8bDtGKyspVFtGXT1wW0YqbCtQXSxTW0ZdPU1hdGgubWF4KDAsZFtGKmwrUF0pLEIrPVNbRl07Qi09U1tQXSxTW1BdPWRbUCpsK1BdLEIrPVNbUF07Zm9yKHZhciB6PTA7ejxsO3orKylwW3oqbCtQXT0oMS1pLmRhbXBpbmcpKk1hdGgubWluKDAsQi1TW3pdKStpLmRhbXBpbmcqVFt6XTtwW1AqbCtQXT0oMS1pLmRhbXBpbmcpKihCLVNbUF0pK2kuZGFtcGluZypUW1BdfWZvcih2YXIgJD0wLFU9MDtVPGw7VSsrKXt2YXIgSz1wW1UqbCtVXStkW1UqbCtVXT4wPzE6MDtfW0QlaS5taW5JdGVyYXRpb25zKmwrVV09SywkKz1LfWlmKCQ+MCYmKEQ+PWkubWluSXRlcmF0aW9ucy0xfHxEPT1pLm1heEl0ZXJhdGlvbnMtMSkpe2Zvcih2YXIgZWU9MCxZPTA7WTxsO1krKyl7d1tZXT0wO2Zvcih2YXIgY2U9MDtjZTxpLm1pbkl0ZXJhdGlvbnM7Y2UrKyl3W1ldKz1fW2NlKmwrWV07KHdbWV09PT0wfHx3W1ldPT09aS5taW5JdGVyYXRpb25zKSYmZWUrK31pZihlZT09PWwpYnJlYWt9fWZvcih2YXIgWj1KWGUobCxkLHApLHVlPWVqZShsLGgsWiksUT17fSxqPTA7ajxaLmxlbmd0aDtqKyspUVtaW2pdXT1bXTtmb3IodmFyIG5lPTA7bmU8bi5sZW5ndGg7bmUrKyl7dmFyIHRlPWFbbltuZV0uaWQoKV0saGU9dWVbdGVdO2hlIT1udWxsJiZRW2hlXS5wdXNoKG5bbmVdKX1mb3IodmFyIGxlPW5ldyBBcnJheShaLmxlbmd0aCksSj0wO0o8Wi5sZW5ndGg7SisrKWxlW0pdPXIuY29sbGVjdGlvbihRW1pbSl1dKTtyZXR1cm4gbGV9LCJhZmZpbml0eVByb3BhZ2F0aW9uIiksdGplPXthZmZpbml0eVByb3BhZ2F0aW9uOnNtZSxhcDpzbWV9LHJqZT1vYSh7cm9vdDp2b2lkIDAsZGlyZWN0ZWQ6ITF9KSxuamU9e2hpZXJob2x6ZXI6byhmdW5jdGlvbihlKXtpZighVXIoZSkpe3ZhciByPWFyZ3VtZW50cztlPXtyb290OnJbMF0sZGlyZWN0ZWQ6clsxXX19dmFyIG49cmplKGUpLGk9bi5yb290LGE9bi5kaXJlY3RlZCxzPXRoaXMsbD0hMSx1LGgsZjtpJiYoZj1adChpKT90aGlzLmZpbHRlcihpKVswXS5pZCgpOmlbMF0uaWQoKSk7dmFyIGQ9e30scD17fTthP3MuZm9yRWFjaChmdW5jdGlvbihiKXt2YXIgVD1iLmlkKCk7aWYoYi5pc05vZGUoKSl7dmFyIFM9Yi5pbmRlZ3JlZSghMCksdz1iLm91dGRlZ3JlZSghMCksRT1TLXcsXz13LVM7RT09MT91P2w9ITA6dT1UOl89PTE/aD9sPSEwOmg9VDooXz4xfHxFPjEpJiYobD0hMCksZFtUXT1bXSxiLm91dGdvZXJzKCkuZm9yRWFjaChmdW5jdGlvbihDKXtDLmlzRWRnZSgpJiZkW1RdLnB1c2goQy5pZCgpKX0pfWVsc2UgcFtUXT1bdm9pZCAwLGIudGFyZ2V0KCkuaWQoKV19KTpzLmZvckVhY2goZnVuY3Rpb24oYil7dmFyIFQ9Yi5pZCgpO2lmKGIuaXNOb2RlKCkpe3ZhciBTPWIuZGVncmVlKCEwKTtTJTImJih1P2g/bD0hMDpoPVQ6dT1UKSxkW1RdPVtdLGIuY29ubmVjdGVkRWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHcpe3JldHVybiBkW1RdLnB1c2gody5pZCgpKX0pfWVsc2UgcFtUXT1bYi5zb3VyY2UoKS5pZCgpLGIudGFyZ2V0KCkuaWQoKV19KTt2YXIgbT17Zm91bmQ6ITEsdHJhaWw6dm9pZCAwfTtpZihsKXJldHVybiBtO2lmKGgmJnUpaWYoYSl7aWYoZiYmaCE9ZilyZXR1cm4gbTtmPWh9ZWxzZXtpZihmJiZoIT1mJiZ1IT1mKXJldHVybiBtO2Z8fChmPWgpfWVsc2UgZnx8KGY9c1swXS5pZCgpKTt2YXIgZz1vKGZ1bmN0aW9uKFQpe2Zvcih2YXIgUz1ULHc9W1RdLEUsXyxDO2RbU10ubGVuZ3RoOylFPWRbU10uc2hpZnQoKSxfPXBbRV1bMF0sQz1wW0VdWzFdLFMhPUM/KGRbQ109ZFtDXS5maWx0ZXIoZnVuY3Rpb24oRCl7cmV0dXJuIEQhPUV9KSxTPUMpOiFhJiZTIT1fJiYoZFtfXT1kW19dLmZpbHRlcihmdW5jdGlvbihEKXtyZXR1cm4gRCE9RX0pLFM9Xyksdy51bnNoaWZ0KEUpLHcudW5zaGlmdChTKTtyZXR1cm4gd30sIndhbGsiKSx5PVtdLHY9W107Zm9yKHY9ZyhmKTt2Lmxlbmd0aCE9MTspZFt2WzBdXS5sZW5ndGg9PTA/KHkudW5zaGlmdChzLmdldEVsZW1lbnRCeUlkKHYuc2hpZnQoKSkpLHkudW5zaGlmdChzLmdldEVsZW1lbnRCeUlkKHYuc2hpZnQoKSkpKTp2PWcodi5zaGlmdCgpKS5jb25jYXQodik7eS51bnNoaWZ0KHMuZ2V0RWxlbWVudEJ5SWQodi5zaGlmdCgpKSk7Zm9yKHZhciB4IGluIGQpaWYoZFt4XS5sZW5ndGgpcmV0dXJuIG07cmV0dXJuIG0uZm91bmQ9ITAsbS50cmFpbD10aGlzLnNwYXduKHksITApLG19LCJoaWVyaG9semVyIil9LHg2PW8oZnVuY3Rpb24oKXt2YXIgZT10aGlzLHI9e30sbj0wLGk9MCxhPVtdLHM9W10sbD17fSx1PW8oZnVuY3Rpb24ocCxtKXtmb3IodmFyIGc9cy5sZW5ndGgtMSx5PVtdLHY9ZS5zcGF3bigpO3NbZ10ueCE9cHx8c1tnXS55IT1tOyl5LnB1c2gocy5wb3AoKS5lZGdlKSxnLS07eS5wdXNoKHMucG9wKCkuZWRnZSkseS5mb3JFYWNoKGZ1bmN0aW9uKHgpe3ZhciBiPXguY29ubmVjdGVkTm9kZXMoKS5pbnRlcnNlY3Rpb24oZSk7di5tZXJnZSh4KSxiLmZvckVhY2goZnVuY3Rpb24oVCl7dmFyIFM9VC5pZCgpLHc9VC5jb25uZWN0ZWRFZGdlcygpLmludGVyc2VjdGlvbihlKTt2Lm1lcmdlKFQpLHJbU10uY3V0VmVydGV4P3YubWVyZ2Uody5maWx0ZXIoZnVuY3Rpb24oRSl7cmV0dXJuIEUuaXNMb29wKCl9KSk6di5tZXJnZSh3KX0pfSksYS5wdXNoKHYpfSwiYnVpbGRDb21wb25lbnQiKSxoPW8oZnVuY3Rpb24gZChwLG0sZyl7cD09PWcmJihpKz0xKSxyW21dPXtpZDpuLGxvdzpuKyssY3V0VmVydGV4OiExfTt2YXIgeT1lLmdldEVsZW1lbnRCeUlkKG0pLmNvbm5lY3RlZEVkZ2VzKCkuaW50ZXJzZWN0aW9uKGUpO2lmKHkuc2l6ZSgpPT09MClhLnB1c2goZS5zcGF3bihlLmdldEVsZW1lbnRCeUlkKG0pKSk7ZWxzZXt2YXIgdix4LGIsVDt5LmZvckVhY2goZnVuY3Rpb24oUyl7dj1TLnNvdXJjZSgpLmlkKCkseD1TLnRhcmdldCgpLmlkKCksYj12PT09bT94OnYsYiE9PWcmJihUPVMuaWQoKSxsW1RdfHwobFtUXT0hMCxzLnB1c2goe3g6bSx5OmIsZWRnZTpTfSkpLGIgaW4gcj9yW21dLmxvdz1NYXRoLm1pbihyW21dLmxvdyxyW2JdLmlkKTooZChwLGIsbSksclttXS5sb3c9TWF0aC5taW4oclttXS5sb3cscltiXS5sb3cpLHJbbV0uaWQ8PXJbYl0ubG93JiYoclttXS5jdXRWZXJ0ZXg9ITAsdShtLGIpKSkpfSl9fSwiYmljb25uZWN0ZWRTZWFyY2giKTtlLmZvckVhY2goZnVuY3Rpb24oZCl7aWYoZC5pc05vZGUoKSl7dmFyIHA9ZC5pZCgpO3AgaW4gcnx8KGk9MCxoKHAscCkscltwXS5jdXRWZXJ0ZXg9aT4xKX19KTt2YXIgZj1PYmplY3Qua2V5cyhyKS5maWx0ZXIoZnVuY3Rpb24oZCl7cmV0dXJuIHJbZF0uY3V0VmVydGV4fSkubWFwKGZ1bmN0aW9uKGQpe3JldHVybiBlLmdldEVsZW1lbnRCeUlkKGQpfSk7cmV0dXJue2N1dDplLnNwYXduKGYpLGNvbXBvbmVudHM6YX19LCJob3Bjcm9mdFRhcmphbkJpY29ubmVjdGVkIiksaWplPXtob3Bjcm9mdFRhcmphbkJpY29ubmVjdGVkOng2LGh0YmM6eDYsaHRiOng2LGhvcGNyb2Z0VGFyamFuQmljb25uZWN0ZWRDb21wb25lbnRzOng2fSxiNj1vKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPXt9LG49MCxpPVtdLGE9W10scz1lLnNwYXduKGUpLGw9byhmdW5jdGlvbiB1KGgpe2EucHVzaChoKSxyW2hdPXtpbmRleDpuLGxvdzpuKyssZXhwbG9yZWQ6ITF9O3ZhciBmPWUuZ2V0RWxlbWVudEJ5SWQoaCkuY29ubmVjdGVkRWRnZXMoKS5pbnRlcnNlY3Rpb24oZSk7aWYoZi5mb3JFYWNoKGZ1bmN0aW9uKHkpe3ZhciB2PXkudGFyZ2V0KCkuaWQoKTt2IT09aCYmKHYgaW4gcnx8dSh2KSxyW3ZdLmV4cGxvcmVkfHwocltoXS5sb3c9TWF0aC5taW4ocltoXS5sb3csclt2XS5sb3cpKSl9KSxyW2hdLmluZGV4PT09cltoXS5sb3cpe2Zvcih2YXIgZD1lLnNwYXduKCk7Oyl7dmFyIHA9YS5wb3AoKTtpZihkLm1lcmdlKGUuZ2V0RWxlbWVudEJ5SWQocCkpLHJbcF0ubG93PXJbaF0uaW5kZXgscltwXS5leHBsb3JlZD0hMCxwPT09aClicmVha312YXIgbT1kLmVkZ2VzV2l0aChkKSxnPWQubWVyZ2UobSk7aS5wdXNoKGcpLHM9cy5kaWZmZXJlbmNlKGcpfX0sInN0cm9uZ2x5Q29ubmVjdGVkU2VhcmNoIik7cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbih1KXtpZih1LmlzTm9kZSgpKXt2YXIgaD11LmlkKCk7aCBpbiByfHxsKGgpfX0pLHtjdXQ6cyxjb21wb25lbnRzOml9fSwidGFyamFuU3Ryb25nbHlDb25uZWN0ZWQiKSxhamU9e3RhcmphblN0cm9uZ2x5Q29ubmVjdGVkOmI2LHRzYzpiNix0c2NjOmI2LHRhcmphblN0cm9uZ2x5Q29ubmVjdGVkQ29tcG9uZW50czpiNn0sT2dlPXt9O1tuNCxPWWUsUFllLEZZZSx6WWUsVlllLFdZZSxnWGUsWjEsSjEsd0IsRFhlLFZYZSxYWGUsdGplLG5qZSxpamUsYWplXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lyKE9nZSx0KX0pO1BnZT0wLEJnZT0xLEZnZT0yLGFoPW8oZnVuY3Rpb24gdChlKXtpZighKHRoaXMgaW5zdGFuY2VvZiB0KSlyZXR1cm4gbmV3IHQoZSk7dGhpcy5pZD0iVGhlbmFibGUvMS4wLjciLHRoaXMuc3RhdGU9UGdlLHRoaXMuZnVsZmlsbFZhbHVlPXZvaWQgMCx0aGlzLnJlamVjdFJlYXNvbj12b2lkIDAsdGhpcy5vbkZ1bGZpbGxlZD1bXSx0aGlzLm9uUmVqZWN0ZWQ9W10sdGhpcy5wcm94eT17dGhlbjp0aGlzLnRoZW4uYmluZCh0aGlzKX0sdHlwZW9mIGU9PSJmdW5jdGlvbiImJmUuY2FsbCh0aGlzLHRoaXMuZnVsZmlsbC5iaW5kKHRoaXMpLHRoaXMucmVqZWN0LmJpbmQodGhpcykpfSwiYXBpIik7YWgucHJvdG90eXBlPXtmdWxmaWxsOm8oZnVuY3Rpb24oZSl7cmV0dXJuIG9tZSh0aGlzLEJnZSwiZnVsZmlsbFZhbHVlIixlKX0sImZ1bGZpbGwiKSxyZWplY3Q6byhmdW5jdGlvbihlKXtyZXR1cm4gb21lKHRoaXMsRmdlLCJyZWplY3RSZWFzb24iLGUpfSwicmVqZWN0IiksdGhlbjpvKGZ1bmN0aW9uKGUscil7dmFyIG49dGhpcyxpPW5ldyBhaDtyZXR1cm4gbi5vbkZ1bGZpbGxlZC5wdXNoKGNtZShlLGksImZ1bGZpbGwiKSksbi5vblJlamVjdGVkLnB1c2goY21lKHIsaSwicmVqZWN0IikpLCRnZShuKSxpLnByb3h5fSwidGhlbiIpfTtvbWU9byhmdW5jdGlvbihlLHIsbixpKXtyZXR1cm4gZS5zdGF0ZT09PVBnZSYmKGUuc3RhdGU9cixlW25dPWksJGdlKGUpKSxlfSwiZGVsaXZlciIpLCRnZT1vKGZ1bmN0aW9uKGUpe2Uuc3RhdGU9PT1CZ2U/bG1lKGUsIm9uRnVsZmlsbGVkIixlLmZ1bGZpbGxWYWx1ZSk6ZS5zdGF0ZT09PUZnZSYmbG1lKGUsIm9uUmVqZWN0ZWQiLGUucmVqZWN0UmVhc29uKX0sImV4ZWN1dGUiKSxsbWU9byhmdW5jdGlvbihlLHIsbil7aWYoZVtyXS5sZW5ndGghPT0wKXt2YXIgaT1lW3JdO2Vbcl09W107dmFyIGE9byhmdW5jdGlvbigpe2Zvcih2YXIgbD0wO2w8aS5sZW5ndGg7bCsrKWlbbF0obil9LCJmdW5jIik7dHlwZW9mIHNldEltbWVkaWF0ZT09ImZ1bmN0aW9uIj9zZXRJbW1lZGlhdGUoYSk6c2V0VGltZW91dChhLDApfX0sImV4ZWN1dGVfaGFuZGxlcnMiKSxjbWU9byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIGZ1bmN0aW9uKGkpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXJbbl0uY2FsbChyLGkpO2Vsc2V7dmFyIGE7dHJ5e2E9ZShpKX1jYXRjaChzKXtyLnJlamVjdChzKTtyZXR1cm59c2plKHIsYSl9fX0sInJlc29sdmVyIiksc2plPW8oZnVuY3Rpb24gdChlLHIpe2lmKGU9PT1yfHxlLnByb3h5PT09cil7ZS5yZWplY3QobmV3IFR5cGVFcnJvcigiY2Fubm90IHJlc29sdmUgcHJvbWlzZSB3aXRoIGl0c2VsZiIpKTtyZXR1cm59dmFyIG47aWYocWkocik9PT0ib2JqZWN0IiYmciE9PW51bGx8fHR5cGVvZiByPT0iZnVuY3Rpb24iKXRyeXtuPXIudGhlbn1jYXRjaChhKXtlLnJlamVjdChhKTtyZXR1cm59aWYodHlwZW9mIG49PSJmdW5jdGlvbiIpe3ZhciBpPSExO3RyeXtuLmNhbGwocixmdW5jdGlvbihhKXtpfHwoaT0hMCxhPT09cj9lLnJlamVjdChuZXcgVHlwZUVycm9yKCJjaXJjdWxhciB0aGVuYWJsZSBjaGFpbiIpKTp0KGUsYSkpfSxmdW5jdGlvbihhKXtpfHwoaT0hMCxlLnJlamVjdChhKSl9KX1jYXRjaChhKXtpfHxlLnJlamVjdChhKX1yZXR1cm59ZS5mdWxmaWxsKHIpfSwicmVzb2x2ZSIpO2FoLmFsbD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGFoKGZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPW5ldyBBcnJheSh0Lmxlbmd0aCksaT0wLGE9byhmdW5jdGlvbih1LGgpe25bdV09aCxpKyssaT09PXQubGVuZ3RoJiZlKG4pfSwiZnVsZmlsbCIpLHM9MDtzPHQubGVuZ3RoO3MrKykoZnVuY3Rpb24obCl7dmFyIHU9dFtsXSxoPXUhPW51bGwmJnUudGhlbiE9bnVsbDtpZihoKXUudGhlbihmdW5jdGlvbihkKXthKGwsZCl9LGZ1bmN0aW9uKGQpe3IoZCl9KTtlbHNle3ZhciBmPXU7YShsLGYpfX0pKHMpfSl9O2FoLnJlc29sdmU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBhaChmdW5jdGlvbihlLHIpe2UodCl9KX07YWgucmVqZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYWgoZnVuY3Rpb24oZSxyKXtyKHQpfSl9O3N5PXR5cGVvZiBQcm9taXNlPCJ1Ij9Qcm9taXNlOmFoLGtCPW8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPUJCKGUpLGE9IWkscz10aGlzLl9wcml2YXRlPWlyKHtkdXJhdGlvbjoxZTN9LHIsbik7aWYocy50YXJnZXQ9ZSxzLnN0eWxlPXMuc3R5bGV8fHMuY3NzLHMuc3RhcnRlZD0hMSxzLnBsYXlpbmc9ITEscy5ob29rZWQ9ITEscy5hcHBseWluZz0hMSxzLnByb2dyZXNzPTAscy5jb21wbGV0ZXM9W10scy5mcmFtZXM9W10scy5jb21wbGV0ZSYmbGkocy5jb21wbGV0ZSkmJnMuY29tcGxldGVzLnB1c2gocy5jb21wbGV0ZSksYSl7dmFyIGw9ZS5wb3NpdGlvbigpO3Muc3RhcnRQb3NpdGlvbj1zLnN0YXJ0UG9zaXRpb258fHt4OmwueCx5OmwueX0scy5zdGFydFN0eWxlPXMuc3RhcnRTdHlsZXx8ZS5jeSgpLnN0eWxlKCkuZ2V0QW5pbWF0aW9uU3RhcnRTdHlsZShlLHMuc3R5bGUpfWlmKGkpe3ZhciB1PWUucGFuKCk7cy5zdGFydFBhbj17eDp1LngseTp1Lnl9LHMuc3RhcnRab29tPWUuem9vbSgpfXRoaXMubGVuZ3RoPTEsdGhpc1swXT10aGlzfSwiQW5pbWF0aW9uIiksSnA9a0IucHJvdG90eXBlO2lyKEpwLHtpbnN0YW5jZVN0cmluZzpvKGZ1bmN0aW9uKCl7cmV0dXJuImFuaW1hdGlvbiJ9LCJpbnN0YW5jZVN0cmluZyIpLGhvb2s6byhmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3ByaXZhdGU7aWYoIWUuaG9va2VkKXt2YXIgcixuPWUudGFyZ2V0Ll9wcml2YXRlLmFuaW1hdGlvbjtlLnF1ZXVlP3I9bi5xdWV1ZTpyPW4uY3VycmVudCxyLnB1c2godGhpcykseG8oZS50YXJnZXQpJiZlLnRhcmdldC5jeSgpLmFkZFRvQW5pbWF0aW9uUG9vbChlLnRhcmdldCksZS5ob29rZWQ9ITB9cmV0dXJuIHRoaXN9LCJob29rIikscGxheTpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZS5wcm9ncmVzcz09PTEmJihlLnByb2dyZXNzPTApLGUucGxheWluZz0hMCxlLnN0YXJ0ZWQ9ITEsZS5zdG9wcGVkPSExLHRoaXMuaG9vaygpLHRoaXN9LCJwbGF5IikscGxheWluZzpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUucGxheWluZ30sInBsYXlpbmciKSxhcHBseTpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZS5hcHBseWluZz0hMCxlLnN0YXJ0ZWQ9ITEsZS5zdG9wcGVkPSExLHRoaXMuaG9vaygpLHRoaXN9LCJhcHBseSIpLGFwcGx5aW5nOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5hcHBseWluZ30sImFwcGx5aW5nIikscGF1c2U6byhmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3ByaXZhdGU7cmV0dXJuIGUucGxheWluZz0hMSxlLnN0YXJ0ZWQ9ITEsdGhpc30sInBhdXNlIiksc3RvcDpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZS5wbGF5aW5nPSExLGUuc3RhcnRlZD0hMSxlLnN0b3BwZWQ9ITAsdGhpc30sInN0b3AiKSxyZXdpbmQ6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb2dyZXNzKDApfSwicmV3aW5kIiksZmFzdGZvcndhcmQ6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb2dyZXNzKDEpfSwiZmFzdGZvcndhcmQiKSx0aW1lOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZT09PXZvaWQgMD9yLnByb2dyZXNzKnIuZHVyYXRpb246dGhpcy5wcm9ncmVzcyhlL3IuZHVyYXRpb24pfSwidGltZSIpLHByb2dyZXNzOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fcHJpdmF0ZSxuPXIucGxheWluZztyZXR1cm4gZT09PXZvaWQgMD9yLnByb2dyZXNzOihuJiZ0aGlzLnBhdXNlKCksci5wcm9ncmVzcz1lLHIuc3RhcnRlZD0hMSxuJiZ0aGlzLnBsYXkoKSx0aGlzKX0sInByb2dyZXNzIiksY29tcGxldGVkOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5wcm9ncmVzcz09PTF9LCJjb21wbGV0ZWQiKSxyZXZlcnNlOm8oZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9wcml2YXRlLHI9ZS5wbGF5aW5nO3ImJnRoaXMucGF1c2UoKSxlLnByb2dyZXNzPTEtZS5wcm9ncmVzcyxlLnN0YXJ0ZWQ9ITE7dmFyIG49byhmdW5jdGlvbihoLGYpe3ZhciBkPWVbaF07ZCE9bnVsbCYmKGVbaF09ZVtmXSxlW2ZdPWQpfSwic3dhcCIpO2lmKG4oInpvb20iLCJzdGFydFpvb20iKSxuKCJwYW4iLCJzdGFydFBhbiIpLG4oInBvc2l0aW9uIiwic3RhcnRQb3NpdGlvbiIpLGUuc3R5bGUpZm9yKHZhciBpPTA7aTxlLnN0eWxlLmxlbmd0aDtpKyspe3ZhciBhPWUuc3R5bGVbaV0scz1hLm5hbWUsbD1lLnN0YXJ0U3R5bGVbc107ZS5zdGFydFN0eWxlW3NdPWEsZS5zdHlsZVtpXT1sfXJldHVybiByJiZ0aGlzLnBsYXkoKSx0aGlzfSwicmV2ZXJzZSIpLHByb21pc2U6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLl9wcml2YXRlLG47c3dpdGNoKGUpe2Nhc2UiZnJhbWUiOm49ci5mcmFtZXM7YnJlYWs7ZGVmYXVsdDpjYXNlImNvbXBsZXRlIjpjYXNlImNvbXBsZXRlZCI6bj1yLmNvbXBsZXRlc31yZXR1cm4gbmV3IHN5KGZ1bmN0aW9uKGksYSl7bi5wdXNoKGZ1bmN0aW9uKCl7aSgpfSl9KX0sInByb21pc2UiKX0pO0pwLmNvbXBsZXRlPUpwLmNvbXBsZXRlZDtKcC5ydW49SnAucGxheTtKcC5ydW5uaW5nPUpwLnBsYXlpbmc7b2plPXthbmltYXRlZDpvKGZ1bmN0aW9uKCl7cmV0dXJuIG8oZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49ci5sZW5ndGghPT12b2lkIDAsaT1uP3I6W3JdLGE9dGhpcy5fcHJpdmF0ZS5jeXx8dGhpcztpZighYS5zdHlsZUVuYWJsZWQoKSlyZXR1cm4hMTt2YXIgcz1pWzBdO2lmKHMpcmV0dXJuIHMuX3ByaXZhdGUuYW5pbWF0aW9uLmN1cnJlbnQubGVuZ3RoPjB9LCJhbmltYXRlZEltcGwiKX0sImFuaW1hdGVkIiksY2xlYXJRdWV1ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIG8oZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49ci5sZW5ndGghPT12b2lkIDAsaT1uP3I6W3JdLGE9dGhpcy5fcHJpdmF0ZS5jeXx8dGhpcztpZighYS5zdHlsZUVuYWJsZWQoKSlyZXR1cm4gdGhpcztmb3IodmFyIHM9MDtzPGkubGVuZ3RoO3MrKyl7dmFyIGw9aVtzXTtsLl9wcml2YXRlLmFuaW1hdGlvbi5xdWV1ZT1bXX1yZXR1cm4gdGhpc30sImNsZWFyUXVldWVJbXBsIil9LCJjbGVhclF1ZXVlIiksZGVsYXk6byhmdW5jdGlvbigpe3JldHVybiBvKGZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5fcHJpdmF0ZS5jeXx8dGhpcztyZXR1cm4gaS5zdHlsZUVuYWJsZWQoKT90aGlzLmFuaW1hdGUoe2RlbGF5OnIsZHVyYXRpb246cixjb21wbGV0ZTpufSk6dGhpc30sImRlbGF5SW1wbCIpfSwiZGVsYXkiKSxkZWxheUFuaW1hdGlvbjpvKGZ1bmN0aW9uKCl7cmV0dXJuIG8oZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLl9wcml2YXRlLmN5fHx0aGlzO3JldHVybiBpLnN0eWxlRW5hYmxlZCgpP3RoaXMuYW5pbWF0aW9uKHtkZWxheTpyLGR1cmF0aW9uOnIsY29tcGxldGU6bn0pOnRoaXN9LCJkZWxheUFuaW1hdGlvbkltcGwiKX0sImRlbGF5QW5pbWF0aW9uIiksYW5pbWF0aW9uOm8oZnVuY3Rpb24oKXtyZXR1cm4gbyhmdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMsYT1pLmxlbmd0aCE9PXZvaWQgMCxzPWE/aTpbaV0sbD10aGlzLl9wcml2YXRlLmN5fHx0aGlzLHU9IWEsaD0hdTtpZighbC5zdHlsZUVuYWJsZWQoKSlyZXR1cm4gdGhpczt2YXIgZj1sLnN0eWxlKCk7cj1pcih7fSxyLG4pO3ZhciBkPU9iamVjdC5rZXlzKHIpLmxlbmd0aD09PTA7aWYoZClyZXR1cm4gbmV3IGtCKHNbMF0scik7c3dpdGNoKHIuZHVyYXRpb249PT12b2lkIDAmJihyLmR1cmF0aW9uPTQwMCksci5kdXJhdGlvbil7Y2FzZSJzbG93IjpyLmR1cmF0aW9uPTYwMDticmVhaztjYXNlImZhc3QiOnIuZHVyYXRpb249MjAwO2JyZWFrfWlmKGgmJihyLnN0eWxlPWYuZ2V0UHJvcHNMaXN0KHIuc3R5bGV8fHIuY3NzKSxyLmNzcz12b2lkIDApLGgmJnIucmVuZGVyZWRQb3NpdGlvbiE9bnVsbCl7dmFyIHA9ci5yZW5kZXJlZFBvc2l0aW9uLG09bC5wYW4oKSxnPWwuem9vbSgpO3IucG9zaXRpb249RWdlKHAsZyxtKX1pZih1JiZyLnBhbkJ5IT1udWxsKXt2YXIgeT1yLnBhbkJ5LHY9bC5wYW4oKTtyLnBhbj17eDp2LngreS54LHk6di55K3kueX19dmFyIHg9ci5jZW50ZXJ8fHIuY2VudHJlO2lmKHUmJnghPW51bGwpe3ZhciBiPWwuZ2V0Q2VudGVyUGFuKHguZWxlcyxyLnpvb20pO2IhPW51bGwmJihyLnBhbj1iKX1pZih1JiZyLmZpdCE9bnVsbCl7dmFyIFQ9ci5maXQsUz1sLmdldEZpdFZpZXdwb3J0KFQuZWxlc3x8VC5ib3VuZGluZ0JveCxULnBhZGRpbmcpO1MhPW51bGwmJihyLnBhbj1TLnBhbixyLnpvb209Uy56b29tKX1pZih1JiZVcihyLnpvb20pKXt2YXIgdz1sLmdldFpvb21lZFZpZXdwb3J0KHIuem9vbSk7dyE9bnVsbD8ody56b29tZWQmJihyLnpvb209dy56b29tKSx3LnBhbm5lZCYmKHIucGFuPXcucGFuKSk6ci56b29tPW51bGx9cmV0dXJuIG5ldyBrQihzWzBdLHIpfSwiYW5pbWF0aW9uSW1wbCIpfSwiYW5pbWF0aW9uIiksYW5pbWF0ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIG8oZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLGE9aS5sZW5ndGghPT12b2lkIDAscz1hP2k6W2ldLGw9dGhpcy5fcHJpdmF0ZS5jeXx8dGhpcztpZighbC5zdHlsZUVuYWJsZWQoKSlyZXR1cm4gdGhpcztuJiYocj1pcih7fSxyLG4pKTtmb3IodmFyIHU9MDt1PHMubGVuZ3RoO3UrKyl7dmFyIGg9c1t1XSxmPWguYW5pbWF0ZWQoKSYmKHIucXVldWU9PT12b2lkIDB8fHIucXVldWUpLGQ9aC5hbmltYXRpb24ocixmP3txdWV1ZTohMH06dm9pZCAwKTtkLnBsYXkoKX1yZXR1cm4gdGhpc30sImFuaW1hdGVJbXBsIil9LCJhbmltYXRlIiksc3RvcDpvKGZ1bmN0aW9uKCl7cmV0dXJuIG8oZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLGE9aS5sZW5ndGghPT12b2lkIDAscz1hP2k6W2ldLGw9dGhpcy5fcHJpdmF0ZS5jeXx8dGhpcztpZighbC5zdHlsZUVuYWJsZWQoKSlyZXR1cm4gdGhpcztmb3IodmFyIHU9MDt1PHMubGVuZ3RoO3UrKyl7Zm9yKHZhciBoPXNbdV0sZj1oLl9wcml2YXRlLGQ9Zi5hbmltYXRpb24uY3VycmVudCxwPTA7cDxkLmxlbmd0aDtwKyspe3ZhciBtPWRbcF0sZz1tLl9wcml2YXRlO24mJihnLmR1cmF0aW9uPTApfXImJihmLmFuaW1hdGlvbi5xdWV1ZT1bXSksbnx8KGYuYW5pbWF0aW9uLmN1cnJlbnQ9W10pfXJldHVybiBsLm5vdGlmeSgiZHJhdyIpLHRoaXN9LCJzdG9wSW1wbCIpfSwic3RvcCIpfSxsamU9QXJyYXkuaXNBcnJheSx0Qz1samUsY2plPS9cLnxcWyg/OlteW1xdXSp8KFsiJ10pKD86KD8hXDEpW15cXF18XFwuKSo/XDEpXF0vLHVqZT0vXlx3KiQvO28oaGplLCJpc0tleSIpO2ZqZT1oamUsZGplPSJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dIixwamU9IltvYmplY3QgRnVuY3Rpb25dIixtamU9IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIixnamU9IltvYmplY3QgUHJveHldIjtvKHlqZSwiaXNGdW5jdGlvbiIpO3ZqZT15amUseGplPVE2WyJfX2NvcmUtanNfc2hhcmVkX18iXSxsQj14amUsdW1lPWZ1bmN0aW9uKCl7dmFyIHQ9L1teLl0rJC8uZXhlYyhsQiYmbEIua2V5cyYmbEIua2V5cy5JRV9QUk9UT3x8IiIpO3JldHVybiB0PyJTeW1ib2woc3JjKV8xLiIrdDoiIn0oKTtvKGJqZSwiaXNNYXNrZWQiKTtUamU9YmplLHdqZT1GdW5jdGlvbi5wcm90b3R5cGUsa2plPXdqZS50b1N0cmluZztvKEVqZSwidG9Tb3VyY2UiKTtTamU9RWplLENqZT0vW1xcXiQuKis/KClbXF17fXxdL2csQWplPS9eXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXSQvLF9qZT1GdW5jdGlvbi5wcm90b3R5cGUsRGplPU9iamVjdC5wcm90b3R5cGUsTGplPV9qZS50b1N0cmluZyxSamU9RGplLmhhc093blByb3BlcnR5LE5qZT1SZWdFeHAoIl4iK0xqZS5jYWxsKFJqZSkucmVwbGFjZShDamUsIlxcJCYiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCIkMS4qPyIpKyIkIik7byhNamUsImJhc2VJc05hdGl2ZSIpO0lqZT1NamU7byhPamUsImdldFZhbHVlJDEiKTtQamU9T2plO28oQmplLCJnZXROYXRpdmUiKTtxQj1CamUsRmplPXFCKE9iamVjdCwiY3JlYXRlIiksczQ9RmplO28oJGplLCJoYXNoQ2xlYXIiKTt6amU9JGplO28oR2plLCJoYXNoRGVsZXRlIik7VmplPUdqZSxVamU9Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iLEhqZT1PYmplY3QucHJvdG90eXBlLFdqZT1IamUuaGFzT3duUHJvcGVydHk7byhxamUsImhhc2hHZXQiKTtZamU9cWplLFhqZT1PYmplY3QucHJvdG90eXBlLGpqZT1YamUuaGFzT3duUHJvcGVydHk7byhLamUsImhhc2hIYXMiKTtRamU9S2plLFpqZT0iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI7byhKamUsImhhc2hTZXQiKTtlS2U9SmplO28ob3ksIkhhc2giKTtveS5wcm90b3R5cGUuY2xlYXI9emplO295LnByb3RvdHlwZS5kZWxldGU9VmplO295LnByb3RvdHlwZS5nZXQ9WWplO295LnByb3RvdHlwZS5oYXM9UWplO295LnByb3RvdHlwZS5zZXQ9ZUtlO2htZT1veTtvKHRLZSwibGlzdENhY2hlQ2xlYXIiKTtyS2U9dEtlO28obktlLCJlcSIpO3pnZT1uS2U7byhpS2UsImFzc29jSW5kZXhPZiIpO3JDPWlLZSxhS2U9QXJyYXkucHJvdG90eXBlLHNLZT1hS2Uuc3BsaWNlO28ob0tlLCJsaXN0Q2FjaGVEZWxldGUiKTtsS2U9b0tlO28oY0tlLCJsaXN0Q2FjaGVHZXQiKTt1S2U9Y0tlO28oaEtlLCJsaXN0Q2FjaGVIYXMiKTtmS2U9aEtlO28oZEtlLCJsaXN0Q2FjaGVTZXQiKTtwS2U9ZEtlO28obHksIkxpc3RDYWNoZSIpO2x5LnByb3RvdHlwZS5jbGVhcj1yS2U7bHkucHJvdG90eXBlLmRlbGV0ZT1sS2U7bHkucHJvdG90eXBlLmdldD11S2U7bHkucHJvdG90eXBlLmhhcz1mS2U7bHkucHJvdG90eXBlLnNldD1wS2U7bUtlPWx5LGdLZT1xQihRNiwiTWFwIikseUtlPWdLZTtvKHZLZSwibWFwQ2FjaGVDbGVhciIpO3hLZT12S2U7byhiS2UsImlzS2V5YWJsZSIpO1RLZT1iS2U7byh3S2UsImdldE1hcERhdGEiKTtuQz13S2U7byhrS2UsIm1hcENhY2hlRGVsZXRlIik7RUtlPWtLZTtvKFNLZSwibWFwQ2FjaGVHZXQiKTtDS2U9U0tlO28oQUtlLCJtYXBDYWNoZUhhcyIpO19LZT1BS2U7byhES2UsIm1hcENhY2hlU2V0Iik7TEtlPURLZTtvKGN5LCJNYXBDYWNoZSIpO2N5LnByb3RvdHlwZS5jbGVhcj14S2U7Y3kucHJvdG90eXBlLmRlbGV0ZT1FS2U7Y3kucHJvdG90eXBlLmdldD1DS2U7Y3kucHJvdG90eXBlLmhhcz1fS2U7Y3kucHJvdG90eXBlLnNldD1MS2U7R2dlPWN5LFJLZT0iRXhwZWN0ZWQgYSBmdW5jdGlvbiI7byhZQiwibWVtb2l6ZSIpO1lCLkNhY2hlPUdnZTtOS2U9WUIsTUtlPTUwMDtvKElLZSwibWVtb2l6ZUNhcHBlZCIpO09LZT1JS2UsUEtlPS9bXi5bXF1dK3xcWyg/OigtP1xkKyg/OlwuXGQrKT8pfChbIiddKSgoPzooPyFcMilbXlxcXXxcXC4pKj8pXDIpXF18KD89KD86XC58XFtcXSkoPzpcLnxcW1xdfCQpKS9nLEJLZT0vXFwoXFwpPy9nLEZLZT1PS2UoZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIHQuY2hhckNvZGVBdCgwKT09PTQ2JiZlLnB1c2goIiIpLHQucmVwbGFjZShQS2UsZnVuY3Rpb24ocixuLGksYSl7ZS5wdXNoKGk/YS5yZXBsYWNlKEJLZSwiJDEiKTpufHxyKX0pLGV9KSxWZ2U9RktlO28oJEtlLCJhcnJheU1hcCIpO1VnZT0kS2UsektlPTEvMCxmbWU9dHk/dHkucHJvdG90eXBlOnZvaWQgMCxkbWU9Zm1lP2ZtZS50b1N0cmluZzp2b2lkIDA7byhIZ2UsImJhc2VUb1N0cmluZyIpO0dLZT1IZ2U7byhWS2UsInRvU3RyaW5nJDEiKTtXZ2U9VktlO28oVUtlLCJjYXN0UGF0aCIpO3FnZT1VS2UsSEtlPTEvMDtvKFdLZSwidG9LZXkiKTtYQj1XS2U7byhxS2UsImJhc2VHZXQiKTtZS2U9cUtlO28oWEtlLCJnZXQiKTtqS2U9WEtlLEtLZT1mdW5jdGlvbigpe3RyeXt2YXIgdD1xQihPYmplY3QsImRlZmluZVByb3BlcnR5Iik7cmV0dXJuIHQoe30sIiIse30pLHR9Y2F0Y2h7fX0oKSxwbWU9S0tlO28oUUtlLCJiYXNlQXNzaWduVmFsdWUiKTtaS2U9UUtlLEpLZT1PYmplY3QucHJvdG90eXBlLGVRZT1KS2UuaGFzT3duUHJvcGVydHk7byh0UWUsImFzc2lnblZhbHVlIik7clFlPXRRZSxuUWU9OTAwNzE5OTI1NDc0MDk5MSxpUWU9L14oPzowfFsxLTldXGQqKSQvO28oYVFlLCJpc0luZGV4Iik7c1FlPWFRZTtvKG9RZSwiYmFzZVNldCIpO2xRZT1vUWU7byhjUWUsInNldCIpO3VRZT1jUWU7byhoUWUsImNvcHlBcnJheSIpO2ZRZT1oUWU7byhkUWUsInRvUGF0aCIpO3BRZT1kUWUsbVFlPXtkYXRhOm8oZnVuY3Rpb24oZSl7dmFyIHI9e2ZpZWxkOiJkYXRhIixiaW5kaW5nRXZlbnQ6ImRhdGEiLGFsbG93QmluZGluZzohMSxhbGxvd1NldHRpbmc6ITEsYWxsb3dHZXR0aW5nOiExLHNldHRpbmdFdmVudDoiZGF0YSIsc2V0dGluZ1RyaWdnZXJzRXZlbnQ6ITEsdHJpZ2dlckZuTmFtZToidHJpZ2dlciIsaW1tdXRhYmxlS2V5czp7fSx1cGRhdGVTdHlsZTohMSxiZWZvcmVHZXQ6byhmdW5jdGlvbihpKXt9LCJiZWZvcmVHZXQiKSxiZWZvcmVTZXQ6byhmdW5jdGlvbihpLGEpe30sImJlZm9yZVNldCIpLG9uU2V0Om8oZnVuY3Rpb24oaSl7fSwib25TZXQiKSxjYW5TZXQ6byhmdW5jdGlvbihpKXtyZXR1cm4hMH0sImNhblNldCIpfTtyZXR1cm4gZT1pcih7fSxyLGUpLG8oZnVuY3Rpb24oaSxhKXt2YXIgcz1lLGw9dGhpcyx1PWwubGVuZ3RoIT09dm9pZCAwLGg9dT9sOltsXSxmPXU/bFswXTpsO2lmKFp0KGkpKXt2YXIgZD1pLmluZGV4T2YoIi4iKSE9PS0xLHA9ZCYmcFFlKGkpO2lmKHMuYWxsb3dHZXR0aW5nJiZhPT09dm9pZCAwKXt2YXIgbTtyZXR1cm4gZiYmKHMuYmVmb3JlR2V0KGYpLHAmJmYuX3ByaXZhdGVbcy5maWVsZF1baV09PT12b2lkIDA/bT1qS2UoZi5fcHJpdmF0ZVtzLmZpZWxkXSxwKTptPWYuX3ByaXZhdGVbcy5maWVsZF1baV0pLG19ZWxzZSBpZihzLmFsbG93U2V0dGluZyYmYSE9PXZvaWQgMCl7dmFyIGc9IXMuaW1tdXRhYmxlS2V5c1tpXTtpZihnKXt2YXIgeT1pZ2Uoe30saSxhKTtzLmJlZm9yZVNldChsLHkpO2Zvcih2YXIgdj0wLHg9aC5sZW5ndGg7djx4O3YrKyl7dmFyIGI9aFt2XTtzLmNhblNldChiKSYmKHAmJmYuX3ByaXZhdGVbcy5maWVsZF1baV09PT12b2lkIDA/dVFlKGIuX3ByaXZhdGVbcy5maWVsZF0scCxhKTpiLl9wcml2YXRlW3MuZmllbGRdW2ldPWEpfXMudXBkYXRlU3R5bGUmJmwudXBkYXRlU3R5bGUoKSxzLm9uU2V0KGwpLHMuc2V0dGluZ1RyaWdnZXJzRXZlbnQmJmxbcy50cmlnZ2VyRm5OYW1lXShzLnNldHRpbmdFdmVudCl9fX1lbHNlIGlmKHMuYWxsb3dTZXR0aW5nJiZVcihpKSl7dmFyIFQ9aSxTLHcsRT1PYmplY3Qua2V5cyhUKTtzLmJlZm9yZVNldChsLFQpO2Zvcih2YXIgXz0wO188RS5sZW5ndGg7XysrKXtTPUVbX10sdz1UW1NdO3ZhciBDPSFzLmltbXV0YWJsZUtleXNbU107aWYoQylmb3IodmFyIEQ9MDtEPGgubGVuZ3RoO0QrKyl7dmFyIE89aFtEXTtzLmNhblNldChPKSYmKE8uX3ByaXZhdGVbcy5maWVsZF1bU109dyl9fXMudXBkYXRlU3R5bGUmJmwudXBkYXRlU3R5bGUoKSxzLm9uU2V0KGwpLHMuc2V0dGluZ1RyaWdnZXJzRXZlbnQmJmxbcy50cmlnZ2VyRm5OYW1lXShzLnNldHRpbmdFdmVudCl9ZWxzZSBpZihzLmFsbG93QmluZGluZyYmbGkoaSkpe3ZhciBSPWk7bC5vbihzLmJpbmRpbmdFdmVudCxSKX1lbHNlIGlmKHMuYWxsb3dHZXR0aW5nJiZpPT09dm9pZCAwKXt2YXIgaztyZXR1cm4gZiYmKHMuYmVmb3JlR2V0KGYpLGs9Zi5fcHJpdmF0ZVtzLmZpZWxkXSksa31yZXR1cm4gbH0sImRhdGFJbXBsIil9LCJkYXRhIikscmVtb3ZlRGF0YTpvKGZ1bmN0aW9uKGUpe3ZhciByPXtmaWVsZDoiZGF0YSIsZXZlbnQ6ImRhdGEiLHRyaWdnZXJGbk5hbWU6InRyaWdnZXIiLHRyaWdnZXJFdmVudDohMSxpbW11dGFibGVLZXlzOnt9fTtyZXR1cm4gZT1pcih7fSxyLGUpLG8oZnVuY3Rpb24oaSl7dmFyIGE9ZSxzPXRoaXMsbD1zLmxlbmd0aCE9PXZvaWQgMCx1PWw/czpbc107aWYoWnQoaSkpe2Zvcih2YXIgaD1pLnNwbGl0KC9ccysvKSxmPWgubGVuZ3RoLGQ9MDtkPGY7ZCsrKXt2YXIgcD1oW2RdO2lmKCFQZihwKSl7dmFyIG09IWEuaW1tdXRhYmxlS2V5c1twXTtpZihtKWZvcih2YXIgZz0wLHk9dS5sZW5ndGg7Zzx5O2crKyl1W2ddLl9wcml2YXRlW2EuZmllbGRdW3BdPXZvaWQgMH19YS50cmlnZ2VyRXZlbnQmJnNbYS50cmlnZ2VyRm5OYW1lXShhLmV2ZW50KX1lbHNlIGlmKGk9PT12b2lkIDApe2Zvcih2YXIgdj0wLHg9dS5sZW5ndGg7djx4O3YrKylmb3IodmFyIGI9dVt2XS5fcHJpdmF0ZVthLmZpZWxkXSxUPU9iamVjdC5rZXlzKGIpLFM9MDtTPFQubGVuZ3RoO1MrKyl7dmFyIHc9VFtTXSxFPSFhLmltbXV0YWJsZUtleXNbd107RSYmKGJbd109dm9pZCAwKX1hLnRyaWdnZXJFdmVudCYmc1thLnRyaWdnZXJGbk5hbWVdKGEuZXZlbnQpfXJldHVybiBzfSwicmVtb3ZlRGF0YUltcGwiKX0sInJlbW92ZURhdGEiKX0sZ1FlPXtldmVudEFsaWFzZXNPbjpvKGZ1bmN0aW9uKGUpe3ZhciByPWU7ci5hZGRMaXN0ZW5lcj1yLmxpc3Rlbj1yLmJpbmQ9ci5vbixyLnVubGlzdGVuPXIudW5iaW5kPXIub2ZmPXIucmVtb3ZlTGlzdGVuZXIsci50cmlnZ2VyPXIuZW1pdCxyLnBvbj1yLnByb21pc2VPbj1mdW5jdGlvbihuLGkpe3ZhciBhPXRoaXMscz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7cmV0dXJuIG5ldyBzeShmdW5jdGlvbihsLHUpe3ZhciBoPW8oZnVuY3Rpb24obSl7YS5vZmYuYXBwbHkoYSxkKSxsKG0pfSwiY2FsbGJhY2siKSxmPXMuY29uY2F0KFtoXSksZD1mLmNvbmNhdChbXSk7YS5vbi5hcHBseShhLGYpfSl9fSwiZXZlbnRBbGlhc2VzT24iKX0sdW49e307W29qZSxtUWUsZ1FlXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lyKHVuLHQpfSk7eVFlPXthbmltYXRlOnVuLmFuaW1hdGUoKSxhbmltYXRpb246dW4uYW5pbWF0aW9uKCksYW5pbWF0ZWQ6dW4uYW5pbWF0ZWQoKSxjbGVhclF1ZXVlOnVuLmNsZWFyUXVldWUoKSxkZWxheTp1bi5kZWxheSgpLGRlbGF5QW5pbWF0aW9uOnVuLmRlbGF5QW5pbWF0aW9uKCksc3RvcDp1bi5zdG9wKCl9LFI2PXtjbGFzc2VzOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcztpZihlPT09dm9pZCAwKXt2YXIgbj1bXTtyZXR1cm4gclswXS5fcHJpdmF0ZS5jbGFzc2VzLmZvckVhY2goZnVuY3Rpb24oZyl7cmV0dXJuIG4ucHVzaChnKX0pLG59ZWxzZSBFbihlKXx8KGU9KGV8fCIiKS5tYXRjaCgvXFMrL2cpfHxbXSk7Zm9yKHZhciBpPVtdLGE9bmV3IGF5KGUpLHM9MDtzPHIubGVuZ3RoO3MrKyl7Zm9yKHZhciBsPXJbc10sdT1sLl9wcml2YXRlLGg9dS5jbGFzc2VzLGY9ITEsZD0wO2Q8ZS5sZW5ndGg7ZCsrKXt2YXIgcD1lW2RdLG09aC5oYXMocCk7aWYoIW0pe2Y9ITA7YnJlYWt9fWZ8fChmPWguc2l6ZSE9PWUubGVuZ3RoKSxmJiYodS5jbGFzc2VzPWEsaS5wdXNoKGwpKX1yZXR1cm4gaS5sZW5ndGg+MCYmdGhpcy5zcGF3bihpKS51cGRhdGVTdHlsZSgpLmVtaXQoImNsYXNzIikscn0sImNsYXNzZXMiKSxhZGRDbGFzczpvKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRvZ2dsZUNsYXNzKGUsITApfSwiYWRkQ2xhc3MiKSxoYXNDbGFzczpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXNbMF07cmV0dXJuIHIhPW51bGwmJnIuX3ByaXZhdGUuY2xhc3Nlcy5oYXMoZSl9LCJoYXNDbGFzcyIpLHRvZ2dsZUNsYXNzOm8oZnVuY3Rpb24oZSxyKXtFbihlKXx8KGU9ZS5tYXRjaCgvXFMrL2cpfHxbXSk7Zm9yKHZhciBuPXRoaXMsaT1yPT09dm9pZCAwLGE9W10scz0wLGw9bi5sZW5ndGg7czxsO3MrKylmb3IodmFyIHU9bltzXSxoPXUuX3ByaXZhdGUuY2xhc3NlcyxmPSExLGQ9MDtkPGUubGVuZ3RoO2QrKyl7dmFyIHA9ZVtkXSxtPWguaGFzKHApLGc9ITE7cnx8aSYmIW0/KGguYWRkKHApLGc9ITApOighcnx8aSYmbSkmJihoLmRlbGV0ZShwKSxnPSEwKSwhZiYmZyYmKGEucHVzaCh1KSxmPSEwKX1yZXR1cm4gYS5sZW5ndGg+MCYmdGhpcy5zcGF3bihhKS51cGRhdGVTdHlsZSgpLmVtaXQoImNsYXNzIiksbn0sInRvZ2dsZUNsYXNzIikscmVtb3ZlQ2xhc3M6byhmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50b2dnbGVDbGFzcyhlLCExKX0sInJlbW92ZUNsYXNzIiksZmxhc2hDbGFzczpvKGZ1bmN0aW9uKGUscil7dmFyIG49dGhpcztpZihyPT1udWxsKXI9MjUwO2Vsc2UgaWYocj09PTApcmV0dXJuIG47cmV0dXJuIG4uYWRkQ2xhc3MoZSksc2V0VGltZW91dChmdW5jdGlvbigpe24ucmVtb3ZlQ2xhc3MoZSl9LHIpLG59LCJmbGFzaENsYXNzIil9O1I2LmNsYXNzTmFtZT1SNi5jbGFzc05hbWVzPVI2LmNsYXNzZXM7VnI9e21ldGFDaGFyOiJbXFwhXFxcIlxcI1xcJFxcJVxcJlxcJ1xcKFxcKVxcKlxcK1xcLFxcLlxcL1xcOlxcO1xcPFxcPVxcPlxcP1xcQFxcW1xcXVxcXlxcYFxce1xcfFxcfVxcfl0iLGNvbXBhcmF0b3JPcDoiPXxcXCE9fD58Pj18PHw8PXxcXCQ9fFxcXj18XFwqPSIsYm9vbE9wOiJcXD98XFwhfFxcXiIsc3RyaW5nOmAiKD86XFxcXCJ8W14iXSkqInwnKD86XFxcXCd8W14nXSkqJ2AsbnVtYmVyOldpLG1ldGE6ImRlZ3JlZXxpbmRlZ3JlZXxvdXRkZWdyZWUiLHNlcGFyYXRvcjoiXFxzKixcXHMqIixkZXNjZW5kYW50OiJcXHMrIixjaGlsZDoiXFxzKz5cXHMrIixzdWJqZWN0OiJcXCQiLGdyb3VwOiJub2RlfGVkZ2V8XFwqIixkaXJlY3RlZEVkZ2U6IlxccystPlxccysiLHVuZGlyZWN0ZWRFZGdlOiJcXHMrPC0+XFxzKyJ9O1ZyLnZhcmlhYmxlPSIoPzpbXFx3LS5dfCg/OlxcXFwiK1ZyLm1ldGFDaGFyKyIpKSsiO1ZyLmNsYXNzTmFtZT0iKD86W1xcdy1dfCg/OlxcXFwiK1ZyLm1ldGFDaGFyKyIpKSsiO1ZyLnZhbHVlPVZyLnN0cmluZysifCIrVnIubnVtYmVyO1ZyLmlkPVZyLnZhcmlhYmxlOyhmdW5jdGlvbigpe3ZhciB0LGUscjtmb3IodD1Wci5jb21wYXJhdG9yT3Auc3BsaXQoInwiKSxyPTA7cjx0Lmxlbmd0aDtyKyspZT10W3JdLFZyLmNvbXBhcmF0b3JPcCs9InxAIitlO2Zvcih0PVZyLmNvbXBhcmF0b3JPcC5zcGxpdCgifCIpLHI9MDtyPHQubGVuZ3RoO3IrKyllPXRbcl0sIShlLmluZGV4T2YoIiEiKT49MCkmJmUhPT0iPSImJihWci5jb21wYXJhdG9yT3ArPSJ8XFwhIitlKX0pKCk7Z249byhmdW5jdGlvbigpe3JldHVybntjaGVja3M6W119fSwibmV3UXVlcnkiKSwkdD17R1JPVVA6MCxDT0xMRUNUSU9OOjEsRklMVEVSOjIsREFUQV9DT01QQVJFOjMsREFUQV9FWElTVDo0LERBVEFfQk9PTDo1LE1FVEFfQ09NUEFSRTo2LFNUQVRFOjcsSUQ6OCxDTEFTUzo5LFVORElSRUNURURfRURHRToxMCxESVJFQ1RFRF9FREdFOjExLE5PREVfU09VUkNFOjEyLE5PREVfVEFSR0VUOjEzLE5PREVfTkVJR0hCT1I6MTQsQ0hJTEQ6MTUsREVTQ0VOREFOVDoxNixQQVJFTlQ6MTcsQU5DRVNUT1I6MTgsQ09NUE9VTkRfU1BMSVQ6MTksVFJVRToyMH0sRUI9W3tzZWxlY3RvcjoiOnNlbGVjdGVkIixtYXRjaGVzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2VsZWN0ZWQoKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6dW5zZWxlY3RlZCIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiFlLnNlbGVjdGVkKCl9LCJtYXRjaGVzIil9LHtzZWxlY3RvcjoiOnNlbGVjdGFibGUiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4gZS5zZWxlY3RhYmxlKCl9LCJtYXRjaGVzIil9LHtzZWxlY3RvcjoiOnVuc2VsZWN0YWJsZSIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiFlLnNlbGVjdGFibGUoKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6bG9ja2VkIixtYXRjaGVzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIGUubG9ja2VkKCl9LCJtYXRjaGVzIil9LHtzZWxlY3RvcjoiOnVubG9ja2VkIixtYXRjaGVzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIWUubG9ja2VkKCl9LCJtYXRjaGVzIil9LHtzZWxlY3RvcjoiOnZpc2libGUiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4gZS52aXNpYmxlKCl9LCJtYXRjaGVzIil9LHtzZWxlY3RvcjoiOmhpZGRlbiIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiFlLnZpc2libGUoKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6dHJhbnNwYXJlbnQiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4gZS50cmFuc3BhcmVudCgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjpncmFiYmVkIixtYXRjaGVzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ3JhYmJlZCgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjpmcmVlIixtYXRjaGVzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIWUuZ3JhYmJlZCgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjpyZW1vdmVkIixtYXRjaGVzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVtb3ZlZCgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjppbnNpZGUiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4hZS5yZW1vdmVkKCl9LCJtYXRjaGVzIil9LHtzZWxlY3RvcjoiOmdyYWJiYWJsZSIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLmdyYWJiYWJsZSgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6Ijp1bmdyYWJiYWJsZSIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiFlLmdyYWJiYWJsZSgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjphbmltYXRlZCIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLmFuaW1hdGVkKCl9LCJtYXRjaGVzIil9LHtzZWxlY3RvcjoiOnVuYW5pbWF0ZWQiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4hZS5hbmltYXRlZCgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjpwYXJlbnQiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4gZS5pc1BhcmVudCgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjpjaGlsZGxlc3MiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4gZS5pc0NoaWxkbGVzcygpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjpjaGlsZCIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlzQ2hpbGQoKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6b3JwaGFuIixtYXRjaGVzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIGUuaXNPcnBoYW4oKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6bm9ub3JwaGFuIixtYXRjaGVzOm8oZnVuY3Rpb24oZSl7cmV0dXJuIGUuaXNDaGlsZCgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6Ijpjb21wb3VuZCIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlzTm9kZSgpP2UuaXNQYXJlbnQoKTplLnNvdXJjZSgpLmlzUGFyZW50KCl8fGUudGFyZ2V0KCkuaXNQYXJlbnQoKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6bG9vcCIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlzTG9vcCgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjpzaW1wbGUiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4gZS5pc1NpbXBsZSgpfSwibWF0Y2hlcyIpfSx7c2VsZWN0b3I6IjphY3RpdmUiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4gZS5hY3RpdmUoKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6aW5hY3RpdmUiLG1hdGNoZXM6byhmdW5jdGlvbihlKXtyZXR1cm4hZS5hY3RpdmUoKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6YmFja2dyb3VuZGluZyIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLmJhY2tncm91bmRpbmcoKX0sIm1hdGNoZXMiKX0se3NlbGVjdG9yOiI6bm9uYmFja2dyb3VuZGluZyIsbWF0Y2hlczpvKGZ1bmN0aW9uKGUpe3JldHVybiFlLmJhY2tncm91bmRpbmcoKX0sIm1hdGNoZXMiKX1dLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gTHFlKHQuc2VsZWN0b3IsZS5zZWxlY3Rvcil9KSx2UWU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9e30sZSxyPTA7cjxFQi5sZW5ndGg7cisrKWU9RUJbcl0sdFtlLnNlbGVjdG9yXT1lLm1hdGNoZXM7cmV0dXJuIHR9KCkseFFlPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gdlFlW2VdKHIpfSwic3RhdGVTZWxlY3Rvck1hdGNoZXMiKSxiUWU9IigiK0VCLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5zZWxlY3Rvcn0pLmpvaW4oInwiKSsiKSIsVTE9byhmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKG5ldyBSZWdFeHAoIlxcXFwoIitWci5tZXRhQ2hhcisiKSIsImciKSxmdW5jdGlvbihyLG4pe3JldHVybiBufSl9LCJjbGVhbk1ldGFDaGFycyIpLFJmPW8oZnVuY3Rpb24oZSxyLG4pe2VbZS5sZW5ndGgtMV09bn0sInJlcGxhY2VMYXN0UXVlcnkiKSxTQj1be25hbWU6Imdyb3VwIixxdWVyeTohMCxyZWdleDoiKCIrVnIuZ3JvdXArIikiLHBvcHVsYXRlOm8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPVJpKG4sMSksYT1pWzBdO3IuY2hlY2tzLnB1c2goe3R5cGU6JHQuR1JPVVAsdmFsdWU6YT09PSIqIj9hOmErInMifSl9LCJwb3B1bGF0ZSIpfSx7bmFtZToic3RhdGUiLHF1ZXJ5OiEwLHJlZ2V4OmJRZSxwb3B1bGF0ZTpvKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1SaShuLDEpLGE9aVswXTtyLmNoZWNrcy5wdXNoKHt0eXBlOiR0LlNUQVRFLHZhbHVlOmF9KX0sInBvcHVsYXRlIil9LHtuYW1lOiJpZCIscXVlcnk6ITAscmVnZXg6IlxcIygiK1ZyLmlkKyIpIixwb3B1bGF0ZTpvKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1SaShuLDEpLGE9aVswXTtyLmNoZWNrcy5wdXNoKHt0eXBlOiR0LklELHZhbHVlOlUxKGEpfSl9LCJwb3B1bGF0ZSIpfSx7bmFtZToiY2xhc3NOYW1lIixxdWVyeTohMCxyZWdleDoiXFwuKCIrVnIuY2xhc3NOYW1lKyIpIixwb3B1bGF0ZTpvKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1SaShuLDEpLGE9aVswXTtyLmNoZWNrcy5wdXNoKHt0eXBlOiR0LkNMQVNTLHZhbHVlOlUxKGEpfSl9LCJwb3B1bGF0ZSIpfSx7bmFtZToiZGF0YUV4aXN0cyIscXVlcnk6ITAscmVnZXg6IlxcW1xccyooIitWci52YXJpYWJsZSsiKVxccypcXF0iLHBvcHVsYXRlOm8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPVJpKG4sMSksYT1pWzBdO3IuY2hlY2tzLnB1c2goe3R5cGU6JHQuREFUQV9FWElTVCxmaWVsZDpVMShhKX0pfSwicG9wdWxhdGUiKX0se25hbWU6ImRhdGFDb21wYXJlIixxdWVyeTohMCxyZWdleDoiXFxbXFxzKigiK1ZyLnZhcmlhYmxlKyIpXFxzKigiK1ZyLmNvbXBhcmF0b3JPcCsiKVxccyooIitWci52YWx1ZSsiKVxccypcXF0iLHBvcHVsYXRlOm8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPVJpKG4sMyksYT1pWzBdLHM9aVsxXSxsPWlbMl0sdT1uZXcgUmVnRXhwKCJeIitWci5zdHJpbmcrIiQiKS5leGVjKGwpIT1udWxsO3U/bD1sLnN1YnN0cmluZygxLGwubGVuZ3RoLTEpOmw9cGFyc2VGbG9hdChsKSxyLmNoZWNrcy5wdXNoKHt0eXBlOiR0LkRBVEFfQ09NUEFSRSxmaWVsZDpVMShhKSxvcGVyYXRvcjpzLHZhbHVlOmx9KX0sInBvcHVsYXRlIil9LHtuYW1lOiJkYXRhQm9vbCIscXVlcnk6ITAscmVnZXg6IlxcW1xccyooIitWci5ib29sT3ArIilcXHMqKCIrVnIudmFyaWFibGUrIilcXHMqXFxdIixwb3B1bGF0ZTpvKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1SaShuLDIpLGE9aVswXSxzPWlbMV07ci5jaGVja3MucHVzaCh7dHlwZTokdC5EQVRBX0JPT0wsZmllbGQ6VTEocyksb3BlcmF0b3I6YX0pfSwicG9wdWxhdGUiKX0se25hbWU6Im1ldGFDb21wYXJlIixxdWVyeTohMCxyZWdleDoiXFxbXFxbXFxzKigiK1ZyLm1ldGErIilcXHMqKCIrVnIuY29tcGFyYXRvck9wKyIpXFxzKigiK1ZyLm51bWJlcisiKVxccypcXF1cXF0iLHBvcHVsYXRlOm8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPVJpKG4sMyksYT1pWzBdLHM9aVsxXSxsPWlbMl07ci5jaGVja3MucHVzaCh7dHlwZTokdC5NRVRBX0NPTVBBUkUsZmllbGQ6VTEoYSksb3BlcmF0b3I6cyx2YWx1ZTpwYXJzZUZsb2F0KGwpfSl9LCJwb3B1bGF0ZSIpfSx7bmFtZToibmV4dFF1ZXJ5IixzZXBhcmF0b3I6ITAscmVnZXg6VnIuc2VwYXJhdG9yLHBvcHVsYXRlOm8oZnVuY3Rpb24oZSxyKXt2YXIgbj1lLmN1cnJlbnRTdWJqZWN0LGk9ZS5lZGdlQ291bnQsYT1lLmNvbXBvdW5kQ291bnQscz1lW2UubGVuZ3RoLTFdO24hPW51bGwmJihzLnN1YmplY3Q9bixlLmN1cnJlbnRTdWJqZWN0PW51bGwpLHMuZWRnZUNvdW50PWkscy5jb21wb3VuZENvdW50PWEsZS5lZGdlQ291bnQ9MCxlLmNvbXBvdW5kQ291bnQ9MDt2YXIgbD1lW2UubGVuZ3RoKytdPWduKCk7cmV0dXJuIGx9LCJwb3B1bGF0ZSIpfSx7bmFtZToiZGlyZWN0ZWRFZGdlIixzZXBhcmF0b3I6ITAscmVnZXg6VnIuZGlyZWN0ZWRFZGdlLHBvcHVsYXRlOm8oZnVuY3Rpb24oZSxyKXtpZihlLmN1cnJlbnRTdWJqZWN0PT1udWxsKXt2YXIgbj1nbigpLGk9cixhPWduKCk7cmV0dXJuIG4uY2hlY2tzLnB1c2goe3R5cGU6JHQuRElSRUNURURfRURHRSxzb3VyY2U6aSx0YXJnZXQ6YX0pLFJmKGUscixuKSxlLmVkZ2VDb3VudCsrLGF9ZWxzZXt2YXIgcz1nbigpLGw9cix1PWduKCk7cmV0dXJuIHMuY2hlY2tzLnB1c2goe3R5cGU6JHQuTk9ERV9TT1VSQ0Usc291cmNlOmwsdGFyZ2V0OnV9KSxSZihlLHIscyksZS5lZGdlQ291bnQrKyx1fX0sInBvcHVsYXRlIil9LHtuYW1lOiJ1bmRpcmVjdGVkRWRnZSIsc2VwYXJhdG9yOiEwLHJlZ2V4OlZyLnVuZGlyZWN0ZWRFZGdlLHBvcHVsYXRlOm8oZnVuY3Rpb24oZSxyKXtpZihlLmN1cnJlbnRTdWJqZWN0PT1udWxsKXt2YXIgbj1nbigpLGk9cixhPWduKCk7cmV0dXJuIG4uY2hlY2tzLnB1c2goe3R5cGU6JHQuVU5ESVJFQ1RFRF9FREdFLG5vZGVzOltpLGFdfSksUmYoZSxyLG4pLGUuZWRnZUNvdW50KyssYX1lbHNle3ZhciBzPWduKCksbD1yLHU9Z24oKTtyZXR1cm4gcy5jaGVja3MucHVzaCh7dHlwZTokdC5OT0RFX05FSUdIQk9SLG5vZGU6bCxuZWlnaGJvcjp1fSksUmYoZSxyLHMpLHV9fSwicG9wdWxhdGUiKX0se25hbWU6ImNoaWxkIixzZXBhcmF0b3I6ITAscmVnZXg6VnIuY2hpbGQscG9wdWxhdGU6byhmdW5jdGlvbihlLHIpe2lmKGUuY3VycmVudFN1YmplY3Q9PW51bGwpe3ZhciBuPWduKCksaT1nbigpLGE9ZVtlLmxlbmd0aC0xXTtyZXR1cm4gbi5jaGVja3MucHVzaCh7dHlwZTokdC5DSElMRCxwYXJlbnQ6YSxjaGlsZDppfSksUmYoZSxyLG4pLGUuY29tcG91bmRDb3VudCsrLGl9ZWxzZSBpZihlLmN1cnJlbnRTdWJqZWN0PT09cil7dmFyIHM9Z24oKSxsPWVbZS5sZW5ndGgtMV0sdT1nbigpLGg9Z24oKSxmPWduKCksZD1nbigpO3JldHVybiBzLmNoZWNrcy5wdXNoKHt0eXBlOiR0LkNPTVBPVU5EX1NQTElULGxlZnQ6bCxyaWdodDp1LHN1YmplY3Q6aH0pLGguY2hlY2tzPXIuY2hlY2tzLHIuY2hlY2tzPVt7dHlwZTokdC5UUlVFfV0sZC5jaGVja3MucHVzaCh7dHlwZTokdC5UUlVFfSksdS5jaGVja3MucHVzaCh7dHlwZTokdC5QQVJFTlQscGFyZW50OmQsY2hpbGQ6Zn0pLFJmKGUsbCxzKSxlLmN1cnJlbnRTdWJqZWN0PWgsZS5jb21wb3VuZENvdW50KyssZn1lbHNle3ZhciBwPWduKCksbT1nbigpLGc9W3t0eXBlOiR0LlBBUkVOVCxwYXJlbnQ6cCxjaGlsZDptfV07cmV0dXJuIHAuY2hlY2tzPXIuY2hlY2tzLHIuY2hlY2tzPWcsZS5jb21wb3VuZENvdW50KyssbX19LCJwb3B1bGF0ZSIpfSx7bmFtZToiZGVzY2VuZGFudCIsc2VwYXJhdG9yOiEwLHJlZ2V4OlZyLmRlc2NlbmRhbnQscG9wdWxhdGU6byhmdW5jdGlvbihlLHIpe2lmKGUuY3VycmVudFN1YmplY3Q9PW51bGwpe3ZhciBuPWduKCksaT1nbigpLGE9ZVtlLmxlbmd0aC0xXTtyZXR1cm4gbi5jaGVja3MucHVzaCh7dHlwZTokdC5ERVNDRU5EQU5ULGFuY2VzdG9yOmEsZGVzY2VuZGFudDppfSksUmYoZSxyLG4pLGUuY29tcG91bmRDb3VudCsrLGl9ZWxzZSBpZihlLmN1cnJlbnRTdWJqZWN0PT09cil7dmFyIHM9Z24oKSxsPWVbZS5sZW5ndGgtMV0sdT1nbigpLGg9Z24oKSxmPWduKCksZD1nbigpO3JldHVybiBzLmNoZWNrcy5wdXNoKHt0eXBlOiR0LkNPTVBPVU5EX1NQTElULGxlZnQ6bCxyaWdodDp1LHN1YmplY3Q6aH0pLGguY2hlY2tzPXIuY2hlY2tzLHIuY2hlY2tzPVt7dHlwZTokdC5UUlVFfV0sZC5jaGVja3MucHVzaCh7dHlwZTokdC5UUlVFfSksdS5jaGVja3MucHVzaCh7dHlwZTokdC5BTkNFU1RPUixhbmNlc3RvcjpkLGRlc2NlbmRhbnQ6Zn0pLFJmKGUsbCxzKSxlLmN1cnJlbnRTdWJqZWN0PWgsZS5jb21wb3VuZENvdW50KyssZn1lbHNle3ZhciBwPWduKCksbT1nbigpLGc9W3t0eXBlOiR0LkFOQ0VTVE9SLGFuY2VzdG9yOnAsZGVzY2VuZGFudDptfV07cmV0dXJuIHAuY2hlY2tzPXIuY2hlY2tzLHIuY2hlY2tzPWcsZS5jb21wb3VuZENvdW50KyssbX19LCJwb3B1bGF0ZSIpfSx7bmFtZToic3ViamVjdCIsbW9kaWZpZXI6ITAscmVnZXg6VnIuc3ViamVjdCxwb3B1bGF0ZTpvKGZ1bmN0aW9uKGUscil7aWYoZS5jdXJyZW50U3ViamVjdCE9bnVsbCYmZS5jdXJyZW50U3ViamVjdCE9PXIpcmV0dXJuIGhuKCJSZWRlZmluaXRpb24gb2Ygc3ViamVjdCBpbiBzZWxlY3RvciBgIitlLnRvU3RyaW5nKCkrImAiKSwhMTtlLmN1cnJlbnRTdWJqZWN0PXI7dmFyIG49ZVtlLmxlbmd0aC0xXSxpPW4uY2hlY2tzWzBdLGE9aT09bnVsbD9udWxsOmkudHlwZTthPT09JHQuRElSRUNURURfRURHRT9pLnR5cGU9JHQuTk9ERV9UQVJHRVQ6YT09PSR0LlVORElSRUNURURfRURHRSYmKGkudHlwZT0kdC5OT0RFX05FSUdIQk9SLGkubm9kZT1pLm5vZGVzWzFdLGkubmVpZ2hib3I9aS5ub2Rlc1swXSxpLm5vZGVzPW51bGwpfSwicG9wdWxhdGUiKX1dO1NCLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQucmVnZXhPYmo9bmV3IFJlZ0V4cCgiXiIrdC5yZWdleCl9KTtUUWU9byhmdW5jdGlvbihlKXtmb3IodmFyIHIsbixpLGE9MDthPFNCLmxlbmd0aDthKyspe3ZhciBzPVNCW2FdLGw9cy5uYW1lLHU9ZS5tYXRjaChzLnJlZ2V4T2JqKTtpZih1IT1udWxsKXtuPXUscj1zLGk9bDt2YXIgaD11WzBdO2U9ZS5zdWJzdHJpbmcoaC5sZW5ndGgpO2JyZWFrfX1yZXR1cm57ZXhwcjpyLG1hdGNoOm4sbmFtZTppLHJlbWFpbmluZzplfX0sImNvbnN1bWVFeHByIiksd1FlPW8oZnVuY3Rpb24oZSl7dmFyIHI9ZS5tYXRjaCgvXlxzKy8pO2lmKHIpe3ZhciBuPXJbMF07ZT1lLnN1YnN0cmluZyhuLmxlbmd0aCl9cmV0dXJuIGV9LCJjb25zdW1lV2hpdGVzcGFjZSIpLGtRZT1vKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMsbj1yLmlucHV0VGV4dD1lLGk9clswXT1nbigpO2ZvcihyLmxlbmd0aD0xLG49d1FlKG4pOzspe3ZhciBhPVRRZShuKTtpZihhLmV4cHI9PW51bGwpcmV0dXJuIGhuKCJUaGUgc2VsZWN0b3IgYCIrZSsiYGlzIGludmFsaWQiKSwhMTt2YXIgcz1hLm1hdGNoLnNsaWNlKDEpLGw9YS5leHByLnBvcHVsYXRlKHIsaSxzKTtpZihsPT09ITEpcmV0dXJuITE7aWYobCE9bnVsbCYmKGk9bCksbj1hLnJlbWFpbmluZyxuLm1hdGNoKC9eXHMqJC8pKWJyZWFrfXZhciB1PXJbci5sZW5ndGgtMV07ci5jdXJyZW50U3ViamVjdCE9bnVsbCYmKHUuc3ViamVjdD1yLmN1cnJlbnRTdWJqZWN0KSx1LmVkZ2VDb3VudD1yLmVkZ2VDb3VudCx1LmNvbXBvdW5kQ291bnQ9ci5jb21wb3VuZENvdW50O2Zvcih2YXIgaD0wO2g8ci5sZW5ndGg7aCsrKXt2YXIgZj1yW2hdO2lmKGYuY29tcG91bmRDb3VudD4wJiZmLmVkZ2VDb3VudD4wKXJldHVybiBobigiVGhlIHNlbGVjdG9yIGAiK2UrImAgaXMgaW52YWxpZCBiZWNhdXNlIGl0IHVzZXMgYm90aCBhIGNvbXBvdW5kIHNlbGVjdG9yIGFuZCBhbiBlZGdlIHNlbGVjdG9yIiksITE7aWYoZi5lZGdlQ291bnQ+MSlyZXR1cm4gaG4oIlRoZSBzZWxlY3RvciBgIitlKyJgIGlzIGludmFsaWQgYmVjYXVzZSBpdCB1c2VzIG11bHRpcGxlIGVkZ2Ugc2VsZWN0b3JzIiksITE7Zi5lZGdlQ291bnQ9PT0xJiZobigiVGhlIHNlbGVjdG9yIGAiK2UrImAgaXMgZGVwcmVjYXRlZC4gIEVkZ2Ugc2VsZWN0b3JzIGRvIG5vdCB0YWtlIGVmZmVjdCBvbiBjaGFuZ2VzIHRvIHNvdXJjZSBhbmQgdGFyZ2V0IG5vZGVzIGFmdGVyIGFuIGVkZ2UgaXMgYWRkZWQsIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLiAgVXNlIGEgY2xhc3Mgb3IgZGF0YSBzZWxlY3RvciBvbiBlZGdlcyBpbnN0ZWFkLCB1cGRhdGluZyB0aGUgY2xhc3Mgb3IgZGF0YSBvZiBhbiBlZGdlIHdoZW4geW91ciBhcHAgZGV0ZWN0cyBhIGNoYW5nZSBpbiBzb3VyY2Ugb3IgdGFyZ2V0IG5vZGVzLiIpfXJldHVybiEwfSwicGFyc2UiKSxFUWU9byhmdW5jdGlvbigpe2lmKHRoaXMudG9TdHJpbmdDYWNoZSE9bnVsbClyZXR1cm4gdGhpcy50b1N0cmluZ0NhY2hlO2Zvcih2YXIgZT1vKGZ1bmN0aW9uKGYpe3JldHVybiBmPz8iIn0sImNsZWFuIikscj1vKGZ1bmN0aW9uKGYpe3JldHVybiBadChmKT8nIicrZisnIic6ZShmKX0sImNsZWFuVmFsIiksbj1vKGZ1bmN0aW9uKGYpe3JldHVybiIgIitmKyIgIn0sInNwYWNlIiksaT1vKGZ1bmN0aW9uKGYsZCl7dmFyIHA9Zi50eXBlLG09Zi52YWx1ZTtzd2l0Y2gocCl7Y2FzZSAkdC5HUk9VUDp7dmFyIGc9ZShtKTtyZXR1cm4gZy5zdWJzdHJpbmcoMCxnLmxlbmd0aC0xKX1jYXNlICR0LkRBVEFfQ09NUEFSRTp7dmFyIHk9Zi5maWVsZCx2PWYub3BlcmF0b3I7cmV0dXJuIlsiK3krbihlKHYpKStyKG0pKyJdIn1jYXNlICR0LkRBVEFfQk9PTDp7dmFyIHg9Zi5vcGVyYXRvcixiPWYuZmllbGQ7cmV0dXJuIlsiK2UoeCkrYisiXSJ9Y2FzZSAkdC5EQVRBX0VYSVNUOnt2YXIgVD1mLmZpZWxkO3JldHVybiJbIitUKyJdIn1jYXNlICR0Lk1FVEFfQ09NUEFSRTp7dmFyIFM9Zi5vcGVyYXRvcix3PWYuZmllbGQ7cmV0dXJuIltbIit3K24oZShTKSkrcihtKSsiXV0ifWNhc2UgJHQuU1RBVEU6cmV0dXJuIG07Y2FzZSAkdC5JRDpyZXR1cm4iIyIrbTtjYXNlICR0LkNMQVNTOnJldHVybiIuIittO2Nhc2UgJHQuUEFSRU5UOmNhc2UgJHQuQ0hJTEQ6cmV0dXJuIGEoZi5wYXJlbnQsZCkrbigiPiIpK2EoZi5jaGlsZCxkKTtjYXNlICR0LkFOQ0VTVE9SOmNhc2UgJHQuREVTQ0VOREFOVDpyZXR1cm4gYShmLmFuY2VzdG9yLGQpKyIgIithKGYuZGVzY2VuZGFudCxkKTtjYXNlICR0LkNPTVBPVU5EX1NQTElUOnt2YXIgRT1hKGYubGVmdCxkKSxfPWEoZi5zdWJqZWN0LGQpLEM9YShmLnJpZ2h0LGQpO3JldHVybiBFKyhFLmxlbmd0aD4wPyIgIjoiIikrXytDfWNhc2UgJHQuVFJVRTpyZXR1cm4iIn19LCJjaGVja1RvU3RyaW5nIiksYT1vKGZ1bmN0aW9uKGYsZCl7cmV0dXJuIGYuY2hlY2tzLnJlZHVjZShmdW5jdGlvbihwLG0sZyl7cmV0dXJuIHArKGQ9PT1mJiZnPT09MD8iJCI6IiIpK2kobSxkKX0sIiIpfSwicXVlcnlUb1N0cmluZyIpLHM9IiIsbD0wO2w8dGhpcy5sZW5ndGg7bCsrKXt2YXIgdT10aGlzW2xdO3MrPWEodSx1LnN1YmplY3QpLHRoaXMubGVuZ3RoPjEmJmw8dGhpcy5sZW5ndGgtMSYmKHMrPSIsICIpfXJldHVybiB0aGlzLnRvU3RyaW5nQ2FjaGU9cyxzfSwidG9TdHJpbmciKSxTUWU9e3BhcnNlOmtRZSx0b1N0cmluZzpFUWV9LFlnZT1vKGZ1bmN0aW9uKGUscixuKXt2YXIgaSxhPVp0KGUpLHM9X3QoZSksbD1adChuKSx1LGgsZj0hMSxkPSExLHA9ITE7c3dpdGNoKHIuaW5kZXhPZigiISIpPj0wJiYocj1yLnJlcGxhY2UoIiEiLCIiKSxkPSEwKSxyLmluZGV4T2YoIkAiKT49MCYmKHI9ci5yZXBsYWNlKCJAIiwiIiksZj0hMCksKGF8fGx8fGYpJiYodT0hYSYmIXM/IiI6IiIrZSxoPSIiK24pLGYmJihlPXU9dS50b0xvd2VyQ2FzZSgpLG49aD1oLnRvTG93ZXJDYXNlKCkpLHIpe2Nhc2UiKj0iOmk9dS5pbmRleE9mKGgpPj0wO2JyZWFrO2Nhc2UiJD0iOmk9dS5pbmRleE9mKGgsdS5sZW5ndGgtaC5sZW5ndGgpPj0wO2JyZWFrO2Nhc2UiXj0iOmk9dS5pbmRleE9mKGgpPT09MDticmVhaztjYXNlIj0iOmk9ZT09PW47YnJlYWs7Y2FzZSI+IjpwPSEwLGk9ZT5uO2JyZWFrO2Nhc2UiPj0iOnA9ITAsaT1lPj1uO2JyZWFrO2Nhc2UiPCI6cD0hMCxpPWU8bjticmVhaztjYXNlIjw9IjpwPSEwLGk9ZTw9bjticmVhaztkZWZhdWx0Omk9ITE7YnJlYWt9cmV0dXJuIGQmJihlIT1udWxsfHwhcCkmJihpPSFpKSxpfSwidmFsQ21wIiksQ1FlPW8oZnVuY3Rpb24oZSxyKXtzd2l0Y2gocil7Y2FzZSI/IjpyZXR1cm4hIWU7Y2FzZSIhIjpyZXR1cm4hZTtjYXNlIl4iOnJldHVybiBlPT09dm9pZCAwfX0sImJvb2xDbXAiKSxBUWU9byhmdW5jdGlvbihlKXtyZXR1cm4gZSE9PXZvaWQgMH0sImV4aXN0Q21wIiksakI9byhmdW5jdGlvbihlLHIpe3JldHVybiBlLmRhdGEocil9LCJkYXRhIiksX1FlPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gZVtyXSgpfSwibWV0YSIpLHBpPVtdLFZuPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gZS5jaGVja3MuZXZlcnkoZnVuY3Rpb24obil7cmV0dXJuIHBpW24udHlwZV0obixyKX0pfSwibWF0Y2hlcyIpO3BpWyR0LkdST1VQXT1mdW5jdGlvbih0LGUpe3ZhciByPXQudmFsdWU7cmV0dXJuIHI9PT0iKiJ8fHI9PT1lLmdyb3VwKCl9O3BpWyR0LlNUQVRFXT1mdW5jdGlvbih0LGUpe3ZhciByPXQudmFsdWU7cmV0dXJuIHhRZShyLGUpfTtwaVskdC5JRF09ZnVuY3Rpb24odCxlKXt2YXIgcj10LnZhbHVlO3JldHVybiBlLmlkKCk9PT1yfTtwaVskdC5DTEFTU109ZnVuY3Rpb24odCxlKXt2YXIgcj10LnZhbHVlO3JldHVybiBlLmhhc0NsYXNzKHIpfTtwaVskdC5NRVRBX0NPTVBBUkVdPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5maWVsZCxuPXQub3BlcmF0b3IsaT10LnZhbHVlO3JldHVybiBZZ2UoX1FlKGUsciksbixpKX07cGlbJHQuREFUQV9DT01QQVJFXT1mdW5jdGlvbih0LGUpe3ZhciByPXQuZmllbGQsbj10Lm9wZXJhdG9yLGk9dC52YWx1ZTtyZXR1cm4gWWdlKGpCKGUsciksbixpKX07cGlbJHQuREFUQV9CT09MXT1mdW5jdGlvbih0LGUpe3ZhciByPXQuZmllbGQsbj10Lm9wZXJhdG9yO3JldHVybiBDUWUoakIoZSxyKSxuKX07cGlbJHQuREFUQV9FWElTVF09ZnVuY3Rpb24odCxlKXt2YXIgcj10LmZpZWxkO3JldHVybiB0Lm9wZXJhdG9yLEFRZShqQihlLHIpKX07cGlbJHQuVU5ESVJFQ1RFRF9FREdFXT1mdW5jdGlvbih0LGUpe3ZhciByPXQubm9kZXNbMF0sbj10Lm5vZGVzWzFdLGk9ZS5zb3VyY2UoKSxhPWUudGFyZ2V0KCk7cmV0dXJuIFZuKHIsaSkmJlZuKG4sYSl8fFZuKG4saSkmJlZuKHIsYSl9O3BpWyR0Lk5PREVfTkVJR0hCT1JdPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFZuKHQubm9kZSxlKSYmZS5uZWlnaGJvcmhvb2QoKS5zb21lKGZ1bmN0aW9uKHIpe3JldHVybiByLmlzTm9kZSgpJiZWbih0Lm5laWdoYm9yLHIpfSl9O3BpWyR0LkRJUkVDVEVEX0VER0VdPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFZuKHQuc291cmNlLGUuc291cmNlKCkpJiZWbih0LnRhcmdldCxlLnRhcmdldCgpKX07cGlbJHQuTk9ERV9TT1VSQ0VdPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFZuKHQuc291cmNlLGUpJiZlLm91dGdvZXJzKCkuc29tZShmdW5jdGlvbihyKXtyZXR1cm4gci5pc05vZGUoKSYmVm4odC50YXJnZXQscil9KX07cGlbJHQuTk9ERV9UQVJHRVRdPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFZuKHQudGFyZ2V0LGUpJiZlLmluY29tZXJzKCkuc29tZShmdW5jdGlvbihyKXtyZXR1cm4gci5pc05vZGUoKSYmVm4odC5zb3VyY2Uscil9KX07cGlbJHQuQ0hJTERdPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFZuKHQuY2hpbGQsZSkmJlZuKHQucGFyZW50LGUucGFyZW50KCkpfTtwaVskdC5QQVJFTlRdPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFZuKHQucGFyZW50LGUpJiZlLmNoaWxkcmVuKCkuc29tZShmdW5jdGlvbihyKXtyZXR1cm4gVm4odC5jaGlsZCxyKX0pfTtwaVskdC5ERVNDRU5EQU5UXT1mdW5jdGlvbih0LGUpe3JldHVybiBWbih0LmRlc2NlbmRhbnQsZSkmJmUuYW5jZXN0b3JzKCkuc29tZShmdW5jdGlvbihyKXtyZXR1cm4gVm4odC5hbmNlc3RvcixyKX0pfTtwaVskdC5BTkNFU1RPUl09ZnVuY3Rpb24odCxlKXtyZXR1cm4gVm4odC5hbmNlc3RvcixlKSYmZS5kZXNjZW5kYW50cygpLnNvbWUoZnVuY3Rpb24ocil7cmV0dXJuIFZuKHQuZGVzY2VuZGFudCxyKX0pfTtwaVskdC5DT01QT1VORF9TUExJVF09ZnVuY3Rpb24odCxlKXtyZXR1cm4gVm4odC5zdWJqZWN0LGUpJiZWbih0LmxlZnQsZSkmJlZuKHQucmlnaHQsZSl9O3BpWyR0LlRSVUVdPWZ1bmN0aW9uKCl7cmV0dXJuITB9O3BpWyR0LkNPTExFQ1RJT05dPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC52YWx1ZTtyZXR1cm4gci5oYXMoZSl9O3BpWyR0LkZJTFRFUl09ZnVuY3Rpb24odCxlKXt2YXIgcj10LnZhbHVlO3JldHVybiByKGUpfTtEUWU9byhmdW5jdGlvbihlKXt2YXIgcj10aGlzO2lmKHIubGVuZ3RoPT09MSYmclswXS5jaGVja3MubGVuZ3RoPT09MSYmclswXS5jaGVja3NbMF0udHlwZT09PSR0LklEKXJldHVybiBlLmdldEVsZW1lbnRCeUlkKHJbMF0uY2hlY2tzWzBdLnZhbHVlKS5jb2xsZWN0aW9uKCk7dmFyIG49byhmdW5jdGlvbihhKXtmb3IodmFyIHM9MDtzPHIubGVuZ3RoO3MrKyl7dmFyIGw9cltzXTtpZihWbihsLGEpKXJldHVybiEwfXJldHVybiExfSwic2VsZWN0b3JGdW5jdGlvbiIpO3JldHVybiByLnRleHQoKT09bnVsbCYmKG49byhmdW5jdGlvbigpe3JldHVybiEwfSwic2VsZWN0b3JGdW5jdGlvbiIpKSxlLmZpbHRlcihuKX0sImZpbHRlciIpLExRZT1vKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj10aGlzLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXTtpZihWbihpLGUpKXJldHVybiEwfXJldHVybiExfSwibWF0Y2hlcyIpLFJRZT17bWF0Y2hlczpMUWUsZmlsdGVyOkRRZX0sJGY9byhmdW5jdGlvbihlKXt0aGlzLmlucHV0VGV4dD1lLHRoaXMuY3VycmVudFN1YmplY3Q9bnVsbCx0aGlzLmNvbXBvdW5kQ291bnQ9MCx0aGlzLmVkZ2VDb3VudD0wLHRoaXMubGVuZ3RoPTAsZT09bnVsbHx8WnQoZSkmJmUubWF0Y2goL15ccyokLyl8fCh4byhlKT90aGlzLmFkZFF1ZXJ5KHtjaGVja3M6W3t0eXBlOiR0LkNPTExFQ1RJT04sdmFsdWU6ZS5jb2xsZWN0aW9uKCl9XX0pOmxpKGUpP3RoaXMuYWRkUXVlcnkoe2NoZWNrczpbe3R5cGU6JHQuRklMVEVSLHZhbHVlOmV9XX0pOlp0KGUpP3RoaXMucGFyc2UoZSl8fCh0aGlzLmludmFsaWQ9ITApOm9pKCJBIHNlbGVjdG9yIG11c3QgYmUgY3JlYXRlZCBmcm9tIGEgc3RyaW5nOyBmb3VuZCAiKSl9LCJTZWxlY3RvciIpLHpmPSRmLnByb3RvdHlwZTtbU1FlLFJRZV0uZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gaXIoemYsdCl9KTt6Zi50ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5wdXRUZXh0fTt6Zi5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofTt6Zi5lcT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpc1t0XX07emYuc2FtZVRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIXRoaXMuaW52YWxpZCYmIXQuaW52YWxpZCYmdGhpcy50ZXh0KCk9PT10LnRleHQoKX07emYuYWRkUXVlcnk9ZnVuY3Rpb24odCl7dGhpc1t0aGlzLmxlbmd0aCsrXT10fTt6Zi5zZWxlY3Rvcj16Zi50b1N0cmluZztJZj17YWxsQXJlOm8oZnVuY3Rpb24oZSl7dmFyIHI9bmV3ICRmKGUpO3JldHVybiB0aGlzLmV2ZXJ5KGZ1bmN0aW9uKG4pe3JldHVybiByLm1hdGNoZXMobil9KX0sImFsbEFyZSIpLGlzOm8oZnVuY3Rpb24oZSl7dmFyIHI9bmV3ICRmKGUpO3JldHVybiB0aGlzLnNvbWUoZnVuY3Rpb24obil7cmV0dXJuIHIubWF0Y2hlcyhuKX0pfSwiaXMiKSxzb21lOm8oZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49MDtuPHRoaXMubGVuZ3RoO24rKyl7dmFyIGk9cj9lLmFwcGx5KHIsW3RoaXNbbl0sbix0aGlzXSk6ZSh0aGlzW25dLG4sdGhpcyk7aWYoaSlyZXR1cm4hMH1yZXR1cm4hMX0sInNvbWUiKSxldmVyeTpvKGZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPTA7bjx0aGlzLmxlbmd0aDtuKyspe3ZhciBpPXI/ZS5hcHBseShyLFt0aGlzW25dLG4sdGhpc10pOmUodGhpc1tuXSxuLHRoaXMpO2lmKCFpKXJldHVybiExfXJldHVybiEwfSwiZXZlcnkiKSxzYW1lOm8oZnVuY3Rpb24oZSl7aWYodGhpcz09PWUpcmV0dXJuITA7ZT10aGlzLmN5KCkuY29sbGVjdGlvbihlKTt2YXIgcj10aGlzLmxlbmd0aCxuPWUubGVuZ3RoO3JldHVybiByIT09bj8hMTpyPT09MT90aGlzWzBdPT09ZVswXTp0aGlzLmV2ZXJ5KGZ1bmN0aW9uKGkpe3JldHVybiBlLmhhc0VsZW1lbnRXaXRoSWQoaS5pZCgpKX0pfSwic2FtZSIpLGFueVNhbWU6byhmdW5jdGlvbihlKXtyZXR1cm4gZT10aGlzLmN5KCkuY29sbGVjdGlvbihlKSx0aGlzLnNvbWUoZnVuY3Rpb24ocil7cmV0dXJuIGUuaGFzRWxlbWVudFdpdGhJZChyLmlkKCkpfSl9LCJhbnlTYW1lIiksYWxsQXJlTmVpZ2hib3JzOm8oZnVuY3Rpb24oZSl7ZT10aGlzLmN5KCkuY29sbGVjdGlvbihlKTt2YXIgcj10aGlzLm5laWdoYm9yaG9vZCgpO3JldHVybiBlLmV2ZXJ5KGZ1bmN0aW9uKG4pe3JldHVybiByLmhhc0VsZW1lbnRXaXRoSWQobi5pZCgpKX0pfSwiYWxsQXJlTmVpZ2hib3JzIiksY29udGFpbnM6byhmdW5jdGlvbihlKXtlPXRoaXMuY3koKS5jb2xsZWN0aW9uKGUpO3ZhciByPXRoaXM7cmV0dXJuIGUuZXZlcnkoZnVuY3Rpb24obil7cmV0dXJuIHIuaGFzRWxlbWVudFdpdGhJZChuLmlkKCkpfSl9LCJjb250YWlucyIpfTtJZi5hbGxBcmVOZWlnaGJvdXJzPUlmLmFsbEFyZU5laWdoYm9ycztJZi5oYXM9SWYuY29udGFpbnM7SWYuZXF1YWw9SWYuZXF1YWxzPUlmLnNhbWU7YWw9byhmdW5jdGlvbihlLHIpe3JldHVybiBvKGZ1bmN0aW9uKGksYSxzLGwpe3ZhciB1PWksaD10aGlzLGY7aWYodT09bnVsbD9mPSIiOnhvKHUpJiZ1Lmxlbmd0aD09PTEmJihmPXUuaWQoKSksaC5sZW5ndGg9PT0xJiZmKXt2YXIgZD1oWzBdLl9wcml2YXRlLHA9ZC50cmF2ZXJzYWxDYWNoZT1kLnRyYXZlcnNhbENhY2hlfHx7fSxtPXBbcl09cFtyXXx8W10sZz1CZihmKSx5PW1bZ107cmV0dXJuIHl8fChtW2ddPWUuY2FsbChoLGksYSxzLGwpKX1lbHNlIHJldHVybiBlLmNhbGwoaCxpLGEscyxsKX0sInRyYXZlcnNhbENhY2hlIil9LCJjYWNoZSIpLGl5PXtwYXJlbnQ6byhmdW5jdGlvbihlKXt2YXIgcj1bXTtpZih0aGlzLmxlbmd0aD09PTEpe3ZhciBuPXRoaXNbMF0uX3ByaXZhdGUucGFyZW50O2lmKG4pcmV0dXJuIG59Zm9yKHZhciBpPTA7aTx0aGlzLmxlbmd0aDtpKyspe3ZhciBhPXRoaXNbaV0scz1hLl9wcml2YXRlLnBhcmVudDtzJiZyLnB1c2gocyl9cmV0dXJuIHRoaXMuc3Bhd24ociwhMCkuZmlsdGVyKGUpfSwicGFyZW50IikscGFyZW50czpvKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj1bXSxuPXRoaXMucGFyZW50KCk7bi5ub25lbXB0eSgpOyl7Zm9yKHZhciBpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciBhPW5baV07ci5wdXNoKGEpfW49bi5wYXJlbnQoKX1yZXR1cm4gdGhpcy5zcGF3bihyLCEwKS5maWx0ZXIoZSl9LCJwYXJlbnRzIiksY29tbW9uQW5jZXN0b3JzOm8oZnVuY3Rpb24oZSl7Zm9yKHZhciByLG49MDtuPHRoaXMubGVuZ3RoO24rKyl7dmFyIGk9dGhpc1tuXSxhPWkucGFyZW50cygpO3I9cnx8YSxyPXIuaW50ZXJzZWN0KGEpfXJldHVybiByLmZpbHRlcihlKX0sImNvbW1vbkFuY2VzdG9ycyIpLG9ycGhhbnM6byhmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zdGRGaWx0ZXIoZnVuY3Rpb24ocil7cmV0dXJuIHIuaXNPcnBoYW4oKX0pLmZpbHRlcihlKX0sIm9ycGhhbnMiKSxub25vcnBoYW5zOm8oZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuc3RkRmlsdGVyKGZ1bmN0aW9uKHIpe3JldHVybiByLmlzQ2hpbGQoKX0pLmZpbHRlcihlKX0sIm5vbm9ycGhhbnMiKSxjaGlsZHJlbjphbChmdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj0wO3I8dGhpcy5sZW5ndGg7cisrKWZvcih2YXIgbj10aGlzW3JdLGk9bi5fcHJpdmF0ZS5jaGlsZHJlbixhPTA7YTxpLmxlbmd0aDthKyspZS5wdXNoKGlbYV0pO3JldHVybiB0aGlzLnNwYXduKGUsITApLmZpbHRlcih0KX0sImNoaWxkcmVuIiksc2libGluZ3M6byhmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wYXJlbnQoKS5jaGlsZHJlbigpLm5vdCh0aGlzKS5maWx0ZXIoZSl9LCJzaWJsaW5ncyIpLGlzUGFyZW50Om8oZnVuY3Rpb24oKXt2YXIgZT10aGlzWzBdO2lmKGUpcmV0dXJuIGUuaXNOb2RlKCkmJmUuX3ByaXZhdGUuY2hpbGRyZW4ubGVuZ3RoIT09MH0sImlzUGFyZW50IiksaXNDaGlsZGxlc3M6byhmdW5jdGlvbigpe3ZhciBlPXRoaXNbMF07aWYoZSlyZXR1cm4gZS5pc05vZGUoKSYmZS5fcHJpdmF0ZS5jaGlsZHJlbi5sZW5ndGg9PT0wfSwiaXNDaGlsZGxlc3MiKSxpc0NoaWxkOm8oZnVuY3Rpb24oKXt2YXIgZT10aGlzWzBdO2lmKGUpcmV0dXJuIGUuaXNOb2RlKCkmJmUuX3ByaXZhdGUucGFyZW50IT1udWxsfSwiaXNDaGlsZCIpLGlzT3JwaGFuOm8oZnVuY3Rpb24oKXt2YXIgZT10aGlzWzBdO2lmKGUpcmV0dXJuIGUuaXNOb2RlKCkmJmUuX3ByaXZhdGUucGFyZW50PT1udWxsfSwiaXNPcnBoYW4iKSxkZXNjZW5kYW50czpvKGZ1bmN0aW9uKGUpe3ZhciByPVtdO2Z1bmN0aW9uIG4oaSl7Zm9yKHZhciBhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBzPWlbYV07ci5wdXNoKHMpLHMuY2hpbGRyZW4oKS5ub25lbXB0eSgpJiZuKHMuY2hpbGRyZW4oKSl9fXJldHVybiBvKG4sImFkZCIpLG4odGhpcy5jaGlsZHJlbigpKSx0aGlzLnNwYXduKHIsITApLmZpbHRlcihlKX0sImRlc2NlbmRhbnRzIil9O28oS0IsImZvckVhY2hDb21wb3VuZCIpO28oWGdlLCJhZGRDaGlsZHJlbiIpO2l5LmZvckVhY2hEb3duPWZ1bmN0aW9uKHQpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMDtyZXR1cm4gS0IodGhpcyx0LGUsWGdlKX07byhqZ2UsImFkZFBhcmVudCIpO2l5LmZvckVhY2hVcD1mdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITA7cmV0dXJuIEtCKHRoaXMsdCxlLGpnZSl9O28oTlFlLCJhZGRQYXJlbnRBbmRDaGlsZHJlbiIpO2l5LmZvckVhY2hVcEFuZERvd249ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiEwO3JldHVybiBLQih0aGlzLHQsZSxOUWUpfTtpeS5hbmNlc3RvcnM9aXkucGFyZW50cztvND1LZ2U9e2RhdGE6dW4uZGF0YSh7ZmllbGQ6ImRhdGEiLGJpbmRpbmdFdmVudDoiZGF0YSIsYWxsb3dCaW5kaW5nOiEwLGFsbG93U2V0dGluZzohMCxzZXR0aW5nRXZlbnQ6ImRhdGEiLHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiEwLHRyaWdnZXJGbk5hbWU6InRyaWdnZXIiLGFsbG93R2V0dGluZzohMCxpbW11dGFibGVLZXlzOntpZDohMCxzb3VyY2U6ITAsdGFyZ2V0OiEwLHBhcmVudDohMH0sdXBkYXRlU3R5bGU6ITB9KSxyZW1vdmVEYXRhOnVuLnJlbW92ZURhdGEoe2ZpZWxkOiJkYXRhIixldmVudDoiZGF0YSIsdHJpZ2dlckZuTmFtZToidHJpZ2dlciIsdHJpZ2dlckV2ZW50OiEwLGltbXV0YWJsZUtleXM6e2lkOiEwLHNvdXJjZTohMCx0YXJnZXQ6ITAscGFyZW50OiEwfSx1cGRhdGVTdHlsZTohMH0pLHNjcmF0Y2g6dW4uZGF0YSh7ZmllbGQ6InNjcmF0Y2giLGJpbmRpbmdFdmVudDoic2NyYXRjaCIsYWxsb3dCaW5kaW5nOiEwLGFsbG93U2V0dGluZzohMCxzZXR0aW5nRXZlbnQ6InNjcmF0Y2giLHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiEwLHRyaWdnZXJGbk5hbWU6InRyaWdnZXIiLGFsbG93R2V0dGluZzohMCx1cGRhdGVTdHlsZTohMH0pLHJlbW92ZVNjcmF0Y2g6dW4ucmVtb3ZlRGF0YSh7ZmllbGQ6InNjcmF0Y2giLGV2ZW50OiJzY3JhdGNoIix0cmlnZ2VyRm5OYW1lOiJ0cmlnZ2VyIix0cmlnZ2VyRXZlbnQ6ITAsdXBkYXRlU3R5bGU6ITB9KSxyc2NyYXRjaDp1bi5kYXRhKHtmaWVsZDoicnNjcmF0Y2giLGFsbG93QmluZGluZzohMSxhbGxvd1NldHRpbmc6ITAsc2V0dGluZ1RyaWdnZXJzRXZlbnQ6ITEsYWxsb3dHZXR0aW5nOiEwfSkscmVtb3ZlUnNjcmF0Y2g6dW4ucmVtb3ZlRGF0YSh7ZmllbGQ6InJzY3JhdGNoIix0cmlnZ2VyRXZlbnQ6ITF9KSxpZDpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpc1swXTtpZihlKXJldHVybiBlLl9wcml2YXRlLmRhdGEuaWR9LCJpZCIpfTtvNC5hdHRyPW80LmRhdGE7bzQucmVtb3ZlQXR0cj1vNC5yZW1vdmVEYXRhO01RZT1LZ2UsaUM9e307byhjQiwiZGVmaW5lRGVncmVlRnVuY3Rpb24iKTtpcihpQyx7ZGVncmVlOmNCKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc291cmNlKCkuc2FtZShlLnRhcmdldCgpKT8yOjF9KSxpbmRlZ3JlZTpjQihmdW5jdGlvbih0LGUpe3JldHVybiBlLnRhcmdldCgpLnNhbWUodCk/MTowfSksb3V0ZGVncmVlOmNCKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc291cmNlKCkuc2FtZSh0KT8xOjB9KX0pO28oSDEsImRlZmluZURlZ3JlZUJvdW5kc0Z1bmN0aW9uIik7aXIoaUMse21pbkRlZ3JlZTpIMSgiZGVncmVlIixmdW5jdGlvbih0LGUpe3JldHVybiB0PGV9KSxtYXhEZWdyZWU6SDEoImRlZ3JlZSIsZnVuY3Rpb24odCxlKXtyZXR1cm4gdD5lfSksbWluSW5kZWdyZWU6SDEoImluZGVncmVlIixmdW5jdGlvbih0LGUpe3JldHVybiB0PGV9KSxtYXhJbmRlZ3JlZTpIMSgiaW5kZWdyZWUiLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+ZX0pLG1pbk91dGRlZ3JlZTpIMSgib3V0ZGVncmVlIixmdW5jdGlvbih0LGUpe3JldHVybiB0PGV9KSxtYXhPdXRkZWdyZWU6SDEoIm91dGRlZ3JlZSIsZnVuY3Rpb24odCxlKXtyZXR1cm4gdD5lfSl9KTtpcihpQyx7dG90YWxEZWdyZWU6byhmdW5jdGlvbihlKXtmb3IodmFyIHI9MCxuPXRoaXMubm9kZXMoKSxpPTA7aTxuLmxlbmd0aDtpKyspcis9bltpXS5kZWdyZWUoZSk7cmV0dXJuIHJ9LCJ0b3RhbERlZ3JlZSIpfSk7WmdlPW8oZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgYT1lW2ldO2lmKCFhLmxvY2tlZCgpKXt2YXIgcz1hLl9wcml2YXRlLnBvc2l0aW9uLGw9e3g6ci54IT1udWxsP3IueC1zLng6MCx5OnIueSE9bnVsbD9yLnktcy55OjB9O2EuaXNQYXJlbnQoKSYmIShsLng9PT0wJiZsLnk9PT0wKSYmYS5jaGlsZHJlbigpLnNoaWZ0KGwsbiksYS5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKX19fSwiYmVmb3JlUG9zaXRpb25TZXQiKSxtbWU9e2ZpZWxkOiJwb3NpdGlvbiIsYmluZGluZ0V2ZW50OiJwb3NpdGlvbiIsYWxsb3dCaW5kaW5nOiEwLGFsbG93U2V0dGluZzohMCxzZXR0aW5nRXZlbnQ6InBvc2l0aW9uIixzZXR0aW5nVHJpZ2dlcnNFdmVudDohMCx0cmlnZ2VyRm5OYW1lOiJlbWl0QW5kTm90aWZ5IixhbGxvd0dldHRpbmc6ITAsdmFsaWRLZXlzOlsieCIsInkiXSxiZWZvcmVHZXQ6byhmdW5jdGlvbihlKXtlLnVwZGF0ZUNvbXBvdW5kQm91bmRzKCl9LCJiZWZvcmVHZXQiKSxiZWZvcmVTZXQ6byhmdW5jdGlvbihlLHIpe1pnZShlLHIsITEpfSwiYmVmb3JlU2V0Iiksb25TZXQ6byhmdW5jdGlvbihlKXtlLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpfSwib25TZXQiKSxjYW5TZXQ6byhmdW5jdGlvbihlKXtyZXR1cm4hZS5sb2NrZWQoKX0sImNhblNldCIpfTtxbD1RZ2U9e3Bvc2l0aW9uOnVuLmRhdGEobW1lKSxzaWxlbnRQb3NpdGlvbjp1bi5kYXRhKGlyKHt9LG1tZSx7YWxsb3dCaW5kaW5nOiExLGFsbG93U2V0dGluZzohMCxzZXR0aW5nVHJpZ2dlcnNFdmVudDohMSxhbGxvd0dldHRpbmc6ITEsYmVmb3JlU2V0Om8oZnVuY3Rpb24oZSxyKXtaZ2UoZSxyLCEwKX0sImJlZm9yZVNldCIpLG9uU2V0Om8oZnVuY3Rpb24oZSl7ZS5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKX0sIm9uU2V0Iil9KSkscG9zaXRpb25zOm8oZnVuY3Rpb24oZSxyKXtpZihVcihlKSlyP3RoaXMuc2lsZW50UG9zaXRpb24oZSk6dGhpcy5wb3NpdGlvbihlKTtlbHNlIGlmKGxpKGUpKXt2YXIgbj1lLGk9dGhpcy5jeSgpO2kuc3RhcnRCYXRjaCgpO2Zvcih2YXIgYT0wO2E8dGhpcy5sZW5ndGg7YSsrKXt2YXIgcz10aGlzW2FdLGw9dm9pZCAwOyhsPW4ocyxhKSkmJihyP3Muc2lsZW50UG9zaXRpb24obCk6cy5wb3NpdGlvbihsKSl9aS5lbmRCYXRjaCgpfXJldHVybiB0aGlzfSwicG9zaXRpb25zIiksc2lsZW50UG9zaXRpb25zOm8oZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucG9zaXRpb25zKGUsITApfSwic2lsZW50UG9zaXRpb25zIiksc2hpZnQ6byhmdW5jdGlvbihlLHIsbil7dmFyIGk7aWYoVXIoZSk/KGk9e3g6X3QoZS54KT9lLng6MCx5Ol90KGUueSk/ZS55OjB9LG49cik6WnQoZSkmJl90KHIpJiYoaT17eDowLHk6MH0saVtlXT1yKSxpIT1udWxsKXt2YXIgYT10aGlzLmN5KCk7YS5zdGFydEJhdGNoKCk7Zm9yKHZhciBzPTA7czx0aGlzLmxlbmd0aDtzKyspe3ZhciBsPXRoaXNbc107aWYoIShhLmhhc0NvbXBvdW5kTm9kZXMoKSYmbC5pc0NoaWxkKCkmJmwuYW5jZXN0b3JzKCkuYW55U2FtZSh0aGlzKSkpe3ZhciB1PWwucG9zaXRpb24oKSxoPXt4OnUueCtpLngseTp1LnkraS55fTtuP2wuc2lsZW50UG9zaXRpb24oaCk6bC5wb3NpdGlvbihoKX19YS5lbmRCYXRjaCgpfXJldHVybiB0aGlzfSwic2hpZnQiKSxzaWxlbnRTaGlmdDpvKGZ1bmN0aW9uKGUscil7cmV0dXJuIFVyKGUpP3RoaXMuc2hpZnQoZSwhMCk6WnQoZSkmJl90KHIpJiZ0aGlzLnNoaWZ0KGUsciwhMCksdGhpc30sInNpbGVudFNoaWZ0IikscmVuZGVyZWRQb3NpdGlvbjpvKGZ1bmN0aW9uKGUscil7dmFyIG49dGhpc1swXSxpPXRoaXMuY3koKSxhPWkuem9vbSgpLHM9aS5wYW4oKSxsPVVyKGUpP2U6dm9pZCAwLHU9bCE9PXZvaWQgMHx8ciE9PXZvaWQgMCYmWnQoZSk7aWYobiYmbi5pc05vZGUoKSlpZih1KWZvcih2YXIgaD0wO2g8dGhpcy5sZW5ndGg7aCsrKXt2YXIgZj10aGlzW2hdO3IhPT12b2lkIDA/Zi5wb3NpdGlvbihlLChyLXNbZV0pL2EpOmwhPT12b2lkIDAmJmYucG9zaXRpb24oRWdlKGwsYSxzKSl9ZWxzZXt2YXIgZD1uLnBvc2l0aW9uKCk7cmV0dXJuIGw9SjYoZCxhLHMpLGU9PT12b2lkIDA/bDpsW2VdfWVsc2UgaWYoIXUpcmV0dXJuO3JldHVybiB0aGlzfSwicmVuZGVyZWRQb3NpdGlvbiIpLHJlbGF0aXZlUG9zaXRpb246byhmdW5jdGlvbihlLHIpe3ZhciBuPXRoaXNbMF0saT10aGlzLmN5KCksYT1VcihlKT9lOnZvaWQgMCxzPWEhPT12b2lkIDB8fHIhPT12b2lkIDAmJlp0KGUpLGw9aS5oYXNDb21wb3VuZE5vZGVzKCk7aWYobiYmbi5pc05vZGUoKSlpZihzKWZvcih2YXIgdT0wO3U8dGhpcy5sZW5ndGg7dSsrKXt2YXIgaD10aGlzW3VdLGY9bD9oLnBhcmVudCgpOm51bGwsZD1mJiZmLmxlbmd0aD4wLHA9ZDtkJiYoZj1mWzBdKTt2YXIgbT1wP2YucG9zaXRpb24oKTp7eDowLHk6MH07ciE9PXZvaWQgMD9oLnBvc2l0aW9uKGUscittW2VdKTphIT09dm9pZCAwJiZoLnBvc2l0aW9uKHt4OmEueCttLngseTphLnkrbS55fSl9ZWxzZXt2YXIgZz1uLnBvc2l0aW9uKCkseT1sP24ucGFyZW50KCk6bnVsbCx2PXkmJnkubGVuZ3RoPjAseD12O3YmJih5PXlbMF0pO3ZhciBiPXg/eS5wb3NpdGlvbigpOnt4OjAseTowfTtyZXR1cm4gYT17eDpnLngtYi54LHk6Zy55LWIueX0sZT09PXZvaWQgMD9hOmFbZV19ZWxzZSBpZighcylyZXR1cm47cmV0dXJuIHRoaXN9LCJyZWxhdGl2ZVBvc2l0aW9uIil9O3FsLm1vZGVsUG9zaXRpb249cWwucG9pbnQ9cWwucG9zaXRpb247cWwubW9kZWxQb3NpdGlvbnM9cWwucG9pbnRzPXFsLnBvc2l0aW9ucztxbC5yZW5kZXJlZFBvaW50PXFsLnJlbmRlcmVkUG9zaXRpb247cWwucmVsYXRpdmVQb2ludD1xbC5yZWxhdGl2ZVBvc2l0aW9uO0lRZT1RZ2U7ZXk9SGY9e307SGYucmVuZGVyZWRCb3VuZGluZ0JveD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmJvdW5kaW5nQm94KHQpLHI9dGhpcy5jeSgpLG49ci56b29tKCksaT1yLnBhbigpLGE9ZS54MSpuK2kueCxzPWUueDIqbitpLngsbD1lLnkxKm4raS55LHU9ZS55MipuK2kueTtyZXR1cm57eDE6YSx4MjpzLHkxOmwseTI6dSx3OnMtYSxoOnUtbH19O0hmLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZT1mdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMSxlPXRoaXMuY3koKTtyZXR1cm4hZS5zdHlsZUVuYWJsZWQoKXx8IWUuaGFzQ29tcG91bmROb2RlcygpP3RoaXM6KHRoaXMuZm9yRWFjaFVwKGZ1bmN0aW9uKHIpe2lmKHIuaXNQYXJlbnQoKSl7dmFyIG49ci5fcHJpdmF0ZTtuLmNvbXBvdW5kQm91bmRzQ2xlYW49ITEsbi5iYkNhY2hlPW51bGwsdHx8ci5lbWl0QW5kTm90aWZ5KCJib3VuZHMiKX19KSx0aGlzKX07SGYudXBkYXRlQ29tcG91bmRCb3VuZHM9ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06ITEsZT10aGlzLmN5KCk7aWYoIWUuc3R5bGVFbmFibGVkKCl8fCFlLmhhc0NvbXBvdW5kTm9kZXMoKSlyZXR1cm4gdGhpcztpZighdCYmZS5iYXRjaGluZygpKXJldHVybiB0aGlzO2Z1bmN0aW9uIHIocyl7aWYoIXMuaXNQYXJlbnQoKSlyZXR1cm47dmFyIGw9cy5fcHJpdmF0ZSx1PXMuY2hpbGRyZW4oKSxoPXMucHN0eWxlKCJjb21wb3VuZC1zaXppbmctd3J0LWxhYmVscyIpLnZhbHVlPT09ImluY2x1ZGUiLGY9e3dpZHRoOnt2YWw6cy5wc3R5bGUoIm1pbi13aWR0aCIpLnBmVmFsdWUsbGVmdDpzLnBzdHlsZSgibWluLXdpZHRoLWJpYXMtbGVmdCIpLHJpZ2h0OnMucHN0eWxlKCJtaW4td2lkdGgtYmlhcy1yaWdodCIpfSxoZWlnaHQ6e3ZhbDpzLnBzdHlsZSgibWluLWhlaWdodCIpLnBmVmFsdWUsdG9wOnMucHN0eWxlKCJtaW4taGVpZ2h0LWJpYXMtdG9wIiksYm90dG9tOnMucHN0eWxlKCJtaW4taGVpZ2h0LWJpYXMtYm90dG9tIil9fSxkPXUuYm91bmRpbmdCb3goe2luY2x1ZGVMYWJlbHM6aCxpbmNsdWRlT3ZlcmxheXM6ITEsdXNlQ2FjaGU6ITF9KSxwPWwucG9zaXRpb247KGQudz09PTB8fGQuaD09PTApJiYoZD17dzpzLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlLGg6cy5wc3R5bGUoImhlaWdodCIpLnBmVmFsdWV9LGQueDE9cC54LWQudy8yLGQueDI9cC54K2Qudy8yLGQueTE9cC55LWQuaC8yLGQueTI9cC55K2QuaC8yKTtmdW5jdGlvbiBtKEQsTyxSKXt2YXIgaz0wLEw9MCxBPU8rUjtyZXR1cm4gRD4wJiZBPjAmJihrPU8vQSpELEw9Ui9BKkQpLHtiaWFzRGlmZjprLGJpYXNDb21wbGVtZW50RGlmZjpMfX1vKG0sImNvbXB1dGVCaWFzVmFsdWVzIik7ZnVuY3Rpb24gZyhELE8sUixrKXtpZihSLnVuaXRzPT09IiUiKXN3aXRjaChrKXtjYXNlIndpZHRoIjpyZXR1cm4gRD4wP1IucGZWYWx1ZSpEOjA7Y2FzZSJoZWlnaHQiOnJldHVybiBPPjA/Ui5wZlZhbHVlKk86MDtjYXNlImF2ZXJhZ2UiOnJldHVybiBEPjAmJk8+MD9SLnBmVmFsdWUqKEQrTykvMjowO2Nhc2UibWluIjpyZXR1cm4gRD4wJiZPPjA/RD5PP1IucGZWYWx1ZSpPOlIucGZWYWx1ZSpEOjA7Y2FzZSJtYXgiOnJldHVybiBEPjAmJk8+MD9EPk8/Ui5wZlZhbHVlKkQ6Ui5wZlZhbHVlKk86MDtkZWZhdWx0OnJldHVybiAwfWVsc2UgcmV0dXJuIFIudW5pdHM9PT0icHgiP1IucGZWYWx1ZTowfW8oZywiY29tcHV0ZVBhZGRpbmdWYWx1ZXMiKTt2YXIgeT1mLndpZHRoLmxlZnQudmFsdWU7Zi53aWR0aC5sZWZ0LnVuaXRzPT09InB4IiYmZi53aWR0aC52YWw+MCYmKHk9eSoxMDAvZi53aWR0aC52YWwpO3ZhciB2PWYud2lkdGgucmlnaHQudmFsdWU7Zi53aWR0aC5yaWdodC51bml0cz09PSJweCImJmYud2lkdGgudmFsPjAmJih2PXYqMTAwL2Yud2lkdGgudmFsKTt2YXIgeD1mLmhlaWdodC50b3AudmFsdWU7Zi5oZWlnaHQudG9wLnVuaXRzPT09InB4IiYmZi5oZWlnaHQudmFsPjAmJih4PXgqMTAwL2YuaGVpZ2h0LnZhbCk7dmFyIGI9Zi5oZWlnaHQuYm90dG9tLnZhbHVlO2YuaGVpZ2h0LmJvdHRvbS51bml0cz09PSJweCImJmYuaGVpZ2h0LnZhbD4wJiYoYj1iKjEwMC9mLmhlaWdodC52YWwpO3ZhciBUPW0oZi53aWR0aC52YWwtZC53LHksdiksUz1ULmJpYXNEaWZmLHc9VC5iaWFzQ29tcGxlbWVudERpZmYsRT1tKGYuaGVpZ2h0LnZhbC1kLmgseCxiKSxfPUUuYmlhc0RpZmYsQz1FLmJpYXNDb21wbGVtZW50RGlmZjtsLmF1dG9QYWRkaW5nPWcoZC53LGQuaCxzLnBzdHlsZSgicGFkZGluZyIpLHMucHN0eWxlKCJwYWRkaW5nLXJlbGF0aXZlLXRvIikudmFsdWUpLGwuYXV0b1dpZHRoPU1hdGgubWF4KGQudyxmLndpZHRoLnZhbCkscC54PSgtUytkLngxK2QueDIrdykvMixsLmF1dG9IZWlnaHQ9TWF0aC5tYXgoZC5oLGYuaGVpZ2h0LnZhbCkscC55PSgtXytkLnkxK2QueTIrQykvMn1vKHIsInVwZGF0ZSIpO2Zvcih2YXIgbj0wO248dGhpcy5sZW5ndGg7bisrKXt2YXIgaT10aGlzW25dLGE9aS5fcHJpdmF0ZTsoIWEuY29tcG91bmRCb3VuZHNDbGVhbnx8dCkmJihyKGkpLGUuYmF0Y2hpbmcoKXx8KGEuY29tcG91bmRCb3VuZHNDbGVhbj0hMCkpfXJldHVybiB0aGlzfTtpbD1vKGZ1bmN0aW9uKGUpe3JldHVybiBlPT09MS8wfHxlPT09LTEvMD8wOmV9LCJub25pbmYiKSxIbD1vKGZ1bmN0aW9uKGUscixuLGksYSl7aS1yPT09MHx8YS1uPT09MHx8cj09bnVsbHx8bj09bnVsbHx8aT09bnVsbHx8YT09bnVsbHx8KGUueDE9cjxlLngxP3I6ZS54MSxlLngyPWk+ZS54Mj9pOmUueDIsZS55MT1uPGUueTE/bjplLnkxLGUueTI9YT5lLnkyP2E6ZS55MixlLnc9ZS54Mi1lLngxLGUuaD1lLnkyLWUueTEpfSwidXBkYXRlQm91bmRzIikscXA9byhmdW5jdGlvbihlLHIpe3JldHVybiByPT1udWxsP2U6SGwoZSxyLngxLHIueTEsci54MixyLnkyKX0sInVwZGF0ZUJvdW5kc0Zyb21Cb3giKSx6Yj1vKGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gV2woZSxyLG4pfSwicHJlZml4ZWRQcm9wZXJ0eSIpLFQ2PW8oZnVuY3Rpb24oZSxyLG4pe2lmKCFyLmN5KCkuaGVhZGxlc3MoKSl7dmFyIGk9ci5fcHJpdmF0ZSxhPWkucnN0eWxlLHM9YS5hcnJvd1dpZHRoLzIsbD1yLnBzdHlsZShuKyItYXJyb3ctc2hhcGUiKS52YWx1ZSx1LGg7aWYobCE9PSJub25lIil7bj09PSJzb3VyY2UiPyh1PWEuc3JjWCxoPWEuc3JjWSk6bj09PSJ0YXJnZXQiPyh1PWEudGd0WCxoPWEudGd0WSk6KHU9YS5taWRYLGg9YS5taWRZKTt2YXIgZj1pLmFycm93Qm91bmRzPWkuYXJyb3dCb3VuZHN8fHt9LGQ9ZltuXT1mW25dfHx7fTtkLngxPXUtcyxkLnkxPWgtcyxkLngyPXUrcyxkLnkyPWgrcyxkLnc9ZC54Mi1kLngxLGQuaD1kLnkyLWQueTEsRDYoZCwxKSxIbChlLGQueDEsZC55MSxkLngyLGQueTIpfX19LCJ1cGRhdGVCb3VuZHNGcm9tQXJyb3ciKSx1Qj1vKGZ1bmN0aW9uKGUscixuKXtpZighci5jeSgpLmhlYWRsZXNzKCkpe3ZhciBpO24/aT1uKyItIjppPSIiO3ZhciBhPXIuX3ByaXZhdGUscz1hLnJzdHlsZSxsPXIucHN0eWxlKGkrImxhYmVsIikuc3RyVmFsdWU7aWYobCl7dmFyIHU9ci5wc3R5bGUoInRleHQtaGFsaWduIiksaD1yLnBzdHlsZSgidGV4dC12YWxpZ24iKSxmPXpiKHMsImxhYmVsV2lkdGgiLG4pLGQ9emIocywibGFiZWxIZWlnaHQiLG4pLHA9emIocywibGFiZWxYIixuKSxtPXpiKHMsImxhYmVsWSIsbiksZz1yLnBzdHlsZShpKyJ0ZXh0LW1hcmdpbi14IikucGZWYWx1ZSx5PXIucHN0eWxlKGkrInRleHQtbWFyZ2luLXkiKS5wZlZhbHVlLHY9ci5pc0VkZ2UoKSx4PXIucHN0eWxlKGkrInRleHQtcm90YXRpb24iKSxiPXIucHN0eWxlKCJ0ZXh0LW91dGxpbmUtd2lkdGgiKS5wZlZhbHVlLFQ9ci5wc3R5bGUoInRleHQtYm9yZGVyLXdpZHRoIikucGZWYWx1ZSxTPVQvMix3PXIucHN0eWxlKCJ0ZXh0LWJhY2tncm91bmQtcGFkZGluZyIpLnBmVmFsdWUsRT0yLF89ZCxDPWYsRD1DLzIsTz1fLzIsUixrLEwsQTtpZih2KVI9cC1ELGs9cCtELEw9bS1PLEE9bStPO2Vsc2V7c3dpdGNoKHUudmFsdWUpe2Nhc2UibGVmdCI6Uj1wLUMsaz1wO2JyZWFrO2Nhc2UiY2VudGVyIjpSPXAtRCxrPXArRDticmVhaztjYXNlInJpZ2h0IjpSPXAsaz1wK0M7YnJlYWt9c3dpdGNoKGgudmFsdWUpe2Nhc2UidG9wIjpMPW0tXyxBPW07YnJlYWs7Y2FzZSJjZW50ZXIiOkw9bS1PLEE9bStPO2JyZWFrO2Nhc2UiYm90dG9tIjpMPW0sQT1tK187YnJlYWt9fXZhciBJPWctTWF0aC5tYXgoYixTKS13LUUsTT1nK01hdGgubWF4KGIsUykrdytFLFA9eS1NYXRoLm1heChiLFMpLXctRSxCPXkrTWF0aC5tYXgoYixTKSt3K0U7Uis9SSxrKz1NLEwrPVAsQSs9Qjt2YXIgRj1ufHwibWFpbiIsej1hLmxhYmVsQm91bmRzLCQ9eltGXT16W0ZdfHx7fTskLngxPVIsJC55MT1MLCQueDI9aywkLnkyPUEsJC53PWstUiwkLmg9QS1MLCQubGVmdFBhZD1JLCQucmlnaHRQYWQ9TSwkLnRvcFBhZD1QLCQuYm90UGFkPUI7dmFyIFU9diYmeC5zdHJWYWx1ZT09PSJhdXRvcm90YXRlIixLPXgucGZWYWx1ZSE9bnVsbCYmeC5wZlZhbHVlIT09MDtpZihVfHxLKXt2YXIgZWU9VT96YihhLnJzdHlsZSwibGFiZWxBbmdsZSIsbik6eC5wZlZhbHVlLFk9TWF0aC5jb3MoZWUpLGNlPU1hdGguc2luKGVlKSxaPShSK2spLzIsdWU9KEwrQSkvMjtpZighdil7c3dpdGNoKHUudmFsdWUpe2Nhc2UibGVmdCI6Wj1rO2JyZWFrO2Nhc2UicmlnaHQiOlo9UjticmVha31zd2l0Y2goaC52YWx1ZSl7Y2FzZSJ0b3AiOnVlPUE7YnJlYWs7Y2FzZSJib3R0b20iOnVlPUw7YnJlYWt9fXZhciBRPW8oZnVuY3Rpb24oc2UsYWUpe3JldHVybiBzZT1zZS1aLGFlPWFlLXVlLHt4OnNlKlktYWUqY2UrWix5OnNlKmNlK2FlKlkrdWV9fSwicm90YXRlIiksaj1RKFIsTCksbmU9UShSLEEpLHRlPVEoayxMKSxoZT1RKGssQSk7Uj1NYXRoLm1pbihqLngsbmUueCx0ZS54LGhlLngpLGs9TWF0aC5tYXgoai54LG5lLngsdGUueCxoZS54KSxMPU1hdGgubWluKGoueSxuZS55LHRlLnksaGUueSksQT1NYXRoLm1heChqLnksbmUueSx0ZS55LGhlLnkpfXZhciBsZT1GKyJSb3QiLEo9eltsZV09eltsZV18fHt9O0oueDE9UixKLnkxPUwsSi54Mj1rLEoueTI9QSxKLnc9ay1SLEouaD1BLUwsSGwoZSxSLEwsayxBKSxIbChhLmxhYmVsQm91bmRzLmFsbCxSLEwsayxBKX1yZXR1cm4gZX19LCJ1cGRhdGVCb3VuZHNGcm9tTGFiZWwiKSxPUWU9byhmdW5jdGlvbihlLHIpe2lmKCFyLmN5KCkuaGVhZGxlc3MoKSl7dmFyIG49ci5wc3R5bGUoIm91dGxpbmUtb3BhY2l0eSIpLnZhbHVlLGk9ci5wc3R5bGUoIm91dGxpbmUtd2lkdGgiKS52YWx1ZTtpZihuPjAmJmk+MCl7dmFyIGE9ci5wc3R5bGUoIm91dGxpbmUtb2Zmc2V0IikudmFsdWUscz1yLnBzdHlsZSgic2hhcGUiKS52YWx1ZSxsPWkrYSx1PShlLncrbCoyKS9lLncsaD0oZS5oK2wqMikvZS5oLGY9MCxkPTA7WyJkaWFtb25kIiwicGVudGFnb24iLCJyb3VuZC10cmlhbmdsZSJdLmluY2x1ZGVzKHMpPyh1PShlLncrbCoyLjQpL2UudyxkPS1sLzMuNik6WyJjb25jYXZlLWhleGFnb24iLCJyaG9tYm9pZCIsInJpZ2h0LXJob21ib2lkIl0uaW5jbHVkZXMocyk/dT0oZS53K2wqMi40KS9lLnc6cz09PSJzdGFyIj8odT0oZS53K2wqMi44KS9lLncsaD0oZS5oK2wqMi42KS9lLmgsZD0tbC8zLjgpOnM9PT0idHJpYW5nbGUiPyh1PShlLncrbCoyLjgpL2UudyxoPShlLmgrbCoyLjQpL2UuaCxkPS1sLzEuNCk6cz09PSJ2ZWUiJiYodT0oZS53K2wqNC40KS9lLncsaD0oZS5oK2wqMy44KS9lLmgsZD0tbCouNSk7dmFyIHA9ZS5oKmgtZS5oLG09ZS53KnUtZS53O2lmKEw2KGUsW01hdGguY2VpbChwLzIpLE1hdGguY2VpbChtLzIpXSksZiE9MHx8ZCE9PTApe3ZhciBnPXJYZShlLGYsZCk7Q2dlKGUsZyl9fX19LCJ1cGRhdGVCb3VuZHNGcm9tT3V0bGluZSIpLFBRZT1vKGZ1bmN0aW9uKGUscil7dmFyIG49ZS5fcHJpdmF0ZS5jeSxpPW4uc3R5bGVFbmFibGVkKCksYT1uLmhlYWRsZXNzKCkscz1ZcygpLGw9ZS5fcHJpdmF0ZSx1PWUuaXNOb2RlKCksaD1lLmlzRWRnZSgpLGYsZCxwLG0sZyx5LHY9bC5yc3R5bGUseD11JiZpP2UucHN0eWxlKCJib3VuZHMtZXhwYW5zaW9uIikucGZWYWx1ZTpbMF0sYj1vKGZ1bmN0aW9uKFNlKXtyZXR1cm4gU2UucHN0eWxlKCJkaXNwbGF5IikudmFsdWUhPT0ibm9uZSJ9LCJpc0Rpc3BsYXllZCIpLFQ9IWl8fGIoZSkmJighaHx8YihlLnNvdXJjZSgpKSYmYihlLnRhcmdldCgpKSk7aWYoVCl7dmFyIFM9MCx3PTA7aSYmci5pbmNsdWRlT3ZlcmxheXMmJihTPWUucHN0eWxlKCJvdmVybGF5LW9wYWNpdHkiKS52YWx1ZSxTIT09MCYmKHc9ZS5wc3R5bGUoIm92ZXJsYXktcGFkZGluZyIpLnZhbHVlKSk7dmFyIEU9MCxfPTA7aSYmci5pbmNsdWRlVW5kZXJsYXlzJiYoRT1lLnBzdHlsZSgidW5kZXJsYXktb3BhY2l0eSIpLnZhbHVlLEUhPT0wJiYoXz1lLnBzdHlsZSgidW5kZXJsYXktcGFkZGluZyIpLnZhbHVlKSk7dmFyIEM9TWF0aC5tYXgodyxfKSxEPTAsTz0wO2lmKGkmJihEPWUucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUsTz1ELzIpLHUmJnIuaW5jbHVkZU5vZGVzKXt2YXIgUj1lLnBvc2l0aW9uKCk7Zz1SLngseT1SLnk7dmFyIGs9ZS5vdXRlcldpZHRoKCksTD1rLzIsQT1lLm91dGVySGVpZ2h0KCksST1BLzI7Zj1nLUwsZD1nK0wscD15LUksbT15K0ksSGwocyxmLHAsZCxtKSxpJiZyLmluY2x1ZGVPdXRsaW5lcyYmT1FlKHMsZSl9ZWxzZSBpZihoJiZyLmluY2x1ZGVFZGdlcylpZihpJiYhYSl7dmFyIE09ZS5wc3R5bGUoImN1cnZlLXN0eWxlIikuc3RyVmFsdWU7aWYoZj1NYXRoLm1pbih2LnNyY1gsdi5taWRYLHYudGd0WCksZD1NYXRoLm1heCh2LnNyY1gsdi5taWRYLHYudGd0WCkscD1NYXRoLm1pbih2LnNyY1ksdi5taWRZLHYudGd0WSksbT1NYXRoLm1heCh2LnNyY1ksdi5taWRZLHYudGd0WSksZi09TyxkKz1PLHAtPU8sbSs9TyxIbChzLGYscCxkLG0pLE09PT0iaGF5c3RhY2siKXt2YXIgUD12LmhheXN0YWNrUHRzO2lmKFAmJlAubGVuZ3RoPT09Mil7aWYoZj1QWzBdLngscD1QWzBdLnksZD1QWzFdLngsbT1QWzFdLnksZj5kKXt2YXIgQj1mO2Y9ZCxkPUJ9aWYocD5tKXt2YXIgRj1wO3A9bSxtPUZ9SGwocyxmLU8scC1PLGQrTyxtK08pfX1lbHNlIGlmKE09PT0iYmV6aWVyInx8TT09PSJ1bmJ1bmRsZWQtYmV6aWVyInx8TS5lbmRzV2l0aCgic2VnbWVudHMiKXx8TS5lbmRzV2l0aCgidGF4aSIpKXt2YXIgejtzd2l0Y2goTSl7Y2FzZSJiZXppZXIiOmNhc2UidW5idW5kbGVkLWJlemllciI6ej12LmJlemllclB0czticmVhaztjYXNlInNlZ21lbnRzIjpjYXNlInRheGkiOmNhc2Uicm91bmQtc2VnbWVudHMiOmNhc2Uicm91bmQtdGF4aSI6ej12LmxpbmVQdHM7YnJlYWt9aWYoeiE9bnVsbClmb3IodmFyICQ9MDskPHoubGVuZ3RoOyQrKyl7dmFyIFU9elskXTtmPVUueC1PLGQ9VS54K08scD1VLnktTyxtPVUueStPLEhsKHMsZixwLGQsbSl9fX1lbHNle3ZhciBLPWUuc291cmNlKCksZWU9Sy5wb3NpdGlvbigpLFk9ZS50YXJnZXQoKSxjZT1ZLnBvc2l0aW9uKCk7aWYoZj1lZS54LGQ9Y2UueCxwPWVlLnksbT1jZS55LGY+ZCl7dmFyIFo9ZjtmPWQsZD1afWlmKHA+bSl7dmFyIHVlPXA7cD1tLG09dWV9Zi09TyxkKz1PLHAtPU8sbSs9TyxIbChzLGYscCxkLG0pfWlmKGkmJnIuaW5jbHVkZUVkZ2VzJiZoJiYoVDYocyxlLCJtaWQtc291cmNlIiksVDYocyxlLCJtaWQtdGFyZ2V0IiksVDYocyxlLCJzb3VyY2UiKSxUNihzLGUsInRhcmdldCIpKSxpKXt2YXIgUT1lLnBzdHlsZSgiZ2hvc3QiKS52YWx1ZT09PSJ5ZXMiO2lmKFEpe3ZhciBqPWUucHN0eWxlKCJnaG9zdC1vZmZzZXQteCIpLnBmVmFsdWUsbmU9ZS5wc3R5bGUoImdob3N0LW9mZnNldC15IikucGZWYWx1ZTtIbChzLHMueDEraixzLnkxK25lLHMueDIraixzLnkyK25lKX19dmFyIHRlPWwuYm9keUJvdW5kcz1sLmJvZHlCb3VuZHN8fHt9O1gwZSh0ZSxzKSxMNih0ZSx4KSxENih0ZSwxKSxpJiYoZj1zLngxLGQ9cy54MixwPXMueTEsbT1zLnkyLEhsKHMsZi1DLHAtQyxkK0MsbStDKSk7dmFyIGhlPWwub3ZlcmxheUJvdW5kcz1sLm92ZXJsYXlCb3VuZHN8fHt9O1gwZShoZSxzKSxMNihoZSx4KSxENihoZSwxKTt2YXIgbGU9bC5sYWJlbEJvdW5kcz1sLmxhYmVsQm91bmRzfHx7fTtsZS5hbGwhPW51bGw/dFhlKGxlLmFsbCk6bGUuYWxsPVlzKCksaSYmci5pbmNsdWRlTGFiZWxzJiYoci5pbmNsdWRlTWFpbkxhYmVscyYmdUIocyxlLG51bGwpLGgmJihyLmluY2x1ZGVTb3VyY2VMYWJlbHMmJnVCKHMsZSwic291cmNlIiksci5pbmNsdWRlVGFyZ2V0TGFiZWxzJiZ1QihzLGUsInRhcmdldCIpKSl9cmV0dXJuIHMueDE9aWwocy54MSkscy55MT1pbChzLnkxKSxzLngyPWlsKHMueDIpLHMueTI9aWwocy55Mikscy53PWlsKHMueDItcy54MSkscy5oPWlsKHMueTItcy55MSkscy53PjAmJnMuaD4wJiZUJiYoTDYocyx4KSxENihzLDEpKSxzfSwiYm91bmRpbmdCb3hJbXBsIiksSmdlPW8oZnVuY3Rpb24oZSl7dmFyIHI9MCxuPW8oZnVuY3Rpb24ocyl7cmV0dXJuKHM/MTowKTw8cisrfSwidGYiKSxpPTA7cmV0dXJuIGkrPW4oZS5pbmN1ZGVOb2RlcyksaSs9bihlLmluY2x1ZGVFZGdlcyksaSs9bihlLmluY2x1ZGVMYWJlbHMpLGkrPW4oZS5pbmNsdWRlTWFpbkxhYmVscyksaSs9bihlLmluY2x1ZGVTb3VyY2VMYWJlbHMpLGkrPW4oZS5pbmNsdWRlVGFyZ2V0TGFiZWxzKSxpKz1uKGUuaW5jbHVkZU92ZXJsYXlzKSxpKz1uKGUuaW5jbHVkZU91dGxpbmVzKSxpfSwiZ2V0S2V5IiksZTFlPW8oZnVuY3Rpb24oZSl7aWYoZS5pc0VkZ2UoKSl7dmFyIHI9ZS5zb3VyY2UoKS5wb3NpdGlvbigpLG49ZS50YXJnZXQoKS5wb3NpdGlvbigpLGk9byhmdW5jdGlvbihzKXtyZXR1cm4gTWF0aC5yb3VuZChzKX0sInIiKTtyZXR1cm4gd1llKFtpKHIueCksaShyLnkpLGkobi54KSxpKG4ueSldKX1lbHNlIHJldHVybiAwfSwiZ2V0Qm91bmRpbmdCb3hQb3NLZXkiKSxnbWU9byhmdW5jdGlvbihlLHIpe3ZhciBuPWUuX3ByaXZhdGUsaSxhPWUuaXNFZGdlKCkscz1yPT1udWxsP3ltZTpKZ2UociksbD1zPT09eW1lLHU9ZTFlKGUpLGg9bi5iYkNhY2hlUG9zS2V5PT09dSxmPXIudXNlQ2FjaGUmJmgsZD1vKGZ1bmN0aW9uKHkpe3JldHVybiB5Ll9wcml2YXRlLmJiQ2FjaGU9PW51bGx8fHkuX3ByaXZhdGUuc3R5bGVEaXJ0eX0sImlzRGlydHkiKSxwPSFmfHxkKGUpfHxhJiYoZChlLnNvdXJjZSgpKXx8ZChlLnRhcmdldCgpKSk7aWYocD8oaHx8ZS5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoZiksaT1QUWUoZSxsNCksbi5iYkNhY2hlPWksbi5iYkNhY2hlUG9zS2V5PXUpOmk9bi5iYkNhY2hlLCFsKXt2YXIgbT1lLmlzTm9kZSgpO2k9WXMoKSwoci5pbmNsdWRlTm9kZXMmJm18fHIuaW5jbHVkZUVkZ2VzJiYhbSkmJihyLmluY2x1ZGVPdmVybGF5cz9xcChpLG4ub3ZlcmxheUJvdW5kcyk6cXAoaSxuLmJvZHlCb3VuZHMpKSxyLmluY2x1ZGVMYWJlbHMmJihyLmluY2x1ZGVNYWluTGFiZWxzJiYoIWF8fHIuaW5jbHVkZVNvdXJjZUxhYmVscyYmci5pbmNsdWRlVGFyZ2V0TGFiZWxzKT9xcChpLG4ubGFiZWxCb3VuZHMuYWxsKTooci5pbmNsdWRlTWFpbkxhYmVscyYmcXAoaSxuLmxhYmVsQm91bmRzLm1haW5Sb3QpLHIuaW5jbHVkZVNvdXJjZUxhYmVscyYmcXAoaSxuLmxhYmVsQm91bmRzLnNvdXJjZVJvdCksci5pbmNsdWRlVGFyZ2V0TGFiZWxzJiZxcChpLG4ubGFiZWxCb3VuZHMudGFyZ2V0Um90KSkpLGkudz1pLngyLWkueDEsaS5oPWkueTItaS55MX1yZXR1cm4gaX0sImNhY2hlZEJvdW5kaW5nQm94SW1wbCIpLGw0PXtpbmNsdWRlTm9kZXM6ITAsaW5jbHVkZUVkZ2VzOiEwLGluY2x1ZGVMYWJlbHM6ITAsaW5jbHVkZU1haW5MYWJlbHM6ITAsaW5jbHVkZVNvdXJjZUxhYmVsczohMCxpbmNsdWRlVGFyZ2V0TGFiZWxzOiEwLGluY2x1ZGVPdmVybGF5czohMCxpbmNsdWRlVW5kZXJsYXlzOiEwLGluY2x1ZGVPdXRsaW5lczohMCx1c2VDYWNoZTohMH0seW1lPUpnZShsNCksdm1lPW9hKGw0KTtIZi5ib3VuZGluZ0JveD1mdW5jdGlvbih0KXt2YXIgZTtpZih0aGlzLmxlbmd0aD09PTEmJnRoaXNbMF0uX3ByaXZhdGUuYmJDYWNoZSE9bnVsbCYmIXRoaXNbMF0uX3ByaXZhdGUuc3R5bGVEaXJ0eSYmKHQ9PT12b2lkIDB8fHQudXNlQ2FjaGU9PT12b2lkIDB8fHQudXNlQ2FjaGU9PT0hMCkpdD09PXZvaWQgMD90PWw0OnQ9dm1lKHQpLGU9Z21lKHRoaXNbMF0sdCk7ZWxzZXtlPVlzKCksdD10fHxsNDt2YXIgcj12bWUodCksbj10aGlzLGk9bi5jeSgpLGE9aS5zdHlsZUVuYWJsZWQoKTtpZihhKWZvcih2YXIgcz0wO3M8bi5sZW5ndGg7cysrKXt2YXIgbD1uW3NdLHU9bC5fcHJpdmF0ZSxoPWUxZShsKSxmPXUuYmJDYWNoZVBvc0tleT09PWgsZD1yLnVzZUNhY2hlJiZmJiYhdS5zdHlsZURpcnR5O2wucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKGQpfXRoaXMudXBkYXRlQ29tcG91bmRCb3VuZHMoIXQudXNlQ2FjaGUpO2Zvcih2YXIgcD0wO3A8bi5sZW5ndGg7cCsrKXt2YXIgbT1uW3BdO3FwKGUsZ21lKG0scikpfX1yZXR1cm4gZS54MT1pbChlLngxKSxlLnkxPWlsKGUueTEpLGUueDI9aWwoZS54MiksZS55Mj1pbChlLnkyKSxlLnc9aWwoZS54Mi1lLngxKSxlLmg9aWwoZS55Mi1lLnkxKSxlfTtIZi5kaXJ0eUJvdW5kaW5nQm94Q2FjaGU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PHRoaXMubGVuZ3RoO3QrKyl7dmFyIGU9dGhpc1t0XS5fcHJpdmF0ZTtlLmJiQ2FjaGU9bnVsbCxlLmJiQ2FjaGVQb3NLZXk9bnVsbCxlLmJvZHlCb3VuZHM9bnVsbCxlLm92ZXJsYXlCb3VuZHM9bnVsbCxlLmxhYmVsQm91bmRzLmFsbD1udWxsLGUubGFiZWxCb3VuZHMuc291cmNlPW51bGwsZS5sYWJlbEJvdW5kcy50YXJnZXQ9bnVsbCxlLmxhYmVsQm91bmRzLm1haW49bnVsbCxlLmxhYmVsQm91bmRzLnNvdXJjZVJvdD1udWxsLGUubGFiZWxCb3VuZHMudGFyZ2V0Um90PW51bGwsZS5sYWJlbEJvdW5kcy5tYWluUm90PW51bGwsZS5hcnJvd0JvdW5kcy5zb3VyY2U9bnVsbCxlLmFycm93Qm91bmRzLnRhcmdldD1udWxsLGUuYXJyb3dCb3VuZHNbIm1pZC1zb3VyY2UiXT1udWxsLGUuYXJyb3dCb3VuZHNbIm1pZC10YXJnZXQiXT1udWxsfXJldHVybiB0aGlzLmVtaXRBbmROb3RpZnkoImJvdW5kcyIpLHRoaXN9O0hmLmJvdW5kaW5nQm94QXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5ub2RlcygpLHI9dGhpcy5jeSgpLG49ci5oYXNDb21wb3VuZE5vZGVzKCksaT1yLmNvbGxlY3Rpb24oKTtpZihuJiYoaT1lLmZpbHRlcihmdW5jdGlvbihoKXtyZXR1cm4gaC5pc1BhcmVudCgpfSksZT1lLm5vdChpKSksVXIodCkpe3ZhciBhPXQ7dD1vKGZ1bmN0aW9uKCl7cmV0dXJuIGF9LCJmbiIpfXZhciBzPW8oZnVuY3Rpb24oZixkKXtyZXR1cm4gZi5fcHJpdmF0ZS5iYkF0T2xkUG9zPXQoZixkKX0sInN0b3JlT2xkUG9zIiksbD1vKGZ1bmN0aW9uKGYpe3JldHVybiBmLl9wcml2YXRlLmJiQXRPbGRQb3N9LCJnZXRPbGRQb3MiKTtyLnN0YXJ0QmF0Y2goKSxlLmZvckVhY2gocykuc2lsZW50UG9zaXRpb25zKHQpLG4mJihpLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpLGkuZGlydHlCb3VuZGluZ0JveENhY2hlKCksaS51cGRhdGVDb21wb3VuZEJvdW5kcyghMCkpO3ZhciB1PWVYZSh0aGlzLmJvdW5kaW5nQm94KHt1c2VDYWNoZTohMX0pKTtyZXR1cm4gZS5zaWxlbnRQb3NpdGlvbnMobCksbiYmKGkuZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlKCksaS5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKSxpLnVwZGF0ZUNvbXBvdW5kQm91bmRzKCEwKSksci5lbmRCYXRjaCgpLHV9O2V5LmJvdW5kaW5nYm94PWV5LmJiPWV5LmJvdW5kaW5nQm94O2V5LnJlbmRlcmVkQm91bmRpbmdib3g9ZXkucmVuZGVyZWRCb3VuZGluZ0JveDtCUWU9SGY7WGI9ZzQ9e307dDFlPW8oZnVuY3Rpb24oZSl7ZS51cHBlcmNhc2VOYW1lPUcwZShlLm5hbWUpLGUuYXV0b05hbWU9ImF1dG8iK2UudXBwZXJjYXNlTmFtZSxlLmxhYmVsTmFtZT0ibGFiZWwiK2UudXBwZXJjYXNlTmFtZSxlLm91dGVyTmFtZT0ib3V0ZXIiK2UudXBwZXJjYXNlTmFtZSxlLnVwcGVyY2FzZU91dGVyTmFtZT1HMGUoZS5vdXRlck5hbWUpLFhiW2UubmFtZV09byhmdW5jdGlvbigpe3ZhciBuPXRoaXNbMF0saT1uLl9wcml2YXRlLGE9aS5jeSxzPWEuX3ByaXZhdGUuc3R5bGVFbmFibGVkO2lmKG4paWYocyl7aWYobi5pc1BhcmVudCgpKXJldHVybiBuLnVwZGF0ZUNvbXBvdW5kQm91bmRzKCksaVtlLmF1dG9OYW1lXXx8MDt2YXIgbD1uLnBzdHlsZShlLm5hbWUpO3N3aXRjaChsLnN0clZhbHVlKXtjYXNlImxhYmVsIjpyZXR1cm4gbi5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoKSxpLnJzdHlsZVtlLmxhYmVsTmFtZV18fDA7ZGVmYXVsdDpyZXR1cm4gbC5wZlZhbHVlfX1lbHNlIHJldHVybiAxfSwiZGltSW1wbCIpLFhiWyJvdXRlciIrZS51cHBlcmNhc2VOYW1lXT1vKGZ1bmN0aW9uKCl7dmFyIG49dGhpc1swXSxpPW4uX3ByaXZhdGUsYT1pLmN5LHM9YS5fcHJpdmF0ZS5zdHlsZUVuYWJsZWQ7aWYobilpZihzKXt2YXIgbD1uW2UubmFtZV0oKSx1PW4ucHN0eWxlKCJib3JkZXItd2lkdGgiKS5wZlZhbHVlLGg9MipuLnBhZGRpbmcoKTtyZXR1cm4gbCt1K2h9ZWxzZSByZXR1cm4gMX0sIm91dGVyRGltSW1wbCIpLFhiWyJyZW5kZXJlZCIrZS51cHBlcmNhc2VOYW1lXT1vKGZ1bmN0aW9uKCl7dmFyIG49dGhpc1swXTtpZihuKXt2YXIgaT1uW2UubmFtZV0oKTtyZXR1cm4gaSp0aGlzLmN5KCkuem9vbSgpfX0sInJlbmRlcmVkRGltSW1wbCIpLFhiWyJyZW5kZXJlZCIrZS51cHBlcmNhc2VPdXRlck5hbWVdPW8oZnVuY3Rpb24oKXt2YXIgbj10aGlzWzBdO2lmKG4pe3ZhciBpPW5bZS5vdXRlck5hbWVdKCk7cmV0dXJuIGkqdGhpcy5jeSgpLnpvb20oKX19LCJyZW5kZXJlZE91dGVyRGltSW1wbCIpfSwiZGVmaW5lRGltRm5zIik7dDFlKHtuYW1lOiJ3aWR0aCJ9KTt0MWUoe25hbWU6ImhlaWdodCJ9KTtnNC5wYWRkaW5nPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpc1swXSxlPXQuX3ByaXZhdGU7cmV0dXJuIHQuaXNQYXJlbnQoKT8odC51cGRhdGVDb21wb3VuZEJvdW5kcygpLGUuYXV0b1BhZGRpbmchPT12b2lkIDA/ZS5hdXRvUGFkZGluZzp0LnBzdHlsZSgicGFkZGluZyIpLnBmVmFsdWUpOnQucHN0eWxlKCJwYWRkaW5nIikucGZWYWx1ZX07ZzQucGFkZGVkSGVpZ2h0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpc1swXTtyZXR1cm4gdC5oZWlnaHQoKSsyKnQucGFkZGluZygpfTtnNC5wYWRkZWRXaWR0aD1mdW5jdGlvbigpe3ZhciB0PXRoaXNbMF07cmV0dXJuIHQud2lkdGgoKSsyKnQucGFkZGluZygpfTtGUWU9ZzQsJFFlPW8oZnVuY3Rpb24oZSxyKXtpZihlLmlzRWRnZSgpKXJldHVybiByKGUpfSwiaWZFZGdlIikselFlPW8oZnVuY3Rpb24oZSxyKXtpZihlLmlzRWRnZSgpKXt2YXIgbj1lLmN5KCk7cmV0dXJuIEo2KHIoZSksbi56b29tKCksbi5wYW4oKSl9fSwiaWZFZGdlUmVuZGVyZWRQb3NpdGlvbiIpLEdRZT1vKGZ1bmN0aW9uKGUscil7aWYoZS5pc0VkZ2UoKSl7dmFyIG49ZS5jeSgpLGk9bi5wYW4oKSxhPW4uem9vbSgpO3JldHVybiByKGUpLm1hcChmdW5jdGlvbihzKXtyZXR1cm4gSjYocyxhLGkpfSl9fSwiaWZFZGdlUmVuZGVyZWRQb3NpdGlvbnMiKSxWUWU9byhmdW5jdGlvbihlKXtyZXR1cm4gZS5yZW5kZXJlcigpLmdldENvbnRyb2xQb2ludHMoZSl9LCJjb250cm9sUG9pbnRzIiksVVFlPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVuZGVyZXIoKS5nZXRTZWdtZW50UG9pbnRzKGUpfSwic2VnbWVudFBvaW50cyIpLEhRZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlbmRlcmVyKCkuZ2V0U291cmNlRW5kcG9pbnQoZSl9LCJzb3VyY2VFbmRwb2ludCIpLFdRZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlbmRlcmVyKCkuZ2V0VGFyZ2V0RW5kcG9pbnQoZSl9LCJ0YXJnZXRFbmRwb2ludCIpLHFRZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlbmRlcmVyKCkuZ2V0RWRnZU1pZHBvaW50KGUpfSwibWlkcG9pbnQiKSx4bWU9e2NvbnRyb2xQb2ludHM6e2dldDpWUWUsbXVsdDohMH0sc2VnbWVudFBvaW50czp7Z2V0OlVRZSxtdWx0OiEwfSxzb3VyY2VFbmRwb2ludDp7Z2V0OkhRZX0sdGFyZ2V0RW5kcG9pbnQ6e2dldDpXUWV9LG1pZHBvaW50OntnZXQ6cVFlfX0sWVFlPW8oZnVuY3Rpb24oZSl7cmV0dXJuInJlbmRlcmVkIitlWzBdLnRvVXBwZXJDYXNlKCkrZS5zdWJzdHIoMSl9LCJyZW5kZXJlZE5hbWUiKSxYUWU9T2JqZWN0LmtleXMoeG1lKS5yZWR1Y2UoZnVuY3Rpb24odCxlKXt2YXIgcj14bWVbZV0sbj1ZUWUoZSk7cmV0dXJuIHRbZV09ZnVuY3Rpb24oKXtyZXR1cm4gJFFlKHRoaXMsci5nZXQpfSxyLm11bHQ/dFtuXT1mdW5jdGlvbigpe3JldHVybiBHUWUodGhpcyxyLmdldCl9OnRbbl09ZnVuY3Rpb24oKXtyZXR1cm4gelFlKHRoaXMsci5nZXQpfSx0fSx7fSksalFlPWlyKHt9LElRZSxCUWUsRlFlLFhRZSk7cjFlPW8oZnVuY3Rpb24oZSxyKXt0aGlzLnJlY3ljbGUoZSxyKX0sIkV2ZW50Iik7byhHYiwicmV0dXJuRmFsc2UiKTtvKHc2LCJyZXR1cm5UcnVlIik7cjFlLnByb3RvdHlwZT17aW5zdGFuY2VTdHJpbmc6byhmdW5jdGlvbigpe3JldHVybiJldmVudCJ9LCJpbnN0YW5jZVN0cmluZyIpLHJlY3ljbGU6byhmdW5jdGlvbihlLHIpe2lmKHRoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD10aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1HYixlIT1udWxsJiZlLnByZXZlbnREZWZhdWx0Pyh0aGlzLnR5cGU9ZS50eXBlLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWUuZGVmYXVsdFByZXZlbnRlZD93NjpHYik6ZSE9bnVsbCYmZS50eXBlP3I9ZTp0aGlzLnR5cGU9ZSxyIT1udWxsJiYodGhpcy5vcmlnaW5hbEV2ZW50PXIub3JpZ2luYWxFdmVudCx0aGlzLnR5cGU9ci50eXBlIT1udWxsP3IudHlwZTp0aGlzLnR5cGUsdGhpcy5jeT1yLmN5LHRoaXMudGFyZ2V0PXIudGFyZ2V0LHRoaXMucG9zaXRpb249ci5wb3NpdGlvbix0aGlzLnJlbmRlcmVkUG9zaXRpb249ci5yZW5kZXJlZFBvc2l0aW9uLHRoaXMubmFtZXNwYWNlPXIubmFtZXNwYWNlLHRoaXMubGF5b3V0PXIubGF5b3V0KSx0aGlzLmN5IT1udWxsJiZ0aGlzLnBvc2l0aW9uIT1udWxsJiZ0aGlzLnJlbmRlcmVkUG9zaXRpb249PW51bGwpe3ZhciBuPXRoaXMucG9zaXRpb24saT10aGlzLmN5Lnpvb20oKSxhPXRoaXMuY3kucGFuKCk7dGhpcy5yZW5kZXJlZFBvc2l0aW9uPXt4Om4ueCppK2EueCx5Om4ueSppK2EueX19dGhpcy50aW1lU3RhbXA9ZSYmZS50aW1lU3RhbXB8fERhdGUubm93KCl9LCJyZWN5Y2xlIikscHJldmVudERlZmF1bHQ6byhmdW5jdGlvbigpe3RoaXMuaXNEZWZhdWx0UHJldmVudGVkPXc2O3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudDtlJiZlLnByZXZlbnREZWZhdWx0JiZlLnByZXZlbnREZWZhdWx0KCl9LCJwcmV2ZW50RGVmYXVsdCIpLHN0b3BQcm9wYWdhdGlvbjpvKGZ1bmN0aW9uKCl7dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD13Njt2YXIgZT10aGlzLm9yaWdpbmFsRXZlbnQ7ZSYmZS5zdG9wUHJvcGFnYXRpb24mJmUuc3RvcFByb3BhZ2F0aW9uKCl9LCJzdG9wUHJvcGFnYXRpb24iKSxzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246byhmdW5jdGlvbigpe3RoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9dzYsdGhpcy5zdG9wUHJvcGFnYXRpb24oKX0sInN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiIpLGlzRGVmYXVsdFByZXZlbnRlZDpHYixpc1Byb3BhZ2F0aW9uU3RvcHBlZDpHYixpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDpHYn07bjFlPS9eKFteLl0rKShcLig/OlteLl0rKSk/JC8sS1FlPSIuKiIsaTFlPXtxdWFsaWZpZXJDb21wYXJlOm8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gZT09PXJ9LCJxdWFsaWZpZXJDb21wYXJlIiksZXZlbnRNYXRjaGVzOm8oZnVuY3Rpb24oKXtyZXR1cm4hMH0sImV2ZW50TWF0Y2hlcyIpLGFkZEV2ZW50RmllbGRzOm8oZnVuY3Rpb24oKXt9LCJhZGRFdmVudEZpZWxkcyIpLGNhbGxiYWNrQ29udGV4dDpvKGZ1bmN0aW9uKGUpe3JldHVybiBlfSwiY2FsbGJhY2tDb250ZXh0IiksYmVmb3JlRW1pdDpvKGZ1bmN0aW9uKCl7fSwiYmVmb3JlRW1pdCIpLGFmdGVyRW1pdDpvKGZ1bmN0aW9uKCl7fSwiYWZ0ZXJFbWl0IiksYnViYmxlOm8oZnVuY3Rpb24oKXtyZXR1cm4hMX0sImJ1YmJsZSIpLHBhcmVudDpvKGZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LCJwYXJlbnQiKSxjb250ZXh0Om51bGx9LGJtZT1PYmplY3Qua2V5cyhpMWUpLFFRZT17fTtvKGFDLCJFbWl0dGVyIik7R2Y9YUMucHJvdG90eXBlLGExZT1vKGZ1bmN0aW9uKGUscixuLGksYSxzLGwpe2xpKGkpJiYoYT1pLGk9bnVsbCksbCYmKHM9PW51bGw/cz1sOnM9aXIoe30scyxsKSk7Zm9yKHZhciB1PUVuKG4pP246bi5zcGxpdCgvXHMrLyksaD0wO2g8dS5sZW5ndGg7aCsrKXt2YXIgZj11W2hdO2lmKCFQZihmKSl7dmFyIGQ9Zi5tYXRjaChuMWUpO2lmKGQpe3ZhciBwPWRbMV0sbT1kWzJdP2RbMl06bnVsbCxnPXIoZSxmLHAsbSxpLGEscyk7aWYoZz09PSExKWJyZWFrfX19fSwiZm9yRWFjaEV2ZW50IiksVG1lPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gZS5hZGRFdmVudEZpZWxkcyhlLmNvbnRleHQsciksbmV3IHIxZShyLnR5cGUscil9LCJtYWtlRXZlbnRPYmoiKSxaUWU9byhmdW5jdGlvbihlLHIsbil7aWYoeHFlKG4pKXtyKGUsbik7cmV0dXJufWVsc2UgaWYoVXIobikpe3IoZSxUbWUoZSxuKSk7cmV0dXJufWZvcih2YXIgaT1FbihuKT9uOm4uc3BsaXQoL1xzKy8pLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIHM9aVthXTtpZighUGYocykpe3ZhciBsPXMubWF0Y2gobjFlKTtpZihsKXt2YXIgdT1sWzFdLGg9bFsyXT9sWzJdOm51bGwsZj1UbWUoZSx7dHlwZTp1LG5hbWVzcGFjZTpoLHRhcmdldDplLmNvbnRleHR9KTtyKGUsZil9fX19LCJmb3JFYWNoRXZlbnRPYmoiKTtHZi5vbj1HZi5hZGRMaXN0ZW5lcj1mdW5jdGlvbih0LGUscixuLGkpe3JldHVybiBhMWUodGhpcyxmdW5jdGlvbihhLHMsbCx1LGgsZixkKXtsaShmKSYmYS5saXN0ZW5lcnMucHVzaCh7ZXZlbnQ6cyxjYWxsYmFjazpmLHR5cGU6bCxuYW1lc3BhY2U6dSxxdWFsaWZpZXI6aCxjb25mOmR9KX0sdCxlLHIsbixpKSx0aGlzfTtHZi5vbmU9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRoaXMub24odCxlLHIsbix7b25lOiEwfSl9O0dmLnJlbW92ZUxpc3RlbmVyPUdmLm9mZj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzO3RoaXMuZW1pdHRpbmchPT0wJiYodGhpcy5saXN0ZW5lcnM9QVllKHRoaXMubGlzdGVuZXJzKSk7Zm9yKHZhciBhPXRoaXMubGlzdGVuZXJzLHM9byhmdW5jdGlvbihoKXt2YXIgZj1hW2hdO2ExZShpLGZ1bmN0aW9uKGQscCxtLGcseSx2KXtpZigoZi50eXBlPT09bXx8dD09PSIqIikmJighZyYmZi5uYW1lc3BhY2UhPT0iLioifHxmLm5hbWVzcGFjZT09PWcpJiYoIXl8fGQucXVhbGlmaWVyQ29tcGFyZShmLnF1YWxpZmllcix5KSkmJighdnx8Zi5jYWxsYmFjaz09PXYpKXJldHVybiBhLnNwbGljZShoLDEpLCExfSx0LGUscixuKX0sIl9sb29wIiksbD1hLmxlbmd0aC0xO2w+PTA7bC0tKXMobCk7cmV0dXJuIHRoaXN9O0dmLnJlbW92ZUFsbExpc3RlbmVycz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlbW92ZUxpc3RlbmVyKCIqIil9O0dmLmVtaXQ9R2YudHJpZ2dlcj1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5saXN0ZW5lcnMsaT1uLmxlbmd0aDtyZXR1cm4gdGhpcy5lbWl0dGluZysrLEVuKGUpfHwoZT1bZV0pLFpRZSh0aGlzLGZ1bmN0aW9uKGEscyl7ciE9bnVsbCYmKG49W3tldmVudDpzLmV2ZW50LHR5cGU6cy50eXBlLG5hbWVzcGFjZTpzLm5hbWVzcGFjZSxjYWxsYmFjazpyfV0saT1uLmxlbmd0aCk7Zm9yKHZhciBsPW8oZnVuY3Rpb24oZil7dmFyIGQ9bltmXTtpZihkLnR5cGU9PT1zLnR5cGUmJighZC5uYW1lc3BhY2V8fGQubmFtZXNwYWNlPT09cy5uYW1lc3BhY2V8fGQubmFtZXNwYWNlPT09S1FlKSYmYS5ldmVudE1hdGNoZXMoYS5jb250ZXh0LGQscykpe3ZhciBwPVtzXTtlIT1udWxsJiZEWWUocCxlKSxhLmJlZm9yZUVtaXQoYS5jb250ZXh0LGQscyksZC5jb25mJiZkLmNvbmYub25lJiYoYS5saXN0ZW5lcnM9YS5saXN0ZW5lcnMuZmlsdGVyKGZ1bmN0aW9uKHkpe3JldHVybiB5IT09ZH0pKTt2YXIgbT1hLmNhbGxiYWNrQ29udGV4dChhLmNvbnRleHQsZCxzKSxnPWQuY2FsbGJhY2suYXBwbHkobSxwKTthLmFmdGVyRW1pdChhLmNvbnRleHQsZCxzKSxnPT09ITEmJihzLnN0b3BQcm9wYWdhdGlvbigpLHMucHJldmVudERlZmF1bHQoKSl9fSwiX2xvb3AyIiksdT0wO3U8aTt1KyspbCh1KTthLmJ1YmJsZShhLmNvbnRleHQpJiYhcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpJiZhLnBhcmVudChhLmNvbnRleHQpLmVtaXQocyxlKX0sdCksdGhpcy5lbWl0dGluZy0tLHRoaXN9O0pRZT17cXVhbGlmaWVyQ29tcGFyZTpvKGZ1bmN0aW9uKGUscil7cmV0dXJuIGU9PW51bGx8fHI9PW51bGw/ZT09bnVsbCYmcj09bnVsbDplLnNhbWVUZXh0KHIpfSwicXVhbGlmaWVyQ29tcGFyZSIpLGV2ZW50TWF0Y2hlczpvKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1yLnF1YWxpZmllcjtyZXR1cm4gaSE9bnVsbD9lIT09bi50YXJnZXQmJmY0KG4udGFyZ2V0KSYmaS5tYXRjaGVzKG4udGFyZ2V0KTohMH0sImV2ZW50TWF0Y2hlcyIpLGFkZEV2ZW50RmllbGRzOm8oZnVuY3Rpb24oZSxyKXtyLmN5PWUuY3koKSxyLnRhcmdldD1lfSwiYWRkRXZlbnRGaWVsZHMiKSxjYWxsYmFja0NvbnRleHQ6byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIHIucXVhbGlmaWVyIT1udWxsP24udGFyZ2V0OmV9LCJjYWxsYmFja0NvbnRleHQiKSxiZWZvcmVFbWl0Om8oZnVuY3Rpb24oZSxyKXtyLmNvbmYmJnIuY29uZi5vbmNlJiZyLmNvbmYub25jZUNvbGxlY3Rpb24ucmVtb3ZlTGlzdGVuZXIoci5ldmVudCxyLnF1YWxpZmllcixyLmNhbGxiYWNrKX0sImJlZm9yZUVtaXQiKSxidWJibGU6byhmdW5jdGlvbigpe3JldHVybiEwfSwiYnViYmxlIikscGFyZW50Om8oZnVuY3Rpb24oZSl7cmV0dXJuIGUuaXNDaGlsZCgpP2UucGFyZW50KCk6ZS5jeSgpfSwicGFyZW50Iil9LGs2PW8oZnVuY3Rpb24oZSl7cmV0dXJuIFp0KGUpP25ldyAkZihlKTplfSwiYXJnU2VsZWN0b3IiKSxzMWU9e2NyZWF0ZUVtaXR0ZXI6byhmdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8dGhpcy5sZW5ndGg7ZSsrKXt2YXIgcj10aGlzW2VdLG49ci5fcHJpdmF0ZTtuLmVtaXR0ZXJ8fChuLmVtaXR0ZXI9bmV3IGFDKEpRZSxyKSl9cmV0dXJuIHRoaXN9LCJjcmVhdGVFbWl0dGVyIiksZW1pdHRlcjpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuZW1pdHRlcn0sImVtaXR0ZXIiKSxvbjpvKGZ1bmN0aW9uKGUscixuKXtmb3IodmFyIGk9azYociksYT0wO2E8dGhpcy5sZW5ndGg7YSsrKXt2YXIgcz10aGlzW2FdO3MuZW1pdHRlcigpLm9uKGUsaSxuKX1yZXR1cm4gdGhpc30sIm9uIikscmVtb3ZlTGlzdGVuZXI6byhmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPWs2KHIpLGE9MDthPHRoaXMubGVuZ3RoO2ErKyl7dmFyIHM9dGhpc1thXTtzLmVtaXR0ZXIoKS5yZW1vdmVMaXN0ZW5lcihlLGksbil9cmV0dXJuIHRoaXN9LCJyZW1vdmVMaXN0ZW5lciIpLHJlbW92ZUFsbExpc3RlbmVyczpvKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aDtlKyspe3ZhciByPXRoaXNbZV07ci5lbWl0dGVyKCkucmVtb3ZlQWxsTGlzdGVuZXJzKCl9cmV0dXJuIHRoaXN9LCJyZW1vdmVBbGxMaXN0ZW5lcnMiKSxvbmU6byhmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPWs2KHIpLGE9MDthPHRoaXMubGVuZ3RoO2ErKyl7dmFyIHM9dGhpc1thXTtzLmVtaXR0ZXIoKS5vbmUoZSxpLG4pfXJldHVybiB0aGlzfSwib25lIiksb25jZTpvKGZ1bmN0aW9uKGUscixuKXtmb3IodmFyIGk9azYociksYT0wO2E8dGhpcy5sZW5ndGg7YSsrKXt2YXIgcz10aGlzW2FdO3MuZW1pdHRlcigpLm9uKGUsaSxuLHtvbmNlOiEwLG9uY2VDb2xsZWN0aW9uOnRoaXN9KX19LCJvbmNlIiksZW1pdDpvKGZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPTA7bjx0aGlzLmxlbmd0aDtuKyspe3ZhciBpPXRoaXNbbl07aS5lbWl0dGVyKCkuZW1pdChlLHIpfXJldHVybiB0aGlzfSwiZW1pdCIpLGVtaXRBbmROb3RpZnk6byhmdW5jdGlvbihlLHIpe2lmKHRoaXMubGVuZ3RoIT09MClyZXR1cm4gdGhpcy5jeSgpLm5vdGlmeShlLHRoaXMpLHRoaXMuZW1pdChlLHIpLHRoaXN9LCJlbWl0QW5kTm90aWZ5Iil9O3VuLmV2ZW50QWxpYXNlc09uKHMxZSk7bzFlPXtub2RlczpvKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbihyKXtyZXR1cm4gci5pc05vZGUoKX0pLmZpbHRlcihlKX0sIm5vZGVzIiksZWRnZXM6byhmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24ocil7cmV0dXJuIHIuaXNFZGdlKCl9KS5maWx0ZXIoZSl9LCJlZGdlcyIpLGJ5R3JvdXA6byhmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLnNwYXduKCkscj10aGlzLnNwYXduKCksbj0wO248dGhpcy5sZW5ndGg7bisrKXt2YXIgaT10aGlzW25dO2kuaXNOb2RlKCk/ZS5wdXNoKGkpOnIucHVzaChpKX1yZXR1cm57bm9kZXM6ZSxlZGdlczpyfX0sImJ5R3JvdXAiKSxmaWx0ZXI6byhmdW5jdGlvbihlLHIpe2lmKGU9PT12b2lkIDApcmV0dXJuIHRoaXM7aWYoWnQoZSl8fHhvKGUpKXJldHVybiBuZXcgJGYoZSkuZmlsdGVyKHRoaXMpO2lmKGxpKGUpKXtmb3IodmFyIG49dGhpcy5zcGF3bigpLGk9dGhpcyxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBzPWlbYV0sbD1yP2UuYXBwbHkocixbcyxhLGldKTplKHMsYSxpKTtsJiZuLnB1c2gocyl9cmV0dXJuIG59cmV0dXJuIHRoaXMuc3Bhd24oKX0sImZpbHRlciIpLG5vdDpvKGZ1bmN0aW9uKGUpe2lmKGUpe1p0KGUpJiYoZT10aGlzLmZpbHRlcihlKSk7Zm9yKHZhciByPXRoaXMuc3Bhd24oKSxuPTA7bjx0aGlzLmxlbmd0aDtuKyspe3ZhciBpPXRoaXNbbl0sYT1lLmhhcyhpKTthfHxyLnB1c2goaSl9cmV0dXJuIHJ9ZWxzZSByZXR1cm4gdGhpc30sIm5vdCIpLGFic29sdXRlQ29tcGxlbWVudDpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jeSgpO3JldHVybiBlLm11dGFibGVFbGVtZW50cygpLm5vdCh0aGlzKX0sImFic29sdXRlQ29tcGxlbWVudCIpLGludGVyc2VjdDpvKGZ1bmN0aW9uKGUpe2lmKFp0KGUpKXt2YXIgcj1lO3JldHVybiB0aGlzLmZpbHRlcihyKX1mb3IodmFyIG49dGhpcy5zcGF3bigpLGk9dGhpcyxhPWUscz10aGlzLmxlbmd0aDxlLmxlbmd0aCxsPXM/aTphLHU9cz9hOmksaD0wO2g8bC5sZW5ndGg7aCsrKXt2YXIgZj1sW2hdO3UuaGFzKGYpJiZuLnB1c2goZil9cmV0dXJuIG59LCJpbnRlcnNlY3QiKSx4b3I6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLl9wcml2YXRlLmN5O1p0KGUpJiYoZT1yLiQoZSkpO3ZhciBuPXRoaXMuc3Bhd24oKSxpPXRoaXMsYT1lLHM9byhmdW5jdGlvbih1LGgpe2Zvcih2YXIgZj0wO2Y8dS5sZW5ndGg7ZisrKXt2YXIgZD11W2ZdLHA9ZC5fcHJpdmF0ZS5kYXRhLmlkLG09aC5oYXNFbGVtZW50V2l0aElkKHApO218fG4ucHVzaChkKX19LCJhZGQiKTtyZXR1cm4gcyhpLGEpLHMoYSxpKSxufSwieG9yIiksZGlmZjpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuX3ByaXZhdGUuY3k7WnQoZSkmJihlPXIuJChlKSk7dmFyIG49dGhpcy5zcGF3bigpLGk9dGhpcy5zcGF3bigpLGE9dGhpcy5zcGF3bigpLHM9dGhpcyxsPWUsdT1vKGZ1bmN0aW9uKGYsZCxwKXtmb3IodmFyIG09MDttPGYubGVuZ3RoO20rKyl7dmFyIGc9ZlttXSx5PWcuX3ByaXZhdGUuZGF0YS5pZCx2PWQuaGFzRWxlbWVudFdpdGhJZCh5KTt2P2EubWVyZ2UoZyk6cC5wdXNoKGcpfX0sImFkZCIpO3JldHVybiB1KHMsbCxuKSx1KGwscyxpKSx7bGVmdDpuLHJpZ2h0OmksYm90aDphfX0sImRpZmYiKSxhZGQ6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLl9wcml2YXRlLmN5O2lmKCFlKXJldHVybiB0aGlzO2lmKFp0KGUpKXt2YXIgbj1lO2U9ci5tdXRhYmxlRWxlbWVudHMoKS5maWx0ZXIobil9Zm9yKHZhciBpPXRoaXMuc3Bhd25TZWxmKCksYT0wO2E8ZS5sZW5ndGg7YSsrKXt2YXIgcz1lW2FdLGw9IXRoaXMuaGFzKHMpO2wmJmkucHVzaChzKX1yZXR1cm4gaX0sImFkZCIpLG1lcmdlOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fcHJpdmF0ZSxuPXIuY3k7aWYoIWUpcmV0dXJuIHRoaXM7aWYoZSYmWnQoZSkpe3ZhciBpPWU7ZT1uLm11dGFibGVFbGVtZW50cygpLmZpbHRlcihpKX1mb3IodmFyIGE9ci5tYXAscz0wO3M8ZS5sZW5ndGg7cysrKXt2YXIgbD1lW3NdLHU9bC5fcHJpdmF0ZS5kYXRhLmlkLGg9IWEuaGFzKHUpO2lmKGgpe3ZhciBmPXRoaXMubGVuZ3RoKys7dGhpc1tmXT1sLGEuc2V0KHUse2VsZTpsLGluZGV4OmZ9KX19cmV0dXJuIHRoaXN9LCJtZXJnZSIpLHVubWVyZ2VBdDpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXNbZV0sbj1yLmlkKCksaT10aGlzLl9wcml2YXRlLGE9aS5tYXA7dGhpc1tlXT12b2lkIDAsYS5kZWxldGUobik7dmFyIHM9ZT09PXRoaXMubGVuZ3RoLTE7aWYodGhpcy5sZW5ndGg+MSYmIXMpe3ZhciBsPXRoaXMubGVuZ3RoLTEsdT10aGlzW2xdLGg9dS5fcHJpdmF0ZS5kYXRhLmlkO3RoaXNbbF09dm9pZCAwLHRoaXNbZV09dSxhLnNldChoLHtlbGU6dSxpbmRleDplfSl9cmV0dXJuIHRoaXMubGVuZ3RoLS0sdGhpc30sInVubWVyZ2VBdCIpLHVubWVyZ2VPbmU6byhmdW5jdGlvbihlKXtlPWVbMF07dmFyIHI9dGhpcy5fcHJpdmF0ZSxuPWUuX3ByaXZhdGUuZGF0YS5pZCxpPXIubWFwLGE9aS5nZXQobik7aWYoIWEpcmV0dXJuIHRoaXM7dmFyIHM9YS5pbmRleDtyZXR1cm4gdGhpcy51bm1lcmdlQXQocyksdGhpc30sInVubWVyZ2VPbmUiKSx1bm1lcmdlOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fcHJpdmF0ZS5jeTtpZighZSlyZXR1cm4gdGhpcztpZihlJiZadChlKSl7dmFyIG49ZTtlPXIubXV0YWJsZUVsZW1lbnRzKCkuZmlsdGVyKG4pfWZvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKXRoaXMudW5tZXJnZU9uZShlW2ldKTtyZXR1cm4gdGhpc30sInVubWVyZ2UiKSx1bm1lcmdlQnk6byhmdW5jdGlvbihlKXtmb3IodmFyIHI9dGhpcy5sZW5ndGgtMTtyPj0wO3ItLSl7dmFyIG49dGhpc1tyXTtlKG4pJiZ0aGlzLnVubWVyZ2VBdChyKX1yZXR1cm4gdGhpc30sInVubWVyZ2VCeSIpLG1hcDpvKGZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPVtdLGk9dGhpcyxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBzPWlbYV0sbD1yP2UuYXBwbHkocixbcyxhLGldKTplKHMsYSxpKTtuLnB1c2gobCl9cmV0dXJuIG59LCJtYXAiKSxyZWR1Y2U6byhmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj1yLGk9dGhpcyxhPTA7YTxpLmxlbmd0aDthKyspbj1lKG4saVthXSxhLGkpO3JldHVybiBufSwicmVkdWNlIiksbWF4Om8oZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49LTEvMCxpLGE9dGhpcyxzPTA7czxhLmxlbmd0aDtzKyspe3ZhciBsPWFbc10sdT1yP2UuYXBwbHkocixbbCxzLGFdKTplKGwscyxhKTt1Pm4mJihuPXUsaT1sKX1yZXR1cm57dmFsdWU6bixlbGU6aX19LCJtYXgiKSxtaW46byhmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj0xLzAsaSxhPXRoaXMscz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgbD1hW3NdLHU9cj9lLmFwcGx5KHIsW2wscyxhXSk6ZShsLHMsYSk7dTxuJiYobj11LGk9bCl9cmV0dXJue3ZhbHVlOm4sZWxlOml9fSwibWluIil9LFFyPW8xZTtRci51PVFyWyJ8Il09UXJbIisiXT1Rci51bmlvbj1Rci5vcj1Rci5hZGQ7UXJbIlxcIl09UXJbIiEiXT1RclsiLSJdPVFyLmRpZmZlcmVuY2U9UXIucmVsYXRpdmVDb21wbGVtZW50PVFyLnN1YnRyYWN0PVFyLm5vdDtRci5uPVFyWyImIl09UXJbIi4iXT1Rci5hbmQ9UXIuaW50ZXJzZWN0aW9uPVFyLmludGVyc2VjdDtRclsiXiJdPVFyWyIoKykiXT1RclsiKC0pIl09UXIuc3ltbWV0cmljRGlmZmVyZW5jZT1Rci5zeW1kaWZmPVFyLnhvcjtRci5mbkZpbHRlcj1Rci5maWx0ZXJGbj1Rci5zdGRGaWx0ZXI9UXIuZmlsdGVyO1FyLmNvbXBsZW1lbnQ9UXIuYWJzY29tcD1Rci5hYnNvbHV0ZUNvbXBsZW1lbnQ7ZVplPXtpc05vZGU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmdyb3VwKCk9PT0ibm9kZXMifSwiaXNOb2RlIiksaXNFZGdlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncm91cCgpPT09ImVkZ2VzIn0sImlzRWRnZSIpLGlzTG9vcDpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNFZGdlKCkmJnRoaXMuc291cmNlKClbMF09PT10aGlzLnRhcmdldCgpWzBdfSwiaXNMb29wIiksaXNTaW1wbGU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzRWRnZSgpJiZ0aGlzLnNvdXJjZSgpWzBdIT09dGhpcy50YXJnZXQoKVswXX0sImlzU2ltcGxlIiksZ3JvdXA6byhmdW5jdGlvbigpe3ZhciBlPXRoaXNbMF07aWYoZSlyZXR1cm4gZS5fcHJpdmF0ZS5ncm91cH0sImdyb3VwIil9LGwxZT1vKGZ1bmN0aW9uKGUscil7dmFyIG49ZS5jeSgpLGk9bi5oYXNDb21wb3VuZE5vZGVzKCk7ZnVuY3Rpb24gYShmKXt2YXIgZD1mLnBzdHlsZSgiei1jb21wb3VuZC1kZXB0aCIpO3JldHVybiBkLnZhbHVlPT09ImF1dG8iP2k/Zi56RGVwdGgoKTowOmQudmFsdWU9PT0iYm90dG9tIj8tMTpkLnZhbHVlPT09InRvcCI/JEI6MH1vKGEsImdldERlcHRoIik7dmFyIHM9YShlKS1hKHIpO2lmKHMhPT0wKXJldHVybiBzO2Z1bmN0aW9uIGwoZil7dmFyIGQ9Zi5wc3R5bGUoInotaW5kZXgtY29tcGFyZSIpO3JldHVybiBkLnZhbHVlPT09ImF1dG8iJiZmLmlzTm9kZSgpPzE6MH1vKGwsImdldEVsZURlcHRoIik7dmFyIHU9bChlKS1sKHIpO2lmKHUhPT0wKXJldHVybiB1O3ZhciBoPWUucHN0eWxlKCJ6LWluZGV4IikudmFsdWUtci5wc3R5bGUoInotaW5kZXgiKS52YWx1ZTtyZXR1cm4gaCE9PTA/aDplLnBvb2xJbmRleCgpLXIucG9vbEluZGV4KCl9LCJ6SW5kZXhTb3J0IiksSDY9e2ZvckVhY2g6byhmdW5jdGlvbihlLHIpe2lmKGxpKGUpKWZvcih2YXIgbj10aGlzLmxlbmd0aCxpPTA7aTxuO2krKyl7dmFyIGE9dGhpc1tpXSxzPXI/ZS5hcHBseShyLFthLGksdGhpc10pOmUoYSxpLHRoaXMpO2lmKHM9PT0hMSlicmVha31yZXR1cm4gdGhpc30sImZvckVhY2giKSx0b0FycmF5Om8oZnVuY3Rpb24oKXtmb3IodmFyIGU9W10scj0wO3I8dGhpcy5sZW5ndGg7cisrKWUucHVzaCh0aGlzW3JdKTtyZXR1cm4gZX0sInRvQXJyYXkiKSxzbGljZTpvKGZ1bmN0aW9uKGUscil7dmFyIG49W10saT10aGlzLmxlbmd0aDtyPT1udWxsJiYocj1pKSxlPT1udWxsJiYoZT0wKSxlPDAmJihlPWkrZSkscjwwJiYocj1pK3IpO2Zvcih2YXIgYT1lO2E+PTAmJmE8ciYmYTxpO2ErKyluLnB1c2godGhpc1thXSk7cmV0dXJuIHRoaXMuc3Bhd24obil9LCJzbGljZSIpLHNpemU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aH0sInNpemUiKSxlcTpvKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzW2VdfHx0aGlzLnNwYXduKCl9LCJlcSIpLGZpcnN0Om8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1swXXx8dGhpcy5zcGF3bigpfSwiZmlyc3QiKSxsYXN0Om8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1t0aGlzLmxlbmd0aC0xXXx8dGhpcy5zcGF3bigpfSwibGFzdCIpLGVtcHR5Om8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGg9PT0wfSwiZW1wdHkiKSxub25lbXB0eTpvKGZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZW1wdHkoKX0sIm5vbmVtcHR5Iiksc29ydDpvKGZ1bmN0aW9uKGUpe2lmKCFsaShlKSlyZXR1cm4gdGhpczt2YXIgcj10aGlzLnRvQXJyYXkoKS5zb3J0KGUpO3JldHVybiB0aGlzLnNwYXduKHIpfSwic29ydCIpLHNvcnRCeVpJbmRleDpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc29ydChsMWUpfSwic29ydEJ5WkluZGV4IiksekRlcHRoOm8oZnVuY3Rpb24oKXt2YXIgZT10aGlzWzBdO2lmKGUpe3ZhciByPWUuX3ByaXZhdGUsbj1yLmdyb3VwO2lmKG49PT0ibm9kZXMiKXt2YXIgaT1yLmRhdGEucGFyZW50P2UucGFyZW50cygpLnNpemUoKTowO3JldHVybiBlLmlzUGFyZW50KCk/aTokQi0xfWVsc2V7dmFyIGE9ci5zb3VyY2Uscz1yLnRhcmdldCxsPWEuekRlcHRoKCksdT1zLnpEZXB0aCgpO3JldHVybiBNYXRoLm1heChsLHUsMCl9fX0sInpEZXB0aCIpfTtINi5lYWNoPUg2LmZvckVhY2g7dFplPW8oZnVuY3Rpb24oKXt2YXIgZT0idW5kZWZpbmVkIixyPSh0eXBlb2YgU3ltYm9sPiJ1Ij8idW5kZWZpbmVkIjpxaShTeW1ib2wpKSE9ZSYmcWkoU3ltYm9sLml0ZXJhdG9yKSE9ZTtyJiYoSDZbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3ZhciBuPXRoaXMsaT17dmFsdWU6dm9pZCAwLGRvbmU6ITF9LGE9MCxzPXRoaXMubGVuZ3RoO3JldHVybiBpZ2Uoe25leHQ6byhmdW5jdGlvbigpe3JldHVybiBhPHM/aS52YWx1ZT1uW2ErK106KGkudmFsdWU9dm9pZCAwLGkuZG9uZT0hMCksaX0sIm5leHQiKX0sU3ltYm9sLml0ZXJhdG9yLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KX0pfSwiZGVmaW5lU3ltYm9sSXRlcmF0b3IiKTt0WmUoKTtyWmU9b2Eoe25vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczohMX0pLE42PXtsYXlvdXREaW1lbnNpb25zOm8oZnVuY3Rpb24oZSl7ZT1yWmUoZSk7dmFyIHI7aWYoIXRoaXMudGFrZXNVcFNwYWNlKCkpcj17dzowLGg6MH07ZWxzZSBpZihlLm5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVscyl7dmFyIG49dGhpcy5ib3VuZGluZ0JveCgpO3I9e3c6bi53LGg6bi5ofX1lbHNlIHI9e3c6dGhpcy5vdXRlcldpZHRoKCksaDp0aGlzLm91dGVySGVpZ2h0KCl9O3JldHVybihyLnc9PT0wfHxyLmg9PT0wKSYmKHIudz1yLmg9MSkscn0sImxheW91dERpbWVuc2lvbnMiKSxsYXlvdXRQb3NpdGlvbnM6byhmdW5jdGlvbihlLHIsbil7dmFyIGk9dGhpcy5ub2RlcygpLmZpbHRlcihmdW5jdGlvbih3KXtyZXR1cm4hdy5pc1BhcmVudCgpfSksYT10aGlzLmN5KCkscz1yLmVsZXMsbD1vKGZ1bmN0aW9uKEUpe3JldHVybiBFLmlkKCl9LCJnZXRNZW1vaXplS2V5IiksdT1lNChuLGwpO2UuZW1pdCh7dHlwZToibGF5b3V0c3RhcnQiLGxheW91dDplfSksZS5hbmltYXRpb25zPVtdO3ZhciBoPW8oZnVuY3Rpb24oRSxfLEMpe3ZhciBEPXt4Ol8ueDErXy53LzIseTpfLnkxK18uaC8yfSxPPXt4OihDLngtRC54KSpFLHk6KEMueS1ELnkpKkV9O3JldHVybnt4OkQueCtPLngseTpELnkrTy55fX0sImNhbGN1bGF0ZVNwYWNpbmciKSxmPXIuc3BhY2luZ0ZhY3RvciYmci5zcGFjaW5nRmFjdG9yIT09MSxkPW8oZnVuY3Rpb24oKXtpZighZilyZXR1cm4gbnVsbDtmb3IodmFyIEU9WXMoKSxfPTA7XzxpLmxlbmd0aDtfKyspe3ZhciBDPWlbX10sRD11KEMsXyk7blhlKEUsRC54LEQueSl9cmV0dXJuIEV9LCJzcGFjaW5nQmIiKSxwPWQoKSxtPWU0KGZ1bmN0aW9uKHcsRSl7dmFyIF89dSh3LEUpO2lmKGYpe3ZhciBDPU1hdGguYWJzKHIuc3BhY2luZ0ZhY3Rvcik7Xz1oKEMscCxfKX1yZXR1cm4gci50cmFuc2Zvcm0hPW51bGwmJihfPXIudHJhbnNmb3JtKHcsXykpLF99LGwpO2lmKHIuYW5pbWF0ZSl7Zm9yKHZhciBnPTA7ZzxpLmxlbmd0aDtnKyspe3ZhciB5PWlbZ10sdj1tKHksZykseD1yLmFuaW1hdGVGaWx0ZXI9PW51bGx8fHIuYW5pbWF0ZUZpbHRlcih5LGcpO2lmKHgpe3ZhciBiPXkuYW5pbWF0aW9uKHtwb3NpdGlvbjp2LGR1cmF0aW9uOnIuYW5pbWF0aW9uRHVyYXRpb24sZWFzaW5nOnIuYW5pbWF0aW9uRWFzaW5nfSk7ZS5hbmltYXRpb25zLnB1c2goYil9ZWxzZSB5LnBvc2l0aW9uKHYpfWlmKHIuZml0KXt2YXIgVD1hLmFuaW1hdGlvbih7Zml0Ontib3VuZGluZ0JveDpzLmJvdW5kaW5nQm94QXQobSkscGFkZGluZzpyLnBhZGRpbmd9LGR1cmF0aW9uOnIuYW5pbWF0aW9uRHVyYXRpb24sZWFzaW5nOnIuYW5pbWF0aW9uRWFzaW5nfSk7ZS5hbmltYXRpb25zLnB1c2goVCl9ZWxzZSBpZihyLnpvb20hPT12b2lkIDAmJnIucGFuIT09dm9pZCAwKXt2YXIgUz1hLmFuaW1hdGlvbih7em9vbTpyLnpvb20scGFuOnIucGFuLGR1cmF0aW9uOnIuYW5pbWF0aW9uRHVyYXRpb24sZWFzaW5nOnIuYW5pbWF0aW9uRWFzaW5nfSk7ZS5hbmltYXRpb25zLnB1c2goUyl9ZS5hbmltYXRpb25zLmZvckVhY2goZnVuY3Rpb24odyl7cmV0dXJuIHcucGxheSgpfSksZS5vbmUoImxheW91dHJlYWR5IixyLnJlYWR5KSxlLmVtaXQoe3R5cGU6ImxheW91dHJlYWR5IixsYXlvdXQ6ZX0pLHN5LmFsbChlLmFuaW1hdGlvbnMubWFwKGZ1bmN0aW9uKHcpe3JldHVybiB3LnByb21pc2UoKX0pKS50aGVuKGZ1bmN0aW9uKCl7ZS5vbmUoImxheW91dHN0b3AiLHIuc3RvcCksZS5lbWl0KHt0eXBlOiJsYXlvdXRzdG9wIixsYXlvdXQ6ZX0pfSl9ZWxzZSBpLnBvc2l0aW9ucyhtKSxyLmZpdCYmYS5maXQoci5lbGVzLHIucGFkZGluZyksci56b29tIT1udWxsJiZhLnpvb20oci56b29tKSxyLnBhbiYmYS5wYW4oci5wYW4pLGUub25lKCJsYXlvdXRyZWFkeSIsci5yZWFkeSksZS5lbWl0KHt0eXBlOiJsYXlvdXRyZWFkeSIsbGF5b3V0OmV9KSxlLm9uZSgibGF5b3V0c3RvcCIsci5zdG9wKSxlLmVtaXQoe3R5cGU6ImxheW91dHN0b3AiLGxheW91dDplfSk7cmV0dXJuIHRoaXN9LCJsYXlvdXRQb3NpdGlvbnMiKSxsYXlvdXQ6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLmN5KCk7cmV0dXJuIHIubWFrZUxheW91dChpcih7fSxlLHtlbGVzOnRoaXN9KSl9LCJsYXlvdXQiKX07TjYuY3JlYXRlTGF5b3V0PU42Lm1ha2VMYXlvdXQ9TjYubGF5b3V0O28oYzFlLCJzdHlsZUNhY2hlIik7byhzQywiY2FjaGVTdHlsZUZ1bmN0aW9uIik7byhvQywiY2FjaGVQcm90b3R5cGVTdHlsZUZ1bmN0aW9uIik7RWE9e3JlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZTpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuY3koKSxuPXIucmVuZGVyZXIoKSxpPXIuc3R5bGVFbmFibGVkKCk7cmV0dXJuIG4mJmkmJm4ucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKHRoaXMsZSksdGhpc30sInJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSIpLGRpcnR5U3R5bGVDYWNoZTpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jeSgpLHI9byhmdW5jdGlvbihhKXtyZXR1cm4gYS5fcHJpdmF0ZS5zdHlsZUNhY2hlPW51bGx9LCJkaXJ0eSIpO2lmKGUuaGFzQ29tcG91bmROb2RlcygpKXt2YXIgbjtuPXRoaXMuc3Bhd25TZWxmKCkubWVyZ2UodGhpcy5kZXNjZW5kYW50cygpKS5tZXJnZSh0aGlzLnBhcmVudHMoKSksbi5tZXJnZShuLmNvbm5lY3RlZEVkZ2VzKCkpLG4uZm9yRWFjaChyKX1lbHNlIHRoaXMuZm9yRWFjaChmdW5jdGlvbihpKXtyKGkpLGkuY29ubmVjdGVkRWRnZXMoKS5mb3JFYWNoKHIpfSk7cmV0dXJuIHRoaXN9LCJkaXJ0eVN0eWxlQ2FjaGUiKSx1cGRhdGVTdHlsZTpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuX3ByaXZhdGUuY3k7aWYoIXIuc3R5bGVFbmFibGVkKCkpcmV0dXJuIHRoaXM7aWYoci5iYXRjaGluZygpKXt2YXIgbj1yLl9wcml2YXRlLmJhdGNoU3R5bGVFbGVzO3JldHVybiBuLm1lcmdlKHRoaXMpLHRoaXN9dmFyIGk9ci5oYXNDb21wb3VuZE5vZGVzKCksYT10aGlzO2U9ISEoZXx8ZT09PXZvaWQgMCksaSYmKGE9dGhpcy5zcGF3blNlbGYoKS5tZXJnZSh0aGlzLmRlc2NlbmRhbnRzKCkpLm1lcmdlKHRoaXMucGFyZW50cygpKSk7dmFyIHM9YTtyZXR1cm4gZT9zLmVtaXRBbmROb3RpZnkoInN0eWxlIik6cy5lbWl0KCJzdHlsZSIpLGEuZm9yRWFjaChmdW5jdGlvbihsKXtyZXR1cm4gbC5fcHJpdmF0ZS5zdHlsZURpcnR5PSEwfSksdGhpc30sInVwZGF0ZVN0eWxlIiksY2xlYW5TdHlsZTpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jeSgpO2lmKGUuc3R5bGVFbmFibGVkKCkpZm9yKHZhciByPTA7cjx0aGlzLmxlbmd0aDtyKyspe3ZhciBuPXRoaXNbcl07bi5fcHJpdmF0ZS5zdHlsZURpcnR5JiYobi5fcHJpdmF0ZS5zdHlsZURpcnR5PSExLGUuc3R5bGUoKS5hcHBseShuKSl9fSwiY2xlYW5TdHlsZSIpLHBhcnNlZFN0eWxlOm8oZnVuY3Rpb24oZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiEwLG49dGhpc1swXSxpPW4uY3koKTtpZihpLnN0eWxlRW5hYmxlZCgpJiZuKXtuLl9wcml2YXRlLnN0eWxlRGlydHkmJihuLl9wcml2YXRlLnN0eWxlRGlydHk9ITEsaS5zdHlsZSgpLmFwcGx5KG4pKTt2YXIgYT1uLl9wcml2YXRlLnN0eWxlW2VdO3JldHVybiBhPz8ocj9pLnN0eWxlKCkuZ2V0RGVmYXVsdFByb3BlcnR5KGUpOm51bGwpfX0sInBhcnNlZFN0eWxlIiksbnVtZXJpY1N0eWxlOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpc1swXTtpZihyLmN5KCkuc3R5bGVFbmFibGVkKCkmJnIpe3ZhciBuPXIucHN0eWxlKGUpO3JldHVybiBuLnBmVmFsdWUhPT12b2lkIDA/bi5wZlZhbHVlOm4udmFsdWV9fSwibnVtZXJpY1N0eWxlIiksbnVtZXJpY1N0eWxlVW5pdHM6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzWzBdO2lmKHIuY3koKS5zdHlsZUVuYWJsZWQoKSYmcilyZXR1cm4gci5wc3R5bGUoZSkudW5pdHN9LCJudW1lcmljU3R5bGVVbml0cyIpLHJlbmRlcmVkU3R5bGU6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLmN5KCk7aWYoIXIuc3R5bGVFbmFibGVkKCkpcmV0dXJuIHRoaXM7dmFyIG49dGhpc1swXTtpZihuKXJldHVybiByLnN0eWxlKCkuZ2V0UmVuZGVyZWRTdHlsZShuLGUpfSwicmVuZGVyZWRTdHlsZSIpLHN0eWxlOm8oZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLmN5KCk7aWYoIW4uc3R5bGVFbmFibGVkKCkpcmV0dXJuIHRoaXM7dmFyIGk9ITEsYT1uLnN0eWxlKCk7aWYoVXIoZSkpe3ZhciBzPWU7YS5hcHBseUJ5cGFzcyh0aGlzLHMsaSksdGhpcy5lbWl0QW5kTm90aWZ5KCJzdHlsZSIpfWVsc2UgaWYoWnQoZSkpaWYocj09PXZvaWQgMCl7dmFyIGw9dGhpc1swXTtyZXR1cm4gbD9hLmdldFN0eWxlUHJvcGVydHlWYWx1ZShsLGUpOnZvaWQgMH1lbHNlIGEuYXBwbHlCeXBhc3ModGhpcyxlLHIsaSksdGhpcy5lbWl0QW5kTm90aWZ5KCJzdHlsZSIpO2Vsc2UgaWYoZT09PXZvaWQgMCl7dmFyIHU9dGhpc1swXTtyZXR1cm4gdT9hLmdldFJhd1N0eWxlKHUpOnZvaWQgMH1yZXR1cm4gdGhpc30sInN0eWxlIikscmVtb3ZlU3R5bGU6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLmN5KCk7aWYoIXIuc3R5bGVFbmFibGVkKCkpcmV0dXJuIHRoaXM7dmFyIG49ITEsaT1yLnN0eWxlKCksYT10aGlzO2lmKGU9PT12b2lkIDApZm9yKHZhciBzPTA7czxhLmxlbmd0aDtzKyspe3ZhciBsPWFbc107aS5yZW1vdmVBbGxCeXBhc3NlcyhsLG4pfWVsc2V7ZT1lLnNwbGl0KC9ccysvKTtmb3IodmFyIHU9MDt1PGEubGVuZ3RoO3UrKyl7dmFyIGg9YVt1XTtpLnJlbW92ZUJ5cGFzc2VzKGgsZSxuKX19cmV0dXJuIHRoaXMuZW1pdEFuZE5vdGlmeSgic3R5bGUiKSx0aGlzfSwicmVtb3ZlU3R5bGUiKSxzaG93Om8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jc3MoImRpc3BsYXkiLCJlbGVtZW50IiksdGhpc30sInNob3ciKSxoaWRlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jc3MoImRpc3BsYXkiLCJub25lIiksdGhpc30sImhpZGUiKSxlZmZlY3RpdmVPcGFjaXR5Om8oZnVuY3Rpb24oKXt2YXIgZT10aGlzLmN5KCk7aWYoIWUuc3R5bGVFbmFibGVkKCkpcmV0dXJuIDE7dmFyIHI9ZS5oYXNDb21wb3VuZE5vZGVzKCksbj10aGlzWzBdO2lmKG4pe3ZhciBpPW4uX3ByaXZhdGUsYT1uLnBzdHlsZSgib3BhY2l0eSIpLnZhbHVlO2lmKCFyKXJldHVybiBhO3ZhciBzPWkuZGF0YS5wYXJlbnQ/bi5wYXJlbnRzKCk6bnVsbDtpZihzKWZvcih2YXIgbD0wO2w8cy5sZW5ndGg7bCsrKXt2YXIgdT1zW2xdLGg9dS5wc3R5bGUoIm9wYWNpdHkiKS52YWx1ZTthPWgqYX1yZXR1cm4gYX19LCJlZmZlY3RpdmVPcGFjaXR5IiksdHJhbnNwYXJlbnQ6byhmdW5jdGlvbigpe3ZhciBlPXRoaXMuY3koKTtpZighZS5zdHlsZUVuYWJsZWQoKSlyZXR1cm4hMTt2YXIgcj10aGlzWzBdLG49ci5jeSgpLmhhc0NvbXBvdW5kTm9kZXMoKTtpZihyKXJldHVybiBuP3IuZWZmZWN0aXZlT3BhY2l0eSgpPT09MDpyLnBzdHlsZSgib3BhY2l0eSIpLnZhbHVlPT09MH0sInRyYW5zcGFyZW50IiksYmFja2dyb3VuZGluZzpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jeSgpO2lmKCFlLnN0eWxlRW5hYmxlZCgpKXJldHVybiExO3ZhciByPXRoaXNbMF07cmV0dXJuISFyLl9wcml2YXRlLmJhY2tncm91bmRpbmd9LCJiYWNrZ3JvdW5kaW5nIil9O28oaEIsImNoZWNrQ29tcG91bmQiKTtvKFFCLCJkZWZpbmVEZXJpdmVkU3RhdGVGdW5jdGlvbiIpO3V5PXNDKCJlbGVUYWtlc1VwU3BhY2UiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnBzdHlsZSgiZGlzcGxheSIpLnZhbHVlPT09ImVsZW1lbnQiJiZ0LndpZHRoKCkhPT0wJiYodC5pc05vZGUoKT90LmhlaWdodCgpIT09MDohMCl9KTtFYS50YWtlc1VwU3BhY2U9b0MoInRha2VzVXBTcGFjZSIsUUIoe29rOnV5fSkpO25aZT1zQygiZWxlSW50ZXJhY3RpdmUiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnBzdHlsZSgiZXZlbnRzIikudmFsdWU9PT0ieWVzIiYmdC5wc3R5bGUoInZpc2liaWxpdHkiKS52YWx1ZT09PSJ2aXNpYmxlIiYmdXkodCl9KSxpWmU9c0MoInBhcmVudEludGVyYWN0aXZlIixmdW5jdGlvbih0KXtyZXR1cm4gdC5wc3R5bGUoInZpc2liaWxpdHkiKS52YWx1ZT09PSJ2aXNpYmxlIiYmdXkodCl9KTtFYS5pbnRlcmFjdGl2ZT1vQygiaW50ZXJhY3RpdmUiLFFCKHtvazpuWmUscGFyZW50T2s6aVplLGVkZ2VPa1ZpYU5vZGU6dXl9KSk7RWEubm9uaW50ZXJhY3RpdmU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzWzBdO2lmKHQpcmV0dXJuIXQuaW50ZXJhY3RpdmUoKX07YVplPXNDKCJlbGVWaXNpYmxlIixmdW5jdGlvbih0KXtyZXR1cm4gdC5wc3R5bGUoInZpc2liaWxpdHkiKS52YWx1ZT09PSJ2aXNpYmxlIiYmdC5wc3R5bGUoIm9wYWNpdHkiKS5wZlZhbHVlIT09MCYmdXkodCl9KSxzWmU9dXk7RWEudmlzaWJsZT1vQygidmlzaWJsZSIsUUIoe29rOmFaZSxlZGdlT2tWaWFOb2RlOnNaZX0pKTtFYS5oaWRkZW49ZnVuY3Rpb24oKXt2YXIgdD10aGlzWzBdO2lmKHQpcmV0dXJuIXQudmlzaWJsZSgpfTtFYS5pc0J1bmRsZWRCZXppZXI9b0MoImlzQnVuZGxlZEJlemllciIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jeSgpLnN0eWxlRW5hYmxlZCgpPyF0aGlzLnJlbW92ZWQoKSYmdGhpcy5wc3R5bGUoImN1cnZlLXN0eWxlIikudmFsdWU9PT0iYmV6aWVyIiYmdGhpcy50YWtlc1VwU3BhY2UoKTohMX0pO0VhLmJ5cGFzcz1FYS5jc3M9RWEuc3R5bGU7RWEucmVuZGVyZWRDc3M9RWEucmVuZGVyZWRTdHlsZTtFYS5yZW1vdmVCeXBhc3M9RWEucmVtb3ZlQ3NzPUVhLnJlbW92ZVN0eWxlO0VhLnBzdHlsZT1FYS5wYXJzZWRTdHlsZTtPZj17fTtvKHdtZSwiZGVmaW5lU3dpdGNoRnVuY3Rpb24iKTtvKGh5LCJkZWZpbmVTd2l0Y2hTZXQiKTtoeSh7ZmllbGQ6ImxvY2tlZCIsb3ZlcnJpZGVGaWVsZDpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLmN5KCkuYXV0b2xvY2soKT8hMDp2b2lkIDB9LCJvdmVycmlkZUZpZWxkIiksb246ImxvY2siLG9mZjoidW5sb2NrIn0pO2h5KHtmaWVsZDoiZ3JhYmJhYmxlIixvdmVycmlkZUZpZWxkOm8oZnVuY3Rpb24oZSl7cmV0dXJuIGUuY3koKS5hdXRvdW5ncmFiaWZ5KCl8fGUucGFubmFibGUoKT8hMTp2b2lkIDB9LCJvdmVycmlkZUZpZWxkIiksb246ImdyYWJpZnkiLG9mZjoidW5ncmFiaWZ5In0pO2h5KHtmaWVsZDoic2VsZWN0ZWQiLGFibGVGaWVsZDoic2VsZWN0YWJsZSIsb3ZlcnJpZGVBYmxlOm8oZnVuY3Rpb24oZSl7cmV0dXJuIGUuY3koKS5hdXRvdW5zZWxlY3RpZnkoKT8hMTp2b2lkIDB9LCJvdmVycmlkZUFibGUiKSxvbjoic2VsZWN0IixvZmY6InVuc2VsZWN0In0pO2h5KHtmaWVsZDoic2VsZWN0YWJsZSIsb3ZlcnJpZGVGaWVsZDpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLmN5KCkuYXV0b3Vuc2VsZWN0aWZ5KCk/ITE6dm9pZCAwfSwib3ZlcnJpZGVGaWVsZCIpLG9uOiJzZWxlY3RpZnkiLG9mZjoidW5zZWxlY3RpZnkifSk7T2YuZGVzZWxlY3Q9T2YudW5zZWxlY3Q7T2YuZ3JhYmJlZD1mdW5jdGlvbigpe3ZhciB0PXRoaXNbMF07aWYodClyZXR1cm4gdC5fcHJpdmF0ZS5ncmFiYmVkfTtoeSh7ZmllbGQ6ImFjdGl2ZSIsb246ImFjdGl2YXRlIixvZmY6InVuYWN0aXZhdGUifSk7aHkoe2ZpZWxkOiJwYW5uYWJsZSIsb246InBhbmlmeSIsb2ZmOiJ1bnBhbmlmeSJ9KTtPZi5pbmFjdGl2ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXNbMF07aWYodClyZXR1cm4hdC5fcHJpdmF0ZS5hY3RpdmV9O0hhPXt9LGttZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBvKGZ1bmN0aW9uKG4pe2Zvcih2YXIgaT10aGlzLGE9W10scz0wO3M8aS5sZW5ndGg7cysrKXt2YXIgbD1pW3NdO2lmKGwuaXNOb2RlKCkpe2Zvcih2YXIgdT0hMSxoPWwuY29ubmVjdGVkRWRnZXMoKSxmPTA7ZjxoLmxlbmd0aDtmKyspe3ZhciBkPWhbZl0scD1kLnNvdXJjZSgpLG09ZC50YXJnZXQoKTtpZihlLm5vSW5jb21pbmdFZGdlcyYmbT09PWwmJnAhPT1sfHxlLm5vT3V0Z29pbmdFZGdlcyYmcD09PWwmJm0hPT1sKXt1PSEwO2JyZWFrfX11fHxhLnB1c2gobCl9fXJldHVybiB0aGlzLnNwYXduKGEsITApLmZpbHRlcihuKX0sImRhZ0V4dHJlbWl0eUltcGwiKX0sImRlZmluZURhZ0V4dHJlbWl0eSIpLEVtZT1vKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihyKXtmb3IodmFyIG49dGhpcyxpPVtdLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIHM9blthXTtpZihzLmlzTm9kZSgpKWZvcih2YXIgbD1zLmNvbm5lY3RlZEVkZ2VzKCksdT0wO3U8bC5sZW5ndGg7dSsrKXt2YXIgaD1sW3VdLGY9aC5zb3VyY2UoKSxkPWgudGFyZ2V0KCk7ZS5vdXRnb2luZyYmZj09PXM/KGkucHVzaChoKSxpLnB1c2goZCkpOmUuaW5jb21pbmcmJmQ9PT1zJiYoaS5wdXNoKGgpLGkucHVzaChmKSl9fXJldHVybiB0aGlzLnNwYXduKGksITApLmZpbHRlcihyKX19LCJkZWZpbmVEYWdPbmVIb3AiKSxTbWU9byhmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24ocil7Zm9yKHZhciBuPXRoaXMsaT1bXSxhPXt9Ozspe3ZhciBzPWUub3V0Z29pbmc/bi5vdXRnb2VycygpOm4uaW5jb21lcnMoKTtpZihzLmxlbmd0aD09PTApYnJlYWs7Zm9yKHZhciBsPSExLHU9MDt1PHMubGVuZ3RoO3UrKyl7dmFyIGg9c1t1XSxmPWguaWQoKTthW2ZdfHwoYVtmXT0hMCxpLnB1c2goaCksbD0hMCl9aWYoIWwpYnJlYWs7bj1zfXJldHVybiB0aGlzLnNwYXduKGksITApLmZpbHRlcihyKX19LCJkZWZpbmVEYWdBbGxIb3BzIik7SGEuY2xlYXJUcmF2ZXJzYWxDYWNoZT1mdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8dGhpcy5sZW5ndGg7dCsrKXRoaXNbdF0uX3ByaXZhdGUudHJhdmVyc2FsQ2FjaGU9bnVsbH07aXIoSGEse3Jvb3RzOmttZSh7bm9JbmNvbWluZ0VkZ2VzOiEwfSksbGVhdmVzOmttZSh7bm9PdXRnb2luZ0VkZ2VzOiEwfSksb3V0Z29lcnM6YWwoRW1lKHtvdXRnb2luZzohMH0pLCJvdXRnb2VycyIpLHN1Y2Nlc3NvcnM6U21lKHtvdXRnb2luZzohMH0pLGluY29tZXJzOmFsKEVtZSh7aW5jb21pbmc6ITB9KSwiaW5jb21lcnMiKSxwcmVkZWNlc3NvcnM6U21lKHtpbmNvbWluZzohMH0pfSk7aXIoSGEse25laWdoYm9yaG9vZDphbChmdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj10aGlzLm5vZGVzKCksbj0wO248ci5sZW5ndGg7bisrKWZvcih2YXIgaT1yW25dLGE9aS5jb25uZWN0ZWRFZGdlcygpLHM9MDtzPGEubGVuZ3RoO3MrKyl7dmFyIGw9YVtzXSx1PWwuc291cmNlKCksaD1sLnRhcmdldCgpLGY9aT09PXU/aDp1O2YubGVuZ3RoPjAmJmUucHVzaChmWzBdKSxlLnB1c2gobFswXSl9cmV0dXJuIHRoaXMuc3Bhd24oZSwhMCkuZmlsdGVyKHQpfSwibmVpZ2hib3Job29kIiksY2xvc2VkTmVpZ2hib3Job29kOm8oZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubmVpZ2hib3Job29kKCkuYWRkKHRoaXMpLmZpbHRlcihlKX0sImNsb3NlZE5laWdoYm9yaG9vZCIpLG9wZW5OZWlnaGJvcmhvb2Q6byhmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5uZWlnaGJvcmhvb2QoZSl9LCJvcGVuTmVpZ2hib3Job29kIil9KTtIYS5uZWlnaGJvdXJob29kPUhhLm5laWdoYm9yaG9vZDtIYS5jbG9zZWROZWlnaGJvdXJob29kPUhhLmNsb3NlZE5laWdoYm9yaG9vZDtIYS5vcGVuTmVpZ2hib3VyaG9vZD1IYS5vcGVuTmVpZ2hib3Job29kO2lyKEhhLHtzb3VyY2U6YWwobyhmdW5jdGlvbihlKXt2YXIgcj10aGlzWzBdLG47cmV0dXJuIHImJihuPXIuX3ByaXZhdGUuc291cmNlfHxyLmN5KCkuY29sbGVjdGlvbigpKSxuJiZlP24uZmlsdGVyKGUpOm59LCJzb3VyY2VJbXBsIiksInNvdXJjZSIpLHRhcmdldDphbChvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXNbMF0sbjtyZXR1cm4gciYmKG49ci5fcHJpdmF0ZS50YXJnZXR8fHIuY3koKS5jb2xsZWN0aW9uKCkpLG4mJmU/bi5maWx0ZXIoZSk6bn0sInRhcmdldEltcGwiKSwidGFyZ2V0Iiksc291cmNlczpDbWUoe2F0dHI6InNvdXJjZSJ9KSx0YXJnZXRzOkNtZSh7YXR0cjoidGFyZ2V0In0pfSk7byhDbWUsImRlZmluZVNvdXJjZUZ1bmN0aW9uIik7aXIoSGEse2VkZ2VzV2l0aDphbChBbWUoKSwiZWRnZXNXaXRoIiksZWRnZXNUbzphbChBbWUoe3RoaXNJc1NyYzohMH0pLCJlZGdlc1RvIil9KTtvKEFtZSwiZGVmaW5lRWRnZXNXaXRoRnVuY3Rpb24iKTtpcihIYSx7Y29ubmVjdGVkRWRnZXM6YWwoZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9dGhpcyxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl07aWYoaS5pc05vZGUoKSlmb3IodmFyIGE9aS5fcHJpdmF0ZS5lZGdlcyxzPTA7czxhLmxlbmd0aDtzKyspe3ZhciBsPWFbc107ZS5wdXNoKGwpfX1yZXR1cm4gdGhpcy5zcGF3bihlLCEwKS5maWx0ZXIodCl9LCJjb25uZWN0ZWRFZGdlcyIpLGNvbm5lY3RlZE5vZGVzOmFsKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxyPXRoaXMsbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dO2kuaXNFZGdlKCkmJihlLnB1c2goaS5zb3VyY2UoKVswXSksZS5wdXNoKGkudGFyZ2V0KClbMF0pKX1yZXR1cm4gdGhpcy5zcGF3bihlLCEwKS5maWx0ZXIodCl9LCJjb25uZWN0ZWROb2RlcyIpLHBhcmFsbGVsRWRnZXM6YWwoX21lKCksInBhcmFsbGVsRWRnZXMiKSxjb2RpcmVjdGVkRWRnZXM6YWwoX21lKHtjb2RpcmVjdGVkOiEwfSksImNvZGlyZWN0ZWRFZGdlcyIpfSk7byhfbWUsImRlZmluZVBhcmFsbGVsRWRnZXNGdW5jdGlvbiIpO2lyKEhhLHtjb21wb25lbnRzOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcyxuPXIuY3koKSxpPW4uY29sbGVjdGlvbigpLGE9ZT09bnVsbD9yLm5vZGVzKCk6ZS5ub2RlcygpLHM9W107ZSE9bnVsbCYmYS5lbXB0eSgpJiYoYT1lLnNvdXJjZXMoKSk7dmFyIGw9byhmdW5jdGlvbihmLGQpe2kubWVyZ2UoZiksYS51bm1lcmdlKGYpLGQubWVyZ2UoZil9LCJ2aXNpdEluQ29tcG9uZW50Iik7aWYoYS5lbXB0eSgpKXJldHVybiByLnNwYXduKCk7dmFyIHU9byhmdW5jdGlvbigpe3ZhciBmPW4uY29sbGVjdGlvbigpO3MucHVzaChmKTt2YXIgZD1hWzBdO2woZCxmKSxyLmJmcyh7ZGlyZWN0ZWQ6ITEscm9vdHM6ZCx2aXNpdDpvKGZ1bmN0aW9uKG0pe3JldHVybiBsKG0sZil9LCJ2aXNpdCIpfSksZi5mb3JFYWNoKGZ1bmN0aW9uKHApe3AuY29ubmVjdGVkRWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKG0pe3IuaGFzKG0pJiZmLmhhcyhtLnNvdXJjZSgpKSYmZi5oYXMobS50YXJnZXQoKSkmJmYubWVyZ2UobSl9KX0pfSwiX2xvb3AiKTtkbyB1KCk7d2hpbGUoYS5sZW5ndGg+MCk7cmV0dXJuIHN9LCJjb21wb25lbnRzIiksY29tcG9uZW50Om8oZnVuY3Rpb24oKXt2YXIgZT10aGlzWzBdO3JldHVybiBlLmN5KCkubXV0YWJsZUVsZW1lbnRzKCkuY29tcG9uZW50cyhlKVswXX0sImNvbXBvbmVudCIpfSk7SGEuY29tcG9uZW50c09mPUhhLmNvbXBvbmVudHM7U2E9byhmdW5jdGlvbihlLHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTohMSxpPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTohMTtpZihlPT09dm9pZCAwKXtvaSgiQSBjb2xsZWN0aW9uIG11c3QgaGF2ZSBhIHJlZmVyZW5jZSB0byB0aGUgY29yZSIpO3JldHVybn12YXIgYT1uZXcgWmMscz0hMTtpZighcilyPVtdO2Vsc2UgaWYoci5sZW5ndGg+MCYmVXIoclswXSkmJiFmNChyWzBdKSl7cz0hMDtmb3IodmFyIGw9W10sdT1uZXcgYXksaD0wLGY9ci5sZW5ndGg7aDxmO2grKyl7dmFyIGQ9cltoXTtkLmRhdGE9PW51bGwmJihkLmRhdGE9e30pO3ZhciBwPWQuZGF0YTtpZihwLmlkPT1udWxsKXAuaWQ9d2dlKCk7ZWxzZSBpZihlLmhhc0VsZW1lbnRXaXRoSWQocC5pZCl8fHUuaGFzKHAuaWQpKWNvbnRpbnVlO3ZhciBtPW5ldyBaNihlLGQsITEpO2wucHVzaChtKSx1LmFkZChwLmlkKX1yPWx9dGhpcy5sZW5ndGg9MDtmb3IodmFyIGc9MCx5PXIubGVuZ3RoO2c8eTtnKyspe3ZhciB2PXJbZ11bMF07aWYodiE9bnVsbCl7dmFyIHg9di5fcHJpdmF0ZS5kYXRhLmlkOyghbnx8IWEuaGFzKHgpKSYmKG4mJmEuc2V0KHgse2luZGV4OnRoaXMubGVuZ3RoLGVsZTp2fSksdGhpc1t0aGlzLmxlbmd0aF09dix0aGlzLmxlbmd0aCsrKX19dGhpcy5fcHJpdmF0ZT17ZWxlczp0aGlzLGN5OmUsZ2V0IG1hcCgpe3JldHVybiB0aGlzLmxhenlNYXA9PW51bGwmJnRoaXMucmVidWlsZE1hcCgpLHRoaXMubGF6eU1hcH0sc2V0IG1hcChiKXt0aGlzLmxhenlNYXA9Yn0scmVidWlsZE1hcDpvKGZ1bmN0aW9uKCl7Zm9yKHZhciBUPXRoaXMubGF6eU1hcD1uZXcgWmMsUz10aGlzLmVsZXMsdz0wO3c8Uy5sZW5ndGg7dysrKXt2YXIgRT1TW3ddO1Quc2V0KEUuaWQoKSx7aW5kZXg6dyxlbGU6RX0pfX0sInJlYnVpbGRNYXAiKX0sbiYmKHRoaXMuX3ByaXZhdGUubWFwPWEpLHMmJiFpJiZ0aGlzLnJlc3RvcmUoKX0sIkNvbGxlY3Rpb24iKSxNbj1aNi5wcm90b3R5cGU9U2EucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoQXJyYXkucHJvdG90eXBlKTtNbi5pbnN0YW5jZVN0cmluZz1mdW5jdGlvbigpe3JldHVybiJjb2xsZWN0aW9uIn07TW4uc3Bhd249ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IFNhKHRoaXMuY3koKSx0LGUpfTtNbi5zcGF3blNlbGY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zcGF3bih0aGlzKX07TW4uY3k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5jeX07TW4ucmVuZGVyZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5jeS5yZW5kZXJlcigpfTtNbi5lbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbMF19O01uLmNvbGxlY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm4gb2dlKHRoaXMpP3RoaXM6bmV3IFNhKHRoaXMuX3ByaXZhdGUuY3ksW3RoaXNdKX07TW4udW5pcXVlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBTYSh0aGlzLl9wcml2YXRlLmN5LHRoaXMsITApfTtNbi5oYXNFbGVtZW50V2l0aElkPWZ1bmN0aW9uKHQpe3JldHVybiB0PSIiK3QsdGhpcy5fcHJpdmF0ZS5tYXAuaGFzKHQpfTtNbi5nZXRFbGVtZW50QnlJZD1mdW5jdGlvbih0KXt0PSIiK3Q7dmFyIGU9dGhpcy5fcHJpdmF0ZS5jeSxyPXRoaXMuX3ByaXZhdGUubWFwLmdldCh0KTtyZXR1cm4gcj9yLmVsZTpuZXcgU2EoZSl9O01uLiRpZD1Nbi5nZXRFbGVtZW50QnlJZDtNbi5wb29sSW5kZXg9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wcml2YXRlLmN5LGU9dC5fcHJpdmF0ZS5lbGVtZW50cyxyPXRoaXNbMF0uX3ByaXZhdGUuZGF0YS5pZDtyZXR1cm4gZS5fcHJpdmF0ZS5tYXAuZ2V0KHIpLmluZGV4fTtNbi5pbmRleE9mPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0uX3ByaXZhdGUuZGF0YS5pZDtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5tYXAuZ2V0KGUpLmluZGV4fTtNbi5pbmRleE9mSWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9IiIrdCx0aGlzLl9wcml2YXRlLm1hcC5nZXQodCkuaW5kZXh9O01uLmpzb249ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5lbGVtZW50KCkscj10aGlzLmN5KCk7aWYoZT09bnVsbCYmdClyZXR1cm4gdGhpcztpZihlIT1udWxsKXt2YXIgbj1lLl9wcml2YXRlO2lmKFVyKHQpKXtpZihyLnN0YXJ0QmF0Y2goKSx0LmRhdGEpe2UuZGF0YSh0LmRhdGEpO3ZhciBpPW4uZGF0YTtpZihlLmlzRWRnZSgpKXt2YXIgYT0hMSxzPXt9LGw9dC5kYXRhLnNvdXJjZSx1PXQuZGF0YS50YXJnZXQ7bCE9bnVsbCYmbCE9aS5zb3VyY2UmJihzLnNvdXJjZT0iIitsLGE9ITApLHUhPW51bGwmJnUhPWkudGFyZ2V0JiYocy50YXJnZXQ9IiIrdSxhPSEwKSxhJiYoZT1lLm1vdmUocykpfWVsc2V7dmFyIGg9InBhcmVudCJpbiB0LmRhdGEsZj10LmRhdGEucGFyZW50O2gmJihmIT1udWxsfHxpLnBhcmVudCE9bnVsbCkmJmYhPWkucGFyZW50JiYoZj09PXZvaWQgMCYmKGY9bnVsbCksZiE9bnVsbCYmKGY9IiIrZiksZT1lLm1vdmUoe3BhcmVudDpmfSkpfX10LnBvc2l0aW9uJiZlLnBvc2l0aW9uKHQucG9zaXRpb24pO3ZhciBkPW8oZnVuY3Rpb24oeSx2LHgpe3ZhciBiPXRbeV07YiE9bnVsbCYmYiE9PW5beV0mJihiP2Vbdl0oKTplW3hdKCkpfSwiY2hlY2tTd2l0Y2giKTtyZXR1cm4gZCgicmVtb3ZlZCIsInJlbW92ZSIsInJlc3RvcmUiKSxkKCJzZWxlY3RlZCIsInNlbGVjdCIsInVuc2VsZWN0IiksZCgic2VsZWN0YWJsZSIsInNlbGVjdGlmeSIsInVuc2VsZWN0aWZ5IiksZCgibG9ja2VkIiwibG9jayIsInVubG9jayIpLGQoImdyYWJiYWJsZSIsImdyYWJpZnkiLCJ1bmdyYWJpZnkiKSxkKCJwYW5uYWJsZSIsInBhbmlmeSIsInVucGFuaWZ5IiksdC5jbGFzc2VzIT1udWxsJiZlLmNsYXNzZXModC5jbGFzc2VzKSxyLmVuZEJhdGNoKCksdGhpc31lbHNlIGlmKHQ9PT12b2lkIDApe3ZhciBwPXtkYXRhOlFjKG4uZGF0YSkscG9zaXRpb246UWMobi5wb3NpdGlvbiksZ3JvdXA6bi5ncm91cCxyZW1vdmVkOm4ucmVtb3ZlZCxzZWxlY3RlZDpuLnNlbGVjdGVkLHNlbGVjdGFibGU6bi5zZWxlY3RhYmxlLGxvY2tlZDpuLmxvY2tlZCxncmFiYmFibGU6bi5ncmFiYmFibGUscGFubmFibGU6bi5wYW5uYWJsZSxjbGFzc2VzOm51bGx9O3AuY2xhc3Nlcz0iIjt2YXIgbT0wO3JldHVybiBuLmNsYXNzZXMuZm9yRWFjaChmdW5jdGlvbihnKXtyZXR1cm4gcC5jbGFzc2VzKz1tKys9PT0wP2c6IiAiK2d9KSxwfX19O01uLmpzb25zPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9MDtlPHRoaXMubGVuZ3RoO2UrKyl7dmFyIHI9dGhpc1tlXSxuPXIuanNvbigpO3QucHVzaChuKX1yZXR1cm4gdH07TW4uY2xvbmU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5jeSgpLGU9W10scj0wO3I8dGhpcy5sZW5ndGg7cisrKXt2YXIgbj10aGlzW3JdLGk9bi5qc29uKCksYT1uZXcgWjYodCxpLCExKTtlLnB1c2goYSl9cmV0dXJuIG5ldyBTYSh0LGUpfTtNbi5jb3B5PU1uLmNsb25lO01uLnJlc3RvcmU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOiEwLGU9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiEwLHI9dGhpcyxuPXIuY3koKSxpPW4uX3ByaXZhdGUsYT1bXSxzPVtdLGwsdT0wLGg9ci5sZW5ndGg7dTxoO3UrKyl7dmFyIGY9clt1XTtlJiYhZi5yZW1vdmVkKCl8fChmLmlzTm9kZSgpP2EucHVzaChmKTpzLnB1c2goZikpfWw9YS5jb25jYXQocyk7dmFyIGQscD1vKGZ1bmN0aW9uKCl7bC5zcGxpY2UoZCwxKSxkLS19LCJyZW1vdmVGcm9tRWxlbWVudHMiKTtmb3IoZD0wO2Q8bC5sZW5ndGg7ZCsrKXt2YXIgbT1sW2RdLGc9bS5fcHJpdmF0ZSx5PWcuZGF0YTtpZihtLmNsZWFyVHJhdmVyc2FsQ2FjaGUoKSwhKCFlJiYhZy5yZW1vdmVkKSl7aWYoeS5pZD09PXZvaWQgMCl5LmlkPXdnZSgpO2Vsc2UgaWYoX3QoeS5pZCkpeS5pZD0iIit5LmlkO2Vsc2UgaWYoUGYoeS5pZCl8fCFadCh5LmlkKSl7b2koIkNhbiBub3QgY3JlYXRlIGVsZW1lbnQgd2l0aCBpbnZhbGlkIHN0cmluZyBJRCBgIit5LmlkKyJgIikscCgpO2NvbnRpbnVlfWVsc2UgaWYobi5oYXNFbGVtZW50V2l0aElkKHkuaWQpKXtvaSgiQ2FuIG5vdCBjcmVhdGUgc2Vjb25kIGVsZW1lbnQgd2l0aCBJRCBgIit5LmlkKyJgIikscCgpO2NvbnRpbnVlfX12YXIgdj15LmlkO2lmKG0uaXNOb2RlKCkpe3ZhciB4PWcucG9zaXRpb247eC54PT1udWxsJiYoeC54PTApLHgueT09bnVsbCYmKHgueT0wKX1pZihtLmlzRWRnZSgpKXtmb3IodmFyIGI9bSxUPVsic291cmNlIiwidGFyZ2V0Il0sUz1ULmxlbmd0aCx3PSExLEU9MDtFPFM7RSsrKXt2YXIgXz1UW0VdLEM9eVtfXTtfdChDKSYmKEM9eVtfXT0iIit5W19dKSxDPT1udWxsfHxDPT09IiI/KG9pKCJDYW4gbm90IGNyZWF0ZSBlZGdlIGAiK3YrImAgd2l0aCB1bnNwZWNpZmllZCAiK18pLHc9ITApOm4uaGFzRWxlbWVudFdpdGhJZChDKXx8KG9pKCJDYW4gbm90IGNyZWF0ZSBlZGdlIGAiK3YrImAgd2l0aCBub25leGlzdGFudCAiK18rIiBgIitDKyJgIiksdz0hMCl9aWYodyl7cCgpO2NvbnRpbnVlfXZhciBEPW4uZ2V0RWxlbWVudEJ5SWQoeS5zb3VyY2UpLE89bi5nZXRFbGVtZW50QnlJZCh5LnRhcmdldCk7RC5zYW1lKE8pP0QuX3ByaXZhdGUuZWRnZXMucHVzaChiKTooRC5fcHJpdmF0ZS5lZGdlcy5wdXNoKGIpLE8uX3ByaXZhdGUuZWRnZXMucHVzaChiKSksYi5fcHJpdmF0ZS5zb3VyY2U9RCxiLl9wcml2YXRlLnRhcmdldD1PfWcubWFwPW5ldyBaYyxnLm1hcC5zZXQodix7ZWxlOm0saW5kZXg6MH0pLGcucmVtb3ZlZD0hMSxlJiZuLmFkZFRvUG9vbChtKX1mb3IodmFyIFI9MDtSPGEubGVuZ3RoO1IrKyl7dmFyIGs9YVtSXSxMPWsuX3ByaXZhdGUuZGF0YTtfdChMLnBhcmVudCkmJihMLnBhcmVudD0iIitMLnBhcmVudCk7dmFyIEE9TC5wYXJlbnQsST1BIT1udWxsO2lmKEl8fGsuX3ByaXZhdGUucGFyZW50KXt2YXIgTT1rLl9wcml2YXRlLnBhcmVudD9uLmNvbGxlY3Rpb24oKS5tZXJnZShrLl9wcml2YXRlLnBhcmVudCk6bi5nZXRFbGVtZW50QnlJZChBKTtpZihNLmVtcHR5KCkpTC5wYXJlbnQ9dm9pZCAwO2Vsc2UgaWYoTVswXS5yZW1vdmVkKCkpaG4oIk5vZGUgYWRkZWQgd2l0aCBtaXNzaW5nIHBhcmVudCwgcmVmZXJlbmNlIHRvIHBhcmVudCByZW1vdmVkIiksTC5wYXJlbnQ9dm9pZCAwLGsuX3ByaXZhdGUucGFyZW50PW51bGw7ZWxzZXtmb3IodmFyIFA9ITEsQj1NOyFCLmVtcHR5KCk7KXtpZihrLnNhbWUoQikpe1A9ITAsTC5wYXJlbnQ9dm9pZCAwO2JyZWFrfUI9Qi5wYXJlbnQoKX1QfHwoTVswXS5fcHJpdmF0ZS5jaGlsZHJlbi5wdXNoKGspLGsuX3ByaXZhdGUucGFyZW50PU1bMF0saS5oYXNDb21wb3VuZE5vZGVzPSEwKX19fWlmKGwubGVuZ3RoPjApe2Zvcih2YXIgRj1sLmxlbmd0aD09PXIubGVuZ3RoP3I6bmV3IFNhKG4sbCksej0wO3o8Ri5sZW5ndGg7eisrKXt2YXIgJD1GW3pdOyQuaXNOb2RlKCl8fCgkLnBhcmFsbGVsRWRnZXMoKS5jbGVhclRyYXZlcnNhbENhY2hlKCksJC5zb3VyY2UoKS5jbGVhclRyYXZlcnNhbENhY2hlKCksJC50YXJnZXQoKS5jbGVhclRyYXZlcnNhbENhY2hlKCkpfXZhciBVO2kuaGFzQ29tcG91bmROb2Rlcz9VPW4uY29sbGVjdGlvbigpLm1lcmdlKEYpLm1lcmdlKEYuY29ubmVjdGVkTm9kZXMoKSkubWVyZ2UoRi5wYXJlbnQoKSk6VT1GLFUuZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlKCkuZGlydHlCb3VuZGluZ0JveENhY2hlKCkudXBkYXRlU3R5bGUodCksdD9GLmVtaXRBbmROb3RpZnkoImFkZCIpOmUmJkYuZW1pdCgiYWRkIil9cmV0dXJuIHJ9O01uLnJlbW92ZWQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzWzBdO3JldHVybiB0JiZ0Ll9wcml2YXRlLnJlbW92ZWR9O01uLmluc2lkZT1mdW5jdGlvbigpe3ZhciB0PXRoaXNbMF07cmV0dXJuIHQmJiF0Ll9wcml2YXRlLnJlbW92ZWR9O01uLnJlbW92ZT1mdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMCxlPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMCxyPXRoaXMsbj1bXSxpPXt9LGE9ci5fcHJpdmF0ZS5jeTtmdW5jdGlvbiBzKEEpe2Zvcih2YXIgST1BLl9wcml2YXRlLmVkZ2VzLE09MDtNPEkubGVuZ3RoO00rKyl1KElbTV0pfW8ocywiYWRkQ29ubmVjdGVkRWRnZXMiKTtmdW5jdGlvbiBsKEEpe2Zvcih2YXIgST1BLl9wcml2YXRlLmNoaWxkcmVuLE09MDtNPEkubGVuZ3RoO00rKyl1KElbTV0pfW8obCwiYWRkQ2hpbGRyZW4iKTtmdW5jdGlvbiB1KEEpe3ZhciBJPWlbQS5pZCgpXTtlJiZBLnJlbW92ZWQoKXx8SXx8KGlbQS5pZCgpXT0hMCxBLmlzTm9kZSgpPyhuLnB1c2goQSkscyhBKSxsKEEpKTpuLnVuc2hpZnQoQSkpfW8odSwiYWRkIik7Zm9yKHZhciBoPTAsZj1yLmxlbmd0aDtoPGY7aCsrKXt2YXIgZD1yW2hdO3UoZCl9ZnVuY3Rpb24gcChBLEkpe3ZhciBNPUEuX3ByaXZhdGUuZWRnZXM7RmYoTSxJKSxBLmNsZWFyVHJhdmVyc2FsQ2FjaGUoKX1vKHAsInJlbW92ZUVkZ2VSZWYiKTtmdW5jdGlvbiBtKEEpe0EuY2xlYXJUcmF2ZXJzYWxDYWNoZSgpfW8obSwicmVtb3ZlUGFyYWxsZWxSZWYiKTt2YXIgZz1bXTtnLmlkcz17fTtmdW5jdGlvbiB5KEEsSSl7ST1JWzBdLEE9QVswXTt2YXIgTT1BLl9wcml2YXRlLmNoaWxkcmVuLFA9QS5pZCgpO0ZmKE0sSSksSS5fcHJpdmF0ZS5wYXJlbnQ9bnVsbCxnLmlkc1tQXXx8KGcuaWRzW1BdPSEwLGcucHVzaChBKSl9byh5LCJyZW1vdmVDaGlsZFJlZiIpLHIuZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlKCksZSYmYS5yZW1vdmVGcm9tUG9vbChuKTtmb3IodmFyIHY9MDt2PG4ubGVuZ3RoO3YrKyl7dmFyIHg9blt2XTtpZih4LmlzRWRnZSgpKXt2YXIgYj14LnNvdXJjZSgpWzBdLFQ9eC50YXJnZXQoKVswXTtwKGIseCkscChULHgpO2Zvcih2YXIgUz14LnBhcmFsbGVsRWRnZXMoKSx3PTA7dzxTLmxlbmd0aDt3Kyspe3ZhciBFPVNbd107bShFKSxFLmlzQnVuZGxlZEJlemllcigpJiZFLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpfX1lbHNle3ZhciBfPXgucGFyZW50KCk7Xy5sZW5ndGghPT0wJiZ5KF8seCl9ZSYmKHguX3ByaXZhdGUucmVtb3ZlZD0hMCl9dmFyIEM9YS5fcHJpdmF0ZS5lbGVtZW50czthLl9wcml2YXRlLmhhc0NvbXBvdW5kTm9kZXM9ITE7Zm9yKHZhciBEPTA7RDxDLmxlbmd0aDtEKyspe3ZhciBPPUNbRF07aWYoTy5pc1BhcmVudCgpKXthLl9wcml2YXRlLmhhc0NvbXBvdW5kTm9kZXM9ITA7YnJlYWt9fXZhciBSPW5ldyBTYSh0aGlzLmN5KCksbik7Ui5zaXplKCk+MCYmKHQ/Ui5lbWl0QW5kTm90aWZ5KCJyZW1vdmUiKTplJiZSLmVtaXQoInJlbW92ZSIpKTtmb3IodmFyIGs9MDtrPGcubGVuZ3RoO2srKyl7dmFyIEw9Z1trXTsoIWV8fCFMLnJlbW92ZWQoKSkmJkwudXBkYXRlU3R5bGUoKX1yZXR1cm4gUn07TW4ubW92ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9wcml2YXRlLmN5LHI9dGhpcyxuPSExLGk9ITEsYT1vKGZ1bmN0aW9uKGcpe3JldHVybiBnPT1udWxsP2c6IiIrZ30sInRvU3RyaW5nIik7aWYodC5zb3VyY2UhPT12b2lkIDB8fHQudGFyZ2V0IT09dm9pZCAwKXt2YXIgcz1hKHQuc291cmNlKSxsPWEodC50YXJnZXQpLHU9cyE9bnVsbCYmZS5oYXNFbGVtZW50V2l0aElkKHMpLGg9bCE9bnVsbCYmZS5oYXNFbGVtZW50V2l0aElkKGwpOyh1fHxoKSYmKGUuYmF0Y2goZnVuY3Rpb24oKXtyLnJlbW92ZShuLGkpLHIuZW1pdEFuZE5vdGlmeSgibW92ZW91dCIpO2Zvcih2YXIgbT0wO208ci5sZW5ndGg7bSsrKXt2YXIgZz1yW21dLHk9Zy5fcHJpdmF0ZS5kYXRhO2cuaXNFZGdlKCkmJih1JiYoeS5zb3VyY2U9cyksaCYmKHkudGFyZ2V0PWwpKX1yLnJlc3RvcmUobixpKX0pLHIuZW1pdEFuZE5vdGlmeSgibW92ZSIpKX1lbHNlIGlmKHQucGFyZW50IT09dm9pZCAwKXt2YXIgZj1hKHQucGFyZW50KSxkPWY9PT1udWxsfHxlLmhhc0VsZW1lbnRXaXRoSWQoZik7aWYoZCl7dmFyIHA9Zj09PW51bGw/dm9pZCAwOmY7ZS5iYXRjaChmdW5jdGlvbigpe3ZhciBtPXIucmVtb3ZlKG4saSk7bS5lbWl0QW5kTm90aWZ5KCJtb3Zlb3V0Iik7Zm9yKHZhciBnPTA7ZzxyLmxlbmd0aDtnKyspe3ZhciB5PXJbZ10sdj15Ll9wcml2YXRlLmRhdGE7eS5pc05vZGUoKSYmKHYucGFyZW50PXApfW0ucmVzdG9yZShuLGkpfSksci5lbWl0QW5kTm90aWZ5KCJtb3ZlIil9fXJldHVybiB0aGlzfTtbT2dlLHlRZSxSNixJZixpeSxNUWUsaUMsalFlLHMxZSxvMWUsZVplLEg2LE42LEVhLE9mLEhhXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lyKE1uLHQpfSk7b1plPXthZGQ6byhmdW5jdGlvbihlKXt2YXIgcixuPXRoaXM7aWYoeG8oZSkpe3ZhciBpPWU7aWYoaS5fcHJpdmF0ZS5jeT09PW4pcj1pLnJlc3RvcmUoKTtlbHNle2Zvcih2YXIgYT1bXSxzPTA7czxpLmxlbmd0aDtzKyspe3ZhciBsPWlbc107YS5wdXNoKGwuanNvbigpKX1yPW5ldyBTYShuLGEpfX1lbHNlIGlmKEVuKGUpKXt2YXIgdT1lO3I9bmV3IFNhKG4sdSl9ZWxzZSBpZihVcihlKSYmKEVuKGUubm9kZXMpfHxFbihlLmVkZ2VzKSkpe2Zvcih2YXIgaD1lLGY9W10sZD1bIm5vZGVzIiwiZWRnZXMiXSxwPTAsbT1kLmxlbmd0aDtwPG07cCsrKXt2YXIgZz1kW3BdLHk9aFtnXTtpZihFbih5KSlmb3IodmFyIHY9MCx4PXkubGVuZ3RoO3Y8eDt2Kyspe3ZhciBiPWlyKHtncm91cDpnfSx5W3ZdKTtmLnB1c2goYil9fXI9bmV3IFNhKG4sZil9ZWxzZXt2YXIgVD1lO3I9bmV3IFo2KG4sVCkuY29sbGVjdGlvbigpfXJldHVybiByfSwiYWRkIikscmVtb3ZlOm8oZnVuY3Rpb24oZSl7aWYoIXhvKGUpKXtpZihadChlKSl7dmFyIHI9ZTtlPXRoaXMuJChyKX19cmV0dXJuIGUucmVtb3ZlKCl9LCJyZW1vdmUiKX07byhsWmUsImdlbmVyYXRlQ3ViaWNCZXppZXIiKTtjWmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KG4pe3JldHVybi1uLnRlbnNpb24qbi54LW4uZnJpY3Rpb24qbi52fW8odCwic3ByaW5nQWNjZWxlcmF0aW9uRm9yU3RhdGUiKTtmdW5jdGlvbiBlKG4saSxhKXt2YXIgcz17eDpuLngrYS5keCppLHY6bi52K2EuZHYqaSx0ZW5zaW9uOm4udGVuc2lvbixmcmljdGlvbjpuLmZyaWN0aW9ufTtyZXR1cm57ZHg6cy52LGR2OnQocyl9fW8oZSwic3ByaW5nRXZhbHVhdGVTdGF0ZVdpdGhEZXJpdmF0aXZlIik7ZnVuY3Rpb24gcihuLGkpe3ZhciBhPXtkeDpuLnYsZHY6dChuKX0scz1lKG4saSouNSxhKSxsPWUobixpKi41LHMpLHU9ZShuLGksbCksaD0xLzYqKGEuZHgrMioocy5keCtsLmR4KSt1LmR4KSxmPTEvNiooYS5kdisyKihzLmR2K2wuZHYpK3UuZHYpO3JldHVybiBuLng9bi54K2gqaSxuLnY9bi52K2YqaSxufXJldHVybiBvKHIsInNwcmluZ0ludGVncmF0ZVN0YXRlIiksbyhmdW5jdGlvbiBuKGksYSxzKXt2YXIgbD17eDotMSx2OjAsdGVuc2lvbjpudWxsLGZyaWN0aW9uOm51bGx9LHU9WzBdLGg9MCxmPTEvMWU0LGQ9MTYvMWUzLHAsbSxnO2ZvcihpPXBhcnNlRmxvYXQoaSl8fDUwMCxhPXBhcnNlRmxvYXQoYSl8fDIwLHM9c3x8bnVsbCxsLnRlbnNpb249aSxsLmZyaWN0aW9uPWEscD1zIT09bnVsbCxwPyhoPW4oaSxhKSxtPWgvcypkKTptPWQ7Zz1yKGd8fGwsbSksdS5wdXNoKDErZy54KSxoKz0xNixNYXRoLmFicyhnLngpPmYmJk1hdGguYWJzKGcudik+ZjspO3JldHVybiBwP2Z1bmN0aW9uKHkpe3JldHVybiB1W3kqKHUubGVuZ3RoLTEpfDBdfTpofSwic3ByaW5nUks0RmFjdG9yeSIpfSgpLE5uPW8oZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9bFplKGUscixuLGkpO3JldHVybiBmdW5jdGlvbihzLGwsdSl7cmV0dXJuIHMrKGwtcykqYSh1KX19LCJjdWJpY0JlemllciIpLE02PXtsaW5lYXI6byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIGUrKHItZSkqbn0sImxpbmVhciIpLGVhc2U6Tm4oLjI1LC4xLC4yNSwxKSwiZWFzZS1pbiI6Tm4oLjQyLDAsMSwxKSwiZWFzZS1vdXQiOk5uKDAsMCwuNTgsMSksImVhc2UtaW4tb3V0IjpObiguNDIsMCwuNTgsMSksImVhc2UtaW4tc2luZSI6Tm4oLjQ3LDAsLjc0NSwuNzE1KSwiZWFzZS1vdXQtc2luZSI6Tm4oLjM5LC41NzUsLjU2NSwxKSwiZWFzZS1pbi1vdXQtc2luZSI6Tm4oLjQ0NSwuMDUsLjU1LC45NSksImVhc2UtaW4tcXVhZCI6Tm4oLjU1LC4wODUsLjY4LC41MyksImVhc2Utb3V0LXF1YWQiOk5uKC4yNSwuNDYsLjQ1LC45NCksImVhc2UtaW4tb3V0LXF1YWQiOk5uKC40NTUsLjAzLC41MTUsLjk1NSksImVhc2UtaW4tY3ViaWMiOk5uKC41NSwuMDU1LC42NzUsLjE5KSwiZWFzZS1vdXQtY3ViaWMiOk5uKC4yMTUsLjYxLC4zNTUsMSksImVhc2UtaW4tb3V0LWN1YmljIjpObiguNjQ1LC4wNDUsLjM1NSwxKSwiZWFzZS1pbi1xdWFydCI6Tm4oLjg5NSwuMDMsLjY4NSwuMjIpLCJlYXNlLW91dC1xdWFydCI6Tm4oLjE2NSwuODQsLjQ0LDEpLCJlYXNlLWluLW91dC1xdWFydCI6Tm4oLjc3LDAsLjE3NSwxKSwiZWFzZS1pbi1xdWludCI6Tm4oLjc1NSwuMDUsLjg1NSwuMDYpLCJlYXNlLW91dC1xdWludCI6Tm4oLjIzLDEsLjMyLDEpLCJlYXNlLWluLW91dC1xdWludCI6Tm4oLjg2LDAsLjA3LDEpLCJlYXNlLWluLWV4cG8iOk5uKC45NSwuMDUsLjc5NSwuMDM1KSwiZWFzZS1vdXQtZXhwbyI6Tm4oLjE5LDEsLjIyLDEpLCJlYXNlLWluLW91dC1leHBvIjpObigxLDAsMCwxKSwiZWFzZS1pbi1jaXJjIjpObiguNiwuMDQsLjk4LC4zMzUpLCJlYXNlLW91dC1jaXJjIjpObiguMDc1LC44MiwuMTY1LDEpLCJlYXNlLWluLW91dC1jaXJjIjpObiguNzg1LC4xMzUsLjE1LC44Niksc3ByaW5nOm8oZnVuY3Rpb24oZSxyLG4pe2lmKG49PT0wKXJldHVybiBNNi5saW5lYXI7dmFyIGk9Y1plKGUscixuKTtyZXR1cm4gZnVuY3Rpb24oYSxzLGwpe3JldHVybiBhKyhzLWEpKmkobCl9fSwic3ByaW5nIiksImN1YmljLWJlemllciI6Tm59O28oRG1lLCJnZXRFYXNlZFZhbHVlIik7byhMbWUsImdldFZhbHVlIik7byhXMSwiZWFzZSIpO28odVplLCJzdGVwJDEiKTtvKFZiLCJ2YWxpZCIpO28oaFplLCJzdGFydEFuaW1hdGlvbiIpO28oUm1lLCJzdGVwQWxsIik7ZlplPXthbmltYXRlOnVuLmFuaW1hdGUoKSxhbmltYXRpb246dW4uYW5pbWF0aW9uKCksYW5pbWF0ZWQ6dW4uYW5pbWF0ZWQoKSxjbGVhclF1ZXVlOnVuLmNsZWFyUXVldWUoKSxkZWxheTp1bi5kZWxheSgpLGRlbGF5QW5pbWF0aW9uOnVuLmRlbGF5QW5pbWF0aW9uKCksc3RvcDp1bi5zdG9wKCksYWRkVG9BbmltYXRpb25Qb29sOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcztyLnN0eWxlRW5hYmxlZCgpJiZyLl9wcml2YXRlLmFuaUVsZXMubWVyZ2UoZSl9LCJhZGRUb0FuaW1hdGlvblBvb2wiKSxzdG9wQW5pbWF0aW9uTG9vcDpvKGZ1bmN0aW9uKCl7dGhpcy5fcHJpdmF0ZS5hbmltYXRpb25zUnVubmluZz0hMX0sInN0b3BBbmltYXRpb25Mb29wIiksc3RhcnRBbmltYXRpb25Mb29wOm8oZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKGUuX3ByaXZhdGUuYW5pbWF0aW9uc1J1bm5pbmc9ITAsIWUuc3R5bGVFbmFibGVkKCkpcmV0dXJuO2Z1bmN0aW9uIHIoKXtlLl9wcml2YXRlLmFuaW1hdGlvbnNSdW5uaW5nJiYkNihvKGZ1bmN0aW9uKGEpe1JtZShhLGUpLHIoKX0sImFuaW1hdGlvblN0ZXAiKSl9byhyLCJoZWFkbGVzc1N0ZXAiKTt2YXIgbj1lLnJlbmRlcmVyKCk7biYmbi5iZWZvcmVSZW5kZXI/bi5iZWZvcmVSZW5kZXIobyhmdW5jdGlvbihhLHMpe1JtZShzLGUpfSwicmVuZGVyZXJBbmltYXRpb25TdGVwIiksbi5iZWZvcmVSZW5kZXJQcmlvcml0aWVzLmFuaW1hdGlvbnMpOnIoKX0sInN0YXJ0QW5pbWF0aW9uTG9vcCIpfSxkWmU9e3F1YWxpZmllckNvbXBhcmU6byhmdW5jdGlvbihlLHIpe3JldHVybiBlPT1udWxsfHxyPT1udWxsP2U9PW51bGwmJnI9PW51bGw6ZS5zYW1lVGV4dChyKX0sInF1YWxpZmllckNvbXBhcmUiKSxldmVudE1hdGNoZXM6byhmdW5jdGlvbihlLHIsbil7dmFyIGk9ci5xdWFsaWZpZXI7cmV0dXJuIGkhPW51bGw/ZSE9PW4udGFyZ2V0JiZmNChuLnRhcmdldCkmJmkubWF0Y2hlcyhuLnRhcmdldCk6ITB9LCJldmVudE1hdGNoZXMiKSxhZGRFdmVudEZpZWxkczpvKGZ1bmN0aW9uKGUscil7ci5jeT1lLHIudGFyZ2V0PWV9LCJhZGRFdmVudEZpZWxkcyIpLGNhbGxiYWNrQ29udGV4dDpvKGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gci5xdWFsaWZpZXIhPW51bGw/bi50YXJnZXQ6ZX0sImNhbGxiYWNrQ29udGV4dCIpfSxFNj1vKGZ1bmN0aW9uKGUpe3JldHVybiBadChlKT9uZXcgJGYoZSk6ZX0sImFyZ1NlbGVjdG9yIiksdTFlPXtjcmVhdGVFbWl0dGVyOm8oZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9wcml2YXRlO3JldHVybiBlLmVtaXR0ZXJ8fChlLmVtaXR0ZXI9bmV3IGFDKGRaZSx0aGlzKSksdGhpc30sImNyZWF0ZUVtaXR0ZXIiKSxlbWl0dGVyOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbWl0dGVyfSwiZW1pdHRlciIpLG9uOm8oZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5vbihlLEU2KHIpLG4pLHRoaXN9LCJvbiIpLHJlbW92ZUxpc3RlbmVyOm8oZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5yZW1vdmVMaXN0ZW5lcihlLEU2KHIpLG4pLHRoaXN9LCJyZW1vdmVMaXN0ZW5lciIpLHJlbW92ZUFsbExpc3RlbmVyczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW1pdHRlcigpLnJlbW92ZUFsbExpc3RlbmVycygpLHRoaXN9LCJyZW1vdmVBbGxMaXN0ZW5lcnMiKSxvbmU6byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIHRoaXMuZW1pdHRlcigpLm9uZShlLEU2KHIpLG4pLHRoaXN9LCJvbmUiKSxvbmNlOm8oZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5vbmUoZSxFNihyKSxuKSx0aGlzfSwib25jZSIpLGVtaXQ6byhmdW5jdGlvbihlLHIpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5lbWl0KGUsciksdGhpc30sImVtaXQiKSxlbWl0QW5kTm90aWZ5Om8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gdGhpcy5lbWl0KGUpLHRoaXMubm90aWZ5KGUsciksdGhpc30sImVtaXRBbmROb3RpZnkiKX07dW4uZXZlbnRBbGlhc2VzT24odTFlKTtDQj17cG5nOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fcHJpdmF0ZS5yZW5kZXJlcjtyZXR1cm4gZT1lfHx7fSxyLnBuZyhlKX0sInBuZyIpLGpwZzpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuX3ByaXZhdGUucmVuZGVyZXI7cmV0dXJuIGU9ZXx8e30sZS5iZz1lLmJnfHwiI2ZmZiIsci5qcGcoZSl9LCJqcGciKX07Q0IuanBlZz1DQi5qcGc7STY9e2xheW91dDpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXM7aWYoZT09bnVsbCl7b2koIkxheW91dCBvcHRpb25zIG11c3QgYmUgc3BlY2lmaWVkIHRvIG1ha2UgYSBsYXlvdXQiKTtyZXR1cm59aWYoZS5uYW1lPT1udWxsKXtvaSgiQSBgbmFtZWAgbXVzdCBiZSBzcGVjaWZpZWQgdG8gbWFrZSBhIGxheW91dCIpO3JldHVybn12YXIgbj1lLm5hbWUsaT1yLmV4dGVuc2lvbigibGF5b3V0IixuKTtpZihpPT1udWxsKXtvaSgiTm8gc3VjaCBsYXlvdXQgYCIrbisiYCBmb3VuZC4gIERpZCB5b3UgZm9yZ2V0IHRvIGltcG9ydCBpdCBhbmQgYGN5dG9zY2FwZS51c2UoKWAgaXQ/Iik7cmV0dXJufXZhciBhO1p0KGUuZWxlcyk/YT1yLiQoZS5lbGVzKTphPWUuZWxlcyE9bnVsbD9lLmVsZXM6ci4kKCk7dmFyIHM9bmV3IGkoaXIoe30sZSx7Y3k6cixlbGVzOmF9KSk7cmV0dXJuIHN9LCJsYXlvdXQiKX07STYuY3JlYXRlTGF5b3V0PUk2Lm1ha2VMYXlvdXQ9STYubGF5b3V0O3BaZT17bm90aWZ5Om8oZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLl9wcml2YXRlO2lmKHRoaXMuYmF0Y2hpbmcoKSl7bi5iYXRjaE5vdGlmaWNhdGlvbnM9bi5iYXRjaE5vdGlmaWNhdGlvbnN8fHt9O3ZhciBpPW4uYmF0Y2hOb3RpZmljYXRpb25zW2VdPW4uYmF0Y2hOb3RpZmljYXRpb25zW2VdfHx0aGlzLmNvbGxlY3Rpb24oKTtyIT1udWxsJiZpLm1lcmdlKHIpO3JldHVybn1pZihuLm5vdGlmaWNhdGlvbnNFbmFibGVkKXt2YXIgYT10aGlzLnJlbmRlcmVyKCk7dGhpcy5kZXN0cm95ZWQoKXx8IWF8fGEubm90aWZ5KGUscil9fSwibm90aWZ5Iiksbm90aWZpY2F0aW9uczpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuX3ByaXZhdGU7cmV0dXJuIGU9PT12b2lkIDA/ci5ub3RpZmljYXRpb25zRW5hYmxlZDooci5ub3RpZmljYXRpb25zRW5hYmxlZD0hIWUsdGhpcyl9LCJub3RpZmljYXRpb25zIiksbm9Ob3RpZmljYXRpb25zOm8oZnVuY3Rpb24oZSl7dGhpcy5ub3RpZmljYXRpb25zKCExKSxlKCksdGhpcy5ub3RpZmljYXRpb25zKCEwKX0sIm5vTm90aWZpY2F0aW9ucyIpLGJhdGNoaW5nOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5iYXRjaENvdW50PjB9LCJiYXRjaGluZyIpLHN0YXJ0QmF0Y2g6byhmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3ByaXZhdGU7cmV0dXJuIGUuYmF0Y2hDb3VudD09bnVsbCYmKGUuYmF0Y2hDb3VudD0wKSxlLmJhdGNoQ291bnQ9PT0wJiYoZS5iYXRjaFN0eWxlRWxlcz10aGlzLmNvbGxlY3Rpb24oKSxlLmJhdGNoTm90aWZpY2F0aW9ucz17fSksZS5iYXRjaENvdW50KyssdGhpc30sInN0YXJ0QmF0Y2giKSxlbmRCYXRjaDpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcHJpdmF0ZTtpZihlLmJhdGNoQ291bnQ9PT0wKXJldHVybiB0aGlzO2lmKGUuYmF0Y2hDb3VudC0tLGUuYmF0Y2hDb3VudD09PTApe2UuYmF0Y2hTdHlsZUVsZXMudXBkYXRlU3R5bGUoKTt2YXIgcj10aGlzLnJlbmRlcmVyKCk7T2JqZWN0LmtleXMoZS5iYXRjaE5vdGlmaWNhdGlvbnMpLmZvckVhY2goZnVuY3Rpb24obil7dmFyIGk9ZS5iYXRjaE5vdGlmaWNhdGlvbnNbbl07aS5lbXB0eSgpP3Iubm90aWZ5KG4pOnIubm90aWZ5KG4saSl9KX1yZXR1cm4gdGhpc30sImVuZEJhdGNoIiksYmF0Y2g6byhmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zdGFydEJhdGNoKCksZSgpLHRoaXMuZW5kQmF0Y2goKSx0aGlzfSwiYmF0Y2giKSxiYXRjaERhdGE6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzO3JldHVybiB0aGlzLmJhdGNoKGZ1bmN0aW9uKCl7Zm9yKHZhciBuPU9iamVjdC5rZXlzKGUpLGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIGE9bltpXSxzPWVbYV0sbD1yLmdldEVsZW1lbnRCeUlkKGEpO2wuZGF0YShzKX19KX0sImJhdGNoRGF0YSIpfSxtWmU9b2Eoe2hpZGVFZGdlc09uVmlld3BvcnQ6ITEsdGV4dHVyZU9uVmlld3BvcnQ6ITEsbW90aW9uQmx1cjohMSxtb3Rpb25CbHVyT3BhY2l0eTouMDUscGl4ZWxSYXRpbzp2b2lkIDAsZGVza3RvcFRhcFRocmVzaG9sZDo0LHRvdWNoVGFwVGhyZXNob2xkOjgsd2hlZWxTZW5zaXRpdml0eToxLGRlYnVnOiExLHNob3dGcHM6ITEsd2ViZ2w6ITEsd2ViZ2xEZWJ1ZzohMSx3ZWJnbERlYnVnU2hvd0F0bGFzZXM6ITEsd2ViZ2xUZXhTaXplOjIwNDgsd2ViZ2xUZXhSb3dzOjEyLHdlYmdsQmF0Y2hTaXplOjIwNDgsd2ViZ2xUZXhQZXJCYXRjaDoxNCx3ZWJnbEJnQ29sb3I6WzI1NSwyNTUsMjU1XX0pLEFCPXtyZW5kZXJUbzpvKGZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPXRoaXMuX3ByaXZhdGUucmVuZGVyZXI7cmV0dXJuIGEucmVuZGVyVG8oZSxyLG4saSksdGhpc30sInJlbmRlclRvIikscmVuZGVyZXI6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLnJlbmRlcmVyfSwicmVuZGVyZXIiKSxmb3JjZVJlbmRlcjpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm90aWZ5KCJkcmF3IiksdGhpc30sImZvcmNlUmVuZGVyIikscmVzaXplOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnZhbGlkYXRlU2l6ZSgpLHRoaXMuZW1pdEFuZE5vdGlmeSgicmVzaXplIiksdGhpc30sInJlc2l6ZSIpLGluaXRSZW5kZXJlcjpvKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMsbj1yLmV4dGVuc2lvbigicmVuZGVyZXIiLGUubmFtZSk7aWYobj09bnVsbCl7b2koIkNhbiBub3QgaW5pdGlhbGlzZTogTm8gc3VjaCByZW5kZXJlciBgIi5jb25jYXQoZS5uYW1lLCJgIGZvdW5kLiBEaWQgeW91IGZvcmdldCB0byBpbXBvcnQgaXQgYW5kIGBjeXRvc2NhcGUudXNlKClgIGl0PyIpKTtyZXR1cm59ZS53aGVlbFNlbnNpdGl2aXR5IT09dm9pZCAwJiZobigiWW91IGhhdmUgc2V0IGEgY3VzdG9tIHdoZWVsIHNlbnNpdGl2aXR5LiAgVGhpcyB3aWxsIG1ha2UgeW91ciBhcHAgem9vbSB1bm5hdHVyYWxseSB3aGVuIHVzaW5nIG1haW5zdHJlYW0gbWljZS4gIFlvdSBzaG91bGQgY2hhbmdlIHRoaXMgdmFsdWUgZnJvbSB0aGUgZGVmYXVsdCBvbmx5IGlmIHlvdSBjYW4gZ3VhcmFudGVlIHRoYXQgYWxsIHlvdXIgdXNlcnMgd2lsbCB1c2UgdGhlIHNhbWUgaGFyZHdhcmUgYW5kIE9TIGNvbmZpZ3VyYXRpb24gYXMgeW91ciBjdXJyZW50IG1hY2hpbmUuIik7dmFyIGk9bVplKGUpO2kuY3k9cixyLl9wcml2YXRlLnJlbmRlcmVyPW5ldyBuKGkpLHRoaXMubm90aWZ5KCJpbml0Iil9LCJpbml0UmVuZGVyZXIiKSxkZXN0cm95UmVuZGVyZXI6byhmdW5jdGlvbigpe3ZhciBlPXRoaXM7ZS5ub3RpZnkoImRlc3Ryb3kiKTt2YXIgcj1lLmNvbnRhaW5lcigpO2lmKHIpZm9yKHIuX2N5cmVnPW51bGw7ci5jaGlsZE5vZGVzLmxlbmd0aD4wOylyLnJlbW92ZUNoaWxkKHIuY2hpbGROb2Rlc1swXSk7ZS5fcHJpdmF0ZS5yZW5kZXJlcj1udWxsLGUubXV0YWJsZUVsZW1lbnRzKCkuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgaT1uLl9wcml2YXRlO2kucnNjcmF0Y2g9e30saS5yc3R5bGU9e30saS5hbmltYXRpb24uY3VycmVudD1bXSxpLmFuaW1hdGlvbi5xdWV1ZT1bXX0pfSwiZGVzdHJveVJlbmRlcmVyIiksb25SZW5kZXI6byhmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vbigicmVuZGVyIixlKX0sIm9uUmVuZGVyIiksb2ZmUmVuZGVyOm8oZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub2ZmKCJyZW5kZXIiLGUpfSwib2ZmUmVuZGVyIil9O0FCLmludmFsaWRhdGVEaW1lbnNpb25zPUFCLnJlc2l6ZTtPNj17Y29sbGVjdGlvbjpvKGZ1bmN0aW9uKGUscil7cmV0dXJuIFp0KGUpP3RoaXMuJChlKTp4byhlKT9lLmNvbGxlY3Rpb24oKTpFbihlKT8ocnx8KHI9e30pLG5ldyBTYSh0aGlzLGUsci51bmlxdWUsci5yZW1vdmVkKSk6bmV3IFNhKHRoaXMpfSwiY29sbGVjdGlvbiIpLG5vZGVzOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy4kKGZ1bmN0aW9uKG4pe3JldHVybiBuLmlzTm9kZSgpfSk7cmV0dXJuIGU/ci5maWx0ZXIoZSk6cn0sIm5vZGVzIiksZWRnZXM6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLiQoZnVuY3Rpb24obil7cmV0dXJuIG4uaXNFZGdlKCl9KTtyZXR1cm4gZT9yLmZpbHRlcihlKTpyfSwiZWRnZXMiKSwkOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fcHJpdmF0ZS5lbGVtZW50cztyZXR1cm4gZT9yLmZpbHRlcihlKTpyLnNwYXduU2VsZigpfSwiJCIpLG11dGFibGVFbGVtZW50czpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuZWxlbWVudHN9LCJtdXRhYmxlRWxlbWVudHMiKX07TzYuZWxlbWVudHM9TzYuZmlsdGVyPU82LiQ7cWE9e30sS2I9InQiLGdaZT0iZiI7cWEuYXBwbHk9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMscj1lLl9wcml2YXRlLG49ci5jeSxpPW4uY29sbGVjdGlvbigpLGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIHM9dFthXSxsPWUuZ2V0Q29udGV4dE1ldGEocyk7aWYoIWwuZW1wdHkpe3ZhciB1PWUuZ2V0Q29udGV4dFN0eWxlKGwpLGg9ZS5hcHBseUNvbnRleHRTdHlsZShsLHUscyk7cy5fcHJpdmF0ZS5hcHBsaWVkSW5pdFN0eWxlP2UudXBkYXRlVHJhbnNpdGlvbnMocyxoLmRpZmZQcm9wcyk6cy5fcHJpdmF0ZS5hcHBsaWVkSW5pdFN0eWxlPSEwO3ZhciBmPWUudXBkYXRlU3R5bGVIaW50cyhzKTtmJiZpLnB1c2gocyl9fXJldHVybiBpfTtxYS5nZXRQcm9wZXJ0aWVzRGlmZj1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMsbj1yLl9wcml2YXRlLnByb3BEaWZmcz1yLl9wcml2YXRlLnByb3BEaWZmc3x8e30saT10KyItIitlLGE9bltpXTtpZihhKXJldHVybiBhO2Zvcih2YXIgcz1bXSxsPXt9LHU9MDt1PHIubGVuZ3RoO3UrKyl7dmFyIGg9clt1XSxmPXRbdV09PT1LYixkPWVbdV09PT1LYixwPWYhPT1kLG09aC5tYXBwZWRQcm9wZXJ0aWVzLmxlbmd0aD4wO2lmKHB8fGQmJm0pe3ZhciBnPXZvaWQgMDtwJiZtfHxwP2c9aC5wcm9wZXJ0aWVzOm0mJihnPWgubWFwcGVkUHJvcGVydGllcyk7Zm9yKHZhciB5PTA7eTxnLmxlbmd0aDt5Kyspe2Zvcih2YXIgdj1nW3ldLHg9di5uYW1lLGI9ITEsVD11KzE7VDxyLmxlbmd0aDtUKyspe3ZhciBTPXJbVF0sdz1lW1RdPT09S2I7aWYodyYmKGI9Uy5wcm9wZXJ0aWVzW3YubmFtZV0hPW51bGwsYikpYnJlYWt9IWxbeF0mJiFiJiYobFt4XT0hMCxzLnB1c2goeCkpfX19cmV0dXJuIG5baV09cyxzfTtxYS5nZXRDb250ZXh0TWV0YT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcyxyPSIiLG4saT10Ll9wcml2YXRlLnN0eWxlQ3h0S2V5fHwiIixhPTA7YTxlLmxlbmd0aDthKyspe3ZhciBzPWVbYV0sbD1zLnNlbGVjdG9yJiZzLnNlbGVjdG9yLm1hdGNoZXModCk7bD9yKz1LYjpyKz1nWmV9cmV0dXJuIG49ZS5nZXRQcm9wZXJ0aWVzRGlmZihpLHIpLHQuX3ByaXZhdGUuc3R5bGVDeHRLZXk9cix7a2V5OnIsZGlmZlByb3BOYW1lczpuLGVtcHR5Om4ubGVuZ3RoPT09MH19O3FhLmdldENvbnRleHRTdHlsZT1mdW5jdGlvbih0KXt2YXIgZT10LmtleSxyPXRoaXMsbj10aGlzLl9wcml2YXRlLmNvbnRleHRTdHlsZXM9dGhpcy5fcHJpdmF0ZS5jb250ZXh0U3R5bGVzfHx7fTtpZihuW2VdKXJldHVybiBuW2VdO2Zvcih2YXIgaT17X3ByaXZhdGU6e2tleTplfX0sYT0wO2E8ci5sZW5ndGg7YSsrKXt2YXIgcz1yW2FdLGw9ZVthXT09PUtiO2lmKGwpZm9yKHZhciB1PTA7dTxzLnByb3BlcnRpZXMubGVuZ3RoO3UrKyl7dmFyIGg9cy5wcm9wZXJ0aWVzW3VdO2lbaC5uYW1lXT1ofX1yZXR1cm4gbltlXT1pLGl9O3FhLmFwcGx5Q29udGV4dFN0eWxlPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dGhpcyxpPXQuZGlmZlByb3BOYW1lcyxhPXt9LHM9bi50eXBlcyxsPTA7bDxpLmxlbmd0aDtsKyspe3ZhciB1PWlbbF0saD1lW3VdLGY9ci5wc3R5bGUodSk7aWYoIWgpaWYoZilmLmJ5cGFzcz9oPXtuYW1lOnUsZGVsZXRlQnlwYXNzZWQ6ITB9Omg9e25hbWU6dSxkZWxldGU6ITB9O2Vsc2UgY29udGludWU7aWYoZiE9PWgpe2lmKGgubWFwcGVkPT09cy5mbiYmZiE9bnVsbCYmZi5tYXBwaW5nIT1udWxsJiZmLm1hcHBpbmcudmFsdWU9PT1oLnZhbHVlKXt2YXIgZD1mLm1hcHBpbmcscD1kLmZuVmFsdWU9aC52YWx1ZShyKTtpZihwPT09ZC5wcmV2Rm5WYWx1ZSljb250aW51ZX12YXIgbT1hW3VdPXtwcmV2OmZ9O24uYXBwbHlQYXJzZWRQcm9wZXJ0eShyLGgpLG0ubmV4dD1yLnBzdHlsZSh1KSxtLm5leHQmJm0ubmV4dC5ieXBhc3MmJihtLm5leHQ9bS5uZXh0LmJ5cGFzc2VkKX19cmV0dXJue2RpZmZQcm9wczphfX07cWEudXBkYXRlU3R5bGVIaW50cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9wcml2YXRlLHI9dGhpcyxuPXIucHJvcGVydHlHcm91cE5hbWVzLGk9ci5wcm9wZXJ0eUdyb3VwS2V5cyxhPW8oZnVuY3Rpb24obmUsdGUsaGUpe3JldHVybiByLmdldFByb3BlcnRpZXNIYXNoKG5lLHRlLGhlKX0sInByb3BIYXNoIikscz1lLnN0eWxlS2V5O2lmKHQucmVtb3ZlZCgpKXJldHVybiExO3ZhciBsPWUuZ3JvdXA9PT0ibm9kZXMiLHU9dC5fcHJpdmF0ZS5zdHlsZTtuPU9iamVjdC5rZXlzKHUpO2Zvcih2YXIgaD0wO2g8aS5sZW5ndGg7aCsrKXt2YXIgZj1pW2hdO2Uuc3R5bGVLZXlzW2ZdPVtYMSxxYl19Zm9yKHZhciBkPW8oZnVuY3Rpb24obmUsdGUpe3JldHVybiBlLnN0eWxlS2V5c1t0ZV1bMF09dDQobmUsZS5zdHlsZUtleXNbdGVdWzBdKX0sInVwZGF0ZUdyS2V5MSIpLHA9byhmdW5jdGlvbihuZSx0ZSl7cmV0dXJuIGUuc3R5bGVLZXlzW3RlXVsxXT1yNChuZSxlLnN0eWxlS2V5c1t0ZV1bMV0pfSwidXBkYXRlR3JLZXkyIiksbT1vKGZ1bmN0aW9uKG5lLHRlKXtkKG5lLHRlKSxwKG5lLHRlKX0sInVwZGF0ZUdyS2V5IiksZz1vKGZ1bmN0aW9uKG5lLHRlKXtmb3IodmFyIGhlPTA7aGU8bmUubGVuZ3RoO2hlKyspe3ZhciBsZT1uZS5jaGFyQ29kZUF0KGhlKTtkKGxlLHRlKSxwKGxlLHRlKX19LCJ1cGRhdGVHcktleVdTdHIiKSx5PTJlOSx2PW8oZnVuY3Rpb24obmUpe3JldHVybi0xMjg8bmUmJm5lPDEyOCYmTWF0aC5mbG9vcihuZSkhPT1uZT95LShuZSoxMDI0fDApOm5lfSwiY2xlYW5OdW0iKSx4PTA7eDxuLmxlbmd0aDt4Kyspe3ZhciBiPW5beF0sVD11W2JdO2lmKFQhPW51bGwpe3ZhciBTPXRoaXMucHJvcGVydGllc1tiXSx3PVMudHlwZSxFPVMuZ3JvdXBLZXksXz12b2lkIDA7Uy5oYXNoT3ZlcnJpZGUhPW51bGw/Xz1TLmhhc2hPdmVycmlkZSh0LFQpOlQucGZWYWx1ZSE9bnVsbCYmKF89VC5wZlZhbHVlKTt2YXIgQz1TLmVudW1zPT1udWxsP1QudmFsdWU6bnVsbCxEPV8hPW51bGwsTz1DIT1udWxsLFI9RHx8TyxrPVQudW5pdHM7aWYody5udW1iZXImJlImJiF3Lm11bHRpcGxlKXt2YXIgTD1EP186QzttKHYoTCksRSksIUQmJmshPW51bGwmJmcoayxFKX1lbHNlIGcoVC5zdHJWYWx1ZSxFKX19Zm9yKHZhciBBPVtYMSxxYl0sST0wO0k8aS5sZW5ndGg7SSsrKXt2YXIgTT1pW0ldLFA9ZS5zdHlsZUtleXNbTV07QVswXT10NChQWzBdLEFbMF0pLEFbMV09cjQoUFsxXSxBWzFdKX1lLnN0eWxlS2V5PVRZZShBWzBdLEFbMV0pO3ZhciBCPWUuc3R5bGVLZXlzO2UubGFiZWxEaW1zS2V5PUxmKEIubGFiZWxEaW1lbnNpb25zKTt2YXIgRj1hKHQsWyJsYWJlbCJdLEIubGFiZWxEaW1lbnNpb25zKTtpZihlLmxhYmVsS2V5PUxmKEYpLGUubGFiZWxTdHlsZUtleT1MZihtNihCLmNvbW1vbkxhYmVsLEYpKSwhbCl7dmFyIHo9YSh0LFsic291cmNlLWxhYmVsIl0sQi5sYWJlbERpbWVuc2lvbnMpO2Uuc291cmNlTGFiZWxLZXk9TGYoeiksZS5zb3VyY2VMYWJlbFN0eWxlS2V5PUxmKG02KEIuY29tbW9uTGFiZWwseikpO3ZhciAkPWEodCxbInRhcmdldC1sYWJlbCJdLEIubGFiZWxEaW1lbnNpb25zKTtlLnRhcmdldExhYmVsS2V5PUxmKCQpLGUudGFyZ2V0TGFiZWxTdHlsZUtleT1MZihtNihCLmNvbW1vbkxhYmVsLCQpKX1pZihsKXt2YXIgVT1lLnN0eWxlS2V5cyxLPVUubm9kZUJvZHksZWU9VS5ub2RlQm9yZGVyLFk9VS5ub2RlT3V0bGluZSxjZT1VLmJhY2tncm91bmRJbWFnZSxaPVUuY29tcG91bmQsdWU9VS5waWUsUT1bSyxlZSxZLGNlLFosdWVdLmZpbHRlcihmdW5jdGlvbihqKXtyZXR1cm4gaiE9bnVsbH0pLnJlZHVjZShtNixbWDEscWJdKTtlLm5vZGVLZXk9TGYoUSksZS5oYXNQaWU9dWUhPW51bGwmJnVlWzBdIT09WDEmJnVlWzFdIT09cWJ9cmV0dXJuIHMhPT1lLnN0eWxlS2V5fTtxYS5jbGVhclN0eWxlSGludHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fcHJpdmF0ZTtlLnN0eWxlQ3h0S2V5PSIiLGUuc3R5bGVLZXlzPXt9LGUuc3R5bGVLZXk9bnVsbCxlLmxhYmVsS2V5PW51bGwsZS5sYWJlbFN0eWxlS2V5PW51bGwsZS5zb3VyY2VMYWJlbEtleT1udWxsLGUuc291cmNlTGFiZWxTdHlsZUtleT1udWxsLGUudGFyZ2V0TGFiZWxLZXk9bnVsbCxlLnRhcmdldExhYmVsU3R5bGVLZXk9bnVsbCxlLm5vZGVLZXk9bnVsbCxlLmhhc1BpZT1udWxsfTtxYS5hcHBseVBhcnNlZFByb3BlcnR5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxuPWUsaT10Ll9wcml2YXRlLnN0eWxlLGEscz1yLnR5cGVzLGw9ci5wcm9wZXJ0aWVzW24ubmFtZV0udHlwZSx1PW4uYnlwYXNzLGg9aVtuLm5hbWVdLGY9aCYmaC5ieXBhc3MsZD10Ll9wcml2YXRlLHA9Im1hcHBpbmciLG09byhmdW5jdGlvbihLKXtyZXR1cm4gSz09bnVsbD9udWxsOksucGZWYWx1ZSE9bnVsbD9LLnBmVmFsdWU6Sy52YWx1ZX0sImdldFZhbCIpLGc9byhmdW5jdGlvbigpe3ZhciBLPW0oaCksZWU9bShuKTtyLmNoZWNrVHJpZ2dlcnModCxuLm5hbWUsSyxlZSl9LCJjaGVja1RyaWdnZXJzIik7aWYoZS5uYW1lPT09ImN1cnZlLXN0eWxlIiYmdC5pc0VkZ2UoKSYmKGUudmFsdWUhPT0iYmV6aWVyIiYmdC5pc0xvb3AoKXx8ZS52YWx1ZT09PSJoYXlzdGFjayImJih0LnNvdXJjZSgpLmlzUGFyZW50KCl8fHQudGFyZ2V0KCkuaXNQYXJlbnQoKSkpJiYobj1lPXRoaXMucGFyc2UoZS5uYW1lLCJiZXppZXIiLHUpKSxuLmRlbGV0ZSlyZXR1cm4gaVtuLm5hbWVdPXZvaWQgMCxnKCksITA7aWYobi5kZWxldGVCeXBhc3NlZClyZXR1cm4gaD9oLmJ5cGFzcz8oaC5ieXBhc3NlZD12b2lkIDAsZygpLCEwKTohMTooZygpLCEwKTtpZihuLmRlbGV0ZUJ5cGFzcylyZXR1cm4gaD9oLmJ5cGFzcz8oaVtuLm5hbWVdPWguYnlwYXNzZWQsZygpLCEwKTohMTooZygpLCEwKTt2YXIgeT1vKGZ1bmN0aW9uKCl7aG4oIkRvIG5vdCBhc3NpZ24gbWFwcGluZ3MgdG8gZWxlbWVudHMgd2l0aG91dCBjb3JyZXNwb25kaW5nIGRhdGEgKGkuZS4gZWxlIGAiK3QuaWQoKSsiYCBoYXMgbm8gbWFwcGluZyBmb3IgcHJvcGVydHkgYCIrbi5uYW1lKyJgIHdpdGggZGF0YSBmaWVsZCBgIituLmZpZWxkKyJgKTsgdHJ5IGEgYFsiK24uZmllbGQrIl1gIHNlbGVjdG9yIHRvIGxpbWl0IHNjb3BlIHRvIGVsZW1lbnRzIHdpdGggYCIrbi5maWVsZCsiYCBkZWZpbmVkIil9LCJwcmludE1hcHBpbmdFcnIiKTtzd2l0Y2gobi5tYXBwZWQpe2Nhc2Ugcy5tYXBEYXRhOntmb3IodmFyIHY9bi5maWVsZC5zcGxpdCgiLiIpLHg9ZC5kYXRhLGI9MDtiPHYubGVuZ3RoJiZ4O2IrKyl7dmFyIFQ9dltiXTt4PXhbVF19aWYoeD09bnVsbClyZXR1cm4geSgpLCExO3ZhciBTO2lmKF90KHgpKXt2YXIgdz1uLmZpZWxkTWF4LW4uZmllbGRNaW47dz09PTA/Uz0wOlM9KHgtbi5maWVsZE1pbikvd31lbHNlIHJldHVybiBobigiRG8gbm90IHVzZSBjb250aW51b3VzIG1hcHBlcnMgd2l0aG91dCBzcGVjaWZ5aW5nIG51bWVyaWMgZGF0YSAoaS5lLiBgIituLmZpZWxkKyI6ICIreCsiYCBmb3IgYCIrdC5pZCgpKyJgIGlzIG5vbi1udW1lcmljKSIpLCExO2lmKFM8MD9TPTA6Uz4xJiYoUz0xKSxsLmNvbG9yKXt2YXIgRT1uLnZhbHVlTWluWzBdLF89bi52YWx1ZU1heFswXSxDPW4udmFsdWVNaW5bMV0sRD1uLnZhbHVlTWF4WzFdLE89bi52YWx1ZU1pblsyXSxSPW4udmFsdWVNYXhbMl0saz1uLnZhbHVlTWluWzNdPT1udWxsPzE6bi52YWx1ZU1pblszXSxMPW4udmFsdWVNYXhbM109PW51bGw/MTpuLnZhbHVlTWF4WzNdLEE9W01hdGgucm91bmQoRSsoXy1FKSpTKSxNYXRoLnJvdW5kKEMrKEQtQykqUyksTWF0aC5yb3VuZChPKyhSLU8pKlMpLE1hdGgucm91bmQoaysoTC1rKSpTKV07YT17YnlwYXNzOm4uYnlwYXNzLG5hbWU6bi5uYW1lLHZhbHVlOkEsc3RyVmFsdWU6InJnYigiK0FbMF0rIiwgIitBWzFdKyIsICIrQVsyXSsiKSJ9fWVsc2UgaWYobC5udW1iZXIpe3ZhciBJPW4udmFsdWVNaW4rKG4udmFsdWVNYXgtbi52YWx1ZU1pbikqUzthPXRoaXMucGFyc2Uobi5uYW1lLEksbi5ieXBhc3MscCl9ZWxzZSByZXR1cm4hMTtpZighYSlyZXR1cm4geSgpLCExO2EubWFwcGluZz1uLG49YTticmVha31jYXNlIHMuZGF0YTp7Zm9yKHZhciBNPW4uZmllbGQuc3BsaXQoIi4iKSxQPWQuZGF0YSxCPTA7QjxNLmxlbmd0aCYmUDtCKyspe3ZhciBGPU1bQl07UD1QW0ZdfWlmKFAhPW51bGwmJihhPXRoaXMucGFyc2Uobi5uYW1lLFAsbi5ieXBhc3MscCkpLCFhKXJldHVybiB5KCksITE7YS5tYXBwaW5nPW4sbj1hO2JyZWFrfWNhc2Ugcy5mbjp7dmFyIHo9bi52YWx1ZSwkPW4uZm5WYWx1ZSE9bnVsbD9uLmZuVmFsdWU6eih0KTtpZihuLnByZXZGblZhbHVlPSQsJD09bnVsbClyZXR1cm4gaG4oIkN1c3RvbSBmdW5jdGlvbiBtYXBwZXJzIG1heSBub3QgcmV0dXJuIG51bGwgKGkuZS4gYCIrbi5uYW1lKyJgIGZvciBlbGUgYCIrdC5pZCgpKyJgIGlzIG51bGwpIiksITE7aWYoYT10aGlzLnBhcnNlKG4ubmFtZSwkLG4uYnlwYXNzLHApLCFhKXJldHVybiBobigiQ3VzdG9tIGZ1bmN0aW9uIG1hcHBlcnMgbWF5IG5vdCByZXR1cm4gaW52YWxpZCB2YWx1ZXMgZm9yIHRoZSBwcm9wZXJ0eSB0eXBlIChpLmUuIGAiK24ubmFtZSsiYCBmb3IgZWxlIGAiK3QuaWQoKSsiYCBpcyBpbnZhbGlkKSIpLCExO2EubWFwcGluZz1RYyhuKSxuPWE7YnJlYWt9Y2FzZSB2b2lkIDA6YnJlYWs7ZGVmYXVsdDpyZXR1cm4hMX1yZXR1cm4gdT8oZj9uLmJ5cGFzc2VkPWguYnlwYXNzZWQ6bi5ieXBhc3NlZD1oLGlbbi5uYW1lXT1uKTpmP2guYnlwYXNzZWQ9bjppW24ubmFtZV09bixnKCksITB9O3FhLmNsZWFuRWxlbWVudHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtpZih0aGlzLmNsZWFyU3R5bGVIaW50cyhuKSxuLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpLG4uZGlydHlCb3VuZGluZ0JveENhY2hlKCksIWUpbi5fcHJpdmF0ZS5zdHlsZT17fTtlbHNlIGZvcih2YXIgaT1uLl9wcml2YXRlLnN0eWxlLGE9T2JqZWN0LmtleXMoaSkscz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgbD1hW3NdLHU9aVtsXTt1IT1udWxsJiYodS5ieXBhc3M/dS5ieXBhc3NlZD1udWxsOmlbbF09bnVsbCl9fX07cWEudXBkYXRlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcHJpdmF0ZS5jeSxlPXQubXV0YWJsZUVsZW1lbnRzKCk7ZS51cGRhdGVTdHlsZSgpfTtxYS51cGRhdGVUcmFuc2l0aW9ucz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMsbj10Ll9wcml2YXRlLGk9dC5wc3R5bGUoInRyYW5zaXRpb24tcHJvcGVydHkiKS52YWx1ZSxhPXQucHN0eWxlKCJ0cmFuc2l0aW9uLWR1cmF0aW9uIikucGZWYWx1ZSxzPXQucHN0eWxlKCJ0cmFuc2l0aW9uLWRlbGF5IikucGZWYWx1ZTtpZihpLmxlbmd0aD4wJiZhPjApe2Zvcih2YXIgbD17fSx1PSExLGg9MDtoPGkubGVuZ3RoO2grKyl7dmFyIGY9aVtoXSxkPXQucHN0eWxlKGYpLHA9ZVtmXTtpZihwKXt2YXIgbT1wLnByZXYsZz1tLHk9cC5uZXh0IT1udWxsP3AubmV4dDpkLHY9ITEseD12b2lkIDAsYj0xZS02O2cmJihfdChnLnBmVmFsdWUpJiZfdCh5LnBmVmFsdWUpPyh2PXkucGZWYWx1ZS1nLnBmVmFsdWUseD1nLnBmVmFsdWUrYip2KTpfdChnLnZhbHVlKSYmX3QoeS52YWx1ZSk/KHY9eS52YWx1ZS1nLnZhbHVlLHg9Zy52YWx1ZStiKnYpOkVuKGcudmFsdWUpJiZFbih5LnZhbHVlKSYmKHY9Zy52YWx1ZVswXSE9PXkudmFsdWVbMF18fGcudmFsdWVbMV0hPT15LnZhbHVlWzFdfHxnLnZhbHVlWzJdIT09eS52YWx1ZVsyXSx4PWcuc3RyVmFsdWUpLHYmJihsW2ZdPXkuc3RyVmFsdWUsdGhpcy5hcHBseUJ5cGFzcyh0LGYseCksdT0hMCkpfX1pZighdSlyZXR1cm47bi50cmFuc2l0aW9uaW5nPSEwLG5ldyBzeShmdW5jdGlvbihUKXtzPjA/dC5kZWxheUFuaW1hdGlvbihzKS5wbGF5KCkucHJvbWlzZSgpLnRoZW4oVCk6VCgpfSkudGhlbihmdW5jdGlvbigpe3JldHVybiB0LmFuaW1hdGlvbih7c3R5bGU6bCxkdXJhdGlvbjphLGVhc2luZzp0LnBzdHlsZSgidHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24iKS52YWx1ZSxxdWV1ZTohMX0pLnBsYXkoKS5wcm9taXNlKCl9KS50aGVuKGZ1bmN0aW9uKCl7ci5yZW1vdmVCeXBhc3Nlcyh0LGkpLHQuZW1pdEFuZE5vdGlmeSgic3R5bGUiKSxuLnRyYW5zaXRpb25pbmc9ITF9KX1lbHNlIG4udHJhbnNpdGlvbmluZyYmKHRoaXMucmVtb3ZlQnlwYXNzZXModCxpKSx0LmVtaXRBbmROb3RpZnkoInN0eWxlIiksbi50cmFuc2l0aW9uaW5nPSExKX07cWEuY2hlY2tUcmlnZ2VyPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgcz10aGlzLnByb3BlcnRpZXNbZV0sbD1pKHMpO2whPW51bGwmJmwocixuKSYmYShzKX07cWEuY2hlY2taT3JkZXJUcmlnZ2VyPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXM7dGhpcy5jaGVja1RyaWdnZXIodCxlLHIsbixmdW5jdGlvbihhKXtyZXR1cm4gYS50cmlnZ2Vyc1pPcmRlcn0sZnVuY3Rpb24oKXtpLl9wcml2YXRlLmN5Lm5vdGlmeSgiem9yZGVyIix0KX0pfTtxYS5jaGVja0JvdW5kc1RyaWdnZXI9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5jaGVja1RyaWdnZXIodCxlLHIsbixmdW5jdGlvbihpKXtyZXR1cm4gaS50cmlnZ2Vyc0JvdW5kc30sZnVuY3Rpb24oaSl7dC5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKSx0LmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpLGkudHJpZ2dlcnNCb3VuZHNPZlBhcmFsbGVsQmV6aWVycyYmZT09PSJjdXJ2ZS1zdHlsZSImJihyPT09ImJlemllciJ8fG49PT0iYmV6aWVyIikmJnQucGFyYWxsZWxFZGdlcygpLmZvckVhY2goZnVuY3Rpb24oYSl7YS5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKX0pLGkudHJpZ2dlcnNCb3VuZHNPZkNvbm5lY3RlZEVkZ2VzJiZlPT09ImRpc3BsYXkiJiYocj09PSJub25lInx8bj09PSJub25lIikmJnQuY29ubmVjdGVkRWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EuZGlydHlCb3VuZGluZ0JveENhY2hlKCl9KX0pfTtxYS5jaGVja1RyaWdnZXJzPWZ1bmN0aW9uKHQsZSxyLG4pe3QuZGlydHlTdHlsZUNhY2hlKCksdGhpcy5jaGVja1pPcmRlclRyaWdnZXIodCxlLHIsbiksdGhpcy5jaGVja0JvdW5kc1RyaWdnZXIodCxlLHIsbil9O3k0PXt9O3k0LmFwcGx5QnlwYXNzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMsYT1bXSxzPSEwO2lmKGU9PT0iKiJ8fGU9PT0iKioiKXtpZihyIT09dm9pZCAwKWZvcih2YXIgbD0wO2w8aS5wcm9wZXJ0aWVzLmxlbmd0aDtsKyspe3ZhciB1PWkucHJvcGVydGllc1tsXSxoPXUubmFtZSxmPXRoaXMucGFyc2UoaCxyLCEwKTtmJiZhLnB1c2goZil9fWVsc2UgaWYoWnQoZSkpe3ZhciBkPXRoaXMucGFyc2UoZSxyLCEwKTtkJiZhLnB1c2goZCl9ZWxzZSBpZihVcihlKSl7dmFyIHA9ZTtuPXI7Zm9yKHZhciBtPU9iamVjdC5rZXlzKHApLGc9MDtnPG0ubGVuZ3RoO2crKyl7dmFyIHk9bVtnXSx2PXBbeV07aWYodj09PXZvaWQgMCYmKHY9cFtLNih5KV0pLHYhPT12b2lkIDApe3ZhciB4PXRoaXMucGFyc2UoeSx2LCEwKTt4JiZhLnB1c2goeCl9fX1lbHNlIHJldHVybiExO2lmKGEubGVuZ3RoPT09MClyZXR1cm4hMTtmb3IodmFyIGI9ITEsVD0wO1Q8dC5sZW5ndGg7VCsrKXtmb3IodmFyIFM9dFtUXSx3PXt9LEU9dm9pZCAwLF89MDtfPGEubGVuZ3RoO18rKyl7dmFyIEM9YVtfXTtpZihuKXt2YXIgRD1TLnBzdHlsZShDLm5hbWUpO0U9d1tDLm5hbWVdPXtwcmV2OkR9fWI9dGhpcy5hcHBseVBhcnNlZFByb3BlcnR5KFMsUWMoQykpfHxiLG4mJihFLm5leHQ9Uy5wc3R5bGUoQy5uYW1lKSl9YiYmdGhpcy51cGRhdGVTdHlsZUhpbnRzKFMpLG4mJnRoaXMudXBkYXRlVHJhbnNpdGlvbnMoUyx3LHMpfXJldHVybiBifTt5NC5vdmVycmlkZUJ5cGFzcz1mdW5jdGlvbih0LGUscil7ZT1GQihlKTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXSxhPWkuX3ByaXZhdGUuc3R5bGVbZV0scz10aGlzLnByb3BlcnRpZXNbZV0udHlwZSxsPXMuY29sb3IsdT1zLm11dGlwbGUsaD1hP2EucGZWYWx1ZSE9bnVsbD9hLnBmVmFsdWU6YS52YWx1ZTpudWxsOyFhfHwhYS5ieXBhc3M/dGhpcy5hcHBseUJ5cGFzcyhpLGUscik6KGEudmFsdWU9cixhLnBmVmFsdWUhPW51bGwmJihhLnBmVmFsdWU9ciksbD9hLnN0clZhbHVlPSJyZ2IoIityLmpvaW4oIiwiKSsiKSI6dT9hLnN0clZhbHVlPXIuam9pbigiICIpOmEuc3RyVmFsdWU9IiIrcix0aGlzLnVwZGF0ZVN0eWxlSGludHMoaSkpLHRoaXMuY2hlY2tUcmlnZ2VycyhpLGUsaCxyKX19O3k0LnJlbW92ZUFsbEJ5cGFzc2VzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMucmVtb3ZlQnlwYXNzZXModCx0aGlzLnByb3BlcnR5TmFtZXMsZSl9O3k0LnJlbW92ZUJ5cGFzc2VzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49ITAsaT0wO2k8dC5sZW5ndGg7aSsrKXtmb3IodmFyIGE9dFtpXSxzPXt9LGw9MDtsPGUubGVuZ3RoO2wrKyl7dmFyIHU9ZVtsXSxoPXRoaXMucHJvcGVydGllc1t1XSxmPWEucHN0eWxlKGgubmFtZSk7aWYoISghZnx8IWYuYnlwYXNzKSl7dmFyIGQ9IiIscD10aGlzLnBhcnNlKHUsZCwhMCksbT1zW2gubmFtZV09e3ByZXY6Zn07dGhpcy5hcHBseVBhcnNlZFByb3BlcnR5KGEscCksbS5uZXh0PWEucHN0eWxlKGgubmFtZSl9fXRoaXMudXBkYXRlU3R5bGVIaW50cyhhKSxyJiZ0aGlzLnVwZGF0ZVRyYW5zaXRpb25zKGEscyxuKX19O1pCPXt9O1pCLmdldEVtU2l6ZUluUGl4ZWxzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jb250YWluZXJDc3MoImZvbnQtc2l6ZSIpO3JldHVybiB0IT1udWxsP3BhcnNlRmxvYXQodCk6MX07WkIuY29udGFpbmVyQ3NzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ByaXZhdGUuY3kscj1lLmNvbnRhaW5lcigpLG49ZS53aW5kb3coKTtpZihuJiZyJiZuLmdldENvbXB1dGVkU3R5bGUpcmV0dXJuIG4uZ2V0Q29tcHV0ZWRTdHlsZShyKS5nZXRQcm9wZXJ0eVZhbHVlKHQpfTtKYz17fTtKYy5nZXRSZW5kZXJlZFN0eWxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU/dGhpcy5nZXRTdHlsZVByb3BlcnR5VmFsdWUodCxlLCEwKTp0aGlzLmdldFJhd1N0eWxlKHQsITApfTtKYy5nZXRSYXdTdHlsZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXM7aWYodD10WzBdLHQpe2Zvcih2YXIgbj17fSxpPTA7aTxyLnByb3BlcnRpZXMubGVuZ3RoO2krKyl7dmFyIGE9ci5wcm9wZXJ0aWVzW2ldLHM9ci5nZXRTdHlsZVByb3BlcnR5VmFsdWUodCxhLm5hbWUsZSk7cyE9bnVsbCYmKG5bYS5uYW1lXT1zLG5bSzYoYS5uYW1lKV09cyl9cmV0dXJuIG59fTtKYy5nZXRJbmRleGVkU3R5bGU9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dC5wc3R5bGUoZSlbcl1bbl07cmV0dXJuIGk/P3QuY3koKS5zdHlsZSgpLmdldERlZmF1bHRQcm9wZXJ0eShlKVtyXVswXX07SmMuZ2V0U3R5bGVQcm9wZXJ0eVZhbHVlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzO2lmKHQ9dFswXSx0KXt2YXIgaT1uLnByb3BlcnRpZXNbZV07aS5hbGlhcyYmKGk9aS5wb2ludHNUbyk7dmFyIGE9aS50eXBlLHM9dC5wc3R5bGUoaS5uYW1lKTtpZihzKXt2YXIgbD1zLnZhbHVlLHU9cy51bml0cyxoPXMuc3RyVmFsdWU7aWYociYmYS5udW1iZXImJmwhPW51bGwmJl90KGwpKXt2YXIgZj10LmN5KCkuem9vbSgpLGQ9byhmdW5jdGlvbih2KXtyZXR1cm4gdipmfSwiZ2V0UmVuZGVyZWRWYWx1ZSIpLHA9byhmdW5jdGlvbih2LHgpe3JldHVybiBkKHYpK3h9LCJnZXRWYWx1ZVN0cmluZ1dpdGhVbml0cyIpLG09RW4obCksZz1tP3UuZXZlcnkoZnVuY3Rpb24oeSl7cmV0dXJuIHkhPW51bGx9KTp1IT1udWxsO3JldHVybiBnP20/bC5tYXAoZnVuY3Rpb24oeSx2KXtyZXR1cm4gcCh5LHVbdl0pfSkuam9pbigiICIpOnAobCx1KTptP2wubWFwKGZ1bmN0aW9uKHkpe3JldHVybiBadCh5KT95OiIiK2QoeSl9KS5qb2luKCIgIik6IiIrZChsKX1lbHNlIGlmKGghPW51bGwpcmV0dXJuIGh9cmV0dXJuIG51bGx9fTtKYy5nZXRBbmltYXRpb25TdGFydFN0eWxlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXt9LG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGk9ZVtuXSxhPWkubmFtZSxzPXQucHN0eWxlKGEpO3MhPT12b2lkIDAmJihVcihzKT9zPXRoaXMucGFyc2UoYSxzLnN0clZhbHVlKTpzPXRoaXMucGFyc2UoYSxzKSkscyYmKHJbYV09cyl9cmV0dXJuIHJ9O0pjLmdldFByb3BzTGlzdD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9W10sbj10LGk9ZS5wcm9wZXJ0aWVzO2lmKG4pZm9yKHZhciBhPU9iamVjdC5rZXlzKG4pLHM9MDtzPGEubGVuZ3RoO3MrKyl7dmFyIGw9YVtzXSx1PW5bbF0saD1pW2xdfHxpW0ZCKGwpXSxmPXRoaXMucGFyc2UoaC5uYW1lLHUpO2YmJnIucHVzaChmKX1yZXR1cm4gcn07SmMuZ2V0Tm9uRGVmYXVsdFByb3BlcnRpZXNIYXNoPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yLnNsaWNlKCksaSxhLHMsbCx1LGg7Zm9yKHU9MDt1PGUubGVuZ3RoO3UrKylpZihpPWVbdV0sYT10LnBzdHlsZShpLCExKSxhIT1udWxsKWlmKGEucGZWYWx1ZSE9bnVsbCluWzBdPXQ0KGwsblswXSksblsxXT1yNChsLG5bMV0pO2Vsc2UgZm9yKHM9YS5zdHJWYWx1ZSxoPTA7aDxzLmxlbmd0aDtoKyspbD1zLmNoYXJDb2RlQXQoaCksblswXT10NChsLG5bMF0pLG5bMV09cjQobCxuWzFdKTtyZXR1cm4gbn07SmMuZ2V0UHJvcGVydGllc0hhc2g9SmMuZ2V0Tm9uRGVmYXVsdFByb3BlcnRpZXNIYXNoO2xDPXt9O2xDLmFwcGVuZEZyb21Kc29uPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXSxpPW4uc2VsZWN0b3IsYT1uLnN0eWxlfHxuLmNzcyxzPU9iamVjdC5rZXlzKGEpO2Uuc2VsZWN0b3IoaSk7Zm9yKHZhciBsPTA7bDxzLmxlbmd0aDtsKyspe3ZhciB1PXNbbF0saD1hW3VdO2UuY3NzKHUsaCl9fXJldHVybiBlfTtsQy5mcm9tSnNvbj1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiBlLnJlc2V0VG9EZWZhdWx0KCksZS5hcHBlbmRGcm9tSnNvbih0KSxlfTtsQy5qc29uPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9dGhpcy5kZWZhdWx0TGVuZ3RoO2U8dGhpcy5sZW5ndGg7ZSsrKXtmb3IodmFyIHI9dGhpc1tlXSxuPXIuc2VsZWN0b3IsaT1yLnByb3BlcnRpZXMsYT17fSxzPTA7czxpLmxlbmd0aDtzKyspe3ZhciBsPWlbc107YVtsLm5hbWVdPWwuc3RyVmFsdWV9dC5wdXNoKHtzZWxlY3RvcjpuP24udG9TdHJpbmcoKToiY29yZSIsc3R5bGU6YX0pfXJldHVybiB0fTtKQj17fTtKQi5hcHBlbmRGcm9tU3RyaW5nPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj10aGlzLG49IiIrdCxpLGEscztuPW4ucmVwbGFjZSgvWy9dWypdKFxzfC4pKz9bKl1bL10vZywiIik7ZnVuY3Rpb24gbCgpe24ubGVuZ3RoPmkubGVuZ3RoP249bi5zdWJzdHIoaS5sZW5ndGgpOm49IiJ9byhsLCJyZW1vdmVTZWxBbmRCbG9ja0Zyb21SZW1haW5pbmciKTtmdW5jdGlvbiB1KCl7YS5sZW5ndGg+cy5sZW5ndGg/YT1hLnN1YnN0cihzLmxlbmd0aCk6YT0iIn1mb3Iobyh1LCJyZW1vdmVQcm9wQW5kVmFsRnJvbVJlbSIpOzspe3ZhciBoPW4ubWF0Y2goL15ccyokLyk7aWYoaClicmVhazt2YXIgZj1uLm1hdGNoKC9eXHMqKCg/Oi58XHMpKz8pXHMqXHsoKD86LnxccykrPylcfS8pO2lmKCFmKXtobigiSGFsdGluZyBzdHlsZXNoZWV0IHBhcnNpbmc6IFN0cmluZyBzdHlsZXNoZWV0IGNvbnRhaW5zIG1vcmUgdG8gcGFyc2UgYnV0IG5vIHNlbGVjdG9yIGFuZCBibG9jayBmb3VuZCBpbjogIituKTticmVha31pPWZbMF07dmFyIGQ9ZlsxXTtpZihkIT09ImNvcmUiKXt2YXIgcD1uZXcgJGYoZCk7aWYocC5pbnZhbGlkKXtobigiU2tpcHBpbmcgcGFyc2luZyBvZiBibG9jazogSW52YWxpZCBzZWxlY3RvciBmb3VuZCBpbiBzdHJpbmcgc3R5bGVzaGVldDogIitkKSxsKCk7Y29udGludWV9fXZhciBtPWZbMl0sZz0hMTthPW07Zm9yKHZhciB5PVtdOzspe3ZhciB2PWEubWF0Y2goL15ccyokLyk7aWYodilicmVhazt2YXIgeD1hLm1hdGNoKC9eXHMqKC4rPylccyo6XHMqKC4rPykoPzpccyo7fFxzKiQpLyk7aWYoIXgpe2huKCJTa2lwcGluZyBwYXJzaW5nIG9mIGJsb2NrOiBJbnZhbGlkIGZvcm1hdHRpbmcgb2Ygc3R5bGUgcHJvcGVydHkgYW5kIHZhbHVlIGRlZmluaXRpb25zIGZvdW5kIGluOiIrbSksZz0hMDticmVha31zPXhbMF07dmFyIGI9eFsxXSxUPXhbMl0sUz1lLnByb3BlcnRpZXNbYl07aWYoIVMpe2huKCJTa2lwcGluZyBwcm9wZXJ0eTogSW52YWxpZCBwcm9wZXJ0eSBuYW1lIGluOiAiK3MpLHUoKTtjb250aW51ZX12YXIgdz1yLnBhcnNlKGIsVCk7aWYoIXcpe2huKCJTa2lwcGluZyBwcm9wZXJ0eTogSW52YWxpZCBwcm9wZXJ0eSBkZWZpbml0aW9uIGluOiAiK3MpLHUoKTtjb250aW51ZX15LnB1c2goe25hbWU6Yix2YWw6VH0pLHUoKX1pZihnKXtsKCk7YnJlYWt9ci5zZWxlY3RvcihkKTtmb3IodmFyIEU9MDtFPHkubGVuZ3RoO0UrKyl7dmFyIF89eVtFXTtyLmNzcyhfLm5hbWUsXy52YWwpfWwoKX1yZXR1cm4gcn07SkIuZnJvbVN0cmluZz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiBlLnJlc2V0VG9EZWZhdWx0KCksZS5hcHBlbmRGcm9tU3RyaW5nKHQpLGV9O2thPXt9OyhmdW5jdGlvbigpe3ZhciB0PVdpLGU9U3FlLHI9QXFlLG49X3FlLGk9RHFlLGE9byhmdW5jdGlvbihRKXtyZXR1cm4iXiIrUSsiXFxzKlxcKFxccyooW1xcd1xcLl0rKVxccypcXCkkIn0sImRhdGEiKSxzPW8oZnVuY3Rpb24oUSl7dmFyIGo9dCsifFxcdyt8IitlKyJ8IityKyJ8IituKyJ8IitpO3JldHVybiJeIitRKyJcXHMqXFwoKFtcXHdcXC5dKylcXHMqXFwsXFxzKigiK3QrIilcXHMqXFwsXFxzKigiK3QrIilcXHMqLFxccyooIitqKyIpXFxzKlxcLFxccyooIitqKyIpXFwpJCJ9LCJtYXBEYXRhIiksbD1bYF51cmxcXHMqXFwoXFxzKlsnIl0/KC4rPylbJyJdP1xccypcXCkkYCwiXihub25lKSQiLCJeKC4rKSQiXTtrYS50eXBlcz17dGltZTp7bnVtYmVyOiEwLG1pbjowLHVuaXRzOiJzfG1zIixpbXBsaWNpdFVuaXRzOiJtcyJ9LHBlcmNlbnQ6e251bWJlcjohMCxtaW46MCxtYXg6MTAwLHVuaXRzOiIlIixpbXBsaWNpdFVuaXRzOiIlIn0scGVyY2VudGFnZXM6e251bWJlcjohMCxtaW46MCxtYXg6MTAwLHVuaXRzOiIlIixpbXBsaWNpdFVuaXRzOiIlIixtdWx0aXBsZTohMH0semVyb09uZU51bWJlcjp7bnVtYmVyOiEwLG1pbjowLG1heDoxLHVuaXRsZXNzOiEwfSx6ZXJvT25lTnVtYmVyczp7bnVtYmVyOiEwLG1pbjowLG1heDoxLHVuaXRsZXNzOiEwLG11bHRpcGxlOiEwfSxuT25lT25lTnVtYmVyOntudW1iZXI6ITAsbWluOi0xLG1heDoxLHVuaXRsZXNzOiEwfSxub25OZWdhdGl2ZUludDp7bnVtYmVyOiEwLG1pbjowLGludGVnZXI6ITAsdW5pdGxlc3M6ITB9LG5vbk5lZ2F0aXZlTnVtYmVyOntudW1iZXI6ITAsbWluOjAsdW5pdGxlc3M6ITB9LHBvc2l0aW9uOntlbnVtczpbInBhcmVudCIsIm9yaWdpbiJdfSxub2RlU2l6ZTp7bnVtYmVyOiEwLG1pbjowLGVudW1zOlsibGFiZWwiXX0sbnVtYmVyOntudW1iZXI6ITAsdW5pdGxlc3M6ITB9LG51bWJlcnM6e251bWJlcjohMCx1bml0bGVzczohMCxtdWx0aXBsZTohMH0scG9zaXRpdmVOdW1iZXI6e251bWJlcjohMCx1bml0bGVzczohMCxtaW46MCxzdHJpY3RNaW46ITB9LHNpemU6e251bWJlcjohMCxtaW46MH0sYmlkaXJlY3Rpb25hbFNpemU6e251bWJlcjohMH0sYmlkaXJlY3Rpb25hbFNpemVNYXliZVBlcmNlbnQ6e251bWJlcjohMCxhbGxvd1BlcmNlbnQ6ITB9LGJpZGlyZWN0aW9uYWxTaXplczp7bnVtYmVyOiEwLG11bHRpcGxlOiEwfSxzaXplTWF5YmVQZXJjZW50OntudW1iZXI6ITAsbWluOjAsYWxsb3dQZXJjZW50OiEwfSxheGlzRGlyZWN0aW9uOntlbnVtczpbImhvcml6b250YWwiLCJsZWZ0d2FyZCIsInJpZ2h0d2FyZCIsInZlcnRpY2FsIiwidXB3YXJkIiwiZG93bndhcmQiLCJhdXRvIl19LHBhZGRpbmdSZWxhdGl2ZVRvOntlbnVtczpbIndpZHRoIiwiaGVpZ2h0IiwiYXZlcmFnZSIsIm1pbiIsIm1heCJdfSxiZ1dIOntudW1iZXI6ITAsbWluOjAsYWxsb3dQZXJjZW50OiEwLGVudW1zOlsiYXV0byJdLG11bHRpcGxlOiEwfSxiZ1Bvczp7bnVtYmVyOiEwLGFsbG93UGVyY2VudDohMCxtdWx0aXBsZTohMH0sYmdSZWxhdGl2ZVRvOntlbnVtczpbImlubmVyIiwiaW5jbHVkZS1wYWRkaW5nIl0sbXVsdGlwbGU6ITB9LGJnUmVwZWF0OntlbnVtczpbInJlcGVhdCIsInJlcGVhdC14IiwicmVwZWF0LXkiLCJuby1yZXBlYXQiXSxtdWx0aXBsZTohMH0sYmdGaXQ6e2VudW1zOlsibm9uZSIsImNvbnRhaW4iLCJjb3ZlciJdLG11bHRpcGxlOiEwfSxiZ0Nyb3NzT3JpZ2luOntlbnVtczpbImFub255bW91cyIsInVzZS1jcmVkZW50aWFscyIsIm51bGwiXSxtdWx0aXBsZTohMH0sYmdDbGlwOntlbnVtczpbIm5vbmUiLCJub2RlIl0sbXVsdGlwbGU6ITB9LGJnQ29udGFpbm1lbnQ6e2VudW1zOlsiaW5zaWRlIiwib3ZlciJdLG11bHRpcGxlOiEwfSxjb2xvcjp7Y29sb3I6ITB9LGNvbG9yczp7Y29sb3I6ITAsbXVsdGlwbGU6ITB9LGZpbGw6e2VudW1zOlsic29saWQiLCJsaW5lYXItZ3JhZGllbnQiLCJyYWRpYWwtZ3JhZGllbnQiXX0sYm9vbDp7ZW51bXM6WyJ5ZXMiLCJubyJdfSxib29sczp7ZW51bXM6WyJ5ZXMiLCJubyJdLG11bHRpcGxlOiEwfSxsaW5lU3R5bGU6e2VudW1zOlsic29saWQiLCJkb3R0ZWQiLCJkYXNoZWQiXX0sbGluZUNhcDp7ZW51bXM6WyJidXR0Iiwicm91bmQiLCJzcXVhcmUiXX0sbGluZVBvc2l0aW9uOntlbnVtczpbImNlbnRlciIsImluc2lkZSIsIm91dHNpZGUiXX0sbGluZUpvaW46e2VudW1zOlsicm91bmQiLCJiZXZlbCIsIm1pdGVyIl19LGJvcmRlclN0eWxlOntlbnVtczpbInNvbGlkIiwiZG90dGVkIiwiZGFzaGVkIiwiZG91YmxlIl19LGN1cnZlU3R5bGU6e2VudW1zOlsiYmV6aWVyIiwidW5idW5kbGVkLWJlemllciIsImhheXN0YWNrIiwic2VnbWVudHMiLCJzdHJhaWdodCIsInN0cmFpZ2h0LXRyaWFuZ2xlIiwidGF4aSIsInJvdW5kLXNlZ21lbnRzIiwicm91bmQtdGF4aSJdfSxyYWRpdXNUeXBlOntlbnVtczpbImFyYy1yYWRpdXMiLCJpbmZsdWVuY2UtcmFkaXVzIl0sbXVsdGlwbGU6ITB9LGZvbnRGYW1pbHk6e3JlZ2V4OideKFtcXHctIFxcIl0rKD86XFxzKixcXHMqW1xcdy0gXFwiXSspKikkJ30sZm9udFN0eWxlOntlbnVtczpbIml0YWxpYyIsIm5vcm1hbCIsIm9ibGlxdWUiXX0sZm9udFdlaWdodDp7ZW51bXM6WyJub3JtYWwiLCJib2xkIiwiYm9sZGVyIiwibGlnaHRlciIsIjEwMCIsIjIwMCIsIjMwMCIsIjQwMCIsIjUwMCIsIjYwMCIsIjgwMCIsIjkwMCIsMTAwLDIwMCwzMDAsNDAwLDUwMCw2MDAsNzAwLDgwMCw5MDBdfSx0ZXh0RGVjb3JhdGlvbjp7ZW51bXM6WyJub25lIiwidW5kZXJsaW5lIiwib3ZlcmxpbmUiLCJsaW5lLXRocm91Z2giXX0sdGV4dFRyYW5zZm9ybTp7ZW51bXM6WyJub25lIiwidXBwZXJjYXNlIiwibG93ZXJjYXNlIl19LHRleHRXcmFwOntlbnVtczpbIm5vbmUiLCJ3cmFwIiwiZWxsaXBzaXMiXX0sdGV4dE92ZXJmbG93V3JhcDp7ZW51bXM6WyJ3aGl0ZXNwYWNlIiwiYW55d2hlcmUiXX0sdGV4dEJhY2tncm91bmRTaGFwZTp7ZW51bXM6WyJyZWN0YW5nbGUiLCJyb3VuZHJlY3RhbmdsZSIsInJvdW5kLXJlY3RhbmdsZSJdfSxub2RlU2hhcGU6e2VudW1zOlsicmVjdGFuZ2xlIiwicm91bmRyZWN0YW5nbGUiLCJyb3VuZC1yZWN0YW5nbGUiLCJjdXRyZWN0YW5nbGUiLCJjdXQtcmVjdGFuZ2xlIiwiYm90dG9tcm91bmRyZWN0YW5nbGUiLCJib3R0b20tcm91bmQtcmVjdGFuZ2xlIiwiYmFycmVsIiwiZWxsaXBzZSIsInRyaWFuZ2xlIiwicm91bmQtdHJpYW5nbGUiLCJzcXVhcmUiLCJwZW50YWdvbiIsInJvdW5kLXBlbnRhZ29uIiwiaGV4YWdvbiIsInJvdW5kLWhleGFnb24iLCJjb25jYXZlaGV4YWdvbiIsImNvbmNhdmUtaGV4YWdvbiIsImhlcHRhZ29uIiwicm91bmQtaGVwdGFnb24iLCJvY3RhZ29uIiwicm91bmQtb2N0YWdvbiIsInRhZyIsInJvdW5kLXRhZyIsInN0YXIiLCJkaWFtb25kIiwicm91bmQtZGlhbW9uZCIsInZlZSIsInJob21ib2lkIiwicmlnaHQtcmhvbWJvaWQiLCJwb2x5Z29uIl19LG92ZXJsYXlTaGFwZTp7ZW51bXM6WyJyb3VuZHJlY3RhbmdsZSIsInJvdW5kLXJlY3RhbmdsZSIsImVsbGlwc2UiXX0sY29ybmVyUmFkaXVzOntudW1iZXI6ITAsbWluOjAsdW5pdHM6InB4fGVtIixpbXBsaWNpdFVuaXRzOiJweCIsZW51bXM6WyJhdXRvIl19LGNvbXBvdW5kSW5jbHVkZUxhYmVsczp7ZW51bXM6WyJpbmNsdWRlIiwiZXhjbHVkZSJdfSxhcnJvd1NoYXBlOntlbnVtczpbInRlZSIsInRyaWFuZ2xlIiwidHJpYW5nbGUtdGVlIiwiY2lyY2xlLXRyaWFuZ2xlIiwidHJpYW5nbGUtY3Jvc3MiLCJ0cmlhbmdsZS1iYWNrY3VydmUiLCJ2ZWUiLCJzcXVhcmUiLCJjaXJjbGUiLCJkaWFtb25kIiwiY2hldnJvbiIsIm5vbmUiXX0sYXJyb3dGaWxsOntlbnVtczpbImZpbGxlZCIsImhvbGxvdyJdfSxhcnJvd1dpZHRoOntudW1iZXI6ITAsdW5pdHM6IiV8cHh8ZW0iLGltcGxpY2l0VW5pdHM6InB4IixlbnVtczpbIm1hdGNoLWxpbmUiXX0sZGlzcGxheTp7ZW51bXM6WyJlbGVtZW50Iiwibm9uZSJdfSx2aXNpYmlsaXR5OntlbnVtczpbImhpZGRlbiIsInZpc2libGUiXX0sekNvbXBvdW5kRGVwdGg6e2VudW1zOlsiYm90dG9tIiwib3JwaGFuIiwiYXV0byIsInRvcCJdfSx6SW5kZXhDb21wYXJlOntlbnVtczpbImF1dG8iLCJtYW51YWwiXX0sdmFsaWduOntlbnVtczpbInRvcCIsImNlbnRlciIsImJvdHRvbSJdfSxoYWxpZ246e2VudW1zOlsibGVmdCIsImNlbnRlciIsInJpZ2h0Il19LGp1c3RpZmljYXRpb246e2VudW1zOlsibGVmdCIsImNlbnRlciIsInJpZ2h0IiwiYXV0byJdfSx0ZXh0OntzdHJpbmc6ITB9LGRhdGE6e21hcHBpbmc6ITAscmVnZXg6YSgiZGF0YSIpfSxsYXlvdXREYXRhOnttYXBwaW5nOiEwLHJlZ2V4OmEoImxheW91dERhdGEiKX0sc2NyYXRjaDp7bWFwcGluZzohMCxyZWdleDphKCJzY3JhdGNoIil9LG1hcERhdGE6e21hcHBpbmc6ITAscmVnZXg6cygibWFwRGF0YSIpfSxtYXBMYXlvdXREYXRhOnttYXBwaW5nOiEwLHJlZ2V4OnMoIm1hcExheW91dERhdGEiKX0sbWFwU2NyYXRjaDp7bWFwcGluZzohMCxyZWdleDpzKCJtYXBTY3JhdGNoIil9LGZuOnttYXBwaW5nOiEwLGZuOiEwfSx1cmw6e3JlZ2V4ZXM6bCxzaW5nbGVSZWdleE1hdGNoVmFsdWU6ITB9LHVybHM6e3JlZ2V4ZXM6bCxzaW5nbGVSZWdleE1hdGNoVmFsdWU6ITAsbXVsdGlwbGU6ITB9LHByb3BMaXN0Ontwcm9wTGlzdDohMH0sYW5nbGU6e251bWJlcjohMCx1bml0czoiZGVnfHJhZCIsaW1wbGljaXRVbml0czoicmFkIn0sdGV4dFJvdGF0aW9uOntudW1iZXI6ITAsdW5pdHM6ImRlZ3xyYWQiLGltcGxpY2l0VW5pdHM6InJhZCIsZW51bXM6WyJub25lIiwiYXV0b3JvdGF0ZSJdfSxwb2x5Z29uUG9pbnRMaXN0OntudW1iZXI6ITAsbXVsdGlwbGU6ITAsZXZlbk11bHRpcGxlOiEwLG1pbjotMSxtYXg6MSx1bml0bGVzczohMH0sZWRnZURpc3RhbmNlczp7ZW51bXM6WyJpbnRlcnNlY3Rpb24iLCJub2RlLXBvc2l0aW9uIiwiZW5kcG9pbnRzIl19LGVkZ2VFbmRwb2ludDp7bnVtYmVyOiEwLG11bHRpcGxlOiEwLHVuaXRzOiIlfHB4fGVtfGRlZ3xyYWQiLGltcGxpY2l0VW5pdHM6InB4IixlbnVtczpbImluc2lkZS10by1ub2RlIiwib3V0c2lkZS10by1ub2RlIiwib3V0c2lkZS10by1ub2RlLW9yLWxhYmVsIiwib3V0c2lkZS10by1saW5lIiwib3V0c2lkZS10by1saW5lLW9yLWxhYmVsIl0sc2luZ2xlRW51bTohMCx2YWxpZGF0ZTpvKGZ1bmN0aW9uKFEsail7c3dpdGNoKFEubGVuZ3RoKXtjYXNlIDI6cmV0dXJuIGpbMF0hPT0iZGVnIiYmalswXSE9PSJyYWQiJiZqWzFdIT09ImRlZyImJmpbMV0hPT0icmFkIjtjYXNlIDE6cmV0dXJuIFp0KFFbMF0pfHxqWzBdPT09ImRlZyJ8fGpbMF09PT0icmFkIjtkZWZhdWx0OnJldHVybiExfX0sInZhbGlkYXRlIil9LGVhc2luZzp7cmVnZXhlczpbIl4oc3ByaW5nKVxccypcXChcXHMqKCIrdCsiKVxccyosXFxzKigiK3QrIilcXHMqXFwpJCIsIl4oY3ViaWMtYmV6aWVyKVxccypcXChcXHMqKCIrdCsiKVxccyosXFxzKigiK3QrIilcXHMqLFxccyooIit0KyIpXFxzKixcXHMqKCIrdCsiKVxccypcXCkkIl0sZW51bXM6WyJsaW5lYXIiLCJlYXNlIiwiZWFzZS1pbiIsImVhc2Utb3V0IiwiZWFzZS1pbi1vdXQiLCJlYXNlLWluLXNpbmUiLCJlYXNlLW91dC1zaW5lIiwiZWFzZS1pbi1vdXQtc2luZSIsImVhc2UtaW4tcXVhZCIsImVhc2Utb3V0LXF1YWQiLCJlYXNlLWluLW91dC1xdWFkIiwiZWFzZS1pbi1jdWJpYyIsImVhc2Utb3V0LWN1YmljIiwiZWFzZS1pbi1vdXQtY3ViaWMiLCJlYXNlLWluLXF1YXJ0IiwiZWFzZS1vdXQtcXVhcnQiLCJlYXNlLWluLW91dC1xdWFydCIsImVhc2UtaW4tcXVpbnQiLCJlYXNlLW91dC1xdWludCIsImVhc2UtaW4tb3V0LXF1aW50IiwiZWFzZS1pbi1leHBvIiwiZWFzZS1vdXQtZXhwbyIsImVhc2UtaW4tb3V0LWV4cG8iLCJlYXNlLWluLWNpcmMiLCJlYXNlLW91dC1jaXJjIiwiZWFzZS1pbi1vdXQtY2lyYyJdfSxncmFkaWVudERpcmVjdGlvbjp7ZW51bXM6WyJ0by1ib3R0b20iLCJ0by10b3AiLCJ0by1sZWZ0IiwidG8tcmlnaHQiLCJ0by1ib3R0b20tcmlnaHQiLCJ0by1ib3R0b20tbGVmdCIsInRvLXRvcC1yaWdodCIsInRvLXRvcC1sZWZ0IiwidG8tcmlnaHQtYm90dG9tIiwidG8tbGVmdC1ib3R0b20iLCJ0by1yaWdodC10b3AiLCJ0by1sZWZ0LXRvcCJdfSxib3VuZHNFeHBhbnNpb246e251bWJlcjohMCxtdWx0aXBsZTohMCxtaW46MCx2YWxpZGF0ZTpvKGZ1bmN0aW9uKFEpe3ZhciBqPVEubGVuZ3RoO3JldHVybiBqPT09MXx8aj09PTJ8fGo9PT00fSwidmFsaWRhdGUiKX19O3ZhciB1PXt6ZXJvTm9uWmVybzpvKGZ1bmN0aW9uKFEsail7cmV0dXJuKFE9PW51bGx8fGo9PW51bGwpJiZRIT09anx8UT09MCYmaiE9MD8hMDpRIT0wJiZqPT0wfSwiemVyb05vblplcm8iKSxhbnk6byhmdW5jdGlvbihRLGope3JldHVybiBRIT1qfSwiYW55IiksZW1wdHlOb25FbXB0eTpvKGZ1bmN0aW9uKFEsail7dmFyIG5lPVBmKFEpLHRlPVBmKGopO3JldHVybiBuZSYmIXRlfHwhbmUmJnRlfSwiZW1wdHlOb25FbXB0eSIpfSxoPWthLnR5cGVzLGY9W3tuYW1lOiJsYWJlbCIsdHlwZTpoLnRleHQsdHJpZ2dlcnNCb3VuZHM6dS5hbnksdHJpZ2dlcnNaT3JkZXI6dS5lbXB0eU5vbkVtcHR5fSx7bmFtZToidGV4dC1yb3RhdGlvbiIsdHlwZTpoLnRleHRSb3RhdGlvbix0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InRleHQtbWFyZ2luLXgiLHR5cGU6aC5iaWRpcmVjdGlvbmFsU2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InRleHQtbWFyZ2luLXkiLHR5cGU6aC5iaWRpcmVjdGlvbmFsU2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX1dLGQ9W3tuYW1lOiJzb3VyY2UtbGFiZWwiLHR5cGU6aC50ZXh0LHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToic291cmNlLXRleHQtcm90YXRpb24iLHR5cGU6aC50ZXh0Um90YXRpb24sdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJzb3VyY2UtdGV4dC1tYXJnaW4teCIsdHlwZTpoLmJpZGlyZWN0aW9uYWxTaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToic291cmNlLXRleHQtbWFyZ2luLXkiLHR5cGU6aC5iaWRpcmVjdGlvbmFsU2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InNvdXJjZS10ZXh0LW9mZnNldCIsdHlwZTpoLnNpemUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9XSxwPVt7bmFtZToidGFyZ2V0LWxhYmVsIix0eXBlOmgudGV4dCx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InRhcmdldC10ZXh0LXJvdGF0aW9uIix0eXBlOmgudGV4dFJvdGF0aW9uLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToidGFyZ2V0LXRleHQtbWFyZ2luLXgiLHR5cGU6aC5iaWRpcmVjdGlvbmFsU2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InRhcmdldC10ZXh0LW1hcmdpbi15Iix0eXBlOmguYmlkaXJlY3Rpb25hbFNpemUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJ0YXJnZXQtdGV4dC1vZmZzZXQiLHR5cGU6aC5zaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fV0sbT1be25hbWU6ImZvbnQtZmFtaWx5Iix0eXBlOmguZm9udEZhbWlseSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6ImZvbnQtc3R5bGUiLHR5cGU6aC5mb250U3R5bGUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJmb250LXdlaWdodCIsdHlwZTpoLmZvbnRXZWlnaHQsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJmb250LXNpemUiLHR5cGU6aC5zaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToidGV4dC10cmFuc2Zvcm0iLHR5cGU6aC50ZXh0VHJhbnNmb3JtLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToidGV4dC13cmFwIix0eXBlOmgudGV4dFdyYXAsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJ0ZXh0LW92ZXJmbG93LXdyYXAiLHR5cGU6aC50ZXh0T3ZlcmZsb3dXcmFwLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToidGV4dC1tYXgtd2lkdGgiLHR5cGU6aC5zaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToidGV4dC1vdXRsaW5lLXdpZHRoIix0eXBlOmguc2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6ImxpbmUtaGVpZ2h0Iix0eXBlOmgucG9zaXRpdmVOdW1iZXIsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9XSxnPVt7bmFtZToidGV4dC12YWxpZ24iLHR5cGU6aC52YWxpZ24sdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJ0ZXh0LWhhbGlnbiIsdHlwZTpoLmhhbGlnbix0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6ImNvbG9yIix0eXBlOmguY29sb3J9LHtuYW1lOiJ0ZXh0LW91dGxpbmUtY29sb3IiLHR5cGU6aC5jb2xvcn0se25hbWU6InRleHQtb3V0bGluZS1vcGFjaXR5Iix0eXBlOmguemVyb09uZU51bWJlcn0se25hbWU6InRleHQtYmFja2dyb3VuZC1jb2xvciIsdHlwZTpoLmNvbG9yfSx7bmFtZToidGV4dC1iYWNrZ3JvdW5kLW9wYWNpdHkiLHR5cGU6aC56ZXJvT25lTnVtYmVyfSx7bmFtZToidGV4dC1iYWNrZ3JvdW5kLXBhZGRpbmciLHR5cGU6aC5zaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToidGV4dC1ib3JkZXItb3BhY2l0eSIsdHlwZTpoLnplcm9PbmVOdW1iZXJ9LHtuYW1lOiJ0ZXh0LWJvcmRlci1jb2xvciIsdHlwZTpoLmNvbG9yfSx7bmFtZToidGV4dC1ib3JkZXItd2lkdGgiLHR5cGU6aC5zaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToidGV4dC1ib3JkZXItc3R5bGUiLHR5cGU6aC5ib3JkZXJTdHlsZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InRleHQtYmFja2dyb3VuZC1zaGFwZSIsdHlwZTpoLnRleHRCYWNrZ3JvdW5kU2hhcGUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJ0ZXh0LWp1c3RpZmljYXRpb24iLHR5cGU6aC5qdXN0aWZpY2F0aW9ufV0seT1be25hbWU6ImV2ZW50cyIsdHlwZTpoLmJvb2wsdHJpZ2dlcnNaT3JkZXI6dS5hbnl9LHtuYW1lOiJ0ZXh0LWV2ZW50cyIsdHlwZTpoLmJvb2wsdHJpZ2dlcnNaT3JkZXI6dS5hbnl9XSx2PVt7bmFtZToiZGlzcGxheSIsdHlwZTpoLmRpc3BsYXksdHJpZ2dlcnNaT3JkZXI6dS5hbnksdHJpZ2dlcnNCb3VuZHM6dS5hbnksdHJpZ2dlcnNCb3VuZHNPZkNvbm5lY3RlZEVkZ2VzOiEwfSx7bmFtZToidmlzaWJpbGl0eSIsdHlwZTpoLnZpc2liaWxpdHksdHJpZ2dlcnNaT3JkZXI6dS5hbnl9LHtuYW1lOiJvcGFjaXR5Iix0eXBlOmguemVyb09uZU51bWJlcix0cmlnZ2Vyc1pPcmRlcjp1Lnplcm9Ob25aZXJvfSx7bmFtZToidGV4dC1vcGFjaXR5Iix0eXBlOmguemVyb09uZU51bWJlcn0se25hbWU6Im1pbi16b29tZWQtZm9udC1zaXplIix0eXBlOmguc2l6ZX0se25hbWU6InotY29tcG91bmQtZGVwdGgiLHR5cGU6aC56Q29tcG91bmREZXB0aCx0cmlnZ2Vyc1pPcmRlcjp1LmFueX0se25hbWU6InotaW5kZXgtY29tcGFyZSIsdHlwZTpoLnpJbmRleENvbXBhcmUsdHJpZ2dlcnNaT3JkZXI6dS5hbnl9LHtuYW1lOiJ6LWluZGV4Iix0eXBlOmgubnVtYmVyLHRyaWdnZXJzWk9yZGVyOnUuYW55fV0seD1be25hbWU6Im92ZXJsYXktcGFkZGluZyIsdHlwZTpoLnNpemUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJvdmVybGF5LWNvbG9yIix0eXBlOmguY29sb3J9LHtuYW1lOiJvdmVybGF5LW9wYWNpdHkiLHR5cGU6aC56ZXJvT25lTnVtYmVyLHRyaWdnZXJzQm91bmRzOnUuemVyb05vblplcm99LHtuYW1lOiJvdmVybGF5LXNoYXBlIix0eXBlOmgub3ZlcmxheVNoYXBlLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToib3ZlcmxheS1jb3JuZXItcmFkaXVzIix0eXBlOmguY29ybmVyUmFkaXVzfV0sYj1be25hbWU6InVuZGVybGF5LXBhZGRpbmciLHR5cGU6aC5zaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToidW5kZXJsYXktY29sb3IiLHR5cGU6aC5jb2xvcn0se25hbWU6InVuZGVybGF5LW9wYWNpdHkiLHR5cGU6aC56ZXJvT25lTnVtYmVyLHRyaWdnZXJzQm91bmRzOnUuemVyb05vblplcm99LHtuYW1lOiJ1bmRlcmxheS1zaGFwZSIsdHlwZTpoLm92ZXJsYXlTaGFwZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InVuZGVybGF5LWNvcm5lci1yYWRpdXMiLHR5cGU6aC5jb3JuZXJSYWRpdXN9XSxUPVt7bmFtZToidHJhbnNpdGlvbi1wcm9wZXJ0eSIsdHlwZTpoLnByb3BMaXN0fSx7bmFtZToidHJhbnNpdGlvbi1kdXJhdGlvbiIsdHlwZTpoLnRpbWV9LHtuYW1lOiJ0cmFuc2l0aW9uLWRlbGF5Iix0eXBlOmgudGltZX0se25hbWU6InRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uIix0eXBlOmguZWFzaW5nfV0sUz1vKGZ1bmN0aW9uKFEsail7cmV0dXJuIGoudmFsdWU9PT0ibGFiZWwiPy1RLnBvb2xJbmRleCgpOmoucGZWYWx1ZX0sIm5vZGVTaXplSGFzaE92ZXJyaWRlIiksdz1be25hbWU6ImhlaWdodCIsdHlwZTpoLm5vZGVTaXplLHRyaWdnZXJzQm91bmRzOnUuYW55LGhhc2hPdmVycmlkZTpTfSx7bmFtZToid2lkdGgiLHR5cGU6aC5ub2RlU2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueSxoYXNoT3ZlcnJpZGU6U30se25hbWU6InNoYXBlIix0eXBlOmgubm9kZVNoYXBlLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToic2hhcGUtcG9seWdvbi1wb2ludHMiLHR5cGU6aC5wb2x5Z29uUG9pbnRMaXN0LHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToiY29ybmVyLXJhZGl1cyIsdHlwZTpoLmNvcm5lclJhZGl1c30se25hbWU6ImJhY2tncm91bmQtY29sb3IiLHR5cGU6aC5jb2xvcn0se25hbWU6ImJhY2tncm91bmQtZmlsbCIsdHlwZTpoLmZpbGx9LHtuYW1lOiJiYWNrZ3JvdW5kLW9wYWNpdHkiLHR5cGU6aC56ZXJvT25lTnVtYmVyfSx7bmFtZToiYmFja2dyb3VuZC1ibGFja2VuIix0eXBlOmgubk9uZU9uZU51bWJlcn0se25hbWU6ImJhY2tncm91bmQtZ3JhZGllbnQtc3RvcC1jb2xvcnMiLHR5cGU6aC5jb2xvcnN9LHtuYW1lOiJiYWNrZ3JvdW5kLWdyYWRpZW50LXN0b3AtcG9zaXRpb25zIix0eXBlOmgucGVyY2VudGFnZXN9LHtuYW1lOiJiYWNrZ3JvdW5kLWdyYWRpZW50LWRpcmVjdGlvbiIsdHlwZTpoLmdyYWRpZW50RGlyZWN0aW9ufSx7bmFtZToicGFkZGluZyIsdHlwZTpoLnNpemVNYXliZVBlcmNlbnQsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJwYWRkaW5nLXJlbGF0aXZlLXRvIix0eXBlOmgucGFkZGluZ1JlbGF0aXZlVG8sdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJib3VuZHMtZXhwYW5zaW9uIix0eXBlOmguYm91bmRzRXhwYW5zaW9uLHRyaWdnZXJzQm91bmRzOnUuYW55fV0sRT1be25hbWU6ImJvcmRlci1jb2xvciIsdHlwZTpoLmNvbG9yfSx7bmFtZToiYm9yZGVyLW9wYWNpdHkiLHR5cGU6aC56ZXJvT25lTnVtYmVyfSx7bmFtZToiYm9yZGVyLXdpZHRoIix0eXBlOmguc2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6ImJvcmRlci1zdHlsZSIsdHlwZTpoLmJvcmRlclN0eWxlfSx7bmFtZToiYm9yZGVyLWNhcCIsdHlwZTpoLmxpbmVDYXB9LHtuYW1lOiJib3JkZXItam9pbiIsdHlwZTpoLmxpbmVKb2lufSx7bmFtZToiYm9yZGVyLWRhc2gtcGF0dGVybiIsdHlwZTpoLm51bWJlcnN9LHtuYW1lOiJib3JkZXItZGFzaC1vZmZzZXQiLHR5cGU6aC5udW1iZXJ9LHtuYW1lOiJib3JkZXItcG9zaXRpb24iLHR5cGU6aC5saW5lUG9zaXRpb259XSxfPVt7bmFtZToib3V0bGluZS1jb2xvciIsdHlwZTpoLmNvbG9yfSx7bmFtZToib3V0bGluZS1vcGFjaXR5Iix0eXBlOmguemVyb09uZU51bWJlcn0se25hbWU6Im91dGxpbmUtd2lkdGgiLHR5cGU6aC5zaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToib3V0bGluZS1zdHlsZSIsdHlwZTpoLmJvcmRlclN0eWxlfSx7bmFtZToib3V0bGluZS1vZmZzZXQiLHR5cGU6aC5zaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fV0sQz1be25hbWU6ImJhY2tncm91bmQtaW1hZ2UiLHR5cGU6aC51cmxzfSx7bmFtZToiYmFja2dyb3VuZC1pbWFnZS1jcm9zc29yaWdpbiIsdHlwZTpoLmJnQ3Jvc3NPcmlnaW59LHtuYW1lOiJiYWNrZ3JvdW5kLWltYWdlLW9wYWNpdHkiLHR5cGU6aC56ZXJvT25lTnVtYmVyc30se25hbWU6ImJhY2tncm91bmQtaW1hZ2UtY29udGFpbm1lbnQiLHR5cGU6aC5iZ0NvbnRhaW5tZW50fSx7bmFtZToiYmFja2dyb3VuZC1pbWFnZS1zbW9vdGhpbmciLHR5cGU6aC5ib29sc30se25hbWU6ImJhY2tncm91bmQtcG9zaXRpb24teCIsdHlwZTpoLmJnUG9zfSx7bmFtZToiYmFja2dyb3VuZC1wb3NpdGlvbi15Iix0eXBlOmguYmdQb3N9LHtuYW1lOiJiYWNrZ3JvdW5kLXdpZHRoLXJlbGF0aXZlLXRvIix0eXBlOmguYmdSZWxhdGl2ZVRvfSx7bmFtZToiYmFja2dyb3VuZC1oZWlnaHQtcmVsYXRpdmUtdG8iLHR5cGU6aC5iZ1JlbGF0aXZlVG99LHtuYW1lOiJiYWNrZ3JvdW5kLXJlcGVhdCIsdHlwZTpoLmJnUmVwZWF0fSx7bmFtZToiYmFja2dyb3VuZC1maXQiLHR5cGU6aC5iZ0ZpdH0se25hbWU6ImJhY2tncm91bmQtY2xpcCIsdHlwZTpoLmJnQ2xpcH0se25hbWU6ImJhY2tncm91bmQtd2lkdGgiLHR5cGU6aC5iZ1dIfSx7bmFtZToiYmFja2dyb3VuZC1oZWlnaHQiLHR5cGU6aC5iZ1dIfSx7bmFtZToiYmFja2dyb3VuZC1vZmZzZXQteCIsdHlwZTpoLmJnUG9zfSx7bmFtZToiYmFja2dyb3VuZC1vZmZzZXQteSIsdHlwZTpoLmJnUG9zfV0sRD1be25hbWU6InBvc2l0aW9uIix0eXBlOmgucG9zaXRpb24sdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJjb21wb3VuZC1zaXppbmctd3J0LWxhYmVscyIsdHlwZTpoLmNvbXBvdW5kSW5jbHVkZUxhYmVscyx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6Im1pbi13aWR0aCIsdHlwZTpoLnNpemUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJtaW4td2lkdGgtYmlhcy1sZWZ0Iix0eXBlOmguc2l6ZU1heWJlUGVyY2VudCx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6Im1pbi13aWR0aC1iaWFzLXJpZ2h0Iix0eXBlOmguc2l6ZU1heWJlUGVyY2VudCx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6Im1pbi1oZWlnaHQiLHR5cGU6aC5zaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToibWluLWhlaWdodC1iaWFzLXRvcCIsdHlwZTpoLnNpemVNYXliZVBlcmNlbnQsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJtaW4taGVpZ2h0LWJpYXMtYm90dG9tIix0eXBlOmguc2l6ZU1heWJlUGVyY2VudCx0cmlnZ2Vyc0JvdW5kczp1LmFueX1dLE89W3tuYW1lOiJsaW5lLXN0eWxlIix0eXBlOmgubGluZVN0eWxlfSx7bmFtZToibGluZS1jb2xvciIsdHlwZTpoLmNvbG9yfSx7bmFtZToibGluZS1maWxsIix0eXBlOmguZmlsbH0se25hbWU6ImxpbmUtY2FwIix0eXBlOmgubGluZUNhcH0se25hbWU6ImxpbmUtb3BhY2l0eSIsdHlwZTpoLnplcm9PbmVOdW1iZXJ9LHtuYW1lOiJsaW5lLWRhc2gtcGF0dGVybiIsdHlwZTpoLm51bWJlcnN9LHtuYW1lOiJsaW5lLWRhc2gtb2Zmc2V0Iix0eXBlOmgubnVtYmVyfSx7bmFtZToibGluZS1vdXRsaW5lLXdpZHRoIix0eXBlOmguc2l6ZX0se25hbWU6ImxpbmUtb3V0bGluZS1jb2xvciIsdHlwZTpoLmNvbG9yfSx7bmFtZToibGluZS1ncmFkaWVudC1zdG9wLWNvbG9ycyIsdHlwZTpoLmNvbG9yc30se25hbWU6ImxpbmUtZ3JhZGllbnQtc3RvcC1wb3NpdGlvbnMiLHR5cGU6aC5wZXJjZW50YWdlc30se25hbWU6ImN1cnZlLXN0eWxlIix0eXBlOmguY3VydmVTdHlsZSx0cmlnZ2Vyc0JvdW5kczp1LmFueSx0cmlnZ2Vyc0JvdW5kc09mUGFyYWxsZWxCZXppZXJzOiEwfSx7bmFtZToiaGF5c3RhY2stcmFkaXVzIix0eXBlOmguemVyb09uZU51bWJlcix0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InNvdXJjZS1lbmRwb2ludCIsdHlwZTpoLmVkZ2VFbmRwb2ludCx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InRhcmdldC1lbmRwb2ludCIsdHlwZTpoLmVkZ2VFbmRwb2ludCx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6ImNvbnRyb2wtcG9pbnQtc3RlcC1zaXplIix0eXBlOmguc2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6ImNvbnRyb2wtcG9pbnQtZGlzdGFuY2VzIix0eXBlOmguYmlkaXJlY3Rpb25hbFNpemVzLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToiY29udHJvbC1wb2ludC13ZWlnaHRzIix0eXBlOmgubnVtYmVycyx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InNlZ21lbnQtZGlzdGFuY2VzIix0eXBlOmguYmlkaXJlY3Rpb25hbFNpemVzLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToic2VnbWVudC13ZWlnaHRzIix0eXBlOmgubnVtYmVycyx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InNlZ21lbnQtcmFkaWkiLHR5cGU6aC5udW1iZXJzLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToicmFkaXVzLXR5cGUiLHR5cGU6aC5yYWRpdXNUeXBlLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToidGF4aS10dXJuIix0eXBlOmguYmlkaXJlY3Rpb25hbFNpemVNYXliZVBlcmNlbnQsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJ0YXhpLXR1cm4tbWluLWRpc3RhbmNlIix0eXBlOmguc2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InRheGktZGlyZWN0aW9uIix0eXBlOmguYXhpc0RpcmVjdGlvbix0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InRheGktcmFkaXVzIix0eXBlOmgubnVtYmVyLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToiZWRnZS1kaXN0YW5jZXMiLHR5cGU6aC5lZGdlRGlzdGFuY2VzLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToiYXJyb3ctc2NhbGUiLHR5cGU6aC5wb3NpdGl2ZU51bWJlcix0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6Imxvb3AtZGlyZWN0aW9uIix0eXBlOmguYW5nbGUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJsb29wLXN3ZWVwIix0eXBlOmguYW5nbGUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJzb3VyY2UtZGlzdGFuY2UtZnJvbS1ub2RlIix0eXBlOmguc2l6ZSx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6InRhcmdldC1kaXN0YW5jZS1mcm9tLW5vZGUiLHR5cGU6aC5zaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fV0sUj1be25hbWU6Imdob3N0Iix0eXBlOmguYm9vbCx0cmlnZ2Vyc0JvdW5kczp1LmFueX0se25hbWU6Imdob3N0LW9mZnNldC14Iix0eXBlOmguYmlkaXJlY3Rpb25hbFNpemUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJnaG9zdC1vZmZzZXQteSIsdHlwZTpoLmJpZGlyZWN0aW9uYWxTaXplLHRyaWdnZXJzQm91bmRzOnUuYW55fSx7bmFtZToiZ2hvc3Qtb3BhY2l0eSIsdHlwZTpoLnplcm9PbmVOdW1iZXJ9XSxrPVt7bmFtZToic2VsZWN0aW9uLWJveC1jb2xvciIsdHlwZTpoLmNvbG9yfSx7bmFtZToic2VsZWN0aW9uLWJveC1vcGFjaXR5Iix0eXBlOmguemVyb09uZU51bWJlcn0se25hbWU6InNlbGVjdGlvbi1ib3gtYm9yZGVyLWNvbG9yIix0eXBlOmguY29sb3J9LHtuYW1lOiJzZWxlY3Rpb24tYm94LWJvcmRlci13aWR0aCIsdHlwZTpoLnNpemV9LHtuYW1lOiJhY3RpdmUtYmctY29sb3IiLHR5cGU6aC5jb2xvcn0se25hbWU6ImFjdGl2ZS1iZy1vcGFjaXR5Iix0eXBlOmguemVyb09uZU51bWJlcn0se25hbWU6ImFjdGl2ZS1iZy1zaXplIix0eXBlOmguc2l6ZX0se25hbWU6Im91dHNpZGUtdGV4dHVyZS1iZy1jb2xvciIsdHlwZTpoLmNvbG9yfSx7bmFtZToib3V0c2lkZS10ZXh0dXJlLWJnLW9wYWNpdHkiLHR5cGU6aC56ZXJvT25lTnVtYmVyfV0sTD1bXTtrYS5waWVCYWNrZ3JvdW5kTj0xNixMLnB1c2goe25hbWU6InBpZS1zaXplIix0eXBlOmguc2l6ZU1heWJlUGVyY2VudH0pO2Zvcih2YXIgQT0xO0E8PWthLnBpZUJhY2tncm91bmROO0ErKylMLnB1c2goe25hbWU6InBpZS0iK0ErIi1iYWNrZ3JvdW5kLWNvbG9yIix0eXBlOmguY29sb3J9KSxMLnB1c2goe25hbWU6InBpZS0iK0ErIi1iYWNrZ3JvdW5kLXNpemUiLHR5cGU6aC5wZXJjZW50fSksTC5wdXNoKHtuYW1lOiJwaWUtIitBKyItYmFja2dyb3VuZC1vcGFjaXR5Iix0eXBlOmguemVyb09uZU51bWJlcn0pO3ZhciBJPVtdLE09a2EuYXJyb3dQcmVmaXhlcz1bInNvdXJjZSIsIm1pZC1zb3VyY2UiLCJ0YXJnZXQiLCJtaWQtdGFyZ2V0Il07W3tuYW1lOiJhcnJvdy1zaGFwZSIsdHlwZTpoLmFycm93U2hhcGUsdHJpZ2dlcnNCb3VuZHM6dS5hbnl9LHtuYW1lOiJhcnJvdy1jb2xvciIsdHlwZTpoLmNvbG9yfSx7bmFtZToiYXJyb3ctZmlsbCIsdHlwZTpoLmFycm93RmlsbH0se25hbWU6ImFycm93LXdpZHRoIix0eXBlOmguYXJyb3dXaWR0aH1dLmZvckVhY2goZnVuY3Rpb24odWUpe00uZm9yRWFjaChmdW5jdGlvbihRKXt2YXIgaj1RKyItIit1ZS5uYW1lLG5lPXVlLnR5cGUsdGU9dWUudHJpZ2dlcnNCb3VuZHM7SS5wdXNoKHtuYW1lOmosdHlwZTpuZSx0cmlnZ2Vyc0JvdW5kczp0ZX0pfSl9LHt9KTt2YXIgUD1rYS5wcm9wZXJ0aWVzPVtdLmNvbmNhdCh5LFQsdix4LGIsUixnLG0sZixkLHAsdyxFLF8sQyxMLEQsTyxJLGspLEI9a2EucHJvcGVydHlHcm91cHM9e2JlaGF2aW9yOnksdHJhbnNpdGlvbjpULHZpc2liaWxpdHk6dixvdmVybGF5OngsdW5kZXJsYXk6YixnaG9zdDpSLGNvbW1vbkxhYmVsOmcsbGFiZWxEaW1lbnNpb25zOm0sbWFpbkxhYmVsOmYsc291cmNlTGFiZWw6ZCx0YXJnZXRMYWJlbDpwLG5vZGVCb2R5Oncsbm9kZUJvcmRlcjpFLG5vZGVPdXRsaW5lOl8sYmFja2dyb3VuZEltYWdlOkMscGllOkwsY29tcG91bmQ6RCxlZGdlTGluZTpPLGVkZ2VBcnJvdzpJLGNvcmU6a30sRj1rYS5wcm9wZXJ0eUdyb3VwTmFtZXM9e30sej1rYS5wcm9wZXJ0eUdyb3VwS2V5cz1PYmplY3Qua2V5cyhCKTt6LmZvckVhY2goZnVuY3Rpb24odWUpe0ZbdWVdPUJbdWVdLm1hcChmdW5jdGlvbihRKXtyZXR1cm4gUS5uYW1lfSksQlt1ZV0uZm9yRWFjaChmdW5jdGlvbihRKXtyZXR1cm4gUS5ncm91cEtleT11ZX0pfSk7dmFyICQ9a2EuYWxpYXNlcz1be25hbWU6ImNvbnRlbnQiLHBvaW50c1RvOiJsYWJlbCJ9LHtuYW1lOiJjb250cm9sLXBvaW50LWRpc3RhbmNlIixwb2ludHNUbzoiY29udHJvbC1wb2ludC1kaXN0YW5jZXMifSx7bmFtZToiY29udHJvbC1wb2ludC13ZWlnaHQiLHBvaW50c1RvOiJjb250cm9sLXBvaW50LXdlaWdodHMifSx7bmFtZToic2VnbWVudC1kaXN0YW5jZSIscG9pbnRzVG86InNlZ21lbnQtZGlzdGFuY2VzIn0se25hbWU6InNlZ21lbnQtd2VpZ2h0Iixwb2ludHNUbzoic2VnbWVudC13ZWlnaHRzIn0se25hbWU6InNlZ21lbnQtcmFkaXVzIixwb2ludHNUbzoic2VnbWVudC1yYWRpaSJ9LHtuYW1lOiJlZGdlLXRleHQtcm90YXRpb24iLHBvaW50c1RvOiJ0ZXh0LXJvdGF0aW9uIn0se25hbWU6InBhZGRpbmctbGVmdCIscG9pbnRzVG86InBhZGRpbmcifSx7bmFtZToicGFkZGluZy1yaWdodCIscG9pbnRzVG86InBhZGRpbmcifSx7bmFtZToicGFkZGluZy10b3AiLHBvaW50c1RvOiJwYWRkaW5nIn0se25hbWU6InBhZGRpbmctYm90dG9tIixwb2ludHNUbzoicGFkZGluZyJ9XTtrYS5wcm9wZXJ0eU5hbWVzPVAubWFwKGZ1bmN0aW9uKHVlKXtyZXR1cm4gdWUubmFtZX0pO2Zvcih2YXIgVT0wO1U8UC5sZW5ndGg7VSsrKXt2YXIgSz1QW1VdO1BbSy5uYW1lXT1LfWZvcih2YXIgZWU9MDtlZTwkLmxlbmd0aDtlZSsrKXt2YXIgWT0kW2VlXSxjZT1QW1kucG9pbnRzVG9dLFo9e25hbWU6WS5uYW1lLGFsaWFzOiEwLHBvaW50c1RvOmNlfTtQLnB1c2goWiksUFtZLm5hbWVdPVp9fSkoKTtrYS5nZXREZWZhdWx0UHJvcGVydHk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZ2V0RGVmYXVsdFByb3BlcnRpZXMoKVt0XX07a2EuZ2V0RGVmYXVsdFByb3BlcnRpZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wcml2YXRlO2lmKHQuZGVmYXVsdFByb3BlcnRpZXMhPW51bGwpcmV0dXJuIHQuZGVmYXVsdFByb3BlcnRpZXM7Zm9yKHZhciBlPWlyKHsic2VsZWN0aW9uLWJveC1jb2xvciI6IiNkZGQiLCJzZWxlY3Rpb24tYm94LW9wYWNpdHkiOi42NSwic2VsZWN0aW9uLWJveC1ib3JkZXItY29sb3IiOiIjYWFhIiwic2VsZWN0aW9uLWJveC1ib3JkZXItd2lkdGgiOjEsImFjdGl2ZS1iZy1jb2xvciI6ImJsYWNrIiwiYWN0aXZlLWJnLW9wYWNpdHkiOi4xNSwiYWN0aXZlLWJnLXNpemUiOjMwLCJvdXRzaWRlLXRleHR1cmUtYmctY29sb3IiOiIjMDAwIiwib3V0c2lkZS10ZXh0dXJlLWJnLW9wYWNpdHkiOi4xMjUsZXZlbnRzOiJ5ZXMiLCJ0ZXh0LWV2ZW50cyI6Im5vIiwidGV4dC12YWxpZ24iOiJ0b3AiLCJ0ZXh0LWhhbGlnbiI6ImNlbnRlciIsInRleHQtanVzdGlmaWNhdGlvbiI6ImF1dG8iLCJsaW5lLWhlaWdodCI6MSxjb2xvcjoiIzAwMCIsInRleHQtb3V0bGluZS1jb2xvciI6IiMwMDAiLCJ0ZXh0LW91dGxpbmUtd2lkdGgiOjAsInRleHQtb3V0bGluZS1vcGFjaXR5IjoxLCJ0ZXh0LW9wYWNpdHkiOjEsInRleHQtZGVjb3JhdGlvbiI6Im5vbmUiLCJ0ZXh0LXRyYW5zZm9ybSI6Im5vbmUiLCJ0ZXh0LXdyYXAiOiJub25lIiwidGV4dC1vdmVyZmxvdy13cmFwIjoid2hpdGVzcGFjZSIsInRleHQtbWF4LXdpZHRoIjo5OTk5LCJ0ZXh0LWJhY2tncm91bmQtY29sb3IiOiIjMDAwIiwidGV4dC1iYWNrZ3JvdW5kLW9wYWNpdHkiOjAsInRleHQtYmFja2dyb3VuZC1zaGFwZSI6InJlY3RhbmdsZSIsInRleHQtYmFja2dyb3VuZC1wYWRkaW5nIjowLCJ0ZXh0LWJvcmRlci1vcGFjaXR5IjowLCJ0ZXh0LWJvcmRlci13aWR0aCI6MCwidGV4dC1ib3JkZXItc3R5bGUiOiJzb2xpZCIsInRleHQtYm9yZGVyLWNvbG9yIjoiIzAwMCIsImZvbnQtZmFtaWx5IjoiSGVsdmV0aWNhIE5ldWUsIEhlbHZldGljYSwgc2Fucy1zZXJpZiIsImZvbnQtc3R5bGUiOiJub3JtYWwiLCJmb250LXdlaWdodCI6Im5vcm1hbCIsImZvbnQtc2l6ZSI6MTYsIm1pbi16b29tZWQtZm9udC1zaXplIjowLCJ0ZXh0LXJvdGF0aW9uIjoibm9uZSIsInNvdXJjZS10ZXh0LXJvdGF0aW9uIjoibm9uZSIsInRhcmdldC10ZXh0LXJvdGF0aW9uIjoibm9uZSIsdmlzaWJpbGl0eToidmlzaWJsZSIsZGlzcGxheToiZWxlbWVudCIsb3BhY2l0eToxLCJ6LWNvbXBvdW5kLWRlcHRoIjoiYXV0byIsInotaW5kZXgtY29tcGFyZSI6ImF1dG8iLCJ6LWluZGV4IjowLGxhYmVsOiIiLCJ0ZXh0LW1hcmdpbi14IjowLCJ0ZXh0LW1hcmdpbi15IjowLCJzb3VyY2UtbGFiZWwiOiIiLCJzb3VyY2UtdGV4dC1vZmZzZXQiOjAsInNvdXJjZS10ZXh0LW1hcmdpbi14IjowLCJzb3VyY2UtdGV4dC1tYXJnaW4teSI6MCwidGFyZ2V0LWxhYmVsIjoiIiwidGFyZ2V0LXRleHQtb2Zmc2V0IjowLCJ0YXJnZXQtdGV4dC1tYXJnaW4teCI6MCwidGFyZ2V0LXRleHQtbWFyZ2luLXkiOjAsIm92ZXJsYXktb3BhY2l0eSI6MCwib3ZlcmxheS1jb2xvciI6IiMwMDAiLCJvdmVybGF5LXBhZGRpbmciOjEwLCJvdmVybGF5LXNoYXBlIjoicm91bmQtcmVjdGFuZ2xlIiwib3ZlcmxheS1jb3JuZXItcmFkaXVzIjoiYXV0byIsInVuZGVybGF5LW9wYWNpdHkiOjAsInVuZGVybGF5LWNvbG9yIjoiIzAwMCIsInVuZGVybGF5LXBhZGRpbmciOjEwLCJ1bmRlcmxheS1zaGFwZSI6InJvdW5kLXJlY3RhbmdsZSIsInVuZGVybGF5LWNvcm5lci1yYWRpdXMiOiJhdXRvIiwidHJhbnNpdGlvbi1wcm9wZXJ0eSI6Im5vbmUiLCJ0cmFuc2l0aW9uLWR1cmF0aW9uIjowLCJ0cmFuc2l0aW9uLWRlbGF5IjowLCJ0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbiI6ImxpbmVhciIsImJhY2tncm91bmQtYmxhY2tlbiI6MCwiYmFja2dyb3VuZC1jb2xvciI6IiM5OTkiLCJiYWNrZ3JvdW5kLWZpbGwiOiJzb2xpZCIsImJhY2tncm91bmQtb3BhY2l0eSI6MSwiYmFja2dyb3VuZC1pbWFnZSI6Im5vbmUiLCJiYWNrZ3JvdW5kLWltYWdlLWNyb3Nzb3JpZ2luIjoiYW5vbnltb3VzIiwiYmFja2dyb3VuZC1pbWFnZS1vcGFjaXR5IjoxLCJiYWNrZ3JvdW5kLWltYWdlLWNvbnRhaW5tZW50IjoiaW5zaWRlIiwiYmFja2dyb3VuZC1pbWFnZS1zbW9vdGhpbmciOiJ5ZXMiLCJiYWNrZ3JvdW5kLXBvc2l0aW9uLXgiOiI1MCUiLCJiYWNrZ3JvdW5kLXBvc2l0aW9uLXkiOiI1MCUiLCJiYWNrZ3JvdW5kLW9mZnNldC14IjowLCJiYWNrZ3JvdW5kLW9mZnNldC15IjowLCJiYWNrZ3JvdW5kLXdpZHRoLXJlbGF0aXZlLXRvIjoiaW5jbHVkZS1wYWRkaW5nIiwiYmFja2dyb3VuZC1oZWlnaHQtcmVsYXRpdmUtdG8iOiJpbmNsdWRlLXBhZGRpbmciLCJiYWNrZ3JvdW5kLXJlcGVhdCI6Im5vLXJlcGVhdCIsImJhY2tncm91bmQtZml0Ijoibm9uZSIsImJhY2tncm91bmQtY2xpcCI6Im5vZGUiLCJiYWNrZ3JvdW5kLXdpZHRoIjoiYXV0byIsImJhY2tncm91bmQtaGVpZ2h0IjoiYXV0byIsImJvcmRlci1jb2xvciI6IiMwMDAiLCJib3JkZXItb3BhY2l0eSI6MSwiYm9yZGVyLXdpZHRoIjowLCJib3JkZXItc3R5bGUiOiJzb2xpZCIsImJvcmRlci1kYXNoLXBhdHRlcm4iOls0LDJdLCJib3JkZXItZGFzaC1vZmZzZXQiOjAsImJvcmRlci1jYXAiOiJidXR0IiwiYm9yZGVyLWpvaW4iOiJtaXRlciIsImJvcmRlci1wb3NpdGlvbiI6ImNlbnRlciIsIm91dGxpbmUtY29sb3IiOiIjOTk5Iiwib3V0bGluZS1vcGFjaXR5IjoxLCJvdXRsaW5lLXdpZHRoIjowLCJvdXRsaW5lLW9mZnNldCI6MCwib3V0bGluZS1zdHlsZSI6InNvbGlkIixoZWlnaHQ6MzAsd2lkdGg6MzAsc2hhcGU6ImVsbGlwc2UiLCJzaGFwZS1wb2x5Z29uLXBvaW50cyI6Ii0xLCAtMSwgICAxLCAtMSwgICAxLCAxLCAgIC0xLCAxIiwiY29ybmVyLXJhZGl1cyI6ImF1dG8iLCJib3VuZHMtZXhwYW5zaW9uIjowLCJiYWNrZ3JvdW5kLWdyYWRpZW50LWRpcmVjdGlvbiI6InRvLWJvdHRvbSIsImJhY2tncm91bmQtZ3JhZGllbnQtc3RvcC1jb2xvcnMiOiIjOTk5IiwiYmFja2dyb3VuZC1ncmFkaWVudC1zdG9wLXBvc2l0aW9ucyI6IjAlIixnaG9zdDoibm8iLCJnaG9zdC1vZmZzZXQteSI6MCwiZ2hvc3Qtb2Zmc2V0LXgiOjAsImdob3N0LW9wYWNpdHkiOjAscGFkZGluZzowLCJwYWRkaW5nLXJlbGF0aXZlLXRvIjoid2lkdGgiLHBvc2l0aW9uOiJvcmlnaW4iLCJjb21wb3VuZC1zaXppbmctd3J0LWxhYmVscyI6ImluY2x1ZGUiLCJtaW4td2lkdGgiOjAsIm1pbi13aWR0aC1iaWFzLWxlZnQiOjAsIm1pbi13aWR0aC1iaWFzLXJpZ2h0IjowLCJtaW4taGVpZ2h0IjowLCJtaW4taGVpZ2h0LWJpYXMtdG9wIjowLCJtaW4taGVpZ2h0LWJpYXMtYm90dG9tIjowfSx7InBpZS1zaXplIjoiMTAwJSJ9LFt7bmFtZToicGllLXt7aX19LWJhY2tncm91bmQtY29sb3IiLHZhbHVlOiJibGFjayJ9LHtuYW1lOiJwaWUte3tpfX0tYmFja2dyb3VuZC1zaXplIix2YWx1ZToiMCUifSx7bmFtZToicGllLXt7aX19LWJhY2tncm91bmQtb3BhY2l0eSIsdmFsdWU6MX1dLnJlZHVjZShmdW5jdGlvbih1LGgpe2Zvcih2YXIgZj0xO2Y8PWthLnBpZUJhY2tncm91bmROO2YrKyl7dmFyIGQ9aC5uYW1lLnJlcGxhY2UoInt7aX19IixmKSxwPWgudmFsdWU7dVtkXT1wfXJldHVybiB1fSx7fSkseyJsaW5lLXN0eWxlIjoic29saWQiLCJsaW5lLWNvbG9yIjoiIzk5OSIsImxpbmUtZmlsbCI6InNvbGlkIiwibGluZS1jYXAiOiJidXR0IiwibGluZS1vcGFjaXR5IjoxLCJsaW5lLW91dGxpbmUtd2lkdGgiOjAsImxpbmUtb3V0bGluZS1jb2xvciI6IiMwMDAiLCJsaW5lLWdyYWRpZW50LXN0b3AtY29sb3JzIjoiIzk5OSIsImxpbmUtZ3JhZGllbnQtc3RvcC1wb3NpdGlvbnMiOiIwJSIsImNvbnRyb2wtcG9pbnQtc3RlcC1zaXplIjo0MCwiY29udHJvbC1wb2ludC13ZWlnaHRzIjouNSwic2VnbWVudC13ZWlnaHRzIjouNSwic2VnbWVudC1kaXN0YW5jZXMiOjIwLCJzZWdtZW50LXJhZGlpIjoxNSwicmFkaXVzLXR5cGUiOiJhcmMtcmFkaXVzIiwidGF4aS10dXJuIjoiNTAlIiwidGF4aS1yYWRpdXMiOjE1LCJ0YXhpLXR1cm4tbWluLWRpc3RhbmNlIjoxMCwidGF4aS1kaXJlY3Rpb24iOiJhdXRvIiwiZWRnZS1kaXN0YW5jZXMiOiJpbnRlcnNlY3Rpb24iLCJjdXJ2ZS1zdHlsZSI6ImhheXN0YWNrIiwiaGF5c3RhY2stcmFkaXVzIjowLCJhcnJvdy1zY2FsZSI6MSwibG9vcC1kaXJlY3Rpb24iOiItNDVkZWciLCJsb29wLXN3ZWVwIjoiLTkwZGVnIiwic291cmNlLWRpc3RhbmNlLWZyb20tbm9kZSI6MCwidGFyZ2V0LWRpc3RhbmNlLWZyb20tbm9kZSI6MCwic291cmNlLWVuZHBvaW50Ijoib3V0c2lkZS10by1ub2RlIiwidGFyZ2V0LWVuZHBvaW50Ijoib3V0c2lkZS10by1ub2RlIiwibGluZS1kYXNoLXBhdHRlcm4iOls2LDNdLCJsaW5lLWRhc2gtb2Zmc2V0IjowfSxbe25hbWU6ImFycm93LXNoYXBlIix2YWx1ZToibm9uZSJ9LHtuYW1lOiJhcnJvdy1jb2xvciIsdmFsdWU6IiM5OTkifSx7bmFtZToiYXJyb3ctZmlsbCIsdmFsdWU6ImZpbGxlZCJ9LHtuYW1lOiJhcnJvdy13aWR0aCIsdmFsdWU6MX1dLnJlZHVjZShmdW5jdGlvbih1LGgpe3JldHVybiBrYS5hcnJvd1ByZWZpeGVzLmZvckVhY2goZnVuY3Rpb24oZil7dmFyIGQ9ZisiLSIraC5uYW1lLHA9aC52YWx1ZTt1W2RdPXB9KSx1fSx7fSkpLHI9e30sbj0wO248dGhpcy5wcm9wZXJ0aWVzLmxlbmd0aDtuKyspe3ZhciBpPXRoaXMucHJvcGVydGllc1tuXTtpZighaS5wb2ludHNUbyl7dmFyIGE9aS5uYW1lLHM9ZVthXSxsPXRoaXMucGFyc2UoYSxzKTtyW2FdPWx9fXJldHVybiB0LmRlZmF1bHRQcm9wZXJ0aWVzPXIsdC5kZWZhdWx0UHJvcGVydGllc307a2EuYWRkRGVmYXVsdFN0eWxlc2hlZXQ9ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdG9yKCI6cGFyZW50IikuY3NzKHtzaGFwZToicmVjdGFuZ2xlIixwYWRkaW5nOjEwLCJiYWNrZ3JvdW5kLWNvbG9yIjoiI2VlZSIsImJvcmRlci1jb2xvciI6IiNjY2MiLCJib3JkZXItd2lkdGgiOjF9KS5zZWxlY3RvcigiZWRnZSIpLmNzcyh7d2lkdGg6M30pLnNlbGVjdG9yKCI6bG9vcCIpLmNzcyh7ImN1cnZlLXN0eWxlIjoiYmV6aWVyIn0pLnNlbGVjdG9yKCJlZGdlOmNvbXBvdW5kIikuY3NzKHsiY3VydmUtc3R5bGUiOiJiZXppZXIiLCJzb3VyY2UtZW5kcG9pbnQiOiJvdXRzaWRlLXRvLWxpbmUiLCJ0YXJnZXQtZW5kcG9pbnQiOiJvdXRzaWRlLXRvLWxpbmUifSkuc2VsZWN0b3IoIjpzZWxlY3RlZCIpLmNzcyh7ImJhY2tncm91bmQtY29sb3IiOiIjMDE2OUQ5IiwibGluZS1jb2xvciI6IiMwMTY5RDkiLCJzb3VyY2UtYXJyb3ctY29sb3IiOiIjMDE2OUQ5IiwidGFyZ2V0LWFycm93LWNvbG9yIjoiIzAxNjlEOSIsIm1pZC1zb3VyY2UtYXJyb3ctY29sb3IiOiIjMDE2OUQ5IiwibWlkLXRhcmdldC1hcnJvdy1jb2xvciI6IiMwMTY5RDkifSkuc2VsZWN0b3IoIjpwYXJlbnQ6c2VsZWN0ZWQiKS5jc3MoeyJiYWNrZ3JvdW5kLWNvbG9yIjoiI0NDRTFGOSIsImJvcmRlci1jb2xvciI6IiNhZWM4ZTUifSkuc2VsZWN0b3IoIjphY3RpdmUiKS5jc3MoeyJvdmVybGF5LWNvbG9yIjoiYmxhY2siLCJvdmVybGF5LXBhZGRpbmciOjEwLCJvdmVybGF5LW9wYWNpdHkiOi4yNX0pLHRoaXMuZGVmYXVsdExlbmd0aD10aGlzLmxlbmd0aH07Y0M9e307Y0MucGFyc2U9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcztpZihsaShlKSlyZXR1cm4gaS5wYXJzZUltcGxXYXJuKHQsZSxyLG4pO3ZhciBhPW49PT0ibWFwcGluZyJ8fG49PT0hMHx8bj09PSExfHxuPT1udWxsPyJkb250Y2FyZSI6bixzPXI/InQiOiJmIixsPSIiK2UsdT14Z2UodCxsLHMsYSksaD1pLnByb3BDYWNoZT1pLnByb3BDYWNoZXx8W10sZjtyZXR1cm4oZj1oW3VdKXx8KGY9aFt1XT1pLnBhcnNlSW1wbFdhcm4odCxlLHIsbikpLChyfHxuPT09Im1hcHBpbmciKSYmKGY9UWMoZiksZiYmKGYudmFsdWU9UWMoZi52YWx1ZSkpKSxmfTtjQy5wYXJzZUltcGxXYXJuPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMucGFyc2VJbXBsKHQsZSxyLG4pO3JldHVybiFpJiZlIT1udWxsJiZobigiVGhlIHN0eWxlIHByb3BlcnR5IGAiLmNvbmNhdCh0LCI6ICIpLmNvbmNhdChlLCJgIGlzIGludmFsaWQiKSksaSYmKGkubmFtZT09PSJ3aWR0aCJ8fGkubmFtZT09PSJoZWlnaHQiKSYmZT09PSJsYWJlbCImJmhuKCJUaGUgc3R5bGUgdmFsdWUgb2YgYGxhYmVsYCBpcyBkZXByZWNhdGVkIGZvciBgIitpLm5hbWUrImAiKSxpfTtjQy5wYXJzZUltcGw9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpczt0PUZCKHQpO3ZhciBhPWkucHJvcGVydGllc1t0XSxzPWUsbD1pLnR5cGVzO2lmKCFhfHxlPT09dm9pZCAwKXJldHVybiBudWxsO2EuYWxpYXMmJihhPWEucG9pbnRzVG8sdD1hLm5hbWUpO3ZhciB1PVp0KGUpO3UmJihlPWUudHJpbSgpKTt2YXIgaD1hLnR5cGU7aWYoIWgpcmV0dXJuIG51bGw7aWYociYmKGU9PT0iInx8ZT09PW51bGwpKXJldHVybntuYW1lOnQsdmFsdWU6ZSxieXBhc3M6ITAsZGVsZXRlQnlwYXNzOiEwfTtpZihsaShlKSlyZXR1cm57bmFtZTp0LHZhbHVlOmUsc3RyVmFsdWU6ImZuIixtYXBwZWQ6bC5mbixieXBhc3M6cn07dmFyIGYsZDtpZighKCF1fHxufHxlLmxlbmd0aDw3fHxlWzFdIT09ImEiKSl7aWYoZS5sZW5ndGg+PTcmJmVbMF09PT0iZCImJihmPW5ldyBSZWdFeHAobC5kYXRhLnJlZ2V4KS5leGVjKGUpKSl7aWYocilyZXR1cm4hMTt2YXIgcD1sLmRhdGE7cmV0dXJue25hbWU6dCx2YWx1ZTpmLHN0clZhbHVlOiIiK2UsbWFwcGVkOnAsZmllbGQ6ZlsxXSxieXBhc3M6cn19ZWxzZSBpZihlLmxlbmd0aD49MTAmJmVbMF09PT0ibSImJihkPW5ldyBSZWdFeHAobC5tYXBEYXRhLnJlZ2V4KS5leGVjKGUpKSl7aWYocnx8aC5tdWx0aXBsZSlyZXR1cm4hMTt2YXIgbT1sLm1hcERhdGE7aWYoIShoLmNvbG9yfHxoLm51bWJlcikpcmV0dXJuITE7dmFyIGc9dGhpcy5wYXJzZSh0LGRbNF0pO2lmKCFnfHxnLm1hcHBlZClyZXR1cm4hMTt2YXIgeT10aGlzLnBhcnNlKHQsZFs1XSk7aWYoIXl8fHkubWFwcGVkKXJldHVybiExO2lmKGcucGZWYWx1ZT09PXkucGZWYWx1ZXx8Zy5zdHJWYWx1ZT09PXkuc3RyVmFsdWUpcmV0dXJuIGhuKCJgIit0KyI6ICIrZSsiYCBpcyBub3QgYSB2YWxpZCBtYXBwZXIgYmVjYXVzZSB0aGUgb3V0cHV0IHJhbmdlIGlzIHplcm87IGNvbnZlcnRpbmcgdG8gYCIrdCsiOiAiK2cuc3RyVmFsdWUrImAiKSx0aGlzLnBhcnNlKHQsZy5zdHJWYWx1ZSk7aWYoaC5jb2xvcil7dmFyIHY9Zy52YWx1ZSx4PXkudmFsdWUsYj12WzBdPT09eFswXSYmdlsxXT09PXhbMV0mJnZbMl09PT14WzJdJiYodlszXT09PXhbM118fCh2WzNdPT1udWxsfHx2WzNdPT09MSkmJih4WzNdPT1udWxsfHx4WzNdPT09MSkpO2lmKGIpcmV0dXJuITF9cmV0dXJue25hbWU6dCx2YWx1ZTpkLHN0clZhbHVlOiIiK2UsbWFwcGVkOm0sZmllbGQ6ZFsxXSxmaWVsZE1pbjpwYXJzZUZsb2F0KGRbMl0pLGZpZWxkTWF4OnBhcnNlRmxvYXQoZFszXSksdmFsdWVNaW46Zy52YWx1ZSx2YWx1ZU1heDp5LnZhbHVlLGJ5cGFzczpyfX19aWYoaC5tdWx0aXBsZSYmbiE9PSJtdWx0aXBsZSIpe3ZhciBUO2lmKHU/VD1lLnNwbGl0KC9ccysvKTpFbihlKT9UPWU6VD1bZV0saC5ldmVuTXVsdGlwbGUmJlQubGVuZ3RoJTIhPT0wKXJldHVybiBudWxsO2Zvcih2YXIgUz1bXSx3PVtdLEU9W10sXz0iIixDPSExLEQ9MDtEPFQubGVuZ3RoO0QrKyl7dmFyIE89aS5wYXJzZSh0LFRbRF0sciwibXVsdGlwbGUiKTtDPUN8fFp0KE8udmFsdWUpLFMucHVzaChPLnZhbHVlKSxFLnB1c2goTy5wZlZhbHVlIT1udWxsP08ucGZWYWx1ZTpPLnZhbHVlKSx3LnB1c2goTy51bml0cyksXys9KEQ+MD8iICI6IiIpK08uc3RyVmFsdWV9cmV0dXJuIGgudmFsaWRhdGUmJiFoLnZhbGlkYXRlKFMsdyk/bnVsbDpoLnNpbmdsZUVudW0mJkM/Uy5sZW5ndGg9PT0xJiZadChTWzBdKT97bmFtZTp0LHZhbHVlOlNbMF0sc3RyVmFsdWU6U1swXSxieXBhc3M6cn06bnVsbDp7bmFtZTp0LHZhbHVlOlMscGZWYWx1ZTpFLHN0clZhbHVlOl8sYnlwYXNzOnIsdW5pdHM6d319dmFyIFI9byhmdW5jdGlvbigpe2Zvcih2YXIgUT0wO1E8aC5lbnVtcy5sZW5ndGg7USsrKXt2YXIgaj1oLmVudW1zW1FdO2lmKGo9PT1lKXJldHVybntuYW1lOnQsdmFsdWU6ZSxzdHJWYWx1ZToiIitlLGJ5cGFzczpyfX1yZXR1cm4gbnVsbH0sImNoZWNrRW51bXMiKTtpZihoLm51bWJlcil7dmFyIGssTD0icHgiO2lmKGgudW5pdHMmJihrPWgudW5pdHMpLGguaW1wbGljaXRVbml0cyYmKEw9aC5pbXBsaWNpdFVuaXRzKSwhaC51bml0bGVzcylpZih1KXt2YXIgQT0icHh8ZW0iKyhoLmFsbG93UGVyY2VudD8ifFxcJSI6IiIpO2smJihBPWspO3ZhciBJPWUubWF0Y2goIl4oIitXaSsiKSgiK0ErIik/JCIpO0kmJihlPUlbMV0saz1JWzJdfHxMKX1lbHNlKCFrfHxoLmltcGxpY2l0VW5pdHMpJiYoaz1MKTtpZihlPXBhcnNlRmxvYXQoZSksaXNOYU4oZSkmJmguZW51bXM9PT12b2lkIDApcmV0dXJuIG51bGw7aWYoaXNOYU4oZSkmJmguZW51bXMhPT12b2lkIDApcmV0dXJuIGU9cyxSKCk7aWYoaC5pbnRlZ2VyJiYhdnFlKGUpfHxoLm1pbiE9PXZvaWQgMCYmKGU8aC5taW58fGguc3RyaWN0TWluJiZlPT09aC5taW4pfHxoLm1heCE9PXZvaWQgMCYmKGU+aC5tYXh8fGguc3RyaWN0TWF4JiZlPT09aC5tYXgpKXJldHVybiBudWxsO3ZhciBNPXtuYW1lOnQsdmFsdWU6ZSxzdHJWYWx1ZToiIitlKyhrfHwiIiksdW5pdHM6ayxieXBhc3M6cn07cmV0dXJuIGgudW5pdGxlc3N8fGshPT0icHgiJiZrIT09ImVtIj9NLnBmVmFsdWU9ZTpNLnBmVmFsdWU9az09PSJweCJ8fCFrP2U6dGhpcy5nZXRFbVNpemVJblBpeGVscygpKmUsKGs9PT0ibXMifHxrPT09InMiKSYmKE0ucGZWYWx1ZT1rPT09Im1zIj9lOjFlMyplKSwoaz09PSJkZWcifHxrPT09InJhZCIpJiYoTS5wZlZhbHVlPWs9PT0icmFkIj9lOlFZZShlKSksaz09PSIlIiYmKE0ucGZWYWx1ZT1lLzEwMCksTX1lbHNlIGlmKGgucHJvcExpc3Qpe3ZhciBQPVtdLEI9IiIrZTtpZihCIT09Im5vbmUiKXtmb3IodmFyIEY9Qi5zcGxpdCgvXHMqLFxzKnxccysvKSx6PTA7ejxGLmxlbmd0aDt6Kyspe3ZhciAkPUZbel0udHJpbSgpO2kucHJvcGVydGllc1skXT9QLnB1c2goJCk6aG4oImAiKyQrImAgaXMgbm90IGEgdmFsaWQgcHJvcGVydHkgbmFtZSIpfWlmKFAubGVuZ3RoPT09MClyZXR1cm4gbnVsbH1yZXR1cm57bmFtZTp0LHZhbHVlOlAsc3RyVmFsdWU6UC5sZW5ndGg9PT0wPyJub25lIjpQLmpvaW4oIiAiKSxieXBhc3M6cn19ZWxzZSBpZihoLmNvbG9yKXt2YXIgVT1oZ2UoZSk7cmV0dXJuIFU/e25hbWU6dCx2YWx1ZTpVLHBmVmFsdWU6VSxzdHJWYWx1ZToicmdiKCIrVVswXSsiLCIrVVsxXSsiLCIrVVsyXSsiKSIsYnlwYXNzOnJ9Om51bGx9ZWxzZSBpZihoLnJlZ2V4fHxoLnJlZ2V4ZXMpe2lmKGguZW51bXMpe3ZhciBLPVIoKTtpZihLKXJldHVybiBLfWZvcih2YXIgZWU9aC5yZWdleGVzP2gucmVnZXhlczpbaC5yZWdleF0sWT0wO1k8ZWUubGVuZ3RoO1krKyl7dmFyIGNlPW5ldyBSZWdFeHAoZWVbWV0pLFo9Y2UuZXhlYyhlKTtpZihaKXJldHVybntuYW1lOnQsdmFsdWU6aC5zaW5nbGVSZWdleE1hdGNoVmFsdWU/WlsxXTpaLHN0clZhbHVlOiIiK2UsYnlwYXNzOnJ9fXJldHVybiBudWxsfWVsc2UgcmV0dXJuIGguc3RyaW5nP3tuYW1lOnQsdmFsdWU6IiIrZSxzdHJWYWx1ZToiIitlLGJ5cGFzczpyfTpoLmVudW1zP1IoKTpudWxsfTtVYT1vKGZ1bmN0aW9uIHQoZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgdCkpcmV0dXJuIG5ldyB0KGUpO2lmKCFCQihlKSl7b2koIkEgc3R5bGUgbXVzdCBoYXZlIGEgY29yZSByZWZlcmVuY2UiKTtyZXR1cm59dGhpcy5fcHJpdmF0ZT17Y3k6ZSxjb3JlU3R5bGU6e319LHRoaXMubGVuZ3RoPTAsdGhpcy5yZXNldFRvRGVmYXVsdCgpfSwiU3R5bGUiKSxXYT1VYS5wcm90b3R5cGU7V2EuaW5zdGFuY2VTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4ic3R5bGUifTtXYS5jbGVhcj1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9wcml2YXRlLGU9dC5jeSxyPWUuZWxlbWVudHMoKSxuPTA7bjx0aGlzLmxlbmd0aDtuKyspdGhpc1tuXT12b2lkIDA7cmV0dXJuIHRoaXMubGVuZ3RoPTAsdC5jb250ZXh0U3R5bGVzPXt9LHQucHJvcERpZmZzPXt9LHRoaXMuY2xlYW5FbGVtZW50cyhyLCEwKSxyLmZvckVhY2goZnVuY3Rpb24oaSl7dmFyIGE9aVswXS5fcHJpdmF0ZTthLnN0eWxlRGlydHk9ITAsYS5hcHBsaWVkSW5pdFN0eWxlPSExfSksdGhpc307V2EucmVzZXRUb0RlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbGVhcigpLHRoaXMuYWRkRGVmYXVsdFN0eWxlc2hlZXQoKSx0aGlzfTtXYS5jb3JlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wcml2YXRlLmNvcmVTdHlsZVt0XXx8dGhpcy5nZXREZWZhdWx0UHJvcGVydHkodCl9O1dhLnNlbGVjdG9yPWZ1bmN0aW9uKHQpe3ZhciBlPXQ9PT0iY29yZSI/bnVsbDpuZXcgJGYodCkscj10aGlzLmxlbmd0aCsrO3JldHVybiB0aGlzW3JdPXtzZWxlY3RvcjplLHByb3BlcnRpZXM6W10sbWFwcGVkUHJvcGVydGllczpbXSxpbmRleDpyfSx0aGlzfTtXYS5jc3M9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9YXJndW1lbnRzO2lmKGUubGVuZ3RoPT09MSlmb3IodmFyIHI9ZVswXSxuPTA7bjx0LnByb3BlcnRpZXMubGVuZ3RoO24rKyl7dmFyIGk9dC5wcm9wZXJ0aWVzW25dLGE9cltpLm5hbWVdO2E9PT12b2lkIDAmJihhPXJbSzYoaS5uYW1lKV0pLGEhPT12b2lkIDAmJnRoaXMuY3NzUnVsZShpLm5hbWUsYSl9ZWxzZSBlLmxlbmd0aD09PTImJnRoaXMuY3NzUnVsZShlWzBdLGVbMV0pO3JldHVybiB0aGlzfTtXYS5zdHlsZT1XYS5jc3M7V2EuY3NzUnVsZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMucGFyc2UodCxlKTtpZihyKXt2YXIgbj10aGlzLmxlbmd0aC0xO3RoaXNbbl0ucHJvcGVydGllcy5wdXNoKHIpLHRoaXNbbl0ucHJvcGVydGllc1tyLm5hbWVdPXIsci5uYW1lLm1hdGNoKC9waWUtKFxkKyktYmFja2dyb3VuZC1zaXplLykmJnIudmFsdWUmJih0aGlzLl9wcml2YXRlLmhhc1BpZT0hMCksci5tYXBwZWQmJnRoaXNbbl0ubWFwcGVkUHJvcGVydGllcy5wdXNoKHIpO3ZhciBpPSF0aGlzW25dLnNlbGVjdG9yO2kmJih0aGlzLl9wcml2YXRlLmNvcmVTdHlsZVtyLm5hbWVdPXIpfXJldHVybiB0aGlzfTtXYS5hcHBlbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGxnZSh0KT90LmFwcGVuZFRvU3R5bGUodGhpcyk6RW4odCk/dGhpcy5hcHBlbmRGcm9tSnNvbih0KTpadCh0KSYmdGhpcy5hcHBlbmRGcm9tU3RyaW5nKHQpLHRoaXN9O1VhLmZyb21Kc29uPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IFVhKHQpO3JldHVybiByLmZyb21Kc29uKGUpLHJ9O1VhLmZyb21TdHJpbmc9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IFVhKHQpLmZyb21TdHJpbmcoZSl9O1txYSx5NCxaQixKYyxsQyxKQixrYSxjQ10uZm9yRWFjaChmdW5jdGlvbih0KXtpcihXYSx0KX0pO1VhLnR5cGVzPVdhLnR5cGVzO1VhLnByb3BlcnRpZXM9V2EucHJvcGVydGllcztVYS5wcm9wZXJ0eUdyb3Vwcz1XYS5wcm9wZXJ0eUdyb3VwcztVYS5wcm9wZXJ0eUdyb3VwTmFtZXM9V2EucHJvcGVydHlHcm91cE5hbWVzO1VhLnByb3BlcnR5R3JvdXBLZXlzPVdhLnByb3BlcnR5R3JvdXBLZXlzO3laZT17c3R5bGU6byhmdW5jdGlvbihlKXtpZihlKXt2YXIgcj10aGlzLnNldFN0eWxlKGUpO3IudXBkYXRlKCl9cmV0dXJuIHRoaXMuX3ByaXZhdGUuc3R5bGV9LCJzdHlsZSIpLHNldFN0eWxlOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gbGdlKGUpP3Iuc3R5bGU9ZS5nZW5lcmF0ZVN0eWxlKHRoaXMpOkVuKGUpP3Iuc3R5bGU9VWEuZnJvbUpzb24odGhpcyxlKTpadChlKT9yLnN0eWxlPVVhLmZyb21TdHJpbmcodGhpcyxlKTpyLnN0eWxlPVVhKHRoaXMpLHIuc3R5bGV9LCJzZXRTdHlsZSIpLHVwZGF0ZVN0eWxlOm8oZnVuY3Rpb24oKXt0aGlzLm11dGFibGVFbGVtZW50cygpLnVwZGF0ZVN0eWxlKCl9LCJ1cGRhdGVTdHlsZSIpfSx2WmU9InNpbmdsZSIsZTA9e2F1dG9sb2NrOm8oZnVuY3Rpb24oZSl7aWYoZSE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLmF1dG9sb2NrPSEhZTtlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLmF1dG9sb2NrO3JldHVybiB0aGlzfSwiYXV0b2xvY2siKSxhdXRvdW5ncmFiaWZ5Om8oZnVuY3Rpb24oZSl7aWYoZSE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLmF1dG91bmdyYWJpZnk9ISFlO2Vsc2UgcmV0dXJuIHRoaXMuX3ByaXZhdGUuYXV0b3VuZ3JhYmlmeTtyZXR1cm4gdGhpc30sImF1dG91bmdyYWJpZnkiKSxhdXRvdW5zZWxlY3RpZnk6byhmdW5jdGlvbihlKXtpZihlIT09dm9pZCAwKXRoaXMuX3ByaXZhdGUuYXV0b3Vuc2VsZWN0aWZ5PSEhZTtlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLmF1dG91bnNlbGVjdGlmeTtyZXR1cm4gdGhpc30sImF1dG91bnNlbGVjdGlmeSIpLHNlbGVjdGlvblR5cGU6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLl9wcml2YXRlO2lmKHIuc2VsZWN0aW9uVHlwZT09bnVsbCYmKHIuc2VsZWN0aW9uVHlwZT12WmUpLGUhPT12b2lkIDApKGU9PT0iYWRkaXRpdmUifHxlPT09InNpbmdsZSIpJiYoci5zZWxlY3Rpb25UeXBlPWUpO2Vsc2UgcmV0dXJuIHIuc2VsZWN0aW9uVHlwZTtyZXR1cm4gdGhpc30sInNlbGVjdGlvblR5cGUiKSxwYW5uaW5nRW5hYmxlZDpvKGZ1bmN0aW9uKGUpe2lmKGUhPT12b2lkIDApdGhpcy5fcHJpdmF0ZS5wYW5uaW5nRW5hYmxlZD0hIWU7ZWxzZSByZXR1cm4gdGhpcy5fcHJpdmF0ZS5wYW5uaW5nRW5hYmxlZDtyZXR1cm4gdGhpc30sInBhbm5pbmdFbmFibGVkIiksdXNlclBhbm5pbmdFbmFibGVkOm8oZnVuY3Rpb24oZSl7aWYoZSE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLnVzZXJQYW5uaW5nRW5hYmxlZD0hIWU7ZWxzZSByZXR1cm4gdGhpcy5fcHJpdmF0ZS51c2VyUGFubmluZ0VuYWJsZWQ7cmV0dXJuIHRoaXN9LCJ1c2VyUGFubmluZ0VuYWJsZWQiKSx6b29taW5nRW5hYmxlZDpvKGZ1bmN0aW9uKGUpe2lmKGUhPT12b2lkIDApdGhpcy5fcHJpdmF0ZS56b29taW5nRW5hYmxlZD0hIWU7ZWxzZSByZXR1cm4gdGhpcy5fcHJpdmF0ZS56b29taW5nRW5hYmxlZDtyZXR1cm4gdGhpc30sInpvb21pbmdFbmFibGVkIiksdXNlclpvb21pbmdFbmFibGVkOm8oZnVuY3Rpb24oZSl7aWYoZSE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLnVzZXJab29taW5nRW5hYmxlZD0hIWU7ZWxzZSByZXR1cm4gdGhpcy5fcHJpdmF0ZS51c2VyWm9vbWluZ0VuYWJsZWQ7cmV0dXJuIHRoaXN9LCJ1c2VyWm9vbWluZ0VuYWJsZWQiKSxib3hTZWxlY3Rpb25FbmFibGVkOm8oZnVuY3Rpb24oZSl7aWYoZSE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLmJveFNlbGVjdGlvbkVuYWJsZWQ9ISFlO2Vsc2UgcmV0dXJuIHRoaXMuX3ByaXZhdGUuYm94U2VsZWN0aW9uRW5hYmxlZDtyZXR1cm4gdGhpc30sImJveFNlbGVjdGlvbkVuYWJsZWQiKSxwYW46byhmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cyxyPXRoaXMuX3ByaXZhdGUucGFuLG4saSxhLHMsbDtzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gcjtjYXNlIDE6aWYoWnQoZVswXSkpcmV0dXJuIG49ZVswXSxyW25dO2lmKFVyKGVbMF0pKXtpZighdGhpcy5fcHJpdmF0ZS5wYW5uaW5nRW5hYmxlZClyZXR1cm4gdGhpczthPWVbMF0scz1hLngsbD1hLnksX3QocykmJihyLng9cyksX3QobCkmJihyLnk9bCksdGhpcy5lbWl0KCJwYW4gdmlld3BvcnQiKX1icmVhaztjYXNlIDI6aWYoIXRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWQpcmV0dXJuIHRoaXM7bj1lWzBdLGk9ZVsxXSwobj09PSJ4Inx8bj09PSJ5IikmJl90KGkpJiYocltuXT1pKSx0aGlzLmVtaXQoInBhbiB2aWV3cG9ydCIpO2JyZWFrfXJldHVybiB0aGlzLm5vdGlmeSgidmlld3BvcnQiKSx0aGlzfSwicGFuIikscGFuQnk6byhmdW5jdGlvbihlLHIpe3ZhciBuPWFyZ3VtZW50cyxpPXRoaXMuX3ByaXZhdGUucGFuLGEscyxsLHUsaDtpZighdGhpcy5fcHJpdmF0ZS5wYW5uaW5nRW5hYmxlZClyZXR1cm4gdGhpcztzd2l0Y2gobi5sZW5ndGgpe2Nhc2UgMTpVcihlKSYmKGw9blswXSx1PWwueCxoPWwueSxfdCh1KSYmKGkueCs9dSksX3QoaCkmJihpLnkrPWgpLHRoaXMuZW1pdCgicGFuIHZpZXdwb3J0IikpO2JyZWFrO2Nhc2UgMjphPWUscz1yLChhPT09IngifHxhPT09InkiKSYmX3QocykmJihpW2FdKz1zKSx0aGlzLmVtaXQoInBhbiB2aWV3cG9ydCIpO2JyZWFrfXJldHVybiB0aGlzLm5vdGlmeSgidmlld3BvcnQiKSx0aGlzfSwicGFuQnkiKSxnYzpvKGZ1bmN0aW9uKCl7dGhpcy5ub3RpZnkoImdjIil9LCJnYyIpLGZpdDpvKGZ1bmN0aW9uKGUscil7dmFyIG49dGhpcy5nZXRGaXRWaWV3cG9ydChlLHIpO2lmKG4pe3ZhciBpPXRoaXMuX3ByaXZhdGU7aS56b29tPW4uem9vbSxpLnBhbj1uLnBhbix0aGlzLmVtaXQoInBhbiB6b29tIHZpZXdwb3J0IiksdGhpcy5ub3RpZnkoInZpZXdwb3J0Iil9cmV0dXJuIHRoaXN9LCJmaXQiKSxnZXRGaXRWaWV3cG9ydDpvKGZ1bmN0aW9uKGUscil7aWYoX3QoZSkmJnI9PT12b2lkIDAmJihyPWUsZT12b2lkIDApLCEoIXRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWR8fCF0aGlzLl9wcml2YXRlLnpvb21pbmdFbmFibGVkKSl7dmFyIG47aWYoWnQoZSkpe3ZhciBpPWU7ZT10aGlzLiQoaSl9ZWxzZSBpZihUcWUoZSkpe3ZhciBhPWU7bj17eDE6YS54MSx5MTphLnkxLHgyOmEueDIseTI6YS55Mn0sbi53PW4ueDItbi54MSxuLmg9bi55Mi1uLnkxfWVsc2UgeG8oZSl8fChlPXRoaXMubXV0YWJsZUVsZW1lbnRzKCkpO2lmKCEoeG8oZSkmJmUuZW1wdHkoKSkpe249bnx8ZS5ib3VuZGluZ0JveCgpO3ZhciBzPXRoaXMud2lkdGgoKSxsPXRoaXMuaGVpZ2h0KCksdTtpZihyPV90KHIpP3I6MCwhaXNOYU4ocykmJiFpc05hTihsKSYmcz4wJiZsPjAmJiFpc05hTihuLncpJiYhaXNOYU4obi5oKSYmbi53PjAmJm4uaD4wKXt1PU1hdGgubWluKChzLTIqcikvbi53LChsLTIqcikvbi5oKSx1PXU+dGhpcy5fcHJpdmF0ZS5tYXhab29tP3RoaXMuX3ByaXZhdGUubWF4Wm9vbTp1LHU9dTx0aGlzLl9wcml2YXRlLm1pblpvb20/dGhpcy5fcHJpdmF0ZS5taW5ab29tOnU7dmFyIGg9e3g6KHMtdSoobi54MStuLngyKSkvMix5OihsLXUqKG4ueTErbi55MikpLzJ9O3JldHVybnt6b29tOnUscGFuOmh9fX19fSwiZ2V0Rml0Vmlld3BvcnQiKSx6b29tUmFuZ2U6byhmdW5jdGlvbihlLHIpe3ZhciBuPXRoaXMuX3ByaXZhdGU7aWYocj09bnVsbCl7dmFyIGk9ZTtlPWkubWluLHI9aS5tYXh9cmV0dXJuIF90KGUpJiZfdChyKSYmZTw9cj8obi5taW5ab29tPWUsbi5tYXhab29tPXIpOl90KGUpJiZyPT09dm9pZCAwJiZlPD1uLm1heFpvb20/bi5taW5ab29tPWU6X3QocikmJmU9PT12b2lkIDAmJnI+PW4ubWluWm9vbSYmKG4ubWF4Wm9vbT1yKSx0aGlzfSwiem9vbVJhbmdlIiksbWluWm9vbTpvKGZ1bmN0aW9uKGUpe3JldHVybiBlPT09dm9pZCAwP3RoaXMuX3ByaXZhdGUubWluWm9vbTp0aGlzLnpvb21SYW5nZSh7bWluOmV9KX0sIm1pblpvb20iKSxtYXhab29tOm8oZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT12b2lkIDA/dGhpcy5fcHJpdmF0ZS5tYXhab29tOnRoaXMuem9vbVJhbmdlKHttYXg6ZX0pfSwibWF4Wm9vbSIpLGdldFpvb21lZFZpZXdwb3J0Om8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fcHJpdmF0ZSxuPXIucGFuLGk9ci56b29tLGEscyxsPSExO2lmKHIuem9vbWluZ0VuYWJsZWR8fChsPSEwKSxfdChlKT9zPWU6VXIoZSkmJihzPWUubGV2ZWwsZS5wb3NpdGlvbiE9bnVsbD9hPUo2KGUucG9zaXRpb24saSxuKTplLnJlbmRlcmVkUG9zaXRpb24hPW51bGwmJihhPWUucmVuZGVyZWRQb3NpdGlvbiksYSE9bnVsbCYmIXIucGFubmluZ0VuYWJsZWQmJihsPSEwKSkscz1zPnIubWF4Wm9vbT9yLm1heFpvb206cyxzPXM8ci5taW5ab29tP3IubWluWm9vbTpzLGx8fCFfdChzKXx8cz09PWl8fGEhPW51bGwmJighX3QoYS54KXx8IV90KGEueSkpKXJldHVybiBudWxsO2lmKGEhPW51bGwpe3ZhciB1PW4saD1pLGY9cyxkPXt4Oi1mL2gqKGEueC11LngpK2EueCx5Oi1mL2gqKGEueS11LnkpK2EueX07cmV0dXJue3pvb21lZDohMCxwYW5uZWQ6ITAsem9vbTpmLHBhbjpkfX1lbHNlIHJldHVybnt6b29tZWQ6ITAscGFubmVkOiExLHpvb206cyxwYW46bn19LCJnZXRab29tZWRWaWV3cG9ydCIpLHpvb206byhmdW5jdGlvbihlKXtpZihlPT09dm9pZCAwKXJldHVybiB0aGlzLl9wcml2YXRlLnpvb207dmFyIHI9dGhpcy5nZXRab29tZWRWaWV3cG9ydChlKSxuPXRoaXMuX3ByaXZhdGU7cmV0dXJuIHI9PW51bGx8fCFyLnpvb21lZD90aGlzOihuLnpvb209ci56b29tLHIucGFubmVkJiYobi5wYW4ueD1yLnBhbi54LG4ucGFuLnk9ci5wYW4ueSksdGhpcy5lbWl0KCJ6b29tIisoci5wYW5uZWQ/IiBwYW4iOiIiKSsiIHZpZXdwb3J0IiksdGhpcy5ub3RpZnkoInZpZXdwb3J0IiksdGhpcyl9LCJ6b29tIiksdmlld3BvcnQ6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLl9wcml2YXRlLG49ITAsaT0hMCxhPVtdLHM9ITEsbD0hMTtpZighZSlyZXR1cm4gdGhpcztpZihfdChlLnpvb20pfHwobj0hMSksVXIoZS5wYW4pfHwoaT0hMSksIW4mJiFpKXJldHVybiB0aGlzO2lmKG4pe3ZhciB1PWUuem9vbTt1PHIubWluWm9vbXx8dT5yLm1heFpvb218fCFyLnpvb21pbmdFbmFibGVkP3M9ITA6KHIuem9vbT11LGEucHVzaCgiem9vbSIpKX1pZihpJiYoIXN8fCFlLmNhbmNlbE9uRmFpbGVkWm9vbSkmJnIucGFubmluZ0VuYWJsZWQpe3ZhciBoPWUucGFuO190KGgueCkmJihyLnBhbi54PWgueCxsPSExKSxfdChoLnkpJiYoci5wYW4ueT1oLnksbD0hMSksbHx8YS5wdXNoKCJwYW4iKX1yZXR1cm4gYS5sZW5ndGg+MCYmKGEucHVzaCgidmlld3BvcnQiKSx0aGlzLmVtaXQoYS5qb2luKCIgIikpLHRoaXMubm90aWZ5KCJ2aWV3cG9ydCIpKSx0aGlzfSwidmlld3BvcnQiKSxjZW50ZXI6byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLmdldENlbnRlclBhbihlKTtyZXR1cm4gciYmKHRoaXMuX3ByaXZhdGUucGFuPXIsdGhpcy5lbWl0KCJwYW4gdmlld3BvcnQiKSx0aGlzLm5vdGlmeSgidmlld3BvcnQiKSksdGhpc30sImNlbnRlciIpLGdldENlbnRlclBhbjpvKGZ1bmN0aW9uKGUscil7aWYodGhpcy5fcHJpdmF0ZS5wYW5uaW5nRW5hYmxlZCl7aWYoWnQoZSkpe3ZhciBuPWU7ZT10aGlzLm11dGFibGVFbGVtZW50cygpLmZpbHRlcihuKX1lbHNlIHhvKGUpfHwoZT10aGlzLm11dGFibGVFbGVtZW50cygpKTtpZihlLmxlbmd0aCE9PTApe3ZhciBpPWUuYm91bmRpbmdCb3goKSxhPXRoaXMud2lkdGgoKSxzPXRoaXMuaGVpZ2h0KCk7cj1yPT09dm9pZCAwP3RoaXMuX3ByaXZhdGUuem9vbTpyO3ZhciBsPXt4OihhLXIqKGkueDEraS54MikpLzIseToocy1yKihpLnkxK2kueTIpKS8yfTtyZXR1cm4gbH19fSwiZ2V0Q2VudGVyUGFuIikscmVzZXQ6byhmdW5jdGlvbigpe3JldHVybiF0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkfHwhdGhpcy5fcHJpdmF0ZS56b29taW5nRW5hYmxlZD90aGlzOih0aGlzLnZpZXdwb3J0KHtwYW46e3g6MCx5OjB9LHpvb206MX0pLHRoaXMpfSwicmVzZXQiKSxpbnZhbGlkYXRlU2l6ZTpvKGZ1bmN0aW9uKCl7dGhpcy5fcHJpdmF0ZS5zaXplQ2FjaGU9bnVsbH0sImludmFsaWRhdGVTaXplIiksc2l6ZTpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcHJpdmF0ZSxyPWUuY29udGFpbmVyLG49dGhpcztyZXR1cm4gZS5zaXplQ2FjaGU9ZS5zaXplQ2FjaGV8fChyP2Z1bmN0aW9uKCl7dmFyIGk9bi53aW5kb3coKS5nZXRDb21wdXRlZFN0eWxlKHIpLGE9byhmdW5jdGlvbihsKXtyZXR1cm4gcGFyc2VGbG9hdChpLmdldFByb3BlcnR5VmFsdWUobCkpfSwidmFsIik7cmV0dXJue3dpZHRoOnIuY2xpZW50V2lkdGgtYSgicGFkZGluZy1sZWZ0IiktYSgicGFkZGluZy1yaWdodCIpLGhlaWdodDpyLmNsaWVudEhlaWdodC1hKCJwYWRkaW5nLXRvcCIpLWEoInBhZGRpbmctYm90dG9tIil9fSgpOnt3aWR0aDoxLGhlaWdodDoxfSl9LCJzaXplIiksd2lkdGg6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemUoKS53aWR0aH0sIndpZHRoIiksaGVpZ2h0Om8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaXplKCkuaGVpZ2h0fSwiaGVpZ2h0IiksZXh0ZW50Om8oZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9wcml2YXRlLnBhbixyPXRoaXMuX3ByaXZhdGUuem9vbSxuPXRoaXMucmVuZGVyZWRFeHRlbnQoKSxpPXt4MToobi54MS1lLngpL3IseDI6KG4ueDItZS54KS9yLHkxOihuLnkxLWUueSkvcix5Mjoobi55Mi1lLnkpL3J9O3JldHVybiBpLnc9aS54Mi1pLngxLGkuaD1pLnkyLWkueTEsaX0sImV4dGVudCIpLHJlbmRlcmVkRXh0ZW50Om8oZnVuY3Rpb24oKXt2YXIgZT10aGlzLndpZHRoKCkscj10aGlzLmhlaWdodCgpO3JldHVybnt4MTowLHkxOjAseDI6ZSx5MjpyLHc6ZSxoOnJ9fSwicmVuZGVyZWRFeHRlbnQiKSxtdWx0aUNsaWNrRGVib3VuY2VUaW1lOm8oZnVuY3Rpb24oZSl7aWYoZSl0aGlzLl9wcml2YXRlLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWU9ZTtlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWU7cmV0dXJuIHRoaXN9LCJtdWx0aUNsaWNrRGVib3VuY2VUaW1lIil9O2UwLmNlbnRyZT1lMC5jZW50ZXI7ZTAuYXV0b2xvY2tOb2Rlcz1lMC5hdXRvbG9jaztlMC5hdXRvdW5ncmFiaWZ5Tm9kZXM9ZTAuYXV0b3VuZ3JhYmlmeTtjND17ZGF0YTp1bi5kYXRhKHtmaWVsZDoiZGF0YSIsYmluZGluZ0V2ZW50OiJkYXRhIixhbGxvd0JpbmRpbmc6ITAsYWxsb3dTZXR0aW5nOiEwLHNldHRpbmdFdmVudDoiZGF0YSIsc2V0dGluZ1RyaWdnZXJzRXZlbnQ6ITAsdHJpZ2dlckZuTmFtZToidHJpZ2dlciIsYWxsb3dHZXR0aW5nOiEwLHVwZGF0ZVN0eWxlOiEwfSkscmVtb3ZlRGF0YTp1bi5yZW1vdmVEYXRhKHtmaWVsZDoiZGF0YSIsZXZlbnQ6ImRhdGEiLHRyaWdnZXJGbk5hbWU6InRyaWdnZXIiLHRyaWdnZXJFdmVudDohMCx1cGRhdGVTdHlsZTohMH0pLHNjcmF0Y2g6dW4uZGF0YSh7ZmllbGQ6InNjcmF0Y2giLGJpbmRpbmdFdmVudDoic2NyYXRjaCIsYWxsb3dCaW5kaW5nOiEwLGFsbG93U2V0dGluZzohMCxzZXR0aW5nRXZlbnQ6InNjcmF0Y2giLHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiEwLHRyaWdnZXJGbk5hbWU6InRyaWdnZXIiLGFsbG93R2V0dGluZzohMCx1cGRhdGVTdHlsZTohMH0pLHJlbW92ZVNjcmF0Y2g6dW4ucmVtb3ZlRGF0YSh7ZmllbGQ6InNjcmF0Y2giLGV2ZW50OiJzY3JhdGNoIix0cmlnZ2VyRm5OYW1lOiJ0cmlnZ2VyIix0cmlnZ2VyRXZlbnQ6ITAsdXBkYXRlU3R5bGU6ITB9KX07YzQuYXR0cj1jNC5kYXRhO2M0LnJlbW92ZUF0dHI9YzQucmVtb3ZlRGF0YTt1ND1vKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXM7ZT1pcih7fSxlKTt2YXIgbj1lLmNvbnRhaW5lcjtuJiYhRjYobikmJkY2KG5bMF0pJiYobj1uWzBdKTt2YXIgaT1uP24uX2N5cmVnOm51bGw7aT1pfHx7fSxpJiZpLmN5JiYoaS5jeS5kZXN0cm95KCksaT17fSk7dmFyIGE9aS5yZWFkaWVzPWkucmVhZGllc3x8W107biYmKG4uX2N5cmVnPWkpLGkuY3k9cjt2YXIgcz1IaSE9PXZvaWQgMCYmbiE9PXZvaWQgMCYmIWUuaGVhZGxlc3MsbD1lO2wubGF5b3V0PWlyKHtuYW1lOnM/ImdyaWQiOiJudWxsIn0sbC5sYXlvdXQpLGwucmVuZGVyZXI9aXIoe25hbWU6cz8iY2FudmFzIjoibnVsbCJ9LGwucmVuZGVyZXIpO3ZhciB1PW8oZnVuY3Rpb24oZyx5LHYpe3JldHVybiB5IT09dm9pZCAwP3k6diE9PXZvaWQgMD92Omd9LCJkZWZWYWwiKSxoPXRoaXMuX3ByaXZhdGU9e2NvbnRhaW5lcjpuLHJlYWR5OiExLG9wdGlvbnM6bCxlbGVtZW50czpuZXcgU2EodGhpcyksbGlzdGVuZXJzOltdLGFuaUVsZXM6bmV3IFNhKHRoaXMpLGRhdGE6bC5kYXRhfHx7fSxzY3JhdGNoOnt9LGxheW91dDpudWxsLHJlbmRlcmVyOm51bGwsZGVzdHJveWVkOiExLG5vdGlmaWNhdGlvbnNFbmFibGVkOiEwLG1pblpvb206MWUtNTAsbWF4Wm9vbToxZTUwLHpvb21pbmdFbmFibGVkOnUoITAsbC56b29taW5nRW5hYmxlZCksdXNlclpvb21pbmdFbmFibGVkOnUoITAsbC51c2VyWm9vbWluZ0VuYWJsZWQpLHBhbm5pbmdFbmFibGVkOnUoITAsbC5wYW5uaW5nRW5hYmxlZCksdXNlclBhbm5pbmdFbmFibGVkOnUoITAsbC51c2VyUGFubmluZ0VuYWJsZWQpLGJveFNlbGVjdGlvbkVuYWJsZWQ6dSghMCxsLmJveFNlbGVjdGlvbkVuYWJsZWQpLGF1dG9sb2NrOnUoITEsbC5hdXRvbG9jayxsLmF1dG9sb2NrTm9kZXMpLGF1dG91bmdyYWJpZnk6dSghMSxsLmF1dG91bmdyYWJpZnksbC5hdXRvdW5ncmFiaWZ5Tm9kZXMpLGF1dG91bnNlbGVjdGlmeTp1KCExLGwuYXV0b3Vuc2VsZWN0aWZ5KSxzdHlsZUVuYWJsZWQ6bC5zdHlsZUVuYWJsZWQ9PT12b2lkIDA/czpsLnN0eWxlRW5hYmxlZCx6b29tOl90KGwuem9vbSk/bC56b29tOjEscGFuOnt4OlVyKGwucGFuKSYmX3QobC5wYW4ueCk/bC5wYW4ueDowLHk6VXIobC5wYW4pJiZfdChsLnBhbi55KT9sLnBhbi55OjB9LGFuaW1hdGlvbjp7Y3VycmVudDpbXSxxdWV1ZTpbXX0saGFzQ29tcG91bmROb2RlczohMSxtdWx0aUNsaWNrRGVib3VuY2VUaW1lOnUoMjUwLGwubXVsdGlDbGlja0RlYm91bmNlVGltZSl9O3RoaXMuY3JlYXRlRW1pdHRlcigpLHRoaXMuc2VsZWN0aW9uVHlwZShsLnNlbGVjdGlvblR5cGUpLHRoaXMuem9vbVJhbmdlKHttaW46bC5taW5ab29tLG1heDpsLm1heFpvb219KTt2YXIgZj1vKGZ1bmN0aW9uKGcseSl7dmFyIHY9Zy5zb21lKHdxZSk7aWYodilyZXR1cm4gc3kuYWxsKGcpLnRoZW4oeSk7eShnKX0sImxvYWRFeHREYXRhIik7aC5zdHlsZUVuYWJsZWQmJnIuc2V0U3R5bGUoW10pO3ZhciBkPWlyKHt9LGwsbC5yZW5kZXJlcik7ci5pbml0UmVuZGVyZXIoZCk7dmFyIHA9byhmdW5jdGlvbihnLHksdil7ci5ub3RpZmljYXRpb25zKCExKTt2YXIgeD1yLm11dGFibGVFbGVtZW50cygpO3gubGVuZ3RoPjAmJngucmVtb3ZlKCksZyE9bnVsbCYmKFVyKGcpfHxFbihnKSkmJnIuYWRkKGcpLHIub25lKCJsYXlvdXRyZWFkeSIsZnVuY3Rpb24oVCl7ci5ub3RpZmljYXRpb25zKCEwKSxyLmVtaXQoVCksci5vbmUoImxvYWQiLHkpLHIuZW1pdEFuZE5vdGlmeSgibG9hZCIpfSkub25lKCJsYXlvdXRzdG9wIixmdW5jdGlvbigpe3Iub25lKCJkb25lIix2KSxyLmVtaXQoImRvbmUiKX0pO3ZhciBiPWlyKHt9LHIuX3ByaXZhdGUub3B0aW9ucy5sYXlvdXQpO2IuZWxlcz1yLmVsZW1lbnRzKCksci5sYXlvdXQoYikucnVuKCl9LCJzZXRFbGVzQW5kTGF5b3V0Iik7ZihbbC5zdHlsZSxsLmVsZW1lbnRzXSxmdW5jdGlvbihtKXt2YXIgZz1tWzBdLHk9bVsxXTtoLnN0eWxlRW5hYmxlZCYmci5zdHlsZSgpLmFwcGVuZChnKSxwKHksZnVuY3Rpb24oKXtyLnN0YXJ0QW5pbWF0aW9uTG9vcCgpLGgucmVhZHk9ITAsbGkobC5yZWFkeSkmJnIub24oInJlYWR5IixsLnJlYWR5KTtmb3IodmFyIHY9MDt2PGEubGVuZ3RoO3YrKyl7dmFyIHg9YVt2XTtyLm9uKCJyZWFkeSIseCl9aSYmKGkucmVhZGllcz1bXSksci5lbWl0KCJyZWFkeSIpfSxsLmRvbmUpfSl9LCJDb3JlIiksVzY9dTQucHJvdG90eXBlO2lyKFc2LHtpbnN0YW5jZVN0cmluZzpvKGZ1bmN0aW9uKCl7cmV0dXJuImNvcmUifSwiaW5zdGFuY2VTdHJpbmciKSxpc1JlYWR5Om8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5yZWFkeX0sImlzUmVhZHkiKSxkZXN0cm95ZWQ6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmRlc3Ryb3llZH0sImRlc3Ryb3llZCIpLHJlYWR5Om8oZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaXNSZWFkeSgpP3RoaXMuZW1pdHRlcigpLmVtaXQoInJlYWR5IixbXSxlKTp0aGlzLm9uKCJyZWFkeSIsZSksdGhpc30sInJlYWR5IiksZGVzdHJveTpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcztpZighZS5kZXN0cm95ZWQoKSlyZXR1cm4gZS5zdG9wQW5pbWF0aW9uTG9vcCgpLGUuZGVzdHJveVJlbmRlcmVyKCksdGhpcy5lbWl0KCJkZXN0cm95IiksZS5fcHJpdmF0ZS5kZXN0cm95ZWQ9ITAsZX0sImRlc3Ryb3kiKSxoYXNFbGVtZW50V2l0aElkOm8oZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuZWxlbWVudHMuaGFzRWxlbWVudFdpdGhJZChlKX0sImhhc0VsZW1lbnRXaXRoSWQiKSxnZXRFbGVtZW50QnlJZDpvKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wcml2YXRlLmVsZW1lbnRzLmdldEVsZW1lbnRCeUlkKGUpfSwiZ2V0RWxlbWVudEJ5SWQiKSxoYXNDb21wb3VuZE5vZGVzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5oYXNDb21wb3VuZE5vZGVzfSwiaGFzQ29tcG91bmROb2RlcyIpLGhlYWRsZXNzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5yZW5kZXJlci5pc0hlYWRsZXNzKCl9LCJoZWFkbGVzcyIpLHN0eWxlRW5hYmxlZDpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuc3R5bGVFbmFibGVkfSwic3R5bGVFbmFibGVkIiksYWRkVG9Qb29sOm8oZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuZWxlbWVudHMubWVyZ2UoZSksdGhpc30sImFkZFRvUG9vbCIpLHJlbW92ZUZyb21Qb29sOm8oZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuZWxlbWVudHMudW5tZXJnZShlKSx0aGlzfSwicmVtb3ZlRnJvbVBvb2wiKSxjb250YWluZXI6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmNvbnRhaW5lcnx8bnVsbH0sImNvbnRhaW5lciIpLHdpbmRvdzpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcHJpdmF0ZS5jb250YWluZXI7aWYoZT09bnVsbClyZXR1cm4gSGk7dmFyIHI9dGhpcy5fcHJpdmF0ZS5jb250YWluZXIub3duZXJEb2N1bWVudDtyZXR1cm4gcj09PXZvaWQgMHx8cj09bnVsbD9IaTpyLmRlZmF1bHRWaWV3fHxIaX0sIndpbmRvdyIpLG1vdW50Om8oZnVuY3Rpb24oZSl7aWYoZSE9bnVsbCl7dmFyIHI9dGhpcyxuPXIuX3ByaXZhdGUsaT1uLm9wdGlvbnM7cmV0dXJuIUY2KGUpJiZGNihlWzBdKSYmKGU9ZVswXSksci5zdG9wQW5pbWF0aW9uTG9vcCgpLHIuZGVzdHJveVJlbmRlcmVyKCksbi5jb250YWluZXI9ZSxuLnN0eWxlRW5hYmxlZD0hMCxyLmludmFsaWRhdGVTaXplKCksci5pbml0UmVuZGVyZXIoaXIoe30saSxpLnJlbmRlcmVyLHtuYW1lOmkucmVuZGVyZXIubmFtZT09PSJudWxsIj8iY2FudmFzIjppLnJlbmRlcmVyLm5hbWV9KSksci5zdGFydEFuaW1hdGlvbkxvb3AoKSxyLnN0eWxlKGkuc3R5bGUpLHIuZW1pdCgibW91bnQiKSxyfX0sIm1vdW50IiksdW5tb3VudDpvKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm4gZS5zdG9wQW5pbWF0aW9uTG9vcCgpLGUuZGVzdHJveVJlbmRlcmVyKCksZS5pbml0UmVuZGVyZXIoe25hbWU6Im51bGwifSksZS5lbWl0KCJ1bm1vdW50IiksZX0sInVubW91bnQiKSxvcHRpb25zOm8oZnVuY3Rpb24oKXtyZXR1cm4gUWModGhpcy5fcHJpdmF0ZS5vcHRpb25zKX0sIm9wdGlvbnMiKSxqc29uOm8oZnVuY3Rpb24oZSl7dmFyIHI9dGhpcyxuPXIuX3ByaXZhdGUsaT1yLm11dGFibGVFbGVtZW50cygpLGE9byhmdW5jdGlvbihTKXtyZXR1cm4gci5nZXRFbGVtZW50QnlJZChTLmlkKCkpfSwiZ2V0RnJlc2hSZWYiKTtpZihVcihlKSl7aWYoci5zdGFydEJhdGNoKCksZS5lbGVtZW50cyl7dmFyIHM9e30sbD1vKGZ1bmN0aW9uKFMsdyl7Zm9yKHZhciBFPVtdLF89W10sQz0wO0M8Uy5sZW5ndGg7QysrKXt2YXIgRD1TW0NdO2lmKCFELmRhdGEuaWQpe2huKCJjeS5qc29uKCkgY2Fubm90IGhhbmRsZSBlbGVtZW50cyB3aXRob3V0IGFuIElEIGF0dHJpYnV0ZSIpO2NvbnRpbnVlfXZhciBPPSIiK0QuZGF0YS5pZCxSPXIuZ2V0RWxlbWVudEJ5SWQoTyk7c1tPXT0hMCxSLmxlbmd0aCE9PTA/Xy5wdXNoKHtlbGU6Uixqc29uOkR9KToodyYmKEQuZ3JvdXA9dyksRS5wdXNoKEQpKX1yLmFkZChFKTtmb3IodmFyIGs9MDtrPF8ubGVuZ3RoO2srKyl7dmFyIEw9X1trXSxBPUwuZWxlLEk9TC5qc29uO0EuanNvbihJKX19LCJ1cGRhdGVFbGVzIik7aWYoRW4oZS5lbGVtZW50cykpbChlLmVsZW1lbnRzKTtlbHNlIGZvcih2YXIgdT1bIm5vZGVzIiwiZWRnZXMiXSxoPTA7aDx1Lmxlbmd0aDtoKyspe3ZhciBmPXVbaF0sZD1lLmVsZW1lbnRzW2ZdO0VuKGQpJiZsKGQsZil9dmFyIHA9ci5jb2xsZWN0aW9uKCk7aS5maWx0ZXIoZnVuY3Rpb24oVCl7cmV0dXJuIXNbVC5pZCgpXX0pLmZvckVhY2goZnVuY3Rpb24oVCl7VC5pc1BhcmVudCgpP3AubWVyZ2UoVCk6VC5yZW1vdmUoKX0pLHAuZm9yRWFjaChmdW5jdGlvbihUKXtyZXR1cm4gVC5jaGlsZHJlbigpLm1vdmUoe3BhcmVudDpudWxsfSl9KSxwLmZvckVhY2goZnVuY3Rpb24oVCl7cmV0dXJuIGEoVCkucmVtb3ZlKCl9KX1lLnN0eWxlJiZyLnN0eWxlKGUuc3R5bGUpLGUuem9vbSE9bnVsbCYmZS56b29tIT09bi56b29tJiZyLnpvb20oZS56b29tKSxlLnBhbiYmKGUucGFuLnghPT1uLnBhbi54fHxlLnBhbi55IT09bi5wYW4ueSkmJnIucGFuKGUucGFuKSxlLmRhdGEmJnIuZGF0YShlLmRhdGEpO2Zvcih2YXIgbT1bIm1pblpvb20iLCJtYXhab29tIiwiem9vbWluZ0VuYWJsZWQiLCJ1c2VyWm9vbWluZ0VuYWJsZWQiLCJwYW5uaW5nRW5hYmxlZCIsInVzZXJQYW5uaW5nRW5hYmxlZCIsImJveFNlbGVjdGlvbkVuYWJsZWQiLCJhdXRvbG9jayIsImF1dG91bmdyYWJpZnkiLCJhdXRvdW5zZWxlY3RpZnkiLCJtdWx0aUNsaWNrRGVib3VuY2VUaW1lIl0sZz0wO2c8bS5sZW5ndGg7ZysrKXt2YXIgeT1tW2ddO2VbeV0hPW51bGwmJnJbeV0oZVt5XSl9cmV0dXJuIHIuZW5kQmF0Y2goKSx0aGlzfWVsc2V7dmFyIHY9ISFlLHg9e307dj94LmVsZW1lbnRzPXRoaXMuZWxlbWVudHMoKS5tYXAoZnVuY3Rpb24oVCl7cmV0dXJuIFQuanNvbigpfSk6KHguZWxlbWVudHM9e30saS5mb3JFYWNoKGZ1bmN0aW9uKFQpe3ZhciBTPVQuZ3JvdXAoKTt4LmVsZW1lbnRzW1NdfHwoeC5lbGVtZW50c1tTXT1bXSkseC5lbGVtZW50c1tTXS5wdXNoKFQuanNvbigpKX0pKSx0aGlzLl9wcml2YXRlLnN0eWxlRW5hYmxlZCYmKHguc3R5bGU9ci5zdHlsZSgpLmpzb24oKSkseC5kYXRhPVFjKHIuZGF0YSgpKTt2YXIgYj1uLm9wdGlvbnM7cmV0dXJuIHguem9vbWluZ0VuYWJsZWQ9bi56b29taW5nRW5hYmxlZCx4LnVzZXJab29taW5nRW5hYmxlZD1uLnVzZXJab29taW5nRW5hYmxlZCx4Lnpvb209bi56b29tLHgubWluWm9vbT1uLm1pblpvb20seC5tYXhab29tPW4ubWF4Wm9vbSx4LnBhbm5pbmdFbmFibGVkPW4ucGFubmluZ0VuYWJsZWQseC51c2VyUGFubmluZ0VuYWJsZWQ9bi51c2VyUGFubmluZ0VuYWJsZWQseC5wYW49UWMobi5wYW4pLHguYm94U2VsZWN0aW9uRW5hYmxlZD1uLmJveFNlbGVjdGlvbkVuYWJsZWQseC5yZW5kZXJlcj1RYyhiLnJlbmRlcmVyKSx4LmhpZGVFZGdlc09uVmlld3BvcnQ9Yi5oaWRlRWRnZXNPblZpZXdwb3J0LHgudGV4dHVyZU9uVmlld3BvcnQ9Yi50ZXh0dXJlT25WaWV3cG9ydCx4LndoZWVsU2Vuc2l0aXZpdHk9Yi53aGVlbFNlbnNpdGl2aXR5LHgubW90aW9uQmx1cj1iLm1vdGlvbkJsdXIseC5tdWx0aUNsaWNrRGVib3VuY2VUaW1lPWIubXVsdGlDbGlja0RlYm91bmNlVGltZSx4fX0sImpzb24iKX0pO1c2LiRpZD1XNi5nZXRFbGVtZW50QnlJZDtbb1plLGZaZSx1MWUsQ0IsSTYscFplLEFCLE82LHlaZSxlMCxjNF0uZm9yRWFjaChmdW5jdGlvbih0KXtpcihXNix0KX0pO3haZT17Zml0OiEwLGRpcmVjdGVkOiExLHBhZGRpbmc6MzAsY2lyY2xlOiExLGdyaWQ6ITEsc3BhY2luZ0ZhY3RvcjoxLjc1LGJvdW5kaW5nQm94OnZvaWQgMCxhdm9pZE92ZXJsYXA6ITAsbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiExLHJvb3RzOnZvaWQgMCxkZXB0aFNvcnQ6dm9pZCAwLGFuaW1hdGU6ITEsYW5pbWF0aW9uRHVyYXRpb246NTAwLGFuaW1hdGlvbkVhc2luZzp2b2lkIDAsYW5pbWF0ZUZpbHRlcjpvKGZ1bmN0aW9uKGUscil7cmV0dXJuITB9LCJhbmltYXRlRmlsdGVyIikscmVhZHk6dm9pZCAwLHN0b3A6dm9pZCAwLHRyYW5zZm9ybTpvKGZ1bmN0aW9uKGUscil7cmV0dXJuIHJ9LCJ0cmFuc2Zvcm0iKX0sYlplPXttYXhpbWFsOiExLGFjeWNsaWM6ITF9LHExPW8oZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2NyYXRjaCgiYnJlYWR0aGZpcnN0Iil9LCJnZXRJbmZvIiksTm1lPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gZS5zY3JhdGNoKCJicmVhZHRoZmlyc3QiLHIpfSwic2V0SW5mbyIpO28oaDFlLCJCcmVhZHRoRmlyc3RMYXlvdXQiKTtoMWUucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucyxlPXQuY3kscj10LmVsZXMsbj1yLm5vZGVzKCkuZmlsdGVyKGZ1bmN0aW9uKGFlKXtyZXR1cm4gYWUuaXNDaGlsZGxlc3MoKX0pLGk9cixhPXQuZGlyZWN0ZWQscz10LmFjeWNsaWN8fHQubWF4aW1hbHx8dC5tYXhpbWFsQWRqdXN0bWVudHM+MCxsPSEhdC5ib3VuZGluZ0JveCx1PWUuZXh0ZW50KCksaD1ZcyhsP3QuYm91bmRpbmdCb3g6e3gxOnUueDEseTE6dS55MSx3OnUudyxoOnUuaH0pLGY7aWYoeG8odC5yb290cykpZj10LnJvb3RzO2Vsc2UgaWYoRW4odC5yb290cykpe2Zvcih2YXIgZD1bXSxwPTA7cDx0LnJvb3RzLmxlbmd0aDtwKyspe3ZhciBtPXQucm9vdHNbcF0sZz1lLmdldEVsZW1lbnRCeUlkKG0pO2QucHVzaChnKX1mPWUuY29sbGVjdGlvbihkKX1lbHNlIGlmKFp0KHQucm9vdHMpKWY9ZS4kKHQucm9vdHMpO2Vsc2UgaWYoYSlmPW4ucm9vdHMoKTtlbHNle3ZhciB5PXIuY29tcG9uZW50cygpO2Y9ZS5jb2xsZWN0aW9uKCk7Zm9yKHZhciB2PW8oZnVuY3Rpb24oT2Upe3ZhciB5ZT15W09lXSxCZT15ZS5tYXhEZWdyZWUoITEpLEhlPXllLmZpbHRlcihmdW5jdGlvbih6ZSl7cmV0dXJuIHplLmRlZ3JlZSghMSk9PT1CZX0pO2Y9Zi5hZGQoSGUpfSwiX2xvb3AiKSx4PTA7eDx5Lmxlbmd0aDt4Kyspdih4KX12YXIgYj1bXSxUPXt9LFM9byhmdW5jdGlvbihPZSx5ZSl7Ylt5ZV09PW51bGwmJihiW3llXT1bXSk7dmFyIEJlPWJbeWVdLmxlbmd0aDtiW3llXS5wdXNoKE9lKSxObWUoT2Use2luZGV4OkJlLGRlcHRoOnllfSl9LCJhZGRUb0RlcHRoIiksdz1vKGZ1bmN0aW9uKE9lLHllKXt2YXIgQmU9cTEoT2UpLEhlPUJlLmRlcHRoLHplPUJlLmluZGV4O2JbSGVdW3plXT1udWxsLE9lLmlzQ2hpbGRsZXNzKCkmJlMoT2UseWUpfSwiY2hhbmdlRGVwdGgiKTtpLmJmcyh7cm9vdHM6ZixkaXJlY3RlZDp0LmRpcmVjdGVkLHZpc2l0Om8oZnVuY3Rpb24oT2UseWUsQmUsSGUsemUpe3ZhciBMZT1PZVswXSxJZT1MZS5pZCgpO0xlLmlzQ2hpbGRsZXNzKCkmJlMoTGUsemUpLFRbSWVdPSEwfSwidmlzaXQiKX0pO2Zvcih2YXIgRT1bXSxfPTA7XzxuLmxlbmd0aDtfKyspe3ZhciBDPW5bX107VFtDLmlkKCldfHxFLnB1c2goQyl9dmFyIEQ9byhmdW5jdGlvbihPZSl7Zm9yKHZhciB5ZT1iW09lXSxCZT0wO0JlPHllLmxlbmd0aDtCZSsrKXt2YXIgSGU9eWVbQmVdO2lmKEhlPT1udWxsKXt5ZS5zcGxpY2UoQmUsMSksQmUtLTtjb250aW51ZX1ObWUoSGUse2RlcHRoOk9lLGluZGV4OkJlfSl9fSwiYXNzaWduRGVwdGhzQXQiKSxPPW8oZnVuY3Rpb24oT2UseWUpe2Zvcih2YXIgQmU9cTEoT2UpLEhlPU9lLmluY29tZXJzKCkuZmlsdGVyKGZ1bmN0aW9uKGllKXtyZXR1cm4gaWUuaXNOb2RlKCkmJnIuaGFzKGllKX0pLHplPS0xLExlPU9lLmlkKCksSWU9MDtJZTxIZS5sZW5ndGg7SWUrKyl7dmFyIHhlPUhlW0llXSxxPXExKHhlKTt6ZT1NYXRoLm1heCh6ZSxxLmRlcHRoKX1pZihCZS5kZXB0aDw9emUpe2lmKCF0LmFjeWNsaWMmJnllW0xlXSlyZXR1cm4gbnVsbDt2YXIgZGU9emUrMTtyZXR1cm4gdyhPZSxkZSkseWVbTGVdPWRlLCEwfXJldHVybiExfSwiYWRqdXN0TWF4aW1hbGx5Iik7aWYoYSYmcyl7dmFyIFI9W10saz17fSxMPW8oZnVuY3Rpb24oT2Upe3JldHVybiBSLnB1c2goT2UpfSwiZW5xdWV1ZSIpLEE9byhmdW5jdGlvbigpe3JldHVybiBSLnNoaWZ0KCl9LCJkZXF1ZXVlIik7Zm9yKG4uZm9yRWFjaChmdW5jdGlvbihhZSl7cmV0dXJuIFIucHVzaChhZSl9KTtSLmxlbmd0aD4wOyl7dmFyIEk9QSgpLE09TyhJLGspO2lmKE0pSS5vdXRnb2VycygpLmZpbHRlcihmdW5jdGlvbihhZSl7cmV0dXJuIGFlLmlzTm9kZSgpJiZyLmhhcyhhZSl9KS5mb3JFYWNoKEwpO2Vsc2UgaWYoTT09PW51bGwpe2huKCJEZXRlY3RlZCBkb3VibGUgbWF4aW1hbCBzaGlmdCBmb3Igbm9kZSBgIitJLmlkKCkrImAuICBCYWlsaW5nIG1heGltYWwgYWRqdXN0bWVudCBkdWUgdG8gY3ljbGUuICBVc2UgYG9wdGlvbnMubWF4aW1hbDogdHJ1ZWAgb25seSBvbiBEQUdzLiIpO2JyZWFrfX19dmFyIFA9MDtpZih0LmF2b2lkT3ZlcmxhcClmb3IodmFyIEI9MDtCPG4ubGVuZ3RoO0IrKyl7dmFyIEY9bltCXSx6PUYubGF5b3V0RGltZW5zaW9ucyh0KSwkPXoudyxVPXouaDtQPU1hdGgubWF4KFAsJCxVKX12YXIgSz17fSxlZT1vKGZ1bmN0aW9uKE9lKXtpZihLW09lLmlkKCldKXJldHVybiBLW09lLmlkKCldO2Zvcih2YXIgeWU9cTEoT2UpLmRlcHRoLEJlPU9lLm5laWdoYm9yaG9vZCgpLEhlPTAsemU9MCxMZT0wO0xlPEJlLmxlbmd0aDtMZSsrKXt2YXIgSWU9QmVbTGVdO2lmKCEoSWUuaXNFZGdlKCl8fEllLmlzUGFyZW50KCl8fCFuLmhhcyhJZSkpKXt2YXIgeGU9cTEoSWUpO2lmKHhlIT1udWxsKXt2YXIgcT14ZS5pbmRleCxkZT14ZS5kZXB0aDtpZighKHE9PW51bGx8fGRlPT1udWxsKSl7dmFyIGllPWJbZGVdLmxlbmd0aDtkZTx5ZSYmKEhlKz1xL2llLHplKyspfX19fXJldHVybiB6ZT1NYXRoLm1heCgxLHplKSxIZT1IZS96ZSx6ZT09PTAmJihIZT0wKSxLW09lLmlkKCldPUhlLEhlfSwiZ2V0V2VpZ2h0ZWRQZXJjZW50IiksWT1vKGZ1bmN0aW9uKE9lLHllKXt2YXIgQmU9ZWUoT2UpLEhlPWVlKHllKSx6ZT1CZS1IZTtyZXR1cm4gemU9PT0wP3VnZShPZS5pZCgpLHllLmlkKCkpOnplfSwic29ydEZuIik7dC5kZXB0aFNvcnQhPT12b2lkIDAmJihZPXQuZGVwdGhTb3J0KTtmb3IodmFyIGNlPWIubGVuZ3RoLFo9MDtaPGNlO1orKyliW1pdLnNvcnQoWSksRChaKTtmb3IodmFyIHVlPVtdLFE9MDtRPEUubGVuZ3RoO1ErKyl1ZS5wdXNoKEVbUV0pO3ZhciBqPW8oZnVuY3Rpb24oKXtmb3IodmFyIE9lPTA7T2U8Y2U7T2UrKylEKE9lKX0sImFzc2lnbkRlcHRocyIpO3VlLmxlbmd0aCYmKGIudW5zaGlmdCh1ZSksY2U9Yi5sZW5ndGgsaigpKTtmb3IodmFyIG5lPTAsdGU9MDt0ZTxjZTt0ZSsrKW5lPU1hdGgubWF4KGJbdGVdLmxlbmd0aCxuZSk7dmFyIGhlPXt4OmgueDEraC53LzIseTpoLnkxK2guaC8yfSxsZT1uLnJlZHVjZShmdW5jdGlvbihhZSxPZSl7cmV0dXJuIGZ1bmN0aW9uKHllKXtyZXR1cm57dzphZS53PT09LTE/eWUudzooYWUudyt5ZS53KS8yLGg6YWUuaD09PS0xP3llLmg6KGFlLmgreWUuaCkvMn19KE9lLmJvdW5kaW5nQm94KHtpbmNsdWRlTGFiZWxzOnQubm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzfSkpfSx7dzotMSxoOi0xfSksSj1NYXRoLm1heChjZT09PTE/MDpsPyhoLmgtdC5wYWRkaW5nKjItbGUuaCkvKGNlLTEpOihoLmgtdC5wYWRkaW5nKjItbGUuaCkvKGNlKzEpLFApLFNlPWIucmVkdWNlKGZ1bmN0aW9uKGFlLE9lKXtyZXR1cm4gTWF0aC5tYXgoYWUsT2UubGVuZ3RoKX0sMCksc2U9byhmdW5jdGlvbihPZSl7dmFyIHllPXExKE9lKSxCZT15ZS5kZXB0aCxIZT15ZS5pbmRleDtpZih0LmNpcmNsZSl7dmFyIHplPU1hdGgubWluKGgudy8yL2NlLGguaC8yL2NlKTt6ZT1NYXRoLm1heCh6ZSxQKTt2YXIgTGU9emUqQmUremUtKGNlPjAmJmJbMF0ubGVuZ3RoPD0zP3plLzI6MCksSWU9MipNYXRoLlBJL2JbQmVdLmxlbmd0aCpIZTtyZXR1cm4gQmU9PT0wJiZiWzBdLmxlbmd0aD09PTEmJihMZT0xKSx7eDpoZS54K0xlKk1hdGguY29zKEllKSx5OmhlLnkrTGUqTWF0aC5zaW4oSWUpfX1lbHNle3ZhciB4ZT1iW0JlXS5sZW5ndGgscT1NYXRoLm1heCh4ZT09PTE/MDpsPyhoLnctdC5wYWRkaW5nKjItbGUudykvKCh0LmdyaWQ/U2U6eGUpLTEpOihoLnctdC5wYWRkaW5nKjItbGUudykvKCh0LmdyaWQ/U2U6eGUpKzEpLFApLGRlPXt4OmhlLngrKEhlKzEtKHhlKzEpLzIpKnEseTpoZS55KyhCZSsxLShjZSsxKS8yKSpKfTtyZXR1cm4gZGV9fSwiZ2V0UG9zaXRpb24iKTtyZXR1cm4gci5ub2RlcygpLmxheW91dFBvc2l0aW9ucyh0aGlzLHQsc2UpLHRoaXN9O1RaZT17Zml0OiEwLHBhZGRpbmc6MzAsYm91bmRpbmdCb3g6dm9pZCAwLGF2b2lkT3ZlcmxhcDohMCxub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6ITEsc3BhY2luZ0ZhY3Rvcjp2b2lkIDAscmFkaXVzOnZvaWQgMCxzdGFydEFuZ2xlOjMvMipNYXRoLlBJLHN3ZWVwOnZvaWQgMCxjbG9ja3dpc2U6ITAsc29ydDp2b2lkIDAsYW5pbWF0ZTohMSxhbmltYXRpb25EdXJhdGlvbjo1MDAsYW5pbWF0aW9uRWFzaW5nOnZvaWQgMCxhbmltYXRlRmlsdGVyOm8oZnVuY3Rpb24oZSxyKXtyZXR1cm4hMH0sImFuaW1hdGVGaWx0ZXIiKSxyZWFkeTp2b2lkIDAsc3RvcDp2b2lkIDAsdHJhbnNmb3JtOm8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gcn0sInRyYW5zZm9ybSIpfTtvKGYxZSwiQ2lyY2xlTGF5b3V0Iik7ZjFlLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMsZT10LHI9dC5jeSxuPWUuZWxlcyxpPWUuY291bnRlcmNsb2Nrd2lzZSE9PXZvaWQgMD8hZS5jb3VudGVyY2xvY2t3aXNlOmUuY2xvY2t3aXNlLGE9bi5ub2RlcygpLm5vdCgiOnBhcmVudCIpO2Uuc29ydCYmKGE9YS5zb3J0KGUuc29ydCkpO2Zvcih2YXIgcz1ZcyhlLmJvdW5kaW5nQm94P2UuYm91bmRpbmdCb3g6e3gxOjAseTE6MCx3OnIud2lkdGgoKSxoOnIuaGVpZ2h0KCl9KSxsPXt4OnMueDErcy53LzIseTpzLnkxK3MuaC8yfSx1PWUuc3dlZXA9PT12b2lkIDA/MipNYXRoLlBJLTIqTWF0aC5QSS9hLmxlbmd0aDplLnN3ZWVwLGg9dS9NYXRoLm1heCgxLGEubGVuZ3RoLTEpLGYsZD0wLHA9MDtwPGEubGVuZ3RoO3ArKyl7dmFyIG09YVtwXSxnPW0ubGF5b3V0RGltZW5zaW9ucyhlKSx5PWcudyx2PWcuaDtkPU1hdGgubWF4KGQseSx2KX1pZihfdChlLnJhZGl1cyk/Zj1lLnJhZGl1czphLmxlbmd0aDw9MT9mPTA6Zj1NYXRoLm1pbihzLmgscy53KS8yLWQsYS5sZW5ndGg+MSYmZS5hdm9pZE92ZXJsYXApe2QqPTEuNzU7dmFyIHg9TWF0aC5jb3MoaCktTWF0aC5jb3MoMCksYj1NYXRoLnNpbihoKS1NYXRoLnNpbigwKSxUPU1hdGguc3FydChkKmQvKHgqeCtiKmIpKTtmPU1hdGgubWF4KFQsZil9dmFyIFM9byhmdW5jdGlvbihFLF8pe3ZhciBDPWUuc3RhcnRBbmdsZStfKmgqKGk/MTotMSksRD1mKk1hdGguY29zKEMpLE89ZipNYXRoLnNpbihDKSxSPXt4OmwueCtELHk6bC55K099O3JldHVybiBSfSwiZ2V0UG9zIik7cmV0dXJuIG4ubm9kZXMoKS5sYXlvdXRQb3NpdGlvbnModGhpcyxlLFMpLHRoaXN9O3daZT17Zml0OiEwLHBhZGRpbmc6MzAsc3RhcnRBbmdsZTozLzIqTWF0aC5QSSxzd2VlcDp2b2lkIDAsY2xvY2t3aXNlOiEwLGVxdWlkaXN0YW50OiExLG1pbk5vZGVTcGFjaW5nOjEwLGJvdW5kaW5nQm94OnZvaWQgMCxhdm9pZE92ZXJsYXA6ITAsbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiExLGhlaWdodDp2b2lkIDAsd2lkdGg6dm9pZCAwLHNwYWNpbmdGYWN0b3I6dm9pZCAwLGNvbmNlbnRyaWM6byhmdW5jdGlvbihlKXtyZXR1cm4gZS5kZWdyZWUoKX0sImNvbmNlbnRyaWMiKSxsZXZlbFdpZHRoOm8oZnVuY3Rpb24oZSl7cmV0dXJuIGUubWF4RGVncmVlKCkvNH0sImxldmVsV2lkdGgiKSxhbmltYXRlOiExLGFuaW1hdGlvbkR1cmF0aW9uOjUwMCxhbmltYXRpb25FYXNpbmc6dm9pZCAwLGFuaW1hdGVGaWx0ZXI6byhmdW5jdGlvbihlLHIpe3JldHVybiEwfSwiYW5pbWF0ZUZpbHRlciIpLHJlYWR5OnZvaWQgMCxzdG9wOnZvaWQgMCx0cmFuc2Zvcm06byhmdW5jdGlvbihlLHIpe3JldHVybiByfSwidHJhbnNmb3JtIil9O28oZDFlLCJDb25jZW50cmljTGF5b3V0Iik7ZDFlLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5vcHRpb25zLGU9dCxyPWUuY291bnRlcmNsb2Nrd2lzZSE9PXZvaWQgMD8hZS5jb3VudGVyY2xvY2t3aXNlOmUuY2xvY2t3aXNlLG49dC5jeSxpPWUuZWxlcyxhPWkubm9kZXMoKS5ub3QoIjpwYXJlbnQiKSxzPVlzKGUuYm91bmRpbmdCb3g/ZS5ib3VuZGluZ0JveDp7eDE6MCx5MTowLHc6bi53aWR0aCgpLGg6bi5oZWlnaHQoKX0pLGw9e3g6cy54MStzLncvMix5OnMueTErcy5oLzJ9LHU9W10saD0wLGY9MDtmPGEubGVuZ3RoO2YrKyl7dmFyIGQ9YVtmXSxwPXZvaWQgMDtwPWUuY29uY2VudHJpYyhkKSx1LnB1c2goe3ZhbHVlOnAsbm9kZTpkfSksZC5fcHJpdmF0ZS5zY3JhdGNoLmNvbmNlbnRyaWM9cH1hLnVwZGF0ZVN0eWxlKCk7Zm9yKHZhciBtPTA7bTxhLmxlbmd0aDttKyspe3ZhciBnPWFbbV0seT1nLmxheW91dERpbWVuc2lvbnMoZSk7aD1NYXRoLm1heChoLHkudyx5LmgpfXUuc29ydChmdW5jdGlvbihsZSxKKXtyZXR1cm4gSi52YWx1ZS1sZS52YWx1ZX0pO2Zvcih2YXIgdj1lLmxldmVsV2lkdGgoYSkseD1bW11dLGI9eFswXSxUPTA7VDx1Lmxlbmd0aDtUKyspe3ZhciBTPXVbVF07aWYoYi5sZW5ndGg+MCl7dmFyIHc9TWF0aC5hYnMoYlswXS52YWx1ZS1TLnZhbHVlKTt3Pj12JiYoYj1bXSx4LnB1c2goYikpfWIucHVzaChTKX12YXIgRT1oK2UubWluTm9kZVNwYWNpbmc7aWYoIWUuYXZvaWRPdmVybGFwKXt2YXIgXz14Lmxlbmd0aD4wJiZ4WzBdLmxlbmd0aD4xLEM9TWF0aC5taW4ocy53LHMuaCkvMi1FLEQ9Qy8oeC5sZW5ndGgrXz8xOjApO0U9TWF0aC5taW4oRSxEKX1mb3IodmFyIE89MCxSPTA7Ujx4Lmxlbmd0aDtSKyspe3ZhciBrPXhbUl0sTD1lLnN3ZWVwPT09dm9pZCAwPzIqTWF0aC5QSS0yKk1hdGguUEkvay5sZW5ndGg6ZS5zd2VlcCxBPWsuZFRoZXRhPUwvTWF0aC5tYXgoMSxrLmxlbmd0aC0xKTtpZihrLmxlbmd0aD4xJiZlLmF2b2lkT3ZlcmxhcCl7dmFyIEk9TWF0aC5jb3MoQSktTWF0aC5jb3MoMCksTT1NYXRoLnNpbihBKS1NYXRoLnNpbigwKSxQPU1hdGguc3FydChFKkUvKEkqSStNKk0pKTtPPU1hdGgubWF4KFAsTyl9ay5yPU8sTys9RX1pZihlLmVxdWlkaXN0YW50KXtmb3IodmFyIEI9MCxGPTAsej0wO3o8eC5sZW5ndGg7eisrKXt2YXIgJD14W3pdLFU9JC5yLUY7Qj1NYXRoLm1heChCLFUpfUY9MDtmb3IodmFyIEs9MDtLPHgubGVuZ3RoO0srKyl7dmFyIGVlPXhbS107Sz09PTAmJihGPWVlLnIpLGVlLnI9RixGKz1CfX1mb3IodmFyIFk9e30sY2U9MDtjZTx4Lmxlbmd0aDtjZSsrKWZvcih2YXIgWj14W2NlXSx1ZT1aLmRUaGV0YSxRPVoucixqPTA7ajxaLmxlbmd0aDtqKyspe3ZhciBuZT1aW2pdLHRlPWUuc3RhcnRBbmdsZSsocj8xOi0xKSp1ZSpqLGhlPXt4OmwueCtRKk1hdGguY29zKHRlKSx5OmwueStRKk1hdGguc2luKHRlKX07WVtuZS5ub2RlLmlkKCldPWhlfXJldHVybiBpLm5vZGVzKCkubGF5b3V0UG9zaXRpb25zKHRoaXMsZSxmdW5jdGlvbihsZSl7dmFyIEo9bGUuaWQoKTtyZXR1cm4gWVtKXX0pLHRoaXN9O2taZT17cmVhZHk6byhmdW5jdGlvbigpe30sInJlYWR5Iiksc3RvcDpvKGZ1bmN0aW9uKCl7fSwic3RvcCIpLGFuaW1hdGU6ITAsYW5pbWF0aW9uRWFzaW5nOnZvaWQgMCxhbmltYXRpb25EdXJhdGlvbjp2b2lkIDAsYW5pbWF0ZUZpbHRlcjpvKGZ1bmN0aW9uKGUscil7cmV0dXJuITB9LCJhbmltYXRlRmlsdGVyIiksYW5pbWF0aW9uVGhyZXNob2xkOjI1MCxyZWZyZXNoOjIwLGZpdDohMCxwYWRkaW5nOjMwLGJvdW5kaW5nQm94OnZvaWQgMCxub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6ITEscmFuZG9taXplOiExLGNvbXBvbmVudFNwYWNpbmc6NDAsbm9kZVJlcHVsc2lvbjpvKGZ1bmN0aW9uKGUpe3JldHVybiAyMDQ4fSwibm9kZVJlcHVsc2lvbiIpLG5vZGVPdmVybGFwOjQsaWRlYWxFZGdlTGVuZ3RoOm8oZnVuY3Rpb24oZSl7cmV0dXJuIDMyfSwiaWRlYWxFZGdlTGVuZ3RoIiksZWRnZUVsYXN0aWNpdHk6byhmdW5jdGlvbihlKXtyZXR1cm4gMzJ9LCJlZGdlRWxhc3RpY2l0eSIpLG5lc3RpbmdGYWN0b3I6MS4yLGdyYXZpdHk6MSxudW1JdGVyOjFlMyxpbml0aWFsVGVtcDoxZTMsY29vbGluZ0ZhY3RvcjouOTksbWluVGVtcDoxfTtvKHVDLCJDb3NlTGF5b3V0Iik7dUMucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucyxlPXQuY3kscj10aGlzO3Iuc3RvcHBlZD0hMSwodC5hbmltYXRlPT09ITB8fHQuYW5pbWF0ZT09PSExKSYmci5lbWl0KHt0eXBlOiJsYXlvdXRzdGFydCIsbGF5b3V0OnJ9KSx0LmRlYnVnPT09ITA/ZkI9ITA6ZkI9ITE7dmFyIG49RVplKGUscix0KTtmQiYmQVplKG4pLHQucmFuZG9taXplJiZfWmUobik7dmFyIGk9bmgoKSxhPW8oZnVuY3Rpb24oKXtEWmUobixlLHQpLHQuZml0PT09ITAmJmUuZml0KHQucGFkZGluZyl9LCJyZWZyZXNoIikscz1vKGZ1bmN0aW9uKHApe3JldHVybiEoci5zdG9wcGVkfHxwPj10Lm51bUl0ZXJ8fChMWmUobix0KSxuLnRlbXBlcmF0dXJlPW4udGVtcGVyYXR1cmUqdC5jb29saW5nRmFjdG9yLG4udGVtcGVyYXR1cmU8dC5taW5UZW1wKSl9LCJtYWluTG9vcCIpLGw9byhmdW5jdGlvbigpe2lmKHQuYW5pbWF0ZT09PSEwfHx0LmFuaW1hdGU9PT0hMSlhKCksci5vbmUoImxheW91dHN0b3AiLHQuc3RvcCksci5lbWl0KHt0eXBlOiJsYXlvdXRzdG9wIixsYXlvdXQ6cn0pO2Vsc2V7dmFyIHA9dC5lbGVzLm5vZGVzKCksbT1wMWUobix0LHApO3AubGF5b3V0UG9zaXRpb25zKHIsdCxtKX19LCJkb25lIiksdT0wLGg9ITA7aWYodC5hbmltYXRlPT09ITApe3ZhciBmPW8oZnVuY3Rpb24gZCgpe2Zvcih2YXIgcD0wO2gmJnA8dC5yZWZyZXNoOyloPXModSksdSsrLHArKztpZighaClJbWUobix0KSxsKCk7ZWxzZXt2YXIgbT1uaCgpO20taT49dC5hbmltYXRpb25UaHJlc2hvbGQmJmEoKSwkNihkKX19LCJmcmFtZSIpO2YoKX1lbHNle2Zvcig7aDspaD1zKHUpLHUrKztJbWUobix0KSxsKCl9cmV0dXJuIHRoaXN9O3VDLnByb3RvdHlwZS5zdG9wPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RvcHBlZD0hMCx0aGlzLnRocmVhZCYmdGhpcy50aHJlYWQuc3RvcCgpLHRoaXMuZW1pdCgibGF5b3V0c3RvcCIpLHRoaXN9O3VDLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGhyZWFkJiZ0aGlzLnRocmVhZC5zdG9wKCksdGhpc307RVplPW8oZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaT1uLmVsZXMuZWRnZXMoKSxhPW4uZWxlcy5ub2RlcygpLHM9WXMobi5ib3VuZGluZ0JveD9uLmJvdW5kaW5nQm94Ont4MTowLHkxOjAsdzplLndpZHRoKCksaDplLmhlaWdodCgpfSksbD17aXNDb21wb3VuZDplLmhhc0NvbXBvdW5kTm9kZXMoKSxsYXlvdXROb2RlczpbXSxpZFRvSW5kZXg6e30sbm9kZVNpemU6YS5zaXplKCksZ3JhcGhTZXQ6W10saW5kZXhUb0dyYXBoOltdLGxheW91dEVkZ2VzOltdLGVkZ2VTaXplOmkuc2l6ZSgpLHRlbXBlcmF0dXJlOm4uaW5pdGlhbFRlbXAsY2xpZW50V2lkdGg6cy53LGNsaWVudEhlaWdodDpzLmgsYm91bmRpbmdCb3g6c30sdT1uLmVsZXMuY29tcG9uZW50cygpLGg9e30sZj0wO2Y8dS5sZW5ndGg7ZisrKWZvcih2YXIgZD11W2ZdLHA9MDtwPGQubGVuZ3RoO3ArKyl7dmFyIG09ZFtwXTtoW20uaWQoKV09Zn1mb3IodmFyIGY9MDtmPGwubm9kZVNpemU7ZisrKXt2YXIgZz1hW2ZdLHk9Zy5sYXlvdXREaW1lbnNpb25zKG4pLHY9e307di5pc0xvY2tlZD1nLmxvY2tlZCgpLHYuaWQ9Zy5kYXRhKCJpZCIpLHYucGFyZW50SWQ9Zy5kYXRhKCJwYXJlbnQiKSx2LmNtcHRJZD1oW2cuaWQoKV0sdi5jaGlsZHJlbj1bXSx2LnBvc2l0aW9uWD1nLnBvc2l0aW9uKCJ4Iiksdi5wb3NpdGlvblk9Zy5wb3NpdGlvbigieSIpLHYub2Zmc2V0WD0wLHYub2Zmc2V0WT0wLHYuaGVpZ2h0PXkudyx2LndpZHRoPXkuaCx2Lm1heFg9di5wb3NpdGlvblgrdi53aWR0aC8yLHYubWluWD12LnBvc2l0aW9uWC12LndpZHRoLzIsdi5tYXhZPXYucG9zaXRpb25ZK3YuaGVpZ2h0LzIsdi5taW5ZPXYucG9zaXRpb25ZLXYuaGVpZ2h0LzIsdi5wYWRMZWZ0PXBhcnNlRmxvYXQoZy5zdHlsZSgicGFkZGluZyIpKSx2LnBhZFJpZ2h0PXBhcnNlRmxvYXQoZy5zdHlsZSgicGFkZGluZyIpKSx2LnBhZFRvcD1wYXJzZUZsb2F0KGcuc3R5bGUoInBhZGRpbmciKSksdi5wYWRCb3R0b209cGFyc2VGbG9hdChnLnN0eWxlKCJwYWRkaW5nIikpLHYubm9kZVJlcHVsc2lvbj1saShuLm5vZGVSZXB1bHNpb24pP24ubm9kZVJlcHVsc2lvbihnKTpuLm5vZGVSZXB1bHNpb24sbC5sYXlvdXROb2Rlcy5wdXNoKHYpLGwuaWRUb0luZGV4W3YuaWRdPWZ9Zm9yKHZhciB4PVtdLGI9MCxUPS0xLFM9W10sZj0wO2Y8bC5ub2RlU2l6ZTtmKyspe3ZhciBnPWwubGF5b3V0Tm9kZXNbZl0sdz1nLnBhcmVudElkO3chPW51bGw/bC5sYXlvdXROb2Rlc1tsLmlkVG9JbmRleFt3XV0uY2hpbGRyZW4ucHVzaChnLmlkKTooeFsrK1RdPWcuaWQsUy5wdXNoKGcuaWQpKX1mb3IobC5ncmFwaFNldC5wdXNoKFMpO2I8PVQ7KXt2YXIgRT14W2IrK10sXz1sLmlkVG9JbmRleFtFXSxtPWwubGF5b3V0Tm9kZXNbX10sQz1tLmNoaWxkcmVuO2lmKEMubGVuZ3RoPjApe2wuZ3JhcGhTZXQucHVzaChDKTtmb3IodmFyIGY9MDtmPEMubGVuZ3RoO2YrKyl4WysrVF09Q1tmXX19Zm9yKHZhciBmPTA7ZjxsLmdyYXBoU2V0Lmxlbmd0aDtmKyspZm9yKHZhciBEPWwuZ3JhcGhTZXRbZl0scD0wO3A8RC5sZW5ndGg7cCsrKXt2YXIgTz1sLmlkVG9JbmRleFtEW3BdXTtsLmluZGV4VG9HcmFwaFtPXT1mfWZvcih2YXIgZj0wO2Y8bC5lZGdlU2l6ZTtmKyspe3ZhciBSPWlbZl0saz17fTtrLmlkPVIuZGF0YSgiaWQiKSxrLnNvdXJjZUlkPVIuZGF0YSgic291cmNlIiksay50YXJnZXRJZD1SLmRhdGEoInRhcmdldCIpO3ZhciBMPWxpKG4uaWRlYWxFZGdlTGVuZ3RoKT9uLmlkZWFsRWRnZUxlbmd0aChSKTpuLmlkZWFsRWRnZUxlbmd0aCxBPWxpKG4uZWRnZUVsYXN0aWNpdHkpP24uZWRnZUVsYXN0aWNpdHkoUik6bi5lZGdlRWxhc3RpY2l0eSxJPWwuaWRUb0luZGV4W2suc291cmNlSWRdLE09bC5pZFRvSW5kZXhbay50YXJnZXRJZF0sUD1sLmluZGV4VG9HcmFwaFtJXSxCPWwuaW5kZXhUb0dyYXBoW01dO2lmKFAhPUIpe2Zvcih2YXIgRj1TWmUoay5zb3VyY2VJZCxrLnRhcmdldElkLGwpLHo9bC5ncmFwaFNldFtGXSwkPTAsdj1sLmxheW91dE5vZGVzW0ldO3ouaW5kZXhPZih2LmlkKT09PS0xOyl2PWwubGF5b3V0Tm9kZXNbbC5pZFRvSW5kZXhbdi5wYXJlbnRJZF1dLCQrKztmb3Iodj1sLmxheW91dE5vZGVzW01dO3ouaW5kZXhPZih2LmlkKT09PS0xOyl2PWwubGF5b3V0Tm9kZXNbbC5pZFRvSW5kZXhbdi5wYXJlbnRJZF1dLCQrKztMKj0kKm4ubmVzdGluZ0ZhY3Rvcn1rLmlkZWFsTGVuZ3RoPUwsay5lbGFzdGljaXR5PUEsbC5sYXlvdXRFZGdlcy5wdXNoKGspfXJldHVybiBsfSwiY3JlYXRlTGF5b3V0SW5mbyIpLFNaZT1vKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1DWmUoZSxyLDAsbik7cmV0dXJuIDI+aS5jb3VudD8wOmkuZ3JhcGh9LCJmaW5kTENBIiksQ1plPW8oZnVuY3Rpb24gdChlLHIsbixpKXt2YXIgYT1pLmdyYXBoU2V0W25dO2lmKC0xPGEuaW5kZXhPZihlKSYmLTE8YS5pbmRleE9mKHIpKXJldHVybntjb3VudDoyLGdyYXBoOm59O2Zvcih2YXIgcz0wLGw9MDtsPGEubGVuZ3RoO2wrKyl7dmFyIHU9YVtsXSxoPWkuaWRUb0luZGV4W3VdLGY9aS5sYXlvdXROb2Rlc1toXS5jaGlsZHJlbjtpZihmLmxlbmd0aCE9PTApe3ZhciBkPWkuaW5kZXhUb0dyYXBoW2kuaWRUb0luZGV4W2ZbMF1dXSxwPXQoZSxyLGQsaSk7aWYocC5jb3VudCE9PTApaWYocC5jb3VudD09PTEpe2lmKHMrKyxzPT09MilicmVha31lbHNlIHJldHVybiBwfX1yZXR1cm57Y291bnQ6cyxncmFwaDpufX0sImZpbmRMQ0FfYXV4IiksX1plPW8oZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49ZS5jbGllbnRXaWR0aCxpPWUuY2xpZW50SGVpZ2h0LGE9MDthPGUubm9kZVNpemU7YSsrKXt2YXIgcz1lLmxheW91dE5vZGVzW2FdO3MuY2hpbGRyZW4ubGVuZ3RoPT09MCYmIXMuaXNMb2NrZWQmJihzLnBvc2l0aW9uWD1NYXRoLnJhbmRvbSgpKm4scy5wb3NpdGlvblk9TWF0aC5yYW5kb20oKSppKX19LCJyYW5kb21pemVQb3NpdGlvbnMiKSxwMWU9byhmdW5jdGlvbihlLHIsbil7dmFyIGk9ZS5ib3VuZGluZ0JveCxhPXt4MToxLzAseDI6LTEvMCx5MToxLzAseTI6LTEvMH07cmV0dXJuIHIuYm91bmRpbmdCb3gmJihuLmZvckVhY2goZnVuY3Rpb24ocyl7dmFyIGw9ZS5sYXlvdXROb2Rlc1tlLmlkVG9JbmRleFtzLmRhdGEoImlkIildXTthLngxPU1hdGgubWluKGEueDEsbC5wb3NpdGlvblgpLGEueDI9TWF0aC5tYXgoYS54MixsLnBvc2l0aW9uWCksYS55MT1NYXRoLm1pbihhLnkxLGwucG9zaXRpb25ZKSxhLnkyPU1hdGgubWF4KGEueTIsbC5wb3NpdGlvblkpfSksYS53PWEueDItYS54MSxhLmg9YS55Mi1hLnkxKSxmdW5jdGlvbihzLGwpe3ZhciB1PWUubGF5b3V0Tm9kZXNbZS5pZFRvSW5kZXhbcy5kYXRhKCJpZCIpXV07aWYoci5ib3VuZGluZ0JveCl7dmFyIGg9KHUucG9zaXRpb25YLWEueDEpL2EudyxmPSh1LnBvc2l0aW9uWS1hLnkxKS9hLmg7cmV0dXJue3g6aS54MStoKmkudyx5OmkueTErZippLmh9fWVsc2UgcmV0dXJue3g6dS5wb3NpdGlvblgseTp1LnBvc2l0aW9uWX19fSwiZ2V0U2NhbGVJbkJvdW5kc0ZuIiksRFplPW8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPW4ubGF5b3V0LGE9bi5lbGVzLm5vZGVzKCkscz1wMWUoZSxuLGEpO2EucG9zaXRpb25zKHMpLGUucmVhZHkhPT0hMCYmKGUucmVhZHk9ITAsaS5vbmUoImxheW91dHJlYWR5IixuLnJlYWR5KSxpLmVtaXQoe3R5cGU6ImxheW91dHJlYWR5IixsYXlvdXQ6dGhpc30pKX0sInJlZnJlc2hQb3NpdGlvbnMiKSxMWmU9byhmdW5jdGlvbihlLHIsbil7UlplKGUsciksSVplKGUpLE9aZShlLHIpLFBaZShlKSxCWmUoZSl9LCJzdGVwIiksUlplPW8oZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49MDtuPGUuZ3JhcGhTZXQubGVuZ3RoO24rKylmb3IodmFyIGk9ZS5ncmFwaFNldFtuXSxhPWkubGVuZ3RoLHM9MDtzPGE7cysrKWZvcih2YXIgbD1lLmxheW91dE5vZGVzW2UuaWRUb0luZGV4W2lbc11dXSx1PXMrMTt1PGE7dSsrKXt2YXIgaD1lLmxheW91dE5vZGVzW2UuaWRUb0luZGV4W2lbdV1dXTtOWmUobCxoLGUscil9fSwiY2FsY3VsYXRlTm9kZUZvcmNlcyIpLE1tZT1vKGZ1bmN0aW9uKGUpe3JldHVybi1lKzIqZSpNYXRoLnJhbmRvbSgpfSwicmFuZG9tRGlzdGFuY2UiKSxOWmU9byhmdW5jdGlvbihlLHIsbixpKXt2YXIgYT1lLmNtcHRJZCxzPXIuY21wdElkO2lmKCEoYSE9PXMmJiFuLmlzQ29tcG91bmQpKXt2YXIgbD1yLnBvc2l0aW9uWC1lLnBvc2l0aW9uWCx1PXIucG9zaXRpb25ZLWUucG9zaXRpb25ZLGg9MTtsPT09MCYmdT09PTAmJihsPU1tZShoKSx1PU1tZShoKSk7dmFyIGY9TVplKGUscixsLHUpO2lmKGY+MCl2YXIgZD1pLm5vZGVPdmVybGFwKmYscD1NYXRoLnNxcnQobCpsK3UqdSksbT1kKmwvcCxnPWQqdS9wO2Vsc2UgdmFyIHk9cTYoZSxsLHUpLHY9cTYociwtMSpsLC0xKnUpLHg9di54LXkueCxiPXYueS15LnksVD14KngrYipiLHA9TWF0aC5zcXJ0KFQpLGQ9KGUubm9kZVJlcHVsc2lvbityLm5vZGVSZXB1bHNpb24pL1QsbT1kKngvcCxnPWQqYi9wO2UuaXNMb2NrZWR8fChlLm9mZnNldFgtPW0sZS5vZmZzZXRZLT1nKSxyLmlzTG9ja2VkfHwoci5vZmZzZXRYKz1tLHIub2Zmc2V0WSs9Zyl9fSwibm9kZVJlcHVsc2lvbiIpLE1aZT1vKGZ1bmN0aW9uKGUscixuLGkpe2lmKG4+MCl2YXIgYT1lLm1heFgtci5taW5YO2Vsc2UgdmFyIGE9ci5tYXhYLWUubWluWDtpZihpPjApdmFyIHM9ZS5tYXhZLXIubWluWTtlbHNlIHZhciBzPXIubWF4WS1lLm1pblk7cmV0dXJuIGE+PTAmJnM+PTA/TWF0aC5zcXJ0KGEqYStzKnMpOjB9LCJub2Rlc092ZXJsYXAiKSxxNj1vKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1lLnBvc2l0aW9uWCxhPWUucG9zaXRpb25ZLHM9ZS5oZWlnaHR8fDEsbD1lLndpZHRofHwxLHU9bi9yLGg9cy9sLGY9e307cmV0dXJuIHI9PT0wJiYwPG58fHI9PT0wJiYwPm4/KGYueD1pLGYueT1hK3MvMixmKTowPHImJi0xKmg8PXUmJnU8PWg/KGYueD1pK2wvMixmLnk9YStsKm4vMi9yLGYpOjA+ciYmLTEqaDw9dSYmdTw9aD8oZi54PWktbC8yLGYueT1hLWwqbi8yL3IsZik6MDxuJiYodTw9LTEqaHx8dT49aCk/KGYueD1pK3Mqci8yL24sZi55PWErcy8yLGYpOigwPm4mJih1PD0tMSpofHx1Pj1oKSYmKGYueD1pLXMqci8yL24sZi55PWEtcy8yKSxmKX0sImZpbmRDbGlwcGluZ1BvaW50IiksSVplPW8oZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49MDtuPGUuZWRnZVNpemU7bisrKXt2YXIgaT1lLmxheW91dEVkZ2VzW25dLGE9ZS5pZFRvSW5kZXhbaS5zb3VyY2VJZF0scz1lLmxheW91dE5vZGVzW2FdLGw9ZS5pZFRvSW5kZXhbaS50YXJnZXRJZF0sdT1lLmxheW91dE5vZGVzW2xdLGg9dS5wb3NpdGlvblgtcy5wb3NpdGlvblgsZj11LnBvc2l0aW9uWS1zLnBvc2l0aW9uWTtpZighKGg9PT0wJiZmPT09MCkpe3ZhciBkPXE2KHMsaCxmKSxwPXE2KHUsLTEqaCwtMSpmKSxtPXAueC1kLngsZz1wLnktZC55LHk9TWF0aC5zcXJ0KG0qbStnKmcpLHY9TWF0aC5wb3coaS5pZGVhbExlbmd0aC15LDIpL2kuZWxhc3RpY2l0eTtpZih5IT09MCl2YXIgeD12Km0veSxiPXYqZy95O2Vsc2UgdmFyIHg9MCxiPTA7cy5pc0xvY2tlZHx8KHMub2Zmc2V0WCs9eCxzLm9mZnNldFkrPWIpLHUuaXNMb2NrZWR8fCh1Lm9mZnNldFgtPXgsdS5vZmZzZXRZLT1iKX19fSwiY2FsY3VsYXRlRWRnZUZvcmNlcyIpLE9aZT1vKGZ1bmN0aW9uKGUscil7aWYoci5ncmF2aXR5IT09MClmb3IodmFyIG49MSxpPTA7aTxlLmdyYXBoU2V0Lmxlbmd0aDtpKyspe3ZhciBhPWUuZ3JhcGhTZXRbaV0scz1hLmxlbmd0aDtpZihpPT09MCl2YXIgbD1lLmNsaWVudEhlaWdodC8yLHU9ZS5jbGllbnRXaWR0aC8yO2Vsc2UgdmFyIGg9ZS5sYXlvdXROb2Rlc1tlLmlkVG9JbmRleFthWzBdXV0sZj1lLmxheW91dE5vZGVzW2UuaWRUb0luZGV4W2gucGFyZW50SWRdXSxsPWYucG9zaXRpb25YLHU9Zi5wb3NpdGlvblk7Zm9yKHZhciBkPTA7ZDxzO2QrKyl7dmFyIHA9ZS5sYXlvdXROb2Rlc1tlLmlkVG9JbmRleFthW2RdXV07aWYoIXAuaXNMb2NrZWQpe3ZhciBtPWwtcC5wb3NpdGlvblgsZz11LXAucG9zaXRpb25ZLHk9TWF0aC5zcXJ0KG0qbStnKmcpO2lmKHk+bil7dmFyIHY9ci5ncmF2aXR5Km0veSx4PXIuZ3Jhdml0eSpnL3k7cC5vZmZzZXRYKz12LHAub2Zmc2V0WSs9eH19fX19LCJjYWxjdWxhdGVHcmF2aXR5Rm9yY2VzIiksUFplPW8oZnVuY3Rpb24oZSxyKXt2YXIgbj1bXSxpPTAsYT0tMTtmb3Iobi5wdXNoLmFwcGx5KG4sZS5ncmFwaFNldFswXSksYSs9ZS5ncmFwaFNldFswXS5sZW5ndGg7aTw9YTspe3ZhciBzPW5baSsrXSxsPWUuaWRUb0luZGV4W3NdLHU9ZS5sYXlvdXROb2Rlc1tsXSxoPXUuY2hpbGRyZW47aWYoMDxoLmxlbmd0aCYmIXUuaXNMb2NrZWQpe2Zvcih2YXIgZj11Lm9mZnNldFgsZD11Lm9mZnNldFkscD0wO3A8aC5sZW5ndGg7cCsrKXt2YXIgbT1lLmxheW91dE5vZGVzW2UuaWRUb0luZGV4W2hbcF1dXTttLm9mZnNldFgrPWYsbS5vZmZzZXRZKz1kLG5bKythXT1oW3BdfXUub2Zmc2V0WD0wLHUub2Zmc2V0WT0wfX19LCJwcm9wYWdhdGVGb3JjZXMiKSxCWmU9byhmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj0wO248ZS5ub2RlU2l6ZTtuKyspe3ZhciBpPWUubGF5b3V0Tm9kZXNbbl07MDxpLmNoaWxkcmVuLmxlbmd0aCYmKGkubWF4WD12b2lkIDAsaS5taW5YPXZvaWQgMCxpLm1heFk9dm9pZCAwLGkubWluWT12b2lkIDApfWZvcih2YXIgbj0wO248ZS5ub2RlU2l6ZTtuKyspe3ZhciBpPWUubGF5b3V0Tm9kZXNbbl07aWYoISgwPGkuY2hpbGRyZW4ubGVuZ3RofHxpLmlzTG9ja2VkKSl7dmFyIGE9RlplKGkub2Zmc2V0WCxpLm9mZnNldFksZS50ZW1wZXJhdHVyZSk7aS5wb3NpdGlvblgrPWEueCxpLnBvc2l0aW9uWSs9YS55LGkub2Zmc2V0WD0wLGkub2Zmc2V0WT0wLGkubWluWD1pLnBvc2l0aW9uWC1pLndpZHRoLGkubWF4WD1pLnBvc2l0aW9uWCtpLndpZHRoLGkubWluWT1pLnBvc2l0aW9uWS1pLmhlaWdodCxpLm1heFk9aS5wb3NpdGlvblkraS5oZWlnaHQsJFplKGksZSl9fWZvcih2YXIgbj0wO248ZS5ub2RlU2l6ZTtuKyspe3ZhciBpPWUubGF5b3V0Tm9kZXNbbl07MDxpLmNoaWxkcmVuLmxlbmd0aCYmIWkuaXNMb2NrZWQmJihpLnBvc2l0aW9uWD0oaS5tYXhYK2kubWluWCkvMixpLnBvc2l0aW9uWT0oaS5tYXhZK2kubWluWSkvMixpLndpZHRoPWkubWF4WC1pLm1pblgsaS5oZWlnaHQ9aS5tYXhZLWkubWluWSl9fSwidXBkYXRlUG9zaXRpb25zIiksRlplPW8oZnVuY3Rpb24oZSxyLG4pe3ZhciBpPU1hdGguc3FydChlKmUrcipyKTtpZihpPm4pdmFyIGE9e3g6biplL2kseTpuKnIvaX07ZWxzZSB2YXIgYT17eDplLHk6cn07cmV0dXJuIGF9LCJsaW1pdEZvcmNlIiksJFplPW8oZnVuY3Rpb24gdChlLHIpe3ZhciBuPWUucGFyZW50SWQ7aWYobiE9bnVsbCl7dmFyIGk9ci5sYXlvdXROb2Rlc1tyLmlkVG9JbmRleFtuXV0sYT0hMTtpZigoaS5tYXhYPT1udWxsfHxlLm1heFgraS5wYWRSaWdodD5pLm1heFgpJiYoaS5tYXhYPWUubWF4WCtpLnBhZFJpZ2h0LGE9ITApLChpLm1pblg9PW51bGx8fGUubWluWC1pLnBhZExlZnQ8aS5taW5YKSYmKGkubWluWD1lLm1pblgtaS5wYWRMZWZ0LGE9ITApLChpLm1heFk9PW51bGx8fGUubWF4WStpLnBhZEJvdHRvbT5pLm1heFkpJiYoaS5tYXhZPWUubWF4WStpLnBhZEJvdHRvbSxhPSEwKSwoaS5taW5ZPT1udWxsfHxlLm1pblktaS5wYWRUb3A8aS5taW5ZKSYmKGkubWluWT1lLm1pblktaS5wYWRUb3AsYT0hMCksYSlyZXR1cm4gdChpLHIpfX0sInVwZGF0ZUFuY2VzdHJ5Qm91bmRhcmllcyIpLEltZT1vKGZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPWUubGF5b3V0Tm9kZXMsaT1bXSxhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBzPW5bYV0sbD1zLmNtcHRJZCx1PWlbbF09aVtsXXx8W107dS5wdXNoKHMpfWZvcih2YXIgaD0wLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIGY9aVthXTtpZihmKXtmLngxPTEvMCxmLngyPS0xLzAsZi55MT0xLzAsZi55Mj0tMS8wO2Zvcih2YXIgZD0wO2Q8Zi5sZW5ndGg7ZCsrKXt2YXIgcD1mW2RdO2YueDE9TWF0aC5taW4oZi54MSxwLnBvc2l0aW9uWC1wLndpZHRoLzIpLGYueDI9TWF0aC5tYXgoZi54MixwLnBvc2l0aW9uWCtwLndpZHRoLzIpLGYueTE9TWF0aC5taW4oZi55MSxwLnBvc2l0aW9uWS1wLmhlaWdodC8yKSxmLnkyPU1hdGgubWF4KGYueTIscC5wb3NpdGlvblkrcC5oZWlnaHQvMil9Zi53PWYueDItZi54MSxmLmg9Zi55Mi1mLnkxLGgrPWYudypmLmh9fWkuc29ydChmdW5jdGlvbihiLFQpe3JldHVybiBULncqVC5oLWIudypiLmh9KTtmb3IodmFyIG09MCxnPTAseT0wLHY9MCx4PU1hdGguc3FydChoKSplLmNsaWVudFdpZHRoL2UuY2xpZW50SGVpZ2h0LGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIGY9aVthXTtpZihmKXtmb3IodmFyIGQ9MDtkPGYubGVuZ3RoO2QrKyl7dmFyIHA9ZltkXTtwLmlzTG9ja2VkfHwocC5wb3NpdGlvblgrPW0tZi54MSxwLnBvc2l0aW9uWSs9Zy1mLnkxKX1tKz1mLncrci5jb21wb25lbnRTcGFjaW5nLHkrPWYudytyLmNvbXBvbmVudFNwYWNpbmcsdj1NYXRoLm1heCh2LGYuaCkseT54JiYoZys9dityLmNvbXBvbmVudFNwYWNpbmcsbT0wLHk9MCx2PTApfX19LCJzZXBhcmF0ZUNvbXBvbmVudHMiKSx6WmU9e2ZpdDohMCxwYWRkaW5nOjMwLGJvdW5kaW5nQm94OnZvaWQgMCxhdm9pZE92ZXJsYXA6ITAsYXZvaWRPdmVybGFwUGFkZGluZzoxMCxub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6ITEsc3BhY2luZ0ZhY3Rvcjp2b2lkIDAsY29uZGVuc2U6ITEscm93czp2b2lkIDAsY29sczp2b2lkIDAscG9zaXRpb246byhmdW5jdGlvbihlKXt9LCJwb3NpdGlvbiIpLHNvcnQ6dm9pZCAwLGFuaW1hdGU6ITEsYW5pbWF0aW9uRHVyYXRpb246NTAwLGFuaW1hdGlvbkVhc2luZzp2b2lkIDAsYW5pbWF0ZUZpbHRlcjpvKGZ1bmN0aW9uKGUscil7cmV0dXJuITB9LCJhbmltYXRlRmlsdGVyIikscmVhZHk6dm9pZCAwLHN0b3A6dm9pZCAwLHRyYW5zZm9ybTpvKGZ1bmN0aW9uKGUscil7cmV0dXJuIHJ9LCJ0cmFuc2Zvcm0iKX07byhtMWUsIkdyaWRMYXlvdXQiKTttMWUucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucyxlPXQscj10LmN5LG49ZS5lbGVzLGk9bi5ub2RlcygpLm5vdCgiOnBhcmVudCIpO2Uuc29ydCYmKGk9aS5zb3J0KGUuc29ydCkpO3ZhciBhPVlzKGUuYm91bmRpbmdCb3g/ZS5ib3VuZGluZ0JveDp7eDE6MCx5MTowLHc6ci53aWR0aCgpLGg6ci5oZWlnaHQoKX0pO2lmKGEuaD09PTB8fGEudz09PTApbi5ub2RlcygpLmxheW91dFBvc2l0aW9ucyh0aGlzLGUsZnVuY3Rpb24oSyl7cmV0dXJue3g6YS54MSx5OmEueTF9fSk7ZWxzZXt2YXIgcz1pLnNpemUoKSxsPU1hdGguc3FydChzKmEuaC9hLncpLHU9TWF0aC5yb3VuZChsKSxoPU1hdGgucm91bmQoYS53L2EuaCpsKSxmPW8oZnVuY3Rpb24oZWUpe2lmKGVlPT1udWxsKXJldHVybiBNYXRoLm1pbih1LGgpO3ZhciBZPU1hdGgubWluKHUsaCk7WT09dT91PWVlOmg9ZWV9LCJzbWFsbCIpLGQ9byhmdW5jdGlvbihlZSl7aWYoZWU9PW51bGwpcmV0dXJuIE1hdGgubWF4KHUsaCk7dmFyIFk9TWF0aC5tYXgodSxoKTtZPT11P3U9ZWU6aD1lZX0sImxhcmdlIikscD1lLnJvd3MsbT1lLmNvbHMhPW51bGw/ZS5jb2xzOmUuY29sdW1ucztpZihwIT1udWxsJiZtIT1udWxsKXU9cCxoPW07ZWxzZSBpZihwIT1udWxsJiZtPT1udWxsKXU9cCxoPU1hdGguY2VpbChzL3UpO2Vsc2UgaWYocD09bnVsbCYmbSE9bnVsbCloPW0sdT1NYXRoLmNlaWwocy9oKTtlbHNlIGlmKGgqdT5zKXt2YXIgZz1mKCkseT1kKCk7KGctMSkqeT49cz9mKGctMSk6KHktMSkqZz49cyYmZCh5LTEpfWVsc2UgZm9yKDtoKnU8czspe3ZhciB2PWYoKSx4PWQoKTsoeCsxKSp2Pj1zP2QoeCsxKTpmKHYrMSl9dmFyIGI9YS53L2gsVD1hLmgvdTtpZihlLmNvbmRlbnNlJiYoYj0wLFQ9MCksZS5hdm9pZE92ZXJsYXApZm9yKHZhciBTPTA7UzxpLmxlbmd0aDtTKyspe3ZhciB3PWlbU10sRT13Ll9wcml2YXRlLnBvc2l0aW9uOyhFLng9PW51bGx8fEUueT09bnVsbCkmJihFLng9MCxFLnk9MCk7dmFyIF89dy5sYXlvdXREaW1lbnNpb25zKGUpLEM9ZS5hdm9pZE92ZXJsYXBQYWRkaW5nLEQ9Xy53K0MsTz1fLmgrQztiPU1hdGgubWF4KGIsRCksVD1NYXRoLm1heChULE8pfWZvcih2YXIgUj17fSxrPW8oZnVuY3Rpb24oZWUsWSl7cmV0dXJuISFSWyJjLSIrZWUrIi0iK1ldfSwidXNlZCIpLEw9byhmdW5jdGlvbihlZSxZKXtSWyJjLSIrZWUrIi0iK1ldPSEwfSwidXNlIiksQT0wLEk9MCxNPW8oZnVuY3Rpb24oKXtJKyssST49aCYmKEk9MCxBKyspfSwibW92ZVRvTmV4dENlbGwiKSxQPXt9LEI9MDtCPGkubGVuZ3RoO0IrKyl7dmFyIEY9aVtCXSx6PWUucG9zaXRpb24oRik7aWYoeiYmKHoucm93IT09dm9pZCAwfHx6LmNvbCE9PXZvaWQgMCkpe3ZhciAkPXtyb3c6ei5yb3csY29sOnouY29sfTtpZigkLmNvbD09PXZvaWQgMClmb3IoJC5jb2w9MDtrKCQucm93LCQuY29sKTspJC5jb2wrKztlbHNlIGlmKCQucm93PT09dm9pZCAwKWZvcigkLnJvdz0wO2soJC5yb3csJC5jb2wpOykkLnJvdysrO1BbRi5pZCgpXT0kLEwoJC5yb3csJC5jb2wpfX12YXIgVT1vKGZ1bmN0aW9uKGVlLFkpe3ZhciBjZSxaO2lmKGVlLmxvY2tlZCgpfHxlZS5pc1BhcmVudCgpKXJldHVybiExO3ZhciB1ZT1QW2VlLmlkKCldO2lmKHVlKWNlPXVlLmNvbCpiK2IvMithLngxLFo9dWUucm93KlQrVC8yK2EueTE7ZWxzZXtmb3IoO2soQSxJKTspTSgpO2NlPUkqYitiLzIrYS54MSxaPUEqVCtULzIrYS55MSxMKEEsSSksTSgpfXJldHVybnt4OmNlLHk6Wn19LCJnZXRQb3MiKTtpLmxheW91dFBvc2l0aW9ucyh0aGlzLGUsVSl9cmV0dXJuIHRoaXN9O0daZT17cmVhZHk6byhmdW5jdGlvbigpe30sInJlYWR5Iiksc3RvcDpvKGZ1bmN0aW9uKCl7fSwic3RvcCIpfTtvKGVGLCJOdWxsTGF5b3V0Iik7ZUYucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucyxlPXQuZWxlcyxyPXRoaXM7cmV0dXJuIHQuY3ksci5lbWl0KCJsYXlvdXRzdGFydCIpLGUubm9kZXMoKS5wb3NpdGlvbnMoZnVuY3Rpb24oKXtyZXR1cm57eDowLHk6MH19KSxyLm9uZSgibGF5b3V0cmVhZHkiLHQucmVhZHkpLHIuZW1pdCgibGF5b3V0cmVhZHkiKSxyLm9uZSgibGF5b3V0c3RvcCIsdC5zdG9wKSxyLmVtaXQoImxheW91dHN0b3AiKSx0aGlzfTtlRi5wcm90b3R5cGUuc3RvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzfTtWWmU9e3Bvc2l0aW9uczp2b2lkIDAsem9vbTp2b2lkIDAscGFuOnZvaWQgMCxmaXQ6ITAscGFkZGluZzozMCxzcGFjaW5nRmFjdG9yOnZvaWQgMCxhbmltYXRlOiExLGFuaW1hdGlvbkR1cmF0aW9uOjUwMCxhbmltYXRpb25FYXNpbmc6dm9pZCAwLGFuaW1hdGVGaWx0ZXI6byhmdW5jdGlvbihlLHIpe3JldHVybiEwfSwiYW5pbWF0ZUZpbHRlciIpLHJlYWR5OnZvaWQgMCxzdG9wOnZvaWQgMCx0cmFuc2Zvcm06byhmdW5jdGlvbihlLHIpe3JldHVybiByfSwidHJhbnNmb3JtIil9O28oZzFlLCJQcmVzZXRMYXlvdXQiKTtnMWUucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucyxlPXQuZWxlcyxyPWUubm9kZXMoKSxuPWxpKHQucG9zaXRpb25zKTtmdW5jdGlvbiBpKGEpe2lmKHQucG9zaXRpb25zPT1udWxsKXJldHVybiBxWWUoYS5wb3NpdGlvbigpKTtpZihuKXJldHVybiB0LnBvc2l0aW9ucyhhKTt2YXIgcz10LnBvc2l0aW9uc1thLl9wcml2YXRlLmRhdGEuaWRdO3JldHVybiBzPz9udWxsfXJldHVybiBvKGksImdldFBvc2l0aW9uIiksci5sYXlvdXRQb3NpdGlvbnModGhpcyx0LGZ1bmN0aW9uKGEscyl7dmFyIGw9aShhKTtyZXR1cm4gYS5sb2NrZWQoKXx8bD09bnVsbD8hMTpsfSksdGhpc307VVplPXtmaXQ6ITAscGFkZGluZzozMCxib3VuZGluZ0JveDp2b2lkIDAsYW5pbWF0ZTohMSxhbmltYXRpb25EdXJhdGlvbjo1MDAsYW5pbWF0aW9uRWFzaW5nOnZvaWQgMCxhbmltYXRlRmlsdGVyOm8oZnVuY3Rpb24oZSxyKXtyZXR1cm4hMH0sImFuaW1hdGVGaWx0ZXIiKSxyZWFkeTp2b2lkIDAsc3RvcDp2b2lkIDAsdHJhbnNmb3JtOm8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gcn0sInRyYW5zZm9ybSIpfTtvKHkxZSwiUmFuZG9tTGF5b3V0Iik7eTFlLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMsZT10LmN5LHI9dC5lbGVzLG49WXModC5ib3VuZGluZ0JveD90LmJvdW5kaW5nQm94Ont4MTowLHkxOjAsdzplLndpZHRoKCksaDplLmhlaWdodCgpfSksaT1vKGZ1bmN0aW9uKHMsbCl7cmV0dXJue3g6bi54MStNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkqbi53KSx5Om4ueTErTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpKm4uaCl9fSwiZ2V0UG9zIik7cmV0dXJuIHIubm9kZXMoKS5sYXlvdXRQb3NpdGlvbnModGhpcyx0LGkpLHRoaXN9O0haZT1be25hbWU6ImJyZWFkdGhmaXJzdCIsaW1wbDpoMWV9LHtuYW1lOiJjaXJjbGUiLGltcGw6ZjFlfSx7bmFtZToiY29uY2VudHJpYyIsaW1wbDpkMWV9LHtuYW1lOiJjb3NlIixpbXBsOnVDfSx7bmFtZToiZ3JpZCIsaW1wbDptMWV9LHtuYW1lOiJudWxsIixpbXBsOmVGfSx7bmFtZToicHJlc2V0IixpbXBsOmcxZX0se25hbWU6InJhbmRvbSIsaW1wbDp5MWV9XTtvKHYxZSwiTnVsbFJlbmRlcmVyIik7T21lPW8oZnVuY3Rpb24oKXt9LCJub29wIiksUG1lPW8oZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIkEgaGVhZGxlc3MgaW5zdGFuY2UgY2FuIG5vdCByZW5kZXIgaW1hZ2VzIil9LCJ0aHJvd0ltZ0VyciIpO3YxZS5wcm90b3R5cGU9e3JlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZTpPbWUsbm90aWZ5Om8oZnVuY3Rpb24oKXt0aGlzLm5vdGlmaWNhdGlvbnMrK30sIm5vdGlmeSIpLGluaXQ6T21lLGlzSGVhZGxlc3M6byhmdW5jdGlvbigpe3JldHVybiEwfSwiaXNIZWFkbGVzcyIpLHBuZzpQbWUsanBnOlBtZX07dEY9e307dEYuYXJyb3dTaGFwZVdpZHRoPS4zO3RGLnJlZ2lzdGVyQXJyb3dTaGFwZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmFycm93U2hhcGVzPXt9LGU9dGhpcyxyPW8oZnVuY3Rpb24oaCxmLGQscCxtLGcseSl7dmFyIHY9bS54LWQvMi15LHg9bS54K2QvMit5LGI9bS55LWQvMi15LFQ9bS55K2QvMit5LFM9djw9aCYmaDw9eCYmYjw9ZiYmZjw9VDtyZXR1cm4gU30sImJiQ29sbGlkZSIpLG49byhmdW5jdGlvbihoLGYsZCxwLG0pe3ZhciBnPWgqTWF0aC5jb3MocCktZipNYXRoLnNpbihwKSx5PWgqTWF0aC5zaW4ocCkrZipNYXRoLmNvcyhwKSx2PWcqZCx4PXkqZCxiPXYrbS54LFQ9eCttLnk7cmV0dXJue3g6Yix5OlR9fSwidHJhbnNmb3JtIiksaT1vKGZ1bmN0aW9uKGgsZixkLHApe2Zvcih2YXIgbT1bXSxnPTA7ZzxoLmxlbmd0aDtnKz0yKXt2YXIgeT1oW2ddLHY9aFtnKzFdO20ucHVzaChuKHksdixmLGQscCkpfXJldHVybiBtfSwidHJhbnNmb3JtUG9pbnRzIiksYT1vKGZ1bmN0aW9uKGgpe2Zvcih2YXIgZj1bXSxkPTA7ZDxoLmxlbmd0aDtkKyspe3ZhciBwPWhbZF07Zi5wdXNoKHAueCxwLnkpfXJldHVybiBmfSwicG9pbnRzVG9BcnIiKSxzPW8oZnVuY3Rpb24oaCl7cmV0dXJuIGgucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUqaC5wc3R5bGUoImFycm93LXNjYWxlIikucGZWYWx1ZSoyfSwic3RhbmRhcmRHYXAiKSxsPW8oZnVuY3Rpb24oaCxmKXtadChmKSYmKGY9dFtmXSksdFtoXT1pcih7bmFtZTpoLHBvaW50czpbLS4xNSwtLjMsLjE1LC0uMywuMTUsLjMsLS4xNSwuM10sY29sbGlkZTpvKGZ1bmN0aW9uKHAsbSxnLHksdix4KXt2YXIgYj1hKGkodGhpcy5wb2ludHMsZysyKngseSx2KSksVD1xcyhwLG0sYik7cmV0dXJuIFR9LCJjb2xsaWRlIikscm91Z2hDb2xsaWRlOnIsZHJhdzpvKGZ1bmN0aW9uKHAsbSxnLHkpe3ZhciB2PWkodGhpcy5wb2ludHMsbSxnLHkpO2UuYXJyb3dTaGFwZUltcGwoInBvbHlnb24iKShwLHYpfSwiZHJhdyIpLHNwYWNpbmc6byhmdW5jdGlvbihwKXtyZXR1cm4gMH0sInNwYWNpbmciKSxnYXA6c30sZil9LCJkZWZpbmVBcnJvd1NoYXBlIik7bCgibm9uZSIse2NvbGxpZGU6ejYscm91Z2hDb2xsaWRlOno2LGRyYXc6ekIsc3BhY2luZzpxMGUsZ2FwOnEwZX0pLGwoInRyaWFuZ2xlIix7cG9pbnRzOlstLjE1LC0uMywwLDAsLjE1LC0uM119KSxsKCJhcnJvdyIsInRyaWFuZ2xlIiksbCgidHJpYW5nbGUtYmFja2N1cnZlIix7cG9pbnRzOnQudHJpYW5nbGUucG9pbnRzLGNvbnRyb2xQb2ludDpbMCwtLjE1XSxyb3VnaENvbGxpZGU6cixkcmF3Om8oZnVuY3Rpb24oaCxmLGQscCxtKXt2YXIgZz1pKHRoaXMucG9pbnRzLGYsZCxwKSx5PXRoaXMuY29udHJvbFBvaW50LHY9bih5WzBdLHlbMV0sZixkLHApO2UuYXJyb3dTaGFwZUltcGwodGhpcy5uYW1lKShoLGcsdil9LCJkcmF3IiksZ2FwOm8oZnVuY3Rpb24oaCl7cmV0dXJuIHMoaCkqLjh9LCJnYXAiKX0pLGwoInRyaWFuZ2xlLXRlZSIse3BvaW50czpbMCwwLC4xNSwtLjMsLS4xNSwtLjMsMCwwXSxwb2ludHNUZWU6Wy0uMTUsLS40LC0uMTUsLS41LC4xNSwtLjUsLjE1LC0uNF0sY29sbGlkZTpvKGZ1bmN0aW9uKGgsZixkLHAsbSxnLHkpe3ZhciB2PWEoaSh0aGlzLnBvaW50cyxkKzIqeSxwLG0pKSx4PWEoaSh0aGlzLnBvaW50c1RlZSxkKzIqeSxwLG0pKSxiPXFzKGgsZix2KXx8cXMoaCxmLHgpO3JldHVybiBifSwiY29sbGlkZSIpLGRyYXc6byhmdW5jdGlvbihoLGYsZCxwLG0pe3ZhciBnPWkodGhpcy5wb2ludHMsZixkLHApLHk9aSh0aGlzLnBvaW50c1RlZSxmLGQscCk7ZS5hcnJvd1NoYXBlSW1wbCh0aGlzLm5hbWUpKGgsZyx5KX0sImRyYXciKX0pLGwoImNpcmNsZS10cmlhbmdsZSIse3JhZGl1czouMTUscG9pbnRzVHI6WzAsLS4xNSwuMTUsLS40NSwtLjE1LC0uNDUsMCwtLjE1XSxjb2xsaWRlOm8oZnVuY3Rpb24oaCxmLGQscCxtLGcseSl7dmFyIHY9bSx4PU1hdGgucG93KHYueC1oLDIpK01hdGgucG93KHYueS1mLDIpPD1NYXRoLnBvdygoZCsyKnkpKnRoaXMucmFkaXVzLDIpLGI9YShpKHRoaXMucG9pbnRzLGQrMip5LHAsbSkpO3JldHVybiBxcyhoLGYsYil8fHh9LCJjb2xsaWRlIiksZHJhdzpvKGZ1bmN0aW9uKGgsZixkLHAsbSl7dmFyIGc9aSh0aGlzLnBvaW50c1RyLGYsZCxwKTtlLmFycm93U2hhcGVJbXBsKHRoaXMubmFtZSkoaCxnLHAueCxwLnksdGhpcy5yYWRpdXMqZil9LCJkcmF3Iiksc3BhY2luZzpvKGZ1bmN0aW9uKGgpe3JldHVybiBlLmdldEFycm93V2lkdGgoaC5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSxoLnBzdHlsZSgiYXJyb3ctc2NhbGUiKS52YWx1ZSkqdGhpcy5yYWRpdXN9LCJzcGFjaW5nIil9KSxsKCJ0cmlhbmdsZS1jcm9zcyIse3BvaW50czpbMCwwLC4xNSwtLjMsLS4xNSwtLjMsMCwwXSxiYXNlQ3Jvc3NMaW5lUHRzOlstLjE1LC0uNCwtLjE1LC0uNCwuMTUsLS40LC4xNSwtLjRdLGNyb3NzTGluZVB0czpvKGZ1bmN0aW9uKGgsZil7dmFyIGQ9dGhpcy5iYXNlQ3Jvc3NMaW5lUHRzLnNsaWNlKCkscD1mL2gsbT0zLGc9NTtyZXR1cm4gZFttXT1kW21dLXAsZFtnXT1kW2ddLXAsZH0sImNyb3NzTGluZVB0cyIpLGNvbGxpZGU6byhmdW5jdGlvbihoLGYsZCxwLG0sZyx5KXt2YXIgdj1hKGkodGhpcy5wb2ludHMsZCsyKnkscCxtKSkseD1hKGkodGhpcy5jcm9zc0xpbmVQdHMoZCxnKSxkKzIqeSxwLG0pKSxiPXFzKGgsZix2KXx8cXMoaCxmLHgpO3JldHVybiBifSwiY29sbGlkZSIpLGRyYXc6byhmdW5jdGlvbihoLGYsZCxwLG0pe3ZhciBnPWkodGhpcy5wb2ludHMsZixkLHApLHk9aSh0aGlzLmNyb3NzTGluZVB0cyhmLG0pLGYsZCxwKTtlLmFycm93U2hhcGVJbXBsKHRoaXMubmFtZSkoaCxnLHkpfSwiZHJhdyIpfSksbCgidmVlIix7cG9pbnRzOlstLjE1LC0uMywwLDAsLjE1LC0uMywwLC0uMTVdLGdhcDpvKGZ1bmN0aW9uKGgpe3JldHVybiBzKGgpKi41MjV9LCJnYXAiKX0pLGwoImNpcmNsZSIse3JhZGl1czouMTUsY29sbGlkZTpvKGZ1bmN0aW9uKGgsZixkLHAsbSxnLHkpe3ZhciB2PW0seD1NYXRoLnBvdyh2LngtaCwyKStNYXRoLnBvdyh2LnktZiwyKTw9TWF0aC5wb3coKGQrMip5KSp0aGlzLnJhZGl1cywyKTtyZXR1cm4geH0sImNvbGxpZGUiKSxkcmF3Om8oZnVuY3Rpb24oaCxmLGQscCxtKXtlLmFycm93U2hhcGVJbXBsKHRoaXMubmFtZSkoaCxwLngscC55LHRoaXMucmFkaXVzKmYpfSwiZHJhdyIpLHNwYWNpbmc6byhmdW5jdGlvbihoKXtyZXR1cm4gZS5nZXRBcnJvd1dpZHRoKGgucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUsaC5wc3R5bGUoImFycm93LXNjYWxlIikudmFsdWUpKnRoaXMucmFkaXVzfSwic3BhY2luZyIpfSksbCgidGVlIix7cG9pbnRzOlstLjE1LDAsLS4xNSwtLjEsLjE1LC0uMSwuMTUsMF0sc3BhY2luZzpvKGZ1bmN0aW9uKGgpe3JldHVybiAxfSwic3BhY2luZyIpLGdhcDpvKGZ1bmN0aW9uKGgpe3JldHVybiAxfSwiZ2FwIil9KSxsKCJzcXVhcmUiLHtwb2ludHM6Wy0uMTUsMCwuMTUsMCwuMTUsLS4zLC0uMTUsLS4zXX0pLGwoImRpYW1vbmQiLHtwb2ludHM6Wy0uMTUsLS4xNSwwLC0uMywuMTUsLS4xNSwwLDBdLGdhcDpvKGZ1bmN0aW9uKGgpe3JldHVybiBoLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlKmgucHN0eWxlKCJhcnJvdy1zY2FsZSIpLnZhbHVlfSwiZ2FwIil9KSxsKCJjaGV2cm9uIix7cG9pbnRzOlswLDAsLS4xNSwtLjE1LC0uMSwtLjIsMCwtLjEsLjEsLS4yLC4xNSwtLjE1XSxnYXA6byhmdW5jdGlvbihoKXtyZXR1cm4gLjk1KmgucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUqaC5wc3R5bGUoImFycm93LXNjYWxlIikudmFsdWV9LCJnYXAiKX0pfTtyMD17fTtyMC5wcm9qZWN0SW50b1ZpZXdwb3J0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5jeSxuPXRoaXMuZmluZENvbnRhaW5lckNsaWVudENvb3JkcygpLGk9blswXSxhPW5bMV0scz1uWzRdLGw9ci5wYW4oKSx1PXIuem9vbSgpLGg9KCh0LWkpL3MtbC54KS91LGY9KChlLWEpL3MtbC55KS91O3JldHVybltoLGZdfTtyMC5maW5kQ29udGFpbmVyQ2xpZW50Q29vcmRzPWZ1bmN0aW9uKCl7aWYodGhpcy5jb250YWluZXJCQilyZXR1cm4gdGhpcy5jb250YWluZXJCQjt2YXIgdD10aGlzLmNvbnRhaW5lcixlPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscj10aGlzLmN5LndpbmRvdygpLmdldENvbXB1dGVkU3R5bGUodCksbj1vKGZ1bmN0aW9uKHgpe3JldHVybiBwYXJzZUZsb2F0KHIuZ2V0UHJvcGVydHlWYWx1ZSh4KSl9LCJzdHlsZVZhbHVlIiksaT17bGVmdDpuKCJwYWRkaW5nLWxlZnQiKSxyaWdodDpuKCJwYWRkaW5nLXJpZ2h0IiksdG9wOm4oInBhZGRpbmctdG9wIiksYm90dG9tOm4oInBhZGRpbmctYm90dG9tIil9LGE9e2xlZnQ6bigiYm9yZGVyLWxlZnQtd2lkdGgiKSxyaWdodDpuKCJib3JkZXItcmlnaHQtd2lkdGgiKSx0b3A6bigiYm9yZGVyLXRvcC13aWR0aCIpLGJvdHRvbTpuKCJib3JkZXItYm90dG9tLXdpZHRoIil9LHM9dC5jbGllbnRXaWR0aCxsPXQuY2xpZW50SGVpZ2h0LHU9aS5sZWZ0K2kucmlnaHQsaD1pLnRvcCtpLmJvdHRvbSxmPWEubGVmdCthLnJpZ2h0LGQ9ZS53aWR0aC8ocytmKSxwPXMtdSxtPWwtaCxnPWUubGVmdCtpLmxlZnQrYS5sZWZ0LHk9ZS50b3AraS50b3ArYS50b3A7cmV0dXJuIHRoaXMuY29udGFpbmVyQkI9W2cseSxwLG0sZF19O3IwLmludmFsaWRhdGVDb250YWluZXJDbGllbnRDb29yZHNDYWNoZT1mdW5jdGlvbigpe3RoaXMuY29udGFpbmVyQkI9bnVsbH07cjAuZmluZE5lYXJlc3RFbGVtZW50PWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0aGlzLmZpbmROZWFyZXN0RWxlbWVudHModCxlLHIsbilbMF19O3IwLmZpbmROZWFyZXN0RWxlbWVudHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcyxhPXRoaXMscz1hLmdldENhY2hlZFpTb3J0ZWRFbGVzKCksbD1bXSx1PWEuY3kuem9vbSgpLGg9YS5jeS5oYXNDb21wb3VuZE5vZGVzKCksZj0obj8yNDo4KS91LGQ9KG4/ODoyKS91LHA9KG4/ODoyKS91LG09MS8wLGcseTtyJiYocz1zLmludGVyYWN0aXZlKTtmdW5jdGlvbiB2KF8sQyl7aWYoXy5pc05vZGUoKSl7aWYoeSlyZXR1cm47eT1fLGwucHVzaChfKX1pZihfLmlzRWRnZSgpJiYoQz09bnVsbHx8QzxtKSlpZihnKXtpZihnLnBzdHlsZSgiei1jb21wb3VuZC1kZXB0aCIpLnZhbHVlPT09Xy5wc3R5bGUoInotY29tcG91bmQtZGVwdGgiKS52YWx1ZSYmZy5wc3R5bGUoInotY29tcG91bmQtZGVwdGgiKS52YWx1ZT09PV8ucHN0eWxlKCJ6LWNvbXBvdW5kLWRlcHRoIikudmFsdWUpe2Zvcih2YXIgRD0wO0Q8bC5sZW5ndGg7RCsrKWlmKGxbRF0uaXNFZGdlKCkpe2xbRF09XyxnPV8sbT1DPz9tO2JyZWFrfX19ZWxzZSBsLnB1c2goXyksZz1fLG09Qz8/bX1vKHYsImFkZEVsZSIpO2Z1bmN0aW9uIHgoXyl7dmFyIEM9Xy5vdXRlcldpZHRoKCkrMipkLEQ9Xy5vdXRlckhlaWdodCgpKzIqZCxPPUMvMixSPUQvMixrPV8ucG9zaXRpb24oKSxMPV8ucHN0eWxlKCJjb3JuZXItcmFkaXVzIikudmFsdWU9PT0iYXV0byI/ImF1dG8iOl8ucHN0eWxlKCJjb3JuZXItcmFkaXVzIikucGZWYWx1ZSxBPV8uX3ByaXZhdGUucnNjcmF0Y2g7aWYoay54LU88PXQmJnQ8PWsueCtPJiZrLnktUjw9ZSYmZTw9ay55K1Ipe3ZhciBJPWEubm9kZVNoYXBlc1tpLmdldE5vZGVTaGFwZShfKV07aWYoSS5jaGVja1BvaW50KHQsZSwwLEMsRCxrLngsay55LEwsQSkpcmV0dXJuIHYoXywwKSwhMH19byh4LCJjaGVja05vZGUiKTtmdW5jdGlvbiBiKF8pe3ZhciBDPV8uX3ByaXZhdGUsRD1DLnJzY3JhdGNoLE89Xy5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSxSPV8ucHN0eWxlKCJhcnJvdy1zY2FsZSIpLnZhbHVlLGs9Ty8yK2YsTD1rKmssQT1rKjIsQj1DLnNvdXJjZSxGPUMudGFyZ2V0LEk7aWYoRC5lZGdlVHlwZT09PSJzZWdtZW50cyJ8fEQuZWRnZVR5cGU9PT0ic3RyYWlnaHQifHxELmVkZ2VUeXBlPT09ImhheXN0YWNrIil7Zm9yKHZhciBNPUQuYWxscHRzLFA9MDtQKzM8TS5sZW5ndGg7UCs9MilpZihhWGUodCxlLE1bUF0sTVtQKzFdLE1bUCsyXSxNW1ArM10sQSkmJkw+KEk9dVhlKHQsZSxNW1BdLE1bUCsxXSxNW1ArMl0sTVtQKzNdKSkpcmV0dXJuIHYoXyxJKSwhMH1lbHNlIGlmKEQuZWRnZVR5cGU9PT0iYmV6aWVyInx8RC5lZGdlVHlwZT09PSJtdWx0aWJlemllciJ8fEQuZWRnZVR5cGU9PT0ic2VsZiJ8fEQuZWRnZVR5cGU9PT0iY29tcG91bmQiKXtmb3IodmFyIE09RC5hbGxwdHMsUD0wO1ArNTxELmFsbHB0cy5sZW5ndGg7UCs9NClpZihzWGUodCxlLE1bUF0sTVtQKzFdLE1bUCsyXSxNW1ArM10sTVtQKzRdLE1bUCs1XSxBKSYmTD4oST1jWGUodCxlLE1bUF0sTVtQKzFdLE1bUCsyXSxNW1ArM10sTVtQKzRdLE1bUCs1XSkpKXJldHVybiB2KF8sSSksITB9Zm9yKHZhciBCPUJ8fEMuc291cmNlLEY9Rnx8Qy50YXJnZXQsej1pLmdldEFycm93V2lkdGgoTyxSKSwkPVt7bmFtZToic291cmNlIix4OkQuYXJyb3dTdGFydFgseTpELmFycm93U3RhcnRZLGFuZ2xlOkQuc3JjQXJyb3dBbmdsZX0se25hbWU6InRhcmdldCIseDpELmFycm93RW5kWCx5OkQuYXJyb3dFbmRZLGFuZ2xlOkQudGd0QXJyb3dBbmdsZX0se25hbWU6Im1pZC1zb3VyY2UiLHg6RC5taWRYLHk6RC5taWRZLGFuZ2xlOkQubWlkc3JjQXJyb3dBbmdsZX0se25hbWU6Im1pZC10YXJnZXQiLHg6RC5taWRYLHk6RC5taWRZLGFuZ2xlOkQubWlkdGd0QXJyb3dBbmdsZX1dLFA9MDtQPCQubGVuZ3RoO1ArKyl7dmFyIFU9JFtQXSxLPWEuYXJyb3dTaGFwZXNbXy5wc3R5bGUoVS5uYW1lKyItYXJyb3ctc2hhcGUiKS52YWx1ZV0sZWU9Xy5wc3R5bGUoIndpZHRoIikucGZWYWx1ZTtpZihLLnJvdWdoQ29sbGlkZSh0LGUseixVLmFuZ2xlLHt4OlUueCx5OlUueX0sZWUsZikmJksuY29sbGlkZSh0LGUseixVLmFuZ2xlLHt4OlUueCx5OlUueX0sZWUsZikpcmV0dXJuIHYoXyksITB9aCYmbC5sZW5ndGg+MCYmKHgoQikseChGKSl9byhiLCJjaGVja0VkZ2UiKTtmdW5jdGlvbiBUKF8sQyxEKXtyZXR1cm4gV2woXyxDLEQpfW8oVCwicHJlcHJvcCIpO2Z1bmN0aW9uIFMoXyxDKXt2YXIgRD1fLl9wcml2YXRlLE89cCxSO0M/Uj1DKyItIjpSPSIiLF8uYm91bmRpbmdCb3goKTt2YXIgaz1ELmxhYmVsQm91bmRzW0N8fCJtYWluIl0sTD1fLnBzdHlsZShSKyJsYWJlbCIpLnZhbHVlLEE9Xy5wc3R5bGUoInRleHQtZXZlbnRzIikuc3RyVmFsdWU9PT0ieWVzIjtpZighKCFBfHwhTCkpe3ZhciBJPVQoRC5yc2NyYXRjaCwibGFiZWxYIixDKSxNPVQoRC5yc2NyYXRjaCwibGFiZWxZIixDKSxQPVQoRC5yc2NyYXRjaCwibGFiZWxBbmdsZSIsQyksQj1fLnBzdHlsZShSKyJ0ZXh0LW1hcmdpbi14IikucGZWYWx1ZSxGPV8ucHN0eWxlKFIrInRleHQtbWFyZ2luLXkiKS5wZlZhbHVlLHo9ay54MS1PLUIsJD1rLngyK08tQixVPWsueTEtTy1GLEs9ay55MitPLUY7aWYoUCl7dmFyIGVlPU1hdGguY29zKFApLFk9TWF0aC5zaW4oUCksY2U9byhmdW5jdGlvbihoZSxsZSl7cmV0dXJuIGhlPWhlLUksbGU9bGUtTSx7eDpoZSplZS1sZSpZK0kseTpoZSpZK2xlKmVlK019fSwicm90YXRlIiksWj1jZSh6LFUpLHVlPWNlKHosSyksUT1jZSgkLFUpLGo9Y2UoJCxLKSxuZT1bWi54K0IsWi55K0YsUS54K0IsUS55K0Ysai54K0Isai55K0YsdWUueCtCLHVlLnkrRl07aWYocXModCxlLG5lKSlyZXR1cm4gdihfKSwhMH1lbHNlIGlmKHJ5KGssdCxlKSlyZXR1cm4gdihfKSwhMH19byhTLCJjaGVja0xhYmVsIik7Zm9yKHZhciB3PXMubGVuZ3RoLTE7dz49MDt3LS0pe3ZhciBFPXNbd107RS5pc05vZGUoKT94KEUpfHxTKEUpOmIoRSl8fFMoRSl8fFMoRSwic291cmNlIil8fFMoRSwidGFyZ2V0Iil9cmV0dXJuIGx9O3IwLmdldEFsbEluQm94PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMuZ2V0Q2FjaGVkWlNvcnRlZEVsZXMoKS5pbnRlcmFjdGl2ZSxhPVtdLHM9TWF0aC5taW4odCxyKSxsPU1hdGgubWF4KHQsciksdT1NYXRoLm1pbihlLG4pLGg9TWF0aC5tYXgoZSxuKTt0PXMscj1sLGU9dSxuPWg7Zm9yKHZhciBmPVlzKHt4MTp0LHkxOmUseDI6cix5MjpufSksZD0wO2Q8aS5sZW5ndGg7ZCsrKXt2YXIgcD1pW2RdO2lmKHAuaXNOb2RlKCkpe3ZhciBtPXAsZz1tLmJvdW5kaW5nQm94KHtpbmNsdWRlTm9kZXM6ITAsaW5jbHVkZUVkZ2VzOiExLGluY2x1ZGVMYWJlbHM6ITF9KTtVQihmLGcpJiYhQWdlKGcsZikmJmEucHVzaChtKX1lbHNle3ZhciB5PXAsdj15Ll9wcml2YXRlLHg9di5yc2NyYXRjaDtpZih4LnN0YXJ0WCE9bnVsbCYmeC5zdGFydFkhPW51bGwmJiFyeShmLHguc3RhcnRYLHguc3RhcnRZKXx8eC5lbmRYIT1udWxsJiZ4LmVuZFkhPW51bGwmJiFyeShmLHguZW5kWCx4LmVuZFkpKWNvbnRpbnVlO2lmKHguZWRnZVR5cGU9PT0iYmV6aWVyInx8eC5lZGdlVHlwZT09PSJtdWx0aWJlemllciJ8fHguZWRnZVR5cGU9PT0ic2VsZiJ8fHguZWRnZVR5cGU9PT0iY29tcG91bmQifHx4LmVkZ2VUeXBlPT09InNlZ21lbnRzInx8eC5lZGdlVHlwZT09PSJoYXlzdGFjayIpe2Zvcih2YXIgYj12LnJzdHlsZS5iZXppZXJQdHN8fHYucnN0eWxlLmxpbmVQdHN8fHYucnN0eWxlLmhheXN0YWNrUHRzLFQ9ITAsUz0wO1M8Yi5sZW5ndGg7UysrKWlmKCFpWGUoZixiW1NdKSl7VD0hMTticmVha31UJiZhLnB1c2goeSl9ZWxzZSh4LmVkZ2VUeXBlPT09ImhheXN0YWNrInx8eC5lZGdlVHlwZT09PSJzdHJhaWdodCIpJiZhLnB1c2goeSl9fXJldHVybiBhfTtZNj17fTtZNi5jYWxjdWxhdGVBcnJvd0FuZ2xlcz1mdW5jdGlvbih0KXt2YXIgZT10Ll9wcml2YXRlLnJzY3JhdGNoLHI9ZS5lZGdlVHlwZT09PSJoYXlzdGFjayIsbj1lLmVkZ2VUeXBlPT09ImJlemllciIsaT1lLmVkZ2VUeXBlPT09Im11bHRpYmV6aWVyIixhPWUuZWRnZVR5cGU9PT0ic2VnbWVudHMiLHM9ZS5lZGdlVHlwZT09PSJjb21wb3VuZCIsbD1lLmVkZ2VUeXBlPT09InNlbGYiLHUsaCxmLGQscCxtLHgsYjtpZihyPyhmPWUuaGF5c3RhY2tQdHNbMF0sZD1lLmhheXN0YWNrUHRzWzFdLHA9ZS5oYXlzdGFja1B0c1syXSxtPWUuaGF5c3RhY2tQdHNbM10pOihmPWUuYXJyb3dTdGFydFgsZD1lLmFycm93U3RhcnRZLHA9ZS5hcnJvd0VuZFgsbT1lLmFycm93RW5kWSkseD1lLm1pZFgsYj1lLm1pZFksYSl1PWYtZS5zZWdwdHNbMF0saD1kLWUuc2VncHRzWzFdO2Vsc2UgaWYoaXx8c3x8bHx8bil7dmFyIGc9ZS5hbGxwdHMseT1zYShnWzBdLGdbMl0sZ1s0XSwuMSksdj1zYShnWzFdLGdbM10sZ1s1XSwuMSk7dT1mLXksaD1kLXZ9ZWxzZSB1PWYteCxoPWQtYjtlLnNyY0Fycm93QW5nbGU9ZzYodSxoKTt2YXIgeD1lLm1pZFgsYj1lLm1pZFk7aWYociYmKHg9KGYrcCkvMixiPShkK20pLzIpLHU9cC1mLGg9bS1kLGEpe3ZhciBnPWUuYWxscHRzO2lmKGcubGVuZ3RoLzIlMj09PTApe3ZhciBUPWcubGVuZ3RoLzIsUz1ULTI7dT1nW1RdLWdbU10saD1nW1QrMV0tZ1tTKzFdfWVsc2UgaWYoZS5pc1JvdW5kKXU9ZS5taWRWZWN0b3JbMV0saD0tZS5taWRWZWN0b3JbMF07ZWxzZXt2YXIgVD1nLmxlbmd0aC8yLTEsUz1ULTI7dT1nW1RdLWdbU10saD1nW1QrMV0tZ1tTKzFdfX1lbHNlIGlmKGl8fHN8fGwpe3ZhciBnPWUuYWxscHRzLHc9ZS5jdHJscHRzLEUsXyxDLEQ7aWYody5sZW5ndGgvMiUyPT09MCl7dmFyIE89Zy5sZW5ndGgvMi0xLFI9TysyLGs9UisyO0U9c2EoZ1tPXSxnW1JdLGdba10sMCksXz1zYShnW08rMV0sZ1tSKzFdLGdbaysxXSwwKSxDPXNhKGdbT10sZ1tSXSxnW2tdLDFlLTQpLEQ9c2EoZ1tPKzFdLGdbUisxXSxnW2srMV0sMWUtNCl9ZWxzZXt2YXIgUj1nLmxlbmd0aC8yLTEsTz1SLTIsaz1SKzI7RT1zYShnW09dLGdbUl0sZ1trXSwuNDk5OSksXz1zYShnW08rMV0sZ1tSKzFdLGdbaysxXSwuNDk5OSksQz1zYShnW09dLGdbUl0sZ1trXSwuNSksRD1zYShnW08rMV0sZ1tSKzFdLGdbaysxXSwuNSl9dT1DLUUsaD1ELV99aWYoZS5taWR0Z3RBcnJvd0FuZ2xlPWc2KHUsaCksZS5taWREaXNwWD11LGUubWlkRGlzcFk9aCx1Kj0tMSxoKj0tMSxhKXt2YXIgZz1lLmFsbHB0cztpZihnLmxlbmd0aC8yJTIhPT0wKXtpZighZS5pc1JvdW5kKXt2YXIgVD1nLmxlbmd0aC8yLTEsTD1UKzI7dT0tKGdbTF0tZ1tUXSksaD0tKGdbTCsxXS1nW1QrMV0pfX19aWYoZS5taWRzcmNBcnJvd0FuZ2xlPWc2KHUsaCksYSl1PXAtZS5zZWdwdHNbZS5zZWdwdHMubGVuZ3RoLTJdLGg9bS1lLnNlZ3B0c1tlLnNlZ3B0cy5sZW5ndGgtMV07ZWxzZSBpZihpfHxzfHxsfHxuKXt2YXIgZz1lLmFsbHB0cyxBPWcubGVuZ3RoLHk9c2EoZ1tBLTZdLGdbQS00XSxnW0EtMl0sLjkpLHY9c2EoZ1tBLTVdLGdbQS0zXSxnW0EtMV0sLjkpO3U9cC15LGg9bS12fWVsc2UgdT1wLXgsaD1tLWI7ZS50Z3RBcnJvd0FuZ2xlPWc2KHUsaCl9O1k2LmdldEFycm93V2lkdGg9WTYuZ2V0QXJyb3dIZWlnaHQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmFycm93V2lkdGhDYWNoZT10aGlzLmFycm93V2lkdGhDYWNoZXx8e30sbj1yW3QrIiwgIitlXTtyZXR1cm4gbnx8KG49TWF0aC5tYXgoTWF0aC5wb3codCoxMy4zNywuOSksMjkpKmUsclt0KyIsICIrZV09bixuKX07S2M9e30sbmw9e30sem1lPW8oZnVuY3Rpb24oZSxyLG4pe24ueD1yLngtZS54LG4ueT1yLnktZS55LG4ubGVuPU1hdGguc3FydChuLngqbi54K24ueSpuLnkpLG4ubng9bi54L24ubGVuLG4ubnk9bi55L24ubGVuLG4uYW5nPU1hdGguYXRhbjIobi5ueSxuLm54KX0sImFzVmVjIiksV1plPW8oZnVuY3Rpb24oZSxyKXtyLng9ZS54Ki0xLHIueT1lLnkqLTEsci5ueD1lLm54Ki0xLHIubnk9ZS5ueSotMSxyLmFuZz1lLmFuZz4wPy0oTWF0aC5QSS1lLmFuZyk6TWF0aC5QSStlLmFuZ30sImludmVydFZlYyIpLHFaZT1vKGZ1bmN0aW9uKGUscixuLGksYSl7aWYoZSE9PSRtZT96bWUocixlLEtjKTpXWmUobmwsS2MpLHptZShyLG4sbmwpLEJtZT1LYy5ueCpubC5ueS1LYy5ueSpubC5ueCxGbWU9S2MubngqbmwubngtS2MubnkqLW5sLm55LHJoPU1hdGguYXNpbihNYXRoLm1heCgtMSxNYXRoLm1pbigxLEJtZSkpKSxNYXRoLmFicyhyaCk8MWUtNil7X0I9ci54LERCPXIueSxZcD1ZMT0wO3JldHVybn1YcD0xLFA2PSExLEZtZTwwP3JoPDA/cmg9TWF0aC5QSStyaDoocmg9TWF0aC5QSS1yaCxYcD0tMSxQNj0hMCk6cmg+MCYmKFhwPS0xLFA2PSEwKSxyLnJhZGl1cyE9PXZvaWQgMD9ZMT1yLnJhZGl1czpZMT1pLFVwPXJoLzIsUzY9TWF0aC5taW4oS2MubGVuLzIsbmwubGVuLzIpLGE/KGpjPU1hdGguYWJzKE1hdGguY29zKFVwKSpZMS9NYXRoLnNpbihVcCkpLGpjPlM2PyhqYz1TNixZcD1NYXRoLmFicyhqYypNYXRoLnNpbihVcCkvTWF0aC5jb3MoVXApKSk6WXA9WTEpOihqYz1NYXRoLm1pbihTNixZMSksWXA9TWF0aC5hYnMoamMqTWF0aC5zaW4oVXApL01hdGguY29zKFVwKSkpLExCPXIueCtubC5ueCpqYyxSQj1yLnkrbmwubnkqamMsX0I9TEItbmwubnkqWXAqWHAsREI9UkIrbmwubngqWXAqWHAseDFlPXIueCtLYy5ueCpqYyxiMWU9ci55K0tjLm55KmpjLCRtZT1yfSwiY2FsY0Nvcm5lckFyYyIpO28oVDFlLCJkcmF3UHJlcGFyZWRSb3VuZENvcm5lciIpO28ockYsImdldFJvdW5kQ29ybmVyIik7WWE9e307WWEuZmluZE1pZHB0UHRzRXRjPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5wb3NQdHMsbj1lLmludGVyc2VjdGlvblB0cyxpPWUudmVjdG9yTm9ybUludmVyc2UsYSxzPXQucHN0eWxlKCJzb3VyY2UtZW5kcG9pbnQiKSxsPXQucHN0eWxlKCJ0YXJnZXQtZW5kcG9pbnQiKSx1PXMudW5pdHMhPW51bGwmJmwudW5pdHMhPW51bGwsaD1vKGZ1bmN0aW9uKHcsRSxfLEMpe3ZhciBEPUMtRSxPPV8tdyxSPU1hdGguc3FydChPKk8rRCpEKTtyZXR1cm57eDotRC9SLHk6Ty9SfX0sInJlY2FsY1ZlY3Rvck5vcm1JbnZlcnNlIiksZj10LnBzdHlsZSgiZWRnZS1kaXN0YW5jZXMiKS52YWx1ZTtzd2l0Y2goZil7Y2FzZSJub2RlLXBvc2l0aW9uIjphPXI7YnJlYWs7Y2FzZSJpbnRlcnNlY3Rpb24iOmE9bjticmVhaztjYXNlImVuZHBvaW50cyI6e2lmKHUpe3ZhciBkPXRoaXMubWFudWFsRW5kcHRUb1B4KHQuc291cmNlKClbMF0scykscD1SaShkLDIpLG09cFswXSxnPXBbMV0seT10aGlzLm1hbnVhbEVuZHB0VG9QeCh0LnRhcmdldCgpWzBdLGwpLHY9UmkoeSwyKSx4PXZbMF0sYj12WzFdLFQ9e3gxOm0seTE6Zyx4Mjp4LHkyOmJ9O2k9aChtLGcseCxiKSxhPVR9ZWxzZSBobigiRWRnZSAiLmNvbmNhdCh0LmlkKCksIiBoYXMgZWRnZS1kaXN0YW5jZXM6ZW5kcG9pbnRzIHNwZWNpZmllZCB3aXRob3V0IG1hbnVhbCBlbmRwb2ludHMgc3BlY2lmaWVkIHZpYSBzb3VyY2UtZW5kcG9pbnQgYW5kIHRhcmdldC1lbmRwb2ludC4gIEZhbGxpbmcgYmFjayBvbiBlZGdlLWRpc3RhbmNlczppbnRlcnNlY3Rpb24gKGRlZmF1bHQpLiIpKSxhPW47YnJlYWt9fXJldHVybnttaWRwdFB0czphLHZlY3Rvck5vcm1JbnZlcnNlOml9fTtZYS5maW5kSGF5c3RhY2tQb2ludHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciByPXRbZV0sbj1yLl9wcml2YXRlLGk9bi5yc2NyYXRjaDtpZighaS5oYXlzdGFjayl7dmFyIGE9TWF0aC5yYW5kb20oKSoyKk1hdGguUEk7aS5zb3VyY2U9e3g6TWF0aC5jb3MoYSkseTpNYXRoLnNpbihhKX0sYT1NYXRoLnJhbmRvbSgpKjIqTWF0aC5QSSxpLnRhcmdldD17eDpNYXRoLmNvcyhhKSx5Ok1hdGguc2luKGEpfX12YXIgcz1uLnNvdXJjZSxsPW4udGFyZ2V0LHU9cy5wb3NpdGlvbigpLGg9bC5wb3NpdGlvbigpLGY9cy53aWR0aCgpLGQ9bC53aWR0aCgpLHA9cy5oZWlnaHQoKSxtPWwuaGVpZ2h0KCksZz1yLnBzdHlsZSgiaGF5c3RhY2stcmFkaXVzIikudmFsdWUseT1nLzI7aS5oYXlzdGFja1B0cz1pLmFsbHB0cz1baS5zb3VyY2UueCpmKnkrdS54LGkuc291cmNlLnkqcCp5K3UueSxpLnRhcmdldC54KmQqeStoLngsaS50YXJnZXQueSptKnkraC55XSxpLm1pZFg9KGkuYWxscHRzWzBdK2kuYWxscHRzWzJdKS8yLGkubWlkWT0oaS5hbGxwdHNbMV0raS5hbGxwdHNbM10pLzIsaS5lZGdlVHlwZT0iaGF5c3RhY2siLGkuaGF5c3RhY2s9ITAsdGhpcy5zdG9yZUVkZ2VQcm9qZWN0aW9ucyhyKSx0aGlzLmNhbGN1bGF0ZUFycm93QW5nbGVzKHIpLHRoaXMucmVjYWxjdWxhdGVFZGdlTGFiZWxQcm9qZWN0aW9ucyhyKSx0aGlzLmNhbGN1bGF0ZUxhYmVsQW5nbGVzKHIpfX07WWEuZmluZFNlZ21lbnRzUG9pbnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fcHJpdmF0ZS5yc2NyYXRjaCxuPXQucHN0eWxlKCJzZWdtZW50LXdlaWdodHMiKSxpPXQucHN0eWxlKCJzZWdtZW50LWRpc3RhbmNlcyIpLGE9dC5wc3R5bGUoInNlZ21lbnQtcmFkaWkiKSxzPXQucHN0eWxlKCJyYWRpdXMtdHlwZSIpLGw9TWF0aC5taW4obi5wZlZhbHVlLmxlbmd0aCxpLnBmVmFsdWUubGVuZ3RoKSx1PWEucGZWYWx1ZVthLnBmVmFsdWUubGVuZ3RoLTFdLGg9cy5wZlZhbHVlW3MucGZWYWx1ZS5sZW5ndGgtMV07ci5lZGdlVHlwZT0ic2VnbWVudHMiLHIuc2VncHRzPVtdLHIucmFkaWk9W10sci5pc0FyY1JhZGl1cz1bXTtmb3IodmFyIGY9MDtmPGw7ZisrKXt2YXIgZD1uLnBmVmFsdWVbZl0scD1pLnBmVmFsdWVbZl0sbT0xLWQsZz1kLHk9dGhpcy5maW5kTWlkcHRQdHNFdGModCxlKSx2PXkubWlkcHRQdHMseD15LnZlY3Rvck5vcm1JbnZlcnNlLGI9e3g6di54MSptK3YueDIqZyx5OnYueTEqbSt2LnkyKmd9O3Iuc2VncHRzLnB1c2goYi54K3gueCpwLGIueSt4LnkqcCksci5yYWRpaS5wdXNoKGEucGZWYWx1ZVtmXSE9PXZvaWQgMD9hLnBmVmFsdWVbZl06dSksci5pc0FyY1JhZGl1cy5wdXNoKChzLnBmVmFsdWVbZl0hPT12b2lkIDA/cy5wZlZhbHVlW2ZdOmgpPT09ImFyYy1yYWRpdXMiKX19O1lhLmZpbmRMb29wUG9pbnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQuX3ByaXZhdGUucnNjcmF0Y2gsYT1lLmRpckNvdW50cyxzPWUuc3JjUG9zLGw9dC5wc3R5bGUoImNvbnRyb2wtcG9pbnQtZGlzdGFuY2VzIiksdT1sP2wucGZWYWx1ZVswXTp2b2lkIDAsaD10LnBzdHlsZSgibG9vcC1kaXJlY3Rpb24iKS5wZlZhbHVlLGY9dC5wc3R5bGUoImxvb3Atc3dlZXAiKS5wZlZhbHVlLGQ9dC5wc3R5bGUoImNvbnRyb2wtcG9pbnQtc3RlcC1zaXplIikucGZWYWx1ZTtpLmVkZ2VUeXBlPSJzZWxmIjt2YXIgcD1yLG09ZDtuJiYocD0wLG09dSk7dmFyIGc9aC1NYXRoLlBJLzIseT1nLWYvMix2PWcrZi8yLHg9aCsiXyIrZjtwPWFbeF09PT12b2lkIDA/YVt4XT0wOisrYVt4XSxpLmN0cmxwdHM9W3MueCtNYXRoLmNvcyh5KSoxLjQqbSoocC8zKzEpLHMueStNYXRoLnNpbih5KSoxLjQqbSoocC8zKzEpLHMueCtNYXRoLmNvcyh2KSoxLjQqbSoocC8zKzEpLHMueStNYXRoLnNpbih2KSoxLjQqbSoocC8zKzEpXX07WWEuZmluZENvbXBvdW5kTG9vcFBvaW50cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10Ll9wcml2YXRlLnJzY3JhdGNoO2kuZWRnZVR5cGU9ImNvbXBvdW5kIjt2YXIgYT1lLnNyY1BvcyxzPWUudGd0UG9zLGw9ZS5zcmNXLHU9ZS5zcmNILGg9ZS50Z3RXLGY9ZS50Z3RILGQ9dC5wc3R5bGUoImNvbnRyb2wtcG9pbnQtc3RlcC1zaXplIikucGZWYWx1ZSxwPXQucHN0eWxlKCJjb250cm9sLXBvaW50LWRpc3RhbmNlcyIpLG09cD9wLnBmVmFsdWVbMF06dm9pZCAwLGc9cix5PWQ7biYmKGc9MCx5PW0pO3ZhciB2PTUwLHg9e3g6YS54LWwvMix5OmEueS11LzJ9LGI9e3g6cy54LWgvMix5OnMueS1mLzJ9LFQ9e3g6TWF0aC5taW4oeC54LGIueCkseTpNYXRoLm1pbih4LnksYi55KX0sUz0uNSx3PU1hdGgubWF4KFMsTWF0aC5sb2cobCouMDEpKSxFPU1hdGgubWF4KFMsTWF0aC5sb2coaCouMDEpKTtpLmN0cmxwdHM9W1QueCxULnktKDErTWF0aC5wb3codiwxLjEyKS8xMDApKnkqKGcvMysxKSp3LFQueC0oMStNYXRoLnBvdyh2LDEuMTIpLzEwMCkqeSooZy8zKzEpKkUsVC55XX07WWEuZmluZFN0cmFpZ2h0RWRnZVBvaW50cz1mdW5jdGlvbih0KXt0Ll9wcml2YXRlLnJzY3JhdGNoLmVkZ2VUeXBlPSJzdHJhaWdodCJ9O1lhLmZpbmRCZXppZXJQb2ludHM9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT10Ll9wcml2YXRlLnJzY3JhdGNoLHM9dC5wc3R5bGUoImNvbnRyb2wtcG9pbnQtc3RlcC1zaXplIikucGZWYWx1ZSxsPXQucHN0eWxlKCJjb250cm9sLXBvaW50LWRpc3RhbmNlcyIpLHU9dC5wc3R5bGUoImNvbnRyb2wtcG9pbnQtd2VpZ2h0cyIpLGg9bCYmdT9NYXRoLm1pbihsLnZhbHVlLmxlbmd0aCx1LnZhbHVlLmxlbmd0aCk6MSxmPWw/bC5wZlZhbHVlWzBdOnZvaWQgMCxkPXUudmFsdWVbMF0scD1uO2EuZWRnZVR5cGU9cD8ibXVsdGliZXppZXIiOiJiZXppZXIiLGEuY3RybHB0cz1bXTtmb3IodmFyIG09MDttPGg7bSsrKXt2YXIgZz0oLjUtZS5lbGVzLmxlbmd0aC8yK3IpKnMqKGk/LTE6MSkseT12b2lkIDAsdj1TZ2UoZyk7cCYmKGY9bD9sLnBmVmFsdWVbbV06cyxkPXUudmFsdWVbbV0pLG4/eT1mOnk9ZiE9PXZvaWQgMD92KmY6dm9pZCAwO3ZhciB4PXkhPT12b2lkIDA/eTpnLGI9MS1kLFQ9ZCxTPXRoaXMuZmluZE1pZHB0UHRzRXRjKHQsZSksdz1TLm1pZHB0UHRzLEU9Uy52ZWN0b3JOb3JtSW52ZXJzZSxfPXt4OncueDEqYit3LngyKlQseTp3LnkxKmIrdy55MipUfTthLmN0cmxwdHMucHVzaChfLngrRS54KngsXy55K0UueSp4KX19O1lhLmZpbmRUYXhpUG9pbnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fcHJpdmF0ZS5yc2NyYXRjaDtyLmVkZ2VUeXBlPSJzZWdtZW50cyI7dmFyIG49InZlcnRpY2FsIixpPSJob3Jpem9udGFsIixhPSJsZWZ0d2FyZCIscz0icmlnaHR3YXJkIixsPSJkb3dud2FyZCIsdT0idXB3YXJkIixoPSJhdXRvIixmPWUucG9zUHRzLGQ9ZS5zcmNXLHA9ZS5zcmNILG09ZS50Z3RXLGc9ZS50Z3RILHk9dC5wc3R5bGUoImVkZ2UtZGlzdGFuY2VzIikudmFsdWUsdj15IT09Im5vZGUtcG9zaXRpb24iLHg9dC5wc3R5bGUoInRheGktZGlyZWN0aW9uIikudmFsdWUsYj14LFQ9dC5wc3R5bGUoInRheGktdHVybiIpLFM9VC51bml0cz09PSIlIix3PVQucGZWYWx1ZSxFPXc8MCxfPXQucHN0eWxlKCJ0YXhpLXR1cm4tbWluLWRpc3RhbmNlIikucGZWYWx1ZSxDPXY/KGQrbSkvMjowLEQ9dj8ocCtnKS8yOjAsTz1mLngyLWYueDEsUj1mLnkyLWYueTEsaz1vKGZ1bmN0aW9uKFcscGUpe3JldHVybiBXPjA/TWF0aC5tYXgoVy1wZSwwKTpNYXRoLm1pbihXK3BlLDApfSwic3ViRFdIIiksTD1rKE8sQyksQT1rKFIsRCksST0hMTtiPT09aD94PU1hdGguYWJzKEwpPk1hdGguYWJzKEEpP2k6bjpiPT09dXx8Yj09PWw/KHg9bixJPSEwKTooYj09PWF8fGI9PT1zKSYmKHg9aSxJPSEwKTt2YXIgTT14PT09bixQPU0/QTpMLEI9TT9SOk8sRj1TZ2UoQiksej0hMTshKEkmJihTfHxFKSkmJihiPT09bCYmQjwwfHxiPT09dSYmQj4wfHxiPT09YSYmQj4wfHxiPT09cyYmQjwwKSYmKEYqPS0xLFA9RipNYXRoLmFicyhQKSx6PSEwKTt2YXIgJDtpZihTKXt2YXIgVT13PDA/MSt3Onc7JD1VKlB9ZWxzZXt2YXIgSz13PDA/UDowOyQ9Syt3KkZ9dmFyIGVlPW8oZnVuY3Rpb24oVyl7cmV0dXJuIE1hdGguYWJzKFcpPF98fE1hdGguYWJzKFcpPj1NYXRoLmFicyhQKX0sImdldElzVG9vQ2xvc2UiKSxZPWVlKCQpLGNlPWVlKE1hdGguYWJzKFApLU1hdGguYWJzKCQpKSxaPVl8fGNlO2lmKFomJiF6KWlmKE0pe3ZhciB1ZT1NYXRoLmFicyhCKTw9cC8yLFE9TWF0aC5hYnMoTyk8PW0vMjtpZih1ZSl7dmFyIGo9KGYueDErZi54MikvMixuZT1mLnkxLHRlPWYueTI7ci5zZWdwdHM9W2osbmUsaix0ZV19ZWxzZSBpZihRKXt2YXIgaGU9KGYueTErZi55MikvMixsZT1mLngxLEo9Zi54MjtyLnNlZ3B0cz1bbGUsaGUsSixoZV19ZWxzZSByLnNlZ3B0cz1bZi54MSxmLnkyXX1lbHNle3ZhciBTZT1NYXRoLmFicyhCKTw9ZC8yLHNlPU1hdGguYWJzKFIpPD1nLzI7aWYoU2Upe3ZhciBhZT0oZi55MStmLnkyKS8yLE9lPWYueDEseWU9Zi54MjtyLnNlZ3B0cz1bT2UsYWUseWUsYWVdfWVsc2UgaWYoc2Upe3ZhciBCZT0oZi54MStmLngyKS8yLEhlPWYueTEsemU9Zi55MjtyLnNlZ3B0cz1bQmUsSGUsQmUsemVdfWVsc2Ugci5zZWdwdHM9W2YueDIsZi55MV19ZWxzZSBpZihNKXt2YXIgTGU9Zi55MSskKyh2P3AvMipGOjApLEllPWYueDEseGU9Zi54MjtyLnNlZ3B0cz1bSWUsTGUseGUsTGVdfWVsc2V7dmFyIHE9Zi54MSskKyh2P2QvMipGOjApLGRlPWYueTEsaWU9Zi55MjtyLnNlZ3B0cz1bcSxkZSxxLGllXX1pZihyLmlzUm91bmQpe3ZhciBvZT10LnBzdHlsZSgidGF4aS1yYWRpdXMiKS52YWx1ZSxWPXQucHN0eWxlKCJyYWRpdXMtdHlwZSIpLnZhbHVlWzBdPT09ImFyYy1yYWRpdXMiO3IucmFkaWk9bmV3IEFycmF5KHIuc2VncHRzLmxlbmd0aC8yKS5maWxsKG9lKSxyLmlzQXJjUmFkaXVzPW5ldyBBcnJheShyLnNlZ3B0cy5sZW5ndGgvMikuZmlsbChWKX19O1lhLnRyeVRvQ29ycmVjdEludmFsaWRQb2ludHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9wcml2YXRlLnJzY3JhdGNoO2lmKHIuZWRnZVR5cGU9PT0iYmV6aWVyIil7dmFyIG49ZS5zcmNQb3MsaT1lLnRndFBvcyxhPWUuc3JjVyxzPWUuc3JjSCxsPWUudGd0Vyx1PWUudGd0SCxoPWUuc3JjU2hhcGUsZj1lLnRndFNoYXBlLGQ9ZS5zcmNDb3JuZXJSYWRpdXMscD1lLnRndENvcm5lclJhZGl1cyxtPWUuc3JjUnMsZz1lLnRndFJzLHk9IV90KHIuc3RhcnRYKXx8IV90KHIuc3RhcnRZKSx2PSFfdChyLmFycm93U3RhcnRYKXx8IV90KHIuYXJyb3dTdGFydFkpLHg9IV90KHIuZW5kWCl8fCFfdChyLmVuZFkpLGI9IV90KHIuYXJyb3dFbmRYKXx8IV90KHIuYXJyb3dFbmRZKSxUPTMsUz10aGlzLmdldEFycm93V2lkdGgodC5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSx0LnBzdHlsZSgiYXJyb3ctc2NhbGUiKS52YWx1ZSkqdGhpcy5hcnJvd1NoYXBlV2lkdGgsdz1UKlMsRT1RcCh7eDpyLmN0cmxwdHNbMF0seTpyLmN0cmxwdHNbMV19LHt4OnIuc3RhcnRYLHk6ci5zdGFydFl9KSxfPUU8dyxDPVFwKHt4OnIuY3RybHB0c1swXSx5OnIuY3RybHB0c1sxXX0se3g6ci5lbmRYLHk6ci5lbmRZfSksRD1DPHcsTz0hMTtpZih5fHx2fHxfKXtPPSEwO3ZhciBSPXt4OnIuY3RybHB0c1swXS1uLngseTpyLmN0cmxwdHNbMV0tbi55fSxrPU1hdGguc3FydChSLngqUi54K1IueSpSLnkpLEw9e3g6Ui54L2sseTpSLnkva30sQT1NYXRoLm1heChhLHMpLEk9e3g6ci5jdHJscHRzWzBdK0wueCoyKkEseTpyLmN0cmxwdHNbMV0rTC55KjIqQX0sTT1oLmludGVyc2VjdExpbmUobi54LG4ueSxhLHMsSS54LEkueSwwLGQsbSk7Xz8oci5jdHJscHRzWzBdPXIuY3RybHB0c1swXStMLngqKHctRSksci5jdHJscHRzWzFdPXIuY3RybHB0c1sxXStMLnkqKHctRSkpOihyLmN0cmxwdHNbMF09TVswXStMLngqdyxyLmN0cmxwdHNbMV09TVsxXStMLnkqdyl9aWYoeHx8Ynx8RCl7Tz0hMDt2YXIgUD17eDpyLmN0cmxwdHNbMF0taS54LHk6ci5jdHJscHRzWzFdLWkueX0sQj1NYXRoLnNxcnQoUC54KlAueCtQLnkqUC55KSxGPXt4OlAueC9CLHk6UC55L0J9LHo9TWF0aC5tYXgoYSxzKSwkPXt4OnIuY3RybHB0c1swXStGLngqMip6LHk6ci5jdHJscHRzWzFdK0YueSoyKnp9LFU9Zi5pbnRlcnNlY3RMaW5lKGkueCxpLnksbCx1LCQueCwkLnksMCxwLGcpO0Q/KHIuY3RybHB0c1swXT1yLmN0cmxwdHNbMF0rRi54Kih3LUMpLHIuY3RybHB0c1sxXT1yLmN0cmxwdHNbMV0rRi55Kih3LUMpKTooci5jdHJscHRzWzBdPVVbMF0rRi54Kncsci5jdHJscHRzWzFdPVVbMV0rRi55KncpfU8mJnRoaXMuZmluZEVuZHBvaW50cyh0KX19O1lhLnN0b3JlQWxscHRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX3ByaXZhdGUucnNjcmF0Y2g7aWYoZS5lZGdlVHlwZT09PSJtdWx0aWJlemllciJ8fGUuZWRnZVR5cGU9PT0iYmV6aWVyInx8ZS5lZGdlVHlwZT09PSJzZWxmInx8ZS5lZGdlVHlwZT09PSJjb21wb3VuZCIpe2UuYWxscHRzPVtdLGUuYWxscHRzLnB1c2goZS5zdGFydFgsZS5zdGFydFkpO2Zvcih2YXIgcj0wO3IrMTxlLmN0cmxwdHMubGVuZ3RoO3IrPTIpZS5hbGxwdHMucHVzaChlLmN0cmxwdHNbcl0sZS5jdHJscHRzW3IrMV0pLHIrMzxlLmN0cmxwdHMubGVuZ3RoJiZlLmFsbHB0cy5wdXNoKChlLmN0cmxwdHNbcl0rZS5jdHJscHRzW3IrMl0pLzIsKGUuY3RybHB0c1tyKzFdK2UuY3RybHB0c1tyKzNdKS8yKTtlLmFsbHB0cy5wdXNoKGUuZW5kWCxlLmVuZFkpO3ZhciBuLGk7ZS5jdHJscHRzLmxlbmd0aC8yJTI9PT0wPyhuPWUuYWxscHRzLmxlbmd0aC8yLTEsZS5taWRYPWUuYWxscHRzW25dLGUubWlkWT1lLmFsbHB0c1tuKzFdKToobj1lLmFsbHB0cy5sZW5ndGgvMi0zLGk9LjUsZS5taWRYPXNhKGUuYWxscHRzW25dLGUuYWxscHRzW24rMl0sZS5hbGxwdHNbbis0XSxpKSxlLm1pZFk9c2EoZS5hbGxwdHNbbisxXSxlLmFsbHB0c1tuKzNdLGUuYWxscHRzW24rNV0saSkpfWVsc2UgaWYoZS5lZGdlVHlwZT09PSJzdHJhaWdodCIpZS5hbGxwdHM9W2Uuc3RhcnRYLGUuc3RhcnRZLGUuZW5kWCxlLmVuZFldLGUubWlkWD0oZS5zdGFydFgrZS5lbmRYK2UuYXJyb3dTdGFydFgrZS5hcnJvd0VuZFgpLzQsZS5taWRZPShlLnN0YXJ0WStlLmVuZFkrZS5hcnJvd1N0YXJ0WStlLmFycm93RW5kWSkvNDtlbHNlIGlmKGUuZWRnZVR5cGU9PT0ic2VnbWVudHMiKXtpZihlLmFsbHB0cz1bXSxlLmFsbHB0cy5wdXNoKGUuc3RhcnRYLGUuc3RhcnRZKSxlLmFsbHB0cy5wdXNoLmFwcGx5KGUuYWxscHRzLGUuc2VncHRzKSxlLmFsbHB0cy5wdXNoKGUuZW5kWCxlLmVuZFkpLGUuaXNSb3VuZCl7ZS5yb3VuZENvcm5lcnM9W107Zm9yKHZhciBhPTI7YSszPGUuYWxscHRzLmxlbmd0aDthKz0yKXt2YXIgcz1lLnJhZGlpW2EvMi0xXSxsPWUuaXNBcmNSYWRpdXNbYS8yLTFdO2Uucm91bmRDb3JuZXJzLnB1c2gockYoe3g6ZS5hbGxwdHNbYS0yXSx5OmUuYWxscHRzW2EtMV19LHt4OmUuYWxscHRzW2FdLHk6ZS5hbGxwdHNbYSsxXSxyYWRpdXM6c30se3g6ZS5hbGxwdHNbYSsyXSx5OmUuYWxscHRzW2ErM119LHMsbCkpfX1pZihlLnNlZ3B0cy5sZW5ndGglND09PTApe3ZhciB1PWUuc2VncHRzLmxlbmd0aC8yLGg9dS0yO2UubWlkWD0oZS5zZWdwdHNbaF0rZS5zZWdwdHNbdV0pLzIsZS5taWRZPShlLnNlZ3B0c1toKzFdK2Uuc2VncHRzW3UrMV0pLzJ9ZWxzZXt2YXIgZj1lLnNlZ3B0cy5sZW5ndGgvMi0xO2lmKCFlLmlzUm91bmQpZS5taWRYPWUuc2VncHRzW2ZdLGUubWlkWT1lLnNlZ3B0c1tmKzFdO2Vsc2V7dmFyIGQ9e3g6ZS5zZWdwdHNbZl0seTplLnNlZ3B0c1tmKzFdfSxwPWUucm91bmRDb3JuZXJzW2YvMl0sbT1bZC54LXAuY3gsZC55LXAuY3ldLGc9cC5yYWRpdXMvTWF0aC5zcXJ0KE1hdGgucG93KG1bMF0sMikrTWF0aC5wb3cobVsxXSwyKSk7bT1tLm1hcChmdW5jdGlvbih5KXtyZXR1cm4geSpnfSksZS5taWRYPXAuY3grbVswXSxlLm1pZFk9cC5jeSttWzFdLGUubWlkVmVjdG9yPW19fX19O1lhLmNoZWNrRm9ySW52YWxpZEVkZ2VXYXJuaW5nPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0uX3ByaXZhdGUucnNjcmF0Y2g7ZS5ub2Rlc092ZXJsYXB8fF90KGUuc3RhcnRYKSYmX3QoZS5zdGFydFkpJiZfdChlLmVuZFgpJiZfdChlLmVuZFkpP2UubG9nZ2VkRXJyPSExOmUubG9nZ2VkRXJyfHwoZS5sb2dnZWRFcnI9ITAsaG4oIkVkZ2UgYCIrdC5pZCgpKyJgIGhhcyBpbnZhbGlkIGVuZHBvaW50cyBhbmQgc28gaXQgaXMgaW1wb3NzaWJsZSB0byBkcmF3LiAgQWRqdXN0IHlvdXIgZWRnZSBzdHlsZSAoZS5nLiBjb250cm9sIHBvaW50cykgYWNjb3JkaW5nbHkgb3IgdXNlIGFuIGFsdGVybmF0aXZlIGVkZ2UgdHlwZS4gIFRoaXMgaXMgZXhwZWN0ZWQgYmVoYXZpb3VyIHdoZW4gdGhlIHNvdXJjZSBub2RlIGFuZCB0aGUgdGFyZ2V0IG5vZGUgb3ZlcmxhcC4iKSl9O1lhLmZpbmRFZGdlQ29udHJvbFBvaW50cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKCEoIXR8fHQubGVuZ3RoPT09MCkpe2Zvcih2YXIgcj10aGlzLG49ci5jeSxpPW4uaGFzQ29tcG91bmROb2RlcygpLGE9e21hcDpuZXcgWmMsZ2V0Om8oZnVuY3Rpb24oXyl7dmFyIEM9dGhpcy5tYXAuZ2V0KF9bMF0pO3JldHVybiBDIT1udWxsP0MuZ2V0KF9bMV0pOm51bGx9LCJnZXQiKSxzZXQ6byhmdW5jdGlvbihfLEMpe3ZhciBEPXRoaXMubWFwLmdldChfWzBdKTtEPT1udWxsJiYoRD1uZXcgWmMsdGhpcy5tYXAuc2V0KF9bMF0sRCkpLEQuc2V0KF9bMV0sQyl9LCJzZXQiKX0scz1bXSxsPVtdLHU9MDt1PHQubGVuZ3RoO3UrKyl7dmFyIGg9dFt1XSxmPWguX3ByaXZhdGUsZD1oLnBzdHlsZSgiY3VydmUtc3R5bGUiKS52YWx1ZTtpZighKGgucmVtb3ZlZCgpfHwhaC50YWtlc1VwU3BhY2UoKSkpe2lmKGQ9PT0iaGF5c3RhY2siKXtsLnB1c2goaCk7Y29udGludWV9dmFyIHA9ZD09PSJ1bmJ1bmRsZWQtYmV6aWVyInx8ZC5lbmRzV2l0aCgic2VnbWVudHMiKXx8ZD09PSJzdHJhaWdodCJ8fGQ9PT0ic3RyYWlnaHQtdHJpYW5nbGUifHxkLmVuZHNXaXRoKCJ0YXhpIiksbT1kPT09InVuYnVuZGxlZC1iZXppZXIifHxkPT09ImJlemllciIsZz1mLnNvdXJjZSx5PWYudGFyZ2V0LHY9Zy5wb29sSW5kZXgoKSx4PXkucG9vbEluZGV4KCksYj1bdix4XS5zb3J0KCksVD1hLmdldChiKTtUPT1udWxsJiYoVD17ZWxlczpbXX0sYS5zZXQoYixUKSxzLnB1c2goYikpLFQuZWxlcy5wdXNoKGgpLHAmJihULmhhc1VuYnVuZGxlZD0hMCksbSYmKFQuaGFzQmV6aWVyPSEwKX19Zm9yKHZhciBTPW8oZnVuY3Rpb24oXyl7dmFyIEM9c1tfXSxEPWEuZ2V0KEMpLE89dm9pZCAwO2lmKCFELmhhc1VuYnVuZGxlZCl7dmFyIFI9RC5lbGVzWzBdLnBhcmFsbGVsRWRnZXMoKS5maWx0ZXIoZnVuY3Rpb24ocSl7cmV0dXJuIHEuaXNCdW5kbGVkQmV6aWVyKCl9KTtHQihELmVsZXMpLFIuZm9yRWFjaChmdW5jdGlvbihxKXtyZXR1cm4gRC5lbGVzLnB1c2gocSl9KSxELmVsZXMuc29ydChmdW5jdGlvbihxLGRlKXtyZXR1cm4gcS5wb29sSW5kZXgoKS1kZS5wb29sSW5kZXgoKX0pfXZhciBrPUQuZWxlc1swXSxMPWsuc291cmNlKCksQT1rLnRhcmdldCgpO2lmKEwucG9vbEluZGV4KCk+QS5wb29sSW5kZXgoKSl7dmFyIEk9TDtMPUEsQT1JfXZhciBNPUQuc3JjUG9zPUwucG9zaXRpb24oKSxQPUQudGd0UG9zPUEucG9zaXRpb24oKSxCPUQuc3JjVz1MLm91dGVyV2lkdGgoKSxGPUQuc3JjSD1MLm91dGVySGVpZ2h0KCksej1ELnRndFc9QS5vdXRlcldpZHRoKCksJD1ELnRndEg9QS5vdXRlckhlaWdodCgpLFU9RC5zcmNTaGFwZT1yLm5vZGVTaGFwZXNbZS5nZXROb2RlU2hhcGUoTCldLEs9RC50Z3RTaGFwZT1yLm5vZGVTaGFwZXNbZS5nZXROb2RlU2hhcGUoQSldLGVlPUQuc3JjQ29ybmVyUmFkaXVzPUwucHN0eWxlKCJjb3JuZXItcmFkaXVzIikudmFsdWU9PT0iYXV0byI/ImF1dG8iOkwucHN0eWxlKCJjb3JuZXItcmFkaXVzIikucGZWYWx1ZSxZPUQudGd0Q29ybmVyUmFkaXVzPUEucHN0eWxlKCJjb3JuZXItcmFkaXVzIikudmFsdWU9PT0iYXV0byI/ImF1dG8iOkEucHN0eWxlKCJjb3JuZXItcmFkaXVzIikucGZWYWx1ZSxjZT1ELnRndFJzPUEuX3ByaXZhdGUucnNjcmF0Y2gsWj1ELnNyY1JzPUwuX3ByaXZhdGUucnNjcmF0Y2g7RC5kaXJDb3VudHM9e25vcnRoOjAsd2VzdDowLHNvdXRoOjAsZWFzdDowLG5vcnRod2VzdDowLHNvdXRod2VzdDowLG5vcnRoZWFzdDowLHNvdXRoZWFzdDowfTtmb3IodmFyIHVlPTA7dWU8RC5lbGVzLmxlbmd0aDt1ZSsrKXt2YXIgUT1ELmVsZXNbdWVdLGo9UVswXS5fcHJpdmF0ZS5yc2NyYXRjaCxuZT1RLnBzdHlsZSgiY3VydmUtc3R5bGUiKS52YWx1ZSx0ZT1uZT09PSJ1bmJ1bmRsZWQtYmV6aWVyInx8bmUuZW5kc1dpdGgoInNlZ21lbnRzIil8fG5lLmVuZHNXaXRoKCJ0YXhpIiksaGU9IUwuc2FtZShRLnNvdXJjZSgpKTtpZighRC5jYWxjdWxhdGVkSW50ZXJzZWN0aW9uJiZMIT09QSYmKEQuaGFzQmV6aWVyfHxELmhhc1VuYnVuZGxlZCkpe0QuY2FsY3VsYXRlZEludGVyc2VjdGlvbj0hMDt2YXIgbGU9VS5pbnRlcnNlY3RMaW5lKE0ueCxNLnksQixGLFAueCxQLnksMCxlZSxaKSxKPUQuc3JjSW50bj1sZSxTZT1LLmludGVyc2VjdExpbmUoUC54LFAueSx6LCQsTS54LE0ueSwwLFksY2UpLHNlPUQudGd0SW50bj1TZSxhZT1ELmludGVyc2VjdGlvblB0cz17eDE6bGVbMF0seDI6U2VbMF0seTE6bGVbMV0seTI6U2VbMV19LE9lPUQucG9zUHRzPXt4MTpNLngseDI6UC54LHkxOk0ueSx5MjpQLnl9LHllPVNlWzFdLWxlWzFdLEJlPVNlWzBdLWxlWzBdLEhlPU1hdGguc3FydChCZSpCZSt5ZSp5ZSksemU9RC52ZWN0b3I9e3g6QmUseTp5ZX0sTGU9RC52ZWN0b3JOb3JtPXt4OnplLngvSGUseTp6ZS55L0hlfSxJZT17eDotTGUueSx5OkxlLnh9O0Qubm9kZXNPdmVybGFwPSFfdChIZSl8fEsuY2hlY2tQb2ludChsZVswXSxsZVsxXSwwLHosJCxQLngsUC55LFksY2UpfHxVLmNoZWNrUG9pbnQoU2VbMF0sU2VbMV0sMCxCLEYsTS54LE0ueSxlZSxaKSxELnZlY3Rvck5vcm1JbnZlcnNlPUllLE89e25vZGVzT3ZlcmxhcDpELm5vZGVzT3ZlcmxhcCxkaXJDb3VudHM6RC5kaXJDb3VudHMsY2FsY3VsYXRlZEludGVyc2VjdGlvbjohMCxoYXNCZXppZXI6RC5oYXNCZXppZXIsaGFzVW5idW5kbGVkOkQuaGFzVW5idW5kbGVkLGVsZXM6RC5lbGVzLHNyY1BvczpQLHNyY1JzOmNlLHRndFBvczpNLHRndFJzOlosc3JjVzp6LHNyY0g6JCx0Z3RXOkIsdGd0SDpGLHNyY0ludG46c2UsdGd0SW50bjpKLHNyY1NoYXBlOkssdGd0U2hhcGU6VSxwb3NQdHM6e3gxOk9lLngyLHkxOk9lLnkyLHgyOk9lLngxLHkyOk9lLnkxfSxpbnRlcnNlY3Rpb25QdHM6e3gxOmFlLngyLHkxOmFlLnkyLHgyOmFlLngxLHkyOmFlLnkxfSx2ZWN0b3I6e3g6LXplLngseTotemUueX0sdmVjdG9yTm9ybTp7eDotTGUueCx5Oi1MZS55fSx2ZWN0b3JOb3JtSW52ZXJzZTp7eDotSWUueCx5Oi1JZS55fX19dmFyIHhlPWhlP086RDtqLm5vZGVzT3ZlcmxhcD14ZS5ub2Rlc092ZXJsYXAsai5zcmNJbnRuPXhlLnNyY0ludG4sai50Z3RJbnRuPXhlLnRndEludG4sai5pc1JvdW5kPW5lLnN0YXJ0c1dpdGgoInJvdW5kIiksaSYmKEwuaXNQYXJlbnQoKXx8TC5pc0NoaWxkKCl8fEEuaXNQYXJlbnQoKXx8QS5pc0NoaWxkKCkpJiYoTC5wYXJlbnRzKCkuYW55U2FtZShBKXx8QS5wYXJlbnRzKCkuYW55U2FtZShMKXx8TC5zYW1lKEEpJiZMLmlzUGFyZW50KCkpP2UuZmluZENvbXBvdW5kTG9vcFBvaW50cyhRLHhlLHVlLHRlKTpMPT09QT9lLmZpbmRMb29wUG9pbnRzKFEseGUsdWUsdGUpOm5lLmVuZHNXaXRoKCJzZWdtZW50cyIpP2UuZmluZFNlZ21lbnRzUG9pbnRzKFEseGUpOm5lLmVuZHNXaXRoKCJ0YXhpIik/ZS5maW5kVGF4aVBvaW50cyhRLHhlKTpuZT09PSJzdHJhaWdodCJ8fCF0ZSYmRC5lbGVzLmxlbmd0aCUyPT09MSYmdWU9PT1NYXRoLmZsb29yKEQuZWxlcy5sZW5ndGgvMik/ZS5maW5kU3RyYWlnaHRFZGdlUG9pbnRzKFEpOmUuZmluZEJlemllclBvaW50cyhRLHhlLHVlLHRlLGhlKSxlLmZpbmRFbmRwb2ludHMoUSksZS50cnlUb0NvcnJlY3RJbnZhbGlkUG9pbnRzKFEseGUpLGUuY2hlY2tGb3JJbnZhbGlkRWRnZVdhcm5pbmcoUSksZS5zdG9yZUFsbHB0cyhRKSxlLnN0b3JlRWRnZVByb2plY3Rpb25zKFEpLGUuY2FsY3VsYXRlQXJyb3dBbmdsZXMoUSksZS5yZWNhbGN1bGF0ZUVkZ2VMYWJlbFByb2plY3Rpb25zKFEpLGUuY2FsY3VsYXRlTGFiZWxBbmdsZXMoUSl9fSwiX2xvb3AiKSx3PTA7dzxzLmxlbmd0aDt3KyspUyh3KTt0aGlzLmZpbmRIYXlzdGFja1BvaW50cyhsKX19O28odzFlLCJnZXRQdHMiKTtZYS5nZXRTZWdtZW50UG9pbnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0uX3ByaXZhdGUucnNjcmF0Y2g7dGhpcy5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUodCk7dmFyIHI9ZS5lZGdlVHlwZTtpZihyPT09InNlZ21lbnRzIilyZXR1cm4gdzFlKGUuc2VncHRzKX07WWEuZ2V0Q29udHJvbFBvaW50cz1mdW5jdGlvbih0KXt2YXIgZT10WzBdLl9wcml2YXRlLnJzY3JhdGNoO3RoaXMucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKHQpO3ZhciByPWUuZWRnZVR5cGU7aWYocj09PSJiZXppZXIifHxyPT09Im11bHRpYmV6aWVyInx8cj09PSJzZWxmInx8cj09PSJjb21wb3VuZCIpcmV0dXJuIHcxZShlLmN0cmxwdHMpfTtZYS5nZXRFZGdlTWlkcG9pbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dFswXS5fcHJpdmF0ZS5yc2NyYXRjaDtyZXR1cm4gdGhpcy5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUodCkse3g6ZS5taWRYLHk6ZS5taWRZfX07djQ9e307djQubWFudWFsRW5kcHRUb1B4PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxuPXQucG9zaXRpb24oKSxpPXQub3V0ZXJXaWR0aCgpLGE9dC5vdXRlckhlaWdodCgpLHM9dC5fcHJpdmF0ZS5yc2NyYXRjaDtpZihlLnZhbHVlLmxlbmd0aD09PTIpe3ZhciBsPVtlLnBmVmFsdWVbMF0sZS5wZlZhbHVlWzFdXTtyZXR1cm4gZS51bml0c1swXT09PSIlIiYmKGxbMF09bFswXSppKSxlLnVuaXRzWzFdPT09IiUiJiYobFsxXT1sWzFdKmEpLGxbMF0rPW4ueCxsWzFdKz1uLnksbH1lbHNle3ZhciB1PWUucGZWYWx1ZVswXTt1PS1NYXRoLlBJLzIrdTt2YXIgaD0yKk1hdGgubWF4KGksYSksZj1bbi54K01hdGguY29zKHUpKmgsbi55K01hdGguc2luKHUpKmhdO3JldHVybiByLm5vZGVTaGFwZXNbdGhpcy5nZXROb2RlU2hhcGUodCldLmludGVyc2VjdExpbmUobi54LG4ueSxpLGEsZlswXSxmWzFdLDAsdC5wc3R5bGUoImNvcm5lci1yYWRpdXMiKS52YWx1ZT09PSJhdXRvIj8iYXV0byI6dC5wc3R5bGUoImNvcm5lci1yYWRpdXMiKS5wZlZhbHVlLHMpfX07djQuZmluZEVuZHBvaW50cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHIsbj10LnNvdXJjZSgpWzBdLGk9dC50YXJnZXQoKVswXSxhPW4ucG9zaXRpb24oKSxzPWkucG9zaXRpb24oKSxsPXQucHN0eWxlKCJ0YXJnZXQtYXJyb3ctc2hhcGUiKS52YWx1ZSx1PXQucHN0eWxlKCJzb3VyY2UtYXJyb3ctc2hhcGUiKS52YWx1ZSxoPXQucHN0eWxlKCJ0YXJnZXQtZGlzdGFuY2UtZnJvbS1ub2RlIikucGZWYWx1ZSxmPXQucHN0eWxlKCJzb3VyY2UtZGlzdGFuY2UtZnJvbS1ub2RlIikucGZWYWx1ZSxkPW4uX3ByaXZhdGUucnNjcmF0Y2gscD1pLl9wcml2YXRlLnJzY3JhdGNoLG09dC5wc3R5bGUoImN1cnZlLXN0eWxlIikudmFsdWUsZz10Ll9wcml2YXRlLnJzY3JhdGNoLHk9Zy5lZGdlVHlwZSx2PW09PT0idGF4aSIseD15PT09InNlbGYifHx5PT09ImNvbXBvdW5kIixiPXk9PT0iYmV6aWVyInx8eT09PSJtdWx0aWJlemllciJ8fHgsVD15IT09ImJlemllciIsUz15PT09InN0cmFpZ2h0Inx8eT09PSJzZWdtZW50cyIsdz15PT09InNlZ21lbnRzIixFPWJ8fFR8fFMsXz14fHx2LEM9dC5wc3R5bGUoInNvdXJjZS1lbmRwb2ludCIpLEQ9Xz8ib3V0c2lkZS10by1ub2RlIjpDLnZhbHVlLE89bi5wc3R5bGUoImNvcm5lci1yYWRpdXMiKS52YWx1ZT09PSJhdXRvIj8iYXV0byI6bi5wc3R5bGUoImNvcm5lci1yYWRpdXMiKS5wZlZhbHVlLFI9dC5wc3R5bGUoInRhcmdldC1lbmRwb2ludCIpLGs9Xz8ib3V0c2lkZS10by1ub2RlIjpSLnZhbHVlLEw9aS5wc3R5bGUoImNvcm5lci1yYWRpdXMiKS52YWx1ZT09PSJhdXRvIj8iYXV0byI6aS5wc3R5bGUoImNvcm5lci1yYWRpdXMiKS5wZlZhbHVlO2cuc3JjTWFuRW5kcHQ9QyxnLnRndE1hbkVuZHB0PVI7dmFyIEEsSSxNLFA7aWYoYil7dmFyIEI9W2cuY3RybHB0c1swXSxnLmN0cmxwdHNbMV1dLEY9VD9bZy5jdHJscHRzW2cuY3RybHB0cy5sZW5ndGgtMl0sZy5jdHJscHRzW2cuY3RybHB0cy5sZW5ndGgtMV1dOkI7QT1GLEk9Qn1lbHNlIGlmKFMpe3ZhciB6PXc/Zy5zZWdwdHMuc2xpY2UoMCwyKTpbcy54LHMueV0sJD13P2cuc2VncHRzLnNsaWNlKGcuc2VncHRzLmxlbmd0aC0yKTpbYS54LGEueV07QT0kLEk9en1pZihrPT09Imluc2lkZS10by1ub2RlIilyPVtzLngscy55XTtlbHNlIGlmKFIudW5pdHMpcj10aGlzLm1hbnVhbEVuZHB0VG9QeChpLFIpO2Vsc2UgaWYoaz09PSJvdXRzaWRlLXRvLWxpbmUiKXI9Zy50Z3RJbnRuO2Vsc2UgaWYoaz09PSJvdXRzaWRlLXRvLW5vZGUifHxrPT09Im91dHNpZGUtdG8tbm9kZS1vci1sYWJlbCI/TT1BOihrPT09Im91dHNpZGUtdG8tbGluZSJ8fGs9PT0ib3V0c2lkZS10by1saW5lLW9yLWxhYmVsIikmJihNPVthLngsYS55XSkscj1lLm5vZGVTaGFwZXNbdGhpcy5nZXROb2RlU2hhcGUoaSldLmludGVyc2VjdExpbmUocy54LHMueSxpLm91dGVyV2lkdGgoKSxpLm91dGVySGVpZ2h0KCksTVswXSxNWzFdLDAsTCxwKSxrPT09Im91dHNpZGUtdG8tbm9kZS1vci1sYWJlbCJ8fGs9PT0ib3V0c2lkZS10by1saW5lLW9yLWxhYmVsIil7dmFyIFU9aS5fcHJpdmF0ZS5yc2NyYXRjaCxLPVUubGFiZWxXaWR0aCxlZT1VLmxhYmVsSGVpZ2h0LFk9VS5sYWJlbFgsY2U9VS5sYWJlbFksWj1LLzIsdWU9ZWUvMixRPWkucHN0eWxlKCJ0ZXh0LXZhbGlnbiIpLnZhbHVlO1E9PT0idG9wIj9jZS09dWU6UT09PSJib3R0b20iJiYoY2UrPXVlKTt2YXIgaj1pLnBzdHlsZSgidGV4dC1oYWxpZ24iKS52YWx1ZTtqPT09ImxlZnQiP1ktPVo6aj09PSJyaWdodCImJihZKz1aKTt2YXIgbmU9YTQoTVswXSxNWzFdLFtZLVosY2UtdWUsWStaLGNlLXVlLFkrWixjZSt1ZSxZLVosY2UrdWVdLHMueCxzLnkpO2lmKG5lLmxlbmd0aD4wKXt2YXIgdGU9YSxoZT1XcCh0ZSxqMShyKSksbGU9V3AodGUsajEobmUpKSxKPWhlO2lmKGxlPGhlJiYocj1uZSxKPWxlKSxuZS5sZW5ndGg+Mil7dmFyIFNlPVdwKHRlLHt4Om5lWzJdLHk6bmVbM119KTtTZTxKJiYocj1bbmVbMl0sbmVbM11dKX19fXZhciBzZT15NihyLEEsZS5hcnJvd1NoYXBlc1tsXS5zcGFjaW5nKHQpK2gpLGFlPXk2KHIsQSxlLmFycm93U2hhcGVzW2xdLmdhcCh0KStoKTtpZihnLmVuZFg9YWVbMF0sZy5lbmRZPWFlWzFdLGcuYXJyb3dFbmRYPXNlWzBdLGcuYXJyb3dFbmRZPXNlWzFdLEQ9PT0iaW5zaWRlLXRvLW5vZGUiKXI9W2EueCxhLnldO2Vsc2UgaWYoQy51bml0cylyPXRoaXMubWFudWFsRW5kcHRUb1B4KG4sQyk7ZWxzZSBpZihEPT09Im91dHNpZGUtdG8tbGluZSIpcj1nLnNyY0ludG47ZWxzZSBpZihEPT09Im91dHNpZGUtdG8tbm9kZSJ8fEQ9PT0ib3V0c2lkZS10by1ub2RlLW9yLWxhYmVsIj9QPUk6KEQ9PT0ib3V0c2lkZS10by1saW5lInx8RD09PSJvdXRzaWRlLXRvLWxpbmUtb3ItbGFiZWwiKSYmKFA9W3MueCxzLnldKSxyPWUubm9kZVNoYXBlc1t0aGlzLmdldE5vZGVTaGFwZShuKV0uaW50ZXJzZWN0TGluZShhLngsYS55LG4ub3V0ZXJXaWR0aCgpLG4ub3V0ZXJIZWlnaHQoKSxQWzBdLFBbMV0sMCxPLGQpLEQ9PT0ib3V0c2lkZS10by1ub2RlLW9yLWxhYmVsInx8RD09PSJvdXRzaWRlLXRvLWxpbmUtb3ItbGFiZWwiKXt2YXIgT2U9bi5fcHJpdmF0ZS5yc2NyYXRjaCx5ZT1PZS5sYWJlbFdpZHRoLEJlPU9lLmxhYmVsSGVpZ2h0LEhlPU9lLmxhYmVsWCx6ZT1PZS5sYWJlbFksTGU9eWUvMixJZT1CZS8yLHhlPW4ucHN0eWxlKCJ0ZXh0LXZhbGlnbiIpLnZhbHVlO3hlPT09InRvcCI/emUtPUllOnhlPT09ImJvdHRvbSImJih6ZSs9SWUpO3ZhciBxPW4ucHN0eWxlKCJ0ZXh0LWhhbGlnbiIpLnZhbHVlO3E9PT0ibGVmdCI/SGUtPUxlOnE9PT0icmlnaHQiJiYoSGUrPUxlKTt2YXIgZGU9YTQoUFswXSxQWzFdLFtIZS1MZSx6ZS1JZSxIZStMZSx6ZS1JZSxIZStMZSx6ZStJZSxIZS1MZSx6ZStJZV0sYS54LGEueSk7aWYoZGUubGVuZ3RoPjApe3ZhciBpZT1zLG9lPVdwKGllLGoxKHIpKSxWPVdwKGllLGoxKGRlKSksVGU9b2U7aWYoVjxvZSYmKHI9W2RlWzBdLGRlWzFdXSxUZT1WKSxkZS5sZW5ndGg+Mil7dmFyIFc9V3AoaWUse3g6ZGVbMl0seTpkZVszXX0pO1c8VGUmJihyPVtkZVsyXSxkZVszXV0pfX19dmFyIHBlPXk2KHIsSSxlLmFycm93U2hhcGVzW3VdLnNwYWNpbmcodCkrZiksdmU9eTYocixJLGUuYXJyb3dTaGFwZXNbdV0uZ2FwKHQpK2YpO2cuc3RhcnRYPXZlWzBdLGcuc3RhcnRZPXZlWzFdLGcuYXJyb3dTdGFydFg9cGVbMF0sZy5hcnJvd1N0YXJ0WT1wZVsxXSxFJiYoIV90KGcuc3RhcnRYKXx8IV90KGcuc3RhcnRZKXx8IV90KGcuZW5kWCl8fCFfdChnLmVuZFkpP2cuYmFkTGluZT0hMDpnLmJhZExpbmU9ITEpfTt2NC5nZXRTb3VyY2VFbmRwb2ludD1mdW5jdGlvbih0KXt2YXIgZT10WzBdLl9wcml2YXRlLnJzY3JhdGNoO3N3aXRjaCh0aGlzLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSh0KSxlLmVkZ2VUeXBlKXtjYXNlImhheXN0YWNrIjpyZXR1cm57eDplLmhheXN0YWNrUHRzWzBdLHk6ZS5oYXlzdGFja1B0c1sxXX07ZGVmYXVsdDpyZXR1cm57eDplLmFycm93U3RhcnRYLHk6ZS5hcnJvd1N0YXJ0WX19fTt2NC5nZXRUYXJnZXRFbmRwb2ludD1mdW5jdGlvbih0KXt2YXIgZT10WzBdLl9wcml2YXRlLnJzY3JhdGNoO3N3aXRjaCh0aGlzLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSh0KSxlLmVkZ2VUeXBlKXtjYXNlImhheXN0YWNrIjpyZXR1cm57eDplLmhheXN0YWNrUHRzWzJdLHk6ZS5oYXlzdGFja1B0c1szXX07ZGVmYXVsdDpyZXR1cm57eDplLmFycm93RW5kWCx5OmUuYXJyb3dFbmRZfX19O25GPXt9O28oWVplLCJwdXNoQmV6aWVyUHRzIik7bkYuc3RvcmVFZGdlUHJvamVjdGlvbnM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fcHJpdmF0ZSxyPWUucnNjcmF0Y2gsbj1yLmVkZ2VUeXBlO2lmKGUucnN0eWxlLmJlemllclB0cz1udWxsLGUucnN0eWxlLmxpbmVQdHM9bnVsbCxlLnJzdHlsZS5oYXlzdGFja1B0cz1udWxsLG49PT0ibXVsdGliZXppZXIifHxuPT09ImJlemllciJ8fG49PT0ic2VsZiJ8fG49PT0iY29tcG91bmQiKXtlLnJzdHlsZS5iZXppZXJQdHM9W107Zm9yKHZhciBpPTA7aSs1PHIuYWxscHRzLmxlbmd0aDtpKz00KVlaZSh0aGlzLHQsci5hbGxwdHMuc2xpY2UoaSxpKzYpKX1lbHNlIGlmKG49PT0ic2VnbWVudHMiKWZvcih2YXIgYT1lLnJzdHlsZS5saW5lUHRzPVtdLGk9MDtpKzE8ci5hbGxwdHMubGVuZ3RoO2krPTIpYS5wdXNoKHt4OnIuYWxscHRzW2ldLHk6ci5hbGxwdHNbaSsxXX0pO2Vsc2UgaWYobj09PSJoYXlzdGFjayIpe3ZhciBzPXIuaGF5c3RhY2tQdHM7ZS5yc3R5bGUuaGF5c3RhY2tQdHM9W3t4OnNbMF0seTpzWzFdfSx7eDpzWzJdLHk6c1szXX1dfWUucnN0eWxlLmFycm93V2lkdGg9dGhpcy5nZXRBcnJvd1dpZHRoKHQucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUsdC5wc3R5bGUoImFycm93LXNjYWxlIikudmFsdWUpKnRoaXMuYXJyb3dTaGFwZVdpZHRofTtuRi5yZWNhbGN1bGF0ZUVkZ2VQcm9qZWN0aW9ucz1mdW5jdGlvbih0KXt0aGlzLmZpbmRFZGdlQ29udHJvbFBvaW50cyh0KX07ZXU9e307ZXUucmVjYWxjdWxhdGVOb2RlTGFiZWxQcm9qZWN0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXQucHN0eWxlKCJsYWJlbCIpLnN0clZhbHVlO2lmKCFQZihlKSl7dmFyIHIsbixpPXQuX3ByaXZhdGUsYT10LndpZHRoKCkscz10LmhlaWdodCgpLGw9dC5wYWRkaW5nKCksdT10LnBvc2l0aW9uKCksaD10LnBzdHlsZSgidGV4dC1oYWxpZ24iKS5zdHJWYWx1ZSxmPXQucHN0eWxlKCJ0ZXh0LXZhbGlnbiIpLnN0clZhbHVlLGQ9aS5yc2NyYXRjaCxwPWkucnN0eWxlO3N3aXRjaChoKXtjYXNlImxlZnQiOnI9dS54LWEvMi1sO2JyZWFrO2Nhc2UicmlnaHQiOnI9dS54K2EvMitsO2JyZWFrO2RlZmF1bHQ6cj11Lnh9c3dpdGNoKGYpe2Nhc2UidG9wIjpuPXUueS1zLzItbDticmVhaztjYXNlImJvdHRvbSI6bj11Lnkrcy8yK2w7YnJlYWs7ZGVmYXVsdDpuPXUueX1kLmxhYmVsWD1yLGQubGFiZWxZPW4scC5sYWJlbFg9cixwLmxhYmVsWT1uLHRoaXMuY2FsY3VsYXRlTGFiZWxBbmdsZXModCksdGhpcy5hcHBseUxhYmVsRGltZW5zaW9ucyh0KX19O2sxZT1vKGZ1bmN0aW9uKGUscil7dmFyIG49TWF0aC5hdGFuKHIvZSk7cmV0dXJuIGU9PT0wJiZuPDAmJihuPW4qLTEpLG59LCJsaW5lQW5nbGVGcm9tRGVsdGEiKSxFMWU9byhmdW5jdGlvbihlLHIpe3ZhciBuPXIueC1lLngsaT1yLnktZS55O3JldHVybiBrMWUobixpKX0sImxpbmVBbmdsZSIpLFhaZT1vKGZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPWk0KDAsaS0uMDAxLDEpLHM9aTQoMCxpKy4wMDEsMSksbD1RMShlLHIsbixhKSx1PVExKGUscixuLHMpO3JldHVybiBFMWUobCx1KX0sImJlemllckFuZ2xlIik7ZXUucmVjYWxjdWxhdGVFZGdlTGFiZWxQcm9qZWN0aW9ucz1mdW5jdGlvbih0KXt2YXIgZSxyPXQuX3ByaXZhdGUsbj1yLnJzY3JhdGNoLGk9dGhpcyxhPXttaWQ6dC5wc3R5bGUoImxhYmVsIikuc3RyVmFsdWUsc291cmNlOnQucHN0eWxlKCJzb3VyY2UtbGFiZWwiKS5zdHJWYWx1ZSx0YXJnZXQ6dC5wc3R5bGUoInRhcmdldC1sYWJlbCIpLnN0clZhbHVlfTtpZihhLm1pZHx8YS5zb3VyY2V8fGEudGFyZ2V0KXtlPXt4Om4ubWlkWCx5Om4ubWlkWX07dmFyIHM9byhmdW5jdGlvbihkLHAsbSl7TmYoci5yc2NyYXRjaCxkLHAsbSksTmYoci5yc3R5bGUsZCxwLG0pfSwic2V0UnMiKTtzKCJsYWJlbFgiLG51bGwsZS54KSxzKCJsYWJlbFkiLG51bGwsZS55KTt2YXIgbD1rMWUobi5taWREaXNwWCxuLm1pZERpc3BZKTtzKCJsYWJlbEF1dG9BbmdsZSIsbnVsbCxsKTt2YXIgdT1vKGZ1bmN0aW9uIGYoKXtpZihmLmNhY2hlKXJldHVybiBmLmNhY2hlO2Zvcih2YXIgZD1bXSxwPTA7cCs1PG4uYWxscHRzLmxlbmd0aDtwKz00KXt2YXIgbT17eDpuLmFsbHB0c1twXSx5Om4uYWxscHRzW3ArMV19LGc9e3g6bi5hbGxwdHNbcCsyXSx5Om4uYWxscHRzW3ArM119LHk9e3g6bi5hbGxwdHNbcCs0XSx5Om4uYWxscHRzW3ArNV19O2QucHVzaCh7cDA6bSxwMTpnLHAyOnksc3RhcnREaXN0OjAsbGVuZ3RoOjAsc2VnbWVudHM6W119KX12YXIgdj1yLnJzdHlsZS5iZXppZXJQdHMseD1pLmJlemllclByb2pQY3RzLmxlbmd0aDtmdW5jdGlvbiBiKF8sQyxELE8sUil7dmFyIGs9UXAoQyxEKSxMPV8uc2VnbWVudHNbXy5zZWdtZW50cy5sZW5ndGgtMV0sQT17cDA6QyxwMTpELHQwOk8sdDE6UixzdGFydERpc3Q6TD9MLnN0YXJ0RGlzdCtMLmxlbmd0aDowLGxlbmd0aDprfTtfLnNlZ21lbnRzLnB1c2goQSksXy5sZW5ndGgrPWt9byhiLCJhZGRTZWdtZW50Iik7Zm9yKHZhciBUPTA7VDxkLmxlbmd0aDtUKyspe3ZhciBTPWRbVF0sdz1kW1QtMV07dyYmKFMuc3RhcnREaXN0PXcuc3RhcnREaXN0K3cubGVuZ3RoKSxiKFMsUy5wMCx2W1QqeF0sMCxpLmJlemllclByb2pQY3RzWzBdKTtmb3IodmFyIEU9MDtFPHgtMTtFKyspYihTLHZbVCp4K0VdLHZbVCp4K0UrMV0saS5iZXppZXJQcm9qUGN0c1tFXSxpLmJlemllclByb2pQY3RzW0UrMV0pO2IoUyx2W1QqeCt4LTFdLFMucDIsaS5iZXppZXJQcm9qUGN0c1t4LTFdLDEpfXJldHVybiBmLmNhY2hlPWR9LCJjcmVhdGVDb250cm9sUG9pbnRJbmZvIiksaD1vKGZ1bmN0aW9uKGQpe3ZhciBwLG09ZD09PSJzb3VyY2UiO2lmKGFbZF0pe3ZhciBnPXQucHN0eWxlKGQrIi10ZXh0LW9mZnNldCIpLnBmVmFsdWU7c3dpdGNoKG4uZWRnZVR5cGUpe2Nhc2Uic2VsZiI6Y2FzZSJjb21wb3VuZCI6Y2FzZSJiZXppZXIiOmNhc2UibXVsdGliZXppZXIiOntmb3IodmFyIHk9dSgpLHYseD0wLGI9MCxUPTA7VDx5Lmxlbmd0aDtUKyspe2Zvcih2YXIgUz15W20/VDp5Lmxlbmd0aC0xLVRdLHc9MDt3PFMuc2VnbWVudHMubGVuZ3RoO3crKyl7dmFyIEU9Uy5zZWdtZW50c1ttP3c6Uy5zZWdtZW50cy5sZW5ndGgtMS13XSxfPVQ9PT15Lmxlbmd0aC0xJiZ3PT09Uy5zZWdtZW50cy5sZW5ndGgtMTtpZih4PWIsYis9RS5sZW5ndGgsYj49Z3x8Xyl7dj17Y3A6UyxzZWdtZW50OkV9O2JyZWFrfX1pZih2KWJyZWFrfXZhciBDPXYuY3AsRD12LnNlZ21lbnQsTz0oZy14KS9ELmxlbmd0aCxSPUQudDEtRC50MCxrPW0/RC50MCtSKk86RC50MS1SKk87az1pNCgwLGssMSksZT1RMShDLnAwLEMucDEsQy5wMixrKSxwPVhaZShDLnAwLEMucDEsQy5wMixrKTticmVha31jYXNlInN0cmFpZ2h0IjpjYXNlInNlZ21lbnRzIjpjYXNlImhheXN0YWNrIjp7Zm9yKHZhciBMPTAsQSxJLE0sUCxCPW4uYWxscHRzLmxlbmd0aCxGPTA7RiszPEImJihtPyhNPXt4Om4uYWxscHRzW0ZdLHk6bi5hbGxwdHNbRisxXX0sUD17eDpuLmFsbHB0c1tGKzJdLHk6bi5hbGxwdHNbRiszXX0pOihNPXt4Om4uYWxscHRzW0ItMi1GXSx5Om4uYWxscHRzW0ItMS1GXX0sUD17eDpuLmFsbHB0c1tCLTQtRl0seTpuLmFsbHB0c1tCLTMtRl19KSxBPVFwKE0sUCksST1MLEwrPUEsIShMPj1nKSk7Ris9Mik7dmFyIHo9Zy1JLCQ9ei9BOyQ9aTQoMCwkLDEpLGU9SlllKE0sUCwkKSxwPUUxZShNLFApO2JyZWFrfX1zKCJsYWJlbFgiLGQsZS54KSxzKCJsYWJlbFkiLGQsZS55KSxzKCJsYWJlbEF1dG9BbmdsZSIsZCxwKX19LCJjYWxjdWxhdGVFbmRQcm9qZWN0aW9uIik7aCgic291cmNlIiksaCgidGFyZ2V0IiksdGhpcy5hcHBseUxhYmVsRGltZW5zaW9ucyh0KX19O2V1LmFwcGx5TGFiZWxEaW1lbnNpb25zPWZ1bmN0aW9uKHQpe3RoaXMuYXBwbHlQcmVmaXhlZExhYmVsRGltZW5zaW9ucyh0KSx0LmlzRWRnZSgpJiYodGhpcy5hcHBseVByZWZpeGVkTGFiZWxEaW1lbnNpb25zKHQsInNvdXJjZSIpLHRoaXMuYXBwbHlQcmVmaXhlZExhYmVsRGltZW5zaW9ucyh0LCJ0YXJnZXQiKSl9O2V1LmFwcGx5UHJlZml4ZWRMYWJlbERpbWVuc2lvbnM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9wcml2YXRlLG49dGhpcy5nZXRMYWJlbFRleHQodCxlKSxpPXRoaXMuY2FsY3VsYXRlTGFiZWxEaW1lbnNpb25zKHQsbiksYT10LnBzdHlsZSgibGluZS1oZWlnaHQiKS5wZlZhbHVlLHM9dC5wc3R5bGUoInRleHQtd3JhcCIpLnN0clZhbHVlLGw9V2woci5yc2NyYXRjaCwibGFiZWxXcmFwQ2FjaGVkTGluZXMiLGUpfHxbXSx1PXMhPT0id3JhcCI/MTpNYXRoLm1heChsLmxlbmd0aCwxKSxoPWkuaGVpZ2h0L3UsZj1oKmEsZD1pLndpZHRoLHA9aS5oZWlnaHQrKHUtMSkqKGEtMSkqaDtOZihyLnJzdHlsZSwibGFiZWxXaWR0aCIsZSxkKSxOZihyLnJzY3JhdGNoLCJsYWJlbFdpZHRoIixlLGQpLE5mKHIucnN0eWxlLCJsYWJlbEhlaWdodCIsZSxwKSxOZihyLnJzY3JhdGNoLCJsYWJlbEhlaWdodCIsZSxwKSxOZihyLnJzY3JhdGNoLCJsYWJlbExpbmVIZWlnaHQiLGUsZil9O2V1LmdldExhYmVsVGV4dD1mdW5jdGlvbih0LGUpe3ZhciByPXQuX3ByaXZhdGUsbj1lP2UrIi0iOiIiLGk9dC5wc3R5bGUobisibGFiZWwiKS5zdHJWYWx1ZSxhPXQucHN0eWxlKCJ0ZXh0LXRyYW5zZm9ybSIpLnZhbHVlLHM9byhmdW5jdGlvbihLLGVlKXtyZXR1cm4gZWU/KE5mKHIucnNjcmF0Y2gsSyxlLGVlKSxlZSk6V2woci5yc2NyYXRjaCxLLGUpfSwicnNjcmF0Y2giKTtpZighaSlyZXR1cm4iIjthPT0ibm9uZSJ8fChhPT0idXBwZXJjYXNlIj9pPWkudG9VcHBlckNhc2UoKTphPT0ibG93ZXJjYXNlIiYmKGk9aS50b0xvd2VyQ2FzZSgpKSk7dmFyIGw9dC5wc3R5bGUoInRleHQtd3JhcCIpLnZhbHVlO2lmKGw9PT0id3JhcCIpe3ZhciB1PXMoImxhYmVsS2V5Iik7aWYodSE9bnVsbCYmcygibGFiZWxXcmFwS2V5Iik9PT11KXJldHVybiBzKCJsYWJlbFdyYXBDYWNoZWRUZXh0Iik7Zm9yKHZhciBoPSJcdTIwMEIiLGY9aS5zcGxpdChgCmApLGQ9dC5wc3R5bGUoInRleHQtbWF4LXdpZHRoIikucGZWYWx1ZSxwPXQucHN0eWxlKCJ0ZXh0LW92ZXJmbG93LXdyYXAiKS52YWx1ZSxtPXA9PT0iYW55d2hlcmUiLGc9W10seT0vW1xzXHUyMDBiXSt8JC9nLHY9MDt2PGYubGVuZ3RoO3YrKyl7dmFyIHg9Zlt2XSxiPXRoaXMuY2FsY3VsYXRlTGFiZWxEaW1lbnNpb25zKHQseCksVD1iLndpZHRoO2lmKG0pe3ZhciBTPXguc3BsaXQoIiIpLmpvaW4oaCk7eD1TfWlmKFQ+ZCl7dmFyIHc9eC5tYXRjaEFsbCh5KSxFPSIiLF89MCxDPXZvKHcpLEQ7dHJ5e2ZvcihDLnMoKTshKEQ9Qy5uKCkpLmRvbmU7KXt2YXIgTz1ELnZhbHVlLFI9T1swXSxrPXguc3Vic3RyaW5nKF8sTy5pbmRleCk7Xz1PLmluZGV4K1IubGVuZ3RoO3ZhciBMPUUubGVuZ3RoPT09MD9rOkUraytSLEE9dGhpcy5jYWxjdWxhdGVMYWJlbERpbWVuc2lvbnModCxMKSxJPUEud2lkdGg7STw9ZD9FKz1rK1I6KEUmJmcucHVzaChFKSxFPWsrUil9fWNhdGNoKFUpe0MuZShVKX1maW5hbGx5e0MuZigpfUUubWF0Y2goL15bXHNcdTIwMGJdKyQvKXx8Zy5wdXNoKEUpfWVsc2UgZy5wdXNoKHgpfXMoImxhYmVsV3JhcENhY2hlZExpbmVzIixnKSxpPXMoImxhYmVsV3JhcENhY2hlZFRleHQiLGcuam9pbihgCmApKSxzKCJsYWJlbFdyYXBLZXkiLHUpfWVsc2UgaWYobD09PSJlbGxpcHNpcyIpe3ZhciBNPXQucHN0eWxlKCJ0ZXh0LW1heC13aWR0aCIpLnBmVmFsdWUsUD0iIixCPSJcdTIwMjYiLEY9ITE7aWYodGhpcy5jYWxjdWxhdGVMYWJlbERpbWVuc2lvbnModCxpKS53aWR0aDxNKXJldHVybiBpO2Zvcih2YXIgej0wO3o8aS5sZW5ndGg7eisrKXt2YXIgJD10aGlzLmNhbGN1bGF0ZUxhYmVsRGltZW5zaW9ucyh0LFAraVt6XStCKS53aWR0aDtpZigkPk0pYnJlYWs7UCs9aVt6XSx6PT09aS5sZW5ndGgtMSYmKEY9ITApfXJldHVybiBGfHwoUCs9QiksUH1yZXR1cm4gaX07ZXUuZ2V0TGFiZWxKdXN0aWZpY2F0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXQucHN0eWxlKCJ0ZXh0LWp1c3RpZmljYXRpb24iKS5zdHJWYWx1ZSxyPXQucHN0eWxlKCJ0ZXh0LWhhbGlnbiIpLnN0clZhbHVlO2lmKGU9PT0iYXV0byIpaWYodC5pc05vZGUoKSlzd2l0Y2gocil7Y2FzZSJsZWZ0IjpyZXR1cm4icmlnaHQiO2Nhc2UicmlnaHQiOnJldHVybiJsZWZ0IjtkZWZhdWx0OnJldHVybiJjZW50ZXIifWVsc2UgcmV0dXJuImNlbnRlciI7ZWxzZSByZXR1cm4gZX07ZXUuY2FsY3VsYXRlTGFiZWxEaW1lbnNpb25zPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxuPXIuY3kud2luZG93KCksaT1uLmRvY3VtZW50LGE9QmYoZSx0Ll9wcml2YXRlLmxhYmVsRGltc0tleSkscz1yLmxhYmVsRGltQ2FjaGV8fChyLmxhYmVsRGltQ2FjaGU9W10pLGw9c1thXTtpZihsIT1udWxsKXJldHVybiBsO3ZhciB1PTAsaD10LnBzdHlsZSgiZm9udC1zdHlsZSIpLnN0clZhbHVlLGY9dC5wc3R5bGUoImZvbnQtc2l6ZSIpLnBmVmFsdWUsZD10LnBzdHlsZSgiZm9udC1mYW1pbHkiKS5zdHJWYWx1ZSxwPXQucHN0eWxlKCJmb250LXdlaWdodCIpLnN0clZhbHVlLG09dGhpcy5sYWJlbENhbGNDYW52YXMsZz10aGlzLmxhYmVsQ2FsY0NhbnZhc0NvbnRleHQ7aWYoIW0pe209dGhpcy5sYWJlbENhbGNDYW52YXM9aS5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxnPXRoaXMubGFiZWxDYWxjQ2FudmFzQ29udGV4dD1tLmdldENvbnRleHQoIjJkIik7dmFyIHk9bS5zdHlsZTt5LnBvc2l0aW9uPSJhYnNvbHV0ZSIseS5sZWZ0PSItOTk5OXB4Iix5LnRvcD0iLTk5OTlweCIseS56SW5kZXg9Ii0xIix5LnZpc2liaWxpdHk9ImhpZGRlbiIseS5wb2ludGVyRXZlbnRzPSJub25lIn1nLmZvbnQ9IiIuY29uY2F0KGgsIiAiKS5jb25jYXQocCwiICIpLmNvbmNhdChmLCJweCAiKS5jb25jYXQoZCk7Zm9yKHZhciB2PTAseD0wLGI9ZS5zcGxpdChgCmApLFQ9MDtUPGIubGVuZ3RoO1QrKyl7dmFyIFM9YltUXSx3PWcubWVhc3VyZVRleHQoUyksRT1NYXRoLmNlaWwody53aWR0aCksXz1mO3Y9TWF0aC5tYXgoRSx2KSx4Kz1ffXJldHVybiB2Kz11LHgrPXUsc1thXT17d2lkdGg6dixoZWlnaHQ6eH19O2V1LmNhbGN1bGF0ZUxhYmVsQW5nbGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9wcml2YXRlLG49ci5yc2NyYXRjaCxpPXQuaXNFZGdlKCksYT1lP2UrIi0iOiIiLHM9dC5wc3R5bGUoYSsidGV4dC1yb3RhdGlvbiIpLGw9cy5zdHJWYWx1ZTtyZXR1cm4gbD09PSJub25lIj8wOmkmJmw9PT0iYXV0b3JvdGF0ZSI/bi5sYWJlbEF1dG9BbmdsZTpsPT09ImF1dG9yb3RhdGUiPzA6cy5wZlZhbHVlfTtldS5jYWxjdWxhdGVMYWJlbEFuZ2xlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9dC5pc0VkZ2UoKSxuPXQuX3ByaXZhdGUsaT1uLnJzY3JhdGNoO2kubGFiZWxBbmdsZT1lLmNhbGN1bGF0ZUxhYmVsQW5nbGUodCksciYmKGkuc291cmNlTGFiZWxBbmdsZT1lLmNhbGN1bGF0ZUxhYmVsQW5nbGUodCwic291cmNlIiksaS50YXJnZXRMYWJlbEFuZ2xlPWUuY2FsY3VsYXRlTGFiZWxBbmdsZSh0LCJ0YXJnZXQiKSl9O1MxZT17fSxHbWU9MjgsVm1lPSExO1MxZS5nZXROb2RlU2hhcGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPXQucHN0eWxlKCJzaGFwZSIpLnZhbHVlO2lmKHI9PT0iY3V0cmVjdGFuZ2xlIiYmKHQud2lkdGgoKTxHbWV8fHQuaGVpZ2h0KCk8R21lKSlyZXR1cm4gVm1lfHwoaG4oIlRoZSBgY3V0cmVjdGFuZ2xlYCBub2RlIHNoYXBlIGNhbiBub3QgYmUgdXNlZCBhdCBzbWFsbCBzaXplcyBzbyBgcmVjdGFuZ2xlYCBpcyB1c2VkIGluc3RlYWQiKSxWbWU9ITApLCJyZWN0YW5nbGUiO2lmKHQuaXNQYXJlbnQoKSlyZXR1cm4gcj09PSJyZWN0YW5nbGUifHxyPT09InJvdW5kcmVjdGFuZ2xlInx8cj09PSJyb3VuZC1yZWN0YW5nbGUifHxyPT09ImN1dHJlY3RhbmdsZSJ8fHI9PT0iY3V0LXJlY3RhbmdsZSJ8fHI9PT0iYmFycmVsIj9yOiJyZWN0YW5nbGUiO2lmKHI9PT0icG9seWdvbiIpe3ZhciBuPXQucHN0eWxlKCJzaGFwZS1wb2x5Z29uLXBvaW50cyIpLnZhbHVlO3JldHVybiBlLm5vZGVTaGFwZXMubWFrZVBvbHlnb24obikubmFtZX1yZXR1cm4gcn07aEM9e307aEMucmVnaXN0ZXJDYWxjdWxhdGlvbkxpc3RlbmVycz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY3ksZT10LmNvbGxlY3Rpb24oKSxyPXRoaXMsbj1vKGZ1bmN0aW9uKHMpe3ZhciBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMDtpZihlLm1lcmdlKHMpLGwpZm9yKHZhciB1PTA7dTxzLmxlbmd0aDt1Kyspe3ZhciBoPXNbdV0sZj1oLl9wcml2YXRlLGQ9Zi5yc3R5bGU7ZC5jbGVhbj0hMSxkLmNsZWFuQ29ubmVjdGVkPSExfX0sImVucXVldWUiKTtyLmJpbmRlcih0KS5vbigiYm91bmRzLiogZGlydHkuKiIsbyhmdW5jdGlvbihzKXt2YXIgbD1zLnRhcmdldDtuKGwpfSwib25EaXJ0eUJvdW5kcyIpKS5vbigic3R5bGUuKiBiYWNrZ3JvdW5kLioiLG8oZnVuY3Rpb24ocyl7dmFyIGw9cy50YXJnZXQ7bihsLCExKX0sIm9uRGlydHlTdHlsZSIpKTt2YXIgaT1vKGZ1bmN0aW9uKHMpe2lmKHMpe3ZhciBsPXIub25VcGRhdGVFbGVDYWxjc0ZucztlLmNsZWFuU3R5bGUoKTtmb3IodmFyIHU9MDt1PGUubGVuZ3RoO3UrKyl7dmFyIGg9ZVt1XSxmPWguX3ByaXZhdGUucnN0eWxlO2guaXNOb2RlKCkmJiFmLmNsZWFuQ29ubmVjdGVkJiYobihoLmNvbm5lY3RlZEVkZ2VzKCkpLGYuY2xlYW5Db25uZWN0ZWQ9ITApfWlmKGwpZm9yKHZhciBkPTA7ZDxsLmxlbmd0aDtkKyspe3ZhciBwPWxbZF07cChzLGUpfXIucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKGUpLGU9dC5jb2xsZWN0aW9uKCl9fSwidXBkYXRlRWxlQ2FsY3MiKTtyLmZsdXNoUmVuZGVyZWRTdHlsZVF1ZXVlPWZ1bmN0aW9uKCl7aSghMCl9LHIuYmVmb3JlUmVuZGVyKGksci5iZWZvcmVSZW5kZXJQcmlvcml0aWVzLmVsZUNhbGNzKX07aEMub25VcGRhdGVFbGVDYWxjcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm9uVXBkYXRlRWxlQ2FsY3NGbnM9dGhpcy5vblVwZGF0ZUVsZUNhbGNzRm5zfHxbXTtlLnB1c2godCl9O2hDLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZT1mdW5jdGlvbih0LGUpe3ZhciByPW8oZnVuY3Rpb24oUyl7cmV0dXJuIFMuX3ByaXZhdGUucnN0eWxlLmNsZWFuQ29ubmVjdGVkfSwiaXNDbGVhbkNvbm5lY3RlZCIpLG49W10saT1bXTtpZighdGhpcy5kZXN0cm95ZWQpe2U9PT12b2lkIDAmJihlPSEwKTtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIHM9dFthXSxsPXMuX3ByaXZhdGUsdT1sLnJzdHlsZTtzLmlzRWRnZSgpJiYoIXIocy5zb3VyY2UoKSl8fCFyKHMudGFyZ2V0KCkpKSYmKHUuY2xlYW49ITEpLCEoZSYmdS5jbGVhbnx8cy5yZW1vdmVkKCkpJiZzLnBzdHlsZSgiZGlzcGxheSIpLnZhbHVlIT09Im5vbmUiJiYobC5ncm91cD09PSJub2RlcyI/aS5wdXNoKHMpOm4ucHVzaChzKSx1LmNsZWFuPSEwKX1mb3IodmFyIGg9MDtoPGkubGVuZ3RoO2grKyl7dmFyIGY9aVtoXSxkPWYuX3ByaXZhdGUscD1kLnJzdHlsZSxtPWYucG9zaXRpb24oKTt0aGlzLnJlY2FsY3VsYXRlTm9kZUxhYmVsUHJvamVjdGlvbihmKSxwLm5vZGVYPW0ueCxwLm5vZGVZPW0ueSxwLm5vZGVXPWYucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUscC5ub2RlSD1mLnBzdHlsZSgiaGVpZ2h0IikucGZWYWx1ZX10aGlzLnJlY2FsY3VsYXRlRWRnZVByb2plY3Rpb25zKG4pO2Zvcih2YXIgZz0wO2c8bi5sZW5ndGg7ZysrKXt2YXIgeT1uW2ddLHY9eS5fcHJpdmF0ZSx4PXYucnN0eWxlLGI9di5yc2NyYXRjaDt4LnNyY1g9Yi5hcnJvd1N0YXJ0WCx4LnNyY1k9Yi5hcnJvd1N0YXJ0WSx4LnRndFg9Yi5hcnJvd0VuZFgseC50Z3RZPWIuYXJyb3dFbmRZLHgubWlkWD1iLm1pZFgseC5taWRZPWIubWlkWSx4LmxhYmVsQW5nbGU9Yi5sYWJlbEFuZ2xlLHguc291cmNlTGFiZWxBbmdsZT1iLnNvdXJjZUxhYmVsQW5nbGUseC50YXJnZXRMYWJlbEFuZ2xlPWIudGFyZ2V0TGFiZWxBbmdsZX19fTtmQz17fTtmQy51cGRhdGVDYWNoZWRHcmFiYmVkRWxlcz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY2FjaGVkWlNvcnRlZEVsZXM7aWYodCl7dC5kcmFnPVtdLHQubm9uZHJhZz1bXTtmb3IodmFyIGU9W10scj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdLGk9bi5fcHJpdmF0ZS5yc2NyYXRjaDtuLmdyYWJiZWQoKSYmIW4uaXNQYXJlbnQoKT9lLnB1c2gobik6aS5pbkRyYWdMYXllcj90LmRyYWcucHVzaChuKTp0Lm5vbmRyYWcucHVzaChuKX1mb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTt0LmRyYWcucHVzaChuKX19fTtmQy5pbnZhbGlkYXRlQ2FjaGVkWlNvcnRlZEVsZXM9ZnVuY3Rpb24oKXt0aGlzLmNhY2hlZFpTb3J0ZWRFbGVzPW51bGx9O2ZDLmdldENhY2hlZFpTb3J0ZWRFbGVzPWZ1bmN0aW9uKHQpe2lmKHR8fCF0aGlzLmNhY2hlZFpTb3J0ZWRFbGVzKXt2YXIgZT10aGlzLmN5Lm11dGFibGVFbGVtZW50cygpLnRvQXJyYXkoKTtlLnNvcnQobDFlKSxlLmludGVyYWN0aXZlPWUuZmlsdGVyKGZ1bmN0aW9uKHIpe3JldHVybiByLmludGVyYWN0aXZlKCl9KSx0aGlzLmNhY2hlZFpTb3J0ZWRFbGVzPWUsdGhpcy51cGRhdGVDYWNoZWRHcmFiYmVkRWxlcygpfWVsc2UgZT10aGlzLmNhY2hlZFpTb3J0ZWRFbGVzO3JldHVybiBlfTtDMWU9e307W3IwLFk2LFlhLHY0LG5GLGV1LFMxZSxoQyxmQ10uZm9yRWFjaChmdW5jdGlvbih0KXtpcihDMWUsdCl9KTtBMWU9e307QTFlLmdldENhY2hlZEltYWdlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLGk9bi5pbWFnZUNhY2hlPW4uaW1hZ2VDYWNoZXx8e30sYT1pW3RdO2lmKGEpcmV0dXJuIGEuaW1hZ2UuY29tcGxldGV8fGEuaW1hZ2UuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsciksYS5pbWFnZTthPWlbdF09aVt0XXx8e307dmFyIHM9YS5pbWFnZT1uZXcgSW1hZ2U7cy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixyKSxzLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixmdW5jdGlvbigpe3MuZXJyb3I9ITB9KTt2YXIgbD0iZGF0YToiLHU9dC5zdWJzdHJpbmcoMCxsLmxlbmd0aCkudG9Mb3dlckNhc2UoKT09PWw7cmV0dXJuIHV8fChlPWU9PT0ibnVsbCI/bnVsbDplLHMuY3Jvc3NPcmlnaW49ZSkscy5zcmM9dCxzfTtmeT17fTtmeS5yZWdpc3RlckJpbmRpbmc9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9QXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGFyZ3VtZW50cyxbMV0pO2lmKEFycmF5LmlzQXJyYXkodCkpe2Zvcih2YXIgYT1bXSxzPTA7czx0Lmxlbmd0aDtzKyspe3ZhciBsPXRbc107aWYobCE9PXZvaWQgMCl7dmFyIHU9dGhpcy5iaW5kZXIobCk7YS5wdXNoKHUub24uYXBwbHkodSxpKSl9fXJldHVybiBhfXZhciB1PXRoaXMuYmluZGVyKHQpO3JldHVybiB1Lm9uLmFwcGx5KHUsaSl9O2Z5LmJpbmRlcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9ZS5jeS53aW5kb3coKSxuPXQ9PT1yfHx0PT09ci5kb2N1bWVudHx8dD09PXIuZG9jdW1lbnQuYm9keXx8YnFlKHQpO2lmKGUuc3VwcG9ydHNQYXNzaXZlRXZlbnRzPT1udWxsKXt2YXIgaT0hMTt0cnl7dmFyIGE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJwYXNzaXZlIix7Z2V0Om8oZnVuY3Rpb24oKXtyZXR1cm4gaT0hMCwhMH0sImdldCIpfSk7ci5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0IixudWxsLGEpfWNhdGNoe31lLnN1cHBvcnRzUGFzc2l2ZUV2ZW50cz1pfXZhciBzPW8oZnVuY3Rpb24odSxoLGYpe3ZhciBkPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIG4mJmUuc3VwcG9ydHNQYXNzaXZlRXZlbnRzJiYoZFsyXT17Y2FwdHVyZTpmPz8hMSxwYXNzaXZlOiExLG9uY2U6ITF9KSxlLmJpbmRpbmdzLnB1c2goe3RhcmdldDp0LGFyZ3M6ZH0pLCh0LmFkZEV2ZW50TGlzdGVuZXJ8fHQub24pLmFwcGx5KHQsZCksdGhpc30sIm9uIik7cmV0dXJue29uOnMsYWRkRXZlbnRMaXN0ZW5lcjpzLGFkZExpc3RlbmVyOnMsYmluZDpzfX07Znkubm9kZUlzRHJhZ2dhYmxlPWZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0LmlzTm9kZSgpJiYhdC5sb2NrZWQoKSYmdC5ncmFiYmFibGUoKX07Znkubm9kZUlzR3JhYmJhYmxlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm5vZGVJc0RyYWdnYWJsZSh0KSYmdC5pbnRlcmFjdGl2ZSgpfTtmeS5sb2FkPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXQuY3kud2luZG93KCkscj1vKGZ1bmN0aW9uKHEpe3JldHVybiBxLnNlbGVjdGVkKCl9LCJpc1NlbGVjdGVkIiksbj1vKGZ1bmN0aW9uKHEpe3ZhciBkZT1xLmdldFJvb3ROb2RlKCk7aWYoZGUmJmRlLm5vZGVUeXBlPT09MTEmJmRlLmhvc3QhPT12b2lkIDApcmV0dXJuIGRlfSwiZ2V0U2hhZG93Um9vdCIpLGk9byhmdW5jdGlvbihxLGRlLGllLG9lKXtxPT1udWxsJiYocT10LmN5KTtmb3IodmFyIFY9MDtWPGRlLmxlbmd0aDtWKyspe3ZhciBUZT1kZVtWXTtxLmVtaXQoe29yaWdpbmFsRXZlbnQ6aWUsdHlwZTpUZSxwb3NpdGlvbjpvZX0pfX0sInRyaWdnZXJFdmVudHMiKSxhPW8oZnVuY3Rpb24ocSl7cmV0dXJuIHEuc2hpZnRLZXl8fHEubWV0YUtleXx8cS5jdHJsS2V5fSwiaXNNdWx0U2VsS2V5RG93biIpLHM9byhmdW5jdGlvbihxLGRlKXt2YXIgaWU9ITA7aWYodC5jeS5oYXNDb21wb3VuZE5vZGVzKCkmJnEmJnEucGFubmFibGUoKSlmb3IodmFyIG9lPTA7ZGUmJm9lPGRlLmxlbmd0aDtvZSsrKXt2YXIgcT1kZVtvZV07aWYocS5pc05vZGUoKSYmcS5pc1BhcmVudCgpJiYhcS5wYW5uYWJsZSgpKXtpZT0hMTticmVha319ZWxzZSBpZT0hMDtyZXR1cm4gaWV9LCJhbGxvd1Bhbm5pbmdQYXNzdGhyb3VnaCIpLGw9byhmdW5jdGlvbihxKXtxWzBdLl9wcml2YXRlLmdyYWJiZWQ9ITB9LCJzZXRHcmFiYmVkIiksdT1vKGZ1bmN0aW9uKHEpe3FbMF0uX3ByaXZhdGUuZ3JhYmJlZD0hMX0sInNldEZyZWVkIiksaD1vKGZ1bmN0aW9uKHEpe3FbMF0uX3ByaXZhdGUucnNjcmF0Y2guaW5EcmFnTGF5ZXI9ITB9LCJzZXRJbkRyYWdMYXllciIpLGY9byhmdW5jdGlvbihxKXtxWzBdLl9wcml2YXRlLnJzY3JhdGNoLmluRHJhZ0xheWVyPSExfSwic2V0T3V0RHJhZ0xheWVyIiksZD1vKGZ1bmN0aW9uKHEpe3FbMF0uX3ByaXZhdGUucnNjcmF0Y2guaXNHcmFiVGFyZ2V0PSEwfSwic2V0R3JhYlRhcmdldCIpLHA9byhmdW5jdGlvbihxKXtxWzBdLl9wcml2YXRlLnJzY3JhdGNoLmlzR3JhYlRhcmdldD0hMX0sInJlbW92ZUdyYWJUYXJnZXQiKSxtPW8oZnVuY3Rpb24ocSxkZSl7dmFyIGllPWRlLmFkZFRvTGlzdCxvZT1pZS5oYXMocSk7IW9lJiZxLmdyYWJiYWJsZSgpJiYhcS5sb2NrZWQoKSYmKGllLm1lcmdlKHEpLGwocSkpfSwiYWRkVG9EcmFnTGlzdCIpLGc9byhmdW5jdGlvbihxLGRlKXtpZihxLmN5KCkuaGFzQ29tcG91bmROb2RlcygpJiYhKGRlLmluRHJhZ0xheWVyPT1udWxsJiZkZS5hZGRUb0xpc3Q9PW51bGwpKXt2YXIgaWU9cS5kZXNjZW5kYW50cygpO2RlLmluRHJhZ0xheWVyJiYoaWUuZm9yRWFjaChoKSxpZS5jb25uZWN0ZWRFZGdlcygpLmZvckVhY2goaCkpLGRlLmFkZFRvTGlzdCYmbShpZSxkZSl9fSwiYWRkRGVzY2VuZGFudHNUb0RyYWciKSx5PW8oZnVuY3Rpb24ocSxkZSl7ZGU9ZGV8fHt9O3ZhciBpZT1xLmN5KCkuaGFzQ29tcG91bmROb2RlcygpO2RlLmluRHJhZ0xheWVyJiYocS5mb3JFYWNoKGgpLHEubmVpZ2hib3Job29kKCkuc3RkRmlsdGVyKGZ1bmN0aW9uKG9lKXtyZXR1cm4haWV8fG9lLmlzRWRnZSgpfSkuZm9yRWFjaChoKSksZGUuYWRkVG9MaXN0JiZxLmZvckVhY2goZnVuY3Rpb24ob2Upe20ob2UsZGUpfSksZyhxLGRlKSxiKHEse2luRHJhZ0xheWVyOmRlLmluRHJhZ0xheWVyfSksdC51cGRhdGVDYWNoZWRHcmFiYmVkRWxlcygpfSwiYWRkTm9kZXNUb0RyYWciKSx2PXkseD1vKGZ1bmN0aW9uKHEpe3EmJih0LmdldENhY2hlZFpTb3J0ZWRFbGVzKCkuZm9yRWFjaChmdW5jdGlvbihkZSl7dShkZSksZihkZSkscChkZSl9KSx0LnVwZGF0ZUNhY2hlZEdyYWJiZWRFbGVzKCkpfSwiZnJlZURyYWdnZWRFbGVtZW50cyIpLGI9byhmdW5jdGlvbihxLGRlKXtpZighKGRlLmluRHJhZ0xheWVyPT1udWxsJiZkZS5hZGRUb0xpc3Q9PW51bGwpJiZxLmN5KCkuaGFzQ29tcG91bmROb2RlcygpKXt2YXIgaWU9cS5hbmNlc3RvcnMoKS5vcnBoYW5zKCk7aWYoIWllLnNhbWUocSkpe3ZhciBvZT1pZS5kZXNjZW5kYW50cygpLnNwYXduU2VsZigpLm1lcmdlKGllKS51bm1lcmdlKHEpLnVubWVyZ2UocS5kZXNjZW5kYW50cygpKSxWPW9lLmNvbm5lY3RlZEVkZ2VzKCk7ZGUuaW5EcmFnTGF5ZXImJihWLmZvckVhY2goaCksb2UuZm9yRWFjaChoKSksZGUuYWRkVG9MaXN0JiZvZS5mb3JFYWNoKGZ1bmN0aW9uKFRlKXttKFRlLGRlKX0pfX19LCJ1cGRhdGVBbmNlc3RvcnNJbkRyYWdMYXllciIpLFQ9byhmdW5jdGlvbigpe2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPW51bGwmJmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1ciE9bnVsbCYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyKCl9LCJibHVyQWN0aXZlRG9tRWxlbWVudCIpLFM9dHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXI8InUiLHc9dHlwZW9mIFJlc2l6ZU9ic2VydmVyPCJ1IjtTPyh0LnJlbW92ZU9ic2VydmVyPW5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKHhlKXtmb3IodmFyIHE9MDtxPHhlLmxlbmd0aDtxKyspe3ZhciBkZT14ZVtxXSxpZT1kZS5yZW1vdmVkTm9kZXM7aWYoaWUpZm9yKHZhciBvZT0wO29lPGllLmxlbmd0aDtvZSsrKXt2YXIgVj1pZVtvZV07aWYoVj09PXQuY29udGFpbmVyKXt0LmRlc3Ryb3koKTticmVha319fX0pLHQuY29udGFpbmVyLnBhcmVudE5vZGUmJnQucmVtb3ZlT2JzZXJ2ZXIub2JzZXJ2ZSh0LmNvbnRhaW5lci5wYXJlbnROb2RlLHtjaGlsZExpc3Q6ITB9KSk6dC5yZWdpc3RlckJpbmRpbmcodC5jb250YWluZXIsIkRPTU5vZGVSZW1vdmVkIixmdW5jdGlvbih4ZSl7dC5kZXN0cm95KCl9KTt2YXIgRT1wNChmdW5jdGlvbigpe3QuY3kucmVzaXplKCl9LDEwMCk7UyYmKHQuc3R5bGVPYnNlcnZlcj1uZXcgTXV0YXRpb25PYnNlcnZlcihFKSx0LnN0eWxlT2JzZXJ2ZXIub2JzZXJ2ZSh0LmNvbnRhaW5lcix7YXR0cmlidXRlczohMH0pKSx0LnJlZ2lzdGVyQmluZGluZyhlLCJyZXNpemUiLEUpLHcmJih0LnJlc2l6ZU9ic2VydmVyPW5ldyBSZXNpemVPYnNlcnZlcihFKSx0LnJlc2l6ZU9ic2VydmVyLm9ic2VydmUodC5jb250YWluZXIpKTt2YXIgXz1vKGZ1bmN0aW9uKHEsZGUpe2Zvcig7cSE9bnVsbDspZGUocSkscT1xLnBhcmVudE5vZGV9LCJmb3JFYWNoVXAiKSxDPW8oZnVuY3Rpb24oKXt0LmludmFsaWRhdGVDb250YWluZXJDbGllbnRDb29yZHNDYWNoZSgpfSwiaW52YWxpZGF0ZUNvb3JkcyIpO18odC5jb250YWluZXIsZnVuY3Rpb24oeGUpe3QucmVnaXN0ZXJCaW5kaW5nKHhlLCJ0cmFuc2l0aW9uZW5kIixDKSx0LnJlZ2lzdGVyQmluZGluZyh4ZSwiYW5pbWF0aW9uZW5kIixDKSx0LnJlZ2lzdGVyQmluZGluZyh4ZSwic2Nyb2xsIixDKX0pLHQucmVnaXN0ZXJCaW5kaW5nKHQuY29udGFpbmVyLCJjb250ZXh0bWVudSIsZnVuY3Rpb24oeGUpe3hlLnByZXZlbnREZWZhdWx0KCl9KTt2YXIgRD1vKGZ1bmN0aW9uKCl7cmV0dXJuIHQuc2VsZWN0aW9uWzRdIT09MH0sImluQm94U2VsZWN0aW9uIiksTz1vKGZ1bmN0aW9uKHEpe2Zvcih2YXIgZGU9dC5maW5kQ29udGFpbmVyQ2xpZW50Q29vcmRzKCksaWU9ZGVbMF0sb2U9ZGVbMV0sVj1kZVsyXSxUZT1kZVszXSxXPXEudG91Y2hlcz9xLnRvdWNoZXM6W3FdLHBlPSExLHZlPTA7dmU8Vy5sZW5ndGg7dmUrKyl7dmFyIFBlPVdbdmVdO2lmKGllPD1QZS5jbGllbnRYJiZQZS5jbGllbnRYPD1pZStWJiZvZTw9UGUuY2xpZW50WSYmUGUuY2xpZW50WTw9b2UrVGUpe3BlPSEwO2JyZWFrfX1pZighcGUpcmV0dXJuITE7Zm9yKHZhciBfZT10LmNvbnRhaW5lcixiZT1xLnRhcmdldCxWZT1iZS5wYXJlbnROb2RlLERlPSExO1ZlOyl7aWYoVmU9PT1fZSl7RGU9ITA7YnJlYWt9VmU9VmUucGFyZW50Tm9kZX1yZXR1cm4hIURlfSwiZXZlbnRJbkNvbnRhaW5lciIpO3QucmVnaXN0ZXJCaW5kaW5nKHQuY29udGFpbmVyLCJtb3VzZWRvd24iLG8oZnVuY3Rpb24ocSl7aWYoTyhxKSYmISh0LmhvdmVyRGF0YS53aGljaD09PTEmJnEud2hpY2ghPT0xKSl7cS5wcmV2ZW50RGVmYXVsdCgpLFQoKSx0LmhvdmVyRGF0YS5jYXB0dXJlPSEwLHQuaG92ZXJEYXRhLndoaWNoPXEud2hpY2g7dmFyIGRlPXQuY3ksaWU9W3EuY2xpZW50WCxxLmNsaWVudFldLG9lPXQucHJvamVjdEludG9WaWV3cG9ydChpZVswXSxpZVsxXSksVj10LnNlbGVjdGlvbixUZT10LmZpbmROZWFyZXN0RWxlbWVudHMob2VbMF0sb2VbMV0sITAsITEpLFc9VGVbMF0scGU9dC5kcmFnRGF0YS5wb3NzaWJsZURyYWdFbGVtZW50czt0LmhvdmVyRGF0YS5tZG93blBvcz1vZSx0LmhvdmVyRGF0YS5tZG93bkdQb3M9aWU7dmFyIHZlPW8oZnVuY3Rpb24oKXt0LmhvdmVyRGF0YS50YXBob2xkQ2FuY2VsbGVkPSExLGNsZWFyVGltZW91dCh0LmhvdmVyRGF0YS50YXBob2xkVGltZW91dCksdC5ob3ZlckRhdGEudGFwaG9sZFRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe2lmKCF0LmhvdmVyRGF0YS50YXBob2xkQ2FuY2VsbGVkKXt2YXIgcWU9dC5ob3ZlckRhdGEuZG93bjtxZT9xZS5lbWl0KHtvcmlnaW5hbEV2ZW50OnEsdHlwZToidGFwaG9sZCIscG9zaXRpb246e3g6b2VbMF0seTpvZVsxXX19KTpkZS5lbWl0KHtvcmlnaW5hbEV2ZW50OnEsdHlwZToidGFwaG9sZCIscG9zaXRpb246e3g6b2VbMF0seTpvZVsxXX19KX19LHQudGFwaG9sZER1cmF0aW9uKX0sImNoZWNrRm9yVGFwaG9sZCIpO2lmKHEud2hpY2g9PTMpe3QuaG92ZXJEYXRhLmN4dFN0YXJ0ZWQ9ITA7dmFyIFBlPXtvcmlnaW5hbEV2ZW50OnEsdHlwZToiY3h0dGFwc3RhcnQiLHBvc2l0aW9uOnt4Om9lWzBdLHk6b2VbMV19fTtXPyhXLmFjdGl2YXRlKCksVy5lbWl0KFBlKSx0LmhvdmVyRGF0YS5kb3duPVcpOmRlLmVtaXQoUGUpLHQuaG92ZXJEYXRhLmRvd25UaW1lPW5ldyBEYXRlKCkuZ2V0VGltZSgpLHQuaG92ZXJEYXRhLmN4dERyYWdnZWQ9ITF9ZWxzZSBpZihxLndoaWNoPT0xKXtXJiZXLmFjdGl2YXRlKCk7e2lmKFchPW51bGwmJnQubm9kZUlzR3JhYmJhYmxlKFcpKXt2YXIgX2U9byhmdW5jdGlvbihxZSl7cmV0dXJue29yaWdpbmFsRXZlbnQ6cSx0eXBlOnFlLHBvc2l0aW9uOnt4Om9lWzBdLHk6b2VbMV19fX0sIm1ha2VFdmVudCIpLGJlPW8oZnVuY3Rpb24ocWUpe3FlLmVtaXQoX2UoImdyYWIiKSl9LCJ0cmlnZ2VyR3JhYiIpO2lmKGQoVyksIVcuc2VsZWN0ZWQoKSlwZT10LmRyYWdEYXRhLnBvc3NpYmxlRHJhZ0VsZW1lbnRzPWRlLmNvbGxlY3Rpb24oKSx2KFcse2FkZFRvTGlzdDpwZX0pLFcuZW1pdChfZSgiZ3JhYm9uIikpLmVtaXQoX2UoImdyYWIiKSk7ZWxzZXtwZT10LmRyYWdEYXRhLnBvc3NpYmxlRHJhZ0VsZW1lbnRzPWRlLmNvbGxlY3Rpb24oKTt2YXIgVmU9ZGUuJChmdW5jdGlvbihEZSl7cmV0dXJuIERlLmlzTm9kZSgpJiZEZS5zZWxlY3RlZCgpJiZ0Lm5vZGVJc0dyYWJiYWJsZShEZSl9KTt5KFZlLHthZGRUb0xpc3Q6cGV9KSxXLmVtaXQoX2UoImdyYWJvbiIpKSxWZS5mb3JFYWNoKGJlKX10LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx0LnJlZHJhd0hpbnQoImRyYWciLCEwKX10LmhvdmVyRGF0YS5kb3duPVcsdC5ob3ZlckRhdGEuZG93bnM9VGUsdC5ob3ZlckRhdGEuZG93blRpbWU9bmV3IERhdGUoKS5nZXRUaW1lKCl9aShXLFsibW91c2Vkb3duIiwidGFwc3RhcnQiLCJ2bW91c2Vkb3duIl0scSx7eDpvZVswXSx5Om9lWzFdfSksVz09bnVsbD8oVls0XT0xLHQuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj17eDpvZVswXSx5Om9lWzFdfSx0LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLHQucmVkcmF3KCkpOlcucGFubmFibGUoKSYmKFZbNF09MSksdmUoKX1WWzBdPVZbMl09b2VbMF0sVlsxXT1WWzNdPW9lWzFdfX0sIm1vdXNlZG93bkhhbmRsZXIiKSwhMSk7dmFyIFI9bih0LmNvbnRhaW5lcik7dC5yZWdpc3RlckJpbmRpbmcoW2UsUl0sIm1vdXNlbW92ZSIsbyhmdW5jdGlvbihxKXt2YXIgZGU9dC5ob3ZlckRhdGEuY2FwdHVyZTtpZighKCFkZSYmIU8ocSkpKXt2YXIgaWU9ITEsb2U9dC5jeSxWPW9lLnpvb20oKSxUZT1bcS5jbGllbnRYLHEuY2xpZW50WV0sVz10LnByb2plY3RJbnRvVmlld3BvcnQoVGVbMF0sVGVbMV0pLHBlPXQuaG92ZXJEYXRhLm1kb3duUG9zLHZlPXQuaG92ZXJEYXRhLm1kb3duR1BvcyxQZT10LnNlbGVjdGlvbixfZT1udWxsOyF0LmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXMmJiF0LmhvdmVyRGF0YS5kcmFnZ2luZyYmIXQuaG92ZXJEYXRhLnNlbGVjdGluZyYmKF9lPXQuZmluZE5lYXJlc3RFbGVtZW50KFdbMF0sV1sxXSwhMCwhMSkpO3ZhciBiZT10LmhvdmVyRGF0YS5sYXN0LFZlPXQuaG92ZXJEYXRhLmRvd24sRGU9W1dbMF0tUGVbMl0sV1sxXS1QZVszXV0scWU9dC5kcmFnRGF0YS5wb3NzaWJsZURyYWdFbGVtZW50cyxhdDtpZih2ZSl7dmFyIFJ0PVRlWzBdLXZlWzBdLHN0PVJ0KlJ0LFVlPVRlWzFdLXZlWzFdLGN0PVVlKlVlLFdlPXN0K2N0O3QuaG92ZXJEYXRhLmlzT3ZlclRocmVzaG9sZERyYWc9YXQ9V2U+PXQuZGVza3RvcFRhcFRocmVzaG9sZDJ9dmFyIG90PWEocSk7YXQmJih0LmhvdmVyRGF0YS50YXBob2xkQ2FuY2VsbGVkPSEwKTt2YXIgWXQ9byhmdW5jdGlvbigpe3ZhciBrdD10LmhvdmVyRGF0YS5kcmFnRGVsdGE9dC5ob3ZlckRhdGEuZHJhZ0RlbHRhfHxbXTtrdC5sZW5ndGg9PT0wPyhrdC5wdXNoKERlWzBdKSxrdC5wdXNoKERlWzFdKSk6KGt0WzBdKz1EZVswXSxrdFsxXSs9RGVbMV0pfSwidXBkYXRlRHJhZ0RlbHRhIik7aWU9ITAsaShfZSxbIm1vdXNlbW92ZSIsInZtb3VzZW1vdmUiLCJ0YXBkcmFnIl0scSx7eDpXWzBdLHk6V1sxXX0pO3ZhciBUdD1vKGZ1bmN0aW9uKCl7dC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCx0LmhvdmVyRGF0YS5zZWxlY3Rpbmd8fG9lLmVtaXQoe29yaWdpbmFsRXZlbnQ6cSx0eXBlOiJib3hzdGFydCIscG9zaXRpb246e3g6V1swXSx5OldbMV19fSksUGVbNF09MSx0LmhvdmVyRGF0YS5zZWxlY3Rpbmc9ITAsdC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx0LnJlZHJhdygpfSwiZ29JbnRvQm94TW9kZSIpO2lmKHQuaG92ZXJEYXRhLndoaWNoPT09Myl7aWYoYXQpe3ZhciBNdD17b3JpZ2luYWxFdmVudDpxLHR5cGU6ImN4dGRyYWciLHBvc2l0aW9uOnt4OldbMF0seTpXWzFdfX07VmU/VmUuZW1pdChNdCk6b2UuZW1pdChNdCksdC5ob3ZlckRhdGEuY3h0RHJhZ2dlZD0hMCwoIXQuaG92ZXJEYXRhLmN4dE92ZXJ8fF9lIT09dC5ob3ZlckRhdGEuY3h0T3ZlcikmJih0LmhvdmVyRGF0YS5jeHRPdmVyJiZ0LmhvdmVyRGF0YS5jeHRPdmVyLmVtaXQoe29yaWdpbmFsRXZlbnQ6cSx0eXBlOiJjeHRkcmFnb3V0Iixwb3NpdGlvbjp7eDpXWzBdLHk6V1sxXX19KSx0LmhvdmVyRGF0YS5jeHRPdmVyPV9lLF9lJiZfZS5lbWl0KHtvcmlnaW5hbEV2ZW50OnEsdHlwZToiY3h0ZHJhZ292ZXIiLHBvc2l0aW9uOnt4OldbMF0seTpXWzFdfX0pKX19ZWxzZSBpZih0LmhvdmVyRGF0YS5kcmFnZ2luZyl7aWYoaWU9ITAsb2UucGFubmluZ0VuYWJsZWQoKSYmb2UudXNlclBhbm5pbmdFbmFibGVkKCkpe3ZhciBidDtpZih0LmhvdmVyRGF0YS5qdXN0U3RhcnRlZFBhbil7dmFyIHV0PXQuaG92ZXJEYXRhLm1kb3duUG9zO2J0PXt4OihXWzBdLXV0WzBdKSpWLHk6KFdbMV0tdXRbMV0pKlZ9LHQuaG92ZXJEYXRhLmp1c3RTdGFydGVkUGFuPSExfWVsc2UgYnQ9e3g6RGVbMF0qVix5OkRlWzFdKlZ9O29lLnBhbkJ5KGJ0KSxvZS5lbWl0KCJkcmFncGFuIiksdC5ob3ZlckRhdGEuZHJhZ2dlZD0hMH1XPXQucHJvamVjdEludG9WaWV3cG9ydChxLmNsaWVudFgscS5jbGllbnRZKX1lbHNlIGlmKFBlWzRdPT0xJiYoVmU9PW51bGx8fFZlLnBhbm5hYmxlKCkpKXtpZihhdCl7aWYoIXQuaG92ZXJEYXRhLmRyYWdnaW5nJiZvZS5ib3hTZWxlY3Rpb25FbmFibGVkKCkmJihvdHx8IW9lLnBhbm5pbmdFbmFibGVkKCl8fCFvZS51c2VyUGFubmluZ0VuYWJsZWQoKSkpVHQoKTtlbHNlIGlmKCF0LmhvdmVyRGF0YS5zZWxlY3RpbmcmJm9lLnBhbm5pbmdFbmFibGVkKCkmJm9lLnVzZXJQYW5uaW5nRW5hYmxlZCgpKXt2YXIgU3Q9cyhWZSx0LmhvdmVyRGF0YS5kb3ducyk7U3QmJih0LmhvdmVyRGF0YS5kcmFnZ2luZz0hMCx0LmhvdmVyRGF0YS5qdXN0U3RhcnRlZFBhbj0hMCxQZVs0XT0wLHQuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj1qMShwZSksdC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx0LnJlZHJhdygpKX1WZSYmVmUucGFubmFibGUoKSYmVmUuYWN0aXZlKCkmJlZlLnVuYWN0aXZhdGUoKX19ZWxzZXtpZihWZSYmVmUucGFubmFibGUoKSYmVmUuYWN0aXZlKCkmJlZlLnVuYWN0aXZhdGUoKSwoIVZlfHwhVmUuZ3JhYmJlZCgpKSYmX2UhPWJlJiYoYmUmJmkoYmUsWyJtb3VzZW91dCIsInRhcGRyYWdvdXQiXSxxLHt4OldbMF0seTpXWzFdfSksX2UmJmkoX2UsWyJtb3VzZW92ZXIiLCJ0YXBkcmFnb3ZlciJdLHEse3g6V1swXSx5OldbMV19KSx0LmhvdmVyRGF0YS5sYXN0PV9lKSxWZSlpZihhdCl7aWYob2UuYm94U2VsZWN0aW9uRW5hYmxlZCgpJiZvdClWZSYmVmUuZ3JhYmJlZCgpJiYoeChxZSksVmUuZW1pdCgiZnJlZW9uIikscWUuZW1pdCgiZnJlZSIpLHQuZHJhZ0RhdGEuZGlkRHJhZyYmKFZlLmVtaXQoImRyYWdmcmVlb24iKSxxZS5lbWl0KCJkcmFnZnJlZSIpKSksVHQoKTtlbHNlIGlmKFZlJiZWZS5ncmFiYmVkKCkmJnQubm9kZUlzRHJhZ2dhYmxlKFZlKSl7dmFyIGZ0PSF0LmRyYWdEYXRhLmRpZERyYWc7ZnQmJnQucmVkcmF3SGludCgiZWxlcyIsITApLHQuZHJhZ0RhdGEuZGlkRHJhZz0hMCx0LmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXN8fHkocWUse2luRHJhZ0xheWVyOiEwfSk7dmFyIHZ0PXt4OjAseTowfTtpZihfdChEZVswXSkmJl90KERlWzFdKSYmKHZ0LngrPURlWzBdLHZ0LnkrPURlWzFdLGZ0KSl7dmFyIG50PXQuaG92ZXJEYXRhLmRyYWdEZWx0YTtudCYmX3QobnRbMF0pJiZfdChudFsxXSkmJih2dC54Kz1udFswXSx2dC55Kz1udFsxXSl9dC5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzPSEwLHFlLnNpbGVudFNoaWZ0KHZ0KS5lbWl0KCJwb3NpdGlvbiBkcmFnIiksdC5yZWRyYXdIaW50KCJkcmFnIiwhMCksdC5yZWRyYXcoKX19ZWxzZSBZdCgpO2llPSEwfWlmKFBlWzJdPVdbMF0sUGVbM109V1sxXSxpZSlyZXR1cm4gcS5zdG9wUHJvcGFnYXRpb24mJnEuc3RvcFByb3BhZ2F0aW9uKCkscS5wcmV2ZW50RGVmYXVsdCYmcS5wcmV2ZW50RGVmYXVsdCgpLCExfX0sIm1vdXNlbW92ZUhhbmRsZXIiKSwhMSk7dmFyIGssTCxBO3QucmVnaXN0ZXJCaW5kaW5nKGUsIm1vdXNldXAiLG8oZnVuY3Rpb24ocSl7aWYoISh0LmhvdmVyRGF0YS53aGljaD09PTEmJnEud2hpY2ghPT0xJiZ0LmhvdmVyRGF0YS5jYXB0dXJlKSl7dmFyIGRlPXQuaG92ZXJEYXRhLmNhcHR1cmU7aWYoZGUpe3QuaG92ZXJEYXRhLmNhcHR1cmU9ITE7dmFyIGllPXQuY3ksb2U9dC5wcm9qZWN0SW50b1ZpZXdwb3J0KHEuY2xpZW50WCxxLmNsaWVudFkpLFY9dC5zZWxlY3Rpb24sVGU9dC5maW5kTmVhcmVzdEVsZW1lbnQob2VbMF0sb2VbMV0sITAsITEpLFc9dC5kcmFnRGF0YS5wb3NzaWJsZURyYWdFbGVtZW50cyxwZT10LmhvdmVyRGF0YS5kb3duLHZlPWEocSk7aWYodC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uJiYodC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx0LnJlZHJhdygpKSx0LmhvdmVyRGF0YS50YXBob2xkQ2FuY2VsbGVkPSEwLHQuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAscGUmJnBlLnVuYWN0aXZhdGUoKSx0LmhvdmVyRGF0YS53aGljaD09PTMpe3ZhciBQZT17b3JpZ2luYWxFdmVudDpxLHR5cGU6ImN4dHRhcGVuZCIscG9zaXRpb246e3g6b2VbMF0seTpvZVsxXX19O2lmKHBlP3BlLmVtaXQoUGUpOmllLmVtaXQoUGUpLCF0LmhvdmVyRGF0YS5jeHREcmFnZ2VkKXt2YXIgX2U9e29yaWdpbmFsRXZlbnQ6cSx0eXBlOiJjeHR0YXAiLHBvc2l0aW9uOnt4Om9lWzBdLHk6b2VbMV19fTtwZT9wZS5lbWl0KF9lKTppZS5lbWl0KF9lKX10LmhvdmVyRGF0YS5jeHREcmFnZ2VkPSExLHQuaG92ZXJEYXRhLndoaWNoPW51bGx9ZWxzZSBpZih0LmhvdmVyRGF0YS53aGljaD09PTEpe2lmKGkoVGUsWyJtb3VzZXVwIiwidGFwZW5kIiwidm1vdXNldXAiXSxxLHt4Om9lWzBdLHk6b2VbMV19KSwhdC5kcmFnRGF0YS5kaWREcmFnJiYhdC5ob3ZlckRhdGEuZHJhZ2dlZCYmIXQuaG92ZXJEYXRhLnNlbGVjdGluZyYmIXQuaG92ZXJEYXRhLmlzT3ZlclRocmVzaG9sZERyYWcmJihpKHBlLFsiY2xpY2siLCJ0YXAiLCJ2Y2xpY2siXSxxLHt4Om9lWzBdLHk6b2VbMV19KSxMPSExLHEudGltZVN0YW1wLUE8PWllLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUoKT8oayYmY2xlYXJUaW1lb3V0KGspLEw9ITAsQT1udWxsLGkocGUsWyJkYmxjbGljayIsImRibHRhcCIsInZkYmxjbGljayJdLHEse3g6b2VbMF0seTpvZVsxXX0pKTooaz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7THx8aShwZSxbIm9uZWNsaWNrIiwib25ldGFwIiwidm9uZWNsaWNrIl0scSx7eDpvZVswXSx5Om9lWzFdfSl9LGllLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUoKSksQT1xLnRpbWVTdGFtcCkpLHBlPT1udWxsJiYhdC5kcmFnRGF0YS5kaWREcmFnJiYhdC5ob3ZlckRhdGEuc2VsZWN0aW5nJiYhdC5ob3ZlckRhdGEuZHJhZ2dlZCYmIWEocSkmJihpZS4kKHIpLnVuc2VsZWN0KFsidGFwdW5zZWxlY3QiXSksVy5sZW5ndGg+MCYmdC5yZWRyYXdIaW50KCJlbGVzIiwhMCksdC5kcmFnRGF0YS5wb3NzaWJsZURyYWdFbGVtZW50cz1XPWllLmNvbGxlY3Rpb24oKSksVGU9PXBlJiYhdC5kcmFnRGF0YS5kaWREcmFnJiYhdC5ob3ZlckRhdGEuc2VsZWN0aW5nJiZUZSE9bnVsbCYmVGUuX3ByaXZhdGUuc2VsZWN0YWJsZSYmKHQuaG92ZXJEYXRhLmRyYWdnaW5nfHwoaWUuc2VsZWN0aW9uVHlwZSgpPT09ImFkZGl0aXZlInx8dmU/VGUuc2VsZWN0ZWQoKT9UZS51bnNlbGVjdChbInRhcHVuc2VsZWN0Il0pOlRlLnNlbGVjdChbInRhcHNlbGVjdCJdKTp2ZXx8KGllLiQocikudW5tZXJnZShUZSkudW5zZWxlY3QoWyJ0YXB1bnNlbGVjdCJdKSxUZS5zZWxlY3QoWyJ0YXBzZWxlY3QiXSkpKSx0LnJlZHJhd0hpbnQoImVsZXMiLCEwKSksdC5ob3ZlckRhdGEuc2VsZWN0aW5nKXt2YXIgYmU9aWUuY29sbGVjdGlvbih0LmdldEFsbEluQm94KFZbMF0sVlsxXSxWWzJdLFZbM10pKTt0LnJlZHJhd0hpbnQoInNlbGVjdCIsITApLGJlLmxlbmd0aD4wJiZ0LnJlZHJhd0hpbnQoImVsZXMiLCEwKSxpZS5lbWl0KHt0eXBlOiJib3hlbmQiLG9yaWdpbmFsRXZlbnQ6cSxwb3NpdGlvbjp7eDpvZVswXSx5Om9lWzFdfX0pO3ZhciBWZT1vKGZ1bmN0aW9uKGF0KXtyZXR1cm4gYXQuc2VsZWN0YWJsZSgpJiYhYXQuc2VsZWN0ZWQoKX0sImVsZVdvdWxkQmVTZWxlY3RlZCIpO2llLnNlbGVjdGlvblR5cGUoKT09PSJhZGRpdGl2ZSJ8fHZlfHxpZS4kKHIpLnVubWVyZ2UoYmUpLnVuc2VsZWN0KCksYmUuZW1pdCgiYm94Iikuc3RkRmlsdGVyKFZlKS5zZWxlY3QoKS5lbWl0KCJib3hzZWxlY3QiKSx0LnJlZHJhdygpfWlmKHQuaG92ZXJEYXRhLmRyYWdnaW5nJiYodC5ob3ZlckRhdGEuZHJhZ2dpbmc9ITEsdC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx0LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx0LnJlZHJhdygpKSwhVls0XSl7dC5yZWRyYXdIaW50KCJkcmFnIiwhMCksdC5yZWRyYXdIaW50KCJlbGVzIiwhMCk7dmFyIERlPXBlJiZwZS5ncmFiYmVkKCk7eChXKSxEZSYmKHBlLmVtaXQoImZyZWVvbiIpLFcuZW1pdCgiZnJlZSIpLHQuZHJhZ0RhdGEuZGlkRHJhZyYmKHBlLmVtaXQoImRyYWdmcmVlb24iKSxXLmVtaXQoImRyYWdmcmVlIikpKX19Vls0XT0wLHQuaG92ZXJEYXRhLmRvd249bnVsbCx0LmhvdmVyRGF0YS5jeHRTdGFydGVkPSExLHQuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcz0hMSx0LmhvdmVyRGF0YS5zZWxlY3Rpbmc9ITEsdC5ob3ZlckRhdGEuaXNPdmVyVGhyZXNob2xkRHJhZz0hMSx0LmRyYWdEYXRhLmRpZERyYWc9ITEsdC5ob3ZlckRhdGEuZHJhZ2dlZD0hMSx0LmhvdmVyRGF0YS5kcmFnRGVsdGE9W10sdC5ob3ZlckRhdGEubWRvd25Qb3M9bnVsbCx0LmhvdmVyRGF0YS5tZG93bkdQb3M9bnVsbCx0LmhvdmVyRGF0YS53aGljaD1udWxsfX19LCJtb3VzZXVwSGFuZGxlciIpLCExKTt2YXIgST1vKGZ1bmN0aW9uKHEpe2lmKCF0LnNjcm9sbGluZ1BhZ2Upe3ZhciBkZT10LmN5LGllPWRlLnpvb20oKSxvZT1kZS5wYW4oKSxWPXQucHJvamVjdEludG9WaWV3cG9ydChxLmNsaWVudFgscS5jbGllbnRZKSxUZT1bVlswXSppZStvZS54LFZbMV0qaWUrb2UueV07aWYodC5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzfHx0LmhvdmVyRGF0YS5kcmFnZ2luZ3x8dC5ob3ZlckRhdGEuY3h0U3RhcnRlZHx8RCgpKXtxLnByZXZlbnREZWZhdWx0KCk7cmV0dXJufWlmKGRlLnBhbm5pbmdFbmFibGVkKCkmJmRlLnVzZXJQYW5uaW5nRW5hYmxlZCgpJiZkZS56b29taW5nRW5hYmxlZCgpJiZkZS51c2VyWm9vbWluZ0VuYWJsZWQoKSl7cS5wcmV2ZW50RGVmYXVsdCgpLHQuZGF0YS53aGVlbFpvb21pbmc9ITAsY2xlYXJUaW1lb3V0KHQuZGF0YS53aGVlbFRpbWVvdXQpLHQuZGF0YS53aGVlbFRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe3QuZGF0YS53aGVlbFpvb21pbmc9ITEsdC5yZWRyYXdIaW50KCJlbGVzIiwhMCksdC5yZWRyYXcoKX0sMTUwKTt2YXIgVztxLmRlbHRhWSE9bnVsbD9XPXEuZGVsdGFZLy0yNTA6cS53aGVlbERlbHRhWSE9bnVsbD9XPXEud2hlZWxEZWx0YVkvMWUzOlc9cS53aGVlbERlbHRhLzFlMyxXPVcqdC53aGVlbFNlbnNpdGl2aXR5O3ZhciBwZT1xLmRlbHRhTW9kZT09PTE7cGUmJihXKj0zMyk7dmFyIHZlPWRlLnpvb20oKSpNYXRoLnBvdygxMCxXKTtxLnR5cGU9PT0iZ2VzdHVyZWNoYW5nZSImJih2ZT10Lmdlc3R1cmVTdGFydFpvb20qcS5zY2FsZSksZGUuem9vbSh7bGV2ZWw6dmUscmVuZGVyZWRQb3NpdGlvbjp7eDpUZVswXSx5OlRlWzFdfX0pLGRlLmVtaXQocS50eXBlPT09Imdlc3R1cmVjaGFuZ2UiPyJwaW5jaHpvb20iOiJzY3JvbGx6b29tIil9fX0sIndoZWVsSGFuZGxlciIpO3QucmVnaXN0ZXJCaW5kaW5nKHQuY29udGFpbmVyLCJ3aGVlbCIsSSwhMCksdC5yZWdpc3RlckJpbmRpbmcoZSwic2Nyb2xsIixvKGZ1bmN0aW9uKHEpe3Quc2Nyb2xsaW5nUGFnZT0hMCxjbGVhclRpbWVvdXQodC5zY3JvbGxpbmdQYWdlVGltZW91dCksdC5zY3JvbGxpbmdQYWdlVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC5zY3JvbGxpbmdQYWdlPSExfSwyNTApfSwic2Nyb2xsSGFuZGxlciIpLCEwKSx0LnJlZ2lzdGVyQmluZGluZyh0LmNvbnRhaW5lciwiZ2VzdHVyZXN0YXJ0IixvKGZ1bmN0aW9uKHEpe3QuZ2VzdHVyZVN0YXJ0Wm9vbT10LmN5Lnpvb20oKSx0Lmhhc1RvdWNoU3RhcnRlZHx8cS5wcmV2ZW50RGVmYXVsdCgpfSwiZ2VzdHVyZVN0YXJ0SGFuZGxlciIpLCEwKSx0LnJlZ2lzdGVyQmluZGluZyh0LmNvbnRhaW5lciwiZ2VzdHVyZWNoYW5nZSIsZnVuY3Rpb24oeGUpe3QuaGFzVG91Y2hTdGFydGVkfHxJKHhlKX0sITApLHQucmVnaXN0ZXJCaW5kaW5nKHQuY29udGFpbmVyLCJtb3VzZW91dCIsbyhmdW5jdGlvbihxKXt2YXIgZGU9dC5wcm9qZWN0SW50b1ZpZXdwb3J0KHEuY2xpZW50WCxxLmNsaWVudFkpO3QuY3kuZW1pdCh7b3JpZ2luYWxFdmVudDpxLHR5cGU6Im1vdXNlb3V0Iixwb3NpdGlvbjp7eDpkZVswXSx5OmRlWzFdfX0pfSwibW91c2VPdXRIYW5kbGVyIiksITEpLHQucmVnaXN0ZXJCaW5kaW5nKHQuY29udGFpbmVyLCJtb3VzZW92ZXIiLG8oZnVuY3Rpb24ocSl7dmFyIGRlPXQucHJvamVjdEludG9WaWV3cG9ydChxLmNsaWVudFgscS5jbGllbnRZKTt0LmN5LmVtaXQoe29yaWdpbmFsRXZlbnQ6cSx0eXBlOiJtb3VzZW92ZXIiLHBvc2l0aW9uOnt4OmRlWzBdLHk6ZGVbMV19fSl9LCJtb3VzZU92ZXJIYW5kbGVyIiksITEpO3ZhciBNLFAsQixGLHosJCxVLEssZWUsWSxjZSxaLHVlLFE9byhmdW5jdGlvbihxLGRlLGllLG9lKXtyZXR1cm4gTWF0aC5zcXJ0KChpZS1xKSooaWUtcSkrKG9lLWRlKSoob2UtZGUpKX0sImRpc3RhbmNlIiksaj1vKGZ1bmN0aW9uKHEsZGUsaWUsb2Upe3JldHVybihpZS1xKSooaWUtcSkrKG9lLWRlKSoob2UtZGUpfSwiZGlzdGFuY2VTcSIpLG5lO3QucmVnaXN0ZXJCaW5kaW5nKHQuY29udGFpbmVyLCJ0b3VjaHN0YXJ0IixuZT1vKGZ1bmN0aW9uKHEpe2lmKHQuaGFzVG91Y2hTdGFydGVkPSEwLCEhTyhxKSl7VCgpLHQudG91Y2hEYXRhLmNhcHR1cmU9ITAsdC5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMDt2YXIgZGU9dC5jeSxpZT10LnRvdWNoRGF0YS5ub3csb2U9dC50b3VjaERhdGEuZWFybGllcjtpZihxLnRvdWNoZXNbMF0pe3ZhciBWPXQucHJvamVjdEludG9WaWV3cG9ydChxLnRvdWNoZXNbMF0uY2xpZW50WCxxLnRvdWNoZXNbMF0uY2xpZW50WSk7aWVbMF09VlswXSxpZVsxXT1WWzFdfWlmKHEudG91Y2hlc1sxXSl7dmFyIFY9dC5wcm9qZWN0SW50b1ZpZXdwb3J0KHEudG91Y2hlc1sxXS5jbGllbnRYLHEudG91Y2hlc1sxXS5jbGllbnRZKTtpZVsyXT1WWzBdLGllWzNdPVZbMV19aWYocS50b3VjaGVzWzJdKXt2YXIgVj10LnByb2plY3RJbnRvVmlld3BvcnQocS50b3VjaGVzWzJdLmNsaWVudFgscS50b3VjaGVzWzJdLmNsaWVudFkpO2llWzRdPVZbMF0saWVbNV09VlsxXX1pZihxLnRvdWNoZXNbMV0pe3QudG91Y2hEYXRhLnNpbmdsZVRvdWNoTW92ZWQ9ITAseCh0LmRyYWdEYXRhLnRvdWNoRHJhZ0VsZXMpO3ZhciBUZT10LmZpbmRDb250YWluZXJDbGllbnRDb29yZHMoKTtlZT1UZVswXSxZPVRlWzFdLGNlPVRlWzJdLFo9VGVbM10sTT1xLnRvdWNoZXNbMF0uY2xpZW50WC1lZSxQPXEudG91Y2hlc1swXS5jbGllbnRZLVksQj1xLnRvdWNoZXNbMV0uY2xpZW50WC1lZSxGPXEudG91Y2hlc1sxXS5jbGllbnRZLVksdWU9MDw9TSYmTTw9Y2UmJjA8PUImJkI8PWNlJiYwPD1QJiZQPD1aJiYwPD1GJiZGPD1aO3ZhciBXPWRlLnBhbigpLHBlPWRlLnpvb20oKTt6PVEoTSxQLEIsRiksJD1qKE0sUCxCLEYpLFU9WyhNK0IpLzIsKFArRikvMl0sSz1bKFVbMF0tVy54KS9wZSwoVVsxXS1XLnkpL3BlXTt2YXIgdmU9MjAwLFBlPXZlKnZlO2lmKCQ8UGUmJiFxLnRvdWNoZXNbMl0pe3ZhciBfZT10LmZpbmROZWFyZXN0RWxlbWVudChpZVswXSxpZVsxXSwhMCwhMCksYmU9dC5maW5kTmVhcmVzdEVsZW1lbnQoaWVbMl0saWVbM10sITAsITApO19lJiZfZS5pc05vZGUoKT8oX2UuYWN0aXZhdGUoKS5lbWl0KHtvcmlnaW5hbEV2ZW50OnEsdHlwZToiY3h0dGFwc3RhcnQiLHBvc2l0aW9uOnt4OmllWzBdLHk6aWVbMV19fSksdC50b3VjaERhdGEuc3RhcnQ9X2UpOmJlJiZiZS5pc05vZGUoKT8oYmUuYWN0aXZhdGUoKS5lbWl0KHtvcmlnaW5hbEV2ZW50OnEsdHlwZToiY3h0dGFwc3RhcnQiLHBvc2l0aW9uOnt4OmllWzBdLHk6aWVbMV19fSksdC50b3VjaERhdGEuc3RhcnQ9YmUpOmRlLmVtaXQoe29yaWdpbmFsRXZlbnQ6cSx0eXBlOiJjeHR0YXBzdGFydCIscG9zaXRpb246e3g6aWVbMF0seTppZVsxXX19KSx0LnRvdWNoRGF0YS5zdGFydCYmKHQudG91Y2hEYXRhLnN0YXJ0Ll9wcml2YXRlLmdyYWJiZWQ9ITEpLHQudG91Y2hEYXRhLmN4dD0hMCx0LnRvdWNoRGF0YS5jeHREcmFnZ2VkPSExLHQuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAsdC5yZWRyYXcoKTtyZXR1cm59fWlmKHEudG91Y2hlc1syXSlkZS5ib3hTZWxlY3Rpb25FbmFibGVkKCkmJnEucHJldmVudERlZmF1bHQoKTtlbHNlIGlmKCFxLnRvdWNoZXNbMV0pe2lmKHEudG91Y2hlc1swXSl7dmFyIFZlPXQuZmluZE5lYXJlc3RFbGVtZW50cyhpZVswXSxpZVsxXSwhMCwhMCksRGU9VmVbMF07aWYoRGUhPW51bGwmJihEZS5hY3RpdmF0ZSgpLHQudG91Y2hEYXRhLnN0YXJ0PURlLHQudG91Y2hEYXRhLnN0YXJ0cz1WZSx0Lm5vZGVJc0dyYWJiYWJsZShEZSkpKXt2YXIgcWU9dC5kcmFnRGF0YS50b3VjaERyYWdFbGVzPWRlLmNvbGxlY3Rpb24oKSxhdD1udWxsO3QucmVkcmF3SGludCgiZWxlcyIsITApLHQucmVkcmF3SGludCgiZHJhZyIsITApLERlLnNlbGVjdGVkKCk/KGF0PWRlLiQoZnVuY3Rpb24oV2Upe3JldHVybiBXZS5zZWxlY3RlZCgpJiZ0Lm5vZGVJc0dyYWJiYWJsZShXZSl9KSx5KGF0LHthZGRUb0xpc3Q6cWV9KSk6dihEZSx7YWRkVG9MaXN0OnFlfSksZChEZSk7dmFyIFJ0PW8oZnVuY3Rpb24ob3Qpe3JldHVybntvcmlnaW5hbEV2ZW50OnEsdHlwZTpvdCxwb3NpdGlvbjp7eDppZVswXSx5OmllWzFdfX19LCJtYWtlRXZlbnQiKTtEZS5lbWl0KFJ0KCJncmFib24iKSksYXQ/YXQuZm9yRWFjaChmdW5jdGlvbihXZSl7V2UuZW1pdChSdCgiZ3JhYiIpKX0pOkRlLmVtaXQoUnQoImdyYWIiKSl9aShEZSxbInRvdWNoc3RhcnQiLCJ0YXBzdGFydCIsInZtb3VzZWRvd24iXSxxLHt4OmllWzBdLHk6aWVbMV19KSxEZT09bnVsbCYmKHQuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj17eDpWWzBdLHk6VlsxXX0sdC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx0LnJlZHJhdygpKSx0LnRvdWNoRGF0YS5zaW5nbGVUb3VjaE1vdmVkPSExLHQudG91Y2hEYXRhLnNpbmdsZVRvdWNoU3RhcnRUaW1lPStuZXcgRGF0ZSxjbGVhclRpbWVvdXQodC50b3VjaERhdGEudGFwaG9sZFRpbWVvdXQpLHQudG91Y2hEYXRhLnRhcGhvbGRUaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXt0LnRvdWNoRGF0YS5zaW5nbGVUb3VjaE1vdmVkPT09ITEmJiF0LnBpbmNoaW5nJiYhdC50b3VjaERhdGEuc2VsZWN0aW5nJiZpKHQudG91Y2hEYXRhLnN0YXJ0LFsidGFwaG9sZCJdLHEse3g6aWVbMF0seTppZVsxXX0pfSx0LnRhcGhvbGREdXJhdGlvbil9fWlmKHEudG91Y2hlcy5sZW5ndGg+PTEpe2Zvcih2YXIgc3Q9dC50b3VjaERhdGEuc3RhcnRQb3NpdGlvbj1bbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLFVlPTA7VWU8aWUubGVuZ3RoO1VlKyspc3RbVWVdPW9lW1VlXT1pZVtVZV07dmFyIGN0PXEudG91Y2hlc1swXTt0LnRvdWNoRGF0YS5zdGFydEdQb3NpdGlvbj1bY3QuY2xpZW50WCxjdC5jbGllbnRZXX19fSwidG91Y2hzdGFydEhhbmRsZXIiKSwhMSk7dmFyIHRlO3QucmVnaXN0ZXJCaW5kaW5nKGUsInRvdWNobW92ZSIsdGU9byhmdW5jdGlvbihxKXt2YXIgZGU9dC50b3VjaERhdGEuY2FwdHVyZTtpZighKCFkZSYmIU8ocSkpKXt2YXIgaWU9dC5zZWxlY3Rpb24sb2U9dC5jeSxWPXQudG91Y2hEYXRhLm5vdyxUZT10LnRvdWNoRGF0YS5lYXJsaWVyLFc9b2Uuem9vbSgpO2lmKHEudG91Y2hlc1swXSl7dmFyIHBlPXQucHJvamVjdEludG9WaWV3cG9ydChxLnRvdWNoZXNbMF0uY2xpZW50WCxxLnRvdWNoZXNbMF0uY2xpZW50WSk7VlswXT1wZVswXSxWWzFdPXBlWzFdfWlmKHEudG91Y2hlc1sxXSl7dmFyIHBlPXQucHJvamVjdEludG9WaWV3cG9ydChxLnRvdWNoZXNbMV0uY2xpZW50WCxxLnRvdWNoZXNbMV0uY2xpZW50WSk7VlsyXT1wZVswXSxWWzNdPXBlWzFdfWlmKHEudG91Y2hlc1syXSl7dmFyIHBlPXQucHJvamVjdEludG9WaWV3cG9ydChxLnRvdWNoZXNbMl0uY2xpZW50WCxxLnRvdWNoZXNbMl0uY2xpZW50WSk7Vls0XT1wZVswXSxWWzVdPXBlWzFdfXZhciB2ZT10LnRvdWNoRGF0YS5zdGFydEdQb3NpdGlvbixQZTtpZihkZSYmcS50b3VjaGVzWzBdJiZ2ZSl7Zm9yKHZhciBfZT1bXSxiZT0wO2JlPFYubGVuZ3RoO2JlKyspX2VbYmVdPVZbYmVdLVRlW2JlXTt2YXIgVmU9cS50b3VjaGVzWzBdLmNsaWVudFgtdmVbMF0sRGU9VmUqVmUscWU9cS50b3VjaGVzWzBdLmNsaWVudFktdmVbMV0sYXQ9cWUqcWUsUnQ9RGUrYXQ7UGU9UnQ+PXQudG91Y2hUYXBUaHJlc2hvbGQyfWlmKGRlJiZ0LnRvdWNoRGF0YS5jeHQpe3EucHJldmVudERlZmF1bHQoKTt2YXIgc3Q9cS50b3VjaGVzWzBdLmNsaWVudFgtZWUsVWU9cS50b3VjaGVzWzBdLmNsaWVudFktWSxjdD1xLnRvdWNoZXNbMV0uY2xpZW50WC1lZSxXZT1xLnRvdWNoZXNbMV0uY2xpZW50WS1ZLG90PWooc3QsVWUsY3QsV2UpLFl0PW90LyQsVHQ9MTUwLE10PVR0KlR0LGJ0PTEuNSx1dD1idCpidDtpZihZdD49dXR8fG90Pj1NdCl7dC50b3VjaERhdGEuY3h0PSExLHQuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAsdC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKTt2YXIgU3Q9e29yaWdpbmFsRXZlbnQ6cSx0eXBlOiJjeHR0YXBlbmQiLHBvc2l0aW9uOnt4OlZbMF0seTpWWzFdfX07dC50b3VjaERhdGEuc3RhcnQ/KHQudG91Y2hEYXRhLnN0YXJ0LnVuYWN0aXZhdGUoKS5lbWl0KFN0KSx0LnRvdWNoRGF0YS5zdGFydD1udWxsKTpvZS5lbWl0KFN0KX19aWYoZGUmJnQudG91Y2hEYXRhLmN4dCl7dmFyIFN0PXtvcmlnaW5hbEV2ZW50OnEsdHlwZToiY3h0ZHJhZyIscG9zaXRpb246e3g6VlswXSx5OlZbMV19fTt0LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249dm9pZCAwLHQucmVkcmF3SGludCgic2VsZWN0IiwhMCksdC50b3VjaERhdGEuc3RhcnQ/dC50b3VjaERhdGEuc3RhcnQuZW1pdChTdCk6b2UuZW1pdChTdCksdC50b3VjaERhdGEuc3RhcnQmJih0LnRvdWNoRGF0YS5zdGFydC5fcHJpdmF0ZS5ncmFiYmVkPSExKSx0LnRvdWNoRGF0YS5jeHREcmFnZ2VkPSEwO3ZhciBmdD10LmZpbmROZWFyZXN0RWxlbWVudChWWzBdLFZbMV0sITAsITApOyghdC50b3VjaERhdGEuY3h0T3Zlcnx8ZnQhPT10LnRvdWNoRGF0YS5jeHRPdmVyKSYmKHQudG91Y2hEYXRhLmN4dE92ZXImJnQudG91Y2hEYXRhLmN4dE92ZXIuZW1pdCh7b3JpZ2luYWxFdmVudDpxLHR5cGU6ImN4dGRyYWdvdXQiLHBvc2l0aW9uOnt4OlZbMF0seTpWWzFdfX0pLHQudG91Y2hEYXRhLmN4dE92ZXI9ZnQsZnQmJmZ0LmVtaXQoe29yaWdpbmFsRXZlbnQ6cSx0eXBlOiJjeHRkcmFnb3ZlciIscG9zaXRpb246e3g6VlswXSx5OlZbMV19fSkpfWVsc2UgaWYoZGUmJnEudG91Y2hlc1syXSYmb2UuYm94U2VsZWN0aW9uRW5hYmxlZCgpKXEucHJldmVudERlZmF1bHQoKSx0LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249dm9pZCAwLHRoaXMubGFzdFRocmVlVG91Y2g9K25ldyBEYXRlLHQudG91Y2hEYXRhLnNlbGVjdGluZ3x8b2UuZW1pdCh7b3JpZ2luYWxFdmVudDpxLHR5cGU6ImJveHN0YXJ0Iixwb3NpdGlvbjp7eDpWWzBdLHk6VlsxXX19KSx0LnRvdWNoRGF0YS5zZWxlY3Rpbmc9ITAsdC50b3VjaERhdGEuZGlkU2VsZWN0PSEwLGllWzRdPTEsIWllfHxpZS5sZW5ndGg9PT0wfHxpZVswXT09PXZvaWQgMD8oaWVbMF09KFZbMF0rVlsyXStWWzRdKS8zLGllWzFdPShWWzFdK1ZbM10rVls1XSkvMyxpZVsyXT0oVlswXStWWzJdK1ZbNF0pLzMrMSxpZVszXT0oVlsxXStWWzNdK1ZbNV0pLzMrMSk6KGllWzJdPShWWzBdK1ZbMl0rVls0XSkvMyxpZVszXT0oVlsxXStWWzNdK1ZbNV0pLzMpLHQucmVkcmF3SGludCgic2VsZWN0IiwhMCksdC5yZWRyYXcoKTtlbHNlIGlmKGRlJiZxLnRvdWNoZXNbMV0mJiF0LnRvdWNoRGF0YS5kaWRTZWxlY3QmJm9lLnpvb21pbmdFbmFibGVkKCkmJm9lLnBhbm5pbmdFbmFibGVkKCkmJm9lLnVzZXJab29taW5nRW5hYmxlZCgpJiZvZS51c2VyUGFubmluZ0VuYWJsZWQoKSl7cS5wcmV2ZW50RGVmYXVsdCgpLHQuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAsdC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKTt2YXIgdnQ9dC5kcmFnRGF0YS50b3VjaERyYWdFbGVzO2lmKHZ0KXt0LnJlZHJhd0hpbnQoImRyYWciLCEwKTtmb3IodmFyIG50PTA7bnQ8dnQubGVuZ3RoO250Kyspe3ZhciBwbj12dFtudF0uX3ByaXZhdGU7cG4uZ3JhYmJlZD0hMSxwbi5yc2NyYXRjaC5pbkRyYWdMYXllcj0hMX19dmFyIGt0PXQudG91Y2hEYXRhLnN0YXJ0LHN0PXEudG91Y2hlc1swXS5jbGllbnRYLWVlLFVlPXEudG91Y2hlc1swXS5jbGllbnRZLVksY3Q9cS50b3VjaGVzWzFdLmNsaWVudFgtZWUsV2U9cS50b3VjaGVzWzFdLmNsaWVudFktWSxPbj1RKHN0LFVlLGN0LFdlKSx0bj1Pbi96O2lmKHVlKXt2YXIgTXI9c3QtTSxJcj1VZS1QLFBuPWN0LUIsRHQ9V2UtRixDZT0oTXIrUG4pLzIsdHQ9KElyK0R0KS8yLEN0PW9lLnpvb20oKSxncj1DdCp0bixybj1vZS5wYW4oKSx5bj1LWzBdKkN0K3JuLngsWnI9S1sxXSpDdCtybi55LE9pPXt4Oi1nci9DdCooeW4tcm4ueC1DZSkreW4seTotZ3IvQ3QqKFpyLXJuLnktdHQpK1pyfTtpZihrdCYma3QuYWN0aXZlKCkpe3ZhciB2dD10LmRyYWdEYXRhLnRvdWNoRHJhZ0VsZXM7eCh2dCksdC5yZWRyYXdIaW50KCJkcmFnIiwhMCksdC5yZWRyYXdIaW50KCJlbGVzIiwhMCksa3QudW5hY3RpdmF0ZSgpLmVtaXQoImZyZWVvbiIpLHZ0LmVtaXQoImZyZWUiKSx0LmRyYWdEYXRhLmRpZERyYWcmJihrdC5lbWl0KCJkcmFnZnJlZW9uIiksdnQuZW1pdCgiZHJhZ2ZyZWUiKSl9b2Uudmlld3BvcnQoe3pvb206Z3IscGFuOk9pLGNhbmNlbE9uRmFpbGVkWm9vbTohMH0pLG9lLmVtaXQoInBpbmNoem9vbSIpLHo9T24sTT1zdCxQPVVlLEI9Y3QsRj1XZSx0LnBpbmNoaW5nPSEwfWlmKHEudG91Y2hlc1swXSl7dmFyIHBlPXQucHJvamVjdEludG9WaWV3cG9ydChxLnRvdWNoZXNbMF0uY2xpZW50WCxxLnRvdWNoZXNbMF0uY2xpZW50WSk7VlswXT1wZVswXSxWWzFdPXBlWzFdfWlmKHEudG91Y2hlc1sxXSl7dmFyIHBlPXQucHJvamVjdEludG9WaWV3cG9ydChxLnRvdWNoZXNbMV0uY2xpZW50WCxxLnRvdWNoZXNbMV0uY2xpZW50WSk7VlsyXT1wZVswXSxWWzNdPXBlWzFdfWlmKHEudG91Y2hlc1syXSl7dmFyIHBlPXQucHJvamVjdEludG9WaWV3cG9ydChxLnRvdWNoZXNbMl0uY2xpZW50WCxxLnRvdWNoZXNbMl0uY2xpZW50WSk7Vls0XT1wZVswXSxWWzVdPXBlWzFdfX1lbHNlIGlmKHEudG91Y2hlc1swXSYmIXQudG91Y2hEYXRhLmRpZFNlbGVjdCl7dmFyIGVpPXQudG91Y2hEYXRhLnN0YXJ0LFNuPXQudG91Y2hEYXRhLmxhc3QsZnQ7aWYoIXQuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcyYmIXQuc3dpcGVQYW5uaW5nJiYoZnQ9dC5maW5kTmVhcmVzdEVsZW1lbnQoVlswXSxWWzFdLCEwLCEwKSksZGUmJmVpIT1udWxsJiZxLnByZXZlbnREZWZhdWx0KCksZGUmJmVpIT1udWxsJiZ0Lm5vZGVJc0RyYWdnYWJsZShlaSkpaWYoUGUpe3ZhciB2dD10LmRyYWdEYXRhLnRvdWNoRHJhZ0VsZXMsSHI9IXQuZHJhZ0RhdGEuZGlkRHJhZztIciYmeSh2dCx7aW5EcmFnTGF5ZXI6ITB9KSx0LmRyYWdEYXRhLmRpZERyYWc9ITA7dmFyIGV0PXt4OjAseTowfTtpZihfdChfZVswXSkmJl90KF9lWzFdKSYmKGV0LngrPV9lWzBdLGV0LnkrPV9lWzFdLEhyKSl7dC5yZWRyYXdIaW50KCJlbGVzIiwhMCk7dmFyIGd0PXQudG91Y2hEYXRhLmRyYWdEZWx0YTtndCYmX3QoZ3RbMF0pJiZfdChndFsxXSkmJihldC54Kz1ndFswXSxldC55Kz1ndFsxXSl9dC5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzPSEwLHZ0LnNpbGVudFNoaWZ0KGV0KS5lbWl0KCJwb3NpdGlvbiBkcmFnIiksdC5yZWRyYXdIaW50KCJkcmFnIiwhMCksdC50b3VjaERhdGEuc3RhcnRQb3NpdGlvblswXT09VGVbMF0mJnQudG91Y2hEYXRhLnN0YXJ0UG9zaXRpb25bMV09PVRlWzFdJiZ0LnJlZHJhd0hpbnQoImVsZXMiLCEwKSx0LnJlZHJhdygpfWVsc2V7dmFyIGd0PXQudG91Y2hEYXRhLmRyYWdEZWx0YT10LnRvdWNoRGF0YS5kcmFnRGVsdGF8fFtdO2d0Lmxlbmd0aD09PTA/KGd0LnB1c2goX2VbMF0pLGd0LnB1c2goX2VbMV0pKTooZ3RbMF0rPV9lWzBdLGd0WzFdKz1fZVsxXSl9aWYoaShlaXx8ZnQsWyJ0b3VjaG1vdmUiLCJ0YXBkcmFnIiwidm1vdXNlbW92ZSJdLHEse3g6VlswXSx5OlZbMV19KSwoIWVpfHwhZWkuZ3JhYmJlZCgpKSYmZnQhPVNuJiYoU24mJlNuLmVtaXQoe29yaWdpbmFsRXZlbnQ6cSx0eXBlOiJ0YXBkcmFnb3V0Iixwb3NpdGlvbjp7eDpWWzBdLHk6VlsxXX19KSxmdCYmZnQuZW1pdCh7b3JpZ2luYWxFdmVudDpxLHR5cGU6InRhcGRyYWdvdmVyIixwb3NpdGlvbjp7eDpWWzBdLHk6VlsxXX19KSksdC50b3VjaERhdGEubGFzdD1mdCxkZSlmb3IodmFyIG50PTA7bnQ8Vi5sZW5ndGg7bnQrKylWW250XSYmdC50b3VjaERhdGEuc3RhcnRQb3NpdGlvbltudF0mJlBlJiYodC50b3VjaERhdGEuc2luZ2xlVG91Y2hNb3ZlZD0hMCk7aWYoZGUmJihlaT09bnVsbHx8ZWkucGFubmFibGUoKSkmJm9lLnBhbm5pbmdFbmFibGVkKCkmJm9lLnVzZXJQYW5uaW5nRW5hYmxlZCgpKXt2YXIgS3Q9cyhlaSx0LnRvdWNoRGF0YS5zdGFydHMpO0t0JiYocS5wcmV2ZW50RGVmYXVsdCgpLHQuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbnx8KHQuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj1qMSh0LnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uKSksdC5zd2lwZVBhbm5pbmc/KG9lLnBhbkJ5KHt4Ol9lWzBdKlcseTpfZVsxXSpXfSksb2UuZW1pdCgiZHJhZ3BhbiIpKTpQZSYmKHQuc3dpcGVQYW5uaW5nPSEwLG9lLnBhbkJ5KHt4OlZlKlcseTpxZSpXfSksb2UuZW1pdCgiZHJhZ3BhbiIpLGVpJiYoZWkudW5hY3RpdmF0ZSgpLHQucmVkcmF3SGludCgic2VsZWN0IiwhMCksdC50b3VjaERhdGEuc3RhcnQ9bnVsbCkpKTt2YXIgcGU9dC5wcm9qZWN0SW50b1ZpZXdwb3J0KHEudG91Y2hlc1swXS5jbGllbnRYLHEudG91Y2hlc1swXS5jbGllbnRZKTtWWzBdPXBlWzBdLFZbMV09cGVbMV19fWZvcih2YXIgYmU9MDtiZTxWLmxlbmd0aDtiZSsrKVRlW2JlXT1WW2JlXTtkZSYmcS50b3VjaGVzLmxlbmd0aD4wJiYhdC5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzJiYhdC5zd2lwZVBhbm5pbmcmJnQuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbiE9bnVsbCYmKHQuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAsdC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSx0LnJlZHJhdygpKX19LCJ0b3VjaG1vdmVIYW5kbGVyIiksITEpO3ZhciBoZTt0LnJlZ2lzdGVyQmluZGluZyhlLCJ0b3VjaGNhbmNlbCIsaGU9byhmdW5jdGlvbihxKXt2YXIgZGU9dC50b3VjaERhdGEuc3RhcnQ7dC50b3VjaERhdGEuY2FwdHVyZT0hMSxkZSYmZGUudW5hY3RpdmF0ZSgpfSwidG91Y2hjYW5jZWxIYW5kbGVyIikpO3ZhciBsZSxKLFNlLHNlO2lmKHQucmVnaXN0ZXJCaW5kaW5nKGUsInRvdWNoZW5kIixsZT1vKGZ1bmN0aW9uKHEpe3ZhciBkZT10LnRvdWNoRGF0YS5zdGFydCxpZT10LnRvdWNoRGF0YS5jYXB0dXJlO2lmKGllKXEudG91Y2hlcy5sZW5ndGg9PT0wJiYodC50b3VjaERhdGEuY2FwdHVyZT0hMSkscS5wcmV2ZW50RGVmYXVsdCgpO2Vsc2UgcmV0dXJuO3ZhciBvZT10LnNlbGVjdGlvbjt0LnN3aXBlUGFubmluZz0hMSx0LmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXM9ITE7dmFyIFY9dC5jeSxUZT1WLnpvb20oKSxXPXQudG91Y2hEYXRhLm5vdyxwZT10LnRvdWNoRGF0YS5lYXJsaWVyO2lmKHEudG91Y2hlc1swXSl7dmFyIHZlPXQucHJvamVjdEludG9WaWV3cG9ydChxLnRvdWNoZXNbMF0uY2xpZW50WCxxLnRvdWNoZXNbMF0uY2xpZW50WSk7V1swXT12ZVswXSxXWzFdPXZlWzFdfWlmKHEudG91Y2hlc1sxXSl7dmFyIHZlPXQucHJvamVjdEludG9WaWV3cG9ydChxLnRvdWNoZXNbMV0uY2xpZW50WCxxLnRvdWNoZXNbMV0uY2xpZW50WSk7V1syXT12ZVswXSxXWzNdPXZlWzFdfWlmKHEudG91Y2hlc1syXSl7dmFyIHZlPXQucHJvamVjdEludG9WaWV3cG9ydChxLnRvdWNoZXNbMl0uY2xpZW50WCxxLnRvdWNoZXNbMl0uY2xpZW50WSk7V1s0XT12ZVswXSxXWzVdPXZlWzFdfWRlJiZkZS51bmFjdGl2YXRlKCk7dmFyIFBlO2lmKHQudG91Y2hEYXRhLmN4dCl7aWYoUGU9e29yaWdpbmFsRXZlbnQ6cSx0eXBlOiJjeHR0YXBlbmQiLHBvc2l0aW9uOnt4OldbMF0seTpXWzFdfX0sZGU/ZGUuZW1pdChQZSk6Vi5lbWl0KFBlKSwhdC50b3VjaERhdGEuY3h0RHJhZ2dlZCl7dmFyIF9lPXtvcmlnaW5hbEV2ZW50OnEsdHlwZToiY3h0dGFwIixwb3NpdGlvbjp7eDpXWzBdLHk6V1sxXX19O2RlP2RlLmVtaXQoX2UpOlYuZW1pdChfZSl9dC50b3VjaERhdGEuc3RhcnQmJih0LnRvdWNoRGF0YS5zdGFydC5fcHJpdmF0ZS5ncmFiYmVkPSExKSx0LnRvdWNoRGF0YS5jeHQ9ITEsdC50b3VjaERhdGEuc3RhcnQ9bnVsbCx0LnJlZHJhdygpO3JldHVybn1pZighcS50b3VjaGVzWzJdJiZWLmJveFNlbGVjdGlvbkVuYWJsZWQoKSYmdC50b3VjaERhdGEuc2VsZWN0aW5nKXt0LnRvdWNoRGF0YS5zZWxlY3Rpbmc9ITE7dmFyIGJlPVYuY29sbGVjdGlvbih0LmdldEFsbEluQm94KG9lWzBdLG9lWzFdLG9lWzJdLG9lWzNdKSk7b2VbMF09dm9pZCAwLG9lWzFdPXZvaWQgMCxvZVsyXT12b2lkIDAsb2VbM109dm9pZCAwLG9lWzRdPTAsdC5yZWRyYXdIaW50KCJzZWxlY3QiLCEwKSxWLmVtaXQoe3R5cGU6ImJveGVuZCIsb3JpZ2luYWxFdmVudDpxLHBvc2l0aW9uOnt4OldbMF0seTpXWzFdfX0pO3ZhciBWZT1vKGZ1bmN0aW9uKE10KXtyZXR1cm4gTXQuc2VsZWN0YWJsZSgpJiYhTXQuc2VsZWN0ZWQoKX0sImVsZVdvdWxkQmVTZWxlY3RlZCIpO2JlLmVtaXQoImJveCIpLnN0ZEZpbHRlcihWZSkuc2VsZWN0KCkuZW1pdCgiYm94c2VsZWN0IiksYmUubm9uZW1wdHkoKSYmdC5yZWRyYXdIaW50KCJlbGVzIiwhMCksdC5yZWRyYXcoKX1pZihkZT8udW5hY3RpdmF0ZSgpLHEudG91Y2hlc1syXSl0LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249dm9pZCAwLHQucmVkcmF3SGludCgic2VsZWN0IiwhMCk7ZWxzZSBpZighcS50b3VjaGVzWzFdKXtpZighcS50b3VjaGVzWzBdKXtpZighcS50b3VjaGVzWzBdKXt0LmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249dm9pZCAwLHQucmVkcmF3SGludCgic2VsZWN0IiwhMCk7dmFyIERlPXQuZHJhZ0RhdGEudG91Y2hEcmFnRWxlcztpZihkZSE9bnVsbCl7dmFyIHFlPWRlLl9wcml2YXRlLmdyYWJiZWQ7eChEZSksdC5yZWRyYXdIaW50KCJkcmFnIiwhMCksdC5yZWRyYXdIaW50KCJlbGVzIiwhMCkscWUmJihkZS5lbWl0KCJmcmVlb24iKSxEZS5lbWl0KCJmcmVlIiksdC5kcmFnRGF0YS5kaWREcmFnJiYoZGUuZW1pdCgiZHJhZ2ZyZWVvbiIpLERlLmVtaXQoImRyYWdmcmVlIikpKSxpKGRlLFsidG91Y2hlbmQiLCJ0YXBlbmQiLCJ2bW91c2V1cCIsInRhcGRyYWdvdXQiXSxxLHt4OldbMF0seTpXWzFdfSksZGUudW5hY3RpdmF0ZSgpLHQudG91Y2hEYXRhLnN0YXJ0PW51bGx9ZWxzZXt2YXIgYXQ9dC5maW5kTmVhcmVzdEVsZW1lbnQoV1swXSxXWzFdLCEwLCEwKTtpKGF0LFsidG91Y2hlbmQiLCJ0YXBlbmQiLCJ2bW91c2V1cCIsInRhcGRyYWdvdXQiXSxxLHt4OldbMF0seTpXWzFdfSl9dmFyIFJ0PXQudG91Y2hEYXRhLnN0YXJ0UG9zaXRpb25bMF0tV1swXSxzdD1SdCpSdCxVZT10LnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uWzFdLVdbMV0sY3Q9VWUqVWUsV2U9c3QrY3Qsb3Q9V2UqVGUqVGU7dC50b3VjaERhdGEuc2luZ2xlVG91Y2hNb3ZlZHx8KGRlfHxWLiQoIjpzZWxlY3RlZCIpLnVuc2VsZWN0KFsidGFwdW5zZWxlY3QiXSksaShkZSxbInRhcCIsInZjbGljayJdLHEse3g6V1swXSx5OldbMV19KSxKPSExLHEudGltZVN0YW1wLXNlPD1WLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUoKT8oU2UmJmNsZWFyVGltZW91dChTZSksSj0hMCxzZT1udWxsLGkoZGUsWyJkYmx0YXAiLCJ2ZGJsY2xpY2siXSxxLHt4OldbMF0seTpXWzFdfSkpOihTZT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Snx8aShkZSxbIm9uZXRhcCIsInZvbmVjbGljayJdLHEse3g6V1swXSx5OldbMV19KX0sVi5tdWx0aUNsaWNrRGVib3VuY2VUaW1lKCkpLHNlPXEudGltZVN0YW1wKSksZGUhPW51bGwmJiF0LmRyYWdEYXRhLmRpZERyYWcmJmRlLl9wcml2YXRlLnNlbGVjdGFibGUmJm90PHQudG91Y2hUYXBUaHJlc2hvbGQyJiYhdC5waW5jaGluZyYmKFYuc2VsZWN0aW9uVHlwZSgpPT09InNpbmdsZSI/KFYuJChyKS51bm1lcmdlKGRlKS51bnNlbGVjdChbInRhcHVuc2VsZWN0Il0pLGRlLnNlbGVjdChbInRhcHNlbGVjdCJdKSk6ZGUuc2VsZWN0ZWQoKT9kZS51bnNlbGVjdChbInRhcHVuc2VsZWN0Il0pOmRlLnNlbGVjdChbInRhcHNlbGVjdCJdKSx0LnJlZHJhd0hpbnQoImVsZXMiLCEwKSksdC50b3VjaERhdGEuc2luZ2xlVG91Y2hNb3ZlZD0hMH19fWZvcih2YXIgWXQ9MDtZdDxXLmxlbmd0aDtZdCsrKXBlW1l0XT1XW1l0XTt0LmRyYWdEYXRhLmRpZERyYWc9ITEscS50b3VjaGVzLmxlbmd0aD09PTAmJih0LnRvdWNoRGF0YS5kcmFnRGVsdGE9W10sdC50b3VjaERhdGEuc3RhcnRQb3NpdGlvbj1bbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLHQudG91Y2hEYXRhLnN0YXJ0R1Bvc2l0aW9uPW51bGwsdC50b3VjaERhdGEuZGlkU2VsZWN0PSExKSxxLnRvdWNoZXMubGVuZ3RoPDImJihxLnRvdWNoZXMubGVuZ3RoPT09MSYmKHQudG91Y2hEYXRhLnN0YXJ0R1Bvc2l0aW9uPVtxLnRvdWNoZXNbMF0uY2xpZW50WCxxLnRvdWNoZXNbMF0uY2xpZW50WV0pLHQucGluY2hpbmc9ITEsdC5yZWRyYXdIaW50KCJlbGVzIiwhMCksdC5yZWRyYXcoKSl9LCJ0b3VjaGVuZEhhbmRsZXIiKSwhMSksdHlwZW9mIFRvdWNoRXZlbnQ+InUiKXt2YXIgYWU9W10sT2U9byhmdW5jdGlvbihxKXtyZXR1cm57Y2xpZW50WDpxLmNsaWVudFgsY2xpZW50WTpxLmNsaWVudFksZm9yY2U6MSxpZGVudGlmaWVyOnEucG9pbnRlcklkLHBhZ2VYOnEucGFnZVgscGFnZVk6cS5wYWdlWSxyYWRpdXNYOnEud2lkdGgvMixyYWRpdXNZOnEuaGVpZ2h0LzIsc2NyZWVuWDpxLnNjcmVlblgsc2NyZWVuWTpxLnNjcmVlblksdGFyZ2V0OnEudGFyZ2V0fX0sIm1ha2VUb3VjaCIpLHllPW8oZnVuY3Rpb24ocSl7cmV0dXJue2V2ZW50OnEsdG91Y2g6T2UocSl9fSwibWFrZVBvaW50ZXIiKSxCZT1vKGZ1bmN0aW9uKHEpe2FlLnB1c2goeWUocSkpfSwiYWRkUG9pbnRlciIpLEhlPW8oZnVuY3Rpb24ocSl7Zm9yKHZhciBkZT0wO2RlPGFlLmxlbmd0aDtkZSsrKXt2YXIgaWU9YWVbZGVdO2lmKGllLmV2ZW50LnBvaW50ZXJJZD09PXEucG9pbnRlcklkKXthZS5zcGxpY2UoZGUsMSk7cmV0dXJufX19LCJyZW1vdmVQb2ludGVyIiksemU9byhmdW5jdGlvbihxKXt2YXIgZGU9YWUuZmlsdGVyKGZ1bmN0aW9uKGllKXtyZXR1cm4gaWUuZXZlbnQucG9pbnRlcklkPT09cS5wb2ludGVySWR9KVswXTtkZS5ldmVudD1xLGRlLnRvdWNoPU9lKHEpfSwidXBkYXRlUG9pbnRlciIpLExlPW8oZnVuY3Rpb24ocSl7cS50b3VjaGVzPWFlLm1hcChmdW5jdGlvbihkZSl7cmV0dXJuIGRlLnRvdWNofSl9LCJhZGRUb3VjaGVzVG9FdmVudCIpLEllPW8oZnVuY3Rpb24ocSl7cmV0dXJuIHEucG9pbnRlclR5cGU9PT0ibW91c2UifHxxLnBvaW50ZXJUeXBlPT09NH0sInBvaW50ZXJJc01vdXNlIik7dC5yZWdpc3RlckJpbmRpbmcodC5jb250YWluZXIsInBvaW50ZXJkb3duIixmdW5jdGlvbih4ZSl7SWUoeGUpfHwoeGUucHJldmVudERlZmF1bHQoKSxCZSh4ZSksTGUoeGUpLG5lKHhlKSl9KSx0LnJlZ2lzdGVyQmluZGluZyh0LmNvbnRhaW5lciwicG9pbnRlcnVwIixmdW5jdGlvbih4ZSl7SWUoeGUpfHwoSGUoeGUpLExlKHhlKSxsZSh4ZSkpfSksdC5yZWdpc3RlckJpbmRpbmcodC5jb250YWluZXIsInBvaW50ZXJjYW5jZWwiLGZ1bmN0aW9uKHhlKXtJZSh4ZSl8fChIZSh4ZSksTGUoeGUpLGhlKHhlKSl9KSx0LnJlZ2lzdGVyQmluZGluZyh0LmNvbnRhaW5lciwicG9pbnRlcm1vdmUiLGZ1bmN0aW9uKHhlKXtJZSh4ZSl8fCh4ZS5wcmV2ZW50RGVmYXVsdCgpLHplKHhlKSxMZSh4ZSksdGUoeGUpKX0pfX07c2g9e307c2guZ2VuZXJhdGVQb2x5Z29uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMubm9kZVNoYXBlc1t0XT17cmVuZGVyZXI6dGhpcyxuYW1lOnQscG9pbnRzOmUsZHJhdzpvKGZ1bmN0aW9uKG4saSxhLHMsbCx1KXt0aGlzLnJlbmRlcmVyLm5vZGVTaGFwZUltcGwoInBvbHlnb24iLG4saSxhLHMsbCx0aGlzLnBvaW50cyl9LCJkcmF3IiksaW50ZXJzZWN0TGluZTpvKGZ1bmN0aW9uKG4saSxhLHMsbCx1LGgsZil7cmV0dXJuIGE0KGwsdSx0aGlzLnBvaW50cyxuLGksYS8yLHMvMixoKX0sImludGVyc2VjdExpbmUiKSxjaGVja1BvaW50Om8oZnVuY3Rpb24obixpLGEscyxsLHUsaCxmKXtyZXR1cm4gaWgobixpLHRoaXMucG9pbnRzLHUsaCxzLGwsWzAsLTFdLGEpfSwiY2hlY2tQb2ludCIpfX07c2guZ2VuZXJhdGVFbGxpcHNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZVNoYXBlcy5lbGxpcHNlPXtyZW5kZXJlcjp0aGlzLG5hbWU6ImVsbGlwc2UiLGRyYXc6byhmdW5jdGlvbihlLHIsbixpLGEscyl7dGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKHRoaXMubmFtZSxlLHIsbixpLGEpfSwiZHJhdyIpLGludGVyc2VjdExpbmU6byhmdW5jdGlvbihlLHIsbixpLGEscyxsLHUpe3JldHVybiBmWGUoYSxzLGUscixuLzIrbCxpLzIrbCl9LCJpbnRlcnNlY3RMaW5lIiksY2hlY2tQb2ludDpvKGZ1bmN0aW9uKGUscixuLGksYSxzLGwsdSl7cmV0dXJuIGpwKGUscixpLGEscyxsLG4pfSwiY2hlY2tQb2ludCIpfX07c2guZ2VuZXJhdGVSb3VuZFBvbHlnb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5ub2RlU2hhcGVzW3RdPXtyZW5kZXJlcjp0aGlzLG5hbWU6dCxwb2ludHM6ZSxnZXRPckNyZWF0ZUNvcm5lcnM6byhmdW5jdGlvbihuLGksYSxzLGwsdSxoKXtpZih1W2hdIT09dm9pZCAwJiZ1W2grIi1jeCJdPT09biYmdVtoKyItY3kiXT09PWkpcmV0dXJuIHVbaF07dVtoXT1uZXcgQXJyYXkoZS5sZW5ndGgvMiksdVtoKyItY3giXT1uLHVbaCsiLWN5Il09aTt2YXIgZj1hLzIsZD1zLzI7bD1sPT09ImF1dG8iP0xnZShhLHMpOmw7Zm9yKHZhciBwPW5ldyBBcnJheShlLmxlbmd0aC8yKSxtPTA7bTxlLmxlbmd0aC8yO20rKylwW21dPXt4Om4rZiplW20qMl0seTppK2QqZVttKjIrMV19O3ZhciBnLHksdix4LGI9cC5sZW5ndGg7Zm9yKHk9cFtiLTFdLGc9MDtnPGI7ZysrKXY9cFtnJWJdLHg9cFsoZysxKSViXSx1W2hdW2ddPXJGKHksdix4LGwpLHk9dix2PXg7cmV0dXJuIHVbaF19LCJnZXRPckNyZWF0ZUNvcm5lcnMiKSxkcmF3Om8oZnVuY3Rpb24obixpLGEscyxsLHUsaCl7dGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKCJyb3VuZC1wb2x5Z29uIixuLGksYSxzLGwsdGhpcy5wb2ludHMsdGhpcy5nZXRPckNyZWF0ZUNvcm5lcnMoaSxhLHMsbCx1LGgsImRyYXdDb3JuZXJzIikpfSwiZHJhdyIpLGludGVyc2VjdExpbmU6byhmdW5jdGlvbihuLGksYSxzLGwsdSxoLGYsZCl7cmV0dXJuIGRYZShsLHUsdGhpcy5wb2ludHMsbixpLGEscyxoLHRoaXMuZ2V0T3JDcmVhdGVDb3JuZXJzKG4saSxhLHMsZixkLCJjb3JuZXJzIikpfSwiaW50ZXJzZWN0TGluZSIpLGNoZWNrUG9pbnQ6byhmdW5jdGlvbihuLGksYSxzLGwsdSxoLGYsZCl7cmV0dXJuIGhYZShuLGksdGhpcy5wb2ludHMsdSxoLHMsbCx0aGlzLmdldE9yQ3JlYXRlQ29ybmVycyh1LGgscyxsLGYsZCwiY29ybmVycyIpKX0sImNoZWNrUG9pbnQiKX19O3NoLmdlbmVyYXRlUm91bmRSZWN0YW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlU2hhcGVzWyJyb3VuZC1yZWN0YW5nbGUiXT10aGlzLm5vZGVTaGFwZXMucm91bmRyZWN0YW5nbGU9e3JlbmRlcmVyOnRoaXMsbmFtZToicm91bmQtcmVjdGFuZ2xlIixwb2ludHM6VHMoNCwwKSxkcmF3Om8oZnVuY3Rpb24oZSxyLG4saSxhLHMpe3RoaXMucmVuZGVyZXIubm9kZVNoYXBlSW1wbCh0aGlzLm5hbWUsZSxyLG4saSxhLHRoaXMucG9pbnRzLHMpfSwiZHJhdyIpLGludGVyc2VjdExpbmU6byhmdW5jdGlvbihlLHIsbixpLGEscyxsLHUpe3JldHVybiBfZ2UoYSxzLGUscixuLGksbCx1KX0sImludGVyc2VjdExpbmUiKSxjaGVja1BvaW50Om8oZnVuY3Rpb24oZSxyLG4saSxhLHMsbCx1KXt2YXIgaD1pLzIsZj1hLzI7dT11PT09ImF1dG8iP1pwKGksYSk6dSx1PU1hdGgubWluKGgsZix1KTt2YXIgZD11KjI7cmV0dXJuISEoaWgoZSxyLHRoaXMucG9pbnRzLHMsbCxpLGEtZCxbMCwtMV0sbil8fGloKGUscix0aGlzLnBvaW50cyxzLGwsaS1kLGEsWzAsLTFdLG4pfHxqcChlLHIsZCxkLHMtaCt1LGwtZit1LG4pfHxqcChlLHIsZCxkLHMraC11LGwtZit1LG4pfHxqcChlLHIsZCxkLHMraC11LGwrZi11LG4pfHxqcChlLHIsZCxkLHMtaCt1LGwrZi11LG4pKX0sImNoZWNrUG9pbnQiKX19O3NoLmdlbmVyYXRlQ3V0UmVjdGFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZVNoYXBlc1siY3V0LXJlY3RhbmdsZSJdPXRoaXMubm9kZVNoYXBlcy5jdXRyZWN0YW5nbGU9e3JlbmRlcmVyOnRoaXMsbmFtZToiY3V0LXJlY3RhbmdsZSIsY29ybmVyTGVuZ3RoOkhCKCkscG9pbnRzOlRzKDQsMCksZHJhdzpvKGZ1bmN0aW9uKGUscixuLGksYSxzKXt0aGlzLnJlbmRlcmVyLm5vZGVTaGFwZUltcGwodGhpcy5uYW1lLGUscixuLGksYSxudWxsLHMpfSwiZHJhdyIpLGdlbmVyYXRlQ3V0VHJpYW5nbGVQdHM6byhmdW5jdGlvbihlLHIsbixpLGEpe3ZhciBzPWE9PT0iYXV0byI/dGhpcy5jb3JuZXJMZW5ndGg6YSxsPXIvMix1PWUvMixoPW4tdSxmPW4rdSxkPWktbCxwPWkrbDtyZXR1cm57dG9wTGVmdDpbaCxkK3MsaCtzLGQsaCtzLGQrc10sdG9wUmlnaHQ6W2YtcyxkLGYsZCtzLGYtcyxkK3NdLGJvdHRvbVJpZ2h0OltmLHAtcyxmLXMscCxmLXMscC1zXSxib3R0b21MZWZ0OltoK3MscCxoLHAtcyxoK3MscC1zXX19LCJnZW5lcmF0ZUN1dFRyaWFuZ2xlUHRzIiksaW50ZXJzZWN0TGluZTpvKGZ1bmN0aW9uKGUscixuLGksYSxzLGwsdSl7dmFyIGg9dGhpcy5nZW5lcmF0ZUN1dFRyaWFuZ2xlUHRzKG4rMipsLGkrMipsLGUscix1KSxmPVtdLmNvbmNhdC5hcHBseShbXSxbaC50b3BMZWZ0LnNwbGljZSgwLDQpLGgudG9wUmlnaHQuc3BsaWNlKDAsNCksaC5ib3R0b21SaWdodC5zcGxpY2UoMCw0KSxoLmJvdHRvbUxlZnQuc3BsaWNlKDAsNCldKTtyZXR1cm4gYTQoYSxzLGYsZSxyKX0sImludGVyc2VjdExpbmUiKSxjaGVja1BvaW50Om8oZnVuY3Rpb24oZSxyLG4saSxhLHMsbCx1KXt2YXIgaD11PT09ImF1dG8iP3RoaXMuY29ybmVyTGVuZ3RoOnU7aWYoaWgoZSxyLHRoaXMucG9pbnRzLHMsbCxpLGEtMipoLFswLC0xXSxuKXx8aWgoZSxyLHRoaXMucG9pbnRzLHMsbCxpLTIqaCxhLFswLC0xXSxuKSlyZXR1cm4hMDt2YXIgZj10aGlzLmdlbmVyYXRlQ3V0VHJpYW5nbGVQdHMoaSxhLHMsbCk7cmV0dXJuIHFzKGUscixmLnRvcExlZnQpfHxxcyhlLHIsZi50b3BSaWdodCl8fHFzKGUscixmLmJvdHRvbVJpZ2h0KXx8cXMoZSxyLGYuYm90dG9tTGVmdCl9LCJjaGVja1BvaW50Iil9fTtzaC5nZW5lcmF0ZUJhcnJlbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVTaGFwZXMuYmFycmVsPXtyZW5kZXJlcjp0aGlzLG5hbWU6ImJhcnJlbCIscG9pbnRzOlRzKDQsMCksZHJhdzpvKGZ1bmN0aW9uKGUscixuLGksYSxzKXt0aGlzLnJlbmRlcmVyLm5vZGVTaGFwZUltcGwodGhpcy5uYW1lLGUscixuLGksYSl9LCJkcmF3IiksaW50ZXJzZWN0TGluZTpvKGZ1bmN0aW9uKGUscixuLGksYSxzLGwsdSl7dmFyIGg9LjE1LGY9LjUsZD0uODUscD10aGlzLmdlbmVyYXRlQmFycmVsQmV6aWVyUHRzKG4rMipsLGkrMipsLGUsciksbT1vKGZ1bmN0aW9uKHYpe3ZhciB4PVExKHt4OnZbMF0seTp2WzFdfSx7eDp2WzJdLHk6dlszXX0se3g6dls0XSx5OnZbNV19LGgpLGI9UTEoe3g6dlswXSx5OnZbMV19LHt4OnZbMl0seTp2WzNdfSx7eDp2WzRdLHk6dls1XX0sZiksVD1RMSh7eDp2WzBdLHk6dlsxXX0se3g6dlsyXSx5OnZbM119LHt4OnZbNF0seTp2WzVdfSxkKTtyZXR1cm5bdlswXSx2WzFdLHgueCx4LnksYi54LGIueSxULngsVC55LHZbNF0sdls1XV19LCJhcHByb3hpbWF0ZUJhcnJlbEN1cnZlUHRzIiksZz1bXS5jb25jYXQobShwLnRvcExlZnQpLG0ocC50b3BSaWdodCksbShwLmJvdHRvbVJpZ2h0KSxtKHAuYm90dG9tTGVmdCkpO3JldHVybiBhNChhLHMsZyxlLHIpfSwiaW50ZXJzZWN0TGluZSIpLGdlbmVyYXRlQmFycmVsQmV6aWVyUHRzOm8oZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9ci8yLHM9ZS8yLGw9bi1zLHU9bitzLGg9aS1hLGY9aSthLGQ9VEIoZSxyKSxwPWQuaGVpZ2h0T2Zmc2V0LG09ZC53aWR0aE9mZnNldCxnPWQuY3RybFB0T2Zmc2V0UGN0KmUseT17dG9wTGVmdDpbbCxoK3AsbCtnLGgsbCttLGhdLHRvcFJpZ2h0Olt1LW0saCx1LWcsaCx1LGgrcF0sYm90dG9tUmlnaHQ6W3UsZi1wLHUtZyxmLHUtbSxmXSxib3R0b21MZWZ0OltsK20sZixsK2csZixsLGYtcF19O3JldHVybiB5LnRvcExlZnQuaXNUb3A9ITAseS50b3BSaWdodC5pc1RvcD0hMCx5LmJvdHRvbUxlZnQuaXNCb3R0b209ITAseS5ib3R0b21SaWdodC5pc0JvdHRvbT0hMCx5fSwiZ2VuZXJhdGVCYXJyZWxCZXppZXJQdHMiKSxjaGVja1BvaW50Om8oZnVuY3Rpb24oZSxyLG4saSxhLHMsbCx1KXt2YXIgaD1UQihpLGEpLGY9aC5oZWlnaHRPZmZzZXQsZD1oLndpZHRoT2Zmc2V0O2lmKGloKGUscix0aGlzLnBvaW50cyxzLGwsaSxhLTIqZixbMCwtMV0sbil8fGloKGUscix0aGlzLnBvaW50cyxzLGwsaS0yKmQsYSxbMCwtMV0sbikpcmV0dXJuITA7Zm9yKHZhciBwPXRoaXMuZ2VuZXJhdGVCYXJyZWxCZXppZXJQdHMoaSxhLHMsbCksbT1vKGZ1bmN0aW9uKEMsRCxPKXt2YXIgUj1PWzRdLGs9T1syXSxMPU9bMF0sQT1PWzVdLEk9T1sxXSxNPU1hdGgubWluKFIsTCksUD1NYXRoLm1heChSLEwpLEI9TWF0aC5taW4oQSxJKSxGPU1hdGgubWF4KEEsSSk7aWYoTTw9QyYmQzw9UCYmQjw9RCYmRDw9Ril7dmFyIHo9cFhlKFIsayxMKSwkPW9YZSh6WzBdLHpbMV0selsyXSxDKSxVPSQuZmlsdGVyKGZ1bmN0aW9uKEspe3JldHVybiAwPD1LJiZLPD0xfSk7aWYoVS5sZW5ndGg+MClyZXR1cm4gVVswXX1yZXR1cm4gbnVsbH0sImdldEN1cnZlVCIpLGc9T2JqZWN0LmtleXMocCkseT0wO3k8Zy5sZW5ndGg7eSsrKXt2YXIgdj1nW3ldLHg9cFt2XSxiPW0oZSxyLHgpO2lmKGIhPW51bGwpe3ZhciBUPXhbNV0sUz14WzNdLHc9eFsxXSxFPXNhKFQsUyx3LGIpO2lmKHguaXNUb3AmJkU8PXJ8fHguaXNCb3R0b20mJnI8PUUpcmV0dXJuITB9fXJldHVybiExfSwiY2hlY2tQb2ludCIpfX07c2guZ2VuZXJhdGVCb3R0b21Sb3VuZHJlY3RhbmdsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVTaGFwZXNbImJvdHRvbS1yb3VuZC1yZWN0YW5nbGUiXT10aGlzLm5vZGVTaGFwZXMuYm90dG9tcm91bmRyZWN0YW5nbGU9e3JlbmRlcmVyOnRoaXMsbmFtZToiYm90dG9tLXJvdW5kLXJlY3RhbmdsZSIscG9pbnRzOlRzKDQsMCksZHJhdzpvKGZ1bmN0aW9uKGUscixuLGksYSxzKXt0aGlzLnJlbmRlcmVyLm5vZGVTaGFwZUltcGwodGhpcy5uYW1lLGUscixuLGksYSx0aGlzLnBvaW50cyxzKX0sImRyYXciKSxpbnRlcnNlY3RMaW5lOm8oZnVuY3Rpb24oZSxyLG4saSxhLHMsbCx1KXt2YXIgaD1lLShuLzIrbCksZj1yLShpLzIrbCksZD1mLHA9ZSsobi8yK2wpLG09TWYoYSxzLGUscixoLGYscCxkLCExKTtyZXR1cm4gbS5sZW5ndGg+MD9tOl9nZShhLHMsZSxyLG4saSxsLHUpfSwiaW50ZXJzZWN0TGluZSIpLGNoZWNrUG9pbnQ6byhmdW5jdGlvbihlLHIsbixpLGEscyxsLHUpe3U9dT09PSJhdXRvIj9acChpLGEpOnU7dmFyIGg9Mip1O2lmKGloKGUscix0aGlzLnBvaW50cyxzLGwsaSxhLWgsWzAsLTFdLG4pfHxpaChlLHIsdGhpcy5wb2ludHMscyxsLGktaCxhLFswLC0xXSxuKSlyZXR1cm4hMDt2YXIgZj1pLzIrMipuLGQ9YS8yKzIqbixwPVtzLWYsbC1kLHMtZixsLHMrZixsLHMrZixsLWRdO3JldHVybiEhKHFzKGUscixwKXx8anAoZSxyLGgsaCxzK2kvMi11LGwrYS8yLXUsbil8fGpwKGUscixoLGgscy1pLzIrdSxsK2EvMi11LG4pKX0sImNoZWNrUG9pbnQiKX19O3NoLnJlZ2lzdGVyTm9kZVNoYXBlcz1mdW5jdGlvbigpe3ZhciB0PXRoaXMubm9kZVNoYXBlcz17fSxlPXRoaXM7dGhpcy5nZW5lcmF0ZUVsbGlwc2UoKSx0aGlzLmdlbmVyYXRlUG9seWdvbigidHJpYW5nbGUiLFRzKDMsMCkpLHRoaXMuZ2VuZXJhdGVSb3VuZFBvbHlnb24oInJvdW5kLXRyaWFuZ2xlIixUcygzLDApKSx0aGlzLmdlbmVyYXRlUG9seWdvbigicmVjdGFuZ2xlIixUcyg0LDApKSx0LnNxdWFyZT10LnJlY3RhbmdsZSx0aGlzLmdlbmVyYXRlUm91bmRSZWN0YW5nbGUoKSx0aGlzLmdlbmVyYXRlQ3V0UmVjdGFuZ2xlKCksdGhpcy5nZW5lcmF0ZUJhcnJlbCgpLHRoaXMuZ2VuZXJhdGVCb3R0b21Sb3VuZHJlY3RhbmdsZSgpO3t2YXIgcj1bMCwxLDEsMCwwLC0xLC0xLDBdO3RoaXMuZ2VuZXJhdGVQb2x5Z29uKCJkaWFtb25kIixyKSx0aGlzLmdlbmVyYXRlUm91bmRQb2x5Z29uKCJyb3VuZC1kaWFtb25kIixyKX10aGlzLmdlbmVyYXRlUG9seWdvbigicGVudGFnb24iLFRzKDUsMCkpLHRoaXMuZ2VuZXJhdGVSb3VuZFBvbHlnb24oInJvdW5kLXBlbnRhZ29uIixUcyg1LDApKSx0aGlzLmdlbmVyYXRlUG9seWdvbigiaGV4YWdvbiIsVHMoNiwwKSksdGhpcy5nZW5lcmF0ZVJvdW5kUG9seWdvbigicm91bmQtaGV4YWdvbiIsVHMoNiwwKSksdGhpcy5nZW5lcmF0ZVBvbHlnb24oImhlcHRhZ29uIixUcyg3LDApKSx0aGlzLmdlbmVyYXRlUm91bmRQb2x5Z29uKCJyb3VuZC1oZXB0YWdvbiIsVHMoNywwKSksdGhpcy5nZW5lcmF0ZVBvbHlnb24oIm9jdGFnb24iLFRzKDgsMCkpLHRoaXMuZ2VuZXJhdGVSb3VuZFBvbHlnb24oInJvdW5kLW9jdGFnb24iLFRzKDgsMCkpO3ZhciBuPW5ldyBBcnJheSgyMCk7e3ZhciBpPWJCKDUsMCksYT1iQig1LE1hdGguUEkvNSkscz0uNSooMy1NYXRoLnNxcnQoNSkpO3MqPTEuNTc7Zm9yKHZhciBsPTA7bDxhLmxlbmd0aC8yO2wrKylhW2wqMl0qPXMsYVtsKjIrMV0qPXM7Zm9yKHZhciBsPTA7bDwyMC80O2wrKyluW2wqNF09aVtsKjJdLG5bbCo0KzFdPWlbbCoyKzFdLG5bbCo0KzJdPWFbbCoyXSxuW2wqNCszXT1hW2wqMisxXX1uPURnZShuKSx0aGlzLmdlbmVyYXRlUG9seWdvbigic3RhciIsbiksdGhpcy5nZW5lcmF0ZVBvbHlnb24oInZlZSIsWy0xLC0xLDAsLS4zMzMsMSwtMSwwLDFdKSx0aGlzLmdlbmVyYXRlUG9seWdvbigicmhvbWJvaWQiLFstMSwtMSwuMzMzLC0xLDEsMSwtLjMzMywxXSksdGhpcy5nZW5lcmF0ZVBvbHlnb24oInJpZ2h0LXJob21ib2lkIixbLS4zMzMsLTEsMSwtMSwuMzMzLDEsLTEsMV0pLHRoaXMubm9kZVNoYXBlcy5jb25jYXZlaGV4YWdvbj10aGlzLmdlbmVyYXRlUG9seWdvbigiY29uY2F2ZS1oZXhhZ29uIixbLTEsLS45NSwtLjc1LDAsLTEsLjk1LDEsLjk1LC43NSwwLDEsLS45NV0pO3t2YXIgdT1bLTEsLTEsLjI1LC0xLDEsMCwuMjUsMSwtMSwxXTt0aGlzLmdlbmVyYXRlUG9seWdvbigidGFnIix1KSx0aGlzLmdlbmVyYXRlUm91bmRQb2x5Z29uKCJyb3VuZC10YWciLHUpfXQubWFrZVBvbHlnb249ZnVuY3Rpb24oaCl7dmFyIGY9aC5qb2luKCIkIiksZD0icG9seWdvbi0iK2YscDtyZXR1cm4ocD10aGlzW2RdKT9wOmUuZ2VuZXJhdGVQb2x5Z29uKGQsaCl9fTt4ND17fTt4NC50aW1lVG9SZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWRyYXdUb3RhbFRpbWUvdGhpcy5yZWRyYXdDb3VudH07eDQucmVkcmF3PWZ1bmN0aW9uKHQpe3Q9dHx8a2dlKCk7dmFyIGU9dGhpcztlLmF2ZXJhZ2VSZWRyYXdUaW1lPT09dm9pZCAwJiYoZS5hdmVyYWdlUmVkcmF3VGltZT0wKSxlLmxhc3RSZWRyYXdUaW1lPT09dm9pZCAwJiYoZS5sYXN0UmVkcmF3VGltZT0wKSxlLmxhc3REcmF3VGltZT09PXZvaWQgMCYmKGUubGFzdERyYXdUaW1lPTApLGUucmVxdWVzdGVkRnJhbWU9ITAsZS5yZW5kZXJPcHRpb25zPXR9O3g0LmJlZm9yZVJlbmRlcj1mdW5jdGlvbih0LGUpe2lmKCF0aGlzLmRlc3Ryb3llZCl7ZT09bnVsbCYmb2koIlByaW9yaXR5IGlzIG5vdCBvcHRpb25hbCBmb3IgYmVmb3JlUmVuZGVyIik7dmFyIHI9dGhpcy5iZWZvcmVSZW5kZXJDYWxsYmFja3M7ci5wdXNoKHtmbjp0LHByaW9yaXR5OmV9KSxyLnNvcnQoZnVuY3Rpb24obixpKXtyZXR1cm4gaS5wcmlvcml0eS1uLnByaW9yaXR5fSl9fTtVbWU9byhmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPWUuYmVmb3JlUmVuZGVyQ2FsbGJhY2tzLGE9MDthPGkubGVuZ3RoO2ErKylpW2FdLmZuKHIsbil9LCJiZWZvcmVSZW5kZXJDYWxsYmFja3MiKTt4NC5zdGFydFJlbmRlckxvb3A9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dC5jeTtpZighdC5yZW5kZXJMb29wU3RhcnRlZCl7dC5yZW5kZXJMb29wU3RhcnRlZD0hMDt2YXIgcj1vKGZ1bmN0aW9uIG4oaSl7aWYoIXQuZGVzdHJveWVkKXtpZighZS5iYXRjaGluZygpKWlmKHQucmVxdWVzdGVkRnJhbWUmJiF0LnNraXBGcmFtZSl7VW1lKHQsITAsaSk7dmFyIGE9bmgoKTt0LnJlbmRlcih0LnJlbmRlck9wdGlvbnMpO3ZhciBzPXQubGFzdERyYXdUaW1lPW5oKCk7dC5hdmVyYWdlUmVkcmF3VGltZT09PXZvaWQgMCYmKHQuYXZlcmFnZVJlZHJhd1RpbWU9cy1hKSx0LnJlZHJhd0NvdW50PT09dm9pZCAwJiYodC5yZWRyYXdDb3VudD0wKSx0LnJlZHJhd0NvdW50KyssdC5yZWRyYXdUb3RhbFRpbWU9PT12b2lkIDAmJih0LnJlZHJhd1RvdGFsVGltZT0wKTt2YXIgbD1zLWE7dC5yZWRyYXdUb3RhbFRpbWUrPWwsdC5sYXN0UmVkcmF3VGltZT1sLHQuYXZlcmFnZVJlZHJhd1RpbWU9dC5hdmVyYWdlUmVkcmF3VGltZS8yK2wvMix0LnJlcXVlc3RlZEZyYW1lPSExfWVsc2UgVW1lKHQsITEsaSk7dC5za2lwRnJhbWU9ITEsJDYobil9fSwicmVuZGVyRm4iKTskNihyKX19O2paZT1vKGZ1bmN0aW9uKGUpe3RoaXMuaW5pdChlKX0sIkJhc2VSZW5kZXJlciIpLF8xZT1qWmUsZHk9XzFlLnByb3RvdHlwZTtkeS5jbGllbnRGdW5jdGlvbnM9WyJyZWRyYXdIaW50IiwicmVuZGVyIiwicmVuZGVyVG8iLCJtYXRjaENhbnZhc1NpemUiLCJub2RlU2hhcGVJbXBsIiwiYXJyb3dTaGFwZUltcGwiXTtkeS5pbml0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7ZS5vcHRpb25zPXQsZS5jeT10LmN5O3ZhciByPWUuY29udGFpbmVyPXQuY3kuY29udGFpbmVyKCksbj1lLmN5LndpbmRvdygpO2lmKG4pe3ZhciBpPW4uZG9jdW1lbnQsYT1pLmhlYWQscz0iX19fX19fX19fX2N5dG9zY2FwZV9zdHlsZXNoZWV0IixsPSJfX19fX19fX19fY3l0b3NjYXBlX2NvbnRhaW5lciIsdT1pLmdldEVsZW1lbnRCeUlkKHMpIT1udWxsO2lmKHIuY2xhc3NOYW1lLmluZGV4T2YobCk8MCYmKHIuY2xhc3NOYW1lPShyLmNsYXNzTmFtZXx8IiIpKyIgIitsKSwhdSl7dmFyIGg9aS5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO2guaWQ9cyxoLnRleHRDb250ZW50PSIuIitsKyIgeyBwb3NpdGlvbjogcmVsYXRpdmU7IH0iLGEuaW5zZXJ0QmVmb3JlKGgsYS5jaGlsZHJlblswXSl9dmFyIGY9bi5nZXRDb21wdXRlZFN0eWxlKHIpLGQ9Zi5nZXRQcm9wZXJ0eVZhbHVlKCJwb3NpdGlvbiIpO2Q9PT0ic3RhdGljIiYmaG4oIkEgQ3l0b3NjYXBlIGNvbnRhaW5lciBoYXMgc3R5bGUgcG9zaXRpb246c3RhdGljIGFuZCBzbyBjYW4gbm90IHVzZSBVSSBleHRlbnNpb25zIHByb3Blcmx5Iil9ZS5zZWxlY3Rpb249W3ZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCwwXSxlLmJlemllclByb2pQY3RzPVsuMDUsLjIyNSwuNCwuNSwuNiwuNzc1LC45NV0sZS5ob3ZlckRhdGE9e2Rvd246bnVsbCxsYXN0Om51bGwsZG93blRpbWU6bnVsbCx0cmlnZ2VyTW9kZTpudWxsLGRyYWdnaW5nOiExLGluaXRpYWxQYW46W251bGwsbnVsbF0sY2FwdHVyZTohMX0sZS5kcmFnRGF0YT17cG9zc2libGVEcmFnRWxlbWVudHM6W119LGUudG91Y2hEYXRhPXtzdGFydDpudWxsLGNhcHR1cmU6ITEsc3RhcnRQb3NpdGlvbjpbbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLHNpbmdsZVRvdWNoU3RhcnRUaW1lOm51bGwsc2luZ2xlVG91Y2hNb3ZlZDohMCxub3c6W251bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXSxlYXJsaWVyOltudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF19LGUucmVkcmF3cz0wLGUuc2hvd0Zwcz10LnNob3dGcHMsZS5kZWJ1Zz10LmRlYnVnLGUud2ViZ2w9dC53ZWJnbCxlLmhpZGVFZGdlc09uVmlld3BvcnQ9dC5oaWRlRWRnZXNPblZpZXdwb3J0LGUudGV4dHVyZU9uVmlld3BvcnQ9dC50ZXh0dXJlT25WaWV3cG9ydCxlLndoZWVsU2Vuc2l0aXZpdHk9dC53aGVlbFNlbnNpdGl2aXR5LGUubW90aW9uQmx1ckVuYWJsZWQ9dC5tb3Rpb25CbHVyLGUuZm9yY2VkUGl4ZWxSYXRpbz1fdCh0LnBpeGVsUmF0aW8pP3QucGl4ZWxSYXRpbzpudWxsLGUubW90aW9uQmx1cj10Lm1vdGlvbkJsdXIsZS5tb3Rpb25CbHVyT3BhY2l0eT10Lm1vdGlvbkJsdXJPcGFjaXR5LGUubW90aW9uQmx1clRyYW5zcGFyZW5jeT0xLWUubW90aW9uQmx1ck9wYWNpdHksZS5tb3Rpb25CbHVyUHhSYXRpbz0xLGUubWJQeFJCbHVycnk9MSxlLm1pbk1iTG93UXVhbEZyYW1lcz00LGUuZnVsbFF1YWxpdHlNYj0hMSxlLmNsZWFyZWRGb3JNb3Rpb25CbHVyPVtdLGUuZGVza3RvcFRhcFRocmVzaG9sZD10LmRlc2t0b3BUYXBUaHJlc2hvbGQsZS5kZXNrdG9wVGFwVGhyZXNob2xkMj10LmRlc2t0b3BUYXBUaHJlc2hvbGQqdC5kZXNrdG9wVGFwVGhyZXNob2xkLGUudG91Y2hUYXBUaHJlc2hvbGQ9dC50b3VjaFRhcFRocmVzaG9sZCxlLnRvdWNoVGFwVGhyZXNob2xkMj10LnRvdWNoVGFwVGhyZXNob2xkKnQudG91Y2hUYXBUaHJlc2hvbGQsZS50YXBob2xkRHVyYXRpb249NTAwLGUuYmluZGluZ3M9W10sZS5iZWZvcmVSZW5kZXJDYWxsYmFja3M9W10sZS5iZWZvcmVSZW5kZXJQcmlvcml0aWVzPXthbmltYXRpb25zOjQwMCxlbGVDYWxjczozMDAsZWxlVHhyRGVxOjIwMCxseXJUeHJEZXE6MTUwLGx5clR4clNraXA6MTAwfSxlLnJlZ2lzdGVyTm9kZVNoYXBlcygpLGUucmVnaXN0ZXJBcnJvd1NoYXBlcygpLGUucmVnaXN0ZXJDYWxjdWxhdGlvbkxpc3RlbmVycygpfTtkeS5ub3RpZnk9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLG49ci5jeTtpZighdGhpcy5kZXN0cm95ZWQpe2lmKHQ9PT0iaW5pdCIpe3IubG9hZCgpO3JldHVybn1pZih0PT09ImRlc3Ryb3kiKXtyLmRlc3Ryb3koKTtyZXR1cm59KHQ9PT0iYWRkInx8dD09PSJyZW1vdmUifHx0PT09Im1vdmUiJiZuLmhhc0NvbXBvdW5kTm9kZXMoKXx8dD09PSJsb2FkInx8dD09PSJ6b3JkZXIifHx0PT09Im1vdW50IikmJnIuaW52YWxpZGF0ZUNhY2hlZFpTb3J0ZWRFbGVzKCksdD09PSJ2aWV3cG9ydCImJnIucmVkcmF3SGludCgic2VsZWN0IiwhMCksdD09PSJnYyImJnIucmVkcmF3SGludCgiZ2MiLCEwKSwodD09PSJsb2FkInx8dD09PSJyZXNpemUifHx0PT09Im1vdW50IikmJihyLmludmFsaWRhdGVDb250YWluZXJDbGllbnRDb29yZHNDYWNoZSgpLHIubWF0Y2hDYW52YXNTaXplKHIuY29udGFpbmVyKSksci5yZWRyYXdIaW50KCJlbGVzIiwhMCksci5yZWRyYXdIaW50KCJkcmFnIiwhMCksdGhpcy5zdGFydFJlbmRlckxvb3AoKSx0aGlzLnJlZHJhdygpfX07ZHkuZGVzdHJveT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dC5kZXN0cm95ZWQ9ITAsdC5jeS5zdG9wQW5pbWF0aW9uTG9vcCgpO2Zvcih2YXIgZT0wO2U8dC5iaW5kaW5ncy5sZW5ndGg7ZSsrKXt2YXIgcj10LmJpbmRpbmdzW2VdLG49cixpPW4udGFyZ2V0OyhpLm9mZnx8aS5yZW1vdmVFdmVudExpc3RlbmVyKS5hcHBseShpLG4uYXJncyl9aWYodC5iaW5kaW5ncz1bXSx0LmJlZm9yZVJlbmRlckNhbGxiYWNrcz1bXSx0Lm9uVXBkYXRlRWxlQ2FsY3NGbnM9W10sdC5yZW1vdmVPYnNlcnZlciYmdC5yZW1vdmVPYnNlcnZlci5kaXNjb25uZWN0KCksdC5zdHlsZU9ic2VydmVyJiZ0LnN0eWxlT2JzZXJ2ZXIuZGlzY29ubmVjdCgpLHQucmVzaXplT2JzZXJ2ZXImJnQucmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpLHQubGFiZWxDYWxjRGl2KXRyeXtkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHQubGFiZWxDYWxjRGl2KX1jYXRjaHt9fTtkeS5pc0hlYWRsZXNzPWZ1bmN0aW9uKCl7cmV0dXJuITF9O1t0RixDMWUsQTFlLGZ5LHNoLHg0XS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lyKGR5LHQpfSk7ZEI9MWUzLzYwLEQxZT17c2V0dXBEZXF1ZXVlaW5nOm8oZnVuY3Rpb24oZSl7cmV0dXJuIG8oZnVuY3Rpb24oKXt2YXIgbj10aGlzLGk9dGhpcy5yZW5kZXJlcjtpZighbi5kZXF1ZXVlaW5nU2V0dXApe24uZGVxdWV1ZWluZ1NldHVwPSEwO3ZhciBhPXA0KGZ1bmN0aW9uKCl7aS5yZWRyYXdIaW50KCJlbGVzIiwhMCksaS5yZWRyYXdIaW50KCJkcmFnIiwhMCksaS5yZWRyYXcoKX0sZS5kZXFSZWRyYXdUaHJlc2hvbGQpLHM9byhmdW5jdGlvbihoLGYpe3ZhciBkPW5oKCkscD1pLmF2ZXJhZ2VSZWRyYXdUaW1lLG09aS5sYXN0UmVkcmF3VGltZSxnPVtdLHk9aS5jeS5leHRlbnQoKSx2PWkuZ2V0UGl4ZWxSYXRpbygpO2ZvcihofHxpLmZsdXNoUmVuZGVyZWRTdHlsZVF1ZXVlKCk7Oyl7dmFyIHg9bmgoKSxiPXgtZCxUPXgtZjtpZihtPGRCKXt2YXIgUz1kQi0oaD9wOjApO2lmKFQ+PWUuZGVxRmFzdENvc3QqUylicmVha31lbHNlIGlmKGgpe2lmKGI+PWUuZGVxQ29zdCptfHxiPj1lLmRlcUF2Z0Nvc3QqcClicmVha31lbHNlIGlmKFQ+PWUuZGVxTm9EcmF3Q29zdCpkQilicmVhazt2YXIgdz1lLmRlcShuLHYseSk7aWYody5sZW5ndGg+MClmb3IodmFyIEU9MDtFPHcubGVuZ3RoO0UrKylnLnB1c2god1tFXSk7ZWxzZSBicmVha31nLmxlbmd0aD4wJiYoZS5vbkRlcWQobixnKSwhaCYmZS5zaG91bGRSZWRyYXcobixnLHYseSkmJmEoKSl9LCJkZXF1ZXVlIiksbD1lLnByaW9yaXR5fHx6QjtpLmJlZm9yZVJlbmRlcihzLGwobikpfX0sInNldHVwRGVxdWV1ZWluZ0ltcGwiKX0sInNldHVwRGVxdWV1ZWluZyIpfSxLWmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp6NjtWZih0aGlzLHQpLHRoaXMuaWRzQnlLZXk9bmV3IFpjLHRoaXMua2V5Rm9ySWQ9bmV3IFpjLHRoaXMuY2FjaGVzQnlMdmw9bmV3IFpjLHRoaXMubHZscz1bXSx0aGlzLmdldEtleT1lLHRoaXMuZG9lc0VsZUludmFsaWRhdGVLZXk9cn1yZXR1cm4gbyh0LCJFbGVtZW50VGV4dHVyZUNhY2hlTG9va3VwIiksVWYodCxbe2tleToiZ2V0SWRzRm9yIix2YWx1ZTpvKGZ1bmN0aW9uKHIpe3I9PW51bGwmJm9pKCJDYW4gbm90IGdldCBpZCBsaXN0IGZvciBudWxsIGtleSIpO3ZhciBuPXRoaXMuaWRzQnlLZXksaT10aGlzLmlkc0J5S2V5LmdldChyKTtyZXR1cm4gaXx8KGk9bmV3IGF5LG4uc2V0KHIsaSkpLGl9LCJnZXRJZHNGb3IiKX0se2tleToiYWRkSWRGb3JLZXkiLHZhbHVlOm8oZnVuY3Rpb24ocixuKXtyIT1udWxsJiZ0aGlzLmdldElkc0ZvcihyKS5hZGQobil9LCJhZGRJZEZvcktleSIpfSx7a2V5OiJkZWxldGVJZEZvcktleSIsdmFsdWU6byhmdW5jdGlvbihyLG4pe3IhPW51bGwmJnRoaXMuZ2V0SWRzRm9yKHIpLmRlbGV0ZShuKX0sImRlbGV0ZUlkRm9yS2V5Iil9LHtrZXk6ImdldE51bWJlck9mSWRzRm9yS2V5Iix2YWx1ZTpvKGZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsPzA6dGhpcy5nZXRJZHNGb3Iocikuc2l6ZX0sImdldE51bWJlck9mSWRzRm9yS2V5Iil9LHtrZXk6InVwZGF0ZUtleU1hcHBpbmdGb3IiLHZhbHVlOm8oZnVuY3Rpb24ocil7dmFyIG49ci5pZCgpLGk9dGhpcy5rZXlGb3JJZC5nZXQobiksYT10aGlzLmdldEtleShyKTt0aGlzLmRlbGV0ZUlkRm9yS2V5KGksbiksdGhpcy5hZGRJZEZvcktleShhLG4pLHRoaXMua2V5Rm9ySWQuc2V0KG4sYSl9LCJ1cGRhdGVLZXlNYXBwaW5nRm9yIil9LHtrZXk6ImRlbGV0ZUtleU1hcHBpbmdGb3IiLHZhbHVlOm8oZnVuY3Rpb24ocil7dmFyIG49ci5pZCgpLGk9dGhpcy5rZXlGb3JJZC5nZXQobik7dGhpcy5kZWxldGVJZEZvcktleShpLG4pLHRoaXMua2V5Rm9ySWQuZGVsZXRlKG4pfSwiZGVsZXRlS2V5TWFwcGluZ0ZvciIpfSx7a2V5OiJrZXlIYXNDaGFuZ2VkRm9yIix2YWx1ZTpvKGZ1bmN0aW9uKHIpe3ZhciBuPXIuaWQoKSxpPXRoaXMua2V5Rm9ySWQuZ2V0KG4pLGE9dGhpcy5nZXRLZXkocik7cmV0dXJuIGkhPT1hfSwia2V5SGFzQ2hhbmdlZEZvciIpfSx7a2V5OiJpc0ludmFsaWQiLHZhbHVlOm8oZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMua2V5SGFzQ2hhbmdlZEZvcihyKXx8dGhpcy5kb2VzRWxlSW52YWxpZGF0ZUtleShyKX0sImlzSW52YWxpZCIpfSx7a2V5OiJnZXRDYWNoZXNBdCIsdmFsdWU6byhmdW5jdGlvbihyKXt2YXIgbj10aGlzLmNhY2hlc0J5THZsLGk9dGhpcy5sdmxzLGE9bi5nZXQocik7cmV0dXJuIGF8fChhPW5ldyBaYyxuLnNldChyLGEpLGkucHVzaChyKSksYX0sImdldENhY2hlc0F0Iil9LHtrZXk6ImdldENhY2hlIix2YWx1ZTpvKGZ1bmN0aW9uKHIsbil7cmV0dXJuIHRoaXMuZ2V0Q2FjaGVzQXQobikuZ2V0KHIpfSwiZ2V0Q2FjaGUiKX0se2tleToiZ2V0Iix2YWx1ZTpvKGZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5nZXRLZXkociksYT10aGlzLmdldENhY2hlKGksbik7cmV0dXJuIGEhPW51bGwmJnRoaXMudXBkYXRlS2V5TWFwcGluZ0ZvcihyKSxhfSwiZ2V0Iil9LHtrZXk6ImdldEZvckNhY2hlZEtleSIsdmFsdWU6byhmdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMua2V5Rm9ySWQuZ2V0KHIuaWQoKSksYT10aGlzLmdldENhY2hlKGksbik7cmV0dXJuIGF9LCJnZXRGb3JDYWNoZWRLZXkiKX0se2tleToiaGFzQ2FjaGUiLHZhbHVlOm8oZnVuY3Rpb24ocixuKXtyZXR1cm4gdGhpcy5nZXRDYWNoZXNBdChuKS5oYXMocil9LCJoYXNDYWNoZSIpfSx7a2V5OiJoYXMiLHZhbHVlOm8oZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLmdldEtleShyKTtyZXR1cm4gdGhpcy5oYXNDYWNoZShpLG4pfSwiaGFzIil9LHtrZXk6InNldENhY2hlIix2YWx1ZTpvKGZ1bmN0aW9uKHIsbixpKXtpLmtleT1yLHRoaXMuZ2V0Q2FjaGVzQXQobikuc2V0KHIsaSl9LCJzZXRDYWNoZSIpfSx7a2V5OiJzZXQiLHZhbHVlOm8oZnVuY3Rpb24ocixuLGkpe3ZhciBhPXRoaXMuZ2V0S2V5KHIpO3RoaXMuc2V0Q2FjaGUoYSxuLGkpLHRoaXMudXBkYXRlS2V5TWFwcGluZ0ZvcihyKX0sInNldCIpfSx7a2V5OiJkZWxldGVDYWNoZSIsdmFsdWU6byhmdW5jdGlvbihyLG4pe3RoaXMuZ2V0Q2FjaGVzQXQobikuZGVsZXRlKHIpfSwiZGVsZXRlQ2FjaGUiKX0se2tleToiZGVsZXRlIix2YWx1ZTpvKGZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5nZXRLZXkocik7dGhpcy5kZWxldGVDYWNoZShpLG4pfSwiX2RlbGV0ZSIpfSx7a2V5OiJpbnZhbGlkYXRlS2V5Iix2YWx1ZTpvKGZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7dGhpcy5sdmxzLmZvckVhY2goZnVuY3Rpb24oaSl7cmV0dXJuIG4uZGVsZXRlQ2FjaGUocixpKX0pfSwiaW52YWxpZGF0ZUtleSIpfSx7a2V5OiJpbnZhbGlkYXRlIix2YWx1ZTpvKGZ1bmN0aW9uKHIpe3ZhciBuPXIuaWQoKSxpPXRoaXMua2V5Rm9ySWQuZ2V0KG4pO3RoaXMuZGVsZXRlS2V5TWFwcGluZ0ZvcihyKTt2YXIgYT10aGlzLmRvZXNFbGVJbnZhbGlkYXRlS2V5KHIpO3JldHVybiBhJiZ0aGlzLmludmFsaWRhdGVLZXkoaSksYXx8dGhpcy5nZXROdW1iZXJPZklkc0ZvcktleShpKT09PTB9LCJpbnZhbGlkYXRlIil9XSksdH0oKSxIbWU9MjUsQzY9NTAsQjY9LTQsTkI9MyxMMWU9Ny45OSxRWmU9OCxaWmU9MTAyNCxKWmU9MTAyNCxlSmU9MTAyNCx0SmU9LjIsckplPS44LG5KZT0xMCxpSmU9LjE1LGFKZT0uMSxzSmU9Ljksb0plPS45LGxKZT0xMDAsY0plPTEsSzE9e2RlcXVldWU6ImRlcXVldWUiLGRvd25zY2FsZToiZG93bnNjYWxlIixoaWdoUXVhbGl0eToiaGlnaFF1YWxpdHkifSx1SmU9b2Eoe2dldEtleTpudWxsLGRvZXNFbGVJbnZhbGlkYXRlS2V5Ono2LGRyYXdFbGVtZW50Om51bGwsZ2V0Qm91bmRpbmdCb3g6bnVsbCxnZXRSb3RhdGlvblBvaW50Om51bGwsZ2V0Um90YXRpb25PZmZzZXQ6bnVsbCxpc1Zpc2libGU6YmdlLGFsbG93RWRnZVR4ckNhY2hpbmc6ITAsYWxsb3dQYXJlbnRUeHJDYWNoaW5nOiEwfSksamI9byhmdW5jdGlvbihlLHIpe3ZhciBuPXRoaXM7bi5yZW5kZXJlcj1lLG4ub25EZXF1ZXVlcz1bXTt2YXIgaT11SmUocik7aXIobixpKSxuLmxvb2t1cD1uZXcgS1plKGkuZ2V0S2V5LGkuZG9lc0VsZUludmFsaWRhdGVLZXkpLG4uc2V0dXBEZXF1ZXVlaW5nKCl9LCJFbGVtZW50VGV4dHVyZUNhY2hlIiksWWk9amIucHJvdG90eXBlO1lpLnJlYXNvbnM9SzE7WWkuZ2V0VGV4dHVyZVF1ZXVlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIGUuZWxlSW1nQ2FjaGVzPWUuZWxlSW1nQ2FjaGVzfHx7fSxlLmVsZUltZ0NhY2hlc1t0XT1lLmVsZUltZ0NhY2hlc1t0XXx8W119O1lpLmdldFJldGlyZWRUZXh0dXJlUXVldWU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWUuZWxlSW1nQ2FjaGVzLnJldGlyZWQ9ZS5lbGVJbWdDYWNoZXMucmV0aXJlZHx8e30sbj1yW3RdPXJbdF18fFtdO3JldHVybiBufTtZaS5nZXRFbGVtZW50UXVldWU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dC5lbGVDYWNoZVF1ZXVlPXQuZWxlQ2FjaGVRdWV1ZXx8bmV3IG00KGZ1bmN0aW9uKHIsbil7cmV0dXJuIG4ucmVxcy1yLnJlcXN9KTtyZXR1cm4gZX07WWkuZ2V0RWxlbWVudEtleVRvUXVldWU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dC5lbGVLZXlUb0NhY2hlUXVldWU9dC5lbGVLZXlUb0NhY2hlUXVldWV8fHt9O3JldHVybiBlfTtZaS5nZXRFbGVtZW50PWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9dGhpcyxzPXRoaXMucmVuZGVyZXIsbD1zLmN5Lnpvb20oKSx1PXRoaXMubG9va3VwO2lmKCFlfHxlLnc9PT0wfHxlLmg9PT0wfHxpc05hTihlLncpfHxpc05hTihlLmgpfHwhdC52aXNpYmxlKCl8fHQucmVtb3ZlZCgpfHwhYS5hbGxvd0VkZ2VUeHJDYWNoaW5nJiZ0LmlzRWRnZSgpfHwhYS5hbGxvd1BhcmVudFR4ckNhY2hpbmcmJnQuaXNQYXJlbnQoKSlyZXR1cm4gbnVsbDtpZihuPT1udWxsJiYobj1NYXRoLmNlaWwoVkIobCpyKSkpLG48QjYpbj1CNjtlbHNlIGlmKGw+PUwxZXx8bj5OQilyZXR1cm4gbnVsbDt2YXIgaD1NYXRoLnBvdygyLG4pLGY9ZS5oKmgsZD1lLncqaCxwPXMuZWxlVGV4dEJpZ2dlclRoYW5NaW4odCxoKTtpZighdGhpcy5pc1Zpc2libGUodCxwKSlyZXR1cm4gbnVsbDt2YXIgbT11LmdldCh0LG4pO2lmKG0mJm0uaW52YWxpZGF0ZWQmJihtLmludmFsaWRhdGVkPSExLG0udGV4dHVyZS5pbnZhbGlkYXRlZFdpZHRoLT1tLndpZHRoKSxtKXJldHVybiBtO3ZhciBnO2lmKGY8PUhtZT9nPUhtZTpmPD1DNj9nPUM2Omc9TWF0aC5jZWlsKGYvQzYpKkM2LGY+ZUplfHxkPkpaZSlyZXR1cm4gbnVsbDt2YXIgeT1hLmdldFRleHR1cmVRdWV1ZShnKSx2PXlbeS5sZW5ndGgtMl0seD1vKGZ1bmN0aW9uKCl7cmV0dXJuIGEucmVjeWNsZVRleHR1cmUoZyxkKXx8YS5hZGRUZXh0dXJlKGcsZCl9LCJhZGROZXdUeHIiKTt2fHwodj15W3kubGVuZ3RoLTFdKSx2fHwodj14KCkpLHYud2lkdGgtdi51c2VkV2lkdGg8ZCYmKHY9eCgpKTtmb3IodmFyIGI9byhmdW5jdGlvbihNKXtyZXR1cm4gTSYmTS5zY2FsZWRMYWJlbFNob3duPT09cH0sInNjYWxhYmxlRnJvbSIpLFQ9aSYmaT09PUsxLmRlcXVldWUsUz1pJiZpPT09SzEuaGlnaFF1YWxpdHksdz1pJiZpPT09SzEuZG93bnNjYWxlLEUsXz1uKzE7Xzw9TkI7XysrKXt2YXIgQz11LmdldCh0LF8pO2lmKEMpe0U9QzticmVha319dmFyIEQ9RSYmRS5sZXZlbD09PW4rMT9FOm51bGwsTz1vKGZ1bmN0aW9uKCl7di5jb250ZXh0LmRyYXdJbWFnZShELnRleHR1cmUuY2FudmFzLEQueCwwLEQud2lkdGgsRC5oZWlnaHQsdi51c2VkV2lkdGgsMCxkLGYpfSwiZG93bnNjYWxlIik7aWYodi5jb250ZXh0LnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksdi5jb250ZXh0LmNsZWFyUmVjdCh2LnVzZWRXaWR0aCwwLGQsZyksYihEKSlPKCk7ZWxzZSBpZihiKEUpKWlmKFMpe2Zvcih2YXIgUj1FLmxldmVsO1I+bjtSLS0pRD1hLmdldEVsZW1lbnQodCxlLHIsUixLMS5kb3duc2NhbGUpO08oKX1lbHNlIHJldHVybiBhLnF1ZXVlRWxlbWVudCh0LEUubGV2ZWwtMSksRTtlbHNle3ZhciBrO2lmKCFUJiYhUyYmIXcpZm9yKHZhciBMPW4tMTtMPj1CNjtMLS0pe3ZhciBBPXUuZ2V0KHQsTCk7aWYoQSl7az1BO2JyZWFrfX1pZihiKGspKXJldHVybiBhLnF1ZXVlRWxlbWVudCh0LG4pLGs7di5jb250ZXh0LnRyYW5zbGF0ZSh2LnVzZWRXaWR0aCwwKSx2LmNvbnRleHQuc2NhbGUoaCxoKSx0aGlzLmRyYXdFbGVtZW50KHYuY29udGV4dCx0LGUscCwhMSksdi5jb250ZXh0LnNjYWxlKDEvaCwxL2gpLHYuY29udGV4dC50cmFuc2xhdGUoLXYudXNlZFdpZHRoLDApfXJldHVybiBtPXt4OnYudXNlZFdpZHRoLHRleHR1cmU6dixsZXZlbDpuLHNjYWxlOmgsd2lkdGg6ZCxoZWlnaHQ6ZixzY2FsZWRMYWJlbFNob3duOnB9LHYudXNlZFdpZHRoKz1NYXRoLmNlaWwoZCtRWmUpLHYuZWxlQ2FjaGVzLnB1c2gobSksdS5zZXQodCxuLG0pLGEuY2hlY2tUZXh0dXJlRnVsbG5lc3ModiksbX07WWkuaW52YWxpZGF0ZUVsZW1lbnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXRoaXMuaW52YWxpZGF0ZUVsZW1lbnQodFtlXSl9O1lpLmludmFsaWRhdGVFbGVtZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj1lLmxvb2t1cCxuPVtdLGk9ci5pc0ludmFsaWQodCk7aWYoaSl7Zm9yKHZhciBhPUI2O2E8PU5CO2ErKyl7dmFyIHM9ci5nZXRGb3JDYWNoZWRLZXkodCxhKTtzJiZuLnB1c2gocyl9dmFyIGw9ci5pbnZhbGlkYXRlKHQpO2lmKGwpZm9yKHZhciB1PTA7dTxuLmxlbmd0aDt1Kyspe3ZhciBoPW5bdV0sZj1oLnRleHR1cmU7Zi5pbnZhbGlkYXRlZFdpZHRoKz1oLndpZHRoLGguaW52YWxpZGF0ZWQ9ITAsZS5jaGVja1RleHR1cmVVdGlsaXR5KGYpfWUucmVtb3ZlRnJvbVF1ZXVlKHQpfX07WWkuY2hlY2tUZXh0dXJlVXRpbGl0eT1mdW5jdGlvbih0KXt0LmludmFsaWRhdGVkV2lkdGg+PXRKZSp0LndpZHRoJiZ0aGlzLnJldGlyZVRleHR1cmUodCl9O1lpLmNoZWNrVGV4dHVyZUZ1bGxuZXNzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj1lLmdldFRleHR1cmVRdWV1ZSh0LmhlaWdodCk7dC51c2VkV2lkdGgvdC53aWR0aD5ySmUmJnQuZnVsbG5lc3NDaGVja3M+PW5KZT9GZihyLHQpOnQuZnVsbG5lc3NDaGVja3MrK307WWkucmV0aXJlVGV4dHVyZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9dC5oZWlnaHQsbj1lLmdldFRleHR1cmVRdWV1ZShyKSxpPXRoaXMubG9va3VwO0ZmKG4sdCksdC5yZXRpcmVkPSEwO2Zvcih2YXIgYT10LmVsZUNhY2hlcyxzPTA7czxhLmxlbmd0aDtzKyspe3ZhciBsPWFbc107aS5kZWxldGVDYWNoZShsLmtleSxsLmxldmVsKX1HQihhKTt2YXIgdT1lLmdldFJldGlyZWRUZXh0dXJlUXVldWUocik7dS5wdXNoKHQpfTtZaS5hZGRUZXh0dXJlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxuPXIuZ2V0VGV4dHVyZVF1ZXVlKHQpLGk9e307cmV0dXJuIG4ucHVzaChpKSxpLmVsZUNhY2hlcz1bXSxpLmhlaWdodD10LGkud2lkdGg9TWF0aC5tYXgoWlplLGUpLGkudXNlZFdpZHRoPTAsaS5pbnZhbGlkYXRlZFdpZHRoPTAsaS5mdWxsbmVzc0NoZWNrcz0wLGkuY2FudmFzPXIucmVuZGVyZXIubWFrZU9mZnNjcmVlbkNhbnZhcyhpLndpZHRoLGkuaGVpZ2h0KSxpLmNvbnRleHQ9aS5jYW52YXMuZ2V0Q29udGV4dCgiMmQiKSxpfTtZaS5yZWN5Y2xlVGV4dHVyZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLG49ci5nZXRUZXh0dXJlUXVldWUodCksaT1yLmdldFJldGlyZWRUZXh0dXJlUXVldWUodCksYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgcz1pW2FdO2lmKHMud2lkdGg+PWUpcmV0dXJuIHMucmV0aXJlZD0hMSxzLnVzZWRXaWR0aD0wLHMuaW52YWxpZGF0ZWRXaWR0aD0wLHMuZnVsbG5lc3NDaGVja3M9MCxHQihzLmVsZUNhY2hlcykscy5jb250ZXh0LnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCkscy5jb250ZXh0LmNsZWFyUmVjdCgwLDAscy53aWR0aCxzLmhlaWdodCksRmYoaSxzKSxuLnB1c2gocyksc319O1lpLnF1ZXVlRWxlbWVudD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMsbj1yLmdldEVsZW1lbnRRdWV1ZSgpLGk9ci5nZXRFbGVtZW50S2V5VG9RdWV1ZSgpLGE9dGhpcy5nZXRLZXkodCkscz1pW2FdO2lmKHMpcy5sZXZlbD1NYXRoLm1heChzLmxldmVsLGUpLHMuZWxlcy5tZXJnZSh0KSxzLnJlcXMrKyxuLnVwZGF0ZUl0ZW0ocyk7ZWxzZXt2YXIgbD17ZWxlczp0LnNwYXduKCkubWVyZ2UodCksbGV2ZWw6ZSxyZXFzOjEsa2V5OmF9O24ucHVzaChsKSxpW2FdPWx9fTtZaS5kZXF1ZXVlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLHI9ZS5nZXRFbGVtZW50UXVldWUoKSxuPWUuZ2V0RWxlbWVudEtleVRvUXVldWUoKSxpPVtdLGE9ZS5sb29rdXAscz0wO3M8Y0plJiZyLnNpemUoKT4wO3MrKyl7dmFyIGw9ci5wb3AoKSx1PWwua2V5LGg9bC5lbGVzWzBdLGY9YS5oYXNDYWNoZShoLGwubGV2ZWwpO2lmKG5bdV09bnVsbCxmKWNvbnRpbnVlO2kucHVzaChsKTt2YXIgZD1lLmdldEJvdW5kaW5nQm94KGgpO2UuZ2V0RWxlbWVudChoLGQsdCxsLmxldmVsLEsxLmRlcXVldWUpfXJldHVybiBpfTtZaS5yZW1vdmVGcm9tUXVldWU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWUuZ2V0RWxlbWVudFF1ZXVlKCksbj1lLmdldEVsZW1lbnRLZXlUb1F1ZXVlKCksaT10aGlzLmdldEtleSh0KSxhPW5baV07YSE9bnVsbCYmKGEuZWxlcy5sZW5ndGg9PT0xPyhhLnJlcXM9JEIsci51cGRhdGVJdGVtKGEpLHIucG9wKCksbltpXT1udWxsKTphLmVsZXMudW5tZXJnZSh0KSl9O1lpLm9uRGVxdWV1ZT1mdW5jdGlvbih0KXt0aGlzLm9uRGVxdWV1ZXMucHVzaCh0KX07WWkub2ZmRGVxdWV1ZT1mdW5jdGlvbih0KXtGZih0aGlzLm9uRGVxdWV1ZXMsdCl9O1lpLnNldHVwRGVxdWV1ZWluZz1EMWUuc2V0dXBEZXF1ZXVlaW5nKHtkZXFSZWRyYXdUaHJlc2hvbGQ6bEplLGRlcUNvc3Q6aUplLGRlcUF2Z0Nvc3Q6YUplLGRlcU5vRHJhd0Nvc3Q6c0plLGRlcUZhc3RDb3N0Om9KZSxkZXE6byhmdW5jdGlvbihlLHIsbil7cmV0dXJuIGUuZGVxdWV1ZShyLG4pfSwiZGVxIiksb25EZXFkOm8oZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49MDtuPGUub25EZXF1ZXVlcy5sZW5ndGg7bisrKXt2YXIgaT1lLm9uRGVxdWV1ZXNbbl07aShyKX19LCJvbkRlcWQiKSxzaG91bGRSZWRyYXc6byhmdW5jdGlvbihlLHIsbixpKXtmb3IodmFyIGE9MDthPHIubGVuZ3RoO2ErKylmb3IodmFyIHM9clthXS5lbGVzLGw9MDtsPHMubGVuZ3RoO2wrKyl7dmFyIHU9c1tsXS5ib3VuZGluZ0JveCgpO2lmKFVCKHUsaSkpcmV0dXJuITB9cmV0dXJuITF9LCJzaG91bGRSZWRyYXciKSxwcmlvcml0eTpvKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlbmRlcmVyLmJlZm9yZVJlbmRlclByaW9yaXRpZXMuZWxlVHhyRGVxfSwicHJpb3JpdHkiKX0pO2hKZT0xLFFiPS00LFg2PTIsZkplPTMuOTksZEplPTUwLHBKZT01MCxtSmU9LjE1LGdKZT0uMSx5SmU9LjksdkplPS45LHhKZT0xLFdtZT0yNTAsYkplPTRlMyo0ZTMscW1lPTMyNzY3LFRKZT0hMCxSMWU9byhmdW5jdGlvbihlKXt2YXIgcj10aGlzLG49ci5yZW5kZXJlcj1lLGk9bi5jeTtyLmxheWVyc0J5TGV2ZWw9e30sci5maXJzdEdldD0hMCxyLmxhc3RJbnZhbGlkYXRpb25UaW1lPW5oKCktMipXbWUsci5za2lwcGluZz0hMSxyLmVsZVR4ckRlcXM9aS5jb2xsZWN0aW9uKCksci5zY2hlZHVsZUVsZW1lbnRSZWZpbmVtZW50PXA0KGZ1bmN0aW9uKCl7ci5yZWZpbmVFbGVtZW50VGV4dHVyZXMoci5lbGVUeHJEZXFzKSxyLmVsZVR4ckRlcXMudW5tZXJnZShyLmVsZVR4ckRlcXMpfSxwSmUpLG4uYmVmb3JlUmVuZGVyKGZ1bmN0aW9uKHMsbCl7bC1yLmxhc3RJbnZhbGlkYXRpb25UaW1lPD1XbWU/ci5za2lwcGluZz0hMDpyLnNraXBwaW5nPSExfSxuLmJlZm9yZVJlbmRlclByaW9yaXRpZXMubHlyVHhyU2tpcCk7dmFyIGE9byhmdW5jdGlvbihsLHUpe3JldHVybiB1LnJlcXMtbC5yZXFzfSwicVNvcnQiKTtyLmxheWVyc1F1ZXVlPW5ldyBtNChhKSxyLnNldHVwRGVxdWV1ZWluZygpfSwiTGF5ZXJlZFRleHR1cmVDYWNoZSIpLENhPVIxZS5wcm90b3R5cGUsWW1lPTAsd0plPU1hdGgucG93KDIsNTMpLTE7Q2EubWFrZUxheWVyPWZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5wb3coMixlKSxuPU1hdGguY2VpbCh0LncqciksaT1NYXRoLmNlaWwodC5oKnIpLGE9dGhpcy5yZW5kZXJlci5tYWtlT2Zmc2NyZWVuQ2FudmFzKG4saSkscz17aWQ6WW1lPSsrWW1lJXdKZSxiYjp0LGxldmVsOmUsd2lkdGg6bixoZWlnaHQ6aSxjYW52YXM6YSxjb250ZXh0OmEuZ2V0Q29udGV4dCgiMmQiKSxlbGVzOltdLGVsZXNRdWV1ZTpbXSxyZXFzOjB9LGw9cy5jb250ZXh0LHU9LXMuYmIueDEsaD0tcy5iYi55MTtyZXR1cm4gbC5zY2FsZShyLHIpLGwudHJhbnNsYXRlKHUsaCksc307Q2EuZ2V0TGF5ZXJzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLGk9bi5yZW5kZXJlcixhPWkuY3kscz1hLnpvb20oKSxsPW4uZmlyc3RHZXQ7aWYobi5maXJzdEdldD0hMSxyPT1udWxsKXtpZihyPU1hdGguY2VpbChWQihzKmUpKSxyPFFiKXI9UWI7ZWxzZSBpZihzPj1mSmV8fHI+WDYpcmV0dXJuIG51bGx9bi52YWxpZGF0ZUxheWVyc0VsZXNPcmRlcmluZyhyLHQpO3ZhciB1PW4ubGF5ZXJzQnlMZXZlbCxoPU1hdGgucG93KDIsciksZj11W3JdPXVbcl18fFtdLGQscD1uLmxldmVsSXNDb21wbGV0ZShyLHQpLG0sZz1vKGZ1bmN0aW9uKCl7dmFyIE89byhmdW5jdGlvbihJKXtpZihuLnZhbGlkYXRlTGF5ZXJzRWxlc09yZGVyaW5nKEksdCksbi5sZXZlbElzQ29tcGxldGUoSSx0KSlyZXR1cm4gbT11W0ldLCEwfSwiY2FuVXNlQXNUbXBMdmwiKSxSPW8oZnVuY3Rpb24oSSl7aWYoIW0pZm9yKHZhciBNPXIrSTtRYjw9TSYmTTw9WDYmJiFPKE0pO00rPUkpO30sImNoZWNrTHZscyIpO1IoMSksUigtMSk7Zm9yKHZhciBrPWYubGVuZ3RoLTE7az49MDtrLS0pe3ZhciBMPWZba107TC5pbnZhbGlkJiZGZihmLEwpfX0sImNoZWNrVGVtcExldmVscyIpO2lmKCFwKWcoKTtlbHNlIHJldHVybiBmO3ZhciB5PW8oZnVuY3Rpb24oKXtpZighZCl7ZD1ZcygpO2Zvcih2YXIgTz0wO088dC5sZW5ndGg7TysrKUNnZShkLHRbT10uYm91bmRpbmdCb3goKSl9cmV0dXJuIGR9LCJnZXRCYiIpLHY9byhmdW5jdGlvbihPKXtPPU98fHt9O3ZhciBSPU8uYWZ0ZXI7eSgpO3ZhciBrPU1hdGguY2VpbChkLncqaCksTD1NYXRoLmNlaWwoZC5oKmgpO2lmKGs+cW1lfHxMPnFtZSlyZXR1cm4gbnVsbDt2YXIgQT1rKkw7aWYoQT5iSmUpcmV0dXJuIG51bGw7dmFyIEk9bi5tYWtlTGF5ZXIoZCxyKTtpZihSIT1udWxsKXt2YXIgTT1mLmluZGV4T2YoUikrMTtmLnNwbGljZShNLDAsSSl9ZWxzZShPLmluc2VydD09PXZvaWQgMHx8Ty5pbnNlcnQpJiZmLnVuc2hpZnQoSSk7cmV0dXJuIEl9LCJtYWtlTGF5ZXIiKTtpZihuLnNraXBwaW5nJiYhbClyZXR1cm4gbnVsbDtmb3IodmFyIHg9bnVsbCxiPXQubGVuZ3RoL2hKZSxUPSFsLFM9MDtTPHQubGVuZ3RoO1MrKyl7dmFyIHc9dFtTXSxFPXcuX3ByaXZhdGUucnNjcmF0Y2gsXz1FLmltZ0xheWVyQ2FjaGVzPUUuaW1nTGF5ZXJDYWNoZXN8fHt9LEM9X1tyXTtpZihDKXt4PUM7Y29udGludWV9aWYoKCF4fHx4LmVsZXMubGVuZ3RoPj1ifHwhQWdlKHguYmIsdy5ib3VuZGluZ0JveCgpKSkmJih4PXYoe2luc2VydDohMCxhZnRlcjp4fSksIXgpKXJldHVybiBudWxsO218fFQ/bi5xdWV1ZUxheWVyKHgsdyk6bi5kcmF3RWxlSW5MYXllcih4LHcscixlKSx4LmVsZXMucHVzaCh3KSxfW3JdPXh9cmV0dXJuIG18fChUP251bGw6Zil9O0NhLmdldEVsZUxldmVsRm9yTGF5ZXJMZXZlbD1mdW5jdGlvbih0LGUpe3JldHVybiB0fTtDYS5kcmF3RWxlSW5MYXllcj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLGE9dGhpcy5yZW5kZXJlcixzPXQuY29udGV4dCxsPWUuYm91bmRpbmdCb3goKTtsLnc9PT0wfHxsLmg9PT0wfHwhZS52aXNpYmxlKCl8fChyPWkuZ2V0RWxlTGV2ZWxGb3JMYXllckxldmVsKHIsbiksYS5zZXRJbWdTbW9vdGhpbmcocywhMSksYS5kcmF3Q2FjaGVkRWxlbWVudChzLGUsbnVsbCxudWxsLHIsVEplKSxhLnNldEltZ1Ntb290aGluZyhzLCEwKSl9O0NhLmxldmVsSXNDb21wbGV0ZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMsbj1yLmxheWVyc0J5TGV2ZWxbdF07aWYoIW58fG4ubGVuZ3RoPT09MClyZXR1cm4hMTtmb3IodmFyIGk9MCxhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBzPW5bYV07aWYocy5yZXFzPjB8fHMuaW52YWxpZClyZXR1cm4hMTtpKz1zLmVsZXMubGVuZ3RofXJldHVybiBpPT09ZS5sZW5ndGh9O0NhLnZhbGlkYXRlTGF5ZXJzRWxlc09yZGVyaW5nPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sYXllcnNCeUxldmVsW3RdO2lmKHIpZm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspe2Zvcih2YXIgaT1yW25dLGE9LTEscz0wO3M8ZS5sZW5ndGg7cysrKWlmKGkuZWxlc1swXT09PWVbc10pe2E9czticmVha31pZihhPDApe3RoaXMuaW52YWxpZGF0ZUxheWVyKGkpO2NvbnRpbnVlfWZvcih2YXIgbD1hLHM9MDtzPGkuZWxlcy5sZW5ndGg7cysrKWlmKGkuZWxlc1tzXSE9PWVbbCtzXSl7dGhpcy5pbnZhbGlkYXRlTGF5ZXIoaSk7YnJlYWt9fX07Q2EudXBkYXRlRWxlbWVudHNJbkxheWVycz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLG49ZjQodFswXSksaT0wO2k8dC5sZW5ndGg7aSsrKWZvcih2YXIgYT1uP251bGw6dFtpXSxzPW4/dFtpXTp0W2ldLmVsZSxsPXMuX3ByaXZhdGUucnNjcmF0Y2gsdT1sLmltZ0xheWVyQ2FjaGVzPWwuaW1nTGF5ZXJDYWNoZXN8fHt9LGg9UWI7aDw9WDY7aCsrKXt2YXIgZj11W2hdO2YmJihhJiZyLmdldEVsZUxldmVsRm9yTGF5ZXJMZXZlbChmLmxldmVsKSE9PWEubGV2ZWx8fGUoZixzLGEpKX19O0NhLmhhdmVMYXllcnM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPSExLHI9UWI7cjw9WDY7cisrKXt2YXIgbj10LmxheWVyc0J5TGV2ZWxbcl07aWYobiYmbi5sZW5ndGg+MCl7ZT0hMDticmVha319cmV0dXJuIGV9O0NhLmludmFsaWRhdGVFbGVtZW50cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3QubGVuZ3RoIT09MCYmKGUubGFzdEludmFsaWRhdGlvblRpbWU9bmgoKSwhKHQubGVuZ3RoPT09MHx8IWUuaGF2ZUxheWVycygpKSYmZS51cGRhdGVFbGVtZW50c0luTGF5ZXJzKHQsbyhmdW5jdGlvbihuLGksYSl7ZS5pbnZhbGlkYXRlTGF5ZXIobil9LCJpbnZhbEFzc29jTGF5ZXJzIikpKX07Q2EuaW52YWxpZGF0ZUxheWVyPWZ1bmN0aW9uKHQpe2lmKHRoaXMubGFzdEludmFsaWRhdGlvblRpbWU9bmgoKSwhdC5pbnZhbGlkKXt2YXIgZT10LmxldmVsLHI9dC5lbGVzLG49dGhpcy5sYXllcnNCeUxldmVsW2VdO0ZmKG4sdCksdC5lbGVzUXVldWU9W10sdC5pbnZhbGlkPSEwLHQucmVwbGFjZW1lbnQmJih0LnJlcGxhY2VtZW50LmludmFsaWQ9ITApO2Zvcih2YXIgaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYT1yW2ldLl9wcml2YXRlLnJzY3JhdGNoLmltZ0xheWVyQ2FjaGVzO2EmJihhW2VdPW51bGwpfX19O0NhLnJlZmluZUVsZW1lbnRUZXh0dXJlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2UudXBkYXRlRWxlbWVudHNJbkxheWVycyh0LG8oZnVuY3Rpb24obixpLGEpe3ZhciBzPW4ucmVwbGFjZW1lbnQ7aWYoc3x8KHM9bi5yZXBsYWNlbWVudD1lLm1ha2VMYXllcihuLmJiLG4ubGV2ZWwpLHMucmVwbGFjZXM9bixzLmVsZXM9bi5lbGVzKSwhcy5yZXFzKWZvcih2YXIgbD0wO2w8cy5lbGVzLmxlbmd0aDtsKyspZS5xdWV1ZUxheWVyKHMscy5lbGVzW2xdKX0sInJlZmluZUVhY2hFbGUiKSl9O0NhLmVucXVldWVFbGVtZW50UmVmaW5lbWVudD1mdW5jdGlvbih0KXt0aGlzLmVsZVR4ckRlcXMubWVyZ2UodCksdGhpcy5zY2hlZHVsZUVsZW1lbnRSZWZpbmVtZW50KCl9O0NhLnF1ZXVlTGF5ZXI9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLG49ci5sYXllcnNRdWV1ZSxpPXQuZWxlc1F1ZXVlLGE9aS5oYXNJZD1pLmhhc0lkfHx7fTtpZighdC5yZXBsYWNlbWVudCl7aWYoZSl7aWYoYVtlLmlkKCldKXJldHVybjtpLnB1c2goZSksYVtlLmlkKCldPSEwfXQucmVxcz8odC5yZXFzKyssbi51cGRhdGVJdGVtKHQpKToodC5yZXFzPTEsbi5wdXNoKHQpKX19O0NhLmRlcXVldWU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMscj1lLmxheWVyc1F1ZXVlLG49W10saT0wO2k8eEplJiZyLnNpemUoKSE9PTA7KXt2YXIgYT1yLnBlZWsoKTtpZihhLnJlcGxhY2VtZW50KXtyLnBvcCgpO2NvbnRpbnVlfWlmKGEucmVwbGFjZXMmJmEhPT1hLnJlcGxhY2VzLnJlcGxhY2VtZW50KXtyLnBvcCgpO2NvbnRpbnVlfWlmKGEuaW52YWxpZCl7ci5wb3AoKTtjb250aW51ZX12YXIgcz1hLmVsZXNRdWV1ZS5zaGlmdCgpO3MmJihlLmRyYXdFbGVJbkxheWVyKGEscyxhLmxldmVsLHQpLGkrKyksbi5sZW5ndGg9PT0wJiZuLnB1c2goITApLGEuZWxlc1F1ZXVlLmxlbmd0aD09PTAmJihyLnBvcCgpLGEucmVxcz0wLGEucmVwbGFjZXMmJmUuYXBwbHlMYXllclJlcGxhY2VtZW50KGEpLGUucmVxdWVzdFJlZHJhdygpKX1yZXR1cm4gbn07Q2EuYXBwbHlMYXllclJlcGxhY2VtZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj1lLmxheWVyc0J5TGV2ZWxbdC5sZXZlbF0sbj10LnJlcGxhY2VzLGk9ci5pbmRleE9mKG4pO2lmKCEoaTwwfHxuLmludmFsaWQpKXtyW2ldPXQ7Zm9yKHZhciBhPTA7YTx0LmVsZXMubGVuZ3RoO2ErKyl7dmFyIHM9dC5lbGVzW2FdLl9wcml2YXRlLGw9cy5pbWdMYXllckNhY2hlcz1zLmltZ0xheWVyQ2FjaGVzfHx7fTtsJiYobFt0LmxldmVsXT10KX1lLnJlcXVlc3RSZWRyYXcoKX19O0NhLnJlcXVlc3RSZWRyYXc9cDQoZnVuY3Rpb24oKXt2YXIgdD10aGlzLnJlbmRlcmVyO3QucmVkcmF3SGludCgiZWxlcyIsITApLHQucmVkcmF3SGludCgiZHJhZyIsITApLHQucmVkcmF3KCl9LDEwMCk7Q2Euc2V0dXBEZXF1ZXVlaW5nPUQxZS5zZXR1cERlcXVldWVpbmcoe2RlcVJlZHJhd1RocmVzaG9sZDpkSmUsZGVxQ29zdDptSmUsZGVxQXZnQ29zdDpnSmUsZGVxTm9EcmF3Q29zdDp5SmUsZGVxRmFzdENvc3Q6dkplLGRlcTpvKGZ1bmN0aW9uKGUscil7cmV0dXJuIGUuZGVxdWV1ZShyKX0sImRlcSIpLG9uRGVxZDp6QixzaG91bGRSZWRyYXc6YmdlLHByaW9yaXR5Om8oZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVuZGVyZXIuYmVmb3JlUmVuZGVyUHJpb3JpdGllcy5seXJUeHJEZXF9LCJwcmlvcml0eSIpfSk7TjFlPXt9O28oa0plLCJwb2x5Z29uIik7byhFSmUsInRyaWFuZ2xlQmFja2N1cnZlIik7byhqbWUsInRyaWFuZ2xlVGVlIik7byhTSmUsImNpcmNsZVRyaWFuZ2xlIik7byhDSmUsImNpcmNsZSIpO04xZS5hcnJvd1NoYXBlSW1wbD1mdW5jdGlvbih0KXtyZXR1cm4oWG1lfHwoWG1lPXtwb2x5Z29uOmtKZSwidHJpYW5nbGUtYmFja2N1cnZlIjpFSmUsInRyaWFuZ2xlLXRlZSI6am1lLCJjaXJjbGUtdHJpYW5nbGUiOlNKZSwidHJpYW5nbGUtY3Jvc3MiOmptZSxjaXJjbGU6Q0plfSkpW3RdfTt0dT17fTt0dS5kcmF3RWxlbWVudD1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIHM9dGhpcztlLmlzTm9kZSgpP3MuZHJhd05vZGUodCxlLHIsbixpLGEpOnMuZHJhd0VkZ2UodCxlLHIsbixpLGEpfTt0dS5kcmF3RWxlbWVudE92ZXJsYXk9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzO2UuaXNOb2RlKCk/ci5kcmF3Tm9kZU92ZXJsYXkodCxlKTpyLmRyYXdFZGdlT3ZlcmxheSh0LGUpfTt0dS5kcmF3RWxlbWVudFVuZGVybGF5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcztlLmlzTm9kZSgpP3IuZHJhd05vZGVVbmRlcmxheSh0LGUpOnIuZHJhd0VkZ2VVbmRlcmxheSh0LGUpfTt0dS5kcmF3Q2FjaGVkRWxlbWVudFBvcnRpb249ZnVuY3Rpb24odCxlLHIsbixpLGEscyxsKXt2YXIgdT10aGlzLGg9ci5nZXRCb3VuZGluZ0JveChlKTtpZighKGgudz09PTB8fGguaD09PTApKXt2YXIgZj1yLmdldEVsZW1lbnQoZSxoLG4saSxhKTtpZihmIT1udWxsKXt2YXIgZD1sKHUsZSk7aWYoZD09PTApcmV0dXJuO3ZhciBwPXModSxlKSxtPWgueDEsZz1oLnkxLHk9aC53LHY9aC5oLHgsYixULFMsdztpZihwIT09MCl7dmFyIEU9ci5nZXRSb3RhdGlvblBvaW50KGUpO1Q9RS54LFM9RS55LHQudHJhbnNsYXRlKFQsUyksdC5yb3RhdGUocCksdz11LmdldEltZ1Ntb290aGluZyh0KSx3fHx1LnNldEltZ1Ntb290aGluZyh0LCEwKTt2YXIgXz1yLmdldFJvdGF0aW9uT2Zmc2V0KGUpO3g9Xy54LGI9Xy55fWVsc2UgeD1tLGI9Zzt2YXIgQztkIT09MSYmKEM9dC5nbG9iYWxBbHBoYSx0Lmdsb2JhbEFscGhhPUMqZCksdC5kcmF3SW1hZ2UoZi50ZXh0dXJlLmNhbnZhcyxmLngsMCxmLndpZHRoLGYuaGVpZ2h0LHgsYix5LHYpLGQhPT0xJiYodC5nbG9iYWxBbHBoYT1DKSxwIT09MCYmKHQucm90YXRlKC1wKSx0LnRyYW5zbGF0ZSgtVCwtUyksd3x8dS5zZXRJbWdTbW9vdGhpbmcodCwhMSkpfWVsc2Ugci5kcmF3RWxlbWVudCh0LGUpfX07QUplPW8oZnVuY3Rpb24oKXtyZXR1cm4gMH0sImdldFplcm9Sb3RhdGlvbiIpLF9KZT1vKGZ1bmN0aW9uKGUscil7cmV0dXJuIGUuZ2V0VGV4dEFuZ2xlKHIsbnVsbCl9LCJnZXRMYWJlbFJvdGF0aW9uIiksREplPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gZS5nZXRUZXh0QW5nbGUociwic291cmNlIil9LCJnZXRTb3VyY2VMYWJlbFJvdGF0aW9uIiksTEplPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gZS5nZXRUZXh0QW5nbGUociwidGFyZ2V0Iil9LCJnZXRUYXJnZXRMYWJlbFJvdGF0aW9uIiksUkplPW8oZnVuY3Rpb24oZSxyKXtyZXR1cm4gci5lZmZlY3RpdmVPcGFjaXR5KCl9LCJnZXRPcGFjaXR5IikscEI9byhmdW5jdGlvbihlLHIpe3JldHVybiByLnBzdHlsZSgidGV4dC1vcGFjaXR5IikucGZWYWx1ZSpyLmVmZmVjdGl2ZU9wYWNpdHkoKX0sImdldFRleHRPcGFjaXR5Iik7dHUuZHJhd0NhY2hlZEVsZW1lbnQ9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBzPXRoaXMsbD1zLmRhdGEsdT1sLmVsZVR4ckNhY2hlLGg9bC5sYmxUeHJDYWNoZSxmPWwuc2xiVHhyQ2FjaGUsZD1sLnRsYlR4ckNhY2hlLHA9ZS5ib3VuZGluZ0JveCgpLG09YT09PSEwP3UucmVhc29ucy5oaWdoUXVhbGl0eTpudWxsO2lmKCEocC53PT09MHx8cC5oPT09MHx8IWUudmlzaWJsZSgpKSYmKCFufHxVQihwLG4pKSl7dmFyIGc9ZS5pc0VkZ2UoKSx5PWUuZWxlbWVudCgpLl9wcml2YXRlLnJzY3JhdGNoLmJhZExpbmU7cy5kcmF3RWxlbWVudFVuZGVybGF5KHQsZSkscy5kcmF3Q2FjaGVkRWxlbWVudFBvcnRpb24odCxlLHUscixpLG0sQUplLFJKZSksKCFnfHwheSkmJnMuZHJhd0NhY2hlZEVsZW1lbnRQb3J0aW9uKHQsZSxoLHIsaSxtLF9KZSxwQiksZyYmIXkmJihzLmRyYXdDYWNoZWRFbGVtZW50UG9ydGlvbih0LGUsZixyLGksbSxESmUscEIpLHMuZHJhd0NhY2hlZEVsZW1lbnRQb3J0aW9uKHQsZSxkLHIsaSxtLExKZSxwQikpLHMuZHJhd0VsZW1lbnRPdmVybGF5KHQsZSl9fTt0dS5kcmF3RWxlbWVudHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dGhpcyxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBpPWVbbl07ci5kcmF3RWxlbWVudCh0LGkpfX07dHUuZHJhd0NhY2hlZEVsZW1lbnRzPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT10aGlzLGE9MDthPGUubGVuZ3RoO2ErKyl7dmFyIHM9ZVthXTtpLmRyYXdDYWNoZWRFbGVtZW50KHQscyxyLG4pfX07dHUuZHJhd0NhY2hlZE5vZGVzPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT10aGlzLGE9MDthPGUubGVuZ3RoO2ErKyl7dmFyIHM9ZVthXTtzLmlzTm9kZSgpJiZpLmRyYXdDYWNoZWRFbGVtZW50KHQscyxyLG4pfX07dHUuZHJhd0xheWVyZWRFbGVtZW50cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLGE9aS5kYXRhLmx5clR4ckNhY2hlLmdldExheWVycyhlLHIpO2lmKGEpZm9yKHZhciBzPTA7czxhLmxlbmd0aDtzKyspe3ZhciBsPWFbc10sdT1sLmJiO3Uudz09PTB8fHUuaD09PTB8fHQuZHJhd0ltYWdlKGwuY2FudmFzLHUueDEsdS55MSx1LncsdS5oKX1lbHNlIGkuZHJhd0NhY2hlZEVsZW1lbnRzKHQsZSxyLG4pfTtvaD17fTtvaC5kcmF3RWRnZT1mdW5jdGlvbih0LGUscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiEwLGk9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOiEwLGE9YXJndW1lbnRzLmxlbmd0aD41JiZhcmd1bWVudHNbNV0hPT12b2lkIDA/YXJndW1lbnRzWzVdOiEwLHM9dGhpcyxsPWUuX3ByaXZhdGUucnNjcmF0Y2g7aWYoIShhJiYhZS52aXNpYmxlKCkpJiYhKGwuYmFkTGluZXx8bC5hbGxwdHM9PW51bGx8fGlzTmFOKGwuYWxscHRzWzBdKSkpe3ZhciB1O3ImJih1PXIsdC50cmFuc2xhdGUoLXUueDEsLXUueTEpKTt2YXIgaD1hP2UucHN0eWxlKCJvcGFjaXR5IikudmFsdWU6MSxmPWE/ZS5wc3R5bGUoImxpbmUtb3BhY2l0eSIpLnZhbHVlOjEsZD1lLnBzdHlsZSgiY3VydmUtc3R5bGUiKS52YWx1ZSxwPWUucHN0eWxlKCJsaW5lLXN0eWxlIikudmFsdWUsbT1lLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlLGc9ZS5wc3R5bGUoImxpbmUtY2FwIikudmFsdWUseT1lLnBzdHlsZSgibGluZS1vdXRsaW5lLXdpZHRoIikudmFsdWUsdj1lLnBzdHlsZSgibGluZS1vdXRsaW5lLWNvbG9yIikudmFsdWUseD1oKmYsYj1oKmYsVD1vKGZ1bmN0aW9uKCl7dmFyIEk9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOng7ZD09PSJzdHJhaWdodC10cmlhbmdsZSI/KHMuZWxlU3Ryb2tlU3R5bGUodCxlLEkpLHMuZHJhd0VkZ2VUcmlhbmdsZVBhdGgoZSx0LGwuYWxscHRzKSk6KHQubGluZVdpZHRoPW0sdC5saW5lQ2FwPWcscy5lbGVTdHJva2VTdHlsZSh0LGUsSSkscy5kcmF3RWRnZVBhdGgoZSx0LGwuYWxscHRzLHApLHQubGluZUNhcD0iYnV0dCIpfSwiZHJhd0xpbmUiKSxTPW8oZnVuY3Rpb24oKXt2YXIgST1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06eDtpZih0LmxpbmVXaWR0aD1tK3ksdC5saW5lQ2FwPWcseT4wKXMuY29sb3JTdHJva2VTdHlsZSh0LHZbMF0sdlsxXSx2WzJdLEkpO2Vsc2V7dC5saW5lQ2FwPSJidXR0IjtyZXR1cm59ZD09PSJzdHJhaWdodC10cmlhbmdsZSI/cy5kcmF3RWRnZVRyaWFuZ2xlUGF0aChlLHQsbC5hbGxwdHMpOihzLmRyYXdFZGdlUGF0aChlLHQsbC5hbGxwdHMscCksdC5saW5lQ2FwPSJidXR0Iil9LCJkcmF3TGluZU91dGxpbmUiKSx3PW8oZnVuY3Rpb24oKXtpJiZzLmRyYXdFZGdlT3ZlcmxheSh0LGUpfSwiZHJhd092ZXJsYXkiKSxFPW8oZnVuY3Rpb24oKXtpJiZzLmRyYXdFZGdlVW5kZXJsYXkodCxlKX0sImRyYXdVbmRlcmxheSIpLF89byhmdW5jdGlvbigpe3ZhciBJPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTpiO3MuZHJhd0Fycm93aGVhZHModCxlLEkpfSwiZHJhd0Fycm93cyIpLEM9byhmdW5jdGlvbigpe3MuZHJhd0VsZW1lbnRUZXh0KHQsZSxudWxsLG4pfSwiZHJhd1RleHQiKTt0LmxpbmVKb2luPSJyb3VuZCI7dmFyIEQ9ZS5wc3R5bGUoImdob3N0IikudmFsdWU9PT0ieWVzIjtpZihEKXt2YXIgTz1lLnBzdHlsZSgiZ2hvc3Qtb2Zmc2V0LXgiKS5wZlZhbHVlLFI9ZS5wc3R5bGUoImdob3N0LW9mZnNldC15IikucGZWYWx1ZSxrPWUucHN0eWxlKCJnaG9zdC1vcGFjaXR5IikudmFsdWUsTD14Kms7dC50cmFuc2xhdGUoTyxSKSxUKEwpLF8oTCksdC50cmFuc2xhdGUoLU8sLVIpfWVsc2UgUygpO0UoKSxUKCksXygpLHcoKSxDKCksciYmdC50cmFuc2xhdGUodS54MSx1LnkxKX19O00xZT1vKGZ1bmN0aW9uKGUpe2lmKCFbIm92ZXJsYXkiLCJ1bmRlcmxheSJdLmluY2x1ZGVzKGUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdGF0ZSIpO3JldHVybiBmdW5jdGlvbihyLG4pe2lmKG4udmlzaWJsZSgpKXt2YXIgaT1uLnBzdHlsZSgiIi5jb25jYXQoZSwiLW9wYWNpdHkiKSkudmFsdWU7aWYoaSE9PTApe3ZhciBhPXRoaXMscz1hLnVzZVBhdGhzKCksbD1uLl9wcml2YXRlLnJzY3JhdGNoLHU9bi5wc3R5bGUoIiIuY29uY2F0KGUsIi1wYWRkaW5nIikpLnBmVmFsdWUsaD0yKnUsZj1uLnBzdHlsZSgiIi5jb25jYXQoZSwiLWNvbG9yIikpLnZhbHVlO3IubGluZVdpZHRoPWgsbC5lZGdlVHlwZT09PSJzZWxmIiYmIXM/ci5saW5lQ2FwPSJidXR0IjpyLmxpbmVDYXA9InJvdW5kIixhLmNvbG9yU3Ryb2tlU3R5bGUocixmWzBdLGZbMV0sZlsyXSxpKSxhLmRyYXdFZGdlUGF0aChuLHIsbC5hbGxwdHMsInNvbGlkIil9fX19LCJkcmF3RWRnZU92ZXJsYXlVbmRlcmxheSIpO29oLmRyYXdFZGdlT3ZlcmxheT1NMWUoIm92ZXJsYXkiKTtvaC5kcmF3RWRnZVVuZGVybGF5PU0xZSgidW5kZXJsYXkiKTtvaC5kcmF3RWRnZVBhdGg9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dC5fcHJpdmF0ZS5yc2NyYXRjaCxhPWUscyxsPSExLHU9dGhpcy51c2VQYXRocygpLGg9dC5wc3R5bGUoImxpbmUtZGFzaC1wYXR0ZXJuIikucGZWYWx1ZSxmPXQucHN0eWxlKCJsaW5lLWRhc2gtb2Zmc2V0IikucGZWYWx1ZTtpZih1KXt2YXIgZD1yLmpvaW4oIiQiKSxwPWkucGF0aENhY2hlS2V5JiZpLnBhdGhDYWNoZUtleT09PWQ7cD8ocz1lPWkucGF0aENhY2hlLGw9ITApOihzPWU9bmV3IFBhdGgyRCxpLnBhdGhDYWNoZUtleT1kLGkucGF0aENhY2hlPXMpfWlmKGEuc2V0TGluZURhc2gpc3dpdGNoKG4pe2Nhc2UiZG90dGVkIjphLnNldExpbmVEYXNoKFsxLDFdKTticmVhaztjYXNlImRhc2hlZCI6YS5zZXRMaW5lRGFzaChoKSxhLmxpbmVEYXNoT2Zmc2V0PWY7YnJlYWs7Y2FzZSJzb2xpZCI6YS5zZXRMaW5lRGFzaChbXSk7YnJlYWt9aWYoIWwmJiFpLmJhZExpbmUpc3dpdGNoKGUuYmVnaW5QYXRoJiZlLmJlZ2luUGF0aCgpLGUubW92ZVRvKHJbMF0sclsxXSksaS5lZGdlVHlwZSl7Y2FzZSJiZXppZXIiOmNhc2Uic2VsZiI6Y2FzZSJjb21wb3VuZCI6Y2FzZSJtdWx0aWJlemllciI6Zm9yKHZhciBtPTI7bSszPHIubGVuZ3RoO20rPTQpZS5xdWFkcmF0aWNDdXJ2ZVRvKHJbbV0sclttKzFdLHJbbSsyXSxyW20rM10pO2JyZWFrO2Nhc2Uic3RyYWlnaHQiOmNhc2UiaGF5c3RhY2siOmZvcih2YXIgZz0yO2crMTxyLmxlbmd0aDtnKz0yKWUubGluZVRvKHJbZ10scltnKzFdKTticmVhaztjYXNlInNlZ21lbnRzIjppZihpLmlzUm91bmQpe3ZhciB5PXZvKGkucm91bmRDb3JuZXJzKSx2O3RyeXtmb3IoeS5zKCk7ISh2PXkubigpKS5kb25lOyl7dmFyIHg9di52YWx1ZTtUMWUoZSx4KX19Y2F0Y2goVCl7eS5lKFQpfWZpbmFsbHl7eS5mKCl9ZS5saW5lVG8ocltyLmxlbmd0aC0yXSxyW3IubGVuZ3RoLTFdKX1lbHNlIGZvcih2YXIgYj0yO2IrMTxyLmxlbmd0aDtiKz0yKWUubGluZVRvKHJbYl0scltiKzFdKTticmVha31lPWEsdT9lLnN0cm9rZShzKTplLnN0cm9rZSgpLGUuc2V0TGluZURhc2gmJmUuc2V0TGluZURhc2goW10pfTtvaC5kcmF3RWRnZVRyaWFuZ2xlUGF0aD1mdW5jdGlvbih0LGUscil7ZS5maWxsU3R5bGU9ZS5zdHJva2VTdHlsZTtmb3IodmFyIG49dC5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSxpPTA7aSsxPHIubGVuZ3RoO2krPTIpe3ZhciBhPVtyW2krMl0tcltpXSxyW2krM10tcltpKzFdXSxzPU1hdGguc3FydChhWzBdKmFbMF0rYVsxXSphWzFdKSxsPVthWzFdL3MsLWFbMF0vc10sdT1bbFswXSpuLzIsbFsxXSpuLzJdO2UuYmVnaW5QYXRoKCksZS5tb3ZlVG8ocltpXS11WzBdLHJbaSsxXS11WzFdKSxlLmxpbmVUbyhyW2ldK3VbMF0scltpKzFdK3VbMV0pLGUubGluZVRvKHJbaSsyXSxyW2krM10pLGUuY2xvc2VQYXRoKCksZS5maWxsKCl9fTtvaC5kcmF3QXJyb3doZWFkcz1mdW5jdGlvbih0LGUscil7dmFyIG49ZS5fcHJpdmF0ZS5yc2NyYXRjaCxpPW4uZWRnZVR5cGU9PT0iaGF5c3RhY2siO2l8fHRoaXMuZHJhd0Fycm93aGVhZCh0LGUsInNvdXJjZSIsbi5hcnJvd1N0YXJ0WCxuLmFycm93U3RhcnRZLG4uc3JjQXJyb3dBbmdsZSxyKSx0aGlzLmRyYXdBcnJvd2hlYWQodCxlLCJtaWQtdGFyZ2V0IixuLm1pZFgsbi5taWRZLG4ubWlkdGd0QXJyb3dBbmdsZSxyKSx0aGlzLmRyYXdBcnJvd2hlYWQodCxlLCJtaWQtc291cmNlIixuLm1pZFgsbi5taWRZLG4ubWlkc3JjQXJyb3dBbmdsZSxyKSxpfHx0aGlzLmRyYXdBcnJvd2hlYWQodCxlLCJ0YXJnZXQiLG4uYXJyb3dFbmRYLG4uYXJyb3dFbmRZLG4udGd0QXJyb3dBbmdsZSxyKX07b2guZHJhd0Fycm93aGVhZD1mdW5jdGlvbih0LGUscixuLGksYSxzKXtpZighKGlzTmFOKG4pfHxuPT1udWxsfHxpc05hTihpKXx8aT09bnVsbHx8aXNOYU4oYSl8fGE9PW51bGwpKXt2YXIgbD10aGlzLHU9ZS5wc3R5bGUocisiLWFycm93LXNoYXBlIikudmFsdWU7aWYodSE9PSJub25lIil7dmFyIGg9ZS5wc3R5bGUocisiLWFycm93LWZpbGwiKS52YWx1ZT09PSJob2xsb3ciPyJib3RoIjoiZmlsbGVkIixmPWUucHN0eWxlKHIrIi1hcnJvdy1maWxsIikudmFsdWUsZD1lLnBzdHlsZSgid2lkdGgiKS5wZlZhbHVlLHA9ZS5wc3R5bGUocisiLWFycm93LXdpZHRoIiksbT1wLnZhbHVlPT09Im1hdGNoLWxpbmUiP2Q6cC5wZlZhbHVlO3AudW5pdHM9PT0iJSImJihtKj1kKTt2YXIgZz1lLnBzdHlsZSgib3BhY2l0eSIpLnZhbHVlO3M9PT12b2lkIDAmJihzPWcpO3ZhciB5PXQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uOyhzIT09MXx8Zj09PSJob2xsb3ciKSYmKHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPSJkZXN0aW5hdGlvbi1vdXQiLGwuY29sb3JGaWxsU3R5bGUodCwyNTUsMjU1LDI1NSwxKSxsLmNvbG9yU3Ryb2tlU3R5bGUodCwyNTUsMjU1LDI1NSwxKSxsLmRyYXdBcnJvd1NoYXBlKGUsdCxoLGQsdSxtLG4saSxhKSx0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj15KTt2YXIgdj1lLnBzdHlsZShyKyItYXJyb3ctY29sb3IiKS52YWx1ZTtsLmNvbG9yRmlsbFN0eWxlKHQsdlswXSx2WzFdLHZbMl0scyksbC5jb2xvclN0cm9rZVN0eWxlKHQsdlswXSx2WzFdLHZbMl0scyksbC5kcmF3QXJyb3dTaGFwZShlLHQsZixkLHUsbSxuLGksYSl9fX07b2guZHJhd0Fycm93U2hhcGU9ZnVuY3Rpb24odCxlLHIsbixpLGEscyxsLHUpe3ZhciBoPXRoaXMsZj10aGlzLnVzZVBhdGhzKCkmJmkhPT0idHJpYW5nbGUtY3Jvc3MiLGQ9ITEscCxtPWUsZz17eDpzLHk6bH0seT10LnBzdHlsZSgiYXJyb3ctc2NhbGUiKS52YWx1ZSx2PXRoaXMuZ2V0QXJyb3dXaWR0aChuLHkpLHg9aC5hcnJvd1NoYXBlc1tpXTtpZihmKXt2YXIgYj1oLmFycm93UGF0aENhY2hlPWguYXJyb3dQYXRoQ2FjaGV8fFtdLFQ9QmYoaSksUz1iW1RdO1MhPW51bGw/KHA9ZT1TLGQ9ITApOihwPWU9bmV3IFBhdGgyRCxiW1RdPXApfWR8fChlLmJlZ2luUGF0aCYmZS5iZWdpblBhdGgoKSxmP3guZHJhdyhlLDEsMCx7eDowLHk6MH0sMSk6eC5kcmF3KGUsdix1LGcsbiksZS5jbG9zZVBhdGgmJmUuY2xvc2VQYXRoKCkpLGU9bSxmJiYoZS50cmFuc2xhdGUocyxsKSxlLnJvdGF0ZSh1KSxlLnNjYWxlKHYsdikpLChyPT09ImZpbGxlZCJ8fHI9PT0iYm90aCIpJiYoZj9lLmZpbGwocCk6ZS5maWxsKCkpLChyPT09ImhvbGxvdyJ8fHI9PT0iYm90aCIpJiYoZS5saW5lV2lkdGg9YS8oZj92OjEpLGUubGluZUpvaW49Im1pdGVyIixmP2Uuc3Ryb2tlKHApOmUuc3Ryb2tlKCkpLGYmJihlLnNjYWxlKDEvdiwxL3YpLGUucm90YXRlKC11KSxlLnRyYW5zbGF0ZSgtcywtbCkpfTtpRj17fTtpRi5zYWZlRHJhd0ltYWdlPWZ1bmN0aW9uKHQsZSxyLG4saSxhLHMsbCx1LGgpe2lmKCEoaTw9MHx8YTw9MHx8dTw9MHx8aDw9MCkpdHJ5e3QuZHJhd0ltYWdlKGUscixuLGksYSxzLGwsdSxoKX1jYXRjaChmKXtobihmKX19O2lGLmRyYXdJbnNjcmliZWRJbWFnZT1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPXRoaXMscz1yLnBvc2l0aW9uKCksbD1zLngsdT1zLnksaD1yLmN5KCkuc3R5bGUoKSxmPWguZ2V0SW5kZXhlZFN0eWxlLmJpbmQoaCksZD1mKHIsImJhY2tncm91bmQtZml0IiwidmFsdWUiLG4pLHA9ZihyLCJiYWNrZ3JvdW5kLXJlcGVhdCIsInZhbHVlIixuKSxtPXIud2lkdGgoKSxnPXIuaGVpZ2h0KCkseT1yLnBhZGRpbmcoKSoyLHY9bSsoZihyLCJiYWNrZ3JvdW5kLXdpZHRoLXJlbGF0aXZlLXRvIiwidmFsdWUiLG4pPT09ImlubmVyIj8wOnkpLHg9ZysoZihyLCJiYWNrZ3JvdW5kLWhlaWdodC1yZWxhdGl2ZS10byIsInZhbHVlIixuKT09PSJpbm5lciI/MDp5KSxiPXIuX3ByaXZhdGUucnNjcmF0Y2gsVD1mKHIsImJhY2tncm91bmQtY2xpcCIsInZhbHVlIixuKSxTPVQ9PT0ibm9kZSIsdz1mKHIsImJhY2tncm91bmQtaW1hZ2Utb3BhY2l0eSIsInZhbHVlIixuKSppLEU9ZihyLCJiYWNrZ3JvdW5kLWltYWdlLXNtb290aGluZyIsInZhbHVlIixuKSxfPXIucHN0eWxlKCJjb3JuZXItcmFkaXVzIikudmFsdWU7XyE9PSJhdXRvIiYmKF89ci5wc3R5bGUoImNvcm5lci1yYWRpdXMiKS5wZlZhbHVlKTt2YXIgQz1lLndpZHRofHxlLmNhY2hlZFcsRD1lLmhlaWdodHx8ZS5jYWNoZWRIOyhDPT1udWxsfHxEPT1udWxsKSYmKGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZSksQz1lLmNhY2hlZFc9ZS53aWR0aHx8ZS5vZmZzZXRXaWR0aCxEPWUuY2FjaGVkSD1lLmhlaWdodHx8ZS5vZmZzZXRIZWlnaHQsZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChlKSk7dmFyIE89QyxSPUQ7aWYoZihyLCJiYWNrZ3JvdW5kLXdpZHRoIiwidmFsdWUiLG4pIT09ImF1dG8iJiYoZihyLCJiYWNrZ3JvdW5kLXdpZHRoIiwidW5pdHMiLG4pPT09IiUiP089ZihyLCJiYWNrZ3JvdW5kLXdpZHRoIiwicGZWYWx1ZSIsbikqdjpPPWYociwiYmFja2dyb3VuZC13aWR0aCIsInBmVmFsdWUiLG4pKSxmKHIsImJhY2tncm91bmQtaGVpZ2h0IiwidmFsdWUiLG4pIT09ImF1dG8iJiYoZihyLCJiYWNrZ3JvdW5kLWhlaWdodCIsInVuaXRzIixuKT09PSIlIj9SPWYociwiYmFja2dyb3VuZC1oZWlnaHQiLCJwZlZhbHVlIixuKSp4OlI9ZihyLCJiYWNrZ3JvdW5kLWhlaWdodCIsInBmVmFsdWUiLG4pKSwhKE89PT0wfHxSPT09MCkpe2lmKGQ9PT0iY29udGFpbiIpe3ZhciBrPU1hdGgubWluKHYvTyx4L1IpO08qPWssUio9a31lbHNlIGlmKGQ9PT0iY292ZXIiKXt2YXIgaz1NYXRoLm1heCh2L08seC9SKTtPKj1rLFIqPWt9dmFyIEw9bC12LzIsQT1mKHIsImJhY2tncm91bmQtcG9zaXRpb24teCIsInVuaXRzIixuKSxJPWYociwiYmFja2dyb3VuZC1wb3NpdGlvbi14IiwicGZWYWx1ZSIsbik7QT09PSIlIj9MKz0odi1PKSpJOkwrPUk7dmFyIE09ZihyLCJiYWNrZ3JvdW5kLW9mZnNldC14IiwidW5pdHMiLG4pLFA9ZihyLCJiYWNrZ3JvdW5kLW9mZnNldC14IiwicGZWYWx1ZSIsbik7TT09PSIlIj9MKz0odi1PKSpQOkwrPVA7dmFyIEI9dS14LzIsRj1mKHIsImJhY2tncm91bmQtcG9zaXRpb24teSIsInVuaXRzIixuKSx6PWYociwiYmFja2dyb3VuZC1wb3NpdGlvbi15IiwicGZWYWx1ZSIsbik7Rj09PSIlIj9CKz0oeC1SKSp6OkIrPXo7dmFyICQ9ZihyLCJiYWNrZ3JvdW5kLW9mZnNldC15IiwidW5pdHMiLG4pLFU9ZihyLCJiYWNrZ3JvdW5kLW9mZnNldC15IiwicGZWYWx1ZSIsbik7JD09PSIlIj9CKz0oeC1SKSpVOkIrPVUsYi5wYXRoQ2FjaGUmJihMLT1sLEItPXUsbD0wLHU9MCk7dmFyIEs9dC5nbG9iYWxBbHBoYTt0Lmdsb2JhbEFscGhhPXc7dmFyIGVlPWEuZ2V0SW1nU21vb3RoaW5nKHQpLFk9ITE7aWYoRT09PSJubyImJmVlPyhhLnNldEltZ1Ntb290aGluZyh0LCExKSxZPSEwKTpFPT09InllcyImJiFlZSYmKGEuc2V0SW1nU21vb3RoaW5nKHQsITApLFk9ITApLHA9PT0ibm8tcmVwZWF0IilTJiYodC5zYXZlKCksYi5wYXRoQ2FjaGU/dC5jbGlwKGIucGF0aENhY2hlKTooYS5ub2RlU2hhcGVzW2EuZ2V0Tm9kZVNoYXBlKHIpXS5kcmF3KHQsbCx1LHYseCxfLGIpLHQuY2xpcCgpKSksYS5zYWZlRHJhd0ltYWdlKHQsZSwwLDAsQyxELEwsQixPLFIpLFMmJnQucmVzdG9yZSgpO2Vsc2V7dmFyIGNlPXQuY3JlYXRlUGF0dGVybihlLHApO3QuZmlsbFN0eWxlPWNlLGEubm9kZVNoYXBlc1thLmdldE5vZGVTaGFwZShyKV0uZHJhdyh0LGwsdSx2LHgsXyxiKSx0LnRyYW5zbGF0ZShMLEIpLHQuZmlsbCgpLHQudHJhbnNsYXRlKC1MLC1CKX10Lmdsb2JhbEFscGhhPUssWSYmYS5zZXRJbWdTbW9vdGhpbmcodCxlZSl9fTtuMD17fTtuMC5lbGVUZXh0QmlnZ2VyVGhhbk1pbj1mdW5jdGlvbih0LGUpe2lmKCFlKXt2YXIgcj10LmN5KCkuem9vbSgpLG49dGhpcy5nZXRQaXhlbFJhdGlvKCksaT1NYXRoLmNlaWwoVkIocipuKSk7ZT1NYXRoLnBvdygyLGkpfXZhciBhPXQucHN0eWxlKCJmb250LXNpemUiKS5wZlZhbHVlKmUscz10LnBzdHlsZSgibWluLXpvb21lZC1mb250LXNpemUiKS5wZlZhbHVlO3JldHVybiEoYTxzKX07bjAuZHJhd0VsZW1lbnRUZXh0PWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9YXJndW1lbnRzLmxlbmd0aD41JiZhcmd1bWVudHNbNV0hPT12b2lkIDA/YXJndW1lbnRzWzVdOiEwLHM9dGhpcztpZihuPT1udWxsKXtpZihhJiYhcy5lbGVUZXh0QmlnZ2VyVGhhbk1pbihlKSlyZXR1cm59ZWxzZSBpZihuPT09ITEpcmV0dXJuO2lmKGUuaXNOb2RlKCkpe3ZhciBsPWUucHN0eWxlKCJsYWJlbCIpO2lmKCFsfHwhbC52YWx1ZSlyZXR1cm47dmFyIHU9cy5nZXRMYWJlbEp1c3RpZmljYXRpb24oZSk7dC50ZXh0QWxpZ249dSx0LnRleHRCYXNlbGluZT0iYm90dG9tIn1lbHNle3ZhciBoPWUuZWxlbWVudCgpLl9wcml2YXRlLnJzY3JhdGNoLmJhZExpbmUsZj1lLnBzdHlsZSgibGFiZWwiKSxkPWUucHN0eWxlKCJzb3VyY2UtbGFiZWwiKSxwPWUucHN0eWxlKCJ0YXJnZXQtbGFiZWwiKTtpZihofHwoIWZ8fCFmLnZhbHVlKSYmKCFkfHwhZC52YWx1ZSkmJighcHx8IXAudmFsdWUpKXJldHVybjt0LnRleHRBbGlnbj0iY2VudGVyIix0LnRleHRCYXNlbGluZT0iYm90dG9tIn12YXIgbT0hcixnO3ImJihnPXIsdC50cmFuc2xhdGUoLWcueDEsLWcueTEpKSxpPT1udWxsPyhzLmRyYXdUZXh0KHQsZSxudWxsLG0sYSksZS5pc0VkZ2UoKSYmKHMuZHJhd1RleHQodCxlLCJzb3VyY2UiLG0sYSkscy5kcmF3VGV4dCh0LGUsInRhcmdldCIsbSxhKSkpOnMuZHJhd1RleHQodCxlLGksbSxhKSxyJiZ0LnRyYW5zbGF0ZShnLngxLGcueTEpfTtuMC5nZXRGb250Q2FjaGU9ZnVuY3Rpb24odCl7dmFyIGU7dGhpcy5mb250Q2FjaGVzPXRoaXMuZm9udENhY2hlc3x8W107Zm9yKHZhciByPTA7cjx0aGlzLmZvbnRDYWNoZXMubGVuZ3RoO3IrKylpZihlPXRoaXMuZm9udENhY2hlc1tyXSxlLmNvbnRleHQ9PT10KXJldHVybiBlO3JldHVybiBlPXtjb250ZXh0OnR9LHRoaXMuZm9udENhY2hlcy5wdXNoKGUpLGV9O24wLnNldHVwVGV4dFN0eWxlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOiEwLG49ZS5wc3R5bGUoImZvbnQtc3R5bGUiKS5zdHJWYWx1ZSxpPWUucHN0eWxlKCJmb250LXNpemUiKS5wZlZhbHVlKyJweCIsYT1lLnBzdHlsZSgiZm9udC1mYW1pbHkiKS5zdHJWYWx1ZSxzPWUucHN0eWxlKCJmb250LXdlaWdodCIpLnN0clZhbHVlLGw9cj9lLmVmZmVjdGl2ZU9wYWNpdHkoKSplLnBzdHlsZSgidGV4dC1vcGFjaXR5IikudmFsdWU6MSx1PWUucHN0eWxlKCJ0ZXh0LW91dGxpbmUtb3BhY2l0eSIpLnZhbHVlKmwsaD1lLnBzdHlsZSgiY29sb3IiKS52YWx1ZSxmPWUucHN0eWxlKCJ0ZXh0LW91dGxpbmUtY29sb3IiKS52YWx1ZTt0LmZvbnQ9bisiICIrcysiICIraSsiICIrYSx0LmxpbmVKb2luPSJyb3VuZCIsdGhpcy5jb2xvckZpbGxTdHlsZSh0LGhbMF0saFsxXSxoWzJdLGwpLHRoaXMuY29sb3JTdHJva2VTdHlsZSh0LGZbMF0sZlsxXSxmWzJdLHUpfTtvKG1CLCJyb3VuZFJlY3QiKTtuMC5nZXRUZXh0QW5nbGU9ZnVuY3Rpb24odCxlKXt2YXIgcixuPXQuX3ByaXZhdGUsaT1uLnJzY3JhdGNoLGE9ZT9lKyItIjoiIixzPXQucHN0eWxlKGErInRleHQtcm90YXRpb24iKTtpZihzLnN0clZhbHVlPT09ImF1dG9yb3RhdGUiKXt2YXIgbD1XbChpLCJsYWJlbEFuZ2xlIixlKTtyPXQuaXNFZGdlKCk/bDowfWVsc2Ugcy5zdHJWYWx1ZT09PSJub25lIj9yPTA6cj1zLnBmVmFsdWU7cmV0dXJuIHJ9O24wLmRyYXdUZXh0PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106ITAsaT1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06ITAsYT1lLl9wcml2YXRlLHM9YS5yc2NyYXRjaCxsPWk/ZS5lZmZlY3RpdmVPcGFjaXR5KCk6MTtpZighKGkmJihsPT09MHx8ZS5wc3R5bGUoInRleHQtb3BhY2l0eSIpLnZhbHVlPT09MCkpKXtyPT09Im1haW4iJiYocj1udWxsKTt2YXIgdT1XbChzLCJsYWJlbFgiLHIpLGg9V2wocywibGFiZWxZIixyKSxmLGQscD10aGlzLmdldExhYmVsVGV4dChlLHIpO2lmKHAhPW51bGwmJnAhPT0iIiYmIWlzTmFOKHUpJiYhaXNOYU4oaCkpe3RoaXMuc2V0dXBUZXh0U3R5bGUodCxlLGkpO3ZhciBtPXI/cisiLSI6IiIsZz1XbChzLCJsYWJlbFdpZHRoIixyKSx5PVdsKHMsImxhYmVsSGVpZ2h0IixyKSx2PWUucHN0eWxlKG0rInRleHQtbWFyZ2luLXgiKS5wZlZhbHVlLHg9ZS5wc3R5bGUobSsidGV4dC1tYXJnaW4teSIpLnBmVmFsdWUsYj1lLmlzRWRnZSgpLFQ9ZS5wc3R5bGUoInRleHQtaGFsaWduIikudmFsdWUsUz1lLnBzdHlsZSgidGV4dC12YWxpZ24iKS52YWx1ZTtiJiYoVD0iY2VudGVyIixTPSJjZW50ZXIiKSx1Kz12LGgrPXg7dmFyIHc7c3dpdGNoKG4/dz10aGlzLmdldFRleHRBbmdsZShlLHIpOnc9MCx3IT09MCYmKGY9dSxkPWgsdC50cmFuc2xhdGUoZixkKSx0LnJvdGF0ZSh3KSx1PTAsaD0wKSxTKXtjYXNlInRvcCI6YnJlYWs7Y2FzZSJjZW50ZXIiOmgrPXkvMjticmVhaztjYXNlImJvdHRvbSI6aCs9eTticmVha312YXIgRT1lLnBzdHlsZSgidGV4dC1iYWNrZ3JvdW5kLW9wYWNpdHkiKS52YWx1ZSxfPWUucHN0eWxlKCJ0ZXh0LWJvcmRlci1vcGFjaXR5IikudmFsdWUsQz1lLnBzdHlsZSgidGV4dC1ib3JkZXItd2lkdGgiKS5wZlZhbHVlLEQ9ZS5wc3R5bGUoInRleHQtYmFja2dyb3VuZC1wYWRkaW5nIikucGZWYWx1ZSxPPWUucHN0eWxlKCJ0ZXh0LWJhY2tncm91bmQtc2hhcGUiKS5zdHJWYWx1ZSxSPU8uaW5kZXhPZigicm91bmQiKT09PTAsaz0yO2lmKEU+MHx8Qz4wJiZfPjApe3ZhciBMPXUtRDtzd2l0Y2goVCl7Y2FzZSJsZWZ0IjpMLT1nO2JyZWFrO2Nhc2UiY2VudGVyIjpMLT1nLzI7YnJlYWt9dmFyIEE9aC15LUQsST1nKzIqRCxNPXkrMipEO2lmKEU+MCl7dmFyIFA9dC5maWxsU3R5bGUsQj1lLnBzdHlsZSgidGV4dC1iYWNrZ3JvdW5kLWNvbG9yIikudmFsdWU7dC5maWxsU3R5bGU9InJnYmEoIitCWzBdKyIsIitCWzFdKyIsIitCWzJdKyIsIitFKmwrIikiLFI/bUIodCxMLEEsSSxNLGspOnQuZmlsbFJlY3QoTCxBLEksTSksdC5maWxsU3R5bGU9UH1pZihDPjAmJl8+MCl7dmFyIEY9dC5zdHJva2VTdHlsZSx6PXQubGluZVdpZHRoLCQ9ZS5wc3R5bGUoInRleHQtYm9yZGVyLWNvbG9yIikudmFsdWUsVT1lLnBzdHlsZSgidGV4dC1ib3JkZXItc3R5bGUiKS52YWx1ZTtpZih0LnN0cm9rZVN0eWxlPSJyZ2JhKCIrJFswXSsiLCIrJFsxXSsiLCIrJFsyXSsiLCIrXypsKyIpIix0LmxpbmVXaWR0aD1DLHQuc2V0TGluZURhc2gpc3dpdGNoKFUpe2Nhc2UiZG90dGVkIjp0LnNldExpbmVEYXNoKFsxLDFdKTticmVhaztjYXNlImRhc2hlZCI6dC5zZXRMaW5lRGFzaChbNCwyXSk7YnJlYWs7Y2FzZSJkb3VibGUiOnQubGluZVdpZHRoPUMvNCx0LnNldExpbmVEYXNoKFtdKTticmVhaztjYXNlInNvbGlkIjp0LnNldExpbmVEYXNoKFtdKTticmVha31pZihSP21CKHQsTCxBLEksTSxrLCJzdHJva2UiKTp0LnN0cm9rZVJlY3QoTCxBLEksTSksVT09PSJkb3VibGUiKXt2YXIgSz1DLzI7Uj9tQih0LEwrSyxBK0ssSS1LKjIsTS1LKjIsaywic3Ryb2tlIik6dC5zdHJva2VSZWN0KEwrSyxBK0ssSS1LKjIsTS1LKjIpfXQuc2V0TGluZURhc2gmJnQuc2V0TGluZURhc2goW10pLHQubGluZVdpZHRoPXosdC5zdHJva2VTdHlsZT1GfX12YXIgZWU9MiplLnBzdHlsZSgidGV4dC1vdXRsaW5lLXdpZHRoIikucGZWYWx1ZTtpZihlZT4wJiYodC5saW5lV2lkdGg9ZWUpLGUucHN0eWxlKCJ0ZXh0LXdyYXAiKS52YWx1ZT09PSJ3cmFwIil7dmFyIFk9V2wocywibGFiZWxXcmFwQ2FjaGVkTGluZXMiLHIpLGNlPVdsKHMsImxhYmVsTGluZUhlaWdodCIsciksWj1nLzIsdWU9dGhpcy5nZXRMYWJlbEp1c3RpZmljYXRpb24oZSk7c3dpdGNoKHVlPT09ImF1dG8ifHwoVD09PSJsZWZ0Ij91ZT09PSJsZWZ0Ij91Kz0tZzp1ZT09PSJjZW50ZXIiJiYodSs9LVopOlQ9PT0iY2VudGVyIj91ZT09PSJsZWZ0Ij91Kz0tWjp1ZT09PSJyaWdodCImJih1Kz1aKTpUPT09InJpZ2h0IiYmKHVlPT09ImNlbnRlciI/dSs9Wjp1ZT09PSJyaWdodCImJih1Kz1nKSkpLFMpe2Nhc2UidG9wIjpoLT0oWS5sZW5ndGgtMSkqY2U7YnJlYWs7Y2FzZSJjZW50ZXIiOmNhc2UiYm90dG9tIjpoLT0oWS5sZW5ndGgtMSkqY2U7YnJlYWt9Zm9yKHZhciBRPTA7UTxZLmxlbmd0aDtRKyspZWU+MCYmdC5zdHJva2VUZXh0KFlbUV0sdSxoKSx0LmZpbGxUZXh0KFlbUV0sdSxoKSxoKz1jZX1lbHNlIGVlPjAmJnQuc3Ryb2tlVGV4dChwLHUsaCksdC5maWxsVGV4dChwLHUsaCk7dyE9PTAmJih0LnJvdGF0ZSgtdyksdC50cmFuc2xhdGUoLWYsLWQpKX19fTtweT17fTtweS5kcmF3Tm9kZT1mdW5jdGlvbih0LGUscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiEwLGk9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOiEwLGE9YXJndW1lbnRzLmxlbmd0aD41JiZhcmd1bWVudHNbNV0hPT12b2lkIDA/YXJndW1lbnRzWzVdOiEwLHM9dGhpcyxsLHUsaD1lLl9wcml2YXRlLGY9aC5yc2NyYXRjaCxkPWUucG9zaXRpb24oKTtpZighKCFfdChkLngpfHwhX3QoZC55KSkmJiEoYSYmIWUudmlzaWJsZSgpKSl7dmFyIHA9YT9lLmVmZmVjdGl2ZU9wYWNpdHkoKToxLG09cy51c2VQYXRocygpLGcseT0hMSx2PWUucGFkZGluZygpO2w9ZS53aWR0aCgpKzIqdix1PWUuaGVpZ2h0KCkrMip2O3ZhciB4O3ImJih4PXIsdC50cmFuc2xhdGUoLXgueDEsLXgueTEpKTtmb3IodmFyIGI9ZS5wc3R5bGUoImJhY2tncm91bmQtaW1hZ2UiKSxUPWIudmFsdWUsUz1uZXcgQXJyYXkoVC5sZW5ndGgpLHc9bmV3IEFycmF5KFQubGVuZ3RoKSxFPTAsXz0wO188VC5sZW5ndGg7XysrKXt2YXIgQz1UW19dLEQ9U1tfXT1DIT1udWxsJiZDIT09Im5vbmUiO2lmKEQpe3ZhciBPPWUuY3koKS5zdHlsZSgpLmdldEluZGV4ZWRTdHlsZShlLCJiYWNrZ3JvdW5kLWltYWdlLWNyb3Nzb3JpZ2luIiwidmFsdWUiLF8pO0UrKyx3W19dPXMuZ2V0Q2FjaGVkSW1hZ2UoQyxPLGZ1bmN0aW9uKCl7aC5iYWNrZ3JvdW5kVGltZXN0YW1wPURhdGUubm93KCksZS5lbWl0QW5kTm90aWZ5KCJiYWNrZ3JvdW5kIil9KX19dmFyIFI9ZS5wc3R5bGUoImJhY2tncm91bmQtYmxhY2tlbiIpLnZhbHVlLGs9ZS5wc3R5bGUoImJvcmRlci13aWR0aCIpLnBmVmFsdWUsTD1lLnBzdHlsZSgiYmFja2dyb3VuZC1vcGFjaXR5IikudmFsdWUqcCxBPWUucHN0eWxlKCJib3JkZXItY29sb3IiKS52YWx1ZSxJPWUucHN0eWxlKCJib3JkZXItc3R5bGUiKS52YWx1ZSxNPWUucHN0eWxlKCJib3JkZXItam9pbiIpLnZhbHVlLFA9ZS5wc3R5bGUoImJvcmRlci1jYXAiKS52YWx1ZSxCPWUucHN0eWxlKCJib3JkZXItcG9zaXRpb24iKS52YWx1ZSxGPWUucHN0eWxlKCJib3JkZXItZGFzaC1wYXR0ZXJuIikucGZWYWx1ZSx6PWUucHN0eWxlKCJib3JkZXItZGFzaC1vZmZzZXQiKS5wZlZhbHVlLCQ9ZS5wc3R5bGUoImJvcmRlci1vcGFjaXR5IikudmFsdWUqcCxVPWUucHN0eWxlKCJvdXRsaW5lLXdpZHRoIikucGZWYWx1ZSxLPWUucHN0eWxlKCJvdXRsaW5lLWNvbG9yIikudmFsdWUsZWU9ZS5wc3R5bGUoIm91dGxpbmUtc3R5bGUiKS52YWx1ZSxZPWUucHN0eWxlKCJvdXRsaW5lLW9wYWNpdHkiKS52YWx1ZSpwLGNlPWUucHN0eWxlKCJvdXRsaW5lLW9mZnNldCIpLnZhbHVlLFo9ZS5wc3R5bGUoImNvcm5lci1yYWRpdXMiKS52YWx1ZTtaIT09ImF1dG8iJiYoWj1lLnBzdHlsZSgiY29ybmVyLXJhZGl1cyIpLnBmVmFsdWUpO3ZhciB1ZT1vKGZ1bmN0aW9uKCl7dmFyIG9lPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTpMO3MuZWxlRmlsbFN0eWxlKHQsZSxvZSl9LCJzZXR1cFNoYXBlQ29sb3IiKSxRPW8oZnVuY3Rpb24oKXt2YXIgb2U9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOiQ7cy5jb2xvclN0cm9rZVN0eWxlKHQsQVswXSxBWzFdLEFbMl0sb2UpfSwic2V0dXBCb3JkZXJDb2xvciIpLGo9byhmdW5jdGlvbigpe3ZhciBvZT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06WTtzLmNvbG9yU3Ryb2tlU3R5bGUodCxLWzBdLEtbMV0sS1syXSxvZSl9LCJzZXR1cE91dGxpbmVDb2xvciIpLG5lPW8oZnVuY3Rpb24ob2UsVixUZSxXKXt2YXIgcGU9cy5ub2RlUGF0aENhY2hlPXMubm9kZVBhdGhDYWNoZXx8W10sdmU9eGdlKFRlPT09InBvbHlnb24iP1RlKyIsIitXLmpvaW4oIiwiKTpUZSwiIitWLCIiK29lLCIiK1opLFBlPXBlW3ZlXSxfZSxiZT0hMTtyZXR1cm4gUGUhPW51bGw/KF9lPVBlLGJlPSEwLGYucGF0aENhY2hlPV9lKTooX2U9bmV3IFBhdGgyRCxwZVt2ZV09Zi5wYXRoQ2FjaGU9X2UpLHtwYXRoOl9lLGNhY2hlSGl0OmJlfX0sImdldFBhdGgiKSx0ZT1lLnBzdHlsZSgic2hhcGUiKS5zdHJWYWx1ZSxoZT1lLnBzdHlsZSgic2hhcGUtcG9seWdvbi1wb2ludHMiKS5wZlZhbHVlO2lmKG0pe3QudHJhbnNsYXRlKGQueCxkLnkpO3ZhciBsZT1uZShsLHUsdGUsaGUpO2c9bGUucGF0aCx5PWxlLmNhY2hlSGl0fXZhciBKPW8oZnVuY3Rpb24oKXtpZigheSl7dmFyIG9lPWQ7bSYmKG9lPXt4OjAseTowfSkscy5ub2RlU2hhcGVzW3MuZ2V0Tm9kZVNoYXBlKGUpXS5kcmF3KGd8fHQsb2UueCxvZS55LGwsdSxaLGYpfW0/dC5maWxsKGcpOnQuZmlsbCgpfSwiZHJhd1NoYXBlIiksU2U9byhmdW5jdGlvbigpe2Zvcih2YXIgb2U9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOnAsVj1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITAsVGU9aC5iYWNrZ3JvdW5kaW5nLFc9MCxwZT0wO3BlPHcubGVuZ3RoO3BlKyspe3ZhciB2ZT1lLmN5KCkuc3R5bGUoKS5nZXRJbmRleGVkU3R5bGUoZSwiYmFja2dyb3VuZC1pbWFnZS1jb250YWlubWVudCIsInZhbHVlIixwZSk7aWYoViYmdmU9PT0ib3ZlciJ8fCFWJiZ2ZT09PSJpbnNpZGUiKXtXKys7Y29udGludWV9U1twZV0mJndbcGVdLmNvbXBsZXRlJiYhd1twZV0uZXJyb3ImJihXKysscy5kcmF3SW5zY3JpYmVkSW1hZ2UodCx3W3BlXSxlLHBlLG9lKSl9aC5iYWNrZ3JvdW5kaW5nPVchPT1FLFRlIT09aC5iYWNrZ3JvdW5kaW5nJiZlLnVwZGF0ZVN0eWxlKCExKX0sImRyYXdJbWFnZXMiKSxzZT1vKGZ1bmN0aW9uKCl7dmFyIG9lPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMSxWPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpwO3MuaGFzUGllKGUpJiYocy5kcmF3UGllKHQsZSxWKSxvZSYmKG18fHMubm9kZVNoYXBlc1tzLmdldE5vZGVTaGFwZShlKV0uZHJhdyh0LGQueCxkLnksbCx1LFosZikpKX0sImRyYXdQaWUiKSxhZT1vKGZ1bmN0aW9uKCl7dmFyIG9lPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTpwLFY9KFI+MD9SOi1SKSpvZSxUZT1SPjA/MDoyNTU7UiE9PTAmJihzLmNvbG9yRmlsbFN0eWxlKHQsVGUsVGUsVGUsViksbT90LmZpbGwoZyk6dC5maWxsKCkpfSwiZGFya2VuIiksT2U9byhmdW5jdGlvbigpe2lmKGs+MCl7aWYodC5saW5lV2lkdGg9ayx0LmxpbmVDYXA9UCx0LmxpbmVKb2luPU0sdC5zZXRMaW5lRGFzaClzd2l0Y2goSSl7Y2FzZSJkb3R0ZWQiOnQuc2V0TGluZURhc2goWzEsMV0pO2JyZWFrO2Nhc2UiZGFzaGVkIjp0LnNldExpbmVEYXNoKEYpLHQubGluZURhc2hPZmZzZXQ9ejticmVhaztjYXNlInNvbGlkIjpjYXNlImRvdWJsZSI6dC5zZXRMaW5lRGFzaChbXSk7YnJlYWt9aWYoQiE9PSJjZW50ZXIiKXtpZih0LnNhdmUoKSx0LmxpbmVXaWR0aCo9MixCPT09Imluc2lkZSIpbT90LmNsaXAoZyk6dC5jbGlwKCk7ZWxzZXt2YXIgb2U9bmV3IFBhdGgyRDtvZS5yZWN0KC1sLzItaywtdS8yLWssbCsyKmssdSsyKmspLG9lLmFkZFBhdGgoZyksdC5jbGlwKG9lLCJldmVub2RkIil9bT90LnN0cm9rZShnKTp0LnN0cm9rZSgpLHQucmVzdG9yZSgpfWVsc2UgbT90LnN0cm9rZShnKTp0LnN0cm9rZSgpO2lmKEk9PT0iZG91YmxlIil7dC5saW5lV2lkdGg9ay8zO3ZhciBWPXQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uO3QuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPSJkZXN0aW5hdGlvbi1vdXQiLG0/dC5zdHJva2UoZyk6dC5zdHJva2UoKSx0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj1WfXQuc2V0TGluZURhc2gmJnQuc2V0TGluZURhc2goW10pfX0sImRyYXdCb3JkZXIiKSx5ZT1vKGZ1bmN0aW9uKCl7aWYoVT4wKXtpZih0LmxpbmVXaWR0aD1VLHQubGluZUNhcD0iYnV0dCIsdC5zZXRMaW5lRGFzaClzd2l0Y2goZWUpe2Nhc2UiZG90dGVkIjp0LnNldExpbmVEYXNoKFsxLDFdKTticmVhaztjYXNlImRhc2hlZCI6dC5zZXRMaW5lRGFzaChbNCwyXSk7YnJlYWs7Y2FzZSJzb2xpZCI6Y2FzZSJkb3VibGUiOnQuc2V0TGluZURhc2goW10pO2JyZWFrfXZhciBvZT1kO20mJihvZT17eDowLHk6MH0pO3ZhciBWPXMuZ2V0Tm9kZVNoYXBlKGUpLFRlPWs7Qj09PSJpbnNpZGUiJiYoVGU9MCksQj09PSJvdXRzaWRlIiYmKFRlKj0yKTt2YXIgVz0obCtUZSsoVStjZSkpL2wscGU9KHUrVGUrKFUrY2UpKS91LHZlPWwqVyxQZT11KnBlLF9lPXMubm9kZVNoYXBlc1tWXS5wb2ludHMsYmU7aWYobSl7dmFyIFZlPW5lKHZlLFBlLFYsX2UpO2JlPVZlLnBhdGh9aWYoVj09PSJlbGxpcHNlIilzLmRyYXdFbGxpcHNlUGF0aChiZXx8dCxvZS54LG9lLnksdmUsUGUpO2Vsc2UgaWYoWyJyb3VuZC1kaWFtb25kIiwicm91bmQtaGVwdGFnb24iLCJyb3VuZC1oZXhhZ29uIiwicm91bmQtb2N0YWdvbiIsInJvdW5kLXBlbnRhZ29uIiwicm91bmQtcG9seWdvbiIsInJvdW5kLXRyaWFuZ2xlIiwicm91bmQtdGFnIl0uaW5jbHVkZXMoVikpe3ZhciBEZT0wLHFlPTAsYXQ9MDtWPT09InJvdW5kLWRpYW1vbmQiP0RlPShUZStjZStVKSoxLjQ6Vj09PSJyb3VuZC1oZXB0YWdvbiI/KERlPShUZStjZStVKSoxLjA3NSxhdD0tKFRlLzIrY2UrVSkvMzUpOlY9PT0icm91bmQtaGV4YWdvbiI/RGU9KFRlK2NlK1UpKjEuMTI6Vj09PSJyb3VuZC1wZW50YWdvbiI/KERlPShUZStjZStVKSoxLjEzLGF0PS0oVGUvMitjZStVKS8xNSk6Vj09PSJyb3VuZC10YWciPyhEZT0oVGUrY2UrVSkqMS4xMixxZT0oVGUvMitVK2NlKSouMDcpOlY9PT0icm91bmQtdHJpYW5nbGUiJiYoRGU9KFRlK2NlK1UpKihNYXRoLlBJLzIpLGF0PS0oVGUrY2UvMitVKS9NYXRoLlBJKSxEZSE9PTAmJihXPShsK0RlKS9sLHZlPWwqVyxbInJvdW5kLWhleGFnb24iLCJyb3VuZC10YWciXS5pbmNsdWRlcyhWKXx8KHBlPSh1K0RlKS91LFBlPXUqcGUpKSxaPVo9PT0iYXV0byI/TGdlKHZlLFBlKTpaO2Zvcih2YXIgUnQ9dmUvMixzdD1QZS8yLFVlPVorKFRlK1UrY2UpLzIsY3Q9bmV3IEFycmF5KF9lLmxlbmd0aC8yKSxXZT1uZXcgQXJyYXkoX2UubGVuZ3RoLzIpLG90PTA7b3Q8X2UubGVuZ3RoLzI7b3QrKyljdFtvdF09e3g6b2UueCtxZStSdCpfZVtvdCoyXSx5Om9lLnkrYXQrc3QqX2Vbb3QqMisxXX07dmFyIFl0LFR0LE10LGJ0LHV0PWN0Lmxlbmd0aDtmb3IoVHQ9Y3RbdXQtMV0sWXQ9MDtZdDx1dDtZdCsrKU10PWN0W1l0JXV0XSxidD1jdFsoWXQrMSkldXRdLFdlW1l0XT1yRihUdCxNdCxidCxVZSksVHQ9TXQsTXQ9YnQ7cy5kcmF3Um91bmRQb2x5Z29uUGF0aChiZXx8dCxvZS54K3FlLG9lLnkrYXQsbCpXLHUqcGUsX2UsV2UpfWVsc2UgaWYoWyJyb3VuZHJlY3RhbmdsZSIsInJvdW5kLXJlY3RhbmdsZSJdLmluY2x1ZGVzKFYpKVo9Wj09PSJhdXRvIj9acCh2ZSxQZSk6WixzLmRyYXdSb3VuZFJlY3RhbmdsZVBhdGgoYmV8fHQsb2UueCxvZS55LHZlLFBlLForKFRlK1UrY2UpLzIpO2Vsc2UgaWYoWyJjdXRyZWN0YW5nbGUiLCJjdXQtcmVjdGFuZ2xlIl0uaW5jbHVkZXMoVikpWj1aPT09ImF1dG8iP0hCKCk6WixzLmRyYXdDdXRSZWN0YW5nbGVQYXRoKGJlfHx0LG9lLngsb2UueSx2ZSxQZSxudWxsLForKFRlK1UrY2UpLzQpO2Vsc2UgaWYoWyJib3R0b21yb3VuZHJlY3RhbmdsZSIsImJvdHRvbS1yb3VuZC1yZWN0YW5nbGUiXS5pbmNsdWRlcyhWKSlaPVo9PT0iYXV0byI/WnAodmUsUGUpOloscy5kcmF3Qm90dG9tUm91bmRSZWN0YW5nbGVQYXRoKGJlfHx0LG9lLngsb2UueSx2ZSxQZSxaKyhUZStVK2NlKS8yKTtlbHNlIGlmKFY9PT0iYmFycmVsIilzLmRyYXdCYXJyZWxQYXRoKGJlfHx0LG9lLngsb2UueSx2ZSxQZSk7ZWxzZSBpZihWLnN0YXJ0c1dpdGgoInBvbHlnb24iKXx8WyJyaG9tYm9pZCIsInJpZ2h0LXJob21ib2lkIiwicm91bmQtdGFnIiwidGFnIiwidmVlIl0uaW5jbHVkZXMoVikpe3ZhciBTdD0oVGUrVStjZSkvbDtfZT1HNihWNihfZSxTdCkpLHMuZHJhd1BvbHlnb25QYXRoKGJlfHx0LG9lLngsb2UueSxsLHUsX2UpfWVsc2V7dmFyIGZ0PShUZStVK2NlKS9sO19lPUc2KFY2KF9lLC1mdCkpLHMuZHJhd1BvbHlnb25QYXRoKGJlfHx0LG9lLngsb2UueSxsLHUsX2UpfWlmKG0/dC5zdHJva2UoYmUpOnQuc3Ryb2tlKCksZWU9PT0iZG91YmxlIil7dC5saW5lV2lkdGg9VGUvMzt2YXIgdnQ9dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb247dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249ImRlc3RpbmF0aW9uLW91dCIsbT90LnN0cm9rZShiZSk6dC5zdHJva2UoKSx0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj12dH10LnNldExpbmVEYXNoJiZ0LnNldExpbmVEYXNoKFtdKX19LCJkcmF3T3V0bGluZSIpLEJlPW8oZnVuY3Rpb24oKXtpJiZzLmRyYXdOb2RlT3ZlcmxheSh0LGUsZCxsLHUpfSwiZHJhd092ZXJsYXkiKSxIZT1vKGZ1bmN0aW9uKCl7aSYmcy5kcmF3Tm9kZVVuZGVybGF5KHQsZSxkLGwsdSl9LCJkcmF3VW5kZXJsYXkiKSx6ZT1vKGZ1bmN0aW9uKCl7cy5kcmF3RWxlbWVudFRleHQodCxlLG51bGwsbil9LCJkcmF3VGV4dCIpLExlPWUucHN0eWxlKCJnaG9zdCIpLnZhbHVlPT09InllcyI7aWYoTGUpe3ZhciBJZT1lLnBzdHlsZSgiZ2hvc3Qtb2Zmc2V0LXgiKS5wZlZhbHVlLHhlPWUucHN0eWxlKCJnaG9zdC1vZmZzZXQteSIpLnBmVmFsdWUscT1lLnBzdHlsZSgiZ2hvc3Qtb3BhY2l0eSIpLnZhbHVlLGRlPXEqcDt0LnRyYW5zbGF0ZShJZSx4ZSksaigpLHllKCksdWUocSpMKSxKKCksU2UoZGUsITApLFEocSokKSxPZSgpLHNlKFIhPT0wfHxrIT09MCksU2UoZGUsITEpLGFlKGRlKSx0LnRyYW5zbGF0ZSgtSWUsLXhlKX1tJiZ0LnRyYW5zbGF0ZSgtZC54LC1kLnkpLEhlKCksbSYmdC50cmFuc2xhdGUoZC54LGQueSksaigpLHllKCksdWUoKSxKKCksU2UocCwhMCksUSgpLE9lKCksc2UoUiE9PTB8fGshPT0wKSxTZShwLCExKSxhZSgpLG0mJnQudHJhbnNsYXRlKC1kLngsLWQueSksemUoKSxCZSgpLHImJnQudHJhbnNsYXRlKHgueDEseC55MSl9fTtJMWU9byhmdW5jdGlvbihlKXtpZighWyJvdmVybGF5IiwidW5kZXJsYXkiXS5pbmNsdWRlcyhlKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RhdGUiKTtyZXR1cm4gZnVuY3Rpb24ocixuLGksYSxzKXt2YXIgbD10aGlzO2lmKG4udmlzaWJsZSgpKXt2YXIgdT1uLnBzdHlsZSgiIi5jb25jYXQoZSwiLXBhZGRpbmciKSkucGZWYWx1ZSxoPW4ucHN0eWxlKCIiLmNvbmNhdChlLCItb3BhY2l0eSIpKS52YWx1ZSxmPW4ucHN0eWxlKCIiLmNvbmNhdChlLCItY29sb3IiKSkudmFsdWUsZD1uLnBzdHlsZSgiIi5jb25jYXQoZSwiLXNoYXBlIikpLnZhbHVlLHA9bi5wc3R5bGUoIiIuY29uY2F0KGUsIi1jb3JuZXItcmFkaXVzIikpLnZhbHVlO2lmKGg+MCl7aWYoaT1pfHxuLnBvc2l0aW9uKCksYT09bnVsbHx8cz09bnVsbCl7dmFyIG09bi5wYWRkaW5nKCk7YT1uLndpZHRoKCkrMiptLHM9bi5oZWlnaHQoKSsyKm19bC5jb2xvckZpbGxTdHlsZShyLGZbMF0sZlsxXSxmWzJdLGgpLGwubm9kZVNoYXBlc1tkXS5kcmF3KHIsaS54LGkueSxhK3UqMixzK3UqMixwKSxyLmZpbGwoKX19fX0sImRyYXdOb2RlT3ZlcmxheVVuZGVybGF5Iik7cHkuZHJhd05vZGVPdmVybGF5PUkxZSgib3ZlcmxheSIpO3B5LmRyYXdOb2RlVW5kZXJsYXk9STFlKCJ1bmRlcmxheSIpO3B5Lmhhc1BpZT1mdW5jdGlvbih0KXtyZXR1cm4gdD10WzBdLHQuX3ByaXZhdGUuaGFzUGllfTtweS5kcmF3UGllPWZ1bmN0aW9uKHQsZSxyLG4pe2U9ZVswXSxuPW58fGUucG9zaXRpb24oKTt2YXIgaT1lLmN5KCkuc3R5bGUoKSxhPWUucHN0eWxlKCJwaWUtc2l6ZSIpLHM9bi54LGw9bi55LHU9ZS53aWR0aCgpLGg9ZS5oZWlnaHQoKSxmPU1hdGgubWluKHUsaCkvMixkPTAscD10aGlzLnVzZVBhdGhzKCk7cCYmKHM9MCxsPTApLGEudW5pdHM9PT0iJSI/Zj1mKmEucGZWYWx1ZTphLnBmVmFsdWUhPT12b2lkIDAmJihmPWEucGZWYWx1ZS8yKTtmb3IodmFyIG09MTttPD1pLnBpZUJhY2tncm91bmROO20rKyl7dmFyIGc9ZS5wc3R5bGUoInBpZS0iK20rIi1iYWNrZ3JvdW5kLXNpemUiKS52YWx1ZSx5PWUucHN0eWxlKCJwaWUtIittKyItYmFja2dyb3VuZC1jb2xvciIpLnZhbHVlLHY9ZS5wc3R5bGUoInBpZS0iK20rIi1iYWNrZ3JvdW5kLW9wYWNpdHkiKS52YWx1ZSpyLHg9Zy8xMDA7eCtkPjEmJih4PTEtZCk7dmFyIGI9MS41Kk1hdGguUEkrMipNYXRoLlBJKmQsVD0yKk1hdGguUEkqeCxTPWIrVDtnPT09MHx8ZD49MXx8ZCt4PjF8fCh0LmJlZ2luUGF0aCgpLHQubW92ZVRvKHMsbCksdC5hcmMocyxsLGYsYixTKSx0LmNsb3NlUGF0aCgpLHRoaXMuY29sb3JGaWxsU3R5bGUodCx5WzBdLHlbMV0seVsyXSx2KSx0LmZpbGwoKSxkKz14KX19O3dzPXt9LE5KZT0xMDA7d3MuZ2V0UGl4ZWxSYXRpbz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZGF0YS5jb250ZXh0c1swXTtpZih0aGlzLmZvcmNlZFBpeGVsUmF0aW8hPW51bGwpcmV0dXJuIHRoaXMuZm9yY2VkUGl4ZWxSYXRpbzt2YXIgZT10aGlzLmN5LndpbmRvdygpLHI9dC5iYWNraW5nU3RvcmVQaXhlbFJhdGlvfHx0LndlYmtpdEJhY2tpbmdTdG9yZVBpeGVsUmF0aW98fHQubW96QmFja2luZ1N0b3JlUGl4ZWxSYXRpb3x8dC5tc0JhY2tpbmdTdG9yZVBpeGVsUmF0aW98fHQub0JhY2tpbmdTdG9yZVBpeGVsUmF0aW98fHQuYmFja2luZ1N0b3JlUGl4ZWxSYXRpb3x8MTtyZXR1cm4oZS5kZXZpY2VQaXhlbFJhdGlvfHwxKS9yfTt3cy5wYWludENhY2hlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnBhaW50Q2FjaGVzPXRoaXMucGFpbnRDYWNoZXN8fFtdLHI9ITAsbixpPTA7aTxlLmxlbmd0aDtpKyspaWYobj1lW2ldLG4uY29udGV4dD09PXQpe3I9ITE7YnJlYWt9cmV0dXJuIHImJihuPXtjb250ZXh0OnR9LGUucHVzaChuKSksbn07d3MuY3JlYXRlR3JhZGllbnRTdHlsZUZvcj1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhLHM9dGhpcy51c2VQYXRocygpLGw9ci5wc3R5bGUoZSsiLWdyYWRpZW50LXN0b3AtY29sb3JzIikudmFsdWUsdT1yLnBzdHlsZShlKyItZ3JhZGllbnQtc3RvcC1wb3NpdGlvbnMiKS5wZlZhbHVlO2lmKG49PT0icmFkaWFsLWdyYWRpZW50IilpZihyLmlzRWRnZSgpKXt2YXIgaD1yLnNvdXJjZUVuZHBvaW50KCksZj1yLnRhcmdldEVuZHBvaW50KCksZD1yLm1pZHBvaW50KCkscD1RcChoLGQpLG09UXAoZixkKTthPXQuY3JlYXRlUmFkaWFsR3JhZGllbnQoZC54LGQueSwwLGQueCxkLnksTWF0aC5tYXgocCxtKSl9ZWxzZXt2YXIgZz1zP3t4OjAseTowfTpyLnBvc2l0aW9uKCkseT1yLnBhZGRlZFdpZHRoKCksdj1yLnBhZGRlZEhlaWdodCgpO2E9dC5jcmVhdGVSYWRpYWxHcmFkaWVudChnLngsZy55LDAsZy54LGcueSxNYXRoLm1heCh5LHYpKX1lbHNlIGlmKHIuaXNFZGdlKCkpe3ZhciB4PXIuc291cmNlRW5kcG9pbnQoKSxiPXIudGFyZ2V0RW5kcG9pbnQoKTthPXQuY3JlYXRlTGluZWFyR3JhZGllbnQoeC54LHgueSxiLngsYi55KX1lbHNle3ZhciBUPXM/e3g6MCx5OjB9OnIucG9zaXRpb24oKSxTPXIucGFkZGVkV2lkdGgoKSx3PXIucGFkZGVkSGVpZ2h0KCksRT1TLzIsXz13LzIsQz1yLnBzdHlsZSgiYmFja2dyb3VuZC1ncmFkaWVudC1kaXJlY3Rpb24iKS52YWx1ZTtzd2l0Y2goQyl7Y2FzZSJ0by1ib3R0b20iOmE9dC5jcmVhdGVMaW5lYXJHcmFkaWVudChULngsVC55LV8sVC54LFQueStfKTticmVhaztjYXNlInRvLXRvcCI6YT10LmNyZWF0ZUxpbmVhckdyYWRpZW50KFQueCxULnkrXyxULngsVC55LV8pO2JyZWFrO2Nhc2UidG8tbGVmdCI6YT10LmNyZWF0ZUxpbmVhckdyYWRpZW50KFQueCtFLFQueSxULngtRSxULnkpO2JyZWFrO2Nhc2UidG8tcmlnaHQiOmE9dC5jcmVhdGVMaW5lYXJHcmFkaWVudChULngtRSxULnksVC54K0UsVC55KTticmVhaztjYXNlInRvLWJvdHRvbS1yaWdodCI6Y2FzZSJ0by1yaWdodC1ib3R0b20iOmE9dC5jcmVhdGVMaW5lYXJHcmFkaWVudChULngtRSxULnktXyxULngrRSxULnkrXyk7YnJlYWs7Y2FzZSJ0by10b3AtcmlnaHQiOmNhc2UidG8tcmlnaHQtdG9wIjphPXQuY3JlYXRlTGluZWFyR3JhZGllbnQoVC54LUUsVC55K18sVC54K0UsVC55LV8pO2JyZWFrO2Nhc2UidG8tYm90dG9tLWxlZnQiOmNhc2UidG8tbGVmdC1ib3R0b20iOmE9dC5jcmVhdGVMaW5lYXJHcmFkaWVudChULngrRSxULnktXyxULngtRSxULnkrXyk7YnJlYWs7Y2FzZSJ0by10b3AtbGVmdCI6Y2FzZSJ0by1sZWZ0LXRvcCI6YT10LmNyZWF0ZUxpbmVhckdyYWRpZW50KFQueCtFLFQueStfLFQueC1FLFQueS1fKTticmVha319aWYoIWEpcmV0dXJuIG51bGw7Zm9yKHZhciBEPXUubGVuZ3RoPT09bC5sZW5ndGgsTz1sLmxlbmd0aCxSPTA7UjxPO1IrKylhLmFkZENvbG9yU3RvcChEP3VbUl06Ui8oTy0xKSwicmdiYSgiK2xbUl1bMF0rIiwiK2xbUl1bMV0rIiwiK2xbUl1bMl0rIiwiK2krIikiKTtyZXR1cm4gYX07d3MuZ3JhZGllbnRGaWxsU3R5bGU9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5jcmVhdGVHcmFkaWVudFN0eWxlRm9yKHQsImJhY2tncm91bmQiLGUscixuKTtpZighaSlyZXR1cm4gbnVsbDt0LmZpbGxTdHlsZT1pfTt3cy5jb2xvckZpbGxTdHlsZT1mdW5jdGlvbih0LGUscixuLGkpe3QuZmlsbFN0eWxlPSJyZ2JhKCIrZSsiLCIrcisiLCIrbisiLCIraSsiKSJ9O3dzLmVsZUZpbGxTdHlsZT1mdW5jdGlvbih0LGUscil7dmFyIG49ZS5wc3R5bGUoImJhY2tncm91bmQtZmlsbCIpLnZhbHVlO2lmKG49PT0ibGluZWFyLWdyYWRpZW50Inx8bj09PSJyYWRpYWwtZ3JhZGllbnQiKXRoaXMuZ3JhZGllbnRGaWxsU3R5bGUodCxlLG4scik7ZWxzZXt2YXIgaT1lLnBzdHlsZSgiYmFja2dyb3VuZC1jb2xvciIpLnZhbHVlO3RoaXMuY29sb3JGaWxsU3R5bGUodCxpWzBdLGlbMV0saVsyXSxyKX19O3dzLmdyYWRpZW50U3Ryb2tlU3R5bGU9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5jcmVhdGVHcmFkaWVudFN0eWxlRm9yKHQsImxpbmUiLGUscixuKTtpZighaSlyZXR1cm4gbnVsbDt0LnN0cm9rZVN0eWxlPWl9O3dzLmNvbG9yU3Ryb2tlU3R5bGU9ZnVuY3Rpb24odCxlLHIsbixpKXt0LnN0cm9rZVN0eWxlPSJyZ2JhKCIrZSsiLCIrcisiLCIrbisiLCIraSsiKSJ9O3dzLmVsZVN0cm9rZVN0eWxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lLnBzdHlsZSgibGluZS1maWxsIikudmFsdWU7aWYobj09PSJsaW5lYXItZ3JhZGllbnQifHxuPT09InJhZGlhbC1ncmFkaWVudCIpdGhpcy5ncmFkaWVudFN0cm9rZVN0eWxlKHQsZSxuLHIpO2Vsc2V7dmFyIGk9ZS5wc3R5bGUoImxpbmUtY29sb3IiKS52YWx1ZTt0aGlzLmNvbG9yU3Ryb2tlU3R5bGUodCxpWzBdLGlbMV0saVsyXSxyKX19O3dzLm1hdGNoQ2FudmFzU2l6ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9ZS5kYXRhLG49ZS5maW5kQ29udGFpbmVyQ2xpZW50Q29vcmRzKCksaT1uWzJdLGE9blszXSxzPWUuZ2V0UGl4ZWxSYXRpbygpLGw9ZS5tb3Rpb25CbHVyUHhSYXRpbzsodD09PWUuZGF0YS5idWZmZXJDYW52YXNlc1tlLk1PVElPTkJMVVJfQlVGRkVSX05PREVdfHx0PT09ZS5kYXRhLmJ1ZmZlckNhbnZhc2VzW2UuTU9USU9OQkxVUl9CVUZGRVJfRFJBR10pJiYocz1sKTt2YXIgdT1pKnMsaD1hKnMsZjtpZighKHU9PT1lLmNhbnZhc1dpZHRoJiZoPT09ZS5jYW52YXNIZWlnaHQpKXtlLmZvbnRDYWNoZXM9bnVsbDt2YXIgZD1yLmNhbnZhc0NvbnRhaW5lcjtkLnN0eWxlLndpZHRoPWkrInB4IixkLnN0eWxlLmhlaWdodD1hKyJweCI7Zm9yKHZhciBwPTA7cDxlLkNBTlZBU19MQVlFUlM7cCsrKWY9ci5jYW52YXNlc1twXSxmLndpZHRoPXUsZi5oZWlnaHQ9aCxmLnN0eWxlLndpZHRoPWkrInB4IixmLnN0eWxlLmhlaWdodD1hKyJweCI7Zm9yKHZhciBwPTA7cDxlLkJVRkZFUl9DT1VOVDtwKyspZj1yLmJ1ZmZlckNhbnZhc2VzW3BdLGYud2lkdGg9dSxmLmhlaWdodD1oLGYuc3R5bGUud2lkdGg9aSsicHgiLGYuc3R5bGUuaGVpZ2h0PWErInB4IjtlLnRleHR1cmVNdWx0PTEsczw9MSYmKGY9ci5idWZmZXJDYW52YXNlc1tlLlRFWFRVUkVfQlVGRkVSXSxlLnRleHR1cmVNdWx0PTIsZi53aWR0aD11KmUudGV4dHVyZU11bHQsZi5oZWlnaHQ9aCplLnRleHR1cmVNdWx0KSxlLmNhbnZhc1dpZHRoPXUsZS5jYW52YXNIZWlnaHQ9aCxlLnBpeGVsUmF0aW89c319O3dzLnJlbmRlclRvPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMucmVuZGVyKHtmb3JjZWRDb250ZXh0OnQsZm9yY2VkWm9vbTplLGZvcmNlZFBhbjpyLGRyYXdBbGxMYXllcnM6ITAsZm9yY2VkUHhSYXRpbzpufSl9O3dzLmNsZWFyQ2FudmFzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXQuZGF0YTtmdW5jdGlvbiByKG4pe24uY2xlYXJSZWN0KDAsMCx0LmNhbnZhc1dpZHRoLHQuY2FudmFzSGVpZ2h0KX1vKHIsImNsZWFyIikscihlLmNvbnRleHRzW3QuTk9ERV0pLHIoZS5jb250ZXh0c1t0LkRSQUddKX07d3MucmVuZGVyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dD10fHxrZ2UoKTt2YXIgcj1lLmN5LG49dC5mb3JjZWRDb250ZXh0LGk9dC5kcmF3QWxsTGF5ZXJzLGE9dC5kcmF3T25seU5vZGVMYXllcixzPXQuZm9yY2VkWm9vbSxsPXQuZm9yY2VkUGFuLHU9dC5mb3JjZWRQeFJhdGlvPT09dm9pZCAwP3RoaXMuZ2V0UGl4ZWxSYXRpbygpOnQuZm9yY2VkUHhSYXRpbyxoPWUuZGF0YSxmPWguY2FudmFzTmVlZHNSZWRyYXcsZD1lLnRleHR1cmVPblZpZXdwb3J0JiYhbiYmKGUucGluY2hpbmd8fGUuaG92ZXJEYXRhLmRyYWdnaW5nfHxlLnN3aXBlUGFubmluZ3x8ZS5kYXRhLndoZWVsWm9vbWluZykscD10Lm1vdGlvbkJsdXIhPT12b2lkIDA/dC5tb3Rpb25CbHVyOmUubW90aW9uQmx1cixtPWUubW90aW9uQmx1clB4UmF0aW8sZz1yLmhhc0NvbXBvdW5kTm9kZXMoKSx5PWUuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcyx2PSEhKGUuaG92ZXJEYXRhLnNlbGVjdGluZ3x8ZS50b3VjaERhdGEuc2VsZWN0aW5nKTtwPXAmJiFuJiZlLm1vdGlvbkJsdXJFbmFibGVkJiYhdjt2YXIgeD1wO258fChlLnByZXZQeFJhdGlvIT09dSYmKGUuaW52YWxpZGF0ZUNvbnRhaW5lckNsaWVudENvb3Jkc0NhY2hlKCksZS5tYXRjaENhbnZhc1NpemUoZS5jb250YWluZXIpLGUucmVkcmF3SGludCgiZWxlcyIsITApLGUucmVkcmF3SGludCgiZHJhZyIsITApKSxlLnByZXZQeFJhdGlvPXUpLCFuJiZlLm1vdGlvbkJsdXJUaW1lb3V0JiZjbGVhclRpbWVvdXQoZS5tb3Rpb25CbHVyVGltZW91dCkscCYmKGUubWJGcmFtZXM9PW51bGwmJihlLm1iRnJhbWVzPTApLGUubWJGcmFtZXMrKyxlLm1iRnJhbWVzPDMmJih4PSExKSxlLm1iRnJhbWVzPmUubWluTWJMb3dRdWFsRnJhbWVzJiYoZS5tb3Rpb25CbHVyUHhSYXRpbz1lLm1iUHhSQmx1cnJ5KSksZS5jbGVhcmluZ01vdGlvbkJsdXImJihlLm1vdGlvbkJsdXJQeFJhdGlvPTEpLGUudGV4dHVyZURyYXdMYXN0RnJhbWUmJiFkJiYoZltlLk5PREVdPSEwLGZbZS5TRUxFQ1RfQk9YXT0hMCk7dmFyIGI9ci5zdHlsZSgpLFQ9ci56b29tKCksUz1zIT09dm9pZCAwP3M6VCx3PXIucGFuKCksRT17eDp3LngseTp3Lnl9LF89e3pvb206VCxwYW46e3g6dy54LHk6dy55fX0sQz1lLnByZXZWaWV3cG9ydCxEPUM9PT12b2lkIDB8fF8uem9vbSE9PUMuem9vbXx8Xy5wYW4ueCE9PUMucGFuLnh8fF8ucGFuLnkhPT1DLnBhbi55OyFEJiYhKHkmJiFnKSYmKGUubW90aW9uQmx1clB4UmF0aW89MSksbCYmKEU9bCksUyo9dSxFLngqPXUsRS55Kj11O3ZhciBPPWUuZ2V0Q2FjaGVkWlNvcnRlZEVsZXMoKTtmdW5jdGlvbiBSKFEsaixuZSx0ZSxoZSl7dmFyIGxlPVEuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uO1EuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPSJkZXN0aW5hdGlvbi1vdXQiLGUuY29sb3JGaWxsU3R5bGUoUSwyNTUsMjU1LDI1NSxlLm1vdGlvbkJsdXJUcmFuc3BhcmVuY3kpLFEuZmlsbFJlY3QoaixuZSx0ZSxoZSksUS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249bGV9byhSLCJtYmNsZWFyIik7ZnVuY3Rpb24gayhRLGope3ZhciBuZSx0ZSxoZSxsZTshZS5jbGVhcmluZ01vdGlvbkJsdXImJihRPT09aC5idWZmZXJDb250ZXh0c1tlLk1PVElPTkJMVVJfQlVGRkVSX05PREVdfHxRPT09aC5idWZmZXJDb250ZXh0c1tlLk1PVElPTkJMVVJfQlVGRkVSX0RSQUddKT8obmU9e3g6dy54Km0seTp3LnkqbX0sdGU9VCptLGhlPWUuY2FudmFzV2lkdGgqbSxsZT1lLmNhbnZhc0hlaWdodCptKToobmU9RSx0ZT1TLGhlPWUuY2FudmFzV2lkdGgsbGU9ZS5jYW52YXNIZWlnaHQpLFEuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxqPT09Im1vdGlvbkJsdXIiP1IoUSwwLDAsaGUsbGUpOiFuJiYoaj09PXZvaWQgMHx8aikmJlEuY2xlYXJSZWN0KDAsMCxoZSxsZSksaXx8KFEudHJhbnNsYXRlKG5lLngsbmUueSksUS5zY2FsZSh0ZSx0ZSkpLGwmJlEudHJhbnNsYXRlKGwueCxsLnkpLHMmJlEuc2NhbGUocyxzKX1pZihvKGssInNldENvbnRleHRUcmFuc2Zvcm0iKSxkfHwoZS50ZXh0dXJlRHJhd0xhc3RGcmFtZT0hMSksZCl7aWYoZS50ZXh0dXJlRHJhd0xhc3RGcmFtZT0hMCwhZS50ZXh0dXJlQ2FjaGUpe2UudGV4dHVyZUNhY2hlPXt9LGUudGV4dHVyZUNhY2hlLmJiPXIubXV0YWJsZUVsZW1lbnRzKCkuYm91bmRpbmdCb3goKSxlLnRleHR1cmVDYWNoZS50ZXh0dXJlPWUuZGF0YS5idWZmZXJDYW52YXNlc1tlLlRFWFRVUkVfQlVGRkVSXTt2YXIgTD1lLmRhdGEuYnVmZmVyQ29udGV4dHNbZS5URVhUVVJFX0JVRkZFUl07TC5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLEwuY2xlYXJSZWN0KDAsMCxlLmNhbnZhc1dpZHRoKmUudGV4dHVyZU11bHQsZS5jYW52YXNIZWlnaHQqZS50ZXh0dXJlTXVsdCksZS5yZW5kZXIoe2ZvcmNlZENvbnRleHQ6TCxkcmF3T25seU5vZGVMYXllcjohMCxmb3JjZWRQeFJhdGlvOnUqZS50ZXh0dXJlTXVsdH0pO3ZhciBfPWUudGV4dHVyZUNhY2hlLnZpZXdwb3J0PXt6b29tOnIuem9vbSgpLHBhbjpyLnBhbigpLHdpZHRoOmUuY2FudmFzV2lkdGgsaGVpZ2h0OmUuY2FudmFzSGVpZ2h0fTtfLm1wYW49e3g6KDAtXy5wYW4ueCkvXy56b29tLHk6KDAtXy5wYW4ueSkvXy56b29tfX1mW2UuRFJBR109ITEsZltlLk5PREVdPSExO3ZhciBBPWguY29udGV4dHNbZS5OT0RFXSxJPWUudGV4dHVyZUNhY2hlLnRleHR1cmUsXz1lLnRleHR1cmVDYWNoZS52aWV3cG9ydDtBLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCkscD9SKEEsMCwwLF8ud2lkdGgsXy5oZWlnaHQpOkEuY2xlYXJSZWN0KDAsMCxfLndpZHRoLF8uaGVpZ2h0KTt2YXIgTT1iLmNvcmUoIm91dHNpZGUtdGV4dHVyZS1iZy1jb2xvciIpLnZhbHVlLFA9Yi5jb3JlKCJvdXRzaWRlLXRleHR1cmUtYmctb3BhY2l0eSIpLnZhbHVlO2UuY29sb3JGaWxsU3R5bGUoQSxNWzBdLE1bMV0sTVsyXSxQKSxBLmZpbGxSZWN0KDAsMCxfLndpZHRoLF8uaGVpZ2h0KTt2YXIgVD1yLnpvb20oKTtrKEEsITEpLEEuY2xlYXJSZWN0KF8ubXBhbi54LF8ubXBhbi55LF8ud2lkdGgvXy56b29tL3UsXy5oZWlnaHQvXy56b29tL3UpLEEuZHJhd0ltYWdlKEksXy5tcGFuLngsXy5tcGFuLnksXy53aWR0aC9fLnpvb20vdSxfLmhlaWdodC9fLnpvb20vdSl9ZWxzZSBlLnRleHR1cmVPblZpZXdwb3J0JiYhbiYmKGUudGV4dHVyZUNhY2hlPW51bGwpO3ZhciBCPXIuZXh0ZW50KCksRj1lLnBpbmNoaW5nfHxlLmhvdmVyRGF0YS5kcmFnZ2luZ3x8ZS5zd2lwZVBhbm5pbmd8fGUuZGF0YS53aGVlbFpvb21pbmd8fGUuaG92ZXJEYXRhLmRyYWdnaW5nRWxlc3x8ZS5jeS5hbmltYXRlZCgpLHo9ZS5oaWRlRWRnZXNPblZpZXdwb3J0JiZGLCQ9W107aWYoJFtlLk5PREVdPSFmW2UuTk9ERV0mJnAmJiFlLmNsZWFyZWRGb3JNb3Rpb25CbHVyW2UuTk9ERV18fGUuY2xlYXJpbmdNb3Rpb25CbHVyLCRbZS5OT0RFXSYmKGUuY2xlYXJlZEZvck1vdGlvbkJsdXJbZS5OT0RFXT0hMCksJFtlLkRSQUddPSFmW2UuRFJBR10mJnAmJiFlLmNsZWFyZWRGb3JNb3Rpb25CbHVyW2UuRFJBR118fGUuY2xlYXJpbmdNb3Rpb25CbHVyLCRbZS5EUkFHXSYmKGUuY2xlYXJlZEZvck1vdGlvbkJsdXJbZS5EUkFHXT0hMCksZltlLk5PREVdfHxpfHxhfHwkW2UuTk9ERV0pe3ZhciBVPXAmJiEkW2UuTk9ERV0mJm0hPT0xLEE9bnx8KFU/ZS5kYXRhLmJ1ZmZlckNvbnRleHRzW2UuTU9USU9OQkxVUl9CVUZGRVJfTk9ERV06aC5jb250ZXh0c1tlLk5PREVdKSxLPXAmJiFVPyJtb3Rpb25CbHVyIjp2b2lkIDA7ayhBLEspLHo/ZS5kcmF3Q2FjaGVkTm9kZXMoQSxPLm5vbmRyYWcsdSxCKTplLmRyYXdMYXllcmVkRWxlbWVudHMoQSxPLm5vbmRyYWcsdSxCKSxlLmRlYnVnJiZlLmRyYXdEZWJ1Z1BvaW50cyhBLE8ubm9uZHJhZyksIWkmJiFwJiYoZltlLk5PREVdPSExKX1pZighYSYmKGZbZS5EUkFHXXx8aXx8JFtlLkRSQUddKSl7dmFyIFU9cCYmISRbZS5EUkFHXSYmbSE9PTEsQT1ufHwoVT9lLmRhdGEuYnVmZmVyQ29udGV4dHNbZS5NT1RJT05CTFVSX0JVRkZFUl9EUkFHXTpoLmNvbnRleHRzW2UuRFJBR10pO2soQSxwJiYhVT8ibW90aW9uQmx1ciI6dm9pZCAwKSx6P2UuZHJhd0NhY2hlZE5vZGVzKEEsTy5kcmFnLHUsQik6ZS5kcmF3Q2FjaGVkRWxlbWVudHMoQSxPLmRyYWcsdSxCKSxlLmRlYnVnJiZlLmRyYXdEZWJ1Z1BvaW50cyhBLE8uZHJhZyksIWkmJiFwJiYoZltlLkRSQUddPSExKX1pZih0aGlzLmRyYXdTZWxlY3Rpb25SZWN0YW5nbGUodCxrKSxwJiZtIT09MSl7dmFyIGVlPWguY29udGV4dHNbZS5OT0RFXSxZPWUuZGF0YS5idWZmZXJDYW52YXNlc1tlLk1PVElPTkJMVVJfQlVGRkVSX05PREVdLGNlPWguY29udGV4dHNbZS5EUkFHXSxaPWUuZGF0YS5idWZmZXJDYW52YXNlc1tlLk1PVElPTkJMVVJfQlVGRkVSX0RSQUddLHVlPW8oZnVuY3Rpb24oaixuZSx0ZSl7ai5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLHRlfHwheD9qLmNsZWFyUmVjdCgwLDAsZS5jYW52YXNXaWR0aCxlLmNhbnZhc0hlaWdodCk6UihqLDAsMCxlLmNhbnZhc1dpZHRoLGUuY2FudmFzSGVpZ2h0KTt2YXIgaGU9bTtqLmRyYXdJbWFnZShuZSwwLDAsZS5jYW52YXNXaWR0aCpoZSxlLmNhbnZhc0hlaWdodCpoZSwwLDAsZS5jYW52YXNXaWR0aCxlLmNhbnZhc0hlaWdodCl9LCJkcmF3TW90aW9uQmx1ciIpOyhmW2UuTk9ERV18fCRbZS5OT0RFXSkmJih1ZShlZSxZLCRbZS5OT0RFXSksZltlLk5PREVdPSExKSwoZltlLkRSQUddfHwkW2UuRFJBR10pJiYodWUoY2UsWiwkW2UuRFJBR10pLGZbZS5EUkFHXT0hMSl9ZS5wcmV2Vmlld3BvcnQ9XyxlLmNsZWFyaW5nTW90aW9uQmx1ciYmKGUuY2xlYXJpbmdNb3Rpb25CbHVyPSExLGUubW90aW9uQmx1ckNsZWFyZWQ9ITAsZS5tb3Rpb25CbHVyPSEwKSxwJiYoZS5tb3Rpb25CbHVyVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5tb3Rpb25CbHVyVGltZW91dD1udWxsLGUuY2xlYXJlZEZvck1vdGlvbkJsdXJbZS5OT0RFXT0hMSxlLmNsZWFyZWRGb3JNb3Rpb25CbHVyW2UuRFJBR109ITEsZS5tb3Rpb25CbHVyPSExLGUuY2xlYXJpbmdNb3Rpb25CbHVyPSFkLGUubWJGcmFtZXM9MCxmW2UuTk9ERV09ITAsZltlLkRSQUddPSEwLGUucmVkcmF3KCl9LE5KZSkpLG58fHIuZW1pdCgicmVuZGVyIil9O3dzLmRyYXdTZWxlY3Rpb25SZWN0YW5nbGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLG49ci5jeSxpPXIuZGF0YSxhPW4uc3R5bGUoKSxzPXQuZHJhd09ubHlOb2RlTGF5ZXIsbD10LmRyYXdBbGxMYXllcnMsdT1pLmNhbnZhc05lZWRzUmVkcmF3LGg9dC5mb3JjZWRDb250ZXh0O2lmKHIuc2hvd0Zwc3x8IXMmJnVbci5TRUxFQ1RfQk9YXSYmIWwpe3ZhciBmPWh8fGkuY29udGV4dHNbci5TRUxFQ1RfQk9YXTtpZihlKGYpLHIuc2VsZWN0aW9uWzRdPT0xJiYoci5ob3ZlckRhdGEuc2VsZWN0aW5nfHxyLnRvdWNoRGF0YS5zZWxlY3RpbmcpKXt2YXIgZD1yLmN5Lnpvb20oKSxwPWEuY29yZSgic2VsZWN0aW9uLWJveC1ib3JkZXItd2lkdGgiKS52YWx1ZS9kO2YubGluZVdpZHRoPXAsZi5maWxsU3R5bGU9InJnYmEoIithLmNvcmUoInNlbGVjdGlvbi1ib3gtY29sb3IiKS52YWx1ZVswXSsiLCIrYS5jb3JlKCJzZWxlY3Rpb24tYm94LWNvbG9yIikudmFsdWVbMV0rIiwiK2EuY29yZSgic2VsZWN0aW9uLWJveC1jb2xvciIpLnZhbHVlWzJdKyIsIithLmNvcmUoInNlbGVjdGlvbi1ib3gtb3BhY2l0eSIpLnZhbHVlKyIpIixmLmZpbGxSZWN0KHIuc2VsZWN0aW9uWzBdLHIuc2VsZWN0aW9uWzFdLHIuc2VsZWN0aW9uWzJdLXIuc2VsZWN0aW9uWzBdLHIuc2VsZWN0aW9uWzNdLXIuc2VsZWN0aW9uWzFdKSxwPjAmJihmLnN0cm9rZVN0eWxlPSJyZ2JhKCIrYS5jb3JlKCJzZWxlY3Rpb24tYm94LWJvcmRlci1jb2xvciIpLnZhbHVlWzBdKyIsIithLmNvcmUoInNlbGVjdGlvbi1ib3gtYm9yZGVyLWNvbG9yIikudmFsdWVbMV0rIiwiK2EuY29yZSgic2VsZWN0aW9uLWJveC1ib3JkZXItY29sb3IiKS52YWx1ZVsyXSsiLCIrYS5jb3JlKCJzZWxlY3Rpb24tYm94LW9wYWNpdHkiKS52YWx1ZSsiKSIsZi5zdHJva2VSZWN0KHIuc2VsZWN0aW9uWzBdLHIuc2VsZWN0aW9uWzFdLHIuc2VsZWN0aW9uWzJdLXIuc2VsZWN0aW9uWzBdLHIuc2VsZWN0aW9uWzNdLXIuc2VsZWN0aW9uWzFdKSl9aWYoaS5iZ0FjdGl2ZVBvc2lzdGlvbiYmIXIuaG92ZXJEYXRhLnNlbGVjdGluZyl7dmFyIGQ9ci5jeS56b29tKCksbT1pLmJnQWN0aXZlUG9zaXN0aW9uO2YuZmlsbFN0eWxlPSJyZ2JhKCIrYS5jb3JlKCJhY3RpdmUtYmctY29sb3IiKS52YWx1ZVswXSsiLCIrYS5jb3JlKCJhY3RpdmUtYmctY29sb3IiKS52YWx1ZVsxXSsiLCIrYS5jb3JlKCJhY3RpdmUtYmctY29sb3IiKS52YWx1ZVsyXSsiLCIrYS5jb3JlKCJhY3RpdmUtYmctb3BhY2l0eSIpLnZhbHVlKyIpIixmLmJlZ2luUGF0aCgpLGYuYXJjKG0ueCxtLnksYS5jb3JlKCJhY3RpdmUtYmctc2l6ZSIpLnBmVmFsdWUvZCwwLDIqTWF0aC5QSSksZi5maWxsKCl9dmFyIGc9ci5sYXN0UmVkcmF3VGltZTtpZihyLnNob3dGcHMmJmcpe2c9TWF0aC5yb3VuZChnKTt2YXIgeT1NYXRoLnJvdW5kKDFlMy9nKSx2PSIxIGZyYW1lID0gIitnKyIgbXMgPSAiK3krIiBmcHMiO2lmKGYuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxmLmZpbGxTdHlsZT0icmdiYSgyNTUsIDAsIDAsIDAuNzUpIixmLnN0cm9rZVN0eWxlPSJyZ2JhKDI1NSwgMCwgMCwgMC43NSkiLGYuZm9udD0iMzBweCBBcmlhbCIsIVViKXt2YXIgeD1mLm1lYXN1cmVUZXh0KHYpO1ViPXguYWN0dWFsQm91bmRpbmdCb3hBc2NlbnR9Zi5maWxsVGV4dCh2LDAsVWIpO3ZhciBiPTYwO2Yuc3Ryb2tlUmVjdCgwLFViKzEwLDI1MCwyMCksZi5maWxsUmVjdCgwLFViKzEwLDI1MCpNYXRoLm1pbih5L2IsMSksMjApfWx8fCh1W3IuU0VMRUNUX0JPWF09ITEpfX07byhLbWUsImNvbXBpbGVTaGFkZXIiKTtvKE1KZSwiY3JlYXRlUHJvZ3JhbSIpO28oSUplLCJjcmVhdGVUZXh0dXJlQ2FudmFzIik7byhhRiwiZ2V0RWZmZWN0aXZlUGFuWm9vbSIpO28oZ0IsIm1vZGVsVG9SZW5kZXJlZFBvc2l0aW9uIik7byhBNiwidG9XZWJHTENvbG9yIik7byhfNiwiaW5kZXhUb1ZlYzQiKTtvKE9KZSwidmVjNFRvSW5kZXgiKTtvKFBKZSwiY3JlYXRlVGV4dHVyZSIpO28oTzFlLCJnZXRUeXBlSW5mbyIpO28oUDFlLCJjcmVhdGVUeXBlZEFycmF5Iik7byhCSmUsImNyZWF0ZVR5cGVkQXJyYXlWaWV3Iik7byhGSmUsImNyZWF0ZUJ1ZmZlclN0YXRpY0RyYXciKTtvKHlvLCJjcmVhdGVCdWZmZXJEeW5hbWljRHJhdyIpO28oJEplLCJjcmVhdGVQaWNraW5nRnJhbWVCdWZmZXIiKTtRbWU9dHlwZW9mIEZsb2F0MzJBcnJheTwidSI/RmxvYXQzMkFycmF5OkFycmF5O01hdGguaHlwb3R8fChNYXRoLmh5cG90PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsZT1hcmd1bWVudHMubGVuZ3RoO2UtLTspdCs9YXJndW1lbnRzW2VdKmFyZ3VtZW50c1tlXTtyZXR1cm4gTWF0aC5zcXJ0KHQpfSk7byhaYiwiY3JlYXRlIik7byhCMWUsImlkZW50aXR5Iik7byh6SmUsIm11bHRpcGx5Iik7byhqNiwidHJhbnNsYXRlIik7byhGMWUsInJvdGF0ZSIpO28oc0YsInNjYWxlIik7byhHSmUsInByb2plY3Rpb24iKTtKYj17U0NSRUVOOntuYW1lOiJzY3JlZW4iLHNjcmVlbjohMH0sUElDS0lORzp7bmFtZToicGlja2luZyIscGlja2luZzohMH19LEhiPW9hKHtnZXRLZXk6bnVsbCxkcmF3RWxlbWVudDpudWxsLGdldEJvdW5kaW5nQm94Om51bGwsZ2V0Um90YXRpb246bnVsbCxnZXRSb3RhdGlvblBvaW50Om51bGwsZ2V0Um90YXRpb25PZmZzZXQ6bnVsbCxpc1Zpc2libGU6bnVsbCxnZXRQYWRkaW5nOm51bGx9KSxWSmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUscil7VmYodGhpcyx0KSx0aGlzLmRlYnVnSUQ9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjFlNCksdGhpcy5yPWUsdGhpcy5hdGxhc1NpemU9ci53ZWJnbFRleFNpemUsdGhpcy5yb3dzPXIud2ViZ2xUZXhSb3dzLHRoaXMuZW5hYmxlV3JhcHBpbmc9ci5lbmFibGVXcmFwcGluZyx0aGlzLnRleEhlaWdodD1NYXRoLmZsb29yKHRoaXMuYXRsYXNTaXplL3RoaXMucm93cyksdGhpcy5tYXhUZXhXaWR0aD10aGlzLmF0bGFzU2l6ZSx0aGlzLnRleHR1cmU9bnVsbCx0aGlzLmNhbnZhcz1udWxsLHRoaXMubmVlZHNCdWZmZXI9ITAsdGhpcy5mcmVlUG9pbnRlcj17eDowLHJvdzowfSx0aGlzLmtleVRvTG9jYXRpb249bmV3IE1hcCx0aGlzLmNhbnZhcz1yLmNyZWF0ZVRleHR1cmVDYW52YXMoZSx0aGlzLmF0bGFzU2l6ZSx0aGlzLmF0bGFzU2l6ZSksdGhpcy5zY3JhdGNoPXIuY3JlYXRlVGV4dHVyZUNhbnZhcyhlLHRoaXMuYXRsYXNTaXplLHRoaXMudGV4SGVpZ2h0LCJzY3JhdGNoIil9cmV0dXJuIG8odCwiQXRsYXMiKSxVZih0LFt7a2V5OiJnZXRLZXlzIix2YWx1ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBTZXQodGhpcy5rZXlUb0xvY2F0aW9uLmtleXMoKSl9LCJnZXRLZXlzIil9LHtrZXk6ImdldFNjYWxlIix2YWx1ZTpvKGZ1bmN0aW9uKHIpe3ZhciBuPXIudyxpPXIuaCxhPXRoaXMudGV4SGVpZ2h0LHM9dGhpcy5tYXhUZXhXaWR0aCxsPWEvaSx1PW4qbCxoPWkqbDtyZXR1cm4gdT5zJiYobD1zL24sdT1uKmwsaD1pKmwpLHtzY2FsZTpsLHRleFc6dSx0ZXhIOmh9fSwiZ2V0U2NhbGUiKX0se2tleToiZHJhdyIsdmFsdWU6byhmdW5jdGlvbihyLG4saSl7dmFyIGE9dGhpcyxzPXRoaXMuYXRsYXNTaXplLGw9dGhpcy5yb3dzLHU9dGhpcy50ZXhIZWlnaHQsaD10aGlzLmdldFNjYWxlKG4pLGY9aC5zY2FsZSxkPWgudGV4VyxwPWgudGV4SCxtPVtudWxsLG51bGxdLGc9byhmdW5jdGlvbihULFMpe2lmKGkmJlMpe3ZhciB3PVMuY29udGV4dCxFPVQueCxfPVQucm93LEM9RSxEPXUqXzt3LnNhdmUoKSx3LnRyYW5zbGF0ZShDLEQpLHcuc2NhbGUoZixmKSxpKHcsbiksdy5yZXN0b3JlKCl9fSwiZHJhd0F0IikseT1vKGZ1bmN0aW9uKCl7ZyhhLmZyZWVQb2ludGVyLGEuY2FudmFzKSxtWzBdPXt4OmEuZnJlZVBvaW50ZXIueCx5OmEuZnJlZVBvaW50ZXIucm93KnUsdzpkLGg6cH0sbVsxXT17eDphLmZyZWVQb2ludGVyLngrZCx5OmEuZnJlZVBvaW50ZXIucm93KnUsdzowLGg6cH0sYS5mcmVlUG9pbnRlci54Kz1kLGEuZnJlZVBvaW50ZXIueD09cyYmKGEuZnJlZVBvaW50ZXIueD0wLGEuZnJlZVBvaW50ZXIucm93KyspfSwiZHJhd05vcm1hbCIpLHY9byhmdW5jdGlvbigpe3ZhciBUPWEuc2NyYXRjaCxTPWEuY2FudmFzO1QuY2xlYXIoKSxnKHt4OjAscm93OjB9LFQpO3ZhciB3PXMtYS5mcmVlUG9pbnRlci54LEU9ZC13LF89dTt7dmFyIEM9YS5mcmVlUG9pbnRlci54LEQ9YS5mcmVlUG9pbnRlci5yb3cqdSxPPXc7Uy5jb250ZXh0LmRyYXdJbWFnZShULDAsMCxPLF8sQyxELE8sXyksbVswXT17eDpDLHk6RCx3Ok8saDpwfX17dmFyIFI9dyxrPShhLmZyZWVQb2ludGVyLnJvdysxKSp1LEw9RTtTJiZTLmNvbnRleHQuZHJhd0ltYWdlKFQsUiwwLEwsXywwLGssTCxfKSxtWzFdPXt4OjAseTprLHc6TCxoOnB9fWEuZnJlZVBvaW50ZXIueD1FLGEuZnJlZVBvaW50ZXIucm93Kyt9LCJkcmF3V3JhcHBlZCIpLHg9byhmdW5jdGlvbigpe2EuZnJlZVBvaW50ZXIueD0wLGEuZnJlZVBvaW50ZXIucm93Kyt9LCJtb3ZlVG9TdGFydE9mTmV4dFJvdyIpO2lmKHRoaXMuZnJlZVBvaW50ZXIueCtkPD1zKXkoKTtlbHNle2lmKHRoaXMuZnJlZVBvaW50ZXIucm93Pj1sLTEpcmV0dXJuITE7dGhpcy5mcmVlUG9pbnRlci54PT09cz8oeCgpLHkoKSk6dGhpcy5lbmFibGVXcmFwcGluZz92KCk6KHgoKSx5KCkpfXJldHVybiB0aGlzLmtleVRvTG9jYXRpb24uc2V0KHIsbSksdGhpcy5uZWVkc0J1ZmZlcj0hMCxtfSwiZHJhdyIpfSx7a2V5OiJnZXRPZmZzZXRzIix2YWx1ZTpvKGZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLmtleVRvTG9jYXRpb24uZ2V0KHIpfSwiZ2V0T2Zmc2V0cyIpfSx7a2V5OiJpc0VtcHR5Iix2YWx1ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZnJlZVBvaW50ZXIueD09PTAmJnRoaXMuZnJlZVBvaW50ZXIucm93PT09MH0sImlzRW1wdHkiKX0se2tleToiY2FuRml0Iix2YWx1ZTpvKGZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuYXRsYXNTaXplLGk9dGhpcy5yb3dzLGE9dGhpcy5nZXRTY2FsZShyKSxzPWEudGV4VztyZXR1cm4gdGhpcy5mcmVlUG9pbnRlci54K3M+bj90aGlzLmZyZWVQb2ludGVyLnJvdzxpLTE6ITB9LCJjYW5GaXQiKX0se2tleToiYnVmZmVySWZOZWVkZWQiLHZhbHVlOm8oZnVuY3Rpb24ocil7dGhpcy50ZXh0dXJlfHwodGhpcy50ZXh0dXJlPVBKZShyLHRoaXMuZGVidWdJRCkpLHRoaXMubmVlZHNCdWZmZXImJih0aGlzLnRleHR1cmUuYnVmZmVyKHRoaXMuY2FudmFzKSx0aGlzLm5lZWRzQnVmZmVyPSExKX0sImJ1ZmZlcklmTmVlZGVkIil9LHtrZXk6ImRpc3Bvc2UiLHZhbHVlOm8oZnVuY3Rpb24oKXt0aGlzLnRleHR1cmUmJih0aGlzLnRleHR1cmUuZGVsZXRlVGV4dHVyZSgpLHRoaXMudGV4dHVyZT1udWxsLHRoaXMubmVlZHNCdWZmZXI9ITApfSwiZGlzcG9zZSIpfV0pLHR9KCksVUplPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHIpe1ZmKHRoaXMsdCksdGhpcy5yPWUsdGhpcy5vcHRzPXIsdGhpcy5rZXlUb0lkcz1uZXcgTWFwLHRoaXMuaWRUb0tleT1uZXcgTWFwLHRoaXMuYXRsYXNlcz1bXSx0aGlzLnN0eWxlS2V5VG9BdGxhcz1uZXcgTWFwLHRoaXMuc3R5bGVLZXlOZWVkc1JlZHJhdz1uZXcgU2V0LHRoaXMuZm9yY2VHQz0hMX1yZXR1cm4gbyh0LCJBdGxhc0NvbGxlY3Rpb24iKSxVZih0LFt7a2V5OiJnZXRLZXlzIix2YWx1ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBTZXQodGhpcy5zdHlsZUtleVRvQXRsYXMua2V5cygpKX0sImdldEtleXMiKX0se2tleToiZ2V0SWRzRm9yIix2YWx1ZTpvKGZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMua2V5VG9JZHMuZ2V0KHIpO3JldHVybiBufHwobj1uZXcgU2V0LHRoaXMua2V5VG9JZHMuc2V0KHIsbikpLG59LCJnZXRJZHNGb3IiKX0se2tleToiX2NyZWF0ZUF0bGFzIix2YWx1ZTpvKGZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5yLG49dGhpcy5vcHRzO3JldHVybiBuZXcgVkplKHIsbil9LCJfY3JlYXRlQXRsYXMiKX0se2tleToiX2dldFNjcmF0Y2hDYW52YXMiLHZhbHVlOm8oZnVuY3Rpb24oKXtpZighdGhpcy5zY3JhdGNoKXt2YXIgcj10aGlzLnIsbj10aGlzLm9wdHMsaT1uLndlYmdsVGV4U2l6ZSxhPU1hdGguZmxvb3IoaS9uLndlYmdsVGV4Um93cyk7dGhpcy5zY3JhdGNoPW4uY3JlYXRlVGV4dHVyZUNhbnZhcyhyLGksYSwic2NyYXRjaCIpfXJldHVybiB0aGlzLnNjcmF0Y2h9LCJfZ2V0U2NyYXRjaENhbnZhcyIpfSx7a2V5OiJkcmF3Iix2YWx1ZTpvKGZ1bmN0aW9uKHIsbixpLGEpe2lmKHRoaXMuc3R5bGVLZXlOZWVkc1JlZHJhdy5oYXMobikpe3RoaXMuc3R5bGVLZXlOZWVkc1JlZHJhdy5kZWxldGUobiksdGhpcy5kZWxldGVLZXkocixuKTt2YXIgcz10aGlzLnN0eWxlS2V5VG9BdGxhcy5nZXQobik7cyYmKHMuZm9yY2VHQz0hMCksdGhpcy5zdHlsZUtleVRvQXRsYXMuZGVsZXRlKG4pfXZhciBsPXRoaXMuc3R5bGVLZXlUb0F0bGFzLmdldChuKTtyZXR1cm4gbHx8KGw9dGhpcy5hdGxhc2VzW3RoaXMuYXRsYXNlcy5sZW5ndGgtMV0sKCFsfHwhbC5jYW5GaXQoaSkpJiYobD10aGlzLl9jcmVhdGVBdGxhcygpLHRoaXMuYXRsYXNlcy5wdXNoKGwpKSxsLmRyYXcobixpLGEpLHRoaXMuc3R5bGVLZXlUb0F0bGFzLnNldChuLGwpLHRoaXMuZ2V0SWRzRm9yKG4pLmFkZChyKSx0aGlzLmlkVG9LZXkuc2V0KHIsbikpLGx9LCJkcmF3Iil9LHtrZXk6ImdldEF0bGFzIix2YWx1ZTpvKGZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLnN0eWxlS2V5VG9BdGxhcy5nZXQocil9LCJnZXRBdGxhcyIpfSx7a2V5OiJoYXNBdGxhcyIsdmFsdWU6byhmdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5zdHlsZUtleVRvQXRsYXMuaGFzKHIpfSwiaGFzQXRsYXMiKX0se2tleToiZGVsZXRlS2V5Iix2YWx1ZTpvKGZ1bmN0aW9uKHIsbil7dGhpcy5pZFRvS2V5LmRlbGV0ZShyKSx0aGlzLmdldElkc0ZvcihuKS5kZWxldGUocil9LCJkZWxldGVLZXkiKX0se2tleToiY2hlY2tLZXlJc0ludmFsaWQiLHZhbHVlOm8oZnVuY3Rpb24ocixuKXtpZighdGhpcy5pZFRvS2V5LmhhcyhyKSlyZXR1cm4hMTt2YXIgaT10aGlzLmlkVG9LZXkuZ2V0KHIpO3JldHVybiBpIT1uPyh0aGlzLmRlbGV0ZUtleShyLGkpLCEwKTohMX0sImNoZWNrS2V5SXNJbnZhbGlkIil9LHtrZXk6Il9nZXRLZXlzVG9Db2xsZWN0Iix2YWx1ZTpvKGZ1bmN0aW9uKCl7dmFyIHI9bmV3IFNldCxuPXZvKHRoaXMuc3R5bGVLZXlUb0F0bGFzLmtleXMoKSksaTt0cnl7Zm9yKG4ucygpOyEoaT1uLm4oKSkuZG9uZTspe3ZhciBhPWkudmFsdWU7dGhpcy5nZXRJZHNGb3IoYSkuc2l6ZT09MCYmci5hZGQoYSl9fWNhdGNoKHMpe24uZShzKX1maW5hbGx5e24uZigpfXJldHVybiByfSwiX2dldEtleXNUb0NvbGxlY3QiKX0se2tleToiZ2MiLHZhbHVlOm8oZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49dGhpcy5hdGxhc2VzLnNvbWUoZnVuY3Rpb24ocCl7cmV0dXJuIHAuZm9yY2VHQ30pLGk9dGhpcy5fZ2V0S2V5c1RvQ29sbGVjdCgpO2lmKGkuc2l6ZT09PTAmJiFuKXtjb25zb2xlLmxvZygibm90aGluZyB0byBnYXJiYWdlIGNvbGxlY3QiKTtyZXR1cm59dmFyIGE9W10scz1uZXcgTWFwLGw9bnVsbCx1PXZvKHRoaXMuYXRsYXNlcyksaDt0cnl7dmFyIGY9byhmdW5jdGlvbigpe3ZhciBtPWgudmFsdWUsZz1tLmdldEtleXMoKSx5PUhKZShpLGcpO2lmKHkuc2l6ZT09PTAmJiFtLmZvcmNlR0MpcmV0dXJuIGEucHVzaChtKSxnLmZvckVhY2goZnVuY3Rpb24oXyl7cmV0dXJuIHMuc2V0KF8sbSl9KSwiY29udGludWUiO2x8fChsPXIuX2NyZWF0ZUF0bGFzKCksYS5wdXNoKGwpKTt2YXIgdj12byhnKSx4O3RyeXtmb3Iodi5zKCk7ISh4PXYubigpKS5kb25lOyl7dmFyIGI9eC52YWx1ZTtpZigheS5oYXMoYikpe3ZhciBUPW0uZ2V0T2Zmc2V0cyhiKSxTPVJpKFQsMiksdz1TWzBdLEU9U1sxXTtsLmNhbkZpdCh7dzp3LncrRS53LGg6dy5ofSl8fChsPXIuX2NyZWF0ZUF0bGFzKCksYS5wdXNoKGwpKSxyLl9jb3B5VGV4dHVyZVRvTmV3QXRsYXMoYixtLGwpLHMuc2V0KGIsbCl9fX1jYXRjaChfKXt2LmUoXyl9ZmluYWxseXt2LmYoKX19LCJfbG9vcCIpO2Zvcih1LnMoKTshKGg9dS5uKCkpLmRvbmU7KXZhciBkPWYoKX1jYXRjaChwKXt1LmUocCl9ZmluYWxseXt1LmYoKX10aGlzLmF0bGFzZXM9YSx0aGlzLnN0eWxlS2V5VG9BdGxhcz1zfSwiZ2MiKX0se2tleToiX2NvcHlUZXh0dXJlVG9OZXdBdGxhcyIsdmFsdWU6byhmdW5jdGlvbihyLG4saSl7dmFyIGE9bi5nZXRPZmZzZXRzKHIpLHM9UmkoYSwyKSxsPXNbMF0sdT1zWzFdO2lmKHUudz09PTApaS5kcmF3KHIsbCxmdW5jdGlvbihwKXtwLmRyYXdJbWFnZShuLmNhbnZhcyxsLngsbC55LGwudyxsLmgsMCwwLGwudyxsLmgpfSk7ZWxzZXt2YXIgaD10aGlzLl9nZXRTY3JhdGNoQ2FudmFzKCk7aC5jbGVhcigpLGguY29udGV4dC5kcmF3SW1hZ2Uobi5jYW52YXMsbC54LGwueSxsLncsbC5oLDAsMCxsLncsbC5oKSxoLmNvbnRleHQuZHJhd0ltYWdlKG4uY2FudmFzLHUueCx1LnksdS53LHUuaCxsLncsMCx1LncsdS5oKTt2YXIgZj1sLncrdS53LGQ9bC5oO2kuZHJhdyhyLHt3OmYsaDpkfSxmdW5jdGlvbihwKXtwLmRyYXdJbWFnZShoLDAsMCxmLGQsMCwwLGYsZCl9KX19LCJfY29weVRleHR1cmVUb05ld0F0bGFzIil9LHtrZXk6ImdldENvdW50cyIsdmFsdWU6byhmdW5jdGlvbigpe3JldHVybntrZXlDb3VudDp0aGlzLnN0eWxlS2V5VG9BdGxhcy5zaXplLGF0bGFzQ291bnQ6bmV3IFNldCh0aGlzLnN0eWxlS2V5VG9BdGxhcy52YWx1ZXMoKSkuc2l6ZX19LCJnZXRDb3VudHMiKX1dKSx0fSgpO28oSEplLCJpbnRlcnNlY3Rpb24iKTtXSmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUscil7VmYodGhpcyx0KSx0aGlzLnI9ZTt2YXIgbj1yO3RoaXMuZ2xvYmFsT3B0aW9ucz1uLHRoaXMubWF4QXRsYXNlcz1uLndlYmdsVGV4UGVyQmF0Y2gsdGhpcy5hdGxhc1NpemU9bi53ZWJnbFRleFNpemUsdGhpcy5yZW5kZXJUeXBlcz1uZXcgTWFwLHRoaXMubWF4QXRsYXNlc1BlckJhdGNoPXIud2ViZ2xUZXhQZXJCYXRjaCx0aGlzLmJhdGNoQXRsYXNlcz1bXSx0aGlzLl9jYWNoZVNjcmF0Y2hDYW52YXMobil9cmV0dXJuIG8odCwiQXRsYXNNYW5hZ2VyIiksVWYodCxbe2tleToiX2NhY2hlU2NyYXRjaENhbnZhcyIsdmFsdWU6byhmdW5jdGlvbihyKXt2YXIgbj0tMSxpPS0xLGE9bnVsbCxzPXIuY3JlYXRlVGV4dHVyZUNhbnZhcztyLmNyZWF0ZVRleHR1cmVDYW52YXM9ZnVuY3Rpb24obCx1LGgsZil7cmV0dXJuIGY/KCghYXx8dSE9bnx8aCE9aSkmJihuPXUsaT1oLGE9cyhsLHUsaCkpLGEpOnMobCx1LGgpfX0sIl9jYWNoZVNjcmF0Y2hDYW52YXMiKX0se2tleToiYWRkUmVuZGVyVHlwZSIsdmFsdWU6byhmdW5jdGlvbihyLG4pe3ZhciBpPW5ldyBVSmUodGhpcy5yLHRoaXMuZ2xvYmFsT3B0aW9ucyksYT1uO3RoaXMucmVuZGVyVHlwZXMuc2V0KHIsaXIoe3R5cGU6cixhdGxhc0NvbGxlY3Rpb246aX0sYSkpfSwiYWRkUmVuZGVyVHlwZSIpfSx7a2V5OiJnZXRSZW5kZXJUeXBlcyIsdmFsdWU6byhmdW5jdGlvbigpe3JldHVybiBhZ2UodGhpcy5yZW5kZXJUeXBlcy52YWx1ZXMoKSl9LCJnZXRSZW5kZXJUeXBlcyIpfSx7a2V5OiJnZXRSZW5kZXJUeXBlT3B0cyIsdmFsdWU6byhmdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5yZW5kZXJUeXBlcy5nZXQocil9LCJnZXRSZW5kZXJUeXBlT3B0cyIpfSx7a2V5OiJpbnZhbGlkYXRlIix2YWx1ZTpvKGZ1bmN0aW9uKHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fSxpPW4uZm9yY2VSZWRyYXcsYT1pPT09dm9pZCAwPyExOmkscz1uLmZpbHRlckVsZSxsPXM9PT12b2lkIDA/ZnVuY3Rpb24oKXtyZXR1cm4hMH06cyx1PW4uZmlsdGVyVHlwZSxoPXU9PT12b2lkIDA/ZnVuY3Rpb24oKXtyZXR1cm4hMH06dSxmPSExLGQ9dm8ocikscDt0cnl7Zm9yKGQucygpOyEocD1kLm4oKSkuZG9uZTspe3ZhciBtPXAudmFsdWU7aWYobChtKSl7dmFyIGc9bS5pZCgpLHk9dm8odGhpcy5nZXRSZW5kZXJUeXBlcygpKSx2O3RyeXtmb3IoeS5zKCk7ISh2PXkubigpKS5kb25lOyl7dmFyIHg9di52YWx1ZTtpZihoKHgudHlwZSkpe3ZhciBiPXguZ2V0S2V5KG0pO2E/KHguYXRsYXNDb2xsZWN0aW9uLmRlbGV0ZUtleShnLGIpLHguYXRsYXNDb2xsZWN0aW9uLnN0eWxlS2V5TmVlZHNSZWRyYXcuYWRkKGIpLGY9ITApOmZ8PXguYXRsYXNDb2xsZWN0aW9uLmNoZWNrS2V5SXNJbnZhbGlkKGcsYil9fX1jYXRjaChUKXt5LmUoVCl9ZmluYWxseXt5LmYoKX19fX1jYXRjaChUKXtkLmUoVCl9ZmluYWxseXtkLmYoKX1yZXR1cm4gZn0sImludmFsaWRhdGUiKX0se2tleToiZ2MiLHZhbHVlOm8oZnVuY3Rpb24oKXt2YXIgcj12byh0aGlzLmdldFJlbmRlclR5cGVzKCkpLG47dHJ5e2ZvcihyLnMoKTshKG49ci5uKCkpLmRvbmU7KXt2YXIgaT1uLnZhbHVlO2kuYXRsYXNDb2xsZWN0aW9uLmdjKCl9fWNhdGNoKGEpe3IuZShhKX1maW5hbGx5e3IuZigpfX0sImdjIil9LHtrZXk6ImlzUmVuZGVyYWJsZSIsdmFsdWU6byhmdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuZ2V0UmVuZGVyVHlwZU9wdHMobik7cmV0dXJuIGkmJmkuaXNWaXNpYmxlKHIpfSwiaXNSZW5kZXJhYmxlIil9LHtrZXk6InN0YXJ0QmF0Y2giLHZhbHVlOm8oZnVuY3Rpb24oKXt0aGlzLmJhdGNoQXRsYXNlcz1bXX0sInN0YXJ0QmF0Y2giKX0se2tleToiZ2V0QXRsYXNDb3VudCIsdmFsdWU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmJhdGNoQXRsYXNlcy5sZW5ndGh9LCJnZXRBdGxhc0NvdW50Iil9LHtrZXk6ImdldEF0bGFzZXMiLHZhbHVlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iYXRjaEF0bGFzZXN9LCJnZXRBdGxhc2VzIil9LHtrZXk6ImdldE9yQ3JlYXRlQXRsYXMiLHZhbHVlOm8oZnVuY3Rpb24ocixuLGkpe3ZhciBhPXRoaXMucmVuZGVyVHlwZXMuZ2V0KGkpLHM9YS5nZXRLZXkociksbD1yLmlkKCk7cmV0dXJuIGEuYXRsYXNDb2xsZWN0aW9uLmRyYXcobCxzLG4sZnVuY3Rpb24odSl7YS5kcmF3RWxlbWVudCh1LHIsbiwhMCwhMCl9KX0sImdldE9yQ3JlYXRlQXRsYXMiKX0se2tleToiZ2V0QXRsYXNJbmRleEZvckJhdGNoIix2YWx1ZTpvKGZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuYmF0Y2hBdGxhc2VzLmluZGV4T2Yocik7aWYobjwwKXtpZih0aGlzLmJhdGNoQXRsYXNlcy5sZW5ndGg9PT10aGlzLm1heEF0bGFzZXNQZXJCYXRjaClyZXR1cm47dGhpcy5iYXRjaEF0bGFzZXMucHVzaChyKSxuPXRoaXMuYmF0Y2hBdGxhc2VzLmxlbmd0aC0xfXJldHVybiBufSwiZ2V0QXRsYXNJbmRleEZvckJhdGNoIil9LHtrZXk6ImdldEluZGV4QXJyYXkiLHZhbHVlOm8oZnVuY3Rpb24oKXtyZXR1cm4gQXJyYXkuZnJvbSh7bGVuZ3RoOnRoaXMubWF4QXRsYXNlc30sZnVuY3Rpb24ocixuKXtyZXR1cm4gbn0pfSwiZ2V0SW5kZXhBcnJheSIpfSx7a2V5OiJnZXRBdGxhc0luZm8iLHZhbHVlOm8oZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLnJlbmRlclR5cGVzLmdldChuKSxhPWkuZ2V0Qm91bmRpbmdCb3gocikscz10aGlzLmdldE9yQ3JlYXRlQXRsYXMocixhLG4pLGw9dGhpcy5nZXRBdGxhc0luZGV4Rm9yQmF0Y2gocyk7aWYobCE9PXZvaWQgMCl7dmFyIHU9aS5nZXRLZXkociksaD1zLmdldE9mZnNldHModSksZj1SaShoLDIpLGQ9ZlswXSxwPWZbMV07cmV0dXJue2F0bGFzSUQ6bCx0ZXg6ZCx0ZXgxOmQsdGV4MjpwLGJiOmEsdHlwZTpuLHN0eWxlS2V5OnV9fX0sImdldEF0bGFzSW5mbyIpfSx7a2V5OiJjYW5BZGRUb0N1cnJlbnRCYXRjaCIsdmFsdWU6byhmdW5jdGlvbihyLG4pe2lmKHRoaXMuYmF0Y2hBdGxhc2VzLmxlbmd0aD09PXRoaXMubWF4QXRsYXNlc1BlckJhdGNoKXt2YXIgaT10aGlzLnJlbmRlclR5cGVzLmdldChuKSxhPWkuZ2V0S2V5KHIpLHM9aS5hdGxhc0NvbGxlY3Rpb24uZ2V0QXRsYXMoYSk7cmV0dXJuIHMmJnRoaXMuYmF0Y2hBdGxhc2VzLmluY2x1ZGVzKHMpfXJldHVybiEwfSwiY2FuQWRkVG9DdXJyZW50QmF0Y2giKX0se2tleToic2V0VHJhbnNmb3JtTWF0cml4Iix2YWx1ZTpvKGZ1bmN0aW9uKHIsbixpKXt2YXIgYT1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106ITAscz1uLmJiLGw9bi50eXBlLHU9bi50ZXgxLGg9bi50ZXgyLGY9dGhpcy5nZXRSZW5kZXJUeXBlT3B0cyhsKSxkPWYuZ2V0UGFkZGluZz9mLmdldFBhZGRpbmcoaSk6MCxwPXUudy8odS53K2gudyk7YXx8KHA9MS1wKTt2YXIgbT10aGlzLmdldEFkanVzdGVkQkIocyxkLGEscCksZyx5O0IxZShyKTt2YXIgdj1mLmdldFJvdGF0aW9uP2YuZ2V0Um90YXRpb24oaSk6MDtpZih2IT09MCl7dmFyIHg9Zi5nZXRSb3RhdGlvblBvaW50KGkpLGI9eC54LFQ9eC55O2o2KHIscixbYixUXSksRjFlKHIscix2KTt2YXIgUz1mLmdldFJvdGF0aW9uT2Zmc2V0KGkpO2c9Uy54K20ueE9mZnNldCx5PVMueX1lbHNlIGc9bS54MSx5PW0ueTE7ajYocixyLFtnLHldKSxzRihyLHIsW20udyxtLmhdKX0sInNldFRyYW5zZm9ybU1hdHJpeCIpfSx7a2V5OiJnZXRUcmFuc2Zvcm1NYXRyaXgiLHZhbHVlOm8oZnVuY3Rpb24ocixuKXt2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ITAsYT1aYigpO3JldHVybiB0aGlzLnNldFRyYW5zZm9ybU1hdHJpeChhLHIsbixpKSxhfSwiZ2V0VHJhbnNmb3JtTWF0cml4Iil9LHtrZXk6ImdldEFkanVzdGVkQkIiLHZhbHVlOm8oZnVuY3Rpb24ocixuLGksYSl7dmFyIHM9ci54MSxsPXIueTEsdT1yLncsaD1yLmg7biYmKHMtPW4sbC09bix1Kz0yKm4saCs9MipuKTt2YXIgZj0wLGQ9dSphO3JldHVybiBpJiZhPDE/dT1kOiFpJiZhPDEmJihmPXUtZCxzKz1mLHU9ZCkse3gxOnMseTE6bCx3OnUsaCx4T2Zmc2V0OmZ9fSwiZ2V0QWRqdXN0ZWRCQiIpfSx7a2V5OiJnZXREZWJ1Z0luZm8iLHZhbHVlOm8oZnVuY3Rpb24oKXt2YXIgcj1bXSxuPXZvKHRoaXMucmVuZGVyVHlwZXMpLGk7dHJ5e2ZvcihuLnMoKTshKGk9bi5uKCkpLmRvbmU7KXt2YXIgYT1SaShpLnZhbHVlLDIpLHM9YVswXSxsPWFbMV0sdT1sLmF0bGFzQ29sbGVjdGlvbi5nZXRDb3VudHMoKSxoPXUua2V5Q291bnQsZj11LmF0bGFzQ291bnQ7ci5wdXNoKHt0eXBlOnMsa2V5Q291bnQ6aCxhdGxhc0NvdW50OmZ9KX19Y2F0Y2goZCl7bi5lKGQpfWZpbmFsbHl7bi5mKCl9cmV0dXJuIHJ9LCJnZXREZWJ1Z0luZm8iKX1dKSx0fSgpLHlCPTAsWm1lPTEsSm1lPTIsdkI9MyxxSmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUscixuKXtWZih0aGlzLHQpLHRoaXMucj1lLHRoaXMuZ2w9cix0aGlzLm1heEluc3RhbmNlcz1uLndlYmdsQmF0Y2hTaXplLHRoaXMubWF4QXRsYXNlcz1uLndlYmdsVGV4UGVyQmF0Y2gsdGhpcy5hdGxhc1NpemU9bi53ZWJnbFRleFNpemUsdGhpcy5iZ0NvbG9yPW4uYmdDb2xvcixuLmVuYWJsZVdyYXBwaW5nPSEwLG4uY3JlYXRlVGV4dHVyZUNhbnZhcz1JSmUsdGhpcy5hdGxhc01hbmFnZXI9bmV3IFdKZShlLG4pLHRoaXMucHJvZ3JhbT10aGlzLmNyZWF0ZVNoYWRlclByb2dyYW0oSmIuU0NSRUVOKSx0aGlzLnBpY2tpbmdQcm9ncmFtPXRoaXMuY3JlYXRlU2hhZGVyUHJvZ3JhbShKYi5QSUNLSU5HKSx0aGlzLnZhbz10aGlzLmNyZWF0ZVZBTygpLHRoaXMuZGVidWdJbmZvPVtdfXJldHVybiBvKHQsIkVsZW1lbnREcmF3aW5nV2ViR0wiKSxVZih0LFt7a2V5OiJhZGRUZXh0dXJlUmVuZGVyVHlwZSIsdmFsdWU6byhmdW5jdGlvbihyLG4pe3RoaXMuYXRsYXNNYW5hZ2VyLmFkZFJlbmRlclR5cGUocixuKX0sImFkZFRleHR1cmVSZW5kZXJUeXBlIil9LHtrZXk6ImludmFsaWRhdGUiLHZhbHVlOm8oZnVuY3Rpb24ocil7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOnt9LGk9bi50eXBlLGE9dGhpcy5hdGxhc01hbmFnZXI7cmV0dXJuIGk/YS5pbnZhbGlkYXRlKHIse2ZpbHRlclR5cGU6byhmdW5jdGlvbihsKXtyZXR1cm4gbD09PWl9LCJmaWx0ZXJUeXBlIiksZm9yY2VSZWRyYXc6ITB9KTphLmludmFsaWRhdGUocil9LCJpbnZhbGlkYXRlIil9LHtrZXk6ImdjIix2YWx1ZTpvKGZ1bmN0aW9uKCl7dGhpcy5hdGxhc01hbmFnZXIuZ2MoKX0sImdjIil9LHtrZXk6ImNyZWF0ZVNoYWRlclByb2dyYW0iLHZhbHVlOm8oZnVuY3Rpb24ocil7dmFyIG49dGhpcy5nbCxpPWAjdmVyc2lvbiAzMDAgZXMKICAgICAgcHJlY2lzaW9uIGhpZ2hwIGZsb2F0OwoKICAgICAgdW5pZm9ybSBtYXQzIHVQYW5ab29tTWF0cml4OwogICAgICB1bmlmb3JtIGludCAgdUF0bGFzU2l6ZTsKICAgICAgCiAgICAgIC8vIGluc3RhbmNlZAogICAgICBpbiB2ZWMyIGFQb3NpdGlvbjsgCgogICAgICAvLyB3aGF0IGFyZSB3ZSByZW5kZXJpbmc/CiAgICAgIGluIGludCBhVmVydFR5cGU7CgogICAgICAvLyBmb3IgcGlja2luZwogICAgICBpbiB2ZWM0IGFJbmRleDsKICAgICAgCiAgICAgIC8vIEZvciB0ZXh0dXJlcwogICAgICBpbiBpbnQgYUF0bGFzSWQ7IC8vIHdoaWNoIHNoYWRlciB1bml0L2F0bGFzIHRvIHVzZQogICAgICBpbiB2ZWM0IGFUZXgxOyAvLyB4L3kvdy9oIG9mIHRleHR1cmUgaW4gYXRsYXMKICAgICAgaW4gdmVjNCBhVGV4MjsgCgogICAgICAvLyBmb3IgYW55IHRyYW5zZm9ybXMgdGhhdCBhcmUgbmVlZGVkCiAgICAgIGluIHZlYzQgYVNjYWxlUm90YXRlMTsgIC8vIHZlY3RvcnMgdXNlIGZld2VyIGF0dHJpYnV0ZXMgdGhhbiBtYXRyaWNlcwogICAgICBpbiB2ZWMyIGFUcmFuc2xhdGUxOwogICAgICBpbiB2ZWM0IGFTY2FsZVJvdGF0ZTI7CiAgICAgIGluIHZlYzIgYVRyYW5zbGF0ZTI7CgogICAgICAvLyBmb3IgZWRnZXMKICAgICAgaW4gdmVjNCBhUG9pbnRBUG9pbnRCOwogICAgICBpbiB2ZWM0IGFQb2ludENQb2ludEQ7CiAgICAgIGluIGZsb2F0IGFMaW5lV2lkdGg7CiAgICAgIGluIHZlYzQgYUVkZ2VDb2xvcjsKCiAgICAgIG91dCB2ZWMyIHZUZXhDb29yZDsKICAgICAgb3V0IHZlYzQgdkVkZ2VDb2xvcjsKICAgICAgZmxhdCBvdXQgaW50IHZBdGxhc0lkOwogICAgICBmbGF0IG91dCB2ZWM0IHZJbmRleDsKICAgICAgZmxhdCBvdXQgaW50IHZWZXJ0VHlwZTsKCiAgICAgIHZvaWQgbWFpbih2b2lkKSB7CiAgICAgICAgaW50IHZpZCA9IGdsX1ZlcnRleElEOwogICAgICAgIHZlYzIgcG9zaXRpb24gPSBhUG9zaXRpb247CgogICAgICAgIGlmKGFWZXJ0VHlwZSA9PSBgLmNvbmNhdCh5QixgKSB7CiAgICAgICAgICBmbG9hdCB0ZXhYOwogICAgICAgICAgZmxvYXQgdGV4WTsKICAgICAgICAgIGZsb2F0IHRleFc7CiAgICAgICAgICBmbG9hdCB0ZXhIOwogICAgICAgICAgbWF0MyAgdGV4TWF0cml4OwoKICAgICAgICAgIGludCB2aWQgPSBnbF9WZXJ0ZXhJRDsKICAgICAgICAgIGlmKHZpZCA8PSA1KSB7CiAgICAgICAgICAgIHRleFggPSBhVGV4MS54OwogICAgICAgICAgICB0ZXhZID0gYVRleDEueTsKICAgICAgICAgICAgdGV4VyA9IGFUZXgxLno7CiAgICAgICAgICAgIHRleEggPSBhVGV4MS53OwogICAgICAgICAgICB0ZXhNYXRyaXggPSBtYXQzKAogICAgICAgICAgICAgIHZlYzMoYVNjYWxlUm90YXRlMS54eSwgMC4wKSwKICAgICAgICAgICAgICB2ZWMzKGFTY2FsZVJvdGF0ZTIuencsIDAuMCksCiAgICAgICAgICAgICAgdmVjMyhhVHJhbnNsYXRlMSwgICAgICAxLjApCiAgICAgICAgICAgICk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0ZXhYID0gYVRleDIueDsKICAgICAgICAgICAgdGV4WSA9IGFUZXgyLnk7CiAgICAgICAgICAgIHRleFcgPSBhVGV4Mi56OwogICAgICAgICAgICB0ZXhIID0gYVRleDIudzsKICAgICAgICAgICAgdGV4TWF0cml4ID0gbWF0MygKICAgICAgICAgICAgICB2ZWMzKGFTY2FsZVJvdGF0ZTIueHksIDAuMCksCiAgICAgICAgICAgICAgdmVjMyhhU2NhbGVSb3RhdGUyLnp3LCAwLjApLAogICAgICAgICAgICAgIHZlYzMoYVRyYW5zbGF0ZTIsICAgICAgMS4wKQogICAgICAgICAgICApOwogICAgICAgICAgfQoKICAgICAgICAgIGlmKHZpZCA9PSAxIHx8IHZpZCA9PSAyIHx8IHZpZCA9PSA0IHx8IHZpZCA9PSA3IHx8IHZpZCA9PSA4IHx8IHZpZCA9PSAxMCkgewogICAgICAgICAgICB0ZXhYICs9IHRleFc7CiAgICAgICAgICB9CiAgICAgICAgICBpZih2aWQgPT0gMiB8fCB2aWQgPT0gNCB8fCB2aWQgPT0gNSB8fCB2aWQgPT0gOCB8fCB2aWQgPT0gMTAgfHwgdmlkID09IDExKSB7CiAgICAgICAgICAgIHRleFkgKz0gdGV4SDsKICAgICAgICAgIH0KCiAgICAgICAgICBmbG9hdCBkID0gZmxvYXQodUF0bGFzU2l6ZSk7CiAgICAgICAgICB2VGV4Q29vcmQgPSB2ZWMyKHRleFggLyBkLCB0ZXhZIC8gZCk7IC8vIHRleCBjb29yZHMgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEKCiAgICAgICAgICBnbF9Qb3NpdGlvbiA9IHZlYzQodVBhblpvb21NYXRyaXggKiB0ZXhNYXRyaXggKiB2ZWMzKHBvc2l0aW9uLCAxLjApLCAxLjApOwogICAgICAgIH0gCiAgICAgICAgZWxzZSBpZihhVmVydFR5cGUgPT0gYCkuY29uY2F0KFptZSxgICYmIHZpZCA8IDYpIHsKICAgICAgICAgIHZlYzIgc291cmNlID0gYVBvaW50QVBvaW50Qi54eTsKICAgICAgICAgIHZlYzIgdGFyZ2V0ID0gYVBvaW50QVBvaW50Qi56dzsKCiAgICAgICAgICAvLyBhZGp1c3QgdGhlIGdlb21ldHJ5IHNvIHRoYXQgdGhlIGxpbmUgaXMgY2VudGVyZWQgb24gdGhlIGVkZ2UKICAgICAgICAgIHBvc2l0aW9uLnkgPSBwb3NpdGlvbi55IC0gMC41OwoKICAgICAgICAgIHZlYzIgeEJhc2lzID0gdGFyZ2V0IC0gc291cmNlOwogICAgICAgICAgdmVjMiB5QmFzaXMgPSBub3JtYWxpemUodmVjMigteEJhc2lzLnksIHhCYXNpcy54KSk7CiAgICAgICAgICB2ZWMyIHBvaW50ID0gc291cmNlICsgeEJhc2lzICogcG9zaXRpb24ueCArIHlCYXNpcyAqIGFMaW5lV2lkdGggKiBwb3NpdGlvbi55OwoKICAgICAgICAgIGdsX1Bvc2l0aW9uID0gdmVjNCh1UGFuWm9vbU1hdHJpeCAqIHZlYzMocG9pbnQsIDEuMCksIDEuMCk7CiAgICAgICAgICB2RWRnZUNvbG9yID0gYUVkZ2VDb2xvcjsKICAgICAgICB9IAogICAgICAgIGVsc2UgaWYoYVZlcnRUeXBlID09IGApLmNvbmNhdChKbWUsYCAmJiB2aWQgPCA2KSB7CiAgICAgICAgICB2ZWMyIHBvaW50QSA9IGFQb2ludEFQb2ludEIueHk7CiAgICAgICAgICB2ZWMyIHBvaW50QiA9IGFQb2ludEFQb2ludEIuenc7CiAgICAgICAgICB2ZWMyIHBvaW50QyA9IGFQb2ludENQb2ludEQueHk7CiAgICAgICAgICB2ZWMyIHBvaW50RCA9IGFQb2ludENQb2ludEQuenc7CgogICAgICAgICAgLy8gYWRqdXN0IHRoZSBnZW9tZXRyeSBzbyB0aGF0IHRoZSBsaW5lIGlzIGNlbnRlcmVkIG9uIHRoZSBlZGdlCiAgICAgICAgICBwb3NpdGlvbi55ID0gcG9zaXRpb24ueSAtIDAuNTsKCiAgICAgICAgICB2ZWMyIHAwID0gcG9pbnRBOwogICAgICAgICAgdmVjMiBwMSA9IHBvaW50QjsKICAgICAgICAgIHZlYzIgcDIgPSBwb2ludEM7CiAgICAgICAgICB2ZWMyIHBvcyA9IHBvc2l0aW9uOwogICAgICAgICAgaWYocG9zaXRpb24ueCA9PSAxLjApIHsKICAgICAgICAgICAgcDAgPSBwb2ludEQ7CiAgICAgICAgICAgIHAxID0gcG9pbnRDOwogICAgICAgICAgICBwMiA9IHBvaW50QjsKICAgICAgICAgICAgcG9zID0gdmVjMigwLjAsIC1wb3NpdGlvbi55KTsKICAgICAgICAgIH0KCiAgICAgICAgICB2ZWMyIHAwMSA9IHAxIC0gcDA7CiAgICAgICAgICB2ZWMyIHAxMiA9IHAyIC0gcDE7CiAgICAgICAgICB2ZWMyIHAyMSA9IHAxIC0gcDI7CgogICAgICAgICAgLy8gRmluZCB0aGUgbm9ybWFsIHZlY3Rvci4KICAgICAgICAgIHZlYzIgdGFuZ2VudCA9IG5vcm1hbGl6ZShub3JtYWxpemUocDEyKSArIG5vcm1hbGl6ZShwMDEpKTsKICAgICAgICAgIHZlYzIgbm9ybWFsID0gdmVjMigtdGFuZ2VudC55LCB0YW5nZW50LngpOwoKICAgICAgICAgIC8vIEZpbmQgdGhlIHZlY3RvciBwZXJwZW5kaWN1bGFyIHRvIHAwIC0+IHAxLgogICAgICAgICAgdmVjMiBwMDFOb3JtID0gbm9ybWFsaXplKHZlYzIoLXAwMS55LCBwMDEueCkpOwoKICAgICAgICAgIC8vIERldGVybWluZSB0aGUgYmVuZCBkaXJlY3Rpb24uCiAgICAgICAgICBmbG9hdCBzaWdtYSA9IHNpZ24oZG90KHAwMSArIHAyMSwgbm9ybWFsKSk7CiAgICAgICAgICBmbG9hdCB3aWR0aCA9IGFMaW5lV2lkdGg7CgogICAgICAgICAgaWYoc2lnbihwb3MueSkgPT0gLXNpZ21hKSB7CiAgICAgICAgICAgIC8vIFRoaXMgaXMgYW4gaW50ZXJzZWN0aW5nIHZlcnRleC4gQWRqdXN0IHRoZSBwb3NpdGlvbiBzbyB0aGF0IHRoZXJlJ3Mgbm8gb3ZlcmxhcC4KICAgICAgICAgICAgdmVjMiBwb2ludCA9IDAuNSAqIHdpZHRoICogbm9ybWFsICogLXNpZ21hIC8gZG90KG5vcm1hbCwgcDAxTm9ybSk7CiAgICAgICAgICAgIGdsX1Bvc2l0aW9uID0gdmVjNCh1UGFuWm9vbU1hdHJpeCAqIHZlYzMocDEgKyBwb2ludCwgMS4wKSwgMS4wKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBub24taW50ZXJzZWN0aW5nIHZlcnRleC4gVHJlYXQgaXQgbGlrZSBhIG1pdHJlIGpvaW4uCiAgICAgICAgICAgIHZlYzIgcG9pbnQgPSAwLjUgKiB3aWR0aCAqIG5vcm1hbCAqIHNpZ21hICogZG90KG5vcm1hbCwgcDAxTm9ybSk7CiAgICAgICAgICAgIGdsX1Bvc2l0aW9uID0gdmVjNCh1UGFuWm9vbU1hdHJpeCAqIHZlYzMocDEgKyBwb2ludCwgMS4wKSwgMS4wKTsKICAgICAgICAgIH0KCiAgICAgICAgICB2RWRnZUNvbG9yID0gYUVkZ2VDb2xvcjsKICAgICAgICB9IAogICAgICAgIGVsc2UgaWYoYVZlcnRUeXBlID09IGApLmNvbmNhdCh2QixgICYmIHZpZCA8IDMpIHsKICAgICAgICAgIC8vIG1hc3NhZ2UgdGhlIGZpcnN0IHRyaWFuZ2xlIGludG8gYW4gZWRnZSBhcnJvdwogICAgICAgICAgaWYodmlkID09IDApCiAgICAgICAgICAgIHBvc2l0aW9uID0gdmVjMigtMC4xNSwgLTAuMyk7CiAgICAgICAgICBpZih2aWQgPT0gMSkKICAgICAgICAgICAgcG9zaXRpb24gPSB2ZWMyKCAwLjAsICAgMC4wKTsKICAgICAgICAgIGlmKHZpZCA9PSAyKQogICAgICAgICAgICBwb3NpdGlvbiA9IHZlYzIoIDAuMTUsIC0wLjMpOwoKICAgICAgICAgIG1hdDMgdHJhbnNmb3JtID0gbWF0MygKICAgICAgICAgICAgdmVjMyhhU2NhbGVSb3RhdGUxLnh5LCAwLjApLAogICAgICAgICAgICB2ZWMzKGFTY2FsZVJvdGF0ZTEuencsIDAuMCksCiAgICAgICAgICAgIHZlYzMoYVRyYW5zbGF0ZTEsICAgICAgMS4wKQogICAgICAgICAgKTsKICAgICAgICAgIGdsX1Bvc2l0aW9uID0gdmVjNCh1UGFuWm9vbU1hdHJpeCAqIHRyYW5zZm9ybSAqIHZlYzMocG9zaXRpb24sIDEuMCksIDEuMCk7CiAgICAgICAgICB2RWRnZUNvbG9yID0gYUVkZ2VDb2xvcjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KDIuMCwgMC4wLCAwLjAsIDEuMCk7IC8vIGRpc2NhcmQgdmVydGV4IGJ5IHB1dHRpbmcgaXQgb3V0c2lkZSB3ZWJnbCBjbGlwIHNwYWNlCiAgICAgICAgfQoKICAgICAgICB2QXRsYXNJZCA9IGFBdGxhc0lkOwogICAgICAgIHZJbmRleCA9IGFJbmRleDsKICAgICAgICB2VmVydFR5cGUgPSBhVmVydFR5cGU7CiAgICAgIH0KICAgIGApLGE9dGhpcy5hdGxhc01hbmFnZXIuZ2V0SW5kZXhBcnJheSgpLHM9YCN2ZXJzaW9uIDMwMCBlcwogICAgICBwcmVjaXNpb24gaGlnaHAgZmxvYXQ7CgogICAgICAvLyBkZWZpbmUgdGV4dHVyZSB1bml0IGZvciBlYWNoIG5vZGUgaW4gdGhlIGJhdGNoCiAgICAgIGAuY29uY2F0KGEubWFwKGZ1bmN0aW9uKGgpe3JldHVybiJ1bmlmb3JtIHNhbXBsZXIyRCB1VGV4dHVyZSIuY29uY2F0KGgsIjsiKX0pLmpvaW4oYAoJYCksYAoKICAgICAgdW5pZm9ybSB2ZWM0IHVCR0NvbG9yOwoKICAgICAgaW4gdmVjMiB2VGV4Q29vcmQ7CiAgICAgIGluIHZlYzQgdkVkZ2VDb2xvcjsKICAgICAgZmxhdCBpbiBpbnQgdkF0bGFzSWQ7CiAgICAgIGZsYXQgaW4gdmVjNCB2SW5kZXg7CiAgICAgIGZsYXQgaW4gaW50IHZWZXJ0VHlwZTsKCiAgICAgIG91dCB2ZWM0IG91dENvbG9yOwoKICAgICAgdm9pZCBtYWluKHZvaWQpIHsKICAgICAgICBpZih2VmVydFR5cGUgPT0gYCkuY29uY2F0KHlCLGApIHsKICAgICAgICAgIGApLmNvbmNhdChhLm1hcChmdW5jdGlvbihoKXtyZXR1cm4iaWYodkF0bGFzSWQgPT0gIi5jb25jYXQoaCwiKSBvdXRDb2xvciA9IHRleHR1cmUodVRleHR1cmUiKS5jb25jYXQoaCwiLCB2VGV4Q29vcmQpOyIpfSkuam9pbihgCgllbHNlIGApLGAKICAgICAgICB9IGVsc2UgaWYodlZlcnRUeXBlID09IGApLmNvbmNhdCh2QixgKSB7CiAgICAgICAgICAvLyBibGVuZCBhcnJvdyBjb2xvciB3aXRoIGJhY2tncm91bmQgKHVzaW5nIHByZW11bHRpcGxpZWQgYWxwaGEpCiAgICAgICAgICBvdXRDb2xvci5yZ2IgPSB2RWRnZUNvbG9yLnJnYiArICh1QkdDb2xvci5yZ2IgKiAoMS4wIC0gdkVkZ2VDb2xvci5hKSk7IAogICAgICAgICAgb3V0Q29sb3IuYSA9IDEuMDsgLy8gbWFrZSBvcGFxdWUsIG1hc2tzIG91dCBsaW5lIHVuZGVyIGFycm93CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG91dENvbG9yID0gdkVkZ2VDb2xvcjsKICAgICAgICB9CgogICAgICAgIGApLmNvbmNhdChyLnBpY2tpbmc/YGlmKG91dENvbG9yLmEgPT0gMC4wKSBkaXNjYXJkOwogICAgICAgICAgICAgZWxzZSBvdXRDb2xvciA9IHZJbmRleDtgOiIiLGAKICAgICAgfQogICAgYCksbD1NSmUobixpLHMpO2wuYVBvc2l0aW9uPW4uZ2V0QXR0cmliTG9jYXRpb24obCwiYVBvc2l0aW9uIiksbC5hSW5kZXg9bi5nZXRBdHRyaWJMb2NhdGlvbihsLCJhSW5kZXgiKSxsLmFWZXJ0VHlwZT1uLmdldEF0dHJpYkxvY2F0aW9uKGwsImFWZXJ0VHlwZSIpLGwuYUF0bGFzSWQ9bi5nZXRBdHRyaWJMb2NhdGlvbihsLCJhQXRsYXNJZCIpLGwuYVRleDE9bi5nZXRBdHRyaWJMb2NhdGlvbihsLCJhVGV4MSIpLGwuYVRleDI9bi5nZXRBdHRyaWJMb2NhdGlvbihsLCJhVGV4MiIpLGwuYVNjYWxlUm90YXRlMT1uLmdldEF0dHJpYkxvY2F0aW9uKGwsImFTY2FsZVJvdGF0ZTEiKSxsLmFUcmFuc2xhdGUxPW4uZ2V0QXR0cmliTG9jYXRpb24obCwiYVRyYW5zbGF0ZTEiKSxsLmFTY2FsZVJvdGF0ZTI9bi5nZXRBdHRyaWJMb2NhdGlvbihsLCJhU2NhbGVSb3RhdGUyIiksbC5hVHJhbnNsYXRlMj1uLmdldEF0dHJpYkxvY2F0aW9uKGwsImFUcmFuc2xhdGUyIiksbC5hUG9pbnRBUG9pbnRCPW4uZ2V0QXR0cmliTG9jYXRpb24obCwiYVBvaW50QVBvaW50QiIpLGwuYVBvaW50Q1BvaW50RD1uLmdldEF0dHJpYkxvY2F0aW9uKGwsImFQb2ludENQb2ludEQiKSxsLmFMaW5lV2lkdGg9bi5nZXRBdHRyaWJMb2NhdGlvbihsLCJhTGluZVdpZHRoIiksbC5hRWRnZUNvbG9yPW4uZ2V0QXR0cmliTG9jYXRpb24obCwiYUVkZ2VDb2xvciIpLGwudVBhblpvb21NYXRyaXg9bi5nZXRVbmlmb3JtTG9jYXRpb24obCwidVBhblpvb21NYXRyaXgiKSxsLnVBdGxhc1NpemU9bi5nZXRVbmlmb3JtTG9jYXRpb24obCwidUF0bGFzU2l6ZSIpLGwudUJHQ29sb3I9bi5nZXRVbmlmb3JtTG9jYXRpb24obCwidUJHQ29sb3IiKSxsLnVUZXh0dXJlcz1bXTtmb3IodmFyIHU9MDt1PHRoaXMuYXRsYXNNYW5hZ2VyLm1heEF0bGFzZXM7dSsrKWwudVRleHR1cmVzLnB1c2gobi5nZXRVbmlmb3JtTG9jYXRpb24obCwidVRleHR1cmUiLmNvbmNhdCh1KSkpO3JldHVybiBsfSwiY3JlYXRlU2hhZGVyUHJvZ3JhbSIpfSx7a2V5OiJjcmVhdGVWQU8iLHZhbHVlOm8oZnVuY3Rpb24oKXt2YXIgcj1bMCwwLDEsMCwxLDEsMCwwLDEsMSwwLDFdLG49W10uY29uY2F0KHIscik7dGhpcy52ZXJ0ZXhDb3VudD1uLmxlbmd0aC8yO3ZhciBpPXRoaXMubWF4SW5zdGFuY2VzLGE9dGhpcy5nbCxzPXRoaXMucHJvZ3JhbSxsPWEuY3JlYXRlVmVydGV4QXJyYXkoKTtyZXR1cm4gYS5iaW5kVmVydGV4QXJyYXkobCksRkplKGEsInZlYzIiLHMuYVBvc2l0aW9uLG4pLHRoaXMuaW5kZXhCdWZmZXI9eW8oYSxpLCJ2ZWM0IixzLmFJbmRleCksdGhpcy52ZXJ0VHlwZUJ1ZmZlcj15byhhLGksImludCIscy5hVmVydFR5cGUpLHRoaXMuYXRsYXNJZEJ1ZmZlcj15byhhLGksImludCIscy5hQXRsYXNJZCksdGhpcy50ZXgxQnVmZmVyPXlvKGEsaSwidmVjNCIscy5hVGV4MSksdGhpcy50ZXgyQnVmZmVyPXlvKGEsaSwidmVjNCIscy5hVGV4MiksdGhpcy5zY2FsZVJvdGF0ZTFCdWZmZXI9eW8oYSxpLCJ2ZWM0IixzLmFTY2FsZVJvdGF0ZTEpLHRoaXMudHJhbnNsYXRlMUJ1ZmZlcj15byhhLGksInZlYzIiLHMuYVRyYW5zbGF0ZTEpLHRoaXMuc2NhbGVSb3RhdGUyQnVmZmVyPXlvKGEsaSwidmVjNCIscy5hU2NhbGVSb3RhdGUyKSx0aGlzLnRyYW5zbGF0ZTJCdWZmZXI9eW8oYSxpLCJ2ZWMyIixzLmFUcmFuc2xhdGUyKSx0aGlzLnBvaW50QVBvaW50QkJ1ZmZlcj15byhhLGksInZlYzQiLHMuYVBvaW50QVBvaW50QiksdGhpcy5wb2ludENQb2ludERCdWZmZXI9eW8oYSxpLCJ2ZWM0IixzLmFQb2ludENQb2ludEQpLHRoaXMubGluZVdpZHRoQnVmZmVyPXlvKGEsaSwiZmxvYXQiLHMuYUxpbmVXaWR0aCksdGhpcy5lZGdlQ29sb3JCdWZmZXI9eW8oYSxpLCJ2ZWM0IixzLmFFZGdlQ29sb3IpLGEuYmluZFZlcnRleEFycmF5KG51bGwpLGx9LCJjcmVhdGVWQU8iKX0se2tleToiYnVmZmVycyIsZ2V0Om8oZnVuY3Rpb24oKXt2YXIgcj10aGlzO3JldHVybiB0aGlzLl9idWZmZXJzfHwodGhpcy5fYnVmZmVycz1PYmplY3Qua2V5cyh0aGlzKS5maWx0ZXIoZnVuY3Rpb24obil7cmV0dXJuIG4uZW5kc1dpdGgoIkJ1ZmZlciIpfSkubWFwKGZ1bmN0aW9uKG4pe3JldHVybiByW25dfSkpLHRoaXMuX2J1ZmZlcnN9LCJnZXQiKX0se2tleToic3RhcnRGcmFtZSIsdmFsdWU6byhmdW5jdGlvbihyLG4pe3ZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTpKYi5TQ1JFRU47dGhpcy5wYW5ab29tTWF0cml4PXIsdGhpcy5kZWJ1Z0luZm89bix0aGlzLnJlbmRlclRhcmdldD1pLHRoaXMuc3RhcnRCYXRjaCgpfSwic3RhcnRGcmFtZSIpfSx7a2V5OiJzdGFydEJhdGNoIix2YWx1ZTpvKGZ1bmN0aW9uKCl7dGhpcy5pbnN0YW5jZUNvdW50PTAsdGhpcy5hdGxhc01hbmFnZXIuc3RhcnRCYXRjaCgpfSwic3RhcnRCYXRjaCIpfSx7a2V5OiJlbmRGcmFtZSIsdmFsdWU6byhmdW5jdGlvbigpe3RoaXMuZW5kQmF0Y2goKX0sImVuZEZyYW1lIil9LHtrZXk6ImdldFRlbXBNYXRyaXgiLHZhbHVlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZW1wTWF0cml4PXRoaXMudGVtcE1hdHJpeHx8WmIoKX0sImdldFRlbXBNYXRyaXgiKX0se2tleToiZHJhd1RleHR1cmUiLHZhbHVlOm8oZnVuY3Rpb24ocixuLGkpe3ZhciBhPXRoaXMuYXRsYXNNYW5hZ2VyO2lmKGEuaXNSZW5kZXJhYmxlKHIsaSkpe2EuY2FuQWRkVG9DdXJyZW50QmF0Y2gocixpKXx8dGhpcy5lbmRCYXRjaCgpO3ZhciBzPXRoaXMuaW5zdGFuY2VDb3VudDt0aGlzLnZlcnRUeXBlQnVmZmVyLmdldFZpZXcocylbMF09eUI7dmFyIGw9dGhpcy5pbmRleEJ1ZmZlci5nZXRWaWV3KHMpO182KG4sbCk7dmFyIHU9YS5nZXRBdGxhc0luZm8ocixpLHUpLGg9dS5hdGxhc0lELGY9dS50ZXgxLGQ9dS50ZXgyLHA9dGhpcy5hdGxhc0lkQnVmZmVyLmdldFZpZXcocyk7cFswXT1oO3ZhciBtPXRoaXMudGV4MUJ1ZmZlci5nZXRWaWV3KHMpO21bMF09Zi54LG1bMV09Zi55LG1bMl09Zi53LG1bM109Zi5oO3ZhciBnPXRoaXMudGV4MkJ1ZmZlci5nZXRWaWV3KHMpO2dbMF09ZC54LGdbMV09ZC55LGdbMl09ZC53LGdbM109ZC5oO2Zvcih2YXIgeT10aGlzLmdldFRlbXBNYXRyaXgoKSx2PTAseD1bMSwyXTt2PHgubGVuZ3RoO3YrKyl7dmFyIGI9eFt2XTthLnNldFRyYW5zZm9ybU1hdHJpeCh5LHUscixiPT09MSk7dmFyIFQ9dGhpc1sic2NhbGVSb3RhdGUiLmNvbmNhdChiLCJCdWZmZXIiKV0uZ2V0VmlldyhzKTtUWzBdPXlbMF0sVFsxXT15WzFdLFRbMl09eVszXSxUWzNdPXlbNF07dmFyIFM9dGhpc1sidHJhbnNsYXRlIi5jb25jYXQoYiwiQnVmZmVyIildLmdldFZpZXcocyk7U1swXT15WzZdLFNbMV09eVs3XX10aGlzLmluc3RhbmNlQ291bnQrKyx0aGlzLmluc3RhbmNlQ291bnQ+PXRoaXMubWF4SW5zdGFuY2VzJiZ0aGlzLmVuZEJhdGNoKCl9fSwiZHJhd1RleHR1cmUiKX0se2tleToiZHJhd0VkZ2VBcnJvdyIsdmFsdWU6byhmdW5jdGlvbihyLG4saSl7dmFyIGE9ci5fcHJpdmF0ZS5yc2NyYXRjaCxzLGwsdTtpZihpPT09InNvdXJjZSI/KHM9YS5hcnJvd1N0YXJ0WCxsPWEuYXJyb3dTdGFydFksdT1hLnNyY0Fycm93QW5nbGUpOihzPWEuYXJyb3dFbmRYLGw9YS5hcnJvd0VuZFksdT1hLnRndEFycm93QW5nbGUpLCEoaXNOYU4ocyl8fHM9PW51bGx8fGlzTmFOKGwpfHxsPT1udWxsfHxpc05hTih1KXx8dT09bnVsbCkpe3ZhciBoPXIucHN0eWxlKGkrIi1hcnJvdy1zaGFwZSIpLnZhbHVlO2lmKGghPT0ibm9uZSIpe3ZhciBmPXIucHN0eWxlKGkrIi1hcnJvdy1jb2xvciIpLnZhbHVlLGQ9ci5wc3R5bGUoIm9wYWNpdHkiKS52YWx1ZSxwPXIucHN0eWxlKCJsaW5lLW9wYWNpdHkiKS52YWx1ZSxtPWQqcCxnPXIucHN0eWxlKCJ3aWR0aCIpLnBmVmFsdWUseT1yLnBzdHlsZSgiYXJyb3ctc2NhbGUiKS52YWx1ZSx2PXRoaXMuci5nZXRBcnJvd1dpZHRoKGcseSkseD10aGlzLmdldFRlbXBNYXRyaXgoKTtCMWUoeCksajYoeCx4LFtzLGxdKSxzRih4LHgsW3Ysdl0pLEYxZSh4LHgsdSk7dmFyIGI9dGhpcy5pbnN0YW5jZUNvdW50O3RoaXMudmVydFR5cGVCdWZmZXIuZ2V0VmlldyhiKVswXT12Qjt2YXIgVD10aGlzLmluZGV4QnVmZmVyLmdldFZpZXcoYik7XzYobixUKTt2YXIgUz10aGlzLmVkZ2VDb2xvckJ1ZmZlci5nZXRWaWV3KGIpO0E2KGYsbSxTKTt2YXIgdz10aGlzLnNjYWxlUm90YXRlMUJ1ZmZlci5nZXRWaWV3KGIpO3dbMF09eFswXSx3WzFdPXhbMV0sd1syXT14WzNdLHdbM109eFs0XTt2YXIgRT10aGlzLnRyYW5zbGF0ZTFCdWZmZXIuZ2V0VmlldyhiKTtFWzBdPXhbNl0sRVsxXT14WzddLHRoaXMuaW5zdGFuY2VDb3VudCsrLHRoaXMuaW5zdGFuY2VDb3VudD49dGhpcy5tYXhJbnN0YW5jZXMmJnRoaXMuZW5kQmF0Y2goKX19fSwiZHJhd0VkZ2VBcnJvdyIpfSx7a2V5OiJkcmF3RWRnZUxpbmUiLHZhbHVlOm8oZnVuY3Rpb24ocixuKXt2YXIgaT1yLnBzdHlsZSgib3BhY2l0eSIpLnZhbHVlLGE9ci5wc3R5bGUoImxpbmUtb3BhY2l0eSIpLnZhbHVlLHM9ci5wc3R5bGUoIndpZHRoIikucGZWYWx1ZSxsPXIucHN0eWxlKCJsaW5lLWNvbG9yIikudmFsdWUsdT1pKmEsaD10aGlzLmdldEVkZ2VQb2ludHMocik7aWYoaC5sZW5ndGgvMit0aGlzLmluc3RhbmNlQ291bnQ+dGhpcy5tYXhJbnN0YW5jZXMmJnRoaXMuZW5kQmF0Y2goKSxoLmxlbmd0aD09NCl7dmFyIGY9dGhpcy5pbnN0YW5jZUNvdW50O3RoaXMudmVydFR5cGVCdWZmZXIuZ2V0VmlldyhmKVswXT1abWU7dmFyIGQ9dGhpcy5pbmRleEJ1ZmZlci5nZXRWaWV3KGYpO182KG4sZCk7dmFyIHA9dGhpcy5lZGdlQ29sb3JCdWZmZXIuZ2V0VmlldyhmKTtBNihsLHUscCk7dmFyIG09dGhpcy5saW5lV2lkdGhCdWZmZXIuZ2V0VmlldyhmKTttWzBdPXM7dmFyIGc9dGhpcy5wb2ludEFQb2ludEJCdWZmZXIuZ2V0VmlldyhmKTtnWzBdPWhbMF0sZ1sxXT1oWzFdLGdbMl09aFsyXSxnWzNdPWhbM10sdGhpcy5pbnN0YW5jZUNvdW50KyssdGhpcy5pbnN0YW5jZUNvdW50Pj10aGlzLm1heEluc3RhbmNlcyYmdGhpcy5lbmRCYXRjaCgpfWVsc2UgZm9yKHZhciB5PTA7eTxoLmxlbmd0aC0yO3krPTIpe3ZhciB2PXRoaXMuaW5zdGFuY2VDb3VudDt0aGlzLnZlcnRUeXBlQnVmZmVyLmdldFZpZXcodilbMF09Sm1lO3ZhciB4PXRoaXMuaW5kZXhCdWZmZXIuZ2V0Vmlldyh2KTtfNihuLHgpO3ZhciBiPXRoaXMuZWRnZUNvbG9yQnVmZmVyLmdldFZpZXcodik7QTYobCx1LGIpO3ZhciBUPXRoaXMubGluZVdpZHRoQnVmZmVyLmdldFZpZXcodik7VFswXT1zO3ZhciBTPWhbeS0yXSx3PWhbeS0xXSxFPWhbeV0sXz1oW3krMV0sQz1oW3krMl0sRD1oW3krM10sTz1oW3krNF0sUj1oW3krNV07eT09MCYmKFM9MipFLUMrLjAwMSx3PTIqXy1EKy4wMDEpLHk9PWgubGVuZ3RoLTQmJihPPTIqQy1FKy4wMDEsUj0yKkQtXysuMDAxKTt2YXIgaz10aGlzLnBvaW50QVBvaW50QkJ1ZmZlci5nZXRWaWV3KHYpO2tbMF09UyxrWzFdPXcsa1syXT1FLGtbM109Xzt2YXIgTD10aGlzLnBvaW50Q1BvaW50REJ1ZmZlci5nZXRWaWV3KHYpO0xbMF09QyxMWzFdPUQsTFsyXT1PLExbM109Uix0aGlzLmluc3RhbmNlQ291bnQrKyx0aGlzLmluc3RhbmNlQ291bnQ+PXRoaXMubWF4SW5zdGFuY2VzJiZ0aGlzLmVuZEJhdGNoKCl9fSwiZHJhd0VkZ2VMaW5lIil9LHtrZXk6ImdldEVkZ2VQb2ludHMiLHZhbHVlOm8oZnVuY3Rpb24ocil7dmFyIG49ci5fcHJpdmF0ZS5yc2NyYXRjaCxpPW4uYWxscHRzO2lmKGkubGVuZ3RoPT00KXJldHVybiBpO3ZhciBhPXRoaXMuZ2V0TnVtU2VnbWVudHMocik7cmV0dXJuIHRoaXMuZ2V0Q3VydmVTZWdtZW50UG9pbnRzKGksYSl9LCJnZXRFZGdlUG9pbnRzIil9LHtrZXk6ImdldE51bVNlZ21lbnRzIix2YWx1ZTpvKGZ1bmN0aW9uKHIpe3ZhciBuPTE1O3JldHVybiBNYXRoLm1pbihNYXRoLm1heChuLDUpLHRoaXMubWF4SW5zdGFuY2VzKX0sImdldE51bVNlZ21lbnRzIil9LHtrZXk6ImdldEN1cnZlU2VnbWVudFBvaW50cyIsdmFsdWU6byhmdW5jdGlvbihyLG4pe2lmKHIubGVuZ3RoPT00KXJldHVybiByO2Zvcih2YXIgaT1BcnJheSgobisxKSoyKSxhPTA7YTw9bjthKyspaWYoYT09MClpWzBdPXJbMF0saVsxXT1yWzFdO2Vsc2UgaWYoYT09bilpW2EqMl09cltyLmxlbmd0aC0yXSxpW2EqMisxXT1yW3IubGVuZ3RoLTFdO2Vsc2V7dmFyIHM9YS9uO3RoaXMuc2V0Q3VydmVQb2ludChyLHMsaSxhKjIpfXJldHVybiBpfSwiZ2V0Q3VydmVTZWdtZW50UG9pbnRzIil9LHtrZXk6InNldEN1cnZlUG9pbnQiLHZhbHVlOm8oZnVuY3Rpb24ocixuLGksYSl7aWYoci5sZW5ndGg8PTIpaVthXT1yWzBdLGlbYSsxXT1yWzFdO2Vsc2V7Zm9yKHZhciBzPUFycmF5KHIubGVuZ3RoLTIpLGw9MDtsPHMubGVuZ3RoO2wrPTIpe3ZhciB1PSgxLW4pKnJbbF0rbipyW2wrMl0saD0oMS1uKSpyW2wrMV0rbipyW2wrM107c1tsXT11LHNbbCsxXT1ofXJldHVybiB0aGlzLnNldEN1cnZlUG9pbnQocyxuLGksYSl9fSwic2V0Q3VydmVQb2ludCIpfSx7a2V5OiJlbmRCYXRjaCIsdmFsdWU6byhmdW5jdGlvbigpe3ZhciByPXRoaXMuZ2wsbj10aGlzLnZhbyxpPXRoaXMudmVydGV4Q291bnQsYT10aGlzLmluc3RhbmNlQ291bnQ7aWYoYSE9PTApe3ZhciBzPXRoaXMucmVuZGVyVGFyZ2V0LnBpY2tpbmc/dGhpcy5waWNraW5nUHJvZ3JhbTp0aGlzLnByb2dyYW07ci51c2VQcm9ncmFtKHMpLHIuYmluZFZlcnRleEFycmF5KG4pO3ZhciBsPXZvKHRoaXMuYnVmZmVycyksdTt0cnl7Zm9yKGwucygpOyEodT1sLm4oKSkuZG9uZTspe3ZhciBoPXUudmFsdWU7aC5idWZmZXJTdWJEYXRhKGEpfX1jYXRjaChnKXtsLmUoZyl9ZmluYWxseXtsLmYoKX1mb3IodmFyIGY9dGhpcy5hdGxhc01hbmFnZXIuZ2V0QXRsYXNlcygpLGQ9MDtkPGYubGVuZ3RoO2QrKylmW2RdLmJ1ZmZlcklmTmVlZGVkKHIpO2Zvcih2YXIgcD0wO3A8Zi5sZW5ndGg7cCsrKXIuYWN0aXZlVGV4dHVyZShyLlRFWFRVUkUwK3ApLHIuYmluZFRleHR1cmUoci5URVhUVVJFXzJELGZbcF0udGV4dHVyZSksci51bmlmb3JtMWkocy51VGV4dHVyZXNbcF0scCk7ci51bmlmb3JtTWF0cml4M2Z2KHMudVBhblpvb21NYXRyaXgsITEsdGhpcy5wYW5ab29tTWF0cml4KSxyLnVuaWZvcm0xaShzLnVBdGxhc1NpemUsdGhpcy5hdGxhc01hbmFnZXIuYXRsYXNTaXplKTt2YXIgbT1BNih0aGlzLmJnQ29sb3IsMSk7ci51bmlmb3JtNGZ2KHMudUJHQ29sb3IsbSksci5kcmF3QXJyYXlzSW5zdGFuY2VkKHIuVFJJQU5HTEVTLDAsaSxhKSxyLmJpbmRWZXJ0ZXhBcnJheShudWxsKSxyLmJpbmRUZXh0dXJlKHIuVEVYVFVSRV8yRCxudWxsKSx0aGlzLmRlYnVnSW5mbyYmdGhpcy5kZWJ1Z0luZm8ucHVzaCh7Y291bnQ6YSxhdGxhc0NvdW50OmYubGVuZ3RofSksdGhpcy5zdGFydEJhdGNoKCl9fSwiZW5kQmF0Y2giKX0se2tleToiZ2V0RGVidWdJbmZvIix2YWx1ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVidWdJbmZvfSwiZ2V0RGVidWdJbmZvIil9LHtrZXk6ImdldEF0bGFzRGVidWdJbmZvIix2YWx1ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXRsYXNNYW5hZ2VyLmdldERlYnVnSW5mbygpfSwiZ2V0QXRsYXNEZWJ1Z0luZm8iKX1dKSx0fSgpO28oZWdlLCJmaWxsU3R5bGUiKTtZSmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe1ZmKHRoaXMsdCksdGhpcy5yPWV9cmV0dXJuIG8odCwiT3ZlcmxheVVuZGVybGF5UmVuZGVyZXIiKSxVZih0LFt7a2V5OiJnZXRTdHlsZUtleSIsdmFsdWU6byhmdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuZ2V0U3R5bGUocixuKSxhPWkuc2hhcGUscz1pLm9wYWNpdHksbD1pLmNvbG9yO2lmKCFhKXJldHVybiBudWxsO3ZhciB1PW4ud2lkdGgoKSxoPW4uaGVpZ2h0KCksZj1lZ2UobCxzKTtyZXR1cm4gQmYoIiIuY29uY2F0KGEsIi0iKS5jb25jYXQodSwiLSIpLmNvbmNhdChoLCItIikuY29uY2F0KGYpKX0sImdldFN0eWxlS2V5Iil9LHtrZXk6ImlzVmlzaWJsZSIsdmFsdWU6byhmdW5jdGlvbihyLG4pe3ZhciBpPW4ucHN0eWxlKCIiLmNvbmNhdChyLCItb3BhY2l0eSIpKS52YWx1ZTtyZXR1cm4gaT4wfSwiaXNWaXNpYmxlIil9LHtrZXk6ImdldFN0eWxlIix2YWx1ZTpvKGZ1bmN0aW9uKHIsbil7dmFyIGk9bi5wc3R5bGUoIiIuY29uY2F0KHIsIi1vcGFjaXR5IikpLnZhbHVlLGE9bi5wc3R5bGUoIiIuY29uY2F0KHIsIi1jb2xvciIpKS52YWx1ZSxzPW4ucHN0eWxlKCIiLmNvbmNhdChyLCItc2hhcGUiKSkudmFsdWU7cmV0dXJue29wYWNpdHk6aSxjb2xvcjphLHNoYXBlOnN9fSwiZ2V0U3R5bGUiKX0se2tleToiZ2V0UGFkZGluZyIsdmFsdWU6byhmdW5jdGlvbihyLG4pe3JldHVybiBuLnBzdHlsZSgiIi5jb25jYXQociwiLXBhZGRpbmciKSkucGZWYWx1ZX0sImdldFBhZGRpbmciKX0se2tleToiZHJhdyIsdmFsdWU6byhmdW5jdGlvbihyLG4saSxhKXtpZih0aGlzLmlzVmlzaWJsZShyLGkpKXt2YXIgcz10aGlzLnIsbD1hLncsdT1hLmgsaD1sLzIsZj11LzIsZD10aGlzLmdldFN0eWxlKHIsaSkscD1kLnNoYXBlLG09ZC5jb2xvcixnPWQub3BhY2l0eTtuLnNhdmUoKSxuLmZpbGxTdHlsZT1lZ2UobSxnKSxwPT09InJvdW5kLXJlY3RhbmdsZSJ8fHA9PT0icm91bmRyZWN0YW5nbGUiP3MuZHJhd1JvdW5kUmVjdGFuZ2xlUGF0aChuLGgsZixsLHUsImF1dG8iKTpwPT09ImVsbGlwc2UiJiZzLmRyYXdFbGxpcHNlUGF0aChuLGgsZixsLHUpLG4uZmlsbCgpLG4ucmVzdG9yZSgpfX0sImRyYXciKX1dKSx0fSgpO28oWEplLCJnZXRCR0NvbG9yIik7JDFlPXt9OyQxZS5pbml0V2ViZ2w9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLG49ci5kYXRhLmNvbnRleHRzW3IuV0VCR0xdLGk9dC5jeS5jb250YWluZXIoKTt0LmJnQ29sb3I9WEplKGkpLHQud2ViZ2xUZXhTaXplPU1hdGgubWluKHQud2ViZ2xUZXhTaXplLG4uZ2V0UGFyYW1ldGVyKG4uTUFYX1RFWFRVUkVfU0laRSkpLHQud2ViZ2xUZXhSb3dzPU1hdGgubWluKHQud2ViZ2xUZXhSb3dzLDU0KSx0LndlYmdsQmF0Y2hTaXplPU1hdGgubWluKHQud2ViZ2xCYXRjaFNpemUsMTYzODQpLHQud2ViZ2xUZXhQZXJCYXRjaD1NYXRoLm1pbih0LndlYmdsVGV4UGVyQmF0Y2gsbi5nZXRQYXJhbWV0ZXIobi5NQVhfVEVYVFVSRV9JTUFHRV9VTklUUykpLHIud2ViZ2xEZWJ1Zz10LndlYmdsRGVidWcsci53ZWJnbERlYnVnU2hvd0F0bGFzZXM9dC53ZWJnbERlYnVnU2hvd0F0bGFzZXMsY29uc29sZS5sb2coIm1heCB0ZXh0dXJlIHVuaXRzIixuLmdldFBhcmFtZXRlcihuLk1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKSksY29uc29sZS5sb2coIm1heCB0ZXh0dXJlIHNpemUiLG4uZ2V0UGFyYW1ldGVyKG4uTUFYX1RFWFRVUkVfU0laRSkpLGNvbnNvbGUubG9nKCJ3ZWJnbCBvcHRpb25zIix0KSxyLnBpY2tpbmdGcmFtZUJ1ZmZlcj0kSmUobiksci5waWNraW5nRnJhbWVCdWZmZXIubmVlZHNEcmF3PSEwO3ZhciBhPW8oZnVuY3Rpb24oZil7cmV0dXJuIHIuZ2V0VGV4dEFuZ2xlKGYsbnVsbCl9LCJnZXRMYWJlbFJvdGF0aW9uIikscz1vKGZ1bmN0aW9uKGYpe3ZhciBkPWYucHN0eWxlKCJsYWJlbCIpO3JldHVybiBkJiZkLnZhbHVlfSwiaXNMYWJlbFZpc2libGUiKTtyLmVsZURyYXdpbmc9bmV3IHFKZShyLG4sdCk7dmFyIGw9bmV3IFlKZShyKTtyLmVsZURyYXdpbmcuYWRkVGV4dHVyZVJlbmRlclR5cGUoIm5vZGUtYm9keSIsSGIoe2dldEtleTplLmdldFN0eWxlS2V5LGdldEJvdW5kaW5nQm94OmUuZ2V0RWxlbWVudEJveCxkcmF3RWxlbWVudDplLmRyYXdFbGVtZW50LGlzVmlzaWJsZTpvKGZ1bmN0aW9uKGYpe3JldHVybiBmLnZpc2libGUoKX0sImlzVmlzaWJsZSIpfSkpLHIuZWxlRHJhd2luZy5hZGRUZXh0dXJlUmVuZGVyVHlwZSgibm9kZS1sYWJlbCIsSGIoe2dldEtleTplLmdldExhYmVsS2V5LGdldEJvdW5kaW5nQm94OmUuZ2V0TGFiZWxCb3gsZHJhd0VsZW1lbnQ6ZS5kcmF3TGFiZWwsZ2V0Um90YXRpb246YSxnZXRSb3RhdGlvblBvaW50OmUuZ2V0TGFiZWxSb3RhdGlvblBvaW50LGdldFJvdGF0aW9uT2Zmc2V0OmUuZ2V0TGFiZWxSb3RhdGlvbk9mZnNldCxpc1Zpc2libGU6c30pKSxyLmVsZURyYXdpbmcuYWRkVGV4dHVyZVJlbmRlclR5cGUoIm5vZGUtb3ZlcmxheSIsSGIoe2dldEJvdW5kaW5nQm94OmUuZ2V0RWxlbWVudEJveCxnZXRLZXk6byhmdW5jdGlvbihmKXtyZXR1cm4gbC5nZXRTdHlsZUtleSgib3ZlcmxheSIsZil9LCJnZXRLZXkiKSxkcmF3RWxlbWVudDpvKGZ1bmN0aW9uKGYsZCxwKXtyZXR1cm4gbC5kcmF3KCJvdmVybGF5IixmLGQscCl9LCJkcmF3RWxlbWVudCIpLGlzVmlzaWJsZTpvKGZ1bmN0aW9uKGYpe3JldHVybiBsLmlzVmlzaWJsZSgib3ZlcmxheSIsZil9LCJpc1Zpc2libGUiKSxnZXRQYWRkaW5nOm8oZnVuY3Rpb24oZil7cmV0dXJuIGwuZ2V0UGFkZGluZygib3ZlcmxheSIsZil9LCJnZXRQYWRkaW5nIil9KSksci5lbGVEcmF3aW5nLmFkZFRleHR1cmVSZW5kZXJUeXBlKCJub2RlLXVuZGVybGF5IixIYih7Z2V0Qm91bmRpbmdCb3g6ZS5nZXRFbGVtZW50Qm94LGdldEtleTpvKGZ1bmN0aW9uKGYpe3JldHVybiBsLmdldFN0eWxlS2V5KCJ1bmRlcmxheSIsZil9LCJnZXRLZXkiKSxkcmF3RWxlbWVudDpvKGZ1bmN0aW9uKGYsZCxwKXtyZXR1cm4gbC5kcmF3KCJ1bmRlcmxheSIsZixkLHApfSwiZHJhd0VsZW1lbnQiKSxpc1Zpc2libGU6byhmdW5jdGlvbihmKXtyZXR1cm4gbC5pc1Zpc2libGUoInVuZGVybGF5IixmKX0sImlzVmlzaWJsZSIpLGdldFBhZGRpbmc6byhmdW5jdGlvbihmKXtyZXR1cm4gbC5nZXRQYWRkaW5nKCJ1bmRlcmxheSIsZil9LCJnZXRQYWRkaW5nIil9KSksci5lbGVEcmF3aW5nLmFkZFRleHR1cmVSZW5kZXJUeXBlKCJlZGdlLWxhYmVsIixIYih7Z2V0S2V5OmUuZ2V0TGFiZWxLZXksZ2V0Qm91bmRpbmdCb3g6ZS5nZXRMYWJlbEJveCxkcmF3RWxlbWVudDplLmRyYXdMYWJlbCxnZXRSb3RhdGlvbjphLGdldFJvdGF0aW9uUG9pbnQ6ZS5nZXRMYWJlbFJvdGF0aW9uUG9pbnQsZ2V0Um90YXRpb25PZmZzZXQ6ZS5nZXRMYWJlbFJvdGF0aW9uT2Zmc2V0LGlzVmlzaWJsZTpzfSkpO3ZhciB1PXA0KGZ1bmN0aW9uKCl7Y29uc29sZS5sb2coImdhcmJhZ2UgY29sbGVjdCBmbGFnIHNldCIpLHIuZGF0YS5nYz0hMH0sMWU0KTtyLm9uVXBkYXRlRWxlQ2FsY3MoZnVuY3Rpb24oaCxmKXt2YXIgZD0hMTtmJiZmLmxlbmd0aD4wJiYoZHw9ci5lbGVEcmF3aW5nLmludmFsaWRhdGUoZikpLGQmJnUoKX0pLGpKZShyKX07byhqSmUsIm92ZXJyaWRlQ2FudmFzUmVuZGVyZXJGdW5jdGlvbnMiKTtvKEtKZSwiY2xlYXJXZWJnbCIpO28oUUplLCJjbGVhckNhbnZhcyIpO28oWkplLCJjcmVhdGVQYW5ab29tTWF0cml4Iik7byh6MWUsInNldENvbnRleHRUcmFuc2Zvcm0iKTtvKEpKZSwiZHJhd1NlbGVjdGlvblJlY3RhbmdsZSIpO28oZWV0LCJkcmF3QXhlcyIpO28odGV0LCJkcmF3QXRsYXNlcyIpO28ocmV0LCJnZXRQaWNraW5nSW5kZXhlcyIpO28obmV0LCJmaW5kTmVhcmVzdEVsZW1lbnRzV2ViZ2wiKTtvKEcxZSwicmVuZGVyV2ViZ2wiKTtXZj17fTtXZi5kcmF3UG9seWdvblBhdGg9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBzPW4vMixsPWkvMjt0LmJlZ2luUGF0aCYmdC5iZWdpblBhdGgoKSx0Lm1vdmVUbyhlK3MqYVswXSxyK2wqYVsxXSk7Zm9yKHZhciB1PTE7dTxhLmxlbmd0aC8yO3UrKyl0LmxpbmVUbyhlK3MqYVt1KjJdLHIrbCphW3UqMisxXSk7dC5jbG9zZVBhdGgoKX07V2YuZHJhd1JvdW5kUG9seWdvblBhdGg9ZnVuY3Rpb24odCxlLHIsbixpLGEscyl7cy5mb3JFYWNoKGZ1bmN0aW9uKGwpe3JldHVybiBUMWUodCxsKX0pLHQuY2xvc2VQYXRoKCl9O1dmLmRyYXdSb3VuZFJlY3RhbmdsZVBhdGg9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBzPW4vMixsPWkvMix1PWE9PT0iYXV0byI/WnAobixpKTpNYXRoLm1pbihhLGwscyk7dC5iZWdpblBhdGgmJnQuYmVnaW5QYXRoKCksdC5tb3ZlVG8oZSxyLWwpLHQuYXJjVG8oZStzLHItbCxlK3Mscix1KSx0LmFyY1RvKGUrcyxyK2wsZSxyK2wsdSksdC5hcmNUbyhlLXMscitsLGUtcyxyLHUpLHQuYXJjVG8oZS1zLHItbCxlLHItbCx1KSx0LmxpbmVUbyhlLHItbCksdC5jbG9zZVBhdGgoKX07V2YuZHJhd0JvdHRvbVJvdW5kUmVjdGFuZ2xlUGF0aD1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIHM9bi8yLGw9aS8yLHU9YT09PSJhdXRvIj9acChuLGkpOmE7dC5iZWdpblBhdGgmJnQuYmVnaW5QYXRoKCksdC5tb3ZlVG8oZSxyLWwpLHQubGluZVRvKGUrcyxyLWwpLHQubGluZVRvKGUrcyxyKSx0LmFyY1RvKGUrcyxyK2wsZSxyK2wsdSksdC5hcmNUbyhlLXMscitsLGUtcyxyLHUpLHQubGluZVRvKGUtcyxyLWwpLHQubGluZVRvKGUsci1sKSx0LmNsb3NlUGF0aCgpfTtXZi5kcmF3Q3V0UmVjdGFuZ2xlUGF0aD1mdW5jdGlvbih0LGUscixuLGksYSxzKXt2YXIgbD1uLzIsdT1pLzIsaD1zPT09ImF1dG8iP0hCKCk6czt0LmJlZ2luUGF0aCYmdC5iZWdpblBhdGgoKSx0Lm1vdmVUbyhlLWwraCxyLXUpLHQubGluZVRvKGUrbC1oLHItdSksdC5saW5lVG8oZStsLHItdStoKSx0LmxpbmVUbyhlK2wscit1LWgpLHQubGluZVRvKGUrbC1oLHIrdSksdC5saW5lVG8oZS1sK2gscit1KSx0LmxpbmVUbyhlLWwscit1LWgpLHQubGluZVRvKGUtbCxyLXUraCksdC5jbG9zZVBhdGgoKX07V2YuZHJhd0JhcnJlbFBhdGg9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT1uLzIscz1pLzIsbD1lLWEsdT1lK2EsaD1yLXMsZj1yK3MsZD1UQihuLGkpLHA9ZC53aWR0aE9mZnNldCxtPWQuaGVpZ2h0T2Zmc2V0LGc9ZC5jdHJsUHRPZmZzZXRQY3QqcDt0LmJlZ2luUGF0aCYmdC5iZWdpblBhdGgoKSx0Lm1vdmVUbyhsLGgrbSksdC5saW5lVG8obCxmLW0pLHQucXVhZHJhdGljQ3VydmVUbyhsK2csZixsK3AsZiksdC5saW5lVG8odS1wLGYpLHQucXVhZHJhdGljQ3VydmVUbyh1LWcsZix1LGYtbSksdC5saW5lVG8odSxoK20pLHQucXVhZHJhdGljQ3VydmVUbyh1LWcsaCx1LXAsaCksdC5saW5lVG8obCtwLGgpLHQucXVhZHJhdGljQ3VydmVUbyhsK2csaCxsLGgrbSksdC5jbG9zZVBhdGgoKX07dGdlPU1hdGguc2luKDApLHJnZT1NYXRoLmNvcygwKSxNQj17fSxJQj17fSxWMWU9TWF0aC5QSS80MDtmb3IoSHA9MCpNYXRoLlBJO0hwPDIqTWF0aC5QSTtIcCs9VjFlKU1CW0hwXT1NYXRoLnNpbihIcCksSUJbSHBdPU1hdGguY29zKEhwKTtXZi5kcmF3RWxsaXBzZVBhdGg9ZnVuY3Rpb24odCxlLHIsbixpKXtpZih0LmJlZ2luUGF0aCYmdC5iZWdpblBhdGgoKSx0LmVsbGlwc2UpdC5lbGxpcHNlKGUscixuLzIsaS8yLDAsMCwyKk1hdGguUEkpO2Vsc2UgZm9yKHZhciBhLHMsbD1uLzIsdT1pLzIsaD0wKk1hdGguUEk7aDwyKk1hdGguUEk7aCs9VjFlKWE9ZS1sKk1CW2hdKnRnZStsKklCW2hdKnJnZSxzPXIrdSpJQltoXSp0Z2UrdSpNQltoXSpyZ2UsaD09PTA/dC5tb3ZlVG8oYSxzKTp0LmxpbmVUbyhhLHMpO3QuY2xvc2VQYXRoKCl9O2I0PXt9O2I0LmNyZWF0ZUJ1ZmZlcj1mdW5jdGlvbih0LGUpe3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO3JldHVybiByLndpZHRoPXQsci5oZWlnaHQ9ZSxbcixyLmdldENvbnRleHQoIjJkIildfTtiNC5idWZmZXJDYW52YXNJbWFnZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmN5LHI9ZS5tdXRhYmxlRWxlbWVudHMoKSxuPXIuYm91bmRpbmdCb3goKSxpPXRoaXMuZmluZENvbnRhaW5lckNsaWVudENvb3JkcygpLGE9dC5mdWxsP01hdGguY2VpbChuLncpOmlbMl0scz10LmZ1bGw/TWF0aC5jZWlsKG4uaCk6aVszXSxsPV90KHQubWF4V2lkdGgpfHxfdCh0Lm1heEhlaWdodCksdT10aGlzLmdldFBpeGVsUmF0aW8oKSxoPTE7aWYodC5zY2FsZSE9PXZvaWQgMClhKj10LnNjYWxlLHMqPXQuc2NhbGUsaD10LnNjYWxlO2Vsc2UgaWYobCl7dmFyIGY9MS8wLGQ9MS8wO190KHQubWF4V2lkdGgpJiYoZj1oKnQubWF4V2lkdGgvYSksX3QodC5tYXhIZWlnaHQpJiYoZD1oKnQubWF4SGVpZ2h0L3MpLGg9TWF0aC5taW4oZixkKSxhKj1oLHMqPWh9bHx8KGEqPXUscyo9dSxoKj11KTt2YXIgcD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtwLndpZHRoPWEscC5oZWlnaHQ9cyxwLnN0eWxlLndpZHRoPWErInB4IixwLnN0eWxlLmhlaWdodD1zKyJweCI7dmFyIG09cC5nZXRDb250ZXh0KCIyZCIpO2lmKGE+MCYmcz4wKXttLmNsZWFyUmVjdCgwLDAsYSxzKSxtLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0ic291cmNlLW92ZXIiO3ZhciBnPXRoaXMuZ2V0Q2FjaGVkWlNvcnRlZEVsZXMoKTtpZih0LmZ1bGwpbS50cmFuc2xhdGUoLW4ueDEqaCwtbi55MSpoKSxtLnNjYWxlKGgsaCksdGhpcy5kcmF3RWxlbWVudHMobSxnKSxtLnNjYWxlKDEvaCwxL2gpLG0udHJhbnNsYXRlKG4ueDEqaCxuLnkxKmgpO2Vsc2V7dmFyIHk9ZS5wYW4oKSx2PXt4OnkueCpoLHk6eS55Kmh9O2gqPWUuem9vbSgpLG0udHJhbnNsYXRlKHYueCx2LnkpLG0uc2NhbGUoaCxoKSx0aGlzLmRyYXdFbGVtZW50cyhtLGcpLG0uc2NhbGUoMS9oLDEvaCksbS50cmFuc2xhdGUoLXYueCwtdi55KX10LmJnJiYobS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249ImRlc3RpbmF0aW9uLW92ZXIiLG0uZmlsbFN0eWxlPXQuYmcsbS5yZWN0KDAsMCxhLHMpLG0uZmlsbCgpKX1yZXR1cm4gcH07byhpZXQsImI2NFRvQmxvYiIpO28obmdlLCJiNjRVcmlUb0I2NCIpO28oVTFlLCJvdXRwdXQiKTtiNC5wbmc9ZnVuY3Rpb24odCl7cmV0dXJuIFUxZSh0LHRoaXMuYnVmZmVyQ2FudmFzSW1hZ2UodCksImltYWdlL3BuZyIpfTtiNC5qcGc9ZnVuY3Rpb24odCl7cmV0dXJuIFUxZSh0LHRoaXMuYnVmZmVyQ2FudmFzSW1hZ2UodCksImltYWdlL2pwZWciKX07SDFlPXt9O0gxZS5ub2RlU2hhcGVJbXBsPWZ1bmN0aW9uKHQsZSxyLG4saSxhLHMsbCl7c3dpdGNoKHQpe2Nhc2UiZWxsaXBzZSI6cmV0dXJuIHRoaXMuZHJhd0VsbGlwc2VQYXRoKGUscixuLGksYSk7Y2FzZSJwb2x5Z29uIjpyZXR1cm4gdGhpcy5kcmF3UG9seWdvblBhdGgoZSxyLG4saSxhLHMpO2Nhc2Uicm91bmQtcG9seWdvbiI6cmV0dXJuIHRoaXMuZHJhd1JvdW5kUG9seWdvblBhdGgoZSxyLG4saSxhLHMsbCk7Y2FzZSJyb3VuZHJlY3RhbmdsZSI6Y2FzZSJyb3VuZC1yZWN0YW5nbGUiOnJldHVybiB0aGlzLmRyYXdSb3VuZFJlY3RhbmdsZVBhdGgoZSxyLG4saSxhLGwpO2Nhc2UiY3V0cmVjdGFuZ2xlIjpjYXNlImN1dC1yZWN0YW5nbGUiOnJldHVybiB0aGlzLmRyYXdDdXRSZWN0YW5nbGVQYXRoKGUscixuLGksYSxzLGwpO2Nhc2UiYm90dG9tcm91bmRyZWN0YW5nbGUiOmNhc2UiYm90dG9tLXJvdW5kLXJlY3RhbmdsZSI6cmV0dXJuIHRoaXMuZHJhd0JvdHRvbVJvdW5kUmVjdGFuZ2xlUGF0aChlLHIsbixpLGEsbCk7Y2FzZSJiYXJyZWwiOnJldHVybiB0aGlzLmRyYXdCYXJyZWxQYXRoKGUscixuLGksYSl9fTthZXQ9VzFlLFNyPVcxZS5wcm90b3R5cGU7U3IuQ0FOVkFTX0xBWUVSUz0zO1NyLlNFTEVDVF9CT1g9MDtTci5EUkFHPTE7U3IuTk9ERT0yO1NyLldFQkdMPTM7U3IuQ0FOVkFTX1RZUEVTPVsiMmQiLCIyZCIsIjJkIiwid2ViZ2wyIl07U3IuQlVGRkVSX0NPVU5UPTM7U3IuVEVYVFVSRV9CVUZGRVI9MDtTci5NT1RJT05CTFVSX0JVRkZFUl9OT0RFPTE7U3IuTU9USU9OQkxVUl9CVUZGRVJfRFJBRz0yO28oVzFlLCJDYW52YXNSZW5kZXJlciIpO1NyLnJlZHJhd0hpbnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzO3N3aXRjaCh0KXtjYXNlImVsZXMiOnIuZGF0YS5jYW52YXNOZWVkc1JlZHJhd1tTci5OT0RFXT1lO2JyZWFrO2Nhc2UiZHJhZyI6ci5kYXRhLmNhbnZhc05lZWRzUmVkcmF3W1NyLkRSQUddPWU7YnJlYWs7Y2FzZSJzZWxlY3QiOnIuZGF0YS5jYW52YXNOZWVkc1JlZHJhd1tTci5TRUxFQ1RfQk9YXT1lO2JyZWFrO2Nhc2UiZ2MiOnIuZGF0YS5nYz0hMDticmVha319O3NldD10eXBlb2YgUGF0aDJEPCJ1IjtTci5wYXRoMmRFbmFibGVkPWZ1bmN0aW9uKHQpe2lmKHQ9PT12b2lkIDApcmV0dXJuIHRoaXMucGF0aHNFbmFibGVkO3RoaXMucGF0aHNFbmFibGVkPSEhdH07U3IudXNlUGF0aHM9ZnVuY3Rpb24oKXtyZXR1cm4gc2V0JiZ0aGlzLnBhdGhzRW5hYmxlZH07U3Iuc2V0SW1nU21vb3RoaW5nPWZ1bmN0aW9uKHQsZSl7dC5pbWFnZVNtb290aGluZ0VuYWJsZWQhPW51bGw/dC5pbWFnZVNtb290aGluZ0VuYWJsZWQ9ZToodC53ZWJraXRJbWFnZVNtb290aGluZ0VuYWJsZWQ9ZSx0Lm1vekltYWdlU21vb3RoaW5nRW5hYmxlZD1lLHQubXNJbWFnZVNtb290aGluZ0VuYWJsZWQ9ZSl9O1NyLmdldEltZ1Ntb290aGluZz1mdW5jdGlvbih0KXtyZXR1cm4gdC5pbWFnZVNtb290aGluZ0VuYWJsZWQhPW51bGw/dC5pbWFnZVNtb290aGluZ0VuYWJsZWQ6dC53ZWJraXRJbWFnZVNtb290aGluZ0VuYWJsZWR8fHQubW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkfHx0Lm1zSW1hZ2VTbW9vdGhpbmdFbmFibGVkfTtTci5tYWtlT2Zmc2NyZWVuQ2FudmFzPWZ1bmN0aW9uKHQsZSl7dmFyIHI7aWYoKHR5cGVvZiBPZmZzY3JlZW5DYW52YXM+InUiPyJ1bmRlZmluZWQiOnFpKE9mZnNjcmVlbkNhbnZhcykpIT09InVuZGVmaW5lZCIpcj1uZXcgT2Zmc2NyZWVuQ2FudmFzKHQsZSk7ZWxzZXt2YXIgbj10aGlzLmN5LndpbmRvdygpLGk9bi5kb2N1bWVudDtyPWkuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksci53aWR0aD10LHIuaGVpZ2h0PWV9cmV0dXJuIHJ9O1tOMWUsdHUsb2gsaUYsbjAscHksd3MsJDFlLFdmLGI0LEgxZV0uZm9yRWFjaChmdW5jdGlvbih0KXtpcihTcix0KX0pO29ldD1be25hbWU6Im51bGwiLGltcGw6djFlfSx7bmFtZToiYmFzZSIsaW1wbDpfMWV9LHtuYW1lOiJjYW52YXMiLGltcGw6YWV0fV0sY2V0PVt7dHlwZToibGF5b3V0IixleHRlbnNpb25zOkhaZX0se3R5cGU6InJlbmRlcmVyIixleHRlbnNpb25zOm9ldH1dLHExZT17fSxZMWU9e307byhYMWUsInNldEV4dGVuc2lvbiIpO28oajFlLCJnZXRFeHRlbnNpb24iKTtvKHVldCwic2V0TW9kdWxlIik7byhoZXQsImdldE1vZHVsZSIpO09CPW8oZnVuY3Rpb24oKXtpZihhcmd1bWVudHMubGVuZ3RoPT09MilyZXR1cm4gajFlLmFwcGx5KG51bGwsYXJndW1lbnRzKTtpZihhcmd1bWVudHMubGVuZ3RoPT09MylyZXR1cm4gWDFlLmFwcGx5KG51bGwsYXJndW1lbnRzKTtpZihhcmd1bWVudHMubGVuZ3RoPT09NClyZXR1cm4gaGV0LmFwcGx5KG51bGwsYXJndW1lbnRzKTtpZihhcmd1bWVudHMubGVuZ3RoPT09NSlyZXR1cm4gdWV0LmFwcGx5KG51bGwsYXJndW1lbnRzKTtvaSgiSW52YWxpZCBleHRlbnNpb24gYWNjZXNzIHN5bnRheCIpfSwiZXh0ZW5zaW9uIik7dTQucHJvdG90eXBlLmV4dGVuc2lvbj1PQjtjZXQuZm9yRWFjaChmdW5jdGlvbih0KXt0LmV4dGVuc2lvbnMuZm9yRWFjaChmdW5jdGlvbihlKXtYMWUodC50eXBlLGUubmFtZSxlLmltcGwpfSl9KTtLMWU9byhmdW5jdGlvbiB0KCl7aWYoISh0aGlzIGluc3RhbmNlb2YgdCkpcmV0dXJuIG5ldyB0O3RoaXMubGVuZ3RoPTB9LCJTdHlsZXNoZWV0IiksdDA9SzFlLnByb3RvdHlwZTt0MC5pbnN0YW5jZVN0cmluZz1mdW5jdGlvbigpe3JldHVybiJzdHlsZXNoZWV0In07dDAuc2VsZWN0b3I9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sZW5ndGgrKztyZXR1cm4gdGhpc1tlXT17c2VsZWN0b3I6dCxwcm9wZXJ0aWVzOltdfSx0aGlzfTt0MC5jc3M9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxlbmd0aC0xO2lmKFp0KHQpKXRoaXNbcl0ucHJvcGVydGllcy5wdXNoKHtuYW1lOnQsdmFsdWU6ZX0pO2Vsc2UgaWYoVXIodCkpZm9yKHZhciBuPXQsaT1PYmplY3Qua2V5cyhuKSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBzPWlbYV0sbD1uW3NdO2lmKGwhPW51bGwpe3ZhciB1PVVhLnByb3BlcnRpZXNbc118fFVhLnByb3BlcnRpZXNbSzYocyldO2lmKHUhPW51bGwpe3ZhciBoPXUubmFtZSxmPWw7dGhpc1tyXS5wcm9wZXJ0aWVzLnB1c2goe25hbWU6aCx2YWx1ZTpmfSl9fX1yZXR1cm4gdGhpc307dDAuc3R5bGU9dDAuY3NzO3QwLmdlbmVyYXRlU3R5bGU9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IFVhKHQpO3JldHVybiB0aGlzLmFwcGVuZFRvU3R5bGUoZSl9O3QwLmFwcGVuZFRvU3R5bGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aDtlKyspe3ZhciByPXRoaXNbZV0sbj1yLnNlbGVjdG9yLGk9ci5wcm9wZXJ0aWVzO3Quc2VsZWN0b3Iobik7Zm9yKHZhciBhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBzPWlbYV07dC5jc3Mocy5uYW1lLHMudmFsdWUpfX1yZXR1cm4gdH07ZmV0PSIzLjMxLjAiLHNsPW8oZnVuY3Rpb24oZSl7aWYoZT09PXZvaWQgMCYmKGU9e30pLFVyKGUpKXJldHVybiBuZXcgdTQoZSk7aWYoWnQoZSkpcmV0dXJuIE9CLmFwcGx5KE9CLGFyZ3VtZW50cyl9LCJjeXRvc2NhcGUiKTtzbC51c2U9ZnVuY3Rpb24odCl7dmFyIGU9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO3JldHVybiBlLnVuc2hpZnQoc2wpLHQuYXBwbHkobnVsbCxlKSx0aGlzfTtzbC53YXJuaW5ncz1mdW5jdGlvbih0KXtyZXR1cm4gVGdlKHQpfTtzbC52ZXJzaW9uPWZldDtzbC5zdHlsZXNoZWV0PXNsLlN0eWxlc2hlZXQ9SzFlfSk7dmFyIGNGPVBpKChUNCxsRik9PnsidXNlIHN0cmljdCI7byhmdW5jdGlvbihlLHIpe3R5cGVvZiBUND09Im9iamVjdCImJnR5cGVvZiBsRj09Im9iamVjdCI/bEYuZXhwb3J0cz1yKCk6dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZD9kZWZpbmUoW10scik6dHlwZW9mIFQ0PT0ib2JqZWN0Ij9UNC5sYXlvdXRCYXNlPXIoKTplLmxheW91dEJhc2U9cigpfSwid2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iKShUNCxmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT17fTtmdW5jdGlvbiByKG4pe2lmKGVbbl0pcmV0dXJuIGVbbl0uZXhwb3J0czt2YXIgaT1lW25dPXtpOm4sbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gdFtuXS5jYWxsKGkuZXhwb3J0cyxpLGkuZXhwb3J0cyxyKSxpLmw9ITAsaS5leHBvcnRzfXJldHVybiBvKHIsIl9fd2VicGFja19yZXF1aXJlX18iKSxyLm09dCxyLmM9ZSxyLmk9ZnVuY3Rpb24obil7cmV0dXJuIG59LHIuZD1mdW5jdGlvbihuLGksYSl7ci5vKG4saSl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGkse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLGdldDphfSl9LHIubj1mdW5jdGlvbihuKXt2YXIgaT1uJiZuLl9fZXNNb2R1bGU/byhmdW5jdGlvbigpe3JldHVybiBuLmRlZmF1bHR9LCJnZXREZWZhdWx0Iik6byhmdW5jdGlvbigpe3JldHVybiBufSwiZ2V0TW9kdWxlRXhwb3J0cyIpO3JldHVybiByLmQoaSwiYSIsaSksaX0sci5vPWZ1bmN0aW9uKG4saSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLGkpfSxyLnA9IiIscihyLnM9MjYpfShbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKCl7fW8obiwiTGF5b3V0Q29uc3RhbnRzIiksbi5RVUFMSVRZPTEsbi5ERUZBVUxUX0NSRUFURV9CRU5EU19BU19ORUVERUQ9ITEsbi5ERUZBVUxUX0lOQ1JFTUVOVEFMPSExLG4uREVGQVVMVF9BTklNQVRJT05fT05fTEFZT1VUPSEwLG4uREVGQVVMVF9BTklNQVRJT05fRFVSSU5HX0xBWU9VVD0hMSxuLkRFRkFVTFRfQU5JTUFUSU9OX1BFUklPRD01MCxuLkRFRkFVTFRfVU5JRk9STV9MRUFGX05PREVfU0laRVM9ITEsbi5ERUZBVUxUX0dSQVBIX01BUkdJTj0xNSxuLk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUz0hMSxuLlNJTVBMRV9OT0RFX1NJWkU9NDAsbi5TSU1QTEVfTk9ERV9IQUxGX1NJWkU9bi5TSU1QTEVfTk9ERV9TSVpFLzIsbi5FTVBUWV9DT01QT1VORF9OT0RFX1NJWkU9NDAsbi5NSU5fRURHRV9MRU5HVEg9MSxuLldPUkxEX0JPVU5EQVJZPTFlNixuLklOSVRJQUxfV09STERfQk9VTkRBUlk9bi5XT1JMRF9CT1VOREFSWS8xZTMsbi5XT1JMRF9DRU5URVJfWD0xMjAwLG4uV09STERfQ0VOVEVSX1k9OTAwLHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMiksaT1yKDgpLGE9cig5KTtmdW5jdGlvbiBzKHUsaCxmKXtuLmNhbGwodGhpcyxmKSx0aGlzLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldD0hMSx0aGlzLnZHcmFwaE9iamVjdD1mLHRoaXMuYmVuZHBvaW50cz1bXSx0aGlzLnNvdXJjZT11LHRoaXMudGFyZ2V0PWh9byhzLCJMRWRnZSIpLHMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpO2Zvcih2YXIgbCBpbiBuKXNbbF09bltsXTtzLnByb3RvdHlwZS5nZXRTb3VyY2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zb3VyY2V9LHMucHJvdG90eXBlLmdldFRhcmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRhcmdldH0scy5wcm90b3R5cGUuaXNJbnRlckdyYXBoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbnRlckdyYXBofSxzLnByb3RvdHlwZS5nZXRMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGh9LHMucHJvdG90eXBlLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldH0scy5wcm90b3R5cGUuZ2V0QmVuZHBvaW50cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJlbmRwb2ludHN9LHMucHJvdG90eXBlLmdldExjYT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxjYX0scy5wcm90b3R5cGUuZ2V0U291cmNlSW5MY2E9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zb3VyY2VJbkxjYX0scy5wcm90b3R5cGUuZ2V0VGFyZ2V0SW5MY2E9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50YXJnZXRJbkxjYX0scy5wcm90b3R5cGUuZ2V0T3RoZXJFbmQ9ZnVuY3Rpb24odSl7aWYodGhpcy5zb3VyY2U9PT11KXJldHVybiB0aGlzLnRhcmdldDtpZih0aGlzLnRhcmdldD09PXUpcmV0dXJuIHRoaXMuc291cmNlO3Rocm93Ik5vZGUgaXMgbm90IGluY2lkZW50IHdpdGggdGhpcyBlZGdlIn0scy5wcm90b3R5cGUuZ2V0T3RoZXJFbmRJbkdyYXBoPWZ1bmN0aW9uKHUsaCl7Zm9yKHZhciBmPXRoaXMuZ2V0T3RoZXJFbmQodSksZD1oLmdldEdyYXBoTWFuYWdlcigpLmdldFJvb3QoKTs7KXtpZihmLmdldE93bmVyKCk9PWgpcmV0dXJuIGY7aWYoZi5nZXRPd25lcigpPT1kKWJyZWFrO2Y9Zi5nZXRPd25lcigpLmdldFBhcmVudCgpfXJldHVybiBudWxsfSxzLnByb3RvdHlwZS51cGRhdGVMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgdT1uZXcgQXJyYXkoNCk7dGhpcy5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXQ9aS5nZXRJbnRlcnNlY3Rpb24odGhpcy50YXJnZXQuZ2V0UmVjdCgpLHRoaXMuc291cmNlLmdldFJlY3QoKSx1KSx0aGlzLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldHx8KHRoaXMubGVuZ3RoWD11WzBdLXVbMl0sdGhpcy5sZW5ndGhZPXVbMV0tdVszXSxNYXRoLmFicyh0aGlzLmxlbmd0aFgpPDEmJih0aGlzLmxlbmd0aFg9YS5zaWduKHRoaXMubGVuZ3RoWCkpLE1hdGguYWJzKHRoaXMubGVuZ3RoWSk8MSYmKHRoaXMubGVuZ3RoWT1hLnNpZ24odGhpcy5sZW5ndGhZKSksdGhpcy5sZW5ndGg9TWF0aC5zcXJ0KHRoaXMubGVuZ3RoWCp0aGlzLmxlbmd0aFgrdGhpcy5sZW5ndGhZKnRoaXMubGVuZ3RoWSkpfSxzLnByb3RvdHlwZS51cGRhdGVMZW5ndGhTaW1wbGU9ZnVuY3Rpb24oKXt0aGlzLmxlbmd0aFg9dGhpcy50YXJnZXQuZ2V0Q2VudGVyWCgpLXRoaXMuc291cmNlLmdldENlbnRlclgoKSx0aGlzLmxlbmd0aFk9dGhpcy50YXJnZXQuZ2V0Q2VudGVyWSgpLXRoaXMuc291cmNlLmdldENlbnRlclkoKSxNYXRoLmFicyh0aGlzLmxlbmd0aFgpPDEmJih0aGlzLmxlbmd0aFg9YS5zaWduKHRoaXMubGVuZ3RoWCkpLE1hdGguYWJzKHRoaXMubGVuZ3RoWSk8MSYmKHRoaXMubGVuZ3RoWT1hLnNpZ24odGhpcy5sZW5ndGhZKSksdGhpcy5sZW5ndGg9TWF0aC5zcXJ0KHRoaXMubGVuZ3RoWCp0aGlzLmxlbmd0aFgrdGhpcy5sZW5ndGhZKnRoaXMubGVuZ3RoWSl9LHQuZXhwb3J0cz1zfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oaSl7dGhpcy52R3JhcGhPYmplY3Q9aX1vKG4sIkxHcmFwaE9iamVjdCIpLHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMiksaT1yKDEwKSxhPXIoMTMpLHM9cigwKSxsPXIoMTYpLHU9cig0KTtmdW5jdGlvbiBoKGQscCxtLGcpe209PW51bGwmJmc9PW51bGwmJihnPXApLG4uY2FsbCh0aGlzLGcpLGQuZ3JhcGhNYW5hZ2VyIT1udWxsJiYoZD1kLmdyYXBoTWFuYWdlciksdGhpcy5lc3RpbWF0ZWRTaXplPWkuTUlOX1ZBTFVFLHRoaXMuaW5jbHVzaW9uVHJlZURlcHRoPWkuTUFYX1ZBTFVFLHRoaXMudkdyYXBoT2JqZWN0PWcsdGhpcy5lZGdlcz1bXSx0aGlzLmdyYXBoTWFuYWdlcj1kLG0hPW51bGwmJnAhPW51bGw/dGhpcy5yZWN0PW5ldyBhKHAueCxwLnksbS53aWR0aCxtLmhlaWdodCk6dGhpcy5yZWN0PW5ldyBhfW8oaCwiTE5vZGUiKSxoLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKTtmb3IodmFyIGYgaW4gbiloW2ZdPW5bZl07aC5wcm90b3R5cGUuZ2V0RWRnZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGdlc30saC5wcm90b3R5cGUuZ2V0Q2hpbGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZH0saC5wcm90b3R5cGUuZ2V0T3duZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lcn0saC5wcm90b3R5cGUuZ2V0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0LndpZHRofSxoLnByb3RvdHlwZS5zZXRXaWR0aD1mdW5jdGlvbihkKXt0aGlzLnJlY3Qud2lkdGg9ZH0saC5wcm90b3R5cGUuZ2V0SGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC5oZWlnaHR9LGgucHJvdG90eXBlLnNldEhlaWdodD1mdW5jdGlvbihkKXt0aGlzLnJlY3QuaGVpZ2h0PWR9LGgucHJvdG90eXBlLmdldENlbnRlclg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0LngrdGhpcy5yZWN0LndpZHRoLzJ9LGgucHJvdG90eXBlLmdldENlbnRlclk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0LnkrdGhpcy5yZWN0LmhlaWdodC8yfSxoLnByb3RvdHlwZS5nZXRDZW50ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHUodGhpcy5yZWN0LngrdGhpcy5yZWN0LndpZHRoLzIsdGhpcy5yZWN0LnkrdGhpcy5yZWN0LmhlaWdodC8yKX0saC5wcm90b3R5cGUuZ2V0TG9jYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHUodGhpcy5yZWN0LngsdGhpcy5yZWN0LnkpfSxoLnByb3RvdHlwZS5nZXRSZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdH0saC5wcm90b3R5cGUuZ2V0RGlhZ29uYWw9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMucmVjdC53aWR0aCp0aGlzLnJlY3Qud2lkdGgrdGhpcy5yZWN0LmhlaWdodCp0aGlzLnJlY3QuaGVpZ2h0KX0saC5wcm90b3R5cGUuZ2V0SGFsZlRoZURpYWdvbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLnJlY3QuaGVpZ2h0KnRoaXMucmVjdC5oZWlnaHQrdGhpcy5yZWN0LndpZHRoKnRoaXMucmVjdC53aWR0aCkvMn0saC5wcm90b3R5cGUuc2V0UmVjdD1mdW5jdGlvbihkLHApe3RoaXMucmVjdC54PWQueCx0aGlzLnJlY3QueT1kLnksdGhpcy5yZWN0LndpZHRoPXAud2lkdGgsdGhpcy5yZWN0LmhlaWdodD1wLmhlaWdodH0saC5wcm90b3R5cGUuc2V0Q2VudGVyPWZ1bmN0aW9uKGQscCl7dGhpcy5yZWN0Lng9ZC10aGlzLnJlY3Qud2lkdGgvMix0aGlzLnJlY3QueT1wLXRoaXMucmVjdC5oZWlnaHQvMn0saC5wcm90b3R5cGUuc2V0TG9jYXRpb249ZnVuY3Rpb24oZCxwKXt0aGlzLnJlY3QueD1kLHRoaXMucmVjdC55PXB9LGgucHJvdG90eXBlLm1vdmVCeT1mdW5jdGlvbihkLHApe3RoaXMucmVjdC54Kz1kLHRoaXMucmVjdC55Kz1wfSxoLnByb3RvdHlwZS5nZXRFZGdlTGlzdFRvTm9kZT1mdW5jdGlvbihkKXt2YXIgcD1bXSxtLGc9dGhpcztyZXR1cm4gZy5lZGdlcy5mb3JFYWNoKGZ1bmN0aW9uKHkpe2lmKHkudGFyZ2V0PT1kKXtpZih5LnNvdXJjZSE9Zyl0aHJvdyJJbmNvcnJlY3QgZWRnZSBzb3VyY2UhIjtwLnB1c2goeSl9fSkscH0saC5wcm90b3R5cGUuZ2V0RWRnZXNCZXR3ZWVuPWZ1bmN0aW9uKGQpe3ZhciBwPVtdLG0sZz10aGlzO3JldHVybiBnLmVkZ2VzLmZvckVhY2goZnVuY3Rpb24oeSl7aWYoISh5LnNvdXJjZT09Z3x8eS50YXJnZXQ9PWcpKXRocm93IkluY29ycmVjdCBlZGdlIHNvdXJjZSBhbmQvb3IgdGFyZ2V0IjsoeS50YXJnZXQ9PWR8fHkuc291cmNlPT1kKSYmcC5wdXNoKHkpfSkscH0saC5wcm90b3R5cGUuZ2V0TmVpZ2hib3JzTGlzdD1mdW5jdGlvbigpe3ZhciBkPW5ldyBTZXQscD10aGlzO3JldHVybiBwLmVkZ2VzLmZvckVhY2goZnVuY3Rpb24obSl7aWYobS5zb3VyY2U9PXApZC5hZGQobS50YXJnZXQpO2Vsc2V7aWYobS50YXJnZXQhPXApdGhyb3ciSW5jb3JyZWN0IGluY2lkZW5jeSEiO2QuYWRkKG0uc291cmNlKX19KSxkfSxoLnByb3RvdHlwZS53aXRoQ2hpbGRyZW49ZnVuY3Rpb24oKXt2YXIgZD1uZXcgU2V0LHAsbTtpZihkLmFkZCh0aGlzKSx0aGlzLmNoaWxkIT1udWxsKWZvcih2YXIgZz10aGlzLmNoaWxkLmdldE5vZGVzKCkseT0wO3k8Zy5sZW5ndGg7eSsrKXA9Z1t5XSxtPXAud2l0aENoaWxkcmVuKCksbS5mb3JFYWNoKGZ1bmN0aW9uKHYpe2QuYWRkKHYpfSk7cmV0dXJuIGR9LGgucHJvdG90eXBlLmdldE5vT2ZDaGlsZHJlbj1mdW5jdGlvbigpe3ZhciBkPTAscDtpZih0aGlzLmNoaWxkPT1udWxsKWQ9MTtlbHNlIGZvcih2YXIgbT10aGlzLmNoaWxkLmdldE5vZGVzKCksZz0wO2c8bS5sZW5ndGg7ZysrKXA9bVtnXSxkKz1wLmdldE5vT2ZDaGlsZHJlbigpO3JldHVybiBkPT0wJiYoZD0xKSxkfSxoLnByb3RvdHlwZS5nZXRFc3RpbWF0ZWRTaXplPWZ1bmN0aW9uKCl7aWYodGhpcy5lc3RpbWF0ZWRTaXplPT1pLk1JTl9WQUxVRSl0aHJvdyJhc3NlcnQgZmFpbGVkIjtyZXR1cm4gdGhpcy5lc3RpbWF0ZWRTaXplfSxoLnByb3RvdHlwZS5jYWxjRXN0aW1hdGVkU2l6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkPT1udWxsP3RoaXMuZXN0aW1hdGVkU2l6ZT0odGhpcy5yZWN0LndpZHRoK3RoaXMucmVjdC5oZWlnaHQpLzI6KHRoaXMuZXN0aW1hdGVkU2l6ZT10aGlzLmNoaWxkLmNhbGNFc3RpbWF0ZWRTaXplKCksdGhpcy5yZWN0LndpZHRoPXRoaXMuZXN0aW1hdGVkU2l6ZSx0aGlzLnJlY3QuaGVpZ2h0PXRoaXMuZXN0aW1hdGVkU2l6ZSx0aGlzLmVzdGltYXRlZFNpemUpfSxoLnByb3RvdHlwZS5zY2F0dGVyPWZ1bmN0aW9uKCl7dmFyIGQscCxtPS1zLklOSVRJQUxfV09STERfQk9VTkRBUlksZz1zLklOSVRJQUxfV09STERfQk9VTkRBUlk7ZD1zLldPUkxEX0NFTlRFUl9YK2wubmV4dERvdWJsZSgpKihnLW0pK207dmFyIHk9LXMuSU5JVElBTF9XT1JMRF9CT1VOREFSWSx2PXMuSU5JVElBTF9XT1JMRF9CT1VOREFSWTtwPXMuV09STERfQ0VOVEVSX1krbC5uZXh0RG91YmxlKCkqKHYteSkreSx0aGlzLnJlY3QueD1kLHRoaXMucmVjdC55PXB9LGgucHJvdG90eXBlLnVwZGF0ZUJvdW5kcz1mdW5jdGlvbigpe2lmKHRoaXMuZ2V0Q2hpbGQoKT09bnVsbCl0aHJvdyJhc3NlcnQgZmFpbGVkIjtpZih0aGlzLmdldENoaWxkKCkuZ2V0Tm9kZXMoKS5sZW5ndGghPTApe3ZhciBkPXRoaXMuZ2V0Q2hpbGQoKTtpZihkLnVwZGF0ZUJvdW5kcyghMCksdGhpcy5yZWN0Lng9ZC5nZXRMZWZ0KCksdGhpcy5yZWN0Lnk9ZC5nZXRUb3AoKSx0aGlzLnNldFdpZHRoKGQuZ2V0UmlnaHQoKS1kLmdldExlZnQoKSksdGhpcy5zZXRIZWlnaHQoZC5nZXRCb3R0b20oKS1kLmdldFRvcCgpKSxzLk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUyl7dmFyIHA9ZC5nZXRSaWdodCgpLWQuZ2V0TGVmdCgpLG09ZC5nZXRCb3R0b20oKS1kLmdldFRvcCgpO3RoaXMubGFiZWxXaWR0aD5wJiYodGhpcy5yZWN0LngtPSh0aGlzLmxhYmVsV2lkdGgtcCkvMix0aGlzLnNldFdpZHRoKHRoaXMubGFiZWxXaWR0aCkpLHRoaXMubGFiZWxIZWlnaHQ+bSYmKHRoaXMubGFiZWxQb3M9PSJjZW50ZXIiP3RoaXMucmVjdC55LT0odGhpcy5sYWJlbEhlaWdodC1tKS8yOnRoaXMubGFiZWxQb3M9PSJ0b3AiJiYodGhpcy5yZWN0LnktPXRoaXMubGFiZWxIZWlnaHQtbSksdGhpcy5zZXRIZWlnaHQodGhpcy5sYWJlbEhlaWdodCkpfX19LGgucHJvdG90eXBlLmdldEluY2x1c2lvblRyZWVEZXB0aD1mdW5jdGlvbigpe2lmKHRoaXMuaW5jbHVzaW9uVHJlZURlcHRoPT1pLk1BWF9WQUxVRSl0aHJvdyJhc3NlcnQgZmFpbGVkIjtyZXR1cm4gdGhpcy5pbmNsdXNpb25UcmVlRGVwdGh9LGgucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihkKXt2YXIgcD10aGlzLnJlY3QueDtwPnMuV09STERfQk9VTkRBUlk/cD1zLldPUkxEX0JPVU5EQVJZOnA8LXMuV09STERfQk9VTkRBUlkmJihwPS1zLldPUkxEX0JPVU5EQVJZKTt2YXIgbT10aGlzLnJlY3QueTttPnMuV09STERfQk9VTkRBUlk/bT1zLldPUkxEX0JPVU5EQVJZOm08LXMuV09STERfQk9VTkRBUlkmJihtPS1zLldPUkxEX0JPVU5EQVJZKTt2YXIgZz1uZXcgdShwLG0pLHk9ZC5pbnZlcnNlVHJhbnNmb3JtUG9pbnQoZyk7dGhpcy5zZXRMb2NhdGlvbih5LngseS55KX0saC5wcm90b3R5cGUuZ2V0TGVmdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3QueH0saC5wcm90b3R5cGUuZ2V0UmlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0LngrdGhpcy5yZWN0LndpZHRofSxoLnByb3RvdHlwZS5nZXRUb3A9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWN0Lnl9LGgucHJvdG90eXBlLmdldEJvdHRvbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3QueSt0aGlzLnJlY3QuaGVpZ2h0fSxoLnByb3RvdHlwZS5nZXRQYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lcj09bnVsbD9udWxsOnRoaXMub3duZXIuZ2V0UGFyZW50KCl9LHQuZXhwb3J0cz1ofSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oaSxhKXtpPT1udWxsJiZhPT1udWxsPyh0aGlzLng9MCx0aGlzLnk9MCk6KHRoaXMueD1pLHRoaXMueT1hKX1vKG4sIlBvaW50RCIpLG4ucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54fSxuLnByb3RvdHlwZS5nZXRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueX0sbi5wcm90b3R5cGUuc2V0WD1mdW5jdGlvbihpKXt0aGlzLng9aX0sbi5wcm90b3R5cGUuc2V0WT1mdW5jdGlvbihpKXt0aGlzLnk9aX0sbi5wcm90b3R5cGUuZ2V0RGlmZmVyZW5jZT1mdW5jdGlvbihpKXtyZXR1cm4gbmV3IERpbWVuc2lvbkQodGhpcy54LWkueCx0aGlzLnktaS55KX0sbi5wcm90b3R5cGUuZ2V0Q29weT1mdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzLngsdGhpcy55KX0sbi5wcm90b3R5cGUudHJhbnNsYXRlPWZ1bmN0aW9uKGkpe3JldHVybiB0aGlzLngrPWkud2lkdGgsdGhpcy55Kz1pLmhlaWdodCx0aGlzfSx0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDIpLGk9cigxMCksYT1yKDApLHM9cig2KSxsPXIoMyksdT1yKDEpLGg9cigxMyksZj1yKDEyKSxkPXIoMTEpO2Z1bmN0aW9uIHAoZyx5LHYpe24uY2FsbCh0aGlzLHYpLHRoaXMuZXN0aW1hdGVkU2l6ZT1pLk1JTl9WQUxVRSx0aGlzLm1hcmdpbj1hLkRFRkFVTFRfR1JBUEhfTUFSR0lOLHRoaXMuZWRnZXM9W10sdGhpcy5ub2Rlcz1bXSx0aGlzLmlzQ29ubmVjdGVkPSExLHRoaXMucGFyZW50PWcseSE9bnVsbCYmeSBpbnN0YW5jZW9mIHM/dGhpcy5ncmFwaE1hbmFnZXI9eTp5IT1udWxsJiZ5IGluc3RhbmNlb2YgTGF5b3V0JiYodGhpcy5ncmFwaE1hbmFnZXI9eS5ncmFwaE1hbmFnZXIpfW8ocCwiTEdyYXBoIikscC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSk7Zm9yKHZhciBtIGluIG4pcFttXT1uW21dO3AucHJvdG90eXBlLmdldE5vZGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZXN9LHAucHJvdG90eXBlLmdldEVkZ2VzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXN9LHAucHJvdG90eXBlLmdldEdyYXBoTWFuYWdlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdyYXBoTWFuYWdlcn0scC5wcm90b3R5cGUuZ2V0UGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50fSxwLnByb3RvdHlwZS5nZXRMZWZ0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVmdH0scC5wcm90b3R5cGUuZ2V0UmlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yaWdodH0scC5wcm90b3R5cGUuZ2V0VG9wPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9wfSxwLnByb3RvdHlwZS5nZXRCb3R0b209ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ib3R0b219LHAucHJvdG90eXBlLmlzQ29ubmVjdGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNDb25uZWN0ZWR9LHAucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnLHksdil7aWYoeT09bnVsbCYmdj09bnVsbCl7dmFyIHg9ZztpZih0aGlzLmdyYXBoTWFuYWdlcj09bnVsbCl0aHJvdyJHcmFwaCBoYXMgbm8gZ3JhcGggbWdyISI7aWYodGhpcy5nZXROb2RlcygpLmluZGV4T2YoeCk+LTEpdGhyb3ciTm9kZSBhbHJlYWR5IGluIGdyYXBoISI7cmV0dXJuIHgub3duZXI9dGhpcyx0aGlzLmdldE5vZGVzKCkucHVzaCh4KSx4fWVsc2V7dmFyIGI9ZztpZighKHRoaXMuZ2V0Tm9kZXMoKS5pbmRleE9mKHkpPi0xJiZ0aGlzLmdldE5vZGVzKCkuaW5kZXhPZih2KT4tMSkpdGhyb3ciU291cmNlIG9yIHRhcmdldCBub3QgaW4gZ3JhcGghIjtpZighKHkub3duZXI9PXYub3duZXImJnkub3duZXI9PXRoaXMpKXRocm93IkJvdGggb3duZXJzIG11c3QgYmUgdGhpcyBncmFwaCEiO3JldHVybiB5Lm93bmVyIT12Lm93bmVyP251bGw6KGIuc291cmNlPXksYi50YXJnZXQ9dixiLmlzSW50ZXJHcmFwaD0hMSx0aGlzLmdldEVkZ2VzKCkucHVzaChiKSx5LmVkZ2VzLnB1c2goYiksdiE9eSYmdi5lZGdlcy5wdXNoKGIpLGIpfX0scC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKGcpe3ZhciB5PWc7aWYoZyBpbnN0YW5jZW9mIGwpe2lmKHk9PW51bGwpdGhyb3ciTm9kZSBpcyBudWxsISI7aWYoISh5Lm93bmVyIT1udWxsJiZ5Lm93bmVyPT10aGlzKSl0aHJvdyJPd25lciBncmFwaCBpcyBpbnZhbGlkISI7aWYodGhpcy5ncmFwaE1hbmFnZXI9PW51bGwpdGhyb3ciT3duZXIgZ3JhcGggbWFuYWdlciBpcyBpbnZhbGlkISI7Zm9yKHZhciB2PXkuZWRnZXMuc2xpY2UoKSx4LGI9di5sZW5ndGgsVD0wO1Q8YjtUKyspeD12W1RdLHguaXNJbnRlckdyYXBoP3RoaXMuZ3JhcGhNYW5hZ2VyLnJlbW92ZSh4KTp4LnNvdXJjZS5vd25lci5yZW1vdmUoeCk7dmFyIFM9dGhpcy5ub2Rlcy5pbmRleE9mKHkpO2lmKFM9PS0xKXRocm93Ik5vZGUgbm90IGluIG93bmVyIG5vZGUgbGlzdCEiO3RoaXMubm9kZXMuc3BsaWNlKFMsMSl9ZWxzZSBpZihnIGluc3RhbmNlb2YgdSl7dmFyIHg9ZztpZih4PT1udWxsKXRocm93IkVkZ2UgaXMgbnVsbCEiO2lmKCEoeC5zb3VyY2UhPW51bGwmJngudGFyZ2V0IT1udWxsKSl0aHJvdyJTb3VyY2UgYW5kL29yIHRhcmdldCBpcyBudWxsISI7aWYoISh4LnNvdXJjZS5vd25lciE9bnVsbCYmeC50YXJnZXQub3duZXIhPW51bGwmJnguc291cmNlLm93bmVyPT10aGlzJiZ4LnRhcmdldC5vd25lcj09dGhpcykpdGhyb3ciU291cmNlIGFuZC9vciB0YXJnZXQgb3duZXIgaXMgaW52YWxpZCEiO3ZhciB3PXguc291cmNlLmVkZ2VzLmluZGV4T2YoeCksRT14LnRhcmdldC5lZGdlcy5pbmRleE9mKHgpO2lmKCEodz4tMSYmRT4tMSkpdGhyb3ciU291cmNlIGFuZC9vciB0YXJnZXQgZG9lc24ndCBrbm93IHRoaXMgZWRnZSEiO3guc291cmNlLmVkZ2VzLnNwbGljZSh3LDEpLHgudGFyZ2V0IT14LnNvdXJjZSYmeC50YXJnZXQuZWRnZXMuc3BsaWNlKEUsMSk7dmFyIFM9eC5zb3VyY2Uub3duZXIuZ2V0RWRnZXMoKS5pbmRleE9mKHgpO2lmKFM9PS0xKXRocm93Ik5vdCBpbiBvd25lcidzIGVkZ2UgbGlzdCEiO3guc291cmNlLm93bmVyLmdldEVkZ2VzKCkuc3BsaWNlKFMsMSl9fSxwLnByb3RvdHlwZS51cGRhdGVMZWZ0VG9wPWZ1bmN0aW9uKCl7Zm9yKHZhciBnPWkuTUFYX1ZBTFVFLHk9aS5NQVhfVkFMVUUsdix4LGIsVD10aGlzLmdldE5vZGVzKCksUz1ULmxlbmd0aCx3PTA7dzxTO3crKyl7dmFyIEU9VFt3XTt2PUUuZ2V0VG9wKCkseD1FLmdldExlZnQoKSxnPnYmJihnPXYpLHk+eCYmKHk9eCl9cmV0dXJuIGc9PWkuTUFYX1ZBTFVFP251bGw6KFRbMF0uZ2V0UGFyZW50KCkucGFkZGluZ0xlZnQhPW51bGw/Yj1UWzBdLmdldFBhcmVudCgpLnBhZGRpbmdMZWZ0OmI9dGhpcy5tYXJnaW4sdGhpcy5sZWZ0PXktYix0aGlzLnRvcD1nLWIsbmV3IGYodGhpcy5sZWZ0LHRoaXMudG9wKSl9LHAucHJvdG90eXBlLnVwZGF0ZUJvdW5kcz1mdW5jdGlvbihnKXtmb3IodmFyIHk9aS5NQVhfVkFMVUUsdj0taS5NQVhfVkFMVUUseD1pLk1BWF9WQUxVRSxiPS1pLk1BWF9WQUxVRSxULFMsdyxFLF8sQz10aGlzLm5vZGVzLEQ9Qy5sZW5ndGgsTz0wO088RDtPKyspe3ZhciBSPUNbT107ZyYmUi5jaGlsZCE9bnVsbCYmUi51cGRhdGVCb3VuZHMoKSxUPVIuZ2V0TGVmdCgpLFM9Ui5nZXRSaWdodCgpLHc9Ui5nZXRUb3AoKSxFPVIuZ2V0Qm90dG9tKCkseT5UJiYoeT1UKSx2PFMmJih2PVMpLHg+dyYmKHg9dyksYjxFJiYoYj1FKX12YXIgaz1uZXcgaCh5LHgsdi15LGIteCk7eT09aS5NQVhfVkFMVUUmJih0aGlzLmxlZnQ9dGhpcy5wYXJlbnQuZ2V0TGVmdCgpLHRoaXMucmlnaHQ9dGhpcy5wYXJlbnQuZ2V0UmlnaHQoKSx0aGlzLnRvcD10aGlzLnBhcmVudC5nZXRUb3AoKSx0aGlzLmJvdHRvbT10aGlzLnBhcmVudC5nZXRCb3R0b20oKSksQ1swXS5nZXRQYXJlbnQoKS5wYWRkaW5nTGVmdCE9bnVsbD9fPUNbMF0uZ2V0UGFyZW50KCkucGFkZGluZ0xlZnQ6Xz10aGlzLm1hcmdpbix0aGlzLmxlZnQ9ay54LV8sdGhpcy5yaWdodD1rLngray53aWR0aCtfLHRoaXMudG9wPWsueS1fLHRoaXMuYm90dG9tPWsueStrLmhlaWdodCtffSxwLmNhbGN1bGF0ZUJvdW5kcz1mdW5jdGlvbihnKXtmb3IodmFyIHk9aS5NQVhfVkFMVUUsdj0taS5NQVhfVkFMVUUseD1pLk1BWF9WQUxVRSxiPS1pLk1BWF9WQUxVRSxULFMsdyxFLF89Zy5sZW5ndGgsQz0wO0M8XztDKyspe3ZhciBEPWdbQ107VD1ELmdldExlZnQoKSxTPUQuZ2V0UmlnaHQoKSx3PUQuZ2V0VG9wKCksRT1ELmdldEJvdHRvbSgpLHk+VCYmKHk9VCksdjxTJiYodj1TKSx4PncmJih4PXcpLGI8RSYmKGI9RSl9dmFyIE89bmV3IGgoeSx4LHYteSxiLXgpO3JldHVybiBPfSxwLnByb3RvdHlwZS5nZXRJbmNsdXNpb25UcmVlRGVwdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcz09dGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpPzE6dGhpcy5wYXJlbnQuZ2V0SW5jbHVzaW9uVHJlZURlcHRoKCl9LHAucHJvdG90eXBlLmdldEVzdGltYXRlZFNpemU9ZnVuY3Rpb24oKXtpZih0aGlzLmVzdGltYXRlZFNpemU9PWkuTUlOX1ZBTFVFKXRocm93ImFzc2VydCBmYWlsZWQiO3JldHVybiB0aGlzLmVzdGltYXRlZFNpemV9LHAucHJvdG90eXBlLmNhbGNFc3RpbWF0ZWRTaXplPWZ1bmN0aW9uKCl7Zm9yKHZhciBnPTAseT10aGlzLm5vZGVzLHY9eS5sZW5ndGgseD0wO3g8djt4Kyspe3ZhciBiPXlbeF07Zys9Yi5jYWxjRXN0aW1hdGVkU2l6ZSgpfXJldHVybiBnPT0wP3RoaXMuZXN0aW1hdGVkU2l6ZT1hLkVNUFRZX0NPTVBPVU5EX05PREVfU0laRTp0aGlzLmVzdGltYXRlZFNpemU9Zy9NYXRoLnNxcnQodGhpcy5ub2Rlcy5sZW5ndGgpLHRoaXMuZXN0aW1hdGVkU2l6ZX0scC5wcm90b3R5cGUudXBkYXRlQ29ubmVjdGVkPWZ1bmN0aW9uKCl7dmFyIGc9dGhpcztpZih0aGlzLm5vZGVzLmxlbmd0aD09MCl7dGhpcy5pc0Nvbm5lY3RlZD0hMDtyZXR1cm59dmFyIHk9bmV3IGQsdj1uZXcgU2V0LHg9dGhpcy5ub2Rlc1swXSxiLFQsUz14LndpdGhDaGlsZHJlbigpO2ZvcihTLmZvckVhY2goZnVuY3Rpb24oTyl7eS5wdXNoKE8pLHYuYWRkKE8pfSk7eS5sZW5ndGghPT0wOyl7eD15LnNoaWZ0KCksYj14LmdldEVkZ2VzKCk7Zm9yKHZhciB3PWIubGVuZ3RoLEU9MDtFPHc7RSsrKXt2YXIgXz1iW0VdO2lmKFQ9Xy5nZXRPdGhlckVuZEluR3JhcGgoeCx0aGlzKSxUIT1udWxsJiYhdi5oYXMoVCkpe3ZhciBDPVQud2l0aENoaWxkcmVuKCk7Qy5mb3JFYWNoKGZ1bmN0aW9uKE8pe3kucHVzaChPKSx2LmFkZChPKX0pfX19aWYodGhpcy5pc0Nvbm5lY3RlZD0hMSx2LnNpemU+PXRoaXMubm9kZXMubGVuZ3RoKXt2YXIgRD0wO3YuZm9yRWFjaChmdW5jdGlvbihPKXtPLm93bmVyPT1nJiZEKyt9KSxEPT10aGlzLm5vZGVzLmxlbmd0aCYmKHRoaXMuaXNDb25uZWN0ZWQ9ITApfX0sdC5leHBvcnRzPXB9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saT1yKDEpO2Z1bmN0aW9uIGEocyl7bj1yKDUpLHRoaXMubGF5b3V0PXMsdGhpcy5ncmFwaHM9W10sdGhpcy5lZGdlcz1bXX1vKGEsIkxHcmFwaE1hbmFnZXIiKSxhLnByb3RvdHlwZS5hZGRSb290PWZ1bmN0aW9uKCl7dmFyIHM9dGhpcy5sYXlvdXQubmV3R3JhcGgoKSxsPXRoaXMubGF5b3V0Lm5ld05vZGUobnVsbCksdT10aGlzLmFkZChzLGwpO3JldHVybiB0aGlzLnNldFJvb3RHcmFwaCh1KSx0aGlzLnJvb3RHcmFwaH0sYS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHMsbCx1LGgsZil7aWYodT09bnVsbCYmaD09bnVsbCYmZj09bnVsbCl7aWYocz09bnVsbCl0aHJvdyJHcmFwaCBpcyBudWxsISI7aWYobD09bnVsbCl0aHJvdyJQYXJlbnQgbm9kZSBpcyBudWxsISI7aWYodGhpcy5ncmFwaHMuaW5kZXhPZihzKT4tMSl0aHJvdyJHcmFwaCBhbHJlYWR5IGluIHRoaXMgZ3JhcGggbWdyISI7aWYodGhpcy5ncmFwaHMucHVzaChzKSxzLnBhcmVudCE9bnVsbCl0aHJvdyJBbHJlYWR5IGhhcyBhIHBhcmVudCEiO2lmKGwuY2hpbGQhPW51bGwpdGhyb3ciQWxyZWFkeSBoYXMgYSBjaGlsZCEiO3JldHVybiBzLnBhcmVudD1sLGwuY2hpbGQ9cyxzfWVsc2V7Zj11LGg9bCx1PXM7dmFyIGQ9aC5nZXRPd25lcigpLHA9Zi5nZXRPd25lcigpO2lmKCEoZCE9bnVsbCYmZC5nZXRHcmFwaE1hbmFnZXIoKT09dGhpcykpdGhyb3ciU291cmNlIG5vdCBpbiB0aGlzIGdyYXBoIG1nciEiO2lmKCEocCE9bnVsbCYmcC5nZXRHcmFwaE1hbmFnZXIoKT09dGhpcykpdGhyb3ciVGFyZ2V0IG5vdCBpbiB0aGlzIGdyYXBoIG1nciEiO2lmKGQ9PXApcmV0dXJuIHUuaXNJbnRlckdyYXBoPSExLGQuYWRkKHUsaCxmKTtpZih1LmlzSW50ZXJHcmFwaD0hMCx1LnNvdXJjZT1oLHUudGFyZ2V0PWYsdGhpcy5lZGdlcy5pbmRleE9mKHUpPi0xKXRocm93IkVkZ2UgYWxyZWFkeSBpbiBpbnRlci1ncmFwaCBlZGdlIGxpc3QhIjtpZih0aGlzLmVkZ2VzLnB1c2godSksISh1LnNvdXJjZSE9bnVsbCYmdS50YXJnZXQhPW51bGwpKXRocm93IkVkZ2Ugc291cmNlIGFuZC9vciB0YXJnZXQgaXMgbnVsbCEiO2lmKCEodS5zb3VyY2UuZWRnZXMuaW5kZXhPZih1KT09LTEmJnUudGFyZ2V0LmVkZ2VzLmluZGV4T2YodSk9PS0xKSl0aHJvdyJFZGdlIGFscmVhZHkgaW4gc291cmNlIGFuZC9vciB0YXJnZXQgaW5jaWRlbmN5IGxpc3QhIjtyZXR1cm4gdS5zb3VyY2UuZWRnZXMucHVzaCh1KSx1LnRhcmdldC5lZGdlcy5wdXNoKHUpLHV9fSxhLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24ocyl7aWYocyBpbnN0YW5jZW9mIG4pe3ZhciBsPXM7aWYobC5nZXRHcmFwaE1hbmFnZXIoKSE9dGhpcyl0aHJvdyJHcmFwaCBub3QgaW4gdGhpcyBncmFwaCBtZ3IiO2lmKCEobD09dGhpcy5yb290R3JhcGh8fGwucGFyZW50IT1udWxsJiZsLnBhcmVudC5ncmFwaE1hbmFnZXI9PXRoaXMpKXRocm93IkludmFsaWQgcGFyZW50IG5vZGUhIjt2YXIgdT1bXTt1PXUuY29uY2F0KGwuZ2V0RWRnZXMoKSk7Zm9yKHZhciBoLGY9dS5sZW5ndGgsZD0wO2Q8ZjtkKyspaD11W2RdLGwucmVtb3ZlKGgpO3ZhciBwPVtdO3A9cC5jb25jYXQobC5nZXROb2RlcygpKTt2YXIgbTtmPXAubGVuZ3RoO2Zvcih2YXIgZD0wO2Q8ZjtkKyspbT1wW2RdLGwucmVtb3ZlKG0pO2w9PXRoaXMucm9vdEdyYXBoJiZ0aGlzLnNldFJvb3RHcmFwaChudWxsKTt2YXIgZz10aGlzLmdyYXBocy5pbmRleE9mKGwpO3RoaXMuZ3JhcGhzLnNwbGljZShnLDEpLGwucGFyZW50PW51bGx9ZWxzZSBpZihzIGluc3RhbmNlb2YgaSl7aWYoaD1zLGg9PW51bGwpdGhyb3ciRWRnZSBpcyBudWxsISI7aWYoIWguaXNJbnRlckdyYXBoKXRocm93Ik5vdCBhbiBpbnRlci1ncmFwaCBlZGdlISI7aWYoIShoLnNvdXJjZSE9bnVsbCYmaC50YXJnZXQhPW51bGwpKXRocm93IlNvdXJjZSBhbmQvb3IgdGFyZ2V0IGlzIG51bGwhIjtpZighKGguc291cmNlLmVkZ2VzLmluZGV4T2YoaCkhPS0xJiZoLnRhcmdldC5lZGdlcy5pbmRleE9mKGgpIT0tMSkpdGhyb3ciU291cmNlIGFuZC9vciB0YXJnZXQgZG9lc24ndCBrbm93IHRoaXMgZWRnZSEiO3ZhciBnPWguc291cmNlLmVkZ2VzLmluZGV4T2YoaCk7aWYoaC5zb3VyY2UuZWRnZXMuc3BsaWNlKGcsMSksZz1oLnRhcmdldC5lZGdlcy5pbmRleE9mKGgpLGgudGFyZ2V0LmVkZ2VzLnNwbGljZShnLDEpLCEoaC5zb3VyY2Uub3duZXIhPW51bGwmJmguc291cmNlLm93bmVyLmdldEdyYXBoTWFuYWdlcigpIT1udWxsKSl0aHJvdyJFZGdlIG93bmVyIGdyYXBoIG9yIG93bmVyIGdyYXBoIG1hbmFnZXIgaXMgbnVsbCEiO2lmKGguc291cmNlLm93bmVyLmdldEdyYXBoTWFuYWdlcigpLmVkZ2VzLmluZGV4T2YoaCk9PS0xKXRocm93Ik5vdCBpbiBvd25lciBncmFwaCBtYW5hZ2VyJ3MgZWRnZSBsaXN0ISI7dmFyIGc9aC5zb3VyY2Uub3duZXIuZ2V0R3JhcGhNYW5hZ2VyKCkuZWRnZXMuaW5kZXhPZihoKTtoLnNvdXJjZS5vd25lci5nZXRHcmFwaE1hbmFnZXIoKS5lZGdlcy5zcGxpY2UoZywxKX19LGEucHJvdG90eXBlLnVwZGF0ZUJvdW5kcz1mdW5jdGlvbigpe3RoaXMucm9vdEdyYXBoLnVwZGF0ZUJvdW5kcyghMCl9LGEucHJvdG90eXBlLmdldEdyYXBocz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdyYXBoc30sYS5wcm90b3R5cGUuZ2V0QWxsTm9kZXM9ZnVuY3Rpb24oKXtpZih0aGlzLmFsbE5vZGVzPT1udWxsKXtmb3IodmFyIHM9W10sbD10aGlzLmdldEdyYXBocygpLHU9bC5sZW5ndGgsaD0wO2g8dTtoKyspcz1zLmNvbmNhdChsW2hdLmdldE5vZGVzKCkpO3RoaXMuYWxsTm9kZXM9c31yZXR1cm4gdGhpcy5hbGxOb2Rlc30sYS5wcm90b3R5cGUucmVzZXRBbGxOb2Rlcz1mdW5jdGlvbigpe3RoaXMuYWxsTm9kZXM9bnVsbH0sYS5wcm90b3R5cGUucmVzZXRBbGxFZGdlcz1mdW5jdGlvbigpe3RoaXMuYWxsRWRnZXM9bnVsbH0sYS5wcm90b3R5cGUucmVzZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbj1mdW5jdGlvbigpe3RoaXMuYWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb249bnVsbH0sYS5wcm90b3R5cGUuZ2V0QWxsRWRnZXM9ZnVuY3Rpb24oKXtpZih0aGlzLmFsbEVkZ2VzPT1udWxsKXtmb3IodmFyIHM9W10sbD10aGlzLmdldEdyYXBocygpLHU9bC5sZW5ndGgsaD0wO2g8bC5sZW5ndGg7aCsrKXM9cy5jb25jYXQobFtoXS5nZXRFZGdlcygpKTtzPXMuY29uY2F0KHRoaXMuZWRnZXMpLHRoaXMuYWxsRWRnZXM9c31yZXR1cm4gdGhpcy5hbGxFZGdlc30sYS5wcm90b3R5cGUuZ2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbn0sYS5wcm90b3R5cGUuc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb249ZnVuY3Rpb24ocyl7aWYodGhpcy5hbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbiE9bnVsbCl0aHJvdyJhc3NlcnQgZmFpbGVkIjt0aGlzLmFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPXN9LGEucHJvdG90eXBlLmdldFJvb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb290R3JhcGh9LGEucHJvdG90eXBlLnNldFJvb3RHcmFwaD1mdW5jdGlvbihzKXtpZihzLmdldEdyYXBoTWFuYWdlcigpIT10aGlzKXRocm93IlJvb3Qgbm90IGluIHRoaXMgZ3JhcGggbWdyISI7dGhpcy5yb290R3JhcGg9cyxzLnBhcmVudD09bnVsbCYmKHMucGFyZW50PXRoaXMubGF5b3V0Lm5ld05vZGUoIlJvb3Qgbm9kZSIpKX0sYS5wcm90b3R5cGUuZ2V0TGF5b3V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGF5b3V0fSxhLnByb3RvdHlwZS5pc09uZUFuY2VzdG9yT2ZPdGhlcj1mdW5jdGlvbihzLGwpe2lmKCEocyE9bnVsbCYmbCE9bnVsbCkpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7aWYocz09bClyZXR1cm4hMDt2YXIgdT1zLmdldE93bmVyKCksaDtkb3tpZihoPXUuZ2V0UGFyZW50KCksaD09bnVsbClicmVhaztpZihoPT1sKXJldHVybiEwO2lmKHU9aC5nZXRPd25lcigpLHU9PW51bGwpYnJlYWt9d2hpbGUoITApO3U9bC5nZXRPd25lcigpO2Rve2lmKGg9dS5nZXRQYXJlbnQoKSxoPT1udWxsKWJyZWFrO2lmKGg9PXMpcmV0dXJuITA7aWYodT1oLmdldE93bmVyKCksdT09bnVsbClicmVha313aGlsZSghMCk7cmV0dXJuITF9LGEucHJvdG90eXBlLmNhbGNMb3dlc3RDb21tb25BbmNlc3RvcnM9ZnVuY3Rpb24oKXtmb3IodmFyIHMsbCx1LGgsZixkPXRoaXMuZ2V0QWxsRWRnZXMoKSxwPWQubGVuZ3RoLG09MDttPHA7bSsrKXtpZihzPWRbbV0sbD1zLnNvdXJjZSx1PXMudGFyZ2V0LHMubGNhPW51bGwscy5zb3VyY2VJbkxjYT1sLHMudGFyZ2V0SW5MY2E9dSxsPT11KXtzLmxjYT1sLmdldE93bmVyKCk7Y29udGludWV9Zm9yKGg9bC5nZXRPd25lcigpO3MubGNhPT1udWxsOyl7Zm9yKHMudGFyZ2V0SW5MY2E9dSxmPXUuZ2V0T3duZXIoKTtzLmxjYT09bnVsbDspe2lmKGY9PWgpe3MubGNhPWY7YnJlYWt9aWYoZj09dGhpcy5yb290R3JhcGgpYnJlYWs7aWYocy5sY2EhPW51bGwpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7cy50YXJnZXRJbkxjYT1mLmdldFBhcmVudCgpLGY9cy50YXJnZXRJbkxjYS5nZXRPd25lcigpfWlmKGg9PXRoaXMucm9vdEdyYXBoKWJyZWFrO3MubGNhPT1udWxsJiYocy5zb3VyY2VJbkxjYT1oLmdldFBhcmVudCgpLGg9cy5zb3VyY2VJbkxjYS5nZXRPd25lcigpKX1pZihzLmxjYT09bnVsbCl0aHJvdyJhc3NlcnQgZmFpbGVkIn19LGEucHJvdG90eXBlLmNhbGNMb3dlc3RDb21tb25BbmNlc3Rvcj1mdW5jdGlvbihzLGwpe2lmKHM9PWwpcmV0dXJuIHMuZ2V0T3duZXIoKTt2YXIgdT1zLmdldE93bmVyKCk7ZG97aWYodT09bnVsbClicmVhazt2YXIgaD1sLmdldE93bmVyKCk7ZG97aWYoaD09bnVsbClicmVhaztpZihoPT11KXJldHVybiBoO2g9aC5nZXRQYXJlbnQoKS5nZXRPd25lcigpfXdoaWxlKCEwKTt1PXUuZ2V0UGFyZW50KCkuZ2V0T3duZXIoKX13aGlsZSghMCk7cmV0dXJuIHV9LGEucHJvdG90eXBlLmNhbGNJbmNsdXNpb25UcmVlRGVwdGhzPWZ1bmN0aW9uKHMsbCl7cz09bnVsbCYmbD09bnVsbCYmKHM9dGhpcy5yb290R3JhcGgsbD0xKTtmb3IodmFyIHUsaD1zLmdldE5vZGVzKCksZj1oLmxlbmd0aCxkPTA7ZDxmO2QrKyl1PWhbZF0sdS5pbmNsdXNpb25UcmVlRGVwdGg9bCx1LmNoaWxkIT1udWxsJiZ0aGlzLmNhbGNJbmNsdXNpb25UcmVlRGVwdGhzKHUuY2hpbGQsbCsxKX0sYS5wcm90b3R5cGUuaW5jbHVkZXNJbnZhbGlkRWRnZT1mdW5jdGlvbigpe2Zvcih2YXIgcyxsPXRoaXMuZWRnZXMubGVuZ3RoLHU9MDt1PGw7dSsrKWlmKHM9dGhpcy5lZGdlc1t1XSx0aGlzLmlzT25lQW5jZXN0b3JPZk90aGVyKHMuc291cmNlLHMudGFyZ2V0KSlyZXR1cm4hMDtyZXR1cm4hMX0sdC5leHBvcnRzPWF9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49cigwKTtmdW5jdGlvbiBpKCl7fW8oaSwiRkRMYXlvdXRDb25zdGFudHMiKTtmb3IodmFyIGEgaW4gbilpW2FdPW5bYV07aS5NQVhfSVRFUkFUSU9OUz0yNTAwLGkuREVGQVVMVF9FREdFX0xFTkdUSD01MCxpLkRFRkFVTFRfU1BSSU5HX1NUUkVOR1RIPS40NSxpLkRFRkFVTFRfUkVQVUxTSU9OX1NUUkVOR1RIPTQ1MDAsaS5ERUZBVUxUX0dSQVZJVFlfU1RSRU5HVEg9LjQsaS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfU1RSRU5HVEg9MSxpLkRFRkFVTFRfR1JBVklUWV9SQU5HRV9GQUNUT1I9My44LGkuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUj0xLjUsaS5ERUZBVUxUX1VTRV9TTUFSVF9JREVBTF9FREdFX0xFTkdUSF9DQUxDVUxBVElPTj0hMCxpLkRFRkFVTFRfVVNFX1NNQVJUX1JFUFVMU0lPTl9SQU5HRV9DQUxDVUxBVElPTj0hMCxpLkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUw9LjMsaS5DT09MSU5HX0FEQVBUQVRJT05fRkFDVE9SPS4zMyxpLkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVD0xZTMsaS5BREFQVEFUSU9OX1VQUEVSX05PREVfTElNSVQ9NWUzLGkuTUFYX05PREVfRElTUExBQ0VNRU5UX0lOQ1JFTUVOVEFMPTEwMCxpLk1BWF9OT0RFX0RJU1BMQUNFTUVOVD1pLk1BWF9OT0RFX0RJU1BMQUNFTUVOVF9JTkNSRU1FTlRBTCozLGkuTUlOX1JFUFVMU0lPTl9ESVNUPWkuREVGQVVMVF9FREdFX0xFTkdUSC8xMCxpLkNPTlZFUkdFTkNFX0NIRUNLX1BFUklPRD0xMDAsaS5QRVJfTEVWRUxfSURFQUxfRURHRV9MRU5HVEhfRkFDVE9SPS4xLGkuTUlOX0VER0VfTEVOR1RIPTEsaS5HUklEX0NBTENVTEFUSU9OX0NIRUNLX1BFUklPRD0xMCx0LmV4cG9ydHM9aX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDEyKTtmdW5jdGlvbiBpKCl7fW8oaSwiSUdlb21ldHJ5IiksaS5jYWxjU2VwYXJhdGlvbkFtb3VudD1mdW5jdGlvbihhLHMsbCx1KXtpZighYS5pbnRlcnNlY3RzKHMpKXRocm93ImFzc2VydCBmYWlsZWQiO3ZhciBoPW5ldyBBcnJheSgyKTt0aGlzLmRlY2lkZURpcmVjdGlvbnNGb3JPdmVybGFwcGluZ05vZGVzKGEscyxoKSxsWzBdPU1hdGgubWluKGEuZ2V0UmlnaHQoKSxzLmdldFJpZ2h0KCkpLU1hdGgubWF4KGEueCxzLngpLGxbMV09TWF0aC5taW4oYS5nZXRCb3R0b20oKSxzLmdldEJvdHRvbSgpKS1NYXRoLm1heChhLnkscy55KSxhLmdldFgoKTw9cy5nZXRYKCkmJmEuZ2V0UmlnaHQoKT49cy5nZXRSaWdodCgpP2xbMF0rPU1hdGgubWluKHMuZ2V0WCgpLWEuZ2V0WCgpLGEuZ2V0UmlnaHQoKS1zLmdldFJpZ2h0KCkpOnMuZ2V0WCgpPD1hLmdldFgoKSYmcy5nZXRSaWdodCgpPj1hLmdldFJpZ2h0KCkmJihsWzBdKz1NYXRoLm1pbihhLmdldFgoKS1zLmdldFgoKSxzLmdldFJpZ2h0KCktYS5nZXRSaWdodCgpKSksYS5nZXRZKCk8PXMuZ2V0WSgpJiZhLmdldEJvdHRvbSgpPj1zLmdldEJvdHRvbSgpP2xbMV0rPU1hdGgubWluKHMuZ2V0WSgpLWEuZ2V0WSgpLGEuZ2V0Qm90dG9tKCktcy5nZXRCb3R0b20oKSk6cy5nZXRZKCk8PWEuZ2V0WSgpJiZzLmdldEJvdHRvbSgpPj1hLmdldEJvdHRvbSgpJiYobFsxXSs9TWF0aC5taW4oYS5nZXRZKCktcy5nZXRZKCkscy5nZXRCb3R0b20oKS1hLmdldEJvdHRvbSgpKSk7dmFyIGY9TWF0aC5hYnMoKHMuZ2V0Q2VudGVyWSgpLWEuZ2V0Q2VudGVyWSgpKS8ocy5nZXRDZW50ZXJYKCktYS5nZXRDZW50ZXJYKCkpKTtzLmdldENlbnRlclkoKT09PWEuZ2V0Q2VudGVyWSgpJiZzLmdldENlbnRlclgoKT09PWEuZ2V0Q2VudGVyWCgpJiYoZj0xKTt2YXIgZD1mKmxbMF0scD1sWzFdL2Y7bFswXTxwP3A9bFswXTpkPWxbMV0sbFswXT0tMSpoWzBdKihwLzIrdSksbFsxXT0tMSpoWzFdKihkLzIrdSl9LGkuZGVjaWRlRGlyZWN0aW9uc0Zvck92ZXJsYXBwaW5nTm9kZXM9ZnVuY3Rpb24oYSxzLGwpe2EuZ2V0Q2VudGVyWCgpPHMuZ2V0Q2VudGVyWCgpP2xbMF09LTE6bFswXT0xLGEuZ2V0Q2VudGVyWSgpPHMuZ2V0Q2VudGVyWSgpP2xbMV09LTE6bFsxXT0xfSxpLmdldEludGVyc2VjdGlvbjI9ZnVuY3Rpb24oYSxzLGwpe3ZhciB1PWEuZ2V0Q2VudGVyWCgpLGg9YS5nZXRDZW50ZXJZKCksZj1zLmdldENlbnRlclgoKSxkPXMuZ2V0Q2VudGVyWSgpO2lmKGEuaW50ZXJzZWN0cyhzKSlyZXR1cm4gbFswXT11LGxbMV09aCxsWzJdPWYsbFszXT1kLCEwO3ZhciBwPWEuZ2V0WCgpLG09YS5nZXRZKCksZz1hLmdldFJpZ2h0KCkseT1hLmdldFgoKSx2PWEuZ2V0Qm90dG9tKCkseD1hLmdldFJpZ2h0KCksYj1hLmdldFdpZHRoSGFsZigpLFQ9YS5nZXRIZWlnaHRIYWxmKCksUz1zLmdldFgoKSx3PXMuZ2V0WSgpLEU9cy5nZXRSaWdodCgpLF89cy5nZXRYKCksQz1zLmdldEJvdHRvbSgpLEQ9cy5nZXRSaWdodCgpLE89cy5nZXRXaWR0aEhhbGYoKSxSPXMuZ2V0SGVpZ2h0SGFsZigpLGs9ITEsTD0hMTtpZih1PT09Zil7aWYoaD5kKXJldHVybiBsWzBdPXUsbFsxXT1tLGxbMl09ZixsWzNdPUMsITE7aWYoaDxkKXJldHVybiBsWzBdPXUsbFsxXT12LGxbMl09ZixsWzNdPXcsITF9ZWxzZSBpZihoPT09ZCl7aWYodT5mKXJldHVybiBsWzBdPXAsbFsxXT1oLGxbMl09RSxsWzNdPWQsITE7aWYodTxmKXJldHVybiBsWzBdPWcsbFsxXT1oLGxbMl09UyxsWzNdPWQsITF9ZWxzZXt2YXIgQT1hLmhlaWdodC9hLndpZHRoLEk9cy5oZWlnaHQvcy53aWR0aCxNPShkLWgpLyhmLXUpLFA9dm9pZCAwLEI9dm9pZCAwLEY9dm9pZCAwLHo9dm9pZCAwLCQ9dm9pZCAwLFU9dm9pZCAwO2lmKC1BPT09TT91PmY/KGxbMF09eSxsWzFdPXYsaz0hMCk6KGxbMF09ZyxsWzFdPW0saz0hMCk6QT09PU0mJih1PmY/KGxbMF09cCxsWzFdPW0saz0hMCk6KGxbMF09eCxsWzFdPXYsaz0hMCkpLC1JPT09TT9mPnU/KGxbMl09XyxsWzNdPUMsTD0hMCk6KGxbMl09RSxsWzNdPXcsTD0hMCk6ST09PU0mJihmPnU/KGxbMl09UyxsWzNdPXcsTD0hMCk6KGxbMl09RCxsWzNdPUMsTD0hMCkpLGsmJkwpcmV0dXJuITE7aWYodT5mP2g+ZD8oUD10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKEEsTSw0KSxCPXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oSSxNLDIpKTooUD10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKC1BLE0sMyksQj10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKC1JLE0sMSkpOmg+ZD8oUD10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKC1BLE0sMSksQj10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKC1JLE0sMykpOihQPXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oQSxNLDIpLEI9dGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbihJLE0sNCkpLCFrKXN3aXRjaChQKXtjYXNlIDE6ej1tLEY9dSstVC9NLGxbMF09RixsWzFdPXo7YnJlYWs7Y2FzZSAyOkY9eCx6PWgrYipNLGxbMF09RixsWzFdPXo7YnJlYWs7Y2FzZSAzOno9dixGPXUrVC9NLGxbMF09RixsWzFdPXo7YnJlYWs7Y2FzZSA0OkY9eSx6PWgrLWIqTSxsWzBdPUYsbFsxXT16O2JyZWFrfWlmKCFMKXN3aXRjaChCKXtjYXNlIDE6VT13LCQ9ZistUi9NLGxbMl09JCxsWzNdPVU7YnJlYWs7Y2FzZSAyOiQ9RCxVPWQrTypNLGxbMl09JCxsWzNdPVU7YnJlYWs7Y2FzZSAzOlU9QywkPWYrUi9NLGxbMl09JCxsWzNdPVU7YnJlYWs7Y2FzZSA0OiQ9XyxVPWQrLU8qTSxsWzJdPSQsbFszXT1VO2JyZWFrfX1yZXR1cm4hMX0saS5nZXRDYXJkaW5hbERpcmVjdGlvbj1mdW5jdGlvbihhLHMsbCl7cmV0dXJuIGE+cz9sOjErbCU0fSxpLmdldEludGVyc2VjdGlvbj1mdW5jdGlvbihhLHMsbCx1KXtpZih1PT1udWxsKXJldHVybiB0aGlzLmdldEludGVyc2VjdGlvbjIoYSxzLGwpO3ZhciBoPWEueCxmPWEueSxkPXMueCxwPXMueSxtPWwueCxnPWwueSx5PXUueCx2PXUueSx4PXZvaWQgMCxiPXZvaWQgMCxUPXZvaWQgMCxTPXZvaWQgMCx3PXZvaWQgMCxFPXZvaWQgMCxfPXZvaWQgMCxDPXZvaWQgMCxEPXZvaWQgMDtyZXR1cm4gVD1wLWYsdz1oLWQsXz1kKmYtaCpwLFM9di1nLEU9bS15LEM9eSpnLW0qdixEPVQqRS1TKncsRD09PTA/bnVsbDooeD0odypDLUUqXykvRCxiPShTKl8tVCpDKS9ELG5ldyBuKHgsYikpfSxpLmFuZ2xlT2ZWZWN0b3I9ZnVuY3Rpb24oYSxzLGwsdSl7dmFyIGg9dm9pZCAwO3JldHVybiBhIT09bD8oaD1NYXRoLmF0YW4oKHUtcykvKGwtYSkpLGw8YT9oKz1NYXRoLlBJOnU8cyYmKGgrPXRoaXMuVFdPX1BJKSk6dTxzP2g9dGhpcy5PTkVfQU5EX0hBTEZfUEk6aD10aGlzLkhBTEZfUEksaH0saS5kb0ludGVyc2VjdD1mdW5jdGlvbihhLHMsbCx1KXt2YXIgaD1hLngsZj1hLnksZD1zLngscD1zLnksbT1sLngsZz1sLnkseT11Lngsdj11LnkseD0oZC1oKSoodi1nKS0oeS1tKSoocC1mKTtpZih4PT09MClyZXR1cm4hMTt2YXIgYj0oKHYtZykqKHktaCkrKG0teSkqKHYtZikpL3gsVD0oKGYtcCkqKHktaCkrKGQtaCkqKHYtZikpL3g7cmV0dXJuIDA8YiYmYjwxJiYwPFQmJlQ8MX0saS5IQUxGX1BJPS41Kk1hdGguUEksaS5PTkVfQU5EX0hBTEZfUEk9MS41Kk1hdGguUEksaS5UV09fUEk9MipNYXRoLlBJLGkuVEhSRUVfUEk9MypNYXRoLlBJLHQuZXhwb3J0cz1pfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXt9byhuLCJJTWF0aCIpLG4uc2lnbj1mdW5jdGlvbihpKXtyZXR1cm4gaT4wPzE6aTwwPy0xOjB9LG4uZmxvb3I9ZnVuY3Rpb24oaSl7cmV0dXJuIGk8MD9NYXRoLmNlaWwoaSk6TWF0aC5mbG9vcihpKX0sbi5jZWlsPWZ1bmN0aW9uKGkpe3JldHVybiBpPDA/TWF0aC5mbG9vcihpKTpNYXRoLmNlaWwoaSl9LHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXt9byhuLCJJbnRlZ2VyIiksbi5NQVhfVkFMVUU9MjE0NzQ4MzY0NyxuLk1JTl9WQUxVRT0tMjE0NzQ4MzY0OCx0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1mdW5jdGlvbigpe2Z1bmN0aW9uIGgoZixkKXtmb3IodmFyIHA9MDtwPGQubGVuZ3RoO3ArKyl7dmFyIG09ZFtwXTttLmVudW1lcmFibGU9bS5lbnVtZXJhYmxlfHwhMSxtLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbSYmKG0ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLG0ua2V5LG0pfX1yZXR1cm4gbyhoLCJkZWZpbmVQcm9wZXJ0aWVzIiksZnVuY3Rpb24oZixkLHApe3JldHVybiBkJiZoKGYucHJvdG90eXBlLGQpLHAmJmgoZixwKSxmfX0oKTtmdW5jdGlvbiBpKGgsZil7aWYoIShoIGluc3RhbmNlb2YgZikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9byhpLCJfY2xhc3NDYWxsQ2hlY2siKTt2YXIgYT1vKGZ1bmN0aW9uKGYpe3JldHVybnt2YWx1ZTpmLG5leHQ6bnVsbCxwcmV2Om51bGx9fSwibm9kZUZyb20iKSxzPW8oZnVuY3Rpb24oZixkLHAsbSl7cmV0dXJuIGYhPT1udWxsP2YubmV4dD1kOm0uaGVhZD1kLHAhPT1udWxsP3AucHJldj1kOm0udGFpbD1kLGQucHJldj1mLGQubmV4dD1wLG0ubGVuZ3RoKyssZH0sImFkZCIpLGw9byhmdW5jdGlvbihmLGQpe3ZhciBwPWYucHJldixtPWYubmV4dDtyZXR1cm4gcCE9PW51bGw/cC5uZXh0PW06ZC5oZWFkPW0sbSE9PW51bGw/bS5wcmV2PXA6ZC50YWlsPXAsZi5wcmV2PWYubmV4dD1udWxsLGQubGVuZ3RoLS0sZn0sIl9yZW1vdmUiKSx1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gaChmKXt2YXIgZD10aGlzO2kodGhpcyxoKSx0aGlzLmxlbmd0aD0wLHRoaXMuaGVhZD1udWxsLHRoaXMudGFpbD1udWxsLGY/LmZvckVhY2goZnVuY3Rpb24ocCl7cmV0dXJuIGQucHVzaChwKX0pfXJldHVybiBvKGgsIkxpbmtlZExpc3QiKSxuKGgsW3trZXk6InNpemUiLHZhbHVlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGh9LCJzaXplIil9LHtrZXk6Imluc2VydEJlZm9yZSIsdmFsdWU6byhmdW5jdGlvbihkLHApe3JldHVybiBzKHAucHJldixhKGQpLHAsdGhpcyl9LCJpbnNlcnRCZWZvcmUiKX0se2tleToiaW5zZXJ0QWZ0ZXIiLHZhbHVlOm8oZnVuY3Rpb24oZCxwKXtyZXR1cm4gcyhwLGEoZCkscC5uZXh0LHRoaXMpfSwiaW5zZXJ0QWZ0ZXIiKX0se2tleToiaW5zZXJ0Tm9kZUJlZm9yZSIsdmFsdWU6byhmdW5jdGlvbihkLHApe3JldHVybiBzKHAucHJldixkLHAsdGhpcyl9LCJpbnNlcnROb2RlQmVmb3JlIil9LHtrZXk6Imluc2VydE5vZGVBZnRlciIsdmFsdWU6byhmdW5jdGlvbihkLHApe3JldHVybiBzKHAsZCxwLm5leHQsdGhpcyl9LCJpbnNlcnROb2RlQWZ0ZXIiKX0se2tleToicHVzaCIsdmFsdWU6byhmdW5jdGlvbihkKXtyZXR1cm4gcyh0aGlzLnRhaWwsYShkKSxudWxsLHRoaXMpfSwicHVzaCIpfSx7a2V5OiJ1bnNoaWZ0Iix2YWx1ZTpvKGZ1bmN0aW9uKGQpe3JldHVybiBzKG51bGwsYShkKSx0aGlzLmhlYWQsdGhpcyl9LCJ1bnNoaWZ0Iil9LHtrZXk6InJlbW92ZSIsdmFsdWU6byhmdW5jdGlvbihkKXtyZXR1cm4gbChkLHRoaXMpfSwicmVtb3ZlIil9LHtrZXk6InBvcCIsdmFsdWU6byhmdW5jdGlvbigpe3JldHVybiBsKHRoaXMudGFpbCx0aGlzKS52YWx1ZX0sInBvcCIpfSx7a2V5OiJwb3BOb2RlIix2YWx1ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIGwodGhpcy50YWlsLHRoaXMpfSwicG9wTm9kZSIpfSx7a2V5OiJzaGlmdCIsdmFsdWU6byhmdW5jdGlvbigpe3JldHVybiBsKHRoaXMuaGVhZCx0aGlzKS52YWx1ZX0sInNoaWZ0Iil9LHtrZXk6InNoaWZ0Tm9kZSIsdmFsdWU6byhmdW5jdGlvbigpe3JldHVybiBsKHRoaXMuaGVhZCx0aGlzKX0sInNoaWZ0Tm9kZSIpfSx7a2V5OiJnZXRfb2JqZWN0X2F0Iix2YWx1ZTpvKGZ1bmN0aW9uKGQpe2lmKGQ8PXRoaXMubGVuZ3RoKCkpe2Zvcih2YXIgcD0xLG09dGhpcy5oZWFkO3A8ZDspbT1tLm5leHQscCsrO3JldHVybiBtLnZhbHVlfX0sImdldF9vYmplY3RfYXQiKX0se2tleToic2V0X29iamVjdF9hdCIsdmFsdWU6byhmdW5jdGlvbihkLHApe2lmKGQ8PXRoaXMubGVuZ3RoKCkpe2Zvcih2YXIgbT0xLGc9dGhpcy5oZWFkO208ZDspZz1nLm5leHQsbSsrO2cudmFsdWU9cH19LCJzZXRfb2JqZWN0X2F0Iil9XSksaH0oKTt0LmV4cG9ydHM9dX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGksYSxzKXt0aGlzLng9bnVsbCx0aGlzLnk9bnVsbCxpPT1udWxsJiZhPT1udWxsJiZzPT1udWxsPyh0aGlzLng9MCx0aGlzLnk9MCk6dHlwZW9mIGk9PSJudW1iZXIiJiZ0eXBlb2YgYT09Im51bWJlciImJnM9PW51bGw/KHRoaXMueD1pLHRoaXMueT1hKTppLmNvbnN0cnVjdG9yLm5hbWU9PSJQb2ludCImJmE9PW51bGwmJnM9PW51bGwmJihzPWksdGhpcy54PXMueCx0aGlzLnk9cy55KX1vKG4sIlBvaW50Iiksbi5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnh9LG4ucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55fSxuLnByb3RvdHlwZS5nZXRMb2NhdGlvbj1mdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzLngsdGhpcy55KX0sbi5wcm90b3R5cGUuc2V0TG9jYXRpb249ZnVuY3Rpb24oaSxhLHMpe2kuY29uc3RydWN0b3IubmFtZT09IlBvaW50IiYmYT09bnVsbCYmcz09bnVsbD8ocz1pLHRoaXMuc2V0TG9jYXRpb24ocy54LHMueSkpOnR5cGVvZiBpPT0ibnVtYmVyIiYmdHlwZW9mIGE9PSJudW1iZXIiJiZzPT1udWxsJiYocGFyc2VJbnQoaSk9PWkmJnBhcnNlSW50KGEpPT1hP3RoaXMubW92ZShpLGEpOih0aGlzLng9TWF0aC5mbG9vcihpKy41KSx0aGlzLnk9TWF0aC5mbG9vcihhKy41KSkpfSxuLnByb3RvdHlwZS5tb3ZlPWZ1bmN0aW9uKGksYSl7dGhpcy54PWksdGhpcy55PWF9LG4ucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbihpLGEpe3RoaXMueCs9aSx0aGlzLnkrPWF9LG4ucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihpKXtpZihpLmNvbnN0cnVjdG9yLm5hbWU9PSJQb2ludCIpe3ZhciBhPWk7cmV0dXJuIHRoaXMueD09YS54JiZ0aGlzLnk9PWEueX1yZXR1cm4gdGhpcz09aX0sbi5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4oKS5jb25zdHJ1Y3Rvci5uYW1lKyJbeD0iK3RoaXMueCsiLHk9Iit0aGlzLnkrIl0ifSx0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGksYSxzLGwpe3RoaXMueD0wLHRoaXMueT0wLHRoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLGkhPW51bGwmJmEhPW51bGwmJnMhPW51bGwmJmwhPW51bGwmJih0aGlzLng9aSx0aGlzLnk9YSx0aGlzLndpZHRoPXMsdGhpcy5oZWlnaHQ9bCl9byhuLCJSZWN0YW5nbGVEIiksbi5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnh9LG4ucHJvdG90eXBlLnNldFg9ZnVuY3Rpb24oaSl7dGhpcy54PWl9LG4ucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55fSxuLnByb3RvdHlwZS5zZXRZPWZ1bmN0aW9uKGkpe3RoaXMueT1pfSxuLnByb3RvdHlwZS5nZXRXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLndpZHRofSxuLnByb3RvdHlwZS5zZXRXaWR0aD1mdW5jdGlvbihpKXt0aGlzLndpZHRoPWl9LG4ucHJvdG90eXBlLmdldEhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhlaWdodH0sbi5wcm90b3R5cGUuc2V0SGVpZ2h0PWZ1bmN0aW9uKGkpe3RoaXMuaGVpZ2h0PWl9LG4ucHJvdG90eXBlLmdldFJpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueCt0aGlzLndpZHRofSxuLnByb3RvdHlwZS5nZXRCb3R0b209ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55K3RoaXMuaGVpZ2h0fSxuLnByb3RvdHlwZS5pbnRlcnNlY3RzPWZ1bmN0aW9uKGkpe3JldHVybiEodGhpcy5nZXRSaWdodCgpPGkueHx8dGhpcy5nZXRCb3R0b20oKTxpLnl8fGkuZ2V0UmlnaHQoKTx0aGlzLnh8fGkuZ2V0Qm90dG9tKCk8dGhpcy55KX0sbi5wcm90b3R5cGUuZ2V0Q2VudGVyWD1mdW5jdGlvbigpe3JldHVybiB0aGlzLngrdGhpcy53aWR0aC8yfSxuLnByb3RvdHlwZS5nZXRNaW5YPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0WCgpfSxuLnByb3RvdHlwZS5nZXRNYXhYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0WCgpK3RoaXMud2lkdGh9LG4ucHJvdG90eXBlLmdldENlbnRlclk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55K3RoaXMuaGVpZ2h0LzJ9LG4ucHJvdG90eXBlLmdldE1pblk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRZKCl9LG4ucHJvdG90eXBlLmdldE1heFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRZKCkrdGhpcy5oZWlnaHR9LG4ucHJvdG90eXBlLmdldFdpZHRoSGFsZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLndpZHRoLzJ9LG4ucHJvdG90eXBlLmdldEhlaWdodEhhbGY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oZWlnaHQvMn0sdC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmdHlwZW9mIFN5bWJvbC5pdGVyYXRvcj09InN5bWJvbCI/ZnVuY3Rpb24oYSl7cmV0dXJuIHR5cGVvZiBhfTpmdW5jdGlvbihhKXtyZXR1cm4gYSYmdHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmYS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGF9O2Z1bmN0aW9uIGkoKXt9byhpLCJVbmlxdWVJREdlbmVyZXRvciIpLGkubGFzdElEPTAsaS5jcmVhdGVJRD1mdW5jdGlvbihhKXtyZXR1cm4gaS5pc1ByaW1pdGl2ZShhKT9hOihhLnVuaXF1ZUlEIT1udWxsfHwoYS51bmlxdWVJRD1pLmdldFN0cmluZygpLGkubGFzdElEKyspLGEudW5pcXVlSUQpfSxpLmdldFN0cmluZz1mdW5jdGlvbihhKXtyZXR1cm4gYT09bnVsbCYmKGE9aS5sYXN0SUQpLCJPYmplY3QjIithfSxpLmlzUHJpbWl0aXZlPWZ1bmN0aW9uKGEpe3ZhciBzPXR5cGVvZiBhPiJ1Ij8idW5kZWZpbmVkIjpuKGEpO3JldHVybiBhPT1udWxsfHxzIT0ib2JqZWN0IiYmcyE9ImZ1bmN0aW9uIn0sdC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihtKXtpZihBcnJheS5pc0FycmF5KG0pKXtmb3IodmFyIGc9MCx5PUFycmF5KG0ubGVuZ3RoKTtnPG0ubGVuZ3RoO2crKyl5W2ddPW1bZ107cmV0dXJuIHl9ZWxzZSByZXR1cm4gQXJyYXkuZnJvbShtKX1vKG4sIl90b0NvbnN1bWFibGVBcnJheSIpO3ZhciBpPXIoMCksYT1yKDYpLHM9cigzKSxsPXIoMSksdT1yKDUpLGg9cig0KSxmPXIoMTcpLGQ9cigyNyk7ZnVuY3Rpb24gcChtKXtkLmNhbGwodGhpcyksdGhpcy5sYXlvdXRRdWFsaXR5PWkuUVVBTElUWSx0aGlzLmNyZWF0ZUJlbmRzQXNOZWVkZWQ9aS5ERUZBVUxUX0NSRUFURV9CRU5EU19BU19ORUVERUQsdGhpcy5pbmNyZW1lbnRhbD1pLkRFRkFVTFRfSU5DUkVNRU5UQUwsdGhpcy5hbmltYXRpb25PbkxheW91dD1pLkRFRkFVTFRfQU5JTUFUSU9OX09OX0xBWU9VVCx0aGlzLmFuaW1hdGlvbkR1cmluZ0xheW91dD1pLkRFRkFVTFRfQU5JTUFUSU9OX0RVUklOR19MQVlPVVQsdGhpcy5hbmltYXRpb25QZXJpb2Q9aS5ERUZBVUxUX0FOSU1BVElPTl9QRVJJT0QsdGhpcy51bmlmb3JtTGVhZk5vZGVTaXplcz1pLkRFRkFVTFRfVU5JRk9STV9MRUFGX05PREVfU0laRVMsdGhpcy5lZGdlVG9EdW1teU5vZGVzPW5ldyBNYXAsdGhpcy5ncmFwaE1hbmFnZXI9bmV3IGEodGhpcyksdGhpcy5pc0xheW91dEZpbmlzaGVkPSExLHRoaXMuaXNTdWJMYXlvdXQ9ITEsdGhpcy5pc1JlbW90ZVVzZT0hMSxtIT1udWxsJiYodGhpcy5pc1JlbW90ZVVzZT1tKX1vKHAsIkxheW91dCIpLHAuUkFORE9NX1NFRUQ9MSxwLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGQucHJvdG90eXBlKSxwLnByb3RvdHlwZS5nZXRHcmFwaE1hbmFnZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXJ9LHAucHJvdG90eXBlLmdldEFsbE5vZGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCl9LHAucHJvdG90eXBlLmdldEFsbEVkZ2VzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbEVkZ2VzKCl9LHAucHJvdG90eXBlLmdldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKCl9LHAucHJvdG90eXBlLm5ld0dyYXBoTWFuYWdlcj1mdW5jdGlvbigpe3ZhciBtPW5ldyBhKHRoaXMpO3JldHVybiB0aGlzLmdyYXBoTWFuYWdlcj1tLG19LHAucHJvdG90eXBlLm5ld0dyYXBoPWZ1bmN0aW9uKG0pe3JldHVybiBuZXcgdShudWxsLHRoaXMuZ3JhcGhNYW5hZ2VyLG0pfSxwLnByb3RvdHlwZS5uZXdOb2RlPWZ1bmN0aW9uKG0pe3JldHVybiBuZXcgcyh0aGlzLmdyYXBoTWFuYWdlcixtKX0scC5wcm90b3R5cGUubmV3RWRnZT1mdW5jdGlvbihtKXtyZXR1cm4gbmV3IGwobnVsbCxudWxsLG0pfSxwLnByb3RvdHlwZS5jaGVja0xheW91dFN1Y2Nlc3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpPT1udWxsfHx0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuZ2V0Tm9kZXMoKS5sZW5ndGg9PTB8fHRoaXMuZ3JhcGhNYW5hZ2VyLmluY2x1ZGVzSW52YWxpZEVkZ2UoKX0scC5wcm90b3R5cGUucnVuTGF5b3V0PWZ1bmN0aW9uKCl7dGhpcy5pc0xheW91dEZpbmlzaGVkPSExLHRoaXMudGlsaW5nUHJlTGF5b3V0JiZ0aGlzLnRpbGluZ1ByZUxheW91dCgpLHRoaXMuaW5pdFBhcmFtZXRlcnMoKTt2YXIgbTtyZXR1cm4gdGhpcy5jaGVja0xheW91dFN1Y2Nlc3MoKT9tPSExOm09dGhpcy5sYXlvdXQoKSxpLkFOSU1BVEU9PT0iZHVyaW5nIj8hMToobSYmKHRoaXMuaXNTdWJMYXlvdXR8fHRoaXMuZG9Qb3N0TGF5b3V0KCkpLHRoaXMudGlsaW5nUG9zdExheW91dCYmdGhpcy50aWxpbmdQb3N0TGF5b3V0KCksdGhpcy5pc0xheW91dEZpbmlzaGVkPSEwLG0pfSxwLnByb3RvdHlwZS5kb1Bvc3RMYXlvdXQ9ZnVuY3Rpb24oKXt0aGlzLmluY3JlbWVudGFsfHx0aGlzLnRyYW5zZm9ybSgpLHRoaXMudXBkYXRlKCl9LHAucHJvdG90eXBlLnVwZGF0ZTI9ZnVuY3Rpb24oKXtpZih0aGlzLmNyZWF0ZUJlbmRzQXNOZWVkZWQmJih0aGlzLmNyZWF0ZUJlbmRwb2ludHNGcm9tRHVtbXlOb2RlcygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsRWRnZXMoKSksIXRoaXMuaXNSZW1vdGVVc2Upe2Zvcih2YXIgbSxnPXRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbEVkZ2VzKCkseT0wO3k8Zy5sZW5ndGg7eSsrKW09Z1t5XTtmb3IodmFyIHYseD10aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuZ2V0Tm9kZXMoKSx5PTA7eTx4Lmxlbmd0aDt5Kyspdj14W3ldO3RoaXMudXBkYXRlKHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKSl9fSxwLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24obSl7aWYobT09bnVsbCl0aGlzLnVwZGF0ZTIoKTtlbHNlIGlmKG0gaW5zdGFuY2VvZiBzKXt2YXIgZz1tO2lmKGcuZ2V0Q2hpbGQoKSE9bnVsbClmb3IodmFyIHk9Zy5nZXRDaGlsZCgpLmdldE5vZGVzKCksdj0wO3Y8eS5sZW5ndGg7disrKXVwZGF0ZSh5W3ZdKTtpZihnLnZHcmFwaE9iamVjdCE9bnVsbCl7dmFyIHg9Zy52R3JhcGhPYmplY3Q7eC51cGRhdGUoZyl9fWVsc2UgaWYobSBpbnN0YW5jZW9mIGwpe3ZhciBiPW07aWYoYi52R3JhcGhPYmplY3QhPW51bGwpe3ZhciBUPWIudkdyYXBoT2JqZWN0O1QudXBkYXRlKGIpfX1lbHNlIGlmKG0gaW5zdGFuY2VvZiB1KXt2YXIgUz1tO2lmKFMudkdyYXBoT2JqZWN0IT1udWxsKXt2YXIgdz1TLnZHcmFwaE9iamVjdDt3LnVwZGF0ZShTKX19fSxwLnByb3RvdHlwZS5pbml0UGFyYW1ldGVycz1mdW5jdGlvbigpe3RoaXMuaXNTdWJMYXlvdXR8fCh0aGlzLmxheW91dFF1YWxpdHk9aS5RVUFMSVRZLHRoaXMuYW5pbWF0aW9uRHVyaW5nTGF5b3V0PWkuREVGQVVMVF9BTklNQVRJT05fRFVSSU5HX0xBWU9VVCx0aGlzLmFuaW1hdGlvblBlcmlvZD1pLkRFRkFVTFRfQU5JTUFUSU9OX1BFUklPRCx0aGlzLmFuaW1hdGlvbk9uTGF5b3V0PWkuREVGQVVMVF9BTklNQVRJT05fT05fTEFZT1VULHRoaXMuaW5jcmVtZW50YWw9aS5ERUZBVUxUX0lOQ1JFTUVOVEFMLHRoaXMuY3JlYXRlQmVuZHNBc05lZWRlZD1pLkRFRkFVTFRfQ1JFQVRFX0JFTkRTX0FTX05FRURFRCx0aGlzLnVuaWZvcm1MZWFmTm9kZVNpemVzPWkuREVGQVVMVF9VTklGT1JNX0xFQUZfTk9ERV9TSVpFUyksdGhpcy5hbmltYXRpb25EdXJpbmdMYXlvdXQmJih0aGlzLmFuaW1hdGlvbk9uTGF5b3V0PSExKX0scC5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKG0pe2lmKG09PW51bGwpdGhpcy50cmFuc2Zvcm0obmV3IGgoMCwwKSk7ZWxzZXt2YXIgZz1uZXcgZix5PXRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS51cGRhdGVMZWZ0VG9wKCk7aWYoeSE9bnVsbCl7Zy5zZXRXb3JsZE9yZ1gobS54KSxnLnNldFdvcmxkT3JnWShtLnkpLGcuc2V0RGV2aWNlT3JnWCh5LngpLGcuc2V0RGV2aWNlT3JnWSh5LnkpO2Zvcih2YXIgdj10aGlzLmdldEFsbE5vZGVzKCkseCxiPTA7Yjx2Lmxlbmd0aDtiKyspeD12W2JdLHgudHJhbnNmb3JtKGcpfX19LHAucHJvdG90eXBlLnBvc2l0aW9uTm9kZXNSYW5kb21seT1mdW5jdGlvbihtKXtpZihtPT1udWxsKXRoaXMucG9zaXRpb25Ob2Rlc1JhbmRvbWx5KHRoaXMuZ2V0R3JhcGhNYW5hZ2VyKCkuZ2V0Um9vdCgpKSx0aGlzLmdldEdyYXBoTWFuYWdlcigpLmdldFJvb3QoKS51cGRhdGVCb3VuZHMoITApO2Vsc2UgZm9yKHZhciBnLHksdj1tLmdldE5vZGVzKCkseD0wO3g8di5sZW5ndGg7eCsrKWc9dlt4XSx5PWcuZ2V0Q2hpbGQoKSx5PT1udWxsfHx5LmdldE5vZGVzKCkubGVuZ3RoPT0wP2cuc2NhdHRlcigpOih0aGlzLnBvc2l0aW9uTm9kZXNSYW5kb21seSh5KSxnLnVwZGF0ZUJvdW5kcygpKX0scC5wcm90b3R5cGUuZ2V0RmxhdEZvcmVzdD1mdW5jdGlvbigpe2Zvcih2YXIgbT1bXSxnPSEwLHk9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmdldE5vZGVzKCksdj0hMCx4PTA7eDx5Lmxlbmd0aDt4KyspeVt4XS5nZXRDaGlsZCgpIT1udWxsJiYodj0hMSk7aWYoIXYpcmV0dXJuIG07dmFyIGI9bmV3IFNldCxUPVtdLFM9bmV3IE1hcCx3PVtdO2Zvcih3PXcuY29uY2F0KHkpO3cubGVuZ3RoPjAmJmc7KXtmb3IoVC5wdXNoKHdbMF0pO1QubGVuZ3RoPjAmJmc7KXt2YXIgRT1UWzBdO1Quc3BsaWNlKDAsMSksYi5hZGQoRSk7Zm9yKHZhciBfPUUuZ2V0RWRnZXMoKSx4PTA7eDxfLmxlbmd0aDt4Kyspe3ZhciBDPV9beF0uZ2V0T3RoZXJFbmQoRSk7aWYoUy5nZXQoRSkhPUMpaWYoIWIuaGFzKEMpKVQucHVzaChDKSxTLnNldChDLEUpO2Vsc2V7Zz0hMTticmVha319fWlmKCFnKW09W107ZWxzZXt2YXIgRD1bXS5jb25jYXQobihiKSk7bS5wdXNoKEQpO2Zvcih2YXIgeD0wO3g8RC5sZW5ndGg7eCsrKXt2YXIgTz1EW3hdLFI9dy5pbmRleE9mKE8pO1I+LTEmJncuc3BsaWNlKFIsMSl9Yj1uZXcgU2V0LFM9bmV3IE1hcH19cmV0dXJuIG19LHAucHJvdG90eXBlLmNyZWF0ZUR1bW15Tm9kZXNGb3JCZW5kcG9pbnRzPWZ1bmN0aW9uKG0pe2Zvcih2YXIgZz1bXSx5PW0uc291cmNlLHY9dGhpcy5ncmFwaE1hbmFnZXIuY2FsY0xvd2VzdENvbW1vbkFuY2VzdG9yKG0uc291cmNlLG0udGFyZ2V0KSx4PTA7eDxtLmJlbmRwb2ludHMubGVuZ3RoO3grKyl7dmFyIGI9dGhpcy5uZXdOb2RlKG51bGwpO2Iuc2V0UmVjdChuZXcgUG9pbnQoMCwwKSxuZXcgRGltZW5zaW9uKDEsMSkpLHYuYWRkKGIpO3ZhciBUPXRoaXMubmV3RWRnZShudWxsKTt0aGlzLmdyYXBoTWFuYWdlci5hZGQoVCx5LGIpLGcuYWRkKGIpLHk9Yn12YXIgVD10aGlzLm5ld0VkZ2UobnVsbCk7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyLmFkZChULHksbS50YXJnZXQpLHRoaXMuZWRnZVRvRHVtbXlOb2Rlcy5zZXQobSxnKSxtLmlzSW50ZXJHcmFwaCgpP3RoaXMuZ3JhcGhNYW5hZ2VyLnJlbW92ZShtKTp2LnJlbW92ZShtKSxnfSxwLnByb3RvdHlwZS5jcmVhdGVCZW5kcG9pbnRzRnJvbUR1bW15Tm9kZXM9ZnVuY3Rpb24oKXt2YXIgbT1bXTttPW0uY29uY2F0KHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbEVkZ2VzKCkpLG09W10uY29uY2F0KG4odGhpcy5lZGdlVG9EdW1teU5vZGVzLmtleXMoKSkpLmNvbmNhdChtKTtmb3IodmFyIGc9MDtnPG0ubGVuZ3RoO2crKyl7dmFyIHk9bVtnXTtpZih5LmJlbmRwb2ludHMubGVuZ3RoPjApe2Zvcih2YXIgdj10aGlzLmVkZ2VUb0R1bW15Tm9kZXMuZ2V0KHkpLHg9MDt4PHYubGVuZ3RoO3grKyl7dmFyIGI9dlt4XSxUPW5ldyBoKGIuZ2V0Q2VudGVyWCgpLGIuZ2V0Q2VudGVyWSgpKSxTPXkuYmVuZHBvaW50cy5nZXQoeCk7Uy54PVQueCxTLnk9VC55LGIuZ2V0T3duZXIoKS5yZW1vdmUoYil9dGhpcy5ncmFwaE1hbmFnZXIuYWRkKHkseS5zb3VyY2UseS50YXJnZXQpfX19LHAudHJhbnNmb3JtPWZ1bmN0aW9uKG0sZyx5LHYpe2lmKHkhPW51bGwmJnYhPW51bGwpe3ZhciB4PWc7aWYobTw9NTApe3ZhciBiPWcveTt4LT0oZy1iKS81MCooNTAtbSl9ZWxzZXt2YXIgVD1nKnY7eCs9KFQtZykvNTAqKG0tNTApfXJldHVybiB4fWVsc2V7dmFyIFMsdztyZXR1cm4gbTw9NTA/KFM9OSpnLzUwMCx3PWcvMTApOihTPTkqZy81MCx3PS04KmcpLFMqbSt3fX0scC5maW5kQ2VudGVyT2ZUcmVlPWZ1bmN0aW9uKG0pe3ZhciBnPVtdO2c9Zy5jb25jYXQobSk7dmFyIHk9W10sdj1uZXcgTWFwLHg9ITEsYj1udWxsOyhnLmxlbmd0aD09MXx8Zy5sZW5ndGg9PTIpJiYoeD0hMCxiPWdbMF0pO2Zvcih2YXIgVD0wO1Q8Zy5sZW5ndGg7VCsrKXt2YXIgUz1nW1RdLHc9Uy5nZXROZWlnaGJvcnNMaXN0KCkuc2l6ZTt2LnNldChTLFMuZ2V0TmVpZ2hib3JzTGlzdCgpLnNpemUpLHc9PTEmJnkucHVzaChTKX12YXIgRT1bXTtmb3IoRT1FLmNvbmNhdCh5KTsheDspe3ZhciBfPVtdO189Xy5jb25jYXQoRSksRT1bXTtmb3IodmFyIFQ9MDtUPGcubGVuZ3RoO1QrKyl7dmFyIFM9Z1tUXSxDPWcuaW5kZXhPZihTKTtDPj0wJiZnLnNwbGljZShDLDEpO3ZhciBEPVMuZ2V0TmVpZ2hib3JzTGlzdCgpO0QuZm9yRWFjaChmdW5jdGlvbihrKXtpZih5LmluZGV4T2Yoayk8MCl7dmFyIEw9di5nZXQoayksQT1MLTE7QT09MSYmRS5wdXNoKGspLHYuc2V0KGssQSl9fSl9eT15LmNvbmNhdChFKSwoZy5sZW5ndGg9PTF8fGcubGVuZ3RoPT0yKSYmKHg9ITAsYj1nWzBdKX1yZXR1cm4gYn0scC5wcm90b3R5cGUuc2V0R3JhcGhNYW5hZ2VyPWZ1bmN0aW9uKG0pe3RoaXMuZ3JhcGhNYW5hZ2VyPW19LHQuZXhwb3J0cz1wfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXt9byhuLCJSYW5kb21TZWVkIiksbi5zZWVkPTEsbi54PTAsbi5uZXh0RG91YmxlPWZ1bmN0aW9uKCl7cmV0dXJuIG4ueD1NYXRoLnNpbihuLnNlZWQrKykqMWU0LG4ueC1NYXRoLmZsb29yKG4ueCl9LHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoNCk7ZnVuY3Rpb24gaShhLHMpe3RoaXMubHdvcmxkT3JnWD0wLHRoaXMubHdvcmxkT3JnWT0wLHRoaXMubGRldmljZU9yZ1g9MCx0aGlzLmxkZXZpY2VPcmdZPTAsdGhpcy5sd29ybGRFeHRYPTEsdGhpcy5sd29ybGRFeHRZPTEsdGhpcy5sZGV2aWNlRXh0WD0xLHRoaXMubGRldmljZUV4dFk9MX1vKGksIlRyYW5zZm9ybSIpLGkucHJvdG90eXBlLmdldFdvcmxkT3JnWD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmx3b3JsZE9yZ1h9LGkucHJvdG90eXBlLnNldFdvcmxkT3JnWD1mdW5jdGlvbihhKXt0aGlzLmx3b3JsZE9yZ1g9YX0saS5wcm90b3R5cGUuZ2V0V29ybGRPcmdZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubHdvcmxkT3JnWX0saS5wcm90b3R5cGUuc2V0V29ybGRPcmdZPWZ1bmN0aW9uKGEpe3RoaXMubHdvcmxkT3JnWT1hfSxpLnByb3RvdHlwZS5nZXRXb3JsZEV4dFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sd29ybGRFeHRYfSxpLnByb3RvdHlwZS5zZXRXb3JsZEV4dFg9ZnVuY3Rpb24oYSl7dGhpcy5sd29ybGRFeHRYPWF9LGkucHJvdG90eXBlLmdldFdvcmxkRXh0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmx3b3JsZEV4dFl9LGkucHJvdG90eXBlLnNldFdvcmxkRXh0WT1mdW5jdGlvbihhKXt0aGlzLmx3b3JsZEV4dFk9YX0saS5wcm90b3R5cGUuZ2V0RGV2aWNlT3JnWD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxkZXZpY2VPcmdYfSxpLnByb3RvdHlwZS5zZXREZXZpY2VPcmdYPWZ1bmN0aW9uKGEpe3RoaXMubGRldmljZU9yZ1g9YX0saS5wcm90b3R5cGUuZ2V0RGV2aWNlT3JnWT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxkZXZpY2VPcmdZfSxpLnByb3RvdHlwZS5zZXREZXZpY2VPcmdZPWZ1bmN0aW9uKGEpe3RoaXMubGRldmljZU9yZ1k9YX0saS5wcm90b3R5cGUuZ2V0RGV2aWNlRXh0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxkZXZpY2VFeHRYfSxpLnByb3RvdHlwZS5zZXREZXZpY2VFeHRYPWZ1bmN0aW9uKGEpe3RoaXMubGRldmljZUV4dFg9YX0saS5wcm90b3R5cGUuZ2V0RGV2aWNlRXh0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxkZXZpY2VFeHRZfSxpLnByb3RvdHlwZS5zZXREZXZpY2VFeHRZPWZ1bmN0aW9uKGEpe3RoaXMubGRldmljZUV4dFk9YX0saS5wcm90b3R5cGUudHJhbnNmb3JtWD1mdW5jdGlvbihhKXt2YXIgcz0wLGw9dGhpcy5sd29ybGRFeHRYO3JldHVybiBsIT0wJiYocz10aGlzLmxkZXZpY2VPcmdYKyhhLXRoaXMubHdvcmxkT3JnWCkqdGhpcy5sZGV2aWNlRXh0WC9sKSxzfSxpLnByb3RvdHlwZS50cmFuc2Zvcm1ZPWZ1bmN0aW9uKGEpe3ZhciBzPTAsbD10aGlzLmx3b3JsZEV4dFk7cmV0dXJuIGwhPTAmJihzPXRoaXMubGRldmljZU9yZ1krKGEtdGhpcy5sd29ybGRPcmdZKSp0aGlzLmxkZXZpY2VFeHRZL2wpLHN9LGkucHJvdG90eXBlLmludmVyc2VUcmFuc2Zvcm1YPWZ1bmN0aW9uKGEpe3ZhciBzPTAsbD10aGlzLmxkZXZpY2VFeHRYO3JldHVybiBsIT0wJiYocz10aGlzLmx3b3JsZE9yZ1grKGEtdGhpcy5sZGV2aWNlT3JnWCkqdGhpcy5sd29ybGRFeHRYL2wpLHN9LGkucHJvdG90eXBlLmludmVyc2VUcmFuc2Zvcm1ZPWZ1bmN0aW9uKGEpe3ZhciBzPTAsbD10aGlzLmxkZXZpY2VFeHRZO3JldHVybiBsIT0wJiYocz10aGlzLmx3b3JsZE9yZ1krKGEtdGhpcy5sZGV2aWNlT3JnWSkqdGhpcy5sd29ybGRFeHRZL2wpLHN9LGkucHJvdG90eXBlLmludmVyc2VUcmFuc2Zvcm1Qb2ludD1mdW5jdGlvbihhKXt2YXIgcz1uZXcgbih0aGlzLmludmVyc2VUcmFuc2Zvcm1YKGEueCksdGhpcy5pbnZlcnNlVHJhbnNmb3JtWShhLnkpKTtyZXR1cm4gc30sdC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihkKXtpZihBcnJheS5pc0FycmF5KGQpKXtmb3IodmFyIHA9MCxtPUFycmF5KGQubGVuZ3RoKTtwPGQubGVuZ3RoO3ArKyltW3BdPWRbcF07cmV0dXJuIG19ZWxzZSByZXR1cm4gQXJyYXkuZnJvbShkKX1vKG4sIl90b0NvbnN1bWFibGVBcnJheSIpO3ZhciBpPXIoMTUpLGE9cig3KSxzPXIoMCksbD1yKDgpLHU9cig5KTtmdW5jdGlvbiBoKCl7aS5jYWxsKHRoaXMpLHRoaXMudXNlU21hcnRJZGVhbEVkZ2VMZW5ndGhDYWxjdWxhdGlvbj1hLkRFRkFVTFRfVVNFX1NNQVJUX0lERUFMX0VER0VfTEVOR1RIX0NBTENVTEFUSU9OLHRoaXMuaWRlYWxFZGdlTGVuZ3RoPWEuREVGQVVMVF9FREdFX0xFTkdUSCx0aGlzLnNwcmluZ0NvbnN0YW50PWEuREVGQVVMVF9TUFJJTkdfU1RSRU5HVEgsdGhpcy5yZXB1bHNpb25Db25zdGFudD1hLkRFRkFVTFRfUkVQVUxTSU9OX1NUUkVOR1RILHRoaXMuZ3Jhdml0eUNvbnN0YW50PWEuREVGQVVMVF9HUkFWSVRZX1NUUkVOR1RILHRoaXMuY29tcG91bmRHcmF2aXR5Q29uc3RhbnQ9YS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfU1RSRU5HVEgsdGhpcy5ncmF2aXR5UmFuZ2VGYWN0b3I9YS5ERUZBVUxUX0dSQVZJVFlfUkFOR0VfRkFDVE9SLHRoaXMuY29tcG91bmRHcmF2aXR5UmFuZ2VGYWN0b3I9YS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfUkFOR0VfRkFDVE9SLHRoaXMuZGlzcGxhY2VtZW50VGhyZXNob2xkUGVyTm9kZT0zKmEuREVGQVVMVF9FREdFX0xFTkdUSC8xMDAsdGhpcy5jb29saW5nRmFjdG9yPWEuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTCx0aGlzLmluaXRpYWxDb29saW5nRmFjdG9yPWEuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTCx0aGlzLnRvdGFsRGlzcGxhY2VtZW50PTAsdGhpcy5vbGRUb3RhbERpc3BsYWNlbWVudD0wLHRoaXMubWF4SXRlcmF0aW9ucz1hLk1BWF9JVEVSQVRJT05TfW8oaCwiRkRMYXlvdXQiKSxoLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKTtmb3IodmFyIGYgaW4gaSloW2ZdPWlbZl07aC5wcm90b3R5cGUuaW5pdFBhcmFtZXRlcnM9ZnVuY3Rpb24oKXtpLnByb3RvdHlwZS5pbml0UGFyYW1ldGVycy5jYWxsKHRoaXMsYXJndW1lbnRzKSx0aGlzLnRvdGFsSXRlcmF0aW9ucz0wLHRoaXMubm90QW5pbWF0ZWRJdGVyYXRpb25zPTAsdGhpcy51c2VGUkdyaWRWYXJpYW50PWEuREVGQVVMVF9VU0VfU01BUlRfUkVQVUxTSU9OX1JBTkdFX0NBTENVTEFUSU9OLHRoaXMuZ3JpZD1bXX0saC5wcm90b3R5cGUuY2FsY0lkZWFsRWRnZUxlbmd0aHM9ZnVuY3Rpb24oKXtmb3IodmFyIGQscCxtLGcseSx2LHg9dGhpcy5nZXRHcmFwaE1hbmFnZXIoKS5nZXRBbGxFZGdlcygpLGI9MDtiPHgubGVuZ3RoO2IrKylkPXhbYl0sZC5pZGVhbExlbmd0aD10aGlzLmlkZWFsRWRnZUxlbmd0aCxkLmlzSW50ZXJHcmFwaCYmKG09ZC5nZXRTb3VyY2UoKSxnPWQuZ2V0VGFyZ2V0KCkseT1kLmdldFNvdXJjZUluTGNhKCkuZ2V0RXN0aW1hdGVkU2l6ZSgpLHY9ZC5nZXRUYXJnZXRJbkxjYSgpLmdldEVzdGltYXRlZFNpemUoKSx0aGlzLnVzZVNtYXJ0SWRlYWxFZGdlTGVuZ3RoQ2FsY3VsYXRpb24mJihkLmlkZWFsTGVuZ3RoKz15K3YtMipzLlNJTVBMRV9OT0RFX1NJWkUpLHA9ZC5nZXRMY2EoKS5nZXRJbmNsdXNpb25UcmVlRGVwdGgoKSxkLmlkZWFsTGVuZ3RoKz1hLkRFRkFVTFRfRURHRV9MRU5HVEgqYS5QRVJfTEVWRUxfSURFQUxfRURHRV9MRU5HVEhfRkFDVE9SKihtLmdldEluY2x1c2lvblRyZWVEZXB0aCgpK2cuZ2V0SW5jbHVzaW9uVHJlZURlcHRoKCktMipwKSl9LGgucHJvdG90eXBlLmluaXRTcHJpbmdFbWJlZGRlcj1mdW5jdGlvbigpe3ZhciBkPXRoaXMuZ2V0QWxsTm9kZXMoKS5sZW5ndGg7dGhpcy5pbmNyZW1lbnRhbD8oZD5hLkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVCYmKHRoaXMuY29vbGluZ0ZhY3Rvcj1NYXRoLm1heCh0aGlzLmNvb2xpbmdGYWN0b3IqYS5DT09MSU5HX0FEQVBUQVRJT05fRkFDVE9SLHRoaXMuY29vbGluZ0ZhY3Rvci0oZC1hLkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVCkvKGEuQURBUFRBVElPTl9VUFBFUl9OT0RFX0xJTUlULWEuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUKSp0aGlzLmNvb2xpbmdGYWN0b3IqKDEtYS5DT09MSU5HX0FEQVBUQVRJT05fRkFDVE9SKSkpLHRoaXMubWF4Tm9kZURpc3BsYWNlbWVudD1hLk1BWF9OT0RFX0RJU1BMQUNFTUVOVF9JTkNSRU1FTlRBTCk6KGQ+YS5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQ/dGhpcy5jb29saW5nRmFjdG9yPU1hdGgubWF4KGEuQ09PTElOR19BREFQVEFUSU9OX0ZBQ1RPUiwxLShkLWEuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUKS8oYS5BREFQVEFUSU9OX1VQUEVSX05PREVfTElNSVQtYS5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQpKigxLWEuQ09PTElOR19BREFQVEFUSU9OX0ZBQ1RPUikpOnRoaXMuY29vbGluZ0ZhY3Rvcj0xLHRoaXMuaW5pdGlhbENvb2xpbmdGYWN0b3I9dGhpcy5jb29saW5nRmFjdG9yLHRoaXMubWF4Tm9kZURpc3BsYWNlbWVudD1hLk1BWF9OT0RFX0RJU1BMQUNFTUVOVCksdGhpcy5tYXhJdGVyYXRpb25zPU1hdGgubWF4KHRoaXMuZ2V0QWxsTm9kZXMoKS5sZW5ndGgqNSx0aGlzLm1heEl0ZXJhdGlvbnMpLHRoaXMudG90YWxEaXNwbGFjZW1lbnRUaHJlc2hvbGQ9dGhpcy5kaXNwbGFjZW1lbnRUaHJlc2hvbGRQZXJOb2RlKnRoaXMuZ2V0QWxsTm9kZXMoKS5sZW5ndGgsdGhpcy5yZXB1bHNpb25SYW5nZT10aGlzLmNhbGNSZXB1bHNpb25SYW5nZSgpfSxoLnByb3RvdHlwZS5jYWxjU3ByaW5nRm9yY2VzPWZ1bmN0aW9uKCl7Zm9yKHZhciBkPXRoaXMuZ2V0QWxsRWRnZXMoKSxwLG09MDttPGQubGVuZ3RoO20rKylwPWRbbV0sdGhpcy5jYWxjU3ByaW5nRm9yY2UocCxwLmlkZWFsTGVuZ3RoKX0saC5wcm90b3R5cGUuY2FsY1JlcHVsc2lvbkZvcmNlcz1mdW5jdGlvbigpe3ZhciBkPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMCxwPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMSxtLGcseSx2LHg9dGhpcy5nZXRBbGxOb2RlcygpLGI7aWYodGhpcy51c2VGUkdyaWRWYXJpYW50KWZvcih0aGlzLnRvdGFsSXRlcmF0aW9ucyVhLkdSSURfQ0FMQ1VMQVRJT05fQ0hFQ0tfUEVSSU9EPT0xJiZkJiZ0aGlzLnVwZGF0ZUdyaWQoKSxiPW5ldyBTZXQsbT0wO208eC5sZW5ndGg7bSsrKXk9eFttXSx0aGlzLmNhbGN1bGF0ZVJlcHVsc2lvbkZvcmNlT2ZBTm9kZSh5LGIsZCxwKSxiLmFkZCh5KTtlbHNlIGZvcihtPTA7bTx4Lmxlbmd0aDttKyspZm9yKHk9eFttXSxnPW0rMTtnPHgubGVuZ3RoO2crKyl2PXhbZ10seS5nZXRPd25lcigpPT12LmdldE93bmVyKCkmJnRoaXMuY2FsY1JlcHVsc2lvbkZvcmNlKHksdil9LGgucHJvdG90eXBlLmNhbGNHcmF2aXRhdGlvbmFsRm9yY2VzPWZ1bmN0aW9uKCl7Zm9yKHZhciBkLHA9dGhpcy5nZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbigpLG09MDttPHAubGVuZ3RoO20rKylkPXBbbV0sdGhpcy5jYWxjR3Jhdml0YXRpb25hbEZvcmNlKGQpfSxoLnByb3RvdHlwZS5tb3ZlTm9kZXM9ZnVuY3Rpb24oKXtmb3IodmFyIGQ9dGhpcy5nZXRBbGxOb2RlcygpLHAsbT0wO208ZC5sZW5ndGg7bSsrKXA9ZFttXSxwLm1vdmUoKX0saC5wcm90b3R5cGUuY2FsY1NwcmluZ0ZvcmNlPWZ1bmN0aW9uKGQscCl7dmFyIG09ZC5nZXRTb3VyY2UoKSxnPWQuZ2V0VGFyZ2V0KCkseSx2LHgsYjtpZih0aGlzLnVuaWZvcm1MZWFmTm9kZVNpemVzJiZtLmdldENoaWxkKCk9PW51bGwmJmcuZ2V0Q2hpbGQoKT09bnVsbClkLnVwZGF0ZUxlbmd0aFNpbXBsZSgpO2Vsc2UgaWYoZC51cGRhdGVMZW5ndGgoKSxkLmlzT3ZlcmxhcGluZ1NvdXJjZUFuZFRhcmdldClyZXR1cm47eT1kLmdldExlbmd0aCgpLHkhPTAmJih2PXRoaXMuc3ByaW5nQ29uc3RhbnQqKHktcCkseD12KihkLmxlbmd0aFgveSksYj12KihkLmxlbmd0aFkveSksbS5zcHJpbmdGb3JjZVgrPXgsbS5zcHJpbmdGb3JjZVkrPWIsZy5zcHJpbmdGb3JjZVgtPXgsZy5zcHJpbmdGb3JjZVktPWIpfSxoLnByb3RvdHlwZS5jYWxjUmVwdWxzaW9uRm9yY2U9ZnVuY3Rpb24oZCxwKXt2YXIgbT1kLmdldFJlY3QoKSxnPXAuZ2V0UmVjdCgpLHk9bmV3IEFycmF5KDIpLHY9bmV3IEFycmF5KDQpLHgsYixULFMsdyxFLF87aWYobS5pbnRlcnNlY3RzKGcpKXtsLmNhbGNTZXBhcmF0aW9uQW1vdW50KG0sZyx5LGEuREVGQVVMVF9FREdFX0xFTkdUSC8yKSxFPTIqeVswXSxfPTIqeVsxXTt2YXIgQz1kLm5vT2ZDaGlsZHJlbipwLm5vT2ZDaGlsZHJlbi8oZC5ub09mQ2hpbGRyZW4rcC5ub09mQ2hpbGRyZW4pO2QucmVwdWxzaW9uRm9yY2VYLT1DKkUsZC5yZXB1bHNpb25Gb3JjZVktPUMqXyxwLnJlcHVsc2lvbkZvcmNlWCs9QypFLHAucmVwdWxzaW9uRm9yY2VZKz1DKl99ZWxzZSB0aGlzLnVuaWZvcm1MZWFmTm9kZVNpemVzJiZkLmdldENoaWxkKCk9PW51bGwmJnAuZ2V0Q2hpbGQoKT09bnVsbD8oeD1nLmdldENlbnRlclgoKS1tLmdldENlbnRlclgoKSxiPWcuZ2V0Q2VudGVyWSgpLW0uZ2V0Q2VudGVyWSgpKToobC5nZXRJbnRlcnNlY3Rpb24obSxnLHYpLHg9dlsyXS12WzBdLGI9dlszXS12WzFdKSxNYXRoLmFicyh4KTxhLk1JTl9SRVBVTFNJT05fRElTVCYmKHg9dS5zaWduKHgpKmEuTUlOX1JFUFVMU0lPTl9ESVNUKSxNYXRoLmFicyhiKTxhLk1JTl9SRVBVTFNJT05fRElTVCYmKGI9dS5zaWduKGIpKmEuTUlOX1JFUFVMU0lPTl9ESVNUKSxUPXgqeCtiKmIsUz1NYXRoLnNxcnQoVCksdz10aGlzLnJlcHVsc2lvbkNvbnN0YW50KmQubm9PZkNoaWxkcmVuKnAubm9PZkNoaWxkcmVuL1QsRT13KngvUyxfPXcqYi9TLGQucmVwdWxzaW9uRm9yY2VYLT1FLGQucmVwdWxzaW9uRm9yY2VZLT1fLHAucmVwdWxzaW9uRm9yY2VYKz1FLHAucmVwdWxzaW9uRm9yY2VZKz1ffSxoLnByb3RvdHlwZS5jYWxjR3Jhdml0YXRpb25hbEZvcmNlPWZ1bmN0aW9uKGQpe3ZhciBwLG0sZyx5LHYseCxiLFQ7cD1kLmdldE93bmVyKCksbT0ocC5nZXRSaWdodCgpK3AuZ2V0TGVmdCgpKS8yLGc9KHAuZ2V0VG9wKCkrcC5nZXRCb3R0b20oKSkvMix5PWQuZ2V0Q2VudGVyWCgpLW0sdj1kLmdldENlbnRlclkoKS1nLHg9TWF0aC5hYnMoeSkrZC5nZXRXaWR0aCgpLzIsYj1NYXRoLmFicyh2KStkLmdldEhlaWdodCgpLzIsZC5nZXRPd25lcigpPT10aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCk/KFQ9cC5nZXRFc3RpbWF0ZWRTaXplKCkqdGhpcy5ncmF2aXR5UmFuZ2VGYWN0b3IsKHg+VHx8Yj5UKSYmKGQuZ3Jhdml0YXRpb25Gb3JjZVg9LXRoaXMuZ3Jhdml0eUNvbnN0YW50KnksZC5ncmF2aXRhdGlvbkZvcmNlWT0tdGhpcy5ncmF2aXR5Q29uc3RhbnQqdikpOihUPXAuZ2V0RXN0aW1hdGVkU2l6ZSgpKnRoaXMuY29tcG91bmRHcmF2aXR5UmFuZ2VGYWN0b3IsKHg+VHx8Yj5UKSYmKGQuZ3Jhdml0YXRpb25Gb3JjZVg9LXRoaXMuZ3Jhdml0eUNvbnN0YW50KnkqdGhpcy5jb21wb3VuZEdyYXZpdHlDb25zdGFudCxkLmdyYXZpdGF0aW9uRm9yY2VZPS10aGlzLmdyYXZpdHlDb25zdGFudCp2KnRoaXMuY29tcG91bmRHcmF2aXR5Q29uc3RhbnQpKX0saC5wcm90b3R5cGUuaXNDb252ZXJnZWQ9ZnVuY3Rpb24oKXt2YXIgZCxwPSExO3JldHVybiB0aGlzLnRvdGFsSXRlcmF0aW9ucz50aGlzLm1heEl0ZXJhdGlvbnMvMyYmKHA9TWF0aC5hYnModGhpcy50b3RhbERpc3BsYWNlbWVudC10aGlzLm9sZFRvdGFsRGlzcGxhY2VtZW50KTwyKSxkPXRoaXMudG90YWxEaXNwbGFjZW1lbnQ8dGhpcy50b3RhbERpc3BsYWNlbWVudFRocmVzaG9sZCx0aGlzLm9sZFRvdGFsRGlzcGxhY2VtZW50PXRoaXMudG90YWxEaXNwbGFjZW1lbnQsZHx8cH0saC5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbigpe3RoaXMuYW5pbWF0aW9uRHVyaW5nTGF5b3V0JiYhdGhpcy5pc1N1YkxheW91dCYmKHRoaXMubm90QW5pbWF0ZWRJdGVyYXRpb25zPT10aGlzLmFuaW1hdGlvblBlcmlvZD8odGhpcy51cGRhdGUoKSx0aGlzLm5vdEFuaW1hdGVkSXRlcmF0aW9ucz0wKTp0aGlzLm5vdEFuaW1hdGVkSXRlcmF0aW9ucysrKX0saC5wcm90b3R5cGUuY2FsY05vT2ZDaGlsZHJlbkZvckFsbE5vZGVzPWZ1bmN0aW9uKCl7Zm9yKHZhciBkLHA9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsTm9kZXMoKSxtPTA7bTxwLmxlbmd0aDttKyspZD1wW21dLGQubm9PZkNoaWxkcmVuPWQuZ2V0Tm9PZkNoaWxkcmVuKCl9LGgucHJvdG90eXBlLmNhbGNHcmlkPWZ1bmN0aW9uKGQpe3ZhciBwPTAsbT0wO3A9cGFyc2VJbnQoTWF0aC5jZWlsKChkLmdldFJpZ2h0KCktZC5nZXRMZWZ0KCkpL3RoaXMucmVwdWxzaW9uUmFuZ2UpKSxtPXBhcnNlSW50KE1hdGguY2VpbCgoZC5nZXRCb3R0b20oKS1kLmdldFRvcCgpKS90aGlzLnJlcHVsc2lvblJhbmdlKSk7Zm9yKHZhciBnPW5ldyBBcnJheShwKSx5PTA7eTxwO3krKylnW3ldPW5ldyBBcnJheShtKTtmb3IodmFyIHk9MDt5PHA7eSsrKWZvcih2YXIgdj0wO3Y8bTt2KyspZ1t5XVt2XT1uZXcgQXJyYXk7cmV0dXJuIGd9LGgucHJvdG90eXBlLmFkZE5vZGVUb0dyaWQ9ZnVuY3Rpb24oZCxwLG0pe3ZhciBnPTAseT0wLHY9MCx4PTA7Zz1wYXJzZUludChNYXRoLmZsb29yKChkLmdldFJlY3QoKS54LXApL3RoaXMucmVwdWxzaW9uUmFuZ2UpKSx5PXBhcnNlSW50KE1hdGguZmxvb3IoKGQuZ2V0UmVjdCgpLndpZHRoK2QuZ2V0UmVjdCgpLngtcCkvdGhpcy5yZXB1bHNpb25SYW5nZSkpLHY9cGFyc2VJbnQoTWF0aC5mbG9vcigoZC5nZXRSZWN0KCkueS1tKS90aGlzLnJlcHVsc2lvblJhbmdlKSkseD1wYXJzZUludChNYXRoLmZsb29yKChkLmdldFJlY3QoKS5oZWlnaHQrZC5nZXRSZWN0KCkueS1tKS90aGlzLnJlcHVsc2lvblJhbmdlKSk7Zm9yKHZhciBiPWc7Yjw9eTtiKyspZm9yKHZhciBUPXY7VDw9eDtUKyspdGhpcy5ncmlkW2JdW1RdLnB1c2goZCksZC5zZXRHcmlkQ29vcmRpbmF0ZXMoZyx5LHYseCl9LGgucHJvdG90eXBlLnVwZGF0ZUdyaWQ9ZnVuY3Rpb24oKXt2YXIgZCxwLG09dGhpcy5nZXRBbGxOb2RlcygpO2Zvcih0aGlzLmdyaWQ9dGhpcy5jYWxjR3JpZCh0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkpLGQ9MDtkPG0ubGVuZ3RoO2QrKylwPW1bZF0sdGhpcy5hZGROb2RlVG9HcmlkKHAsdGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmdldExlZnQoKSx0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuZ2V0VG9wKCkpfSxoLnByb3RvdHlwZS5jYWxjdWxhdGVSZXB1bHNpb25Gb3JjZU9mQU5vZGU9ZnVuY3Rpb24oZCxwLG0sZyl7aWYodGhpcy50b3RhbEl0ZXJhdGlvbnMlYS5HUklEX0NBTENVTEFUSU9OX0NIRUNLX1BFUklPRD09MSYmbXx8Zyl7dmFyIHk9bmV3IFNldDtkLnN1cnJvdW5kaW5nPW5ldyBBcnJheTtmb3IodmFyIHYseD10aGlzLmdyaWQsYj1kLnN0YXJ0WC0xO2I8ZC5maW5pc2hYKzI7YisrKWZvcih2YXIgVD1kLnN0YXJ0WS0xO1Q8ZC5maW5pc2hZKzI7VCsrKWlmKCEoYjwwfHxUPDB8fGI+PXgubGVuZ3RofHxUPj14WzBdLmxlbmd0aCkpe2Zvcih2YXIgUz0wO1M8eFtiXVtUXS5sZW5ndGg7UysrKWlmKHY9eFtiXVtUXVtTXSwhKGQuZ2V0T3duZXIoKSE9di5nZXRPd25lcigpfHxkPT12KSYmIXAuaGFzKHYpJiYheS5oYXModikpe3ZhciB3PU1hdGguYWJzKGQuZ2V0Q2VudGVyWCgpLXYuZ2V0Q2VudGVyWCgpKS0oZC5nZXRXaWR0aCgpLzIrdi5nZXRXaWR0aCgpLzIpLEU9TWF0aC5hYnMoZC5nZXRDZW50ZXJZKCktdi5nZXRDZW50ZXJZKCkpLShkLmdldEhlaWdodCgpLzIrdi5nZXRIZWlnaHQoKS8yKTt3PD10aGlzLnJlcHVsc2lvblJhbmdlJiZFPD10aGlzLnJlcHVsc2lvblJhbmdlJiZ5LmFkZCh2KX19ZC5zdXJyb3VuZGluZz1bXS5jb25jYXQobih5KSl9Zm9yKGI9MDtiPGQuc3Vycm91bmRpbmcubGVuZ3RoO2IrKyl0aGlzLmNhbGNSZXB1bHNpb25Gb3JjZShkLGQuc3Vycm91bmRpbmdbYl0pfSxoLnByb3RvdHlwZS5jYWxjUmVwdWxzaW9uUmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sdC5leHBvcnRzPWh9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxKSxpPXIoNyk7ZnVuY3Rpb24gYShsLHUsaCl7bi5jYWxsKHRoaXMsbCx1LGgpLHRoaXMuaWRlYWxMZW5ndGg9aS5ERUZBVUxUX0VER0VfTEVOR1RIfW8oYSwiRkRMYXlvdXRFZGdlIiksYS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSk7Zm9yKHZhciBzIGluIG4pYVtzXT1uW3NdO3QuZXhwb3J0cz1hfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMyk7ZnVuY3Rpb24gaShzLGwsdSxoKXtuLmNhbGwodGhpcyxzLGwsdSxoKSx0aGlzLnNwcmluZ0ZvcmNlWD0wLHRoaXMuc3ByaW5nRm9yY2VZPTAsdGhpcy5yZXB1bHNpb25Gb3JjZVg9MCx0aGlzLnJlcHVsc2lvbkZvcmNlWT0wLHRoaXMuZ3Jhdml0YXRpb25Gb3JjZVg9MCx0aGlzLmdyYXZpdGF0aW9uRm9yY2VZPTAsdGhpcy5kaXNwbGFjZW1lbnRYPTAsdGhpcy5kaXNwbGFjZW1lbnRZPTAsdGhpcy5zdGFydFg9MCx0aGlzLmZpbmlzaFg9MCx0aGlzLnN0YXJ0WT0wLHRoaXMuZmluaXNoWT0wLHRoaXMuc3Vycm91bmRpbmc9W119byhpLCJGRExheW91dE5vZGUiKSxpLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKTtmb3IodmFyIGEgaW4gbilpW2FdPW5bYV07aS5wcm90b3R5cGUuc2V0R3JpZENvb3JkaW5hdGVzPWZ1bmN0aW9uKHMsbCx1LGgpe3RoaXMuc3RhcnRYPXMsdGhpcy5maW5pc2hYPWwsdGhpcy5zdGFydFk9dSx0aGlzLmZpbmlzaFk9aH0sdC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihpLGEpe3RoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLGkhPT1udWxsJiZhIT09bnVsbCYmKHRoaXMuaGVpZ2h0PWEsdGhpcy53aWR0aD1pKX1vKG4sIkRpbWVuc2lvbkQiKSxuLnByb3RvdHlwZS5nZXRXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLndpZHRofSxuLnByb3RvdHlwZS5zZXRXaWR0aD1mdW5jdGlvbihpKXt0aGlzLndpZHRoPWl9LG4ucHJvdG90eXBlLmdldEhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhlaWdodH0sbi5wcm90b3R5cGUuc2V0SGVpZ2h0PWZ1bmN0aW9uKGkpe3RoaXMuaGVpZ2h0PWl9LHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTQpO2Z1bmN0aW9uIGkoKXt0aGlzLm1hcD17fSx0aGlzLmtleXM9W119byhpLCJIYXNoTWFwIiksaS5wcm90b3R5cGUucHV0PWZ1bmN0aW9uKGEscyl7dmFyIGw9bi5jcmVhdGVJRChhKTt0aGlzLmNvbnRhaW5zKGwpfHwodGhpcy5tYXBbbF09cyx0aGlzLmtleXMucHVzaChhKSl9LGkucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKGEpe3ZhciBzPW4uY3JlYXRlSUQoYSk7cmV0dXJuIHRoaXMubWFwW2FdIT1udWxsfSxpLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSl7dmFyIHM9bi5jcmVhdGVJRChhKTtyZXR1cm4gdGhpcy5tYXBbc119LGkucHJvdG90eXBlLmtleVNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmtleXN9LHQuZXhwb3J0cz1pfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTQpO2Z1bmN0aW9uIGkoKXt0aGlzLnNldD17fX1vKGksIkhhc2hTZXQiKSxpLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYSl7dmFyIHM9bi5jcmVhdGVJRChhKTt0aGlzLmNvbnRhaW5zKHMpfHwodGhpcy5zZXRbc109YSl9LGkucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihhKXtkZWxldGUgdGhpcy5zZXRbbi5jcmVhdGVJRChhKV19LGkucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5zZXQ9e319LGkucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnNldFtuLmNyZWF0ZUlEKGEpXT09YX0saS5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemUoKT09PTB9LGkucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5zZXQpLmxlbmd0aH0saS5wcm90b3R5cGUuYWRkQWxsVG89ZnVuY3Rpb24oYSl7Zm9yKHZhciBzPU9iamVjdC5rZXlzKHRoaXMuc2V0KSxsPXMubGVuZ3RoLHU9MDt1PGw7dSsrKWEucHVzaCh0aGlzLnNldFtzW3VdXSl9LGkucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5zZXQpLmxlbmd0aH0saS5wcm90b3R5cGUuYWRkQWxsPWZ1bmN0aW9uKGEpe2Zvcih2YXIgcz1hLmxlbmd0aCxsPTA7bDxzO2wrKyl7dmFyIHU9YVtsXTt0aGlzLmFkZCh1KX19LHQuZXhwb3J0cz1pfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbCh1LGgpe2Zvcih2YXIgZj0wO2Y8aC5sZW5ndGg7ZisrKXt2YXIgZD1oW2ZdO2QuZW51bWVyYWJsZT1kLmVudW1lcmFibGV8fCExLGQuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBkJiYoZC53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHUsZC5rZXksZCl9fXJldHVybiBvKGwsImRlZmluZVByb3BlcnRpZXMiKSxmdW5jdGlvbih1LGgsZil7cmV0dXJuIGgmJmwodS5wcm90b3R5cGUsaCksZiYmbCh1LGYpLHV9fSgpO2Z1bmN0aW9uIGkobCx1KXtpZighKGwgaW5zdGFuY2VvZiB1KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1vKGksIl9jbGFzc0NhbGxDaGVjayIpO3ZhciBhPXIoMTEpLHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBsKHUsaCl7aSh0aGlzLGwpLChoIT09bnVsbHx8aCE9PXZvaWQgMCkmJih0aGlzLmNvbXBhcmVGdW5jdGlvbj10aGlzLl9kZWZhdWx0Q29tcGFyZUZ1bmN0aW9uKTt2YXIgZj12b2lkIDA7dSBpbnN0YW5jZW9mIGE/Zj11LnNpemUoKTpmPXUubGVuZ3RoLHRoaXMuX3F1aWNrc29ydCh1LDAsZi0xKX1yZXR1cm4gbyhsLCJRdWlja3NvcnQiKSxuKGwsW3trZXk6Il9xdWlja3NvcnQiLHZhbHVlOm8oZnVuY3Rpb24oaCxmLGQpe2lmKGY8ZCl7dmFyIHA9dGhpcy5fcGFydGl0aW9uKGgsZixkKTt0aGlzLl9xdWlja3NvcnQoaCxmLHApLHRoaXMuX3F1aWNrc29ydChoLHArMSxkKX19LCJfcXVpY2tzb3J0Iil9LHtrZXk6Il9wYXJ0aXRpb24iLHZhbHVlOm8oZnVuY3Rpb24oaCxmLGQpe2Zvcih2YXIgcD10aGlzLl9nZXQoaCxmKSxtPWYsZz1kOzspe2Zvcig7dGhpcy5jb21wYXJlRnVuY3Rpb24ocCx0aGlzLl9nZXQoaCxnKSk7KWctLTtmb3IoO3RoaXMuY29tcGFyZUZ1bmN0aW9uKHRoaXMuX2dldChoLG0pLHApOyltKys7aWYobTxnKXRoaXMuX3N3YXAoaCxtLGcpLG0rKyxnLS07ZWxzZSByZXR1cm4gZ319LCJfcGFydGl0aW9uIil9LHtrZXk6Il9nZXQiLHZhbHVlOm8oZnVuY3Rpb24oaCxmKXtyZXR1cm4gaCBpbnN0YW5jZW9mIGE/aC5nZXRfb2JqZWN0X2F0KGYpOmhbZl19LCJfZ2V0Iil9LHtrZXk6Il9zZXQiLHZhbHVlOm8oZnVuY3Rpb24oaCxmLGQpe2ggaW5zdGFuY2VvZiBhP2guc2V0X29iamVjdF9hdChmLGQpOmhbZl09ZH0sIl9zZXQiKX0se2tleToiX3N3YXAiLHZhbHVlOm8oZnVuY3Rpb24oaCxmLGQpe3ZhciBwPXRoaXMuX2dldChoLGYpO3RoaXMuX3NldChoLGYsdGhpcy5fZ2V0KGgsZCkpLHRoaXMuX3NldChoLGQscCl9LCJfc3dhcCIpfSx7a2V5OiJfZGVmYXVsdENvbXBhcmVGdW5jdGlvbiIsdmFsdWU6byhmdW5jdGlvbihoLGYpe3JldHVybiBmPmh9LCJfZGVmYXVsdENvbXBhcmVGdW5jdGlvbiIpfV0pLGx9KCk7dC5leHBvcnRzPXN9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49ZnVuY3Rpb24oKXtmdW5jdGlvbiBzKGwsdSl7Zm9yKHZhciBoPTA7aDx1Lmxlbmd0aDtoKyspe3ZhciBmPXVbaF07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxmLmtleSxmKX19cmV0dXJuIG8ocywiZGVmaW5lUHJvcGVydGllcyIpLGZ1bmN0aW9uKGwsdSxoKXtyZXR1cm4gdSYmcyhsLnByb3RvdHlwZSx1KSxoJiZzKGwsaCksbH19KCk7ZnVuY3Rpb24gaShzLGwpe2lmKCEocyBpbnN0YW5jZW9mIGwpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfW8oaSwiX2NsYXNzQ2FsbENoZWNrIik7dmFyIGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBzKGwsdSl7dmFyIGg9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOjEsZj1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106LTEsZD1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06LTE7aSh0aGlzLHMpLHRoaXMuc2VxdWVuY2UxPWwsdGhpcy5zZXF1ZW5jZTI9dSx0aGlzLm1hdGNoX3Njb3JlPWgsdGhpcy5taXNtYXRjaF9wZW5hbHR5PWYsdGhpcy5nYXBfcGVuYWx0eT1kLHRoaXMuaU1heD1sLmxlbmd0aCsxLHRoaXMuak1heD11Lmxlbmd0aCsxLHRoaXMuZ3JpZD1uZXcgQXJyYXkodGhpcy5pTWF4KTtmb3IodmFyIHA9MDtwPHRoaXMuaU1heDtwKyspe3RoaXMuZ3JpZFtwXT1uZXcgQXJyYXkodGhpcy5qTWF4KTtmb3IodmFyIG09MDttPHRoaXMuak1heDttKyspdGhpcy5ncmlkW3BdW21dPTB9dGhpcy50cmFjZWJhY2tHcmlkPW5ldyBBcnJheSh0aGlzLmlNYXgpO2Zvcih2YXIgZz0wO2c8dGhpcy5pTWF4O2crKyl7dGhpcy50cmFjZWJhY2tHcmlkW2ddPW5ldyBBcnJheSh0aGlzLmpNYXgpO2Zvcih2YXIgeT0wO3k8dGhpcy5qTWF4O3krKyl0aGlzLnRyYWNlYmFja0dyaWRbZ11beV09W251bGwsbnVsbCxudWxsXX10aGlzLmFsaWdubWVudHM9W10sdGhpcy5zY29yZT0tMSx0aGlzLmNvbXB1dGVHcmlkcygpfXJldHVybiBvKHMsIk5lZWRsZW1hbld1bnNjaCIpLG4ocyxbe2tleToiZ2V0U2NvcmUiLHZhbHVlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zY29yZX0sImdldFNjb3JlIil9LHtrZXk6ImdldEFsaWdubWVudHMiLHZhbHVlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hbGlnbm1lbnRzfSwiZ2V0QWxpZ25tZW50cyIpfSx7a2V5OiJjb21wdXRlR3JpZHMiLHZhbHVlOm8oZnVuY3Rpb24oKXtmb3IodmFyIHU9MTt1PHRoaXMuak1heDt1KyspdGhpcy5ncmlkWzBdW3VdPXRoaXMuZ3JpZFswXVt1LTFdK3RoaXMuZ2FwX3BlbmFsdHksdGhpcy50cmFjZWJhY2tHcmlkWzBdW3VdPVshMSwhMSwhMF07Zm9yKHZhciBoPTE7aDx0aGlzLmlNYXg7aCsrKXRoaXMuZ3JpZFtoXVswXT10aGlzLmdyaWRbaC0xXVswXSt0aGlzLmdhcF9wZW5hbHR5LHRoaXMudHJhY2ViYWNrR3JpZFtoXVswXT1bITEsITAsITFdO2Zvcih2YXIgZj0xO2Y8dGhpcy5pTWF4O2YrKylmb3IodmFyIGQ9MTtkPHRoaXMuak1heDtkKyspe3ZhciBwPXZvaWQgMDt0aGlzLnNlcXVlbmNlMVtmLTFdPT09dGhpcy5zZXF1ZW5jZTJbZC0xXT9wPXRoaXMuZ3JpZFtmLTFdW2QtMV0rdGhpcy5tYXRjaF9zY29yZTpwPXRoaXMuZ3JpZFtmLTFdW2QtMV0rdGhpcy5taXNtYXRjaF9wZW5hbHR5O3ZhciBtPXRoaXMuZ3JpZFtmLTFdW2RdK3RoaXMuZ2FwX3BlbmFsdHksZz10aGlzLmdyaWRbZl1bZC0xXSt0aGlzLmdhcF9wZW5hbHR5LHk9W3AsbSxnXSx2PXRoaXMuYXJyYXlBbGxNYXhJbmRleGVzKHkpO3RoaXMuZ3JpZFtmXVtkXT15W3ZbMF1dLHRoaXMudHJhY2ViYWNrR3JpZFtmXVtkXT1bdi5pbmNsdWRlcygwKSx2LmluY2x1ZGVzKDEpLHYuaW5jbHVkZXMoMildfXRoaXMuc2NvcmU9dGhpcy5ncmlkW3RoaXMuaU1heC0xXVt0aGlzLmpNYXgtMV19LCJjb21wdXRlR3JpZHMiKX0se2tleToiYWxpZ25tZW50VHJhY2ViYWNrIix2YWx1ZTpvKGZ1bmN0aW9uKCl7dmFyIHU9W107Zm9yKHUucHVzaCh7cG9zOlt0aGlzLnNlcXVlbmNlMS5sZW5ndGgsdGhpcy5zZXF1ZW5jZTIubGVuZ3RoXSxzZXExOiIiLHNlcTI6IiJ9KTt1WzBdOyl7dmFyIGg9dVswXSxmPXRoaXMudHJhY2ViYWNrR3JpZFtoLnBvc1swXV1baC5wb3NbMV1dO2ZbMF0mJnUucHVzaCh7cG9zOltoLnBvc1swXS0xLGgucG9zWzFdLTFdLHNlcTE6dGhpcy5zZXF1ZW5jZTFbaC5wb3NbMF0tMV0raC5zZXExLHNlcTI6dGhpcy5zZXF1ZW5jZTJbaC5wb3NbMV0tMV0raC5zZXEyfSksZlsxXSYmdS5wdXNoKHtwb3M6W2gucG9zWzBdLTEsaC5wb3NbMV1dLHNlcTE6dGhpcy5zZXF1ZW5jZTFbaC5wb3NbMF0tMV0raC5zZXExLHNlcTI6Ii0iK2guc2VxMn0pLGZbMl0mJnUucHVzaCh7cG9zOltoLnBvc1swXSxoLnBvc1sxXS0xXSxzZXExOiItIitoLnNlcTEsc2VxMjp0aGlzLnNlcXVlbmNlMltoLnBvc1sxXS0xXStoLnNlcTJ9KSxoLnBvc1swXT09PTAmJmgucG9zWzFdPT09MCYmdGhpcy5hbGlnbm1lbnRzLnB1c2goe3NlcXVlbmNlMTpoLnNlcTEsc2VxdWVuY2UyOmguc2VxMn0pLHUuc2hpZnQoKX1yZXR1cm4gdGhpcy5hbGlnbm1lbnRzfSwiYWxpZ25tZW50VHJhY2ViYWNrIil9LHtrZXk6ImdldEFsbEluZGV4ZXMiLHZhbHVlOm8oZnVuY3Rpb24odSxoKXtmb3IodmFyIGY9W10sZD0tMTsoZD11LmluZGV4T2YoaCxkKzEpKSE9PS0xOylmLnB1c2goZCk7cmV0dXJuIGZ9LCJnZXRBbGxJbmRleGVzIil9LHtrZXk6ImFycmF5QWxsTWF4SW5kZXhlcyIsdmFsdWU6byhmdW5jdGlvbih1KXtyZXR1cm4gdGhpcy5nZXRBbGxJbmRleGVzKHUsTWF0aC5tYXguYXBwbHkobnVsbCx1KSl9LCJhcnJheUFsbE1heEluZGV4ZXMiKX1dKSxzfSgpO3QuZXhwb3J0cz1hfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPW8oZnVuY3Rpb24oKXt9LCJsYXlvdXRCYXNlIik7bi5GRExheW91dD1yKDE4KSxuLkZETGF5b3V0Q29uc3RhbnRzPXIoNyksbi5GRExheW91dEVkZ2U9cigxOSksbi5GRExheW91dE5vZGU9cigyMCksbi5EaW1lbnNpb25EPXIoMjEpLG4uSGFzaE1hcD1yKDIyKSxuLkhhc2hTZXQ9cigyMyksbi5JR2VvbWV0cnk9cig4KSxuLklNYXRoPXIoOSksbi5JbnRlZ2VyPXIoMTApLG4uUG9pbnQ9cigxMiksbi5Qb2ludEQ9cig0KSxuLlJhbmRvbVNlZWQ9cigxNiksbi5SZWN0YW5nbGVEPXIoMTMpLG4uVHJhbnNmb3JtPXIoMTcpLG4uVW5pcXVlSURHZW5lcmV0b3I9cigxNCksbi5RdWlja3NvcnQ9cigyNCksbi5MaW5rZWRMaXN0PXIoMTEpLG4uTEdyYXBoT2JqZWN0PXIoMiksbi5MR3JhcGg9cig1KSxuLkxFZGdlPXIoMSksbi5MR3JhcGhNYW5hZ2VyPXIoNiksbi5MTm9kZT1yKDMpLG4uTGF5b3V0PXIoMTUpLG4uTGF5b3V0Q29uc3RhbnRzPXIoMCksbi5OZWVkbGVtYW5XdW5zY2g9cigyNSksdC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe3RoaXMubGlzdGVuZXJzPVtdfW8obiwiRW1pdHRlciIpO3ZhciBpPW4ucHJvdG90eXBlO2kuYWRkTGlzdGVuZXI9ZnVuY3Rpb24oYSxzKXt0aGlzLmxpc3RlbmVycy5wdXNoKHtldmVudDphLGNhbGxiYWNrOnN9KX0saS5yZW1vdmVMaXN0ZW5lcj1mdW5jdGlvbihhLHMpe2Zvcih2YXIgbD10aGlzLmxpc3RlbmVycy5sZW5ndGg7bD49MDtsLS0pe3ZhciB1PXRoaXMubGlzdGVuZXJzW2xdO3UuZXZlbnQ9PT1hJiZ1LmNhbGxiYWNrPT09cyYmdGhpcy5saXN0ZW5lcnMuc3BsaWNlKGwsMSl9fSxpLmVtaXQ9ZnVuY3Rpb24oYSxzKXtmb3IodmFyIGw9MDtsPHRoaXMubGlzdGVuZXJzLmxlbmd0aDtsKyspe3ZhciB1PXRoaXMubGlzdGVuZXJzW2xdO2E9PT11LmV2ZW50JiZ1LmNhbGxiYWNrKHMpfX0sdC5leHBvcnRzPW59XSl9KX0pO3ZhciBoRj1QaSgodzQsdUYpPT57InVzZSBzdHJpY3QiO28oZnVuY3Rpb24oZSxyKXt0eXBlb2YgdzQ9PSJvYmplY3QiJiZ0eXBlb2YgdUY9PSJvYmplY3QiP3VGLmV4cG9ydHM9cihjRigpKTp0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kP2RlZmluZShbImxheW91dC1iYXNlIl0scik6dHlwZW9mIHc0PT0ib2JqZWN0Ij93NC5jb3NlQmFzZT1yKGNGKCkpOmUuY29zZUJhc2U9cihlLmxheW91dEJhc2UpfSwid2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iKSh3NCxmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHI9e307ZnVuY3Rpb24gbihpKXtpZihyW2ldKXJldHVybiByW2ldLmV4cG9ydHM7dmFyIGE9cltpXT17aSxsOiExLGV4cG9ydHM6e319O3JldHVybiBlW2ldLmNhbGwoYS5leHBvcnRzLGEsYS5leHBvcnRzLG4pLGEubD0hMCxhLmV4cG9ydHN9cmV0dXJuIG8obiwiX193ZWJwYWNrX3JlcXVpcmVfXyIpLG4ubT1lLG4uYz1yLG4uaT1mdW5jdGlvbihpKXtyZXR1cm4gaX0sbi5kPWZ1bmN0aW9uKGksYSxzKXtuLm8oaSxhKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KGksYSx7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsZ2V0OnN9KX0sbi5uPWZ1bmN0aW9uKGkpe3ZhciBhPWkmJmkuX19lc01vZHVsZT9vKGZ1bmN0aW9uKCl7cmV0dXJuIGkuZGVmYXVsdH0sImdldERlZmF1bHQiKTpvKGZ1bmN0aW9uKCl7cmV0dXJuIGl9LCJnZXRNb2R1bGVFeHBvcnRzIik7cmV0dXJuIG4uZChhLCJhIixhKSxhfSxuLm89ZnVuY3Rpb24oaSxhKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGksYSl9LG4ucD0iIixuKG4ucz03KX0oW2Z1bmN0aW9uKGUscil7ZS5leHBvcnRzPXR9LGZ1bmN0aW9uKGUscixuKXsidXNlIHN0cmljdCI7dmFyIGk9bigwKS5GRExheW91dENvbnN0YW50cztmdW5jdGlvbiBhKCl7fW8oYSwiQ29TRUNvbnN0YW50cyIpO2Zvcih2YXIgcyBpbiBpKWFbc109aVtzXTthLkRFRkFVTFRfVVNFX01VTFRJX0xFVkVMX1NDQUxJTkc9ITEsYS5ERUZBVUxUX1JBRElBTF9TRVBBUkFUSU9OPWkuREVGQVVMVF9FREdFX0xFTkdUSCxhLkRFRkFVTFRfQ09NUE9ORU5UX1NFUEVSQVRJT049NjAsYS5USUxFPSEwLGEuVElMSU5HX1BBRERJTkdfVkVSVElDQUw9MTAsYS5USUxJTkdfUEFERElOR19IT1JJWk9OVEFMPTEwLGEuVFJFRV9SRURVQ1RJT05fT05fSU5DUkVNRU5UQUw9ITEsZS5leHBvcnRzPWF9LGZ1bmN0aW9uKGUscixuKXsidXNlIHN0cmljdCI7dmFyIGk9bigwKS5GRExheW91dEVkZ2U7ZnVuY3Rpb24gYShsLHUsaCl7aS5jYWxsKHRoaXMsbCx1LGgpfW8oYSwiQ29TRUVkZ2UiKSxhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKTtmb3IodmFyIHMgaW4gaSlhW3NdPWlbc107ZS5leHBvcnRzPWF9LGZ1bmN0aW9uKGUscixuKXsidXNlIHN0cmljdCI7dmFyIGk9bigwKS5MR3JhcGg7ZnVuY3Rpb24gYShsLHUsaCl7aS5jYWxsKHRoaXMsbCx1LGgpfW8oYSwiQ29TRUdyYXBoIiksYS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSk7Zm9yKHZhciBzIGluIGkpYVtzXT1pW3NdO2UuZXhwb3J0cz1hfSxmdW5jdGlvbihlLHIsbil7InVzZSBzdHJpY3QiO3ZhciBpPW4oMCkuTEdyYXBoTWFuYWdlcjtmdW5jdGlvbiBhKGwpe2kuY2FsbCh0aGlzLGwpfW8oYSwiQ29TRUdyYXBoTWFuYWdlciIpLGEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaS5wcm90b3R5cGUpO2Zvcih2YXIgcyBpbiBpKWFbc109aVtzXTtlLmV4cG9ydHM9YX0sZnVuY3Rpb24oZSxyLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgaT1uKDApLkZETGF5b3V0Tm9kZSxhPW4oMCkuSU1hdGg7ZnVuY3Rpb24gcyh1LGgsZixkKXtpLmNhbGwodGhpcyx1LGgsZixkKX1vKHMsIkNvU0VOb2RlIikscy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSk7Zm9yKHZhciBsIGluIGkpc1tsXT1pW2xdO3MucHJvdG90eXBlLm1vdmU9ZnVuY3Rpb24oKXt2YXIgdT10aGlzLmdyYXBoTWFuYWdlci5nZXRMYXlvdXQoKTt0aGlzLmRpc3BsYWNlbWVudFg9dS5jb29saW5nRmFjdG9yKih0aGlzLnNwcmluZ0ZvcmNlWCt0aGlzLnJlcHVsc2lvbkZvcmNlWCt0aGlzLmdyYXZpdGF0aW9uRm9yY2VYKS90aGlzLm5vT2ZDaGlsZHJlbix0aGlzLmRpc3BsYWNlbWVudFk9dS5jb29saW5nRmFjdG9yKih0aGlzLnNwcmluZ0ZvcmNlWSt0aGlzLnJlcHVsc2lvbkZvcmNlWSt0aGlzLmdyYXZpdGF0aW9uRm9yY2VZKS90aGlzLm5vT2ZDaGlsZHJlbixNYXRoLmFicyh0aGlzLmRpc3BsYWNlbWVudFgpPnUuY29vbGluZ0ZhY3Rvcip1Lm1heE5vZGVEaXNwbGFjZW1lbnQmJih0aGlzLmRpc3BsYWNlbWVudFg9dS5jb29saW5nRmFjdG9yKnUubWF4Tm9kZURpc3BsYWNlbWVudCphLnNpZ24odGhpcy5kaXNwbGFjZW1lbnRYKSksTWF0aC5hYnModGhpcy5kaXNwbGFjZW1lbnRZKT51LmNvb2xpbmdGYWN0b3IqdS5tYXhOb2RlRGlzcGxhY2VtZW50JiYodGhpcy5kaXNwbGFjZW1lbnRZPXUuY29vbGluZ0ZhY3Rvcip1Lm1heE5vZGVEaXNwbGFjZW1lbnQqYS5zaWduKHRoaXMuZGlzcGxhY2VtZW50WSkpLHRoaXMuY2hpbGQ9PW51bGw/dGhpcy5tb3ZlQnkodGhpcy5kaXNwbGFjZW1lbnRYLHRoaXMuZGlzcGxhY2VtZW50WSk6dGhpcy5jaGlsZC5nZXROb2RlcygpLmxlbmd0aD09MD90aGlzLm1vdmVCeSh0aGlzLmRpc3BsYWNlbWVudFgsdGhpcy5kaXNwbGFjZW1lbnRZKTp0aGlzLnByb3BvZ2F0ZURpc3BsYWNlbWVudFRvQ2hpbGRyZW4odGhpcy5kaXNwbGFjZW1lbnRYLHRoaXMuZGlzcGxhY2VtZW50WSksdS50b3RhbERpc3BsYWNlbWVudCs9TWF0aC5hYnModGhpcy5kaXNwbGFjZW1lbnRYKStNYXRoLmFicyh0aGlzLmRpc3BsYWNlbWVudFkpLHRoaXMuc3ByaW5nRm9yY2VYPTAsdGhpcy5zcHJpbmdGb3JjZVk9MCx0aGlzLnJlcHVsc2lvbkZvcmNlWD0wLHRoaXMucmVwdWxzaW9uRm9yY2VZPTAsdGhpcy5ncmF2aXRhdGlvbkZvcmNlWD0wLHRoaXMuZ3Jhdml0YXRpb25Gb3JjZVk9MCx0aGlzLmRpc3BsYWNlbWVudFg9MCx0aGlzLmRpc3BsYWNlbWVudFk9MH0scy5wcm90b3R5cGUucHJvcG9nYXRlRGlzcGxhY2VtZW50VG9DaGlsZHJlbj1mdW5jdGlvbih1LGgpe2Zvcih2YXIgZj10aGlzLmdldENoaWxkKCkuZ2V0Tm9kZXMoKSxkLHA9MDtwPGYubGVuZ3RoO3ArKylkPWZbcF0sZC5nZXRDaGlsZCgpPT1udWxsPyhkLm1vdmVCeSh1LGgpLGQuZGlzcGxhY2VtZW50WCs9dSxkLmRpc3BsYWNlbWVudFkrPWgpOmQucHJvcG9nYXRlRGlzcGxhY2VtZW50VG9DaGlsZHJlbih1LGgpfSxzLnByb3RvdHlwZS5zZXRQcmVkMT1mdW5jdGlvbih1KXt0aGlzLnByZWQxPXV9LHMucHJvdG90eXBlLmdldFByZWQxPWZ1bmN0aW9uKCl7cmV0dXJuIHByZWQxfSxzLnByb3RvdHlwZS5nZXRQcmVkMj1mdW5jdGlvbigpe3JldHVybiBwcmVkMn0scy5wcm90b3R5cGUuc2V0TmV4dD1mdW5jdGlvbih1KXt0aGlzLm5leHQ9dX0scy5wcm90b3R5cGUuZ2V0TmV4dD1mdW5jdGlvbigpe3JldHVybiBuZXh0fSxzLnByb3RvdHlwZS5zZXRQcm9jZXNzZWQ9ZnVuY3Rpb24odSl7dGhpcy5wcm9jZXNzZWQ9dX0scy5wcm90b3R5cGUuaXNQcm9jZXNzZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gcHJvY2Vzc2VkfSxlLmV4cG9ydHM9c30sZnVuY3Rpb24oZSxyLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgaT1uKDApLkZETGF5b3V0LGE9big0KSxzPW4oMyksbD1uKDUpLHU9bigyKSxoPW4oMSksZj1uKDApLkZETGF5b3V0Q29uc3RhbnRzLGQ9bigwKS5MYXlvdXRDb25zdGFudHMscD1uKDApLlBvaW50LG09bigwKS5Qb2ludEQsZz1uKDApLkxheW91dCx5PW4oMCkuSW50ZWdlcix2PW4oMCkuSUdlb21ldHJ5LHg9bigwKS5MR3JhcGgsYj1uKDApLlRyYW5zZm9ybTtmdW5jdGlvbiBUKCl7aS5jYWxsKHRoaXMpLHRoaXMudG9CZVRpbGVkPXt9fW8oVCwiQ29TRUxheW91dCIpLFQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaS5wcm90b3R5cGUpO2Zvcih2YXIgUyBpbiBpKVRbU109aVtTXTtULnByb3RvdHlwZS5uZXdHcmFwaE1hbmFnZXI9ZnVuY3Rpb24oKXt2YXIgdz1uZXcgYSh0aGlzKTtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXI9dyx3fSxULnByb3RvdHlwZS5uZXdHcmFwaD1mdW5jdGlvbih3KXtyZXR1cm4gbmV3IHMobnVsbCx0aGlzLmdyYXBoTWFuYWdlcix3KX0sVC5wcm90b3R5cGUubmV3Tm9kZT1mdW5jdGlvbih3KXtyZXR1cm4gbmV3IGwodGhpcy5ncmFwaE1hbmFnZXIsdyl9LFQucHJvdG90eXBlLm5ld0VkZ2U9ZnVuY3Rpb24odyl7cmV0dXJuIG5ldyB1KG51bGwsbnVsbCx3KX0sVC5wcm90b3R5cGUuaW5pdFBhcmFtZXRlcnM9ZnVuY3Rpb24oKXtpLnByb3RvdHlwZS5pbml0UGFyYW1ldGVycy5jYWxsKHRoaXMsYXJndW1lbnRzKSx0aGlzLmlzU3ViTGF5b3V0fHwoaC5ERUZBVUxUX0VER0VfTEVOR1RIPDEwP3RoaXMuaWRlYWxFZGdlTGVuZ3RoPTEwOnRoaXMuaWRlYWxFZGdlTGVuZ3RoPWguREVGQVVMVF9FREdFX0xFTkdUSCx0aGlzLnVzZVNtYXJ0SWRlYWxFZGdlTGVuZ3RoQ2FsY3VsYXRpb249aC5ERUZBVUxUX1VTRV9TTUFSVF9JREVBTF9FREdFX0xFTkdUSF9DQUxDVUxBVElPTix0aGlzLnNwcmluZ0NvbnN0YW50PWYuREVGQVVMVF9TUFJJTkdfU1RSRU5HVEgsdGhpcy5yZXB1bHNpb25Db25zdGFudD1mLkRFRkFVTFRfUkVQVUxTSU9OX1NUUkVOR1RILHRoaXMuZ3Jhdml0eUNvbnN0YW50PWYuREVGQVVMVF9HUkFWSVRZX1NUUkVOR1RILHRoaXMuY29tcG91bmRHcmF2aXR5Q29uc3RhbnQ9Zi5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfU1RSRU5HVEgsdGhpcy5ncmF2aXR5UmFuZ2VGYWN0b3I9Zi5ERUZBVUxUX0dSQVZJVFlfUkFOR0VfRkFDVE9SLHRoaXMuY29tcG91bmRHcmF2aXR5UmFuZ2VGYWN0b3I9Zi5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfUkFOR0VfRkFDVE9SLHRoaXMucHJ1bmVkTm9kZXNBbGw9W10sdGhpcy5ncm93VHJlZUl0ZXJhdGlvbnM9MCx0aGlzLmFmdGVyR3Jvd3RoSXRlcmF0aW9ucz0wLHRoaXMuaXNUcmVlR3Jvd2luZz0hMSx0aGlzLmlzR3Jvd3RoRmluaXNoZWQ9ITEsdGhpcy5jb29saW5nQ3ljbGU9MCx0aGlzLm1heENvb2xpbmdDeWNsZT10aGlzLm1heEl0ZXJhdGlvbnMvZi5DT05WRVJHRU5DRV9DSEVDS19QRVJJT0QsdGhpcy5maW5hbFRlbXBlcmF0dXJlPWYuQ09OVkVSR0VOQ0VfQ0hFQ0tfUEVSSU9EL3RoaXMubWF4SXRlcmF0aW9ucyx0aGlzLmNvb2xpbmdBZGp1c3Rlcj0xKX0sVC5wcm90b3R5cGUubGF5b3V0PWZ1bmN0aW9uKCl7dmFyIHc9ZC5ERUZBVUxUX0NSRUFURV9CRU5EU19BU19ORUVERUQ7cmV0dXJuIHcmJih0aGlzLmNyZWF0ZUJlbmRwb2ludHMoKSx0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbEVkZ2VzKCkpLHRoaXMubGV2ZWw9MCx0aGlzLmNsYXNzaWNMYXlvdXQoKX0sVC5wcm90b3R5cGUuY2xhc3NpY0xheW91dD1mdW5jdGlvbigpe2lmKHRoaXMubm9kZXNXaXRoR3Jhdml0eT10aGlzLmNhbGN1bGF0ZU5vZGVzVG9BcHBseUdyYXZpdGF0aW9uVG8oKSx0aGlzLmdyYXBoTWFuYWdlci5zZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbih0aGlzLm5vZGVzV2l0aEdyYXZpdHkpLHRoaXMuY2FsY05vT2ZDaGlsZHJlbkZvckFsbE5vZGVzKCksdGhpcy5ncmFwaE1hbmFnZXIuY2FsY0xvd2VzdENvbW1vbkFuY2VzdG9ycygpLHRoaXMuZ3JhcGhNYW5hZ2VyLmNhbGNJbmNsdXNpb25UcmVlRGVwdGhzKCksdGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmNhbGNFc3RpbWF0ZWRTaXplKCksdGhpcy5jYWxjSWRlYWxFZGdlTGVuZ3RocygpLHRoaXMuaW5jcmVtZW50YWwpe2lmKGguVFJFRV9SRURVQ1RJT05fT05fSU5DUkVNRU5UQUwpe3RoaXMucmVkdWNlVHJlZXMoKSx0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKCk7dmFyIEU9bmV3IFNldCh0aGlzLmdldEFsbE5vZGVzKCkpLF89dGhpcy5ub2Rlc1dpdGhHcmF2aXR5LmZpbHRlcihmdW5jdGlvbihPKXtyZXR1cm4gRS5oYXMoTyl9KTt0aGlzLmdyYXBoTWFuYWdlci5zZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbihfKX19ZWxzZXt2YXIgdz10aGlzLmdldEZsYXRGb3Jlc3QoKTtpZih3Lmxlbmd0aD4wKXRoaXMucG9zaXRpb25Ob2Rlc1JhZGlhbGx5KHcpO2Vsc2V7dGhpcy5yZWR1Y2VUcmVlcygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oKTt2YXIgRT1uZXcgU2V0KHRoaXMuZ2V0QWxsTm9kZXMoKSksXz10aGlzLm5vZGVzV2l0aEdyYXZpdHkuZmlsdGVyKGZ1bmN0aW9uKEMpe3JldHVybiBFLmhhcyhDKX0pO3RoaXMuZ3JhcGhNYW5hZ2VyLnNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKF8pLHRoaXMucG9zaXRpb25Ob2Rlc1JhbmRvbWx5KCl9fXJldHVybiB0aGlzLmluaXRTcHJpbmdFbWJlZGRlcigpLHRoaXMucnVuU3ByaW5nRW1iZWRkZXIoKSwhMH0sVC5wcm90b3R5cGUudGljaz1mdW5jdGlvbigpe2lmKHRoaXMudG90YWxJdGVyYXRpb25zKyssdGhpcy50b3RhbEl0ZXJhdGlvbnM9PT10aGlzLm1heEl0ZXJhdGlvbnMmJiF0aGlzLmlzVHJlZUdyb3dpbmcmJiF0aGlzLmlzR3Jvd3RoRmluaXNoZWQpaWYodGhpcy5wcnVuZWROb2Rlc0FsbC5sZW5ndGg+MCl0aGlzLmlzVHJlZUdyb3dpbmc9ITA7ZWxzZSByZXR1cm4hMDtpZih0aGlzLnRvdGFsSXRlcmF0aW9ucyVmLkNPTlZFUkdFTkNFX0NIRUNLX1BFUklPRD09MCYmIXRoaXMuaXNUcmVlR3Jvd2luZyYmIXRoaXMuaXNHcm93dGhGaW5pc2hlZCl7aWYodGhpcy5pc0NvbnZlcmdlZCgpKWlmKHRoaXMucHJ1bmVkTm9kZXNBbGwubGVuZ3RoPjApdGhpcy5pc1RyZWVHcm93aW5nPSEwO2Vsc2UgcmV0dXJuITA7dGhpcy5jb29saW5nQ3ljbGUrKyx0aGlzLmxheW91dFF1YWxpdHk9PTA/dGhpcy5jb29saW5nQWRqdXN0ZXI9dGhpcy5jb29saW5nQ3ljbGU6dGhpcy5sYXlvdXRRdWFsaXR5PT0xJiYodGhpcy5jb29saW5nQWRqdXN0ZXI9dGhpcy5jb29saW5nQ3ljbGUvMyksdGhpcy5jb29saW5nRmFjdG9yPU1hdGgubWF4KHRoaXMuaW5pdGlhbENvb2xpbmdGYWN0b3ItTWF0aC5wb3codGhpcy5jb29saW5nQ3ljbGUsTWF0aC5sb2coMTAwKih0aGlzLmluaXRpYWxDb29saW5nRmFjdG9yLXRoaXMuZmluYWxUZW1wZXJhdHVyZSkpL01hdGgubG9nKHRoaXMubWF4Q29vbGluZ0N5Y2xlKSkvMTAwKnRoaXMuY29vbGluZ0FkanVzdGVyLHRoaXMuZmluYWxUZW1wZXJhdHVyZSksdGhpcy5hbmltYXRpb25QZXJpb2Q9TWF0aC5jZWlsKHRoaXMuaW5pdGlhbEFuaW1hdGlvblBlcmlvZCpNYXRoLnNxcnQodGhpcy5jb29saW5nRmFjdG9yKSl9aWYodGhpcy5pc1RyZWVHcm93aW5nKXtpZih0aGlzLmdyb3dUcmVlSXRlcmF0aW9ucyUxMD09MClpZih0aGlzLnBydW5lZE5vZGVzQWxsLmxlbmd0aD4wKXt0aGlzLmdyYXBoTWFuYWdlci51cGRhdGVCb3VuZHMoKSx0aGlzLnVwZGF0ZUdyaWQoKSx0aGlzLmdyb3dUcmVlKHRoaXMucHJ1bmVkTm9kZXNBbGwpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oKTt2YXIgdz1uZXcgU2V0KHRoaXMuZ2V0QWxsTm9kZXMoKSksRT10aGlzLm5vZGVzV2l0aEdyYXZpdHkuZmlsdGVyKGZ1bmN0aW9uKEQpe3JldHVybiB3LmhhcyhEKX0pO3RoaXMuZ3JhcGhNYW5hZ2VyLnNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKEUpLHRoaXMuZ3JhcGhNYW5hZ2VyLnVwZGF0ZUJvdW5kcygpLHRoaXMudXBkYXRlR3JpZCgpLHRoaXMuY29vbGluZ0ZhY3Rvcj1mLkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUx9ZWxzZSB0aGlzLmlzVHJlZUdyb3dpbmc9ITEsdGhpcy5pc0dyb3d0aEZpbmlzaGVkPSEwO3RoaXMuZ3Jvd1RyZWVJdGVyYXRpb25zKyt9aWYodGhpcy5pc0dyb3d0aEZpbmlzaGVkKXtpZih0aGlzLmlzQ29udmVyZ2VkKCkpcmV0dXJuITA7dGhpcy5hZnRlckdyb3d0aEl0ZXJhdGlvbnMlMTA9PTAmJih0aGlzLmdyYXBoTWFuYWdlci51cGRhdGVCb3VuZHMoKSx0aGlzLnVwZGF0ZUdyaWQoKSksdGhpcy5jb29saW5nRmFjdG9yPWYuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTCooKDEwMC10aGlzLmFmdGVyR3Jvd3RoSXRlcmF0aW9ucykvMTAwKSx0aGlzLmFmdGVyR3Jvd3RoSXRlcmF0aW9ucysrfXZhciBfPSF0aGlzLmlzVHJlZUdyb3dpbmcmJiF0aGlzLmlzR3Jvd3RoRmluaXNoZWQsQz10aGlzLmdyb3dUcmVlSXRlcmF0aW9ucyUxMD09MSYmdGhpcy5pc1RyZWVHcm93aW5nfHx0aGlzLmFmdGVyR3Jvd3RoSXRlcmF0aW9ucyUxMD09MSYmdGhpcy5pc0dyb3d0aEZpbmlzaGVkO3JldHVybiB0aGlzLnRvdGFsRGlzcGxhY2VtZW50PTAsdGhpcy5ncmFwaE1hbmFnZXIudXBkYXRlQm91bmRzKCksdGhpcy5jYWxjU3ByaW5nRm9yY2VzKCksdGhpcy5jYWxjUmVwdWxzaW9uRm9yY2VzKF8sQyksdGhpcy5jYWxjR3Jhdml0YXRpb25hbEZvcmNlcygpLHRoaXMubW92ZU5vZGVzKCksdGhpcy5hbmltYXRlKCksITF9LFQucHJvdG90eXBlLmdldFBvc2l0aW9uc0RhdGE9ZnVuY3Rpb24oKXtmb3IodmFyIHc9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsTm9kZXMoKSxFPXt9LF89MDtfPHcubGVuZ3RoO18rKyl7dmFyIEM9d1tfXS5yZWN0LEQ9d1tfXS5pZDtFW0RdPXtpZDpELHg6Qy5nZXRDZW50ZXJYKCkseTpDLmdldENlbnRlclkoKSx3OkMud2lkdGgsaDpDLmhlaWdodH19cmV0dXJuIEV9LFQucHJvdG90eXBlLnJ1blNwcmluZ0VtYmVkZGVyPWZ1bmN0aW9uKCl7dGhpcy5pbml0aWFsQW5pbWF0aW9uUGVyaW9kPTI1LHRoaXMuYW5pbWF0aW9uUGVyaW9kPXRoaXMuaW5pdGlhbEFuaW1hdGlvblBlcmlvZDt2YXIgdz0hMTtpZihmLkFOSU1BVEU9PT0iZHVyaW5nIil0aGlzLmVtaXQoImxheW91dHN0YXJ0ZWQiKTtlbHNle2Zvcig7IXc7KXc9dGhpcy50aWNrKCk7dGhpcy5ncmFwaE1hbmFnZXIudXBkYXRlQm91bmRzKCl9fSxULnByb3RvdHlwZS5jYWxjdWxhdGVOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvblRvPWZ1bmN0aW9uKCl7dmFyIHc9W10sRSxfPXRoaXMuZ3JhcGhNYW5hZ2VyLmdldEdyYXBocygpLEM9Xy5sZW5ndGgsRDtmb3IoRD0wO0Q8QztEKyspRT1fW0RdLEUudXBkYXRlQ29ubmVjdGVkKCksRS5pc0Nvbm5lY3RlZHx8KHc9dy5jb25jYXQoRS5nZXROb2RlcygpKSk7cmV0dXJuIHd9LFQucHJvdG90eXBlLmNyZWF0ZUJlbmRwb2ludHM9ZnVuY3Rpb24oKXt2YXIgdz1bXTt3PXcuY29uY2F0KHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbEVkZ2VzKCkpO3ZhciBFPW5ldyBTZXQsXztmb3IoXz0wO188dy5sZW5ndGg7XysrKXt2YXIgQz13W19dO2lmKCFFLmhhcyhDKSl7dmFyIEQ9Qy5nZXRTb3VyY2UoKSxPPUMuZ2V0VGFyZ2V0KCk7aWYoRD09TylDLmdldEJlbmRwb2ludHMoKS5wdXNoKG5ldyBtKSxDLmdldEJlbmRwb2ludHMoKS5wdXNoKG5ldyBtKSx0aGlzLmNyZWF0ZUR1bW15Tm9kZXNGb3JCZW5kcG9pbnRzKEMpLEUuYWRkKEMpO2Vsc2V7dmFyIFI9W107aWYoUj1SLmNvbmNhdChELmdldEVkZ2VMaXN0VG9Ob2RlKE8pKSxSPVIuY29uY2F0KE8uZ2V0RWRnZUxpc3RUb05vZGUoRCkpLCFFLmhhcyhSWzBdKSl7aWYoUi5sZW5ndGg+MSl7dmFyIGs7Zm9yKGs9MDtrPFIubGVuZ3RoO2srKyl7dmFyIEw9UltrXTtMLmdldEJlbmRwb2ludHMoKS5wdXNoKG5ldyBtKSx0aGlzLmNyZWF0ZUR1bW15Tm9kZXNGb3JCZW5kcG9pbnRzKEwpfX1SLmZvckVhY2goZnVuY3Rpb24oQSl7RS5hZGQoQSl9KX19fWlmKEUuc2l6ZT09dy5sZW5ndGgpYnJlYWt9fSxULnByb3RvdHlwZS5wb3NpdGlvbk5vZGVzUmFkaWFsbHk9ZnVuY3Rpb24odyl7Zm9yKHZhciBFPW5ldyBwKDAsMCksXz1NYXRoLmNlaWwoTWF0aC5zcXJ0KHcubGVuZ3RoKSksQz0wLEQ9MCxPPTAsUj1uZXcgbSgwLDApLGs9MDtrPHcubGVuZ3RoO2srKyl7ayVfPT0wJiYoTz0wLEQ9QyxrIT0wJiYoRCs9aC5ERUZBVUxUX0NPTVBPTkVOVF9TRVBFUkFUSU9OKSxDPTApO3ZhciBMPXdba10sQT1nLmZpbmRDZW50ZXJPZlRyZWUoTCk7RS54PU8sRS55PUQsUj1ULnJhZGlhbExheW91dChMLEEsRSksUi55PkMmJihDPU1hdGguZmxvb3IoUi55KSksTz1NYXRoLmZsb29yKFIueCtoLkRFRkFVTFRfQ09NUE9ORU5UX1NFUEVSQVRJT04pfXRoaXMudHJhbnNmb3JtKG5ldyBtKGQuV09STERfQ0VOVEVSX1gtUi54LzIsZC5XT1JMRF9DRU5URVJfWS1SLnkvMikpfSxULnJhZGlhbExheW91dD1mdW5jdGlvbih3LEUsXyl7dmFyIEM9TWF0aC5tYXgodGhpcy5tYXhEaWFnb25hbEluVHJlZSh3KSxoLkRFRkFVTFRfUkFESUFMX1NFUEFSQVRJT04pO1QuYnJhbmNoUmFkaWFsTGF5b3V0KEUsbnVsbCwwLDM1OSwwLEMpO3ZhciBEPXguY2FsY3VsYXRlQm91bmRzKHcpLE89bmV3IGI7Ty5zZXREZXZpY2VPcmdYKEQuZ2V0TWluWCgpKSxPLnNldERldmljZU9yZ1koRC5nZXRNaW5ZKCkpLE8uc2V0V29ybGRPcmdYKF8ueCksTy5zZXRXb3JsZE9yZ1koXy55KTtmb3IodmFyIFI9MDtSPHcubGVuZ3RoO1IrKyl7dmFyIGs9d1tSXTtrLnRyYW5zZm9ybShPKX12YXIgTD1uZXcgbShELmdldE1heFgoKSxELmdldE1heFkoKSk7cmV0dXJuIE8uaW52ZXJzZVRyYW5zZm9ybVBvaW50KEwpfSxULmJyYW5jaFJhZGlhbExheW91dD1mdW5jdGlvbih3LEUsXyxDLEQsTyl7dmFyIFI9KEMtXysxKS8yO1I8MCYmKFIrPTE4MCk7dmFyIGs9KFIrXyklMzYwLEw9ayp2LlRXT19QSS8zNjAsQT1NYXRoLmNvcyhMKSxJPUQqTWF0aC5jb3MoTCksTT1EKk1hdGguc2luKEwpO3cuc2V0Q2VudGVyKEksTSk7dmFyIFA9W107UD1QLmNvbmNhdCh3LmdldEVkZ2VzKCkpO3ZhciBCPVAubGVuZ3RoO0UhPW51bGwmJkItLTtmb3IodmFyIEY9MCx6PVAubGVuZ3RoLCQsVT13LmdldEVkZ2VzQmV0d2VlbihFKTtVLmxlbmd0aD4xOyl7dmFyIEs9VVswXTtVLnNwbGljZSgwLDEpO3ZhciBlZT1QLmluZGV4T2YoSyk7ZWU+PTAmJlAuc3BsaWNlKGVlLDEpLHotLSxCLS19RSE9bnVsbD8kPShQLmluZGV4T2YoVVswXSkrMSklejokPTA7Zm9yKHZhciBZPU1hdGguYWJzKEMtXykvQixjZT0kO0YhPUI7Y2U9KytjZSV6KXt2YXIgWj1QW2NlXS5nZXRPdGhlckVuZCh3KTtpZihaIT1FKXt2YXIgdWU9KF8rRipZKSUzNjAsUT0odWUrWSklMzYwO1QuYnJhbmNoUmFkaWFsTGF5b3V0KFosdyx1ZSxRLEQrTyxPKSxGKyt9fX0sVC5tYXhEaWFnb25hbEluVHJlZT1mdW5jdGlvbih3KXtmb3IodmFyIEU9eS5NSU5fVkFMVUUsXz0wO188dy5sZW5ndGg7XysrKXt2YXIgQz13W19dLEQ9Qy5nZXREaWFnb25hbCgpO0Q+RSYmKEU9RCl9cmV0dXJuIEV9LFQucHJvdG90eXBlLmNhbGNSZXB1bHNpb25SYW5nZT1mdW5jdGlvbigpe3JldHVybiAyKih0aGlzLmxldmVsKzEpKnRoaXMuaWRlYWxFZGdlTGVuZ3RofSxULnByb3RvdHlwZS5ncm91cFplcm9EZWdyZWVNZW1iZXJzPWZ1bmN0aW9uKCl7dmFyIHc9dGhpcyxFPXt9O3RoaXMubWVtYmVyR3JvdXBzPXt9LHRoaXMuaWRUb0R1bW15Tm9kZT17fTtmb3IodmFyIF89W10sQz10aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxOb2RlcygpLEQ9MDtEPEMubGVuZ3RoO0QrKyl7dmFyIE89Q1tEXSxSPU8uZ2V0UGFyZW50KCk7dGhpcy5nZXROb2RlRGVncmVlV2l0aENoaWxkcmVuKE8pPT09MCYmKFIuaWQ9PW51bGx8fCF0aGlzLmdldFRvQmVUaWxlZChSKSkmJl8ucHVzaChPKX1mb3IodmFyIEQ9MDtEPF8ubGVuZ3RoO0QrKyl7dmFyIE89X1tEXSxrPU8uZ2V0UGFyZW50KCkuaWQ7dHlwZW9mIEVba10+InUiJiYoRVtrXT1bXSksRVtrXT1FW2tdLmNvbmNhdChPKX1PYmplY3Qua2V5cyhFKS5mb3JFYWNoKGZ1bmN0aW9uKEwpe2lmKEVbTF0ubGVuZ3RoPjEpe3ZhciBBPSJEdW1teUNvbXBvdW5kXyIrTDt3Lm1lbWJlckdyb3Vwc1tBXT1FW0xdO3ZhciBJPUVbTF1bMF0uZ2V0UGFyZW50KCksTT1uZXcgbCh3LmdyYXBoTWFuYWdlcik7TS5pZD1BLE0ucGFkZGluZ0xlZnQ9SS5wYWRkaW5nTGVmdHx8MCxNLnBhZGRpbmdSaWdodD1JLnBhZGRpbmdSaWdodHx8MCxNLnBhZGRpbmdCb3R0b209SS5wYWRkaW5nQm90dG9tfHwwLE0ucGFkZGluZ1RvcD1JLnBhZGRpbmdUb3B8fDAsdy5pZFRvRHVtbXlOb2RlW0FdPU07dmFyIFA9dy5nZXRHcmFwaE1hbmFnZXIoKS5hZGQody5uZXdHcmFwaCgpLE0pLEI9SS5nZXRDaGlsZCgpO0IuYWRkKE0pO2Zvcih2YXIgRj0wO0Y8RVtMXS5sZW5ndGg7RisrKXt2YXIgej1FW0xdW0ZdO0IucmVtb3ZlKHopLFAuYWRkKHopfX19KX0sVC5wcm90b3R5cGUuY2xlYXJDb21wb3VuZHM9ZnVuY3Rpb24oKXt2YXIgdz17fSxFPXt9O3RoaXMucGVyZm9ybURGU09uQ29tcG91bmRzKCk7Zm9yKHZhciBfPTA7Xzx0aGlzLmNvbXBvdW5kT3JkZXIubGVuZ3RoO18rKylFW3RoaXMuY29tcG91bmRPcmRlcltfXS5pZF09dGhpcy5jb21wb3VuZE9yZGVyW19dLHdbdGhpcy5jb21wb3VuZE9yZGVyW19dLmlkXT1bXS5jb25jYXQodGhpcy5jb21wb3VuZE9yZGVyW19dLmdldENoaWxkKCkuZ2V0Tm9kZXMoKSksdGhpcy5ncmFwaE1hbmFnZXIucmVtb3ZlKHRoaXMuY29tcG91bmRPcmRlcltfXS5nZXRDaGlsZCgpKSx0aGlzLmNvbXBvdW5kT3JkZXJbX10uY2hpbGQ9bnVsbDt0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzKCksdGhpcy50aWxlQ29tcG91bmRNZW1iZXJzKHcsRSl9LFQucHJvdG90eXBlLmNsZWFyWmVyb0RlZ3JlZU1lbWJlcnM9ZnVuY3Rpb24oKXt2YXIgdz10aGlzLEU9dGhpcy50aWxlZFplcm9EZWdyZWVQYWNrPVtdO09iamVjdC5rZXlzKHRoaXMubWVtYmVyR3JvdXBzKS5mb3JFYWNoKGZ1bmN0aW9uKF8pe3ZhciBDPXcuaWRUb0R1bW15Tm9kZVtfXTtFW19dPXcudGlsZU5vZGVzKHcubWVtYmVyR3JvdXBzW19dLEMucGFkZGluZ0xlZnQrQy5wYWRkaW5nUmlnaHQpLEMucmVjdC53aWR0aD1FW19dLndpZHRoLEMucmVjdC5oZWlnaHQ9RVtfXS5oZWlnaHR9KX0sVC5wcm90b3R5cGUucmVwb3B1bGF0ZUNvbXBvdW5kcz1mdW5jdGlvbigpe2Zvcih2YXIgdz10aGlzLmNvbXBvdW5kT3JkZXIubGVuZ3RoLTE7dz49MDt3LS0pe3ZhciBFPXRoaXMuY29tcG91bmRPcmRlclt3XSxfPUUuaWQsQz1FLnBhZGRpbmdMZWZ0LEQ9RS5wYWRkaW5nVG9wO3RoaXMuYWRqdXN0TG9jYXRpb25zKHRoaXMudGlsZWRNZW1iZXJQYWNrW19dLEUucmVjdC54LEUucmVjdC55LEMsRCl9fSxULnByb3RvdHlwZS5yZXBvcHVsYXRlWmVyb0RlZ3JlZU1lbWJlcnM9ZnVuY3Rpb24oKXt2YXIgdz10aGlzLEU9dGhpcy50aWxlZFplcm9EZWdyZWVQYWNrO09iamVjdC5rZXlzKEUpLmZvckVhY2goZnVuY3Rpb24oXyl7dmFyIEM9dy5pZFRvRHVtbXlOb2RlW19dLEQ9Qy5wYWRkaW5nTGVmdCxPPUMucGFkZGluZ1RvcDt3LmFkanVzdExvY2F0aW9ucyhFW19dLEMucmVjdC54LEMucmVjdC55LEQsTyl9KX0sVC5wcm90b3R5cGUuZ2V0VG9CZVRpbGVkPWZ1bmN0aW9uKHcpe3ZhciBFPXcuaWQ7aWYodGhpcy50b0JlVGlsZWRbRV0hPW51bGwpcmV0dXJuIHRoaXMudG9CZVRpbGVkW0VdO3ZhciBfPXcuZ2V0Q2hpbGQoKTtpZihfPT1udWxsKXJldHVybiB0aGlzLnRvQmVUaWxlZFtFXT0hMSwhMTtmb3IodmFyIEM9Xy5nZXROb2RlcygpLEQ9MDtEPEMubGVuZ3RoO0QrKyl7dmFyIE89Q1tEXTtpZih0aGlzLmdldE5vZGVEZWdyZWUoTyk+MClyZXR1cm4gdGhpcy50b0JlVGlsZWRbRV09ITEsITE7aWYoTy5nZXRDaGlsZCgpPT1udWxsKXt0aGlzLnRvQmVUaWxlZFtPLmlkXT0hMTtjb250aW51ZX1pZighdGhpcy5nZXRUb0JlVGlsZWQoTykpcmV0dXJuIHRoaXMudG9CZVRpbGVkW0VdPSExLCExfXJldHVybiB0aGlzLnRvQmVUaWxlZFtFXT0hMCwhMH0sVC5wcm90b3R5cGUuZ2V0Tm9kZURlZ3JlZT1mdW5jdGlvbih3KXtmb3IodmFyIEU9dy5pZCxfPXcuZ2V0RWRnZXMoKSxDPTAsRD0wO0Q8Xy5sZW5ndGg7RCsrKXt2YXIgTz1fW0RdO08uZ2V0U291cmNlKCkuaWQhPT1PLmdldFRhcmdldCgpLmlkJiYoQz1DKzEpfXJldHVybiBDfSxULnByb3RvdHlwZS5nZXROb2RlRGVncmVlV2l0aENoaWxkcmVuPWZ1bmN0aW9uKHcpe3ZhciBFPXRoaXMuZ2V0Tm9kZURlZ3JlZSh3KTtpZih3LmdldENoaWxkKCk9PW51bGwpcmV0dXJuIEU7Zm9yKHZhciBfPXcuZ2V0Q2hpbGQoKS5nZXROb2RlcygpLEM9MDtDPF8ubGVuZ3RoO0MrKyl7dmFyIEQ9X1tDXTtFKz10aGlzLmdldE5vZGVEZWdyZWVXaXRoQ2hpbGRyZW4oRCl9cmV0dXJuIEV9LFQucHJvdG90eXBlLnBlcmZvcm1ERlNPbkNvbXBvdW5kcz1mdW5jdGlvbigpe3RoaXMuY29tcG91bmRPcmRlcj1bXSx0aGlzLmZpbGxDb21wZXhPcmRlckJ5REZTKHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXROb2RlcygpKX0sVC5wcm90b3R5cGUuZmlsbENvbXBleE9yZGVyQnlERlM9ZnVuY3Rpb24odyl7Zm9yKHZhciBFPTA7RTx3Lmxlbmd0aDtFKyspe3ZhciBfPXdbRV07Xy5nZXRDaGlsZCgpIT1udWxsJiZ0aGlzLmZpbGxDb21wZXhPcmRlckJ5REZTKF8uZ2V0Q2hpbGQoKS5nZXROb2RlcygpKSx0aGlzLmdldFRvQmVUaWxlZChfKSYmdGhpcy5jb21wb3VuZE9yZGVyLnB1c2goXyl9fSxULnByb3RvdHlwZS5hZGp1c3RMb2NhdGlvbnM9ZnVuY3Rpb24odyxFLF8sQyxEKXtFKz1DLF8rPUQ7Zm9yKHZhciBPPUUsUj0wO1I8dy5yb3dzLmxlbmd0aDtSKyspe3ZhciBrPXcucm93c1tSXTtFPU87Zm9yKHZhciBMPTAsQT0wO0E8ay5sZW5ndGg7QSsrKXt2YXIgST1rW0FdO0kucmVjdC54PUUsSS5yZWN0Lnk9XyxFKz1JLnJlY3Qud2lkdGgrdy5ob3Jpem9udGFsUGFkZGluZyxJLnJlY3QuaGVpZ2h0PkwmJihMPUkucmVjdC5oZWlnaHQpfV8rPUwrdy52ZXJ0aWNhbFBhZGRpbmd9fSxULnByb3RvdHlwZS50aWxlQ29tcG91bmRNZW1iZXJzPWZ1bmN0aW9uKHcsRSl7dmFyIF89dGhpczt0aGlzLnRpbGVkTWVtYmVyUGFjaz1bXSxPYmplY3Qua2V5cyh3KS5mb3JFYWNoKGZ1bmN0aW9uKEMpe3ZhciBEPUVbQ107Xy50aWxlZE1lbWJlclBhY2tbQ109Xy50aWxlTm9kZXMod1tDXSxELnBhZGRpbmdMZWZ0K0QucGFkZGluZ1JpZ2h0KSxELnJlY3Qud2lkdGg9Xy50aWxlZE1lbWJlclBhY2tbQ10ud2lkdGgsRC5yZWN0LmhlaWdodD1fLnRpbGVkTWVtYmVyUGFja1tDXS5oZWlnaHR9KX0sVC5wcm90b3R5cGUudGlsZU5vZGVzPWZ1bmN0aW9uKHcsRSl7dmFyIF89aC5USUxJTkdfUEFERElOR19WRVJUSUNBTCxDPWguVElMSU5HX1BBRERJTkdfSE9SSVpPTlRBTCxEPXtyb3dzOltdLHJvd1dpZHRoOltdLHJvd0hlaWdodDpbXSx3aWR0aDowLGhlaWdodDpFLHZlcnRpY2FsUGFkZGluZzpfLGhvcml6b250YWxQYWRkaW5nOkN9O3cuc29ydChmdW5jdGlvbihrLEwpe3JldHVybiBrLnJlY3Qud2lkdGgqay5yZWN0LmhlaWdodD5MLnJlY3Qud2lkdGgqTC5yZWN0LmhlaWdodD8tMTprLnJlY3Qud2lkdGgqay5yZWN0LmhlaWdodDxMLnJlY3Qud2lkdGgqTC5yZWN0LmhlaWdodD8xOjB9KTtmb3IodmFyIE89MDtPPHcubGVuZ3RoO08rKyl7dmFyIFI9d1tPXTtELnJvd3MubGVuZ3RoPT0wP3RoaXMuaW5zZXJ0Tm9kZVRvUm93KEQsUiwwLEUpOnRoaXMuY2FuQWRkSG9yaXpvbnRhbChELFIucmVjdC53aWR0aCxSLnJlY3QuaGVpZ2h0KT90aGlzLmluc2VydE5vZGVUb1JvdyhELFIsdGhpcy5nZXRTaG9ydGVzdFJvd0luZGV4KEQpLEUpOnRoaXMuaW5zZXJ0Tm9kZVRvUm93KEQsUixELnJvd3MubGVuZ3RoLEUpLHRoaXMuc2hpZnRUb0xhc3RSb3coRCl9cmV0dXJuIER9LFQucHJvdG90eXBlLmluc2VydE5vZGVUb1Jvdz1mdW5jdGlvbih3LEUsXyxDKXt2YXIgRD1DO2lmKF89PXcucm93cy5sZW5ndGgpe3ZhciBPPVtdO3cucm93cy5wdXNoKE8pLHcucm93V2lkdGgucHVzaChEKSx3LnJvd0hlaWdodC5wdXNoKDApfXZhciBSPXcucm93V2lkdGhbX10rRS5yZWN0LndpZHRoO3cucm93c1tfXS5sZW5ndGg+MCYmKFIrPXcuaG9yaXpvbnRhbFBhZGRpbmcpLHcucm93V2lkdGhbX109Uix3LndpZHRoPFImJih3LndpZHRoPVIpO3ZhciBrPUUucmVjdC5oZWlnaHQ7Xz4wJiYoays9dy52ZXJ0aWNhbFBhZGRpbmcpO3ZhciBMPTA7az53LnJvd0hlaWdodFtfXSYmKEw9dy5yb3dIZWlnaHRbX10sdy5yb3dIZWlnaHRbX109ayxMPXcucm93SGVpZ2h0W19dLUwpLHcuaGVpZ2h0Kz1MLHcucm93c1tfXS5wdXNoKEUpfSxULnByb3RvdHlwZS5nZXRTaG9ydGVzdFJvd0luZGV4PWZ1bmN0aW9uKHcpe2Zvcih2YXIgRT0tMSxfPU51bWJlci5NQVhfVkFMVUUsQz0wO0M8dy5yb3dzLmxlbmd0aDtDKyspdy5yb3dXaWR0aFtDXTxfJiYoRT1DLF89dy5yb3dXaWR0aFtDXSk7cmV0dXJuIEV9LFQucHJvdG90eXBlLmdldExvbmdlc3RSb3dJbmRleD1mdW5jdGlvbih3KXtmb3IodmFyIEU9LTEsXz1OdW1iZXIuTUlOX1ZBTFVFLEM9MDtDPHcucm93cy5sZW5ndGg7QysrKXcucm93V2lkdGhbQ10+XyYmKEU9QyxfPXcucm93V2lkdGhbQ10pO3JldHVybiBFfSxULnByb3RvdHlwZS5jYW5BZGRIb3Jpem9udGFsPWZ1bmN0aW9uKHcsRSxfKXt2YXIgQz10aGlzLmdldFNob3J0ZXN0Um93SW5kZXgodyk7aWYoQzwwKXJldHVybiEwO3ZhciBEPXcucm93V2lkdGhbQ107aWYoRCt3Lmhvcml6b250YWxQYWRkaW5nK0U8PXcud2lkdGgpcmV0dXJuITA7dmFyIE89MDt3LnJvd0hlaWdodFtDXTxfJiZDPjAmJihPPV8rdy52ZXJ0aWNhbFBhZGRpbmctdy5yb3dIZWlnaHRbQ10pO3ZhciBSO3cud2lkdGgtRD49RSt3Lmhvcml6b250YWxQYWRkaW5nP1I9KHcuaGVpZ2h0K08pLyhEK0Urdy5ob3Jpem9udGFsUGFkZGluZyk6Uj0ody5oZWlnaHQrTykvdy53aWR0aCxPPV8rdy52ZXJ0aWNhbFBhZGRpbmc7dmFyIGs7cmV0dXJuIHcud2lkdGg8RT9rPSh3LmhlaWdodCtPKS9FOms9KHcuaGVpZ2h0K08pL3cud2lkdGgsazwxJiYoaz0xL2spLFI8MSYmKFI9MS9SKSxSPGt9LFQucHJvdG90eXBlLnNoaWZ0VG9MYXN0Um93PWZ1bmN0aW9uKHcpe3ZhciBFPXRoaXMuZ2V0TG9uZ2VzdFJvd0luZGV4KHcpLF89dy5yb3dXaWR0aC5sZW5ndGgtMSxDPXcucm93c1tFXSxEPUNbQy5sZW5ndGgtMV0sTz1ELndpZHRoK3cuaG9yaXpvbnRhbFBhZGRpbmc7aWYody53aWR0aC13LnJvd1dpZHRoW19dPk8mJkUhPV8pe0Muc3BsaWNlKC0xLDEpLHcucm93c1tfXS5wdXNoKEQpLHcucm93V2lkdGhbRV09dy5yb3dXaWR0aFtFXS1PLHcucm93V2lkdGhbX109dy5yb3dXaWR0aFtfXStPLHcud2lkdGg9dy5yb3dXaWR0aFtpbnN0YW5jZS5nZXRMb25nZXN0Um93SW5kZXgodyldO2Zvcih2YXIgUj1OdW1iZXIuTUlOX1ZBTFVFLGs9MDtrPEMubGVuZ3RoO2srKylDW2tdLmhlaWdodD5SJiYoUj1DW2tdLmhlaWdodCk7RT4wJiYoUis9dy52ZXJ0aWNhbFBhZGRpbmcpO3ZhciBMPXcucm93SGVpZ2h0W0VdK3cucm93SGVpZ2h0W19dO3cucm93SGVpZ2h0W0VdPVIsdy5yb3dIZWlnaHRbX108RC5oZWlnaHQrdy52ZXJ0aWNhbFBhZGRpbmcmJih3LnJvd0hlaWdodFtfXT1ELmhlaWdodCt3LnZlcnRpY2FsUGFkZGluZyk7dmFyIEE9dy5yb3dIZWlnaHRbRV0rdy5yb3dIZWlnaHRbX107dy5oZWlnaHQrPUEtTCx0aGlzLnNoaWZ0VG9MYXN0Um93KHcpfX0sVC5wcm90b3R5cGUudGlsaW5nUHJlTGF5b3V0PWZ1bmN0aW9uKCl7aC5USUxFJiYodGhpcy5ncm91cFplcm9EZWdyZWVNZW1iZXJzKCksdGhpcy5jbGVhckNvbXBvdW5kcygpLHRoaXMuY2xlYXJaZXJvRGVncmVlTWVtYmVycygpKX0sVC5wcm90b3R5cGUudGlsaW5nUG9zdExheW91dD1mdW5jdGlvbigpe2guVElMRSYmKHRoaXMucmVwb3B1bGF0ZVplcm9EZWdyZWVNZW1iZXJzKCksdGhpcy5yZXBvcHVsYXRlQ29tcG91bmRzKCkpfSxULnByb3RvdHlwZS5yZWR1Y2VUcmVlcz1mdW5jdGlvbigpe2Zvcih2YXIgdz1bXSxFPSEwLF87RTspe3ZhciBDPXRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCksRD1bXTtFPSExO2Zvcih2YXIgTz0wO088Qy5sZW5ndGg7TysrKV89Q1tPXSxfLmdldEVkZ2VzKCkubGVuZ3RoPT0xJiYhXy5nZXRFZGdlcygpWzBdLmlzSW50ZXJHcmFwaCYmXy5nZXRDaGlsZCgpPT1udWxsJiYoRC5wdXNoKFtfLF8uZ2V0RWRnZXMoKVswXSxfLmdldE93bmVyKCldKSxFPSEwKTtpZihFPT0hMCl7Zm9yKHZhciBSPVtdLGs9MDtrPEQubGVuZ3RoO2srKylEW2tdWzBdLmdldEVkZ2VzKCkubGVuZ3RoPT0xJiYoUi5wdXNoKERba10pLERba11bMF0uZ2V0T3duZXIoKS5yZW1vdmUoRFtrXVswXSkpO3cucHVzaChSKSx0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzKCksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxFZGdlcygpfX10aGlzLnBydW5lZE5vZGVzQWxsPXd9LFQucHJvdG90eXBlLmdyb3dUcmVlPWZ1bmN0aW9uKHcpe2Zvcih2YXIgRT13Lmxlbmd0aCxfPXdbRS0xXSxDLEQ9MDtEPF8ubGVuZ3RoO0QrKylDPV9bRF0sdGhpcy5maW5kUGxhY2Vmb3JQcnVuZWROb2RlKEMpLENbMl0uYWRkKENbMF0pLENbMl0uYWRkKENbMV0sQ1sxXS5zb3VyY2UsQ1sxXS50YXJnZXQpO3cuc3BsaWNlKHcubGVuZ3RoLTEsMSksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxOb2RlcygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsRWRnZXMoKX0sVC5wcm90b3R5cGUuZmluZFBsYWNlZm9yUHJ1bmVkTm9kZT1mdW5jdGlvbih3KXt2YXIgRSxfLEM9d1swXTtDPT13WzFdLnNvdXJjZT9fPXdbMV0udGFyZ2V0Ol89d1sxXS5zb3VyY2U7dmFyIEQ9Xy5zdGFydFgsTz1fLmZpbmlzaFgsUj1fLnN0YXJ0WSxrPV8uZmluaXNoWSxMPTAsQT0wLEk9MCxNPTAsUD1bTCxJLEEsTV07aWYoUj4wKWZvcih2YXIgQj1EO0I8PU87QisrKVBbMF0rPXRoaXMuZ3JpZFtCXVtSLTFdLmxlbmd0aCt0aGlzLmdyaWRbQl1bUl0ubGVuZ3RoLTE7aWYoTzx0aGlzLmdyaWQubGVuZ3RoLTEpZm9yKHZhciBCPVI7Qjw9aztCKyspUFsxXSs9dGhpcy5ncmlkW08rMV1bQl0ubGVuZ3RoK3RoaXMuZ3JpZFtPXVtCXS5sZW5ndGgtMTtpZihrPHRoaXMuZ3JpZFswXS5sZW5ndGgtMSlmb3IodmFyIEI9RDtCPD1PO0IrKylQWzJdKz10aGlzLmdyaWRbQl1baysxXS5sZW5ndGgrdGhpcy5ncmlkW0JdW2tdLmxlbmd0aC0xO2lmKEQ+MClmb3IodmFyIEI9UjtCPD1rO0IrKylQWzNdKz10aGlzLmdyaWRbRC0xXVtCXS5sZW5ndGgrdGhpcy5ncmlkW0RdW0JdLmxlbmd0aC0xO2Zvcih2YXIgRj15Lk1BWF9WQUxVRSx6LCQsVT0wO1U8UC5sZW5ndGg7VSsrKVBbVV08Rj8oRj1QW1VdLHo9MSwkPVUpOlBbVV09PUYmJnorKztpZih6PT0zJiZGPT0wKVBbMF09PTAmJlBbMV09PTAmJlBbMl09PTA/RT0xOlBbMF09PTAmJlBbMV09PTAmJlBbM109PTA/RT0wOlBbMF09PTAmJlBbMl09PTAmJlBbM109PTA/RT0zOlBbMV09PTAmJlBbMl09PTAmJlBbM109PTAmJihFPTIpO2Vsc2UgaWYoej09MiYmRj09MCl7dmFyIEs9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjIpO1BbMF09PTAmJlBbMV09PTA/Sz09MD9FPTA6RT0xOlBbMF09PTAmJlBbMl09PTA/Sz09MD9FPTA6RT0yOlBbMF09PTAmJlBbM109PTA/Sz09MD9FPTA6RT0zOlBbMV09PTAmJlBbMl09PTA/Sz09MD9FPTE6RT0yOlBbMV09PTAmJlBbM109PTA/Sz09MD9FPTE6RT0zOks9PTA/RT0yOkU9M31lbHNlIGlmKHo9PTQmJkY9PTApe3ZhciBLPU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSo0KTtFPUt9ZWxzZSBFPSQ7RT09MD9DLnNldENlbnRlcihfLmdldENlbnRlclgoKSxfLmdldENlbnRlclkoKS1fLmdldEhlaWdodCgpLzItZi5ERUZBVUxUX0VER0VfTEVOR1RILUMuZ2V0SGVpZ2h0KCkvMik6RT09MT9DLnNldENlbnRlcihfLmdldENlbnRlclgoKStfLmdldFdpZHRoKCkvMitmLkRFRkFVTFRfRURHRV9MRU5HVEgrQy5nZXRXaWR0aCgpLzIsXy5nZXRDZW50ZXJZKCkpOkU9PTI/Qy5zZXRDZW50ZXIoXy5nZXRDZW50ZXJYKCksXy5nZXRDZW50ZXJZKCkrXy5nZXRIZWlnaHQoKS8yK2YuREVGQVVMVF9FREdFX0xFTkdUSCtDLmdldEhlaWdodCgpLzIpOkMuc2V0Q2VudGVyKF8uZ2V0Q2VudGVyWCgpLV8uZ2V0V2lkdGgoKS8yLWYuREVGQVVMVF9FREdFX0xFTkdUSC1DLmdldFdpZHRoKCkvMixfLmdldENlbnRlclkoKSl9LGUuZXhwb3J0cz1UfSxmdW5jdGlvbihlLHIsbil7InVzZSBzdHJpY3QiO3ZhciBpPXt9O2kubGF5b3V0QmFzZT1uKDApLGkuQ29TRUNvbnN0YW50cz1uKDEpLGkuQ29TRUVkZ2U9bigyKSxpLkNvU0VHcmFwaD1uKDMpLGkuQ29TRUdyYXBoTWFuYWdlcj1uKDQpLGkuQ29TRUxheW91dD1uKDYpLGkuQ29TRU5vZGU9big1KSxlLmV4cG9ydHM9aX1dKX0pfSk7dmFyIFExZT1QaSgoazQsZkYpPT57InVzZSBzdHJpY3QiO28oZnVuY3Rpb24oZSxyKXt0eXBlb2YgazQ9PSJvYmplY3QiJiZ0eXBlb2YgZkY9PSJvYmplY3QiP2ZGLmV4cG9ydHM9cihoRigpKTp0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kP2RlZmluZShbImNvc2UtYmFzZSJdLHIpOnR5cGVvZiBrND09Im9iamVjdCI/azQuY3l0b3NjYXBlQ29zZUJpbGtlbnQ9cihoRigpKTplLmN5dG9zY2FwZUNvc2VCaWxrZW50PXIoZS5jb3NlQmFzZSl9LCJ3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIpKGs0LGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj17fTtmdW5jdGlvbiBuKGkpe2lmKHJbaV0pcmV0dXJuIHJbaV0uZXhwb3J0czt2YXIgYT1yW2ldPXtpLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIGVbaV0uY2FsbChhLmV4cG9ydHMsYSxhLmV4cG9ydHMsbiksYS5sPSEwLGEuZXhwb3J0c31yZXR1cm4gbyhuLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiksbi5tPWUsbi5jPXIsbi5pPWZ1bmN0aW9uKGkpe3JldHVybiBpfSxuLmQ9ZnVuY3Rpb24oaSxhLHMpe24ubyhpLGEpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxhLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCxnZXQ6c30pfSxuLm49ZnVuY3Rpb24oaSl7dmFyIGE9aSYmaS5fX2VzTW9kdWxlP28oZnVuY3Rpb24oKXtyZXR1cm4gaS5kZWZhdWx0fSwiZ2V0RGVmYXVsdCIpOm8oZnVuY3Rpb24oKXtyZXR1cm4gaX0sImdldE1vZHVsZUV4cG9ydHMiKTtyZXR1cm4gbi5kKGEsImEiLGEpLGF9LG4ubz1mdW5jdGlvbihpLGEpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSxhKX0sbi5wPSIiLG4obi5zPTEpfShbZnVuY3Rpb24oZSxyKXtlLmV4cG9ydHM9dH0sZnVuY3Rpb24oZSxyLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgaT1uKDApLmxheW91dEJhc2UuTGF5b3V0Q29uc3RhbnRzLGE9bigwKS5sYXlvdXRCYXNlLkZETGF5b3V0Q29uc3RhbnRzLHM9bigwKS5Db1NFQ29uc3RhbnRzLGw9bigwKS5Db1NFTGF5b3V0LHU9bigwKS5Db1NFTm9kZSxoPW4oMCkubGF5b3V0QmFzZS5Qb2ludEQsZj1uKDApLmxheW91dEJhc2UuRGltZW5zaW9uRCxkPXtyZWFkeTpvKGZ1bmN0aW9uKCl7fSwicmVhZHkiKSxzdG9wOm8oZnVuY3Rpb24oKXt9LCJzdG9wIikscXVhbGl0eToiZGVmYXVsdCIsbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiExLHJlZnJlc2g6MzAsZml0OiEwLHBhZGRpbmc6MTAscmFuZG9taXplOiEwLG5vZGVSZXB1bHNpb246NDUwMCxpZGVhbEVkZ2VMZW5ndGg6NTAsZWRnZUVsYXN0aWNpdHk6LjQ1LG5lc3RpbmdGYWN0b3I6LjEsZ3Jhdml0eTouMjUsbnVtSXRlcjoyNTAwLHRpbGU6ITAsYW5pbWF0ZToiZW5kIixhbmltYXRpb25EdXJhdGlvbjo1MDAsdGlsaW5nUGFkZGluZ1ZlcnRpY2FsOjEwLHRpbGluZ1BhZGRpbmdIb3Jpem9udGFsOjEwLGdyYXZpdHlSYW5nZUNvbXBvdW5kOjEuNSxncmF2aXR5Q29tcG91bmQ6MSxncmF2aXR5UmFuZ2U6My44LGluaXRpYWxFbmVyZ3lPbkluY3JlbWVudGFsOi41fTtmdW5jdGlvbiBwKHYseCl7dmFyIGI9e307Zm9yKHZhciBUIGluIHYpYltUXT12W1RdO2Zvcih2YXIgVCBpbiB4KWJbVF09eFtUXTtyZXR1cm4gYn1vKHAsImV4dGVuZCIpO2Z1bmN0aW9uIG0odil7dGhpcy5vcHRpb25zPXAoZCx2KSxnKHRoaXMub3B0aW9ucyl9byhtLCJfQ29TRUxheW91dCIpO3ZhciBnPW8oZnVuY3Rpb24oeCl7eC5ub2RlUmVwdWxzaW9uIT1udWxsJiYocy5ERUZBVUxUX1JFUFVMU0lPTl9TVFJFTkdUSD1hLkRFRkFVTFRfUkVQVUxTSU9OX1NUUkVOR1RIPXgubm9kZVJlcHVsc2lvbikseC5pZGVhbEVkZ2VMZW5ndGghPW51bGwmJihzLkRFRkFVTFRfRURHRV9MRU5HVEg9YS5ERUZBVUxUX0VER0VfTEVOR1RIPXguaWRlYWxFZGdlTGVuZ3RoKSx4LmVkZ2VFbGFzdGljaXR5IT1udWxsJiYocy5ERUZBVUxUX1NQUklOR19TVFJFTkdUSD1hLkRFRkFVTFRfU1BSSU5HX1NUUkVOR1RIPXguZWRnZUVsYXN0aWNpdHkpLHgubmVzdGluZ0ZhY3RvciE9bnVsbCYmKHMuUEVSX0xFVkVMX0lERUFMX0VER0VfTEVOR1RIX0ZBQ1RPUj1hLlBFUl9MRVZFTF9JREVBTF9FREdFX0xFTkdUSF9GQUNUT1I9eC5uZXN0aW5nRmFjdG9yKSx4LmdyYXZpdHkhPW51bGwmJihzLkRFRkFVTFRfR1JBVklUWV9TVFJFTkdUSD1hLkRFRkFVTFRfR1JBVklUWV9TVFJFTkdUSD14LmdyYXZpdHkpLHgubnVtSXRlciE9bnVsbCYmKHMuTUFYX0lURVJBVElPTlM9YS5NQVhfSVRFUkFUSU9OUz14Lm51bUl0ZXIpLHguZ3Jhdml0eVJhbmdlIT1udWxsJiYocy5ERUZBVUxUX0dSQVZJVFlfUkFOR0VfRkFDVE9SPWEuREVGQVVMVF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUj14LmdyYXZpdHlSYW5nZSkseC5ncmF2aXR5Q29tcG91bmQhPW51bGwmJihzLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9TVFJFTkdUSD1hLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9TVFJFTkdUSD14LmdyYXZpdHlDb21wb3VuZCkseC5ncmF2aXR5UmFuZ2VDb21wb3VuZCE9bnVsbCYmKHMuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUj1hLkRFRkFVTFRfQ09NUE9VTkRfR1JBVklUWV9SQU5HRV9GQUNUT1I9eC5ncmF2aXR5UmFuZ2VDb21wb3VuZCkseC5pbml0aWFsRW5lcmd5T25JbmNyZW1lbnRhbCE9bnVsbCYmKHMuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTD1hLkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUw9eC5pbml0aWFsRW5lcmd5T25JbmNyZW1lbnRhbCkseC5xdWFsaXR5PT0iZHJhZnQiP2kuUVVBTElUWT0wOngucXVhbGl0eT09InByb29mIj9pLlFVQUxJVFk9MjppLlFVQUxJVFk9MSxzLk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUz1hLk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUz1pLk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUz14Lm5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVscyxzLkRFRkFVTFRfSU5DUkVNRU5UQUw9YS5ERUZBVUxUX0lOQ1JFTUVOVEFMPWkuREVGQVVMVF9JTkNSRU1FTlRBTD0heC5yYW5kb21pemUscy5BTklNQVRFPWEuQU5JTUFURT1pLkFOSU1BVEU9eC5hbmltYXRlLHMuVElMRT14LnRpbGUscy5USUxJTkdfUEFERElOR19WRVJUSUNBTD10eXBlb2YgeC50aWxpbmdQYWRkaW5nVmVydGljYWw9PSJmdW5jdGlvbiI/eC50aWxpbmdQYWRkaW5nVmVydGljYWwuY2FsbCgpOngudGlsaW5nUGFkZGluZ1ZlcnRpY2FsLHMuVElMSU5HX1BBRERJTkdfSE9SSVpPTlRBTD10eXBlb2YgeC50aWxpbmdQYWRkaW5nSG9yaXpvbnRhbD09ImZ1bmN0aW9uIj94LnRpbGluZ1BhZGRpbmdIb3Jpem9udGFsLmNhbGwoKTp4LnRpbGluZ1BhZGRpbmdIb3Jpem9udGFsfSwiZ2V0VXNlck9wdGlvbnMiKTttLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt2YXIgdix4LGI9dGhpcy5vcHRpb25zLFQ9dGhpcy5pZFRvTE5vZGU9e30sUz10aGlzLmxheW91dD1uZXcgbCx3PXRoaXM7dy5zdG9wcGVkPSExLHRoaXMuY3k9dGhpcy5vcHRpb25zLmN5LHRoaXMuY3kudHJpZ2dlcih7dHlwZToibGF5b3V0c3RhcnQiLGxheW91dDp0aGlzfSk7dmFyIEU9Uy5uZXdHcmFwaE1hbmFnZXIoKTt0aGlzLmdtPUU7dmFyIF89dGhpcy5vcHRpb25zLmVsZXMubm9kZXMoKSxDPXRoaXMub3B0aW9ucy5lbGVzLmVkZ2VzKCk7dGhpcy5yb290PUUuYWRkUm9vdCgpLHRoaXMucHJvY2Vzc0NoaWxkcmVuTGlzdCh0aGlzLnJvb3QsdGhpcy5nZXRUb3BNb3N0Tm9kZXMoXyksUyk7Zm9yKHZhciBEPTA7RDxDLmxlbmd0aDtEKyspe3ZhciBPPUNbRF0sUj10aGlzLmlkVG9MTm9kZVtPLmRhdGEoInNvdXJjZSIpXSxrPXRoaXMuaWRUb0xOb2RlW08uZGF0YSgidGFyZ2V0IildO2lmKFIhPT1rJiZSLmdldEVkZ2VzQmV0d2VlbihrKS5sZW5ndGg9PTApe3ZhciBMPUUuYWRkKFMubmV3RWRnZSgpLFIsayk7TC5pZD1PLmlkKCl9fXZhciBBPW8oZnVuY3Rpb24oUCxCKXt0eXBlb2YgUD09Im51bWJlciImJihQPUIpO3ZhciBGPVAuZGF0YSgiaWQiKSx6PXcuaWRUb0xOb2RlW0ZdO3JldHVybnt4OnouZ2V0UmVjdCgpLmdldENlbnRlclgoKSx5OnouZ2V0UmVjdCgpLmdldENlbnRlclkoKX19LCJnZXRQb3NpdGlvbnMiKSxJPW8oZnVuY3Rpb24gTSgpe2Zvcih2YXIgUD1vKGZ1bmN0aW9uKCl7Yi5maXQmJmIuY3kuZml0KGIuZWxlcyxiLnBhZGRpbmcpLHZ8fCh2PSEwLHcuY3kub25lKCJsYXlvdXRyZWFkeSIsYi5yZWFkeSksdy5jeS50cmlnZ2VyKHt0eXBlOiJsYXlvdXRyZWFkeSIsbGF5b3V0Ond9KSl9LCJhZnRlclJlcG9zaXRpb24iKSxCPXcub3B0aW9ucy5yZWZyZXNoLEYsej0wO3o8QiYmIUY7eisrKUY9dy5zdG9wcGVkfHx3LmxheW91dC50aWNrKCk7aWYoRil7Uy5jaGVja0xheW91dFN1Y2Nlc3MoKSYmIVMuaXNTdWJMYXlvdXQmJlMuZG9Qb3N0TGF5b3V0KCksUy50aWxpbmdQb3N0TGF5b3V0JiZTLnRpbGluZ1Bvc3RMYXlvdXQoKSxTLmlzTGF5b3V0RmluaXNoZWQ9ITAsdy5vcHRpb25zLmVsZXMubm9kZXMoKS5wb3NpdGlvbnMoQSksUCgpLHcuY3kub25lKCJsYXlvdXRzdG9wIix3Lm9wdGlvbnMuc3RvcCksdy5jeS50cmlnZ2VyKHt0eXBlOiJsYXlvdXRzdG9wIixsYXlvdXQ6d30pLHgmJmNhbmNlbEFuaW1hdGlvbkZyYW1lKHgpLHY9ITE7cmV0dXJufXZhciAkPXcubGF5b3V0LmdldFBvc2l0aW9uc0RhdGEoKTtiLmVsZXMubm9kZXMoKS5wb3NpdGlvbnMoZnVuY3Rpb24oVSxLKXtpZih0eXBlb2YgVT09Im51bWJlciImJihVPUspLCFVLmlzUGFyZW50KCkpe2Zvcih2YXIgZWU9VS5pZCgpLFk9JFtlZV0sY2U9VTtZPT1udWxsJiYoWT0kW2NlLmRhdGEoInBhcmVudCIpXXx8JFsiRHVtbXlDb21wb3VuZF8iK2NlLmRhdGEoInBhcmVudCIpXSwkW2VlXT1ZLGNlPWNlLnBhcmVudCgpWzBdLGNlIT1udWxsKTspO3JldHVybiBZIT1udWxsP3t4OlkueCx5OlkueX06e3g6VS5wb3NpdGlvbigieCIpLHk6VS5wb3NpdGlvbigieSIpfX19KSxQKCkseD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoTSl9LCJpdGVyYXRlQW5pbWF0ZWQiKTtyZXR1cm4gUy5hZGRMaXN0ZW5lcigibGF5b3V0c3RhcnRlZCIsZnVuY3Rpb24oKXt3Lm9wdGlvbnMuYW5pbWF0ZT09PSJkdXJpbmciJiYoeD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoSSkpfSksUy5ydW5MYXlvdXQoKSx0aGlzLm9wdGlvbnMuYW5pbWF0ZSE9PSJkdXJpbmciJiYody5vcHRpb25zLmVsZXMubm9kZXMoKS5ub3QoIjpwYXJlbnQiKS5sYXlvdXRQb3NpdGlvbnModyx3Lm9wdGlvbnMsQSksdj0hMSksdGhpc30sbS5wcm90b3R5cGUuZ2V0VG9wTW9zdE5vZGVzPWZ1bmN0aW9uKHYpe2Zvcih2YXIgeD17fSxiPTA7Yjx2Lmxlbmd0aDtiKyspeFt2W2JdLmlkKCldPSEwO3ZhciBUPXYuZmlsdGVyKGZ1bmN0aW9uKFMsdyl7dHlwZW9mIFM9PSJudW1iZXIiJiYoUz13KTtmb3IodmFyIEU9Uy5wYXJlbnQoKVswXTtFIT1udWxsOyl7aWYoeFtFLmlkKCldKXJldHVybiExO0U9RS5wYXJlbnQoKVswXX1yZXR1cm4hMH0pO3JldHVybiBUfSxtLnByb3RvdHlwZS5wcm9jZXNzQ2hpbGRyZW5MaXN0PWZ1bmN0aW9uKHYseCxiKXtmb3IodmFyIFQ9eC5sZW5ndGgsUz0wO1M8VDtTKyspe3ZhciB3PXhbU10sRT13LmNoaWxkcmVuKCksXyxDPXcubGF5b3V0RGltZW5zaW9ucyh7bm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOnRoaXMub3B0aW9ucy5ub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHN9KTtpZih3Lm91dGVyV2lkdGgoKSE9bnVsbCYmdy5vdXRlckhlaWdodCgpIT1udWxsP189di5hZGQobmV3IHUoYi5ncmFwaE1hbmFnZXIsbmV3IGgody5wb3NpdGlvbigieCIpLUMudy8yLHcucG9zaXRpb24oInkiKS1DLmgvMiksbmV3IGYocGFyc2VGbG9hdChDLncpLHBhcnNlRmxvYXQoQy5oKSkpKTpfPXYuYWRkKG5ldyB1KHRoaXMuZ3JhcGhNYW5hZ2VyKSksXy5pZD13LmRhdGEoImlkIiksXy5wYWRkaW5nTGVmdD1wYXJzZUludCh3LmNzcygicGFkZGluZyIpKSxfLnBhZGRpbmdUb3A9cGFyc2VJbnQody5jc3MoInBhZGRpbmciKSksXy5wYWRkaW5nUmlnaHQ9cGFyc2VJbnQody5jc3MoInBhZGRpbmciKSksXy5wYWRkaW5nQm90dG9tPXBhcnNlSW50KHcuY3NzKCJwYWRkaW5nIikpLHRoaXMub3B0aW9ucy5ub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHMmJncuaXNQYXJlbnQoKSl7dmFyIEQ9dy5ib3VuZGluZ0JveCh7aW5jbHVkZUxhYmVsczohMCxpbmNsdWRlTm9kZXM6ITF9KS53LE89dy5ib3VuZGluZ0JveCh7aW5jbHVkZUxhYmVsczohMCxpbmNsdWRlTm9kZXM6ITF9KS5oLFI9dy5jc3MoInRleHQtaGFsaWduIik7Xy5sYWJlbFdpZHRoPUQsXy5sYWJlbEhlaWdodD1PLF8ubGFiZWxQb3M9Un1pZih0aGlzLmlkVG9MTm9kZVt3LmRhdGEoImlkIildPV8saXNOYU4oXy5yZWN0LngpJiYoXy5yZWN0Lng9MCksaXNOYU4oXy5yZWN0LnkpJiYoXy5yZWN0Lnk9MCksRSE9bnVsbCYmRS5sZW5ndGg+MCl7dmFyIGs7az1iLmdldEdyYXBoTWFuYWdlcigpLmFkZChiLm5ld0dyYXBoKCksXyksdGhpcy5wcm9jZXNzQ2hpbGRyZW5MaXN0KGssRSxiKX19fSxtLnByb3RvdHlwZS5zdG9wPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RvcHBlZD0hMCx0aGlzfTt2YXIgeT1vKGZ1bmN0aW9uKHgpe3goImxheW91dCIsImNvc2UtYmlsa2VudCIsbSl9LCJyZWdpc3RlciIpO3R5cGVvZiBjeXRvc2NhcGU8InUiJiZ5KGN5dG9zY2FwZSksZS5leHBvcnRzPXl9XSl9KX0pO2Z1bmN0aW9uIHhldCh0LGUscixuLGkpe3JldHVybiB0Lmluc2VydCgicG9seWdvbiIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInBvaW50cyIsbi5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEueCsiLCIrYS55fSkuam9pbigiICIpKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoaS53aWR0aC1lKS8yKyIsICIrcisiKSIpfXZhciBkZXQscGV0LG1ldCxnZXQseWV0LHZldCxiZXQsVGV0LFoxZSxKMWUsZXllPU4oKCk9PnsidXNlIHN0cmljdCI7YW8oKTtlcigpO2RldD0xMixwZXQ9byhmdW5jdGlvbih0LGUscixuKXtlLmFwcGVuZCgicGF0aCIpLmF0dHIoImlkIiwibm9kZS0iK3IuaWQpLmF0dHIoImNsYXNzIiwibm9kZS1ia2cgbm9kZS0iK3QudHlwZTJTdHIoci50eXBlKSkuYXR0cigiZCIsYE0wICR7ci5oZWlnaHQtNX0gdiR7LXIuaGVpZ2h0KzIqNX0gcTAsLTUgNSwtNSBoJHtyLndpZHRoLTIqNX0gcTUsMCA1LDUgdiR7ci5oZWlnaHQtNX0gSDAgWmApLGUuYXBwZW5kKCJsaW5lIikuYXR0cigiY2xhc3MiLCJub2RlLWxpbmUtIituKS5hdHRyKCJ4MSIsMCkuYXR0cigieTEiLHIuaGVpZ2h0KS5hdHRyKCJ4MiIsci53aWR0aCkuYXR0cigieTIiLHIuaGVpZ2h0KX0sImRlZmF1bHRCa2ciKSxtZXQ9byhmdW5jdGlvbih0LGUscil7ZS5hcHBlbmQoInJlY3QiKS5hdHRyKCJpZCIsIm5vZGUtIityLmlkKS5hdHRyKCJjbGFzcyIsIm5vZGUtYmtnIG5vZGUtIit0LnR5cGUyU3RyKHIudHlwZSkpLmF0dHIoImhlaWdodCIsci5oZWlnaHQpLmF0dHIoIndpZHRoIixyLndpZHRoKX0sInJlY3RCa2ciKSxnZXQ9byhmdW5jdGlvbih0LGUscil7bGV0IG49ci53aWR0aCxpPXIuaGVpZ2h0LGE9LjE1Km4scz0uMjUqbixsPS4zNSpuLHU9LjIqbjtlLmFwcGVuZCgicGF0aCIpLmF0dHIoImlkIiwibm9kZS0iK3IuaWQpLmF0dHIoImNsYXNzIiwibm9kZS1ia2cgbm9kZS0iK3QudHlwZTJTdHIoci50eXBlKSkuYXR0cigiZCIsYE0wIDAgYSR7YX0sJHthfSAwIDAsMSAke24qLjI1fSwkey0xKm4qLjF9CiAgICAgIGEke2x9LCR7bH0gMSAwLDEgJHtuKi40fSwkey0xKm4qLjF9CiAgICAgIGEke3N9LCR7c30gMSAwLDEgJHtuKi4zNX0sJHsxKm4qLjJ9CgogICAgICBhJHthfSwke2F9IDEgMCwxICR7biouMTV9LCR7MSppKi4zNX0KICAgICAgYSR7dX0sJHt1fSAxIDAsMSAkey0xKm4qLjE1fSwkezEqaSouNjV9CgogICAgICBhJHtzfSwke2F9IDEgMCwxICR7LTEqbiouMjV9LCR7biouMTV9CiAgICAgIGEke2x9LCR7bH0gMSAwLDEgJHstMSpuKi41fSwwCiAgICAgIGEke2F9LCR7YX0gMSAwLDEgJHstMSpuKi4yNX0sJHstMSpuKi4xNX0KCiAgICAgIGEke2F9LCR7YX0gMSAwLDEgJHstMSpuKi4xfSwkey0xKmkqLjM1fQogICAgICBhJHt1fSwke3V9IDEgMCwxICR7biouMX0sJHstMSppKi42NX0KCiAgICBIMCBWMCBaYCl9LCJjbG91ZEJrZyIpLHlldD1vKGZ1bmN0aW9uKHQsZSxyKXtsZXQgbj1yLndpZHRoLGk9ci5oZWlnaHQsYT0uMTUqbjtlLmFwcGVuZCgicGF0aCIpLmF0dHIoImlkIiwibm9kZS0iK3IuaWQpLmF0dHIoImNsYXNzIiwibm9kZS1ia2cgbm9kZS0iK3QudHlwZTJTdHIoci50eXBlKSkuYXR0cigiZCIsYE0wIDAgYSR7YX0sJHthfSAxIDAsMCAke24qLjI1fSwkey0xKmkqLjF9CiAgICAgIGEke2F9LCR7YX0gMSAwLDAgJHtuKi4yNX0sMAogICAgICBhJHthfSwke2F9IDEgMCwwICR7biouMjV9LDAKICAgICAgYSR7YX0sJHthfSAxIDAsMCAke24qLjI1fSwkezEqaSouMX0KCiAgICAgIGEke2F9LCR7YX0gMSAwLDAgJHtuKi4xNX0sJHsxKmkqLjMzfQogICAgICBhJHthKi44fSwke2EqLjh9IDEgMCwwIDAsJHsxKmkqLjM0fQogICAgICBhJHthfSwke2F9IDEgMCwwICR7LTEqbiouMTV9LCR7MSppKi4zM30KCiAgICAgIGEke2F9LCR7YX0gMSAwLDAgJHstMSpuKi4yNX0sJHtpKi4xNX0KICAgICAgYSR7YX0sJHthfSAxIDAsMCAkey0xKm4qLjI1fSwwCiAgICAgIGEke2F9LCR7YX0gMSAwLDAgJHstMSpuKi4yNX0sMAogICAgICBhJHthfSwke2F9IDEgMCwwICR7LTEqbiouMjV9LCR7LTEqaSouMTV9CgogICAgICBhJHthfSwke2F9IDEgMCwwICR7LTEqbiouMX0sJHstMSppKi4zM30KICAgICAgYSR7YSouOH0sJHthKi44fSAxIDAsMCAwLCR7LTEqaSouMzR9CiAgICAgIGEke2F9LCR7YX0gMSAwLDAgJHtuKi4xfSwkey0xKmkqLjMzfQoKICAgIEgwIFYwIFpgKX0sImJhbmdCa2ciKSx2ZXQ9byhmdW5jdGlvbih0LGUscil7ZS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImlkIiwibm9kZS0iK3IuaWQpLmF0dHIoImNsYXNzIiwibm9kZS1ia2cgbm9kZS0iK3QudHlwZTJTdHIoci50eXBlKSkuYXR0cigiciIsci53aWR0aC8yKX0sImNpcmNsZUJrZyIpO28oeGV0LCJpbnNlcnRQb2x5Z29uU2hhcGUiKTtiZXQ9byhmdW5jdGlvbih0LGUscil7bGV0IG49ci5oZWlnaHQsYT1uLzQscz1yLndpZHRoLXIucGFkZGluZysyKmEsbD1be3g6YSx5OjB9LHt4OnMtYSx5OjB9LHt4OnMseTotbi8yfSx7eDpzLWEseTotbn0se3g6YSx5Oi1ufSx7eDowLHk6LW4vMn1dO3hldChlLHMsbixsLHIpfSwiaGV4YWdvbkJrZyIpLFRldD1vKGZ1bmN0aW9uKHQsZSxyKXtlLmFwcGVuZCgicmVjdCIpLmF0dHIoImlkIiwibm9kZS0iK3IuaWQpLmF0dHIoImNsYXNzIiwibm9kZS1ia2cgbm9kZS0iK3QudHlwZTJTdHIoci50eXBlKSkuYXR0cigiaGVpZ2h0IixyLmhlaWdodCkuYXR0cigicngiLHIucGFkZGluZykuYXR0cigicnkiLHIucGFkZGluZykuYXR0cigid2lkdGgiLHIud2lkdGgpfSwicm91bmRlZFJlY3RCa2ciKSxaMWU9byhhc3luYyBmdW5jdGlvbih0LGUscixuLGkpe2xldCBhPWkuaHRtbExhYmVscyxzPW4lKGRldC0xKSxsPWUuYXBwZW5kKCJnIik7ci5zZWN0aW9uPXM7bGV0IHU9InNlY3Rpb24tIitzO3M8MCYmKHUrPSIgc2VjdGlvbi1yb290IiksbC5hdHRyKCJjbGFzcyIsKHIuY2xhc3M/ci5jbGFzcysiICI6IiIpKyJtaW5kbWFwLW5vZGUgIit1KTtsZXQgaD1sLmFwcGVuZCgiZyIpLGY9bC5hcHBlbmQoImciKSxkPXIuZGVzY3IucmVwbGFjZSgvKDxiclwvKj4pL2csYApgKTthd2FpdCBxbihmLGQse3VzZUh0bWxMYWJlbHM6YSx3aWR0aDpyLndpZHRoLGNsYXNzZXM6Im1pbmRtYXAtbm9kZS1sYWJlbCJ9LGkpLGF8fGYuYXR0cigiZHkiLCIxZW0iKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIik7bGV0IHA9Zi5ub2RlKCkuZ2V0QkJveCgpLFttXT16byhpLmZvbnRTaXplKTtpZihyLmhlaWdodD1wLmhlaWdodCttKjEuMSouNStyLnBhZGRpbmcsci53aWR0aD1wLndpZHRoKzIqci5wYWRkaW5nLHIuaWNvbilpZihyLnR5cGU9PT10Lm5vZGVUeXBlLkNJUkNMRSlyLmhlaWdodCs9NTAsci53aWR0aCs9NTAsbC5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJoZWlnaHQiLCI1MHB4IikuYXR0cigid2lkdGgiLHIud2lkdGgpLmF0dHIoInN0eWxlIiwidGV4dC1hbGlnbjogY2VudGVyOyIpLmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLCJpY29uLWNvbnRhaW5lciIpLmFwcGVuZCgiaSIpLmF0dHIoImNsYXNzIiwibm9kZS1pY29uLSIrcysiICIrci5pY29uKSxmLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3Iud2lkdGgvMisiLCAiKyhyLmhlaWdodC8yLTEuNSpyLnBhZGRpbmcpKyIpIik7ZWxzZXtyLndpZHRoKz01MDtsZXQgZz1yLmhlaWdodDtyLmhlaWdodD1NYXRoLm1heChnLDYwKTtsZXQgeT1NYXRoLmFicyhyLmhlaWdodC1nKTtsLmFwcGVuZCgiZm9yZWlnbk9iamVjdCIpLmF0dHIoIndpZHRoIiwiNjBweCIpLmF0dHIoImhlaWdodCIsci5oZWlnaHQpLmF0dHIoInN0eWxlIiwidGV4dC1hbGlnbjogY2VudGVyO21hcmdpbi10b3A6Iit5LzIrInB4OyIpLmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLCJpY29uLWNvbnRhaW5lciIpLmFwcGVuZCgiaSIpLmF0dHIoImNsYXNzIiwibm9kZS1pY29uLSIrcysiICIrci5pY29uKSxmLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKygyNStyLndpZHRoLzIpKyIsICIrKHkvMityLnBhZGRpbmcvMikrIikiKX1lbHNlIGlmKGEpe2xldCBnPShyLndpZHRoLXAud2lkdGgpLzIseT0oci5oZWlnaHQtcC5oZWlnaHQpLzI7Zi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitnKyIsICIreSsiKSIpfWVsc2V7bGV0IGc9ci53aWR0aC8yLHk9ci5wYWRkaW5nLzI7Zi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitnKyIsICIreSsiKSIpfXN3aXRjaChyLnR5cGUpe2Nhc2UgdC5ub2RlVHlwZS5ERUZBVUxUOnBldCh0LGgscixzKTticmVhaztjYXNlIHQubm9kZVR5cGUuUk9VTkRFRF9SRUNUOlRldCh0LGgscixzKTticmVhaztjYXNlIHQubm9kZVR5cGUuUkVDVDptZXQodCxoLHIscyk7YnJlYWs7Y2FzZSB0Lm5vZGVUeXBlLkNJUkNMRTpoLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3Iud2lkdGgvMisiLCAiKyArci5oZWlnaHQvMisiKSIpLHZldCh0LGgscixzKTticmVhaztjYXNlIHQubm9kZVR5cGUuQ0xPVUQ6Z2V0KHQsaCxyLHMpO2JyZWFrO2Nhc2UgdC5ub2RlVHlwZS5CQU5HOnlldCh0LGgscixzKTticmVhaztjYXNlIHQubm9kZVR5cGUuSEVYQUdPTjpiZXQodCxoLHIscyk7YnJlYWt9cmV0dXJuIHQuc2V0RWxlbWVudEZvcklkKHIuaWQsbCksci5oZWlnaHR9LCJkcmF3Tm9kZSIpLEoxZT1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9dC5nZXRFbGVtZW50QnlJZChlLmlkKSxuPWUueHx8MCxpPWUueXx8MDtyLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK24rIiwiK2krIikiKX0sInBvc2l0aW9uTm9kZSIpfSk7YXN5bmMgZnVuY3Rpb24gcnllKHQsZSxyLG4saSl7YXdhaXQgWjFlKHQsZSxyLG4saSksci5jaGlsZHJlbiYmYXdhaXQgUHJvbWlzZS5hbGwoci5jaGlsZHJlbi5tYXAoKGEscyk9PnJ5ZSh0LGUsYSxuPDA/czpuLGkpKSl9ZnVuY3Rpb24gd2V0KHQsZSl7ZS5lZGdlcygpLm1hcCgocixuKT0+e2xldCBpPXIuZGF0YSgpO2lmKHJbMF0uX3ByaXZhdGUuYm9keUJvdW5kcyl7bGV0IGE9clswXS5fcHJpdmF0ZS5yc2NyYXRjaDtYLnRyYWNlKCJFZGdlOiAiLG4saSksdC5pbnNlcnQoInBhdGgiKS5hdHRyKCJkIixgTSAke2Euc3RhcnRYfSwke2Euc3RhcnRZfSBMICR7YS5taWRYfSwke2EubWlkWX0gTCR7YS5lbmRYfSwke2EuZW5kWX0gYCkuYXR0cigiY2xhc3MiLCJlZGdlIHNlY3Rpb24tZWRnZS0iK2kuc2VjdGlvbisiIGVkZ2UtZGVwdGgtIitpLmRlcHRoKX19KX1mdW5jdGlvbiBueWUodCxlLHIsbil7ZS5hZGQoe2dyb3VwOiJub2RlcyIsZGF0YTp7aWQ6dC5pZC50b1N0cmluZygpLGxhYmVsVGV4dDp0LmRlc2NyLGhlaWdodDp0LmhlaWdodCx3aWR0aDp0LndpZHRoLGxldmVsOm4sbm9kZUlkOnQuaWQscGFkZGluZzp0LnBhZGRpbmcsdHlwZTp0LnR5cGV9LHBvc2l0aW9uOnt4OnQueCx5OnQueX19KSx0LmNoaWxkcmVuJiZ0LmNoaWxkcmVuLmZvckVhY2goaT0+e255ZShpLGUscixuKzEpLGUuYWRkKHtncm91cDoiZWRnZXMiLGRhdGE6e2lkOmAke3QuaWR9XyR7aS5pZH1gLHNvdXJjZTp0LmlkLHRhcmdldDppLmlkLGRlcHRoOm4sc2VjdGlvbjppLnNlY3Rpb259fSl9KX1mdW5jdGlvbiBrZXQodCxlKXtyZXR1cm4gbmV3IFByb21pc2Uocj0+e2xldCBuPUdlKCJib2R5IikuYXBwZW5kKCJkaXYiKS5hdHRyKCJpZCIsImN5IikuYXR0cigic3R5bGUiLCJkaXNwbGF5Om5vbmUiKSxpPXNsKHtjb250YWluZXI6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImN5Iiksc3R5bGU6W3tzZWxlY3RvcjoiZWRnZSIsc3R5bGU6eyJjdXJ2ZS1zdHlsZSI6ImJlemllciJ9fV19KTtuLnJlbW92ZSgpLG55ZSh0LGksZSwwKSxpLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihhKXthLmxheW91dERpbWVuc2lvbnM9KCk9PntsZXQgcz1hLmRhdGEoKTtyZXR1cm57dzpzLndpZHRoLGg6cy5oZWlnaHR9fX0pLGkubGF5b3V0KHtuYW1lOiJjb3NlLWJpbGtlbnQiLHF1YWxpdHk6InByb29mIixzdHlsZUVuYWJsZWQ6ITEsYW5pbWF0ZTohMX0pLnJ1bigpLGkucmVhZHkoYT0+e1guaW5mbygiUmVhZHkiLGEpLHIoaSl9KX0pfWZ1bmN0aW9uIEVldCh0LGUpe2Uubm9kZXMoKS5tYXAoKHIsbik9PntsZXQgaT1yLmRhdGEoKTtpLng9ci5wb3NpdGlvbigpLngsaS55PXIucG9zaXRpb24oKS55LEoxZSh0LGkpO2xldCBhPXQuZ2V0RWxlbWVudEJ5SWQoaS5ub2RlSWQpO1guaW5mbygiaWQ6IixuLCJQb3NpdGlvbjogKCIsci5wb3NpdGlvbigpLngsIiwgIixyLnBvc2l0aW9uKCkueSwiKSIsaSksYS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtyLnBvc2l0aW9uKCkueC1pLndpZHRoLzJ9LCAke3IucG9zaXRpb24oKS55LWkuaGVpZ2h0LzJ9KWApLGEuYXR0cigiYXR0ciIsYGFwYS0ke259KWApfSl9dmFyIHR5ZSxDZXQsaXllLGF5ZT1OKCgpPT57InVzZSBzdHJpY3QiO29GKCk7dHllPUFhKFExZSgpLDEpO2ZyKCk7R3QoKTt5dCgpO1ZsKCk7eGkoKTtleWUoKTtfYSgpO3NsLnVzZSh0eWUuZGVmYXVsdCk7byhyeWUsImRyYXdOb2RlcyIpO28od2V0LCJkcmF3RWRnZXMiKTtvKG55ZSwiYWRkTm9kZXMiKTtvKGtldCwibGF5b3V0TWluZG1hcCIpO28oRWV0LCJwb3NpdGlvbk5vZGVzIik7Q2V0PW8oYXN5bmModCxlLHIsbik9PntYLmRlYnVnKGBSZW5kZXJpbmcgbWluZG1hcCBkaWFncmFtCmArdCk7bGV0IGk9bi5kYixhPWkuZ2V0TWluZG1hcCgpO2lmKCFhKXJldHVybjtsZXQgcz1tZSgpO3MuaHRtbExhYmVscz0hMTtsZXQgbD1MaShlKSx1PWwuYXBwZW5kKCJnIik7dS5hdHRyKCJjbGFzcyIsIm1pbmRtYXAtZWRnZXMiKTtsZXQgaD1sLmFwcGVuZCgiZyIpO2guYXR0cigiY2xhc3MiLCJtaW5kbWFwLW5vZGVzIiksYXdhaXQgcnllKGksaCxhLC0xLHMpO2xldCBmPWF3YWl0IGtldChhLHMpO3dldCh1LGYpLEVldChpLGYpLExvKHZvaWQgMCxsLHMubWluZG1hcD8ucGFkZGluZz8/b3IubWluZG1hcC5wYWRkaW5nLHMubWluZG1hcD8udXNlTWF4V2lkdGg/P29yLm1pbmRtYXAudXNlTWF4V2lkdGgpfSwiZHJhdyIpLGl5ZT17ZHJhdzpDZXR9fSk7dmFyIEFldCxfZXQsc3llLG95ZT1OKCgpPT57InVzZSBzdHJpY3QiO0tzKCk7QWV0PW8odD0+e2xldCBlPSIiO2ZvcihsZXQgcj0wO3I8dC5USEVNRV9DT0xPUl9MSU1JVDtyKyspdFsibGluZUNvbG9yIityXT10WyJsaW5lQ29sb3IiK3JdfHx0WyJjU2NhbGVJbnYiK3JdLGxhKHRbImxpbmVDb2xvciIrcl0pP3RbImxpbmVDb2xvciIrcl09THQodFsibGluZUNvbG9yIityXSwyMCk6dFsibGluZUNvbG9yIityXT1PdCh0WyJsaW5lQ29sb3IiK3JdLDIwKTtmb3IobGV0IHI9MDtyPHQuVEhFTUVfQ09MT1JfTElNSVQ7cisrKXtsZXQgbj0iIisoMTctMypyKTtlKz1gCiAgICAuc2VjdGlvbi0ke3ItMX0gcmVjdCwgLnNlY3Rpb24tJHtyLTF9IHBhdGgsIC5zZWN0aW9uLSR7ci0xfSBjaXJjbGUsIC5zZWN0aW9uLSR7ci0xfSBwb2x5Z29uLCAuc2VjdGlvbi0ke3ItMX0gcGF0aCAgewogICAgICBmaWxsOiAke3RbImNTY2FsZSIrcl19OwogICAgfQogICAgLnNlY3Rpb24tJHtyLTF9IHRleHQgewogICAgIGZpbGw6ICR7dFsiY1NjYWxlTGFiZWwiK3JdfTsKICAgIH0KICAgIC5ub2RlLWljb24tJHtyLTF9IHsKICAgICAgZm9udC1zaXplOiA0MHB4OwogICAgICBjb2xvcjogJHt0WyJjU2NhbGVMYWJlbCIrcl19OwogICAgfQogICAgLnNlY3Rpb24tZWRnZS0ke3ItMX17CiAgICAgIHN0cm9rZTogJHt0WyJjU2NhbGUiK3JdfTsKICAgIH0KICAgIC5lZGdlLWRlcHRoLSR7ci0xfXsKICAgICAgc3Ryb2tlLXdpZHRoOiAke259OwogICAgfQogICAgLnNlY3Rpb24tJHtyLTF9IGxpbmUgewogICAgICBzdHJva2U6ICR7dFsiY1NjYWxlSW52IityXX0gOwogICAgICBzdHJva2Utd2lkdGg6IDM7CiAgICB9CgogICAgLmRpc2FibGVkLCAuZGlzYWJsZWQgY2lyY2xlLCAuZGlzYWJsZWQgdGV4dCB7CiAgICAgIGZpbGw6IGxpZ2h0Z3JheTsKICAgIH0KICAgIC5kaXNhYmxlZCB0ZXh0IHsKICAgICAgZmlsbDogI2VmZWZlZjsKICAgIH0KICAgIGB9cmV0dXJuIGV9LCJnZW5TZWN0aW9ucyIpLF9ldD1vKHQ9PmAKICAuZWRnZSB7CiAgICBzdHJva2Utd2lkdGg6IDM7CiAgfQogICR7QWV0KHQpfQogIC5zZWN0aW9uLXJvb3QgcmVjdCwgLnNlY3Rpb24tcm9vdCBwYXRoLCAuc2VjdGlvbi1yb290IGNpcmNsZSwgLnNlY3Rpb24tcm9vdCBwb2x5Z29uICB7CiAgICBmaWxsOiAke3QuZ2l0MH07CiAgfQogIC5zZWN0aW9uLXJvb3QgdGV4dCB7CiAgICBmaWxsOiAke3QuZ2l0QnJhbmNoTGFiZWwwfTsKICB9CiAgLmljb24tY29udGFpbmVyIHsKICAgIGhlaWdodDoxMDAlOwogICAgZGlzcGxheTogZmxleDsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICB9CiAgLmVkZ2UgewogICAgZmlsbDogbm9uZTsKICB9CiAgLm1pbmRtYXAtbm9kZS1sYWJlbCB7CiAgICBkeTogMWVtOwogICAgYWxpZ25tZW50LWJhc2VsaW5lOiBtaWRkbGU7CiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogICAgZG9taW5hbnQtYmFzZWxpbmU6IG1pZGRsZTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICB9CmAsImdldFN0eWxlcyIpLHN5ZT1fZXR9KTt2YXIgbHllPXt9O3VyKGx5ZSx7ZGlhZ3JhbTooKT0+RGV0fSk7dmFyIERldCxjeWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtCMGUoKTtGMGUoKTtheWUoKTtveWUoKTtEZXQ9e2dldCBkYigpe3JldHVybiBuZXcgcDZ9LHJlbmRlcmVyOml5ZSxwYXJzZXI6UDBlLHN0eWxlczpzeWV9fSk7dmFyIGRGLGZ5ZSxkeWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtkRj1mdW5jdGlvbigpe3ZhciB0PW8oZnVuY3Rpb24oXyxDLEQsTyl7Zm9yKEQ9RHx8e30sTz1fLmxlbmd0aDtPLS07RFtfW09dXT1DKTtyZXR1cm4gRH0sIm8iKSxlPVsxLDRdLHI9WzEsMTNdLG49WzEsMTJdLGk9WzEsMTVdLGE9WzEsMTZdLHM9WzEsMjBdLGw9WzEsMTldLHU9WzYsNyw4XSxoPVsxLDI2XSxmPVsxLDI0XSxkPVsxLDI1XSxwPVs2LDcsMTFdLG09WzEsMzFdLGc9WzYsNywxMSwyNF0seT1bMSw2LDEzLDE2LDE3LDIwLDIzXSx2PVsxLDM1XSx4PVsxLDM2XSxiPVsxLDYsNywxMSwxMywxNiwxNywyMCwyM10sVD1bMSwzOF0sUz17dHJhY2U6byhmdW5jdGlvbigpe30sInRyYWNlIikseXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxtaW5kTWFwOjQsc3BhY2VMaW5lczo1LFNQQUNFTElORTo2LE5MOjcsS0FOQkFOOjgsZG9jdW1lbnQ6OSxzdG9wOjEwLEVPRjoxMSxzdGF0ZW1lbnQ6MTIsU1BBQ0VMSVNUOjEzLG5vZGU6MTQsc2hhcGVEYXRhOjE1LElDT046MTYsQ0xBU1M6MTcsbm9kZVdpdGhJZDoxOCxub2RlV2l0aG91dElkOjE5LE5PREVfRFNUQVJUOjIwLE5PREVfREVTQ1I6MjEsTk9ERV9ERU5EOjIyLE5PREVfSUQ6MjMsU0hBUEVfREFUQToyNCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNjoiU1BBQ0VMSU5FIiw3OiJOTCIsODoiS0FOQkFOIiwxMToiRU9GIiwxMzoiU1BBQ0VMSVNUIiwxNjoiSUNPTiIsMTc6IkNMQVNTIiwyMDoiTk9ERV9EU1RBUlQiLDIxOiJOT0RFX0RFU0NSIiwyMjoiTk9ERV9ERU5EIiwyMzoiTk9ERV9JRCIsMjQ6IlNIQVBFX0RBVEEifSxwcm9kdWN0aW9uc186WzAsWzMsMV0sWzMsMl0sWzUsMV0sWzUsMl0sWzUsMl0sWzQsMl0sWzQsM10sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDJdLFsxMCwyXSxbOSwzXSxbOSwyXSxbMTIsM10sWzEyLDJdLFsxMiwyXSxbMTIsMl0sWzEyLDFdLFsxMiwyXSxbMTIsMV0sWzEyLDFdLFsxMiwxXSxbMTIsMV0sWzE0LDFdLFsxNCwxXSxbMTksM10sWzE4LDFdLFsxOCw0XSxbMTUsMl0sWzE1LDFdXSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24oQyxELE8sUixrLEwsQSl7dmFyIEk9TC5sZW5ndGgtMTtzd2l0Y2goayl7Y2FzZSA2OmNhc2UgNzpyZXR1cm4gUjtjYXNlIDg6Ui5nZXRMb2dnZXIoKS50cmFjZSgiU3RvcCBOTCAiKTticmVhaztjYXNlIDk6Ui5nZXRMb2dnZXIoKS50cmFjZSgiU3RvcCBFT0YgIik7YnJlYWs7Y2FzZSAxMTpSLmdldExvZ2dlcigpLnRyYWNlKCJTdG9wIE5MMiAiKTticmVhaztjYXNlIDEyOlIuZ2V0TG9nZ2VyKCkudHJhY2UoIlN0b3AgRU9GMiAiKTticmVhaztjYXNlIDE1OlIuZ2V0TG9nZ2VyKCkuaW5mbygiTm9kZTogIixMW0ktMV0uaWQpLFIuYWRkTm9kZShMW0ktMl0ubGVuZ3RoLExbSS0xXS5pZCxMW0ktMV0uZGVzY3IsTFtJLTFdLnR5cGUsTFtJXSk7YnJlYWs7Y2FzZSAxNjpSLmdldExvZ2dlcigpLmluZm8oIk5vZGU6ICIsTFtJXS5pZCksUi5hZGROb2RlKExbSS0xXS5sZW5ndGgsTFtJXS5pZCxMW0ldLmRlc2NyLExbSV0udHlwZSk7YnJlYWs7Y2FzZSAxNzpSLmdldExvZ2dlcigpLnRyYWNlKCJJY29uOiAiLExbSV0pLFIuZGVjb3JhdGVOb2RlKHtpY29uOkxbSV19KTticmVhaztjYXNlIDE4OmNhc2UgMjM6Ui5kZWNvcmF0ZU5vZGUoe2NsYXNzOkxbSV19KTticmVhaztjYXNlIDE5OlIuZ2V0TG9nZ2VyKCkudHJhY2UoIlNQQUNFTElTVCIpO2JyZWFrO2Nhc2UgMjA6Ui5nZXRMb2dnZXIoKS50cmFjZSgiTm9kZTogIixMW0ktMV0uaWQpLFIuYWRkTm9kZSgwLExbSS0xXS5pZCxMW0ktMV0uZGVzY3IsTFtJLTFdLnR5cGUsTFtJXSk7YnJlYWs7Y2FzZSAyMTpSLmdldExvZ2dlcigpLnRyYWNlKCJOb2RlOiAiLExbSV0uaWQpLFIuYWRkTm9kZSgwLExbSV0uaWQsTFtJXS5kZXNjcixMW0ldLnR5cGUpO2JyZWFrO2Nhc2UgMjI6Ui5kZWNvcmF0ZU5vZGUoe2ljb246TFtJXX0pO2JyZWFrO2Nhc2UgMjc6Ui5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBmb3VuZCAuLiIsTFtJLTJdKSx0aGlzLiQ9e2lkOkxbSS0xXSxkZXNjcjpMW0ktMV0sdHlwZTpSLmdldFR5cGUoTFtJLTJdLExbSV0pfTticmVhaztjYXNlIDI4OnRoaXMuJD17aWQ6TFtJXSxkZXNjcjpMW0ldLHR5cGU6MH07YnJlYWs7Y2FzZSAyOTpSLmdldExvZ2dlcigpLnRyYWNlKCJub2RlIGZvdW5kIC4uIixMW0ktM10pLHRoaXMuJD17aWQ6TFtJLTNdLGRlc2NyOkxbSS0xXSx0eXBlOlIuZ2V0VHlwZShMW0ktMl0sTFtJXSl9O2JyZWFrO2Nhc2UgMzA6dGhpcy4kPUxbSS0xXStMW0ldO2JyZWFrO2Nhc2UgMzE6dGhpcy4kPUxbSV07YnJlYWt9fSwiYW5vbnltb3VzIiksdGFibGU6W3szOjEsNDoyLDU6Myw2OlsxLDVdLDg6ZX0sezE6WzNdfSx7MTpbMiwxXX0sezQ6Niw2OlsxLDddLDc6WzEsOF0sODplfSx7NjpyLDc6WzEsMTBdLDk6OSwxMjoxMSwxMzpuLDE0OjE0LDE2OmksMTc6YSwxODoxNywxOToxOCwyMDpzLDIzOmx9LHQodSxbMiwzXSksezE6WzIsMl19LHQodSxbMiw0XSksdCh1LFsyLDVdKSx7MTpbMiw2XSw2OnIsMTI6MjEsMTM6biwxNDoxNCwxNjppLDE3OmEsMTg6MTcsMTk6MTgsMjA6cywyMzpsfSx7NjpyLDk6MjIsMTI6MTEsMTM6biwxNDoxNCwxNjppLDE3OmEsMTg6MTcsMTk6MTgsMjA6cywyMzpsfSx7NjpoLDc6ZiwxMDoyMywxMTpkfSx0KHAsWzIsMjRdLHsxODoxNywxOToxOCwxNDoyNywxNjpbMSwyOF0sMTc6WzEsMjldLDIwOnMsMjM6bH0pLHQocCxbMiwxOV0pLHQocCxbMiwyMV0sezE1OjMwLDI0Om19KSx0KHAsWzIsMjJdKSx0KHAsWzIsMjNdKSx0KGcsWzIsMjVdKSx0KGcsWzIsMjZdKSx0KGcsWzIsMjhdLHsyMDpbMSwzMl19KSx7MjE6WzEsMzNdfSx7NjpoLDc6ZiwxMDozNCwxMTpkfSx7MTpbMiw3XSw2OnIsMTI6MjEsMTM6biwxNDoxNCwxNjppLDE3OmEsMTg6MTcsMTk6MTgsMjA6cywyMzpsfSx0KHksWzIsMTRdLHs3OnYsMTE6eH0pLHQoYixbMiw4XSksdChiLFsyLDldKSx0KGIsWzIsMTBdKSx0KHAsWzIsMTZdLHsxNTozNywyNDptfSksdChwLFsyLDE3XSksdChwLFsyLDE4XSksdChwLFsyLDIwXSx7MjQ6VH0pLHQoZyxbMiwzMV0pLHsyMTpbMSwzOV19LHsyMjpbMSw0MF19LHQoeSxbMiwxM10sezc6diwxMTp4fSksdChiLFsyLDExXSksdChiLFsyLDEyXSksdChwLFsyLDE1XSx7MjQ6VH0pLHQoZyxbMiwzMF0pLHsyMjpbMSw0MV19LHQoZyxbMiwyN10pLHQoZyxbMiwyOV0pXSxkZWZhdWx0QWN0aW9uczp7MjpbMiwxXSw2OlsyLDJdfSxwYXJzZUVycm9yOm8oZnVuY3Rpb24oQyxEKXtpZihELnJlY292ZXJhYmxlKXRoaXMudHJhY2UoQyk7ZWxzZXt2YXIgTz1uZXcgRXJyb3IoQyk7dGhyb3cgTy5oYXNoPUQsT319LCJwYXJzZUVycm9yIikscGFyc2U6byhmdW5jdGlvbihDKXt2YXIgRD10aGlzLE89WzBdLFI9W10saz1bbnVsbF0sTD1bXSxBPXRoaXMudGFibGUsST0iIixNPTAsUD0wLEI9MCxGPTIsej0xLCQ9TC5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxVPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksSz17eXk6e319O2Zvcih2YXIgZWUgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxlZSkmJihLLnl5W2VlXT10aGlzLnl5W2VlXSk7VS5zZXRJbnB1dChDLEsueXkpLEsueXkubGV4ZXI9VSxLLnl5LnBhcnNlcj10aGlzLHR5cGVvZiBVLnl5bGxvYz4idSImJihVLnl5bGxvYz17fSk7dmFyIFk9VS55eWxsb2M7TC5wdXNoKFkpO3ZhciBjZT1VLm9wdGlvbnMmJlUub3B0aW9ucy5yYW5nZXM7dHlwZW9mIEsueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9Sy55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBaKEJlKXtPLmxlbmd0aD1PLmxlbmd0aC0yKkJlLGsubGVuZ3RoPWsubGVuZ3RoLUJlLEwubGVuZ3RoPUwubGVuZ3RoLUJlfW8oWiwicG9wU3RhY2siKTtmdW5jdGlvbiB1ZSgpe3ZhciBCZTtyZXR1cm4gQmU9Ui5wb3AoKXx8VS5sZXgoKXx8eix0eXBlb2YgQmUhPSJudW1iZXIiJiYoQmUgaW5zdGFuY2VvZiBBcnJheSYmKFI9QmUsQmU9Ui5wb3AoKSksQmU9RC5zeW1ib2xzX1tCZV18fEJlKSxCZX1vKHVlLCJsZXgiKTtmb3IodmFyIFEsaixuZSx0ZSxoZSxsZSxKPXt9LFNlLHNlLGFlLE9lOzspe2lmKG5lPU9bTy5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1tuZV0/dGU9dGhpcy5kZWZhdWx0QWN0aW9uc1tuZV06KChRPT09bnVsbHx8dHlwZW9mIFE+InUiKSYmKFE9dWUoKSksdGU9QVtuZV0mJkFbbmVdW1FdKSx0eXBlb2YgdGU+InUifHwhdGUubGVuZ3RofHwhdGVbMF0pe3ZhciB5ZT0iIjtPZT1bXTtmb3IoU2UgaW4gQVtuZV0pdGhpcy50ZXJtaW5hbHNfW1NlXSYmU2U+RiYmT2UucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW1NlXSsiJyIpO1Uuc2hvd1Bvc2l0aW9uP3llPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKE0rMSkrYDoKYCtVLnNob3dQb3NpdGlvbigpK2AKRXhwZWN0aW5nIGArT2Uuam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tRXXx8USkrIiciOnllPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKE0rMSkrIjogVW5leHBlY3RlZCAiKyhRPT16PyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW1FdfHxRKSsiJyIpLHRoaXMucGFyc2VFcnJvcih5ZSx7dGV4dDpVLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tRXXx8USxsaW5lOlUueXlsaW5lbm8sbG9jOlksZXhwZWN0ZWQ6T2V9KX1pZih0ZVswXWluc3RhbmNlb2YgQXJyYXkmJnRlLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrbmUrIiwgdG9rZW46ICIrUSk7c3dpdGNoKHRlWzBdKXtjYXNlIDE6Ty5wdXNoKFEpLGsucHVzaChVLnl5dGV4dCksTC5wdXNoKFUueXlsbG9jKSxPLnB1c2godGVbMV0pLFE9bnVsbCxqPyhRPWosaj1udWxsKTooUD1VLnl5bGVuZyxJPVUueXl0ZXh0LE09VS55eWxpbmVubyxZPVUueXlsbG9jLEI+MCYmQi0tKTticmVhaztjYXNlIDI6aWYoc2U9dGhpcy5wcm9kdWN0aW9uc19bdGVbMV1dWzFdLEouJD1rW2subGVuZ3RoLXNlXSxKLl8kPXtmaXJzdF9saW5lOkxbTC5sZW5ndGgtKHNlfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6TFtMLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOkxbTC5sZW5ndGgtKHNlfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOkxbTC5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LGNlJiYoSi5fJC5yYW5nZT1bTFtMLmxlbmd0aC0oc2V8fDEpXS5yYW5nZVswXSxMW0wubGVuZ3RoLTFdLnJhbmdlWzFdXSksbGU9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KEosW0ksUCxNLEsueXksdGVbMV0sayxMXS5jb25jYXQoJCkpLHR5cGVvZiBsZTwidSIpcmV0dXJuIGxlO3NlJiYoTz1PLnNsaWNlKDAsLTEqc2UqMiksaz1rLnNsaWNlKDAsLTEqc2UpLEw9TC5zbGljZSgwLC0xKnNlKSksTy5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW3RlWzFdXVswXSksay5wdXNoKEouJCksTC5wdXNoKEouXyQpLGFlPUFbT1tPLmxlbmd0aC0yXV1bT1tPLmxlbmd0aC0xXV0sTy5wdXNoKGFlKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfSwicGFyc2UiKX0sdz1mdW5jdGlvbigpe3ZhciBfPXtFT0Y6MSxwYXJzZUVycm9yOm8oZnVuY3Rpb24oRCxPKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKEQsTyk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoRCl9LCJwYXJzZUVycm9yIiksc2V0SW5wdXQ6byhmdW5jdGlvbihDLEQpe3JldHVybiB0aGlzLnl5PUR8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PUMsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LCJzZXRJbnB1dCIpLGlucHV0Om8oZnVuY3Rpb24oKXt2YXIgQz10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9Qyx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9Qyx0aGlzLm1hdGNoZWQrPUM7dmFyIEQ9Qy5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIEQ/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLEN9LCJpbnB1dCIpLHVucHV0Om8oZnVuY3Rpb24oQyl7dmFyIEQ9Qy5sZW5ndGgsTz1DLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9Qyt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtRCksdGhpcy5vZmZzZXQtPUQ7dmFyIFI9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksTy5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPU8ubGVuZ3RoLTEpO3ZhciBrPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpPPyhPLmxlbmd0aD09PVIubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStSW1IubGVuZ3RoLU8ubGVuZ3RoXS5sZW5ndGgtT1swXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLUR9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1ba1swXSxrWzBdK3RoaXMueXlsZW5nLURdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sInVucHV0IiksbW9yZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30sIm1vcmUiKSxyZWplY3Q6byhmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sInJlamVjdCIpLGxlc3M6byhmdW5jdGlvbihDKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoQykpfSwibGVzcyIpLHBhc3RJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIEM9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybihDLmxlbmd0aD4yMD8iLi4uIjoiIikrQy5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sInBhc3RJbnB1dCIpLHVwY29taW5nSW5wdXQ6byhmdW5jdGlvbigpe3ZhciBDPXRoaXMubWF0Y2g7cmV0dXJuIEMubGVuZ3RoPDIwJiYoQys9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtQy5sZW5ndGgpKSwoQy5zdWJzdHIoMCwyMCkrKEMubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LCJ1cGNvbWluZ0lucHV0Iiksc2hvd1Bvc2l0aW9uOm8oZnVuY3Rpb24oKXt2YXIgQz10aGlzLnBhc3RJbnB1dCgpLEQ9bmV3IEFycmF5KEMubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gQyt0aGlzLnVwY29taW5nSW5wdXQoKStgCmArRCsiXiJ9LCJzaG93UG9zaXRpb24iKSx0ZXN0X21hdGNoOm8oZnVuY3Rpb24oQyxEKXt2YXIgTyxSLGs7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKGs9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoay55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxSPUNbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLFImJih0aGlzLnl5bGluZW5vKz1SLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOlI/UltSLmxlbmd0aC0xXS5sZW5ndGgtUltSLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK0NbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9Q1swXSx0aGlzLm1hdGNoKz1DWzBdLHRoaXMubWF0Y2hlcz1DLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKENbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPUNbMF0sTz10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxELHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLE8pcmV0dXJuIE87aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIEwgaW4gayl0aGlzW0xdPWtbTF07cmV0dXJuITF9cmV0dXJuITF9LCJ0ZXN0X21hdGNoIiksbmV4dDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIEMsRCxPLFI7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgaz10aGlzLl9jdXJyZW50UnVsZXMoKSxMPTA7TDxrLmxlbmd0aDtMKyspaWYoTz10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2tbTF1dKSxPJiYoIUR8fE9bMF0ubGVuZ3RoPkRbMF0ubGVuZ3RoKSl7aWYoRD1PLFI9TCx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZihDPXRoaXMudGVzdF9tYXRjaChPLGtbTF0pLEMhPT0hMSlyZXR1cm4gQztpZih0aGlzLl9iYWNrdHJhY2spe0Q9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gRD8oQz10aGlzLnRlc3RfbWF0Y2goRCxrW1JdKSxDIT09ITE/QzohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sIm5leHQiKSxsZXg6byhmdW5jdGlvbigpe3ZhciBEPXRoaXMubmV4dCgpO3JldHVybiBEfHx0aGlzLmxleCgpfSwibGV4IiksYmVnaW46byhmdW5jdGlvbihEKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goRCl9LCJiZWdpbiIpLHBvcFN0YXRlOm8oZnVuY3Rpb24oKXt2YXIgRD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBEPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSwicG9wU3RhdGUiKSxfY3VycmVudFJ1bGVzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSwiX2N1cnJlbnRSdWxlcyIpLHRvcFN0YXRlOm8oZnVuY3Rpb24oRCl7cmV0dXJuIEQ9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhEfHwwKSxEPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbRF06IklOSVRJQUwifSwidG9wU3RhdGUiKSxwdXNoU3RhdGU6byhmdW5jdGlvbihEKXt0aGlzLmJlZ2luKEQpfSwicHVzaFN0YXRlIiksc3RhdGVTdGFja1NpemU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sInN0YXRlU3RhY2tTaXplIiksb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24oRCxPLFIsayl7dmFyIEw9aztzd2l0Y2goUil7Y2FzZSAwOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgic2hhcGVEYXRhIiksTy55eXRleHQ9IiIsMjQ7YnJlYWs7Y2FzZSAxOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgic2hhcGVEYXRhU3RyIiksMjQ7YnJlYWs7Y2FzZSAyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMjQ7YnJlYWs7Y2FzZSAzOmxldCBBPS9cblxzKi9nO3JldHVybiBPLnl5dGV4dD1PLnl5dGV4dC5yZXBsYWNlKEEsIjxici8+IiksMjQ7YnJlYWs7Y2FzZSA0OnJldHVybiAyNDtjYXNlIDU6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNjpyZXR1cm4gRC5nZXRMb2dnZXIoKS50cmFjZSgiRm91bmQgY29tbWVudCIsTy55eXRleHQpLDY7YnJlYWs7Y2FzZSA3OnJldHVybiA4O2Nhc2UgODp0aGlzLmJlZ2luKCJDTEFTUyIpO2JyZWFrO2Nhc2UgOTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE3O2JyZWFrO2Nhc2UgMTA6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTE6RC5nZXRMb2dnZXIoKS50cmFjZSgiQmVnaW4gaWNvbiIpLHRoaXMuYmVnaW4oIklDT04iKTticmVhaztjYXNlIDEyOnJldHVybiBELmdldExvZ2dlcigpLnRyYWNlKCJTUEFDRUxJTkUiKSw2O2JyZWFrO2Nhc2UgMTM6cmV0dXJuIDc7Y2FzZSAxNDpyZXR1cm4gMTY7Y2FzZSAxNTpELmdldExvZ2dlcigpLnRyYWNlKCJlbmQgaWNvbiIpLHRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE2OnJldHVybiBELmdldExvZ2dlcigpLnRyYWNlKCJFeHBsb2Rpbmcgbm9kZSIpLHRoaXMuYmVnaW4oIk5PREUiKSwyMDticmVhaztjYXNlIDE3OnJldHVybiBELmdldExvZ2dlcigpLnRyYWNlKCJDbG91ZCIpLHRoaXMuYmVnaW4oIk5PREUiKSwyMDticmVhaztjYXNlIDE4OnJldHVybiBELmdldExvZ2dlcigpLnRyYWNlKCJFeHBsb3Npb24gQmFuZyIpLHRoaXMuYmVnaW4oIk5PREUiKSwyMDticmVhaztjYXNlIDE5OnJldHVybiBELmdldExvZ2dlcigpLnRyYWNlKCJDbG91ZCBCYW5nIiksdGhpcy5iZWdpbigiTk9ERSIpLDIwO2JyZWFrO2Nhc2UgMjA6cmV0dXJuIHRoaXMuYmVnaW4oIk5PREUiKSwyMDticmVhaztjYXNlIDIxOnJldHVybiB0aGlzLmJlZ2luKCJOT0RFIiksMjA7YnJlYWs7Y2FzZSAyMjpyZXR1cm4gdGhpcy5iZWdpbigiTk9ERSIpLDIwO2JyZWFrO2Nhc2UgMjM6cmV0dXJuIHRoaXMuYmVnaW4oIk5PREUiKSwyMDticmVhaztjYXNlIDI0OnJldHVybiAxMztjYXNlIDI1OnJldHVybiAyMztjYXNlIDI2OnJldHVybiAxMTtjYXNlIDI3OnRoaXMuYmVnaW4oIk5TVFIyIik7YnJlYWs7Y2FzZSAyODpyZXR1cm4iTk9ERV9ERVNDUiI7Y2FzZSAyOTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAzMDpELmdldExvZ2dlcigpLnRyYWNlKCJTdGFydGluZyBOU1RSIiksdGhpcy5iZWdpbigiTlNUUiIpO2JyZWFrO2Nhc2UgMzE6cmV0dXJuIEQuZ2V0TG9nZ2VyKCkudHJhY2UoImRlc2NyaXB0aW9uOiIsTy55eXRleHQpLCJOT0RFX0RFU0NSIjticmVhaztjYXNlIDMyOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDMzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksRC5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgKSkiKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDM0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksRC5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgKSIpLCJOT0RFX0RFTkQiO2JyZWFrO2Nhc2UgMzU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxELmdldExvZ2dlcigpLnRyYWNlKCJub2RlIGVuZCAuLi4iLE8ueXl0ZXh0KSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDM2OnJldHVybiB0aGlzLnBvcFN0YXRlKCksRC5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgKCgiKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDM3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksRC5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgKC0iKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDM4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksRC5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgKC0iKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDM5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksRC5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgKCgiKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDQwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksRC5nZXRMb2dnZXIoKS50cmFjZSgibm9kZSBlbmQgKCgiKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDQxOnJldHVybiBELmdldExvZ2dlcigpLnRyYWNlKCJMb25nIGRlc2NyaXB0aW9uOiIsTy55eXRleHQpLDIxO2JyZWFrO2Nhc2UgNDI6cmV0dXJuIEQuZ2V0TG9nZ2VyKCkudHJhY2UoIkxvbmcgZGVzY3JpcHRpb246IixPLnl5dGV4dCksMjE7YnJlYWt9fSwiYW5vbnltb3VzIikscnVsZXM6Wy9eKD86QFx7KS9pLC9eKD86WyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W15cIl0rKS9pLC9eKD86W159XiJdKykvaSwvXig/Olx9KS9pLC9eKD86XHMqJSUuKikvaSwvXig/OmthbmJhblxiKS9pLC9eKD86Ojo6KS9pLC9eKD86LispL2ksL14oPzpcbikvaSwvXig/Ojo6aWNvblwoKS9pLC9eKD86W1xzXStbXG5dKS9pLC9eKD86W1xuXSspL2ksL14oPzpbXlwpXSspL2ksL14oPzpcKSkvaSwvXig/Oi1cKSkvaSwvXig/OlwoLSkvaSwvXig/OlwpXCkpL2ksL14oPzpcKSkvaSwvXig/OlwoXCgpL2ksL14oPzpce1x7KS9pLC9eKD86XCgpL2ksL14oPzpcWykvaSwvXig/Oltcc10rKS9pLC9eKD86W15cKFxbXG5cKVx7XH1AXSspL2ksL14oPzokKS9pLC9eKD86WyJdW2BdKS9pLC9eKD86W15gIl0rKS9pLC9eKD86W2BdWyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSspL2ksL14oPzpbIl0pL2ksL14oPzpbXCldXCkpL2ksL14oPzpbXCldKS9pLC9eKD86W1xdXSkvaSwvXig/Olx9XH0pL2ksL14oPzpcKC0pL2ksL14oPzotXCkpL2ksL14oPzpcKFwoKS9pLC9eKD86XCgpL2ksL14oPzpbXlwpXF1cKFx9XSspL2ksL14oPzouKyg/IVwoXCgpKS9pXSxjb25kaXRpb25zOntzaGFwZURhdGFFbmRCcmFja2V0OntydWxlczpbXSxpbmNsdXNpdmU6ITF9LHNoYXBlRGF0YVN0cjp7cnVsZXM6WzIsM10saW5jbHVzaXZlOiExfSxzaGFwZURhdGE6e3J1bGVzOlsxLDQsNV0saW5jbHVzaXZlOiExfSxDTEFTUzp7cnVsZXM6WzksMTBdLGluY2x1c2l2ZTohMX0sSUNPTjp7cnVsZXM6WzE0LDE1XSxpbmNsdXNpdmU6ITF9LE5TVFIyOntydWxlczpbMjgsMjldLGluY2x1c2l2ZTohMX0sTlNUUjp7cnVsZXM6WzMxLDMyXSxpbmNsdXNpdmU6ITF9LE5PREU6e3J1bGVzOlsyNywzMCwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Ml0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCw2LDcsOCwxMSwxMiwxMywxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNl0saW5jbHVzaXZlOiEwfX19O3JldHVybiBffSgpO1MubGV4ZXI9dztmdW5jdGlvbiBFKCl7dGhpcy55eT17fX1yZXR1cm4gbyhFLCJQYXJzZXIiKSxFLnByb3RvdHlwZT1TLFMuUGFyc2VyPUUsbmV3IEV9KCk7ZEYucGFyc2VyPWRGO2Z5ZT1kRn0pO3ZhciBvbCxtRixwRixnRixNZXQsSWV0LHB5ZSxPZXQsUGV0LFhpLEJldCxGZXQsJGV0LHpldCxHZXQsVmV0LFVldCxteWUsZ3llPU4oKCk9PnsidXNlIHN0cmljdCI7R3QoKTtwcigpO3l0KCk7X2EoKTtQVCgpO29sPVtdLG1GPVtdLHBGPTAsZ0Y9e30sTWV0PW8oKCk9PntvbD1bXSxtRj1bXSxwRj0wLGdGPXt9fSwiY2xlYXIiKSxJZXQ9byh0PT57aWYob2wubGVuZ3RoPT09MClyZXR1cm4gbnVsbDtsZXQgZT1vbFswXS5sZXZlbCxyPW51bGw7Zm9yKGxldCBuPW9sLmxlbmd0aC0xO24+PTA7bi0tKWlmKG9sW25dLmxldmVsPT09ZSYmIXImJihyPW9sW25dKSxvbFtuXS5sZXZlbDxlKXRocm93IG5ldyBFcnJvcignSXRlbXMgd2l0aG91dCBzZWN0aW9uIGRldGVjdGVkLCBmb3VuZCBzZWN0aW9uICgiJytvbFtuXS5sYWJlbCsnIiknKTtyZXR1cm4gdD09PXI/LmxldmVsP251bGw6cn0sImdldFNlY3Rpb24iKSxweWU9byhmdW5jdGlvbigpe3JldHVybiBtRn0sImdldFNlY3Rpb25zIiksT2V0PW8oZnVuY3Rpb24oKXtsZXQgdD1bXSxlPVtdLHI9cHllKCksbj1tZSgpO2ZvcihsZXQgaSBvZiByKXtsZXQgYT17aWQ6aS5pZCxsYWJlbDp3cihpLmxhYmVsPz8iIixuKSxpc0dyb3VwOiEwLHRpY2tldDppLnRpY2tldCxzaGFwZToia2FuYmFuU2VjdGlvbiIsbGV2ZWw6aS5sZXZlbCxsb29rOm4ubG9va307ZS5wdXNoKGEpO2xldCBzPW9sLmZpbHRlcihsPT5sLnBhcmVudElkPT09aS5pZCk7Zm9yKGxldCBsIG9mIHMpe2xldCB1PXtpZDpsLmlkLHBhcmVudElkOmkuaWQsbGFiZWw6d3IobC5sYWJlbD8/IiIsbiksaXNHcm91cDohMSx0aWNrZXQ6bD8udGlja2V0LHByaW9yaXR5Omw/LnByaW9yaXR5LGFzc2lnbmVkOmw/LmFzc2lnbmVkLGljb246bD8uaWNvbixzaGFwZToia2FuYmFuSXRlbSIsbGV2ZWw6bC5sZXZlbCxyeDo1LHJ5OjUsY3NzU3R5bGVzOlsidGV4dC1hbGlnbjogbGVmdCJdfTtlLnB1c2godSl9fXJldHVybntub2RlczplLGVkZ2VzOnQsb3RoZXI6e30sY29uZmlnOm1lKCl9fSwiZ2V0RGF0YSIpLFBldD1vKCh0LGUscixuLGkpPT57bGV0IGE9bWUoKSxzPWEubWluZG1hcD8ucGFkZGluZz8/b3IubWluZG1hcC5wYWRkaW5nO3N3aXRjaChuKXtjYXNlIFhpLlJPVU5ERURfUkVDVDpjYXNlIFhpLlJFQ1Q6Y2FzZSBYaS5IRVhBR09OOnMqPTJ9bGV0IGw9e2lkOndyKGUsYSl8fCJrYm4iK3BGKyssbGV2ZWw6dCxsYWJlbDp3cihyLGEpLHdpZHRoOmEubWluZG1hcD8ubWF4Tm9kZVdpZHRoPz9vci5taW5kbWFwLm1heE5vZGVXaWR0aCxwYWRkaW5nOnMsaXNHcm91cDohMX07aWYoaSE9PXZvaWQgMCl7bGV0IGg7aS5pbmNsdWRlcyhgCmApP2g9aStgCmA6aD1gewpgK2krYAp9YDtsZXQgZj1UbShoLHtzY2hlbWE6Ym19KTtpZihmLnNoYXBlJiYoZi5zaGFwZSE9PWYuc2hhcGUudG9Mb3dlckNhc2UoKXx8Zi5zaGFwZS5pbmNsdWRlcygiXyIpKSl0aHJvdyBuZXcgRXJyb3IoYE5vIHN1Y2ggc2hhcGU6ICR7Zi5zaGFwZX0uIFNoYXBlIG5hbWVzIHNob3VsZCBiZSBsb3dlcmNhc2UuYCk7Zj8uc2hhcGUmJmYuc2hhcGU9PT0ia2FuYmFuSXRlbSImJihsLnNoYXBlPWY/LnNoYXBlKSxmPy5sYWJlbCYmKGwubGFiZWw9Zj8ubGFiZWwpLGY/Lmljb24mJihsLmljb249Zj8uaWNvbi50b1N0cmluZygpKSxmPy5hc3NpZ25lZCYmKGwuYXNzaWduZWQ9Zj8uYXNzaWduZWQudG9TdHJpbmcoKSksZj8udGlja2V0JiYobC50aWNrZXQ9Zj8udGlja2V0LnRvU3RyaW5nKCkpLGY/LnByaW9yaXR5JiYobC5wcmlvcml0eT1mPy5wcmlvcml0eSl9bGV0IHU9SWV0KHQpO3U/bC5wYXJlbnRJZD11LmlkfHwia2JuIitwRisrOm1GLnB1c2gobCksb2wucHVzaChsKX0sImFkZE5vZGUiKSxYaT17REVGQVVMVDowLE5PX0JPUkRFUjowLFJPVU5ERURfUkVDVDoxLFJFQ1Q6MixDSVJDTEU6MyxDTE9VRDo0LEJBTkc6NSxIRVhBR09OOjZ9LEJldD1vKCh0LGUpPT57c3dpdGNoKFguZGVidWcoIkluIGdldCB0eXBlIix0LGUpLHQpe2Nhc2UiWyI6cmV0dXJuIFhpLlJFQ1Q7Y2FzZSIoIjpyZXR1cm4gZT09PSIpIj9YaS5ST1VOREVEX1JFQ1Q6WGkuQ0xPVUQ7Y2FzZSIoKCI6cmV0dXJuIFhpLkNJUkNMRTtjYXNlIikiOnJldHVybiBYaS5DTE9VRDtjYXNlIikpIjpyZXR1cm4gWGkuQkFORztjYXNlInt7IjpyZXR1cm4gWGkuSEVYQUdPTjtkZWZhdWx0OnJldHVybiBYaS5ERUZBVUxUfX0sImdldFR5cGUiKSxGZXQ9bygodCxlKT0+e2dGW3RdPWV9LCJzZXRFbGVtZW50Rm9ySWQiKSwkZXQ9byh0PT57aWYoIXQpcmV0dXJuO2xldCBlPW1lKCkscj1vbFtvbC5sZW5ndGgtMV07dC5pY29uJiYoci5pY29uPXdyKHQuaWNvbixlKSksdC5jbGFzcyYmKHIuY3NzQ2xhc3Nlcz13cih0LmNsYXNzLGUpKX0sImRlY29yYXRlTm9kZSIpLHpldD1vKHQ9Pntzd2l0Y2godCl7Y2FzZSBYaS5ERUZBVUxUOnJldHVybiJuby1ib3JkZXIiO2Nhc2UgWGkuUkVDVDpyZXR1cm4icmVjdCI7Y2FzZSBYaS5ST1VOREVEX1JFQ1Q6cmV0dXJuInJvdW5kZWQtcmVjdCI7Y2FzZSBYaS5DSVJDTEU6cmV0dXJuImNpcmNsZSI7Y2FzZSBYaS5DTE9VRDpyZXR1cm4iY2xvdWQiO2Nhc2UgWGkuQkFORzpyZXR1cm4iYmFuZyI7Y2FzZSBYaS5IRVhBR09OOnJldHVybiJoZXhnb24iO2RlZmF1bHQ6cmV0dXJuIm5vLWJvcmRlciJ9fSwidHlwZTJTdHIiKSxHZXQ9bygoKT0+WCwiZ2V0TG9nZ2VyIiksVmV0PW8odD0+Z0ZbdF0sImdldEVsZW1lbnRCeUlkIiksVWV0PXtjbGVhcjpNZXQsYWRkTm9kZTpQZXQsZ2V0U2VjdGlvbnM6cHllLGdldERhdGE6T2V0LG5vZGVUeXBlOlhpLGdldFR5cGU6QmV0LHNldEVsZW1lbnRGb3JJZDpGZXQsZGVjb3JhdGVOb2RlOiRldCx0eXBlMlN0cjp6ZXQsZ2V0TG9nZ2VyOkdldCxnZXRFbGVtZW50QnlJZDpWZXR9LG15ZT1VZXR9KTt2YXIgSGV0LHl5ZSx2eWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtHdCgpO3l0KCk7VmwoKTt4aSgpO19hKCk7YXcoKTttdygpO0hldD1vKGFzeW5jKHQsZSxyLG4pPT57WC5kZWJ1ZyhgUmVuZGVyaW5nIGthbmJhbiBkaWFncmFtCmArdCk7bGV0IGE9bi5kYi5nZXREYXRhKCkscz1tZSgpO3MuaHRtbExhYmVscz0hMTtsZXQgbD1MaShlKSx1PWwuYXBwZW5kKCJnIik7dS5hdHRyKCJjbGFzcyIsInNlY3Rpb25zIik7bGV0IGg9bC5hcHBlbmQoImciKTtoLmF0dHIoImNsYXNzIiwiaXRlbXMiKTtsZXQgZj1hLm5vZGVzLmZpbHRlcih2PT52LmlzR3JvdXApLGQ9MCxwPTEwLG09W10sZz0yNTtmb3IobGV0IHYgb2YgZil7bGV0IHg9cz8ua2FuYmFuPy5zZWN0aW9uV2lkdGh8fDIwMDtkPWQrMSx2Lng9eCpkKyhkLTEpKnAvMix2LndpZHRoPXgsdi55PTAsdi5oZWlnaHQ9eCozLHYucng9NSx2LnJ5PTUsdi5jc3NDbGFzc2VzPXYuY3NzQ2xhc3NlcysiIHNlY3Rpb24tIitkO2xldCBiPWF3YWl0IENtKHUsdik7Zz1NYXRoLm1heChnLGI/LmxhYmVsQkJveD8uaGVpZ2h0KSxtLnB1c2goYil9bGV0IHk9MDtmb3IobGV0IHYgb2YgZil7bGV0IHg9bVt5XTt5PXkrMTtsZXQgYj1zPy5rYW5iYW4/LnNlY3Rpb25XaWR0aHx8MjAwLFQ9LWIqMy8yK2csUz1ULHc9YS5ub2Rlcy5maWx0ZXIoQz0+Qy5wYXJlbnRJZD09PXYuaWQpO2ZvcihsZXQgQyBvZiB3KXtpZihDLmlzR3JvdXApdGhyb3cgbmV3IEVycm9yKCJHcm91cHMgd2l0aGluIGdyb3VwcyBhcmUgbm90IGFsbG93ZWQgaW4gS2FuYmFuIGRpYWdyYW1zIik7Qy54PXYueCxDLndpZHRoPWItMS41KnA7bGV0IE89KGF3YWl0IEFtKGgsQyx7Y29uZmlnOnN9KSkubm9kZSgpLmdldEJCb3goKTtDLnk9UytPLmhlaWdodC8yLGF3YWl0IE0yKEMpLFM9Qy55K08uaGVpZ2h0LzIrcC8yfWxldCBFPXguY2x1c3Rlci5zZWxlY3QoInJlY3QiKSxfPU1hdGgubWF4KFMtVCszKnAsNTApKyhnLTI1KTtFLmF0dHIoImhlaWdodCIsXyl9TG8odm9pZCAwLGwscy5taW5kbWFwPy5wYWRkaW5nPz9vci5rYW5iYW4ucGFkZGluZyxzLm1pbmRtYXA/LnVzZU1heFdpZHRoPz9vci5rYW5iYW4udXNlTWF4V2lkdGgpfSwiZHJhdyIpLHl5ZT17ZHJhdzpIZXR9fSk7dmFyIFdldCxxZXQseHllLGJ5ZT1OKCgpPT57InVzZSBzdHJpY3QiO0tzKCk7WG0oKTtXZXQ9byh0PT57bGV0IGU9IiI7Zm9yKGxldCBuPTA7bjx0LlRIRU1FX0NPTE9SX0xJTUlUO24rKyl0WyJsaW5lQ29sb3IiK25dPXRbImxpbmVDb2xvciIrbl18fHRbImNTY2FsZUludiIrbl0sbGEodFsibGluZUNvbG9yIituXSk/dFsibGluZUNvbG9yIituXT1MdCh0WyJsaW5lQ29sb3IiK25dLDIwKTp0WyJsaW5lQ29sb3IiK25dPU90KHRbImxpbmVDb2xvciIrbl0sMjApO2xldCByPW8oKG4saSk9PnQuZGFya01vZGU/T3QobixpKTpMdChuLGkpLCJhZGp1c3RlciIpO2ZvcihsZXQgbj0wO248dC5USEVNRV9DT0xPUl9MSU1JVDtuKyspe2xldCBpPSIiKygxNy0zKm4pO2UrPWAKICAgIC5zZWN0aW9uLSR7bi0xfSByZWN0LCAuc2VjdGlvbi0ke24tMX0gcGF0aCwgLnNlY3Rpb24tJHtuLTF9IGNpcmNsZSwgLnNlY3Rpb24tJHtuLTF9IHBvbHlnb24sIC5zZWN0aW9uLSR7bi0xfSBwYXRoICB7CiAgICAgIGZpbGw6ICR7cih0WyJjU2NhbGUiK25dLDEwKX07CiAgICAgIHN0cm9rZTogJHtyKHRbImNTY2FsZSIrbl0sMTApfTsKCiAgICB9CiAgICAuc2VjdGlvbi0ke24tMX0gdGV4dCB7CiAgICAgZmlsbDogJHt0WyJjU2NhbGVMYWJlbCIrbl19OwogICAgfQogICAgLm5vZGUtaWNvbi0ke24tMX0gewogICAgICBmb250LXNpemU6IDQwcHg7CiAgICAgIGNvbG9yOiAke3RbImNTY2FsZUxhYmVsIituXX07CiAgICB9CiAgICAuc2VjdGlvbi1lZGdlLSR7bi0xfXsKICAgICAgc3Ryb2tlOiAke3RbImNTY2FsZSIrbl19OwogICAgfQogICAgLmVkZ2UtZGVwdGgtJHtuLTF9ewogICAgICBzdHJva2Utd2lkdGg6ICR7aX07CiAgICB9CiAgICAuc2VjdGlvbi0ke24tMX0gbGluZSB7CiAgICAgIHN0cm9rZTogJHt0WyJjU2NhbGVJbnYiK25dfSA7CiAgICAgIHN0cm9rZS13aWR0aDogMzsKICAgIH0KCiAgICAuZGlzYWJsZWQsIC5kaXNhYmxlZCBjaXJjbGUsIC5kaXNhYmxlZCB0ZXh0IHsKICAgICAgZmlsbDogbGlnaHRncmF5OwogICAgfQogICAgLmRpc2FibGVkIHRleHQgewogICAgICBmaWxsOiAjZWZlZmVmOwogICAgfQoKICAubm9kZSByZWN0LAogIC5ub2RlIGNpcmNsZSwKICAubm9kZSBlbGxpcHNlLAogIC5ub2RlIHBvbHlnb24sCiAgLm5vZGUgcGF0aCB7CiAgICBmaWxsOiAke3QuYmFja2dyb3VuZH07CiAgICBzdHJva2U6ICR7dC5ub2RlQm9yZGVyfTsKICAgIHN0cm9rZS13aWR0aDogMXB4OwogIH0KCiAgLmthbmJhbi10aWNrZXQtbGluayB7CiAgICBmaWxsOiAke3QuYmFja2dyb3VuZH07CiAgICBzdHJva2U6ICR7dC5ub2RlQm9yZGVyfTsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogIH0KICAgIGB9cmV0dXJuIGV9LCJnZW5TZWN0aW9ucyIpLHFldD1vKHQ9PmAKICAuZWRnZSB7CiAgICBzdHJva2Utd2lkdGg6IDM7CiAgfQogICR7V2V0KHQpfQogIC5zZWN0aW9uLXJvb3QgcmVjdCwgLnNlY3Rpb24tcm9vdCBwYXRoLCAuc2VjdGlvbi1yb290IGNpcmNsZSwgLnNlY3Rpb24tcm9vdCBwb2x5Z29uICB7CiAgICBmaWxsOiAke3QuZ2l0MH07CiAgfQogIC5zZWN0aW9uLXJvb3QgdGV4dCB7CiAgICBmaWxsOiAke3QuZ2l0QnJhbmNoTGFiZWwwfTsKICB9CiAgLmljb24tY29udGFpbmVyIHsKICAgIGhlaWdodDoxMDAlOwogICAgZGlzcGxheTogZmxleDsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICB9CiAgLmVkZ2UgewogICAgZmlsbDogbm9uZTsKICB9CiAgLmNsdXN0ZXItbGFiZWwsIC5sYWJlbCB7CiAgICBjb2xvcjogJHt0LnRleHRDb2xvcn07CiAgICBmaWxsOiAke3QudGV4dENvbG9yfTsKICAgIH0KICAua2FuYmFuLWxhYmVsIHsKICAgIGR5OiAxZW07CiAgICBhbGlnbm1lbnQtYmFzZWxpbmU6IG1pZGRsZTsKICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICBkb21pbmFudC1iYXNlbGluZTogbWlkZGxlOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KICAgICR7TmMoKX0KYCwiZ2V0U3R5bGVzIikseHllPXFldH0pO3ZhciBUeWU9e307dXIoVHllLHtkaWFncmFtOigpPT5ZZXR9KTt2YXIgWWV0LHd5ZT1OKCgpPT57InVzZSBzdHJpY3QiO2R5ZSgpO2d5ZSgpO3Z5ZSgpO2J5ZSgpO1lldD17ZGI6bXllLHJlbmRlcmVyOnl5ZSxwYXJzZXI6ZnllLHN0eWxlczp4eWV9fSk7dmFyIHlGLEU0LFN5ZT1OKCgpPT57InVzZSBzdHJpY3QiO3lGPWZ1bmN0aW9uKCl7dmFyIHQ9byhmdW5jdGlvbihsLHUsaCxmKXtmb3IoaD1ofHx7fSxmPWwubGVuZ3RoO2YtLTtoW2xbZl1dPXUpO3JldHVybiBofSwibyIpLGU9WzEsOV0scj1bMSwxMF0sbj1bMSw1LDEwLDEyXSxpPXt0cmFjZTpvKGZ1bmN0aW9uKCl7fSwidHJhY2UiKSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLFNBTktFWTo0LE5FV0xJTkU6NSxjc3Y6NixvcHRfZW9mOjcscmVjb3JkOjgsY3N2X3RhaWw6OSxFT0Y6MTAsImZpZWxkW3NvdXJjZV0iOjExLENPTU1BOjEyLCJmaWVsZFt0YXJnZXRdIjoxMywiZmllbGRbdmFsdWVdIjoxNCxmaWVsZDoxNSxlc2NhcGVkOjE2LG5vbl9lc2NhcGVkOjE3LERRVU9URToxOCxFU0NBUEVEX1RFWFQ6MTksTk9OX0VTQ0FQRURfVEVYVDoyMCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiU0FOS0VZIiw1OiJORVdMSU5FIiwxMDoiRU9GIiwxMToiZmllbGRbc291cmNlXSIsMTI6IkNPTU1BIiwxMzoiZmllbGRbdGFyZ2V0XSIsMTQ6ImZpZWxkW3ZhbHVlXSIsMTg6IkRRVU9URSIsMTk6IkVTQ0FQRURfVEVYVCIsMjA6Ik5PTl9FU0NBUEVEX1RFWFQifSxwcm9kdWN0aW9uc186WzAsWzMsNF0sWzYsMl0sWzksMl0sWzksMF0sWzcsMV0sWzcsMF0sWzgsNV0sWzE1LDFdLFsxNSwxXSxbMTYsM10sWzE3LDFdXSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24odSxoLGYsZCxwLG0sZyl7dmFyIHk9bS5sZW5ndGgtMTtzd2l0Y2gocCl7Y2FzZSA3OmxldCB2PWQuZmluZE9yQ3JlYXRlTm9kZShtW3ktNF0udHJpbSgpLnJlcGxhY2VBbGwoJyIiJywnIicpKSx4PWQuZmluZE9yQ3JlYXRlTm9kZShtW3ktMl0udHJpbSgpLnJlcGxhY2VBbGwoJyIiJywnIicpKSxiPXBhcnNlRmxvYXQobVt5XS50cmltKCkpO2QuYWRkTGluayh2LHgsYik7YnJlYWs7Y2FzZSA4OmNhc2UgOTpjYXNlIDExOnRoaXMuJD1tW3ldO2JyZWFrO2Nhc2UgMTA6dGhpcy4kPW1beS0xXTticmVha319LCJhbm9ueW1vdXMiKSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LHs1OlsxLDNdfSx7Njo0LDg6NSwxNTo2LDE2OjcsMTc6OCwxODplLDIwOnJ9LHsxOlsyLDZdLDc6MTEsMTA6WzEsMTJdfSx0KHIsWzIsNF0sezk6MTMsNTpbMSwxNF19KSx7MTI6WzEsMTVdfSx0KG4sWzIsOF0pLHQobixbMiw5XSksezE5OlsxLDE2XX0sdChuLFsyLDExXSksezE6WzIsMV19LHsxOlsyLDVdfSx0KHIsWzIsMl0pLHs2OjE3LDg6NSwxNTo2LDE2OjcsMTc6OCwxODplLDIwOnJ9LHsxNToxOCwxNjo3LDE3OjgsMTg6ZSwyMDpyfSx7MTg6WzEsMTldfSx0KHIsWzIsM10pLHsxMjpbMSwyMF19LHQobixbMiwxMF0pLHsxNToyMSwxNjo3LDE3OjgsMTg6ZSwyMDpyfSx0KFsxLDUsMTBdLFsyLDddKV0sZGVmYXVsdEFjdGlvbnM6ezExOlsyLDFdLDEyOlsyLDVdfSxwYXJzZUVycm9yOm8oZnVuY3Rpb24odSxoKXtpZihoLnJlY292ZXJhYmxlKXRoaXMudHJhY2UodSk7ZWxzZXt2YXIgZj1uZXcgRXJyb3IodSk7dGhyb3cgZi5oYXNoPWgsZn19LCJwYXJzZUVycm9yIikscGFyc2U6byhmdW5jdGlvbih1KXt2YXIgaD10aGlzLGY9WzBdLGQ9W10scD1bbnVsbF0sbT1bXSxnPXRoaXMudGFibGUseT0iIix2PTAseD0wLGI9MCxUPTIsUz0xLHc9bS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxFPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlciksXz17eXk6e319O2Zvcih2YXIgQyBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LEMpJiYoXy55eVtDXT10aGlzLnl5W0NdKTtFLnNldElucHV0KHUsXy55eSksXy55eS5sZXhlcj1FLF8ueXkucGFyc2VyPXRoaXMsdHlwZW9mIEUueXlsbG9jPiJ1IiYmKEUueXlsbG9jPXt9KTt2YXIgRD1FLnl5bGxvYzttLnB1c2goRCk7dmFyIE89RS5vcHRpb25zJiZFLm9wdGlvbnMucmFuZ2VzO3R5cGVvZiBfLnl5LnBhcnNlRXJyb3I9PSJmdW5jdGlvbiI/dGhpcy5wYXJzZUVycm9yPV8ueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7ZnVuY3Rpb24gUihZKXtmLmxlbmd0aD1mLmxlbmd0aC0yKlkscC5sZW5ndGg9cC5sZW5ndGgtWSxtLmxlbmd0aD1tLmxlbmd0aC1ZfW8oUiwicG9wU3RhY2siKTtmdW5jdGlvbiBrKCl7dmFyIFk7cmV0dXJuIFk9ZC5wb3AoKXx8RS5sZXgoKXx8Uyx0eXBlb2YgWSE9Im51bWJlciImJihZIGluc3RhbmNlb2YgQXJyYXkmJihkPVksWT1kLnBvcCgpKSxZPWguc3ltYm9sc19bWV18fFkpLFl9byhrLCJsZXgiKTtmb3IodmFyIEwsQSxJLE0sUCxCLEY9e30seiwkLFUsSzs7KXtpZihJPWZbZi5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1tJXT9NPXRoaXMuZGVmYXVsdEFjdGlvbnNbSV06KChMPT09bnVsbHx8dHlwZW9mIEw+InUiKSYmKEw9aygpKSxNPWdbSV0mJmdbSV1bTF0pLHR5cGVvZiBNPiJ1Inx8IU0ubGVuZ3RofHwhTVswXSl7dmFyIGVlPSIiO0s9W107Zm9yKHogaW4gZ1tJXSl0aGlzLnRlcm1pbmFsc19bel0mJno+VCYmSy5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bel0rIiciKTtFLnNob3dQb3NpdGlvbj9lZT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyh2KzEpK2A6CmArRS5zaG93UG9zaXRpb24oKStgCkV4cGVjdGluZyBgK0suam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1tMXXx8TCkrIiciOmVlPSJQYXJzZSBlcnJvciBvbiBsaW5lICIrKHYrMSkrIjogVW5leHBlY3RlZCAiKyhMPT1TPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW0xdfHxMKSsiJyIpLHRoaXMucGFyc2VFcnJvcihlZSx7dGV4dDpFLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1tMXXx8TCxsaW5lOkUueXlsaW5lbm8sbG9jOkQsZXhwZWN0ZWQ6S30pfWlmKE1bMF1pbnN0YW5jZW9mIEFycmF5JiZNLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrSSsiLCB0b2tlbjogIitMKTtzd2l0Y2goTVswXSl7Y2FzZSAxOmYucHVzaChMKSxwLnB1c2goRS55eXRleHQpLG0ucHVzaChFLnl5bGxvYyksZi5wdXNoKE1bMV0pLEw9bnVsbCxBPyhMPUEsQT1udWxsKTooeD1FLnl5bGVuZyx5PUUueXl0ZXh0LHY9RS55eWxpbmVubyxEPUUueXlsbG9jLGI+MCYmYi0tKTticmVhaztjYXNlIDI6aWYoJD10aGlzLnByb2R1Y3Rpb25zX1tNWzFdXVsxXSxGLiQ9cFtwLmxlbmd0aC0kXSxGLl8kPXtmaXJzdF9saW5lOm1bbS5sZW5ndGgtKCR8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTptW20ubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46bVttLmxlbmd0aC0oJHx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjptW20ubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxPJiYoRi5fJC5yYW5nZT1bbVttLmxlbmd0aC0oJHx8MSldLnJhbmdlWzBdLG1bbS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxCPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShGLFt5LHgsdixfLnl5LE1bMV0scCxtXS5jb25jYXQodykpLHR5cGVvZiBCPCJ1IilyZXR1cm4gQjskJiYoZj1mLnNsaWNlKDAsLTEqJCoyKSxwPXAuc2xpY2UoMCwtMSokKSxtPW0uc2xpY2UoMCwtMSokKSksZi5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW01bMV1dWzBdKSxwLnB1c2goRi4kKSxtLnB1c2goRi5fJCksVT1nW2ZbZi5sZW5ndGgtMl1dW2ZbZi5sZW5ndGgtMV1dLGYucHVzaChVKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfSwicGFyc2UiKX0sYT1mdW5jdGlvbigpe3ZhciBsPXtFT0Y6MSxwYXJzZUVycm9yOm8oZnVuY3Rpb24oaCxmKXtpZih0aGlzLnl5LnBhcnNlcil0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKGgsZik7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoaCl9LCJwYXJzZUVycm9yIiksc2V0SW5wdXQ6byhmdW5jdGlvbih1LGgpe3JldHVybiB0aGlzLnl5PWh8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXUsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LCJzZXRJbnB1dCIpLGlucHV0Om8oZnVuY3Rpb24oKXt2YXIgdT10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9dSx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9dSx0aGlzLm1hdGNoZWQrPXU7dmFyIGg9dS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7cmV0dXJuIGg/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLHV9LCJpbnB1dCIpLHVucHV0Om8oZnVuY3Rpb24odSl7dmFyIGg9dS5sZW5ndGgsZj11LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9dSt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtaCksdGhpcy5vZmZzZXQtPWg7dmFyIGQ9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksZi5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPWYubGVuZ3RoLTEpO3ZhciBwPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpmPyhmLmxlbmd0aD09PWQubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStkW2QubGVuZ3RoLWYubGVuZ3RoXS5sZW5ndGgtZlswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWh9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bcFswXSxwWzBdK3RoaXMueXlsZW5nLWhdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sInVucHV0IiksbW9yZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30sIm1vcmUiKSxyZWplY3Q6byhmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpdGhpcy5fYmFja3RyYWNrPSEwO2Vsc2UgcmV0dXJuIHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrYC4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KTtyZXR1cm4gdGhpc30sInJlamVjdCIpLGxlc3M6byhmdW5jdGlvbih1KXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UodSkpfSwibGVzcyIpLHBhc3RJbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIHU9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybih1Lmxlbmd0aD4yMD8iLi4uIjoiIikrdS5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sInBhc3RJbnB1dCIpLHVwY29taW5nSW5wdXQ6byhmdW5jdGlvbigpe3ZhciB1PXRoaXMubWF0Y2g7cmV0dXJuIHUubGVuZ3RoPDIwJiYodSs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtdS5sZW5ndGgpKSwodS5zdWJzdHIoMCwyMCkrKHUubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LCJ1cGNvbWluZ0lucHV0Iiksc2hvd1Bvc2l0aW9uOm8oZnVuY3Rpb24oKXt2YXIgdT10aGlzLnBhc3RJbnB1dCgpLGg9bmV3IEFycmF5KHUubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gdSt0aGlzLnVwY29taW5nSW5wdXQoKStgCmAraCsiXiJ9LCJzaG93UG9zaXRpb24iKSx0ZXN0X21hdGNoOm8oZnVuY3Rpb24odSxoKXt2YXIgZixkLHA7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKHA9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYocC55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSxkPXVbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpLGQmJih0aGlzLnl5bGluZW5vKz1kLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOmQ/ZFtkLmxlbmd0aC0xXS5sZW5ndGgtZFtkLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK3VbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9dVswXSx0aGlzLm1hdGNoKz11WzBdLHRoaXMubWF0Y2hlcz11LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKHVbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPXVbMF0sZj10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxoLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLGYpcmV0dXJuIGY7aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIG0gaW4gcCl0aGlzW21dPXBbbV07cmV0dXJuITF9cmV0dXJuITF9LCJ0ZXN0X21hdGNoIiksbmV4dDpvKGZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCk7dmFyIHUsaCxmLGQ7dGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgcD10aGlzLl9jdXJyZW50UnVsZXMoKSxtPTA7bTxwLmxlbmd0aDttKyspaWYoZj10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW3BbbV1dKSxmJiYoIWh8fGZbMF0ubGVuZ3RoPmhbMF0ubGVuZ3RoKSl7aWYoaD1mLGQ9bSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZih1PXRoaXMudGVzdF9tYXRjaChmLHBbbV0pLHUhPT0hMSlyZXR1cm4gdTtpZih0aGlzLl9iYWNrdHJhY2spe2g9ITE7Y29udGludWV9ZWxzZSByZXR1cm4hMX1lbHNlIGlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gaD8odT10aGlzLnRlc3RfbWF0Y2goaCxwW2RdKSx1IT09ITE/dTohMSk6dGhpcy5faW5wdXQ9PT0iIj90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFVucmVjb2duaXplZCB0ZXh0LgpgK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sIm5leHQiKSxsZXg6byhmdW5jdGlvbigpe3ZhciBoPXRoaXMubmV4dCgpO3JldHVybiBofHx0aGlzLmxleCgpfSwibGV4IiksYmVnaW46byhmdW5jdGlvbihoKXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goaCl9LCJiZWdpbiIpLHBvcFN0YXRlOm8oZnVuY3Rpb24oKXt2YXIgaD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xO3JldHVybiBoPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSwicG9wU3RhdGUiKSxfY3VycmVudFJ1bGVzOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSwiX2N1cnJlbnRSdWxlcyIpLHRvcFN0YXRlOm8oZnVuY3Rpb24oaCl7cmV0dXJuIGg9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyhofHwwKSxoPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbaF06IklOSVRJQUwifSwidG9wU3RhdGUiKSxwdXNoU3RhdGU6byhmdW5jdGlvbihoKXt0aGlzLmJlZ2luKGgpfSwicHVzaFN0YXRlIiksc3RhdGVTdGFja1NpemU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sInN0YXRlU3RhY2tTaXplIiksb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOm8oZnVuY3Rpb24oaCxmLGQscCl7dmFyIG09cDtzd2l0Y2goZCl7Y2FzZSAwOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiY3N2IiksNDticmVhaztjYXNlIDE6cmV0dXJuIDEwO2Nhc2UgMjpyZXR1cm4gNTtjYXNlIDM6cmV0dXJuIDEyO2Nhc2UgNDpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoImVzY2FwZWRfdGV4dCIpLDE4O2JyZWFrO2Nhc2UgNTpyZXR1cm4gMjA7Y2FzZSA2OnJldHVybiB0aGlzLnBvcFN0YXRlKCJlc2NhcGVkX3RleHQiKSwxODticmVhaztjYXNlIDc6cmV0dXJuIDE5fX0sImFub255bW91cyIpLHJ1bGVzOlsvXig/OnNhbmtleS1iZXRhXGIpL2ksL14oPzokKS9pLC9eKD86KChcdTAwMERcdTAwMEEpfChcdTAwMEEpKSkvaSwvXig/OihcdTAwMkMpKS9pLC9eKD86KFx1MDAyMikpL2ksL14oPzooW1x1MDAyMC1cdTAwMjFcdTAwMjMtXHUwMDJCXHUwMDJELVx1MDA3RV0pKikvaSwvXig/OihcdTAwMjIpKD8hKFx1MDAyMikpKS9pLC9eKD86KChbXHUwMDIwLVx1MDAyMVx1MDAyMy1cdTAwMkJcdTAwMkQtXHUwMDdFXSl8KFx1MDAyQyl8KFx1MDAwRCl8KFx1MDAwQSl8KFx1MDAyMikoXHUwMDIyKSkqKS9pXSxjb25kaXRpb25zOntjc3Y6e3J1bGVzOlsxLDIsMyw0LDUsNiw3XSxpbmNsdXNpdmU6ITF9LGVzY2FwZWRfdGV4dDp7cnVsZXM6WzYsN10saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDIsMyw0LDUsNiw3XSxpbmNsdXNpdmU6ITB9fX07cmV0dXJuIGx9KCk7aS5sZXhlcj1hO2Z1bmN0aW9uIHMoKXt0aGlzLnl5PXt9fXJldHVybiBvKHMsIlBhcnNlciIpLHMucHJvdG90eXBlPWksaS5QYXJzZXI9cyxuZXcgc30oKTt5Ri5wYXJzZXI9eUY7RTQ9eUZ9KTt2YXIgcEMsbUMsZEMsUWV0LHZGLFpldCx4RixKZXQsZXR0LHR0dCxydHQsQ3llLEF5ZT1OKCgpPT57InVzZSBzdHJpY3QiO0d0KCk7cHIoKTtjaSgpO3BDPVtdLG1DPVtdLGRDPW5ldyBNYXAsUWV0PW8oKCk9PntwQz1bXSxtQz1bXSxkQz1uZXcgTWFwLGtyKCl9LCJjbGVhciIpLHZGPWNsYXNze2NvbnN0cnVjdG9yKGUscixuPTApe3RoaXMuc291cmNlPWU7dGhpcy50YXJnZXQ9cjt0aGlzLnZhbHVlPW59c3RhdGlje28odGhpcywiU2Fua2V5TGluayIpfX0sWmV0PW8oKHQsZSxyKT0+e3BDLnB1c2gobmV3IHZGKHQsZSxyKSl9LCJhZGRMaW5rIikseEY9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5JRD1lfXN0YXRpY3tvKHRoaXMsIlNhbmtleU5vZGUiKX19LEpldD1vKHQ9Pnt0PVplLnNhbml0aXplVGV4dCh0LG1lKCkpO2xldCBlPWRDLmdldCh0KTtyZXR1cm4gZT09PXZvaWQgMCYmKGU9bmV3IHhGKHQpLGRDLnNldCh0LGUpLG1DLnB1c2goZSkpLGV9LCJmaW5kT3JDcmVhdGVOb2RlIiksZXR0PW8oKCk9Pm1DLCJnZXROb2RlcyIpLHR0dD1vKCgpPT5wQywiZ2V0TGlua3MiKSxydHQ9bygoKT0+KHtub2RlczptQy5tYXAodD0+KHtpZDp0LklEfSkpLGxpbmtzOnBDLm1hcCh0PT4oe3NvdXJjZTp0LnNvdXJjZS5JRCx0YXJnZXQ6dC50YXJnZXQuSUQsdmFsdWU6dC52YWx1ZX0pKX0pLCJnZXRHcmFwaCIpLEN5ZT17bm9kZXNNYXA6ZEMsZ2V0Q29uZmlnOm8oKCk9Pm1lKCkuc2Fua2V5LCJnZXRDb25maWciKSxnZXROb2RlczpldHQsZ2V0TGlua3M6dHR0LGdldEdyYXBoOnJ0dCxhZGRMaW5rOlpldCxmaW5kT3JDcmVhdGVOb2RlOkpldCxnZXRBY2NUaXRsZTpEcixzZXRBY2NUaXRsZTpBcixnZXRBY2NEZXNjcmlwdGlvbjpScixzZXRBY2NEZXNjcmlwdGlvbjpMcixnZXREaWFncmFtVGl0bGU6TnIsc2V0RGlhZ3JhbVRpdGxlOk9yLGNsZWFyOlFldH19KTtmdW5jdGlvbiBTNCh0LGUpe2xldCByO2lmKGU9PT12b2lkIDApZm9yKGxldCBuIG9mIHQpbiE9bnVsbCYmKHI8bnx8cj09PXZvaWQgMCYmbj49bikmJihyPW4pO2Vsc2V7bGV0IG49LTE7Zm9yKGxldCBpIG9mIHQpKGk9ZShpLCsrbix0KSkhPW51bGwmJihyPGl8fHI9PT12b2lkIDAmJmk+PWkpJiYocj1pKX1yZXR1cm4gcn12YXIgX3llPU4oKCk9PnsidXNlIHN0cmljdCI7byhTNCwibWF4Iil9KTtmdW5jdGlvbiBteSh0LGUpe2xldCByO2lmKGU9PT12b2lkIDApZm9yKGxldCBuIG9mIHQpbiE9bnVsbCYmKHI+bnx8cj09PXZvaWQgMCYmbj49bikmJihyPW4pO2Vsc2V7bGV0IG49LTE7Zm9yKGxldCBpIG9mIHQpKGk9ZShpLCsrbix0KSkhPW51bGwmJihyPml8fHI9PT12b2lkIDAmJmk+PWkpJiYocj1pKX1yZXR1cm4gcn12YXIgRHllPU4oKCk9PnsidXNlIHN0cmljdCI7byhteSwibWluIil9KTtmdW5jdGlvbiBneSh0LGUpe2xldCByPTA7aWYoZT09PXZvaWQgMClmb3IobGV0IG4gb2YgdCkobj0rbikmJihyKz1uKTtlbHNle2xldCBuPS0xO2ZvcihsZXQgaSBvZiB0KShpPStlKGksKytuLHQpKSYmKHIrPWkpfXJldHVybiByfXZhciBMeWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKGd5LCJzdW0iKX0pO3ZhciBiRj1OKCgpPT57InVzZSBzdHJpY3QiO195ZSgpO0R5ZSgpO0x5ZSgpfSk7ZnVuY3Rpb24gbnR0KHQpe3JldHVybiB0LnRhcmdldC5kZXB0aH1mdW5jdGlvbiBURih0KXtyZXR1cm4gdC5kZXB0aH1mdW5jdGlvbiB3Rih0LGUpe3JldHVybiBlLTEtdC5oZWlnaHR9ZnVuY3Rpb24gQzQodCxlKXtyZXR1cm4gdC5zb3VyY2VMaW5rcy5sZW5ndGg/dC5kZXB0aDplLTF9ZnVuY3Rpb24ga0YodCl7cmV0dXJuIHQudGFyZ2V0TGlua3MubGVuZ3RoP3QuZGVwdGg6dC5zb3VyY2VMaW5rcy5sZW5ndGg/bXkodC5zb3VyY2VMaW5rcyxudHQpLTE6MH12YXIgRUY9TigoKT0+eyJ1c2Ugc3RyaWN0IjtiRigpO28obnR0LCJ0YXJnZXREZXB0aCIpO28oVEYsImxlZnQiKTtvKHdGLCJyaWdodCIpO28oQzQsImp1c3RpZnkiKTtvKGtGLCJjZW50ZXIiKX0pO2Z1bmN0aW9uIHl5KHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX12YXIgUnllPU4oKCk9PnsidXNlIHN0cmljdCI7byh5eSwiY29uc3RhbnQiKX0pO2Z1bmN0aW9uIE55ZSh0LGUpe3JldHVybiBnQyh0LnNvdXJjZSxlLnNvdXJjZSl8fHQuaW5kZXgtZS5pbmRleH1mdW5jdGlvbiBNeWUodCxlKXtyZXR1cm4gZ0ModC50YXJnZXQsZS50YXJnZXQpfHx0LmluZGV4LWUuaW5kZXh9ZnVuY3Rpb24gZ0ModCxlKXtyZXR1cm4gdC55MC1lLnkwfWZ1bmN0aW9uIFNGKHQpe3JldHVybiB0LnZhbHVlfWZ1bmN0aW9uIGl0dCh0KXtyZXR1cm4gdC5pbmRleH1mdW5jdGlvbiBhdHQodCl7cmV0dXJuIHQubm9kZXN9ZnVuY3Rpb24gc3R0KHQpe3JldHVybiB0LmxpbmtzfWZ1bmN0aW9uIEl5ZSh0LGUpe2xldCByPXQuZ2V0KGUpO2lmKCFyKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIitlKTtyZXR1cm4gcn1mdW5jdGlvbiBPeWUoe25vZGVzOnR9KXtmb3IobGV0IGUgb2YgdCl7bGV0IHI9ZS55MCxuPXI7Zm9yKGxldCBpIG9mIGUuc291cmNlTGlua3MpaS55MD1yK2kud2lkdGgvMixyKz1pLndpZHRoO2ZvcihsZXQgaSBvZiBlLnRhcmdldExpbmtzKWkueTE9bitpLndpZHRoLzIsbis9aS53aWR0aH19ZnVuY3Rpb24geUMoKXtsZXQgdD0wLGU9MCxyPTEsbj0xLGk9MjQsYT04LHMsbD1pdHQsdT1DNCxoLGYsZD1hdHQscD1zdHQsbT02O2Z1bmN0aW9uIGcoKXtsZXQgST17bm9kZXM6ZC5hcHBseShudWxsLGFyZ3VtZW50cyksbGlua3M6cC5hcHBseShudWxsLGFyZ3VtZW50cyl9O3JldHVybiB5KEkpLHYoSSkseChJKSxiKEkpLHcoSSksT3llKEkpLEl9byhnLCJzYW5rZXkiKSxnLnVwZGF0ZT1mdW5jdGlvbihJKXtyZXR1cm4gT3llKEkpLEl9LGcubm9kZUlkPWZ1bmN0aW9uKEkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPXR5cGVvZiBJPT0iZnVuY3Rpb24iP0k6eXkoSSksZyk6bH0sZy5ub2RlQWxpZ249ZnVuY3Rpb24oSSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dHlwZW9mIEk9PSJmdW5jdGlvbiI/STp5eShJKSxnKTp1fSxnLm5vZGVTb3J0PWZ1bmN0aW9uKEkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPUksZyk6aH0sZy5ub2RlV2lkdGg9ZnVuY3Rpb24oSSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K0ksZyk6aX0sZy5ub2RlUGFkZGluZz1mdW5jdGlvbihJKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1zPStJLGcpOmF9LGcubm9kZXM9ZnVuY3Rpb24oSSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9dHlwZW9mIEk9PSJmdW5jdGlvbiI/STp5eShJKSxnKTpkfSxnLmxpbmtzPWZ1bmN0aW9uKEkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPXR5cGVvZiBJPT0iZnVuY3Rpb24iP0k6eXkoSSksZyk6cH0sZy5saW5rU29ydD1mdW5jdGlvbihJKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1JLGcpOmZ9LGcuc2l6ZT1mdW5jdGlvbihJKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lPTAscj0rSVswXSxuPStJWzFdLGcpOltyLXQsbi1lXX0sZy5leHRlbnQ9ZnVuY3Rpb24oSSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K0lbMF1bMF0scj0rSVsxXVswXSxlPStJWzBdWzFdLG49K0lbMV1bMV0sZyk6W1t0LGVdLFtyLG5dXX0sZy5pdGVyYXRpb25zPWZ1bmN0aW9uKEkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPStJLGcpOm19O2Z1bmN0aW9uIHkoe25vZGVzOkksbGlua3M6TX0pe2ZvcihsZXRbQixGXW9mIEkuZW50cmllcygpKUYuaW5kZXg9QixGLnNvdXJjZUxpbmtzPVtdLEYudGFyZ2V0TGlua3M9W107bGV0IFA9bmV3IE1hcChJLm1hcCgoQixGKT0+W2woQixGLEkpLEJdKSk7Zm9yKGxldFtCLEZdb2YgTS5lbnRyaWVzKCkpe0YuaW5kZXg9QjtsZXR7c291cmNlOnosdGFyZ2V0OiR9PUY7dHlwZW9mIHohPSJvYmplY3QiJiYoej1GLnNvdXJjZT1JeWUoUCx6KSksdHlwZW9mICQhPSJvYmplY3QiJiYoJD1GLnRhcmdldD1JeWUoUCwkKSksei5zb3VyY2VMaW5rcy5wdXNoKEYpLCQudGFyZ2V0TGlua3MucHVzaChGKX1pZihmIT1udWxsKWZvcihsZXR7c291cmNlTGlua3M6Qix0YXJnZXRMaW5rczpGfW9mIEkpQi5zb3J0KGYpLEYuc29ydChmKX1vKHksImNvbXB1dGVOb2RlTGlua3MiKTtmdW5jdGlvbiB2KHtub2RlczpJfSl7Zm9yKGxldCBNIG9mIEkpTS52YWx1ZT1NLmZpeGVkVmFsdWU9PT12b2lkIDA/TWF0aC5tYXgoZ3koTS5zb3VyY2VMaW5rcyxTRiksZ3koTS50YXJnZXRMaW5rcyxTRikpOk0uZml4ZWRWYWx1ZX1vKHYsImNvbXB1dGVOb2RlVmFsdWVzIik7ZnVuY3Rpb24geCh7bm9kZXM6SX0pe2xldCBNPUkubGVuZ3RoLFA9bmV3IFNldChJKSxCPW5ldyBTZXQsRj0wO2Zvcig7UC5zaXplOyl7Zm9yKGxldCB6IG9mIFApe3ouZGVwdGg9Rjtmb3IobGV0e3RhcmdldDokfW9mIHouc291cmNlTGlua3MpQi5hZGQoJCl9aWYoKytGPk0pdGhyb3cgbmV3IEVycm9yKCJjaXJjdWxhciBsaW5rIik7UD1CLEI9bmV3IFNldH19byh4LCJjb21wdXRlTm9kZURlcHRocyIpO2Z1bmN0aW9uIGIoe25vZGVzOkl9KXtsZXQgTT1JLmxlbmd0aCxQPW5ldyBTZXQoSSksQj1uZXcgU2V0LEY9MDtmb3IoO1Auc2l6ZTspe2ZvcihsZXQgeiBvZiBQKXt6LmhlaWdodD1GO2ZvcihsZXR7c291cmNlOiR9b2Ygei50YXJnZXRMaW5rcylCLmFkZCgkKX1pZigrK0Y+TSl0aHJvdyBuZXcgRXJyb3IoImNpcmN1bGFyIGxpbmsiKTtQPUIsQj1uZXcgU2V0fX1vKGIsImNvbXB1dGVOb2RlSGVpZ2h0cyIpO2Z1bmN0aW9uIFQoe25vZGVzOkl9KXtsZXQgTT1TNChJLEY9PkYuZGVwdGgpKzEsUD0oci10LWkpLyhNLTEpLEI9bmV3IEFycmF5KE0pO2ZvcihsZXQgRiBvZiBJKXtsZXQgej1NYXRoLm1heCgwLE1hdGgubWluKE0tMSxNYXRoLmZsb29yKHUuY2FsbChudWxsLEYsTSkpKSk7Ri5sYXllcj16LEYueDA9dCt6KlAsRi54MT1GLngwK2ksQlt6XT9CW3pdLnB1c2goRik6Qlt6XT1bRl19aWYoaClmb3IobGV0IEYgb2YgQilGLnNvcnQoaCk7cmV0dXJuIEJ9byhULCJjb21wdXRlTm9kZUxheWVycyIpO2Z1bmN0aW9uIFMoSSl7bGV0IE09bXkoSSxQPT4obi1lLShQLmxlbmd0aC0xKSpzKS9neShQLFNGKSk7Zm9yKGxldCBQIG9mIEkpe2xldCBCPWU7Zm9yKGxldCBGIG9mIFApe0YueTA9QixGLnkxPUIrRi52YWx1ZSpNLEI9Ri55MStzO2ZvcihsZXQgeiBvZiBGLnNvdXJjZUxpbmtzKXoud2lkdGg9ei52YWx1ZSpNfUI9KG4tQitzKS8oUC5sZW5ndGgrMSk7Zm9yKGxldCBGPTA7RjxQLmxlbmd0aDsrK0Ype2xldCB6PVBbRl07ei55MCs9QiooRisxKSx6LnkxKz1CKihGKzEpfWsoUCl9fW8oUywiaW5pdGlhbGl6ZU5vZGVCcmVhZHRocyIpO2Z1bmN0aW9uIHcoSSl7bGV0IE09VChJKTtzPU1hdGgubWluKGEsKG4tZSkvKFM0KE0sUD0+UC5sZW5ndGgpLTEpKSxTKE0pO2ZvcihsZXQgUD0wO1A8bTsrK1Ape2xldCBCPU1hdGgucG93KC45OSxQKSxGPU1hdGgubWF4KDEtQiwoUCsxKS9tKTtfKE0sQixGKSxFKE0sQixGKX19byh3LCJjb21wdXRlTm9kZUJyZWFkdGhzIik7ZnVuY3Rpb24gRShJLE0sUCl7Zm9yKGxldCBCPTEsRj1JLmxlbmd0aDtCPEY7KytCKXtsZXQgej1JW0JdO2ZvcihsZXQgJCBvZiB6KXtsZXQgVT0wLEs9MDtmb3IobGV0e3NvdXJjZTpZLHZhbHVlOmNlfW9mICQudGFyZ2V0TGlua3Mpe2xldCBaPWNlKigkLmxheWVyLVkubGF5ZXIpO1UrPUwoWSwkKSpaLEsrPVp9aWYoIShLPjApKWNvbnRpbnVlO2xldCBlZT0oVS9LLSQueTApKk07JC55MCs9ZWUsJC55MSs9ZWUsUigkKX1oPT09dm9pZCAwJiZ6LnNvcnQoZ0MpLEMoeixQKX19byhFLCJyZWxheExlZnRUb1JpZ2h0Iik7ZnVuY3Rpb24gXyhJLE0sUCl7Zm9yKGxldCBCPUkubGVuZ3RoLEY9Qi0yO0Y+PTA7LS1GKXtsZXQgej1JW0ZdO2ZvcihsZXQgJCBvZiB6KXtsZXQgVT0wLEs9MDtmb3IobGV0e3RhcmdldDpZLHZhbHVlOmNlfW9mICQuc291cmNlTGlua3Mpe2xldCBaPWNlKihZLmxheWVyLSQubGF5ZXIpO1UrPUEoJCxZKSpaLEsrPVp9aWYoIShLPjApKWNvbnRpbnVlO2xldCBlZT0oVS9LLSQueTApKk07JC55MCs9ZWUsJC55MSs9ZWUsUigkKX1oPT09dm9pZCAwJiZ6LnNvcnQoZ0MpLEMoeixQKX19byhfLCJyZWxheFJpZ2h0VG9MZWZ0Iik7ZnVuY3Rpb24gQyhJLE0pe2xldCBQPUkubGVuZ3RoPj4xLEI9SVtQXTtPKEksQi55MC1zLFAtMSxNKSxEKEksQi55MStzLFArMSxNKSxPKEksbixJLmxlbmd0aC0xLE0pLEQoSSxlLDAsTSl9byhDLCJyZXNvbHZlQ29sbGlzaW9ucyIpO2Z1bmN0aW9uIEQoSSxNLFAsQil7Zm9yKDtQPEkubGVuZ3RoOysrUCl7bGV0IEY9SVtQXSx6PShNLUYueTApKkI7ej4xZS02JiYoRi55MCs9eixGLnkxKz16KSxNPUYueTErc319byhELCJyZXNvbHZlQ29sbGlzaW9uc1RvcFRvQm90dG9tIik7ZnVuY3Rpb24gTyhJLE0sUCxCKXtmb3IoO1A+PTA7LS1QKXtsZXQgRj1JW1BdLHo9KEYueTEtTSkqQjt6PjFlLTYmJihGLnkwLT16LEYueTEtPXopLE09Ri55MC1zfX1vKE8sInJlc29sdmVDb2xsaXNpb25zQm90dG9tVG9Ub3AiKTtmdW5jdGlvbiBSKHtzb3VyY2VMaW5rczpJLHRhcmdldExpbmtzOk19KXtpZihmPT09dm9pZCAwKXtmb3IobGV0e3NvdXJjZTp7c291cmNlTGlua3M6UH19b2YgTSlQLnNvcnQoTXllKTtmb3IobGV0e3RhcmdldDp7dGFyZ2V0TGlua3M6UH19b2YgSSlQLnNvcnQoTnllKX19byhSLCJyZW9yZGVyTm9kZUxpbmtzIik7ZnVuY3Rpb24gayhJKXtpZihmPT09dm9pZCAwKWZvcihsZXR7c291cmNlTGlua3M6TSx0YXJnZXRMaW5rczpQfW9mIEkpTS5zb3J0KE15ZSksUC5zb3J0KE55ZSl9byhrLCJyZW9yZGVyTGlua3MiKTtmdW5jdGlvbiBMKEksTSl7bGV0IFA9SS55MC0oSS5zb3VyY2VMaW5rcy5sZW5ndGgtMSkqcy8yO2ZvcihsZXR7dGFyZ2V0OkIsd2lkdGg6Rn1vZiBJLnNvdXJjZUxpbmtzKXtpZihCPT09TSlicmVhaztQKz1GK3N9Zm9yKGxldHtzb3VyY2U6Qix3aWR0aDpGfW9mIE0udGFyZ2V0TGlua3Mpe2lmKEI9PT1JKWJyZWFrO1AtPUZ9cmV0dXJuIFB9byhMLCJ0YXJnZXRUb3AiKTtmdW5jdGlvbiBBKEksTSl7bGV0IFA9TS55MC0oTS50YXJnZXRMaW5rcy5sZW5ndGgtMSkqcy8yO2ZvcihsZXR7c291cmNlOkIsd2lkdGg6Rn1vZiBNLnRhcmdldExpbmtzKXtpZihCPT09SSlicmVhaztQKz1GK3N9Zm9yKGxldHt0YXJnZXQ6Qix3aWR0aDpGfW9mIEkuc291cmNlTGlua3Mpe2lmKEI9PT1NKWJyZWFrO1AtPUZ9cmV0dXJuIFB9cmV0dXJuIG8oQSwic291cmNlVG9wIiksZ312YXIgUHllPU4oKCk9PnsidXNlIHN0cmljdCI7YkYoKTtFRigpO1J5ZSgpO28oTnllLCJhc2NlbmRpbmdTb3VyY2VCcmVhZHRoIik7byhNeWUsImFzY2VuZGluZ1RhcmdldEJyZWFkdGgiKTtvKGdDLCJhc2NlbmRpbmdCcmVhZHRoIik7byhTRiwidmFsdWUiKTtvKGl0dCwiZGVmYXVsdElkIik7byhhdHQsImRlZmF1bHROb2RlcyIpO28oc3R0LCJkZWZhdWx0TGlua3MiKTtvKEl5ZSwiZmluZCIpO28oT3llLCJjb21wdXRlTGlua0JyZWFkdGhzIik7byh5QywiU2Fua2V5Iil9KTtmdW5jdGlvbiBfRigpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIifWZ1bmN0aW9uIEJ5ZSgpe3JldHVybiBuZXcgX0Z9dmFyIENGLEFGLGkwLG90dCxERixGeWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtDRj1NYXRoLlBJLEFGPTIqQ0YsaTA9MWUtNixvdHQ9QUYtaTA7byhfRiwiUGF0aCIpO28oQnllLCJwYXRoIik7X0YucHJvdG90eXBlPUJ5ZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOl9GLG1vdmVUbzpvKGZ1bmN0aW9uKHQsZSl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStlKX0sIm1vdmVUbyIpLGNsb3NlUGF0aDpvKGZ1bmN0aW9uKCl7dGhpcy5feDEhPT1udWxsJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fKz0iWiIpfSwiY2xvc2VQYXRoIiksbGluZVRvOm8oZnVuY3Rpb24odCxlKXt0aGlzLl8rPSJMIisodGhpcy5feDE9K3QpKyIsIisodGhpcy5feTE9K2UpfSwibGluZVRvIikscXVhZHJhdGljQ3VydmVUbzpvKGZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuXys9IlEiKyArdCsiLCIrICtlKyIsIisodGhpcy5feDE9K3IpKyIsIisodGhpcy5feTE9K24pfSwicXVhZHJhdGljQ3VydmVUbyIpLGJlemllckN1cnZlVG86byhmdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5fKz0iQyIrICt0KyIsIisgK2UrIiwiKyArcisiLCIrICtuKyIsIisodGhpcy5feDE9K2kpKyIsIisodGhpcy5feTE9K2EpfSwiYmV6aWVyQ3VydmVUbyIpLGFyY1RvOm8oZnVuY3Rpb24odCxlLHIsbixpKXt0PSt0LGU9K2Uscj0rcixuPStuLGk9K2k7dmFyIGE9dGhpcy5feDEscz10aGlzLl95MSxsPXItdCx1PW4tZSxoPWEtdCxmPXMtZSxkPWgqaCtmKmY7aWYoaTwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK2kpO2lmKHRoaXMuX3gxPT09bnVsbCl0aGlzLl8rPSJNIisodGhpcy5feDE9dCkrIiwiKyh0aGlzLl95MT1lKTtlbHNlIGlmKGQ+aTApaWYoIShNYXRoLmFicyhmKmwtdSpoKT5pMCl8fCFpKXRoaXMuXys9IkwiKyh0aGlzLl94MT10KSsiLCIrKHRoaXMuX3kxPWUpO2Vsc2V7dmFyIHA9ci1hLG09bi1zLGc9bCpsK3UqdSx5PXAqcCttKm0sdj1NYXRoLnNxcnQoZykseD1NYXRoLnNxcnQoZCksYj1pKk1hdGgudGFuKChDRi1NYXRoLmFjb3MoKGcrZC15KS8oMip2KngpKSkvMiksVD1iL3gsUz1iL3Y7TWF0aC5hYnMoVC0xKT5pMCYmKHRoaXMuXys9IkwiKyh0K1QqaCkrIiwiKyhlK1QqZikpLHRoaXMuXys9IkEiK2krIiwiK2krIiwwLDAsIisgKyhmKnA+aCptKSsiLCIrKHRoaXMuX3gxPXQrUypsKSsiLCIrKHRoaXMuX3kxPWUrUyp1KX19LCJhcmNUbyIpLGFyYzpvKGZ1bmN0aW9uKHQsZSxyLG4saSxhKXt0PSt0LGU9K2Uscj0rcixhPSEhYTt2YXIgcz1yKk1hdGguY29zKG4pLGw9cipNYXRoLnNpbihuKSx1PXQrcyxoPWUrbCxmPTFeYSxkPWE/bi1pOmktbjtpZihyPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrcik7dGhpcy5feDE9PT1udWxsP3RoaXMuXys9Ik0iK3UrIiwiK2g6KE1hdGguYWJzKHRoaXMuX3gxLXUpPmkwfHxNYXRoLmFicyh0aGlzLl95MS1oKT5pMCkmJih0aGlzLl8rPSJMIit1KyIsIitoKSxyJiYoZDwwJiYoZD1kJUFGK0FGKSxkPm90dD90aGlzLl8rPSJBIityKyIsIityKyIsMCwxLCIrZisiLCIrKHQtcykrIiwiKyhlLWwpKyJBIityKyIsIityKyIsMCwxLCIrZisiLCIrKHRoaXMuX3gxPXUpKyIsIisodGhpcy5feTE9aCk6ZD5pMCYmKHRoaXMuXys9IkEiK3IrIiwiK3IrIiwwLCIrICsoZD49Q0YpKyIsIitmKyIsIisodGhpcy5feDE9dCtyKk1hdGguY29zKGkpKSsiLCIrKHRoaXMuX3kxPWUrcipNYXRoLnNpbihpKSkpKX0sImFyYyIpLHJlY3Q6byhmdW5jdGlvbih0LGUscixuKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K3QpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K2UpKyJoIisgK3IrInYiKyArbisiaCIrLXIrIloifSwicmVjdCIpLHRvU3RyaW5nOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffSwidG9TdHJpbmciKX07REY9QnllfSk7dmFyICR5ZT1OKCgpPT57InVzZSBzdHJpY3QiO0Z5ZSgpfSk7ZnVuY3Rpb24gdkModCl7cmV0dXJuIG8oZnVuY3Rpb24oKXtyZXR1cm4gdH0sImNvbnN0YW50Iil9dmFyIHp5ZT1OKCgpPT57InVzZSBzdHJpY3QiO28odkMsImRlZmF1bHQiKX0pO2Z1bmN0aW9uIEd5ZSh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiBWeWUodCl7cmV0dXJuIHRbMV19dmFyIFV5ZT1OKCgpPT57InVzZSBzdHJpY3QiO28oR3llLCJ4Iik7byhWeWUsInkiKX0pO3ZhciBIeWUsV3llPU4oKCk9PnsidXNlIHN0cmljdCI7SHllPUFycmF5LnByb3RvdHlwZS5zbGljZX0pO2Z1bmN0aW9uIGx0dCh0KXtyZXR1cm4gdC5zb3VyY2V9ZnVuY3Rpb24gY3R0KHQpe3JldHVybiB0LnRhcmdldH1mdW5jdGlvbiB1dHQodCl7dmFyIGU9bHR0LHI9Y3R0LG49R3llLGk9VnllLGE9bnVsbDtmdW5jdGlvbiBzKCl7dmFyIGwsdT1IeWUuY2FsbChhcmd1bWVudHMpLGg9ZS5hcHBseSh0aGlzLHUpLGY9ci5hcHBseSh0aGlzLHUpO2lmKGF8fChhPWw9REYoKSksdChhLCtuLmFwcGx5KHRoaXMsKHVbMF09aCx1KSksK2kuYXBwbHkodGhpcyx1KSwrbi5hcHBseSh0aGlzLCh1WzBdPWYsdSkpLCtpLmFwcGx5KHRoaXMsdSkpLGwpcmV0dXJuIGE9bnVsbCxsKyIifHxudWxsfXJldHVybiBvKHMsImxpbmsiKSxzLnNvdXJjZT1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1sLHMpOmV9LHMudGFyZ2V0PWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWwscyk6cn0scy54PWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBsPT0iZnVuY3Rpb24iP2w6dkMoK2wpLHMpOm59LHMueT1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2YgbD09ImZ1bmN0aW9uIj9sOnZDKCtsKSxzKTppfSxzLmNvbnRleHQ9ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9bD8/bnVsbCxzKTphfSxzfWZ1bmN0aW9uIGh0dCh0LGUscixuLGkpe3QubW92ZVRvKGUsciksdC5iZXppZXJDdXJ2ZVRvKGU9KGUrbikvMixyLGUsaSxuLGkpfWZ1bmN0aW9uIExGKCl7cmV0dXJuIHV0dChodHQpfXZhciBxeWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjskeWUoKTtXeWUoKTt6eWUoKTtVeWUoKTtvKGx0dCwibGlua1NvdXJjZSIpO28oY3R0LCJsaW5rVGFyZ2V0Iik7byh1dHQsImxpbmsiKTtvKGh0dCwiY3VydmVIb3Jpem9udGFsIik7byhMRiwibGlua0hvcml6b250YWwiKX0pO3ZhciBZeWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtxeWUoKX0pO2Z1bmN0aW9uIGZ0dCh0KXtyZXR1cm5bdC5zb3VyY2UueDEsdC55MF19ZnVuY3Rpb24gZHR0KHQpe3JldHVyblt0LnRhcmdldC54MCx0LnkxXX1mdW5jdGlvbiB4Qygpe3JldHVybiBMRigpLnNvdXJjZShmdHQpLnRhcmdldChkdHQpfXZhciBYeWU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtZeWUoKTtvKGZ0dCwiaG9yaXpvbnRhbFNvdXJjZSIpO28oZHR0LCJob3Jpem9udGFsVGFyZ2V0Iik7byh4QywiZGVmYXVsdCIpfSk7dmFyIGp5ZT1OKCgpPT57InVzZSBzdHJpY3QiO1B5ZSgpO0VGKCk7WHllKCl9KTt2YXIgQTQsS3llPU4oKCk9PnsidXNlIHN0cmljdCI7QTQ9Y2xhc3MgdHtzdGF0aWN7byh0aGlzLCJVaWQiKX1zdGF0aWN7dGhpcy5jb3VudD0wfXN0YXRpYyBuZXh0KGUpe3JldHVybiBuZXcgdChlKyArK3QuY291bnQpfWNvbnN0cnVjdG9yKGUpe3RoaXMuaWQ9ZSx0aGlzLmhyZWY9YCMke2V9YH10b1N0cmluZygpe3JldHVybiJ1cmwoIit0aGlzLmhyZWYrIikifX19KTt2YXIgcHR0LG10dCxReWUsWnllPU4oKCk9PnsidXNlIHN0cmljdCI7R3QoKTtmcigpO2p5ZSgpO3hpKCk7S3llKCk7cHR0PXtsZWZ0OlRGLHJpZ2h0OndGLGNlbnRlcjprRixqdXN0aWZ5OkM0fSxtdHQ9byhmdW5jdGlvbih0LGUscixuKXtsZXR7c2VjdXJpdHlMZXZlbDppLHNhbmtleTphfT1tZSgpLHM9JDMuc2Fua2V5LGw7aT09PSJzYW5kYm94IiYmKGw9R2UoIiNpIitlKSk7bGV0IHU9aT09PSJzYW5kYm94Ij9HZShsLm5vZGVzKClbMF0uY29udGVudERvY3VtZW50LmJvZHkpOkdlKCJib2R5IiksaD1pPT09InNhbmRib3giP3Uuc2VsZWN0KGBbaWQ9IiR7ZX0iXWApOkdlKGBbaWQ9IiR7ZX0iXWApLGY9YT8ud2lkdGg/P3Mud2lkdGgsZD1hPy5oZWlnaHQ/P3Mud2lkdGgscD1hPy51c2VNYXhXaWR0aD8/cy51c2VNYXhXaWR0aCxtPWE/Lm5vZGVBbGlnbm1lbnQ/P3Mubm9kZUFsaWdubWVudCxnPWE/LnByZWZpeD8/cy5wcmVmaXgseT1hPy5zdWZmaXg/P3Muc3VmZml4LHY9YT8uc2hvd1ZhbHVlcz8/cy5zaG93VmFsdWVzLHg9bi5kYi5nZXRHcmFwaCgpLGI9cHR0W21dO3lDKCkubm9kZUlkKE89Pk8uaWQpLm5vZGVXaWR0aCgxMCkubm9kZVBhZGRpbmcoMTArKHY/MTU6MCkpLm5vZGVBbGlnbihiKS5leHRlbnQoW1swLDBdLFtmLGRdXSkoeCk7bGV0IHc9SnMoUEQpO2guYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJub2RlcyIpLnNlbGVjdEFsbCgiLm5vZGUiKS5kYXRhKHgubm9kZXMpLmpvaW4oImciKS5hdHRyKCJjbGFzcyIsIm5vZGUiKS5hdHRyKCJpZCIsTz0+KE8udWlkPUE0Lm5leHQoIm5vZGUtIikpLmlkKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKE8pe3JldHVybiJ0cmFuc2xhdGUoIitPLngwKyIsIitPLnkwKyIpIn0pLmF0dHIoIngiLE89Pk8ueDApLmF0dHIoInkiLE89Pk8ueTApLmFwcGVuZCgicmVjdCIpLmF0dHIoImhlaWdodCIsTz0+Ty55MS1PLnkwKS5hdHRyKCJ3aWR0aCIsTz0+Ty54MS1PLngwKS5hdHRyKCJmaWxsIixPPT53KE8uaWQpKTtsZXQgRT1vKCh7aWQ6Tyx2YWx1ZTpSfSk9PnY/YCR7T30KJHtnfSR7TWF0aC5yb3VuZChSKjEwMCkvMTAwfSR7eX1gOk8sImdldFRleHQiKTtoLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZS1sYWJlbHMiKS5hdHRyKCJmb250LXNpemUiLDE0KS5zZWxlY3RBbGwoInRleHQiKS5kYXRhKHgubm9kZXMpLmpvaW4oInRleHQiKS5hdHRyKCJ4IixPPT5PLngwPGYvMj9PLngxKzY6Ty54MC02KS5hdHRyKCJ5IixPPT4oTy55MStPLnkwKS8yKS5hdHRyKCJkeSIsYCR7dj8iMCI6IjAuMzUifWVtYCkuYXR0cigidGV4dC1hbmNob3IiLE89Pk8ueDA8Zi8yPyJzdGFydCI6ImVuZCIpLnRleHQoRSk7bGV0IF89aC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxpbmtzIikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsLjUpLnNlbGVjdEFsbCgiLmxpbmsiKS5kYXRhKHgubGlua3MpLmpvaW4oImciKS5hdHRyKCJjbGFzcyIsImxpbmsiKS5zdHlsZSgibWl4LWJsZW5kLW1vZGUiLCJtdWx0aXBseSIpLEM9YT8ubGlua0NvbG9yPz8iZ3JhZGllbnQiO2lmKEM9PT0iZ3JhZGllbnQiKXtsZXQgTz1fLmFwcGVuZCgibGluZWFyR3JhZGllbnQiKS5hdHRyKCJpZCIsUj0+KFIudWlkPUE0Lm5leHQoImxpbmVhckdyYWRpZW50LSIpKS5pZCkuYXR0cigiZ3JhZGllbnRVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigieDEiLFI9PlIuc291cmNlLngxKS5hdHRyKCJ4MiIsUj0+Ui50YXJnZXQueDApO08uYXBwZW5kKCJzdG9wIikuYXR0cigib2Zmc2V0IiwiMCUiKS5hdHRyKCJzdG9wLWNvbG9yIixSPT53KFIuc291cmNlLmlkKSksTy5hcHBlbmQoInN0b3AiKS5hdHRyKCJvZmZzZXQiLCIxMDAlIikuYXR0cigic3RvcC1jb2xvciIsUj0+dyhSLnRhcmdldC5pZCkpfWxldCBEO3N3aXRjaChDKXtjYXNlImdyYWRpZW50IjpEPW8oTz0+Ty51aWQsImNvbG9yaW5nIik7YnJlYWs7Y2FzZSJzb3VyY2UiOkQ9byhPPT53KE8uc291cmNlLmlkKSwiY29sb3JpbmciKTticmVhaztjYXNlInRhcmdldCI6RD1vKE89PncoTy50YXJnZXQuaWQpLCJjb2xvcmluZyIpO2JyZWFrO2RlZmF1bHQ6RD1DfV8uYXBwZW5kKCJwYXRoIikuYXR0cigiZCIseEMoKSkuYXR0cigic3Ryb2tlIixEKS5hdHRyKCJzdHJva2Utd2lkdGgiLE89Pk1hdGgubWF4KDEsTy53aWR0aCkpLExvKHZvaWQgMCxoLDAscCl9LCJkcmF3IiksUXllPXtkcmF3Om10dH19KTt2YXIgSnllLGV2ZT1OKCgpPT57InVzZSBzdHJpY3QiO0p5ZT1vKHQ9PnQucmVwbGFjZUFsbCgvXlteXFNcblxyXSt8W15cU1xuXHJdKyQvZywiIikucmVwbGFjZUFsbCgvKFtcblxyXSkrL2csYApgKS50cmltKCksInByZXBhcmVUZXh0Rm9yUGFyc2luZyIpfSk7dmFyIGd0dCx0dmUscnZlPU4oKCk9PnsidXNlIHN0cmljdCI7Z3R0PW8odD0+YC5sYWJlbCB7CiAgICAgIGZvbnQtZmFtaWx5OiAke3QuZm9udEZhbWlseX07CiAgICB9YCwiZ2V0U3R5bGVzIiksdHZlPWd0dH0pO3ZhciBudmU9e307dXIobnZlLHtkaWFncmFtOigpPT52dHR9KTt2YXIgeXR0LHZ0dCxpdmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtTeWUoKTtBeWUoKTtaeWUoKTtldmUoKTtydmUoKTt5dHQ9RTQucGFyc2UuYmluZChFNCk7RTQucGFyc2U9dD0+eXR0KEp5ZSh0KSk7dnR0PXtzdHlsZXM6dHZlLHBhcnNlcjpFNCxkYjpDeWUscmVuZGVyZXI6UXllfX0pO3ZhciBvdmUsUkYsd3R0LGt0dCxFdHQsU3R0LEN0dCxxZixORj1OKCgpPT57InVzZSBzdHJpY3QiO21pKCk7X2EoKTtlcigpO2NpKCk7b3ZlPXtwYWNrZXQ6W119LFJGPXN0cnVjdHVyZWRDbG9uZShvdmUpLHd0dD1vci5wYWNrZXQsa3R0PW8oKCk9PntsZXQgdD0kbih7Li4ud3R0LC4uLnRyKCkucGFja2V0fSk7cmV0dXJuIHQuc2hvd0JpdHMmJih0LnBhZGRpbmdZKz0xMCksdH0sImdldENvbmZpZyIpLEV0dD1vKCgpPT5SRi5wYWNrZXQsImdldFBhY2tldCIpLFN0dD1vKHQ9Pnt0Lmxlbmd0aD4wJiZSRi5wYWNrZXQucHVzaCh0KX0sInB1c2hXb3JkIiksQ3R0PW8oKCk9PntrcigpLFJGPXN0cnVjdHVyZWRDbG9uZShvdmUpfSwiY2xlYXIiKSxxZj17cHVzaFdvcmQ6U3R0LGdldFBhY2tldDpFdHQsZ2V0Q29uZmlnOmt0dCxjbGVhcjpDdHQsc2V0QWNjVGl0bGU6QXIsZ2V0QWNjVGl0bGU6RHIsc2V0RGlhZ3JhbVRpdGxlOk9yLGdldERpYWdyYW1UaXRsZTpOcixnZXRBY2NEZXNjcmlwdGlvbjpScixzZXRBY2NEZXNjcmlwdGlvbjpMcn19KTt2YXIgQXR0LF90dCxEdHQsbHZlLGN2ZT1OKCgpPT57InVzZSBzdHJpY3QiO2JmKCk7eXQoKTtNcCgpO05GKCk7QXR0PTFlNCxfdHQ9byh0PT57Sm8odCxxZik7bGV0IGU9LTEscj1bXSxuPTEse2JpdHNQZXJSb3c6aX09cWYuZ2V0Q29uZmlnKCk7Zm9yKGxldHtzdGFydDphLGVuZDpzLGJpdHM6bCxsYWJlbDp1fW9mIHQuYmxvY2tzKXtpZihhIT09dm9pZCAwJiZzIT09dm9pZCAwJiZzPGEpdGhyb3cgbmV3IEVycm9yKGBQYWNrZXQgYmxvY2sgJHthfSAtICR7c30gaXMgaW52YWxpZC4gRW5kIG11c3QgYmUgZ3JlYXRlciB0aGFuIHN0YXJ0LmApO2lmKGE/Pz1lKzEsYSE9PWUrMSl0aHJvdyBuZXcgRXJyb3IoYFBhY2tldCBibG9jayAke2F9IC0gJHtzPz9hfSBpcyBub3QgY29udGlndW91cy4gSXQgc2hvdWxkIHN0YXJ0IGZyb20gJHtlKzF9LmApO2lmKGw9PT0wKXRocm93IG5ldyBFcnJvcihgUGFja2V0IGJsb2NrICR7YX0gaXMgaW52YWxpZC4gQ2Fubm90IGhhdmUgYSB6ZXJvIGJpdCBmaWVsZC5gKTtmb3Iocz8/PWErKGw/PzEpLTEsbD8/PXMtYSsxLGU9cyxYLmRlYnVnKGBQYWNrZXQgYmxvY2sgJHthfSAtICR7ZX0gd2l0aCBsYWJlbCAke3V9YCk7ci5sZW5ndGg8PWkrMSYmcWYuZ2V0UGFja2V0KCkubGVuZ3RoPEF0dDspe2xldFtoLGZdPUR0dCh7c3RhcnQ6YSxlbmQ6cyxiaXRzOmwsbGFiZWw6dX0sbixpKTtpZihyLnB1c2goaCksaC5lbmQrMT09PW4qaSYmKHFmLnB1c2hXb3JkKHIpLHI9W10sbisrKSwhZilicmVhazsoe3N0YXJ0OmEsZW5kOnMsYml0czpsLGxhYmVsOnV9PWYpfX1xZi5wdXNoV29yZChyKX0sInBvcHVsYXRlIiksRHR0PW8oKHQsZSxyKT0+e2lmKHQuc3RhcnQ9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJzdGFydCBzaG91bGQgaGF2ZSBiZWVuIHNldCBkdXJpbmcgZmlyc3QgcGhhc2UiKTtpZih0LmVuZD09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoImVuZCBzaG91bGQgaGF2ZSBiZWVuIHNldCBkdXJpbmcgZmlyc3QgcGhhc2UiKTtpZih0LnN0YXJ0PnQuZW5kKXRocm93IG5ldyBFcnJvcihgQmxvY2sgc3RhcnQgJHt0LnN0YXJ0fSBpcyBncmVhdGVyIHRoYW4gYmxvY2sgZW5kICR7dC5lbmR9LmApO2lmKHQuZW5kKzE8PWUqcilyZXR1cm5bdCx2b2lkIDBdO2xldCBuPWUqci0xLGk9ZSpyO3JldHVyblt7c3RhcnQ6dC5zdGFydCxlbmQ6bixsYWJlbDp0LmxhYmVsLGJpdHM6bi10LnN0YXJ0fSx7c3RhcnQ6aSxlbmQ6dC5lbmQsbGFiZWw6dC5sYWJlbCxiaXRzOnQuZW5kLWl9XX0sImdldE5leHRGaXR0aW5nQmxvY2siKSxsdmU9e3BhcnNlOm8oYXN5bmMgdD0+e2xldCBlPWF3YWl0IHZzKCJwYWNrZXQiLHQpO1guZGVidWcoZSksX3R0KGUpfSwicGFyc2UiKX19KTt2YXIgTHR0LFJ0dCx1dmUsaHZlPU4oKCk9PnsidXNlIHN0cmljdCI7VmwoKTt4aSgpO0x0dD1vKCh0LGUscixuKT0+e2xldCBpPW4uZGIsYT1pLmdldENvbmZpZygpLHtyb3dIZWlnaHQ6cyxwYWRkaW5nWTpsLGJpdFdpZHRoOnUsYml0c1BlclJvdzpofT1hLGY9aS5nZXRQYWNrZXQoKSxkPWkuZ2V0RGlhZ3JhbVRpdGxlKCkscD1zK2wsbT1wKihmLmxlbmd0aCsxKS0oZD8wOnMpLGc9dSpoKzIseT1MaShlKTt5LmF0dHIoInZpZXdib3giLGAwIDAgJHtnfSAke219YCksZm4oeSxtLGcsYS51c2VNYXhXaWR0aCk7Zm9yKGxldFt2LHhdb2YgZi5lbnRyaWVzKCkpUnR0KHkseCx2LGEpO3kuYXBwZW5kKCJ0ZXh0IikudGV4dChkKS5hdHRyKCJ4IixnLzIpLmF0dHIoInkiLG0tcC8yKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiY2xhc3MiLCJwYWNrZXRUaXRsZSIpfSwiZHJhdyIpLFJ0dD1vKCh0LGUscix7cm93SGVpZ2h0Om4scGFkZGluZ1g6aSxwYWRkaW5nWTphLGJpdFdpZHRoOnMsYml0c1BlclJvdzpsLHNob3dCaXRzOnV9KT0+e2xldCBoPXQuYXBwZW5kKCJnIiksZj1yKihuK2EpK2E7Zm9yKGxldCBkIG9mIGUpe2xldCBwPWQuc3RhcnQlbCpzKzEsbT0oZC5lbmQtZC5zdGFydCsxKSpzLWk7aWYoaC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IixwKS5hdHRyKCJ5IixmKS5hdHRyKCJ3aWR0aCIsbSkuYXR0cigiaGVpZ2h0IixuKS5hdHRyKCJjbGFzcyIsInBhY2tldEJsb2NrIiksaC5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixwK20vMikuYXR0cigieSIsZituLzIpLmF0dHIoImNsYXNzIiwicGFja2V0TGFiZWwiKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dChkLmxhYmVsKSwhdSljb250aW51ZTtsZXQgZz1kLmVuZD09PWQuc3RhcnQseT1mLTI7aC5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixwKyhnP20vMjowKSkuYXR0cigieSIseSkuYXR0cigiY2xhc3MiLCJwYWNrZXRCeXRlIHN0YXJ0IikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJhdXRvIikuYXR0cigidGV4dC1hbmNob3IiLGc/Im1pZGRsZSI6InN0YXJ0IikudGV4dChkLnN0YXJ0KSxnfHxoLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLHArbSkuYXR0cigieSIseSkuYXR0cigiY2xhc3MiLCJwYWNrZXRCeXRlIGVuZCIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwiYXV0byIpLmF0dHIoInRleHQtYW5jaG9yIiwiZW5kIikudGV4dChkLmVuZCl9fSwiZHJhd1dvcmQiKSx1dmU9e2RyYXc6THR0fX0pO3ZhciBOdHQsZnZlLGR2ZT1OKCgpPT57InVzZSBzdHJpY3QiO2VyKCk7TnR0PXtieXRlRm9udFNpemU6IjEwcHgiLHN0YXJ0Qnl0ZUNvbG9yOiJibGFjayIsZW5kQnl0ZUNvbG9yOiJibGFjayIsbGFiZWxDb2xvcjoiYmxhY2siLGxhYmVsRm9udFNpemU6IjEycHgiLHRpdGxlQ29sb3I6ImJsYWNrIix0aXRsZUZvbnRTaXplOiIxNHB4IixibG9ja1N0cm9rZUNvbG9yOiJibGFjayIsYmxvY2tTdHJva2VXaWR0aDoiMSIsYmxvY2tGaWxsQ29sb3I6IiNlZmVmZWYifSxmdmU9bygoe3BhY2tldDp0fT17fSk9PntsZXQgZT0kbihOdHQsdCk7cmV0dXJuYAoJLnBhY2tldEJ5dGUgewoJCWZvbnQtc2l6ZTogJHtlLmJ5dGVGb250U2l6ZX07Cgl9CgkucGFja2V0Qnl0ZS5zdGFydCB7CgkJZmlsbDogJHtlLnN0YXJ0Qnl0ZUNvbG9yfTsKCX0KCS5wYWNrZXRCeXRlLmVuZCB7CgkJZmlsbDogJHtlLmVuZEJ5dGVDb2xvcn07Cgl9CgkucGFja2V0TGFiZWwgewoJCWZpbGw6ICR7ZS5sYWJlbENvbG9yfTsKCQlmb250LXNpemU6ICR7ZS5sYWJlbEZvbnRTaXplfTsKCX0KCS5wYWNrZXRUaXRsZSB7CgkJZmlsbDogJHtlLnRpdGxlQ29sb3J9OwoJCWZvbnQtc2l6ZTogJHtlLnRpdGxlRm9udFNpemV9OwoJfQoJLnBhY2tldEJsb2NrIHsKCQlzdHJva2U6ICR7ZS5ibG9ja1N0cm9rZUNvbG9yfTsKCQlzdHJva2Utd2lkdGg6ICR7ZS5ibG9ja1N0cm9rZVdpZHRofTsKCQlmaWxsOiAke2UuYmxvY2tGaWxsQ29sb3J9OwoJfQoJYH0sInN0eWxlcyIpfSk7dmFyIHB2ZT17fTt1cihwdmUse2RpYWdyYW06KCk9Pk10dH0pO3ZhciBNdHQsbXZlPU4oKCk9PnsidXNlIHN0cmljdCI7TkYoKTtjdmUoKTtodmUoKTtkdmUoKTtNdHQ9e3BhcnNlcjpsdmUsZGI6cWYscmVuZGVyZXI6dXZlLHN0eWxlczpmdmV9fSk7dmFyIHZ5LHZ2ZSxhMCxQdHQsQnR0LHh2ZSxGdHQsJHR0LHp0dCxHdHQsVnR0LFV0dCxIdHQsczAsTUY9TigoKT0+eyJ1c2Ugc3RyaWN0IjttaSgpO19hKCk7ZXIoKTtjaSgpO3Z5PXtzaG93TGVnZW5kOiEwLHRpY2tzOjUsbWF4Om51bGwsbWluOjAsZ3JhdGljdWxlOiJjaXJjbGUifSx2dmU9e2F4ZXM6W10sY3VydmVzOltdLG9wdGlvbnM6dnl9LGEwPXN0cnVjdHVyZWRDbG9uZSh2dmUpLFB0dD1vci5yYWRhcixCdHQ9bygoKT0+JG4oey4uLlB0dCwuLi50cigpLnJhZGFyfSksImdldENvbmZpZyIpLHh2ZT1vKCgpPT5hMC5heGVzLCJnZXRBeGVzIiksRnR0PW8oKCk9PmEwLmN1cnZlcywiZ2V0Q3VydmVzIiksJHR0PW8oKCk9PmEwLm9wdGlvbnMsImdldE9wdGlvbnMiKSx6dHQ9byh0PT57YTAuYXhlcz10Lm1hcChlPT4oe25hbWU6ZS5uYW1lLGxhYmVsOmUubGFiZWw/P2UubmFtZX0pKX0sInNldEF4ZXMiKSxHdHQ9byh0PT57YTAuY3VydmVzPXQubWFwKGU9Pih7bmFtZTplLm5hbWUsbGFiZWw6ZS5sYWJlbD8/ZS5uYW1lLGVudHJpZXM6VnR0KGUuZW50cmllcyl9KSl9LCJzZXRDdXJ2ZXMiKSxWdHQ9byh0PT57aWYodFswXS5heGlzPT1udWxsKXJldHVybiB0Lm1hcChyPT5yLnZhbHVlKTtsZXQgZT14dmUoKTtpZihlLmxlbmd0aD09PTApdGhyb3cgbmV3IEVycm9yKCJBeGVzIG11c3QgYmUgcG9wdWxhdGVkIGJlZm9yZSBjdXJ2ZXMgZm9yIHJlZmVyZW5jZSBlbnRyaWVzIik7cmV0dXJuIGUubWFwKHI9PntsZXQgbj10LmZpbmQoaT0+aS5heGlzPy4kcmVmVGV4dD09PXIubmFtZSk7aWYobj09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIk1pc3NpbmcgZW50cnkgZm9yIGF4aXMgIityLmxhYmVsKTtyZXR1cm4gbi52YWx1ZX0pfSwiY29tcHV0ZUN1cnZlRW50cmllcyIpLFV0dD1vKHQ9PntsZXQgZT10LnJlZHVjZSgocixuKT0+KHJbbi5uYW1lXT1uLHIpLHt9KTthMC5vcHRpb25zPXtzaG93TGVnZW5kOmUuc2hvd0xlZ2VuZD8udmFsdWU/P3Z5LnNob3dMZWdlbmQsdGlja3M6ZS50aWNrcz8udmFsdWU/P3Z5LnRpY2tzLG1heDplLm1heD8udmFsdWU/P3Z5Lm1heCxtaW46ZS5taW4/LnZhbHVlPz92eS5taW4sZ3JhdGljdWxlOmUuZ3JhdGljdWxlPy52YWx1ZT8/dnkuZ3JhdGljdWxlfX0sInNldE9wdGlvbnMiKSxIdHQ9bygoKT0+e2tyKCksYTA9c3RydWN0dXJlZENsb25lKHZ2ZSl9LCJjbGVhciIpLHMwPXtnZXRBeGVzOnh2ZSxnZXRDdXJ2ZXM6RnR0LGdldE9wdGlvbnM6JHR0LHNldEF4ZXM6enR0LHNldEN1cnZlczpHdHQsc2V0T3B0aW9uczpVdHQsZ2V0Q29uZmlnOkJ0dCxjbGVhcjpIdHQsc2V0QWNjVGl0bGU6QXIsZ2V0QWNjVGl0bGU6RHIsc2V0RGlhZ3JhbVRpdGxlOk9yLGdldERpYWdyYW1UaXRsZTpOcixnZXRBY2NEZXNjcmlwdGlvbjpScixzZXRBY2NEZXNjcmlwdGlvbjpMcn19KTt2YXIgV3R0LGJ2ZSxUdmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtiZigpO3l0KCk7TXAoKTtNRigpO1d0dD1vKHQ9PntKbyh0LHMwKTtsZXR7YXhlczplLGN1cnZlczpyLG9wdGlvbnM6bn09dDtzMC5zZXRBeGVzKGUpLHMwLnNldEN1cnZlcyhyKSxzMC5zZXRPcHRpb25zKG4pfSwicG9wdWxhdGUiKSxidmU9e3BhcnNlOm8oYXN5bmMgdD0+e2xldCBlPWF3YWl0IHZzKCJyYWRhciIsdCk7WC5kZWJ1ZyhlKSxXdHQoZSl9LCJwYXJzZSIpfX0pO2Z1bmN0aW9uIEt0dCh0LGUscixuLGksYSxzKXtsZXQgbD1lLmxlbmd0aCx1PU1hdGgubWluKHMud2lkdGgscy5oZWlnaHQpLzI7ci5mb3JFYWNoKChoLGYpPT57aWYoaC5lbnRyaWVzLmxlbmd0aCE9PWwpcmV0dXJuO2xldCBkPWguZW50cmllcy5tYXAoKHAsbSk9PntsZXQgZz0yKk1hdGguUEkqbS9sLU1hdGguUEkvMix5PVF0dChwLG4saSx1KSx2PXkqTWF0aC5jb3MoZykseD15Kk1hdGguc2luKGcpO3JldHVybnt4OnYseTp4fX0pO2E9PT0iY2lyY2xlIj90LmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLFp0dChkLHMuY3VydmVUZW5zaW9uKSkuYXR0cigiY2xhc3MiLGByYWRhckN1cnZlLSR7Zn1gKTphPT09InBvbHlnb24iJiZ0LmFwcGVuZCgicG9seWdvbiIpLmF0dHIoInBvaW50cyIsZC5tYXAocD0+YCR7cC54fSwke3AueX1gKS5qb2luKCIgIikpLmF0dHIoImNsYXNzIixgcmFkYXJDdXJ2ZS0ke2Z9YCl9KX1mdW5jdGlvbiBRdHQodCxlLHIsbil7bGV0IGk9TWF0aC5taW4oTWF0aC5tYXgodCxlKSxyKTtyZXR1cm4gbiooaS1lKS8oci1lKX1mdW5jdGlvbiBadHQodCxlKXtsZXQgcj10Lmxlbmd0aCxuPWBNJHt0WzBdLnh9LCR7dFswXS55fWA7Zm9yKGxldCBpPTA7aTxyO2krKyl7bGV0IGE9dFsoaS0xK3IpJXJdLHM9dFtpXSxsPXRbKGkrMSklcl0sdT10WyhpKzIpJXJdLGg9e3g6cy54KyhsLngtYS54KSplLHk6cy55KyhsLnktYS55KSplfSxmPXt4OmwueC0odS54LXMueCkqZSx5OmwueS0odS55LXMueSkqZX07bis9YCBDJHtoLnh9LCR7aC55fSAke2YueH0sJHtmLnl9ICR7bC54fSwke2wueX1gfXJldHVybmAke259IFpgfWZ1bmN0aW9uIEp0dCh0LGUscixuKXtpZighcilyZXR1cm47bGV0IGk9KG4ud2lkdGgvMituLm1hcmdpblJpZ2h0KSozLzQsYT0tKG4uaGVpZ2h0LzIrbi5tYXJnaW5Ub3ApKjMvNCxzPTIwO2UuZm9yRWFjaCgobCx1KT0+e2xldCBoPXQuYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7aX0sICR7YSt1KnN9KWApO2guYXBwZW5kKCJyZWN0IikuYXR0cigid2lkdGgiLDEyKS5hdHRyKCJoZWlnaHQiLDEyKS5hdHRyKCJjbGFzcyIsYHJhZGFyTGVnZW5kQm94LSR7dX1gKSxoLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDE2KS5hdHRyKCJ5IiwwKS5hdHRyKCJjbGFzcyIsInJhZGFyTGVnZW5kVGV4dCIpLnRleHQobC5sYWJlbCl9KX12YXIgcXR0LFl0dCxYdHQsanR0LHd2ZSxrdmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtWbCgpO3F0dD1vKCh0LGUscixuKT0+e2xldCBpPW4uZGIsYT1pLmdldEF4ZXMoKSxzPWkuZ2V0Q3VydmVzKCksbD1pLmdldE9wdGlvbnMoKSx1PWkuZ2V0Q29uZmlnKCksaD1pLmdldERpYWdyYW1UaXRsZSgpLGY9TGkoZSksZD1ZdHQoZix1KSxwPWwubWF4Pz9NYXRoLm1heCguLi5zLm1hcCh5PT5NYXRoLm1heCguLi55LmVudHJpZXMpKSksbT1sLm1pbixnPU1hdGgubWluKHUud2lkdGgsdS5oZWlnaHQpLzI7WHR0KGQsYSxnLGwudGlja3MsbC5ncmF0aWN1bGUpLGp0dChkLGEsZyx1KSxLdHQoZCxhLHMsbSxwLGwuZ3JhdGljdWxlLHUpLEp0dChkLHMsbC5zaG93TGVnZW5kLHUpLGQuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJyYWRhclRpdGxlIikudGV4dChoKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwtdS5oZWlnaHQvMi11Lm1hcmdpblRvcCl9LCJkcmF3IiksWXR0PW8oKHQsZSk9PntsZXQgcj1lLndpZHRoK2UubWFyZ2luTGVmdCtlLm1hcmdpblJpZ2h0LG49ZS5oZWlnaHQrZS5tYXJnaW5Ub3ArZS5tYXJnaW5Cb3R0b20saT17eDplLm1hcmdpbkxlZnQrZS53aWR0aC8yLHk6ZS5tYXJnaW5Ub3ArZS5oZWlnaHQvMn07cmV0dXJuIHQuYXR0cigidmlld2JveCIsYDAgMCAke3J9ICR7bn1gKS5hdHRyKCJ3aWR0aCIscikuYXR0cigiaGVpZ2h0IixuKSx0LmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke2kueH0sICR7aS55fSlgKX0sImRyYXdGcmFtZSIpLFh0dD1vKCh0LGUscixuLGkpPT57aWYoaT09PSJjaXJjbGUiKWZvcihsZXQgYT0wO2E8bjthKyspe2xldCBzPXIqKGErMSkvbjt0LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiciIscykuYXR0cigiY2xhc3MiLCJyYWRhckdyYXRpY3VsZSIpfWVsc2UgaWYoaT09PSJwb2x5Z29uIil7bGV0IGE9ZS5sZW5ndGg7Zm9yKGxldCBzPTA7czxuO3MrKyl7bGV0IGw9cioocysxKS9uLHU9ZS5tYXAoKGgsZik9PntsZXQgZD0yKmYqTWF0aC5QSS9hLU1hdGguUEkvMixwPWwqTWF0aC5jb3MoZCksbT1sKk1hdGguc2luKGQpO3JldHVybmAke3B9LCR7bX1gfSkuam9pbigiICIpO3QuYXBwZW5kKCJwb2x5Z29uIikuYXR0cigicG9pbnRzIix1KS5hdHRyKCJjbGFzcyIsInJhZGFyR3JhdGljdWxlIil9fX0sImRyYXdHcmF0aWN1bGUiKSxqdHQ9bygodCxlLHIsbik9PntsZXQgaT1lLmxlbmd0aDtmb3IobGV0IGE9MDthPGk7YSsrKXtsZXQgcz1lW2FdLmxhYmVsLGw9MiphKk1hdGguUEkvaS1NYXRoLlBJLzI7dC5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsMCkuYXR0cigieTEiLDApLmF0dHIoIngyIixyKm4uYXhpc1NjYWxlRmFjdG9yKk1hdGguY29zKGwpKS5hdHRyKCJ5MiIscipuLmF4aXNTY2FsZUZhY3RvcipNYXRoLnNpbihsKSkuYXR0cigiY2xhc3MiLCJyYWRhckF4aXNMaW5lIiksdC5hcHBlbmQoInRleHQiKS50ZXh0KHMpLmF0dHIoIngiLHIqbi5heGlzTGFiZWxGYWN0b3IqTWF0aC5jb3MobCkpLmF0dHIoInkiLHIqbi5heGlzTGFiZWxGYWN0b3IqTWF0aC5zaW4obCkpLmF0dHIoImNsYXNzIiwicmFkYXJBeGlzTGFiZWwiKX19LCJkcmF3QXhlcyIpO28oS3R0LCJkcmF3Q3VydmVzIik7byhRdHQsInJlbGF0aXZlUmFkaXVzIik7byhadHQsImNsb3NlZFJvdW5kQ3VydmUiKTtvKEp0dCwiZHJhd0xlZ2VuZCIpO3d2ZT17ZHJhdzpxdHR9fSk7dmFyIGVydCx0cnQsRXZlLFN2ZT1OKCgpPT57InVzZSBzdHJpY3QiO2VyKCk7QnkoKTttaSgpO2VydD1vKCh0LGUpPT57bGV0IHI9IiI7Zm9yKGxldCBuPTA7bjx0LlRIRU1FX0NPTE9SX0xJTUlUO24rKyl7bGV0IGk9dFtgY1NjYWxlJHtufWBdO3IrPWAKCQkucmFkYXJDdXJ2ZS0ke259IHsKCQkJY29sb3I6ICR7aX07CgkJCWZpbGw6ICR7aX07CgkJCWZpbGwtb3BhY2l0eTogJHtlLmN1cnZlT3BhY2l0eX07CgkJCXN0cm9rZTogJHtpfTsKCQkJc3Ryb2tlLXdpZHRoOiAke2UuY3VydmVTdHJva2VXaWR0aH07CgkJfQoJCS5yYWRhckxlZ2VuZEJveC0ke259IHsKCQkJZmlsbDogJHtpfTsKCQkJZmlsbC1vcGFjaXR5OiAke2UuY3VydmVPcGFjaXR5fTsKCQkJc3Ryb2tlOiAke2l9OwoJCX0KCQlgfXJldHVybiByfSwiZ2VuSW5kZXhTdHlsZXMiKSx0cnQ9byh0PT57bGV0IGU9ZGgoKSxyPXRyKCksbj0kbihlLHIudGhlbWVWYXJpYWJsZXMpLGk9JG4obi5yYWRhcix0KTtyZXR1cm57dGhlbWVWYXJpYWJsZXM6bixyYWRhck9wdGlvbnM6aX19LCJidWlsZFJhZGFyU3R5bGVPcHRpb25zIiksRXZlPW8oKHtyYWRhcjp0fT17fSk9PntsZXR7dGhlbWVWYXJpYWJsZXM6ZSxyYWRhck9wdGlvbnM6cn09dHJ0KHQpO3JldHVybmAKCS5yYWRhclRpdGxlIHsKCQlmb250LXNpemU6ICR7ZS5mb250U2l6ZX07CgkJY29sb3I6ICR7ZS50aXRsZUNvbG9yfTsKCQlkb21pbmFudC1iYXNlbGluZTogaGFuZ2luZzsKCQl0ZXh0LWFuY2hvcjogbWlkZGxlOwoJfQoJLnJhZGFyQXhpc0xpbmUgewoJCXN0cm9rZTogJHtyLmF4aXNDb2xvcn07CgkJc3Ryb2tlLXdpZHRoOiAke3IuYXhpc1N0cm9rZVdpZHRofTsKCX0KCS5yYWRhckF4aXNMYWJlbCB7CgkJZG9taW5hbnQtYmFzZWxpbmU6IG1pZGRsZTsKCQl0ZXh0LWFuY2hvcjogbWlkZGxlOwoJCWZvbnQtc2l6ZTogJHtyLmF4aXNMYWJlbEZvbnRTaXplfXB4OwoJCWNvbG9yOiAke3IuYXhpc0NvbG9yfTsKCX0KCS5yYWRhckdyYXRpY3VsZSB7CgkJZmlsbDogJHtyLmdyYXRpY3VsZUNvbG9yfTsKCQlmaWxsLW9wYWNpdHk6ICR7ci5ncmF0aWN1bGVPcGFjaXR5fTsKCQlzdHJva2U6ICR7ci5ncmF0aWN1bGVDb2xvcn07CgkJc3Ryb2tlLXdpZHRoOiAke3IuZ3JhdGljdWxlU3Ryb2tlV2lkdGh9OwoJfQoJLnJhZGFyTGVnZW5kVGV4dCB7CgkJdGV4dC1hbmNob3I6IHN0YXJ0OwoJCWZvbnQtc2l6ZTogJHtyLmxlZ2VuZEZvbnRTaXplfXB4OwoJCWRvbWluYW50LWJhc2VsaW5lOiBoYW5naW5nOwoJfQoJJHtlcnQoZSxyKX0KCWB9LCJzdHlsZXMiKX0pO3ZhciBDdmU9e307dXIoQ3ZlLHtkaWFncmFtOigpPT5ycnR9KTt2YXIgcnJ0LEF2ZT1OKCgpPT57InVzZSBzdHJpY3QiO01GKCk7VHZlKCk7a3ZlKCk7U3ZlKCk7cnJ0PXtwYXJzZXI6YnZlLGRiOnMwLHJlbmRlcmVyOnd2ZSxzdHlsZXM6RXZlfX0pO3ZhciBJRixMdmUsUnZlPU4oKCk9PnsidXNlIHN0cmljdCI7SUY9ZnVuY3Rpb24oKXt2YXIgdD1vKGZ1bmN0aW9uKFQsUyx3LEUpe2Zvcih3PXd8fHt9LEU9VC5sZW5ndGg7RS0tO3dbVFtFXV09Uyk7cmV0dXJuIHd9LCJvIiksZT1bMSw3XSxyPVsxLDEzXSxuPVsxLDE0XSxpPVsxLDE1XSxhPVsxLDE5XSxzPVsxLDE2XSxsPVsxLDE3XSx1PVsxLDE4XSxoPVs4LDMwXSxmPVs4LDIxLDI4LDI5LDMwLDMxLDMyLDQwLDQ0LDQ3XSxkPVsxLDIzXSxwPVsxLDI0XSxtPVs4LDE1LDE2LDIxLDI4LDI5LDMwLDMxLDMyLDQwLDQ0LDQ3XSxnPVs4LDE1LDE2LDIxLDI3LDI4LDI5LDMwLDMxLDMyLDQwLDQ0LDQ3XSx5PVsxLDQ5XSx2PXt0cmFjZTpvKGZ1bmN0aW9uKCl7fSwidHJhY2UiKSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzcGFjZUxpbmVzOjMsU1BBQ0VMSU5FOjQsTkw6NSxzZXBhcmF0b3I6NixTUEFDRTo3LEVPRjo4LHN0YXJ0OjksQkxPQ0tfRElBR1JBTV9LRVk6MTAsZG9jdW1lbnQ6MTEsc3RvcDoxMixzdGF0ZW1lbnQ6MTMsbGluazoxNCxMSU5LOjE1LFNUQVJUX0xJTks6MTYsTElOS19MQUJFTDoxNyxTVFI6MTgsbm9kZVN0YXRlbWVudDoxOSxjb2x1bW5zU3RhdGVtZW50OjIwLFNQQUNFX0JMT0NLOjIxLGJsb2NrU3RhdGVtZW50OjIyLGNsYXNzRGVmU3RhdGVtZW50OjIzLGNzc0NsYXNzU3RhdGVtZW50OjI0LHN0eWxlU3RhdGVtZW50OjI1LG5vZGU6MjYsU0laRToyNyxDT0xVTU5TOjI4LCJpZC1ibG9jayI6MjksZW5kOjMwLGJsb2NrOjMxLE5PREVfSUQ6MzIsbm9kZVNoYXBlTkxhYmVsOjMzLGRpckxpc3Q6MzQsRElSOjM1LE5PREVfRFNUQVJUOjM2LE5PREVfREVORDozNyxCTE9DS19BUlJPV19TVEFSVDozOCxCTE9DS19BUlJPV19FTkQ6MzksY2xhc3NEZWY6NDAsQ0xBU1NERUZfSUQ6NDEsQ0xBU1NERUZfU1RZTEVPUFRTOjQyLERFRkFVTFQ6NDMsY2xhc3M6NDQsQ0xBU1NFTlRJVFlfSURTOjQ1LFNUWUxFQ0xBU1M6NDYsc3R5bGU6NDcsU1RZTEVfRU5USVRZX0lEUzo0OCxTVFlMRV9ERUZJTklUSU9OX0RBVEE6NDksJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6IlNQQUNFTElORSIsNToiTkwiLDc6IlNQQUNFIiw4OiJFT0YiLDEwOiJCTE9DS19ESUFHUkFNX0tFWSIsMTU6IkxJTksiLDE2OiJTVEFSVF9MSU5LIiwxNzoiTElOS19MQUJFTCIsMTg6IlNUUiIsMjE6IlNQQUNFX0JMT0NLIiwyNzoiU0laRSIsMjg6IkNPTFVNTlMiLDI5OiJpZC1ibG9jayIsMzA6ImVuZCIsMzE6ImJsb2NrIiwzMjoiTk9ERV9JRCIsMzU6IkRJUiIsMzY6Ik5PREVfRFNUQVJUIiwzNzoiTk9ERV9ERU5EIiwzODoiQkxPQ0tfQVJST1dfU1RBUlQiLDM5OiJCTE9DS19BUlJPV19FTkQiLDQwOiJjbGFzc0RlZiIsNDE6IkNMQVNTREVGX0lEIiw0MjoiQ0xBU1NERUZfU1RZTEVPUFRTIiw0MzoiREVGQVVMVCIsNDQ6ImNsYXNzIiw0NToiQ0xBU1NFTlRJVFlfSURTIiw0NjoiU1RZTEVDTEFTUyIsNDc6InN0eWxlIiw0ODoiU1RZTEVfRU5USVRZX0lEUyIsNDk6IlNUWUxFX0RFRklOSVRJT05fREFUQSJ9LHByb2R1Y3Rpb25zXzpbMCxbMywxXSxbMywyXSxbMywyXSxbNiwxXSxbNiwxXSxbNiwxXSxbOSwzXSxbMTIsMV0sWzEyLDFdLFsxMiwyXSxbMTIsMl0sWzExLDFdLFsxMSwyXSxbMTQsMV0sWzE0LDRdLFsxMywxXSxbMTMsMV0sWzEzLDFdLFsxMywxXSxbMTMsMV0sWzEzLDFdLFsxMywxXSxbMTksM10sWzE5LDJdLFsxOSwxXSxbMjAsMV0sWzIyLDRdLFsyMiwzXSxbMjYsMV0sWzI2LDJdLFszNCwxXSxbMzQsMl0sWzMzLDNdLFszMyw0XSxbMjMsM10sWzIzLDNdLFsyNCwzXSxbMjUsM11dLHBlcmZvcm1BY3Rpb246byhmdW5jdGlvbihTLHcsRSxfLEMsRCxPKXt2YXIgUj1ELmxlbmd0aC0xO3N3aXRjaChDKXtjYXNlIDQ6Xy5nZXRMb2dnZXIoKS5kZWJ1ZygiUnVsZTogc2VwYXJhdG9yIChOTCkgIik7YnJlYWs7Y2FzZSA1Ol8uZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IHNlcGFyYXRvciAoU3BhY2UpICIpO2JyZWFrO2Nhc2UgNjpfLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiBzZXBhcmF0b3IgKEVPRikgIik7YnJlYWs7Y2FzZSA3Ol8uZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IGhpZXJhcmNoeTogIixEW1ItMV0pLF8uc2V0SGllcmFyY2h5KERbUi0xXSk7YnJlYWs7Y2FzZSA4Ol8uZ2V0TG9nZ2VyKCkuZGVidWcoIlN0b3AgTkwgIik7YnJlYWs7Y2FzZSA5Ol8uZ2V0TG9nZ2VyKCkuZGVidWcoIlN0b3AgRU9GICIpO2JyZWFrO2Nhc2UgMTA6Xy5nZXRMb2dnZXIoKS5kZWJ1ZygiU3RvcCBOTDIgIik7YnJlYWs7Y2FzZSAxMTpfLmdldExvZ2dlcigpLmRlYnVnKCJTdG9wIEVPRjIgIik7YnJlYWs7Y2FzZSAxMjpfLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiBzdGF0ZW1lbnQ6ICIsRFtSXSksdHlwZW9mIERbUl0ubGVuZ3RoPT0ibnVtYmVyIj90aGlzLiQ9RFtSXTp0aGlzLiQ9W0RbUl1dO2JyZWFrO2Nhc2UgMTM6Xy5nZXRMb2dnZXIoKS5kZWJ1ZygiUnVsZTogc3RhdGVtZW50ICMyOiAiLERbUi0xXSksdGhpcy4kPVtEW1ItMV1dLmNvbmNhdChEW1JdKTticmVhaztjYXNlIDE0Ol8uZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IGxpbms6ICIsRFtSXSxTKSx0aGlzLiQ9e2VkZ2VUeXBlU3RyOkRbUl0sbGFiZWw6IiJ9O2JyZWFrO2Nhc2UgMTU6Xy5nZXRMb2dnZXIoKS5kZWJ1ZygiUnVsZTogTEFCRUwgbGluazogIixEW1ItM10sRFtSLTFdLERbUl0pLHRoaXMuJD17ZWRnZVR5cGVTdHI6RFtSXSxsYWJlbDpEW1ItMV19O2JyZWFrO2Nhc2UgMTg6bGV0IGs9cGFyc2VJbnQoRFtSXSksTD1fLmdlbmVyYXRlSWQoKTt0aGlzLiQ9e2lkOkwsdHlwZToic3BhY2UiLGxhYmVsOiIiLHdpZHRoOmssY2hpbGRyZW46W119O2JyZWFrO2Nhc2UgMjM6Xy5nZXRMb2dnZXIoKS5kZWJ1ZygiUnVsZTogKG5vZGVTdGF0ZW1lbnQgbGluayBub2RlKSAiLERbUi0yXSxEW1ItMV0sRFtSXSwiIHR5cGVzdHI6ICIsRFtSLTFdLmVkZ2VUeXBlU3RyKTtsZXQgQT1fLmVkZ2VTdHJUb0VkZ2VEYXRhKERbUi0xXS5lZGdlVHlwZVN0cik7dGhpcy4kPVt7aWQ6RFtSLTJdLmlkLGxhYmVsOkRbUi0yXS5sYWJlbCx0eXBlOkRbUi0yXS50eXBlLGRpcmVjdGlvbnM6RFtSLTJdLmRpcmVjdGlvbnN9LHtpZDpEW1ItMl0uaWQrIi0iK0RbUl0uaWQsc3RhcnQ6RFtSLTJdLmlkLGVuZDpEW1JdLmlkLGxhYmVsOkRbUi0xXS5sYWJlbCx0eXBlOiJlZGdlIixkaXJlY3Rpb25zOkRbUl0uZGlyZWN0aW9ucyxhcnJvd1R5cGVFbmQ6QSxhcnJvd1R5cGVTdGFydDoiYXJyb3dfb3BlbiJ9LHtpZDpEW1JdLmlkLGxhYmVsOkRbUl0ubGFiZWwsdHlwZTpfLnR5cGVTdHIyVHlwZShEW1JdLnR5cGVTdHIpLGRpcmVjdGlvbnM6RFtSXS5kaXJlY3Rpb25zfV07YnJlYWs7Y2FzZSAyNDpfLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiBub2RlU3RhdGVtZW50IChhYmM4OCBub2RlIHNpemUpICIsRFtSLTFdLERbUl0pLHRoaXMuJD17aWQ6RFtSLTFdLmlkLGxhYmVsOkRbUi0xXS5sYWJlbCx0eXBlOl8udHlwZVN0cjJUeXBlKERbUi0xXS50eXBlU3RyKSxkaXJlY3Rpb25zOkRbUi0xXS5kaXJlY3Rpb25zLHdpZHRoSW5Db2x1bW5zOnBhcnNlSW50KERbUl0sMTApfTticmVhaztjYXNlIDI1Ol8uZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IG5vZGVTdGF0ZW1lbnQgKG5vZGUpICIsRFtSXSksdGhpcy4kPXtpZDpEW1JdLmlkLGxhYmVsOkRbUl0ubGFiZWwsdHlwZTpfLnR5cGVTdHIyVHlwZShEW1JdLnR5cGVTdHIpLGRpcmVjdGlvbnM6RFtSXS5kaXJlY3Rpb25zLHdpZHRoSW5Db2x1bW5zOjF9O2JyZWFrO2Nhc2UgMjY6Xy5nZXRMb2dnZXIoKS5kZWJ1ZygiQVBBMTIzIix0aGlzP3RoaXM6Im5hIiksXy5nZXRMb2dnZXIoKS5kZWJ1ZygiQ09MVU1OUzogIixEW1JdKSx0aGlzLiQ9e3R5cGU6ImNvbHVtbi1zZXR0aW5nIixjb2x1bW5zOkRbUl09PT0iYXV0byI/LTE6cGFyc2VJbnQoRFtSXSl9O2JyZWFrO2Nhc2UgMjc6Xy5nZXRMb2dnZXIoKS5kZWJ1ZygiUnVsZTogaWQtYmxvY2sgc3RhdGVtZW50IDogIixEW1ItMl0sRFtSLTFdKTtsZXQgST1fLmdlbmVyYXRlSWQoKTt0aGlzLiQ9ey4uLkRbUi0yXSx0eXBlOiJjb21wb3NpdGUiLGNoaWxkcmVuOkRbUi0xXX07YnJlYWs7Y2FzZSAyODpfLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiBibG9ja1N0YXRlbWVudCA6ICIsRFtSLTJdLERbUi0xXSxEW1JdKTtsZXQgTT1fLmdlbmVyYXRlSWQoKTt0aGlzLiQ9e2lkOk0sdHlwZToiY29tcG9zaXRlIixsYWJlbDoiIixjaGlsZHJlbjpEW1ItMV19O2JyZWFrO2Nhc2UgMjk6Xy5nZXRMb2dnZXIoKS5kZWJ1ZygiUnVsZTogbm9kZSAoTk9ERV9JRCBzZXBhcmF0b3IpOiAiLERbUl0pLHRoaXMuJD17aWQ6RFtSXX07YnJlYWs7Y2FzZSAzMDpfLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiBub2RlIChOT0RFX0lEIG5vZGVTaGFwZU5MYWJlbCBzZXBhcmF0b3IpOiAiLERbUi0xXSxEW1JdKSx0aGlzLiQ9e2lkOkRbUi0xXSxsYWJlbDpEW1JdLmxhYmVsLHR5cGVTdHI6RFtSXS50eXBlU3RyLGRpcmVjdGlvbnM6RFtSXS5kaXJlY3Rpb25zfTticmVhaztjYXNlIDMxOl8uZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IGRpckxpc3Q6ICIsRFtSXSksdGhpcy4kPVtEW1JdXTticmVhaztjYXNlIDMyOl8uZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IGRpckxpc3Q6ICIsRFtSLTFdLERbUl0pLHRoaXMuJD1bRFtSLTFdXS5jb25jYXQoRFtSXSk7YnJlYWs7Y2FzZSAzMzpfLmdldExvZ2dlcigpLmRlYnVnKCJSdWxlOiBub2RlU2hhcGVOTGFiZWw6ICIsRFtSLTJdLERbUi0xXSxEW1JdKSx0aGlzLiQ9e3R5cGVTdHI6RFtSLTJdK0RbUl0sbGFiZWw6RFtSLTFdfTticmVhaztjYXNlIDM0Ol8uZ2V0TG9nZ2VyKCkuZGVidWcoIlJ1bGU6IEJMT0NLX0FSUk9XIG5vZGVTaGFwZU5MYWJlbDogIixEW1ItM10sRFtSLTJdLCIgIzM6IixEW1ItMV0sRFtSXSksdGhpcy4kPXt0eXBlU3RyOkRbUi0zXStEW1JdLGxhYmVsOkRbUi0yXSxkaXJlY3Rpb25zOkRbUi0xXX07YnJlYWs7Y2FzZSAzNTpjYXNlIDM2OnRoaXMuJD17dHlwZToiY2xhc3NEZWYiLGlkOkRbUi0xXS50cmltKCksY3NzOkRbUl0udHJpbSgpfTticmVhaztjYXNlIDM3OnRoaXMuJD17dHlwZToiYXBwbHlDbGFzcyIsaWQ6RFtSLTFdLnRyaW0oKSxzdHlsZUNsYXNzOkRbUl0udHJpbSgpfTticmVhaztjYXNlIDM4OnRoaXMuJD17dHlwZToiYXBwbHlTdHlsZXMiLGlkOkRbUi0xXS50cmltKCksc3R5bGVzU3RyOkRbUl0udHJpbSgpfTticmVha319LCJhbm9ueW1vdXMiKSx0YWJsZTpbezk6MSwxMDpbMSwyXX0sezE6WzNdfSx7MTE6MywxMzo0LDE5OjUsMjA6NiwyMTplLDIyOjgsMjM6OSwyNDoxMCwyNToxMSwyNjoxMiwyODpyLDI5Om4sMzE6aSwzMjphLDQwOnMsNDQ6bCw0Nzp1fSx7ODpbMSwyMF19LHQoaCxbMiwxMl0sezEzOjQsMTk6NSwyMDo2LDIyOjgsMjM6OSwyNDoxMCwyNToxMSwyNjoxMiwxMToyMSwyMTplLDI4OnIsMjk6biwzMTppLDMyOmEsNDA6cyw0NDpsLDQ3OnV9KSx0KGYsWzIsMTZdLHsxNDoyMiwxNTpkLDE2OnB9KSx0KGYsWzIsMTddKSx0KGYsWzIsMThdKSx0KGYsWzIsMTldKSx0KGYsWzIsMjBdKSx0KGYsWzIsMjFdKSx0KGYsWzIsMjJdKSx0KG0sWzIsMjVdLHsyNzpbMSwyNV19KSx0KGYsWzIsMjZdKSx7MTk6MjYsMjY6MTIsMzI6YX0sezExOjI3LDEzOjQsMTk6NSwyMDo2LDIxOmUsMjI6OCwyMzo5LDI0OjEwLDI1OjExLDI2OjEyLDI4OnIsMjk6biwzMTppLDMyOmEsNDA6cyw0NDpsLDQ3OnV9LHs0MTpbMSwyOF0sNDM6WzEsMjldfSx7NDU6WzEsMzBdfSx7NDg6WzEsMzFdfSx0KGcsWzIsMjldLHszMzozMiwzNjpbMSwzM10sMzg6WzEsMzRdfSksezE6WzIsN119LHQoaCxbMiwxM10pLHsyNjozNSwzMjphfSx7MzI6WzIsMTRdfSx7MTc6WzEsMzZdfSx0KG0sWzIsMjRdKSx7MTE6MzcsMTM6NCwxNDoyMiwxNTpkLDE2OnAsMTk6NSwyMDo2LDIxOmUsMjI6OCwyMzo5LDI0OjEwLDI1OjExLDI2OjEyLDI4OnIsMjk6biwzMTppLDMyOmEsNDA6cyw0NDpsLDQ3OnV9LHszMDpbMSwzOF19LHs0MjpbMSwzOV19LHs0MjpbMSw0MF19LHs0NjpbMSw0MV19LHs0OTpbMSw0Ml19LHQoZyxbMiwzMF0pLHsxODpbMSw0M119LHsxODpbMSw0NF19LHQobSxbMiwyM10pLHsxODpbMSw0NV19LHszMDpbMSw0Nl19LHQoZixbMiwyOF0pLHQoZixbMiwzNV0pLHQoZixbMiwzNl0pLHQoZixbMiwzN10pLHQoZixbMiwzOF0pLHszNzpbMSw0N119LHszNDo0OCwzNTp5fSx7MTU6WzEsNTBdfSx0KGYsWzIsMjddKSx0KGcsWzIsMzNdKSx7Mzk6WzEsNTFdfSx7MzQ6NTIsMzU6eSwzOTpbMiwzMV19LHszMjpbMiwxNV19LHQoZyxbMiwzNF0pLHszOTpbMiwzMl19XSxkZWZhdWx0QWN0aW9uczp7MjA6WzIsN10sMjM6WzIsMTRdLDUwOlsyLDE1XSw1MjpbMiwzMl19LHBhcnNlRXJyb3I6byhmdW5jdGlvbihTLHcpe2lmKHcucmVjb3ZlcmFibGUpdGhpcy50cmFjZShTKTtlbHNle3ZhciBFPW5ldyBFcnJvcihTKTt0aHJvdyBFLmhhc2g9dyxFfX0sInBhcnNlRXJyb3IiKSxwYXJzZTpvKGZ1bmN0aW9uKFMpe3ZhciB3PXRoaXMsRT1bMF0sXz1bXSxDPVtudWxsXSxEPVtdLE89dGhpcy50YWJsZSxSPSIiLGs9MCxMPTAsQT0wLEk9MixNPTEsUD1ELnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLEI9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxGPXt5eTp7fX07Zm9yKHZhciB6IGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXkseikmJihGLnl5W3pdPXRoaXMueXlbel0pO0Iuc2V0SW5wdXQoUyxGLnl5KSxGLnl5LmxleGVyPUIsRi55eS5wYXJzZXI9dGhpcyx0eXBlb2YgQi55eWxsb2M+InUiJiYoQi55eWxsb2M9e30pO3ZhciAkPUIueXlsbG9jO0QucHVzaCgkKTt2YXIgVT1CLm9wdGlvbnMmJkIub3B0aW9ucy5yYW5nZXM7dHlwZW9mIEYueXkucGFyc2VFcnJvcj09ImZ1bmN0aW9uIj90aGlzLnBhcnNlRXJyb3I9Ri55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmdW5jdGlvbiBLKHNlKXtFLmxlbmd0aD1FLmxlbmd0aC0yKnNlLEMubGVuZ3RoPUMubGVuZ3RoLXNlLEQubGVuZ3RoPUQubGVuZ3RoLXNlfW8oSywicG9wU3RhY2siKTtmdW5jdGlvbiBlZSgpe3ZhciBzZTtyZXR1cm4gc2U9Xy5wb3AoKXx8Qi5sZXgoKXx8TSx0eXBlb2Ygc2UhPSJudW1iZXIiJiYoc2UgaW5zdGFuY2VvZiBBcnJheSYmKF89c2Usc2U9Xy5wb3AoKSksc2U9dy5zeW1ib2xzX1tzZV18fHNlKSxzZX1vKGVlLCJsZXgiKTtmb3IodmFyIFksY2UsWix1ZSxRLGosbmU9e30sdGUsaGUsbGUsSjs7KXtpZihaPUVbRS5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1taXT91ZT10aGlzLmRlZmF1bHRBY3Rpb25zW1pdOigoWT09PW51bGx8fHR5cGVvZiBZPiJ1IikmJihZPWVlKCkpLHVlPU9bWl0mJk9bWl1bWV0pLHR5cGVvZiB1ZT4idSJ8fCF1ZS5sZW5ndGh8fCF1ZVswXSl7dmFyIFNlPSIiO0o9W107Zm9yKHRlIGluIE9bWl0pdGhpcy50ZXJtaW5hbHNfW3RlXSYmdGU+SSYmSi5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bdGVdKyInIik7Qi5zaG93UG9zaXRpb24/U2U9IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoaysxKStgOgpgK0Iuc2hvd1Bvc2l0aW9uKCkrYApFeHBlY3RpbmcgYCtKLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bWV18fFkpKyInIjpTZT0iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhrKzEpKyI6IFVuZXhwZWN0ZWQgIisoWT09TT8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1tZXXx8WSkrIiciKSx0aGlzLnBhcnNlRXJyb3IoU2Use3RleHQ6Qi5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bWV18fFksbGluZTpCLnl5bGluZW5vLGxvYzokLGV4cGVjdGVkOkp9KX1pZih1ZVswXWluc3RhbmNlb2YgQXJyYXkmJnVlLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrWisiLCB0b2tlbjogIitZKTtzd2l0Y2godWVbMF0pe2Nhc2UgMTpFLnB1c2goWSksQy5wdXNoKEIueXl0ZXh0KSxELnB1c2goQi55eWxsb2MpLEUucHVzaCh1ZVsxXSksWT1udWxsLGNlPyhZPWNlLGNlPW51bGwpOihMPUIueXlsZW5nLFI9Qi55eXRleHQsaz1CLnl5bGluZW5vLCQ9Qi55eWxsb2MsQT4wJiZBLS0pO2JyZWFrO2Nhc2UgMjppZihoZT10aGlzLnByb2R1Y3Rpb25zX1t1ZVsxXV1bMV0sbmUuJD1DW0MubGVuZ3RoLWhlXSxuZS5fJD17Zmlyc3RfbGluZTpEW0QubGVuZ3RoLShoZXx8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOkRbRC5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjpEW0QubGVuZ3RoLShoZXx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpEW0QubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxVJiYobmUuXyQucmFuZ2U9W0RbRC5sZW5ndGgtKGhlfHwxKV0ucmFuZ2VbMF0sRFtELmxlbmd0aC0xXS5yYW5nZVsxXV0pLGo9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KG5lLFtSLEwsayxGLnl5LHVlWzFdLEMsRF0uY29uY2F0KFApKSx0eXBlb2YgajwidSIpcmV0dXJuIGo7aGUmJihFPUUuc2xpY2UoMCwtMSpoZSoyKSxDPUMuc2xpY2UoMCwtMSpoZSksRD1ELnNsaWNlKDAsLTEqaGUpKSxFLnB1c2godGhpcy5wcm9kdWN0aW9uc19bdWVbMV1dWzBdKSxDLnB1c2gobmUuJCksRC5wdXNoKG5lLl8kKSxsZT1PW0VbRS5sZW5ndGgtMl1dW0VbRS5sZW5ndGgtMV1dLEUucHVzaChsZSk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH0sInBhcnNlIil9LHg9ZnVuY3Rpb24oKXt2YXIgVD17RU9GOjEscGFyc2VFcnJvcjpvKGZ1bmN0aW9uKHcsRSl7aWYodGhpcy55eS5wYXJzZXIpdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcih3LEUpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKHcpfSwicGFyc2VFcnJvciIpLHNldElucHV0Om8oZnVuY3Rpb24oUyx3KXtyZXR1cm4gdGhpcy55eT13fHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD1TLHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSwic2V0SW5wdXQiKSxpbnB1dDpvKGZ1bmN0aW9uKCl7dmFyIFM9dGhpcy5faW5wdXRbMF07dGhpcy55eXRleHQrPVMsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPVMsdGhpcy5tYXRjaGVkKz1TO3ZhciB3PVMubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpO3JldHVybiB3Pyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSxTfSwiaW5wdXQiKSx1bnB1dDpvKGZ1bmN0aW9uKFMpe3ZhciB3PVMubGVuZ3RoLEU9Uy5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PVMrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLXcpLHRoaXMub2Zmc2V0LT13O3ZhciBfPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLEUubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1FLmxlbmd0aC0xKTt2YXIgQz10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46RT8oRS5sZW5ndGg9PT1fLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrX1tfLmxlbmd0aC1FLmxlbmd0aF0ubGVuZ3RoLUVbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi13fSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W0NbMF0sQ1swXSt0aGlzLnl5bGVuZy13XSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LCJ1bnB1dCIpLG1vcmU6byhmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LCJtb3JlIikscmVqZWN0Om8oZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXRoaXMuX2JhY2t0cmFjaz0hMDtlbHNlIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpK2AuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSk7cmV0dXJuIHRoaXN9LCJyZWplY3QiKSxsZXNzOm8oZnVuY3Rpb24oUyl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKFMpKX0sImxlc3MiKSxwYXN0SW5wdXQ6byhmdW5jdGlvbigpe3ZhciBTPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4oUy5sZW5ndGg+MjA/Ii4uLiI6IiIpK1Muc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LCJwYXN0SW5wdXQiKSx1cGNvbWluZ0lucHV0Om8oZnVuY3Rpb24oKXt2YXIgUz10aGlzLm1hdGNoO3JldHVybiBTLmxlbmd0aDwyMCYmKFMrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLVMubGVuZ3RoKSksKFMuc3Vic3RyKDAsMjApKyhTLmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSwidXBjb21pbmdJbnB1dCIpLHNob3dQb3NpdGlvbjpvKGZ1bmN0aW9uKCl7dmFyIFM9dGhpcy5wYXN0SW5wdXQoKSx3PW5ldyBBcnJheShTLmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIFMrdGhpcy51cGNvbWluZ0lucHV0KCkrYApgK3crIl4ifSwic2hvd1Bvc2l0aW9uIiksdGVzdF9tYXRjaDpvKGZ1bmN0aW9uKFMsdyl7dmFyIEUsXyxDO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihDPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKEMueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksXz1TWzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSxfJiYodGhpcy55eWxpbmVubys9Xy5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpfP19bXy5sZW5ndGgtMV0ubGVuZ3RoLV9bXy5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitTWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPVNbMF0sdGhpcy5tYXRjaCs9U1swXSx0aGlzLm1hdGNoZXM9Uyx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZShTWzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz1TWzBdLEU9dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsdyx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxFKXJldHVybiBFO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBEIGluIEMpdGhpc1tEXT1DW0RdO3JldHVybiExfXJldHVybiExfSwidGVzdF9tYXRjaCIpLG5leHQ6byhmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBTLHcsRSxfO3RoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIEM9dGhpcy5fY3VycmVudFJ1bGVzKCksRD0wO0Q8Qy5sZW5ndGg7RCsrKWlmKEU9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tDW0RdXSksRSYmKCF3fHxFWzBdLmxlbmd0aD53WzBdLmxlbmd0aCkpe2lmKHc9RSxfPUQsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoUz10aGlzLnRlc3RfbWF0Y2goRSxDW0RdKSxTIT09ITEpcmV0dXJuIFM7aWYodGhpcy5fYmFja3RyYWNrKXt3PSExO2NvbnRpbnVlfWVsc2UgcmV0dXJuITF9ZWxzZSBpZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIHc/KFM9dGhpcy50ZXN0X21hdGNoKHcsQ1tfXSksUyE9PSExP1M6ITEpOnRoaXMuX2lucHV0PT09IiI/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC4KYCt0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LCJuZXh0IiksbGV4Om8oZnVuY3Rpb24oKXt2YXIgdz10aGlzLm5leHQoKTtyZXR1cm4gd3x8dGhpcy5sZXgoKX0sImxleCIpLGJlZ2luOm8oZnVuY3Rpb24odyl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKHcpfSwiYmVnaW4iKSxwb3BTdGF0ZTpvKGZ1bmN0aW9uKCl7dmFyIHc9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMTtyZXR1cm4gdz4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sInBvcFN0YXRlIiksX2N1cnJlbnRSdWxlczpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sIl9jdXJyZW50UnVsZXMiKSx0b3BTdGF0ZTpvKGZ1bmN0aW9uKHcpe3JldHVybiB3PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnMod3x8MCksdz49MD90aGlzLmNvbmRpdGlvblN0YWNrW3ddOiJJTklUSUFMIn0sInRvcFN0YXRlIikscHVzaFN0YXRlOm8oZnVuY3Rpb24odyl7dGhpcy5iZWdpbih3KX0sInB1c2hTdGF0ZSIpLHN0YXRlU3RhY2tTaXplOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LCJzdGF0ZVN0YWNrU2l6ZSIpLG9wdGlvbnM6e30scGVyZm9ybUFjdGlvbjpvKGZ1bmN0aW9uKHcsRSxfLEMpe3ZhciBEPUM7c3dpdGNoKF8pe2Nhc2UgMDpyZXR1cm4gMTA7Y2FzZSAxOnJldHVybiB3LmdldExvZ2dlcigpLmRlYnVnKCJGb3VuZCBzcGFjZS1ibG9jayIpLDMxO2JyZWFrO2Nhc2UgMjpyZXR1cm4gdy5nZXRMb2dnZXIoKS5kZWJ1ZygiRm91bmQgbmwtYmxvY2siKSwzMTticmVhaztjYXNlIDM6cmV0dXJuIHcuZ2V0TG9nZ2VyKCkuZGVidWcoIkZvdW5kIHNwYWNlLWJsb2NrIiksMjk7YnJlYWs7Y2FzZSA0OncuZ2V0TG9nZ2VyKCkuZGVidWcoIi4iLEUueXl0ZXh0KTticmVhaztjYXNlIDU6dy5nZXRMb2dnZXIoKS5kZWJ1ZygiXyIsRS55eXRleHQpO2JyZWFrO2Nhc2UgNjpyZXR1cm4gNTtjYXNlIDc6cmV0dXJuIEUueXl0ZXh0PS0xLDI4O2JyZWFrO2Nhc2UgODpyZXR1cm4gRS55eXRleHQ9RS55eXRleHQucmVwbGFjZSgvY29sdW1uc1xzKy8sIiIpLHcuZ2V0TG9nZ2VyKCkuZGVidWcoIkNPTFVNTlMgKExFWCkiLEUueXl0ZXh0KSwyODticmVhaztjYXNlIDk6dGhpcy5wdXNoU3RhdGUoIm1kX3N0cmluZyIpO2JyZWFrO2Nhc2UgMTA6cmV0dXJuIk1EX1NUUiI7Y2FzZSAxMTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxMjp0aGlzLnB1c2hTdGF0ZSgic3RyaW5nIik7YnJlYWs7Y2FzZSAxMzp3LmdldExvZ2dlcigpLmRlYnVnKCJMRVg6IFBPUFBJTkcgU1RSOiIsRS55eXRleHQpLHRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE0OnJldHVybiB3LmdldExvZ2dlcigpLmRlYnVnKCJMRVg6IFNUUiBlbmQ6IixFLnl5dGV4dCksIlNUUiI7YnJlYWs7Y2FzZSAxNTpyZXR1cm4gRS55eXRleHQ9RS55eXRleHQucmVwbGFjZSgvc3BhY2VcOi8sIiIpLHcuZ2V0TG9nZ2VyKCkuZGVidWcoIlNQQUNFIE5VTSAoTEVYKSIsRS55eXRleHQpLDIxO2JyZWFrO2Nhc2UgMTY6cmV0dXJuIEUueXl0ZXh0PSIxIix3LmdldExvZ2dlcigpLmRlYnVnKCJDT0xVTU5TIChMRVgpIixFLnl5dGV4dCksMjE7YnJlYWs7Y2FzZSAxNzpyZXR1cm4gNDM7Y2FzZSAxODpyZXR1cm4iTElOS1NUWUxFIjtjYXNlIDE5OnJldHVybiJJTlRFUlBPTEFURSI7Y2FzZSAyMDpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIkNMQVNTREVGIiksNDA7YnJlYWs7Y2FzZSAyMTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJDTEFTU0RFRklEIiksIkRFRkFVTFRfQ0xBU1NERUZfSUQiO2JyZWFrO2Nhc2UgMjI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiQ0xBU1NERUZJRCIpLDQxO2JyZWFrO2Nhc2UgMjM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw0MjticmVhaztjYXNlIDI0OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiQ0xBU1MiKSw0NDticmVhaztjYXNlIDI1OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIkNMQVNTX1NUWUxFIiksNDU7YnJlYWs7Y2FzZSAyNjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDQ2O2JyZWFrO2Nhc2UgMjc6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJTVFlMRV9TVE1OVCIpLDQ3O2JyZWFrO2Nhc2UgMjg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiU1RZTEVfREVGSU5JVElPTiIpLDQ4O2JyZWFrO2Nhc2UgMjk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw0OTticmVhaztjYXNlIDMwOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiYWNjX3RpdGxlIiksImFjY190aXRsZSI7YnJlYWs7Y2FzZSAzMTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJhY2NfdGl0bGVfdmFsdWUiO2JyZWFrO2Nhc2UgMzI6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJhY2NfZGVzY3IiKSwiYWNjX2Rlc2NyIjticmVhaztjYXNlIDMzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksImFjY19kZXNjcl92YWx1ZSI7YnJlYWs7Y2FzZSAzNDp0aGlzLnB1c2hTdGF0ZSgiYWNjX2Rlc2NyX211bHRpbGluZSIpO2JyZWFrO2Nhc2UgMzU6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMzY6cmV0dXJuImFjY19kZXNjcl9tdWx0aWxpbmVfdmFsdWUiO2Nhc2UgMzc6cmV0dXJuIDMwO2Nhc2UgMzg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx3LmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ICgoIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSAzOTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHcuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogKCgiKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDQwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdy5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiApKSIpLCJOT0RFX0RFTkQiO2JyZWFrO2Nhc2UgNDE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx3LmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ICgoIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSA0MjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHcuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogKCgiKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDQzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdy5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiAoLSIpLCJOT0RFX0RFTkQiO2JyZWFrO2Nhc2UgNDQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx3LmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IC0pIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSA0NTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHcuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogKCgiKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDQ2OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdy5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBdXSIpLCJOT0RFX0RFTkQiO2JyZWFrO2Nhc2UgNDc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx3LmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ICgiKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDQ4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdy5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBdKSIpLCJOT0RFX0RFTkQiO2JyZWFrO2Nhc2UgNDk6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx3LmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IC9dIiksIk5PREVfREVORCI7YnJlYWs7Y2FzZSA1MDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHcuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogL10iKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDUxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdy5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiApXSIpLCJOT0RFX0RFTkQiO2JyZWFrO2Nhc2UgNTI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx3LmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ICkiKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDUzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdy5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBdPiIpLCJOT0RFX0RFTkQiO2JyZWFrO2Nhc2UgNTQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx3LmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IF0iKSwiTk9ERV9ERU5EIjticmVhaztjYXNlIDU1OnJldHVybiB3LmdldExvZ2dlcigpLmRlYnVnKCJMZXhhOiAtKSIpLHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7YnJlYWs7Y2FzZSA1NjpyZXR1cm4gdy5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4YTogKC0iKSx0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2JyZWFrO2Nhc2UgNTc6cmV0dXJuIHcuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleGE6ICkpIiksdGhpcy5wdXNoU3RhdGUoIk5PREUiKSwzNjticmVhaztjYXNlIDU4OnJldHVybiB3LmdldExvZ2dlcigpLmRlYnVnKCJMZXhhOiApIiksdGhpcy5wdXNoU3RhdGUoIk5PREUiKSwzNjticmVhaztjYXNlIDU5OnJldHVybiB3LmdldExvZ2dlcigpLmRlYnVnKCJMZXg6ICgoKCIpLHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7YnJlYWs7Y2FzZSA2MDpyZXR1cm4gdy5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4YTogKSIpLHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7YnJlYWs7Y2FzZSA2MTpyZXR1cm4gdy5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4YTogKSIpLHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7YnJlYWs7Y2FzZSA2MjpyZXR1cm4gdy5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4YTogKSIpLHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7YnJlYWs7Y2FzZSA2MzpyZXR1cm4gdy5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4YzogPiIpLHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7YnJlYWs7Y2FzZSA2NDpyZXR1cm4gdy5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4YTogKFsiKSx0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2JyZWFrO2Nhc2UgNjU6cmV0dXJuIHcuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleGE6ICkiKSx0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2JyZWFrO2Nhc2UgNjY6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7YnJlYWs7Y2FzZSA2NzpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIk5PREUiKSwzNjticmVhaztjYXNlIDY4OnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2JyZWFrO2Nhc2UgNjk6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7YnJlYWs7Y2FzZSA3MDpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIk5PREUiKSwzNjticmVhaztjYXNlIDcxOnJldHVybiB0aGlzLnB1c2hTdGF0ZSgiTk9ERSIpLDM2O2JyZWFrO2Nhc2UgNzI6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7YnJlYWs7Y2FzZSA3MzpyZXR1cm4gdy5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4YTogWyIpLHRoaXMucHVzaFN0YXRlKCJOT0RFIiksMzY7YnJlYWs7Y2FzZSA3NDpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIkJMT0NLX0FSUk9XIiksdy5nZXRMb2dnZXIoKS5kZWJ1ZygiTEVYIEFSUiBTVEFSVCIpLDM4O2JyZWFrO2Nhc2UgNzU6cmV0dXJuIHcuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogTk9ERV9JRCIsRS55eXRleHQpLDMyO2JyZWFrO2Nhc2UgNzY6cmV0dXJuIHcuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogRU9GIixFLnl5dGV4dCksODticmVhaztjYXNlIDc3OnRoaXMucHVzaFN0YXRlKCJtZF9zdHJpbmciKTticmVhaztjYXNlIDc4OnRoaXMucHVzaFN0YXRlKCJtZF9zdHJpbmciKTticmVhaztjYXNlIDc5OnJldHVybiJOT0RFX0RFU0NSIjtjYXNlIDgwOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDgxOncuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogU3RhcnRpbmcgc3RyaW5nIiksdGhpcy5wdXNoU3RhdGUoInN0cmluZyIpO2JyZWFrO2Nhc2UgODI6dy5nZXRMb2dnZXIoKS5kZWJ1ZygiTEVYIEFSUjogU3RhcnRpbmcgc3RyaW5nIiksdGhpcy5wdXNoU3RhdGUoInN0cmluZyIpO2JyZWFrO2Nhc2UgODM6cmV0dXJuIHcuZ2V0TG9nZ2VyKCkuZGVidWcoIkxFWDogTk9ERV9ERVNDUjoiLEUueXl0ZXh0KSwiTk9ERV9ERVNDUiI7YnJlYWs7Y2FzZSA4NDp3LmdldExvZ2dlcigpLmRlYnVnKCJMRVggUE9QUElORyIpLHRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDg1OncuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogPT5CQUUiKSx0aGlzLnB1c2hTdGF0ZSgiQVJST1dfRElSIik7YnJlYWs7Y2FzZSA4NjpyZXR1cm4gRS55eXRleHQ9RS55eXRleHQucmVwbGFjZSgvXixccyovLCIiKSx3LmdldExvZ2dlcigpLmRlYnVnKCJMZXggKHJpZ2h0KTogZGlyOiIsRS55eXRleHQpLCJESVIiO2JyZWFrO2Nhc2UgODc6cmV0dXJuIEUueXl0ZXh0PUUueXl0ZXh0LnJlcGxhY2UoL14sXHMqLywiIiksdy5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4IChsZWZ0KToiLEUueXl0ZXh0KSwiRElSIjticmVhaztjYXNlIDg4OnJldHVybiBFLnl5dGV4dD1FLnl5dGV4dC5yZXBsYWNlKC9eLFxzKi8sIiIpLHcuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleCAoeCk6IixFLnl5dGV4dCksIkRJUiI7YnJlYWs7Y2FzZSA4OTpyZXR1cm4gRS55eXRleHQ9RS55eXRleHQucmVwbGFjZSgvXixccyovLCIiKSx3LmdldExvZ2dlcigpLmRlYnVnKCJMZXggKHkpOiIsRS55eXRleHQpLCJESVIiO2JyZWFrO2Nhc2UgOTA6cmV0dXJuIEUueXl0ZXh0PUUueXl0ZXh0LnJlcGxhY2UoL14sXHMqLywiIiksdy5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4ICh1cCk6IixFLnl5dGV4dCksIkRJUiI7YnJlYWs7Y2FzZSA5MTpyZXR1cm4gRS55eXRleHQ9RS55eXRleHQucmVwbGFjZSgvXixccyovLCIiKSx3LmdldExvZ2dlcigpLmRlYnVnKCJMZXggKGRvd24pOiIsRS55eXRleHQpLCJESVIiO2JyZWFrO2Nhc2UgOTI6cmV0dXJuIEUueXl0ZXh0PSJdPiIsdy5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4IChBUlJPV19ESVIgZW5kKToiLEUueXl0ZXh0KSx0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLCJCTE9DS19BUlJPV19FTkQiO2JyZWFrO2Nhc2UgOTM6cmV0dXJuIHcuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogTElOSyIsIiMiK0UueXl0ZXh0KyIjIiksMTU7YnJlYWs7Y2FzZSA5NDpyZXR1cm4gdy5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBMSU5LIixFLnl5dGV4dCksMTU7YnJlYWs7Y2FzZSA5NTpyZXR1cm4gdy5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBMSU5LIixFLnl5dGV4dCksMTU7YnJlYWs7Y2FzZSA5NjpyZXR1cm4gdy5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBMSU5LIixFLnl5dGV4dCksMTU7YnJlYWs7Y2FzZSA5NzpyZXR1cm4gdy5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBTVEFSVF9MSU5LIixFLnl5dGV4dCksdGhpcy5wdXNoU3RhdGUoIkxMQUJFTCIpLDE2O2JyZWFrO2Nhc2UgOTg6cmV0dXJuIHcuZ2V0TG9nZ2VyKCkuZGVidWcoIkxleDogU1RBUlRfTElOSyIsRS55eXRleHQpLHRoaXMucHVzaFN0YXRlKCJMTEFCRUwiKSwxNjticmVhaztjYXNlIDk5OnJldHVybiB3LmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IFNUQVJUX0xJTksiLEUueXl0ZXh0KSx0aGlzLnB1c2hTdGF0ZSgiTExBQkVMIiksMTY7YnJlYWs7Y2FzZSAxMDA6dGhpcy5wdXNoU3RhdGUoIm1kX3N0cmluZyIpO2JyZWFrO2Nhc2UgMTAxOnJldHVybiB3LmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IFN0YXJ0aW5nIHN0cmluZyIpLHRoaXMucHVzaFN0YXRlKCJzdHJpbmciKSwiTElOS19MQUJFTCI7YnJlYWs7Y2FzZSAxMDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx3LmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IExJTksiLCIjIitFLnl5dGV4dCsiIyIpLDE1O2JyZWFrO2Nhc2UgMTAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdy5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBMSU5LIixFLnl5dGV4dCksMTU7YnJlYWs7Y2FzZSAxMDQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx3LmdldExvZ2dlcigpLmRlYnVnKCJMZXg6IExJTksiLEUueXl0ZXh0KSwxNTticmVhaztjYXNlIDEwNTpyZXR1cm4gdy5nZXRMb2dnZXIoKS5kZWJ1ZygiTGV4OiBDT0xPTiIsRS55eXRleHQpLEUueXl0ZXh0PUUueXl0ZXh0LnNsaWNlKDEpLDI3O2JyZWFrfX0sImFub255bW91cyIpLHJ1bGVzOlsvXig/OmJsb2NrLWJldGFcYikvLC9eKD86YmxvY2tccyspLywvXig/OmJsb2NrXG4rKS8sL14oPzpibG9jazopLywvXig/Oltcc10rKS8sL14oPzpbXG5dKykvLC9eKD86KChcdTAwMERcdTAwMEEpfChcdTAwMEEpKSkvLC9eKD86Y29sdW1uc1xzK2F1dG9cYikvLC9eKD86Y29sdW1uc1xzK1tcZF0rKS8sL14oPzpbIl1bYF0pLywvXig/OlteYCJdKykvLC9eKD86W2BdWyJdKS8sL14oPzpbIl0pLywvXig/OlsiXSkvLC9eKD86W14iXSopLywvXig/OnNwYWNlWzpdXGQrKS8sL14oPzpzcGFjZVxiKS8sL14oPzpkZWZhdWx0XGIpLywvXig/OmxpbmtTdHlsZVxiKS8sL14oPzppbnRlcnBvbGF0ZVxiKS8sL14oPzpjbGFzc0RlZlxzKykvLC9eKD86REVGQVVMVFxzKykvLC9eKD86XHcrXHMrKS8sL14oPzpbXlxuXSopLywvXig/OmNsYXNzXHMrKS8sL14oPzooXHcrKSsoKCxccypcdyspKikpLywvXig/OlteXG5dKikvLC9eKD86c3R5bGVccyspLywvXig/OihcdyspKygoLFxzKlx3KykqKSkvLC9eKD86W15cbl0qKS8sL14oPzphY2NUaXRsZVxzKjpccyopLywvXig/Oig/IVxufHwpKlteXG5dKikvLC9eKD86YWNjRGVzY3Jccyo6XHMqKS8sL14oPzooPyFcbnx8KSpbXlxuXSopLywvXig/OmFjY0Rlc2NyXHMqXHtccyopLywvXig/OltcfV0pLywvXig/OlteXH1dKikvLC9eKD86ZW5kXGJccyopLywvXig/OlwoXChcKCkvLC9eKD86XClcKVwpKS8sL14oPzpbXCldXCkpLywvXig/Olx9XH0pLywvXig/Olx9KS8sL14oPzpcKC0pLywvXig/Oi1cKSkvLC9eKD86XChcKCkvLC9eKD86XF1cXSkvLC9eKD86XCgpLywvXig/OlxdXCkpLywvXig/OlxcXF0pLywvXig/OlwvXF0pLywvXig/OlwpXF0pLywvXig/OltcKV0pLywvXig/OlxdPikvLC9eKD86W1xdXSkvLC9eKD86LVwpKS8sL14oPzpcKC0pLywvXig/OlwpXCkpLywvXig/OlwpKS8sL14oPzpcKFwoXCgpLywvXig/OlwoXCgpLywvXig/Olx7XHspLywvXig/Olx7KS8sL14oPzo+KS8sL14oPzpcKFxbKS8sL14oPzpcKCkvLC9eKD86XFtcWykvLC9eKD86XFtcfCkvLC9eKD86XFtcKCkvLC9eKD86XClcKVwpKS8sL14oPzpcW1xcKS8sL14oPzpcW1wvKS8sL14oPzpcW1xcKS8sL14oPzpcWykvLC9eKD86PFxbKS8sL14oPzpbXlwoXFtcblwtXClce1x9XHNcPFw+Ol0rKS8sL14oPzokKS8sL14oPzpbIl1bYF0pLywvXig/OlsiXVtgXSkvLC9eKD86W15gIl0rKS8sL14oPzpbYF1bIl0pLywvXig/OlsiXSkvLC9eKD86WyJdKS8sL14oPzpbXiJdKykvLC9eKD86WyJdKS8sL14oPzpcXT5ccypcKCkvLC9eKD86LD9ccypyaWdodFxzKikvLC9eKD86LD9ccypsZWZ0XHMqKS8sL14oPzosP1xzKnhccyopLywvXig/Oiw/XHMqeVxzKikvLC9eKD86LD9ccyp1cFxzKikvLC9eKD86LD9ccypkb3duXHMqKS8sL14oPzpcKVxzKikvLC9eKD86XHMqW3hvPF0/LS0rWy14bz5dXHMqKS8sL14oPzpccypbeG88XT89PStbPXhvPl1ccyopLywvXig/OlxzKlt4bzxdPy0/XC4rLVt4bz5dP1xzKikvLC9eKD86XHMqfn5bXH5dK1xzKikvLC9eKD86XHMqW3hvPF0/LS1ccyopLywvXig/OlxzKlt4bzxdPz09XHMqKS8sL14oPzpccypbeG88XT8tXC5ccyopLywvXig/OlsiXVtgXSkvLC9eKD86WyJdKS8sL14oPzpccypbeG88XT8tLStbLXhvPl1ccyopLywvXig/OlxzKlt4bzxdPz09K1s9eG8+XVxzKikvLC9eKD86XHMqW3hvPF0/LT9cListW3hvPl0/XHMqKS8sL14oPzo6XGQrKS9dLGNvbmRpdGlvbnM6e1NUWUxFX0RFRklOSVRJT046e3J1bGVzOlsyOV0saW5jbHVzaXZlOiExfSxTVFlMRV9TVE1OVDp7cnVsZXM6WzI4XSxpbmNsdXNpdmU6ITF9LENMQVNTREVGSUQ6e3J1bGVzOlsyM10saW5jbHVzaXZlOiExfSxDTEFTU0RFRjp7cnVsZXM6WzIxLDIyXSxpbmNsdXNpdmU6ITF9LENMQVNTX1NUWUxFOntydWxlczpbMjZdLGluY2x1c2l2ZTohMX0sQ0xBU1M6e3J1bGVzOlsyNV0saW5jbHVzaXZlOiExfSxMTEFCRUw6e3J1bGVzOlsxMDAsMTAxLDEwMiwxMDMsMTA0XSxpbmNsdXNpdmU6ITF9LEFSUk9XX0RJUjp7cnVsZXM6Wzg2LDg3LDg4LDg5LDkwLDkxLDkyXSxpbmNsdXNpdmU6ITF9LEJMT0NLX0FSUk9XOntydWxlczpbNzcsODIsODVdLGluY2x1c2l2ZTohMX0sTk9ERTp7cnVsZXM6WzM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDc4LDgxXSxpbmNsdXNpdmU6ITF9LG1kX3N0cmluZzp7cnVsZXM6WzEwLDExLDc5LDgwXSxpbmNsdXNpdmU6ITF9LHNwYWNlOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzEzLDE0LDgzLDg0XSxpbmNsdXNpdmU6ITF9LGFjY19kZXNjcl9tdWx0aWxpbmU6e3J1bGVzOlszNSwzNl0saW5jbHVzaXZlOiExfSxhY2NfZGVzY3I6e3J1bGVzOlszM10saW5jbHVzaXZlOiExfSxhY2NfdGl0bGU6e3J1bGVzOlszMV0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDIsMyw0LDUsNiw3LDgsOSwxMiwxNSwxNiwxNywxOCwxOSwyMCwyNCwyNywzMCwzMiwzNCwzNyw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw5Myw5NCw5NSw5Niw5Nyw5OCw5OSwxMDVdLGluY2x1c2l2ZTohMH19fTtyZXR1cm4gVH0oKTt2LmxleGVyPXg7ZnVuY3Rpb24gYigpe3RoaXMueXk9e319cmV0dXJuIG8oYiwiUGFyc2VyIiksYi5wcm90b3R5cGU9dix2LlBhcnNlcj1iLG5ldyBifSgpO0lGLnBhcnNlcj1JRjtMdmU9SUZ9KTtmdW5jdGlvbiBmcnQodCl7c3dpdGNoKFguZGVidWcoInR5cGVTdHIyVHlwZSIsdCksdCl7Y2FzZSJbXSI6cmV0dXJuInNxdWFyZSI7Y2FzZSIoKSI6cmV0dXJuIFguZGVidWcoIndlIGhhdmUgYSByb3VuZCIpLCJyb3VuZCI7Y2FzZSIoKCkpIjpyZXR1cm4iY2lyY2xlIjtjYXNlIj5dIjpyZXR1cm4icmVjdF9sZWZ0X2ludl9hcnJvdyI7Y2FzZSJ7fSI6cmV0dXJuImRpYW1vbmQiO2Nhc2Uie3t9fSI6cmV0dXJuImhleGFnb24iO2Nhc2UiKFtdKSI6cmV0dXJuInN0YWRpdW0iO2Nhc2UiW1tdXSI6cmV0dXJuInN1YnJvdXRpbmUiO2Nhc2UiWygpXSI6cmV0dXJuImN5bGluZGVyIjtjYXNlIigoKCkpKSI6cmV0dXJuImRvdWJsZWNpcmNsZSI7Y2FzZSJbLy9dIjpyZXR1cm4ibGVhbl9yaWdodCI7Y2FzZSJbXFxcXF0iOnJldHVybiJsZWFuX2xlZnQiO2Nhc2UiWy9cXF0iOnJldHVybiJ0cmFwZXpvaWQiO2Nhc2UiW1xcL10iOnJldHVybiJpbnZfdHJhcGV6b2lkIjtjYXNlIjxbXT4iOnJldHVybiJibG9ja19hcnJvdyI7ZGVmYXVsdDpyZXR1cm4ibmEifX1mdW5jdGlvbiBkcnQodCl7c3dpdGNoKFguZGVidWcoInR5cGVTdHIyVHlwZSIsdCksdCl7Y2FzZSI9PSI6cmV0dXJuInRoaWNrIjtkZWZhdWx0OnJldHVybiJub3JtYWwifX1mdW5jdGlvbiBwcnQodCl7c3dpdGNoKHQudHJpbSgpKXtjYXNlIi0teCI6cmV0dXJuImFycm93X2Nyb3NzIjtjYXNlIi0tbyI6cmV0dXJuImFycm93X2NpcmNsZSI7ZGVmYXVsdDpyZXR1cm4iYXJyb3dfcG9pbnQifX12YXIgWWwsUEYsT0YsTnZlLE12ZSxhcnQsT3ZlLHNydCxiQyxvcnQsbHJ0LGNydCx1cnQsUHZlLEJGLF80LGhydCxJdmUsbXJ0LGdydCx5cnQsdnJ0LHhydCxicnQsVHJ0LHdydCxrcnQsRXJ0LFNydCxCdmUsRnZlPU4oKCk9PnsidXNlIHN0cmljdCI7SkwoKTttaSgpO0d0KCk7eXQoKTtwcigpO2NpKCk7WWw9bmV3IE1hcCxQRj1bXSxPRj1uZXcgTWFwLE52ZT0iY29sb3IiLE12ZT0iZmlsbCIsYXJ0PSJiZ0ZpbGwiLE92ZT0iLCIsc3J0PW1lKCksYkM9bmV3IE1hcCxvcnQ9byh0PT5aZS5zYW5pdGl6ZVRleHQodCxzcnQpLCJzYW5pdGl6ZVRleHQiKSxscnQ9byhmdW5jdGlvbih0LGU9IiIpe2xldCByPWJDLmdldCh0KTtyfHwocj17aWQ6dCxzdHlsZXM6W10sdGV4dFN0eWxlczpbXX0sYkMuc2V0KHQscikpLGU/LnNwbGl0KE92ZSkuZm9yRWFjaChuPT57bGV0IGk9bi5yZXBsYWNlKC8oW147XSopOy8sIiQxIikudHJpbSgpO2lmKFJlZ0V4cChOdmUpLmV4ZWMobikpe2xldCBzPWkucmVwbGFjZShNdmUsYXJ0KS5yZXBsYWNlKE52ZSxNdmUpO3IudGV4dFN0eWxlcy5wdXNoKHMpfXIuc3R5bGVzLnB1c2goaSl9KX0sImFkZFN0eWxlQ2xhc3MiKSxjcnQ9byhmdW5jdGlvbih0LGU9IiIpe2xldCByPVlsLmdldCh0KTtlIT1udWxsJiYoci5zdHlsZXM9ZS5zcGxpdChPdmUpKX0sImFkZFN0eWxlMk5vZGUiKSx1cnQ9byhmdW5jdGlvbih0LGUpe3Quc3BsaXQoIiwiKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe2xldCBuPVlsLmdldChyKTtpZihuPT09dm9pZCAwKXtsZXQgaT1yLnRyaW0oKTtuPXtpZDppLHR5cGU6Im5hIixjaGlsZHJlbjpbXX0sWWwuc2V0KGksbil9bi5jbGFzc2VzfHwobi5jbGFzc2VzPVtdKSxuLmNsYXNzZXMucHVzaChlKX0pfSwic2V0Q3NzQ2xhc3MiKSxQdmU9bygodCxlKT0+e2xldCByPXQuZmxhdCgpLG49W107Zm9yKGxldCBpIG9mIHIpe2lmKGkubGFiZWwmJihpLmxhYmVsPW9ydChpLmxhYmVsKSksaS50eXBlPT09ImNsYXNzRGVmIil7bHJ0KGkuaWQsaS5jc3MpO2NvbnRpbnVlfWlmKGkudHlwZT09PSJhcHBseUNsYXNzIil7dXJ0KGkuaWQsaT8uc3R5bGVDbGFzcz8/IiIpO2NvbnRpbnVlfWlmKGkudHlwZT09PSJhcHBseVN0eWxlcyIpe2k/LnN0eWxlc1N0ciYmY3J0KGkuaWQsaT8uc3R5bGVzU3RyKTtjb250aW51ZX1pZihpLnR5cGU9PT0iY29sdW1uLXNldHRpbmciKWUuY29sdW1ucz1pLmNvbHVtbnM/Py0xO2Vsc2UgaWYoaS50eXBlPT09ImVkZ2UiKXtsZXQgYT0oT0YuZ2V0KGkuaWQpPz8wKSsxO09GLnNldChpLmlkLGEpLGkuaWQ9YSsiLSIraS5pZCxQRi5wdXNoKGkpfWVsc2V7aS5sYWJlbHx8KGkudHlwZT09PSJjb21wb3NpdGUiP2kubGFiZWw9IiI6aS5sYWJlbD1pLmlkKTtsZXQgYT1ZbC5nZXQoaS5pZCk7aWYoYT09PXZvaWQgMD9ZbC5zZXQoaS5pZCxpKTooaS50eXBlIT09Im5hIiYmKGEudHlwZT1pLnR5cGUpLGkubGFiZWwhPT1pLmlkJiYoYS5sYWJlbD1pLmxhYmVsKSksaS5jaGlsZHJlbiYmUHZlKGkuY2hpbGRyZW4saSksaS50eXBlPT09InNwYWNlIil7bGV0IHM9aS53aWR0aD8/MTtmb3IobGV0IGw9MDtsPHM7bCsrKXtsZXQgdT1hbihpKTt1LmlkPXUuaWQrIi0iK2wsWWwuc2V0KHUuaWQsdSksbi5wdXNoKHUpfX1lbHNlIGE9PT12b2lkIDAmJm4ucHVzaChpKX19ZS5jaGlsZHJlbj1ufSwicG9wdWxhdGVCbG9ja0RhdGFiYXNlIiksQkY9W10sXzQ9e2lkOiJyb290Iix0eXBlOiJjb21wb3NpdGUiLGNoaWxkcmVuOltdLGNvbHVtbnM6LTF9LGhydD1vKCgpPT57WC5kZWJ1ZygiQ2xlYXIgY2FsbGVkIiksa3IoKSxfND17aWQ6InJvb3QiLHR5cGU6ImNvbXBvc2l0ZSIsY2hpbGRyZW46W10sY29sdW1uczotMX0sWWw9bmV3IE1hcChbWyJyb290IixfNF1dKSxCRj1bXSxiQz1uZXcgTWFwLFBGPVtdLE9GPW5ldyBNYXB9LCJjbGVhciIpO28oZnJ0LCJ0eXBlU3RyMlR5cGUiKTtvKGRydCwiZWRnZVR5cGVTdHIyVHlwZSIpO28ocHJ0LCJlZGdlU3RyVG9FZGdlRGF0YSIpO0l2ZT0wLG1ydD1vKCgpPT4oSXZlKyssImlkLSIrTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsMTIpKyItIitJdmUpLCJnZW5lcmF0ZUlkIiksZ3J0PW8odD0+e180LmNoaWxkcmVuPXQsUHZlKHQsXzQpLEJGPV80LmNoaWxkcmVufSwic2V0SGllcmFyY2h5IikseXJ0PW8odD0+e2xldCBlPVlsLmdldCh0KTtyZXR1cm4gZT9lLmNvbHVtbnM/ZS5jb2x1bW5zOmUuY2hpbGRyZW4/ZS5jaGlsZHJlbi5sZW5ndGg6LTE6LTF9LCJnZXRDb2x1bW5zIiksdnJ0PW8oKCk9PlsuLi5ZbC52YWx1ZXMoKV0sImdldEJsb2Nrc0ZsYXQiKSx4cnQ9bygoKT0+QkZ8fFtdLCJnZXRCbG9ja3MiKSxicnQ9bygoKT0+UEYsImdldEVkZ2VzIiksVHJ0PW8odD0+WWwuZ2V0KHQpLCJnZXRCbG9jayIpLHdydD1vKHQ9PntZbC5zZXQodC5pZCx0KX0sInNldEJsb2NrIiksa3J0PW8oKCk9PlgsImdldExvZ2dlciIpLEVydD1vKGZ1bmN0aW9uKCl7cmV0dXJuIGJDfSwiZ2V0Q2xhc3NlcyIpLFNydD17Z2V0Q29uZmlnOm8oKCk9PnRyKCkuYmxvY2ssImdldENvbmZpZyIpLHR5cGVTdHIyVHlwZTpmcnQsZWRnZVR5cGVTdHIyVHlwZTpkcnQsZWRnZVN0clRvRWRnZURhdGE6cHJ0LGdldExvZ2dlcjprcnQsZ2V0QmxvY2tzRmxhdDp2cnQsZ2V0QmxvY2tzOnhydCxnZXRFZGdlczpicnQsc2V0SGllcmFyY2h5OmdydCxnZXRCbG9jazpUcnQsc2V0QmxvY2s6d3J0LGdldENvbHVtbnM6eXJ0LGdldENsYXNzZXM6RXJ0LGNsZWFyOmhydCxnZW5lcmF0ZUlkOm1ydH0sQnZlPVNydH0pO3ZhciBUQyxDcnQsJHZlLHp2ZT1OKCgpPT57InVzZSBzdHJpY3QiO0tzKCk7WG0oKTtUQz1vKCh0LGUpPT57bGV0IHI9aWQsbj1yKHQsInIiKSxpPXIodCwiZyIpLGE9cih0LCJiIik7cmV0dXJuIFFhKG4saSxhLGUpfSwiZmFkZSIpLENydD1vKHQ9PmAubGFiZWwgewogICAgZm9udC1mYW1pbHk6ICR7dC5mb250RmFtaWx5fTsKICAgIGNvbG9yOiAke3Qubm9kZVRleHRDb2xvcnx8dC50ZXh0Q29sb3J9OwogIH0KICAuY2x1c3Rlci1sYWJlbCB0ZXh0IHsKICAgIGZpbGw6ICR7dC50aXRsZUNvbG9yfTsKICB9CiAgLmNsdXN0ZXItbGFiZWwgc3BhbixwIHsKICAgIGNvbG9yOiAke3QudGl0bGVDb2xvcn07CiAgfQoKCgogIC5sYWJlbCB0ZXh0LHNwYW4scCB7CiAgICBmaWxsOiAke3Qubm9kZVRleHRDb2xvcnx8dC50ZXh0Q29sb3J9OwogICAgY29sb3I6ICR7dC5ub2RlVGV4dENvbG9yfHx0LnRleHRDb2xvcn07CiAgfQoKICAubm9kZSByZWN0LAogIC5ub2RlIGNpcmNsZSwKICAubm9kZSBlbGxpcHNlLAogIC5ub2RlIHBvbHlnb24sCiAgLm5vZGUgcGF0aCB7CiAgICBmaWxsOiAke3QubWFpbkJrZ307CiAgICBzdHJva2U6ICR7dC5ub2RlQm9yZGVyfTsKICAgIHN0cm9rZS13aWR0aDogMXB4OwogIH0KICAuZmxvd2NoYXJ0LWxhYmVsIHRleHQgewogICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICB9CiAgLy8gLmZsb3djaGFydC1sYWJlbCAudGV4dC1vdXRlci10c3BhbiB7CiAgLy8gICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogIC8vIH0KICAvLyAuZmxvd2NoYXJ0LWxhYmVsIC50ZXh0LWlubmVyLXRzcGFuIHsKICAvLyAgIHRleHQtYW5jaG9yOiBzdGFydDsKICAvLyB9CgogIC5ub2RlIC5sYWJlbCB7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgfQogIC5ub2RlLmNsaWNrYWJsZSB7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgfQoKICAuYXJyb3doZWFkUGF0aCB7CiAgICBmaWxsOiAke3QuYXJyb3doZWFkQ29sb3J9OwogIH0KCiAgLmVkZ2VQYXRoIC5wYXRoIHsKICAgIHN0cm9rZTogJHt0LmxpbmVDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6IDIuMHB4OwogIH0KCiAgLmZsb3djaGFydC1saW5rIHsKICAgIHN0cm9rZTogJHt0LmxpbmVDb2xvcn07CiAgICBmaWxsOiBub25lOwogIH0KCiAgLmVkZ2VMYWJlbCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3QuZWRnZUxhYmVsQmFja2dyb3VuZH07CiAgICByZWN0IHsKICAgICAgb3BhY2l0eTogMC41OwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3QuZWRnZUxhYmVsQmFja2dyb3VuZH07CiAgICAgIGZpbGw6ICR7dC5lZGdlTGFiZWxCYWNrZ3JvdW5kfTsKICAgIH0KICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICB9CgogIC8qIEZvciBodG1sIGxhYmVscyBvbmx5ICovCiAgLmxhYmVsQmtnIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICR7VEModC5lZGdlTGFiZWxCYWNrZ3JvdW5kLC41KX07CiAgICAvLyBiYWNrZ3JvdW5kLWNvbG9yOgogIH0KCiAgLm5vZGUgLmNsdXN0ZXIgewogICAgLy8gZmlsbDogJHtUQyh0Lm1haW5Ca2csLjUpfTsKICAgIGZpbGw6ICR7VEModC5jbHVzdGVyQmtnLC41KX07CiAgICBzdHJva2U6ICR7VEModC5jbHVzdGVyQm9yZGVyLC4yKX07CiAgICBib3gtc2hhZG93OiByZ2JhKDUwLCA1MCwgOTMsIDAuMjUpIDBweCAxM3B4IDI3cHggLTVweCwgcmdiYSgwLCAwLCAwLCAwLjMpIDBweCA4cHggMTZweCAtOHB4OwogICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgfQoKICAuY2x1c3RlciB0ZXh0IHsKICAgIGZpbGw6ICR7dC50aXRsZUNvbG9yfTsKICB9CgogIC5jbHVzdGVyIHNwYW4scCB7CiAgICBjb2xvcjogJHt0LnRpdGxlQ29sb3J9OwogIH0KICAvKiAuY2x1c3RlciBkaXYgewogICAgY29sb3I6ICR7dC50aXRsZUNvbG9yfTsKICB9ICovCgogIGRpdi5tZXJtYWlkVG9vbHRpcCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBtYXgtd2lkdGg6IDIwMHB4OwogICAgcGFkZGluZzogMnB4OwogICAgZm9udC1mYW1pbHk6ICR7dC5mb250RmFtaWx5fTsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGJhY2tncm91bmQ6ICR7dC50ZXJ0aWFyeUNvbG9yfTsKICAgIGJvcmRlcjogMXB4IHNvbGlkICR7dC5ib3JkZXIyfTsKICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgei1pbmRleDogMTAwOwogIH0KCiAgLmZsb3djaGFydFRpdGxlVGV4dCB7CiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlOwogICAgZm9udC1zaXplOiAxOHB4OwogICAgZmlsbDogJHt0LnRleHRDb2xvcn07CiAgfQogICR7TmMoKX0KYCwiZ2V0U3R5bGVzIiksJHZlPUNydH0pO3ZhciBBcnQsX3J0LERydCxMcnQsUnJ0LE5ydCxNcnQsSXJ0LE9ydCxQcnQsQnJ0LEd2ZSxWdmU9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt5dCgpO0FydD1vKCh0LGUscixuKT0+e2UuZm9yRWFjaChpPT57QnJ0W2ldKHQscixuKX0pfSwiaW5zZXJ0TWFya2VycyIpLF9ydD1vKCh0LGUscik9PntYLnRyYWNlKCJNYWtpbmcgbWFya2VycyBmb3IgIixyKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1leHRlbnNpb25TdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGV4dGVuc2lvbiAiK2UpLmF0dHIoInJlZlgiLDE4KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDEsNyBMMTgsMTMgViAxIFoiKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1leHRlbnNpb25FbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBleHRlbnNpb24gIitlKS5hdHRyKCJyZWZYIiwxKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDEgViAxMyBMMTgsNyBaIil9LCJleHRlbnNpb24iKSxEcnQ9bygodCxlLHIpPT57dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItY29tcG9zaXRpb25TdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGNvbXBvc2l0aW9uICIrZSkuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWNvbXBvc2l0aW9uRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgY29tcG9zaXRpb24gIitlKS5hdHRyKCJyZWZYIiwxKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIil9LCJjb21wb3NpdGlvbiIpLExydD1vKCh0LGUscik9Pnt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1hZ2dyZWdhdGlvblN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgYWdncmVnYXRpb24gIitlKS5hdHRyKCJyZWZYIiwxOCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIiksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItYWdncmVnYXRpb25FbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBhZ2dyZWdhdGlvbiAiK2UpLmF0dHIoInJlZlgiLDEpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKX0sImFnZ3JlZ2F0aW9uIiksUnJ0PW8oKHQsZSxyKT0+e3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWRlcGVuZGVuY3lTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGRlcGVuZGVuY3kgIitlKS5hdHRyKCJyZWZYIiw2KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDUsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWRlcGVuZGVuY3lFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBkZXBlbmRlbmN5ICIrZSkuYXR0cigicmVmWCIsMTMpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDE0LDcgTDksMSBaIil9LCJkZXBlbmRlbmN5IiksTnJ0PW8oKHQsZSxyKT0+e3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWxvbGxpcG9wU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBsb2xsaXBvcCAiK2UpLmF0dHIoInJlZlgiLDEzKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJmaWxsIiwidHJhbnNwYXJlbnQiKS5hdHRyKCJjeCIsNykuYXR0cigiY3kiLDcpLmF0dHIoInIiLDYpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWxvbGxpcG9wRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgbG9sbGlwb3AgIitlKS5hdHRyKCJyZWZYIiwxKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJmaWxsIiwidHJhbnNwYXJlbnQiKS5hdHRyKCJjeCIsNykuYXR0cigiY3kiLDcpLmF0dHIoInIiLDYpfSwibG9sbGlwb3AiKSxNcnQ9bygodCxlLHIpPT57dC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItcG9pbnRFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciAiK2UpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiw2KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDEyKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDEyKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCAwIEwgMTAgNSBMIDAgMTAgeiIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKSx0LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1wb2ludFN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgIitlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsNC41KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDEyKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDEyKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCA1IEwgMTAgMTAgTCAxMCAwIHoiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIil9LCJwb2ludCIpLElydD1vKCh0LGUscik9Pnt0LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHIrIl8iK2UrIi1jaXJjbGVFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciAiK2UpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiwxMSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMSkuYXR0cigibWFya2VySGVpZ2h0IiwxMSkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLCI1IikuYXR0cigiY3kiLCI1IikuYXR0cigiciIsIjUiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIiksdC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItY2lyY2xlU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciAiK2UpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiwtMSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMSkuYXR0cigibWFya2VySGVpZ2h0IiwxMSkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY3giLCI1IikuYXR0cigiY3kiLCI1IikuYXR0cigiciIsIjUiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIil9LCJjaXJjbGUiKSxPcnQ9bygodCxlLHIpPT57dC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItY3Jvc3NFbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBjcm9zcyAiK2UpLmF0dHIoInZpZXdCb3giLCIwIDAgMTEgMTEiKS5hdHRyKCJyZWZYIiwxMikuYXR0cigicmVmWSIsNS4yKS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDExKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDExKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSwxIGwgOSw5IE0gMTAsMSBsIC05LDkiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDIpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIiksdC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixyKyJfIitlKyItY3Jvc3NTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGNyb3NzICIrZSkuYXR0cigidmlld0JveCIsIjAgMCAxMSAxMSIpLmF0dHIoInJlZlgiLC0xKS5hdHRyKCJyZWZZIiw1LjIpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTEpLmF0dHIoIm1hcmtlckhlaWdodCIsMTEpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDEgbCA5LDkgTSAxMCwxIGwgLTksOSIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKX0sImNyb3NzIiksUHJ0PW8oKHQsZSxyKT0+e3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIscisiXyIrZSsiLWJhcmJFbmQiKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDE0KS5hdHRyKCJtYXJrZXJVbml0cyIsInN0cm9rZVdpZHRoIikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE5LDcgTDksMTMgTDE0LDcgTDksMSBaIil9LCJiYXJiIiksQnJ0PXtleHRlbnNpb246X3J0LGNvbXBvc2l0aW9uOkRydCxhZ2dyZWdhdGlvbjpMcnQsZGVwZW5kZW5jeTpScnQsbG9sbGlwb3A6TnJ0LHBvaW50Ok1ydCxjaXJjbGU6SXJ0LGNyb3NzOk9ydCxiYXJiOlBydH0sR3ZlPUFydH0pO2Z1bmN0aW9uIEZydCh0LGUpe2lmKHQ9PT0wfHwhTnVtYmVyLmlzSW50ZWdlcih0KSl0aHJvdyBuZXcgRXJyb3IoIkNvbHVtbnMgbXVzdCBiZSBhbiBpbnRlZ2VyICE9PSAwLiIpO2lmKGU8MHx8IU51bWJlci5pc0ludGVnZXIoZSkpdGhyb3cgbmV3IEVycm9yKCJQb3NpdGlvbiBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIuIitlKTtpZih0PDApcmV0dXJue3B4OmUscHk6MH07aWYodD09PTEpcmV0dXJue3B4OjAscHk6ZX07bGV0IHI9ZSV0LG49TWF0aC5mbG9vcihlL3QpO3JldHVybntweDpyLHB5Om59fWZ1bmN0aW9uIEZGKHQsZSxyPTAsbj0wKXtYLmRlYnVnKCJzZXRCbG9ja1NpemVzIGFiYzk1IChzdGFydCkiLHQuaWQsdD8uc2l6ZT8ueCwiYmxvY2sgd2lkdGggPSIsdD8uc2l6ZSwic2libGluZ1dpZHRoIixyKSx0Py5zaXplPy53aWR0aHx8KHQuc2l6ZT17d2lkdGg6cixoZWlnaHQ6bix4OjAseTowfSk7bGV0IGk9MCxhPTA7aWYodC5jaGlsZHJlbj8ubGVuZ3RoPjApe2ZvcihsZXQgbSBvZiB0LmNoaWxkcmVuKUZGKG0sZSk7bGV0IHM9JHJ0KHQpO2k9cy53aWR0aCxhPXMuaGVpZ2h0LFguZGVidWcoInNldEJsb2NrU2l6ZXMgYWJjOTUgbWF4V2lkdGggb2YiLHQuaWQsIjpzIGNoaWxkcmVuIGlzICIsaSxhKTtmb3IobGV0IG0gb2YgdC5jaGlsZHJlbiltLnNpemUmJihYLmRlYnVnKGBhYmM5NSBTZXR0aW5nIHNpemUgb2YgY2hpbGRyZW4gb2YgJHt0LmlkfSBpZD0ke20uaWR9ICR7aX0gJHthfSAke0pTT04uc3RyaW5naWZ5KG0uc2l6ZSl9YCksbS5zaXplLndpZHRoPWkqKG0ud2lkdGhJbkNvbHVtbnM/PzEpK2tpKigobS53aWR0aEluQ29sdW1ucz8/MSktMSksbS5zaXplLmhlaWdodD1hLG0uc2l6ZS54PTAsbS5zaXplLnk9MCxYLmRlYnVnKGBhYmM5NSB1cGRhdGluZyBzaXplIG9mICR7dC5pZH0gY2hpbGRyZW4gY2hpbGQ6JHttLmlkfSBtYXhXaWR0aDoke2l9IG1heEhlaWdodDoke2F9YCkpO2ZvcihsZXQgbSBvZiB0LmNoaWxkcmVuKUZGKG0sZSxpLGEpO2xldCBsPXQuY29sdW1ucz8/LTEsdT0wO2ZvcihsZXQgbSBvZiB0LmNoaWxkcmVuKXUrPW0ud2lkdGhJbkNvbHVtbnM/PzE7bGV0IGg9dC5jaGlsZHJlbi5sZW5ndGg7bD4wJiZsPHUmJihoPWwpO2xldCBmPU1hdGguY2VpbCh1L2gpLGQ9aCooaStraSkra2kscD1mKihhK2tpKStraTtpZihkPHIpe1guZGVidWcoYERldGVjdGVkIHRvIHNtYWxsIHNpYmxpbmc6IGFiYzk1ICR7dC5pZH0gc2libGluZ1dpZHRoICR7cn0gc2libGluZ0hlaWdodCAke259IHdpZHRoICR7ZH1gKSxkPXIscD1uO2xldCBtPShyLWgqa2kta2kpL2gsZz0obi1mKmtpLWtpKS9mO1guZGVidWcoIlNpemUgaW5kYXRhIGFiYzg4Iix0LmlkLCJjaGlsZFdpZHRoIixtLCJtYXhXaWR0aCIsaSksWC5kZWJ1ZygiU2l6ZSBpbmRhdGEgYWJjODgiLHQuaWQsImNoaWxkSGVpZ2h0IixnLCJtYXhIZWlnaHQiLGEpLFguZGVidWcoIlNpemUgaW5kYXRhIGFiYzg4IHhTaXplIixoLCJwYWRkaW5nIixraSk7Zm9yKGxldCB5IG9mIHQuY2hpbGRyZW4peS5zaXplJiYoeS5zaXplLndpZHRoPW0seS5zaXplLmhlaWdodD1nLHkuc2l6ZS54PTAseS5zaXplLnk9MCl9aWYoWC5kZWJ1ZyhgYWJjOTUgKGZpbmFsZSBjYWxjKSAke3QuaWR9IHhTaXplICR7aH0geVNpemUgJHtmfSBjb2x1bW5zICR7bH0ke3QuY2hpbGRyZW4ubGVuZ3RofSB3aWR0aD0ke01hdGgubWF4KGQsdC5zaXplPy53aWR0aHx8MCl9YCksZDwodD8uc2l6ZT8ud2lkdGh8fDApKXtkPXQ/LnNpemU/LndpZHRofHwwO2xldCBtPWw+MD9NYXRoLm1pbih0LmNoaWxkcmVuLmxlbmd0aCxsKTp0LmNoaWxkcmVuLmxlbmd0aDtpZihtPjApe2xldCBnPShkLW0qa2kta2kpL207WC5kZWJ1ZygiYWJjOTUgKGdyb3dpbmcgdG8gZml0KSB3aWR0aCIsdC5pZCxkLHQuc2l6ZT8ud2lkdGgsZyk7Zm9yKGxldCB5IG9mIHQuY2hpbGRyZW4peS5zaXplJiYoeS5zaXplLndpZHRoPWcpfX10LnNpemU9e3dpZHRoOmQsaGVpZ2h0OnAseDowLHk6MH19WC5kZWJ1Zygic2V0QmxvY2tTaXplcyBhYmM5NCAoZG9uZSkiLHQuaWQsdD8uc2l6ZT8ueCx0Py5zaXplPy53aWR0aCx0Py5zaXplPy55LHQ/LnNpemU/LmhlaWdodCl9ZnVuY3Rpb24gVXZlKHQsZSl7WC5kZWJ1ZyhgYWJjODUgbGF5b3V0IGJsb2NrcyAoPT5sYXlvdXRCbG9ja3MpICR7dC5pZH0geDogJHt0Py5zaXplPy54fSB5OiAke3Q/LnNpemU/Lnl9IHdpZHRoOiAke3Q/LnNpemU/LndpZHRofWApO2xldCByPXQuY29sdW1ucz8/LTE7aWYoWC5kZWJ1ZygibGF5b3V0QmxvY2tzIGNvbHVtbnMgYWJjOTUiLHQuaWQsIj0+IixyLHQpLHQuY2hpbGRyZW4mJnQuY2hpbGRyZW4ubGVuZ3RoPjApe2xldCBuPXQ/LmNoaWxkcmVuWzBdPy5zaXplPy53aWR0aD8/MCxpPXQuY2hpbGRyZW4ubGVuZ3RoKm4rKHQuY2hpbGRyZW4ubGVuZ3RoLTEpKmtpO1guZGVidWcoIndpZHRoT2ZDaGlsZHJlbiA4OCIsaSwicG9zWCIpO2xldCBhPTA7WC5kZWJ1ZygiYWJjOTEgYmxvY2s/LnNpemU/LngiLHQuaWQsdD8uc2l6ZT8ueCk7bGV0IHM9dD8uc2l6ZT8ueD90Py5zaXplPy54KygtdD8uc2l6ZT8ud2lkdGgvMnx8MCk6LWtpLGw9MDtmb3IobGV0IHUgb2YgdC5jaGlsZHJlbil7bGV0IGg9dDtpZighdS5zaXplKWNvbnRpbnVlO2xldHt3aWR0aDpmLGhlaWdodDpkfT11LnNpemUse3B4OnAscHk6bX09RnJ0KHIsYSk7aWYobSE9bCYmKGw9bSxzPXQ/LnNpemU/Lng/dD8uc2l6ZT8ueCsoLXQ/LnNpemU/LndpZHRoLzJ8fDApOi1raSxYLmRlYnVnKCJOZXcgcm93IGluIGxheW91dCBmb3IgYmxvY2siLHQuaWQsIiBhbmQgY2hpbGQgIix1LmlkLGwpKSxYLmRlYnVnKGBhYmM4OSBsYXlvdXQgYmxvY2tzIChjaGlsZCkgaWQ6ICR7dS5pZH0gUG9zOiAke2F9IChweCwgcHkpICR7cH0sJHttfSAoJHtoPy5zaXplPy54fSwke2g/LnNpemU/Lnl9KSBwYXJlbnQ6ICR7aC5pZH0gd2lkdGg6ICR7Zn0ke2tpfWApLGguc2l6ZSl7bGV0IGc9Zi8yO3Uuc2l6ZS54PXMra2krZyxYLmRlYnVnKGBhYmM5MSBsYXlvdXQgYmxvY2tzIChjYWxjKSBweCwgcHlpZDoke3UuaWR9IHN0YXJ0aW5nUG9zPVgke3N9IG5ldyBzdGFydGluZ1Bvc1gke3Uuc2l6ZS54fSAke2d9IHBhZGRpbmc9JHtraX0gd2lkdGg9JHtmfSBoYWxmV2lkdGg9JHtnfSA9PiB4OiR7dS5zaXplLnh9IHk6JHt1LnNpemUueX0gJHt1LndpZHRoSW5Db2x1bW5zfSAod2lkdGggKiAoY2hpbGQ/LncgfHwgMSkpIC8gMiAke2YqKHU/LndpZHRoSW5Db2x1bW5zPz8xKS8yfWApLHM9dS5zaXplLngrZyx1LnNpemUueT1oLnNpemUueS1oLnNpemUuaGVpZ2h0LzIrbSooZCtraSkrZC8yK2tpLFguZGVidWcoYGFiYzg4IGxheW91dCBibG9ja3MgKGNhbGMpIHB4LCBweWlkOiR7dS5pZH1zdGFydGluZ1Bvc1gke3N9JHtraX0ke2d9PT54OiR7dS5zaXplLnh9eToke3Uuc2l6ZS55fSR7dS53aWR0aEluQ29sdW1uc30od2lkdGggKiAoY2hpbGQ/LncgfHwgMSkpIC8gMiR7ZioodT8ud2lkdGhJbkNvbHVtbnM/PzEpLzJ9YCl9dS5jaGlsZHJlbiYmVXZlKHUsZSksYSs9dT8ud2lkdGhJbkNvbHVtbnM/PzEsWC5kZWJ1ZygiYWJjODggY29sdW1uc1BvcyIsdSxhKX19WC5kZWJ1ZyhgbGF5b3V0IGJsb2NrcyAoPD09bGF5b3V0QmxvY2tzKSAke3QuaWR9IHg6ICR7dD8uc2l6ZT8ueH0geTogJHt0Py5zaXplPy55fSB3aWR0aDogJHt0Py5zaXplPy53aWR0aH1gKX1mdW5jdGlvbiBIdmUodCx7bWluWDplLG1pblk6cixtYXhYOm4sbWF4WTppfT17bWluWDowLG1pblk6MCxtYXhYOjAsbWF4WTowfSl7aWYodC5zaXplJiZ0LmlkIT09InJvb3QiKXtsZXR7eDphLHk6cyx3aWR0aDpsLGhlaWdodDp1fT10LnNpemU7YS1sLzI8ZSYmKGU9YS1sLzIpLHMtdS8yPHImJihyPXMtdS8yKSxhK2wvMj5uJiYobj1hK2wvMikscyt1LzI+aSYmKGk9cyt1LzIpfWlmKHQuY2hpbGRyZW4pZm9yKGxldCBhIG9mIHQuY2hpbGRyZW4pKHttaW5YOmUsbWluWTpyLG1heFg6bixtYXhZOml9PUh2ZShhLHttaW5YOmUsbWluWTpyLG1heFg6bixtYXhZOml9KSk7cmV0dXJue21pblg6ZSxtaW5ZOnIsbWF4WDpuLG1heFk6aX19ZnVuY3Rpb24gV3ZlKHQpe2xldCBlPXQuZ2V0QmxvY2soInJvb3QiKTtpZighZSlyZXR1cm47RkYoZSx0LDAsMCksVXZlKGUsdCksWC5kZWJ1ZygiZ2V0QmxvY2tzIixKU09OLnN0cmluZ2lmeShlLG51bGwsMikpO2xldHttaW5YOnIsbWluWTpuLG1heFg6aSxtYXhZOmF9PUh2ZShlKSxzPWEtbixsPWktcjtyZXR1cm57eDpyLHk6bix3aWR0aDpsLGhlaWdodDpzfX12YXIga2ksJHJ0LHF2ZT1OKCgpPT57InVzZSBzdHJpY3QiO3l0KCk7R3QoKTtraT1tZSgpPy5ibG9jaz8ucGFkZGluZz8/ODtvKEZydCwiY2FsY3VsYXRlQmxvY2tQb3NpdGlvbiIpOyRydD1vKHQ9PntsZXQgZT0wLHI9MDtmb3IobGV0IG4gb2YgdC5jaGlsZHJlbil7bGV0e3dpZHRoOmksaGVpZ2h0OmEseDpzLHk6bH09bi5zaXplPz97d2lkdGg6MCxoZWlnaHQ6MCx4OjAseTowfTtYLmRlYnVnKCJnZXRNYXhDaGlsZFNpemUgYWJjOTUgY2hpbGQ6IixuLmlkLCJ3aWR0aDoiLGksImhlaWdodDoiLGEsIng6IixzLCJ5OiIsbCxuLnR5cGUpLG4udHlwZSE9PSJzcGFjZSImJihpPmUmJihlPWkvKHQud2lkdGhJbkNvbHVtbnM/PzEpKSxhPnImJihyPWEpKX1yZXR1cm57d2lkdGg6ZSxoZWlnaHQ6cn19LCJnZXRNYXhDaGlsZFNpemUiKTtvKEZGLCJzZXRCbG9ja1NpemVzIik7byhVdmUsImxheW91dEJsb2NrcyIpO28oSHZlLCJmaW5kQm91bmRzIik7byhXdmUsImxheW91dCIpfSk7ZnVuY3Rpb24gWXZlKHQsZSl7ZSYmdC5hdHRyKCJzdHlsZSIsZSl9ZnVuY3Rpb24genJ0KHQpe2xldCBlPUdlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJmb3JlaWduT2JqZWN0IikpLHI9ZS5hcHBlbmQoInhodG1sOmRpdiIpLG49dC5sYWJlbCxpPXQuaXNOb2RlPyJub2RlTGFiZWwiOiJlZGdlTGFiZWwiLGE9ci5hcHBlbmQoInNwYW4iKTtyZXR1cm4gYS5odG1sKG4pLFl2ZShhLHQubGFiZWxTdHlsZSksYS5hdHRyKCJjbGFzcyIsaSksWXZlKHIsdC5sYWJlbFN0eWxlKSxyLnN0eWxlKCJkaXNwbGF5IiwiaW5saW5lLWJsb2NrIiksci5zdHlsZSgid2hpdGUtc3BhY2UiLCJub3dyYXAiKSxyLmF0dHIoInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIpLGUubm9kZSgpfXZhciBHcnQsa3Msd0M9TigoKT0+eyJ1c2Ugc3RyaWN0IjtmcigpO3l0KCk7R3QoKTtwcigpO2VyKCk7YW8oKTtvKFl2ZSwiYXBwbHlTdHlsZSIpO28oenJ0LCJhZGRIdG1sTGFiZWwiKTtHcnQ9byhhc3luYyh0LGUscixuKT0+e2xldCBpPXR8fCIiO2lmKHR5cGVvZiBpPT0ib2JqZWN0IiYmKGk9aVswXSksZHIobWUoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe2k9aS5yZXBsYWNlKC9cXG58XG4vZywiPGJyIC8+IiksWC5kZWJ1ZygidmVydGV4VGV4dCIraSk7bGV0IGE9YXdhaXQgZEwobmEoaSkpLHM9e2lzTm9kZTpuLGxhYmVsOmEsbGFiZWxTdHlsZTplLnJlcGxhY2UoImZpbGw6IiwiY29sb3I6Iil9O3JldHVybiB6cnQocyl9ZWxzZXtsZXQgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidGV4dCIpO2Euc2V0QXR0cmlidXRlKCJzdHlsZSIsZS5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpKTtsZXQgcz1bXTt0eXBlb2YgaT09InN0cmluZyI/cz1pLnNwbGl0KC9cXG58XG58PGJyXHMqXC8/Pi9naSk6QXJyYXkuaXNBcnJheShpKT9zPWk6cz1bXTtmb3IobGV0IGwgb2Ygcyl7bGV0IHU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRzcGFuIik7dS5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwieG1sOnNwYWNlIiwicHJlc2VydmUiKSx1LnNldEF0dHJpYnV0ZSgiZHkiLCIxZW0iKSx1LnNldEF0dHJpYnV0ZSgieCIsIjAiKSxyP3Uuc2V0QXR0cmlidXRlKCJjbGFzcyIsInRpdGxlLXJvdyIpOnUuc2V0QXR0cmlidXRlKCJjbGFzcyIsInJvdyIpLHUudGV4dENvbnRlbnQ9bC50cmltKCksYS5hcHBlbmRDaGlsZCh1KX1yZXR1cm4gYX19LCJjcmVhdGVMYWJlbCIpLGtzPUdydH0pO3ZhciBqdmUsVnJ0LFh2ZSxLdmU9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt5dCgpO2p2ZT1vKCh0LGUscixuLGkpPT57ZS5hcnJvd1R5cGVTdGFydCYmWHZlKHQsInN0YXJ0IixlLmFycm93VHlwZVN0YXJ0LHIsbixpKSxlLmFycm93VHlwZUVuZCYmWHZlKHQsImVuZCIsZS5hcnJvd1R5cGVFbmQscixuLGkpfSwiYWRkRWRnZU1hcmtlcnMiKSxWcnQ9e2Fycm93X2Nyb3NzOiJjcm9zcyIsYXJyb3dfcG9pbnQ6InBvaW50IixhcnJvd19iYXJiOiJiYXJiIixhcnJvd19jaXJjbGU6ImNpcmNsZSIsYWdncmVnYXRpb246ImFnZ3JlZ2F0aW9uIixleHRlbnNpb246ImV4dGVuc2lvbiIsY29tcG9zaXRpb246ImNvbXBvc2l0aW9uIixkZXBlbmRlbmN5OiJkZXBlbmRlbmN5Iixsb2xsaXBvcDoibG9sbGlwb3AifSxYdmU9bygodCxlLHIsbixpLGEpPT57bGV0IHM9VnJ0W3JdO2lmKCFzKXtYLndhcm4oYFVua25vd24gYXJyb3cgdHlwZTogJHtyfWApO3JldHVybn1sZXQgbD1lPT09InN0YXJ0Ij8iU3RhcnQiOiJFbmQiO3QuYXR0cihgbWFya2VyLSR7ZX1gLGB1cmwoJHtufSMke2l9XyR7YX0tJHtzfSR7bH0pYCl9LCJhZGRFZGdlTWFya2VyIil9KTtmdW5jdGlvbiBrQyh0LGUpe21lKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMmJnQmJih0LnN0eWxlLndpZHRoPWUubGVuZ3RoKjkrInB4Iix0LnN0eWxlLmhlaWdodD0iMTJweCIpfXZhciAkRixYYSxadmUsSnZlLFVydCxIcnQsUXZlLGUyZSx0MmU9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt5dCgpO3dDKCk7YW8oKTtmcigpO0d0KCk7ZXIoKTtwcigpO1BMKCk7UjIoKTtLdmUoKTskRj17fSxYYT17fSxadmU9byhhc3luYyh0LGUpPT57bGV0IHI9bWUoKSxuPWRyKHIuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpLGk9ZS5sYWJlbFR5cGU9PT0ibWFya2Rvd24iP3FuKHQsZS5sYWJlbCx7c3R5bGU6ZS5sYWJlbFN0eWxlLHVzZUh0bWxMYWJlbHM6bixhZGRTdmdCYWNrZ3JvdW5kOiEwfSxyKTphd2FpdCBrcyhlLmxhYmVsLGUubGFiZWxTdHlsZSksYT10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZUxhYmVsIikscz1hLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKTtzLm5vZGUoKS5hcHBlbmRDaGlsZChpKTtsZXQgbD1pLmdldEJCb3goKTtpZihuKXtsZXQgaD1pLmNoaWxkcmVuWzBdLGY9R2UoaSk7bD1oLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGYuYXR0cigid2lkdGgiLGwud2lkdGgpLGYuYXR0cigiaGVpZ2h0IixsLmhlaWdodCl9cy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistbC53aWR0aC8yKyIsICIrLWwuaGVpZ2h0LzIrIikiKSwkRltlLmlkXT1hLGUud2lkdGg9bC53aWR0aCxlLmhlaWdodD1sLmhlaWdodDtsZXQgdTtpZihlLnN0YXJ0TGFiZWxMZWZ0KXtsZXQgaD1hd2FpdCBrcyhlLnN0YXJ0TGFiZWxMZWZ0LGUubGFiZWxTdHlsZSksZj10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZVRlcm1pbmFscyIpLGQ9Zi5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImlubmVyIik7dT1kLm5vZGUoKS5hcHBlbmRDaGlsZChoKTtsZXQgcD1oLmdldEJCb3goKTtkLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1wLndpZHRoLzIrIiwgIistcC5oZWlnaHQvMisiKSIpLFhhW2UuaWRdfHwoWGFbZS5pZF09e30pLFhhW2UuaWRdLnN0YXJ0TGVmdD1mLGtDKHUsZS5zdGFydExhYmVsTGVmdCl9aWYoZS5zdGFydExhYmVsUmlnaHQpe2xldCBoPWF3YWl0IGtzKGUuc3RhcnRMYWJlbFJpZ2h0LGUubGFiZWxTdHlsZSksZj10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZVRlcm1pbmFscyIpLGQ9Zi5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImlubmVyIik7dT1mLm5vZGUoKS5hcHBlbmRDaGlsZChoKSxkLm5vZGUoKS5hcHBlbmRDaGlsZChoKTtsZXQgcD1oLmdldEJCb3goKTtkLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1wLndpZHRoLzIrIiwgIistcC5oZWlnaHQvMisiKSIpLFhhW2UuaWRdfHwoWGFbZS5pZF09e30pLFhhW2UuaWRdLnN0YXJ0UmlnaHQ9ZixrQyh1LGUuc3RhcnRMYWJlbFJpZ2h0KX1pZihlLmVuZExhYmVsTGVmdCl7bGV0IGg9YXdhaXQga3MoZS5lbmRMYWJlbExlZnQsZS5sYWJlbFN0eWxlKSxmPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlVGVybWluYWxzIiksZD1mLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiaW5uZXIiKTt1PWQubm9kZSgpLmFwcGVuZENoaWxkKGgpO2xldCBwPWguZ2V0QkJveCgpO2QuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLXAud2lkdGgvMisiLCAiKy1wLmhlaWdodC8yKyIpIiksZi5ub2RlKCkuYXBwZW5kQ2hpbGQoaCksWGFbZS5pZF18fChYYVtlLmlkXT17fSksWGFbZS5pZF0uZW5kTGVmdD1mLGtDKHUsZS5lbmRMYWJlbExlZnQpfWlmKGUuZW5kTGFiZWxSaWdodCl7bGV0IGg9YXdhaXQga3MoZS5lbmRMYWJlbFJpZ2h0LGUubGFiZWxTdHlsZSksZj10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZVRlcm1pbmFscyIpLGQ9Zi5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImlubmVyIik7dT1kLm5vZGUoKS5hcHBlbmRDaGlsZChoKTtsZXQgcD1oLmdldEJCb3goKTtkLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1wLndpZHRoLzIrIiwgIistcC5oZWlnaHQvMisiKSIpLGYubm9kZSgpLmFwcGVuZENoaWxkKGgpLFhhW2UuaWRdfHwoWGFbZS5pZF09e30pLFhhW2UuaWRdLmVuZFJpZ2h0PWYsa0ModSxlLmVuZExhYmVsUmlnaHQpfXJldHVybiBpfSwiaW5zZXJ0RWRnZUxhYmVsIik7byhrQywic2V0VGVybWluYWxXaWR0aCIpO0p2ZT1vKCh0LGUpPT57WC5kZWJ1ZygiTW92aW5nIGxhYmVsIGFiYzg4ICIsdC5pZCx0LmxhYmVsLCRGW3QuaWRdLGUpO2xldCByPWUudXBkYXRlZFBhdGg/ZS51cGRhdGVkUGF0aDplLm9yaWdpbmFsUGF0aCxuPW1lKCkse3N1YkdyYXBoVGl0bGVUb3RhbE1hcmdpbjppfT1CdShuKTtpZih0LmxhYmVsKXtsZXQgYT0kRlt0LmlkXSxzPXQueCxsPXQueTtpZihyKXtsZXQgdT1WdC5jYWxjTGFiZWxQb3NpdGlvbihyKTtYLmRlYnVnKCJNb3ZpbmcgbGFiZWwgIit0LmxhYmVsKyIgZnJvbSAoIixzLCIsIixsLCIpIHRvICgiLHUueCwiLCIsdS55LCIpIGFiYzg4IiksZS51cGRhdGVkUGF0aCYmKHM9dS54LGw9dS55KX1hLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3N9LCAke2wraS8yfSlgKX1pZih0LnN0YXJ0TGFiZWxMZWZ0KXtsZXQgYT1YYVt0LmlkXS5zdGFydExlZnQscz10LngsbD10Lnk7aWYocil7bGV0IHU9VnQuY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbih0LmFycm93VHlwZVN0YXJ0PzEwOjAsInN0YXJ0X2xlZnQiLHIpO3M9dS54LGw9dS55fWEuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7c30sICR7bH0pYCl9aWYodC5zdGFydExhYmVsUmlnaHQpe2xldCBhPVhhW3QuaWRdLnN0YXJ0UmlnaHQscz10LngsbD10Lnk7aWYocil7bGV0IHU9VnQuY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbih0LmFycm93VHlwZVN0YXJ0PzEwOjAsInN0YXJ0X3JpZ2h0IixyKTtzPXUueCxsPXUueX1hLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke3N9LCAke2x9KWApfWlmKHQuZW5kTGFiZWxMZWZ0KXtsZXQgYT1YYVt0LmlkXS5lbmRMZWZ0LHM9dC54LGw9dC55O2lmKHIpe2xldCB1PVZ0LmNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb24odC5hcnJvd1R5cGVFbmQ/MTA6MCwiZW5kX2xlZnQiLHIpO3M9dS54LGw9dS55fWEuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7c30sICR7bH0pYCl9aWYodC5lbmRMYWJlbFJpZ2h0KXtsZXQgYT1YYVt0LmlkXS5lbmRSaWdodCxzPXQueCxsPXQueTtpZihyKXtsZXQgdT1WdC5jYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uKHQuYXJyb3dUeXBlRW5kPzEwOjAsImVuZF9yaWdodCIscik7cz11LngsbD11Lnl9YS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtzfSwgJHtsfSlgKX19LCJwb3NpdGlvbkVkZ2VMYWJlbCIpLFVydD1vKCh0LGUpPT57bGV0IHI9dC54LG49dC55LGk9TWF0aC5hYnMoZS54LXIpLGE9TWF0aC5hYnMoZS55LW4pLHM9dC53aWR0aC8yLGw9dC5oZWlnaHQvMjtyZXR1cm4gaT49c3x8YT49bH0sIm91dHNpZGVOb2RlIiksSHJ0PW8oKHQsZSxyKT0+e1guZGVidWcoYGludGVyc2VjdGlvbiBjYWxjIGFiYzg5OgogIG91dHNpZGVQb2ludDogJHtKU09OLnN0cmluZ2lmeShlKX0KICBpbnNpZGVQb2ludCA6ICR7SlNPTi5zdHJpbmdpZnkocil9CiAgbm9kZSAgICAgICAgOiB4OiR7dC54fSB5OiR7dC55fSB3OiR7dC53aWR0aH0gaDoke3QuaGVpZ2h0fWApO2xldCBuPXQueCxpPXQueSxhPU1hdGguYWJzKG4tci54KSxzPXQud2lkdGgvMixsPXIueDxlLng/cy1hOnMrYSx1PXQuaGVpZ2h0LzIsaD1NYXRoLmFicyhlLnktci55KSxmPU1hdGguYWJzKGUueC1yLngpO2lmKE1hdGguYWJzKGktZS55KSpzPk1hdGguYWJzKG4tZS54KSp1KXtsZXQgZD1yLnk8ZS55P2UueS11LWk6aS11LWUueTtsPWYqZC9oO2xldCBwPXt4OnIueDxlLng/ci54K2w6ci54LWYrbCx5OnIueTxlLnk/ci55K2gtZDpyLnktaCtkfTtyZXR1cm4gbD09PTAmJihwLng9ZS54LHAueT1lLnkpLGY9PT0wJiYocC54PWUueCksaD09PTAmJihwLnk9ZS55KSxYLmRlYnVnKGBhYmM4OSB0b3BwL2JvdHQgY2FsYywgUSAke2h9LCBxICR7ZH0sIFIgJHtmfSwgciAke2x9YCxwKSxwfWVsc2V7ci54PGUueD9sPWUueC1zLW46bD1uLXMtZS54O2xldCBkPWgqbC9mLHA9ci54PGUueD9yLngrZi1sOnIueC1mK2wsbT1yLnk8ZS55P3IueStkOnIueS1kO3JldHVybiBYLmRlYnVnKGBzaWRlcyBjYWxjIGFiYzg5LCBRICR7aH0sIHEgJHtkfSwgUiAke2Z9LCByICR7bH1gLHtfeDpwLF95Om19KSxsPT09MCYmKHA9ZS54LG09ZS55KSxmPT09MCYmKHA9ZS54KSxoPT09MCYmKG09ZS55KSx7eDpwLHk6bX19fSwiaW50ZXJzZWN0aW9uIiksUXZlPW8oKHQsZSk9PntYLmRlYnVnKCJhYmM4OCBjdXRQYXRoQXRJbnRlcnNlY3QiLHQsZSk7bGV0IHI9W10sbj10WzBdLGk9ITE7cmV0dXJuIHQuZm9yRWFjaChhPT57aWYoIVVydChlLGEpJiYhaSl7bGV0IHM9SHJ0KGUsbixhKSxsPSExO3IuZm9yRWFjaCh1PT57bD1sfHx1Lng9PT1zLngmJnUueT09PXMueX0pLHIuc29tZSh1PT51Lng9PT1zLngmJnUueT09PXMueSl8fHIucHVzaChzKSxpPSEwfWVsc2Ugbj1hLGl8fHIucHVzaChhKX0pLHJ9LCJjdXRQYXRoQXRJbnRlcnNlY3QiKSxlMmU9byhmdW5jdGlvbih0LGUscixuLGksYSxzKXtsZXQgbD1yLnBvaW50cztYLmRlYnVnKCJhYmM4OCBJbnNlcnRFZGdlOiBlZGdlPSIsciwiZT0iLGUpO2xldCB1PSExLGg9YS5ub2RlKGUudik7dmFyIGY9YS5ub2RlKGUudyk7Zj8uaW50ZXJzZWN0JiZoPy5pbnRlcnNlY3QmJihsPWwuc2xpY2UoMSxyLnBvaW50cy5sZW5ndGgtMSksbC51bnNoaWZ0KGguaW50ZXJzZWN0KGxbMF0pKSxsLnB1c2goZi5pbnRlcnNlY3QobFtsLmxlbmd0aC0xXSkpKSxyLnRvQ2x1c3RlciYmKFguZGVidWcoInRvIGNsdXN0ZXIgYWJjODgiLG5bci50b0NsdXN0ZXJdKSxsPVF2ZShyLnBvaW50cyxuW3IudG9DbHVzdGVyXS5ub2RlKSx1PSEwKSxyLmZyb21DbHVzdGVyJiYoWC5kZWJ1ZygiZnJvbSBjbHVzdGVyIGFiYzg4IixuW3IuZnJvbUNsdXN0ZXJdKSxsPVF2ZShsLnJldmVyc2UoKSxuW3IuZnJvbUNsdXN0ZXJdLm5vZGUpLnJldmVyc2UoKSx1PSEwKTtsZXQgZD1sLmZpbHRlcihTPT4hTnVtYmVyLmlzTmFOKFMueSkpLHA9Tm87ci5jdXJ2ZSYmKGk9PT0iZ3JhcGgifHxpPT09ImZsb3djaGFydCIpJiYocD1yLmN1cnZlKTtsZXR7eDptLHk6Z309b3cocikseT1DbCgpLngobSkueShnKS5jdXJ2ZShwKSx2O3N3aXRjaChyLnRoaWNrbmVzcyl7Y2FzZSJub3JtYWwiOnY9ImVkZ2UtdGhpY2tuZXNzLW5vcm1hbCI7YnJlYWs7Y2FzZSJ0aGljayI6dj0iZWRnZS10aGlja25lc3MtdGhpY2siO2JyZWFrO2Nhc2UiaW52aXNpYmxlIjp2PSJlZGdlLXRoaWNrbmVzcy10aGljayI7YnJlYWs7ZGVmYXVsdDp2PSIifXN3aXRjaChyLnBhdHRlcm4pe2Nhc2Uic29saWQiOnYrPSIgZWRnZS1wYXR0ZXJuLXNvbGlkIjticmVhaztjYXNlImRvdHRlZCI6dis9IiBlZGdlLXBhdHRlcm4tZG90dGVkIjticmVhaztjYXNlImRhc2hlZCI6dis9IiBlZGdlLXBhdHRlcm4tZGFzaGVkIjticmVha31sZXQgeD10LmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLHkoZCkpLmF0dHIoImlkIixyLmlkKS5hdHRyKCJjbGFzcyIsIiAiK3YrKHIuY2xhc3Nlcz8iICIrci5jbGFzc2VzOiIiKSkuYXR0cigic3R5bGUiLHIuc3R5bGUpLGI9IiI7KG1lKCkuZmxvd2NoYXJ0LmFycm93TWFya2VyQWJzb2x1dGV8fG1lKCkuc3RhdGUuYXJyb3dNYXJrZXJBYnNvbHV0ZSkmJihiPW11KCEwKSksanZlKHgscixiLHMsaSk7bGV0IFQ9e307cmV0dXJuIHUmJihULnVwZGF0ZWRQYXRoPWwpLFQub3JpZ2luYWxQYXRoPXIucG9pbnRzLFR9LCJpbnNlcnRFZGdlIil9KTt2YXIgV3J0LHIyZSxuMmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtXcnQ9byh0PT57bGV0IGU9bmV3IFNldDtmb3IobGV0IHIgb2YgdClzd2l0Y2gocil7Y2FzZSJ4IjplLmFkZCgicmlnaHQiKSxlLmFkZCgibGVmdCIpO2JyZWFrO2Nhc2UieSI6ZS5hZGQoInVwIiksZS5hZGQoImRvd24iKTticmVhaztkZWZhdWx0OmUuYWRkKHIpO2JyZWFrfXJldHVybiBlfSwiZXhwYW5kQW5kRGVkdXBsaWNhdGVEaXJlY3Rpb25zIikscjJlPW8oKHQsZSxyKT0+e2xldCBuPVdydCh0KSxpPTIsYT1lLmhlaWdodCsyKnIucGFkZGluZyxzPWEvaSxsPWUud2lkdGgrMipzK3IucGFkZGluZyx1PXIucGFkZGluZy8yO3JldHVybiBuLmhhcygicmlnaHQiKSYmbi5oYXMoImxlZnQiKSYmbi5oYXMoInVwIikmJm4uaGFzKCJkb3duIik/W3t4OjAseTowfSx7eDpzLHk6MH0se3g6bC8yLHk6Mip1fSx7eDpsLXMseTowfSx7eDpsLHk6MH0se3g6bCx5Oi1hLzN9LHt4OmwrMip1LHk6LWEvMn0se3g6bCx5Oi0yKmEvM30se3g6bCx5Oi1hfSx7eDpsLXMseTotYX0se3g6bC8yLHk6LWEtMip1fSx7eDpzLHk6LWF9LHt4OjAseTotYX0se3g6MCx5Oi0yKmEvM30se3g6LTIqdSx5Oi1hLzJ9LHt4OjAseTotYS8zfV06bi5oYXMoInJpZ2h0IikmJm4uaGFzKCJsZWZ0IikmJm4uaGFzKCJ1cCIpP1t7eDpzLHk6MH0se3g6bC1zLHk6MH0se3g6bCx5Oi1hLzJ9LHt4Omwtcyx5Oi1hfSx7eDpzLHk6LWF9LHt4OjAseTotYS8yfV06bi5oYXMoInJpZ2h0IikmJm4uaGFzKCJsZWZ0IikmJm4uaGFzKCJkb3duIik/W3t4OjAseTowfSx7eDpzLHk6LWF9LHt4Omwtcyx5Oi1hfSx7eDpsLHk6MH1dOm4uaGFzKCJyaWdodCIpJiZuLmhhcygidXAiKSYmbi5oYXMoImRvd24iKT9be3g6MCx5OjB9LHt4OmwseTotc30se3g6bCx5Oi1hK3N9LHt4OjAseTotYX1dOm4uaGFzKCJsZWZ0IikmJm4uaGFzKCJ1cCIpJiZuLmhhcygiZG93biIpP1t7eDpsLHk6MH0se3g6MCx5Oi1zfSx7eDowLHk6LWErc30se3g6bCx5Oi1hfV06bi5oYXMoInJpZ2h0IikmJm4uaGFzKCJsZWZ0Iik/W3t4OnMseTowfSx7eDpzLHk6LXV9LHt4Omwtcyx5Oi11fSx7eDpsLXMseTowfSx7eDpsLHk6LWEvMn0se3g6bC1zLHk6LWF9LHt4Omwtcyx5Oi1hK3V9LHt4OnMseTotYSt1fSx7eDpzLHk6LWF9LHt4OjAseTotYS8yfV06bi5oYXMoInVwIikmJm4uaGFzKCJkb3duIik/W3t4OmwvMix5OjB9LHt4OjAseTotdX0se3g6cyx5Oi11fSx7eDpzLHk6LWErdX0se3g6MCx5Oi1hK3V9LHt4OmwvMix5Oi1hfSx7eDpsLHk6LWErdX0se3g6bC1zLHk6LWErdX0se3g6bC1zLHk6LXV9LHt4OmwseTotdX1dOm4uaGFzKCJyaWdodCIpJiZuLmhhcygidXAiKT9be3g6MCx5OjB9LHt4OmwseTotc30se3g6MCx5Oi1hfV06bi5oYXMoInJpZ2h0IikmJm4uaGFzKCJkb3duIik/W3t4OjAseTowfSx7eDpsLHk6MH0se3g6MCx5Oi1hfV06bi5oYXMoImxlZnQiKSYmbi5oYXMoInVwIik/W3t4OmwseTowfSx7eDowLHk6LXN9LHt4OmwseTotYX1dOm4uaGFzKCJsZWZ0IikmJm4uaGFzKCJkb3duIik/W3t4OmwseTowfSx7eDowLHk6MH0se3g6bCx5Oi1hfV06bi5oYXMoInJpZ2h0Iik/W3t4OnMseTotdX0se3g6cyx5Oi11fSx7eDpsLXMseTotdX0se3g6bC1zLHk6MH0se3g6bCx5Oi1hLzJ9LHt4Omwtcyx5Oi1hfSx7eDpsLXMseTotYSt1fSx7eDpzLHk6LWErdX0se3g6cyx5Oi1hK3V9XTpuLmhhcygibGVmdCIpP1t7eDpzLHk6MH0se3g6cyx5Oi11fSx7eDpsLXMseTotdX0se3g6bC1zLHk6LWErdX0se3g6cyx5Oi1hK3V9LHt4OnMseTotYX0se3g6MCx5Oi1hLzJ9XTpuLmhhcygidXAiKT9be3g6cyx5Oi11fSx7eDpzLHk6LWErdX0se3g6MCx5Oi1hK3V9LHt4OmwvMix5Oi1hfSx7eDpsLHk6LWErdX0se3g6bC1zLHk6LWErdX0se3g6bC1zLHk6LXV9XTpuLmhhcygiZG93biIpP1t7eDpsLzIseTowfSx7eDowLHk6LXV9LHt4OnMseTotdX0se3g6cyx5Oi1hK3V9LHt4Omwtcyx5Oi1hK3V9LHt4Omwtcyx5Oi11fSx7eDpsLHk6LXV9XTpbe3g6MCx5OjB9XX0sImdldEFycm93UG9pbnRzIil9KTtmdW5jdGlvbiBxcnQodCxlKXtyZXR1cm4gdC5pbnRlcnNlY3QoZSl9dmFyIGkyZSxhMmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKHFydCwiaW50ZXJzZWN0Tm9kZSIpO2kyZT1xcnR9KTtmdW5jdGlvbiBZcnQodCxlLHIsbil7dmFyIGk9dC54LGE9dC55LHM9aS1uLngsbD1hLW4ueSx1PU1hdGguc3FydChlKmUqbCpsK3IqcipzKnMpLGg9TWF0aC5hYnMoZSpyKnMvdSk7bi54PGkmJihoPS1oKTt2YXIgZj1NYXRoLmFicyhlKnIqbC91KTtyZXR1cm4gbi55PGEmJihmPS1mKSx7eDppK2gseTphK2Z9fXZhciBFQyx6Rj1OKCgpPT57InVzZSBzdHJpY3QiO28oWXJ0LCJpbnRlcnNlY3RFbGxpcHNlIik7RUM9WXJ0fSk7ZnVuY3Rpb24gWHJ0KHQsZSxyKXtyZXR1cm4gRUModCxlLGUscil9dmFyIHMyZSxvMmU9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt6RigpO28oWHJ0LCJpbnRlcnNlY3RDaXJjbGUiKTtzMmU9WHJ0fSk7ZnVuY3Rpb24ganJ0KHQsZSxyLG4pe3ZhciBpLGEscyxsLHUsaCxmLGQscCxtLGcseSx2LHgsYjtpZihpPWUueS10Lnkscz10LngtZS54LHU9ZS54KnQueS10LngqZS55LHA9aSpyLngrcypyLnkrdSxtPWkqbi54K3Mqbi55K3UsIShwIT09MCYmbSE9PTAmJmwyZShwLG0pKSYmKGE9bi55LXIueSxsPXIueC1uLngsaD1uLngqci55LXIueCpuLnksZj1hKnQueCtsKnQueStoLGQ9YSplLngrbCplLnkraCwhKGYhPT0wJiZkIT09MCYmbDJlKGYsZCkpJiYoZz1pKmwtYSpzLGchPT0wKSkpcmV0dXJuIHk9TWF0aC5hYnMoZy8yKSx2PXMqaC1sKnUseD12PDA/KHYteSkvZzoodit5KS9nLHY9YSp1LWkqaCxiPXY8MD8odi15KS9nOih2K3kpL2cse3gseTpifX1mdW5jdGlvbiBsMmUodCxlKXtyZXR1cm4gdCplPjB9dmFyIGMyZSx1MmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtvKGpydCwiaW50ZXJzZWN0TGluZSIpO28obDJlLCJzYW1lU2lnbiIpO2MyZT1qcnR9KTtmdW5jdGlvbiBLcnQodCxlLHIpe3ZhciBuPXQueCxpPXQueSxhPVtdLHM9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLGw9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO3R5cGVvZiBlLmZvckVhY2g9PSJmdW5jdGlvbiI/ZS5mb3JFYWNoKGZ1bmN0aW9uKGcpe3M9TWF0aC5taW4ocyxnLngpLGw9TWF0aC5taW4obCxnLnkpfSk6KHM9TWF0aC5taW4ocyxlLngpLGw9TWF0aC5taW4obCxlLnkpKTtmb3IodmFyIHU9bi10LndpZHRoLzItcyxoPWktdC5oZWlnaHQvMi1sLGY9MDtmPGUubGVuZ3RoO2YrKyl7dmFyIGQ9ZVtmXSxwPWVbZjxlLmxlbmd0aC0xP2YrMTowXSxtPWMyZSh0LHIse3g6dStkLngseTpoK2QueX0se3g6dStwLngseTpoK3AueX0pO20mJmEucHVzaChtKX1yZXR1cm4gYS5sZW5ndGg/KGEubGVuZ3RoPjEmJmEuc29ydChmdW5jdGlvbihnLHkpe3ZhciB2PWcueC1yLngseD1nLnktci55LGI9TWF0aC5zcXJ0KHYqdit4KngpLFQ9eS54LXIueCxTPXkueS1yLnksdz1NYXRoLnNxcnQoVCpUK1MqUyk7cmV0dXJuIGI8dz8tMTpiPT09dz8wOjF9KSxhWzBdKTp0fXZhciBoMmUsZjJlPU4oKCk9PnsidXNlIHN0cmljdCI7dTJlKCk7aDJlPUtydDtvKEtydCwiaW50ZXJzZWN0UG9seWdvbiIpfSk7dmFyIFFydCxkMmUscDJlPU4oKCk9PnsidXNlIHN0cmljdCI7UXJ0PW8oKHQsZSk9Pnt2YXIgcj10Lngsbj10LnksaT1lLngtcixhPWUueS1uLHM9dC53aWR0aC8yLGw9dC5oZWlnaHQvMix1LGg7cmV0dXJuIE1hdGguYWJzKGEpKnM+TWF0aC5hYnMoaSkqbD8oYTwwJiYobD0tbCksdT1hPT09MD8wOmwqaS9hLGg9bCk6KGk8MCYmKHM9LXMpLHU9cyxoPWk9PT0wPzA6cyphL2kpLHt4OnIrdSx5Om4raH19LCJpbnRlcnNlY3RSZWN0IiksZDJlPVFydH0pO3ZhciBJbixHRj1OKCgpPT57InVzZSBzdHJpY3QiO2EyZSgpO28yZSgpO3pGKCk7ZjJlKCk7cDJlKCk7SW49e25vZGU6aTJlLGNpcmNsZTpzMmUsZWxsaXBzZTpFQyxwb2x5Z29uOmgyZSxyZWN0OmQyZX19KTtmdW5jdGlvbiBYbCh0LGUscixuKXtyZXR1cm4gdC5pbnNlcnQoInBvbHlnb24iLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJwb2ludHMiLG4ubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBpLngrIiwiK2kueX0pLmpvaW4oIiAiKSkuYXR0cigiY2xhc3MiLCJsYWJlbC1jb250YWluZXIiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistZS8yKyIsIityLzIrIikiKX12YXIgTmksSm4sVkY9TigoKT0+eyJ1c2Ugc3RyaWN0Ijt3QygpO2FvKCk7R3QoKTtmcigpO3ByKCk7ZXIoKTtOaT1vKGFzeW5jKHQsZSxyLG4pPT57bGV0IGk9bWUoKSxhLHM9ZS51c2VIdG1sTGFiZWxzfHxkcihpLmZsb3djaGFydC5odG1sTGFiZWxzKTtyP2E9cjphPSJub2RlIGRlZmF1bHQiO2xldCBsPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLGEpLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSx1PWwuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLmF0dHIoInN0eWxlIixlLmxhYmVsU3R5bGUpLGg7ZS5sYWJlbFRleHQ9PT12b2lkIDA/aD0iIjpoPXR5cGVvZiBlLmxhYmVsVGV4dD09InN0cmluZyI/ZS5sYWJlbFRleHQ6ZS5sYWJlbFRleHRbMF07bGV0IGY9dS5ub2RlKCksZDtlLmxhYmVsVHlwZT09PSJtYXJrZG93biI/ZD1xbih1LHdyKG5hKGgpLGkpLHt1c2VIdG1sTGFiZWxzOnMsd2lkdGg6ZS53aWR0aHx8aS5mbG93Y2hhcnQud3JhcHBpbmdXaWR0aCxjbGFzc2VzOiJtYXJrZG93bi1ub2RlLWxhYmVsIn0saSk6ZD1mLmFwcGVuZENoaWxkKGF3YWl0IGtzKHdyKG5hKGgpLGkpLGUubGFiZWxTdHlsZSwhMSxuKSk7bGV0IHA9ZC5nZXRCQm94KCksbT1lLnBhZGRpbmcvMjtpZihkcihpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7bGV0IGc9ZC5jaGlsZHJlblswXSx5PUdlKGQpLHY9Zy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW1nIik7aWYodil7bGV0IHg9aC5yZXBsYWNlKC88aW1nW14+XSo+L2csIiIpLnRyaW0oKT09PSIiO2F3YWl0IFByb21pc2UuYWxsKFsuLi52XS5tYXAoYj0+bmV3IFByb21pc2UoVD0+e2Z1bmN0aW9uIFMoKXtpZihiLnN0eWxlLmRpc3BsYXk9ImZsZXgiLGIuc3R5bGUuZmxleERpcmVjdGlvbj0iY29sdW1uIix4KXtsZXQgdz1pLmZvbnRTaXplP2kuZm9udFNpemU6d2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuZm9udFNpemUsXz1wYXJzZUludCh3LDEwKSo1KyJweCI7Yi5zdHlsZS5taW5XaWR0aD1fLGIuc3R5bGUubWF4V2lkdGg9X31lbHNlIGIuc3R5bGUud2lkdGg9IjEwMCUiO1QoYil9byhTLCJzZXR1cEltYWdlIiksc2V0VGltZW91dCgoKT0+e2IuY29tcGxldGUmJlMoKX0pLGIuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLFMpLGIuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsUyl9KSkpfXA9Zy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx5LmF0dHIoIndpZHRoIixwLndpZHRoKSx5LmF0dHIoImhlaWdodCIscC5oZWlnaHQpfXJldHVybiBzP3UuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLXAud2lkdGgvMisiLCAiKy1wLmhlaWdodC8yKyIpIik6dS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwgIistcC5oZWlnaHQvMisiKSIpLGUuY2VudGVyTGFiZWwmJnUuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLXAud2lkdGgvMisiLCAiKy1wLmhlaWdodC8yKyIpIiksdS5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSx7c2hhcGVTdmc6bCxiYm94OnAsaGFsZlBhZGRpbmc6bSxsYWJlbDp1fX0sImxhYmVsSGVscGVyIiksSm49bygodCxlKT0+e2xldCByPWUubm9kZSgpLmdldEJCb3goKTt0LndpZHRoPXIud2lkdGgsdC5oZWlnaHQ9ci5oZWlnaHR9LCJ1cGRhdGVOb2RlQm91bmRzIik7byhYbCwiaW5zZXJ0UG9seWdvblNoYXBlIil9KTt2YXIgWnJ0LG0yZSxnMmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtWRigpO3l0KCk7R3QoKTtHRigpO1pydD1vKGFzeW5jKHQsZSk9PntlLnVzZUh0bWxMYWJlbHN8fG1lKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHN8fChlLmNlbnRlckxhYmVsPSEwKTtsZXR7c2hhcGVTdmc6bixiYm94OmksaGFsZlBhZGRpbmc6YX09YXdhaXQgTmkodCxlLCJub2RlICIrZS5jbGFzc2VzLCEwKTtYLmluZm8oIkNsYXNzZXMgPSAiLGUuY2xhc3Nlcyk7bGV0IHM9bi5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gcy5hdHRyKCJyeCIsZS5yeCkuYXR0cigicnkiLGUucnkpLmF0dHIoIngiLC1pLndpZHRoLzItYSkuYXR0cigieSIsLWkuaGVpZ2h0LzItYSkuYXR0cigid2lkdGgiLGkud2lkdGgrZS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLGkuaGVpZ2h0K2UucGFkZGluZyksSm4oZSxzKSxlLmludGVyc2VjdD1mdW5jdGlvbihsKXtyZXR1cm4gSW4ucmVjdChlLGwpfSxufSwibm90ZSIpLG0yZT1acnR9KTtmdW5jdGlvbiBVRih0LGUscixuKXtsZXQgaT1bXSxhPW8obD0+e2kucHVzaChsLDApfSwiYWRkQm9yZGVyIikscz1vKGw9PntpLnB1c2goMCxsKX0sInNraXBCb3JkZXIiKTtlLmluY2x1ZGVzKCJ0Iik/KFguZGVidWcoImFkZCB0b3AgYm9yZGVyIiksYShyKSk6cyhyKSxlLmluY2x1ZGVzKCJyIik/KFguZGVidWcoImFkZCByaWdodCBib3JkZXIiKSxhKG4pKTpzKG4pLGUuaW5jbHVkZXMoImIiKT8oWC5kZWJ1ZygiYWRkIGJvdHRvbSBib3JkZXIiKSxhKHIpKTpzKHIpLGUuaW5jbHVkZXMoImwiKT8oWC5kZWJ1ZygiYWRkIGxlZnQgYm9yZGVyIiksYShuKSk6cyhuKSx0LmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLGkuam9pbigiICIpKX12YXIgeTJlLGJvLHYyZSxKcnQsZW50LHRudCxybnQsbm50LGludCxhbnQsc250LG9udCxsbnQsY250LHVudCxobnQsZm50LGRudCxwbnQsbW50LGdudCx5bnQseDJlLHZudCx4bnQsYjJlLFNDLEhGLFQyZSx3MmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtmcigpO0d0KCk7cHIoKTt5dCgpO24yZSgpO3dDKCk7R0YoKTtnMmUoKTtWRigpO3kyZT1vKHQ9PnQ/IiAiK3Q6IiIsImZvcm1hdENsYXNzIiksYm89bygodCxlKT0+YCR7ZXx8Im5vZGUgZGVmYXVsdCJ9JHt5MmUodC5jbGFzc2VzKX0gJHt5MmUodC5jbGFzcyl9YCwiZ2V0Q2xhc3Nlc0Zyb21Ob2RlIiksdjJlPW8oYXN5bmModCxlKT0+e2xldHtzaGFwZVN2ZzpyLGJib3g6bn09YXdhaXQgTmkodCxlLGJvKGUsdm9pZCAwKSwhMCksaT1uLndpZHRoK2UucGFkZGluZyxhPW4uaGVpZ2h0K2UucGFkZGluZyxzPWkrYSxsPVt7eDpzLzIseTowfSx7eDpzLHk6LXMvMn0se3g6cy8yLHk6LXN9LHt4OjAseTotcy8yfV07WC5pbmZvKCJRdWVzdGlvbiBtYWluIChDaXJjbGUpIik7bGV0IHU9WGwocixzLHMsbCk7cmV0dXJuIHUuYXR0cigic3R5bGUiLGUuc3R5bGUpLEpuKGUsdSksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oaCl7cmV0dXJuIFgud2FybigiSW50ZXJzZWN0IGNhbGxlZCIpLEluLnBvbHlnb24oZSxsLGgpfSxyfSwicXVlc3Rpb24iKSxKcnQ9bygodCxlKT0+e2xldCByPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJub2RlIGRlZmF1bHQiKS5hdHRyKCJpZCIsZS5kb21JZHx8ZS5pZCksbj0yOCxpPVt7eDowLHk6bi8yfSx7eDpuLzIseTowfSx7eDowLHk6LW4vMn0se3g6LW4vMix5OjB9XTtyZXR1cm4gci5pbnNlcnQoInBvbHlnb24iLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJwb2ludHMiLGkubWFwKGZ1bmN0aW9uKHMpe3JldHVybiBzLngrIiwiK3MueX0pLmpvaW4oIiAiKSkuYXR0cigiY2xhc3MiLCJzdGF0ZS1zdGFydCIpLmF0dHIoInIiLDcpLmF0dHIoIndpZHRoIiwyOCkuYXR0cigiaGVpZ2h0IiwyOCksZS53aWR0aD0yOCxlLmhlaWdodD0yOCxlLmludGVyc2VjdD1mdW5jdGlvbihzKXtyZXR1cm4gSW4uY2lyY2xlKGUsMTQscyl9LHJ9LCJjaG9pY2UiKSxlbnQ9byhhc3luYyh0LGUpPT57bGV0e3NoYXBlU3ZnOnIsYmJveDpufT1hd2FpdCBOaSh0LGUsYm8oZSx2b2lkIDApLCEwKSxpPTQsYT1uLmhlaWdodCtlLnBhZGRpbmcscz1hL2ksbD1uLndpZHRoKzIqcytlLnBhZGRpbmcsdT1be3g6cyx5OjB9LHt4Omwtcyx5OjB9LHt4OmwseTotYS8yfSx7eDpsLXMseTotYX0se3g6cyx5Oi1hfSx7eDowLHk6LWEvMn1dLGg9WGwocixsLGEsdSk7cmV0dXJuIGguYXR0cigic3R5bGUiLGUuc3R5bGUpLEpuKGUsaCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oZil7cmV0dXJuIEluLnBvbHlnb24oZSx1LGYpfSxyfSwiaGV4YWdvbiIpLHRudD1vKGFzeW5jKHQsZSk9PntsZXR7c2hhcGVTdmc6cixiYm94Om59PWF3YWl0IE5pKHQsZSx2b2lkIDAsITApLGk9MixhPW4uaGVpZ2h0KzIqZS5wYWRkaW5nLHM9YS9pLGw9bi53aWR0aCsyKnMrZS5wYWRkaW5nLHU9cjJlKGUuZGlyZWN0aW9ucyxuLGUpLGg9WGwocixsLGEsdSk7cmV0dXJuIGguYXR0cigic3R5bGUiLGUuc3R5bGUpLEpuKGUsaCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oZil7cmV0dXJuIEluLnBvbHlnb24oZSx1LGYpfSxyfSwiYmxvY2tfYXJyb3ciKSxybnQ9byhhc3luYyh0LGUpPT57bGV0e3NoYXBlU3ZnOnIsYmJveDpufT1hd2FpdCBOaSh0LGUsYm8oZSx2b2lkIDApLCEwKSxpPW4ud2lkdGgrZS5wYWRkaW5nLGE9bi5oZWlnaHQrZS5wYWRkaW5nLHM9W3t4Oi1hLzIseTowfSx7eDppLHk6MH0se3g6aSx5Oi1hfSx7eDotYS8yLHk6LWF9LHt4OjAseTotYS8yfV07cmV0dXJuIFhsKHIsaSxhLHMpLmF0dHIoInN0eWxlIixlLnN0eWxlKSxlLndpZHRoPWkrYSxlLmhlaWdodD1hLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHUpe3JldHVybiBJbi5wb2x5Z29uKGUscyx1KX0scn0sInJlY3RfbGVmdF9pbnZfYXJyb3ciKSxubnQ9byhhc3luYyh0LGUpPT57bGV0e3NoYXBlU3ZnOnIsYmJveDpufT1hd2FpdCBOaSh0LGUsYm8oZSksITApLGk9bi53aWR0aCtlLnBhZGRpbmcsYT1uLmhlaWdodCtlLnBhZGRpbmcscz1be3g6LTIqYS82LHk6MH0se3g6aS1hLzYseTowfSx7eDppKzIqYS82LHk6LWF9LHt4OmEvNix5Oi1hfV0sbD1YbChyLGksYSxzKTtyZXR1cm4gbC5hdHRyKCJzdHlsZSIsZS5zdHlsZSksSm4oZSxsKSxlLmludGVyc2VjdD1mdW5jdGlvbih1KXtyZXR1cm4gSW4ucG9seWdvbihlLHMsdSl9LHJ9LCJsZWFuX3JpZ2h0IiksaW50PW8oYXN5bmModCxlKT0+e2xldHtzaGFwZVN2ZzpyLGJib3g6bn09YXdhaXQgTmkodCxlLGJvKGUsdm9pZCAwKSwhMCksaT1uLndpZHRoK2UucGFkZGluZyxhPW4uaGVpZ2h0K2UucGFkZGluZyxzPVt7eDoyKmEvNix5OjB9LHt4OmkrYS82LHk6MH0se3g6aS0yKmEvNix5Oi1hfSx7eDotYS82LHk6LWF9XSxsPVhsKHIsaSxhLHMpO3JldHVybiBsLmF0dHIoInN0eWxlIixlLnN0eWxlKSxKbihlLGwpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHUpe3JldHVybiBJbi5wb2x5Z29uKGUscyx1KX0scn0sImxlYW5fbGVmdCIpLGFudD1vKGFzeW5jKHQsZSk9PntsZXR7c2hhcGVTdmc6cixiYm94Om59PWF3YWl0IE5pKHQsZSxibyhlLHZvaWQgMCksITApLGk9bi53aWR0aCtlLnBhZGRpbmcsYT1uLmhlaWdodCtlLnBhZGRpbmcscz1be3g6LTIqYS82LHk6MH0se3g6aSsyKmEvNix5OjB9LHt4OmktYS82LHk6LWF9LHt4OmEvNix5Oi1hfV0sbD1YbChyLGksYSxzKTtyZXR1cm4gbC5hdHRyKCJzdHlsZSIsZS5zdHlsZSksSm4oZSxsKSxlLmludGVyc2VjdD1mdW5jdGlvbih1KXtyZXR1cm4gSW4ucG9seWdvbihlLHMsdSl9LHJ9LCJ0cmFwZXpvaWQiKSxzbnQ9byhhc3luYyh0LGUpPT57bGV0e3NoYXBlU3ZnOnIsYmJveDpufT1hd2FpdCBOaSh0LGUsYm8oZSx2b2lkIDApLCEwKSxpPW4ud2lkdGgrZS5wYWRkaW5nLGE9bi5oZWlnaHQrZS5wYWRkaW5nLHM9W3t4OmEvNix5OjB9LHt4OmktYS82LHk6MH0se3g6aSsyKmEvNix5Oi1hfSx7eDotMiphLzYseTotYX1dLGw9WGwocixpLGEscyk7cmV0dXJuIGwuYXR0cigic3R5bGUiLGUuc3R5bGUpLEpuKGUsbCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odSl7cmV0dXJuIEluLnBvbHlnb24oZSxzLHUpfSxyfSwiaW52X3RyYXBlem9pZCIpLG9udD1vKGFzeW5jKHQsZSk9PntsZXR7c2hhcGVTdmc6cixiYm94Om59PWF3YWl0IE5pKHQsZSxibyhlLHZvaWQgMCksITApLGk9bi53aWR0aCtlLnBhZGRpbmcsYT1uLmhlaWdodCtlLnBhZGRpbmcscz1be3g6MCx5OjB9LHt4OmkrYS8yLHk6MH0se3g6aSx5Oi1hLzJ9LHt4OmkrYS8yLHk6LWF9LHt4OjAseTotYX1dLGw9WGwocixpLGEscyk7cmV0dXJuIGwuYXR0cigic3R5bGUiLGUuc3R5bGUpLEpuKGUsbCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odSl7cmV0dXJuIEluLnBvbHlnb24oZSxzLHUpfSxyfSwicmVjdF9yaWdodF9pbnZfYXJyb3ciKSxsbnQ9byhhc3luYyh0LGUpPT57bGV0e3NoYXBlU3ZnOnIsYmJveDpufT1hd2FpdCBOaSh0LGUsYm8oZSx2b2lkIDApLCEwKSxpPW4ud2lkdGgrZS5wYWRkaW5nLGE9aS8yLHM9YS8oMi41K2kvNTApLGw9bi5oZWlnaHQrcytlLnBhZGRpbmcsdT0iTSAwLCIrcysiIGEgIithKyIsIitzKyIgMCwwLDAgIitpKyIgMCBhICIrYSsiLCIrcysiIDAsMCwwICIrLWkrIiAwIGwgMCwiK2wrIiBhICIrYSsiLCIrcysiIDAsMCwwICIraSsiIDAgbCAwLCIrLWwsaD1yLmF0dHIoImxhYmVsLW9mZnNldC15IixzKS5pbnNlcnQoInBhdGgiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJzdHlsZSIsZS5zdHlsZSkuYXR0cigiZCIsdSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWkvMisiLCIrLShsLzIrcykrIikiKTtyZXR1cm4gSm4oZSxoKSxlLmludGVyc2VjdD1mdW5jdGlvbihmKXtsZXQgZD1Jbi5yZWN0KGUsZikscD1kLngtZS54O2lmKGEhPTAmJihNYXRoLmFicyhwKTxlLndpZHRoLzJ8fE1hdGguYWJzKHApPT1lLndpZHRoLzImJk1hdGguYWJzKGQueS1lLnkpPmUuaGVpZ2h0LzItcykpe2xldCBtPXMqcyooMS1wKnAvKGEqYSkpO20hPTAmJihtPU1hdGguc3FydChtKSksbT1zLW0sZi55LWUueT4wJiYobT0tbSksZC55Kz1tfXJldHVybiBkfSxyfSwiY3lsaW5kZXIiKSxjbnQ9byhhc3luYyh0LGUpPT57bGV0e3NoYXBlU3ZnOnIsYmJveDpuLGhhbGZQYWRkaW5nOml9PWF3YWl0IE5pKHQsZSwibm9kZSAiK2UuY2xhc3NlcysiICIrZS5jbGFzcywhMCksYT1yLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLHM9ZS5wb3NpdGlvbmVkP2Uud2lkdGg6bi53aWR0aCtlLnBhZGRpbmcsbD1lLnBvc2l0aW9uZWQ/ZS5oZWlnaHQ6bi5oZWlnaHQrZS5wYWRkaW5nLHU9ZS5wb3NpdGlvbmVkPy1zLzI6LW4ud2lkdGgvMi1pLGg9ZS5wb3NpdGlvbmVkPy1sLzI6LW4uaGVpZ2h0LzItaTtpZihhLmF0dHIoImNsYXNzIiwiYmFzaWMgbGFiZWwtY29udGFpbmVyIikuYXR0cigic3R5bGUiLGUuc3R5bGUpLmF0dHIoInJ4IixlLnJ4KS5hdHRyKCJyeSIsZS5yeSkuYXR0cigieCIsdSkuYXR0cigieSIsaCkuYXR0cigid2lkdGgiLHMpLmF0dHIoImhlaWdodCIsbCksZS5wcm9wcyl7bGV0IGY9bmV3IFNldChPYmplY3Qua2V5cyhlLnByb3BzKSk7ZS5wcm9wcy5ib3JkZXJzJiYoVUYoYSxlLnByb3BzLmJvcmRlcnMscyxsKSxmLmRlbGV0ZSgiYm9yZGVycyIpKSxmLmZvckVhY2goZD0+e1gud2FybihgVW5rbm93biBub2RlIHByb3BlcnR5ICR7ZH1gKX0pfXJldHVybiBKbihlLGEpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKGYpe3JldHVybiBJbi5yZWN0KGUsZil9LHJ9LCJyZWN0IiksdW50PW8oYXN5bmModCxlKT0+e2xldHtzaGFwZVN2ZzpyLGJib3g6bixoYWxmUGFkZGluZzppfT1hd2FpdCBOaSh0LGUsIm5vZGUgIitlLmNsYXNzZXMsITApLGE9ci5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxzPWUucG9zaXRpb25lZD9lLndpZHRoOm4ud2lkdGgrZS5wYWRkaW5nLGw9ZS5wb3NpdGlvbmVkP2UuaGVpZ2h0Om4uaGVpZ2h0K2UucGFkZGluZyx1PWUucG9zaXRpb25lZD8tcy8yOi1uLndpZHRoLzItaSxoPWUucG9zaXRpb25lZD8tbC8yOi1uLmhlaWdodC8yLWk7aWYoYS5hdHRyKCJjbGFzcyIsImJhc2ljIGNsdXN0ZXIgY29tcG9zaXRlIGxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInN0eWxlIixlLnN0eWxlKS5hdHRyKCJyeCIsZS5yeCkuYXR0cigicnkiLGUucnkpLmF0dHIoIngiLHUpLmF0dHIoInkiLGgpLmF0dHIoIndpZHRoIixzKS5hdHRyKCJoZWlnaHQiLGwpLGUucHJvcHMpe2xldCBmPW5ldyBTZXQoT2JqZWN0LmtleXMoZS5wcm9wcykpO2UucHJvcHMuYm9yZGVycyYmKFVGKGEsZS5wcm9wcy5ib3JkZXJzLHMsbCksZi5kZWxldGUoImJvcmRlcnMiKSksZi5mb3JFYWNoKGQ9PntYLndhcm4oYFVua25vd24gbm9kZSBwcm9wZXJ0eSAke2R9YCl9KX1yZXR1cm4gSm4oZSxhKSxlLmludGVyc2VjdD1mdW5jdGlvbihmKXtyZXR1cm4gSW4ucmVjdChlLGYpfSxyfSwiY29tcG9zaXRlIiksaG50PW8oYXN5bmModCxlKT0+e2xldHtzaGFwZVN2ZzpyfT1hd2FpdCBOaSh0LGUsImxhYmVsIiwhMCk7WC50cmFjZSgiQ2xhc3NlcyA9ICIsZS5jbGFzcyk7bGV0IG49ci5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxpPTAsYT0wO2lmKG4uYXR0cigid2lkdGgiLGkpLmF0dHIoImhlaWdodCIsYSksci5hdHRyKCJjbGFzcyIsImxhYmVsIGVkZ2VMYWJlbCIpLGUucHJvcHMpe2xldCBzPW5ldyBTZXQoT2JqZWN0LmtleXMoZS5wcm9wcykpO2UucHJvcHMuYm9yZGVycyYmKFVGKG4sZS5wcm9wcy5ib3JkZXJzLGksYSkscy5kZWxldGUoImJvcmRlcnMiKSkscy5mb3JFYWNoKGw9PntYLndhcm4oYFVua25vd24gbm9kZSBwcm9wZXJ0eSAke2x9YCl9KX1yZXR1cm4gSm4oZSxuKSxlLmludGVyc2VjdD1mdW5jdGlvbihzKXtyZXR1cm4gSW4ucmVjdChlLHMpfSxyfSwibGFiZWxSZWN0Iik7byhVRiwiYXBwbHlOb2RlUHJvcGVydHlCb3JkZXJzIik7Zm50PW8oYXN5bmModCxlKT0+e2xldCByO2UuY2xhc3Nlcz9yPSJub2RlICIrZS5jbGFzc2VzOnI9Im5vZGUgZGVmYXVsdCI7bGV0IG49dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIscikuYXR0cigiaWQiLGUuZG9tSWR8fGUuaWQpLGk9bi5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxhPW4uaW5zZXJ0KCJsaW5lIikscz1uLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKSxsPWUubGFiZWxUZXh0LmZsYXQ/ZS5sYWJlbFRleHQuZmxhdCgpOmUubGFiZWxUZXh0LHU9IiI7dHlwZW9mIGw9PSJvYmplY3QiP3U9bFswXTp1PWwsWC5pbmZvKCJMYWJlbCB0ZXh0IGFiYzc5Iix1LGwsdHlwZW9mIGw9PSJvYmplY3QiKTtsZXQgaD1zLm5vZGUoKS5hcHBlbmRDaGlsZChhd2FpdCBrcyh1LGUubGFiZWxTdHlsZSwhMCwhMCkpLGY9e3dpZHRoOjAsaGVpZ2h0OjB9O2lmKGRyKG1lKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtsZXQgeT1oLmNoaWxkcmVuWzBdLHY9R2UoaCk7Zj15LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHYuYXR0cigid2lkdGgiLGYud2lkdGgpLHYuYXR0cigiaGVpZ2h0IixmLmhlaWdodCl9WC5pbmZvKCJUZXh0IDIiLGwpO2xldCBkPWwuc2xpY2UoMSxsLmxlbmd0aCkscD1oLmdldEJCb3goKSxtPXMubm9kZSgpLmFwcGVuZENoaWxkKGF3YWl0IGtzKGQuam9pbj9kLmpvaW4oIjxici8+Iik6ZCxlLmxhYmVsU3R5bGUsITAsITApKTtpZihkcihtZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7bGV0IHk9bS5jaGlsZHJlblswXSx2PUdlKG0pO2Y9eS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx2LmF0dHIoIndpZHRoIixmLndpZHRoKSx2LmF0dHIoImhlaWdodCIsZi5oZWlnaHQpfWxldCBnPWUucGFkZGluZy8yO3JldHVybiBHZShtKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrKGYud2lkdGg+cC53aWR0aD8wOihwLndpZHRoLWYud2lkdGgpLzIpKyIsICIrKHAuaGVpZ2h0K2crNSkrIikiKSxHZShoKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrKGYud2lkdGg8cC53aWR0aD8wOi0ocC53aWR0aC1mLndpZHRoKS8yKSsiLCAwKSIpLGY9cy5ub2RlKCkuZ2V0QkJveCgpLHMuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWYud2lkdGgvMisiLCAiKygtZi5oZWlnaHQvMi1nKzMpKyIpIiksaS5hdHRyKCJjbGFzcyIsIm91dGVyIHRpdGxlLXN0YXRlIikuYXR0cigieCIsLWYud2lkdGgvMi1nKS5hdHRyKCJ5IiwtZi5oZWlnaHQvMi1nKS5hdHRyKCJ3aWR0aCIsZi53aWR0aCtlLnBhZGRpbmcpLmF0dHIoImhlaWdodCIsZi5oZWlnaHQrZS5wYWRkaW5nKSxhLmF0dHIoImNsYXNzIiwiZGl2aWRlciIpLmF0dHIoIngxIiwtZi53aWR0aC8yLWcpLmF0dHIoIngyIixmLndpZHRoLzIrZykuYXR0cigieTEiLC1mLmhlaWdodC8yLWcrcC5oZWlnaHQrZykuYXR0cigieTIiLC1mLmhlaWdodC8yLWcrcC5oZWlnaHQrZyksSm4oZSxpKSxlLmludGVyc2VjdD1mdW5jdGlvbih5KXtyZXR1cm4gSW4ucmVjdChlLHkpfSxufSwicmVjdFdpdGhUaXRsZSIpLGRudD1vKGFzeW5jKHQsZSk9PntsZXR7c2hhcGVTdmc6cixiYm94Om59PWF3YWl0IE5pKHQsZSxibyhlLHZvaWQgMCksITApLGk9bi5oZWlnaHQrZS5wYWRkaW5nLGE9bi53aWR0aCtpLzQrZS5wYWRkaW5nLHM9ci5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJzdHlsZSIsZS5zdHlsZSkuYXR0cigicngiLGkvMikuYXR0cigicnkiLGkvMikuYXR0cigieCIsLWEvMikuYXR0cigieSIsLWkvMikuYXR0cigid2lkdGgiLGEpLmF0dHIoImhlaWdodCIsaSk7cmV0dXJuIEpuKGUscyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24obCl7cmV0dXJuIEluLnJlY3QoZSxsKX0scn0sInN0YWRpdW0iKSxwbnQ9byhhc3luYyh0LGUpPT57bGV0e3NoYXBlU3ZnOnIsYmJveDpuLGhhbGZQYWRkaW5nOml9PWF3YWl0IE5pKHQsZSxibyhlLHZvaWQgMCksITApLGE9ci5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBhLmF0dHIoInN0eWxlIixlLnN0eWxlKS5hdHRyKCJyeCIsZS5yeCkuYXR0cigicnkiLGUucnkpLmF0dHIoInIiLG4ud2lkdGgvMitpKS5hdHRyKCJ3aWR0aCIsbi53aWR0aCtlLnBhZGRpbmcpLmF0dHIoImhlaWdodCIsbi5oZWlnaHQrZS5wYWRkaW5nKSxYLmluZm8oIkNpcmNsZSBtYWluIiksSm4oZSxhKSxlLmludGVyc2VjdD1mdW5jdGlvbihzKXtyZXR1cm4gWC5pbmZvKCJDaXJjbGUgaW50ZXJzZWN0IixlLG4ud2lkdGgvMitpLHMpLEluLmNpcmNsZShlLG4ud2lkdGgvMitpLHMpfSxyfSwiY2lyY2xlIiksbW50PW8oYXN5bmModCxlKT0+e2xldHtzaGFwZVN2ZzpyLGJib3g6bixoYWxmUGFkZGluZzppfT1hd2FpdCBOaSh0LGUsYm8oZSx2b2lkIDApLCEwKSxhPTUscz1yLmluc2VydCgiZyIsIjpmaXJzdC1jaGlsZCIpLGw9cy5pbnNlcnQoImNpcmNsZSIpLHU9cy5pbnNlcnQoImNpcmNsZSIpO3JldHVybiBzLmF0dHIoImNsYXNzIixlLmNsYXNzKSxsLmF0dHIoInN0eWxlIixlLnN0eWxlKS5hdHRyKCJyeCIsZS5yeCkuYXR0cigicnkiLGUucnkpLmF0dHIoInIiLG4ud2lkdGgvMitpK2EpLmF0dHIoIndpZHRoIixuLndpZHRoK2UucGFkZGluZythKjIpLmF0dHIoImhlaWdodCIsbi5oZWlnaHQrZS5wYWRkaW5nK2EqMiksdS5hdHRyKCJzdHlsZSIsZS5zdHlsZSkuYXR0cigicngiLGUucngpLmF0dHIoInJ5IixlLnJ5KS5hdHRyKCJyIixuLndpZHRoLzIraSkuYXR0cigid2lkdGgiLG4ud2lkdGgrZS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLG4uaGVpZ2h0K2UucGFkZGluZyksWC5pbmZvKCJEb3VibGVDaXJjbGUgbWFpbiIpLEpuKGUsbCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oaCl7cmV0dXJuIFguaW5mbygiRG91YmxlQ2lyY2xlIGludGVyc2VjdCIsZSxuLndpZHRoLzIraSthLGgpLEluLmNpcmNsZShlLG4ud2lkdGgvMitpK2EsaCl9LHJ9LCJkb3VibGVjaXJjbGUiKSxnbnQ9byhhc3luYyh0LGUpPT57bGV0e3NoYXBlU3ZnOnIsYmJveDpufT1hd2FpdCBOaSh0LGUsYm8oZSx2b2lkIDApLCEwKSxpPW4ud2lkdGgrZS5wYWRkaW5nLGE9bi5oZWlnaHQrZS5wYWRkaW5nLHM9W3t4OjAseTowfSx7eDppLHk6MH0se3g6aSx5Oi1hfSx7eDowLHk6LWF9LHt4OjAseTowfSx7eDotOCx5OjB9LHt4OmkrOCx5OjB9LHt4OmkrOCx5Oi1hfSx7eDotOCx5Oi1hfSx7eDotOCx5OjB9XSxsPVhsKHIsaSxhLHMpO3JldHVybiBsLmF0dHIoInN0eWxlIixlLnN0eWxlKSxKbihlLGwpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHUpe3JldHVybiBJbi5wb2x5Z29uKGUscyx1KX0scn0sInN1YnJvdXRpbmUiKSx5bnQ9bygodCxlKT0+e2xldCByPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJub2RlIGRlZmF1bHQiKS5hdHRyKCJpZCIsZS5kb21JZHx8ZS5pZCksbj1yLmluc2VydCgiY2lyY2xlIiwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIG4uYXR0cigiY2xhc3MiLCJzdGF0ZS1zdGFydCIpLmF0dHIoInIiLDcpLmF0dHIoIndpZHRoIiwxNCkuYXR0cigiaGVpZ2h0IiwxNCksSm4oZSxuKSxlLmludGVyc2VjdD1mdW5jdGlvbihpKXtyZXR1cm4gSW4uY2lyY2xlKGUsNyxpKX0scn0sInN0YXJ0IikseDJlPW8oKHQsZSxyKT0+e2xldCBuPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJub2RlIGRlZmF1bHQiKS5hdHRyKCJpZCIsZS5kb21JZHx8ZS5pZCksaT03MCxhPTEwO3I9PT0iTFIiJiYoaT0xMCxhPTcwKTtsZXQgcz1uLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLC0xKmkvMikuYXR0cigieSIsLTEqYS8yKS5hdHRyKCJ3aWR0aCIsaSkuYXR0cigiaGVpZ2h0IixhKS5hdHRyKCJjbGFzcyIsImZvcmstam9pbiIpO3JldHVybiBKbihlLHMpLGUuaGVpZ2h0PWUuaGVpZ2h0K2UucGFkZGluZy8yLGUud2lkdGg9ZS53aWR0aCtlLnBhZGRpbmcvMixlLmludGVyc2VjdD1mdW5jdGlvbihsKXtyZXR1cm4gSW4ucmVjdChlLGwpfSxufSwiZm9ya0pvaW4iKSx2bnQ9bygodCxlKT0+e2xldCByPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJub2RlIGRlZmF1bHQiKS5hdHRyKCJpZCIsZS5kb21JZHx8ZS5pZCksbj1yLmluc2VydCgiY2lyY2xlIiwiOmZpcnN0LWNoaWxkIiksaT1yLmluc2VydCgiY2lyY2xlIiwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIGkuYXR0cigiY2xhc3MiLCJzdGF0ZS1zdGFydCIpLmF0dHIoInIiLDcpLmF0dHIoIndpZHRoIiwxNCkuYXR0cigiaGVpZ2h0IiwxNCksbi5hdHRyKCJjbGFzcyIsInN0YXRlLWVuZCIpLmF0dHIoInIiLDUpLmF0dHIoIndpZHRoIiwxMCkuYXR0cigiaGVpZ2h0IiwxMCksSm4oZSxpKSxlLmludGVyc2VjdD1mdW5jdGlvbihhKXtyZXR1cm4gSW4uY2lyY2xlKGUsNyxhKX0scn0sImVuZCIpLHhudD1vKGFzeW5jKHQsZSk9PntsZXQgcj1lLnBhZGRpbmcvMixuPTQsaT04LGE7ZS5jbGFzc2VzP2E9Im5vZGUgIitlLmNsYXNzZXM6YT0ibm9kZSBkZWZhdWx0IjtsZXQgcz10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIixhKS5hdHRyKCJpZCIsZS5kb21JZHx8ZS5pZCksbD1zLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLHU9cy5pbnNlcnQoImxpbmUiKSxoPXMuaW5zZXJ0KCJsaW5lIiksZj0wLGQ9bixwPXMuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLG09MCxnPWUuY2xhc3NEYXRhLmFubm90YXRpb25zPy5bMF0seT1lLmNsYXNzRGF0YS5hbm5vdGF0aW9uc1swXT8iXHhBQiIrZS5jbGFzc0RhdGEuYW5ub3RhdGlvbnNbMF0rIlx4QkIiOiIiLHY9cC5ub2RlKCkuYXBwZW5kQ2hpbGQoYXdhaXQga3MoeSxlLmxhYmVsU3R5bGUsITAsITApKSx4PXYuZ2V0QkJveCgpO2lmKGRyKG1lKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtsZXQgQz12LmNoaWxkcmVuWzBdLEQ9R2Uodik7eD1DLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEQuYXR0cigid2lkdGgiLHgud2lkdGgpLEQuYXR0cigiaGVpZ2h0Iix4LmhlaWdodCl9ZS5jbGFzc0RhdGEuYW5ub3RhdGlvbnNbMF0mJihkKz14LmhlaWdodCtuLGYrPXgud2lkdGgpO2xldCBiPWUuY2xhc3NEYXRhLmxhYmVsO2UuY2xhc3NEYXRhLnR5cGUhPT12b2lkIDAmJmUuY2xhc3NEYXRhLnR5cGUhPT0iIiYmKG1lKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHM/Yis9IiZsdDsiK2UuY2xhc3NEYXRhLnR5cGUrIiZndDsiOmIrPSI8IitlLmNsYXNzRGF0YS50eXBlKyI+Iik7bGV0IFQ9cC5ub2RlKCkuYXBwZW5kQ2hpbGQoYXdhaXQga3MoYixlLmxhYmVsU3R5bGUsITAsITApKTtHZShUKS5hdHRyKCJjbGFzcyIsImNsYXNzVGl0bGUiKTtsZXQgUz1ULmdldEJCb3goKTtpZihkcihtZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7bGV0IEM9VC5jaGlsZHJlblswXSxEPUdlKFQpO1M9Qy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxELmF0dHIoIndpZHRoIixTLndpZHRoKSxELmF0dHIoImhlaWdodCIsUy5oZWlnaHQpfWQrPVMuaGVpZ2h0K24sUy53aWR0aD5mJiYoZj1TLndpZHRoKTtsZXQgdz1bXTtlLmNsYXNzRGF0YS5tZW1iZXJzLmZvckVhY2goYXN5bmMgQz0+e2xldCBEPUMuZ2V0RGlzcGxheURldGFpbHMoKSxPPUQuZGlzcGxheVRleHQ7bWUoKS5mbG93Y2hhcnQuaHRtbExhYmVscyYmKE89Ty5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKSk7bGV0IFI9cC5ub2RlKCkuYXBwZW5kQ2hpbGQoYXdhaXQga3MoTyxELmNzc1N0eWxlP0QuY3NzU3R5bGU6ZS5sYWJlbFN0eWxlLCEwLCEwKSksaz1SLmdldEJCb3goKTtpZihkcihtZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7bGV0IEw9Ui5jaGlsZHJlblswXSxBPUdlKFIpO2s9TC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxBLmF0dHIoIndpZHRoIixrLndpZHRoKSxBLmF0dHIoImhlaWdodCIsay5oZWlnaHQpfWsud2lkdGg+ZiYmKGY9ay53aWR0aCksZCs9ay5oZWlnaHQrbix3LnB1c2goUil9KSxkKz1pO2xldCBFPVtdO2lmKGUuY2xhc3NEYXRhLm1ldGhvZHMuZm9yRWFjaChhc3luYyBDPT57bGV0IEQ9Qy5nZXREaXNwbGF5RGV0YWlscygpLE89RC5kaXNwbGF5VGV4dDttZSgpLmZsb3djaGFydC5odG1sTGFiZWxzJiYoTz1PLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpKTtsZXQgUj1wLm5vZGUoKS5hcHBlbmRDaGlsZChhd2FpdCBrcyhPLEQuY3NzU3R5bGU/RC5jc3NTdHlsZTplLmxhYmVsU3R5bGUsITAsITApKSxrPVIuZ2V0QkJveCgpO2lmKGRyKG1lKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXtsZXQgTD1SLmNoaWxkcmVuWzBdLEE9R2UoUik7az1MLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEEuYXR0cigid2lkdGgiLGsud2lkdGgpLEEuYXR0cigiaGVpZ2h0IixrLmhlaWdodCl9ay53aWR0aD5mJiYoZj1rLndpZHRoKSxkKz1rLmhlaWdodCtuLEUucHVzaChSKX0pLGQrPWksZyl7bGV0IEM9KGYteC53aWR0aCkvMjtHZSh2KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrKC0xKmYvMitDKSsiLCAiKy0xKmQvMisiKSIpLG09eC5oZWlnaHQrbn1sZXQgXz0oZi1TLndpZHRoKS8yO3JldHVybiBHZShUKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrKC0xKmYvMitfKSsiLCAiKygtMSpkLzIrbSkrIikiKSxtKz1TLmhlaWdodCtuLHUuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDEiLC1mLzItcikuYXR0cigieDIiLGYvMityKS5hdHRyKCJ5MSIsLWQvMi1yK2krbSkuYXR0cigieTIiLC1kLzItcitpK20pLG0rPWksdy5mb3JFYWNoKEM9PntHZShDKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrLWYvMisiLCAiKygtMSpkLzIrbStpLzIpKyIpIik7bGV0IEQ9Qz8uZ2V0QkJveCgpO20rPShEPy5oZWlnaHQ/PzApK259KSxtKz1pLGguYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDEiLC1mLzItcikuYXR0cigieDIiLGYvMityKS5hdHRyKCJ5MSIsLWQvMi1yK2krbSkuYXR0cigieTIiLC1kLzItcitpK20pLG0rPWksRS5mb3JFYWNoKEM9PntHZShDKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrLWYvMisiLCAiKygtMSpkLzIrbSkrIikiKTtsZXQgRD1DPy5nZXRCQm94KCk7bSs9KEQ/LmhlaWdodD8/MCkrbn0pLGwuYXR0cigic3R5bGUiLGUuc3R5bGUpLmF0dHIoImNsYXNzIiwib3V0ZXIgdGl0bGUtc3RhdGUiKS5hdHRyKCJ4IiwtZi8yLXIpLmF0dHIoInkiLC0oZC8yKS1yKS5hdHRyKCJ3aWR0aCIsZitlLnBhZGRpbmcpLmF0dHIoImhlaWdodCIsZCtlLnBhZGRpbmcpLEpuKGUsbCksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24oQyl7cmV0dXJuIEluLnJlY3QoZSxDKX0sc30sImNsYXNzX2JveCIpLGIyZT17cmhvbWJ1czp2MmUsY29tcG9zaXRlOnVudCxxdWVzdGlvbjp2MmUscmVjdDpjbnQsbGFiZWxSZWN0OmhudCxyZWN0V2l0aFRpdGxlOmZudCxjaG9pY2U6SnJ0LGNpcmNsZTpwbnQsZG91YmxlY2lyY2xlOm1udCxzdGFkaXVtOmRudCxoZXhhZ29uOmVudCxibG9ja19hcnJvdzp0bnQscmVjdF9sZWZ0X2ludl9hcnJvdzpybnQsbGVhbl9yaWdodDpubnQsbGVhbl9sZWZ0OmludCx0cmFwZXpvaWQ6YW50LGludl90cmFwZXpvaWQ6c250LHJlY3RfcmlnaHRfaW52X2Fycm93Om9udCxjeWxpbmRlcjpsbnQsc3RhcnQ6eW50LGVuZDp2bnQsbm90ZTptMmUsc3Vicm91dGluZTpnbnQsZm9yazp4MmUsam9pbjp4MmUsY2xhc3NfYm94OnhudH0sU0M9e30sSEY9byhhc3luYyh0LGUscik9PntsZXQgbixpO2lmKGUubGluayl7bGV0IGE7bWUoKS5zZWN1cml0eUxldmVsPT09InNhbmRib3giP2E9Il90b3AiOmUubGlua1RhcmdldCYmKGE9ZS5saW5rVGFyZ2V0fHwiX2JsYW5rIiksbj10Lmluc2VydCgic3ZnOmEiKS5hdHRyKCJ4bGluazpocmVmIixlLmxpbmspLmF0dHIoInRhcmdldCIsYSksaT1hd2FpdCBiMmVbZS5zaGFwZV0obixlLHIpfWVsc2UgaT1hd2FpdCBiMmVbZS5zaGFwZV0odCxlLHIpLG49aTtyZXR1cm4gZS50b29sdGlwJiZpLmF0dHIoInRpdGxlIixlLnRvb2x0aXApLGUuY2xhc3MmJmkuYXR0cigiY2xhc3MiLCJub2RlIGRlZmF1bHQgIitlLmNsYXNzKSxTQ1tlLmlkXT1uLGUuaGF2ZUNhbGxiYWNrJiZTQ1tlLmlkXS5hdHRyKCJjbGFzcyIsU0NbZS5pZF0uYXR0cigiY2xhc3MiKSsiIGNsaWNrYWJsZSIpLG59LCJpbnNlcnROb2RlIiksVDJlPW8odD0+e2xldCBlPVNDW3QuaWRdO1gudHJhY2UoIlRyYW5zZm9ybWluZyBub2RlIix0LmRpZmYsdCwidHJhbnNsYXRlKCIrKHQueC10LndpZHRoLzItNSkrIiwgIit0LndpZHRoLzIrIikiKTtsZXQgcj04LG49dC5kaWZmfHwwO3JldHVybiB0LmNsdXN0ZXJOb2RlP2UuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKHQueCtuLXQud2lkdGgvMikrIiwgIisodC55LXQuaGVpZ2h0LzItcikrIikiKTplLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3QueCsiLCAiK3QueSsiKSIpLG59LCJwb3NpdGlvbk5vZGUiKX0pO2Z1bmN0aW9uIGsyZSh0LGUscj0hMSl7bGV0IG49dCxpPSJkZWZhdWx0Ijsobj8uY2xhc3Nlcz8ubGVuZ3RofHwwKT4wJiYoaT0obj8uY2xhc3Nlcz8/W10pLmpvaW4oIiAiKSksaT1pKyIgZmxvd2NoYXJ0LWxhYmVsIjtsZXQgYT0wLHM9IiIsbDtzd2l0Y2gobi50eXBlKXtjYXNlInJvdW5kIjphPTUscz0icmVjdCI7YnJlYWs7Y2FzZSJjb21wb3NpdGUiOmE9MCxzPSJjb21wb3NpdGUiLGw9MDticmVhaztjYXNlInNxdWFyZSI6cz0icmVjdCI7YnJlYWs7Y2FzZSJkaWFtb25kIjpzPSJxdWVzdGlvbiI7YnJlYWs7Y2FzZSJoZXhhZ29uIjpzPSJoZXhhZ29uIjticmVhaztjYXNlImJsb2NrX2Fycm93IjpzPSJibG9ja19hcnJvdyI7YnJlYWs7Y2FzZSJvZGQiOnM9InJlY3RfbGVmdF9pbnZfYXJyb3ciO2JyZWFrO2Nhc2UibGVhbl9yaWdodCI6cz0ibGVhbl9yaWdodCI7YnJlYWs7Y2FzZSJsZWFuX2xlZnQiOnM9ImxlYW5fbGVmdCI7YnJlYWs7Y2FzZSJ0cmFwZXpvaWQiOnM9InRyYXBlem9pZCI7YnJlYWs7Y2FzZSJpbnZfdHJhcGV6b2lkIjpzPSJpbnZfdHJhcGV6b2lkIjticmVhaztjYXNlInJlY3RfbGVmdF9pbnZfYXJyb3ciOnM9InJlY3RfbGVmdF9pbnZfYXJyb3ciO2JyZWFrO2Nhc2UiY2lyY2xlIjpzPSJjaXJjbGUiO2JyZWFrO2Nhc2UiZWxsaXBzZSI6cz0iZWxsaXBzZSI7YnJlYWs7Y2FzZSJzdGFkaXVtIjpzPSJzdGFkaXVtIjticmVhaztjYXNlInN1YnJvdXRpbmUiOnM9InN1YnJvdXRpbmUiO2JyZWFrO2Nhc2UiY3lsaW5kZXIiOnM9ImN5bGluZGVyIjticmVhaztjYXNlImdyb3VwIjpzPSJyZWN0IjticmVhaztjYXNlImRvdWJsZWNpcmNsZSI6cz0iZG91YmxlY2lyY2xlIjticmVhaztkZWZhdWx0OnM9InJlY3QifWxldCB1PUQ5KG4/LnN0eWxlcz8/W10pLGg9bi5sYWJlbCxmPW4uc2l6ZT8/e3dpZHRoOjAsaGVpZ2h0OjAseDowLHk6MH07cmV0dXJue2xhYmVsU3R5bGU6dS5sYWJlbFN0eWxlLHNoYXBlOnMsbGFiZWxUZXh0Omgscng6YSxyeTphLGNsYXNzOmksc3R5bGU6dS5zdHlsZSxpZDpuLmlkLGRpcmVjdGlvbnM6bi5kaXJlY3Rpb25zLHdpZHRoOmYud2lkdGgsaGVpZ2h0OmYuaGVpZ2h0LHg6Zi54LHk6Zi55LHBvc2l0aW9uZWQ6cixpbnRlcnNlY3Q6dm9pZCAwLHR5cGU6bi50eXBlLHBhZGRpbmc6bD8/dHIoKT8uYmxvY2s/LnBhZGRpbmc/PzB9fWFzeW5jIGZ1bmN0aW9uIGJudCh0LGUscil7bGV0IG49azJlKGUsciwhMSk7aWYobi50eXBlPT09Imdyb3VwIilyZXR1cm47bGV0IGk9dHIoKSxhPWF3YWl0IEhGKHQsbix7Y29uZmlnOml9KSxzPWEubm9kZSgpLmdldEJCb3goKSxsPXIuZ2V0QmxvY2sobi5pZCk7bC5zaXplPXt3aWR0aDpzLndpZHRoLGhlaWdodDpzLmhlaWdodCx4OjAseTowLG5vZGU6YX0sci5zZXRCbG9jayhsKSxhLnJlbW92ZSgpfWFzeW5jIGZ1bmN0aW9uIFRudCh0LGUscil7bGV0IG49azJlKGUsciwhMCk7aWYoci5nZXRCbG9jayhuLmlkKS50eXBlIT09InNwYWNlIil7bGV0IGE9dHIoKTthd2FpdCBIRih0LG4se2NvbmZpZzphfSksZS5pbnRlcnNlY3Q9bj8uaW50ZXJzZWN0LFQyZShuKX19YXN5bmMgZnVuY3Rpb24gV0YodCxlLHIsbil7Zm9yKGxldCBpIG9mIGUpYXdhaXQgbih0LGksciksaS5jaGlsZHJlbiYmYXdhaXQgV0YodCxpLmNoaWxkcmVuLHIsbil9YXN5bmMgZnVuY3Rpb24gRTJlKHQsZSxyKXthd2FpdCBXRih0LGUscixibnQpfWFzeW5jIGZ1bmN0aW9uIFMyZSh0LGUscil7YXdhaXQgV0YodCxlLHIsVG50KX1hc3luYyBmdW5jdGlvbiBDMmUodCxlLHIsbixpKXtsZXQgYT1uZXcgc24oe211bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITB9KTthLnNldEdyYXBoKHtyYW5rZGlyOiJUQiIsbm9kZXNlcDoxMCxyYW5rc2VwOjEwLG1hcmdpbng6OCxtYXJnaW55Ojh9KTtmb3IobGV0IHMgb2YgcilzLnNpemUmJmEuc2V0Tm9kZShzLmlkLHt3aWR0aDpzLnNpemUud2lkdGgsaGVpZ2h0OnMuc2l6ZS5oZWlnaHQsaW50ZXJzZWN0OnMuaW50ZXJzZWN0fSk7Zm9yKGxldCBzIG9mIGUpaWYocy5zdGFydCYmcy5lbmQpe2xldCBsPW4uZ2V0QmxvY2socy5zdGFydCksdT1uLmdldEJsb2NrKHMuZW5kKTtpZihsPy5zaXplJiZ1Py5zaXplKXtsZXQgaD1sLnNpemUsZj11LnNpemUsZD1be3g6aC54LHk6aC55fSx7eDpoLngrKGYueC1oLngpLzIseTpoLnkrKGYueS1oLnkpLzJ9LHt4OmYueCx5OmYueX1dO2UyZSh0LHt2OnMuc3RhcnQsdzpzLmVuZCxuYW1lOnMuaWR9LHsuLi5zLGFycm93VHlwZUVuZDpzLmFycm93VHlwZUVuZCxhcnJvd1R5cGVTdGFydDpzLmFycm93VHlwZVN0YXJ0LHBvaW50czpkLGNsYXNzZXM6ImVkZ2UtdGhpY2tuZXNzLW5vcm1hbCBlZGdlLXBhdHRlcm4tc29saWQgZmxvd2NoYXJ0LWxpbmsgTFMtYTEgTEUtYjEifSx2b2lkIDAsImJsb2NrIixhLGkpLHMubGFiZWwmJihhd2FpdCBadmUodCx7Li4ucyxsYWJlbDpzLmxhYmVsLGxhYmVsU3R5bGU6InN0cm9rZTogIzMzMzsgc3Ryb2tlLXdpZHRoOiAxLjVweDtmaWxsOm5vbmU7IixhcnJvd1R5cGVFbmQ6cy5hcnJvd1R5cGVFbmQsYXJyb3dUeXBlU3RhcnQ6cy5hcnJvd1R5cGVTdGFydCxwb2ludHM6ZCxjbGFzc2VzOiJlZGdlLXRoaWNrbmVzcy1ub3JtYWwgZWRnZS1wYXR0ZXJuLXNvbGlkIGZsb3djaGFydC1saW5rIExTLWExIExFLWIxIn0pLEp2ZSh7Li4ucyx4OmRbMV0ueCx5OmRbMV0ueX0se29yaWdpbmFsUGF0aDpkfSkpfX19dmFyIEEyZT1OKCgpPT57InVzZSBzdHJpY3QiO1dvKCk7bWkoKTt0MmUoKTt3MmUoKTtlcigpO28oazJlLCJnZXROb2RlRnJvbUJsb2NrIik7byhibnQsImNhbGN1bGF0ZUJsb2NrU2l6ZSIpO28oVG50LCJpbnNlcnRCbG9ja1Bvc2l0aW9uZWQiKTtvKFdGLCJwZXJmb3JtT3BlcmF0aW9ucyIpO28oRTJlLCJjYWxjdWxhdGVCbG9ja1NpemVzIik7byhTMmUsImluc2VydEJsb2NrcyIpO28oQzJlLCJpbnNlcnRFZGdlcyIpfSk7dmFyIHdudCxrbnQsXzJlLEQyZT1OKCgpPT57InVzZSBzdHJpY3QiO2ZyKCk7bWkoKTtWdmUoKTt5dCgpO3hpKCk7cXZlKCk7QTJlKCk7d250PW8oZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5kYi5nZXRDbGFzc2VzKCl9LCJnZXRDbGFzc2VzIiksa250PW8oYXN5bmMgZnVuY3Rpb24odCxlLHIsbil7bGV0e3NlY3VyaXR5TGV2ZWw6aSxibG9jazphfT10cigpLHM9bi5kYixsO2k9PT0ic2FuZGJveCImJihsPUdlKCIjaSIrZSkpO2xldCB1PWk9PT0ic2FuZGJveCI/R2UobC5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KTpHZSgiYm9keSIpLGg9aT09PSJzYW5kYm94Ij91LnNlbGVjdChgW2lkPSIke2V9Il1gKTpHZShgW2lkPSIke2V9Il1gKTtHdmUoaCxbInBvaW50IiwiY2lyY2xlIiwiY3Jvc3MiXSxuLnR5cGUsZSk7bGV0IGQ9cy5nZXRCbG9ja3MoKSxwPXMuZ2V0QmxvY2tzRmxhdCgpLG09cy5nZXRFZGdlcygpLGc9aC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImJsb2NrIik7YXdhaXQgRTJlKGcsZCxzKTtsZXQgeT1XdmUocyk7aWYoYXdhaXQgUzJlKGcsZCxzKSxhd2FpdCBDMmUoZyxtLHAscyxlKSx5KXtsZXQgdj15LHg9TWF0aC5tYXgoMSxNYXRoLnJvdW5kKC4xMjUqKHYud2lkdGgvdi5oZWlnaHQpKSksYj12LmhlaWdodCt4KzEwLFQ9di53aWR0aCsxMCx7dXNlTWF4V2lkdGg6U309YTtmbihoLGIsVCwhIVMpLFguZGVidWcoIkhlcmUgQm91bmRzIix5LHYpLGguYXR0cigidmlld0JveCIsYCR7di54LTV9ICR7di55LTV9ICR7di53aWR0aCsxMH0gJHt2LmhlaWdodCsxMH1gKX19LCJkcmF3IiksXzJlPXtkcmF3OmtudCxnZXRDbGFzc2VzOndudH19KTt2YXIgTDJlPXt9O3VyKEwyZSx7ZGlhZ3JhbTooKT0+RW50fSk7dmFyIEVudCxSMmU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtSdmUoKTtGdmUoKTt6dmUoKTtEMmUoKTtFbnQ9e3BhcnNlcjpMdmUsZGI6QnZlLHJlbmRlcmVyOl8yZSxzdHlsZXM6JHZlfX0pO3ZhciBxRixZRixENCxJMmUsWEYsamEscnUsTDQsTzJlLF9udCxSNCxQMmUsQjJlLEYyZSwkMmUsejJlLENDLFlmLEFDPU4oKCk9PnsidXNlIHN0cmljdCI7cUY9e0w6ImxlZnQiLFI6InJpZ2h0IixUOiJ0b3AiLEI6ImJvdHRvbSJ9LFlGPXtMOm8odD0+YCR7dH0sJHt0LzJ9IDAsJHt0fSAwLDBgLCJMIiksUjpvKHQ9PmAwLCR7dC8yfSAke3R9LDAgJHt0fSwke3R9YCwiUiIpLFQ6byh0PT5gMCwwICR7dH0sMCAke3QvMn0sJHt0fWAsIlQiKSxCOm8odD0+YCR7dC8yfSwwICR7dH0sJHt0fSAwLCR7dH1gLCJCIil9LEQ0PXtMOm8oKHQsZSk9PnQtZSsyLCJMIiksUjpvKCh0LGUpPT50LTIsIlIiKSxUOm8oKHQsZSk9PnQtZSsyLCJUIiksQjpvKCh0LGUpPT50LTIsIkIiKX0sSTJlPW8oZnVuY3Rpb24odCl7cmV0dXJuIGphKHQpP3Q9PT0iTCI/IlIiOiJMIjp0PT09IlQiPyJCIjoiVCJ9LCJnZXRPcHBvc2l0ZUFyY2hpdGVjdHVyZURpcmVjdGlvbiIpLFhGPW8oZnVuY3Rpb24odCl7bGV0IGU9dDtyZXR1cm4gZT09PSJMInx8ZT09PSJSInx8ZT09PSJUInx8ZT09PSJCIn0sImlzQXJjaGl0ZWN0dXJlRGlyZWN0aW9uIiksamE9byhmdW5jdGlvbih0KXtsZXQgZT10O3JldHVybiBlPT09IkwifHxlPT09IlIifSwiaXNBcmNoaXRlY3R1cmVEaXJlY3Rpb25YIikscnU9byhmdW5jdGlvbih0KXtsZXQgZT10O3JldHVybiBlPT09IlQifHxlPT09IkIifSwiaXNBcmNoaXRlY3R1cmVEaXJlY3Rpb25ZIiksTDQ9byhmdW5jdGlvbih0LGUpe2xldCByPWphKHQpJiZydShlKSxuPXJ1KHQpJiZqYShlKTtyZXR1cm4gcnx8bn0sImlzQXJjaGl0ZWN0dXJlRGlyZWN0aW9uWFkiKSxPMmU9byhmdW5jdGlvbih0KXtsZXQgZT10WzBdLHI9dFsxXSxuPWphKGUpJiZydShyKSxpPXJ1KGUpJiZqYShyKTtyZXR1cm4gbnx8aX0sImlzQXJjaGl0ZWN0dXJlUGFpclhZIiksX250PW8oZnVuY3Rpb24odCl7cmV0dXJuIHQhPT0iTEwiJiZ0IT09IlJSIiYmdCE9PSJUVCImJnQhPT0iQkIifSwiaXNWYWxpZEFyY2hpdGVjdHVyZURpcmVjdGlvblBhaXIiKSxSND1vKGZ1bmN0aW9uKHQsZSl7bGV0IHI9YCR7dH0ke2V9YDtyZXR1cm4gX250KHIpP3I6dm9pZCAwfSwiZ2V0QXJjaGl0ZWN0dXJlRGlyZWN0aW9uUGFpciIpLFAyZT1vKGZ1bmN0aW9uKFt0LGVdLHIpe2xldCBuPXJbMF0saT1yWzFdO3JldHVybiBqYShuKT9ydShpKT9bdCsobj09PSJMIj8tMToxKSxlKyhpPT09IlQiPzE6LTEpXTpbdCsobj09PSJMIj8tMToxKSxlXTpqYShpKT9bdCsoaT09PSJMIj8xOi0xKSxlKyhuPT09IlQiPzE6LTEpXTpbdCxlKyhuPT09IlQiPzE6LTEpXX0sInNoaWZ0UG9zaXRpb25CeUFyY2hpdGVjdHVyZURpcmVjdGlvblBhaXIiKSxCMmU9byhmdW5jdGlvbih0KXtyZXR1cm4gdD09PSJMVCJ8fHQ9PT0iVEwiP1sxLDFdOnQ9PT0iQkwifHx0PT09IkxCIj9bMSwtMV06dD09PSJCUiJ8fHQ9PT0iUkIiP1stMSwtMV06Wy0xLDFdfSwiZ2V0QXJjaGl0ZWN0dXJlRGlyZWN0aW9uWFlGYWN0b3JzIiksRjJlPW8oZnVuY3Rpb24odCxlKXtyZXR1cm4gTDQodCxlKT8iYmVuZCI6amEodCk/Imhvcml6b250YWwiOiJ2ZXJ0aWNhbCJ9LCJnZXRBcmNoaXRlY3R1cmVEaXJlY3Rpb25BbGlnbm1lbnQiKSwkMmU9byhmdW5jdGlvbih0KXtyZXR1cm4gdC50eXBlPT09InNlcnZpY2UifSwiaXNBcmNoaXRlY3R1cmVTZXJ2aWNlIiksejJlPW8oZnVuY3Rpb24odCl7cmV0dXJuIHQudHlwZT09PSJqdW5jdGlvbiJ9LCJpc0FyY2hpdGVjdHVyZUp1bmN0aW9uIiksQ0M9byh0PT50LmRhdGEoKSwiZWRnZURhdGEiKSxZZj1vKHQ9PnQuZGF0YSgpLCJub2RlRGF0YSIpfSk7ZnVuY3Rpb24gTWkodCl7cmV0dXJuIFYyZSgpW3RdfXZhciBHMmUsdnIsRG50LExudCxSbnQsTm50LE1udCxJbnQsakYsT250LFBudCxCbnQsRm50LCRudCx6bnQsR250LFYyZSxvMCxOND1OKCgpPT57InVzZSBzdHJpY3QiO19hKCk7bWkoKTtTUygpO2NpKCk7QUMoKTtlcigpO0cyZT1vci5hcmNoaXRlY3R1cmUsdnI9bmV3IFRmKCgpPT4oe25vZGVzOnt9LGdyb3Vwczp7fSxlZGdlczpbXSxyZWdpc3RlcmVkSWRzOnt9LGNvbmZpZzpHMmUsZGF0YVN0cnVjdHVyZXM6dm9pZCAwLGVsZW1lbnRzOnt9fSkpLERudD1vKCgpPT57dnIucmVzZXQoKSxrcigpfSwiY2xlYXIiKSxMbnQ9byhmdW5jdGlvbih7aWQ6dCxpY29uOmUsaW46cix0aXRsZTpuLGljb25UZXh0Oml9KXtpZih2ci5yZWNvcmRzLnJlZ2lzdGVyZWRJZHNbdF0hPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBUaGUgc2VydmljZSBpZCBbJHt0fV0gaXMgYWxyZWFkeSBpbiB1c2UgYnkgYW5vdGhlciAke3ZyLnJlY29yZHMucmVnaXN0ZXJlZElkc1t0XX1gKTtpZihyIT09dm9pZCAwKXtpZih0PT09cil0aHJvdyBuZXcgRXJyb3IoYFRoZSBzZXJ2aWNlIFske3R9XSBjYW5ub3QgYmUgcGxhY2VkIHdpdGhpbiBpdHNlbGZgKTtpZih2ci5yZWNvcmRzLnJlZ2lzdGVyZWRJZHNbcl09PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBUaGUgc2VydmljZSBbJHt0fV0ncyBwYXJlbnQgZG9lcyBub3QgZXhpc3QuIFBsZWFzZSBtYWtlIHN1cmUgdGhlIHBhcmVudCBpcyBjcmVhdGVkIGJlZm9yZSB0aGlzIHNlcnZpY2VgKTtpZih2ci5yZWNvcmRzLnJlZ2lzdGVyZWRJZHNbcl09PT0ibm9kZSIpdGhyb3cgbmV3IEVycm9yKGBUaGUgc2VydmljZSBbJHt0fV0ncyBwYXJlbnQgaXMgbm90IGEgZ3JvdXBgKX12ci5yZWNvcmRzLnJlZ2lzdGVyZWRJZHNbdF09Im5vZGUiLHZyLnJlY29yZHMubm9kZXNbdF09e2lkOnQsdHlwZToic2VydmljZSIsaWNvbjplLGljb25UZXh0OmksdGl0bGU6bixlZGdlczpbXSxpbjpyfX0sImFkZFNlcnZpY2UiKSxSbnQ9bygoKT0+T2JqZWN0LnZhbHVlcyh2ci5yZWNvcmRzLm5vZGVzKS5maWx0ZXIoJDJlKSwiZ2V0U2VydmljZXMiKSxObnQ9byhmdW5jdGlvbih7aWQ6dCxpbjplfSl7dnIucmVjb3Jkcy5yZWdpc3RlcmVkSWRzW3RdPSJub2RlIix2ci5yZWNvcmRzLm5vZGVzW3RdPXtpZDp0LHR5cGU6Imp1bmN0aW9uIixlZGdlczpbXSxpbjplfX0sImFkZEp1bmN0aW9uIiksTW50PW8oKCk9Pk9iamVjdC52YWx1ZXModnIucmVjb3Jkcy5ub2RlcykuZmlsdGVyKHoyZSksImdldEp1bmN0aW9ucyIpLEludD1vKCgpPT5PYmplY3QudmFsdWVzKHZyLnJlY29yZHMubm9kZXMpLCJnZXROb2RlcyIpLGpGPW8odD0+dnIucmVjb3Jkcy5ub2Rlc1t0XSwiZ2V0Tm9kZSIpLE9udD1vKGZ1bmN0aW9uKHtpZDp0LGljb246ZSxpbjpyLHRpdGxlOm59KXtpZih2ci5yZWNvcmRzLnJlZ2lzdGVyZWRJZHNbdF0hPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBUaGUgZ3JvdXAgaWQgWyR7dH1dIGlzIGFscmVhZHkgaW4gdXNlIGJ5IGFub3RoZXIgJHt2ci5yZWNvcmRzLnJlZ2lzdGVyZWRJZHNbdF19YCk7aWYociE9PXZvaWQgMCl7aWYodD09PXIpdGhyb3cgbmV3IEVycm9yKGBUaGUgZ3JvdXAgWyR7dH1dIGNhbm5vdCBiZSBwbGFjZWQgd2l0aGluIGl0c2VsZmApO2lmKHZyLnJlY29yZHMucmVnaXN0ZXJlZElkc1tyXT09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYFRoZSBncm91cCBbJHt0fV0ncyBwYXJlbnQgZG9lcyBub3QgZXhpc3QuIFBsZWFzZSBtYWtlIHN1cmUgdGhlIHBhcmVudCBpcyBjcmVhdGVkIGJlZm9yZSB0aGlzIGdyb3VwYCk7aWYodnIucmVjb3Jkcy5yZWdpc3RlcmVkSWRzW3JdPT09Im5vZGUiKXRocm93IG5ldyBFcnJvcihgVGhlIGdyb3VwIFske3R9XSdzIHBhcmVudCBpcyBub3QgYSBncm91cGApfXZyLnJlY29yZHMucmVnaXN0ZXJlZElkc1t0XT0iZ3JvdXAiLHZyLnJlY29yZHMuZ3JvdXBzW3RdPXtpZDp0LGljb246ZSx0aXRsZTpuLGluOnJ9fSwiYWRkR3JvdXAiKSxQbnQ9bygoKT0+T2JqZWN0LnZhbHVlcyh2ci5yZWNvcmRzLmdyb3VwcyksImdldEdyb3VwcyIpLEJudD1vKGZ1bmN0aW9uKHtsaHNJZDp0LHJoc0lkOmUsbGhzRGlyOnIscmhzRGlyOm4sbGhzSW50bzppLHJoc0ludG86YSxsaHNHcm91cDpzLHJoc0dyb3VwOmwsdGl0bGU6dX0pe2lmKCFYRihyKSl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGlyZWN0aW9uIGdpdmVuIGZvciBsZWZ0IGhhbmQgc2lkZSBvZiBlZGdlICR7dH0tLSR7ZX0uIEV4cGVjdGVkIChMLFIsVCxCKSBnb3QgJHtyfWApO2lmKCFYRihuKSl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGlyZWN0aW9uIGdpdmVuIGZvciByaWdodCBoYW5kIHNpZGUgb2YgZWRnZSAke3R9LS0ke2V9LiBFeHBlY3RlZCAoTCxSLFQsQikgZ290ICR7bn1gKTtpZih2ci5yZWNvcmRzLm5vZGVzW3RdPT09dm9pZCAwJiZ2ci5yZWNvcmRzLmdyb3Vwc1t0XT09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYFRoZSBsZWZ0LWhhbmQgaWQgWyR7dH1dIGRvZXMgbm90IHlldCBleGlzdC4gUGxlYXNlIGNyZWF0ZSB0aGUgc2VydmljZS9ncm91cCBiZWZvcmUgZGVjbGFyaW5nIGFuIGVkZ2UgdG8gaXQuYCk7aWYodnIucmVjb3Jkcy5ub2Rlc1tlXT09PXZvaWQgMCYmdnIucmVjb3Jkcy5ncm91cHNbdF09PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBUaGUgcmlnaHQtaGFuZCBpZCBbJHtlfV0gZG9lcyBub3QgeWV0IGV4aXN0LiBQbGVhc2UgY3JlYXRlIHRoZSBzZXJ2aWNlL2dyb3VwIGJlZm9yZSBkZWNsYXJpbmcgYW4gZWRnZSB0byBpdC5gKTtsZXQgaD12ci5yZWNvcmRzLm5vZGVzW3RdLmluLGY9dnIucmVjb3Jkcy5ub2Rlc1tlXS5pbjtpZihzJiZoJiZmJiZoPT1mKXRocm93IG5ldyBFcnJvcihgVGhlIGxlZnQtaGFuZCBpZCBbJHt0fV0gaXMgbW9kaWZpZWQgdG8gdHJhdmVyc2UgdGhlIGdyb3VwIGJvdW5kYXJ5LCBidXQgdGhlIGVkZ2UgZG9lcyBub3QgcGFzcyB0aHJvdWdoIHR3byBncm91cHMuYCk7aWYobCYmaCYmZiYmaD09Zil0aHJvdyBuZXcgRXJyb3IoYFRoZSByaWdodC1oYW5kIGlkIFske2V9XSBpcyBtb2RpZmllZCB0byB0cmF2ZXJzZSB0aGUgZ3JvdXAgYm91bmRhcnksIGJ1dCB0aGUgZWRnZSBkb2VzIG5vdCBwYXNzIHRocm91Z2ggdHdvIGdyb3Vwcy5gKTtsZXQgZD17bGhzSWQ6dCxsaHNEaXI6cixsaHNJbnRvOmksbGhzR3JvdXA6cyxyaHNJZDplLHJoc0RpcjpuLHJoc0ludG86YSxyaHNHcm91cDpsLHRpdGxlOnV9O3ZyLnJlY29yZHMuZWRnZXMucHVzaChkKSx2ci5yZWNvcmRzLm5vZGVzW3RdJiZ2ci5yZWNvcmRzLm5vZGVzW2VdJiYodnIucmVjb3Jkcy5ub2Rlc1t0XS5lZGdlcy5wdXNoKHZyLnJlY29yZHMuZWRnZXNbdnIucmVjb3Jkcy5lZGdlcy5sZW5ndGgtMV0pLHZyLnJlY29yZHMubm9kZXNbZV0uZWRnZXMucHVzaCh2ci5yZWNvcmRzLmVkZ2VzW3ZyLnJlY29yZHMuZWRnZXMubGVuZ3RoLTFdKSl9LCJhZGRFZGdlIiksRm50PW8oKCk9PnZyLnJlY29yZHMuZWRnZXMsImdldEVkZ2VzIiksJG50PW8oKCk9PntpZih2ci5yZWNvcmRzLmRhdGFTdHJ1Y3R1cmVzPT09dm9pZCAwKXtsZXQgdD17fSxlPU9iamVjdC5lbnRyaWVzKHZyLnJlY29yZHMubm9kZXMpLnJlZHVjZSgobCxbdSxoXSk9PihsW3VdPWguZWRnZXMucmVkdWNlKChmLGQpPT57bGV0IHA9akYoZC5saHNJZCk/LmluLG09akYoZC5yaHNJZCk/LmluO2lmKHAmJm0mJnAhPT1tKXtsZXQgZz1GMmUoZC5saHNEaXIsZC5yaHNEaXIpO2chPT0iYmVuZCImJih0W3BdPz89e30sdFtwXVttXT1nLHRbbV0/Pz17fSx0W21dW3BdPWcpfWlmKGQubGhzSWQ9PT11KXtsZXQgZz1SNChkLmxoc0RpcixkLnJoc0Rpcik7ZyYmKGZbZ109ZC5yaHNJZCl9ZWxzZXtsZXQgZz1SNChkLnJoc0RpcixkLmxoc0Rpcik7ZyYmKGZbZ109ZC5saHNJZCl9cmV0dXJuIGZ9LHt9KSxsKSx7fSkscj1PYmplY3Qua2V5cyhlKVswXSxuPXtbcl06MX0saT1PYmplY3Qua2V5cyhlKS5yZWR1Y2UoKGwsdSk9PnU9PT1yP2w6ey4uLmwsW3VdOjF9LHt9KSxhPW8obD0+e2xldCB1PXtbbF06WzAsMF19LGg9W2xdO2Zvcig7aC5sZW5ndGg+MDspe2xldCBmPWguc2hpZnQoKTtpZihmKXtuW2ZdPTEsZGVsZXRlIGlbZl07bGV0IGQ9ZVtmXSxbcCxtXT11W2ZdO09iamVjdC5lbnRyaWVzKGQpLmZvckVhY2goKFtnLHldKT0+e25beV18fCh1W3ldPVAyZShbcCxtXSxnKSxoLnB1c2goeSkpfSl9fXJldHVybiB1fSwiQkZTIikscz1bYShyKV07Zm9yKDtPYmplY3Qua2V5cyhpKS5sZW5ndGg+MDspcy5wdXNoKGEoT2JqZWN0LmtleXMoaSlbMF0pKTt2ci5yZWNvcmRzLmRhdGFTdHJ1Y3R1cmVzPXthZGpMaXN0OmUsc3BhdGlhbE1hcHM6cyxncm91cEFsaWdubWVudHM6dH19cmV0dXJuIHZyLnJlY29yZHMuZGF0YVN0cnVjdHVyZXN9LCJnZXREYXRhU3RydWN0dXJlcyIpLHpudD1vKCh0LGUpPT57dnIucmVjb3Jkcy5lbGVtZW50c1t0XT1lfSwic2V0RWxlbWVudEZvcklkIiksR250PW8odD0+dnIucmVjb3Jkcy5lbGVtZW50c1t0XSwiZ2V0RWxlbWVudEJ5SWQiKSxWMmU9bygoKT0+JG4oey4uLkcyZSwuLi50cigpLmFyY2hpdGVjdHVyZX0pLCJnZXRDb25maWciKSxvMD17Y2xlYXI6RG50LHNldERpYWdyYW1UaXRsZTpPcixnZXREaWFncmFtVGl0bGU6TnIsc2V0QWNjVGl0bGU6QXIsZ2V0QWNjVGl0bGU6RHIsc2V0QWNjRGVzY3JpcHRpb246THIsZ2V0QWNjRGVzY3JpcHRpb246UnIsZ2V0Q29uZmlnOlYyZSxhZGRTZXJ2aWNlOkxudCxnZXRTZXJ2aWNlczpSbnQsYWRkSnVuY3Rpb246Tm50LGdldEp1bmN0aW9uczpNbnQsZ2V0Tm9kZXM6SW50LGdldE5vZGU6akYsYWRkR3JvdXA6T250LGdldEdyb3VwczpQbnQsYWRkRWRnZTpCbnQsZ2V0RWRnZXM6Rm50LHNldEVsZW1lbnRGb3JJZDp6bnQsZ2V0RWxlbWVudEJ5SWQ6R250LGdldERhdGFTdHJ1Y3R1cmVzOiRudH07byhNaSwiZ2V0Q29uZmlnRmllbGQiKX0pO3ZhciBWbnQsVTJlLEgyZT1OKCgpPT57InVzZSBzdHJpY3QiO2JmKCk7eXQoKTtNcCgpO040KCk7Vm50PW8oKHQsZSk9PntKbyh0LGUpLHQuZ3JvdXBzLm1hcChlLmFkZEdyb3VwKSx0LnNlcnZpY2VzLm1hcChyPT5lLmFkZFNlcnZpY2Uoey4uLnIsdHlwZToic2VydmljZSJ9KSksdC5qdW5jdGlvbnMubWFwKHI9PmUuYWRkSnVuY3Rpb24oey4uLnIsdHlwZToianVuY3Rpb24ifSkpLHQuZWRnZXMubWFwKGUuYWRkRWRnZSl9LCJwb3B1bGF0ZURiIiksVTJlPXtwYXJzZTpvKGFzeW5jIHQ9PntsZXQgZT1hd2FpdCB2cygiYXJjaGl0ZWN0dXJlIix0KTtYLmRlYnVnKGUpLFZudChlLG8wKX0sInBhcnNlIil9fSk7dmFyIFVudCxXMmUscTJlPU4oKCk9PnsidXNlIHN0cmljdCI7VW50PW8odD0+YAogIC5lZGdlIHsKICAgIHN0cm9rZS13aWR0aDogJHt0LmFyY2hFZGdlV2lkdGh9OwogICAgc3Ryb2tlOiAke3QuYXJjaEVkZ2VDb2xvcn07CiAgICBmaWxsOiBub25lOwogIH0KCiAgLmFycm93IHsKICAgIGZpbGw6ICR7dC5hcmNoRWRnZUFycm93Q29sb3J9OwogIH0KCiAgLm5vZGUtYmtnIHsKICAgIGZpbGw6IG5vbmU7CiAgICBzdHJva2U6ICR7dC5hcmNoR3JvdXBCb3JkZXJDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6ICR7dC5hcmNoR3JvdXBCb3JkZXJXaWR0aH07CiAgICBzdHJva2UtZGFzaGFycmF5OiA4OwogIH0KICAubm9kZS1pY29uLXRleHQgewogICAgZGlzcGxheTogZmxleDsgCiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogIH0KICAKICAubm9kZS1pY29uLXRleHQgPiBkaXYgewogICAgY29sb3I6ICNmZmY7CiAgICBtYXJnaW46IDFweDsKICAgIGhlaWdodDogZml0LWNvbnRlbnQ7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgZGlzcGxheTogLXdlYmtpdC1ib3g7CiAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsOwogIH0KYCwiZ2V0U3R5bGVzIiksVzJlPVVudH0pO3ZhciBRRj1QaSgoTTQsS0YpPT57InVzZSBzdHJpY3QiO28oZnVuY3Rpb24oZSxyKXt0eXBlb2YgTTQ9PSJvYmplY3QiJiZ0eXBlb2YgS0Y9PSJvYmplY3QiP0tGLmV4cG9ydHM9cigpOnR5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJmRlZmluZS5hbWQ/ZGVmaW5lKFtdLHIpOnR5cGVvZiBNND09Im9iamVjdCI/TTQubGF5b3V0QmFzZT1yKCk6ZS5sYXlvdXRCYXNlPXIoKX0sIndlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIikoTTQsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9e307ZnVuY3Rpb24gcihuKXtpZihlW25dKXJldHVybiBlW25dLmV4cG9ydHM7dmFyIGk9ZVtuXT17aTpuLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIHRbbl0uY2FsbChpLmV4cG9ydHMsaSxpLmV4cG9ydHMsciksaS5sPSEwLGkuZXhwb3J0c31yZXR1cm4gbyhyLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiksci5tPXQsci5jPWUsci5pPWZ1bmN0aW9uKG4pe3JldHVybiBufSxyLmQ9ZnVuY3Rpb24obixpLGEpe3IubyhuLGkpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkobixpLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCxnZXQ6YX0pfSxyLm49ZnVuY3Rpb24obil7dmFyIGk9biYmbi5fX2VzTW9kdWxlP28oZnVuY3Rpb24oKXtyZXR1cm4gbi5kZWZhdWx0fSwiZ2V0RGVmYXVsdCIpOm8oZnVuY3Rpb24oKXtyZXR1cm4gbn0sImdldE1vZHVsZUV4cG9ydHMiKTtyZXR1cm4gci5kKGksImEiLGkpLGl9LHIubz1mdW5jdGlvbihuLGkpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixpKX0sci5wPSIiLHIoci5zPTI4KX0oW2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe31vKG4sIkxheW91dENvbnN0YW50cyIpLG4uUVVBTElUWT0xLG4uREVGQVVMVF9DUkVBVEVfQkVORFNfQVNfTkVFREVEPSExLG4uREVGQVVMVF9JTkNSRU1FTlRBTD0hMSxuLkRFRkFVTFRfQU5JTUFUSU9OX09OX0xBWU9VVD0hMCxuLkRFRkFVTFRfQU5JTUFUSU9OX0RVUklOR19MQVlPVVQ9ITEsbi5ERUZBVUxUX0FOSU1BVElPTl9QRVJJT0Q9NTAsbi5ERUZBVUxUX1VOSUZPUk1fTEVBRl9OT0RFX1NJWkVTPSExLG4uREVGQVVMVF9HUkFQSF9NQVJHSU49MTUsbi5OT0RFX0RJTUVOU0lPTlNfSU5DTFVERV9MQUJFTFM9ITEsbi5TSU1QTEVfTk9ERV9TSVpFPTQwLG4uU0lNUExFX05PREVfSEFMRl9TSVpFPW4uU0lNUExFX05PREVfU0laRS8yLG4uRU1QVFlfQ09NUE9VTkRfTk9ERV9TSVpFPTQwLG4uTUlOX0VER0VfTEVOR1RIPTEsbi5XT1JMRF9CT1VOREFSWT0xZTYsbi5JTklUSUFMX1dPUkxEX0JPVU5EQVJZPW4uV09STERfQk9VTkRBUlkvMWUzLG4uV09STERfQ0VOVEVSX1g9MTIwMCxuLldPUkxEX0NFTlRFUl9ZPTkwMCx0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDIpLGk9cig4KSxhPXIoOSk7ZnVuY3Rpb24gcyh1LGgsZil7bi5jYWxsKHRoaXMsZiksdGhpcy5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXQ9ITEsdGhpcy52R3JhcGhPYmplY3Q9Zix0aGlzLmJlbmRwb2ludHM9W10sdGhpcy5zb3VyY2U9dSx0aGlzLnRhcmdldD1ofW8ocywiTEVkZ2UiKSxzLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKTtmb3IodmFyIGwgaW4gbilzW2xdPW5bbF07cy5wcm90b3R5cGUuZ2V0U291cmNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc291cmNlfSxzLnByb3RvdHlwZS5nZXRUYXJnZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50YXJnZXR9LHMucHJvdG90eXBlLmlzSW50ZXJHcmFwaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW50ZXJHcmFwaH0scy5wcm90b3R5cGUuZ2V0TGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSxzLnByb3RvdHlwZS5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXR9LHMucHJvdG90eXBlLmdldEJlbmRwb2ludHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iZW5kcG9pbnRzfSxzLnByb3RvdHlwZS5nZXRMY2E9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sY2F9LHMucHJvdG90eXBlLmdldFNvdXJjZUluTGNhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc291cmNlSW5MY2F9LHMucHJvdG90eXBlLmdldFRhcmdldEluTGNhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGFyZ2V0SW5MY2F9LHMucHJvdG90eXBlLmdldE90aGVyRW5kPWZ1bmN0aW9uKHUpe2lmKHRoaXMuc291cmNlPT09dSlyZXR1cm4gdGhpcy50YXJnZXQ7aWYodGhpcy50YXJnZXQ9PT11KXJldHVybiB0aGlzLnNvdXJjZTt0aHJvdyJOb2RlIGlzIG5vdCBpbmNpZGVudCB3aXRoIHRoaXMgZWRnZSJ9LHMucHJvdG90eXBlLmdldE90aGVyRW5kSW5HcmFwaD1mdW5jdGlvbih1LGgpe2Zvcih2YXIgZj10aGlzLmdldE90aGVyRW5kKHUpLGQ9aC5nZXRHcmFwaE1hbmFnZXIoKS5nZXRSb290KCk7Oyl7aWYoZi5nZXRPd25lcigpPT1oKXJldHVybiBmO2lmKGYuZ2V0T3duZXIoKT09ZClicmVhaztmPWYuZ2V0T3duZXIoKS5nZXRQYXJlbnQoKX1yZXR1cm4gbnVsbH0scy5wcm90b3R5cGUudXBkYXRlTGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIHU9bmV3IEFycmF5KDQpO3RoaXMuaXNPdmVybGFwaW5nU291cmNlQW5kVGFyZ2V0PWkuZ2V0SW50ZXJzZWN0aW9uKHRoaXMudGFyZ2V0LmdldFJlY3QoKSx0aGlzLnNvdXJjZS5nZXRSZWN0KCksdSksdGhpcy5pc092ZXJsYXBpbmdTb3VyY2VBbmRUYXJnZXR8fCh0aGlzLmxlbmd0aFg9dVswXS11WzJdLHRoaXMubGVuZ3RoWT11WzFdLXVbM10sTWF0aC5hYnModGhpcy5sZW5ndGhYKTwxJiYodGhpcy5sZW5ndGhYPWEuc2lnbih0aGlzLmxlbmd0aFgpKSxNYXRoLmFicyh0aGlzLmxlbmd0aFkpPDEmJih0aGlzLmxlbmd0aFk9YS5zaWduKHRoaXMubGVuZ3RoWSkpLHRoaXMubGVuZ3RoPU1hdGguc3FydCh0aGlzLmxlbmd0aFgqdGhpcy5sZW5ndGhYK3RoaXMubGVuZ3RoWSp0aGlzLmxlbmd0aFkpKX0scy5wcm90b3R5cGUudXBkYXRlTGVuZ3RoU2ltcGxlPWZ1bmN0aW9uKCl7dGhpcy5sZW5ndGhYPXRoaXMudGFyZ2V0LmdldENlbnRlclgoKS10aGlzLnNvdXJjZS5nZXRDZW50ZXJYKCksdGhpcy5sZW5ndGhZPXRoaXMudGFyZ2V0LmdldENlbnRlclkoKS10aGlzLnNvdXJjZS5nZXRDZW50ZXJZKCksTWF0aC5hYnModGhpcy5sZW5ndGhYKTwxJiYodGhpcy5sZW5ndGhYPWEuc2lnbih0aGlzLmxlbmd0aFgpKSxNYXRoLmFicyh0aGlzLmxlbmd0aFkpPDEmJih0aGlzLmxlbmd0aFk9YS5zaWduKHRoaXMubGVuZ3RoWSkpLHRoaXMubGVuZ3RoPU1hdGguc3FydCh0aGlzLmxlbmd0aFgqdGhpcy5sZW5ndGhYK3RoaXMubGVuZ3RoWSp0aGlzLmxlbmd0aFkpfSx0LmV4cG9ydHM9c30sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGkpe3RoaXMudkdyYXBoT2JqZWN0PWl9byhuLCJMR3JhcGhPYmplY3QiKSx0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDIpLGk9cigxMCksYT1yKDEzKSxzPXIoMCksbD1yKDE2KSx1PXIoNSk7ZnVuY3Rpb24gaChkLHAsbSxnKXttPT1udWxsJiZnPT1udWxsJiYoZz1wKSxuLmNhbGwodGhpcyxnKSxkLmdyYXBoTWFuYWdlciE9bnVsbCYmKGQ9ZC5ncmFwaE1hbmFnZXIpLHRoaXMuZXN0aW1hdGVkU2l6ZT1pLk1JTl9WQUxVRSx0aGlzLmluY2x1c2lvblRyZWVEZXB0aD1pLk1BWF9WQUxVRSx0aGlzLnZHcmFwaE9iamVjdD1nLHRoaXMuZWRnZXM9W10sdGhpcy5ncmFwaE1hbmFnZXI9ZCxtIT1udWxsJiZwIT1udWxsP3RoaXMucmVjdD1uZXcgYShwLngscC55LG0ud2lkdGgsbS5oZWlnaHQpOnRoaXMucmVjdD1uZXcgYX1vKGgsIkxOb2RlIiksaC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSk7Zm9yKHZhciBmIGluIG4paFtmXT1uW2ZdO2gucHJvdG90eXBlLmdldEVkZ2VzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXN9LGgucHJvdG90eXBlLmdldENoaWxkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hpbGR9LGgucHJvdG90eXBlLmdldE93bmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJ9LGgucHJvdG90eXBlLmdldFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC53aWR0aH0saC5wcm90b3R5cGUuc2V0V2lkdGg9ZnVuY3Rpb24oZCl7dGhpcy5yZWN0LndpZHRoPWR9LGgucHJvdG90eXBlLmdldEhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3QuaGVpZ2h0fSxoLnByb3RvdHlwZS5zZXRIZWlnaHQ9ZnVuY3Rpb24oZCl7dGhpcy5yZWN0LmhlaWdodD1kfSxoLnByb3RvdHlwZS5nZXRDZW50ZXJYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC54K3RoaXMucmVjdC53aWR0aC8yfSxoLnByb3RvdHlwZS5nZXRDZW50ZXJZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC55K3RoaXMucmVjdC5oZWlnaHQvMn0saC5wcm90b3R5cGUuZ2V0Q2VudGVyPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB1KHRoaXMucmVjdC54K3RoaXMucmVjdC53aWR0aC8yLHRoaXMucmVjdC55K3RoaXMucmVjdC5oZWlnaHQvMil9LGgucHJvdG90eXBlLmdldExvY2F0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB1KHRoaXMucmVjdC54LHRoaXMucmVjdC55KX0saC5wcm90b3R5cGUuZ2V0UmVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3R9LGgucHJvdG90eXBlLmdldERpYWdvbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLnJlY3Qud2lkdGgqdGhpcy5yZWN0LndpZHRoK3RoaXMucmVjdC5oZWlnaHQqdGhpcy5yZWN0LmhlaWdodCl9LGgucHJvdG90eXBlLmdldEhhbGZUaGVEaWFnb25hbD1mdW5jdGlvbigpe3JldHVybiBNYXRoLnNxcnQodGhpcy5yZWN0LmhlaWdodCp0aGlzLnJlY3QuaGVpZ2h0K3RoaXMucmVjdC53aWR0aCp0aGlzLnJlY3Qud2lkdGgpLzJ9LGgucHJvdG90eXBlLnNldFJlY3Q9ZnVuY3Rpb24oZCxwKXt0aGlzLnJlY3QueD1kLngsdGhpcy5yZWN0Lnk9ZC55LHRoaXMucmVjdC53aWR0aD1wLndpZHRoLHRoaXMucmVjdC5oZWlnaHQ9cC5oZWlnaHR9LGgucHJvdG90eXBlLnNldENlbnRlcj1mdW5jdGlvbihkLHApe3RoaXMucmVjdC54PWQtdGhpcy5yZWN0LndpZHRoLzIsdGhpcy5yZWN0Lnk9cC10aGlzLnJlY3QuaGVpZ2h0LzJ9LGgucHJvdG90eXBlLnNldExvY2F0aW9uPWZ1bmN0aW9uKGQscCl7dGhpcy5yZWN0Lng9ZCx0aGlzLnJlY3QueT1wfSxoLnByb3RvdHlwZS5tb3ZlQnk9ZnVuY3Rpb24oZCxwKXt0aGlzLnJlY3QueCs9ZCx0aGlzLnJlY3QueSs9cH0saC5wcm90b3R5cGUuZ2V0RWRnZUxpc3RUb05vZGU9ZnVuY3Rpb24oZCl7dmFyIHA9W10sbSxnPXRoaXM7cmV0dXJuIGcuZWRnZXMuZm9yRWFjaChmdW5jdGlvbih5KXtpZih5LnRhcmdldD09ZCl7aWYoeS5zb3VyY2UhPWcpdGhyb3ciSW5jb3JyZWN0IGVkZ2Ugc291cmNlISI7cC5wdXNoKHkpfX0pLHB9LGgucHJvdG90eXBlLmdldEVkZ2VzQmV0d2Vlbj1mdW5jdGlvbihkKXt2YXIgcD1bXSxtLGc9dGhpcztyZXR1cm4gZy5lZGdlcy5mb3JFYWNoKGZ1bmN0aW9uKHkpe2lmKCEoeS5zb3VyY2U9PWd8fHkudGFyZ2V0PT1nKSl0aHJvdyJJbmNvcnJlY3QgZWRnZSBzb3VyY2UgYW5kL29yIHRhcmdldCI7KHkudGFyZ2V0PT1kfHx5LnNvdXJjZT09ZCkmJnAucHVzaCh5KX0pLHB9LGgucHJvdG90eXBlLmdldE5laWdoYm9yc0xpc3Q9ZnVuY3Rpb24oKXt2YXIgZD1uZXcgU2V0LHA9dGhpcztyZXR1cm4gcC5lZGdlcy5mb3JFYWNoKGZ1bmN0aW9uKG0pe2lmKG0uc291cmNlPT1wKWQuYWRkKG0udGFyZ2V0KTtlbHNle2lmKG0udGFyZ2V0IT1wKXRocm93IkluY29ycmVjdCBpbmNpZGVuY3khIjtkLmFkZChtLnNvdXJjZSl9fSksZH0saC5wcm90b3R5cGUud2l0aENoaWxkcmVuPWZ1bmN0aW9uKCl7dmFyIGQ9bmV3IFNldCxwLG07aWYoZC5hZGQodGhpcyksdGhpcy5jaGlsZCE9bnVsbClmb3IodmFyIGc9dGhpcy5jaGlsZC5nZXROb2RlcygpLHk9MDt5PGcubGVuZ3RoO3krKylwPWdbeV0sbT1wLndpdGhDaGlsZHJlbigpLG0uZm9yRWFjaChmdW5jdGlvbih2KXtkLmFkZCh2KX0pO3JldHVybiBkfSxoLnByb3RvdHlwZS5nZXROb09mQ2hpbGRyZW49ZnVuY3Rpb24oKXt2YXIgZD0wLHA7aWYodGhpcy5jaGlsZD09bnVsbClkPTE7ZWxzZSBmb3IodmFyIG09dGhpcy5jaGlsZC5nZXROb2RlcygpLGc9MDtnPG0ubGVuZ3RoO2crKylwPW1bZ10sZCs9cC5nZXROb09mQ2hpbGRyZW4oKTtyZXR1cm4gZD09MCYmKGQ9MSksZH0saC5wcm90b3R5cGUuZ2V0RXN0aW1hdGVkU2l6ZT1mdW5jdGlvbigpe2lmKHRoaXMuZXN0aW1hdGVkU2l6ZT09aS5NSU5fVkFMVUUpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7cmV0dXJuIHRoaXMuZXN0aW1hdGVkU2l6ZX0saC5wcm90b3R5cGUuY2FsY0VzdGltYXRlZFNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZD09bnVsbD90aGlzLmVzdGltYXRlZFNpemU9KHRoaXMucmVjdC53aWR0aCt0aGlzLnJlY3QuaGVpZ2h0KS8yOih0aGlzLmVzdGltYXRlZFNpemU9dGhpcy5jaGlsZC5jYWxjRXN0aW1hdGVkU2l6ZSgpLHRoaXMucmVjdC53aWR0aD10aGlzLmVzdGltYXRlZFNpemUsdGhpcy5yZWN0LmhlaWdodD10aGlzLmVzdGltYXRlZFNpemUsdGhpcy5lc3RpbWF0ZWRTaXplKX0saC5wcm90b3R5cGUuc2NhdHRlcj1mdW5jdGlvbigpe3ZhciBkLHAsbT0tcy5JTklUSUFMX1dPUkxEX0JPVU5EQVJZLGc9cy5JTklUSUFMX1dPUkxEX0JPVU5EQVJZO2Q9cy5XT1JMRF9DRU5URVJfWCtsLm5leHREb3VibGUoKSooZy1tKSttO3ZhciB5PS1zLklOSVRJQUxfV09STERfQk9VTkRBUlksdj1zLklOSVRJQUxfV09STERfQk9VTkRBUlk7cD1zLldPUkxEX0NFTlRFUl9ZK2wubmV4dERvdWJsZSgpKih2LXkpK3ksdGhpcy5yZWN0Lng9ZCx0aGlzLnJlY3QueT1wfSxoLnByb3RvdHlwZS51cGRhdGVCb3VuZHM9ZnVuY3Rpb24oKXtpZih0aGlzLmdldENoaWxkKCk9PW51bGwpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7aWYodGhpcy5nZXRDaGlsZCgpLmdldE5vZGVzKCkubGVuZ3RoIT0wKXt2YXIgZD10aGlzLmdldENoaWxkKCk7aWYoZC51cGRhdGVCb3VuZHMoITApLHRoaXMucmVjdC54PWQuZ2V0TGVmdCgpLHRoaXMucmVjdC55PWQuZ2V0VG9wKCksdGhpcy5zZXRXaWR0aChkLmdldFJpZ2h0KCktZC5nZXRMZWZ0KCkpLHRoaXMuc2V0SGVpZ2h0KGQuZ2V0Qm90dG9tKCktZC5nZXRUb3AoKSkscy5OT0RFX0RJTUVOU0lPTlNfSU5DTFVERV9MQUJFTFMpe3ZhciBwPWQuZ2V0UmlnaHQoKS1kLmdldExlZnQoKSxtPWQuZ2V0Qm90dG9tKCktZC5nZXRUb3AoKTt0aGlzLmxhYmVsV2lkdGgmJih0aGlzLmxhYmVsUG9zSG9yaXpvbnRhbD09ImxlZnQiPyh0aGlzLnJlY3QueC09dGhpcy5sYWJlbFdpZHRoLHRoaXMuc2V0V2lkdGgocCt0aGlzLmxhYmVsV2lkdGgpKTp0aGlzLmxhYmVsUG9zSG9yaXpvbnRhbD09ImNlbnRlciImJnRoaXMubGFiZWxXaWR0aD5wPyh0aGlzLnJlY3QueC09KHRoaXMubGFiZWxXaWR0aC1wKS8yLHRoaXMuc2V0V2lkdGgodGhpcy5sYWJlbFdpZHRoKSk6dGhpcy5sYWJlbFBvc0hvcml6b250YWw9PSJyaWdodCImJnRoaXMuc2V0V2lkdGgocCt0aGlzLmxhYmVsV2lkdGgpKSx0aGlzLmxhYmVsSGVpZ2h0JiYodGhpcy5sYWJlbFBvc1ZlcnRpY2FsPT0idG9wIj8odGhpcy5yZWN0LnktPXRoaXMubGFiZWxIZWlnaHQsdGhpcy5zZXRIZWlnaHQobSt0aGlzLmxhYmVsSGVpZ2h0KSk6dGhpcy5sYWJlbFBvc1ZlcnRpY2FsPT0iY2VudGVyIiYmdGhpcy5sYWJlbEhlaWdodD5tPyh0aGlzLnJlY3QueS09KHRoaXMubGFiZWxIZWlnaHQtbSkvMix0aGlzLnNldEhlaWdodCh0aGlzLmxhYmVsSGVpZ2h0KSk6dGhpcy5sYWJlbFBvc1ZlcnRpY2FsPT0iYm90dG9tIiYmdGhpcy5zZXRIZWlnaHQobSt0aGlzLmxhYmVsSGVpZ2h0KSl9fX0saC5wcm90b3R5cGUuZ2V0SW5jbHVzaW9uVHJlZURlcHRoPWZ1bmN0aW9uKCl7aWYodGhpcy5pbmNsdXNpb25UcmVlRGVwdGg9PWkuTUFYX1ZBTFVFKXRocm93ImFzc2VydCBmYWlsZWQiO3JldHVybiB0aGlzLmluY2x1c2lvblRyZWVEZXB0aH0saC5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGQpe3ZhciBwPXRoaXMucmVjdC54O3A+cy5XT1JMRF9CT1VOREFSWT9wPXMuV09STERfQk9VTkRBUlk6cDwtcy5XT1JMRF9CT1VOREFSWSYmKHA9LXMuV09STERfQk9VTkRBUlkpO3ZhciBtPXRoaXMucmVjdC55O20+cy5XT1JMRF9CT1VOREFSWT9tPXMuV09STERfQk9VTkRBUlk6bTwtcy5XT1JMRF9CT1VOREFSWSYmKG09LXMuV09STERfQk9VTkRBUlkpO3ZhciBnPW5ldyB1KHAsbSkseT1kLmludmVyc2VUcmFuc2Zvcm1Qb2ludChnKTt0aGlzLnNldExvY2F0aW9uKHkueCx5LnkpfSxoLnByb3RvdHlwZS5nZXRMZWZ0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC54fSxoLnByb3RvdHlwZS5nZXRSaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3QueCt0aGlzLnJlY3Qud2lkdGh9LGgucHJvdG90eXBlLmdldFRvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY3QueX0saC5wcm90b3R5cGUuZ2V0Qm90dG9tPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjdC55K3RoaXMucmVjdC5oZWlnaHR9LGgucHJvdG90eXBlLmdldFBhcmVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyPT1udWxsP251bGw6dGhpcy5vd25lci5nZXRQYXJlbnQoKX0sdC5leHBvcnRzPWh9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49cigwKTtmdW5jdGlvbiBpKCl7fW8oaSwiRkRMYXlvdXRDb25zdGFudHMiKTtmb3IodmFyIGEgaW4gbilpW2FdPW5bYV07aS5NQVhfSVRFUkFUSU9OUz0yNTAwLGkuREVGQVVMVF9FREdFX0xFTkdUSD01MCxpLkRFRkFVTFRfU1BSSU5HX1NUUkVOR1RIPS40NSxpLkRFRkFVTFRfUkVQVUxTSU9OX1NUUkVOR1RIPTQ1MDAsaS5ERUZBVUxUX0dSQVZJVFlfU1RSRU5HVEg9LjQsaS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfU1RSRU5HVEg9MSxpLkRFRkFVTFRfR1JBVklUWV9SQU5HRV9GQUNUT1I9My44LGkuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUj0xLjUsaS5ERUZBVUxUX1VTRV9TTUFSVF9JREVBTF9FREdFX0xFTkdUSF9DQUxDVUxBVElPTj0hMCxpLkRFRkFVTFRfVVNFX1NNQVJUX1JFUFVMU0lPTl9SQU5HRV9DQUxDVUxBVElPTj0hMCxpLkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUw9LjMsaS5DT09MSU5HX0FEQVBUQVRJT05fRkFDVE9SPS4zMyxpLkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVD0xZTMsaS5BREFQVEFUSU9OX1VQUEVSX05PREVfTElNSVQ9NWUzLGkuTUFYX05PREVfRElTUExBQ0VNRU5UX0lOQ1JFTUVOVEFMPTEwMCxpLk1BWF9OT0RFX0RJU1BMQUNFTUVOVD1pLk1BWF9OT0RFX0RJU1BMQUNFTUVOVF9JTkNSRU1FTlRBTCozLGkuTUlOX1JFUFVMU0lPTl9ESVNUPWkuREVGQVVMVF9FREdFX0xFTkdUSC8xMCxpLkNPTlZFUkdFTkNFX0NIRUNLX1BFUklPRD0xMDAsaS5QRVJfTEVWRUxfSURFQUxfRURHRV9MRU5HVEhfRkFDVE9SPS4xLGkuTUlOX0VER0VfTEVOR1RIPTEsaS5HUklEX0NBTENVTEFUSU9OX0NIRUNLX1BFUklPRD0xMCx0LmV4cG9ydHM9aX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGksYSl7aT09bnVsbCYmYT09bnVsbD8odGhpcy54PTAsdGhpcy55PTApOih0aGlzLng9aSx0aGlzLnk9YSl9byhuLCJQb2ludEQiKSxuLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueH0sbi5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnl9LG4ucHJvdG90eXBlLnNldFg9ZnVuY3Rpb24oaSl7dGhpcy54PWl9LG4ucHJvdG90eXBlLnNldFk9ZnVuY3Rpb24oaSl7dGhpcy55PWl9LG4ucHJvdG90eXBlLmdldERpZmZlcmVuY2U9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyBEaW1lbnNpb25EKHRoaXMueC1pLngsdGhpcy55LWkueSl9LG4ucHJvdG90eXBlLmdldENvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcy54LHRoaXMueSl9LG4ucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbihpKXtyZXR1cm4gdGhpcy54Kz1pLndpZHRoLHRoaXMueSs9aS5oZWlnaHQsdGhpc30sdC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49cigyKSxpPXIoMTApLGE9cigwKSxzPXIoNyksbD1yKDMpLHU9cigxKSxoPXIoMTMpLGY9cigxMiksZD1yKDExKTtmdW5jdGlvbiBwKGcseSx2KXtuLmNhbGwodGhpcyx2KSx0aGlzLmVzdGltYXRlZFNpemU9aS5NSU5fVkFMVUUsdGhpcy5tYXJnaW49YS5ERUZBVUxUX0dSQVBIX01BUkdJTix0aGlzLmVkZ2VzPVtdLHRoaXMubm9kZXM9W10sdGhpcy5pc0Nvbm5lY3RlZD0hMSx0aGlzLnBhcmVudD1nLHkhPW51bGwmJnkgaW5zdGFuY2VvZiBzP3RoaXMuZ3JhcGhNYW5hZ2VyPXk6eSE9bnVsbCYmeSBpbnN0YW5jZW9mIExheW91dCYmKHRoaXMuZ3JhcGhNYW5hZ2VyPXkuZ3JhcGhNYW5hZ2VyKX1vKHAsIkxHcmFwaCIpLHAucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpO2Zvcih2YXIgbSBpbiBuKXBbbV09blttXTtwLnByb3RvdHlwZS5nZXROb2Rlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVzfSxwLnByb3RvdHlwZS5nZXRFZGdlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2VzfSxwLnByb3RvdHlwZS5nZXRHcmFwaE1hbmFnZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXJ9LHAucHJvdG90eXBlLmdldFBhcmVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudH0scC5wcm90b3R5cGUuZ2V0TGVmdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxlZnR9LHAucHJvdG90eXBlLmdldFJpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmlnaHR9LHAucHJvdG90eXBlLmdldFRvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvcH0scC5wcm90b3R5cGUuZ2V0Qm90dG9tPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYm90dG9tfSxwLnByb3RvdHlwZS5pc0Nvbm5lY3RlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzQ29ubmVjdGVkfSxwLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyx5LHYpe2lmKHk9PW51bGwmJnY9PW51bGwpe3ZhciB4PWc7aWYodGhpcy5ncmFwaE1hbmFnZXI9PW51bGwpdGhyb3ciR3JhcGggaGFzIG5vIGdyYXBoIG1nciEiO2lmKHRoaXMuZ2V0Tm9kZXMoKS5pbmRleE9mKHgpPi0xKXRocm93Ik5vZGUgYWxyZWFkeSBpbiBncmFwaCEiO3JldHVybiB4Lm93bmVyPXRoaXMsdGhpcy5nZXROb2RlcygpLnB1c2goeCkseH1lbHNle3ZhciBiPWc7aWYoISh0aGlzLmdldE5vZGVzKCkuaW5kZXhPZih5KT4tMSYmdGhpcy5nZXROb2RlcygpLmluZGV4T2Yodik+LTEpKXRocm93IlNvdXJjZSBvciB0YXJnZXQgbm90IGluIGdyYXBoISI7aWYoISh5Lm93bmVyPT12Lm93bmVyJiZ5Lm93bmVyPT10aGlzKSl0aHJvdyJCb3RoIG93bmVycyBtdXN0IGJlIHRoaXMgZ3JhcGghIjtyZXR1cm4geS5vd25lciE9di5vd25lcj9udWxsOihiLnNvdXJjZT15LGIudGFyZ2V0PXYsYi5pc0ludGVyR3JhcGg9ITEsdGhpcy5nZXRFZGdlcygpLnB1c2goYikseS5lZGdlcy5wdXNoKGIpLHYhPXkmJnYuZWRnZXMucHVzaChiKSxiKX19LHAucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihnKXt2YXIgeT1nO2lmKGcgaW5zdGFuY2VvZiBsKXtpZih5PT1udWxsKXRocm93Ik5vZGUgaXMgbnVsbCEiO2lmKCEoeS5vd25lciE9bnVsbCYmeS5vd25lcj09dGhpcykpdGhyb3ciT3duZXIgZ3JhcGggaXMgaW52YWxpZCEiO2lmKHRoaXMuZ3JhcGhNYW5hZ2VyPT1udWxsKXRocm93Ik93bmVyIGdyYXBoIG1hbmFnZXIgaXMgaW52YWxpZCEiO2Zvcih2YXIgdj15LmVkZ2VzLnNsaWNlKCkseCxiPXYubGVuZ3RoLFQ9MDtUPGI7VCsrKXg9dltUXSx4LmlzSW50ZXJHcmFwaD90aGlzLmdyYXBoTWFuYWdlci5yZW1vdmUoeCk6eC5zb3VyY2Uub3duZXIucmVtb3ZlKHgpO3ZhciBTPXRoaXMubm9kZXMuaW5kZXhPZih5KTtpZihTPT0tMSl0aHJvdyJOb2RlIG5vdCBpbiBvd25lciBub2RlIGxpc3QhIjt0aGlzLm5vZGVzLnNwbGljZShTLDEpfWVsc2UgaWYoZyBpbnN0YW5jZW9mIHUpe3ZhciB4PWc7aWYoeD09bnVsbCl0aHJvdyJFZGdlIGlzIG51bGwhIjtpZighKHguc291cmNlIT1udWxsJiZ4LnRhcmdldCE9bnVsbCkpdGhyb3ciU291cmNlIGFuZC9vciB0YXJnZXQgaXMgbnVsbCEiO2lmKCEoeC5zb3VyY2Uub3duZXIhPW51bGwmJngudGFyZ2V0Lm93bmVyIT1udWxsJiZ4LnNvdXJjZS5vd25lcj09dGhpcyYmeC50YXJnZXQub3duZXI9PXRoaXMpKXRocm93IlNvdXJjZSBhbmQvb3IgdGFyZ2V0IG93bmVyIGlzIGludmFsaWQhIjt2YXIgdz14LnNvdXJjZS5lZGdlcy5pbmRleE9mKHgpLEU9eC50YXJnZXQuZWRnZXMuaW5kZXhPZih4KTtpZighKHc+LTEmJkU+LTEpKXRocm93IlNvdXJjZSBhbmQvb3IgdGFyZ2V0IGRvZXNuJ3Qga25vdyB0aGlzIGVkZ2UhIjt4LnNvdXJjZS5lZGdlcy5zcGxpY2UodywxKSx4LnRhcmdldCE9eC5zb3VyY2UmJngudGFyZ2V0LmVkZ2VzLnNwbGljZShFLDEpO3ZhciBTPXguc291cmNlLm93bmVyLmdldEVkZ2VzKCkuaW5kZXhPZih4KTtpZihTPT0tMSl0aHJvdyJOb3QgaW4gb3duZXIncyBlZGdlIGxpc3QhIjt4LnNvdXJjZS5vd25lci5nZXRFZGdlcygpLnNwbGljZShTLDEpfX0scC5wcm90b3R5cGUudXBkYXRlTGVmdFRvcD1mdW5jdGlvbigpe2Zvcih2YXIgZz1pLk1BWF9WQUxVRSx5PWkuTUFYX1ZBTFVFLHYseCxiLFQ9dGhpcy5nZXROb2RlcygpLFM9VC5sZW5ndGgsdz0wO3c8Uzt3Kyspe3ZhciBFPVRbd107dj1FLmdldFRvcCgpLHg9RS5nZXRMZWZ0KCksZz52JiYoZz12KSx5PngmJih5PXgpfXJldHVybiBnPT1pLk1BWF9WQUxVRT9udWxsOihUWzBdLmdldFBhcmVudCgpLnBhZGRpbmdMZWZ0IT1udWxsP2I9VFswXS5nZXRQYXJlbnQoKS5wYWRkaW5nTGVmdDpiPXRoaXMubWFyZ2luLHRoaXMubGVmdD15LWIsdGhpcy50b3A9Zy1iLG5ldyBmKHRoaXMubGVmdCx0aGlzLnRvcCkpfSxwLnByb3RvdHlwZS51cGRhdGVCb3VuZHM9ZnVuY3Rpb24oZyl7Zm9yKHZhciB5PWkuTUFYX1ZBTFVFLHY9LWkuTUFYX1ZBTFVFLHg9aS5NQVhfVkFMVUUsYj0taS5NQVhfVkFMVUUsVCxTLHcsRSxfLEM9dGhpcy5ub2RlcyxEPUMubGVuZ3RoLE89MDtPPEQ7TysrKXt2YXIgUj1DW09dO2cmJlIuY2hpbGQhPW51bGwmJlIudXBkYXRlQm91bmRzKCksVD1SLmdldExlZnQoKSxTPVIuZ2V0UmlnaHQoKSx3PVIuZ2V0VG9wKCksRT1SLmdldEJvdHRvbSgpLHk+VCYmKHk9VCksdjxTJiYodj1TKSx4PncmJih4PXcpLGI8RSYmKGI9RSl9dmFyIGs9bmV3IGgoeSx4LHYteSxiLXgpO3k9PWkuTUFYX1ZBTFVFJiYodGhpcy5sZWZ0PXRoaXMucGFyZW50LmdldExlZnQoKSx0aGlzLnJpZ2h0PXRoaXMucGFyZW50LmdldFJpZ2h0KCksdGhpcy50b3A9dGhpcy5wYXJlbnQuZ2V0VG9wKCksdGhpcy5ib3R0b209dGhpcy5wYXJlbnQuZ2V0Qm90dG9tKCkpLENbMF0uZ2V0UGFyZW50KCkucGFkZGluZ0xlZnQhPW51bGw/Xz1DWzBdLmdldFBhcmVudCgpLnBhZGRpbmdMZWZ0Ol89dGhpcy5tYXJnaW4sdGhpcy5sZWZ0PWsueC1fLHRoaXMucmlnaHQ9ay54K2sud2lkdGgrXyx0aGlzLnRvcD1rLnktXyx0aGlzLmJvdHRvbT1rLnkray5oZWlnaHQrX30scC5jYWxjdWxhdGVCb3VuZHM9ZnVuY3Rpb24oZyl7Zm9yKHZhciB5PWkuTUFYX1ZBTFVFLHY9LWkuTUFYX1ZBTFVFLHg9aS5NQVhfVkFMVUUsYj0taS5NQVhfVkFMVUUsVCxTLHcsRSxfPWcubGVuZ3RoLEM9MDtDPF87QysrKXt2YXIgRD1nW0NdO1Q9RC5nZXRMZWZ0KCksUz1ELmdldFJpZ2h0KCksdz1ELmdldFRvcCgpLEU9RC5nZXRCb3R0b20oKSx5PlQmJih5PVQpLHY8UyYmKHY9UykseD53JiYoeD13KSxiPEUmJihiPUUpfXZhciBPPW5ldyBoKHkseCx2LXksYi14KTtyZXR1cm4gT30scC5wcm90b3R5cGUuZ2V0SW5jbHVzaW9uVHJlZURlcHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM9PXRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKT8xOnRoaXMucGFyZW50LmdldEluY2x1c2lvblRyZWVEZXB0aCgpfSxwLnByb3RvdHlwZS5nZXRFc3RpbWF0ZWRTaXplPWZ1bmN0aW9uKCl7aWYodGhpcy5lc3RpbWF0ZWRTaXplPT1pLk1JTl9WQUxVRSl0aHJvdyJhc3NlcnQgZmFpbGVkIjtyZXR1cm4gdGhpcy5lc3RpbWF0ZWRTaXplfSxwLnByb3RvdHlwZS5jYWxjRXN0aW1hdGVkU2l6ZT1mdW5jdGlvbigpe2Zvcih2YXIgZz0wLHk9dGhpcy5ub2Rlcyx2PXkubGVuZ3RoLHg9MDt4PHY7eCsrKXt2YXIgYj15W3hdO2crPWIuY2FsY0VzdGltYXRlZFNpemUoKX1yZXR1cm4gZz09MD90aGlzLmVzdGltYXRlZFNpemU9YS5FTVBUWV9DT01QT1VORF9OT0RFX1NJWkU6dGhpcy5lc3RpbWF0ZWRTaXplPWcvTWF0aC5zcXJ0KHRoaXMubm9kZXMubGVuZ3RoKSx0aGlzLmVzdGltYXRlZFNpemV9LHAucHJvdG90eXBlLnVwZGF0ZUNvbm5lY3RlZD1mdW5jdGlvbigpe3ZhciBnPXRoaXM7aWYodGhpcy5ub2Rlcy5sZW5ndGg9PTApe3RoaXMuaXNDb25uZWN0ZWQ9ITA7cmV0dXJufXZhciB5PW5ldyBkLHY9bmV3IFNldCx4PXRoaXMubm9kZXNbMF0sYixULFM9eC53aXRoQ2hpbGRyZW4oKTtmb3IoUy5mb3JFYWNoKGZ1bmN0aW9uKE8pe3kucHVzaChPKSx2LmFkZChPKX0pO3kubGVuZ3RoIT09MDspe3g9eS5zaGlmdCgpLGI9eC5nZXRFZGdlcygpO2Zvcih2YXIgdz1iLmxlbmd0aCxFPTA7RTx3O0UrKyl7dmFyIF89YltFXTtpZihUPV8uZ2V0T3RoZXJFbmRJbkdyYXBoKHgsdGhpcyksVCE9bnVsbCYmIXYuaGFzKFQpKXt2YXIgQz1ULndpdGhDaGlsZHJlbigpO0MuZm9yRWFjaChmdW5jdGlvbihPKXt5LnB1c2goTyksdi5hZGQoTyl9KX19fWlmKHRoaXMuaXNDb25uZWN0ZWQ9ITEsdi5zaXplPj10aGlzLm5vZGVzLmxlbmd0aCl7dmFyIEQ9MDt2LmZvckVhY2goZnVuY3Rpb24oTyl7Ty5vd25lcj09ZyYmRCsrfSksRD09dGhpcy5ub2Rlcy5sZW5ndGgmJih0aGlzLmlzQ29ubmVjdGVkPSEwKX19LHQuZXhwb3J0cz1wfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGk9cigxKTtmdW5jdGlvbiBhKHMpe249cig2KSx0aGlzLmxheW91dD1zLHRoaXMuZ3JhcGhzPVtdLHRoaXMuZWRnZXM9W119byhhLCJMR3JhcGhNYW5hZ2VyIiksYS5wcm90b3R5cGUuYWRkUm9vdD1mdW5jdGlvbigpe3ZhciBzPXRoaXMubGF5b3V0Lm5ld0dyYXBoKCksbD10aGlzLmxheW91dC5uZXdOb2RlKG51bGwpLHU9dGhpcy5hZGQocyxsKTtyZXR1cm4gdGhpcy5zZXRSb290R3JhcGgodSksdGhpcy5yb290R3JhcGh9LGEucHJvdG90eXBlLmFkZD1mdW5jdGlvbihzLGwsdSxoLGYpe2lmKHU9PW51bGwmJmg9PW51bGwmJmY9PW51bGwpe2lmKHM9PW51bGwpdGhyb3ciR3JhcGggaXMgbnVsbCEiO2lmKGw9PW51bGwpdGhyb3ciUGFyZW50IG5vZGUgaXMgbnVsbCEiO2lmKHRoaXMuZ3JhcGhzLmluZGV4T2Yocyk+LTEpdGhyb3ciR3JhcGggYWxyZWFkeSBpbiB0aGlzIGdyYXBoIG1nciEiO2lmKHRoaXMuZ3JhcGhzLnB1c2gocykscy5wYXJlbnQhPW51bGwpdGhyb3ciQWxyZWFkeSBoYXMgYSBwYXJlbnQhIjtpZihsLmNoaWxkIT1udWxsKXRocm93IkFscmVhZHkgaGFzIGEgY2hpbGQhIjtyZXR1cm4gcy5wYXJlbnQ9bCxsLmNoaWxkPXMsc31lbHNle2Y9dSxoPWwsdT1zO3ZhciBkPWguZ2V0T3duZXIoKSxwPWYuZ2V0T3duZXIoKTtpZighKGQhPW51bGwmJmQuZ2V0R3JhcGhNYW5hZ2VyKCk9PXRoaXMpKXRocm93IlNvdXJjZSBub3QgaW4gdGhpcyBncmFwaCBtZ3IhIjtpZighKHAhPW51bGwmJnAuZ2V0R3JhcGhNYW5hZ2VyKCk9PXRoaXMpKXRocm93IlRhcmdldCBub3QgaW4gdGhpcyBncmFwaCBtZ3IhIjtpZihkPT1wKXJldHVybiB1LmlzSW50ZXJHcmFwaD0hMSxkLmFkZCh1LGgsZik7aWYodS5pc0ludGVyR3JhcGg9ITAsdS5zb3VyY2U9aCx1LnRhcmdldD1mLHRoaXMuZWRnZXMuaW5kZXhPZih1KT4tMSl0aHJvdyJFZGdlIGFscmVhZHkgaW4gaW50ZXItZ3JhcGggZWRnZSBsaXN0ISI7aWYodGhpcy5lZGdlcy5wdXNoKHUpLCEodS5zb3VyY2UhPW51bGwmJnUudGFyZ2V0IT1udWxsKSl0aHJvdyJFZGdlIHNvdXJjZSBhbmQvb3IgdGFyZ2V0IGlzIG51bGwhIjtpZighKHUuc291cmNlLmVkZ2VzLmluZGV4T2YodSk9PS0xJiZ1LnRhcmdldC5lZGdlcy5pbmRleE9mKHUpPT0tMSkpdGhyb3ciRWRnZSBhbHJlYWR5IGluIHNvdXJjZSBhbmQvb3IgdGFyZ2V0IGluY2lkZW5jeSBsaXN0ISI7cmV0dXJuIHUuc291cmNlLmVkZ2VzLnB1c2godSksdS50YXJnZXQuZWRnZXMucHVzaCh1KSx1fX0sYS5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHMpe2lmKHMgaW5zdGFuY2VvZiBuKXt2YXIgbD1zO2lmKGwuZ2V0R3JhcGhNYW5hZ2VyKCkhPXRoaXMpdGhyb3ciR3JhcGggbm90IGluIHRoaXMgZ3JhcGggbWdyIjtpZighKGw9PXRoaXMucm9vdEdyYXBofHxsLnBhcmVudCE9bnVsbCYmbC5wYXJlbnQuZ3JhcGhNYW5hZ2VyPT10aGlzKSl0aHJvdyJJbnZhbGlkIHBhcmVudCBub2RlISI7dmFyIHU9W107dT11LmNvbmNhdChsLmdldEVkZ2VzKCkpO2Zvcih2YXIgaCxmPXUubGVuZ3RoLGQ9MDtkPGY7ZCsrKWg9dVtkXSxsLnJlbW92ZShoKTt2YXIgcD1bXTtwPXAuY29uY2F0KGwuZ2V0Tm9kZXMoKSk7dmFyIG07Zj1wLmxlbmd0aDtmb3IodmFyIGQ9MDtkPGY7ZCsrKW09cFtkXSxsLnJlbW92ZShtKTtsPT10aGlzLnJvb3RHcmFwaCYmdGhpcy5zZXRSb290R3JhcGgobnVsbCk7dmFyIGc9dGhpcy5ncmFwaHMuaW5kZXhPZihsKTt0aGlzLmdyYXBocy5zcGxpY2UoZywxKSxsLnBhcmVudD1udWxsfWVsc2UgaWYocyBpbnN0YW5jZW9mIGkpe2lmKGg9cyxoPT1udWxsKXRocm93IkVkZ2UgaXMgbnVsbCEiO2lmKCFoLmlzSW50ZXJHcmFwaCl0aHJvdyJOb3QgYW4gaW50ZXItZ3JhcGggZWRnZSEiO2lmKCEoaC5zb3VyY2UhPW51bGwmJmgudGFyZ2V0IT1udWxsKSl0aHJvdyJTb3VyY2UgYW5kL29yIHRhcmdldCBpcyBudWxsISI7aWYoIShoLnNvdXJjZS5lZGdlcy5pbmRleE9mKGgpIT0tMSYmaC50YXJnZXQuZWRnZXMuaW5kZXhPZihoKSE9LTEpKXRocm93IlNvdXJjZSBhbmQvb3IgdGFyZ2V0IGRvZXNuJ3Qga25vdyB0aGlzIGVkZ2UhIjt2YXIgZz1oLnNvdXJjZS5lZGdlcy5pbmRleE9mKGgpO2lmKGguc291cmNlLmVkZ2VzLnNwbGljZShnLDEpLGc9aC50YXJnZXQuZWRnZXMuaW5kZXhPZihoKSxoLnRhcmdldC5lZGdlcy5zcGxpY2UoZywxKSwhKGguc291cmNlLm93bmVyIT1udWxsJiZoLnNvdXJjZS5vd25lci5nZXRHcmFwaE1hbmFnZXIoKSE9bnVsbCkpdGhyb3ciRWRnZSBvd25lciBncmFwaCBvciBvd25lciBncmFwaCBtYW5hZ2VyIGlzIG51bGwhIjtpZihoLnNvdXJjZS5vd25lci5nZXRHcmFwaE1hbmFnZXIoKS5lZGdlcy5pbmRleE9mKGgpPT0tMSl0aHJvdyJOb3QgaW4gb3duZXIgZ3JhcGggbWFuYWdlcidzIGVkZ2UgbGlzdCEiO3ZhciBnPWguc291cmNlLm93bmVyLmdldEdyYXBoTWFuYWdlcigpLmVkZ2VzLmluZGV4T2YoaCk7aC5zb3VyY2Uub3duZXIuZ2V0R3JhcGhNYW5hZ2VyKCkuZWRnZXMuc3BsaWNlKGcsMSl9fSxhLnByb3RvdHlwZS51cGRhdGVCb3VuZHM9ZnVuY3Rpb24oKXt0aGlzLnJvb3RHcmFwaC51cGRhdGVCb3VuZHMoITApfSxhLnByb3RvdHlwZS5nZXRHcmFwaHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaHN9LGEucHJvdG90eXBlLmdldEFsbE5vZGVzPWZ1bmN0aW9uKCl7aWYodGhpcy5hbGxOb2Rlcz09bnVsbCl7Zm9yKHZhciBzPVtdLGw9dGhpcy5nZXRHcmFwaHMoKSx1PWwubGVuZ3RoLGg9MDtoPHU7aCsrKXM9cy5jb25jYXQobFtoXS5nZXROb2RlcygpKTt0aGlzLmFsbE5vZGVzPXN9cmV0dXJuIHRoaXMuYWxsTm9kZXN9LGEucHJvdG90eXBlLnJlc2V0QWxsTm9kZXM9ZnVuY3Rpb24oKXt0aGlzLmFsbE5vZGVzPW51bGx9LGEucHJvdG90eXBlLnJlc2V0QWxsRWRnZXM9ZnVuY3Rpb24oKXt0aGlzLmFsbEVkZ2VzPW51bGx9LGEucHJvdG90eXBlLnJlc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb249ZnVuY3Rpb24oKXt0aGlzLmFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPW51bGx9LGEucHJvdG90eXBlLmdldEFsbEVkZ2VzPWZ1bmN0aW9uKCl7aWYodGhpcy5hbGxFZGdlcz09bnVsbCl7Zm9yKHZhciBzPVtdLGw9dGhpcy5nZXRHcmFwaHMoKSx1PWwubGVuZ3RoLGg9MDtoPGwubGVuZ3RoO2grKylzPXMuY29uY2F0KGxbaF0uZ2V0RWRnZXMoKSk7cz1zLmNvbmNhdCh0aGlzLmVkZ2VzKSx0aGlzLmFsbEVkZ2VzPXN9cmV0dXJuIHRoaXMuYWxsRWRnZXN9LGEucHJvdG90eXBlLmdldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb259LGEucHJvdG90eXBlLnNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uPWZ1bmN0aW9uKHMpe2lmKHRoaXMuYWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24hPW51bGwpdGhyb3ciYXNzZXJ0IGZhaWxlZCI7dGhpcy5hbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbj1zfSxhLnByb3RvdHlwZS5nZXRSb290PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdEdyYXBofSxhLnByb3RvdHlwZS5zZXRSb290R3JhcGg9ZnVuY3Rpb24ocyl7aWYocy5nZXRHcmFwaE1hbmFnZXIoKSE9dGhpcyl0aHJvdyJSb290IG5vdCBpbiB0aGlzIGdyYXBoIG1nciEiO3RoaXMucm9vdEdyYXBoPXMscy5wYXJlbnQ9PW51bGwmJihzLnBhcmVudD10aGlzLmxheW91dC5uZXdOb2RlKCJSb290IG5vZGUiKSl9LGEucHJvdG90eXBlLmdldExheW91dD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxheW91dH0sYS5wcm90b3R5cGUuaXNPbmVBbmNlc3Rvck9mT3RoZXI9ZnVuY3Rpb24ocyxsKXtpZighKHMhPW51bGwmJmwhPW51bGwpKXRocm93ImFzc2VydCBmYWlsZWQiO2lmKHM9PWwpcmV0dXJuITA7dmFyIHU9cy5nZXRPd25lcigpLGg7ZG97aWYoaD11LmdldFBhcmVudCgpLGg9PW51bGwpYnJlYWs7aWYoaD09bClyZXR1cm4hMDtpZih1PWguZ2V0T3duZXIoKSx1PT1udWxsKWJyZWFrfXdoaWxlKCEwKTt1PWwuZ2V0T3duZXIoKTtkb3tpZihoPXUuZ2V0UGFyZW50KCksaD09bnVsbClicmVhaztpZihoPT1zKXJldHVybiEwO2lmKHU9aC5nZXRPd25lcigpLHU9PW51bGwpYnJlYWt9d2hpbGUoITApO3JldHVybiExfSxhLnByb3RvdHlwZS5jYWxjTG93ZXN0Q29tbW9uQW5jZXN0b3JzPWZ1bmN0aW9uKCl7Zm9yKHZhciBzLGwsdSxoLGYsZD10aGlzLmdldEFsbEVkZ2VzKCkscD1kLmxlbmd0aCxtPTA7bTxwO20rKyl7aWYocz1kW21dLGw9cy5zb3VyY2UsdT1zLnRhcmdldCxzLmxjYT1udWxsLHMuc291cmNlSW5MY2E9bCxzLnRhcmdldEluTGNhPXUsbD09dSl7cy5sY2E9bC5nZXRPd25lcigpO2NvbnRpbnVlfWZvcihoPWwuZ2V0T3duZXIoKTtzLmxjYT09bnVsbDspe2ZvcihzLnRhcmdldEluTGNhPXUsZj11LmdldE93bmVyKCk7cy5sY2E9PW51bGw7KXtpZihmPT1oKXtzLmxjYT1mO2JyZWFrfWlmKGY9PXRoaXMucm9vdEdyYXBoKWJyZWFrO2lmKHMubGNhIT1udWxsKXRocm93ImFzc2VydCBmYWlsZWQiO3MudGFyZ2V0SW5MY2E9Zi5nZXRQYXJlbnQoKSxmPXMudGFyZ2V0SW5MY2EuZ2V0T3duZXIoKX1pZihoPT10aGlzLnJvb3RHcmFwaClicmVhaztzLmxjYT09bnVsbCYmKHMuc291cmNlSW5MY2E9aC5nZXRQYXJlbnQoKSxoPXMuc291cmNlSW5MY2EuZ2V0T3duZXIoKSl9aWYocy5sY2E9PW51bGwpdGhyb3ciYXNzZXJ0IGZhaWxlZCJ9fSxhLnByb3RvdHlwZS5jYWxjTG93ZXN0Q29tbW9uQW5jZXN0b3I9ZnVuY3Rpb24ocyxsKXtpZihzPT1sKXJldHVybiBzLmdldE93bmVyKCk7dmFyIHU9cy5nZXRPd25lcigpO2Rve2lmKHU9PW51bGwpYnJlYWs7dmFyIGg9bC5nZXRPd25lcigpO2Rve2lmKGg9PW51bGwpYnJlYWs7aWYoaD09dSlyZXR1cm4gaDtoPWguZ2V0UGFyZW50KCkuZ2V0T3duZXIoKX13aGlsZSghMCk7dT11LmdldFBhcmVudCgpLmdldE93bmVyKCl9d2hpbGUoITApO3JldHVybiB1fSxhLnByb3RvdHlwZS5jYWxjSW5jbHVzaW9uVHJlZURlcHRocz1mdW5jdGlvbihzLGwpe3M9PW51bGwmJmw9PW51bGwmJihzPXRoaXMucm9vdEdyYXBoLGw9MSk7Zm9yKHZhciB1LGg9cy5nZXROb2RlcygpLGY9aC5sZW5ndGgsZD0wO2Q8ZjtkKyspdT1oW2RdLHUuaW5jbHVzaW9uVHJlZURlcHRoPWwsdS5jaGlsZCE9bnVsbCYmdGhpcy5jYWxjSW5jbHVzaW9uVHJlZURlcHRocyh1LmNoaWxkLGwrMSl9LGEucHJvdG90eXBlLmluY2x1ZGVzSW52YWxpZEVkZ2U9ZnVuY3Rpb24oKXtmb3IodmFyIHMsbD1bXSx1PXRoaXMuZWRnZXMubGVuZ3RoLGg9MDtoPHU7aCsrKXM9dGhpcy5lZGdlc1toXSx0aGlzLmlzT25lQW5jZXN0b3JPZk90aGVyKHMuc291cmNlLHMudGFyZ2V0KSYmbC5wdXNoKHMpO2Zvcih2YXIgaD0wO2g8bC5sZW5ndGg7aCsrKXRoaXMucmVtb3ZlKGxbaF0pO3JldHVybiExfSx0LmV4cG9ydHM9YX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDEyKTtmdW5jdGlvbiBpKCl7fW8oaSwiSUdlb21ldHJ5IiksaS5jYWxjU2VwYXJhdGlvbkFtb3VudD1mdW5jdGlvbihhLHMsbCx1KXtpZighYS5pbnRlcnNlY3RzKHMpKXRocm93ImFzc2VydCBmYWlsZWQiO3ZhciBoPW5ldyBBcnJheSgyKTt0aGlzLmRlY2lkZURpcmVjdGlvbnNGb3JPdmVybGFwcGluZ05vZGVzKGEscyxoKSxsWzBdPU1hdGgubWluKGEuZ2V0UmlnaHQoKSxzLmdldFJpZ2h0KCkpLU1hdGgubWF4KGEueCxzLngpLGxbMV09TWF0aC5taW4oYS5nZXRCb3R0b20oKSxzLmdldEJvdHRvbSgpKS1NYXRoLm1heChhLnkscy55KSxhLmdldFgoKTw9cy5nZXRYKCkmJmEuZ2V0UmlnaHQoKT49cy5nZXRSaWdodCgpP2xbMF0rPU1hdGgubWluKHMuZ2V0WCgpLWEuZ2V0WCgpLGEuZ2V0UmlnaHQoKS1zLmdldFJpZ2h0KCkpOnMuZ2V0WCgpPD1hLmdldFgoKSYmcy5nZXRSaWdodCgpPj1hLmdldFJpZ2h0KCkmJihsWzBdKz1NYXRoLm1pbihhLmdldFgoKS1zLmdldFgoKSxzLmdldFJpZ2h0KCktYS5nZXRSaWdodCgpKSksYS5nZXRZKCk8PXMuZ2V0WSgpJiZhLmdldEJvdHRvbSgpPj1zLmdldEJvdHRvbSgpP2xbMV0rPU1hdGgubWluKHMuZ2V0WSgpLWEuZ2V0WSgpLGEuZ2V0Qm90dG9tKCktcy5nZXRCb3R0b20oKSk6cy5nZXRZKCk8PWEuZ2V0WSgpJiZzLmdldEJvdHRvbSgpPj1hLmdldEJvdHRvbSgpJiYobFsxXSs9TWF0aC5taW4oYS5nZXRZKCktcy5nZXRZKCkscy5nZXRCb3R0b20oKS1hLmdldEJvdHRvbSgpKSk7dmFyIGY9TWF0aC5hYnMoKHMuZ2V0Q2VudGVyWSgpLWEuZ2V0Q2VudGVyWSgpKS8ocy5nZXRDZW50ZXJYKCktYS5nZXRDZW50ZXJYKCkpKTtzLmdldENlbnRlclkoKT09PWEuZ2V0Q2VudGVyWSgpJiZzLmdldENlbnRlclgoKT09PWEuZ2V0Q2VudGVyWCgpJiYoZj0xKTt2YXIgZD1mKmxbMF0scD1sWzFdL2Y7bFswXTxwP3A9bFswXTpkPWxbMV0sbFswXT0tMSpoWzBdKihwLzIrdSksbFsxXT0tMSpoWzFdKihkLzIrdSl9LGkuZGVjaWRlRGlyZWN0aW9uc0Zvck92ZXJsYXBwaW5nTm9kZXM9ZnVuY3Rpb24oYSxzLGwpe2EuZ2V0Q2VudGVyWCgpPHMuZ2V0Q2VudGVyWCgpP2xbMF09LTE6bFswXT0xLGEuZ2V0Q2VudGVyWSgpPHMuZ2V0Q2VudGVyWSgpP2xbMV09LTE6bFsxXT0xfSxpLmdldEludGVyc2VjdGlvbjI9ZnVuY3Rpb24oYSxzLGwpe3ZhciB1PWEuZ2V0Q2VudGVyWCgpLGg9YS5nZXRDZW50ZXJZKCksZj1zLmdldENlbnRlclgoKSxkPXMuZ2V0Q2VudGVyWSgpO2lmKGEuaW50ZXJzZWN0cyhzKSlyZXR1cm4gbFswXT11LGxbMV09aCxsWzJdPWYsbFszXT1kLCEwO3ZhciBwPWEuZ2V0WCgpLG09YS5nZXRZKCksZz1hLmdldFJpZ2h0KCkseT1hLmdldFgoKSx2PWEuZ2V0Qm90dG9tKCkseD1hLmdldFJpZ2h0KCksYj1hLmdldFdpZHRoSGFsZigpLFQ9YS5nZXRIZWlnaHRIYWxmKCksUz1zLmdldFgoKSx3PXMuZ2V0WSgpLEU9cy5nZXRSaWdodCgpLF89cy5nZXRYKCksQz1zLmdldEJvdHRvbSgpLEQ9cy5nZXRSaWdodCgpLE89cy5nZXRXaWR0aEhhbGYoKSxSPXMuZ2V0SGVpZ2h0SGFsZigpLGs9ITEsTD0hMTtpZih1PT09Zil7aWYoaD5kKXJldHVybiBsWzBdPXUsbFsxXT1tLGxbMl09ZixsWzNdPUMsITE7aWYoaDxkKXJldHVybiBsWzBdPXUsbFsxXT12LGxbMl09ZixsWzNdPXcsITF9ZWxzZSBpZihoPT09ZCl7aWYodT5mKXJldHVybiBsWzBdPXAsbFsxXT1oLGxbMl09RSxsWzNdPWQsITE7aWYodTxmKXJldHVybiBsWzBdPWcsbFsxXT1oLGxbMl09UyxsWzNdPWQsITF9ZWxzZXt2YXIgQT1hLmhlaWdodC9hLndpZHRoLEk9cy5oZWlnaHQvcy53aWR0aCxNPShkLWgpLyhmLXUpLFA9dm9pZCAwLEI9dm9pZCAwLEY9dm9pZCAwLHo9dm9pZCAwLCQ9dm9pZCAwLFU9dm9pZCAwO2lmKC1BPT09TT91PmY/KGxbMF09eSxsWzFdPXYsaz0hMCk6KGxbMF09ZyxsWzFdPW0saz0hMCk6QT09PU0mJih1PmY/KGxbMF09cCxsWzFdPW0saz0hMCk6KGxbMF09eCxsWzFdPXYsaz0hMCkpLC1JPT09TT9mPnU/KGxbMl09XyxsWzNdPUMsTD0hMCk6KGxbMl09RSxsWzNdPXcsTD0hMCk6ST09PU0mJihmPnU/KGxbMl09UyxsWzNdPXcsTD0hMCk6KGxbMl09RCxsWzNdPUMsTD0hMCkpLGsmJkwpcmV0dXJuITE7aWYodT5mP2g+ZD8oUD10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKEEsTSw0KSxCPXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oSSxNLDIpKTooUD10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKC1BLE0sMyksQj10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKC1JLE0sMSkpOmg+ZD8oUD10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKC1BLE0sMSksQj10aGlzLmdldENhcmRpbmFsRGlyZWN0aW9uKC1JLE0sMykpOihQPXRoaXMuZ2V0Q2FyZGluYWxEaXJlY3Rpb24oQSxNLDIpLEI9dGhpcy5nZXRDYXJkaW5hbERpcmVjdGlvbihJLE0sNCkpLCFrKXN3aXRjaChQKXtjYXNlIDE6ej1tLEY9dSstVC9NLGxbMF09RixsWzFdPXo7YnJlYWs7Y2FzZSAyOkY9eCx6PWgrYipNLGxbMF09RixsWzFdPXo7YnJlYWs7Y2FzZSAzOno9dixGPXUrVC9NLGxbMF09RixsWzFdPXo7YnJlYWs7Y2FzZSA0OkY9eSx6PWgrLWIqTSxsWzBdPUYsbFsxXT16O2JyZWFrfWlmKCFMKXN3aXRjaChCKXtjYXNlIDE6VT13LCQ9ZistUi9NLGxbMl09JCxsWzNdPVU7YnJlYWs7Y2FzZSAyOiQ9RCxVPWQrTypNLGxbMl09JCxsWzNdPVU7YnJlYWs7Y2FzZSAzOlU9QywkPWYrUi9NLGxbMl09JCxsWzNdPVU7YnJlYWs7Y2FzZSA0OiQ9XyxVPWQrLU8qTSxsWzJdPSQsbFszXT1VO2JyZWFrfX1yZXR1cm4hMX0saS5nZXRDYXJkaW5hbERpcmVjdGlvbj1mdW5jdGlvbihhLHMsbCl7cmV0dXJuIGE+cz9sOjErbCU0fSxpLmdldEludGVyc2VjdGlvbj1mdW5jdGlvbihhLHMsbCx1KXtpZih1PT1udWxsKXJldHVybiB0aGlzLmdldEludGVyc2VjdGlvbjIoYSxzLGwpO3ZhciBoPWEueCxmPWEueSxkPXMueCxwPXMueSxtPWwueCxnPWwueSx5PXUueCx2PXUueSx4PXZvaWQgMCxiPXZvaWQgMCxUPXZvaWQgMCxTPXZvaWQgMCx3PXZvaWQgMCxFPXZvaWQgMCxfPXZvaWQgMCxDPXZvaWQgMCxEPXZvaWQgMDtyZXR1cm4gVD1wLWYsdz1oLWQsXz1kKmYtaCpwLFM9di1nLEU9bS15LEM9eSpnLW0qdixEPVQqRS1TKncsRD09PTA/bnVsbDooeD0odypDLUUqXykvRCxiPShTKl8tVCpDKS9ELG5ldyBuKHgsYikpfSxpLmFuZ2xlT2ZWZWN0b3I9ZnVuY3Rpb24oYSxzLGwsdSl7dmFyIGg9dm9pZCAwO3JldHVybiBhIT09bD8oaD1NYXRoLmF0YW4oKHUtcykvKGwtYSkpLGw8YT9oKz1NYXRoLlBJOnU8cyYmKGgrPXRoaXMuVFdPX1BJKSk6dTxzP2g9dGhpcy5PTkVfQU5EX0hBTEZfUEk6aD10aGlzLkhBTEZfUEksaH0saS5kb0ludGVyc2VjdD1mdW5jdGlvbihhLHMsbCx1KXt2YXIgaD1hLngsZj1hLnksZD1zLngscD1zLnksbT1sLngsZz1sLnkseT11Lngsdj11LnkseD0oZC1oKSoodi1nKS0oeS1tKSoocC1mKTtpZih4PT09MClyZXR1cm4hMTt2YXIgYj0oKHYtZykqKHktaCkrKG0teSkqKHYtZikpL3gsVD0oKGYtcCkqKHktaCkrKGQtaCkqKHYtZikpL3g7cmV0dXJuIDA8YiYmYjwxJiYwPFQmJlQ8MX0saS5maW5kQ2lyY2xlTGluZUludGVyc2VjdGlvbnM9ZnVuY3Rpb24oYSxzLGwsdSxoLGYsZCl7dmFyIHA9KGwtYSkqKGwtYSkrKHUtcykqKHUtcyksbT0yKigoYS1oKSoobC1hKSsocy1mKSoodS1zKSksZz0oYS1oKSooYS1oKSsocy1mKSoocy1mKS1kKmQseT1tKm0tNCpwKmc7aWYoeT49MCl7dmFyIHY9KC1tK01hdGguc3FydChtKm0tNCpwKmcpKS8oMipwKSx4PSgtbS1NYXRoLnNxcnQobSptLTQqcCpnKSkvKDIqcCksYj1udWxsO3JldHVybiB2Pj0wJiZ2PD0xP1t2XTp4Pj0wJiZ4PD0xP1t4XTpifWVsc2UgcmV0dXJuIG51bGx9LGkuSEFMRl9QST0uNSpNYXRoLlBJLGkuT05FX0FORF9IQUxGX1BJPTEuNSpNYXRoLlBJLGkuVFdPX1BJPTIqTWF0aC5QSSxpLlRIUkVFX1BJPTMqTWF0aC5QSSx0LmV4cG9ydHM9aX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKCl7fW8obiwiSU1hdGgiKSxuLnNpZ249ZnVuY3Rpb24oaSl7cmV0dXJuIGk+MD8xOmk8MD8tMTowfSxuLmZsb29yPWZ1bmN0aW9uKGkpe3JldHVybiBpPDA/TWF0aC5jZWlsKGkpOk1hdGguZmxvb3IoaSl9LG4uY2VpbD1mdW5jdGlvbihpKXtyZXR1cm4gaTwwP01hdGguZmxvb3IoaSk6TWF0aC5jZWlsKGkpfSx0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKCl7fW8obiwiSW50ZWdlciIpLG4uTUFYX1ZBTFVFPTIxNDc0ODM2NDcsbi5NSU5fVkFMVUU9LTIxNDc0ODM2NDgsdC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49ZnVuY3Rpb24oKXtmdW5jdGlvbiBoKGYsZCl7Zm9yKHZhciBwPTA7cDxkLmxlbmd0aDtwKyspe3ZhciBtPWRbcF07bS5lbnVtZXJhYmxlPW0uZW51bWVyYWJsZXx8ITEsbS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG0mJihtLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZixtLmtleSxtKX19cmV0dXJuIG8oaCwiZGVmaW5lUHJvcGVydGllcyIpLGZ1bmN0aW9uKGYsZCxwKXtyZXR1cm4gZCYmaChmLnByb3RvdHlwZSxkKSxwJiZoKGYscCksZn19KCk7ZnVuY3Rpb24gaShoLGYpe2lmKCEoaCBpbnN0YW5jZW9mIGYpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfW8oaSwiX2NsYXNzQ2FsbENoZWNrIik7dmFyIGE9byhmdW5jdGlvbihmKXtyZXR1cm57dmFsdWU6ZixuZXh0Om51bGwscHJldjpudWxsfX0sIm5vZGVGcm9tIikscz1vKGZ1bmN0aW9uKGYsZCxwLG0pe3JldHVybiBmIT09bnVsbD9mLm5leHQ9ZDptLmhlYWQ9ZCxwIT09bnVsbD9wLnByZXY9ZDptLnRhaWw9ZCxkLnByZXY9ZixkLm5leHQ9cCxtLmxlbmd0aCsrLGR9LCJhZGQiKSxsPW8oZnVuY3Rpb24oZixkKXt2YXIgcD1mLnByZXYsbT1mLm5leHQ7cmV0dXJuIHAhPT1udWxsP3AubmV4dD1tOmQuaGVhZD1tLG0hPT1udWxsP20ucHJldj1wOmQudGFpbD1wLGYucHJldj1mLm5leHQ9bnVsbCxkLmxlbmd0aC0tLGZ9LCJfcmVtb3ZlIiksdT1mdW5jdGlvbigpe2Z1bmN0aW9uIGgoZil7dmFyIGQ9dGhpcztpKHRoaXMsaCksdGhpcy5sZW5ndGg9MCx0aGlzLmhlYWQ9bnVsbCx0aGlzLnRhaWw9bnVsbCxmPy5mb3JFYWNoKGZ1bmN0aW9uKHApe3JldHVybiBkLnB1c2gocCl9KX1yZXR1cm4gbyhoLCJMaW5rZWRMaXN0IiksbihoLFt7a2V5OiJzaXplIix2YWx1ZTpvKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSwic2l6ZSIpfSx7a2V5OiJpbnNlcnRCZWZvcmUiLHZhbHVlOm8oZnVuY3Rpb24oZCxwKXtyZXR1cm4gcyhwLnByZXYsYShkKSxwLHRoaXMpfSwiaW5zZXJ0QmVmb3JlIil9LHtrZXk6Imluc2VydEFmdGVyIix2YWx1ZTpvKGZ1bmN0aW9uKGQscCl7cmV0dXJuIHMocCxhKGQpLHAubmV4dCx0aGlzKX0sImluc2VydEFmdGVyIil9LHtrZXk6Imluc2VydE5vZGVCZWZvcmUiLHZhbHVlOm8oZnVuY3Rpb24oZCxwKXtyZXR1cm4gcyhwLnByZXYsZCxwLHRoaXMpfSwiaW5zZXJ0Tm9kZUJlZm9yZSIpfSx7a2V5OiJpbnNlcnROb2RlQWZ0ZXIiLHZhbHVlOm8oZnVuY3Rpb24oZCxwKXtyZXR1cm4gcyhwLGQscC5uZXh0LHRoaXMpfSwiaW5zZXJ0Tm9kZUFmdGVyIil9LHtrZXk6InB1c2giLHZhbHVlOm8oZnVuY3Rpb24oZCl7cmV0dXJuIHModGhpcy50YWlsLGEoZCksbnVsbCx0aGlzKX0sInB1c2giKX0se2tleToidW5zaGlmdCIsdmFsdWU6byhmdW5jdGlvbihkKXtyZXR1cm4gcyhudWxsLGEoZCksdGhpcy5oZWFkLHRoaXMpfSwidW5zaGlmdCIpfSx7a2V5OiJyZW1vdmUiLHZhbHVlOm8oZnVuY3Rpb24oZCl7cmV0dXJuIGwoZCx0aGlzKX0sInJlbW92ZSIpfSx7a2V5OiJwb3AiLHZhbHVlOm8oZnVuY3Rpb24oKXtyZXR1cm4gbCh0aGlzLnRhaWwsdGhpcykudmFsdWV9LCJwb3AiKX0se2tleToicG9wTm9kZSIsdmFsdWU6byhmdW5jdGlvbigpe3JldHVybiBsKHRoaXMudGFpbCx0aGlzKX0sInBvcE5vZGUiKX0se2tleToic2hpZnQiLHZhbHVlOm8oZnVuY3Rpb24oKXtyZXR1cm4gbCh0aGlzLmhlYWQsdGhpcykudmFsdWV9LCJzaGlmdCIpfSx7a2V5OiJzaGlmdE5vZGUiLHZhbHVlOm8oZnVuY3Rpb24oKXtyZXR1cm4gbCh0aGlzLmhlYWQsdGhpcyl9LCJzaGlmdE5vZGUiKX0se2tleToiZ2V0X29iamVjdF9hdCIsdmFsdWU6byhmdW5jdGlvbihkKXtpZihkPD10aGlzLmxlbmd0aCgpKXtmb3IodmFyIHA9MSxtPXRoaXMuaGVhZDtwPGQ7KW09bS5uZXh0LHArKztyZXR1cm4gbS52YWx1ZX19LCJnZXRfb2JqZWN0X2F0Iil9LHtrZXk6InNldF9vYmplY3RfYXQiLHZhbHVlOm8oZnVuY3Rpb24oZCxwKXtpZihkPD10aGlzLmxlbmd0aCgpKXtmb3IodmFyIG09MSxnPXRoaXMuaGVhZDttPGQ7KWc9Zy5uZXh0LG0rKztnLnZhbHVlPXB9fSwic2V0X29iamVjdF9hdCIpfV0pLGh9KCk7dC5leHBvcnRzPXV9LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihpLGEscyl7dGhpcy54PW51bGwsdGhpcy55PW51bGwsaT09bnVsbCYmYT09bnVsbCYmcz09bnVsbD8odGhpcy54PTAsdGhpcy55PTApOnR5cGVvZiBpPT0ibnVtYmVyIiYmdHlwZW9mIGE9PSJudW1iZXIiJiZzPT1udWxsPyh0aGlzLng9aSx0aGlzLnk9YSk6aS5jb25zdHJ1Y3Rvci5uYW1lPT0iUG9pbnQiJiZhPT1udWxsJiZzPT1udWxsJiYocz1pLHRoaXMueD1zLngsdGhpcy55PXMueSl9byhuLCJQb2ludCIpLG4ucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54fSxuLnByb3RvdHlwZS5nZXRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueX0sbi5wcm90b3R5cGUuZ2V0TG9jYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcy54LHRoaXMueSl9LG4ucHJvdG90eXBlLnNldExvY2F0aW9uPWZ1bmN0aW9uKGksYSxzKXtpLmNvbnN0cnVjdG9yLm5hbWU9PSJQb2ludCImJmE9PW51bGwmJnM9PW51bGw/KHM9aSx0aGlzLnNldExvY2F0aW9uKHMueCxzLnkpKTp0eXBlb2YgaT09Im51bWJlciImJnR5cGVvZiBhPT0ibnVtYmVyIiYmcz09bnVsbCYmKHBhcnNlSW50KGkpPT1pJiZwYXJzZUludChhKT09YT90aGlzLm1vdmUoaSxhKToodGhpcy54PU1hdGguZmxvb3IoaSsuNSksdGhpcy55PU1hdGguZmxvb3IoYSsuNSkpKX0sbi5wcm90b3R5cGUubW92ZT1mdW5jdGlvbihpLGEpe3RoaXMueD1pLHRoaXMueT1hfSxuLnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24oaSxhKXt0aGlzLngrPWksdGhpcy55Kz1hfSxuLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oaSl7aWYoaS5jb25zdHJ1Y3Rvci5uYW1lPT0iUG9pbnQiKXt2YXIgYT1pO3JldHVybiB0aGlzLng9PWEueCYmdGhpcy55PT1hLnl9cmV0dXJuIHRoaXM9PWl9LG4ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKCkuY29uc3RydWN0b3IubmFtZSsiW3g9Iit0aGlzLngrIix5PSIrdGhpcy55KyJdIn0sdC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihpLGEscyxsKXt0aGlzLng9MCx0aGlzLnk9MCx0aGlzLndpZHRoPTAsdGhpcy5oZWlnaHQ9MCxpIT1udWxsJiZhIT1udWxsJiZzIT1udWxsJiZsIT1udWxsJiYodGhpcy54PWksdGhpcy55PWEsdGhpcy53aWR0aD1zLHRoaXMuaGVpZ2h0PWwpfW8obiwiUmVjdGFuZ2xlRCIpLG4ucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54fSxuLnByb3RvdHlwZS5zZXRYPWZ1bmN0aW9uKGkpe3RoaXMueD1pfSxuLnByb3RvdHlwZS5nZXRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueX0sbi5wcm90b3R5cGUuc2V0WT1mdW5jdGlvbihpKXt0aGlzLnk9aX0sbi5wcm90b3R5cGUuZ2V0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53aWR0aH0sbi5wcm90b3R5cGUuc2V0V2lkdGg9ZnVuY3Rpb24oaSl7dGhpcy53aWR0aD1pfSxuLnByb3RvdHlwZS5nZXRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oZWlnaHR9LG4ucHJvdG90eXBlLnNldEhlaWdodD1mdW5jdGlvbihpKXt0aGlzLmhlaWdodD1pfSxuLnByb3RvdHlwZS5nZXRSaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLngrdGhpcy53aWR0aH0sbi5wcm90b3R5cGUuZ2V0Qm90dG9tPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueSt0aGlzLmhlaWdodH0sbi5wcm90b3R5cGUuaW50ZXJzZWN0cz1mdW5jdGlvbihpKXtyZXR1cm4hKHRoaXMuZ2V0UmlnaHQoKTxpLnh8fHRoaXMuZ2V0Qm90dG9tKCk8aS55fHxpLmdldFJpZ2h0KCk8dGhpcy54fHxpLmdldEJvdHRvbSgpPHRoaXMueSl9LG4ucHJvdG90eXBlLmdldENlbnRlclg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54K3RoaXMud2lkdGgvMn0sbi5wcm90b3R5cGUuZ2V0TWluWD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFgoKX0sbi5wcm90b3R5cGUuZ2V0TWF4WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFgoKSt0aGlzLndpZHRofSxuLnByb3RvdHlwZS5nZXRDZW50ZXJZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueSt0aGlzLmhlaWdodC8yfSxuLnByb3RvdHlwZS5nZXRNaW5ZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0WSgpfSxuLnByb3RvdHlwZS5nZXRNYXhZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0WSgpK3RoaXMuaGVpZ2h0fSxuLnByb3RvdHlwZS5nZXRXaWR0aEhhbGY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53aWR0aC8yfSxuLnByb3RvdHlwZS5nZXRIZWlnaHRIYWxmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGVpZ2h0LzJ9LHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJnR5cGVvZiBTeW1ib2wuaXRlcmF0b3I9PSJzeW1ib2wiP2Z1bmN0aW9uKGEpe3JldHVybiB0eXBlb2YgYX06ZnVuY3Rpb24oYSl7cmV0dXJuIGEmJnR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJmEuY29uc3RydWN0b3I9PT1TeW1ib2wmJmEhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBhfTtmdW5jdGlvbiBpKCl7fW8oaSwiVW5pcXVlSURHZW5lcmV0b3IiKSxpLmxhc3RJRD0wLGkuY3JlYXRlSUQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGkuaXNQcmltaXRpdmUoYSk/YTooYS51bmlxdWVJRCE9bnVsbHx8KGEudW5pcXVlSUQ9aS5nZXRTdHJpbmcoKSxpLmxhc3RJRCsrKSxhLnVuaXF1ZUlEKX0saS5nZXRTdHJpbmc9ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PW51bGwmJihhPWkubGFzdElEKSwiT2JqZWN0IyIrYX0saS5pc1ByaW1pdGl2ZT1mdW5jdGlvbihhKXt2YXIgcz10eXBlb2YgYT4idSI/InVuZGVmaW5lZCI6bihhKTtyZXR1cm4gYT09bnVsbHx8cyE9Im9iamVjdCImJnMhPSJmdW5jdGlvbiJ9LHQuZXhwb3J0cz1pfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4obSl7aWYoQXJyYXkuaXNBcnJheShtKSl7Zm9yKHZhciBnPTAseT1BcnJheShtLmxlbmd0aCk7ZzxtLmxlbmd0aDtnKyspeVtnXT1tW2ddO3JldHVybiB5fWVsc2UgcmV0dXJuIEFycmF5LmZyb20obSl9byhuLCJfdG9Db25zdW1hYmxlQXJyYXkiKTt2YXIgaT1yKDApLGE9cig3KSxzPXIoMyksbD1yKDEpLHU9cig2KSxoPXIoNSksZj1yKDE3KSxkPXIoMjkpO2Z1bmN0aW9uIHAobSl7ZC5jYWxsKHRoaXMpLHRoaXMubGF5b3V0UXVhbGl0eT1pLlFVQUxJVFksdGhpcy5jcmVhdGVCZW5kc0FzTmVlZGVkPWkuREVGQVVMVF9DUkVBVEVfQkVORFNfQVNfTkVFREVELHRoaXMuaW5jcmVtZW50YWw9aS5ERUZBVUxUX0lOQ1JFTUVOVEFMLHRoaXMuYW5pbWF0aW9uT25MYXlvdXQ9aS5ERUZBVUxUX0FOSU1BVElPTl9PTl9MQVlPVVQsdGhpcy5hbmltYXRpb25EdXJpbmdMYXlvdXQ9aS5ERUZBVUxUX0FOSU1BVElPTl9EVVJJTkdfTEFZT1VULHRoaXMuYW5pbWF0aW9uUGVyaW9kPWkuREVGQVVMVF9BTklNQVRJT05fUEVSSU9ELHRoaXMudW5pZm9ybUxlYWZOb2RlU2l6ZXM9aS5ERUZBVUxUX1VOSUZPUk1fTEVBRl9OT0RFX1NJWkVTLHRoaXMuZWRnZVRvRHVtbXlOb2Rlcz1uZXcgTWFwLHRoaXMuZ3JhcGhNYW5hZ2VyPW5ldyBhKHRoaXMpLHRoaXMuaXNMYXlvdXRGaW5pc2hlZD0hMSx0aGlzLmlzU3ViTGF5b3V0PSExLHRoaXMuaXNSZW1vdGVVc2U9ITEsbSE9bnVsbCYmKHRoaXMuaXNSZW1vdGVVc2U9bSl9byhwLCJMYXlvdXQiKSxwLlJBTkRPTV9TRUVEPTEscC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkLnByb3RvdHlwZSkscC5wcm90b3R5cGUuZ2V0R3JhcGhNYW5hZ2VyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyfSxwLnByb3RvdHlwZS5nZXRBbGxOb2Rlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxOb2RlcygpfSxwLnByb3RvdHlwZS5nZXRBbGxFZGdlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxFZGdlcygpfSxwLnByb3RvdHlwZS5nZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbigpfSxwLnByb3RvdHlwZS5uZXdHcmFwaE1hbmFnZXI9ZnVuY3Rpb24oKXt2YXIgbT1uZXcgYSh0aGlzKTtyZXR1cm4gdGhpcy5ncmFwaE1hbmFnZXI9bSxtfSxwLnByb3RvdHlwZS5uZXdHcmFwaD1mdW5jdGlvbihtKXtyZXR1cm4gbmV3IHUobnVsbCx0aGlzLmdyYXBoTWFuYWdlcixtKX0scC5wcm90b3R5cGUubmV3Tm9kZT1mdW5jdGlvbihtKXtyZXR1cm4gbmV3IHModGhpcy5ncmFwaE1hbmFnZXIsbSl9LHAucHJvdG90eXBlLm5ld0VkZ2U9ZnVuY3Rpb24obSl7cmV0dXJuIG5ldyBsKG51bGwsbnVsbCxtKX0scC5wcm90b3R5cGUuY2hlY2tMYXlvdXRTdWNjZXNzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKT09bnVsbHx8dGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmdldE5vZGVzKCkubGVuZ3RoPT0wfHx0aGlzLmdyYXBoTWFuYWdlci5pbmNsdWRlc0ludmFsaWRFZGdlKCl9LHAucHJvdG90eXBlLnJ1bkxheW91dD1mdW5jdGlvbigpe3RoaXMuaXNMYXlvdXRGaW5pc2hlZD0hMSx0aGlzLnRpbGluZ1ByZUxheW91dCYmdGhpcy50aWxpbmdQcmVMYXlvdXQoKSx0aGlzLmluaXRQYXJhbWV0ZXJzKCk7dmFyIG07cmV0dXJuIHRoaXMuY2hlY2tMYXlvdXRTdWNjZXNzKCk/bT0hMTptPXRoaXMubGF5b3V0KCksaS5BTklNQVRFPT09ImR1cmluZyI/ITE6KG0mJih0aGlzLmlzU3ViTGF5b3V0fHx0aGlzLmRvUG9zdExheW91dCgpKSx0aGlzLnRpbGluZ1Bvc3RMYXlvdXQmJnRoaXMudGlsaW5nUG9zdExheW91dCgpLHRoaXMuaXNMYXlvdXRGaW5pc2hlZD0hMCxtKX0scC5wcm90b3R5cGUuZG9Qb3N0TGF5b3V0PWZ1bmN0aW9uKCl7dGhpcy5pbmNyZW1lbnRhbHx8dGhpcy50cmFuc2Zvcm0oKSx0aGlzLnVwZGF0ZSgpfSxwLnByb3RvdHlwZS51cGRhdGUyPWZ1bmN0aW9uKCl7aWYodGhpcy5jcmVhdGVCZW5kc0FzTmVlZGVkJiYodGhpcy5jcmVhdGVCZW5kcG9pbnRzRnJvbUR1bW15Tm9kZXMoKSx0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbEVkZ2VzKCkpLCF0aGlzLmlzUmVtb3RlVXNlKXtmb3IodmFyIG0sZz10aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxFZGdlcygpLHk9MDt5PGcubGVuZ3RoO3krKyltPWdbeV07Zm9yKHZhciB2LHg9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmdldE5vZGVzKCkseT0wO3k8eC5sZW5ndGg7eSsrKXY9eFt5XTt0aGlzLnVwZGF0ZSh0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkpfX0scC5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKG0pe2lmKG09PW51bGwpdGhpcy51cGRhdGUyKCk7ZWxzZSBpZihtIGluc3RhbmNlb2Ygcyl7dmFyIGc9bTtpZihnLmdldENoaWxkKCkhPW51bGwpZm9yKHZhciB5PWcuZ2V0Q2hpbGQoKS5nZXROb2RlcygpLHY9MDt2PHkubGVuZ3RoO3YrKyl1cGRhdGUoeVt2XSk7aWYoZy52R3JhcGhPYmplY3QhPW51bGwpe3ZhciB4PWcudkdyYXBoT2JqZWN0O3gudXBkYXRlKGcpfX1lbHNlIGlmKG0gaW5zdGFuY2VvZiBsKXt2YXIgYj1tO2lmKGIudkdyYXBoT2JqZWN0IT1udWxsKXt2YXIgVD1iLnZHcmFwaE9iamVjdDtULnVwZGF0ZShiKX19ZWxzZSBpZihtIGluc3RhbmNlb2YgdSl7dmFyIFM9bTtpZihTLnZHcmFwaE9iamVjdCE9bnVsbCl7dmFyIHc9Uy52R3JhcGhPYmplY3Q7dy51cGRhdGUoUyl9fX0scC5wcm90b3R5cGUuaW5pdFBhcmFtZXRlcnM9ZnVuY3Rpb24oKXt0aGlzLmlzU3ViTGF5b3V0fHwodGhpcy5sYXlvdXRRdWFsaXR5PWkuUVVBTElUWSx0aGlzLmFuaW1hdGlvbkR1cmluZ0xheW91dD1pLkRFRkFVTFRfQU5JTUFUSU9OX0RVUklOR19MQVlPVVQsdGhpcy5hbmltYXRpb25QZXJpb2Q9aS5ERUZBVUxUX0FOSU1BVElPTl9QRVJJT0QsdGhpcy5hbmltYXRpb25PbkxheW91dD1pLkRFRkFVTFRfQU5JTUFUSU9OX09OX0xBWU9VVCx0aGlzLmluY3JlbWVudGFsPWkuREVGQVVMVF9JTkNSRU1FTlRBTCx0aGlzLmNyZWF0ZUJlbmRzQXNOZWVkZWQ9aS5ERUZBVUxUX0NSRUFURV9CRU5EU19BU19ORUVERUQsdGhpcy51bmlmb3JtTGVhZk5vZGVTaXplcz1pLkRFRkFVTFRfVU5JRk9STV9MRUFGX05PREVfU0laRVMpLHRoaXMuYW5pbWF0aW9uRHVyaW5nTGF5b3V0JiYodGhpcy5hbmltYXRpb25PbkxheW91dD0hMSl9LHAucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihtKXtpZihtPT1udWxsKXRoaXMudHJhbnNmb3JtKG5ldyBoKDAsMCkpO2Vsc2V7dmFyIGc9bmV3IGYseT10aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkudXBkYXRlTGVmdFRvcCgpO2lmKHkhPW51bGwpe2cuc2V0V29ybGRPcmdYKG0ueCksZy5zZXRXb3JsZE9yZ1kobS55KSxnLnNldERldmljZU9yZ1goeS54KSxnLnNldERldmljZU9yZ1koeS55KTtmb3IodmFyIHY9dGhpcy5nZXRBbGxOb2RlcygpLHgsYj0wO2I8di5sZW5ndGg7YisrKXg9dltiXSx4LnRyYW5zZm9ybShnKX19fSxwLnByb3RvdHlwZS5wb3NpdGlvbk5vZGVzUmFuZG9tbHk9ZnVuY3Rpb24obSl7aWYobT09bnVsbCl0aGlzLnBvc2l0aW9uTm9kZXNSYW5kb21seSh0aGlzLmdldEdyYXBoTWFuYWdlcigpLmdldFJvb3QoKSksdGhpcy5nZXRHcmFwaE1hbmFnZXIoKS5nZXRSb290KCkudXBkYXRlQm91bmRzKCEwKTtlbHNlIGZvcih2YXIgZyx5LHY9bS5nZXROb2RlcygpLHg9MDt4PHYubGVuZ3RoO3grKylnPXZbeF0seT1nLmdldENoaWxkKCkseT09bnVsbHx8eS5nZXROb2RlcygpLmxlbmd0aD09MD9nLnNjYXR0ZXIoKToodGhpcy5wb3NpdGlvbk5vZGVzUmFuZG9tbHkoeSksZy51cGRhdGVCb3VuZHMoKSl9LHAucHJvdG90eXBlLmdldEZsYXRGb3Jlc3Q9ZnVuY3Rpb24oKXtmb3IodmFyIG09W10sZz0hMCx5PXRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXROb2RlcygpLHY9ITAseD0wO3g8eS5sZW5ndGg7eCsrKXlbeF0uZ2V0Q2hpbGQoKSE9bnVsbCYmKHY9ITEpO2lmKCF2KXJldHVybiBtO3ZhciBiPW5ldyBTZXQsVD1bXSxTPW5ldyBNYXAsdz1bXTtmb3Iodz13LmNvbmNhdCh5KTt3Lmxlbmd0aD4wJiZnOyl7Zm9yKFQucHVzaCh3WzBdKTtULmxlbmd0aD4wJiZnOyl7dmFyIEU9VFswXTtULnNwbGljZSgwLDEpLGIuYWRkKEUpO2Zvcih2YXIgXz1FLmdldEVkZ2VzKCkseD0wO3g8Xy5sZW5ndGg7eCsrKXt2YXIgQz1fW3hdLmdldE90aGVyRW5kKEUpO2lmKFMuZ2V0KEUpIT1DKWlmKCFiLmhhcyhDKSlULnB1c2goQyksUy5zZXQoQyxFKTtlbHNle2c9ITE7YnJlYWt9fX1pZighZyltPVtdO2Vsc2V7dmFyIEQ9W10uY29uY2F0KG4oYikpO20ucHVzaChEKTtmb3IodmFyIHg9MDt4PEQubGVuZ3RoO3grKyl7dmFyIE89RFt4XSxSPXcuaW5kZXhPZihPKTtSPi0xJiZ3LnNwbGljZShSLDEpfWI9bmV3IFNldCxTPW5ldyBNYXB9fXJldHVybiBtfSxwLnByb3RvdHlwZS5jcmVhdGVEdW1teU5vZGVzRm9yQmVuZHBvaW50cz1mdW5jdGlvbihtKXtmb3IodmFyIGc9W10seT1tLnNvdXJjZSx2PXRoaXMuZ3JhcGhNYW5hZ2VyLmNhbGNMb3dlc3RDb21tb25BbmNlc3RvcihtLnNvdXJjZSxtLnRhcmdldCkseD0wO3g8bS5iZW5kcG9pbnRzLmxlbmd0aDt4Kyspe3ZhciBiPXRoaXMubmV3Tm9kZShudWxsKTtiLnNldFJlY3QobmV3IFBvaW50KDAsMCksbmV3IERpbWVuc2lvbigxLDEpKSx2LmFkZChiKTt2YXIgVD10aGlzLm5ld0VkZ2UobnVsbCk7dGhpcy5ncmFwaE1hbmFnZXIuYWRkKFQseSxiKSxnLmFkZChiKSx5PWJ9dmFyIFQ9dGhpcy5uZXdFZGdlKG51bGwpO3JldHVybiB0aGlzLmdyYXBoTWFuYWdlci5hZGQoVCx5LG0udGFyZ2V0KSx0aGlzLmVkZ2VUb0R1bW15Tm9kZXMuc2V0KG0sZyksbS5pc0ludGVyR3JhcGgoKT90aGlzLmdyYXBoTWFuYWdlci5yZW1vdmUobSk6di5yZW1vdmUobSksZ30scC5wcm90b3R5cGUuY3JlYXRlQmVuZHBvaW50c0Zyb21EdW1teU5vZGVzPWZ1bmN0aW9uKCl7dmFyIG09W107bT1tLmNvbmNhdCh0aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxFZGdlcygpKSxtPVtdLmNvbmNhdChuKHRoaXMuZWRnZVRvRHVtbXlOb2Rlcy5rZXlzKCkpKS5jb25jYXQobSk7Zm9yKHZhciBnPTA7ZzxtLmxlbmd0aDtnKyspe3ZhciB5PW1bZ107aWYoeS5iZW5kcG9pbnRzLmxlbmd0aD4wKXtmb3IodmFyIHY9dGhpcy5lZGdlVG9EdW1teU5vZGVzLmdldCh5KSx4PTA7eDx2Lmxlbmd0aDt4Kyspe3ZhciBiPXZbeF0sVD1uZXcgaChiLmdldENlbnRlclgoKSxiLmdldENlbnRlclkoKSksUz15LmJlbmRwb2ludHMuZ2V0KHgpO1MueD1ULngsUy55PVQueSxiLmdldE93bmVyKCkucmVtb3ZlKGIpfXRoaXMuZ3JhcGhNYW5hZ2VyLmFkZCh5LHkuc291cmNlLHkudGFyZ2V0KX19fSxwLnRyYW5zZm9ybT1mdW5jdGlvbihtLGcseSx2KXtpZih5IT1udWxsJiZ2IT1udWxsKXt2YXIgeD1nO2lmKG08PTUwKXt2YXIgYj1nL3k7eC09KGctYikvNTAqKDUwLW0pfWVsc2V7dmFyIFQ9Zyp2O3grPShULWcpLzUwKihtLTUwKX1yZXR1cm4geH1lbHNle3ZhciBTLHc7cmV0dXJuIG08PTUwPyhTPTkqZy81MDAsdz1nLzEwKTooUz05KmcvNTAsdz0tOCpnKSxTKm0rd319LHAuZmluZENlbnRlck9mVHJlZT1mdW5jdGlvbihtKXt2YXIgZz1bXTtnPWcuY29uY2F0KG0pO3ZhciB5PVtdLHY9bmV3IE1hcCx4PSExLGI9bnVsbDsoZy5sZW5ndGg9PTF8fGcubGVuZ3RoPT0yKSYmKHg9ITAsYj1nWzBdKTtmb3IodmFyIFQ9MDtUPGcubGVuZ3RoO1QrKyl7dmFyIFM9Z1tUXSx3PVMuZ2V0TmVpZ2hib3JzTGlzdCgpLnNpemU7di5zZXQoUyxTLmdldE5laWdoYm9yc0xpc3QoKS5zaXplKSx3PT0xJiZ5LnB1c2goUyl9dmFyIEU9W107Zm9yKEU9RS5jb25jYXQoeSk7IXg7KXt2YXIgXz1bXTtfPV8uY29uY2F0KEUpLEU9W107Zm9yKHZhciBUPTA7VDxnLmxlbmd0aDtUKyspe3ZhciBTPWdbVF0sQz1nLmluZGV4T2YoUyk7Qz49MCYmZy5zcGxpY2UoQywxKTt2YXIgRD1TLmdldE5laWdoYm9yc0xpc3QoKTtELmZvckVhY2goZnVuY3Rpb24oayl7aWYoeS5pbmRleE9mKGspPDApe3ZhciBMPXYuZ2V0KGspLEE9TC0xO0E9PTEmJkUucHVzaChrKSx2LnNldChrLEEpfX0pfXk9eS5jb25jYXQoRSksKGcubGVuZ3RoPT0xfHxnLmxlbmd0aD09MikmJih4PSEwLGI9Z1swXSl9cmV0dXJuIGJ9LHAucHJvdG90eXBlLnNldEdyYXBoTWFuYWdlcj1mdW5jdGlvbihtKXt0aGlzLmdyYXBoTWFuYWdlcj1tfSx0LmV4cG9ydHM9cH0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKCl7fW8obiwiUmFuZG9tU2VlZCIpLG4uc2VlZD0xLG4ueD0wLG4ubmV4dERvdWJsZT1mdW5jdGlvbigpe3JldHVybiBuLng9TWF0aC5zaW4obi5zZWVkKyspKjFlNCxuLngtTWF0aC5mbG9vcihuLngpfSx0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDUpO2Z1bmN0aW9uIGkoYSxzKXt0aGlzLmx3b3JsZE9yZ1g9MCx0aGlzLmx3b3JsZE9yZ1k9MCx0aGlzLmxkZXZpY2VPcmdYPTAsdGhpcy5sZGV2aWNlT3JnWT0wLHRoaXMubHdvcmxkRXh0WD0xLHRoaXMubHdvcmxkRXh0WT0xLHRoaXMubGRldmljZUV4dFg9MSx0aGlzLmxkZXZpY2VFeHRZPTF9byhpLCJUcmFuc2Zvcm0iKSxpLnByb3RvdHlwZS5nZXRXb3JsZE9yZ1g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sd29ybGRPcmdYfSxpLnByb3RvdHlwZS5zZXRXb3JsZE9yZ1g9ZnVuY3Rpb24oYSl7dGhpcy5sd29ybGRPcmdYPWF9LGkucHJvdG90eXBlLmdldFdvcmxkT3JnWT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmx3b3JsZE9yZ1l9LGkucHJvdG90eXBlLnNldFdvcmxkT3JnWT1mdW5jdGlvbihhKXt0aGlzLmx3b3JsZE9yZ1k9YX0saS5wcm90b3R5cGUuZ2V0V29ybGRFeHRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubHdvcmxkRXh0WH0saS5wcm90b3R5cGUuc2V0V29ybGRFeHRYPWZ1bmN0aW9uKGEpe3RoaXMubHdvcmxkRXh0WD1hfSxpLnByb3RvdHlwZS5nZXRXb3JsZEV4dFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sd29ybGRFeHRZfSxpLnByb3RvdHlwZS5zZXRXb3JsZEV4dFk9ZnVuY3Rpb24oYSl7dGhpcy5sd29ybGRFeHRZPWF9LGkucHJvdG90eXBlLmdldERldmljZU9yZ1g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZGV2aWNlT3JnWH0saS5wcm90b3R5cGUuc2V0RGV2aWNlT3JnWD1mdW5jdGlvbihhKXt0aGlzLmxkZXZpY2VPcmdYPWF9LGkucHJvdG90eXBlLmdldERldmljZU9yZ1k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZGV2aWNlT3JnWX0saS5wcm90b3R5cGUuc2V0RGV2aWNlT3JnWT1mdW5jdGlvbihhKXt0aGlzLmxkZXZpY2VPcmdZPWF9LGkucHJvdG90eXBlLmdldERldmljZUV4dFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZGV2aWNlRXh0WH0saS5wcm90b3R5cGUuc2V0RGV2aWNlRXh0WD1mdW5jdGlvbihhKXt0aGlzLmxkZXZpY2VFeHRYPWF9LGkucHJvdG90eXBlLmdldERldmljZUV4dFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZGV2aWNlRXh0WX0saS5wcm90b3R5cGUuc2V0RGV2aWNlRXh0WT1mdW5jdGlvbihhKXt0aGlzLmxkZXZpY2VFeHRZPWF9LGkucHJvdG90eXBlLnRyYW5zZm9ybVg9ZnVuY3Rpb24oYSl7dmFyIHM9MCxsPXRoaXMubHdvcmxkRXh0WDtyZXR1cm4gbCE9MCYmKHM9dGhpcy5sZGV2aWNlT3JnWCsoYS10aGlzLmx3b3JsZE9yZ1gpKnRoaXMubGRldmljZUV4dFgvbCksc30saS5wcm90b3R5cGUudHJhbnNmb3JtWT1mdW5jdGlvbihhKXt2YXIgcz0wLGw9dGhpcy5sd29ybGRFeHRZO3JldHVybiBsIT0wJiYocz10aGlzLmxkZXZpY2VPcmdZKyhhLXRoaXMubHdvcmxkT3JnWSkqdGhpcy5sZGV2aWNlRXh0WS9sKSxzfSxpLnByb3RvdHlwZS5pbnZlcnNlVHJhbnNmb3JtWD1mdW5jdGlvbihhKXt2YXIgcz0wLGw9dGhpcy5sZGV2aWNlRXh0WDtyZXR1cm4gbCE9MCYmKHM9dGhpcy5sd29ybGRPcmdYKyhhLXRoaXMubGRldmljZU9yZ1gpKnRoaXMubHdvcmxkRXh0WC9sKSxzfSxpLnByb3RvdHlwZS5pbnZlcnNlVHJhbnNmb3JtWT1mdW5jdGlvbihhKXt2YXIgcz0wLGw9dGhpcy5sZGV2aWNlRXh0WTtyZXR1cm4gbCE9MCYmKHM9dGhpcy5sd29ybGRPcmdZKyhhLXRoaXMubGRldmljZU9yZ1kpKnRoaXMubHdvcmxkRXh0WS9sKSxzfSxpLnByb3RvdHlwZS5pbnZlcnNlVHJhbnNmb3JtUG9pbnQ9ZnVuY3Rpb24oYSl7dmFyIHM9bmV3IG4odGhpcy5pbnZlcnNlVHJhbnNmb3JtWChhLngpLHRoaXMuaW52ZXJzZVRyYW5zZm9ybVkoYS55KSk7cmV0dXJuIHN9LHQuZXhwb3J0cz1pfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZCl7aWYoQXJyYXkuaXNBcnJheShkKSl7Zm9yKHZhciBwPTAsbT1BcnJheShkLmxlbmd0aCk7cDxkLmxlbmd0aDtwKyspbVtwXT1kW3BdO3JldHVybiBtfWVsc2UgcmV0dXJuIEFycmF5LmZyb20oZCl9byhuLCJfdG9Db25zdW1hYmxlQXJyYXkiKTt2YXIgaT1yKDE1KSxhPXIoNCkscz1yKDApLGw9cig4KSx1PXIoOSk7ZnVuY3Rpb24gaCgpe2kuY2FsbCh0aGlzKSx0aGlzLnVzZVNtYXJ0SWRlYWxFZGdlTGVuZ3RoQ2FsY3VsYXRpb249YS5ERUZBVUxUX1VTRV9TTUFSVF9JREVBTF9FREdFX0xFTkdUSF9DQUxDVUxBVElPTix0aGlzLmdyYXZpdHlDb25zdGFudD1hLkRFRkFVTFRfR1JBVklUWV9TVFJFTkdUSCx0aGlzLmNvbXBvdW5kR3Jhdml0eUNvbnN0YW50PWEuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1NUUkVOR1RILHRoaXMuZ3Jhdml0eVJhbmdlRmFjdG9yPWEuREVGQVVMVF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUix0aGlzLmNvbXBvdW5kR3Jhdml0eVJhbmdlRmFjdG9yPWEuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUix0aGlzLmRpc3BsYWNlbWVudFRocmVzaG9sZFBlck5vZGU9MyphLkRFRkFVTFRfRURHRV9MRU5HVEgvMTAwLHRoaXMuY29vbGluZ0ZhY3Rvcj1hLkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUwsdGhpcy5pbml0aWFsQ29vbGluZ0ZhY3Rvcj1hLkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUwsdGhpcy50b3RhbERpc3BsYWNlbWVudD0wLHRoaXMub2xkVG90YWxEaXNwbGFjZW1lbnQ9MCx0aGlzLm1heEl0ZXJhdGlvbnM9YS5NQVhfSVRFUkFUSU9OU31vKGgsIkZETGF5b3V0IiksaC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSk7Zm9yKHZhciBmIGluIGkpaFtmXT1pW2ZdO2gucHJvdG90eXBlLmluaXRQYXJhbWV0ZXJzPWZ1bmN0aW9uKCl7aS5wcm90b3R5cGUuaW5pdFBhcmFtZXRlcnMuY2FsbCh0aGlzLGFyZ3VtZW50cyksdGhpcy50b3RhbEl0ZXJhdGlvbnM9MCx0aGlzLm5vdEFuaW1hdGVkSXRlcmF0aW9ucz0wLHRoaXMudXNlRlJHcmlkVmFyaWFudD1hLkRFRkFVTFRfVVNFX1NNQVJUX1JFUFVMU0lPTl9SQU5HRV9DQUxDVUxBVElPTix0aGlzLmdyaWQ9W119LGgucHJvdG90eXBlLmNhbGNJZGVhbEVkZ2VMZW5ndGhzPWZ1bmN0aW9uKCl7Zm9yKHZhciBkLHAsbSxnLHksdix4LGI9dGhpcy5nZXRHcmFwaE1hbmFnZXIoKS5nZXRBbGxFZGdlcygpLFQ9MDtUPGIubGVuZ3RoO1QrKylkPWJbVF0scD1kLmlkZWFsTGVuZ3RoLGQuaXNJbnRlckdyYXBoJiYoZz1kLmdldFNvdXJjZSgpLHk9ZC5nZXRUYXJnZXQoKSx2PWQuZ2V0U291cmNlSW5MY2EoKS5nZXRFc3RpbWF0ZWRTaXplKCkseD1kLmdldFRhcmdldEluTGNhKCkuZ2V0RXN0aW1hdGVkU2l6ZSgpLHRoaXMudXNlU21hcnRJZGVhbEVkZ2VMZW5ndGhDYWxjdWxhdGlvbiYmKGQuaWRlYWxMZW5ndGgrPXYreC0yKnMuU0lNUExFX05PREVfU0laRSksbT1kLmdldExjYSgpLmdldEluY2x1c2lvblRyZWVEZXB0aCgpLGQuaWRlYWxMZW5ndGgrPXAqYS5QRVJfTEVWRUxfSURFQUxfRURHRV9MRU5HVEhfRkFDVE9SKihnLmdldEluY2x1c2lvblRyZWVEZXB0aCgpK3kuZ2V0SW5jbHVzaW9uVHJlZURlcHRoKCktMiptKSl9LGgucHJvdG90eXBlLmluaXRTcHJpbmdFbWJlZGRlcj1mdW5jdGlvbigpe3ZhciBkPXRoaXMuZ2V0QWxsTm9kZXMoKS5sZW5ndGg7dGhpcy5pbmNyZW1lbnRhbD8oZD5hLkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVCYmKHRoaXMuY29vbGluZ0ZhY3Rvcj1NYXRoLm1heCh0aGlzLmNvb2xpbmdGYWN0b3IqYS5DT09MSU5HX0FEQVBUQVRJT05fRkFDVE9SLHRoaXMuY29vbGluZ0ZhY3Rvci0oZC1hLkFEQVBUQVRJT05fTE9XRVJfTk9ERV9MSU1JVCkvKGEuQURBUFRBVElPTl9VUFBFUl9OT0RFX0xJTUlULWEuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUKSp0aGlzLmNvb2xpbmdGYWN0b3IqKDEtYS5DT09MSU5HX0FEQVBUQVRJT05fRkFDVE9SKSkpLHRoaXMubWF4Tm9kZURpc3BsYWNlbWVudD1hLk1BWF9OT0RFX0RJU1BMQUNFTUVOVF9JTkNSRU1FTlRBTCk6KGQ+YS5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQ/dGhpcy5jb29saW5nRmFjdG9yPU1hdGgubWF4KGEuQ09PTElOR19BREFQVEFUSU9OX0ZBQ1RPUiwxLShkLWEuQURBUFRBVElPTl9MT1dFUl9OT0RFX0xJTUlUKS8oYS5BREFQVEFUSU9OX1VQUEVSX05PREVfTElNSVQtYS5BREFQVEFUSU9OX0xPV0VSX05PREVfTElNSVQpKigxLWEuQ09PTElOR19BREFQVEFUSU9OX0ZBQ1RPUikpOnRoaXMuY29vbGluZ0ZhY3Rvcj0xLHRoaXMuaW5pdGlhbENvb2xpbmdGYWN0b3I9dGhpcy5jb29saW5nRmFjdG9yLHRoaXMubWF4Tm9kZURpc3BsYWNlbWVudD1hLk1BWF9OT0RFX0RJU1BMQUNFTUVOVCksdGhpcy5tYXhJdGVyYXRpb25zPU1hdGgubWF4KHRoaXMuZ2V0QWxsTm9kZXMoKS5sZW5ndGgqNSx0aGlzLm1heEl0ZXJhdGlvbnMpLHRoaXMuZGlzcGxhY2VtZW50VGhyZXNob2xkUGVyTm9kZT0zKmEuREVGQVVMVF9FREdFX0xFTkdUSC8xMDAsdGhpcy50b3RhbERpc3BsYWNlbWVudFRocmVzaG9sZD10aGlzLmRpc3BsYWNlbWVudFRocmVzaG9sZFBlck5vZGUqdGhpcy5nZXRBbGxOb2RlcygpLmxlbmd0aCx0aGlzLnJlcHVsc2lvblJhbmdlPXRoaXMuY2FsY1JlcHVsc2lvblJhbmdlKCl9LGgucHJvdG90eXBlLmNhbGNTcHJpbmdGb3JjZXM9ZnVuY3Rpb24oKXtmb3IodmFyIGQ9dGhpcy5nZXRBbGxFZGdlcygpLHAsbT0wO208ZC5sZW5ndGg7bSsrKXA9ZFttXSx0aGlzLmNhbGNTcHJpbmdGb3JjZShwLHAuaWRlYWxMZW5ndGgpfSxoLnByb3RvdHlwZS5jYWxjUmVwdWxzaW9uRm9yY2VzPWZ1bmN0aW9uKCl7dmFyIGQ9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOiEwLHA9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiExLG0sZyx5LHYseD10aGlzLmdldEFsbE5vZGVzKCksYjtpZih0aGlzLnVzZUZSR3JpZFZhcmlhbnQpZm9yKHRoaXMudG90YWxJdGVyYXRpb25zJWEuR1JJRF9DQUxDVUxBVElPTl9DSEVDS19QRVJJT0Q9PTEmJmQmJnRoaXMudXBkYXRlR3JpZCgpLGI9bmV3IFNldCxtPTA7bTx4Lmxlbmd0aDttKyspeT14W21dLHRoaXMuY2FsY3VsYXRlUmVwdWxzaW9uRm9yY2VPZkFOb2RlKHksYixkLHApLGIuYWRkKHkpO2Vsc2UgZm9yKG09MDttPHgubGVuZ3RoO20rKylmb3IoeT14W21dLGc9bSsxO2c8eC5sZW5ndGg7ZysrKXY9eFtnXSx5LmdldE93bmVyKCk9PXYuZ2V0T3duZXIoKSYmdGhpcy5jYWxjUmVwdWxzaW9uRm9yY2UoeSx2KX0saC5wcm90b3R5cGUuY2FsY0dyYXZpdGF0aW9uYWxGb3JjZXM9ZnVuY3Rpb24oKXtmb3IodmFyIGQscD10aGlzLmdldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKCksbT0wO208cC5sZW5ndGg7bSsrKWQ9cFttXSx0aGlzLmNhbGNHcmF2aXRhdGlvbmFsRm9yY2UoZCl9LGgucHJvdG90eXBlLm1vdmVOb2Rlcz1mdW5jdGlvbigpe2Zvcih2YXIgZD10aGlzLmdldEFsbE5vZGVzKCkscCxtPTA7bTxkLmxlbmd0aDttKyspcD1kW21dLHAubW92ZSgpfSxoLnByb3RvdHlwZS5jYWxjU3ByaW5nRm9yY2U9ZnVuY3Rpb24oZCxwKXt2YXIgbT1kLmdldFNvdXJjZSgpLGc9ZC5nZXRUYXJnZXQoKSx5LHYseCxiO2lmKHRoaXMudW5pZm9ybUxlYWZOb2RlU2l6ZXMmJm0uZ2V0Q2hpbGQoKT09bnVsbCYmZy5nZXRDaGlsZCgpPT1udWxsKWQudXBkYXRlTGVuZ3RoU2ltcGxlKCk7ZWxzZSBpZihkLnVwZGF0ZUxlbmd0aCgpLGQuaXNPdmVybGFwaW5nU291cmNlQW5kVGFyZ2V0KXJldHVybjt5PWQuZ2V0TGVuZ3RoKCkseSE9MCYmKHY9ZC5lZGdlRWxhc3RpY2l0eSooeS1wKSx4PXYqKGQubGVuZ3RoWC95KSxiPXYqKGQubGVuZ3RoWS95KSxtLnNwcmluZ0ZvcmNlWCs9eCxtLnNwcmluZ0ZvcmNlWSs9YixnLnNwcmluZ0ZvcmNlWC09eCxnLnNwcmluZ0ZvcmNlWS09Yil9LGgucHJvdG90eXBlLmNhbGNSZXB1bHNpb25Gb3JjZT1mdW5jdGlvbihkLHApe3ZhciBtPWQuZ2V0UmVjdCgpLGc9cC5nZXRSZWN0KCkseT1uZXcgQXJyYXkoMiksdj1uZXcgQXJyYXkoNCkseCxiLFQsUyx3LEUsXztpZihtLmludGVyc2VjdHMoZykpe2wuY2FsY1NlcGFyYXRpb25BbW91bnQobSxnLHksYS5ERUZBVUxUX0VER0VfTEVOR1RILzIpLEU9Mip5WzBdLF89Mip5WzFdO3ZhciBDPWQubm9PZkNoaWxkcmVuKnAubm9PZkNoaWxkcmVuLyhkLm5vT2ZDaGlsZHJlbitwLm5vT2ZDaGlsZHJlbik7ZC5yZXB1bHNpb25Gb3JjZVgtPUMqRSxkLnJlcHVsc2lvbkZvcmNlWS09QypfLHAucmVwdWxzaW9uRm9yY2VYKz1DKkUscC5yZXB1bHNpb25Gb3JjZVkrPUMqX31lbHNlIHRoaXMudW5pZm9ybUxlYWZOb2RlU2l6ZXMmJmQuZ2V0Q2hpbGQoKT09bnVsbCYmcC5nZXRDaGlsZCgpPT1udWxsPyh4PWcuZ2V0Q2VudGVyWCgpLW0uZ2V0Q2VudGVyWCgpLGI9Zy5nZXRDZW50ZXJZKCktbS5nZXRDZW50ZXJZKCkpOihsLmdldEludGVyc2VjdGlvbihtLGcsdikseD12WzJdLXZbMF0sYj12WzNdLXZbMV0pLE1hdGguYWJzKHgpPGEuTUlOX1JFUFVMU0lPTl9ESVNUJiYoeD11LnNpZ24oeCkqYS5NSU5fUkVQVUxTSU9OX0RJU1QpLE1hdGguYWJzKGIpPGEuTUlOX1JFUFVMU0lPTl9ESVNUJiYoYj11LnNpZ24oYikqYS5NSU5fUkVQVUxTSU9OX0RJU1QpLFQ9eCp4K2IqYixTPU1hdGguc3FydChUKSx3PShkLm5vZGVSZXB1bHNpb24vMitwLm5vZGVSZXB1bHNpb24vMikqZC5ub09mQ2hpbGRyZW4qcC5ub09mQ2hpbGRyZW4vVCxFPXcqeC9TLF89dypiL1MsZC5yZXB1bHNpb25Gb3JjZVgtPUUsZC5yZXB1bHNpb25Gb3JjZVktPV8scC5yZXB1bHNpb25Gb3JjZVgrPUUscC5yZXB1bHNpb25Gb3JjZVkrPV99LGgucHJvdG90eXBlLmNhbGNHcmF2aXRhdGlvbmFsRm9yY2U9ZnVuY3Rpb24oZCl7dmFyIHAsbSxnLHksdix4LGIsVDtwPWQuZ2V0T3duZXIoKSxtPShwLmdldFJpZ2h0KCkrcC5nZXRMZWZ0KCkpLzIsZz0ocC5nZXRUb3AoKStwLmdldEJvdHRvbSgpKS8yLHk9ZC5nZXRDZW50ZXJYKCktbSx2PWQuZ2V0Q2VudGVyWSgpLWcseD1NYXRoLmFicyh5KStkLmdldFdpZHRoKCkvMixiPU1hdGguYWJzKHYpK2QuZ2V0SGVpZ2h0KCkvMixkLmdldE93bmVyKCk9PXRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKT8oVD1wLmdldEVzdGltYXRlZFNpemUoKSp0aGlzLmdyYXZpdHlSYW5nZUZhY3RvciwoeD5UfHxiPlQpJiYoZC5ncmF2aXRhdGlvbkZvcmNlWD0tdGhpcy5ncmF2aXR5Q29uc3RhbnQqeSxkLmdyYXZpdGF0aW9uRm9yY2VZPS10aGlzLmdyYXZpdHlDb25zdGFudCp2KSk6KFQ9cC5nZXRFc3RpbWF0ZWRTaXplKCkqdGhpcy5jb21wb3VuZEdyYXZpdHlSYW5nZUZhY3RvciwoeD5UfHxiPlQpJiYoZC5ncmF2aXRhdGlvbkZvcmNlWD0tdGhpcy5ncmF2aXR5Q29uc3RhbnQqeSp0aGlzLmNvbXBvdW5kR3Jhdml0eUNvbnN0YW50LGQuZ3Jhdml0YXRpb25Gb3JjZVk9LXRoaXMuZ3Jhdml0eUNvbnN0YW50KnYqdGhpcy5jb21wb3VuZEdyYXZpdHlDb25zdGFudCkpfSxoLnByb3RvdHlwZS5pc0NvbnZlcmdlZD1mdW5jdGlvbigpe3ZhciBkLHA9ITE7cmV0dXJuIHRoaXMudG90YWxJdGVyYXRpb25zPnRoaXMubWF4SXRlcmF0aW9ucy8zJiYocD1NYXRoLmFicyh0aGlzLnRvdGFsRGlzcGxhY2VtZW50LXRoaXMub2xkVG90YWxEaXNwbGFjZW1lbnQpPDIpLGQ9dGhpcy50b3RhbERpc3BsYWNlbWVudDx0aGlzLnRvdGFsRGlzcGxhY2VtZW50VGhyZXNob2xkLHRoaXMub2xkVG90YWxEaXNwbGFjZW1lbnQ9dGhpcy50b3RhbERpc3BsYWNlbWVudCxkfHxwfSxoLnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKCl7dGhpcy5hbmltYXRpb25EdXJpbmdMYXlvdXQmJiF0aGlzLmlzU3ViTGF5b3V0JiYodGhpcy5ub3RBbmltYXRlZEl0ZXJhdGlvbnM9PXRoaXMuYW5pbWF0aW9uUGVyaW9kPyh0aGlzLnVwZGF0ZSgpLHRoaXMubm90QW5pbWF0ZWRJdGVyYXRpb25zPTApOnRoaXMubm90QW5pbWF0ZWRJdGVyYXRpb25zKyspfSxoLnByb3RvdHlwZS5jYWxjTm9PZkNoaWxkcmVuRm9yQWxsTm9kZXM9ZnVuY3Rpb24oKXtmb3IodmFyIGQscD10aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxOb2RlcygpLG09MDttPHAubGVuZ3RoO20rKylkPXBbbV0sZC5ub09mQ2hpbGRyZW49ZC5nZXROb09mQ2hpbGRyZW4oKX0saC5wcm90b3R5cGUuY2FsY0dyaWQ9ZnVuY3Rpb24oZCl7dmFyIHA9MCxtPTA7cD1wYXJzZUludChNYXRoLmNlaWwoKGQuZ2V0UmlnaHQoKS1kLmdldExlZnQoKSkvdGhpcy5yZXB1bHNpb25SYW5nZSkpLG09cGFyc2VJbnQoTWF0aC5jZWlsKChkLmdldEJvdHRvbSgpLWQuZ2V0VG9wKCkpL3RoaXMucmVwdWxzaW9uUmFuZ2UpKTtmb3IodmFyIGc9bmV3IEFycmF5KHApLHk9MDt5PHA7eSsrKWdbeV09bmV3IEFycmF5KG0pO2Zvcih2YXIgeT0wO3k8cDt5KyspZm9yKHZhciB2PTA7djxtO3YrKylnW3ldW3ZdPW5ldyBBcnJheTtyZXR1cm4gZ30saC5wcm90b3R5cGUuYWRkTm9kZVRvR3JpZD1mdW5jdGlvbihkLHAsbSl7dmFyIGc9MCx5PTAsdj0wLHg9MDtnPXBhcnNlSW50KE1hdGguZmxvb3IoKGQuZ2V0UmVjdCgpLngtcCkvdGhpcy5yZXB1bHNpb25SYW5nZSkpLHk9cGFyc2VJbnQoTWF0aC5mbG9vcigoZC5nZXRSZWN0KCkud2lkdGgrZC5nZXRSZWN0KCkueC1wKS90aGlzLnJlcHVsc2lvblJhbmdlKSksdj1wYXJzZUludChNYXRoLmZsb29yKChkLmdldFJlY3QoKS55LW0pL3RoaXMucmVwdWxzaW9uUmFuZ2UpKSx4PXBhcnNlSW50KE1hdGguZmxvb3IoKGQuZ2V0UmVjdCgpLmhlaWdodCtkLmdldFJlY3QoKS55LW0pL3RoaXMucmVwdWxzaW9uUmFuZ2UpKTtmb3IodmFyIGI9ZztiPD15O2IrKylmb3IodmFyIFQ9djtUPD14O1QrKyl0aGlzLmdyaWRbYl1bVF0ucHVzaChkKSxkLnNldEdyaWRDb29yZGluYXRlcyhnLHksdix4KX0saC5wcm90b3R5cGUudXBkYXRlR3JpZD1mdW5jdGlvbigpe3ZhciBkLHAsbT10aGlzLmdldEFsbE5vZGVzKCk7Zm9yKHRoaXMuZ3JpZD10aGlzLmNhbGNHcmlkKHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKSksZD0wO2Q8bS5sZW5ndGg7ZCsrKXA9bVtkXSx0aGlzLmFkZE5vZGVUb0dyaWQocCx0aGlzLmdyYXBoTWFuYWdlci5nZXRSb290KCkuZ2V0TGVmdCgpLHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5nZXRUb3AoKSl9LGgucHJvdG90eXBlLmNhbGN1bGF0ZVJlcHVsc2lvbkZvcmNlT2ZBTm9kZT1mdW5jdGlvbihkLHAsbSxnKXtpZih0aGlzLnRvdGFsSXRlcmF0aW9ucyVhLkdSSURfQ0FMQ1VMQVRJT05fQ0hFQ0tfUEVSSU9EPT0xJiZtfHxnKXt2YXIgeT1uZXcgU2V0O2Quc3Vycm91bmRpbmc9bmV3IEFycmF5O2Zvcih2YXIgdix4PXRoaXMuZ3JpZCxiPWQuc3RhcnRYLTE7YjxkLmZpbmlzaFgrMjtiKyspZm9yKHZhciBUPWQuc3RhcnRZLTE7VDxkLmZpbmlzaFkrMjtUKyspaWYoIShiPDB8fFQ8MHx8Yj49eC5sZW5ndGh8fFQ+PXhbMF0ubGVuZ3RoKSl7Zm9yKHZhciBTPTA7Uzx4W2JdW1RdLmxlbmd0aDtTKyspaWYodj14W2JdW1RdW1NdLCEoZC5nZXRPd25lcigpIT12LmdldE93bmVyKCl8fGQ9PXYpJiYhcC5oYXModikmJiF5Lmhhcyh2KSl7dmFyIHc9TWF0aC5hYnMoZC5nZXRDZW50ZXJYKCktdi5nZXRDZW50ZXJYKCkpLShkLmdldFdpZHRoKCkvMit2LmdldFdpZHRoKCkvMiksRT1NYXRoLmFicyhkLmdldENlbnRlclkoKS12LmdldENlbnRlclkoKSktKGQuZ2V0SGVpZ2h0KCkvMit2LmdldEhlaWdodCgpLzIpO3c8PXRoaXMucmVwdWxzaW9uUmFuZ2UmJkU8PXRoaXMucmVwdWxzaW9uUmFuZ2UmJnkuYWRkKHYpfX1kLnN1cnJvdW5kaW5nPVtdLmNvbmNhdChuKHkpKX1mb3IoYj0wO2I8ZC5zdXJyb3VuZGluZy5sZW5ndGg7YisrKXRoaXMuY2FsY1JlcHVsc2lvbkZvcmNlKGQsZC5zdXJyb3VuZGluZ1tiXSl9LGgucHJvdG90eXBlLmNhbGNSZXB1bHNpb25SYW5nZT1mdW5jdGlvbigpe3JldHVybiAwfSx0LmV4cG9ydHM9aH0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDEpLGk9cig0KTtmdW5jdGlvbiBhKGwsdSxoKXtuLmNhbGwodGhpcyxsLHUsaCksdGhpcy5pZGVhbExlbmd0aD1pLkRFRkFVTFRfRURHRV9MRU5HVEgsdGhpcy5lZGdlRWxhc3RpY2l0eT1pLkRFRkFVTFRfU1BSSU5HX1NUUkVOR1RIfW8oYSwiRkRMYXlvdXRFZGdlIiksYS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSk7Zm9yKHZhciBzIGluIG4pYVtzXT1uW3NdO3QuZXhwb3J0cz1hfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMyksaT1yKDQpO2Z1bmN0aW9uIGEobCx1LGgsZil7bi5jYWxsKHRoaXMsbCx1LGgsZiksdGhpcy5ub2RlUmVwdWxzaW9uPWkuREVGQVVMVF9SRVBVTFNJT05fU1RSRU5HVEgsdGhpcy5zcHJpbmdGb3JjZVg9MCx0aGlzLnNwcmluZ0ZvcmNlWT0wLHRoaXMucmVwdWxzaW9uRm9yY2VYPTAsdGhpcy5yZXB1bHNpb25Gb3JjZVk9MCx0aGlzLmdyYXZpdGF0aW9uRm9yY2VYPTAsdGhpcy5ncmF2aXRhdGlvbkZvcmNlWT0wLHRoaXMuZGlzcGxhY2VtZW50WD0wLHRoaXMuZGlzcGxhY2VtZW50WT0wLHRoaXMuc3RhcnRYPTAsdGhpcy5maW5pc2hYPTAsdGhpcy5zdGFydFk9MCx0aGlzLmZpbmlzaFk9MCx0aGlzLnN1cnJvdW5kaW5nPVtdfW8oYSwiRkRMYXlvdXROb2RlIiksYS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSk7Zm9yKHZhciBzIGluIG4pYVtzXT1uW3NdO2EucHJvdG90eXBlLnNldEdyaWRDb29yZGluYXRlcz1mdW5jdGlvbihsLHUsaCxmKXt0aGlzLnN0YXJ0WD1sLHRoaXMuZmluaXNoWD11LHRoaXMuc3RhcnRZPWgsdGhpcy5maW5pc2hZPWZ9LHQuZXhwb3J0cz1hfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oaSxhKXt0aGlzLndpZHRoPTAsdGhpcy5oZWlnaHQ9MCxpIT09bnVsbCYmYSE9PW51bGwmJih0aGlzLmhlaWdodD1hLHRoaXMud2lkdGg9aSl9byhuLCJEaW1lbnNpb25EIiksbi5wcm90b3R5cGUuZ2V0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53aWR0aH0sbi5wcm90b3R5cGUuc2V0V2lkdGg9ZnVuY3Rpb24oaSl7dGhpcy53aWR0aD1pfSxuLnByb3RvdHlwZS5nZXRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oZWlnaHR9LG4ucHJvdG90eXBlLnNldEhlaWdodD1mdW5jdGlvbihpKXt0aGlzLmhlaWdodD1pfSx0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDE0KTtmdW5jdGlvbiBpKCl7dGhpcy5tYXA9e30sdGhpcy5rZXlzPVtdfW8oaSwiSGFzaE1hcCIpLGkucHJvdG90eXBlLnB1dD1mdW5jdGlvbihhLHMpe3ZhciBsPW4uY3JlYXRlSUQoYSk7dGhpcy5jb250YWlucyhsKXx8KHRoaXMubWFwW2xdPXMsdGhpcy5rZXlzLnB1c2goYSkpfSxpLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbihhKXt2YXIgcz1uLmNyZWF0ZUlEKGEpO3JldHVybiB0aGlzLm1hcFthXSE9bnVsbH0saS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGEpe3ZhciBzPW4uY3JlYXRlSUQoYSk7cmV0dXJuIHRoaXMubWFwW3NdfSxpLnByb3RvdHlwZS5rZXlTZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5rZXlzfSx0LmV4cG9ydHM9aX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDE0KTtmdW5jdGlvbiBpKCl7dGhpcy5zZXQ9e319byhpLCJIYXNoU2V0IiksaS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGEpe3ZhciBzPW4uY3JlYXRlSUQoYSk7dGhpcy5jb250YWlucyhzKXx8KHRoaXMuc2V0W3NdPWEpfSxpLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oYSl7ZGVsZXRlIHRoaXMuc2V0W24uY3JlYXRlSUQoYSldfSxpLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuc2V0PXt9fSxpLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5zZXRbbi5jcmVhdGVJRChhKV09PWF9LGkucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaXplKCk9PT0wfSxpLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuc2V0KS5sZW5ndGh9LGkucHJvdG90eXBlLmFkZEFsbFRvPWZ1bmN0aW9uKGEpe2Zvcih2YXIgcz1PYmplY3Qua2V5cyh0aGlzLnNldCksbD1zLmxlbmd0aCx1PTA7dTxsO3UrKylhLnB1c2godGhpcy5zZXRbc1t1XV0pfSxpLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuc2V0KS5sZW5ndGh9LGkucHJvdG90eXBlLmFkZEFsbD1mdW5jdGlvbihhKXtmb3IodmFyIHM9YS5sZW5ndGgsbD0wO2w8cztsKyspe3ZhciB1PWFbbF07dGhpcy5hZGQodSl9fSx0LmV4cG9ydHM9aX0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKCl7fW8obiwiTWF0cml4Iiksbi5tdWx0TWF0PWZ1bmN0aW9uKGksYSl7Zm9yKHZhciBzPVtdLGw9MDtsPGkubGVuZ3RoO2wrKyl7c1tsXT1bXTtmb3IodmFyIHU9MDt1PGFbMF0ubGVuZ3RoO3UrKyl7c1tsXVt1XT0wO2Zvcih2YXIgaD0wO2g8aVswXS5sZW5ndGg7aCsrKXNbbF1bdV0rPWlbbF1baF0qYVtoXVt1XX19cmV0dXJuIHN9LG4udHJhbnNwb3NlPWZ1bmN0aW9uKGkpe2Zvcih2YXIgYT1bXSxzPTA7czxpWzBdLmxlbmd0aDtzKyspe2Fbc109W107Zm9yKHZhciBsPTA7bDxpLmxlbmd0aDtsKyspYVtzXVtsXT1pW2xdW3NdfXJldHVybiBhfSxuLm11bHRDb25zPWZ1bmN0aW9uKGksYSl7Zm9yKHZhciBzPVtdLGw9MDtsPGkubGVuZ3RoO2wrKylzW2xdPWlbbF0qYTtyZXR1cm4gc30sbi5taW51c09wPWZ1bmN0aW9uKGksYSl7Zm9yKHZhciBzPVtdLGw9MDtsPGkubGVuZ3RoO2wrKylzW2xdPWlbbF0tYVtsXTtyZXR1cm4gc30sbi5kb3RQcm9kdWN0PWZ1bmN0aW9uKGksYSl7Zm9yKHZhciBzPTAsbD0wO2w8aS5sZW5ndGg7bCsrKXMrPWlbbF0qYVtsXTtyZXR1cm4gc30sbi5tYWc9ZnVuY3Rpb24oaSl7cmV0dXJuIE1hdGguc3FydCh0aGlzLmRvdFByb2R1Y3QoaSxpKSl9LG4ubm9ybWFsaXplPWZ1bmN0aW9uKGkpe2Zvcih2YXIgYT1bXSxzPXRoaXMubWFnKGkpLGw9MDtsPGkubGVuZ3RoO2wrKylhW2xdPWlbbF0vcztyZXR1cm4gYX0sbi5tdWx0R2FtbWE9ZnVuY3Rpb24oaSl7Zm9yKHZhciBhPVtdLHM9MCxsPTA7bDxpLmxlbmd0aDtsKyspcys9aVtsXTtzKj0tMS9pLmxlbmd0aDtmb3IodmFyIHU9MDt1PGkubGVuZ3RoO3UrKylhW3VdPXMraVt1XTtyZXR1cm4gYX0sbi5tdWx0TD1mdW5jdGlvbihpLGEscyl7Zm9yKHZhciBsPVtdLHU9W10saD1bXSxmPTA7ZjxhWzBdLmxlbmd0aDtmKyspe2Zvcih2YXIgZD0wLHA9MDtwPGEubGVuZ3RoO3ArKylkKz0tLjUqYVtwXVtmXSppW3BdO3VbZl09ZH1mb3IodmFyIG09MDttPHMubGVuZ3RoO20rKyl7Zm9yKHZhciBnPTAseT0wO3k8cy5sZW5ndGg7eSsrKWcrPXNbbV1beV0qdVt5XTtoW21dPWd9Zm9yKHZhciB2PTA7djxhLmxlbmd0aDt2Kyspe2Zvcih2YXIgeD0wLGI9MDtiPGFbMF0ubGVuZ3RoO2IrKyl4Kz1hW3ZdW2JdKmhbYl07bFt2XT14fXJldHVybiBsfSx0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1mdW5jdGlvbigpe2Z1bmN0aW9uIGwodSxoKXtmb3IodmFyIGY9MDtmPGgubGVuZ3RoO2YrKyl7dmFyIGQ9aFtmXTtkLmVudW1lcmFibGU9ZC5lbnVtZXJhYmxlfHwhMSxkLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZCYmKGQud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1LGQua2V5LGQpfX1yZXR1cm4gbyhsLCJkZWZpbmVQcm9wZXJ0aWVzIiksZnVuY3Rpb24odSxoLGYpe3JldHVybiBoJiZsKHUucHJvdG90eXBlLGgpLGYmJmwodSxmKSx1fX0oKTtmdW5jdGlvbiBpKGwsdSl7aWYoIShsIGluc3RhbmNlb2YgdSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9byhpLCJfY2xhc3NDYWxsQ2hlY2siKTt2YXIgYT1yKDExKSxzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbCh1LGgpe2kodGhpcyxsKSwoaCE9PW51bGx8fGghPT12b2lkIDApJiYodGhpcy5jb21wYXJlRnVuY3Rpb249dGhpcy5fZGVmYXVsdENvbXBhcmVGdW5jdGlvbik7dmFyIGY9dm9pZCAwO3UgaW5zdGFuY2VvZiBhP2Y9dS5zaXplKCk6Zj11Lmxlbmd0aCx0aGlzLl9xdWlja3NvcnQodSwwLGYtMSl9cmV0dXJuIG8obCwiUXVpY2tzb3J0IiksbihsLFt7a2V5OiJfcXVpY2tzb3J0Iix2YWx1ZTpvKGZ1bmN0aW9uKGgsZixkKXtpZihmPGQpe3ZhciBwPXRoaXMuX3BhcnRpdGlvbihoLGYsZCk7dGhpcy5fcXVpY2tzb3J0KGgsZixwKSx0aGlzLl9xdWlja3NvcnQoaCxwKzEsZCl9fSwiX3F1aWNrc29ydCIpfSx7a2V5OiJfcGFydGl0aW9uIix2YWx1ZTpvKGZ1bmN0aW9uKGgsZixkKXtmb3IodmFyIHA9dGhpcy5fZ2V0KGgsZiksbT1mLGc9ZDs7KXtmb3IoO3RoaXMuY29tcGFyZUZ1bmN0aW9uKHAsdGhpcy5fZ2V0KGgsZykpOylnLS07Zm9yKDt0aGlzLmNvbXBhcmVGdW5jdGlvbih0aGlzLl9nZXQoaCxtKSxwKTspbSsrO2lmKG08Zyl0aGlzLl9zd2FwKGgsbSxnKSxtKyssZy0tO2Vsc2UgcmV0dXJuIGd9fSwiX3BhcnRpdGlvbiIpfSx7a2V5OiJfZ2V0Iix2YWx1ZTpvKGZ1bmN0aW9uKGgsZil7cmV0dXJuIGggaW5zdGFuY2VvZiBhP2guZ2V0X29iamVjdF9hdChmKTpoW2ZdfSwiX2dldCIpfSx7a2V5OiJfc2V0Iix2YWx1ZTpvKGZ1bmN0aW9uKGgsZixkKXtoIGluc3RhbmNlb2YgYT9oLnNldF9vYmplY3RfYXQoZixkKTpoW2ZdPWR9LCJfc2V0Iil9LHtrZXk6Il9zd2FwIix2YWx1ZTpvKGZ1bmN0aW9uKGgsZixkKXt2YXIgcD10aGlzLl9nZXQoaCxmKTt0aGlzLl9zZXQoaCxmLHRoaXMuX2dldChoLGQpKSx0aGlzLl9zZXQoaCxkLHApfSwiX3N3YXAiKX0se2tleToiX2RlZmF1bHRDb21wYXJlRnVuY3Rpb24iLHZhbHVlOm8oZnVuY3Rpb24oaCxmKXtyZXR1cm4gZj5ofSwiX2RlZmF1bHRDb21wYXJlRnVuY3Rpb24iKX1dKSxsfSgpO3QuZXhwb3J0cz1zfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXt9byhuLCJTVkQiKSxuLnN2ZD1mdW5jdGlvbihpKXt0aGlzLlU9bnVsbCx0aGlzLlY9bnVsbCx0aGlzLnM9bnVsbCx0aGlzLm09MCx0aGlzLm49MCx0aGlzLm09aS5sZW5ndGgsdGhpcy5uPWlbMF0ubGVuZ3RoO3ZhciBhPU1hdGgubWluKHRoaXMubSx0aGlzLm4pO3RoaXMucz1mdW5jdGlvbihidCl7Zm9yKHZhciB1dD1bXTtidC0tID4wOyl1dC5wdXNoKDApO3JldHVybiB1dH0oTWF0aC5taW4odGhpcy5tKzEsdGhpcy5uKSksdGhpcy5VPWZ1bmN0aW9uKGJ0KXt2YXIgdXQ9byhmdW5jdGlvbiBTdChmdCl7aWYoZnQubGVuZ3RoPT0wKXJldHVybiAwO2Zvcih2YXIgdnQ9W10sbnQ9MDtudDxmdFswXTtudCsrKXZ0LnB1c2goU3QoZnQuc2xpY2UoMSkpKTtyZXR1cm4gdnR9LCJhbGxvY2F0ZSIpO3JldHVybiB1dChidCl9KFt0aGlzLm0sYV0pLHRoaXMuVj1mdW5jdGlvbihidCl7dmFyIHV0PW8oZnVuY3Rpb24gU3QoZnQpe2lmKGZ0Lmxlbmd0aD09MClyZXR1cm4gMDtmb3IodmFyIHZ0PVtdLG50PTA7bnQ8ZnRbMF07bnQrKyl2dC5wdXNoKFN0KGZ0LnNsaWNlKDEpKSk7cmV0dXJuIHZ0fSwiYWxsb2NhdGUiKTtyZXR1cm4gdXQoYnQpfShbdGhpcy5uLHRoaXMubl0pO2Zvcih2YXIgcz1mdW5jdGlvbihidCl7Zm9yKHZhciB1dD1bXTtidC0tID4wOyl1dC5wdXNoKDApO3JldHVybiB1dH0odGhpcy5uKSxsPWZ1bmN0aW9uKGJ0KXtmb3IodmFyIHV0PVtdO2J0LS0gPjA7KXV0LnB1c2goMCk7cmV0dXJuIHV0fSh0aGlzLm0pLHU9ITAsaD0hMCxmPU1hdGgubWluKHRoaXMubS0xLHRoaXMubiksZD1NYXRoLm1heCgwLE1hdGgubWluKHRoaXMubi0yLHRoaXMubSkpLHA9MDtwPE1hdGgubWF4KGYsZCk7cCsrKXtpZihwPGYpe3RoaXMuc1twXT0wO2Zvcih2YXIgbT1wO208dGhpcy5tO20rKyl0aGlzLnNbcF09bi5oeXBvdCh0aGlzLnNbcF0saVttXVtwXSk7aWYodGhpcy5zW3BdIT09MCl7aVtwXVtwXTwwJiYodGhpcy5zW3BdPS10aGlzLnNbcF0pO2Zvcih2YXIgZz1wO2c8dGhpcy5tO2crKylpW2ddW3BdLz10aGlzLnNbcF07aVtwXVtwXSs9MX10aGlzLnNbcF09LXRoaXMuc1twXX1mb3IodmFyIHk9cCsxO3k8dGhpcy5uO3krKyl7aWYoZnVuY3Rpb24oYnQsdXQpe3JldHVybiBidCYmdXR9KHA8Zix0aGlzLnNbcF0hPT0wKSl7Zm9yKHZhciB2PTAseD1wO3g8dGhpcy5tO3grKyl2Kz1pW3hdW3BdKmlbeF1beV07dj0tdi9pW3BdW3BdO2Zvcih2YXIgYj1wO2I8dGhpcy5tO2IrKylpW2JdW3ldKz12KmlbYl1bcF19c1t5XT1pW3BdW3ldfWlmKGZ1bmN0aW9uKGJ0LHV0KXtyZXR1cm4gYnQmJnV0fSh1LHA8ZikpZm9yKHZhciBUPXA7VDx0aGlzLm07VCsrKXRoaXMuVVtUXVtwXT1pW1RdW3BdO2lmKHA8ZCl7c1twXT0wO2Zvcih2YXIgUz1wKzE7Uzx0aGlzLm47UysrKXNbcF09bi5oeXBvdChzW3BdLHNbU10pO2lmKHNbcF0hPT0wKXtzW3ArMV08MCYmKHNbcF09LXNbcF0pO2Zvcih2YXIgdz1wKzE7dzx0aGlzLm47dysrKXNbd10vPXNbcF07c1twKzFdKz0xfWlmKHNbcF09LXNbcF0sZnVuY3Rpb24oYnQsdXQpe3JldHVybiBidCYmdXR9KHArMTx0aGlzLm0sc1twXSE9PTApKXtmb3IodmFyIEU9cCsxO0U8dGhpcy5tO0UrKylsW0VdPTA7Zm9yKHZhciBfPXArMTtfPHRoaXMubjtfKyspZm9yKHZhciBDPXArMTtDPHRoaXMubTtDKyspbFtDXSs9c1tfXSppW0NdW19dO2Zvcih2YXIgRD1wKzE7RDx0aGlzLm47RCsrKWZvcih2YXIgTz0tc1tEXS9zW3ArMV0sUj1wKzE7Ujx0aGlzLm07UisrKWlbUl1bRF0rPU8qbFtSXX1pZihoKWZvcih2YXIgaz1wKzE7azx0aGlzLm47aysrKXRoaXMuVltrXVtwXT1zW2tdfX12YXIgTD1NYXRoLm1pbih0aGlzLm4sdGhpcy5tKzEpO2lmKGY8dGhpcy5uJiYodGhpcy5zW2ZdPWlbZl1bZl0pLHRoaXMubTxMJiYodGhpcy5zW0wtMV09MCksZCsxPEwmJihzW2RdPWlbZF1bTC0xXSksc1tMLTFdPTAsdSl7Zm9yKHZhciBBPWY7QTxhO0ErKyl7Zm9yKHZhciBJPTA7STx0aGlzLm07SSsrKXRoaXMuVVtJXVtBXT0wO3RoaXMuVVtBXVtBXT0xfWZvcih2YXIgTT1mLTE7TT49MDtNLS0paWYodGhpcy5zW01dIT09MCl7Zm9yKHZhciBQPU0rMTtQPGE7UCsrKXtmb3IodmFyIEI9MCxGPU07Rjx0aGlzLm07RisrKUIrPXRoaXMuVVtGXVtNXSp0aGlzLlVbRl1bUF07Qj0tQi90aGlzLlVbTV1bTV07Zm9yKHZhciB6PU07ejx0aGlzLm07eisrKXRoaXMuVVt6XVtQXSs9Qip0aGlzLlVbel1bTV19Zm9yKHZhciAkPU07JDx0aGlzLm07JCsrKXRoaXMuVVskXVtNXT0tdGhpcy5VWyRdW01dO3RoaXMuVVtNXVtNXT0xK3RoaXMuVVtNXVtNXTtmb3IodmFyIFU9MDtVPE0tMTtVKyspdGhpcy5VW1VdW01dPTB9ZWxzZXtmb3IodmFyIEs9MDtLPHRoaXMubTtLKyspdGhpcy5VW0tdW01dPTA7dGhpcy5VW01dW01dPTF9fWlmKGgpZm9yKHZhciBlZT10aGlzLm4tMTtlZT49MDtlZS0tKXtpZihmdW5jdGlvbihidCx1dCl7cmV0dXJuIGJ0JiZ1dH0oZWU8ZCxzW2VlXSE9PTApKWZvcih2YXIgWT1lZSsxO1k8YTtZKyspe2Zvcih2YXIgY2U9MCxaPWVlKzE7Wjx0aGlzLm47WisrKWNlKz10aGlzLlZbWl1bZWVdKnRoaXMuVltaXVtZXTtjZT0tY2UvdGhpcy5WW2VlKzFdW2VlXTtmb3IodmFyIHVlPWVlKzE7dWU8dGhpcy5uO3VlKyspdGhpcy5WW3VlXVtZXSs9Y2UqdGhpcy5WW3VlXVtlZV19Zm9yKHZhciBRPTA7UTx0aGlzLm47USsrKXRoaXMuVltRXVtlZV09MDt0aGlzLlZbZWVdW2VlXT0xfWZvcih2YXIgaj1MLTEsbmU9MCx0ZT1NYXRoLnBvdygyLC01MiksaGU9TWF0aC5wb3coMiwtOTY2KTtMPjA7KXt2YXIgbGU9dm9pZCAwLEo9dm9pZCAwO2ZvcihsZT1MLTI7bGU+PS0xJiZsZSE9PS0xO2xlLS0paWYoTWF0aC5hYnMoc1tsZV0pPD1oZSt0ZSooTWF0aC5hYnModGhpcy5zW2xlXSkrTWF0aC5hYnModGhpcy5zW2xlKzFdKSkpe3NbbGVdPTA7YnJlYWt9aWYobGU9PT1MLTIpSj00O2Vsc2V7dmFyIFNlPXZvaWQgMDtmb3IoU2U9TC0xO1NlPj1sZSYmU2UhPT1sZTtTZS0tKXt2YXIgc2U9KFNlIT09TD9NYXRoLmFicyhzW1NlXSk6MCkrKFNlIT09bGUrMT9NYXRoLmFicyhzW1NlLTFdKTowKTtpZihNYXRoLmFicyh0aGlzLnNbU2VdKTw9aGUrdGUqc2Upe3RoaXMuc1tTZV09MDticmVha319U2U9PT1sZT9KPTM6U2U9PT1MLTE/Sj0xOihKPTIsbGU9U2UpfXN3aXRjaChsZSsrLEope2Nhc2UgMTp7dmFyIGFlPXNbTC0yXTtzW0wtMl09MDtmb3IodmFyIE9lPUwtMjtPZT49bGU7T2UtLSl7dmFyIHllPW4uaHlwb3QodGhpcy5zW09lXSxhZSksQmU9dGhpcy5zW09lXS95ZSxIZT1hZS95ZTtpZih0aGlzLnNbT2VdPXllLE9lIT09bGUmJihhZT0tSGUqc1tPZS0xXSxzW09lLTFdPUJlKnNbT2UtMV0pLGgpZm9yKHZhciB6ZT0wO3plPHRoaXMubjt6ZSsrKXllPUJlKnRoaXMuVlt6ZV1bT2VdK0hlKnRoaXMuVlt6ZV1bTC0xXSx0aGlzLlZbemVdW0wtMV09LUhlKnRoaXMuVlt6ZV1bT2VdK0JlKnRoaXMuVlt6ZV1bTC0xXSx0aGlzLlZbemVdW09lXT15ZX19YnJlYWs7Y2FzZSAyOnt2YXIgTGU9c1tsZS0xXTtzW2xlLTFdPTA7Zm9yKHZhciBJZT1sZTtJZTxMO0llKyspe3ZhciB4ZT1uLmh5cG90KHRoaXMuc1tJZV0sTGUpLHE9dGhpcy5zW0llXS94ZSxkZT1MZS94ZTtpZih0aGlzLnNbSWVdPXhlLExlPS1kZSpzW0llXSxzW0llXT1xKnNbSWVdLHUpZm9yKHZhciBpZT0wO2llPHRoaXMubTtpZSsrKXhlPXEqdGhpcy5VW2llXVtJZV0rZGUqdGhpcy5VW2llXVtsZS0xXSx0aGlzLlVbaWVdW2xlLTFdPS1kZSp0aGlzLlVbaWVdW0llXStxKnRoaXMuVVtpZV1bbGUtMV0sdGhpcy5VW2llXVtJZV09eGV9fWJyZWFrO2Nhc2UgMzp7dmFyIG9lPU1hdGgubWF4KE1hdGgubWF4KE1hdGgubWF4KE1hdGgubWF4KE1hdGguYWJzKHRoaXMuc1tMLTFdKSxNYXRoLmFicyh0aGlzLnNbTC0yXSkpLE1hdGguYWJzKHNbTC0yXSkpLE1hdGguYWJzKHRoaXMuc1tsZV0pKSxNYXRoLmFicyhzW2xlXSkpLFY9dGhpcy5zW0wtMV0vb2UsVGU9dGhpcy5zW0wtMl0vb2UsVz1zW0wtMl0vb2UscGU9dGhpcy5zW2xlXS9vZSx2ZT1zW2xlXS9vZSxQZT0oKFRlK1YpKihUZS1WKStXKlcpLzIsX2U9VipXKihWKlcpLGJlPTA7KGZ1bmN0aW9uKGJ0LHV0KXtyZXR1cm4gYnR8fHV0fSkoUGUhPT0wLF9lIT09MCkmJihiZT1NYXRoLnNxcnQoUGUqUGUrX2UpLFBlPDAmJihiZT0tYmUpLGJlPV9lLyhQZStiZSkpO2Zvcih2YXIgVmU9KHBlK1YpKihwZS1WKStiZSxEZT1wZSp2ZSxxZT1sZTtxZTxMLTE7cWUrKyl7dmFyIGF0PW4uaHlwb3QoVmUsRGUpLFJ0PVZlL2F0LHN0PURlL2F0O2lmKHFlIT09bGUmJihzW3FlLTFdPWF0KSxWZT1SdCp0aGlzLnNbcWVdK3N0KnNbcWVdLHNbcWVdPVJ0KnNbcWVdLXN0KnRoaXMuc1txZV0sRGU9c3QqdGhpcy5zW3FlKzFdLHRoaXMuc1txZSsxXT1SdCp0aGlzLnNbcWUrMV0saClmb3IodmFyIFVlPTA7VWU8dGhpcy5uO1VlKyspYXQ9UnQqdGhpcy5WW1VlXVtxZV0rc3QqdGhpcy5WW1VlXVtxZSsxXSx0aGlzLlZbVWVdW3FlKzFdPS1zdCp0aGlzLlZbVWVdW3FlXStSdCp0aGlzLlZbVWVdW3FlKzFdLHRoaXMuVltVZV1bcWVdPWF0O2lmKGF0PW4uaHlwb3QoVmUsRGUpLFJ0PVZlL2F0LHN0PURlL2F0LHRoaXMuc1txZV09YXQsVmU9UnQqc1txZV0rc3QqdGhpcy5zW3FlKzFdLHRoaXMuc1txZSsxXT0tc3Qqc1txZV0rUnQqdGhpcy5zW3FlKzFdLERlPXN0KnNbcWUrMV0sc1txZSsxXT1SdCpzW3FlKzFdLHUmJnFlPHRoaXMubS0xKWZvcih2YXIgY3Q9MDtjdDx0aGlzLm07Y3QrKylhdD1SdCp0aGlzLlVbY3RdW3FlXStzdCp0aGlzLlVbY3RdW3FlKzFdLHRoaXMuVVtjdF1bcWUrMV09LXN0KnRoaXMuVVtjdF1bcWVdK1J0KnRoaXMuVVtjdF1bcWUrMV0sdGhpcy5VW2N0XVtxZV09YXR9c1tMLTJdPVZlLG5lPW5lKzF9YnJlYWs7Y2FzZSA0OntpZih0aGlzLnNbbGVdPD0wJiYodGhpcy5zW2xlXT10aGlzLnNbbGVdPDA/LXRoaXMuc1tsZV06MCxoKSlmb3IodmFyIFdlPTA7V2U8PWo7V2UrKyl0aGlzLlZbV2VdW2xlXT0tdGhpcy5WW1dlXVtsZV07Zm9yKDtsZTxqJiYhKHRoaXMuc1tsZV0+PXRoaXMuc1tsZSsxXSk7KXt2YXIgb3Q9dGhpcy5zW2xlXTtpZih0aGlzLnNbbGVdPXRoaXMuc1tsZSsxXSx0aGlzLnNbbGUrMV09b3QsaCYmbGU8dGhpcy5uLTEpZm9yKHZhciBZdD0wO1l0PHRoaXMubjtZdCsrKW90PXRoaXMuVltZdF1bbGUrMV0sdGhpcy5WW1l0XVtsZSsxXT10aGlzLlZbWXRdW2xlXSx0aGlzLlZbWXRdW2xlXT1vdDtpZih1JiZsZTx0aGlzLm0tMSlmb3IodmFyIFR0PTA7VHQ8dGhpcy5tO1R0Kyspb3Q9dGhpcy5VW1R0XVtsZSsxXSx0aGlzLlVbVHRdW2xlKzFdPXRoaXMuVVtUdF1bbGVdLHRoaXMuVVtUdF1bbGVdPW90O2xlKyt9bmU9MCxMLS19YnJlYWt9fXZhciBNdD17VTp0aGlzLlUsVjp0aGlzLlYsUzp0aGlzLnN9O3JldHVybiBNdH0sbi5oeXBvdD1mdW5jdGlvbihpLGEpe3ZhciBzPXZvaWQgMDtyZXR1cm4gTWF0aC5hYnMoaSk+TWF0aC5hYnMoYSk/KHM9YS9pLHM9TWF0aC5hYnMoaSkqTWF0aC5zcXJ0KDErcypzKSk6YSE9MD8ocz1pL2Escz1NYXRoLmFicyhhKSpNYXRoLnNxcnQoMStzKnMpKTpzPTAsc30sdC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49ZnVuY3Rpb24oKXtmdW5jdGlvbiBzKGwsdSl7Zm9yKHZhciBoPTA7aDx1Lmxlbmd0aDtoKyspe3ZhciBmPXVbaF07Zi5lbnVtZXJhYmxlPWYuZW51bWVyYWJsZXx8ITEsZi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGYmJihmLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobCxmLmtleSxmKX19cmV0dXJuIG8ocywiZGVmaW5lUHJvcGVydGllcyIpLGZ1bmN0aW9uKGwsdSxoKXtyZXR1cm4gdSYmcyhsLnByb3RvdHlwZSx1KSxoJiZzKGwsaCksbH19KCk7ZnVuY3Rpb24gaShzLGwpe2lmKCEocyBpbnN0YW5jZW9mIGwpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfW8oaSwiX2NsYXNzQ2FsbENoZWNrIik7dmFyIGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBzKGwsdSl7dmFyIGg9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOjEsZj1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106LTEsZD1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06LTE7aSh0aGlzLHMpLHRoaXMuc2VxdWVuY2UxPWwsdGhpcy5zZXF1ZW5jZTI9dSx0aGlzLm1hdGNoX3Njb3JlPWgsdGhpcy5taXNtYXRjaF9wZW5hbHR5PWYsdGhpcy5nYXBfcGVuYWx0eT1kLHRoaXMuaU1heD1sLmxlbmd0aCsxLHRoaXMuak1heD11Lmxlbmd0aCsxLHRoaXMuZ3JpZD1uZXcgQXJyYXkodGhpcy5pTWF4KTtmb3IodmFyIHA9MDtwPHRoaXMuaU1heDtwKyspe3RoaXMuZ3JpZFtwXT1uZXcgQXJyYXkodGhpcy5qTWF4KTtmb3IodmFyIG09MDttPHRoaXMuak1heDttKyspdGhpcy5ncmlkW3BdW21dPTB9dGhpcy50cmFjZWJhY2tHcmlkPW5ldyBBcnJheSh0aGlzLmlNYXgpO2Zvcih2YXIgZz0wO2c8dGhpcy5pTWF4O2crKyl7dGhpcy50cmFjZWJhY2tHcmlkW2ddPW5ldyBBcnJheSh0aGlzLmpNYXgpO2Zvcih2YXIgeT0wO3k8dGhpcy5qTWF4O3krKyl0aGlzLnRyYWNlYmFja0dyaWRbZ11beV09W251bGwsbnVsbCxudWxsXX10aGlzLmFsaWdubWVudHM9W10sdGhpcy5zY29yZT0tMSx0aGlzLmNvbXB1dGVHcmlkcygpfXJldHVybiBvKHMsIk5lZWRsZW1hbld1bnNjaCIpLG4ocyxbe2tleToiZ2V0U2NvcmUiLHZhbHVlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zY29yZX0sImdldFNjb3JlIil9LHtrZXk6ImdldEFsaWdubWVudHMiLHZhbHVlOm8oZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hbGlnbm1lbnRzfSwiZ2V0QWxpZ25tZW50cyIpfSx7a2V5OiJjb21wdXRlR3JpZHMiLHZhbHVlOm8oZnVuY3Rpb24oKXtmb3IodmFyIHU9MTt1PHRoaXMuak1heDt1KyspdGhpcy5ncmlkWzBdW3VdPXRoaXMuZ3JpZFswXVt1LTFdK3RoaXMuZ2FwX3BlbmFsdHksdGhpcy50cmFjZWJhY2tHcmlkWzBdW3VdPVshMSwhMSwhMF07Zm9yKHZhciBoPTE7aDx0aGlzLmlNYXg7aCsrKXRoaXMuZ3JpZFtoXVswXT10aGlzLmdyaWRbaC0xXVswXSt0aGlzLmdhcF9wZW5hbHR5LHRoaXMudHJhY2ViYWNrR3JpZFtoXVswXT1bITEsITAsITFdO2Zvcih2YXIgZj0xO2Y8dGhpcy5pTWF4O2YrKylmb3IodmFyIGQ9MTtkPHRoaXMuak1heDtkKyspe3ZhciBwPXZvaWQgMDt0aGlzLnNlcXVlbmNlMVtmLTFdPT09dGhpcy5zZXF1ZW5jZTJbZC0xXT9wPXRoaXMuZ3JpZFtmLTFdW2QtMV0rdGhpcy5tYXRjaF9zY29yZTpwPXRoaXMuZ3JpZFtmLTFdW2QtMV0rdGhpcy5taXNtYXRjaF9wZW5hbHR5O3ZhciBtPXRoaXMuZ3JpZFtmLTFdW2RdK3RoaXMuZ2FwX3BlbmFsdHksZz10aGlzLmdyaWRbZl1bZC0xXSt0aGlzLmdhcF9wZW5hbHR5LHk9W3AsbSxnXSx2PXRoaXMuYXJyYXlBbGxNYXhJbmRleGVzKHkpO3RoaXMuZ3JpZFtmXVtkXT15W3ZbMF1dLHRoaXMudHJhY2ViYWNrR3JpZFtmXVtkXT1bdi5pbmNsdWRlcygwKSx2LmluY2x1ZGVzKDEpLHYuaW5jbHVkZXMoMildfXRoaXMuc2NvcmU9dGhpcy5ncmlkW3RoaXMuaU1heC0xXVt0aGlzLmpNYXgtMV19LCJjb21wdXRlR3JpZHMiKX0se2tleToiYWxpZ25tZW50VHJhY2ViYWNrIix2YWx1ZTpvKGZ1bmN0aW9uKCl7dmFyIHU9W107Zm9yKHUucHVzaCh7cG9zOlt0aGlzLnNlcXVlbmNlMS5sZW5ndGgsdGhpcy5zZXF1ZW5jZTIubGVuZ3RoXSxzZXExOiIiLHNlcTI6IiJ9KTt1WzBdOyl7dmFyIGg9dVswXSxmPXRoaXMudHJhY2ViYWNrR3JpZFtoLnBvc1swXV1baC5wb3NbMV1dO2ZbMF0mJnUucHVzaCh7cG9zOltoLnBvc1swXS0xLGgucG9zWzFdLTFdLHNlcTE6dGhpcy5zZXF1ZW5jZTFbaC5wb3NbMF0tMV0raC5zZXExLHNlcTI6dGhpcy5zZXF1ZW5jZTJbaC5wb3NbMV0tMV0raC5zZXEyfSksZlsxXSYmdS5wdXNoKHtwb3M6W2gucG9zWzBdLTEsaC5wb3NbMV1dLHNlcTE6dGhpcy5zZXF1ZW5jZTFbaC5wb3NbMF0tMV0raC5zZXExLHNlcTI6Ii0iK2guc2VxMn0pLGZbMl0mJnUucHVzaCh7cG9zOltoLnBvc1swXSxoLnBvc1sxXS0xXSxzZXExOiItIitoLnNlcTEsc2VxMjp0aGlzLnNlcXVlbmNlMltoLnBvc1sxXS0xXStoLnNlcTJ9KSxoLnBvc1swXT09PTAmJmgucG9zWzFdPT09MCYmdGhpcy5hbGlnbm1lbnRzLnB1c2goe3NlcXVlbmNlMTpoLnNlcTEsc2VxdWVuY2UyOmguc2VxMn0pLHUuc2hpZnQoKX1yZXR1cm4gdGhpcy5hbGlnbm1lbnRzfSwiYWxpZ25tZW50VHJhY2ViYWNrIil9LHtrZXk6ImdldEFsbEluZGV4ZXMiLHZhbHVlOm8oZnVuY3Rpb24odSxoKXtmb3IodmFyIGY9W10sZD0tMTsoZD11LmluZGV4T2YoaCxkKzEpKSE9PS0xOylmLnB1c2goZCk7cmV0dXJuIGZ9LCJnZXRBbGxJbmRleGVzIil9LHtrZXk6ImFycmF5QWxsTWF4SW5kZXhlcyIsdmFsdWU6byhmdW5jdGlvbih1KXtyZXR1cm4gdGhpcy5nZXRBbGxJbmRleGVzKHUsTWF0aC5tYXguYXBwbHkobnVsbCx1KSl9LCJhcnJheUFsbE1heEluZGV4ZXMiKX1dKSxzfSgpO3QuZXhwb3J0cz1hfSxmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPW8oZnVuY3Rpb24oKXt9LCJsYXlvdXRCYXNlIik7bi5GRExheW91dD1yKDE4KSxuLkZETGF5b3V0Q29uc3RhbnRzPXIoNCksbi5GRExheW91dEVkZ2U9cigxOSksbi5GRExheW91dE5vZGU9cigyMCksbi5EaW1lbnNpb25EPXIoMjEpLG4uSGFzaE1hcD1yKDIyKSxuLkhhc2hTZXQ9cigyMyksbi5JR2VvbWV0cnk9cig4KSxuLklNYXRoPXIoOSksbi5JbnRlZ2VyPXIoMTApLG4uUG9pbnQ9cigxMiksbi5Qb2ludEQ9cig1KSxuLlJhbmRvbVNlZWQ9cigxNiksbi5SZWN0YW5nbGVEPXIoMTMpLG4uVHJhbnNmb3JtPXIoMTcpLG4uVW5pcXVlSURHZW5lcmV0b3I9cigxNCksbi5RdWlja3NvcnQ9cigyNSksbi5MaW5rZWRMaXN0PXIoMTEpLG4uTEdyYXBoT2JqZWN0PXIoMiksbi5MR3JhcGg9cig2KSxuLkxFZGdlPXIoMSksbi5MR3JhcGhNYW5hZ2VyPXIoNyksbi5MTm9kZT1yKDMpLG4uTGF5b3V0PXIoMTUpLG4uTGF5b3V0Q29uc3RhbnRzPXIoMCksbi5OZWVkbGVtYW5XdW5zY2g9cigyNyksbi5NYXRyaXg9cigyNCksbi5TVkQ9cigyNiksdC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe3RoaXMubGlzdGVuZXJzPVtdfW8obiwiRW1pdHRlciIpO3ZhciBpPW4ucHJvdG90eXBlO2kuYWRkTGlzdGVuZXI9ZnVuY3Rpb24oYSxzKXt0aGlzLmxpc3RlbmVycy5wdXNoKHtldmVudDphLGNhbGxiYWNrOnN9KX0saS5yZW1vdmVMaXN0ZW5lcj1mdW5jdGlvbihhLHMpe2Zvcih2YXIgbD10aGlzLmxpc3RlbmVycy5sZW5ndGg7bD49MDtsLS0pe3ZhciB1PXRoaXMubGlzdGVuZXJzW2xdO3UuZXZlbnQ9PT1hJiZ1LmNhbGxiYWNrPT09cyYmdGhpcy5saXN0ZW5lcnMuc3BsaWNlKGwsMSl9fSxpLmVtaXQ9ZnVuY3Rpb24oYSxzKXtmb3IodmFyIGw9MDtsPHRoaXMubGlzdGVuZXJzLmxlbmd0aDtsKyspe3ZhciB1PXRoaXMubGlzdGVuZXJzW2xdO2E9PT11LmV2ZW50JiZ1LmNhbGxiYWNrKHMpfX0sdC5leHBvcnRzPW59XSl9KX0pO3ZhciBKRj1QaSgoSTQsWkYpPT57InVzZSBzdHJpY3QiO28oZnVuY3Rpb24oZSxyKXt0eXBlb2YgSTQ9PSJvYmplY3QiJiZ0eXBlb2YgWkY9PSJvYmplY3QiP1pGLmV4cG9ydHM9cihRRigpKTp0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kP2RlZmluZShbImxheW91dC1iYXNlIl0scik6dHlwZW9mIEk0PT0ib2JqZWN0Ij9JNC5jb3NlQmFzZT1yKFFGKCkpOmUuY29zZUJhc2U9cihlLmxheW91dEJhc2UpfSwid2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iKShJNCxmdW5jdGlvbih0KXtyZXR1cm4oKCk9PnsidXNlIHN0cmljdCI7dmFyIGU9ezQ1OihhLHMsbCk9Pnt2YXIgdT17fTt1LmxheW91dEJhc2U9bCg1NTEpLHUuQ29TRUNvbnN0YW50cz1sKDgwNiksdS5Db1NFRWRnZT1sKDc2NyksdS5Db1NFR3JhcGg9bCg4ODApLHUuQ29TRUdyYXBoTWFuYWdlcj1sKDU3OCksdS5Db1NFTGF5b3V0PWwoNzY1KSx1LkNvU0VOb2RlPWwoOTkxKSx1LkNvbnN0cmFpbnRIYW5kbGVyPWwoOTAyKSxhLmV4cG9ydHM9dX0sODA2OihhLHMsbCk9Pnt2YXIgdT1sKDU1MSkuRkRMYXlvdXRDb25zdGFudHM7ZnVuY3Rpb24gaCgpe31vKGgsIkNvU0VDb25zdGFudHMiKTtmb3IodmFyIGYgaW4gdSloW2ZdPXVbZl07aC5ERUZBVUxUX1VTRV9NVUxUSV9MRVZFTF9TQ0FMSU5HPSExLGguREVGQVVMVF9SQURJQUxfU0VQQVJBVElPTj11LkRFRkFVTFRfRURHRV9MRU5HVEgsaC5ERUZBVUxUX0NPTVBPTkVOVF9TRVBFUkFUSU9OPTYwLGguVElMRT0hMCxoLlRJTElOR19QQURESU5HX1ZFUlRJQ0FMPTEwLGguVElMSU5HX1BBRERJTkdfSE9SSVpPTlRBTD0xMCxoLlRSQU5TRk9STV9PTl9DT05TVFJBSU5UX0hBTkRMSU5HPSEwLGguRU5GT1JDRV9DT05TVFJBSU5UUz0hMCxoLkFQUExZX0xBWU9VVD0hMCxoLlJFTEFYX01PVkVNRU5UX09OX0NPTlNUUkFJTlRTPSEwLGguVFJFRV9SRURVQ1RJT05fT05fSU5DUkVNRU5UQUw9ITAsaC5QVVJFX0lOQ1JFTUVOVEFMPWguREVGQVVMVF9JTkNSRU1FTlRBTCxhLmV4cG9ydHM9aH0sNzY3OihhLHMsbCk9Pnt2YXIgdT1sKDU1MSkuRkRMYXlvdXRFZGdlO2Z1bmN0aW9uIGgoZCxwLG0pe3UuY2FsbCh0aGlzLGQscCxtKX1vKGgsIkNvU0VFZGdlIiksaC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh1LnByb3RvdHlwZSk7Zm9yKHZhciBmIGluIHUpaFtmXT11W2ZdO2EuZXhwb3J0cz1ofSw4ODA6KGEscyxsKT0+e3ZhciB1PWwoNTUxKS5MR3JhcGg7ZnVuY3Rpb24gaChkLHAsbSl7dS5jYWxsKHRoaXMsZCxwLG0pfW8oaCwiQ29TRUdyYXBoIiksaC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh1LnByb3RvdHlwZSk7Zm9yKHZhciBmIGluIHUpaFtmXT11W2ZdO2EuZXhwb3J0cz1ofSw1Nzg6KGEscyxsKT0+e3ZhciB1PWwoNTUxKS5MR3JhcGhNYW5hZ2VyO2Z1bmN0aW9uIGgoZCl7dS5jYWxsKHRoaXMsZCl9byhoLCJDb1NFR3JhcGhNYW5hZ2VyIiksaC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh1LnByb3RvdHlwZSk7Zm9yKHZhciBmIGluIHUpaFtmXT11W2ZdO2EuZXhwb3J0cz1ofSw3NjU6KGEscyxsKT0+e3ZhciB1PWwoNTUxKS5GRExheW91dCxoPWwoNTc4KSxmPWwoODgwKSxkPWwoOTkxKSxwPWwoNzY3KSxtPWwoODA2KSxnPWwoOTAyKSx5PWwoNTUxKS5GRExheW91dENvbnN0YW50cyx2PWwoNTUxKS5MYXlvdXRDb25zdGFudHMseD1sKDU1MSkuUG9pbnQsYj1sKDU1MSkuUG9pbnRELFQ9bCg1NTEpLkRpbWVuc2lvbkQsUz1sKDU1MSkuTGF5b3V0LHc9bCg1NTEpLkludGVnZXIsRT1sKDU1MSkuSUdlb21ldHJ5LF89bCg1NTEpLkxHcmFwaCxDPWwoNTUxKS5UcmFuc2Zvcm0sRD1sKDU1MSkuTGlua2VkTGlzdDtmdW5jdGlvbiBPKCl7dS5jYWxsKHRoaXMpLHRoaXMudG9CZVRpbGVkPXt9LHRoaXMuY29uc3RyYWludHM9e319byhPLCJDb1NFTGF5b3V0IiksTy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh1LnByb3RvdHlwZSk7Zm9yKHZhciBSIGluIHUpT1tSXT11W1JdO08ucHJvdG90eXBlLm5ld0dyYXBoTWFuYWdlcj1mdW5jdGlvbigpe3ZhciBrPW5ldyBoKHRoaXMpO3JldHVybiB0aGlzLmdyYXBoTWFuYWdlcj1rLGt9LE8ucHJvdG90eXBlLm5ld0dyYXBoPWZ1bmN0aW9uKGspe3JldHVybiBuZXcgZihudWxsLHRoaXMuZ3JhcGhNYW5hZ2VyLGspfSxPLnByb3RvdHlwZS5uZXdOb2RlPWZ1bmN0aW9uKGspe3JldHVybiBuZXcgZCh0aGlzLmdyYXBoTWFuYWdlcixrKX0sTy5wcm90b3R5cGUubmV3RWRnZT1mdW5jdGlvbihrKXtyZXR1cm4gbmV3IHAobnVsbCxudWxsLGspfSxPLnByb3RvdHlwZS5pbml0UGFyYW1ldGVycz1mdW5jdGlvbigpe3UucHJvdG90eXBlLmluaXRQYXJhbWV0ZXJzLmNhbGwodGhpcyxhcmd1bWVudHMpLHRoaXMuaXNTdWJMYXlvdXR8fChtLkRFRkFVTFRfRURHRV9MRU5HVEg8MTA/dGhpcy5pZGVhbEVkZ2VMZW5ndGg9MTA6dGhpcy5pZGVhbEVkZ2VMZW5ndGg9bS5ERUZBVUxUX0VER0VfTEVOR1RILHRoaXMudXNlU21hcnRJZGVhbEVkZ2VMZW5ndGhDYWxjdWxhdGlvbj1tLkRFRkFVTFRfVVNFX1NNQVJUX0lERUFMX0VER0VfTEVOR1RIX0NBTENVTEFUSU9OLHRoaXMuZ3Jhdml0eUNvbnN0YW50PXkuREVGQVVMVF9HUkFWSVRZX1NUUkVOR1RILHRoaXMuY29tcG91bmRHcmF2aXR5Q29uc3RhbnQ9eS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfU1RSRU5HVEgsdGhpcy5ncmF2aXR5UmFuZ2VGYWN0b3I9eS5ERUZBVUxUX0dSQVZJVFlfUkFOR0VfRkFDVE9SLHRoaXMuY29tcG91bmRHcmF2aXR5UmFuZ2VGYWN0b3I9eS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfUkFOR0VfRkFDVE9SLHRoaXMucHJ1bmVkTm9kZXNBbGw9W10sdGhpcy5ncm93VHJlZUl0ZXJhdGlvbnM9MCx0aGlzLmFmdGVyR3Jvd3RoSXRlcmF0aW9ucz0wLHRoaXMuaXNUcmVlR3Jvd2luZz0hMSx0aGlzLmlzR3Jvd3RoRmluaXNoZWQ9ITEpfSxPLnByb3RvdHlwZS5pbml0U3ByaW5nRW1iZWRkZXI9ZnVuY3Rpb24oKXt1LnByb3RvdHlwZS5pbml0U3ByaW5nRW1iZWRkZXIuY2FsbCh0aGlzKSx0aGlzLmNvb2xpbmdDeWNsZT0wLHRoaXMubWF4Q29vbGluZ0N5Y2xlPXRoaXMubWF4SXRlcmF0aW9ucy95LkNPTlZFUkdFTkNFX0NIRUNLX1BFUklPRCx0aGlzLmZpbmFsVGVtcGVyYXR1cmU9LjA0LHRoaXMuY29vbGluZ0FkanVzdGVyPTF9LE8ucHJvdG90eXBlLmxheW91dD1mdW5jdGlvbigpe3ZhciBrPXYuREVGQVVMVF9DUkVBVEVfQkVORFNfQVNfTkVFREVEO3JldHVybiBrJiYodGhpcy5jcmVhdGVCZW5kcG9pbnRzKCksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxFZGdlcygpKSx0aGlzLmxldmVsPTAsdGhpcy5jbGFzc2ljTGF5b3V0KCl9LE8ucHJvdG90eXBlLmNsYXNzaWNMYXlvdXQ9ZnVuY3Rpb24oKXtpZih0aGlzLm5vZGVzV2l0aEdyYXZpdHk9dGhpcy5jYWxjdWxhdGVOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvblRvKCksdGhpcy5ncmFwaE1hbmFnZXIuc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24odGhpcy5ub2Rlc1dpdGhHcmF2aXR5KSx0aGlzLmNhbGNOb09mQ2hpbGRyZW5Gb3JBbGxOb2RlcygpLHRoaXMuZ3JhcGhNYW5hZ2VyLmNhbGNMb3dlc3RDb21tb25BbmNlc3RvcnMoKSx0aGlzLmdyYXBoTWFuYWdlci5jYWxjSW5jbHVzaW9uVHJlZURlcHRocygpLHRoaXMuZ3JhcGhNYW5hZ2VyLmdldFJvb3QoKS5jYWxjRXN0aW1hdGVkU2l6ZSgpLHRoaXMuY2FsY0lkZWFsRWRnZUxlbmd0aHMoKSx0aGlzLmluY3JlbWVudGFsKXtpZihtLlRSRUVfUkVEVUNUSU9OX09OX0lOQ1JFTUVOVEFMKXt0aGlzLnJlZHVjZVRyZWVzKCksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbigpO3ZhciBMPW5ldyBTZXQodGhpcy5nZXRBbGxOb2RlcygpKSxBPXRoaXMubm9kZXNXaXRoR3Jhdml0eS5maWx0ZXIoZnVuY3Rpb24oUCl7cmV0dXJuIEwuaGFzKFApfSk7dGhpcy5ncmFwaE1hbmFnZXIuc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oQSl9fWVsc2V7dmFyIGs9dGhpcy5nZXRGbGF0Rm9yZXN0KCk7aWYoay5sZW5ndGg+MCl0aGlzLnBvc2l0aW9uTm9kZXNSYWRpYWxseShrKTtlbHNle3RoaXMucmVkdWNlVHJlZXMoKSx0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzVG9BcHBseUdyYXZpdGF0aW9uKCk7dmFyIEw9bmV3IFNldCh0aGlzLmdldEFsbE5vZGVzKCkpLEE9dGhpcy5ub2Rlc1dpdGhHcmF2aXR5LmZpbHRlcihmdW5jdGlvbihJKXtyZXR1cm4gTC5oYXMoSSl9KTt0aGlzLmdyYXBoTWFuYWdlci5zZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbihBKSx0aGlzLnBvc2l0aW9uTm9kZXNSYW5kb21seSgpfX1yZXR1cm4gT2JqZWN0LmtleXModGhpcy5jb25zdHJhaW50cykubGVuZ3RoPjAmJihnLmhhbmRsZUNvbnN0cmFpbnRzKHRoaXMpLHRoaXMuaW5pdENvbnN0cmFpbnRWYXJpYWJsZXMoKSksdGhpcy5pbml0U3ByaW5nRW1iZWRkZXIoKSxtLkFQUExZX0xBWU9VVCYmdGhpcy5ydW5TcHJpbmdFbWJlZGRlcigpLCEwfSxPLnByb3RvdHlwZS50aWNrPWZ1bmN0aW9uKCl7aWYodGhpcy50b3RhbEl0ZXJhdGlvbnMrKyx0aGlzLnRvdGFsSXRlcmF0aW9ucz09PXRoaXMubWF4SXRlcmF0aW9ucyYmIXRoaXMuaXNUcmVlR3Jvd2luZyYmIXRoaXMuaXNHcm93dGhGaW5pc2hlZClpZih0aGlzLnBydW5lZE5vZGVzQWxsLmxlbmd0aD4wKXRoaXMuaXNUcmVlR3Jvd2luZz0hMDtlbHNlIHJldHVybiEwO2lmKHRoaXMudG90YWxJdGVyYXRpb25zJXkuQ09OVkVSR0VOQ0VfQ0hFQ0tfUEVSSU9EPT0wJiYhdGhpcy5pc1RyZWVHcm93aW5nJiYhdGhpcy5pc0dyb3d0aEZpbmlzaGVkKXtpZih0aGlzLmlzQ29udmVyZ2VkKCkpaWYodGhpcy5wcnVuZWROb2Rlc0FsbC5sZW5ndGg+MCl0aGlzLmlzVHJlZUdyb3dpbmc9ITA7ZWxzZSByZXR1cm4hMDt0aGlzLmNvb2xpbmdDeWNsZSsrLHRoaXMubGF5b3V0UXVhbGl0eT09MD90aGlzLmNvb2xpbmdBZGp1c3Rlcj10aGlzLmNvb2xpbmdDeWNsZTp0aGlzLmxheW91dFF1YWxpdHk9PTEmJih0aGlzLmNvb2xpbmdBZGp1c3Rlcj10aGlzLmNvb2xpbmdDeWNsZS8zKSx0aGlzLmNvb2xpbmdGYWN0b3I9TWF0aC5tYXgodGhpcy5pbml0aWFsQ29vbGluZ0ZhY3Rvci1NYXRoLnBvdyh0aGlzLmNvb2xpbmdDeWNsZSxNYXRoLmxvZygxMDAqKHRoaXMuaW5pdGlhbENvb2xpbmdGYWN0b3ItdGhpcy5maW5hbFRlbXBlcmF0dXJlKSkvTWF0aC5sb2codGhpcy5tYXhDb29saW5nQ3ljbGUpKS8xMDAqdGhpcy5jb29saW5nQWRqdXN0ZXIsdGhpcy5maW5hbFRlbXBlcmF0dXJlKSx0aGlzLmFuaW1hdGlvblBlcmlvZD1NYXRoLmNlaWwodGhpcy5pbml0aWFsQW5pbWF0aW9uUGVyaW9kKk1hdGguc3FydCh0aGlzLmNvb2xpbmdGYWN0b3IpKX1pZih0aGlzLmlzVHJlZUdyb3dpbmcpe2lmKHRoaXMuZ3Jvd1RyZWVJdGVyYXRpb25zJTEwPT0wKWlmKHRoaXMucHJ1bmVkTm9kZXNBbGwubGVuZ3RoPjApe3RoaXMuZ3JhcGhNYW5hZ2VyLnVwZGF0ZUJvdW5kcygpLHRoaXMudXBkYXRlR3JpZCgpLHRoaXMuZ3Jvd1RyZWUodGhpcy5wcnVuZWROb2Rlc0FsbCksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxOb2Rlc1RvQXBwbHlHcmF2aXRhdGlvbigpO3ZhciBrPW5ldyBTZXQodGhpcy5nZXRBbGxOb2RlcygpKSxMPXRoaXMubm9kZXNXaXRoR3Jhdml0eS5maWx0ZXIoZnVuY3Rpb24oTSl7cmV0dXJuIGsuaGFzKE0pfSk7dGhpcy5ncmFwaE1hbmFnZXIuc2V0QWxsTm9kZXNUb0FwcGx5R3Jhdml0YXRpb24oTCksdGhpcy5ncmFwaE1hbmFnZXIudXBkYXRlQm91bmRzKCksdGhpcy51cGRhdGVHcmlkKCksbS5QVVJFX0lOQ1JFTUVOVEFMP3RoaXMuY29vbGluZ0ZhY3Rvcj15LkRFRkFVTFRfQ09PTElOR19GQUNUT1JfSU5DUkVNRU5UQUwvMjp0aGlzLmNvb2xpbmdGYWN0b3I9eS5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMfWVsc2UgdGhpcy5pc1RyZWVHcm93aW5nPSExLHRoaXMuaXNHcm93dGhGaW5pc2hlZD0hMDt0aGlzLmdyb3dUcmVlSXRlcmF0aW9ucysrfWlmKHRoaXMuaXNHcm93dGhGaW5pc2hlZCl7aWYodGhpcy5pc0NvbnZlcmdlZCgpKXJldHVybiEwO3RoaXMuYWZ0ZXJHcm93dGhJdGVyYXRpb25zJTEwPT0wJiYodGhpcy5ncmFwaE1hbmFnZXIudXBkYXRlQm91bmRzKCksdGhpcy51cGRhdGVHcmlkKCkpLG0uUFVSRV9JTkNSRU1FTlRBTD90aGlzLmNvb2xpbmdGYWN0b3I9eS5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMLzIqKCgxMDAtdGhpcy5hZnRlckdyb3d0aEl0ZXJhdGlvbnMpLzEwMCk6dGhpcy5jb29saW5nRmFjdG9yPXkuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTCooKDEwMC10aGlzLmFmdGVyR3Jvd3RoSXRlcmF0aW9ucykvMTAwKSx0aGlzLmFmdGVyR3Jvd3RoSXRlcmF0aW9ucysrfXZhciBBPSF0aGlzLmlzVHJlZUdyb3dpbmcmJiF0aGlzLmlzR3Jvd3RoRmluaXNoZWQsST10aGlzLmdyb3dUcmVlSXRlcmF0aW9ucyUxMD09MSYmdGhpcy5pc1RyZWVHcm93aW5nfHx0aGlzLmFmdGVyR3Jvd3RoSXRlcmF0aW9ucyUxMD09MSYmdGhpcy5pc0dyb3d0aEZpbmlzaGVkO3JldHVybiB0aGlzLnRvdGFsRGlzcGxhY2VtZW50PTAsdGhpcy5ncmFwaE1hbmFnZXIudXBkYXRlQm91bmRzKCksdGhpcy5jYWxjU3ByaW5nRm9yY2VzKCksdGhpcy5jYWxjUmVwdWxzaW9uRm9yY2VzKEEsSSksdGhpcy5jYWxjR3Jhdml0YXRpb25hbEZvcmNlcygpLHRoaXMubW92ZU5vZGVzKCksdGhpcy5hbmltYXRlKCksITF9LE8ucHJvdG90eXBlLmdldFBvc2l0aW9uc0RhdGE9ZnVuY3Rpb24oKXtmb3IodmFyIGs9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsTm9kZXMoKSxMPXt9LEE9MDtBPGsubGVuZ3RoO0ErKyl7dmFyIEk9a1tBXS5yZWN0LE09a1tBXS5pZDtMW01dPXtpZDpNLHg6SS5nZXRDZW50ZXJYKCkseTpJLmdldENlbnRlclkoKSx3Okkud2lkdGgsaDpJLmhlaWdodH19cmV0dXJuIEx9LE8ucHJvdG90eXBlLnJ1blNwcmluZ0VtYmVkZGVyPWZ1bmN0aW9uKCl7dGhpcy5pbml0aWFsQW5pbWF0aW9uUGVyaW9kPTI1LHRoaXMuYW5pbWF0aW9uUGVyaW9kPXRoaXMuaW5pdGlhbEFuaW1hdGlvblBlcmlvZDt2YXIgaz0hMTtpZih5LkFOSU1BVEU9PT0iZHVyaW5nIil0aGlzLmVtaXQoImxheW91dHN0YXJ0ZWQiKTtlbHNle2Zvcig7IWs7KWs9dGhpcy50aWNrKCk7dGhpcy5ncmFwaE1hbmFnZXIudXBkYXRlQm91bmRzKCl9fSxPLnByb3RvdHlwZS5tb3ZlTm9kZXM9ZnVuY3Rpb24oKXtmb3IodmFyIGs9dGhpcy5nZXRBbGxOb2RlcygpLEwsQT0wO0E8ay5sZW5ndGg7QSsrKUw9a1tBXSxMLmNhbGN1bGF0ZURpc3BsYWNlbWVudCgpO09iamVjdC5rZXlzKHRoaXMuY29uc3RyYWludHMpLmxlbmd0aD4wJiZ0aGlzLnVwZGF0ZURpc3BsYWNlbWVudHMoKTtmb3IodmFyIEE9MDtBPGsubGVuZ3RoO0ErKylMPWtbQV0sTC5tb3ZlKCl9LE8ucHJvdG90eXBlLmluaXRDb25zdHJhaW50VmFyaWFibGVzPWZ1bmN0aW9uKCl7dmFyIGs9dGhpczt0aGlzLmlkVG9Ob2RlTWFwPW5ldyBNYXAsdGhpcy5maXhlZE5vZGVTZXQ9bmV3IFNldDtmb3IodmFyIEw9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsTm9kZXMoKSxBPTA7QTxMLmxlbmd0aDtBKyspe3ZhciBJPUxbQV07dGhpcy5pZFRvTm9kZU1hcC5zZXQoSS5pZCxJKX12YXIgTT1vKGZ1bmN0aW9uIFoodWUpe2Zvcih2YXIgUT11ZS5nZXRDaGlsZCgpLmdldE5vZGVzKCksaixuZT0wLHRlPTA7dGU8US5sZW5ndGg7dGUrKylqPVFbdGVdLGouZ2V0Q2hpbGQoKT09bnVsbD9rLmZpeGVkTm9kZVNldC5oYXMoai5pZCkmJihuZSs9MTAwKTpuZSs9WihqKTtyZXR1cm4gbmV9LCJjYWxjdWxhdGVDb21wb3VuZFdlaWdodCIpO2lmKHRoaXMuY29uc3RyYWludHMuZml4ZWROb2RlQ29uc3RyYWludCl7dGhpcy5jb25zdHJhaW50cy5maXhlZE5vZGVDb25zdHJhaW50LmZvckVhY2goZnVuY3Rpb24oUSl7ay5maXhlZE5vZGVTZXQuYWRkKFEubm9kZUlkKX0pO2Zvcih2YXIgTD10aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxOb2RlcygpLEksQT0wO0E8TC5sZW5ndGg7QSsrKWlmKEk9TFtBXSxJLmdldENoaWxkKCkhPW51bGwpe3ZhciBQPU0oSSk7UD4wJiYoSS5maXhlZE5vZGVXZWlnaHQ9UCl9fWlmKHRoaXMuY29uc3RyYWludHMucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50KXt2YXIgQj1uZXcgTWFwLEY9bmV3IE1hcDtpZih0aGlzLmR1bW15VG9Ob2RlRm9yVmVydGljYWxBbGlnbm1lbnQ9bmV3IE1hcCx0aGlzLmR1bW15VG9Ob2RlRm9ySG9yaXpvbnRhbEFsaWdubWVudD1uZXcgTWFwLHRoaXMuZml4ZWROb2Rlc09uSG9yaXpvbnRhbD1uZXcgU2V0LHRoaXMuZml4ZWROb2Rlc09uVmVydGljYWw9bmV3IFNldCx0aGlzLmZpeGVkTm9kZVNldC5mb3JFYWNoKGZ1bmN0aW9uKFope2suZml4ZWROb2Rlc09uSG9yaXpvbnRhbC5hZGQoWiksay5maXhlZE5vZGVzT25WZXJ0aWNhbC5hZGQoWil9KSx0aGlzLmNvbnN0cmFpbnRzLmFsaWdubWVudENvbnN0cmFpbnQpe2lmKHRoaXMuY29uc3RyYWludHMuYWxpZ25tZW50Q29uc3RyYWludC52ZXJ0aWNhbClmb3IodmFyIHo9dGhpcy5jb25zdHJhaW50cy5hbGlnbm1lbnRDb25zdHJhaW50LnZlcnRpY2FsLEE9MDtBPHoubGVuZ3RoO0ErKyl0aGlzLmR1bW15VG9Ob2RlRm9yVmVydGljYWxBbGlnbm1lbnQuc2V0KCJkdW1teSIrQSxbXSkseltBXS5mb3JFYWNoKGZ1bmN0aW9uKHVlKXtCLnNldCh1ZSwiZHVtbXkiK0EpLGsuZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5nZXQoImR1bW15IitBKS5wdXNoKHVlKSxrLmZpeGVkTm9kZVNldC5oYXModWUpJiZrLmZpeGVkTm9kZXNPbkhvcml6b250YWwuYWRkKCJkdW1teSIrQSl9KTtpZih0aGlzLmNvbnN0cmFpbnRzLmFsaWdubWVudENvbnN0cmFpbnQuaG9yaXpvbnRhbClmb3IodmFyICQ9dGhpcy5jb25zdHJhaW50cy5hbGlnbm1lbnRDb25zdHJhaW50Lmhvcml6b250YWwsQT0wO0E8JC5sZW5ndGg7QSsrKXRoaXMuZHVtbXlUb05vZGVGb3JIb3Jpem9udGFsQWxpZ25tZW50LnNldCgiZHVtbXkiK0EsW10pLCRbQV0uZm9yRWFjaChmdW5jdGlvbih1ZSl7Ri5zZXQodWUsImR1bW15IitBKSxrLmR1bW15VG9Ob2RlRm9ySG9yaXpvbnRhbEFsaWdubWVudC5nZXQoImR1bW15IitBKS5wdXNoKHVlKSxrLmZpeGVkTm9kZVNldC5oYXModWUpJiZrLmZpeGVkTm9kZXNPblZlcnRpY2FsLmFkZCgiZHVtbXkiK0EpfSl9aWYobS5SRUxBWF9NT1ZFTUVOVF9PTl9DT05TVFJBSU5UUyl0aGlzLnNodWZmbGU9ZnVuY3Rpb24oWil7dmFyIHVlLFEsajtmb3Ioaj1aLmxlbmd0aC0xO2o+PTIqWi5sZW5ndGgvMztqLS0pdWU9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKihqKzEpKSxRPVpbal0sWltqXT1aW3VlXSxaW3VlXT1RO3JldHVybiBafSx0aGlzLm5vZGVzSW5SZWxhdGl2ZUhvcml6b250YWw9W10sdGhpcy5ub2Rlc0luUmVsYXRpdmVWZXJ0aWNhbD1bXSx0aGlzLm5vZGVUb1JlbGF0aXZlQ29uc3RyYWludE1hcEhvcml6b250YWw9bmV3IE1hcCx0aGlzLm5vZGVUb1JlbGF0aXZlQ29uc3RyYWludE1hcFZlcnRpY2FsPW5ldyBNYXAsdGhpcy5ub2RlVG9UZW1wUG9zaXRpb25NYXBIb3Jpem9udGFsPW5ldyBNYXAsdGhpcy5ub2RlVG9UZW1wUG9zaXRpb25NYXBWZXJ0aWNhbD1uZXcgTWFwLHRoaXMuY29uc3RyYWludHMucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50LmZvckVhY2goZnVuY3Rpb24oWil7aWYoWi5sZWZ0KXt2YXIgdWU9Qi5oYXMoWi5sZWZ0KT9CLmdldChaLmxlZnQpOloubGVmdCxRPUIuaGFzKFoucmlnaHQpP0IuZ2V0KFoucmlnaHQpOloucmlnaHQ7ay5ub2Rlc0luUmVsYXRpdmVIb3Jpem9udGFsLmluY2x1ZGVzKHVlKXx8KGsubm9kZXNJblJlbGF0aXZlSG9yaXpvbnRhbC5wdXNoKHVlKSxrLm5vZGVUb1JlbGF0aXZlQ29uc3RyYWludE1hcEhvcml6b250YWwuc2V0KHVlLFtdKSxrLmR1bW15VG9Ob2RlRm9yVmVydGljYWxBbGlnbm1lbnQuaGFzKHVlKT9rLm5vZGVUb1RlbXBQb3NpdGlvbk1hcEhvcml6b250YWwuc2V0KHVlLGsuaWRUb05vZGVNYXAuZ2V0KGsuZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5nZXQodWUpWzBdKS5nZXRDZW50ZXJYKCkpOmsubm9kZVRvVGVtcFBvc2l0aW9uTWFwSG9yaXpvbnRhbC5zZXQodWUsay5pZFRvTm9kZU1hcC5nZXQodWUpLmdldENlbnRlclgoKSkpLGsubm9kZXNJblJlbGF0aXZlSG9yaXpvbnRhbC5pbmNsdWRlcyhRKXx8KGsubm9kZXNJblJlbGF0aXZlSG9yaXpvbnRhbC5wdXNoKFEpLGsubm9kZVRvUmVsYXRpdmVDb25zdHJhaW50TWFwSG9yaXpvbnRhbC5zZXQoUSxbXSksay5kdW1teVRvTm9kZUZvclZlcnRpY2FsQWxpZ25tZW50LmhhcyhRKT9rLm5vZGVUb1RlbXBQb3NpdGlvbk1hcEhvcml6b250YWwuc2V0KFEsay5pZFRvTm9kZU1hcC5nZXQoay5kdW1teVRvTm9kZUZvclZlcnRpY2FsQWxpZ25tZW50LmdldChRKVswXSkuZ2V0Q2VudGVyWCgpKTprLm5vZGVUb1RlbXBQb3NpdGlvbk1hcEhvcml6b250YWwuc2V0KFEsay5pZFRvTm9kZU1hcC5nZXQoUSkuZ2V0Q2VudGVyWCgpKSksay5ub2RlVG9SZWxhdGl2ZUNvbnN0cmFpbnRNYXBIb3Jpem9udGFsLmdldCh1ZSkucHVzaCh7cmlnaHQ6USxnYXA6Wi5nYXB9KSxrLm5vZGVUb1JlbGF0aXZlQ29uc3RyYWludE1hcEhvcml6b250YWwuZ2V0KFEpLnB1c2goe2xlZnQ6dWUsZ2FwOlouZ2FwfSl9ZWxzZXt2YXIgaj1GLmhhcyhaLnRvcCk/Ri5nZXQoWi50b3ApOloudG9wLG5lPUYuaGFzKFouYm90dG9tKT9GLmdldChaLmJvdHRvbSk6Wi5ib3R0b207ay5ub2Rlc0luUmVsYXRpdmVWZXJ0aWNhbC5pbmNsdWRlcyhqKXx8KGsubm9kZXNJblJlbGF0aXZlVmVydGljYWwucHVzaChqKSxrLm5vZGVUb1JlbGF0aXZlQ29uc3RyYWludE1hcFZlcnRpY2FsLnNldChqLFtdKSxrLmR1bW15VG9Ob2RlRm9ySG9yaXpvbnRhbEFsaWdubWVudC5oYXMoaik/ay5ub2RlVG9UZW1wUG9zaXRpb25NYXBWZXJ0aWNhbC5zZXQoaixrLmlkVG9Ob2RlTWFwLmdldChrLmR1bW15VG9Ob2RlRm9ySG9yaXpvbnRhbEFsaWdubWVudC5nZXQoailbMF0pLmdldENlbnRlclkoKSk6ay5ub2RlVG9UZW1wUG9zaXRpb25NYXBWZXJ0aWNhbC5zZXQoaixrLmlkVG9Ob2RlTWFwLmdldChqKS5nZXRDZW50ZXJZKCkpKSxrLm5vZGVzSW5SZWxhdGl2ZVZlcnRpY2FsLmluY2x1ZGVzKG5lKXx8KGsubm9kZXNJblJlbGF0aXZlVmVydGljYWwucHVzaChuZSksay5ub2RlVG9SZWxhdGl2ZUNvbnN0cmFpbnRNYXBWZXJ0aWNhbC5zZXQobmUsW10pLGsuZHVtbXlUb05vZGVGb3JIb3Jpem9udGFsQWxpZ25tZW50LmhhcyhuZSk/ay5ub2RlVG9UZW1wUG9zaXRpb25NYXBWZXJ0aWNhbC5zZXQobmUsay5pZFRvTm9kZU1hcC5nZXQoay5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuZ2V0KG5lKVswXSkuZ2V0Q2VudGVyWSgpKTprLm5vZGVUb1RlbXBQb3NpdGlvbk1hcFZlcnRpY2FsLnNldChuZSxrLmlkVG9Ob2RlTWFwLmdldChuZSkuZ2V0Q2VudGVyWSgpKSksay5ub2RlVG9SZWxhdGl2ZUNvbnN0cmFpbnRNYXBWZXJ0aWNhbC5nZXQoaikucHVzaCh7Ym90dG9tOm5lLGdhcDpaLmdhcH0pLGsubm9kZVRvUmVsYXRpdmVDb25zdHJhaW50TWFwVmVydGljYWwuZ2V0KG5lKS5wdXNoKHt0b3A6aixnYXA6Wi5nYXB9KX19KTtlbHNle3ZhciBVPW5ldyBNYXAsSz1uZXcgTWFwO3RoaXMuY29uc3RyYWludHMucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50LmZvckVhY2goZnVuY3Rpb24oWil7aWYoWi5sZWZ0KXt2YXIgdWU9Qi5oYXMoWi5sZWZ0KT9CLmdldChaLmxlZnQpOloubGVmdCxRPUIuaGFzKFoucmlnaHQpP0IuZ2V0KFoucmlnaHQpOloucmlnaHQ7VS5oYXModWUpP1UuZ2V0KHVlKS5wdXNoKFEpOlUuc2V0KHVlLFtRXSksVS5oYXMoUSk/VS5nZXQoUSkucHVzaCh1ZSk6VS5zZXQoUSxbdWVdKX1lbHNle3ZhciBqPUYuaGFzKFoudG9wKT9GLmdldChaLnRvcCk6Wi50b3AsbmU9Ri5oYXMoWi5ib3R0b20pP0YuZ2V0KFouYm90dG9tKTpaLmJvdHRvbTtLLmhhcyhqKT9LLmdldChqKS5wdXNoKG5lKTpLLnNldChqLFtuZV0pLEsuaGFzKG5lKT9LLmdldChuZSkucHVzaChqKTpLLnNldChuZSxbal0pfX0pO3ZhciBlZT1vKGZ1bmN0aW9uKHVlLFEpe3ZhciBqPVtdLG5lPVtdLHRlPW5ldyBELGhlPW5ldyBTZXQsbGU9MDtyZXR1cm4gdWUuZm9yRWFjaChmdW5jdGlvbihKLFNlKXtpZighaGUuaGFzKFNlKSl7altsZV09W10sbmVbbGVdPSExO3ZhciBzZT1TZTtmb3IodGUucHVzaChzZSksaGUuYWRkKHNlKSxqW2xlXS5wdXNoKHNlKTt0ZS5sZW5ndGghPTA7KXtzZT10ZS5zaGlmdCgpLFEuaGFzKHNlKSYmKG5lW2xlXT0hMCk7dmFyIGFlPXVlLmdldChzZSk7YWUuZm9yRWFjaChmdW5jdGlvbihPZSl7aGUuaGFzKE9lKXx8KHRlLnB1c2goT2UpLGhlLmFkZChPZSksaltsZV0ucHVzaChPZSkpfSl9bGUrK319KSx7Y29tcG9uZW50czpqLGlzRml4ZWQ6bmV9fSwiY29uc3RydWN0Q29tcG9uZW50cyIpLFk9ZWUoVSxrLmZpeGVkTm9kZXNPbkhvcml6b250YWwpO3RoaXMuY29tcG9uZW50c09uSG9yaXpvbnRhbD1ZLmNvbXBvbmVudHMsdGhpcy5maXhlZENvbXBvbmVudHNPbkhvcml6b250YWw9WS5pc0ZpeGVkO3ZhciBjZT1lZShLLGsuZml4ZWROb2Rlc09uVmVydGljYWwpO3RoaXMuY29tcG9uZW50c09uVmVydGljYWw9Y2UuY29tcG9uZW50cyx0aGlzLmZpeGVkQ29tcG9uZW50c09uVmVydGljYWw9Y2UuaXNGaXhlZH19fSxPLnByb3RvdHlwZS51cGRhdGVEaXNwbGFjZW1lbnRzPWZ1bmN0aW9uKCl7dmFyIGs9dGhpcztpZih0aGlzLmNvbnN0cmFpbnRzLmZpeGVkTm9kZUNvbnN0cmFpbnQmJnRoaXMuY29uc3RyYWludHMuZml4ZWROb2RlQ29uc3RyYWludC5mb3JFYWNoKGZ1bmN0aW9uKGNlKXt2YXIgWj1rLmlkVG9Ob2RlTWFwLmdldChjZS5ub2RlSWQpO1ouZGlzcGxhY2VtZW50WD0wLFouZGlzcGxhY2VtZW50WT0wfSksdGhpcy5jb25zdHJhaW50cy5hbGlnbm1lbnRDb25zdHJhaW50KXtpZih0aGlzLmNvbnN0cmFpbnRzLmFsaWdubWVudENvbnN0cmFpbnQudmVydGljYWwpZm9yKHZhciBMPXRoaXMuY29uc3RyYWludHMuYWxpZ25tZW50Q29uc3RyYWludC52ZXJ0aWNhbCxBPTA7QTxMLmxlbmd0aDtBKyspe2Zvcih2YXIgST0wLE09MDtNPExbQV0ubGVuZ3RoO00rKyl7aWYodGhpcy5maXhlZE5vZGVTZXQuaGFzKExbQV1bTV0pKXtJPTA7YnJlYWt9SSs9dGhpcy5pZFRvTm9kZU1hcC5nZXQoTFtBXVtNXSkuZGlzcGxhY2VtZW50WH1mb3IodmFyIFA9SS9MW0FdLmxlbmd0aCxNPTA7TTxMW0FdLmxlbmd0aDtNKyspdGhpcy5pZFRvTm9kZU1hcC5nZXQoTFtBXVtNXSkuZGlzcGxhY2VtZW50WD1QfWlmKHRoaXMuY29uc3RyYWludHMuYWxpZ25tZW50Q29uc3RyYWludC5ob3Jpem9udGFsKWZvcih2YXIgQj10aGlzLmNvbnN0cmFpbnRzLmFsaWdubWVudENvbnN0cmFpbnQuaG9yaXpvbnRhbCxBPTA7QTxCLmxlbmd0aDtBKyspe2Zvcih2YXIgRj0wLE09MDtNPEJbQV0ubGVuZ3RoO00rKyl7aWYodGhpcy5maXhlZE5vZGVTZXQuaGFzKEJbQV1bTV0pKXtGPTA7YnJlYWt9Ris9dGhpcy5pZFRvTm9kZU1hcC5nZXQoQltBXVtNXSkuZGlzcGxhY2VtZW50WX1mb3IodmFyIHo9Ri9CW0FdLmxlbmd0aCxNPTA7TTxCW0FdLmxlbmd0aDtNKyspdGhpcy5pZFRvTm9kZU1hcC5nZXQoQltBXVtNXSkuZGlzcGxhY2VtZW50WT16fX1pZih0aGlzLmNvbnN0cmFpbnRzLnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludClpZihtLlJFTEFYX01PVkVNRU5UX09OX0NPTlNUUkFJTlRTKXRoaXMudG90YWxJdGVyYXRpb25zJTEwPT0wJiYodGhpcy5zaHVmZmxlKHRoaXMubm9kZXNJblJlbGF0aXZlSG9yaXpvbnRhbCksdGhpcy5zaHVmZmxlKHRoaXMubm9kZXNJblJlbGF0aXZlVmVydGljYWwpKSx0aGlzLm5vZGVzSW5SZWxhdGl2ZUhvcml6b250YWwuZm9yRWFjaChmdW5jdGlvbihjZSl7aWYoIWsuZml4ZWROb2Rlc09uSG9yaXpvbnRhbC5oYXMoY2UpKXt2YXIgWj0wO2suZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5oYXMoY2UpP1o9ay5pZFRvTm9kZU1hcC5nZXQoay5kdW1teVRvTm9kZUZvclZlcnRpY2FsQWxpZ25tZW50LmdldChjZSlbMF0pLmRpc3BsYWNlbWVudFg6Wj1rLmlkVG9Ob2RlTWFwLmdldChjZSkuZGlzcGxhY2VtZW50WCxrLm5vZGVUb1JlbGF0aXZlQ29uc3RyYWludE1hcEhvcml6b250YWwuZ2V0KGNlKS5mb3JFYWNoKGZ1bmN0aW9uKHVlKXtpZih1ZS5yaWdodCl7dmFyIFE9ay5ub2RlVG9UZW1wUG9zaXRpb25NYXBIb3Jpem9udGFsLmdldCh1ZS5yaWdodCktay5ub2RlVG9UZW1wUG9zaXRpb25NYXBIb3Jpem9udGFsLmdldChjZSktWjtRPHVlLmdhcCYmKFotPXVlLmdhcC1RKX1lbHNle3ZhciBRPWsubm9kZVRvVGVtcFBvc2l0aW9uTWFwSG9yaXpvbnRhbC5nZXQoY2UpLWsubm9kZVRvVGVtcFBvc2l0aW9uTWFwSG9yaXpvbnRhbC5nZXQodWUubGVmdCkrWjtRPHVlLmdhcCYmKForPXVlLmdhcC1RKX19KSxrLm5vZGVUb1RlbXBQb3NpdGlvbk1hcEhvcml6b250YWwuc2V0KGNlLGsubm9kZVRvVGVtcFBvc2l0aW9uTWFwSG9yaXpvbnRhbC5nZXQoY2UpK1opLGsuZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5oYXMoY2UpP2suZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5nZXQoY2UpLmZvckVhY2goZnVuY3Rpb24odWUpe2suaWRUb05vZGVNYXAuZ2V0KHVlKS5kaXNwbGFjZW1lbnRYPVp9KTprLmlkVG9Ob2RlTWFwLmdldChjZSkuZGlzcGxhY2VtZW50WD1afX0pLHRoaXMubm9kZXNJblJlbGF0aXZlVmVydGljYWwuZm9yRWFjaChmdW5jdGlvbihjZSl7aWYoIWsuZml4ZWROb2Rlc09uSG9yaXpvbnRhbC5oYXMoY2UpKXt2YXIgWj0wO2suZHVtbXlUb05vZGVGb3JIb3Jpem9udGFsQWxpZ25tZW50LmhhcyhjZSk/Wj1rLmlkVG9Ob2RlTWFwLmdldChrLmR1bW15VG9Ob2RlRm9ySG9yaXpvbnRhbEFsaWdubWVudC5nZXQoY2UpWzBdKS5kaXNwbGFjZW1lbnRZOlo9ay5pZFRvTm9kZU1hcC5nZXQoY2UpLmRpc3BsYWNlbWVudFksay5ub2RlVG9SZWxhdGl2ZUNvbnN0cmFpbnRNYXBWZXJ0aWNhbC5nZXQoY2UpLmZvckVhY2goZnVuY3Rpb24odWUpe2lmKHVlLmJvdHRvbSl7dmFyIFE9ay5ub2RlVG9UZW1wUG9zaXRpb25NYXBWZXJ0aWNhbC5nZXQodWUuYm90dG9tKS1rLm5vZGVUb1RlbXBQb3NpdGlvbk1hcFZlcnRpY2FsLmdldChjZSktWjtRPHVlLmdhcCYmKFotPXVlLmdhcC1RKX1lbHNle3ZhciBRPWsubm9kZVRvVGVtcFBvc2l0aW9uTWFwVmVydGljYWwuZ2V0KGNlKS1rLm5vZGVUb1RlbXBQb3NpdGlvbk1hcFZlcnRpY2FsLmdldCh1ZS50b3ApK1o7UTx1ZS5nYXAmJihaKz11ZS5nYXAtUSl9fSksay5ub2RlVG9UZW1wUG9zaXRpb25NYXBWZXJ0aWNhbC5zZXQoY2Usay5ub2RlVG9UZW1wUG9zaXRpb25NYXBWZXJ0aWNhbC5nZXQoY2UpK1opLGsuZHVtbXlUb05vZGVGb3JIb3Jpem9udGFsQWxpZ25tZW50LmhhcyhjZSk/ay5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuZ2V0KGNlKS5mb3JFYWNoKGZ1bmN0aW9uKHVlKXtrLmlkVG9Ob2RlTWFwLmdldCh1ZSkuZGlzcGxhY2VtZW50WT1afSk6ay5pZFRvTm9kZU1hcC5nZXQoY2UpLmRpc3BsYWNlbWVudFk9Wn19KTtlbHNle2Zvcih2YXIgQT0wO0E8dGhpcy5jb21wb25lbnRzT25Ib3Jpem9udGFsLmxlbmd0aDtBKyspe3ZhciAkPXRoaXMuY29tcG9uZW50c09uSG9yaXpvbnRhbFtBXTtpZih0aGlzLmZpeGVkQ29tcG9uZW50c09uSG9yaXpvbnRhbFtBXSlmb3IodmFyIE09MDtNPCQubGVuZ3RoO00rKyl0aGlzLmR1bW15VG9Ob2RlRm9yVmVydGljYWxBbGlnbm1lbnQuaGFzKCRbTV0pP3RoaXMuZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5nZXQoJFtNXSkuZm9yRWFjaChmdW5jdGlvbih1ZSl7ay5pZFRvTm9kZU1hcC5nZXQodWUpLmRpc3BsYWNlbWVudFg9MH0pOnRoaXMuaWRUb05vZGVNYXAuZ2V0KCRbTV0pLmRpc3BsYWNlbWVudFg9MDtlbHNle2Zvcih2YXIgVT0wLEs9MCxNPTA7TTwkLmxlbmd0aDtNKyspaWYodGhpcy5kdW1teVRvTm9kZUZvclZlcnRpY2FsQWxpZ25tZW50LmhhcygkW01dKSl7dmFyIGVlPXRoaXMuZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5nZXQoJFtNXSk7VSs9ZWUubGVuZ3RoKnRoaXMuaWRUb05vZGVNYXAuZ2V0KGVlWzBdKS5kaXNwbGFjZW1lbnRYLEsrPWVlLmxlbmd0aH1lbHNlIFUrPXRoaXMuaWRUb05vZGVNYXAuZ2V0KCRbTV0pLmRpc3BsYWNlbWVudFgsSysrO2Zvcih2YXIgWT1VL0ssTT0wO008JC5sZW5ndGg7TSsrKXRoaXMuZHVtbXlUb05vZGVGb3JWZXJ0aWNhbEFsaWdubWVudC5oYXMoJFtNXSk/dGhpcy5kdW1teVRvTm9kZUZvclZlcnRpY2FsQWxpZ25tZW50LmdldCgkW01dKS5mb3JFYWNoKGZ1bmN0aW9uKHVlKXtrLmlkVG9Ob2RlTWFwLmdldCh1ZSkuZGlzcGxhY2VtZW50WD1ZfSk6dGhpcy5pZFRvTm9kZU1hcC5nZXQoJFtNXSkuZGlzcGxhY2VtZW50WD1ZfX1mb3IodmFyIEE9MDtBPHRoaXMuY29tcG9uZW50c09uVmVydGljYWwubGVuZ3RoO0ErKyl7dmFyICQ9dGhpcy5jb21wb25lbnRzT25WZXJ0aWNhbFtBXTtpZih0aGlzLmZpeGVkQ29tcG9uZW50c09uVmVydGljYWxbQV0pZm9yKHZhciBNPTA7TTwkLmxlbmd0aDtNKyspdGhpcy5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuaGFzKCRbTV0pP3RoaXMuZHVtbXlUb05vZGVGb3JIb3Jpem9udGFsQWxpZ25tZW50LmdldCgkW01dKS5mb3JFYWNoKGZ1bmN0aW9uKFEpe2suaWRUb05vZGVNYXAuZ2V0KFEpLmRpc3BsYWNlbWVudFk9MH0pOnRoaXMuaWRUb05vZGVNYXAuZ2V0KCRbTV0pLmRpc3BsYWNlbWVudFk9MDtlbHNle2Zvcih2YXIgVT0wLEs9MCxNPTA7TTwkLmxlbmd0aDtNKyspaWYodGhpcy5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuaGFzKCRbTV0pKXt2YXIgZWU9dGhpcy5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuZ2V0KCRbTV0pO1UrPWVlLmxlbmd0aCp0aGlzLmlkVG9Ob2RlTWFwLmdldChlZVswXSkuZGlzcGxhY2VtZW50WSxLKz1lZS5sZW5ndGh9ZWxzZSBVKz10aGlzLmlkVG9Ob2RlTWFwLmdldCgkW01dKS5kaXNwbGFjZW1lbnRZLEsrKztmb3IodmFyIFk9VS9LLE09MDtNPCQubGVuZ3RoO00rKyl0aGlzLmR1bW15VG9Ob2RlRm9ySG9yaXpvbnRhbEFsaWdubWVudC5oYXMoJFtNXSk/dGhpcy5kdW1teVRvTm9kZUZvckhvcml6b250YWxBbGlnbm1lbnQuZ2V0KCRbTV0pLmZvckVhY2goZnVuY3Rpb24odGUpe2suaWRUb05vZGVNYXAuZ2V0KHRlKS5kaXNwbGFjZW1lbnRZPVl9KTp0aGlzLmlkVG9Ob2RlTWFwLmdldCgkW01dKS5kaXNwbGFjZW1lbnRZPVl9fX19LE8ucHJvdG90eXBlLmNhbGN1bGF0ZU5vZGVzVG9BcHBseUdyYXZpdGF0aW9uVG89ZnVuY3Rpb24oKXt2YXIgaz1bXSxMLEE9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0R3JhcGhzKCksST1BLmxlbmd0aCxNO2ZvcihNPTA7TTxJO00rKylMPUFbTV0sTC51cGRhdGVDb25uZWN0ZWQoKSxMLmlzQ29ubmVjdGVkfHwoaz1rLmNvbmNhdChMLmdldE5vZGVzKCkpKTtyZXR1cm4ga30sTy5wcm90b3R5cGUuY3JlYXRlQmVuZHBvaW50cz1mdW5jdGlvbigpe3ZhciBrPVtdO2s9ay5jb25jYXQodGhpcy5ncmFwaE1hbmFnZXIuZ2V0QWxsRWRnZXMoKSk7dmFyIEw9bmV3IFNldCxBO2ZvcihBPTA7QTxrLmxlbmd0aDtBKyspe3ZhciBJPWtbQV07aWYoIUwuaGFzKEkpKXt2YXIgTT1JLmdldFNvdXJjZSgpLFA9SS5nZXRUYXJnZXQoKTtpZihNPT1QKUkuZ2V0QmVuZHBvaW50cygpLnB1c2gobmV3IGIpLEkuZ2V0QmVuZHBvaW50cygpLnB1c2gobmV3IGIpLHRoaXMuY3JlYXRlRHVtbXlOb2Rlc0ZvckJlbmRwb2ludHMoSSksTC5hZGQoSSk7ZWxzZXt2YXIgQj1bXTtpZihCPUIuY29uY2F0KE0uZ2V0RWRnZUxpc3RUb05vZGUoUCkpLEI9Qi5jb25jYXQoUC5nZXRFZGdlTGlzdFRvTm9kZShNKSksIUwuaGFzKEJbMF0pKXtpZihCLmxlbmd0aD4xKXt2YXIgRjtmb3IoRj0wO0Y8Qi5sZW5ndGg7RisrKXt2YXIgej1CW0ZdO3ouZ2V0QmVuZHBvaW50cygpLnB1c2gobmV3IGIpLHRoaXMuY3JlYXRlRHVtbXlOb2Rlc0ZvckJlbmRwb2ludHMoeil9fUIuZm9yRWFjaChmdW5jdGlvbigkKXtMLmFkZCgkKX0pfX19aWYoTC5zaXplPT1rLmxlbmd0aClicmVha319LE8ucHJvdG90eXBlLnBvc2l0aW9uTm9kZXNSYWRpYWxseT1mdW5jdGlvbihrKXtmb3IodmFyIEw9bmV3IHgoMCwwKSxBPU1hdGguY2VpbChNYXRoLnNxcnQoay5sZW5ndGgpKSxJPTAsTT0wLFA9MCxCPW5ldyBiKDAsMCksRj0wO0Y8ay5sZW5ndGg7RisrKXtGJUE9PTAmJihQPTAsTT1JLEYhPTAmJihNKz1tLkRFRkFVTFRfQ09NUE9ORU5UX1NFUEVSQVRJT04pLEk9MCk7dmFyIHo9a1tGXSwkPVMuZmluZENlbnRlck9mVHJlZSh6KTtMLng9UCxMLnk9TSxCPU8ucmFkaWFsTGF5b3V0KHosJCxMKSxCLnk+SSYmKEk9TWF0aC5mbG9vcihCLnkpKSxQPU1hdGguZmxvb3IoQi54K20uREVGQVVMVF9DT01QT05FTlRfU0VQRVJBVElPTil9dGhpcy50cmFuc2Zvcm0obmV3IGIodi5XT1JMRF9DRU5URVJfWC1CLngvMix2LldPUkxEX0NFTlRFUl9ZLUIueS8yKSl9LE8ucmFkaWFsTGF5b3V0PWZ1bmN0aW9uKGssTCxBKXt2YXIgST1NYXRoLm1heCh0aGlzLm1heERpYWdvbmFsSW5UcmVlKGspLG0uREVGQVVMVF9SQURJQUxfU0VQQVJBVElPTik7Ty5icmFuY2hSYWRpYWxMYXlvdXQoTCxudWxsLDAsMzU5LDAsSSk7dmFyIE09Xy5jYWxjdWxhdGVCb3VuZHMoayksUD1uZXcgQztQLnNldERldmljZU9yZ1goTS5nZXRNaW5YKCkpLFAuc2V0RGV2aWNlT3JnWShNLmdldE1pblkoKSksUC5zZXRXb3JsZE9yZ1goQS54KSxQLnNldFdvcmxkT3JnWShBLnkpO2Zvcih2YXIgQj0wO0I8ay5sZW5ndGg7QisrKXt2YXIgRj1rW0JdO0YudHJhbnNmb3JtKFApfXZhciB6PW5ldyBiKE0uZ2V0TWF4WCgpLE0uZ2V0TWF4WSgpKTtyZXR1cm4gUC5pbnZlcnNlVHJhbnNmb3JtUG9pbnQoeil9LE8uYnJhbmNoUmFkaWFsTGF5b3V0PWZ1bmN0aW9uKGssTCxBLEksTSxQKXt2YXIgQj0oSS1BKzEpLzI7QjwwJiYoQis9MTgwKTt2YXIgRj0oQitBKSUzNjAsej1GKkUuVFdPX1BJLzM2MCwkPU1hdGguY29zKHopLFU9TSpNYXRoLmNvcyh6KSxLPU0qTWF0aC5zaW4oeik7ay5zZXRDZW50ZXIoVSxLKTt2YXIgZWU9W107ZWU9ZWUuY29uY2F0KGsuZ2V0RWRnZXMoKSk7dmFyIFk9ZWUubGVuZ3RoO0whPW51bGwmJlktLTtmb3IodmFyIGNlPTAsWj1lZS5sZW5ndGgsdWUsUT1rLmdldEVkZ2VzQmV0d2VlbihMKTtRLmxlbmd0aD4xOyl7dmFyIGo9UVswXTtRLnNwbGljZSgwLDEpO3ZhciBuZT1lZS5pbmRleE9mKGopO25lPj0wJiZlZS5zcGxpY2UobmUsMSksWi0tLFktLX1MIT1udWxsP3VlPShlZS5pbmRleE9mKFFbMF0pKzEpJVo6dWU9MDtmb3IodmFyIHRlPU1hdGguYWJzKEktQSkvWSxoZT11ZTtjZSE9WTtoZT0rK2hlJVope3ZhciBsZT1lZVtoZV0uZ2V0T3RoZXJFbmQoayk7aWYobGUhPUwpe3ZhciBKPShBK2NlKnRlKSUzNjAsU2U9KEordGUpJTM2MDtPLmJyYW5jaFJhZGlhbExheW91dChsZSxrLEosU2UsTStQLFApLGNlKyt9fX0sTy5tYXhEaWFnb25hbEluVHJlZT1mdW5jdGlvbihrKXtmb3IodmFyIEw9dy5NSU5fVkFMVUUsQT0wO0E8ay5sZW5ndGg7QSsrKXt2YXIgST1rW0FdLE09SS5nZXREaWFnb25hbCgpO00+TCYmKEw9TSl9cmV0dXJuIEx9LE8ucHJvdG90eXBlLmNhbGNSZXB1bHNpb25SYW5nZT1mdW5jdGlvbigpe3JldHVybiAyKih0aGlzLmxldmVsKzEpKnRoaXMuaWRlYWxFZGdlTGVuZ3RofSxPLnByb3RvdHlwZS5ncm91cFplcm9EZWdyZWVNZW1iZXJzPWZ1bmN0aW9uKCl7dmFyIGs9dGhpcyxMPXt9O3RoaXMubWVtYmVyR3JvdXBzPXt9LHRoaXMuaWRUb0R1bW15Tm9kZT17fTtmb3IodmFyIEE9W10sST10aGlzLmdyYXBoTWFuYWdlci5nZXRBbGxOb2RlcygpLE09MDtNPEkubGVuZ3RoO00rKyl7dmFyIFA9SVtNXSxCPVAuZ2V0UGFyZW50KCk7dGhpcy5nZXROb2RlRGVncmVlV2l0aENoaWxkcmVuKFApPT09MCYmKEIuaWQ9PW51bGx8fCF0aGlzLmdldFRvQmVUaWxlZChCKSkmJkEucHVzaChQKX1mb3IodmFyIE09MDtNPEEubGVuZ3RoO00rKyl7dmFyIFA9QVtNXSxGPVAuZ2V0UGFyZW50KCkuaWQ7dHlwZW9mIExbRl0+InUiJiYoTFtGXT1bXSksTFtGXT1MW0ZdLmNvbmNhdChQKX1PYmplY3Qua2V5cyhMKS5mb3JFYWNoKGZ1bmN0aW9uKHope2lmKExbel0ubGVuZ3RoPjEpe3ZhciAkPSJEdW1teUNvbXBvdW5kXyIrejtrLm1lbWJlckdyb3Vwc1skXT1MW3pdO3ZhciBVPUxbel1bMF0uZ2V0UGFyZW50KCksSz1uZXcgZChrLmdyYXBoTWFuYWdlcik7Sy5pZD0kLEsucGFkZGluZ0xlZnQ9VS5wYWRkaW5nTGVmdHx8MCxLLnBhZGRpbmdSaWdodD1VLnBhZGRpbmdSaWdodHx8MCxLLnBhZGRpbmdCb3R0b209VS5wYWRkaW5nQm90dG9tfHwwLEsucGFkZGluZ1RvcD1VLnBhZGRpbmdUb3B8fDAsay5pZFRvRHVtbXlOb2RlWyRdPUs7dmFyIGVlPWsuZ2V0R3JhcGhNYW5hZ2VyKCkuYWRkKGsubmV3R3JhcGgoKSxLKSxZPVUuZ2V0Q2hpbGQoKTtZLmFkZChLKTtmb3IodmFyIGNlPTA7Y2U8TFt6XS5sZW5ndGg7Y2UrKyl7dmFyIFo9TFt6XVtjZV07WS5yZW1vdmUoWiksZWUuYWRkKFopfX19KX0sTy5wcm90b3R5cGUuY2xlYXJDb21wb3VuZHM9ZnVuY3Rpb24oKXt2YXIgaz17fSxMPXt9O3RoaXMucGVyZm9ybURGU09uQ29tcG91bmRzKCk7Zm9yKHZhciBBPTA7QTx0aGlzLmNvbXBvdW5kT3JkZXIubGVuZ3RoO0ErKylMW3RoaXMuY29tcG91bmRPcmRlcltBXS5pZF09dGhpcy5jb21wb3VuZE9yZGVyW0FdLGtbdGhpcy5jb21wb3VuZE9yZGVyW0FdLmlkXT1bXS5jb25jYXQodGhpcy5jb21wb3VuZE9yZGVyW0FdLmdldENoaWxkKCkuZ2V0Tm9kZXMoKSksdGhpcy5ncmFwaE1hbmFnZXIucmVtb3ZlKHRoaXMuY29tcG91bmRPcmRlcltBXS5nZXRDaGlsZCgpKSx0aGlzLmNvbXBvdW5kT3JkZXJbQV0uY2hpbGQ9bnVsbDt0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbE5vZGVzKCksdGhpcy50aWxlQ29tcG91bmRNZW1iZXJzKGssTCl9LE8ucHJvdG90eXBlLmNsZWFyWmVyb0RlZ3JlZU1lbWJlcnM9ZnVuY3Rpb24oKXt2YXIgaz10aGlzLEw9dGhpcy50aWxlZFplcm9EZWdyZWVQYWNrPVtdO09iamVjdC5rZXlzKHRoaXMubWVtYmVyR3JvdXBzKS5mb3JFYWNoKGZ1bmN0aW9uKEEpe3ZhciBJPWsuaWRUb0R1bW15Tm9kZVtBXTtpZihMW0FdPWsudGlsZU5vZGVzKGsubWVtYmVyR3JvdXBzW0FdLEkucGFkZGluZ0xlZnQrSS5wYWRkaW5nUmlnaHQpLEkucmVjdC53aWR0aD1MW0FdLndpZHRoLEkucmVjdC5oZWlnaHQ9TFtBXS5oZWlnaHQsSS5zZXRDZW50ZXIoTFtBXS5jZW50ZXJYLExbQV0uY2VudGVyWSksSS5sYWJlbE1hcmdpbkxlZnQ9MCxJLmxhYmVsTWFyZ2luVG9wPTAsbS5OT0RFX0RJTUVOU0lPTlNfSU5DTFVERV9MQUJFTFMpe3ZhciBNPUkucmVjdC53aWR0aCxQPUkucmVjdC5oZWlnaHQ7SS5sYWJlbFdpZHRoJiYoSS5sYWJlbFBvc0hvcml6b250YWw9PSJsZWZ0Ij8oSS5yZWN0LngtPUkubGFiZWxXaWR0aCxJLnNldFdpZHRoKE0rSS5sYWJlbFdpZHRoKSxJLmxhYmVsTWFyZ2luTGVmdD1JLmxhYmVsV2lkdGgpOkkubGFiZWxQb3NIb3Jpem9udGFsPT0iY2VudGVyIiYmSS5sYWJlbFdpZHRoPk0/KEkucmVjdC54LT0oSS5sYWJlbFdpZHRoLU0pLzIsSS5zZXRXaWR0aChJLmxhYmVsV2lkdGgpLEkubGFiZWxNYXJnaW5MZWZ0PShJLmxhYmVsV2lkdGgtTSkvMik6SS5sYWJlbFBvc0hvcml6b250YWw9PSJyaWdodCImJkkuc2V0V2lkdGgoTStJLmxhYmVsV2lkdGgpKSxJLmxhYmVsSGVpZ2h0JiYoSS5sYWJlbFBvc1ZlcnRpY2FsPT0idG9wIj8oSS5yZWN0LnktPUkubGFiZWxIZWlnaHQsSS5zZXRIZWlnaHQoUCtJLmxhYmVsSGVpZ2h0KSxJLmxhYmVsTWFyZ2luVG9wPUkubGFiZWxIZWlnaHQpOkkubGFiZWxQb3NWZXJ0aWNhbD09ImNlbnRlciImJkkubGFiZWxIZWlnaHQ+UD8oSS5yZWN0LnktPShJLmxhYmVsSGVpZ2h0LVApLzIsSS5zZXRIZWlnaHQoSS5sYWJlbEhlaWdodCksSS5sYWJlbE1hcmdpblRvcD0oSS5sYWJlbEhlaWdodC1QKS8yKTpJLmxhYmVsUG9zVmVydGljYWw9PSJib3R0b20iJiZJLnNldEhlaWdodChQK0kubGFiZWxIZWlnaHQpKX19KX0sTy5wcm90b3R5cGUucmVwb3B1bGF0ZUNvbXBvdW5kcz1mdW5jdGlvbigpe2Zvcih2YXIgaz10aGlzLmNvbXBvdW5kT3JkZXIubGVuZ3RoLTE7az49MDtrLS0pe3ZhciBMPXRoaXMuY29tcG91bmRPcmRlcltrXSxBPUwuaWQsST1MLnBhZGRpbmdMZWZ0LE09TC5wYWRkaW5nVG9wLFA9TC5sYWJlbE1hcmdpbkxlZnQsQj1MLmxhYmVsTWFyZ2luVG9wO3RoaXMuYWRqdXN0TG9jYXRpb25zKHRoaXMudGlsZWRNZW1iZXJQYWNrW0FdLEwucmVjdC54LEwucmVjdC55LEksTSxQLEIpfX0sTy5wcm90b3R5cGUucmVwb3B1bGF0ZVplcm9EZWdyZWVNZW1iZXJzPWZ1bmN0aW9uKCl7dmFyIGs9dGhpcyxMPXRoaXMudGlsZWRaZXJvRGVncmVlUGFjaztPYmplY3Qua2V5cyhMKS5mb3JFYWNoKGZ1bmN0aW9uKEEpe3ZhciBJPWsuaWRUb0R1bW15Tm9kZVtBXSxNPUkucGFkZGluZ0xlZnQsUD1JLnBhZGRpbmdUb3AsQj1JLmxhYmVsTWFyZ2luTGVmdCxGPUkubGFiZWxNYXJnaW5Ub3A7ay5hZGp1c3RMb2NhdGlvbnMoTFtBXSxJLnJlY3QueCxJLnJlY3QueSxNLFAsQixGKX0pfSxPLnByb3RvdHlwZS5nZXRUb0JlVGlsZWQ9ZnVuY3Rpb24oayl7dmFyIEw9ay5pZDtpZih0aGlzLnRvQmVUaWxlZFtMXSE9bnVsbClyZXR1cm4gdGhpcy50b0JlVGlsZWRbTF07dmFyIEE9ay5nZXRDaGlsZCgpO2lmKEE9PW51bGwpcmV0dXJuIHRoaXMudG9CZVRpbGVkW0xdPSExLCExO2Zvcih2YXIgST1BLmdldE5vZGVzKCksTT0wO008SS5sZW5ndGg7TSsrKXt2YXIgUD1JW01dO2lmKHRoaXMuZ2V0Tm9kZURlZ3JlZShQKT4wKXJldHVybiB0aGlzLnRvQmVUaWxlZFtMXT0hMSwhMTtpZihQLmdldENoaWxkKCk9PW51bGwpe3RoaXMudG9CZVRpbGVkW1AuaWRdPSExO2NvbnRpbnVlfWlmKCF0aGlzLmdldFRvQmVUaWxlZChQKSlyZXR1cm4gdGhpcy50b0JlVGlsZWRbTF09ITEsITF9cmV0dXJuIHRoaXMudG9CZVRpbGVkW0xdPSEwLCEwfSxPLnByb3RvdHlwZS5nZXROb2RlRGVncmVlPWZ1bmN0aW9uKGspe2Zvcih2YXIgTD1rLmlkLEE9ay5nZXRFZGdlcygpLEk9MCxNPTA7TTxBLmxlbmd0aDtNKyspe3ZhciBQPUFbTV07UC5nZXRTb3VyY2UoKS5pZCE9PVAuZ2V0VGFyZ2V0KCkuaWQmJihJPUkrMSl9cmV0dXJuIEl9LE8ucHJvdG90eXBlLmdldE5vZGVEZWdyZWVXaXRoQ2hpbGRyZW49ZnVuY3Rpb24oayl7dmFyIEw9dGhpcy5nZXROb2RlRGVncmVlKGspO2lmKGsuZ2V0Q2hpbGQoKT09bnVsbClyZXR1cm4gTDtmb3IodmFyIEE9ay5nZXRDaGlsZCgpLmdldE5vZGVzKCksST0wO0k8QS5sZW5ndGg7SSsrKXt2YXIgTT1BW0ldO0wrPXRoaXMuZ2V0Tm9kZURlZ3JlZVdpdGhDaGlsZHJlbihNKX1yZXR1cm4gTH0sTy5wcm90b3R5cGUucGVyZm9ybURGU09uQ29tcG91bmRzPWZ1bmN0aW9uKCl7dGhpcy5jb21wb3VuZE9yZGVyPVtdLHRoaXMuZmlsbENvbXBleE9yZGVyQnlERlModGhpcy5ncmFwaE1hbmFnZXIuZ2V0Um9vdCgpLmdldE5vZGVzKCkpfSxPLnByb3RvdHlwZS5maWxsQ29tcGV4T3JkZXJCeURGUz1mdW5jdGlvbihrKXtmb3IodmFyIEw9MDtMPGsubGVuZ3RoO0wrKyl7dmFyIEE9a1tMXTtBLmdldENoaWxkKCkhPW51bGwmJnRoaXMuZmlsbENvbXBleE9yZGVyQnlERlMoQS5nZXRDaGlsZCgpLmdldE5vZGVzKCkpLHRoaXMuZ2V0VG9CZVRpbGVkKEEpJiZ0aGlzLmNvbXBvdW5kT3JkZXIucHVzaChBKX19LE8ucHJvdG90eXBlLmFkanVzdExvY2F0aW9ucz1mdW5jdGlvbihrLEwsQSxJLE0sUCxCKXtMKz1JK1AsQSs9TStCO2Zvcih2YXIgRj1MLHo9MDt6PGsucm93cy5sZW5ndGg7eisrKXt2YXIgJD1rLnJvd3Nbel07TD1GO2Zvcih2YXIgVT0wLEs9MDtLPCQubGVuZ3RoO0srKyl7dmFyIGVlPSRbS107ZWUucmVjdC54PUwsZWUucmVjdC55PUEsTCs9ZWUucmVjdC53aWR0aCtrLmhvcml6b250YWxQYWRkaW5nLGVlLnJlY3QuaGVpZ2h0PlUmJihVPWVlLnJlY3QuaGVpZ2h0KX1BKz1VK2sudmVydGljYWxQYWRkaW5nfX0sTy5wcm90b3R5cGUudGlsZUNvbXBvdW5kTWVtYmVycz1mdW5jdGlvbihrLEwpe3ZhciBBPXRoaXM7dGhpcy50aWxlZE1lbWJlclBhY2s9W10sT2JqZWN0LmtleXMoaykuZm9yRWFjaChmdW5jdGlvbihJKXt2YXIgTT1MW0ldO2lmKEEudGlsZWRNZW1iZXJQYWNrW0ldPUEudGlsZU5vZGVzKGtbSV0sTS5wYWRkaW5nTGVmdCtNLnBhZGRpbmdSaWdodCksTS5yZWN0LndpZHRoPUEudGlsZWRNZW1iZXJQYWNrW0ldLndpZHRoLE0ucmVjdC5oZWlnaHQ9QS50aWxlZE1lbWJlclBhY2tbSV0uaGVpZ2h0LE0uc2V0Q2VudGVyKEEudGlsZWRNZW1iZXJQYWNrW0ldLmNlbnRlclgsQS50aWxlZE1lbWJlclBhY2tbSV0uY2VudGVyWSksTS5sYWJlbE1hcmdpbkxlZnQ9MCxNLmxhYmVsTWFyZ2luVG9wPTAsbS5OT0RFX0RJTUVOU0lPTlNfSU5DTFVERV9MQUJFTFMpe3ZhciBQPU0ucmVjdC53aWR0aCxCPU0ucmVjdC5oZWlnaHQ7TS5sYWJlbFdpZHRoJiYoTS5sYWJlbFBvc0hvcml6b250YWw9PSJsZWZ0Ij8oTS5yZWN0LngtPU0ubGFiZWxXaWR0aCxNLnNldFdpZHRoKFArTS5sYWJlbFdpZHRoKSxNLmxhYmVsTWFyZ2luTGVmdD1NLmxhYmVsV2lkdGgpOk0ubGFiZWxQb3NIb3Jpem9udGFsPT0iY2VudGVyIiYmTS5sYWJlbFdpZHRoPlA/KE0ucmVjdC54LT0oTS5sYWJlbFdpZHRoLVApLzIsTS5zZXRXaWR0aChNLmxhYmVsV2lkdGgpLE0ubGFiZWxNYXJnaW5MZWZ0PShNLmxhYmVsV2lkdGgtUCkvMik6TS5sYWJlbFBvc0hvcml6b250YWw9PSJyaWdodCImJk0uc2V0V2lkdGgoUCtNLmxhYmVsV2lkdGgpKSxNLmxhYmVsSGVpZ2h0JiYoTS5sYWJlbFBvc1ZlcnRpY2FsPT0idG9wIj8oTS5yZWN0LnktPU0ubGFiZWxIZWlnaHQsTS5zZXRIZWlnaHQoQitNLmxhYmVsSGVpZ2h0KSxNLmxhYmVsTWFyZ2luVG9wPU0ubGFiZWxIZWlnaHQpOk0ubGFiZWxQb3NWZXJ0aWNhbD09ImNlbnRlciImJk0ubGFiZWxIZWlnaHQ+Qj8oTS5yZWN0LnktPShNLmxhYmVsSGVpZ2h0LUIpLzIsTS5zZXRIZWlnaHQoTS5sYWJlbEhlaWdodCksTS5sYWJlbE1hcmdpblRvcD0oTS5sYWJlbEhlaWdodC1CKS8yKTpNLmxhYmVsUG9zVmVydGljYWw9PSJib3R0b20iJiZNLnNldEhlaWdodChCK00ubGFiZWxIZWlnaHQpKX19KX0sTy5wcm90b3R5cGUudGlsZU5vZGVzPWZ1bmN0aW9uKGssTCl7dmFyIEE9dGhpcy50aWxlTm9kZXNCeUZhdm9yaW5nRGltKGssTCwhMCksST10aGlzLnRpbGVOb2Rlc0J5RmF2b3JpbmdEaW0oayxMLCExKSxNPXRoaXMuZ2V0T3JnUmF0aW8oQSksUD10aGlzLmdldE9yZ1JhdGlvKEkpLEI7cmV0dXJuIFA8TT9CPUk6Qj1BLEJ9LE8ucHJvdG90eXBlLmdldE9yZ1JhdGlvPWZ1bmN0aW9uKGspe3ZhciBMPWsud2lkdGgsQT1rLmhlaWdodCxJPUwvQTtyZXR1cm4gSTwxJiYoST0xL0kpLEl9LE8ucHJvdG90eXBlLmNhbGNJZGVhbFJvd1dpZHRoPWZ1bmN0aW9uKGssTCl7dmFyIEE9bS5USUxJTkdfUEFERElOR19WRVJUSUNBTCxJPW0uVElMSU5HX1BBRERJTkdfSE9SSVpPTlRBTCxNPWsubGVuZ3RoLFA9MCxCPTAsRj0wO2suZm9yRWFjaChmdW5jdGlvbihjZSl7UCs9Y2UuZ2V0V2lkdGgoKSxCKz1jZS5nZXRIZWlnaHQoKSxjZS5nZXRXaWR0aCgpPkYmJihGPWNlLmdldFdpZHRoKCkpfSk7dmFyIHo9UC9NLCQ9Qi9NLFU9TWF0aC5wb3coQS1JLDIpKzQqKHorSSkqKCQrQSkqTSxLPShJLUErTWF0aC5zcXJ0KFUpKS8oMiooeitJKSksZWU7TD8oZWU9TWF0aC5jZWlsKEspLGVlPT1LJiZlZSsrKTplZT1NYXRoLmZsb29yKEspO3ZhciBZPWVlKih6K0kpLUk7cmV0dXJuIEY+WSYmKFk9RiksWSs9SSoyLFl9LE8ucHJvdG90eXBlLnRpbGVOb2Rlc0J5RmF2b3JpbmdEaW09ZnVuY3Rpb24oayxMLEEpe3ZhciBJPW0uVElMSU5HX1BBRERJTkdfVkVSVElDQUwsTT1tLlRJTElOR19QQURESU5HX0hPUklaT05UQUwsUD1tLlRJTElOR19DT01QQVJFX0JZLEI9e3Jvd3M6W10scm93V2lkdGg6W10scm93SGVpZ2h0OltdLHdpZHRoOjAsaGVpZ2h0OkwsdmVydGljYWxQYWRkaW5nOkksaG9yaXpvbnRhbFBhZGRpbmc6TSxjZW50ZXJYOjAsY2VudGVyWTowfTtQJiYoQi5pZGVhbFJvd1dpZHRoPXRoaXMuY2FsY0lkZWFsUm93V2lkdGgoayxBKSk7dmFyIEY9byhmdW5jdGlvbihaKXtyZXR1cm4gWi5yZWN0LndpZHRoKloucmVjdC5oZWlnaHR9LCJnZXROb2RlQXJlYSIpLHo9byhmdW5jdGlvbihaLHVlKXtyZXR1cm4gRih1ZSktRihaKX0sImFyZWFDb21wYXJlRmNuIik7ay5zb3J0KGZ1bmN0aW9uKGNlLFope3ZhciB1ZT16O3JldHVybiBCLmlkZWFsUm93V2lkdGg/KHVlPVAsdWUoY2UuaWQsWi5pZCkpOnVlKGNlLFopfSk7Zm9yKHZhciAkPTAsVT0wLEs9MDtLPGsubGVuZ3RoO0srKyl7dmFyIGVlPWtbS107JCs9ZWUuZ2V0Q2VudGVyWCgpLFUrPWVlLmdldENlbnRlclkoKX1CLmNlbnRlclg9JC9rLmxlbmd0aCxCLmNlbnRlclk9VS9rLmxlbmd0aDtmb3IodmFyIEs9MDtLPGsubGVuZ3RoO0srKyl7dmFyIGVlPWtbS107aWYoQi5yb3dzLmxlbmd0aD09MCl0aGlzLmluc2VydE5vZGVUb1JvdyhCLGVlLDAsTCk7ZWxzZSBpZih0aGlzLmNhbkFkZEhvcml6b250YWwoQixlZS5yZWN0LndpZHRoLGVlLnJlY3QuaGVpZ2h0KSl7dmFyIFk9Qi5yb3dzLmxlbmd0aC0xO0IuaWRlYWxSb3dXaWR0aHx8KFk9dGhpcy5nZXRTaG9ydGVzdFJvd0luZGV4KEIpKSx0aGlzLmluc2VydE5vZGVUb1JvdyhCLGVlLFksTCl9ZWxzZSB0aGlzLmluc2VydE5vZGVUb1JvdyhCLGVlLEIucm93cy5sZW5ndGgsTCk7dGhpcy5zaGlmdFRvTGFzdFJvdyhCKX1yZXR1cm4gQn0sTy5wcm90b3R5cGUuaW5zZXJ0Tm9kZVRvUm93PWZ1bmN0aW9uKGssTCxBLEkpe3ZhciBNPUk7aWYoQT09ay5yb3dzLmxlbmd0aCl7dmFyIFA9W107ay5yb3dzLnB1c2goUCksay5yb3dXaWR0aC5wdXNoKE0pLGsucm93SGVpZ2h0LnB1c2goMCl9dmFyIEI9ay5yb3dXaWR0aFtBXStMLnJlY3Qud2lkdGg7ay5yb3dzW0FdLmxlbmd0aD4wJiYoQis9ay5ob3Jpem9udGFsUGFkZGluZyksay5yb3dXaWR0aFtBXT1CLGsud2lkdGg8QiYmKGsud2lkdGg9Qik7dmFyIEY9TC5yZWN0LmhlaWdodDtBPjAmJihGKz1rLnZlcnRpY2FsUGFkZGluZyk7dmFyIHo9MDtGPmsucm93SGVpZ2h0W0FdJiYoej1rLnJvd0hlaWdodFtBXSxrLnJvd0hlaWdodFtBXT1GLHo9ay5yb3dIZWlnaHRbQV0teiksay5oZWlnaHQrPXosay5yb3dzW0FdLnB1c2goTCl9LE8ucHJvdG90eXBlLmdldFNob3J0ZXN0Um93SW5kZXg9ZnVuY3Rpb24oayl7Zm9yKHZhciBMPS0xLEE9TnVtYmVyLk1BWF9WQUxVRSxJPTA7STxrLnJvd3MubGVuZ3RoO0krKylrLnJvd1dpZHRoW0ldPEEmJihMPUksQT1rLnJvd1dpZHRoW0ldKTtyZXR1cm4gTH0sTy5wcm90b3R5cGUuZ2V0TG9uZ2VzdFJvd0luZGV4PWZ1bmN0aW9uKGspe2Zvcih2YXIgTD0tMSxBPU51bWJlci5NSU5fVkFMVUUsST0wO0k8ay5yb3dzLmxlbmd0aDtJKyspay5yb3dXaWR0aFtJXT5BJiYoTD1JLEE9ay5yb3dXaWR0aFtJXSk7cmV0dXJuIEx9LE8ucHJvdG90eXBlLmNhbkFkZEhvcml6b250YWw9ZnVuY3Rpb24oayxMLEEpe2lmKGsuaWRlYWxSb3dXaWR0aCl7dmFyIEk9ay5yb3dzLmxlbmd0aC0xLE09ay5yb3dXaWR0aFtJXTtyZXR1cm4gTStMK2suaG9yaXpvbnRhbFBhZGRpbmc8PWsuaWRlYWxSb3dXaWR0aH12YXIgUD10aGlzLmdldFNob3J0ZXN0Um93SW5kZXgoayk7aWYoUDwwKXJldHVybiEwO3ZhciBCPWsucm93V2lkdGhbUF07aWYoQitrLmhvcml6b250YWxQYWRkaW5nK0w8PWsud2lkdGgpcmV0dXJuITA7dmFyIEY9MDtrLnJvd0hlaWdodFtQXTxBJiZQPjAmJihGPUEray52ZXJ0aWNhbFBhZGRpbmctay5yb3dIZWlnaHRbUF0pO3ZhciB6O2sud2lkdGgtQj49TCtrLmhvcml6b250YWxQYWRkaW5nP3o9KGsuaGVpZ2h0K0YpLyhCK0wray5ob3Jpem9udGFsUGFkZGluZyk6ej0oay5oZWlnaHQrRikvay53aWR0aCxGPUEray52ZXJ0aWNhbFBhZGRpbmc7dmFyICQ7cmV0dXJuIGsud2lkdGg8TD8kPShrLmhlaWdodCtGKS9MOiQ9KGsuaGVpZ2h0K0YpL2sud2lkdGgsJDwxJiYoJD0xLyQpLHo8MSYmKHo9MS96KSx6PCR9LE8ucHJvdG90eXBlLnNoaWZ0VG9MYXN0Um93PWZ1bmN0aW9uKGspe3ZhciBMPXRoaXMuZ2V0TG9uZ2VzdFJvd0luZGV4KGspLEE9ay5yb3dXaWR0aC5sZW5ndGgtMSxJPWsucm93c1tMXSxNPUlbSS5sZW5ndGgtMV0sUD1NLndpZHRoK2suaG9yaXpvbnRhbFBhZGRpbmc7aWYoay53aWR0aC1rLnJvd1dpZHRoW0FdPlAmJkwhPUEpe0kuc3BsaWNlKC0xLDEpLGsucm93c1tBXS5wdXNoKE0pLGsucm93V2lkdGhbTF09ay5yb3dXaWR0aFtMXS1QLGsucm93V2lkdGhbQV09ay5yb3dXaWR0aFtBXStQLGsud2lkdGg9ay5yb3dXaWR0aFtpbnN0YW5jZS5nZXRMb25nZXN0Um93SW5kZXgoayldO2Zvcih2YXIgQj1OdW1iZXIuTUlOX1ZBTFVFLEY9MDtGPEkubGVuZ3RoO0YrKylJW0ZdLmhlaWdodD5CJiYoQj1JW0ZdLmhlaWdodCk7TD4wJiYoQis9ay52ZXJ0aWNhbFBhZGRpbmcpO3ZhciB6PWsucm93SGVpZ2h0W0xdK2sucm93SGVpZ2h0W0FdO2sucm93SGVpZ2h0W0xdPUIsay5yb3dIZWlnaHRbQV08TS5oZWlnaHQray52ZXJ0aWNhbFBhZGRpbmcmJihrLnJvd0hlaWdodFtBXT1NLmhlaWdodCtrLnZlcnRpY2FsUGFkZGluZyk7dmFyICQ9ay5yb3dIZWlnaHRbTF0ray5yb3dIZWlnaHRbQV07ay5oZWlnaHQrPSQteix0aGlzLnNoaWZ0VG9MYXN0Um93KGspfX0sTy5wcm90b3R5cGUudGlsaW5nUHJlTGF5b3V0PWZ1bmN0aW9uKCl7bS5USUxFJiYodGhpcy5ncm91cFplcm9EZWdyZWVNZW1iZXJzKCksdGhpcy5jbGVhckNvbXBvdW5kcygpLHRoaXMuY2xlYXJaZXJvRGVncmVlTWVtYmVycygpKX0sTy5wcm90b3R5cGUudGlsaW5nUG9zdExheW91dD1mdW5jdGlvbigpe20uVElMRSYmKHRoaXMucmVwb3B1bGF0ZVplcm9EZWdyZWVNZW1iZXJzKCksdGhpcy5yZXBvcHVsYXRlQ29tcG91bmRzKCkpfSxPLnByb3RvdHlwZS5yZWR1Y2VUcmVlcz1mdW5jdGlvbigpe2Zvcih2YXIgaz1bXSxMPSEwLEE7TDspe3ZhciBJPXRoaXMuZ3JhcGhNYW5hZ2VyLmdldEFsbE5vZGVzKCksTT1bXTtMPSExO2Zvcih2YXIgUD0wO1A8SS5sZW5ndGg7UCsrKWlmKEE9SVtQXSxBLmdldEVkZ2VzKCkubGVuZ3RoPT0xJiYhQS5nZXRFZGdlcygpWzBdLmlzSW50ZXJHcmFwaCYmQS5nZXRDaGlsZCgpPT1udWxsKXtpZihtLlBVUkVfSU5DUkVNRU5UQUwpe3ZhciBCPUEuZ2V0RWRnZXMoKVswXS5nZXRPdGhlckVuZChBKSxGPW5ldyBUKEEuZ2V0Q2VudGVyWCgpLUIuZ2V0Q2VudGVyWCgpLEEuZ2V0Q2VudGVyWSgpLUIuZ2V0Q2VudGVyWSgpKTtNLnB1c2goW0EsQS5nZXRFZGdlcygpWzBdLEEuZ2V0T3duZXIoKSxGXSl9ZWxzZSBNLnB1c2goW0EsQS5nZXRFZGdlcygpWzBdLEEuZ2V0T3duZXIoKV0pO0w9ITB9aWYoTD09ITApe2Zvcih2YXIgej1bXSwkPTA7JDxNLmxlbmd0aDskKyspTVskXVswXS5nZXRFZGdlcygpLmxlbmd0aD09MSYmKHoucHVzaChNWyRdKSxNWyRdWzBdLmdldE93bmVyKCkucmVtb3ZlKE1bJF1bMF0pKTtrLnB1c2goeiksdGhpcy5ncmFwaE1hbmFnZXIucmVzZXRBbGxOb2RlcygpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsRWRnZXMoKX19dGhpcy5wcnVuZWROb2Rlc0FsbD1rfSxPLnByb3RvdHlwZS5ncm93VHJlZT1mdW5jdGlvbihrKXtmb3IodmFyIEw9ay5sZW5ndGgsQT1rW0wtMV0sSSxNPTA7TTxBLmxlbmd0aDtNKyspST1BW01dLHRoaXMuZmluZFBsYWNlZm9yUHJ1bmVkTm9kZShJKSxJWzJdLmFkZChJWzBdKSxJWzJdLmFkZChJWzFdLElbMV0uc291cmNlLElbMV0udGFyZ2V0KTtrLnNwbGljZShrLmxlbmd0aC0xLDEpLHRoaXMuZ3JhcGhNYW5hZ2VyLnJlc2V0QWxsTm9kZXMoKSx0aGlzLmdyYXBoTWFuYWdlci5yZXNldEFsbEVkZ2VzKCl9LE8ucHJvdG90eXBlLmZpbmRQbGFjZWZvclBydW5lZE5vZGU9ZnVuY3Rpb24oayl7dmFyIEwsQSxJPWtbMF07aWYoST09a1sxXS5zb3VyY2U/QT1rWzFdLnRhcmdldDpBPWtbMV0uc291cmNlLG0uUFVSRV9JTkNSRU1FTlRBTClJLnNldENlbnRlcihBLmdldENlbnRlclgoKStrWzNdLmdldFdpZHRoKCksQS5nZXRDZW50ZXJZKCkra1szXS5nZXRIZWlnaHQoKSk7ZWxzZXt2YXIgTT1BLnN0YXJ0WCxQPUEuZmluaXNoWCxCPUEuc3RhcnRZLEY9QS5maW5pc2hZLHo9MCwkPTAsVT0wLEs9MCxlZT1beixVLCQsS107aWYoQj4wKWZvcih2YXIgWT1NO1k8PVA7WSsrKWVlWzBdKz10aGlzLmdyaWRbWV1bQi0xXS5sZW5ndGgrdGhpcy5ncmlkW1ldW0JdLmxlbmd0aC0xO2lmKFA8dGhpcy5ncmlkLmxlbmd0aC0xKWZvcih2YXIgWT1CO1k8PUY7WSsrKWVlWzFdKz10aGlzLmdyaWRbUCsxXVtZXS5sZW5ndGgrdGhpcy5ncmlkW1BdW1ldLmxlbmd0aC0xO2lmKEY8dGhpcy5ncmlkWzBdLmxlbmd0aC0xKWZvcih2YXIgWT1NO1k8PVA7WSsrKWVlWzJdKz10aGlzLmdyaWRbWV1bRisxXS5sZW5ndGgrdGhpcy5ncmlkW1ldW0ZdLmxlbmd0aC0xO2lmKE0+MClmb3IodmFyIFk9QjtZPD1GO1krKyllZVszXSs9dGhpcy5ncmlkW00tMV1bWV0ubGVuZ3RoK3RoaXMuZ3JpZFtNXVtZXS5sZW5ndGgtMTtmb3IodmFyIGNlPXcuTUFYX1ZBTFVFLFosdWUsUT0wO1E8ZWUubGVuZ3RoO1ErKyllZVtRXTxjZT8oY2U9ZWVbUV0sWj0xLHVlPVEpOmVlW1FdPT1jZSYmWisrO2lmKFo9PTMmJmNlPT0wKWVlWzBdPT0wJiZlZVsxXT09MCYmZWVbMl09PTA/TD0xOmVlWzBdPT0wJiZlZVsxXT09MCYmZWVbM109PTA/TD0wOmVlWzBdPT0wJiZlZVsyXT09MCYmZWVbM109PTA/TD0zOmVlWzFdPT0wJiZlZVsyXT09MCYmZWVbM109PTAmJihMPTIpO2Vsc2UgaWYoWj09MiYmY2U9PTApe3ZhciBqPU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoyKTtlZVswXT09MCYmZWVbMV09PTA/aj09MD9MPTA6TD0xOmVlWzBdPT0wJiZlZVsyXT09MD9qPT0wP0w9MDpMPTI6ZWVbMF09PTAmJmVlWzNdPT0wP2o9PTA/TD0wOkw9MzplZVsxXT09MCYmZWVbMl09PTA/aj09MD9MPTE6TD0yOmVlWzFdPT0wJiZlZVszXT09MD9qPT0wP0w9MTpMPTM6aj09MD9MPTI6TD0zfWVsc2UgaWYoWj09NCYmY2U9PTApe3ZhciBqPU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSo0KTtMPWp9ZWxzZSBMPXVlO0w9PTA/SS5zZXRDZW50ZXIoQS5nZXRDZW50ZXJYKCksQS5nZXRDZW50ZXJZKCktQS5nZXRIZWlnaHQoKS8yLXkuREVGQVVMVF9FREdFX0xFTkdUSC1JLmdldEhlaWdodCgpLzIpOkw9PTE/SS5zZXRDZW50ZXIoQS5nZXRDZW50ZXJYKCkrQS5nZXRXaWR0aCgpLzIreS5ERUZBVUxUX0VER0VfTEVOR1RIK0kuZ2V0V2lkdGgoKS8yLEEuZ2V0Q2VudGVyWSgpKTpMPT0yP0kuc2V0Q2VudGVyKEEuZ2V0Q2VudGVyWCgpLEEuZ2V0Q2VudGVyWSgpK0EuZ2V0SGVpZ2h0KCkvMit5LkRFRkFVTFRfRURHRV9MRU5HVEgrSS5nZXRIZWlnaHQoKS8yKTpJLnNldENlbnRlcihBLmdldENlbnRlclgoKS1BLmdldFdpZHRoKCkvMi15LkRFRkFVTFRfRURHRV9MRU5HVEgtSS5nZXRXaWR0aCgpLzIsQS5nZXRDZW50ZXJZKCkpfX0sYS5leHBvcnRzPU99LDk5MTooYSxzLGwpPT57dmFyIHU9bCg1NTEpLkZETGF5b3V0Tm9kZSxoPWwoNTUxKS5JTWF0aDtmdW5jdGlvbiBmKHAsbSxnLHkpe3UuY2FsbCh0aGlzLHAsbSxnLHkpfW8oZiwiQ29TRU5vZGUiKSxmLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHUucHJvdG90eXBlKTtmb3IodmFyIGQgaW4gdSlmW2RdPXVbZF07Zi5wcm90b3R5cGUuY2FsY3VsYXRlRGlzcGxhY2VtZW50PWZ1bmN0aW9uKCl7dmFyIHA9dGhpcy5ncmFwaE1hbmFnZXIuZ2V0TGF5b3V0KCk7dGhpcy5nZXRDaGlsZCgpIT1udWxsJiZ0aGlzLmZpeGVkTm9kZVdlaWdodD8odGhpcy5kaXNwbGFjZW1lbnRYKz1wLmNvb2xpbmdGYWN0b3IqKHRoaXMuc3ByaW5nRm9yY2VYK3RoaXMucmVwdWxzaW9uRm9yY2VYK3RoaXMuZ3Jhdml0YXRpb25Gb3JjZVgpL3RoaXMuZml4ZWROb2RlV2VpZ2h0LHRoaXMuZGlzcGxhY2VtZW50WSs9cC5jb29saW5nRmFjdG9yKih0aGlzLnNwcmluZ0ZvcmNlWSt0aGlzLnJlcHVsc2lvbkZvcmNlWSt0aGlzLmdyYXZpdGF0aW9uRm9yY2VZKS90aGlzLmZpeGVkTm9kZVdlaWdodCk6KHRoaXMuZGlzcGxhY2VtZW50WCs9cC5jb29saW5nRmFjdG9yKih0aGlzLnNwcmluZ0ZvcmNlWCt0aGlzLnJlcHVsc2lvbkZvcmNlWCt0aGlzLmdyYXZpdGF0aW9uRm9yY2VYKS90aGlzLm5vT2ZDaGlsZHJlbix0aGlzLmRpc3BsYWNlbWVudFkrPXAuY29vbGluZ0ZhY3RvcioodGhpcy5zcHJpbmdGb3JjZVkrdGhpcy5yZXB1bHNpb25Gb3JjZVkrdGhpcy5ncmF2aXRhdGlvbkZvcmNlWSkvdGhpcy5ub09mQ2hpbGRyZW4pLE1hdGguYWJzKHRoaXMuZGlzcGxhY2VtZW50WCk+cC5jb29saW5nRmFjdG9yKnAubWF4Tm9kZURpc3BsYWNlbWVudCYmKHRoaXMuZGlzcGxhY2VtZW50WD1wLmNvb2xpbmdGYWN0b3IqcC5tYXhOb2RlRGlzcGxhY2VtZW50Kmguc2lnbih0aGlzLmRpc3BsYWNlbWVudFgpKSxNYXRoLmFicyh0aGlzLmRpc3BsYWNlbWVudFkpPnAuY29vbGluZ0ZhY3RvcipwLm1heE5vZGVEaXNwbGFjZW1lbnQmJih0aGlzLmRpc3BsYWNlbWVudFk9cC5jb29saW5nRmFjdG9yKnAubWF4Tm9kZURpc3BsYWNlbWVudCpoLnNpZ24odGhpcy5kaXNwbGFjZW1lbnRZKSksdGhpcy5jaGlsZCYmdGhpcy5jaGlsZC5nZXROb2RlcygpLmxlbmd0aD4wJiZ0aGlzLnByb3BvZ2F0ZURpc3BsYWNlbWVudFRvQ2hpbGRyZW4odGhpcy5kaXNwbGFjZW1lbnRYLHRoaXMuZGlzcGxhY2VtZW50WSl9LGYucHJvdG90eXBlLnByb3BvZ2F0ZURpc3BsYWNlbWVudFRvQ2hpbGRyZW49ZnVuY3Rpb24ocCxtKXtmb3IodmFyIGc9dGhpcy5nZXRDaGlsZCgpLmdldE5vZGVzKCkseSx2PTA7djxnLmxlbmd0aDt2KyspeT1nW3ZdLHkuZ2V0Q2hpbGQoKT09bnVsbD8oeS5kaXNwbGFjZW1lbnRYKz1wLHkuZGlzcGxhY2VtZW50WSs9bSk6eS5wcm9wb2dhdGVEaXNwbGFjZW1lbnRUb0NoaWxkcmVuKHAsbSl9LGYucHJvdG90eXBlLm1vdmU9ZnVuY3Rpb24oKXt2YXIgcD10aGlzLmdyYXBoTWFuYWdlci5nZXRMYXlvdXQoKTsodGhpcy5jaGlsZD09bnVsbHx8dGhpcy5jaGlsZC5nZXROb2RlcygpLmxlbmd0aD09MCkmJih0aGlzLm1vdmVCeSh0aGlzLmRpc3BsYWNlbWVudFgsdGhpcy5kaXNwbGFjZW1lbnRZKSxwLnRvdGFsRGlzcGxhY2VtZW50Kz1NYXRoLmFicyh0aGlzLmRpc3BsYWNlbWVudFgpK01hdGguYWJzKHRoaXMuZGlzcGxhY2VtZW50WSkpLHRoaXMuc3ByaW5nRm9yY2VYPTAsdGhpcy5zcHJpbmdGb3JjZVk9MCx0aGlzLnJlcHVsc2lvbkZvcmNlWD0wLHRoaXMucmVwdWxzaW9uRm9yY2VZPTAsdGhpcy5ncmF2aXRhdGlvbkZvcmNlWD0wLHRoaXMuZ3Jhdml0YXRpb25Gb3JjZVk9MCx0aGlzLmRpc3BsYWNlbWVudFg9MCx0aGlzLmRpc3BsYWNlbWVudFk9MH0sZi5wcm90b3R5cGUuc2V0UHJlZDE9ZnVuY3Rpb24ocCl7dGhpcy5wcmVkMT1wfSxmLnByb3RvdHlwZS5nZXRQcmVkMT1mdW5jdGlvbigpe3JldHVybiBwcmVkMX0sZi5wcm90b3R5cGUuZ2V0UHJlZDI9ZnVuY3Rpb24oKXtyZXR1cm4gcHJlZDJ9LGYucHJvdG90eXBlLnNldE5leHQ9ZnVuY3Rpb24ocCl7dGhpcy5uZXh0PXB9LGYucHJvdG90eXBlLmdldE5leHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV4dH0sZi5wcm90b3R5cGUuc2V0UHJvY2Vzc2VkPWZ1bmN0aW9uKHApe3RoaXMucHJvY2Vzc2VkPXB9LGYucHJvdG90eXBlLmlzUHJvY2Vzc2VkPWZ1bmN0aW9uKCl7cmV0dXJuIHByb2Nlc3NlZH0sYS5leHBvcnRzPWZ9LDkwMjooYSxzLGwpPT57ZnVuY3Rpb24gdShnKXtpZihBcnJheS5pc0FycmF5KGcpKXtmb3IodmFyIHk9MCx2PUFycmF5KGcubGVuZ3RoKTt5PGcubGVuZ3RoO3krKyl2W3ldPWdbeV07cmV0dXJuIHZ9ZWxzZSByZXR1cm4gQXJyYXkuZnJvbShnKX1vKHUsIl90b0NvbnN1bWFibGVBcnJheSIpO3ZhciBoPWwoODA2KSxmPWwoNTUxKS5MaW5rZWRMaXN0LGQ9bCg1NTEpLk1hdHJpeCxwPWwoNTUxKS5TVkQ7ZnVuY3Rpb24gbSgpe31vKG0sIkNvbnN0cmFpbnRIYW5kbGVyIiksbS5oYW5kbGVDb25zdHJhaW50cz1mdW5jdGlvbihnKXt2YXIgeT17fTt5LmZpeGVkTm9kZUNvbnN0cmFpbnQ9Zy5jb25zdHJhaW50cy5maXhlZE5vZGVDb25zdHJhaW50LHkuYWxpZ25tZW50Q29uc3RyYWludD1nLmNvbnN0cmFpbnRzLmFsaWdubWVudENvbnN0cmFpbnQseS5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQ9Zy5jb25zdHJhaW50cy5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQ7Zm9yKHZhciB2PW5ldyBNYXAseD1uZXcgTWFwLGI9W10sVD1bXSxTPWcuZ2V0QWxsTm9kZXMoKSx3PTAsRT0wO0U8Uy5sZW5ndGg7RSsrKXt2YXIgXz1TW0VdO18uZ2V0Q2hpbGQoKT09bnVsbCYmKHguc2V0KF8uaWQsdysrKSxiLnB1c2goXy5nZXRDZW50ZXJYKCkpLFQucHVzaChfLmdldENlbnRlclkoKSksdi5zZXQoXy5pZCxfKSl9eS5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQmJnkucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50LmZvckVhY2goZnVuY3Rpb24ob2UpeyFvZS5nYXAmJm9lLmdhcCE9MCYmKG9lLmxlZnQ/b2UuZ2FwPWguREVGQVVMVF9FREdFX0xFTkdUSCt2LmdldChvZS5sZWZ0KS5nZXRXaWR0aCgpLzIrdi5nZXQob2UucmlnaHQpLmdldFdpZHRoKCkvMjpvZS5nYXA9aC5ERUZBVUxUX0VER0VfTEVOR1RIK3YuZ2V0KG9lLnRvcCkuZ2V0SGVpZ2h0KCkvMit2LmdldChvZS5ib3R0b20pLmdldEhlaWdodCgpLzIpfSk7dmFyIEM9byhmdW5jdGlvbihWLFRlKXtyZXR1cm57eDpWLngtVGUueCx5OlYueS1UZS55fX0sImNhbGN1bGF0ZVBvc2l0aW9uRGlmZiIpLEQ9byhmdW5jdGlvbihWKXt2YXIgVGU9MCxXPTA7cmV0dXJuIFYuZm9yRWFjaChmdW5jdGlvbihwZSl7VGUrPWJbeC5nZXQocGUpXSxXKz1UW3guZ2V0KHBlKV19KSx7eDpUZS9WLnNpemUseTpXL1Yuc2l6ZX19LCJjYWxjdWxhdGVBdmdQb3NpdGlvbiIpLE89byhmdW5jdGlvbihWLFRlLFcscGUsdmUpe2Z1bmN0aW9uIFBlKHN0LFVlKXt2YXIgY3Q9bmV3IFNldChzdCksV2U9ITAsb3Q9ITEsWXQ9dm9pZCAwO3RyeXtmb3IodmFyIFR0PVVlW1N5bWJvbC5pdGVyYXRvcl0oKSxNdDshKFdlPShNdD1UdC5uZXh0KCkpLmRvbmUpO1dlPSEwKXt2YXIgYnQ9TXQudmFsdWU7Y3QuYWRkKGJ0KX19Y2F0Y2godXQpe290PSEwLFl0PXV0fWZpbmFsbHl7dHJ5eyFXZSYmVHQucmV0dXJuJiZUdC5yZXR1cm4oKX1maW5hbGx5e2lmKG90KXRocm93IFl0fX1yZXR1cm4gY3R9byhQZSwic2V0VW5pb24iKTt2YXIgX2U9bmV3IE1hcDtWLmZvckVhY2goZnVuY3Rpb24oc3QsVWUpe19lLnNldChVZSwwKX0pLFYuZm9yRWFjaChmdW5jdGlvbihzdCxVZSl7c3QuZm9yRWFjaChmdW5jdGlvbihjdCl7X2Uuc2V0KGN0LmlkLF9lLmdldChjdC5pZCkrMSl9KX0pO3ZhciBiZT1uZXcgTWFwLFZlPW5ldyBNYXAsRGU9bmV3IGY7X2UuZm9yRWFjaChmdW5jdGlvbihzdCxVZSl7c3Q9PTA/KERlLnB1c2goVWUpLFd8fChUZT09Imhvcml6b250YWwiP2JlLnNldChVZSx4LmhhcyhVZSk/Ylt4LmdldChVZSldOnBlLmdldChVZSkpOmJlLnNldChVZSx4LmhhcyhVZSk/VFt4LmdldChVZSldOnBlLmdldChVZSkpKSk6YmUuc2V0KFVlLE51bWJlci5ORUdBVElWRV9JTkZJTklUWSksVyYmVmUuc2V0KFVlLG5ldyBTZXQoW1VlXSkpfSksVyYmdmUuZm9yRWFjaChmdW5jdGlvbihzdCl7dmFyIFVlPVtdO2lmKHN0LmZvckVhY2goZnVuY3Rpb24ob3Qpe1cuaGFzKG90KSYmVWUucHVzaChvdCl9KSxVZS5sZW5ndGg+MCl7dmFyIGN0PTA7VWUuZm9yRWFjaChmdW5jdGlvbihvdCl7VGU9PSJob3Jpem9udGFsIj8oYmUuc2V0KG90LHguaGFzKG90KT9iW3guZ2V0KG90KV06cGUuZ2V0KG90KSksY3QrPWJlLmdldChvdCkpOihiZS5zZXQob3QseC5oYXMob3QpP1RbeC5nZXQob3QpXTpwZS5nZXQob3QpKSxjdCs9YmUuZ2V0KG90KSl9KSxjdD1jdC9VZS5sZW5ndGgsc3QuZm9yRWFjaChmdW5jdGlvbihvdCl7Vy5oYXMob3QpfHxiZS5zZXQob3QsY3QpfSl9ZWxzZXt2YXIgV2U9MDtzdC5mb3JFYWNoKGZ1bmN0aW9uKG90KXtUZT09Imhvcml6b250YWwiP1dlKz14LmhhcyhvdCk/Ylt4LmdldChvdCldOnBlLmdldChvdCk6V2UrPXguaGFzKG90KT9UW3guZ2V0KG90KV06cGUuZ2V0KG90KX0pLFdlPVdlL3N0Lmxlbmd0aCxzdC5mb3JFYWNoKGZ1bmN0aW9uKG90KXtiZS5zZXQob3QsV2UpfSl9fSk7Zm9yKHZhciBxZT1vKGZ1bmN0aW9uKCl7dmFyIFVlPURlLnNoaWZ0KCksY3Q9Vi5nZXQoVWUpO2N0LmZvckVhY2goZnVuY3Rpb24oV2Upe2lmKGJlLmdldChXZS5pZCk8YmUuZ2V0KFVlKStXZS5nYXApaWYoVyYmVy5oYXMoV2UuaWQpKXt2YXIgb3Q9dm9pZCAwO2lmKFRlPT0iaG9yaXpvbnRhbCI/b3Q9eC5oYXMoV2UuaWQpP2JbeC5nZXQoV2UuaWQpXTpwZS5nZXQoV2UuaWQpOm90PXguaGFzKFdlLmlkKT9UW3guZ2V0KFdlLmlkKV06cGUuZ2V0KFdlLmlkKSxiZS5zZXQoV2UuaWQsb3QpLG90PGJlLmdldChVZSkrV2UuZ2FwKXt2YXIgWXQ9YmUuZ2V0KFVlKStXZS5nYXAtb3Q7VmUuZ2V0KFVlKS5mb3JFYWNoKGZ1bmN0aW9uKFR0KXtiZS5zZXQoVHQsYmUuZ2V0KFR0KS1ZdCl9KX19ZWxzZSBiZS5zZXQoV2UuaWQsYmUuZ2V0KFVlKStXZS5nYXApO19lLnNldChXZS5pZCxfZS5nZXQoV2UuaWQpLTEpLF9lLmdldChXZS5pZCk9PTAmJkRlLnB1c2goV2UuaWQpLFcmJlZlLnNldChXZS5pZCxQZShWZS5nZXQoVWUpLFZlLmdldChXZS5pZCkpKX0pfSwiX2xvb3AiKTtEZS5sZW5ndGghPTA7KXFlKCk7aWYoVyl7dmFyIGF0PW5ldyBTZXQ7Vi5mb3JFYWNoKGZ1bmN0aW9uKHN0LFVlKXtzdC5sZW5ndGg9PTAmJmF0LmFkZChVZSl9KTt2YXIgUnQ9W107VmUuZm9yRWFjaChmdW5jdGlvbihzdCxVZSl7aWYoYXQuaGFzKFVlKSl7dmFyIGN0PSExLFdlPSEwLG90PSExLFl0PXZvaWQgMDt0cnl7Zm9yKHZhciBUdD1zdFtTeW1ib2wuaXRlcmF0b3JdKCksTXQ7IShXZT0oTXQ9VHQubmV4dCgpKS5kb25lKTtXZT0hMCl7dmFyIGJ0PU10LnZhbHVlO1cuaGFzKGJ0KSYmKGN0PSEwKX19Y2F0Y2goZnQpe290PSEwLFl0PWZ0fWZpbmFsbHl7dHJ5eyFXZSYmVHQucmV0dXJuJiZUdC5yZXR1cm4oKX1maW5hbGx5e2lmKG90KXRocm93IFl0fX1pZighY3Qpe3ZhciB1dD0hMSxTdD12b2lkIDA7UnQuZm9yRWFjaChmdW5jdGlvbihmdCx2dCl7ZnQuaGFzKFtdLmNvbmNhdCh1KHN0KSlbMF0pJiYodXQ9ITAsU3Q9dnQpfSksdXQ/c3QuZm9yRWFjaChmdW5jdGlvbihmdCl7UnRbU3RdLmFkZChmdCl9KTpSdC5wdXNoKG5ldyBTZXQoc3QpKX19fSksUnQuZm9yRWFjaChmdW5jdGlvbihzdCxVZSl7dmFyIGN0PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxXZT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksb3Q9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLFl0PU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxUdD0hMCxNdD0hMSxidD12b2lkIDA7dHJ5e2Zvcih2YXIgdXQ9c3RbU3ltYm9sLml0ZXJhdG9yXSgpLFN0OyEoVHQ9KFN0PXV0Lm5leHQoKSkuZG9uZSk7VHQ9ITApe3ZhciBmdD1TdC52YWx1ZSx2dD12b2lkIDA7VGU9PSJob3Jpem9udGFsIj92dD14LmhhcyhmdCk/Ylt4LmdldChmdCldOnBlLmdldChmdCk6dnQ9eC5oYXMoZnQpP1RbeC5nZXQoZnQpXTpwZS5nZXQoZnQpO3ZhciBudD1iZS5nZXQoZnQpO3Z0PGN0JiYoY3Q9dnQpLHZ0Pm90JiYob3Q9dnQpLG50PFdlJiYoV2U9bnQpLG50Pll0JiYoWXQ9bnQpfX1jYXRjaChEdCl7TXQ9ITAsYnQ9RHR9ZmluYWxseXt0cnl7IVR0JiZ1dC5yZXR1cm4mJnV0LnJldHVybigpfWZpbmFsbHl7aWYoTXQpdGhyb3cgYnR9fXZhciBwbj0oY3Qrb3QpLzItKFdlK1l0KS8yLGt0PSEwLE9uPSExLHRuPXZvaWQgMDt0cnl7Zm9yKHZhciBNcj1zdFtTeW1ib2wuaXRlcmF0b3JdKCksSXI7IShrdD0oSXI9TXIubmV4dCgpKS5kb25lKTtrdD0hMCl7dmFyIFBuPUlyLnZhbHVlO2JlLnNldChQbixiZS5nZXQoUG4pK3BuKX19Y2F0Y2goRHQpe09uPSEwLHRuPUR0fWZpbmFsbHl7dHJ5eyFrdCYmTXIucmV0dXJuJiZNci5yZXR1cm4oKX1maW5hbGx5e2lmKE9uKXRocm93IHRufX19KX1yZXR1cm4gYmV9LCJmaW5kQXBwcm9wcmlhdGVQb3NpdGlvbkZvclJlbGF0aXZlUGxhY2VtZW50IiksUj1vKGZ1bmN0aW9uKFYpe3ZhciBUZT0wLFc9MCxwZT0wLHZlPTA7aWYoVi5mb3JFYWNoKGZ1bmN0aW9uKFZlKXtWZS5sZWZ0P2JbeC5nZXQoVmUubGVmdCldLWJbeC5nZXQoVmUucmlnaHQpXT49MD9UZSsrOlcrKzpUW3guZ2V0KFZlLnRvcCldLVRbeC5nZXQoVmUuYm90dG9tKV0+PTA/cGUrKzp2ZSsrfSksVGU+VyYmcGU+dmUpZm9yKHZhciBQZT0wO1BlPHguc2l6ZTtQZSsrKWJbUGVdPS0xKmJbUGVdLFRbUGVdPS0xKlRbUGVdO2Vsc2UgaWYoVGU+Vylmb3IodmFyIF9lPTA7X2U8eC5zaXplO19lKyspYltfZV09LTEqYltfZV07ZWxzZSBpZihwZT52ZSlmb3IodmFyIGJlPTA7YmU8eC5zaXplO2JlKyspVFtiZV09LTEqVFtiZV19LCJhcHBseVJlZmxlY3Rpb25Gb3JSZWxhdGl2ZVBsYWNlbWVudCIpLGs9byhmdW5jdGlvbihWKXt2YXIgVGU9W10sVz1uZXcgZixwZT1uZXcgU2V0LHZlPTA7cmV0dXJuIFYuZm9yRWFjaChmdW5jdGlvbihQZSxfZSl7aWYoIXBlLmhhcyhfZSkpe1RlW3ZlXT1bXTt2YXIgYmU9X2U7Zm9yKFcucHVzaChiZSkscGUuYWRkKGJlKSxUZVt2ZV0ucHVzaChiZSk7Vy5sZW5ndGghPTA7KXtiZT1XLnNoaWZ0KCk7dmFyIFZlPVYuZ2V0KGJlKTtWZS5mb3JFYWNoKGZ1bmN0aW9uKERlKXtwZS5oYXMoRGUuaWQpfHwoVy5wdXNoKERlLmlkKSxwZS5hZGQoRGUuaWQpLFRlW3ZlXS5wdXNoKERlLmlkKSl9KX12ZSsrfX0pLFRlfSwiZmluZENvbXBvbmVudHMiKSxMPW8oZnVuY3Rpb24oVil7dmFyIFRlPW5ldyBNYXA7cmV0dXJuIFYuZm9yRWFjaChmdW5jdGlvbihXLHBlKXtUZS5zZXQocGUsW10pfSksVi5mb3JFYWNoKGZ1bmN0aW9uKFcscGUpe1cuZm9yRWFjaChmdW5jdGlvbih2ZSl7VGUuZ2V0KHBlKS5wdXNoKHZlKSxUZS5nZXQodmUuaWQpLnB1c2goe2lkOnBlLGdhcDp2ZS5nYXAsZGlyZWN0aW9uOnZlLmRpcmVjdGlvbn0pfSl9KSxUZX0sImRhZ1RvVW5kaXJlY3RlZCIpLEE9byhmdW5jdGlvbihWKXt2YXIgVGU9bmV3IE1hcDtyZXR1cm4gVi5mb3JFYWNoKGZ1bmN0aW9uKFcscGUpe1RlLnNldChwZSxbXSl9KSxWLmZvckVhY2goZnVuY3Rpb24oVyxwZSl7Vy5mb3JFYWNoKGZ1bmN0aW9uKHZlKXtUZS5nZXQodmUuaWQpLnB1c2goe2lkOnBlLGdhcDp2ZS5nYXAsZGlyZWN0aW9uOnZlLmRpcmVjdGlvbn0pfSl9KSxUZX0sImRhZ1RvUmV2ZXJzZWQiKSxJPVtdLE09W10sUD0hMSxCPSExLEY9bmV3IFNldCx6PW5ldyBNYXAsJD1uZXcgTWFwLFU9W107aWYoeS5maXhlZE5vZGVDb25zdHJhaW50JiZ5LmZpeGVkTm9kZUNvbnN0cmFpbnQuZm9yRWFjaChmdW5jdGlvbihvZSl7Ri5hZGQob2Uubm9kZUlkKX0pLHkucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50JiYoeS5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQuZm9yRWFjaChmdW5jdGlvbihvZSl7b2UubGVmdD8oei5oYXMob2UubGVmdCk/ei5nZXQob2UubGVmdCkucHVzaCh7aWQ6b2UucmlnaHQsZ2FwOm9lLmdhcCxkaXJlY3Rpb246Imhvcml6b250YWwifSk6ei5zZXQob2UubGVmdCxbe2lkOm9lLnJpZ2h0LGdhcDpvZS5nYXAsZGlyZWN0aW9uOiJob3Jpem9udGFsIn1dKSx6LmhhcyhvZS5yaWdodCl8fHouc2V0KG9lLnJpZ2h0LFtdKSk6KHouaGFzKG9lLnRvcCk/ei5nZXQob2UudG9wKS5wdXNoKHtpZDpvZS5ib3R0b20sZ2FwOm9lLmdhcCxkaXJlY3Rpb246InZlcnRpY2FsIn0pOnouc2V0KG9lLnRvcCxbe2lkOm9lLmJvdHRvbSxnYXA6b2UuZ2FwLGRpcmVjdGlvbjoidmVydGljYWwifV0pLHouaGFzKG9lLmJvdHRvbSl8fHouc2V0KG9lLmJvdHRvbSxbXSkpfSksJD1MKHopLFU9aygkKSksaC5UUkFOU0ZPUk1fT05fQ09OU1RSQUlOVF9IQU5ETElORyl7aWYoeS5maXhlZE5vZGVDb25zdHJhaW50JiZ5LmZpeGVkTm9kZUNvbnN0cmFpbnQubGVuZ3RoPjEpeS5maXhlZE5vZGVDb25zdHJhaW50LmZvckVhY2goZnVuY3Rpb24ob2UsVil7SVtWXT1bb2UucG9zaXRpb24ueCxvZS5wb3NpdGlvbi55XSxNW1ZdPVtiW3guZ2V0KG9lLm5vZGVJZCldLFRbeC5nZXQob2Uubm9kZUlkKV1dfSksUD0hMDtlbHNlIGlmKHkuYWxpZ25tZW50Q29uc3RyYWludCkoZnVuY3Rpb24oKXt2YXIgb2U9MDtpZih5LmFsaWdubWVudENvbnN0cmFpbnQudmVydGljYWwpe2Zvcih2YXIgVj15LmFsaWdubWVudENvbnN0cmFpbnQudmVydGljYWwsVGU9byhmdW5jdGlvbihiZSl7dmFyIFZlPW5ldyBTZXQ7VltiZV0uZm9yRWFjaChmdW5jdGlvbihhdCl7VmUuYWRkKGF0KX0pO3ZhciBEZT1uZXcgU2V0KFtdLmNvbmNhdCh1KFZlKSkuZmlsdGVyKGZ1bmN0aW9uKGF0KXtyZXR1cm4gRi5oYXMoYXQpfSkpLHFlPXZvaWQgMDtEZS5zaXplPjA/cWU9Ylt4LmdldChEZS52YWx1ZXMoKS5uZXh0KCkudmFsdWUpXTpxZT1EKFZlKS54LFZbYmVdLmZvckVhY2goZnVuY3Rpb24oYXQpe0lbb2VdPVtxZSxUW3guZ2V0KGF0KV1dLE1bb2VdPVtiW3guZ2V0KGF0KV0sVFt4LmdldChhdCldXSxvZSsrfSl9LCJfbG9vcDIiKSxXPTA7VzxWLmxlbmd0aDtXKyspVGUoVyk7UD0hMH1pZih5LmFsaWdubWVudENvbnN0cmFpbnQuaG9yaXpvbnRhbCl7Zm9yKHZhciBwZT15LmFsaWdubWVudENvbnN0cmFpbnQuaG9yaXpvbnRhbCx2ZT1vKGZ1bmN0aW9uKGJlKXt2YXIgVmU9bmV3IFNldDtwZVtiZV0uZm9yRWFjaChmdW5jdGlvbihhdCl7VmUuYWRkKGF0KX0pO3ZhciBEZT1uZXcgU2V0KFtdLmNvbmNhdCh1KFZlKSkuZmlsdGVyKGZ1bmN0aW9uKGF0KXtyZXR1cm4gRi5oYXMoYXQpfSkpLHFlPXZvaWQgMDtEZS5zaXplPjA/cWU9Ylt4LmdldChEZS52YWx1ZXMoKS5uZXh0KCkudmFsdWUpXTpxZT1EKFZlKS55LHBlW2JlXS5mb3JFYWNoKGZ1bmN0aW9uKGF0KXtJW29lXT1bYlt4LmdldChhdCldLHFlXSxNW29lXT1bYlt4LmdldChhdCldLFRbeC5nZXQoYXQpXV0sb2UrK30pfSwiX2xvb3AzIiksUGU9MDtQZTxwZS5sZW5ndGg7UGUrKyl2ZShQZSk7UD0hMH15LnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludCYmKEI9ITApfSkoKTtlbHNlIGlmKHkucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50KXtmb3IodmFyIEs9MCxlZT0wLFk9MDtZPFUubGVuZ3RoO1krKylVW1ldLmxlbmd0aD5LJiYoSz1VW1ldLmxlbmd0aCxlZT1ZKTtpZihLPCQuc2l6ZS8yKVIoeS5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQpLFA9ITEsQj0hMTtlbHNle3ZhciBjZT1uZXcgTWFwLFo9bmV3IE1hcCx1ZT1bXTtVW2VlXS5mb3JFYWNoKGZ1bmN0aW9uKG9lKXt6LmdldChvZSkuZm9yRWFjaChmdW5jdGlvbihWKXtWLmRpcmVjdGlvbj09Imhvcml6b250YWwiPyhjZS5oYXMob2UpP2NlLmdldChvZSkucHVzaChWKTpjZS5zZXQob2UsW1ZdKSxjZS5oYXMoVi5pZCl8fGNlLnNldChWLmlkLFtdKSx1ZS5wdXNoKHtsZWZ0Om9lLHJpZ2h0OlYuaWR9KSk6KFouaGFzKG9lKT9aLmdldChvZSkucHVzaChWKTpaLnNldChvZSxbVl0pLFouaGFzKFYuaWQpfHxaLnNldChWLmlkLFtdKSx1ZS5wdXNoKHt0b3A6b2UsYm90dG9tOlYuaWR9KSl9KX0pLFIodWUpLEI9ITE7dmFyIFE9TyhjZSwiaG9yaXpvbnRhbCIpLGo9TyhaLCJ2ZXJ0aWNhbCIpO1VbZWVdLmZvckVhY2goZnVuY3Rpb24ob2UsVil7TVtWXT1bYlt4LmdldChvZSldLFRbeC5nZXQob2UpXV0sSVtWXT1bXSxRLmhhcyhvZSk/SVtWXVswXT1RLmdldChvZSk6SVtWXVswXT1iW3guZ2V0KG9lKV0sai5oYXMob2UpP0lbVl1bMV09ai5nZXQob2UpOklbVl1bMV09VFt4LmdldChvZSldfSksUD0hMH19aWYoUCl7Zm9yKHZhciBuZT12b2lkIDAsdGU9ZC50cmFuc3Bvc2UoSSksaGU9ZC50cmFuc3Bvc2UoTSksbGU9MDtsZTx0ZS5sZW5ndGg7bGUrKyl0ZVtsZV09ZC5tdWx0R2FtbWEodGVbbGVdKSxoZVtsZV09ZC5tdWx0R2FtbWEoaGVbbGVdKTt2YXIgSj1kLm11bHRNYXQodGUsZC50cmFuc3Bvc2UoaGUpKSxTZT1wLnN2ZChKKTtuZT1kLm11bHRNYXQoU2UuVixkLnRyYW5zcG9zZShTZS5VKSk7Zm9yKHZhciBzZT0wO3NlPHguc2l6ZTtzZSsrKXt2YXIgYWU9W2Jbc2VdLFRbc2VdXSxPZT1bbmVbMF1bMF0sbmVbMV1bMF1dLHllPVtuZVswXVsxXSxuZVsxXVsxXV07YltzZV09ZC5kb3RQcm9kdWN0KGFlLE9lKSxUW3NlXT1kLmRvdFByb2R1Y3QoYWUseWUpfUImJlIoeS5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQpfX1pZihoLkVORk9SQ0VfQ09OU1RSQUlOVFMpe2lmKHkuZml4ZWROb2RlQ29uc3RyYWludCYmeS5maXhlZE5vZGVDb25zdHJhaW50Lmxlbmd0aD4wKXt2YXIgQmU9e3g6MCx5OjB9O3kuZml4ZWROb2RlQ29uc3RyYWludC5mb3JFYWNoKGZ1bmN0aW9uKG9lLFYpe3ZhciBUZT17eDpiW3guZ2V0KG9lLm5vZGVJZCldLHk6VFt4LmdldChvZS5ub2RlSWQpXX0sVz1vZS5wb3NpdGlvbixwZT1DKFcsVGUpO0JlLngrPXBlLngsQmUueSs9cGUueX0pLEJlLngvPXkuZml4ZWROb2RlQ29uc3RyYWludC5sZW5ndGgsQmUueS89eS5maXhlZE5vZGVDb25zdHJhaW50Lmxlbmd0aCxiLmZvckVhY2goZnVuY3Rpb24ob2UsVil7YltWXSs9QmUueH0pLFQuZm9yRWFjaChmdW5jdGlvbihvZSxWKXtUW1ZdKz1CZS55fSkseS5maXhlZE5vZGVDb25zdHJhaW50LmZvckVhY2goZnVuY3Rpb24ob2Upe2JbeC5nZXQob2Uubm9kZUlkKV09b2UucG9zaXRpb24ueCxUW3guZ2V0KG9lLm5vZGVJZCldPW9lLnBvc2l0aW9uLnl9KX1pZih5LmFsaWdubWVudENvbnN0cmFpbnQpe2lmKHkuYWxpZ25tZW50Q29uc3RyYWludC52ZXJ0aWNhbClmb3IodmFyIEhlPXkuYWxpZ25tZW50Q29uc3RyYWludC52ZXJ0aWNhbCx6ZT1vKGZ1bmN0aW9uKFYpe3ZhciBUZT1uZXcgU2V0O0hlW1ZdLmZvckVhY2goZnVuY3Rpb24odmUpe1RlLmFkZCh2ZSl9KTt2YXIgVz1uZXcgU2V0KFtdLmNvbmNhdCh1KFRlKSkuZmlsdGVyKGZ1bmN0aW9uKHZlKXtyZXR1cm4gRi5oYXModmUpfSkpLHBlPXZvaWQgMDtXLnNpemU+MD9wZT1iW3guZ2V0KFcudmFsdWVzKCkubmV4dCgpLnZhbHVlKV06cGU9RChUZSkueCxUZS5mb3JFYWNoKGZ1bmN0aW9uKHZlKXtGLmhhcyh2ZSl8fChiW3guZ2V0KHZlKV09cGUpfSl9LCJfbG9vcDQiKSxMZT0wO0xlPEhlLmxlbmd0aDtMZSsrKXplKExlKTtpZih5LmFsaWdubWVudENvbnN0cmFpbnQuaG9yaXpvbnRhbClmb3IodmFyIEllPXkuYWxpZ25tZW50Q29uc3RyYWludC5ob3Jpem9udGFsLHhlPW8oZnVuY3Rpb24oVil7dmFyIFRlPW5ldyBTZXQ7SWVbVl0uZm9yRWFjaChmdW5jdGlvbih2ZSl7VGUuYWRkKHZlKX0pO3ZhciBXPW5ldyBTZXQoW10uY29uY2F0KHUoVGUpKS5maWx0ZXIoZnVuY3Rpb24odmUpe3JldHVybiBGLmhhcyh2ZSl9KSkscGU9dm9pZCAwO1cuc2l6ZT4wP3BlPVRbeC5nZXQoVy52YWx1ZXMoKS5uZXh0KCkudmFsdWUpXTpwZT1EKFRlKS55LFRlLmZvckVhY2goZnVuY3Rpb24odmUpe0YuaGFzKHZlKXx8KFRbeC5nZXQodmUpXT1wZSl9KX0sIl9sb29wNSIpLHE9MDtxPEllLmxlbmd0aDtxKyspeGUocSl9eS5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQmJmZ1bmN0aW9uKCl7dmFyIG9lPW5ldyBNYXAsVj1uZXcgTWFwLFRlPW5ldyBNYXAsVz1uZXcgTWFwLHBlPW5ldyBNYXAsdmU9bmV3IE1hcCxQZT1uZXcgU2V0LF9lPW5ldyBTZXQ7aWYoRi5mb3JFYWNoKGZ1bmN0aW9uKEhyKXtQZS5hZGQoSHIpLF9lLmFkZChIcil9KSx5LmFsaWdubWVudENvbnN0cmFpbnQpe2lmKHkuYWxpZ25tZW50Q29uc3RyYWludC52ZXJ0aWNhbClmb3IodmFyIGJlPXkuYWxpZ25tZW50Q29uc3RyYWludC52ZXJ0aWNhbCxWZT1vKGZ1bmN0aW9uKGV0KXtUZS5zZXQoImR1bW15IitldCxbXSksYmVbZXRdLmZvckVhY2goZnVuY3Rpb24oZ3Qpe29lLnNldChndCwiZHVtbXkiK2V0KSxUZS5nZXQoImR1bW15IitldCkucHVzaChndCksRi5oYXMoZ3QpJiZQZS5hZGQoImR1bW15IitldCl9KSxwZS5zZXQoImR1bW15IitldCxiW3guZ2V0KGJlW2V0XVswXSldKX0sIl9sb29wNiIpLERlPTA7RGU8YmUubGVuZ3RoO0RlKyspVmUoRGUpO2lmKHkuYWxpZ25tZW50Q29uc3RyYWludC5ob3Jpem9udGFsKWZvcih2YXIgcWU9eS5hbGlnbm1lbnRDb25zdHJhaW50Lmhvcml6b250YWwsYXQ9byhmdW5jdGlvbihldCl7Vy5zZXQoImR1bW15IitldCxbXSkscWVbZXRdLmZvckVhY2goZnVuY3Rpb24oZ3Qpe1Yuc2V0KGd0LCJkdW1teSIrZXQpLFcuZ2V0KCJkdW1teSIrZXQpLnB1c2goZ3QpLEYuaGFzKGd0KSYmX2UuYWRkKCJkdW1teSIrZXQpfSksdmUuc2V0KCJkdW1teSIrZXQsVFt4LmdldChxZVtldF1bMF0pXSl9LCJfbG9vcDciKSxSdD0wO1J0PHFlLmxlbmd0aDtSdCsrKWF0KFJ0KX12YXIgc3Q9bmV3IE1hcCxVZT1uZXcgTWFwLGN0PW8oZnVuY3Rpb24oZXQpe3ouZ2V0KGV0KS5mb3JFYWNoKGZ1bmN0aW9uKGd0KXt2YXIgS3Q9dm9pZCAwLGx0PXZvaWQgMDtndC5kaXJlY3Rpb249PSJob3Jpem9udGFsIj8oS3Q9b2UuZ2V0KGV0KT9vZS5nZXQoZXQpOmV0LG9lLmdldChndC5pZCk/bHQ9e2lkOm9lLmdldChndC5pZCksZ2FwOmd0LmdhcCxkaXJlY3Rpb246Z3QuZGlyZWN0aW9ufTpsdD1ndCxzdC5oYXMoS3QpP3N0LmdldChLdCkucHVzaChsdCk6c3Quc2V0KEt0LFtsdF0pLHN0LmhhcyhsdC5pZCl8fHN0LnNldChsdC5pZCxbXSkpOihLdD1WLmdldChldCk/Vi5nZXQoZXQpOmV0LFYuZ2V0KGd0LmlkKT9sdD17aWQ6Vi5nZXQoZ3QuaWQpLGdhcDpndC5nYXAsZGlyZWN0aW9uOmd0LmRpcmVjdGlvbn06bHQ9Z3QsVWUuaGFzKEt0KT9VZS5nZXQoS3QpLnB1c2gobHQpOlVlLnNldChLdCxbbHRdKSxVZS5oYXMobHQuaWQpfHxVZS5zZXQobHQuaWQsW10pKX0pfSwiX2xvb3A4IiksV2U9ITAsb3Q9ITEsWXQ9dm9pZCAwO3RyeXtmb3IodmFyIFR0PXoua2V5cygpW1N5bWJvbC5pdGVyYXRvcl0oKSxNdDshKFdlPShNdD1UdC5uZXh0KCkpLmRvbmUpO1dlPSEwKXt2YXIgYnQ9TXQudmFsdWU7Y3QoYnQpfX1jYXRjaChIcil7b3Q9ITAsWXQ9SHJ9ZmluYWxseXt0cnl7IVdlJiZUdC5yZXR1cm4mJlR0LnJldHVybigpfWZpbmFsbHl7aWYob3QpdGhyb3cgWXR9fXZhciB1dD1MKHN0KSxTdD1MKFVlKSxmdD1rKHV0KSx2dD1rKFN0KSxudD1BKHN0KSxwbj1BKFVlKSxrdD1bXSxPbj1bXTtmdC5mb3JFYWNoKGZ1bmN0aW9uKEhyLGV0KXtrdFtldF09W10sSHIuZm9yRWFjaChmdW5jdGlvbihndCl7bnQuZ2V0KGd0KS5sZW5ndGg9PTAmJmt0W2V0XS5wdXNoKGd0KX0pfSksdnQuZm9yRWFjaChmdW5jdGlvbihIcixldCl7T25bZXRdPVtdLEhyLmZvckVhY2goZnVuY3Rpb24oZ3Qpe3BuLmdldChndCkubGVuZ3RoPT0wJiZPbltldF0ucHVzaChndCl9KX0pO3ZhciB0bj1PKHN0LCJob3Jpem9udGFsIixQZSxwZSxrdCksTXI9TyhVZSwidmVydGljYWwiLF9lLHZlLE9uKSxJcj1vKGZ1bmN0aW9uKGV0KXtUZS5nZXQoZXQpP1RlLmdldChldCkuZm9yRWFjaChmdW5jdGlvbihndCl7Ylt4LmdldChndCldPXRuLmdldChldCl9KTpiW3guZ2V0KGV0KV09dG4uZ2V0KGV0KX0sIl9sb29wOSIpLFBuPSEwLER0PSExLENlPXZvaWQgMDt0cnl7Zm9yKHZhciB0dD10bi5rZXlzKClbU3ltYm9sLml0ZXJhdG9yXSgpLEN0OyEoUG49KEN0PXR0Lm5leHQoKSkuZG9uZSk7UG49ITApe3ZhciBncj1DdC52YWx1ZTtJcihncil9fWNhdGNoKEhyKXtEdD0hMCxDZT1Icn1maW5hbGx5e3RyeXshUG4mJnR0LnJldHVybiYmdHQucmV0dXJuKCl9ZmluYWxseXtpZihEdCl0aHJvdyBDZX19dmFyIHJuPW8oZnVuY3Rpb24oZXQpe1cuZ2V0KGV0KT9XLmdldChldCkuZm9yRWFjaChmdW5jdGlvbihndCl7VFt4LmdldChndCldPU1yLmdldChldCl9KTpUW3guZ2V0KGV0KV09TXIuZ2V0KGV0KX0sIl9sb29wMTAiKSx5bj0hMCxacj0hMSxPaT12b2lkIDA7dHJ5e2Zvcih2YXIgZWk9TXIua2V5cygpW1N5bWJvbC5pdGVyYXRvcl0oKSxTbjshKHluPShTbj1laS5uZXh0KCkpLmRvbmUpO3luPSEwKXt2YXIgZ3I9U24udmFsdWU7cm4oZ3IpfX1jYXRjaChIcil7WnI9ITAsT2k9SHJ9ZmluYWxseXt0cnl7IXluJiZlaS5yZXR1cm4mJmVpLnJldHVybigpfWZpbmFsbHl7aWYoWnIpdGhyb3cgT2l9fX0oKX1mb3IodmFyIGRlPTA7ZGU8Uy5sZW5ndGg7ZGUrKyl7dmFyIGllPVNbZGVdO2llLmdldENoaWxkKCk9PW51bGwmJmllLnNldENlbnRlcihiW3guZ2V0KGllLmlkKV0sVFt4LmdldChpZS5pZCldKX19LGEuZXhwb3J0cz1tfSw1NTE6YT0+e2EuZXhwb3J0cz10fX0scj17fTtmdW5jdGlvbiBuKGEpe3ZhciBzPXJbYV07aWYocyE9PXZvaWQgMClyZXR1cm4gcy5leHBvcnRzO3ZhciBsPXJbYV09e2V4cG9ydHM6e319O3JldHVybiBlW2FdKGwsbC5leHBvcnRzLG4pLGwuZXhwb3J0c31vKG4sIl9fd2VicGFja19yZXF1aXJlX18iKTt2YXIgaT1uKDQ1KTtyZXR1cm4gaX0pKCl9KX0pO3ZhciBZMmU9UGkoKE80LGUkKT0+eyJ1c2Ugc3RyaWN0IjtvKGZ1bmN0aW9uKGUscil7dHlwZW9mIE80PT0ib2JqZWN0IiYmdHlwZW9mIGUkPT0ib2JqZWN0Ij9lJC5leHBvcnRzPXIoSkYoKSk6dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZD9kZWZpbmUoWyJjb3NlLWJhc2UiXSxyKTp0eXBlb2YgTzQ9PSJvYmplY3QiP080LmN5dG9zY2FwZUZjb3NlPXIoSkYoKSk6ZS5jeXRvc2NhcGVGY29zZT1yKGUuY29zZUJhc2UpfSwid2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iKShPNCxmdW5jdGlvbih0KXtyZXR1cm4oKCk9PnsidXNlIHN0cmljdCI7dmFyIGU9ezY1ODphPT57YS5leHBvcnRzPU9iamVjdC5hc3NpZ24hPW51bGw/T2JqZWN0LmFzc2lnbi5iaW5kKE9iamVjdCk6ZnVuY3Rpb24ocyl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsdT1BcnJheShsPjE/bC0xOjApLGg9MTtoPGw7aCsrKXVbaC0xXT1hcmd1bWVudHNbaF07cmV0dXJuIHUuZm9yRWFjaChmdW5jdGlvbihmKXtPYmplY3Qua2V5cyhmKS5mb3JFYWNoKGZ1bmN0aW9uKGQpe3JldHVybiBzW2RdPWZbZF19KX0pLHN9fSw1NDg6KGEscyxsKT0+e3ZhciB1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZChwLG0pe3ZhciBnPVtdLHk9ITAsdj0hMSx4PXZvaWQgMDt0cnl7Zm9yKHZhciBiPXBbU3ltYm9sLml0ZXJhdG9yXSgpLFQ7ISh5PShUPWIubmV4dCgpKS5kb25lKSYmKGcucHVzaChULnZhbHVlKSwhKG0mJmcubGVuZ3RoPT09bSkpO3k9ITApO31jYXRjaChTKXt2PSEwLHg9U31maW5hbGx5e3RyeXsheSYmYi5yZXR1cm4mJmIucmV0dXJuKCl9ZmluYWxseXtpZih2KXRocm93IHh9fXJldHVybiBnfXJldHVybiBvKGQsInNsaWNlSXRlcmF0b3IiKSxmdW5jdGlvbihwLG0pe2lmKEFycmF5LmlzQXJyYXkocCkpcmV0dXJuIHA7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChwKSlyZXR1cm4gZChwLG0pO3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UiKX19KCksaD1sKDE0MCkubGF5b3V0QmFzZS5MaW5rZWRMaXN0LGY9e307Zi5nZXRUb3BNb3N0Tm9kZXM9ZnVuY3Rpb24oZCl7Zm9yKHZhciBwPXt9LG09MDttPGQubGVuZ3RoO20rKylwW2RbbV0uaWQoKV09ITA7dmFyIGc9ZC5maWx0ZXIoZnVuY3Rpb24oeSx2KXt0eXBlb2YgeT09Im51bWJlciImJih5PXYpO2Zvcih2YXIgeD15LnBhcmVudCgpWzBdO3ghPW51bGw7KXtpZihwW3guaWQoKV0pcmV0dXJuITE7eD14LnBhcmVudCgpWzBdfXJldHVybiEwfSk7cmV0dXJuIGd9LGYuY29ubmVjdENvbXBvbmVudHM9ZnVuY3Rpb24oZCxwLG0sZyl7dmFyIHk9bmV3IGgsdj1uZXcgU2V0LHg9W10sYj12b2lkIDAsVD12b2lkIDAsUz12b2lkIDAsdz0hMSxFPTEsXz1bXSxDPVtdLEQ9byhmdW5jdGlvbigpe3ZhciBSPWQuY29sbGVjdGlvbigpO0MucHVzaChSKTt2YXIgaz1tWzBdLEw9ZC5jb2xsZWN0aW9uKCk7TC5tZXJnZShrKS5tZXJnZShrLmRlc2NlbmRhbnRzKCkuaW50ZXJzZWN0aW9uKHApKSx4LnB1c2goayksTC5mb3JFYWNoKGZ1bmN0aW9uKE0pe3kucHVzaChNKSx2LmFkZChNKSxSLm1lcmdlKE0pfSk7Zm9yKHZhciBBPW8oZnVuY3Rpb24oKXtrPXkuc2hpZnQoKTt2YXIgUD1kLmNvbGxlY3Rpb24oKTtrLm5laWdoYm9yaG9vZCgpLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbigkKXtwLmludGVyc2VjdGlvbihrLmVkZ2VzV2l0aCgkKSkubGVuZ3RoPjAmJlAubWVyZ2UoJCl9KTtmb3IodmFyIEI9MDtCPFAubGVuZ3RoO0IrKyl7dmFyIEY9UFtCXTtpZihiPW0uaW50ZXJzZWN0aW9uKEYudW5pb24oRi5hbmNlc3RvcnMoKSkpLGIhPW51bGwmJiF2LmhhcyhiWzBdKSl7dmFyIHo9Yi51bmlvbihiLmRlc2NlbmRhbnRzKCkpO3ouZm9yRWFjaChmdW5jdGlvbigkKXt5LnB1c2goJCksdi5hZGQoJCksUi5tZXJnZSgkKSxtLmhhcygkKSYmeC5wdXNoKCQpfSl9fX0sIl9sb29wMiIpO3kubGVuZ3RoIT0wOylBKCk7aWYoUi5mb3JFYWNoKGZ1bmN0aW9uKE0pe3AuaW50ZXJzZWN0aW9uKE0uY29ubmVjdGVkRWRnZXMoKSkuZm9yRWFjaChmdW5jdGlvbihQKXtSLmhhcyhQLnNvdXJjZSgpKSYmUi5oYXMoUC50YXJnZXQoKSkmJlIubWVyZ2UoUCl9KX0pLHgubGVuZ3RoPT1tLmxlbmd0aCYmKHc9ITApLCF3fHx3JiZFPjEpe1Q9eFswXSxTPVQuY29ubmVjdGVkRWRnZXMoKS5sZW5ndGgseC5mb3JFYWNoKGZ1bmN0aW9uKE0pe00uY29ubmVjdGVkRWRnZXMoKS5sZW5ndGg8UyYmKFM9TS5jb25uZWN0ZWRFZGdlcygpLmxlbmd0aCxUPU0pfSksXy5wdXNoKFQuaWQoKSk7dmFyIEk9ZC5jb2xsZWN0aW9uKCk7SS5tZXJnZSh4WzBdKSx4LmZvckVhY2goZnVuY3Rpb24oTSl7SS5tZXJnZShNKX0pLHg9W10sbT1tLmRpZmZlcmVuY2UoSSksRSsrfX0sIl9sb29wIik7ZG8gRCgpO3doaWxlKCF3KTtyZXR1cm4gZyYmXy5sZW5ndGg+MCYmZy5zZXQoImR1bW15IisoZy5zaXplKzEpLF8pLEN9LGYucmVsb2NhdGVDb21wb25lbnQ9ZnVuY3Rpb24oZCxwLG0pe2lmKCFtLmZpeGVkTm9kZUNvbnN0cmFpbnQpe3ZhciBnPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSx5PU51bWJlci5ORUdBVElWRV9JTkZJTklUWSx2PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSx4PU51bWJlci5ORUdBVElWRV9JTkZJTklUWTtpZihtLnF1YWxpdHk9PSJkcmFmdCIpe3ZhciBiPSEwLFQ9ITEsUz12b2lkIDA7dHJ5e2Zvcih2YXIgdz1wLm5vZGVJbmRleGVzW1N5bWJvbC5pdGVyYXRvcl0oKSxFOyEoYj0oRT13Lm5leHQoKSkuZG9uZSk7Yj0hMCl7dmFyIF89RS52YWx1ZSxDPXUoXywyKSxEPUNbMF0sTz1DWzFdLFI9bS5jeS5nZXRFbGVtZW50QnlJZChEKTtpZihSKXt2YXIgaz1SLmJvdW5kaW5nQm94KCksTD1wLnhDb29yZHNbT10tay53LzIsQT1wLnhDb29yZHNbT10ray53LzIsST1wLnlDb29yZHNbT10tay5oLzIsTT1wLnlDb29yZHNbT10ray5oLzI7TDxnJiYoZz1MKSxBPnkmJih5PUEpLEk8diYmKHY9SSksTT54JiYoeD1NKX19fWNhdGNoKCQpe1Q9ITAsUz0kfWZpbmFsbHl7dHJ5eyFiJiZ3LnJldHVybiYmdy5yZXR1cm4oKX1maW5hbGx5e2lmKFQpdGhyb3cgU319dmFyIFA9ZC54LSh5K2cpLzIsQj1kLnktKHgrdikvMjtwLnhDb29yZHM9cC54Q29vcmRzLm1hcChmdW5jdGlvbigkKXtyZXR1cm4gJCtQfSkscC55Q29vcmRzPXAueUNvb3Jkcy5tYXAoZnVuY3Rpb24oJCl7cmV0dXJuICQrQn0pfWVsc2V7T2JqZWN0LmtleXMocCkuZm9yRWFjaChmdW5jdGlvbigkKXt2YXIgVT1wWyRdLEs9VS5nZXRSZWN0KCkueCxlZT1VLmdldFJlY3QoKS54K1UuZ2V0UmVjdCgpLndpZHRoLFk9VS5nZXRSZWN0KCkueSxjZT1VLmdldFJlY3QoKS55K1UuZ2V0UmVjdCgpLmhlaWdodDtLPGcmJihnPUspLGVlPnkmJih5PWVlKSxZPHYmJih2PVkpLGNlPngmJih4PWNlKX0pO3ZhciBGPWQueC0oeStnKS8yLHo9ZC55LSh4K3YpLzI7T2JqZWN0LmtleXMocCkuZm9yRWFjaChmdW5jdGlvbigkKXt2YXIgVT1wWyRdO1Uuc2V0Q2VudGVyKFUuZ2V0Q2VudGVyWCgpK0YsVS5nZXRDZW50ZXJZKCkreil9KX19fSxmLmNhbGNCb3VuZGluZ0JveD1mdW5jdGlvbihkLHAsbSxnKXtmb3IodmFyIHk9TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsdj1OdW1iZXIuTUlOX1NBRkVfSU5URUdFUix4PU51bWJlci5NQVhfU0FGRV9JTlRFR0VSLGI9TnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIsVD12b2lkIDAsUz12b2lkIDAsdz12b2lkIDAsRT12b2lkIDAsXz1kLmRlc2NlbmRhbnRzKCkubm90KCI6cGFyZW50IiksQz1fLmxlbmd0aCxEPTA7RDxDO0QrKyl7dmFyIE89X1tEXTtUPXBbZy5nZXQoTy5pZCgpKV0tTy53aWR0aCgpLzIsUz1wW2cuZ2V0KE8uaWQoKSldK08ud2lkdGgoKS8yLHc9bVtnLmdldChPLmlkKCkpXS1PLmhlaWdodCgpLzIsRT1tW2cuZ2V0KE8uaWQoKSldK08uaGVpZ2h0KCkvMix5PlQmJih5PVQpLHY8UyYmKHY9UykseD53JiYoeD13KSxiPEUmJihiPUUpfXZhciBSPXt9O3JldHVybiBSLnRvcExlZnRYPXksUi50b3BMZWZ0WT14LFIud2lkdGg9di15LFIuaGVpZ2h0PWIteCxSfSxmLmNhbGNQYXJlbnRzV2l0aG91dENoaWxkcmVuPWZ1bmN0aW9uKGQscCl7dmFyIG09ZC5jb2xsZWN0aW9uKCk7cmV0dXJuIHAubm9kZXMoIjpwYXJlbnQiKS5mb3JFYWNoKGZ1bmN0aW9uKGcpe3ZhciB5PSExO2cuY2hpbGRyZW4oKS5mb3JFYWNoKGZ1bmN0aW9uKHYpe3YuY3NzKCJkaXNwbGF5IikhPSJub25lIiYmKHk9ITApfSkseXx8bS5tZXJnZShnKX0pLG19LGEuZXhwb3J0cz1mfSw4MTY6KGEscyxsKT0+e3ZhciB1PWwoNTQ4KSxoPWwoMTQwKS5Db1NFTGF5b3V0LGY9bCgxNDApLkNvU0VOb2RlLGQ9bCgxNDApLmxheW91dEJhc2UuUG9pbnRELHA9bCgxNDApLmxheW91dEJhc2UuRGltZW5zaW9uRCxtPWwoMTQwKS5sYXlvdXRCYXNlLkxheW91dENvbnN0YW50cyxnPWwoMTQwKS5sYXlvdXRCYXNlLkZETGF5b3V0Q29uc3RhbnRzLHk9bCgxNDApLkNvU0VDb25zdGFudHMsdj1vKGZ1bmN0aW9uKGIsVCl7dmFyIFM9Yi5jeSx3PWIuZWxlcyxFPXcubm9kZXMoKSxfPXcuZWRnZXMoKSxDPXZvaWQgMCxEPXZvaWQgMCxPPXZvaWQgMCxSPXt9O2IucmFuZG9taXplJiYoQz1ULm5vZGVJbmRleGVzLEQ9VC54Q29vcmRzLE89VC55Q29vcmRzKTt2YXIgaz1vKGZ1bmN0aW9uKCQpe3JldHVybiB0eXBlb2YgJD09ImZ1bmN0aW9uIn0sImlzRm4iKSxMPW8oZnVuY3Rpb24oJCxVKXtyZXR1cm4gaygkKT8kKFUpOiR9LCJvcHRGbiIpLEE9dS5jYWxjUGFyZW50c1dpdGhvdXRDaGlsZHJlbihTLHcpLEk9byhmdW5jdGlvbiB6KCQsVSxLLGVlKXtmb3IodmFyIFk9VS5sZW5ndGgsY2U9MDtjZTxZO2NlKyspe3ZhciBaPVVbY2VdLHVlPW51bGw7Wi5pbnRlcnNlY3Rpb24oQSkubGVuZ3RoPT0wJiYodWU9Wi5jaGlsZHJlbigpKTt2YXIgUT12b2lkIDAsaj1aLmxheW91dERpbWVuc2lvbnMoe25vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczplZS5ub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHN9KTtpZihaLm91dGVyV2lkdGgoKSE9bnVsbCYmWi5vdXRlckhlaWdodCgpIT1udWxsKWlmKGVlLnJhbmRvbWl6ZSlpZighWi5pc1BhcmVudCgpKVE9JC5hZGQobmV3IGYoSy5ncmFwaE1hbmFnZXIsbmV3IGQoRFtDLmdldChaLmlkKCkpXS1qLncvMixPW0MuZ2V0KFouaWQoKSldLWouaC8yKSxuZXcgcChwYXJzZUZsb2F0KGoudykscGFyc2VGbG9hdChqLmgpKSkpO2Vsc2V7dmFyIG5lPXUuY2FsY0JvdW5kaW5nQm94KFosRCxPLEMpO1ouaW50ZXJzZWN0aW9uKEEpLmxlbmd0aD09MD9RPSQuYWRkKG5ldyBmKEsuZ3JhcGhNYW5hZ2VyLG5ldyBkKG5lLnRvcExlZnRYLG5lLnRvcExlZnRZKSxuZXcgcChuZS53aWR0aCxuZS5oZWlnaHQpKSk6UT0kLmFkZChuZXcgZihLLmdyYXBoTWFuYWdlcixuZXcgZChuZS50b3BMZWZ0WCxuZS50b3BMZWZ0WSksbmV3IHAocGFyc2VGbG9hdChqLncpLHBhcnNlRmxvYXQoai5oKSkpKX1lbHNlIFE9JC5hZGQobmV3IGYoSy5ncmFwaE1hbmFnZXIsbmV3IGQoWi5wb3NpdGlvbigieCIpLWoudy8yLFoucG9zaXRpb24oInkiKS1qLmgvMiksbmV3IHAocGFyc2VGbG9hdChqLncpLHBhcnNlRmxvYXQoai5oKSkpKTtlbHNlIFE9JC5hZGQobmV3IGYodGhpcy5ncmFwaE1hbmFnZXIpKTtpZihRLmlkPVouZGF0YSgiaWQiKSxRLm5vZGVSZXB1bHNpb249TChlZS5ub2RlUmVwdWxzaW9uLFopLFEucGFkZGluZ0xlZnQ9cGFyc2VJbnQoWi5jc3MoInBhZGRpbmciKSksUS5wYWRkaW5nVG9wPXBhcnNlSW50KFouY3NzKCJwYWRkaW5nIikpLFEucGFkZGluZ1JpZ2h0PXBhcnNlSW50KFouY3NzKCJwYWRkaW5nIikpLFEucGFkZGluZ0JvdHRvbT1wYXJzZUludChaLmNzcygicGFkZGluZyIpKSxlZS5ub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHMmJihRLmxhYmVsV2lkdGg9Wi5ib3VuZGluZ0JveCh7aW5jbHVkZUxhYmVsczohMCxpbmNsdWRlTm9kZXM6ITEsaW5jbHVkZU92ZXJsYXlzOiExfSkudyxRLmxhYmVsSGVpZ2h0PVouYm91bmRpbmdCb3goe2luY2x1ZGVMYWJlbHM6ITAsaW5jbHVkZU5vZGVzOiExLGluY2x1ZGVPdmVybGF5czohMX0pLmgsUS5sYWJlbFBvc1ZlcnRpY2FsPVouY3NzKCJ0ZXh0LXZhbGlnbiIpLFEubGFiZWxQb3NIb3Jpem9udGFsPVouY3NzKCJ0ZXh0LWhhbGlnbiIpKSxSW1ouZGF0YSgiaWQiKV09USxpc05hTihRLnJlY3QueCkmJihRLnJlY3QueD0wKSxpc05hTihRLnJlY3QueSkmJihRLnJlY3QueT0wKSx1ZSE9bnVsbCYmdWUubGVuZ3RoPjApe3ZhciB0ZT12b2lkIDA7dGU9Sy5nZXRHcmFwaE1hbmFnZXIoKS5hZGQoSy5uZXdHcmFwaCgpLFEpLHoodGUsdWUsSyxlZSl9fX0sInByb2Nlc3NDaGlsZHJlbkxpc3QiKSxNPW8oZnVuY3Rpb24oJCxVLEspe2Zvcih2YXIgZWU9MCxZPTAsY2U9MDtjZTxLLmxlbmd0aDtjZSsrKXt2YXIgWj1LW2NlXSx1ZT1SW1ouZGF0YSgic291cmNlIildLFE9UltaLmRhdGEoInRhcmdldCIpXTtpZih1ZSYmUSYmdWUhPT1RJiZ1ZS5nZXRFZGdlc0JldHdlZW4oUSkubGVuZ3RoPT0wKXt2YXIgaj1VLmFkZCgkLm5ld0VkZ2UoKSx1ZSxRKTtqLmlkPVouaWQoKSxqLmlkZWFsTGVuZ3RoPUwoYi5pZGVhbEVkZ2VMZW5ndGgsWiksai5lZGdlRWxhc3RpY2l0eT1MKGIuZWRnZUVsYXN0aWNpdHksWiksZWUrPWouaWRlYWxMZW5ndGgsWSsrfX1iLmlkZWFsRWRnZUxlbmd0aCE9bnVsbCYmKFk+MD95LkRFRkFVTFRfRURHRV9MRU5HVEg9Zy5ERUZBVUxUX0VER0VfTEVOR1RIPWVlL1k6ayhiLmlkZWFsRWRnZUxlbmd0aCk/eS5ERUZBVUxUX0VER0VfTEVOR1RIPWcuREVGQVVMVF9FREdFX0xFTkdUSD01MDp5LkRFRkFVTFRfRURHRV9MRU5HVEg9Zy5ERUZBVUxUX0VER0VfTEVOR1RIPWIuaWRlYWxFZGdlTGVuZ3RoLHkuTUlOX1JFUFVMU0lPTl9ESVNUPWcuTUlOX1JFUFVMU0lPTl9ESVNUPWcuREVGQVVMVF9FREdFX0xFTkdUSC8xMCx5LkRFRkFVTFRfUkFESUFMX1NFUEFSQVRJT049Zy5ERUZBVUxUX0VER0VfTEVOR1RIKX0sInByb2Nlc3NFZGdlcyIpLFA9byhmdW5jdGlvbigkLFUpe1UuZml4ZWROb2RlQ29uc3RyYWludCYmKCQuY29uc3RyYWludHMuZml4ZWROb2RlQ29uc3RyYWludD1VLmZpeGVkTm9kZUNvbnN0cmFpbnQpLFUuYWxpZ25tZW50Q29uc3RyYWludCYmKCQuY29uc3RyYWludHMuYWxpZ25tZW50Q29uc3RyYWludD1VLmFsaWdubWVudENvbnN0cmFpbnQpLFUucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50JiYoJC5jb25zdHJhaW50cy5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQ9VS5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQpfSwicHJvY2Vzc0NvbnN0cmFpbnRzIik7Yi5uZXN0aW5nRmFjdG9yIT1udWxsJiYoeS5QRVJfTEVWRUxfSURFQUxfRURHRV9MRU5HVEhfRkFDVE9SPWcuUEVSX0xFVkVMX0lERUFMX0VER0VfTEVOR1RIX0ZBQ1RPUj1iLm5lc3RpbmdGYWN0b3IpLGIuZ3Jhdml0eSE9bnVsbCYmKHkuREVGQVVMVF9HUkFWSVRZX1NUUkVOR1RIPWcuREVGQVVMVF9HUkFWSVRZX1NUUkVOR1RIPWIuZ3Jhdml0eSksYi5udW1JdGVyIT1udWxsJiYoeS5NQVhfSVRFUkFUSU9OUz1nLk1BWF9JVEVSQVRJT05TPWIubnVtSXRlciksYi5ncmF2aXR5UmFuZ2UhPW51bGwmJih5LkRFRkFVTFRfR1JBVklUWV9SQU5HRV9GQUNUT1I9Zy5ERUZBVUxUX0dSQVZJVFlfUkFOR0VfRkFDVE9SPWIuZ3Jhdml0eVJhbmdlKSxiLmdyYXZpdHlDb21wb3VuZCE9bnVsbCYmKHkuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1NUUkVOR1RIPWcuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1NUUkVOR1RIPWIuZ3Jhdml0eUNvbXBvdW5kKSxiLmdyYXZpdHlSYW5nZUNvbXBvdW5kIT1udWxsJiYoeS5ERUZBVUxUX0NPTVBPVU5EX0dSQVZJVFlfUkFOR0VfRkFDVE9SPWcuREVGQVVMVF9DT01QT1VORF9HUkFWSVRZX1JBTkdFX0ZBQ1RPUj1iLmdyYXZpdHlSYW5nZUNvbXBvdW5kKSxiLmluaXRpYWxFbmVyZ3lPbkluY3JlbWVudGFsIT1udWxsJiYoeS5ERUZBVUxUX0NPT0xJTkdfRkFDVE9SX0lOQ1JFTUVOVEFMPWcuREVGQVVMVF9DT09MSU5HX0ZBQ1RPUl9JTkNSRU1FTlRBTD1iLmluaXRpYWxFbmVyZ3lPbkluY3JlbWVudGFsKSxiLnRpbGluZ0NvbXBhcmVCeSE9bnVsbCYmKHkuVElMSU5HX0NPTVBBUkVfQlk9Yi50aWxpbmdDb21wYXJlQnkpLGIucXVhbGl0eT09InByb29mIj9tLlFVQUxJVFk9MjptLlFVQUxJVFk9MCx5Lk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUz1nLk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUz1tLk5PREVfRElNRU5TSU9OU19JTkNMVURFX0xBQkVMUz1iLm5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVscyx5LkRFRkFVTFRfSU5DUkVNRU5UQUw9Zy5ERUZBVUxUX0lOQ1JFTUVOVEFMPW0uREVGQVVMVF9JTkNSRU1FTlRBTD0hYi5yYW5kb21pemUseS5BTklNQVRFPWcuQU5JTUFURT1tLkFOSU1BVEU9Yi5hbmltYXRlLHkuVElMRT1iLnRpbGUseS5USUxJTkdfUEFERElOR19WRVJUSUNBTD10eXBlb2YgYi50aWxpbmdQYWRkaW5nVmVydGljYWw9PSJmdW5jdGlvbiI/Yi50aWxpbmdQYWRkaW5nVmVydGljYWwuY2FsbCgpOmIudGlsaW5nUGFkZGluZ1ZlcnRpY2FsLHkuVElMSU5HX1BBRERJTkdfSE9SSVpPTlRBTD10eXBlb2YgYi50aWxpbmdQYWRkaW5nSG9yaXpvbnRhbD09ImZ1bmN0aW9uIj9iLnRpbGluZ1BhZGRpbmdIb3Jpem9udGFsLmNhbGwoKTpiLnRpbGluZ1BhZGRpbmdIb3Jpem9udGFsLHkuREVGQVVMVF9JTkNSRU1FTlRBTD1nLkRFRkFVTFRfSU5DUkVNRU5UQUw9bS5ERUZBVUxUX0lOQ1JFTUVOVEFMPSEwLHkuUFVSRV9JTkNSRU1FTlRBTD0hYi5yYW5kb21pemUsbS5ERUZBVUxUX1VOSUZPUk1fTEVBRl9OT0RFX1NJWkVTPWIudW5pZm9ybU5vZGVEaW1lbnNpb25zLGIuc3RlcD09InRyYW5zZm9ybWVkIiYmKHkuVFJBTlNGT1JNX09OX0NPTlNUUkFJTlRfSEFORExJTkc9ITAseS5FTkZPUkNFX0NPTlNUUkFJTlRTPSExLHkuQVBQTFlfTEFZT1VUPSExKSxiLnN0ZXA9PSJlbmZvcmNlZCImJih5LlRSQU5TRk9STV9PTl9DT05TVFJBSU5UX0hBTkRMSU5HPSExLHkuRU5GT1JDRV9DT05TVFJBSU5UUz0hMCx5LkFQUExZX0xBWU9VVD0hMSksYi5zdGVwPT0iY29zZSImJih5LlRSQU5TRk9STV9PTl9DT05TVFJBSU5UX0hBTkRMSU5HPSExLHkuRU5GT1JDRV9DT05TVFJBSU5UUz0hMSx5LkFQUExZX0xBWU9VVD0hMCksYi5zdGVwPT0iYWxsIiYmKGIucmFuZG9taXplP3kuVFJBTlNGT1JNX09OX0NPTlNUUkFJTlRfSEFORExJTkc9ITA6eS5UUkFOU0ZPUk1fT05fQ09OU1RSQUlOVF9IQU5ETElORz0hMSx5LkVORk9SQ0VfQ09OU1RSQUlOVFM9ITAseS5BUFBMWV9MQVlPVVQ9ITApLGIuZml4ZWROb2RlQ29uc3RyYWludHx8Yi5hbGlnbm1lbnRDb25zdHJhaW50fHxiLnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludD95LlRSRUVfUkVEVUNUSU9OX09OX0lOQ1JFTUVOVEFMPSExOnkuVFJFRV9SRURVQ1RJT05fT05fSU5DUkVNRU5UQUw9ITA7dmFyIEI9bmV3IGgsRj1CLm5ld0dyYXBoTWFuYWdlcigpO3JldHVybiBJKEYuYWRkUm9vdCgpLHUuZ2V0VG9wTW9zdE5vZGVzKEUpLEIsYiksTShCLEYsXyksUChCLGIpLEIucnVuTGF5b3V0KCksUn0sImNvc2VMYXlvdXQiKTthLmV4cG9ydHM9e2Nvc2VMYXlvdXQ6dn19LDIxMjooYSxzLGwpPT57dmFyIHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBiKFQsUyl7Zm9yKHZhciB3PTA7dzxTLmxlbmd0aDt3Kyspe3ZhciBFPVNbd107RS5lbnVtZXJhYmxlPUUuZW51bWVyYWJsZXx8ITEsRS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIEUmJihFLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVCxFLmtleSxFKX19cmV0dXJuIG8oYiwiZGVmaW5lUHJvcGVydGllcyIpLGZ1bmN0aW9uKFQsUyx3KXtyZXR1cm4gUyYmYihULnByb3RvdHlwZSxTKSx3JiZiKFQsdyksVH19KCk7ZnVuY3Rpb24gaChiLFQpe2lmKCEoYiBpbnN0YW5jZW9mIFQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfW8oaCwiX2NsYXNzQ2FsbENoZWNrIik7dmFyIGY9bCg2NTgpLGQ9bCg1NDgpLHA9bCg2NTcpLG09cC5zcGVjdHJhbExheW91dCxnPWwoODE2KSx5PWcuY29zZUxheW91dCx2PU9iamVjdC5mcmVlemUoe3F1YWxpdHk6ImRlZmF1bHQiLHJhbmRvbWl6ZTohMCxhbmltYXRlOiEwLGFuaW1hdGlvbkR1cmF0aW9uOjFlMyxhbmltYXRpb25FYXNpbmc6dm9pZCAwLGZpdDohMCxwYWRkaW5nOjMwLG5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczohMSx1bmlmb3JtTm9kZURpbWVuc2lvbnM6ITEscGFja0NvbXBvbmVudHM6ITAsc3RlcDoiYWxsIixzYW1wbGluZ1R5cGU6ITAsc2FtcGxlU2l6ZToyNSxub2RlU2VwYXJhdGlvbjo3NSxwaVRvbDoxZS03LG5vZGVSZXB1bHNpb246byhmdW5jdGlvbihUKXtyZXR1cm4gNDUwMH0sIm5vZGVSZXB1bHNpb24iKSxpZGVhbEVkZ2VMZW5ndGg6byhmdW5jdGlvbihUKXtyZXR1cm4gNTB9LCJpZGVhbEVkZ2VMZW5ndGgiKSxlZGdlRWxhc3RpY2l0eTpvKGZ1bmN0aW9uKFQpe3JldHVybiAuNDV9LCJlZGdlRWxhc3RpY2l0eSIpLG5lc3RpbmdGYWN0b3I6LjEsZ3Jhdml0eTouMjUsbnVtSXRlcjoyNTAwLHRpbGU6ITAsdGlsaW5nQ29tcGFyZUJ5OnZvaWQgMCx0aWxpbmdQYWRkaW5nVmVydGljYWw6MTAsdGlsaW5nUGFkZGluZ0hvcml6b250YWw6MTAsZ3Jhdml0eVJhbmdlQ29tcG91bmQ6MS41LGdyYXZpdHlDb21wb3VuZDoxLGdyYXZpdHlSYW5nZTozLjgsaW5pdGlhbEVuZXJneU9uSW5jcmVtZW50YWw6LjMsZml4ZWROb2RlQ29uc3RyYWludDp2b2lkIDAsYWxpZ25tZW50Q29uc3RyYWludDp2b2lkIDAscmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50OnZvaWQgMCxyZWFkeTpvKGZ1bmN0aW9uKCl7fSwicmVhZHkiKSxzdG9wOm8oZnVuY3Rpb24oKXt9LCJzdG9wIil9KSx4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYihUKXtoKHRoaXMsYiksdGhpcy5vcHRpb25zPWYoe30sdixUKX1yZXR1cm4gbyhiLCJMYXlvdXQiKSx1KGIsW3trZXk6InJ1biIsdmFsdWU6byhmdW5jdGlvbigpe3ZhciBTPXRoaXMsdz10aGlzLm9wdGlvbnMsRT13LmN5LF89dy5lbGVzLEM9W10sRD12b2lkIDAsTz12b2lkIDAsUj1bXSxrPXZvaWQgMCxMPVtdO3cuZml4ZWROb2RlQ29uc3RyYWludCYmKCFBcnJheS5pc0FycmF5KHcuZml4ZWROb2RlQ29uc3RyYWludCl8fHcuZml4ZWROb2RlQ29uc3RyYWludC5sZW5ndGg9PTApJiYody5maXhlZE5vZGVDb25zdHJhaW50PXZvaWQgMCksdy5hbGlnbm1lbnRDb25zdHJhaW50JiYody5hbGlnbm1lbnRDb25zdHJhaW50LnZlcnRpY2FsJiYoIUFycmF5LmlzQXJyYXkody5hbGlnbm1lbnRDb25zdHJhaW50LnZlcnRpY2FsKXx8dy5hbGlnbm1lbnRDb25zdHJhaW50LnZlcnRpY2FsLmxlbmd0aD09MCkmJih3LmFsaWdubWVudENvbnN0cmFpbnQudmVydGljYWw9dm9pZCAwKSx3LmFsaWdubWVudENvbnN0cmFpbnQuaG9yaXpvbnRhbCYmKCFBcnJheS5pc0FycmF5KHcuYWxpZ25tZW50Q29uc3RyYWludC5ob3Jpem9udGFsKXx8dy5hbGlnbm1lbnRDb25zdHJhaW50Lmhvcml6b250YWwubGVuZ3RoPT0wKSYmKHcuYWxpZ25tZW50Q29uc3RyYWludC5ob3Jpem9udGFsPXZvaWQgMCkpLHcucmVsYXRpdmVQbGFjZW1lbnRDb25zdHJhaW50JiYoIUFycmF5LmlzQXJyYXkody5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQpfHx3LnJlbGF0aXZlUGxhY2VtZW50Q29uc3RyYWludC5sZW5ndGg9PTApJiYody5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQ9dm9pZCAwKTt2YXIgQT13LmZpeGVkTm9kZUNvbnN0cmFpbnR8fHcuYWxpZ25tZW50Q29uc3RyYWludHx8dy5yZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQ7QSYmKHcudGlsZT0hMSx3LnBhY2tDb21wb25lbnRzPSExKTt2YXIgST12b2lkIDAsTT0hMTtpZihFLmxheW91dFV0aWxpdGllcyYmdy5wYWNrQ29tcG9uZW50cyYmKEk9RS5sYXlvdXRVdGlsaXRpZXMoImdldCIpLEl8fChJPUUubGF5b3V0VXRpbGl0aWVzKCkpLE09ITApLF8ubm9kZXMoKS5sZW5ndGg+MClpZihNKXt2YXIgRj1kLmdldFRvcE1vc3ROb2Rlcyh3LmVsZXMubm9kZXMoKSk7aWYoaz1kLmNvbm5lY3RDb21wb25lbnRzKEUsdy5lbGVzLEYpLGsuZm9yRWFjaChmdW5jdGlvbihzZSl7dmFyIGFlPXNlLmJvdW5kaW5nQm94KCk7TC5wdXNoKHt4OmFlLngxK2FlLncvMix5OmFlLnkxK2FlLmgvMn0pfSksdy5yYW5kb21pemUmJmsuZm9yRWFjaChmdW5jdGlvbihzZSl7dy5lbGVzPXNlLEMucHVzaChtKHcpKX0pLHcucXVhbGl0eT09ImRlZmF1bHQifHx3LnF1YWxpdHk9PSJwcm9vZiIpe3ZhciB6PUUuY29sbGVjdGlvbigpO2lmKHcudGlsZSl7dmFyICQ9bmV3IE1hcCxVPVtdLEs9W10sZWU9MCxZPXtub2RlSW5kZXhlczokLHhDb29yZHM6VSx5Q29vcmRzOkt9LGNlPVtdO2lmKGsuZm9yRWFjaChmdW5jdGlvbihzZSxhZSl7c2UuZWRnZXMoKS5sZW5ndGg9PTAmJihzZS5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24oT2UseWUpe3oubWVyZ2Uoc2Uubm9kZXMoKVt5ZV0pLE9lLmlzUGFyZW50KCl8fChZLm5vZGVJbmRleGVzLnNldChzZS5ub2RlcygpW3llXS5pZCgpLGVlKyspLFkueENvb3Jkcy5wdXNoKHNlLm5vZGVzKClbMF0ucG9zaXRpb24oKS54KSxZLnlDb29yZHMucHVzaChzZS5ub2RlcygpWzBdLnBvc2l0aW9uKCkueSkpfSksY2UucHVzaChhZSkpfSksei5sZW5ndGg+MSl7dmFyIFo9ei5ib3VuZGluZ0JveCgpO0wucHVzaCh7eDpaLngxK1oudy8yLHk6Wi55MStaLmgvMn0pLGsucHVzaCh6KSxDLnB1c2goWSk7Zm9yKHZhciB1ZT1jZS5sZW5ndGgtMTt1ZT49MDt1ZS0tKWsuc3BsaWNlKGNlW3VlXSwxKSxDLnNwbGljZShjZVt1ZV0sMSksTC5zcGxpY2UoY2VbdWVdLDEpfX1rLmZvckVhY2goZnVuY3Rpb24oc2UsYWUpe3cuZWxlcz1zZSxSLnB1c2goeSh3LENbYWVdKSksZC5yZWxvY2F0ZUNvbXBvbmVudChMW2FlXSxSW2FlXSx3KX0pfWVsc2Ugay5mb3JFYWNoKGZ1bmN0aW9uKHNlLGFlKXtkLnJlbG9jYXRlQ29tcG9uZW50KExbYWVdLENbYWVdLHcpfSk7dmFyIFE9bmV3IFNldDtpZihrLmxlbmd0aD4xKXt2YXIgaj1bXSxuZT1fLmZpbHRlcihmdW5jdGlvbihzZSl7cmV0dXJuIHNlLmNzcygiZGlzcGxheSIpPT0ibm9uZSJ9KTtrLmZvckVhY2goZnVuY3Rpb24oc2UsYWUpe3ZhciBPZT12b2lkIDA7aWYody5xdWFsaXR5PT0iZHJhZnQiJiYoT2U9Q1thZV0ubm9kZUluZGV4ZXMpLHNlLm5vZGVzKCkubm90KG5lKS5sZW5ndGg+MCl7dmFyIHllPXt9O3llLmVkZ2VzPVtdLHllLm5vZGVzPVtdO3ZhciBCZT12b2lkIDA7c2Uubm9kZXMoKS5ub3QobmUpLmZvckVhY2goZnVuY3Rpb24oSGUpe2lmKHcucXVhbGl0eT09ImRyYWZ0IilpZighSGUuaXNQYXJlbnQoKSlCZT1PZS5nZXQoSGUuaWQoKSkseWUubm9kZXMucHVzaCh7eDpDW2FlXS54Q29vcmRzW0JlXS1IZS5ib3VuZGluZ2JveCgpLncvMix5OkNbYWVdLnlDb29yZHNbQmVdLUhlLmJvdW5kaW5nYm94KCkuaC8yLHdpZHRoOkhlLmJvdW5kaW5nYm94KCkudyxoZWlnaHQ6SGUuYm91bmRpbmdib3goKS5ofSk7ZWxzZXt2YXIgemU9ZC5jYWxjQm91bmRpbmdCb3goSGUsQ1thZV0ueENvb3JkcyxDW2FlXS55Q29vcmRzLE9lKTt5ZS5ub2Rlcy5wdXNoKHt4OnplLnRvcExlZnRYLHk6emUudG9wTGVmdFksd2lkdGg6emUud2lkdGgsaGVpZ2h0OnplLmhlaWdodH0pfWVsc2UgUlthZV1bSGUuaWQoKV0mJnllLm5vZGVzLnB1c2goe3g6UlthZV1bSGUuaWQoKV0uZ2V0TGVmdCgpLHk6UlthZV1bSGUuaWQoKV0uZ2V0VG9wKCksd2lkdGg6UlthZV1bSGUuaWQoKV0uZ2V0V2lkdGgoKSxoZWlnaHQ6UlthZV1bSGUuaWQoKV0uZ2V0SGVpZ2h0KCl9KX0pLHNlLmVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihIZSl7dmFyIHplPUhlLnNvdXJjZSgpLExlPUhlLnRhcmdldCgpO2lmKHplLmNzcygiZGlzcGxheSIpIT0ibm9uZSImJkxlLmNzcygiZGlzcGxheSIpIT0ibm9uZSIpaWYody5xdWFsaXR5PT0iZHJhZnQiKXt2YXIgSWU9T2UuZ2V0KHplLmlkKCkpLHhlPU9lLmdldChMZS5pZCgpKSxxPVtdLGRlPVtdO2lmKHplLmlzUGFyZW50KCkpe3ZhciBpZT1kLmNhbGNCb3VuZGluZ0JveCh6ZSxDW2FlXS54Q29vcmRzLENbYWVdLnlDb29yZHMsT2UpO3EucHVzaChpZS50b3BMZWZ0WCtpZS53aWR0aC8yKSxxLnB1c2goaWUudG9wTGVmdFkraWUuaGVpZ2h0LzIpfWVsc2UgcS5wdXNoKENbYWVdLnhDb29yZHNbSWVdKSxxLnB1c2goQ1thZV0ueUNvb3Jkc1tJZV0pO2lmKExlLmlzUGFyZW50KCkpe3ZhciBvZT1kLmNhbGNCb3VuZGluZ0JveChMZSxDW2FlXS54Q29vcmRzLENbYWVdLnlDb29yZHMsT2UpO2RlLnB1c2gob2UudG9wTGVmdFgrb2Uud2lkdGgvMiksZGUucHVzaChvZS50b3BMZWZ0WStvZS5oZWlnaHQvMil9ZWxzZSBkZS5wdXNoKENbYWVdLnhDb29yZHNbeGVdKSxkZS5wdXNoKENbYWVdLnlDb29yZHNbeGVdKTt5ZS5lZGdlcy5wdXNoKHtzdGFydFg6cVswXSxzdGFydFk6cVsxXSxlbmRYOmRlWzBdLGVuZFk6ZGVbMV19KX1lbHNlIFJbYWVdW3plLmlkKCldJiZSW2FlXVtMZS5pZCgpXSYmeWUuZWRnZXMucHVzaCh7c3RhcnRYOlJbYWVdW3plLmlkKCldLmdldENlbnRlclgoKSxzdGFydFk6UlthZV1bemUuaWQoKV0uZ2V0Q2VudGVyWSgpLGVuZFg6UlthZV1bTGUuaWQoKV0uZ2V0Q2VudGVyWCgpLGVuZFk6UlthZV1bTGUuaWQoKV0uZ2V0Q2VudGVyWSgpfSl9KSx5ZS5ub2Rlcy5sZW5ndGg+MCYmKGoucHVzaCh5ZSksUS5hZGQoYWUpKX19KTt2YXIgdGU9SS5wYWNrQ29tcG9uZW50cyhqLHcucmFuZG9taXplKS5zaGlmdHM7aWYody5xdWFsaXR5PT0iZHJhZnQiKUMuZm9yRWFjaChmdW5jdGlvbihzZSxhZSl7dmFyIE9lPXNlLnhDb29yZHMubWFwKGZ1bmN0aW9uKEJlKXtyZXR1cm4gQmUrdGVbYWVdLmR4fSkseWU9c2UueUNvb3Jkcy5tYXAoZnVuY3Rpb24oQmUpe3JldHVybiBCZSt0ZVthZV0uZHl9KTtzZS54Q29vcmRzPU9lLHNlLnlDb29yZHM9eWV9KTtlbHNle3ZhciBoZT0wO1EuZm9yRWFjaChmdW5jdGlvbihzZSl7T2JqZWN0LmtleXMoUltzZV0pLmZvckVhY2goZnVuY3Rpb24oYWUpe3ZhciBPZT1SW3NlXVthZV07T2Uuc2V0Q2VudGVyKE9lLmdldENlbnRlclgoKSt0ZVtoZV0uZHgsT2UuZ2V0Q2VudGVyWSgpK3RlW2hlXS5keSl9KSxoZSsrfSl9fX1lbHNle3ZhciBQPXcuZWxlcy5ib3VuZGluZ0JveCgpO2lmKEwucHVzaCh7eDpQLngxK1Audy8yLHk6UC55MStQLmgvMn0pLHcucmFuZG9taXplKXt2YXIgQj1tKHcpO0MucHVzaChCKX13LnF1YWxpdHk9PSJkZWZhdWx0Inx8dy5xdWFsaXR5PT0icHJvb2YiPyhSLnB1c2goeSh3LENbMF0pKSxkLnJlbG9jYXRlQ29tcG9uZW50KExbMF0sUlswXSx3KSk6ZC5yZWxvY2F0ZUNvbXBvbmVudChMWzBdLENbMF0sdyl9dmFyIGxlPW8oZnVuY3Rpb24oYWUsT2Upe2lmKHcucXVhbGl0eT09ImRlZmF1bHQifHx3LnF1YWxpdHk9PSJwcm9vZiIpe3R5cGVvZiBhZT09Im51bWJlciImJihhZT1PZSk7dmFyIHllPXZvaWQgMCxCZT12b2lkIDAsSGU9YWUuZGF0YSgiaWQiKTtyZXR1cm4gUi5mb3JFYWNoKGZ1bmN0aW9uKExlKXtIZSBpbiBMZSYmKHllPXt4OkxlW0hlXS5nZXRSZWN0KCkuZ2V0Q2VudGVyWCgpLHk6TGVbSGVdLmdldFJlY3QoKS5nZXRDZW50ZXJZKCl9LEJlPUxlW0hlXSl9KSx3Lm5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVscyYmKEJlLmxhYmVsV2lkdGgmJihCZS5sYWJlbFBvc0hvcml6b250YWw9PSJsZWZ0Ij95ZS54Kz1CZS5sYWJlbFdpZHRoLzI6QmUubGFiZWxQb3NIb3Jpem9udGFsPT0icmlnaHQiJiYoeWUueC09QmUubGFiZWxXaWR0aC8yKSksQmUubGFiZWxIZWlnaHQmJihCZS5sYWJlbFBvc1ZlcnRpY2FsPT0idG9wIj95ZS55Kz1CZS5sYWJlbEhlaWdodC8yOkJlLmxhYmVsUG9zVmVydGljYWw9PSJib3R0b20iJiYoeWUueS09QmUubGFiZWxIZWlnaHQvMikpKSx5ZT09bnVsbCYmKHllPXt4OmFlLnBvc2l0aW9uKCJ4IikseTphZS5wb3NpdGlvbigieSIpfSkse3g6eWUueCx5OnllLnl9fWVsc2V7dmFyIHplPXZvaWQgMDtyZXR1cm4gQy5mb3JFYWNoKGZ1bmN0aW9uKExlKXt2YXIgSWU9TGUubm9kZUluZGV4ZXMuZ2V0KGFlLmlkKCkpO0llIT1udWxsJiYoemU9e3g6TGUueENvb3Jkc1tJZV0seTpMZS55Q29vcmRzW0llXX0pfSksemU9PW51bGwmJih6ZT17eDphZS5wb3NpdGlvbigieCIpLHk6YWUucG9zaXRpb24oInkiKX0pLHt4OnplLngseTp6ZS55fX19LCJnZXRQb3NpdGlvbnMiKTtpZih3LnF1YWxpdHk9PSJkZWZhdWx0Inx8dy5xdWFsaXR5PT0icHJvb2YifHx3LnJhbmRvbWl6ZSl7dmFyIEo9ZC5jYWxjUGFyZW50c1dpdGhvdXRDaGlsZHJlbihFLF8pLFNlPV8uZmlsdGVyKGZ1bmN0aW9uKHNlKXtyZXR1cm4gc2UuY3NzKCJkaXNwbGF5Iik9PSJub25lIn0pO3cuZWxlcz1fLm5vdChTZSksXy5ub2RlcygpLm5vdCgiOnBhcmVudCIpLm5vdChTZSkubGF5b3V0UG9zaXRpb25zKFMsdyxsZSksSi5sZW5ndGg+MCYmSi5mb3JFYWNoKGZ1bmN0aW9uKHNlKXtzZS5wb3NpdGlvbihsZShzZSkpfSl9ZWxzZSBjb25zb2xlLmxvZygiSWYgcmFuZG9taXplIG9wdGlvbiBpcyBzZXQgdG8gZmFsc2UsIHRoZW4gcXVhbGl0eSBvcHRpb24gbXVzdCBiZSAnZGVmYXVsdCcgb3IgJ3Byb29mJy4iKX0sInJ1biIpfV0pLGJ9KCk7YS5leHBvcnRzPXh9LDY1NzooYSxzLGwpPT57dmFyIHU9bCg1NDgpLGg9bCgxNDApLmxheW91dEJhc2UuTWF0cml4LGY9bCgxNDApLmxheW91dEJhc2UuU1ZELGQ9byhmdW5jdGlvbihtKXt2YXIgZz1tLmN5LHk9bS5lbGVzLHY9eS5ub2RlcygpLHg9eS5ub2RlcygiOnBhcmVudCIpLGI9bmV3IE1hcCxUPW5ldyBNYXAsUz1uZXcgTWFwLHc9W10sRT1bXSxfPVtdLEM9W10sRD1bXSxPPVtdLFI9W10saz1bXSxMPXZvaWQgMCxBPXZvaWQgMCxJPTFlOCxNPTFlLTksUD1tLnBpVG9sLEI9bS5zYW1wbGluZ1R5cGUsRj1tLm5vZGVTZXBhcmF0aW9uLHo9dm9pZCAwLCQ9byhmdW5jdGlvbigpe2Zvcih2YXIgVGU9MCxXPTAscGU9ITE7Vzx6Oyl7VGU9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKkEpLHBlPSExO2Zvcih2YXIgdmU9MDt2ZTxXO3ZlKyspaWYoQ1t2ZV09PVRlKXtwZT0hMDticmVha31pZighcGUpQ1tXXT1UZSxXKys7ZWxzZSBjb250aW51ZX19LCJyYW5kb21TYW1wbGVDUiIpLFU9byhmdW5jdGlvbihUZSxXLHBlKXtmb3IodmFyIHZlPVtdLFBlPTAsX2U9MCxiZT0wLFZlPXZvaWQgMCxEZT1bXSxxZT0wLGF0PTEsUnQ9MDtSdDxBO1J0KyspRGVbUnRdPUk7Zm9yKHZlW19lXT1UZSxEZVtUZV09MDtfZT49UGU7KXtiZT12ZVtQZSsrXTtmb3IodmFyIHN0PXdbYmVdLFVlPTA7VWU8c3QubGVuZ3RoO1VlKyspVmU9VC5nZXQoc3RbVWVdKSxEZVtWZV09PUkmJihEZVtWZV09RGVbYmVdKzEsdmVbKytfZV09VmUpO09bYmVdW1ddPURlW2JlXSpGfWlmKHBlKXtmb3IodmFyIGN0PTA7Y3Q8QTtjdCsrKU9bY3RdW1ddPERbY3RdJiYoRFtjdF09T1tjdF1bV10pO2Zvcih2YXIgV2U9MDtXZTxBO1dlKyspRFtXZV0+cWUmJihxZT1EW1dlXSxhdD1XZSl9cmV0dXJuIGF0fSwiQkZTIiksSz1vKGZ1bmN0aW9uKFRlKXt2YXIgVz12b2lkIDA7aWYoVGUpe1c9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKkEpLEw9Vztmb3IodmFyIHZlPTA7dmU8QTt2ZSsrKURbdmVdPUk7Zm9yKHZhciBQZT0wO1BlPHo7UGUrKylDW1BlXT1XLFc9VShXLFBlLFRlKX1lbHNleyQoKTtmb3IodmFyIHBlPTA7cGU8ejtwZSsrKVUoQ1twZV0scGUsVGUsITEpfWZvcih2YXIgX2U9MDtfZTxBO19lKyspZm9yKHZhciBiZT0wO2JlPHo7YmUrKylPW19lXVtiZV0qPU9bX2VdW2JlXTtmb3IodmFyIFZlPTA7VmU8ejtWZSsrKVJbVmVdPVtdO2Zvcih2YXIgRGU9MDtEZTx6O0RlKyspZm9yKHZhciBxZT0wO3FlPHo7cWUrKylSW0RlXVtxZV09T1tDW3FlXV1bRGVdfSwiYWxsQkZTIiksZWU9byhmdW5jdGlvbigpe2Zvcih2YXIgVGU9Zi5zdmQoUiksVz1UZS5TLHBlPVRlLlUsdmU9VGUuVixQZT1XWzBdKldbMF0qV1swXSxfZT1bXSxiZT0wO2JlPHo7YmUrKyl7X2VbYmVdPVtdO2Zvcih2YXIgVmU9MDtWZTx6O1ZlKyspX2VbYmVdW1ZlXT0wLGJlPT1WZSYmKF9lW2JlXVtWZV09V1tiZV0vKFdbYmVdKldbYmVdK1BlLyhXW2JlXSpXW2JlXSkpKX1rPWgubXVsdE1hdChoLm11bHRNYXQodmUsX2UpLGgudHJhbnNwb3NlKHBlKSl9LCJzYW1wbGUiKSxZPW8oZnVuY3Rpb24oKXtmb3IodmFyIFRlPXZvaWQgMCxXPXZvaWQgMCxwZT1bXSx2ZT1bXSxQZT1bXSxfZT1bXSxiZT0wO2JlPEE7YmUrKylwZVtiZV09TWF0aC5yYW5kb20oKSx2ZVtiZV09TWF0aC5yYW5kb20oKTtwZT1oLm5vcm1hbGl6ZShwZSksdmU9aC5ub3JtYWxpemUodmUpO2Zvcih2YXIgVmU9MCxEZT1NLHFlPU0sYXQ9dm9pZCAwOzspe1ZlKys7Zm9yKHZhciBSdD0wO1J0PEE7UnQrKylQZVtSdF09cGVbUnRdO2lmKHBlPWgubXVsdEdhbW1hKGgubXVsdEwoaC5tdWx0R2FtbWEoUGUpLE8saykpLFRlPWguZG90UHJvZHVjdChQZSxwZSkscGU9aC5ub3JtYWxpemUocGUpLERlPWguZG90UHJvZHVjdChQZSxwZSksYXQ9TWF0aC5hYnMoRGUvcWUpLGF0PD0xK1AmJmF0Pj0xKWJyZWFrO3FlPURlfWZvcih2YXIgc3Q9MDtzdDxBO3N0KyspUGVbc3RdPXBlW3N0XTtmb3IoVmU9MCxxZT1NOzspe1ZlKys7Zm9yKHZhciBVZT0wO1VlPEE7VWUrKylfZVtVZV09dmVbVWVdO2lmKF9lPWgubWludXNPcChfZSxoLm11bHRDb25zKFBlLGguZG90UHJvZHVjdChQZSxfZSkpKSx2ZT1oLm11bHRHYW1tYShoLm11bHRMKGgubXVsdEdhbW1hKF9lKSxPLGspKSxXPWguZG90UHJvZHVjdChfZSx2ZSksdmU9aC5ub3JtYWxpemUodmUpLERlPWguZG90UHJvZHVjdChfZSx2ZSksYXQ9TWF0aC5hYnMoRGUvcWUpLGF0PD0xK1AmJmF0Pj0xKWJyZWFrO3FlPURlfWZvcih2YXIgY3Q9MDtjdDxBO2N0KyspX2VbY3RdPXZlW2N0XTtFPWgubXVsdENvbnMoUGUsTWF0aC5zcXJ0KE1hdGguYWJzKFRlKSkpLF89aC5tdWx0Q29ucyhfZSxNYXRoLnNxcnQoTWF0aC5hYnMoVykpKX0sInBvd2VySXRlcmF0aW9uIik7dS5jb25uZWN0Q29tcG9uZW50cyhnLHksdS5nZXRUb3BNb3N0Tm9kZXModiksYikseC5mb3JFYWNoKGZ1bmN0aW9uKFYpe3UuY29ubmVjdENvbXBvbmVudHMoZyx5LHUuZ2V0VG9wTW9zdE5vZGVzKFYuZGVzY2VuZGFudHMoKS5pbnRlcnNlY3Rpb24oeSkpLGIpfSk7Zm9yKHZhciBjZT0wLFo9MDtaPHYubGVuZ3RoO1orKyl2W1pdLmlzUGFyZW50KCl8fFQuc2V0KHZbWl0uaWQoKSxjZSsrKTt2YXIgdWU9ITAsUT0hMSxqPXZvaWQgMDt0cnl7Zm9yKHZhciBuZT1iLmtleXMoKVtTeW1ib2wuaXRlcmF0b3JdKCksdGU7ISh1ZT0odGU9bmUubmV4dCgpKS5kb25lKTt1ZT0hMCl7dmFyIGhlPXRlLnZhbHVlO1Quc2V0KGhlLGNlKyspfX1jYXRjaChWKXtRPSEwLGo9Vn1maW5hbGx5e3RyeXshdWUmJm5lLnJldHVybiYmbmUucmV0dXJuKCl9ZmluYWxseXtpZihRKXRocm93IGp9fWZvcih2YXIgbGU9MDtsZTxULnNpemU7bGUrKyl3W2xlXT1bXTt4LmZvckVhY2goZnVuY3Rpb24oVil7Zm9yKHZhciBUZT1WLmNoaWxkcmVuKCkuaW50ZXJzZWN0aW9uKHkpO1RlLm5vZGVzKCI6Y2hpbGRsZXNzIikubGVuZ3RoPT0wOylUZT1UZS5ub2RlcygpWzBdLmNoaWxkcmVuKCkuaW50ZXJzZWN0aW9uKHkpO3ZhciBXPTAscGU9VGUubm9kZXMoIjpjaGlsZGxlc3MiKVswXS5jb25uZWN0ZWRFZGdlcygpLmxlbmd0aDtUZS5ub2RlcygiOmNoaWxkbGVzcyIpLmZvckVhY2goZnVuY3Rpb24odmUsUGUpe3ZlLmNvbm5lY3RlZEVkZ2VzKCkubGVuZ3RoPHBlJiYocGU9dmUuY29ubmVjdGVkRWRnZXMoKS5sZW5ndGgsVz1QZSl9KSxTLnNldChWLmlkKCksVGUubm9kZXMoIjpjaGlsZGxlc3MiKVtXXS5pZCgpKX0pLHYuZm9yRWFjaChmdW5jdGlvbihWKXt2YXIgVGU9dm9pZCAwO1YuaXNQYXJlbnQoKT9UZT1ULmdldChTLmdldChWLmlkKCkpKTpUZT1ULmdldChWLmlkKCkpLFYubmVpZ2hib3Job29kKCkubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKFcpe3kuaW50ZXJzZWN0aW9uKFYuZWRnZXNXaXRoKFcpKS5sZW5ndGg+MCYmKFcuaXNQYXJlbnQoKT93W1RlXS5wdXNoKFMuZ2V0KFcuaWQoKSkpOndbVGVdLnB1c2goVy5pZCgpKSl9KX0pO3ZhciBKPW8oZnVuY3Rpb24oVGUpe3ZhciBXPVQuZ2V0KFRlKSxwZT12b2lkIDA7Yi5nZXQoVGUpLmZvckVhY2goZnVuY3Rpb24odmUpe2cuZ2V0RWxlbWVudEJ5SWQodmUpLmlzUGFyZW50KCk/cGU9Uy5nZXQodmUpOnBlPXZlLHdbV10ucHVzaChwZSksd1tULmdldChwZSldLnB1c2goVGUpfSl9LCJfbG9vcCIpLFNlPSEwLHNlPSExLGFlPXZvaWQgMDt0cnl7Zm9yKHZhciBPZT1iLmtleXMoKVtTeW1ib2wuaXRlcmF0b3JdKCkseWU7IShTZT0oeWU9T2UubmV4dCgpKS5kb25lKTtTZT0hMCl7dmFyIEJlPXllLnZhbHVlO0ooQmUpfX1jYXRjaChWKXtzZT0hMCxhZT1WfWZpbmFsbHl7dHJ5eyFTZSYmT2UucmV0dXJuJiZPZS5yZXR1cm4oKX1maW5hbGx5e2lmKHNlKXRocm93IGFlfX1BPVQuc2l6ZTt2YXIgSGU9dm9pZCAwO2lmKEE+Mil7ej1BPG0uc2FtcGxlU2l6ZT9BOm0uc2FtcGxlU2l6ZTtmb3IodmFyIHplPTA7emU8QTt6ZSsrKU9bemVdPVtdO2Zvcih2YXIgTGU9MDtMZTx6O0xlKyspa1tMZV09W107cmV0dXJuIG0ucXVhbGl0eT09ImRyYWZ0Inx8bS5zdGVwPT0iYWxsIj8oSyhCKSxlZSgpLFkoKSxIZT17bm9kZUluZGV4ZXM6VCx4Q29vcmRzOkUseUNvb3JkczpffSk6KFQuZm9yRWFjaChmdW5jdGlvbihWLFRlKXtFLnB1c2goZy5nZXRFbGVtZW50QnlJZChUZSkucG9zaXRpb24oIngiKSksXy5wdXNoKGcuZ2V0RWxlbWVudEJ5SWQoVGUpLnBvc2l0aW9uKCJ5IikpfSksSGU9e25vZGVJbmRleGVzOlQseENvb3JkczpFLHlDb29yZHM6X30pLEhlfWVsc2V7dmFyIEllPVQua2V5cygpLHhlPWcuZ2V0RWxlbWVudEJ5SWQoSWUubmV4dCgpLnZhbHVlKSxxPXhlLnBvc2l0aW9uKCksZGU9eGUub3V0ZXJXaWR0aCgpO2lmKEUucHVzaChxLngpLF8ucHVzaChxLnkpLEE9PTIpe3ZhciBpZT1nLmdldEVsZW1lbnRCeUlkKEllLm5leHQoKS52YWx1ZSksb2U9aWUub3V0ZXJXaWR0aCgpO0UucHVzaChxLngrZGUvMitvZS8yK20uaWRlYWxFZGdlTGVuZ3RoKSxfLnB1c2gocS55KX1yZXR1cm4gSGU9e25vZGVJbmRleGVzOlQseENvb3JkczpFLHlDb29yZHM6X30sSGV9fSwic3BlY3RyYWxMYXlvdXQiKTthLmV4cG9ydHM9e3NwZWN0cmFsTGF5b3V0OmR9fSw1Nzk6KGEscyxsKT0+e3ZhciB1PWwoMjEyKSxoPW8oZnVuY3Rpb24oZCl7ZCYmZCgibGF5b3V0IiwiZmNvc2UiLHUpfSwicmVnaXN0ZXIiKTt0eXBlb2YgY3l0b3NjYXBlPCJ1IiYmaChjeXRvc2NhcGUpLGEuZXhwb3J0cz1ofSwxNDA6YT0+e2EuZXhwb3J0cz10fX0scj17fTtmdW5jdGlvbiBuKGEpe3ZhciBzPXJbYV07aWYocyE9PXZvaWQgMClyZXR1cm4gcy5leHBvcnRzO3ZhciBsPXJbYV09e2V4cG9ydHM6e319O3JldHVybiBlW2FdKGwsbC5leHBvcnRzLG4pLGwuZXhwb3J0c31vKG4sIl9fd2VicGFja19yZXF1aXJlX18iKTt2YXIgaT1uKDU3OSk7cmV0dXJuIGl9KSgpfSl9KTt2YXIgeHksbDAsdCQ9TigoKT0+eyJ1c2Ugc3RyaWN0IjtqbCgpO3h5PW8odD0+YDxnPjxyZWN0IHdpZHRoPSI4MCIgaGVpZ2h0PSI4MCIgc3R5bGU9ImZpbGw6ICMwODdlYmY7IHN0cm9rZS13aWR0aDogMHB4OyIvPiR7dH08L2c+YCwid3JhcEljb24iKSxsMD17cHJlZml4OiJtZXJtYWlkLWFyY2hpdGVjdHVyZSIsaGVpZ2h0OjgwLHdpZHRoOjgwLGljb25zOntkYXRhYmFzZTp7Ym9keTp4eSgnPHBhdGggaWQ9ImIiIGRhdGEtbmFtZT0iNCIgZD0ibTIwLDU3Ljg2YzAsMy45NCw4Ljk1LDcuMTQsMjAsNy4xNHMyMC0zLjIsMjAtNy4xNCIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz48cGF0aCBpZD0iYyIgZGF0YS1uYW1lPSIzIiBkPSJtMjAsNDUuOTVjMCwzLjk0LDguOTUsNy4xNCwyMCw3LjE0czIwLTMuMiwyMC03LjE0IiBzdHlsZT0iZmlsbDogbm9uZTsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IHN0cm9rZS13aWR0aDogMnB4OyIvPjxwYXRoIGlkPSJkIiBkYXRhLW5hbWU9IjIiIGQ9Im0yMCwzNC4wNWMwLDMuOTQsOC45NSw3LjE0LDIwLDcuMTRzMjAtMy4yLDIwLTcuMTQiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7Ii8+PGVsbGlwc2UgaWQ9ImUiIGRhdGEtbmFtZT0iMSIgY3g9IjQwIiBjeT0iMjIuMTQiIHJ4PSIyMCIgcnk9IjcuMTQiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7Ii8+PGxpbmUgeDE9IjIwIiB5MT0iNTcuODYiIHgyPSIyMCIgeTI9IjIyLjE0IiBzdHlsZT0iZmlsbDogbm9uZTsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IHN0cm9rZS13aWR0aDogMnB4OyIvPjxsaW5lIHgxPSI2MCIgeTE9IjU3Ljg2IiB4Mj0iNjAiIHkyPSIyMi4xNCIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz4nKX0sc2VydmVyOntib2R5Onh5KCc8cmVjdCB4PSIxNy41IiB5PSIxNy41IiB3aWR0aD0iNDUiIGhlaWdodD0iNDUiIHJ4PSIyIiByeT0iMiIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz48bGluZSB4MT0iMTcuNSIgeTE9IjMyLjUiIHgyPSI2Mi41IiB5Mj0iMzIuNSIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz48bGluZSB4MT0iMTcuNSIgeTE9IjQ3LjUiIHgyPSI2Mi41IiB5Mj0iNDcuNSIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz48Zz48cGF0aCBkPSJtNTYuMjUsMjVjMCwuMjctLjQ1LjUtMSwuNWgtMTAuNWMtLjU1LDAtMS0uMjMtMS0uNXMuNDUtLjUsMS0uNWgxMC41Yy41NSwwLDEsLjIzLDEsLjVaIiBzdHlsZT0iZmlsbDogI2ZmZjsgc3Ryb2tlLXdpZHRoOiAwcHg7Ii8+PHBhdGggZD0ibTU2LjI1LDI1YzAsLjI3LS40NS41LTEsLjVoLTEwLjVjLS41NSwwLTEtLjIzLTEtLjVzLjQ1LS41LDEtLjVoMTAuNWMuNTUsMCwxLC4yMywxLC41WiIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyIvPjwvZz48Zz48cGF0aCBkPSJtNTYuMjUsNDBjMCwuMjctLjQ1LjUtMSwuNWgtMTAuNWMtLjU1LDAtMS0uMjMtMS0uNXMuNDUtLjUsMS0uNWgxMC41Yy41NSwwLDEsLjIzLDEsLjVaIiBzdHlsZT0iZmlsbDogI2ZmZjsgc3Ryb2tlLXdpZHRoOiAwcHg7Ii8+PHBhdGggZD0ibTU2LjI1LDQwYzAsLjI3LS40NS41LTEsLjVoLTEwLjVjLS41NSwwLTEtLjIzLTEtLjVzLjQ1LS41LDEtLjVoMTAuNWMuNTUsMCwxLC4yMywxLC41WiIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyIvPjwvZz48Zz48cGF0aCBkPSJtNTYuMjUsNTVjMCwuMjctLjQ1LjUtMSwuNWgtMTAuNWMtLjU1LDAtMS0uMjMtMS0uNXMuNDUtLjUsMS0uNWgxMC41Yy41NSwwLDEsLjIzLDEsLjVaIiBzdHlsZT0iZmlsbDogI2ZmZjsgc3Ryb2tlLXdpZHRoOiAwcHg7Ii8+PHBhdGggZD0ibTU2LjI1LDU1YzAsLjI3LS40NS41LTEsLjVoLTEwLjVjLS41NSwwLTEtLjIzLTEtLjVzLjQ1LS41LDEtLjVoMTAuNWMuNTUsMCwxLC4yMywxLC41WiIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyIvPjwvZz48Zz48Y2lyY2xlIGN4PSIzMi41IiBjeT0iMjUiIHI9Ii43NSIgc3R5bGU9ImZpbGw6ICNmZmY7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyIvPjxjaXJjbGUgY3g9IjI3LjUiIGN5PSIyNSIgcj0iLjc1IiBzdHlsZT0iZmlsbDogI2ZmZjsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7Ii8+PGNpcmNsZSBjeD0iMjIuNSIgY3k9IjI1IiByPSIuNzUiIHN0eWxlPSJmaWxsOiAjZmZmOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsiLz48L2c+PGc+PGNpcmNsZSBjeD0iMzIuNSIgY3k9IjQwIiByPSIuNzUiIHN0eWxlPSJmaWxsOiAjZmZmOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsiLz48Y2lyY2xlIGN4PSIyNy41IiBjeT0iNDAiIHI9Ii43NSIgc3R5bGU9ImZpbGw6ICNmZmY7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyIvPjxjaXJjbGUgY3g9IjIyLjUiIGN5PSI0MCIgcj0iLjc1IiBzdHlsZT0iZmlsbDogI2ZmZjsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7Ii8+PC9nPjxnPjxjaXJjbGUgY3g9IjMyLjUiIGN5PSI1NSIgcj0iLjc1IiBzdHlsZT0iZmlsbDogI2ZmZjsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7Ii8+PGNpcmNsZSBjeD0iMjcuNSIgY3k9IjU1IiByPSIuNzUiIHN0eWxlPSJmaWxsOiAjZmZmOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsiLz48Y2lyY2xlIGN4PSIyMi41IiBjeT0iNTUiIHI9Ii43NSIgc3R5bGU9ImZpbGw6ICNmZmY7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyIvPjwvZz4nKX0sZGlzazp7Ym9keTp4eSgnPHJlY3QgeD0iMjAiIHk9IjE1IiB3aWR0aD0iNDAiIGhlaWdodD0iNTAiIHJ4PSIxIiByeT0iMSIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz48ZWxsaXBzZSBjeD0iMjQiIGN5PSIxOS4xNyIgcng9Ii44IiByeT0iLjgzIiBzdHlsZT0iZmlsbDogbm9uZTsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IHN0cm9rZS13aWR0aDogMnB4OyIvPjxlbGxpcHNlIGN4PSI1NiIgY3k9IjE5LjE3IiByeD0iLjgiIHJ5PSIuODMiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7Ii8+PGVsbGlwc2UgY3g9IjI0IiBjeT0iNjAuODMiIHJ4PSIuOCIgcnk9Ii44MyIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz48ZWxsaXBzZSBjeD0iNTYiIGN5PSI2MC44MyIgcng9Ii44IiByeT0iLjgzIiBzdHlsZT0iZmlsbDogbm9uZTsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IHN0cm9rZS13aWR0aDogMnB4OyIvPjxlbGxpcHNlIGN4PSI0MCIgY3k9IjMzLjc1IiByeD0iMTQiIHJ5PSIxNC41OCIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz48ZWxsaXBzZSBjeD0iNDAiIGN5PSIzMy43NSIgcng9IjQiIHJ5PSI0LjE3IiBzdHlsZT0iZmlsbDogI2ZmZjsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IHN0cm9rZS13aWR0aDogMnB4OyIvPjxwYXRoIGQ9Im0zNy41MSw0Mi41MmwtNC44MywxMy4yMmMtLjI2LjcxLTEuMSwxLjAyLTEuNzYuNjRsLTQuMTgtMi40MmMtLjY2LS4zOC0uODEtMS4yNi0uMzMtMS44NGw5LjAxLTEwLjhjLjg4LTEuMDUsMi41Ni0uMDgsMi4wOSwxLjJaIiBzdHlsZT0iZmlsbDogI2ZmZjsgc3Ryb2tlLXdpZHRoOiAwcHg7Ii8+Jyl9LGludGVybmV0Ontib2R5Onh5KCc8Y2lyY2xlIGN4PSI0MCIgY3k9IjQwIiByPSIyMi41IiBzdHlsZT0iZmlsbDogbm9uZTsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IHN0cm9rZS13aWR0aDogMnB4OyIvPjxsaW5lIHgxPSI0MCIgeTE9IjE3LjUiIHgyPSI0MCIgeTI9IjYyLjUiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7Ii8+PGxpbmUgeDE9IjE3LjUiIHkxPSI0MCIgeDI9IjYyLjUiIHkyPSI0MCIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz48cGF0aCBkPSJtMzkuOTksMTcuNTFjLTE1LjI4LDExLjEtMTUuMjgsMzMuODgsMCw0NC45OCIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz48cGF0aCBkPSJtNDAuMDEsMTcuNTFjMTUuMjgsMTEuMSwxNS4yOCwzMy44OCwwLDQ0Ljk4IiBzdHlsZT0iZmlsbDogbm9uZTsgc3Ryb2tlOiAjZmZmOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IHN0cm9rZS13aWR0aDogMnB4OyIvPjxsaW5lIHgxPSIxOS43NSIgeTE9IjMwLjEiIHgyPSI2MC4yNSIgeTI9IjMwLjEiIHN0eWxlPSJmaWxsOiBub25lOyBzdHJva2U6ICNmZmY7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgc3Ryb2tlLXdpZHRoOiAycHg7Ii8+PGxpbmUgeDE9IjE5Ljc1IiB5MT0iNDkuOSIgeDI9IjYwLjI1IiB5Mj0iNDkuOSIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz4nKX0sY2xvdWQ6e2JvZHk6eHkoJzxwYXRoIGQ9Im02NSw0Ny41YzAsMi43Ni0yLjI0LDUtNSw1SDIwYy0yLjc2LDAtNS0yLjI0LTUtNSwwLTEuODcsMS4wMy0zLjUxLDIuNTYtNC4zNi0uMDQtLjIxLS4wNi0uNDItLjA2LS42NCwwLTIuNiwyLjQ4LTQuNzQsNS42NS00Ljk3LDEuNjUtNC41MSw2LjM0LTcuNzYsMTEuODUtNy43Ni44NiwwLDEuNjkuMDgsMi41LjIzLDIuMDktMS41Nyw0LjY5LTIuNSw3LjUtMi41LDYuMSwwLDExLjE5LDQuMzgsMTIuMjgsMTAuMTcsMi4xNC41NiwzLjcyLDIuNTEsMy43Miw0LjgzLDAsLjAzLDAsLjA3LS4wMS4xLDIuMjkuNDYsNC4wMSwyLjQ4LDQuMDEsNC45WiIgc3R5bGU9ImZpbGw6IG5vbmU7IHN0cm9rZTogI2ZmZjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBzdHJva2Utd2lkdGg6IDJweDsiLz4nKX0sdW5rbm93bjp0NyxibGFuazp7Ym9keTp4eSgiIil9fX19KTt2YXIgWDJlLGoyZSxLMmUsUTJlLFoyZT1OKCgpPT57InVzZSBzdHJpY3QiO2psKCk7R3QoKTthbygpO040KCk7dCQoKTtBQygpO1gyZT1vKGFzeW5jIGZ1bmN0aW9uKHQsZSl7bGV0IHI9TWkoInBhZGRpbmciKSxuPU1pKCJpY29uU2l6ZSIpLGk9bi8yLGE9bi82LHM9YS8yO2F3YWl0IFByb21pc2UuYWxsKGUuZWRnZXMoKS5tYXAoYXN5bmMgbD0+e2xldHtzb3VyY2U6dSxzb3VyY2VEaXI6aCxzb3VyY2VBcnJvdzpmLHNvdXJjZUdyb3VwOmQsdGFyZ2V0OnAsdGFyZ2V0RGlyOm0sdGFyZ2V0QXJyb3c6Zyx0YXJnZXRHcm91cDp5LGxhYmVsOnZ9PUNDKGwpLHt4LHk6Yn09bFswXS5zb3VyY2VFbmRwb2ludCgpLHt4OlQseTpTfT1sWzBdLm1pZHBvaW50KCkse3g6dyx5OkV9PWxbMF0udGFyZ2V0RW5kcG9pbnQoKSxfPXIrNDtpZihkJiYoamEoaCk/eCs9aD09PSJMIj8tXzpfOmIrPWg9PT0iVCI/LV86XysxOCkseSYmKGphKG0pP3crPW09PT0iTCI/LV86XzpFKz1tPT09IlQiPy1fOl8rMTgpLCFkJiZvMC5nZXROb2RlKHUpPy50eXBlPT09Imp1bmN0aW9uIiYmKGphKGgpP3grPWg9PT0iTCI/aTotaTpiKz1oPT09IlQiP2k6LWkpLCF5JiZvMC5nZXROb2RlKHApPy50eXBlPT09Imp1bmN0aW9uIiYmKGphKG0pP3crPW09PT0iTCI/aTotaTpFKz1tPT09IlQiP2k6LWkpLGxbMF0uX3ByaXZhdGUucnNjcmF0Y2gpe2xldCBDPXQuaW5zZXJ0KCJnIik7aWYoQy5pbnNlcnQoInBhdGgiKS5hdHRyKCJkIixgTSAke3h9LCR7Yn0gTCAke1R9LCR7U30gTCR7d30sJHtFfSBgKS5hdHRyKCJjbGFzcyIsImVkZ2UiKSxmKXtsZXQgRD1qYShoKT9ENFtoXSh4LGEpOngtcyxPPXJ1KGgpP0Q0W2hdKGIsYSk6Yi1zO0MuaW5zZXJ0KCJwb2x5Z29uIikuYXR0cigicG9pbnRzIixZRltoXShhKSkuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7RH0sJHtPfSlgKS5hdHRyKCJjbGFzcyIsImFycm93Iil9aWYoZyl7bGV0IEQ9amEobSk/RDRbbV0odyxhKTp3LXMsTz1ydShtKT9ENFttXShFLGEpOkUtcztDLmluc2VydCgicG9seWdvbiIpLmF0dHIoInBvaW50cyIsWUZbbV0oYSkpLmF0dHIoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZSgke0R9LCR7T30pYCkuYXR0cigiY2xhc3MiLCJhcnJvdyIpfWlmKHYpe2xldCBEPUw0KGgsbSk/IlhZIjpqYShoKT8iWCI6IlkiLE89MDtEPT09IlgiP089TWF0aC5hYnMoeC13KTpEPT09IlkiP089TWF0aC5hYnMoYi1FKS8xLjU6Tz1NYXRoLmFicyh4LXcpLzI7bGV0IFI9Qy5hcHBlbmQoImciKTtpZihhd2FpdCBxbihSLHYse3VzZUh0bWxMYWJlbHM6ITEsd2lkdGg6TyxjbGFzc2VzOiJhcmNoaXRlY3R1cmUtc2VydmljZS1sYWJlbCJ9LG1lKCkpLFIuYXR0cigiZHkiLCIxZW0iKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIiksRD09PSJYIilSLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK1QrIiwgIitTKyIpIik7ZWxzZSBpZihEPT09IlkiKVIuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrVCsiLCAiK1MrIikgcm90YXRlKC05MCkiKTtlbHNlIGlmKEQ9PT0iWFkiKXtsZXQgaz1SNChoLG0pO2lmKGsmJk8yZShrKSl7bGV0IEw9Ui5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksW0EsSV09QjJlKGspO1IuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJhdXRvIikuYXR0cigidHJhbnNmb3JtIixgcm90YXRlKCR7LTEqQSpJKjQ1fSlgKTtsZXQgTT1SLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtSLmF0dHIoInRyYW5zZm9ybSIsYAogICAgICAgICAgICAgICAgdHJhbnNsYXRlKCR7VH0sICR7Uy1MLmhlaWdodC8yfSkKICAgICAgICAgICAgICAgIHRyYW5zbGF0ZSgke0EqTS53aWR0aC8yfSwgJHtJKk0uaGVpZ2h0LzJ9KQogICAgICAgICAgICAgICAgcm90YXRlKCR7LTEqQSpJKjQ1fSwgMCwgJHtMLmhlaWdodC8yfSkKICAgICAgICAgICAgICBgKX19fX19KSl9LCJkcmF3RWRnZXMiKSxqMmU9byhhc3luYyBmdW5jdGlvbih0LGUpe2xldCBuPU1pKCJwYWRkaW5nIikqLjc1LGk9TWkoImZvbnRTaXplIikscz1NaSgiaWNvblNpemUiKS8yO2F3YWl0IFByb21pc2UuYWxsKGUubm9kZXMoKS5tYXAoYXN5bmMgbD0+e2xldCB1PVlmKGwpO2lmKHUudHlwZT09PSJncm91cCIpe2xldHtoLHc6Zix4MTpkLHkxOnB9PWwuYm91bmRpbmdCb3goKTt0LmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLGQrcykuYXR0cigieSIscCtzKS5hdHRyKCJ3aWR0aCIsZikuYXR0cigiaGVpZ2h0IixoKS5hdHRyKCJjbGFzcyIsIm5vZGUtYmtnIik7bGV0IG09dC5hcHBlbmQoImciKSxnPWQseT1wO2lmKHUuaWNvbil7bGV0IHY9bS5hcHBlbmQoImciKTt2Lmh0bWwoYDxnPiR7YXdhaXQgRXModS5pY29uLHtoZWlnaHQ6bix3aWR0aDpuLGZhbGxiYWNrUHJlZml4OmwwLnByZWZpeH0pfTwvZz5gKSx2LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhnK3MrMSkrIiwgIisoeStzKzEpKyIpIiksZys9bix5Kz1pLzItMS0yfWlmKHUubGFiZWwpe2xldCB2PW0uYXBwZW5kKCJnIik7YXdhaXQgcW4odix1LmxhYmVsLHt1c2VIdG1sTGFiZWxzOiExLHdpZHRoOmYsY2xhc3NlczoiYXJjaGl0ZWN0dXJlLXNlcnZpY2UtbGFiZWwifSxtZSgpKSx2LmF0dHIoImR5IiwiMWVtIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJzdGFydCIpLmF0dHIoInRleHQtYW5jaG9yIiwic3RhcnQiKSx2LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhnK3MrNCkrIiwgIisoeStzKzIpKyIpIil9fX0pKX0sImRyYXdHcm91cHMiKSxLMmU9byhhc3luYyBmdW5jdGlvbih0LGUscil7Zm9yKGxldCBuIG9mIHIpe2xldCBpPWUuYXBwZW5kKCJnIiksYT1NaSgiaWNvblNpemUiKTtpZihuLnRpdGxlKXtsZXQgaD1pLmFwcGVuZCgiZyIpO2F3YWl0IHFuKGgsbi50aXRsZSx7dXNlSHRtbExhYmVsczohMSx3aWR0aDphKjEuNSxjbGFzc2VzOiJhcmNoaXRlY3R1cmUtc2VydmljZS1sYWJlbCJ9LG1lKCkpLGguYXR0cigiZHkiLCIxZW0iKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIiksaC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIithLzIrIiwgIithKyIpIil9bGV0IHM9aS5hcHBlbmQoImciKTtpZihuLmljb24pcy5odG1sKGA8Zz4ke2F3YWl0IEVzKG4uaWNvbix7aGVpZ2h0OmEsd2lkdGg6YSxmYWxsYmFja1ByZWZpeDpsMC5wcmVmaXh9KX08L2c+YCk7ZWxzZSBpZihuLmljb25UZXh0KXtzLmh0bWwoYDxnPiR7YXdhaXQgRXMoImJsYW5rIix7aGVpZ2h0OmEsd2lkdGg6YSxmYWxsYmFja1ByZWZpeDpsMC5wcmVmaXh9KX08L2c+YCk7bGV0IGQ9cy5hcHBlbmQoImciKS5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ3aWR0aCIsYSkuYXR0cigiaGVpZ2h0IixhKS5hcHBlbmQoImRpdiIpLmF0dHIoImNsYXNzIiwibm9kZS1pY29uLXRleHQiKS5hdHRyKCJzdHlsZSIsYGhlaWdodDogJHthfXB4O2ApLmFwcGVuZCgiZGl2IikuaHRtbChuLmljb25UZXh0KSxwPXBhcnNlSW50KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGQubm9kZSgpLG51bGwpLmdldFByb3BlcnR5VmFsdWUoImZvbnQtc2l6ZSIpLnJlcGxhY2UoL1xEL2csIiIpKT8/MTY7ZC5hdHRyKCJzdHlsZSIsYC13ZWJraXQtbGluZS1jbGFtcDogJHtNYXRoLmZsb29yKChhLTIpL3ApfTtgKX1lbHNlIHMuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJub2RlLWJrZyIpLmF0dHIoImlkIiwibm9kZS0iK24uaWQpLmF0dHIoImQiLGBNMCAke2F9IHYkey1hfSBxMCwtNSA1LC01IGgke2F9IHE1LDAgNSw1IHYke2F9IEgwIFpgKTtpLmF0dHIoImNsYXNzIiwiYXJjaGl0ZWN0dXJlLXNlcnZpY2UiKTtsZXR7d2lkdGg6bCxoZWlnaHQ6dX09aS5fZ3JvdXBzWzBdWzBdLmdldEJCb3goKTtuLndpZHRoPWwsbi5oZWlnaHQ9dSx0LnNldEVsZW1lbnRGb3JJZChuLmlkLGkpfXJldHVybiAwfSwiZHJhd1NlcnZpY2VzIiksUTJlPW8oZnVuY3Rpb24odCxlLHIpe3IuZm9yRWFjaChuPT57bGV0IGk9ZS5hcHBlbmQoImciKSxhPU1pKCJpY29uU2l6ZSIpO2kuYXBwZW5kKCJnIikuYXBwZW5kKCJyZWN0IikuYXR0cigiaWQiLCJub2RlLSIrbi5pZCkuYXR0cigiZmlsbC1vcGFjaXR5IiwiMCIpLmF0dHIoIndpZHRoIixhKS5hdHRyKCJoZWlnaHQiLGEpLGkuYXR0cigiY2xhc3MiLCJhcmNoaXRlY3R1cmUtanVuY3Rpb24iKTtsZXR7d2lkdGg6bCxoZWlnaHQ6dX09aS5fZ3JvdXBzWzBdWzBdLmdldEJCb3goKTtpLndpZHRoPWwsaS5oZWlnaHQ9dSx0LnNldEVsZW1lbnRGb3JJZChuLmlkLGkpfSl9LCJkcmF3SnVuY3Rpb25zIil9KTtmdW5jdGlvbiBIbnQodCxlKXt0LmZvckVhY2gocj0+e2UuYWRkKHtncm91cDoibm9kZXMiLGRhdGE6e3R5cGU6InNlcnZpY2UiLGlkOnIuaWQsaWNvbjpyLmljb24sbGFiZWw6ci50aXRsZSxwYXJlbnQ6ci5pbix3aWR0aDpNaSgiaWNvblNpemUiKSxoZWlnaHQ6TWkoImljb25TaXplIil9LGNsYXNzZXM6Im5vZGUtc2VydmljZSJ9KX0pfWZ1bmN0aW9uIFdudCh0LGUpe3QuZm9yRWFjaChyPT57ZS5hZGQoe2dyb3VwOiJub2RlcyIsZGF0YTp7dHlwZToianVuY3Rpb24iLGlkOnIuaWQscGFyZW50OnIuaW4sd2lkdGg6TWkoImljb25TaXplIiksaGVpZ2h0Ok1pKCJpY29uU2l6ZSIpfSxjbGFzc2VzOiJub2RlLWp1bmN0aW9uIn0pfSl9ZnVuY3Rpb24gcW50KHQsZSl7ZS5ub2RlcygpLm1hcChyPT57bGV0IG49WWYocik7aWYobi50eXBlPT09Imdyb3VwIilyZXR1cm47bi54PXIucG9zaXRpb24oKS54LG4ueT1yLnBvc2l0aW9uKCkueSx0LmdldEVsZW1lbnRCeUlkKG4uaWQpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhuLnh8fDApKyIsIisobi55fHwwKSsiKSIpfSl9ZnVuY3Rpb24gWW50KHQsZSl7dC5mb3JFYWNoKHI9PntlLmFkZCh7Z3JvdXA6Im5vZGVzIixkYXRhOnt0eXBlOiJncm91cCIsaWQ6ci5pZCxpY29uOnIuaWNvbixsYWJlbDpyLnRpdGxlLHBhcmVudDpyLmlufSxjbGFzc2VzOiJub2RlLWdyb3VwIn0pfSl9ZnVuY3Rpb24gWG50KHQsZSl7dC5mb3JFYWNoKHI9PntsZXR7bGhzSWQ6bixyaHNJZDppLGxoc0ludG86YSxsaHNHcm91cDpzLHJoc0ludG86bCxsaHNEaXI6dSxyaHNEaXI6aCxyaHNHcm91cDpmLHRpdGxlOmR9PXIscD1MNChyLmxoc0RpcixyLnJoc0Rpcik/InNlZ21lbnRzIjoic3RyYWlnaHQiLG09e2lkOmAke259LSR7aX1gLGxhYmVsOmQsc291cmNlOm4sc291cmNlRGlyOnUsc291cmNlQXJyb3c6YSxzb3VyY2VHcm91cDpzLHNvdXJjZUVuZHBvaW50OnU9PT0iTCI/IjAgNTAlIjp1PT09IlIiPyIxMDAlIDUwJSI6dT09PSJUIj8iNTAlIDAiOiI1MCUgMTAwJSIsdGFyZ2V0OmksdGFyZ2V0RGlyOmgsdGFyZ2V0QXJyb3c6bCx0YXJnZXRHcm91cDpmLHRhcmdldEVuZHBvaW50Omg9PT0iTCI/IjAgNTAlIjpoPT09IlIiPyIxMDAlIDUwJSI6aD09PSJUIj8iNTAlIDAiOiI1MCUgMTAwJSJ9O2UuYWRkKHtncm91cDoiZWRnZXMiLGRhdGE6bSxjbGFzc2VzOnB9KX0pfWZ1bmN0aW9uIGpudCh0LGUscil7bGV0IG49bygobCx1KT0+T2JqZWN0LmVudHJpZXMobCkucmVkdWNlKChoLFtmLGRdKT0+e2xldCBwPTAsbT1PYmplY3QuZW50cmllcyhkKTtpZihtLmxlbmd0aD09PTEpcmV0dXJuIGhbZl09bVswXVsxXSxoO2ZvcihsZXQgZz0wO2c8bS5sZW5ndGgtMTtnKyspZm9yKGxldCB5PWcrMTt5PG0ubGVuZ3RoO3krKyl7bGV0W3YseF09bVtnXSxbYixUXT1tW3ldO2lmKHJbdl0/LltiXT09PXUpaFtmXT8/PVtdLGhbZl09Wy4uLmhbZl0sLi4ueCwuLi5UXTtlbHNlIGlmKHY9PT0iZGVmYXVsdCJ8fGI9PT0iZGVmYXVsdCIpaFtmXT8/PVtdLGhbZl09Wy4uLmhbZl0sLi4ueCwuLi5UXTtlbHNle2xldCB3PWAke2Z9LSR7cCsrfWA7aFt3XT14O2xldCBFPWAke2Z9LSR7cCsrfWA7aFtFXT1UfX1yZXR1cm4gaH0se30pLCJmbGF0dGVuQWxpZ25tZW50cyIpLGk9ZS5tYXAobD0+e2xldCB1PXt9LGg9e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKGwpLmZvckVhY2goKFtmLFtkLHBdXSk9PntsZXQgbT10LmdldE5vZGUoZik/LmluPz8iZGVmYXVsdCI7dVtwXT8/PXt9LHVbcF1bbV0/Pz1bXSx1W3BdW21dLnB1c2goZiksaFtkXT8/PXt9LGhbZF1bbV0/Pz1bXSxoW2RdW21dLnB1c2goZil9KSx7aG9yaXo6T2JqZWN0LnZhbHVlcyhuKHUsImhvcml6b250YWwiKSkuZmlsdGVyKGY9PmYubGVuZ3RoPjEpLHZlcnQ6T2JqZWN0LnZhbHVlcyhuKGgsInZlcnRpY2FsIikpLmZpbHRlcihmPT5mLmxlbmd0aD4xKX19KSxbYSxzXT1pLnJlZHVjZSgoW2wsdV0se2hvcml6OmgsdmVydDpmfSk9PltbLi4ubCwuLi5oXSxbLi4udSwuLi5mXV0sW1tdLFtdXSk7cmV0dXJue2hvcml6b250YWw6YSx2ZXJ0aWNhbDpzfX1mdW5jdGlvbiBLbnQodCl7bGV0IGU9W10scj1vKGk9PmAke2lbMF19LCR7aVsxXX1gLCJwb3NUb1N0ciIpLG49byhpPT5pLnNwbGl0KCIsIikubWFwKGE9PnBhcnNlSW50KGEpKSwic3RyVG9Qb3MiKTtyZXR1cm4gdC5mb3JFYWNoKGk9PntsZXQgYT1PYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoaSkubWFwKChbaCxmXSk9PltyKGYpLGhdKSkscz1bcihbMCwwXSldLGw9e30sdT17TDpbLTEsMF0sUjpbMSwwXSxUOlswLDFdLEI6WzAsLTFdfTtmb3IoO3MubGVuZ3RoPjA7KXtsZXQgaD1zLnNoaWZ0KCk7aWYoaCl7bFtoXT0xO2xldCBmPWFbaF07aWYoZil7bGV0IGQ9bihoKTtPYmplY3QuZW50cmllcyh1KS5mb3JFYWNoKChbcCxtXSk9PntsZXQgZz1yKFtkWzBdK21bMF0sZFsxXSttWzFdXSkseT1hW2ddO3kmJiFsW2ddJiYocy5wdXNoKGcpLGUucHVzaCh7W3FGW3BdXTp5LFtxRltJMmUocCldXTpmLGdhcDoxLjUqTWkoImljb25TaXplIil9KSl9KX19fX0pLGV9ZnVuY3Rpb24gUW50KHQsZSxyLG4saSx7c3BhdGlhbE1hcHM6YSxncm91cEFsaWdubWVudHM6c30pe3JldHVybiBuZXcgUHJvbWlzZShsPT57bGV0IHU9R2UoImJvZHkiKS5hcHBlbmQoImRpdiIpLmF0dHIoImlkIiwiY3kiKS5hdHRyKCJzdHlsZSIsImRpc3BsYXk6bm9uZSIpLGg9c2woe2NvbnRhaW5lcjpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY3kiKSxzdHlsZTpbe3NlbGVjdG9yOiJlZGdlIixzdHlsZTp7ImN1cnZlLXN0eWxlIjoic3RyYWlnaHQiLGxhYmVsOiJkYXRhKGxhYmVsKSIsInNvdXJjZS1lbmRwb2ludCI6ImRhdGEoc291cmNlRW5kcG9pbnQpIiwidGFyZ2V0LWVuZHBvaW50IjoiZGF0YSh0YXJnZXRFbmRwb2ludCkifX0se3NlbGVjdG9yOiJlZGdlLnNlZ21lbnRzIixzdHlsZTp7ImN1cnZlLXN0eWxlIjoic2VnbWVudHMiLCJzZWdtZW50LXdlaWdodHMiOiIwIiwic2VnbWVudC1kaXN0YW5jZXMiOlsuNV0sImVkZ2UtZGlzdGFuY2VzIjoiZW5kcG9pbnRzIiwic291cmNlLWVuZHBvaW50IjoiZGF0YShzb3VyY2VFbmRwb2ludCkiLCJ0YXJnZXQtZW5kcG9pbnQiOiJkYXRhKHRhcmdldEVuZHBvaW50KSJ9fSx7c2VsZWN0b3I6Im5vZGUiLHN0eWxlOnsiY29tcG91bmQtc2l6aW5nLXdydC1sYWJlbHMiOiJpbmNsdWRlIn19LHtzZWxlY3Rvcjoibm9kZVtsYWJlbF0iLHN0eWxlOnsidGV4dC12YWxpZ24iOiJib3R0b20iLCJ0ZXh0LWhhbGlnbiI6ImNlbnRlciIsImZvbnQtc2l6ZSI6YCR7TWkoImZvbnRTaXplIil9cHhgfX0se3NlbGVjdG9yOiIubm9kZS1zZXJ2aWNlIixzdHlsZTp7bGFiZWw6ImRhdGEobGFiZWwpIix3aWR0aDoiZGF0YSh3aWR0aCkiLGhlaWdodDoiZGF0YShoZWlnaHQpIn19LHtzZWxlY3RvcjoiLm5vZGUtanVuY3Rpb24iLHN0eWxlOnt3aWR0aDoiZGF0YSh3aWR0aCkiLGhlaWdodDoiZGF0YShoZWlnaHQpIn19LHtzZWxlY3RvcjoiLm5vZGUtZ3JvdXAiLHN0eWxlOntwYWRkaW5nOmAke01pKCJwYWRkaW5nIil9cHhgfX1dLGxheW91dDp7bmFtZToiZ3JpZCIsYm91bmRpbmdCb3g6e3gxOjAseDI6MTAwLHkxOjAseTI6MTAwfX19KTt1LnJlbW92ZSgpLFludChyLGgpLEhudCh0LGgpLFdudChlLGgpLFhudChuLGgpO2xldCBmPWpudChpLGEscyksZD1LbnQoYSkscD1oLmxheW91dCh7bmFtZToiZmNvc2UiLHF1YWxpdHk6InByb29mIixzdHlsZUVuYWJsZWQ6ITEsYW5pbWF0ZTohMSxub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6ITEsaWRlYWxFZGdlTGVuZ3RoKG0pe2xldFtnLHldPW0uY29ubmVjdGVkTm9kZXMoKSx7cGFyZW50OnZ9PVlmKGcpLHtwYXJlbnQ6eH09WWYoeSk7cmV0dXJuIHY9PT14PzEuNSpNaSgiaWNvblNpemUiKTouNSpNaSgiaWNvblNpemUiKX0sZWRnZUVsYXN0aWNpdHkobSl7bGV0W2cseV09bS5jb25uZWN0ZWROb2RlcygpLHtwYXJlbnQ6dn09WWYoZykse3BhcmVudDp4fT1ZZih5KTtyZXR1cm4gdj09PXg/LjQ1Oi4wMDF9LGFsaWdubWVudENvbnN0cmFpbnQ6ZixyZWxhdGl2ZVBsYWNlbWVudENvbnN0cmFpbnQ6ZH0pO3Aub25lKCJsYXlvdXRzdG9wIiwoKT0+e2Z1bmN0aW9uIG0oZyx5LHYseCl7bGV0IGIsVCx7eDpTLHk6d309Zyx7eDpFLHk6X309eTtUPSh4LXcrKFMtdikqKHctXykvKFMtRSkpL01hdGguc3FydCgxK01hdGgucG93KCh3LV8pLyhTLUUpLDIpKSxiPU1hdGguc3FydChNYXRoLnBvdyh4LXcsMikrTWF0aC5wb3codi1TLDIpLU1hdGgucG93KFQsMikpO2xldCBDPU1hdGguc3FydChNYXRoLnBvdyhFLVMsMikrTWF0aC5wb3coXy13LDIpKTtiPWIvQztsZXQgRD0oRS1TKSooeC13KS0oXy13KSoodi1TKTtzd2l0Y2goITApe2Nhc2UgRD49MDpEPTE7YnJlYWs7Y2FzZSBEPDA6RD0tMTticmVha31sZXQgTz0oRS1TKSoodi1TKSsoXy13KSooeC13KTtzd2l0Y2goITApe2Nhc2UgTz49MDpPPTE7YnJlYWs7Y2FzZSBPPDA6Tz0tMTticmVha31yZXR1cm4gVD1NYXRoLmFicyhUKSpELGI9YipPLHtkaXN0YW5jZXM6VCx3ZWlnaHRzOmJ9fW8obSwiZ2V0U2VnbWVudFdlaWdodHMiKSxoLnN0YXJ0QmF0Y2goKTtmb3IobGV0IGcgb2YgT2JqZWN0LnZhbHVlcyhoLmVkZ2VzKCkpKWlmKGcuZGF0YT8uKCkpe2xldHt4OnkseTp2fT1nLnNvdXJjZSgpLnBvc2l0aW9uKCkse3gseTpifT1nLnRhcmdldCgpLnBvc2l0aW9uKCk7aWYoeSE9PXgmJnYhPT1iKXtsZXQgVD1nLnNvdXJjZUVuZHBvaW50KCksUz1nLnRhcmdldEVuZHBvaW50KCkse3NvdXJjZURpcjp3fT1DQyhnKSxbRSxfXT1ydSh3KT9bVC54LFMueV06W1MueCxULnldLHt3ZWlnaHRzOkMsZGlzdGFuY2VzOkR9PW0oVCxTLEUsXyk7Zy5zdHlsZSgic2VnbWVudC1kaXN0YW5jZXMiLEQpLGcuc3R5bGUoInNlZ21lbnQtd2VpZ2h0cyIsQyl9fWguZW5kQmF0Y2goKSxwLnJ1bigpfSkscC5ydW4oKSxoLnJlYWR5KG09PntYLmluZm8oIlJlYWR5IixtKSxsKGgpfSl9KX12YXIgSjJlLFpudCxleGUsdHhlPU4oKCk9PnsidXNlIHN0cmljdCI7amwoKTtvRigpO0oyZT1BYShZMmUoKSwxKTtmcigpO3l0KCk7VmwoKTt4aSgpO040KCk7dCQoKTtBQygpO1oyZSgpO1g0KFt7bmFtZTpsMC5wcmVmaXgsaWNvbnM6bDB9XSk7c2wudXNlKEoyZS5kZWZhdWx0KTtvKEhudCwiYWRkU2VydmljZXMiKTtvKFdudCwiYWRkSnVuY3Rpb25zIik7byhxbnQsInBvc2l0aW9uTm9kZXMiKTtvKFludCwiYWRkR3JvdXBzIik7byhYbnQsImFkZEVkZ2VzIik7byhqbnQsImdldEFsaWdubWVudHMiKTtvKEtudCwiZ2V0UmVsYXRpdmVDb25zdHJhaW50cyIpO28oUW50LCJsYXlvdXRBcmNoaXRlY3R1cmUiKTtabnQ9byhhc3luYyh0LGUscixuKT0+e2xldCBpPW4uZGIsYT1pLmdldFNlcnZpY2VzKCkscz1pLmdldEp1bmN0aW9ucygpLGw9aS5nZXRHcm91cHMoKSx1PWkuZ2V0RWRnZXMoKSxoPWkuZ2V0RGF0YVN0cnVjdHVyZXMoKSxmPUxpKGUpLGQ9Zi5hcHBlbmQoImciKTtkLmF0dHIoImNsYXNzIiwiYXJjaGl0ZWN0dXJlLWVkZ2VzIik7bGV0IHA9Zi5hcHBlbmQoImciKTtwLmF0dHIoImNsYXNzIiwiYXJjaGl0ZWN0dXJlLXNlcnZpY2VzIik7bGV0IG09Zi5hcHBlbmQoImciKTttLmF0dHIoImNsYXNzIiwiYXJjaGl0ZWN0dXJlLWdyb3VwcyIpLGF3YWl0IEsyZShpLHAsYSksUTJlKGkscCxzKTtsZXQgZz1hd2FpdCBRbnQoYSxzLGwsdSxpLGgpO2F3YWl0IFgyZShkLGcpLGF3YWl0IGoyZShtLGcpLHFudChpLGcpLExvKHZvaWQgMCxmLE1pKCJwYWRkaW5nIiksTWkoInVzZU1heFdpZHRoIikpfSwiZHJhdyIpLGV4ZT17ZHJhdzpabnR9fSk7dmFyIHJ4ZT17fTt1cihyeGUse2RpYWdyYW06KCk9PkpudH0pO3ZhciBKbnQsbnhlPU4oKCk9PnsidXNlIHN0cmljdCI7SDJlKCk7TjQoKTtxMmUoKTt0eGUoKTtKbnQ9e3BhcnNlcjpVMmUsZGI6bzAscmVuZGVyZXI6ZXhlLHN0eWxlczpXMmV9fSk7dmFyIGJ5LHIkPU4oKCk9PnsidXNlIHN0cmljdCI7X2EoKTttaSgpO2VyKCk7enQoKTtjaSgpO2J5PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5ub2Rlcz1bXTt0aGlzLmxldmVscz1uZXcgTWFwO3RoaXMub3V0ZXJOb2Rlcz1bXTt0aGlzLmNsYXNzZXM9bmV3IE1hcDt0aGlzLnNldEFjY1RpdGxlPUFyO3RoaXMuZ2V0QWNjVGl0bGU9RHI7dGhpcy5zZXREaWFncmFtVGl0bGU9T3I7dGhpcy5nZXREaWFncmFtVGl0bGU9TnI7dGhpcy5nZXRBY2NEZXNjcmlwdGlvbj1Scjt0aGlzLnNldEFjY0Rlc2NyaXB0aW9uPUxyfXN0YXRpY3tvKHRoaXMsIlRyZWVNYXBEQiIpfWdldE5vZGVzKCl7cmV0dXJuIHRoaXMubm9kZXN9Z2V0Q29uZmlnKCl7bGV0IGU9b3Iscj10cigpO3JldHVybiAkbih7Li4uZS50cmVlbWFwLC4uLnIudHJlZW1hcD8/e319KX1hZGROb2RlKGUscil7dGhpcy5ub2Rlcy5wdXNoKGUpLHRoaXMubGV2ZWxzLnNldChlLHIpLHI9PT0wJiYodGhpcy5vdXRlck5vZGVzLnB1c2goZSksdGhpcy5yb290Pz89ZSl9Z2V0Um9vdCgpe3JldHVybntuYW1lOiIiLGNoaWxkcmVuOnRoaXMub3V0ZXJOb2Rlc319YWRkQ2xhc3MoZSxyKXtsZXQgbj10aGlzLmNsYXNzZXMuZ2V0KGUpPz97aWQ6ZSxzdHlsZXM6W10sdGV4dFN0eWxlczpbXX0saT1yLnJlcGxhY2UoL1xcLC9nLCJceEE3XHhBN1x4QTciKS5yZXBsYWNlKC8sL2csIjsiKS5yZXBsYWNlKC/Cp8KnwqcvZywiLCIpLnNwbGl0KCI7Iik7aSYmaS5mb3JFYWNoKGE9PntTMihhKSYmKG4/LnRleHRTdHlsZXM/bi50ZXh0U3R5bGVzLnB1c2goYSk6bi50ZXh0U3R5bGVzPVthXSksbj8uc3R5bGVzP24uc3R5bGVzLnB1c2goYSk6bi5zdHlsZXM9W2FdfSksdGhpcy5jbGFzc2VzLnNldChlLG4pfWdldENsYXNzZXMoKXtyZXR1cm4gdGhpcy5jbGFzc2VzfWdldFN0eWxlc0ZvckNsYXNzKGUpe3JldHVybiB0aGlzLmNsYXNzZXMuZ2V0KGUpPy5zdHlsZXM/P1tdfWNsZWFyKCl7a3IoKSx0aGlzLm5vZGVzPVtdLHRoaXMubGV2ZWxzPW5ldyBNYXAsdGhpcy5vdXRlck5vZGVzPVtdLHRoaXMuY2xhc3Nlcz1uZXcgTWFwLHRoaXMucm9vdD12b2lkIDB9fX0pO2Z1bmN0aW9uIHN4ZSh0KXtpZighdC5sZW5ndGgpcmV0dXJuW107bGV0IGU9W10scj1bXTtyZXR1cm4gdC5mb3JFYWNoKG49PntsZXQgaT17bmFtZTpuLm5hbWUsY2hpbGRyZW46bi50eXBlPT09IkxlYWYiP3ZvaWQgMDpbXX07Zm9yKGkuY2xhc3NTZWxlY3Rvcj1uPy5jbGFzc1NlbGVjdG9yLG4/LmNzc0NvbXBpbGVkU3R5bGVzJiYoaS5jc3NDb21waWxlZFN0eWxlcz1bbi5jc3NDb21waWxlZFN0eWxlc10pLG4udHlwZT09PSJMZWFmIiYmbi52YWx1ZSE9PXZvaWQgMCYmKGkudmFsdWU9bi52YWx1ZSk7ci5sZW5ndGg+MCYmcltyLmxlbmd0aC0xXS5sZXZlbD49bi5sZXZlbDspci5wb3AoKTtpZihyLmxlbmd0aD09PTApZS5wdXNoKGkpO2Vsc2V7bGV0IGE9cltyLmxlbmd0aC0xXS5ub2RlO2EuY2hpbGRyZW4/YS5jaGlsZHJlbi5wdXNoKGkpOmEuY2hpbGRyZW49W2ldfW4udHlwZSE9PSJMZWFmIiYmci5wdXNoKHtub2RlOmksbGV2ZWw6bi5sZXZlbH0pfSksZX12YXIgb3hlPU4oKCk9PnsidXNlIHN0cmljdCI7byhzeGUsImJ1aWxkSGllcmFyY2h5Iil9KTt2YXIgbml0LGlpdCxuJCxseGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtiZigpO3l0KCk7TXAoKTtveGUoKTtyJCgpO25pdD1vKCh0LGUpPT57Sm8odCxlKTtsZXQgcj1bXTtmb3IobGV0IGEgb2YgdC5UcmVlbWFwUm93cz8/W10pYS4kdHlwZT09PSJDbGFzc0RlZlN0YXRlbWVudCImJmUuYWRkQ2xhc3MoYS5jbGFzc05hbWU/PyIiLGEuc3R5bGVUZXh0Pz8iIik7Zm9yKGxldCBhIG9mIHQuVHJlZW1hcFJvd3M/P1tdKXtsZXQgcz1hLml0ZW07aWYoIXMpY29udGludWU7bGV0IGw9YS5pbmRlbnQ/cGFyc2VJbnQoYS5pbmRlbnQpOjAsdT1paXQocyksaD1zLmNsYXNzU2VsZWN0b3I/ZS5nZXRTdHlsZXNGb3JDbGFzcyhzLmNsYXNzU2VsZWN0b3IpOltdLGY9aC5sZW5ndGg+MD9oLmpvaW4oIjsiKTp2b2lkIDAsZD17bGV2ZWw6bCxuYW1lOnUsdHlwZTpzLiR0eXBlLHZhbHVlOnMudmFsdWUsY2xhc3NTZWxlY3RvcjpzLmNsYXNzU2VsZWN0b3IsY3NzQ29tcGlsZWRTdHlsZXM6Zn07ci5wdXNoKGQpfWxldCBuPXN4ZShyKSxpPW8oKGEscyk9Pntmb3IobGV0IGwgb2YgYSllLmFkZE5vZGUobCxzKSxsLmNoaWxkcmVuJiZsLmNoaWxkcmVuLmxlbmd0aD4wJiZpKGwuY2hpbGRyZW4scysxKX0sImFkZE5vZGVzUmVjdXJzaXZlbHkiKTtpKG4sMCl9LCJwb3B1bGF0ZSIpLGlpdD1vKHQ9PnQubmFtZT9TdHJpbmcodC5uYW1lKToiIiwiZ2V0SXRlbU5hbWUiKSxuJD17cGFyc2VyOnt5eTp2b2lkIDB9LHBhcnNlOm8oYXN5bmMgdD0+e3RyeXtsZXQgcj1hd2FpdCB2cygidHJlZW1hcCIsdCk7WC5kZWJ1ZygiVHJlZW1hcCBBU1Q6IixyKTtsZXQgbj1uJC5wYXJzZXI/Lnl5O2lmKCEobiBpbnN0YW5jZW9mIGJ5KSl0aHJvdyBuZXcgRXJyb3IoInBhcnNlci5wYXJzZXI/Lnl5IHdhcyBub3QgYSBUcmVlbWFwREIuIFRoaXMgaXMgZHVlIHRvIGEgYnVnIHdpdGhpbiBNZXJtYWlkLCBwbGVhc2UgcmVwb3J0IHRoaXMgaXNzdWUgYXQgaHR0cHM6Ly9naXRodWIuY29tL21lcm1haWQtanMvbWVybWFpZC9pc3N1ZXMuIik7bml0KHIsbil9Y2F0Y2goZSl7dGhyb3cgWC5lcnJvcigiRXJyb3IgcGFyc2luZyB0cmVlbWFwOiIsZSksZX19LCJwYXJzZSIpfX0pO3ZhciBhaXQsVHksUDQsc2l0LG9pdCxjeGUsdXhlPU4oKCk9PnsidXNlIHN0cmljdCI7VmwoKTtucCgpO3hpKCk7ZnIoKTt6dCgpO21pKCk7eXQoKTthaXQ9MTAsVHk9MTAsUDQ9MjUsc2l0PW8oKHQsZSxyLG4pPT57bGV0IGk9bi5kYixhPWkuZ2V0Q29uZmlnKCkscz1hLnBhZGRpbmc/P2FpdCxsPWkuZ2V0RGlhZ3JhbVRpdGxlKCksdT1pLmdldFJvb3QoKSx7dGhlbWVWYXJpYWJsZXM6aH09dHIoKTtpZighdSlyZXR1cm47bGV0IGY9bD8zMDowLGQ9TGkoZSkscD1hLm5vZGVXaWR0aD9hLm5vZGVXaWR0aCpUeTo5NjAsbT1hLm5vZGVIZWlnaHQ/YS5ub2RlSGVpZ2h0KlR5OjUwMCxnPXAseT1tK2Y7ZC5hdHRyKCJ2aWV3Qm94IixgMCAwICR7Z30gJHt5fWApLGZuKGQseSxnLGEudXNlTWF4V2lkdGgpO2xldCB2O3RyeXtsZXQgQT1hLnZhbHVlRm9ybWF0fHwiLCI7aWYoQT09PSIkMCwwIil2PW8oST0+IiQiK2NjKCIsIikoSSksInZhbHVlRm9ybWF0Iik7ZWxzZSBpZihBLnN0YXJ0c1dpdGgoIiQiKSYmQS5pbmNsdWRlcygiLCIpKXtsZXQgST0vXC5cZCsvLmV4ZWMoQSksTT1JP0lbMF06IiI7dj1vKFA9PiIkIitjYygiLCIrTSkoUCksInZhbHVlRm9ybWF0Iil9ZWxzZSBpZihBLnN0YXJ0c1dpdGgoIiQiKSl7bGV0IEk9QS5zdWJzdHJpbmcoMSk7dj1vKE09PiIkIitjYyhJfHwiIikoTSksInZhbHVlRm9ybWF0Iil9ZWxzZSB2PWNjKEEpfWNhdGNoKEEpe1guZXJyb3IoIkVycm9yIGNyZWF0aW5nIGZvcm1hdCBmdW5jdGlvbjoiLEEpLHY9Y2MoIiwiKX1sZXQgeD1KcygpLnJhbmdlKFsidHJhbnNwYXJlbnQiLGguY1NjYWxlMCxoLmNTY2FsZTEsaC5jU2NhbGUyLGguY1NjYWxlMyxoLmNTY2FsZTQsaC5jU2NhbGU1LGguY1NjYWxlNixoLmNTY2FsZTcsaC5jU2NhbGU4LGguY1NjYWxlOSxoLmNTY2FsZTEwLGguY1NjYWxlMTFdKSxiPUpzKCkucmFuZ2UoWyJ0cmFuc3BhcmVudCIsaC5jU2NhbGVQZWVyMCxoLmNTY2FsZVBlZXIxLGguY1NjYWxlUGVlcjIsaC5jU2NhbGVQZWVyMyxoLmNTY2FsZVBlZXI0LGguY1NjYWxlUGVlcjUsaC5jU2NhbGVQZWVyNixoLmNTY2FsZVBlZXI3LGguY1NjYWxlUGVlcjgsaC5jU2NhbGVQZWVyOSxoLmNTY2FsZVBlZXIxMCxoLmNTY2FsZVBlZXIxMV0pLFQ9SnMoKS5yYW5nZShbaC5jU2NhbGVMYWJlbDAsaC5jU2NhbGVMYWJlbDEsaC5jU2NhbGVMYWJlbDIsaC5jU2NhbGVMYWJlbDMsaC5jU2NhbGVMYWJlbDQsaC5jU2NhbGVMYWJlbDUsaC5jU2NhbGVMYWJlbDYsaC5jU2NhbGVMYWJlbDcsaC5jU2NhbGVMYWJlbDgsaC5jU2NhbGVMYWJlbDksaC5jU2NhbGVMYWJlbDEwLGguY1NjYWxlTGFiZWwxMV0pO2wmJmQuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsZy8yKS5hdHRyKCJ5IixmLzIpLmF0dHIoImNsYXNzIiwidHJlZW1hcFRpdGxlIikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLnRleHQobCk7bGV0IFM9ZC5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoMCwgJHtmfSlgKS5hdHRyKCJjbGFzcyIsInRyZWVtYXBDb250YWluZXIiKSx3PXowKHUpLnN1bShBPT5BLnZhbHVlPz8wKS5zb3J0KChBLEkpPT4oSS52YWx1ZT8/MCktKEEudmFsdWU/PzApKSxfPUQ1KCkuc2l6ZShbcCxtXSkucGFkZGluZ1RvcChBPT5BLmNoaWxkcmVuJiZBLmNoaWxkcmVuLmxlbmd0aD4wP1A0K1R5OjApLnBhZGRpbmdJbm5lcihzKS5wYWRkaW5nTGVmdChBPT5BLmNoaWxkcmVuJiZBLmNoaWxkcmVuLmxlbmd0aD4wP1R5OjApLnBhZGRpbmdSaWdodChBPT5BLmNoaWxkcmVuJiZBLmNoaWxkcmVuLmxlbmd0aD4wP1R5OjApLnBhZGRpbmdCb3R0b20oQT0+QS5jaGlsZHJlbiYmQS5jaGlsZHJlbi5sZW5ndGg+MD9UeTowKS5yb3VuZCghMCkodyksQz1fLmRlc2NlbmRhbnRzKCkuZmlsdGVyKEE9PkEuY2hpbGRyZW4mJkEuY2hpbGRyZW4ubGVuZ3RoPjApLEQ9Uy5zZWxlY3RBbGwoIi50cmVlbWFwU2VjdGlvbiIpLmRhdGEoQykuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRyZWVtYXBTZWN0aW9uIikuYXR0cigidHJhbnNmb3JtIixBPT5gdHJhbnNsYXRlKCR7QS54MH0sJHtBLnkwfSlgKTtELmFwcGVuZCgicmVjdCIpLmF0dHIoIndpZHRoIixBPT5BLngxLUEueDApLmF0dHIoImhlaWdodCIsUDQpLmF0dHIoImNsYXNzIiwidHJlZW1hcFNlY3Rpb25IZWFkZXIiKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImZpbGwtb3BhY2l0eSIsLjYpLmF0dHIoInN0cm9rZS13aWR0aCIsLjYpLmF0dHIoInN0eWxlIixBPT5BLmRlcHRoPT09MD8iZGlzcGxheTogbm9uZTsiOiIiKSxELmFwcGVuZCgiY2xpcFBhdGgiKS5hdHRyKCJpZCIsKEEsSSk9PmBjbGlwLXNlY3Rpb24tJHtlfS0ke0l9YCkuYXBwZW5kKCJyZWN0IikuYXR0cigid2lkdGgiLEE9Pk1hdGgubWF4KDAsQS54MS1BLngwLTEyKSkuYXR0cigiaGVpZ2h0IixQNCksRC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ3aWR0aCIsQT0+QS54MS1BLngwKS5hdHRyKCJoZWlnaHQiLEE9PkEueTEtQS55MCkuYXR0cigiY2xhc3MiLChBLEkpPT5gdHJlZW1hcFNlY3Rpb24gc2VjdGlvbiR7SX1gKS5hdHRyKCJmaWxsIixBPT54KEEuZGF0YS5uYW1lKSkuYXR0cigiZmlsbC1vcGFjaXR5IiwuNikuYXR0cigic3Ryb2tlIixBPT5iKEEuZGF0YS5uYW1lKSkuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsLjQpLmF0dHIoInN0eWxlIixBPT57aWYoQS5kZXB0aD09PTApcmV0dXJuImRpc3BsYXk6IG5vbmU7IjtsZXQgST1ZZSh7Y3NzQ29tcGlsZWRTdHlsZXM6QS5kYXRhLmNzc0NvbXBpbGVkU3R5bGVzfSk7cmV0dXJuIEkubm9kZVN0eWxlcysiOyIrSS5ib3JkZXJTdHlsZXMuam9pbigiOyIpfSksRC5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsInRyZWVtYXBTZWN0aW9uTGFiZWwiKS5hdHRyKCJ4Iiw2KS5hdHRyKCJ5IixQNC8yKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLnRleHQoQT0+QS5kZXB0aD09PTA/IiI6QS5kYXRhLm5hbWUpLmF0dHIoImZvbnQtd2VpZ2h0IiwiYm9sZCIpLmF0dHIoInN0eWxlIixBPT57aWYoQS5kZXB0aD09PTApcmV0dXJuImRpc3BsYXk6IG5vbmU7IjtsZXQgST0iZG9taW5hbnQtYmFzZWxpbmU6IG1pZGRsZTsgZm9udC1zaXplOiAxMnB4OyBmaWxsOiIrVChBLmRhdGEubmFtZSkrIjsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgb3ZlcmZsb3c6IGhpZGRlbjsgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7IixNPVllKHtjc3NDb21waWxlZFN0eWxlczpBLmRhdGEuY3NzQ29tcGlsZWRTdHlsZXN9KTtyZXR1cm4gSStNLmxhYmVsU3R5bGVzLnJlcGxhY2UoImNvbG9yOiIsImZpbGw6Iil9KS5lYWNoKGZ1bmN0aW9uKEEpe2lmKEEuZGVwdGg9PT0wKXJldHVybjtsZXQgST1HZSh0aGlzKSxNPUEuZGF0YS5uYW1lO0kudGV4dChNKTtsZXQgUD1BLngxLUEueDAsQj02LEY7YS5zaG93VmFsdWVzIT09ITEmJkEudmFsdWU/Rj1QLTEwLTMwLTEwLUI6Rj1QLUItNjtsZXQgJD1NYXRoLm1heCgxNSxGKSxVPUkubm9kZSgpO2lmKFUuZ2V0Q29tcHV0ZWRUZXh0TGVuZ3RoKCk+JCl7bGV0IGVlPSIuLi4iLFk9TTtmb3IoO1kubGVuZ3RoPjA7KXtpZihZPU0uc3Vic3RyaW5nKDAsWS5sZW5ndGgtMSksWS5sZW5ndGg9PT0wKXtJLnRleHQoZWUpLFUuZ2V0Q29tcHV0ZWRUZXh0TGVuZ3RoKCk+JCYmSS50ZXh0KCIiKTticmVha31pZihJLnRleHQoWStlZSksVS5nZXRDb21wdXRlZFRleHRMZW5ndGgoKTw9JClicmVha319fSksYS5zaG93VmFsdWVzIT09ITEmJkQuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJ0cmVlbWFwU2VjdGlvblZhbHVlIikuYXR0cigieCIsQT0+QS54MS1BLngwLTEwKS5hdHRyKCJ5IixQNC8yKS5hdHRyKCJ0ZXh0LWFuY2hvciIsImVuZCIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikudGV4dChBPT5BLnZhbHVlP3YoQS52YWx1ZSk6IiIpLmF0dHIoImZvbnQtc3R5bGUiLCJpdGFsaWMiKS5hdHRyKCJzdHlsZSIsQT0+e2lmKEEuZGVwdGg9PT0wKXJldHVybiJkaXNwbGF5OiBub25lOyI7bGV0IEk9InRleHQtYW5jaG9yOiBlbmQ7IGRvbWluYW50LWJhc2VsaW5lOiBtaWRkbGU7IGZvbnQtc2l6ZTogMTBweDsgZmlsbDoiK1QoQS5kYXRhLm5hbWUpKyI7IHdoaXRlLXNwYWNlOiBub3dyYXA7IG92ZXJmbG93OiBoaWRkZW47IHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOyIsTT1ZZSh7Y3NzQ29tcGlsZWRTdHlsZXM6QS5kYXRhLmNzc0NvbXBpbGVkU3R5bGVzfSk7cmV0dXJuIEkrTS5sYWJlbFN0eWxlcy5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpfSk7bGV0IE89Xy5sZWF2ZXMoKSxSPVMuc2VsZWN0QWxsKCIudHJlZW1hcExlYWZHcm91cCIpLmRhdGEoTykuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsKEEsSSk9PmB0cmVlbWFwTm9kZSB0cmVlbWFwTGVhZkdyb3VwIGxlYWYke0l9JHtBLmRhdGEuY2xhc3NTZWxlY3Rvcj9gICR7QS5kYXRhLmNsYXNzU2VsZWN0b3J9YDoiIn14YCkuYXR0cigidHJhbnNmb3JtIixBPT5gdHJhbnNsYXRlKCR7QS54MH0sJHtBLnkwfSlgKTtSLmFwcGVuZCgicmVjdCIpLmF0dHIoIndpZHRoIixBPT5BLngxLUEueDApLmF0dHIoImhlaWdodCIsQT0+QS55MS1BLnkwKS5hdHRyKCJjbGFzcyIsInRyZWVtYXBMZWFmIikuYXR0cigiZmlsbCIsQT0+QS5wYXJlbnQ/eChBLnBhcmVudC5kYXRhLm5hbWUpOngoQS5kYXRhLm5hbWUpKS5hdHRyKCJzdHlsZSIsQT0+WWUoe2Nzc0NvbXBpbGVkU3R5bGVzOkEuZGF0YS5jc3NDb21waWxlZFN0eWxlc30pLm5vZGVTdHlsZXMpLmF0dHIoImZpbGwtb3BhY2l0eSIsLjMpLmF0dHIoInN0cm9rZSIsQT0+QS5wYXJlbnQ/eChBLnBhcmVudC5kYXRhLm5hbWUpOngoQS5kYXRhLm5hbWUpKS5hdHRyKCJzdHJva2Utd2lkdGgiLDMpLFIuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIiwoQSxJKT0+YGNsaXAtJHtlfS0ke0l9YCkuYXBwZW5kKCJyZWN0IikuYXR0cigid2lkdGgiLEE9Pk1hdGgubWF4KDAsQS54MS1BLngwLTQpKS5hdHRyKCJoZWlnaHQiLEE9Pk1hdGgubWF4KDAsQS55MS1BLnkwLTQpKSxSLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwidHJlZW1hcExhYmVsIikuYXR0cigieCIsQT0+KEEueDEtQS54MCkvMikuYXR0cigieSIsQT0+KEEueTEtQS55MCkvMikuYXR0cigic3R5bGUiLEE9PntsZXQgST0idGV4dC1hbmNob3I6IG1pZGRsZTsgZG9taW5hbnQtYmFzZWxpbmU6IG1pZGRsZTsgZm9udC1zaXplOiAzOHB4O2ZpbGw6IitUKEEuZGF0YS5uYW1lKSsiOyIsTT1ZZSh7Y3NzQ29tcGlsZWRTdHlsZXM6QS5kYXRhLmNzc0NvbXBpbGVkU3R5bGVzfSk7cmV0dXJuIEkrTS5sYWJlbFN0eWxlcy5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpfSkuYXR0cigiY2xpcC1wYXRoIiwoQSxJKT0+YHVybCgjY2xpcC0ke2V9LSR7SX0pYCkudGV4dChBPT5BLmRhdGEubmFtZSkuZWFjaChmdW5jdGlvbihBKXtsZXQgST1HZSh0aGlzKSxNPUEueDEtQS54MCxQPUEueTEtQS55MCxCPUkubm9kZSgpLEY9NCx6PU0tMipGLCQ9UC0yKkY7aWYoejwxMHx8JDwxMCl7SS5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKTtyZXR1cm59bGV0IFU9cGFyc2VJbnQoSS5zdHlsZSgiZm9udC1zaXplIiksMTApLEs9OCxlZT0yOCxZPS42LGNlPTYsWj0yO2Zvcig7Qi5nZXRDb21wdXRlZFRleHRMZW5ndGgoKT56JiZVPks7KVUtLSxJLnN0eWxlKCJmb250LXNpemUiLGAke1V9cHhgKTtsZXQgdWU9TWF0aC5tYXgoY2UsTWF0aC5taW4oZWUsTWF0aC5yb3VuZChVKlkpKSksUT1VK1ordWU7Zm9yKDtRPiQmJlU+SyYmKFUtLSx1ZT1NYXRoLm1heChjZSxNYXRoLm1pbihlZSxNYXRoLnJvdW5kKFUqWSkpKSwhKHVlPGNlJiZVPT09SykpOylJLnN0eWxlKCJmb250LXNpemUiLGAke1V9cHhgKSxRPVUrWit1ZSx1ZTw9Y2UmJlE+JDtJLnN0eWxlKCJmb250LXNpemUiLGAke1V9cHhgKSwoQi5nZXRDb21wdXRlZFRleHRMZW5ndGgoKT56fHxVPEt8fCQ8VSkmJkkuc3R5bGUoImRpc3BsYXkiLCJub25lIil9KSxhLnNob3dWYWx1ZXMhPT0hMSYmUi5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsInRyZWVtYXBWYWx1ZSIpLmF0dHIoIngiLEk9PihJLngxLUkueDApLzIpLmF0dHIoInkiLGZ1bmN0aW9uKEkpe3JldHVybihJLnkxLUkueTApLzJ9KS5hdHRyKCJzdHlsZSIsST0+e2xldCBNPSJ0ZXh0LWFuY2hvcjogbWlkZGxlOyBkb21pbmFudC1iYXNlbGluZTogaGFuZ2luZzsgZm9udC1zaXplOiAyOHB4O2ZpbGw6IitUKEkuZGF0YS5uYW1lKSsiOyIsUD1ZZSh7Y3NzQ29tcGlsZWRTdHlsZXM6SS5kYXRhLmNzc0NvbXBpbGVkU3R5bGVzfSk7cmV0dXJuIE0rUC5sYWJlbFN0eWxlcy5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpfSkuYXR0cigiY2xpcC1wYXRoIiwoSSxNKT0+YHVybCgjY2xpcC0ke2V9LSR7TX0pYCkudGV4dChJPT5JLnZhbHVlP3YoSS52YWx1ZSk6IiIpLmVhY2goZnVuY3Rpb24oSSl7bGV0IE09R2UodGhpcyksUD10aGlzLnBhcmVudE5vZGU7aWYoIVApe00uc3R5bGUoImRpc3BsYXkiLCJub25lIik7cmV0dXJufWxldCBCPUdlKFApLnNlbGVjdCgiLnRyZWVtYXBMYWJlbCIpO2lmKEIuZW1wdHkoKXx8Qi5zdHlsZSgiZGlzcGxheSIpPT09Im5vbmUiKXtNLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpO3JldHVybn1sZXQgRj1wYXJzZUZsb2F0KEIuc3R5bGUoImZvbnQtc2l6ZSIpKSx6PTI4LCQ9LjYsVT02LEs9MixlZT1NYXRoLm1heChVLE1hdGgubWluKHosTWF0aC5yb3VuZChGKiQpKSk7TS5zdHlsZSgiZm9udC1zaXplIixgJHtlZX1weGApO2xldCBjZT0oSS55MS1JLnkwKS8yK0YvMitLO00uYXR0cigieSIsY2UpO2xldCBaPUkueDEtSS54MCxqPUkueTEtSS55MC00LG5lPVotMio0O00ubm9kZSgpLmdldENvbXB1dGVkVGV4dExlbmd0aCgpPm5lfHxjZStlZT5qfHxlZTxVP00uc3R5bGUoImRpc3BsYXkiLCJub25lIik6TS5zdHlsZSgiZGlzcGxheSIsbnVsbCl9KTtsZXQgTD1hLmRpYWdyYW1QYWRkaW5nPz84O1lvKGQsTCwiZmxvd2NoYXJ0IixhPy51c2VNYXhXaWR0aHx8ITEpfSwiZHJhdyIpLG9pdD1vKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZGIuZ2V0Q2xhc3NlcygpfSwiZ2V0Q2xhc3NlcyIpLGN4ZT17ZHJhdzpzaXQsZ2V0Q2xhc3NlczpvaXR9fSk7dmFyIGxpdCxjaXQsaHhlLGZ4ZT1OKCgpPT57InVzZSBzdHJpY3QiO2VyKCk7bGl0PXtzZWN0aW9uU3Ryb2tlQ29sb3I6ImJsYWNrIixzZWN0aW9uU3Ryb2tlV2lkdGg6IjEiLHNlY3Rpb25GaWxsQ29sb3I6IiNlZmVmZWYiLGxlYWZTdHJva2VDb2xvcjoiYmxhY2siLGxlYWZTdHJva2VXaWR0aDoiMSIsbGVhZkZpbGxDb2xvcjoiI2VmZWZlZiIsbGFiZWxDb2xvcjoiYmxhY2siLGxhYmVsRm9udFNpemU6IjEycHgiLHZhbHVlRm9udFNpemU6IjEwcHgiLHZhbHVlQ29sb3I6ImJsYWNrIix0aXRsZUNvbG9yOiJibGFjayIsdGl0bGVGb250U2l6ZToiMTRweCJ9LGNpdD1vKCh7dHJlZW1hcDp0fT17fSk9PntsZXQgZT0kbihsaXQsdCk7cmV0dXJuYAogIC50cmVlbWFwTm9kZS5zZWN0aW9uIHsKICAgIHN0cm9rZTogJHtlLnNlY3Rpb25TdHJva2VDb2xvcn07CiAgICBzdHJva2Utd2lkdGg6ICR7ZS5zZWN0aW9uU3Ryb2tlV2lkdGh9OwogICAgZmlsbDogJHtlLnNlY3Rpb25GaWxsQ29sb3J9OwogIH0KICAudHJlZW1hcE5vZGUubGVhZiB7CiAgICBzdHJva2U6ICR7ZS5sZWFmU3Ryb2tlQ29sb3J9OwogICAgc3Ryb2tlLXdpZHRoOiAke2UubGVhZlN0cm9rZVdpZHRofTsKICAgIGZpbGw6ICR7ZS5sZWFmRmlsbENvbG9yfTsKICB9CiAgLnRyZWVtYXBMYWJlbCB7CiAgICBmaWxsOiAke2UubGFiZWxDb2xvcn07CiAgICBmb250LXNpemU6ICR7ZS5sYWJlbEZvbnRTaXplfTsKICB9CiAgLnRyZWVtYXBWYWx1ZSB7CiAgICBmaWxsOiAke2UudmFsdWVDb2xvcn07CiAgICBmb250LXNpemU6ICR7ZS52YWx1ZUZvbnRTaXplfTsKICB9CiAgLnRyZWVtYXBUaXRsZSB7CiAgICBmaWxsOiAke2UudGl0bGVDb2xvcn07CiAgICBmb250LXNpemU6ICR7ZS50aXRsZUZvbnRTaXplfTsKICB9CiAgYH0sImdldFN0eWxlcyIpLGh4ZT1jaXR9KTt2YXIgZHhlPXt9O3VyKGR4ZSx7ZGlhZ3JhbTooKT0+dWl0fSk7dmFyIHVpdCxweGU9TigoKT0+eyJ1c2Ugc3RyaWN0IjtyJCgpO2x4ZSgpO3V4ZSgpO2Z4ZSgpO3VpdD17cGFyc2VyOm4kLGdldCBkYigpe3JldHVybiBuZXcgYnl9LHJlbmRlcmVyOmN4ZSxzdHlsZXM6aHhlfX0pO3ZhciBLaXQ9e307dXIoS2l0LHtkZWZhdWx0OigpPT5qaXR9KTtqbCgpO3I3KCk7cmQoKTt2YXIgY0s9ImM0IixsQWU9byh0PT4vXlxzKkM0Q29udGV4dHxDNENvbnRhaW5lcnxDNENvbXBvbmVudHxDNER5bmFtaWN8QzREZXBsb3ltZW50Ly50ZXN0KHQpLCJkZXRlY3RvciIpLGNBZT1vKGFzeW5jKCk9PntsZXR7ZGlhZ3JhbTp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4obEsoKSxvSykpO3JldHVybntpZDpjSyxkaWFncmFtOnR9fSwibG9hZGVyIiksdUFlPXtpZDpjSyxkZXRlY3RvcjpsQWUsbG9hZGVyOmNBZX0sdUs9dUFlO3ZhciB1c2U9ImZsb3djaGFydCIscVBlPW8oKHQsZSk9PmU/LmZsb3djaGFydD8uZGVmYXVsdFJlbmRlcmVyPT09ImRhZ3JlLXdyYXBwZXIifHxlPy5mbG93Y2hhcnQ/LmRlZmF1bHRSZW5kZXJlcj09PSJlbGsiPyExOi9eXHMqZ3JhcGgvLnRlc3QodCksImRldGVjdG9yIiksWVBlPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihiaygpLHhrKSk7cmV0dXJue2lkOnVzZSxkaWFncmFtOnR9fSwibG9hZGVyIiksWFBlPXtpZDp1c2UsZGV0ZWN0b3I6cVBlLGxvYWRlcjpZUGV9LGhzZT1YUGU7dmFyIGZzZT0iZmxvd2NoYXJ0LXYyIixqUGU9bygodCxlKT0+ZT8uZmxvd2NoYXJ0Py5kZWZhdWx0UmVuZGVyZXI9PT0iZGFncmUtZDMiPyExOihlPy5mbG93Y2hhcnQ/LmRlZmF1bHRSZW5kZXJlcj09PSJlbGsiJiYoZS5sYXlvdXQ9ImVsayIpLC9eXHMqZ3JhcGgvLnRlc3QodCkmJmU/LmZsb3djaGFydD8uZGVmYXVsdFJlbmRlcmVyPT09ImRhZ3JlLXdyYXBwZXIiPyEwOi9eXHMqZmxvd2NoYXJ0Ly50ZXN0KHQpKSwiZGV0ZWN0b3IiKSxLUGU9byhhc3luYygpPT57bGV0e2RpYWdyYW06dH09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KGJrKCkseGspKTtyZXR1cm57aWQ6ZnNlLGRpYWdyYW06dH19LCJsb2FkZXIiKSxRUGU9e2lkOmZzZSxkZXRlY3RvcjpqUGUsbG9hZGVyOktQZX0sZHNlPVFQZTt2YXIgd3NlPSJlciIsckJlPW8odD0+L15ccyplckRpYWdyYW0vLnRlc3QodCksImRldGVjdG9yIiksbkJlPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihUc2UoKSxic2UpKTtyZXR1cm57aWQ6d3NlLGRpYWdyYW06dH19LCJsb2FkZXIiKSxpQmU9e2lkOndzZSxkZXRlY3RvcjpyQmUsbG9hZGVyOm5CZX0sa3NlPWlCZTt2YXIgTGhlPSJnaXRHcmFwaCIsSUdlPW8odD0+L15ccypnaXRHcmFwaC8udGVzdCh0KSwiZGV0ZWN0b3IiKSxPR2U9byhhc3luYygpPT57bGV0e2RpYWdyYW06dH09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KERoZSgpLF9oZSkpO3JldHVybntpZDpMaGUsZGlhZ3JhbTp0fX0sImxvYWRlciIpLFBHZT17aWQ6TGhlLGRldGVjdG9yOklHZSxsb2FkZXI6T0dlfSxSaGU9UEdlO3ZhciBvZmU9ImdhbnR0IixrVmU9byh0PT4vXlxzKmdhbnR0Ly50ZXN0KHQpLCJkZXRlY3RvciIpLEVWZT1vKGFzeW5jKCk9PntsZXR7ZGlhZ3JhbTp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oc2ZlKCksYWZlKSk7cmV0dXJue2lkOm9mZSxkaWFncmFtOnR9fSwibG9hZGVyIiksU1ZlPXtpZDpvZmUsZGV0ZWN0b3I6a1ZlLGxvYWRlcjpFVmV9LGxmZT1TVmU7dmFyIHlmZT0iaW5mbyIsUlZlPW8odD0+L15ccyppbmZvLy50ZXN0KHQpLCJkZXRlY3RvciIpLE5WZT1vKGFzeW5jKCk9PntsZXR7ZGlhZ3JhbTp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oZ2ZlKCksbWZlKSk7cmV0dXJue2lkOnlmZSxkaWFncmFtOnR9fSwibG9hZGVyIiksdmZlPXtpZDp5ZmUsZGV0ZWN0b3I6UlZlLGxvYWRlcjpOVmV9O3ZhciBfZmU9InBpZSIsV1ZlPW8odD0+L15ccypwaWUvLnRlc3QodCksImRldGVjdG9yIikscVZlPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihBZmUoKSxDZmUpKTtyZXR1cm57aWQ6X2ZlLGRpYWdyYW06dH19LCJsb2FkZXIiKSxEZmU9e2lkOl9mZSxkZXRlY3RvcjpXVmUsbG9hZGVyOnFWZX07dmFyIFZmZT0icXVhZHJhbnRDaGFydCIsdVVlPW8odD0+L15ccypxdWFkcmFudENoYXJ0Ly50ZXN0KHQpLCJkZXRlY3RvciIpLGhVZT1vKGFzeW5jKCk9PntsZXR7ZGlhZ3JhbTp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oR2ZlKCksemZlKSk7cmV0dXJue2lkOlZmZSxkaWFncmFtOnR9fSwibG9hZGVyIiksZlVlPXtpZDpWZmUsZGV0ZWN0b3I6dVVlLGxvYWRlcjpoVWV9LFVmZT1mVWU7dmFyIGdkZT0ieHljaGFydCIsRFVlPW8odD0+L15ccyp4eWNoYXJ0LWJldGEvLnRlc3QodCksImRldGVjdG9yIiksTFVlPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihtZGUoKSxwZGUpKTtyZXR1cm57aWQ6Z2RlLGRpYWdyYW06dH19LCJsb2FkZXIiKSxSVWU9e2lkOmdkZSxkZXRlY3RvcjpEVWUsbG9hZGVyOkxVZX0seWRlPVJVZTt2YXIgQ2RlPSJyZXF1aXJlbWVudCIsT1VlPW8odD0+L15ccypyZXF1aXJlbWVudChEaWFncmFtKT8vLnRlc3QodCksImRldGVjdG9yIiksUFVlPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihTZGUoKSxFZGUpKTtyZXR1cm57aWQ6Q2RlLGRpYWdyYW06dH19LCJsb2FkZXIiKSxCVWU9e2lkOkNkZSxkZXRlY3RvcjpPVWUsbG9hZGVyOlBVZX0sQWRlPUJVZTt2YXIgWWRlPSJzZXF1ZW5jZSIsYkhlPW8odD0+L15ccypzZXF1ZW5jZURpYWdyYW0vLnRlc3QodCksImRldGVjdG9yIiksVEhlPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihxZGUoKSxXZGUpKTtyZXR1cm57aWQ6WWRlLGRpYWdyYW06dH19LCJsb2FkZXIiKSx3SGU9e2lkOllkZSxkZXRlY3RvcjpiSGUsbG9hZGVyOlRIZX0sWGRlPXdIZTt2YXIgZXBlPSJjbGFzcyIsX0hlPW8oKHQsZSk9PmU/LmNsYXNzPy5kZWZhdWx0UmVuZGVyZXI9PT0iZGFncmUtd3JhcHBlciI/ITE6L15ccypjbGFzc0RpYWdyYW0vLnRlc3QodCksImRldGVjdG9yIiksREhlPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihKZGUoKSxaZGUpKTtyZXR1cm57aWQ6ZXBlLGRpYWdyYW06dH19LCJsb2FkZXIiKSxMSGU9e2lkOmVwZSxkZXRlY3RvcjpfSGUsbG9hZGVyOkRIZX0sdHBlPUxIZTt2YXIgaXBlPSJjbGFzc0RpYWdyYW0iLE5IZT1vKCh0LGUpPT4vXlxzKmNsYXNzRGlhZ3JhbS8udGVzdCh0KSYmZT8uY2xhc3M/LmRlZmF1bHRSZW5kZXJlcj09PSJkYWdyZS13cmFwcGVyIj8hMDovXlxzKmNsYXNzRGlhZ3JhbS12Mi8udGVzdCh0KSwiZGV0ZWN0b3IiKSxNSGU9byhhc3luYygpPT57bGV0e2RpYWdyYW06dH09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KG5wZSgpLHJwZSkpO3JldHVybntpZDppcGUsZGlhZ3JhbTp0fX0sImxvYWRlciIpLElIZT17aWQ6aXBlLGRldGVjdG9yOk5IZSxsb2FkZXI6TUhlfSxhcGU9SUhlO3ZhciBQcGU9InN0YXRlIixhV2U9bygodCxlKT0+ZT8uc3RhdGU/LmRlZmF1bHRSZW5kZXJlcj09PSJkYWdyZS13cmFwcGVyIj8hMTovXlxzKnN0YXRlRGlhZ3JhbS8udGVzdCh0KSwiZGV0ZWN0b3IiKSxzV2U9byhhc3luYygpPT57bGV0e2RpYWdyYW06dH09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KE9wZSgpLElwZSkpO3JldHVybntpZDpQcGUsZGlhZ3JhbTp0fX0sImxvYWRlciIpLG9XZT17aWQ6UHBlLGRldGVjdG9yOmFXZSxsb2FkZXI6c1dlfSxCcGU9b1dlO3ZhciB6cGU9InN0YXRlRGlhZ3JhbSIsY1dlPW8oKHQsZSk9PiEhKC9eXHMqc3RhdGVEaWFncmFtLXYyLy50ZXN0KHQpfHwvXlxzKnN0YXRlRGlhZ3JhbS8udGVzdCh0KSYmZT8uc3RhdGU/LmRlZmF1bHRSZW5kZXJlcj09PSJkYWdyZS13cmFwcGVyIiksImRldGVjdG9yIiksdVdlPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PigkcGUoKSxGcGUpKTtyZXR1cm57aWQ6enBlLGRpYWdyYW06dH19LCJsb2FkZXIiKSxoV2U9e2lkOnpwZSxkZXRlY3RvcjpjV2UsbG9hZGVyOnVXZX0sR3BlPWhXZTt2YXIgbjBlPSJqb3VybmV5IixOV2U9byh0PT4vXlxzKmpvdXJuZXkvLnRlc3QodCksImRldGVjdG9yIiksTVdlPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihyMGUoKSx0MGUpKTtyZXR1cm57aWQ6bjBlLGRpYWdyYW06dH19LCJsb2FkZXIiKSxJV2U9e2lkOm4wZSxkZXRlY3RvcjpOV2UsbG9hZGVyOk1XZX0saTBlPUlXZTt5dCgpO1ZsKCk7eGkoKTt2YXIgT1dlPW8oKHQsZSxyKT0+e1guZGVidWcoYHJlbmRlcmluZyBzdmcgZm9yIHN5bnRheCBlcnJvcgpgKTtsZXQgbj1MaShlKSxpPW4uYXBwZW5kKCJnIik7bi5hdHRyKCJ2aWV3Qm94IiwiMCAwIDI0MTIgNTEyIiksZm4obiwxMDAsNTEyLCEwKSxpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItaWNvbiIpLmF0dHIoImQiLCJtNDExLjMxMywxMjMuMzEzYzYuMjUtNi4yNSA2LjI1LTE2LjM3NSAwLTIyLjYyNXMtMTYuMzc1LTYuMjUtMjIuNjI1LDBsLTMyLDMyLTkuMzc1LDkuMzc1LTIwLjY4OC0yMC42ODhjLTEyLjQ4NC0xMi41LTMyLjc2Ni0xMi41LTQ1LjI1LDBsLTE2LDE2Yy0xLjI2MSwxLjI2MS0yLjMwNCwyLjY0OC0zLjMxLDQuMDUxLTIxLjczOS04LjU2MS00NS4zMjQtMTMuNDI2LTcwLjA2NS0xMy40MjYtMTA1Ljg2NywwLTE5Miw4Ni4xMzMtMTkyLDE5MnM4Ni4xMzMsMTkyIDE5MiwxOTIgMTkyLTg2LjEzMyAxOTItMTkyYzAtMjQuNzQxLTQuODY0LTQ4LjMyNy0xMy40MjYtNzAuMDY1IDEuNDAyLTEuMDA3IDIuNzktMi4wNDkgNC4wNTEtMy4zMWwxNi0xNmMxMi41LTEyLjQ5MiAxMi41LTMyLjc1OCAwLTQ1LjI1bC0yMC42ODgtMjAuNjg4IDkuMzc1LTkuMzc1IDMyLjAwMS0zMS45OTl6bS0yMTkuMzEzLDEwMC42ODdjLTUyLjkzOCwwLTk2LDQzLjA2My05Niw5NiAwLDguODM2LTcuMTY0LDE2LTE2LDE2cy0xNi03LjE2NC0xNi0xNmMwLTcwLjU3OCA1Ny40MjItMTI4IDEyOC0xMjggOC44MzYsMCAxNiw3LjE2NCAxNiwxNnMtNy4xNjQsMTYtMTYsMTZ6IiksaS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQ1OS4wMiwxNDguOThjLTYuMjUtNi4yNS0xNi4zNzUtNi4yNS0yMi42MjUsMHMtNi4yNSwxNi4zNzUgMCwyMi42MjVsMTYsMTZjMy4xMjUsMy4xMjUgNy4yMTksNC42ODggMTEuMzEzLDQuNjg4IDQuMDk0LDAgOC4xODgtMS41NjMgMTEuMzEzLTQuNjg4IDYuMjUtNi4yNSA2LjI1LTE2LjM3NSAwLTIyLjYyNWwtMTYuMDAxLTE2eiIpLGkuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJlcnJvci1pY29uIikuYXR0cigiZCIsIm0zNDAuMzk1LDc1LjYwNWMzLjEyNSwzLjEyNSA3LjIxOSw0LjY4OCAxMS4zMTMsNC42ODggNC4wOTQsMCA4LjE4OC0xLjU2MyAxMS4zMTMtNC42ODggNi4yNS02LjI1IDYuMjUtMTYuMzc1IDAtMjIuNjI1bC0xNi0xNmMtNi4yNS02LjI1LTE2LjM3NS02LjI1LTIyLjYyNSwwcy02LjI1LDE2LjM3NSAwLDIyLjYyNWwxNS45OTksMTZ6IiksaS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQwMCw2NGM4Ljg0NCwwIDE2LTcuMTY0IDE2LTE2di0zMmMwLTguODM2LTcuMTU2LTE2LTE2LTE2LTguODQ0LDAtMTYsNy4xNjQtMTYsMTZ2MzJjMCw4LjgzNiA3LjE1NiwxNiAxNiwxNnoiKSxpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItaWNvbiIpLmF0dHIoImQiLCJtNDk2LDk2LjU4NmgtMzJjLTguODQ0LDAtMTYsNy4xNjQtMTYsMTYgMCw4LjgzNiA3LjE1NiwxNiAxNiwxNmgzMmM4Ljg0NCwwIDE2LTcuMTY0IDE2LTE2IDAtOC44MzYtNy4xNTYtMTYtMTYtMTZ6IiksaS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQzNi45OCw3NS42MDVjMy4xMjUsMy4xMjUgNy4yMTksNC42ODggMTEuMzEzLDQuNjg4IDQuMDk0LDAgOC4xODgtMS41NjMgMTEuMzEzLTQuNjg4bDMyLTMyYzYuMjUtNi4yNSA2LjI1LTE2LjM3NSAwLTIyLjYyNXMtMTYuMzc1LTYuMjUtMjIuNjI1LDBsLTMyLDMyYy02LjI1MSw2LjI1LTYuMjUxLDE2LjM3NS0wLjAwMSwyMi42MjV6IiksaS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsImVycm9yLXRleHQiKS5hdHRyKCJ4IiwxNDQwKS5hdHRyKCJ5IiwyNTApLmF0dHIoImZvbnQtc2l6ZSIsIjE1MHB4Iikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dCgiU3ludGF4IGVycm9yIGluIHRleHQiKSxpLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItdGV4dCIpLmF0dHIoIngiLDEyNTApLmF0dHIoInkiLDQwMCkuYXR0cigiZm9udC1zaXplIiwiMTAwcHgiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KGBtZXJtYWlkIHZlcnNpb24gJHtyfWApfSwiZHJhdyIpLFFQPXtkcmF3Ok9XZX0sYTBlPVFQO3ZhciBQV2U9e2RiOnt9LHJlbmRlcmVyOlFQLHBhcnNlcjp7cGFyc2U6bygoKT0+e30sInBhcnNlIil9fSxzMGU9UFdlO3ZhciBvMGU9ImZsb3djaGFydC1lbGsiLEJXZT1vKCh0LGU9e30pPT4vXlxzKmZsb3djaGFydC1lbGsvLnRlc3QodCl8fC9eXHMqZmxvd2NoYXJ0fGdyYXBoLy50ZXN0KHQpJiZlPy5mbG93Y2hhcnQ/LmRlZmF1bHRSZW5kZXJlcj09PSJlbGsiPyhlLmxheW91dD0iZWxrIiwhMCk6ITEsImRldGVjdG9yIiksRldlPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihiaygpLHhrKSk7cmV0dXJue2lkOm8wZSxkaWFncmFtOnR9fSwibG9hZGVyIiksJFdlPXtpZDpvMGUsZGV0ZWN0b3I6QldlLGxvYWRlcjpGV2V9LGwwZT0kV2U7dmFyIEkwZT0idGltZWxpbmUiLGlxZT1vKHQ9Pi9eXHMqdGltZWxpbmUvLnRlc3QodCksImRldGVjdG9yIiksYXFlPW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihNMGUoKSxOMGUpKTtyZXR1cm57aWQ6STBlLGRpYWdyYW06dH19LCJsb2FkZXIiKSxzcWU9e2lkOkkwZSxkZXRlY3RvcjppcWUsbG9hZGVyOmFxZX0sTzBlPXNxZTt2YXIgdXllPSJtaW5kbWFwIixMZXQ9byh0PT4vXlxzKm1pbmRtYXAvLnRlc3QodCksImRldGVjdG9yIiksUmV0PW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihjeWUoKSxseWUpKTtyZXR1cm57aWQ6dXllLGRpYWdyYW06dH19LCJsb2FkZXIiKSxOZXQ9e2lkOnV5ZSxkZXRlY3RvcjpMZXQsbG9hZGVyOlJldH0saHllPU5ldDt2YXIga3llPSJrYW5iYW4iLFhldD1vKHQ9Pi9eXHMqa2FuYmFuLy50ZXN0KHQpLCJkZXRlY3RvciIpLGpldD1vKGFzeW5jKCk9PntsZXR7ZGlhZ3JhbTp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4od3llKCksVHllKSk7cmV0dXJue2lkOmt5ZSxkaWFncmFtOnR9fSwibG9hZGVyIiksS2V0PXtpZDpreWUsZGV0ZWN0b3I6WGV0LGxvYWRlcjpqZXR9LEV5ZT1LZXQ7dmFyIGF2ZT0ic2Fua2V5Iix4dHQ9byh0PT4vXlxzKnNhbmtleS1iZXRhLy50ZXN0KHQpLCJkZXRlY3RvciIpLGJ0dD1vKGFzeW5jKCk9PntsZXR7ZGlhZ3JhbTp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oaXZlKCksbnZlKSk7cmV0dXJue2lkOmF2ZSxkaWFncmFtOnR9fSwibG9hZGVyIiksVHR0PXtpZDphdmUsZGV0ZWN0b3I6eHR0LGxvYWRlcjpidHR9LHN2ZT1UdHQ7dmFyIGd2ZT0icGFja2V0IixJdHQ9byh0PT4vXlxzKnBhY2tldCgtYmV0YSk/Ly50ZXN0KHQpLCJkZXRlY3RvciIpLE90dD1vKGFzeW5jKCk9PntsZXR7ZGlhZ3JhbTp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4obXZlKCkscHZlKSk7cmV0dXJue2lkOmd2ZSxkaWFncmFtOnR9fSwibG9hZGVyIikseXZlPXtpZDpndmUsZGV0ZWN0b3I6SXR0LGxvYWRlcjpPdHR9O3ZhciBfdmU9InJhZGFyIixucnQ9byh0PT4vXlxzKnJhZGFyLWJldGEvLnRlc3QodCksImRldGVjdG9yIiksaXJ0PW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihBdmUoKSxDdmUpKTtyZXR1cm57aWQ6X3ZlLGRpYWdyYW06dH19LCJsb2FkZXIiKSxEdmU9e2lkOl92ZSxkZXRlY3RvcjpucnQsbG9hZGVyOmlydH07dmFyIE4yZT0iYmxvY2siLFNudD1vKHQ9Pi9eXHMqYmxvY2stYmV0YS8udGVzdCh0KSwiZGV0ZWN0b3IiKSxDbnQ9byhhc3luYygpPT57bGV0e2RpYWdyYW06dH09YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KFIyZSgpLEwyZSkpO3JldHVybntpZDpOMmUsZGlhZ3JhbTp0fX0sImxvYWRlciIpLEFudD17aWQ6TjJlLGRldGVjdG9yOlNudCxsb2FkZXI6Q250fSxNMmU9QW50O3ZhciBpeGU9ImFyY2hpdGVjdHVyZSIsZWl0PW8odD0+L15ccyphcmNoaXRlY3R1cmUvLnRlc3QodCksImRldGVjdG9yIiksdGl0PW8oYXN5bmMoKT0+e2xldHtkaWFncmFtOnR9PWF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihueGUoKSxyeGUpKTtyZXR1cm57aWQ6aXhlLGRpYWdyYW06dH19LCJsb2FkZXIiKSxyaXQ9e2lkOml4ZSxkZXRlY3RvcjplaXQsbG9hZGVyOnRpdH0sYXhlPXJpdDtyZCgpO0d0KCk7dmFyIG14ZT0idHJlZW1hcCIsaGl0PW8odD0+L15ccyp0cmVlbWFwLy50ZXN0KHQpLCJkZXRlY3RvciIpLGZpdD1vKGFzeW5jKCk9PntsZXR7ZGlhZ3JhbTp0fT1hd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4ocHhlKCksZHhlKSk7cmV0dXJue2lkOm14ZSxkaWFncmFtOnR9fSwibG9hZGVyIiksZ3hlPXtpZDpteGUsZGV0ZWN0b3I6aGl0LGxvYWRlcjpmaXR9O3ZhciB5eGU9ITEsd3k9bygoKT0+e3l4ZXx8KHl4ZT0hMCxkZCgiZXJyb3IiLHMwZSx0PT50LnRvTG93ZXJDYXNlKCkudHJpbSgpPT09ImVycm9yIiksZGQoIi0tLSIse2RiOntjbGVhcjpvKCgpPT57fSwiY2xlYXIiKX0sc3R5bGVzOnt9LHJlbmRlcmVyOntkcmF3Om8oKCk9Pnt9LCJkcmF3Iil9LHBhcnNlcjp7cGFyc2U6bygoKT0+e3Rocm93IG5ldyBFcnJvcigiRGlhZ3JhbXMgYmVnaW5uaW5nIHdpdGggLS0tIGFyZSBub3QgdmFsaWQuIElmIHlvdSB3ZXJlIHRyeWluZyB0byB1c2UgYSBZQU1MIGZyb250LW1hdHRlciwgcGxlYXNlIGVuc3VyZSB0aGF0IHlvdSd2ZSBjb3JyZWN0bHkgb3BlbmVkIGFuZCBjbG9zZWQgdGhlIFlBTUwgZnJvbnQtbWF0dGVyIHdpdGggdW4taW5kZW50ZWQgYC0tLWAgYmxvY2tzIil9LCJwYXJzZSIpfSxpbml0Om8oKCk9Pm51bGwsImluaXQiKX0sdD0+dC50b0xvd2VyQ2FzZSgpLnRyaW1TdGFydCgpLnN0YXJ0c1dpdGgoIi0tLSIpKSxMeShsMGUsaHllLGF4ZSksTHkodUssRXllLGFwZSx0cGUsa3NlLGxmZSx2ZmUsRGZlLEFkZSxYZGUsZHNlLGhzZSxPMGUsUmhlLEdwZSxCcGUsaTBlLFVmZSxzdmUseXZlLHlkZSxNMmUsRHZlLGd4ZSkpfSwiYWRkRGlhZ3JhbXMiKTt5dCgpO3JkKCk7R3QoKTt2YXIgdnhlPW8oYXN5bmMoKT0+e1guZGVidWcoIkxvYWRpbmcgcmVnaXN0ZXJlZCBkaWFncmFtcyIpO2xldCBlPShhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoT2JqZWN0LmVudHJpZXMoYXUpLm1hcChhc3luYyhbcix7ZGV0ZWN0b3I6bixsb2FkZXI6aX1dKT0+e2lmKGkpdHJ5e2l2KHIpfWNhdGNoe3RyeXtsZXR7ZGlhZ3JhbTphLGlkOnN9PWF3YWl0IGkoKTtkZChzLGEsbil9Y2F0Y2goYSl7dGhyb3cgWC5lcnJvcihgRmFpbGVkIHRvIGxvYWQgZXh0ZXJuYWwgZGlhZ3JhbSB3aXRoIGtleSAke3J9LiBSZW1vdmluZyBmcm9tIGRldGVjdG9ycy5gKSxkZWxldGUgYXVbcl0sYX19fSkpKS5maWx0ZXIocj0+ci5zdGF0dXM9PT0icmVqZWN0ZWQiKTtpZihlLmxlbmd0aD4wKXtYLmVycm9yKGBGYWlsZWQgdG8gbG9hZCAke2UubGVuZ3RofSBleHRlcm5hbCBkaWFncmFtc2ApO2ZvcihsZXQgciBvZiBlKVguZXJyb3Iocik7dGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCAke2UubGVuZ3RofSBleHRlcm5hbCBkaWFncmFtc2ApfX0sImxvYWRSZWdpc3RlcmVkRGlhZ3JhbXMiKTt5dCgpO2ZyKCk7dmFyIF9DPSJjb21tIixEQz0icnVsZSIsTEM9ImRlY2wiO3ZhciB4eGU9IkBpbXBvcnQiO3ZhciBieGU9IkBuYW1lc3BhY2UiLFR4ZT0iQGtleWZyYW1lcyI7dmFyIHd4ZT0iQGxheWVyIjt2YXIgaSQ9TWF0aC5hYnMsQjQ9U3RyaW5nLmZyb21DaGFyQ29kZTtmdW5jdGlvbiBSQyh0KXtyZXR1cm4gdC50cmltKCl9byhSQywidHJpbSIpO2Z1bmN0aW9uIEY0KHQsZSxyKXtyZXR1cm4gdC5yZXBsYWNlKGUscil9byhGNCwicmVwbGFjZSIpO2Z1bmN0aW9uIGt4ZSh0LGUscil7cmV0dXJuIHQuaW5kZXhPZihlLHIpfW8oa3hlLCJpbmRleG9mIik7ZnVuY3Rpb24gWGYodCxlKXtyZXR1cm4gdC5jaGFyQ29kZUF0KGUpfDB9byhYZiwiY2hhcmF0Iik7ZnVuY3Rpb24gamYodCxlLHIpe3JldHVybiB0LnNsaWNlKGUscil9byhqZiwic3Vic3RyIik7ZnVuY3Rpb24gVG8odCl7cmV0dXJuIHQubGVuZ3RofW8oVG8sInN0cmxlbiIpO2Z1bmN0aW9uIEV4ZSh0KXtyZXR1cm4gdC5sZW5ndGh9byhFeGUsInNpemVvZiIpO2Z1bmN0aW9uIGt5KHQsZSl7cmV0dXJuIGUucHVzaCh0KSx0fW8oa3ksImFwcGVuZCIpO3ZhciBOQz0xLEV5PTEsU3hlPTAsbGw9MCxJaT0wLEN5PSIiO2Z1bmN0aW9uIE1DKHQsZSxyLG4saSxhLHMsbCl7cmV0dXJue3ZhbHVlOnQscm9vdDplLHBhcmVudDpyLHR5cGU6bixwcm9wczppLGNoaWxkcmVuOmEsbGluZTpOQyxjb2x1bW46RXksbGVuZ3RoOnMscmV0dXJuOiIiLHNpYmxpbmdzOmx9fW8oTUMsIm5vZGUiKTtmdW5jdGlvbiBDeGUoKXtyZXR1cm4gSWl9byhDeGUsImNoYXIiKTtmdW5jdGlvbiBBeGUoKXtyZXR1cm4gSWk9bGw+MD9YZihDeSwtLWxsKTowLEV5LS0sSWk9PT0xMCYmKEV5PTEsTkMtLSksSWl9byhBeGUsInByZXYiKTtmdW5jdGlvbiBjbCgpe3JldHVybiBJaT1sbDxTeGU/WGYoQ3ksbGwrKyk6MCxFeSsrLElpPT09MTAmJihFeT0xLE5DKyspLElpfW8oY2wsIm5leHQiKTtmdW5jdGlvbiBsaCgpe3JldHVybiBYZihDeSxsbCl9byhsaCwicGVlayIpO2Z1bmN0aW9uICQ0KCl7cmV0dXJuIGxsfW8oJDQsImNhcmV0Iik7ZnVuY3Rpb24gSUModCxlKXtyZXR1cm4gamYoQ3ksdCxlKX1vKElDLCJzbGljZSIpO2Z1bmN0aW9uIFN5KHQpe3N3aXRjaCh0KXtjYXNlIDA6Y2FzZSA5OmNhc2UgMTA6Y2FzZSAxMzpjYXNlIDMyOnJldHVybiA1O2Nhc2UgMzM6Y2FzZSA0MzpjYXNlIDQ0OmNhc2UgNDc6Y2FzZSA2MjpjYXNlIDY0OmNhc2UgMTI2OmNhc2UgNTk6Y2FzZSAxMjM6Y2FzZSAxMjU6cmV0dXJuIDQ7Y2FzZSA1ODpyZXR1cm4gMztjYXNlIDM0OmNhc2UgMzk6Y2FzZSA0MDpjYXNlIDkxOnJldHVybiAyO2Nhc2UgNDE6Y2FzZSA5MzpyZXR1cm4gMX1yZXR1cm4gMH1vKFN5LCJ0b2tlbiIpO2Z1bmN0aW9uIF94ZSh0KXtyZXR1cm4gTkM9RXk9MSxTeGU9VG8oQ3k9dCksbGw9MCxbXX1vKF94ZSwiYWxsb2MiKTtmdW5jdGlvbiBEeGUodCl7cmV0dXJuIEN5PSIiLHR9byhEeGUsImRlYWxsb2MiKTtmdW5jdGlvbiBPQyh0KXtyZXR1cm4gUkMoSUMobGwtMSxhJCh0PT09OTE/dCsyOnQ9PT00MD90KzE6dCkpKX1vKE9DLCJkZWxpbWl0Iik7ZnVuY3Rpb24gTHhlKHQpe2Zvcig7KElpPWxoKCkpJiZJaTwzMzspY2woKTtyZXR1cm4gU3kodCk+Mnx8U3koSWkpPjM/IiI6IiAifW8oTHhlLCJ3aGl0ZXNwYWNlIik7ZnVuY3Rpb24gUnhlKHQsZSl7Zm9yKDstLWUmJmNsKCkmJiEoSWk8NDh8fElpPjEwMnx8SWk+NTcmJklpPDY1fHxJaT43MCYmSWk8OTcpOyk7cmV0dXJuIElDKHQsJDQoKSsoZTw2JiZsaCgpPT0zMiYmY2woKT09MzIpKX1vKFJ4ZSwiZXNjYXBpbmciKTtmdW5jdGlvbiBhJCh0KXtmb3IoO2NsKCk7KXN3aXRjaChJaSl7Y2FzZSB0OnJldHVybiBsbDtjYXNlIDM0OmNhc2UgMzk6dCE9PTM0JiZ0IT09MzkmJmEkKElpKTticmVhaztjYXNlIDQwOnQ9PT00MSYmYSQodCk7YnJlYWs7Y2FzZSA5MjpjbCgpO2JyZWFrfXJldHVybiBsbH1vKGEkLCJkZWxpbWl0ZXIiKTtmdW5jdGlvbiBOeGUodCxlKXtmb3IoO2NsKCkmJnQrSWkhPT01NzspaWYodCtJaT09PTg0JiZsaCgpPT09NDcpYnJlYWs7cmV0dXJuIi8qIitJQyhlLGxsLTEpKyIqIitCNCh0PT09NDc/dDpjbCgpKX1vKE54ZSwiY29tbWVudGVyIik7ZnVuY3Rpb24gTXhlKHQpe2Zvcig7IVN5KGxoKCkpOyljbCgpO3JldHVybiBJQyh0LGxsKX1vKE14ZSwiaWRlbnRpZmllciIpO2Z1bmN0aW9uIFB4ZSh0KXtyZXR1cm4gRHhlKFBDKCIiLG51bGwsbnVsbCxudWxsLFsiIl0sdD1feGUodCksMCxbMF0sdCkpfW8oUHhlLCJjb21waWxlIik7ZnVuY3Rpb24gUEModCxlLHIsbixpLGEscyxsLHUpe2Zvcih2YXIgaD0wLGY9MCxkPXMscD0wLG09MCxnPTAseT0xLHY9MSx4PTEsYj0wLFQ9IiIsUz1pLHc9YSxFPW4sXz1UO3Y7KXN3aXRjaChnPWIsYj1jbCgpKXtjYXNlIDQwOmlmKGchPTEwOCYmWGYoXyxkLTEpPT01OCl7a3hlKF8rPUY0KE9DKGIpLCImIiwiJlxmIiksIiZcZiIsaSQoaD9sW2gtMV06MCkpIT0tMSYmKHg9LTEpO2JyZWFrfWNhc2UgMzQ6Y2FzZSAzOTpjYXNlIDkxOl8rPU9DKGIpO2JyZWFrO2Nhc2UgOTpjYXNlIDEwOmNhc2UgMTM6Y2FzZSAzMjpfKz1MeGUoZyk7YnJlYWs7Y2FzZSA5MjpfKz1SeGUoJDQoKS0xLDcpO2NvbnRpbnVlO2Nhc2UgNDc6c3dpdGNoKGxoKCkpe2Nhc2UgNDI6Y2FzZSA0NzpreShkaXQoTnhlKGNsKCksJDQoKSksZSxyLHUpLHUpLChTeShnfHwxKT09NXx8U3kobGgoKXx8MSk9PTUpJiZUbyhfKSYmamYoXywtMSx2b2lkIDApIT09IiAiJiYoXys9IiAiKTticmVhaztkZWZhdWx0Ol8rPSIvIn1icmVhaztjYXNlIDEyMyp5OmxbaCsrXT1UbyhfKSp4O2Nhc2UgMTI1Knk6Y2FzZSA1OTpjYXNlIDA6c3dpdGNoKGIpe2Nhc2UgMDpjYXNlIDEyNTp2PTA7Y2FzZSA1OStmOng9PS0xJiYoXz1GNChfLC9cZi9nLCIiKSksbT4wJiYoVG8oXyktZHx8eT09PTAmJmc9PT00NykmJmt5KG0+MzI/T3hlKF8rIjsiLG4scixkLTEsdSk6T3hlKEY0KF8sIiAiLCIiKSsiOyIsbixyLGQtMix1KSx1KTticmVhaztjYXNlIDU5Ol8rPSI7IjtkZWZhdWx0OmlmKGt5KEU9SXhlKF8sZSxyLGgsZixpLGwsVCxTPVtdLHc9W10sZCxhKSxhKSxiPT09MTIzKWlmKGY9PT0wKVBDKF8sZSxFLEUsUyxhLGQsbCx3KTtlbHNle3N3aXRjaChwKXtjYXNlIDk5OmlmKFhmKF8sMyk9PT0xMTApYnJlYWs7Y2FzZSAxMDg6aWYoWGYoXywyKT09PTk3KWJyZWFrO2RlZmF1bHQ6Zj0wO2Nhc2UgMTAwOmNhc2UgMTA5OmNhc2UgMTE1On1mP1BDKHQsRSxFLG4mJmt5KEl4ZSh0LEUsRSwwLDAsaSxsLFQsaSxTPVtdLGQsdyksdyksaSx3LGQsbCxuP1M6dyk6UEMoXyxFLEUsRSxbIiJdLHcsMCxsLHcpfX1oPWY9bT0wLHk9eD0xLFQ9Xz0iIixkPXM7YnJlYWs7Y2FzZSA1ODpkPTErVG8oXyksbT1nO2RlZmF1bHQ6aWYoeTwxKXtpZihiPT0xMjMpLS15O2Vsc2UgaWYoYj09MTI1JiZ5Kys9PTAmJkF4ZSgpPT0xMjUpY29udGludWV9c3dpdGNoKF8rPUI0KGIpLGIqeSl7Y2FzZSAzODp4PWY+MD8xOihfKz0iXGYiLC0xKTticmVhaztjYXNlIDQ0OmxbaCsrXT0oVG8oXyktMSkqeCx4PTE7YnJlYWs7Y2FzZSA2NDpsaCgpPT09NDUmJihfKz1PQyhjbCgpKSkscD1saCgpLGY9ZD1UbyhUPV8rPU14ZSgkNCgpKSksYisrO2JyZWFrO2Nhc2UgNDU6Zz09PTQ1JiZUbyhfKT09MiYmKHk9MCl9fXJldHVybiBhfW8oUEMsInBhcnNlIik7ZnVuY3Rpb24gSXhlKHQsZSxyLG4saSxhLHMsbCx1LGgsZixkKXtmb3IodmFyIHA9aS0xLG09aT09PTA/YTpbIiJdLGc9RXhlKG0pLHk9MCx2PTAseD0wO3k8bjsrK3kpZm9yKHZhciBiPTAsVD1qZih0LHArMSxwPWkkKHY9c1t5XSkpLFM9dDtiPGc7KytiKShTPVJDKHY+MD9tW2JdKyIgIitUOkY0KFQsLyZcZi9nLG1bYl0pKSkmJih1W3grK109Uyk7cmV0dXJuIE1DKHQsZSxyLGk9PT0wP0RDOmwsdSxoLGYsZCl9byhJeGUsInJ1bGVzZXQiKTtmdW5jdGlvbiBkaXQodCxlLHIsbil7cmV0dXJuIE1DKHQsZSxyLF9DLEI0KEN4ZSgpKSxqZih0LDIsLTIpLDAsbil9byhkaXQsImNvbW1lbnQiKTtmdW5jdGlvbiBPeGUodCxlLHIsbixpKXtyZXR1cm4gTUModCxlLHIsTEMsamYodCwwLG4pLGpmKHQsbisxLC0xKSxuLGkpfW8oT3hlLCJkZWNsYXJhdGlvbiIpO2Z1bmN0aW9uIEJDKHQsZSl7Zm9yKHZhciByPSIiLG49MDtuPHQubGVuZ3RoO24rKylyKz1lKHRbbl0sbix0LGUpfHwiIjtyZXR1cm4gcn1vKEJDLCJzZXJpYWxpemUiKTtmdW5jdGlvbiBCeGUodCxlLHIsbil7c3dpdGNoKHQudHlwZSl7Y2FzZSB3eGU6aWYodC5jaGlsZHJlbi5sZW5ndGgpYnJlYWs7Y2FzZSB4eGU6Y2FzZSBieGU6Y2FzZSBMQzpyZXR1cm4gdC5yZXR1cm49dC5yZXR1cm58fHQudmFsdWU7Y2FzZSBfQzpyZXR1cm4iIjtjYXNlIFR4ZTpyZXR1cm4gdC5yZXR1cm49dC52YWx1ZSsieyIrQkModC5jaGlsZHJlbixuKSsifSI7Y2FzZSBEQzppZighVG8odC52YWx1ZT10LnByb3BzLmpvaW4oIiwiKSkpcmV0dXJuIiJ9cmV0dXJuIFRvKHI9QkModC5jaGlsZHJlbixuKSk/dC5yZXR1cm49dC52YWx1ZSsieyIrcisifSI6IiJ9byhCeGUsInN0cmluZ2lmeSIpO0w3KCk7YWsoKTtYTygpO3ZhciBwaXQ9ImdyYXBoaWNzLWRvY3VtZW50IGRvY3VtZW50IjtmdW5jdGlvbiBGeGUodCxlKXt0LmF0dHIoInJvbGUiLHBpdCksZSE9PSIiJiZ0LmF0dHIoImFyaWEtcm9sZWRlc2NyaXB0aW9uIixlKX1vKEZ4ZSwic2V0QTExeURpYWdyYW1JbmZvIik7ZnVuY3Rpb24gJHhlKHQsZSxyLG4pe2lmKHQuaW5zZXJ0IT09dm9pZCAwKXtpZihyKXtsZXQgaT1gY2hhcnQtZGVzYy0ke259YDt0LmF0dHIoImFyaWEtZGVzY3JpYmVkYnkiLGkpLHQuaW5zZXJ0KCJkZXNjIiwiOmZpcnN0LWNoaWxkIikuYXR0cigiaWQiLGkpLnRleHQocil9aWYoZSl7bGV0IGk9YGNoYXJ0LXRpdGxlLSR7bn1gO3QuYXR0cigiYXJpYS1sYWJlbGxlZGJ5IixpKSx0Lmluc2VydCgidGl0bGUiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJpZCIsaSkudGV4dChlKX19fW8oJHhlLCJhZGRTVkdhMTF5VGl0bGVEZXNjcmlwdGlvbiIpO2cwKCk7bWkoKTttaSgpO0d0KCk7cmQoKTtuNygpO2VyKCk7dmFyIEF5PWNsYXNzIHR7Y29uc3RydWN0b3IoZSxyLG4saSxhKXt0aGlzLnR5cGU9ZTt0aGlzLnRleHQ9cjt0aGlzLmRiPW47dGhpcy5wYXJzZXI9aTt0aGlzLnJlbmRlcmVyPWF9c3RhdGlje28odGhpcywiRGlhZ3JhbSIpfXN0YXRpYyBhc3luYyBmcm9tVGV4dChlLHI9e30pe2xldCBuPXRyKCksaT1tMChlLG4pO2U9WmooZSkrYApgO3RyeXtpdihpKX1jYXRjaHtsZXQgaD16JChpKTtpZighaCl0aHJvdyBuZXcgcDAoYERpYWdyYW0gJHtpfSBub3QgZm91bmQuYCk7bGV0e2lkOmYsZGlhZ3JhbTpkfT1hd2FpdCBoKCk7ZGQoZixkKX1sZXR7ZGI6YSxwYXJzZXI6cyxyZW5kZXJlcjpsLGluaXQ6dX09aXYoaSk7cmV0dXJuIHMucGFyc2VyJiYocy5wYXJzZXIueXk9YSksYS5jbGVhcj8uKCksdT8uKG4pLHIudGl0bGUmJmEuc2V0RGlhZ3JhbVRpdGxlPy4oci50aXRsZSksYXdhaXQgcy5wYXJzZShlKSxuZXcgdChpLGUsYSxzLGwpfWFzeW5jIHJlbmRlcihlLHIpe2F3YWl0IHRoaXMucmVuZGVyZXIuZHJhdyh0aGlzLnRleHQsZSxyLHRoaXMpfWdldFBhcnNlcigpe3JldHVybiB0aGlzLnBhcnNlcn1nZXRUeXBlKCl7cmV0dXJuIHRoaXMudHlwZX19O3ByKCk7dmFyIHp4ZT1bXTt2YXIgR3hlPW8oKCk9Pnt6eGUuZm9yRWFjaCh0PT57dCgpfSksenhlPVtdfSwiYXR0YWNoRnVuY3Rpb25zIik7eXQoKTt2YXIgVnhlPW8odD0+dC5yZXBsYWNlKC9eXHMqJSUoPyF7KVteXG5dK1xuPy9nbSwiIikudHJpbVN0YXJ0KCksImNsZWFudXBDb21tZW50cyIpO1E0KCk7UFQoKTtmdW5jdGlvbiBVeGUodCl7bGV0IGU9dC5tYXRjaChLNCk7aWYoIWUpcmV0dXJue3RleHQ6dCxtZXRhZGF0YTp7fX07bGV0IHI9VG0oZVsxXSx7c2NoZW1hOmJtfSk/P3t9O3I9dHlwZW9mIHI9PSJvYmplY3QiJiYhQXJyYXkuaXNBcnJheShyKT9yOnt9O2xldCBuPXt9O3JldHVybiByLmRpc3BsYXlNb2RlJiYobi5kaXNwbGF5TW9kZT1yLmRpc3BsYXlNb2RlLnRvU3RyaW5nKCkpLHIudGl0bGUmJihuLnRpdGxlPXIudGl0bGUudG9TdHJpbmcoKSksci5jb25maWcmJihuLmNvbmZpZz1yLmNvbmZpZykse3RleHQ6dC5zbGljZShlWzBdLmxlbmd0aCksbWV0YWRhdGE6bn19byhVeGUsImV4dHJhY3RGcm9udE1hdHRlciIpO2VyKCk7dmFyIG1pdD1vKHQ9PnQucmVwbGFjZSgvXHJcbj8vZyxgCmApLnJlcGxhY2UoLzwoXHcrKShbXj5dKik+L2csKGUscixuKT0+IjwiK3Irbi5yZXBsYWNlKC89IihbXiJdKikiL2csIj0nJDEnIikrIj4iKSwiY2xlYW51cFRleHQiKSxnaXQ9byh0PT57bGV0e3RleHQ6ZSxtZXRhZGF0YTpyfT1VeGUodCkse2Rpc3BsYXlNb2RlOm4sdGl0bGU6aSxjb25maWc6YT17fX09cjtyZXR1cm4gbiYmKGEuZ2FudHR8fChhLmdhbnR0PXt9KSxhLmdhbnR0LmRpc3BsYXlNb2RlPW4pLHt0aXRsZTppLGNvbmZpZzphLHRleHQ6ZX19LCJwcm9jZXNzRnJvbnRtYXR0ZXIiKSx5aXQ9byh0PT57bGV0IGU9VnQuZGV0ZWN0SW5pdCh0KT8/e30scj1WdC5kZXRlY3REaXJlY3RpdmUodCwid3JhcCIpO3JldHVybiBBcnJheS5pc0FycmF5KHIpP2Uud3JhcD1yLnNvbWUoKHt0eXBlOm59KT0+bj09PSJ3cmFwIik6cj8udHlwZT09PSJ3cmFwIiYmKGUud3JhcD0hMCkse3RleHQ6S2oodCksZGlyZWN0aXZlOmV9fSwicHJvY2Vzc0RpcmVjdGl2ZXMiKTtmdW5jdGlvbiBzJCh0KXtsZXQgZT1taXQodCkscj1naXQoZSksbj15aXQoci50ZXh0KSxpPSRuKHIuY29uZmlnLG4uZGlyZWN0aXZlKTtyZXR1cm4gdD1WeGUobi50ZXh0KSx7Y29kZTp0LHRpdGxlOnIudGl0bGUsY29uZmlnOml9fW8ocyQsInByZXByb2Nlc3NEaWFncmFtIik7VEEoKTtuMygpO2VyKCk7ZnVuY3Rpb24gSHhlKHQpe2xldCBlPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZSh0KSxyPUFycmF5LmZyb20oZSxuPT5TdHJpbmcuZnJvbUNvZGVQb2ludChuKSkuam9pbigiIik7cmV0dXJuIGJ0b2Eocil9byhIeGUsInRvQmFzZTY0Iik7dmFyIHZpdD01ZTQseGl0PSJncmFwaCBUQjthW01heGltdW0gdGV4dCBzaXplIGluIGRpYWdyYW0gZXhjZWVkZWRdO3N0eWxlIGEgZmlsbDojZmFhIixiaXQ9InNhbmRib3giLFRpdD0ibG9vc2UiLHdpdD0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGtpdD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsRWl0PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixTaXQ9IjEwMCUiLENpdD0iMTAwJSIsQWl0PSJib3JkZXI6MDttYXJnaW46MDsiLF9pdD0ibWFyZ2luOjAiLERpdD0iYWxsb3ctdG9wLW5hdmlnYXRpb24tYnktdXNlci1hY3RpdmF0aW9uIGFsbG93LXBvcHVwcyIsTGl0PSdUaGUgImlmcmFtZSIgdGFnIGlzIG5vdCBzdXBwb3J0ZWQgYnkgeW91ciBicm93c2VyLicsUml0PVsiZm9yZWlnbm9iamVjdCJdLE5pdD1bImRvbWluYW50LWJhc2VsaW5lIl07ZnVuY3Rpb24gWHhlKHQpe2xldCBlPXMkKHQpO3JldHVybiAkeSgpLE16KGUuY29uZmlnPz97fSksZX1vKFh4ZSwicHJvY2Vzc0FuZFNldENvbmZpZ3MiKTthc3luYyBmdW5jdGlvbiBNaXQodCxlKXt3eSgpO3RyeXtsZXR7Y29kZTpyLGNvbmZpZzpufT1YeGUodCk7cmV0dXJue2RpYWdyYW1UeXBlOihhd2FpdCBqeGUocikpLnR5cGUsY29uZmlnOm59fWNhdGNoKHIpe2lmKGU/LnN1cHByZXNzRXJyb3JzKXJldHVybiExO3Rocm93IHJ9fW8oTWl0LCJwYXJzZSIpO3ZhciBXeGU9bygodCxlLHI9W10pPT5gCi4ke3R9ICR7ZX0geyAke3Iuam9pbigiICFpbXBvcnRhbnQ7ICIpfSAhaW1wb3J0YW50OyB9YCwiY3NzSW1wb3J0YW50U3R5bGVzIiksSWl0PW8oKHQsZT1uZXcgTWFwKT0+e2xldCByPSIiO2lmKHQudGhlbWVDU1MhPT12b2lkIDAmJihyKz1gCiR7dC50aGVtZUNTU31gKSx0LmZvbnRGYW1pbHkhPT12b2lkIDAmJihyKz1gCjpyb290IHsgLS1tZXJtYWlkLWZvbnQtZmFtaWx5OiAke3QuZm9udEZhbWlseX19YCksdC5hbHRGb250RmFtaWx5IT09dm9pZCAwJiYocis9YAo6cm9vdCB7IC0tbWVybWFpZC1hbHQtZm9udC1mYW1pbHk6ICR7dC5hbHRGb250RmFtaWx5fX1gKSxlIGluc3RhbmNlb2YgTWFwKXtsZXQgcz10Lmh0bWxMYWJlbHM/P3QuZmxvd2NoYXJ0Py5odG1sTGFiZWxzP1siPiAqIiwic3BhbiJdOlsicmVjdCIsInBvbHlnb24iLCJlbGxpcHNlIiwiY2lyY2xlIiwicGF0aCJdO2UuZm9yRWFjaChsPT57aHIobC5zdHlsZXMpfHxzLmZvckVhY2godT0+e3IrPVd4ZShsLmlkLHUsbC5zdHlsZXMpfSksaHIobC50ZXh0U3R5bGVzKXx8KHIrPVd4ZShsLmlkLCJ0c3BhbiIsKGw/LnRleHRTdHlsZXN8fFtdKS5tYXAodT0+dS5yZXBsYWNlKCJjb2xvciIsImZpbGwiKSkpKX0pfXJldHVybiByfSwiY3JlYXRlQ3NzU3R5bGVzIiksT2l0PW8oKHQsZSxyLG4pPT57bGV0IGk9SWl0KHQsciksYT1NVihlLGksdC50aGVtZVZhcmlhYmxlcyk7cmV0dXJuIEJDKFB4ZShgJHtufXske2F9fWApLEJ4ZSl9LCJjcmVhdGVVc2VyU3R5bGVzIiksUGl0PW8oKHQ9IiIsZSxyKT0+e2xldCBuPXQ7cmV0dXJuIXImJiFlJiYobj1uLnJlcGxhY2UoL21hcmtlci1lbmQ9InVybFwoW1xkKy4vOj0/QS1aYS16LV0qPyMvZywnbWFya2VyLWVuZD0idXJsKCMnKSksbj1uYShuKSxuPW4ucmVwbGFjZSgvPGJyPi9nLCI8YnIvPiIpLG59LCJjbGVhblVwU3ZnQ29kZSIpLEJpdD1vKCh0PSIiLGUpPT57bGV0IHI9ZT8udmlld0JveD8uYmFzZVZhbD8uaGVpZ2h0P2Uudmlld0JveC5iYXNlVmFsLmhlaWdodCsicHgiOkNpdCxuPUh4ZShgPGJvZHkgc3R5bGU9IiR7X2l0fSI+JHt0fTwvYm9keT5gKTtyZXR1cm5gPGlmcmFtZSBzdHlsZT0id2lkdGg6JHtTaXR9O2hlaWdodDoke3J9OyR7QWl0fSIgc3JjPSJkYXRhOnRleHQvaHRtbDtjaGFyc2V0PVVURi04O2Jhc2U2NCwke259IiBzYW5kYm94PSIke0RpdH0iPgogICR7TGl0fQo8L2lmcmFtZT5gfSwicHV0SW50b0lGcmFtZSIpLHF4ZT1vKCh0LGUscixuLGkpPT57bGV0IGE9dC5hcHBlbmQoImRpdiIpO2EuYXR0cigiaWQiLHIpLG4mJmEuYXR0cigic3R5bGUiLG4pO2xldCBzPWEuYXBwZW5kKCJzdmciKS5hdHRyKCJpZCIsZSkuYXR0cigid2lkdGgiLCIxMDAlIikuYXR0cigieG1sbnMiLHdpdCk7cmV0dXJuIGkmJnMuYXR0cigieG1sbnM6eGxpbmsiLGkpLHMuYXBwZW5kKCJnIiksdH0sImFwcGVuZERpdlN2Z0ciKTtmdW5jdGlvbiBZeGUodCxlKXtyZXR1cm4gdC5hcHBlbmQoImlmcmFtZSIpLmF0dHIoImlkIixlKS5hdHRyKCJzdHlsZSIsIndpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7IikuYXR0cigic2FuZGJveCIsIiIpfW8oWXhlLCJzYW5kYm94ZWRJZnJhbWUiKTt2YXIgRml0PW8oKHQsZSxyLG4pPT57dC5nZXRFbGVtZW50QnlJZChlKT8ucmVtb3ZlKCksdC5nZXRFbGVtZW50QnlJZChyKT8ucmVtb3ZlKCksdC5nZXRFbGVtZW50QnlJZChuKT8ucmVtb3ZlKCl9LCJyZW1vdmVFeGlzdGluZ0VsZW1lbnRzIiksJGl0PW8oYXN5bmMgZnVuY3Rpb24odCxlLHIpe3d5KCk7bGV0IG49WHhlKGUpO2U9bi5jb2RlO2xldCBpPXRyKCk7WC5kZWJ1ZyhpKSxlLmxlbmd0aD4oaT8ubWF4VGV4dFNpemU/P3ZpdCkmJihlPXhpdCk7bGV0IGE9IiMiK3Qscz0iaSIrdCxsPSIjIitzLHU9ImQiK3QsaD0iIyIrdSxmPW8oKCk9PntsZXQgTD1HZShwP2w6aCkubm9kZSgpO0wmJiJyZW1vdmUiaW4gTCYmTC5yZW1vdmUoKX0sInJlbW92ZVRlbXBFbGVtZW50cyIpLGQ9R2UoImJvZHkiKSxwPWkuc2VjdXJpdHlMZXZlbD09PWJpdCxtPWkuc2VjdXJpdHlMZXZlbD09PVRpdCxnPWkuZm9udEZhbWlseTtpZihyIT09dm9pZCAwKXtpZihyJiYoci5pbm5lckhUTUw9IiIpLHApe2xldCBrPVl4ZShHZShyKSxzKTtkPUdlKGsubm9kZXMoKVswXS5jb250ZW50RG9jdW1lbnQuYm9keSksZC5ub2RlKCkuc3R5bGUubWFyZ2luPTB9ZWxzZSBkPUdlKHIpO3F4ZShkLHQsdSxgZm9udC1mYW1pbHk6ICR7Z31gLGtpdCl9ZWxzZXtpZihGaXQoZG9jdW1lbnQsdCx1LHMpLHApe2xldCBrPVl4ZShHZSgiYm9keSIpLHMpO2Q9R2Uoay5ub2RlcygpWzBdLmNvbnRlbnREb2N1bWVudC5ib2R5KSxkLm5vZGUoKS5zdHlsZS5tYXJnaW49MH1lbHNlIGQ9R2UoImJvZHkiKTtxeGUoZCx0LHUpfWxldCB5LHY7dHJ5e3k9YXdhaXQgQXkuZnJvbVRleHQoZSx7dGl0bGU6bi50aXRsZX0pfWNhdGNoKGspe2lmKGkuc3VwcHJlc3NFcnJvclJlbmRlcmluZyl0aHJvdyBmKCksazt5PWF3YWl0IEF5LmZyb21UZXh0KCJlcnJvciIpLHY9a31sZXQgeD1kLnNlbGVjdChoKS5ub2RlKCksYj15LnR5cGUsVD14LmZpcnN0Q2hpbGQsUz1ULmZpcnN0Q2hpbGQsdz15LnJlbmRlcmVyLmdldENsYXNzZXM/LihlLHkpLEU9T2l0KGksYix3LGEpLF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtfLmlubmVySFRNTD1FLFQuaW5zZXJ0QmVmb3JlKF8sUyk7dHJ5e2F3YWl0IHkucmVuZGVyZXIuZHJhdyhlLHQsRGIudmVyc2lvbix5KX1jYXRjaChrKXt0aHJvdyBpLnN1cHByZXNzRXJyb3JSZW5kZXJpbmc/ZigpOmEwZS5kcmF3KGUsdCxEYi52ZXJzaW9uKSxrfWxldCBDPWQuc2VsZWN0KGAke2h9IHN2Z2ApLEQ9eS5kYi5nZXRBY2NUaXRsZT8uKCksTz15LmRiLmdldEFjY0Rlc2NyaXB0aW9uPy4oKTtHaXQoYixDLEQsTyksZC5zZWxlY3QoYFtpZD0iJHt0fSJdYCkuc2VsZWN0QWxsKCJmb3JlaWdub2JqZWN0ID4gKiIpLmF0dHIoInhtbG5zIixFaXQpO2xldCBSPWQuc2VsZWN0KGgpLm5vZGUoKS5pbm5lckhUTUw7aWYoWC5kZWJ1ZygiY29uZmlnLmFycm93TWFya2VyQWJzb2x1dGUiLGkuYXJyb3dNYXJrZXJBYnNvbHV0ZSksUj1QaXQoUixwLGRyKGkuYXJyb3dNYXJrZXJBYnNvbHV0ZSkpLHApe2xldCBrPWQuc2VsZWN0KGgrIiBzdmciKS5ub2RlKCk7Uj1CaXQoUixrKX1lbHNlIG18fChSPW1oLnNhbml0aXplKFIse0FERF9UQUdTOlJpdCxBRERfQVRUUjpOaXQsSFRNTF9JTlRFR1JBVElPTl9QT0lOVFM6e2ZvcmVpZ25vYmplY3Q6ITB9fSkpO2lmKEd4ZSgpLHYpdGhyb3cgdjtyZXR1cm4gZigpLHtkaWFncmFtVHlwZTpiLHN2ZzpSLGJpbmRGdW5jdGlvbnM6eS5kYi5iaW5kRnVuY3Rpb25zfX0sInJlbmRlciIpO2Z1bmN0aW9uIHppdCh0PXt9KXtsZXQgZT1Vbih7fSx0KTtlPy5mb250RmFtaWx5JiYhZS50aGVtZVZhcmlhYmxlcz8uZm9udEZhbWlseSYmKGUudGhlbWVWYXJpYWJsZXN8fChlLnRoZW1lVmFyaWFibGVzPXt9KSxlLnRoZW1lVmFyaWFibGVzLmZvbnRGYW1pbHk9ZS5mb250RmFtaWx5KSxMeihlKSxlPy50aGVtZSYmZS50aGVtZSBpbiBFbz9lLnRoZW1lVmFyaWFibGVzPUVvW2UudGhlbWVdLmdldFRoZW1lVmFyaWFibGVzKGUudGhlbWVWYXJpYWJsZXMpOmUmJihlLnRoZW1lVmFyaWFibGVzPUVvLmRlZmF1bHQuZ2V0VGhlbWVWYXJpYWJsZXMoZS50aGVtZVZhcmlhYmxlcykpO2xldCByPXR5cGVvZiBlPT0ib2JqZWN0Ij9UNyhlKTp3NygpO0R5KHIubG9nTGV2ZWwpLHd5KCl9byh6aXQsImluaXRpYWxpemUiKTt2YXIganhlPW8oKHQsZT17fSk9PntsZXR7Y29kZTpyfT1zJCh0KTtyZXR1cm4gQXkuZnJvbVRleHQocixlKX0sImdldERpYWdyYW1Gcm9tVGV4dCIpO2Z1bmN0aW9uIEdpdCh0LGUscixuKXtGeGUoZSx0KSwkeGUoZSxyLG4sZS5hdHRyKCJpZCIpKX1vKEdpdCwiYWRkQTExeUluZm8iKTt2YXIgS2Y9T2JqZWN0LmZyZWV6ZSh7cmVuZGVyOiRpdCxwYXJzZTpNaXQsZ2V0RGlhZ3JhbUZyb21UZXh0Omp4ZSxpbml0aWFsaXplOnppdCxnZXRDb25maWc6dHIsc2V0Q29uZmlnOmEzLGdldFNpdGVDb25maWc6dzcsdXBkYXRlU2l0ZUNvbmZpZzpSeixyZXNldDpvKCgpPT57JHkoKX0sInJlc2V0IiksZ2xvYmFsUmVzZXQ6bygoKT0+eyR5KHBoKX0sImdsb2JhbFJlc2V0IiksZGVmYXVsdENvbmZpZzpwaH0pO0R5KHRyKCkubG9nTGV2ZWwpOyR5KHRyKCkpO3JwKCk7ZXIoKTt2YXIgVml0PW8oKHQsZSxyKT0+e1gud2Fybih0KSxJOSh0KT8ociYmcih0LnN0cix0Lmhhc2gpLGUucHVzaCh7Li4udCxtZXNzYWdlOnQuc3RyLGVycm9yOnR9KSk6KHImJnIodCksdCBpbnN0YW5jZW9mIEVycm9yJiZlLnB1c2goe3N0cjp0Lm1lc3NhZ2UsbWVzc2FnZTp0Lm1lc3NhZ2UsaGFzaDp0Lm5hbWUsZXJyb3I6dH0pKX0sImhhbmRsZUVycm9yIiksS3hlPW8oYXN5bmMgZnVuY3Rpb24odD17cXVlcnlTZWxlY3RvcjoiLm1lcm1haWQifSl7dHJ5e2F3YWl0IFVpdCh0KX1jYXRjaChlKXtpZihJOShlKSYmWC5lcnJvcihlLnN0ciksY2gucGFyc2VFcnJvciYmY2gucGFyc2VFcnJvcihlKSwhdC5zdXBwcmVzc0Vycm9ycyl0aHJvdyBYLmVycm9yKCJVc2UgdGhlIHN1cHByZXNzRXJyb3JzIG9wdGlvbiB0byBzdXBwcmVzcyB0aGVzZSBlcnJvcnMiKSxlfX0sInJ1biIpLFVpdD1vKGFzeW5jIGZ1bmN0aW9uKHtwb3N0UmVuZGVyQ2FsbGJhY2s6dCxxdWVyeVNlbGVjdG9yOmUsbm9kZXM6cn09e3F1ZXJ5U2VsZWN0b3I6Ii5tZXJtYWlkIn0pe2xldCBuPUtmLmdldENvbmZpZygpO1guZGVidWcoYCR7dD8iIjoiTm8gIn1DYWxsYmFjayBmdW5jdGlvbiBmb3VuZGApO2xldCBpO2lmKHIpaT1yO2Vsc2UgaWYoZSlpPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIk5vZGVzIGFuZCBxdWVyeVNlbGVjdG9yIGFyZSBib3RoIHVuZGVmaW5lZCIpO1guZGVidWcoYEZvdW5kICR7aS5sZW5ndGh9IGRpYWdyYW1zYCksbj8uc3RhcnRPbkxvYWQhPT12b2lkIDAmJihYLmRlYnVnKCJTdGFydCBPbiBMb2FkOiAiK24/LnN0YXJ0T25Mb2FkKSxLZi51cGRhdGVTaXRlQ29uZmlnKHtzdGFydE9uTG9hZDpuPy5zdGFydE9uTG9hZH0pKTtsZXQgYT1uZXcgVnQuSW5pdElER2VuZXJhdG9yKG4uZGV0ZXJtaW5pc3RpY0lkcyxuLmRldGVybWluaXN0aWNJRFNlZWQpLHMsbD1bXTtmb3IobGV0IHUgb2YgQXJyYXkuZnJvbShpKSl7WC5pbmZvKCJSZW5kZXJpbmcgZGlhZ3JhbTogIit1LmlkKTtpZih1LmdldEF0dHJpYnV0ZSgiZGF0YS1wcm9jZXNzZWQiKSljb250aW51ZTt1LnNldEF0dHJpYnV0ZSgiZGF0YS1wcm9jZXNzZWQiLCJ0cnVlIik7bGV0IGg9YG1lcm1haWQtJHthLm5leHQoKX1gO3M9dS5pbm5lckhUTUwscz1qNChWdC5lbnRpdHlEZWNvZGUocykpLnRyaW0oKS5yZXBsYWNlKC88YnJccypcLz8+L2dpLCI8YnIvPiIpO2xldCBmPVZ0LmRldGVjdEluaXQocyk7ZiYmWC5kZWJ1ZygiRGV0ZWN0ZWQgZWFybHkgcmVpbml0OiAiLGYpO3RyeXtsZXR7c3ZnOmQsYmluZEZ1bmN0aW9uczpwfT1hd2FpdCBlYmUoaCxzLHUpO3UuaW5uZXJIVE1MPWQsdCYmYXdhaXQgdChoKSxwJiZwKHUpfWNhdGNoKGQpe1ZpdChkLGwsY2gucGFyc2VFcnJvcil9fWlmKGwubGVuZ3RoPjApdGhyb3cgbFswXX0sInJ1blRocm93c0Vycm9ycyIpLFF4ZT1vKGZ1bmN0aW9uKHQpe0tmLmluaXRpYWxpemUodCl9LCJpbml0aWFsaXplIiksSGl0PW8oYXN5bmMgZnVuY3Rpb24odCxlLHIpe1gud2FybigibWVybWFpZC5pbml0IGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgcnVuIGluc3RlYWQuIiksdCYmUXhlKHQpO2xldCBuPXtwb3N0UmVuZGVyQ2FsbGJhY2s6cixxdWVyeVNlbGVjdG9yOiIubWVybWFpZCJ9O3R5cGVvZiBlPT0ic3RyaW5nIj9uLnF1ZXJ5U2VsZWN0b3I9ZTplJiYoZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50P24ubm9kZXM9W2VdOm4ubm9kZXM9ZSksYXdhaXQgS3hlKG4pfSwiaW5pdCIpLFdpdD1vKGFzeW5jKHQse2xhenlMb2FkOmU9ITB9PXt9KT0+e3d5KCksTHkoLi4udCksZT09PSExJiZhd2FpdCB2eGUoKX0sInJlZ2lzdGVyRXh0ZXJuYWxEaWFncmFtcyIpLFp4ZT1vKGZ1bmN0aW9uKCl7aWYoY2guc3RhcnRPbkxvYWQpe2xldHtzdGFydE9uTG9hZDp0fT1LZi5nZXRDb25maWcoKTt0JiZjaC5ydW4oKS5jYXRjaChlPT5YLmVycm9yKCJNZXJtYWlkIGZhaWxlZCB0byBpbml0aWFsaXplIixlKSl9fSwiY29udGVudExvYWRlZCIpO2lmKHR5cGVvZiBkb2N1bWVudDwidSIpe3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixaeGUsITEpfXZhciBxaXQ9byhmdW5jdGlvbih0KXtjaC5wYXJzZUVycm9yPXR9LCJzZXRQYXJzZUVycm9ySGFuZGxlciIpLEZDPVtdLG8kPSExLEp4ZT1vKGFzeW5jKCk9PntpZighbyQpe2ZvcihvJD0hMDtGQy5sZW5ndGg+MDspe2xldCB0PUZDLnNoaWZ0KCk7aWYodCl0cnl7YXdhaXQgdCgpfWNhdGNoKGUpe1guZXJyb3IoIkVycm9yIGV4ZWN1dGluZyBxdWV1ZSIsZSl9fW8kPSExfX0sImV4ZWN1dGVRdWV1ZSIpLFlpdD1vKGFzeW5jKHQsZSk9Pm5ldyBQcm9taXNlKChyLG4pPT57bGV0IGk9bygoKT0+bmV3IFByb21pc2UoKGEscyk9PntLZi5wYXJzZSh0LGUpLnRoZW4obD0+e2EobCkscihsKX0sbD0+e1guZXJyb3IoIkVycm9yIHBhcnNpbmciLGwpLGNoLnBhcnNlRXJyb3I/LihsKSxzKGwpLG4obCl9KX0pLCJwZXJmb3JtQ2FsbCIpO0ZDLnB1c2goaSksSnhlKCkuY2F0Y2gobil9KSwicGFyc2UiKSxlYmU9bygodCxlLHIpPT5uZXcgUHJvbWlzZSgobixpKT0+e2xldCBhPW8oKCk9Pm5ldyBQcm9taXNlKChzLGwpPT57S2YucmVuZGVyKHQsZSxyKS50aGVuKHU9PntzKHUpLG4odSl9LHU9PntYLmVycm9yKCJFcnJvciBwYXJzaW5nIix1KSxjaC5wYXJzZUVycm9yPy4odSksbCh1KSxpKHUpfSl9KSwicGVyZm9ybUNhbGwiKTtGQy5wdXNoKGEpLEp4ZSgpLmNhdGNoKGkpfSksInJlbmRlciIpLFhpdD1vKCgpPT5PYmplY3Qua2V5cyhhdSkubWFwKHQ9Pih7aWQ6dH0pKSwiZ2V0UmVnaXN0ZXJlZERpYWdyYW1zTWV0YWRhdGEiKSxjaD17c3RhcnRPbkxvYWQ6ITAsbWVybWFpZEFQSTpLZixwYXJzZTpZaXQscmVuZGVyOmViZSxpbml0OkhpdCxydW46S3hlLHJlZ2lzdGVyRXh0ZXJuYWxEaWFncmFtczpXaXQscmVnaXN0ZXJMYXlvdXRMb2FkZXJzOnROLGluaXRpYWxpemU6UXhlLHBhcnNlRXJyb3I6dm9pZCAwLGNvbnRlbnRMb2FkZWQ6WnhlLHNldFBhcnNlRXJyb3JIYW5kbGVyOnFpdCxkZXRlY3RUeXBlOm0wLHJlZ2lzdGVySWNvblBhY2tzOlg0LGdldFJlZ2lzdGVyZWREaWFncmFtc01ldGFkYXRhOlhpdH0saml0PWNoO3JldHVybiB1YmUoS2l0KTt9KSgpOwovKiEgQ2hlY2sgaWYgcHJldmlvdXNseSBwcm9jZXNzZWQgKi8KLyohCiAqIFdhaXQgZm9yIGRvY3VtZW50IGxvYWRlZCBiZWZvcmUgc3RhcnRpbmcgdGhlIGV4ZWN1dGlvbgogKi8KLyohIEJ1bmRsZWQgbGljZW5zZSBpbmZvcm1hdGlvbjoKCmRvbXB1cmlmeS9kaXN0L3B1cmlmeS5lcy5tanM6CiAgKCohIEBsaWNlbnNlIERPTVB1cmlmeSAzLjIuNSB8IChjKSBDdXJlNTMgYW5kIG90aGVyIGNvbnRyaWJ1dG9ycyB8IFJlbGVhc2VkIHVuZGVyIHRoZSBBcGFjaGUgbGljZW5zZSAyLjAgYW5kIE1vemlsbGEgUHVibGljIExpY2Vuc2UgMi4wIHwgZ2l0aHViLmNvbS9jdXJlNTMvRE9NUHVyaWZ5L2Jsb2IvMy4yLjUvTElDRU5TRSAqKQoKanMteWFtbC9kaXN0L2pzLXlhbWwubWpzOgogICgqISBqcy15YW1sIDQuMS4wIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlY2EvanMteWFtbCBAbGljZW5zZSBNSVQgKikKCmxvZGFzaC1lcy9sb2Rhc2guanM6CiAgKCoqCiAgICogQGxpY2Vuc2UKICAgKiBMb2Rhc2ggKEN1c3RvbSBCdWlsZCkgPGh0dHBzOi8vbG9kYXNoLmNvbS8+CiAgICogQnVpbGQ6IGBsb2Rhc2ggbW9kdWxhcml6ZSBleHBvcnRzPSJlcyIgLW8gLi9gCiAgICogQ29weXJpZ2h0IE9wZW5KUyBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMgPGh0dHBzOi8vb3BlbmpzZi5vcmcvPgogICAqIFJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlIDxodHRwczovL2xvZGFzaC5jb20vbGljZW5zZT4KICAgKiBCYXNlZCBvbiBVbmRlcnNjb3JlLmpzIDEuOC4zIDxodHRwOi8vdW5kZXJzY29yZWpzLm9yZy9MSUNFTlNFPgogICAqIENvcHlyaWdodCBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9ycwogICAqKQoKY3l0b3NjYXBlL2Rpc3QvY3l0b3NjYXBlLmVzbS5tanM6CiAgKCohCiAgRW1iZWRkYWJsZSBNaW5pbXVtIFN0cmljdGx5LUNvbXBsaWFudCBQcm9taXNlcy9BKyAxLjEuMSBUaGVuYWJsZQogIENvcHlyaWdodCAoYykgMjAxMy0yMDE0IFJhbGYgUy4gRW5nZWxzY2hhbGwgKGh0dHA6Ly9lbmdlbHNjaGFsbC5jb20pCiAgTGljZW5zZWQgdW5kZXIgVGhlIE1JVCBMaWNlbnNlIChodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUKQogICopCiAgKCohCiAgRXZlbnQgb2JqZWN0IGJhc2VkIG9uIGpRdWVyeSBldmVudHMsIE1JVCBsaWNlbnNlCiAgCiAgaHR0cHM6Ly9qcXVlcnkub3JnL2xpY2Vuc2UvCiAgaHR0cHM6Ly90bGRybGVnYWwuY29tL2xpY2Vuc2UvbWl0LWxpY2Vuc2UKICBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS9ibG9iL21hc3Rlci9zcmMvZXZlbnQuanMKICAqKQogICgqISBCZXppZXIgY3VydmUgZnVuY3Rpb24gZ2VuZXJhdG9yLiBDb3B5cmlnaHQgR2FldGFuIFJlbmF1ZGVhdS4gTUlUIExpY2Vuc2U6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTUlUX0xpY2Vuc2UgKikKICAoKiEgUnVuZ2UtS3V0dGEgc3ByaW5nIHBoeXNpY3MgZnVuY3Rpb24gZ2VuZXJhdG9yLiBBZGFwdGVkIGZyb20gRnJhbWVyLmpzLCBjb3B5cmlnaHQgS29lbiBCb2suIE1JVCBMaWNlbnNlOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL01JVF9MaWNlbnNlICopCiovCmdsb2JhbFRoaXNbIm1lcm1haWQiXSA9IGdsb2JhbFRoaXMuX19lc2J1aWxkX2VzbV9tZXJtYWlkX25tWyJtZXJtYWlkIl0uZGVmYXVsdDsK`; \ 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 3912451f49..260931c5e0 100644 --- a/packages/renderer/assets/mermaid/mermaid.min.js +++ b/packages/renderer/assets/mermaid/mermaid.min.js @@ -1,16 +1,16 @@ -"use strict";var __esbuild_esm_mermaid_nm;(__esbuild_esm_mermaid_nm||={}).mermaid=(()=>{var I2e=Object.create;var Ay=Object.defineProperty;var O2e=Object.getOwnPropertyDescriptor;var P2e=Object.getOwnPropertyNames;var B2e=Object.getPrototypeOf,F2e=Object.prototype.hasOwnProperty;var o=(t,e)=>Ay(t,"name",{value:e,configurable:!0});var N=(t,e)=>()=>(t&&(e=t(t=0)),e);var Ii=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),hr=(t,e)=>{for(var r in e)Ay(t,r,{get:e[r],enumerable:!0})},B4=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of P2e(e))!F2e.call(t,i)&&i!==r&&Ay(t,i,{get:()=>e[i],enumerable:!(n=O2e(e,i))||n.enumerable});return t},Sr=(t,e,r)=>(B4(t,e,"default"),r&&B4(r,e,"default")),Sa=(t,e,r)=>(r=t!=null?I2e(B2e(t)):{},B4(e||!t||!t.__esModule?Ay(r,"default",{value:t,enumerable:!0}):r,t)),$2e=t=>B4(Ay({},"__esModule",{value:!0}),t);var F4=Ii((LC,RC)=>{"use strict";(function(t,e){typeof LC=="object"&&typeof RC<"u"?RC.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs=e()})(LC,function(){"use strict";var t=1e3,e=6e4,r=36e5,n="millisecond",i="second",a="minute",s="hour",l="day",u="week",h="month",f="quarter",d="year",p="date",m="Invalid Date",g=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,y=/\[([^\]]+)]|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,v={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:o(function(k){var D=["th","st","nd","rd"],R=k%100;return"["+k+(D[(R-20)%10]||D[R]||D[0])+"]"},"ordinal")},x=o(function(k,D,R){var O=String(k);return!O||O.length>=D?k:""+Array(D+1-O.length).join(R)+k},"m"),b={s:x,z:o(function(k){var D=-k.utcOffset(),R=Math.abs(D),O=Math.floor(R/60),M=R%60;return(D<=0?"+":"-")+x(O,2,"0")+":"+x(M,2,"0")},"z"),m:o(function k(D,R){if(D.date()1)return k(B[0])}else{var F=D.name;C[F]=D,M=F}return!O&&M&&(w=M),M||!O&&w},"t"),S=o(function(k,D){if(E(k))return k.clone();var R=typeof D=="object"?D:{};return R.date=k,R.args=arguments,new I(R)},"O"),_=b;_.l=A,_.i=E,_.w=function(k,D){return S(k,{locale:D.$L,utc:D.$u,x:D.$x,$offset:D.$offset})};var I=function(){function k(R){this.$L=A(R.locale,null,!0),this.parse(R),this.$x=this.$x||R.x||{},this[T]=!0}o(k,"M");var D=k.prototype;return D.parse=function(R){this.$d=function(O){var M=O.date,P=O.utc;if(M===null)return new Date(NaN);if(_.u(M))return new Date;if(M instanceof Date)return new Date(M);if(typeof M=="string"&&!/Z$/i.test(M)){var B=M.match(g);if(B){var F=B[2]-1||0,z=(B[7]||"0").substring(0,3);return P?new Date(Date.UTC(B[1],F,B[3]||1,B[4]||0,B[5]||0,B[6]||0,z)):new Date(B[1],F,B[3]||1,B[4]||0,B[5]||0,B[6]||0,z)}}return new Date(M)}(R),this.init()},D.init=function(){var R=this.$d;this.$y=R.getFullYear(),this.$M=R.getMonth(),this.$D=R.getDate(),this.$W=R.getDay(),this.$H=R.getHours(),this.$m=R.getMinutes(),this.$s=R.getSeconds(),this.$ms=R.getMilliseconds()},D.$utils=function(){return _},D.isValid=function(){return this.$d.toString()!==m},D.isSame=function(R,O){var M=S(R);return this.startOf(O)<=M&&M<=this.endOf(O)},D.isAfter=function(R,O){return S(R){"use strict";DF=Sa(F4(),1),iu={trace:0,debug:1,info:2,warn:3,error:4,fatal:5},X={trace:o((...t)=>{},"trace"),debug:o((...t)=>{},"debug"),info:o((...t)=>{},"info"),warn:o((...t)=>{},"warn"),error:o((...t)=>{},"error"),fatal:o((...t)=>{},"fatal")},_y=o(function(t="fatal"){let e=iu.fatal;typeof t=="string"?t.toLowerCase()in iu&&(e=iu[t]):typeof t=="number"&&(e=t),X.trace=()=>{},X.debug=()=>{},X.info=()=>{},X.warn=()=>{},X.error=()=>{},X.fatal=()=>{},e<=iu.fatal&&(X.fatal=console.error?console.error.bind(console,To("FATAL"),"color: orange"):console.log.bind(console,"\x1B[35m",To("FATAL"))),e<=iu.error&&(X.error=console.error?console.error.bind(console,To("ERROR"),"color: orange"):console.log.bind(console,"\x1B[31m",To("ERROR"))),e<=iu.warn&&(X.warn=console.warn?console.warn.bind(console,To("WARN"),"color: orange"):console.log.bind(console,"\x1B[33m",To("WARN"))),e<=iu.info&&(X.info=console.info?console.info.bind(console,To("INFO"),"color: lightblue"):console.log.bind(console,"\x1B[34m",To("INFO"))),e<=iu.debug&&(X.debug=console.debug?console.debug.bind(console,To("DEBUG"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",To("DEBUG"))),e<=iu.trace&&(X.trace=console.debug?console.debug.bind(console,To("TRACE"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",To("TRACE")))},"setLogLevel"),To=o(t=>`%c${(0,DF.default)().format("ss.SSS")} : ${t} : `,"format")});var z2e,o0,NC,LF,$4=N(()=>{"use strict";z2e=Object.freeze({left:0,top:0,width:16,height:16}),o0=Object.freeze({rotate:0,vFlip:!1,hFlip:!1}),NC=Object.freeze({...z2e,...o0}),LF=Object.freeze({...NC,body:"",hidden:!1})});var G2e,RF,NF=N(()=>{"use strict";$4();G2e=Object.freeze({width:null,height:null}),RF=Object.freeze({...G2e,...o0})});var MC,z4,MF=N(()=>{"use strict";MC=o((t,e,r,n="")=>{let i=t.split(":");if(t.slice(0,1)==="@"){if(i.length<2||i.length>3)return null;n=i.shift().slice(1)}if(i.length>3||!i.length)return null;if(i.length>1){let l=i.pop(),u=i.pop(),h={provider:i.length>0?i[0]:n,prefix:u,name:l};return e&&!z4(h)?null:h}let a=i[0],s=a.split("-");if(s.length>1){let l={provider:n,prefix:s.shift(),name:s.join("-")};return e&&!z4(l)?null:l}if(r&&n===""){let l={provider:n,prefix:"",name:a};return e&&!z4(l,r)?null:l}return null},"stringToIcon"),z4=o((t,e)=>t?!!((e&&t.prefix===""||t.prefix)&&t.name):!1,"validateIconName")});function IF(t,e){let r={};!t.hFlip!=!e.hFlip&&(r.hFlip=!0),!t.vFlip!=!e.vFlip&&(r.vFlip=!0);let n=((t.rotate||0)+(e.rotate||0))%4;return n&&(r.rotate=n),r}var OF=N(()=>{"use strict";o(IF,"mergeIconTransformations")});function IC(t,e){let r=IF(t,e);for(let n in LF)n in o0?n in t&&!(n in r)&&(r[n]=o0[n]):n in e?r[n]=e[n]:n in t&&(r[n]=t[n]);return r}var PF=N(()=>{"use strict";$4();OF();o(IC,"mergeIconData")});function BF(t,e){let r=t.icons,n=t.aliases||Object.create(null),i=Object.create(null);function a(s){if(r[s])return i[s]=[];if(!(s in i)){i[s]=null;let l=n[s]&&n[s].parent,u=l&&a(l);u&&(i[s]=[l].concat(u))}return i[s]}return o(a,"resolve"),(e||Object.keys(r).concat(Object.keys(n))).forEach(a),i}var FF=N(()=>{"use strict";o(BF,"getIconsTree")});function $F(t,e,r){let n=t.icons,i=t.aliases||Object.create(null),a={};function s(l){a=IC(n[l]||i[l],a)}return o(s,"parse"),s(e),r.forEach(s),IC(t,a)}function OC(t,e){if(t.icons[e])return $F(t,e,[]);let r=BF(t,[e])[e];return r?$F(t,e,r):null}var zF=N(()=>{"use strict";PF();FF();o($F,"internalGetIconData");o(OC,"getIconData")});function PC(t,e,r){if(e===1)return t;if(r=r||100,typeof t=="number")return Math.ceil(t*e*r)/r;if(typeof t!="string")return t;let n=t.split(V2e);if(n===null||!n.length)return t;let i=[],a=n.shift(),s=U2e.test(a);for(;;){if(s){let l=parseFloat(a);isNaN(l)?i.push(a):i.push(Math.ceil(l*e*r)/r)}else i.push(a);if(a=n.shift(),a===void 0)return i.join("");s=!s}}var V2e,U2e,GF=N(()=>{"use strict";V2e=/(-?[0-9.]*[0-9]+[0-9.]*)/g,U2e=/^-?[0-9.]*[0-9]+[0-9.]*$/g;o(PC,"calculateSize")});function H2e(t,e="defs"){let r="",n=t.indexOf("<"+e);for(;n>=0;){let i=t.indexOf(">",n),a=t.indexOf("",a);if(s===-1)break;r+=t.slice(i+1,a).trim(),t=t.slice(0,n).trim()+t.slice(s+1)}return{defs:r,content:t}}function W2e(t,e){return t?""+t+""+e:e}function VF(t,e,r){let n=H2e(t);return W2e(n.defs,e+n.content+r)}var UF=N(()=>{"use strict";o(H2e,"splitSVGDefs");o(W2e,"mergeDefsAndContent");o(VF,"wrapSVGContent")});function BC(t,e){let r={...NC,...t},n={...RF,...e},i={left:r.left,top:r.top,width:r.width,height:r.height},a=r.body;[r,n].forEach(y=>{let v=[],x=y.hFlip,b=y.vFlip,w=y.rotate;x?b?w+=2:(v.push("translate("+(i.width+i.left).toString()+" "+(0-i.top).toString()+")"),v.push("scale(-1 1)"),i.top=i.left=0):b&&(v.push("translate("+(0-i.left).toString()+" "+(i.height+i.top).toString()+")"),v.push("scale(1 -1)"),i.top=i.left=0);let C;switch(w<0&&(w-=Math.floor(w/4)*4),w=w%4,w){case 1:C=i.height/2+i.top,v.unshift("rotate(90 "+C.toString()+" "+C.toString()+")");break;case 2:v.unshift("rotate(180 "+(i.width/2+i.left).toString()+" "+(i.height/2+i.top).toString()+")");break;case 3:C=i.width/2+i.left,v.unshift("rotate(-90 "+C.toString()+" "+C.toString()+")");break}w%2===1&&(i.left!==i.top&&(C=i.left,i.left=i.top,i.top=C),i.width!==i.height&&(C=i.width,i.width=i.height,i.height=C)),v.length&&(a=VF(a,'',""))});let s=n.width,l=n.height,u=i.width,h=i.height,f,d;s===null?(d=l===null?"1em":l==="auto"?h:l,f=PC(d,u/h)):(f=s==="auto"?u:s,d=l===null?PC(f,h/u):l==="auto"?h:l);let p={},m=o((y,v)=>{q2e(v)||(p[y]=v.toString())},"setAttr");m("width",f),m("height",d);let g=[i.left,i.top,u,h];return p.viewBox=g.join(" "),{attributes:p,viewBox:g,body:a}}var q2e,HF=N(()=>{"use strict";$4();NF();GF();UF();q2e=o(t=>t==="unset"||t==="undefined"||t==="none","isUnsetKeyword");o(BC,"iconToSVG")});function FC(t,e=X2e){let r=[],n;for(;n=Y2e.exec(t);)r.push(n[1]);if(!r.length)return t;let i="suffix"+(Math.random()*16777216|Date.now()).toString(16);return r.forEach(a=>{let s=typeof e=="function"?e(a):e+(j2e++).toString(),l=a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");t=t.replace(new RegExp('([#;"])('+l+')([")]|\\.[a-z])',"g"),"$1"+s+i+"$3")}),t=t.replace(new RegExp(i,"g"),""),t}var Y2e,X2e,j2e,WF=N(()=>{"use strict";Y2e=/\sid="(\S+)"/g,X2e="IconifyId"+Date.now().toString(16)+(Math.random()*16777216|0).toString(16),j2e=0;o(FC,"replaceIDs")});function $C(t,e){let r=t.indexOf("xlink:")===-1?"":' xmlns:xlink="http://www.w3.org/1999/xlink"';for(let n in e)r+=" "+n+'="'+e[n]+'"';return'"+t+""}var qF=N(()=>{"use strict";o($C,"iconToHTML")});var XF=Ii((jnt,YF)=>{"use strict";var l0=1e3,c0=l0*60,u0=c0*60,Qf=u0*24,K2e=Qf*7,Q2e=Qf*365.25;YF.exports=function(t,e){e=e||{};var r=typeof t;if(r==="string"&&t.length>0)return Z2e(t);if(r==="number"&&isFinite(t))return e.long?exe(t):J2e(t);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(t))};function Z2e(t){if(t=String(t),!(t.length>100)){var e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(t);if(e){var r=parseFloat(e[1]),n=(e[2]||"ms").toLowerCase();switch(n){case"years":case"year":case"yrs":case"yr":case"y":return r*Q2e;case"weeks":case"week":case"w":return r*K2e;case"days":case"day":case"d":return r*Qf;case"hours":case"hour":case"hrs":case"hr":case"h":return r*u0;case"minutes":case"minute":case"mins":case"min":case"m":return r*c0;case"seconds":case"second":case"secs":case"sec":case"s":return r*l0;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return r;default:return}}}}o(Z2e,"parse");function J2e(t){var e=Math.abs(t);return e>=Qf?Math.round(t/Qf)+"d":e>=u0?Math.round(t/u0)+"h":e>=c0?Math.round(t/c0)+"m":e>=l0?Math.round(t/l0)+"s":t+"ms"}o(J2e,"fmtShort");function exe(t){var e=Math.abs(t);return e>=Qf?G4(t,e,Qf,"day"):e>=u0?G4(t,e,u0,"hour"):e>=c0?G4(t,e,c0,"minute"):e>=l0?G4(t,e,l0,"second"):t+" ms"}o(exe,"fmtLong");function G4(t,e,r,n){var i=e>=r*1.5;return Math.round(t/r)+" "+n+(i?"s":"")}o(G4,"plural")});var KF=Ii((Qnt,jF)=>{"use strict";function txe(t){r.debug=r,r.default=r,r.coerce=u,r.disable=s,r.enable=i,r.enabled=l,r.humanize=XF(),r.destroy=h,Object.keys(t).forEach(f=>{r[f]=t[f]}),r.names=[],r.skips=[],r.formatters={};function e(f){let d=0;for(let p=0;p{if(E==="%%")return"%";C++;let S=r.formatters[A];if(typeof S=="function"){let _=v[C];E=S.call(x,_),v.splice(C,1),C--}return E}),r.formatArgs.call(x,v),(x.log||r.log).apply(x,v)}return o(y,"debug"),y.namespace=f,y.useColors=r.useColors(),y.color=r.selectColor(f),y.extend=n,y.destroy=r.destroy,Object.defineProperty(y,"enabled",{enumerable:!0,configurable:!1,get:o(()=>p!==null?p:(m!==r.namespaces&&(m=r.namespaces,g=r.enabled(f)),g),"get"),set:o(v=>{p=v},"set")}),typeof r.init=="function"&&r.init(y),y}o(r,"createDebug");function n(f,d){let p=r(this.namespace+(typeof d>"u"?":":d)+f);return p.log=this.log,p}o(n,"extend");function i(f){r.save(f),r.namespaces=f,r.names=[],r.skips=[];let d=(typeof f=="string"?f:"").trim().replace(" ",",").split(",").filter(Boolean);for(let p of d)p[0]==="-"?r.skips.push(p.slice(1)):r.names.push(p)}o(i,"enable");function a(f,d){let p=0,m=0,g=-1,y=0;for(;p"-"+d)].join(",");return r.enable(""),f}o(s,"disable");function l(f){for(let d of r.skips)if(a(f,d))return!1;for(let d of r.names)if(a(f,d))return!0;return!1}o(l,"enabled");function u(f){return f instanceof Error?f.stack||f.message:f}o(u,"coerce");function h(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return o(h,"destroy"),r.enable(r.load()),r}o(txe,"setup");jF.exports=txe});var QF=Ii((Xs,V4)=>{"use strict";Xs.formatArgs=nxe;Xs.save=ixe;Xs.load=axe;Xs.useColors=rxe;Xs.storage=sxe();Xs.destroy=(()=>{let t=!1;return()=>{t||(t=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})();Xs.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function rxe(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let t;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&(t=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(t[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}o(rxe,"useColors");function nxe(t){if(t[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+t[0]+(this.useColors?"%c ":" ")+"+"+V4.exports.humanize(this.diff),!this.useColors)return;let e="color: "+this.color;t.splice(1,0,e,"color: inherit");let r=0,n=0;t[0].replace(/%[a-zA-Z%]/g,i=>{i!=="%%"&&(r++,i==="%c"&&(n=r))}),t.splice(n,0,e)}o(nxe,"formatArgs");Xs.log=console.debug||console.log||(()=>{});function ixe(t){try{t?Xs.storage.setItem("debug",t):Xs.storage.removeItem("debug")}catch{}}o(ixe,"save");function axe(){let t;try{t=Xs.storage.getItem("debug")}catch{}return!t&&typeof process<"u"&&"env"in process&&(t=process.env.DEBUG),t}o(axe,"load");function sxe(){try{return localStorage}catch{}}o(sxe,"localstorage");V4.exports=KF()(Xs);var{formatters:oxe}=V4.exports;oxe.j=function(t){try{return JSON.stringify(t)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}});var tit,ZF=N(()=>{"use strict";MF();zF();HF();WF();qF();tit=Sa(QF(),1)});var GC,zC,JF,U4,e$,t$,bs,Yl=N(()=>{"use strict";vt();ZF();GC={body:'?',height:80,width:80},zC=new Map,JF=new Map,U4=o(t=>{for(let e of t){if(!e.name)throw new Error('Invalid icon loader. Must have a "name" property with non-empty string value.');if(X.debug("Registering icon pack:",e.name),"loader"in e)JF.set(e.name,e.loader);else if("icons"in e)zC.set(e.name,e.icons);else throw X.error("Invalid icon loader:",e),new Error('Invalid icon loader. Must have either "icons" or "loader" property.')}},"registerIconPacks"),e$=o(async(t,e)=>{let r=MC(t,!0,e!==void 0);if(!r)throw new Error(`Invalid icon name: ${t}`);let n=r.prefix||e;if(!n)throw new Error(`Icon name must contain a prefix: ${t}`);let i=zC.get(n);if(!i){let s=JF.get(n);if(!s)throw new Error(`Icon set not found: ${r.prefix}`);try{i={...await s(),prefix:n},zC.set(n,i)}catch(l){throw X.error(l),new Error(`Failed to load icon set: ${r.prefix}`)}}let a=OC(i,r.name);if(!a)throw new Error(`Icon not found: ${t}`);return a},"getRegisteredIconData"),t$=o(async t=>{try{return await e$(t),!0}catch{return!1}},"isIconAvailable"),bs=o(async(t,e,r)=>{let n;try{n=await e$(t,e?.fallbackPrefix)}catch(s){X.error(s),n=GC}let i=BC(n,e);return $C(FC(i.body),{...i.attributes,...r})},"getIconSVG")});function H4(t){for(var e=[],r=1;r{var abe=Object.create;var _y=Object.defineProperty;var sbe=Object.getOwnPropertyDescriptor;var obe=Object.getOwnPropertyNames;var lbe=Object.getPrototypeOf,cbe=Object.prototype.hasOwnProperty;var o=(t,e)=>_y(t,"name",{value:e,configurable:!0});var N=(t,e)=>()=>(t&&(e=t(t=0)),e);var Pi=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),ur=(t,e)=>{for(var r in e)_y(t,r,{get:e[r],enumerable:!0})},V4=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of obe(e))!cbe.call(t,i)&&i!==r&&_y(t,i,{get:()=>e[i],enumerable:!(n=sbe(e,i))||n.enumerable});return t},Cr=(t,e,r)=>(V4(t,e,"default"),r&&V4(r,e,"default")),Aa=(t,e,r)=>(r=t!=null?abe(lbe(t)):{},V4(e||!t||!t.__esModule?_y(r,"default",{value:t,enumerable:!0}):r,t)),ube=t=>V4(_y({},"__esModule",{value:!0}),t);var U4=Pi((HC,WC)=>{"use strict";(function(t,e){typeof HC=="object"&&typeof WC<"u"?WC.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs=e()})(HC,function(){"use strict";var t=1e3,e=6e4,r=36e5,n="millisecond",i="second",a="minute",s="hour",l="day",u="week",h="month",f="quarter",d="year",p="date",m="Invalid Date",g=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,y=/\[([^\]]+)]|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,v={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:o(function(k){var L=["th","st","nd","rd"],A=k%100;return"["+k+(L[(A-20)%10]||L[A]||L[0])+"]"},"ordinal")},x=o(function(k,L,A){var I=String(k);return!I||I.length>=L?k:""+Array(L+1-I.length).join(A)+k},"m"),b={s:x,z:o(function(k){var L=-k.utcOffset(),A=Math.abs(L),I=Math.floor(A/60),M=A%60;return(L<=0?"+":"-")+x(I,2,"0")+":"+x(M,2,"0")},"z"),m:o(function k(L,A){if(L.date()1)return k(B[0])}else{var F=L.name;S[F]=L,M=F}return!I&&M&&(T=M),M||!I&&T},"t"),C=o(function(k,L){if(E(k))return k.clone();var A=typeof L=="object"?L:{};return A.date=k,A.args=arguments,new O(A)},"O"),D=b;D.l=_,D.i=E,D.w=function(k,L){return C(k,{locale:L.$L,utc:L.$u,x:L.$x,$offset:L.$offset})};var O=function(){function k(A){this.$L=_(A.locale,null,!0),this.parse(A),this.$x=this.$x||A.x||{},this[w]=!0}o(k,"M");var L=k.prototype;return L.parse=function(A){this.$d=function(I){var M=I.date,P=I.utc;if(M===null)return new Date(NaN);if(D.u(M))return new Date;if(M instanceof Date)return new Date(M);if(typeof M=="string"&&!/Z$/i.test(M)){var B=M.match(g);if(B){var F=B[2]-1||0,z=(B[7]||"0").substring(0,3);return P?new Date(Date.UTC(B[1],F,B[3]||1,B[4]||0,B[5]||0,B[6]||0,z)):new Date(B[1],F,B[3]||1,B[4]||0,B[5]||0,B[6]||0,z)}}return new Date(M)}(A),this.init()},L.init=function(){var A=this.$d;this.$y=A.getFullYear(),this.$M=A.getMonth(),this.$D=A.getDate(),this.$W=A.getDay(),this.$H=A.getHours(),this.$m=A.getMinutes(),this.$s=A.getSeconds(),this.$ms=A.getMilliseconds()},L.$utils=function(){return D},L.isValid=function(){return this.$d.toString()!==m},L.isSame=function(A,I){var M=C(A);return this.startOf(I)<=M&&M<=this.endOf(I)},L.isAfter=function(A,I){return C(A){"use strict";f$=Aa(U4(),1),iu={trace:0,debug:1,info:2,warn:3,error:4,fatal:5},X={trace:o((...t)=>{},"trace"),debug:o((...t)=>{},"debug"),info:o((...t)=>{},"info"),warn:o((...t)=>{},"warn"),error:o((...t)=>{},"error"),fatal:o((...t)=>{},"fatal")},Dy=o(function(t="fatal"){let e=iu.fatal;typeof t=="string"?t.toLowerCase()in iu&&(e=iu[t]):typeof t=="number"&&(e=t),X.trace=()=>{},X.debug=()=>{},X.info=()=>{},X.warn=()=>{},X.error=()=>{},X.fatal=()=>{},e<=iu.fatal&&(X.fatal=console.error?console.error.bind(console,ko("FATAL"),"color: orange"):console.log.bind(console,"\x1B[35m",ko("FATAL"))),e<=iu.error&&(X.error=console.error?console.error.bind(console,ko("ERROR"),"color: orange"):console.log.bind(console,"\x1B[31m",ko("ERROR"))),e<=iu.warn&&(X.warn=console.warn?console.warn.bind(console,ko("WARN"),"color: orange"):console.log.bind(console,"\x1B[33m",ko("WARN"))),e<=iu.info&&(X.info=console.info?console.info.bind(console,ko("INFO"),"color: lightblue"):console.log.bind(console,"\x1B[34m",ko("INFO"))),e<=iu.debug&&(X.debug=console.debug?console.debug.bind(console,ko("DEBUG"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",ko("DEBUG"))),e<=iu.trace&&(X.trace=console.debug?console.debug.bind(console,ko("TRACE"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",ko("TRACE")))},"setLogLevel"),ko=o(t=>`%c${(0,f$.default)().format("ss.SSS")} : ${t} : `,"format")});var hbe,u0,qC,d$,H4=N(()=>{"use strict";hbe=Object.freeze({left:0,top:0,width:16,height:16}),u0=Object.freeze({rotate:0,vFlip:!1,hFlip:!1}),qC=Object.freeze({...hbe,...u0}),d$=Object.freeze({...qC,body:"",hidden:!1})});var fbe,p$,m$=N(()=>{"use strict";H4();fbe=Object.freeze({width:null,height:null}),p$=Object.freeze({...fbe,...u0})});var YC,W4,g$=N(()=>{"use strict";YC=o((t,e,r,n="")=>{let i=t.split(":");if(t.slice(0,1)==="@"){if(i.length<2||i.length>3)return null;n=i.shift().slice(1)}if(i.length>3||!i.length)return null;if(i.length>1){let l=i.pop(),u=i.pop(),h={provider:i.length>0?i[0]:n,prefix:u,name:l};return e&&!W4(h)?null:h}let a=i[0],s=a.split("-");if(s.length>1){let l={provider:n,prefix:s.shift(),name:s.join("-")};return e&&!W4(l)?null:l}if(r&&n===""){let l={provider:n,prefix:"",name:a};return e&&!W4(l,r)?null:l}return null},"stringToIcon"),W4=o((t,e)=>t?!!((e&&t.prefix===""||t.prefix)&&t.name):!1,"validateIconName")});function y$(t,e){let r={};!t.hFlip!=!e.hFlip&&(r.hFlip=!0),!t.vFlip!=!e.vFlip&&(r.vFlip=!0);let n=((t.rotate||0)+(e.rotate||0))%4;return n&&(r.rotate=n),r}var v$=N(()=>{"use strict";o(y$,"mergeIconTransformations")});function XC(t,e){let r=y$(t,e);for(let n in d$)n in u0?n in t&&!(n in r)&&(r[n]=u0[n]):n in e?r[n]=e[n]:n in t&&(r[n]=t[n]);return r}var x$=N(()=>{"use strict";H4();v$();o(XC,"mergeIconData")});function b$(t,e){let r=t.icons,n=t.aliases||Object.create(null),i=Object.create(null);function a(s){if(r[s])return i[s]=[];if(!(s in i)){i[s]=null;let l=n[s]&&n[s].parent,u=l&&a(l);u&&(i[s]=[l].concat(u))}return i[s]}return o(a,"resolve"),(e||Object.keys(r).concat(Object.keys(n))).forEach(a),i}var T$=N(()=>{"use strict";o(b$,"getIconsTree")});function w$(t,e,r){let n=t.icons,i=t.aliases||Object.create(null),a={};function s(l){a=XC(n[l]||i[l],a)}return o(s,"parse"),s(e),r.forEach(s),XC(t,a)}function jC(t,e){if(t.icons[e])return w$(t,e,[]);let r=b$(t,[e])[e];return r?w$(t,e,r):null}var k$=N(()=>{"use strict";x$();T$();o(w$,"internalGetIconData");o(jC,"getIconData")});function KC(t,e,r){if(e===1)return t;if(r=r||100,typeof t=="number")return Math.ceil(t*e*r)/r;if(typeof t!="string")return t;let n=t.split(dbe);if(n===null||!n.length)return t;let i=[],a=n.shift(),s=pbe.test(a);for(;;){if(s){let l=parseFloat(a);isNaN(l)?i.push(a):i.push(Math.ceil(l*e*r)/r)}else i.push(a);if(a=n.shift(),a===void 0)return i.join("");s=!s}}var dbe,pbe,E$=N(()=>{"use strict";dbe=/(-?[0-9.]*[0-9]+[0-9.]*)/g,pbe=/^-?[0-9.]*[0-9]+[0-9.]*$/g;o(KC,"calculateSize")});function mbe(t,e="defs"){let r="",n=t.indexOf("<"+e);for(;n>=0;){let i=t.indexOf(">",n),a=t.indexOf("",a);if(s===-1)break;r+=t.slice(i+1,a).trim(),t=t.slice(0,n).trim()+t.slice(s+1)}return{defs:r,content:t}}function gbe(t,e){return t?""+t+""+e:e}function S$(t,e,r){let n=mbe(t);return gbe(n.defs,e+n.content+r)}var C$=N(()=>{"use strict";o(mbe,"splitSVGDefs");o(gbe,"mergeDefsAndContent");o(S$,"wrapSVGContent")});function QC(t,e){let r={...qC,...t},n={...p$,...e},i={left:r.left,top:r.top,width:r.width,height:r.height},a=r.body;[r,n].forEach(y=>{let v=[],x=y.hFlip,b=y.vFlip,T=y.rotate;x?b?T+=2:(v.push("translate("+(i.width+i.left).toString()+" "+(0-i.top).toString()+")"),v.push("scale(-1 1)"),i.top=i.left=0):b&&(v.push("translate("+(0-i.left).toString()+" "+(i.height+i.top).toString()+")"),v.push("scale(1 -1)"),i.top=i.left=0);let S;switch(T<0&&(T-=Math.floor(T/4)*4),T=T%4,T){case 1:S=i.height/2+i.top,v.unshift("rotate(90 "+S.toString()+" "+S.toString()+")");break;case 2:v.unshift("rotate(180 "+(i.width/2+i.left).toString()+" "+(i.height/2+i.top).toString()+")");break;case 3:S=i.width/2+i.left,v.unshift("rotate(-90 "+S.toString()+" "+S.toString()+")");break}T%2===1&&(i.left!==i.top&&(S=i.left,i.left=i.top,i.top=S),i.width!==i.height&&(S=i.width,i.width=i.height,i.height=S)),v.length&&(a=S$(a,'',""))});let s=n.width,l=n.height,u=i.width,h=i.height,f,d;s===null?(d=l===null?"1em":l==="auto"?h:l,f=KC(d,u/h)):(f=s==="auto"?u:s,d=l===null?KC(f,h/u):l==="auto"?h:l);let p={},m=o((y,v)=>{ybe(v)||(p[y]=v.toString())},"setAttr");m("width",f),m("height",d);let g=[i.left,i.top,u,h];return p.viewBox=g.join(" "),{attributes:p,viewBox:g,body:a}}var ybe,A$=N(()=>{"use strict";H4();m$();E$();C$();ybe=o(t=>t==="unset"||t==="undefined"||t==="none","isUnsetKeyword");o(QC,"iconToSVG")});function ZC(t,e=xbe){let r=[],n;for(;n=vbe.exec(t);)r.push(n[1]);if(!r.length)return t;let i="suffix"+(Math.random()*16777216|Date.now()).toString(16);return r.forEach(a=>{let s=typeof e=="function"?e(a):e+(bbe++).toString(),l=a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");t=t.replace(new RegExp('([#;"])('+l+')([")]|\\.[a-z])',"g"),"$1"+s+i+"$3")}),t=t.replace(new RegExp(i,"g"),""),t}var vbe,xbe,bbe,_$=N(()=>{"use strict";vbe=/\sid="(\S+)"/g,xbe="IconifyId"+Date.now().toString(16)+(Math.random()*16777216|0).toString(16),bbe=0;o(ZC,"replaceIDs")});function JC(t,e){let r=t.indexOf("xlink:")===-1?"":' xmlns:xlink="http://www.w3.org/1999/xlink"';for(let n in e)r+=" "+n+'="'+e[n]+'"';return'"+t+""}var D$=N(()=>{"use strict";o(JC,"iconToHTML")});var R$=Pi((Iat,L$)=>{"use strict";var h0=1e3,f0=h0*60,d0=f0*60,ed=d0*24,Tbe=ed*7,wbe=ed*365.25;L$.exports=function(t,e){e=e||{};var r=typeof t;if(r==="string"&&t.length>0)return kbe(t);if(r==="number"&&isFinite(t))return e.long?Sbe(t):Ebe(t);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(t))};function kbe(t){if(t=String(t),!(t.length>100)){var e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(t);if(e){var r=parseFloat(e[1]),n=(e[2]||"ms").toLowerCase();switch(n){case"years":case"year":case"yrs":case"yr":case"y":return r*wbe;case"weeks":case"week":case"w":return r*Tbe;case"days":case"day":case"d":return r*ed;case"hours":case"hour":case"hrs":case"hr":case"h":return r*d0;case"minutes":case"minute":case"mins":case"min":case"m":return r*f0;case"seconds":case"second":case"secs":case"sec":case"s":return r*h0;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return r;default:return}}}}o(kbe,"parse");function Ebe(t){var e=Math.abs(t);return e>=ed?Math.round(t/ed)+"d":e>=d0?Math.round(t/d0)+"h":e>=f0?Math.round(t/f0)+"m":e>=h0?Math.round(t/h0)+"s":t+"ms"}o(Ebe,"fmtShort");function Sbe(t){var e=Math.abs(t);return e>=ed?q4(t,e,ed,"day"):e>=d0?q4(t,e,d0,"hour"):e>=f0?q4(t,e,f0,"minute"):e>=h0?q4(t,e,h0,"second"):t+" ms"}o(Sbe,"fmtLong");function q4(t,e,r,n){var i=e>=r*1.5;return Math.round(t/r)+" "+n+(i?"s":"")}o(q4,"plural")});var M$=Pi((Pat,N$)=>{"use strict";function Cbe(t){r.debug=r,r.default=r,r.coerce=u,r.disable=s,r.enable=i,r.enabled=l,r.humanize=R$(),r.destroy=h,Object.keys(t).forEach(f=>{r[f]=t[f]}),r.names=[],r.skips=[],r.formatters={};function e(f){let d=0;for(let p=0;p{if(E==="%%")return"%";S++;let C=r.formatters[_];if(typeof C=="function"){let D=v[S];E=C.call(x,D),v.splice(S,1),S--}return E}),r.formatArgs.call(x,v),(x.log||r.log).apply(x,v)}return o(y,"debug"),y.namespace=f,y.useColors=r.useColors(),y.color=r.selectColor(f),y.extend=n,y.destroy=r.destroy,Object.defineProperty(y,"enabled",{enumerable:!0,configurable:!1,get:o(()=>p!==null?p:(m!==r.namespaces&&(m=r.namespaces,g=r.enabled(f)),g),"get"),set:o(v=>{p=v},"set")}),typeof r.init=="function"&&r.init(y),y}o(r,"createDebug");function n(f,d){let p=r(this.namespace+(typeof d>"u"?":":d)+f);return p.log=this.log,p}o(n,"extend");function i(f){r.save(f),r.namespaces=f,r.names=[],r.skips=[];let d=(typeof f=="string"?f:"").trim().replace(" ",",").split(",").filter(Boolean);for(let p of d)p[0]==="-"?r.skips.push(p.slice(1)):r.names.push(p)}o(i,"enable");function a(f,d){let p=0,m=0,g=-1,y=0;for(;p"-"+d)].join(",");return r.enable(""),f}o(s,"disable");function l(f){for(let d of r.skips)if(a(f,d))return!1;for(let d of r.names)if(a(f,d))return!0;return!1}o(l,"enabled");function u(f){return f instanceof Error?f.stack||f.message:f}o(u,"coerce");function h(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return o(h,"destroy"),r.enable(r.load()),r}o(Cbe,"setup");N$.exports=Cbe});var I$=Pi((js,Y4)=>{"use strict";js.formatArgs=_be;js.save=Dbe;js.load=Lbe;js.useColors=Abe;js.storage=Rbe();js.destroy=(()=>{let t=!1;return()=>{t||(t=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})();js.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function Abe(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let t;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&(t=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(t[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}o(Abe,"useColors");function _be(t){if(t[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+t[0]+(this.useColors?"%c ":" ")+"+"+Y4.exports.humanize(this.diff),!this.useColors)return;let e="color: "+this.color;t.splice(1,0,e,"color: inherit");let r=0,n=0;t[0].replace(/%[a-zA-Z%]/g,i=>{i!=="%%"&&(r++,i==="%c"&&(n=r))}),t.splice(n,0,e)}o(_be,"formatArgs");js.log=console.debug||console.log||(()=>{});function Dbe(t){try{t?js.storage.setItem("debug",t):js.storage.removeItem("debug")}catch{}}o(Dbe,"save");function Lbe(){let t;try{t=js.storage.getItem("debug")}catch{}return!t&&typeof process<"u"&&"env"in process&&(t=process.env.DEBUG),t}o(Lbe,"load");function Rbe(){try{return localStorage}catch{}}o(Rbe,"localstorage");Y4.exports=M$()(js);var{formatters:Nbe}=Y4.exports;Nbe.j=function(t){try{return JSON.stringify(t)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}});var zat,O$=N(()=>{"use strict";g$();k$();A$();_$();D$();zat=Aa(I$(),1)});var t7,e7,P$,X4,B$,F$,Es,jl=N(()=>{"use strict";yt();O$();t7={body:'?',height:80,width:80},e7=new Map,P$=new Map,X4=o(t=>{for(let e of t){if(!e.name)throw new Error('Invalid icon loader. Must have a "name" property with non-empty string value.');if(X.debug("Registering icon pack:",e.name),"loader"in e)P$.set(e.name,e.loader);else if("icons"in e)e7.set(e.name,e.icons);else throw X.error("Invalid icon loader:",e),new Error('Invalid icon loader. Must have either "icons" or "loader" property.')}},"registerIconPacks"),B$=o(async(t,e)=>{let r=YC(t,!0,e!==void 0);if(!r)throw new Error(`Invalid icon name: ${t}`);let n=r.prefix||e;if(!n)throw new Error(`Icon name must contain a prefix: ${t}`);let i=e7.get(n);if(!i){let s=P$.get(n);if(!s)throw new Error(`Icon set not found: ${r.prefix}`);try{i={...await s(),prefix:n},e7.set(n,i)}catch(l){throw X.error(l),new Error(`Failed to load icon set: ${r.prefix}`)}}let a=jC(i,r.name);if(!a)throw new Error(`Icon not found: ${t}`);return a},"getRegisteredIconData"),F$=o(async t=>{try{return await B$(t),!0}catch{return!1}},"isIconAvailable"),Es=o(async(t,e,r)=>{let n;try{n=await B$(t,e?.fallbackPrefix)}catch(s){X.error(s),n=t7}let i=QC(n,e);return JC(ZC(i.body),{...i.attributes,...r})},"getIconSVG")});function j4(t){for(var e=[],r=1;r{"use strict";o(H4,"dedent")});var W4,Zf,r$,q4=N(()=>{"use strict";W4=/^-{3}\s*[\n\r](.*?)[\n\r]-{3}\s*[\n\r]+/s,Zf=/%{2}{\s*(?:(\w+)\s*:|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,r$=/\s*%%.*\n/gm});var h0,UC=N(()=>{"use strict";h0=class extends Error{static{o(this,"UnknownDiagramError")}constructor(e){super(e),this.name="UnknownDiagramError"}}});var Jf,f0,Dy,HC,n$,ed=N(()=>{"use strict";vt();q4();UC();Jf={},f0=o(function(t,e){t=t.replace(W4,"").replace(Zf,"").replace(r$,` -`);for(let[r,{detector:n}]of Object.entries(Jf))if(n(t,e))return r;throw new h0(`No diagram type detected matching given configuration for text: ${t}`)},"detectType"),Dy=o((...t)=>{for(let{id:e,detector:r,loader:n}of t)HC(e,r,n)},"registerLazyLoadedDiagrams"),HC=o((t,e,r)=>{Jf[t]&&X.warn(`Detector with key ${t} already exists. Overwriting.`),Jf[t]={detector:e,loader:r},X.debug(`Detector with key ${t} added${r?" with loader":""}`)},"addDetector"),n$=o(t=>Jf[t].loader,"getDiagramLoader")});var Ly,i$,WC=N(()=>{"use strict";Ly=function(){var t=o(function(ze,Le,Ie,xe){for(Ie=Ie||{},xe=ze.length;xe--;Ie[ze[xe]]=Le);return Ie},"o"),e=[1,24],r=[1,25],n=[1,26],i=[1,27],a=[1,28],s=[1,63],l=[1,64],u=[1,65],h=[1,66],f=[1,67],d=[1,68],p=[1,69],m=[1,29],g=[1,30],y=[1,31],v=[1,32],x=[1,33],b=[1,34],w=[1,35],C=[1,36],T=[1,37],E=[1,38],A=[1,39],S=[1,40],_=[1,41],I=[1,42],L=[1,43],k=[1,44],D=[1,45],R=[1,46],O=[1,47],M=[1,48],P=[1,50],B=[1,51],F=[1,52],z=[1,53],$=[1,54],U=[1,55],Q=[1,56],te=[1,57],Y=[1,58],he=[1,59],Z=[1,60],ue=[14,42],K=[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],j=[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],ne=[1,82],ee=[1,83],ce=[1,84],le=[1,85],J=[12,14,42],Se=[12,14,33,42],se=[12,14,33,42,76,77,79,80],ae=[12,33],Oe=[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],ye={trace:o(function(){},"trace"),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:o(function(Le,Ie,xe,q,de,ie,oe){var V=ie.length-1;switch(de){case 3:q.setDirection("TB");break;case 4:q.setDirection("BT");break;case 5:q.setDirection("RL");break;case 6:q.setDirection("LR");break;case 8:case 9:case 10:case 11:case 12:q.setC4Type(ie[V-3]);break;case 19:q.setTitle(ie[V].substring(6)),this.$=ie[V].substring(6);break;case 20:q.setAccDescription(ie[V].substring(15)),this.$=ie[V].substring(15);break;case 21:this.$=ie[V].trim(),q.setTitle(this.$);break;case 22:case 23:this.$=ie[V].trim(),q.setAccDescription(this.$);break;case 28:ie[V].splice(2,0,"ENTERPRISE"),q.addPersonOrSystemBoundary(...ie[V]),this.$=ie[V];break;case 29:ie[V].splice(2,0,"SYSTEM"),q.addPersonOrSystemBoundary(...ie[V]),this.$=ie[V];break;case 30:q.addPersonOrSystemBoundary(...ie[V]),this.$=ie[V];break;case 31:ie[V].splice(2,0,"CONTAINER"),q.addContainerBoundary(...ie[V]),this.$=ie[V];break;case 32:q.addDeploymentNode("node",...ie[V]),this.$=ie[V];break;case 33:q.addDeploymentNode("nodeL",...ie[V]),this.$=ie[V];break;case 34:q.addDeploymentNode("nodeR",...ie[V]),this.$=ie[V];break;case 35:q.popBoundaryParseStack();break;case 39:q.addPersonOrSystem("person",...ie[V]),this.$=ie[V];break;case 40:q.addPersonOrSystem("external_person",...ie[V]),this.$=ie[V];break;case 41:q.addPersonOrSystem("system",...ie[V]),this.$=ie[V];break;case 42:q.addPersonOrSystem("system_db",...ie[V]),this.$=ie[V];break;case 43:q.addPersonOrSystem("system_queue",...ie[V]),this.$=ie[V];break;case 44:q.addPersonOrSystem("external_system",...ie[V]),this.$=ie[V];break;case 45:q.addPersonOrSystem("external_system_db",...ie[V]),this.$=ie[V];break;case 46:q.addPersonOrSystem("external_system_queue",...ie[V]),this.$=ie[V];break;case 47:q.addContainer("container",...ie[V]),this.$=ie[V];break;case 48:q.addContainer("container_db",...ie[V]),this.$=ie[V];break;case 49:q.addContainer("container_queue",...ie[V]),this.$=ie[V];break;case 50:q.addContainer("external_container",...ie[V]),this.$=ie[V];break;case 51:q.addContainer("external_container_db",...ie[V]),this.$=ie[V];break;case 52:q.addContainer("external_container_queue",...ie[V]),this.$=ie[V];break;case 53:q.addComponent("component",...ie[V]),this.$=ie[V];break;case 54:q.addComponent("component_db",...ie[V]),this.$=ie[V];break;case 55:q.addComponent("component_queue",...ie[V]),this.$=ie[V];break;case 56:q.addComponent("external_component",...ie[V]),this.$=ie[V];break;case 57:q.addComponent("external_component_db",...ie[V]),this.$=ie[V];break;case 58:q.addComponent("external_component_queue",...ie[V]),this.$=ie[V];break;case 60:q.addRel("rel",...ie[V]),this.$=ie[V];break;case 61:q.addRel("birel",...ie[V]),this.$=ie[V];break;case 62:q.addRel("rel_u",...ie[V]),this.$=ie[V];break;case 63:q.addRel("rel_d",...ie[V]),this.$=ie[V];break;case 64:q.addRel("rel_l",...ie[V]),this.$=ie[V];break;case 65:q.addRel("rel_r",...ie[V]),this.$=ie[V];break;case 66:q.addRel("rel_b",...ie[V]),this.$=ie[V];break;case 67:ie[V].splice(0,1),q.addRel("rel",...ie[V]),this.$=ie[V];break;case 68:q.updateElStyle("update_el_style",...ie[V]),this.$=ie[V];break;case 69:q.updateRelStyle("update_rel_style",...ie[V]),this.$=ie[V];break;case 70:q.updateLayoutConfig("update_layout_config",...ie[V]),this.$=ie[V];break;case 71:this.$=[ie[V]];break;case 72:ie[V].unshift(ie[V-1]),this.$=ie[V];break;case 73:case 75:this.$=ie[V].trim();break;case 74:let we={};we[ie[V-1].trim()]=ie[V].trim(),this.$=we;break;case 76:this.$="";break}},"anonymous"),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:e,23:r,24:n,26:i,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:C,52:T,53:E,54:A,55:S,56:_,57:I,58:L,59:k,60:D,61:R,62:O,63:M,64:P,65:B,66:F,67:z,68:$,69:U,70:Q,71:te,72:Y,73:he,74:Z},{13:70,19:20,20:21,21:22,22:e,23:r,24:n,26:i,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:C,52:T,53:E,54:A,55:S,56:_,57:I,58:L,59:k,60:D,61:R,62:O,63:M,64:P,65:B,66:F,67:z,68:$,69:U,70:Q,71:te,72:Y,73:he,74:Z},{13:71,19:20,20:21,21:22,22:e,23:r,24:n,26:i,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:C,52:T,53:E,54:A,55:S,56:_,57:I,58:L,59:k,60:D,61:R,62:O,63:M,64:P,65:B,66:F,67:z,68:$,69:U,70:Q,71:te,72:Y,73:he,74:Z},{13:72,19:20,20:21,21:22,22:e,23:r,24:n,26:i,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:C,52:T,53:E,54:A,55:S,56:_,57:I,58:L,59:k,60:D,61:R,62:O,63:M,64:P,65:B,66:F,67:z,68:$,69:U,70:Q,71:te,72:Y,73:he,74:Z},{13:73,19:20,20:21,21:22,22:e,23:r,24:n,26:i,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:C,52:T,53:E,54:A,55:S,56:_,57:I,58:L,59:k,60:D,61:R,62:O,63:M,64:P,65:B,66:F,67:z,68:$,69:U,70:Q,71:te,72:Y,73:he,74:Z},{14:[1,74]},t(ue,[2,13],{43:23,29:49,30:61,32:62,20:75,34:s,36:l,37:u,38:h,39:f,40:d,41:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:C,52:T,53:E,54:A,55:S,56:_,57:I,58:L,59:k,60:D,61:R,62:O,63:M,64:P,65:B,66:F,67:z,68:$,69:U,70:Q,71:te,72:Y,73:he,74:Z}),t(ue,[2,14]),t(K,[2,16],{12:[1,76]}),t(ue,[2,36],{12:[1,77]}),t(j,[2,19]),t(j,[2,20]),{25:[1,78]},{27:[1,79]},t(j,[2,23]),{35:80,75:81,76:ne,77:ee,79:ce,80:le},{35:86,75:81,76:ne,77:ee,79:ce,80:le},{35:87,75:81,76:ne,77:ee,79:ce,80:le},{35:88,75:81,76:ne,77:ee,79:ce,80:le},{35:89,75:81,76:ne,77:ee,79:ce,80:le},{35:90,75:81,76:ne,77:ee,79:ce,80:le},{35:91,75:81,76:ne,77:ee,79:ce,80:le},{35:92,75:81,76:ne,77:ee,79:ce,80:le},{35:93,75:81,76:ne,77:ee,79:ce,80:le},{35:94,75:81,76:ne,77:ee,79:ce,80:le},{35:95,75:81,76:ne,77:ee,79:ce,80:le},{35:96,75:81,76:ne,77:ee,79:ce,80:le},{35:97,75:81,76:ne,77:ee,79:ce,80:le},{35:98,75:81,76:ne,77:ee,79:ce,80:le},{35:99,75:81,76:ne,77:ee,79:ce,80:le},{35:100,75:81,76:ne,77:ee,79:ce,80:le},{35:101,75:81,76:ne,77:ee,79:ce,80:le},{35:102,75:81,76:ne,77:ee,79:ce,80:le},{35:103,75:81,76:ne,77:ee,79:ce,80:le},{35:104,75:81,76:ne,77:ee,79:ce,80:le},t(J,[2,59]),{35:105,75:81,76:ne,77:ee,79:ce,80:le},{35:106,75:81,76:ne,77:ee,79:ce,80:le},{35:107,75:81,76:ne,77:ee,79:ce,80:le},{35:108,75:81,76:ne,77:ee,79:ce,80:le},{35:109,75:81,76:ne,77:ee,79:ce,80:le},{35:110,75:81,76:ne,77:ee,79:ce,80:le},{35:111,75:81,76:ne,77:ee,79:ce,80:le},{35:112,75:81,76:ne,77:ee,79:ce,80:le},{35:113,75:81,76:ne,77:ee,79:ce,80:le},{35:114,75:81,76:ne,77:ee,79:ce,80:le},{35:115,75:81,76:ne,77:ee,79:ce,80:le},{20:116,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:C,52:T,53:E,54:A,55:S,56:_,57:I,58:L,59:k,60:D,61:R,62:O,63:M,64:P,65:B,66:F,67:z,68:$,69:U,70:Q,71:te,72:Y,73:he,74:Z},{12:[1,118],33:[1,117]},{35:119,75:81,76:ne,77:ee,79:ce,80:le},{35:120,75:81,76:ne,77:ee,79:ce,80:le},{35:121,75:81,76:ne,77:ee,79:ce,80:le},{35:122,75:81,76:ne,77:ee,79:ce,80:le},{35:123,75:81,76:ne,77:ee,79:ce,80:le},{35:124,75:81,76:ne,77:ee,79:ce,80:le},{35:125,75:81,76:ne,77:ee,79:ce,80:le},{14:[1,126]},{14:[1,127]},{14:[1,128]},{14:[1,129]},{1:[2,8]},t(ue,[2,15]),t(K,[2,17],{21:22,19:130,22:e,23:r,24:n,26:i,28:a}),t(ue,[2,37],{19:20,20:21,21:22,43:23,29:49,30:61,32:62,13:131,22:e,23:r,24:n,26:i,28:a,34:s,36:l,37:u,38:h,39:f,40:d,41:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w,51:C,52:T,53:E,54:A,55:S,56:_,57:I,58:L,59:k,60:D,61:R,62:O,63:M,64:P,65:B,66:F,67:z,68:$,69:U,70:Q,71:te,72:Y,73:he,74:Z}),t(j,[2,21]),t(j,[2,22]),t(J,[2,39]),t(Se,[2,71],{75:81,35:132,76:ne,77:ee,79:ce,80:le}),t(se,[2,73]),{78:[1,133]},t(se,[2,75]),t(se,[2,76]),t(J,[2,40]),t(J,[2,41]),t(J,[2,42]),t(J,[2,43]),t(J,[2,44]),t(J,[2,45]),t(J,[2,46]),t(J,[2,47]),t(J,[2,48]),t(J,[2,49]),t(J,[2,50]),t(J,[2,51]),t(J,[2,52]),t(J,[2,53]),t(J,[2,54]),t(J,[2,55]),t(J,[2,56]),t(J,[2,57]),t(J,[2,58]),t(J,[2,60]),t(J,[2,61]),t(J,[2,62]),t(J,[2,63]),t(J,[2,64]),t(J,[2,65]),t(J,[2,66]),t(J,[2,67]),t(J,[2,68]),t(J,[2,69]),t(J,[2,70]),{31:134,42:[1,135]},{12:[1,136]},{33:[1,137]},t(ae,[2,28]),t(ae,[2,29]),t(ae,[2,30]),t(ae,[2,31]),t(ae,[2,32]),t(ae,[2,33]),t(ae,[2,34]),{1:[2,9]},{1:[2,10]},{1:[2,11]},{1:[2,12]},t(K,[2,18]),t(ue,[2,38]),t(Se,[2,72]),t(se,[2,74]),t(J,[2,24]),t(J,[2,35]),t(Oe,[2,25]),t(Oe,[2,26],{12:[1,138]}),t(Oe,[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:o(function(Le,Ie){if(Ie.recoverable)this.trace(Le);else{var xe=new Error(Le);throw xe.hash=Ie,xe}},"parseError"),parse:o(function(Le){var Ie=this,xe=[0],q=[],de=[null],ie=[],oe=this.table,V="",we=0,W=0,pe=0,ve=2,Pe=1,_e=ie.slice.call(arguments,1),be=Object.create(this.lexer),Ve={yy:{}};for(var De in this.yy)Object.prototype.hasOwnProperty.call(this.yy,De)&&(Ve.yy[De]=this.yy[De]);be.setInput(Le,Ve.yy),Ve.yy.lexer=be,Ve.yy.parser=this,typeof be.yylloc>"u"&&(be.yylloc={});var qe=be.yylloc;ie.push(qe);var at=be.options&&be.options.ranges;typeof Ve.yy.parseError=="function"?this.parseError=Ve.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Lt(nt){xe.length=xe.length-2*nt,de.length=de.length-nt,ie.length=ie.length-nt}o(Lt,"popStack");function st(){var nt;return nt=q.pop()||be.lex()||Pe,typeof nt!="number"&&(nt instanceof Array&&(q=nt,nt=q.pop()),nt=Ie.symbols_[nt]||nt),nt}o(st,"lex");for(var Ue,ct,We,ot,Yt,bt,Mt={},xt,ut,Et,ft;;){if(We=xe[xe.length-1],this.defaultActions[We]?ot=this.defaultActions[We]:((Ue===null||typeof Ue>"u")&&(Ue=st()),ot=oe[We]&&oe[We][Ue]),typeof ot>"u"||!ot.length||!ot[0]){var yt="";ft=[];for(xt in oe[We])this.terminals_[xt]&&xt>ve&&ft.push("'"+this.terminals_[xt]+"'");be.showPosition?yt="Parse error on line "+(we+1)+`: +`)),s+=d+n[u+1]}),s}var r7=N(()=>{"use strict";o(j4,"dedent")});var K4,td,$$,Q4=N(()=>{"use strict";K4=/^-{3}\s*[\n\r](.*?)[\n\r]-{3}\s*[\n\r]+/s,td=/%{2}{\s*(?:(\w+)\s*:|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,$$=/\s*%%.*\n/gm});var p0,n7=N(()=>{"use strict";p0=class extends Error{static{o(this,"UnknownDiagramError")}constructor(e){super(e),this.name="UnknownDiagramError"}}});var au,m0,Ly,i7,z$,rd=N(()=>{"use strict";yt();Q4();n7();au={},m0=o(function(t,e){t=t.replace(K4,"").replace(td,"").replace($$,` +`);for(let[r,{detector:n}]of Object.entries(au))if(n(t,e))return r;throw new p0(`No diagram type detected matching given configuration for text: ${t}`)},"detectType"),Ly=o((...t)=>{for(let{id:e,detector:r,loader:n}of t)i7(e,r,n)},"registerLazyLoadedDiagrams"),i7=o((t,e,r)=>{au[t]&&X.warn(`Detector with key ${t} already exists. Overwriting.`),au[t]={detector:e,loader:r},X.debug(`Detector with key ${t} added${r?" with loader":""}`)},"addDetector"),z$=o(t=>au[t].loader,"getDiagramLoader")});var Ry,G$,a7=N(()=>{"use strict";Ry=function(){var t=o(function(ze,Le,Ie,xe){for(Ie=Ie||{},xe=ze.length;xe--;Ie[ze[xe]]=Le);return Ie},"o"),e=[1,24],r=[1,25],n=[1,26],i=[1,27],a=[1,28],s=[1,63],l=[1,64],u=[1,65],h=[1,66],f=[1,67],d=[1,68],p=[1,69],m=[1,29],g=[1,30],y=[1,31],v=[1,32],x=[1,33],b=[1,34],T=[1,35],S=[1,36],w=[1,37],E=[1,38],_=[1,39],C=[1,40],D=[1,41],O=[1,42],R=[1,43],k=[1,44],L=[1,45],A=[1,46],I=[1,47],M=[1,48],P=[1,50],B=[1,51],F=[1,52],z=[1,53],$=[1,54],U=[1,55],K=[1,56],ee=[1,57],Y=[1,58],ce=[1,59],Z=[1,60],ue=[14,42],Q=[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],j=[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],ne=[1,82],te=[1,83],he=[1,84],le=[1,85],J=[12,14,42],Se=[12,14,33,42],se=[12,14,33,42,76,77,79,80],ae=[12,33],Oe=[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],ye={trace:o(function(){},"trace"),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:o(function(Le,Ie,xe,q,de,ie,oe){var V=ie.length-1;switch(de){case 3:q.setDirection("TB");break;case 4:q.setDirection("BT");break;case 5:q.setDirection("RL");break;case 6:q.setDirection("LR");break;case 8:case 9:case 10:case 11:case 12:q.setC4Type(ie[V-3]);break;case 19:q.setTitle(ie[V].substring(6)),this.$=ie[V].substring(6);break;case 20:q.setAccDescription(ie[V].substring(15)),this.$=ie[V].substring(15);break;case 21:this.$=ie[V].trim(),q.setTitle(this.$);break;case 22:case 23:this.$=ie[V].trim(),q.setAccDescription(this.$);break;case 28:ie[V].splice(2,0,"ENTERPRISE"),q.addPersonOrSystemBoundary(...ie[V]),this.$=ie[V];break;case 29:ie[V].splice(2,0,"SYSTEM"),q.addPersonOrSystemBoundary(...ie[V]),this.$=ie[V];break;case 30:q.addPersonOrSystemBoundary(...ie[V]),this.$=ie[V];break;case 31:ie[V].splice(2,0,"CONTAINER"),q.addContainerBoundary(...ie[V]),this.$=ie[V];break;case 32:q.addDeploymentNode("node",...ie[V]),this.$=ie[V];break;case 33:q.addDeploymentNode("nodeL",...ie[V]),this.$=ie[V];break;case 34:q.addDeploymentNode("nodeR",...ie[V]),this.$=ie[V];break;case 35:q.popBoundaryParseStack();break;case 39:q.addPersonOrSystem("person",...ie[V]),this.$=ie[V];break;case 40:q.addPersonOrSystem("external_person",...ie[V]),this.$=ie[V];break;case 41:q.addPersonOrSystem("system",...ie[V]),this.$=ie[V];break;case 42:q.addPersonOrSystem("system_db",...ie[V]),this.$=ie[V];break;case 43:q.addPersonOrSystem("system_queue",...ie[V]),this.$=ie[V];break;case 44:q.addPersonOrSystem("external_system",...ie[V]),this.$=ie[V];break;case 45:q.addPersonOrSystem("external_system_db",...ie[V]),this.$=ie[V];break;case 46:q.addPersonOrSystem("external_system_queue",...ie[V]),this.$=ie[V];break;case 47:q.addContainer("container",...ie[V]),this.$=ie[V];break;case 48:q.addContainer("container_db",...ie[V]),this.$=ie[V];break;case 49:q.addContainer("container_queue",...ie[V]),this.$=ie[V];break;case 50:q.addContainer("external_container",...ie[V]),this.$=ie[V];break;case 51:q.addContainer("external_container_db",...ie[V]),this.$=ie[V];break;case 52:q.addContainer("external_container_queue",...ie[V]),this.$=ie[V];break;case 53:q.addComponent("component",...ie[V]),this.$=ie[V];break;case 54:q.addComponent("component_db",...ie[V]),this.$=ie[V];break;case 55:q.addComponent("component_queue",...ie[V]),this.$=ie[V];break;case 56:q.addComponent("external_component",...ie[V]),this.$=ie[V];break;case 57:q.addComponent("external_component_db",...ie[V]),this.$=ie[V];break;case 58:q.addComponent("external_component_queue",...ie[V]),this.$=ie[V];break;case 60:q.addRel("rel",...ie[V]),this.$=ie[V];break;case 61:q.addRel("birel",...ie[V]),this.$=ie[V];break;case 62:q.addRel("rel_u",...ie[V]),this.$=ie[V];break;case 63:q.addRel("rel_d",...ie[V]),this.$=ie[V];break;case 64:q.addRel("rel_l",...ie[V]),this.$=ie[V];break;case 65:q.addRel("rel_r",...ie[V]),this.$=ie[V];break;case 66:q.addRel("rel_b",...ie[V]),this.$=ie[V];break;case 67:ie[V].splice(0,1),q.addRel("rel",...ie[V]),this.$=ie[V];break;case 68:q.updateElStyle("update_el_style",...ie[V]),this.$=ie[V];break;case 69:q.updateRelStyle("update_rel_style",...ie[V]),this.$=ie[V];break;case 70:q.updateLayoutConfig("update_layout_config",...ie[V]),this.$=ie[V];break;case 71:this.$=[ie[V]];break;case 72:ie[V].unshift(ie[V-1]),this.$=ie[V];break;case 73:case 75:this.$=ie[V].trim();break;case 74:let Te={};Te[ie[V-1].trim()]=ie[V].trim(),this.$=Te;break;case 76:this.$="";break}},"anonymous"),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:e,23:r,24:n,26:i,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:T,51:S,52:w,53:E,54:_,55:C,56:D,57:O,58:R,59:k,60:L,61:A,62:I,63:M,64:P,65:B,66:F,67:z,68:$,69:U,70:K,71:ee,72:Y,73:ce,74:Z},{13:70,19:20,20:21,21:22,22:e,23:r,24:n,26:i,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:T,51:S,52:w,53:E,54:_,55:C,56:D,57:O,58:R,59:k,60:L,61:A,62:I,63:M,64:P,65:B,66:F,67:z,68:$,69:U,70:K,71:ee,72:Y,73:ce,74:Z},{13:71,19:20,20:21,21:22,22:e,23:r,24:n,26:i,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:T,51:S,52:w,53:E,54:_,55:C,56:D,57:O,58:R,59:k,60:L,61:A,62:I,63:M,64:P,65:B,66:F,67:z,68:$,69:U,70:K,71:ee,72:Y,73:ce,74:Z},{13:72,19:20,20:21,21:22,22:e,23:r,24:n,26:i,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:T,51:S,52:w,53:E,54:_,55:C,56:D,57:O,58:R,59:k,60:L,61:A,62:I,63:M,64:P,65:B,66:F,67:z,68:$,69:U,70:K,71:ee,72:Y,73:ce,74:Z},{13:73,19:20,20:21,21:22,22:e,23:r,24:n,26:i,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:T,51:S,52:w,53:E,54:_,55:C,56:D,57:O,58:R,59:k,60:L,61:A,62:I,63:M,64:P,65:B,66:F,67:z,68:$,69:U,70:K,71:ee,72:Y,73:ce,74:Z},{14:[1,74]},t(ue,[2,13],{43:23,29:49,30:61,32:62,20:75,34:s,36:l,37:u,38:h,39:f,40:d,41:p,44:m,45:g,46:y,47:v,48:x,49:b,50:T,51:S,52:w,53:E,54:_,55:C,56:D,57:O,58:R,59:k,60:L,61:A,62:I,63:M,64:P,65:B,66:F,67:z,68:$,69:U,70:K,71:ee,72:Y,73:ce,74:Z}),t(ue,[2,14]),t(Q,[2,16],{12:[1,76]}),t(ue,[2,36],{12:[1,77]}),t(j,[2,19]),t(j,[2,20]),{25:[1,78]},{27:[1,79]},t(j,[2,23]),{35:80,75:81,76:ne,77:te,79:he,80:le},{35:86,75:81,76:ne,77:te,79:he,80:le},{35:87,75:81,76:ne,77:te,79:he,80:le},{35:88,75:81,76:ne,77:te,79:he,80:le},{35:89,75:81,76:ne,77:te,79:he,80:le},{35:90,75:81,76:ne,77:te,79:he,80:le},{35:91,75:81,76:ne,77:te,79:he,80:le},{35:92,75:81,76:ne,77:te,79:he,80:le},{35:93,75:81,76:ne,77:te,79:he,80:le},{35:94,75:81,76:ne,77:te,79:he,80:le},{35:95,75:81,76:ne,77:te,79:he,80:le},{35:96,75:81,76:ne,77:te,79:he,80:le},{35:97,75:81,76:ne,77:te,79:he,80:le},{35:98,75:81,76:ne,77:te,79:he,80:le},{35:99,75:81,76:ne,77:te,79:he,80:le},{35:100,75:81,76:ne,77:te,79:he,80:le},{35:101,75:81,76:ne,77:te,79:he,80:le},{35:102,75:81,76:ne,77:te,79:he,80:le},{35:103,75:81,76:ne,77:te,79:he,80:le},{35:104,75:81,76:ne,77:te,79:he,80:le},t(J,[2,59]),{35:105,75:81,76:ne,77:te,79:he,80:le},{35:106,75:81,76:ne,77:te,79:he,80:le},{35:107,75:81,76:ne,77:te,79:he,80:le},{35:108,75:81,76:ne,77:te,79:he,80:le},{35:109,75:81,76:ne,77:te,79:he,80:le},{35:110,75:81,76:ne,77:te,79:he,80:le},{35:111,75:81,76:ne,77:te,79:he,80:le},{35:112,75:81,76:ne,77:te,79:he,80:le},{35:113,75:81,76:ne,77:te,79:he,80:le},{35:114,75:81,76:ne,77:te,79:he,80:le},{35:115,75:81,76:ne,77:te,79:he,80:le},{20:116,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:T,51:S,52:w,53:E,54:_,55:C,56:D,57:O,58:R,59:k,60:L,61:A,62:I,63:M,64:P,65:B,66:F,67:z,68:$,69:U,70:K,71:ee,72:Y,73:ce,74:Z},{12:[1,118],33:[1,117]},{35:119,75:81,76:ne,77:te,79:he,80:le},{35:120,75:81,76:ne,77:te,79:he,80:le},{35:121,75:81,76:ne,77:te,79:he,80:le},{35:122,75:81,76:ne,77:te,79:he,80:le},{35:123,75:81,76:ne,77:te,79:he,80:le},{35:124,75:81,76:ne,77:te,79:he,80:le},{35:125,75:81,76:ne,77:te,79:he,80:le},{14:[1,126]},{14:[1,127]},{14:[1,128]},{14:[1,129]},{1:[2,8]},t(ue,[2,15]),t(Q,[2,17],{21:22,19:130,22:e,23:r,24:n,26:i,28:a}),t(ue,[2,37],{19:20,20:21,21:22,43:23,29:49,30:61,32:62,13:131,22:e,23:r,24:n,26:i,28:a,34:s,36:l,37:u,38:h,39:f,40:d,41:p,44:m,45:g,46:y,47:v,48:x,49:b,50:T,51:S,52:w,53:E,54:_,55:C,56:D,57:O,58:R,59:k,60:L,61:A,62:I,63:M,64:P,65:B,66:F,67:z,68:$,69:U,70:K,71:ee,72:Y,73:ce,74:Z}),t(j,[2,21]),t(j,[2,22]),t(J,[2,39]),t(Se,[2,71],{75:81,35:132,76:ne,77:te,79:he,80:le}),t(se,[2,73]),{78:[1,133]},t(se,[2,75]),t(se,[2,76]),t(J,[2,40]),t(J,[2,41]),t(J,[2,42]),t(J,[2,43]),t(J,[2,44]),t(J,[2,45]),t(J,[2,46]),t(J,[2,47]),t(J,[2,48]),t(J,[2,49]),t(J,[2,50]),t(J,[2,51]),t(J,[2,52]),t(J,[2,53]),t(J,[2,54]),t(J,[2,55]),t(J,[2,56]),t(J,[2,57]),t(J,[2,58]),t(J,[2,60]),t(J,[2,61]),t(J,[2,62]),t(J,[2,63]),t(J,[2,64]),t(J,[2,65]),t(J,[2,66]),t(J,[2,67]),t(J,[2,68]),t(J,[2,69]),t(J,[2,70]),{31:134,42:[1,135]},{12:[1,136]},{33:[1,137]},t(ae,[2,28]),t(ae,[2,29]),t(ae,[2,30]),t(ae,[2,31]),t(ae,[2,32]),t(ae,[2,33]),t(ae,[2,34]),{1:[2,9]},{1:[2,10]},{1:[2,11]},{1:[2,12]},t(Q,[2,18]),t(ue,[2,38]),t(Se,[2,72]),t(se,[2,74]),t(J,[2,24]),t(J,[2,35]),t(Oe,[2,25]),t(Oe,[2,26],{12:[1,138]}),t(Oe,[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:o(function(Le,Ie){if(Ie.recoverable)this.trace(Le);else{var xe=new Error(Le);throw xe.hash=Ie,xe}},"parseError"),parse:o(function(Le){var Ie=this,xe=[0],q=[],de=[null],ie=[],oe=this.table,V="",Te=0,W=0,pe=0,ve=2,Pe=1,_e=ie.slice.call(arguments,1),be=Object.create(this.lexer),Ve={yy:{}};for(var De in this.yy)Object.prototype.hasOwnProperty.call(this.yy,De)&&(Ve.yy[De]=this.yy[De]);be.setInput(Le,Ve.yy),Ve.yy.lexer=be,Ve.yy.parser=this,typeof be.yylloc>"u"&&(be.yylloc={});var qe=be.yylloc;ie.push(qe);var at=be.options&&be.options.ranges;typeof Ve.yy.parseError=="function"?this.parseError=Ve.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Rt(nt){xe.length=xe.length-2*nt,de.length=de.length-nt,ie.length=ie.length-nt}o(Rt,"popStack");function st(){var nt;return nt=q.pop()||be.lex()||Pe,typeof nt!="number"&&(nt instanceof Array&&(q=nt,nt=q.pop()),nt=Ie.symbols_[nt]||nt),nt}o(st,"lex");for(var Ue,ct,We,ot,Yt,Tt,Mt={},bt,ut,St,ft;;){if(We=xe[xe.length-1],this.defaultActions[We]?ot=this.defaultActions[We]:((Ue===null||typeof Ue>"u")&&(Ue=st()),ot=oe[We]&&oe[We][Ue]),typeof ot>"u"||!ot.length||!ot[0]){var vt="";ft=[];for(bt in oe[We])this.terminals_[bt]&&bt>ve&&ft.push("'"+this.terminals_[bt]+"'");be.showPosition?vt="Parse error on line "+(Te+1)+`: `+be.showPosition()+` -Expecting `+ft.join(", ")+", got '"+(this.terminals_[Ue]||Ue)+"'":yt="Parse error on line "+(we+1)+": Unexpected "+(Ue==Pe?"end of input":"'"+(this.terminals_[Ue]||Ue)+"'"),this.parseError(yt,{text:be.match,token:this.terminals_[Ue]||Ue,line:be.yylineno,loc:qe,expected:ft})}if(ot[0]instanceof Array&&ot.length>1)throw new Error("Parse Error: multiple actions possible at state: "+We+", token: "+Ue);switch(ot[0]){case 1:xe.push(Ue),de.push(be.yytext),ie.push(be.yylloc),xe.push(ot[1]),Ue=null,ct?(Ue=ct,ct=null):(W=be.yyleng,V=be.yytext,we=be.yylineno,qe=be.yylloc,pe>0&&pe--);break;case 2:if(ut=this.productions_[ot[1]][1],Mt.$=de[de.length-ut],Mt._$={first_line:ie[ie.length-(ut||1)].first_line,last_line:ie[ie.length-1].last_line,first_column:ie[ie.length-(ut||1)].first_column,last_column:ie[ie.length-1].last_column},at&&(Mt._$.range=[ie[ie.length-(ut||1)].range[0],ie[ie.length-1].range[1]]),bt=this.performAction.apply(Mt,[V,W,we,Ve.yy,ot[1],de,ie].concat(_e)),typeof bt<"u")return bt;ut&&(xe=xe.slice(0,-1*ut*2),de=de.slice(0,-1*ut),ie=ie.slice(0,-1*ut)),xe.push(this.productions_[ot[1]][0]),de.push(Mt.$),ie.push(Mt._$),Et=oe[xe[xe.length-2]][xe[xe.length-1]],xe.push(Et);break;case 3:return!0}}return!0},"parse")},Be=function(){var ze={EOF:1,parseError:o(function(Ie,xe){if(this.yy.parser)this.yy.parser.parseError(Ie,xe);else throw new Error(Ie)},"parseError"),setInput:o(function(Le,Ie){return this.yy=Ie||this.yy||{},this._input=Le,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},"setInput"),input:o(function(){var Le=this._input[0];this.yytext+=Le,this.yyleng++,this.offset++,this.match+=Le,this.matched+=Le;var Ie=Le.match(/(?:\r\n?|\n).*/g);return Ie?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Le},"input"),unput:o(function(Le){var Ie=Le.length,xe=Le.split(/(?:\r\n?|\n)/g);this._input=Le+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Ie),this.offset-=Ie;var q=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),xe.length-1&&(this.yylineno-=xe.length-1);var de=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:xe?(xe.length===q.length?this.yylloc.first_column:0)+q[q.length-xe.length].length-xe[0].length:this.yylloc.first_column-Ie},this.options.ranges&&(this.yylloc.range=[de[0],de[0]+this.yyleng-Ie]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(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). +Expecting `+ft.join(", ")+", got '"+(this.terminals_[Ue]||Ue)+"'":vt="Parse error on line "+(Te+1)+": Unexpected "+(Ue==Pe?"end of input":"'"+(this.terminals_[Ue]||Ue)+"'"),this.parseError(vt,{text:be.match,token:this.terminals_[Ue]||Ue,line:be.yylineno,loc:qe,expected:ft})}if(ot[0]instanceof Array&&ot.length>1)throw new Error("Parse Error: multiple actions possible at state: "+We+", token: "+Ue);switch(ot[0]){case 1:xe.push(Ue),de.push(be.yytext),ie.push(be.yylloc),xe.push(ot[1]),Ue=null,ct?(Ue=ct,ct=null):(W=be.yyleng,V=be.yytext,Te=be.yylineno,qe=be.yylloc,pe>0&&pe--);break;case 2:if(ut=this.productions_[ot[1]][1],Mt.$=de[de.length-ut],Mt._$={first_line:ie[ie.length-(ut||1)].first_line,last_line:ie[ie.length-1].last_line,first_column:ie[ie.length-(ut||1)].first_column,last_column:ie[ie.length-1].last_column},at&&(Mt._$.range=[ie[ie.length-(ut||1)].range[0],ie[ie.length-1].range[1]]),Tt=this.performAction.apply(Mt,[V,W,Te,Ve.yy,ot[1],de,ie].concat(_e)),typeof Tt<"u")return Tt;ut&&(xe=xe.slice(0,-1*ut*2),de=de.slice(0,-1*ut),ie=ie.slice(0,-1*ut)),xe.push(this.productions_[ot[1]][0]),de.push(Mt.$),ie.push(Mt._$),St=oe[xe[xe.length-2]][xe[xe.length-1]],xe.push(St);break;case 3:return!0}}return!0},"parse")},Be=function(){var ze={EOF:1,parseError:o(function(Ie,xe){if(this.yy.parser)this.yy.parser.parseError(Ie,xe);else throw new Error(Ie)},"parseError"),setInput:o(function(Le,Ie){return this.yy=Ie||this.yy||{},this._input=Le,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},"setInput"),input:o(function(){var Le=this._input[0];this.yytext+=Le,this.yyleng++,this.offset++,this.match+=Le,this.matched+=Le;var Ie=Le.match(/(?:\r\n?|\n).*/g);return Ie?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Le},"input"),unput:o(function(Le){var Ie=Le.length,xe=Le.split(/(?:\r\n?|\n)/g);this._input=Le+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Ie),this.offset-=Ie;var q=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),xe.length-1&&(this.yylineno-=xe.length-1);var de=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:xe?(xe.length===q.length?this.yylloc.first_column:0)+q[q.length-xe.length].length-xe[0].length:this.yylloc.first_column-Ie},this.options.ranges&&(this.yylloc.range=[de[0],de[0]+this.yyleng-Ie]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(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},"reject"),less:o(function(Le){this.unput(this.match.slice(Le))},"less"),pastInput:o(function(){var Le=this.matched.substr(0,this.matched.length-this.match.length);return(Le.length>20?"...":"")+Le.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var Le=this.match;return Le.length<20&&(Le+=this._input.substr(0,20-Le.length)),(Le.substr(0,20)+(Le.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var Le=this.pastInput(),Ie=new Array(Le.length+1).join("-");return Le+this.upcomingInput()+` `+Ie+"^"},"showPosition"),test_match:o(function(Le,Ie){var xe,q,de;if(this.options.backtrack_lexer&&(de={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&&(de.yylloc.range=this.yylloc.range.slice(0))),q=Le[0].match(/(?:\r\n?|\n).*/g),q&&(this.yylineno+=q.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:q?q[q.length-1].length-q[q.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Le[0].length},this.yytext+=Le[0],this.match+=Le[0],this.matches=Le,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(Le[0].length),this.matched+=Le[0],xe=this.performAction.call(this,this.yy,this,Ie,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),xe)return xe;if(this._backtrack){for(var ie in de)this[ie]=de[ie];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Le,Ie,xe,q;this._more||(this.yytext="",this.match="");for(var de=this._currentRules(),ie=0;ieIe[0].length)){if(Ie=xe,q=ie,this.options.backtrack_lexer){if(Le=this.test_match(xe,de[ie]),Le!==!1)return Le;if(this._backtrack){Ie=!1;continue}else return!1}else if(!this.options.flex)break}return Ie?(Le=this.test_match(Ie,de[q]),Le!==!1?Le:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var Ie=this.next();return Ie||this.lex()},"lex"),begin:o(function(Ie){this.conditionStack.push(Ie)},"begin"),popState:o(function(){var Ie=this.conditionStack.length-1;return Ie>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(Ie){return Ie=this.conditionStack.length-1-Math.abs(Ie||0),Ie>=0?this.conditionStack[Ie]:"INITIAL"},"topState"),pushState:o(function(Ie){this.begin(Ie)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(Ie,xe,q,de){var ie=de;switch(q){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;break;case 7:return this.popState(),"acc_title_value";break;case 8:return this.begin("acc_descr"),26;break;case 9:return this.popState(),"acc_descr_value";break;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;break;case 23:return this.begin("person"),44;break;case 24:return this.begin("system_ext_queue"),51;break;case 25:return this.begin("system_ext_db"),50;break;case 26:return this.begin("system_ext"),49;break;case 27:return this.begin("system_queue"),48;break;case 28:return this.begin("system_db"),47;break;case 29:return this.begin("system"),46;break;case 30:return this.begin("boundary"),37;break;case 31:return this.begin("enterprise_boundary"),34;break;case 32:return this.begin("system_boundary"),36;break;case 33:return this.begin("container_ext_queue"),57;break;case 34:return this.begin("container_ext_db"),56;break;case 35:return this.begin("container_ext"),55;break;case 36:return this.begin("container_queue"),54;break;case 37:return this.begin("container_db"),53;break;case 38:return this.begin("container"),52;break;case 39:return this.begin("container_boundary"),38;break;case 40:return this.begin("component_ext_queue"),63;break;case 41:return this.begin("component_ext_db"),62;break;case 42:return this.begin("component_ext"),61;break;case 43:return this.begin("component_queue"),60;break;case 44:return this.begin("component_db"),59;break;case 45:return this.begin("component"),58;break;case 46:return this.begin("node"),39;break;case 47:return this.begin("node"),39;break;case 48:return this.begin("node_l"),40;break;case 49:return this.begin("node_r"),41;break;case 50:return this.begin("rel"),64;break;case 51:return this.begin("birel"),65;break;case 52:return this.begin("rel_u"),66;break;case 53:return this.begin("rel_u"),66;break;case 54:return this.begin("rel_d"),67;break;case 55:return this.begin("rel_d"),67;break;case 56:return this.begin("rel_l"),68;break;case 57:return this.begin("rel_l"),68;break;case 58:return this.begin("rel_r"),69;break;case 59:return this.begin("rel_r"),69;break;case 60:return this.begin("rel_b"),70;break;case 61:return this.begin("rel_index"),71;break;case 62:return this.begin("update_el_style"),72;break;case 63:return this.begin("update_rel_style"),73;break;case 64:return this.begin("update_layout_config"),74;break;case 65:return"EOF_IN_STRUCT";case 66:return this.begin("attribute"),"ATTRIBUTE_EMPTY";break;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";break;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}},"anonymous"),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 ze}();ye.lexer=Be;function He(){this.yy={}}return o(He,"Parser"),He.prototype=ye,ye.Parser=He,new He}();Ly.parser=Ly;i$=Ly});var qC,Gn,d0=N(()=>{"use strict";qC=o((t,e,{depth:r=2,clobber:n=!1}={})=>{let i={depth:r,clobber:n};return Array.isArray(e)&&!Array.isArray(t)?(e.forEach(a=>qC(t,a,i)),t):Array.isArray(e)&&Array.isArray(t)?(e.forEach(a=>{t.includes(a)||t.push(a)}),t):t===void 0||r<=0?t!=null&&typeof t=="object"&&typeof e=="object"?Object.assign(t,e):e:(e!==void 0&&typeof t=="object"&&typeof e=="object"&&Object.keys(e).forEach(a=>{typeof e[a]=="object"&&(t[a]===void 0||typeof t[a]=="object")?(t[a]===void 0&&(t[a]=Array.isArray(e[a])?[]:{}),t[a]=qC(t[a],e[a],{depth:r-1,clobber:n})):(n||typeof t[a]!="object"&&typeof e[a]!="object")&&(t[a]=e[a])}),t)},"assignWithDepth"),Gn=qC});var Y4,a$,s$=N(()=>{"use strict";Y4={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:o(t=>t>=255?255:t<0?0:t,"r"),g:o(t=>t>=255?255:t<0?0:t,"g"),b:o(t=>t>=255?255:t<0?0:t,"b"),h:o(t=>t%360,"h"),s:o(t=>t>=100?100:t<0?0:t,"s"),l:o(t=>t>=100?100:t<0?0:t,"l"),a:o(t=>t>=1?1:t<0?0:t,"a")},toLinear:o(t=>{let e=t/255;return t>.03928?Math.pow((e+.055)/1.055,2.4):e/12.92},"toLinear"),hue2rgb:o((t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<.16666666666666666?t+(e-t)*6*r:r<.5?e:r<.6666666666666666?t+(e-t)*(.6666666666666666-r)*6:t),"hue2rgb"),hsl2rgb:o(({h:t,s:e,l:r},n)=>{if(!e)return r*2.55;t/=360,e/=100,r/=100;let i=r<.5?r*(1+e):r+e-r*e,a=2*r-i;switch(n){case"r":return Y4.hue2rgb(a,i,t+.3333333333333333)*255;case"g":return Y4.hue2rgb(a,i,t)*255;case"b":return Y4.hue2rgb(a,i,t-.3333333333333333)*255}},"hsl2rgb"),rgb2hsl:o(({r:t,g:e,b:r},n)=>{t/=255,e/=255,r/=255;let i=Math.max(t,e,r),a=Math.min(t,e,r),s=(i+a)/2;if(n==="l")return s*100;if(i===a)return 0;let l=i-a,u=s>.5?l/(2-i-a):l/(i+a);if(n==="s")return u*100;switch(i){case t:return((e-r)/l+(e{"use strict";lxe={clamp:o((t,e,r)=>e>r?Math.min(e,Math.max(r,t)):Math.min(r,Math.max(e,t)),"clamp"),round:o(t=>Math.round(t*1e10)/1e10,"round")},o$=lxe});var cxe,c$,u$=N(()=>{"use strict";cxe={dec2hex:o(t=>{let e=Math.round(t).toString(16);return e.length>1?e:`0${e}`},"dec2hex")},c$=cxe});var uxe,jt,Xl=N(()=>{"use strict";s$();l$();u$();uxe={channel:a$,lang:o$,unit:c$},jt=uxe});var au,Oi,Ry=N(()=>{"use strict";Xl();au={};for(let t=0;t<=255;t++)au[t]=jt.unit.dec2hex(t);Oi={ALL:0,RGB:1,HSL:2}});var YC,h$,f$=N(()=>{"use strict";Ry();YC=class{static{o(this,"Type")}constructor(){this.type=Oi.ALL}get(){return this.type}set(e){if(this.type&&this.type!==e)throw new Error("Cannot change both RGB and HSL channels at the same time");this.type=e}reset(){this.type=Oi.ALL}is(e){return this.type===e}},h$=YC});var XC,d$,p$=N(()=>{"use strict";Xl();f$();Ry();XC=class{static{o(this,"Channels")}constructor(e,r){this.color=r,this.changed=!1,this.data=e,this.type=new h$}set(e,r){return this.color=r,this.changed=!1,this.data=e,this.type.type=Oi.ALL,this}_ensureHSL(){let e=this.data,{h:r,s:n,l:i}=e;r===void 0&&(e.h=jt.channel.rgb2hsl(e,"h")),n===void 0&&(e.s=jt.channel.rgb2hsl(e,"s")),i===void 0&&(e.l=jt.channel.rgb2hsl(e,"l"))}_ensureRGB(){let e=this.data,{r,g:n,b:i}=e;r===void 0&&(e.r=jt.channel.hsl2rgb(e,"r")),n===void 0&&(e.g=jt.channel.hsl2rgb(e,"g")),i===void 0&&(e.b=jt.channel.hsl2rgb(e,"b"))}get r(){let e=this.data,r=e.r;return!this.type.is(Oi.HSL)&&r!==void 0?r:(this._ensureHSL(),jt.channel.hsl2rgb(e,"r"))}get g(){let e=this.data,r=e.g;return!this.type.is(Oi.HSL)&&r!==void 0?r:(this._ensureHSL(),jt.channel.hsl2rgb(e,"g"))}get b(){let e=this.data,r=e.b;return!this.type.is(Oi.HSL)&&r!==void 0?r:(this._ensureHSL(),jt.channel.hsl2rgb(e,"b"))}get h(){let e=this.data,r=e.h;return!this.type.is(Oi.RGB)&&r!==void 0?r:(this._ensureRGB(),jt.channel.rgb2hsl(e,"h"))}get s(){let e=this.data,r=e.s;return!this.type.is(Oi.RGB)&&r!==void 0?r:(this._ensureRGB(),jt.channel.rgb2hsl(e,"s"))}get l(){let e=this.data,r=e.l;return!this.type.is(Oi.RGB)&&r!==void 0?r:(this._ensureRGB(),jt.channel.rgb2hsl(e,"l"))}get a(){return this.data.a}set r(e){this.type.set(Oi.RGB),this.changed=!0,this.data.r=e}set g(e){this.type.set(Oi.RGB),this.changed=!0,this.data.g=e}set b(e){this.type.set(Oi.RGB),this.changed=!0,this.data.b=e}set h(e){this.type.set(Oi.HSL),this.changed=!0,this.data.h=e}set s(e){this.type.set(Oi.HSL),this.changed=!0,this.data.s=e}set l(e){this.type.set(Oi.HSL),this.changed=!0,this.data.l=e}set a(e){this.changed=!0,this.data.a=e}},d$=XC});var hxe,lh,Ny=N(()=>{"use strict";p$();hxe=new d$({r:0,g:0,b:0,a:0},"transparent"),lh=hxe});var m$,td,jC=N(()=>{"use strict";Ny();Ry();m$={re:/^#((?:[a-f0-9]{2}){2,4}|[a-f0-9]{3})$/i,parse:o(t=>{if(t.charCodeAt(0)!==35)return;let e=t.match(m$.re);if(!e)return;let r=e[1],n=parseInt(r,16),i=r.length,a=i%4===0,s=i>4,l=s?1:17,u=s?8:4,h=a?0:-1,f=s?255:15;return lh.set({r:(n>>u*(h+3)&f)*l,g:(n>>u*(h+2)&f)*l,b:(n>>u*(h+1)&f)*l,a:a?(n&f)*l/255:1},t)},"parse"),stringify:o(t=>{let{r:e,g:r,b:n,a:i}=t;return i<1?`#${au[Math.round(e)]}${au[Math.round(r)]}${au[Math.round(n)]}${au[Math.round(i*255)]}`:`#${au[Math.round(e)]}${au[Math.round(r)]}${au[Math.round(n)]}`},"stringify")},td=m$});var X4,My,g$=N(()=>{"use strict";Xl();Ny();X4={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:o(t=>{let e=t.match(X4.hueRe);if(e){let[,r,n]=e;switch(n){case"grad":return jt.channel.clamp.h(parseFloat(r)*.9);case"rad":return jt.channel.clamp.h(parseFloat(r)*180/Math.PI);case"turn":return jt.channel.clamp.h(parseFloat(r)*360)}}return jt.channel.clamp.h(parseFloat(t))},"_hue2deg"),parse:o(t=>{let e=t.charCodeAt(0);if(e!==104&&e!==72)return;let r=t.match(X4.re);if(!r)return;let[,n,i,a,s,l]=r;return lh.set({h:X4._hue2deg(n),s:jt.channel.clamp.s(parseFloat(i)),l:jt.channel.clamp.l(parseFloat(a)),a:s?jt.channel.clamp.a(l?parseFloat(s)/100:parseFloat(s)):1},t)},"parse"),stringify:o(t=>{let{h:e,s:r,l:n,a:i}=t;return i<1?`hsla(${jt.lang.round(e)}, ${jt.lang.round(r)}%, ${jt.lang.round(n)}%, ${i})`:`hsl(${jt.lang.round(e)}, ${jt.lang.round(r)}%, ${jt.lang.round(n)}%)`},"stringify")},My=X4});var j4,KC,y$=N(()=>{"use strict";jC();j4={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:o(t=>{t=t.toLowerCase();let e=j4.colors[t];if(e)return td.parse(e)},"parse"),stringify:o(t=>{let e=td.stringify(t);for(let r in j4.colors)if(j4.colors[r]===e)return r},"stringify")},KC=j4});var v$,Iy,x$=N(()=>{"use strict";Xl();Ny();v$={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:o(t=>{let e=t.charCodeAt(0);if(e!==114&&e!==82)return;let r=t.match(v$.re);if(!r)return;let[,n,i,a,s,l,u,h,f]=r;return lh.set({r:jt.channel.clamp.r(i?parseFloat(n)*2.55:parseFloat(n)),g:jt.channel.clamp.g(s?parseFloat(a)*2.55:parseFloat(a)),b:jt.channel.clamp.b(u?parseFloat(l)*2.55:parseFloat(l)),a:h?jt.channel.clamp.a(f?parseFloat(h)/100:parseFloat(h)):1},t)},"parse"),stringify:o(t=>{let{r:e,g:r,b:n,a:i}=t;return i<1?`rgba(${jt.lang.round(e)}, ${jt.lang.round(r)}, ${jt.lang.round(n)}, ${jt.lang.round(i)})`:`rgb(${jt.lang.round(e)}, ${jt.lang.round(r)}, ${jt.lang.round(n)})`},"stringify")},Iy=v$});var fxe,Pi,su=N(()=>{"use strict";jC();g$();y$();x$();Ry();fxe={format:{keyword:KC,hex:td,rgb:Iy,rgba:Iy,hsl:My,hsla:My},parse:o(t=>{if(typeof t!="string")return t;let e=td.parse(t)||Iy.parse(t)||My.parse(t)||KC.parse(t);if(e)return e;throw new Error(`Unsupported color format: "${t}"`)},"parse"),stringify:o(t=>!t.changed&&t.color?t.color:t.type.is(Oi.HSL)||t.data.r===void 0?My.stringify(t):t.a<1||!Number.isInteger(t.r)||!Number.isInteger(t.g)||!Number.isInteger(t.b)?Iy.stringify(t):td.stringify(t),"stringify")},Pi=fxe});var dxe,K4,QC=N(()=>{"use strict";Xl();su();dxe=o((t,e)=>{let r=Pi.parse(t);for(let n in e)r[n]=jt.channel.clamp[n](e[n]);return Pi.stringify(r)},"change"),K4=dxe});var pxe,qa,ZC=N(()=>{"use strict";Xl();Ny();su();QC();pxe=o((t,e,r=0,n=1)=>{if(typeof t!="number")return K4(t,{a:e});let i=lh.set({r:jt.channel.clamp.r(t),g:jt.channel.clamp.g(e),b:jt.channel.clamp.b(r),a:jt.channel.clamp.a(n)});return Pi.stringify(i)},"rgba"),qa=pxe});var mxe,rd,b$=N(()=>{"use strict";Xl();su();mxe=o((t,e)=>jt.lang.round(Pi.parse(t)[e]),"channel"),rd=mxe});var gxe,w$,T$=N(()=>{"use strict";Xl();su();gxe=o(t=>{let{r:e,g:r,b:n}=Pi.parse(t),i=.2126*jt.channel.toLinear(e)+.7152*jt.channel.toLinear(r)+.0722*jt.channel.toLinear(n);return jt.lang.round(i)},"luminance"),w$=gxe});var yxe,k$,E$=N(()=>{"use strict";T$();yxe=o(t=>w$(t)>=.5,"isLight"),k$=yxe});var vxe,ca,S$=N(()=>{"use strict";E$();vxe=o(t=>!k$(t),"isDark"),ca=vxe});var xxe,Q4,JC=N(()=>{"use strict";Xl();su();xxe=o((t,e,r)=>{let n=Pi.parse(t),i=n[e],a=jt.channel.clamp[e](i+r);return i!==a&&(n[e]=a),Pi.stringify(n)},"adjustChannel"),Q4=xxe});var bxe,Dt,C$=N(()=>{"use strict";JC();bxe=o((t,e)=>Q4(t,"l",e),"lighten"),Dt=bxe});var wxe,Ot,A$=N(()=>{"use strict";JC();wxe=o((t,e)=>Q4(t,"l",-e),"darken"),Ot=wxe});var Txe,Me,_$=N(()=>{"use strict";su();QC();Txe=o((t,e)=>{let r=Pi.parse(t),n={};for(let i in e)e[i]&&(n[i]=r[i]+e[i]);return K4(t,n)},"adjust"),Me=Txe});var kxe,D$,L$=N(()=>{"use strict";su();ZC();kxe=o((t,e,r=50)=>{let{r:n,g:i,b:a,a:s}=Pi.parse(t),{r:l,g:u,b:h,a:f}=Pi.parse(e),d=r/100,p=d*2-1,m=s-f,y=((p*m===-1?p:(p+m)/(1+p*m))+1)/2,v=1-y,x=n*y+l*v,b=i*y+u*v,w=a*y+h*v,C=s*d+f*(1-d);return qa(x,b,w,C)},"mix"),D$=kxe});var Exe,wt,R$=N(()=>{"use strict";su();L$();Exe=o((t,e=100)=>{let r=Pi.parse(t);return r.r=255-r.r,r.g=255-r.g,r.b=255-r.b,D$(r,t,e)},"invert"),wt=Exe});var N$=N(()=>{"use strict";ZC();b$();S$();C$();A$();_$();R$()});var js=N(()=>{"use strict";N$()});var ch,uh,Oy=N(()=>{"use strict";ch="#ffffff",uh="#f2f2f2"});var ki,p0=N(()=>{"use strict";js();ki=o((t,e)=>e?Me(t,{s:-40,l:10}):Me(t,{s:-40,l:-10}),"mkBorder")});var t7,M$,I$=N(()=>{"use strict";js();Oy();p0();t7=class{static{o(this,"Theme")}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||Me(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||Me(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||ki(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||ki(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||ki(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||ki(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#333",this.secondaryTextColor=this.secondaryTextColor||wt(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||wt(this.tertiaryColor),this.lineColor=this.lineColor||wt(this.background),this.arrowheadColor=this.arrowheadColor||wt(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?Ot(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||this.actorBorder,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||Ot(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||wt(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||Dt(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.vertLineColor=this.vertLineColor||"navy",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.darkMode?(this.rowOdd=this.rowOdd||Ot(this.mainBkg,5)||"#ffffff",this.rowEven=this.rowEven||Ot(this.mainBkg,10)):(this.rowOdd=this.rowOdd||Dt(this.mainBkg,75)||"#ffffff",this.rowEven=this.rowEven||Dt(this.mainBkg,5)),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||Me(this.primaryColor,{h:30}),this.cScale4=this.cScale4||Me(this.primaryColor,{h:60}),this.cScale5=this.cScale5||Me(this.primaryColor,{h:90}),this.cScale6=this.cScale6||Me(this.primaryColor,{h:120}),this.cScale7=this.cScale7||Me(this.primaryColor,{h:150}),this.cScale8=this.cScale8||Me(this.primaryColor,{h:210,l:150}),this.cScale9=this.cScale9||Me(this.primaryColor,{h:270}),this.cScale10=this.cScale10||Me(this.primaryColor,{h:300}),this.cScale11=this.cScale11||Me(this.primaryColor,{h:330}),this.darkMode)for(let r=0;r{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}},M$=o(t=>{let e=new t7;return e.calculate(t),e},"getThemeVariables")});var r7,O$,P$=N(()=>{"use strict";js();p0();r7=class{static{o(this,"Theme")}constructor(){this.background="#333",this.primaryColor="#1f2020",this.secondaryColor=Dt(this.primaryColor,16),this.tertiaryColor=Me(this.primaryColor,{h:-160}),this.primaryBorderColor=wt(this.background),this.secondaryBorderColor=ki(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=ki(this.tertiaryColor,this.darkMode),this.primaryTextColor=wt(this.primaryColor),this.secondaryTextColor=wt(this.secondaryColor),this.tertiaryTextColor=wt(this.tertiaryColor),this.lineColor=wt(this.background),this.textColor=wt(this.background),this.mainBkg="#1f2020",this.secondBkg="calculated",this.mainContrastColor="lightgrey",this.darkTextColor=Dt(wt("#323D47"),10),this.lineColor="calculated",this.border1="#ccc",this.border2=qa(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=Ot("#EAE8D9",30),this.altSectionBkgColor="calculated",this.sectionBkgColor2="#EAE8D9",this.excludeBkgColor=Ot(this.sectionBkgColor,10),this.taskBorderColor=qa(255,255,255,70),this.taskBkgColor="calculated",this.taskTextColor="calculated",this.taskTextLightColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor=qa(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.vertLineColor="#00BFFF",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.rowOdd=this.rowOdd||Dt(this.mainBkg,5)||"#ffffff",this.rowEven=this.rowEven||Ot(this.mainBkg,10),this.labelColor="calculated",this.errorBkgColor="#a44141",this.errorTextColor="#ddd"}updateColors(){this.secondBkg=Dt(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=Dt(this.labelBackground,25),this.actorBorder=this.border1,this.actorBkg=this.mainBkg,this.actorTextColor=this.mainContrastColor,this.actorLineColor=this.actorBorder,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=Dt(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.archEdgeColor=this.lineColor,this.archEdgeArrowColor=this.lineColor,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=Me(this.primaryColor,{h:64}),this.fillType3=Me(this.secondaryColor,{h:64}),this.fillType4=Me(this.primaryColor,{h:-64}),this.fillType5=Me(this.secondaryColor,{h:-64}),this.fillType6=Me(this.primaryColor,{h:128}),this.fillType7=Me(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||Me(this.primaryColor,{h:30}),this.cScale4=this.cScale4||Me(this.primaryColor,{h:60}),this.cScale5=this.cScale5||Me(this.primaryColor,{h:90}),this.cScale6=this.cScale6||Me(this.primaryColor,{h:120}),this.cScale7=this.cScale7||Me(this.primaryColor,{h:150}),this.cScale8=this.cScale8||Me(this.primaryColor,{h:210}),this.cScale9=this.cScale9||Me(this.primaryColor,{h:270}),this.cScale10=this.cScale10||Me(this.primaryColor,{h:300}),this.cScale11=this.cScale11||Me(this.primaryColor,{h:330});for(let e=0;e{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}},O$=o(t=>{let e=new r7;return e.calculate(t),e},"getThemeVariables")});var n7,hh,Py=N(()=>{"use strict";js();p0();Oy();n7=class{static{o(this,"Theme")}constructor(){this.background="#f4f4f4",this.primaryColor="#ECECFF",this.secondaryColor=Me(this.primaryColor,{h:120}),this.secondaryColor="#ffffde",this.tertiaryColor=Me(this.primaryColor,{h:-160}),this.primaryBorderColor=ki(this.primaryColor,this.darkMode),this.secondaryBorderColor=ki(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=ki(this.tertiaryColor,this.darkMode),this.primaryTextColor=wt(this.primaryColor),this.secondaryTextColor=wt(this.secondaryColor),this.tertiaryTextColor=wt(this.tertiaryColor),this.lineColor=wt(this.background),this.textColor=wt(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="rgba(232,232,232, 0.8)",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="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="#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.vertLineColor="calculated",this.sectionBkgColor=qa(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.vertLineColor="navy",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.rowOdd="calculated",this.rowEven="calculated",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||Me(this.primaryColor,{h:30}),this.cScale4=this.cScale4||Me(this.primaryColor,{h:60}),this.cScale5=this.cScale5||Me(this.primaryColor,{h:90}),this.cScale6=this.cScale6||Me(this.primaryColor,{h:120}),this.cScale7=this.cScale7||Me(this.primaryColor,{h:150}),this.cScale8=this.cScale8||Me(this.primaryColor,{h:210}),this.cScale9=this.cScale9||Me(this.primaryColor,{h:270}),this.cScale10=this.cScale10||Me(this.primaryColor,{h:300}),this.cScale11=this.cScale11||Me(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||Ot(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||Ot(this.tertiaryColor,40);for(let e=0;e{this[n]==="calculated"&&(this[n]=void 0)}),typeof e!="object"){this.updateColors();return}let r=Object.keys(e);r.forEach(n=>{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}},hh=o(t=>{let e=new n7;return e.calculate(t),e},"getThemeVariables")});var i7,B$,F$=N(()=>{"use strict";js();Oy();p0();i7=class{static{o(this,"Theme")}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=Dt("#cde498",10),this.primaryBorderColor=ki(this.primaryColor,this.darkMode),this.secondaryBorderColor=ki(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=ki(this.tertiaryColor,this.darkMode),this.primaryTextColor=wt(this.primaryColor),this.secondaryTextColor=wt(this.secondaryColor),this.tertiaryTextColor=wt(this.primaryColor),this.lineColor=wt(this.background),this.textColor=wt(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="calculated",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.vertLineColor="#00BFFF",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){this.actorBorder=Ot(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.actorLineColor=this.actorBorder,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||Me(this.primaryColor,{h:30}),this.cScale4=this.cScale4||Me(this.primaryColor,{h:60}),this.cScale5=this.cScale5||Me(this.primaryColor,{h:90}),this.cScale6=this.cScale6||Me(this.primaryColor,{h:120}),this.cScale7=this.cScale7||Me(this.primaryColor,{h:150}),this.cScale8=this.cScale8||Me(this.primaryColor,{h:210}),this.cScale9=this.cScale9||Me(this.primaryColor,{h:270}),this.cScale10=this.cScale10||Me(this.primaryColor,{h:300}),this.cScale11=this.cScale11||Me(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||Ot(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||Ot(this.tertiaryColor,40);for(let e=0;e{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}},B$=o(t=>{let e=new i7;return e.calculate(t),e},"getThemeVariables")});var a7,$$,z$=N(()=>{"use strict";js();p0();Oy();a7=class{static{o(this,"Theme")}constructor(){this.primaryColor="#eee",this.contrast="#707070",this.secondaryColor=Dt(this.contrast,55),this.background="#ffffff",this.tertiaryColor=Me(this.primaryColor,{h:-160}),this.primaryBorderColor=ki(this.primaryColor,this.darkMode),this.secondaryBorderColor=ki(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=ki(this.tertiaryColor,this.darkMode),this.primaryTextColor=wt(this.primaryColor),this.secondaryTextColor=wt(this.secondaryColor),this.tertiaryTextColor=wt(this.tertiaryColor),this.lineColor=wt(this.background),this.textColor=wt(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=this.actorBorder,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.vertLineColor="calculated",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.rowOdd=this.rowOdd||Dt(this.mainBkg,75)||"#ffffff",this.rowEven=this.rowEven||"#f4f4f4",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){this.secondBkg=Dt(this.contrast,55),this.border2=this.contrast,this.actorBorder=Dt(this.border1,23),this.actorBkg=this.mainBkg,this.actorTextColor=this.text,this.actorLineColor=this.actorBorder,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 e=0;e{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}},$$=o(t=>{let e=new a7;return e.calculate(t),e},"getThemeVariables")});var ko,Z4=N(()=>{"use strict";I$();P$();Py();F$();z$();ko={base:{getThemeVariables:M$},dark:{getThemeVariables:O$},default:{getThemeVariables:hh},forest:{getThemeVariables:B$},neutral:{getThemeVariables:$$}}});var ol,G$=N(()=>{"use strict";ol={flowchart:{useMaxWidth:!0,titleTopMargin:25,subGraphTitleMargin:{top:0,bottom:0},diagramPadding:8,htmlLabels:!0,nodeSpacing:50,rankSpacing:50,curve:"basis",padding:15,defaultRenderer:"dagre-wrapper",wrappingWidth:200,inheritDir:!1},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,maxLabelWidth:360,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"],titleColor:"",titleFontFamily:'"trebuchet ms", verdana, arial, sans-serif',titleFontSize:"4ex"},class:{useMaxWidth:!0,titleTopMargin:25,arrowMarkerAbsolute:!1,dividerMargin:10,padding:5,textHeight:10,defaultRenderer:"dagre-wrapper",htmlLabels:!1,hideEmptyMembersBox:!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,nodeSpacing:140,rankSpacing:80,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},xyChart:{useMaxWidth:!0,width:700,height:500,titleFontSize:20,titlePadding:10,showDataLabel:!1,showTitle:!0,xAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},yAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},chartOrientation:"vertical",plotReservedSpacePercent:50},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},kanban:{useMaxWidth:!0,padding:8,sectionWidth:200,ticketBaseUrl:""},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,parallelCommits:!1,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:""},block:{useMaxWidth:!0,padding:8},packet:{useMaxWidth:!0,rowHeight:32,bitWidth:32,bitsPerRow:32,showBits:!0,paddingX:5,paddingY:5},architecture:{useMaxWidth:!0,padding:40,iconSize:80,fontSize:16},radar:{useMaxWidth:!0,width:600,height:600,marginTop:50,marginRight:50,marginBottom:50,marginLeft:50,axisScaleFactor:1,axisLabelFactor:1.05,curveTension:.17},theme:"default",look:"classic",handDrawnSeed:0,layout:"dagre",maxTextSize:5e4,maxEdges:500,darkMode:!1,fontFamily:'"trebuchet ms", verdana, arial, sans-serif;',logLevel:5,securityLevel:"strict",startOnLoad:!0,arrowMarkerAbsolute:!1,secure:["secure","securityLevel","startOnLoad","maxTextSize","suppressErrorRendering","maxEdges"],legacyMathML:!1,forceLegacyMathML:!1,deterministicIds:!1,fontSize:16,markdownAutoWrap:!0,suppressErrorRendering:!1}});var V$,U$,H$,lr,Ya=N(()=>{"use strict";Z4();G$();V$={...ol,deterministicIDSeed:void 0,elk:{mergeEdges:!1,nodePlacementStrategy:"BRANDES_KOEPF"},themeCSS:void 0,themeVariables:ko.default.getThemeVariables(),sequence:{...ol.sequence,messageFont:o(function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},"messageFont"),noteFont:o(function(){return{fontFamily:this.noteFontFamily,fontSize:this.noteFontSize,fontWeight:this.noteFontWeight}},"noteFont"),actorFont:o(function(){return{fontFamily:this.actorFontFamily,fontSize:this.actorFontSize,fontWeight:this.actorFontWeight}},"actorFont")},class:{hideEmptyMembersBox:!1},gantt:{...ol.gantt,tickInterval:void 0,useWidth:void 0},c4:{...ol.c4,useWidth:void 0,personFont:o(function(){return{fontFamily:this.personFontFamily,fontSize:this.personFontSize,fontWeight:this.personFontWeight}},"personFont"),flowchart:{...ol.flowchart,inheritDir:!1},external_personFont:o(function(){return{fontFamily:this.external_personFontFamily,fontSize:this.external_personFontSize,fontWeight:this.external_personFontWeight}},"external_personFont"),systemFont:o(function(){return{fontFamily:this.systemFontFamily,fontSize:this.systemFontSize,fontWeight:this.systemFontWeight}},"systemFont"),external_systemFont:o(function(){return{fontFamily:this.external_systemFontFamily,fontSize:this.external_systemFontSize,fontWeight:this.external_systemFontWeight}},"external_systemFont"),system_dbFont:o(function(){return{fontFamily:this.system_dbFontFamily,fontSize:this.system_dbFontSize,fontWeight:this.system_dbFontWeight}},"system_dbFont"),external_system_dbFont:o(function(){return{fontFamily:this.external_system_dbFontFamily,fontSize:this.external_system_dbFontSize,fontWeight:this.external_system_dbFontWeight}},"external_system_dbFont"),system_queueFont:o(function(){return{fontFamily:this.system_queueFontFamily,fontSize:this.system_queueFontSize,fontWeight:this.system_queueFontWeight}},"system_queueFont"),external_system_queueFont:o(function(){return{fontFamily:this.external_system_queueFontFamily,fontSize:this.external_system_queueFontSize,fontWeight:this.external_system_queueFontWeight}},"external_system_queueFont"),containerFont:o(function(){return{fontFamily:this.containerFontFamily,fontSize:this.containerFontSize,fontWeight:this.containerFontWeight}},"containerFont"),external_containerFont:o(function(){return{fontFamily:this.external_containerFontFamily,fontSize:this.external_containerFontSize,fontWeight:this.external_containerFontWeight}},"external_containerFont"),container_dbFont:o(function(){return{fontFamily:this.container_dbFontFamily,fontSize:this.container_dbFontSize,fontWeight:this.container_dbFontWeight}},"container_dbFont"),external_container_dbFont:o(function(){return{fontFamily:this.external_container_dbFontFamily,fontSize:this.external_container_dbFontSize,fontWeight:this.external_container_dbFontWeight}},"external_container_dbFont"),container_queueFont:o(function(){return{fontFamily:this.container_queueFontFamily,fontSize:this.container_queueFontSize,fontWeight:this.container_queueFontWeight}},"container_queueFont"),external_container_queueFont:o(function(){return{fontFamily:this.external_container_queueFontFamily,fontSize:this.external_container_queueFontSize,fontWeight:this.external_container_queueFontWeight}},"external_container_queueFont"),componentFont:o(function(){return{fontFamily:this.componentFontFamily,fontSize:this.componentFontSize,fontWeight:this.componentFontWeight}},"componentFont"),external_componentFont:o(function(){return{fontFamily:this.external_componentFontFamily,fontSize:this.external_componentFontSize,fontWeight:this.external_componentFontWeight}},"external_componentFont"),component_dbFont:o(function(){return{fontFamily:this.component_dbFontFamily,fontSize:this.component_dbFontSize,fontWeight:this.component_dbFontWeight}},"component_dbFont"),external_component_dbFont:o(function(){return{fontFamily:this.external_component_dbFontFamily,fontSize:this.external_component_dbFontSize,fontWeight:this.external_component_dbFontWeight}},"external_component_dbFont"),component_queueFont:o(function(){return{fontFamily:this.component_queueFontFamily,fontSize:this.component_queueFontSize,fontWeight:this.component_queueFontWeight}},"component_queueFont"),external_component_queueFont:o(function(){return{fontFamily:this.external_component_queueFontFamily,fontSize:this.external_component_queueFontSize,fontWeight:this.external_component_queueFontWeight}},"external_component_queueFont"),boundaryFont:o(function(){return{fontFamily:this.boundaryFontFamily,fontSize:this.boundaryFontSize,fontWeight:this.boundaryFontWeight}},"boundaryFont"),messageFont:o(function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},"messageFont")},pie:{...ol.pie,useWidth:984},xyChart:{...ol.xyChart,useWidth:void 0},requirement:{...ol.requirement,useWidth:void 0},packet:{...ol.packet},radar:{...ol.radar}},U$=o((t,e="")=>Object.keys(t).reduce((r,n)=>Array.isArray(t[n])?r:typeof t[n]=="object"&&t[n]!==null?[...r,e+n,...U$(t[n],"")]:[...r,e+n],[]),"keyify"),H$=new Set(U$(V$,"")),lr=V$});var m0,Sxe,s7=N(()=>{"use strict";Ya();vt();m0=o(t=>{if(X.debug("sanitizeDirective called with",t),!(typeof t!="object"||t==null)){if(Array.isArray(t)){t.forEach(e=>m0(e));return}for(let e of Object.keys(t)){if(X.debug("Checking key",e),e.startsWith("__")||e.includes("proto")||e.includes("constr")||!H$.has(e)||t[e]==null){X.debug("sanitize deleting key: ",e),delete t[e];continue}if(typeof t[e]=="object"){X.debug("sanitizing object",e),m0(t[e]);continue}let r=["themeCSS","fontFamily","altFontFamily"];for(let n of r)e.includes(n)&&(X.debug("sanitizing css option",e),t[e]=Sxe(t[e]))}if(t.themeVariables)for(let e of Object.keys(t.themeVariables)){let r=t.themeVariables[e];r?.match&&!r.match(/^[\d "#%(),.;A-Za-z]+$/)&&(t.themeVariables[e]="")}X.debug("After sanitization",t)}},"sanitizeDirective"),Sxe=o(t=>{let e=0,r=0;for(let n of t){if(e{"use strict";d0();vt();Z4();Ya();s7();fh=Object.freeze(lr),ws=Gn({},fh),g0=[],By=Gn({},fh),J4=o((t,e)=>{let r=Gn({},t),n={};for(let i of e)j$(i),n=Gn(n,i);if(r=Gn(r,n),n.theme&&n.theme in ko){let i=Gn({},q$),a=Gn(i.themeVariables||{},n.themeVariables);r.theme&&r.theme in ko&&(r.themeVariables=ko[r.theme].getThemeVariables(a))}return By=r,Q$(By),By},"updateCurrentConfig"),o7=o(t=>(ws=Gn({},fh),ws=Gn(ws,t),t.theme&&ko[t.theme]&&(ws.themeVariables=ko[t.theme].getThemeVariables(t.themeVariables)),J4(ws,g0),ws),"setSiteConfig"),Y$=o(t=>{q$=Gn({},t)},"saveConfigFromInitialize"),X$=o(t=>(ws=Gn(ws,t),J4(ws,g0),ws),"updateSiteConfig"),l7=o(()=>Gn({},ws),"getSiteConfig"),e3=o(t=>(Q$(t),Gn(By,t),sr()),"setConfig"),sr=o(()=>Gn({},By),"getConfig"),j$=o(t=>{t&&(["secure",...ws.secure??[]].forEach(e=>{Object.hasOwn(t,e)&&(X.debug(`Denied attempt to modify a secure key ${e}`,t[e]),delete t[e])}),Object.keys(t).forEach(e=>{e.startsWith("__")&&delete t[e]}),Object.keys(t).forEach(e=>{typeof t[e]=="string"&&(t[e].includes("<")||t[e].includes(">")||t[e].includes("url(data:"))&&delete t[e],typeof t[e]=="object"&&j$(t[e])}))},"sanitize"),K$=o(t=>{m0(t),t.fontFamily&&!t.themeVariables?.fontFamily&&(t.themeVariables={...t.themeVariables,fontFamily:t.fontFamily}),g0.push(t),J4(ws,g0)},"addDirective"),Fy=o((t=ws)=>{g0=[],J4(t,g0)},"reset"),Cxe={LAZY_LOAD_DEPRECATED:"The configuration options lazyLoadedDiagrams and loadExternalDiagramsAtStartup are deprecated. Please use registerExternalDiagrams instead."},W$={},Axe=o(t=>{W$[t]||(X.warn(Cxe[t]),W$[t]=!0)},"issueWarning"),Q$=o(t=>{t&&(t.lazyLoadedDiagrams||t.loadExternalDiagramsAtStartup)&&Axe("LAZY_LOAD_DEPRECATED")},"checkConfig")});function Ka(t){return function(e){e instanceof RegExp&&(e.lastIndex=0);for(var r=arguments.length,n=new Array(r>1?r-1:0),i=1;i2&&arguments[2]!==void 0?arguments[2]:n3;Z$&&Z$(t,null);let n=e.length;for(;n--;){let i=e[n];if(typeof i=="string"){let a=r(i);a!==i&&(_xe(e)||(e[n]=a),i=a)}t[i]=!0}return t}function Pxe(t){for(let e=0;e0&&arguments[0]!==void 0?arguments[0]:Yxe(),e=o(At=>hz(At),"DOMPurify");if(e.version="3.2.5",e.removed=[],!t||!t.document||t.document.nodeType!==Uy.document||!t.Element)return e.isSupported=!1,e;let{document:r}=t,n=r,i=n.currentScript,{DocumentFragment:a,HTMLTemplateElement:s,Node:l,Element:u,NodeFilter:h,NamedNodeMap:f=t.NamedNodeMap||t.MozNamedAttrMap,HTMLFormElement:d,DOMParser:p,trustedTypes:m}=t,g=u.prototype,y=Vy(g,"cloneNode"),v=Vy(g,"remove"),x=Vy(g,"nextSibling"),b=Vy(g,"childNodes"),w=Vy(g,"parentNode");if(typeof s=="function"){let At=r.createElement("template");At.content&&At.content.ownerDocument&&(r=At.content.ownerDocument)}let C,T="",{implementation:E,createNodeIterator:A,createDocumentFragment:S,getElementsByTagName:_}=r,{importNode:I}=n,L=sz();e.isSupported=typeof oz=="function"&&typeof w=="function"&&E&&E.createHTMLDocument!==void 0;let{MUSTACHE_EXPR:k,ERB_EXPR:D,TMPLIT_EXPR:R,DATA_ATTR:O,ARIA_ATTR:M,IS_SCRIPT_OR_DATA:P,ATTR_WHITESPACE:B,CUSTOM_ELEMENT:F}=az,{IS_ALLOWED_URI:z}=az,$=null,U=Cr({},[...tz,...u7,...h7,...f7,...rz]),Q=null,te=Cr({},[...nz,...d7,...iz,...r3]),Y=Object.seal(lz(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}})),he=null,Z=null,ue=!0,K=!0,j=!1,ne=!0,ee=!1,ce=!0,le=!1,J=!1,Se=!1,se=!1,ae=!1,Oe=!1,ye=!0,Be=!1,He="user-content-",ze=!0,Le=!1,Ie={},xe=null,q=Cr({},["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"]),de=null,ie=Cr({},["audio","video","img","source","image","track"]),oe=null,V=Cr({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),we="http://www.w3.org/1998/Math/MathML",W="http://www.w3.org/2000/svg",pe="http://www.w3.org/1999/xhtml",ve=pe,Pe=!1,_e=null,be=Cr({},[we,W,pe],c7),Ve=Cr({},["mi","mo","mn","ms","mtext"]),De=Cr({},["annotation-xml"]),qe=Cr({},["title","style","font","a","script"]),at=null,Lt=["application/xhtml+xml","text/html"],st="text/html",Ue=null,ct=null,We=r.createElement("form"),ot=o(function(Ce){return Ce instanceof RegExp||Ce instanceof Function},"isRegexOrFunction"),Yt=o(function(){let Ce=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!(ct&&ct===Ce)){if((!Ce||typeof Ce!="object")&&(Ce={}),Ce=nd(Ce),at=Lt.indexOf(Ce.PARSER_MEDIA_TYPE)===-1?st:Ce.PARSER_MEDIA_TYPE,Ue=at==="application/xhtml+xml"?c7:n3,$=ll(Ce,"ALLOWED_TAGS")?Cr({},Ce.ALLOWED_TAGS,Ue):U,Q=ll(Ce,"ALLOWED_ATTR")?Cr({},Ce.ALLOWED_ATTR,Ue):te,_e=ll(Ce,"ALLOWED_NAMESPACES")?Cr({},Ce.ALLOWED_NAMESPACES,c7):be,oe=ll(Ce,"ADD_URI_SAFE_ATTR")?Cr(nd(V),Ce.ADD_URI_SAFE_ATTR,Ue):V,de=ll(Ce,"ADD_DATA_URI_TAGS")?Cr(nd(ie),Ce.ADD_DATA_URI_TAGS,Ue):ie,xe=ll(Ce,"FORBID_CONTENTS")?Cr({},Ce.FORBID_CONTENTS,Ue):q,he=ll(Ce,"FORBID_TAGS")?Cr({},Ce.FORBID_TAGS,Ue):{},Z=ll(Ce,"FORBID_ATTR")?Cr({},Ce.FORBID_ATTR,Ue):{},Ie=ll(Ce,"USE_PROFILES")?Ce.USE_PROFILES:!1,ue=Ce.ALLOW_ARIA_ATTR!==!1,K=Ce.ALLOW_DATA_ATTR!==!1,j=Ce.ALLOW_UNKNOWN_PROTOCOLS||!1,ne=Ce.ALLOW_SELF_CLOSE_IN_ATTR!==!1,ee=Ce.SAFE_FOR_TEMPLATES||!1,ce=Ce.SAFE_FOR_XML!==!1,le=Ce.WHOLE_DOCUMENT||!1,se=Ce.RETURN_DOM||!1,ae=Ce.RETURN_DOM_FRAGMENT||!1,Oe=Ce.RETURN_TRUSTED_TYPE||!1,Se=Ce.FORCE_BODY||!1,ye=Ce.SANITIZE_DOM!==!1,Be=Ce.SANITIZE_NAMED_PROPS||!1,ze=Ce.KEEP_CONTENT!==!1,Le=Ce.IN_PLACE||!1,z=Ce.ALLOWED_URI_REGEXP||cz,ve=Ce.NAMESPACE||pe,Ve=Ce.MATHML_TEXT_INTEGRATION_POINTS||Ve,De=Ce.HTML_INTEGRATION_POINTS||De,Y=Ce.CUSTOM_ELEMENT_HANDLING||{},Ce.CUSTOM_ELEMENT_HANDLING&&ot(Ce.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(Y.tagNameCheck=Ce.CUSTOM_ELEMENT_HANDLING.tagNameCheck),Ce.CUSTOM_ELEMENT_HANDLING&&ot(Ce.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(Y.attributeNameCheck=Ce.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),Ce.CUSTOM_ELEMENT_HANDLING&&typeof Ce.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(Y.allowCustomizedBuiltInElements=Ce.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),ee&&(K=!1),ae&&(se=!0),Ie&&($=Cr({},rz),Q=[],Ie.html===!0&&(Cr($,tz),Cr(Q,nz)),Ie.svg===!0&&(Cr($,u7),Cr(Q,d7),Cr(Q,r3)),Ie.svgFilters===!0&&(Cr($,h7),Cr(Q,d7),Cr(Q,r3)),Ie.mathMl===!0&&(Cr($,f7),Cr(Q,iz),Cr(Q,r3))),Ce.ADD_TAGS&&($===U&&($=nd($)),Cr($,Ce.ADD_TAGS,Ue)),Ce.ADD_ATTR&&(Q===te&&(Q=nd(Q)),Cr(Q,Ce.ADD_ATTR,Ue)),Ce.ADD_URI_SAFE_ATTR&&Cr(oe,Ce.ADD_URI_SAFE_ATTR,Ue),Ce.FORBID_CONTENTS&&(xe===q&&(xe=nd(xe)),Cr(xe,Ce.FORBID_CONTENTS,Ue)),ze&&($["#text"]=!0),le&&Cr($,["html","head","body"]),$.table&&(Cr($,["tbody"]),delete he.tbody),Ce.TRUSTED_TYPES_POLICY){if(typeof Ce.TRUSTED_TYPES_POLICY.createHTML!="function")throw Gy('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof Ce.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw Gy('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');C=Ce.TRUSTED_TYPES_POLICY,T=C.createHTML("")}else C===void 0&&(C=Xxe(m,i)),C!==null&&typeof T=="string"&&(T=C.createHTML(""));ja&&ja(Ce),ct=Ce}},"_parseConfig"),bt=Cr({},[...u7,...h7,...Bxe]),Mt=Cr({},[...f7,...Fxe]),xt=o(function(Ce){let tt=w(Ce);(!tt||!tt.tagName)&&(tt={namespaceURI:ve,tagName:"template"});let St=n3(Ce.tagName),gr=n3(tt.tagName);return _e[Ce.namespaceURI]?Ce.namespaceURI===W?tt.namespaceURI===pe?St==="svg":tt.namespaceURI===we?St==="svg"&&(gr==="annotation-xml"||Ve[gr]):!!bt[St]:Ce.namespaceURI===we?tt.namespaceURI===pe?St==="math":tt.namespaceURI===W?St==="math"&&De[gr]:!!Mt[St]:Ce.namespaceURI===pe?tt.namespaceURI===W&&!De[gr]||tt.namespaceURI===we&&!Ve[gr]?!1:!Mt[St]&&(qe[St]||!bt[St]):!!(at==="application/xhtml+xml"&&_e[Ce.namespaceURI]):!1},"_checkValidNamespace"),ut=o(function(Ce){$y(e.removed,{element:Ce});try{w(Ce).removeChild(Ce)}catch{v(Ce)}},"_forceRemove"),Et=o(function(Ce,tt){try{$y(e.removed,{attribute:tt.getAttributeNode(Ce),from:tt})}catch{$y(e.removed,{attribute:null,from:tt})}if(tt.removeAttribute(Ce),Ce==="is")if(se||ae)try{ut(tt)}catch{}else try{tt.setAttribute(Ce,"")}catch{}},"_removeAttribute"),ft=o(function(Ce){let tt=null,St=null;if(Se)Ce=""+Ce;else{let gn=ez(Ce,/^[\r\n\t ]+/);St=gn&&gn[0]}at==="application/xhtml+xml"&&ve===pe&&(Ce=''+Ce+"");let gr=C?C.createHTML(Ce):Ce;if(ve===pe)try{tt=new p().parseFromString(gr,at)}catch{}if(!tt||!tt.documentElement){tt=E.createDocument(ve,"template",null);try{tt.documentElement.innerHTML=Pe?T:gr}catch{}}let rn=tt.body||tt.documentElement;return Ce&&St&&rn.insertBefore(r.createTextNode(St),rn.childNodes[0]||null),ve===pe?_.call(tt,le?"html":"body")[0]:le?tt.documentElement:rn},"_initDocument"),yt=o(function(Ce){return A.call(Ce.ownerDocument||Ce,Ce,h.SHOW_ELEMENT|h.SHOW_COMMENT|h.SHOW_TEXT|h.SHOW_PROCESSING_INSTRUCTION|h.SHOW_CDATA_SECTION,null)},"_createNodeIterator"),nt=o(function(Ce){return Ce instanceof d&&(typeof Ce.nodeName!="string"||typeof Ce.textContent!="string"||typeof Ce.removeChild!="function"||!(Ce.attributes instanceof f)||typeof Ce.removeAttribute!="function"||typeof Ce.setAttribute!="function"||typeof Ce.namespaceURI!="string"||typeof Ce.insertBefore!="function"||typeof Ce.hasChildNodes!="function")},"_isClobbered"),dn=o(function(Ce){return typeof l=="function"&&Ce instanceof l},"_isNode");function Tt(At,Ce,tt){t3(At,St=>{St.call(e,Ce,tt,ct)})}o(Tt,"_executeHooks");let On=o(function(Ce){let tt=null;if(Tt(L.beforeSanitizeElements,Ce,null),nt(Ce))return ut(Ce),!0;let St=Ue(Ce.nodeName);if(Tt(L.uponSanitizeElement,Ce,{tagName:St,allowedTags:$}),Ce.hasChildNodes()&&!dn(Ce.firstElementChild)&&Xa(/<[/\w!]/g,Ce.innerHTML)&&Xa(/<[/\w!]/g,Ce.textContent)||Ce.nodeType===Uy.progressingInstruction||ce&&Ce.nodeType===Uy.comment&&Xa(/<[/\w]/g,Ce.data))return ut(Ce),!0;if(!$[St]||he[St]){if(!he[St]&&_r(St)&&(Y.tagNameCheck instanceof RegExp&&Xa(Y.tagNameCheck,St)||Y.tagNameCheck instanceof Function&&Y.tagNameCheck(St)))return!1;if(ze&&!xe[St]){let gr=w(Ce)||Ce.parentNode,rn=b(Ce)||Ce.childNodes;if(rn&&gr){let gn=rn.length;for(let Zr=gn-1;Zr>=0;--Zr){let Mi=y(rn[Zr],!0);Mi.__removalCount=(Ce.__removalCount||0)+1,gr.insertBefore(Mi,x(Ce))}}}return ut(Ce),!0}return Ce instanceof u&&!xt(Ce)||(St==="noscript"||St==="noembed"||St==="noframes")&&Xa(/<\/no(script|embed|frames)/i,Ce.innerHTML)?(ut(Ce),!0):(ee&&Ce.nodeType===Uy.text&&(tt=Ce.textContent,t3([k,D,R],gr=>{tt=zy(tt,gr," ")}),Ce.textContent!==tt&&($y(e.removed,{element:Ce.cloneNode()}),Ce.textContent=tt)),Tt(L.afterSanitizeElements,Ce,null),!1)},"_sanitizeElements"),tn=o(function(Ce,tt,St){if(ye&&(tt==="id"||tt==="name")&&(St in r||St in We))return!1;if(!(K&&!Z[tt]&&Xa(O,tt))){if(!(ue&&Xa(M,tt))){if(!Q[tt]||Z[tt]){if(!(_r(Ce)&&(Y.tagNameCheck instanceof RegExp&&Xa(Y.tagNameCheck,Ce)||Y.tagNameCheck instanceof Function&&Y.tagNameCheck(Ce))&&(Y.attributeNameCheck instanceof RegExp&&Xa(Y.attributeNameCheck,tt)||Y.attributeNameCheck instanceof Function&&Y.attributeNameCheck(tt))||tt==="is"&&Y.allowCustomizedBuiltInElements&&(Y.tagNameCheck instanceof RegExp&&Xa(Y.tagNameCheck,St)||Y.tagNameCheck instanceof Function&&Y.tagNameCheck(St))))return!1}else if(!oe[tt]){if(!Xa(z,zy(St,B,""))){if(!((tt==="src"||tt==="xlink:href"||tt==="href")&&Ce!=="script"&&Mxe(St,"data:")===0&&de[Ce])){if(!(j&&!Xa(P,zy(St,B,"")))){if(St)return!1}}}}}}return!0},"_isValidAttribute"),_r=o(function(Ce){return Ce!=="annotation-xml"&&ez(Ce,F)},"_isBasicCustomElement"),Dr=o(function(Ce){Tt(L.beforeSanitizeAttributes,Ce,null);let{attributes:tt}=Ce;if(!tt||nt(Ce))return;let St={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:Q,forceKeepAttr:void 0},gr=tt.length;for(;gr--;){let rn=tt[gr],{name:gn,namespaceURI:Zr,value:Mi}=rn,Zn=Ue(gn),Sn=gn==="value"?Mi:Ixe(Mi);if(St.attrName=Zn,St.attrValue=Sn,St.keepAttr=!0,St.forceKeepAttr=void 0,Tt(L.uponSanitizeAttribute,Ce,St),Sn=St.attrValue,Be&&(Zn==="id"||Zn==="name")&&(Et(gn,Ce),Sn=He+Sn),ce&&Xa(/((--!?|])>)|<\/(style|title)/i,Sn)){Et(gn,Ce);continue}if(St.forceKeepAttr||(Et(gn,Ce),!St.keepAttr))continue;if(!ne&&Xa(/\/>/i,Sn)){Et(gn,Ce);continue}ee&&t3([k,D,R],et=>{Sn=zy(Sn,et," ")});let Hr=Ue(Ce.nodeName);if(tn(Hr,Zn,Sn)){if(C&&typeof m=="object"&&typeof m.getAttributeType=="function"&&!Zr)switch(m.getAttributeType(Hr,Zn)){case"TrustedHTML":{Sn=C.createHTML(Sn);break}case"TrustedScriptURL":{Sn=C.createScriptURL(Sn);break}}try{Zr?Ce.setAttributeNS(Zr,gn,Sn):Ce.setAttribute(gn,Sn),nt(Ce)?ut(Ce):J$(e.removed)}catch{}}}Tt(L.afterSanitizeAttributes,Ce,null)},"_sanitizeAttributes"),Pn=o(function At(Ce){let tt=null,St=yt(Ce);for(Tt(L.beforeSanitizeShadowDOM,Ce,null);tt=St.nextNode();)Tt(L.uponSanitizeShadowNode,tt,null),On(tt),Dr(tt),tt.content instanceof a&&At(tt.content);Tt(L.afterSanitizeShadowDOM,Ce,null)},"_sanitizeShadowDOM");return e.sanitize=function(At){let Ce=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},tt=null,St=null,gr=null,rn=null;if(Pe=!At,Pe&&(At=""),typeof At!="string"&&!dn(At))if(typeof At.toString=="function"){if(At=At.toString(),typeof At!="string")throw Gy("dirty is not a string, aborting")}else throw Gy("toString is not a function");if(!e.isSupported)return At;if(J||Yt(Ce),e.removed=[],typeof At=="string"&&(Le=!1),Le){if(At.nodeName){let Mi=Ue(At.nodeName);if(!$[Mi]||he[Mi])throw Gy("root node is forbidden and cannot be sanitized in-place")}}else if(At instanceof l)tt=ft(""),St=tt.ownerDocument.importNode(At,!0),St.nodeType===Uy.element&&St.nodeName==="BODY"||St.nodeName==="HTML"?tt=St:tt.appendChild(St);else{if(!se&&!ee&&!le&&At.indexOf("<")===-1)return C&&Oe?C.createHTML(At):At;if(tt=ft(At),!tt)return se?null:Oe?T:""}tt&&Se&&ut(tt.firstChild);let gn=yt(Le?At:tt);for(;gr=gn.nextNode();)On(gr),Dr(gr),gr.content instanceof a&&Pn(gr.content);if(Le)return At;if(se){if(ae)for(rn=S.call(tt.ownerDocument);tt.firstChild;)rn.appendChild(tt.firstChild);else rn=tt;return(Q.shadowroot||Q.shadowrootmode)&&(rn=I.call(n,rn,!0)),rn}let Zr=le?tt.outerHTML:tt.innerHTML;return le&&$["!doctype"]&&tt.ownerDocument&&tt.ownerDocument.doctype&&tt.ownerDocument.doctype.name&&Xa(uz,tt.ownerDocument.doctype.name)&&(Zr=" -`+Zr),ee&&t3([k,D,R],Mi=>{Zr=zy(Zr,Mi," ")}),C&&Oe?C.createHTML(Zr):Zr},e.setConfig=function(){let At=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};Yt(At),J=!0},e.clearConfig=function(){ct=null,J=!1},e.isValidAttribute=function(At,Ce,tt){ct||Yt({});let St=Ue(At),gr=Ue(Ce);return tn(St,gr,tt)},e.addHook=function(At,Ce){typeof Ce=="function"&&$y(L[At],Ce)},e.removeHook=function(At,Ce){if(Ce!==void 0){let tt=Rxe(L[At],Ce);return tt===-1?void 0:Nxe(L[At],tt,1)[0]}return J$(L[At])},e.removeHooks=function(At){L[At]=[]},e.removeAllHooks=function(){L=sz()},e}var oz,Z$,_xe,Dxe,Lxe,ja,Eo,lz,p7,m7,t3,Rxe,J$,$y,Nxe,n3,c7,ez,zy,Mxe,Ixe,ll,Xa,Gy,tz,u7,h7,Bxe,f7,Fxe,rz,nz,d7,iz,r3,$xe,zxe,Gxe,Vxe,Uxe,cz,Hxe,Wxe,uz,qxe,az,Uy,Yxe,Xxe,sz,dh,g7=N(()=>{"use strict";({entries:oz,setPrototypeOf:Z$,isFrozen:_xe,getPrototypeOf:Dxe,getOwnPropertyDescriptor:Lxe}=Object),{freeze:ja,seal:Eo,create:lz}=Object,{apply:p7,construct:m7}=typeof Reflect<"u"&&Reflect;ja||(ja=o(function(e){return e},"freeze"));Eo||(Eo=o(function(e){return e},"seal"));p7||(p7=o(function(e,r,n){return e.apply(r,n)},"apply"));m7||(m7=o(function(e,r){return new e(...r)},"construct"));t3=Ka(Array.prototype.forEach),Rxe=Ka(Array.prototype.lastIndexOf),J$=Ka(Array.prototype.pop),$y=Ka(Array.prototype.push),Nxe=Ka(Array.prototype.splice),n3=Ka(String.prototype.toLowerCase),c7=Ka(String.prototype.toString),ez=Ka(String.prototype.match),zy=Ka(String.prototype.replace),Mxe=Ka(String.prototype.indexOf),Ixe=Ka(String.prototype.trim),ll=Ka(Object.prototype.hasOwnProperty),Xa=Ka(RegExp.prototype.test),Gy=Oxe(TypeError);o(Ka,"unapply");o(Oxe,"unconstruct");o(Cr,"addToSet");o(Pxe,"cleanArray");o(nd,"clone");o(Vy,"lookupGetter");tz=ja(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),u7=ja(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),h7=ja(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),Bxe=ja(["animate","color-profile","cursor","discard","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),f7=ja(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","mprescripts"]),Fxe=ja(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),rz=ja(["#text"]),nz=ja(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","popover","popovertarget","popovertargetaction","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","wrap","xmlns","slot"]),d7=ja(["accent-height","accumulate","additive","alignment-baseline","amplitude","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","exponent","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","intercept","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","slope","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","tablevalues","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),iz=ja(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),r3=ja(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),$xe=Eo(/\{\{[\w\W]*|[\w\W]*\}\}/gm),zxe=Eo(/<%[\w\W]*|[\w\W]*%>/gm),Gxe=Eo(/\$\{[\w\W]*/gm),Vxe=Eo(/^data-[\-\w.\u00B7-\uFFFF]+$/),Uxe=Eo(/^aria-[\-\w]+$/),cz=Eo(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),Hxe=Eo(/^(?:\w+script|data):/i),Wxe=Eo(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),uz=Eo(/^html$/i),qxe=Eo(/^[a-z][.\w]*(-[.\w]+)+$/i),az=Object.freeze({__proto__:null,ARIA_ATTR:Uxe,ATTR_WHITESPACE:Wxe,CUSTOM_ELEMENT:qxe,DATA_ATTR:Vxe,DOCTYPE_NAME:uz,ERB_EXPR:zxe,IS_ALLOWED_URI:cz,IS_SCRIPT_OR_DATA:Hxe,MUSTACHE_EXPR:$xe,TMPLIT_EXPR:Gxe}),Uy={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,progressingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},Yxe=o(function(){return typeof window>"u"?null:window},"getGlobal"),Xxe=o(function(e,r){if(typeof e!="object"||typeof e.createPolicy!="function")return null;let n=null,i="data-tt-policy-suffix";r&&r.hasAttribute(i)&&(n=r.getAttribute(i));let a="dompurify"+(n?"#"+n:"");try{return e.createPolicy(a,{createHTML(s){return s},createScriptURL(s){return s}})}catch{return console.warn("TrustedTypes policy "+a+" could not be created."),null}},"_createTrustedTypesPolicy"),sz=o(function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}},"_createHooksMap");o(hz,"createDOMPurify");dh=hz()});var FG={};hr(FG,{default:()=>V4e});function tbe(t){return String(t).replace(ebe,e=>Jxe[e])}function abe(t){if(t.default)return t.default;var e=t.type,r=Array.isArray(e)?e[0]:e;if(typeof r!="string")return r.enum[0];switch(r){case"boolean":return!1;case"string":return"";case"number":return 0;case"object":return{}}}function fbe(t){for(var e=0;e=i[0]&&t<=i[1])return r.name}return null}function Hz(t){for(var e=0;e=g3[e]&&t<=g3[e+1])return!0;return!1}function kbe(t,e){Ql[t]=e}function V7(t,e,r){if(!Ql[e])throw new Error("Font metrics not found for font: "+e+".");var n=t.charCodeAt(0),i=Ql[e][n];if(!i&&t[0]in dz&&(n=dz[t[0]].charCodeAt(0),i=Ql[e][n]),!i&&r==="text"&&Hz(n)&&(i=Ql[e][77]),i)return{depth:i[0],height:i[1],italic:i[2],skew:i[3],width:i[4]}}function Ebe(t){var e;if(t>=5?e=0:t>=3?e=1:e=2,!y7[e]){var r=y7[e]={cssEmPerMu:i3.quad[e]/18};for(var n in i3)i3.hasOwnProperty(n)&&(r[n]=i3[n][e])}return y7[e]}function gz(t){if(t instanceof Es)return t;throw new Error("Expected symbolNode but got "+String(t)+".")}function _be(t){if(t instanceof od)return t;throw new Error("Expected span but got "+String(t)+".")}function G(t,e,r,n,i,a){An[t][i]={font:e,group:r,replace:n},a&&n&&(An[t][n]=An[t][i])}function Nt(t){for(var{type:e,names:r,props:n,handler:i,htmlBuilder:a,mathmlBuilder:s}=t,l={type:e,numArgs:n.numArgs,argTypes:n.argTypes,allowedInArgument:!!n.allowedInArgument,allowedInText:!!n.allowedInText,allowedInMath:n.allowedInMath===void 0?!0:n.allowedInMath,numOptionalArgs:n.numOptionalArgs||0,infix:!!n.infix,primitive:!!n.primitive,handler:i},u=0;u0&&(a.push(h3(s,e)),s=[]),a.push(n[l]));s.length>0&&a.push(h3(s,e));var h;r?(h=h3(Fi(r,e,!0)),h.classes=["tag"],a.push(h)):i&&a.push(i);var f=hu(["katex-html"],a);if(f.setAttribute("aria-hidden","true"),h){var d=h.children[0];d.style.height=kt(f.height+f.depth),f.depth&&(d.style.verticalAlign=kt(-f.depth))}return f}function rG(t){return new sd(t)}function wz(t,e,r,n,i){var a=Ss(t,r),s;a.length===1&&a[0]instanceof ks&&Jt.contains(["mrow","mtable"],a[0].type)?s=a[0]:s=new dt.MathNode("mrow",a);var l=new dt.MathNode("annotation",[new dt.TextNode(e)]);l.setAttribute("encoding","application/x-tex");var u=new dt.MathNode("semantics",[s,l]),h=new dt.MathNode("math",[u]);h.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML"),n&&h.setAttribute("display","block");var f=i?"katex":"katex-mathml";return Fe.makeSpan([f],[h])}function xr(t,e){if(!t||t.type!==e)throw new Error("Expected node of type "+e+", but got "+(t?"node of type "+t.type:String(t)));return t}function q7(t){var e=A3(t);if(!e)throw new Error("Expected node of symbol group type, but got "+(t?"node of type "+t.type:String(t)));return e}function A3(t){return t&&(t.type==="atom"||Lbe.hasOwnProperty(t.type))?t:null}function sG(t,e){var r=Fi(t.body,e,!0);return s4e([t.mclass],r,e)}function oG(t,e){var r,n=Ss(t.body,e);return t.mclass==="minner"?r=new dt.MathNode("mpadded",n):t.mclass==="mord"?t.isCharacterBox?(r=n[0],r.type="mi"):r=new dt.MathNode("mi",n):(t.isCharacterBox?(r=n[0],r.type="mo"):r=new dt.MathNode("mo",n),t.mclass==="mbin"?(r.attributes.lspace="0.22em",r.attributes.rspace="0.22em"):t.mclass==="mpunct"?(r.attributes.lspace="0em",r.attributes.rspace="0.17em"):t.mclass==="mopen"||t.mclass==="mclose"?(r.attributes.lspace="0em",r.attributes.rspace="0em"):t.mclass==="minner"&&(r.attributes.lspace="0.0556em",r.attributes.width="+0.1111em")),r}function c4e(t,e,r){var n=o4e[t];switch(n){case"\\\\cdrightarrow":case"\\\\cdleftarrow":return r.callFunction(n,[e[0]],[e[1]]);case"\\uparrow":case"\\downarrow":{var i=r.callFunction("\\\\cdleft",[e[0]],[]),a={type:"atom",text:n,mode:"math",family:"rel"},s=r.callFunction("\\Big",[a],[]),l=r.callFunction("\\\\cdright",[e[1]],[]),u={type:"ordgroup",mode:"math",body:[i,s,l]};return r.callFunction("\\\\cdparent",[u],[])}case"\\\\cdlongequal":return r.callFunction("\\\\cdlongequal",[],[]);case"\\Vert":{var h={type:"textord",text:"\\Vert",mode:"math"};return r.callFunction("\\Big",[h],[])}default:return{type:"textord",text:" ",mode:"math"}}}function u4e(t){var e=[];for(t.gullet.beginGroup(),t.gullet.macros.set("\\cr","\\\\\\relax"),t.gullet.beginGroup();;){e.push(t.parseExpression(!1,"\\\\")),t.gullet.endGroup(),t.gullet.beginGroup();var r=t.fetch().text;if(r==="&"||r==="\\\\")t.consume();else if(r==="\\end"){e[e.length-1].length===0&&e.pop();break}else throw new gt("Expected \\\\ or \\cr or \\end",t.nextToken)}for(var n=[],i=[n],a=0;a-1))if("<>AV".indexOf(h)>-1)for(var d=0;d<2;d++){for(var p=!0,m=u+1;mAV=|." after @',s[u]);var g=c4e(h,f,t),y={type:"styling",body:[g],mode:"math",style:"display"};n.push(y),l=Tz()}a%2===0?n.push(l):n.shift(),n=[],i.push(n)}t.gullet.endGroup(),t.gullet.endGroup();var v=new Array(i[0].length).fill({type:"align",align:"c",pregap:.25,postgap:.25});return{type:"array",mode:"math",body:i,arraystretch:1,addJot:!0,rowGaps:[null],cols:v,colSeparationType:"CD",hLinesBeforeRow:new Array(i.length+1).fill([])}}function D3(t,e){var r=A3(t);if(r&&Jt.contains(k4e,r.text))return r;throw r?new gt("Invalid delimiter '"+r.text+"' after '"+e.funcName+"'",t):new gt("Invalid delimiter type '"+t.type+"'",t)}function Sz(t){if(!t.body)throw new Error("Bug: The leftright ParseNode wasn't fully parsed.")}function Jl(t){for(var{type:e,names:r,props:n,handler:i,htmlBuilder:a,mathmlBuilder:s}=t,l={type:e,numArgs:n.numArgs||0,allowedInText:!1,numOptionalArgs:0,handler:i},u=0;u1||!f)&&y.pop(),x.length{"use strict";Ks=class t{static{o(this,"SourceLocation")}constructor(e,r,n){this.lexer=void 0,this.start=void 0,this.end=void 0,this.lexer=e,this.start=r,this.end=n}static range(e,r){return r?!e||!e.loc||!r.loc||e.loc.lexer!==r.loc.lexer?null:new t(e.loc.lexer,e.loc.start,r.loc.end):e&&e.loc}},Co=class t{static{o(this,"Token")}constructor(e,r){this.text=void 0,this.loc=void 0,this.noexpand=void 0,this.treatAsRelax=void 0,this.text=e,this.loc=r}range(e,r){return new t(r,Ks.range(this,e))}},gt=class t{static{o(this,"ParseError")}constructor(e,r){this.name=void 0,this.position=void 0,this.length=void 0,this.rawMessage=void 0;var n="KaTeX parse error: "+e,i,a,s=r&&r.loc;if(s&&s.start<=s.end){var l=s.lexer.input;i=s.start,a=s.end,i===l.length?n+=" at end of input: ":n+=" at position "+(i+1)+": ";var u=l.slice(i,a).replace(/[^]/g,"$&\u0332"),h;i>15?h="\u2026"+l.slice(i-15,i):h=l.slice(0,i);var f;a+15":">","<":"<",'"':""","'":"'"},ebe=/[&><"']/g;o(tbe,"escape");Uz=o(function t(e){return e.type==="ordgroup"||e.type==="color"?e.body.length===1?t(e.body[0]):e:e.type==="font"?t(e.body):e},"getBaseElem"),rbe=o(function(e){var r=Uz(e);return r.type==="mathord"||r.type==="textord"||r.type==="atom"},"isCharacterBox"),nbe=o(function(e){if(!e)throw new Error("Expected non-null, but got "+String(e));return e},"assert"),ibe=o(function(e){var r=/^[\x00-\x20]*([^\\/#?]*?)(:|�*58|�*3a|&colon)/i.exec(e);return r?r[2]!==":"||!/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(r[1])?null:r[1].toLowerCase():"_relative"},"protocolFromUrl"),Jt={contains:jxe,deflt:Kxe,escape:tbe,hyphenate:Zxe,getBaseElem:Uz,isCharacterBox:rbe,protocolFromUrl:ibe},m3={displayMode:{type:"boolean",description:"Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.",cli:"-d, --display-mode"},output:{type:{enum:["htmlAndMathml","html","mathml"]},description:"Determines the markup language of the output.",cli:"-F, --format "},leqno:{type:"boolean",description:"Render display math in leqno style (left-justified tags)."},fleqn:{type:"boolean",description:"Render display math flush left."},throwOnError:{type:"boolean",default:!0,cli:"-t, --no-throw-on-error",cliDescription:"Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error."},errorColor:{type:"string",default:"#cc0000",cli:"-c, --error-color ",cliDescription:"A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.",cliProcessor:o(t=>"#"+t,"cliProcessor")},macros:{type:"object",cli:"-m, --macro ",cliDescription:"Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).",cliDefault:[],cliProcessor:o((t,e)=>(e.push(t),e),"cliProcessor")},minRuleThickness:{type:"number",description:"Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.",processor:o(t=>Math.max(0,t),"processor"),cli:"--min-rule-thickness ",cliProcessor:parseFloat},colorIsTextColor:{type:"boolean",description:"Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.",cli:"-b, --color-is-text-color"},strict:{type:[{enum:["warn","ignore","error"]},"boolean","function"],description:"Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.",cli:"-S, --strict",cliDefault:!1},trust:{type:["boolean","function"],description:"Trust the input, enabling all HTML features such as \\url.",cli:"-T, --trust"},maxSize:{type:"number",default:1/0,description:"If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large",processor:o(t=>Math.max(0,t),"processor"),cli:"-s, --max-size ",cliProcessor:parseInt},maxExpand:{type:"number",default:1e3,description:"Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.",processor:o(t=>Math.max(0,t),"processor"),cli:"-e, --max-expand ",cliProcessor:o(t=>t==="Infinity"?1/0:parseInt(t),"cliProcessor")},globalGroup:{type:"boolean",cli:!1}};o(abe,"getDefaultValue");Xy=class{static{o(this,"Settings")}constructor(e){this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,this.globalGroup=void 0,e=e||{};for(var r in m3)if(m3.hasOwnProperty(r)){var n=m3[r];this[r]=e[r]!==void 0?n.processor?n.processor(e[r]):e[r]:abe(n)}}reportNonstrict(e,r,n){var i=this.strict;if(typeof i=="function"&&(i=i(e,r,n)),!(!i||i==="ignore")){if(i===!0||i==="error")throw new gt("LaTeX-incompatible input and strict mode is set to 'error': "+(r+" ["+e+"]"),n);i==="warn"?typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(r+" ["+e+"]")):typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+i+"': "+r+" ["+e+"]"))}}useStrictBehavior(e,r,n){var i=this.strict;if(typeof i=="function")try{i=i(e,r,n)}catch{i="error"}return!i||i==="ignore"?!1:i===!0||i==="error"?!0:i==="warn"?(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(r+" ["+e+"]")),!1):(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+i+"': "+r+" ["+e+"]")),!1)}isTrusted(e){if(e.url&&!e.protocol){var r=Jt.protocolFromUrl(e.url);if(r==null)return!1;e.protocol=r}var n=typeof this.trust=="function"?this.trust(e):this.trust;return!!n}},jl=class{static{o(this,"Style")}constructor(e,r,n){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=e,this.size=r,this.cramped=n}sup(){return Kl[sbe[this.id]]}sub(){return Kl[obe[this.id]]}fracNum(){return Kl[lbe[this.id]]}fracDen(){return Kl[cbe[this.id]]}cramp(){return Kl[ube[this.id]]}text(){return Kl[hbe[this.id]]}isTight(){return this.size>=2}},G7=0,y3=1,x0=2,cu=3,jy=4,So=5,b0=6,Qa=7,Kl=[new jl(G7,0,!1),new jl(y3,0,!0),new jl(x0,1,!1),new jl(cu,1,!0),new jl(jy,2,!1),new jl(So,2,!0),new jl(b0,3,!1),new jl(Qa,3,!0)],sbe=[jy,So,jy,So,b0,Qa,b0,Qa],obe=[So,So,So,So,Qa,Qa,Qa,Qa],lbe=[x0,cu,jy,So,b0,Qa,b0,Qa],cbe=[cu,cu,So,So,Qa,Qa,Qa,Qa],ube=[y3,y3,cu,cu,So,So,Qa,Qa],hbe=[G7,y3,x0,cu,x0,cu,x0,cu],tr={DISPLAY:Kl[G7],TEXT:Kl[x0],SCRIPT:Kl[jy],SCRIPTSCRIPT:Kl[b0]},D7=[{name:"latin",blocks:[[256,591],[768,879]]},{name:"cyrillic",blocks:[[1024,1279]]},{name:"armenian",blocks:[[1328,1423]]},{name:"brahmic",blocks:[[2304,4255]]},{name:"georgian",blocks:[[4256,4351]]},{name:"cjk",blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:"hangul",blocks:[[44032,55215]]}];o(fbe,"scriptFromCodepoint");g3=[];D7.forEach(t=>t.blocks.forEach(e=>g3.push(...e)));o(Hz,"supportedCodepoint");v0=80,dbe=o(function(e,r){return"M95,"+(622+e+r)+` +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var Ie=this.next();return Ie||this.lex()},"lex"),begin:o(function(Ie){this.conditionStack.push(Ie)},"begin"),popState:o(function(){var Ie=this.conditionStack.length-1;return Ie>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(Ie){return Ie=this.conditionStack.length-1-Math.abs(Ie||0),Ie>=0?this.conditionStack[Ie]:"INITIAL"},"topState"),pushState:o(function(Ie){this.begin(Ie)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(Ie,xe,q,de){var ie=de;switch(q){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;break;case 7:return this.popState(),"acc_title_value";break;case 8:return this.begin("acc_descr"),26;break;case 9:return this.popState(),"acc_descr_value";break;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;break;case 23:return this.begin("person"),44;break;case 24:return this.begin("system_ext_queue"),51;break;case 25:return this.begin("system_ext_db"),50;break;case 26:return this.begin("system_ext"),49;break;case 27:return this.begin("system_queue"),48;break;case 28:return this.begin("system_db"),47;break;case 29:return this.begin("system"),46;break;case 30:return this.begin("boundary"),37;break;case 31:return this.begin("enterprise_boundary"),34;break;case 32:return this.begin("system_boundary"),36;break;case 33:return this.begin("container_ext_queue"),57;break;case 34:return this.begin("container_ext_db"),56;break;case 35:return this.begin("container_ext"),55;break;case 36:return this.begin("container_queue"),54;break;case 37:return this.begin("container_db"),53;break;case 38:return this.begin("container"),52;break;case 39:return this.begin("container_boundary"),38;break;case 40:return this.begin("component_ext_queue"),63;break;case 41:return this.begin("component_ext_db"),62;break;case 42:return this.begin("component_ext"),61;break;case 43:return this.begin("component_queue"),60;break;case 44:return this.begin("component_db"),59;break;case 45:return this.begin("component"),58;break;case 46:return this.begin("node"),39;break;case 47:return this.begin("node"),39;break;case 48:return this.begin("node_l"),40;break;case 49:return this.begin("node_r"),41;break;case 50:return this.begin("rel"),64;break;case 51:return this.begin("birel"),65;break;case 52:return this.begin("rel_u"),66;break;case 53:return this.begin("rel_u"),66;break;case 54:return this.begin("rel_d"),67;break;case 55:return this.begin("rel_d"),67;break;case 56:return this.begin("rel_l"),68;break;case 57:return this.begin("rel_l"),68;break;case 58:return this.begin("rel_r"),69;break;case 59:return this.begin("rel_r"),69;break;case 60:return this.begin("rel_b"),70;break;case 61:return this.begin("rel_index"),71;break;case 62:return this.begin("update_el_style"),72;break;case 63:return this.begin("update_rel_style"),73;break;case 64:return this.begin("update_layout_config"),74;break;case 65:return"EOF_IN_STRUCT";case 66:return this.begin("attribute"),"ATTRIBUTE_EMPTY";break;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";break;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}},"anonymous"),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 ze}();ye.lexer=Be;function He(){this.yy={}}return o(He,"Parser"),He.prototype=ye,ye.Parser=He,new He}();Ry.parser=Ry;G$=Ry});var s7,Un,g0=N(()=>{"use strict";s7=o((t,e,{depth:r=2,clobber:n=!1}={})=>{let i={depth:r,clobber:n};return Array.isArray(e)&&!Array.isArray(t)?(e.forEach(a=>s7(t,a,i)),t):Array.isArray(e)&&Array.isArray(t)?(e.forEach(a=>{t.includes(a)||t.push(a)}),t):t===void 0||r<=0?t!=null&&typeof t=="object"&&typeof e=="object"?Object.assign(t,e):e:(e!==void 0&&typeof t=="object"&&typeof e=="object"&&Object.keys(e).forEach(a=>{typeof e[a]=="object"&&(t[a]===void 0||typeof t[a]=="object")?(t[a]===void 0&&(t[a]=Array.isArray(e[a])?[]:{}),t[a]=s7(t[a],e[a],{depth:r-1,clobber:n})):(n||typeof t[a]!="object"&&typeof e[a]!="object")&&(t[a]=e[a])}),t)},"assignWithDepth"),Un=s7});var Z4,V$,U$=N(()=>{"use strict";Z4={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:o(t=>t>=255?255:t<0?0:t,"r"),g:o(t=>t>=255?255:t<0?0:t,"g"),b:o(t=>t>=255?255:t<0?0:t,"b"),h:o(t=>t%360,"h"),s:o(t=>t>=100?100:t<0?0:t,"s"),l:o(t=>t>=100?100:t<0?0:t,"l"),a:o(t=>t>=1?1:t<0?0:t,"a")},toLinear:o(t=>{let e=t/255;return t>.03928?Math.pow((e+.055)/1.055,2.4):e/12.92},"toLinear"),hue2rgb:o((t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<.16666666666666666?t+(e-t)*6*r:r<.5?e:r<.6666666666666666?t+(e-t)*(.6666666666666666-r)*6:t),"hue2rgb"),hsl2rgb:o(({h:t,s:e,l:r},n)=>{if(!e)return r*2.55;t/=360,e/=100,r/=100;let i=r<.5?r*(1+e):r+e-r*e,a=2*r-i;switch(n){case"r":return Z4.hue2rgb(a,i,t+.3333333333333333)*255;case"g":return Z4.hue2rgb(a,i,t)*255;case"b":return Z4.hue2rgb(a,i,t-.3333333333333333)*255}},"hsl2rgb"),rgb2hsl:o(({r:t,g:e,b:r},n)=>{t/=255,e/=255,r/=255;let i=Math.max(t,e,r),a=Math.min(t,e,r),s=(i+a)/2;if(n==="l")return s*100;if(i===a)return 0;let l=i-a,u=s>.5?l/(2-i-a):l/(i+a);if(n==="s")return u*100;switch(i){case t:return((e-r)/l+(e{"use strict";Mbe={clamp:o((t,e,r)=>e>r?Math.min(e,Math.max(r,t)):Math.min(r,Math.max(e,t)),"clamp"),round:o(t=>Math.round(t*1e10)/1e10,"round")},H$=Mbe});var Ibe,q$,Y$=N(()=>{"use strict";Ibe={dec2hex:o(t=>{let e=Math.round(t).toString(16);return e.length>1?e:`0${e}`},"dec2hex")},q$=Ibe});var Obe,jt,Kl=N(()=>{"use strict";U$();W$();Y$();Obe={channel:V$,lang:H$,unit:q$},jt=Obe});var su,Bi,Ny=N(()=>{"use strict";Kl();su={};for(let t=0;t<=255;t++)su[t]=jt.unit.dec2hex(t);Bi={ALL:0,RGB:1,HSL:2}});var o7,X$,j$=N(()=>{"use strict";Ny();o7=class{static{o(this,"Type")}constructor(){this.type=Bi.ALL}get(){return this.type}set(e){if(this.type&&this.type!==e)throw new Error("Cannot change both RGB and HSL channels at the same time");this.type=e}reset(){this.type=Bi.ALL}is(e){return this.type===e}},X$=o7});var l7,K$,Q$=N(()=>{"use strict";Kl();j$();Ny();l7=class{static{o(this,"Channels")}constructor(e,r){this.color=r,this.changed=!1,this.data=e,this.type=new X$}set(e,r){return this.color=r,this.changed=!1,this.data=e,this.type.type=Bi.ALL,this}_ensureHSL(){let e=this.data,{h:r,s:n,l:i}=e;r===void 0&&(e.h=jt.channel.rgb2hsl(e,"h")),n===void 0&&(e.s=jt.channel.rgb2hsl(e,"s")),i===void 0&&(e.l=jt.channel.rgb2hsl(e,"l"))}_ensureRGB(){let e=this.data,{r,g:n,b:i}=e;r===void 0&&(e.r=jt.channel.hsl2rgb(e,"r")),n===void 0&&(e.g=jt.channel.hsl2rgb(e,"g")),i===void 0&&(e.b=jt.channel.hsl2rgb(e,"b"))}get r(){let e=this.data,r=e.r;return!this.type.is(Bi.HSL)&&r!==void 0?r:(this._ensureHSL(),jt.channel.hsl2rgb(e,"r"))}get g(){let e=this.data,r=e.g;return!this.type.is(Bi.HSL)&&r!==void 0?r:(this._ensureHSL(),jt.channel.hsl2rgb(e,"g"))}get b(){let e=this.data,r=e.b;return!this.type.is(Bi.HSL)&&r!==void 0?r:(this._ensureHSL(),jt.channel.hsl2rgb(e,"b"))}get h(){let e=this.data,r=e.h;return!this.type.is(Bi.RGB)&&r!==void 0?r:(this._ensureRGB(),jt.channel.rgb2hsl(e,"h"))}get s(){let e=this.data,r=e.s;return!this.type.is(Bi.RGB)&&r!==void 0?r:(this._ensureRGB(),jt.channel.rgb2hsl(e,"s"))}get l(){let e=this.data,r=e.l;return!this.type.is(Bi.RGB)&&r!==void 0?r:(this._ensureRGB(),jt.channel.rgb2hsl(e,"l"))}get a(){return this.data.a}set r(e){this.type.set(Bi.RGB),this.changed=!0,this.data.r=e}set g(e){this.type.set(Bi.RGB),this.changed=!0,this.data.g=e}set b(e){this.type.set(Bi.RGB),this.changed=!0,this.data.b=e}set h(e){this.type.set(Bi.HSL),this.changed=!0,this.data.h=e}set s(e){this.type.set(Bi.HSL),this.changed=!0,this.data.s=e}set l(e){this.type.set(Bi.HSL),this.changed=!0,this.data.l=e}set a(e){this.changed=!0,this.data.a=e}},K$=l7});var Pbe,uh,My=N(()=>{"use strict";Q$();Pbe=new K$({r:0,g:0,b:0,a:0},"transparent"),uh=Pbe});var Z$,nd,c7=N(()=>{"use strict";My();Ny();Z$={re:/^#((?:[a-f0-9]{2}){2,4}|[a-f0-9]{3})$/i,parse:o(t=>{if(t.charCodeAt(0)!==35)return;let e=t.match(Z$.re);if(!e)return;let r=e[1],n=parseInt(r,16),i=r.length,a=i%4===0,s=i>4,l=s?1:17,u=s?8:4,h=a?0:-1,f=s?255:15;return uh.set({r:(n>>u*(h+3)&f)*l,g:(n>>u*(h+2)&f)*l,b:(n>>u*(h+1)&f)*l,a:a?(n&f)*l/255:1},t)},"parse"),stringify:o(t=>{let{r:e,g:r,b:n,a:i}=t;return i<1?`#${su[Math.round(e)]}${su[Math.round(r)]}${su[Math.round(n)]}${su[Math.round(i*255)]}`:`#${su[Math.round(e)]}${su[Math.round(r)]}${su[Math.round(n)]}`},"stringify")},nd=Z$});var J4,Iy,J$=N(()=>{"use strict";Kl();My();J4={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:o(t=>{let e=t.match(J4.hueRe);if(e){let[,r,n]=e;switch(n){case"grad":return jt.channel.clamp.h(parseFloat(r)*.9);case"rad":return jt.channel.clamp.h(parseFloat(r)*180/Math.PI);case"turn":return jt.channel.clamp.h(parseFloat(r)*360)}}return jt.channel.clamp.h(parseFloat(t))},"_hue2deg"),parse:o(t=>{let e=t.charCodeAt(0);if(e!==104&&e!==72)return;let r=t.match(J4.re);if(!r)return;let[,n,i,a,s,l]=r;return uh.set({h:J4._hue2deg(n),s:jt.channel.clamp.s(parseFloat(i)),l:jt.channel.clamp.l(parseFloat(a)),a:s?jt.channel.clamp.a(l?parseFloat(s)/100:parseFloat(s)):1},t)},"parse"),stringify:o(t=>{let{h:e,s:r,l:n,a:i}=t;return i<1?`hsla(${jt.lang.round(e)}, ${jt.lang.round(r)}%, ${jt.lang.round(n)}%, ${i})`:`hsl(${jt.lang.round(e)}, ${jt.lang.round(r)}%, ${jt.lang.round(n)}%)`},"stringify")},Iy=J4});var e3,u7,ez=N(()=>{"use strict";c7();e3={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:o(t=>{t=t.toLowerCase();let e=e3.colors[t];if(e)return nd.parse(e)},"parse"),stringify:o(t=>{let e=nd.stringify(t);for(let r in e3.colors)if(e3.colors[r]===e)return r},"stringify")},u7=e3});var tz,Oy,rz=N(()=>{"use strict";Kl();My();tz={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:o(t=>{let e=t.charCodeAt(0);if(e!==114&&e!==82)return;let r=t.match(tz.re);if(!r)return;let[,n,i,a,s,l,u,h,f]=r;return uh.set({r:jt.channel.clamp.r(i?parseFloat(n)*2.55:parseFloat(n)),g:jt.channel.clamp.g(s?parseFloat(a)*2.55:parseFloat(a)),b:jt.channel.clamp.b(u?parseFloat(l)*2.55:parseFloat(l)),a:h?jt.channel.clamp.a(f?parseFloat(h)/100:parseFloat(h)):1},t)},"parse"),stringify:o(t=>{let{r:e,g:r,b:n,a:i}=t;return i<1?`rgba(${jt.lang.round(e)}, ${jt.lang.round(r)}, ${jt.lang.round(n)}, ${jt.lang.round(i)})`:`rgb(${jt.lang.round(e)}, ${jt.lang.round(r)}, ${jt.lang.round(n)})`},"stringify")},Oy=tz});var Bbe,Fi,ou=N(()=>{"use strict";c7();J$();ez();rz();Ny();Bbe={format:{keyword:u7,hex:nd,rgb:Oy,rgba:Oy,hsl:Iy,hsla:Iy},parse:o(t=>{if(typeof t!="string")return t;let e=nd.parse(t)||Oy.parse(t)||Iy.parse(t)||u7.parse(t);if(e)return e;throw new Error(`Unsupported color format: "${t}"`)},"parse"),stringify:o(t=>!t.changed&&t.color?t.color:t.type.is(Bi.HSL)||t.data.r===void 0?Iy.stringify(t):t.a<1||!Number.isInteger(t.r)||!Number.isInteger(t.g)||!Number.isInteger(t.b)?Oy.stringify(t):nd.stringify(t),"stringify")},Fi=Bbe});var Fbe,t3,h7=N(()=>{"use strict";Kl();ou();Fbe=o((t,e)=>{let r=Fi.parse(t);for(let n in e)r[n]=jt.channel.clamp[n](e[n]);return Fi.stringify(r)},"change"),t3=Fbe});var $be,Qa,f7=N(()=>{"use strict";Kl();My();ou();h7();$be=o((t,e,r=0,n=1)=>{if(typeof t!="number")return t3(t,{a:e});let i=uh.set({r:jt.channel.clamp.r(t),g:jt.channel.clamp.g(e),b:jt.channel.clamp.b(r),a:jt.channel.clamp.a(n)});return Fi.stringify(i)},"rgba"),Qa=$be});var zbe,id,nz=N(()=>{"use strict";Kl();ou();zbe=o((t,e)=>jt.lang.round(Fi.parse(t)[e]),"channel"),id=zbe});var Gbe,iz,az=N(()=>{"use strict";Kl();ou();Gbe=o(t=>{let{r:e,g:r,b:n}=Fi.parse(t),i=.2126*jt.channel.toLinear(e)+.7152*jt.channel.toLinear(r)+.0722*jt.channel.toLinear(n);return jt.lang.round(i)},"luminance"),iz=Gbe});var Vbe,sz,oz=N(()=>{"use strict";az();Vbe=o(t=>iz(t)>=.5,"isLight"),sz=Vbe});var Ube,la,lz=N(()=>{"use strict";oz();Ube=o(t=>!sz(t),"isDark"),la=Ube});var Hbe,r3,d7=N(()=>{"use strict";Kl();ou();Hbe=o((t,e,r)=>{let n=Fi.parse(t),i=n[e],a=jt.channel.clamp[e](i+r);return i!==a&&(n[e]=a),Fi.stringify(n)},"adjustChannel"),r3=Hbe});var Wbe,Lt,cz=N(()=>{"use strict";d7();Wbe=o((t,e)=>r3(t,"l",e),"lighten"),Lt=Wbe});var qbe,Ot,uz=N(()=>{"use strict";d7();qbe=o((t,e)=>r3(t,"l",-e),"darken"),Ot=qbe});var Ybe,Me,hz=N(()=>{"use strict";ou();h7();Ybe=o((t,e)=>{let r=Fi.parse(t),n={};for(let i in e)e[i]&&(n[i]=r[i]+e[i]);return t3(t,n)},"adjust"),Me=Ybe});var Xbe,fz,dz=N(()=>{"use strict";ou();f7();Xbe=o((t,e,r=50)=>{let{r:n,g:i,b:a,a:s}=Fi.parse(t),{r:l,g:u,b:h,a:f}=Fi.parse(e),d=r/100,p=d*2-1,m=s-f,y=((p*m===-1?p:(p+m)/(1+p*m))+1)/2,v=1-y,x=n*y+l*v,b=i*y+u*v,T=a*y+h*v,S=s*d+f*(1-d);return Qa(x,b,T,S)},"mix"),fz=Xbe});var jbe,wt,pz=N(()=>{"use strict";ou();dz();jbe=o((t,e=100)=>{let r=Fi.parse(t);return r.r=255-r.r,r.g=255-r.g,r.b=255-r.b,fz(r,t,e)},"invert"),wt=jbe});var mz=N(()=>{"use strict";f7();nz();lz();cz();uz();hz();pz()});var Ks=N(()=>{"use strict";mz()});var hh,fh,Py=N(()=>{"use strict";hh="#ffffff",fh="#f2f2f2"});var Si,y0=N(()=>{"use strict";Ks();Si=o((t,e)=>e?Me(t,{s:-40,l:10}):Me(t,{s:-40,l:-10}),"mkBorder")});var m7,gz,yz=N(()=>{"use strict";Ks();Py();y0();m7=class{static{o(this,"Theme")}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||Me(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||Me(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||Si(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||Si(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||Si(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||Si(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#333",this.secondaryTextColor=this.secondaryTextColor||wt(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||wt(this.tertiaryColor),this.lineColor=this.lineColor||wt(this.background),this.arrowheadColor=this.arrowheadColor||wt(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?Ot(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||this.actorBorder,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||Ot(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||wt(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||Lt(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.vertLineColor=this.vertLineColor||"navy",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.darkMode?(this.rowOdd=this.rowOdd||Ot(this.mainBkg,5)||"#ffffff",this.rowEven=this.rowEven||Ot(this.mainBkg,10)):(this.rowOdd=this.rowOdd||Lt(this.mainBkg,75)||"#ffffff",this.rowEven=this.rowEven||Lt(this.mainBkg,5)),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||Me(this.primaryColor,{h:30}),this.cScale4=this.cScale4||Me(this.primaryColor,{h:60}),this.cScale5=this.cScale5||Me(this.primaryColor,{h:90}),this.cScale6=this.cScale6||Me(this.primaryColor,{h:120}),this.cScale7=this.cScale7||Me(this.primaryColor,{h:150}),this.cScale8=this.cScale8||Me(this.primaryColor,{h:210,l:150}),this.cScale9=this.cScale9||Me(this.primaryColor,{h:270}),this.cScale10=this.cScale10||Me(this.primaryColor,{h:300}),this.cScale11=this.cScale11||Me(this.primaryColor,{h:330}),this.darkMode)for(let r=0;r{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}},gz=o(t=>{let e=new m7;return e.calculate(t),e},"getThemeVariables")});var g7,vz,xz=N(()=>{"use strict";Ks();y0();g7=class{static{o(this,"Theme")}constructor(){this.background="#333",this.primaryColor="#1f2020",this.secondaryColor=Lt(this.primaryColor,16),this.tertiaryColor=Me(this.primaryColor,{h:-160}),this.primaryBorderColor=wt(this.background),this.secondaryBorderColor=Si(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Si(this.tertiaryColor,this.darkMode),this.primaryTextColor=wt(this.primaryColor),this.secondaryTextColor=wt(this.secondaryColor),this.tertiaryTextColor=wt(this.tertiaryColor),this.lineColor=wt(this.background),this.textColor=wt(this.background),this.mainBkg="#1f2020",this.secondBkg="calculated",this.mainContrastColor="lightgrey",this.darkTextColor=Lt(wt("#323D47"),10),this.lineColor="calculated",this.border1="#ccc",this.border2=Qa(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=Ot("#EAE8D9",30),this.altSectionBkgColor="calculated",this.sectionBkgColor2="#EAE8D9",this.excludeBkgColor=Ot(this.sectionBkgColor,10),this.taskBorderColor=Qa(255,255,255,70),this.taskBkgColor="calculated",this.taskTextColor="calculated",this.taskTextLightColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor=Qa(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.vertLineColor="#00BFFF",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.rowOdd=this.rowOdd||Lt(this.mainBkg,5)||"#ffffff",this.rowEven=this.rowEven||Ot(this.mainBkg,10),this.labelColor="calculated",this.errorBkgColor="#a44141",this.errorTextColor="#ddd"}updateColors(){this.secondBkg=Lt(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=Lt(this.labelBackground,25),this.actorBorder=this.border1,this.actorBkg=this.mainBkg,this.actorTextColor=this.mainContrastColor,this.actorLineColor=this.actorBorder,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=Lt(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.archEdgeColor=this.lineColor,this.archEdgeArrowColor=this.lineColor,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=Me(this.primaryColor,{h:64}),this.fillType3=Me(this.secondaryColor,{h:64}),this.fillType4=Me(this.primaryColor,{h:-64}),this.fillType5=Me(this.secondaryColor,{h:-64}),this.fillType6=Me(this.primaryColor,{h:128}),this.fillType7=Me(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||Me(this.primaryColor,{h:30}),this.cScale4=this.cScale4||Me(this.primaryColor,{h:60}),this.cScale5=this.cScale5||Me(this.primaryColor,{h:90}),this.cScale6=this.cScale6||Me(this.primaryColor,{h:120}),this.cScale7=this.cScale7||Me(this.primaryColor,{h:150}),this.cScale8=this.cScale8||Me(this.primaryColor,{h:210}),this.cScale9=this.cScale9||Me(this.primaryColor,{h:270}),this.cScale10=this.cScale10||Me(this.primaryColor,{h:300}),this.cScale11=this.cScale11||Me(this.primaryColor,{h:330});for(let e=0;e{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}},vz=o(t=>{let e=new g7;return e.calculate(t),e},"getThemeVariables")});var y7,dh,By=N(()=>{"use strict";Ks();y0();Py();y7=class{static{o(this,"Theme")}constructor(){this.background="#f4f4f4",this.primaryColor="#ECECFF",this.secondaryColor=Me(this.primaryColor,{h:120}),this.secondaryColor="#ffffde",this.tertiaryColor=Me(this.primaryColor,{h:-160}),this.primaryBorderColor=Si(this.primaryColor,this.darkMode),this.secondaryBorderColor=Si(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Si(this.tertiaryColor,this.darkMode),this.primaryTextColor=wt(this.primaryColor),this.secondaryTextColor=wt(this.secondaryColor),this.tertiaryTextColor=wt(this.tertiaryColor),this.lineColor=wt(this.background),this.textColor=wt(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="rgba(232,232,232, 0.8)",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="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="#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.vertLineColor="calculated",this.sectionBkgColor=Qa(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.vertLineColor="navy",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.rowOdd="calculated",this.rowEven="calculated",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||Me(this.primaryColor,{h:30}),this.cScale4=this.cScale4||Me(this.primaryColor,{h:60}),this.cScale5=this.cScale5||Me(this.primaryColor,{h:90}),this.cScale6=this.cScale6||Me(this.primaryColor,{h:120}),this.cScale7=this.cScale7||Me(this.primaryColor,{h:150}),this.cScale8=this.cScale8||Me(this.primaryColor,{h:210}),this.cScale9=this.cScale9||Me(this.primaryColor,{h:270}),this.cScale10=this.cScale10||Me(this.primaryColor,{h:300}),this.cScale11=this.cScale11||Me(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||Ot(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||Ot(this.tertiaryColor,40);for(let e=0;e{this[n]==="calculated"&&(this[n]=void 0)}),typeof e!="object"){this.updateColors();return}let r=Object.keys(e);r.forEach(n=>{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}},dh=o(t=>{let e=new y7;return e.calculate(t),e},"getThemeVariables")});var v7,bz,Tz=N(()=>{"use strict";Ks();Py();y0();v7=class{static{o(this,"Theme")}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=Lt("#cde498",10),this.primaryBorderColor=Si(this.primaryColor,this.darkMode),this.secondaryBorderColor=Si(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Si(this.tertiaryColor,this.darkMode),this.primaryTextColor=wt(this.primaryColor),this.secondaryTextColor=wt(this.secondaryColor),this.tertiaryTextColor=wt(this.primaryColor),this.lineColor=wt(this.background),this.textColor=wt(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="calculated",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.vertLineColor="#00BFFF",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){this.actorBorder=Ot(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.actorLineColor=this.actorBorder,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||Me(this.primaryColor,{h:30}),this.cScale4=this.cScale4||Me(this.primaryColor,{h:60}),this.cScale5=this.cScale5||Me(this.primaryColor,{h:90}),this.cScale6=this.cScale6||Me(this.primaryColor,{h:120}),this.cScale7=this.cScale7||Me(this.primaryColor,{h:150}),this.cScale8=this.cScale8||Me(this.primaryColor,{h:210}),this.cScale9=this.cScale9||Me(this.primaryColor,{h:270}),this.cScale10=this.cScale10||Me(this.primaryColor,{h:300}),this.cScale11=this.cScale11||Me(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||Ot(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||Ot(this.tertiaryColor,40);for(let e=0;e{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}},bz=o(t=>{let e=new v7;return e.calculate(t),e},"getThemeVariables")});var x7,wz,kz=N(()=>{"use strict";Ks();y0();Py();x7=class{static{o(this,"Theme")}constructor(){this.primaryColor="#eee",this.contrast="#707070",this.secondaryColor=Lt(this.contrast,55),this.background="#ffffff",this.tertiaryColor=Me(this.primaryColor,{h:-160}),this.primaryBorderColor=Si(this.primaryColor,this.darkMode),this.secondaryBorderColor=Si(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=Si(this.tertiaryColor,this.darkMode),this.primaryTextColor=wt(this.primaryColor),this.secondaryTextColor=wt(this.secondaryColor),this.tertiaryTextColor=wt(this.tertiaryColor),this.lineColor=wt(this.background),this.textColor=wt(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=this.actorBorder,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.vertLineColor="calculated",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.rowOdd=this.rowOdd||Lt(this.mainBkg,75)||"#ffffff",this.rowEven=this.rowEven||"#f4f4f4",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){this.secondBkg=Lt(this.contrast,55),this.border2=this.contrast,this.actorBorder=Lt(this.border1,23),this.actorBkg=this.mainBkg,this.actorTextColor=this.text,this.actorLineColor=this.actorBorder,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 e=0;e{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}},wz=o(t=>{let e=new x7;return e.calculate(t),e},"getThemeVariables")});var Eo,n3=N(()=>{"use strict";yz();xz();By();Tz();kz();Eo={base:{getThemeVariables:gz},dark:{getThemeVariables:vz},default:{getThemeVariables:dh},forest:{getThemeVariables:bz},neutral:{getThemeVariables:wz}}});var ul,Ez=N(()=>{"use strict";ul={flowchart:{useMaxWidth:!0,titleTopMargin:25,subGraphTitleMargin:{top:0,bottom:0},diagramPadding:8,htmlLabels:!0,nodeSpacing:50,rankSpacing:50,curve:"basis",padding:15,defaultRenderer:"dagre-wrapper",wrappingWidth:200,inheritDir:!1},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,maxLabelWidth:360,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"],titleColor:"",titleFontFamily:'"trebuchet ms", verdana, arial, sans-serif',titleFontSize:"4ex"},class:{useMaxWidth:!0,titleTopMargin:25,arrowMarkerAbsolute:!1,dividerMargin:10,padding:5,textHeight:10,defaultRenderer:"dagre-wrapper",htmlLabels:!1,hideEmptyMembersBox:!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,nodeSpacing:140,rankSpacing:80,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},xyChart:{useMaxWidth:!0,width:700,height:500,titleFontSize:20,titlePadding:10,showDataLabel:!1,showTitle:!0,xAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},yAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},chartOrientation:"vertical",plotReservedSpacePercent:50},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},kanban:{useMaxWidth:!0,padding:8,sectionWidth:200,ticketBaseUrl:""},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,parallelCommits:!1,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:""},block:{useMaxWidth:!0,padding:8},packet:{useMaxWidth:!0,rowHeight:32,bitWidth:32,bitsPerRow:32,showBits:!0,paddingX:5,paddingY:5},architecture:{useMaxWidth:!0,padding:40,iconSize:80,fontSize:16},radar:{useMaxWidth:!0,width:600,height:600,marginTop:50,marginRight:50,marginBottom:50,marginLeft:50,axisScaleFactor:1,axisLabelFactor:1.05,curveTension:.17},theme:"default",look:"classic",handDrawnSeed:0,layout:"dagre",maxTextSize:5e4,maxEdges:500,darkMode:!1,fontFamily:'"trebuchet ms", verdana, arial, sans-serif;',logLevel:5,securityLevel:"strict",startOnLoad:!0,arrowMarkerAbsolute:!1,secure:["secure","securityLevel","startOnLoad","maxTextSize","suppressErrorRendering","maxEdges"],legacyMathML:!1,forceLegacyMathML:!1,deterministicIds:!1,fontSize:16,markdownAutoWrap:!0,suppressErrorRendering:!1}});var Sz,Cz,Az,or,_a=N(()=>{"use strict";n3();Ez();Sz={...ul,deterministicIDSeed:void 0,elk:{mergeEdges:!1,nodePlacementStrategy:"BRANDES_KOEPF"},themeCSS:void 0,themeVariables:Eo.default.getThemeVariables(),sequence:{...ul.sequence,messageFont:o(function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},"messageFont"),noteFont:o(function(){return{fontFamily:this.noteFontFamily,fontSize:this.noteFontSize,fontWeight:this.noteFontWeight}},"noteFont"),actorFont:o(function(){return{fontFamily:this.actorFontFamily,fontSize:this.actorFontSize,fontWeight:this.actorFontWeight}},"actorFont")},class:{hideEmptyMembersBox:!1},gantt:{...ul.gantt,tickInterval:void 0,useWidth:void 0},c4:{...ul.c4,useWidth:void 0,personFont:o(function(){return{fontFamily:this.personFontFamily,fontSize:this.personFontSize,fontWeight:this.personFontWeight}},"personFont"),flowchart:{...ul.flowchart,inheritDir:!1},external_personFont:o(function(){return{fontFamily:this.external_personFontFamily,fontSize:this.external_personFontSize,fontWeight:this.external_personFontWeight}},"external_personFont"),systemFont:o(function(){return{fontFamily:this.systemFontFamily,fontSize:this.systemFontSize,fontWeight:this.systemFontWeight}},"systemFont"),external_systemFont:o(function(){return{fontFamily:this.external_systemFontFamily,fontSize:this.external_systemFontSize,fontWeight:this.external_systemFontWeight}},"external_systemFont"),system_dbFont:o(function(){return{fontFamily:this.system_dbFontFamily,fontSize:this.system_dbFontSize,fontWeight:this.system_dbFontWeight}},"system_dbFont"),external_system_dbFont:o(function(){return{fontFamily:this.external_system_dbFontFamily,fontSize:this.external_system_dbFontSize,fontWeight:this.external_system_dbFontWeight}},"external_system_dbFont"),system_queueFont:o(function(){return{fontFamily:this.system_queueFontFamily,fontSize:this.system_queueFontSize,fontWeight:this.system_queueFontWeight}},"system_queueFont"),external_system_queueFont:o(function(){return{fontFamily:this.external_system_queueFontFamily,fontSize:this.external_system_queueFontSize,fontWeight:this.external_system_queueFontWeight}},"external_system_queueFont"),containerFont:o(function(){return{fontFamily:this.containerFontFamily,fontSize:this.containerFontSize,fontWeight:this.containerFontWeight}},"containerFont"),external_containerFont:o(function(){return{fontFamily:this.external_containerFontFamily,fontSize:this.external_containerFontSize,fontWeight:this.external_containerFontWeight}},"external_containerFont"),container_dbFont:o(function(){return{fontFamily:this.container_dbFontFamily,fontSize:this.container_dbFontSize,fontWeight:this.container_dbFontWeight}},"container_dbFont"),external_container_dbFont:o(function(){return{fontFamily:this.external_container_dbFontFamily,fontSize:this.external_container_dbFontSize,fontWeight:this.external_container_dbFontWeight}},"external_container_dbFont"),container_queueFont:o(function(){return{fontFamily:this.container_queueFontFamily,fontSize:this.container_queueFontSize,fontWeight:this.container_queueFontWeight}},"container_queueFont"),external_container_queueFont:o(function(){return{fontFamily:this.external_container_queueFontFamily,fontSize:this.external_container_queueFontSize,fontWeight:this.external_container_queueFontWeight}},"external_container_queueFont"),componentFont:o(function(){return{fontFamily:this.componentFontFamily,fontSize:this.componentFontSize,fontWeight:this.componentFontWeight}},"componentFont"),external_componentFont:o(function(){return{fontFamily:this.external_componentFontFamily,fontSize:this.external_componentFontSize,fontWeight:this.external_componentFontWeight}},"external_componentFont"),component_dbFont:o(function(){return{fontFamily:this.component_dbFontFamily,fontSize:this.component_dbFontSize,fontWeight:this.component_dbFontWeight}},"component_dbFont"),external_component_dbFont:o(function(){return{fontFamily:this.external_component_dbFontFamily,fontSize:this.external_component_dbFontSize,fontWeight:this.external_component_dbFontWeight}},"external_component_dbFont"),component_queueFont:o(function(){return{fontFamily:this.component_queueFontFamily,fontSize:this.component_queueFontSize,fontWeight:this.component_queueFontWeight}},"component_queueFont"),external_component_queueFont:o(function(){return{fontFamily:this.external_component_queueFontFamily,fontSize:this.external_component_queueFontSize,fontWeight:this.external_component_queueFontWeight}},"external_component_queueFont"),boundaryFont:o(function(){return{fontFamily:this.boundaryFontFamily,fontSize:this.boundaryFontSize,fontWeight:this.boundaryFontWeight}},"boundaryFont"),messageFont:o(function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},"messageFont")},pie:{...ul.pie,useWidth:984},xyChart:{...ul.xyChart,useWidth:void 0},requirement:{...ul.requirement,useWidth:void 0},packet:{...ul.packet},radar:{...ul.radar},treemap:{useMaxWidth:!0,padding:10,diagramPadding:8,showValues:!0,nodeWidth:100,nodeHeight:40,borderWidth:1,valueFontSize:12,labelFontSize:14,valueFormat:","}},Cz=o((t,e="")=>Object.keys(t).reduce((r,n)=>Array.isArray(t[n])?r:typeof t[n]=="object"&&t[n]!==null?[...r,e+n,...Cz(t[n],"")]:[...r,e+n],[]),"keyify"),Az=new Set(Cz(Sz,"")),or=Sz});var v0,Kbe,b7=N(()=>{"use strict";_a();yt();v0=o(t=>{if(X.debug("sanitizeDirective called with",t),!(typeof t!="object"||t==null)){if(Array.isArray(t)){t.forEach(e=>v0(e));return}for(let e of Object.keys(t)){if(X.debug("Checking key",e),e.startsWith("__")||e.includes("proto")||e.includes("constr")||!Az.has(e)||t[e]==null){X.debug("sanitize deleting key: ",e),delete t[e];continue}if(typeof t[e]=="object"){X.debug("sanitizing object",e),v0(t[e]);continue}let r=["themeCSS","fontFamily","altFontFamily"];for(let n of r)e.includes(n)&&(X.debug("sanitizing css option",e),t[e]=Kbe(t[e]))}if(t.themeVariables)for(let e of Object.keys(t.themeVariables)){let r=t.themeVariables[e];r?.match&&!r.match(/^[\d "#%(),.;A-Za-z]+$/)&&(t.themeVariables[e]="")}X.debug("After sanitization",t)}},"sanitizeDirective"),Kbe=o(t=>{let e=0,r=0;for(let n of t){if(e{"use strict";g0();yt();n3();_a();b7();ph=Object.freeze(or),Ss=Un({},ph),x0=[],Fy=Un({},ph),i3=o((t,e)=>{let r=Un({},t),n={};for(let i of e)Nz(i),n=Un(n,i);if(r=Un(r,n),n.theme&&n.theme in Eo){let i=Un({},Dz),a=Un(i.themeVariables||{},n.themeVariables);r.theme&&r.theme in Eo&&(r.themeVariables=Eo[r.theme].getThemeVariables(a))}return Fy=r,Iz(Fy),Fy},"updateCurrentConfig"),T7=o(t=>(Ss=Un({},ph),Ss=Un(Ss,t),t.theme&&Eo[t.theme]&&(Ss.themeVariables=Eo[t.theme].getThemeVariables(t.themeVariables)),i3(Ss,x0),Ss),"setSiteConfig"),Lz=o(t=>{Dz=Un({},t)},"saveConfigFromInitialize"),Rz=o(t=>(Ss=Un(Ss,t),i3(Ss,x0),Ss),"updateSiteConfig"),w7=o(()=>Un({},Ss),"getSiteConfig"),a3=o(t=>(Iz(t),Un(Fy,t),tr()),"setConfig"),tr=o(()=>Un({},Fy),"getConfig"),Nz=o(t=>{t&&(["secure",...Ss.secure??[]].forEach(e=>{Object.hasOwn(t,e)&&(X.debug(`Denied attempt to modify a secure key ${e}`,t[e]),delete t[e])}),Object.keys(t).forEach(e=>{e.startsWith("__")&&delete t[e]}),Object.keys(t).forEach(e=>{typeof t[e]=="string"&&(t[e].includes("<")||t[e].includes(">")||t[e].includes("url(data:"))&&delete t[e],typeof t[e]=="object"&&Nz(t[e])}))},"sanitize"),Mz=o(t=>{v0(t),t.fontFamily&&!t.themeVariables?.fontFamily&&(t.themeVariables={...t.themeVariables,fontFamily:t.fontFamily}),x0.push(t),i3(Ss,x0)},"addDirective"),$y=o((t=Ss)=>{x0=[],i3(t,x0)},"reset"),Qbe={LAZY_LOAD_DEPRECATED:"The configuration options lazyLoadedDiagrams and loadExternalDiagramsAtStartup are deprecated. Please use registerExternalDiagrams instead."},_z={},Zbe=o(t=>{_z[t]||(X.warn(Qbe[t]),_z[t]=!0)},"issueWarning"),Iz=o(t=>{t&&(t.lazyLoadedDiagrams||t.loadExternalDiagramsAtStartup)&&Zbe("LAZY_LOAD_DEPRECATED")},"checkConfig")});function es(t){return function(e){e instanceof RegExp&&(e.lastIndex=0);for(var r=arguments.length,n=new Array(r>1?r-1:0),i=1;i2&&arguments[2]!==void 0?arguments[2]:l3;Oz&&Oz(t,null);let n=e.length;for(;n--;){let i=e[n];if(typeof i=="string"){let a=r(i);a!==i&&(Jbe(e)||(e[n]=a),i=a)}t[i]=!0}return t}function o4e(t){for(let e=0;e0&&arguments[0]!==void 0?arguments[0]:v4e(),e=o(Dt=>Xz(Dt),"DOMPurify");if(e.version="3.2.5",e.removed=[],!t||!t.document||t.document.nodeType!==Hy.document||!t.Element)return e.isSupported=!1,e;let{document:r}=t,n=r,i=n.currentScript,{DocumentFragment:a,HTMLTemplateElement:s,Node:l,Element:u,NodeFilter:h,NamedNodeMap:f=t.NamedNodeMap||t.MozNamedAttrMap,HTMLFormElement:d,DOMParser:p,trustedTypes:m}=t,g=u.prototype,y=Uy(g,"cloneNode"),v=Uy(g,"remove"),x=Uy(g,"nextSibling"),b=Uy(g,"childNodes"),T=Uy(g,"parentNode");if(typeof s=="function"){let Dt=r.createElement("template");Dt.content&&Dt.content.ownerDocument&&(r=Dt.content.ownerDocument)}let S,w="",{implementation:E,createNodeIterator:_,createDocumentFragment:C,getElementsByTagName:D}=r,{importNode:O}=n,R=Uz();e.isSupported=typeof Hz=="function"&&typeof T=="function"&&E&&E.createHTMLDocument!==void 0;let{MUSTACHE_EXPR:k,ERB_EXPR:L,TMPLIT_EXPR:A,DATA_ATTR:I,ARIA_ATTR:M,IS_SCRIPT_OR_DATA:P,ATTR_WHITESPACE:B,CUSTOM_ELEMENT:F}=Vz,{IS_ALLOWED_URI:z}=Vz,$=null,U=_r({},[...Fz,...E7,...S7,...C7,...$z]),K=null,ee=_r({},[...zz,...A7,...Gz,...o3]),Y=Object.seal(Wz(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}})),ce=null,Z=null,ue=!0,Q=!0,j=!1,ne=!0,te=!1,he=!0,le=!1,J=!1,Se=!1,se=!1,ae=!1,Oe=!1,ye=!0,Be=!1,He="user-content-",ze=!0,Le=!1,Ie={},xe=null,q=_r({},["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"]),de=null,ie=_r({},["audio","video","img","source","image","track"]),oe=null,V=_r({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Te="http://www.w3.org/1998/Math/MathML",W="http://www.w3.org/2000/svg",pe="http://www.w3.org/1999/xhtml",ve=pe,Pe=!1,_e=null,be=_r({},[Te,W,pe],k7),Ve=_r({},["mi","mo","mn","ms","mtext"]),De=_r({},["annotation-xml"]),qe=_r({},["title","style","font","a","script"]),at=null,Rt=["application/xhtml+xml","text/html"],st="text/html",Ue=null,ct=null,We=r.createElement("form"),ot=o(function(Ce){return Ce instanceof RegExp||Ce instanceof Function},"isRegexOrFunction"),Yt=o(function(){let Ce=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!(ct&&ct===Ce)){if((!Ce||typeof Ce!="object")&&(Ce={}),Ce=ad(Ce),at=Rt.indexOf(Ce.PARSER_MEDIA_TYPE)===-1?st:Ce.PARSER_MEDIA_TYPE,Ue=at==="application/xhtml+xml"?k7:l3,$=hl(Ce,"ALLOWED_TAGS")?_r({},Ce.ALLOWED_TAGS,Ue):U,K=hl(Ce,"ALLOWED_ATTR")?_r({},Ce.ALLOWED_ATTR,Ue):ee,_e=hl(Ce,"ALLOWED_NAMESPACES")?_r({},Ce.ALLOWED_NAMESPACES,k7):be,oe=hl(Ce,"ADD_URI_SAFE_ATTR")?_r(ad(V),Ce.ADD_URI_SAFE_ATTR,Ue):V,de=hl(Ce,"ADD_DATA_URI_TAGS")?_r(ad(ie),Ce.ADD_DATA_URI_TAGS,Ue):ie,xe=hl(Ce,"FORBID_CONTENTS")?_r({},Ce.FORBID_CONTENTS,Ue):q,ce=hl(Ce,"FORBID_TAGS")?_r({},Ce.FORBID_TAGS,Ue):{},Z=hl(Ce,"FORBID_ATTR")?_r({},Ce.FORBID_ATTR,Ue):{},Ie=hl(Ce,"USE_PROFILES")?Ce.USE_PROFILES:!1,ue=Ce.ALLOW_ARIA_ATTR!==!1,Q=Ce.ALLOW_DATA_ATTR!==!1,j=Ce.ALLOW_UNKNOWN_PROTOCOLS||!1,ne=Ce.ALLOW_SELF_CLOSE_IN_ATTR!==!1,te=Ce.SAFE_FOR_TEMPLATES||!1,he=Ce.SAFE_FOR_XML!==!1,le=Ce.WHOLE_DOCUMENT||!1,se=Ce.RETURN_DOM||!1,ae=Ce.RETURN_DOM_FRAGMENT||!1,Oe=Ce.RETURN_TRUSTED_TYPE||!1,Se=Ce.FORCE_BODY||!1,ye=Ce.SANITIZE_DOM!==!1,Be=Ce.SANITIZE_NAMED_PROPS||!1,ze=Ce.KEEP_CONTENT!==!1,Le=Ce.IN_PLACE||!1,z=Ce.ALLOWED_URI_REGEXP||qz,ve=Ce.NAMESPACE||pe,Ve=Ce.MATHML_TEXT_INTEGRATION_POINTS||Ve,De=Ce.HTML_INTEGRATION_POINTS||De,Y=Ce.CUSTOM_ELEMENT_HANDLING||{},Ce.CUSTOM_ELEMENT_HANDLING&&ot(Ce.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(Y.tagNameCheck=Ce.CUSTOM_ELEMENT_HANDLING.tagNameCheck),Ce.CUSTOM_ELEMENT_HANDLING&&ot(Ce.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(Y.attributeNameCheck=Ce.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),Ce.CUSTOM_ELEMENT_HANDLING&&typeof Ce.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(Y.allowCustomizedBuiltInElements=Ce.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),te&&(Q=!1),ae&&(se=!0),Ie&&($=_r({},$z),K=[],Ie.html===!0&&(_r($,Fz),_r(K,zz)),Ie.svg===!0&&(_r($,E7),_r(K,A7),_r(K,o3)),Ie.svgFilters===!0&&(_r($,S7),_r(K,A7),_r(K,o3)),Ie.mathMl===!0&&(_r($,C7),_r(K,Gz),_r(K,o3))),Ce.ADD_TAGS&&($===U&&($=ad($)),_r($,Ce.ADD_TAGS,Ue)),Ce.ADD_ATTR&&(K===ee&&(K=ad(K)),_r(K,Ce.ADD_ATTR,Ue)),Ce.ADD_URI_SAFE_ATTR&&_r(oe,Ce.ADD_URI_SAFE_ATTR,Ue),Ce.FORBID_CONTENTS&&(xe===q&&(xe=ad(xe)),_r(xe,Ce.FORBID_CONTENTS,Ue)),ze&&($["#text"]=!0),le&&_r($,["html","head","body"]),$.table&&(_r($,["tbody"]),delete ce.tbody),Ce.TRUSTED_TYPES_POLICY){if(typeof Ce.TRUSTED_TYPES_POLICY.createHTML!="function")throw Vy('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof Ce.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw Vy('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');S=Ce.TRUSTED_TYPES_POLICY,w=S.createHTML("")}else S===void 0&&(S=x4e(m,i)),S!==null&&typeof w=="string"&&(w=S.createHTML(""));Ja&&Ja(Ce),ct=Ce}},"_parseConfig"),Tt=_r({},[...E7,...S7,...l4e]),Mt=_r({},[...C7,...c4e]),bt=o(function(Ce){let tt=T(Ce);(!tt||!tt.tagName)&&(tt={namespaceURI:ve,tagName:"template"});let Ct=l3(Ce.tagName),gr=l3(tt.tagName);return _e[Ce.namespaceURI]?Ce.namespaceURI===W?tt.namespaceURI===pe?Ct==="svg":tt.namespaceURI===Te?Ct==="svg"&&(gr==="annotation-xml"||Ve[gr]):!!Tt[Ct]:Ce.namespaceURI===Te?tt.namespaceURI===pe?Ct==="math":tt.namespaceURI===W?Ct==="math"&&De[gr]:!!Mt[Ct]:Ce.namespaceURI===pe?tt.namespaceURI===W&&!De[gr]||tt.namespaceURI===Te&&!Ve[gr]?!1:!Mt[Ct]&&(qe[Ct]||!Tt[Ct]):!!(at==="application/xhtml+xml"&&_e[Ce.namespaceURI]):!1},"_checkValidNamespace"),ut=o(function(Ce){zy(e.removed,{element:Ce});try{T(Ce).removeChild(Ce)}catch{v(Ce)}},"_forceRemove"),St=o(function(Ce,tt){try{zy(e.removed,{attribute:tt.getAttributeNode(Ce),from:tt})}catch{zy(e.removed,{attribute:null,from:tt})}if(tt.removeAttribute(Ce),Ce==="is")if(se||ae)try{ut(tt)}catch{}else try{tt.setAttribute(Ce,"")}catch{}},"_removeAttribute"),ft=o(function(Ce){let tt=null,Ct=null;if(Se)Ce=""+Ce;else{let yn=Bz(Ce,/^[\r\n\t ]+/);Ct=yn&&yn[0]}at==="application/xhtml+xml"&&ve===pe&&(Ce=''+Ce+"");let gr=S?S.createHTML(Ce):Ce;if(ve===pe)try{tt=new p().parseFromString(gr,at)}catch{}if(!tt||!tt.documentElement){tt=E.createDocument(ve,"template",null);try{tt.documentElement.innerHTML=Pe?w:gr}catch{}}let rn=tt.body||tt.documentElement;return Ce&&Ct&&rn.insertBefore(r.createTextNode(Ct),rn.childNodes[0]||null),ve===pe?D.call(tt,le?"html":"body")[0]:le?tt.documentElement:rn},"_initDocument"),vt=o(function(Ce){return _.call(Ce.ownerDocument||Ce,Ce,h.SHOW_ELEMENT|h.SHOW_COMMENT|h.SHOW_TEXT|h.SHOW_PROCESSING_INSTRUCTION|h.SHOW_CDATA_SECTION,null)},"_createNodeIterator"),nt=o(function(Ce){return Ce instanceof d&&(typeof Ce.nodeName!="string"||typeof Ce.textContent!="string"||typeof Ce.removeChild!="function"||!(Ce.attributes instanceof f)||typeof Ce.removeAttribute!="function"||typeof Ce.setAttribute!="function"||typeof Ce.namespaceURI!="string"||typeof Ce.insertBefore!="function"||typeof Ce.hasChildNodes!="function")},"_isClobbered"),pn=o(function(Ce){return typeof l=="function"&&Ce instanceof l},"_isNode");function kt(Dt,Ce,tt){s3(Dt,Ct=>{Ct.call(e,Ce,tt,ct)})}o(kt,"_executeHooks");let On=o(function(Ce){let tt=null;if(kt(R.beforeSanitizeElements,Ce,null),nt(Ce))return ut(Ce),!0;let Ct=Ue(Ce.nodeName);if(kt(R.uponSanitizeElement,Ce,{tagName:Ct,allowedTags:$}),Ce.hasChildNodes()&&!pn(Ce.firstElementChild)&&Za(/<[/\w!]/g,Ce.innerHTML)&&Za(/<[/\w!]/g,Ce.textContent)||Ce.nodeType===Hy.progressingInstruction||he&&Ce.nodeType===Hy.comment&&Za(/<[/\w]/g,Ce.data))return ut(Ce),!0;if(!$[Ct]||ce[Ct]){if(!ce[Ct]&&Mr(Ct)&&(Y.tagNameCheck instanceof RegExp&&Za(Y.tagNameCheck,Ct)||Y.tagNameCheck instanceof Function&&Y.tagNameCheck(Ct)))return!1;if(ze&&!xe[Ct]){let gr=T(Ce)||Ce.parentNode,rn=b(Ce)||Ce.childNodes;if(rn&&gr){let yn=rn.length;for(let Zr=yn-1;Zr>=0;--Zr){let Oi=y(rn[Zr],!0);Oi.__removalCount=(Ce.__removalCount||0)+1,gr.insertBefore(Oi,x(Ce))}}}return ut(Ce),!0}return Ce instanceof u&&!bt(Ce)||(Ct==="noscript"||Ct==="noembed"||Ct==="noframes")&&Za(/<\/no(script|embed|frames)/i,Ce.innerHTML)?(ut(Ce),!0):(te&&Ce.nodeType===Hy.text&&(tt=Ce.textContent,s3([k,L,A],gr=>{tt=Gy(tt,gr," ")}),Ce.textContent!==tt&&(zy(e.removed,{element:Ce.cloneNode()}),Ce.textContent=tt)),kt(R.afterSanitizeElements,Ce,null),!1)},"_sanitizeElements"),tn=o(function(Ce,tt,Ct){if(ye&&(tt==="id"||tt==="name")&&(Ct in r||Ct in We))return!1;if(!(Q&&!Z[tt]&&Za(I,tt))){if(!(ue&&Za(M,tt))){if(!K[tt]||Z[tt]){if(!(Mr(Ce)&&(Y.tagNameCheck instanceof RegExp&&Za(Y.tagNameCheck,Ce)||Y.tagNameCheck instanceof Function&&Y.tagNameCheck(Ce))&&(Y.attributeNameCheck instanceof RegExp&&Za(Y.attributeNameCheck,tt)||Y.attributeNameCheck instanceof Function&&Y.attributeNameCheck(tt))||tt==="is"&&Y.allowCustomizedBuiltInElements&&(Y.tagNameCheck instanceof RegExp&&Za(Y.tagNameCheck,Ct)||Y.tagNameCheck instanceof Function&&Y.tagNameCheck(Ct))))return!1}else if(!oe[tt]){if(!Za(z,Gy(Ct,B,""))){if(!((tt==="src"||tt==="xlink:href"||tt==="href")&&Ce!=="script"&&i4e(Ct,"data:")===0&&de[Ce])){if(!(j&&!Za(P,Gy(Ct,B,"")))){if(Ct)return!1}}}}}}return!0},"_isValidAttribute"),Mr=o(function(Ce){return Ce!=="annotation-xml"&&Bz(Ce,F)},"_isBasicCustomElement"),Ir=o(function(Ce){kt(R.beforeSanitizeAttributes,Ce,null);let{attributes:tt}=Ce;if(!tt||nt(Ce))return;let Ct={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:K,forceKeepAttr:void 0},gr=tt.length;for(;gr--;){let rn=tt[gr],{name:yn,namespaceURI:Zr,value:Oi}=rn,ei=Ue(yn),Sn=yn==="value"?Oi:a4e(Oi);if(Ct.attrName=ei,Ct.attrValue=Sn,Ct.keepAttr=!0,Ct.forceKeepAttr=void 0,kt(R.uponSanitizeAttribute,Ce,Ct),Sn=Ct.attrValue,Be&&(ei==="id"||ei==="name")&&(St(yn,Ce),Sn=He+Sn),he&&Za(/((--!?|])>)|<\/(style|title)/i,Sn)){St(yn,Ce);continue}if(Ct.forceKeepAttr||(St(yn,Ce),!Ct.keepAttr))continue;if(!ne&&Za(/\/>/i,Sn)){St(yn,Ce);continue}te&&s3([k,L,A],et=>{Sn=Gy(Sn,et," ")});let Hr=Ue(Ce.nodeName);if(tn(Hr,ei,Sn)){if(S&&typeof m=="object"&&typeof m.getAttributeType=="function"&&!Zr)switch(m.getAttributeType(Hr,ei)){case"TrustedHTML":{Sn=S.createHTML(Sn);break}case"TrustedScriptURL":{Sn=S.createScriptURL(Sn);break}}try{Zr?Ce.setAttributeNS(Zr,yn,Sn):Ce.setAttribute(yn,Sn),nt(Ce)?ut(Ce):Pz(e.removed)}catch{}}}kt(R.afterSanitizeAttributes,Ce,null)},"_sanitizeAttributes"),Pn=o(function Dt(Ce){let tt=null,Ct=vt(Ce);for(kt(R.beforeSanitizeShadowDOM,Ce,null);tt=Ct.nextNode();)kt(R.uponSanitizeShadowNode,tt,null),On(tt),Ir(tt),tt.content instanceof a&&Dt(tt.content);kt(R.afterSanitizeShadowDOM,Ce,null)},"_sanitizeShadowDOM");return e.sanitize=function(Dt){let Ce=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},tt=null,Ct=null,gr=null,rn=null;if(Pe=!Dt,Pe&&(Dt=""),typeof Dt!="string"&&!pn(Dt))if(typeof Dt.toString=="function"){if(Dt=Dt.toString(),typeof Dt!="string")throw Vy("dirty is not a string, aborting")}else throw Vy("toString is not a function");if(!e.isSupported)return Dt;if(J||Yt(Ce),e.removed=[],typeof Dt=="string"&&(Le=!1),Le){if(Dt.nodeName){let Oi=Ue(Dt.nodeName);if(!$[Oi]||ce[Oi])throw Vy("root node is forbidden and cannot be sanitized in-place")}}else if(Dt instanceof l)tt=ft(""),Ct=tt.ownerDocument.importNode(Dt,!0),Ct.nodeType===Hy.element&&Ct.nodeName==="BODY"||Ct.nodeName==="HTML"?tt=Ct:tt.appendChild(Ct);else{if(!se&&!te&&!le&&Dt.indexOf("<")===-1)return S&&Oe?S.createHTML(Dt):Dt;if(tt=ft(Dt),!tt)return se?null:Oe?w:""}tt&&Se&&ut(tt.firstChild);let yn=vt(Le?Dt:tt);for(;gr=yn.nextNode();)On(gr),Ir(gr),gr.content instanceof a&&Pn(gr.content);if(Le)return Dt;if(se){if(ae)for(rn=C.call(tt.ownerDocument);tt.firstChild;)rn.appendChild(tt.firstChild);else rn=tt;return(K.shadowroot||K.shadowrootmode)&&(rn=O.call(n,rn,!0)),rn}let Zr=le?tt.outerHTML:tt.innerHTML;return le&&$["!doctype"]&&tt.ownerDocument&&tt.ownerDocument.doctype&&tt.ownerDocument.doctype.name&&Za(Yz,tt.ownerDocument.doctype.name)&&(Zr=" +`+Zr),te&&s3([k,L,A],Oi=>{Zr=Gy(Zr,Oi," ")}),S&&Oe?S.createHTML(Zr):Zr},e.setConfig=function(){let Dt=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};Yt(Dt),J=!0},e.clearConfig=function(){ct=null,J=!1},e.isValidAttribute=function(Dt,Ce,tt){ct||Yt({});let Ct=Ue(Dt),gr=Ue(Ce);return tn(Ct,gr,tt)},e.addHook=function(Dt,Ce){typeof Ce=="function"&&zy(R[Dt],Ce)},e.removeHook=function(Dt,Ce){if(Ce!==void 0){let tt=r4e(R[Dt],Ce);return tt===-1?void 0:n4e(R[Dt],tt,1)[0]}return Pz(R[Dt])},e.removeHooks=function(Dt){R[Dt]=[]},e.removeAllHooks=function(){R=Uz()},e}var Hz,Oz,Jbe,e4e,t4e,Ja,So,Wz,_7,D7,s3,r4e,Pz,zy,n4e,l3,k7,Bz,Gy,i4e,a4e,hl,Za,Vy,Fz,E7,S7,l4e,C7,c4e,$z,zz,A7,Gz,o3,u4e,h4e,f4e,d4e,p4e,qz,m4e,g4e,Yz,y4e,Vz,Hy,v4e,x4e,Uz,mh,L7=N(()=>{"use strict";({entries:Hz,setPrototypeOf:Oz,isFrozen:Jbe,getPrototypeOf:e4e,getOwnPropertyDescriptor:t4e}=Object),{freeze:Ja,seal:So,create:Wz}=Object,{apply:_7,construct:D7}=typeof Reflect<"u"&&Reflect;Ja||(Ja=o(function(e){return e},"freeze"));So||(So=o(function(e){return e},"seal"));_7||(_7=o(function(e,r,n){return e.apply(r,n)},"apply"));D7||(D7=o(function(e,r){return new e(...r)},"construct"));s3=es(Array.prototype.forEach),r4e=es(Array.prototype.lastIndexOf),Pz=es(Array.prototype.pop),zy=es(Array.prototype.push),n4e=es(Array.prototype.splice),l3=es(String.prototype.toLowerCase),k7=es(String.prototype.toString),Bz=es(String.prototype.match),Gy=es(String.prototype.replace),i4e=es(String.prototype.indexOf),a4e=es(String.prototype.trim),hl=es(Object.prototype.hasOwnProperty),Za=es(RegExp.prototype.test),Vy=s4e(TypeError);o(es,"unapply");o(s4e,"unconstruct");o(_r,"addToSet");o(o4e,"cleanArray");o(ad,"clone");o(Uy,"lookupGetter");Fz=Ja(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),E7=Ja(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),S7=Ja(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),l4e=Ja(["animate","color-profile","cursor","discard","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),C7=Ja(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","mprescripts"]),c4e=Ja(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),$z=Ja(["#text"]),zz=Ja(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","popover","popovertarget","popovertargetaction","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","wrap","xmlns","slot"]),A7=Ja(["accent-height","accumulate","additive","alignment-baseline","amplitude","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","exponent","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","intercept","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","slope","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","tablevalues","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),Gz=Ja(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),o3=Ja(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),u4e=So(/\{\{[\w\W]*|[\w\W]*\}\}/gm),h4e=So(/<%[\w\W]*|[\w\W]*%>/gm),f4e=So(/\$\{[\w\W]*/gm),d4e=So(/^data-[\-\w.\u00B7-\uFFFF]+$/),p4e=So(/^aria-[\-\w]+$/),qz=So(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),m4e=So(/^(?:\w+script|data):/i),g4e=So(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),Yz=So(/^html$/i),y4e=So(/^[a-z][.\w]*(-[.\w]+)+$/i),Vz=Object.freeze({__proto__:null,ARIA_ATTR:p4e,ATTR_WHITESPACE:g4e,CUSTOM_ELEMENT:y4e,DATA_ATTR:d4e,DOCTYPE_NAME:Yz,ERB_EXPR:h4e,IS_ALLOWED_URI:qz,IS_SCRIPT_OR_DATA:m4e,MUSTACHE_EXPR:u4e,TMPLIT_EXPR:f4e}),Hy={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,progressingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},v4e=o(function(){return typeof window>"u"?null:window},"getGlobal"),x4e=o(function(e,r){if(typeof e!="object"||typeof e.createPolicy!="function")return null;let n=null,i="data-tt-policy-suffix";r&&r.hasAttribute(i)&&(n=r.getAttribute(i));let a="dompurify"+(n?"#"+n:"");try{return e.createPolicy(a,{createHTML(s){return s},createScriptURL(s){return s}})}catch{return console.warn("TrustedTypes policy "+a+" could not be created."),null}},"_createTrustedTypesPolicy"),Uz=o(function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}},"_createHooksMap");o(Xz,"createDOMPurify");mh=Xz()});var CV={};ur(CV,{ParseError:()=>pt,SETTINGS_SCHEMA:()=>Xy,__defineFunction:()=>Nt,__defineMacro:()=>fe,__defineSymbol:()=>G,__domTree:()=>SV,__parse:()=>TV,__renderToDomTree:()=>O3,__renderToHTMLTree:()=>kV,__setFontMetrics:()=>_G,default:()=>u5e,render:()=>xA,renderToString:()=>bV,version:()=>EV});function C4e(t){return String(t).replace(S4e,e=>E4e[e])}function L4e(t){if(t.default)return t.default;var e=t.type,r=Array.isArray(e)?e[0]:e;if(typeof r!="string")return r.enum[0];switch(r){case"boolean":return!1;case"string":return"";case"number":return 0;case"object":return{}}}function B4e(t){for(var e=0;e=i[0]&&t<=i[1])return r.name}return null}function AG(t){for(var e=0;e=b3[e]&&t<=b3[e+1])return!0;return!1}function _G(t,e){Jl[t]=e}function nA(t,e,r){if(!Jl[e])throw new Error("Font metrics not found for font: "+e+".");var n=t.charCodeAt(0),i=Jl[e][n];if(!i&&t[0]in Kz&&(n=Kz[t[0]].charCodeAt(0),i=Jl[e][n]),!i&&r==="text"&&AG(n)&&(i=Jl[e][77]),i)return{depth:i[0],height:i[1],italic:i[2],skew:i[3],width:i[4]}}function X4e(t){var e;if(t>=5?e=0:t>=3?e=1:e=2,!R7[e]){var r=R7[e]={cssEmPerMu:c3.quad[e]/18};for(var n in c3)c3.hasOwnProperty(n)&&(r[n]=c3[n][e])}return R7[e]}function Jz(t){if(t instanceof As)return t;throw new Error("Expected symbolNode but got "+String(t)+".")}function J4e(t){if(t instanceof ld)return t;throw new Error("Expected span but got "+String(t)+".")}function G(t,e,r,n,i,a){An[t][i]={font:e,group:r,replace:n},a&&n&&(An[t][n]=An[t][i])}function Nt(t){for(var{type:e,names:r,props:n,handler:i,htmlBuilder:a,mathmlBuilder:s}=t,l={type:e,numArgs:n.numArgs,argTypes:n.argTypes,allowedInArgument:!!n.allowedInArgument,allowedInText:!!n.allowedInText,allowedInMath:n.allowedInMath===void 0?!0:n.allowedInMath,numOptionalArgs:n.numOptionalArgs||0,infix:!!n.infix,primitive:!!n.primitive,handler:i},u=0;u0&&(a.push(g3(s,e)),s=[]),a.push(n[l]));s.length>0&&a.push(g3(s,e));var h;r?(h=g3($i(r,e,!0)),h.classes=["tag"],a.push(h)):i&&a.push(i);var f=fu(["katex-html"],a);if(f.setAttribute("aria-hidden","true"),h){var d=h.children[0];d.style.height=Et(f.height+f.depth),f.depth&&(d.style.verticalAlign=Et(-f.depth))}return f}function zG(t){return new od(t)}function I7(t){if(!t)return!1;if(t.type==="mi"&&t.children.length===1){var e=t.children[0];return e instanceof Ao&&e.text==="."}else if(t.type==="mo"&&t.children.length===1&&t.getAttribute("separator")==="true"&&t.getAttribute("lspace")==="0em"&&t.getAttribute("rspace")==="0em"){var r=t.children[0];return r instanceof Ao&&r.text===","}else return!1}function iG(t,e,r,n,i){var a=_s(t,r),s;a.length===1&&a[0]instanceof ts&&Jt.contains(["mrow","mtable"],a[0].type)?s=a[0]:s=new dt.MathNode("mrow",a);var l=new dt.MathNode("annotation",[new dt.TextNode(e)]);l.setAttribute("encoding","application/x-tex");var u=new dt.MathNode("semantics",[s,l]),h=new dt.MathNode("math",[u]);h.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML"),n&&h.setAttribute("display","block");var f=i?"katex":"katex-mathml";return Fe.makeSpan([f],[h])}function xr(t,e){if(!t||t.type!==e)throw new Error("Expected node of type "+e+", but got "+(t?"node of type "+t.type:String(t)));return t}function oA(t){var e=R3(t);if(!e)throw new Error("Expected node of symbol group type, but got "+(t?"node of type "+t.type:String(t)));return e}function R3(t){return t&&(t.type==="atom"||t3e.hasOwnProperty(t.type))?t:null}function HG(t,e){var r=$i(t.body,e,!0);return R3e([t.mclass],r,e)}function WG(t,e){var r,n=_s(t.body,e);return t.mclass==="minner"?r=new dt.MathNode("mpadded",n):t.mclass==="mord"?t.isCharacterBox?(r=n[0],r.type="mi"):r=new dt.MathNode("mi",n):(t.isCharacterBox?(r=n[0],r.type="mo"):r=new dt.MathNode("mo",n),t.mclass==="mbin"?(r.attributes.lspace="0.22em",r.attributes.rspace="0.22em"):t.mclass==="mpunct"?(r.attributes.lspace="0em",r.attributes.rspace="0.17em"):t.mclass==="mopen"||t.mclass==="mclose"?(r.attributes.lspace="0em",r.attributes.rspace="0em"):t.mclass==="minner"&&(r.attributes.lspace="0.0556em",r.attributes.width="+0.1111em")),r}function I3e(t,e,r){var n=N3e[t];switch(n){case"\\\\cdrightarrow":case"\\\\cdleftarrow":return r.callFunction(n,[e[0]],[e[1]]);case"\\uparrow":case"\\downarrow":{var i=r.callFunction("\\\\cdleft",[e[0]],[]),a={type:"atom",text:n,mode:"math",family:"rel"},s=r.callFunction("\\Big",[a],[]),l=r.callFunction("\\\\cdright",[e[1]],[]),u={type:"ordgroup",mode:"math",body:[i,s,l]};return r.callFunction("\\\\cdparent",[u],[])}case"\\\\cdlongequal":return r.callFunction("\\\\cdlongequal",[],[]);case"\\Vert":{var h={type:"textord",text:"\\Vert",mode:"math"};return r.callFunction("\\Big",[h],[])}default:return{type:"textord",text:" ",mode:"math"}}}function O3e(t){var e=[];for(t.gullet.beginGroup(),t.gullet.macros.set("\\cr","\\\\\\relax"),t.gullet.beginGroup();;){e.push(t.parseExpression(!1,"\\\\")),t.gullet.endGroup(),t.gullet.beginGroup();var r=t.fetch().text;if(r==="&"||r==="\\\\")t.consume();else if(r==="\\end"){e[e.length-1].length===0&&e.pop();break}else throw new pt("Expected \\\\ or \\cr or \\end",t.nextToken)}for(var n=[],i=[n],a=0;a-1))if("<>AV".indexOf(h)>-1)for(var d=0;d<2;d++){for(var p=!0,m=u+1;mAV=|." after @',s[u]);var g=I3e(h,f,t),y={type:"styling",body:[g],mode:"math",style:"display"};n.push(y),l=aG()}a%2===0?n.push(l):n.shift(),n=[],i.push(n)}t.gullet.endGroup(),t.gullet.endGroup();var v=new Array(i[0].length).fill({type:"align",align:"c",pregap:.25,postgap:.25});return{type:"array",mode:"math",body:i,arraystretch:1,addJot:!0,rowGaps:[null],cols:v,colSeparationType:"CD",hLinesBeforeRow:new Array(i.length+1).fill([])}}function M3(t,e){var r=R3(t);if(r&&Jt.contains(X3e,r.text))return r;throw r?new pt("Invalid delimiter '"+r.text+"' after '"+e.funcName+"'",t):new pt("Invalid delimiter type '"+t.type+"'",t)}function lG(t){if(!t.body)throw new Error("Bug: The leftright ParseNode wasn't fully parsed.")}function tc(t){for(var{type:e,names:r,props:n,handler:i,htmlBuilder:a,mathmlBuilder:s}=t,l={type:e,numArgs:n.numArgs||0,allowedInText:!1,numOptionalArgs:0,handler:i},u=0;u1||!f)&&y.pop(),x.length{"use strict";Qs=class t{static{o(this,"SourceLocation")}constructor(e,r,n){this.lexer=void 0,this.start=void 0,this.end=void 0,this.lexer=e,this.start=r,this.end=n}static range(e,r){return r?!e||!e.loc||!r.loc||e.loc.lexer!==r.loc.lexer?null:new t(e.loc.lexer,e.loc.start,r.loc.end):e&&e.loc}},_o=class t{static{o(this,"Token")}constructor(e,r){this.text=void 0,this.loc=void 0,this.noexpand=void 0,this.treatAsRelax=void 0,this.text=e,this.loc=r}range(e,r){return new t(r,Qs.range(this,e))}},pt=class t{static{o(this,"ParseError")}constructor(e,r){this.name=void 0,this.position=void 0,this.length=void 0,this.rawMessage=void 0;var n="KaTeX parse error: "+e,i,a,s=r&&r.loc;if(s&&s.start<=s.end){var l=s.lexer.input;i=s.start,a=s.end,i===l.length?n+=" at end of input: ":n+=" at position "+(i+1)+": ";var u=l.slice(i,a).replace(/[^]/g,"$&\u0332"),h;i>15?h="\u2026"+l.slice(i-15,i):h=l.slice(0,i);var f;a+15":">","<":"<",'"':""","'":"'"},S4e=/[&><"']/g;o(C4e,"escape");CG=o(function t(e){return e.type==="ordgroup"||e.type==="color"?e.body.length===1?t(e.body[0]):e:e.type==="font"?t(e.body):e},"getBaseElem"),A4e=o(function(e){var r=CG(e);return r.type==="mathord"||r.type==="textord"||r.type==="atom"},"isCharacterBox"),_4e=o(function(e){if(!e)throw new Error("Expected non-null, but got "+String(e));return e},"assert"),D4e=o(function(e){var r=/^[\x00-\x20]*([^\\/#?]*?)(:|�*58|�*3a|&colon)/i.exec(e);return r?r[2]!==":"||!/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(r[1])?null:r[1].toLowerCase():"_relative"},"protocolFromUrl"),Jt={contains:b4e,deflt:T4e,escape:C4e,hyphenate:k4e,getBaseElem:CG,isCharacterBox:A4e,protocolFromUrl:D4e},Xy={displayMode:{type:"boolean",description:"Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.",cli:"-d, --display-mode"},output:{type:{enum:["htmlAndMathml","html","mathml"]},description:"Determines the markup language of the output.",cli:"-F, --format "},leqno:{type:"boolean",description:"Render display math in leqno style (left-justified tags)."},fleqn:{type:"boolean",description:"Render display math flush left."},throwOnError:{type:"boolean",default:!0,cli:"-t, --no-throw-on-error",cliDescription:"Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error."},errorColor:{type:"string",default:"#cc0000",cli:"-c, --error-color ",cliDescription:"A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.",cliProcessor:o(t=>"#"+t,"cliProcessor")},macros:{type:"object",cli:"-m, --macro ",cliDescription:"Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).",cliDefault:[],cliProcessor:o((t,e)=>(e.push(t),e),"cliProcessor")},minRuleThickness:{type:"number",description:"Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.",processor:o(t=>Math.max(0,t),"processor"),cli:"--min-rule-thickness ",cliProcessor:parseFloat},colorIsTextColor:{type:"boolean",description:"Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.",cli:"-b, --color-is-text-color"},strict:{type:[{enum:["warn","ignore","error"]},"boolean","function"],description:"Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.",cli:"-S, --strict",cliDefault:!1},trust:{type:["boolean","function"],description:"Trust the input, enabling all HTML features such as \\url.",cli:"-T, --trust"},maxSize:{type:"number",default:1/0,description:"If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large",processor:o(t=>Math.max(0,t),"processor"),cli:"-s, --max-size ",cliProcessor:parseInt},maxExpand:{type:"number",default:1e3,description:"Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.",processor:o(t=>Math.max(0,t),"processor"),cli:"-e, --max-expand ",cliProcessor:o(t=>t==="Infinity"?1/0:parseInt(t),"cliProcessor")},globalGroup:{type:"boolean",cli:!1}};o(L4e,"getDefaultValue");Ky=class{static{o(this,"Settings")}constructor(e){this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,this.globalGroup=void 0,e=e||{};for(var r in Xy)if(Xy.hasOwnProperty(r)){var n=Xy[r];this[r]=e[r]!==void 0?n.processor?n.processor(e[r]):e[r]:L4e(n)}}reportNonstrict(e,r,n){var i=this.strict;if(typeof i=="function"&&(i=i(e,r,n)),!(!i||i==="ignore")){if(i===!0||i==="error")throw new pt("LaTeX-incompatible input and strict mode is set to 'error': "+(r+" ["+e+"]"),n);i==="warn"?typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(r+" ["+e+"]")):typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+i+"': "+r+" ["+e+"]"))}}useStrictBehavior(e,r,n){var i=this.strict;if(typeof i=="function")try{i=i(e,r,n)}catch{i="error"}return!i||i==="ignore"?!1:i===!0||i==="error"?!0:i==="warn"?(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(r+" ["+e+"]")),!1):(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+i+"': "+r+" ["+e+"]")),!1)}isTrusted(e){if(e.url&&!e.protocol){var r=Jt.protocolFromUrl(e.url);if(r==null)return!1;e.protocol=r}var n=typeof this.trust=="function"?this.trust(e):this.trust;return!!n}},Ql=class{static{o(this,"Style")}constructor(e,r,n){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=e,this.size=r,this.cramped=n}sup(){return Zl[R4e[this.id]]}sub(){return Zl[N4e[this.id]]}fracNum(){return Zl[M4e[this.id]]}fracDen(){return Zl[I4e[this.id]]}cramp(){return Zl[O4e[this.id]]}text(){return Zl[P4e[this.id]]}isTight(){return this.size>=2}},rA=0,T3=1,w0=2,uu=3,Qy=4,Co=5,k0=6,rs=7,Zl=[new Ql(rA,0,!1),new Ql(T3,0,!0),new Ql(w0,1,!1),new Ql(uu,1,!0),new Ql(Qy,2,!1),new Ql(Co,2,!0),new Ql(k0,3,!1),new Ql(rs,3,!0)],R4e=[Qy,Co,Qy,Co,k0,rs,k0,rs],N4e=[Co,Co,Co,Co,rs,rs,rs,rs],M4e=[w0,uu,Qy,Co,k0,rs,k0,rs],I4e=[uu,uu,Co,Co,rs,rs,rs,rs],O4e=[T3,T3,uu,uu,Co,Co,rs,rs],P4e=[rA,T3,w0,uu,w0,uu,w0,uu],nr={DISPLAY:Zl[rA],TEXT:Zl[w0],SCRIPT:Zl[Qy],SCRIPTSCRIPT:Zl[k0]},H7=[{name:"latin",blocks:[[256,591],[768,879]]},{name:"cyrillic",blocks:[[1024,1279]]},{name:"armenian",blocks:[[1328,1423]]},{name:"brahmic",blocks:[[2304,4255]]},{name:"georgian",blocks:[[4256,4351]]},{name:"cjk",blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:"hangul",blocks:[[44032,55215]]}];o(B4e,"scriptFromCodepoint");b3=[];H7.forEach(t=>t.blocks.forEach(e=>b3.push(...e)));o(AG,"supportedCodepoint");T0=80,F4e=o(function(e,r){return"M95,"+(622+e+r)+` c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14 c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54 c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10 @@ -21,7 +21,7 @@ c5.3,-9.3,12,-14,20,-14 H400000v`+(40+e)+`H845.2724 s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7 c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z -M`+(834+e)+" "+r+"h400000v"+(40+e)+"h-400000z"},"sqrtMain"),pbe=o(function(e,r){return"M263,"+(601+e+r)+`c0.7,0,18,39.7,52,119 +M`+(834+e)+" "+r+"h400000v"+(40+e)+"h-400000z"},"sqrtMain"),$4e=o(function(e,r){return"M263,"+(601+e+r)+`c0.7,0,18,39.7,52,119 c34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120 c340,-704.7,510.7,-1060.3,512,-1067 l`+e/2.084+" -"+e+` @@ -31,7 +31,7 @@ s-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5, c-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1 s-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26 c-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z -M`+(1001+e)+" "+r+"h400000v"+(40+e)+"h-400000z"},"sqrtSize1"),mbe=o(function(e,r){return"M983 "+(10+e+r)+` +M`+(1001+e)+" "+r+"h400000v"+(40+e)+"h-400000z"},"sqrtSize1"),z4e=o(function(e,r){return"M983 "+(10+e+r)+` l`+e/3.13+" -"+e+` c4,-6.7,10,-10,18,-10 H400000v`+(40+e)+` H1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7 @@ -40,7 +40,7 @@ c-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30 c26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722 c56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5 c53.7,-170.3,84.5,-266.8,92.5,-289.5z -M`+(1001+e)+" "+r+"h400000v"+(40+e)+"h-400000z"},"sqrtSize2"),gbe=o(function(e,r){return"M424,"+(2398+e+r)+` +M`+(1001+e)+" "+r+"h400000v"+(40+e)+"h-400000z"},"sqrtSize2"),G4e=o(function(e,r){return"M424,"+(2398+e+r)+` c-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514 c0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20 s-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121 @@ -50,18 +50,18 @@ v`+(40+e)+`H1014.6 s-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185 c-2,6,-10,9,-24,9 c-8,0,-12,-0.7,-12,-2z M`+(1001+e)+" "+r+` -h400000v`+(40+e)+"h-400000z"},"sqrtSize3"),ybe=o(function(e,r){return"M473,"+(2713+e+r)+` +h400000v`+(40+e)+"h-400000z"},"sqrtSize3"),V4e=o(function(e,r){return"M473,"+(2713+e+r)+` c339.3,-1799.3,509.3,-2700,510,-2702 l`+e/5.298+" -"+e+` c3.3,-7.3,9.3,-11,18,-11 H400000v`+(40+e)+`H1017.7 s-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9 c-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200 c0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26 s76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104, -606zM`+(1001+e)+" "+r+"h400000v"+(40+e)+"H1017.7z"},"sqrtSize4"),vbe=o(function(e){var r=e/2;return"M400000 "+e+" H0 L"+r+" 0 l65 45 L145 "+(e-80)+" H400000z"},"phasePath"),xbe=o(function(e,r,n){var i=n-54-r-e;return"M702 "+(e+r)+"H400000"+(40+e)+` +606zM`+(1001+e)+" "+r+"h400000v"+(40+e)+"H1017.7z"},"sqrtSize4"),U4e=o(function(e){var r=e/2;return"M400000 "+e+" H0 L"+r+" 0 l65 45 L145 "+(e-80)+" H400000z"},"phasePath"),H4e=o(function(e,r,n){var i=n-54-r-e;return"M702 "+(e+r)+"H400000"+(40+e)+` H742v`+i+`l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1 h-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170 c-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667 -219 661 l218 661zM702 `+r+"H400000v"+(40+e)+"H742z"},"sqrtTall"),bbe=o(function(e,r,n){r=1e3*r;var i="";switch(e){case"sqrtMain":i=dbe(r,v0);break;case"sqrtSize1":i=pbe(r,v0);break;case"sqrtSize2":i=mbe(r,v0);break;case"sqrtSize3":i=gbe(r,v0);break;case"sqrtSize4":i=ybe(r,v0);break;case"sqrtTall":i=xbe(r,v0,n)}return i},"sqrtPath"),wbe=o(function(e,r){switch(e){case"\u239C":return"M291 0 H417 V"+r+" H291z M291 0 H417 V"+r+" H291z";case"\u2223":return"M145 0 H188 V"+r+" H145z M145 0 H188 V"+r+" H145z";case"\u2225":return"M145 0 H188 V"+r+" H145z M145 0 H188 V"+r+" H145z"+("M367 0 H410 V"+r+" H367z M367 0 H410 V"+r+" H367z");case"\u239F":return"M457 0 H583 V"+r+" H457z M457 0 H583 V"+r+" H457z";case"\u23A2":return"M319 0 H403 V"+r+" H319z M319 0 H403 V"+r+" H319z";case"\u23A5":return"M263 0 H347 V"+r+" H263z M263 0 H347 V"+r+" H263z";case"\u23AA":return"M384 0 H504 V"+r+" H384z M384 0 H504 V"+r+" H384z";case"\u23D0":return"M312 0 H355 V"+r+" H312z M312 0 H355 V"+r+" H312z";case"\u2016":return"M257 0 H300 V"+r+" H257z M257 0 H300 V"+r+" H257z"+("M478 0 H521 V"+r+" H478z M478 0 H521 V"+r+" H478z");default:return""}},"innerPath"),fz={doubleleftarrow:`M262 157 +219 661 l218 661zM702 `+r+"H400000v"+(40+e)+"H742z"},"sqrtTall"),W4e=o(function(e,r,n){r=1e3*r;var i="";switch(e){case"sqrtMain":i=F4e(r,T0);break;case"sqrtSize1":i=$4e(r,T0);break;case"sqrtSize2":i=z4e(r,T0);break;case"sqrtSize3":i=G4e(r,T0);break;case"sqrtSize4":i=V4e(r,T0);break;case"sqrtTall":i=H4e(r,T0,n)}return i},"sqrtPath"),q4e=o(function(e,r){switch(e){case"\u239C":return"M291 0 H417 V"+r+" H291z M291 0 H417 V"+r+" H291z";case"\u2223":return"M145 0 H188 V"+r+" H145z M145 0 H188 V"+r+" H145z";case"\u2225":return"M145 0 H188 V"+r+" H145z M145 0 H188 V"+r+" H145z"+("M367 0 H410 V"+r+" H367z M367 0 H410 V"+r+" H367z");case"\u239F":return"M457 0 H583 V"+r+" H457z M457 0 H583 V"+r+" H457z";case"\u23A2":return"M319 0 H403 V"+r+" H319z M319 0 H403 V"+r+" H319z";case"\u23A5":return"M263 0 H347 V"+r+" H263z M263 0 H347 V"+r+" H263z";case"\u23AA":return"M384 0 H504 V"+r+" H384z M384 0 H504 V"+r+" H384z";case"\u23D0":return"M312 0 H355 V"+r+" H312z M312 0 H355 V"+r+" H312z";case"\u2016":return"M257 0 H300 V"+r+" H257z M257 0 H300 V"+r+" H257z"+("M478 0 H521 V"+r+" H478z M478 0 H521 V"+r+" H478z");default:return""}},"innerPath"),jz={doubleleftarrow:`M262 157 l10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5 @@ -236,7 +236,7 @@ M93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z` c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199, -231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6 c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z -M500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z`},Tbe=o(function(e,r){switch(e){case"lbrack":return"M403 1759 V84 H666 V0 H319 V1759 v"+r+` v1759 h347 v-84 +M500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z`},Y4e=o(function(e,r){switch(e){case"lbrack":return"M403 1759 V84 H666 V0 H319 V1759 v"+r+` v1759 h347 v-84 H403z M403 1759 V0 H319 V1759 v`+r+" v1759 h84z";case"rbrack":return"M347 1759 V0 H0 V84 H263 V1759 v"+r+` v1759 H0 v84 H347z M347 1759 V0 H263 V1759 v`+r+" v1759 h84z";case"vert":return"M145 15 v585 v"+r+` v585 c2.667,10,9.667,15,21,15 c10,0,16.667,-5,20,-15 v-585 v`+-r+` v-585 c-2.667,-10,-9.667,-15,-21,-15 @@ -264,13 +264,13 @@ c-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6 c0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17 c242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558 l0,-`+(r+144)+`c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7, --470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z`;default:throw new Error("Unknown stretchy delimiter.")}},"tallDelim"),sd=class{static{o(this,"DocumentFragment")}constructor(e){this.children=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.children=e,this.classes=[],this.height=0,this.depth=0,this.maxFontSize=0,this.style={}}hasClass(e){return Jt.contains(this.classes,e)}toNode(){for(var e=document.createDocumentFragment(),r=0;rr.toText(),"toText");return this.children.map(e).join("")}},Ql={"AMS-Regular":{32:[0,0,0,0,.25],65:[0,.68889,0,0,.72222],66:[0,.68889,0,0,.66667],67:[0,.68889,0,0,.72222],68:[0,.68889,0,0,.72222],69:[0,.68889,0,0,.66667],70:[0,.68889,0,0,.61111],71:[0,.68889,0,0,.77778],72:[0,.68889,0,0,.77778],73:[0,.68889,0,0,.38889],74:[.16667,.68889,0,0,.5],75:[0,.68889,0,0,.77778],76:[0,.68889,0,0,.66667],77:[0,.68889,0,0,.94445],78:[0,.68889,0,0,.72222],79:[.16667,.68889,0,0,.77778],80:[0,.68889,0,0,.61111],81:[.16667,.68889,0,0,.77778],82:[0,.68889,0,0,.72222],83:[0,.68889,0,0,.55556],84:[0,.68889,0,0,.66667],85:[0,.68889,0,0,.72222],86:[0,.68889,0,0,.72222],87:[0,.68889,0,0,1],88:[0,.68889,0,0,.72222],89:[0,.68889,0,0,.72222],90:[0,.68889,0,0,.66667],107:[0,.68889,0,0,.55556],160:[0,0,0,0,.25],165:[0,.675,.025,0,.75],174:[.15559,.69224,0,0,.94666],240:[0,.68889,0,0,.55556],295:[0,.68889,0,0,.54028],710:[0,.825,0,0,2.33334],732:[0,.9,0,0,2.33334],770:[0,.825,0,0,2.33334],771:[0,.9,0,0,2.33334],989:[.08167,.58167,0,0,.77778],1008:[0,.43056,.04028,0,.66667],8245:[0,.54986,0,0,.275],8463:[0,.68889,0,0,.54028],8487:[0,.68889,0,0,.72222],8498:[0,.68889,0,0,.55556],8502:[0,.68889,0,0,.66667],8503:[0,.68889,0,0,.44445],8504:[0,.68889,0,0,.66667],8513:[0,.68889,0,0,.63889],8592:[-.03598,.46402,0,0,.5],8594:[-.03598,.46402,0,0,.5],8602:[-.13313,.36687,0,0,1],8603:[-.13313,.36687,0,0,1],8606:[.01354,.52239,0,0,1],8608:[.01354,.52239,0,0,1],8610:[.01354,.52239,0,0,1.11111],8611:[.01354,.52239,0,0,1.11111],8619:[0,.54986,0,0,1],8620:[0,.54986,0,0,1],8621:[-.13313,.37788,0,0,1.38889],8622:[-.13313,.36687,0,0,1],8624:[0,.69224,0,0,.5],8625:[0,.69224,0,0,.5],8630:[0,.43056,0,0,1],8631:[0,.43056,0,0,1],8634:[.08198,.58198,0,0,.77778],8635:[.08198,.58198,0,0,.77778],8638:[.19444,.69224,0,0,.41667],8639:[.19444,.69224,0,0,.41667],8642:[.19444,.69224,0,0,.41667],8643:[.19444,.69224,0,0,.41667],8644:[.1808,.675,0,0,1],8646:[.1808,.675,0,0,1],8647:[.1808,.675,0,0,1],8648:[.19444,.69224,0,0,.83334],8649:[.1808,.675,0,0,1],8650:[.19444,.69224,0,0,.83334],8651:[.01354,.52239,0,0,1],8652:[.01354,.52239,0,0,1],8653:[-.13313,.36687,0,0,1],8654:[-.13313,.36687,0,0,1],8655:[-.13313,.36687,0,0,1],8666:[.13667,.63667,0,0,1],8667:[.13667,.63667,0,0,1],8669:[-.13313,.37788,0,0,1],8672:[-.064,.437,0,0,1.334],8674:[-.064,.437,0,0,1.334],8705:[0,.825,0,0,.5],8708:[0,.68889,0,0,.55556],8709:[.08167,.58167,0,0,.77778],8717:[0,.43056,0,0,.42917],8722:[-.03598,.46402,0,0,.5],8724:[.08198,.69224,0,0,.77778],8726:[.08167,.58167,0,0,.77778],8733:[0,.69224,0,0,.77778],8736:[0,.69224,0,0,.72222],8737:[0,.69224,0,0,.72222],8738:[.03517,.52239,0,0,.72222],8739:[.08167,.58167,0,0,.22222],8740:[.25142,.74111,0,0,.27778],8741:[.08167,.58167,0,0,.38889],8742:[.25142,.74111,0,0,.5],8756:[0,.69224,0,0,.66667],8757:[0,.69224,0,0,.66667],8764:[-.13313,.36687,0,0,.77778],8765:[-.13313,.37788,0,0,.77778],8769:[-.13313,.36687,0,0,.77778],8770:[-.03625,.46375,0,0,.77778],8774:[.30274,.79383,0,0,.77778],8776:[-.01688,.48312,0,0,.77778],8778:[.08167,.58167,0,0,.77778],8782:[.06062,.54986,0,0,.77778],8783:[.06062,.54986,0,0,.77778],8785:[.08198,.58198,0,0,.77778],8786:[.08198,.58198,0,0,.77778],8787:[.08198,.58198,0,0,.77778],8790:[0,.69224,0,0,.77778],8791:[.22958,.72958,0,0,.77778],8796:[.08198,.91667,0,0,.77778],8806:[.25583,.75583,0,0,.77778],8807:[.25583,.75583,0,0,.77778],8808:[.25142,.75726,0,0,.77778],8809:[.25142,.75726,0,0,.77778],8812:[.25583,.75583,0,0,.5],8814:[.20576,.70576,0,0,.77778],8815:[.20576,.70576,0,0,.77778],8816:[.30274,.79383,0,0,.77778],8817:[.30274,.79383,0,0,.77778],8818:[.22958,.72958,0,0,.77778],8819:[.22958,.72958,0,0,.77778],8822:[.1808,.675,0,0,.77778],8823:[.1808,.675,0,0,.77778],8828:[.13667,.63667,0,0,.77778],8829:[.13667,.63667,0,0,.77778],8830:[.22958,.72958,0,0,.77778],8831:[.22958,.72958,0,0,.77778],8832:[.20576,.70576,0,0,.77778],8833:[.20576,.70576,0,0,.77778],8840:[.30274,.79383,0,0,.77778],8841:[.30274,.79383,0,0,.77778],8842:[.13597,.63597,0,0,.77778],8843:[.13597,.63597,0,0,.77778],8847:[.03517,.54986,0,0,.77778],8848:[.03517,.54986,0,0,.77778],8858:[.08198,.58198,0,0,.77778],8859:[.08198,.58198,0,0,.77778],8861:[.08198,.58198,0,0,.77778],8862:[0,.675,0,0,.77778],8863:[0,.675,0,0,.77778],8864:[0,.675,0,0,.77778],8865:[0,.675,0,0,.77778],8872:[0,.69224,0,0,.61111],8873:[0,.69224,0,0,.72222],8874:[0,.69224,0,0,.88889],8876:[0,.68889,0,0,.61111],8877:[0,.68889,0,0,.61111],8878:[0,.68889,0,0,.72222],8879:[0,.68889,0,0,.72222],8882:[.03517,.54986,0,0,.77778],8883:[.03517,.54986,0,0,.77778],8884:[.13667,.63667,0,0,.77778],8885:[.13667,.63667,0,0,.77778],8888:[0,.54986,0,0,1.11111],8890:[.19444,.43056,0,0,.55556],8891:[.19444,.69224,0,0,.61111],8892:[.19444,.69224,0,0,.61111],8901:[0,.54986,0,0,.27778],8903:[.08167,.58167,0,0,.77778],8905:[.08167,.58167,0,0,.77778],8906:[.08167,.58167,0,0,.77778],8907:[0,.69224,0,0,.77778],8908:[0,.69224,0,0,.77778],8909:[-.03598,.46402,0,0,.77778],8910:[0,.54986,0,0,.76042],8911:[0,.54986,0,0,.76042],8912:[.03517,.54986,0,0,.77778],8913:[.03517,.54986,0,0,.77778],8914:[0,.54986,0,0,.66667],8915:[0,.54986,0,0,.66667],8916:[0,.69224,0,0,.66667],8918:[.0391,.5391,0,0,.77778],8919:[.0391,.5391,0,0,.77778],8920:[.03517,.54986,0,0,1.33334],8921:[.03517,.54986,0,0,1.33334],8922:[.38569,.88569,0,0,.77778],8923:[.38569,.88569,0,0,.77778],8926:[.13667,.63667,0,0,.77778],8927:[.13667,.63667,0,0,.77778],8928:[.30274,.79383,0,0,.77778],8929:[.30274,.79383,0,0,.77778],8934:[.23222,.74111,0,0,.77778],8935:[.23222,.74111,0,0,.77778],8936:[.23222,.74111,0,0,.77778],8937:[.23222,.74111,0,0,.77778],8938:[.20576,.70576,0,0,.77778],8939:[.20576,.70576,0,0,.77778],8940:[.30274,.79383,0,0,.77778],8941:[.30274,.79383,0,0,.77778],8994:[.19444,.69224,0,0,.77778],8995:[.19444,.69224,0,0,.77778],9416:[.15559,.69224,0,0,.90222],9484:[0,.69224,0,0,.5],9488:[0,.69224,0,0,.5],9492:[0,.37788,0,0,.5],9496:[0,.37788,0,0,.5],9585:[.19444,.68889,0,0,.88889],9586:[.19444,.74111,0,0,.88889],9632:[0,.675,0,0,.77778],9633:[0,.675,0,0,.77778],9650:[0,.54986,0,0,.72222],9651:[0,.54986,0,0,.72222],9654:[.03517,.54986,0,0,.77778],9660:[0,.54986,0,0,.72222],9661:[0,.54986,0,0,.72222],9664:[.03517,.54986,0,0,.77778],9674:[.11111,.69224,0,0,.66667],9733:[.19444,.69224,0,0,.94445],10003:[0,.69224,0,0,.83334],10016:[0,.69224,0,0,.83334],10731:[.11111,.69224,0,0,.66667],10846:[.19444,.75583,0,0,.61111],10877:[.13667,.63667,0,0,.77778],10878:[.13667,.63667,0,0,.77778],10885:[.25583,.75583,0,0,.77778],10886:[.25583,.75583,0,0,.77778],10887:[.13597,.63597,0,0,.77778],10888:[.13597,.63597,0,0,.77778],10889:[.26167,.75726,0,0,.77778],10890:[.26167,.75726,0,0,.77778],10891:[.48256,.98256,0,0,.77778],10892:[.48256,.98256,0,0,.77778],10901:[.13667,.63667,0,0,.77778],10902:[.13667,.63667,0,0,.77778],10933:[.25142,.75726,0,0,.77778],10934:[.25142,.75726,0,0,.77778],10935:[.26167,.75726,0,0,.77778],10936:[.26167,.75726,0,0,.77778],10937:[.26167,.75726,0,0,.77778],10938:[.26167,.75726,0,0,.77778],10949:[.25583,.75583,0,0,.77778],10950:[.25583,.75583,0,0,.77778],10955:[.28481,.79383,0,0,.77778],10956:[.28481,.79383,0,0,.77778],57350:[.08167,.58167,0,0,.22222],57351:[.08167,.58167,0,0,.38889],57352:[.08167,.58167,0,0,.77778],57353:[0,.43056,.04028,0,.66667],57356:[.25142,.75726,0,0,.77778],57357:[.25142,.75726,0,0,.77778],57358:[.41951,.91951,0,0,.77778],57359:[.30274,.79383,0,0,.77778],57360:[.30274,.79383,0,0,.77778],57361:[.41951,.91951,0,0,.77778],57366:[.25142,.75726,0,0,.77778],57367:[.25142,.75726,0,0,.77778],57368:[.25142,.75726,0,0,.77778],57369:[.25142,.75726,0,0,.77778],57370:[.13597,.63597,0,0,.77778],57371:[.13597,.63597,0,0,.77778]},"Caligraphic-Regular":{32:[0,0,0,0,.25],65:[0,.68333,0,.19445,.79847],66:[0,.68333,.03041,.13889,.65681],67:[0,.68333,.05834,.13889,.52653],68:[0,.68333,.02778,.08334,.77139],69:[0,.68333,.08944,.11111,.52778],70:[0,.68333,.09931,.11111,.71875],71:[.09722,.68333,.0593,.11111,.59487],72:[0,.68333,.00965,.11111,.84452],73:[0,.68333,.07382,0,.54452],74:[.09722,.68333,.18472,.16667,.67778],75:[0,.68333,.01445,.05556,.76195],76:[0,.68333,0,.13889,.68972],77:[0,.68333,0,.13889,1.2009],78:[0,.68333,.14736,.08334,.82049],79:[0,.68333,.02778,.11111,.79611],80:[0,.68333,.08222,.08334,.69556],81:[.09722,.68333,0,.11111,.81667],82:[0,.68333,0,.08334,.8475],83:[0,.68333,.075,.13889,.60556],84:[0,.68333,.25417,0,.54464],85:[0,.68333,.09931,.08334,.62583],86:[0,.68333,.08222,0,.61278],87:[0,.68333,.08222,.08334,.98778],88:[0,.68333,.14643,.13889,.7133],89:[.09722,.68333,.08222,.08334,.66834],90:[0,.68333,.07944,.13889,.72473],160:[0,0,0,0,.25]},"Fraktur-Regular":{32:[0,0,0,0,.25],33:[0,.69141,0,0,.29574],34:[0,.69141,0,0,.21471],38:[0,.69141,0,0,.73786],39:[0,.69141,0,0,.21201],40:[.24982,.74947,0,0,.38865],41:[.24982,.74947,0,0,.38865],42:[0,.62119,0,0,.27764],43:[.08319,.58283,0,0,.75623],44:[0,.10803,0,0,.27764],45:[.08319,.58283,0,0,.75623],46:[0,.10803,0,0,.27764],47:[.24982,.74947,0,0,.50181],48:[0,.47534,0,0,.50181],49:[0,.47534,0,0,.50181],50:[0,.47534,0,0,.50181],51:[.18906,.47534,0,0,.50181],52:[.18906,.47534,0,0,.50181],53:[.18906,.47534,0,0,.50181],54:[0,.69141,0,0,.50181],55:[.18906,.47534,0,0,.50181],56:[0,.69141,0,0,.50181],57:[.18906,.47534,0,0,.50181],58:[0,.47534,0,0,.21606],59:[.12604,.47534,0,0,.21606],61:[-.13099,.36866,0,0,.75623],63:[0,.69141,0,0,.36245],65:[0,.69141,0,0,.7176],66:[0,.69141,0,0,.88397],67:[0,.69141,0,0,.61254],68:[0,.69141,0,0,.83158],69:[0,.69141,0,0,.66278],70:[.12604,.69141,0,0,.61119],71:[0,.69141,0,0,.78539],72:[.06302,.69141,0,0,.7203],73:[0,.69141,0,0,.55448],74:[.12604,.69141,0,0,.55231],75:[0,.69141,0,0,.66845],76:[0,.69141,0,0,.66602],77:[0,.69141,0,0,1.04953],78:[0,.69141,0,0,.83212],79:[0,.69141,0,0,.82699],80:[.18906,.69141,0,0,.82753],81:[.03781,.69141,0,0,.82699],82:[0,.69141,0,0,.82807],83:[0,.69141,0,0,.82861],84:[0,.69141,0,0,.66899],85:[0,.69141,0,0,.64576],86:[0,.69141,0,0,.83131],87:[0,.69141,0,0,1.04602],88:[0,.69141,0,0,.71922],89:[.18906,.69141,0,0,.83293],90:[.12604,.69141,0,0,.60201],91:[.24982,.74947,0,0,.27764],93:[.24982,.74947,0,0,.27764],94:[0,.69141,0,0,.49965],97:[0,.47534,0,0,.50046],98:[0,.69141,0,0,.51315],99:[0,.47534,0,0,.38946],100:[0,.62119,0,0,.49857],101:[0,.47534,0,0,.40053],102:[.18906,.69141,0,0,.32626],103:[.18906,.47534,0,0,.5037],104:[.18906,.69141,0,0,.52126],105:[0,.69141,0,0,.27899],106:[0,.69141,0,0,.28088],107:[0,.69141,0,0,.38946],108:[0,.69141,0,0,.27953],109:[0,.47534,0,0,.76676],110:[0,.47534,0,0,.52666],111:[0,.47534,0,0,.48885],112:[.18906,.52396,0,0,.50046],113:[.18906,.47534,0,0,.48912],114:[0,.47534,0,0,.38919],115:[0,.47534,0,0,.44266],116:[0,.62119,0,0,.33301],117:[0,.47534,0,0,.5172],118:[0,.52396,0,0,.5118],119:[0,.52396,0,0,.77351],120:[.18906,.47534,0,0,.38865],121:[.18906,.47534,0,0,.49884],122:[.18906,.47534,0,0,.39054],160:[0,0,0,0,.25],8216:[0,.69141,0,0,.21471],8217:[0,.69141,0,0,.21471],58112:[0,.62119,0,0,.49749],58113:[0,.62119,0,0,.4983],58114:[.18906,.69141,0,0,.33328],58115:[.18906,.69141,0,0,.32923],58116:[.18906,.47534,0,0,.50343],58117:[0,.69141,0,0,.33301],58118:[0,.62119,0,0,.33409],58119:[0,.47534,0,0,.50073]},"Main-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.35],34:[0,.69444,0,0,.60278],35:[.19444,.69444,0,0,.95833],36:[.05556,.75,0,0,.575],37:[.05556,.75,0,0,.95833],38:[0,.69444,0,0,.89444],39:[0,.69444,0,0,.31944],40:[.25,.75,0,0,.44722],41:[.25,.75,0,0,.44722],42:[0,.75,0,0,.575],43:[.13333,.63333,0,0,.89444],44:[.19444,.15556,0,0,.31944],45:[0,.44444,0,0,.38333],46:[0,.15556,0,0,.31944],47:[.25,.75,0,0,.575],48:[0,.64444,0,0,.575],49:[0,.64444,0,0,.575],50:[0,.64444,0,0,.575],51:[0,.64444,0,0,.575],52:[0,.64444,0,0,.575],53:[0,.64444,0,0,.575],54:[0,.64444,0,0,.575],55:[0,.64444,0,0,.575],56:[0,.64444,0,0,.575],57:[0,.64444,0,0,.575],58:[0,.44444,0,0,.31944],59:[.19444,.44444,0,0,.31944],60:[.08556,.58556,0,0,.89444],61:[-.10889,.39111,0,0,.89444],62:[.08556,.58556,0,0,.89444],63:[0,.69444,0,0,.54305],64:[0,.69444,0,0,.89444],65:[0,.68611,0,0,.86944],66:[0,.68611,0,0,.81805],67:[0,.68611,0,0,.83055],68:[0,.68611,0,0,.88194],69:[0,.68611,0,0,.75555],70:[0,.68611,0,0,.72361],71:[0,.68611,0,0,.90416],72:[0,.68611,0,0,.9],73:[0,.68611,0,0,.43611],74:[0,.68611,0,0,.59444],75:[0,.68611,0,0,.90138],76:[0,.68611,0,0,.69166],77:[0,.68611,0,0,1.09166],78:[0,.68611,0,0,.9],79:[0,.68611,0,0,.86388],80:[0,.68611,0,0,.78611],81:[.19444,.68611,0,0,.86388],82:[0,.68611,0,0,.8625],83:[0,.68611,0,0,.63889],84:[0,.68611,0,0,.8],85:[0,.68611,0,0,.88472],86:[0,.68611,.01597,0,.86944],87:[0,.68611,.01597,0,1.18888],88:[0,.68611,0,0,.86944],89:[0,.68611,.02875,0,.86944],90:[0,.68611,0,0,.70277],91:[.25,.75,0,0,.31944],92:[.25,.75,0,0,.575],93:[.25,.75,0,0,.31944],94:[0,.69444,0,0,.575],95:[.31,.13444,.03194,0,.575],97:[0,.44444,0,0,.55902],98:[0,.69444,0,0,.63889],99:[0,.44444,0,0,.51111],100:[0,.69444,0,0,.63889],101:[0,.44444,0,0,.52708],102:[0,.69444,.10903,0,.35139],103:[.19444,.44444,.01597,0,.575],104:[0,.69444,0,0,.63889],105:[0,.69444,0,0,.31944],106:[.19444,.69444,0,0,.35139],107:[0,.69444,0,0,.60694],108:[0,.69444,0,0,.31944],109:[0,.44444,0,0,.95833],110:[0,.44444,0,0,.63889],111:[0,.44444,0,0,.575],112:[.19444,.44444,0,0,.63889],113:[.19444,.44444,0,0,.60694],114:[0,.44444,0,0,.47361],115:[0,.44444,0,0,.45361],116:[0,.63492,0,0,.44722],117:[0,.44444,0,0,.63889],118:[0,.44444,.01597,0,.60694],119:[0,.44444,.01597,0,.83055],120:[0,.44444,0,0,.60694],121:[.19444,.44444,.01597,0,.60694],122:[0,.44444,0,0,.51111],123:[.25,.75,0,0,.575],124:[.25,.75,0,0,.31944],125:[.25,.75,0,0,.575],126:[.35,.34444,0,0,.575],160:[0,0,0,0,.25],163:[0,.69444,0,0,.86853],168:[0,.69444,0,0,.575],172:[0,.44444,0,0,.76666],176:[0,.69444,0,0,.86944],177:[.13333,.63333,0,0,.89444],184:[.17014,0,0,0,.51111],198:[0,.68611,0,0,1.04166],215:[.13333,.63333,0,0,.89444],216:[.04861,.73472,0,0,.89444],223:[0,.69444,0,0,.59722],230:[0,.44444,0,0,.83055],247:[.13333,.63333,0,0,.89444],248:[.09722,.54167,0,0,.575],305:[0,.44444,0,0,.31944],338:[0,.68611,0,0,1.16944],339:[0,.44444,0,0,.89444],567:[.19444,.44444,0,0,.35139],710:[0,.69444,0,0,.575],711:[0,.63194,0,0,.575],713:[0,.59611,0,0,.575],714:[0,.69444,0,0,.575],715:[0,.69444,0,0,.575],728:[0,.69444,0,0,.575],729:[0,.69444,0,0,.31944],730:[0,.69444,0,0,.86944],732:[0,.69444,0,0,.575],733:[0,.69444,0,0,.575],915:[0,.68611,0,0,.69166],916:[0,.68611,0,0,.95833],920:[0,.68611,0,0,.89444],923:[0,.68611,0,0,.80555],926:[0,.68611,0,0,.76666],928:[0,.68611,0,0,.9],931:[0,.68611,0,0,.83055],933:[0,.68611,0,0,.89444],934:[0,.68611,0,0,.83055],936:[0,.68611,0,0,.89444],937:[0,.68611,0,0,.83055],8211:[0,.44444,.03194,0,.575],8212:[0,.44444,.03194,0,1.14999],8216:[0,.69444,0,0,.31944],8217:[0,.69444,0,0,.31944],8220:[0,.69444,0,0,.60278],8221:[0,.69444,0,0,.60278],8224:[.19444,.69444,0,0,.51111],8225:[.19444,.69444,0,0,.51111],8242:[0,.55556,0,0,.34444],8407:[0,.72444,.15486,0,.575],8463:[0,.69444,0,0,.66759],8465:[0,.69444,0,0,.83055],8467:[0,.69444,0,0,.47361],8472:[.19444,.44444,0,0,.74027],8476:[0,.69444,0,0,.83055],8501:[0,.69444,0,0,.70277],8592:[-.10889,.39111,0,0,1.14999],8593:[.19444,.69444,0,0,.575],8594:[-.10889,.39111,0,0,1.14999],8595:[.19444,.69444,0,0,.575],8596:[-.10889,.39111,0,0,1.14999],8597:[.25,.75,0,0,.575],8598:[.19444,.69444,0,0,1.14999],8599:[.19444,.69444,0,0,1.14999],8600:[.19444,.69444,0,0,1.14999],8601:[.19444,.69444,0,0,1.14999],8636:[-.10889,.39111,0,0,1.14999],8637:[-.10889,.39111,0,0,1.14999],8640:[-.10889,.39111,0,0,1.14999],8641:[-.10889,.39111,0,0,1.14999],8656:[-.10889,.39111,0,0,1.14999],8657:[.19444,.69444,0,0,.70277],8658:[-.10889,.39111,0,0,1.14999],8659:[.19444,.69444,0,0,.70277],8660:[-.10889,.39111,0,0,1.14999],8661:[.25,.75,0,0,.70277],8704:[0,.69444,0,0,.63889],8706:[0,.69444,.06389,0,.62847],8707:[0,.69444,0,0,.63889],8709:[.05556,.75,0,0,.575],8711:[0,.68611,0,0,.95833],8712:[.08556,.58556,0,0,.76666],8715:[.08556,.58556,0,0,.76666],8722:[.13333,.63333,0,0,.89444],8723:[.13333,.63333,0,0,.89444],8725:[.25,.75,0,0,.575],8726:[.25,.75,0,0,.575],8727:[-.02778,.47222,0,0,.575],8728:[-.02639,.47361,0,0,.575],8729:[-.02639,.47361,0,0,.575],8730:[.18,.82,0,0,.95833],8733:[0,.44444,0,0,.89444],8734:[0,.44444,0,0,1.14999],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.31944],8741:[.25,.75,0,0,.575],8743:[0,.55556,0,0,.76666],8744:[0,.55556,0,0,.76666],8745:[0,.55556,0,0,.76666],8746:[0,.55556,0,0,.76666],8747:[.19444,.69444,.12778,0,.56875],8764:[-.10889,.39111,0,0,.89444],8768:[.19444,.69444,0,0,.31944],8771:[.00222,.50222,0,0,.89444],8773:[.027,.638,0,0,.894],8776:[.02444,.52444,0,0,.89444],8781:[.00222,.50222,0,0,.89444],8801:[.00222,.50222,0,0,.89444],8804:[.19667,.69667,0,0,.89444],8805:[.19667,.69667,0,0,.89444],8810:[.08556,.58556,0,0,1.14999],8811:[.08556,.58556,0,0,1.14999],8826:[.08556,.58556,0,0,.89444],8827:[.08556,.58556,0,0,.89444],8834:[.08556,.58556,0,0,.89444],8835:[.08556,.58556,0,0,.89444],8838:[.19667,.69667,0,0,.89444],8839:[.19667,.69667,0,0,.89444],8846:[0,.55556,0,0,.76666],8849:[.19667,.69667,0,0,.89444],8850:[.19667,.69667,0,0,.89444],8851:[0,.55556,0,0,.76666],8852:[0,.55556,0,0,.76666],8853:[.13333,.63333,0,0,.89444],8854:[.13333,.63333,0,0,.89444],8855:[.13333,.63333,0,0,.89444],8856:[.13333,.63333,0,0,.89444],8857:[.13333,.63333,0,0,.89444],8866:[0,.69444,0,0,.70277],8867:[0,.69444,0,0,.70277],8868:[0,.69444,0,0,.89444],8869:[0,.69444,0,0,.89444],8900:[-.02639,.47361,0,0,.575],8901:[-.02639,.47361,0,0,.31944],8902:[-.02778,.47222,0,0,.575],8968:[.25,.75,0,0,.51111],8969:[.25,.75,0,0,.51111],8970:[.25,.75,0,0,.51111],8971:[.25,.75,0,0,.51111],8994:[-.13889,.36111,0,0,1.14999],8995:[-.13889,.36111,0,0,1.14999],9651:[.19444,.69444,0,0,1.02222],9657:[-.02778,.47222,0,0,.575],9661:[.19444,.69444,0,0,1.02222],9667:[-.02778,.47222,0,0,.575],9711:[.19444,.69444,0,0,1.14999],9824:[.12963,.69444,0,0,.89444],9825:[.12963,.69444,0,0,.89444],9826:[.12963,.69444,0,0,.89444],9827:[.12963,.69444,0,0,.89444],9837:[0,.75,0,0,.44722],9838:[.19444,.69444,0,0,.44722],9839:[.19444,.69444,0,0,.44722],10216:[.25,.75,0,0,.44722],10217:[.25,.75,0,0,.44722],10815:[0,.68611,0,0,.9],10927:[.19667,.69667,0,0,.89444],10928:[.19667,.69667,0,0,.89444],57376:[.19444,.69444,0,0,0]},"Main-BoldItalic":{32:[0,0,0,0,.25],33:[0,.69444,.11417,0,.38611],34:[0,.69444,.07939,0,.62055],35:[.19444,.69444,.06833,0,.94444],37:[.05556,.75,.12861,0,.94444],38:[0,.69444,.08528,0,.88555],39:[0,.69444,.12945,0,.35555],40:[.25,.75,.15806,0,.47333],41:[.25,.75,.03306,0,.47333],42:[0,.75,.14333,0,.59111],43:[.10333,.60333,.03306,0,.88555],44:[.19444,.14722,0,0,.35555],45:[0,.44444,.02611,0,.41444],46:[0,.14722,0,0,.35555],47:[.25,.75,.15806,0,.59111],48:[0,.64444,.13167,0,.59111],49:[0,.64444,.13167,0,.59111],50:[0,.64444,.13167,0,.59111],51:[0,.64444,.13167,0,.59111],52:[.19444,.64444,.13167,0,.59111],53:[0,.64444,.13167,0,.59111],54:[0,.64444,.13167,0,.59111],55:[.19444,.64444,.13167,0,.59111],56:[0,.64444,.13167,0,.59111],57:[0,.64444,.13167,0,.59111],58:[0,.44444,.06695,0,.35555],59:[.19444,.44444,.06695,0,.35555],61:[-.10889,.39111,.06833,0,.88555],63:[0,.69444,.11472,0,.59111],64:[0,.69444,.09208,0,.88555],65:[0,.68611,0,0,.86555],66:[0,.68611,.0992,0,.81666],67:[0,.68611,.14208,0,.82666],68:[0,.68611,.09062,0,.87555],69:[0,.68611,.11431,0,.75666],70:[0,.68611,.12903,0,.72722],71:[0,.68611,.07347,0,.89527],72:[0,.68611,.17208,0,.8961],73:[0,.68611,.15681,0,.47166],74:[0,.68611,.145,0,.61055],75:[0,.68611,.14208,0,.89499],76:[0,.68611,0,0,.69777],77:[0,.68611,.17208,0,1.07277],78:[0,.68611,.17208,0,.8961],79:[0,.68611,.09062,0,.85499],80:[0,.68611,.0992,0,.78721],81:[.19444,.68611,.09062,0,.85499],82:[0,.68611,.02559,0,.85944],83:[0,.68611,.11264,0,.64999],84:[0,.68611,.12903,0,.7961],85:[0,.68611,.17208,0,.88083],86:[0,.68611,.18625,0,.86555],87:[0,.68611,.18625,0,1.15999],88:[0,.68611,.15681,0,.86555],89:[0,.68611,.19803,0,.86555],90:[0,.68611,.14208,0,.70888],91:[.25,.75,.1875,0,.35611],93:[.25,.75,.09972,0,.35611],94:[0,.69444,.06709,0,.59111],95:[.31,.13444,.09811,0,.59111],97:[0,.44444,.09426,0,.59111],98:[0,.69444,.07861,0,.53222],99:[0,.44444,.05222,0,.53222],100:[0,.69444,.10861,0,.59111],101:[0,.44444,.085,0,.53222],102:[.19444,.69444,.21778,0,.4],103:[.19444,.44444,.105,0,.53222],104:[0,.69444,.09426,0,.59111],105:[0,.69326,.11387,0,.35555],106:[.19444,.69326,.1672,0,.35555],107:[0,.69444,.11111,0,.53222],108:[0,.69444,.10861,0,.29666],109:[0,.44444,.09426,0,.94444],110:[0,.44444,.09426,0,.64999],111:[0,.44444,.07861,0,.59111],112:[.19444,.44444,.07861,0,.59111],113:[.19444,.44444,.105,0,.53222],114:[0,.44444,.11111,0,.50167],115:[0,.44444,.08167,0,.48694],116:[0,.63492,.09639,0,.385],117:[0,.44444,.09426,0,.62055],118:[0,.44444,.11111,0,.53222],119:[0,.44444,.11111,0,.76777],120:[0,.44444,.12583,0,.56055],121:[.19444,.44444,.105,0,.56166],122:[0,.44444,.13889,0,.49055],126:[.35,.34444,.11472,0,.59111],160:[0,0,0,0,.25],168:[0,.69444,.11473,0,.59111],176:[0,.69444,0,0,.94888],184:[.17014,0,0,0,.53222],198:[0,.68611,.11431,0,1.02277],216:[.04861,.73472,.09062,0,.88555],223:[.19444,.69444,.09736,0,.665],230:[0,.44444,.085,0,.82666],248:[.09722,.54167,.09458,0,.59111],305:[0,.44444,.09426,0,.35555],338:[0,.68611,.11431,0,1.14054],339:[0,.44444,.085,0,.82666],567:[.19444,.44444,.04611,0,.385],710:[0,.69444,.06709,0,.59111],711:[0,.63194,.08271,0,.59111],713:[0,.59444,.10444,0,.59111],714:[0,.69444,.08528,0,.59111],715:[0,.69444,0,0,.59111],728:[0,.69444,.10333,0,.59111],729:[0,.69444,.12945,0,.35555],730:[0,.69444,0,0,.94888],732:[0,.69444,.11472,0,.59111],733:[0,.69444,.11472,0,.59111],915:[0,.68611,.12903,0,.69777],916:[0,.68611,0,0,.94444],920:[0,.68611,.09062,0,.88555],923:[0,.68611,0,0,.80666],926:[0,.68611,.15092,0,.76777],928:[0,.68611,.17208,0,.8961],931:[0,.68611,.11431,0,.82666],933:[0,.68611,.10778,0,.88555],934:[0,.68611,.05632,0,.82666],936:[0,.68611,.10778,0,.88555],937:[0,.68611,.0992,0,.82666],8211:[0,.44444,.09811,0,.59111],8212:[0,.44444,.09811,0,1.18221],8216:[0,.69444,.12945,0,.35555],8217:[0,.69444,.12945,0,.35555],8220:[0,.69444,.16772,0,.62055],8221:[0,.69444,.07939,0,.62055]},"Main-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.12417,0,.30667],34:[0,.69444,.06961,0,.51444],35:[.19444,.69444,.06616,0,.81777],37:[.05556,.75,.13639,0,.81777],38:[0,.69444,.09694,0,.76666],39:[0,.69444,.12417,0,.30667],40:[.25,.75,.16194,0,.40889],41:[.25,.75,.03694,0,.40889],42:[0,.75,.14917,0,.51111],43:[.05667,.56167,.03694,0,.76666],44:[.19444,.10556,0,0,.30667],45:[0,.43056,.02826,0,.35778],46:[0,.10556,0,0,.30667],47:[.25,.75,.16194,0,.51111],48:[0,.64444,.13556,0,.51111],49:[0,.64444,.13556,0,.51111],50:[0,.64444,.13556,0,.51111],51:[0,.64444,.13556,0,.51111],52:[.19444,.64444,.13556,0,.51111],53:[0,.64444,.13556,0,.51111],54:[0,.64444,.13556,0,.51111],55:[.19444,.64444,.13556,0,.51111],56:[0,.64444,.13556,0,.51111],57:[0,.64444,.13556,0,.51111],58:[0,.43056,.0582,0,.30667],59:[.19444,.43056,.0582,0,.30667],61:[-.13313,.36687,.06616,0,.76666],63:[0,.69444,.1225,0,.51111],64:[0,.69444,.09597,0,.76666],65:[0,.68333,0,0,.74333],66:[0,.68333,.10257,0,.70389],67:[0,.68333,.14528,0,.71555],68:[0,.68333,.09403,0,.755],69:[0,.68333,.12028,0,.67833],70:[0,.68333,.13305,0,.65277],71:[0,.68333,.08722,0,.77361],72:[0,.68333,.16389,0,.74333],73:[0,.68333,.15806,0,.38555],74:[0,.68333,.14028,0,.525],75:[0,.68333,.14528,0,.76888],76:[0,.68333,0,0,.62722],77:[0,.68333,.16389,0,.89666],78:[0,.68333,.16389,0,.74333],79:[0,.68333,.09403,0,.76666],80:[0,.68333,.10257,0,.67833],81:[.19444,.68333,.09403,0,.76666],82:[0,.68333,.03868,0,.72944],83:[0,.68333,.11972,0,.56222],84:[0,.68333,.13305,0,.71555],85:[0,.68333,.16389,0,.74333],86:[0,.68333,.18361,0,.74333],87:[0,.68333,.18361,0,.99888],88:[0,.68333,.15806,0,.74333],89:[0,.68333,.19383,0,.74333],90:[0,.68333,.14528,0,.61333],91:[.25,.75,.1875,0,.30667],93:[.25,.75,.10528,0,.30667],94:[0,.69444,.06646,0,.51111],95:[.31,.12056,.09208,0,.51111],97:[0,.43056,.07671,0,.51111],98:[0,.69444,.06312,0,.46],99:[0,.43056,.05653,0,.46],100:[0,.69444,.10333,0,.51111],101:[0,.43056,.07514,0,.46],102:[.19444,.69444,.21194,0,.30667],103:[.19444,.43056,.08847,0,.46],104:[0,.69444,.07671,0,.51111],105:[0,.65536,.1019,0,.30667],106:[.19444,.65536,.14467,0,.30667],107:[0,.69444,.10764,0,.46],108:[0,.69444,.10333,0,.25555],109:[0,.43056,.07671,0,.81777],110:[0,.43056,.07671,0,.56222],111:[0,.43056,.06312,0,.51111],112:[.19444,.43056,.06312,0,.51111],113:[.19444,.43056,.08847,0,.46],114:[0,.43056,.10764,0,.42166],115:[0,.43056,.08208,0,.40889],116:[0,.61508,.09486,0,.33222],117:[0,.43056,.07671,0,.53666],118:[0,.43056,.10764,0,.46],119:[0,.43056,.10764,0,.66444],120:[0,.43056,.12042,0,.46389],121:[.19444,.43056,.08847,0,.48555],122:[0,.43056,.12292,0,.40889],126:[.35,.31786,.11585,0,.51111],160:[0,0,0,0,.25],168:[0,.66786,.10474,0,.51111],176:[0,.69444,0,0,.83129],184:[.17014,0,0,0,.46],198:[0,.68333,.12028,0,.88277],216:[.04861,.73194,.09403,0,.76666],223:[.19444,.69444,.10514,0,.53666],230:[0,.43056,.07514,0,.71555],248:[.09722,.52778,.09194,0,.51111],338:[0,.68333,.12028,0,.98499],339:[0,.43056,.07514,0,.71555],710:[0,.69444,.06646,0,.51111],711:[0,.62847,.08295,0,.51111],713:[0,.56167,.10333,0,.51111],714:[0,.69444,.09694,0,.51111],715:[0,.69444,0,0,.51111],728:[0,.69444,.10806,0,.51111],729:[0,.66786,.11752,0,.30667],730:[0,.69444,0,0,.83129],732:[0,.66786,.11585,0,.51111],733:[0,.69444,.1225,0,.51111],915:[0,.68333,.13305,0,.62722],916:[0,.68333,0,0,.81777],920:[0,.68333,.09403,0,.76666],923:[0,.68333,0,0,.69222],926:[0,.68333,.15294,0,.66444],928:[0,.68333,.16389,0,.74333],931:[0,.68333,.12028,0,.71555],933:[0,.68333,.11111,0,.76666],934:[0,.68333,.05986,0,.71555],936:[0,.68333,.11111,0,.76666],937:[0,.68333,.10257,0,.71555],8211:[0,.43056,.09208,0,.51111],8212:[0,.43056,.09208,0,1.02222],8216:[0,.69444,.12417,0,.30667],8217:[0,.69444,.12417,0,.30667],8220:[0,.69444,.1685,0,.51444],8221:[0,.69444,.06961,0,.51444],8463:[0,.68889,0,0,.54028]},"Main-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.27778],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.77778],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.19444,.10556,0,0,.27778],45:[0,.43056,0,0,.33333],46:[0,.10556,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.64444,0,0,.5],49:[0,.64444,0,0,.5],50:[0,.64444,0,0,.5],51:[0,.64444,0,0,.5],52:[0,.64444,0,0,.5],53:[0,.64444,0,0,.5],54:[0,.64444,0,0,.5],55:[0,.64444,0,0,.5],56:[0,.64444,0,0,.5],57:[0,.64444,0,0,.5],58:[0,.43056,0,0,.27778],59:[.19444,.43056,0,0,.27778],60:[.0391,.5391,0,0,.77778],61:[-.13313,.36687,0,0,.77778],62:[.0391,.5391,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.77778],65:[0,.68333,0,0,.75],66:[0,.68333,0,0,.70834],67:[0,.68333,0,0,.72222],68:[0,.68333,0,0,.76389],69:[0,.68333,0,0,.68056],70:[0,.68333,0,0,.65278],71:[0,.68333,0,0,.78472],72:[0,.68333,0,0,.75],73:[0,.68333,0,0,.36111],74:[0,.68333,0,0,.51389],75:[0,.68333,0,0,.77778],76:[0,.68333,0,0,.625],77:[0,.68333,0,0,.91667],78:[0,.68333,0,0,.75],79:[0,.68333,0,0,.77778],80:[0,.68333,0,0,.68056],81:[.19444,.68333,0,0,.77778],82:[0,.68333,0,0,.73611],83:[0,.68333,0,0,.55556],84:[0,.68333,0,0,.72222],85:[0,.68333,0,0,.75],86:[0,.68333,.01389,0,.75],87:[0,.68333,.01389,0,1.02778],88:[0,.68333,0,0,.75],89:[0,.68333,.025,0,.75],90:[0,.68333,0,0,.61111],91:[.25,.75,0,0,.27778],92:[.25,.75,0,0,.5],93:[.25,.75,0,0,.27778],94:[0,.69444,0,0,.5],95:[.31,.12056,.02778,0,.5],97:[0,.43056,0,0,.5],98:[0,.69444,0,0,.55556],99:[0,.43056,0,0,.44445],100:[0,.69444,0,0,.55556],101:[0,.43056,0,0,.44445],102:[0,.69444,.07778,0,.30556],103:[.19444,.43056,.01389,0,.5],104:[0,.69444,0,0,.55556],105:[0,.66786,0,0,.27778],106:[.19444,.66786,0,0,.30556],107:[0,.69444,0,0,.52778],108:[0,.69444,0,0,.27778],109:[0,.43056,0,0,.83334],110:[0,.43056,0,0,.55556],111:[0,.43056,0,0,.5],112:[.19444,.43056,0,0,.55556],113:[.19444,.43056,0,0,.52778],114:[0,.43056,0,0,.39167],115:[0,.43056,0,0,.39445],116:[0,.61508,0,0,.38889],117:[0,.43056,0,0,.55556],118:[0,.43056,.01389,0,.52778],119:[0,.43056,.01389,0,.72222],120:[0,.43056,0,0,.52778],121:[.19444,.43056,.01389,0,.52778],122:[0,.43056,0,0,.44445],123:[.25,.75,0,0,.5],124:[.25,.75,0,0,.27778],125:[.25,.75,0,0,.5],126:[.35,.31786,0,0,.5],160:[0,0,0,0,.25],163:[0,.69444,0,0,.76909],167:[.19444,.69444,0,0,.44445],168:[0,.66786,0,0,.5],172:[0,.43056,0,0,.66667],176:[0,.69444,0,0,.75],177:[.08333,.58333,0,0,.77778],182:[.19444,.69444,0,0,.61111],184:[.17014,0,0,0,.44445],198:[0,.68333,0,0,.90278],215:[.08333,.58333,0,0,.77778],216:[.04861,.73194,0,0,.77778],223:[0,.69444,0,0,.5],230:[0,.43056,0,0,.72222],247:[.08333,.58333,0,0,.77778],248:[.09722,.52778,0,0,.5],305:[0,.43056,0,0,.27778],338:[0,.68333,0,0,1.01389],339:[0,.43056,0,0,.77778],567:[.19444,.43056,0,0,.30556],710:[0,.69444,0,0,.5],711:[0,.62847,0,0,.5],713:[0,.56778,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.66786,0,0,.27778],730:[0,.69444,0,0,.75],732:[0,.66786,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.68333,0,0,.625],916:[0,.68333,0,0,.83334],920:[0,.68333,0,0,.77778],923:[0,.68333,0,0,.69445],926:[0,.68333,0,0,.66667],928:[0,.68333,0,0,.75],931:[0,.68333,0,0,.72222],933:[0,.68333,0,0,.77778],934:[0,.68333,0,0,.72222],936:[0,.68333,0,0,.77778],937:[0,.68333,0,0,.72222],8211:[0,.43056,.02778,0,.5],8212:[0,.43056,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5],8224:[.19444,.69444,0,0,.44445],8225:[.19444,.69444,0,0,.44445],8230:[0,.123,0,0,1.172],8242:[0,.55556,0,0,.275],8407:[0,.71444,.15382,0,.5],8463:[0,.68889,0,0,.54028],8465:[0,.69444,0,0,.72222],8467:[0,.69444,0,.11111,.41667],8472:[.19444,.43056,0,.11111,.63646],8476:[0,.69444,0,0,.72222],8501:[0,.69444,0,0,.61111],8592:[-.13313,.36687,0,0,1],8593:[.19444,.69444,0,0,.5],8594:[-.13313,.36687,0,0,1],8595:[.19444,.69444,0,0,.5],8596:[-.13313,.36687,0,0,1],8597:[.25,.75,0,0,.5],8598:[.19444,.69444,0,0,1],8599:[.19444,.69444,0,0,1],8600:[.19444,.69444,0,0,1],8601:[.19444,.69444,0,0,1],8614:[.011,.511,0,0,1],8617:[.011,.511,0,0,1.126],8618:[.011,.511,0,0,1.126],8636:[-.13313,.36687,0,0,1],8637:[-.13313,.36687,0,0,1],8640:[-.13313,.36687,0,0,1],8641:[-.13313,.36687,0,0,1],8652:[.011,.671,0,0,1],8656:[-.13313,.36687,0,0,1],8657:[.19444,.69444,0,0,.61111],8658:[-.13313,.36687,0,0,1],8659:[.19444,.69444,0,0,.61111],8660:[-.13313,.36687,0,0,1],8661:[.25,.75,0,0,.61111],8704:[0,.69444,0,0,.55556],8706:[0,.69444,.05556,.08334,.5309],8707:[0,.69444,0,0,.55556],8709:[.05556,.75,0,0,.5],8711:[0,.68333,0,0,.83334],8712:[.0391,.5391,0,0,.66667],8715:[.0391,.5391,0,0,.66667],8722:[.08333,.58333,0,0,.77778],8723:[.08333,.58333,0,0,.77778],8725:[.25,.75,0,0,.5],8726:[.25,.75,0,0,.5],8727:[-.03472,.46528,0,0,.5],8728:[-.05555,.44445,0,0,.5],8729:[-.05555,.44445,0,0,.5],8730:[.2,.8,0,0,.83334],8733:[0,.43056,0,0,.77778],8734:[0,.43056,0,0,1],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.27778],8741:[.25,.75,0,0,.5],8743:[0,.55556,0,0,.66667],8744:[0,.55556,0,0,.66667],8745:[0,.55556,0,0,.66667],8746:[0,.55556,0,0,.66667],8747:[.19444,.69444,.11111,0,.41667],8764:[-.13313,.36687,0,0,.77778],8768:[.19444,.69444,0,0,.27778],8771:[-.03625,.46375,0,0,.77778],8773:[-.022,.589,0,0,.778],8776:[-.01688,.48312,0,0,.77778],8781:[-.03625,.46375,0,0,.77778],8784:[-.133,.673,0,0,.778],8801:[-.03625,.46375,0,0,.77778],8804:[.13597,.63597,0,0,.77778],8805:[.13597,.63597,0,0,.77778],8810:[.0391,.5391,0,0,1],8811:[.0391,.5391,0,0,1],8826:[.0391,.5391,0,0,.77778],8827:[.0391,.5391,0,0,.77778],8834:[.0391,.5391,0,0,.77778],8835:[.0391,.5391,0,0,.77778],8838:[.13597,.63597,0,0,.77778],8839:[.13597,.63597,0,0,.77778],8846:[0,.55556,0,0,.66667],8849:[.13597,.63597,0,0,.77778],8850:[.13597,.63597,0,0,.77778],8851:[0,.55556,0,0,.66667],8852:[0,.55556,0,0,.66667],8853:[.08333,.58333,0,0,.77778],8854:[.08333,.58333,0,0,.77778],8855:[.08333,.58333,0,0,.77778],8856:[.08333,.58333,0,0,.77778],8857:[.08333,.58333,0,0,.77778],8866:[0,.69444,0,0,.61111],8867:[0,.69444,0,0,.61111],8868:[0,.69444,0,0,.77778],8869:[0,.69444,0,0,.77778],8872:[.249,.75,0,0,.867],8900:[-.05555,.44445,0,0,.5],8901:[-.05555,.44445,0,0,.27778],8902:[-.03472,.46528,0,0,.5],8904:[.005,.505,0,0,.9],8942:[.03,.903,0,0,.278],8943:[-.19,.313,0,0,1.172],8945:[-.1,.823,0,0,1.282],8968:[.25,.75,0,0,.44445],8969:[.25,.75,0,0,.44445],8970:[.25,.75,0,0,.44445],8971:[.25,.75,0,0,.44445],8994:[-.14236,.35764,0,0,1],8995:[-.14236,.35764,0,0,1],9136:[.244,.744,0,0,.412],9137:[.244,.745,0,0,.412],9651:[.19444,.69444,0,0,.88889],9657:[-.03472,.46528,0,0,.5],9661:[.19444,.69444,0,0,.88889],9667:[-.03472,.46528,0,0,.5],9711:[.19444,.69444,0,0,1],9824:[.12963,.69444,0,0,.77778],9825:[.12963,.69444,0,0,.77778],9826:[.12963,.69444,0,0,.77778],9827:[.12963,.69444,0,0,.77778],9837:[0,.75,0,0,.38889],9838:[.19444,.69444,0,0,.38889],9839:[.19444,.69444,0,0,.38889],10216:[.25,.75,0,0,.38889],10217:[.25,.75,0,0,.38889],10222:[.244,.744,0,0,.412],10223:[.244,.745,0,0,.412],10229:[.011,.511,0,0,1.609],10230:[.011,.511,0,0,1.638],10231:[.011,.511,0,0,1.859],10232:[.024,.525,0,0,1.609],10233:[.024,.525,0,0,1.638],10234:[.024,.525,0,0,1.858],10236:[.011,.511,0,0,1.638],10815:[0,.68333,0,0,.75],10927:[.13597,.63597,0,0,.77778],10928:[.13597,.63597,0,0,.77778],57376:[.19444,.69444,0,0,0]},"Math-BoldItalic":{32:[0,0,0,0,.25],48:[0,.44444,0,0,.575],49:[0,.44444,0,0,.575],50:[0,.44444,0,0,.575],51:[.19444,.44444,0,0,.575],52:[.19444,.44444,0,0,.575],53:[.19444,.44444,0,0,.575],54:[0,.64444,0,0,.575],55:[.19444,.44444,0,0,.575],56:[0,.64444,0,0,.575],57:[.19444,.44444,0,0,.575],65:[0,.68611,0,0,.86944],66:[0,.68611,.04835,0,.8664],67:[0,.68611,.06979,0,.81694],68:[0,.68611,.03194,0,.93812],69:[0,.68611,.05451,0,.81007],70:[0,.68611,.15972,0,.68889],71:[0,.68611,0,0,.88673],72:[0,.68611,.08229,0,.98229],73:[0,.68611,.07778,0,.51111],74:[0,.68611,.10069,0,.63125],75:[0,.68611,.06979,0,.97118],76:[0,.68611,0,0,.75555],77:[0,.68611,.11424,0,1.14201],78:[0,.68611,.11424,0,.95034],79:[0,.68611,.03194,0,.83666],80:[0,.68611,.15972,0,.72309],81:[.19444,.68611,0,0,.86861],82:[0,.68611,.00421,0,.87235],83:[0,.68611,.05382,0,.69271],84:[0,.68611,.15972,0,.63663],85:[0,.68611,.11424,0,.80027],86:[0,.68611,.25555,0,.67778],87:[0,.68611,.15972,0,1.09305],88:[0,.68611,.07778,0,.94722],89:[0,.68611,.25555,0,.67458],90:[0,.68611,.06979,0,.77257],97:[0,.44444,0,0,.63287],98:[0,.69444,0,0,.52083],99:[0,.44444,0,0,.51342],100:[0,.69444,0,0,.60972],101:[0,.44444,0,0,.55361],102:[.19444,.69444,.11042,0,.56806],103:[.19444,.44444,.03704,0,.5449],104:[0,.69444,0,0,.66759],105:[0,.69326,0,0,.4048],106:[.19444,.69326,.0622,0,.47083],107:[0,.69444,.01852,0,.6037],108:[0,.69444,.0088,0,.34815],109:[0,.44444,0,0,1.0324],110:[0,.44444,0,0,.71296],111:[0,.44444,0,0,.58472],112:[.19444,.44444,0,0,.60092],113:[.19444,.44444,.03704,0,.54213],114:[0,.44444,.03194,0,.5287],115:[0,.44444,0,0,.53125],116:[0,.63492,0,0,.41528],117:[0,.44444,0,0,.68102],118:[0,.44444,.03704,0,.56666],119:[0,.44444,.02778,0,.83148],120:[0,.44444,0,0,.65903],121:[.19444,.44444,.03704,0,.59028],122:[0,.44444,.04213,0,.55509],160:[0,0,0,0,.25],915:[0,.68611,.15972,0,.65694],916:[0,.68611,0,0,.95833],920:[0,.68611,.03194,0,.86722],923:[0,.68611,0,0,.80555],926:[0,.68611,.07458,0,.84125],928:[0,.68611,.08229,0,.98229],931:[0,.68611,.05451,0,.88507],933:[0,.68611,.15972,0,.67083],934:[0,.68611,0,0,.76666],936:[0,.68611,.11653,0,.71402],937:[0,.68611,.04835,0,.8789],945:[0,.44444,0,0,.76064],946:[.19444,.69444,.03403,0,.65972],947:[.19444,.44444,.06389,0,.59003],948:[0,.69444,.03819,0,.52222],949:[0,.44444,0,0,.52882],950:[.19444,.69444,.06215,0,.50833],951:[.19444,.44444,.03704,0,.6],952:[0,.69444,.03194,0,.5618],953:[0,.44444,0,0,.41204],954:[0,.44444,0,0,.66759],955:[0,.69444,0,0,.67083],956:[.19444,.44444,0,0,.70787],957:[0,.44444,.06898,0,.57685],958:[.19444,.69444,.03021,0,.50833],959:[0,.44444,0,0,.58472],960:[0,.44444,.03704,0,.68241],961:[.19444,.44444,0,0,.6118],962:[.09722,.44444,.07917,0,.42361],963:[0,.44444,.03704,0,.68588],964:[0,.44444,.13472,0,.52083],965:[0,.44444,.03704,0,.63055],966:[.19444,.44444,0,0,.74722],967:[.19444,.44444,0,0,.71805],968:[.19444,.69444,.03704,0,.75833],969:[0,.44444,.03704,0,.71782],977:[0,.69444,0,0,.69155],981:[.19444,.69444,0,0,.7125],982:[0,.44444,.03194,0,.975],1009:[.19444,.44444,0,0,.6118],1013:[0,.44444,0,0,.48333],57649:[0,.44444,0,0,.39352],57911:[.19444,.44444,0,0,.43889]},"Math-Italic":{32:[0,0,0,0,.25],48:[0,.43056,0,0,.5],49:[0,.43056,0,0,.5],50:[0,.43056,0,0,.5],51:[.19444,.43056,0,0,.5],52:[.19444,.43056,0,0,.5],53:[.19444,.43056,0,0,.5],54:[0,.64444,0,0,.5],55:[.19444,.43056,0,0,.5],56:[0,.64444,0,0,.5],57:[.19444,.43056,0,0,.5],65:[0,.68333,0,.13889,.75],66:[0,.68333,.05017,.08334,.75851],67:[0,.68333,.07153,.08334,.71472],68:[0,.68333,.02778,.05556,.82792],69:[0,.68333,.05764,.08334,.7382],70:[0,.68333,.13889,.08334,.64306],71:[0,.68333,0,.08334,.78625],72:[0,.68333,.08125,.05556,.83125],73:[0,.68333,.07847,.11111,.43958],74:[0,.68333,.09618,.16667,.55451],75:[0,.68333,.07153,.05556,.84931],76:[0,.68333,0,.02778,.68056],77:[0,.68333,.10903,.08334,.97014],78:[0,.68333,.10903,.08334,.80347],79:[0,.68333,.02778,.08334,.76278],80:[0,.68333,.13889,.08334,.64201],81:[.19444,.68333,0,.08334,.79056],82:[0,.68333,.00773,.08334,.75929],83:[0,.68333,.05764,.08334,.6132],84:[0,.68333,.13889,.08334,.58438],85:[0,.68333,.10903,.02778,.68278],86:[0,.68333,.22222,0,.58333],87:[0,.68333,.13889,0,.94445],88:[0,.68333,.07847,.08334,.82847],89:[0,.68333,.22222,0,.58056],90:[0,.68333,.07153,.08334,.68264],97:[0,.43056,0,0,.52859],98:[0,.69444,0,0,.42917],99:[0,.43056,0,.05556,.43276],100:[0,.69444,0,.16667,.52049],101:[0,.43056,0,.05556,.46563],102:[.19444,.69444,.10764,.16667,.48959],103:[.19444,.43056,.03588,.02778,.47697],104:[0,.69444,0,0,.57616],105:[0,.65952,0,0,.34451],106:[.19444,.65952,.05724,0,.41181],107:[0,.69444,.03148,0,.5206],108:[0,.69444,.01968,.08334,.29838],109:[0,.43056,0,0,.87801],110:[0,.43056,0,0,.60023],111:[0,.43056,0,.05556,.48472],112:[.19444,.43056,0,.08334,.50313],113:[.19444,.43056,.03588,.08334,.44641],114:[0,.43056,.02778,.05556,.45116],115:[0,.43056,0,.05556,.46875],116:[0,.61508,0,.08334,.36111],117:[0,.43056,0,.02778,.57246],118:[0,.43056,.03588,.02778,.48472],119:[0,.43056,.02691,.08334,.71592],120:[0,.43056,0,.02778,.57153],121:[.19444,.43056,.03588,.05556,.49028],122:[0,.43056,.04398,.05556,.46505],160:[0,0,0,0,.25],915:[0,.68333,.13889,.08334,.61528],916:[0,.68333,0,.16667,.83334],920:[0,.68333,.02778,.08334,.76278],923:[0,.68333,0,.16667,.69445],926:[0,.68333,.07569,.08334,.74236],928:[0,.68333,.08125,.05556,.83125],931:[0,.68333,.05764,.08334,.77986],933:[0,.68333,.13889,.05556,.58333],934:[0,.68333,0,.08334,.66667],936:[0,.68333,.11,.05556,.61222],937:[0,.68333,.05017,.08334,.7724],945:[0,.43056,.0037,.02778,.6397],946:[.19444,.69444,.05278,.08334,.56563],947:[.19444,.43056,.05556,0,.51773],948:[0,.69444,.03785,.05556,.44444],949:[0,.43056,0,.08334,.46632],950:[.19444,.69444,.07378,.08334,.4375],951:[.19444,.43056,.03588,.05556,.49653],952:[0,.69444,.02778,.08334,.46944],953:[0,.43056,0,.05556,.35394],954:[0,.43056,0,0,.57616],955:[0,.69444,0,0,.58334],956:[.19444,.43056,0,.02778,.60255],957:[0,.43056,.06366,.02778,.49398],958:[.19444,.69444,.04601,.11111,.4375],959:[0,.43056,0,.05556,.48472],960:[0,.43056,.03588,0,.57003],961:[.19444,.43056,0,.08334,.51702],962:[.09722,.43056,.07986,.08334,.36285],963:[0,.43056,.03588,0,.57141],964:[0,.43056,.1132,.02778,.43715],965:[0,.43056,.03588,.02778,.54028],966:[.19444,.43056,0,.08334,.65417],967:[.19444,.43056,0,.05556,.62569],968:[.19444,.69444,.03588,.11111,.65139],969:[0,.43056,.03588,0,.62245],977:[0,.69444,0,.08334,.59144],981:[.19444,.69444,0,.08334,.59583],982:[0,.43056,.02778,0,.82813],1009:[.19444,.43056,0,.08334,.51702],1013:[0,.43056,0,.05556,.4059],57649:[0,.43056,0,.02778,.32246],57911:[.19444,.43056,0,.08334,.38403]},"SansSerif-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.36667],34:[0,.69444,0,0,.55834],35:[.19444,.69444,0,0,.91667],36:[.05556,.75,0,0,.55],37:[.05556,.75,0,0,1.02912],38:[0,.69444,0,0,.83056],39:[0,.69444,0,0,.30556],40:[.25,.75,0,0,.42778],41:[.25,.75,0,0,.42778],42:[0,.75,0,0,.55],43:[.11667,.61667,0,0,.85556],44:[.10556,.13056,0,0,.30556],45:[0,.45833,0,0,.36667],46:[0,.13056,0,0,.30556],47:[.25,.75,0,0,.55],48:[0,.69444,0,0,.55],49:[0,.69444,0,0,.55],50:[0,.69444,0,0,.55],51:[0,.69444,0,0,.55],52:[0,.69444,0,0,.55],53:[0,.69444,0,0,.55],54:[0,.69444,0,0,.55],55:[0,.69444,0,0,.55],56:[0,.69444,0,0,.55],57:[0,.69444,0,0,.55],58:[0,.45833,0,0,.30556],59:[.10556,.45833,0,0,.30556],61:[-.09375,.40625,0,0,.85556],63:[0,.69444,0,0,.51945],64:[0,.69444,0,0,.73334],65:[0,.69444,0,0,.73334],66:[0,.69444,0,0,.73334],67:[0,.69444,0,0,.70278],68:[0,.69444,0,0,.79445],69:[0,.69444,0,0,.64167],70:[0,.69444,0,0,.61111],71:[0,.69444,0,0,.73334],72:[0,.69444,0,0,.79445],73:[0,.69444,0,0,.33056],74:[0,.69444,0,0,.51945],75:[0,.69444,0,0,.76389],76:[0,.69444,0,0,.58056],77:[0,.69444,0,0,.97778],78:[0,.69444,0,0,.79445],79:[0,.69444,0,0,.79445],80:[0,.69444,0,0,.70278],81:[.10556,.69444,0,0,.79445],82:[0,.69444,0,0,.70278],83:[0,.69444,0,0,.61111],84:[0,.69444,0,0,.73334],85:[0,.69444,0,0,.76389],86:[0,.69444,.01528,0,.73334],87:[0,.69444,.01528,0,1.03889],88:[0,.69444,0,0,.73334],89:[0,.69444,.0275,0,.73334],90:[0,.69444,0,0,.67223],91:[.25,.75,0,0,.34306],93:[.25,.75,0,0,.34306],94:[0,.69444,0,0,.55],95:[.35,.10833,.03056,0,.55],97:[0,.45833,0,0,.525],98:[0,.69444,0,0,.56111],99:[0,.45833,0,0,.48889],100:[0,.69444,0,0,.56111],101:[0,.45833,0,0,.51111],102:[0,.69444,.07639,0,.33611],103:[.19444,.45833,.01528,0,.55],104:[0,.69444,0,0,.56111],105:[0,.69444,0,0,.25556],106:[.19444,.69444,0,0,.28611],107:[0,.69444,0,0,.53056],108:[0,.69444,0,0,.25556],109:[0,.45833,0,0,.86667],110:[0,.45833,0,0,.56111],111:[0,.45833,0,0,.55],112:[.19444,.45833,0,0,.56111],113:[.19444,.45833,0,0,.56111],114:[0,.45833,.01528,0,.37222],115:[0,.45833,0,0,.42167],116:[0,.58929,0,0,.40417],117:[0,.45833,0,0,.56111],118:[0,.45833,.01528,0,.5],119:[0,.45833,.01528,0,.74445],120:[0,.45833,0,0,.5],121:[.19444,.45833,.01528,0,.5],122:[0,.45833,0,0,.47639],126:[.35,.34444,0,0,.55],160:[0,0,0,0,.25],168:[0,.69444,0,0,.55],176:[0,.69444,0,0,.73334],180:[0,.69444,0,0,.55],184:[.17014,0,0,0,.48889],305:[0,.45833,0,0,.25556],567:[.19444,.45833,0,0,.28611],710:[0,.69444,0,0,.55],711:[0,.63542,0,0,.55],713:[0,.63778,0,0,.55],728:[0,.69444,0,0,.55],729:[0,.69444,0,0,.30556],730:[0,.69444,0,0,.73334],732:[0,.69444,0,0,.55],733:[0,.69444,0,0,.55],915:[0,.69444,0,0,.58056],916:[0,.69444,0,0,.91667],920:[0,.69444,0,0,.85556],923:[0,.69444,0,0,.67223],926:[0,.69444,0,0,.73334],928:[0,.69444,0,0,.79445],931:[0,.69444,0,0,.79445],933:[0,.69444,0,0,.85556],934:[0,.69444,0,0,.79445],936:[0,.69444,0,0,.85556],937:[0,.69444,0,0,.79445],8211:[0,.45833,.03056,0,.55],8212:[0,.45833,.03056,0,1.10001],8216:[0,.69444,0,0,.30556],8217:[0,.69444,0,0,.30556],8220:[0,.69444,0,0,.55834],8221:[0,.69444,0,0,.55834]},"SansSerif-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.05733,0,.31945],34:[0,.69444,.00316,0,.5],35:[.19444,.69444,.05087,0,.83334],36:[.05556,.75,.11156,0,.5],37:[.05556,.75,.03126,0,.83334],38:[0,.69444,.03058,0,.75834],39:[0,.69444,.07816,0,.27778],40:[.25,.75,.13164,0,.38889],41:[.25,.75,.02536,0,.38889],42:[0,.75,.11775,0,.5],43:[.08333,.58333,.02536,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,.01946,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,.13164,0,.5],48:[0,.65556,.11156,0,.5],49:[0,.65556,.11156,0,.5],50:[0,.65556,.11156,0,.5],51:[0,.65556,.11156,0,.5],52:[0,.65556,.11156,0,.5],53:[0,.65556,.11156,0,.5],54:[0,.65556,.11156,0,.5],55:[0,.65556,.11156,0,.5],56:[0,.65556,.11156,0,.5],57:[0,.65556,.11156,0,.5],58:[0,.44444,.02502,0,.27778],59:[.125,.44444,.02502,0,.27778],61:[-.13,.37,.05087,0,.77778],63:[0,.69444,.11809,0,.47222],64:[0,.69444,.07555,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,.08293,0,.66667],67:[0,.69444,.11983,0,.63889],68:[0,.69444,.07555,0,.72223],69:[0,.69444,.11983,0,.59722],70:[0,.69444,.13372,0,.56945],71:[0,.69444,.11983,0,.66667],72:[0,.69444,.08094,0,.70834],73:[0,.69444,.13372,0,.27778],74:[0,.69444,.08094,0,.47222],75:[0,.69444,.11983,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,.08094,0,.875],78:[0,.69444,.08094,0,.70834],79:[0,.69444,.07555,0,.73611],80:[0,.69444,.08293,0,.63889],81:[.125,.69444,.07555,0,.73611],82:[0,.69444,.08293,0,.64584],83:[0,.69444,.09205,0,.55556],84:[0,.69444,.13372,0,.68056],85:[0,.69444,.08094,0,.6875],86:[0,.69444,.1615,0,.66667],87:[0,.69444,.1615,0,.94445],88:[0,.69444,.13372,0,.66667],89:[0,.69444,.17261,0,.66667],90:[0,.69444,.11983,0,.61111],91:[.25,.75,.15942,0,.28889],93:[.25,.75,.08719,0,.28889],94:[0,.69444,.0799,0,.5],95:[.35,.09444,.08616,0,.5],97:[0,.44444,.00981,0,.48056],98:[0,.69444,.03057,0,.51667],99:[0,.44444,.08336,0,.44445],100:[0,.69444,.09483,0,.51667],101:[0,.44444,.06778,0,.44445],102:[0,.69444,.21705,0,.30556],103:[.19444,.44444,.10836,0,.5],104:[0,.69444,.01778,0,.51667],105:[0,.67937,.09718,0,.23889],106:[.19444,.67937,.09162,0,.26667],107:[0,.69444,.08336,0,.48889],108:[0,.69444,.09483,0,.23889],109:[0,.44444,.01778,0,.79445],110:[0,.44444,.01778,0,.51667],111:[0,.44444,.06613,0,.5],112:[.19444,.44444,.0389,0,.51667],113:[.19444,.44444,.04169,0,.51667],114:[0,.44444,.10836,0,.34167],115:[0,.44444,.0778,0,.38333],116:[0,.57143,.07225,0,.36111],117:[0,.44444,.04169,0,.51667],118:[0,.44444,.10836,0,.46111],119:[0,.44444,.10836,0,.68334],120:[0,.44444,.09169,0,.46111],121:[.19444,.44444,.10836,0,.46111],122:[0,.44444,.08752,0,.43472],126:[.35,.32659,.08826,0,.5],160:[0,0,0,0,.25],168:[0,.67937,.06385,0,.5],176:[0,.69444,0,0,.73752],184:[.17014,0,0,0,.44445],305:[0,.44444,.04169,0,.23889],567:[.19444,.44444,.04169,0,.26667],710:[0,.69444,.0799,0,.5],711:[0,.63194,.08432,0,.5],713:[0,.60889,.08776,0,.5],714:[0,.69444,.09205,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,.09483,0,.5],729:[0,.67937,.07774,0,.27778],730:[0,.69444,0,0,.73752],732:[0,.67659,.08826,0,.5],733:[0,.69444,.09205,0,.5],915:[0,.69444,.13372,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,.07555,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,.12816,0,.66667],928:[0,.69444,.08094,0,.70834],931:[0,.69444,.11983,0,.72222],933:[0,.69444,.09031,0,.77778],934:[0,.69444,.04603,0,.72222],936:[0,.69444,.09031,0,.77778],937:[0,.69444,.08293,0,.72222],8211:[0,.44444,.08616,0,.5],8212:[0,.44444,.08616,0,1],8216:[0,.69444,.07816,0,.27778],8217:[0,.69444,.07816,0,.27778],8220:[0,.69444,.14205,0,.5],8221:[0,.69444,.00316,0,.5]},"SansSerif-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.31945],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.75834],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,0,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.65556,0,0,.5],49:[0,.65556,0,0,.5],50:[0,.65556,0,0,.5],51:[0,.65556,0,0,.5],52:[0,.65556,0,0,.5],53:[0,.65556,0,0,.5],54:[0,.65556,0,0,.5],55:[0,.65556,0,0,.5],56:[0,.65556,0,0,.5],57:[0,.65556,0,0,.5],58:[0,.44444,0,0,.27778],59:[.125,.44444,0,0,.27778],61:[-.13,.37,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,0,0,.66667],67:[0,.69444,0,0,.63889],68:[0,.69444,0,0,.72223],69:[0,.69444,0,0,.59722],70:[0,.69444,0,0,.56945],71:[0,.69444,0,0,.66667],72:[0,.69444,0,0,.70834],73:[0,.69444,0,0,.27778],74:[0,.69444,0,0,.47222],75:[0,.69444,0,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,0,0,.875],78:[0,.69444,0,0,.70834],79:[0,.69444,0,0,.73611],80:[0,.69444,0,0,.63889],81:[.125,.69444,0,0,.73611],82:[0,.69444,0,0,.64584],83:[0,.69444,0,0,.55556],84:[0,.69444,0,0,.68056],85:[0,.69444,0,0,.6875],86:[0,.69444,.01389,0,.66667],87:[0,.69444,.01389,0,.94445],88:[0,.69444,0,0,.66667],89:[0,.69444,.025,0,.66667],90:[0,.69444,0,0,.61111],91:[.25,.75,0,0,.28889],93:[.25,.75,0,0,.28889],94:[0,.69444,0,0,.5],95:[.35,.09444,.02778,0,.5],97:[0,.44444,0,0,.48056],98:[0,.69444,0,0,.51667],99:[0,.44444,0,0,.44445],100:[0,.69444,0,0,.51667],101:[0,.44444,0,0,.44445],102:[0,.69444,.06944,0,.30556],103:[.19444,.44444,.01389,0,.5],104:[0,.69444,0,0,.51667],105:[0,.67937,0,0,.23889],106:[.19444,.67937,0,0,.26667],107:[0,.69444,0,0,.48889],108:[0,.69444,0,0,.23889],109:[0,.44444,0,0,.79445],110:[0,.44444,0,0,.51667],111:[0,.44444,0,0,.5],112:[.19444,.44444,0,0,.51667],113:[.19444,.44444,0,0,.51667],114:[0,.44444,.01389,0,.34167],115:[0,.44444,0,0,.38333],116:[0,.57143,0,0,.36111],117:[0,.44444,0,0,.51667],118:[0,.44444,.01389,0,.46111],119:[0,.44444,.01389,0,.68334],120:[0,.44444,0,0,.46111],121:[.19444,.44444,.01389,0,.46111],122:[0,.44444,0,0,.43472],126:[.35,.32659,0,0,.5],160:[0,0,0,0,.25],168:[0,.67937,0,0,.5],176:[0,.69444,0,0,.66667],184:[.17014,0,0,0,.44445],305:[0,.44444,0,0,.23889],567:[.19444,.44444,0,0,.26667],710:[0,.69444,0,0,.5],711:[0,.63194,0,0,.5],713:[0,.60889,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.67937,0,0,.27778],730:[0,.69444,0,0,.66667],732:[0,.67659,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.69444,0,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,0,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,0,0,.66667],928:[0,.69444,0,0,.70834],931:[0,.69444,0,0,.72222],933:[0,.69444,0,0,.77778],934:[0,.69444,0,0,.72222],936:[0,.69444,0,0,.77778],937:[0,.69444,0,0,.72222],8211:[0,.44444,.02778,0,.5],8212:[0,.44444,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5]},"Script-Regular":{32:[0,0,0,0,.25],65:[0,.7,.22925,0,.80253],66:[0,.7,.04087,0,.90757],67:[0,.7,.1689,0,.66619],68:[0,.7,.09371,0,.77443],69:[0,.7,.18583,0,.56162],70:[0,.7,.13634,0,.89544],71:[0,.7,.17322,0,.60961],72:[0,.7,.29694,0,.96919],73:[0,.7,.19189,0,.80907],74:[.27778,.7,.19189,0,1.05159],75:[0,.7,.31259,0,.91364],76:[0,.7,.19189,0,.87373],77:[0,.7,.15981,0,1.08031],78:[0,.7,.3525,0,.9015],79:[0,.7,.08078,0,.73787],80:[0,.7,.08078,0,1.01262],81:[0,.7,.03305,0,.88282],82:[0,.7,.06259,0,.85],83:[0,.7,.19189,0,.86767],84:[0,.7,.29087,0,.74697],85:[0,.7,.25815,0,.79996],86:[0,.7,.27523,0,.62204],87:[0,.7,.27523,0,.80532],88:[0,.7,.26006,0,.94445],89:[0,.7,.2939,0,.70961],90:[0,.7,.24037,0,.8212],160:[0,0,0,0,.25]},"Size1-Regular":{32:[0,0,0,0,.25],40:[.35001,.85,0,0,.45834],41:[.35001,.85,0,0,.45834],47:[.35001,.85,0,0,.57778],91:[.35001,.85,0,0,.41667],92:[.35001,.85,0,0,.57778],93:[.35001,.85,0,0,.41667],123:[.35001,.85,0,0,.58334],125:[.35001,.85,0,0,.58334],160:[0,0,0,0,.25],710:[0,.72222,0,0,.55556],732:[0,.72222,0,0,.55556],770:[0,.72222,0,0,.55556],771:[0,.72222,0,0,.55556],8214:[-99e-5,.601,0,0,.77778],8593:[1e-5,.6,0,0,.66667],8595:[1e-5,.6,0,0,.66667],8657:[1e-5,.6,0,0,.77778],8659:[1e-5,.6,0,0,.77778],8719:[.25001,.75,0,0,.94445],8720:[.25001,.75,0,0,.94445],8721:[.25001,.75,0,0,1.05556],8730:[.35001,.85,0,0,1],8739:[-.00599,.606,0,0,.33333],8741:[-.00599,.606,0,0,.55556],8747:[.30612,.805,.19445,0,.47222],8748:[.306,.805,.19445,0,.47222],8749:[.306,.805,.19445,0,.47222],8750:[.30612,.805,.19445,0,.47222],8896:[.25001,.75,0,0,.83334],8897:[.25001,.75,0,0,.83334],8898:[.25001,.75,0,0,.83334],8899:[.25001,.75,0,0,.83334],8968:[.35001,.85,0,0,.47222],8969:[.35001,.85,0,0,.47222],8970:[.35001,.85,0,0,.47222],8971:[.35001,.85,0,0,.47222],9168:[-99e-5,.601,0,0,.66667],10216:[.35001,.85,0,0,.47222],10217:[.35001,.85,0,0,.47222],10752:[.25001,.75,0,0,1.11111],10753:[.25001,.75,0,0,1.11111],10754:[.25001,.75,0,0,1.11111],10756:[.25001,.75,0,0,.83334],10758:[.25001,.75,0,0,.83334]},"Size2-Regular":{32:[0,0,0,0,.25],40:[.65002,1.15,0,0,.59722],41:[.65002,1.15,0,0,.59722],47:[.65002,1.15,0,0,.81111],91:[.65002,1.15,0,0,.47222],92:[.65002,1.15,0,0,.81111],93:[.65002,1.15,0,0,.47222],123:[.65002,1.15,0,0,.66667],125:[.65002,1.15,0,0,.66667],160:[0,0,0,0,.25],710:[0,.75,0,0,1],732:[0,.75,0,0,1],770:[0,.75,0,0,1],771:[0,.75,0,0,1],8719:[.55001,1.05,0,0,1.27778],8720:[.55001,1.05,0,0,1.27778],8721:[.55001,1.05,0,0,1.44445],8730:[.65002,1.15,0,0,1],8747:[.86225,1.36,.44445,0,.55556],8748:[.862,1.36,.44445,0,.55556],8749:[.862,1.36,.44445,0,.55556],8750:[.86225,1.36,.44445,0,.55556],8896:[.55001,1.05,0,0,1.11111],8897:[.55001,1.05,0,0,1.11111],8898:[.55001,1.05,0,0,1.11111],8899:[.55001,1.05,0,0,1.11111],8968:[.65002,1.15,0,0,.52778],8969:[.65002,1.15,0,0,.52778],8970:[.65002,1.15,0,0,.52778],8971:[.65002,1.15,0,0,.52778],10216:[.65002,1.15,0,0,.61111],10217:[.65002,1.15,0,0,.61111],10752:[.55001,1.05,0,0,1.51112],10753:[.55001,1.05,0,0,1.51112],10754:[.55001,1.05,0,0,1.51112],10756:[.55001,1.05,0,0,1.11111],10758:[.55001,1.05,0,0,1.11111]},"Size3-Regular":{32:[0,0,0,0,.25],40:[.95003,1.45,0,0,.73611],41:[.95003,1.45,0,0,.73611],47:[.95003,1.45,0,0,1.04445],91:[.95003,1.45,0,0,.52778],92:[.95003,1.45,0,0,1.04445],93:[.95003,1.45,0,0,.52778],123:[.95003,1.45,0,0,.75],125:[.95003,1.45,0,0,.75],160:[0,0,0,0,.25],710:[0,.75,0,0,1.44445],732:[0,.75,0,0,1.44445],770:[0,.75,0,0,1.44445],771:[0,.75,0,0,1.44445],8730:[.95003,1.45,0,0,1],8968:[.95003,1.45,0,0,.58334],8969:[.95003,1.45,0,0,.58334],8970:[.95003,1.45,0,0,.58334],8971:[.95003,1.45,0,0,.58334],10216:[.95003,1.45,0,0,.75],10217:[.95003,1.45,0,0,.75]},"Size4-Regular":{32:[0,0,0,0,.25],40:[1.25003,1.75,0,0,.79167],41:[1.25003,1.75,0,0,.79167],47:[1.25003,1.75,0,0,1.27778],91:[1.25003,1.75,0,0,.58334],92:[1.25003,1.75,0,0,1.27778],93:[1.25003,1.75,0,0,.58334],123:[1.25003,1.75,0,0,.80556],125:[1.25003,1.75,0,0,.80556],160:[0,0,0,0,.25],710:[0,.825,0,0,1.8889],732:[0,.825,0,0,1.8889],770:[0,.825,0,0,1.8889],771:[0,.825,0,0,1.8889],8730:[1.25003,1.75,0,0,1],8968:[1.25003,1.75,0,0,.63889],8969:[1.25003,1.75,0,0,.63889],8970:[1.25003,1.75,0,0,.63889],8971:[1.25003,1.75,0,0,.63889],9115:[.64502,1.155,0,0,.875],9116:[1e-5,.6,0,0,.875],9117:[.64502,1.155,0,0,.875],9118:[.64502,1.155,0,0,.875],9119:[1e-5,.6,0,0,.875],9120:[.64502,1.155,0,0,.875],9121:[.64502,1.155,0,0,.66667],9122:[-99e-5,.601,0,0,.66667],9123:[.64502,1.155,0,0,.66667],9124:[.64502,1.155,0,0,.66667],9125:[-99e-5,.601,0,0,.66667],9126:[.64502,1.155,0,0,.66667],9127:[1e-5,.9,0,0,.88889],9128:[.65002,1.15,0,0,.88889],9129:[.90001,0,0,0,.88889],9130:[0,.3,0,0,.88889],9131:[1e-5,.9,0,0,.88889],9132:[.65002,1.15,0,0,.88889],9133:[.90001,0,0,0,.88889],9143:[.88502,.915,0,0,1.05556],10216:[1.25003,1.75,0,0,.80556],10217:[1.25003,1.75,0,0,.80556],57344:[-.00499,.605,0,0,1.05556],57345:[-.00499,.605,0,0,1.05556],57680:[0,.12,0,0,.45],57681:[0,.12,0,0,.45],57682:[0,.12,0,0,.45],57683:[0,.12,0,0,.45]},"Typewriter-Regular":{32:[0,0,0,0,.525],33:[0,.61111,0,0,.525],34:[0,.61111,0,0,.525],35:[0,.61111,0,0,.525],36:[.08333,.69444,0,0,.525],37:[.08333,.69444,0,0,.525],38:[0,.61111,0,0,.525],39:[0,.61111,0,0,.525],40:[.08333,.69444,0,0,.525],41:[.08333,.69444,0,0,.525],42:[0,.52083,0,0,.525],43:[-.08056,.53055,0,0,.525],44:[.13889,.125,0,0,.525],45:[-.08056,.53055,0,0,.525],46:[0,.125,0,0,.525],47:[.08333,.69444,0,0,.525],48:[0,.61111,0,0,.525],49:[0,.61111,0,0,.525],50:[0,.61111,0,0,.525],51:[0,.61111,0,0,.525],52:[0,.61111,0,0,.525],53:[0,.61111,0,0,.525],54:[0,.61111,0,0,.525],55:[0,.61111,0,0,.525],56:[0,.61111,0,0,.525],57:[0,.61111,0,0,.525],58:[0,.43056,0,0,.525],59:[.13889,.43056,0,0,.525],60:[-.05556,.55556,0,0,.525],61:[-.19549,.41562,0,0,.525],62:[-.05556,.55556,0,0,.525],63:[0,.61111,0,0,.525],64:[0,.61111,0,0,.525],65:[0,.61111,0,0,.525],66:[0,.61111,0,0,.525],67:[0,.61111,0,0,.525],68:[0,.61111,0,0,.525],69:[0,.61111,0,0,.525],70:[0,.61111,0,0,.525],71:[0,.61111,0,0,.525],72:[0,.61111,0,0,.525],73:[0,.61111,0,0,.525],74:[0,.61111,0,0,.525],75:[0,.61111,0,0,.525],76:[0,.61111,0,0,.525],77:[0,.61111,0,0,.525],78:[0,.61111,0,0,.525],79:[0,.61111,0,0,.525],80:[0,.61111,0,0,.525],81:[.13889,.61111,0,0,.525],82:[0,.61111,0,0,.525],83:[0,.61111,0,0,.525],84:[0,.61111,0,0,.525],85:[0,.61111,0,0,.525],86:[0,.61111,0,0,.525],87:[0,.61111,0,0,.525],88:[0,.61111,0,0,.525],89:[0,.61111,0,0,.525],90:[0,.61111,0,0,.525],91:[.08333,.69444,0,0,.525],92:[.08333,.69444,0,0,.525],93:[.08333,.69444,0,0,.525],94:[0,.61111,0,0,.525],95:[.09514,0,0,0,.525],96:[0,.61111,0,0,.525],97:[0,.43056,0,0,.525],98:[0,.61111,0,0,.525],99:[0,.43056,0,0,.525],100:[0,.61111,0,0,.525],101:[0,.43056,0,0,.525],102:[0,.61111,0,0,.525],103:[.22222,.43056,0,0,.525],104:[0,.61111,0,0,.525],105:[0,.61111,0,0,.525],106:[.22222,.61111,0,0,.525],107:[0,.61111,0,0,.525],108:[0,.61111,0,0,.525],109:[0,.43056,0,0,.525],110:[0,.43056,0,0,.525],111:[0,.43056,0,0,.525],112:[.22222,.43056,0,0,.525],113:[.22222,.43056,0,0,.525],114:[0,.43056,0,0,.525],115:[0,.43056,0,0,.525],116:[0,.55358,0,0,.525],117:[0,.43056,0,0,.525],118:[0,.43056,0,0,.525],119:[0,.43056,0,0,.525],120:[0,.43056,0,0,.525],121:[.22222,.43056,0,0,.525],122:[0,.43056,0,0,.525],123:[.08333,.69444,0,0,.525],124:[.08333,.69444,0,0,.525],125:[.08333,.69444,0,0,.525],126:[0,.61111,0,0,.525],127:[0,.61111,0,0,.525],160:[0,0,0,0,.525],176:[0,.61111,0,0,.525],184:[.19445,0,0,0,.525],305:[0,.43056,0,0,.525],567:[.22222,.43056,0,0,.525],711:[0,.56597,0,0,.525],713:[0,.56555,0,0,.525],714:[0,.61111,0,0,.525],715:[0,.61111,0,0,.525],728:[0,.61111,0,0,.525],730:[0,.61111,0,0,.525],770:[0,.61111,0,0,.525],771:[0,.61111,0,0,.525],776:[0,.61111,0,0,.525],915:[0,.61111,0,0,.525],916:[0,.61111,0,0,.525],920:[0,.61111,0,0,.525],923:[0,.61111,0,0,.525],926:[0,.61111,0,0,.525],928:[0,.61111,0,0,.525],931:[0,.61111,0,0,.525],933:[0,.61111,0,0,.525],934:[0,.61111,0,0,.525],936:[0,.61111,0,0,.525],937:[0,.61111,0,0,.525],8216:[0,.61111,0,0,.525],8217:[0,.61111,0,0,.525],8242:[0,.61111,0,0,.525],9251:[.11111,.21944,0,0,.525]}},i3={slant:[.25,.25,.25],space:[0,0,0],stretch:[0,0,0],shrink:[0,0,0],xHeight:[.431,.431,.431],quad:[1,1.171,1.472],extraSpace:[0,0,0],num1:[.677,.732,.925],num2:[.394,.384,.387],num3:[.444,.471,.504],denom1:[.686,.752,1.025],denom2:[.345,.344,.532],sup1:[.413,.503,.504],sup2:[.363,.431,.404],sup3:[.289,.286,.294],sub1:[.15,.143,.2],sub2:[.247,.286,.4],supDrop:[.386,.353,.494],subDrop:[.05,.071,.1],delim1:[2.39,1.7,1.98],delim2:[1.01,1.157,1.42],axisHeight:[.25,.25,.25],defaultRuleThickness:[.04,.049,.049],bigOpSpacing1:[.111,.111,.111],bigOpSpacing2:[.166,.166,.166],bigOpSpacing3:[.2,.2,.2],bigOpSpacing4:[.6,.611,.611],bigOpSpacing5:[.1,.143,.143],sqrtRuleThickness:[.04,.04,.04],ptPerEm:[10,10,10],doubleRuleSep:[.2,.2,.2],arrayRuleWidth:[.04,.04,.04],fboxsep:[.3,.3,.3],fboxrule:[.04,.04,.04]},dz={\u00C5:"A",\u00D0:"D",\u00DE:"o",\u00E5:"a",\u00F0:"d",\u00FE:"o",\u0410:"A",\u0411:"B",\u0412:"B",\u0413:"F",\u0414:"A",\u0415:"E",\u0416:"K",\u0417:"3",\u0418:"N",\u0419:"N",\u041A:"K",\u041B:"N",\u041C:"M",\u041D:"H",\u041E:"O",\u041F:"N",\u0420:"P",\u0421:"C",\u0422:"T",\u0423:"y",\u0424:"O",\u0425:"X",\u0426:"U",\u0427:"h",\u0428:"W",\u0429:"W",\u042A:"B",\u042B:"X",\u042C:"B",\u042D:"3",\u042E:"X",\u042F:"R",\u0430:"a",\u0431:"b",\u0432:"a",\u0433:"r",\u0434:"y",\u0435:"e",\u0436:"m",\u0437:"e",\u0438:"n",\u0439:"n",\u043A:"n",\u043B:"n",\u043C:"m",\u043D:"n",\u043E:"o",\u043F:"n",\u0440:"p",\u0441:"c",\u0442:"o",\u0443:"y",\u0444:"b",\u0445:"x",\u0446:"n",\u0447:"n",\u0448:"w",\u0449:"w",\u044A:"a",\u044B:"m",\u044C:"a",\u044D:"e",\u044E:"m",\u044F:"r"};o(kbe,"setFontMetrics");o(V7,"getCharacterMetrics");y7={};o(Ebe,"getGlobalMetrics");Sbe=[[1,1,1],[2,1,1],[3,1,1],[4,2,1],[5,2,1],[6,3,1],[7,4,2],[8,6,3],[9,7,6],[10,8,7],[11,10,9]],pz=[.5,.6,.7,.8,.9,1,1.2,1.44,1.728,2.074,2.488],mz=o(function(e,r){return r.size<2?e:Sbe[e-1][r.size-1]},"sizeAtStyle"),v3=class t{static{o(this,"Options")}constructor(e){this.style=void 0,this.color=void 0,this.size=void 0,this.textSize=void 0,this.phantom=void 0,this.font=void 0,this.fontFamily=void 0,this.fontWeight=void 0,this.fontShape=void 0,this.sizeMultiplier=void 0,this.maxSize=void 0,this.minRuleThickness=void 0,this._fontMetrics=void 0,this.style=e.style,this.color=e.color,this.size=e.size||t.BASESIZE,this.textSize=e.textSize||this.size,this.phantom=!!e.phantom,this.font=e.font||"",this.fontFamily=e.fontFamily||"",this.fontWeight=e.fontWeight||"",this.fontShape=e.fontShape||"",this.sizeMultiplier=pz[this.size-1],this.maxSize=e.maxSize,this.minRuleThickness=e.minRuleThickness,this._fontMetrics=void 0}extend(e){var r={style:this.style,size:this.size,textSize:this.textSize,color:this.color,phantom:this.phantom,font:this.font,fontFamily:this.fontFamily,fontWeight:this.fontWeight,fontShape:this.fontShape,maxSize:this.maxSize,minRuleThickness:this.minRuleThickness};for(var n in e)e.hasOwnProperty(n)&&(r[n]=e[n]);return new t(r)}havingStyle(e){return this.style===e?this:this.extend({style:e,size:mz(this.textSize,e)})}havingCrampedStyle(){return this.havingStyle(this.style.cramp())}havingSize(e){return this.size===e&&this.textSize===e?this:this.extend({style:this.style.text(),size:e,textSize:e,sizeMultiplier:pz[e-1]})}havingBaseStyle(e){e=e||this.style.text();var r=mz(t.BASESIZE,e);return this.size===r&&this.textSize===t.BASESIZE&&this.style===e?this:this.extend({style:e,size:r})}havingBaseSizing(){var e;switch(this.style.id){case 4:case 5:e=3;break;case 6:case 7:e=1;break;default:e=6}return this.extend({style:this.style.text(),size:e})}withColor(e){return this.extend({color:e})}withPhantom(){return this.extend({phantom:!0})}withFont(e){return this.extend({font:e})}withTextFontFamily(e){return this.extend({fontFamily:e,font:""})}withTextFontWeight(e){return this.extend({fontWeight:e,font:""})}withTextFontShape(e){return this.extend({fontShape:e,font:""})}sizingClasses(e){return e.size!==this.size?["sizing","reset-size"+e.size,"size"+this.size]:[]}baseSizingClasses(){return this.size!==t.BASESIZE?["sizing","reset-size"+this.size,"size"+t.BASESIZE]:[]}fontMetrics(){return this._fontMetrics||(this._fontMetrics=Ebe(this.size)),this._fontMetrics}getColor(){return this.phantom?"transparent":this.color}};v3.BASESIZE=6;L7={pt:1,mm:7227/2540,cm:7227/254,in:72.27,bp:803/800,pc:12,dd:1238/1157,cc:14856/1157,nd:685/642,nc:1370/107,sp:1/65536,px:803/800},Cbe={ex:!0,em:!0,mu:!0},Wz=o(function(e){return typeof e!="string"&&(e=e.unit),e in L7||e in Cbe||e==="ex"},"validUnit"),ti=o(function(e,r){var n;if(e.unit in L7)n=L7[e.unit]/r.fontMetrics().ptPerEm/r.sizeMultiplier;else if(e.unit==="mu")n=r.fontMetrics().cssEmPerMu;else{var i;if(r.style.isTight()?i=r.havingStyle(r.style.text()):i=r,e.unit==="ex")n=i.fontMetrics().xHeight;else if(e.unit==="em")n=i.fontMetrics().quad;else throw new gt("Invalid unit: '"+e.unit+"'");i!==r&&(n*=i.sizeMultiplier/r.sizeMultiplier)}return Math.min(e.number*n,r.maxSize)},"calculateSize"),kt=o(function(e){return+e.toFixed(4)+"em"},"makeEm"),gh=o(function(e){return e.filter(r=>r).join(" ")},"createClass"),qz=o(function(e,r,n){if(this.classes=e||[],this.attributes={},this.height=0,this.depth=0,this.maxFontSize=0,this.style=n||{},r){r.style.isTight()&&this.classes.push("mtight");var i=r.getColor();i&&(this.style.color=i)}},"initNode"),Yz=o(function(e){var r=document.createElement(e);r.className=gh(this.classes);for(var n in this.style)this.style.hasOwnProperty(n)&&(r.style[n]=this.style[n]);for(var i in this.attributes)this.attributes.hasOwnProperty(i)&&r.setAttribute(i,this.attributes[i]);for(var a=0;a",r},"toMarkup"),od=class{static{o(this,"Span")}constructor(e,r,n,i){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.width=void 0,this.maxFontSize=void 0,this.style=void 0,qz.call(this,e,n,i),this.children=r||[]}setAttribute(e,r){this.attributes[e]=r}hasClass(e){return Jt.contains(this.classes,e)}toNode(){return Yz.call(this,"span")}toMarkup(){return Xz.call(this,"span")}},Ky=class{static{o(this,"Anchor")}constructor(e,r,n,i){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,qz.call(this,r,i),this.children=n||[],this.setAttribute("href",e)}setAttribute(e,r){this.attributes[e]=r}hasClass(e){return Jt.contains(this.classes,e)}toNode(){return Yz.call(this,"a")}toMarkup(){return Xz.call(this,"a")}},R7=class{static{o(this,"Img")}constructor(e,r,n){this.src=void 0,this.alt=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.alt=r,this.src=e,this.classes=["mord"],this.style=n}hasClass(e){return Jt.contains(this.classes,e)}toNode(){var e=document.createElement("img");e.src=this.src,e.alt=this.alt,e.className="mord";for(var r in this.style)this.style.hasOwnProperty(r)&&(e.style[r]=this.style[r]);return e}toMarkup(){var e=''+Jt.escape(this.alt)+'0&&(r=document.createElement("span"),r.style.marginRight=kt(this.italic)),this.classes.length>0&&(r=r||document.createElement("span"),r.className=gh(this.classes));for(var n in this.style)this.style.hasOwnProperty(n)&&(r=r||document.createElement("span"),r.style[n]=this.style[n]);return r?(r.appendChild(e),r):e}toMarkup(){var e=!1,r="0&&(n+="margin-right:"+this.italic+"em;");for(var i in this.style)this.style.hasOwnProperty(i)&&(n+=Jt.hyphenate(i)+":"+this.style[i]+";");n&&(e=!0,r+=' style="'+Jt.escape(n)+'"');var a=Jt.escape(this.text);return e?(r+=">",r+=a,r+="",r):a}},ul=class{static{o(this,"SvgNode")}constructor(e,r){this.children=void 0,this.attributes=void 0,this.children=e||[],this.attributes=r||{}}toNode(){var e="http://www.w3.org/2000/svg",r=document.createElementNS(e,"svg");for(var n in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,n)&&r.setAttribute(n,this.attributes[n]);for(var i=0;i':''}},Qy=class{static{o(this,"LineNode")}constructor(e){this.attributes=void 0,this.attributes=e||{}}toNode(){var e="http://www.w3.org/2000/svg",r=document.createElementNS(e,"line");for(var n in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,n)&&r.setAttribute(n,this.attributes[n]);return r}toMarkup(){var e="","\\gt",!0);G(H,re,Ee,"\u2208","\\in",!0);G(H,re,Ee,"\uE020","\\@not");G(H,re,Ee,"\u2282","\\subset",!0);G(H,re,Ee,"\u2283","\\supset",!0);G(H,re,Ee,"\u2286","\\subseteq",!0);G(H,re,Ee,"\u2287","\\supseteq",!0);G(H,ke,Ee,"\u2288","\\nsubseteq",!0);G(H,ke,Ee,"\u2289","\\nsupseteq",!0);G(H,re,Ee,"\u22A8","\\models");G(H,re,Ee,"\u2190","\\leftarrow",!0);G(H,re,Ee,"\u2264","\\le");G(H,re,Ee,"\u2264","\\leq",!0);G(H,re,Ee,"<","\\lt",!0);G(H,re,Ee,"\u2192","\\rightarrow",!0);G(H,re,Ee,"\u2192","\\to");G(H,ke,Ee,"\u2271","\\ngeq",!0);G(H,ke,Ee,"\u2270","\\nleq",!0);G(H,re,du,"\xA0","\\ ");G(H,re,du,"\xA0","\\space");G(H,re,du,"\xA0","\\nobreakspace");G(it,re,du,"\xA0","\\ ");G(it,re,du,"\xA0"," ");G(it,re,du,"\xA0","\\space");G(it,re,du,"\xA0","\\nobreakspace");G(H,re,du,null,"\\nobreak");G(H,re,du,null,"\\allowbreak");G(H,re,S3,",",",");G(H,re,S3,";",";");G(H,ke,It,"\u22BC","\\barwedge",!0);G(H,ke,It,"\u22BB","\\veebar",!0);G(H,re,It,"\u2299","\\odot",!0);G(H,re,It,"\u2295","\\oplus",!0);G(H,re,It,"\u2297","\\otimes",!0);G(H,re,Re,"\u2202","\\partial",!0);G(H,re,It,"\u2298","\\oslash",!0);G(H,ke,It,"\u229A","\\circledcirc",!0);G(H,ke,It,"\u22A1","\\boxdot",!0);G(H,re,It,"\u25B3","\\bigtriangleup");G(H,re,It,"\u25BD","\\bigtriangledown");G(H,re,It,"\u2020","\\dagger");G(H,re,It,"\u22C4","\\diamond");G(H,re,It,"\u22C6","\\star");G(H,re,It,"\u25C3","\\triangleleft");G(H,re,It,"\u25B9","\\triangleright");G(H,re,Qs,"{","\\{");G(it,re,Re,"{","\\{");G(it,re,Re,"{","\\textbraceleft");G(H,re,Za,"}","\\}");G(it,re,Re,"}","\\}");G(it,re,Re,"}","\\textbraceright");G(H,re,Qs,"{","\\lbrace");G(H,re,Za,"}","\\rbrace");G(H,re,Qs,"[","\\lbrack",!0);G(it,re,Re,"[","\\lbrack",!0);G(H,re,Za,"]","\\rbrack",!0);G(it,re,Re,"]","\\rbrack",!0);G(H,re,Qs,"(","\\lparen",!0);G(H,re,Za,")","\\rparen",!0);G(it,re,Re,"<","\\textless",!0);G(it,re,Re,">","\\textgreater",!0);G(H,re,Qs,"\u230A","\\lfloor",!0);G(H,re,Za,"\u230B","\\rfloor",!0);G(H,re,Qs,"\u2308","\\lceil",!0);G(H,re,Za,"\u2309","\\rceil",!0);G(H,re,Re,"\\","\\backslash");G(H,re,Re,"\u2223","|");G(H,re,Re,"\u2223","\\vert");G(it,re,Re,"|","\\textbar",!0);G(H,re,Re,"\u2225","\\|");G(H,re,Re,"\u2225","\\Vert");G(it,re,Re,"\u2225","\\textbardbl");G(it,re,Re,"~","\\textasciitilde");G(it,re,Re,"\\","\\textbackslash");G(it,re,Re,"^","\\textasciicircum");G(H,re,Ee,"\u2191","\\uparrow",!0);G(H,re,Ee,"\u21D1","\\Uparrow",!0);G(H,re,Ee,"\u2193","\\downarrow",!0);G(H,re,Ee,"\u21D3","\\Downarrow",!0);G(H,re,Ee,"\u2195","\\updownarrow",!0);G(H,re,Ee,"\u21D5","\\Updownarrow",!0);G(H,re,Ei,"\u2210","\\coprod");G(H,re,Ei,"\u22C1","\\bigvee");G(H,re,Ei,"\u22C0","\\bigwedge");G(H,re,Ei,"\u2A04","\\biguplus");G(H,re,Ei,"\u22C2","\\bigcap");G(H,re,Ei,"\u22C3","\\bigcup");G(H,re,Ei,"\u222B","\\int");G(H,re,Ei,"\u222B","\\intop");G(H,re,Ei,"\u222C","\\iint");G(H,re,Ei,"\u222D","\\iiint");G(H,re,Ei,"\u220F","\\prod");G(H,re,Ei,"\u2211","\\sum");G(H,re,Ei,"\u2A02","\\bigotimes");G(H,re,Ei,"\u2A01","\\bigoplus");G(H,re,Ei,"\u2A00","\\bigodot");G(H,re,Ei,"\u222E","\\oint");G(H,re,Ei,"\u222F","\\oiint");G(H,re,Ei,"\u2230","\\oiiint");G(H,re,Ei,"\u2A06","\\bigsqcup");G(H,re,Ei,"\u222B","\\smallint");G(it,re,w0,"\u2026","\\textellipsis");G(H,re,w0,"\u2026","\\mathellipsis");G(it,re,w0,"\u2026","\\ldots",!0);G(H,re,w0,"\u2026","\\ldots",!0);G(H,re,w0,"\u22EF","\\@cdots",!0);G(H,re,w0,"\u22F1","\\ddots",!0);G(H,re,Re,"\u22EE","\\varvdots");G(H,re,Vn,"\u02CA","\\acute");G(H,re,Vn,"\u02CB","\\grave");G(H,re,Vn,"\xA8","\\ddot");G(H,re,Vn,"~","\\tilde");G(H,re,Vn,"\u02C9","\\bar");G(H,re,Vn,"\u02D8","\\breve");G(H,re,Vn,"\u02C7","\\check");G(H,re,Vn,"^","\\hat");G(H,re,Vn,"\u20D7","\\vec");G(H,re,Vn,"\u02D9","\\dot");G(H,re,Vn,"\u02DA","\\mathring");G(H,re,er,"\uE131","\\@imath");G(H,re,er,"\uE237","\\@jmath");G(H,re,Re,"\u0131","\u0131");G(H,re,Re,"\u0237","\u0237");G(it,re,Re,"\u0131","\\i",!0);G(it,re,Re,"\u0237","\\j",!0);G(it,re,Re,"\xDF","\\ss",!0);G(it,re,Re,"\xE6","\\ae",!0);G(it,re,Re,"\u0153","\\oe",!0);G(it,re,Re,"\xF8","\\o",!0);G(it,re,Re,"\xC6","\\AE",!0);G(it,re,Re,"\u0152","\\OE",!0);G(it,re,Re,"\xD8","\\O",!0);G(it,re,Vn,"\u02CA","\\'");G(it,re,Vn,"\u02CB","\\`");G(it,re,Vn,"\u02C6","\\^");G(it,re,Vn,"\u02DC","\\~");G(it,re,Vn,"\u02C9","\\=");G(it,re,Vn,"\u02D8","\\u");G(it,re,Vn,"\u02D9","\\.");G(it,re,Vn,"\xB8","\\c");G(it,re,Vn,"\u02DA","\\r");G(it,re,Vn,"\u02C7","\\v");G(it,re,Vn,"\xA8",'\\"');G(it,re,Vn,"\u02DD","\\H");G(it,re,Vn,"\u25EF","\\textcircled");jz={"--":!0,"---":!0,"``":!0,"''":!0};G(it,re,Re,"\u2013","--",!0);G(it,re,Re,"\u2013","\\textendash");G(it,re,Re,"\u2014","---",!0);G(it,re,Re,"\u2014","\\textemdash");G(it,re,Re,"\u2018","`",!0);G(it,re,Re,"\u2018","\\textquoteleft");G(it,re,Re,"\u2019","'",!0);G(it,re,Re,"\u2019","\\textquoteright");G(it,re,Re,"\u201C","``",!0);G(it,re,Re,"\u201C","\\textquotedblleft");G(it,re,Re,"\u201D","''",!0);G(it,re,Re,"\u201D","\\textquotedblright");G(H,re,Re,"\xB0","\\degree",!0);G(it,re,Re,"\xB0","\\degree");G(it,re,Re,"\xB0","\\textdegree",!0);G(H,re,Re,"\xA3","\\pounds");G(H,re,Re,"\xA3","\\mathsterling",!0);G(it,re,Re,"\xA3","\\pounds");G(it,re,Re,"\xA3","\\textsterling",!0);G(H,ke,Re,"\u2720","\\maltese");G(it,ke,Re,"\u2720","\\maltese");yz='0123456789/@."';for(a3=0;a30)return cl(a,h,i,r,s.concat(f));if(u){var d,p;if(u==="boldsymbol"){var m=Mbe(a,i,r,s,n);d=m.fontName,p=[m.fontClass]}else l?(d=Zz[u].fontName,p=[u]):(d=u3(u,r.fontWeight,r.fontShape),p=[u,r.fontWeight,r.fontShape]);if(C3(a,d,i).metrics)return cl(a,d,i,r,s.concat(p));if(jz.hasOwnProperty(a)&&d.slice(0,10)==="Typewriter"){for(var g=[],y=0;y{if(gh(t.classes)!==gh(e.classes)||t.skew!==e.skew||t.maxFontSize!==e.maxFontSize)return!1;if(t.classes.length===1){var r=t.classes[0];if(r==="mbin"||r==="mord")return!1}for(var n in t.style)if(t.style.hasOwnProperty(n)&&t.style[n]!==e.style[n])return!1;for(var i in e.style)if(e.style.hasOwnProperty(i)&&t.style[i]!==e.style[i])return!1;return!0},"canCombine"),Pbe=o(t=>{for(var e=0;er&&(r=s.height),s.depth>n&&(n=s.depth),s.maxFontSize>i&&(i=s.maxFontSize)}e.height=r,e.depth=n,e.maxFontSize=i},"sizeElementFromChildren"),Ts=o(function(e,r,n,i){var a=new od(e,r,n,i);return U7(a),a},"makeSpan"),Kz=o((t,e,r,n)=>new od(t,e,r,n),"makeSvgSpan"),Bbe=o(function(e,r,n){var i=Ts([e],[],r);return i.height=Math.max(n||r.fontMetrics().defaultRuleThickness,r.minRuleThickness),i.style.borderBottomWidth=kt(i.height),i.maxFontSize=1,i},"makeLineSpan"),Fbe=o(function(e,r,n,i){var a=new Ky(e,r,n,i);return U7(a),a},"makeAnchor"),Qz=o(function(e){var r=new sd(e);return U7(r),r},"makeFragment"),$be=o(function(e,r){return e instanceof sd?Ts([],[e],r):e},"wrapFragment"),zbe=o(function(e){if(e.positionType==="individualShift"){for(var r=e.children,n=[r[0]],i=-r[0].shift-r[0].elem.depth,a=i,s=1;s{var r=Ts(["mspace"],[],e),n=ti(t,e);return r.style.marginRight=kt(n),r},"makeGlue"),u3=o(function(e,r,n){var i="";switch(e){case"amsrm":i="AMS";break;case"textrm":i="Main";break;case"textsf":i="SansSerif";break;case"texttt":i="Typewriter";break;default:i=e}var a;return r==="textbf"&&n==="textit"?a="BoldItalic":r==="textbf"?a="Bold":r==="textit"?a="Italic":a="Regular",i+"-"+a},"retrieveTextFontName"),Zz={mathbf:{variant:"bold",fontName:"Main-Bold"},mathrm:{variant:"normal",fontName:"Main-Regular"},textit:{variant:"italic",fontName:"Main-Italic"},mathit:{variant:"italic",fontName:"Main-Italic"},mathnormal:{variant:"italic",fontName:"Math-Italic"},mathbb:{variant:"double-struck",fontName:"AMS-Regular"},mathcal:{variant:"script",fontName:"Caligraphic-Regular"},mathfrak:{variant:"fraktur",fontName:"Fraktur-Regular"},mathscr:{variant:"script",fontName:"Script-Regular"},mathsf:{variant:"sans-serif",fontName:"SansSerif-Regular"},mathtt:{variant:"monospace",fontName:"Typewriter-Regular"}},Jz={vec:["vec",.471,.714],oiintSize1:["oiintSize1",.957,.499],oiintSize2:["oiintSize2",1.472,.659],oiiintSize1:["oiiintSize1",1.304,.499],oiiintSize2:["oiiintSize2",1.98,.659]},Ube=o(function(e,r){var[n,i,a]=Jz[e],s=new Zl(n),l=new ul([s],{width:kt(i),height:kt(a),style:"width:"+kt(i),viewBox:"0 0 "+1e3*i+" "+1e3*a,preserveAspectRatio:"xMinYMin"}),u=Kz(["overlay"],[l],r);return u.height=a,u.style.height=kt(a),u.style.width=kt(i),u},"staticSvg"),Fe={fontMap:Zz,makeSymbol:cl,mathsym:Nbe,makeSpan:Ts,makeSvgSpan:Kz,makeLineSpan:Bbe,makeAnchor:Fbe,makeFragment:Qz,wrapFragment:$be,makeVList:Gbe,makeOrd:Ibe,makeGlue:Vbe,staticSvg:Ube,svgData:Jz,tryCombineChars:Pbe},ei={number:3,unit:"mu"},id={number:4,unit:"mu"},lu={number:5,unit:"mu"},Hbe={mord:{mop:ei,mbin:id,mrel:lu,minner:ei},mop:{mord:ei,mop:ei,mrel:lu,minner:ei},mbin:{mord:id,mop:id,mopen:id,minner:id},mrel:{mord:lu,mop:lu,mopen:lu,minner:lu},mopen:{},mclose:{mop:ei,mbin:id,mrel:lu,minner:ei},mpunct:{mord:ei,mop:ei,mrel:lu,mopen:ei,mclose:ei,mpunct:ei,minner:ei},minner:{mord:ei,mop:ei,mbin:id,mrel:lu,mopen:ei,mpunct:ei,minner:ei}},Wbe={mord:{mop:ei},mop:{mord:ei,mop:ei},mbin:{},mrel:{},mopen:{},mclose:{mop:ei},mpunct:{},minner:{mop:ei}},eG={},b3={},w3={};o(Nt,"defineFunction");o(ld,"defineFunctionBuilders");T3=o(function(e){return e.type==="ordgroup"&&e.body.length===1?e.body[0]:e},"normalizeArgument"),di=o(function(e){return e.type==="ordgroup"?e.body:[e]},"ordargument"),hu=Fe.makeSpan,qbe=["leftmost","mbin","mopen","mrel","mop","mpunct"],Ybe=["rightmost","mrel","mclose","mpunct"],Xbe={display:tr.DISPLAY,text:tr.TEXT,script:tr.SCRIPT,scriptscript:tr.SCRIPTSCRIPT},jbe={mord:"mord",mop:"mop",mbin:"mbin",mrel:"mrel",mopen:"mopen",mclose:"mclose",mpunct:"mpunct",minner:"minner"},Fi=o(function(e,r,n,i){i===void 0&&(i=[null,null]);for(var a=[],s=0;s{var v=y.classes[0],x=g.classes[0];v==="mbin"&&Jt.contains(Ybe,x)?y.classes[0]="mord":x==="mbin"&&Jt.contains(qbe,v)&&(g.classes[0]="mord")},{node:d},p,m),bz(a,(g,y)=>{var v=M7(y),x=M7(g),b=v&&x?g.hasClass("mtight")?Wbe[v][x]:Hbe[v][x]:null;if(b)return Fe.makeGlue(b,h)},{node:d},p,m),a},"buildExpression"),bz=o(function t(e,r,n,i,a){i&&e.push(i);for(var s=0;sp=>{e.splice(d+1,0,p),s++})(s)}i&&e.pop()},"traverseNonSpaceNodes"),tG=o(function(e){return e instanceof sd||e instanceof Ky||e instanceof od&&e.hasClass("enclosing")?e:null},"checkPartialGroup"),Kbe=o(function t(e,r){var n=tG(e);if(n){var i=n.children;if(i.length){if(r==="right")return t(i[i.length-1],"right");if(r==="left")return t(i[0],"left")}}return e},"getOutermostNode"),M7=o(function(e,r){return e?(r&&(e=Kbe(e,r)),jbe[e.classes[0]]||null):null},"getTypeOfDomTree"),Zy=o(function(e,r){var n=["nulldelimiter"].concat(e.baseSizingClasses());return hu(r.concat(n))},"makeNullDelimiter"),Fr=o(function(e,r,n){if(!e)return hu();if(b3[e.type]){var i=b3[e.type](e,r);if(n&&r.size!==n.size){i=hu(r.sizingClasses(n),[i],r);var a=r.sizeMultiplier/n.sizeMultiplier;i.height*=a,i.depth*=a}return i}else throw new gt("Got group of unknown type: '"+e.type+"'")},"buildGroup");o(h3,"buildHTMLUnbreakable");o(I7,"buildHTML");o(rG,"newDocumentFragment");ks=class{static{o(this,"MathNode")}constructor(e,r,n){this.type=void 0,this.attributes=void 0,this.children=void 0,this.classes=void 0,this.type=e,this.attributes={},this.children=r||[],this.classes=n||[]}setAttribute(e,r){this.attributes[e]=r}getAttribute(e){return this.attributes[e]}toNode(){var e=document.createElementNS("http://www.w3.org/1998/Math/MathML",this.type);for(var r in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,r)&&e.setAttribute(r,this.attributes[r]);this.classes.length>0&&(e.className=gh(this.classes));for(var n=0;n0&&(e+=' class ="'+Jt.escape(gh(this.classes))+'"'),e+=">";for(var n=0;n",e}toText(){return this.children.map(e=>e.toText()).join("")}},ad=class{static{o(this,"TextNode")}constructor(e){this.text=void 0,this.text=e}toNode(){return document.createTextNode(this.text)}toMarkup(){return Jt.escape(this.toText())}toText(){return this.text}},O7=class{static{o(this,"SpaceNode")}constructor(e){this.width=void 0,this.character=void 0,this.width=e,e>=.05555&&e<=.05556?this.character="\u200A":e>=.1666&&e<=.1667?this.character="\u2009":e>=.2222&&e<=.2223?this.character="\u2005":e>=.2777&&e<=.2778?this.character="\u2005\u200A":e>=-.05556&&e<=-.05555?this.character="\u200A\u2063":e>=-.1667&&e<=-.1666?this.character="\u2009\u2063":e>=-.2223&&e<=-.2222?this.character="\u205F\u2063":e>=-.2778&&e<=-.2777?this.character="\u2005\u2063":this.character=null}toNode(){if(this.character)return document.createTextNode(this.character);var e=document.createElementNS("http://www.w3.org/1998/Math/MathML","mspace");return e.setAttribute("width",kt(this.width)),e}toMarkup(){return this.character?""+this.character+"":''}toText(){return this.character?this.character:" "}},dt={MathNode:ks,TextNode:ad,SpaceNode:O7,newDocumentFragment:rG},Ao=o(function(e,r,n){return An[r][e]&&An[r][e].replace&&e.charCodeAt(0)!==55349&&!(jz.hasOwnProperty(e)&&n&&(n.fontFamily&&n.fontFamily.slice(4,6)==="tt"||n.font&&n.font.slice(4,6)==="tt"))&&(e=An[r][e].replace),new dt.TextNode(e)},"makeText"),H7=o(function(e){return e.length===1?e[0]:new dt.MathNode("mrow",e)},"makeRow"),W7=o(function(e,r){if(r.fontFamily==="texttt")return"monospace";if(r.fontFamily==="textsf")return r.fontShape==="textit"&&r.fontWeight==="textbf"?"sans-serif-bold-italic":r.fontShape==="textit"?"sans-serif-italic":r.fontWeight==="textbf"?"bold-sans-serif":"sans-serif";if(r.fontShape==="textit"&&r.fontWeight==="textbf")return"bold-italic";if(r.fontShape==="textit")return"italic";if(r.fontWeight==="textbf")return"bold";var n=r.font;if(!n||n==="mathnormal")return null;var i=e.mode;if(n==="mathit")return"italic";if(n==="boldsymbol")return e.type==="textord"?"bold":"bold-italic";if(n==="mathbf")return"bold";if(n==="mathbb")return"double-struck";if(n==="mathfrak")return"fraktur";if(n==="mathscr"||n==="mathcal")return"script";if(n==="mathsf")return"sans-serif";if(n==="mathtt")return"monospace";var a=e.text;if(Jt.contains(["\\imath","\\jmath"],a))return null;An[i][a]&&An[i][a].replace&&(a=An[i][a].replace);var s=Fe.fontMap[n].fontName;return V7(a,s,i)?Fe.fontMap[n].variant:null},"getVariant"),Ss=o(function(e,r,n){if(e.length===1){var i=yn(e[0],r);return n&&i instanceof ks&&i.type==="mo"&&(i.setAttribute("lspace","0em"),i.setAttribute("rspace","0em")),[i]}for(var a=[],s,l=0;l0&&(d.text=d.text.slice(0,1)+"\u0338"+d.text.slice(1),a.pop())}}}a.push(u),s=u}return a},"buildExpression"),yh=o(function(e,r,n){return H7(Ss(e,r,n))},"buildExpressionRow"),yn=o(function(e,r){if(!e)return new dt.MathNode("mrow");if(w3[e.type]){var n=w3[e.type](e,r);return n}else throw new gt("Got group of unknown type: '"+e.type+"'")},"buildGroup");o(wz,"buildMathML");nG=o(function(e){return new v3({style:e.displayMode?tr.DISPLAY:tr.TEXT,maxSize:e.maxSize,minRuleThickness:e.minRuleThickness})},"optionsFromSettings"),iG=o(function(e,r){if(r.displayMode){var n=["katex-display"];r.leqno&&n.push("leqno"),r.fleqn&&n.push("fleqn"),e=Fe.makeSpan(n,[e])}return e},"displayWrap"),Qbe=o(function(e,r,n){var i=nG(n),a;if(n.output==="mathml")return wz(e,r,i,n.displayMode,!0);if(n.output==="html"){var s=I7(e,i);a=Fe.makeSpan(["katex"],[s])}else{var l=wz(e,r,i,n.displayMode,!1),u=I7(e,i);a=Fe.makeSpan(["katex"],[l,u])}return iG(a,n)},"buildTree"),Zbe=o(function(e,r,n){var i=nG(n),a=I7(e,i),s=Fe.makeSpan(["katex"],[a]);return iG(s,n)},"buildHTMLTree"),Jbe={widehat:"^",widecheck:"\u02C7",widetilde:"~",utilde:"~",overleftarrow:"\u2190",underleftarrow:"\u2190",xleftarrow:"\u2190",overrightarrow:"\u2192",underrightarrow:"\u2192",xrightarrow:"\u2192",underbrace:"\u23DF",overbrace:"\u23DE",overgroup:"\u23E0",undergroup:"\u23E1",overleftrightarrow:"\u2194",underleftrightarrow:"\u2194",xleftrightarrow:"\u2194",Overrightarrow:"\u21D2",xRightarrow:"\u21D2",overleftharpoon:"\u21BC",xleftharpoonup:"\u21BC",overrightharpoon:"\u21C0",xrightharpoonup:"\u21C0",xLeftarrow:"\u21D0",xLeftrightarrow:"\u21D4",xhookleftarrow:"\u21A9",xhookrightarrow:"\u21AA",xmapsto:"\u21A6",xrightharpoondown:"\u21C1",xleftharpoondown:"\u21BD",xrightleftharpoons:"\u21CC",xleftrightharpoons:"\u21CB",xtwoheadleftarrow:"\u219E",xtwoheadrightarrow:"\u21A0",xlongequal:"=",xtofrom:"\u21C4",xrightleftarrows:"\u21C4",xrightequilibrium:"\u21CC",xleftequilibrium:"\u21CB","\\cdrightarrow":"\u2192","\\cdleftarrow":"\u2190","\\cdlongequal":"="},e4e=o(function(e){var r=new dt.MathNode("mo",[new dt.TextNode(Jbe[e.replace(/^\\/,"")])]);return r.setAttribute("stretchy","true"),r},"mathMLnode"),t4e={overrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],overleftarrow:[["leftarrow"],.888,522,"xMinYMin"],underrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],underleftarrow:[["leftarrow"],.888,522,"xMinYMin"],xrightarrow:[["rightarrow"],1.469,522,"xMaxYMin"],"\\cdrightarrow":[["rightarrow"],3,522,"xMaxYMin"],xleftarrow:[["leftarrow"],1.469,522,"xMinYMin"],"\\cdleftarrow":[["leftarrow"],3,522,"xMinYMin"],Overrightarrow:[["doublerightarrow"],.888,560,"xMaxYMin"],xRightarrow:[["doublerightarrow"],1.526,560,"xMaxYMin"],xLeftarrow:[["doubleleftarrow"],1.526,560,"xMinYMin"],overleftharpoon:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoonup:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoondown:[["leftharpoondown"],.888,522,"xMinYMin"],overrightharpoon:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoonup:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoondown:[["rightharpoondown"],.888,522,"xMaxYMin"],xlongequal:[["longequal"],.888,334,"xMinYMin"],"\\cdlongequal":[["longequal"],3,334,"xMinYMin"],xtwoheadleftarrow:[["twoheadleftarrow"],.888,334,"xMinYMin"],xtwoheadrightarrow:[["twoheadrightarrow"],.888,334,"xMaxYMin"],overleftrightarrow:[["leftarrow","rightarrow"],.888,522],overbrace:[["leftbrace","midbrace","rightbrace"],1.6,548],underbrace:[["leftbraceunder","midbraceunder","rightbraceunder"],1.6,548],underleftrightarrow:[["leftarrow","rightarrow"],.888,522],xleftrightarrow:[["leftarrow","rightarrow"],1.75,522],xLeftrightarrow:[["doubleleftarrow","doublerightarrow"],1.75,560],xrightleftharpoons:[["leftharpoondownplus","rightharpoonplus"],1.75,716],xleftrightharpoons:[["leftharpoonplus","rightharpoondownplus"],1.75,716],xhookleftarrow:[["leftarrow","righthook"],1.08,522],xhookrightarrow:[["lefthook","rightarrow"],1.08,522],overlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],underlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],overgroup:[["leftgroup","rightgroup"],.888,342],undergroup:[["leftgroupunder","rightgroupunder"],.888,342],xmapsto:[["leftmapsto","rightarrow"],1.5,522],xtofrom:[["leftToFrom","rightToFrom"],1.75,528],xrightleftarrows:[["baraboveleftarrow","rightarrowabovebar"],1.75,901],xrightequilibrium:[["baraboveshortleftharpoon","rightharpoonaboveshortbar"],1.75,716],xleftequilibrium:[["shortbaraboveleftharpoon","shortrightharpoonabovebar"],1.75,716]},r4e=o(function(e){return e.type==="ordgroup"?e.body.length:1},"groupLength"),n4e=o(function(e,r){function n(){var l=4e5,u=e.label.slice(1);if(Jt.contains(["widehat","widecheck","widetilde","utilde"],u)){var h=e,f=r4e(h.base),d,p,m;if(f>5)u==="widehat"||u==="widecheck"?(d=420,l=2364,m=.42,p=u+"4"):(d=312,l=2340,m=.34,p="tilde4");else{var g=[1,1,2,2,3,3][f];u==="widehat"||u==="widecheck"?(l=[0,1062,2364,2364,2364][g],d=[0,239,300,360,420][g],m=[0,.24,.3,.3,.36,.42][g],p=u+g):(l=[0,600,1033,2339,2340][g],d=[0,260,286,306,312][g],m=[0,.26,.286,.3,.306,.34][g],p="tilde"+g)}var y=new Zl(p),v=new ul([y],{width:"100%",height:kt(m),viewBox:"0 0 "+l+" "+d,preserveAspectRatio:"none"});return{span:Fe.makeSvgSpan([],[v],r),minWidth:0,height:m}}else{var x=[],b=t4e[u],[w,C,T]=b,E=T/1e3,A=w.length,S,_;if(A===1){var I=b[3];S=["hide-tail"],_=[I]}else if(A===2)S=["halfarrow-left","halfarrow-right"],_=["xMinYMin","xMaxYMin"];else if(A===3)S=["brace-left","brace-center","brace-right"],_=["xMinYMin","xMidYMin","xMaxYMin"];else throw new Error(`Correct katexImagesData or update code here to support - `+A+" children.");for(var L=0;L0&&(i.style.minWidth=kt(a)),i},"svgSpan"),i4e=o(function(e,r,n,i,a){var s,l=e.height+e.depth+n+i;if(/fbox|color|angl/.test(r)){if(s=Fe.makeSpan(["stretchy",r],[],a),r==="fbox"){var u=a.color&&a.getColor();u&&(s.style.borderColor=u)}}else{var h=[];/^[bx]cancel$/.test(r)&&h.push(new Qy({x1:"0",y1:"0",x2:"100%",y2:"100%","stroke-width":"0.046em"})),/^x?cancel$/.test(r)&&h.push(new Qy({x1:"0",y1:"100%",x2:"100%",y2:"0","stroke-width":"0.046em"}));var f=new ul(h,{width:"100%",height:kt(l)});s=Fe.makeSvgSpan([],[f],a)}return s.height=l,s.style.height=kt(l),s},"encloseSpan"),fu={encloseSpan:i4e,mathMLnode:e4e,svgSpan:n4e};o(xr,"assertNodeType");o(q7,"assertSymbolNodeType");o(A3,"checkSymbolNodeType");Y7=o((t,e)=>{var r,n,i;t&&t.type==="supsub"?(n=xr(t.base,"accent"),r=n.base,t.base=r,i=_be(Fr(t,e)),t.base=n):(n=xr(t,"accent"),r=n.base);var a=Fr(r,e.havingCrampedStyle()),s=n.isShifty&&Jt.isCharacterBox(r),l=0;if(s){var u=Jt.getBaseElem(r),h=Fr(u,e.havingCrampedStyle());l=gz(h).skew}var f=n.label==="\\c",d=f?a.height+a.depth:Math.min(a.height,e.fontMetrics().xHeight),p;if(n.isStretchy)p=fu.svgSpan(n,e),p=Fe.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:a},{type:"elem",elem:p,wrapperClasses:["svg-align"],wrapperStyle:l>0?{width:"calc(100% - "+kt(2*l)+")",marginLeft:kt(2*l)}:void 0}]},e);else{var m,g;n.label==="\\vec"?(m=Fe.staticSvg("vec",e),g=Fe.svgData.vec[1]):(m=Fe.makeOrd({mode:n.mode,text:n.label},e,"textord"),m=gz(m),m.italic=0,g=m.width,f&&(d+=m.depth)),p=Fe.makeSpan(["accent-body"],[m]);var y=n.label==="\\textcircled";y&&(p.classes.push("accent-full"),d=a.height);var v=l;y||(v-=g/2),p.style.left=kt(v),n.label==="\\textcircled"&&(p.style.top=".2em"),p=Fe.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:a},{type:"kern",size:-d},{type:"elem",elem:p}]},e)}var x=Fe.makeSpan(["mord","accent"],[p],e);return i?(i.children[0]=x,i.height=Math.max(x.height,i.height),i.classes[0]="mord",i):x},"htmlBuilder$a"),aG=o((t,e)=>{var r=t.isStretchy?fu.mathMLnode(t.label):new dt.MathNode("mo",[Ao(t.label,t.mode)]),n=new dt.MathNode("mover",[yn(t.base,e),r]);return n.setAttribute("accent","true"),n},"mathmlBuilder$9"),a4e=new RegExp(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring"].map(t=>"\\"+t).join("|"));Nt({type:"accent",names:["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring","\\widecheck","\\widehat","\\widetilde","\\overrightarrow","\\overleftarrow","\\Overrightarrow","\\overleftrightarrow","\\overgroup","\\overlinesegment","\\overleftharpoon","\\overrightharpoon"],props:{numArgs:1},handler:o((t,e)=>{var r=T3(e[0]),n=!a4e.test(t.funcName),i=!n||t.funcName==="\\widehat"||t.funcName==="\\widetilde"||t.funcName==="\\widecheck";return{type:"accent",mode:t.parser.mode,label:t.funcName,isStretchy:n,isShifty:i,base:r}},"handler"),htmlBuilder:Y7,mathmlBuilder:aG});Nt({type:"accent",names:["\\'","\\`","\\^","\\~","\\=","\\u","\\.",'\\"',"\\c","\\r","\\H","\\v","\\textcircled"],props:{numArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["primitive"]},handler:o((t,e)=>{var r=e[0],n=t.parser.mode;return n==="math"&&(t.parser.settings.reportNonstrict("mathVsTextAccents","LaTeX's accent "+t.funcName+" works only in text mode"),n="text"),{type:"accent",mode:n,label:t.funcName,isStretchy:!1,isShifty:!0,base:r}},"handler"),htmlBuilder:Y7,mathmlBuilder:aG});Nt({type:"accentUnder",names:["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underlinesegment","\\utilde"],props:{numArgs:1},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0];return{type:"accentUnder",mode:r.mode,label:n,base:i}},"handler"),htmlBuilder:o((t,e)=>{var r=Fr(t.base,e),n=fu.svgSpan(t,e),i=t.label==="\\utilde"?.12:0,a=Fe.makeVList({positionType:"top",positionData:r.height,children:[{type:"elem",elem:n,wrapperClasses:["svg-align"]},{type:"kern",size:i},{type:"elem",elem:r}]},e);return Fe.makeSpan(["mord","accentunder"],[a],e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=fu.mathMLnode(t.label),n=new dt.MathNode("munder",[yn(t.base,e),r]);return n.setAttribute("accentunder","true"),n},"mathmlBuilder")});f3=o(t=>{var e=new dt.MathNode("mpadded",t?[t]:[]);return e.setAttribute("width","+0.6em"),e.setAttribute("lspace","0.3em"),e},"paddedNode");Nt({type:"xArrow",names:["\\xleftarrow","\\xrightarrow","\\xLeftarrow","\\xRightarrow","\\xleftrightarrow","\\xLeftrightarrow","\\xhookleftarrow","\\xhookrightarrow","\\xmapsto","\\xrightharpoondown","\\xrightharpoonup","\\xleftharpoondown","\\xleftharpoonup","\\xrightleftharpoons","\\xleftrightharpoons","\\xlongequal","\\xtwoheadrightarrow","\\xtwoheadleftarrow","\\xtofrom","\\xrightleftarrows","\\xrightequilibrium","\\xleftequilibrium","\\\\cdrightarrow","\\\\cdleftarrow","\\\\cdlongequal"],props:{numArgs:1,numOptionalArgs:1},handler(t,e,r){var{parser:n,funcName:i}=t;return{type:"xArrow",mode:n.mode,label:i,body:e[0],below:r[0]}},htmlBuilder(t,e){var r=e.style,n=e.havingStyle(r.sup()),i=Fe.wrapFragment(Fr(t.body,n,e),e),a=t.label.slice(0,2)==="\\x"?"x":"cd";i.classes.push(a+"-arrow-pad");var s;t.below&&(n=e.havingStyle(r.sub()),s=Fe.wrapFragment(Fr(t.below,n,e),e),s.classes.push(a+"-arrow-pad"));var l=fu.svgSpan(t,e),u=-e.fontMetrics().axisHeight+.5*l.height,h=-e.fontMetrics().axisHeight-.5*l.height-.111;(i.depth>.25||t.label==="\\xleftequilibrium")&&(h-=i.depth);var f;if(s){var d=-e.fontMetrics().axisHeight+s.height+.5*l.height+.111;f=Fe.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:h},{type:"elem",elem:l,shift:u},{type:"elem",elem:s,shift:d}]},e)}else f=Fe.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:h},{type:"elem",elem:l,shift:u}]},e);return f.children[0].children[0].children[1].classes.push("svg-align"),Fe.makeSpan(["mrel","x-arrow"],[f],e)},mathmlBuilder(t,e){var r=fu.mathMLnode(t.label);r.setAttribute("minsize",t.label.charAt(0)==="x"?"1.75em":"3.0em");var n;if(t.body){var i=f3(yn(t.body,e));if(t.below){var a=f3(yn(t.below,e));n=new dt.MathNode("munderover",[r,a,i])}else n=new dt.MathNode("mover",[r,i])}else if(t.below){var s=f3(yn(t.below,e));n=new dt.MathNode("munder",[r,s])}else n=f3(),n=new dt.MathNode("mover",[r,n]);return n}});s4e=Fe.makeSpan;o(sG,"htmlBuilder$9");o(oG,"mathmlBuilder$8");Nt({type:"mclass",names:["\\mathord","\\mathbin","\\mathrel","\\mathopen","\\mathclose","\\mathpunct","\\mathinner"],props:{numArgs:1,primitive:!0},handler(t,e){var{parser:r,funcName:n}=t,i=e[0];return{type:"mclass",mode:r.mode,mclass:"m"+n.slice(5),body:di(i),isCharacterBox:Jt.isCharacterBox(i)}},htmlBuilder:sG,mathmlBuilder:oG});_3=o(t=>{var e=t.type==="ordgroup"&&t.body.length?t.body[0]:t;return e.type==="atom"&&(e.family==="bin"||e.family==="rel")?"m"+e.family:"mord"},"binrelClass");Nt({type:"mclass",names:["\\@binrel"],props:{numArgs:2},handler(t,e){var{parser:r}=t;return{type:"mclass",mode:r.mode,mclass:_3(e[0]),body:di(e[1]),isCharacterBox:Jt.isCharacterBox(e[1])}}});Nt({type:"mclass",names:["\\stackrel","\\overset","\\underset"],props:{numArgs:2},handler(t,e){var{parser:r,funcName:n}=t,i=e[1],a=e[0],s;n!=="\\stackrel"?s=_3(i):s="mrel";var l={type:"op",mode:i.mode,limits:!0,alwaysHandleSupSub:!0,parentIsSupSub:!1,symbol:!1,suppressBaseShift:n!=="\\stackrel",body:di(i)},u={type:"supsub",mode:a.mode,base:l,sup:n==="\\underset"?null:a,sub:n==="\\underset"?a:null};return{type:"mclass",mode:r.mode,mclass:s,body:[u],isCharacterBox:Jt.isCharacterBox(u)}},htmlBuilder:sG,mathmlBuilder:oG});Nt({type:"pmb",names:["\\pmb"],props:{numArgs:1,allowedInText:!0},handler(t,e){var{parser:r}=t;return{type:"pmb",mode:r.mode,mclass:_3(e[0]),body:di(e[0])}},htmlBuilder(t,e){var r=Fi(t.body,e,!0),n=Fe.makeSpan([t.mclass],r,e);return n.style.textShadow="0.02em 0.01em 0.04px",n},mathmlBuilder(t,e){var r=Ss(t.body,e),n=new dt.MathNode("mstyle",r);return n.setAttribute("style","text-shadow: 0.02em 0.01em 0.04px"),n}});o4e={">":"\\\\cdrightarrow","<":"\\\\cdleftarrow","=":"\\\\cdlongequal",A:"\\uparrow",V:"\\downarrow","|":"\\Vert",".":"no arrow"},Tz=o(()=>({type:"styling",body:[],mode:"math",style:"display"}),"newCell"),kz=o(t=>t.type==="textord"&&t.text==="@","isStartOfArrow"),l4e=o((t,e)=>(t.type==="mathord"||t.type==="atom")&&t.text===e,"isLabelEnd");o(c4e,"cdArrow");o(u4e,"parseCD");Nt({type:"cdlabel",names:["\\\\cdleft","\\\\cdright"],props:{numArgs:1},handler(t,e){var{parser:r,funcName:n}=t;return{type:"cdlabel",mode:r.mode,side:n.slice(4),label:e[0]}},htmlBuilder(t,e){var r=e.havingStyle(e.style.sup()),n=Fe.wrapFragment(Fr(t.label,r,e),e);return n.classes.push("cd-label-"+t.side),n.style.bottom=kt(.8-n.depth),n.height=0,n.depth=0,n},mathmlBuilder(t,e){var r=new dt.MathNode("mrow",[yn(t.label,e)]);return r=new dt.MathNode("mpadded",[r]),r.setAttribute("width","0"),t.side==="left"&&r.setAttribute("lspace","-1width"),r.setAttribute("voffset","0.7em"),r=new dt.MathNode("mstyle",[r]),r.setAttribute("displaystyle","false"),r.setAttribute("scriptlevel","1"),r}});Nt({type:"cdlabelparent",names:["\\\\cdparent"],props:{numArgs:1},handler(t,e){var{parser:r}=t;return{type:"cdlabelparent",mode:r.mode,fragment:e[0]}},htmlBuilder(t,e){var r=Fe.wrapFragment(Fr(t.fragment,e),e);return r.classes.push("cd-vert-arrow"),r},mathmlBuilder(t,e){return new dt.MathNode("mrow",[yn(t.fragment,e)])}});Nt({type:"textord",names:["\\@char"],props:{numArgs:1,allowedInText:!0},handler(t,e){for(var{parser:r}=t,n=xr(e[0],"ordgroup"),i=n.body,a="",s=0;s=1114111)throw new gt("\\@char with invalid code point "+a);return u<=65535?h=String.fromCharCode(u):(u-=65536,h=String.fromCharCode((u>>10)+55296,(u&1023)+56320)),{type:"textord",mode:r.mode,text:h}}});lG=o((t,e)=>{var r=Fi(t.body,e.withColor(t.color),!1);return Fe.makeFragment(r)},"htmlBuilder$8"),cG=o((t,e)=>{var r=Ss(t.body,e.withColor(t.color)),n=new dt.MathNode("mstyle",r);return n.setAttribute("mathcolor",t.color),n},"mathmlBuilder$7");Nt({type:"color",names:["\\textcolor"],props:{numArgs:2,allowedInText:!0,argTypes:["color","original"]},handler(t,e){var{parser:r}=t,n=xr(e[0],"color-token").color,i=e[1];return{type:"color",mode:r.mode,color:n,body:di(i)}},htmlBuilder:lG,mathmlBuilder:cG});Nt({type:"color",names:["\\color"],props:{numArgs:1,allowedInText:!0,argTypes:["color"]},handler(t,e){var{parser:r,breakOnTokenText:n}=t,i=xr(e[0],"color-token").color;r.gullet.macros.set("\\current@color",i);var a=r.parseExpression(!0,n);return{type:"color",mode:r.mode,color:i,body:a}},htmlBuilder:lG,mathmlBuilder:cG});Nt({type:"cr",names:["\\\\"],props:{numArgs:0,numOptionalArgs:0,allowedInText:!0},handler(t,e,r){var{parser:n}=t,i=n.gullet.future().text==="["?n.parseSizeGroup(!0):null,a=!n.settings.displayMode||!n.settings.useStrictBehavior("newLineInDisplayMode","In LaTeX, \\\\ or \\newline does nothing in display mode");return{type:"cr",mode:n.mode,newLine:a,size:i&&xr(i,"size").value}},htmlBuilder(t,e){var r=Fe.makeSpan(["mspace"],[],e);return t.newLine&&(r.classes.push("newline"),t.size&&(r.style.marginTop=kt(ti(t.size,e)))),r},mathmlBuilder(t,e){var r=new dt.MathNode("mspace");return t.newLine&&(r.setAttribute("linebreak","newline"),t.size&&r.setAttribute("height",kt(ti(t.size,e)))),r}});P7={"\\global":"\\global","\\long":"\\\\globallong","\\\\globallong":"\\\\globallong","\\def":"\\gdef","\\gdef":"\\gdef","\\edef":"\\xdef","\\xdef":"\\xdef","\\let":"\\\\globallet","\\futurelet":"\\\\globalfuture"},uG=o(t=>{var e=t.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(e))throw new gt("Expected a control sequence",t);return e},"checkControlSequence"),h4e=o(t=>{var e=t.gullet.popToken();return e.text==="="&&(e=t.gullet.popToken(),e.text===" "&&(e=t.gullet.popToken())),e},"getRHS"),hG=o((t,e,r,n)=>{var i=t.gullet.macros.get(r.text);i==null&&(r.noexpand=!0,i={tokens:[r],numArgs:0,unexpandable:!t.gullet.isExpandable(r.text)}),t.gullet.macros.set(e,i,n)},"letCommand");Nt({type:"internal",names:["\\global","\\long","\\\\globallong"],props:{numArgs:0,allowedInText:!0},handler(t){var{parser:e,funcName:r}=t;e.consumeSpaces();var n=e.fetch();if(P7[n.text])return(r==="\\global"||r==="\\\\globallong")&&(n.text=P7[n.text]),xr(e.parseFunction(),"internal");throw new gt("Invalid token after macro prefix",n)}});Nt({type:"internal",names:["\\def","\\gdef","\\edef","\\xdef"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t){var{parser:e,funcName:r}=t,n=e.gullet.popToken(),i=n.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(i))throw new gt("Expected a control sequence",n);for(var a=0,s,l=[[]];e.gullet.future().text!=="{";)if(n=e.gullet.popToken(),n.text==="#"){if(e.gullet.future().text==="{"){s=e.gullet.future(),l[a].push("{");break}if(n=e.gullet.popToken(),!/^[1-9]$/.test(n.text))throw new gt('Invalid argument number "'+n.text+'"');if(parseInt(n.text)!==a+1)throw new gt('Argument number "'+n.text+'" out of order');a++,l.push([])}else{if(n.text==="EOF")throw new gt("Expected a macro definition");l[a].push(n.text)}var{tokens:u}=e.gullet.consumeArg();return s&&u.unshift(s),(r==="\\edef"||r==="\\xdef")&&(u=e.gullet.expandTokens(u),u.reverse()),e.gullet.macros.set(i,{tokens:u,numArgs:a,delimiters:l},r===P7[r]),{type:"internal",mode:e.mode}}});Nt({type:"internal",names:["\\let","\\\\globallet"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t){var{parser:e,funcName:r}=t,n=uG(e.gullet.popToken());e.gullet.consumeSpaces();var i=h4e(e);return hG(e,n,i,r==="\\\\globallet"),{type:"internal",mode:e.mode}}});Nt({type:"internal",names:["\\futurelet","\\\\globalfuture"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t){var{parser:e,funcName:r}=t,n=uG(e.gullet.popToken()),i=e.gullet.popToken(),a=e.gullet.popToken();return hG(e,n,a,r==="\\\\globalfuture"),e.gullet.pushToken(a),e.gullet.pushToken(i),{type:"internal",mode:e.mode}}});qy=o(function(e,r,n){var i=An.math[e]&&An.math[e].replace,a=V7(i||e,r,n);if(!a)throw new Error("Unsupported symbol "+e+" and font size "+r+".");return a},"getMetrics"),X7=o(function(e,r,n,i){var a=n.havingBaseStyle(r),s=Fe.makeSpan(i.concat(a.sizingClasses(n)),[e],n),l=a.sizeMultiplier/n.sizeMultiplier;return s.height*=l,s.depth*=l,s.maxFontSize=a.sizeMultiplier,s},"styleWrap"),fG=o(function(e,r,n){var i=r.havingBaseStyle(n),a=(1-r.sizeMultiplier/i.sizeMultiplier)*r.fontMetrics().axisHeight;e.classes.push("delimcenter"),e.style.top=kt(a),e.height-=a,e.depth+=a},"centerSpan"),f4e=o(function(e,r,n,i,a,s){var l=Fe.makeSymbol(e,"Main-Regular",a,i),u=X7(l,r,i,s);return n&&fG(u,i,r),u},"makeSmallDelim"),d4e=o(function(e,r,n,i){return Fe.makeSymbol(e,"Size"+r+"-Regular",n,i)},"mathrmSize"),dG=o(function(e,r,n,i,a,s){var l=d4e(e,r,a,i),u=X7(Fe.makeSpan(["delimsizing","size"+r],[l],i),tr.TEXT,i,s);return n&&fG(u,i,tr.TEXT),u},"makeLargeDelim"),b7=o(function(e,r,n){var i;r==="Size1-Regular"?i="delim-size1":i="delim-size4";var a=Fe.makeSpan(["delimsizinginner",i],[Fe.makeSpan([],[Fe.makeSymbol(e,r,n)])]);return{type:"elem",elem:a}},"makeGlyphSpan"),w7=o(function(e,r,n){var i=Ql["Size4-Regular"][e.charCodeAt(0)]?Ql["Size4-Regular"][e.charCodeAt(0)][4]:Ql["Size1-Regular"][e.charCodeAt(0)][4],a=new Zl("inner",wbe(e,Math.round(1e3*r))),s=new ul([a],{width:kt(i),height:kt(r),style:"width:"+kt(i),viewBox:"0 0 "+1e3*i+" "+Math.round(1e3*r),preserveAspectRatio:"xMinYMin"}),l=Fe.makeSvgSpan([],[s],n);return l.height=r,l.style.height=kt(r),l.style.width=kt(i),{type:"elem",elem:l}},"makeInner"),B7=.008,d3={type:"kern",size:-1*B7},p4e=["|","\\lvert","\\rvert","\\vert"],m4e=["\\|","\\lVert","\\rVert","\\Vert"],pG=o(function(e,r,n,i,a,s){var l,u,h,f,d="",p=0;l=h=f=e,u=null;var m="Size1-Regular";e==="\\uparrow"?h=f="\u23D0":e==="\\Uparrow"?h=f="\u2016":e==="\\downarrow"?l=h="\u23D0":e==="\\Downarrow"?l=h="\u2016":e==="\\updownarrow"?(l="\\uparrow",h="\u23D0",f="\\downarrow"):e==="\\Updownarrow"?(l="\\Uparrow",h="\u2016",f="\\Downarrow"):Jt.contains(p4e,e)?(h="\u2223",d="vert",p=333):Jt.contains(m4e,e)?(h="\u2225",d="doublevert",p=556):e==="["||e==="\\lbrack"?(l="\u23A1",h="\u23A2",f="\u23A3",m="Size4-Regular",d="lbrack",p=667):e==="]"||e==="\\rbrack"?(l="\u23A4",h="\u23A5",f="\u23A6",m="Size4-Regular",d="rbrack",p=667):e==="\\lfloor"||e==="\u230A"?(h=l="\u23A2",f="\u23A3",m="Size4-Regular",d="lfloor",p=667):e==="\\lceil"||e==="\u2308"?(l="\u23A1",h=f="\u23A2",m="Size4-Regular",d="lceil",p=667):e==="\\rfloor"||e==="\u230B"?(h=l="\u23A5",f="\u23A6",m="Size4-Regular",d="rfloor",p=667):e==="\\rceil"||e==="\u2309"?(l="\u23A4",h=f="\u23A5",m="Size4-Regular",d="rceil",p=667):e==="("||e==="\\lparen"?(l="\u239B",h="\u239C",f="\u239D",m="Size4-Regular",d="lparen",p=875):e===")"||e==="\\rparen"?(l="\u239E",h="\u239F",f="\u23A0",m="Size4-Regular",d="rparen",p=875):e==="\\{"||e==="\\lbrace"?(l="\u23A7",u="\u23A8",f="\u23A9",h="\u23AA",m="Size4-Regular"):e==="\\}"||e==="\\rbrace"?(l="\u23AB",u="\u23AC",f="\u23AD",h="\u23AA",m="Size4-Regular"):e==="\\lgroup"||e==="\u27EE"?(l="\u23A7",f="\u23A9",h="\u23AA",m="Size4-Regular"):e==="\\rgroup"||e==="\u27EF"?(l="\u23AB",f="\u23AD",h="\u23AA",m="Size4-Regular"):e==="\\lmoustache"||e==="\u23B0"?(l="\u23A7",f="\u23AD",h="\u23AA",m="Size4-Regular"):(e==="\\rmoustache"||e==="\u23B1")&&(l="\u23AB",f="\u23A9",h="\u23AA",m="Size4-Regular");var g=qy(l,m,a),y=g.height+g.depth,v=qy(h,m,a),x=v.height+v.depth,b=qy(f,m,a),w=b.height+b.depth,C=0,T=1;if(u!==null){var E=qy(u,m,a);C=E.height+E.depth,T=2}var A=y+w+C,S=Math.max(0,Math.ceil((r-A)/(T*x))),_=A+S*T*x,I=i.fontMetrics().axisHeight;n&&(I*=i.sizeMultiplier);var L=_/2-I,k=[];if(d.length>0){var D=_-y-w,R=Math.round(_*1e3),O=Tbe(d,Math.round(D*1e3)),M=new Zl(d,O),P=(p/1e3).toFixed(3)+"em",B=(R/1e3).toFixed(3)+"em",F=new ul([M],{width:P,height:B,viewBox:"0 0 "+p+" "+R}),z=Fe.makeSvgSpan([],[F],i);z.height=R/1e3,z.style.width=P,z.style.height=B,k.push({type:"elem",elem:z})}else{if(k.push(b7(f,m,a)),k.push(d3),u===null){var $=_-y-w+2*B7;k.push(w7(h,$,i))}else{var U=(_-y-w-C)/2+2*B7;k.push(w7(h,U,i)),k.push(d3),k.push(b7(u,m,a)),k.push(d3),k.push(w7(h,U,i))}k.push(d3),k.push(b7(l,m,a))}var Q=i.havingBaseStyle(tr.TEXT),te=Fe.makeVList({positionType:"bottom",positionData:L,children:k},Q);return X7(Fe.makeSpan(["delimsizing","mult"],[te],Q),tr.TEXT,i,s)},"makeStackedDelim"),T7=80,k7=.08,E7=o(function(e,r,n,i,a){var s=bbe(e,i,n),l=new Zl(e,s),u=new ul([l],{width:"400em",height:kt(r),viewBox:"0 0 400000 "+n,preserveAspectRatio:"xMinYMin slice"});return Fe.makeSvgSpan(["hide-tail"],[u],a)},"sqrtSvg"),g4e=o(function(e,r){var n=r.havingBaseSizing(),i=vG("\\surd",e*n.sizeMultiplier,yG,n),a=n.sizeMultiplier,s=Math.max(0,r.minRuleThickness-r.fontMetrics().sqrtRuleThickness),l,u=0,h=0,f=0,d;return i.type==="small"?(f=1e3+1e3*s+T7,e<1?a=1:e<1.4&&(a=.7),u=(1+s+k7)/a,h=(1+s)/a,l=E7("sqrtMain",u,f,s,r),l.style.minWidth="0.853em",d=.833/a):i.type==="large"?(f=(1e3+T7)*Yy[i.size],h=(Yy[i.size]+s)/a,u=(Yy[i.size]+s+k7)/a,l=E7("sqrtSize"+i.size,u,f,s,r),l.style.minWidth="1.02em",d=1/a):(u=e+s+k7,h=e+s,f=Math.floor(1e3*e+s)+T7,l=E7("sqrtTall",u,f,s,r),l.style.minWidth="0.742em",d=1.056),l.height=h,l.style.height=kt(u),{span:l,advanceWidth:d,ruleWidth:(r.fontMetrics().sqrtRuleThickness+s)*a}},"makeSqrtImage"),mG=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230A","\u230B","\\lceil","\\rceil","\u2308","\u2309","\\surd"],y4e=["\\uparrow","\\downarrow","\\updownarrow","\\Uparrow","\\Downarrow","\\Updownarrow","|","\\|","\\vert","\\Vert","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27EE","\u27EF","\\lmoustache","\\rmoustache","\u23B0","\u23B1"],gG=["<",">","\\langle","\\rangle","/","\\backslash","\\lt","\\gt"],Yy=[0,1.2,1.8,2.4,3],v4e=o(function(e,r,n,i,a){if(e==="<"||e==="\\lt"||e==="\u27E8"?e="\\langle":(e===">"||e==="\\gt"||e==="\u27E9")&&(e="\\rangle"),Jt.contains(mG,e)||Jt.contains(gG,e))return dG(e,r,!1,n,i,a);if(Jt.contains(y4e,e))return pG(e,Yy[r],!1,n,i,a);throw new gt("Illegal delimiter: '"+e+"'")},"makeSizedDelim"),x4e=[{type:"small",style:tr.SCRIPTSCRIPT},{type:"small",style:tr.SCRIPT},{type:"small",style:tr.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}],b4e=[{type:"small",style:tr.SCRIPTSCRIPT},{type:"small",style:tr.SCRIPT},{type:"small",style:tr.TEXT},{type:"stack"}],yG=[{type:"small",style:tr.SCRIPTSCRIPT},{type:"small",style:tr.SCRIPT},{type:"small",style:tr.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}],w4e=o(function(e){if(e.type==="small")return"Main-Regular";if(e.type==="large")return"Size"+e.size+"-Regular";if(e.type==="stack")return"Size4-Regular";throw new Error("Add support for delim type '"+e.type+"' here.")},"delimTypeToFont"),vG=o(function(e,r,n,i){for(var a=Math.min(2,3-i.style.size),s=a;sr)return n[s]}return n[n.length-1]},"traverseSequence"),xG=o(function(e,r,n,i,a,s){e==="<"||e==="\\lt"||e==="\u27E8"?e="\\langle":(e===">"||e==="\\gt"||e==="\u27E9")&&(e="\\rangle");var l;Jt.contains(gG,e)?l=x4e:Jt.contains(mG,e)?l=yG:l=b4e;var u=vG(e,r,l,i);return u.type==="small"?f4e(e,u.style,n,i,a,s):u.type==="large"?dG(e,u.size,n,i,a,s):pG(e,r,n,i,a,s)},"makeCustomSizedDelim"),T4e=o(function(e,r,n,i,a,s){var l=i.fontMetrics().axisHeight*i.sizeMultiplier,u=901,h=5/i.fontMetrics().ptPerEm,f=Math.max(r-l,n+l),d=Math.max(f/500*u,2*f-h);return xG(e,d,!0,i,a,s)},"makeLeftRightDelim"),uu={sqrtImage:g4e,sizedDelim:v4e,sizeToMaxHeight:Yy,customSizedDelim:xG,leftRightDelim:T4e},Ez={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}},k4e=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230A","\u230B","\\lceil","\\rceil","\u2308","\u2309","<",">","\\langle","\u27E8","\\rangle","\u27E9","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27EE","\u27EF","\\lmoustache","\\rmoustache","\u23B0","\u23B1","/","\\backslash","|","\\vert","\\|","\\Vert","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."];o(D3,"checkDelimiter");Nt({type:"delimsizing",names:["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],props:{numArgs:1,argTypes:["primitive"]},handler:o((t,e)=>{var r=D3(e[0],t);return{type:"delimsizing",mode:t.parser.mode,size:Ez[t.funcName].size,mclass:Ez[t.funcName].mclass,delim:r.text}},"handler"),htmlBuilder:o((t,e)=>t.delim==="."?Fe.makeSpan([t.mclass]):uu.sizedDelim(t.delim,t.size,e,t.mode,[t.mclass]),"htmlBuilder"),mathmlBuilder:o(t=>{var e=[];t.delim!=="."&&e.push(Ao(t.delim,t.mode));var r=new dt.MathNode("mo",e);t.mclass==="mopen"||t.mclass==="mclose"?r.setAttribute("fence","true"):r.setAttribute("fence","false"),r.setAttribute("stretchy","true");var n=kt(uu.sizeToMaxHeight[t.size]);return r.setAttribute("minsize",n),r.setAttribute("maxsize",n),r},"mathmlBuilder")});o(Sz,"assertParsed");Nt({type:"leftright-right",names:["\\right"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var r=t.parser.gullet.macros.get("\\current@color");if(r&&typeof r!="string")throw new gt("\\current@color set to non-string in \\right");return{type:"leftright-right",mode:t.parser.mode,delim:D3(e[0],t).text,color:r}},"handler")});Nt({type:"leftright",names:["\\left"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var r=D3(e[0],t),n=t.parser;++n.leftrightDepth;var i=n.parseExpression(!1);--n.leftrightDepth,n.expect("\\right",!1);var a=xr(n.parseFunction(),"leftright-right");return{type:"leftright",mode:n.mode,body:i,left:r.text,right:a.delim,rightColor:a.color}},"handler"),htmlBuilder:o((t,e)=>{Sz(t);for(var r=Fi(t.body,e,!0,["mopen","mclose"]),n=0,i=0,a=!1,s=0;s{Sz(t);var r=Ss(t.body,e);if(t.left!=="."){var n=new dt.MathNode("mo",[Ao(t.left,t.mode)]);n.setAttribute("fence","true"),r.unshift(n)}if(t.right!=="."){var i=new dt.MathNode("mo",[Ao(t.right,t.mode)]);i.setAttribute("fence","true"),t.rightColor&&i.setAttribute("mathcolor",t.rightColor),r.push(i)}return H7(r)},"mathmlBuilder")});Nt({type:"middle",names:["\\middle"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var r=D3(e[0],t);if(!t.parser.leftrightDepth)throw new gt("\\middle without preceding \\left",r);return{type:"middle",mode:t.parser.mode,delim:r.text}},"handler"),htmlBuilder:o((t,e)=>{var r;if(t.delim===".")r=Zy(e,[]);else{r=uu.sizedDelim(t.delim,1,e,t.mode,[]);var n={delim:t.delim,options:e};r.isMiddle=n}return r},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=t.delim==="\\vert"||t.delim==="|"?Ao("|","text"):Ao(t.delim,t.mode),n=new dt.MathNode("mo",[r]);return n.setAttribute("fence","true"),n.setAttribute("lspace","0.05em"),n.setAttribute("rspace","0.05em"),n},"mathmlBuilder")});j7=o((t,e)=>{var r=Fe.wrapFragment(Fr(t.body,e),e),n=t.label.slice(1),i=e.sizeMultiplier,a,s=0,l=Jt.isCharacterBox(t.body);if(n==="sout")a=Fe.makeSpan(["stretchy","sout"]),a.height=e.fontMetrics().defaultRuleThickness/i,s=-.5*e.fontMetrics().xHeight;else if(n==="phase"){var u=ti({number:.6,unit:"pt"},e),h=ti({number:.35,unit:"ex"},e),f=e.havingBaseSizing();i=i/f.sizeMultiplier;var d=r.height+r.depth+u+h;r.style.paddingLeft=kt(d/2+u);var p=Math.floor(1e3*d*i),m=vbe(p),g=new ul([new Zl("phase",m)],{width:"400em",height:kt(p/1e3),viewBox:"0 0 400000 "+p,preserveAspectRatio:"xMinYMin slice"});a=Fe.makeSvgSpan(["hide-tail"],[g],e),a.style.height=kt(d),s=r.depth+u+h}else{/cancel/.test(n)?l||r.classes.push("cancel-pad"):n==="angl"?r.classes.push("anglpad"):r.classes.push("boxpad");var y=0,v=0,x=0;/box/.test(n)?(x=Math.max(e.fontMetrics().fboxrule,e.minRuleThickness),y=e.fontMetrics().fboxsep+(n==="colorbox"?0:x),v=y):n==="angl"?(x=Math.max(e.fontMetrics().defaultRuleThickness,e.minRuleThickness),y=4*x,v=Math.max(0,.25-r.depth)):(y=l?.2:0,v=y),a=fu.encloseSpan(r,n,y,v,e),/fbox|boxed|fcolorbox/.test(n)?(a.style.borderStyle="solid",a.style.borderWidth=kt(x)):n==="angl"&&x!==.049&&(a.style.borderTopWidth=kt(x),a.style.borderRightWidth=kt(x)),s=r.depth+v,t.backgroundColor&&(a.style.backgroundColor=t.backgroundColor,t.borderColor&&(a.style.borderColor=t.borderColor))}var b;if(t.backgroundColor)b=Fe.makeVList({positionType:"individualShift",children:[{type:"elem",elem:a,shift:s},{type:"elem",elem:r,shift:0}]},e);else{var w=/cancel|phase/.test(n)?["svg-align"]:[];b=Fe.makeVList({positionType:"individualShift",children:[{type:"elem",elem:r,shift:0},{type:"elem",elem:a,shift:s,wrapperClasses:w}]},e)}return/cancel/.test(n)&&(b.height=r.height,b.depth=r.depth),/cancel/.test(n)&&!l?Fe.makeSpan(["mord","cancel-lap"],[b],e):Fe.makeSpan(["mord"],[b],e)},"htmlBuilder$7"),K7=o((t,e)=>{var r=0,n=new dt.MathNode(t.label.indexOf("colorbox")>-1?"mpadded":"menclose",[yn(t.body,e)]);switch(t.label){case"\\cancel":n.setAttribute("notation","updiagonalstrike");break;case"\\bcancel":n.setAttribute("notation","downdiagonalstrike");break;case"\\phase":n.setAttribute("notation","phasorangle");break;case"\\sout":n.setAttribute("notation","horizontalstrike");break;case"\\fbox":n.setAttribute("notation","box");break;case"\\angl":n.setAttribute("notation","actuarial");break;case"\\fcolorbox":case"\\colorbox":if(r=e.fontMetrics().fboxsep*e.fontMetrics().ptPerEm,n.setAttribute("width","+"+2*r+"pt"),n.setAttribute("height","+"+2*r+"pt"),n.setAttribute("lspace",r+"pt"),n.setAttribute("voffset",r+"pt"),t.label==="\\fcolorbox"){var i=Math.max(e.fontMetrics().fboxrule,e.minRuleThickness);n.setAttribute("style","border: "+i+"em solid "+String(t.borderColor))}break;case"\\xcancel":n.setAttribute("notation","updiagonalstrike downdiagonalstrike");break}return t.backgroundColor&&n.setAttribute("mathbackground",t.backgroundColor),n},"mathmlBuilder$6");Nt({type:"enclose",names:["\\colorbox"],props:{numArgs:2,allowedInText:!0,argTypes:["color","text"]},handler(t,e,r){var{parser:n,funcName:i}=t,a=xr(e[0],"color-token").color,s=e[1];return{type:"enclose",mode:n.mode,label:i,backgroundColor:a,body:s}},htmlBuilder:j7,mathmlBuilder:K7});Nt({type:"enclose",names:["\\fcolorbox"],props:{numArgs:3,allowedInText:!0,argTypes:["color","color","text"]},handler(t,e,r){var{parser:n,funcName:i}=t,a=xr(e[0],"color-token").color,s=xr(e[1],"color-token").color,l=e[2];return{type:"enclose",mode:n.mode,label:i,backgroundColor:s,borderColor:a,body:l}},htmlBuilder:j7,mathmlBuilder:K7});Nt({type:"enclose",names:["\\fbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler(t,e){var{parser:r}=t;return{type:"enclose",mode:r.mode,label:"\\fbox",body:e[0]}}});Nt({type:"enclose",names:["\\cancel","\\bcancel","\\xcancel","\\sout","\\phase"],props:{numArgs:1},handler(t,e){var{parser:r,funcName:n}=t,i=e[0];return{type:"enclose",mode:r.mode,label:n,body:i}},htmlBuilder:j7,mathmlBuilder:K7});Nt({type:"enclose",names:["\\angl"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!1},handler(t,e){var{parser:r}=t;return{type:"enclose",mode:r.mode,label:"\\angl",body:e[0]}}});bG={};o(Jl,"defineEnvironment");wG={};o(fe,"defineMacro");o(Cz,"getHLines");L3=o(t=>{var e=t.parser.settings;if(!e.displayMode)throw new gt("{"+t.envName+"} can be used only in display mode.")},"validateAmsEnvironmentContext");o(Q7,"getAutoTag");o(vh,"parseArray");o(Z7,"dCellStyle");ec=o(function(e,r){var n,i,a=e.body.length,s=e.hLinesBeforeRow,l=0,u=new Array(a),h=[],f=Math.max(r.fontMetrics().arrayRuleWidth,r.minRuleThickness),d=1/r.fontMetrics().ptPerEm,p=5*d;if(e.colSeparationType&&e.colSeparationType==="small"){var m=r.havingStyle(tr.SCRIPT).sizeMultiplier;p=.2778*(m/r.sizeMultiplier)}var g=e.colSeparationType==="CD"?ti({number:3,unit:"ex"},r):12*d,y=3*d,v=e.arraystretch*g,x=.7*v,b=.3*v,w=0;function C(ae){for(var Oe=0;Oe0&&(w+=.25),h.push({pos:w,isDashed:ae[Oe]})}for(o(C,"setHLinePos"),C(s[0]),n=0;n0&&(L+=b,Aae))for(n=0;n=l)){var Z=void 0;(i>0||e.hskipBeforeAndAfter)&&(Z=Jt.deflt(U.pregap,p),Z!==0&&(O=Fe.makeSpan(["arraycolsep"],[]),O.style.width=kt(Z),R.push(O)));var ue=[];for(n=0;n0){for(var ee=Fe.makeLineSpan("hline",r,f),ce=Fe.makeLineSpan("hdashline",r,f),le=[{type:"elem",elem:u,shift:0}];h.length>0;){var J=h.pop(),Se=J.pos-k;J.isDashed?le.push({type:"elem",elem:ce,shift:Se}):le.push({type:"elem",elem:ee,shift:Se})}u=Fe.makeVList({positionType:"individualShift",children:le},r)}if(P.length===0)return Fe.makeSpan(["mord"],[u],r);var se=Fe.makeVList({positionType:"individualShift",children:P},r);return se=Fe.makeSpan(["tag"],[se],r),Fe.makeFragment([u,se])},"htmlBuilder"),E4e={c:"center ",l:"left ",r:"right "},tc=o(function(e,r){for(var n=[],i=new dt.MathNode("mtd",[],["mtr-glue"]),a=new dt.MathNode("mtd",[],["mml-eqn-num"]),s=0;s0){var g=e.cols,y="",v=!1,x=0,b=g.length;g[0].type==="separator"&&(p+="top ",x=1),g[g.length-1].type==="separator"&&(p+="bottom ",b-=1);for(var w=x;w0?"left ":"",p+=S[S.length-1].length>0?"right ":"";for(var _=1;_-1?"alignat":"align",a=e.envName==="split",s=vh(e.parser,{cols:n,addJot:!0,autoTag:a?void 0:Q7(e.envName),emptySingleRow:!0,colSeparationType:i,maxNumCols:a?2:void 0,leqno:e.parser.settings.leqno},"display"),l,u=0,h={type:"ordgroup",mode:e.mode,body:[]};if(r[0]&&r[0].type==="ordgroup"){for(var f="",d=0;d0&&m&&(v=1),n[g]={type:"align",align:y,pregap:v,postgap:0}}return s.colSeparationType=m?"align":"alignat",s},"alignedHandler");Jl({type:"array",names:["array","darray"],props:{numArgs:1},handler(t,e){var r=A3(e[0]),n=r?[e[0]]:xr(e[0],"ordgroup").body,i=n.map(function(s){var l=q7(s),u=l.text;if("lcr".indexOf(u)!==-1)return{type:"align",align:u};if(u==="|")return{type:"separator",separator:"|"};if(u===":")return{type:"separator",separator:":"};throw new gt("Unknown column alignment: "+u,s)}),a={cols:i,hskipBeforeAndAfter:!0,maxNumCols:i.length};return vh(t.parser,a,Z7(t.envName))},htmlBuilder:ec,mathmlBuilder:tc});Jl({type:"array",names:["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix","matrix*","pmatrix*","bmatrix*","Bmatrix*","vmatrix*","Vmatrix*"],props:{numArgs:0},handler(t){var e={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[t.envName.replace("*","")],r="c",n={hskipBeforeAndAfter:!1,cols:[{type:"align",align:r}]};if(t.envName.charAt(t.envName.length-1)==="*"){var i=t.parser;if(i.consumeSpaces(),i.fetch().text==="["){if(i.consume(),i.consumeSpaces(),r=i.fetch().text,"lcr".indexOf(r)===-1)throw new gt("Expected l or c or r",i.nextToken);i.consume(),i.consumeSpaces(),i.expect("]"),i.consume(),n.cols=[{type:"align",align:r}]}}var a=vh(t.parser,n,Z7(t.envName)),s=Math.max(0,...a.body.map(l=>l.length));return a.cols=new Array(s).fill({type:"align",align:r}),e?{type:"leftright",mode:t.mode,body:[a],left:e[0],right:e[1],rightColor:void 0}:a},htmlBuilder:ec,mathmlBuilder:tc});Jl({type:"array",names:["smallmatrix"],props:{numArgs:0},handler(t){var e={arraystretch:.5},r=vh(t.parser,e,"script");return r.colSeparationType="small",r},htmlBuilder:ec,mathmlBuilder:tc});Jl({type:"array",names:["subarray"],props:{numArgs:1},handler(t,e){var r=A3(e[0]),n=r?[e[0]]:xr(e[0],"ordgroup").body,i=n.map(function(s){var l=q7(s),u=l.text;if("lc".indexOf(u)!==-1)return{type:"align",align:u};throw new gt("Unknown column alignment: "+u,s)});if(i.length>1)throw new gt("{subarray} can contain only one column");var a={cols:i,hskipBeforeAndAfter:!1,arraystretch:.5};if(a=vh(t.parser,a,"script"),a.body.length>0&&a.body[0].length>1)throw new gt("{subarray} can contain only one column");return a},htmlBuilder:ec,mathmlBuilder:tc});Jl({type:"array",names:["cases","dcases","rcases","drcases"],props:{numArgs:0},handler(t){var e={arraystretch:1.2,cols:[{type:"align",align:"l",pregap:0,postgap:1},{type:"align",align:"l",pregap:0,postgap:0}]},r=vh(t.parser,e,Z7(t.envName));return{type:"leftright",mode:t.mode,body:[r],left:t.envName.indexOf("r")>-1?".":"\\{",right:t.envName.indexOf("r")>-1?"\\}":".",rightColor:void 0}},htmlBuilder:ec,mathmlBuilder:tc});Jl({type:"array",names:["align","align*","aligned","split"],props:{numArgs:0},handler:TG,htmlBuilder:ec,mathmlBuilder:tc});Jl({type:"array",names:["gathered","gather","gather*"],props:{numArgs:0},handler(t){Jt.contains(["gather","gather*"],t.envName)&&L3(t);var e={cols:[{type:"align",align:"c"}],addJot:!0,colSeparationType:"gather",autoTag:Q7(t.envName),emptySingleRow:!0,leqno:t.parser.settings.leqno};return vh(t.parser,e,"display")},htmlBuilder:ec,mathmlBuilder:tc});Jl({type:"array",names:["alignat","alignat*","alignedat"],props:{numArgs:1},handler:TG,htmlBuilder:ec,mathmlBuilder:tc});Jl({type:"array",names:["equation","equation*"],props:{numArgs:0},handler(t){L3(t);var e={autoTag:Q7(t.envName),emptySingleRow:!0,singleRow:!0,maxNumCols:1,leqno:t.parser.settings.leqno};return vh(t.parser,e,"display")},htmlBuilder:ec,mathmlBuilder:tc});Jl({type:"array",names:["CD"],props:{numArgs:0},handler(t){return L3(t),u4e(t.parser)},htmlBuilder:ec,mathmlBuilder:tc});fe("\\nonumber","\\gdef\\@eqnsw{0}");fe("\\notag","\\nonumber");Nt({type:"text",names:["\\hline","\\hdashline"],props:{numArgs:0,allowedInText:!0,allowedInMath:!0},handler(t,e){throw new gt(t.funcName+" valid only within array environment")}});Az=bG;Nt({type:"environment",names:["\\begin","\\end"],props:{numArgs:1,argTypes:["text"]},handler(t,e){var{parser:r,funcName:n}=t,i=e[0];if(i.type!=="ordgroup")throw new gt("Invalid environment name",i);for(var a="",s=0;s{var r=t.font,n=e.withFont(r);return Fr(t.body,n)},"htmlBuilder$5"),EG=o((t,e)=>{var r=t.font,n=e.withFont(r);return yn(t.body,n)},"mathmlBuilder$4"),_z={"\\Bbb":"\\mathbb","\\bold":"\\mathbf","\\frak":"\\mathfrak","\\bm":"\\boldsymbol"};Nt({type:"font",names:["\\mathrm","\\mathit","\\mathbf","\\mathnormal","\\mathbb","\\mathcal","\\mathfrak","\\mathscr","\\mathsf","\\mathtt","\\Bbb","\\bold","\\frak"],props:{numArgs:1,allowedInArgument:!0},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=T3(e[0]),a=n;return a in _z&&(a=_z[a]),{type:"font",mode:r.mode,font:a.slice(1),body:i}},"handler"),htmlBuilder:kG,mathmlBuilder:EG});Nt({type:"mclass",names:["\\boldsymbol","\\bm"],props:{numArgs:1},handler:o((t,e)=>{var{parser:r}=t,n=e[0],i=Jt.isCharacterBox(n);return{type:"mclass",mode:r.mode,mclass:_3(n),body:[{type:"font",mode:r.mode,font:"boldsymbol",body:n}],isCharacterBox:i}},"handler")});Nt({type:"font",names:["\\rm","\\sf","\\tt","\\bf","\\it","\\cal"],props:{numArgs:0,allowedInText:!0},handler:o((t,e)=>{var{parser:r,funcName:n,breakOnTokenText:i}=t,{mode:a}=r,s=r.parseExpression(!0,i),l="math"+n.slice(1);return{type:"font",mode:a,font:l,body:{type:"ordgroup",mode:r.mode,body:s}}},"handler"),htmlBuilder:kG,mathmlBuilder:EG});SG=o((t,e)=>{var r=e;return t==="display"?r=r.id>=tr.SCRIPT.id?r.text():tr.DISPLAY:t==="text"&&r.size===tr.DISPLAY.size?r=tr.TEXT:t==="script"?r=tr.SCRIPT:t==="scriptscript"&&(r=tr.SCRIPTSCRIPT),r},"adjustStyle"),J7=o((t,e)=>{var r=SG(t.size,e.style),n=r.fracNum(),i=r.fracDen(),a;a=e.havingStyle(n);var s=Fr(t.numer,a,e);if(t.continued){var l=8.5/e.fontMetrics().ptPerEm,u=3.5/e.fontMetrics().ptPerEm;s.height=s.height0?g=3*p:g=7*p,y=e.fontMetrics().denom1):(d>0?(m=e.fontMetrics().num2,g=p):(m=e.fontMetrics().num3,g=3*p),y=e.fontMetrics().denom2);var v;if(f){var b=e.fontMetrics().axisHeight;m-s.depth-(b+.5*d){var r=new dt.MathNode("mfrac",[yn(t.numer,e),yn(t.denom,e)]);if(!t.hasBarLine)r.setAttribute("linethickness","0px");else if(t.barSize){var n=ti(t.barSize,e);r.setAttribute("linethickness",kt(n))}var i=SG(t.size,e.style);if(i.size!==e.style.size){r=new dt.MathNode("mstyle",[r]);var a=i.size===tr.DISPLAY.size?"true":"false";r.setAttribute("displaystyle",a),r.setAttribute("scriptlevel","0")}if(t.leftDelim!=null||t.rightDelim!=null){var s=[];if(t.leftDelim!=null){var l=new dt.MathNode("mo",[new dt.TextNode(t.leftDelim.replace("\\",""))]);l.setAttribute("fence","true"),s.push(l)}if(s.push(r),t.rightDelim!=null){var u=new dt.MathNode("mo",[new dt.TextNode(t.rightDelim.replace("\\",""))]);u.setAttribute("fence","true"),s.push(u)}return H7(s)}return r},"mathmlBuilder$3");Nt({type:"genfrac",names:["\\dfrac","\\frac","\\tfrac","\\dbinom","\\binom","\\tbinom","\\\\atopfrac","\\\\bracefrac","\\\\brackfrac"],props:{numArgs:2,allowedInArgument:!0},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0],a=e[1],s,l=null,u=null,h="auto";switch(n){case"\\dfrac":case"\\frac":case"\\tfrac":s=!0;break;case"\\\\atopfrac":s=!1;break;case"\\dbinom":case"\\binom":case"\\tbinom":s=!1,l="(",u=")";break;case"\\\\bracefrac":s=!1,l="\\{",u="\\}";break;case"\\\\brackfrac":s=!1,l="[",u="]";break;default:throw new Error("Unrecognized genfrac command")}switch(n){case"\\dfrac":case"\\dbinom":h="display";break;case"\\tfrac":case"\\tbinom":h="text";break}return{type:"genfrac",mode:r.mode,continued:!1,numer:i,denom:a,hasBarLine:s,leftDelim:l,rightDelim:u,size:h,barSize:null}},"handler"),htmlBuilder:J7,mathmlBuilder:eA});Nt({type:"genfrac",names:["\\cfrac"],props:{numArgs:2},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0],a=e[1];return{type:"genfrac",mode:r.mode,continued:!0,numer:i,denom:a,hasBarLine:!0,leftDelim:null,rightDelim:null,size:"display",barSize:null}},"handler")});Nt({type:"infix",names:["\\over","\\choose","\\atop","\\brace","\\brack"],props:{numArgs:0,infix:!0},handler(t){var{parser:e,funcName:r,token:n}=t,i;switch(r){case"\\over":i="\\frac";break;case"\\choose":i="\\binom";break;case"\\atop":i="\\\\atopfrac";break;case"\\brace":i="\\\\bracefrac";break;case"\\brack":i="\\\\brackfrac";break;default:throw new Error("Unrecognized infix genfrac command")}return{type:"infix",mode:e.mode,replaceWith:i,token:n}}});Dz=["display","text","script","scriptscript"],Lz=o(function(e){var r=null;return e.length>0&&(r=e,r=r==="."?null:r),r},"delimFromValue");Nt({type:"genfrac",names:["\\genfrac"],props:{numArgs:6,allowedInArgument:!0,argTypes:["math","math","size","text","math","math"]},handler(t,e){var{parser:r}=t,n=e[4],i=e[5],a=T3(e[0]),s=a.type==="atom"&&a.family==="open"?Lz(a.text):null,l=T3(e[1]),u=l.type==="atom"&&l.family==="close"?Lz(l.text):null,h=xr(e[2],"size"),f,d=null;h.isBlank?f=!0:(d=h.value,f=d.number>0);var p="auto",m=e[3];if(m.type==="ordgroup"){if(m.body.length>0){var g=xr(m.body[0],"textord");p=Dz[Number(g.text)]}}else m=xr(m,"textord"),p=Dz[Number(m.text)];return{type:"genfrac",mode:r.mode,numer:n,denom:i,continued:!1,hasBarLine:f,barSize:d,leftDelim:s,rightDelim:u,size:p}},htmlBuilder:J7,mathmlBuilder:eA});Nt({type:"infix",names:["\\above"],props:{numArgs:1,argTypes:["size"],infix:!0},handler(t,e){var{parser:r,funcName:n,token:i}=t;return{type:"infix",mode:r.mode,replaceWith:"\\\\abovefrac",size:xr(e[0],"size").value,token:i}}});Nt({type:"genfrac",names:["\\\\abovefrac"],props:{numArgs:3,argTypes:["math","size","math"]},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0],a=nbe(xr(e[1],"infix").size),s=e[2],l=a.number>0;return{type:"genfrac",mode:r.mode,numer:i,denom:s,continued:!1,hasBarLine:l,barSize:a,leftDelim:null,rightDelim:null,size:"auto"}},"handler"),htmlBuilder:J7,mathmlBuilder:eA});CG=o((t,e)=>{var r=e.style,n,i;t.type==="supsub"?(n=t.sup?Fr(t.sup,e.havingStyle(r.sup()),e):Fr(t.sub,e.havingStyle(r.sub()),e),i=xr(t.base,"horizBrace")):i=xr(t,"horizBrace");var a=Fr(i.base,e.havingBaseStyle(tr.DISPLAY)),s=fu.svgSpan(i,e),l;if(i.isOver?(l=Fe.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:a},{type:"kern",size:.1},{type:"elem",elem:s}]},e),l.children[0].children[0].children[1].classes.push("svg-align")):(l=Fe.makeVList({positionType:"bottom",positionData:a.depth+.1+s.height,children:[{type:"elem",elem:s},{type:"kern",size:.1},{type:"elem",elem:a}]},e),l.children[0].children[0].children[0].classes.push("svg-align")),n){var u=Fe.makeSpan(["mord",i.isOver?"mover":"munder"],[l],e);i.isOver?l=Fe.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:u},{type:"kern",size:.2},{type:"elem",elem:n}]},e):l=Fe.makeVList({positionType:"bottom",positionData:u.depth+.2+n.height+n.depth,children:[{type:"elem",elem:n},{type:"kern",size:.2},{type:"elem",elem:u}]},e)}return Fe.makeSpan(["mord",i.isOver?"mover":"munder"],[l],e)},"htmlBuilder$3"),S4e=o((t,e)=>{var r=fu.mathMLnode(t.label);return new dt.MathNode(t.isOver?"mover":"munder",[yn(t.base,e),r])},"mathmlBuilder$2");Nt({type:"horizBrace",names:["\\overbrace","\\underbrace"],props:{numArgs:1},handler(t,e){var{parser:r,funcName:n}=t;return{type:"horizBrace",mode:r.mode,label:n,isOver:/^\\over/.test(n),base:e[0]}},htmlBuilder:CG,mathmlBuilder:S4e});Nt({type:"href",names:["\\href"],props:{numArgs:2,argTypes:["url","original"],allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[1],i=xr(e[0],"url").url;return r.settings.isTrusted({command:"\\href",url:i})?{type:"href",mode:r.mode,href:i,body:di(n)}:r.formatUnsupportedCmd("\\href")},"handler"),htmlBuilder:o((t,e)=>{var r=Fi(t.body,e,!1);return Fe.makeAnchor(t.href,[],r,e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=yh(t.body,e);return r instanceof ks||(r=new ks("mrow",[r])),r.setAttribute("href",t.href),r},"mathmlBuilder")});Nt({type:"href",names:["\\url"],props:{numArgs:1,argTypes:["url"],allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=xr(e[0],"url").url;if(!r.settings.isTrusted({command:"\\url",url:n}))return r.formatUnsupportedCmd("\\url");for(var i=[],a=0;a{var{parser:r,funcName:n,token:i}=t,a=xr(e[0],"raw").string,s=e[1];r.settings.strict&&r.settings.reportNonstrict("htmlExtension","HTML extension is disabled on strict mode");var l,u={};switch(n){case"\\htmlClass":u.class=a,l={command:"\\htmlClass",class:a};break;case"\\htmlId":u.id=a,l={command:"\\htmlId",id:a};break;case"\\htmlStyle":u.style=a,l={command:"\\htmlStyle",style:a};break;case"\\htmlData":{for(var h=a.split(","),f=0;f{var r=Fi(t.body,e,!1),n=["enclosing"];t.attributes.class&&n.push(...t.attributes.class.trim().split(/\s+/));var i=Fe.makeSpan(n,r,e);for(var a in t.attributes)a!=="class"&&t.attributes.hasOwnProperty(a)&&i.setAttribute(a,t.attributes[a]);return i},"htmlBuilder"),mathmlBuilder:o((t,e)=>yh(t.body,e),"mathmlBuilder")});Nt({type:"htmlmathml",names:["\\html@mathml"],props:{numArgs:2,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t;return{type:"htmlmathml",mode:r.mode,html:di(e[0]),mathml:di(e[1])}},"handler"),htmlBuilder:o((t,e)=>{var r=Fi(t.html,e,!1);return Fe.makeFragment(r)},"htmlBuilder"),mathmlBuilder:o((t,e)=>yh(t.mathml,e),"mathmlBuilder")});S7=o(function(e){if(/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(e))return{number:+e,unit:"bp"};var r=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(e);if(!r)throw new gt("Invalid size: '"+e+"' in \\includegraphics");var n={number:+(r[1]+r[2]),unit:r[3]};if(!Wz(n))throw new gt("Invalid unit: '"+n.unit+"' in \\includegraphics.");return n},"sizeData");Nt({type:"includegraphics",names:["\\includegraphics"],props:{numArgs:1,numOptionalArgs:1,argTypes:["raw","url"],allowedInText:!1},handler:o((t,e,r)=>{var{parser:n}=t,i={number:0,unit:"em"},a={number:.9,unit:"em"},s={number:0,unit:"em"},l="";if(r[0])for(var u=xr(r[0],"raw").string,h=u.split(","),f=0;f{var r=ti(t.height,e),n=0;t.totalheight.number>0&&(n=ti(t.totalheight,e)-r);var i=0;t.width.number>0&&(i=ti(t.width,e));var a={height:kt(r+n)};i>0&&(a.width=kt(i)),n>0&&(a.verticalAlign=kt(-n));var s=new R7(t.src,t.alt,a);return s.height=r,s.depth=n,s},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=new dt.MathNode("mglyph",[]);r.setAttribute("alt",t.alt);var n=ti(t.height,e),i=0;if(t.totalheight.number>0&&(i=ti(t.totalheight,e)-n,r.setAttribute("valign",kt(-i))),r.setAttribute("height",kt(n+i)),t.width.number>0){var a=ti(t.width,e);r.setAttribute("width",kt(a))}return r.setAttribute("src",t.src),r},"mathmlBuilder")});Nt({type:"kern",names:["\\kern","\\mkern","\\hskip","\\mskip"],props:{numArgs:1,argTypes:["size"],primitive:!0,allowedInText:!0},handler(t,e){var{parser:r,funcName:n}=t,i=xr(e[0],"size");if(r.settings.strict){var a=n[1]==="m",s=i.value.unit==="mu";a?(s||r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" supports only mu units, "+("not "+i.value.unit+" units")),r.mode!=="math"&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" works only in math mode")):s&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" doesn't support mu units")}return{type:"kern",mode:r.mode,dimension:i.value}},htmlBuilder(t,e){return Fe.makeGlue(t.dimension,e)},mathmlBuilder(t,e){var r=ti(t.dimension,e);return new dt.SpaceNode(r)}});Nt({type:"lap",names:["\\mathllap","\\mathrlap","\\mathclap"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0];return{type:"lap",mode:r.mode,alignment:n.slice(5),body:i}},"handler"),htmlBuilder:o((t,e)=>{var r;t.alignment==="clap"?(r=Fe.makeSpan([],[Fr(t.body,e)]),r=Fe.makeSpan(["inner"],[r],e)):r=Fe.makeSpan(["inner"],[Fr(t.body,e)]);var n=Fe.makeSpan(["fix"],[]),i=Fe.makeSpan([t.alignment],[r,n],e),a=Fe.makeSpan(["strut"]);return a.style.height=kt(i.height+i.depth),i.depth&&(a.style.verticalAlign=kt(-i.depth)),i.children.unshift(a),i=Fe.makeSpan(["thinbox"],[i],e),Fe.makeSpan(["mord","vbox"],[i],e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=new dt.MathNode("mpadded",[yn(t.body,e)]);if(t.alignment!=="rlap"){var n=t.alignment==="llap"?"-1":"-0.5";r.setAttribute("lspace",n+"width")}return r.setAttribute("width","0px"),r},"mathmlBuilder")});Nt({type:"styling",names:["\\(","$"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(t,e){var{funcName:r,parser:n}=t,i=n.mode;n.switchMode("math");var a=r==="\\("?"\\)":"$",s=n.parseExpression(!1,a);return n.expect(a),n.switchMode(i),{type:"styling",mode:n.mode,style:"text",body:s}}});Nt({type:"text",names:["\\)","\\]"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(t,e){throw new gt("Mismatched "+t.funcName)}});Rz=o((t,e)=>{switch(e.style.size){case tr.DISPLAY.size:return t.display;case tr.TEXT.size:return t.text;case tr.SCRIPT.size:return t.script;case tr.SCRIPTSCRIPT.size:return t.scriptscript;default:return t.text}},"chooseMathStyle");Nt({type:"mathchoice",names:["\\mathchoice"],props:{numArgs:4,primitive:!0},handler:o((t,e)=>{var{parser:r}=t;return{type:"mathchoice",mode:r.mode,display:di(e[0]),text:di(e[1]),script:di(e[2]),scriptscript:di(e[3])}},"handler"),htmlBuilder:o((t,e)=>{var r=Rz(t,e),n=Fi(r,e,!1);return Fe.makeFragment(n)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=Rz(t,e);return yh(r,e)},"mathmlBuilder")});AG=o((t,e,r,n,i,a,s)=>{t=Fe.makeSpan([],[t]);var l=r&&Jt.isCharacterBox(r),u,h;if(e){var f=Fr(e,n.havingStyle(i.sup()),n);h={elem:f,kern:Math.max(n.fontMetrics().bigOpSpacing1,n.fontMetrics().bigOpSpacing3-f.depth)}}if(r){var d=Fr(r,n.havingStyle(i.sub()),n);u={elem:d,kern:Math.max(n.fontMetrics().bigOpSpacing2,n.fontMetrics().bigOpSpacing4-d.height)}}var p;if(h&&u){var m=n.fontMetrics().bigOpSpacing5+u.elem.height+u.elem.depth+u.kern+t.depth+s;p=Fe.makeVList({positionType:"bottom",positionData:m,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:u.elem,marginLeft:kt(-a)},{type:"kern",size:u.kern},{type:"elem",elem:t},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:kt(a)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]},n)}else if(u){var g=t.height-s;p=Fe.makeVList({positionType:"top",positionData:g,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:u.elem,marginLeft:kt(-a)},{type:"kern",size:u.kern},{type:"elem",elem:t}]},n)}else if(h){var y=t.depth+s;p=Fe.makeVList({positionType:"bottom",positionData:y,children:[{type:"elem",elem:t},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:kt(a)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]},n)}else return t;var v=[p];if(u&&a!==0&&!l){var x=Fe.makeSpan(["mspace"],[],n);x.style.marginRight=kt(a),v.unshift(x)}return Fe.makeSpan(["mop","op-limits"],v,n)},"assembleSupSub"),_G=["\\smallint"],T0=o((t,e)=>{var r,n,i=!1,a;t.type==="supsub"?(r=t.sup,n=t.sub,a=xr(t.base,"op"),i=!0):a=xr(t,"op");var s=e.style,l=!1;s.size===tr.DISPLAY.size&&a.symbol&&!Jt.contains(_G,a.name)&&(l=!0);var u;if(a.symbol){var h=l?"Size2-Regular":"Size1-Regular",f="";if((a.name==="\\oiint"||a.name==="\\oiiint")&&(f=a.name.slice(1),a.name=f==="oiint"?"\\iint":"\\iiint"),u=Fe.makeSymbol(a.name,h,"math",e,["mop","op-symbol",l?"large-op":"small-op"]),f.length>0){var d=u.italic,p=Fe.staticSvg(f+"Size"+(l?"2":"1"),e);u=Fe.makeVList({positionType:"individualShift",children:[{type:"elem",elem:u,shift:0},{type:"elem",elem:p,shift:l?.08:0}]},e),a.name="\\"+f,u.classes.unshift("mop"),u.italic=d}}else if(a.body){var m=Fi(a.body,e,!0);m.length===1&&m[0]instanceof Es?(u=m[0],u.classes[0]="mop"):u=Fe.makeSpan(["mop"],m,e)}else{for(var g=[],y=1;y{var r;if(t.symbol)r=new ks("mo",[Ao(t.name,t.mode)]),Jt.contains(_G,t.name)&&r.setAttribute("largeop","false");else if(t.body)r=new ks("mo",Ss(t.body,e));else{r=new ks("mi",[new ad(t.name.slice(1))]);var n=new ks("mo",[Ao("\u2061","text")]);t.parentIsSupSub?r=new ks("mrow",[r,n]):r=rG([r,n])}return r},"mathmlBuilder$1"),C4e={"\u220F":"\\prod","\u2210":"\\coprod","\u2211":"\\sum","\u22C0":"\\bigwedge","\u22C1":"\\bigvee","\u22C2":"\\bigcap","\u22C3":"\\bigcup","\u2A00":"\\bigodot","\u2A01":"\\bigoplus","\u2A02":"\\bigotimes","\u2A04":"\\biguplus","\u2A06":"\\bigsqcup"};Nt({type:"op",names:["\\coprod","\\bigvee","\\bigwedge","\\biguplus","\\bigcap","\\bigcup","\\intop","\\prod","\\sum","\\bigotimes","\\bigoplus","\\bigodot","\\bigsqcup","\\smallint","\u220F","\u2210","\u2211","\u22C0","\u22C1","\u22C2","\u22C3","\u2A00","\u2A01","\u2A02","\u2A04","\u2A06"],props:{numArgs:0},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=n;return i.length===1&&(i=C4e[i]),{type:"op",mode:r.mode,limits:!0,parentIsSupSub:!1,symbol:!0,name:i}},"handler"),htmlBuilder:T0,mathmlBuilder:Jy});Nt({type:"op",names:["\\mathop"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[0];return{type:"op",mode:r.mode,limits:!1,parentIsSupSub:!1,symbol:!1,body:di(n)}},"handler"),htmlBuilder:T0,mathmlBuilder:Jy});A4e={"\u222B":"\\int","\u222C":"\\iint","\u222D":"\\iiint","\u222E":"\\oint","\u222F":"\\oiint","\u2230":"\\oiiint"};Nt({type:"op",names:["\\arcsin","\\arccos","\\arctan","\\arctg","\\arcctg","\\arg","\\ch","\\cos","\\cosec","\\cosh","\\cot","\\cotg","\\coth","\\csc","\\ctg","\\cth","\\deg","\\dim","\\exp","\\hom","\\ker","\\lg","\\ln","\\log","\\sec","\\sin","\\sinh","\\sh","\\tan","\\tanh","\\tg","\\th"],props:{numArgs:0},handler(t){var{parser:e,funcName:r}=t;return{type:"op",mode:e.mode,limits:!1,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:T0,mathmlBuilder:Jy});Nt({type:"op",names:["\\det","\\gcd","\\inf","\\lim","\\max","\\min","\\Pr","\\sup"],props:{numArgs:0},handler(t){var{parser:e,funcName:r}=t;return{type:"op",mode:e.mode,limits:!0,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:T0,mathmlBuilder:Jy});Nt({type:"op",names:["\\int","\\iint","\\iiint","\\oint","\\oiint","\\oiiint","\u222B","\u222C","\u222D","\u222E","\u222F","\u2230"],props:{numArgs:0},handler(t){var{parser:e,funcName:r}=t,n=r;return n.length===1&&(n=A4e[n]),{type:"op",mode:e.mode,limits:!1,parentIsSupSub:!1,symbol:!0,name:n}},htmlBuilder:T0,mathmlBuilder:Jy});DG=o((t,e)=>{var r,n,i=!1,a;t.type==="supsub"?(r=t.sup,n=t.sub,a=xr(t.base,"operatorname"),i=!0):a=xr(t,"operatorname");var s;if(a.body.length>0){for(var l=a.body.map(d=>{var p=d.text;return typeof p=="string"?{type:"textord",mode:d.mode,text:p}:d}),u=Fi(l,e.withFont("mathrm"),!0),h=0;h{for(var r=Ss(t.body,e.withFont("mathrm")),n=!0,i=0;if.toText()).join("");r=[new dt.TextNode(l)]}var u=new dt.MathNode("mi",r);u.setAttribute("mathvariant","normal");var h=new dt.MathNode("mo",[Ao("\u2061","text")]);return t.parentIsSupSub?new dt.MathNode("mrow",[u,h]):dt.newDocumentFragment([u,h])},"mathmlBuilder");Nt({type:"operatorname",names:["\\operatorname@","\\operatornamewithlimits"],props:{numArgs:1},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0];return{type:"operatorname",mode:r.mode,body:di(i),alwaysHandleSupSub:n==="\\operatornamewithlimits",limits:!1,parentIsSupSub:!1}},"handler"),htmlBuilder:DG,mathmlBuilder:_4e});fe("\\operatorname","\\@ifstar\\operatornamewithlimits\\operatorname@");ld({type:"ordgroup",htmlBuilder(t,e){return t.semisimple?Fe.makeFragment(Fi(t.body,e,!1)):Fe.makeSpan(["mord"],Fi(t.body,e,!0),e)},mathmlBuilder(t,e){return yh(t.body,e,!0)}});Nt({type:"overline",names:["\\overline"],props:{numArgs:1},handler(t,e){var{parser:r}=t,n=e[0];return{type:"overline",mode:r.mode,body:n}},htmlBuilder(t,e){var r=Fr(t.body,e.havingCrampedStyle()),n=Fe.makeLineSpan("overline-line",e),i=e.fontMetrics().defaultRuleThickness,a=Fe.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r},{type:"kern",size:3*i},{type:"elem",elem:n},{type:"kern",size:i}]},e);return Fe.makeSpan(["mord","overline"],[a],e)},mathmlBuilder(t,e){var r=new dt.MathNode("mo",[new dt.TextNode("\u203E")]);r.setAttribute("stretchy","true");var n=new dt.MathNode("mover",[yn(t.body,e),r]);return n.setAttribute("accent","true"),n}});Nt({type:"phantom",names:["\\phantom"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[0];return{type:"phantom",mode:r.mode,body:di(n)}},"handler"),htmlBuilder:o((t,e)=>{var r=Fi(t.body,e.withPhantom(),!1);return Fe.makeFragment(r)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=Ss(t.body,e);return new dt.MathNode("mphantom",r)},"mathmlBuilder")});Nt({type:"hphantom",names:["\\hphantom"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[0];return{type:"hphantom",mode:r.mode,body:n}},"handler"),htmlBuilder:o((t,e)=>{var r=Fe.makeSpan([],[Fr(t.body,e.withPhantom())]);if(r.height=0,r.depth=0,r.children)for(var n=0;n{var r=Ss(di(t.body),e),n=new dt.MathNode("mphantom",r),i=new dt.MathNode("mpadded",[n]);return i.setAttribute("height","0px"),i.setAttribute("depth","0px"),i},"mathmlBuilder")});Nt({type:"vphantom",names:["\\vphantom"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[0];return{type:"vphantom",mode:r.mode,body:n}},"handler"),htmlBuilder:o((t,e)=>{var r=Fe.makeSpan(["inner"],[Fr(t.body,e.withPhantom())]),n=Fe.makeSpan(["fix"],[]);return Fe.makeSpan(["mord","rlap"],[r,n],e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=Ss(di(t.body),e),n=new dt.MathNode("mphantom",r),i=new dt.MathNode("mpadded",[n]);return i.setAttribute("width","0px"),i},"mathmlBuilder")});Nt({type:"raisebox",names:["\\raisebox"],props:{numArgs:2,argTypes:["size","hbox"],allowedInText:!0},handler(t,e){var{parser:r}=t,n=xr(e[0],"size").value,i=e[1];return{type:"raisebox",mode:r.mode,dy:n,body:i}},htmlBuilder(t,e){var r=Fr(t.body,e),n=ti(t.dy,e);return Fe.makeVList({positionType:"shift",positionData:-n,children:[{type:"elem",elem:r}]},e)},mathmlBuilder(t,e){var r=new dt.MathNode("mpadded",[yn(t.body,e)]),n=t.dy.number+t.dy.unit;return r.setAttribute("voffset",n),r}});Nt({type:"internal",names:["\\relax"],props:{numArgs:0,allowedInText:!0},handler(t){var{parser:e}=t;return{type:"internal",mode:e.mode}}});Nt({type:"rule",names:["\\rule"],props:{numArgs:2,numOptionalArgs:1,argTypes:["size","size","size"]},handler(t,e,r){var{parser:n}=t,i=r[0],a=xr(e[0],"size"),s=xr(e[1],"size");return{type:"rule",mode:n.mode,shift:i&&xr(i,"size").value,width:a.value,height:s.value}},htmlBuilder(t,e){var r=Fe.makeSpan(["mord","rule"],[],e),n=ti(t.width,e),i=ti(t.height,e),a=t.shift?ti(t.shift,e):0;return r.style.borderRightWidth=kt(n),r.style.borderTopWidth=kt(i),r.style.bottom=kt(a),r.width=n,r.height=i+a,r.depth=-a,r.maxFontSize=i*1.125*e.sizeMultiplier,r},mathmlBuilder(t,e){var r=ti(t.width,e),n=ti(t.height,e),i=t.shift?ti(t.shift,e):0,a=e.color&&e.getColor()||"black",s=new dt.MathNode("mspace");s.setAttribute("mathbackground",a),s.setAttribute("width",kt(r)),s.setAttribute("height",kt(n));var l=new dt.MathNode("mpadded",[s]);return i>=0?l.setAttribute("height",kt(i)):(l.setAttribute("height",kt(i)),l.setAttribute("depth",kt(-i))),l.setAttribute("voffset",kt(i)),l}});o(LG,"sizingGroup");Nz=["\\tiny","\\sixptsize","\\scriptsize","\\footnotesize","\\small","\\normalsize","\\large","\\Large","\\LARGE","\\huge","\\Huge"],D4e=o((t,e)=>{var r=e.havingSize(t.size);return LG(t.body,r,e)},"htmlBuilder");Nt({type:"sizing",names:Nz,props:{numArgs:0,allowedInText:!0},handler:o((t,e)=>{var{breakOnTokenText:r,funcName:n,parser:i}=t,a=i.parseExpression(!1,r);return{type:"sizing",mode:i.mode,size:Nz.indexOf(n)+1,body:a}},"handler"),htmlBuilder:D4e,mathmlBuilder:o((t,e)=>{var r=e.havingSize(t.size),n=Ss(t.body,r),i=new dt.MathNode("mstyle",n);return i.setAttribute("mathsize",kt(r.sizeMultiplier)),i},"mathmlBuilder")});Nt({type:"smash",names:["\\smash"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler:o((t,e,r)=>{var{parser:n}=t,i=!1,a=!1,s=r[0]&&xr(r[0],"ordgroup");if(s)for(var l="",u=0;u{var r=Fe.makeSpan([],[Fr(t.body,e)]);if(!t.smashHeight&&!t.smashDepth)return r;if(t.smashHeight&&(r.height=0,r.children))for(var n=0;n{var r=new dt.MathNode("mpadded",[yn(t.body,e)]);return t.smashHeight&&r.setAttribute("height","0px"),t.smashDepth&&r.setAttribute("depth","0px"),r},"mathmlBuilder")});Nt({type:"sqrt",names:["\\sqrt"],props:{numArgs:1,numOptionalArgs:1},handler(t,e,r){var{parser:n}=t,i=r[0],a=e[0];return{type:"sqrt",mode:n.mode,body:a,index:i}},htmlBuilder(t,e){var r=Fr(t.body,e.havingCrampedStyle());r.height===0&&(r.height=e.fontMetrics().xHeight),r=Fe.wrapFragment(r,e);var n=e.fontMetrics(),i=n.defaultRuleThickness,a=i;e.style.idr.height+r.depth+s&&(s=(s+d-r.height-r.depth)/2);var p=u.height-r.height-s-h;r.style.paddingLeft=kt(f);var m=Fe.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r,wrapperClasses:["svg-align"]},{type:"kern",size:-(r.height+p)},{type:"elem",elem:u},{type:"kern",size:h}]},e);if(t.index){var g=e.havingStyle(tr.SCRIPTSCRIPT),y=Fr(t.index,g,e),v=.6*(m.height-m.depth),x=Fe.makeVList({positionType:"shift",positionData:-v,children:[{type:"elem",elem:y}]},e),b=Fe.makeSpan(["root"],[x]);return Fe.makeSpan(["mord","sqrt"],[b,m],e)}else return Fe.makeSpan(["mord","sqrt"],[m],e)},mathmlBuilder(t,e){var{body:r,index:n}=t;return n?new dt.MathNode("mroot",[yn(r,e),yn(n,e)]):new dt.MathNode("msqrt",[yn(r,e)])}});Mz={display:tr.DISPLAY,text:tr.TEXT,script:tr.SCRIPT,scriptscript:tr.SCRIPTSCRIPT};Nt({type:"styling",names:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t,e){var{breakOnTokenText:r,funcName:n,parser:i}=t,a=i.parseExpression(!0,r),s=n.slice(1,n.length-5);return{type:"styling",mode:i.mode,style:s,body:a}},htmlBuilder(t,e){var r=Mz[t.style],n=e.havingStyle(r).withFont("");return LG(t.body,n,e)},mathmlBuilder(t,e){var r=Mz[t.style],n=e.havingStyle(r),i=Ss(t.body,n),a=new dt.MathNode("mstyle",i),s={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]},l=s[t.style];return a.setAttribute("scriptlevel",l[0]),a.setAttribute("displaystyle",l[1]),a}});L4e=o(function(e,r){var n=e.base;if(n)if(n.type==="op"){var i=n.limits&&(r.style.size===tr.DISPLAY.size||n.alwaysHandleSupSub);return i?T0:null}else if(n.type==="operatorname"){var a=n.alwaysHandleSupSub&&(r.style.size===tr.DISPLAY.size||n.limits);return a?DG:null}else{if(n.type==="accent")return Jt.isCharacterBox(n.base)?Y7:null;if(n.type==="horizBrace"){var s=!e.sub;return s===n.isOver?CG:null}else return null}else return null},"htmlBuilderDelegate");ld({type:"supsub",htmlBuilder(t,e){var r=L4e(t,e);if(r)return r(t,e);var{base:n,sup:i,sub:a}=t,s=Fr(n,e),l,u,h=e.fontMetrics(),f=0,d=0,p=n&&Jt.isCharacterBox(n);if(i){var m=e.havingStyle(e.style.sup());l=Fr(i,m,e),p||(f=s.height-m.fontMetrics().supDrop*m.sizeMultiplier/e.sizeMultiplier)}if(a){var g=e.havingStyle(e.style.sub());u=Fr(a,g,e),p||(d=s.depth+g.fontMetrics().subDrop*g.sizeMultiplier/e.sizeMultiplier)}var y;e.style===tr.DISPLAY?y=h.sup1:e.style.cramped?y=h.sup3:y=h.sup2;var v=e.sizeMultiplier,x=kt(.5/h.ptPerEm/v),b=null;if(u){var w=t.base&&t.base.type==="op"&&t.base.name&&(t.base.name==="\\oiint"||t.base.name==="\\oiiint");(s instanceof Es||w)&&(b=kt(-s.italic))}var C;if(l&&u){f=Math.max(f,y,l.depth+.25*h.xHeight),d=Math.max(d,h.sub2);var T=h.defaultRuleThickness,E=4*T;if(f-l.depth-(u.height-d)0&&(f+=A,d-=A)}var S=[{type:"elem",elem:u,shift:d,marginRight:x,marginLeft:b},{type:"elem",elem:l,shift:-f,marginRight:x}];C=Fe.makeVList({positionType:"individualShift",children:S},e)}else if(u){d=Math.max(d,h.sub1,u.height-.8*h.xHeight);var _=[{type:"elem",elem:u,marginLeft:b,marginRight:x}];C=Fe.makeVList({positionType:"shift",positionData:d,children:_},e)}else if(l)f=Math.max(f,y,l.depth+.25*h.xHeight),C=Fe.makeVList({positionType:"shift",positionData:-f,children:[{type:"elem",elem:l,marginRight:x}]},e);else throw new Error("supsub must have either sup or sub.");var I=M7(s,"right")||"mord";return Fe.makeSpan([I],[s,Fe.makeSpan(["msupsub"],[C])],e)},mathmlBuilder(t,e){var r=!1,n,i;t.base&&t.base.type==="horizBrace"&&(i=!!t.sup,i===t.base.isOver&&(r=!0,n=t.base.isOver)),t.base&&(t.base.type==="op"||t.base.type==="operatorname")&&(t.base.parentIsSupSub=!0);var a=[yn(t.base,e)];t.sub&&a.push(yn(t.sub,e)),t.sup&&a.push(yn(t.sup,e));var s;if(r)s=n?"mover":"munder";else if(t.sub)if(t.sup){var h=t.base;h&&h.type==="op"&&h.limits&&e.style===tr.DISPLAY||h&&h.type==="operatorname"&&h.alwaysHandleSupSub&&(e.style===tr.DISPLAY||h.limits)?s="munderover":s="msubsup"}else{var u=t.base;u&&u.type==="op"&&u.limits&&(e.style===tr.DISPLAY||u.alwaysHandleSupSub)||u&&u.type==="operatorname"&&u.alwaysHandleSupSub&&(u.limits||e.style===tr.DISPLAY)?s="munder":s="msub"}else{var l=t.base;l&&l.type==="op"&&l.limits&&(e.style===tr.DISPLAY||l.alwaysHandleSupSub)||l&&l.type==="operatorname"&&l.alwaysHandleSupSub&&(l.limits||e.style===tr.DISPLAY)?s="mover":s="msup"}return new dt.MathNode(s,a)}});ld({type:"atom",htmlBuilder(t,e){return Fe.mathsym(t.text,t.mode,e,["m"+t.family])},mathmlBuilder(t,e){var r=new dt.MathNode("mo",[Ao(t.text,t.mode)]);if(t.family==="bin"){var n=W7(t,e);n==="bold-italic"&&r.setAttribute("mathvariant",n)}else t.family==="punct"?r.setAttribute("separator","true"):(t.family==="open"||t.family==="close")&&r.setAttribute("stretchy","false");return r}});RG={mi:"italic",mn:"normal",mtext:"normal"};ld({type:"mathord",htmlBuilder(t,e){return Fe.makeOrd(t,e,"mathord")},mathmlBuilder(t,e){var r=new dt.MathNode("mi",[Ao(t.text,t.mode,e)]),n=W7(t,e)||"italic";return n!==RG[r.type]&&r.setAttribute("mathvariant",n),r}});ld({type:"textord",htmlBuilder(t,e){return Fe.makeOrd(t,e,"textord")},mathmlBuilder(t,e){var r=Ao(t.text,t.mode,e),n=W7(t,e)||"normal",i;return t.mode==="text"?i=new dt.MathNode("mtext",[r]):/[0-9]/.test(t.text)?i=new dt.MathNode("mn",[r]):t.text==="\\prime"?i=new dt.MathNode("mo",[r]):i=new dt.MathNode("mi",[r]),n!==RG[i.type]&&i.setAttribute("mathvariant",n),i}});C7={"\\nobreak":"nobreak","\\allowbreak":"allowbreak"},A7={" ":{},"\\ ":{},"~":{className:"nobreak"},"\\space":{},"\\nobreakspace":{className:"nobreak"}};ld({type:"spacing",htmlBuilder(t,e){if(A7.hasOwnProperty(t.text)){var r=A7[t.text].className||"";if(t.mode==="text"){var n=Fe.makeOrd(t,e,"textord");return n.classes.push(r),n}else return Fe.makeSpan(["mspace",r],[Fe.mathsym(t.text,t.mode,e)],e)}else{if(C7.hasOwnProperty(t.text))return Fe.makeSpan(["mspace",C7[t.text]],[],e);throw new gt('Unknown type of space "'+t.text+'"')}},mathmlBuilder(t,e){var r;if(A7.hasOwnProperty(t.text))r=new dt.MathNode("mtext",[new dt.TextNode("\xA0")]);else{if(C7.hasOwnProperty(t.text))return new dt.MathNode("mspace");throw new gt('Unknown type of space "'+t.text+'"')}return r}});Iz=o(()=>{var t=new dt.MathNode("mtd",[]);return t.setAttribute("width","50%"),t},"pad");ld({type:"tag",mathmlBuilder(t,e){var r=new dt.MathNode("mtable",[new dt.MathNode("mtr",[Iz(),new dt.MathNode("mtd",[yh(t.body,e)]),Iz(),new dt.MathNode("mtd",[yh(t.tag,e)])])]);return r.setAttribute("width","100%"),r}});Oz={"\\text":void 0,"\\textrm":"textrm","\\textsf":"textsf","\\texttt":"texttt","\\textnormal":"textrm"},Pz={"\\textbf":"textbf","\\textmd":"textmd"},R4e={"\\textit":"textit","\\textup":"textup"},Bz=o((t,e)=>{var r=t.font;if(r){if(Oz[r])return e.withTextFontFamily(Oz[r]);if(Pz[r])return e.withTextFontWeight(Pz[r]);if(r==="\\emph")return e.fontShape==="textit"?e.withTextFontShape("textup"):e.withTextFontShape("textit")}else return e;return e.withTextFontShape(R4e[r])},"optionsWithFont");Nt({type:"text",names:["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textbf","\\textmd","\\textit","\\textup","\\emph"],props:{numArgs:1,argTypes:["text"],allowedInArgument:!0,allowedInText:!0},handler(t,e){var{parser:r,funcName:n}=t,i=e[0];return{type:"text",mode:r.mode,body:di(i),font:n}},htmlBuilder(t,e){var r=Bz(t,e),n=Fi(t.body,r,!0);return Fe.makeSpan(["mord","text"],n,r)},mathmlBuilder(t,e){var r=Bz(t,e);return yh(t.body,r)}});Nt({type:"underline",names:["\\underline"],props:{numArgs:1,allowedInText:!0},handler(t,e){var{parser:r}=t;return{type:"underline",mode:r.mode,body:e[0]}},htmlBuilder(t,e){var r=Fr(t.body,e),n=Fe.makeLineSpan("underline-line",e),i=e.fontMetrics().defaultRuleThickness,a=Fe.makeVList({positionType:"top",positionData:r.height,children:[{type:"kern",size:i},{type:"elem",elem:n},{type:"kern",size:3*i},{type:"elem",elem:r}]},e);return Fe.makeSpan(["mord","underline"],[a],e)},mathmlBuilder(t,e){var r=new dt.MathNode("mo",[new dt.TextNode("\u203E")]);r.setAttribute("stretchy","true");var n=new dt.MathNode("munder",[yn(t.body,e),r]);return n.setAttribute("accentunder","true"),n}});Nt({type:"vcenter",names:["\\vcenter"],props:{numArgs:1,argTypes:["original"],allowedInText:!1},handler(t,e){var{parser:r}=t;return{type:"vcenter",mode:r.mode,body:e[0]}},htmlBuilder(t,e){var r=Fr(t.body,e),n=e.fontMetrics().axisHeight,i=.5*(r.height-n-(r.depth+n));return Fe.makeVList({positionType:"shift",positionData:i,children:[{type:"elem",elem:r}]},e)},mathmlBuilder(t,e){return new dt.MathNode("mpadded",[yn(t.body,e)],["vcenter"])}});Nt({type:"verb",names:["\\verb"],props:{numArgs:0,allowedInText:!0},handler(t,e,r){throw new gt("\\verb ended by end of line instead of matching delimiter")},htmlBuilder(t,e){for(var r=Fz(t),n=[],i=e.havingStyle(e.style.text()),a=0;at.body.replace(/ /g,t.star?"\u2423":"\xA0"),"makeVerb"),mh=eG,NG=`[ \r - ]`,N4e="\\\\[a-zA-Z@]+",M4e="\\\\[^\uD800-\uDFFF]",I4e="("+N4e+")"+NG+"*",O4e=`\\\\( +-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z`;default:throw new Error("Unknown stretchy delimiter.")}},"tallDelim"),od=class{static{o(this,"DocumentFragment")}constructor(e){this.children=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.children=e,this.classes=[],this.height=0,this.depth=0,this.maxFontSize=0,this.style={}}hasClass(e){return Jt.contains(this.classes,e)}toNode(){for(var e=document.createDocumentFragment(),r=0;rr.toText(),"toText");return this.children.map(e).join("")}},Jl={"AMS-Regular":{32:[0,0,0,0,.25],65:[0,.68889,0,0,.72222],66:[0,.68889,0,0,.66667],67:[0,.68889,0,0,.72222],68:[0,.68889,0,0,.72222],69:[0,.68889,0,0,.66667],70:[0,.68889,0,0,.61111],71:[0,.68889,0,0,.77778],72:[0,.68889,0,0,.77778],73:[0,.68889,0,0,.38889],74:[.16667,.68889,0,0,.5],75:[0,.68889,0,0,.77778],76:[0,.68889,0,0,.66667],77:[0,.68889,0,0,.94445],78:[0,.68889,0,0,.72222],79:[.16667,.68889,0,0,.77778],80:[0,.68889,0,0,.61111],81:[.16667,.68889,0,0,.77778],82:[0,.68889,0,0,.72222],83:[0,.68889,0,0,.55556],84:[0,.68889,0,0,.66667],85:[0,.68889,0,0,.72222],86:[0,.68889,0,0,.72222],87:[0,.68889,0,0,1],88:[0,.68889,0,0,.72222],89:[0,.68889,0,0,.72222],90:[0,.68889,0,0,.66667],107:[0,.68889,0,0,.55556],160:[0,0,0,0,.25],165:[0,.675,.025,0,.75],174:[.15559,.69224,0,0,.94666],240:[0,.68889,0,0,.55556],295:[0,.68889,0,0,.54028],710:[0,.825,0,0,2.33334],732:[0,.9,0,0,2.33334],770:[0,.825,0,0,2.33334],771:[0,.9,0,0,2.33334],989:[.08167,.58167,0,0,.77778],1008:[0,.43056,.04028,0,.66667],8245:[0,.54986,0,0,.275],8463:[0,.68889,0,0,.54028],8487:[0,.68889,0,0,.72222],8498:[0,.68889,0,0,.55556],8502:[0,.68889,0,0,.66667],8503:[0,.68889,0,0,.44445],8504:[0,.68889,0,0,.66667],8513:[0,.68889,0,0,.63889],8592:[-.03598,.46402,0,0,.5],8594:[-.03598,.46402,0,0,.5],8602:[-.13313,.36687,0,0,1],8603:[-.13313,.36687,0,0,1],8606:[.01354,.52239,0,0,1],8608:[.01354,.52239,0,0,1],8610:[.01354,.52239,0,0,1.11111],8611:[.01354,.52239,0,0,1.11111],8619:[0,.54986,0,0,1],8620:[0,.54986,0,0,1],8621:[-.13313,.37788,0,0,1.38889],8622:[-.13313,.36687,0,0,1],8624:[0,.69224,0,0,.5],8625:[0,.69224,0,0,.5],8630:[0,.43056,0,0,1],8631:[0,.43056,0,0,1],8634:[.08198,.58198,0,0,.77778],8635:[.08198,.58198,0,0,.77778],8638:[.19444,.69224,0,0,.41667],8639:[.19444,.69224,0,0,.41667],8642:[.19444,.69224,0,0,.41667],8643:[.19444,.69224,0,0,.41667],8644:[.1808,.675,0,0,1],8646:[.1808,.675,0,0,1],8647:[.1808,.675,0,0,1],8648:[.19444,.69224,0,0,.83334],8649:[.1808,.675,0,0,1],8650:[.19444,.69224,0,0,.83334],8651:[.01354,.52239,0,0,1],8652:[.01354,.52239,0,0,1],8653:[-.13313,.36687,0,0,1],8654:[-.13313,.36687,0,0,1],8655:[-.13313,.36687,0,0,1],8666:[.13667,.63667,0,0,1],8667:[.13667,.63667,0,0,1],8669:[-.13313,.37788,0,0,1],8672:[-.064,.437,0,0,1.334],8674:[-.064,.437,0,0,1.334],8705:[0,.825,0,0,.5],8708:[0,.68889,0,0,.55556],8709:[.08167,.58167,0,0,.77778],8717:[0,.43056,0,0,.42917],8722:[-.03598,.46402,0,0,.5],8724:[.08198,.69224,0,0,.77778],8726:[.08167,.58167,0,0,.77778],8733:[0,.69224,0,0,.77778],8736:[0,.69224,0,0,.72222],8737:[0,.69224,0,0,.72222],8738:[.03517,.52239,0,0,.72222],8739:[.08167,.58167,0,0,.22222],8740:[.25142,.74111,0,0,.27778],8741:[.08167,.58167,0,0,.38889],8742:[.25142,.74111,0,0,.5],8756:[0,.69224,0,0,.66667],8757:[0,.69224,0,0,.66667],8764:[-.13313,.36687,0,0,.77778],8765:[-.13313,.37788,0,0,.77778],8769:[-.13313,.36687,0,0,.77778],8770:[-.03625,.46375,0,0,.77778],8774:[.30274,.79383,0,0,.77778],8776:[-.01688,.48312,0,0,.77778],8778:[.08167,.58167,0,0,.77778],8782:[.06062,.54986,0,0,.77778],8783:[.06062,.54986,0,0,.77778],8785:[.08198,.58198,0,0,.77778],8786:[.08198,.58198,0,0,.77778],8787:[.08198,.58198,0,0,.77778],8790:[0,.69224,0,0,.77778],8791:[.22958,.72958,0,0,.77778],8796:[.08198,.91667,0,0,.77778],8806:[.25583,.75583,0,0,.77778],8807:[.25583,.75583,0,0,.77778],8808:[.25142,.75726,0,0,.77778],8809:[.25142,.75726,0,0,.77778],8812:[.25583,.75583,0,0,.5],8814:[.20576,.70576,0,0,.77778],8815:[.20576,.70576,0,0,.77778],8816:[.30274,.79383,0,0,.77778],8817:[.30274,.79383,0,0,.77778],8818:[.22958,.72958,0,0,.77778],8819:[.22958,.72958,0,0,.77778],8822:[.1808,.675,0,0,.77778],8823:[.1808,.675,0,0,.77778],8828:[.13667,.63667,0,0,.77778],8829:[.13667,.63667,0,0,.77778],8830:[.22958,.72958,0,0,.77778],8831:[.22958,.72958,0,0,.77778],8832:[.20576,.70576,0,0,.77778],8833:[.20576,.70576,0,0,.77778],8840:[.30274,.79383,0,0,.77778],8841:[.30274,.79383,0,0,.77778],8842:[.13597,.63597,0,0,.77778],8843:[.13597,.63597,0,0,.77778],8847:[.03517,.54986,0,0,.77778],8848:[.03517,.54986,0,0,.77778],8858:[.08198,.58198,0,0,.77778],8859:[.08198,.58198,0,0,.77778],8861:[.08198,.58198,0,0,.77778],8862:[0,.675,0,0,.77778],8863:[0,.675,0,0,.77778],8864:[0,.675,0,0,.77778],8865:[0,.675,0,0,.77778],8872:[0,.69224,0,0,.61111],8873:[0,.69224,0,0,.72222],8874:[0,.69224,0,0,.88889],8876:[0,.68889,0,0,.61111],8877:[0,.68889,0,0,.61111],8878:[0,.68889,0,0,.72222],8879:[0,.68889,0,0,.72222],8882:[.03517,.54986,0,0,.77778],8883:[.03517,.54986,0,0,.77778],8884:[.13667,.63667,0,0,.77778],8885:[.13667,.63667,0,0,.77778],8888:[0,.54986,0,0,1.11111],8890:[.19444,.43056,0,0,.55556],8891:[.19444,.69224,0,0,.61111],8892:[.19444,.69224,0,0,.61111],8901:[0,.54986,0,0,.27778],8903:[.08167,.58167,0,0,.77778],8905:[.08167,.58167,0,0,.77778],8906:[.08167,.58167,0,0,.77778],8907:[0,.69224,0,0,.77778],8908:[0,.69224,0,0,.77778],8909:[-.03598,.46402,0,0,.77778],8910:[0,.54986,0,0,.76042],8911:[0,.54986,0,0,.76042],8912:[.03517,.54986,0,0,.77778],8913:[.03517,.54986,0,0,.77778],8914:[0,.54986,0,0,.66667],8915:[0,.54986,0,0,.66667],8916:[0,.69224,0,0,.66667],8918:[.0391,.5391,0,0,.77778],8919:[.0391,.5391,0,0,.77778],8920:[.03517,.54986,0,0,1.33334],8921:[.03517,.54986,0,0,1.33334],8922:[.38569,.88569,0,0,.77778],8923:[.38569,.88569,0,0,.77778],8926:[.13667,.63667,0,0,.77778],8927:[.13667,.63667,0,0,.77778],8928:[.30274,.79383,0,0,.77778],8929:[.30274,.79383,0,0,.77778],8934:[.23222,.74111,0,0,.77778],8935:[.23222,.74111,0,0,.77778],8936:[.23222,.74111,0,0,.77778],8937:[.23222,.74111,0,0,.77778],8938:[.20576,.70576,0,0,.77778],8939:[.20576,.70576,0,0,.77778],8940:[.30274,.79383,0,0,.77778],8941:[.30274,.79383,0,0,.77778],8994:[.19444,.69224,0,0,.77778],8995:[.19444,.69224,0,0,.77778],9416:[.15559,.69224,0,0,.90222],9484:[0,.69224,0,0,.5],9488:[0,.69224,0,0,.5],9492:[0,.37788,0,0,.5],9496:[0,.37788,0,0,.5],9585:[.19444,.68889,0,0,.88889],9586:[.19444,.74111,0,0,.88889],9632:[0,.675,0,0,.77778],9633:[0,.675,0,0,.77778],9650:[0,.54986,0,0,.72222],9651:[0,.54986,0,0,.72222],9654:[.03517,.54986,0,0,.77778],9660:[0,.54986,0,0,.72222],9661:[0,.54986,0,0,.72222],9664:[.03517,.54986,0,0,.77778],9674:[.11111,.69224,0,0,.66667],9733:[.19444,.69224,0,0,.94445],10003:[0,.69224,0,0,.83334],10016:[0,.69224,0,0,.83334],10731:[.11111,.69224,0,0,.66667],10846:[.19444,.75583,0,0,.61111],10877:[.13667,.63667,0,0,.77778],10878:[.13667,.63667,0,0,.77778],10885:[.25583,.75583,0,0,.77778],10886:[.25583,.75583,0,0,.77778],10887:[.13597,.63597,0,0,.77778],10888:[.13597,.63597,0,0,.77778],10889:[.26167,.75726,0,0,.77778],10890:[.26167,.75726,0,0,.77778],10891:[.48256,.98256,0,0,.77778],10892:[.48256,.98256,0,0,.77778],10901:[.13667,.63667,0,0,.77778],10902:[.13667,.63667,0,0,.77778],10933:[.25142,.75726,0,0,.77778],10934:[.25142,.75726,0,0,.77778],10935:[.26167,.75726,0,0,.77778],10936:[.26167,.75726,0,0,.77778],10937:[.26167,.75726,0,0,.77778],10938:[.26167,.75726,0,0,.77778],10949:[.25583,.75583,0,0,.77778],10950:[.25583,.75583,0,0,.77778],10955:[.28481,.79383,0,0,.77778],10956:[.28481,.79383,0,0,.77778],57350:[.08167,.58167,0,0,.22222],57351:[.08167,.58167,0,0,.38889],57352:[.08167,.58167,0,0,.77778],57353:[0,.43056,.04028,0,.66667],57356:[.25142,.75726,0,0,.77778],57357:[.25142,.75726,0,0,.77778],57358:[.41951,.91951,0,0,.77778],57359:[.30274,.79383,0,0,.77778],57360:[.30274,.79383,0,0,.77778],57361:[.41951,.91951,0,0,.77778],57366:[.25142,.75726,0,0,.77778],57367:[.25142,.75726,0,0,.77778],57368:[.25142,.75726,0,0,.77778],57369:[.25142,.75726,0,0,.77778],57370:[.13597,.63597,0,0,.77778],57371:[.13597,.63597,0,0,.77778]},"Caligraphic-Regular":{32:[0,0,0,0,.25],65:[0,.68333,0,.19445,.79847],66:[0,.68333,.03041,.13889,.65681],67:[0,.68333,.05834,.13889,.52653],68:[0,.68333,.02778,.08334,.77139],69:[0,.68333,.08944,.11111,.52778],70:[0,.68333,.09931,.11111,.71875],71:[.09722,.68333,.0593,.11111,.59487],72:[0,.68333,.00965,.11111,.84452],73:[0,.68333,.07382,0,.54452],74:[.09722,.68333,.18472,.16667,.67778],75:[0,.68333,.01445,.05556,.76195],76:[0,.68333,0,.13889,.68972],77:[0,.68333,0,.13889,1.2009],78:[0,.68333,.14736,.08334,.82049],79:[0,.68333,.02778,.11111,.79611],80:[0,.68333,.08222,.08334,.69556],81:[.09722,.68333,0,.11111,.81667],82:[0,.68333,0,.08334,.8475],83:[0,.68333,.075,.13889,.60556],84:[0,.68333,.25417,0,.54464],85:[0,.68333,.09931,.08334,.62583],86:[0,.68333,.08222,0,.61278],87:[0,.68333,.08222,.08334,.98778],88:[0,.68333,.14643,.13889,.7133],89:[.09722,.68333,.08222,.08334,.66834],90:[0,.68333,.07944,.13889,.72473],160:[0,0,0,0,.25]},"Fraktur-Regular":{32:[0,0,0,0,.25],33:[0,.69141,0,0,.29574],34:[0,.69141,0,0,.21471],38:[0,.69141,0,0,.73786],39:[0,.69141,0,0,.21201],40:[.24982,.74947,0,0,.38865],41:[.24982,.74947,0,0,.38865],42:[0,.62119,0,0,.27764],43:[.08319,.58283,0,0,.75623],44:[0,.10803,0,0,.27764],45:[.08319,.58283,0,0,.75623],46:[0,.10803,0,0,.27764],47:[.24982,.74947,0,0,.50181],48:[0,.47534,0,0,.50181],49:[0,.47534,0,0,.50181],50:[0,.47534,0,0,.50181],51:[.18906,.47534,0,0,.50181],52:[.18906,.47534,0,0,.50181],53:[.18906,.47534,0,0,.50181],54:[0,.69141,0,0,.50181],55:[.18906,.47534,0,0,.50181],56:[0,.69141,0,0,.50181],57:[.18906,.47534,0,0,.50181],58:[0,.47534,0,0,.21606],59:[.12604,.47534,0,0,.21606],61:[-.13099,.36866,0,0,.75623],63:[0,.69141,0,0,.36245],65:[0,.69141,0,0,.7176],66:[0,.69141,0,0,.88397],67:[0,.69141,0,0,.61254],68:[0,.69141,0,0,.83158],69:[0,.69141,0,0,.66278],70:[.12604,.69141,0,0,.61119],71:[0,.69141,0,0,.78539],72:[.06302,.69141,0,0,.7203],73:[0,.69141,0,0,.55448],74:[.12604,.69141,0,0,.55231],75:[0,.69141,0,0,.66845],76:[0,.69141,0,0,.66602],77:[0,.69141,0,0,1.04953],78:[0,.69141,0,0,.83212],79:[0,.69141,0,0,.82699],80:[.18906,.69141,0,0,.82753],81:[.03781,.69141,0,0,.82699],82:[0,.69141,0,0,.82807],83:[0,.69141,0,0,.82861],84:[0,.69141,0,0,.66899],85:[0,.69141,0,0,.64576],86:[0,.69141,0,0,.83131],87:[0,.69141,0,0,1.04602],88:[0,.69141,0,0,.71922],89:[.18906,.69141,0,0,.83293],90:[.12604,.69141,0,0,.60201],91:[.24982,.74947,0,0,.27764],93:[.24982,.74947,0,0,.27764],94:[0,.69141,0,0,.49965],97:[0,.47534,0,0,.50046],98:[0,.69141,0,0,.51315],99:[0,.47534,0,0,.38946],100:[0,.62119,0,0,.49857],101:[0,.47534,0,0,.40053],102:[.18906,.69141,0,0,.32626],103:[.18906,.47534,0,0,.5037],104:[.18906,.69141,0,0,.52126],105:[0,.69141,0,0,.27899],106:[0,.69141,0,0,.28088],107:[0,.69141,0,0,.38946],108:[0,.69141,0,0,.27953],109:[0,.47534,0,0,.76676],110:[0,.47534,0,0,.52666],111:[0,.47534,0,0,.48885],112:[.18906,.52396,0,0,.50046],113:[.18906,.47534,0,0,.48912],114:[0,.47534,0,0,.38919],115:[0,.47534,0,0,.44266],116:[0,.62119,0,0,.33301],117:[0,.47534,0,0,.5172],118:[0,.52396,0,0,.5118],119:[0,.52396,0,0,.77351],120:[.18906,.47534,0,0,.38865],121:[.18906,.47534,0,0,.49884],122:[.18906,.47534,0,0,.39054],160:[0,0,0,0,.25],8216:[0,.69141,0,0,.21471],8217:[0,.69141,0,0,.21471],58112:[0,.62119,0,0,.49749],58113:[0,.62119,0,0,.4983],58114:[.18906,.69141,0,0,.33328],58115:[.18906,.69141,0,0,.32923],58116:[.18906,.47534,0,0,.50343],58117:[0,.69141,0,0,.33301],58118:[0,.62119,0,0,.33409],58119:[0,.47534,0,0,.50073]},"Main-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.35],34:[0,.69444,0,0,.60278],35:[.19444,.69444,0,0,.95833],36:[.05556,.75,0,0,.575],37:[.05556,.75,0,0,.95833],38:[0,.69444,0,0,.89444],39:[0,.69444,0,0,.31944],40:[.25,.75,0,0,.44722],41:[.25,.75,0,0,.44722],42:[0,.75,0,0,.575],43:[.13333,.63333,0,0,.89444],44:[.19444,.15556,0,0,.31944],45:[0,.44444,0,0,.38333],46:[0,.15556,0,0,.31944],47:[.25,.75,0,0,.575],48:[0,.64444,0,0,.575],49:[0,.64444,0,0,.575],50:[0,.64444,0,0,.575],51:[0,.64444,0,0,.575],52:[0,.64444,0,0,.575],53:[0,.64444,0,0,.575],54:[0,.64444,0,0,.575],55:[0,.64444,0,0,.575],56:[0,.64444,0,0,.575],57:[0,.64444,0,0,.575],58:[0,.44444,0,0,.31944],59:[.19444,.44444,0,0,.31944],60:[.08556,.58556,0,0,.89444],61:[-.10889,.39111,0,0,.89444],62:[.08556,.58556,0,0,.89444],63:[0,.69444,0,0,.54305],64:[0,.69444,0,0,.89444],65:[0,.68611,0,0,.86944],66:[0,.68611,0,0,.81805],67:[0,.68611,0,0,.83055],68:[0,.68611,0,0,.88194],69:[0,.68611,0,0,.75555],70:[0,.68611,0,0,.72361],71:[0,.68611,0,0,.90416],72:[0,.68611,0,0,.9],73:[0,.68611,0,0,.43611],74:[0,.68611,0,0,.59444],75:[0,.68611,0,0,.90138],76:[0,.68611,0,0,.69166],77:[0,.68611,0,0,1.09166],78:[0,.68611,0,0,.9],79:[0,.68611,0,0,.86388],80:[0,.68611,0,0,.78611],81:[.19444,.68611,0,0,.86388],82:[0,.68611,0,0,.8625],83:[0,.68611,0,0,.63889],84:[0,.68611,0,0,.8],85:[0,.68611,0,0,.88472],86:[0,.68611,.01597,0,.86944],87:[0,.68611,.01597,0,1.18888],88:[0,.68611,0,0,.86944],89:[0,.68611,.02875,0,.86944],90:[0,.68611,0,0,.70277],91:[.25,.75,0,0,.31944],92:[.25,.75,0,0,.575],93:[.25,.75,0,0,.31944],94:[0,.69444,0,0,.575],95:[.31,.13444,.03194,0,.575],97:[0,.44444,0,0,.55902],98:[0,.69444,0,0,.63889],99:[0,.44444,0,0,.51111],100:[0,.69444,0,0,.63889],101:[0,.44444,0,0,.52708],102:[0,.69444,.10903,0,.35139],103:[.19444,.44444,.01597,0,.575],104:[0,.69444,0,0,.63889],105:[0,.69444,0,0,.31944],106:[.19444,.69444,0,0,.35139],107:[0,.69444,0,0,.60694],108:[0,.69444,0,0,.31944],109:[0,.44444,0,0,.95833],110:[0,.44444,0,0,.63889],111:[0,.44444,0,0,.575],112:[.19444,.44444,0,0,.63889],113:[.19444,.44444,0,0,.60694],114:[0,.44444,0,0,.47361],115:[0,.44444,0,0,.45361],116:[0,.63492,0,0,.44722],117:[0,.44444,0,0,.63889],118:[0,.44444,.01597,0,.60694],119:[0,.44444,.01597,0,.83055],120:[0,.44444,0,0,.60694],121:[.19444,.44444,.01597,0,.60694],122:[0,.44444,0,0,.51111],123:[.25,.75,0,0,.575],124:[.25,.75,0,0,.31944],125:[.25,.75,0,0,.575],126:[.35,.34444,0,0,.575],160:[0,0,0,0,.25],163:[0,.69444,0,0,.86853],168:[0,.69444,0,0,.575],172:[0,.44444,0,0,.76666],176:[0,.69444,0,0,.86944],177:[.13333,.63333,0,0,.89444],184:[.17014,0,0,0,.51111],198:[0,.68611,0,0,1.04166],215:[.13333,.63333,0,0,.89444],216:[.04861,.73472,0,0,.89444],223:[0,.69444,0,0,.59722],230:[0,.44444,0,0,.83055],247:[.13333,.63333,0,0,.89444],248:[.09722,.54167,0,0,.575],305:[0,.44444,0,0,.31944],338:[0,.68611,0,0,1.16944],339:[0,.44444,0,0,.89444],567:[.19444,.44444,0,0,.35139],710:[0,.69444,0,0,.575],711:[0,.63194,0,0,.575],713:[0,.59611,0,0,.575],714:[0,.69444,0,0,.575],715:[0,.69444,0,0,.575],728:[0,.69444,0,0,.575],729:[0,.69444,0,0,.31944],730:[0,.69444,0,0,.86944],732:[0,.69444,0,0,.575],733:[0,.69444,0,0,.575],915:[0,.68611,0,0,.69166],916:[0,.68611,0,0,.95833],920:[0,.68611,0,0,.89444],923:[0,.68611,0,0,.80555],926:[0,.68611,0,0,.76666],928:[0,.68611,0,0,.9],931:[0,.68611,0,0,.83055],933:[0,.68611,0,0,.89444],934:[0,.68611,0,0,.83055],936:[0,.68611,0,0,.89444],937:[0,.68611,0,0,.83055],8211:[0,.44444,.03194,0,.575],8212:[0,.44444,.03194,0,1.14999],8216:[0,.69444,0,0,.31944],8217:[0,.69444,0,0,.31944],8220:[0,.69444,0,0,.60278],8221:[0,.69444,0,0,.60278],8224:[.19444,.69444,0,0,.51111],8225:[.19444,.69444,0,0,.51111],8242:[0,.55556,0,0,.34444],8407:[0,.72444,.15486,0,.575],8463:[0,.69444,0,0,.66759],8465:[0,.69444,0,0,.83055],8467:[0,.69444,0,0,.47361],8472:[.19444,.44444,0,0,.74027],8476:[0,.69444,0,0,.83055],8501:[0,.69444,0,0,.70277],8592:[-.10889,.39111,0,0,1.14999],8593:[.19444,.69444,0,0,.575],8594:[-.10889,.39111,0,0,1.14999],8595:[.19444,.69444,0,0,.575],8596:[-.10889,.39111,0,0,1.14999],8597:[.25,.75,0,0,.575],8598:[.19444,.69444,0,0,1.14999],8599:[.19444,.69444,0,0,1.14999],8600:[.19444,.69444,0,0,1.14999],8601:[.19444,.69444,0,0,1.14999],8636:[-.10889,.39111,0,0,1.14999],8637:[-.10889,.39111,0,0,1.14999],8640:[-.10889,.39111,0,0,1.14999],8641:[-.10889,.39111,0,0,1.14999],8656:[-.10889,.39111,0,0,1.14999],8657:[.19444,.69444,0,0,.70277],8658:[-.10889,.39111,0,0,1.14999],8659:[.19444,.69444,0,0,.70277],8660:[-.10889,.39111,0,0,1.14999],8661:[.25,.75,0,0,.70277],8704:[0,.69444,0,0,.63889],8706:[0,.69444,.06389,0,.62847],8707:[0,.69444,0,0,.63889],8709:[.05556,.75,0,0,.575],8711:[0,.68611,0,0,.95833],8712:[.08556,.58556,0,0,.76666],8715:[.08556,.58556,0,0,.76666],8722:[.13333,.63333,0,0,.89444],8723:[.13333,.63333,0,0,.89444],8725:[.25,.75,0,0,.575],8726:[.25,.75,0,0,.575],8727:[-.02778,.47222,0,0,.575],8728:[-.02639,.47361,0,0,.575],8729:[-.02639,.47361,0,0,.575],8730:[.18,.82,0,0,.95833],8733:[0,.44444,0,0,.89444],8734:[0,.44444,0,0,1.14999],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.31944],8741:[.25,.75,0,0,.575],8743:[0,.55556,0,0,.76666],8744:[0,.55556,0,0,.76666],8745:[0,.55556,0,0,.76666],8746:[0,.55556,0,0,.76666],8747:[.19444,.69444,.12778,0,.56875],8764:[-.10889,.39111,0,0,.89444],8768:[.19444,.69444,0,0,.31944],8771:[.00222,.50222,0,0,.89444],8773:[.027,.638,0,0,.894],8776:[.02444,.52444,0,0,.89444],8781:[.00222,.50222,0,0,.89444],8801:[.00222,.50222,0,0,.89444],8804:[.19667,.69667,0,0,.89444],8805:[.19667,.69667,0,0,.89444],8810:[.08556,.58556,0,0,1.14999],8811:[.08556,.58556,0,0,1.14999],8826:[.08556,.58556,0,0,.89444],8827:[.08556,.58556,0,0,.89444],8834:[.08556,.58556,0,0,.89444],8835:[.08556,.58556,0,0,.89444],8838:[.19667,.69667,0,0,.89444],8839:[.19667,.69667,0,0,.89444],8846:[0,.55556,0,0,.76666],8849:[.19667,.69667,0,0,.89444],8850:[.19667,.69667,0,0,.89444],8851:[0,.55556,0,0,.76666],8852:[0,.55556,0,0,.76666],8853:[.13333,.63333,0,0,.89444],8854:[.13333,.63333,0,0,.89444],8855:[.13333,.63333,0,0,.89444],8856:[.13333,.63333,0,0,.89444],8857:[.13333,.63333,0,0,.89444],8866:[0,.69444,0,0,.70277],8867:[0,.69444,0,0,.70277],8868:[0,.69444,0,0,.89444],8869:[0,.69444,0,0,.89444],8900:[-.02639,.47361,0,0,.575],8901:[-.02639,.47361,0,0,.31944],8902:[-.02778,.47222,0,0,.575],8968:[.25,.75,0,0,.51111],8969:[.25,.75,0,0,.51111],8970:[.25,.75,0,0,.51111],8971:[.25,.75,0,0,.51111],8994:[-.13889,.36111,0,0,1.14999],8995:[-.13889,.36111,0,0,1.14999],9651:[.19444,.69444,0,0,1.02222],9657:[-.02778,.47222,0,0,.575],9661:[.19444,.69444,0,0,1.02222],9667:[-.02778,.47222,0,0,.575],9711:[.19444,.69444,0,0,1.14999],9824:[.12963,.69444,0,0,.89444],9825:[.12963,.69444,0,0,.89444],9826:[.12963,.69444,0,0,.89444],9827:[.12963,.69444,0,0,.89444],9837:[0,.75,0,0,.44722],9838:[.19444,.69444,0,0,.44722],9839:[.19444,.69444,0,0,.44722],10216:[.25,.75,0,0,.44722],10217:[.25,.75,0,0,.44722],10815:[0,.68611,0,0,.9],10927:[.19667,.69667,0,0,.89444],10928:[.19667,.69667,0,0,.89444],57376:[.19444,.69444,0,0,0]},"Main-BoldItalic":{32:[0,0,0,0,.25],33:[0,.69444,.11417,0,.38611],34:[0,.69444,.07939,0,.62055],35:[.19444,.69444,.06833,0,.94444],37:[.05556,.75,.12861,0,.94444],38:[0,.69444,.08528,0,.88555],39:[0,.69444,.12945,0,.35555],40:[.25,.75,.15806,0,.47333],41:[.25,.75,.03306,0,.47333],42:[0,.75,.14333,0,.59111],43:[.10333,.60333,.03306,0,.88555],44:[.19444,.14722,0,0,.35555],45:[0,.44444,.02611,0,.41444],46:[0,.14722,0,0,.35555],47:[.25,.75,.15806,0,.59111],48:[0,.64444,.13167,0,.59111],49:[0,.64444,.13167,0,.59111],50:[0,.64444,.13167,0,.59111],51:[0,.64444,.13167,0,.59111],52:[.19444,.64444,.13167,0,.59111],53:[0,.64444,.13167,0,.59111],54:[0,.64444,.13167,0,.59111],55:[.19444,.64444,.13167,0,.59111],56:[0,.64444,.13167,0,.59111],57:[0,.64444,.13167,0,.59111],58:[0,.44444,.06695,0,.35555],59:[.19444,.44444,.06695,0,.35555],61:[-.10889,.39111,.06833,0,.88555],63:[0,.69444,.11472,0,.59111],64:[0,.69444,.09208,0,.88555],65:[0,.68611,0,0,.86555],66:[0,.68611,.0992,0,.81666],67:[0,.68611,.14208,0,.82666],68:[0,.68611,.09062,0,.87555],69:[0,.68611,.11431,0,.75666],70:[0,.68611,.12903,0,.72722],71:[0,.68611,.07347,0,.89527],72:[0,.68611,.17208,0,.8961],73:[0,.68611,.15681,0,.47166],74:[0,.68611,.145,0,.61055],75:[0,.68611,.14208,0,.89499],76:[0,.68611,0,0,.69777],77:[0,.68611,.17208,0,1.07277],78:[0,.68611,.17208,0,.8961],79:[0,.68611,.09062,0,.85499],80:[0,.68611,.0992,0,.78721],81:[.19444,.68611,.09062,0,.85499],82:[0,.68611,.02559,0,.85944],83:[0,.68611,.11264,0,.64999],84:[0,.68611,.12903,0,.7961],85:[0,.68611,.17208,0,.88083],86:[0,.68611,.18625,0,.86555],87:[0,.68611,.18625,0,1.15999],88:[0,.68611,.15681,0,.86555],89:[0,.68611,.19803,0,.86555],90:[0,.68611,.14208,0,.70888],91:[.25,.75,.1875,0,.35611],93:[.25,.75,.09972,0,.35611],94:[0,.69444,.06709,0,.59111],95:[.31,.13444,.09811,0,.59111],97:[0,.44444,.09426,0,.59111],98:[0,.69444,.07861,0,.53222],99:[0,.44444,.05222,0,.53222],100:[0,.69444,.10861,0,.59111],101:[0,.44444,.085,0,.53222],102:[.19444,.69444,.21778,0,.4],103:[.19444,.44444,.105,0,.53222],104:[0,.69444,.09426,0,.59111],105:[0,.69326,.11387,0,.35555],106:[.19444,.69326,.1672,0,.35555],107:[0,.69444,.11111,0,.53222],108:[0,.69444,.10861,0,.29666],109:[0,.44444,.09426,0,.94444],110:[0,.44444,.09426,0,.64999],111:[0,.44444,.07861,0,.59111],112:[.19444,.44444,.07861,0,.59111],113:[.19444,.44444,.105,0,.53222],114:[0,.44444,.11111,0,.50167],115:[0,.44444,.08167,0,.48694],116:[0,.63492,.09639,0,.385],117:[0,.44444,.09426,0,.62055],118:[0,.44444,.11111,0,.53222],119:[0,.44444,.11111,0,.76777],120:[0,.44444,.12583,0,.56055],121:[.19444,.44444,.105,0,.56166],122:[0,.44444,.13889,0,.49055],126:[.35,.34444,.11472,0,.59111],160:[0,0,0,0,.25],168:[0,.69444,.11473,0,.59111],176:[0,.69444,0,0,.94888],184:[.17014,0,0,0,.53222],198:[0,.68611,.11431,0,1.02277],216:[.04861,.73472,.09062,0,.88555],223:[.19444,.69444,.09736,0,.665],230:[0,.44444,.085,0,.82666],248:[.09722,.54167,.09458,0,.59111],305:[0,.44444,.09426,0,.35555],338:[0,.68611,.11431,0,1.14054],339:[0,.44444,.085,0,.82666],567:[.19444,.44444,.04611,0,.385],710:[0,.69444,.06709,0,.59111],711:[0,.63194,.08271,0,.59111],713:[0,.59444,.10444,0,.59111],714:[0,.69444,.08528,0,.59111],715:[0,.69444,0,0,.59111],728:[0,.69444,.10333,0,.59111],729:[0,.69444,.12945,0,.35555],730:[0,.69444,0,0,.94888],732:[0,.69444,.11472,0,.59111],733:[0,.69444,.11472,0,.59111],915:[0,.68611,.12903,0,.69777],916:[0,.68611,0,0,.94444],920:[0,.68611,.09062,0,.88555],923:[0,.68611,0,0,.80666],926:[0,.68611,.15092,0,.76777],928:[0,.68611,.17208,0,.8961],931:[0,.68611,.11431,0,.82666],933:[0,.68611,.10778,0,.88555],934:[0,.68611,.05632,0,.82666],936:[0,.68611,.10778,0,.88555],937:[0,.68611,.0992,0,.82666],8211:[0,.44444,.09811,0,.59111],8212:[0,.44444,.09811,0,1.18221],8216:[0,.69444,.12945,0,.35555],8217:[0,.69444,.12945,0,.35555],8220:[0,.69444,.16772,0,.62055],8221:[0,.69444,.07939,0,.62055]},"Main-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.12417,0,.30667],34:[0,.69444,.06961,0,.51444],35:[.19444,.69444,.06616,0,.81777],37:[.05556,.75,.13639,0,.81777],38:[0,.69444,.09694,0,.76666],39:[0,.69444,.12417,0,.30667],40:[.25,.75,.16194,0,.40889],41:[.25,.75,.03694,0,.40889],42:[0,.75,.14917,0,.51111],43:[.05667,.56167,.03694,0,.76666],44:[.19444,.10556,0,0,.30667],45:[0,.43056,.02826,0,.35778],46:[0,.10556,0,0,.30667],47:[.25,.75,.16194,0,.51111],48:[0,.64444,.13556,0,.51111],49:[0,.64444,.13556,0,.51111],50:[0,.64444,.13556,0,.51111],51:[0,.64444,.13556,0,.51111],52:[.19444,.64444,.13556,0,.51111],53:[0,.64444,.13556,0,.51111],54:[0,.64444,.13556,0,.51111],55:[.19444,.64444,.13556,0,.51111],56:[0,.64444,.13556,0,.51111],57:[0,.64444,.13556,0,.51111],58:[0,.43056,.0582,0,.30667],59:[.19444,.43056,.0582,0,.30667],61:[-.13313,.36687,.06616,0,.76666],63:[0,.69444,.1225,0,.51111],64:[0,.69444,.09597,0,.76666],65:[0,.68333,0,0,.74333],66:[0,.68333,.10257,0,.70389],67:[0,.68333,.14528,0,.71555],68:[0,.68333,.09403,0,.755],69:[0,.68333,.12028,0,.67833],70:[0,.68333,.13305,0,.65277],71:[0,.68333,.08722,0,.77361],72:[0,.68333,.16389,0,.74333],73:[0,.68333,.15806,0,.38555],74:[0,.68333,.14028,0,.525],75:[0,.68333,.14528,0,.76888],76:[0,.68333,0,0,.62722],77:[0,.68333,.16389,0,.89666],78:[0,.68333,.16389,0,.74333],79:[0,.68333,.09403,0,.76666],80:[0,.68333,.10257,0,.67833],81:[.19444,.68333,.09403,0,.76666],82:[0,.68333,.03868,0,.72944],83:[0,.68333,.11972,0,.56222],84:[0,.68333,.13305,0,.71555],85:[0,.68333,.16389,0,.74333],86:[0,.68333,.18361,0,.74333],87:[0,.68333,.18361,0,.99888],88:[0,.68333,.15806,0,.74333],89:[0,.68333,.19383,0,.74333],90:[0,.68333,.14528,0,.61333],91:[.25,.75,.1875,0,.30667],93:[.25,.75,.10528,0,.30667],94:[0,.69444,.06646,0,.51111],95:[.31,.12056,.09208,0,.51111],97:[0,.43056,.07671,0,.51111],98:[0,.69444,.06312,0,.46],99:[0,.43056,.05653,0,.46],100:[0,.69444,.10333,0,.51111],101:[0,.43056,.07514,0,.46],102:[.19444,.69444,.21194,0,.30667],103:[.19444,.43056,.08847,0,.46],104:[0,.69444,.07671,0,.51111],105:[0,.65536,.1019,0,.30667],106:[.19444,.65536,.14467,0,.30667],107:[0,.69444,.10764,0,.46],108:[0,.69444,.10333,0,.25555],109:[0,.43056,.07671,0,.81777],110:[0,.43056,.07671,0,.56222],111:[0,.43056,.06312,0,.51111],112:[.19444,.43056,.06312,0,.51111],113:[.19444,.43056,.08847,0,.46],114:[0,.43056,.10764,0,.42166],115:[0,.43056,.08208,0,.40889],116:[0,.61508,.09486,0,.33222],117:[0,.43056,.07671,0,.53666],118:[0,.43056,.10764,0,.46],119:[0,.43056,.10764,0,.66444],120:[0,.43056,.12042,0,.46389],121:[.19444,.43056,.08847,0,.48555],122:[0,.43056,.12292,0,.40889],126:[.35,.31786,.11585,0,.51111],160:[0,0,0,0,.25],168:[0,.66786,.10474,0,.51111],176:[0,.69444,0,0,.83129],184:[.17014,0,0,0,.46],198:[0,.68333,.12028,0,.88277],216:[.04861,.73194,.09403,0,.76666],223:[.19444,.69444,.10514,0,.53666],230:[0,.43056,.07514,0,.71555],248:[.09722,.52778,.09194,0,.51111],338:[0,.68333,.12028,0,.98499],339:[0,.43056,.07514,0,.71555],710:[0,.69444,.06646,0,.51111],711:[0,.62847,.08295,0,.51111],713:[0,.56167,.10333,0,.51111],714:[0,.69444,.09694,0,.51111],715:[0,.69444,0,0,.51111],728:[0,.69444,.10806,0,.51111],729:[0,.66786,.11752,0,.30667],730:[0,.69444,0,0,.83129],732:[0,.66786,.11585,0,.51111],733:[0,.69444,.1225,0,.51111],915:[0,.68333,.13305,0,.62722],916:[0,.68333,0,0,.81777],920:[0,.68333,.09403,0,.76666],923:[0,.68333,0,0,.69222],926:[0,.68333,.15294,0,.66444],928:[0,.68333,.16389,0,.74333],931:[0,.68333,.12028,0,.71555],933:[0,.68333,.11111,0,.76666],934:[0,.68333,.05986,0,.71555],936:[0,.68333,.11111,0,.76666],937:[0,.68333,.10257,0,.71555],8211:[0,.43056,.09208,0,.51111],8212:[0,.43056,.09208,0,1.02222],8216:[0,.69444,.12417,0,.30667],8217:[0,.69444,.12417,0,.30667],8220:[0,.69444,.1685,0,.51444],8221:[0,.69444,.06961,0,.51444],8463:[0,.68889,0,0,.54028]},"Main-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.27778],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.77778],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.19444,.10556,0,0,.27778],45:[0,.43056,0,0,.33333],46:[0,.10556,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.64444,0,0,.5],49:[0,.64444,0,0,.5],50:[0,.64444,0,0,.5],51:[0,.64444,0,0,.5],52:[0,.64444,0,0,.5],53:[0,.64444,0,0,.5],54:[0,.64444,0,0,.5],55:[0,.64444,0,0,.5],56:[0,.64444,0,0,.5],57:[0,.64444,0,0,.5],58:[0,.43056,0,0,.27778],59:[.19444,.43056,0,0,.27778],60:[.0391,.5391,0,0,.77778],61:[-.13313,.36687,0,0,.77778],62:[.0391,.5391,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.77778],65:[0,.68333,0,0,.75],66:[0,.68333,0,0,.70834],67:[0,.68333,0,0,.72222],68:[0,.68333,0,0,.76389],69:[0,.68333,0,0,.68056],70:[0,.68333,0,0,.65278],71:[0,.68333,0,0,.78472],72:[0,.68333,0,0,.75],73:[0,.68333,0,0,.36111],74:[0,.68333,0,0,.51389],75:[0,.68333,0,0,.77778],76:[0,.68333,0,0,.625],77:[0,.68333,0,0,.91667],78:[0,.68333,0,0,.75],79:[0,.68333,0,0,.77778],80:[0,.68333,0,0,.68056],81:[.19444,.68333,0,0,.77778],82:[0,.68333,0,0,.73611],83:[0,.68333,0,0,.55556],84:[0,.68333,0,0,.72222],85:[0,.68333,0,0,.75],86:[0,.68333,.01389,0,.75],87:[0,.68333,.01389,0,1.02778],88:[0,.68333,0,0,.75],89:[0,.68333,.025,0,.75],90:[0,.68333,0,0,.61111],91:[.25,.75,0,0,.27778],92:[.25,.75,0,0,.5],93:[.25,.75,0,0,.27778],94:[0,.69444,0,0,.5],95:[.31,.12056,.02778,0,.5],97:[0,.43056,0,0,.5],98:[0,.69444,0,0,.55556],99:[0,.43056,0,0,.44445],100:[0,.69444,0,0,.55556],101:[0,.43056,0,0,.44445],102:[0,.69444,.07778,0,.30556],103:[.19444,.43056,.01389,0,.5],104:[0,.69444,0,0,.55556],105:[0,.66786,0,0,.27778],106:[.19444,.66786,0,0,.30556],107:[0,.69444,0,0,.52778],108:[0,.69444,0,0,.27778],109:[0,.43056,0,0,.83334],110:[0,.43056,0,0,.55556],111:[0,.43056,0,0,.5],112:[.19444,.43056,0,0,.55556],113:[.19444,.43056,0,0,.52778],114:[0,.43056,0,0,.39167],115:[0,.43056,0,0,.39445],116:[0,.61508,0,0,.38889],117:[0,.43056,0,0,.55556],118:[0,.43056,.01389,0,.52778],119:[0,.43056,.01389,0,.72222],120:[0,.43056,0,0,.52778],121:[.19444,.43056,.01389,0,.52778],122:[0,.43056,0,0,.44445],123:[.25,.75,0,0,.5],124:[.25,.75,0,0,.27778],125:[.25,.75,0,0,.5],126:[.35,.31786,0,0,.5],160:[0,0,0,0,.25],163:[0,.69444,0,0,.76909],167:[.19444,.69444,0,0,.44445],168:[0,.66786,0,0,.5],172:[0,.43056,0,0,.66667],176:[0,.69444,0,0,.75],177:[.08333,.58333,0,0,.77778],182:[.19444,.69444,0,0,.61111],184:[.17014,0,0,0,.44445],198:[0,.68333,0,0,.90278],215:[.08333,.58333,0,0,.77778],216:[.04861,.73194,0,0,.77778],223:[0,.69444,0,0,.5],230:[0,.43056,0,0,.72222],247:[.08333,.58333,0,0,.77778],248:[.09722,.52778,0,0,.5],305:[0,.43056,0,0,.27778],338:[0,.68333,0,0,1.01389],339:[0,.43056,0,0,.77778],567:[.19444,.43056,0,0,.30556],710:[0,.69444,0,0,.5],711:[0,.62847,0,0,.5],713:[0,.56778,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.66786,0,0,.27778],730:[0,.69444,0,0,.75],732:[0,.66786,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.68333,0,0,.625],916:[0,.68333,0,0,.83334],920:[0,.68333,0,0,.77778],923:[0,.68333,0,0,.69445],926:[0,.68333,0,0,.66667],928:[0,.68333,0,0,.75],931:[0,.68333,0,0,.72222],933:[0,.68333,0,0,.77778],934:[0,.68333,0,0,.72222],936:[0,.68333,0,0,.77778],937:[0,.68333,0,0,.72222],8211:[0,.43056,.02778,0,.5],8212:[0,.43056,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5],8224:[.19444,.69444,0,0,.44445],8225:[.19444,.69444,0,0,.44445],8230:[0,.123,0,0,1.172],8242:[0,.55556,0,0,.275],8407:[0,.71444,.15382,0,.5],8463:[0,.68889,0,0,.54028],8465:[0,.69444,0,0,.72222],8467:[0,.69444,0,.11111,.41667],8472:[.19444,.43056,0,.11111,.63646],8476:[0,.69444,0,0,.72222],8501:[0,.69444,0,0,.61111],8592:[-.13313,.36687,0,0,1],8593:[.19444,.69444,0,0,.5],8594:[-.13313,.36687,0,0,1],8595:[.19444,.69444,0,0,.5],8596:[-.13313,.36687,0,0,1],8597:[.25,.75,0,0,.5],8598:[.19444,.69444,0,0,1],8599:[.19444,.69444,0,0,1],8600:[.19444,.69444,0,0,1],8601:[.19444,.69444,0,0,1],8614:[.011,.511,0,0,1],8617:[.011,.511,0,0,1.126],8618:[.011,.511,0,0,1.126],8636:[-.13313,.36687,0,0,1],8637:[-.13313,.36687,0,0,1],8640:[-.13313,.36687,0,0,1],8641:[-.13313,.36687,0,0,1],8652:[.011,.671,0,0,1],8656:[-.13313,.36687,0,0,1],8657:[.19444,.69444,0,0,.61111],8658:[-.13313,.36687,0,0,1],8659:[.19444,.69444,0,0,.61111],8660:[-.13313,.36687,0,0,1],8661:[.25,.75,0,0,.61111],8704:[0,.69444,0,0,.55556],8706:[0,.69444,.05556,.08334,.5309],8707:[0,.69444,0,0,.55556],8709:[.05556,.75,0,0,.5],8711:[0,.68333,0,0,.83334],8712:[.0391,.5391,0,0,.66667],8715:[.0391,.5391,0,0,.66667],8722:[.08333,.58333,0,0,.77778],8723:[.08333,.58333,0,0,.77778],8725:[.25,.75,0,0,.5],8726:[.25,.75,0,0,.5],8727:[-.03472,.46528,0,0,.5],8728:[-.05555,.44445,0,0,.5],8729:[-.05555,.44445,0,0,.5],8730:[.2,.8,0,0,.83334],8733:[0,.43056,0,0,.77778],8734:[0,.43056,0,0,1],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.27778],8741:[.25,.75,0,0,.5],8743:[0,.55556,0,0,.66667],8744:[0,.55556,0,0,.66667],8745:[0,.55556,0,0,.66667],8746:[0,.55556,0,0,.66667],8747:[.19444,.69444,.11111,0,.41667],8764:[-.13313,.36687,0,0,.77778],8768:[.19444,.69444,0,0,.27778],8771:[-.03625,.46375,0,0,.77778],8773:[-.022,.589,0,0,.778],8776:[-.01688,.48312,0,0,.77778],8781:[-.03625,.46375,0,0,.77778],8784:[-.133,.673,0,0,.778],8801:[-.03625,.46375,0,0,.77778],8804:[.13597,.63597,0,0,.77778],8805:[.13597,.63597,0,0,.77778],8810:[.0391,.5391,0,0,1],8811:[.0391,.5391,0,0,1],8826:[.0391,.5391,0,0,.77778],8827:[.0391,.5391,0,0,.77778],8834:[.0391,.5391,0,0,.77778],8835:[.0391,.5391,0,0,.77778],8838:[.13597,.63597,0,0,.77778],8839:[.13597,.63597,0,0,.77778],8846:[0,.55556,0,0,.66667],8849:[.13597,.63597,0,0,.77778],8850:[.13597,.63597,0,0,.77778],8851:[0,.55556,0,0,.66667],8852:[0,.55556,0,0,.66667],8853:[.08333,.58333,0,0,.77778],8854:[.08333,.58333,0,0,.77778],8855:[.08333,.58333,0,0,.77778],8856:[.08333,.58333,0,0,.77778],8857:[.08333,.58333,0,0,.77778],8866:[0,.69444,0,0,.61111],8867:[0,.69444,0,0,.61111],8868:[0,.69444,0,0,.77778],8869:[0,.69444,0,0,.77778],8872:[.249,.75,0,0,.867],8900:[-.05555,.44445,0,0,.5],8901:[-.05555,.44445,0,0,.27778],8902:[-.03472,.46528,0,0,.5],8904:[.005,.505,0,0,.9],8942:[.03,.903,0,0,.278],8943:[-.19,.313,0,0,1.172],8945:[-.1,.823,0,0,1.282],8968:[.25,.75,0,0,.44445],8969:[.25,.75,0,0,.44445],8970:[.25,.75,0,0,.44445],8971:[.25,.75,0,0,.44445],8994:[-.14236,.35764,0,0,1],8995:[-.14236,.35764,0,0,1],9136:[.244,.744,0,0,.412],9137:[.244,.745,0,0,.412],9651:[.19444,.69444,0,0,.88889],9657:[-.03472,.46528,0,0,.5],9661:[.19444,.69444,0,0,.88889],9667:[-.03472,.46528,0,0,.5],9711:[.19444,.69444,0,0,1],9824:[.12963,.69444,0,0,.77778],9825:[.12963,.69444,0,0,.77778],9826:[.12963,.69444,0,0,.77778],9827:[.12963,.69444,0,0,.77778],9837:[0,.75,0,0,.38889],9838:[.19444,.69444,0,0,.38889],9839:[.19444,.69444,0,0,.38889],10216:[.25,.75,0,0,.38889],10217:[.25,.75,0,0,.38889],10222:[.244,.744,0,0,.412],10223:[.244,.745,0,0,.412],10229:[.011,.511,0,0,1.609],10230:[.011,.511,0,0,1.638],10231:[.011,.511,0,0,1.859],10232:[.024,.525,0,0,1.609],10233:[.024,.525,0,0,1.638],10234:[.024,.525,0,0,1.858],10236:[.011,.511,0,0,1.638],10815:[0,.68333,0,0,.75],10927:[.13597,.63597,0,0,.77778],10928:[.13597,.63597,0,0,.77778],57376:[.19444,.69444,0,0,0]},"Math-BoldItalic":{32:[0,0,0,0,.25],48:[0,.44444,0,0,.575],49:[0,.44444,0,0,.575],50:[0,.44444,0,0,.575],51:[.19444,.44444,0,0,.575],52:[.19444,.44444,0,0,.575],53:[.19444,.44444,0,0,.575],54:[0,.64444,0,0,.575],55:[.19444,.44444,0,0,.575],56:[0,.64444,0,0,.575],57:[.19444,.44444,0,0,.575],65:[0,.68611,0,0,.86944],66:[0,.68611,.04835,0,.8664],67:[0,.68611,.06979,0,.81694],68:[0,.68611,.03194,0,.93812],69:[0,.68611,.05451,0,.81007],70:[0,.68611,.15972,0,.68889],71:[0,.68611,0,0,.88673],72:[0,.68611,.08229,0,.98229],73:[0,.68611,.07778,0,.51111],74:[0,.68611,.10069,0,.63125],75:[0,.68611,.06979,0,.97118],76:[0,.68611,0,0,.75555],77:[0,.68611,.11424,0,1.14201],78:[0,.68611,.11424,0,.95034],79:[0,.68611,.03194,0,.83666],80:[0,.68611,.15972,0,.72309],81:[.19444,.68611,0,0,.86861],82:[0,.68611,.00421,0,.87235],83:[0,.68611,.05382,0,.69271],84:[0,.68611,.15972,0,.63663],85:[0,.68611,.11424,0,.80027],86:[0,.68611,.25555,0,.67778],87:[0,.68611,.15972,0,1.09305],88:[0,.68611,.07778,0,.94722],89:[0,.68611,.25555,0,.67458],90:[0,.68611,.06979,0,.77257],97:[0,.44444,0,0,.63287],98:[0,.69444,0,0,.52083],99:[0,.44444,0,0,.51342],100:[0,.69444,0,0,.60972],101:[0,.44444,0,0,.55361],102:[.19444,.69444,.11042,0,.56806],103:[.19444,.44444,.03704,0,.5449],104:[0,.69444,0,0,.66759],105:[0,.69326,0,0,.4048],106:[.19444,.69326,.0622,0,.47083],107:[0,.69444,.01852,0,.6037],108:[0,.69444,.0088,0,.34815],109:[0,.44444,0,0,1.0324],110:[0,.44444,0,0,.71296],111:[0,.44444,0,0,.58472],112:[.19444,.44444,0,0,.60092],113:[.19444,.44444,.03704,0,.54213],114:[0,.44444,.03194,0,.5287],115:[0,.44444,0,0,.53125],116:[0,.63492,0,0,.41528],117:[0,.44444,0,0,.68102],118:[0,.44444,.03704,0,.56666],119:[0,.44444,.02778,0,.83148],120:[0,.44444,0,0,.65903],121:[.19444,.44444,.03704,0,.59028],122:[0,.44444,.04213,0,.55509],160:[0,0,0,0,.25],915:[0,.68611,.15972,0,.65694],916:[0,.68611,0,0,.95833],920:[0,.68611,.03194,0,.86722],923:[0,.68611,0,0,.80555],926:[0,.68611,.07458,0,.84125],928:[0,.68611,.08229,0,.98229],931:[0,.68611,.05451,0,.88507],933:[0,.68611,.15972,0,.67083],934:[0,.68611,0,0,.76666],936:[0,.68611,.11653,0,.71402],937:[0,.68611,.04835,0,.8789],945:[0,.44444,0,0,.76064],946:[.19444,.69444,.03403,0,.65972],947:[.19444,.44444,.06389,0,.59003],948:[0,.69444,.03819,0,.52222],949:[0,.44444,0,0,.52882],950:[.19444,.69444,.06215,0,.50833],951:[.19444,.44444,.03704,0,.6],952:[0,.69444,.03194,0,.5618],953:[0,.44444,0,0,.41204],954:[0,.44444,0,0,.66759],955:[0,.69444,0,0,.67083],956:[.19444,.44444,0,0,.70787],957:[0,.44444,.06898,0,.57685],958:[.19444,.69444,.03021,0,.50833],959:[0,.44444,0,0,.58472],960:[0,.44444,.03704,0,.68241],961:[.19444,.44444,0,0,.6118],962:[.09722,.44444,.07917,0,.42361],963:[0,.44444,.03704,0,.68588],964:[0,.44444,.13472,0,.52083],965:[0,.44444,.03704,0,.63055],966:[.19444,.44444,0,0,.74722],967:[.19444,.44444,0,0,.71805],968:[.19444,.69444,.03704,0,.75833],969:[0,.44444,.03704,0,.71782],977:[0,.69444,0,0,.69155],981:[.19444,.69444,0,0,.7125],982:[0,.44444,.03194,0,.975],1009:[.19444,.44444,0,0,.6118],1013:[0,.44444,0,0,.48333],57649:[0,.44444,0,0,.39352],57911:[.19444,.44444,0,0,.43889]},"Math-Italic":{32:[0,0,0,0,.25],48:[0,.43056,0,0,.5],49:[0,.43056,0,0,.5],50:[0,.43056,0,0,.5],51:[.19444,.43056,0,0,.5],52:[.19444,.43056,0,0,.5],53:[.19444,.43056,0,0,.5],54:[0,.64444,0,0,.5],55:[.19444,.43056,0,0,.5],56:[0,.64444,0,0,.5],57:[.19444,.43056,0,0,.5],65:[0,.68333,0,.13889,.75],66:[0,.68333,.05017,.08334,.75851],67:[0,.68333,.07153,.08334,.71472],68:[0,.68333,.02778,.05556,.82792],69:[0,.68333,.05764,.08334,.7382],70:[0,.68333,.13889,.08334,.64306],71:[0,.68333,0,.08334,.78625],72:[0,.68333,.08125,.05556,.83125],73:[0,.68333,.07847,.11111,.43958],74:[0,.68333,.09618,.16667,.55451],75:[0,.68333,.07153,.05556,.84931],76:[0,.68333,0,.02778,.68056],77:[0,.68333,.10903,.08334,.97014],78:[0,.68333,.10903,.08334,.80347],79:[0,.68333,.02778,.08334,.76278],80:[0,.68333,.13889,.08334,.64201],81:[.19444,.68333,0,.08334,.79056],82:[0,.68333,.00773,.08334,.75929],83:[0,.68333,.05764,.08334,.6132],84:[0,.68333,.13889,.08334,.58438],85:[0,.68333,.10903,.02778,.68278],86:[0,.68333,.22222,0,.58333],87:[0,.68333,.13889,0,.94445],88:[0,.68333,.07847,.08334,.82847],89:[0,.68333,.22222,0,.58056],90:[0,.68333,.07153,.08334,.68264],97:[0,.43056,0,0,.52859],98:[0,.69444,0,0,.42917],99:[0,.43056,0,.05556,.43276],100:[0,.69444,0,.16667,.52049],101:[0,.43056,0,.05556,.46563],102:[.19444,.69444,.10764,.16667,.48959],103:[.19444,.43056,.03588,.02778,.47697],104:[0,.69444,0,0,.57616],105:[0,.65952,0,0,.34451],106:[.19444,.65952,.05724,0,.41181],107:[0,.69444,.03148,0,.5206],108:[0,.69444,.01968,.08334,.29838],109:[0,.43056,0,0,.87801],110:[0,.43056,0,0,.60023],111:[0,.43056,0,.05556,.48472],112:[.19444,.43056,0,.08334,.50313],113:[.19444,.43056,.03588,.08334,.44641],114:[0,.43056,.02778,.05556,.45116],115:[0,.43056,0,.05556,.46875],116:[0,.61508,0,.08334,.36111],117:[0,.43056,0,.02778,.57246],118:[0,.43056,.03588,.02778,.48472],119:[0,.43056,.02691,.08334,.71592],120:[0,.43056,0,.02778,.57153],121:[.19444,.43056,.03588,.05556,.49028],122:[0,.43056,.04398,.05556,.46505],160:[0,0,0,0,.25],915:[0,.68333,.13889,.08334,.61528],916:[0,.68333,0,.16667,.83334],920:[0,.68333,.02778,.08334,.76278],923:[0,.68333,0,.16667,.69445],926:[0,.68333,.07569,.08334,.74236],928:[0,.68333,.08125,.05556,.83125],931:[0,.68333,.05764,.08334,.77986],933:[0,.68333,.13889,.05556,.58333],934:[0,.68333,0,.08334,.66667],936:[0,.68333,.11,.05556,.61222],937:[0,.68333,.05017,.08334,.7724],945:[0,.43056,.0037,.02778,.6397],946:[.19444,.69444,.05278,.08334,.56563],947:[.19444,.43056,.05556,0,.51773],948:[0,.69444,.03785,.05556,.44444],949:[0,.43056,0,.08334,.46632],950:[.19444,.69444,.07378,.08334,.4375],951:[.19444,.43056,.03588,.05556,.49653],952:[0,.69444,.02778,.08334,.46944],953:[0,.43056,0,.05556,.35394],954:[0,.43056,0,0,.57616],955:[0,.69444,0,0,.58334],956:[.19444,.43056,0,.02778,.60255],957:[0,.43056,.06366,.02778,.49398],958:[.19444,.69444,.04601,.11111,.4375],959:[0,.43056,0,.05556,.48472],960:[0,.43056,.03588,0,.57003],961:[.19444,.43056,0,.08334,.51702],962:[.09722,.43056,.07986,.08334,.36285],963:[0,.43056,.03588,0,.57141],964:[0,.43056,.1132,.02778,.43715],965:[0,.43056,.03588,.02778,.54028],966:[.19444,.43056,0,.08334,.65417],967:[.19444,.43056,0,.05556,.62569],968:[.19444,.69444,.03588,.11111,.65139],969:[0,.43056,.03588,0,.62245],977:[0,.69444,0,.08334,.59144],981:[.19444,.69444,0,.08334,.59583],982:[0,.43056,.02778,0,.82813],1009:[.19444,.43056,0,.08334,.51702],1013:[0,.43056,0,.05556,.4059],57649:[0,.43056,0,.02778,.32246],57911:[.19444,.43056,0,.08334,.38403]},"SansSerif-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.36667],34:[0,.69444,0,0,.55834],35:[.19444,.69444,0,0,.91667],36:[.05556,.75,0,0,.55],37:[.05556,.75,0,0,1.02912],38:[0,.69444,0,0,.83056],39:[0,.69444,0,0,.30556],40:[.25,.75,0,0,.42778],41:[.25,.75,0,0,.42778],42:[0,.75,0,0,.55],43:[.11667,.61667,0,0,.85556],44:[.10556,.13056,0,0,.30556],45:[0,.45833,0,0,.36667],46:[0,.13056,0,0,.30556],47:[.25,.75,0,0,.55],48:[0,.69444,0,0,.55],49:[0,.69444,0,0,.55],50:[0,.69444,0,0,.55],51:[0,.69444,0,0,.55],52:[0,.69444,0,0,.55],53:[0,.69444,0,0,.55],54:[0,.69444,0,0,.55],55:[0,.69444,0,0,.55],56:[0,.69444,0,0,.55],57:[0,.69444,0,0,.55],58:[0,.45833,0,0,.30556],59:[.10556,.45833,0,0,.30556],61:[-.09375,.40625,0,0,.85556],63:[0,.69444,0,0,.51945],64:[0,.69444,0,0,.73334],65:[0,.69444,0,0,.73334],66:[0,.69444,0,0,.73334],67:[0,.69444,0,0,.70278],68:[0,.69444,0,0,.79445],69:[0,.69444,0,0,.64167],70:[0,.69444,0,0,.61111],71:[0,.69444,0,0,.73334],72:[0,.69444,0,0,.79445],73:[0,.69444,0,0,.33056],74:[0,.69444,0,0,.51945],75:[0,.69444,0,0,.76389],76:[0,.69444,0,0,.58056],77:[0,.69444,0,0,.97778],78:[0,.69444,0,0,.79445],79:[0,.69444,0,0,.79445],80:[0,.69444,0,0,.70278],81:[.10556,.69444,0,0,.79445],82:[0,.69444,0,0,.70278],83:[0,.69444,0,0,.61111],84:[0,.69444,0,0,.73334],85:[0,.69444,0,0,.76389],86:[0,.69444,.01528,0,.73334],87:[0,.69444,.01528,0,1.03889],88:[0,.69444,0,0,.73334],89:[0,.69444,.0275,0,.73334],90:[0,.69444,0,0,.67223],91:[.25,.75,0,0,.34306],93:[.25,.75,0,0,.34306],94:[0,.69444,0,0,.55],95:[.35,.10833,.03056,0,.55],97:[0,.45833,0,0,.525],98:[0,.69444,0,0,.56111],99:[0,.45833,0,0,.48889],100:[0,.69444,0,0,.56111],101:[0,.45833,0,0,.51111],102:[0,.69444,.07639,0,.33611],103:[.19444,.45833,.01528,0,.55],104:[0,.69444,0,0,.56111],105:[0,.69444,0,0,.25556],106:[.19444,.69444,0,0,.28611],107:[0,.69444,0,0,.53056],108:[0,.69444,0,0,.25556],109:[0,.45833,0,0,.86667],110:[0,.45833,0,0,.56111],111:[0,.45833,0,0,.55],112:[.19444,.45833,0,0,.56111],113:[.19444,.45833,0,0,.56111],114:[0,.45833,.01528,0,.37222],115:[0,.45833,0,0,.42167],116:[0,.58929,0,0,.40417],117:[0,.45833,0,0,.56111],118:[0,.45833,.01528,0,.5],119:[0,.45833,.01528,0,.74445],120:[0,.45833,0,0,.5],121:[.19444,.45833,.01528,0,.5],122:[0,.45833,0,0,.47639],126:[.35,.34444,0,0,.55],160:[0,0,0,0,.25],168:[0,.69444,0,0,.55],176:[0,.69444,0,0,.73334],180:[0,.69444,0,0,.55],184:[.17014,0,0,0,.48889],305:[0,.45833,0,0,.25556],567:[.19444,.45833,0,0,.28611],710:[0,.69444,0,0,.55],711:[0,.63542,0,0,.55],713:[0,.63778,0,0,.55],728:[0,.69444,0,0,.55],729:[0,.69444,0,0,.30556],730:[0,.69444,0,0,.73334],732:[0,.69444,0,0,.55],733:[0,.69444,0,0,.55],915:[0,.69444,0,0,.58056],916:[0,.69444,0,0,.91667],920:[0,.69444,0,0,.85556],923:[0,.69444,0,0,.67223],926:[0,.69444,0,0,.73334],928:[0,.69444,0,0,.79445],931:[0,.69444,0,0,.79445],933:[0,.69444,0,0,.85556],934:[0,.69444,0,0,.79445],936:[0,.69444,0,0,.85556],937:[0,.69444,0,0,.79445],8211:[0,.45833,.03056,0,.55],8212:[0,.45833,.03056,0,1.10001],8216:[0,.69444,0,0,.30556],8217:[0,.69444,0,0,.30556],8220:[0,.69444,0,0,.55834],8221:[0,.69444,0,0,.55834]},"SansSerif-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.05733,0,.31945],34:[0,.69444,.00316,0,.5],35:[.19444,.69444,.05087,0,.83334],36:[.05556,.75,.11156,0,.5],37:[.05556,.75,.03126,0,.83334],38:[0,.69444,.03058,0,.75834],39:[0,.69444,.07816,0,.27778],40:[.25,.75,.13164,0,.38889],41:[.25,.75,.02536,0,.38889],42:[0,.75,.11775,0,.5],43:[.08333,.58333,.02536,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,.01946,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,.13164,0,.5],48:[0,.65556,.11156,0,.5],49:[0,.65556,.11156,0,.5],50:[0,.65556,.11156,0,.5],51:[0,.65556,.11156,0,.5],52:[0,.65556,.11156,0,.5],53:[0,.65556,.11156,0,.5],54:[0,.65556,.11156,0,.5],55:[0,.65556,.11156,0,.5],56:[0,.65556,.11156,0,.5],57:[0,.65556,.11156,0,.5],58:[0,.44444,.02502,0,.27778],59:[.125,.44444,.02502,0,.27778],61:[-.13,.37,.05087,0,.77778],63:[0,.69444,.11809,0,.47222],64:[0,.69444,.07555,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,.08293,0,.66667],67:[0,.69444,.11983,0,.63889],68:[0,.69444,.07555,0,.72223],69:[0,.69444,.11983,0,.59722],70:[0,.69444,.13372,0,.56945],71:[0,.69444,.11983,0,.66667],72:[0,.69444,.08094,0,.70834],73:[0,.69444,.13372,0,.27778],74:[0,.69444,.08094,0,.47222],75:[0,.69444,.11983,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,.08094,0,.875],78:[0,.69444,.08094,0,.70834],79:[0,.69444,.07555,0,.73611],80:[0,.69444,.08293,0,.63889],81:[.125,.69444,.07555,0,.73611],82:[0,.69444,.08293,0,.64584],83:[0,.69444,.09205,0,.55556],84:[0,.69444,.13372,0,.68056],85:[0,.69444,.08094,0,.6875],86:[0,.69444,.1615,0,.66667],87:[0,.69444,.1615,0,.94445],88:[0,.69444,.13372,0,.66667],89:[0,.69444,.17261,0,.66667],90:[0,.69444,.11983,0,.61111],91:[.25,.75,.15942,0,.28889],93:[.25,.75,.08719,0,.28889],94:[0,.69444,.0799,0,.5],95:[.35,.09444,.08616,0,.5],97:[0,.44444,.00981,0,.48056],98:[0,.69444,.03057,0,.51667],99:[0,.44444,.08336,0,.44445],100:[0,.69444,.09483,0,.51667],101:[0,.44444,.06778,0,.44445],102:[0,.69444,.21705,0,.30556],103:[.19444,.44444,.10836,0,.5],104:[0,.69444,.01778,0,.51667],105:[0,.67937,.09718,0,.23889],106:[.19444,.67937,.09162,0,.26667],107:[0,.69444,.08336,0,.48889],108:[0,.69444,.09483,0,.23889],109:[0,.44444,.01778,0,.79445],110:[0,.44444,.01778,0,.51667],111:[0,.44444,.06613,0,.5],112:[.19444,.44444,.0389,0,.51667],113:[.19444,.44444,.04169,0,.51667],114:[0,.44444,.10836,0,.34167],115:[0,.44444,.0778,0,.38333],116:[0,.57143,.07225,0,.36111],117:[0,.44444,.04169,0,.51667],118:[0,.44444,.10836,0,.46111],119:[0,.44444,.10836,0,.68334],120:[0,.44444,.09169,0,.46111],121:[.19444,.44444,.10836,0,.46111],122:[0,.44444,.08752,0,.43472],126:[.35,.32659,.08826,0,.5],160:[0,0,0,0,.25],168:[0,.67937,.06385,0,.5],176:[0,.69444,0,0,.73752],184:[.17014,0,0,0,.44445],305:[0,.44444,.04169,0,.23889],567:[.19444,.44444,.04169,0,.26667],710:[0,.69444,.0799,0,.5],711:[0,.63194,.08432,0,.5],713:[0,.60889,.08776,0,.5],714:[0,.69444,.09205,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,.09483,0,.5],729:[0,.67937,.07774,0,.27778],730:[0,.69444,0,0,.73752],732:[0,.67659,.08826,0,.5],733:[0,.69444,.09205,0,.5],915:[0,.69444,.13372,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,.07555,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,.12816,0,.66667],928:[0,.69444,.08094,0,.70834],931:[0,.69444,.11983,0,.72222],933:[0,.69444,.09031,0,.77778],934:[0,.69444,.04603,0,.72222],936:[0,.69444,.09031,0,.77778],937:[0,.69444,.08293,0,.72222],8211:[0,.44444,.08616,0,.5],8212:[0,.44444,.08616,0,1],8216:[0,.69444,.07816,0,.27778],8217:[0,.69444,.07816,0,.27778],8220:[0,.69444,.14205,0,.5],8221:[0,.69444,.00316,0,.5]},"SansSerif-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.31945],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.75834],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,0,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.65556,0,0,.5],49:[0,.65556,0,0,.5],50:[0,.65556,0,0,.5],51:[0,.65556,0,0,.5],52:[0,.65556,0,0,.5],53:[0,.65556,0,0,.5],54:[0,.65556,0,0,.5],55:[0,.65556,0,0,.5],56:[0,.65556,0,0,.5],57:[0,.65556,0,0,.5],58:[0,.44444,0,0,.27778],59:[.125,.44444,0,0,.27778],61:[-.13,.37,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,0,0,.66667],67:[0,.69444,0,0,.63889],68:[0,.69444,0,0,.72223],69:[0,.69444,0,0,.59722],70:[0,.69444,0,0,.56945],71:[0,.69444,0,0,.66667],72:[0,.69444,0,0,.70834],73:[0,.69444,0,0,.27778],74:[0,.69444,0,0,.47222],75:[0,.69444,0,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,0,0,.875],78:[0,.69444,0,0,.70834],79:[0,.69444,0,0,.73611],80:[0,.69444,0,0,.63889],81:[.125,.69444,0,0,.73611],82:[0,.69444,0,0,.64584],83:[0,.69444,0,0,.55556],84:[0,.69444,0,0,.68056],85:[0,.69444,0,0,.6875],86:[0,.69444,.01389,0,.66667],87:[0,.69444,.01389,0,.94445],88:[0,.69444,0,0,.66667],89:[0,.69444,.025,0,.66667],90:[0,.69444,0,0,.61111],91:[.25,.75,0,0,.28889],93:[.25,.75,0,0,.28889],94:[0,.69444,0,0,.5],95:[.35,.09444,.02778,0,.5],97:[0,.44444,0,0,.48056],98:[0,.69444,0,0,.51667],99:[0,.44444,0,0,.44445],100:[0,.69444,0,0,.51667],101:[0,.44444,0,0,.44445],102:[0,.69444,.06944,0,.30556],103:[.19444,.44444,.01389,0,.5],104:[0,.69444,0,0,.51667],105:[0,.67937,0,0,.23889],106:[.19444,.67937,0,0,.26667],107:[0,.69444,0,0,.48889],108:[0,.69444,0,0,.23889],109:[0,.44444,0,0,.79445],110:[0,.44444,0,0,.51667],111:[0,.44444,0,0,.5],112:[.19444,.44444,0,0,.51667],113:[.19444,.44444,0,0,.51667],114:[0,.44444,.01389,0,.34167],115:[0,.44444,0,0,.38333],116:[0,.57143,0,0,.36111],117:[0,.44444,0,0,.51667],118:[0,.44444,.01389,0,.46111],119:[0,.44444,.01389,0,.68334],120:[0,.44444,0,0,.46111],121:[.19444,.44444,.01389,0,.46111],122:[0,.44444,0,0,.43472],126:[.35,.32659,0,0,.5],160:[0,0,0,0,.25],168:[0,.67937,0,0,.5],176:[0,.69444,0,0,.66667],184:[.17014,0,0,0,.44445],305:[0,.44444,0,0,.23889],567:[.19444,.44444,0,0,.26667],710:[0,.69444,0,0,.5],711:[0,.63194,0,0,.5],713:[0,.60889,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.67937,0,0,.27778],730:[0,.69444,0,0,.66667],732:[0,.67659,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.69444,0,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,0,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,0,0,.66667],928:[0,.69444,0,0,.70834],931:[0,.69444,0,0,.72222],933:[0,.69444,0,0,.77778],934:[0,.69444,0,0,.72222],936:[0,.69444,0,0,.77778],937:[0,.69444,0,0,.72222],8211:[0,.44444,.02778,0,.5],8212:[0,.44444,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5]},"Script-Regular":{32:[0,0,0,0,.25],65:[0,.7,.22925,0,.80253],66:[0,.7,.04087,0,.90757],67:[0,.7,.1689,0,.66619],68:[0,.7,.09371,0,.77443],69:[0,.7,.18583,0,.56162],70:[0,.7,.13634,0,.89544],71:[0,.7,.17322,0,.60961],72:[0,.7,.29694,0,.96919],73:[0,.7,.19189,0,.80907],74:[.27778,.7,.19189,0,1.05159],75:[0,.7,.31259,0,.91364],76:[0,.7,.19189,0,.87373],77:[0,.7,.15981,0,1.08031],78:[0,.7,.3525,0,.9015],79:[0,.7,.08078,0,.73787],80:[0,.7,.08078,0,1.01262],81:[0,.7,.03305,0,.88282],82:[0,.7,.06259,0,.85],83:[0,.7,.19189,0,.86767],84:[0,.7,.29087,0,.74697],85:[0,.7,.25815,0,.79996],86:[0,.7,.27523,0,.62204],87:[0,.7,.27523,0,.80532],88:[0,.7,.26006,0,.94445],89:[0,.7,.2939,0,.70961],90:[0,.7,.24037,0,.8212],160:[0,0,0,0,.25]},"Size1-Regular":{32:[0,0,0,0,.25],40:[.35001,.85,0,0,.45834],41:[.35001,.85,0,0,.45834],47:[.35001,.85,0,0,.57778],91:[.35001,.85,0,0,.41667],92:[.35001,.85,0,0,.57778],93:[.35001,.85,0,0,.41667],123:[.35001,.85,0,0,.58334],125:[.35001,.85,0,0,.58334],160:[0,0,0,0,.25],710:[0,.72222,0,0,.55556],732:[0,.72222,0,0,.55556],770:[0,.72222,0,0,.55556],771:[0,.72222,0,0,.55556],8214:[-99e-5,.601,0,0,.77778],8593:[1e-5,.6,0,0,.66667],8595:[1e-5,.6,0,0,.66667],8657:[1e-5,.6,0,0,.77778],8659:[1e-5,.6,0,0,.77778],8719:[.25001,.75,0,0,.94445],8720:[.25001,.75,0,0,.94445],8721:[.25001,.75,0,0,1.05556],8730:[.35001,.85,0,0,1],8739:[-.00599,.606,0,0,.33333],8741:[-.00599,.606,0,0,.55556],8747:[.30612,.805,.19445,0,.47222],8748:[.306,.805,.19445,0,.47222],8749:[.306,.805,.19445,0,.47222],8750:[.30612,.805,.19445,0,.47222],8896:[.25001,.75,0,0,.83334],8897:[.25001,.75,0,0,.83334],8898:[.25001,.75,0,0,.83334],8899:[.25001,.75,0,0,.83334],8968:[.35001,.85,0,0,.47222],8969:[.35001,.85,0,0,.47222],8970:[.35001,.85,0,0,.47222],8971:[.35001,.85,0,0,.47222],9168:[-99e-5,.601,0,0,.66667],10216:[.35001,.85,0,0,.47222],10217:[.35001,.85,0,0,.47222],10752:[.25001,.75,0,0,1.11111],10753:[.25001,.75,0,0,1.11111],10754:[.25001,.75,0,0,1.11111],10756:[.25001,.75,0,0,.83334],10758:[.25001,.75,0,0,.83334]},"Size2-Regular":{32:[0,0,0,0,.25],40:[.65002,1.15,0,0,.59722],41:[.65002,1.15,0,0,.59722],47:[.65002,1.15,0,0,.81111],91:[.65002,1.15,0,0,.47222],92:[.65002,1.15,0,0,.81111],93:[.65002,1.15,0,0,.47222],123:[.65002,1.15,0,0,.66667],125:[.65002,1.15,0,0,.66667],160:[0,0,0,0,.25],710:[0,.75,0,0,1],732:[0,.75,0,0,1],770:[0,.75,0,0,1],771:[0,.75,0,0,1],8719:[.55001,1.05,0,0,1.27778],8720:[.55001,1.05,0,0,1.27778],8721:[.55001,1.05,0,0,1.44445],8730:[.65002,1.15,0,0,1],8747:[.86225,1.36,.44445,0,.55556],8748:[.862,1.36,.44445,0,.55556],8749:[.862,1.36,.44445,0,.55556],8750:[.86225,1.36,.44445,0,.55556],8896:[.55001,1.05,0,0,1.11111],8897:[.55001,1.05,0,0,1.11111],8898:[.55001,1.05,0,0,1.11111],8899:[.55001,1.05,0,0,1.11111],8968:[.65002,1.15,0,0,.52778],8969:[.65002,1.15,0,0,.52778],8970:[.65002,1.15,0,0,.52778],8971:[.65002,1.15,0,0,.52778],10216:[.65002,1.15,0,0,.61111],10217:[.65002,1.15,0,0,.61111],10752:[.55001,1.05,0,0,1.51112],10753:[.55001,1.05,0,0,1.51112],10754:[.55001,1.05,0,0,1.51112],10756:[.55001,1.05,0,0,1.11111],10758:[.55001,1.05,0,0,1.11111]},"Size3-Regular":{32:[0,0,0,0,.25],40:[.95003,1.45,0,0,.73611],41:[.95003,1.45,0,0,.73611],47:[.95003,1.45,0,0,1.04445],91:[.95003,1.45,0,0,.52778],92:[.95003,1.45,0,0,1.04445],93:[.95003,1.45,0,0,.52778],123:[.95003,1.45,0,0,.75],125:[.95003,1.45,0,0,.75],160:[0,0,0,0,.25],710:[0,.75,0,0,1.44445],732:[0,.75,0,0,1.44445],770:[0,.75,0,0,1.44445],771:[0,.75,0,0,1.44445],8730:[.95003,1.45,0,0,1],8968:[.95003,1.45,0,0,.58334],8969:[.95003,1.45,0,0,.58334],8970:[.95003,1.45,0,0,.58334],8971:[.95003,1.45,0,0,.58334],10216:[.95003,1.45,0,0,.75],10217:[.95003,1.45,0,0,.75]},"Size4-Regular":{32:[0,0,0,0,.25],40:[1.25003,1.75,0,0,.79167],41:[1.25003,1.75,0,0,.79167],47:[1.25003,1.75,0,0,1.27778],91:[1.25003,1.75,0,0,.58334],92:[1.25003,1.75,0,0,1.27778],93:[1.25003,1.75,0,0,.58334],123:[1.25003,1.75,0,0,.80556],125:[1.25003,1.75,0,0,.80556],160:[0,0,0,0,.25],710:[0,.825,0,0,1.8889],732:[0,.825,0,0,1.8889],770:[0,.825,0,0,1.8889],771:[0,.825,0,0,1.8889],8730:[1.25003,1.75,0,0,1],8968:[1.25003,1.75,0,0,.63889],8969:[1.25003,1.75,0,0,.63889],8970:[1.25003,1.75,0,0,.63889],8971:[1.25003,1.75,0,0,.63889],9115:[.64502,1.155,0,0,.875],9116:[1e-5,.6,0,0,.875],9117:[.64502,1.155,0,0,.875],9118:[.64502,1.155,0,0,.875],9119:[1e-5,.6,0,0,.875],9120:[.64502,1.155,0,0,.875],9121:[.64502,1.155,0,0,.66667],9122:[-99e-5,.601,0,0,.66667],9123:[.64502,1.155,0,0,.66667],9124:[.64502,1.155,0,0,.66667],9125:[-99e-5,.601,0,0,.66667],9126:[.64502,1.155,0,0,.66667],9127:[1e-5,.9,0,0,.88889],9128:[.65002,1.15,0,0,.88889],9129:[.90001,0,0,0,.88889],9130:[0,.3,0,0,.88889],9131:[1e-5,.9,0,0,.88889],9132:[.65002,1.15,0,0,.88889],9133:[.90001,0,0,0,.88889],9143:[.88502,.915,0,0,1.05556],10216:[1.25003,1.75,0,0,.80556],10217:[1.25003,1.75,0,0,.80556],57344:[-.00499,.605,0,0,1.05556],57345:[-.00499,.605,0,0,1.05556],57680:[0,.12,0,0,.45],57681:[0,.12,0,0,.45],57682:[0,.12,0,0,.45],57683:[0,.12,0,0,.45]},"Typewriter-Regular":{32:[0,0,0,0,.525],33:[0,.61111,0,0,.525],34:[0,.61111,0,0,.525],35:[0,.61111,0,0,.525],36:[.08333,.69444,0,0,.525],37:[.08333,.69444,0,0,.525],38:[0,.61111,0,0,.525],39:[0,.61111,0,0,.525],40:[.08333,.69444,0,0,.525],41:[.08333,.69444,0,0,.525],42:[0,.52083,0,0,.525],43:[-.08056,.53055,0,0,.525],44:[.13889,.125,0,0,.525],45:[-.08056,.53055,0,0,.525],46:[0,.125,0,0,.525],47:[.08333,.69444,0,0,.525],48:[0,.61111,0,0,.525],49:[0,.61111,0,0,.525],50:[0,.61111,0,0,.525],51:[0,.61111,0,0,.525],52:[0,.61111,0,0,.525],53:[0,.61111,0,0,.525],54:[0,.61111,0,0,.525],55:[0,.61111,0,0,.525],56:[0,.61111,0,0,.525],57:[0,.61111,0,0,.525],58:[0,.43056,0,0,.525],59:[.13889,.43056,0,0,.525],60:[-.05556,.55556,0,0,.525],61:[-.19549,.41562,0,0,.525],62:[-.05556,.55556,0,0,.525],63:[0,.61111,0,0,.525],64:[0,.61111,0,0,.525],65:[0,.61111,0,0,.525],66:[0,.61111,0,0,.525],67:[0,.61111,0,0,.525],68:[0,.61111,0,0,.525],69:[0,.61111,0,0,.525],70:[0,.61111,0,0,.525],71:[0,.61111,0,0,.525],72:[0,.61111,0,0,.525],73:[0,.61111,0,0,.525],74:[0,.61111,0,0,.525],75:[0,.61111,0,0,.525],76:[0,.61111,0,0,.525],77:[0,.61111,0,0,.525],78:[0,.61111,0,0,.525],79:[0,.61111,0,0,.525],80:[0,.61111,0,0,.525],81:[.13889,.61111,0,0,.525],82:[0,.61111,0,0,.525],83:[0,.61111,0,0,.525],84:[0,.61111,0,0,.525],85:[0,.61111,0,0,.525],86:[0,.61111,0,0,.525],87:[0,.61111,0,0,.525],88:[0,.61111,0,0,.525],89:[0,.61111,0,0,.525],90:[0,.61111,0,0,.525],91:[.08333,.69444,0,0,.525],92:[.08333,.69444,0,0,.525],93:[.08333,.69444,0,0,.525],94:[0,.61111,0,0,.525],95:[.09514,0,0,0,.525],96:[0,.61111,0,0,.525],97:[0,.43056,0,0,.525],98:[0,.61111,0,0,.525],99:[0,.43056,0,0,.525],100:[0,.61111,0,0,.525],101:[0,.43056,0,0,.525],102:[0,.61111,0,0,.525],103:[.22222,.43056,0,0,.525],104:[0,.61111,0,0,.525],105:[0,.61111,0,0,.525],106:[.22222,.61111,0,0,.525],107:[0,.61111,0,0,.525],108:[0,.61111,0,0,.525],109:[0,.43056,0,0,.525],110:[0,.43056,0,0,.525],111:[0,.43056,0,0,.525],112:[.22222,.43056,0,0,.525],113:[.22222,.43056,0,0,.525],114:[0,.43056,0,0,.525],115:[0,.43056,0,0,.525],116:[0,.55358,0,0,.525],117:[0,.43056,0,0,.525],118:[0,.43056,0,0,.525],119:[0,.43056,0,0,.525],120:[0,.43056,0,0,.525],121:[.22222,.43056,0,0,.525],122:[0,.43056,0,0,.525],123:[.08333,.69444,0,0,.525],124:[.08333,.69444,0,0,.525],125:[.08333,.69444,0,0,.525],126:[0,.61111,0,0,.525],127:[0,.61111,0,0,.525],160:[0,0,0,0,.525],176:[0,.61111,0,0,.525],184:[.19445,0,0,0,.525],305:[0,.43056,0,0,.525],567:[.22222,.43056,0,0,.525],711:[0,.56597,0,0,.525],713:[0,.56555,0,0,.525],714:[0,.61111,0,0,.525],715:[0,.61111,0,0,.525],728:[0,.61111,0,0,.525],730:[0,.61111,0,0,.525],770:[0,.61111,0,0,.525],771:[0,.61111,0,0,.525],776:[0,.61111,0,0,.525],915:[0,.61111,0,0,.525],916:[0,.61111,0,0,.525],920:[0,.61111,0,0,.525],923:[0,.61111,0,0,.525],926:[0,.61111,0,0,.525],928:[0,.61111,0,0,.525],931:[0,.61111,0,0,.525],933:[0,.61111,0,0,.525],934:[0,.61111,0,0,.525],936:[0,.61111,0,0,.525],937:[0,.61111,0,0,.525],8216:[0,.61111,0,0,.525],8217:[0,.61111,0,0,.525],8242:[0,.61111,0,0,.525],9251:[.11111,.21944,0,0,.525]}},c3={slant:[.25,.25,.25],space:[0,0,0],stretch:[0,0,0],shrink:[0,0,0],xHeight:[.431,.431,.431],quad:[1,1.171,1.472],extraSpace:[0,0,0],num1:[.677,.732,.925],num2:[.394,.384,.387],num3:[.444,.471,.504],denom1:[.686,.752,1.025],denom2:[.345,.344,.532],sup1:[.413,.503,.504],sup2:[.363,.431,.404],sup3:[.289,.286,.294],sub1:[.15,.143,.2],sub2:[.247,.286,.4],supDrop:[.386,.353,.494],subDrop:[.05,.071,.1],delim1:[2.39,1.7,1.98],delim2:[1.01,1.157,1.42],axisHeight:[.25,.25,.25],defaultRuleThickness:[.04,.049,.049],bigOpSpacing1:[.111,.111,.111],bigOpSpacing2:[.166,.166,.166],bigOpSpacing3:[.2,.2,.2],bigOpSpacing4:[.6,.611,.611],bigOpSpacing5:[.1,.143,.143],sqrtRuleThickness:[.04,.04,.04],ptPerEm:[10,10,10],doubleRuleSep:[.2,.2,.2],arrayRuleWidth:[.04,.04,.04],fboxsep:[.3,.3,.3],fboxrule:[.04,.04,.04]},Kz={\u00C5:"A",\u00D0:"D",\u00DE:"o",\u00E5:"a",\u00F0:"d",\u00FE:"o",\u0410:"A",\u0411:"B",\u0412:"B",\u0413:"F",\u0414:"A",\u0415:"E",\u0416:"K",\u0417:"3",\u0418:"N",\u0419:"N",\u041A:"K",\u041B:"N",\u041C:"M",\u041D:"H",\u041E:"O",\u041F:"N",\u0420:"P",\u0421:"C",\u0422:"T",\u0423:"y",\u0424:"O",\u0425:"X",\u0426:"U",\u0427:"h",\u0428:"W",\u0429:"W",\u042A:"B",\u042B:"X",\u042C:"B",\u042D:"3",\u042E:"X",\u042F:"R",\u0430:"a",\u0431:"b",\u0432:"a",\u0433:"r",\u0434:"y",\u0435:"e",\u0436:"m",\u0437:"e",\u0438:"n",\u0439:"n",\u043A:"n",\u043B:"n",\u043C:"m",\u043D:"n",\u043E:"o",\u043F:"n",\u0440:"p",\u0441:"c",\u0442:"o",\u0443:"y",\u0444:"b",\u0445:"x",\u0446:"n",\u0447:"n",\u0448:"w",\u0449:"w",\u044A:"a",\u044B:"m",\u044C:"a",\u044D:"e",\u044E:"m",\u044F:"r"};o(_G,"setFontMetrics");o(nA,"getCharacterMetrics");R7={};o(X4e,"getGlobalMetrics");j4e=[[1,1,1],[2,1,1],[3,1,1],[4,2,1],[5,2,1],[6,3,1],[7,4,2],[8,6,3],[9,7,6],[10,8,7],[11,10,9]],Qz=[.5,.6,.7,.8,.9,1,1.2,1.44,1.728,2.074,2.488],Zz=o(function(e,r){return r.size<2?e:j4e[e-1][r.size-1]},"sizeAtStyle"),w3=class t{static{o(this,"Options")}constructor(e){this.style=void 0,this.color=void 0,this.size=void 0,this.textSize=void 0,this.phantom=void 0,this.font=void 0,this.fontFamily=void 0,this.fontWeight=void 0,this.fontShape=void 0,this.sizeMultiplier=void 0,this.maxSize=void 0,this.minRuleThickness=void 0,this._fontMetrics=void 0,this.style=e.style,this.color=e.color,this.size=e.size||t.BASESIZE,this.textSize=e.textSize||this.size,this.phantom=!!e.phantom,this.font=e.font||"",this.fontFamily=e.fontFamily||"",this.fontWeight=e.fontWeight||"",this.fontShape=e.fontShape||"",this.sizeMultiplier=Qz[this.size-1],this.maxSize=e.maxSize,this.minRuleThickness=e.minRuleThickness,this._fontMetrics=void 0}extend(e){var r={style:this.style,size:this.size,textSize:this.textSize,color:this.color,phantom:this.phantom,font:this.font,fontFamily:this.fontFamily,fontWeight:this.fontWeight,fontShape:this.fontShape,maxSize:this.maxSize,minRuleThickness:this.minRuleThickness};for(var n in e)e.hasOwnProperty(n)&&(r[n]=e[n]);return new t(r)}havingStyle(e){return this.style===e?this:this.extend({style:e,size:Zz(this.textSize,e)})}havingCrampedStyle(){return this.havingStyle(this.style.cramp())}havingSize(e){return this.size===e&&this.textSize===e?this:this.extend({style:this.style.text(),size:e,textSize:e,sizeMultiplier:Qz[e-1]})}havingBaseStyle(e){e=e||this.style.text();var r=Zz(t.BASESIZE,e);return this.size===r&&this.textSize===t.BASESIZE&&this.style===e?this:this.extend({style:e,size:r})}havingBaseSizing(){var e;switch(this.style.id){case 4:case 5:e=3;break;case 6:case 7:e=1;break;default:e=6}return this.extend({style:this.style.text(),size:e})}withColor(e){return this.extend({color:e})}withPhantom(){return this.extend({phantom:!0})}withFont(e){return this.extend({font:e})}withTextFontFamily(e){return this.extend({fontFamily:e,font:""})}withTextFontWeight(e){return this.extend({fontWeight:e,font:""})}withTextFontShape(e){return this.extend({fontShape:e,font:""})}sizingClasses(e){return e.size!==this.size?["sizing","reset-size"+e.size,"size"+this.size]:[]}baseSizingClasses(){return this.size!==t.BASESIZE?["sizing","reset-size"+this.size,"size"+t.BASESIZE]:[]}fontMetrics(){return this._fontMetrics||(this._fontMetrics=X4e(this.size)),this._fontMetrics}getColor(){return this.phantom?"transparent":this.color}};w3.BASESIZE=6;W7={pt:1,mm:7227/2540,cm:7227/254,in:72.27,bp:803/800,pc:12,dd:1238/1157,cc:14856/1157,nd:685/642,nc:1370/107,sp:1/65536,px:803/800},K4e={ex:!0,em:!0,mu:!0},DG=o(function(e){return typeof e!="string"&&(e=e.unit),e in W7||e in K4e||e==="ex"},"validUnit"),ni=o(function(e,r){var n;if(e.unit in W7)n=W7[e.unit]/r.fontMetrics().ptPerEm/r.sizeMultiplier;else if(e.unit==="mu")n=r.fontMetrics().cssEmPerMu;else{var i;if(r.style.isTight()?i=r.havingStyle(r.style.text()):i=r,e.unit==="ex")n=i.fontMetrics().xHeight;else if(e.unit==="em")n=i.fontMetrics().quad;else throw new pt("Invalid unit: '"+e.unit+"'");i!==r&&(n*=i.sizeMultiplier/r.sizeMultiplier)}return Math.min(e.number*n,r.maxSize)},"calculateSize"),Et=o(function(e){return+e.toFixed(4)+"em"},"makeEm"),vh=o(function(e){return e.filter(r=>r).join(" ")},"createClass"),LG=o(function(e,r,n){if(this.classes=e||[],this.attributes={},this.height=0,this.depth=0,this.maxFontSize=0,this.style=n||{},r){r.style.isTight()&&this.classes.push("mtight");var i=r.getColor();i&&(this.style.color=i)}},"initNode"),RG=o(function(e){var r=document.createElement(e);r.className=vh(this.classes);for(var n in this.style)this.style.hasOwnProperty(n)&&(r.style[n]=this.style[n]);for(var i in this.attributes)this.attributes.hasOwnProperty(i)&&r.setAttribute(i,this.attributes[i]);for(var a=0;a/=\x00-\x1f]/,NG=o(function(e){var r="<"+e;this.classes.length&&(r+=' class="'+Jt.escape(vh(this.classes))+'"');var n="";for(var i in this.style)this.style.hasOwnProperty(i)&&(n+=Jt.hyphenate(i)+":"+this.style[i]+";");n&&(r+=' style="'+Jt.escape(n)+'"');for(var a in this.attributes)if(this.attributes.hasOwnProperty(a)){if(Q4e.test(a))throw new pt("Invalid attribute name '"+a+"'");r+=" "+a+'="'+Jt.escape(this.attributes[a])+'"'}r+=">";for(var s=0;s",r},"toMarkup"),ld=class{static{o(this,"Span")}constructor(e,r,n,i){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.width=void 0,this.maxFontSize=void 0,this.style=void 0,LG.call(this,e,n,i),this.children=r||[]}setAttribute(e,r){this.attributes[e]=r}hasClass(e){return Jt.contains(this.classes,e)}toNode(){return RG.call(this,"span")}toMarkup(){return NG.call(this,"span")}},Zy=class{static{o(this,"Anchor")}constructor(e,r,n,i){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,LG.call(this,r,i),this.children=n||[],this.setAttribute("href",e)}setAttribute(e,r){this.attributes[e]=r}hasClass(e){return Jt.contains(this.classes,e)}toNode(){return RG.call(this,"a")}toMarkup(){return NG.call(this,"a")}},q7=class{static{o(this,"Img")}constructor(e,r,n){this.src=void 0,this.alt=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.alt=r,this.src=e,this.classes=["mord"],this.style=n}hasClass(e){return Jt.contains(this.classes,e)}toNode(){var e=document.createElement("img");e.src=this.src,e.alt=this.alt,e.className="mord";for(var r in this.style)this.style.hasOwnProperty(r)&&(e.style[r]=this.style[r]);return e}toMarkup(){var e=''+Jt.escape(this.alt)+'0&&(r=document.createElement("span"),r.style.marginRight=Et(this.italic)),this.classes.length>0&&(r=r||document.createElement("span"),r.className=vh(this.classes));for(var n in this.style)this.style.hasOwnProperty(n)&&(r=r||document.createElement("span"),r.style[n]=this.style[n]);return r?(r.appendChild(e),r):e}toMarkup(){var e=!1,r="0&&(n+="margin-right:"+this.italic+"em;");for(var i in this.style)this.style.hasOwnProperty(i)&&(n+=Jt.hyphenate(i)+":"+this.style[i]+";");n&&(e=!0,r+=' style="'+Jt.escape(n)+'"');var a=Jt.escape(this.text);return e?(r+=">",r+=a,r+="",r):a}},dl=class{static{o(this,"SvgNode")}constructor(e,r){this.children=void 0,this.attributes=void 0,this.children=e||[],this.attributes=r||{}}toNode(){var e="http://www.w3.org/2000/svg",r=document.createElementNS(e,"svg");for(var n in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,n)&&r.setAttribute(n,this.attributes[n]);for(var i=0;i':''}},Jy=class{static{o(this,"LineNode")}constructor(e){this.attributes=void 0,this.attributes=e||{}}toNode(){var e="http://www.w3.org/2000/svg",r=document.createElementNS(e,"line");for(var n in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,n)&&r.setAttribute(n,this.attributes[n]);return r}toMarkup(){var e="","\\gt",!0);G(H,re,Ee,"\u2208","\\in",!0);G(H,re,Ee,"\uE020","\\@not");G(H,re,Ee,"\u2282","\\subset",!0);G(H,re,Ee,"\u2283","\\supset",!0);G(H,re,Ee,"\u2286","\\subseteq",!0);G(H,re,Ee,"\u2287","\\supseteq",!0);G(H,ke,Ee,"\u2288","\\nsubseteq",!0);G(H,ke,Ee,"\u2289","\\nsupseteq",!0);G(H,re,Ee,"\u22A8","\\models");G(H,re,Ee,"\u2190","\\leftarrow",!0);G(H,re,Ee,"\u2264","\\le");G(H,re,Ee,"\u2264","\\leq",!0);G(H,re,Ee,"<","\\lt",!0);G(H,re,Ee,"\u2192","\\rightarrow",!0);G(H,re,Ee,"\u2192","\\to");G(H,ke,Ee,"\u2271","\\ngeq",!0);G(H,ke,Ee,"\u2270","\\nleq",!0);G(H,re,pu,"\xA0","\\ ");G(H,re,pu,"\xA0","\\space");G(H,re,pu,"\xA0","\\nobreakspace");G(it,re,pu,"\xA0","\\ ");G(it,re,pu,"\xA0"," ");G(it,re,pu,"\xA0","\\space");G(it,re,pu,"\xA0","\\nobreakspace");G(H,re,pu,null,"\\nobreak");G(H,re,pu,null,"\\allowbreak");G(H,re,D3,",",",");G(H,re,D3,";",";");G(H,ke,It,"\u22BC","\\barwedge",!0);G(H,ke,It,"\u22BB","\\veebar",!0);G(H,re,It,"\u2299","\\odot",!0);G(H,re,It,"\u2295","\\oplus",!0);G(H,re,It,"\u2297","\\otimes",!0);G(H,re,Re,"\u2202","\\partial",!0);G(H,re,It,"\u2298","\\oslash",!0);G(H,ke,It,"\u229A","\\circledcirc",!0);G(H,ke,It,"\u22A1","\\boxdot",!0);G(H,re,It,"\u25B3","\\bigtriangleup");G(H,re,It,"\u25BD","\\bigtriangledown");G(H,re,It,"\u2020","\\dagger");G(H,re,It,"\u22C4","\\diamond");G(H,re,It,"\u22C6","\\star");G(H,re,It,"\u25C3","\\triangleleft");G(H,re,It,"\u25B9","\\triangleright");G(H,re,Zs,"{","\\{");G(it,re,Re,"{","\\{");G(it,re,Re,"{","\\textbraceleft");G(H,re,ns,"}","\\}");G(it,re,Re,"}","\\}");G(it,re,Re,"}","\\textbraceright");G(H,re,Zs,"{","\\lbrace");G(H,re,ns,"}","\\rbrace");G(H,re,Zs,"[","\\lbrack",!0);G(it,re,Re,"[","\\lbrack",!0);G(H,re,ns,"]","\\rbrack",!0);G(it,re,Re,"]","\\rbrack",!0);G(H,re,Zs,"(","\\lparen",!0);G(H,re,ns,")","\\rparen",!0);G(it,re,Re,"<","\\textless",!0);G(it,re,Re,">","\\textgreater",!0);G(H,re,Zs,"\u230A","\\lfloor",!0);G(H,re,ns,"\u230B","\\rfloor",!0);G(H,re,Zs,"\u2308","\\lceil",!0);G(H,re,ns,"\u2309","\\rceil",!0);G(H,re,Re,"\\","\\backslash");G(H,re,Re,"\u2223","|");G(H,re,Re,"\u2223","\\vert");G(it,re,Re,"|","\\textbar",!0);G(H,re,Re,"\u2225","\\|");G(H,re,Re,"\u2225","\\Vert");G(it,re,Re,"\u2225","\\textbardbl");G(it,re,Re,"~","\\textasciitilde");G(it,re,Re,"\\","\\textbackslash");G(it,re,Re,"^","\\textasciicircum");G(H,re,Ee,"\u2191","\\uparrow",!0);G(H,re,Ee,"\u21D1","\\Uparrow",!0);G(H,re,Ee,"\u2193","\\downarrow",!0);G(H,re,Ee,"\u21D3","\\Downarrow",!0);G(H,re,Ee,"\u2195","\\updownarrow",!0);G(H,re,Ee,"\u21D5","\\Updownarrow",!0);G(H,re,Ci,"\u2210","\\coprod");G(H,re,Ci,"\u22C1","\\bigvee");G(H,re,Ci,"\u22C0","\\bigwedge");G(H,re,Ci,"\u2A04","\\biguplus");G(H,re,Ci,"\u22C2","\\bigcap");G(H,re,Ci,"\u22C3","\\bigcup");G(H,re,Ci,"\u222B","\\int");G(H,re,Ci,"\u222B","\\intop");G(H,re,Ci,"\u222C","\\iint");G(H,re,Ci,"\u222D","\\iiint");G(H,re,Ci,"\u220F","\\prod");G(H,re,Ci,"\u2211","\\sum");G(H,re,Ci,"\u2A02","\\bigotimes");G(H,re,Ci,"\u2A01","\\bigoplus");G(H,re,Ci,"\u2A00","\\bigodot");G(H,re,Ci,"\u222E","\\oint");G(H,re,Ci,"\u222F","\\oiint");G(H,re,Ci,"\u2230","\\oiiint");G(H,re,Ci,"\u2A06","\\bigsqcup");G(H,re,Ci,"\u222B","\\smallint");G(it,re,E0,"\u2026","\\textellipsis");G(H,re,E0,"\u2026","\\mathellipsis");G(it,re,E0,"\u2026","\\ldots",!0);G(H,re,E0,"\u2026","\\ldots",!0);G(H,re,E0,"\u22EF","\\@cdots",!0);G(H,re,E0,"\u22F1","\\ddots",!0);G(H,re,Re,"\u22EE","\\varvdots");G(it,re,Re,"\u22EE","\\varvdots");G(H,re,Hn,"\u02CA","\\acute");G(H,re,Hn,"\u02CB","\\grave");G(H,re,Hn,"\xA8","\\ddot");G(H,re,Hn,"~","\\tilde");G(H,re,Hn,"\u02C9","\\bar");G(H,re,Hn,"\u02D8","\\breve");G(H,re,Hn,"\u02C7","\\check");G(H,re,Hn,"^","\\hat");G(H,re,Hn,"\u20D7","\\vec");G(H,re,Hn,"\u02D9","\\dot");G(H,re,Hn,"\u02DA","\\mathring");G(H,re,rr,"\uE131","\\@imath");G(H,re,rr,"\uE237","\\@jmath");G(H,re,Re,"\u0131","\u0131");G(H,re,Re,"\u0237","\u0237");G(it,re,Re,"\u0131","\\i",!0);G(it,re,Re,"\u0237","\\j",!0);G(it,re,Re,"\xDF","\\ss",!0);G(it,re,Re,"\xE6","\\ae",!0);G(it,re,Re,"\u0153","\\oe",!0);G(it,re,Re,"\xF8","\\o",!0);G(it,re,Re,"\xC6","\\AE",!0);G(it,re,Re,"\u0152","\\OE",!0);G(it,re,Re,"\xD8","\\O",!0);G(it,re,Hn,"\u02CA","\\'");G(it,re,Hn,"\u02CB","\\`");G(it,re,Hn,"\u02C6","\\^");G(it,re,Hn,"\u02DC","\\~");G(it,re,Hn,"\u02C9","\\=");G(it,re,Hn,"\u02D8","\\u");G(it,re,Hn,"\u02D9","\\.");G(it,re,Hn,"\xB8","\\c");G(it,re,Hn,"\u02DA","\\r");G(it,re,Hn,"\u02C7","\\v");G(it,re,Hn,"\xA8",'\\"');G(it,re,Hn,"\u02DD","\\H");G(it,re,Hn,"\u25EF","\\textcircled");MG={"--":!0,"---":!0,"``":!0,"''":!0};G(it,re,Re,"\u2013","--",!0);G(it,re,Re,"\u2013","\\textendash");G(it,re,Re,"\u2014","---",!0);G(it,re,Re,"\u2014","\\textemdash");G(it,re,Re,"\u2018","`",!0);G(it,re,Re,"\u2018","\\textquoteleft");G(it,re,Re,"\u2019","'",!0);G(it,re,Re,"\u2019","\\textquoteright");G(it,re,Re,"\u201C","``",!0);G(it,re,Re,"\u201C","\\textquotedblleft");G(it,re,Re,"\u201D","''",!0);G(it,re,Re,"\u201D","\\textquotedblright");G(H,re,Re,"\xB0","\\degree",!0);G(it,re,Re,"\xB0","\\degree");G(it,re,Re,"\xB0","\\textdegree",!0);G(H,re,Re,"\xA3","\\pounds");G(H,re,Re,"\xA3","\\mathsterling",!0);G(it,re,Re,"\xA3","\\pounds");G(it,re,Re,"\xA3","\\textsterling",!0);G(H,ke,Re,"\u2720","\\maltese");G(it,ke,Re,"\u2720","\\maltese");eG='0123456789/@."';for(u3=0;u30)return fl(a,h,i,r,s.concat(f));if(u){var d,p;if(u==="boldsymbol"){var m=i3e(a,i,r,s,n);d=m.fontName,p=[m.fontClass]}else l?(d=PG[u].fontName,p=[u]):(d=m3(u,r.fontWeight,r.fontShape),p=[u,r.fontWeight,r.fontShape]);if(L3(a,d,i).metrics)return fl(a,d,i,r,s.concat(p));if(MG.hasOwnProperty(a)&&d.slice(0,10)==="Typewriter"){for(var g=[],y=0;y{if(vh(t.classes)!==vh(e.classes)||t.skew!==e.skew||t.maxFontSize!==e.maxFontSize)return!1;if(t.classes.length===1){var r=t.classes[0];if(r==="mbin"||r==="mord")return!1}for(var n in t.style)if(t.style.hasOwnProperty(n)&&t.style[n]!==e.style[n])return!1;for(var i in e.style)if(e.style.hasOwnProperty(i)&&t.style[i]!==e.style[i])return!1;return!0},"canCombine"),o3e=o(t=>{for(var e=0;er&&(r=s.height),s.depth>n&&(n=s.depth),s.maxFontSize>i&&(i=s.maxFontSize)}e.height=r,e.depth=n,e.maxFontSize=i},"sizeElementFromChildren"),Cs=o(function(e,r,n,i){var a=new ld(e,r,n,i);return iA(a),a},"makeSpan"),IG=o((t,e,r,n)=>new ld(t,e,r,n),"makeSvgSpan"),l3e=o(function(e,r,n){var i=Cs([e],[],r);return i.height=Math.max(n||r.fontMetrics().defaultRuleThickness,r.minRuleThickness),i.style.borderBottomWidth=Et(i.height),i.maxFontSize=1,i},"makeLineSpan"),c3e=o(function(e,r,n,i){var a=new Zy(e,r,n,i);return iA(a),a},"makeAnchor"),OG=o(function(e){var r=new od(e);return iA(r),r},"makeFragment"),u3e=o(function(e,r){return e instanceof od?Cs([],[e],r):e},"wrapFragment"),h3e=o(function(e){if(e.positionType==="individualShift"){for(var r=e.children,n=[r[0]],i=-r[0].shift-r[0].elem.depth,a=i,s=1;s{var r=Cs(["mspace"],[],e),n=ni(t,e);return r.style.marginRight=Et(n),r},"makeGlue"),m3=o(function(e,r,n){var i="";switch(e){case"amsrm":i="AMS";break;case"textrm":i="Main";break;case"textsf":i="SansSerif";break;case"texttt":i="Typewriter";break;default:i=e}var a;return r==="textbf"&&n==="textit"?a="BoldItalic":r==="textbf"?a="Bold":r==="textit"?a="Italic":a="Regular",i+"-"+a},"retrieveTextFontName"),PG={mathbf:{variant:"bold",fontName:"Main-Bold"},mathrm:{variant:"normal",fontName:"Main-Regular"},textit:{variant:"italic",fontName:"Main-Italic"},mathit:{variant:"italic",fontName:"Main-Italic"},mathnormal:{variant:"italic",fontName:"Math-Italic"},mathsfit:{variant:"sans-serif-italic",fontName:"SansSerif-Italic"},mathbb:{variant:"double-struck",fontName:"AMS-Regular"},mathcal:{variant:"script",fontName:"Caligraphic-Regular"},mathfrak:{variant:"fraktur",fontName:"Fraktur-Regular"},mathscr:{variant:"script",fontName:"Script-Regular"},mathsf:{variant:"sans-serif",fontName:"SansSerif-Regular"},mathtt:{variant:"monospace",fontName:"Typewriter-Regular"}},BG={vec:["vec",.471,.714],oiintSize1:["oiintSize1",.957,.499],oiintSize2:["oiintSize2",1.472,.659],oiiintSize1:["oiiintSize1",1.304,.499],oiiintSize2:["oiiintSize2",1.98,.659]},p3e=o(function(e,r){var[n,i,a]=BG[e],s=new ec(n),l=new dl([s],{width:Et(i),height:Et(a),style:"width:"+Et(i),viewBox:"0 0 "+1e3*i+" "+1e3*a,preserveAspectRatio:"xMinYMin"}),u=IG(["overlay"],[l],r);return u.height=a,u.style.height=Et(a),u.style.width=Et(i),u},"staticSvg"),Fe={fontMap:PG,makeSymbol:fl,mathsym:n3e,makeSpan:Cs,makeSvgSpan:IG,makeLineSpan:l3e,makeAnchor:c3e,makeFragment:OG,wrapFragment:u3e,makeVList:f3e,makeOrd:a3e,makeGlue:d3e,staticSvg:p3e,svgData:BG,tryCombineChars:o3e},ri={number:3,unit:"mu"},sd={number:4,unit:"mu"},cu={number:5,unit:"mu"},m3e={mord:{mop:ri,mbin:sd,mrel:cu,minner:ri},mop:{mord:ri,mop:ri,mrel:cu,minner:ri},mbin:{mord:sd,mop:sd,mopen:sd,minner:sd},mrel:{mord:cu,mop:cu,mopen:cu,minner:cu},mopen:{},mclose:{mop:ri,mbin:sd,mrel:cu,minner:ri},mpunct:{mord:ri,mop:ri,mrel:cu,mopen:ri,mclose:ri,mpunct:ri,minner:ri},minner:{mord:ri,mop:ri,mbin:sd,mrel:cu,mopen:ri,mpunct:ri,minner:ri}},g3e={mord:{mop:ri},mop:{mord:ri,mop:ri},mbin:{},mrel:{},mopen:{},mclose:{mop:ri},mpunct:{},minner:{mop:ri}},FG={},E3={},S3={};o(Nt,"defineFunction");o(cd,"defineFunctionBuilders");C3=o(function(e){return e.type==="ordgroup"&&e.body.length===1?e.body[0]:e},"normalizeArgument"),gi=o(function(e){return e.type==="ordgroup"?e.body:[e]},"ordargument"),fu=Fe.makeSpan,y3e=["leftmost","mbin","mopen","mrel","mop","mpunct"],v3e=["rightmost","mrel","mclose","mpunct"],x3e={display:nr.DISPLAY,text:nr.TEXT,script:nr.SCRIPT,scriptscript:nr.SCRIPTSCRIPT},b3e={mord:"mord",mop:"mop",mbin:"mbin",mrel:"mrel",mopen:"mopen",mclose:"mclose",mpunct:"mpunct",minner:"minner"},$i=o(function(e,r,n,i){i===void 0&&(i=[null,null]);for(var a=[],s=0;s{var v=y.classes[0],x=g.classes[0];v==="mbin"&&Jt.contains(v3e,x)?y.classes[0]="mord":x==="mbin"&&Jt.contains(y3e,v)&&(g.classes[0]="mord")},{node:d},p,m),nG(a,(g,y)=>{var v=X7(y),x=X7(g),b=v&&x?g.hasClass("mtight")?g3e[v][x]:m3e[v][x]:null;if(b)return Fe.makeGlue(b,h)},{node:d},p,m),a},"buildExpression"),nG=o(function t(e,r,n,i,a){i&&e.push(i);for(var s=0;sp=>{e.splice(d+1,0,p),s++})(s)}i&&e.pop()},"traverseNonSpaceNodes"),$G=o(function(e){return e instanceof od||e instanceof Zy||e instanceof ld&&e.hasClass("enclosing")?e:null},"checkPartialGroup"),T3e=o(function t(e,r){var n=$G(e);if(n){var i=n.children;if(i.length){if(r==="right")return t(i[i.length-1],"right");if(r==="left")return t(i[0],"left")}}return e},"getOutermostNode"),X7=o(function(e,r){return e?(r&&(e=T3e(e,r)),b3e[e.classes[0]]||null):null},"getTypeOfDomTree"),ev=o(function(e,r){var n=["nulldelimiter"].concat(e.baseSizingClasses());return fu(r.concat(n))},"makeNullDelimiter"),$r=o(function(e,r,n){if(!e)return fu();if(E3[e.type]){var i=E3[e.type](e,r);if(n&&r.size!==n.size){i=fu(r.sizingClasses(n),[i],r);var a=r.sizeMultiplier/n.sizeMultiplier;i.height*=a,i.depth*=a}return i}else throw new pt("Got group of unknown type: '"+e.type+"'")},"buildGroup");o(g3,"buildHTMLUnbreakable");o(j7,"buildHTML");o(zG,"newDocumentFragment");ts=class{static{o(this,"MathNode")}constructor(e,r,n){this.type=void 0,this.attributes=void 0,this.children=void 0,this.classes=void 0,this.type=e,this.attributes={},this.children=r||[],this.classes=n||[]}setAttribute(e,r){this.attributes[e]=r}getAttribute(e){return this.attributes[e]}toNode(){var e=document.createElementNS("http://www.w3.org/1998/Math/MathML",this.type);for(var r in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,r)&&e.setAttribute(r,this.attributes[r]);this.classes.length>0&&(e.className=vh(this.classes));for(var n=0;n0&&(e+=' class ="'+Jt.escape(vh(this.classes))+'"'),e+=">";for(var n=0;n",e}toText(){return this.children.map(e=>e.toText()).join("")}},Ao=class{static{o(this,"TextNode")}constructor(e){this.text=void 0,this.text=e}toNode(){return document.createTextNode(this.text)}toMarkup(){return Jt.escape(this.toText())}toText(){return this.text}},K7=class{static{o(this,"SpaceNode")}constructor(e){this.width=void 0,this.character=void 0,this.width=e,e>=.05555&&e<=.05556?this.character="\u200A":e>=.1666&&e<=.1667?this.character="\u2009":e>=.2222&&e<=.2223?this.character="\u2005":e>=.2777&&e<=.2778?this.character="\u2005\u200A":e>=-.05556&&e<=-.05555?this.character="\u200A\u2063":e>=-.1667&&e<=-.1666?this.character="\u2009\u2063":e>=-.2223&&e<=-.2222?this.character="\u205F\u2063":e>=-.2778&&e<=-.2777?this.character="\u2005\u2063":this.character=null}toNode(){if(this.character)return document.createTextNode(this.character);var e=document.createElementNS("http://www.w3.org/1998/Math/MathML","mspace");return e.setAttribute("width",Et(this.width)),e}toMarkup(){return this.character?""+this.character+"":''}toText(){return this.character?this.character:" "}},dt={MathNode:ts,TextNode:Ao,SpaceNode:K7,newDocumentFragment:zG},Do=o(function(e,r,n){return An[r][e]&&An[r][e].replace&&e.charCodeAt(0)!==55349&&!(MG.hasOwnProperty(e)&&n&&(n.fontFamily&&n.fontFamily.slice(4,6)==="tt"||n.font&&n.font.slice(4,6)==="tt"))&&(e=An[r][e].replace),new dt.TextNode(e)},"makeText"),aA=o(function(e){return e.length===1?e[0]:new dt.MathNode("mrow",e)},"makeRow"),sA=o(function(e,r){if(r.fontFamily==="texttt")return"monospace";if(r.fontFamily==="textsf")return r.fontShape==="textit"&&r.fontWeight==="textbf"?"sans-serif-bold-italic":r.fontShape==="textit"?"sans-serif-italic":r.fontWeight==="textbf"?"bold-sans-serif":"sans-serif";if(r.fontShape==="textit"&&r.fontWeight==="textbf")return"bold-italic";if(r.fontShape==="textit")return"italic";if(r.fontWeight==="textbf")return"bold";var n=r.font;if(!n||n==="mathnormal")return null;var i=e.mode;if(n==="mathit")return"italic";if(n==="boldsymbol")return e.type==="textord"?"bold":"bold-italic";if(n==="mathbf")return"bold";if(n==="mathbb")return"double-struck";if(n==="mathsfit")return"sans-serif-italic";if(n==="mathfrak")return"fraktur";if(n==="mathscr"||n==="mathcal")return"script";if(n==="mathsf")return"sans-serif";if(n==="mathtt")return"monospace";var a=e.text;if(Jt.contains(["\\imath","\\jmath"],a))return null;An[i][a]&&An[i][a].replace&&(a=An[i][a].replace);var s=Fe.fontMap[n].fontName;return nA(a,s,i)?Fe.fontMap[n].variant:null},"getVariant");o(I7,"isNumberPunctuation");_s=o(function(e,r,n){if(e.length===1){var i=vn(e[0],r);return n&&i instanceof ts&&i.type==="mo"&&(i.setAttribute("lspace","0em"),i.setAttribute("rspace","0em")),[i]}for(var a=[],s,l=0;l=1&&(s.type==="mn"||I7(s))){var h=u.children[0];h instanceof ts&&h.type==="mn"&&(h.children=[...s.children,...h.children],a.pop())}else if(s.type==="mi"&&s.children.length===1){var f=s.children[0];if(f instanceof Ao&&f.text==="\u0338"&&(u.type==="mo"||u.type==="mi"||u.type==="mn")){var d=u.children[0];d instanceof Ao&&d.text.length>0&&(d.text=d.text.slice(0,1)+"\u0338"+d.text.slice(1),a.pop())}}}a.push(u),s=u}return a},"buildExpression"),xh=o(function(e,r,n){return aA(_s(e,r,n))},"buildExpressionRow"),vn=o(function(e,r){if(!e)return new dt.MathNode("mrow");if(S3[e.type]){var n=S3[e.type](e,r);return n}else throw new pt("Got group of unknown type: '"+e.type+"'")},"buildGroup");o(iG,"buildMathML");GG=o(function(e){return new w3({style:e.displayMode?nr.DISPLAY:nr.TEXT,maxSize:e.maxSize,minRuleThickness:e.minRuleThickness})},"optionsFromSettings"),VG=o(function(e,r){if(r.displayMode){var n=["katex-display"];r.leqno&&n.push("leqno"),r.fleqn&&n.push("fleqn"),e=Fe.makeSpan(n,[e])}return e},"displayWrap"),w3e=o(function(e,r,n){var i=GG(n),a;if(n.output==="mathml")return iG(e,r,i,n.displayMode,!0);if(n.output==="html"){var s=j7(e,i);a=Fe.makeSpan(["katex"],[s])}else{var l=iG(e,r,i,n.displayMode,!1),u=j7(e,i);a=Fe.makeSpan(["katex"],[l,u])}return VG(a,n)},"buildTree"),k3e=o(function(e,r,n){var i=GG(n),a=j7(e,i),s=Fe.makeSpan(["katex"],[a]);return VG(s,n)},"buildHTMLTree"),E3e={widehat:"^",widecheck:"\u02C7",widetilde:"~",utilde:"~",overleftarrow:"\u2190",underleftarrow:"\u2190",xleftarrow:"\u2190",overrightarrow:"\u2192",underrightarrow:"\u2192",xrightarrow:"\u2192",underbrace:"\u23DF",overbrace:"\u23DE",overgroup:"\u23E0",undergroup:"\u23E1",overleftrightarrow:"\u2194",underleftrightarrow:"\u2194",xleftrightarrow:"\u2194",Overrightarrow:"\u21D2",xRightarrow:"\u21D2",overleftharpoon:"\u21BC",xleftharpoonup:"\u21BC",overrightharpoon:"\u21C0",xrightharpoonup:"\u21C0",xLeftarrow:"\u21D0",xLeftrightarrow:"\u21D4",xhookleftarrow:"\u21A9",xhookrightarrow:"\u21AA",xmapsto:"\u21A6",xrightharpoondown:"\u21C1",xleftharpoondown:"\u21BD",xrightleftharpoons:"\u21CC",xleftrightharpoons:"\u21CB",xtwoheadleftarrow:"\u219E",xtwoheadrightarrow:"\u21A0",xlongequal:"=",xtofrom:"\u21C4",xrightleftarrows:"\u21C4",xrightequilibrium:"\u21CC",xleftequilibrium:"\u21CB","\\cdrightarrow":"\u2192","\\cdleftarrow":"\u2190","\\cdlongequal":"="},S3e=o(function(e){var r=new dt.MathNode("mo",[new dt.TextNode(E3e[e.replace(/^\\/,"")])]);return r.setAttribute("stretchy","true"),r},"mathMLnode"),C3e={overrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],overleftarrow:[["leftarrow"],.888,522,"xMinYMin"],underrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],underleftarrow:[["leftarrow"],.888,522,"xMinYMin"],xrightarrow:[["rightarrow"],1.469,522,"xMaxYMin"],"\\cdrightarrow":[["rightarrow"],3,522,"xMaxYMin"],xleftarrow:[["leftarrow"],1.469,522,"xMinYMin"],"\\cdleftarrow":[["leftarrow"],3,522,"xMinYMin"],Overrightarrow:[["doublerightarrow"],.888,560,"xMaxYMin"],xRightarrow:[["doublerightarrow"],1.526,560,"xMaxYMin"],xLeftarrow:[["doubleleftarrow"],1.526,560,"xMinYMin"],overleftharpoon:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoonup:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoondown:[["leftharpoondown"],.888,522,"xMinYMin"],overrightharpoon:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoonup:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoondown:[["rightharpoondown"],.888,522,"xMaxYMin"],xlongequal:[["longequal"],.888,334,"xMinYMin"],"\\cdlongequal":[["longequal"],3,334,"xMinYMin"],xtwoheadleftarrow:[["twoheadleftarrow"],.888,334,"xMinYMin"],xtwoheadrightarrow:[["twoheadrightarrow"],.888,334,"xMaxYMin"],overleftrightarrow:[["leftarrow","rightarrow"],.888,522],overbrace:[["leftbrace","midbrace","rightbrace"],1.6,548],underbrace:[["leftbraceunder","midbraceunder","rightbraceunder"],1.6,548],underleftrightarrow:[["leftarrow","rightarrow"],.888,522],xleftrightarrow:[["leftarrow","rightarrow"],1.75,522],xLeftrightarrow:[["doubleleftarrow","doublerightarrow"],1.75,560],xrightleftharpoons:[["leftharpoondownplus","rightharpoonplus"],1.75,716],xleftrightharpoons:[["leftharpoonplus","rightharpoondownplus"],1.75,716],xhookleftarrow:[["leftarrow","righthook"],1.08,522],xhookrightarrow:[["lefthook","rightarrow"],1.08,522],overlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],underlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],overgroup:[["leftgroup","rightgroup"],.888,342],undergroup:[["leftgroupunder","rightgroupunder"],.888,342],xmapsto:[["leftmapsto","rightarrow"],1.5,522],xtofrom:[["leftToFrom","rightToFrom"],1.75,528],xrightleftarrows:[["baraboveleftarrow","rightarrowabovebar"],1.75,901],xrightequilibrium:[["baraboveshortleftharpoon","rightharpoonaboveshortbar"],1.75,716],xleftequilibrium:[["shortbaraboveleftharpoon","shortrightharpoonabovebar"],1.75,716]},A3e=o(function(e){return e.type==="ordgroup"?e.body.length:1},"groupLength"),_3e=o(function(e,r){function n(){var l=4e5,u=e.label.slice(1);if(Jt.contains(["widehat","widecheck","widetilde","utilde"],u)){var h=e,f=A3e(h.base),d,p,m;if(f>5)u==="widehat"||u==="widecheck"?(d=420,l=2364,m=.42,p=u+"4"):(d=312,l=2340,m=.34,p="tilde4");else{var g=[1,1,2,2,3,3][f];u==="widehat"||u==="widecheck"?(l=[0,1062,2364,2364,2364][g],d=[0,239,300,360,420][g],m=[0,.24,.3,.3,.36,.42][g],p=u+g):(l=[0,600,1033,2339,2340][g],d=[0,260,286,306,312][g],m=[0,.26,.286,.3,.306,.34][g],p="tilde"+g)}var y=new ec(p),v=new dl([y],{width:"100%",height:Et(m),viewBox:"0 0 "+l+" "+d,preserveAspectRatio:"none"});return{span:Fe.makeSvgSpan([],[v],r),minWidth:0,height:m}}else{var x=[],b=C3e[u],[T,S,w]=b,E=w/1e3,_=T.length,C,D;if(_===1){var O=b[3];C=["hide-tail"],D=[O]}else if(_===2)C=["halfarrow-left","halfarrow-right"],D=["xMinYMin","xMaxYMin"];else if(_===3)C=["brace-left","brace-center","brace-right"],D=["xMinYMin","xMidYMin","xMaxYMin"];else throw new Error(`Correct katexImagesData or update code here to support + `+_+" children.");for(var R=0;R<_;R++){var k=new ec(T[R]),L=new dl([k],{width:"400em",height:Et(E),viewBox:"0 0 "+l+" "+w,preserveAspectRatio:D[R]+" slice"}),A=Fe.makeSvgSpan([C[R]],[L],r);if(_===1)return{span:A,minWidth:S,height:E};A.style.height=Et(E),x.push(A)}return{span:Fe.makeSpan(["stretchy"],x,r),minWidth:S,height:E}}}o(n,"buildSvgSpan_");var{span:i,minWidth:a,height:s}=n();return i.height=s,i.style.height=Et(s),a>0&&(i.style.minWidth=Et(a)),i},"svgSpan"),D3e=o(function(e,r,n,i,a){var s,l=e.height+e.depth+n+i;if(/fbox|color|angl/.test(r)){if(s=Fe.makeSpan(["stretchy",r],[],a),r==="fbox"){var u=a.color&&a.getColor();u&&(s.style.borderColor=u)}}else{var h=[];/^[bx]cancel$/.test(r)&&h.push(new Jy({x1:"0",y1:"0",x2:"100%",y2:"100%","stroke-width":"0.046em"})),/^x?cancel$/.test(r)&&h.push(new Jy({x1:"0",y1:"100%",x2:"100%",y2:"0","stroke-width":"0.046em"}));var f=new dl(h,{width:"100%",height:Et(l)});s=Fe.makeSvgSpan([],[f],a)}return s.height=l,s.style.height=Et(l),s},"encloseSpan"),du={encloseSpan:D3e,mathMLnode:S3e,svgSpan:_3e};o(xr,"assertNodeType");o(oA,"assertSymbolNodeType");o(R3,"checkSymbolNodeType");lA=o((t,e)=>{var r,n,i;t&&t.type==="supsub"?(n=xr(t.base,"accent"),r=n.base,t.base=r,i=J4e($r(t,e)),t.base=n):(n=xr(t,"accent"),r=n.base);var a=$r(r,e.havingCrampedStyle()),s=n.isShifty&&Jt.isCharacterBox(r),l=0;if(s){var u=Jt.getBaseElem(r),h=$r(u,e.havingCrampedStyle());l=Jz(h).skew}var f=n.label==="\\c",d=f?a.height+a.depth:Math.min(a.height,e.fontMetrics().xHeight),p;if(n.isStretchy)p=du.svgSpan(n,e),p=Fe.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:a},{type:"elem",elem:p,wrapperClasses:["svg-align"],wrapperStyle:l>0?{width:"calc(100% - "+Et(2*l)+")",marginLeft:Et(2*l)}:void 0}]},e);else{var m,g;n.label==="\\vec"?(m=Fe.staticSvg("vec",e),g=Fe.svgData.vec[1]):(m=Fe.makeOrd({mode:n.mode,text:n.label},e,"textord"),m=Jz(m),m.italic=0,g=m.width,f&&(d+=m.depth)),p=Fe.makeSpan(["accent-body"],[m]);var y=n.label==="\\textcircled";y&&(p.classes.push("accent-full"),d=a.height);var v=l;y||(v-=g/2),p.style.left=Et(v),n.label==="\\textcircled"&&(p.style.top=".2em"),p=Fe.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:a},{type:"kern",size:-d},{type:"elem",elem:p}]},e)}var x=Fe.makeSpan(["mord","accent"],[p],e);return i?(i.children[0]=x,i.height=Math.max(x.height,i.height),i.classes[0]="mord",i):x},"htmlBuilder$a"),UG=o((t,e)=>{var r=t.isStretchy?du.mathMLnode(t.label):new dt.MathNode("mo",[Do(t.label,t.mode)]),n=new dt.MathNode("mover",[vn(t.base,e),r]);return n.setAttribute("accent","true"),n},"mathmlBuilder$9"),L3e=new RegExp(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring"].map(t=>"\\"+t).join("|"));Nt({type:"accent",names:["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring","\\widecheck","\\widehat","\\widetilde","\\overrightarrow","\\overleftarrow","\\Overrightarrow","\\overleftrightarrow","\\overgroup","\\overlinesegment","\\overleftharpoon","\\overrightharpoon"],props:{numArgs:1},handler:o((t,e)=>{var r=C3(e[0]),n=!L3e.test(t.funcName),i=!n||t.funcName==="\\widehat"||t.funcName==="\\widetilde"||t.funcName==="\\widecheck";return{type:"accent",mode:t.parser.mode,label:t.funcName,isStretchy:n,isShifty:i,base:r}},"handler"),htmlBuilder:lA,mathmlBuilder:UG});Nt({type:"accent",names:["\\'","\\`","\\^","\\~","\\=","\\u","\\.",'\\"',"\\c","\\r","\\H","\\v","\\textcircled"],props:{numArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["primitive"]},handler:o((t,e)=>{var r=e[0],n=t.parser.mode;return n==="math"&&(t.parser.settings.reportNonstrict("mathVsTextAccents","LaTeX's accent "+t.funcName+" works only in text mode"),n="text"),{type:"accent",mode:n,label:t.funcName,isStretchy:!1,isShifty:!0,base:r}},"handler"),htmlBuilder:lA,mathmlBuilder:UG});Nt({type:"accentUnder",names:["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underlinesegment","\\utilde"],props:{numArgs:1},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0];return{type:"accentUnder",mode:r.mode,label:n,base:i}},"handler"),htmlBuilder:o((t,e)=>{var r=$r(t.base,e),n=du.svgSpan(t,e),i=t.label==="\\utilde"?.12:0,a=Fe.makeVList({positionType:"top",positionData:r.height,children:[{type:"elem",elem:n,wrapperClasses:["svg-align"]},{type:"kern",size:i},{type:"elem",elem:r}]},e);return Fe.makeSpan(["mord","accentunder"],[a],e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=du.mathMLnode(t.label),n=new dt.MathNode("munder",[vn(t.base,e),r]);return n.setAttribute("accentunder","true"),n},"mathmlBuilder")});y3=o(t=>{var e=new dt.MathNode("mpadded",t?[t]:[]);return e.setAttribute("width","+0.6em"),e.setAttribute("lspace","0.3em"),e},"paddedNode");Nt({type:"xArrow",names:["\\xleftarrow","\\xrightarrow","\\xLeftarrow","\\xRightarrow","\\xleftrightarrow","\\xLeftrightarrow","\\xhookleftarrow","\\xhookrightarrow","\\xmapsto","\\xrightharpoondown","\\xrightharpoonup","\\xleftharpoondown","\\xleftharpoonup","\\xrightleftharpoons","\\xleftrightharpoons","\\xlongequal","\\xtwoheadrightarrow","\\xtwoheadleftarrow","\\xtofrom","\\xrightleftarrows","\\xrightequilibrium","\\xleftequilibrium","\\\\cdrightarrow","\\\\cdleftarrow","\\\\cdlongequal"],props:{numArgs:1,numOptionalArgs:1},handler(t,e,r){var{parser:n,funcName:i}=t;return{type:"xArrow",mode:n.mode,label:i,body:e[0],below:r[0]}},htmlBuilder(t,e){var r=e.style,n=e.havingStyle(r.sup()),i=Fe.wrapFragment($r(t.body,n,e),e),a=t.label.slice(0,2)==="\\x"?"x":"cd";i.classes.push(a+"-arrow-pad");var s;t.below&&(n=e.havingStyle(r.sub()),s=Fe.wrapFragment($r(t.below,n,e),e),s.classes.push(a+"-arrow-pad"));var l=du.svgSpan(t,e),u=-e.fontMetrics().axisHeight+.5*l.height,h=-e.fontMetrics().axisHeight-.5*l.height-.111;(i.depth>.25||t.label==="\\xleftequilibrium")&&(h-=i.depth);var f;if(s){var d=-e.fontMetrics().axisHeight+s.height+.5*l.height+.111;f=Fe.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:h},{type:"elem",elem:l,shift:u},{type:"elem",elem:s,shift:d}]},e)}else f=Fe.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:h},{type:"elem",elem:l,shift:u}]},e);return f.children[0].children[0].children[1].classes.push("svg-align"),Fe.makeSpan(["mrel","x-arrow"],[f],e)},mathmlBuilder(t,e){var r=du.mathMLnode(t.label);r.setAttribute("minsize",t.label.charAt(0)==="x"?"1.75em":"3.0em");var n;if(t.body){var i=y3(vn(t.body,e));if(t.below){var a=y3(vn(t.below,e));n=new dt.MathNode("munderover",[r,a,i])}else n=new dt.MathNode("mover",[r,i])}else if(t.below){var s=y3(vn(t.below,e));n=new dt.MathNode("munder",[r,s])}else n=y3(),n=new dt.MathNode("mover",[r,n]);return n}});R3e=Fe.makeSpan;o(HG,"htmlBuilder$9");o(WG,"mathmlBuilder$8");Nt({type:"mclass",names:["\\mathord","\\mathbin","\\mathrel","\\mathopen","\\mathclose","\\mathpunct","\\mathinner"],props:{numArgs:1,primitive:!0},handler(t,e){var{parser:r,funcName:n}=t,i=e[0];return{type:"mclass",mode:r.mode,mclass:"m"+n.slice(5),body:gi(i),isCharacterBox:Jt.isCharacterBox(i)}},htmlBuilder:HG,mathmlBuilder:WG});N3=o(t=>{var e=t.type==="ordgroup"&&t.body.length?t.body[0]:t;return e.type==="atom"&&(e.family==="bin"||e.family==="rel")?"m"+e.family:"mord"},"binrelClass");Nt({type:"mclass",names:["\\@binrel"],props:{numArgs:2},handler(t,e){var{parser:r}=t;return{type:"mclass",mode:r.mode,mclass:N3(e[0]),body:gi(e[1]),isCharacterBox:Jt.isCharacterBox(e[1])}}});Nt({type:"mclass",names:["\\stackrel","\\overset","\\underset"],props:{numArgs:2},handler(t,e){var{parser:r,funcName:n}=t,i=e[1],a=e[0],s;n!=="\\stackrel"?s=N3(i):s="mrel";var l={type:"op",mode:i.mode,limits:!0,alwaysHandleSupSub:!0,parentIsSupSub:!1,symbol:!1,suppressBaseShift:n!=="\\stackrel",body:gi(i)},u={type:"supsub",mode:a.mode,base:l,sup:n==="\\underset"?null:a,sub:n==="\\underset"?a:null};return{type:"mclass",mode:r.mode,mclass:s,body:[u],isCharacterBox:Jt.isCharacterBox(u)}},htmlBuilder:HG,mathmlBuilder:WG});Nt({type:"pmb",names:["\\pmb"],props:{numArgs:1,allowedInText:!0},handler(t,e){var{parser:r}=t;return{type:"pmb",mode:r.mode,mclass:N3(e[0]),body:gi(e[0])}},htmlBuilder(t,e){var r=$i(t.body,e,!0),n=Fe.makeSpan([t.mclass],r,e);return n.style.textShadow="0.02em 0.01em 0.04px",n},mathmlBuilder(t,e){var r=_s(t.body,e),n=new dt.MathNode("mstyle",r);return n.setAttribute("style","text-shadow: 0.02em 0.01em 0.04px"),n}});N3e={">":"\\\\cdrightarrow","<":"\\\\cdleftarrow","=":"\\\\cdlongequal",A:"\\uparrow",V:"\\downarrow","|":"\\Vert",".":"no arrow"},aG=o(()=>({type:"styling",body:[],mode:"math",style:"display"}),"newCell"),sG=o(t=>t.type==="textord"&&t.text==="@","isStartOfArrow"),M3e=o((t,e)=>(t.type==="mathord"||t.type==="atom")&&t.text===e,"isLabelEnd");o(I3e,"cdArrow");o(O3e,"parseCD");Nt({type:"cdlabel",names:["\\\\cdleft","\\\\cdright"],props:{numArgs:1},handler(t,e){var{parser:r,funcName:n}=t;return{type:"cdlabel",mode:r.mode,side:n.slice(4),label:e[0]}},htmlBuilder(t,e){var r=e.havingStyle(e.style.sup()),n=Fe.wrapFragment($r(t.label,r,e),e);return n.classes.push("cd-label-"+t.side),n.style.bottom=Et(.8-n.depth),n.height=0,n.depth=0,n},mathmlBuilder(t,e){var r=new dt.MathNode("mrow",[vn(t.label,e)]);return r=new dt.MathNode("mpadded",[r]),r.setAttribute("width","0"),t.side==="left"&&r.setAttribute("lspace","-1width"),r.setAttribute("voffset","0.7em"),r=new dt.MathNode("mstyle",[r]),r.setAttribute("displaystyle","false"),r.setAttribute("scriptlevel","1"),r}});Nt({type:"cdlabelparent",names:["\\\\cdparent"],props:{numArgs:1},handler(t,e){var{parser:r}=t;return{type:"cdlabelparent",mode:r.mode,fragment:e[0]}},htmlBuilder(t,e){var r=Fe.wrapFragment($r(t.fragment,e),e);return r.classes.push("cd-vert-arrow"),r},mathmlBuilder(t,e){return new dt.MathNode("mrow",[vn(t.fragment,e)])}});Nt({type:"textord",names:["\\@char"],props:{numArgs:1,allowedInText:!0},handler(t,e){for(var{parser:r}=t,n=xr(e[0],"ordgroup"),i=n.body,a="",s=0;s=1114111)throw new pt("\\@char with invalid code point "+a);return u<=65535?h=String.fromCharCode(u):(u-=65536,h=String.fromCharCode((u>>10)+55296,(u&1023)+56320)),{type:"textord",mode:r.mode,text:h}}});qG=o((t,e)=>{var r=$i(t.body,e.withColor(t.color),!1);return Fe.makeFragment(r)},"htmlBuilder$8"),YG=o((t,e)=>{var r=_s(t.body,e.withColor(t.color)),n=new dt.MathNode("mstyle",r);return n.setAttribute("mathcolor",t.color),n},"mathmlBuilder$7");Nt({type:"color",names:["\\textcolor"],props:{numArgs:2,allowedInText:!0,argTypes:["color","original"]},handler(t,e){var{parser:r}=t,n=xr(e[0],"color-token").color,i=e[1];return{type:"color",mode:r.mode,color:n,body:gi(i)}},htmlBuilder:qG,mathmlBuilder:YG});Nt({type:"color",names:["\\color"],props:{numArgs:1,allowedInText:!0,argTypes:["color"]},handler(t,e){var{parser:r,breakOnTokenText:n}=t,i=xr(e[0],"color-token").color;r.gullet.macros.set("\\current@color",i);var a=r.parseExpression(!0,n);return{type:"color",mode:r.mode,color:i,body:a}},htmlBuilder:qG,mathmlBuilder:YG});Nt({type:"cr",names:["\\\\"],props:{numArgs:0,numOptionalArgs:0,allowedInText:!0},handler(t,e,r){var{parser:n}=t,i=n.gullet.future().text==="["?n.parseSizeGroup(!0):null,a=!n.settings.displayMode||!n.settings.useStrictBehavior("newLineInDisplayMode","In LaTeX, \\\\ or \\newline does nothing in display mode");return{type:"cr",mode:n.mode,newLine:a,size:i&&xr(i,"size").value}},htmlBuilder(t,e){var r=Fe.makeSpan(["mspace"],[],e);return t.newLine&&(r.classes.push("newline"),t.size&&(r.style.marginTop=Et(ni(t.size,e)))),r},mathmlBuilder(t,e){var r=new dt.MathNode("mspace");return t.newLine&&(r.setAttribute("linebreak","newline"),t.size&&r.setAttribute("height",Et(ni(t.size,e)))),r}});Q7={"\\global":"\\global","\\long":"\\\\globallong","\\\\globallong":"\\\\globallong","\\def":"\\gdef","\\gdef":"\\gdef","\\edef":"\\xdef","\\xdef":"\\xdef","\\let":"\\\\globallet","\\futurelet":"\\\\globalfuture"},XG=o(t=>{var e=t.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(e))throw new pt("Expected a control sequence",t);return e},"checkControlSequence"),P3e=o(t=>{var e=t.gullet.popToken();return e.text==="="&&(e=t.gullet.popToken(),e.text===" "&&(e=t.gullet.popToken())),e},"getRHS"),jG=o((t,e,r,n)=>{var i=t.gullet.macros.get(r.text);i==null&&(r.noexpand=!0,i={tokens:[r],numArgs:0,unexpandable:!t.gullet.isExpandable(r.text)}),t.gullet.macros.set(e,i,n)},"letCommand");Nt({type:"internal",names:["\\global","\\long","\\\\globallong"],props:{numArgs:0,allowedInText:!0},handler(t){var{parser:e,funcName:r}=t;e.consumeSpaces();var n=e.fetch();if(Q7[n.text])return(r==="\\global"||r==="\\\\globallong")&&(n.text=Q7[n.text]),xr(e.parseFunction(),"internal");throw new pt("Invalid token after macro prefix",n)}});Nt({type:"internal",names:["\\def","\\gdef","\\edef","\\xdef"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t){var{parser:e,funcName:r}=t,n=e.gullet.popToken(),i=n.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(i))throw new pt("Expected a control sequence",n);for(var a=0,s,l=[[]];e.gullet.future().text!=="{";)if(n=e.gullet.popToken(),n.text==="#"){if(e.gullet.future().text==="{"){s=e.gullet.future(),l[a].push("{");break}if(n=e.gullet.popToken(),!/^[1-9]$/.test(n.text))throw new pt('Invalid argument number "'+n.text+'"');if(parseInt(n.text)!==a+1)throw new pt('Argument number "'+n.text+'" out of order');a++,l.push([])}else{if(n.text==="EOF")throw new pt("Expected a macro definition");l[a].push(n.text)}var{tokens:u}=e.gullet.consumeArg();return s&&u.unshift(s),(r==="\\edef"||r==="\\xdef")&&(u=e.gullet.expandTokens(u),u.reverse()),e.gullet.macros.set(i,{tokens:u,numArgs:a,delimiters:l},r===Q7[r]),{type:"internal",mode:e.mode}}});Nt({type:"internal",names:["\\let","\\\\globallet"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t){var{parser:e,funcName:r}=t,n=XG(e.gullet.popToken());e.gullet.consumeSpaces();var i=P3e(e);return jG(e,n,i,r==="\\\\globallet"),{type:"internal",mode:e.mode}}});Nt({type:"internal",names:["\\futurelet","\\\\globalfuture"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t){var{parser:e,funcName:r}=t,n=XG(e.gullet.popToken()),i=e.gullet.popToken(),a=e.gullet.popToken();return jG(e,n,a,r==="\\\\globalfuture"),e.gullet.pushToken(a),e.gullet.pushToken(i),{type:"internal",mode:e.mode}}});Yy=o(function(e,r,n){var i=An.math[e]&&An.math[e].replace,a=nA(i||e,r,n);if(!a)throw new Error("Unsupported symbol "+e+" and font size "+r+".");return a},"getMetrics"),cA=o(function(e,r,n,i){var a=n.havingBaseStyle(r),s=Fe.makeSpan(i.concat(a.sizingClasses(n)),[e],n),l=a.sizeMultiplier/n.sizeMultiplier;return s.height*=l,s.depth*=l,s.maxFontSize=a.sizeMultiplier,s},"styleWrap"),KG=o(function(e,r,n){var i=r.havingBaseStyle(n),a=(1-r.sizeMultiplier/i.sizeMultiplier)*r.fontMetrics().axisHeight;e.classes.push("delimcenter"),e.style.top=Et(a),e.height-=a,e.depth+=a},"centerSpan"),B3e=o(function(e,r,n,i,a,s){var l=Fe.makeSymbol(e,"Main-Regular",a,i),u=cA(l,r,i,s);return n&&KG(u,i,r),u},"makeSmallDelim"),F3e=o(function(e,r,n,i){return Fe.makeSymbol(e,"Size"+r+"-Regular",n,i)},"mathrmSize"),QG=o(function(e,r,n,i,a,s){var l=F3e(e,r,a,i),u=cA(Fe.makeSpan(["delimsizing","size"+r],[l],i),nr.TEXT,i,s);return n&&KG(u,i,nr.TEXT),u},"makeLargeDelim"),O7=o(function(e,r,n){var i;r==="Size1-Regular"?i="delim-size1":i="delim-size4";var a=Fe.makeSpan(["delimsizinginner",i],[Fe.makeSpan([],[Fe.makeSymbol(e,r,n)])]);return{type:"elem",elem:a}},"makeGlyphSpan"),P7=o(function(e,r,n){var i=Jl["Size4-Regular"][e.charCodeAt(0)]?Jl["Size4-Regular"][e.charCodeAt(0)][4]:Jl["Size1-Regular"][e.charCodeAt(0)][4],a=new ec("inner",q4e(e,Math.round(1e3*r))),s=new dl([a],{width:Et(i),height:Et(r),style:"width:"+Et(i),viewBox:"0 0 "+1e3*i+" "+Math.round(1e3*r),preserveAspectRatio:"xMinYMin"}),l=Fe.makeSvgSpan([],[s],n);return l.height=r,l.style.height=Et(r),l.style.width=Et(i),{type:"elem",elem:l}},"makeInner"),Z7=.008,v3={type:"kern",size:-1*Z7},$3e=["|","\\lvert","\\rvert","\\vert"],z3e=["\\|","\\lVert","\\rVert","\\Vert"],ZG=o(function(e,r,n,i,a,s){var l,u,h,f,d="",p=0;l=h=f=e,u=null;var m="Size1-Regular";e==="\\uparrow"?h=f="\u23D0":e==="\\Uparrow"?h=f="\u2016":e==="\\downarrow"?l=h="\u23D0":e==="\\Downarrow"?l=h="\u2016":e==="\\updownarrow"?(l="\\uparrow",h="\u23D0",f="\\downarrow"):e==="\\Updownarrow"?(l="\\Uparrow",h="\u2016",f="\\Downarrow"):Jt.contains($3e,e)?(h="\u2223",d="vert",p=333):Jt.contains(z3e,e)?(h="\u2225",d="doublevert",p=556):e==="["||e==="\\lbrack"?(l="\u23A1",h="\u23A2",f="\u23A3",m="Size4-Regular",d="lbrack",p=667):e==="]"||e==="\\rbrack"?(l="\u23A4",h="\u23A5",f="\u23A6",m="Size4-Regular",d="rbrack",p=667):e==="\\lfloor"||e==="\u230A"?(h=l="\u23A2",f="\u23A3",m="Size4-Regular",d="lfloor",p=667):e==="\\lceil"||e==="\u2308"?(l="\u23A1",h=f="\u23A2",m="Size4-Regular",d="lceil",p=667):e==="\\rfloor"||e==="\u230B"?(h=l="\u23A5",f="\u23A6",m="Size4-Regular",d="rfloor",p=667):e==="\\rceil"||e==="\u2309"?(l="\u23A4",h=f="\u23A5",m="Size4-Regular",d="rceil",p=667):e==="("||e==="\\lparen"?(l="\u239B",h="\u239C",f="\u239D",m="Size4-Regular",d="lparen",p=875):e===")"||e==="\\rparen"?(l="\u239E",h="\u239F",f="\u23A0",m="Size4-Regular",d="rparen",p=875):e==="\\{"||e==="\\lbrace"?(l="\u23A7",u="\u23A8",f="\u23A9",h="\u23AA",m="Size4-Regular"):e==="\\}"||e==="\\rbrace"?(l="\u23AB",u="\u23AC",f="\u23AD",h="\u23AA",m="Size4-Regular"):e==="\\lgroup"||e==="\u27EE"?(l="\u23A7",f="\u23A9",h="\u23AA",m="Size4-Regular"):e==="\\rgroup"||e==="\u27EF"?(l="\u23AB",f="\u23AD",h="\u23AA",m="Size4-Regular"):e==="\\lmoustache"||e==="\u23B0"?(l="\u23A7",f="\u23AD",h="\u23AA",m="Size4-Regular"):(e==="\\rmoustache"||e==="\u23B1")&&(l="\u23AB",f="\u23A9",h="\u23AA",m="Size4-Regular");var g=Yy(l,m,a),y=g.height+g.depth,v=Yy(h,m,a),x=v.height+v.depth,b=Yy(f,m,a),T=b.height+b.depth,S=0,w=1;if(u!==null){var E=Yy(u,m,a);S=E.height+E.depth,w=2}var _=y+T+S,C=Math.max(0,Math.ceil((r-_)/(w*x))),D=_+C*w*x,O=i.fontMetrics().axisHeight;n&&(O*=i.sizeMultiplier);var R=D/2-O,k=[];if(d.length>0){var L=D-y-T,A=Math.round(D*1e3),I=Y4e(d,Math.round(L*1e3)),M=new ec(d,I),P=(p/1e3).toFixed(3)+"em",B=(A/1e3).toFixed(3)+"em",F=new dl([M],{width:P,height:B,viewBox:"0 0 "+p+" "+A}),z=Fe.makeSvgSpan([],[F],i);z.height=A/1e3,z.style.width=P,z.style.height=B,k.push({type:"elem",elem:z})}else{if(k.push(O7(f,m,a)),k.push(v3),u===null){var $=D-y-T+2*Z7;k.push(P7(h,$,i))}else{var U=(D-y-T-S)/2+2*Z7;k.push(P7(h,U,i)),k.push(v3),k.push(O7(u,m,a)),k.push(v3),k.push(P7(h,U,i))}k.push(v3),k.push(O7(l,m,a))}var K=i.havingBaseStyle(nr.TEXT),ee=Fe.makeVList({positionType:"bottom",positionData:R,children:k},K);return cA(Fe.makeSpan(["delimsizing","mult"],[ee],K),nr.TEXT,i,s)},"makeStackedDelim"),B7=80,F7=.08,$7=o(function(e,r,n,i,a){var s=W4e(e,i,n),l=new ec(e,s),u=new dl([l],{width:"400em",height:Et(r),viewBox:"0 0 400000 "+n,preserveAspectRatio:"xMinYMin slice"});return Fe.makeSvgSpan(["hide-tail"],[u],a)},"sqrtSvg"),G3e=o(function(e,r){var n=r.havingBaseSizing(),i=rV("\\surd",e*n.sizeMultiplier,tV,n),a=n.sizeMultiplier,s=Math.max(0,r.minRuleThickness-r.fontMetrics().sqrtRuleThickness),l,u=0,h=0,f=0,d;return i.type==="small"?(f=1e3+1e3*s+B7,e<1?a=1:e<1.4&&(a=.7),u=(1+s+F7)/a,h=(1+s)/a,l=$7("sqrtMain",u,f,s,r),l.style.minWidth="0.853em",d=.833/a):i.type==="large"?(f=(1e3+B7)*jy[i.size],h=(jy[i.size]+s)/a,u=(jy[i.size]+s+F7)/a,l=$7("sqrtSize"+i.size,u,f,s,r),l.style.minWidth="1.02em",d=1/a):(u=e+s+F7,h=e+s,f=Math.floor(1e3*e+s)+B7,l=$7("sqrtTall",u,f,s,r),l.style.minWidth="0.742em",d=1.056),l.height=h,l.style.height=Et(u),{span:l,advanceWidth:d,ruleWidth:(r.fontMetrics().sqrtRuleThickness+s)*a}},"makeSqrtImage"),JG=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230A","\u230B","\\lceil","\\rceil","\u2308","\u2309","\\surd"],V3e=["\\uparrow","\\downarrow","\\updownarrow","\\Uparrow","\\Downarrow","\\Updownarrow","|","\\|","\\vert","\\Vert","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27EE","\u27EF","\\lmoustache","\\rmoustache","\u23B0","\u23B1"],eV=["<",">","\\langle","\\rangle","/","\\backslash","\\lt","\\gt"],jy=[0,1.2,1.8,2.4,3],U3e=o(function(e,r,n,i,a){if(e==="<"||e==="\\lt"||e==="\u27E8"?e="\\langle":(e===">"||e==="\\gt"||e==="\u27E9")&&(e="\\rangle"),Jt.contains(JG,e)||Jt.contains(eV,e))return QG(e,r,!1,n,i,a);if(Jt.contains(V3e,e))return ZG(e,jy[r],!1,n,i,a);throw new pt("Illegal delimiter: '"+e+"'")},"makeSizedDelim"),H3e=[{type:"small",style:nr.SCRIPTSCRIPT},{type:"small",style:nr.SCRIPT},{type:"small",style:nr.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}],W3e=[{type:"small",style:nr.SCRIPTSCRIPT},{type:"small",style:nr.SCRIPT},{type:"small",style:nr.TEXT},{type:"stack"}],tV=[{type:"small",style:nr.SCRIPTSCRIPT},{type:"small",style:nr.SCRIPT},{type:"small",style:nr.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}],q3e=o(function(e){if(e.type==="small")return"Main-Regular";if(e.type==="large")return"Size"+e.size+"-Regular";if(e.type==="stack")return"Size4-Regular";throw new Error("Add support for delim type '"+e.type+"' here.")},"delimTypeToFont"),rV=o(function(e,r,n,i){for(var a=Math.min(2,3-i.style.size),s=a;sr)return n[s]}return n[n.length-1]},"traverseSequence"),nV=o(function(e,r,n,i,a,s){e==="<"||e==="\\lt"||e==="\u27E8"?e="\\langle":(e===">"||e==="\\gt"||e==="\u27E9")&&(e="\\rangle");var l;Jt.contains(eV,e)?l=H3e:Jt.contains(JG,e)?l=tV:l=W3e;var u=rV(e,r,l,i);return u.type==="small"?B3e(e,u.style,n,i,a,s):u.type==="large"?QG(e,u.size,n,i,a,s):ZG(e,r,n,i,a,s)},"makeCustomSizedDelim"),Y3e=o(function(e,r,n,i,a,s){var l=i.fontMetrics().axisHeight*i.sizeMultiplier,u=901,h=5/i.fontMetrics().ptPerEm,f=Math.max(r-l,n+l),d=Math.max(f/500*u,2*f-h);return nV(e,d,!0,i,a,s)},"makeLeftRightDelim"),hu={sqrtImage:G3e,sizedDelim:U3e,sizeToMaxHeight:jy,customSizedDelim:nV,leftRightDelim:Y3e},oG={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}},X3e=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230A","\u230B","\\lceil","\\rceil","\u2308","\u2309","<",">","\\langle","\u27E8","\\rangle","\u27E9","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27EE","\u27EF","\\lmoustache","\\rmoustache","\u23B0","\u23B1","/","\\backslash","|","\\vert","\\|","\\Vert","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."];o(M3,"checkDelimiter");Nt({type:"delimsizing",names:["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],props:{numArgs:1,argTypes:["primitive"]},handler:o((t,e)=>{var r=M3(e[0],t);return{type:"delimsizing",mode:t.parser.mode,size:oG[t.funcName].size,mclass:oG[t.funcName].mclass,delim:r.text}},"handler"),htmlBuilder:o((t,e)=>t.delim==="."?Fe.makeSpan([t.mclass]):hu.sizedDelim(t.delim,t.size,e,t.mode,[t.mclass]),"htmlBuilder"),mathmlBuilder:o(t=>{var e=[];t.delim!=="."&&e.push(Do(t.delim,t.mode));var r=new dt.MathNode("mo",e);t.mclass==="mopen"||t.mclass==="mclose"?r.setAttribute("fence","true"):r.setAttribute("fence","false"),r.setAttribute("stretchy","true");var n=Et(hu.sizeToMaxHeight[t.size]);return r.setAttribute("minsize",n),r.setAttribute("maxsize",n),r},"mathmlBuilder")});o(lG,"assertParsed");Nt({type:"leftright-right",names:["\\right"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var r=t.parser.gullet.macros.get("\\current@color");if(r&&typeof r!="string")throw new pt("\\current@color set to non-string in \\right");return{type:"leftright-right",mode:t.parser.mode,delim:M3(e[0],t).text,color:r}},"handler")});Nt({type:"leftright",names:["\\left"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var r=M3(e[0],t),n=t.parser;++n.leftrightDepth;var i=n.parseExpression(!1);--n.leftrightDepth,n.expect("\\right",!1);var a=xr(n.parseFunction(),"leftright-right");return{type:"leftright",mode:n.mode,body:i,left:r.text,right:a.delim,rightColor:a.color}},"handler"),htmlBuilder:o((t,e)=>{lG(t);for(var r=$i(t.body,e,!0,["mopen","mclose"]),n=0,i=0,a=!1,s=0;s{lG(t);var r=_s(t.body,e);if(t.left!=="."){var n=new dt.MathNode("mo",[Do(t.left,t.mode)]);n.setAttribute("fence","true"),r.unshift(n)}if(t.right!=="."){var i=new dt.MathNode("mo",[Do(t.right,t.mode)]);i.setAttribute("fence","true"),t.rightColor&&i.setAttribute("mathcolor",t.rightColor),r.push(i)}return aA(r)},"mathmlBuilder")});Nt({type:"middle",names:["\\middle"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var r=M3(e[0],t);if(!t.parser.leftrightDepth)throw new pt("\\middle without preceding \\left",r);return{type:"middle",mode:t.parser.mode,delim:r.text}},"handler"),htmlBuilder:o((t,e)=>{var r;if(t.delim===".")r=ev(e,[]);else{r=hu.sizedDelim(t.delim,1,e,t.mode,[]);var n={delim:t.delim,options:e};r.isMiddle=n}return r},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=t.delim==="\\vert"||t.delim==="|"?Do("|","text"):Do(t.delim,t.mode),n=new dt.MathNode("mo",[r]);return n.setAttribute("fence","true"),n.setAttribute("lspace","0.05em"),n.setAttribute("rspace","0.05em"),n},"mathmlBuilder")});uA=o((t,e)=>{var r=Fe.wrapFragment($r(t.body,e),e),n=t.label.slice(1),i=e.sizeMultiplier,a,s=0,l=Jt.isCharacterBox(t.body);if(n==="sout")a=Fe.makeSpan(["stretchy","sout"]),a.height=e.fontMetrics().defaultRuleThickness/i,s=-.5*e.fontMetrics().xHeight;else if(n==="phase"){var u=ni({number:.6,unit:"pt"},e),h=ni({number:.35,unit:"ex"},e),f=e.havingBaseSizing();i=i/f.sizeMultiplier;var d=r.height+r.depth+u+h;r.style.paddingLeft=Et(d/2+u);var p=Math.floor(1e3*d*i),m=U4e(p),g=new dl([new ec("phase",m)],{width:"400em",height:Et(p/1e3),viewBox:"0 0 400000 "+p,preserveAspectRatio:"xMinYMin slice"});a=Fe.makeSvgSpan(["hide-tail"],[g],e),a.style.height=Et(d),s=r.depth+u+h}else{/cancel/.test(n)?l||r.classes.push("cancel-pad"):n==="angl"?r.classes.push("anglpad"):r.classes.push("boxpad");var y=0,v=0,x=0;/box/.test(n)?(x=Math.max(e.fontMetrics().fboxrule,e.minRuleThickness),y=e.fontMetrics().fboxsep+(n==="colorbox"?0:x),v=y):n==="angl"?(x=Math.max(e.fontMetrics().defaultRuleThickness,e.minRuleThickness),y=4*x,v=Math.max(0,.25-r.depth)):(y=l?.2:0,v=y),a=du.encloseSpan(r,n,y,v,e),/fbox|boxed|fcolorbox/.test(n)?(a.style.borderStyle="solid",a.style.borderWidth=Et(x)):n==="angl"&&x!==.049&&(a.style.borderTopWidth=Et(x),a.style.borderRightWidth=Et(x)),s=r.depth+v,t.backgroundColor&&(a.style.backgroundColor=t.backgroundColor,t.borderColor&&(a.style.borderColor=t.borderColor))}var b;if(t.backgroundColor)b=Fe.makeVList({positionType:"individualShift",children:[{type:"elem",elem:a,shift:s},{type:"elem",elem:r,shift:0}]},e);else{var T=/cancel|phase/.test(n)?["svg-align"]:[];b=Fe.makeVList({positionType:"individualShift",children:[{type:"elem",elem:r,shift:0},{type:"elem",elem:a,shift:s,wrapperClasses:T}]},e)}return/cancel/.test(n)&&(b.height=r.height,b.depth=r.depth),/cancel/.test(n)&&!l?Fe.makeSpan(["mord","cancel-lap"],[b],e):Fe.makeSpan(["mord"],[b],e)},"htmlBuilder$7"),hA=o((t,e)=>{var r=0,n=new dt.MathNode(t.label.indexOf("colorbox")>-1?"mpadded":"menclose",[vn(t.body,e)]);switch(t.label){case"\\cancel":n.setAttribute("notation","updiagonalstrike");break;case"\\bcancel":n.setAttribute("notation","downdiagonalstrike");break;case"\\phase":n.setAttribute("notation","phasorangle");break;case"\\sout":n.setAttribute("notation","horizontalstrike");break;case"\\fbox":n.setAttribute("notation","box");break;case"\\angl":n.setAttribute("notation","actuarial");break;case"\\fcolorbox":case"\\colorbox":if(r=e.fontMetrics().fboxsep*e.fontMetrics().ptPerEm,n.setAttribute("width","+"+2*r+"pt"),n.setAttribute("height","+"+2*r+"pt"),n.setAttribute("lspace",r+"pt"),n.setAttribute("voffset",r+"pt"),t.label==="\\fcolorbox"){var i=Math.max(e.fontMetrics().fboxrule,e.minRuleThickness);n.setAttribute("style","border: "+i+"em solid "+String(t.borderColor))}break;case"\\xcancel":n.setAttribute("notation","updiagonalstrike downdiagonalstrike");break}return t.backgroundColor&&n.setAttribute("mathbackground",t.backgroundColor),n},"mathmlBuilder$6");Nt({type:"enclose",names:["\\colorbox"],props:{numArgs:2,allowedInText:!0,argTypes:["color","text"]},handler(t,e,r){var{parser:n,funcName:i}=t,a=xr(e[0],"color-token").color,s=e[1];return{type:"enclose",mode:n.mode,label:i,backgroundColor:a,body:s}},htmlBuilder:uA,mathmlBuilder:hA});Nt({type:"enclose",names:["\\fcolorbox"],props:{numArgs:3,allowedInText:!0,argTypes:["color","color","text"]},handler(t,e,r){var{parser:n,funcName:i}=t,a=xr(e[0],"color-token").color,s=xr(e[1],"color-token").color,l=e[2];return{type:"enclose",mode:n.mode,label:i,backgroundColor:s,borderColor:a,body:l}},htmlBuilder:uA,mathmlBuilder:hA});Nt({type:"enclose",names:["\\fbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler(t,e){var{parser:r}=t;return{type:"enclose",mode:r.mode,label:"\\fbox",body:e[0]}}});Nt({type:"enclose",names:["\\cancel","\\bcancel","\\xcancel","\\sout","\\phase"],props:{numArgs:1},handler(t,e){var{parser:r,funcName:n}=t,i=e[0];return{type:"enclose",mode:r.mode,label:n,body:i}},htmlBuilder:uA,mathmlBuilder:hA});Nt({type:"enclose",names:["\\angl"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!1},handler(t,e){var{parser:r}=t;return{type:"enclose",mode:r.mode,label:"\\angl",body:e[0]}}});iV={};o(tc,"defineEnvironment");aV={};o(fe,"defineMacro");o(cG,"getHLines");I3=o(t=>{var e=t.parser.settings;if(!e.displayMode)throw new pt("{"+t.envName+"} can be used only in display mode.")},"validateAmsEnvironmentContext");o(fA,"getAutoTag");o(bh,"parseArray");o(dA,"dCellStyle");rc=o(function(e,r){var n,i,a=e.body.length,s=e.hLinesBeforeRow,l=0,u=new Array(a),h=[],f=Math.max(r.fontMetrics().arrayRuleWidth,r.minRuleThickness),d=1/r.fontMetrics().ptPerEm,p=5*d;if(e.colSeparationType&&e.colSeparationType==="small"){var m=r.havingStyle(nr.SCRIPT).sizeMultiplier;p=.2778*(m/r.sizeMultiplier)}var g=e.colSeparationType==="CD"?ni({number:3,unit:"ex"},r):12*d,y=3*d,v=e.arraystretch*g,x=.7*v,b=.3*v,T=0;function S(ae){for(var Oe=0;Oe0&&(T+=.25),h.push({pos:T,isDashed:ae[Oe]})}for(o(S,"setHLinePos"),S(s[0]),n=0;n0&&(R+=b,_ae))for(n=0;n=l)){var Z=void 0;(i>0||e.hskipBeforeAndAfter)&&(Z=Jt.deflt(U.pregap,p),Z!==0&&(I=Fe.makeSpan(["arraycolsep"],[]),I.style.width=Et(Z),A.push(I)));var ue=[];for(n=0;n0){for(var te=Fe.makeLineSpan("hline",r,f),he=Fe.makeLineSpan("hdashline",r,f),le=[{type:"elem",elem:u,shift:0}];h.length>0;){var J=h.pop(),Se=J.pos-k;J.isDashed?le.push({type:"elem",elem:he,shift:Se}):le.push({type:"elem",elem:te,shift:Se})}u=Fe.makeVList({positionType:"individualShift",children:le},r)}if(P.length===0)return Fe.makeSpan(["mord"],[u],r);var se=Fe.makeVList({positionType:"individualShift",children:P},r);return se=Fe.makeSpan(["tag"],[se],r),Fe.makeFragment([u,se])},"htmlBuilder"),j3e={c:"center ",l:"left ",r:"right "},nc=o(function(e,r){for(var n=[],i=new dt.MathNode("mtd",[],["mtr-glue"]),a=new dt.MathNode("mtd",[],["mml-eqn-num"]),s=0;s0){var g=e.cols,y="",v=!1,x=0,b=g.length;g[0].type==="separator"&&(p+="top ",x=1),g[g.length-1].type==="separator"&&(p+="bottom ",b-=1);for(var T=x;T0?"left ":"",p+=C[C.length-1].length>0?"right ":"";for(var D=1;D-1?"alignat":"align",a=e.envName==="split",s=bh(e.parser,{cols:n,addJot:!0,autoTag:a?void 0:fA(e.envName),emptySingleRow:!0,colSeparationType:i,maxNumCols:a?2:void 0,leqno:e.parser.settings.leqno},"display"),l,u=0,h={type:"ordgroup",mode:e.mode,body:[]};if(r[0]&&r[0].type==="ordgroup"){for(var f="",d=0;d0&&m&&(v=1),n[g]={type:"align",align:y,pregap:v,postgap:0}}return s.colSeparationType=m?"align":"alignat",s},"alignedHandler");tc({type:"array",names:["array","darray"],props:{numArgs:1},handler(t,e){var r=R3(e[0]),n=r?[e[0]]:xr(e[0],"ordgroup").body,i=n.map(function(s){var l=oA(s),u=l.text;if("lcr".indexOf(u)!==-1)return{type:"align",align:u};if(u==="|")return{type:"separator",separator:"|"};if(u===":")return{type:"separator",separator:":"};throw new pt("Unknown column alignment: "+u,s)}),a={cols:i,hskipBeforeAndAfter:!0,maxNumCols:i.length};return bh(t.parser,a,dA(t.envName))},htmlBuilder:rc,mathmlBuilder:nc});tc({type:"array",names:["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix","matrix*","pmatrix*","bmatrix*","Bmatrix*","vmatrix*","Vmatrix*"],props:{numArgs:0},handler(t){var e={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[t.envName.replace("*","")],r="c",n={hskipBeforeAndAfter:!1,cols:[{type:"align",align:r}]};if(t.envName.charAt(t.envName.length-1)==="*"){var i=t.parser;if(i.consumeSpaces(),i.fetch().text==="["){if(i.consume(),i.consumeSpaces(),r=i.fetch().text,"lcr".indexOf(r)===-1)throw new pt("Expected l or c or r",i.nextToken);i.consume(),i.consumeSpaces(),i.expect("]"),i.consume(),n.cols=[{type:"align",align:r}]}}var a=bh(t.parser,n,dA(t.envName)),s=Math.max(0,...a.body.map(l=>l.length));return a.cols=new Array(s).fill({type:"align",align:r}),e?{type:"leftright",mode:t.mode,body:[a],left:e[0],right:e[1],rightColor:void 0}:a},htmlBuilder:rc,mathmlBuilder:nc});tc({type:"array",names:["smallmatrix"],props:{numArgs:0},handler(t){var e={arraystretch:.5},r=bh(t.parser,e,"script");return r.colSeparationType="small",r},htmlBuilder:rc,mathmlBuilder:nc});tc({type:"array",names:["subarray"],props:{numArgs:1},handler(t,e){var r=R3(e[0]),n=r?[e[0]]:xr(e[0],"ordgroup").body,i=n.map(function(s){var l=oA(s),u=l.text;if("lc".indexOf(u)!==-1)return{type:"align",align:u};throw new pt("Unknown column alignment: "+u,s)});if(i.length>1)throw new pt("{subarray} can contain only one column");var a={cols:i,hskipBeforeAndAfter:!1,arraystretch:.5};if(a=bh(t.parser,a,"script"),a.body.length>0&&a.body[0].length>1)throw new pt("{subarray} can contain only one column");return a},htmlBuilder:rc,mathmlBuilder:nc});tc({type:"array",names:["cases","dcases","rcases","drcases"],props:{numArgs:0},handler(t){var e={arraystretch:1.2,cols:[{type:"align",align:"l",pregap:0,postgap:1},{type:"align",align:"l",pregap:0,postgap:0}]},r=bh(t.parser,e,dA(t.envName));return{type:"leftright",mode:t.mode,body:[r],left:t.envName.indexOf("r")>-1?".":"\\{",right:t.envName.indexOf("r")>-1?"\\}":".",rightColor:void 0}},htmlBuilder:rc,mathmlBuilder:nc});tc({type:"array",names:["align","align*","aligned","split"],props:{numArgs:0},handler:sV,htmlBuilder:rc,mathmlBuilder:nc});tc({type:"array",names:["gathered","gather","gather*"],props:{numArgs:0},handler(t){Jt.contains(["gather","gather*"],t.envName)&&I3(t);var e={cols:[{type:"align",align:"c"}],addJot:!0,colSeparationType:"gather",autoTag:fA(t.envName),emptySingleRow:!0,leqno:t.parser.settings.leqno};return bh(t.parser,e,"display")},htmlBuilder:rc,mathmlBuilder:nc});tc({type:"array",names:["alignat","alignat*","alignedat"],props:{numArgs:1},handler:sV,htmlBuilder:rc,mathmlBuilder:nc});tc({type:"array",names:["equation","equation*"],props:{numArgs:0},handler(t){I3(t);var e={autoTag:fA(t.envName),emptySingleRow:!0,singleRow:!0,maxNumCols:1,leqno:t.parser.settings.leqno};return bh(t.parser,e,"display")},htmlBuilder:rc,mathmlBuilder:nc});tc({type:"array",names:["CD"],props:{numArgs:0},handler(t){return I3(t),O3e(t.parser)},htmlBuilder:rc,mathmlBuilder:nc});fe("\\nonumber","\\gdef\\@eqnsw{0}");fe("\\notag","\\nonumber");Nt({type:"text",names:["\\hline","\\hdashline"],props:{numArgs:0,allowedInText:!0,allowedInMath:!0},handler(t,e){throw new pt(t.funcName+" valid only within array environment")}});uG=iV;Nt({type:"environment",names:["\\begin","\\end"],props:{numArgs:1,argTypes:["text"]},handler(t,e){var{parser:r,funcName:n}=t,i=e[0];if(i.type!=="ordgroup")throw new pt("Invalid environment name",i);for(var a="",s=0;s{var r=t.font,n=e.withFont(r);return $r(t.body,n)},"htmlBuilder$5"),lV=o((t,e)=>{var r=t.font,n=e.withFont(r);return vn(t.body,n)},"mathmlBuilder$4"),hG={"\\Bbb":"\\mathbb","\\bold":"\\mathbf","\\frak":"\\mathfrak","\\bm":"\\boldsymbol"};Nt({type:"font",names:["\\mathrm","\\mathit","\\mathbf","\\mathnormal","\\mathsfit","\\mathbb","\\mathcal","\\mathfrak","\\mathscr","\\mathsf","\\mathtt","\\Bbb","\\bold","\\frak"],props:{numArgs:1,allowedInArgument:!0},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=C3(e[0]),a=n;return a in hG&&(a=hG[a]),{type:"font",mode:r.mode,font:a.slice(1),body:i}},"handler"),htmlBuilder:oV,mathmlBuilder:lV});Nt({type:"mclass",names:["\\boldsymbol","\\bm"],props:{numArgs:1},handler:o((t,e)=>{var{parser:r}=t,n=e[0],i=Jt.isCharacterBox(n);return{type:"mclass",mode:r.mode,mclass:N3(n),body:[{type:"font",mode:r.mode,font:"boldsymbol",body:n}],isCharacterBox:i}},"handler")});Nt({type:"font",names:["\\rm","\\sf","\\tt","\\bf","\\it","\\cal"],props:{numArgs:0,allowedInText:!0},handler:o((t,e)=>{var{parser:r,funcName:n,breakOnTokenText:i}=t,{mode:a}=r,s=r.parseExpression(!0,i),l="math"+n.slice(1);return{type:"font",mode:a,font:l,body:{type:"ordgroup",mode:r.mode,body:s}}},"handler"),htmlBuilder:oV,mathmlBuilder:lV});cV=o((t,e)=>{var r=e;return t==="display"?r=r.id>=nr.SCRIPT.id?r.text():nr.DISPLAY:t==="text"&&r.size===nr.DISPLAY.size?r=nr.TEXT:t==="script"?r=nr.SCRIPT:t==="scriptscript"&&(r=nr.SCRIPTSCRIPT),r},"adjustStyle"),pA=o((t,e)=>{var r=cV(t.size,e.style),n=r.fracNum(),i=r.fracDen(),a;a=e.havingStyle(n);var s=$r(t.numer,a,e);if(t.continued){var l=8.5/e.fontMetrics().ptPerEm,u=3.5/e.fontMetrics().ptPerEm;s.height=s.height0?g=3*p:g=7*p,y=e.fontMetrics().denom1):(d>0?(m=e.fontMetrics().num2,g=p):(m=e.fontMetrics().num3,g=3*p),y=e.fontMetrics().denom2);var v;if(f){var b=e.fontMetrics().axisHeight;m-s.depth-(b+.5*d){var r=new dt.MathNode("mfrac",[vn(t.numer,e),vn(t.denom,e)]);if(!t.hasBarLine)r.setAttribute("linethickness","0px");else if(t.barSize){var n=ni(t.barSize,e);r.setAttribute("linethickness",Et(n))}var i=cV(t.size,e.style);if(i.size!==e.style.size){r=new dt.MathNode("mstyle",[r]);var a=i.size===nr.DISPLAY.size?"true":"false";r.setAttribute("displaystyle",a),r.setAttribute("scriptlevel","0")}if(t.leftDelim!=null||t.rightDelim!=null){var s=[];if(t.leftDelim!=null){var l=new dt.MathNode("mo",[new dt.TextNode(t.leftDelim.replace("\\",""))]);l.setAttribute("fence","true"),s.push(l)}if(s.push(r),t.rightDelim!=null){var u=new dt.MathNode("mo",[new dt.TextNode(t.rightDelim.replace("\\",""))]);u.setAttribute("fence","true"),s.push(u)}return aA(s)}return r},"mathmlBuilder$3");Nt({type:"genfrac",names:["\\dfrac","\\frac","\\tfrac","\\dbinom","\\binom","\\tbinom","\\\\atopfrac","\\\\bracefrac","\\\\brackfrac"],props:{numArgs:2,allowedInArgument:!0},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0],a=e[1],s,l=null,u=null,h="auto";switch(n){case"\\dfrac":case"\\frac":case"\\tfrac":s=!0;break;case"\\\\atopfrac":s=!1;break;case"\\dbinom":case"\\binom":case"\\tbinom":s=!1,l="(",u=")";break;case"\\\\bracefrac":s=!1,l="\\{",u="\\}";break;case"\\\\brackfrac":s=!1,l="[",u="]";break;default:throw new Error("Unrecognized genfrac command")}switch(n){case"\\dfrac":case"\\dbinom":h="display";break;case"\\tfrac":case"\\tbinom":h="text";break}return{type:"genfrac",mode:r.mode,continued:!1,numer:i,denom:a,hasBarLine:s,leftDelim:l,rightDelim:u,size:h,barSize:null}},"handler"),htmlBuilder:pA,mathmlBuilder:mA});Nt({type:"genfrac",names:["\\cfrac"],props:{numArgs:2},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0],a=e[1];return{type:"genfrac",mode:r.mode,continued:!0,numer:i,denom:a,hasBarLine:!0,leftDelim:null,rightDelim:null,size:"display",barSize:null}},"handler")});Nt({type:"infix",names:["\\over","\\choose","\\atop","\\brace","\\brack"],props:{numArgs:0,infix:!0},handler(t){var{parser:e,funcName:r,token:n}=t,i;switch(r){case"\\over":i="\\frac";break;case"\\choose":i="\\binom";break;case"\\atop":i="\\\\atopfrac";break;case"\\brace":i="\\\\bracefrac";break;case"\\brack":i="\\\\brackfrac";break;default:throw new Error("Unrecognized infix genfrac command")}return{type:"infix",mode:e.mode,replaceWith:i,token:n}}});fG=["display","text","script","scriptscript"],dG=o(function(e){var r=null;return e.length>0&&(r=e,r=r==="."?null:r),r},"delimFromValue");Nt({type:"genfrac",names:["\\genfrac"],props:{numArgs:6,allowedInArgument:!0,argTypes:["math","math","size","text","math","math"]},handler(t,e){var{parser:r}=t,n=e[4],i=e[5],a=C3(e[0]),s=a.type==="atom"&&a.family==="open"?dG(a.text):null,l=C3(e[1]),u=l.type==="atom"&&l.family==="close"?dG(l.text):null,h=xr(e[2],"size"),f,d=null;h.isBlank?f=!0:(d=h.value,f=d.number>0);var p="auto",m=e[3];if(m.type==="ordgroup"){if(m.body.length>0){var g=xr(m.body[0],"textord");p=fG[Number(g.text)]}}else m=xr(m,"textord"),p=fG[Number(m.text)];return{type:"genfrac",mode:r.mode,numer:n,denom:i,continued:!1,hasBarLine:f,barSize:d,leftDelim:s,rightDelim:u,size:p}},htmlBuilder:pA,mathmlBuilder:mA});Nt({type:"infix",names:["\\above"],props:{numArgs:1,argTypes:["size"],infix:!0},handler(t,e){var{parser:r,funcName:n,token:i}=t;return{type:"infix",mode:r.mode,replaceWith:"\\\\abovefrac",size:xr(e[0],"size").value,token:i}}});Nt({type:"genfrac",names:["\\\\abovefrac"],props:{numArgs:3,argTypes:["math","size","math"]},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0],a=_4e(xr(e[1],"infix").size),s=e[2],l=a.number>0;return{type:"genfrac",mode:r.mode,numer:i,denom:s,continued:!1,hasBarLine:l,barSize:a,leftDelim:null,rightDelim:null,size:"auto"}},"handler"),htmlBuilder:pA,mathmlBuilder:mA});uV=o((t,e)=>{var r=e.style,n,i;t.type==="supsub"?(n=t.sup?$r(t.sup,e.havingStyle(r.sup()),e):$r(t.sub,e.havingStyle(r.sub()),e),i=xr(t.base,"horizBrace")):i=xr(t,"horizBrace");var a=$r(i.base,e.havingBaseStyle(nr.DISPLAY)),s=du.svgSpan(i,e),l;if(i.isOver?(l=Fe.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:a},{type:"kern",size:.1},{type:"elem",elem:s}]},e),l.children[0].children[0].children[1].classes.push("svg-align")):(l=Fe.makeVList({positionType:"bottom",positionData:a.depth+.1+s.height,children:[{type:"elem",elem:s},{type:"kern",size:.1},{type:"elem",elem:a}]},e),l.children[0].children[0].children[0].classes.push("svg-align")),n){var u=Fe.makeSpan(["mord",i.isOver?"mover":"munder"],[l],e);i.isOver?l=Fe.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:u},{type:"kern",size:.2},{type:"elem",elem:n}]},e):l=Fe.makeVList({positionType:"bottom",positionData:u.depth+.2+n.height+n.depth,children:[{type:"elem",elem:n},{type:"kern",size:.2},{type:"elem",elem:u}]},e)}return Fe.makeSpan(["mord",i.isOver?"mover":"munder"],[l],e)},"htmlBuilder$3"),K3e=o((t,e)=>{var r=du.mathMLnode(t.label);return new dt.MathNode(t.isOver?"mover":"munder",[vn(t.base,e),r])},"mathmlBuilder$2");Nt({type:"horizBrace",names:["\\overbrace","\\underbrace"],props:{numArgs:1},handler(t,e){var{parser:r,funcName:n}=t;return{type:"horizBrace",mode:r.mode,label:n,isOver:/^\\over/.test(n),base:e[0]}},htmlBuilder:uV,mathmlBuilder:K3e});Nt({type:"href",names:["\\href"],props:{numArgs:2,argTypes:["url","original"],allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[1],i=xr(e[0],"url").url;return r.settings.isTrusted({command:"\\href",url:i})?{type:"href",mode:r.mode,href:i,body:gi(n)}:r.formatUnsupportedCmd("\\href")},"handler"),htmlBuilder:o((t,e)=>{var r=$i(t.body,e,!1);return Fe.makeAnchor(t.href,[],r,e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=xh(t.body,e);return r instanceof ts||(r=new ts("mrow",[r])),r.setAttribute("href",t.href),r},"mathmlBuilder")});Nt({type:"href",names:["\\url"],props:{numArgs:1,argTypes:["url"],allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=xr(e[0],"url").url;if(!r.settings.isTrusted({command:"\\url",url:n}))return r.formatUnsupportedCmd("\\url");for(var i=[],a=0;a{var{parser:r,funcName:n,token:i}=t,a=xr(e[0],"raw").string,s=e[1];r.settings.strict&&r.settings.reportNonstrict("htmlExtension","HTML extension is disabled on strict mode");var l,u={};switch(n){case"\\htmlClass":u.class=a,l={command:"\\htmlClass",class:a};break;case"\\htmlId":u.id=a,l={command:"\\htmlId",id:a};break;case"\\htmlStyle":u.style=a,l={command:"\\htmlStyle",style:a};break;case"\\htmlData":{for(var h=a.split(","),f=0;f{var r=$i(t.body,e,!1),n=["enclosing"];t.attributes.class&&n.push(...t.attributes.class.trim().split(/\s+/));var i=Fe.makeSpan(n,r,e);for(var a in t.attributes)a!=="class"&&t.attributes.hasOwnProperty(a)&&i.setAttribute(a,t.attributes[a]);return i},"htmlBuilder"),mathmlBuilder:o((t,e)=>xh(t.body,e),"mathmlBuilder")});Nt({type:"htmlmathml",names:["\\html@mathml"],props:{numArgs:2,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t;return{type:"htmlmathml",mode:r.mode,html:gi(e[0]),mathml:gi(e[1])}},"handler"),htmlBuilder:o((t,e)=>{var r=$i(t.html,e,!1);return Fe.makeFragment(r)},"htmlBuilder"),mathmlBuilder:o((t,e)=>xh(t.mathml,e),"mathmlBuilder")});z7=o(function(e){if(/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(e))return{number:+e,unit:"bp"};var r=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(e);if(!r)throw new pt("Invalid size: '"+e+"' in \\includegraphics");var n={number:+(r[1]+r[2]),unit:r[3]};if(!DG(n))throw new pt("Invalid unit: '"+n.unit+"' in \\includegraphics.");return n},"sizeData");Nt({type:"includegraphics",names:["\\includegraphics"],props:{numArgs:1,numOptionalArgs:1,argTypes:["raw","url"],allowedInText:!1},handler:o((t,e,r)=>{var{parser:n}=t,i={number:0,unit:"em"},a={number:.9,unit:"em"},s={number:0,unit:"em"},l="";if(r[0])for(var u=xr(r[0],"raw").string,h=u.split(","),f=0;f{var r=ni(t.height,e),n=0;t.totalheight.number>0&&(n=ni(t.totalheight,e)-r);var i=0;t.width.number>0&&(i=ni(t.width,e));var a={height:Et(r+n)};i>0&&(a.width=Et(i)),n>0&&(a.verticalAlign=Et(-n));var s=new q7(t.src,t.alt,a);return s.height=r,s.depth=n,s},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=new dt.MathNode("mglyph",[]);r.setAttribute("alt",t.alt);var n=ni(t.height,e),i=0;if(t.totalheight.number>0&&(i=ni(t.totalheight,e)-n,r.setAttribute("valign",Et(-i))),r.setAttribute("height",Et(n+i)),t.width.number>0){var a=ni(t.width,e);r.setAttribute("width",Et(a))}return r.setAttribute("src",t.src),r},"mathmlBuilder")});Nt({type:"kern",names:["\\kern","\\mkern","\\hskip","\\mskip"],props:{numArgs:1,argTypes:["size"],primitive:!0,allowedInText:!0},handler(t,e){var{parser:r,funcName:n}=t,i=xr(e[0],"size");if(r.settings.strict){var a=n[1]==="m",s=i.value.unit==="mu";a?(s||r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" supports only mu units, "+("not "+i.value.unit+" units")),r.mode!=="math"&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" works only in math mode")):s&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" doesn't support mu units")}return{type:"kern",mode:r.mode,dimension:i.value}},htmlBuilder(t,e){return Fe.makeGlue(t.dimension,e)},mathmlBuilder(t,e){var r=ni(t.dimension,e);return new dt.SpaceNode(r)}});Nt({type:"lap",names:["\\mathllap","\\mathrlap","\\mathclap"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0];return{type:"lap",mode:r.mode,alignment:n.slice(5),body:i}},"handler"),htmlBuilder:o((t,e)=>{var r;t.alignment==="clap"?(r=Fe.makeSpan([],[$r(t.body,e)]),r=Fe.makeSpan(["inner"],[r],e)):r=Fe.makeSpan(["inner"],[$r(t.body,e)]);var n=Fe.makeSpan(["fix"],[]),i=Fe.makeSpan([t.alignment],[r,n],e),a=Fe.makeSpan(["strut"]);return a.style.height=Et(i.height+i.depth),i.depth&&(a.style.verticalAlign=Et(-i.depth)),i.children.unshift(a),i=Fe.makeSpan(["thinbox"],[i],e),Fe.makeSpan(["mord","vbox"],[i],e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=new dt.MathNode("mpadded",[vn(t.body,e)]);if(t.alignment!=="rlap"){var n=t.alignment==="llap"?"-1":"-0.5";r.setAttribute("lspace",n+"width")}return r.setAttribute("width","0px"),r},"mathmlBuilder")});Nt({type:"styling",names:["\\(","$"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(t,e){var{funcName:r,parser:n}=t,i=n.mode;n.switchMode("math");var a=r==="\\("?"\\)":"$",s=n.parseExpression(!1,a);return n.expect(a),n.switchMode(i),{type:"styling",mode:n.mode,style:"text",body:s}}});Nt({type:"text",names:["\\)","\\]"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(t,e){throw new pt("Mismatched "+t.funcName)}});pG=o((t,e)=>{switch(e.style.size){case nr.DISPLAY.size:return t.display;case nr.TEXT.size:return t.text;case nr.SCRIPT.size:return t.script;case nr.SCRIPTSCRIPT.size:return t.scriptscript;default:return t.text}},"chooseMathStyle");Nt({type:"mathchoice",names:["\\mathchoice"],props:{numArgs:4,primitive:!0},handler:o((t,e)=>{var{parser:r}=t;return{type:"mathchoice",mode:r.mode,display:gi(e[0]),text:gi(e[1]),script:gi(e[2]),scriptscript:gi(e[3])}},"handler"),htmlBuilder:o((t,e)=>{var r=pG(t,e),n=$i(r,e,!1);return Fe.makeFragment(n)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=pG(t,e);return xh(r,e)},"mathmlBuilder")});hV=o((t,e,r,n,i,a,s)=>{t=Fe.makeSpan([],[t]);var l=r&&Jt.isCharacterBox(r),u,h;if(e){var f=$r(e,n.havingStyle(i.sup()),n);h={elem:f,kern:Math.max(n.fontMetrics().bigOpSpacing1,n.fontMetrics().bigOpSpacing3-f.depth)}}if(r){var d=$r(r,n.havingStyle(i.sub()),n);u={elem:d,kern:Math.max(n.fontMetrics().bigOpSpacing2,n.fontMetrics().bigOpSpacing4-d.height)}}var p;if(h&&u){var m=n.fontMetrics().bigOpSpacing5+u.elem.height+u.elem.depth+u.kern+t.depth+s;p=Fe.makeVList({positionType:"bottom",positionData:m,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:u.elem,marginLeft:Et(-a)},{type:"kern",size:u.kern},{type:"elem",elem:t},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:Et(a)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]},n)}else if(u){var g=t.height-s;p=Fe.makeVList({positionType:"top",positionData:g,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:u.elem,marginLeft:Et(-a)},{type:"kern",size:u.kern},{type:"elem",elem:t}]},n)}else if(h){var y=t.depth+s;p=Fe.makeVList({positionType:"bottom",positionData:y,children:[{type:"elem",elem:t},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:Et(a)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]},n)}else return t;var v=[p];if(u&&a!==0&&!l){var x=Fe.makeSpan(["mspace"],[],n);x.style.marginRight=Et(a),v.unshift(x)}return Fe.makeSpan(["mop","op-limits"],v,n)},"assembleSupSub"),fV=["\\smallint"],S0=o((t,e)=>{var r,n,i=!1,a;t.type==="supsub"?(r=t.sup,n=t.sub,a=xr(t.base,"op"),i=!0):a=xr(t,"op");var s=e.style,l=!1;s.size===nr.DISPLAY.size&&a.symbol&&!Jt.contains(fV,a.name)&&(l=!0);var u;if(a.symbol){var h=l?"Size2-Regular":"Size1-Regular",f="";if((a.name==="\\oiint"||a.name==="\\oiiint")&&(f=a.name.slice(1),a.name=f==="oiint"?"\\iint":"\\iiint"),u=Fe.makeSymbol(a.name,h,"math",e,["mop","op-symbol",l?"large-op":"small-op"]),f.length>0){var d=u.italic,p=Fe.staticSvg(f+"Size"+(l?"2":"1"),e);u=Fe.makeVList({positionType:"individualShift",children:[{type:"elem",elem:u,shift:0},{type:"elem",elem:p,shift:l?.08:0}]},e),a.name="\\"+f,u.classes.unshift("mop"),u.italic=d}}else if(a.body){var m=$i(a.body,e,!0);m.length===1&&m[0]instanceof As?(u=m[0],u.classes[0]="mop"):u=Fe.makeSpan(["mop"],m,e)}else{for(var g=[],y=1;y{var r;if(t.symbol)r=new ts("mo",[Do(t.name,t.mode)]),Jt.contains(fV,t.name)&&r.setAttribute("largeop","false");else if(t.body)r=new ts("mo",_s(t.body,e));else{r=new ts("mi",[new Ao(t.name.slice(1))]);var n=new ts("mo",[Do("\u2061","text")]);t.parentIsSupSub?r=new ts("mrow",[r,n]):r=zG([r,n])}return r},"mathmlBuilder$1"),Q3e={"\u220F":"\\prod","\u2210":"\\coprod","\u2211":"\\sum","\u22C0":"\\bigwedge","\u22C1":"\\bigvee","\u22C2":"\\bigcap","\u22C3":"\\bigcup","\u2A00":"\\bigodot","\u2A01":"\\bigoplus","\u2A02":"\\bigotimes","\u2A04":"\\biguplus","\u2A06":"\\bigsqcup"};Nt({type:"op",names:["\\coprod","\\bigvee","\\bigwedge","\\biguplus","\\bigcap","\\bigcup","\\intop","\\prod","\\sum","\\bigotimes","\\bigoplus","\\bigodot","\\bigsqcup","\\smallint","\u220F","\u2210","\u2211","\u22C0","\u22C1","\u22C2","\u22C3","\u2A00","\u2A01","\u2A02","\u2A04","\u2A06"],props:{numArgs:0},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=n;return i.length===1&&(i=Q3e[i]),{type:"op",mode:r.mode,limits:!0,parentIsSupSub:!1,symbol:!0,name:i}},"handler"),htmlBuilder:S0,mathmlBuilder:tv});Nt({type:"op",names:["\\mathop"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[0];return{type:"op",mode:r.mode,limits:!1,parentIsSupSub:!1,symbol:!1,body:gi(n)}},"handler"),htmlBuilder:S0,mathmlBuilder:tv});Z3e={"\u222B":"\\int","\u222C":"\\iint","\u222D":"\\iiint","\u222E":"\\oint","\u222F":"\\oiint","\u2230":"\\oiiint"};Nt({type:"op",names:["\\arcsin","\\arccos","\\arctan","\\arctg","\\arcctg","\\arg","\\ch","\\cos","\\cosec","\\cosh","\\cot","\\cotg","\\coth","\\csc","\\ctg","\\cth","\\deg","\\dim","\\exp","\\hom","\\ker","\\lg","\\ln","\\log","\\sec","\\sin","\\sinh","\\sh","\\tan","\\tanh","\\tg","\\th"],props:{numArgs:0},handler(t){var{parser:e,funcName:r}=t;return{type:"op",mode:e.mode,limits:!1,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:S0,mathmlBuilder:tv});Nt({type:"op",names:["\\det","\\gcd","\\inf","\\lim","\\max","\\min","\\Pr","\\sup"],props:{numArgs:0},handler(t){var{parser:e,funcName:r}=t;return{type:"op",mode:e.mode,limits:!0,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:S0,mathmlBuilder:tv});Nt({type:"op",names:["\\int","\\iint","\\iiint","\\oint","\\oiint","\\oiiint","\u222B","\u222C","\u222D","\u222E","\u222F","\u2230"],props:{numArgs:0},handler(t){var{parser:e,funcName:r}=t,n=r;return n.length===1&&(n=Z3e[n]),{type:"op",mode:e.mode,limits:!1,parentIsSupSub:!1,symbol:!0,name:n}},htmlBuilder:S0,mathmlBuilder:tv});dV=o((t,e)=>{var r,n,i=!1,a;t.type==="supsub"?(r=t.sup,n=t.sub,a=xr(t.base,"operatorname"),i=!0):a=xr(t,"operatorname");var s;if(a.body.length>0){for(var l=a.body.map(d=>{var p=d.text;return typeof p=="string"?{type:"textord",mode:d.mode,text:p}:d}),u=$i(l,e.withFont("mathrm"),!0),h=0;h{for(var r=_s(t.body,e.withFont("mathrm")),n=!0,i=0;if.toText()).join("");r=[new dt.TextNode(l)]}var u=new dt.MathNode("mi",r);u.setAttribute("mathvariant","normal");var h=new dt.MathNode("mo",[Do("\u2061","text")]);return t.parentIsSupSub?new dt.MathNode("mrow",[u,h]):dt.newDocumentFragment([u,h])},"mathmlBuilder");Nt({type:"operatorname",names:["\\operatorname@","\\operatornamewithlimits"],props:{numArgs:1},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0];return{type:"operatorname",mode:r.mode,body:gi(i),alwaysHandleSupSub:n==="\\operatornamewithlimits",limits:!1,parentIsSupSub:!1}},"handler"),htmlBuilder:dV,mathmlBuilder:J3e});fe("\\operatorname","\\@ifstar\\operatornamewithlimits\\operatorname@");cd({type:"ordgroup",htmlBuilder(t,e){return t.semisimple?Fe.makeFragment($i(t.body,e,!1)):Fe.makeSpan(["mord"],$i(t.body,e,!0),e)},mathmlBuilder(t,e){return xh(t.body,e,!0)}});Nt({type:"overline",names:["\\overline"],props:{numArgs:1},handler(t,e){var{parser:r}=t,n=e[0];return{type:"overline",mode:r.mode,body:n}},htmlBuilder(t,e){var r=$r(t.body,e.havingCrampedStyle()),n=Fe.makeLineSpan("overline-line",e),i=e.fontMetrics().defaultRuleThickness,a=Fe.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r},{type:"kern",size:3*i},{type:"elem",elem:n},{type:"kern",size:i}]},e);return Fe.makeSpan(["mord","overline"],[a],e)},mathmlBuilder(t,e){var r=new dt.MathNode("mo",[new dt.TextNode("\u203E")]);r.setAttribute("stretchy","true");var n=new dt.MathNode("mover",[vn(t.body,e),r]);return n.setAttribute("accent","true"),n}});Nt({type:"phantom",names:["\\phantom"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[0];return{type:"phantom",mode:r.mode,body:gi(n)}},"handler"),htmlBuilder:o((t,e)=>{var r=$i(t.body,e.withPhantom(),!1);return Fe.makeFragment(r)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=_s(t.body,e);return new dt.MathNode("mphantom",r)},"mathmlBuilder")});Nt({type:"hphantom",names:["\\hphantom"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[0];return{type:"hphantom",mode:r.mode,body:n}},"handler"),htmlBuilder:o((t,e)=>{var r=Fe.makeSpan([],[$r(t.body,e.withPhantom())]);if(r.height=0,r.depth=0,r.children)for(var n=0;n{var r=_s(gi(t.body),e),n=new dt.MathNode("mphantom",r),i=new dt.MathNode("mpadded",[n]);return i.setAttribute("height","0px"),i.setAttribute("depth","0px"),i},"mathmlBuilder")});Nt({type:"vphantom",names:["\\vphantom"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[0];return{type:"vphantom",mode:r.mode,body:n}},"handler"),htmlBuilder:o((t,e)=>{var r=Fe.makeSpan(["inner"],[$r(t.body,e.withPhantom())]),n=Fe.makeSpan(["fix"],[]);return Fe.makeSpan(["mord","rlap"],[r,n],e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=_s(gi(t.body),e),n=new dt.MathNode("mphantom",r),i=new dt.MathNode("mpadded",[n]);return i.setAttribute("width","0px"),i},"mathmlBuilder")});Nt({type:"raisebox",names:["\\raisebox"],props:{numArgs:2,argTypes:["size","hbox"],allowedInText:!0},handler(t,e){var{parser:r}=t,n=xr(e[0],"size").value,i=e[1];return{type:"raisebox",mode:r.mode,dy:n,body:i}},htmlBuilder(t,e){var r=$r(t.body,e),n=ni(t.dy,e);return Fe.makeVList({positionType:"shift",positionData:-n,children:[{type:"elem",elem:r}]},e)},mathmlBuilder(t,e){var r=new dt.MathNode("mpadded",[vn(t.body,e)]),n=t.dy.number+t.dy.unit;return r.setAttribute("voffset",n),r}});Nt({type:"internal",names:["\\relax"],props:{numArgs:0,allowedInText:!0,allowedInArgument:!0},handler(t){var{parser:e}=t;return{type:"internal",mode:e.mode}}});Nt({type:"rule",names:["\\rule"],props:{numArgs:2,numOptionalArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["size","size","size"]},handler(t,e,r){var{parser:n}=t,i=r[0],a=xr(e[0],"size"),s=xr(e[1],"size");return{type:"rule",mode:n.mode,shift:i&&xr(i,"size").value,width:a.value,height:s.value}},htmlBuilder(t,e){var r=Fe.makeSpan(["mord","rule"],[],e),n=ni(t.width,e),i=ni(t.height,e),a=t.shift?ni(t.shift,e):0;return r.style.borderRightWidth=Et(n),r.style.borderTopWidth=Et(i),r.style.bottom=Et(a),r.width=n,r.height=i+a,r.depth=-a,r.maxFontSize=i*1.125*e.sizeMultiplier,r},mathmlBuilder(t,e){var r=ni(t.width,e),n=ni(t.height,e),i=t.shift?ni(t.shift,e):0,a=e.color&&e.getColor()||"black",s=new dt.MathNode("mspace");s.setAttribute("mathbackground",a),s.setAttribute("width",Et(r)),s.setAttribute("height",Et(n));var l=new dt.MathNode("mpadded",[s]);return i>=0?l.setAttribute("height",Et(i)):(l.setAttribute("height",Et(i)),l.setAttribute("depth",Et(-i))),l.setAttribute("voffset",Et(i)),l}});o(pV,"sizingGroup");mG=["\\tiny","\\sixptsize","\\scriptsize","\\footnotesize","\\small","\\normalsize","\\large","\\Large","\\LARGE","\\huge","\\Huge"],e5e=o((t,e)=>{var r=e.havingSize(t.size);return pV(t.body,r,e)},"htmlBuilder");Nt({type:"sizing",names:mG,props:{numArgs:0,allowedInText:!0},handler:o((t,e)=>{var{breakOnTokenText:r,funcName:n,parser:i}=t,a=i.parseExpression(!1,r);return{type:"sizing",mode:i.mode,size:mG.indexOf(n)+1,body:a}},"handler"),htmlBuilder:e5e,mathmlBuilder:o((t,e)=>{var r=e.havingSize(t.size),n=_s(t.body,r),i=new dt.MathNode("mstyle",n);return i.setAttribute("mathsize",Et(r.sizeMultiplier)),i},"mathmlBuilder")});Nt({type:"smash",names:["\\smash"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler:o((t,e,r)=>{var{parser:n}=t,i=!1,a=!1,s=r[0]&&xr(r[0],"ordgroup");if(s)for(var l="",u=0;u{var r=Fe.makeSpan([],[$r(t.body,e)]);if(!t.smashHeight&&!t.smashDepth)return r;if(t.smashHeight&&(r.height=0,r.children))for(var n=0;n{var r=new dt.MathNode("mpadded",[vn(t.body,e)]);return t.smashHeight&&r.setAttribute("height","0px"),t.smashDepth&&r.setAttribute("depth","0px"),r},"mathmlBuilder")});Nt({type:"sqrt",names:["\\sqrt"],props:{numArgs:1,numOptionalArgs:1},handler(t,e,r){var{parser:n}=t,i=r[0],a=e[0];return{type:"sqrt",mode:n.mode,body:a,index:i}},htmlBuilder(t,e){var r=$r(t.body,e.havingCrampedStyle());r.height===0&&(r.height=e.fontMetrics().xHeight),r=Fe.wrapFragment(r,e);var n=e.fontMetrics(),i=n.defaultRuleThickness,a=i;e.style.idr.height+r.depth+s&&(s=(s+d-r.height-r.depth)/2);var p=u.height-r.height-s-h;r.style.paddingLeft=Et(f);var m=Fe.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r,wrapperClasses:["svg-align"]},{type:"kern",size:-(r.height+p)},{type:"elem",elem:u},{type:"kern",size:h}]},e);if(t.index){var g=e.havingStyle(nr.SCRIPTSCRIPT),y=$r(t.index,g,e),v=.6*(m.height-m.depth),x=Fe.makeVList({positionType:"shift",positionData:-v,children:[{type:"elem",elem:y}]},e),b=Fe.makeSpan(["root"],[x]);return Fe.makeSpan(["mord","sqrt"],[b,m],e)}else return Fe.makeSpan(["mord","sqrt"],[m],e)},mathmlBuilder(t,e){var{body:r,index:n}=t;return n?new dt.MathNode("mroot",[vn(r,e),vn(n,e)]):new dt.MathNode("msqrt",[vn(r,e)])}});gG={display:nr.DISPLAY,text:nr.TEXT,script:nr.SCRIPT,scriptscript:nr.SCRIPTSCRIPT};Nt({type:"styling",names:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t,e){var{breakOnTokenText:r,funcName:n,parser:i}=t,a=i.parseExpression(!0,r),s=n.slice(1,n.length-5);return{type:"styling",mode:i.mode,style:s,body:a}},htmlBuilder(t,e){var r=gG[t.style],n=e.havingStyle(r).withFont("");return pV(t.body,n,e)},mathmlBuilder(t,e){var r=gG[t.style],n=e.havingStyle(r),i=_s(t.body,n),a=new dt.MathNode("mstyle",i),s={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]},l=s[t.style];return a.setAttribute("scriptlevel",l[0]),a.setAttribute("displaystyle",l[1]),a}});t5e=o(function(e,r){var n=e.base;if(n)if(n.type==="op"){var i=n.limits&&(r.style.size===nr.DISPLAY.size||n.alwaysHandleSupSub);return i?S0:null}else if(n.type==="operatorname"){var a=n.alwaysHandleSupSub&&(r.style.size===nr.DISPLAY.size||n.limits);return a?dV:null}else{if(n.type==="accent")return Jt.isCharacterBox(n.base)?lA:null;if(n.type==="horizBrace"){var s=!e.sub;return s===n.isOver?uV:null}else return null}else return null},"htmlBuilderDelegate");cd({type:"supsub",htmlBuilder(t,e){var r=t5e(t,e);if(r)return r(t,e);var{base:n,sup:i,sub:a}=t,s=$r(n,e),l,u,h=e.fontMetrics(),f=0,d=0,p=n&&Jt.isCharacterBox(n);if(i){var m=e.havingStyle(e.style.sup());l=$r(i,m,e),p||(f=s.height-m.fontMetrics().supDrop*m.sizeMultiplier/e.sizeMultiplier)}if(a){var g=e.havingStyle(e.style.sub());u=$r(a,g,e),p||(d=s.depth+g.fontMetrics().subDrop*g.sizeMultiplier/e.sizeMultiplier)}var y;e.style===nr.DISPLAY?y=h.sup1:e.style.cramped?y=h.sup3:y=h.sup2;var v=e.sizeMultiplier,x=Et(.5/h.ptPerEm/v),b=null;if(u){var T=t.base&&t.base.type==="op"&&t.base.name&&(t.base.name==="\\oiint"||t.base.name==="\\oiiint");(s instanceof As||T)&&(b=Et(-s.italic))}var S;if(l&&u){f=Math.max(f,y,l.depth+.25*h.xHeight),d=Math.max(d,h.sub2);var w=h.defaultRuleThickness,E=4*w;if(f-l.depth-(u.height-d)0&&(f+=_,d-=_)}var C=[{type:"elem",elem:u,shift:d,marginRight:x,marginLeft:b},{type:"elem",elem:l,shift:-f,marginRight:x}];S=Fe.makeVList({positionType:"individualShift",children:C},e)}else if(u){d=Math.max(d,h.sub1,u.height-.8*h.xHeight);var D=[{type:"elem",elem:u,marginLeft:b,marginRight:x}];S=Fe.makeVList({positionType:"shift",positionData:d,children:D},e)}else if(l)f=Math.max(f,y,l.depth+.25*h.xHeight),S=Fe.makeVList({positionType:"shift",positionData:-f,children:[{type:"elem",elem:l,marginRight:x}]},e);else throw new Error("supsub must have either sup or sub.");var O=X7(s,"right")||"mord";return Fe.makeSpan([O],[s,Fe.makeSpan(["msupsub"],[S])],e)},mathmlBuilder(t,e){var r=!1,n,i;t.base&&t.base.type==="horizBrace"&&(i=!!t.sup,i===t.base.isOver&&(r=!0,n=t.base.isOver)),t.base&&(t.base.type==="op"||t.base.type==="operatorname")&&(t.base.parentIsSupSub=!0);var a=[vn(t.base,e)];t.sub&&a.push(vn(t.sub,e)),t.sup&&a.push(vn(t.sup,e));var s;if(r)s=n?"mover":"munder";else if(t.sub)if(t.sup){var h=t.base;h&&h.type==="op"&&h.limits&&e.style===nr.DISPLAY||h&&h.type==="operatorname"&&h.alwaysHandleSupSub&&(e.style===nr.DISPLAY||h.limits)?s="munderover":s="msubsup"}else{var u=t.base;u&&u.type==="op"&&u.limits&&(e.style===nr.DISPLAY||u.alwaysHandleSupSub)||u&&u.type==="operatorname"&&u.alwaysHandleSupSub&&(u.limits||e.style===nr.DISPLAY)?s="munder":s="msub"}else{var l=t.base;l&&l.type==="op"&&l.limits&&(e.style===nr.DISPLAY||l.alwaysHandleSupSub)||l&&l.type==="operatorname"&&l.alwaysHandleSupSub&&(l.limits||e.style===nr.DISPLAY)?s="mover":s="msup"}return new dt.MathNode(s,a)}});cd({type:"atom",htmlBuilder(t,e){return Fe.mathsym(t.text,t.mode,e,["m"+t.family])},mathmlBuilder(t,e){var r=new dt.MathNode("mo",[Do(t.text,t.mode)]);if(t.family==="bin"){var n=sA(t,e);n==="bold-italic"&&r.setAttribute("mathvariant",n)}else t.family==="punct"?r.setAttribute("separator","true"):(t.family==="open"||t.family==="close")&&r.setAttribute("stretchy","false");return r}});mV={mi:"italic",mn:"normal",mtext:"normal"};cd({type:"mathord",htmlBuilder(t,e){return Fe.makeOrd(t,e,"mathord")},mathmlBuilder(t,e){var r=new dt.MathNode("mi",[Do(t.text,t.mode,e)]),n=sA(t,e)||"italic";return n!==mV[r.type]&&r.setAttribute("mathvariant",n),r}});cd({type:"textord",htmlBuilder(t,e){return Fe.makeOrd(t,e,"textord")},mathmlBuilder(t,e){var r=Do(t.text,t.mode,e),n=sA(t,e)||"normal",i;return t.mode==="text"?i=new dt.MathNode("mtext",[r]):/[0-9]/.test(t.text)?i=new dt.MathNode("mn",[r]):t.text==="\\prime"?i=new dt.MathNode("mo",[r]):i=new dt.MathNode("mi",[r]),n!==mV[i.type]&&i.setAttribute("mathvariant",n),i}});G7={"\\nobreak":"nobreak","\\allowbreak":"allowbreak"},V7={" ":{},"\\ ":{},"~":{className:"nobreak"},"\\space":{},"\\nobreakspace":{className:"nobreak"}};cd({type:"spacing",htmlBuilder(t,e){if(V7.hasOwnProperty(t.text)){var r=V7[t.text].className||"";if(t.mode==="text"){var n=Fe.makeOrd(t,e,"textord");return n.classes.push(r),n}else return Fe.makeSpan(["mspace",r],[Fe.mathsym(t.text,t.mode,e)],e)}else{if(G7.hasOwnProperty(t.text))return Fe.makeSpan(["mspace",G7[t.text]],[],e);throw new pt('Unknown type of space "'+t.text+'"')}},mathmlBuilder(t,e){var r;if(V7.hasOwnProperty(t.text))r=new dt.MathNode("mtext",[new dt.TextNode("\xA0")]);else{if(G7.hasOwnProperty(t.text))return new dt.MathNode("mspace");throw new pt('Unknown type of space "'+t.text+'"')}return r}});yG=o(()=>{var t=new dt.MathNode("mtd",[]);return t.setAttribute("width","50%"),t},"pad");cd({type:"tag",mathmlBuilder(t,e){var r=new dt.MathNode("mtable",[new dt.MathNode("mtr",[yG(),new dt.MathNode("mtd",[xh(t.body,e)]),yG(),new dt.MathNode("mtd",[xh(t.tag,e)])])]);return r.setAttribute("width","100%"),r}});vG={"\\text":void 0,"\\textrm":"textrm","\\textsf":"textsf","\\texttt":"texttt","\\textnormal":"textrm"},xG={"\\textbf":"textbf","\\textmd":"textmd"},r5e={"\\textit":"textit","\\textup":"textup"},bG=o((t,e)=>{var r=t.font;if(r){if(vG[r])return e.withTextFontFamily(vG[r]);if(xG[r])return e.withTextFontWeight(xG[r]);if(r==="\\emph")return e.fontShape==="textit"?e.withTextFontShape("textup"):e.withTextFontShape("textit")}else return e;return e.withTextFontShape(r5e[r])},"optionsWithFont");Nt({type:"text",names:["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textbf","\\textmd","\\textit","\\textup","\\emph"],props:{numArgs:1,argTypes:["text"],allowedInArgument:!0,allowedInText:!0},handler(t,e){var{parser:r,funcName:n}=t,i=e[0];return{type:"text",mode:r.mode,body:gi(i),font:n}},htmlBuilder(t,e){var r=bG(t,e),n=$i(t.body,r,!0);return Fe.makeSpan(["mord","text"],n,r)},mathmlBuilder(t,e){var r=bG(t,e);return xh(t.body,r)}});Nt({type:"underline",names:["\\underline"],props:{numArgs:1,allowedInText:!0},handler(t,e){var{parser:r}=t;return{type:"underline",mode:r.mode,body:e[0]}},htmlBuilder(t,e){var r=$r(t.body,e),n=Fe.makeLineSpan("underline-line",e),i=e.fontMetrics().defaultRuleThickness,a=Fe.makeVList({positionType:"top",positionData:r.height,children:[{type:"kern",size:i},{type:"elem",elem:n},{type:"kern",size:3*i},{type:"elem",elem:r}]},e);return Fe.makeSpan(["mord","underline"],[a],e)},mathmlBuilder(t,e){var r=new dt.MathNode("mo",[new dt.TextNode("\u203E")]);r.setAttribute("stretchy","true");var n=new dt.MathNode("munder",[vn(t.body,e),r]);return n.setAttribute("accentunder","true"),n}});Nt({type:"vcenter",names:["\\vcenter"],props:{numArgs:1,argTypes:["original"],allowedInText:!1},handler(t,e){var{parser:r}=t;return{type:"vcenter",mode:r.mode,body:e[0]}},htmlBuilder(t,e){var r=$r(t.body,e),n=e.fontMetrics().axisHeight,i=.5*(r.height-n-(r.depth+n));return Fe.makeVList({positionType:"shift",positionData:i,children:[{type:"elem",elem:r}]},e)},mathmlBuilder(t,e){return new dt.MathNode("mpadded",[vn(t.body,e)],["vcenter"])}});Nt({type:"verb",names:["\\verb"],props:{numArgs:0,allowedInText:!0},handler(t,e,r){throw new pt("\\verb ended by end of line instead of matching delimiter")},htmlBuilder(t,e){for(var r=TG(t),n=[],i=e.havingStyle(e.style.text()),a=0;at.body.replace(/ /g,t.star?"\u2423":"\xA0"),"makeVerb"),yh=FG,gV=`[ \r + ]`,n5e="\\\\[a-zA-Z@]+",i5e="\\\\[^\uD800-\uDFFF]",a5e="("+n5e+")"+gV+"*",s5e=`\\\\( |[ \r ]+ -?)[ \r ]*`,F7="[\u0300-\u036F]",P4e=new RegExp(F7+"+$"),B4e="("+NG+"+)|"+(O4e+"|")+"([!-\\[\\]-\u2027\u202A-\uD7FF\uF900-\uFFFF]"+(F7+"*")+"|[\uD800-\uDBFF][\uDC00-\uDFFF]"+(F7+"*")+"|\\\\verb\\*([^]).*?\\4|\\\\verb([^*a-zA-Z]).*?\\5"+("|"+I4e)+("|"+M4e+")"),k3=class{static{o(this,"Lexer")}constructor(e,r){this.input=void 0,this.settings=void 0,this.tokenRegex=void 0,this.catcodes=void 0,this.input=e,this.settings=r,this.tokenRegex=new RegExp(B4e,"g"),this.catcodes={"%":14,"~":13}}setCatcode(e,r){this.catcodes[e]=r}lex(){var e=this.input,r=this.tokenRegex.lastIndex;if(r===e.length)return new Co("EOF",new Ks(this,r,r));var n=this.tokenRegex.exec(e);if(n===null||n.index!==r)throw new gt("Unexpected character: '"+e[r]+"'",new Co(e[r],new Ks(this,r,r+1)));var i=n[6]||n[3]||(n[2]?"\\ ":" ");if(this.catcodes[i]===14){var a=e.indexOf(` -`,this.tokenRegex.lastIndex);return a===-1?(this.tokenRegex.lastIndex=e.length,this.settings.reportNonstrict("commentAtEnd","% comment has no terminating newline; LaTeX would fail because of commenting the end of math mode (e.g. $)")):this.tokenRegex.lastIndex=a+1,this.lex()}return new Co(i,new Ks(this,r,this.tokenRegex.lastIndex))}},$7=class{static{o(this,"Namespace")}constructor(e,r){e===void 0&&(e={}),r===void 0&&(r={}),this.current=void 0,this.builtins=void 0,this.undefStack=void 0,this.current=r,this.builtins=e,this.undefStack=[]}beginGroup(){this.undefStack.push({})}endGroup(){if(this.undefStack.length===0)throw new gt("Unbalanced namespace destruction: attempt to pop global namespace; please report this as a bug");var e=this.undefStack.pop();for(var r in e)e.hasOwnProperty(r)&&(e[r]==null?delete this.current[r]:this.current[r]=e[r])}endGroups(){for(;this.undefStack.length>0;)this.endGroup()}has(e){return this.current.hasOwnProperty(e)||this.builtins.hasOwnProperty(e)}get(e){return this.current.hasOwnProperty(e)?this.current[e]:this.builtins[e]}set(e,r,n){if(n===void 0&&(n=!1),n){for(var i=0;i0&&(this.undefStack[this.undefStack.length-1][e]=r)}else{var a=this.undefStack[this.undefStack.length-1];a&&!a.hasOwnProperty(e)&&(a[e]=this.current[e])}r==null?delete this.current[e]:this.current[e]=r}},F4e=wG;fe("\\noexpand",function(t){var e=t.popToken();return t.isExpandable(e.text)&&(e.noexpand=!0,e.treatAsRelax=!0),{tokens:[e],numArgs:0}});fe("\\expandafter",function(t){var e=t.popToken();return t.expandOnce(!0),{tokens:[e],numArgs:0}});fe("\\@firstoftwo",function(t){var e=t.consumeArgs(2);return{tokens:e[0],numArgs:0}});fe("\\@secondoftwo",function(t){var e=t.consumeArgs(2);return{tokens:e[1],numArgs:0}});fe("\\@ifnextchar",function(t){var e=t.consumeArgs(3);t.consumeSpaces();var r=t.future();return e[0].length===1&&e[0][0].text===r.text?{tokens:e[1],numArgs:0}:{tokens:e[2],numArgs:0}});fe("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}");fe("\\TextOrMath",function(t){var e=t.consumeArgs(2);return t.mode==="text"?{tokens:e[0],numArgs:0}:{tokens:e[1],numArgs:0}});$z={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15};fe("\\char",function(t){var e=t.popToken(),r,n="";if(e.text==="'")r=8,e=t.popToken();else if(e.text==='"')r=16,e=t.popToken();else if(e.text==="`")if(e=t.popToken(),e.text[0]==="\\")n=e.text.charCodeAt(1);else{if(e.text==="EOF")throw new gt("\\char` missing argument");n=e.text.charCodeAt(0)}else r=10;if(r){if(n=$z[e.text],n==null||n>=r)throw new gt("Invalid base-"+r+" digit "+e.text);for(var i;(i=$z[t.future().text])!=null&&i{var n=t.consumeArg().tokens;if(n.length!==1)throw new gt("\\newcommand's first argument must be a macro name");var i=n[0].text,a=t.isDefined(i);if(a&&!e)throw new gt("\\newcommand{"+i+"} attempting to redefine "+(i+"; use \\renewcommand"));if(!a&&!r)throw new gt("\\renewcommand{"+i+"} when command "+i+" does not yet exist; use \\newcommand");var s=0;if(n=t.consumeArg().tokens,n.length===1&&n[0].text==="["){for(var l="",u=t.expandNextToken();u.text!=="]"&&u.text!=="EOF";)l+=u.text,u=t.expandNextToken();if(!l.match(/^\s*[0-9]+\s*$/))throw new gt("Invalid number of arguments: "+l);s=parseInt(l),n=t.consumeArg().tokens}return t.macros.set(i,{tokens:n,numArgs:s}),""},"newcommand");fe("\\newcommand",t=>tA(t,!1,!0));fe("\\renewcommand",t=>tA(t,!0,!1));fe("\\providecommand",t=>tA(t,!0,!0));fe("\\message",t=>{var e=t.consumeArgs(1)[0];return console.log(e.reverse().map(r=>r.text).join("")),""});fe("\\errmessage",t=>{var e=t.consumeArgs(1)[0];return console.error(e.reverse().map(r=>r.text).join("")),""});fe("\\show",t=>{var e=t.popToken(),r=e.text;return console.log(e,t.macros.get(r),mh[r],An.math[r],An.text[r]),""});fe("\\bgroup","{");fe("\\egroup","}");fe("~","\\nobreakspace");fe("\\lq","`");fe("\\rq","'");fe("\\aa","\\r a");fe("\\AA","\\r A");fe("\\textcopyright","\\html@mathml{\\textcircled{c}}{\\char`\xA9}");fe("\\copyright","\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}");fe("\\textregistered","\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`\xAE}");fe("\u212C","\\mathscr{B}");fe("\u2130","\\mathscr{E}");fe("\u2131","\\mathscr{F}");fe("\u210B","\\mathscr{H}");fe("\u2110","\\mathscr{I}");fe("\u2112","\\mathscr{L}");fe("\u2133","\\mathscr{M}");fe("\u211B","\\mathscr{R}");fe("\u212D","\\mathfrak{C}");fe("\u210C","\\mathfrak{H}");fe("\u2128","\\mathfrak{Z}");fe("\\Bbbk","\\Bbb{k}");fe("\xB7","\\cdotp");fe("\\llap","\\mathllap{\\textrm{#1}}");fe("\\rlap","\\mathrlap{\\textrm{#1}}");fe("\\clap","\\mathclap{\\textrm{#1}}");fe("\\mathstrut","\\vphantom{(}");fe("\\underbar","\\underline{\\text{#1}}");fe("\\not",'\\html@mathml{\\mathrel{\\mathrlap\\@not}}{\\char"338}');fe("\\neq","\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`\u2260}}");fe("\\ne","\\neq");fe("\u2260","\\neq");fe("\\notin","\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}{\\mathrel{\\char`\u2209}}");fe("\u2209","\\notin");fe("\u2258","\\html@mathml{\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}}{\\mathrel{\\char`\u2258}}");fe("\u2259","\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`\u2258}}");fe("\u225A","\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`\u225A}}");fe("\u225B","\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}{\\mathrel{\\char`\u225B}}");fe("\u225D","\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}{\\mathrel{\\char`\u225D}}");fe("\u225E","\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}{\\mathrel{\\char`\u225E}}");fe("\u225F","\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`\u225F}}");fe("\u27C2","\\perp");fe("\u203C","\\mathclose{!\\mkern-0.8mu!}");fe("\u220C","\\notni");fe("\u231C","\\ulcorner");fe("\u231D","\\urcorner");fe("\u231E","\\llcorner");fe("\u231F","\\lrcorner");fe("\xA9","\\copyright");fe("\xAE","\\textregistered");fe("\uFE0F","\\textregistered");fe("\\ulcorner",'\\html@mathml{\\@ulcorner}{\\mathop{\\char"231c}}');fe("\\urcorner",'\\html@mathml{\\@urcorner}{\\mathop{\\char"231d}}');fe("\\llcorner",'\\html@mathml{\\@llcorner}{\\mathop{\\char"231e}}');fe("\\lrcorner",'\\html@mathml{\\@lrcorner}{\\mathop{\\char"231f}}');fe("\\vdots","\\mathord{\\varvdots\\rule{0pt}{15pt}}");fe("\u22EE","\\vdots");fe("\\varGamma","\\mathit{\\Gamma}");fe("\\varDelta","\\mathit{\\Delta}");fe("\\varTheta","\\mathit{\\Theta}");fe("\\varLambda","\\mathit{\\Lambda}");fe("\\varXi","\\mathit{\\Xi}");fe("\\varPi","\\mathit{\\Pi}");fe("\\varSigma","\\mathit{\\Sigma}");fe("\\varUpsilon","\\mathit{\\Upsilon}");fe("\\varPhi","\\mathit{\\Phi}");fe("\\varPsi","\\mathit{\\Psi}");fe("\\varOmega","\\mathit{\\Omega}");fe("\\substack","\\begin{subarray}{c}#1\\end{subarray}");fe("\\colon","\\nobreak\\mskip2mu\\mathpunct{}\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu\\relax");fe("\\boxed","\\fbox{$\\displaystyle{#1}$}");fe("\\iff","\\DOTSB\\;\\Longleftrightarrow\\;");fe("\\implies","\\DOTSB\\;\\Longrightarrow\\;");fe("\\impliedby","\\DOTSB\\;\\Longleftarrow\\;");zz={",":"\\dotsc","\\not":"\\dotsb","+":"\\dotsb","=":"\\dotsb","<":"\\dotsb",">":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcup":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"};fe("\\dots",function(t){var e="\\dotso",r=t.expandAfterFuture().text;return r in zz?e=zz[r]:(r.slice(0,4)==="\\not"||r in An.math&&Jt.contains(["bin","rel"],An.math[r].group))&&(e="\\dotsb"),e});rA={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};fe("\\dotso",function(t){var e=t.future().text;return e in rA?"\\ldots\\,":"\\ldots"});fe("\\dotsc",function(t){var e=t.future().text;return e in rA&&e!==","?"\\ldots\\,":"\\ldots"});fe("\\cdots",function(t){var e=t.future().text;return e in rA?"\\@cdots\\,":"\\@cdots"});fe("\\dotsb","\\cdots");fe("\\dotsm","\\cdots");fe("\\dotsi","\\!\\cdots");fe("\\dotsx","\\ldots\\,");fe("\\DOTSI","\\relax");fe("\\DOTSB","\\relax");fe("\\DOTSX","\\relax");fe("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax");fe("\\,","\\tmspace+{3mu}{.1667em}");fe("\\thinspace","\\,");fe("\\>","\\mskip{4mu}");fe("\\:","\\tmspace+{4mu}{.2222em}");fe("\\medspace","\\:");fe("\\;","\\tmspace+{5mu}{.2777em}");fe("\\thickspace","\\;");fe("\\!","\\tmspace-{3mu}{.1667em}");fe("\\negthinspace","\\!");fe("\\negmedspace","\\tmspace-{4mu}{.2222em}");fe("\\negthickspace","\\tmspace-{5mu}{.277em}");fe("\\enspace","\\kern.5em ");fe("\\enskip","\\hskip.5em\\relax");fe("\\quad","\\hskip1em\\relax");fe("\\qquad","\\hskip2em\\relax");fe("\\tag","\\@ifstar\\tag@literal\\tag@paren");fe("\\tag@paren","\\tag@literal{({#1})}");fe("\\tag@literal",t=>{if(t.macros.get("\\df@tag"))throw new gt("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"});fe("\\bmod","\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}");fe("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)");fe("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}");fe("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1");fe("\\newline","\\\\\\relax");fe("\\TeX","\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}");MG=kt(Ql["Main-Regular"][84][1]-.7*Ql["Main-Regular"][65][1]);fe("\\LaTeX","\\textrm{\\html@mathml{"+("L\\kern-.36em\\raisebox{"+MG+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{LaTeX}}");fe("\\KaTeX","\\textrm{\\html@mathml{"+("K\\kern-.17em\\raisebox{"+MG+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{KaTeX}}");fe("\\hspace","\\@ifstar\\@hspacer\\@hspace");fe("\\@hspace","\\hskip #1\\relax");fe("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax");fe("\\ordinarycolon",":");fe("\\vcentcolon","\\mathrel{\\mathop\\ordinarycolon}");fe("\\dblcolon",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}');fe("\\coloneqq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}');fe("\\Coloneqq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}');fe("\\coloneq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}');fe("\\Coloneq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}');fe("\\eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}');fe("\\Eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}');fe("\\eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}');fe("\\Eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}');fe("\\colonapprox",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}');fe("\\Colonapprox",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}');fe("\\colonsim",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}');fe("\\Colonsim",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}');fe("\u2237","\\dblcolon");fe("\u2239","\\eqcolon");fe("\u2254","\\coloneqq");fe("\u2255","\\eqqcolon");fe("\u2A74","\\Coloneqq");fe("\\ratio","\\vcentcolon");fe("\\coloncolon","\\dblcolon");fe("\\colonequals","\\coloneqq");fe("\\coloncolonequals","\\Coloneqq");fe("\\equalscolon","\\eqqcolon");fe("\\equalscoloncolon","\\Eqqcolon");fe("\\colonminus","\\coloneq");fe("\\coloncolonminus","\\Coloneq");fe("\\minuscolon","\\eqcolon");fe("\\minuscoloncolon","\\Eqcolon");fe("\\coloncolonapprox","\\Colonapprox");fe("\\coloncolonsim","\\Colonsim");fe("\\simcolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}");fe("\\simcoloncolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}");fe("\\approxcolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}");fe("\\approxcoloncolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}");fe("\\notni","\\html@mathml{\\not\\ni}{\\mathrel{\\char`\u220C}}");fe("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}");fe("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}");fe("\\injlim","\\DOTSB\\operatorname*{inj\\,lim}");fe("\\projlim","\\DOTSB\\operatorname*{proj\\,lim}");fe("\\varlimsup","\\DOTSB\\operatorname*{\\overline{lim}}");fe("\\varliminf","\\DOTSB\\operatorname*{\\underline{lim}}");fe("\\varinjlim","\\DOTSB\\operatorname*{\\underrightarrow{lim}}");fe("\\varprojlim","\\DOTSB\\operatorname*{\\underleftarrow{lim}}");fe("\\gvertneqq","\\html@mathml{\\@gvertneqq}{\u2269}");fe("\\lvertneqq","\\html@mathml{\\@lvertneqq}{\u2268}");fe("\\ngeqq","\\html@mathml{\\@ngeqq}{\u2271}");fe("\\ngeqslant","\\html@mathml{\\@ngeqslant}{\u2271}");fe("\\nleqq","\\html@mathml{\\@nleqq}{\u2270}");fe("\\nleqslant","\\html@mathml{\\@nleqslant}{\u2270}");fe("\\nshortmid","\\html@mathml{\\@nshortmid}{\u2224}");fe("\\nshortparallel","\\html@mathml{\\@nshortparallel}{\u2226}");fe("\\nsubseteqq","\\html@mathml{\\@nsubseteqq}{\u2288}");fe("\\nsupseteqq","\\html@mathml{\\@nsupseteqq}{\u2289}");fe("\\varsubsetneq","\\html@mathml{\\@varsubsetneq}{\u228A}");fe("\\varsubsetneqq","\\html@mathml{\\@varsubsetneqq}{\u2ACB}");fe("\\varsupsetneq","\\html@mathml{\\@varsupsetneq}{\u228B}");fe("\\varsupsetneqq","\\html@mathml{\\@varsupsetneqq}{\u2ACC}");fe("\\imath","\\html@mathml{\\@imath}{\u0131}");fe("\\jmath","\\html@mathml{\\@jmath}{\u0237}");fe("\\llbracket","\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`\u27E6}}");fe("\\rrbracket","\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`\u27E7}}");fe("\u27E6","\\llbracket");fe("\u27E7","\\rrbracket");fe("\\lBrace","\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`\u2983}}");fe("\\rBrace","\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`\u2984}}");fe("\u2983","\\lBrace");fe("\u2984","\\rBrace");fe("\\minuso","\\mathbin{\\html@mathml{{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}{\\char`\u29B5}}");fe("\u29B5","\\minuso");fe("\\darr","\\downarrow");fe("\\dArr","\\Downarrow");fe("\\Darr","\\Downarrow");fe("\\lang","\\langle");fe("\\rang","\\rangle");fe("\\uarr","\\uparrow");fe("\\uArr","\\Uparrow");fe("\\Uarr","\\Uparrow");fe("\\N","\\mathbb{N}");fe("\\R","\\mathbb{R}");fe("\\Z","\\mathbb{Z}");fe("\\alef","\\aleph");fe("\\alefsym","\\aleph");fe("\\Alpha","\\mathrm{A}");fe("\\Beta","\\mathrm{B}");fe("\\bull","\\bullet");fe("\\Chi","\\mathrm{X}");fe("\\clubs","\\clubsuit");fe("\\cnums","\\mathbb{C}");fe("\\Complex","\\mathbb{C}");fe("\\Dagger","\\ddagger");fe("\\diamonds","\\diamondsuit");fe("\\empty","\\emptyset");fe("\\Epsilon","\\mathrm{E}");fe("\\Eta","\\mathrm{H}");fe("\\exist","\\exists");fe("\\harr","\\leftrightarrow");fe("\\hArr","\\Leftrightarrow");fe("\\Harr","\\Leftrightarrow");fe("\\hearts","\\heartsuit");fe("\\image","\\Im");fe("\\infin","\\infty");fe("\\Iota","\\mathrm{I}");fe("\\isin","\\in");fe("\\Kappa","\\mathrm{K}");fe("\\larr","\\leftarrow");fe("\\lArr","\\Leftarrow");fe("\\Larr","\\Leftarrow");fe("\\lrarr","\\leftrightarrow");fe("\\lrArr","\\Leftrightarrow");fe("\\Lrarr","\\Leftrightarrow");fe("\\Mu","\\mathrm{M}");fe("\\natnums","\\mathbb{N}");fe("\\Nu","\\mathrm{N}");fe("\\Omicron","\\mathrm{O}");fe("\\plusmn","\\pm");fe("\\rarr","\\rightarrow");fe("\\rArr","\\Rightarrow");fe("\\Rarr","\\Rightarrow");fe("\\real","\\Re");fe("\\reals","\\mathbb{R}");fe("\\Reals","\\mathbb{R}");fe("\\Rho","\\mathrm{P}");fe("\\sdot","\\cdot");fe("\\sect","\\S");fe("\\spades","\\spadesuit");fe("\\sub","\\subset");fe("\\sube","\\subseteq");fe("\\supe","\\supseteq");fe("\\Tau","\\mathrm{T}");fe("\\thetasym","\\vartheta");fe("\\weierp","\\wp");fe("\\Zeta","\\mathrm{Z}");fe("\\argmin","\\DOTSB\\operatorname*{arg\\,min}");fe("\\argmax","\\DOTSB\\operatorname*{arg\\,max}");fe("\\plim","\\DOTSB\\mathop{\\operatorname{plim}}\\limits");fe("\\bra","\\mathinner{\\langle{#1}|}");fe("\\ket","\\mathinner{|{#1}\\rangle}");fe("\\braket","\\mathinner{\\langle{#1}\\rangle}");fe("\\Bra","\\left\\langle#1\\right|");fe("\\Ket","\\left|#1\\right\\rangle");IG=o(t=>e=>{var r=e.consumeArg().tokens,n=e.consumeArg().tokens,i=e.consumeArg().tokens,a=e.consumeArg().tokens,s=e.macros.get("|"),l=e.macros.get("\\|");e.macros.beginGroup();var u=o(d=>p=>{t&&(p.macros.set("|",s),i.length&&p.macros.set("\\|",l));var m=d;if(!d&&i.length){var g=p.future();g.text==="|"&&(p.popToken(),m=!0)}return{tokens:m?i:n,numArgs:0}},"midMacro");e.macros.set("|",u(!1)),i.length&&e.macros.set("\\|",u(!0));var h=e.consumeArg().tokens,f=e.expandTokens([...a,...h,...r]);return e.macros.endGroup(),{tokens:f.reverse(),numArgs:0}},"braketHelper");fe("\\bra@ket",IG(!1));fe("\\bra@set",IG(!0));fe("\\Braket","\\bra@ket{\\left\\langle}{\\,\\middle\\vert\\,}{\\,\\middle\\vert\\,}{\\right\\rangle}");fe("\\Set","\\bra@set{\\left\\{\\:}{\\;\\middle\\vert\\;}{\\;\\middle\\Vert\\;}{\\:\\right\\}}");fe("\\set","\\bra@set{\\{\\,}{\\mid}{}{\\,\\}}");fe("\\angln","{\\angl n}");fe("\\blue","\\textcolor{##6495ed}{#1}");fe("\\orange","\\textcolor{##ffa500}{#1}");fe("\\pink","\\textcolor{##ff00af}{#1}");fe("\\red","\\textcolor{##df0030}{#1}");fe("\\green","\\textcolor{##28ae7b}{#1}");fe("\\gray","\\textcolor{gray}{#1}");fe("\\purple","\\textcolor{##9d38bd}{#1}");fe("\\blueA","\\textcolor{##ccfaff}{#1}");fe("\\blueB","\\textcolor{##80f6ff}{#1}");fe("\\blueC","\\textcolor{##63d9ea}{#1}");fe("\\blueD","\\textcolor{##11accd}{#1}");fe("\\blueE","\\textcolor{##0c7f99}{#1}");fe("\\tealA","\\textcolor{##94fff5}{#1}");fe("\\tealB","\\textcolor{##26edd5}{#1}");fe("\\tealC","\\textcolor{##01d1c1}{#1}");fe("\\tealD","\\textcolor{##01a995}{#1}");fe("\\tealE","\\textcolor{##208170}{#1}");fe("\\greenA","\\textcolor{##b6ffb0}{#1}");fe("\\greenB","\\textcolor{##8af281}{#1}");fe("\\greenC","\\textcolor{##74cf70}{#1}");fe("\\greenD","\\textcolor{##1fab54}{#1}");fe("\\greenE","\\textcolor{##0d923f}{#1}");fe("\\goldA","\\textcolor{##ffd0a9}{#1}");fe("\\goldB","\\textcolor{##ffbb71}{#1}");fe("\\goldC","\\textcolor{##ff9c39}{#1}");fe("\\goldD","\\textcolor{##e07d10}{#1}");fe("\\goldE","\\textcolor{##a75a05}{#1}");fe("\\redA","\\textcolor{##fca9a9}{#1}");fe("\\redB","\\textcolor{##ff8482}{#1}");fe("\\redC","\\textcolor{##f9685d}{#1}");fe("\\redD","\\textcolor{##e84d39}{#1}");fe("\\redE","\\textcolor{##bc2612}{#1}");fe("\\maroonA","\\textcolor{##ffbde0}{#1}");fe("\\maroonB","\\textcolor{##ff92c6}{#1}");fe("\\maroonC","\\textcolor{##ed5fa6}{#1}");fe("\\maroonD","\\textcolor{##ca337c}{#1}");fe("\\maroonE","\\textcolor{##9e034e}{#1}");fe("\\purpleA","\\textcolor{##ddd7ff}{#1}");fe("\\purpleB","\\textcolor{##c6b9fc}{#1}");fe("\\purpleC","\\textcolor{##aa87ff}{#1}");fe("\\purpleD","\\textcolor{##7854ab}{#1}");fe("\\purpleE","\\textcolor{##543b78}{#1}");fe("\\mintA","\\textcolor{##f5f9e8}{#1}");fe("\\mintB","\\textcolor{##edf2df}{#1}");fe("\\mintC","\\textcolor{##e0e5cc}{#1}");fe("\\grayA","\\textcolor{##f6f7f7}{#1}");fe("\\grayB","\\textcolor{##f0f1f2}{#1}");fe("\\grayC","\\textcolor{##e3e5e6}{#1}");fe("\\grayD","\\textcolor{##d6d8da}{#1}");fe("\\grayE","\\textcolor{##babec2}{#1}");fe("\\grayF","\\textcolor{##888d93}{#1}");fe("\\grayG","\\textcolor{##626569}{#1}");fe("\\grayH","\\textcolor{##3b3e40}{#1}");fe("\\grayI","\\textcolor{##21242c}{#1}");fe("\\kaBlue","\\textcolor{##314453}{#1}");fe("\\kaGreen","\\textcolor{##71B307}{#1}");OG={"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0},z7=class{static{o(this,"MacroExpander")}constructor(e,r,n){this.settings=void 0,this.expansionCount=void 0,this.lexer=void 0,this.macros=void 0,this.stack=void 0,this.mode=void 0,this.settings=r,this.expansionCount=0,this.feed(e),this.macros=new $7(F4e,r.macros),this.mode=n,this.stack=[]}feed(e){this.lexer=new k3(e,this.settings)}switchMode(e){this.mode=e}beginGroup(){this.macros.beginGroup()}endGroup(){this.macros.endGroup()}endGroups(){this.macros.endGroups()}future(){return this.stack.length===0&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]}popToken(){return this.future(),this.stack.pop()}pushToken(e){this.stack.push(e)}pushTokens(e){this.stack.push(...e)}scanArgument(e){var r,n,i;if(e){if(this.consumeSpaces(),this.future().text!=="[")return null;r=this.popToken(),{tokens:i,end:n}=this.consumeArg(["]"])}else({tokens:i,start:r,end:n}=this.consumeArg());return this.pushToken(new Co("EOF",n.loc)),this.pushTokens(i),r.range(n,"")}consumeSpaces(){for(;;){var e=this.future();if(e.text===" ")this.stack.pop();else break}}consumeArg(e){var r=[],n=e&&e.length>0;n||this.consumeSpaces();var i=this.future(),a,s=0,l=0;do{if(a=this.popToken(),r.push(a),a.text==="{")++s;else if(a.text==="}"){if(--s,s===-1)throw new gt("Extra }",a)}else if(a.text==="EOF")throw new gt("Unexpected end of input in a macro argument, expected '"+(e&&n?e[l]:"}")+"'",a);if(e&&n)if((s===0||s===1&&e[l]==="{")&&a.text===e[l]){if(++l,l===e.length){r.splice(-l,l);break}}else l=0}while(s!==0||n);return i.text==="{"&&r[r.length-1].text==="}"&&(r.pop(),r.shift()),r.reverse(),{tokens:r,start:i,end:a}}consumeArgs(e,r){if(r){if(r.length!==e+1)throw new gt("The length of delimiters doesn't match the number of args!");for(var n=r[0],i=0;ithis.settings.maxExpand)throw new gt("Too many expansions: infinite loop or need to increase maxExpand setting")}expandOnce(e){var r=this.popToken(),n=r.text,i=r.noexpand?null:this._getExpansion(n);if(i==null||e&&i.unexpandable){if(e&&i==null&&n[0]==="\\"&&!this.isDefined(n))throw new gt("Undefined control sequence: "+n);return this.pushToken(r),!1}this.countExpansion(1);var a=i.tokens,s=this.consumeArgs(i.numArgs,i.delimiters);if(i.numArgs){a=a.slice();for(var l=a.length-1;l>=0;--l){var u=a[l];if(u.text==="#"){if(l===0)throw new gt("Incomplete placeholder at end of macro body",u);if(u=a[--l],u.text==="#")a.splice(l+1,1);else if(/^[1-9]$/.test(u.text))a.splice(l,2,...s[+u.text-1]);else throw new gt("Not a valid argument number",u)}}}return this.pushTokens(a),a.length}expandAfterFuture(){return this.expandOnce(),this.future()}expandNextToken(){for(;;)if(this.expandOnce()===!1){var e=this.stack.pop();return e.treatAsRelax&&(e.text="\\relax"),e}throw new Error}expandMacro(e){return this.macros.has(e)?this.expandTokens([new Co(e)]):void 0}expandTokens(e){var r=[],n=this.stack.length;for(this.pushTokens(e);this.stack.length>n;)if(this.expandOnce(!0)===!1){var i=this.stack.pop();i.treatAsRelax&&(i.noexpand=!1,i.treatAsRelax=!1),r.push(i)}return this.countExpansion(r.length),r}expandMacroAsText(e){var r=this.expandMacro(e);return r&&r.map(n=>n.text).join("")}_getExpansion(e){var r=this.macros.get(e);if(r==null)return r;if(e.length===1){var n=this.lexer.catcodes[e];if(n!=null&&n!==13)return}var i=typeof r=="function"?r(this):r;if(typeof i=="string"){var a=0;if(i.indexOf("#")!==-1)for(var s=i.replace(/##/g,"");s.indexOf("#"+(a+1))!==-1;)++a;for(var l=new k3(i,this.settings),u=[],h=l.lex();h.text!=="EOF";)u.push(h),h=l.lex();u.reverse();var f={tokens:u,numArgs:a};return f}return i}isDefined(e){return this.macros.has(e)||mh.hasOwnProperty(e)||An.math.hasOwnProperty(e)||An.text.hasOwnProperty(e)||OG.hasOwnProperty(e)}isExpandable(e){var r=this.macros.get(e);return r!=null?typeof r=="string"||typeof r=="function"||!r.unexpandable:mh.hasOwnProperty(e)&&!mh[e].primitive}},Gz=/^[โ‚Šโ‚‹โ‚Œโ‚โ‚Žโ‚€โ‚โ‚‚โ‚ƒโ‚„โ‚…โ‚†โ‚‡โ‚ˆโ‚‰โ‚โ‚‘โ‚•แตขโฑผโ‚–โ‚—โ‚˜โ‚™โ‚’โ‚šแตฃโ‚›โ‚œแตคแตฅโ‚“แตฆแตงแตจแตฉแตช]/,p3=Object.freeze({"\u208A":"+","\u208B":"-","\u208C":"=","\u208D":"(","\u208E":")","\u2080":"0","\u2081":"1","\u2082":"2","\u2083":"3","\u2084":"4","\u2085":"5","\u2086":"6","\u2087":"7","\u2088":"8","\u2089":"9","\u2090":"a","\u2091":"e","\u2095":"h","\u1D62":"i","\u2C7C":"j","\u2096":"k","\u2097":"l","\u2098":"m","\u2099":"n","\u2092":"o","\u209A":"p","\u1D63":"r","\u209B":"s","\u209C":"t","\u1D64":"u","\u1D65":"v","\u2093":"x","\u1D66":"\u03B2","\u1D67":"\u03B3","\u1D68":"\u03C1","\u1D69":"\u03D5","\u1D6A":"\u03C7","\u207A":"+","\u207B":"-","\u207C":"=","\u207D":"(","\u207E":")","\u2070":"0","\xB9":"1","\xB2":"2","\xB3":"3","\u2074":"4","\u2075":"5","\u2076":"6","\u2077":"7","\u2078":"8","\u2079":"9","\u1D2C":"A","\u1D2E":"B","\u1D30":"D","\u1D31":"E","\u1D33":"G","\u1D34":"H","\u1D35":"I","\u1D36":"J","\u1D37":"K","\u1D38":"L","\u1D39":"M","\u1D3A":"N","\u1D3C":"O","\u1D3E":"P","\u1D3F":"R","\u1D40":"T","\u1D41":"U","\u2C7D":"V","\u1D42":"W","\u1D43":"a","\u1D47":"b","\u1D9C":"c","\u1D48":"d","\u1D49":"e","\u1DA0":"f","\u1D4D":"g",\u02B0:"h","\u2071":"i",\u02B2:"j","\u1D4F":"k",\u02E1:"l","\u1D50":"m",\u207F:"n","\u1D52":"o","\u1D56":"p",\u02B3:"r",\u02E2:"s","\u1D57":"t","\u1D58":"u","\u1D5B":"v",\u02B7:"w",\u02E3:"x",\u02B8:"y","\u1DBB":"z","\u1D5D":"\u03B2","\u1D5E":"\u03B3","\u1D5F":"\u03B4","\u1D60":"\u03D5","\u1D61":"\u03C7","\u1DBF":"\u03B8"}),_7={"\u0301":{text:"\\'",math:"\\acute"},"\u0300":{text:"\\`",math:"\\grave"},"\u0308":{text:'\\"',math:"\\ddot"},"\u0303":{text:"\\~",math:"\\tilde"},"\u0304":{text:"\\=",math:"\\bar"},"\u0306":{text:"\\u",math:"\\breve"},"\u030C":{text:"\\v",math:"\\check"},"\u0302":{text:"\\^",math:"\\hat"},"\u0307":{text:"\\.",math:"\\dot"},"\u030A":{text:"\\r",math:"\\mathring"},"\u030B":{text:"\\H"},"\u0327":{text:"\\c"}},Vz={\u00E1:"a\u0301",\u00E0:"a\u0300",\u00E4:"a\u0308",\u01DF:"a\u0308\u0304",\u00E3:"a\u0303",\u0101:"a\u0304",\u0103:"a\u0306",\u1EAF:"a\u0306\u0301",\u1EB1:"a\u0306\u0300",\u1EB5:"a\u0306\u0303",\u01CE:"a\u030C",\u00E2:"a\u0302",\u1EA5:"a\u0302\u0301",\u1EA7:"a\u0302\u0300",\u1EAB:"a\u0302\u0303",\u0227:"a\u0307",\u01E1:"a\u0307\u0304",\u00E5:"a\u030A",\u01FB:"a\u030A\u0301",\u1E03:"b\u0307",\u0107:"c\u0301",\u1E09:"c\u0327\u0301",\u010D:"c\u030C",\u0109:"c\u0302",\u010B:"c\u0307",\u00E7:"c\u0327",\u010F:"d\u030C",\u1E0B:"d\u0307",\u1E11:"d\u0327",\u00E9:"e\u0301",\u00E8:"e\u0300",\u00EB:"e\u0308",\u1EBD:"e\u0303",\u0113:"e\u0304",\u1E17:"e\u0304\u0301",\u1E15:"e\u0304\u0300",\u0115:"e\u0306",\u1E1D:"e\u0327\u0306",\u011B:"e\u030C",\u00EA:"e\u0302",\u1EBF:"e\u0302\u0301",\u1EC1:"e\u0302\u0300",\u1EC5:"e\u0302\u0303",\u0117:"e\u0307",\u0229:"e\u0327",\u1E1F:"f\u0307",\u01F5:"g\u0301",\u1E21:"g\u0304",\u011F:"g\u0306",\u01E7:"g\u030C",\u011D:"g\u0302",\u0121:"g\u0307",\u0123:"g\u0327",\u1E27:"h\u0308",\u021F:"h\u030C",\u0125:"h\u0302",\u1E23:"h\u0307",\u1E29:"h\u0327",\u00ED:"i\u0301",\u00EC:"i\u0300",\u00EF:"i\u0308",\u1E2F:"i\u0308\u0301",\u0129:"i\u0303",\u012B:"i\u0304",\u012D:"i\u0306",\u01D0:"i\u030C",\u00EE:"i\u0302",\u01F0:"j\u030C",\u0135:"j\u0302",\u1E31:"k\u0301",\u01E9:"k\u030C",\u0137:"k\u0327",\u013A:"l\u0301",\u013E:"l\u030C",\u013C:"l\u0327",\u1E3F:"m\u0301",\u1E41:"m\u0307",\u0144:"n\u0301",\u01F9:"n\u0300",\u00F1:"n\u0303",\u0148:"n\u030C",\u1E45:"n\u0307",\u0146:"n\u0327",\u00F3:"o\u0301",\u00F2:"o\u0300",\u00F6:"o\u0308",\u022B:"o\u0308\u0304",\u00F5:"o\u0303",\u1E4D:"o\u0303\u0301",\u1E4F:"o\u0303\u0308",\u022D:"o\u0303\u0304",\u014D:"o\u0304",\u1E53:"o\u0304\u0301",\u1E51:"o\u0304\u0300",\u014F:"o\u0306",\u01D2:"o\u030C",\u00F4:"o\u0302",\u1ED1:"o\u0302\u0301",\u1ED3:"o\u0302\u0300",\u1ED7:"o\u0302\u0303",\u022F:"o\u0307",\u0231:"o\u0307\u0304",\u0151:"o\u030B",\u1E55:"p\u0301",\u1E57:"p\u0307",\u0155:"r\u0301",\u0159:"r\u030C",\u1E59:"r\u0307",\u0157:"r\u0327",\u015B:"s\u0301",\u1E65:"s\u0301\u0307",\u0161:"s\u030C",\u1E67:"s\u030C\u0307",\u015D:"s\u0302",\u1E61:"s\u0307",\u015F:"s\u0327",\u1E97:"t\u0308",\u0165:"t\u030C",\u1E6B:"t\u0307",\u0163:"t\u0327",\u00FA:"u\u0301",\u00F9:"u\u0300",\u00FC:"u\u0308",\u01D8:"u\u0308\u0301",\u01DC:"u\u0308\u0300",\u01D6:"u\u0308\u0304",\u01DA:"u\u0308\u030C",\u0169:"u\u0303",\u1E79:"u\u0303\u0301",\u016B:"u\u0304",\u1E7B:"u\u0304\u0308",\u016D:"u\u0306",\u01D4:"u\u030C",\u00FB:"u\u0302",\u016F:"u\u030A",\u0171:"u\u030B",\u1E7D:"v\u0303",\u1E83:"w\u0301",\u1E81:"w\u0300",\u1E85:"w\u0308",\u0175:"w\u0302",\u1E87:"w\u0307",\u1E98:"w\u030A",\u1E8D:"x\u0308",\u1E8B:"x\u0307",\u00FD:"y\u0301",\u1EF3:"y\u0300",\u00FF:"y\u0308",\u1EF9:"y\u0303",\u0233:"y\u0304",\u0177:"y\u0302",\u1E8F:"y\u0307",\u1E99:"y\u030A",\u017A:"z\u0301",\u017E:"z\u030C",\u1E91:"z\u0302",\u017C:"z\u0307",\u00C1:"A\u0301",\u00C0:"A\u0300",\u00C4:"A\u0308",\u01DE:"A\u0308\u0304",\u00C3:"A\u0303",\u0100:"A\u0304",\u0102:"A\u0306",\u1EAE:"A\u0306\u0301",\u1EB0:"A\u0306\u0300",\u1EB4:"A\u0306\u0303",\u01CD:"A\u030C",\u00C2:"A\u0302",\u1EA4:"A\u0302\u0301",\u1EA6:"A\u0302\u0300",\u1EAA:"A\u0302\u0303",\u0226:"A\u0307",\u01E0:"A\u0307\u0304",\u00C5:"A\u030A",\u01FA:"A\u030A\u0301",\u1E02:"B\u0307",\u0106:"C\u0301",\u1E08:"C\u0327\u0301",\u010C:"C\u030C",\u0108:"C\u0302",\u010A:"C\u0307",\u00C7:"C\u0327",\u010E:"D\u030C",\u1E0A:"D\u0307",\u1E10:"D\u0327",\u00C9:"E\u0301",\u00C8:"E\u0300",\u00CB:"E\u0308",\u1EBC:"E\u0303",\u0112:"E\u0304",\u1E16:"E\u0304\u0301",\u1E14:"E\u0304\u0300",\u0114:"E\u0306",\u1E1C:"E\u0327\u0306",\u011A:"E\u030C",\u00CA:"E\u0302",\u1EBE:"E\u0302\u0301",\u1EC0:"E\u0302\u0300",\u1EC4:"E\u0302\u0303",\u0116:"E\u0307",\u0228:"E\u0327",\u1E1E:"F\u0307",\u01F4:"G\u0301",\u1E20:"G\u0304",\u011E:"G\u0306",\u01E6:"G\u030C",\u011C:"G\u0302",\u0120:"G\u0307",\u0122:"G\u0327",\u1E26:"H\u0308",\u021E:"H\u030C",\u0124:"H\u0302",\u1E22:"H\u0307",\u1E28:"H\u0327",\u00CD:"I\u0301",\u00CC:"I\u0300",\u00CF:"I\u0308",\u1E2E:"I\u0308\u0301",\u0128:"I\u0303",\u012A:"I\u0304",\u012C:"I\u0306",\u01CF:"I\u030C",\u00CE:"I\u0302",\u0130:"I\u0307",\u0134:"J\u0302",\u1E30:"K\u0301",\u01E8:"K\u030C",\u0136:"K\u0327",\u0139:"L\u0301",\u013D:"L\u030C",\u013B:"L\u0327",\u1E3E:"M\u0301",\u1E40:"M\u0307",\u0143:"N\u0301",\u01F8:"N\u0300",\u00D1:"N\u0303",\u0147:"N\u030C",\u1E44:"N\u0307",\u0145:"N\u0327",\u00D3:"O\u0301",\u00D2:"O\u0300",\u00D6:"O\u0308",\u022A:"O\u0308\u0304",\u00D5:"O\u0303",\u1E4C:"O\u0303\u0301",\u1E4E:"O\u0303\u0308",\u022C:"O\u0303\u0304",\u014C:"O\u0304",\u1E52:"O\u0304\u0301",\u1E50:"O\u0304\u0300",\u014E:"O\u0306",\u01D1:"O\u030C",\u00D4:"O\u0302",\u1ED0:"O\u0302\u0301",\u1ED2:"O\u0302\u0300",\u1ED6:"O\u0302\u0303",\u022E:"O\u0307",\u0230:"O\u0307\u0304",\u0150:"O\u030B",\u1E54:"P\u0301",\u1E56:"P\u0307",\u0154:"R\u0301",\u0158:"R\u030C",\u1E58:"R\u0307",\u0156:"R\u0327",\u015A:"S\u0301",\u1E64:"S\u0301\u0307",\u0160:"S\u030C",\u1E66:"S\u030C\u0307",\u015C:"S\u0302",\u1E60:"S\u0307",\u015E:"S\u0327",\u0164:"T\u030C",\u1E6A:"T\u0307",\u0162:"T\u0327",\u00DA:"U\u0301",\u00D9:"U\u0300",\u00DC:"U\u0308",\u01D7:"U\u0308\u0301",\u01DB:"U\u0308\u0300",\u01D5:"U\u0308\u0304",\u01D9:"U\u0308\u030C",\u0168:"U\u0303",\u1E78:"U\u0303\u0301",\u016A:"U\u0304",\u1E7A:"U\u0304\u0308",\u016C:"U\u0306",\u01D3:"U\u030C",\u00DB:"U\u0302",\u016E:"U\u030A",\u0170:"U\u030B",\u1E7C:"V\u0303",\u1E82:"W\u0301",\u1E80:"W\u0300",\u1E84:"W\u0308",\u0174:"W\u0302",\u1E86:"W\u0307",\u1E8C:"X\u0308",\u1E8A:"X\u0307",\u00DD:"Y\u0301",\u1EF2:"Y\u0300",\u0178:"Y\u0308",\u1EF8:"Y\u0303",\u0232:"Y\u0304",\u0176:"Y\u0302",\u1E8E:"Y\u0307",\u0179:"Z\u0301",\u017D:"Z\u030C",\u1E90:"Z\u0302",\u017B:"Z\u0307",\u03AC:"\u03B1\u0301",\u1F70:"\u03B1\u0300",\u1FB1:"\u03B1\u0304",\u1FB0:"\u03B1\u0306",\u03AD:"\u03B5\u0301",\u1F72:"\u03B5\u0300",\u03AE:"\u03B7\u0301",\u1F74:"\u03B7\u0300",\u03AF:"\u03B9\u0301",\u1F76:"\u03B9\u0300",\u03CA:"\u03B9\u0308",\u0390:"\u03B9\u0308\u0301",\u1FD2:"\u03B9\u0308\u0300",\u1FD1:"\u03B9\u0304",\u1FD0:"\u03B9\u0306",\u03CC:"\u03BF\u0301",\u1F78:"\u03BF\u0300",\u03CD:"\u03C5\u0301",\u1F7A:"\u03C5\u0300",\u03CB:"\u03C5\u0308",\u03B0:"\u03C5\u0308\u0301",\u1FE2:"\u03C5\u0308\u0300",\u1FE1:"\u03C5\u0304",\u1FE0:"\u03C5\u0306",\u03CE:"\u03C9\u0301",\u1F7C:"\u03C9\u0300",\u038E:"\u03A5\u0301",\u1FEA:"\u03A5\u0300",\u03AB:"\u03A5\u0308",\u1FE9:"\u03A5\u0304",\u1FE8:"\u03A5\u0306",\u038F:"\u03A9\u0301",\u1FFA:"\u03A9\u0300"},E3=class t{static{o(this,"Parser")}constructor(e,r){this.mode=void 0,this.gullet=void 0,this.settings=void 0,this.leftrightDepth=void 0,this.nextToken=void 0,this.mode="math",this.gullet=new z7(e,r,this.mode),this.settings=r,this.leftrightDepth=0}expect(e,r){if(r===void 0&&(r=!0),this.fetch().text!==e)throw new gt("Expected '"+e+"', got '"+this.fetch().text+"'",this.fetch());r&&this.consume()}consume(){this.nextToken=null}fetch(){return this.nextToken==null&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken}switchMode(e){this.mode=e,this.gullet.switchMode(e)}parse(){this.settings.globalGroup||this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");try{var e=this.parseExpression(!1);return this.expect("EOF"),this.settings.globalGroup||this.gullet.endGroup(),e}finally{this.gullet.endGroups()}}subparse(e){var r=this.nextToken;this.consume(),this.gullet.pushToken(new Co("}")),this.gullet.pushTokens(e);var n=this.parseExpression(!1);return this.expect("}"),this.nextToken=r,n}parseExpression(e,r){for(var n=[];;){this.mode==="math"&&this.consumeSpaces();var i=this.fetch();if(t.endOfExpression.indexOf(i.text)!==-1||r&&i.text===r||e&&mh[i.text]&&mh[i.text].infix)break;var a=this.parseAtom(r);if(a){if(a.type==="internal")continue}else break;n.push(a)}return this.mode==="text"&&this.formLigatures(n),this.handleInfixNodes(n)}handleInfixNodes(e){for(var r=-1,n,i=0;i=0&&this.settings.reportNonstrict("unicodeTextInMathMode",'Latin-1/Unicode text character "'+r[0]+'" used in math mode',e);var l=An[this.mode][r].group,u=Ks.range(e),h;if(Dbe.hasOwnProperty(l)){var f=l;h={type:"atom",mode:this.mode,family:f,loc:u,text:r}}else h={type:l,mode:this.mode,loc:u,text:r};s=h}else if(r.charCodeAt(0)>=128)this.settings.strict&&(Hz(r.charCodeAt(0))?this.mode==="math"&&this.settings.reportNonstrict("unicodeTextInMathMode",'Unicode text character "'+r[0]+'" used in math mode',e):this.settings.reportNonstrict("unknownSymbol",'Unrecognized Unicode character "'+r[0]+'"'+(" ("+r.charCodeAt(0)+")"),e)),s={type:"textord",mode:"text",loc:Ks.range(e),text:r};else return null;if(this.consume(),a)for(var d=0;d{e instanceof Element&&e.tagName==="A"&&e.hasAttribute("target")&&e.setAttribute(t,e.getAttribute("target")??"")}),dh.addHook("afterSanitizeAttributes",e=>{e instanceof Element&&e.tagName==="A"&&e.hasAttribute(t)&&(e.setAttribute("target",e.getAttribute(t)??""),e.removeAttribute(t),e.getAttribute("target")==="_blank"&&e.setAttribute("rel","noopener"))})}var cd,U4e,H4e,VG,zG,Tr,q4e,Y4e,X4e,j4e,UG,pu,fr,K4e,Q4e,rc,aA,Z4e,J4e,GG,R3,pi,ud,xh,Ze,dr=N(()=>{"use strict";g7();cd=//gi,U4e=o(t=>t?UG(t).replace(/\\n/g,"#br#").split("#br#"):[""],"getRows"),H4e=(()=>{let t=!1;return()=>{t||(W4e(),t=!0)}})();o(W4e,"setupDompurifyHooks");VG=o(t=>(H4e(),dh.sanitize(t)),"removeScript"),zG=o((t,e)=>{if(e.flowchart?.htmlLabels!==!1){let r=e.securityLevel;r==="antiscript"||r==="strict"?t=VG(t):r!=="loose"&&(t=UG(t),t=t.replace(//g,">"),t=t.replace(/=/g,"="),t=j4e(t))}return t},"sanitizeMore"),Tr=o((t,e)=>t&&(e.dompurifyConfig?t=dh.sanitize(zG(t,e),e.dompurifyConfig).toString():t=dh.sanitize(zG(t,e),{FORBID_TAGS:["style"]}).toString(),t),"sanitizeText"),q4e=o((t,e)=>typeof t=="string"?Tr(t,e):t.flat().map(r=>Tr(r,e)),"sanitizeTextOrArray"),Y4e=o(t=>cd.test(t),"hasBreaks"),X4e=o(t=>t.split(cd),"splitBreaks"),j4e=o(t=>t.replace(/#br#/g,"
"),"placeholderToBreak"),UG=o(t=>t.replace(cd,"#br#"),"breakToPlaceholder"),pu=o(t=>{let e="";return t&&(e=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,e=CSS.escape(e)),e},"getUrl"),fr=o(t=>!(t===!1||["false","null","0"].includes(String(t).trim().toLowerCase())),"evaluate"),K4e=o(function(...t){let e=t.filter(r=>!isNaN(r));return Math.max(...e)},"getMax"),Q4e=o(function(...t){let e=t.filter(r=>!isNaN(r));return Math.min(...e)},"getMin"),rc=o(function(t){let e=t.split(/(,)/),r=[];for(let n=0;n0&&n+1Math.max(0,t.split(e).length-1),"countOccurrence"),Z4e=o((t,e)=>{let r=aA(t,"~"),n=aA(e,"~");return r===1&&n===1},"shouldCombineSets"),J4e=o(t=>{let e=aA(t,"~"),r=!1;if(e<=1)return t;e%2!==0&&t.startsWith("~")&&(t=t.substring(1),r=!0);let n=[...t],i=n.indexOf("~"),a=n.lastIndexOf("~");for(;i!==-1&&a!==-1&&i!==a;)n[i]="<",n[a]=">",i=n.indexOf("~"),a=n.lastIndexOf("~");return r&&n.unshift("~"),n.join("")},"processSet"),GG=o(()=>window.MathMLElement!==void 0,"isMathMLSupported"),R3=/\$\$(.*)\$\$/g,pi=o(t=>(t.match(R3)?.length??0)>0,"hasKatex"),ud=o(async(t,e)=>{t=await xh(t,e);let r=document.createElement("div");r.innerHTML=t,r.id="katex-temp",r.style.visibility="hidden",r.style.position="absolute",r.style.top="0",document.querySelector("body")?.insertAdjacentElement("beforeend",r);let i={width:r.clientWidth,height:r.clientHeight};return r.remove(),i},"calculateMathMLDimensions"),xh=o(async(t,e)=>{if(!pi(t))return t;if(!(GG()||e.legacyMathML||e.forceLegacyMathML))return t.replace(R3,"MathML is unsupported in this environment.");{let{default:r}=await Promise.resolve().then(()=>($G(),FG)),n=e.forceLegacyMathML||!GG()&&e.legacyMathML?"htmlAndMathml":"mathml";return t.split(cd).map(i=>pi(i)?`
${i}
`:`
${i}
`).join("").replace(R3,(i,a)=>r.renderToString(a,{throwOnError:!0,displayMode:!0,output:n}).replace(/\n/g," ").replace(//g,""))}return t.replace(R3,"Katex is not supported in @mermaid-js/tiny. Please use the full mermaid library.")},"renderKatex"),Ze={getRows:U4e,sanitizeText:Tr,sanitizeTextOrArray:q4e,hasBreaks:Y4e,splitBreaks:X4e,lineBreakRegex:cd,removeScript:VG,getUrl:pu,evaluate:fr,getMax:K4e,getMin:Q4e}});var e3e,t3e,vn,_o,Si=N(()=>{"use strict";vt();e3e=o(function(t,e){for(let r of e)t.attr(r[0],r[1])},"d3Attrs"),t3e=o(function(t,e,r){let n=new Map;return r?(n.set("width","100%"),n.set("style",`max-width: ${e}px;`)):(n.set("height",t),n.set("width",e)),n},"calculateSvgSizeAttrs"),vn=o(function(t,e,r,n){let i=t3e(e,r,n);e3e(t,i)},"configureSvgSize"),_o=o(function(t,e,r,n){let i=e.node().getBBox(),a=i.width,s=i.height;X.info(`SVG bounds: ${a}x${s}`,i);let l=0,u=0;X.info(`Graph bounds: ${l}x${u}`,t),l=a+r*2,u=s+r*2,X.info(`Calculated bounds: ${l}x${u}`),vn(e,u,l,n);let h=`${i.x-r} ${i.y-r} ${i.width+2*r} ${i.height+2*r}`;e.attr("viewBox",h)},"setupGraphViewbox")});var N3,r3e,HG,WG,sA=N(()=>{"use strict";vt();N3={},r3e=o((t,e,r)=>{let n="";return t in N3&&N3[t]?n=N3[t](r):X.warn(`No theme found for ${t}`),` & { +?)[ \r ]*`,J7="[\u0300-\u036F]",o5e=new RegExp(J7+"+$"),l5e="("+gV+"+)|"+(s5e+"|")+"([!-\\[\\]-\u2027\u202A-\uD7FF\uF900-\uFFFF]"+(J7+"*")+"|[\uD800-\uDBFF][\uDC00-\uDFFF]"+(J7+"*")+"|\\\\verb\\*([^]).*?\\4|\\\\verb([^*a-zA-Z]).*?\\5"+("|"+a5e)+("|"+i5e+")"),A3=class{static{o(this,"Lexer")}constructor(e,r){this.input=void 0,this.settings=void 0,this.tokenRegex=void 0,this.catcodes=void 0,this.input=e,this.settings=r,this.tokenRegex=new RegExp(l5e,"g"),this.catcodes={"%":14,"~":13}}setCatcode(e,r){this.catcodes[e]=r}lex(){var e=this.input,r=this.tokenRegex.lastIndex;if(r===e.length)return new _o("EOF",new Qs(this,r,r));var n=this.tokenRegex.exec(e);if(n===null||n.index!==r)throw new pt("Unexpected character: '"+e[r]+"'",new _o(e[r],new Qs(this,r,r+1)));var i=n[6]||n[3]||(n[2]?"\\ ":" ");if(this.catcodes[i]===14){var a=e.indexOf(` +`,this.tokenRegex.lastIndex);return a===-1?(this.tokenRegex.lastIndex=e.length,this.settings.reportNonstrict("commentAtEnd","% comment has no terminating newline; LaTeX would fail because of commenting the end of math mode (e.g. $)")):this.tokenRegex.lastIndex=a+1,this.lex()}return new _o(i,new Qs(this,r,this.tokenRegex.lastIndex))}},eA=class{static{o(this,"Namespace")}constructor(e,r){e===void 0&&(e={}),r===void 0&&(r={}),this.current=void 0,this.builtins=void 0,this.undefStack=void 0,this.current=r,this.builtins=e,this.undefStack=[]}beginGroup(){this.undefStack.push({})}endGroup(){if(this.undefStack.length===0)throw new pt("Unbalanced namespace destruction: attempt to pop global namespace; please report this as a bug");var e=this.undefStack.pop();for(var r in e)e.hasOwnProperty(r)&&(e[r]==null?delete this.current[r]:this.current[r]=e[r])}endGroups(){for(;this.undefStack.length>0;)this.endGroup()}has(e){return this.current.hasOwnProperty(e)||this.builtins.hasOwnProperty(e)}get(e){return this.current.hasOwnProperty(e)?this.current[e]:this.builtins[e]}set(e,r,n){if(n===void 0&&(n=!1),n){for(var i=0;i0&&(this.undefStack[this.undefStack.length-1][e]=r)}else{var a=this.undefStack[this.undefStack.length-1];a&&!a.hasOwnProperty(e)&&(a[e]=this.current[e])}r==null?delete this.current[e]:this.current[e]=r}},c5e=aV;fe("\\noexpand",function(t){var e=t.popToken();return t.isExpandable(e.text)&&(e.noexpand=!0,e.treatAsRelax=!0),{tokens:[e],numArgs:0}});fe("\\expandafter",function(t){var e=t.popToken();return t.expandOnce(!0),{tokens:[e],numArgs:0}});fe("\\@firstoftwo",function(t){var e=t.consumeArgs(2);return{tokens:e[0],numArgs:0}});fe("\\@secondoftwo",function(t){var e=t.consumeArgs(2);return{tokens:e[1],numArgs:0}});fe("\\@ifnextchar",function(t){var e=t.consumeArgs(3);t.consumeSpaces();var r=t.future();return e[0].length===1&&e[0][0].text===r.text?{tokens:e[1],numArgs:0}:{tokens:e[2],numArgs:0}});fe("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}");fe("\\TextOrMath",function(t){var e=t.consumeArgs(2);return t.mode==="text"?{tokens:e[0],numArgs:0}:{tokens:e[1],numArgs:0}});wG={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15};fe("\\char",function(t){var e=t.popToken(),r,n="";if(e.text==="'")r=8,e=t.popToken();else if(e.text==='"')r=16,e=t.popToken();else if(e.text==="`")if(e=t.popToken(),e.text[0]==="\\")n=e.text.charCodeAt(1);else{if(e.text==="EOF")throw new pt("\\char` missing argument");n=e.text.charCodeAt(0)}else r=10;if(r){if(n=wG[e.text],n==null||n>=r)throw new pt("Invalid base-"+r+" digit "+e.text);for(var i;(i=wG[t.future().text])!=null&&i{var i=t.consumeArg().tokens;if(i.length!==1)throw new pt("\\newcommand's first argument must be a macro name");var a=i[0].text,s=t.isDefined(a);if(s&&!e)throw new pt("\\newcommand{"+a+"} attempting to redefine "+(a+"; use \\renewcommand"));if(!s&&!r)throw new pt("\\renewcommand{"+a+"} when command "+a+" does not yet exist; use \\newcommand");var l=0;if(i=t.consumeArg().tokens,i.length===1&&i[0].text==="["){for(var u="",h=t.expandNextToken();h.text!=="]"&&h.text!=="EOF";)u+=h.text,h=t.expandNextToken();if(!u.match(/^\s*[0-9]+\s*$/))throw new pt("Invalid number of arguments: "+u);l=parseInt(u),i=t.consumeArg().tokens}return s&&n||t.macros.set(a,{tokens:i,numArgs:l}),""},"newcommand");fe("\\newcommand",t=>gA(t,!1,!0,!1));fe("\\renewcommand",t=>gA(t,!0,!1,!1));fe("\\providecommand",t=>gA(t,!0,!0,!0));fe("\\message",t=>{var e=t.consumeArgs(1)[0];return console.log(e.reverse().map(r=>r.text).join("")),""});fe("\\errmessage",t=>{var e=t.consumeArgs(1)[0];return console.error(e.reverse().map(r=>r.text).join("")),""});fe("\\show",t=>{var e=t.popToken(),r=e.text;return console.log(e,t.macros.get(r),yh[r],An.math[r],An.text[r]),""});fe("\\bgroup","{");fe("\\egroup","}");fe("~","\\nobreakspace");fe("\\lq","`");fe("\\rq","'");fe("\\aa","\\r a");fe("\\AA","\\r A");fe("\\textcopyright","\\html@mathml{\\textcircled{c}}{\\char`\xA9}");fe("\\copyright","\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}");fe("\\textregistered","\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`\xAE}");fe("\u212C","\\mathscr{B}");fe("\u2130","\\mathscr{E}");fe("\u2131","\\mathscr{F}");fe("\u210B","\\mathscr{H}");fe("\u2110","\\mathscr{I}");fe("\u2112","\\mathscr{L}");fe("\u2133","\\mathscr{M}");fe("\u211B","\\mathscr{R}");fe("\u212D","\\mathfrak{C}");fe("\u210C","\\mathfrak{H}");fe("\u2128","\\mathfrak{Z}");fe("\\Bbbk","\\Bbb{k}");fe("\xB7","\\cdotp");fe("\\llap","\\mathllap{\\textrm{#1}}");fe("\\rlap","\\mathrlap{\\textrm{#1}}");fe("\\clap","\\mathclap{\\textrm{#1}}");fe("\\mathstrut","\\vphantom{(}");fe("\\underbar","\\underline{\\text{#1}}");fe("\\not",'\\html@mathml{\\mathrel{\\mathrlap\\@not}}{\\char"338}');fe("\\neq","\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`\u2260}}");fe("\\ne","\\neq");fe("\u2260","\\neq");fe("\\notin","\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}{\\mathrel{\\char`\u2209}}");fe("\u2209","\\notin");fe("\u2258","\\html@mathml{\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}}{\\mathrel{\\char`\u2258}}");fe("\u2259","\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`\u2258}}");fe("\u225A","\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`\u225A}}");fe("\u225B","\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}{\\mathrel{\\char`\u225B}}");fe("\u225D","\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}{\\mathrel{\\char`\u225D}}");fe("\u225E","\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}{\\mathrel{\\char`\u225E}}");fe("\u225F","\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`\u225F}}");fe("\u27C2","\\perp");fe("\u203C","\\mathclose{!\\mkern-0.8mu!}");fe("\u220C","\\notni");fe("\u231C","\\ulcorner");fe("\u231D","\\urcorner");fe("\u231E","\\llcorner");fe("\u231F","\\lrcorner");fe("\xA9","\\copyright");fe("\xAE","\\textregistered");fe("\uFE0F","\\textregistered");fe("\\ulcorner",'\\html@mathml{\\@ulcorner}{\\mathop{\\char"231c}}');fe("\\urcorner",'\\html@mathml{\\@urcorner}{\\mathop{\\char"231d}}');fe("\\llcorner",'\\html@mathml{\\@llcorner}{\\mathop{\\char"231e}}');fe("\\lrcorner",'\\html@mathml{\\@lrcorner}{\\mathop{\\char"231f}}');fe("\\vdots","{\\varvdots\\rule{0pt}{15pt}}");fe("\u22EE","\\vdots");fe("\\varGamma","\\mathit{\\Gamma}");fe("\\varDelta","\\mathit{\\Delta}");fe("\\varTheta","\\mathit{\\Theta}");fe("\\varLambda","\\mathit{\\Lambda}");fe("\\varXi","\\mathit{\\Xi}");fe("\\varPi","\\mathit{\\Pi}");fe("\\varSigma","\\mathit{\\Sigma}");fe("\\varUpsilon","\\mathit{\\Upsilon}");fe("\\varPhi","\\mathit{\\Phi}");fe("\\varPsi","\\mathit{\\Psi}");fe("\\varOmega","\\mathit{\\Omega}");fe("\\substack","\\begin{subarray}{c}#1\\end{subarray}");fe("\\colon","\\nobreak\\mskip2mu\\mathpunct{}\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu\\relax");fe("\\boxed","\\fbox{$\\displaystyle{#1}$}");fe("\\iff","\\DOTSB\\;\\Longleftrightarrow\\;");fe("\\implies","\\DOTSB\\;\\Longrightarrow\\;");fe("\\impliedby","\\DOTSB\\;\\Longleftarrow\\;");fe("\\dddot","{\\overset{\\raisebox{-0.1ex}{\\normalsize ...}}{#1}}");fe("\\ddddot","{\\overset{\\raisebox{-0.1ex}{\\normalsize ....}}{#1}}");kG={",":"\\dotsc","\\not":"\\dotsb","+":"\\dotsb","=":"\\dotsb","<":"\\dotsb",">":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcup":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"};fe("\\dots",function(t){var e="\\dotso",r=t.expandAfterFuture().text;return r in kG?e=kG[r]:(r.slice(0,4)==="\\not"||r in An.math&&Jt.contains(["bin","rel"],An.math[r].group))&&(e="\\dotsb"),e});yA={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};fe("\\dotso",function(t){var e=t.future().text;return e in yA?"\\ldots\\,":"\\ldots"});fe("\\dotsc",function(t){var e=t.future().text;return e in yA&&e!==","?"\\ldots\\,":"\\ldots"});fe("\\cdots",function(t){var e=t.future().text;return e in yA?"\\@cdots\\,":"\\@cdots"});fe("\\dotsb","\\cdots");fe("\\dotsm","\\cdots");fe("\\dotsi","\\!\\cdots");fe("\\dotsx","\\ldots\\,");fe("\\DOTSI","\\relax");fe("\\DOTSB","\\relax");fe("\\DOTSX","\\relax");fe("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax");fe("\\,","\\tmspace+{3mu}{.1667em}");fe("\\thinspace","\\,");fe("\\>","\\mskip{4mu}");fe("\\:","\\tmspace+{4mu}{.2222em}");fe("\\medspace","\\:");fe("\\;","\\tmspace+{5mu}{.2777em}");fe("\\thickspace","\\;");fe("\\!","\\tmspace-{3mu}{.1667em}");fe("\\negthinspace","\\!");fe("\\negmedspace","\\tmspace-{4mu}{.2222em}");fe("\\negthickspace","\\tmspace-{5mu}{.277em}");fe("\\enspace","\\kern.5em ");fe("\\enskip","\\hskip.5em\\relax");fe("\\quad","\\hskip1em\\relax");fe("\\qquad","\\hskip2em\\relax");fe("\\tag","\\@ifstar\\tag@literal\\tag@paren");fe("\\tag@paren","\\tag@literal{({#1})}");fe("\\tag@literal",t=>{if(t.macros.get("\\df@tag"))throw new pt("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"});fe("\\bmod","\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}");fe("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)");fe("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}");fe("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1");fe("\\newline","\\\\\\relax");fe("\\TeX","\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}");yV=Et(Jl["Main-Regular"][84][1]-.7*Jl["Main-Regular"][65][1]);fe("\\LaTeX","\\textrm{\\html@mathml{"+("L\\kern-.36em\\raisebox{"+yV+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{LaTeX}}");fe("\\KaTeX","\\textrm{\\html@mathml{"+("K\\kern-.17em\\raisebox{"+yV+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{KaTeX}}");fe("\\hspace","\\@ifstar\\@hspacer\\@hspace");fe("\\@hspace","\\hskip #1\\relax");fe("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax");fe("\\ordinarycolon",":");fe("\\vcentcolon","\\mathrel{\\mathop\\ordinarycolon}");fe("\\dblcolon",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}');fe("\\coloneqq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}');fe("\\Coloneqq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}');fe("\\coloneq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}');fe("\\Coloneq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}');fe("\\eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}');fe("\\Eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}');fe("\\eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}');fe("\\Eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}');fe("\\colonapprox",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}');fe("\\Colonapprox",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}');fe("\\colonsim",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}');fe("\\Colonsim",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}');fe("\u2237","\\dblcolon");fe("\u2239","\\eqcolon");fe("\u2254","\\coloneqq");fe("\u2255","\\eqqcolon");fe("\u2A74","\\Coloneqq");fe("\\ratio","\\vcentcolon");fe("\\coloncolon","\\dblcolon");fe("\\colonequals","\\coloneqq");fe("\\coloncolonequals","\\Coloneqq");fe("\\equalscolon","\\eqqcolon");fe("\\equalscoloncolon","\\Eqqcolon");fe("\\colonminus","\\coloneq");fe("\\coloncolonminus","\\Coloneq");fe("\\minuscolon","\\eqcolon");fe("\\minuscoloncolon","\\Eqcolon");fe("\\coloncolonapprox","\\Colonapprox");fe("\\coloncolonsim","\\Colonsim");fe("\\simcolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}");fe("\\simcoloncolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}");fe("\\approxcolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}");fe("\\approxcoloncolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}");fe("\\notni","\\html@mathml{\\not\\ni}{\\mathrel{\\char`\u220C}}");fe("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}");fe("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}");fe("\\injlim","\\DOTSB\\operatorname*{inj\\,lim}");fe("\\projlim","\\DOTSB\\operatorname*{proj\\,lim}");fe("\\varlimsup","\\DOTSB\\operatorname*{\\overline{lim}}");fe("\\varliminf","\\DOTSB\\operatorname*{\\underline{lim}}");fe("\\varinjlim","\\DOTSB\\operatorname*{\\underrightarrow{lim}}");fe("\\varprojlim","\\DOTSB\\operatorname*{\\underleftarrow{lim}}");fe("\\gvertneqq","\\html@mathml{\\@gvertneqq}{\u2269}");fe("\\lvertneqq","\\html@mathml{\\@lvertneqq}{\u2268}");fe("\\ngeqq","\\html@mathml{\\@ngeqq}{\u2271}");fe("\\ngeqslant","\\html@mathml{\\@ngeqslant}{\u2271}");fe("\\nleqq","\\html@mathml{\\@nleqq}{\u2270}");fe("\\nleqslant","\\html@mathml{\\@nleqslant}{\u2270}");fe("\\nshortmid","\\html@mathml{\\@nshortmid}{\u2224}");fe("\\nshortparallel","\\html@mathml{\\@nshortparallel}{\u2226}");fe("\\nsubseteqq","\\html@mathml{\\@nsubseteqq}{\u2288}");fe("\\nsupseteqq","\\html@mathml{\\@nsupseteqq}{\u2289}");fe("\\varsubsetneq","\\html@mathml{\\@varsubsetneq}{\u228A}");fe("\\varsubsetneqq","\\html@mathml{\\@varsubsetneqq}{\u2ACB}");fe("\\varsupsetneq","\\html@mathml{\\@varsupsetneq}{\u228B}");fe("\\varsupsetneqq","\\html@mathml{\\@varsupsetneqq}{\u2ACC}");fe("\\imath","\\html@mathml{\\@imath}{\u0131}");fe("\\jmath","\\html@mathml{\\@jmath}{\u0237}");fe("\\llbracket","\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`\u27E6}}");fe("\\rrbracket","\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`\u27E7}}");fe("\u27E6","\\llbracket");fe("\u27E7","\\rrbracket");fe("\\lBrace","\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`\u2983}}");fe("\\rBrace","\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`\u2984}}");fe("\u2983","\\lBrace");fe("\u2984","\\rBrace");fe("\\minuso","\\mathbin{\\html@mathml{{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}{\\char`\u29B5}}");fe("\u29B5","\\minuso");fe("\\darr","\\downarrow");fe("\\dArr","\\Downarrow");fe("\\Darr","\\Downarrow");fe("\\lang","\\langle");fe("\\rang","\\rangle");fe("\\uarr","\\uparrow");fe("\\uArr","\\Uparrow");fe("\\Uarr","\\Uparrow");fe("\\N","\\mathbb{N}");fe("\\R","\\mathbb{R}");fe("\\Z","\\mathbb{Z}");fe("\\alef","\\aleph");fe("\\alefsym","\\aleph");fe("\\Alpha","\\mathrm{A}");fe("\\Beta","\\mathrm{B}");fe("\\bull","\\bullet");fe("\\Chi","\\mathrm{X}");fe("\\clubs","\\clubsuit");fe("\\cnums","\\mathbb{C}");fe("\\Complex","\\mathbb{C}");fe("\\Dagger","\\ddagger");fe("\\diamonds","\\diamondsuit");fe("\\empty","\\emptyset");fe("\\Epsilon","\\mathrm{E}");fe("\\Eta","\\mathrm{H}");fe("\\exist","\\exists");fe("\\harr","\\leftrightarrow");fe("\\hArr","\\Leftrightarrow");fe("\\Harr","\\Leftrightarrow");fe("\\hearts","\\heartsuit");fe("\\image","\\Im");fe("\\infin","\\infty");fe("\\Iota","\\mathrm{I}");fe("\\isin","\\in");fe("\\Kappa","\\mathrm{K}");fe("\\larr","\\leftarrow");fe("\\lArr","\\Leftarrow");fe("\\Larr","\\Leftarrow");fe("\\lrarr","\\leftrightarrow");fe("\\lrArr","\\Leftrightarrow");fe("\\Lrarr","\\Leftrightarrow");fe("\\Mu","\\mathrm{M}");fe("\\natnums","\\mathbb{N}");fe("\\Nu","\\mathrm{N}");fe("\\Omicron","\\mathrm{O}");fe("\\plusmn","\\pm");fe("\\rarr","\\rightarrow");fe("\\rArr","\\Rightarrow");fe("\\Rarr","\\Rightarrow");fe("\\real","\\Re");fe("\\reals","\\mathbb{R}");fe("\\Reals","\\mathbb{R}");fe("\\Rho","\\mathrm{P}");fe("\\sdot","\\cdot");fe("\\sect","\\S");fe("\\spades","\\spadesuit");fe("\\sub","\\subset");fe("\\sube","\\subseteq");fe("\\supe","\\supseteq");fe("\\Tau","\\mathrm{T}");fe("\\thetasym","\\vartheta");fe("\\weierp","\\wp");fe("\\Zeta","\\mathrm{Z}");fe("\\argmin","\\DOTSB\\operatorname*{arg\\,min}");fe("\\argmax","\\DOTSB\\operatorname*{arg\\,max}");fe("\\plim","\\DOTSB\\mathop{\\operatorname{plim}}\\limits");fe("\\bra","\\mathinner{\\langle{#1}|}");fe("\\ket","\\mathinner{|{#1}\\rangle}");fe("\\braket","\\mathinner{\\langle{#1}\\rangle}");fe("\\Bra","\\left\\langle#1\\right|");fe("\\Ket","\\left|#1\\right\\rangle");vV=o(t=>e=>{var r=e.consumeArg().tokens,n=e.consumeArg().tokens,i=e.consumeArg().tokens,a=e.consumeArg().tokens,s=e.macros.get("|"),l=e.macros.get("\\|");e.macros.beginGroup();var u=o(d=>p=>{t&&(p.macros.set("|",s),i.length&&p.macros.set("\\|",l));var m=d;if(!d&&i.length){var g=p.future();g.text==="|"&&(p.popToken(),m=!0)}return{tokens:m?i:n,numArgs:0}},"midMacro");e.macros.set("|",u(!1)),i.length&&e.macros.set("\\|",u(!0));var h=e.consumeArg().tokens,f=e.expandTokens([...a,...h,...r]);return e.macros.endGroup(),{tokens:f.reverse(),numArgs:0}},"braketHelper");fe("\\bra@ket",vV(!1));fe("\\bra@set",vV(!0));fe("\\Braket","\\bra@ket{\\left\\langle}{\\,\\middle\\vert\\,}{\\,\\middle\\vert\\,}{\\right\\rangle}");fe("\\Set","\\bra@set{\\left\\{\\:}{\\;\\middle\\vert\\;}{\\;\\middle\\Vert\\;}{\\:\\right\\}}");fe("\\set","\\bra@set{\\{\\,}{\\mid}{}{\\,\\}}");fe("\\angln","{\\angl n}");fe("\\blue","\\textcolor{##6495ed}{#1}");fe("\\orange","\\textcolor{##ffa500}{#1}");fe("\\pink","\\textcolor{##ff00af}{#1}");fe("\\red","\\textcolor{##df0030}{#1}");fe("\\green","\\textcolor{##28ae7b}{#1}");fe("\\gray","\\textcolor{gray}{#1}");fe("\\purple","\\textcolor{##9d38bd}{#1}");fe("\\blueA","\\textcolor{##ccfaff}{#1}");fe("\\blueB","\\textcolor{##80f6ff}{#1}");fe("\\blueC","\\textcolor{##63d9ea}{#1}");fe("\\blueD","\\textcolor{##11accd}{#1}");fe("\\blueE","\\textcolor{##0c7f99}{#1}");fe("\\tealA","\\textcolor{##94fff5}{#1}");fe("\\tealB","\\textcolor{##26edd5}{#1}");fe("\\tealC","\\textcolor{##01d1c1}{#1}");fe("\\tealD","\\textcolor{##01a995}{#1}");fe("\\tealE","\\textcolor{##208170}{#1}");fe("\\greenA","\\textcolor{##b6ffb0}{#1}");fe("\\greenB","\\textcolor{##8af281}{#1}");fe("\\greenC","\\textcolor{##74cf70}{#1}");fe("\\greenD","\\textcolor{##1fab54}{#1}");fe("\\greenE","\\textcolor{##0d923f}{#1}");fe("\\goldA","\\textcolor{##ffd0a9}{#1}");fe("\\goldB","\\textcolor{##ffbb71}{#1}");fe("\\goldC","\\textcolor{##ff9c39}{#1}");fe("\\goldD","\\textcolor{##e07d10}{#1}");fe("\\goldE","\\textcolor{##a75a05}{#1}");fe("\\redA","\\textcolor{##fca9a9}{#1}");fe("\\redB","\\textcolor{##ff8482}{#1}");fe("\\redC","\\textcolor{##f9685d}{#1}");fe("\\redD","\\textcolor{##e84d39}{#1}");fe("\\redE","\\textcolor{##bc2612}{#1}");fe("\\maroonA","\\textcolor{##ffbde0}{#1}");fe("\\maroonB","\\textcolor{##ff92c6}{#1}");fe("\\maroonC","\\textcolor{##ed5fa6}{#1}");fe("\\maroonD","\\textcolor{##ca337c}{#1}");fe("\\maroonE","\\textcolor{##9e034e}{#1}");fe("\\purpleA","\\textcolor{##ddd7ff}{#1}");fe("\\purpleB","\\textcolor{##c6b9fc}{#1}");fe("\\purpleC","\\textcolor{##aa87ff}{#1}");fe("\\purpleD","\\textcolor{##7854ab}{#1}");fe("\\purpleE","\\textcolor{##543b78}{#1}");fe("\\mintA","\\textcolor{##f5f9e8}{#1}");fe("\\mintB","\\textcolor{##edf2df}{#1}");fe("\\mintC","\\textcolor{##e0e5cc}{#1}");fe("\\grayA","\\textcolor{##f6f7f7}{#1}");fe("\\grayB","\\textcolor{##f0f1f2}{#1}");fe("\\grayC","\\textcolor{##e3e5e6}{#1}");fe("\\grayD","\\textcolor{##d6d8da}{#1}");fe("\\grayE","\\textcolor{##babec2}{#1}");fe("\\grayF","\\textcolor{##888d93}{#1}");fe("\\grayG","\\textcolor{##626569}{#1}");fe("\\grayH","\\textcolor{##3b3e40}{#1}");fe("\\grayI","\\textcolor{##21242c}{#1}");fe("\\kaBlue","\\textcolor{##314453}{#1}");fe("\\kaGreen","\\textcolor{##71B307}{#1}");xV={"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0},tA=class{static{o(this,"MacroExpander")}constructor(e,r,n){this.settings=void 0,this.expansionCount=void 0,this.lexer=void 0,this.macros=void 0,this.stack=void 0,this.mode=void 0,this.settings=r,this.expansionCount=0,this.feed(e),this.macros=new eA(c5e,r.macros),this.mode=n,this.stack=[]}feed(e){this.lexer=new A3(e,this.settings)}switchMode(e){this.mode=e}beginGroup(){this.macros.beginGroup()}endGroup(){this.macros.endGroup()}endGroups(){this.macros.endGroups()}future(){return this.stack.length===0&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]}popToken(){return this.future(),this.stack.pop()}pushToken(e){this.stack.push(e)}pushTokens(e){this.stack.push(...e)}scanArgument(e){var r,n,i;if(e){if(this.consumeSpaces(),this.future().text!=="[")return null;r=this.popToken(),{tokens:i,end:n}=this.consumeArg(["]"])}else({tokens:i,start:r,end:n}=this.consumeArg());return this.pushToken(new _o("EOF",n.loc)),this.pushTokens(i),r.range(n,"")}consumeSpaces(){for(;;){var e=this.future();if(e.text===" ")this.stack.pop();else break}}consumeArg(e){var r=[],n=e&&e.length>0;n||this.consumeSpaces();var i=this.future(),a,s=0,l=0;do{if(a=this.popToken(),r.push(a),a.text==="{")++s;else if(a.text==="}"){if(--s,s===-1)throw new pt("Extra }",a)}else if(a.text==="EOF")throw new pt("Unexpected end of input in a macro argument, expected '"+(e&&n?e[l]:"}")+"'",a);if(e&&n)if((s===0||s===1&&e[l]==="{")&&a.text===e[l]){if(++l,l===e.length){r.splice(-l,l);break}}else l=0}while(s!==0||n);return i.text==="{"&&r[r.length-1].text==="}"&&(r.pop(),r.shift()),r.reverse(),{tokens:r,start:i,end:a}}consumeArgs(e,r){if(r){if(r.length!==e+1)throw new pt("The length of delimiters doesn't match the number of args!");for(var n=r[0],i=0;ithis.settings.maxExpand)throw new pt("Too many expansions: infinite loop or need to increase maxExpand setting")}expandOnce(e){var r=this.popToken(),n=r.text,i=r.noexpand?null:this._getExpansion(n);if(i==null||e&&i.unexpandable){if(e&&i==null&&n[0]==="\\"&&!this.isDefined(n))throw new pt("Undefined control sequence: "+n);return this.pushToken(r),!1}this.countExpansion(1);var a=i.tokens,s=this.consumeArgs(i.numArgs,i.delimiters);if(i.numArgs){a=a.slice();for(var l=a.length-1;l>=0;--l){var u=a[l];if(u.text==="#"){if(l===0)throw new pt("Incomplete placeholder at end of macro body",u);if(u=a[--l],u.text==="#")a.splice(l+1,1);else if(/^[1-9]$/.test(u.text))a.splice(l,2,...s[+u.text-1]);else throw new pt("Not a valid argument number",u)}}}return this.pushTokens(a),a.length}expandAfterFuture(){return this.expandOnce(),this.future()}expandNextToken(){for(;;)if(this.expandOnce()===!1){var e=this.stack.pop();return e.treatAsRelax&&(e.text="\\relax"),e}throw new Error}expandMacro(e){return this.macros.has(e)?this.expandTokens([new _o(e)]):void 0}expandTokens(e){var r=[],n=this.stack.length;for(this.pushTokens(e);this.stack.length>n;)if(this.expandOnce(!0)===!1){var i=this.stack.pop();i.treatAsRelax&&(i.noexpand=!1,i.treatAsRelax=!1),r.push(i)}return this.countExpansion(r.length),r}expandMacroAsText(e){var r=this.expandMacro(e);return r&&r.map(n=>n.text).join("")}_getExpansion(e){var r=this.macros.get(e);if(r==null)return r;if(e.length===1){var n=this.lexer.catcodes[e];if(n!=null&&n!==13)return}var i=typeof r=="function"?r(this):r;if(typeof i=="string"){var a=0;if(i.indexOf("#")!==-1)for(var s=i.replace(/##/g,"");s.indexOf("#"+(a+1))!==-1;)++a;for(var l=new A3(i,this.settings),u=[],h=l.lex();h.text!=="EOF";)u.push(h),h=l.lex();u.reverse();var f={tokens:u,numArgs:a};return f}return i}isDefined(e){return this.macros.has(e)||yh.hasOwnProperty(e)||An.math.hasOwnProperty(e)||An.text.hasOwnProperty(e)||xV.hasOwnProperty(e)}isExpandable(e){var r=this.macros.get(e);return r!=null?typeof r=="string"||typeof r=="function"||!r.unexpandable:yh.hasOwnProperty(e)&&!yh[e].primitive}},EG=/^[โ‚Šโ‚‹โ‚Œโ‚โ‚Žโ‚€โ‚โ‚‚โ‚ƒโ‚„โ‚…โ‚†โ‚‡โ‚ˆโ‚‰โ‚โ‚‘โ‚•แตขโฑผโ‚–โ‚—โ‚˜โ‚™โ‚’โ‚šแตฃโ‚›โ‚œแตคแตฅโ‚“แตฆแตงแตจแตฉแตช]/,x3=Object.freeze({"\u208A":"+","\u208B":"-","\u208C":"=","\u208D":"(","\u208E":")","\u2080":"0","\u2081":"1","\u2082":"2","\u2083":"3","\u2084":"4","\u2085":"5","\u2086":"6","\u2087":"7","\u2088":"8","\u2089":"9","\u2090":"a","\u2091":"e","\u2095":"h","\u1D62":"i","\u2C7C":"j","\u2096":"k","\u2097":"l","\u2098":"m","\u2099":"n","\u2092":"o","\u209A":"p","\u1D63":"r","\u209B":"s","\u209C":"t","\u1D64":"u","\u1D65":"v","\u2093":"x","\u1D66":"\u03B2","\u1D67":"\u03B3","\u1D68":"\u03C1","\u1D69":"\u03D5","\u1D6A":"\u03C7","\u207A":"+","\u207B":"-","\u207C":"=","\u207D":"(","\u207E":")","\u2070":"0","\xB9":"1","\xB2":"2","\xB3":"3","\u2074":"4","\u2075":"5","\u2076":"6","\u2077":"7","\u2078":"8","\u2079":"9","\u1D2C":"A","\u1D2E":"B","\u1D30":"D","\u1D31":"E","\u1D33":"G","\u1D34":"H","\u1D35":"I","\u1D36":"J","\u1D37":"K","\u1D38":"L","\u1D39":"M","\u1D3A":"N","\u1D3C":"O","\u1D3E":"P","\u1D3F":"R","\u1D40":"T","\u1D41":"U","\u2C7D":"V","\u1D42":"W","\u1D43":"a","\u1D47":"b","\u1D9C":"c","\u1D48":"d","\u1D49":"e","\u1DA0":"f","\u1D4D":"g",\u02B0:"h","\u2071":"i",\u02B2:"j","\u1D4F":"k",\u02E1:"l","\u1D50":"m",\u207F:"n","\u1D52":"o","\u1D56":"p",\u02B3:"r",\u02E2:"s","\u1D57":"t","\u1D58":"u","\u1D5B":"v",\u02B7:"w",\u02E3:"x",\u02B8:"y","\u1DBB":"z","\u1D5D":"\u03B2","\u1D5E":"\u03B3","\u1D5F":"\u03B4","\u1D60":"\u03D5","\u1D61":"\u03C7","\u1DBF":"\u03B8"}),U7={"\u0301":{text:"\\'",math:"\\acute"},"\u0300":{text:"\\`",math:"\\grave"},"\u0308":{text:'\\"',math:"\\ddot"},"\u0303":{text:"\\~",math:"\\tilde"},"\u0304":{text:"\\=",math:"\\bar"},"\u0306":{text:"\\u",math:"\\breve"},"\u030C":{text:"\\v",math:"\\check"},"\u0302":{text:"\\^",math:"\\hat"},"\u0307":{text:"\\.",math:"\\dot"},"\u030A":{text:"\\r",math:"\\mathring"},"\u030B":{text:"\\H"},"\u0327":{text:"\\c"}},SG={\u00E1:"a\u0301",\u00E0:"a\u0300",\u00E4:"a\u0308",\u01DF:"a\u0308\u0304",\u00E3:"a\u0303",\u0101:"a\u0304",\u0103:"a\u0306",\u1EAF:"a\u0306\u0301",\u1EB1:"a\u0306\u0300",\u1EB5:"a\u0306\u0303",\u01CE:"a\u030C",\u00E2:"a\u0302",\u1EA5:"a\u0302\u0301",\u1EA7:"a\u0302\u0300",\u1EAB:"a\u0302\u0303",\u0227:"a\u0307",\u01E1:"a\u0307\u0304",\u00E5:"a\u030A",\u01FB:"a\u030A\u0301",\u1E03:"b\u0307",\u0107:"c\u0301",\u1E09:"c\u0327\u0301",\u010D:"c\u030C",\u0109:"c\u0302",\u010B:"c\u0307",\u00E7:"c\u0327",\u010F:"d\u030C",\u1E0B:"d\u0307",\u1E11:"d\u0327",\u00E9:"e\u0301",\u00E8:"e\u0300",\u00EB:"e\u0308",\u1EBD:"e\u0303",\u0113:"e\u0304",\u1E17:"e\u0304\u0301",\u1E15:"e\u0304\u0300",\u0115:"e\u0306",\u1E1D:"e\u0327\u0306",\u011B:"e\u030C",\u00EA:"e\u0302",\u1EBF:"e\u0302\u0301",\u1EC1:"e\u0302\u0300",\u1EC5:"e\u0302\u0303",\u0117:"e\u0307",\u0229:"e\u0327",\u1E1F:"f\u0307",\u01F5:"g\u0301",\u1E21:"g\u0304",\u011F:"g\u0306",\u01E7:"g\u030C",\u011D:"g\u0302",\u0121:"g\u0307",\u0123:"g\u0327",\u1E27:"h\u0308",\u021F:"h\u030C",\u0125:"h\u0302",\u1E23:"h\u0307",\u1E29:"h\u0327",\u00ED:"i\u0301",\u00EC:"i\u0300",\u00EF:"i\u0308",\u1E2F:"i\u0308\u0301",\u0129:"i\u0303",\u012B:"i\u0304",\u012D:"i\u0306",\u01D0:"i\u030C",\u00EE:"i\u0302",\u01F0:"j\u030C",\u0135:"j\u0302",\u1E31:"k\u0301",\u01E9:"k\u030C",\u0137:"k\u0327",\u013A:"l\u0301",\u013E:"l\u030C",\u013C:"l\u0327",\u1E3F:"m\u0301",\u1E41:"m\u0307",\u0144:"n\u0301",\u01F9:"n\u0300",\u00F1:"n\u0303",\u0148:"n\u030C",\u1E45:"n\u0307",\u0146:"n\u0327",\u00F3:"o\u0301",\u00F2:"o\u0300",\u00F6:"o\u0308",\u022B:"o\u0308\u0304",\u00F5:"o\u0303",\u1E4D:"o\u0303\u0301",\u1E4F:"o\u0303\u0308",\u022D:"o\u0303\u0304",\u014D:"o\u0304",\u1E53:"o\u0304\u0301",\u1E51:"o\u0304\u0300",\u014F:"o\u0306",\u01D2:"o\u030C",\u00F4:"o\u0302",\u1ED1:"o\u0302\u0301",\u1ED3:"o\u0302\u0300",\u1ED7:"o\u0302\u0303",\u022F:"o\u0307",\u0231:"o\u0307\u0304",\u0151:"o\u030B",\u1E55:"p\u0301",\u1E57:"p\u0307",\u0155:"r\u0301",\u0159:"r\u030C",\u1E59:"r\u0307",\u0157:"r\u0327",\u015B:"s\u0301",\u1E65:"s\u0301\u0307",\u0161:"s\u030C",\u1E67:"s\u030C\u0307",\u015D:"s\u0302",\u1E61:"s\u0307",\u015F:"s\u0327",\u1E97:"t\u0308",\u0165:"t\u030C",\u1E6B:"t\u0307",\u0163:"t\u0327",\u00FA:"u\u0301",\u00F9:"u\u0300",\u00FC:"u\u0308",\u01D8:"u\u0308\u0301",\u01DC:"u\u0308\u0300",\u01D6:"u\u0308\u0304",\u01DA:"u\u0308\u030C",\u0169:"u\u0303",\u1E79:"u\u0303\u0301",\u016B:"u\u0304",\u1E7B:"u\u0304\u0308",\u016D:"u\u0306",\u01D4:"u\u030C",\u00FB:"u\u0302",\u016F:"u\u030A",\u0171:"u\u030B",\u1E7D:"v\u0303",\u1E83:"w\u0301",\u1E81:"w\u0300",\u1E85:"w\u0308",\u0175:"w\u0302",\u1E87:"w\u0307",\u1E98:"w\u030A",\u1E8D:"x\u0308",\u1E8B:"x\u0307",\u00FD:"y\u0301",\u1EF3:"y\u0300",\u00FF:"y\u0308",\u1EF9:"y\u0303",\u0233:"y\u0304",\u0177:"y\u0302",\u1E8F:"y\u0307",\u1E99:"y\u030A",\u017A:"z\u0301",\u017E:"z\u030C",\u1E91:"z\u0302",\u017C:"z\u0307",\u00C1:"A\u0301",\u00C0:"A\u0300",\u00C4:"A\u0308",\u01DE:"A\u0308\u0304",\u00C3:"A\u0303",\u0100:"A\u0304",\u0102:"A\u0306",\u1EAE:"A\u0306\u0301",\u1EB0:"A\u0306\u0300",\u1EB4:"A\u0306\u0303",\u01CD:"A\u030C",\u00C2:"A\u0302",\u1EA4:"A\u0302\u0301",\u1EA6:"A\u0302\u0300",\u1EAA:"A\u0302\u0303",\u0226:"A\u0307",\u01E0:"A\u0307\u0304",\u00C5:"A\u030A",\u01FA:"A\u030A\u0301",\u1E02:"B\u0307",\u0106:"C\u0301",\u1E08:"C\u0327\u0301",\u010C:"C\u030C",\u0108:"C\u0302",\u010A:"C\u0307",\u00C7:"C\u0327",\u010E:"D\u030C",\u1E0A:"D\u0307",\u1E10:"D\u0327",\u00C9:"E\u0301",\u00C8:"E\u0300",\u00CB:"E\u0308",\u1EBC:"E\u0303",\u0112:"E\u0304",\u1E16:"E\u0304\u0301",\u1E14:"E\u0304\u0300",\u0114:"E\u0306",\u1E1C:"E\u0327\u0306",\u011A:"E\u030C",\u00CA:"E\u0302",\u1EBE:"E\u0302\u0301",\u1EC0:"E\u0302\u0300",\u1EC4:"E\u0302\u0303",\u0116:"E\u0307",\u0228:"E\u0327",\u1E1E:"F\u0307",\u01F4:"G\u0301",\u1E20:"G\u0304",\u011E:"G\u0306",\u01E6:"G\u030C",\u011C:"G\u0302",\u0120:"G\u0307",\u0122:"G\u0327",\u1E26:"H\u0308",\u021E:"H\u030C",\u0124:"H\u0302",\u1E22:"H\u0307",\u1E28:"H\u0327",\u00CD:"I\u0301",\u00CC:"I\u0300",\u00CF:"I\u0308",\u1E2E:"I\u0308\u0301",\u0128:"I\u0303",\u012A:"I\u0304",\u012C:"I\u0306",\u01CF:"I\u030C",\u00CE:"I\u0302",\u0130:"I\u0307",\u0134:"J\u0302",\u1E30:"K\u0301",\u01E8:"K\u030C",\u0136:"K\u0327",\u0139:"L\u0301",\u013D:"L\u030C",\u013B:"L\u0327",\u1E3E:"M\u0301",\u1E40:"M\u0307",\u0143:"N\u0301",\u01F8:"N\u0300",\u00D1:"N\u0303",\u0147:"N\u030C",\u1E44:"N\u0307",\u0145:"N\u0327",\u00D3:"O\u0301",\u00D2:"O\u0300",\u00D6:"O\u0308",\u022A:"O\u0308\u0304",\u00D5:"O\u0303",\u1E4C:"O\u0303\u0301",\u1E4E:"O\u0303\u0308",\u022C:"O\u0303\u0304",\u014C:"O\u0304",\u1E52:"O\u0304\u0301",\u1E50:"O\u0304\u0300",\u014E:"O\u0306",\u01D1:"O\u030C",\u00D4:"O\u0302",\u1ED0:"O\u0302\u0301",\u1ED2:"O\u0302\u0300",\u1ED6:"O\u0302\u0303",\u022E:"O\u0307",\u0230:"O\u0307\u0304",\u0150:"O\u030B",\u1E54:"P\u0301",\u1E56:"P\u0307",\u0154:"R\u0301",\u0158:"R\u030C",\u1E58:"R\u0307",\u0156:"R\u0327",\u015A:"S\u0301",\u1E64:"S\u0301\u0307",\u0160:"S\u030C",\u1E66:"S\u030C\u0307",\u015C:"S\u0302",\u1E60:"S\u0307",\u015E:"S\u0327",\u0164:"T\u030C",\u1E6A:"T\u0307",\u0162:"T\u0327",\u00DA:"U\u0301",\u00D9:"U\u0300",\u00DC:"U\u0308",\u01D7:"U\u0308\u0301",\u01DB:"U\u0308\u0300",\u01D5:"U\u0308\u0304",\u01D9:"U\u0308\u030C",\u0168:"U\u0303",\u1E78:"U\u0303\u0301",\u016A:"U\u0304",\u1E7A:"U\u0304\u0308",\u016C:"U\u0306",\u01D3:"U\u030C",\u00DB:"U\u0302",\u016E:"U\u030A",\u0170:"U\u030B",\u1E7C:"V\u0303",\u1E82:"W\u0301",\u1E80:"W\u0300",\u1E84:"W\u0308",\u0174:"W\u0302",\u1E86:"W\u0307",\u1E8C:"X\u0308",\u1E8A:"X\u0307",\u00DD:"Y\u0301",\u1EF2:"Y\u0300",\u0178:"Y\u0308",\u1EF8:"Y\u0303",\u0232:"Y\u0304",\u0176:"Y\u0302",\u1E8E:"Y\u0307",\u0179:"Z\u0301",\u017D:"Z\u030C",\u1E90:"Z\u0302",\u017B:"Z\u0307",\u03AC:"\u03B1\u0301",\u1F70:"\u03B1\u0300",\u1FB1:"\u03B1\u0304",\u1FB0:"\u03B1\u0306",\u03AD:"\u03B5\u0301",\u1F72:"\u03B5\u0300",\u03AE:"\u03B7\u0301",\u1F74:"\u03B7\u0300",\u03AF:"\u03B9\u0301",\u1F76:"\u03B9\u0300",\u03CA:"\u03B9\u0308",\u0390:"\u03B9\u0308\u0301",\u1FD2:"\u03B9\u0308\u0300",\u1FD1:"\u03B9\u0304",\u1FD0:"\u03B9\u0306",\u03CC:"\u03BF\u0301",\u1F78:"\u03BF\u0300",\u03CD:"\u03C5\u0301",\u1F7A:"\u03C5\u0300",\u03CB:"\u03C5\u0308",\u03B0:"\u03C5\u0308\u0301",\u1FE2:"\u03C5\u0308\u0300",\u1FE1:"\u03C5\u0304",\u1FE0:"\u03C5\u0306",\u03CE:"\u03C9\u0301",\u1F7C:"\u03C9\u0300",\u038E:"\u03A5\u0301",\u1FEA:"\u03A5\u0300",\u03AB:"\u03A5\u0308",\u1FE9:"\u03A5\u0304",\u1FE8:"\u03A5\u0306",\u038F:"\u03A9\u0301",\u1FFA:"\u03A9\u0300"},_3=class t{static{o(this,"Parser")}constructor(e,r){this.mode=void 0,this.gullet=void 0,this.settings=void 0,this.leftrightDepth=void 0,this.nextToken=void 0,this.mode="math",this.gullet=new tA(e,r,this.mode),this.settings=r,this.leftrightDepth=0}expect(e,r){if(r===void 0&&(r=!0),this.fetch().text!==e)throw new pt("Expected '"+e+"', got '"+this.fetch().text+"'",this.fetch());r&&this.consume()}consume(){this.nextToken=null}fetch(){return this.nextToken==null&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken}switchMode(e){this.mode=e,this.gullet.switchMode(e)}parse(){this.settings.globalGroup||this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");try{var e=this.parseExpression(!1);return this.expect("EOF"),this.settings.globalGroup||this.gullet.endGroup(),e}finally{this.gullet.endGroups()}}subparse(e){var r=this.nextToken;this.consume(),this.gullet.pushToken(new _o("}")),this.gullet.pushTokens(e);var n=this.parseExpression(!1);return this.expect("}"),this.nextToken=r,n}parseExpression(e,r){for(var n=[];;){this.mode==="math"&&this.consumeSpaces();var i=this.fetch();if(t.endOfExpression.indexOf(i.text)!==-1||r&&i.text===r||e&&yh[i.text]&&yh[i.text].infix)break;var a=this.parseAtom(r);if(a){if(a.type==="internal")continue}else break;n.push(a)}return this.mode==="text"&&this.formLigatures(n),this.handleInfixNodes(n)}handleInfixNodes(e){for(var r=-1,n,i=0;i=0&&this.settings.reportNonstrict("unicodeTextInMathMode",'Latin-1/Unicode text character "'+r[0]+'" used in math mode',e);var l=An[this.mode][r].group,u=Qs.range(e),h;if(e3e.hasOwnProperty(l)){var f=l;h={type:"atom",mode:this.mode,family:f,loc:u,text:r}}else h={type:l,mode:this.mode,loc:u,text:r};s=h}else if(r.charCodeAt(0)>=128)this.settings.strict&&(AG(r.charCodeAt(0))?this.mode==="math"&&this.settings.reportNonstrict("unicodeTextInMathMode",'Unicode text character "'+r[0]+'" used in math mode',e):this.settings.reportNonstrict("unknownSymbol",'Unrecognized Unicode character "'+r[0]+'"'+(" ("+r.charCodeAt(0)+")"),e)),s={type:"textord",mode:"text",loc:Qs.range(e),text:r};else return null;if(this.consume(),a)for(var d=0;d{e instanceof Element&&e.tagName==="A"&&e.hasAttribute("target")&&e.setAttribute(t,e.getAttribute("target")??"")}),mh.addHook("afterSanitizeAttributes",e=>{e instanceof Element&&e.tagName==="A"&&e.hasAttribute(t)&&(e.setAttribute("target",e.getAttribute(t)??""),e.removeAttribute(t),e.getAttribute("target")==="_blank"&&e.setAttribute("rel","noopener"))})}var ud,h5e,f5e,LV,_V,wr,p5e,m5e,g5e,y5e,RV,mu,dr,v5e,x5e,ic,bA,b5e,T5e,DV,P3,yi,hd,Th,Ze,pr=N(()=>{"use strict";L7();ud=//gi,h5e=o(t=>t?RV(t).replace(/\\n/g,"#br#").split("#br#"):[""],"getRows"),f5e=(()=>{let t=!1;return()=>{t||(d5e(),t=!0)}})();o(d5e,"setupDompurifyHooks");LV=o(t=>(f5e(),mh.sanitize(t)),"removeScript"),_V=o((t,e)=>{if(e.flowchart?.htmlLabels!==!1){let r=e.securityLevel;r==="antiscript"||r==="strict"?t=LV(t):r!=="loose"&&(t=RV(t),t=t.replace(//g,">"),t=t.replace(/=/g,"="),t=y5e(t))}return t},"sanitizeMore"),wr=o((t,e)=>t&&(e.dompurifyConfig?t=mh.sanitize(_V(t,e),e.dompurifyConfig).toString():t=mh.sanitize(_V(t,e),{FORBID_TAGS:["style"]}).toString(),t),"sanitizeText"),p5e=o((t,e)=>typeof t=="string"?wr(t,e):t.flat().map(r=>wr(r,e)),"sanitizeTextOrArray"),m5e=o(t=>ud.test(t),"hasBreaks"),g5e=o(t=>t.split(ud),"splitBreaks"),y5e=o(t=>t.replace(/#br#/g,"
"),"placeholderToBreak"),RV=o(t=>t.replace(ud,"#br#"),"breakToPlaceholder"),mu=o(t=>{let e="";return t&&(e=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,e=CSS.escape(e)),e},"getUrl"),dr=o(t=>!(t===!1||["false","null","0"].includes(String(t).trim().toLowerCase())),"evaluate"),v5e=o(function(...t){let e=t.filter(r=>!isNaN(r));return Math.max(...e)},"getMax"),x5e=o(function(...t){let e=t.filter(r=>!isNaN(r));return Math.min(...e)},"getMin"),ic=o(function(t){let e=t.split(/(,)/),r=[];for(let n=0;n0&&n+1Math.max(0,t.split(e).length-1),"countOccurrence"),b5e=o((t,e)=>{let r=bA(t,"~"),n=bA(e,"~");return r===1&&n===1},"shouldCombineSets"),T5e=o(t=>{let e=bA(t,"~"),r=!1;if(e<=1)return t;e%2!==0&&t.startsWith("~")&&(t=t.substring(1),r=!0);let n=[...t],i=n.indexOf("~"),a=n.lastIndexOf("~");for(;i!==-1&&a!==-1&&i!==a;)n[i]="<",n[a]=">",i=n.indexOf("~"),a=n.lastIndexOf("~");return r&&n.unshift("~"),n.join("")},"processSet"),DV=o(()=>window.MathMLElement!==void 0,"isMathMLSupported"),P3=/\$\$(.*)\$\$/g,yi=o(t=>(t.match(P3)?.length??0)>0,"hasKatex"),hd=o(async(t,e)=>{t=await Th(t,e);let r=document.createElement("div");r.innerHTML=t,r.id="katex-temp",r.style.visibility="hidden",r.style.position="absolute",r.style.top="0",document.querySelector("body")?.insertAdjacentElement("beforeend",r);let i={width:r.clientWidth,height:r.clientHeight};return r.remove(),i},"calculateMathMLDimensions"),Th=o(async(t,e)=>{if(!yi(t))return t;if(!(DV()||e.legacyMathML||e.forceLegacyMathML))return t.replace(P3,"MathML is unsupported in this environment.");{let{default:r}=await Promise.resolve().then(()=>(AV(),CV)),n=e.forceLegacyMathML||!DV()&&e.legacyMathML?"htmlAndMathml":"mathml";return t.split(ud).map(i=>yi(i)?`
${i}
`:`
${i}
`).join("").replace(P3,(i,a)=>r.renderToString(a,{throwOnError:!0,displayMode:!0,output:n}).replace(/\n/g," ").replace(//g,""))}return t.replace(P3,"Katex is not supported in @mermaid-js/tiny. Please use the full mermaid library.")},"renderKatex"),Ze={getRows:h5e,sanitizeText:wr,sanitizeTextOrArray:p5e,hasBreaks:m5e,splitBreaks:g5e,lineBreakRegex:ud,removeScript:LV,getUrl:mu,evaluate:dr,getMax:v5e,getMin:x5e}});var w5e,k5e,fn,Lo,xi=N(()=>{"use strict";yt();w5e=o(function(t,e){for(let r of e)t.attr(r[0],r[1])},"d3Attrs"),k5e=o(function(t,e,r){let n=new Map;return r?(n.set("width","100%"),n.set("style",`max-width: ${e}px;`)):(n.set("height",t),n.set("width",e)),n},"calculateSvgSizeAttrs"),fn=o(function(t,e,r,n){let i=k5e(e,r,n);w5e(t,i)},"configureSvgSize"),Lo=o(function(t,e,r,n){let i=e.node().getBBox(),a=i.width,s=i.height;X.info(`SVG bounds: ${a}x${s}`,i);let l=0,u=0;X.info(`Graph bounds: ${l}x${u}`,t),l=a+r*2,u=s+r*2,X.info(`Calculated bounds: ${l}x${u}`),fn(e,u,l,n);let h=`${i.x-r} ${i.y-r} ${i.width+2*r} ${i.height+2*r}`;e.attr("viewBox",h)},"setupGraphViewbox")});var B3,E5e,NV,MV,TA=N(()=>{"use strict";yt();B3={},E5e=o((t,e,r)=>{let n="";return t in B3&&B3[t]?n=B3[t](r):X.warn(`No theme found for ${t}`),` & { font-family: ${r.fontFamily}; font-size: ${r.fontSize}; fill: ${r.textColor} @@ -346,70 +346,70 @@ l0,-`+(r+144)+`c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7, ${n} ${e} -`},"getStyles"),HG=o((t,e)=>{e!==void 0&&(N3[t]=e)},"addStylesForDiagram"),WG=r3e});var ev={};hr(ev,{clear:()=>Ar,getAccDescription:()=>Mr,getAccTitle:()=>Rr,getDiagramTitle:()=>Ir,setAccDescription:()=>Nr,setAccTitle:()=>Lr,setDiagramTitle:()=>$r});var oA,lA,cA,uA,Ar,Lr,Rr,Nr,Mr,$r,Ir,mi=N(()=>{"use strict";dr();Bi();oA="",lA="",cA="",uA=o(t=>Tr(t,sr()),"sanitizeText"),Ar=o(()=>{oA="",cA="",lA=""},"clear"),Lr=o(t=>{oA=uA(t).replace(/^\s+/g,"")},"setAccTitle"),Rr=o(()=>oA,"getAccTitle"),Nr=o(t=>{cA=uA(t).replace(/\n\s+/g,` -`)},"setAccDescription"),Mr=o(()=>cA,"getAccDescription"),$r=o(t=>{lA=uA(t)},"setDiagramTitle"),Ir=o(()=>lA,"getDiagramTitle")});var qG,n3e,me,tv,I3,hd,fA,i3e,M3,fd,rv,hA,zt=N(()=>{"use strict";ed();vt();Bi();dr();Si();sA();mi();qG=X,n3e=_y,me=sr,tv=e3,I3=fh,hd=o(t=>Tr(t,me()),"sanitizeText"),fA=_o,i3e=o(()=>ev,"getCommonDb"),M3={},fd=o((t,e,r)=>{M3[t]&&qG.warn(`Diagram with id ${t} already registered. Overwriting.`),M3[t]=e,r&&HC(t,r),HG(t,e.styles),e.injectUtils?.(qG,n3e,me,hd,fA,i3e(),()=>{})},"registerDiagram"),rv=o(t=>{if(t in M3)return M3[t];throw new hA(t)},"getDiagram"),hA=class extends Error{static{o(this,"DiagramNotFoundError")}constructor(e){super(`Diagram ${e} not found.`)}}});var fl,bh,Ja,hl,nc,nv,dA,pA,O3,P3,YG,a3e,s3e,o3e,l3e,c3e,u3e,h3e,f3e,d3e,p3e,m3e,g3e,y3e,v3e,x3e,b3e,w3e,XG,T3e,k3e,jG,E3e,S3e,C3e,A3e,wh,_3e,D3e,L3e,R3e,N3e,iv,mA=N(()=>{"use strict";zt();dr();mi();fl=[],bh=[""],Ja="global",hl="",nc=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],nv=[],dA="",pA=!1,O3=4,P3=2,a3e=o(function(){return YG},"getC4Type"),s3e=o(function(t){YG=Tr(t,me())},"setC4Type"),o3e=o(function(t,e,r,n,i,a,s,l,u){if(t==null||e===void 0||e===null||r===void 0||r===null||n===void 0||n===null)return;let h={},f=nv.find(d=>d.from===e&&d.to===r);if(f?h=f:nv.push(h),h.type=t,h.from=e,h.to=r,h.label={text:n},i==null)h.techn={text:""};else if(typeof i=="object"){let[d,p]=Object.entries(i)[0];h[d]={text:p}}else h.techn={text:i};if(a==null)h.descr={text:""};else if(typeof a=="object"){let[d,p]=Object.entries(a)[0];h[d]={text:p}}else h.descr={text:a};if(typeof s=="object"){let[d,p]=Object.entries(s)[0];h[d]=p}else h.sprite=s;if(typeof l=="object"){let[d,p]=Object.entries(l)[0];h[d]=p}else h.tags=l;if(typeof u=="object"){let[d,p]=Object.entries(u)[0];h[d]=p}else h.link=u;h.wrap=wh()},"addRel"),l3e=o(function(t,e,r,n,i,a,s){if(e===null||r===null)return;let l={},u=fl.find(h=>h.alias===e);if(u&&e===u.alias?l=u:(l.alias=e,fl.push(l)),r==null?l.label={text:""}:l.label={text:r},n==null)l.descr={text:""};else if(typeof n=="object"){let[h,f]=Object.entries(n)[0];l[h]={text:f}}else l.descr={text:n};if(typeof i=="object"){let[h,f]=Object.entries(i)[0];l[h]=f}else l.sprite=i;if(typeof a=="object"){let[h,f]=Object.entries(a)[0];l[h]=f}else l.tags=a;if(typeof s=="object"){let[h,f]=Object.entries(s)[0];l[h]=f}else l.link=s;l.typeC4Shape={text:t},l.parentBoundary=Ja,l.wrap=wh()},"addPersonOrSystem"),c3e=o(function(t,e,r,n,i,a,s,l){if(e===null||r===null)return;let u={},h=fl.find(f=>f.alias===e);if(h&&e===h.alias?u=h:(u.alias=e,fl.push(u)),r==null?u.label={text:""}:u.label={text:r},n==null)u.techn={text:""};else if(typeof n=="object"){let[f,d]=Object.entries(n)[0];u[f]={text:d}}else u.techn={text:n};if(i==null)u.descr={text:""};else if(typeof i=="object"){let[f,d]=Object.entries(i)[0];u[f]={text:d}}else u.descr={text:i};if(typeof a=="object"){let[f,d]=Object.entries(a)[0];u[f]=d}else u.sprite=a;if(typeof s=="object"){let[f,d]=Object.entries(s)[0];u[f]=d}else u.tags=s;if(typeof l=="object"){let[f,d]=Object.entries(l)[0];u[f]=d}else u.link=l;u.wrap=wh(),u.typeC4Shape={text:t},u.parentBoundary=Ja},"addContainer"),u3e=o(function(t,e,r,n,i,a,s,l){if(e===null||r===null)return;let u={},h=fl.find(f=>f.alias===e);if(h&&e===h.alias?u=h:(u.alias=e,fl.push(u)),r==null?u.label={text:""}:u.label={text:r},n==null)u.techn={text:""};else if(typeof n=="object"){let[f,d]=Object.entries(n)[0];u[f]={text:d}}else u.techn={text:n};if(i==null)u.descr={text:""};else if(typeof i=="object"){let[f,d]=Object.entries(i)[0];u[f]={text:d}}else u.descr={text:i};if(typeof a=="object"){let[f,d]=Object.entries(a)[0];u[f]=d}else u.sprite=a;if(typeof s=="object"){let[f,d]=Object.entries(s)[0];u[f]=d}else u.tags=s;if(typeof l=="object"){let[f,d]=Object.entries(l)[0];u[f]=d}else u.link=l;u.wrap=wh(),u.typeC4Shape={text:t},u.parentBoundary=Ja},"addComponent"),h3e=o(function(t,e,r,n,i){if(t===null||e===null)return;let a={},s=nc.find(l=>l.alias===t);if(s&&t===s.alias?a=s:(a.alias=t,nc.push(a)),e==null?a.label={text:""}:a.label={text:e},r==null)a.type={text:"system"};else if(typeof r=="object"){let[l,u]=Object.entries(r)[0];a[l]={text:u}}else a.type={text:r};if(typeof n=="object"){let[l,u]=Object.entries(n)[0];a[l]=u}else a.tags=n;if(typeof i=="object"){let[l,u]=Object.entries(i)[0];a[l]=u}else a.link=i;a.parentBoundary=Ja,a.wrap=wh(),hl=Ja,Ja=t,bh.push(hl)},"addPersonOrSystemBoundary"),f3e=o(function(t,e,r,n,i){if(t===null||e===null)return;let a={},s=nc.find(l=>l.alias===t);if(s&&t===s.alias?a=s:(a.alias=t,nc.push(a)),e==null?a.label={text:""}:a.label={text:e},r==null)a.type={text:"container"};else if(typeof r=="object"){let[l,u]=Object.entries(r)[0];a[l]={text:u}}else a.type={text:r};if(typeof n=="object"){let[l,u]=Object.entries(n)[0];a[l]=u}else a.tags=n;if(typeof i=="object"){let[l,u]=Object.entries(i)[0];a[l]=u}else a.link=i;a.parentBoundary=Ja,a.wrap=wh(),hl=Ja,Ja=t,bh.push(hl)},"addContainerBoundary"),d3e=o(function(t,e,r,n,i,a,s,l){if(e===null||r===null)return;let u={},h=nc.find(f=>f.alias===e);if(h&&e===h.alias?u=h:(u.alias=e,nc.push(u)),r==null?u.label={text:""}:u.label={text:r},n==null)u.type={text:"node"};else if(typeof n=="object"){let[f,d]=Object.entries(n)[0];u[f]={text:d}}else u.type={text:n};if(i==null)u.descr={text:""};else if(typeof i=="object"){let[f,d]=Object.entries(i)[0];u[f]={text:d}}else u.descr={text:i};if(typeof s=="object"){let[f,d]=Object.entries(s)[0];u[f]=d}else u.tags=s;if(typeof l=="object"){let[f,d]=Object.entries(l)[0];u[f]=d}else u.link=l;u.nodeType=t,u.parentBoundary=Ja,u.wrap=wh(),hl=Ja,Ja=e,bh.push(hl)},"addDeploymentNode"),p3e=o(function(){Ja=hl,bh.pop(),hl=bh.pop(),bh.push(hl)},"popBoundaryParseStack"),m3e=o(function(t,e,r,n,i,a,s,l,u,h,f){let d=fl.find(p=>p.alias===e);if(!(d===void 0&&(d=nc.find(p=>p.alias===e),d===void 0))){if(r!=null)if(typeof r=="object"){let[p,m]=Object.entries(r)[0];d[p]=m}else d.bgColor=r;if(n!=null)if(typeof n=="object"){let[p,m]=Object.entries(n)[0];d[p]=m}else d.fontColor=n;if(i!=null)if(typeof i=="object"){let[p,m]=Object.entries(i)[0];d[p]=m}else d.borderColor=i;if(a!=null)if(typeof a=="object"){let[p,m]=Object.entries(a)[0];d[p]=m}else d.shadowing=a;if(s!=null)if(typeof s=="object"){let[p,m]=Object.entries(s)[0];d[p]=m}else d.shape=s;if(l!=null)if(typeof l=="object"){let[p,m]=Object.entries(l)[0];d[p]=m}else d.sprite=l;if(u!=null)if(typeof u=="object"){let[p,m]=Object.entries(u)[0];d[p]=m}else d.techn=u;if(h!=null)if(typeof h=="object"){let[p,m]=Object.entries(h)[0];d[p]=m}else d.legendText=h;if(f!=null)if(typeof f=="object"){let[p,m]=Object.entries(f)[0];d[p]=m}else d.legendSprite=f}},"updateElStyle"),g3e=o(function(t,e,r,n,i,a,s){let l=nv.find(u=>u.from===e&&u.to===r);if(l!==void 0){if(n!=null)if(typeof n=="object"){let[u,h]=Object.entries(n)[0];l[u]=h}else l.textColor=n;if(i!=null)if(typeof i=="object"){let[u,h]=Object.entries(i)[0];l[u]=h}else l.lineColor=i;if(a!=null)if(typeof a=="object"){let[u,h]=Object.entries(a)[0];l[u]=parseInt(h)}else l.offsetX=parseInt(a);if(s!=null)if(typeof s=="object"){let[u,h]=Object.entries(s)[0];l[u]=parseInt(h)}else l.offsetY=parseInt(s)}},"updateRelStyle"),y3e=o(function(t,e,r){let n=O3,i=P3;if(typeof e=="object"){let a=Object.values(e)[0];n=parseInt(a)}else n=parseInt(e);if(typeof r=="object"){let a=Object.values(r)[0];i=parseInt(a)}else i=parseInt(r);n>=1&&(O3=n),i>=1&&(P3=i)},"updateLayoutConfig"),v3e=o(function(){return O3},"getC4ShapeInRow"),x3e=o(function(){return P3},"getC4BoundaryInRow"),b3e=o(function(){return Ja},"getCurrentBoundaryParse"),w3e=o(function(){return hl},"getParentBoundaryParse"),XG=o(function(t){return t==null?fl:fl.filter(e=>e.parentBoundary===t)},"getC4ShapeArray"),T3e=o(function(t){return fl.find(e=>e.alias===t)},"getC4Shape"),k3e=o(function(t){return Object.keys(XG(t))},"getC4ShapeKeys"),jG=o(function(t){return t==null?nc:nc.filter(e=>e.parentBoundary===t)},"getBoundaries"),E3e=jG,S3e=o(function(){return nv},"getRels"),C3e=o(function(){return dA},"getTitle"),A3e=o(function(t){pA=t},"setWrap"),wh=o(function(){return pA},"autoWrap"),_3e=o(function(){fl=[],nc=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],hl="",Ja="global",bh=[""],nv=[],bh=[""],dA="",pA=!1,O3=4,P3=2},"clear"),D3e={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},L3e={FILLED:0,OPEN:1},R3e={LEFTOF:0,RIGHTOF:1,OVER:2},N3e=o(function(t){dA=Tr(t,me())},"setTitle"),iv={addPersonOrSystem:l3e,addPersonOrSystemBoundary:h3e,addContainer:c3e,addContainerBoundary:f3e,addComponent:u3e,addDeploymentNode:d3e,popBoundaryParseStack:p3e,addRel:o3e,updateElStyle:m3e,updateRelStyle:g3e,updateLayoutConfig:y3e,autoWrap:wh,setWrap:A3e,getC4ShapeArray:XG,getC4Shape:T3e,getC4ShapeKeys:k3e,getBoundaries:jG,getBoundarys:E3e,getCurrentBoundaryParse:b3e,getParentBoundaryParse:w3e,getRels:S3e,getTitle:C3e,getC4Type:a3e,getC4ShapeInRow:v3e,getC4BoundaryInRow:x3e,setAccTitle:Lr,getAccTitle:Rr,getAccDescription:Mr,setAccDescription:Nr,getConfig:o(()=>me().c4,"getConfig"),clear:_3e,LINETYPE:D3e,ARROWTYPE:L3e,PLACEMENT:R3e,setTitle:N3e,setC4Type:s3e}});function dd(t,e){return t==null||e==null?NaN:te?1:t>=e?0:NaN}var gA=N(()=>{"use strict";o(dd,"ascending")});function yA(t,e){return t==null||e==null?NaN:et?1:e>=t?0:NaN}var KG=N(()=>{"use strict";o(yA,"descending")});function pd(t){let e,r,n;t.length!==2?(e=dd,r=o((l,u)=>dd(t(l),u),"compare2"),n=o((l,u)=>t(l)-u,"delta")):(e=t===dd||t===yA?t:M3e,r=t,n=t);function i(l,u,h=0,f=l.length){if(h>>1;r(l[d],u)<0?h=d+1:f=d}while(h>>1;r(l[d],u)<=0?h=d+1:f=d}while(hh&&n(l[d-1],u)>-n(l[d],u)?d-1:d}return o(s,"center"),{left:i,center:s,right:a}}function M3e(){return 0}var vA=N(()=>{"use strict";gA();KG();o(pd,"bisector");o(M3e,"zero")});function xA(t){return t===null?NaN:+t}var QG=N(()=>{"use strict";o(xA,"number")});var ZG,JG,I3e,O3e,bA,eV=N(()=>{"use strict";gA();vA();QG();ZG=pd(dd),JG=ZG.right,I3e=ZG.left,O3e=pd(xA).center,bA=JG});function tV({_intern:t,_key:e},r){let n=e(r);return t.has(n)?t.get(n):r}function P3e({_intern:t,_key:e},r){let n=e(r);return t.has(n)?t.get(n):(t.set(n,r),r)}function B3e({_intern:t,_key:e},r){let n=e(r);return t.has(n)&&(r=t.get(n),t.delete(n)),r}function F3e(t){return t!==null&&typeof t=="object"?t.valueOf():t}var k0,rV=N(()=>{"use strict";k0=class extends Map{static{o(this,"InternMap")}constructor(e,r=F3e){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:r}}),e!=null)for(let[n,i]of e)this.set(n,i)}get(e){return super.get(tV(this,e))}has(e){return super.has(tV(this,e))}set(e,r){return super.set(P3e(this,e),r)}delete(e){return super.delete(B3e(this,e))}};o(tV,"intern_get");o(P3e,"intern_set");o(B3e,"intern_delete");o(F3e,"keyof")});function B3(t,e,r){let n=(e-t)/Math.max(0,r),i=Math.floor(Math.log10(n)),a=n/Math.pow(10,i),s=a>=$3e?10:a>=z3e?5:a>=G3e?2:1,l,u,h;return i<0?(h=Math.pow(10,-i)/s,l=Math.round(t*h),u=Math.round(e*h),l/he&&--u,h=-h):(h=Math.pow(10,i)*s,l=Math.round(t/h),u=Math.round(e/h),l*he&&--u),u0))return[];if(t===e)return[t];let n=e=i))return[];let l=a-i+1,u=new Array(l);if(n)if(s<0)for(let h=0;h{"use strict";$3e=Math.sqrt(50),z3e=Math.sqrt(10),G3e=Math.sqrt(2);o(B3,"tickSpec");o(F3,"ticks");o(av,"tickIncrement");o(E0,"tickStep")});function $3(t,e){let r;if(e===void 0)for(let n of t)n!=null&&(r=n)&&(r=n);else{let n=-1;for(let i of t)(i=e(i,++n,t))!=null&&(r=i)&&(r=i)}return r}var iV=N(()=>{"use strict";o($3,"max")});function z3(t,e){let r;if(e===void 0)for(let n of t)n!=null&&(r>n||r===void 0&&n>=n)&&(r=n);else{let n=-1;for(let i of t)(i=e(i,++n,t))!=null&&(r>i||r===void 0&&i>=i)&&(r=i)}return r}var aV=N(()=>{"use strict";o(z3,"min")});function G3(t,e,r){t=+t,e=+e,r=(i=arguments.length)<2?(e=t,t=0,1):i<3?1:+r;for(var n=-1,i=Math.max(0,Math.ceil((e-t)/r))|0,a=new Array(i);++n{"use strict";o(G3,"range")});var Th=N(()=>{"use strict";eV();vA();iV();aV();sV();nV();rV()});function wA(t){return t}var oV=N(()=>{"use strict";o(wA,"default")});function V3e(t){return"translate("+t+",0)"}function U3e(t){return"translate(0,"+t+")"}function H3e(t){return e=>+t(e)}function W3e(t,e){return e=Math.max(0,t.bandwidth()-e*2)/2,t.round()&&(e=Math.round(e)),r=>+t(r)+e}function q3e(){return!this.__axis}function cV(t,e){var r=[],n=null,i=null,a=6,s=6,l=3,u=typeof window<"u"&&window.devicePixelRatio>1?0:.5,h=t===U3||t===V3?-1:1,f=t===V3||t===TA?"x":"y",d=t===U3||t===kA?V3e:U3e;function p(m){var g=n??(e.ticks?e.ticks.apply(e,r):e.domain()),y=i??(e.tickFormat?e.tickFormat.apply(e,r):wA),v=Math.max(a,0)+l,x=e.range(),b=+x[0]+u,w=+x[x.length-1]+u,C=(e.bandwidth?W3e:H3e)(e.copy(),u),T=m.selection?m.selection():m,E=T.selectAll(".domain").data([null]),A=T.selectAll(".tick").data(g,e).order(),S=A.exit(),_=A.enter().append("g").attr("class","tick"),I=A.select("line"),L=A.select("text");E=E.merge(E.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),A=A.merge(_),I=I.merge(_.append("line").attr("stroke","currentColor").attr(f+"2",h*a)),L=L.merge(_.append("text").attr("fill","currentColor").attr(f,h*v).attr("dy",t===U3?"0em":t===kA?"0.71em":"0.32em")),m!==T&&(E=E.transition(m),A=A.transition(m),I=I.transition(m),L=L.transition(m),S=S.transition(m).attr("opacity",lV).attr("transform",function(k){return isFinite(k=C(k))?d(k+u):this.getAttribute("transform")}),_.attr("opacity",lV).attr("transform",function(k){var D=this.parentNode.__axis;return d((D&&isFinite(D=D(k))?D:C(k))+u)})),S.remove(),E.attr("d",t===V3||t===TA?s?"M"+h*s+","+b+"H"+u+"V"+w+"H"+h*s:"M"+u+","+b+"V"+w:s?"M"+b+","+h*s+"V"+u+"H"+w+"V"+h*s:"M"+b+","+u+"H"+w),A.attr("opacity",1).attr("transform",function(k){return d(C(k)+u)}),I.attr(f+"2",h*a),L.attr(f,h*v).text(y),T.filter(q3e).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===TA?"start":t===V3?"end":"middle"),T.each(function(){this.__axis=C})}return o(p,"axis"),p.scale=function(m){return arguments.length?(e=m,p):e},p.ticks=function(){return r=Array.from(arguments),p},p.tickArguments=function(m){return arguments.length?(r=m==null?[]:Array.from(m),p):r.slice()},p.tickValues=function(m){return arguments.length?(n=m==null?null:Array.from(m),p):n&&n.slice()},p.tickFormat=function(m){return arguments.length?(i=m,p):i},p.tickSize=function(m){return arguments.length?(a=s=+m,p):a},p.tickSizeInner=function(m){return arguments.length?(a=+m,p):a},p.tickSizeOuter=function(m){return arguments.length?(s=+m,p):s},p.tickPadding=function(m){return arguments.length?(l=+m,p):l},p.offset=function(m){return arguments.length?(u=+m,p):u},p}function EA(t){return cV(U3,t)}function SA(t){return cV(kA,t)}var U3,TA,kA,V3,lV,uV=N(()=>{"use strict";oV();U3=1,TA=2,kA=3,V3=4,lV=1e-6;o(V3e,"translateX");o(U3e,"translateY");o(H3e,"number");o(W3e,"center");o(q3e,"entering");o(cV,"axis");o(EA,"axisTop");o(SA,"axisBottom")});var hV=N(()=>{"use strict";uV()});function dV(){for(var t=0,e=arguments.length,r={},n;t=0&&(n=r.slice(i+1),r=r.slice(0,i)),r&&!e.hasOwnProperty(r))throw new Error("unknown type: "+r);return{type:r,name:n}})}function j3e(t,e){for(var r=0,n=t.length,i;r{"use strict";Y3e={value:o(()=>{},"value")};o(dV,"dispatch");o(H3,"Dispatch");o(X3e,"parseTypenames");H3.prototype=dV.prototype={constructor:H3,on:o(function(t,e){var r=this._,n=X3e(t+"",r),i,a=-1,s=n.length;if(arguments.length<2){for(;++a0)for(var r=new Array(i),n=0,i,a;n{"use strict";pV()});var W3,_A,DA=N(()=>{"use strict";W3="http://www.w3.org/1999/xhtml",_A={svg:"http://www.w3.org/2000/svg",xhtml:W3,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"}});function ic(t){var e=t+="",r=e.indexOf(":");return r>=0&&(e=t.slice(0,r))!=="xmlns"&&(t=t.slice(r+1)),_A.hasOwnProperty(e)?{space:_A[e],local:t}:t}var q3=N(()=>{"use strict";DA();o(ic,"default")});function K3e(t){return function(){var e=this.ownerDocument,r=this.namespaceURI;return r===W3&&e.documentElement.namespaceURI===W3?e.createElement(t):e.createElementNS(r,t)}}function Q3e(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function sv(t){var e=ic(t);return(e.local?Q3e:K3e)(e)}var LA=N(()=>{"use strict";q3();DA();o(K3e,"creatorInherit");o(Q3e,"creatorFixed");o(sv,"default")});function Z3e(){}function kh(t){return t==null?Z3e:function(){return this.querySelector(t)}}var Y3=N(()=>{"use strict";o(Z3e,"none");o(kh,"default")});function RA(t){typeof t!="function"&&(t=kh(t));for(var e=this._groups,r=e.length,n=new Array(r),i=0;i{"use strict";dl();Y3();o(RA,"default")});function NA(t){return t==null?[]:Array.isArray(t)?t:Array.from(t)}var gV=N(()=>{"use strict";o(NA,"array")});function J3e(){return[]}function S0(t){return t==null?J3e:function(){return this.querySelectorAll(t)}}var MA=N(()=>{"use strict";o(J3e,"empty");o(S0,"default")});function e5e(t){return function(){return NA(t.apply(this,arguments))}}function IA(t){typeof t=="function"?t=e5e(t):t=S0(t);for(var e=this._groups,r=e.length,n=[],i=[],a=0;a{"use strict";dl();gV();MA();o(e5e,"arrayAll");o(IA,"default")});function C0(t){return function(){return this.matches(t)}}function X3(t){return function(e){return e.matches(t)}}var ov=N(()=>{"use strict";o(C0,"default");o(X3,"childMatcher")});function r5e(t){return function(){return t5e.call(this.children,t)}}function n5e(){return this.firstElementChild}function OA(t){return this.select(t==null?n5e:r5e(typeof t=="function"?t:X3(t)))}var t5e,vV=N(()=>{"use strict";ov();t5e=Array.prototype.find;o(r5e,"childFind");o(n5e,"childFirst");o(OA,"default")});function a5e(){return Array.from(this.children)}function s5e(t){return function(){return i5e.call(this.children,t)}}function PA(t){return this.selectAll(t==null?a5e:s5e(typeof t=="function"?t:X3(t)))}var i5e,xV=N(()=>{"use strict";ov();i5e=Array.prototype.filter;o(a5e,"children");o(s5e,"childrenFilter");o(PA,"default")});function BA(t){typeof t!="function"&&(t=C0(t));for(var e=this._groups,r=e.length,n=new Array(r),i=0;i{"use strict";dl();ov();o(BA,"default")});function lv(t){return new Array(t.length)}var FA=N(()=>{"use strict";o(lv,"default")});function $A(){return new oi(this._enter||this._groups.map(lv),this._parents)}function cv(t,e){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=e}var zA=N(()=>{"use strict";FA();dl();o($A,"default");o(cv,"EnterNode");cv.prototype={constructor:cv,appendChild:o(function(t){return this._parent.insertBefore(t,this._next)},"appendChild"),insertBefore:o(function(t,e){return this._parent.insertBefore(t,e)},"insertBefore"),querySelector:o(function(t){return this._parent.querySelector(t)},"querySelector"),querySelectorAll:o(function(t){return this._parent.querySelectorAll(t)},"querySelectorAll")}});function GA(t){return function(){return t}}var wV=N(()=>{"use strict";o(GA,"default")});function o5e(t,e,r,n,i,a){for(var s=0,l,u=e.length,h=a.length;s=w&&(w=b+1);!(T=v[w])&&++w{"use strict";dl();zA();wV();o(o5e,"bindIndex");o(l5e,"bindKey");o(c5e,"datum");o(VA,"default");o(u5e,"arraylike")});function UA(){return new oi(this._exit||this._groups.map(lv),this._parents)}var kV=N(()=>{"use strict";FA();dl();o(UA,"default")});function HA(t,e,r){var n=this.enter(),i=this,a=this.exit();return typeof t=="function"?(n=t(n),n&&(n=n.selection())):n=n.append(t+""),e!=null&&(i=e(i),i&&(i=i.selection())),r==null?a.remove():r(a),n&&i?n.merge(i).order():i}var EV=N(()=>{"use strict";o(HA,"default")});function WA(t){for(var e=t.selection?t.selection():t,r=this._groups,n=e._groups,i=r.length,a=n.length,s=Math.min(i,a),l=new Array(i),u=0;u{"use strict";dl();o(WA,"default")});function qA(){for(var t=this._groups,e=-1,r=t.length;++e=0;)(s=n[i])&&(a&&s.compareDocumentPosition(a)^4&&a.parentNode.insertBefore(s,a),a=s);return this}var CV=N(()=>{"use strict";o(qA,"default")});function YA(t){t||(t=h5e);function e(d,p){return d&&p?t(d.__data__,p.__data__):!d-!p}o(e,"compareNode");for(var r=this._groups,n=r.length,i=new Array(n),a=0;ae?1:t>=e?0:NaN}var AV=N(()=>{"use strict";dl();o(YA,"default");o(h5e,"ascending")});function XA(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this}var _V=N(()=>{"use strict";o(XA,"default")});function jA(){return Array.from(this)}var DV=N(()=>{"use strict";o(jA,"default")});function KA(){for(var t=this._groups,e=0,r=t.length;e{"use strict";o(KA,"default")});function QA(){let t=0;for(let e of this)++t;return t}var RV=N(()=>{"use strict";o(QA,"default")});function ZA(){return!this.node()}var NV=N(()=>{"use strict";o(ZA,"default")});function JA(t){for(var e=this._groups,r=0,n=e.length;r{"use strict";o(JA,"default")});function f5e(t){return function(){this.removeAttribute(t)}}function d5e(t){return function(){this.removeAttributeNS(t.space,t.local)}}function p5e(t,e){return function(){this.setAttribute(t,e)}}function m5e(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function g5e(t,e){return function(){var r=e.apply(this,arguments);r==null?this.removeAttribute(t):this.setAttribute(t,r)}}function y5e(t,e){return function(){var r=e.apply(this,arguments);r==null?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,r)}}function e8(t,e){var r=ic(t);if(arguments.length<2){var n=this.node();return r.local?n.getAttributeNS(r.space,r.local):n.getAttribute(r)}return this.each((e==null?r.local?d5e:f5e:typeof e=="function"?r.local?y5e:g5e:r.local?m5e:p5e)(r,e))}var IV=N(()=>{"use strict";q3();o(f5e,"attrRemove");o(d5e,"attrRemoveNS");o(p5e,"attrConstant");o(m5e,"attrConstantNS");o(g5e,"attrFunction");o(y5e,"attrFunctionNS");o(e8,"default")});function uv(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}var t8=N(()=>{"use strict";o(uv,"default")});function v5e(t){return function(){this.style.removeProperty(t)}}function x5e(t,e,r){return function(){this.style.setProperty(t,e,r)}}function b5e(t,e,r){return function(){var n=e.apply(this,arguments);n==null?this.style.removeProperty(t):this.style.setProperty(t,n,r)}}function r8(t,e,r){return arguments.length>1?this.each((e==null?v5e:typeof e=="function"?b5e:x5e)(t,e,r??"")):Eh(this.node(),t)}function Eh(t,e){return t.style.getPropertyValue(e)||uv(t).getComputedStyle(t,null).getPropertyValue(e)}var n8=N(()=>{"use strict";t8();o(v5e,"styleRemove");o(x5e,"styleConstant");o(b5e,"styleFunction");o(r8,"default");o(Eh,"styleValue")});function w5e(t){return function(){delete this[t]}}function T5e(t,e){return function(){this[t]=e}}function k5e(t,e){return function(){var r=e.apply(this,arguments);r==null?delete this[t]:this[t]=r}}function i8(t,e){return arguments.length>1?this.each((e==null?w5e:typeof e=="function"?k5e:T5e)(t,e)):this.node()[t]}var OV=N(()=>{"use strict";o(w5e,"propertyRemove");o(T5e,"propertyConstant");o(k5e,"propertyFunction");o(i8,"default")});function PV(t){return t.trim().split(/^|\s+/)}function a8(t){return t.classList||new BV(t)}function BV(t){this._node=t,this._names=PV(t.getAttribute("class")||"")}function FV(t,e){for(var r=a8(t),n=-1,i=e.length;++n{"use strict";o(PV,"classArray");o(a8,"classList");o(BV,"ClassList");BV.prototype={add:o(function(t){var e=this._names.indexOf(t);e<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},"add"),remove:o(function(t){var e=this._names.indexOf(t);e>=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},"remove"),contains:o(function(t){return this._names.indexOf(t)>=0},"contains")};o(FV,"classedAdd");o($V,"classedRemove");o(E5e,"classedTrue");o(S5e,"classedFalse");o(C5e,"classedFunction");o(s8,"default")});function A5e(){this.textContent=""}function _5e(t){return function(){this.textContent=t}}function D5e(t){return function(){var e=t.apply(this,arguments);this.textContent=e??""}}function o8(t){return arguments.length?this.each(t==null?A5e:(typeof t=="function"?D5e:_5e)(t)):this.node().textContent}var GV=N(()=>{"use strict";o(A5e,"textRemove");o(_5e,"textConstant");o(D5e,"textFunction");o(o8,"default")});function L5e(){this.innerHTML=""}function R5e(t){return function(){this.innerHTML=t}}function N5e(t){return function(){var e=t.apply(this,arguments);this.innerHTML=e??""}}function l8(t){return arguments.length?this.each(t==null?L5e:(typeof t=="function"?N5e:R5e)(t)):this.node().innerHTML}var VV=N(()=>{"use strict";o(L5e,"htmlRemove");o(R5e,"htmlConstant");o(N5e,"htmlFunction");o(l8,"default")});function M5e(){this.nextSibling&&this.parentNode.appendChild(this)}function c8(){return this.each(M5e)}var UV=N(()=>{"use strict";o(M5e,"raise");o(c8,"default")});function I5e(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function u8(){return this.each(I5e)}var HV=N(()=>{"use strict";o(I5e,"lower");o(u8,"default")});function h8(t){var e=typeof t=="function"?t:sv(t);return this.select(function(){return this.appendChild(e.apply(this,arguments))})}var WV=N(()=>{"use strict";LA();o(h8,"default")});function O5e(){return null}function f8(t,e){var r=typeof t=="function"?t:sv(t),n=e==null?O5e:typeof e=="function"?e:kh(e);return this.select(function(){return this.insertBefore(r.apply(this,arguments),n.apply(this,arguments)||null)})}var qV=N(()=>{"use strict";LA();Y3();o(O5e,"constantNull");o(f8,"default")});function P5e(){var t=this.parentNode;t&&t.removeChild(this)}function d8(){return this.each(P5e)}var YV=N(()=>{"use strict";o(P5e,"remove");o(d8,"default")});function B5e(){var t=this.cloneNode(!1),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function F5e(){var t=this.cloneNode(!0),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function p8(t){return this.select(t?F5e:B5e)}var XV=N(()=>{"use strict";o(B5e,"selection_cloneShallow");o(F5e,"selection_cloneDeep");o(p8,"default")});function m8(t){return arguments.length?this.property("__data__",t):this.node().__data__}var jV=N(()=>{"use strict";o(m8,"default")});function $5e(t){return function(e){t.call(this,e,this.__data__)}}function z5e(t){return t.trim().split(/^|\s+/).map(function(e){var r="",n=e.indexOf(".");return n>=0&&(r=e.slice(n+1),e=e.slice(0,n)),{type:e,name:r}})}function G5e(t){return function(){var e=this.__on;if(e){for(var r=0,n=-1,i=e.length,a;r{"use strict";o($5e,"contextListener");o(z5e,"parseTypenames");o(G5e,"onRemove");o(V5e,"onAdd");o(g8,"default")});function QV(t,e,r){var n=uv(t),i=n.CustomEvent;typeof i=="function"?i=new i(e,r):(i=n.document.createEvent("Event"),r?(i.initEvent(e,r.bubbles,r.cancelable),i.detail=r.detail):i.initEvent(e,!1,!1)),t.dispatchEvent(i)}function U5e(t,e){return function(){return QV(this,t,e)}}function H5e(t,e){return function(){return QV(this,t,e.apply(this,arguments))}}function y8(t,e){return this.each((typeof e=="function"?H5e:U5e)(t,e))}var ZV=N(()=>{"use strict";t8();o(QV,"dispatchEvent");o(U5e,"dispatchConstant");o(H5e,"dispatchFunction");o(y8,"default")});function*v8(){for(var t=this._groups,e=0,r=t.length;e{"use strict";o(v8,"default")});function oi(t,e){this._groups=t,this._parents=e}function eU(){return new oi([[document.documentElement]],x8)}function W5e(){return this}var x8,mu,dl=N(()=>{"use strict";mV();yV();vV();xV();bV();TV();zA();kV();EV();SV();CV();AV();_V();DV();LV();RV();NV();MV();IV();n8();OV();zV();GV();VV();UV();HV();WV();qV();YV();XV();jV();KV();ZV();JV();x8=[null];o(oi,"Selection");o(eU,"selection");o(W5e,"selection_selection");oi.prototype=eU.prototype={constructor:oi,select:RA,selectAll:IA,selectChild:OA,selectChildren:PA,filter:BA,data:VA,enter:$A,exit:UA,join:HA,merge:WA,selection:W5e,order:qA,sort:YA,call:XA,nodes:jA,node:KA,size:QA,empty:ZA,each:JA,attr:e8,style:r8,property:i8,classed:s8,text:o8,html:l8,raise:c8,lower:u8,append:h8,insert:f8,remove:d8,clone:p8,datum:m8,on:g8,dispatch:y8,[Symbol.iterator]:v8};mu=eU});function Ge(t){return typeof t=="string"?new oi([[document.querySelector(t)]],[document.documentElement]):new oi([[t]],x8)}var tU=N(()=>{"use strict";dl();o(Ge,"default")});var pl=N(()=>{"use strict";ov();q3();tU();dl();Y3();MA();n8()});var rU=N(()=>{"use strict"});function Sh(t,e,r){t.prototype=e.prototype=r,r.constructor=t}function A0(t,e){var r=Object.create(t.prototype);for(var n in e)r[n]=e[n];return r}var b8=N(()=>{"use strict";o(Sh,"default");o(A0,"extend")});function Ch(){}function iU(){return this.rgb().formatHex()}function J5e(){return this.rgb().formatHex8()}function ewe(){return hU(this).formatHsl()}function aU(){return this.rgb().formatRgb()}function gl(t){var e,r;return t=(t+"").trim().toLowerCase(),(e=q5e.exec(t))?(r=e[1].length,e=parseInt(e[1],16),r===6?sU(e):r===3?new ua(e>>8&15|e>>4&240,e>>4&15|e&240,(e&15)<<4|e&15,1):r===8?j3(e>>24&255,e>>16&255,e>>8&255,(e&255)/255):r===4?j3(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|e&240,((e&15)<<4|e&15)/255):null):(e=Y5e.exec(t))?new ua(e[1],e[2],e[3],1):(e=X5e.exec(t))?new ua(e[1]*255/100,e[2]*255/100,e[3]*255/100,1):(e=j5e.exec(t))?j3(e[1],e[2],e[3],e[4]):(e=K5e.exec(t))?j3(e[1]*255/100,e[2]*255/100,e[3]*255/100,e[4]):(e=Q5e.exec(t))?cU(e[1],e[2]/100,e[3]/100,1):(e=Z5e.exec(t))?cU(e[1],e[2]/100,e[3]/100,e[4]):nU.hasOwnProperty(t)?sU(nU[t]):t==="transparent"?new ua(NaN,NaN,NaN,0):null}function sU(t){return new ua(t>>16&255,t>>8&255,t&255,1)}function j3(t,e,r,n){return n<=0&&(t=e=r=NaN),new ua(t,e,r,n)}function T8(t){return t instanceof Ch||(t=gl(t)),t?(t=t.rgb(),new ua(t.r,t.g,t.b,t.opacity)):new ua}function D0(t,e,r,n){return arguments.length===1?T8(t):new ua(t,e,r,n??1)}function ua(t,e,r,n){this.r=+t,this.g=+e,this.b=+r,this.opacity=+n}function oU(){return`#${md(this.r)}${md(this.g)}${md(this.b)}`}function twe(){return`#${md(this.r)}${md(this.g)}${md(this.b)}${md((isNaN(this.opacity)?1:this.opacity)*255)}`}function lU(){let t=Z3(this.opacity);return`${t===1?"rgb(":"rgba("}${gd(this.r)}, ${gd(this.g)}, ${gd(this.b)}${t===1?")":`, ${t})`}`}function Z3(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function gd(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function md(t){return t=gd(t),(t<16?"0":"")+t.toString(16)}function cU(t,e,r,n){return n<=0?t=e=r=NaN:r<=0||r>=1?t=e=NaN:e<=0&&(t=NaN),new ml(t,e,r,n)}function hU(t){if(t instanceof ml)return new ml(t.h,t.s,t.l,t.opacity);if(t instanceof Ch||(t=gl(t)),!t)return new ml;if(t instanceof ml)return t;t=t.rgb();var e=t.r/255,r=t.g/255,n=t.b/255,i=Math.min(e,r,n),a=Math.max(e,r,n),s=NaN,l=a-i,u=(a+i)/2;return l?(e===a?s=(r-n)/l+(r0&&u<1?0:s,new ml(s,l,u,t.opacity)}function fU(t,e,r,n){return arguments.length===1?hU(t):new ml(t,e,r,n??1)}function ml(t,e,r,n){this.h=+t,this.s=+e,this.l=+r,this.opacity=+n}function uU(t){return t=(t||0)%360,t<0?t+360:t}function K3(t){return Math.max(0,Math.min(1,t||0))}function w8(t,e,r){return(t<60?e+(r-e)*t/60:t<180?r:t<240?e+(r-e)*(240-t)/60:e)*255}var hv,Q3,_0,fv,ac,q5e,Y5e,X5e,j5e,K5e,Q5e,Z5e,nU,k8=N(()=>{"use strict";b8();o(Ch,"Color");hv=.7,Q3=1/hv,_0="\\s*([+-]?\\d+)\\s*",fv="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",ac="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",q5e=/^#([0-9a-f]{3,8})$/,Y5e=new RegExp(`^rgb\\(${_0},${_0},${_0}\\)$`),X5e=new RegExp(`^rgb\\(${ac},${ac},${ac}\\)$`),j5e=new RegExp(`^rgba\\(${_0},${_0},${_0},${fv}\\)$`),K5e=new RegExp(`^rgba\\(${ac},${ac},${ac},${fv}\\)$`),Q5e=new RegExp(`^hsl\\(${fv},${ac},${ac}\\)$`),Z5e=new RegExp(`^hsla\\(${fv},${ac},${ac},${fv}\\)$`),nU={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};Sh(Ch,gl,{copy(t){return Object.assign(new this.constructor,this,t)},displayable(){return this.rgb().displayable()},hex:iU,formatHex:iU,formatHex8:J5e,formatHsl:ewe,formatRgb:aU,toString:aU});o(iU,"color_formatHex");o(J5e,"color_formatHex8");o(ewe,"color_formatHsl");o(aU,"color_formatRgb");o(gl,"color");o(sU,"rgbn");o(j3,"rgba");o(T8,"rgbConvert");o(D0,"rgb");o(ua,"Rgb");Sh(ua,D0,A0(Ch,{brighter(t){return t=t==null?Q3:Math.pow(Q3,t),new ua(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=t==null?hv:Math.pow(hv,t),new ua(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new ua(gd(this.r),gd(this.g),gd(this.b),Z3(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:oU,formatHex:oU,formatHex8:twe,formatRgb:lU,toString:lU}));o(oU,"rgb_formatHex");o(twe,"rgb_formatHex8");o(lU,"rgb_formatRgb");o(Z3,"clampa");o(gd,"clampi");o(md,"hex");o(cU,"hsla");o(hU,"hslConvert");o(fU,"hsl");o(ml,"Hsl");Sh(ml,fU,A0(Ch,{brighter(t){return t=t==null?Q3:Math.pow(Q3,t),new ml(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=t==null?hv:Math.pow(hv,t),new ml(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+(this.h<0)*360,e=isNaN(t)||isNaN(this.s)?0:this.s,r=this.l,n=r+(r<.5?r:1-r)*e,i=2*r-n;return new ua(w8(t>=240?t-240:t+120,i,n),w8(t,i,n),w8(t<120?t+240:t-120,i,n),this.opacity)},clamp(){return new ml(uU(this.h),K3(this.s),K3(this.l),Z3(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(){let t=Z3(this.opacity);return`${t===1?"hsl(":"hsla("}${uU(this.h)}, ${K3(this.s)*100}%, ${K3(this.l)*100}%${t===1?")":`, ${t})`}`}}));o(uU,"clamph");o(K3,"clampt");o(w8,"hsl2rgb")});var dU,pU,mU=N(()=>{"use strict";dU=Math.PI/180,pU=180/Math.PI});function wU(t){if(t instanceof sc)return new sc(t.l,t.a,t.b,t.opacity);if(t instanceof gu)return TU(t);t instanceof ua||(t=T8(t));var e=A8(t.r),r=A8(t.g),n=A8(t.b),i=E8((.2225045*e+.7168786*r+.0606169*n)/yU),a,s;return e===r&&r===n?a=s=i:(a=E8((.4360747*e+.3850649*r+.1430804*n)/gU),s=E8((.0139322*e+.0971045*r+.7141733*n)/vU)),new sc(116*i-16,500*(a-i),200*(i-s),t.opacity)}function _8(t,e,r,n){return arguments.length===1?wU(t):new sc(t,e,r,n??1)}function sc(t,e,r,n){this.l=+t,this.a=+e,this.b=+r,this.opacity=+n}function E8(t){return t>rwe?Math.pow(t,1/3):t/bU+xU}function S8(t){return t>L0?t*t*t:bU*(t-xU)}function C8(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function A8(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function nwe(t){if(t instanceof gu)return new gu(t.h,t.c,t.l,t.opacity);if(t instanceof sc||(t=wU(t)),t.a===0&&t.b===0)return new gu(NaN,0{"use strict";b8();k8();mU();J3=18,gU=.96422,yU=1,vU=.82521,xU=4/29,L0=6/29,bU=3*L0*L0,rwe=L0*L0*L0;o(wU,"labConvert");o(_8,"lab");o(sc,"Lab");Sh(sc,_8,A0(Ch,{brighter(t){return new sc(this.l+J3*(t??1),this.a,this.b,this.opacity)},darker(t){return new sc(this.l-J3*(t??1),this.a,this.b,this.opacity)},rgb(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,r=isNaN(this.b)?t:t-this.b/200;return e=gU*S8(e),t=yU*S8(t),r=vU*S8(r),new ua(C8(3.1338561*e-1.6168667*t-.4906146*r),C8(-.9787684*e+1.9161415*t+.033454*r),C8(.0719453*e-.2289914*t+1.4052427*r),this.opacity)}}));o(E8,"xyz2lab");o(S8,"lab2xyz");o(C8,"lrgb2rgb");o(A8,"rgb2lrgb");o(nwe,"hclConvert");o(dv,"hcl");o(gu,"Hcl");o(TU,"hcl2lab");Sh(gu,dv,A0(Ch,{brighter(t){return new gu(this.h,this.c,this.l+J3*(t??1),this.opacity)},darker(t){return new gu(this.h,this.c,this.l-J3*(t??1),this.opacity)},rgb(){return TU(this).rgb()}}))});var R0=N(()=>{"use strict";k8();kU()});function D8(t,e,r,n,i){var a=t*t,s=a*t;return((1-3*t+3*a-s)*e+(4-6*a+3*s)*r+(1+3*t+3*a-3*s)*n+s*i)/6}function L8(t){var e=t.length-1;return function(r){var n=r<=0?r=0:r>=1?(r=1,e-1):Math.floor(r*e),i=t[n],a=t[n+1],s=n>0?t[n-1]:2*i-a,l=n{"use strict";o(D8,"basis");o(L8,"default")});function N8(t){var e=t.length;return function(r){var n=Math.floor(((r%=1)<0?++r:r)*e),i=t[(n+e-1)%e],a=t[n%e],s=t[(n+1)%e],l=t[(n+2)%e];return D8((r-n/e)*e,i,a,s,l)}}var EU=N(()=>{"use strict";R8();o(N8,"default")});var N0,M8=N(()=>{"use strict";N0=o(t=>()=>t,"default")});function SU(t,e){return function(r){return t+r*e}}function iwe(t,e,r){return t=Math.pow(t,r),e=Math.pow(e,r)-t,r=1/r,function(n){return Math.pow(t+n*e,r)}}function CU(t,e){var r=e-t;return r?SU(t,r>180||r<-180?r-360*Math.round(r/360):r):N0(isNaN(t)?e:t)}function AU(t){return(t=+t)==1?yu:function(e,r){return r-e?iwe(e,r,t):N0(isNaN(e)?r:e)}}function yu(t,e){var r=e-t;return r?SU(t,r):N0(isNaN(t)?e:t)}var I8=N(()=>{"use strict";M8();o(SU,"linear");o(iwe,"exponential");o(CU,"hue");o(AU,"gamma");o(yu,"nogamma")});function _U(t){return function(e){var r=e.length,n=new Array(r),i=new Array(r),a=new Array(r),s,l;for(s=0;s{"use strict";R0();R8();EU();I8();yd=o(function t(e){var r=AU(e);function n(i,a){var s=r((i=D0(i)).r,(a=D0(a)).r),l=r(i.g,a.g),u=r(i.b,a.b),h=yu(i.opacity,a.opacity);return function(f){return i.r=s(f),i.g=l(f),i.b=u(f),i.opacity=h(f),i+""}}return o(n,"rgb"),n.gamma=t,n},"rgbGamma")(1);o(_U,"rgbSpline");awe=_U(L8),swe=_U(N8)});function P8(t,e){e||(e=[]);var r=t?Math.min(e.length,t.length):0,n=e.slice(),i;return function(a){for(i=0;i{"use strict";o(P8,"default");o(DU,"isNumberArray")});function RU(t,e){var r=e?e.length:0,n=t?Math.min(r,t.length):0,i=new Array(n),a=new Array(r),s;for(s=0;s{"use strict";e5();o(RU,"genericArray")});function B8(t,e){var r=new Date;return t=+t,e=+e,function(n){return r.setTime(t*(1-n)+e*n),r}}var MU=N(()=>{"use strict";o(B8,"default")});function Ki(t,e){return t=+t,e=+e,function(r){return t*(1-r)+e*r}}var pv=N(()=>{"use strict";o(Ki,"default")});function F8(t,e){var r={},n={},i;(t===null||typeof t!="object")&&(t={}),(e===null||typeof e!="object")&&(e={});for(i in e)i in t?r[i]=Ah(t[i],e[i]):n[i]=e[i];return function(a){for(i in r)n[i]=r[i](a);return n}}var IU=N(()=>{"use strict";e5();o(F8,"default")});function owe(t){return function(){return t}}function lwe(t){return function(e){return t(e)+""}}function M0(t,e){var r=z8.lastIndex=$8.lastIndex=0,n,i,a,s=-1,l=[],u=[];for(t=t+"",e=e+"";(n=z8.exec(t))&&(i=$8.exec(e));)(a=i.index)>r&&(a=e.slice(r,a),l[s]?l[s]+=a:l[++s]=a),(n=n[0])===(i=i[0])?l[s]?l[s]+=i:l[++s]=i:(l[++s]=null,u.push({i:s,x:Ki(n,i)})),r=$8.lastIndex;return r{"use strict";pv();z8=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,$8=new RegExp(z8.source,"g");o(owe,"zero");o(lwe,"one");o(M0,"default")});function Ah(t,e){var r=typeof e,n;return e==null||r==="boolean"?N0(e):(r==="number"?Ki:r==="string"?(n=gl(e))?(e=n,yd):M0:e instanceof gl?yd:e instanceof Date?B8:DU(e)?P8:Array.isArray(e)?RU:typeof e.valueOf!="function"&&typeof e.toString!="function"||isNaN(e)?F8:Ki)(t,e)}var e5=N(()=>{"use strict";R0();O8();NU();MU();pv();IU();G8();M8();LU();o(Ah,"default")});function t5(t,e){return t=+t,e=+e,function(r){return Math.round(t*(1-r)+e*r)}}var OU=N(()=>{"use strict";o(t5,"default")});function n5(t,e,r,n,i,a){var s,l,u;return(s=Math.sqrt(t*t+e*e))&&(t/=s,e/=s),(u=t*r+e*n)&&(r-=t*u,n-=e*u),(l=Math.sqrt(r*r+n*n))&&(r/=l,n/=l,u/=l),t*n{"use strict";PU=180/Math.PI,r5={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};o(n5,"default")});function FU(t){let e=new(typeof DOMMatrix=="function"?DOMMatrix:WebKitCSSMatrix)(t+"");return e.isIdentity?r5:n5(e.a,e.b,e.c,e.d,e.e,e.f)}function $U(t){return t==null?r5:(i5||(i5=document.createElementNS("http://www.w3.org/2000/svg","g")),i5.setAttribute("transform",t),(t=i5.transform.baseVal.consolidate())?(t=t.matrix,n5(t.a,t.b,t.c,t.d,t.e,t.f)):r5)}var i5,zU=N(()=>{"use strict";BU();o(FU,"parseCss");o($U,"parseSvg")});function GU(t,e,r,n){function i(h){return h.length?h.pop()+" ":""}o(i,"pop");function a(h,f,d,p,m,g){if(h!==d||f!==p){var y=m.push("translate(",null,e,null,r);g.push({i:y-4,x:Ki(h,d)},{i:y-2,x:Ki(f,p)})}else(d||p)&&m.push("translate("+d+e+p+r)}o(a,"translate");function s(h,f,d,p){h!==f?(h-f>180?f+=360:f-h>180&&(h+=360),p.push({i:d.push(i(d)+"rotate(",null,n)-2,x:Ki(h,f)})):f&&d.push(i(d)+"rotate("+f+n)}o(s,"rotate");function l(h,f,d,p){h!==f?p.push({i:d.push(i(d)+"skewX(",null,n)-2,x:Ki(h,f)}):f&&d.push(i(d)+"skewX("+f+n)}o(l,"skewX");function u(h,f,d,p,m,g){if(h!==d||f!==p){var y=m.push(i(m)+"scale(",null,",",null,")");g.push({i:y-4,x:Ki(h,d)},{i:y-2,x:Ki(f,p)})}else(d!==1||p!==1)&&m.push(i(m)+"scale("+d+","+p+")")}return o(u,"scale"),function(h,f){var d=[],p=[];return h=t(h),f=t(f),a(h.translateX,h.translateY,f.translateX,f.translateY,d,p),s(h.rotate,f.rotate,d,p),l(h.skewX,f.skewX,d,p),u(h.scaleX,h.scaleY,f.scaleX,f.scaleY,d,p),h=f=null,function(m){for(var g=-1,y=p.length,v;++g{"use strict";pv();zU();o(GU,"interpolateTransform");V8=GU(FU,"px, ","px)","deg)"),U8=GU($U,", ",")",")")});function UU(t){return function(e,r){var n=t((e=dv(e)).h,(r=dv(r)).h),i=yu(e.c,r.c),a=yu(e.l,r.l),s=yu(e.opacity,r.opacity);return function(l){return e.h=n(l),e.c=i(l),e.l=a(l),e.opacity=s(l),e+""}}}var H8,cwe,HU=N(()=>{"use strict";R0();I8();o(UU,"hcl");H8=UU(CU),cwe=UU(yu)});var I0=N(()=>{"use strict";e5();pv();OU();G8();VU();O8();HU()});function bv(){return vd||(YU(uwe),vd=vv.now()+o5)}function uwe(){vd=0}function xv(){this._call=this._time=this._next=null}function l5(t,e,r){var n=new xv;return n.restart(t,e,r),n}function XU(){bv(),++O0;for(var t=a5,e;t;)(e=vd-t._time)>=0&&t._call.call(void 0,e),t=t._next;--O0}function WU(){vd=(s5=vv.now())+o5,O0=gv=0;try{XU()}finally{O0=0,fwe(),vd=0}}function hwe(){var t=vv.now(),e=t-s5;e>qU&&(o5-=e,s5=t)}function fwe(){for(var t,e=a5,r,n=1/0;e;)e._call?(n>e._time&&(n=e._time),t=e,e=e._next):(r=e._next,e._next=null,e=t?t._next=r:a5=r);yv=t,W8(n)}function W8(t){if(!O0){gv&&(gv=clearTimeout(gv));var e=t-vd;e>24?(t<1/0&&(gv=setTimeout(WU,t-vv.now()-o5)),mv&&(mv=clearInterval(mv))):(mv||(s5=vv.now(),mv=setInterval(hwe,qU)),O0=1,YU(WU))}}var O0,gv,mv,qU,a5,yv,s5,vd,o5,vv,YU,q8=N(()=>{"use strict";O0=0,gv=0,mv=0,qU=1e3,s5=0,vd=0,o5=0,vv=typeof performance=="object"&&performance.now?performance:Date,YU=typeof window=="object"&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};o(bv,"now");o(uwe,"clearNow");o(xv,"Timer");xv.prototype=l5.prototype={constructor:xv,restart:o(function(t,e,r){if(typeof t!="function")throw new TypeError("callback is not a function");r=(r==null?bv():+r)+(e==null?0:+e),!this._next&&yv!==this&&(yv?yv._next=this:a5=this,yv=this),this._call=t,this._time=r,W8()},"restart"),stop:o(function(){this._call&&(this._call=null,this._time=1/0,W8())},"stop")};o(l5,"timer");o(XU,"timerFlush");o(WU,"wake");o(hwe,"poke");o(fwe,"nap");o(W8,"sleep")});function wv(t,e,r){var n=new xv;return e=e==null?0:+e,n.restart(i=>{n.stop(),t(i+e)},e,r),n}var jU=N(()=>{"use strict";q8();o(wv,"default")});var c5=N(()=>{"use strict";q8();jU()});function vu(t,e,r,n,i,a){var s=t.__transition;if(!s)t.__transition={};else if(r in s)return;mwe(t,r,{name:e,index:n,group:i,on:dwe,tween:pwe,time:a.time,delay:a.delay,duration:a.duration,ease:a.ease,timer:null,state:ZU})}function kv(t,e){var r=$i(t,e);if(r.state>ZU)throw new Error("too late; already scheduled");return r}function ha(t,e){var r=$i(t,e);if(r.state>u5)throw new Error("too late; already running");return r}function $i(t,e){var r=t.__transition;if(!r||!(r=r[e]))throw new Error("transition not found");return r}function mwe(t,e,r){var n=t.__transition,i;n[e]=r,r.timer=l5(a,0,r.time);function a(h){r.state=KU,r.timer.restart(s,r.delay,r.time),r.delay<=h&&s(h-r.delay)}o(a,"schedule");function s(h){var f,d,p,m;if(r.state!==KU)return u();for(f in n)if(m=n[f],m.name===r.name){if(m.state===u5)return wv(s);m.state===QU?(m.state=Tv,m.timer.stop(),m.on.call("interrupt",t,t.__data__,m.index,m.group),delete n[f]):+f{"use strict";AA();c5();dwe=CA("start","end","cancel","interrupt"),pwe=[],ZU=0,KU=1,h5=2,u5=3,QU=4,f5=5,Tv=6;o(vu,"default");o(kv,"init");o(ha,"set");o($i,"get");o(mwe,"create")});function Ev(t,e){var r=t.__transition,n,i,a=!0,s;if(r){e=e==null?null:e+"";for(s in r){if((n=r[s]).name!==e){a=!1;continue}i=n.state>h5&&n.state{"use strict";Cs();o(Ev,"default")});function Y8(t){return this.each(function(){Ev(this,t)})}var eH=N(()=>{"use strict";JU();o(Y8,"default")});function gwe(t,e){var r,n;return function(){var i=ha(this,t),a=i.tween;if(a!==r){n=r=a;for(var s=0,l=n.length;s{"use strict";Cs();o(gwe,"tweenRemove");o(ywe,"tweenFunction");o(X8,"default");o(P0,"tweenValue")});function Cv(t,e){var r;return(typeof e=="number"?Ki:e instanceof gl?yd:(r=gl(e))?(e=r,yd):M0)(t,e)}var j8=N(()=>{"use strict";R0();I0();o(Cv,"default")});function vwe(t){return function(){this.removeAttribute(t)}}function xwe(t){return function(){this.removeAttributeNS(t.space,t.local)}}function bwe(t,e,r){var n,i=r+"",a;return function(){var s=this.getAttribute(t);return s===i?null:s===n?a:a=e(n=s,r)}}function wwe(t,e,r){var n,i=r+"",a;return function(){var s=this.getAttributeNS(t.space,t.local);return s===i?null:s===n?a:a=e(n=s,r)}}function Twe(t,e,r){var n,i,a;return function(){var s,l=r(this),u;return l==null?void this.removeAttribute(t):(s=this.getAttribute(t),u=l+"",s===u?null:s===n&&u===i?a:(i=u,a=e(n=s,l)))}}function kwe(t,e,r){var n,i,a;return function(){var s,l=r(this),u;return l==null?void this.removeAttributeNS(t.space,t.local):(s=this.getAttributeNS(t.space,t.local),u=l+"",s===u?null:s===n&&u===i?a:(i=u,a=e(n=s,l)))}}function K8(t,e){var r=ic(t),n=r==="transform"?U8:Cv;return this.attrTween(t,typeof e=="function"?(r.local?kwe:Twe)(r,n,P0(this,"attr."+t,e)):e==null?(r.local?xwe:vwe)(r):(r.local?wwe:bwe)(r,n,e))}var tH=N(()=>{"use strict";I0();pl();Sv();j8();o(vwe,"attrRemove");o(xwe,"attrRemoveNS");o(bwe,"attrConstant");o(wwe,"attrConstantNS");o(Twe,"attrFunction");o(kwe,"attrFunctionNS");o(K8,"default")});function Ewe(t,e){return function(r){this.setAttribute(t,e.call(this,r))}}function Swe(t,e){return function(r){this.setAttributeNS(t.space,t.local,e.call(this,r))}}function Cwe(t,e){var r,n;function i(){var a=e.apply(this,arguments);return a!==n&&(r=(n=a)&&Swe(t,a)),r}return o(i,"tween"),i._value=e,i}function Awe(t,e){var r,n;function i(){var a=e.apply(this,arguments);return a!==n&&(r=(n=a)&&Ewe(t,a)),r}return o(i,"tween"),i._value=e,i}function Q8(t,e){var r="attr."+t;if(arguments.length<2)return(r=this.tween(r))&&r._value;if(e==null)return this.tween(r,null);if(typeof e!="function")throw new Error;var n=ic(t);return this.tween(r,(n.local?Cwe:Awe)(n,e))}var rH=N(()=>{"use strict";pl();o(Ewe,"attrInterpolate");o(Swe,"attrInterpolateNS");o(Cwe,"attrTweenNS");o(Awe,"attrTween");o(Q8,"default")});function _we(t,e){return function(){kv(this,t).delay=+e.apply(this,arguments)}}function Dwe(t,e){return e=+e,function(){kv(this,t).delay=e}}function Z8(t){var e=this._id;return arguments.length?this.each((typeof t=="function"?_we:Dwe)(e,t)):$i(this.node(),e).delay}var nH=N(()=>{"use strict";Cs();o(_we,"delayFunction");o(Dwe,"delayConstant");o(Z8,"default")});function Lwe(t,e){return function(){ha(this,t).duration=+e.apply(this,arguments)}}function Rwe(t,e){return e=+e,function(){ha(this,t).duration=e}}function J8(t){var e=this._id;return arguments.length?this.each((typeof t=="function"?Lwe:Rwe)(e,t)):$i(this.node(),e).duration}var iH=N(()=>{"use strict";Cs();o(Lwe,"durationFunction");o(Rwe,"durationConstant");o(J8,"default")});function Nwe(t,e){if(typeof e!="function")throw new Error;return function(){ha(this,t).ease=e}}function e_(t){var e=this._id;return arguments.length?this.each(Nwe(e,t)):$i(this.node(),e).ease}var aH=N(()=>{"use strict";Cs();o(Nwe,"easeConstant");o(e_,"default")});function Mwe(t,e){return function(){var r=e.apply(this,arguments);if(typeof r!="function")throw new Error;ha(this,t).ease=r}}function t_(t){if(typeof t!="function")throw new Error;return this.each(Mwe(this._id,t))}var sH=N(()=>{"use strict";Cs();o(Mwe,"easeVarying");o(t_,"default")});function r_(t){typeof t!="function"&&(t=C0(t));for(var e=this._groups,r=e.length,n=new Array(r),i=0;i{"use strict";pl();xd();o(r_,"default")});function n_(t){if(t._id!==this._id)throw new Error;for(var e=this._groups,r=t._groups,n=e.length,i=r.length,a=Math.min(n,i),s=new Array(n),l=0;l{"use strict";xd();o(n_,"default")});function Iwe(t){return(t+"").trim().split(/^|\s+/).every(function(e){var r=e.indexOf(".");return r>=0&&(e=e.slice(0,r)),!e||e==="start"})}function Owe(t,e,r){var n,i,a=Iwe(e)?kv:ha;return function(){var s=a(this,t),l=s.on;l!==n&&(i=(n=l).copy()).on(e,r),s.on=i}}function i_(t,e){var r=this._id;return arguments.length<2?$i(this.node(),r).on.on(t):this.each(Owe(r,t,e))}var cH=N(()=>{"use strict";Cs();o(Iwe,"start");o(Owe,"onFunction");o(i_,"default")});function Pwe(t){return function(){var e=this.parentNode;for(var r in this.__transition)if(+r!==t)return;e&&e.removeChild(this)}}function a_(){return this.on("end.remove",Pwe(this._id))}var uH=N(()=>{"use strict";o(Pwe,"removeFunction");o(a_,"default")});function s_(t){var e=this._name,r=this._id;typeof t!="function"&&(t=kh(t));for(var n=this._groups,i=n.length,a=new Array(i),s=0;s{"use strict";pl();xd();Cs();o(s_,"default")});function o_(t){var e=this._name,r=this._id;typeof t!="function"&&(t=S0(t));for(var n=this._groups,i=n.length,a=[],s=[],l=0;l{"use strict";pl();xd();Cs();o(o_,"default")});function l_(){return new Bwe(this._groups,this._parents)}var Bwe,dH=N(()=>{"use strict";pl();Bwe=mu.prototype.constructor;o(l_,"default")});function Fwe(t,e){var r,n,i;return function(){var a=Eh(this,t),s=(this.style.removeProperty(t),Eh(this,t));return a===s?null:a===r&&s===n?i:i=e(r=a,n=s)}}function pH(t){return function(){this.style.removeProperty(t)}}function $we(t,e,r){var n,i=r+"",a;return function(){var s=Eh(this,t);return s===i?null:s===n?a:a=e(n=s,r)}}function zwe(t,e,r){var n,i,a;return function(){var s=Eh(this,t),l=r(this),u=l+"";return l==null&&(u=l=(this.style.removeProperty(t),Eh(this,t))),s===u?null:s===n&&u===i?a:(i=u,a=e(n=s,l))}}function Gwe(t,e){var r,n,i,a="style."+e,s="end."+a,l;return function(){var u=ha(this,t),h=u.on,f=u.value[a]==null?l||(l=pH(e)):void 0;(h!==r||i!==f)&&(n=(r=h).copy()).on(s,i=f),u.on=n}}function c_(t,e,r){var n=(t+="")=="transform"?V8:Cv;return e==null?this.styleTween(t,Fwe(t,n)).on("end.style."+t,pH(t)):typeof e=="function"?this.styleTween(t,zwe(t,n,P0(this,"style."+t,e))).each(Gwe(this._id,t)):this.styleTween(t,$we(t,n,e),r).on("end.style."+t,null)}var mH=N(()=>{"use strict";I0();pl();Cs();Sv();j8();o(Fwe,"styleNull");o(pH,"styleRemove");o($we,"styleConstant");o(zwe,"styleFunction");o(Gwe,"styleMaybeRemove");o(c_,"default")});function Vwe(t,e,r){return function(n){this.style.setProperty(t,e.call(this,n),r)}}function Uwe(t,e,r){var n,i;function a(){var s=e.apply(this,arguments);return s!==i&&(n=(i=s)&&Vwe(t,s,r)),n}return o(a,"tween"),a._value=e,a}function u_(t,e,r){var n="style."+(t+="");if(arguments.length<2)return(n=this.tween(n))&&n._value;if(e==null)return this.tween(n,null);if(typeof e!="function")throw new Error;return this.tween(n,Uwe(t,e,r??""))}var gH=N(()=>{"use strict";o(Vwe,"styleInterpolate");o(Uwe,"styleTween");o(u_,"default")});function Hwe(t){return function(){this.textContent=t}}function Wwe(t){return function(){var e=t(this);this.textContent=e??""}}function h_(t){return this.tween("text",typeof t=="function"?Wwe(P0(this,"text",t)):Hwe(t==null?"":t+""))}var yH=N(()=>{"use strict";Sv();o(Hwe,"textConstant");o(Wwe,"textFunction");o(h_,"default")});function qwe(t){return function(e){this.textContent=t.call(this,e)}}function Ywe(t){var e,r;function n(){var i=t.apply(this,arguments);return i!==r&&(e=(r=i)&&qwe(i)),e}return o(n,"tween"),n._value=t,n}function f_(t){var e="text";if(arguments.length<1)return(e=this.tween(e))&&e._value;if(t==null)return this.tween(e,null);if(typeof t!="function")throw new Error;return this.tween(e,Ywe(t))}var vH=N(()=>{"use strict";o(qwe,"textInterpolate");o(Ywe,"textTween");o(f_,"default")});function d_(){for(var t=this._name,e=this._id,r=d5(),n=this._groups,i=n.length,a=0;a{"use strict";xd();Cs();o(d_,"default")});function p_(){var t,e,r=this,n=r._id,i=r.size();return new Promise(function(a,s){var l={value:s},u={value:o(function(){--i===0&&a()},"value")};r.each(function(){var h=ha(this,n),f=h.on;f!==t&&(e=(t=f).copy(),e._.cancel.push(l),e._.interrupt.push(l),e._.end.push(u)),h.on=e}),i===0&&a()})}var bH=N(()=>{"use strict";Cs();o(p_,"default")});function es(t,e,r,n){this._groups=t,this._parents=e,this._name=r,this._id=n}function wH(t){return mu().transition(t)}function d5(){return++Xwe}var Xwe,xu,xd=N(()=>{"use strict";pl();tH();rH();nH();iH();aH();sH();oH();lH();cH();uH();hH();fH();dH();mH();gH();yH();vH();xH();Sv();bH();Xwe=0;o(es,"Transition");o(wH,"transition");o(d5,"newId");xu=mu.prototype;es.prototype=wH.prototype={constructor:es,select:s_,selectAll:o_,selectChild:xu.selectChild,selectChildren:xu.selectChildren,filter:r_,merge:n_,selection:l_,transition:d_,call:xu.call,nodes:xu.nodes,node:xu.node,size:xu.size,empty:xu.empty,each:xu.each,on:i_,attr:K8,attrTween:Q8,style:c_,styleTween:u_,text:h_,textTween:f_,remove:a_,tween:X8,delay:Z8,duration:J8,ease:e_,easeVarying:t_,end:p_,[Symbol.iterator]:xu[Symbol.iterator]}});function p5(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}var TH=N(()=>{"use strict";o(p5,"cubicInOut")});var m_=N(()=>{"use strict";TH()});function Kwe(t,e){for(var r;!(r=t.__transition)||!(r=r[e]);)if(!(t=t.parentNode))throw new Error(`transition ${e} not found`);return r}function g_(t){var e,r;t instanceof es?(e=t._id,t=t._name):(e=d5(),(r=jwe).time=bv(),t=t==null?null:t+"");for(var n=this._groups,i=n.length,a=0;a{"use strict";xd();Cs();m_();c5();jwe={time:null,delay:0,duration:250,ease:p5};o(Kwe,"inherit");o(g_,"default")});var EH=N(()=>{"use strict";pl();eH();kH();mu.prototype.interrupt=Y8;mu.prototype.transition=g_});var m5=N(()=>{"use strict";EH()});var SH=N(()=>{"use strict"});var CH=N(()=>{"use strict"});var AH=N(()=>{"use strict"});function _H(t){return[+t[0],+t[1]]}function Qwe(t){return[_H(t[0]),_H(t[1])]}function y_(t){return{type:t}}var U0t,H0t,W0t,q0t,Y0t,X0t,DH=N(()=>{"use strict";m5();SH();CH();AH();({abs:U0t,max:H0t,min:W0t}=Math);o(_H,"number1");o(Qwe,"number2");q0t={name:"x",handles:["w","e"].map(y_),input:o(function(t,e){return t==null?null:[[+t[0],e[0][1]],[+t[1],e[1][1]]]},"input"),output:o(function(t){return t&&[t[0][0],t[1][0]]},"output")},Y0t={name:"y",handles:["n","s"].map(y_),input:o(function(t,e){return t==null?null:[[e[0][0],+t[0]],[e[1][0],+t[1]]]},"input"),output:o(function(t){return t&&[t[0][1],t[1][1]]},"output")},X0t={name:"xy",handles:["n","w","e","s","nw","ne","sw","se"].map(y_),input:o(function(t){return t==null?null:Qwe(t)},"input"),output:o(function(t){return t},"output")};o(y_,"type")});var LH=N(()=>{"use strict";DH()});function RH(t){this._+=t[0];for(let e=1,r=t.length;e=0))throw new Error(`invalid digits: ${t}`);if(e>15)return RH;let r=10**e;return function(n){this._+=n[0];for(let i=1,a=n.length;i{"use strict";v_=Math.PI,x_=2*v_,bd=1e-6,Zwe=x_-bd;o(RH,"append");o(Jwe,"appendRound");wd=class{static{o(this,"Path")}constructor(e){this._x0=this._y0=this._x1=this._y1=null,this._="",this._append=e==null?RH:Jwe(e)}moveTo(e,r){this._append`M${this._x0=this._x1=+e},${this._y0=this._y1=+r}`}closePath(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._append`Z`)}lineTo(e,r){this._append`L${this._x1=+e},${this._y1=+r}`}quadraticCurveTo(e,r,n,i){this._append`Q${+e},${+r},${this._x1=+n},${this._y1=+i}`}bezierCurveTo(e,r,n,i,a,s){this._append`C${+e},${+r},${+n},${+i},${this._x1=+a},${this._y1=+s}`}arcTo(e,r,n,i,a){if(e=+e,r=+r,n=+n,i=+i,a=+a,a<0)throw new Error(`negative radius: ${a}`);let s=this._x1,l=this._y1,u=n-e,h=i-r,f=s-e,d=l-r,p=f*f+d*d;if(this._x1===null)this._append`M${this._x1=e},${this._y1=r}`;else if(p>bd)if(!(Math.abs(d*u-h*f)>bd)||!a)this._append`L${this._x1=e},${this._y1=r}`;else{let m=n-s,g=i-l,y=u*u+h*h,v=m*m+g*g,x=Math.sqrt(y),b=Math.sqrt(p),w=a*Math.tan((v_-Math.acos((y+p-v)/(2*x*b)))/2),C=w/b,T=w/x;Math.abs(C-1)>bd&&this._append`L${e+C*f},${r+C*d}`,this._append`A${a},${a},0,0,${+(d*m>f*g)},${this._x1=e+T*u},${this._y1=r+T*h}`}}arc(e,r,n,i,a,s){if(e=+e,r=+r,n=+n,s=!!s,n<0)throw new Error(`negative radius: ${n}`);let l=n*Math.cos(i),u=n*Math.sin(i),h=e+l,f=r+u,d=1^s,p=s?i-a:a-i;this._x1===null?this._append`M${h},${f}`:(Math.abs(this._x1-h)>bd||Math.abs(this._y1-f)>bd)&&this._append`L${h},${f}`,n&&(p<0&&(p=p%x_+x_),p>Zwe?this._append`A${n},${n},0,1,${d},${e-l},${r-u}A${n},${n},0,1,${d},${this._x1=h},${this._y1=f}`:p>bd&&this._append`A${n},${n},0,${+(p>=v_)},${d},${this._x1=e+n*Math.cos(a)},${this._y1=r+n*Math.sin(a)}`)}rect(e,r,n,i){this._append`M${this._x0=this._x1=+e},${this._y0=this._y1=+r}h${n=+n}v${+i}h${-n}Z`}toString(){return this._}};o(NH,"path");NH.prototype=wd.prototype});var b_=N(()=>{"use strict";MH()});var IH=N(()=>{"use strict"});var OH=N(()=>{"use strict"});var PH=N(()=>{"use strict"});var BH=N(()=>{"use strict"});var FH=N(()=>{"use strict"});var $H=N(()=>{"use strict"});var zH=N(()=>{"use strict"});function w_(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)}function Td(t,e){if((r=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var r,n=t.slice(0,r);return[n.length>1?n[0]+n.slice(2):n,+t.slice(r+1)]}var Av=N(()=>{"use strict";o(w_,"default");o(Td,"formatDecimalParts")});function yl(t){return t=Td(Math.abs(t)),t?t[1]:NaN}var _v=N(()=>{"use strict";Av();o(yl,"default")});function T_(t,e){return function(r,n){for(var i=r.length,a=[],s=0,l=t[0],u=0;i>0&&l>0&&(u+l+1>n&&(l=Math.max(1,n-u)),a.push(r.substring(i-=l,i+l)),!((u+=l+1)>n));)l=t[s=(s+1)%t.length];return a.reverse().join(e)}}var GH=N(()=>{"use strict";o(T_,"default")});function k_(t){return function(e){return e.replace(/[0-9]/g,function(r){return t[+r]})}}var VH=N(()=>{"use strict";o(k_,"default")});function _h(t){if(!(e=eTe.exec(t)))throw new Error("invalid format: "+t);var e;return new g5({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}function g5(t){this.fill=t.fill===void 0?" ":t.fill+"",this.align=t.align===void 0?">":t.align+"",this.sign=t.sign===void 0?"-":t.sign+"",this.symbol=t.symbol===void 0?"":t.symbol+"",this.zero=!!t.zero,this.width=t.width===void 0?void 0:+t.width,this.comma=!!t.comma,this.precision=t.precision===void 0?void 0:+t.precision,this.trim=!!t.trim,this.type=t.type===void 0?"":t.type+""}var eTe,E_=N(()=>{"use strict";eTe=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;o(_h,"formatSpecifier");_h.prototype=g5.prototype;o(g5,"FormatSpecifier");g5.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 S_(t){e:for(var e=t.length,r=1,n=-1,i;r0&&(n=0);break}return n>0?t.slice(0,n)+t.slice(i+1):t}var UH=N(()=>{"use strict";o(S_,"default")});function A_(t,e){var r=Td(t,e);if(!r)return t+"";var n=r[0],i=r[1],a=i-(C_=Math.max(-8,Math.min(8,Math.floor(i/3)))*3)+1,s=n.length;return a===s?n:a>s?n+new Array(a-s+1).join("0"):a>0?n.slice(0,a)+"."+n.slice(a):"0."+new Array(1-a).join("0")+Td(t,Math.max(0,e+a-1))[0]}var C_,__=N(()=>{"use strict";Av();o(A_,"default")});function y5(t,e){var r=Td(t,e);if(!r)return t+"";var n=r[0],i=r[1];return i<0?"0."+new Array(-i).join("0")+n:n.length>i+1?n.slice(0,i+1)+"."+n.slice(i+1):n+new Array(i-n.length+2).join("0")}var HH=N(()=>{"use strict";Av();o(y5,"default")});var D_,WH=N(()=>{"use strict";Av();__();HH();D_={"%":o((t,e)=>(t*100).toFixed(e),"%"),b:o(t=>Math.round(t).toString(2),"b"),c:o(t=>t+"","c"),d:w_,e:o((t,e)=>t.toExponential(e),"e"),f:o((t,e)=>t.toFixed(e),"f"),g:o((t,e)=>t.toPrecision(e),"g"),o:o(t=>Math.round(t).toString(8),"o"),p:o((t,e)=>y5(t*100,e),"p"),r:y5,s:A_,X:o(t=>Math.round(t).toString(16).toUpperCase(),"X"),x:o(t=>Math.round(t).toString(16),"x")}});function v5(t){return t}var qH=N(()=>{"use strict";o(v5,"default")});function L_(t){var e=t.grouping===void 0||t.thousands===void 0?v5:T_(YH.call(t.grouping,Number),t.thousands+""),r=t.currency===void 0?"":t.currency[0]+"",n=t.currency===void 0?"":t.currency[1]+"",i=t.decimal===void 0?".":t.decimal+"",a=t.numerals===void 0?v5:k_(YH.call(t.numerals,String)),s=t.percent===void 0?"%":t.percent+"",l=t.minus===void 0?"\u2212":t.minus+"",u=t.nan===void 0?"NaN":t.nan+"";function h(d){d=_h(d);var p=d.fill,m=d.align,g=d.sign,y=d.symbol,v=d.zero,x=d.width,b=d.comma,w=d.precision,C=d.trim,T=d.type;T==="n"?(b=!0,T="g"):D_[T]||(w===void 0&&(w=12),C=!0,T="g"),(v||p==="0"&&m==="=")&&(v=!0,p="0",m="=");var E=y==="$"?r:y==="#"&&/[boxX]/.test(T)?"0"+T.toLowerCase():"",A=y==="$"?n:/[%p]/.test(T)?s:"",S=D_[T],_=/[defgprs%]/.test(T);w=w===void 0?6:/[gprs]/.test(T)?Math.max(1,Math.min(21,w)):Math.max(0,Math.min(20,w));function I(L){var k=E,D=A,R,O,M;if(T==="c")D=S(L)+D,L="";else{L=+L;var P=L<0||1/L<0;if(L=isNaN(L)?u:S(Math.abs(L),w),C&&(L=S_(L)),P&&+L==0&&g!=="+"&&(P=!1),k=(P?g==="("?g:l:g==="-"||g==="("?"":g)+k,D=(T==="s"?XH[8+C_/3]:"")+D+(P&&g==="("?")":""),_){for(R=-1,O=L.length;++RM||M>57){D=(M===46?i+L.slice(R+1):L.slice(R))+D,L=L.slice(0,R);break}}}b&&!v&&(L=e(L,1/0));var B=k.length+L.length+D.length,F=B>1)+k+L+D+F.slice(B);break;default:L=F+k+L+D;break}return a(L)}return o(I,"format"),I.toString=function(){return d+""},I}o(h,"newFormat");function f(d,p){var m=h((d=_h(d),d.type="f",d)),g=Math.max(-8,Math.min(8,Math.floor(yl(p)/3)))*3,y=Math.pow(10,-g),v=XH[8+g/3];return function(x){return m(y*x)+v}}return o(f,"formatPrefix"),{format:h,formatPrefix:f}}var YH,XH,jH=N(()=>{"use strict";_v();GH();VH();E_();UH();WH();__();qH();YH=Array.prototype.map,XH=["y","z","a","f","p","n","\xB5","m","","k","M","G","T","P","E","Z","Y"];o(L_,"default")});function R_(t){return x5=L_(t),b5=x5.format,w5=x5.formatPrefix,x5}var x5,b5,w5,KH=N(()=>{"use strict";jH();R_({thousands:",",grouping:[3],currency:["$",""]});o(R_,"defaultLocale")});function T5(t){return Math.max(0,-yl(Math.abs(t)))}var QH=N(()=>{"use strict";_v();o(T5,"default")});function k5(t,e){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(yl(e)/3)))*3-yl(Math.abs(t)))}var ZH=N(()=>{"use strict";_v();o(k5,"default")});function E5(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,yl(e)-yl(t))+1}var JH=N(()=>{"use strict";_v();o(E5,"default")});var N_=N(()=>{"use strict";KH();E_();QH();ZH();JH()});var eW=N(()=>{"use strict"});var tW=N(()=>{"use strict"});var rW=N(()=>{"use strict"});var nW=N(()=>{"use strict"});function Dh(t,e){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(e).domain(t);break}return this}var Dv=N(()=>{"use strict";o(Dh,"initRange")});function bu(){var t=new k0,e=[],r=[],n=M_;function i(a){let s=t.get(a);if(s===void 0){if(n!==M_)return n;t.set(a,s=e.push(a)-1)}return r[s%r.length]}return o(i,"scale"),i.domain=function(a){if(!arguments.length)return e.slice();e=[],t=new k0;for(let s of a)t.has(s)||t.set(s,e.push(s)-1);return i},i.range=function(a){return arguments.length?(r=Array.from(a),i):r.slice()},i.unknown=function(a){return arguments.length?(n=a,i):n},i.copy=function(){return bu(e,r).unknown(n)},Dh.apply(i,arguments),i}var M_,I_=N(()=>{"use strict";Th();Dv();M_=Symbol("implicit");o(bu,"ordinal")});function B0(){var t=bu().unknown(void 0),e=t.domain,r=t.range,n=0,i=1,a,s,l=!1,u=0,h=0,f=.5;delete t.unknown;function d(){var p=e().length,m=i{"use strict";Th();Dv();I_();o(B0,"band")});function O_(t){return function(){return t}}var aW=N(()=>{"use strict";o(O_,"constants")});function P_(t){return+t}var sW=N(()=>{"use strict";o(P_,"number")});function F0(t){return t}function B_(t,e){return(e-=t=+t)?function(r){return(r-t)/e}:O_(isNaN(e)?NaN:.5)}function tTe(t,e){var r;return t>e&&(r=t,t=e,e=r),function(n){return Math.max(t,Math.min(e,n))}}function rTe(t,e,r){var n=t[0],i=t[1],a=e[0],s=e[1];return i2?nTe:rTe,u=h=null,d}o(f,"rescale");function d(p){return p==null||isNaN(p=+p)?a:(u||(u=l(t.map(n),e,r)))(n(s(p)))}return o(d,"scale"),d.invert=function(p){return s(i((h||(h=l(e,t.map(n),Ki)))(p)))},d.domain=function(p){return arguments.length?(t=Array.from(p,P_),f()):t.slice()},d.range=function(p){return arguments.length?(e=Array.from(p),f()):e.slice()},d.rangeRound=function(p){return e=Array.from(p),r=t5,f()},d.clamp=function(p){return arguments.length?(s=p?!0:F0,f()):s!==F0},d.interpolate=function(p){return arguments.length?(r=p,f()):r},d.unknown=function(p){return arguments.length?(a=p,d):a},function(p,m){return n=p,i=m,f()}}function Lv(){return iTe()(F0,F0)}var oW,F_=N(()=>{"use strict";Th();I0();aW();sW();oW=[0,1];o(F0,"identity");o(B_,"normalize");o(tTe,"clamper");o(rTe,"bimap");o(nTe,"polymap");o(S5,"copy");o(iTe,"transformer");o(Lv,"continuous")});function $_(t,e,r,n){var i=E0(t,e,r),a;switch(n=_h(n??",f"),n.type){case"s":{var s=Math.max(Math.abs(t),Math.abs(e));return n.precision==null&&!isNaN(a=k5(i,s))&&(n.precision=a),w5(n,s)}case"":case"e":case"g":case"p":case"r":{n.precision==null&&!isNaN(a=E5(i,Math.max(Math.abs(t),Math.abs(e))))&&(n.precision=a-(n.type==="e"));break}case"f":case"%":{n.precision==null&&!isNaN(a=T5(i))&&(n.precision=a-(n.type==="%")*2);break}}return b5(n)}var lW=N(()=>{"use strict";Th();N_();o($_,"tickFormat")});function aTe(t){var e=t.domain;return t.ticks=function(r){var n=e();return F3(n[0],n[n.length-1],r??10)},t.tickFormat=function(r,n){var i=e();return $_(i[0],i[i.length-1],r??10,n)},t.nice=function(r){r==null&&(r=10);var n=e(),i=0,a=n.length-1,s=n[i],l=n[a],u,h,f=10;for(l0;){if(h=av(s,l,r),h===u)return n[i]=s,n[a]=l,e(n);if(h>0)s=Math.floor(s/h)*h,l=Math.ceil(l/h)*h;else if(h<0)s=Math.ceil(s*h)/h,l=Math.floor(l*h)/h;else break;u=h}return t},t}function vl(){var t=Lv();return t.copy=function(){return S5(t,vl())},Dh.apply(t,arguments),aTe(t)}var cW=N(()=>{"use strict";Th();F_();Dv();lW();o(aTe,"linearish");o(vl,"linear")});function z_(t,e){t=t.slice();var r=0,n=t.length-1,i=t[r],a=t[n],s;return a{"use strict";o(z_,"nice")});function xn(t,e,r,n){function i(a){return t(a=arguments.length===0?new Date:new Date(+a)),a}return o(i,"interval"),i.floor=a=>(t(a=new Date(+a)),a),i.ceil=a=>(t(a=new Date(a-1)),e(a,1),t(a),a),i.round=a=>{let s=i(a),l=i.ceil(a);return a-s(e(a=new Date(+a),s==null?1:Math.floor(s)),a),i.range=(a,s,l)=>{let u=[];if(a=i.ceil(a),l=l==null?1:Math.floor(l),!(a0))return u;let h;do u.push(h=new Date(+a)),e(a,l),t(a);while(hxn(s=>{if(s>=s)for(;t(s),!a(s);)s.setTime(s-1)},(s,l)=>{if(s>=s)if(l<0)for(;++l<=0;)for(;e(s,-1),!a(s););else for(;--l>=0;)for(;e(s,1),!a(s););}),r&&(i.count=(a,s)=>(G_.setTime(+a),V_.setTime(+s),t(G_),t(V_),Math.floor(r(G_,V_))),i.every=a=>(a=Math.floor(a),!isFinite(a)||!(a>0)?null:a>1?i.filter(n?s=>n(s)%a===0:s=>i.count(0,s)%a===0):i)),i}var G_,V_,wu=N(()=>{"use strict";G_=new Date,V_=new Date;o(xn,"timeInterval")});var oc,hW,U_=N(()=>{"use strict";wu();oc=xn(()=>{},(t,e)=>{t.setTime(+t+e)},(t,e)=>e-t);oc.every=t=>(t=Math.floor(t),!isFinite(t)||!(t>0)?null:t>1?xn(e=>{e.setTime(Math.floor(e/t)*t)},(e,r)=>{e.setTime(+e+r*t)},(e,r)=>(r-e)/t):oc);hW=oc.range});var Zs,fW,H_=N(()=>{"use strict";wu();Zs=xn(t=>{t.setTime(t-t.getMilliseconds())},(t,e)=>{t.setTime(+t+e*1e3)},(t,e)=>(e-t)/1e3,t=>t.getUTCSeconds()),fW=Zs.range});var Tu,sTe,C5,oTe,W_=N(()=>{"use strict";wu();Tu=xn(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*1e3)},(t,e)=>{t.setTime(+t+e*6e4)},(t,e)=>(e-t)/6e4,t=>t.getMinutes()),sTe=Tu.range,C5=xn(t=>{t.setUTCSeconds(0,0)},(t,e)=>{t.setTime(+t+e*6e4)},(t,e)=>(e-t)/6e4,t=>t.getUTCMinutes()),oTe=C5.range});var ku,lTe,A5,cTe,q_=N(()=>{"use strict";wu();ku=xn(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*1e3-t.getMinutes()*6e4)},(t,e)=>{t.setTime(+t+e*36e5)},(t,e)=>(e-t)/36e5,t=>t.getHours()),lTe=ku.range,A5=xn(t=>{t.setUTCMinutes(0,0,0)},(t,e)=>{t.setTime(+t+e*36e5)},(t,e)=>(e-t)/36e5,t=>t.getUTCHours()),cTe=A5.range});var Do,uTe,Nv,hTe,_5,fTe,Y_=N(()=>{"use strict";wu();Do=xn(t=>t.setHours(0,0,0,0),(t,e)=>t.setDate(t.getDate()+e),(t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*6e4)/864e5,t=>t.getDate()-1),uTe=Do.range,Nv=xn(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/864e5,t=>t.getUTCDate()-1),hTe=Nv.range,_5=xn(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/864e5,t=>Math.floor(t/864e5)),fTe=_5.range});function Sd(t){return xn(e=>{e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)},(e,r)=>{e.setDate(e.getDate()+r*7)},(e,r)=>(r-e-(r.getTimezoneOffset()-e.getTimezoneOffset())*6e4)/6048e5)}function Cd(t){return xn(e=>{e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)},(e,r)=>{e.setUTCDate(e.getUTCDate()+r*7)},(e,r)=>(r-e)/6048e5)}var xl,Lh,D5,L5,cc,R5,N5,pW,dTe,pTe,mTe,gTe,yTe,vTe,Ad,$0,mW,gW,Rh,yW,vW,xW,xTe,bTe,wTe,TTe,kTe,ETe,X_=N(()=>{"use strict";wu();o(Sd,"timeWeekday");xl=Sd(0),Lh=Sd(1),D5=Sd(2),L5=Sd(3),cc=Sd(4),R5=Sd(5),N5=Sd(6),pW=xl.range,dTe=Lh.range,pTe=D5.range,mTe=L5.range,gTe=cc.range,yTe=R5.range,vTe=N5.range;o(Cd,"utcWeekday");Ad=Cd(0),$0=Cd(1),mW=Cd(2),gW=Cd(3),Rh=Cd(4),yW=Cd(5),vW=Cd(6),xW=Ad.range,xTe=$0.range,bTe=mW.range,wTe=gW.range,TTe=Rh.range,kTe=yW.range,ETe=vW.range});var Eu,STe,M5,CTe,j_=N(()=>{"use strict";wu();Eu=xn(t=>{t.setDate(1),t.setHours(0,0,0,0)},(t,e)=>{t.setMonth(t.getMonth()+e)},(t,e)=>e.getMonth()-t.getMonth()+(e.getFullYear()-t.getFullYear())*12,t=>t.getMonth()),STe=Eu.range,M5=xn(t=>{t.setUTCDate(1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCMonth(t.getUTCMonth()+e)},(t,e)=>e.getUTCMonth()-t.getUTCMonth()+(e.getUTCFullYear()-t.getUTCFullYear())*12,t=>t.getUTCMonth()),CTe=M5.range});var Js,ATe,bl,_Te,K_=N(()=>{"use strict";wu();Js=xn(t=>{t.setMonth(0,1),t.setHours(0,0,0,0)},(t,e)=>{t.setFullYear(t.getFullYear()+e)},(t,e)=>e.getFullYear()-t.getFullYear(),t=>t.getFullYear());Js.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:xn(e=>{e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)},(e,r)=>{e.setFullYear(e.getFullYear()+r*t)});ATe=Js.range,bl=xn(t=>{t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCFullYear(t.getUTCFullYear()+e)},(t,e)=>e.getUTCFullYear()-t.getUTCFullYear(),t=>t.getUTCFullYear());bl.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:xn(e=>{e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,r)=>{e.setUTCFullYear(e.getUTCFullYear()+r*t)});_Te=bl.range});function wW(t,e,r,n,i,a){let s=[[Zs,1,1e3],[Zs,5,5*1e3],[Zs,15,15*1e3],[Zs,30,30*1e3],[a,1,6e4],[a,5,5*6e4],[a,15,15*6e4],[a,30,30*6e4],[i,1,36e5],[i,3,3*36e5],[i,6,6*36e5],[i,12,12*36e5],[n,1,864e5],[n,2,2*864e5],[r,1,6048e5],[e,1,2592e6],[e,3,3*2592e6],[t,1,31536e6]];function l(h,f,d){let p=fv).right(s,p);if(m===s.length)return t.every(E0(h/31536e6,f/31536e6,d));if(m===0)return oc.every(Math.max(E0(h,f,d),1));let[g,y]=s[p/s[m-1][2]{"use strict";Th();U_();H_();W_();q_();Y_();X_();j_();K_();o(wW,"ticker");[LTe,RTe]=wW(bl,M5,Ad,_5,A5,C5),[Q_,Z_]=wW(Js,Eu,xl,Do,ku,Tu)});var I5=N(()=>{"use strict";U_();H_();W_();q_();Y_();X_();j_();K_();TW()});function J_(t){if(0<=t.y&&t.y<100){var e=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function e9(t){if(0<=t.y&&t.y<100){var e=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function Mv(t,e,r){return{y:t,m:e,d:r,H:0,M:0,S:0,L:0}}function t9(t){var e=t.dateTime,r=t.date,n=t.time,i=t.periods,a=t.days,s=t.shortDays,l=t.months,u=t.shortMonths,h=Iv(i),f=Ov(i),d=Iv(a),p=Ov(a),m=Iv(s),g=Ov(s),y=Iv(l),v=Ov(l),x=Iv(u),b=Ov(u),w={a:P,A:B,b:F,B:z,c:null,d:_W,e:_W,f:eke,g:uke,G:fke,H:QTe,I:ZTe,j:JTe,L:MW,m:tke,M:rke,p:$,q:U,Q:RW,s:NW,S:nke,u:ike,U:ake,V:ske,w:oke,W:lke,x:null,X:null,y:cke,Y:hke,Z:dke,"%":LW},C={a:Q,A:te,b:Y,B:he,c:null,d:DW,e:DW,f:yke,g:Ake,G:Dke,H:pke,I:mke,j:gke,L:OW,m:vke,M:xke,p:Z,q:ue,Q:RW,s:NW,S:bke,u:wke,U:Tke,V:kke,w:Eke,W:Ske,x:null,X:null,y:Cke,Y:_ke,Z:Lke,"%":LW},T={a:I,A:L,b:k,B:D,c:R,d:CW,e:CW,f:YTe,g:SW,G:EW,H:AW,I:AW,j:UTe,L:qTe,m:VTe,M:HTe,p:_,q:GTe,Q:jTe,s:KTe,S:WTe,u:PTe,U:BTe,V:FTe,w:OTe,W:$Te,x:O,X:M,y:SW,Y:EW,Z:zTe,"%":XTe};w.x=E(r,w),w.X=E(n,w),w.c=E(e,w),C.x=E(r,C),C.X=E(n,C),C.c=E(e,C);function E(K,j){return function(ne){var ee=[],ce=-1,le=0,J=K.length,Se,se,ae;for(ne instanceof Date||(ne=new Date(+ne));++ce53)return null;"w"in ee||(ee.w=1),"Z"in ee?(le=e9(Mv(ee.y,0,1)),J=le.getUTCDay(),le=J>4||J===0?$0.ceil(le):$0(le),le=Nv.offset(le,(ee.V-1)*7),ee.y=le.getUTCFullYear(),ee.m=le.getUTCMonth(),ee.d=le.getUTCDate()+(ee.w+6)%7):(le=J_(Mv(ee.y,0,1)),J=le.getDay(),le=J>4||J===0?Lh.ceil(le):Lh(le),le=Do.offset(le,(ee.V-1)*7),ee.y=le.getFullYear(),ee.m=le.getMonth(),ee.d=le.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),J="Z"in ee?e9(Mv(ee.y,0,1)).getUTCDay():J_(Mv(ee.y,0,1)).getDay(),ee.m=0,ee.d="W"in ee?(ee.w+6)%7+ee.W*7-(J+5)%7:ee.w+ee.U*7-(J+6)%7);return"Z"in ee?(ee.H+=ee.Z/100|0,ee.M+=ee.Z%100,e9(ee)):J_(ee)}}o(A,"newParse");function S(K,j,ne,ee){for(var ce=0,le=j.length,J=ne.length,Se,se;ce=J)return-1;if(Se=j.charCodeAt(ce++),Se===37){if(Se=j.charAt(ce++),se=T[Se in kW?j.charAt(ce++):Se],!se||(ee=se(K,ne,ee))<0)return-1}else if(Se!=ne.charCodeAt(ee++))return-1}return ee}o(S,"parseSpecifier");function _(K,j,ne){var ee=h.exec(j.slice(ne));return ee?(K.p=f.get(ee[0].toLowerCase()),ne+ee[0].length):-1}o(_,"parsePeriod");function I(K,j,ne){var ee=m.exec(j.slice(ne));return ee?(K.w=g.get(ee[0].toLowerCase()),ne+ee[0].length):-1}o(I,"parseShortWeekday");function L(K,j,ne){var ee=d.exec(j.slice(ne));return ee?(K.w=p.get(ee[0].toLowerCase()),ne+ee[0].length):-1}o(L,"parseWeekday");function k(K,j,ne){var ee=x.exec(j.slice(ne));return ee?(K.m=b.get(ee[0].toLowerCase()),ne+ee[0].length):-1}o(k,"parseShortMonth");function D(K,j,ne){var ee=y.exec(j.slice(ne));return ee?(K.m=v.get(ee[0].toLowerCase()),ne+ee[0].length):-1}o(D,"parseMonth");function R(K,j,ne){return S(K,e,j,ne)}o(R,"parseLocaleDateTime");function O(K,j,ne){return S(K,r,j,ne)}o(O,"parseLocaleDate");function M(K,j,ne){return S(K,n,j,ne)}o(M,"parseLocaleTime");function P(K){return s[K.getDay()]}o(P,"formatShortWeekday");function B(K){return a[K.getDay()]}o(B,"formatWeekday");function F(K){return u[K.getMonth()]}o(F,"formatShortMonth");function z(K){return l[K.getMonth()]}o(z,"formatMonth");function $(K){return i[+(K.getHours()>=12)]}o($,"formatPeriod");function U(K){return 1+~~(K.getMonth()/3)}o(U,"formatQuarter");function Q(K){return s[K.getUTCDay()]}o(Q,"formatUTCShortWeekday");function te(K){return a[K.getUTCDay()]}o(te,"formatUTCWeekday");function Y(K){return u[K.getUTCMonth()]}o(Y,"formatUTCShortMonth");function he(K){return l[K.getUTCMonth()]}o(he,"formatUTCMonth");function Z(K){return i[+(K.getUTCHours()>=12)]}o(Z,"formatUTCPeriod");function ue(K){return 1+~~(K.getUTCMonth()/3)}return o(ue,"formatUTCQuarter"),{format:o(function(K){var j=E(K+="",w);return j.toString=function(){return K},j},"format"),parse:o(function(K){var j=A(K+="",!1);return j.toString=function(){return K},j},"parse"),utcFormat:o(function(K){var j=E(K+="",C);return j.toString=function(){return K},j},"utcFormat"),utcParse:o(function(K){var j=A(K+="",!0);return j.toString=function(){return K},j},"utcParse")}}function Wr(t,e,r){var n=t<0?"-":"",i=(n?-t:t)+"",a=i.length;return n+(a[e.toLowerCase(),r]))}function OTe(t,e,r){var n=Qi.exec(e.slice(r,r+1));return n?(t.w=+n[0],r+n[0].length):-1}function PTe(t,e,r){var n=Qi.exec(e.slice(r,r+1));return n?(t.u=+n[0],r+n[0].length):-1}function BTe(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.U=+n[0],r+n[0].length):-1}function FTe(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.V=+n[0],r+n[0].length):-1}function $Te(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.W=+n[0],r+n[0].length):-1}function EW(t,e,r){var n=Qi.exec(e.slice(r,r+4));return n?(t.y=+n[0],r+n[0].length):-1}function SW(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.y=+n[0]+(+n[0]>68?1900:2e3),r+n[0].length):-1}function zTe(t,e,r){var n=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(r,r+6));return n?(t.Z=n[1]?0:-(n[2]+(n[3]||"00")),r+n[0].length):-1}function GTe(t,e,r){var n=Qi.exec(e.slice(r,r+1));return n?(t.q=n[0]*3-3,r+n[0].length):-1}function VTe(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.m=n[0]-1,r+n[0].length):-1}function CW(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.d=+n[0],r+n[0].length):-1}function UTe(t,e,r){var n=Qi.exec(e.slice(r,r+3));return n?(t.m=0,t.d=+n[0],r+n[0].length):-1}function AW(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.H=+n[0],r+n[0].length):-1}function HTe(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.M=+n[0],r+n[0].length):-1}function WTe(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.S=+n[0],r+n[0].length):-1}function qTe(t,e,r){var n=Qi.exec(e.slice(r,r+3));return n?(t.L=+n[0],r+n[0].length):-1}function YTe(t,e,r){var n=Qi.exec(e.slice(r,r+6));return n?(t.L=Math.floor(n[0]/1e3),r+n[0].length):-1}function XTe(t,e,r){var n=NTe.exec(e.slice(r,r+1));return n?r+n[0].length:-1}function jTe(t,e,r){var n=Qi.exec(e.slice(r));return n?(t.Q=+n[0],r+n[0].length):-1}function KTe(t,e,r){var n=Qi.exec(e.slice(r));return n?(t.s=+n[0],r+n[0].length):-1}function _W(t,e){return Wr(t.getDate(),e,2)}function QTe(t,e){return Wr(t.getHours(),e,2)}function ZTe(t,e){return Wr(t.getHours()%12||12,e,2)}function JTe(t,e){return Wr(1+Do.count(Js(t),t),e,3)}function MW(t,e){return Wr(t.getMilliseconds(),e,3)}function eke(t,e){return MW(t,e)+"000"}function tke(t,e){return Wr(t.getMonth()+1,e,2)}function rke(t,e){return Wr(t.getMinutes(),e,2)}function nke(t,e){return Wr(t.getSeconds(),e,2)}function ike(t){var e=t.getDay();return e===0?7:e}function ake(t,e){return Wr(xl.count(Js(t)-1,t),e,2)}function IW(t){var e=t.getDay();return e>=4||e===0?cc(t):cc.ceil(t)}function ske(t,e){return t=IW(t),Wr(cc.count(Js(t),t)+(Js(t).getDay()===4),e,2)}function oke(t){return t.getDay()}function lke(t,e){return Wr(Lh.count(Js(t)-1,t),e,2)}function cke(t,e){return Wr(t.getFullYear()%100,e,2)}function uke(t,e){return t=IW(t),Wr(t.getFullYear()%100,e,2)}function hke(t,e){return Wr(t.getFullYear()%1e4,e,4)}function fke(t,e){var r=t.getDay();return t=r>=4||r===0?cc(t):cc.ceil(t),Wr(t.getFullYear()%1e4,e,4)}function dke(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+Wr(e/60|0,"0",2)+Wr(e%60,"0",2)}function DW(t,e){return Wr(t.getUTCDate(),e,2)}function pke(t,e){return Wr(t.getUTCHours(),e,2)}function mke(t,e){return Wr(t.getUTCHours()%12||12,e,2)}function gke(t,e){return Wr(1+Nv.count(bl(t),t),e,3)}function OW(t,e){return Wr(t.getUTCMilliseconds(),e,3)}function yke(t,e){return OW(t,e)+"000"}function vke(t,e){return Wr(t.getUTCMonth()+1,e,2)}function xke(t,e){return Wr(t.getUTCMinutes(),e,2)}function bke(t,e){return Wr(t.getUTCSeconds(),e,2)}function wke(t){var e=t.getUTCDay();return e===0?7:e}function Tke(t,e){return Wr(Ad.count(bl(t)-1,t),e,2)}function PW(t){var e=t.getUTCDay();return e>=4||e===0?Rh(t):Rh.ceil(t)}function kke(t,e){return t=PW(t),Wr(Rh.count(bl(t),t)+(bl(t).getUTCDay()===4),e,2)}function Eke(t){return t.getUTCDay()}function Ske(t,e){return Wr($0.count(bl(t)-1,t),e,2)}function Cke(t,e){return Wr(t.getUTCFullYear()%100,e,2)}function Ake(t,e){return t=PW(t),Wr(t.getUTCFullYear()%100,e,2)}function _ke(t,e){return Wr(t.getUTCFullYear()%1e4,e,4)}function Dke(t,e){var r=t.getUTCDay();return t=r>=4||r===0?Rh(t):Rh.ceil(t),Wr(t.getUTCFullYear()%1e4,e,4)}function Lke(){return"+0000"}function LW(){return"%"}function RW(t){return+t}function NW(t){return Math.floor(+t/1e3)}var kW,Qi,NTe,MTe,BW=N(()=>{"use strict";I5();o(J_,"localDate");o(e9,"utcDate");o(Mv,"newDate");o(t9,"formatLocale");kW={"-":"",_:" ",0:"0"},Qi=/^\s*\d+/,NTe=/^%/,MTe=/[\\^$*+?|[\]().{}]/g;o(Wr,"pad");o(ITe,"requote");o(Iv,"formatRe");o(Ov,"formatLookup");o(OTe,"parseWeekdayNumberSunday");o(PTe,"parseWeekdayNumberMonday");o(BTe,"parseWeekNumberSunday");o(FTe,"parseWeekNumberISO");o($Te,"parseWeekNumberMonday");o(EW,"parseFullYear");o(SW,"parseYear");o(zTe,"parseZone");o(GTe,"parseQuarter");o(VTe,"parseMonthNumber");o(CW,"parseDayOfMonth");o(UTe,"parseDayOfYear");o(AW,"parseHour24");o(HTe,"parseMinutes");o(WTe,"parseSeconds");o(qTe,"parseMilliseconds");o(YTe,"parseMicroseconds");o(XTe,"parseLiteralPercent");o(jTe,"parseUnixTimestamp");o(KTe,"parseUnixTimestampSeconds");o(_W,"formatDayOfMonth");o(QTe,"formatHour24");o(ZTe,"formatHour12");o(JTe,"formatDayOfYear");o(MW,"formatMilliseconds");o(eke,"formatMicroseconds");o(tke,"formatMonthNumber");o(rke,"formatMinutes");o(nke,"formatSeconds");o(ike,"formatWeekdayNumberMonday");o(ake,"formatWeekNumberSunday");o(IW,"dISO");o(ske,"formatWeekNumberISO");o(oke,"formatWeekdayNumberSunday");o(lke,"formatWeekNumberMonday");o(cke,"formatYear");o(uke,"formatYearISO");o(hke,"formatFullYear");o(fke,"formatFullYearISO");o(dke,"formatZone");o(DW,"formatUTCDayOfMonth");o(pke,"formatUTCHour24");o(mke,"formatUTCHour12");o(gke,"formatUTCDayOfYear");o(OW,"formatUTCMilliseconds");o(yke,"formatUTCMicroseconds");o(vke,"formatUTCMonthNumber");o(xke,"formatUTCMinutes");o(bke,"formatUTCSeconds");o(wke,"formatUTCWeekdayNumberMonday");o(Tke,"formatUTCWeekNumberSunday");o(PW,"UTCdISO");o(kke,"formatUTCWeekNumberISO");o(Eke,"formatUTCWeekdayNumberSunday");o(Ske,"formatUTCWeekNumberMonday");o(Cke,"formatUTCYear");o(Ake,"formatUTCYearISO");o(_ke,"formatUTCFullYear");o(Dke,"formatUTCFullYearISO");o(Lke,"formatUTCZone");o(LW,"formatLiteralPercent");o(RW,"formatUnixTimestamp");o(NW,"formatUnixTimestampSeconds")});function r9(t){return z0=t9(t),_d=z0.format,FW=z0.parse,$W=z0.utcFormat,zW=z0.utcParse,z0}var z0,_d,FW,$W,zW,GW=N(()=>{"use strict";BW();r9({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"]});o(r9,"defaultLocale")});var n9=N(()=>{"use strict";GW()});function Rke(t){return new Date(t)}function Nke(t){return t instanceof Date?+t:+new Date(+t)}function VW(t,e,r,n,i,a,s,l,u,h){var f=Lv(),d=f.invert,p=f.domain,m=h(".%L"),g=h(":%S"),y=h("%I:%M"),v=h("%I %p"),x=h("%a %d"),b=h("%b %d"),w=h("%B"),C=h("%Y");function T(E){return(u(E){"use strict";I5();n9();F_();Dv();uW();o(Rke,"date");o(Nke,"number");o(VW,"calendar");o(O5,"time")});var HW=N(()=>{"use strict";iW();cW();I_();UW()});function i9(t){for(var e=t.length/6|0,r=new Array(e),n=0;n{"use strict";o(i9,"default")});var a9,qW=N(()=>{"use strict";WW();a9=i9("4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab")});var YW=N(()=>{"use strict";qW()});function Bn(t){return o(function(){return t},"constant")}var P5=N(()=>{"use strict";o(Bn,"default")});function jW(t){return t>1?0:t<-1?G0:Math.acos(t)}function o9(t){return t>=1?Pv:t<=-1?-Pv:Math.asin(t)}var s9,fa,Nh,XW,B5,wl,Dd,Zi,G0,Pv,V0,F5=N(()=>{"use strict";s9=Math.abs,fa=Math.atan2,Nh=Math.cos,XW=Math.max,B5=Math.min,wl=Math.sin,Dd=Math.sqrt,Zi=1e-12,G0=Math.PI,Pv=G0/2,V0=2*G0;o(jW,"acos");o(o9,"asin")});function $5(t){let e=3;return t.digits=function(r){if(!arguments.length)return e;if(r==null)e=null;else{let n=Math.floor(r);if(!(n>=0))throw new RangeError(`invalid digits: ${r}`);e=n}return t},()=>new wd(e)}var l9=N(()=>{"use strict";b_();o($5,"withPath")});function Mke(t){return t.innerRadius}function Ike(t){return t.outerRadius}function Oke(t){return t.startAngle}function Pke(t){return t.endAngle}function Bke(t){return t&&t.padAngle}function Fke(t,e,r,n,i,a,s,l){var u=r-t,h=n-e,f=s-i,d=l-a,p=d*u-f*h;if(!(p*pR*R+O*O&&(S=I,_=L),{cx:S,cy:_,x01:-f,y01:-d,x11:S*(i/T-1),y11:_*(i/T-1)}}function Tl(){var t=Mke,e=Ike,r=Bn(0),n=null,i=Oke,a=Pke,s=Bke,l=null,u=$5(h);function h(){var f,d,p=+t.apply(this,arguments),m=+e.apply(this,arguments),g=i.apply(this,arguments)-Pv,y=a.apply(this,arguments)-Pv,v=s9(y-g),x=y>g;if(l||(l=f=u()),mZi))l.moveTo(0,0);else if(v>V0-Zi)l.moveTo(m*Nh(g),m*wl(g)),l.arc(0,0,m,g,y,!x),p>Zi&&(l.moveTo(p*Nh(y),p*wl(y)),l.arc(0,0,p,y,g,x));else{var b=g,w=y,C=g,T=y,E=v,A=v,S=s.apply(this,arguments)/2,_=S>Zi&&(n?+n.apply(this,arguments):Dd(p*p+m*m)),I=B5(s9(m-p)/2,+r.apply(this,arguments)),L=I,k=I,D,R;if(_>Zi){var O=o9(_/p*wl(S)),M=o9(_/m*wl(S));(E-=O*2)>Zi?(O*=x?1:-1,C+=O,T-=O):(E=0,C=T=(g+y)/2),(A-=M*2)>Zi?(M*=x?1:-1,b+=M,w-=M):(A=0,b=w=(g+y)/2)}var P=m*Nh(b),B=m*wl(b),F=p*Nh(T),z=p*wl(T);if(I>Zi){var $=m*Nh(w),U=m*wl(w),Q=p*Nh(C),te=p*wl(C),Y;if(vZi?k>Zi?(D=z5(Q,te,P,B,m,k,x),R=z5($,U,F,z,m,k,x),l.moveTo(D.cx+D.x01,D.cy+D.y01),kZi)||!(E>Zi)?l.lineTo(F,z):L>Zi?(D=z5(F,z,$,U,p,-L,x),R=z5(P,B,Q,te,p,-L,x),l.lineTo(D.cx+D.x01,D.cy+D.y01),L{"use strict";P5();F5();l9();o(Mke,"arcInnerRadius");o(Ike,"arcOuterRadius");o(Oke,"arcStartAngle");o(Pke,"arcEndAngle");o(Bke,"arcPadAngle");o(Fke,"intersect");o(z5,"cornerTangents");o(Tl,"default")});function Bv(t){return typeof t=="object"&&"length"in t?t:Array.from(t)}var kyt,c9=N(()=>{"use strict";kyt=Array.prototype.slice;o(Bv,"default")});function QW(t){this._context=t}function Su(t){return new QW(t)}var u9=N(()=>{"use strict";o(QW,"Linear");QW.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._context.lineTo(t,e);break}},"point")};o(Su,"default")});function ZW(t){return t[0]}function JW(t){return t[1]}var eq=N(()=>{"use strict";o(ZW,"x");o(JW,"y")});function kl(t,e){var r=Bn(!0),n=null,i=Su,a=null,s=$5(l);t=typeof t=="function"?t:t===void 0?ZW:Bn(t),e=typeof e=="function"?e:e===void 0?JW:Bn(e);function l(u){var h,f=(u=Bv(u)).length,d,p=!1,m;for(n==null&&(a=i(m=s())),h=0;h<=f;++h)!(h{"use strict";c9();P5();u9();l9();eq();o(kl,"default")});function h9(t,e){return et?1:e>=t?0:NaN}var rq=N(()=>{"use strict";o(h9,"default")});function f9(t){return t}var nq=N(()=>{"use strict";o(f9,"default")});function G5(){var t=f9,e=h9,r=null,n=Bn(0),i=Bn(V0),a=Bn(0);function s(l){var u,h=(l=Bv(l)).length,f,d,p=0,m=new Array(h),g=new Array(h),y=+n.apply(this,arguments),v=Math.min(V0,Math.max(-V0,i.apply(this,arguments)-y)),x,b=Math.min(Math.abs(v)/h,a.apply(this,arguments)),w=b*(v<0?-1:1),C;for(u=0;u0&&(p+=C);for(e!=null?m.sort(function(T,E){return e(g[T],g[E])}):r!=null&&m.sort(function(T,E){return r(l[T],l[E])}),u=0,d=p?(v-h*w)/p:0;u0?C*d:0)+w,g[f]={data:l[f],index:u,value:C,startAngle:y,endAngle:x,padAngle:b};return g}return o(s,"pie"),s.value=function(l){return arguments.length?(t=typeof l=="function"?l:Bn(+l),s):t},s.sortValues=function(l){return arguments.length?(e=l,r=null,s):e},s.sort=function(l){return arguments.length?(r=l,e=null,s):r},s.startAngle=function(l){return arguments.length?(n=typeof l=="function"?l:Bn(+l),s):n},s.endAngle=function(l){return arguments.length?(i=typeof l=="function"?l:Bn(+l),s):i},s.padAngle=function(l){return arguments.length?(a=typeof l=="function"?l:Bn(+l),s):a},s}var iq=N(()=>{"use strict";c9();P5();rq();nq();F5();o(G5,"default")});function Fv(t){return new V5(t,!0)}function $v(t){return new V5(t,!1)}var V5,aq=N(()=>{"use strict";V5=class{static{o(this,"Bump")}constructor(e,r){this._context=e,this._x=r}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(e,r){switch(e=+e,r=+r,this._point){case 0:{this._point=1,this._line?this._context.lineTo(e,r):this._context.moveTo(e,r);break}case 1:this._point=2;default:{this._x?this._context.bezierCurveTo(this._x0=(this._x0+e)/2,this._y0,this._x0,r,e,r):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+r)/2,e,this._y0,e,r);break}}this._x0=e,this._y0=r}};o(Fv,"bumpX");o($v,"bumpY")});function eo(){}var zv=N(()=>{"use strict";o(eo,"default")});function U0(t,e,r){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+r)/6)}function Gv(t){this._context=t}function Lo(t){return new Gv(t)}var Vv=N(()=>{"use strict";o(U0,"point");o(Gv,"Basis");Gv.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 3:U0(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},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);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:U0(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e},"point")};o(Lo,"default")});function sq(t){this._context=t}function U5(t){return new sq(t)}var oq=N(()=>{"use strict";zv();Vv();o(sq,"BasisClosed");sq.prototype={areaStart:eo,areaEnd:eo,lineStart:o(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},"lineStart"),lineEnd:o(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}}},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:U0(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e},"point")};o(U5,"default")});function lq(t){this._context=t}function H5(t){return new lq(t)}var cq=N(()=>{"use strict";Vv();o(lq,"BasisOpen");lq.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var r=(this._x0+4*this._x1+t)/6,n=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(r,n):this._context.moveTo(r,n);break;case 3:this._point=4;default:U0(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e},"point")};o(H5,"default")});function uq(t,e){this._basis=new Gv(t),this._beta=e}var d9,hq=N(()=>{"use strict";Vv();o(uq,"Bundle");uq.prototype={lineStart:o(function(){this._x=[],this._y=[],this._basis.lineStart()},"lineStart"),lineEnd:o(function(){var t=this._x,e=this._y,r=t.length-1;if(r>0)for(var n=t[0],i=e[0],a=t[r]-n,s=e[r]-i,l=-1,u;++l<=r;)u=l/r,this._basis.point(this._beta*t[l]+(1-this._beta)*(n+u*a),this._beta*e[l]+(1-this._beta)*(i+u*s));this._x=this._y=null,this._basis.lineEnd()},"lineEnd"),point:o(function(t,e){this._x.push(+t),this._y.push(+e)},"point")};d9=o(function t(e){function r(n){return e===1?new Gv(n):new uq(n,e)}return o(r,"bundle"),r.beta=function(n){return t(+n)},r},"custom")(.85)});function H0(t,e,r){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-e),t._y2+t._k*(t._y1-r),t._x2,t._y2)}function W5(t,e){this._context=t,this._k=(1-e)/6}var Uv,Hv=N(()=>{"use strict";o(H0,"point");o(W5,"Cardinal");W5.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:H0(this,this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2,this._x1=t,this._y1=e;break;case 2:this._point=3;default:H0(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};Uv=o(function t(e){function r(n){return new W5(n,e)}return o(r,"cardinal"),r.tension=function(n){return t(+n)},r},"custom")(0)});function q5(t,e){this._context=t,this._k=(1-e)/6}var p9,m9=N(()=>{"use strict";zv();Hv();o(q5,"CardinalClosed");q5.prototype={areaStart:eo,areaEnd:eo,lineStart:o(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},"lineStart"),lineEnd:o(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}}},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:H0(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};p9=o(function t(e){function r(n){return new q5(n,e)}return o(r,"cardinal"),r.tension=function(n){return t(+n)},r},"custom")(0)});function Y5(t,e){this._context=t,this._k=(1-e)/6}var g9,y9=N(()=>{"use strict";Hv();o(Y5,"CardinalOpen");Y5.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,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:H0(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};g9=o(function t(e){function r(n){return new Y5(n,e)}return o(r,"cardinal"),r.tension=function(n){return t(+n)},r},"custom")(0)});function Wv(t,e,r){var n=t._x1,i=t._y1,a=t._x2,s=t._y2;if(t._l01_a>Zi){var l=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,u=3*t._l01_a*(t._l01_a+t._l12_a);n=(n*l-t._x0*t._l12_2a+t._x2*t._l01_2a)/u,i=(i*l-t._y0*t._l12_2a+t._y2*t._l01_2a)/u}if(t._l23_a>Zi){var h=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,f=3*t._l23_a*(t._l23_a+t._l12_a);a=(a*h+t._x1*t._l23_2a-e*t._l12_2a)/f,s=(s*h+t._y1*t._l23_2a-r*t._l12_2a)/f}t._context.bezierCurveTo(n,i,a,s,t._x2,t._y2)}function fq(t,e){this._context=t,this._alpha=e}var qv,X5=N(()=>{"use strict";F5();Hv();o(Wv,"point");o(fq,"CatmullRom");fq.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(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},"lineStart"),lineEnd:o(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},"lineEnd"),point:o(function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3;default:Wv(this,t,e);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=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};qv=o(function t(e){function r(n){return e?new fq(n,e):new W5(n,0)}return o(r,"catmullRom"),r.alpha=function(n){return t(+n)},r},"custom")(.5)});function dq(t,e){this._context=t,this._alpha=e}var v9,pq=N(()=>{"use strict";m9();zv();X5();o(dq,"CatmullRomClosed");dq.prototype={areaStart:eo,areaEnd:eo,lineStart:o(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},"lineStart"),lineEnd:o(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}}},"lineEnd"),point:o(function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:Wv(this,t,e);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=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};v9=o(function t(e){function r(n){return e?new dq(n,e):new q5(n,0)}return o(r,"catmullRom"),r.alpha=function(n){return t(+n)},r},"custom")(.5)});function mq(t,e){this._context=t,this._alpha=e}var x9,gq=N(()=>{"use strict";y9();X5();o(mq,"CatmullRomOpen");mq.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(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},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,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:Wv(this,t,e);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=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};x9=o(function t(e){function r(n){return e?new mq(n,e):new Y5(n,0)}return o(r,"catmullRom"),r.alpha=function(n){return t(+n)},r},"custom")(.5)});function yq(t){this._context=t}function j5(t){return new yq(t)}var vq=N(()=>{"use strict";zv();o(yq,"LinearClosed");yq.prototype={areaStart:eo,areaEnd:eo,lineStart:o(function(){this._point=0},"lineStart"),lineEnd:o(function(){this._point&&this._context.closePath()},"lineEnd"),point:o(function(t,e){t=+t,e=+e,this._point?this._context.lineTo(t,e):(this._point=1,this._context.moveTo(t,e))},"point")};o(j5,"default")});function xq(t){return t<0?-1:1}function bq(t,e,r){var n=t._x1-t._x0,i=e-t._x1,a=(t._y1-t._y0)/(n||i<0&&-0),s=(r-t._y1)/(i||n<0&&-0),l=(a*i+s*n)/(n+i);return(xq(a)+xq(s))*Math.min(Math.abs(a),Math.abs(s),.5*Math.abs(l))||0}function wq(t,e){var r=t._x1-t._x0;return r?(3*(t._y1-t._y0)/r-e)/2:e}function b9(t,e,r){var n=t._x0,i=t._y0,a=t._x1,s=t._y1,l=(a-n)/3;t._context.bezierCurveTo(n+l,i+l*e,a-l,s-l*r,a,s)}function K5(t){this._context=t}function Tq(t){this._context=new kq(t)}function kq(t){this._context=t}function Yv(t){return new K5(t)}function Xv(t){return new Tq(t)}var Eq=N(()=>{"use strict";o(xq,"sign");o(bq,"slope3");o(wq,"slope2");o(b9,"point");o(K5,"MonotoneX");K5.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:b9(this,this._t0,wq(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){var r=NaN;if(t=+t,e=+e,!(t===this._x1&&e===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,b9(this,wq(this,r=bq(this,t,e)),r);break;default:b9(this,this._t0,r=bq(this,t,e));break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e,this._t0=r}},"point")};o(Tq,"MonotoneY");(Tq.prototype=Object.create(K5.prototype)).point=function(t,e){K5.prototype.point.call(this,e,t)};o(kq,"ReflectContext");kq.prototype={moveTo:o(function(t,e){this._context.moveTo(e,t)},"moveTo"),closePath:o(function(){this._context.closePath()},"closePath"),lineTo:o(function(t,e){this._context.lineTo(e,t)},"lineTo"),bezierCurveTo:o(function(t,e,r,n,i,a){this._context.bezierCurveTo(e,t,n,r,a,i)},"bezierCurveTo")};o(Yv,"monotoneX");o(Xv,"monotoneY")});function Cq(t){this._context=t}function Sq(t){var e,r=t.length-1,n,i=new Array(r),a=new Array(r),s=new Array(r);for(i[0]=0,a[0]=2,s[0]=t[0]+2*t[1],e=1;e=0;--e)i[e]=(s[e]-i[e+1])/a[e];for(a[r-1]=(t[r]+i[r-1])/2,e=0;e{"use strict";o(Cq,"Natural");Cq.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x=[],this._y=[]},"lineStart"),lineEnd:o(function(){var t=this._x,e=this._y,r=t.length;if(r)if(this._line?this._context.lineTo(t[0],e[0]):this._context.moveTo(t[0],e[0]),r===2)this._context.lineTo(t[1],e[1]);else for(var n=Sq(t),i=Sq(e),a=0,s=1;s{"use strict";o(Q5,"Step");Q5.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x=this._y=NaN,this._point=0},"lineStart"),lineEnd:o(function(){0=0&&(this._t=1-this._t,this._line=1-this._line)},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:{if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var r=this._x*(1-this._t)+t*this._t;this._context.lineTo(r,this._y),this._context.lineTo(r,e)}break}}this._x=t,this._y=e},"point")};o(q0,"default");o(jv,"stepBefore");o(Kv,"stepAfter")});var Dq=N(()=>{"use strict";KW();tq();iq();oq();cq();Vv();aq();hq();m9();y9();Hv();pq();gq();X5();vq();u9();Eq();Aq();_q()});var Lq=N(()=>{"use strict"});var Rq=N(()=>{"use strict"});function Mh(t,e,r){this.k=t,this.x=e,this.y=r}function T9(t){for(;!t.__zoom;)if(!(t=t.parentNode))return w9;return t.__zoom}var w9,k9=N(()=>{"use strict";o(Mh,"Transform");Mh.prototype={constructor:Mh,scale:o(function(t){return t===1?this:new Mh(this.k*t,this.x,this.y)},"scale"),translate:o(function(t,e){return t===0&e===0?this:new Mh(this.k,this.x+this.k*t,this.y+this.k*e)},"translate"),apply:o(function(t){return[t[0]*this.k+this.x,t[1]*this.k+this.y]},"apply"),applyX:o(function(t){return t*this.k+this.x},"applyX"),applyY:o(function(t){return t*this.k+this.y},"applyY"),invert:o(function(t){return[(t[0]-this.x)/this.k,(t[1]-this.y)/this.k]},"invert"),invertX:o(function(t){return(t-this.x)/this.k},"invertX"),invertY:o(function(t){return(t-this.y)/this.k},"invertY"),rescaleX:o(function(t){return t.copy().domain(t.range().map(this.invertX,this).map(t.invert,t))},"rescaleX"),rescaleY:o(function(t){return t.copy().domain(t.range().map(this.invertY,this).map(t.invert,t))},"rescaleY"),toString:o(function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"},"toString")};w9=new Mh(1,0,0);T9.prototype=Mh.prototype;o(T9,"transform")});var Nq=N(()=>{"use strict"});var Mq=N(()=>{"use strict";m5();Lq();Rq();k9();Nq()});var Iq=N(()=>{"use strict";Mq();k9()});var pr=N(()=>{"use strict";Th();hV();LH();IH();R0();OH();PH();AA();rU();BH();m_();FH();zH();N_();eW();tW();I0();b_();rW();$H();nW();HW();YW();pl();Dq();I5();n9();c5();m5();Iq()});var Oq=Ii(Ji=>{"use strict";Object.defineProperty(Ji,"__esModule",{value:!0});Ji.BLANK_URL=Ji.relativeFirstCharacters=Ji.whitespaceEscapeCharsRegex=Ji.urlSchemeRegex=Ji.ctrlCharactersRegex=Ji.htmlCtrlEntityRegex=Ji.htmlEntitiesRegex=Ji.invalidProtocolRegex=void 0;Ji.invalidProtocolRegex=/^([^\w]*)(javascript|data|vbscript)/im;Ji.htmlEntitiesRegex=/&#(\w+)(^\w|;)?/g;Ji.htmlCtrlEntityRegex=/&(newline|tab);/gi;Ji.ctrlCharactersRegex=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim;Ji.urlSchemeRegex=/^.+(:|:)/gim;Ji.whitespaceEscapeCharsRegex=/(\\|%5[cC])((%(6[eE]|72|74))|[nrt])/g;Ji.relativeFirstCharacters=[".","/"];Ji.BLANK_URL="about:blank"});var Y0=Ii(Z5=>{"use strict";Object.defineProperty(Z5,"__esModule",{value:!0});Z5.sanitizeUrl=void 0;var Aa=Oq();function $ke(t){return Aa.relativeFirstCharacters.indexOf(t[0])>-1}o($ke,"isRelativeUrlWithoutProtocol");function zke(t){var e=t.replace(Aa.ctrlCharactersRegex,"");return e.replace(Aa.htmlEntitiesRegex,function(r,n){return String.fromCharCode(n)})}o(zke,"decodeHtmlCharacters");function Gke(t){return URL.canParse(t)}o(Gke,"isValidUrl");function Pq(t){try{return decodeURIComponent(t)}catch{return t}}o(Pq,"decodeURI");function Vke(t){if(!t)return Aa.BLANK_URL;var e,r=Pq(t.trim());do r=zke(r).replace(Aa.htmlCtrlEntityRegex,"").replace(Aa.ctrlCharactersRegex,"").replace(Aa.whitespaceEscapeCharsRegex,"").trim(),r=Pq(r),e=r.match(Aa.ctrlCharactersRegex)||r.match(Aa.htmlEntitiesRegex)||r.match(Aa.htmlCtrlEntityRegex)||r.match(Aa.whitespaceEscapeCharsRegex);while(e&&e.length>0);var n=r;if(!n)return Aa.BLANK_URL;if($ke(n))return n;var i=n.trimStart(),a=i.match(Aa.urlSchemeRegex);if(!a)return n;var s=a[0].toLowerCase().trim();if(Aa.invalidProtocolRegex.test(s))return Aa.BLANK_URL;var l=i.replace(/\\/g,"/");if(s==="mailto:"||s.includes("://"))return l;if(s==="http:"||s==="https:"){if(!Gke(l))return Aa.BLANK_URL;var u=new URL(l);return u.protocol=u.protocol.toLowerCase(),u.hostname=u.hostname.toLowerCase(),u.toString()}return l}o(Vke,"sanitizeUrl");Z5.sanitizeUrl=Vke});var E9,Ld,J5,Bq,Fq,$q,El,Qv,Zv=N(()=>{"use strict";E9=Sa(Y0(),1);dr();Ld=o((t,e)=>{let r=t.append("rect");if(r.attr("x",e.x),r.attr("y",e.y),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("width",e.width),r.attr("height",e.height),e.name&&r.attr("name",e.name),e.rx&&r.attr("rx",e.rx),e.ry&&r.attr("ry",e.ry),e.attrs!==void 0)for(let n in e.attrs)r.attr(n,e.attrs[n]);return e.class&&r.attr("class",e.class),r},"drawRect"),J5=o((t,e)=>{let r={x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,stroke:e.stroke,class:"rect"};Ld(t,r).lower()},"drawBackgroundRect"),Bq=o((t,e)=>{let r=e.text.replace(cd," "),n=t.append("text");n.attr("x",e.x),n.attr("y",e.y),n.attr("class","legend"),n.style("text-anchor",e.anchor),e.class&&n.attr("class",e.class);let i=n.append("tspan");return i.attr("x",e.x+e.textMargin*2),i.text(r),n},"drawText"),Fq=o((t,e,r,n)=>{let i=t.append("image");i.attr("x",e),i.attr("y",r);let a=(0,E9.sanitizeUrl)(n);i.attr("xlink:href",a)},"drawImage"),$q=o((t,e,r,n)=>{let i=t.append("use");i.attr("x",e),i.attr("y",r);let a=(0,E9.sanitizeUrl)(n);i.attr("xlink:href",`#${a}`)},"drawEmbeddedImage"),El=o(()=>({x:0,y:0,width:100,height:100,fill:"#EDF2AE",stroke:"#666",anchor:"start",rx:0,ry:0}),"getNoteRect"),Qv=o(()=>({x:0,y:0,width:100,height:100,"text-anchor":"start",style:"#666",textMargin:0,rx:0,ry:0,tspan:!0}),"getTextObj")});var zq,S9,Gq,Uke,Hke,Wke,qke,Yke,Xke,jke,Kke,Qke,Zke,Jke,eEe,Cu,Sl,Vq=N(()=>{"use strict";dr();Zv();zq=Sa(Y0(),1),S9=o(function(t,e){return Ld(t,e)},"drawRect"),Gq=o(function(t,e,r,n,i,a){let s=t.append("image");s.attr("width",e),s.attr("height",r),s.attr("x",n),s.attr("y",i);let l=a.startsWith("data:image/png;base64")?a:(0,zq.sanitizeUrl)(a);s.attr("xlink:href",l)},"drawImage"),Uke=o((t,e,r)=>{let n=t.append("g"),i=0;for(let a of e){let s=a.textColor?a.textColor:"#444444",l=a.lineColor?a.lineColor:"#444444",u=a.offsetX?parseInt(a.offsetX):0,h=a.offsetY?parseInt(a.offsetY):0,f="";if(i===0){let p=n.append("line");p.attr("x1",a.startPoint.x),p.attr("y1",a.startPoint.y),p.attr("x2",a.endPoint.x),p.attr("y2",a.endPoint.y),p.attr("stroke-width","1"),p.attr("stroke",l),p.style("fill","none"),a.type!=="rel_b"&&p.attr("marker-end","url("+f+"#arrowhead)"),(a.type==="birel"||a.type==="rel_b")&&p.attr("marker-start","url("+f+"#arrowend)"),i=-1}else{let p=n.append("path");p.attr("fill","none").attr("stroke-width","1").attr("stroke",l).attr("d","Mstartx,starty Qcontrolx,controly stopx,stopy ".replaceAll("startx",a.startPoint.x).replaceAll("starty",a.startPoint.y).replaceAll("controlx",a.startPoint.x+(a.endPoint.x-a.startPoint.x)/2-(a.endPoint.x-a.startPoint.x)/4).replaceAll("controly",a.startPoint.y+(a.endPoint.y-a.startPoint.y)/2).replaceAll("stopx",a.endPoint.x).replaceAll("stopy",a.endPoint.y)),a.type!=="rel_b"&&p.attr("marker-end","url("+f+"#arrowhead)"),(a.type==="birel"||a.type==="rel_b")&&p.attr("marker-start","url("+f+"#arrowend)")}let d=r.messageFont();Cu(r)(a.label.text,n,Math.min(a.startPoint.x,a.endPoint.x)+Math.abs(a.endPoint.x-a.startPoint.x)/2+u,Math.min(a.startPoint.y,a.endPoint.y)+Math.abs(a.endPoint.y-a.startPoint.y)/2+h,a.label.width,a.label.height,{fill:s},d),a.techn&&a.techn.text!==""&&(d=r.messageFont(),Cu(r)("["+a.techn.text+"]",n,Math.min(a.startPoint.x,a.endPoint.x)+Math.abs(a.endPoint.x-a.startPoint.x)/2+u,Math.min(a.startPoint.y,a.endPoint.y)+Math.abs(a.endPoint.y-a.startPoint.y)/2+r.messageFontSize+5+h,Math.max(a.label.width,a.techn.width),a.techn.height,{fill:s,"font-style":"italic"},d))}},"drawRels"),Hke=o(function(t,e,r){let n=t.append("g"),i=e.bgColor?e.bgColor:"none",a=e.borderColor?e.borderColor:"#444444",s=e.fontColor?e.fontColor:"black",l={"stroke-width":1,"stroke-dasharray":"7.0,7.0"};e.nodeType&&(l={"stroke-width":1});let u={x:e.x,y:e.y,fill:i,stroke:a,width:e.width,height:e.height,rx:2.5,ry:2.5,attrs:l};S9(n,u);let h=r.boundaryFont();h.fontWeight="bold",h.fontSize=h.fontSize+2,h.fontColor=s,Cu(r)(e.label.text,n,e.x,e.y+e.label.Y,e.width,e.height,{fill:"#444444"},h),e.type&&e.type.text!==""&&(h=r.boundaryFont(),h.fontColor=s,Cu(r)(e.type.text,n,e.x,e.y+e.type.Y,e.width,e.height,{fill:"#444444"},h)),e.descr&&e.descr.text!==""&&(h=r.boundaryFont(),h.fontSize=h.fontSize-2,h.fontColor=s,Cu(r)(e.descr.text,n,e.x,e.y+e.descr.Y,e.width,e.height,{fill:"#444444"},h))},"drawBoundary"),Wke=o(function(t,e,r){let n=e.bgColor?e.bgColor:r[e.typeC4Shape.text+"_bg_color"],i=e.borderColor?e.borderColor:r[e.typeC4Shape.text+"_border_color"],a=e.fontColor?e.fontColor:"#FFFFFF",s="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";switch(e.typeC4Shape.text){case"person":s="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":s="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAB6ElEQVR4Xu2YLY+EMBCG9+dWr0aj0Wg0Go1Go0+j8Xdv2uTCvv1gpt0ebHKPuhDaeW4605Z9mJvx4AdXUyTUdd08z+u6flmWZRnHsWkafk9DptAwDPu+f0eAYtu2PEaGWuj5fCIZrBAC2eLBAnRCsEkkxmeaJp7iDJ2QMDdHsLg8SxKFEJaAo8lAXnmuOFIhTMpxxKATebo4UiFknuNo4OniSIXQyRxEA3YsnjGCVEjVXD7yLUAqxBGUyPv/Y4W2beMgGuS7kVQIBycH0fD+oi5pezQETxdHKmQKGk1eQEYldK+jw5GxPfZ9z7Mk0Qnhf1W1m3w//EUn5BDmSZsbR44QQLBEqrBHqOrmSKaQAxdnLArCrxZcM7A7ZKs4ioRq8LFC+NpC3WCBJsvpVw5edm9iEXFuyNfxXAgSwfrFQ1c0iNda8AdejvUgnktOtJQQxmcfFzGglc5WVCj7oDgFqU18boeFSs52CUh8LE8BIVQDT1ABrB0HtgSEYlX5doJnCwv9TXocKCaKbnwhdDKPq4lf3SwU3HLq4V/+WYhHVMa/3b4IlfyikAduCkcBc7mQ3/z/Qq/cTuikhkzB12Ae/mcJC9U+Vo8Ej1gWAtgbeGgFsAMHr50BIWOLCbezvhpBFUdY6EJuJ/QDW0XoMX60zZ0AAAAASUVORK5CYII=";break}let l=t.append("g");l.attr("class","person-man");let u=El();switch(e.typeC4Shape.text){case"person":case"external_person":case"system":case"external_system":case"container":case"external_container":case"component":case"external_component":u.x=e.x,u.y=e.y,u.fill=n,u.width=e.width,u.height=e.height,u.stroke=i,u.rx=2.5,u.ry=2.5,u.attrs={"stroke-width":.5},S9(l,u);break;case"system_db":case"external_system_db":case"container_db":case"external_container_db":case"component_db":case"external_component_db":l.append("path").attr("fill",n).attr("stroke-width","0.5").attr("stroke",i).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",e.x).replaceAll("starty",e.y).replaceAll("half",e.width/2).replaceAll("height",e.height)),l.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startyc0,10 half,10 half,10c0,0 half,0 half,-10".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("half",e.width/2));break;case"system_queue":case"external_system_queue":case"container_queue":case"external_container_queue":case"component_queue":case"external_component_queue":l.append("path").attr("fill",n).attr("stroke-width","0.5").attr("stroke",i).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",e.x).replaceAll("starty",e.y).replaceAll("width",e.width).replaceAll("half",e.height/2)),l.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startyc-5,0 -5,half -5,halfc0,half 5,half 5,half".replaceAll("startx",e.x+e.width).replaceAll("starty",e.y).replaceAll("half",e.height/2));break}let h=eEe(r,e.typeC4Shape.text);switch(l.append("text").attr("fill",a).attr("font-family",h.fontFamily).attr("font-size",h.fontSize-2).attr("font-style","italic").attr("lengthAdjust","spacing").attr("textLength",e.typeC4Shape.width).attr("x",e.x+e.width/2-e.typeC4Shape.width/2).attr("y",e.y+e.typeC4Shape.Y).text("<<"+e.typeC4Shape.text+">>"),e.typeC4Shape.text){case"person":case"external_person":Gq(l,48,48,e.x+e.width/2-24,e.y+e.image.Y,s);break}let f=r[e.typeC4Shape.text+"Font"]();return f.fontWeight="bold",f.fontSize=f.fontSize+2,f.fontColor=a,Cu(r)(e.label.text,l,e.x,e.y+e.label.Y,e.width,e.height,{fill:a},f),f=r[e.typeC4Shape.text+"Font"](),f.fontColor=a,e.techn&&e.techn?.text!==""?Cu(r)(e.techn.text,l,e.x,e.y+e.techn.Y,e.width,e.height,{fill:a,"font-style":"italic"},f):e.type&&e.type.text!==""&&Cu(r)(e.type.text,l,e.x,e.y+e.type.Y,e.width,e.height,{fill:a,"font-style":"italic"},f),e.descr&&e.descr.text!==""&&(f=r.personFont(),f.fontColor=a,Cu(r)(e.descr.text,l,e.x,e.y+e.descr.Y,e.width,e.height,{fill:a},f)),e.height},"drawC4Shape"),qke=o(function(t){t.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")},"insertDatabaseIcon"),Yke=o(function(t){t.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")},"insertComputerIcon"),Xke=o(function(t){t.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")},"insertClockIcon"),jke=o(function(t){t.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")},"insertArrowHead"),Kke=o(function(t){t.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")},"insertArrowEnd"),Qke=o(function(t){t.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")},"insertArrowFilledHead"),Zke=o(function(t){t.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)},"insertDynamicNumber"),Jke=o(function(t){let r=t.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",16).attr("refY",4);r.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"),r.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")},"insertArrowCrossHead"),eEe=o((t,e)=>({fontFamily:t[e+"FontFamily"],fontSize:t[e+"FontSize"],fontWeight:t[e+"FontWeight"]}),"getC4ShapeFont"),Cu=function(){function t(i,a,s,l,u,h,f){let d=a.append("text").attr("x",s+u/2).attr("y",l+h/2+5).style("text-anchor","middle").text(i);n(d,f)}o(t,"byText");function e(i,a,s,l,u,h,f,d){let{fontSize:p,fontFamily:m,fontWeight:g}=d,y=i.split(Ze.lineBreakRegex);for(let v=0;v{"use strict";tEe=typeof global=="object"&&global&&global.Object===Object&&global,tw=tEe});var rEe,nEe,li,Ro=N(()=>{"use strict";C9();rEe=typeof self=="object"&&self&&self.Object===Object&&self,nEe=tw||rEe||Function("return this")(),li=nEe});var iEe,ea,Rd=N(()=>{"use strict";Ro();iEe=li.Symbol,ea=iEe});function oEe(t){var e=aEe.call(t,Jv),r=t[Jv];try{t[Jv]=void 0;var n=!0}catch{}var i=sEe.call(t);return n&&(e?t[Jv]=r:delete t[Jv]),i}var Uq,aEe,sEe,Jv,Hq,Wq=N(()=>{"use strict";Rd();Uq=Object.prototype,aEe=Uq.hasOwnProperty,sEe=Uq.toString,Jv=ea?ea.toStringTag:void 0;o(oEe,"getRawTag");Hq=oEe});function uEe(t){return cEe.call(t)}var lEe,cEe,qq,Yq=N(()=>{"use strict";lEe=Object.prototype,cEe=lEe.toString;o(uEe,"objectToString");qq=uEe});function dEe(t){return t==null?t===void 0?fEe:hEe:Xq&&Xq in Object(t)?Hq(t):qq(t)}var hEe,fEe,Xq,da,Au=N(()=>{"use strict";Rd();Wq();Yq();hEe="[object Null]",fEe="[object Undefined]",Xq=ea?ea.toStringTag:void 0;o(dEe,"baseGetTag");da=dEe});function pEe(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}var bn,to=N(()=>{"use strict";o(pEe,"isObject");bn=pEe});function xEe(t){if(!bn(t))return!1;var e=da(t);return e==gEe||e==yEe||e==mEe||e==vEe}var mEe,gEe,yEe,vEe,Ci,e2=N(()=>{"use strict";Au();to();mEe="[object AsyncFunction]",gEe="[object Function]",yEe="[object GeneratorFunction]",vEe="[object Proxy]";o(xEe,"isFunction");Ci=xEe});var bEe,rw,jq=N(()=>{"use strict";Ro();bEe=li["__core-js_shared__"],rw=bEe});function wEe(t){return!!Kq&&Kq in t}var Kq,Qq,Zq=N(()=>{"use strict";jq();Kq=function(){var t=/[^.]+$/.exec(rw&&rw.keys&&rw.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}();o(wEe,"isMasked");Qq=wEe});function EEe(t){if(t!=null){try{return kEe.call(t)}catch{}try{return t+""}catch{}}return""}var TEe,kEe,_u,A9=N(()=>{"use strict";TEe=Function.prototype,kEe=TEe.toString;o(EEe,"toSource");_u=EEe});function NEe(t){if(!bn(t)||Qq(t))return!1;var e=Ci(t)?REe:CEe;return e.test(_u(t))}var SEe,CEe,AEe,_Ee,DEe,LEe,REe,Jq,eY=N(()=>{"use strict";e2();Zq();to();A9();SEe=/[\\^$.*+?()[\]{}|]/g,CEe=/^\[object .+?Constructor\]$/,AEe=Function.prototype,_Ee=Object.prototype,DEe=AEe.toString,LEe=_Ee.hasOwnProperty,REe=RegExp("^"+DEe.call(LEe).replace(SEe,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");o(NEe,"baseIsNative");Jq=NEe});function MEe(t,e){return t?.[e]}var tY,rY=N(()=>{"use strict";o(MEe,"getValue");tY=MEe});function IEe(t,e){var r=tY(t,e);return Jq(r)?r:void 0}var As,Ih=N(()=>{"use strict";eY();rY();o(IEe,"getNative");As=IEe});var OEe,Du,t2=N(()=>{"use strict";Ih();OEe=As(Object,"create"),Du=OEe});function PEe(){this.__data__=Du?Du(null):{},this.size=0}var nY,iY=N(()=>{"use strict";t2();o(PEe,"hashClear");nY=PEe});function BEe(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}var aY,sY=N(()=>{"use strict";o(BEe,"hashDelete");aY=BEe});function GEe(t){var e=this.__data__;if(Du){var r=e[t];return r===FEe?void 0:r}return zEe.call(e,t)?e[t]:void 0}var FEe,$Ee,zEe,oY,lY=N(()=>{"use strict";t2();FEe="__lodash_hash_undefined__",$Ee=Object.prototype,zEe=$Ee.hasOwnProperty;o(GEe,"hashGet");oY=GEe});function HEe(t){var e=this.__data__;return Du?e[t]!==void 0:UEe.call(e,t)}var VEe,UEe,cY,uY=N(()=>{"use strict";t2();VEe=Object.prototype,UEe=VEe.hasOwnProperty;o(HEe,"hashHas");cY=HEe});function qEe(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=Du&&e===void 0?WEe:e,this}var WEe,hY,fY=N(()=>{"use strict";t2();WEe="__lodash_hash_undefined__";o(qEe,"hashSet");hY=qEe});function X0(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{"use strict";iY();sY();lY();uY();fY();o(X0,"Hash");X0.prototype.clear=nY;X0.prototype.delete=aY;X0.prototype.get=oY;X0.prototype.has=cY;X0.prototype.set=hY;_9=X0});function YEe(){this.__data__=[],this.size=0}var pY,mY=N(()=>{"use strict";o(YEe,"listCacheClear");pY=YEe});function XEe(t,e){return t===e||t!==t&&e!==e}var No,Nd=N(()=>{"use strict";o(XEe,"eq");No=XEe});function jEe(t,e){for(var r=t.length;r--;)if(No(t[r][0],e))return r;return-1}var Oh,r2=N(()=>{"use strict";Nd();o(jEe,"assocIndexOf");Oh=jEe});function ZEe(t){var e=this.__data__,r=Oh(e,t);if(r<0)return!1;var n=e.length-1;return r==n?e.pop():QEe.call(e,r,1),--this.size,!0}var KEe,QEe,gY,yY=N(()=>{"use strict";r2();KEe=Array.prototype,QEe=KEe.splice;o(ZEe,"listCacheDelete");gY=ZEe});function JEe(t){var e=this.__data__,r=Oh(e,t);return r<0?void 0:e[r][1]}var vY,xY=N(()=>{"use strict";r2();o(JEe,"listCacheGet");vY=JEe});function eSe(t){return Oh(this.__data__,t)>-1}var bY,wY=N(()=>{"use strict";r2();o(eSe,"listCacheHas");bY=eSe});function tSe(t,e){var r=this.__data__,n=Oh(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this}var TY,kY=N(()=>{"use strict";r2();o(tSe,"listCacheSet");TY=tSe});function j0(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{"use strict";mY();yY();xY();wY();kY();o(j0,"ListCache");j0.prototype.clear=pY;j0.prototype.delete=gY;j0.prototype.get=vY;j0.prototype.has=bY;j0.prototype.set=TY;Ph=j0});var rSe,Bh,nw=N(()=>{"use strict";Ih();Ro();rSe=As(li,"Map"),Bh=rSe});function nSe(){this.size=0,this.__data__={hash:new _9,map:new(Bh||Ph),string:new _9}}var EY,SY=N(()=>{"use strict";dY();n2();nw();o(nSe,"mapCacheClear");EY=nSe});function iSe(t){var e=typeof t;return e=="string"||e=="number"||e=="symbol"||e=="boolean"?t!=="__proto__":t===null}var CY,AY=N(()=>{"use strict";o(iSe,"isKeyable");CY=iSe});function aSe(t,e){var r=t.__data__;return CY(e)?r[typeof e=="string"?"string":"hash"]:r.map}var Fh,i2=N(()=>{"use strict";AY();o(aSe,"getMapData");Fh=aSe});function sSe(t){var e=Fh(this,t).delete(t);return this.size-=e?1:0,e}var _Y,DY=N(()=>{"use strict";i2();o(sSe,"mapCacheDelete");_Y=sSe});function oSe(t){return Fh(this,t).get(t)}var LY,RY=N(()=>{"use strict";i2();o(oSe,"mapCacheGet");LY=oSe});function lSe(t){return Fh(this,t).has(t)}var NY,MY=N(()=>{"use strict";i2();o(lSe,"mapCacheHas");NY=lSe});function cSe(t,e){var r=Fh(this,t),n=r.size;return r.set(t,e),this.size+=r.size==n?0:1,this}var IY,OY=N(()=>{"use strict";i2();o(cSe,"mapCacheSet");IY=cSe});function K0(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{"use strict";SY();DY();RY();MY();OY();o(K0,"MapCache");K0.prototype.clear=EY;K0.prototype.delete=_Y;K0.prototype.get=LY;K0.prototype.has=NY;K0.prototype.set=IY;Md=K0});function D9(t,e){if(typeof t!="function"||e!=null&&typeof e!="function")throw new TypeError(uSe);var r=o(function(){var n=arguments,i=e?e.apply(this,n):n[0],a=r.cache;if(a.has(i))return a.get(i);var s=t.apply(this,n);return r.cache=a.set(i,s)||a,s},"memoized");return r.cache=new(D9.Cache||Md),r}var uSe,Q0,L9=N(()=>{"use strict";iw();uSe="Expected a function";o(D9,"memoize");D9.Cache=Md;Q0=D9});function hSe(){this.__data__=new Ph,this.size=0}var PY,BY=N(()=>{"use strict";n2();o(hSe,"stackClear");PY=hSe});function fSe(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r}var FY,$Y=N(()=>{"use strict";o(fSe,"stackDelete");FY=fSe});function dSe(t){return this.__data__.get(t)}var zY,GY=N(()=>{"use strict";o(dSe,"stackGet");zY=dSe});function pSe(t){return this.__data__.has(t)}var VY,UY=N(()=>{"use strict";o(pSe,"stackHas");VY=pSe});function gSe(t,e){var r=this.__data__;if(r instanceof Ph){var n=r.__data__;if(!Bh||n.length{"use strict";n2();nw();iw();mSe=200;o(gSe,"stackSet");HY=gSe});function Z0(t){var e=this.__data__=new Ph(t);this.size=e.size}var uc,a2=N(()=>{"use strict";n2();BY();$Y();GY();UY();WY();o(Z0,"Stack");Z0.prototype.clear=PY;Z0.prototype.delete=FY;Z0.prototype.get=zY;Z0.prototype.has=VY;Z0.prototype.set=HY;uc=Z0});var ySe,J0,R9=N(()=>{"use strict";Ih();ySe=function(){try{var t=As(Object,"defineProperty");return t({},"",{}),t}catch{}}(),J0=ySe});function vSe(t,e,r){e=="__proto__"&&J0?J0(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}var hc,em=N(()=>{"use strict";R9();o(vSe,"baseAssignValue");hc=vSe});function xSe(t,e,r){(r!==void 0&&!No(t[e],r)||r===void 0&&!(e in t))&&hc(t,e,r)}var s2,N9=N(()=>{"use strict";em();Nd();o(xSe,"assignMergeValue");s2=xSe});function bSe(t){return function(e,r,n){for(var i=-1,a=Object(e),s=n(e),l=s.length;l--;){var u=s[t?l:++i];if(r(a[u],u,a)===!1)break}return e}}var qY,YY=N(()=>{"use strict";o(bSe,"createBaseFor");qY=bSe});var wSe,tm,aw=N(()=>{"use strict";YY();wSe=qY(),tm=wSe});function kSe(t,e){if(e)return t.slice();var r=t.length,n=KY?KY(r):new t.constructor(r);return t.copy(n),n}var QY,XY,TSe,jY,KY,sw,M9=N(()=>{"use strict";Ro();QY=typeof exports=="object"&&exports&&!exports.nodeType&&exports,XY=QY&&typeof module=="object"&&module&&!module.nodeType&&module,TSe=XY&&XY.exports===QY,jY=TSe?li.Buffer:void 0,KY=jY?jY.allocUnsafe:void 0;o(kSe,"cloneBuffer");sw=kSe});var ESe,rm,I9=N(()=>{"use strict";Ro();ESe=li.Uint8Array,rm=ESe});function SSe(t){var e=new t.constructor(t.byteLength);return new rm(e).set(new rm(t)),e}var nm,ow=N(()=>{"use strict";I9();o(SSe,"cloneArrayBuffer");nm=SSe});function CSe(t,e){var r=e?nm(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}var lw,O9=N(()=>{"use strict";ow();o(CSe,"cloneTypedArray");lw=CSe});function ASe(t,e){var r=-1,n=t.length;for(e||(e=Array(n));++r{"use strict";o(ASe,"copyArray");cw=ASe});var ZY,_Se,JY,eX=N(()=>{"use strict";to();ZY=Object.create,_Se=function(){function t(){}return o(t,"object"),function(e){if(!bn(e))return{};if(ZY)return ZY(e);t.prototype=e;var r=new t;return t.prototype=void 0,r}}(),JY=_Se});function DSe(t,e){return function(r){return t(e(r))}}var uw,B9=N(()=>{"use strict";o(DSe,"overArg");uw=DSe});var LSe,im,hw=N(()=>{"use strict";B9();LSe=uw(Object.getPrototypeOf,Object),im=LSe});function NSe(t){var e=t&&t.constructor,r=typeof e=="function"&&e.prototype||RSe;return t===r}var RSe,fc,am=N(()=>{"use strict";RSe=Object.prototype;o(NSe,"isPrototype");fc=NSe});function MSe(t){return typeof t.constructor=="function"&&!fc(t)?JY(im(t)):{}}var fw,F9=N(()=>{"use strict";eX();hw();am();o(MSe,"initCloneObject");fw=MSe});function ISe(t){return t!=null&&typeof t=="object"}var ri,Mo=N(()=>{"use strict";o(ISe,"isObjectLike");ri=ISe});function PSe(t){return ri(t)&&da(t)==OSe}var OSe,$9,tX=N(()=>{"use strict";Au();Mo();OSe="[object Arguments]";o(PSe,"baseIsArguments");$9=PSe});var rX,BSe,FSe,$Se,Cl,sm=N(()=>{"use strict";tX();Mo();rX=Object.prototype,BSe=rX.hasOwnProperty,FSe=rX.propertyIsEnumerable,$Se=$9(function(){return arguments}())?$9:function(t){return ri(t)&&BSe.call(t,"callee")&&!FSe.call(t,"callee")},Cl=$Se});var zSe,Pt,Un=N(()=>{"use strict";zSe=Array.isArray,Pt=zSe});function VSe(t){return typeof t=="number"&&t>-1&&t%1==0&&t<=GSe}var GSe,om,dw=N(()=>{"use strict";GSe=9007199254740991;o(VSe,"isLength");om=VSe});function USe(t){return t!=null&&om(t.length)&&!Ci(t)}var ci,Io=N(()=>{"use strict";e2();dw();o(USe,"isArrayLike");ci=USe});function HSe(t){return ri(t)&&ci(t)}var Id,pw=N(()=>{"use strict";Io();Mo();o(HSe,"isArrayLikeObject");Id=HSe});function WSe(){return!1}var nX,iX=N(()=>{"use strict";o(WSe,"stubFalse");nX=WSe});var oX,aX,qSe,sX,YSe,XSe,Al,lm=N(()=>{"use strict";Ro();iX();oX=typeof exports=="object"&&exports&&!exports.nodeType&&exports,aX=oX&&typeof module=="object"&&module&&!module.nodeType&&module,qSe=aX&&aX.exports===oX,sX=qSe?li.Buffer:void 0,YSe=sX?sX.isBuffer:void 0,XSe=YSe||nX,Al=XSe});function e6e(t){if(!ri(t)||da(t)!=jSe)return!1;var e=im(t);if(e===null)return!0;var r=ZSe.call(e,"constructor")&&e.constructor;return typeof r=="function"&&r instanceof r&&lX.call(r)==JSe}var jSe,KSe,QSe,lX,ZSe,JSe,cX,uX=N(()=>{"use strict";Au();hw();Mo();jSe="[object Object]",KSe=Function.prototype,QSe=Object.prototype,lX=KSe.toString,ZSe=QSe.hasOwnProperty,JSe=lX.call(Object);o(e6e,"isPlainObject");cX=e6e});function S6e(t){return ri(t)&&om(t.length)&&!!Fn[da(t)]}var t6e,r6e,n6e,i6e,a6e,s6e,o6e,l6e,c6e,u6e,h6e,f6e,d6e,p6e,m6e,g6e,y6e,v6e,x6e,b6e,w6e,T6e,k6e,E6e,Fn,hX,fX=N(()=>{"use strict";Au();dw();Mo();t6e="[object Arguments]",r6e="[object Array]",n6e="[object Boolean]",i6e="[object Date]",a6e="[object Error]",s6e="[object Function]",o6e="[object Map]",l6e="[object Number]",c6e="[object Object]",u6e="[object RegExp]",h6e="[object Set]",f6e="[object String]",d6e="[object WeakMap]",p6e="[object ArrayBuffer]",m6e="[object DataView]",g6e="[object Float32Array]",y6e="[object Float64Array]",v6e="[object Int8Array]",x6e="[object Int16Array]",b6e="[object Int32Array]",w6e="[object Uint8Array]",T6e="[object Uint8ClampedArray]",k6e="[object Uint16Array]",E6e="[object Uint32Array]",Fn={};Fn[g6e]=Fn[y6e]=Fn[v6e]=Fn[x6e]=Fn[b6e]=Fn[w6e]=Fn[T6e]=Fn[k6e]=Fn[E6e]=!0;Fn[t6e]=Fn[r6e]=Fn[p6e]=Fn[n6e]=Fn[m6e]=Fn[i6e]=Fn[a6e]=Fn[s6e]=Fn[o6e]=Fn[l6e]=Fn[c6e]=Fn[u6e]=Fn[h6e]=Fn[f6e]=Fn[d6e]=!1;o(S6e,"baseIsTypedArray");hX=S6e});function C6e(t){return function(e){return t(e)}}var Oo,Od=N(()=>{"use strict";o(C6e,"baseUnary");Oo=C6e});var dX,o2,A6e,z9,_6e,Po,l2=N(()=>{"use strict";C9();dX=typeof exports=="object"&&exports&&!exports.nodeType&&exports,o2=dX&&typeof module=="object"&&module&&!module.nodeType&&module,A6e=o2&&o2.exports===dX,z9=A6e&&tw.process,_6e=function(){try{var t=o2&&o2.require&&o2.require("util").types;return t||z9&&z9.binding&&z9.binding("util")}catch{}}(),Po=_6e});var pX,D6e,$h,c2=N(()=>{"use strict";fX();Od();l2();pX=Po&&Po.isTypedArray,D6e=pX?Oo(pX):hX,$h=D6e});function L6e(t,e){if(!(e==="constructor"&&typeof t[e]=="function")&&e!="__proto__")return t[e]}var u2,G9=N(()=>{"use strict";o(L6e,"safeGet");u2=L6e});function M6e(t,e,r){var n=t[e];(!(N6e.call(t,e)&&No(n,r))||r===void 0&&!(e in t))&&hc(t,e,r)}var R6e,N6e,dc,cm=N(()=>{"use strict";em();Nd();R6e=Object.prototype,N6e=R6e.hasOwnProperty;o(M6e,"assignValue");dc=M6e});function I6e(t,e,r,n){var i=!r;r||(r={});for(var a=-1,s=e.length;++a{"use strict";cm();em();o(I6e,"copyObject");Bo=I6e});function O6e(t,e){for(var r=-1,n=Array(t);++r{"use strict";o(O6e,"baseTimes");mX=O6e});function F6e(t,e){var r=typeof t;return e=e??P6e,!!e&&(r=="number"||r!="symbol"&&B6e.test(t))&&t>-1&&t%1==0&&t{"use strict";P6e=9007199254740991,B6e=/^(?:0|[1-9]\d*)$/;o(F6e,"isIndex");zh=F6e});function G6e(t,e){var r=Pt(t),n=!r&&Cl(t),i=!r&&!n&&Al(t),a=!r&&!n&&!i&&$h(t),s=r||n||i||a,l=s?mX(t.length,String):[],u=l.length;for(var h in t)(e||z6e.call(t,h))&&!(s&&(h=="length"||i&&(h=="offset"||h=="parent")||a&&(h=="buffer"||h=="byteLength"||h=="byteOffset")||zh(h,u)))&&l.push(h);return l}var $6e,z6e,mw,V9=N(()=>{"use strict";gX();sm();Un();lm();h2();c2();$6e=Object.prototype,z6e=$6e.hasOwnProperty;o(G6e,"arrayLikeKeys");mw=G6e});function V6e(t){var e=[];if(t!=null)for(var r in Object(t))e.push(r);return e}var yX,vX=N(()=>{"use strict";o(V6e,"nativeKeysIn");yX=V6e});function W6e(t){if(!bn(t))return yX(t);var e=fc(t),r=[];for(var n in t)n=="constructor"&&(e||!H6e.call(t,n))||r.push(n);return r}var U6e,H6e,xX,bX=N(()=>{"use strict";to();am();vX();U6e=Object.prototype,H6e=U6e.hasOwnProperty;o(W6e,"baseKeysIn");xX=W6e});function q6e(t){return ci(t)?mw(t,!0):xX(t)}var _s,Gh=N(()=>{"use strict";V9();bX();Io();o(q6e,"keysIn");_s=q6e});function Y6e(t){return Bo(t,_s(t))}var wX,TX=N(()=>{"use strict";Pd();Gh();o(Y6e,"toPlainObject");wX=Y6e});function X6e(t,e,r,n,i,a,s){var l=u2(t,r),u=u2(e,r),h=s.get(u);if(h){s2(t,r,h);return}var f=a?a(l,u,r+"",t,e,s):void 0,d=f===void 0;if(d){var p=Pt(u),m=!p&&Al(u),g=!p&&!m&&$h(u);f=u,p||m||g?Pt(l)?f=l:Id(l)?f=cw(l):m?(d=!1,f=sw(u,!0)):g?(d=!1,f=lw(u,!0)):f=[]:cX(u)||Cl(u)?(f=l,Cl(l)?f=wX(l):(!bn(l)||Ci(l))&&(f=fw(u))):d=!1}d&&(s.set(u,f),i(f,u,n,a,s),s.delete(u)),s2(t,r,f)}var kX,EX=N(()=>{"use strict";N9();M9();O9();P9();F9();sm();Un();pw();lm();e2();to();uX();c2();G9();TX();o(X6e,"baseMergeDeep");kX=X6e});function SX(t,e,r,n,i){t!==e&&tm(e,function(a,s){if(i||(i=new uc),bn(a))kX(t,e,s,r,SX,n,i);else{var l=n?n(u2(t,s),a,s+"",t,e,i):void 0;l===void 0&&(l=a),s2(t,s,l)}},_s)}var CX,AX=N(()=>{"use strict";a2();N9();aw();EX();to();Gh();G9();o(SX,"baseMerge");CX=SX});function j6e(t){return t}var ta,Lu=N(()=>{"use strict";o(j6e,"identity");ta=j6e});function K6e(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}var _X,DX=N(()=>{"use strict";o(K6e,"apply");_X=K6e});function Q6e(t,e,r){return e=LX(e===void 0?t.length-1:e,0),function(){for(var n=arguments,i=-1,a=LX(n.length-e,0),s=Array(a);++i{"use strict";DX();LX=Math.max;o(Q6e,"overRest");gw=Q6e});function Z6e(t){return function(){return t}}var Ds,H9=N(()=>{"use strict";o(Z6e,"constant");Ds=Z6e});var J6e,RX,NX=N(()=>{"use strict";H9();R9();Lu();J6e=J0?function(t,e){return J0(t,"toString",{configurable:!0,enumerable:!1,value:Ds(e),writable:!0})}:ta,RX=J6e});function nCe(t){var e=0,r=0;return function(){var n=rCe(),i=tCe-(n-r);if(r=n,i>0){if(++e>=eCe)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}var eCe,tCe,rCe,MX,IX=N(()=>{"use strict";eCe=800,tCe=16,rCe=Date.now;o(nCe,"shortOut");MX=nCe});var iCe,yw,W9=N(()=>{"use strict";NX();IX();iCe=MX(RX),yw=iCe});function aCe(t,e){return yw(gw(t,e,ta),t+"")}var pc,um=N(()=>{"use strict";Lu();U9();W9();o(aCe,"baseRest");pc=aCe});function sCe(t,e,r){if(!bn(r))return!1;var n=typeof e;return(n=="number"?ci(r)&&zh(e,r.length):n=="string"&&e in r)?No(r[e],t):!1}var ro,Bd=N(()=>{"use strict";Nd();Io();h2();to();o(sCe,"isIterateeCall");ro=sCe});function oCe(t){return pc(function(e,r){var n=-1,i=r.length,a=i>1?r[i-1]:void 0,s=i>2?r[2]:void 0;for(a=t.length>3&&typeof a=="function"?(i--,a):void 0,s&&ro(r[0],r[1],s)&&(a=i<3?void 0:a,i=1),e=Object(e);++n{"use strict";um();Bd();o(oCe,"createAssigner");vw=oCe});var lCe,Vh,Y9=N(()=>{"use strict";AX();q9();lCe=vw(function(t,e,r){CX(t,e,r)}),Vh=lCe});function K9(t,e){if(!t)return e;let r=`curve${t.charAt(0).toUpperCase()+t.slice(1)}`;return cCe[r]??e}function dCe(t,e){let r=t.trim();if(r)return e.securityLevel!=="loose"?(0,BX.sanitizeUrl)(r):r}function zX(t,e){return!t||!e?0:Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))}function mCe(t){let e,r=0;t.forEach(i=>{r+=zX(i,e),e=i});let n=r/2;return Q9(t,n)}function gCe(t){return t.length===1?t[0]:mCe(t)}function vCe(t,e,r){let n=structuredClone(r);X.info("our points",n),e!=="start_left"&&e!=="start_right"&&n.reverse();let i=25+t,a=Q9(n,i),s=10+t*.5,l=Math.atan2(n[0].y-a.y,n[0].x-a.x),u={x:0,y:0};return e==="start_left"?(u.x=Math.sin(l+Math.PI)*s+(n[0].x+a.x)/2,u.y=-Math.cos(l+Math.PI)*s+(n[0].y+a.y)/2):e==="end_right"?(u.x=Math.sin(l-Math.PI)*s+(n[0].x+a.x)/2-5,u.y=-Math.cos(l-Math.PI)*s+(n[0].y+a.y)/2-5):e==="end_left"?(u.x=Math.sin(l)*s+(n[0].x+a.x)/2-5,u.y=-Math.cos(l)*s+(n[0].y+a.y)/2-5):(u.x=Math.sin(l)*s+(n[0].x+a.x)/2,u.y=-Math.cos(l)*s+(n[0].y+a.y)/2),u}function Z9(t){let e="",r="";for(let n of t)n!==void 0&&(n.startsWith("color:")||n.startsWith("text-align:")?r=r+n+";":e=e+n+";");return{style:e,labelStyle:r}}function xCe(t){let e="",r="0123456789abcdef",n=r.length;for(let i=0;i{"use strict";BX=Sa(Y0(),1);pr();dr();s7();vt();ed();d0();L9();Y9();q4();j9="\u200B",cCe={curveBasis:Lo,curveBasisClosed:U5,curveBasisOpen:H5,curveBumpX:Fv,curveBumpY:$v,curveBundle:d9,curveCardinalClosed:p9,curveCardinalOpen:g9,curveCardinal:Uv,curveCatmullRomClosed:v9,curveCatmullRomOpen:x9,curveCatmullRom:qv,curveLinear:Su,curveLinearClosed:j5,curveMonotoneX:Yv,curveMonotoneY:Xv,curveNatural:W0,curveStep:q0,curveStepAfter:Kv,curveStepBefore:jv},uCe=/\s*(?:(\w+)(?=:):|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,hCe=o(function(t,e){let r=FX(t,/(?:init\b)|(?:initialize\b)/),n={};if(Array.isArray(r)){let s=r.map(l=>l.args);m0(s),n=Gn(n,[...s])}else n=r.args;if(!n)return;let i=f0(t,e),a="config";return n[a]!==void 0&&(i==="flowchart-v2"&&(i="flowchart"),n[i]=n[a],delete n[a]),n},"detectInit"),FX=o(function(t,e=null){try{let r=new RegExp(`[%]{2}(?![{]${uCe.source})(?=[}][%]{2}).* -`,"ig");t=t.trim().replace(r,"").replace(/'/gm,'"'),X.debug(`Detecting diagram directive${e!==null?" type:"+e:""} based on the text:${t}`);let n,i=[];for(;(n=Zf.exec(t))!==null;)if(n.index===Zf.lastIndex&&Zf.lastIndex++,n&&!e||e&&n[1]?.match(e)||e&&n[2]?.match(e)){let a=n[1]?n[1]:n[2],s=n[3]?n[3].trim():n[4]?JSON.parse(n[4].trim()):null;i.push({type:a,args:s})}return i.length===0?{type:t,args:null}:i.length===1?i[0]:i}catch(r){return X.error(`ERROR: ${r.message} - Unable to parse directive type: '${e}' based on the text: '${t}'`),{type:void 0,args:null}}},"detectDirective"),$X=o(function(t){return t.replace(Zf,"")},"removeDirectives"),fCe=o(function(t,e){for(let[r,n]of e.entries())if(n.match(t))return r;return-1},"isSubstringInArray");o(K9,"interpolateToCurve");o(dCe,"formatUrl");pCe=o((t,...e)=>{let r=t.split("."),n=r.length-1,i=r[n],a=window;for(let s=0;s{let r=Math.pow(10,e);return Math.round(t*r)/r},"roundNumber"),Q9=o((t,e)=>{let r,n=e;for(let i of t){if(r){let a=zX(i,r);if(a===0)return r;if(a=1)return{x:i.x,y:i.y};if(s>0&&s<1)return{x:OX((1-s)*r.x+s*i.x,5),y:OX((1-s)*r.y+s*i.y,5)}}}r=i}throw new Error("Could not find a suitable point for the given distance")},"calculatePoint"),yCe=o((t,e,r)=>{X.info(`our points ${JSON.stringify(e)}`),e[0]!==r&&(e=e.reverse());let i=Q9(e,25),a=t?10:5,s=Math.atan2(e[0].y-i.y,e[0].x-i.x),l={x:0,y:0};return l.x=Math.sin(s)*a+(e[0].x+i.x)/2,l.y=-Math.cos(s)*a+(e[0].y+i.y)/2,l},"calcCardinalityPosition");o(vCe,"calcTerminalLabelPosition");o(Z9,"getStylesFromArray");PX=0,J9=o(()=>(PX++,"id-"+Math.random().toString(36).substr(2,12)+"-"+PX),"generateId");o(xCe,"makeRandomHex");eD=o(t=>xCe(t.length),"random"),bCe=o(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:""}},"getTextObj"),wCe=o(function(t,e){let r=e.text.replace(Ze.lineBreakRegex," "),[,n]=Fo(e.fontSize),i=t.append("text");i.attr("x",e.x),i.attr("y",e.y),i.style("text-anchor",e.anchor),i.style("font-family",e.fontFamily),i.style("font-size",n),i.style("font-weight",e.fontWeight),i.attr("fill",e.fill),e.class!==void 0&&i.attr("class",e.class);let a=i.append("tspan");return a.attr("x",e.x+e.textMargin*2),a.attr("fill",e.fill),a.text(r),i},"drawSimpleText"),tD=Q0((t,e,r)=>{if(!t||(r=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",joinWith:"
"},r),Ze.lineBreakRegex.test(t)))return t;let n=t.split(" ").filter(Boolean),i=[],a="";return n.forEach((s,l)=>{let u=ra(`${s} `,r),h=ra(a,r);if(u>e){let{hyphenatedStrings:p,remainingWord:m}=TCe(s,e,"-",r);i.push(a,...p),a=m}else h+u>=e?(i.push(a),a=s):a=[a,s].filter(Boolean).join(" ");l+1===n.length&&i.push(a)}),i.filter(s=>s!=="").join(r.joinWith)},(t,e,r)=>`${t}${e}${r.fontSize}${r.fontWeight}${r.fontFamily}${r.joinWith}`),TCe=Q0((t,e,r="-",n)=>{n=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:0},n);let i=[...t],a=[],s="";return i.forEach((l,u)=>{let h=`${s}${l}`;if(ra(h,n)>=e){let d=u+1,p=i.length===d,m=`${h}${r}`;a.push(p?h:m),s=""}else s=h}),{hyphenatedStrings:a,remainingWord:s}},(t,e,r="-",n)=>`${t}${e}${r}${n.fontSize}${n.fontWeight}${n.fontFamily}`);o(bw,"calculateTextHeight");o(ra,"calculateTextWidth");rD=Q0((t,e)=>{let{fontSize:r=12,fontFamily:n="Arial",fontWeight:i=400}=e;if(!t)return{width:0,height:0};let[,a]=Fo(r),s=["sans-serif",n],l=t.split(Ze.lineBreakRegex),u=[],h=Ge("body");if(!h.remove)return{width:0,height:0,lineHeight:0};let f=h.append("svg");for(let p of s){let m=0,g={width:0,height:0,lineHeight:0};for(let y of l){let v=bCe();v.text=y||j9;let x=wCe(f,v).style("font-size",a).style("font-weight",i).style("font-family",p),b=(x._groups||x)[0][0].getBBox();if(b.width===0&&b.height===0)throw new Error("svg element not in render tree");g.width=Math.round(Math.max(g.width,b.width)),m=Math.round(b.height),g.height+=m,g.lineHeight=Math.round(Math.max(g.lineHeight,m))}u.push(g)}f.remove();let d=isNaN(u[1].height)||isNaN(u[1].width)||isNaN(u[1].lineHeight)||u[0].height>u[1].height&&u[0].width>u[1].width&&u[0].lineHeight>u[1].lineHeight?0:1;return u[d]},(t,e)=>`${t}${e.fontSize}${e.fontWeight}${e.fontFamily}`),X9=class{constructor(e=!1,r){this.count=0;this.count=r?r.length:0,this.next=e?()=>this.count++:()=>Date.now()}static{o(this,"InitIDGenerator")}},kCe=o(function(t){return xw=xw||document.createElement("div"),t=escape(t).replace(/%26/g,"&").replace(/%23/g,"#").replace(/%3B/g,";"),xw.innerHTML=t,unescape(xw.textContent)},"entityDecode");o(nD,"isDetailedError");ECe=o((t,e,r,n)=>{if(!n)return;let i=t.node()?.getBBox();i&&t.append("text").text(n).attr("text-anchor","middle").attr("x",i.x+i.width/2).attr("y",-r).attr("class",e)},"insertTitle"),Fo=o(t=>{if(typeof t=="number")return[t,t+"px"];let e=parseInt(t??"",10);return Number.isNaN(e)?[void 0,void 0]:t===String(e)?[e,t+"px"]:[e,t]},"parseFontSize");o(gi,"cleanAndMerge");Gt={assignWithDepth:Gn,wrapLabel:tD,calculateTextHeight:bw,calculateTextWidth:ra,calculateTextDimensions:rD,cleanAndMerge:gi,detectInit:hCe,detectDirective:FX,isSubstringInArray:fCe,interpolateToCurve:K9,calcLabelPosition:gCe,calcCardinalityPosition:yCe,calcTerminalLabelPosition:vCe,formatUrl:dCe,getStylesFromArray:Z9,generateId:J9,random:eD,runFunc:pCe,entityDecode:kCe,insertTitle:ECe,parseFontSize:Fo,InitIDGenerator:X9},GX=o(function(t){let e=t;return e=e.replace(/style.*:\S*#.*;/g,function(r){return r.substring(0,r.length-1)}),e=e.replace(/classDef.*:\S*#.*;/g,function(r){return r.substring(0,r.length-1)}),e=e.replace(/#\w+;/g,function(r){let n=r.substring(1,r.length-1);return/^\+?\d+$/.test(n)?"\uFB02\xB0\xB0"+n+"\xB6\xDF":"\uFB02\xB0"+n+"\xB6\xDF"}),e},"encodeEntities"),na=o(function(t){return t.replace(/๏ฌ‚ยฐยฐ/g,"&#").replace(/๏ฌ‚ยฐ/g,"&").replace(/ยถรŸ/g,";")},"decodeEntities"),Uh=o((t,e,{counter:r=0,prefix:n,suffix:i},a)=>a||`${n?`${n}_`:""}${t}_${e}_${r}${i?`_${i}`:""}`,"getEdgeId");o($n,"handleUndefinedAttr")});function _l(t,e,r,n,i){if(!e[t].width)if(r)e[t].text=tD(e[t].text,i,n),e[t].textLines=e[t].text.split(Ze.lineBreakRegex).length,e[t].width=i,e[t].height=bw(e[t].text,n);else{let a=e[t].text.split(Ze.lineBreakRegex);e[t].textLines=a.length;let s=0;e[t].height=0,e[t].width=0;for(let l of a)e[t].width=Math.max(ra(l,n),e[t].width),s=bw(l,n),e[t].height=e[t].height+s}}function qX(t,e,r,n,i){let a=new Ew(i);a.data.widthLimit=r.data.widthLimit/Math.min(iD,n.length);for(let[s,l]of n.entries()){let u=0;l.image={width:0,height:0,Y:0},l.sprite&&(l.image.width=48,l.image.height=48,l.image.Y=u,u=l.image.Y+l.image.height);let h=l.wrap&&Vt.wrap,f=ww(Vt);if(f.fontSize=f.fontSize+2,f.fontWeight="bold",_l("label",l,h,f,a.data.widthLimit),l.label.Y=u+8,u=l.label.Y+l.label.height,l.type&&l.type.text!==""){l.type.text="["+l.type.text+"]";let g=ww(Vt);_l("type",l,h,g,a.data.widthLimit),l.type.Y=u+5,u=l.type.Y+l.type.height}if(l.descr&&l.descr.text!==""){let g=ww(Vt);g.fontSize=g.fontSize-2,_l("descr",l,h,g,a.data.widthLimit),l.descr.Y=u+20,u=l.descr.Y+l.descr.height}if(s==0||s%iD===0){let g=r.data.startx+Vt.diagramMarginX,y=r.data.stopy+Vt.diagramMarginY+u;a.setData(g,g,y,y)}else{let g=a.data.stopx!==a.data.startx?a.data.stopx+Vt.diagramMarginX:a.data.startx,y=a.data.starty;a.setData(g,g,y,y)}a.name=l.alias;let d=i.db.getC4ShapeArray(l.alias),p=i.db.getC4ShapeKeys(l.alias);p.length>0&&WX(a,t,d,p),e=l.alias;let m=i.db.getBoundaries(e);m.length>0&&qX(t,e,a,m,i),l.alias!=="global"&&HX(t,l,a),r.data.stopy=Math.max(a.data.stopy+Vt.c4ShapeMargin,r.data.stopy),r.data.stopx=Math.max(a.data.stopx+Vt.c4ShapeMargin,r.data.stopx),Tw=Math.max(Tw,r.data.stopx),kw=Math.max(kw,r.data.stopy)}}var Tw,kw,UX,iD,Vt,Ew,aD,f2,ww,SCe,HX,WX,Ls,VX,CCe,ACe,_Ce,sD,YX=N(()=>{"use strict";pr();Vq();vt();WC();dr();mA();zt();d0();nr();Si();Tw=0,kw=0,UX=4,iD=2;Ly.yy=iv;Vt={},Ew=class{static{o(this,"Bounds")}constructor(e){this.name="",this.data={},this.data.startx=void 0,this.data.stopx=void 0,this.data.starty=void 0,this.data.stopy=void 0,this.data.widthLimit=void 0,this.nextData={},this.nextData.startx=void 0,this.nextData.stopx=void 0,this.nextData.starty=void 0,this.nextData.stopy=void 0,this.nextData.cnt=0,aD(e.db.getConfig())}setData(e,r,n,i){this.nextData.startx=this.data.startx=e,this.nextData.stopx=this.data.stopx=r,this.nextData.starty=this.data.starty=n,this.nextData.stopy=this.data.stopy=i}updateVal(e,r,n,i){e[r]===void 0?e[r]=n:e[r]=i(n,e[r])}insert(e){this.nextData.cnt=this.nextData.cnt+1;let r=this.nextData.startx===this.nextData.stopx?this.nextData.stopx+e.margin:this.nextData.stopx+e.margin*2,n=r+e.width,i=this.nextData.starty+e.margin*2,a=i+e.height;(r>=this.data.widthLimit||n>=this.data.widthLimit||this.nextData.cnt>UX)&&(r=this.nextData.startx+e.margin+Vt.nextLinePaddingX,i=this.nextData.stopy+e.margin*2,this.nextData.stopx=n=r+e.width,this.nextData.starty=this.nextData.stopy,this.nextData.stopy=a=i+e.height,this.nextData.cnt=1),e.x=r,e.y=i,this.updateVal(this.data,"startx",r,Math.min),this.updateVal(this.data,"starty",i,Math.min),this.updateVal(this.data,"stopx",n,Math.max),this.updateVal(this.data,"stopy",a,Math.max),this.updateVal(this.nextData,"startx",r,Math.min),this.updateVal(this.nextData,"starty",i,Math.min),this.updateVal(this.nextData,"stopx",n,Math.max),this.updateVal(this.nextData,"stopy",a,Math.max)}init(e){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},aD(e.db.getConfig())}bumpLastMargin(e){this.data.stopx+=e,this.data.stopy+=e}},aD=o(function(t){Gn(Vt,t),t.fontFamily&&(Vt.personFontFamily=Vt.systemFontFamily=Vt.messageFontFamily=t.fontFamily),t.fontSize&&(Vt.personFontSize=Vt.systemFontSize=Vt.messageFontSize=t.fontSize),t.fontWeight&&(Vt.personFontWeight=Vt.systemFontWeight=Vt.messageFontWeight=t.fontWeight)},"setConf"),f2=o((t,e)=>({fontFamily:t[e+"FontFamily"],fontSize:t[e+"FontSize"],fontWeight:t[e+"FontWeight"]}),"c4ShapeFont"),ww=o(t=>({fontFamily:t.boundaryFontFamily,fontSize:t.boundaryFontSize,fontWeight:t.boundaryFontWeight}),"boundaryFont"),SCe=o(t=>({fontFamily:t.messageFontFamily,fontSize:t.messageFontSize,fontWeight:t.messageFontWeight}),"messageFont");o(_l,"calcC4ShapeTextWH");HX=o(function(t,e,r){e.x=r.data.startx,e.y=r.data.starty,e.width=r.data.stopx-r.data.startx,e.height=r.data.stopy-r.data.starty,e.label.y=Vt.c4ShapeMargin-35;let n=e.wrap&&Vt.wrap,i=ww(Vt);i.fontSize=i.fontSize+2,i.fontWeight="bold";let a=ra(e.label.text,i);_l("label",e,n,i,a),Sl.drawBoundary(t,e,Vt)},"drawBoundary"),WX=o(function(t,e,r,n){let i=0;for(let a of n){i=0;let s=r[a],l=f2(Vt,s.typeC4Shape.text);switch(l.fontSize=l.fontSize-2,s.typeC4Shape.width=ra("\xAB"+s.typeC4Shape.text+"\xBB",l),s.typeC4Shape.height=l.fontSize+2,s.typeC4Shape.Y=Vt.c4ShapePadding,i=s.typeC4Shape.Y+s.typeC4Shape.height-4,s.image={width:0,height:0,Y:0},s.typeC4Shape.text){case"person":case"external_person":s.image.width=48,s.image.height=48,s.image.Y=i,i=s.image.Y+s.image.height;break}s.sprite&&(s.image.width=48,s.image.height=48,s.image.Y=i,i=s.image.Y+s.image.height);let u=s.wrap&&Vt.wrap,h=Vt.width-Vt.c4ShapePadding*2,f=f2(Vt,s.typeC4Shape.text);if(f.fontSize=f.fontSize+2,f.fontWeight="bold",_l("label",s,u,f,h),s.label.Y=i+8,i=s.label.Y+s.label.height,s.type&&s.type.text!==""){s.type.text="["+s.type.text+"]";let m=f2(Vt,s.typeC4Shape.text);_l("type",s,u,m,h),s.type.Y=i+5,i=s.type.Y+s.type.height}else if(s.techn&&s.techn.text!==""){s.techn.text="["+s.techn.text+"]";let m=f2(Vt,s.techn.text);_l("techn",s,u,m,h),s.techn.Y=i+5,i=s.techn.Y+s.techn.height}let d=i,p=s.label.width;if(s.descr&&s.descr.text!==""){let m=f2(Vt,s.typeC4Shape.text);_l("descr",s,u,m,h),s.descr.Y=i+20,i=s.descr.Y+s.descr.height,p=Math.max(s.label.width,s.descr.width),d=i-s.descr.textLines*5}p=p+Vt.c4ShapePadding,s.width=Math.max(s.width||Vt.width,p,Vt.width),s.height=Math.max(s.height||Vt.height,d,Vt.height),s.margin=s.margin||Vt.c4ShapeMargin,t.insert(s),Sl.drawC4Shape(e,s,Vt)}t.bumpLastMargin(Vt.c4ShapeMargin)},"drawC4ShapeArray"),Ls=class{static{o(this,"Point")}constructor(e,r){this.x=e,this.y=r}},VX=o(function(t,e){let r=t.x,n=t.y,i=e.x,a=e.y,s=r+t.width/2,l=n+t.height/2,u=Math.abs(r-i),h=Math.abs(n-a),f=h/u,d=t.height/t.width,p=null;return n==a&&ri?p=new Ls(r,l):r==i&&na&&(p=new Ls(s,n)),r>i&&n=f?p=new Ls(r,l+f*t.width/2):p=new Ls(s-u/h*t.height/2,n+t.height):r=f?p=new Ls(r+t.width,l+f*t.width/2):p=new Ls(s+u/h*t.height/2,n+t.height):ra?d>=f?p=new Ls(r+t.width,l-f*t.width/2):p=new Ls(s+t.height/2*u/h,n):r>i&&n>a&&(d>=f?p=new Ls(r,l-t.width/2*f):p=new Ls(s-t.height/2*u/h,n)),p},"getIntersectPoint"),CCe=o(function(t,e){let r={x:0,y:0};r.x=e.x+e.width/2,r.y=e.y+e.height/2;let n=VX(t,r);r.x=t.x+t.width/2,r.y=t.y+t.height/2;let i=VX(e,r);return{startPoint:n,endPoint:i}},"getIntersectPoints"),ACe=o(function(t,e,r,n){let i=0;for(let a of e){i=i+1;let s=a.wrap&&Vt.wrap,l=SCe(Vt);n.db.getC4Type()==="C4Dynamic"&&(a.label.text=i+": "+a.label.text);let h=ra(a.label.text,l);_l("label",a,s,l,h),a.techn&&a.techn.text!==""&&(h=ra(a.techn.text,l),_l("techn",a,s,l,h)),a.descr&&a.descr.text!==""&&(h=ra(a.descr.text,l),_l("descr",a,s,l,h));let f=r(a.from),d=r(a.to),p=CCe(f,d);a.startPoint=p.startPoint,a.endPoint=p.endPoint}Sl.drawRels(t,e,Vt)},"drawRels");o(qX,"drawInsideBoundary");_Ce=o(function(t,e,r,n){Vt=me().c4;let i=me().securityLevel,a;i==="sandbox"&&(a=Ge("#i"+e));let s=i==="sandbox"?Ge(a.nodes()[0].contentDocument.body):Ge("body"),l=n.db;n.db.setWrap(Vt.wrap),UX=l.getC4ShapeInRow(),iD=l.getC4BoundaryInRow(),X.debug(`C:${JSON.stringify(Vt,null,2)}`);let u=i==="sandbox"?s.select(`[id="${e}"]`):Ge(`[id="${e}"]`);Sl.insertComputerIcon(u),Sl.insertDatabaseIcon(u),Sl.insertClockIcon(u);let h=new Ew(n);h.setData(Vt.diagramMarginX,Vt.diagramMarginX,Vt.diagramMarginY,Vt.diagramMarginY),h.data.widthLimit=screen.availWidth,Tw=Vt.diagramMarginX,kw=Vt.diagramMarginY;let f=n.db.getTitle(),d=n.db.getBoundaries("");qX(u,"",h,d,n),Sl.insertArrowHead(u),Sl.insertArrowEnd(u),Sl.insertArrowCrossHead(u),Sl.insertArrowFilledHead(u),ACe(u,n.db.getRels(),n.db.getC4Shape,n),h.data.stopx=Tw,h.data.stopy=kw;let p=h.data,g=p.stopy-p.starty+2*Vt.diagramMarginY,v=p.stopx-p.startx+2*Vt.diagramMarginX;f&&u.append("text").text(f).attr("x",(p.stopx-p.startx)/2-4*Vt.diagramMarginX).attr("y",p.starty+Vt.diagramMarginY),vn(u,g,v,Vt.useMaxWidth);let x=f?60:0;u.attr("viewBox",p.startx-Vt.diagramMarginX+" -"+(Vt.diagramMarginY+x)+" "+v+" "+(g+x)),X.debug("models:",p)},"draw"),sD={drawPersonOrSystemArray:WX,drawBoundary:HX,setConf:aD,draw:_Ce}});var DCe,XX,jX=N(()=>{"use strict";DCe=o(t=>`.person { +`},"getStyles"),NV=o((t,e)=>{e!==void 0&&(B3[t]=e)},"addStylesForDiagram"),MV=E5e});var rv={};ur(rv,{clear:()=>kr,getAccDescription:()=>Rr,getAccTitle:()=>Dr,getDiagramTitle:()=>Nr,setAccDescription:()=>Lr,setAccTitle:()=>Ar,setDiagramTitle:()=>Or});var wA,kA,EA,SA,kr,Ar,Dr,Lr,Rr,Or,Nr,ci=N(()=>{"use strict";pr();mi();wA="",kA="",EA="",SA=o(t=>wr(t,tr()),"sanitizeText"),kr=o(()=>{wA="",EA="",kA=""},"clear"),Ar=o(t=>{wA=SA(t).replace(/^\s+/g,"")},"setAccTitle"),Dr=o(()=>wA,"getAccTitle"),Lr=o(t=>{EA=SA(t).replace(/\n\s+/g,` +`)},"setAccDescription"),Rr=o(()=>EA,"getAccDescription"),Or=o(t=>{kA=SA(t)},"setDiagramTitle"),Nr=o(()=>kA,"getDiagramTitle")});var IV,S5e,me,nv,$3,fd,AA,C5e,F3,dd,iv,CA,Gt=N(()=>{"use strict";rd();yt();mi();pr();xi();TA();ci();IV=X,S5e=Dy,me=tr,nv=a3,$3=ph,fd=o(t=>wr(t,me()),"sanitizeText"),AA=Lo,C5e=o(()=>rv,"getCommonDb"),F3={},dd=o((t,e,r)=>{F3[t]&&IV.warn(`Diagram with id ${t} already registered. Overwriting.`),F3[t]=e,r&&i7(t,r),NV(t,e.styles),e.injectUtils?.(IV,S5e,me,fd,AA,C5e(),()=>{})},"registerDiagram"),iv=o(t=>{if(t in F3)return F3[t];throw new CA(t)},"getDiagram"),CA=class extends Error{static{o(this,"DiagramNotFoundError")}constructor(e){super(`Diagram ${e} not found.`)}}});var ml,wh,is,pl,ac,av,_A,DA,z3,G3,OV,A5e,_5e,D5e,L5e,R5e,N5e,M5e,I5e,O5e,P5e,B5e,F5e,$5e,z5e,G5e,V5e,U5e,PV,H5e,W5e,BV,q5e,Y5e,X5e,j5e,kh,K5e,Q5e,Z5e,J5e,eTe,sv,LA=N(()=>{"use strict";Gt();pr();ci();ml=[],wh=[""],is="global",pl="",ac=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],av=[],_A="",DA=!1,z3=4,G3=2,A5e=o(function(){return OV},"getC4Type"),_5e=o(function(t){OV=wr(t,me())},"setC4Type"),D5e=o(function(t,e,r,n,i,a,s,l,u){if(t==null||e===void 0||e===null||r===void 0||r===null||n===void 0||n===null)return;let h={},f=av.find(d=>d.from===e&&d.to===r);if(f?h=f:av.push(h),h.type=t,h.from=e,h.to=r,h.label={text:n},i==null)h.techn={text:""};else if(typeof i=="object"){let[d,p]=Object.entries(i)[0];h[d]={text:p}}else h.techn={text:i};if(a==null)h.descr={text:""};else if(typeof a=="object"){let[d,p]=Object.entries(a)[0];h[d]={text:p}}else h.descr={text:a};if(typeof s=="object"){let[d,p]=Object.entries(s)[0];h[d]=p}else h.sprite=s;if(typeof l=="object"){let[d,p]=Object.entries(l)[0];h[d]=p}else h.tags=l;if(typeof u=="object"){let[d,p]=Object.entries(u)[0];h[d]=p}else h.link=u;h.wrap=kh()},"addRel"),L5e=o(function(t,e,r,n,i,a,s){if(e===null||r===null)return;let l={},u=ml.find(h=>h.alias===e);if(u&&e===u.alias?l=u:(l.alias=e,ml.push(l)),r==null?l.label={text:""}:l.label={text:r},n==null)l.descr={text:""};else if(typeof n=="object"){let[h,f]=Object.entries(n)[0];l[h]={text:f}}else l.descr={text:n};if(typeof i=="object"){let[h,f]=Object.entries(i)[0];l[h]=f}else l.sprite=i;if(typeof a=="object"){let[h,f]=Object.entries(a)[0];l[h]=f}else l.tags=a;if(typeof s=="object"){let[h,f]=Object.entries(s)[0];l[h]=f}else l.link=s;l.typeC4Shape={text:t},l.parentBoundary=is,l.wrap=kh()},"addPersonOrSystem"),R5e=o(function(t,e,r,n,i,a,s,l){if(e===null||r===null)return;let u={},h=ml.find(f=>f.alias===e);if(h&&e===h.alias?u=h:(u.alias=e,ml.push(u)),r==null?u.label={text:""}:u.label={text:r},n==null)u.techn={text:""};else if(typeof n=="object"){let[f,d]=Object.entries(n)[0];u[f]={text:d}}else u.techn={text:n};if(i==null)u.descr={text:""};else if(typeof i=="object"){let[f,d]=Object.entries(i)[0];u[f]={text:d}}else u.descr={text:i};if(typeof a=="object"){let[f,d]=Object.entries(a)[0];u[f]=d}else u.sprite=a;if(typeof s=="object"){let[f,d]=Object.entries(s)[0];u[f]=d}else u.tags=s;if(typeof l=="object"){let[f,d]=Object.entries(l)[0];u[f]=d}else u.link=l;u.wrap=kh(),u.typeC4Shape={text:t},u.parentBoundary=is},"addContainer"),N5e=o(function(t,e,r,n,i,a,s,l){if(e===null||r===null)return;let u={},h=ml.find(f=>f.alias===e);if(h&&e===h.alias?u=h:(u.alias=e,ml.push(u)),r==null?u.label={text:""}:u.label={text:r},n==null)u.techn={text:""};else if(typeof n=="object"){let[f,d]=Object.entries(n)[0];u[f]={text:d}}else u.techn={text:n};if(i==null)u.descr={text:""};else if(typeof i=="object"){let[f,d]=Object.entries(i)[0];u[f]={text:d}}else u.descr={text:i};if(typeof a=="object"){let[f,d]=Object.entries(a)[0];u[f]=d}else u.sprite=a;if(typeof s=="object"){let[f,d]=Object.entries(s)[0];u[f]=d}else u.tags=s;if(typeof l=="object"){let[f,d]=Object.entries(l)[0];u[f]=d}else u.link=l;u.wrap=kh(),u.typeC4Shape={text:t},u.parentBoundary=is},"addComponent"),M5e=o(function(t,e,r,n,i){if(t===null||e===null)return;let a={},s=ac.find(l=>l.alias===t);if(s&&t===s.alias?a=s:(a.alias=t,ac.push(a)),e==null?a.label={text:""}:a.label={text:e},r==null)a.type={text:"system"};else if(typeof r=="object"){let[l,u]=Object.entries(r)[0];a[l]={text:u}}else a.type={text:r};if(typeof n=="object"){let[l,u]=Object.entries(n)[0];a[l]=u}else a.tags=n;if(typeof i=="object"){let[l,u]=Object.entries(i)[0];a[l]=u}else a.link=i;a.parentBoundary=is,a.wrap=kh(),pl=is,is=t,wh.push(pl)},"addPersonOrSystemBoundary"),I5e=o(function(t,e,r,n,i){if(t===null||e===null)return;let a={},s=ac.find(l=>l.alias===t);if(s&&t===s.alias?a=s:(a.alias=t,ac.push(a)),e==null?a.label={text:""}:a.label={text:e},r==null)a.type={text:"container"};else if(typeof r=="object"){let[l,u]=Object.entries(r)[0];a[l]={text:u}}else a.type={text:r};if(typeof n=="object"){let[l,u]=Object.entries(n)[0];a[l]=u}else a.tags=n;if(typeof i=="object"){let[l,u]=Object.entries(i)[0];a[l]=u}else a.link=i;a.parentBoundary=is,a.wrap=kh(),pl=is,is=t,wh.push(pl)},"addContainerBoundary"),O5e=o(function(t,e,r,n,i,a,s,l){if(e===null||r===null)return;let u={},h=ac.find(f=>f.alias===e);if(h&&e===h.alias?u=h:(u.alias=e,ac.push(u)),r==null?u.label={text:""}:u.label={text:r},n==null)u.type={text:"node"};else if(typeof n=="object"){let[f,d]=Object.entries(n)[0];u[f]={text:d}}else u.type={text:n};if(i==null)u.descr={text:""};else if(typeof i=="object"){let[f,d]=Object.entries(i)[0];u[f]={text:d}}else u.descr={text:i};if(typeof s=="object"){let[f,d]=Object.entries(s)[0];u[f]=d}else u.tags=s;if(typeof l=="object"){let[f,d]=Object.entries(l)[0];u[f]=d}else u.link=l;u.nodeType=t,u.parentBoundary=is,u.wrap=kh(),pl=is,is=e,wh.push(pl)},"addDeploymentNode"),P5e=o(function(){is=pl,wh.pop(),pl=wh.pop(),wh.push(pl)},"popBoundaryParseStack"),B5e=o(function(t,e,r,n,i,a,s,l,u,h,f){let d=ml.find(p=>p.alias===e);if(!(d===void 0&&(d=ac.find(p=>p.alias===e),d===void 0))){if(r!=null)if(typeof r=="object"){let[p,m]=Object.entries(r)[0];d[p]=m}else d.bgColor=r;if(n!=null)if(typeof n=="object"){let[p,m]=Object.entries(n)[0];d[p]=m}else d.fontColor=n;if(i!=null)if(typeof i=="object"){let[p,m]=Object.entries(i)[0];d[p]=m}else d.borderColor=i;if(a!=null)if(typeof a=="object"){let[p,m]=Object.entries(a)[0];d[p]=m}else d.shadowing=a;if(s!=null)if(typeof s=="object"){let[p,m]=Object.entries(s)[0];d[p]=m}else d.shape=s;if(l!=null)if(typeof l=="object"){let[p,m]=Object.entries(l)[0];d[p]=m}else d.sprite=l;if(u!=null)if(typeof u=="object"){let[p,m]=Object.entries(u)[0];d[p]=m}else d.techn=u;if(h!=null)if(typeof h=="object"){let[p,m]=Object.entries(h)[0];d[p]=m}else d.legendText=h;if(f!=null)if(typeof f=="object"){let[p,m]=Object.entries(f)[0];d[p]=m}else d.legendSprite=f}},"updateElStyle"),F5e=o(function(t,e,r,n,i,a,s){let l=av.find(u=>u.from===e&&u.to===r);if(l!==void 0){if(n!=null)if(typeof n=="object"){let[u,h]=Object.entries(n)[0];l[u]=h}else l.textColor=n;if(i!=null)if(typeof i=="object"){let[u,h]=Object.entries(i)[0];l[u]=h}else l.lineColor=i;if(a!=null)if(typeof a=="object"){let[u,h]=Object.entries(a)[0];l[u]=parseInt(h)}else l.offsetX=parseInt(a);if(s!=null)if(typeof s=="object"){let[u,h]=Object.entries(s)[0];l[u]=parseInt(h)}else l.offsetY=parseInt(s)}},"updateRelStyle"),$5e=o(function(t,e,r){let n=z3,i=G3;if(typeof e=="object"){let a=Object.values(e)[0];n=parseInt(a)}else n=parseInt(e);if(typeof r=="object"){let a=Object.values(r)[0];i=parseInt(a)}else i=parseInt(r);n>=1&&(z3=n),i>=1&&(G3=i)},"updateLayoutConfig"),z5e=o(function(){return z3},"getC4ShapeInRow"),G5e=o(function(){return G3},"getC4BoundaryInRow"),V5e=o(function(){return is},"getCurrentBoundaryParse"),U5e=o(function(){return pl},"getParentBoundaryParse"),PV=o(function(t){return t==null?ml:ml.filter(e=>e.parentBoundary===t)},"getC4ShapeArray"),H5e=o(function(t){return ml.find(e=>e.alias===t)},"getC4Shape"),W5e=o(function(t){return Object.keys(PV(t))},"getC4ShapeKeys"),BV=o(function(t){return t==null?ac:ac.filter(e=>e.parentBoundary===t)},"getBoundaries"),q5e=BV,Y5e=o(function(){return av},"getRels"),X5e=o(function(){return _A},"getTitle"),j5e=o(function(t){DA=t},"setWrap"),kh=o(function(){return DA},"autoWrap"),K5e=o(function(){ml=[],ac=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],pl="",is="global",wh=[""],av=[],wh=[""],_A="",DA=!1,z3=4,G3=2},"clear"),Q5e={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},Z5e={FILLED:0,OPEN:1},J5e={LEFTOF:0,RIGHTOF:1,OVER:2},eTe=o(function(t){_A=wr(t,me())},"setTitle"),sv={addPersonOrSystem:L5e,addPersonOrSystemBoundary:M5e,addContainer:R5e,addContainerBoundary:I5e,addComponent:N5e,addDeploymentNode:O5e,popBoundaryParseStack:P5e,addRel:D5e,updateElStyle:B5e,updateRelStyle:F5e,updateLayoutConfig:$5e,autoWrap:kh,setWrap:j5e,getC4ShapeArray:PV,getC4Shape:H5e,getC4ShapeKeys:W5e,getBoundaries:BV,getBoundarys:q5e,getCurrentBoundaryParse:V5e,getParentBoundaryParse:U5e,getRels:Y5e,getTitle:X5e,getC4Type:A5e,getC4ShapeInRow:z5e,getC4BoundaryInRow:G5e,setAccTitle:Ar,getAccTitle:Dr,getAccDescription:Rr,setAccDescription:Lr,getConfig:o(()=>me().c4,"getConfig"),clear:K5e,LINETYPE:Q5e,ARROWTYPE:Z5e,PLACEMENT:J5e,setTitle:eTe,setC4Type:_5e}});function pd(t,e){return t==null||e==null?NaN:te?1:t>=e?0:NaN}var RA=N(()=>{"use strict";o(pd,"ascending")});function NA(t,e){return t==null||e==null?NaN:et?1:e>=t?0:NaN}var FV=N(()=>{"use strict";o(NA,"descending")});function md(t){let e,r,n;t.length!==2?(e=pd,r=o((l,u)=>pd(t(l),u),"compare2"),n=o((l,u)=>t(l)-u,"delta")):(e=t===pd||t===NA?t:tTe,r=t,n=t);function i(l,u,h=0,f=l.length){if(h>>1;r(l[d],u)<0?h=d+1:f=d}while(h>>1;r(l[d],u)<=0?h=d+1:f=d}while(hh&&n(l[d-1],u)>-n(l[d],u)?d-1:d}return o(s,"center"),{left:i,center:s,right:a}}function tTe(){return 0}var MA=N(()=>{"use strict";RA();FV();o(md,"bisector");o(tTe,"zero")});function IA(t){return t===null?NaN:+t}var $V=N(()=>{"use strict";o(IA,"number")});var zV,GV,rTe,nTe,OA,VV=N(()=>{"use strict";RA();MA();$V();zV=md(pd),GV=zV.right,rTe=zV.left,nTe=md(IA).center,OA=GV});function UV({_intern:t,_key:e},r){let n=e(r);return t.has(n)?t.get(n):r}function iTe({_intern:t,_key:e},r){let n=e(r);return t.has(n)?t.get(n):(t.set(n,r),r)}function aTe({_intern:t,_key:e},r){let n=e(r);return t.has(n)&&(r=t.get(n),t.delete(n)),r}function sTe(t){return t!==null&&typeof t=="object"?t.valueOf():t}var C0,HV=N(()=>{"use strict";C0=class extends Map{static{o(this,"InternMap")}constructor(e,r=sTe){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:r}}),e!=null)for(let[n,i]of e)this.set(n,i)}get(e){return super.get(UV(this,e))}has(e){return super.has(UV(this,e))}set(e,r){return super.set(iTe(this,e),r)}delete(e){return super.delete(aTe(this,e))}};o(UV,"intern_get");o(iTe,"intern_set");o(aTe,"intern_delete");o(sTe,"keyof")});function V3(t,e,r){let n=(e-t)/Math.max(0,r),i=Math.floor(Math.log10(n)),a=n/Math.pow(10,i),s=a>=oTe?10:a>=lTe?5:a>=cTe?2:1,l,u,h;return i<0?(h=Math.pow(10,-i)/s,l=Math.round(t*h),u=Math.round(e*h),l/he&&--u,h=-h):(h=Math.pow(10,i)*s,l=Math.round(t/h),u=Math.round(e/h),l*he&&--u),u0))return[];if(t===e)return[t];let n=e=i))return[];let l=a-i+1,u=new Array(l);if(n)if(s<0)for(let h=0;h{"use strict";oTe=Math.sqrt(50),lTe=Math.sqrt(10),cTe=Math.sqrt(2);o(V3,"tickSpec");o(U3,"ticks");o(ov,"tickIncrement");o(A0,"tickStep")});function H3(t,e){let r;if(e===void 0)for(let n of t)n!=null&&(r=n)&&(r=n);else{let n=-1;for(let i of t)(i=e(i,++n,t))!=null&&(r=i)&&(r=i)}return r}var qV=N(()=>{"use strict";o(H3,"max")});function W3(t,e){let r;if(e===void 0)for(let n of t)n!=null&&(r>n||r===void 0&&n>=n)&&(r=n);else{let n=-1;for(let i of t)(i=e(i,++n,t))!=null&&(r>i||r===void 0&&i>=i)&&(r=i)}return r}var YV=N(()=>{"use strict";o(W3,"min")});function q3(t,e,r){t=+t,e=+e,r=(i=arguments.length)<2?(e=t,t=0,1):i<3?1:+r;for(var n=-1,i=Math.max(0,Math.ceil((e-t)/r))|0,a=new Array(i);++n{"use strict";o(q3,"range")});var Eh=N(()=>{"use strict";VV();MA();qV();YV();XV();WV();HV()});function PA(t){return t}var jV=N(()=>{"use strict";o(PA,"default")});function uTe(t){return"translate("+t+",0)"}function hTe(t){return"translate(0,"+t+")"}function fTe(t){return e=>+t(e)}function dTe(t,e){return e=Math.max(0,t.bandwidth()-e*2)/2,t.round()&&(e=Math.round(e)),r=>+t(r)+e}function pTe(){return!this.__axis}function QV(t,e){var r=[],n=null,i=null,a=6,s=6,l=3,u=typeof window<"u"&&window.devicePixelRatio>1?0:.5,h=t===X3||t===Y3?-1:1,f=t===Y3||t===BA?"x":"y",d=t===X3||t===FA?uTe:hTe;function p(m){var g=n??(e.ticks?e.ticks.apply(e,r):e.domain()),y=i??(e.tickFormat?e.tickFormat.apply(e,r):PA),v=Math.max(a,0)+l,x=e.range(),b=+x[0]+u,T=+x[x.length-1]+u,S=(e.bandwidth?dTe:fTe)(e.copy(),u),w=m.selection?m.selection():m,E=w.selectAll(".domain").data([null]),_=w.selectAll(".tick").data(g,e).order(),C=_.exit(),D=_.enter().append("g").attr("class","tick"),O=_.select("line"),R=_.select("text");E=E.merge(E.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),_=_.merge(D),O=O.merge(D.append("line").attr("stroke","currentColor").attr(f+"2",h*a)),R=R.merge(D.append("text").attr("fill","currentColor").attr(f,h*v).attr("dy",t===X3?"0em":t===FA?"0.71em":"0.32em")),m!==w&&(E=E.transition(m),_=_.transition(m),O=O.transition(m),R=R.transition(m),C=C.transition(m).attr("opacity",KV).attr("transform",function(k){return isFinite(k=S(k))?d(k+u):this.getAttribute("transform")}),D.attr("opacity",KV).attr("transform",function(k){var L=this.parentNode.__axis;return d((L&&isFinite(L=L(k))?L:S(k))+u)})),C.remove(),E.attr("d",t===Y3||t===BA?s?"M"+h*s+","+b+"H"+u+"V"+T+"H"+h*s:"M"+u+","+b+"V"+T:s?"M"+b+","+h*s+"V"+u+"H"+T+"V"+h*s:"M"+b+","+u+"H"+T),_.attr("opacity",1).attr("transform",function(k){return d(S(k)+u)}),O.attr(f+"2",h*a),R.attr(f,h*v).text(y),w.filter(pTe).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===BA?"start":t===Y3?"end":"middle"),w.each(function(){this.__axis=S})}return o(p,"axis"),p.scale=function(m){return arguments.length?(e=m,p):e},p.ticks=function(){return r=Array.from(arguments),p},p.tickArguments=function(m){return arguments.length?(r=m==null?[]:Array.from(m),p):r.slice()},p.tickValues=function(m){return arguments.length?(n=m==null?null:Array.from(m),p):n&&n.slice()},p.tickFormat=function(m){return arguments.length?(i=m,p):i},p.tickSize=function(m){return arguments.length?(a=s=+m,p):a},p.tickSizeInner=function(m){return arguments.length?(a=+m,p):a},p.tickSizeOuter=function(m){return arguments.length?(s=+m,p):s},p.tickPadding=function(m){return arguments.length?(l=+m,p):l},p.offset=function(m){return arguments.length?(u=+m,p):u},p}function $A(t){return QV(X3,t)}function zA(t){return QV(FA,t)}var X3,BA,FA,Y3,KV,ZV=N(()=>{"use strict";jV();X3=1,BA=2,FA=3,Y3=4,KV=1e-6;o(uTe,"translateX");o(hTe,"translateY");o(fTe,"number");o(dTe,"center");o(pTe,"entering");o(QV,"axis");o($A,"axisTop");o(zA,"axisBottom")});var JV=N(()=>{"use strict";ZV()});function tU(){for(var t=0,e=arguments.length,r={},n;t=0&&(n=r.slice(i+1),r=r.slice(0,i)),r&&!e.hasOwnProperty(r))throw new Error("unknown type: "+r);return{type:r,name:n}})}function yTe(t,e){for(var r=0,n=t.length,i;r{"use strict";mTe={value:o(()=>{},"value")};o(tU,"dispatch");o(j3,"Dispatch");o(gTe,"parseTypenames");j3.prototype=tU.prototype={constructor:j3,on:o(function(t,e){var r=this._,n=gTe(t+"",r),i,a=-1,s=n.length;if(arguments.length<2){for(;++a0)for(var r=new Array(i),n=0,i,a;n{"use strict";rU()});var K3,UA,HA=N(()=>{"use strict";K3="http://www.w3.org/1999/xhtml",UA={svg:"http://www.w3.org/2000/svg",xhtml:K3,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"}});function sc(t){var e=t+="",r=e.indexOf(":");return r>=0&&(e=t.slice(0,r))!=="xmlns"&&(t=t.slice(r+1)),UA.hasOwnProperty(e)?{space:UA[e],local:t}:t}var Q3=N(()=>{"use strict";HA();o(sc,"default")});function vTe(t){return function(){var e=this.ownerDocument,r=this.namespaceURI;return r===K3&&e.documentElement.namespaceURI===K3?e.createElement(t):e.createElementNS(r,t)}}function xTe(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function lv(t){var e=sc(t);return(e.local?xTe:vTe)(e)}var WA=N(()=>{"use strict";Q3();HA();o(vTe,"creatorInherit");o(xTe,"creatorFixed");o(lv,"default")});function bTe(){}function Sh(t){return t==null?bTe:function(){return this.querySelector(t)}}var Z3=N(()=>{"use strict";o(bTe,"none");o(Sh,"default")});function qA(t){typeof t!="function"&&(t=Sh(t));for(var e=this._groups,r=e.length,n=new Array(r),i=0;i{"use strict";gl();Z3();o(qA,"default")});function YA(t){return t==null?[]:Array.isArray(t)?t:Array.from(t)}var iU=N(()=>{"use strict";o(YA,"array")});function TTe(){return[]}function _0(t){return t==null?TTe:function(){return this.querySelectorAll(t)}}var XA=N(()=>{"use strict";o(TTe,"empty");o(_0,"default")});function wTe(t){return function(){return YA(t.apply(this,arguments))}}function jA(t){typeof t=="function"?t=wTe(t):t=_0(t);for(var e=this._groups,r=e.length,n=[],i=[],a=0;a{"use strict";gl();iU();XA();o(wTe,"arrayAll");o(jA,"default")});function D0(t){return function(){return this.matches(t)}}function J3(t){return function(e){return e.matches(t)}}var cv=N(()=>{"use strict";o(D0,"default");o(J3,"childMatcher")});function ETe(t){return function(){return kTe.call(this.children,t)}}function STe(){return this.firstElementChild}function KA(t){return this.select(t==null?STe:ETe(typeof t=="function"?t:J3(t)))}var kTe,sU=N(()=>{"use strict";cv();kTe=Array.prototype.find;o(ETe,"childFind");o(STe,"childFirst");o(KA,"default")});function ATe(){return Array.from(this.children)}function _Te(t){return function(){return CTe.call(this.children,t)}}function QA(t){return this.selectAll(t==null?ATe:_Te(typeof t=="function"?t:J3(t)))}var CTe,oU=N(()=>{"use strict";cv();CTe=Array.prototype.filter;o(ATe,"children");o(_Te,"childrenFilter");o(QA,"default")});function ZA(t){typeof t!="function"&&(t=D0(t));for(var e=this._groups,r=e.length,n=new Array(r),i=0;i{"use strict";gl();cv();o(ZA,"default")});function uv(t){return new Array(t.length)}var JA=N(()=>{"use strict";o(uv,"default")});function e8(){return new ui(this._enter||this._groups.map(uv),this._parents)}function hv(t,e){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=e}var t8=N(()=>{"use strict";JA();gl();o(e8,"default");o(hv,"EnterNode");hv.prototype={constructor:hv,appendChild:o(function(t){return this._parent.insertBefore(t,this._next)},"appendChild"),insertBefore:o(function(t,e){return this._parent.insertBefore(t,e)},"insertBefore"),querySelector:o(function(t){return this._parent.querySelector(t)},"querySelector"),querySelectorAll:o(function(t){return this._parent.querySelectorAll(t)},"querySelectorAll")}});function r8(t){return function(){return t}}var cU=N(()=>{"use strict";o(r8,"default")});function DTe(t,e,r,n,i,a){for(var s=0,l,u=e.length,h=a.length;s=T&&(T=b+1);!(w=v[T])&&++T{"use strict";gl();t8();cU();o(DTe,"bindIndex");o(LTe,"bindKey");o(RTe,"datum");o(n8,"default");o(NTe,"arraylike")});function i8(){return new ui(this._exit||this._groups.map(uv),this._parents)}var hU=N(()=>{"use strict";JA();gl();o(i8,"default")});function a8(t,e,r){var n=this.enter(),i=this,a=this.exit();return typeof t=="function"?(n=t(n),n&&(n=n.selection())):n=n.append(t+""),e!=null&&(i=e(i),i&&(i=i.selection())),r==null?a.remove():r(a),n&&i?n.merge(i).order():i}var fU=N(()=>{"use strict";o(a8,"default")});function s8(t){for(var e=t.selection?t.selection():t,r=this._groups,n=e._groups,i=r.length,a=n.length,s=Math.min(i,a),l=new Array(i),u=0;u{"use strict";gl();o(s8,"default")});function o8(){for(var t=this._groups,e=-1,r=t.length;++e=0;)(s=n[i])&&(a&&s.compareDocumentPosition(a)^4&&a.parentNode.insertBefore(s,a),a=s);return this}var pU=N(()=>{"use strict";o(o8,"default")});function l8(t){t||(t=MTe);function e(d,p){return d&&p?t(d.__data__,p.__data__):!d-!p}o(e,"compareNode");for(var r=this._groups,n=r.length,i=new Array(n),a=0;ae?1:t>=e?0:NaN}var mU=N(()=>{"use strict";gl();o(l8,"default");o(MTe,"ascending")});function c8(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this}var gU=N(()=>{"use strict";o(c8,"default")});function u8(){return Array.from(this)}var yU=N(()=>{"use strict";o(u8,"default")});function h8(){for(var t=this._groups,e=0,r=t.length;e{"use strict";o(h8,"default")});function f8(){let t=0;for(let e of this)++t;return t}var xU=N(()=>{"use strict";o(f8,"default")});function d8(){return!this.node()}var bU=N(()=>{"use strict";o(d8,"default")});function p8(t){for(var e=this._groups,r=0,n=e.length;r{"use strict";o(p8,"default")});function ITe(t){return function(){this.removeAttribute(t)}}function OTe(t){return function(){this.removeAttributeNS(t.space,t.local)}}function PTe(t,e){return function(){this.setAttribute(t,e)}}function BTe(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function FTe(t,e){return function(){var r=e.apply(this,arguments);r==null?this.removeAttribute(t):this.setAttribute(t,r)}}function $Te(t,e){return function(){var r=e.apply(this,arguments);r==null?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,r)}}function m8(t,e){var r=sc(t);if(arguments.length<2){var n=this.node();return r.local?n.getAttributeNS(r.space,r.local):n.getAttribute(r)}return this.each((e==null?r.local?OTe:ITe:typeof e=="function"?r.local?$Te:FTe:r.local?BTe:PTe)(r,e))}var wU=N(()=>{"use strict";Q3();o(ITe,"attrRemove");o(OTe,"attrRemoveNS");o(PTe,"attrConstant");o(BTe,"attrConstantNS");o(FTe,"attrFunction");o($Te,"attrFunctionNS");o(m8,"default")});function fv(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}var g8=N(()=>{"use strict";o(fv,"default")});function zTe(t){return function(){this.style.removeProperty(t)}}function GTe(t,e,r){return function(){this.style.setProperty(t,e,r)}}function VTe(t,e,r){return function(){var n=e.apply(this,arguments);n==null?this.style.removeProperty(t):this.style.setProperty(t,n,r)}}function y8(t,e,r){return arguments.length>1?this.each((e==null?zTe:typeof e=="function"?VTe:GTe)(t,e,r??"")):Ch(this.node(),t)}function Ch(t,e){return t.style.getPropertyValue(e)||fv(t).getComputedStyle(t,null).getPropertyValue(e)}var v8=N(()=>{"use strict";g8();o(zTe,"styleRemove");o(GTe,"styleConstant");o(VTe,"styleFunction");o(y8,"default");o(Ch,"styleValue")});function UTe(t){return function(){delete this[t]}}function HTe(t,e){return function(){this[t]=e}}function WTe(t,e){return function(){var r=e.apply(this,arguments);r==null?delete this[t]:this[t]=r}}function x8(t,e){return arguments.length>1?this.each((e==null?UTe:typeof e=="function"?WTe:HTe)(t,e)):this.node()[t]}var kU=N(()=>{"use strict";o(UTe,"propertyRemove");o(HTe,"propertyConstant");o(WTe,"propertyFunction");o(x8,"default")});function EU(t){return t.trim().split(/^|\s+/)}function b8(t){return t.classList||new SU(t)}function SU(t){this._node=t,this._names=EU(t.getAttribute("class")||"")}function CU(t,e){for(var r=b8(t),n=-1,i=e.length;++n{"use strict";o(EU,"classArray");o(b8,"classList");o(SU,"ClassList");SU.prototype={add:o(function(t){var e=this._names.indexOf(t);e<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},"add"),remove:o(function(t){var e=this._names.indexOf(t);e>=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},"remove"),contains:o(function(t){return this._names.indexOf(t)>=0},"contains")};o(CU,"classedAdd");o(AU,"classedRemove");o(qTe,"classedTrue");o(YTe,"classedFalse");o(XTe,"classedFunction");o(T8,"default")});function jTe(){this.textContent=""}function KTe(t){return function(){this.textContent=t}}function QTe(t){return function(){var e=t.apply(this,arguments);this.textContent=e??""}}function w8(t){return arguments.length?this.each(t==null?jTe:(typeof t=="function"?QTe:KTe)(t)):this.node().textContent}var DU=N(()=>{"use strict";o(jTe,"textRemove");o(KTe,"textConstant");o(QTe,"textFunction");o(w8,"default")});function ZTe(){this.innerHTML=""}function JTe(t){return function(){this.innerHTML=t}}function ewe(t){return function(){var e=t.apply(this,arguments);this.innerHTML=e??""}}function k8(t){return arguments.length?this.each(t==null?ZTe:(typeof t=="function"?ewe:JTe)(t)):this.node().innerHTML}var LU=N(()=>{"use strict";o(ZTe,"htmlRemove");o(JTe,"htmlConstant");o(ewe,"htmlFunction");o(k8,"default")});function twe(){this.nextSibling&&this.parentNode.appendChild(this)}function E8(){return this.each(twe)}var RU=N(()=>{"use strict";o(twe,"raise");o(E8,"default")});function rwe(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function S8(){return this.each(rwe)}var NU=N(()=>{"use strict";o(rwe,"lower");o(S8,"default")});function C8(t){var e=typeof t=="function"?t:lv(t);return this.select(function(){return this.appendChild(e.apply(this,arguments))})}var MU=N(()=>{"use strict";WA();o(C8,"default")});function nwe(){return null}function A8(t,e){var r=typeof t=="function"?t:lv(t),n=e==null?nwe:typeof e=="function"?e:Sh(e);return this.select(function(){return this.insertBefore(r.apply(this,arguments),n.apply(this,arguments)||null)})}var IU=N(()=>{"use strict";WA();Z3();o(nwe,"constantNull");o(A8,"default")});function iwe(){var t=this.parentNode;t&&t.removeChild(this)}function _8(){return this.each(iwe)}var OU=N(()=>{"use strict";o(iwe,"remove");o(_8,"default")});function awe(){var t=this.cloneNode(!1),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function swe(){var t=this.cloneNode(!0),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function D8(t){return this.select(t?swe:awe)}var PU=N(()=>{"use strict";o(awe,"selection_cloneShallow");o(swe,"selection_cloneDeep");o(D8,"default")});function L8(t){return arguments.length?this.property("__data__",t):this.node().__data__}var BU=N(()=>{"use strict";o(L8,"default")});function owe(t){return function(e){t.call(this,e,this.__data__)}}function lwe(t){return t.trim().split(/^|\s+/).map(function(e){var r="",n=e.indexOf(".");return n>=0&&(r=e.slice(n+1),e=e.slice(0,n)),{type:e,name:r}})}function cwe(t){return function(){var e=this.__on;if(e){for(var r=0,n=-1,i=e.length,a;r{"use strict";o(owe,"contextListener");o(lwe,"parseTypenames");o(cwe,"onRemove");o(uwe,"onAdd");o(R8,"default")});function $U(t,e,r){var n=fv(t),i=n.CustomEvent;typeof i=="function"?i=new i(e,r):(i=n.document.createEvent("Event"),r?(i.initEvent(e,r.bubbles,r.cancelable),i.detail=r.detail):i.initEvent(e,!1,!1)),t.dispatchEvent(i)}function hwe(t,e){return function(){return $U(this,t,e)}}function fwe(t,e){return function(){return $U(this,t,e.apply(this,arguments))}}function N8(t,e){return this.each((typeof e=="function"?fwe:hwe)(t,e))}var zU=N(()=>{"use strict";g8();o($U,"dispatchEvent");o(hwe,"dispatchConstant");o(fwe,"dispatchFunction");o(N8,"default")});function*M8(){for(var t=this._groups,e=0,r=t.length;e{"use strict";o(M8,"default")});function ui(t,e){this._groups=t,this._parents=e}function VU(){return new ui([[document.documentElement]],I8)}function dwe(){return this}var I8,gu,gl=N(()=>{"use strict";nU();aU();sU();oU();lU();uU();t8();hU();fU();dU();pU();mU();gU();yU();vU();xU();bU();TU();wU();v8();kU();_U();DU();LU();RU();NU();MU();IU();OU();PU();BU();FU();zU();GU();I8=[null];o(ui,"Selection");o(VU,"selection");o(dwe,"selection_selection");ui.prototype=VU.prototype={constructor:ui,select:qA,selectAll:jA,selectChild:KA,selectChildren:QA,filter:ZA,data:n8,enter:e8,exit:i8,join:a8,merge:s8,selection:dwe,order:o8,sort:l8,call:c8,nodes:u8,node:h8,size:f8,empty:d8,each:p8,attr:m8,style:y8,property:x8,classed:T8,text:w8,html:k8,raise:E8,lower:S8,append:C8,insert:A8,remove:_8,clone:D8,datum:L8,on:R8,dispatch:N8,[Symbol.iterator]:M8};gu=VU});function Ge(t){return typeof t=="string"?new ui([[document.querySelector(t)]],[document.documentElement]):new ui([[t]],I8)}var UU=N(()=>{"use strict";gl();o(Ge,"default")});var yl=N(()=>{"use strict";cv();Q3();UU();gl();Z3();XA();v8()});var HU=N(()=>{"use strict"});function Ah(t,e,r){t.prototype=e.prototype=r,r.constructor=t}function L0(t,e){var r=Object.create(t.prototype);for(var n in e)r[n]=e[n];return r}var O8=N(()=>{"use strict";o(Ah,"default");o(L0,"extend")});function _h(){}function qU(){return this.rgb().formatHex()}function Twe(){return this.rgb().formatHex8()}function wwe(){return JU(this).formatHsl()}function YU(){return this.rgb().formatRgb()}function xl(t){var e,r;return t=(t+"").trim().toLowerCase(),(e=pwe.exec(t))?(r=e[1].length,e=parseInt(e[1],16),r===6?XU(e):r===3?new ca(e>>8&15|e>>4&240,e>>4&15|e&240,(e&15)<<4|e&15,1):r===8?e5(e>>24&255,e>>16&255,e>>8&255,(e&255)/255):r===4?e5(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|e&240,((e&15)<<4|e&15)/255):null):(e=mwe.exec(t))?new ca(e[1],e[2],e[3],1):(e=gwe.exec(t))?new ca(e[1]*255/100,e[2]*255/100,e[3]*255/100,1):(e=ywe.exec(t))?e5(e[1],e[2],e[3],e[4]):(e=vwe.exec(t))?e5(e[1]*255/100,e[2]*255/100,e[3]*255/100,e[4]):(e=xwe.exec(t))?QU(e[1],e[2]/100,e[3]/100,1):(e=bwe.exec(t))?QU(e[1],e[2]/100,e[3]/100,e[4]):WU.hasOwnProperty(t)?XU(WU[t]):t==="transparent"?new ca(NaN,NaN,NaN,0):null}function XU(t){return new ca(t>>16&255,t>>8&255,t&255,1)}function e5(t,e,r,n){return n<=0&&(t=e=r=NaN),new ca(t,e,r,n)}function B8(t){return t instanceof _h||(t=xl(t)),t?(t=t.rgb(),new ca(t.r,t.g,t.b,t.opacity)):new ca}function N0(t,e,r,n){return arguments.length===1?B8(t):new ca(t,e,r,n??1)}function ca(t,e,r,n){this.r=+t,this.g=+e,this.b=+r,this.opacity=+n}function jU(){return`#${gd(this.r)}${gd(this.g)}${gd(this.b)}`}function kwe(){return`#${gd(this.r)}${gd(this.g)}${gd(this.b)}${gd((isNaN(this.opacity)?1:this.opacity)*255)}`}function KU(){let t=n5(this.opacity);return`${t===1?"rgb(":"rgba("}${yd(this.r)}, ${yd(this.g)}, ${yd(this.b)}${t===1?")":`, ${t})`}`}function n5(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function yd(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function gd(t){return t=yd(t),(t<16?"0":"")+t.toString(16)}function QU(t,e,r,n){return n<=0?t=e=r=NaN:r<=0||r>=1?t=e=NaN:e<=0&&(t=NaN),new vl(t,e,r,n)}function JU(t){if(t instanceof vl)return new vl(t.h,t.s,t.l,t.opacity);if(t instanceof _h||(t=xl(t)),!t)return new vl;if(t instanceof vl)return t;t=t.rgb();var e=t.r/255,r=t.g/255,n=t.b/255,i=Math.min(e,r,n),a=Math.max(e,r,n),s=NaN,l=a-i,u=(a+i)/2;return l?(e===a?s=(r-n)/l+(r0&&u<1?0:s,new vl(s,l,u,t.opacity)}function eH(t,e,r,n){return arguments.length===1?JU(t):new vl(t,e,r,n??1)}function vl(t,e,r,n){this.h=+t,this.s=+e,this.l=+r,this.opacity=+n}function ZU(t){return t=(t||0)%360,t<0?t+360:t}function t5(t){return Math.max(0,Math.min(1,t||0))}function P8(t,e,r){return(t<60?e+(r-e)*t/60:t<180?r:t<240?e+(r-e)*(240-t)/60:e)*255}var dv,r5,R0,pv,oc,pwe,mwe,gwe,ywe,vwe,xwe,bwe,WU,F8=N(()=>{"use strict";O8();o(_h,"Color");dv=.7,r5=1/dv,R0="\\s*([+-]?\\d+)\\s*",pv="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",oc="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",pwe=/^#([0-9a-f]{3,8})$/,mwe=new RegExp(`^rgb\\(${R0},${R0},${R0}\\)$`),gwe=new RegExp(`^rgb\\(${oc},${oc},${oc}\\)$`),ywe=new RegExp(`^rgba\\(${R0},${R0},${R0},${pv}\\)$`),vwe=new RegExp(`^rgba\\(${oc},${oc},${oc},${pv}\\)$`),xwe=new RegExp(`^hsl\\(${pv},${oc},${oc}\\)$`),bwe=new RegExp(`^hsla\\(${pv},${oc},${oc},${pv}\\)$`),WU={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};Ah(_h,xl,{copy(t){return Object.assign(new this.constructor,this,t)},displayable(){return this.rgb().displayable()},hex:qU,formatHex:qU,formatHex8:Twe,formatHsl:wwe,formatRgb:YU,toString:YU});o(qU,"color_formatHex");o(Twe,"color_formatHex8");o(wwe,"color_formatHsl");o(YU,"color_formatRgb");o(xl,"color");o(XU,"rgbn");o(e5,"rgba");o(B8,"rgbConvert");o(N0,"rgb");o(ca,"Rgb");Ah(ca,N0,L0(_h,{brighter(t){return t=t==null?r5:Math.pow(r5,t),new ca(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=t==null?dv:Math.pow(dv,t),new ca(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new ca(yd(this.r),yd(this.g),yd(this.b),n5(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:jU,formatHex:jU,formatHex8:kwe,formatRgb:KU,toString:KU}));o(jU,"rgb_formatHex");o(kwe,"rgb_formatHex8");o(KU,"rgb_formatRgb");o(n5,"clampa");o(yd,"clampi");o(gd,"hex");o(QU,"hsla");o(JU,"hslConvert");o(eH,"hsl");o(vl,"Hsl");Ah(vl,eH,L0(_h,{brighter(t){return t=t==null?r5:Math.pow(r5,t),new vl(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=t==null?dv:Math.pow(dv,t),new vl(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+(this.h<0)*360,e=isNaN(t)||isNaN(this.s)?0:this.s,r=this.l,n=r+(r<.5?r:1-r)*e,i=2*r-n;return new ca(P8(t>=240?t-240:t+120,i,n),P8(t,i,n),P8(t<120?t+240:t-120,i,n),this.opacity)},clamp(){return new vl(ZU(this.h),t5(this.s),t5(this.l),n5(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(){let t=n5(this.opacity);return`${t===1?"hsl(":"hsla("}${ZU(this.h)}, ${t5(this.s)*100}%, ${t5(this.l)*100}%${t===1?")":`, ${t})`}`}}));o(ZU,"clamph");o(t5,"clampt");o(P8,"hsl2rgb")});var tH,rH,nH=N(()=>{"use strict";tH=Math.PI/180,rH=180/Math.PI});function cH(t){if(t instanceof lc)return new lc(t.l,t.a,t.b,t.opacity);if(t instanceof yu)return uH(t);t instanceof ca||(t=B8(t));var e=V8(t.r),r=V8(t.g),n=V8(t.b),i=$8((.2225045*e+.7168786*r+.0606169*n)/aH),a,s;return e===r&&r===n?a=s=i:(a=$8((.4360747*e+.3850649*r+.1430804*n)/iH),s=$8((.0139322*e+.0971045*r+.7141733*n)/sH)),new lc(116*i-16,500*(a-i),200*(i-s),t.opacity)}function U8(t,e,r,n){return arguments.length===1?cH(t):new lc(t,e,r,n??1)}function lc(t,e,r,n){this.l=+t,this.a=+e,this.b=+r,this.opacity=+n}function $8(t){return t>Ewe?Math.pow(t,1/3):t/lH+oH}function z8(t){return t>M0?t*t*t:lH*(t-oH)}function G8(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function V8(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function Swe(t){if(t instanceof yu)return new yu(t.h,t.c,t.l,t.opacity);if(t instanceof lc||(t=cH(t)),t.a===0&&t.b===0)return new yu(NaN,0{"use strict";O8();F8();nH();i5=18,iH=.96422,aH=1,sH=.82521,oH=4/29,M0=6/29,lH=3*M0*M0,Ewe=M0*M0*M0;o(cH,"labConvert");o(U8,"lab");o(lc,"Lab");Ah(lc,U8,L0(_h,{brighter(t){return new lc(this.l+i5*(t??1),this.a,this.b,this.opacity)},darker(t){return new lc(this.l-i5*(t??1),this.a,this.b,this.opacity)},rgb(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,r=isNaN(this.b)?t:t-this.b/200;return e=iH*z8(e),t=aH*z8(t),r=sH*z8(r),new ca(G8(3.1338561*e-1.6168667*t-.4906146*r),G8(-.9787684*e+1.9161415*t+.033454*r),G8(.0719453*e-.2289914*t+1.4052427*r),this.opacity)}}));o($8,"xyz2lab");o(z8,"lab2xyz");o(G8,"lrgb2rgb");o(V8,"rgb2lrgb");o(Swe,"hclConvert");o(mv,"hcl");o(yu,"Hcl");o(uH,"hcl2lab");Ah(yu,mv,L0(_h,{brighter(t){return new yu(this.h,this.c,this.l+i5*(t??1),this.opacity)},darker(t){return new yu(this.h,this.c,this.l-i5*(t??1),this.opacity)},rgb(){return uH(this).rgb()}}))});var I0=N(()=>{"use strict";F8();hH()});function H8(t,e,r,n,i){var a=t*t,s=a*t;return((1-3*t+3*a-s)*e+(4-6*a+3*s)*r+(1+3*t+3*a-3*s)*n+s*i)/6}function W8(t){var e=t.length-1;return function(r){var n=r<=0?r=0:r>=1?(r=1,e-1):Math.floor(r*e),i=t[n],a=t[n+1],s=n>0?t[n-1]:2*i-a,l=n{"use strict";o(H8,"basis");o(W8,"default")});function Y8(t){var e=t.length;return function(r){var n=Math.floor(((r%=1)<0?++r:r)*e),i=t[(n+e-1)%e],a=t[n%e],s=t[(n+1)%e],l=t[(n+2)%e];return H8((r-n/e)*e,i,a,s,l)}}var fH=N(()=>{"use strict";q8();o(Y8,"default")});var O0,X8=N(()=>{"use strict";O0=o(t=>()=>t,"default")});function dH(t,e){return function(r){return t+r*e}}function Cwe(t,e,r){return t=Math.pow(t,r),e=Math.pow(e,r)-t,r=1/r,function(n){return Math.pow(t+n*e,r)}}function pH(t,e){var r=e-t;return r?dH(t,r>180||r<-180?r-360*Math.round(r/360):r):O0(isNaN(t)?e:t)}function mH(t){return(t=+t)==1?vu:function(e,r){return r-e?Cwe(e,r,t):O0(isNaN(e)?r:e)}}function vu(t,e){var r=e-t;return r?dH(t,r):O0(isNaN(t)?e:t)}var j8=N(()=>{"use strict";X8();o(dH,"linear");o(Cwe,"exponential");o(pH,"hue");o(mH,"gamma");o(vu,"nogamma")});function gH(t){return function(e){var r=e.length,n=new Array(r),i=new Array(r),a=new Array(r),s,l;for(s=0;s{"use strict";I0();q8();fH();j8();vd=o(function t(e){var r=mH(e);function n(i,a){var s=r((i=N0(i)).r,(a=N0(a)).r),l=r(i.g,a.g),u=r(i.b,a.b),h=vu(i.opacity,a.opacity);return function(f){return i.r=s(f),i.g=l(f),i.b=u(f),i.opacity=h(f),i+""}}return o(n,"rgb"),n.gamma=t,n},"rgbGamma")(1);o(gH,"rgbSpline");Awe=gH(W8),_we=gH(Y8)});function Q8(t,e){e||(e=[]);var r=t?Math.min(e.length,t.length):0,n=e.slice(),i;return function(a){for(i=0;i{"use strict";o(Q8,"default");o(yH,"isNumberArray")});function xH(t,e){var r=e?e.length:0,n=t?Math.min(r,t.length):0,i=new Array(n),a=new Array(r),s;for(s=0;s{"use strict";a5();o(xH,"genericArray")});function Z8(t,e){var r=new Date;return t=+t,e=+e,function(n){return r.setTime(t*(1-n)+e*n),r}}var TH=N(()=>{"use strict";o(Z8,"default")});function Ki(t,e){return t=+t,e=+e,function(r){return t*(1-r)+e*r}}var gv=N(()=>{"use strict";o(Ki,"default")});function J8(t,e){var r={},n={},i;(t===null||typeof t!="object")&&(t={}),(e===null||typeof e!="object")&&(e={});for(i in e)i in t?r[i]=Dh(t[i],e[i]):n[i]=e[i];return function(a){for(i in r)n[i]=r[i](a);return n}}var wH=N(()=>{"use strict";a5();o(J8,"default")});function Dwe(t){return function(){return t}}function Lwe(t){return function(e){return t(e)+""}}function P0(t,e){var r=t_.lastIndex=e_.lastIndex=0,n,i,a,s=-1,l=[],u=[];for(t=t+"",e=e+"";(n=t_.exec(t))&&(i=e_.exec(e));)(a=i.index)>r&&(a=e.slice(r,a),l[s]?l[s]+=a:l[++s]=a),(n=n[0])===(i=i[0])?l[s]?l[s]+=i:l[++s]=i:(l[++s]=null,u.push({i:s,x:Ki(n,i)})),r=e_.lastIndex;return r{"use strict";gv();t_=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,e_=new RegExp(t_.source,"g");o(Dwe,"zero");o(Lwe,"one");o(P0,"default")});function Dh(t,e){var r=typeof e,n;return e==null||r==="boolean"?O0(e):(r==="number"?Ki:r==="string"?(n=xl(e))?(e=n,vd):P0:e instanceof xl?vd:e instanceof Date?Z8:yH(e)?Q8:Array.isArray(e)?xH:typeof e.valueOf!="function"&&typeof e.toString!="function"||isNaN(e)?J8:Ki)(t,e)}var a5=N(()=>{"use strict";I0();K8();bH();TH();gv();wH();r_();X8();vH();o(Dh,"default")});function s5(t,e){return t=+t,e=+e,function(r){return Math.round(t*(1-r)+e*r)}}var kH=N(()=>{"use strict";o(s5,"default")});function l5(t,e,r,n,i,a){var s,l,u;return(s=Math.sqrt(t*t+e*e))&&(t/=s,e/=s),(u=t*r+e*n)&&(r-=t*u,n-=e*u),(l=Math.sqrt(r*r+n*n))&&(r/=l,n/=l,u/=l),t*n{"use strict";EH=180/Math.PI,o5={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};o(l5,"default")});function CH(t){let e=new(typeof DOMMatrix=="function"?DOMMatrix:WebKitCSSMatrix)(t+"");return e.isIdentity?o5:l5(e.a,e.b,e.c,e.d,e.e,e.f)}function AH(t){return t==null?o5:(c5||(c5=document.createElementNS("http://www.w3.org/2000/svg","g")),c5.setAttribute("transform",t),(t=c5.transform.baseVal.consolidate())?(t=t.matrix,l5(t.a,t.b,t.c,t.d,t.e,t.f)):o5)}var c5,_H=N(()=>{"use strict";SH();o(CH,"parseCss");o(AH,"parseSvg")});function DH(t,e,r,n){function i(h){return h.length?h.pop()+" ":""}o(i,"pop");function a(h,f,d,p,m,g){if(h!==d||f!==p){var y=m.push("translate(",null,e,null,r);g.push({i:y-4,x:Ki(h,d)},{i:y-2,x:Ki(f,p)})}else(d||p)&&m.push("translate("+d+e+p+r)}o(a,"translate");function s(h,f,d,p){h!==f?(h-f>180?f+=360:f-h>180&&(h+=360),p.push({i:d.push(i(d)+"rotate(",null,n)-2,x:Ki(h,f)})):f&&d.push(i(d)+"rotate("+f+n)}o(s,"rotate");function l(h,f,d,p){h!==f?p.push({i:d.push(i(d)+"skewX(",null,n)-2,x:Ki(h,f)}):f&&d.push(i(d)+"skewX("+f+n)}o(l,"skewX");function u(h,f,d,p,m,g){if(h!==d||f!==p){var y=m.push(i(m)+"scale(",null,",",null,")");g.push({i:y-4,x:Ki(h,d)},{i:y-2,x:Ki(f,p)})}else(d!==1||p!==1)&&m.push(i(m)+"scale("+d+","+p+")")}return o(u,"scale"),function(h,f){var d=[],p=[];return h=t(h),f=t(f),a(h.translateX,h.translateY,f.translateX,f.translateY,d,p),s(h.rotate,f.rotate,d,p),l(h.skewX,f.skewX,d,p),u(h.scaleX,h.scaleY,f.scaleX,f.scaleY,d,p),h=f=null,function(m){for(var g=-1,y=p.length,v;++g{"use strict";gv();_H();o(DH,"interpolateTransform");n_=DH(CH,"px, ","px)","deg)"),i_=DH(AH,", ",")",")")});function RH(t){return function(e,r){var n=t((e=mv(e)).h,(r=mv(r)).h),i=vu(e.c,r.c),a=vu(e.l,r.l),s=vu(e.opacity,r.opacity);return function(l){return e.h=n(l),e.c=i(l),e.l=a(l),e.opacity=s(l),e+""}}}var a_,Rwe,NH=N(()=>{"use strict";I0();j8();o(RH,"hcl");a_=RH(pH),Rwe=RH(vu)});var B0=N(()=>{"use strict";a5();gv();kH();r_();LH();K8();NH()});function wv(){return xd||(OH(Nwe),xd=bv.now()+f5)}function Nwe(){xd=0}function Tv(){this._call=this._time=this._next=null}function d5(t,e,r){var n=new Tv;return n.restart(t,e,r),n}function PH(){wv(),++F0;for(var t=u5,e;t;)(e=xd-t._time)>=0&&t._call.call(void 0,e),t=t._next;--F0}function MH(){xd=(h5=bv.now())+f5,F0=vv=0;try{PH()}finally{F0=0,Iwe(),xd=0}}function Mwe(){var t=bv.now(),e=t-h5;e>IH&&(f5-=e,h5=t)}function Iwe(){for(var t,e=u5,r,n=1/0;e;)e._call?(n>e._time&&(n=e._time),t=e,e=e._next):(r=e._next,e._next=null,e=t?t._next=r:u5=r);xv=t,s_(n)}function s_(t){if(!F0){vv&&(vv=clearTimeout(vv));var e=t-xd;e>24?(t<1/0&&(vv=setTimeout(MH,t-bv.now()-f5)),yv&&(yv=clearInterval(yv))):(yv||(h5=bv.now(),yv=setInterval(Mwe,IH)),F0=1,OH(MH))}}var F0,vv,yv,IH,u5,xv,h5,xd,f5,bv,OH,o_=N(()=>{"use strict";F0=0,vv=0,yv=0,IH=1e3,h5=0,xd=0,f5=0,bv=typeof performance=="object"&&performance.now?performance:Date,OH=typeof window=="object"&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};o(wv,"now");o(Nwe,"clearNow");o(Tv,"Timer");Tv.prototype=d5.prototype={constructor:Tv,restart:o(function(t,e,r){if(typeof t!="function")throw new TypeError("callback is not a function");r=(r==null?wv():+r)+(e==null?0:+e),!this._next&&xv!==this&&(xv?xv._next=this:u5=this,xv=this),this._call=t,this._time=r,s_()},"restart"),stop:o(function(){this._call&&(this._call=null,this._time=1/0,s_())},"stop")};o(d5,"timer");o(PH,"timerFlush");o(MH,"wake");o(Mwe,"poke");o(Iwe,"nap");o(s_,"sleep")});function kv(t,e,r){var n=new Tv;return e=e==null?0:+e,n.restart(i=>{n.stop(),t(i+e)},e,r),n}var BH=N(()=>{"use strict";o_();o(kv,"default")});var p5=N(()=>{"use strict";o_();BH()});function xu(t,e,r,n,i,a){var s=t.__transition;if(!s)t.__transition={};else if(r in s)return;Bwe(t,r,{name:e,index:n,group:i,on:Owe,tween:Pwe,time:a.time,delay:a.delay,duration:a.duration,ease:a.ease,timer:null,state:zH})}function Sv(t,e){var r=zi(t,e);if(r.state>zH)throw new Error("too late; already scheduled");return r}function ua(t,e){var r=zi(t,e);if(r.state>m5)throw new Error("too late; already running");return r}function zi(t,e){var r=t.__transition;if(!r||!(r=r[e]))throw new Error("transition not found");return r}function Bwe(t,e,r){var n=t.__transition,i;n[e]=r,r.timer=d5(a,0,r.time);function a(h){r.state=FH,r.timer.restart(s,r.delay,r.time),r.delay<=h&&s(h-r.delay)}o(a,"schedule");function s(h){var f,d,p,m;if(r.state!==FH)return u();for(f in n)if(m=n[f],m.name===r.name){if(m.state===m5)return kv(s);m.state===$H?(m.state=Ev,m.timer.stop(),m.on.call("interrupt",t,t.__data__,m.index,m.group),delete n[f]):+f{"use strict";VA();p5();Owe=GA("start","end","cancel","interrupt"),Pwe=[],zH=0,FH=1,g5=2,m5=3,$H=4,y5=5,Ev=6;o(xu,"default");o(Sv,"init");o(ua,"set");o(zi,"get");o(Bwe,"create")});function Cv(t,e){var r=t.__transition,n,i,a=!0,s;if(r){e=e==null?null:e+"";for(s in r){if((n=r[s]).name!==e){a=!1;continue}i=n.state>g5&&n.state{"use strict";Ds();o(Cv,"default")});function l_(t){return this.each(function(){Cv(this,t)})}var VH=N(()=>{"use strict";GH();o(l_,"default")});function Fwe(t,e){var r,n;return function(){var i=ua(this,t),a=i.tween;if(a!==r){n=r=a;for(var s=0,l=n.length;s{"use strict";Ds();o(Fwe,"tweenRemove");o($we,"tweenFunction");o(c_,"default");o($0,"tweenValue")});function _v(t,e){var r;return(typeof e=="number"?Ki:e instanceof xl?vd:(r=xl(e))?(e=r,vd):P0)(t,e)}var u_=N(()=>{"use strict";I0();B0();o(_v,"default")});function zwe(t){return function(){this.removeAttribute(t)}}function Gwe(t){return function(){this.removeAttributeNS(t.space,t.local)}}function Vwe(t,e,r){var n,i=r+"",a;return function(){var s=this.getAttribute(t);return s===i?null:s===n?a:a=e(n=s,r)}}function Uwe(t,e,r){var n,i=r+"",a;return function(){var s=this.getAttributeNS(t.space,t.local);return s===i?null:s===n?a:a=e(n=s,r)}}function Hwe(t,e,r){var n,i,a;return function(){var s,l=r(this),u;return l==null?void this.removeAttribute(t):(s=this.getAttribute(t),u=l+"",s===u?null:s===n&&u===i?a:(i=u,a=e(n=s,l)))}}function Wwe(t,e,r){var n,i,a;return function(){var s,l=r(this),u;return l==null?void this.removeAttributeNS(t.space,t.local):(s=this.getAttributeNS(t.space,t.local),u=l+"",s===u?null:s===n&&u===i?a:(i=u,a=e(n=s,l)))}}function h_(t,e){var r=sc(t),n=r==="transform"?i_:_v;return this.attrTween(t,typeof e=="function"?(r.local?Wwe:Hwe)(r,n,$0(this,"attr."+t,e)):e==null?(r.local?Gwe:zwe)(r):(r.local?Uwe:Vwe)(r,n,e))}var UH=N(()=>{"use strict";B0();yl();Av();u_();o(zwe,"attrRemove");o(Gwe,"attrRemoveNS");o(Vwe,"attrConstant");o(Uwe,"attrConstantNS");o(Hwe,"attrFunction");o(Wwe,"attrFunctionNS");o(h_,"default")});function qwe(t,e){return function(r){this.setAttribute(t,e.call(this,r))}}function Ywe(t,e){return function(r){this.setAttributeNS(t.space,t.local,e.call(this,r))}}function Xwe(t,e){var r,n;function i(){var a=e.apply(this,arguments);return a!==n&&(r=(n=a)&&Ywe(t,a)),r}return o(i,"tween"),i._value=e,i}function jwe(t,e){var r,n;function i(){var a=e.apply(this,arguments);return a!==n&&(r=(n=a)&&qwe(t,a)),r}return o(i,"tween"),i._value=e,i}function f_(t,e){var r="attr."+t;if(arguments.length<2)return(r=this.tween(r))&&r._value;if(e==null)return this.tween(r,null);if(typeof e!="function")throw new Error;var n=sc(t);return this.tween(r,(n.local?Xwe:jwe)(n,e))}var HH=N(()=>{"use strict";yl();o(qwe,"attrInterpolate");o(Ywe,"attrInterpolateNS");o(Xwe,"attrTweenNS");o(jwe,"attrTween");o(f_,"default")});function Kwe(t,e){return function(){Sv(this,t).delay=+e.apply(this,arguments)}}function Qwe(t,e){return e=+e,function(){Sv(this,t).delay=e}}function d_(t){var e=this._id;return arguments.length?this.each((typeof t=="function"?Kwe:Qwe)(e,t)):zi(this.node(),e).delay}var WH=N(()=>{"use strict";Ds();o(Kwe,"delayFunction");o(Qwe,"delayConstant");o(d_,"default")});function Zwe(t,e){return function(){ua(this,t).duration=+e.apply(this,arguments)}}function Jwe(t,e){return e=+e,function(){ua(this,t).duration=e}}function p_(t){var e=this._id;return arguments.length?this.each((typeof t=="function"?Zwe:Jwe)(e,t)):zi(this.node(),e).duration}var qH=N(()=>{"use strict";Ds();o(Zwe,"durationFunction");o(Jwe,"durationConstant");o(p_,"default")});function eke(t,e){if(typeof e!="function")throw new Error;return function(){ua(this,t).ease=e}}function m_(t){var e=this._id;return arguments.length?this.each(eke(e,t)):zi(this.node(),e).ease}var YH=N(()=>{"use strict";Ds();o(eke,"easeConstant");o(m_,"default")});function tke(t,e){return function(){var r=e.apply(this,arguments);if(typeof r!="function")throw new Error;ua(this,t).ease=r}}function g_(t){if(typeof t!="function")throw new Error;return this.each(tke(this._id,t))}var XH=N(()=>{"use strict";Ds();o(tke,"easeVarying");o(g_,"default")});function y_(t){typeof t!="function"&&(t=D0(t));for(var e=this._groups,r=e.length,n=new Array(r),i=0;i{"use strict";yl();bd();o(y_,"default")});function v_(t){if(t._id!==this._id)throw new Error;for(var e=this._groups,r=t._groups,n=e.length,i=r.length,a=Math.min(n,i),s=new Array(n),l=0;l{"use strict";bd();o(v_,"default")});function rke(t){return(t+"").trim().split(/^|\s+/).every(function(e){var r=e.indexOf(".");return r>=0&&(e=e.slice(0,r)),!e||e==="start"})}function nke(t,e,r){var n,i,a=rke(e)?Sv:ua;return function(){var s=a(this,t),l=s.on;l!==n&&(i=(n=l).copy()).on(e,r),s.on=i}}function x_(t,e){var r=this._id;return arguments.length<2?zi(this.node(),r).on.on(t):this.each(nke(r,t,e))}var QH=N(()=>{"use strict";Ds();o(rke,"start");o(nke,"onFunction");o(x_,"default")});function ike(t){return function(){var e=this.parentNode;for(var r in this.__transition)if(+r!==t)return;e&&e.removeChild(this)}}function b_(){return this.on("end.remove",ike(this._id))}var ZH=N(()=>{"use strict";o(ike,"removeFunction");o(b_,"default")});function T_(t){var e=this._name,r=this._id;typeof t!="function"&&(t=Sh(t));for(var n=this._groups,i=n.length,a=new Array(i),s=0;s{"use strict";yl();bd();Ds();o(T_,"default")});function w_(t){var e=this._name,r=this._id;typeof t!="function"&&(t=_0(t));for(var n=this._groups,i=n.length,a=[],s=[],l=0;l{"use strict";yl();bd();Ds();o(w_,"default")});function k_(){return new ake(this._groups,this._parents)}var ake,tW=N(()=>{"use strict";yl();ake=gu.prototype.constructor;o(k_,"default")});function ske(t,e){var r,n,i;return function(){var a=Ch(this,t),s=(this.style.removeProperty(t),Ch(this,t));return a===s?null:a===r&&s===n?i:i=e(r=a,n=s)}}function rW(t){return function(){this.style.removeProperty(t)}}function oke(t,e,r){var n,i=r+"",a;return function(){var s=Ch(this,t);return s===i?null:s===n?a:a=e(n=s,r)}}function lke(t,e,r){var n,i,a;return function(){var s=Ch(this,t),l=r(this),u=l+"";return l==null&&(u=l=(this.style.removeProperty(t),Ch(this,t))),s===u?null:s===n&&u===i?a:(i=u,a=e(n=s,l))}}function cke(t,e){var r,n,i,a="style."+e,s="end."+a,l;return function(){var u=ua(this,t),h=u.on,f=u.value[a]==null?l||(l=rW(e)):void 0;(h!==r||i!==f)&&(n=(r=h).copy()).on(s,i=f),u.on=n}}function E_(t,e,r){var n=(t+="")=="transform"?n_:_v;return e==null?this.styleTween(t,ske(t,n)).on("end.style."+t,rW(t)):typeof e=="function"?this.styleTween(t,lke(t,n,$0(this,"style."+t,e))).each(cke(this._id,t)):this.styleTween(t,oke(t,n,e),r).on("end.style."+t,null)}var nW=N(()=>{"use strict";B0();yl();Ds();Av();u_();o(ske,"styleNull");o(rW,"styleRemove");o(oke,"styleConstant");o(lke,"styleFunction");o(cke,"styleMaybeRemove");o(E_,"default")});function uke(t,e,r){return function(n){this.style.setProperty(t,e.call(this,n),r)}}function hke(t,e,r){var n,i;function a(){var s=e.apply(this,arguments);return s!==i&&(n=(i=s)&&uke(t,s,r)),n}return o(a,"tween"),a._value=e,a}function S_(t,e,r){var n="style."+(t+="");if(arguments.length<2)return(n=this.tween(n))&&n._value;if(e==null)return this.tween(n,null);if(typeof e!="function")throw new Error;return this.tween(n,hke(t,e,r??""))}var iW=N(()=>{"use strict";o(uke,"styleInterpolate");o(hke,"styleTween");o(S_,"default")});function fke(t){return function(){this.textContent=t}}function dke(t){return function(){var e=t(this);this.textContent=e??""}}function C_(t){return this.tween("text",typeof t=="function"?dke($0(this,"text",t)):fke(t==null?"":t+""))}var aW=N(()=>{"use strict";Av();o(fke,"textConstant");o(dke,"textFunction");o(C_,"default")});function pke(t){return function(e){this.textContent=t.call(this,e)}}function mke(t){var e,r;function n(){var i=t.apply(this,arguments);return i!==r&&(e=(r=i)&&pke(i)),e}return o(n,"tween"),n._value=t,n}function A_(t){var e="text";if(arguments.length<1)return(e=this.tween(e))&&e._value;if(t==null)return this.tween(e,null);if(typeof t!="function")throw new Error;return this.tween(e,mke(t))}var sW=N(()=>{"use strict";o(pke,"textInterpolate");o(mke,"textTween");o(A_,"default")});function __(){for(var t=this._name,e=this._id,r=v5(),n=this._groups,i=n.length,a=0;a{"use strict";bd();Ds();o(__,"default")});function D_(){var t,e,r=this,n=r._id,i=r.size();return new Promise(function(a,s){var l={value:s},u={value:o(function(){--i===0&&a()},"value")};r.each(function(){var h=ua(this,n),f=h.on;f!==t&&(e=(t=f).copy(),e._.cancel.push(l),e._.interrupt.push(l),e._.end.push(u)),h.on=e}),i===0&&a()})}var lW=N(()=>{"use strict";Ds();o(D_,"default")});function as(t,e,r,n){this._groups=t,this._parents=e,this._name=r,this._id=n}function cW(t){return gu().transition(t)}function v5(){return++gke}var gke,bu,bd=N(()=>{"use strict";yl();UH();HH();WH();qH();YH();XH();jH();KH();QH();ZH();JH();eW();tW();nW();iW();aW();sW();oW();Av();lW();gke=0;o(as,"Transition");o(cW,"transition");o(v5,"newId");bu=gu.prototype;as.prototype=cW.prototype={constructor:as,select:T_,selectAll:w_,selectChild:bu.selectChild,selectChildren:bu.selectChildren,filter:y_,merge:v_,selection:k_,transition:__,call:bu.call,nodes:bu.nodes,node:bu.node,size:bu.size,empty:bu.empty,each:bu.each,on:x_,attr:h_,attrTween:f_,style:E_,styleTween:S_,text:C_,textTween:A_,remove:b_,tween:c_,delay:d_,duration:p_,ease:m_,easeVarying:g_,end:D_,[Symbol.iterator]:bu[Symbol.iterator]}});function x5(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}var uW=N(()=>{"use strict";o(x5,"cubicInOut")});var L_=N(()=>{"use strict";uW()});function vke(t,e){for(var r;!(r=t.__transition)||!(r=r[e]);)if(!(t=t.parentNode))throw new Error(`transition ${e} not found`);return r}function R_(t){var e,r;t instanceof as?(e=t._id,t=t._name):(e=v5(),(r=yke).time=wv(),t=t==null?null:t+"");for(var n=this._groups,i=n.length,a=0;a{"use strict";bd();Ds();L_();p5();yke={time:null,delay:0,duration:250,ease:x5};o(vke,"inherit");o(R_,"default")});var fW=N(()=>{"use strict";yl();VH();hW();gu.prototype.interrupt=l_;gu.prototype.transition=R_});var b5=N(()=>{"use strict";fW()});var dW=N(()=>{"use strict"});var pW=N(()=>{"use strict"});var mW=N(()=>{"use strict"});function gW(t){return[+t[0],+t[1]]}function xke(t){return[gW(t[0]),gW(t[1])]}function N_(t){return{type:t}}var _gt,Dgt,Lgt,Rgt,Ngt,Mgt,yW=N(()=>{"use strict";b5();dW();pW();mW();({abs:_gt,max:Dgt,min:Lgt}=Math);o(gW,"number1");o(xke,"number2");Rgt={name:"x",handles:["w","e"].map(N_),input:o(function(t,e){return t==null?null:[[+t[0],e[0][1]],[+t[1],e[1][1]]]},"input"),output:o(function(t){return t&&[t[0][0],t[1][0]]},"output")},Ngt={name:"y",handles:["n","s"].map(N_),input:o(function(t,e){return t==null?null:[[e[0][0],+t[0]],[e[1][0],+t[1]]]},"input"),output:o(function(t){return t&&[t[0][1],t[1][1]]},"output")},Mgt={name:"xy",handles:["n","w","e","s","nw","ne","sw","se"].map(N_),input:o(function(t){return t==null?null:xke(t)},"input"),output:o(function(t){return t},"output")};o(N_,"type")});var vW=N(()=>{"use strict";yW()});function xW(t){this._+=t[0];for(let e=1,r=t.length;e=0))throw new Error(`invalid digits: ${t}`);if(e>15)return xW;let r=10**e;return function(n){this._+=n[0];for(let i=1,a=n.length;i{"use strict";M_=Math.PI,I_=2*M_,Td=1e-6,bke=I_-Td;o(xW,"append");o(Tke,"appendRound");wd=class{static{o(this,"Path")}constructor(e){this._x0=this._y0=this._x1=this._y1=null,this._="",this._append=e==null?xW:Tke(e)}moveTo(e,r){this._append`M${this._x0=this._x1=+e},${this._y0=this._y1=+r}`}closePath(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._append`Z`)}lineTo(e,r){this._append`L${this._x1=+e},${this._y1=+r}`}quadraticCurveTo(e,r,n,i){this._append`Q${+e},${+r},${this._x1=+n},${this._y1=+i}`}bezierCurveTo(e,r,n,i,a,s){this._append`C${+e},${+r},${+n},${+i},${this._x1=+a},${this._y1=+s}`}arcTo(e,r,n,i,a){if(e=+e,r=+r,n=+n,i=+i,a=+a,a<0)throw new Error(`negative radius: ${a}`);let s=this._x1,l=this._y1,u=n-e,h=i-r,f=s-e,d=l-r,p=f*f+d*d;if(this._x1===null)this._append`M${this._x1=e},${this._y1=r}`;else if(p>Td)if(!(Math.abs(d*u-h*f)>Td)||!a)this._append`L${this._x1=e},${this._y1=r}`;else{let m=n-s,g=i-l,y=u*u+h*h,v=m*m+g*g,x=Math.sqrt(y),b=Math.sqrt(p),T=a*Math.tan((M_-Math.acos((y+p-v)/(2*x*b)))/2),S=T/b,w=T/x;Math.abs(S-1)>Td&&this._append`L${e+S*f},${r+S*d}`,this._append`A${a},${a},0,0,${+(d*m>f*g)},${this._x1=e+w*u},${this._y1=r+w*h}`}}arc(e,r,n,i,a,s){if(e=+e,r=+r,n=+n,s=!!s,n<0)throw new Error(`negative radius: ${n}`);let l=n*Math.cos(i),u=n*Math.sin(i),h=e+l,f=r+u,d=1^s,p=s?i-a:a-i;this._x1===null?this._append`M${h},${f}`:(Math.abs(this._x1-h)>Td||Math.abs(this._y1-f)>Td)&&this._append`L${h},${f}`,n&&(p<0&&(p=p%I_+I_),p>bke?this._append`A${n},${n},0,1,${d},${e-l},${r-u}A${n},${n},0,1,${d},${this._x1=h},${this._y1=f}`:p>Td&&this._append`A${n},${n},0,${+(p>=M_)},${d},${this._x1=e+n*Math.cos(a)},${this._y1=r+n*Math.sin(a)}`)}rect(e,r,n,i){this._append`M${this._x0=this._x1=+e},${this._y0=this._y1=+r}h${n=+n}v${+i}h${-n}Z`}toString(){return this._}};o(bW,"path");bW.prototype=wd.prototype});var O_=N(()=>{"use strict";TW()});var wW=N(()=>{"use strict"});var kW=N(()=>{"use strict"});var EW=N(()=>{"use strict"});var SW=N(()=>{"use strict"});var CW=N(()=>{"use strict"});var AW=N(()=>{"use strict"});var _W=N(()=>{"use strict"});function P_(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)}function kd(t,e){if((r=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var r,n=t.slice(0,r);return[n.length>1?n[0]+n.slice(2):n,+t.slice(r+1)]}var Dv=N(()=>{"use strict";o(P_,"default");o(kd,"formatDecimalParts")});function bl(t){return t=kd(Math.abs(t)),t?t[1]:NaN}var Lv=N(()=>{"use strict";Dv();o(bl,"default")});function B_(t,e){return function(r,n){for(var i=r.length,a=[],s=0,l=t[0],u=0;i>0&&l>0&&(u+l+1>n&&(l=Math.max(1,n-u)),a.push(r.substring(i-=l,i+l)),!((u+=l+1)>n));)l=t[s=(s+1)%t.length];return a.reverse().join(e)}}var DW=N(()=>{"use strict";o(B_,"default")});function F_(t){return function(e){return e.replace(/[0-9]/g,function(r){return t[+r]})}}var LW=N(()=>{"use strict";o(F_,"default")});function Lh(t){if(!(e=wke.exec(t)))throw new Error("invalid format: "+t);var e;return new T5({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}function T5(t){this.fill=t.fill===void 0?" ":t.fill+"",this.align=t.align===void 0?">":t.align+"",this.sign=t.sign===void 0?"-":t.sign+"",this.symbol=t.symbol===void 0?"":t.symbol+"",this.zero=!!t.zero,this.width=t.width===void 0?void 0:+t.width,this.comma=!!t.comma,this.precision=t.precision===void 0?void 0:+t.precision,this.trim=!!t.trim,this.type=t.type===void 0?"":t.type+""}var wke,$_=N(()=>{"use strict";wke=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;o(Lh,"formatSpecifier");Lh.prototype=T5.prototype;o(T5,"FormatSpecifier");T5.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 z_(t){e:for(var e=t.length,r=1,n=-1,i;r0&&(n=0);break}return n>0?t.slice(0,n)+t.slice(i+1):t}var RW=N(()=>{"use strict";o(z_,"default")});function V_(t,e){var r=kd(t,e);if(!r)return t+"";var n=r[0],i=r[1],a=i-(G_=Math.max(-8,Math.min(8,Math.floor(i/3)))*3)+1,s=n.length;return a===s?n:a>s?n+new Array(a-s+1).join("0"):a>0?n.slice(0,a)+"."+n.slice(a):"0."+new Array(1-a).join("0")+kd(t,Math.max(0,e+a-1))[0]}var G_,U_=N(()=>{"use strict";Dv();o(V_,"default")});function w5(t,e){var r=kd(t,e);if(!r)return t+"";var n=r[0],i=r[1];return i<0?"0."+new Array(-i).join("0")+n:n.length>i+1?n.slice(0,i+1)+"."+n.slice(i+1):n+new Array(i-n.length+2).join("0")}var NW=N(()=>{"use strict";Dv();o(w5,"default")});var H_,MW=N(()=>{"use strict";Dv();U_();NW();H_={"%":o((t,e)=>(t*100).toFixed(e),"%"),b:o(t=>Math.round(t).toString(2),"b"),c:o(t=>t+"","c"),d:P_,e:o((t,e)=>t.toExponential(e),"e"),f:o((t,e)=>t.toFixed(e),"f"),g:o((t,e)=>t.toPrecision(e),"g"),o:o(t=>Math.round(t).toString(8),"o"),p:o((t,e)=>w5(t*100,e),"p"),r:w5,s:V_,X:o(t=>Math.round(t).toString(16).toUpperCase(),"X"),x:o(t=>Math.round(t).toString(16),"x")}});function k5(t){return t}var IW=N(()=>{"use strict";o(k5,"default")});function W_(t){var e=t.grouping===void 0||t.thousands===void 0?k5:B_(OW.call(t.grouping,Number),t.thousands+""),r=t.currency===void 0?"":t.currency[0]+"",n=t.currency===void 0?"":t.currency[1]+"",i=t.decimal===void 0?".":t.decimal+"",a=t.numerals===void 0?k5:F_(OW.call(t.numerals,String)),s=t.percent===void 0?"%":t.percent+"",l=t.minus===void 0?"\u2212":t.minus+"",u=t.nan===void 0?"NaN":t.nan+"";function h(d){d=Lh(d);var p=d.fill,m=d.align,g=d.sign,y=d.symbol,v=d.zero,x=d.width,b=d.comma,T=d.precision,S=d.trim,w=d.type;w==="n"?(b=!0,w="g"):H_[w]||(T===void 0&&(T=12),S=!0,w="g"),(v||p==="0"&&m==="=")&&(v=!0,p="0",m="=");var E=y==="$"?r:y==="#"&&/[boxX]/.test(w)?"0"+w.toLowerCase():"",_=y==="$"?n:/[%p]/.test(w)?s:"",C=H_[w],D=/[defgprs%]/.test(w);T=T===void 0?6:/[gprs]/.test(w)?Math.max(1,Math.min(21,T)):Math.max(0,Math.min(20,T));function O(R){var k=E,L=_,A,I,M;if(w==="c")L=C(R)+L,R="";else{R=+R;var P=R<0||1/R<0;if(R=isNaN(R)?u:C(Math.abs(R),T),S&&(R=z_(R)),P&&+R==0&&g!=="+"&&(P=!1),k=(P?g==="("?g:l:g==="-"||g==="("?"":g)+k,L=(w==="s"?PW[8+G_/3]:"")+L+(P&&g==="("?")":""),D){for(A=-1,I=R.length;++AM||M>57){L=(M===46?i+R.slice(A+1):R.slice(A))+L,R=R.slice(0,A);break}}}b&&!v&&(R=e(R,1/0));var B=k.length+R.length+L.length,F=B>1)+k+R+L+F.slice(B);break;default:R=F+k+R+L;break}return a(R)}return o(O,"format"),O.toString=function(){return d+""},O}o(h,"newFormat");function f(d,p){var m=h((d=Lh(d),d.type="f",d)),g=Math.max(-8,Math.min(8,Math.floor(bl(p)/3)))*3,y=Math.pow(10,-g),v=PW[8+g/3];return function(x){return m(y*x)+v}}return o(f,"formatPrefix"),{format:h,formatPrefix:f}}var OW,PW,BW=N(()=>{"use strict";Lv();DW();LW();$_();RW();MW();U_();IW();OW=Array.prototype.map,PW=["y","z","a","f","p","n","\xB5","m","","k","M","G","T","P","E","Z","Y"];o(W_,"default")});function q_(t){return E5=W_(t),cc=E5.format,S5=E5.formatPrefix,E5}var E5,cc,S5,FW=N(()=>{"use strict";BW();q_({thousands:",",grouping:[3],currency:["$",""]});o(q_,"defaultLocale")});function C5(t){return Math.max(0,-bl(Math.abs(t)))}var $W=N(()=>{"use strict";Lv();o(C5,"default")});function A5(t,e){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(bl(e)/3)))*3-bl(Math.abs(t)))}var zW=N(()=>{"use strict";Lv();o(A5,"default")});function _5(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,bl(e)-bl(t))+1}var GW=N(()=>{"use strict";Lv();o(_5,"default")});var Y_=N(()=>{"use strict";FW();$_();$W();zW();GW()});var VW=N(()=>{"use strict"});function kke(t){var e=0,r=t.children,n=r&&r.length;if(!n)e=1;else for(;--n>=0;)e+=r[n].value;t.value=e}function X_(){return this.eachAfter(kke)}var UW=N(()=>{"use strict";o(kke,"count");o(X_,"default")});function j_(t,e){let r=-1;for(let n of this)t.call(e,n,++r,this);return this}var HW=N(()=>{"use strict";o(j_,"default")});function K_(t,e){for(var r=this,n=[r],i,a,s=-1;r=n.pop();)if(t.call(e,r,++s,this),i=r.children)for(a=i.length-1;a>=0;--a)n.push(i[a]);return this}var WW=N(()=>{"use strict";o(K_,"default")});function Q_(t,e){for(var r=this,n=[r],i=[],a,s,l,u=-1;r=n.pop();)if(i.push(r),a=r.children)for(s=0,l=a.length;s{"use strict";o(Q_,"default")});function Z_(t,e){let r=-1;for(let n of this)if(t.call(e,n,++r,this))return n}var YW=N(()=>{"use strict";o(Z_,"default")});function J_(t){return this.eachAfter(function(e){for(var r=+t(e.data)||0,n=e.children,i=n&&n.length;--i>=0;)r+=n[i].value;e.value=r})}var XW=N(()=>{"use strict";o(J_,"default")});function eD(t){return this.eachBefore(function(e){e.children&&e.children.sort(t)})}var jW=N(()=>{"use strict";o(eD,"default")});function tD(t){for(var e=this,r=Eke(e,t),n=[e];e!==r;)e=e.parent,n.push(e);for(var i=n.length;t!==r;)n.splice(i,0,t),t=t.parent;return n}function Eke(t,e){if(t===e)return t;var r=t.ancestors(),n=e.ancestors(),i=null;for(t=r.pop(),e=n.pop();t===e;)i=t,t=r.pop(),e=n.pop();return i}var KW=N(()=>{"use strict";o(tD,"default");o(Eke,"leastCommonAncestor")});function rD(){for(var t=this,e=[t];t=t.parent;)e.push(t);return e}var QW=N(()=>{"use strict";o(rD,"default")});function nD(){return Array.from(this)}var ZW=N(()=>{"use strict";o(nD,"default")});function iD(){var t=[];return this.eachBefore(function(e){e.children||t.push(e)}),t}var JW=N(()=>{"use strict";o(iD,"default")});function aD(){var t=this,e=[];return t.each(function(r){r!==t&&e.push({source:r.parent,target:r})}),e}var eq=N(()=>{"use strict";o(aD,"default")});function*sD(){var t=this,e,r=[t],n,i,a;do for(e=r.reverse(),r=[];t=e.pop();)if(yield t,n=t.children)for(i=0,a=n.length;i{"use strict";o(sD,"default")});function z0(t,e){t instanceof Map?(t=[void 0,t],e===void 0&&(e=Ake)):e===void 0&&(e=Cke);for(var r=new Rv(t),n,i=[r],a,s,l,u;n=i.pop();)if((s=e(n.data))&&(u=(s=Array.from(s)).length))for(n.children=s,l=u-1;l>=0;--l)i.push(a=s[l]=new Rv(s[l])),a.parent=n,a.depth=n.depth+1;return r.eachBefore(Dke)}function Ske(){return z0(this).eachBefore(_ke)}function Cke(t){return t.children}function Ake(t){return Array.isArray(t)?t[1]:null}function _ke(t){t.data.value!==void 0&&(t.value=t.data.value),t.data=t.data.data}function Dke(t){var e=0;do t.height=e;while((t=t.parent)&&t.height<++e)}function Rv(t){this.data=t,this.depth=this.height=0,this.parent=null}var rq=N(()=>{"use strict";UW();HW();WW();qW();YW();XW();jW();KW();QW();ZW();JW();eq();tq();o(z0,"hierarchy");o(Ske,"node_copy");o(Cke,"objectChildren");o(Ake,"mapChildren");o(_ke,"copyData");o(Dke,"computeHeight");o(Rv,"Node");Rv.prototype=z0.prototype={constructor:Rv,count:X_,each:j_,eachAfter:Q_,eachBefore:K_,find:Z_,sum:J_,sort:eD,path:tD,ancestors:rD,descendants:nD,leaves:iD,links:aD,copy:Ske,[Symbol.iterator]:sD}});function nq(t){if(typeof t!="function")throw new Error;return t}var iq=N(()=>{"use strict";o(nq,"required")});function G0(){return 0}function Ed(t){return function(){return t}}var aq=N(()=>{"use strict";o(G0,"constantZero");o(Ed,"default")});function oD(t){t.x0=Math.round(t.x0),t.y0=Math.round(t.y0),t.x1=Math.round(t.x1),t.y1=Math.round(t.y1)}var sq=N(()=>{"use strict";o(oD,"default")});function lD(t,e,r,n,i){for(var a=t.children,s,l=-1,u=a.length,h=t.value&&(n-e)/t.value;++l{"use strict";o(lD,"default")});function cD(t,e,r,n,i){for(var a=t.children,s,l=-1,u=a.length,h=t.value&&(i-r)/t.value;++l{"use strict";o(cD,"default")});function Rke(t,e,r,n,i,a){for(var s=[],l=e.children,u,h,f=0,d=0,p=l.length,m,g,y=e.value,v,x,b,T,S,w,E;fb&&(b=h),E=v*v*w,T=Math.max(b/E,E/x),T>S){v-=h;break}S=T}s.push(u={value:v,dice:m{"use strict";oq();lq();Lke=(1+Math.sqrt(5))/2;o(Rke,"squarifyRatio");cq=o(function t(e){function r(n,i,a,s,l){Rke(e,n,i,a,s,l)}return o(r,"squarify"),r.ratio=function(n){return t((n=+n)>1?n:1)},r},"custom")(Lke)});function D5(){var t=cq,e=!1,r=1,n=1,i=[0],a=G0,s=G0,l=G0,u=G0,h=G0;function f(p){return p.x0=p.y0=0,p.x1=r,p.y1=n,p.eachBefore(d),i=[0],e&&p.eachBefore(oD),p}o(f,"treemap");function d(p){var m=i[p.depth],g=p.x0+m,y=p.y0+m,v=p.x1-m,x=p.y1-m;v{"use strict";sq();uq();iq();aq();o(D5,"default")});var fq=N(()=>{"use strict";rq();hq()});var dq=N(()=>{"use strict"});var pq=N(()=>{"use strict"});function Rh(t,e){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(e).domain(t);break}return this}var Nv=N(()=>{"use strict";o(Rh,"initRange")});function Js(){var t=new C0,e=[],r=[],n=uD;function i(a){let s=t.get(a);if(s===void 0){if(n!==uD)return n;t.set(a,s=e.push(a)-1)}return r[s%r.length]}return o(i,"scale"),i.domain=function(a){if(!arguments.length)return e.slice();e=[],t=new C0;for(let s of a)t.has(s)||t.set(s,e.push(s)-1);return i},i.range=function(a){return arguments.length?(r=Array.from(a),i):r.slice()},i.unknown=function(a){return arguments.length?(n=a,i):n},i.copy=function(){return Js(e,r).unknown(n)},Rh.apply(i,arguments),i}var uD,hD=N(()=>{"use strict";Eh();Nv();uD=Symbol("implicit");o(Js,"ordinal")});function V0(){var t=Js().unknown(void 0),e=t.domain,r=t.range,n=0,i=1,a,s,l=!1,u=0,h=0,f=.5;delete t.unknown;function d(){var p=e().length,m=i{"use strict";Eh();Nv();hD();o(V0,"band")});function fD(t){return function(){return t}}var gq=N(()=>{"use strict";o(fD,"constants")});function dD(t){return+t}var yq=N(()=>{"use strict";o(dD,"number")});function U0(t){return t}function pD(t,e){return(e-=t=+t)?function(r){return(r-t)/e}:fD(isNaN(e)?NaN:.5)}function Nke(t,e){var r;return t>e&&(r=t,t=e,e=r),function(n){return Math.max(t,Math.min(e,n))}}function Mke(t,e,r){var n=t[0],i=t[1],a=e[0],s=e[1];return i2?Ike:Mke,u=h=null,d}o(f,"rescale");function d(p){return p==null||isNaN(p=+p)?a:(u||(u=l(t.map(n),e,r)))(n(s(p)))}return o(d,"scale"),d.invert=function(p){return s(i((h||(h=l(e,t.map(n),Ki)))(p)))},d.domain=function(p){return arguments.length?(t=Array.from(p,dD),f()):t.slice()},d.range=function(p){return arguments.length?(e=Array.from(p),f()):e.slice()},d.rangeRound=function(p){return e=Array.from(p),r=s5,f()},d.clamp=function(p){return arguments.length?(s=p?!0:U0,f()):s!==U0},d.interpolate=function(p){return arguments.length?(r=p,f()):r},d.unknown=function(p){return arguments.length?(a=p,d):a},function(p,m){return n=p,i=m,f()}}function Mv(){return Oke()(U0,U0)}var vq,mD=N(()=>{"use strict";Eh();B0();gq();yq();vq=[0,1];o(U0,"identity");o(pD,"normalize");o(Nke,"clamper");o(Mke,"bimap");o(Ike,"polymap");o(L5,"copy");o(Oke,"transformer");o(Mv,"continuous")});function gD(t,e,r,n){var i=A0(t,e,r),a;switch(n=Lh(n??",f"),n.type){case"s":{var s=Math.max(Math.abs(t),Math.abs(e));return n.precision==null&&!isNaN(a=A5(i,s))&&(n.precision=a),S5(n,s)}case"":case"e":case"g":case"p":case"r":{n.precision==null&&!isNaN(a=_5(i,Math.max(Math.abs(t),Math.abs(e))))&&(n.precision=a-(n.type==="e"));break}case"f":case"%":{n.precision==null&&!isNaN(a=C5(i))&&(n.precision=a-(n.type==="%")*2);break}}return cc(n)}var xq=N(()=>{"use strict";Eh();Y_();o(gD,"tickFormat")});function Pke(t){var e=t.domain;return t.ticks=function(r){var n=e();return U3(n[0],n[n.length-1],r??10)},t.tickFormat=function(r,n){var i=e();return gD(i[0],i[i.length-1],r??10,n)},t.nice=function(r){r==null&&(r=10);var n=e(),i=0,a=n.length-1,s=n[i],l=n[a],u,h,f=10;for(l0;){if(h=ov(s,l,r),h===u)return n[i]=s,n[a]=l,e(n);if(h>0)s=Math.floor(s/h)*h,l=Math.ceil(l/h)*h;else if(h<0)s=Math.ceil(s*h)/h,l=Math.floor(l*h)/h;else break;u=h}return t},t}function Tl(){var t=Mv();return t.copy=function(){return L5(t,Tl())},Rh.apply(t,arguments),Pke(t)}var bq=N(()=>{"use strict";Eh();mD();Nv();xq();o(Pke,"linearish");o(Tl,"linear")});function yD(t,e){t=t.slice();var r=0,n=t.length-1,i=t[r],a=t[n],s;return a{"use strict";o(yD,"nice")});function xn(t,e,r,n){function i(a){return t(a=arguments.length===0?new Date:new Date(+a)),a}return o(i,"interval"),i.floor=a=>(t(a=new Date(+a)),a),i.ceil=a=>(t(a=new Date(a-1)),e(a,1),t(a),a),i.round=a=>{let s=i(a),l=i.ceil(a);return a-s(e(a=new Date(+a),s==null?1:Math.floor(s)),a),i.range=(a,s,l)=>{let u=[];if(a=i.ceil(a),l=l==null?1:Math.floor(l),!(a0))return u;let h;do u.push(h=new Date(+a)),e(a,l),t(a);while(hxn(s=>{if(s>=s)for(;t(s),!a(s);)s.setTime(s-1)},(s,l)=>{if(s>=s)if(l<0)for(;++l<=0;)for(;e(s,-1),!a(s););else for(;--l>=0;)for(;e(s,1),!a(s););}),r&&(i.count=(a,s)=>(vD.setTime(+a),xD.setTime(+s),t(vD),t(xD),Math.floor(r(vD,xD))),i.every=a=>(a=Math.floor(a),!isFinite(a)||!(a>0)?null:a>1?i.filter(n?s=>n(s)%a===0:s=>i.count(0,s)%a===0):i)),i}var vD,xD,Tu=N(()=>{"use strict";vD=new Date,xD=new Date;o(xn,"timeInterval")});var uc,wq,bD=N(()=>{"use strict";Tu();uc=xn(()=>{},(t,e)=>{t.setTime(+t+e)},(t,e)=>e-t);uc.every=t=>(t=Math.floor(t),!isFinite(t)||!(t>0)?null:t>1?xn(e=>{e.setTime(Math.floor(e/t)*t)},(e,r)=>{e.setTime(+e+r*t)},(e,r)=>(r-e)/t):uc);wq=uc.range});var eo,kq,TD=N(()=>{"use strict";Tu();eo=xn(t=>{t.setTime(t-t.getMilliseconds())},(t,e)=>{t.setTime(+t+e*1e3)},(t,e)=>(e-t)/1e3,t=>t.getUTCSeconds()),kq=eo.range});var wu,Bke,R5,Fke,wD=N(()=>{"use strict";Tu();wu=xn(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*1e3)},(t,e)=>{t.setTime(+t+e*6e4)},(t,e)=>(e-t)/6e4,t=>t.getMinutes()),Bke=wu.range,R5=xn(t=>{t.setUTCSeconds(0,0)},(t,e)=>{t.setTime(+t+e*6e4)},(t,e)=>(e-t)/6e4,t=>t.getUTCMinutes()),Fke=R5.range});var ku,$ke,N5,zke,kD=N(()=>{"use strict";Tu();ku=xn(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*1e3-t.getMinutes()*6e4)},(t,e)=>{t.setTime(+t+e*36e5)},(t,e)=>(e-t)/36e5,t=>t.getHours()),$ke=ku.range,N5=xn(t=>{t.setUTCMinutes(0,0,0)},(t,e)=>{t.setTime(+t+e*36e5)},(t,e)=>(e-t)/36e5,t=>t.getUTCHours()),zke=N5.range});var Ro,Gke,Ov,Vke,M5,Uke,ED=N(()=>{"use strict";Tu();Ro=xn(t=>t.setHours(0,0,0,0),(t,e)=>t.setDate(t.getDate()+e),(t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*6e4)/864e5,t=>t.getDate()-1),Gke=Ro.range,Ov=xn(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/864e5,t=>t.getUTCDate()-1),Vke=Ov.range,M5=xn(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/864e5,t=>Math.floor(t/864e5)),Uke=M5.range});function Ad(t){return xn(e=>{e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)},(e,r)=>{e.setDate(e.getDate()+r*7)},(e,r)=>(r-e-(r.getTimezoneOffset()-e.getTimezoneOffset())*6e4)/6048e5)}function _d(t){return xn(e=>{e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)},(e,r)=>{e.setUTCDate(e.getUTCDate()+r*7)},(e,r)=>(r-e)/6048e5)}var wl,Nh,I5,O5,fc,P5,B5,Sq,Hke,Wke,qke,Yke,Xke,jke,Dd,H0,Cq,Aq,Mh,_q,Dq,Lq,Kke,Qke,Zke,Jke,eEe,tEe,SD=N(()=>{"use strict";Tu();o(Ad,"timeWeekday");wl=Ad(0),Nh=Ad(1),I5=Ad(2),O5=Ad(3),fc=Ad(4),P5=Ad(5),B5=Ad(6),Sq=wl.range,Hke=Nh.range,Wke=I5.range,qke=O5.range,Yke=fc.range,Xke=P5.range,jke=B5.range;o(_d,"utcWeekday");Dd=_d(0),H0=_d(1),Cq=_d(2),Aq=_d(3),Mh=_d(4),_q=_d(5),Dq=_d(6),Lq=Dd.range,Kke=H0.range,Qke=Cq.range,Zke=Aq.range,Jke=Mh.range,eEe=_q.range,tEe=Dq.range});var Eu,rEe,F5,nEe,CD=N(()=>{"use strict";Tu();Eu=xn(t=>{t.setDate(1),t.setHours(0,0,0,0)},(t,e)=>{t.setMonth(t.getMonth()+e)},(t,e)=>e.getMonth()-t.getMonth()+(e.getFullYear()-t.getFullYear())*12,t=>t.getMonth()),rEe=Eu.range,F5=xn(t=>{t.setUTCDate(1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCMonth(t.getUTCMonth()+e)},(t,e)=>e.getUTCMonth()-t.getUTCMonth()+(e.getUTCFullYear()-t.getUTCFullYear())*12,t=>t.getUTCMonth()),nEe=F5.range});var to,iEe,kl,aEe,AD=N(()=>{"use strict";Tu();to=xn(t=>{t.setMonth(0,1),t.setHours(0,0,0,0)},(t,e)=>{t.setFullYear(t.getFullYear()+e)},(t,e)=>e.getFullYear()-t.getFullYear(),t=>t.getFullYear());to.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:xn(e=>{e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)},(e,r)=>{e.setFullYear(e.getFullYear()+r*t)});iEe=to.range,kl=xn(t=>{t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCFullYear(t.getUTCFullYear()+e)},(t,e)=>e.getUTCFullYear()-t.getUTCFullYear(),t=>t.getUTCFullYear());kl.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:xn(e=>{e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,r)=>{e.setUTCFullYear(e.getUTCFullYear()+r*t)});aEe=kl.range});function Nq(t,e,r,n,i,a){let s=[[eo,1,1e3],[eo,5,5*1e3],[eo,15,15*1e3],[eo,30,30*1e3],[a,1,6e4],[a,5,5*6e4],[a,15,15*6e4],[a,30,30*6e4],[i,1,36e5],[i,3,3*36e5],[i,6,6*36e5],[i,12,12*36e5],[n,1,864e5],[n,2,2*864e5],[r,1,6048e5],[e,1,2592e6],[e,3,3*2592e6],[t,1,31536e6]];function l(h,f,d){let p=fv).right(s,p);if(m===s.length)return t.every(A0(h/31536e6,f/31536e6,d));if(m===0)return uc.every(Math.max(A0(h,f,d),1));let[g,y]=s[p/s[m-1][2]{"use strict";Eh();bD();TD();wD();kD();ED();SD();CD();AD();o(Nq,"ticker");[oEe,lEe]=Nq(kl,F5,Dd,M5,N5,R5),[_D,DD]=Nq(to,Eu,wl,Ro,ku,wu)});var $5=N(()=>{"use strict";bD();TD();wD();kD();ED();SD();CD();AD();Mq()});function LD(t){if(0<=t.y&&t.y<100){var e=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function RD(t){if(0<=t.y&&t.y<100){var e=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function Pv(t,e,r){return{y:t,m:e,d:r,H:0,M:0,S:0,L:0}}function ND(t){var e=t.dateTime,r=t.date,n=t.time,i=t.periods,a=t.days,s=t.shortDays,l=t.months,u=t.shortMonths,h=Bv(i),f=Fv(i),d=Bv(a),p=Fv(a),m=Bv(s),g=Fv(s),y=Bv(l),v=Fv(l),x=Bv(u),b=Fv(u),T={a:P,A:B,b:F,B:z,c:null,d:$q,e:$q,f:REe,g:GEe,G:UEe,H:_Ee,I:DEe,j:LEe,L:Hq,m:NEe,M:MEe,p:$,q:U,Q:Vq,s:Uq,S:IEe,u:OEe,U:PEe,V:BEe,w:FEe,W:$Ee,x:null,X:null,y:zEe,Y:VEe,Z:HEe,"%":Gq},S={a:K,A:ee,b:Y,B:ce,c:null,d:zq,e:zq,f:XEe,g:iSe,G:sSe,H:WEe,I:qEe,j:YEe,L:qq,m:jEe,M:KEe,p:Z,q:ue,Q:Vq,s:Uq,S:QEe,u:ZEe,U:JEe,V:eSe,w:tSe,W:rSe,x:null,X:null,y:nSe,Y:aSe,Z:oSe,"%":Gq},w={a:O,A:R,b:k,B:L,c:A,d:Bq,e:Bq,f:EEe,g:Pq,G:Oq,H:Fq,I:Fq,j:bEe,L:kEe,m:xEe,M:TEe,p:D,q:vEe,Q:CEe,s:AEe,S:wEe,u:dEe,U:pEe,V:mEe,w:fEe,W:gEe,x:I,X:M,y:Pq,Y:Oq,Z:yEe,"%":SEe};T.x=E(r,T),T.X=E(n,T),T.c=E(e,T),S.x=E(r,S),S.X=E(n,S),S.c=E(e,S);function E(Q,j){return function(ne){var te=[],he=-1,le=0,J=Q.length,Se,se,ae;for(ne instanceof Date||(ne=new Date(+ne));++he53)return null;"w"in te||(te.w=1),"Z"in te?(le=RD(Pv(te.y,0,1)),J=le.getUTCDay(),le=J>4||J===0?H0.ceil(le):H0(le),le=Ov.offset(le,(te.V-1)*7),te.y=le.getUTCFullYear(),te.m=le.getUTCMonth(),te.d=le.getUTCDate()+(te.w+6)%7):(le=LD(Pv(te.y,0,1)),J=le.getDay(),le=J>4||J===0?Nh.ceil(le):Nh(le),le=Ro.offset(le,(te.V-1)*7),te.y=le.getFullYear(),te.m=le.getMonth(),te.d=le.getDate()+(te.w+6)%7)}else("W"in te||"U"in te)&&("w"in te||(te.w="u"in te?te.u%7:"W"in te?1:0),J="Z"in te?RD(Pv(te.y,0,1)).getUTCDay():LD(Pv(te.y,0,1)).getDay(),te.m=0,te.d="W"in te?(te.w+6)%7+te.W*7-(J+5)%7:te.w+te.U*7-(J+6)%7);return"Z"in te?(te.H+=te.Z/100|0,te.M+=te.Z%100,RD(te)):LD(te)}}o(_,"newParse");function C(Q,j,ne,te){for(var he=0,le=j.length,J=ne.length,Se,se;he=J)return-1;if(Se=j.charCodeAt(he++),Se===37){if(Se=j.charAt(he++),se=w[Se in Iq?j.charAt(he++):Se],!se||(te=se(Q,ne,te))<0)return-1}else if(Se!=ne.charCodeAt(te++))return-1}return te}o(C,"parseSpecifier");function D(Q,j,ne){var te=h.exec(j.slice(ne));return te?(Q.p=f.get(te[0].toLowerCase()),ne+te[0].length):-1}o(D,"parsePeriod");function O(Q,j,ne){var te=m.exec(j.slice(ne));return te?(Q.w=g.get(te[0].toLowerCase()),ne+te[0].length):-1}o(O,"parseShortWeekday");function R(Q,j,ne){var te=d.exec(j.slice(ne));return te?(Q.w=p.get(te[0].toLowerCase()),ne+te[0].length):-1}o(R,"parseWeekday");function k(Q,j,ne){var te=x.exec(j.slice(ne));return te?(Q.m=b.get(te[0].toLowerCase()),ne+te[0].length):-1}o(k,"parseShortMonth");function L(Q,j,ne){var te=y.exec(j.slice(ne));return te?(Q.m=v.get(te[0].toLowerCase()),ne+te[0].length):-1}o(L,"parseMonth");function A(Q,j,ne){return C(Q,e,j,ne)}o(A,"parseLocaleDateTime");function I(Q,j,ne){return C(Q,r,j,ne)}o(I,"parseLocaleDate");function M(Q,j,ne){return C(Q,n,j,ne)}o(M,"parseLocaleTime");function P(Q){return s[Q.getDay()]}o(P,"formatShortWeekday");function B(Q){return a[Q.getDay()]}o(B,"formatWeekday");function F(Q){return u[Q.getMonth()]}o(F,"formatShortMonth");function z(Q){return l[Q.getMonth()]}o(z,"formatMonth");function $(Q){return i[+(Q.getHours()>=12)]}o($,"formatPeriod");function U(Q){return 1+~~(Q.getMonth()/3)}o(U,"formatQuarter");function K(Q){return s[Q.getUTCDay()]}o(K,"formatUTCShortWeekday");function ee(Q){return a[Q.getUTCDay()]}o(ee,"formatUTCWeekday");function Y(Q){return u[Q.getUTCMonth()]}o(Y,"formatUTCShortMonth");function ce(Q){return l[Q.getUTCMonth()]}o(ce,"formatUTCMonth");function Z(Q){return i[+(Q.getUTCHours()>=12)]}o(Z,"formatUTCPeriod");function ue(Q){return 1+~~(Q.getUTCMonth()/3)}return o(ue,"formatUTCQuarter"),{format:o(function(Q){var j=E(Q+="",T);return j.toString=function(){return Q},j},"format"),parse:o(function(Q){var j=_(Q+="",!1);return j.toString=function(){return Q},j},"parse"),utcFormat:o(function(Q){var j=E(Q+="",S);return j.toString=function(){return Q},j},"utcFormat"),utcParse:o(function(Q){var j=_(Q+="",!0);return j.toString=function(){return Q},j},"utcParse")}}function Wr(t,e,r){var n=t<0?"-":"",i=(n?-t:t)+"",a=i.length;return n+(a[e.toLowerCase(),r]))}function fEe(t,e,r){var n=Qi.exec(e.slice(r,r+1));return n?(t.w=+n[0],r+n[0].length):-1}function dEe(t,e,r){var n=Qi.exec(e.slice(r,r+1));return n?(t.u=+n[0],r+n[0].length):-1}function pEe(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.U=+n[0],r+n[0].length):-1}function mEe(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.V=+n[0],r+n[0].length):-1}function gEe(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.W=+n[0],r+n[0].length):-1}function Oq(t,e,r){var n=Qi.exec(e.slice(r,r+4));return n?(t.y=+n[0],r+n[0].length):-1}function Pq(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.y=+n[0]+(+n[0]>68?1900:2e3),r+n[0].length):-1}function yEe(t,e,r){var n=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(r,r+6));return n?(t.Z=n[1]?0:-(n[2]+(n[3]||"00")),r+n[0].length):-1}function vEe(t,e,r){var n=Qi.exec(e.slice(r,r+1));return n?(t.q=n[0]*3-3,r+n[0].length):-1}function xEe(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.m=n[0]-1,r+n[0].length):-1}function Bq(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.d=+n[0],r+n[0].length):-1}function bEe(t,e,r){var n=Qi.exec(e.slice(r,r+3));return n?(t.m=0,t.d=+n[0],r+n[0].length):-1}function Fq(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.H=+n[0],r+n[0].length):-1}function TEe(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.M=+n[0],r+n[0].length):-1}function wEe(t,e,r){var n=Qi.exec(e.slice(r,r+2));return n?(t.S=+n[0],r+n[0].length):-1}function kEe(t,e,r){var n=Qi.exec(e.slice(r,r+3));return n?(t.L=+n[0],r+n[0].length):-1}function EEe(t,e,r){var n=Qi.exec(e.slice(r,r+6));return n?(t.L=Math.floor(n[0]/1e3),r+n[0].length):-1}function SEe(t,e,r){var n=cEe.exec(e.slice(r,r+1));return n?r+n[0].length:-1}function CEe(t,e,r){var n=Qi.exec(e.slice(r));return n?(t.Q=+n[0],r+n[0].length):-1}function AEe(t,e,r){var n=Qi.exec(e.slice(r));return n?(t.s=+n[0],r+n[0].length):-1}function $q(t,e){return Wr(t.getDate(),e,2)}function _Ee(t,e){return Wr(t.getHours(),e,2)}function DEe(t,e){return Wr(t.getHours()%12||12,e,2)}function LEe(t,e){return Wr(1+Ro.count(to(t),t),e,3)}function Hq(t,e){return Wr(t.getMilliseconds(),e,3)}function REe(t,e){return Hq(t,e)+"000"}function NEe(t,e){return Wr(t.getMonth()+1,e,2)}function MEe(t,e){return Wr(t.getMinutes(),e,2)}function IEe(t,e){return Wr(t.getSeconds(),e,2)}function OEe(t){var e=t.getDay();return e===0?7:e}function PEe(t,e){return Wr(wl.count(to(t)-1,t),e,2)}function Wq(t){var e=t.getDay();return e>=4||e===0?fc(t):fc.ceil(t)}function BEe(t,e){return t=Wq(t),Wr(fc.count(to(t),t)+(to(t).getDay()===4),e,2)}function FEe(t){return t.getDay()}function $Ee(t,e){return Wr(Nh.count(to(t)-1,t),e,2)}function zEe(t,e){return Wr(t.getFullYear()%100,e,2)}function GEe(t,e){return t=Wq(t),Wr(t.getFullYear()%100,e,2)}function VEe(t,e){return Wr(t.getFullYear()%1e4,e,4)}function UEe(t,e){var r=t.getDay();return t=r>=4||r===0?fc(t):fc.ceil(t),Wr(t.getFullYear()%1e4,e,4)}function HEe(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+Wr(e/60|0,"0",2)+Wr(e%60,"0",2)}function zq(t,e){return Wr(t.getUTCDate(),e,2)}function WEe(t,e){return Wr(t.getUTCHours(),e,2)}function qEe(t,e){return Wr(t.getUTCHours()%12||12,e,2)}function YEe(t,e){return Wr(1+Ov.count(kl(t),t),e,3)}function qq(t,e){return Wr(t.getUTCMilliseconds(),e,3)}function XEe(t,e){return qq(t,e)+"000"}function jEe(t,e){return Wr(t.getUTCMonth()+1,e,2)}function KEe(t,e){return Wr(t.getUTCMinutes(),e,2)}function QEe(t,e){return Wr(t.getUTCSeconds(),e,2)}function ZEe(t){var e=t.getUTCDay();return e===0?7:e}function JEe(t,e){return Wr(Dd.count(kl(t)-1,t),e,2)}function Yq(t){var e=t.getUTCDay();return e>=4||e===0?Mh(t):Mh.ceil(t)}function eSe(t,e){return t=Yq(t),Wr(Mh.count(kl(t),t)+(kl(t).getUTCDay()===4),e,2)}function tSe(t){return t.getUTCDay()}function rSe(t,e){return Wr(H0.count(kl(t)-1,t),e,2)}function nSe(t,e){return Wr(t.getUTCFullYear()%100,e,2)}function iSe(t,e){return t=Yq(t),Wr(t.getUTCFullYear()%100,e,2)}function aSe(t,e){return Wr(t.getUTCFullYear()%1e4,e,4)}function sSe(t,e){var r=t.getUTCDay();return t=r>=4||r===0?Mh(t):Mh.ceil(t),Wr(t.getUTCFullYear()%1e4,e,4)}function oSe(){return"+0000"}function Gq(){return"%"}function Vq(t){return+t}function Uq(t){return Math.floor(+t/1e3)}var Iq,Qi,cEe,uEe,Xq=N(()=>{"use strict";$5();o(LD,"localDate");o(RD,"utcDate");o(Pv,"newDate");o(ND,"formatLocale");Iq={"-":"",_:" ",0:"0"},Qi=/^\s*\d+/,cEe=/^%/,uEe=/[\\^$*+?|[\]().{}]/g;o(Wr,"pad");o(hEe,"requote");o(Bv,"formatRe");o(Fv,"formatLookup");o(fEe,"parseWeekdayNumberSunday");o(dEe,"parseWeekdayNumberMonday");o(pEe,"parseWeekNumberSunday");o(mEe,"parseWeekNumberISO");o(gEe,"parseWeekNumberMonday");o(Oq,"parseFullYear");o(Pq,"parseYear");o(yEe,"parseZone");o(vEe,"parseQuarter");o(xEe,"parseMonthNumber");o(Bq,"parseDayOfMonth");o(bEe,"parseDayOfYear");o(Fq,"parseHour24");o(TEe,"parseMinutes");o(wEe,"parseSeconds");o(kEe,"parseMilliseconds");o(EEe,"parseMicroseconds");o(SEe,"parseLiteralPercent");o(CEe,"parseUnixTimestamp");o(AEe,"parseUnixTimestampSeconds");o($q,"formatDayOfMonth");o(_Ee,"formatHour24");o(DEe,"formatHour12");o(LEe,"formatDayOfYear");o(Hq,"formatMilliseconds");o(REe,"formatMicroseconds");o(NEe,"formatMonthNumber");o(MEe,"formatMinutes");o(IEe,"formatSeconds");o(OEe,"formatWeekdayNumberMonday");o(PEe,"formatWeekNumberSunday");o(Wq,"dISO");o(BEe,"formatWeekNumberISO");o(FEe,"formatWeekdayNumberSunday");o($Ee,"formatWeekNumberMonday");o(zEe,"formatYear");o(GEe,"formatYearISO");o(VEe,"formatFullYear");o(UEe,"formatFullYearISO");o(HEe,"formatZone");o(zq,"formatUTCDayOfMonth");o(WEe,"formatUTCHour24");o(qEe,"formatUTCHour12");o(YEe,"formatUTCDayOfYear");o(qq,"formatUTCMilliseconds");o(XEe,"formatUTCMicroseconds");o(jEe,"formatUTCMonthNumber");o(KEe,"formatUTCMinutes");o(QEe,"formatUTCSeconds");o(ZEe,"formatUTCWeekdayNumberMonday");o(JEe,"formatUTCWeekNumberSunday");o(Yq,"UTCdISO");o(eSe,"formatUTCWeekNumberISO");o(tSe,"formatUTCWeekdayNumberSunday");o(rSe,"formatUTCWeekNumberMonday");o(nSe,"formatUTCYear");o(iSe,"formatUTCYearISO");o(aSe,"formatUTCFullYear");o(sSe,"formatUTCFullYearISO");o(oSe,"formatUTCZone");o(Gq,"formatLiteralPercent");o(Vq,"formatUnixTimestamp");o(Uq,"formatUnixTimestampSeconds")});function MD(t){return W0=ND(t),Ld=W0.format,jq=W0.parse,Kq=W0.utcFormat,Qq=W0.utcParse,W0}var W0,Ld,jq,Kq,Qq,Zq=N(()=>{"use strict";Xq();MD({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"]});o(MD,"defaultLocale")});var ID=N(()=>{"use strict";Zq()});function lSe(t){return new Date(t)}function cSe(t){return t instanceof Date?+t:+new Date(+t)}function Jq(t,e,r,n,i,a,s,l,u,h){var f=Mv(),d=f.invert,p=f.domain,m=h(".%L"),g=h(":%S"),y=h("%I:%M"),v=h("%I %p"),x=h("%a %d"),b=h("%b %d"),T=h("%B"),S=h("%Y");function w(E){return(u(E){"use strict";$5();ID();mD();Nv();Tq();o(lSe,"date");o(cSe,"number");o(Jq,"calendar");o(z5,"time")});var tY=N(()=>{"use strict";mq();bq();hD();eY()});function OD(t){for(var e=t.length/6|0,r=new Array(e),n=0;n{"use strict";o(OD,"default")});var PD,nY=N(()=>{"use strict";rY();PD=OD("4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab")});var iY=N(()=>{"use strict";nY()});function Bn(t){return o(function(){return t},"constant")}var G5=N(()=>{"use strict";o(Bn,"default")});function sY(t){return t>1?0:t<-1?q0:Math.acos(t)}function FD(t){return t>=1?$v:t<=-1?-$v:Math.asin(t)}var BD,ha,Ih,aY,V5,El,Rd,Zi,q0,$v,Y0,U5=N(()=>{"use strict";BD=Math.abs,ha=Math.atan2,Ih=Math.cos,aY=Math.max,V5=Math.min,El=Math.sin,Rd=Math.sqrt,Zi=1e-12,q0=Math.PI,$v=q0/2,Y0=2*q0;o(sY,"acos");o(FD,"asin")});function H5(t){let e=3;return t.digits=function(r){if(!arguments.length)return e;if(r==null)e=null;else{let n=Math.floor(r);if(!(n>=0))throw new RangeError(`invalid digits: ${r}`);e=n}return t},()=>new wd(e)}var $D=N(()=>{"use strict";O_();o(H5,"withPath")});function uSe(t){return t.innerRadius}function hSe(t){return t.outerRadius}function fSe(t){return t.startAngle}function dSe(t){return t.endAngle}function pSe(t){return t&&t.padAngle}function mSe(t,e,r,n,i,a,s,l){var u=r-t,h=n-e,f=s-i,d=l-a,p=d*u-f*h;if(!(p*pA*A+I*I&&(C=O,D=R),{cx:C,cy:D,x01:-f,y01:-d,x11:C*(i/w-1),y11:D*(i/w-1)}}function Sl(){var t=uSe,e=hSe,r=Bn(0),n=null,i=fSe,a=dSe,s=pSe,l=null,u=H5(h);function h(){var f,d,p=+t.apply(this,arguments),m=+e.apply(this,arguments),g=i.apply(this,arguments)-$v,y=a.apply(this,arguments)-$v,v=BD(y-g),x=y>g;if(l||(l=f=u()),mZi))l.moveTo(0,0);else if(v>Y0-Zi)l.moveTo(m*Ih(g),m*El(g)),l.arc(0,0,m,g,y,!x),p>Zi&&(l.moveTo(p*Ih(y),p*El(y)),l.arc(0,0,p,y,g,x));else{var b=g,T=y,S=g,w=y,E=v,_=v,C=s.apply(this,arguments)/2,D=C>Zi&&(n?+n.apply(this,arguments):Rd(p*p+m*m)),O=V5(BD(m-p)/2,+r.apply(this,arguments)),R=O,k=O,L,A;if(D>Zi){var I=FD(D/p*El(C)),M=FD(D/m*El(C));(E-=I*2)>Zi?(I*=x?1:-1,S+=I,w-=I):(E=0,S=w=(g+y)/2),(_-=M*2)>Zi?(M*=x?1:-1,b+=M,T-=M):(_=0,b=T=(g+y)/2)}var P=m*Ih(b),B=m*El(b),F=p*Ih(w),z=p*El(w);if(O>Zi){var $=m*Ih(T),U=m*El(T),K=p*Ih(S),ee=p*El(S),Y;if(vZi?k>Zi?(L=W5(K,ee,P,B,m,k,x),A=W5($,U,F,z,m,k,x),l.moveTo(L.cx+L.x01,L.cy+L.y01),kZi)||!(E>Zi)?l.lineTo(F,z):R>Zi?(L=W5(F,z,$,U,p,-R,x),A=W5(P,B,K,ee,p,-R,x),l.lineTo(L.cx+L.x01,L.cy+L.y01),R{"use strict";G5();U5();$D();o(uSe,"arcInnerRadius");o(hSe,"arcOuterRadius");o(fSe,"arcStartAngle");o(dSe,"arcEndAngle");o(pSe,"arcPadAngle");o(mSe,"intersect");o(W5,"cornerTangents");o(Sl,"default")});function zv(t){return typeof t=="object"&&"length"in t?t:Array.from(t)}var yxt,zD=N(()=>{"use strict";yxt=Array.prototype.slice;o(zv,"default")});function lY(t){this._context=t}function Su(t){return new lY(t)}var GD=N(()=>{"use strict";o(lY,"Linear");lY.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._context.lineTo(t,e);break}},"point")};o(Su,"default")});function cY(t){return t[0]}function uY(t){return t[1]}var hY=N(()=>{"use strict";o(cY,"x");o(uY,"y")});function Cl(t,e){var r=Bn(!0),n=null,i=Su,a=null,s=H5(l);t=typeof t=="function"?t:t===void 0?cY:Bn(t),e=typeof e=="function"?e:e===void 0?uY:Bn(e);function l(u){var h,f=(u=zv(u)).length,d,p=!1,m;for(n==null&&(a=i(m=s())),h=0;h<=f;++h)!(h{"use strict";zD();G5();GD();$D();hY();o(Cl,"default")});function VD(t,e){return et?1:e>=t?0:NaN}var dY=N(()=>{"use strict";o(VD,"default")});function UD(t){return t}var pY=N(()=>{"use strict";o(UD,"default")});function q5(){var t=UD,e=VD,r=null,n=Bn(0),i=Bn(Y0),a=Bn(0);function s(l){var u,h=(l=zv(l)).length,f,d,p=0,m=new Array(h),g=new Array(h),y=+n.apply(this,arguments),v=Math.min(Y0,Math.max(-Y0,i.apply(this,arguments)-y)),x,b=Math.min(Math.abs(v)/h,a.apply(this,arguments)),T=b*(v<0?-1:1),S;for(u=0;u0&&(p+=S);for(e!=null?m.sort(function(w,E){return e(g[w],g[E])}):r!=null&&m.sort(function(w,E){return r(l[w],l[E])}),u=0,d=p?(v-h*T)/p:0;u0?S*d:0)+T,g[f]={data:l[f],index:u,value:S,startAngle:y,endAngle:x,padAngle:b};return g}return o(s,"pie"),s.value=function(l){return arguments.length?(t=typeof l=="function"?l:Bn(+l),s):t},s.sortValues=function(l){return arguments.length?(e=l,r=null,s):e},s.sort=function(l){return arguments.length?(r=l,e=null,s):r},s.startAngle=function(l){return arguments.length?(n=typeof l=="function"?l:Bn(+l),s):n},s.endAngle=function(l){return arguments.length?(i=typeof l=="function"?l:Bn(+l),s):i},s.padAngle=function(l){return arguments.length?(a=typeof l=="function"?l:Bn(+l),s):a},s}var mY=N(()=>{"use strict";zD();G5();dY();pY();U5();o(q5,"default")});function Gv(t){return new Y5(t,!0)}function Vv(t){return new Y5(t,!1)}var Y5,gY=N(()=>{"use strict";Y5=class{static{o(this,"Bump")}constructor(e,r){this._context=e,this._x=r}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(e,r){switch(e=+e,r=+r,this._point){case 0:{this._point=1,this._line?this._context.lineTo(e,r):this._context.moveTo(e,r);break}case 1:this._point=2;default:{this._x?this._context.bezierCurveTo(this._x0=(this._x0+e)/2,this._y0,this._x0,r,e,r):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+r)/2,e,this._y0,e,r);break}}this._x0=e,this._y0=r}};o(Gv,"bumpX");o(Vv,"bumpY")});function ro(){}var Uv=N(()=>{"use strict";o(ro,"default")});function X0(t,e,r){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+r)/6)}function Hv(t){this._context=t}function No(t){return new Hv(t)}var Wv=N(()=>{"use strict";o(X0,"point");o(Hv,"Basis");Hv.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 3:X0(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},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);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:X0(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e},"point")};o(No,"default")});function yY(t){this._context=t}function X5(t){return new yY(t)}var vY=N(()=>{"use strict";Uv();Wv();o(yY,"BasisClosed");yY.prototype={areaStart:ro,areaEnd:ro,lineStart:o(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},"lineStart"),lineEnd:o(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}}},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:X0(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e},"point")};o(X5,"default")});function xY(t){this._context=t}function j5(t){return new xY(t)}var bY=N(()=>{"use strict";Wv();o(xY,"BasisOpen");xY.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var r=(this._x0+4*this._x1+t)/6,n=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(r,n):this._context.moveTo(r,n);break;case 3:this._point=4;default:X0(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e},"point")};o(j5,"default")});function TY(t,e){this._basis=new Hv(t),this._beta=e}var HD,wY=N(()=>{"use strict";Wv();o(TY,"Bundle");TY.prototype={lineStart:o(function(){this._x=[],this._y=[],this._basis.lineStart()},"lineStart"),lineEnd:o(function(){var t=this._x,e=this._y,r=t.length-1;if(r>0)for(var n=t[0],i=e[0],a=t[r]-n,s=e[r]-i,l=-1,u;++l<=r;)u=l/r,this._basis.point(this._beta*t[l]+(1-this._beta)*(n+u*a),this._beta*e[l]+(1-this._beta)*(i+u*s));this._x=this._y=null,this._basis.lineEnd()},"lineEnd"),point:o(function(t,e){this._x.push(+t),this._y.push(+e)},"point")};HD=o(function t(e){function r(n){return e===1?new Hv(n):new TY(n,e)}return o(r,"bundle"),r.beta=function(n){return t(+n)},r},"custom")(.85)});function j0(t,e,r){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-e),t._y2+t._k*(t._y1-r),t._x2,t._y2)}function K5(t,e){this._context=t,this._k=(1-e)/6}var qv,Yv=N(()=>{"use strict";o(j0,"point");o(K5,"Cardinal");K5.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:j0(this,this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2,this._x1=t,this._y1=e;break;case 2:this._point=3;default:j0(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};qv=o(function t(e){function r(n){return new K5(n,e)}return o(r,"cardinal"),r.tension=function(n){return t(+n)},r},"custom")(0)});function Q5(t,e){this._context=t,this._k=(1-e)/6}var WD,qD=N(()=>{"use strict";Uv();Yv();o(Q5,"CardinalClosed");Q5.prototype={areaStart:ro,areaEnd:ro,lineStart:o(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},"lineStart"),lineEnd:o(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}}},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:j0(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};WD=o(function t(e){function r(n){return new Q5(n,e)}return o(r,"cardinal"),r.tension=function(n){return t(+n)},r},"custom")(0)});function Z5(t,e){this._context=t,this._k=(1-e)/6}var YD,XD=N(()=>{"use strict";Yv();o(Z5,"CardinalOpen");Z5.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,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:j0(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};YD=o(function t(e){function r(n){return new Z5(n,e)}return o(r,"cardinal"),r.tension=function(n){return t(+n)},r},"custom")(0)});function Xv(t,e,r){var n=t._x1,i=t._y1,a=t._x2,s=t._y2;if(t._l01_a>Zi){var l=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,u=3*t._l01_a*(t._l01_a+t._l12_a);n=(n*l-t._x0*t._l12_2a+t._x2*t._l01_2a)/u,i=(i*l-t._y0*t._l12_2a+t._y2*t._l01_2a)/u}if(t._l23_a>Zi){var h=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,f=3*t._l23_a*(t._l23_a+t._l12_a);a=(a*h+t._x1*t._l23_2a-e*t._l12_2a)/f,s=(s*h+t._y1*t._l23_2a-r*t._l12_2a)/f}t._context.bezierCurveTo(n,i,a,s,t._x2,t._y2)}function kY(t,e){this._context=t,this._alpha=e}var jv,J5=N(()=>{"use strict";U5();Yv();o(Xv,"point");o(kY,"CatmullRom");kY.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(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},"lineStart"),lineEnd:o(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},"lineEnd"),point:o(function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3;default:Xv(this,t,e);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=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};jv=o(function t(e){function r(n){return e?new kY(n,e):new K5(n,0)}return o(r,"catmullRom"),r.alpha=function(n){return t(+n)},r},"custom")(.5)});function EY(t,e){this._context=t,this._alpha=e}var jD,SY=N(()=>{"use strict";qD();Uv();J5();o(EY,"CatmullRomClosed");EY.prototype={areaStart:ro,areaEnd:ro,lineStart:o(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},"lineStart"),lineEnd:o(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}}},"lineEnd"),point:o(function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:Xv(this,t,e);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=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};jD=o(function t(e){function r(n){return e?new EY(n,e):new Q5(n,0)}return o(r,"catmullRom"),r.alpha=function(n){return t(+n)},r},"custom")(.5)});function CY(t,e){this._context=t,this._alpha=e}var KD,AY=N(()=>{"use strict";XD();J5();o(CY,"CatmullRomOpen");CY.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(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},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,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:Xv(this,t,e);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=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};KD=o(function t(e){function r(n){return e?new CY(n,e):new Z5(n,0)}return o(r,"catmullRom"),r.alpha=function(n){return t(+n)},r},"custom")(.5)});function _Y(t){this._context=t}function eT(t){return new _Y(t)}var DY=N(()=>{"use strict";Uv();o(_Y,"LinearClosed");_Y.prototype={areaStart:ro,areaEnd:ro,lineStart:o(function(){this._point=0},"lineStart"),lineEnd:o(function(){this._point&&this._context.closePath()},"lineEnd"),point:o(function(t,e){t=+t,e=+e,this._point?this._context.lineTo(t,e):(this._point=1,this._context.moveTo(t,e))},"point")};o(eT,"default")});function LY(t){return t<0?-1:1}function RY(t,e,r){var n=t._x1-t._x0,i=e-t._x1,a=(t._y1-t._y0)/(n||i<0&&-0),s=(r-t._y1)/(i||n<0&&-0),l=(a*i+s*n)/(n+i);return(LY(a)+LY(s))*Math.min(Math.abs(a),Math.abs(s),.5*Math.abs(l))||0}function NY(t,e){var r=t._x1-t._x0;return r?(3*(t._y1-t._y0)/r-e)/2:e}function QD(t,e,r){var n=t._x0,i=t._y0,a=t._x1,s=t._y1,l=(a-n)/3;t._context.bezierCurveTo(n+l,i+l*e,a-l,s-l*r,a,s)}function tT(t){this._context=t}function MY(t){this._context=new IY(t)}function IY(t){this._context=t}function Kv(t){return new tT(t)}function Qv(t){return new MY(t)}var OY=N(()=>{"use strict";o(LY,"sign");o(RY,"slope3");o(NY,"slope2");o(QD,"point");o(tT,"MonotoneX");tT.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:QD(this,this._t0,NY(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){var r=NaN;if(t=+t,e=+e,!(t===this._x1&&e===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,QD(this,NY(this,r=RY(this,t,e)),r);break;default:QD(this,this._t0,r=RY(this,t,e));break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e,this._t0=r}},"point")};o(MY,"MonotoneY");(MY.prototype=Object.create(tT.prototype)).point=function(t,e){tT.prototype.point.call(this,e,t)};o(IY,"ReflectContext");IY.prototype={moveTo:o(function(t,e){this._context.moveTo(e,t)},"moveTo"),closePath:o(function(){this._context.closePath()},"closePath"),lineTo:o(function(t,e){this._context.lineTo(e,t)},"lineTo"),bezierCurveTo:o(function(t,e,r,n,i,a){this._context.bezierCurveTo(e,t,n,r,a,i)},"bezierCurveTo")};o(Kv,"monotoneX");o(Qv,"monotoneY")});function BY(t){this._context=t}function PY(t){var e,r=t.length-1,n,i=new Array(r),a=new Array(r),s=new Array(r);for(i[0]=0,a[0]=2,s[0]=t[0]+2*t[1],e=1;e=0;--e)i[e]=(s[e]-i[e+1])/a[e];for(a[r-1]=(t[r]+i[r-1])/2,e=0;e{"use strict";o(BY,"Natural");BY.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x=[],this._y=[]},"lineStart"),lineEnd:o(function(){var t=this._x,e=this._y,r=t.length;if(r)if(this._line?this._context.lineTo(t[0],e[0]):this._context.moveTo(t[0],e[0]),r===2)this._context.lineTo(t[1],e[1]);else for(var n=PY(t),i=PY(e),a=0,s=1;s{"use strict";o(rT,"Step");rT.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x=this._y=NaN,this._point=0},"lineStart"),lineEnd:o(function(){0=0&&(this._t=1-this._t,this._line=1-this._line)},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:{if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var r=this._x*(1-this._t)+t*this._t;this._context.lineTo(r,this._y),this._context.lineTo(r,e)}break}}this._x=t,this._y=e},"point")};o(Q0,"default");o(Zv,"stepBefore");o(Jv,"stepAfter")});var zY=N(()=>{"use strict";oY();fY();mY();vY();bY();Wv();gY();wY();qD();XD();Yv();SY();AY();J5();DY();GD();OY();FY();$Y()});var GY=N(()=>{"use strict"});var VY=N(()=>{"use strict"});function Oh(t,e,r){this.k=t,this.x=e,this.y=r}function JD(t){for(;!t.__zoom;)if(!(t=t.parentNode))return ZD;return t.__zoom}var ZD,e9=N(()=>{"use strict";o(Oh,"Transform");Oh.prototype={constructor:Oh,scale:o(function(t){return t===1?this:new Oh(this.k*t,this.x,this.y)},"scale"),translate:o(function(t,e){return t===0&e===0?this:new Oh(this.k,this.x+this.k*t,this.y+this.k*e)},"translate"),apply:o(function(t){return[t[0]*this.k+this.x,t[1]*this.k+this.y]},"apply"),applyX:o(function(t){return t*this.k+this.x},"applyX"),applyY:o(function(t){return t*this.k+this.y},"applyY"),invert:o(function(t){return[(t[0]-this.x)/this.k,(t[1]-this.y)/this.k]},"invert"),invertX:o(function(t){return(t-this.x)/this.k},"invertX"),invertY:o(function(t){return(t-this.y)/this.k},"invertY"),rescaleX:o(function(t){return t.copy().domain(t.range().map(this.invertX,this).map(t.invert,t))},"rescaleX"),rescaleY:o(function(t){return t.copy().domain(t.range().map(this.invertY,this).map(t.invert,t))},"rescaleY"),toString:o(function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"},"toString")};ZD=new Oh(1,0,0);JD.prototype=Oh.prototype;o(JD,"transform")});var UY=N(()=>{"use strict"});var HY=N(()=>{"use strict";b5();GY();VY();e9();UY()});var WY=N(()=>{"use strict";HY();e9()});var fr=N(()=>{"use strict";Eh();JV();vW();wW();I0();kW();EW();VA();HU();SW();L_();CW();_W();Y_();VW();fq();B0();O_();dq();AW();pq();tY();iY();yl();zY();$5();ID();p5();b5();WY()});var qY=Pi(Ji=>{"use strict";Object.defineProperty(Ji,"__esModule",{value:!0});Ji.BLANK_URL=Ji.relativeFirstCharacters=Ji.whitespaceEscapeCharsRegex=Ji.urlSchemeRegex=Ji.ctrlCharactersRegex=Ji.htmlCtrlEntityRegex=Ji.htmlEntitiesRegex=Ji.invalidProtocolRegex=void 0;Ji.invalidProtocolRegex=/^([^\w]*)(javascript|data|vbscript)/im;Ji.htmlEntitiesRegex=/&#(\w+)(^\w|;)?/g;Ji.htmlCtrlEntityRegex=/&(newline|tab);/gi;Ji.ctrlCharactersRegex=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim;Ji.urlSchemeRegex=/^.+(:|:)/gim;Ji.whitespaceEscapeCharsRegex=/(\\|%5[cC])((%(6[eE]|72|74))|[nrt])/g;Ji.relativeFirstCharacters=[".","/"];Ji.BLANK_URL="about:blank"});var Z0=Pi(nT=>{"use strict";Object.defineProperty(nT,"__esModule",{value:!0});nT.sanitizeUrl=void 0;var La=qY();function gSe(t){return La.relativeFirstCharacters.indexOf(t[0])>-1}o(gSe,"isRelativeUrlWithoutProtocol");function ySe(t){var e=t.replace(La.ctrlCharactersRegex,"");return e.replace(La.htmlEntitiesRegex,function(r,n){return String.fromCharCode(n)})}o(ySe,"decodeHtmlCharacters");function vSe(t){return URL.canParse(t)}o(vSe,"isValidUrl");function YY(t){try{return decodeURIComponent(t)}catch{return t}}o(YY,"decodeURI");function xSe(t){if(!t)return La.BLANK_URL;var e,r=YY(t.trim());do r=ySe(r).replace(La.htmlCtrlEntityRegex,"").replace(La.ctrlCharactersRegex,"").replace(La.whitespaceEscapeCharsRegex,"").trim(),r=YY(r),e=r.match(La.ctrlCharactersRegex)||r.match(La.htmlEntitiesRegex)||r.match(La.htmlCtrlEntityRegex)||r.match(La.whitespaceEscapeCharsRegex);while(e&&e.length>0);var n=r;if(!n)return La.BLANK_URL;if(gSe(n))return n;var i=n.trimStart(),a=i.match(La.urlSchemeRegex);if(!a)return n;var s=a[0].toLowerCase().trim();if(La.invalidProtocolRegex.test(s))return La.BLANK_URL;var l=i.replace(/\\/g,"/");if(s==="mailto:"||s.includes("://"))return l;if(s==="http:"||s==="https:"){if(!vSe(l))return La.BLANK_URL;var u=new URL(l);return u.protocol=u.protocol.toLowerCase(),u.hostname=u.hostname.toLowerCase(),u.toString()}return l}o(xSe,"sanitizeUrl");nT.sanitizeUrl=xSe});var t9,Nd,iT,XY,jY,KY,Al,e2,t2=N(()=>{"use strict";t9=Aa(Z0(),1);pr();Nd=o((t,e)=>{let r=t.append("rect");if(r.attr("x",e.x),r.attr("y",e.y),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("width",e.width),r.attr("height",e.height),e.name&&r.attr("name",e.name),e.rx&&r.attr("rx",e.rx),e.ry&&r.attr("ry",e.ry),e.attrs!==void 0)for(let n in e.attrs)r.attr(n,e.attrs[n]);return e.class&&r.attr("class",e.class),r},"drawRect"),iT=o((t,e)=>{let r={x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,stroke:e.stroke,class:"rect"};Nd(t,r).lower()},"drawBackgroundRect"),XY=o((t,e)=>{let r=e.text.replace(ud," "),n=t.append("text");n.attr("x",e.x),n.attr("y",e.y),n.attr("class","legend"),n.style("text-anchor",e.anchor),e.class&&n.attr("class",e.class);let i=n.append("tspan");return i.attr("x",e.x+e.textMargin*2),i.text(r),n},"drawText"),jY=o((t,e,r,n)=>{let i=t.append("image");i.attr("x",e),i.attr("y",r);let a=(0,t9.sanitizeUrl)(n);i.attr("xlink:href",a)},"drawImage"),KY=o((t,e,r,n)=>{let i=t.append("use");i.attr("x",e),i.attr("y",r);let a=(0,t9.sanitizeUrl)(n);i.attr("xlink:href",`#${a}`)},"drawEmbeddedImage"),Al=o(()=>({x:0,y:0,width:100,height:100,fill:"#EDF2AE",stroke:"#666",anchor:"start",rx:0,ry:0}),"getNoteRect"),e2=o(()=>({x:0,y:0,width:100,height:100,"text-anchor":"start",style:"#666",textMargin:0,rx:0,ry:0,tspan:!0}),"getTextObj")});var QY,r9,ZY,bSe,TSe,wSe,kSe,ESe,SSe,CSe,ASe,_Se,DSe,LSe,RSe,Cu,_l,JY=N(()=>{"use strict";pr();t2();QY=Aa(Z0(),1),r9=o(function(t,e){return Nd(t,e)},"drawRect"),ZY=o(function(t,e,r,n,i,a){let s=t.append("image");s.attr("width",e),s.attr("height",r),s.attr("x",n),s.attr("y",i);let l=a.startsWith("data:image/png;base64")?a:(0,QY.sanitizeUrl)(a);s.attr("xlink:href",l)},"drawImage"),bSe=o((t,e,r)=>{let n=t.append("g"),i=0;for(let a of e){let s=a.textColor?a.textColor:"#444444",l=a.lineColor?a.lineColor:"#444444",u=a.offsetX?parseInt(a.offsetX):0,h=a.offsetY?parseInt(a.offsetY):0,f="";if(i===0){let p=n.append("line");p.attr("x1",a.startPoint.x),p.attr("y1",a.startPoint.y),p.attr("x2",a.endPoint.x),p.attr("y2",a.endPoint.y),p.attr("stroke-width","1"),p.attr("stroke",l),p.style("fill","none"),a.type!=="rel_b"&&p.attr("marker-end","url("+f+"#arrowhead)"),(a.type==="birel"||a.type==="rel_b")&&p.attr("marker-start","url("+f+"#arrowend)"),i=-1}else{let p=n.append("path");p.attr("fill","none").attr("stroke-width","1").attr("stroke",l).attr("d","Mstartx,starty Qcontrolx,controly stopx,stopy ".replaceAll("startx",a.startPoint.x).replaceAll("starty",a.startPoint.y).replaceAll("controlx",a.startPoint.x+(a.endPoint.x-a.startPoint.x)/2-(a.endPoint.x-a.startPoint.x)/4).replaceAll("controly",a.startPoint.y+(a.endPoint.y-a.startPoint.y)/2).replaceAll("stopx",a.endPoint.x).replaceAll("stopy",a.endPoint.y)),a.type!=="rel_b"&&p.attr("marker-end","url("+f+"#arrowhead)"),(a.type==="birel"||a.type==="rel_b")&&p.attr("marker-start","url("+f+"#arrowend)")}let d=r.messageFont();Cu(r)(a.label.text,n,Math.min(a.startPoint.x,a.endPoint.x)+Math.abs(a.endPoint.x-a.startPoint.x)/2+u,Math.min(a.startPoint.y,a.endPoint.y)+Math.abs(a.endPoint.y-a.startPoint.y)/2+h,a.label.width,a.label.height,{fill:s},d),a.techn&&a.techn.text!==""&&(d=r.messageFont(),Cu(r)("["+a.techn.text+"]",n,Math.min(a.startPoint.x,a.endPoint.x)+Math.abs(a.endPoint.x-a.startPoint.x)/2+u,Math.min(a.startPoint.y,a.endPoint.y)+Math.abs(a.endPoint.y-a.startPoint.y)/2+r.messageFontSize+5+h,Math.max(a.label.width,a.techn.width),a.techn.height,{fill:s,"font-style":"italic"},d))}},"drawRels"),TSe=o(function(t,e,r){let n=t.append("g"),i=e.bgColor?e.bgColor:"none",a=e.borderColor?e.borderColor:"#444444",s=e.fontColor?e.fontColor:"black",l={"stroke-width":1,"stroke-dasharray":"7.0,7.0"};e.nodeType&&(l={"stroke-width":1});let u={x:e.x,y:e.y,fill:i,stroke:a,width:e.width,height:e.height,rx:2.5,ry:2.5,attrs:l};r9(n,u);let h=r.boundaryFont();h.fontWeight="bold",h.fontSize=h.fontSize+2,h.fontColor=s,Cu(r)(e.label.text,n,e.x,e.y+e.label.Y,e.width,e.height,{fill:"#444444"},h),e.type&&e.type.text!==""&&(h=r.boundaryFont(),h.fontColor=s,Cu(r)(e.type.text,n,e.x,e.y+e.type.Y,e.width,e.height,{fill:"#444444"},h)),e.descr&&e.descr.text!==""&&(h=r.boundaryFont(),h.fontSize=h.fontSize-2,h.fontColor=s,Cu(r)(e.descr.text,n,e.x,e.y+e.descr.Y,e.width,e.height,{fill:"#444444"},h))},"drawBoundary"),wSe=o(function(t,e,r){let n=e.bgColor?e.bgColor:r[e.typeC4Shape.text+"_bg_color"],i=e.borderColor?e.borderColor:r[e.typeC4Shape.text+"_border_color"],a=e.fontColor?e.fontColor:"#FFFFFF",s="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";switch(e.typeC4Shape.text){case"person":s="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":s="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAB6ElEQVR4Xu2YLY+EMBCG9+dWr0aj0Wg0Go1Go0+j8Xdv2uTCvv1gpt0ebHKPuhDaeW4605Z9mJvx4AdXUyTUdd08z+u6flmWZRnHsWkafk9DptAwDPu+f0eAYtu2PEaGWuj5fCIZrBAC2eLBAnRCsEkkxmeaJp7iDJ2QMDdHsLg8SxKFEJaAo8lAXnmuOFIhTMpxxKATebo4UiFknuNo4OniSIXQyRxEA3YsnjGCVEjVXD7yLUAqxBGUyPv/Y4W2beMgGuS7kVQIBycH0fD+oi5pezQETxdHKmQKGk1eQEYldK+jw5GxPfZ9z7Mk0Qnhf1W1m3w//EUn5BDmSZsbR44QQLBEqrBHqOrmSKaQAxdnLArCrxZcM7A7ZKs4ioRq8LFC+NpC3WCBJsvpVw5edm9iEXFuyNfxXAgSwfrFQ1c0iNda8AdejvUgnktOtJQQxmcfFzGglc5WVCj7oDgFqU18boeFSs52CUh8LE8BIVQDT1ABrB0HtgSEYlX5doJnCwv9TXocKCaKbnwhdDKPq4lf3SwU3HLq4V/+WYhHVMa/3b4IlfyikAduCkcBc7mQ3/z/Qq/cTuikhkzB12Ae/mcJC9U+Vo8Ej1gWAtgbeGgFsAMHr50BIWOLCbezvhpBFUdY6EJuJ/QDW0XoMX60zZ0AAAAASUVORK5CYII=";break}let l=t.append("g");l.attr("class","person-man");let u=Al();switch(e.typeC4Shape.text){case"person":case"external_person":case"system":case"external_system":case"container":case"external_container":case"component":case"external_component":u.x=e.x,u.y=e.y,u.fill=n,u.width=e.width,u.height=e.height,u.stroke=i,u.rx=2.5,u.ry=2.5,u.attrs={"stroke-width":.5},r9(l,u);break;case"system_db":case"external_system_db":case"container_db":case"external_container_db":case"component_db":case"external_component_db":l.append("path").attr("fill",n).attr("stroke-width","0.5").attr("stroke",i).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",e.x).replaceAll("starty",e.y).replaceAll("half",e.width/2).replaceAll("height",e.height)),l.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startyc0,10 half,10 half,10c0,0 half,0 half,-10".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("half",e.width/2));break;case"system_queue":case"external_system_queue":case"container_queue":case"external_container_queue":case"component_queue":case"external_component_queue":l.append("path").attr("fill",n).attr("stroke-width","0.5").attr("stroke",i).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",e.x).replaceAll("starty",e.y).replaceAll("width",e.width).replaceAll("half",e.height/2)),l.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startyc-5,0 -5,half -5,halfc0,half 5,half 5,half".replaceAll("startx",e.x+e.width).replaceAll("starty",e.y).replaceAll("half",e.height/2));break}let h=RSe(r,e.typeC4Shape.text);switch(l.append("text").attr("fill",a).attr("font-family",h.fontFamily).attr("font-size",h.fontSize-2).attr("font-style","italic").attr("lengthAdjust","spacing").attr("textLength",e.typeC4Shape.width).attr("x",e.x+e.width/2-e.typeC4Shape.width/2).attr("y",e.y+e.typeC4Shape.Y).text("<<"+e.typeC4Shape.text+">>"),e.typeC4Shape.text){case"person":case"external_person":ZY(l,48,48,e.x+e.width/2-24,e.y+e.image.Y,s);break}let f=r[e.typeC4Shape.text+"Font"]();return f.fontWeight="bold",f.fontSize=f.fontSize+2,f.fontColor=a,Cu(r)(e.label.text,l,e.x,e.y+e.label.Y,e.width,e.height,{fill:a},f),f=r[e.typeC4Shape.text+"Font"](),f.fontColor=a,e.techn&&e.techn?.text!==""?Cu(r)(e.techn.text,l,e.x,e.y+e.techn.Y,e.width,e.height,{fill:a,"font-style":"italic"},f):e.type&&e.type.text!==""&&Cu(r)(e.type.text,l,e.x,e.y+e.type.Y,e.width,e.height,{fill:a,"font-style":"italic"},f),e.descr&&e.descr.text!==""&&(f=r.personFont(),f.fontColor=a,Cu(r)(e.descr.text,l,e.x,e.y+e.descr.Y,e.width,e.height,{fill:a},f)),e.height},"drawC4Shape"),kSe=o(function(t){t.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")},"insertDatabaseIcon"),ESe=o(function(t){t.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")},"insertComputerIcon"),SSe=o(function(t){t.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")},"insertClockIcon"),CSe=o(function(t){t.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")},"insertArrowHead"),ASe=o(function(t){t.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")},"insertArrowEnd"),_Se=o(function(t){t.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")},"insertArrowFilledHead"),DSe=o(function(t){t.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)},"insertDynamicNumber"),LSe=o(function(t){let r=t.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",16).attr("refY",4);r.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"),r.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")},"insertArrowCrossHead"),RSe=o((t,e)=>({fontFamily:t[e+"FontFamily"],fontSize:t[e+"FontSize"],fontWeight:t[e+"FontWeight"]}),"getC4ShapeFont"),Cu=function(){function t(i,a,s,l,u,h,f){let d=a.append("text").attr("x",s+u/2).attr("y",l+h/2+5).style("text-anchor","middle").text(i);n(d,f)}o(t,"byText");function e(i,a,s,l,u,h,f,d){let{fontSize:p,fontFamily:m,fontWeight:g}=d,y=i.split(Ze.lineBreakRegex);for(let v=0;v{"use strict";NSe=typeof global=="object"&&global&&global.Object===Object&&global,sT=NSe});var MSe,ISe,hi,Mo=N(()=>{"use strict";n9();MSe=typeof self=="object"&&self&&self.Object===Object&&self,ISe=sT||MSe||Function("return this")(),hi=ISe});var OSe,ea,Md=N(()=>{"use strict";Mo();OSe=hi.Symbol,ea=OSe});function FSe(t){var e=PSe.call(t,r2),r=t[r2];try{t[r2]=void 0;var n=!0}catch{}var i=BSe.call(t);return n&&(e?t[r2]=r:delete t[r2]),i}var eX,PSe,BSe,r2,tX,rX=N(()=>{"use strict";Md();eX=Object.prototype,PSe=eX.hasOwnProperty,BSe=eX.toString,r2=ea?ea.toStringTag:void 0;o(FSe,"getRawTag");tX=FSe});function GSe(t){return zSe.call(t)}var $Se,zSe,nX,iX=N(()=>{"use strict";$Se=Object.prototype,zSe=$Se.toString;o(GSe,"objectToString");nX=GSe});function HSe(t){return t==null?t===void 0?USe:VSe:aX&&aX in Object(t)?tX(t):nX(t)}var VSe,USe,aX,fa,Au=N(()=>{"use strict";Md();rX();iX();VSe="[object Null]",USe="[object Undefined]",aX=ea?ea.toStringTag:void 0;o(HSe,"baseGetTag");fa=HSe});function WSe(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}var bn,no=N(()=>{"use strict";o(WSe,"isObject");bn=WSe});function KSe(t){if(!bn(t))return!1;var e=fa(t);return e==YSe||e==XSe||e==qSe||e==jSe}var qSe,YSe,XSe,jSe,Ai,n2=N(()=>{"use strict";Au();no();qSe="[object AsyncFunction]",YSe="[object Function]",XSe="[object GeneratorFunction]",jSe="[object Proxy]";o(KSe,"isFunction");Ai=KSe});var QSe,oT,sX=N(()=>{"use strict";Mo();QSe=hi["__core-js_shared__"],oT=QSe});function ZSe(t){return!!oX&&oX in t}var oX,lX,cX=N(()=>{"use strict";sX();oX=function(){var t=/[^.]+$/.exec(oT&&oT.keys&&oT.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}();o(ZSe,"isMasked");lX=ZSe});function t6e(t){if(t!=null){try{return e6e.call(t)}catch{}try{return t+""}catch{}}return""}var JSe,e6e,_u,i9=N(()=>{"use strict";JSe=Function.prototype,e6e=JSe.toString;o(t6e,"toSource");_u=t6e});function c6e(t){if(!bn(t)||lX(t))return!1;var e=Ai(t)?l6e:n6e;return e.test(_u(t))}var r6e,n6e,i6e,a6e,s6e,o6e,l6e,uX,hX=N(()=>{"use strict";n2();cX();no();i9();r6e=/[\\^$.*+?()[\]{}|]/g,n6e=/^\[object .+?Constructor\]$/,i6e=Function.prototype,a6e=Object.prototype,s6e=i6e.toString,o6e=a6e.hasOwnProperty,l6e=RegExp("^"+s6e.call(o6e).replace(r6e,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");o(c6e,"baseIsNative");uX=c6e});function u6e(t,e){return t?.[e]}var fX,dX=N(()=>{"use strict";o(u6e,"getValue");fX=u6e});function h6e(t,e){var r=fX(t,e);return uX(r)?r:void 0}var Ls,Ph=N(()=>{"use strict";hX();dX();o(h6e,"getNative");Ls=h6e});var f6e,Du,i2=N(()=>{"use strict";Ph();f6e=Ls(Object,"create"),Du=f6e});function d6e(){this.__data__=Du?Du(null):{},this.size=0}var pX,mX=N(()=>{"use strict";i2();o(d6e,"hashClear");pX=d6e});function p6e(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}var gX,yX=N(()=>{"use strict";o(p6e,"hashDelete");gX=p6e});function v6e(t){var e=this.__data__;if(Du){var r=e[t];return r===m6e?void 0:r}return y6e.call(e,t)?e[t]:void 0}var m6e,g6e,y6e,vX,xX=N(()=>{"use strict";i2();m6e="__lodash_hash_undefined__",g6e=Object.prototype,y6e=g6e.hasOwnProperty;o(v6e,"hashGet");vX=v6e});function T6e(t){var e=this.__data__;return Du?e[t]!==void 0:b6e.call(e,t)}var x6e,b6e,bX,TX=N(()=>{"use strict";i2();x6e=Object.prototype,b6e=x6e.hasOwnProperty;o(T6e,"hashHas");bX=T6e});function k6e(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=Du&&e===void 0?w6e:e,this}var w6e,wX,kX=N(()=>{"use strict";i2();w6e="__lodash_hash_undefined__";o(k6e,"hashSet");wX=k6e});function J0(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{"use strict";mX();yX();xX();TX();kX();o(J0,"Hash");J0.prototype.clear=pX;J0.prototype.delete=gX;J0.prototype.get=vX;J0.prototype.has=bX;J0.prototype.set=wX;a9=J0});function E6e(){this.__data__=[],this.size=0}var SX,CX=N(()=>{"use strict";o(E6e,"listCacheClear");SX=E6e});function S6e(t,e){return t===e||t!==t&&e!==e}var Io,Id=N(()=>{"use strict";o(S6e,"eq");Io=S6e});function C6e(t,e){for(var r=t.length;r--;)if(Io(t[r][0],e))return r;return-1}var Bh,a2=N(()=>{"use strict";Id();o(C6e,"assocIndexOf");Bh=C6e});function D6e(t){var e=this.__data__,r=Bh(e,t);if(r<0)return!1;var n=e.length-1;return r==n?e.pop():_6e.call(e,r,1),--this.size,!0}var A6e,_6e,AX,_X=N(()=>{"use strict";a2();A6e=Array.prototype,_6e=A6e.splice;o(D6e,"listCacheDelete");AX=D6e});function L6e(t){var e=this.__data__,r=Bh(e,t);return r<0?void 0:e[r][1]}var DX,LX=N(()=>{"use strict";a2();o(L6e,"listCacheGet");DX=L6e});function R6e(t){return Bh(this.__data__,t)>-1}var RX,NX=N(()=>{"use strict";a2();o(R6e,"listCacheHas");RX=R6e});function N6e(t,e){var r=this.__data__,n=Bh(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this}var MX,IX=N(()=>{"use strict";a2();o(N6e,"listCacheSet");MX=N6e});function em(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{"use strict";CX();_X();LX();NX();IX();o(em,"ListCache");em.prototype.clear=SX;em.prototype.delete=AX;em.prototype.get=DX;em.prototype.has=RX;em.prototype.set=MX;Fh=em});var M6e,$h,lT=N(()=>{"use strict";Ph();Mo();M6e=Ls(hi,"Map"),$h=M6e});function I6e(){this.size=0,this.__data__={hash:new a9,map:new($h||Fh),string:new a9}}var OX,PX=N(()=>{"use strict";EX();s2();lT();o(I6e,"mapCacheClear");OX=I6e});function O6e(t){var e=typeof t;return e=="string"||e=="number"||e=="symbol"||e=="boolean"?t!=="__proto__":t===null}var BX,FX=N(()=>{"use strict";o(O6e,"isKeyable");BX=O6e});function P6e(t,e){var r=t.__data__;return BX(e)?r[typeof e=="string"?"string":"hash"]:r.map}var zh,o2=N(()=>{"use strict";FX();o(P6e,"getMapData");zh=P6e});function B6e(t){var e=zh(this,t).delete(t);return this.size-=e?1:0,e}var $X,zX=N(()=>{"use strict";o2();o(B6e,"mapCacheDelete");$X=B6e});function F6e(t){return zh(this,t).get(t)}var GX,VX=N(()=>{"use strict";o2();o(F6e,"mapCacheGet");GX=F6e});function $6e(t){return zh(this,t).has(t)}var UX,HX=N(()=>{"use strict";o2();o($6e,"mapCacheHas");UX=$6e});function z6e(t,e){var r=zh(this,t),n=r.size;return r.set(t,e),this.size+=r.size==n?0:1,this}var WX,qX=N(()=>{"use strict";o2();o(z6e,"mapCacheSet");WX=z6e});function tm(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{"use strict";PX();zX();VX();HX();qX();o(tm,"MapCache");tm.prototype.clear=OX;tm.prototype.delete=$X;tm.prototype.get=GX;tm.prototype.has=UX;tm.prototype.set=WX;Od=tm});function s9(t,e){if(typeof t!="function"||e!=null&&typeof e!="function")throw new TypeError(G6e);var r=o(function(){var n=arguments,i=e?e.apply(this,n):n[0],a=r.cache;if(a.has(i))return a.get(i);var s=t.apply(this,n);return r.cache=a.set(i,s)||a,s},"memoized");return r.cache=new(s9.Cache||Od),r}var G6e,rm,o9=N(()=>{"use strict";cT();G6e="Expected a function";o(s9,"memoize");s9.Cache=Od;rm=s9});function V6e(){this.__data__=new Fh,this.size=0}var YX,XX=N(()=>{"use strict";s2();o(V6e,"stackClear");YX=V6e});function U6e(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r}var jX,KX=N(()=>{"use strict";o(U6e,"stackDelete");jX=U6e});function H6e(t){return this.__data__.get(t)}var QX,ZX=N(()=>{"use strict";o(H6e,"stackGet");QX=H6e});function W6e(t){return this.__data__.has(t)}var JX,ej=N(()=>{"use strict";o(W6e,"stackHas");JX=W6e});function Y6e(t,e){var r=this.__data__;if(r instanceof Fh){var n=r.__data__;if(!$h||n.length{"use strict";s2();lT();cT();q6e=200;o(Y6e,"stackSet");tj=Y6e});function nm(t){var e=this.__data__=new Fh(t);this.size=e.size}var dc,l2=N(()=>{"use strict";s2();XX();KX();ZX();ej();rj();o(nm,"Stack");nm.prototype.clear=YX;nm.prototype.delete=jX;nm.prototype.get=QX;nm.prototype.has=JX;nm.prototype.set=tj;dc=nm});var X6e,im,l9=N(()=>{"use strict";Ph();X6e=function(){try{var t=Ls(Object,"defineProperty");return t({},"",{}),t}catch{}}(),im=X6e});function j6e(t,e,r){e=="__proto__"&&im?im(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}var pc,am=N(()=>{"use strict";l9();o(j6e,"baseAssignValue");pc=j6e});function K6e(t,e,r){(r!==void 0&&!Io(t[e],r)||r===void 0&&!(e in t))&&pc(t,e,r)}var c2,c9=N(()=>{"use strict";am();Id();o(K6e,"assignMergeValue");c2=K6e});function Q6e(t){return function(e,r,n){for(var i=-1,a=Object(e),s=n(e),l=s.length;l--;){var u=s[t?l:++i];if(r(a[u],u,a)===!1)break}return e}}var nj,ij=N(()=>{"use strict";o(Q6e,"createBaseFor");nj=Q6e});var Z6e,sm,uT=N(()=>{"use strict";ij();Z6e=nj(),sm=Z6e});function eCe(t,e){if(e)return t.slice();var r=t.length,n=oj?oj(r):new t.constructor(r);return t.copy(n),n}var lj,aj,J6e,sj,oj,hT,u9=N(()=>{"use strict";Mo();lj=typeof exports=="object"&&exports&&!exports.nodeType&&exports,aj=lj&&typeof module=="object"&&module&&!module.nodeType&&module,J6e=aj&&aj.exports===lj,sj=J6e?hi.Buffer:void 0,oj=sj?sj.allocUnsafe:void 0;o(eCe,"cloneBuffer");hT=eCe});var tCe,om,h9=N(()=>{"use strict";Mo();tCe=hi.Uint8Array,om=tCe});function rCe(t){var e=new t.constructor(t.byteLength);return new om(e).set(new om(t)),e}var lm,fT=N(()=>{"use strict";h9();o(rCe,"cloneArrayBuffer");lm=rCe});function nCe(t,e){var r=e?lm(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}var dT,f9=N(()=>{"use strict";fT();o(nCe,"cloneTypedArray");dT=nCe});function iCe(t,e){var r=-1,n=t.length;for(e||(e=Array(n));++r{"use strict";o(iCe,"copyArray");pT=iCe});var cj,aCe,uj,hj=N(()=>{"use strict";no();cj=Object.create,aCe=function(){function t(){}return o(t,"object"),function(e){if(!bn(e))return{};if(cj)return cj(e);t.prototype=e;var r=new t;return t.prototype=void 0,r}}(),uj=aCe});function sCe(t,e){return function(r){return t(e(r))}}var mT,p9=N(()=>{"use strict";o(sCe,"overArg");mT=sCe});var oCe,cm,gT=N(()=>{"use strict";p9();oCe=mT(Object.getPrototypeOf,Object),cm=oCe});function cCe(t){var e=t&&t.constructor,r=typeof e=="function"&&e.prototype||lCe;return t===r}var lCe,mc,um=N(()=>{"use strict";lCe=Object.prototype;o(cCe,"isPrototype");mc=cCe});function uCe(t){return typeof t.constructor=="function"&&!mc(t)?uj(cm(t)):{}}var yT,m9=N(()=>{"use strict";hj();gT();um();o(uCe,"initCloneObject");yT=uCe});function hCe(t){return t!=null&&typeof t=="object"}var ii,Oo=N(()=>{"use strict";o(hCe,"isObjectLike");ii=hCe});function dCe(t){return ii(t)&&fa(t)==fCe}var fCe,g9,fj=N(()=>{"use strict";Au();Oo();fCe="[object Arguments]";o(dCe,"baseIsArguments");g9=dCe});var dj,pCe,mCe,gCe,Dl,hm=N(()=>{"use strict";fj();Oo();dj=Object.prototype,pCe=dj.hasOwnProperty,mCe=dj.propertyIsEnumerable,gCe=g9(function(){return arguments}())?g9:function(t){return ii(t)&&pCe.call(t,"callee")&&!mCe.call(t,"callee")},Dl=gCe});var yCe,Pt,Wn=N(()=>{"use strict";yCe=Array.isArray,Pt=yCe});function xCe(t){return typeof t=="number"&&t>-1&&t%1==0&&t<=vCe}var vCe,fm,vT=N(()=>{"use strict";vCe=9007199254740991;o(xCe,"isLength");fm=xCe});function bCe(t){return t!=null&&fm(t.length)&&!Ai(t)}var fi,Po=N(()=>{"use strict";n2();vT();o(bCe,"isArrayLike");fi=bCe});function TCe(t){return ii(t)&&fi(t)}var Pd,xT=N(()=>{"use strict";Po();Oo();o(TCe,"isArrayLikeObject");Pd=TCe});function wCe(){return!1}var pj,mj=N(()=>{"use strict";o(wCe,"stubFalse");pj=wCe});var vj,gj,kCe,yj,ECe,SCe,Ll,dm=N(()=>{"use strict";Mo();mj();vj=typeof exports=="object"&&exports&&!exports.nodeType&&exports,gj=vj&&typeof module=="object"&&module&&!module.nodeType&&module,kCe=gj&&gj.exports===vj,yj=kCe?hi.Buffer:void 0,ECe=yj?yj.isBuffer:void 0,SCe=ECe||pj,Ll=SCe});function RCe(t){if(!ii(t)||fa(t)!=CCe)return!1;var e=cm(t);if(e===null)return!0;var r=DCe.call(e,"constructor")&&e.constructor;return typeof r=="function"&&r instanceof r&&xj.call(r)==LCe}var CCe,ACe,_Ce,xj,DCe,LCe,bj,Tj=N(()=>{"use strict";Au();gT();Oo();CCe="[object Object]",ACe=Function.prototype,_Ce=Object.prototype,xj=ACe.toString,DCe=_Ce.hasOwnProperty,LCe=xj.call(Object);o(RCe,"isPlainObject");bj=RCe});function r7e(t){return ii(t)&&fm(t.length)&&!!Fn[fa(t)]}var NCe,MCe,ICe,OCe,PCe,BCe,FCe,$Ce,zCe,GCe,VCe,UCe,HCe,WCe,qCe,YCe,XCe,jCe,KCe,QCe,ZCe,JCe,e7e,t7e,Fn,wj,kj=N(()=>{"use strict";Au();vT();Oo();NCe="[object Arguments]",MCe="[object Array]",ICe="[object Boolean]",OCe="[object Date]",PCe="[object Error]",BCe="[object Function]",FCe="[object Map]",$Ce="[object Number]",zCe="[object Object]",GCe="[object RegExp]",VCe="[object Set]",UCe="[object String]",HCe="[object WeakMap]",WCe="[object ArrayBuffer]",qCe="[object DataView]",YCe="[object Float32Array]",XCe="[object Float64Array]",jCe="[object Int8Array]",KCe="[object Int16Array]",QCe="[object Int32Array]",ZCe="[object Uint8Array]",JCe="[object Uint8ClampedArray]",e7e="[object Uint16Array]",t7e="[object Uint32Array]",Fn={};Fn[YCe]=Fn[XCe]=Fn[jCe]=Fn[KCe]=Fn[QCe]=Fn[ZCe]=Fn[JCe]=Fn[e7e]=Fn[t7e]=!0;Fn[NCe]=Fn[MCe]=Fn[WCe]=Fn[ICe]=Fn[qCe]=Fn[OCe]=Fn[PCe]=Fn[BCe]=Fn[FCe]=Fn[$Ce]=Fn[zCe]=Fn[GCe]=Fn[VCe]=Fn[UCe]=Fn[HCe]=!1;o(r7e,"baseIsTypedArray");wj=r7e});function n7e(t){return function(e){return t(e)}}var Bo,Bd=N(()=>{"use strict";o(n7e,"baseUnary");Bo=n7e});var Ej,u2,i7e,y9,a7e,Fo,h2=N(()=>{"use strict";n9();Ej=typeof exports=="object"&&exports&&!exports.nodeType&&exports,u2=Ej&&typeof module=="object"&&module&&!module.nodeType&&module,i7e=u2&&u2.exports===Ej,y9=i7e&&sT.process,a7e=function(){try{var t=u2&&u2.require&&u2.require("util").types;return t||y9&&y9.binding&&y9.binding("util")}catch{}}(),Fo=a7e});var Sj,s7e,Gh,f2=N(()=>{"use strict";kj();Bd();h2();Sj=Fo&&Fo.isTypedArray,s7e=Sj?Bo(Sj):wj,Gh=s7e});function o7e(t,e){if(!(e==="constructor"&&typeof t[e]=="function")&&e!="__proto__")return t[e]}var d2,v9=N(()=>{"use strict";o(o7e,"safeGet");d2=o7e});function u7e(t,e,r){var n=t[e];(!(c7e.call(t,e)&&Io(n,r))||r===void 0&&!(e in t))&&pc(t,e,r)}var l7e,c7e,gc,pm=N(()=>{"use strict";am();Id();l7e=Object.prototype,c7e=l7e.hasOwnProperty;o(u7e,"assignValue");gc=u7e});function h7e(t,e,r,n){var i=!r;r||(r={});for(var a=-1,s=e.length;++a{"use strict";pm();am();o(h7e,"copyObject");$o=h7e});function f7e(t,e){for(var r=-1,n=Array(t);++r{"use strict";o(f7e,"baseTimes");Cj=f7e});function m7e(t,e){var r=typeof t;return e=e??d7e,!!e&&(r=="number"||r!="symbol"&&p7e.test(t))&&t>-1&&t%1==0&&t{"use strict";d7e=9007199254740991,p7e=/^(?:0|[1-9]\d*)$/;o(m7e,"isIndex");Vh=m7e});function v7e(t,e){var r=Pt(t),n=!r&&Dl(t),i=!r&&!n&&Ll(t),a=!r&&!n&&!i&&Gh(t),s=r||n||i||a,l=s?Cj(t.length,String):[],u=l.length;for(var h in t)(e||y7e.call(t,h))&&!(s&&(h=="length"||i&&(h=="offset"||h=="parent")||a&&(h=="buffer"||h=="byteLength"||h=="byteOffset")||Vh(h,u)))&&l.push(h);return l}var g7e,y7e,bT,x9=N(()=>{"use strict";Aj();hm();Wn();dm();p2();f2();g7e=Object.prototype,y7e=g7e.hasOwnProperty;o(v7e,"arrayLikeKeys");bT=v7e});function x7e(t){var e=[];if(t!=null)for(var r in Object(t))e.push(r);return e}var _j,Dj=N(()=>{"use strict";o(x7e,"nativeKeysIn");_j=x7e});function w7e(t){if(!bn(t))return _j(t);var e=mc(t),r=[];for(var n in t)n=="constructor"&&(e||!T7e.call(t,n))||r.push(n);return r}var b7e,T7e,Lj,Rj=N(()=>{"use strict";no();um();Dj();b7e=Object.prototype,T7e=b7e.hasOwnProperty;o(w7e,"baseKeysIn");Lj=w7e});function k7e(t){return fi(t)?bT(t,!0):Lj(t)}var Rs,Uh=N(()=>{"use strict";x9();Rj();Po();o(k7e,"keysIn");Rs=k7e});function E7e(t){return $o(t,Rs(t))}var Nj,Mj=N(()=>{"use strict";Fd();Uh();o(E7e,"toPlainObject");Nj=E7e});function S7e(t,e,r,n,i,a,s){var l=d2(t,r),u=d2(e,r),h=s.get(u);if(h){c2(t,r,h);return}var f=a?a(l,u,r+"",t,e,s):void 0,d=f===void 0;if(d){var p=Pt(u),m=!p&&Ll(u),g=!p&&!m&&Gh(u);f=u,p||m||g?Pt(l)?f=l:Pd(l)?f=pT(l):m?(d=!1,f=hT(u,!0)):g?(d=!1,f=dT(u,!0)):f=[]:bj(u)||Dl(u)?(f=l,Dl(l)?f=Nj(l):(!bn(l)||Ai(l))&&(f=yT(u))):d=!1}d&&(s.set(u,f),i(f,u,n,a,s),s.delete(u)),c2(t,r,f)}var Ij,Oj=N(()=>{"use strict";c9();u9();f9();d9();m9();hm();Wn();xT();dm();n2();no();Tj();f2();v9();Mj();o(S7e,"baseMergeDeep");Ij=S7e});function Pj(t,e,r,n,i){t!==e&&sm(e,function(a,s){if(i||(i=new dc),bn(a))Ij(t,e,s,r,Pj,n,i);else{var l=n?n(d2(t,s),a,s+"",t,e,i):void 0;l===void 0&&(l=a),c2(t,s,l)}},Rs)}var Bj,Fj=N(()=>{"use strict";l2();c9();uT();Oj();no();Uh();v9();o(Pj,"baseMerge");Bj=Pj});function C7e(t){return t}var ta,Lu=N(()=>{"use strict";o(C7e,"identity");ta=C7e});function A7e(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}var $j,zj=N(()=>{"use strict";o(A7e,"apply");$j=A7e});function _7e(t,e,r){return e=Gj(e===void 0?t.length-1:e,0),function(){for(var n=arguments,i=-1,a=Gj(n.length-e,0),s=Array(a);++i{"use strict";zj();Gj=Math.max;o(_7e,"overRest");TT=_7e});function D7e(t){return function(){return t}}var Ns,T9=N(()=>{"use strict";o(D7e,"constant");Ns=D7e});var L7e,Vj,Uj=N(()=>{"use strict";T9();l9();Lu();L7e=im?function(t,e){return im(t,"toString",{configurable:!0,enumerable:!1,value:Ns(e),writable:!0})}:ta,Vj=L7e});function I7e(t){var e=0,r=0;return function(){var n=M7e(),i=N7e-(n-r);if(r=n,i>0){if(++e>=R7e)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}var R7e,N7e,M7e,Hj,Wj=N(()=>{"use strict";R7e=800,N7e=16,M7e=Date.now;o(I7e,"shortOut");Hj=I7e});var O7e,wT,w9=N(()=>{"use strict";Uj();Wj();O7e=Hj(Vj),wT=O7e});function P7e(t,e){return wT(TT(t,e,ta),t+"")}var yc,mm=N(()=>{"use strict";Lu();b9();w9();o(P7e,"baseRest");yc=P7e});function B7e(t,e,r){if(!bn(r))return!1;var n=typeof e;return(n=="number"?fi(r)&&Vh(e,r.length):n=="string"&&e in r)?Io(r[e],t):!1}var io,$d=N(()=>{"use strict";Id();Po();p2();no();o(B7e,"isIterateeCall");io=B7e});function F7e(t){return yc(function(e,r){var n=-1,i=r.length,a=i>1?r[i-1]:void 0,s=i>2?r[2]:void 0;for(a=t.length>3&&typeof a=="function"?(i--,a):void 0,s&&io(r[0],r[1],s)&&(a=i<3?void 0:a,i=1),e=Object(e);++n{"use strict";mm();$d();o(F7e,"createAssigner");kT=F7e});var $7e,Hh,E9=N(()=>{"use strict";Fj();k9();$7e=kT(function(t,e,r){Bj(t,e,r)}),Hh=$7e});function A9(t,e){if(!t)return e;let r=`curve${t.charAt(0).toUpperCase()+t.slice(1)}`;return z7e[r]??e}function H7e(t,e){let r=t.trim();if(r)return e.securityLevel!=="loose"?(0,Xj.sanitizeUrl)(r):r}function Qj(t,e){return!t||!e?0:Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))}function q7e(t){let e,r=0;t.forEach(i=>{r+=Qj(i,e),e=i});let n=r/2;return _9(t,n)}function Y7e(t){return t.length===1?t[0]:q7e(t)}function j7e(t,e,r){let n=structuredClone(r);X.info("our points",n),e!=="start_left"&&e!=="start_right"&&n.reverse();let i=25+t,a=_9(n,i),s=10+t*.5,l=Math.atan2(n[0].y-a.y,n[0].x-a.x),u={x:0,y:0};return e==="start_left"?(u.x=Math.sin(l+Math.PI)*s+(n[0].x+a.x)/2,u.y=-Math.cos(l+Math.PI)*s+(n[0].y+a.y)/2):e==="end_right"?(u.x=Math.sin(l-Math.PI)*s+(n[0].x+a.x)/2-5,u.y=-Math.cos(l-Math.PI)*s+(n[0].y+a.y)/2-5):e==="end_left"?(u.x=Math.sin(l)*s+(n[0].x+a.x)/2-5,u.y=-Math.cos(l)*s+(n[0].y+a.y)/2-5):(u.x=Math.sin(l)*s+(n[0].x+a.x)/2,u.y=-Math.cos(l)*s+(n[0].y+a.y)/2),u}function D9(t){let e="",r="";for(let n of t)n!==void 0&&(n.startsWith("color:")||n.startsWith("text-align:")?r=r+n+";":e=e+n+";");return{style:e,labelStyle:r}}function K7e(t){let e="",r="0123456789abcdef",n=r.length;for(let i=0;i{"use strict";Xj=Aa(Z0(),1);fr();pr();b7();yt();rd();g0();o9();E9();Q4();C9="\u200B",z7e={curveBasis:No,curveBasisClosed:X5,curveBasisOpen:j5,curveBumpX:Gv,curveBumpY:Vv,curveBundle:HD,curveCardinalClosed:WD,curveCardinalOpen:YD,curveCardinal:qv,curveCatmullRomClosed:jD,curveCatmullRomOpen:KD,curveCatmullRom:jv,curveLinear:Su,curveLinearClosed:eT,curveMonotoneX:Kv,curveMonotoneY:Qv,curveNatural:K0,curveStep:Q0,curveStepAfter:Jv,curveStepBefore:Zv},G7e=/\s*(?:(\w+)(?=:):|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,V7e=o(function(t,e){let r=jj(t,/(?:init\b)|(?:initialize\b)/),n={};if(Array.isArray(r)){let s=r.map(l=>l.args);v0(s),n=Un(n,[...s])}else n=r.args;if(!n)return;let i=m0(t,e),a="config";return n[a]!==void 0&&(i==="flowchart-v2"&&(i="flowchart"),n[i]=n[a],delete n[a]),n},"detectInit"),jj=o(function(t,e=null){try{let r=new RegExp(`[%]{2}(?![{]${G7e.source})(?=[}][%]{2}).* +`,"ig");t=t.trim().replace(r,"").replace(/'/gm,'"'),X.debug(`Detecting diagram directive${e!==null?" type:"+e:""} based on the text:${t}`);let n,i=[];for(;(n=td.exec(t))!==null;)if(n.index===td.lastIndex&&td.lastIndex++,n&&!e||e&&n[1]?.match(e)||e&&n[2]?.match(e)){let a=n[1]?n[1]:n[2],s=n[3]?n[3].trim():n[4]?JSON.parse(n[4].trim()):null;i.push({type:a,args:s})}return i.length===0?{type:t,args:null}:i.length===1?i[0]:i}catch(r){return X.error(`ERROR: ${r.message} - Unable to parse directive type: '${e}' based on the text: '${t}'`),{type:void 0,args:null}}},"detectDirective"),Kj=o(function(t){return t.replace(td,"")},"removeDirectives"),U7e=o(function(t,e){for(let[r,n]of e.entries())if(n.match(t))return r;return-1},"isSubstringInArray");o(A9,"interpolateToCurve");o(H7e,"formatUrl");W7e=o((t,...e)=>{let r=t.split("."),n=r.length-1,i=r[n],a=window;for(let s=0;s{let r=Math.pow(10,e);return Math.round(t*r)/r},"roundNumber"),_9=o((t,e)=>{let r,n=e;for(let i of t){if(r){let a=Qj(i,r);if(a===0)return r;if(a=1)return{x:i.x,y:i.y};if(s>0&&s<1)return{x:qj((1-s)*r.x+s*i.x,5),y:qj((1-s)*r.y+s*i.y,5)}}}r=i}throw new Error("Could not find a suitable point for the given distance")},"calculatePoint"),X7e=o((t,e,r)=>{X.info(`our points ${JSON.stringify(e)}`),e[0]!==r&&(e=e.reverse());let i=_9(e,25),a=t?10:5,s=Math.atan2(e[0].y-i.y,e[0].x-i.x),l={x:0,y:0};return l.x=Math.sin(s)*a+(e[0].x+i.x)/2,l.y=-Math.cos(s)*a+(e[0].y+i.y)/2,l},"calcCardinalityPosition");o(j7e,"calcTerminalLabelPosition");o(D9,"getStylesFromArray");Yj=0,L9=o(()=>(Yj++,"id-"+Math.random().toString(36).substr(2,12)+"-"+Yj),"generateId");o(K7e,"makeRandomHex");R9=o(t=>K7e(t.length),"random"),Q7e=o(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:""}},"getTextObj"),Z7e=o(function(t,e){let r=e.text.replace(Ze.lineBreakRegex," "),[,n]=zo(e.fontSize),i=t.append("text");i.attr("x",e.x),i.attr("y",e.y),i.style("text-anchor",e.anchor),i.style("font-family",e.fontFamily),i.style("font-size",n),i.style("font-weight",e.fontWeight),i.attr("fill",e.fill),e.class!==void 0&&i.attr("class",e.class);let a=i.append("tspan");return a.attr("x",e.x+e.textMargin*2),a.attr("fill",e.fill),a.text(r),i},"drawSimpleText"),N9=rm((t,e,r)=>{if(!t||(r=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",joinWith:"
"},r),Ze.lineBreakRegex.test(t)))return t;let n=t.split(" ").filter(Boolean),i=[],a="";return n.forEach((s,l)=>{let u=ra(`${s} `,r),h=ra(a,r);if(u>e){let{hyphenatedStrings:p,remainingWord:m}=J7e(s,e,"-",r);i.push(a,...p),a=m}else h+u>=e?(i.push(a),a=s):a=[a,s].filter(Boolean).join(" ");l+1===n.length&&i.push(a)}),i.filter(s=>s!=="").join(r.joinWith)},(t,e,r)=>`${t}${e}${r.fontSize}${r.fontWeight}${r.fontFamily}${r.joinWith}`),J7e=rm((t,e,r="-",n)=>{n=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:0},n);let i=[...t],a=[],s="";return i.forEach((l,u)=>{let h=`${s}${l}`;if(ra(h,n)>=e){let d=u+1,p=i.length===d,m=`${h}${r}`;a.push(p?h:m),s=""}else s=h}),{hyphenatedStrings:a,remainingWord:s}},(t,e,r="-",n)=>`${t}${e}${r}${n.fontSize}${n.fontWeight}${n.fontFamily}`);o(ST,"calculateTextHeight");o(ra,"calculateTextWidth");M9=rm((t,e)=>{let{fontSize:r=12,fontFamily:n="Arial",fontWeight:i=400}=e;if(!t)return{width:0,height:0};let[,a]=zo(r),s=["sans-serif",n],l=t.split(Ze.lineBreakRegex),u=[],h=Ge("body");if(!h.remove)return{width:0,height:0,lineHeight:0};let f=h.append("svg");for(let p of s){let m=0,g={width:0,height:0,lineHeight:0};for(let y of l){let v=Q7e();v.text=y||C9;let x=Z7e(f,v).style("font-size",a).style("font-weight",i).style("font-family",p),b=(x._groups||x)[0][0].getBBox();if(b.width===0&&b.height===0)throw new Error("svg element not in render tree");g.width=Math.round(Math.max(g.width,b.width)),m=Math.round(b.height),g.height+=m,g.lineHeight=Math.round(Math.max(g.lineHeight,m))}u.push(g)}f.remove();let d=isNaN(u[1].height)||isNaN(u[1].width)||isNaN(u[1].lineHeight)||u[0].height>u[1].height&&u[0].width>u[1].width&&u[0].lineHeight>u[1].lineHeight?0:1;return u[d]},(t,e)=>`${t}${e.fontSize}${e.fontWeight}${e.fontFamily}`),S9=class{constructor(e=!1,r){this.count=0;this.count=r?r.length:0,this.next=e?()=>this.count++:()=>Date.now()}static{o(this,"InitIDGenerator")}},eAe=o(function(t){return ET=ET||document.createElement("div"),t=escape(t).replace(/%26/g,"&").replace(/%23/g,"#").replace(/%3B/g,";"),ET.innerHTML=t,unescape(ET.textContent)},"entityDecode");o(I9,"isDetailedError");tAe=o((t,e,r,n)=>{if(!n)return;let i=t.node()?.getBBox();i&&t.append("text").text(n).attr("text-anchor","middle").attr("x",i.x+i.width/2).attr("y",-r).attr("class",e)},"insertTitle"),zo=o(t=>{if(typeof t=="number")return[t,t+"px"];let e=parseInt(t??"",10);return Number.isNaN(e)?[void 0,void 0]:t===String(e)?[e,t+"px"]:[e,t]},"parseFontSize");o($n,"cleanAndMerge");Vt={assignWithDepth:Un,wrapLabel:N9,calculateTextHeight:ST,calculateTextWidth:ra,calculateTextDimensions:M9,cleanAndMerge:$n,detectInit:V7e,detectDirective:jj,isSubstringInArray:U7e,interpolateToCurve:A9,calcLabelPosition:Y7e,calcCardinalityPosition:X7e,calcTerminalLabelPosition:j7e,formatUrl:H7e,getStylesFromArray:D9,generateId:L9,random:R9,runFunc:W7e,entityDecode:eAe,insertTitle:tAe,parseFontSize:zo,InitIDGenerator:S9},Zj=o(function(t){let e=t;return e=e.replace(/style.*:\S*#.*;/g,function(r){return r.substring(0,r.length-1)}),e=e.replace(/classDef.*:\S*#.*;/g,function(r){return r.substring(0,r.length-1)}),e=e.replace(/#\w+;/g,function(r){let n=r.substring(1,r.length-1);return/^\+?\d+$/.test(n)?"\uFB02\xB0\xB0"+n+"\xB6\xDF":"\uFB02\xB0"+n+"\xB6\xDF"}),e},"encodeEntities"),na=o(function(t){return t.replace(/๏ฌ‚ยฐยฐ/g,"&#").replace(/๏ฌ‚ยฐ/g,"&").replace(/ยถรŸ/g,";")},"decodeEntities"),Wh=o((t,e,{counter:r=0,prefix:n,suffix:i},a)=>a||`${n?`${n}_`:""}${t}_${e}_${r}${i?`_${i}`:""}`,"getEdgeId");o(zn,"handleUndefinedAttr")});function Rl(t,e,r,n,i){if(!e[t].width)if(r)e[t].text=N9(e[t].text,i,n),e[t].textLines=e[t].text.split(Ze.lineBreakRegex).length,e[t].width=i,e[t].height=ST(e[t].text,n);else{let a=e[t].text.split(Ze.lineBreakRegex);e[t].textLines=a.length;let s=0;e[t].height=0,e[t].width=0;for(let l of a)e[t].width=Math.max(ra(l,n),e[t].width),s=ST(l,n),e[t].height=e[t].height+s}}function nK(t,e,r,n,i){let a=new DT(i);a.data.widthLimit=r.data.widthLimit/Math.min(O9,n.length);for(let[s,l]of n.entries()){let u=0;l.image={width:0,height:0,Y:0},l.sprite&&(l.image.width=48,l.image.height=48,l.image.Y=u,u=l.image.Y+l.image.height);let h=l.wrap&&Ut.wrap,f=CT(Ut);if(f.fontSize=f.fontSize+2,f.fontWeight="bold",Rl("label",l,h,f,a.data.widthLimit),l.label.Y=u+8,u=l.label.Y+l.label.height,l.type&&l.type.text!==""){l.type.text="["+l.type.text+"]";let g=CT(Ut);Rl("type",l,h,g,a.data.widthLimit),l.type.Y=u+5,u=l.type.Y+l.type.height}if(l.descr&&l.descr.text!==""){let g=CT(Ut);g.fontSize=g.fontSize-2,Rl("descr",l,h,g,a.data.widthLimit),l.descr.Y=u+20,u=l.descr.Y+l.descr.height}if(s==0||s%O9===0){let g=r.data.startx+Ut.diagramMarginX,y=r.data.stopy+Ut.diagramMarginY+u;a.setData(g,g,y,y)}else{let g=a.data.stopx!==a.data.startx?a.data.stopx+Ut.diagramMarginX:a.data.startx,y=a.data.starty;a.setData(g,g,y,y)}a.name=l.alias;let d=i.db.getC4ShapeArray(l.alias),p=i.db.getC4ShapeKeys(l.alias);p.length>0&&rK(a,t,d,p),e=l.alias;let m=i.db.getBoundaries(e);m.length>0&&nK(t,e,a,m,i),l.alias!=="global"&&tK(t,l,a),r.data.stopy=Math.max(a.data.stopy+Ut.c4ShapeMargin,r.data.stopy),r.data.stopx=Math.max(a.data.stopx+Ut.c4ShapeMargin,r.data.stopx),AT=Math.max(AT,r.data.stopx),_T=Math.max(_T,r.data.stopy)}}var AT,_T,eK,O9,Ut,DT,P9,m2,CT,rAe,tK,rK,Ms,Jj,nAe,iAe,aAe,B9,iK=N(()=>{"use strict";fr();JY();yt();a7();pr();LA();Gt();g0();er();xi();AT=0,_T=0,eK=4,O9=2;Ry.yy=sv;Ut={},DT=class{static{o(this,"Bounds")}constructor(e){this.name="",this.data={},this.data.startx=void 0,this.data.stopx=void 0,this.data.starty=void 0,this.data.stopy=void 0,this.data.widthLimit=void 0,this.nextData={},this.nextData.startx=void 0,this.nextData.stopx=void 0,this.nextData.starty=void 0,this.nextData.stopy=void 0,this.nextData.cnt=0,P9(e.db.getConfig())}setData(e,r,n,i){this.nextData.startx=this.data.startx=e,this.nextData.stopx=this.data.stopx=r,this.nextData.starty=this.data.starty=n,this.nextData.stopy=this.data.stopy=i}updateVal(e,r,n,i){e[r]===void 0?e[r]=n:e[r]=i(n,e[r])}insert(e){this.nextData.cnt=this.nextData.cnt+1;let r=this.nextData.startx===this.nextData.stopx?this.nextData.stopx+e.margin:this.nextData.stopx+e.margin*2,n=r+e.width,i=this.nextData.starty+e.margin*2,a=i+e.height;(r>=this.data.widthLimit||n>=this.data.widthLimit||this.nextData.cnt>eK)&&(r=this.nextData.startx+e.margin+Ut.nextLinePaddingX,i=this.nextData.stopy+e.margin*2,this.nextData.stopx=n=r+e.width,this.nextData.starty=this.nextData.stopy,this.nextData.stopy=a=i+e.height,this.nextData.cnt=1),e.x=r,e.y=i,this.updateVal(this.data,"startx",r,Math.min),this.updateVal(this.data,"starty",i,Math.min),this.updateVal(this.data,"stopx",n,Math.max),this.updateVal(this.data,"stopy",a,Math.max),this.updateVal(this.nextData,"startx",r,Math.min),this.updateVal(this.nextData,"starty",i,Math.min),this.updateVal(this.nextData,"stopx",n,Math.max),this.updateVal(this.nextData,"stopy",a,Math.max)}init(e){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},P9(e.db.getConfig())}bumpLastMargin(e){this.data.stopx+=e,this.data.stopy+=e}},P9=o(function(t){Un(Ut,t),t.fontFamily&&(Ut.personFontFamily=Ut.systemFontFamily=Ut.messageFontFamily=t.fontFamily),t.fontSize&&(Ut.personFontSize=Ut.systemFontSize=Ut.messageFontSize=t.fontSize),t.fontWeight&&(Ut.personFontWeight=Ut.systemFontWeight=Ut.messageFontWeight=t.fontWeight)},"setConf"),m2=o((t,e)=>({fontFamily:t[e+"FontFamily"],fontSize:t[e+"FontSize"],fontWeight:t[e+"FontWeight"]}),"c4ShapeFont"),CT=o(t=>({fontFamily:t.boundaryFontFamily,fontSize:t.boundaryFontSize,fontWeight:t.boundaryFontWeight}),"boundaryFont"),rAe=o(t=>({fontFamily:t.messageFontFamily,fontSize:t.messageFontSize,fontWeight:t.messageFontWeight}),"messageFont");o(Rl,"calcC4ShapeTextWH");tK=o(function(t,e,r){e.x=r.data.startx,e.y=r.data.starty,e.width=r.data.stopx-r.data.startx,e.height=r.data.stopy-r.data.starty,e.label.y=Ut.c4ShapeMargin-35;let n=e.wrap&&Ut.wrap,i=CT(Ut);i.fontSize=i.fontSize+2,i.fontWeight="bold";let a=ra(e.label.text,i);Rl("label",e,n,i,a),_l.drawBoundary(t,e,Ut)},"drawBoundary"),rK=o(function(t,e,r,n){let i=0;for(let a of n){i=0;let s=r[a],l=m2(Ut,s.typeC4Shape.text);switch(l.fontSize=l.fontSize-2,s.typeC4Shape.width=ra("\xAB"+s.typeC4Shape.text+"\xBB",l),s.typeC4Shape.height=l.fontSize+2,s.typeC4Shape.Y=Ut.c4ShapePadding,i=s.typeC4Shape.Y+s.typeC4Shape.height-4,s.image={width:0,height:0,Y:0},s.typeC4Shape.text){case"person":case"external_person":s.image.width=48,s.image.height=48,s.image.Y=i,i=s.image.Y+s.image.height;break}s.sprite&&(s.image.width=48,s.image.height=48,s.image.Y=i,i=s.image.Y+s.image.height);let u=s.wrap&&Ut.wrap,h=Ut.width-Ut.c4ShapePadding*2,f=m2(Ut,s.typeC4Shape.text);if(f.fontSize=f.fontSize+2,f.fontWeight="bold",Rl("label",s,u,f,h),s.label.Y=i+8,i=s.label.Y+s.label.height,s.type&&s.type.text!==""){s.type.text="["+s.type.text+"]";let m=m2(Ut,s.typeC4Shape.text);Rl("type",s,u,m,h),s.type.Y=i+5,i=s.type.Y+s.type.height}else if(s.techn&&s.techn.text!==""){s.techn.text="["+s.techn.text+"]";let m=m2(Ut,s.techn.text);Rl("techn",s,u,m,h),s.techn.Y=i+5,i=s.techn.Y+s.techn.height}let d=i,p=s.label.width;if(s.descr&&s.descr.text!==""){let m=m2(Ut,s.typeC4Shape.text);Rl("descr",s,u,m,h),s.descr.Y=i+20,i=s.descr.Y+s.descr.height,p=Math.max(s.label.width,s.descr.width),d=i-s.descr.textLines*5}p=p+Ut.c4ShapePadding,s.width=Math.max(s.width||Ut.width,p,Ut.width),s.height=Math.max(s.height||Ut.height,d,Ut.height),s.margin=s.margin||Ut.c4ShapeMargin,t.insert(s),_l.drawC4Shape(e,s,Ut)}t.bumpLastMargin(Ut.c4ShapeMargin)},"drawC4ShapeArray"),Ms=class{static{o(this,"Point")}constructor(e,r){this.x=e,this.y=r}},Jj=o(function(t,e){let r=t.x,n=t.y,i=e.x,a=e.y,s=r+t.width/2,l=n+t.height/2,u=Math.abs(r-i),h=Math.abs(n-a),f=h/u,d=t.height/t.width,p=null;return n==a&&ri?p=new Ms(r,l):r==i&&na&&(p=new Ms(s,n)),r>i&&n=f?p=new Ms(r,l+f*t.width/2):p=new Ms(s-u/h*t.height/2,n+t.height):r=f?p=new Ms(r+t.width,l+f*t.width/2):p=new Ms(s+u/h*t.height/2,n+t.height):ra?d>=f?p=new Ms(r+t.width,l-f*t.width/2):p=new Ms(s+t.height/2*u/h,n):r>i&&n>a&&(d>=f?p=new Ms(r,l-t.width/2*f):p=new Ms(s-t.height/2*u/h,n)),p},"getIntersectPoint"),nAe=o(function(t,e){let r={x:0,y:0};r.x=e.x+e.width/2,r.y=e.y+e.height/2;let n=Jj(t,r);r.x=t.x+t.width/2,r.y=t.y+t.height/2;let i=Jj(e,r);return{startPoint:n,endPoint:i}},"getIntersectPoints"),iAe=o(function(t,e,r,n){let i=0;for(let a of e){i=i+1;let s=a.wrap&&Ut.wrap,l=rAe(Ut);n.db.getC4Type()==="C4Dynamic"&&(a.label.text=i+": "+a.label.text);let h=ra(a.label.text,l);Rl("label",a,s,l,h),a.techn&&a.techn.text!==""&&(h=ra(a.techn.text,l),Rl("techn",a,s,l,h)),a.descr&&a.descr.text!==""&&(h=ra(a.descr.text,l),Rl("descr",a,s,l,h));let f=r(a.from),d=r(a.to),p=nAe(f,d);a.startPoint=p.startPoint,a.endPoint=p.endPoint}_l.drawRels(t,e,Ut)},"drawRels");o(nK,"drawInsideBoundary");aAe=o(function(t,e,r,n){Ut=me().c4;let i=me().securityLevel,a;i==="sandbox"&&(a=Ge("#i"+e));let s=i==="sandbox"?Ge(a.nodes()[0].contentDocument.body):Ge("body"),l=n.db;n.db.setWrap(Ut.wrap),eK=l.getC4ShapeInRow(),O9=l.getC4BoundaryInRow(),X.debug(`C:${JSON.stringify(Ut,null,2)}`);let u=i==="sandbox"?s.select(`[id="${e}"]`):Ge(`[id="${e}"]`);_l.insertComputerIcon(u),_l.insertDatabaseIcon(u),_l.insertClockIcon(u);let h=new DT(n);h.setData(Ut.diagramMarginX,Ut.diagramMarginX,Ut.diagramMarginY,Ut.diagramMarginY),h.data.widthLimit=screen.availWidth,AT=Ut.diagramMarginX,_T=Ut.diagramMarginY;let f=n.db.getTitle(),d=n.db.getBoundaries("");nK(u,"",h,d,n),_l.insertArrowHead(u),_l.insertArrowEnd(u),_l.insertArrowCrossHead(u),_l.insertArrowFilledHead(u),iAe(u,n.db.getRels(),n.db.getC4Shape,n),h.data.stopx=AT,h.data.stopy=_T;let p=h.data,g=p.stopy-p.starty+2*Ut.diagramMarginY,v=p.stopx-p.startx+2*Ut.diagramMarginX;f&&u.append("text").text(f).attr("x",(p.stopx-p.startx)/2-4*Ut.diagramMarginX).attr("y",p.starty+Ut.diagramMarginY),fn(u,g,v,Ut.useMaxWidth);let x=f?60:0;u.attr("viewBox",p.startx-Ut.diagramMarginX+" -"+(Ut.diagramMarginY+x)+" "+v+" "+(g+x)),X.debug("models:",p)},"draw"),B9={drawPersonOrSystemArray:rK,drawBoundary:tK,setConf:P9,draw:aAe}});var sAe,aK,sK=N(()=>{"use strict";sAe=o(t=>`.person { stroke: ${t.personBorder}; fill: ${t.personBkg}; } -`,"getStyles"),XX=DCe});var KX={};hr(KX,{diagram:()=>LCe});var LCe,QX=N(()=>{"use strict";WC();mA();YX();jX();LCe={parser:i$,db:iv,renderer:sD,styles:XX,init:o(({c4:t,wrap:e})=>{sD.setConf(t),iv.setWrap(e)},"init")}});function mj(t){return typeof t>"u"||t===null}function ICe(t){return typeof t=="object"&&t!==null}function OCe(t){return Array.isArray(t)?t:mj(t)?[]:[t]}function PCe(t,e){var r,n,i,a;if(e)for(a=Object.keys(e),r=0,n=a.length;roAe});var oAe,lK=N(()=>{"use strict";a7();LA();iK();sK();oAe={parser:G$,db:sv,renderer:B9,styles:aK,init:o(({c4:t,wrap:e})=>{B9.setConf(t),sv.setWrap(e)},"init")}});function CK(t){return typeof t>"u"||t===null}function hAe(t){return typeof t=="object"&&t!==null}function fAe(t){return Array.isArray(t)?t:CK(t)?[]:[t]}function dAe(t,e){var r,n,i,a;if(e)for(a=Object.keys(e),r=0,n=a.length;rl&&(a=" ... ",e=n-l+a.length),r-n>l&&(s=" ...",r=n+l-s.length),{str:a+t.slice(e,r).replace(/\t/g,"\u2192")+s,pos:n-e+a.length}}function lD(t,e){return zi.repeat(" ",e-t.length)+t}function WCe(t,e){if(e=Object.create(e||null),!t.buffer)return null;e.maxLength||(e.maxLength=79),typeof e.indent!="number"&&(e.indent=1),typeof e.linesBefore!="number"&&(e.linesBefore=3),typeof e.linesAfter!="number"&&(e.linesAfter=2);for(var r=/\r?\n|\r|\0/g,n=[0],i=[],a,s=-1;a=r.exec(t.buffer);)i.push(a.index),n.push(a.index+a[0].length),t.position<=a.index&&s<0&&(s=n.length-2);s<0&&(s=n.length-1);var l="",u,h,f=Math.min(t.line+e.linesAfter,i.length).toString().length,d=e.maxLength-(e.indent+f+3);for(u=1;u<=e.linesBefore&&!(s-u<0);u++)h=oD(t.buffer,n[s-u],i[s-u],t.position-(n[s]-n[s-u]),d),l=zi.repeat(" ",e.indent)+lD((t.line-u+1).toString(),f)+" | "+h.str+` -`+l;for(h=oD(t.buffer,n[s],i[s],t.position,d),l+=zi.repeat(" ",e.indent)+lD((t.line+1).toString(),f)+" | "+h.str+` -`,l+=zi.repeat("-",e.indent+f+3+h.pos)+`^ -`,u=1;u<=e.linesAfter&&!(s+u>=i.length);u++)h=oD(t.buffer,n[s+u],i[s+u],t.position-(n[s]-n[s+u]),d),l+=zi.repeat(" ",e.indent)+lD((t.line+u+1).toString(),f)+" | "+h.str+` -`;return l.replace(/\n$/,"")}function jCe(t){var e={};return t!==null&&Object.keys(t).forEach(function(r){t[r].forEach(function(n){e[String(n)]=r})}),e}function KCe(t,e){if(e=e||{},Object.keys(e).forEach(function(r){if(YCe.indexOf(r)===-1)throw new Rs('Unknown option "'+r+'" is met in definition of "'+t+'" YAML type.')}),this.options=e,this.tag=t,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(r){return r},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.representName=e.representName||null,this.defaultStyle=e.defaultStyle||null,this.multi=e.multi||!1,this.styleAliases=jCe(e.styleAliases||null),XCe.indexOf(this.kind)===-1)throw new Rs('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')}function ej(t,e){var r=[];return t[e].forEach(function(n){var i=r.length;r.forEach(function(a,s){a.tag===n.tag&&a.kind===n.kind&&a.multi===n.multi&&(i=s)}),r[i]=n}),r}function QCe(){var t={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}},e,r;function n(i){i.multi?(t.multi[i.kind].push(i),t.multi.fallback.push(i)):t[i.kind][i.tag]=t.fallback[i.tag]=i}for(o(n,"collectType"),e=0,r=arguments.length;e=0&&(e=e.slice(1)),e===".inf"?r===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:e===".nan"?NaN:r*parseFloat(e,10)}function T7e(t,e){var r;if(isNaN(t))switch(e){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===t)switch(e){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===t)switch(e){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(zi.isNegativeZero(t))return"-0.0";return r=t.toString(10),w7e.test(r)?r.replace("e",".e"):r}function k7e(t){return Object.prototype.toString.call(t)==="[object Number]"&&(t%1!==0||zi.isNegativeZero(t))}function C7e(t){return t===null?!1:vj.exec(t)!==null||xj.exec(t)!==null}function A7e(t){var e,r,n,i,a,s,l,u=0,h=null,f,d,p;if(e=vj.exec(t),e===null&&(e=xj.exec(t)),e===null)throw new Error("Date resolve error");if(r=+e[1],n=+e[2]-1,i=+e[3],!e[4])return new Date(Date.UTC(r,n,i));if(a=+e[4],s=+e[5],l=+e[6],e[7]){for(u=e[7].slice(0,3);u.length<3;)u+="0";u=+u}return e[9]&&(f=+e[10],d=+(e[11]||0),h=(f*60+d)*6e4,e[9]==="-"&&(h=-h)),p=new Date(Date.UTC(r,n,i,a,s,l,u)),h&&p.setTime(p.getTime()-h),p}function _7e(t){return t.toISOString()}function L7e(t){return t==="<<"||t===null}function N7e(t){if(t===null)return!1;var e,r,n=0,i=t.length,a=mD;for(r=0;r64)){if(e<0)return!1;n+=6}return n%8===0}function M7e(t){var e,r,n=t.replace(/[\r\n=]/g,""),i=n.length,a=mD,s=0,l=[];for(e=0;e>16&255),l.push(s>>8&255),l.push(s&255)),s=s<<6|a.indexOf(n.charAt(e));return r=i%4*6,r===0?(l.push(s>>16&255),l.push(s>>8&255),l.push(s&255)):r===18?(l.push(s>>10&255),l.push(s>>2&255)):r===12&&l.push(s>>4&255),new Uint8Array(l)}function I7e(t){var e="",r=0,n,i,a=t.length,s=mD;for(n=0;n>18&63],e+=s[r>>12&63],e+=s[r>>6&63],e+=s[r&63]),r=(r<<8)+t[n];return i=a%3,i===0?(e+=s[r>>18&63],e+=s[r>>12&63],e+=s[r>>6&63],e+=s[r&63]):i===2?(e+=s[r>>10&63],e+=s[r>>4&63],e+=s[r<<2&63],e+=s[64]):i===1&&(e+=s[r>>2&63],e+=s[r<<4&63],e+=s[64],e+=s[64]),e}function O7e(t){return Object.prototype.toString.call(t)==="[object Uint8Array]"}function $7e(t){if(t===null)return!0;var e=[],r,n,i,a,s,l=t;for(r=0,n=l.length;r>10)+55296,(t-65536&1023)+56320)}function iAe(t,e){this.input=t,this.filename=e.filename||null,this.schema=e.schema||bj,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=t.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function Aj(t,e){var r={name:t.filename,buffer:t.input.slice(0,-1),position:t.position,line:t.line,column:t.position-t.lineStart};return r.snippet=qCe(r),new Rs(e,r)}function Qt(t,e){throw Aj(t,e)}function Aw(t,e){t.onWarning&&t.onWarning.call(null,Aj(t,e))}function Hh(t,e,r,n){var i,a,s,l;if(e1&&(t.result+=zi.repeat(` -`,e-1))}function aAe(t,e,r){var n,i,a,s,l,u,h,f,d=t.kind,p=t.result,m;if(m=t.input.charCodeAt(t.position),Ns(m)||fm(m)||m===35||m===38||m===42||m===33||m===124||m===62||m===39||m===34||m===37||m===64||m===96||(m===63||m===45)&&(i=t.input.charCodeAt(t.position+1),Ns(i)||r&&fm(i)))return!1;for(t.kind="scalar",t.result="",a=s=t.position,l=!1;m!==0;){if(m===58){if(i=t.input.charCodeAt(t.position+1),Ns(i)||r&&fm(i))break}else if(m===35){if(n=t.input.charCodeAt(t.position-1),Ns(n))break}else{if(t.position===t.lineStart&&Lw(t)||r&&fm(m))break;if(mc(m))if(u=t.line,h=t.lineStart,f=t.lineIndent,Ai(t,!1,-1),t.lineIndent>=e){l=!0,m=t.input.charCodeAt(t.position);continue}else{t.position=s,t.line=u,t.lineStart=h,t.lineIndent=f;break}}l&&(Hh(t,a,s,!1),yD(t,t.line-u),a=s=t.position,l=!1),$d(m)||(s=t.position+1),m=t.input.charCodeAt(++t.position)}return Hh(t,a,s,!1),t.result?!0:(t.kind=d,t.result=p,!1)}function sAe(t,e){var r,n,i;if(r=t.input.charCodeAt(t.position),r!==39)return!1;for(t.kind="scalar",t.result="",t.position++,n=i=t.position;(r=t.input.charCodeAt(t.position))!==0;)if(r===39)if(Hh(t,n,t.position,!0),r=t.input.charCodeAt(++t.position),r===39)n=t.position,t.position++,i=t.position;else return!0;else mc(r)?(Hh(t,n,i,!0),yD(t,Ai(t,!1,e)),n=i=t.position):t.position===t.lineStart&&Lw(t)?Qt(t,"unexpected end of the document within a single quoted scalar"):(t.position++,i=t.position);Qt(t,"unexpected end of the stream within a single quoted scalar")}function oAe(t,e){var r,n,i,a,s,l;if(l=t.input.charCodeAt(t.position),l!==34)return!1;for(t.kind="scalar",t.result="",t.position++,r=n=t.position;(l=t.input.charCodeAt(t.position))!==0;){if(l===34)return Hh(t,r,t.position,!0),t.position++,!0;if(l===92){if(Hh(t,r,t.position,!0),l=t.input.charCodeAt(++t.position),mc(l))Ai(t,!1,e);else if(l<256&&Sj[l])t.result+=Cj[l],t.position++;else if((s=tAe(l))>0){for(i=s,a=0;i>0;i--)l=t.input.charCodeAt(++t.position),(s=eAe(l))>=0?a=(a<<4)+s:Qt(t,"expected hexadecimal character");t.result+=nAe(a),t.position++}else Qt(t,"unknown escape sequence");r=n=t.position}else mc(l)?(Hh(t,r,n,!0),yD(t,Ai(t,!1,e)),r=n=t.position):t.position===t.lineStart&&Lw(t)?Qt(t,"unexpected end of the document within a double quoted scalar"):(t.position++,n=t.position)}Qt(t,"unexpected end of the stream within a double quoted scalar")}function lAe(t,e){var r=!0,n,i,a,s=t.tag,l,u=t.anchor,h,f,d,p,m,g=Object.create(null),y,v,x,b;if(b=t.input.charCodeAt(t.position),b===91)f=93,m=!1,l=[];else if(b===123)f=125,m=!0,l={};else return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=l),b=t.input.charCodeAt(++t.position);b!==0;){if(Ai(t,!0,e),b=t.input.charCodeAt(t.position),b===f)return t.position++,t.tag=s,t.anchor=u,t.kind=m?"mapping":"sequence",t.result=l,!0;r?b===44&&Qt(t,"expected the node content, but found ','"):Qt(t,"missed comma between flow collection entries"),v=y=x=null,d=p=!1,b===63&&(h=t.input.charCodeAt(t.position+1),Ns(h)&&(d=p=!0,t.position++,Ai(t,!0,e))),n=t.line,i=t.lineStart,a=t.position,pm(t,e,Sw,!1,!0),v=t.tag,y=t.result,Ai(t,!0,e),b=t.input.charCodeAt(t.position),(p||t.line===n)&&b===58&&(d=!0,b=t.input.charCodeAt(++t.position),Ai(t,!0,e),pm(t,e,Sw,!1,!0),x=t.result),m?dm(t,l,g,v,y,x,n,i,a):d?l.push(dm(t,null,g,v,y,x,n,i,a)):l.push(y),Ai(t,!0,e),b=t.input.charCodeAt(t.position),b===44?(r=!0,b=t.input.charCodeAt(++t.position)):r=!1}Qt(t,"unexpected end of the stream within a flow collection")}function cAe(t,e){var r,n,i=cD,a=!1,s=!1,l=e,u=0,h=!1,f,d;if(d=t.input.charCodeAt(t.position),d===124)n=!1;else if(d===62)n=!0;else return!1;for(t.kind="scalar",t.result="";d!==0;)if(d=t.input.charCodeAt(++t.position),d===43||d===45)cD===i?i=d===43?tj:K7e:Qt(t,"repeat of a chomping mode identifier");else if((f=rAe(d))>=0)f===0?Qt(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):s?Qt(t,"repeat of an indentation width identifier"):(l=e+f-1,s=!0);else break;if($d(d)){do d=t.input.charCodeAt(++t.position);while($d(d));if(d===35)do d=t.input.charCodeAt(++t.position);while(!mc(d)&&d!==0)}for(;d!==0;){for(gD(t),t.lineIndent=0,d=t.input.charCodeAt(t.position);(!s||t.lineIndentl&&(l=t.lineIndent),mc(d)){u++;continue}if(t.lineIndente)&&u!==0)Qt(t,"bad indentation of a sequence entry");else if(t.lineIndente)&&(v&&(s=t.line,l=t.lineStart,u=t.position),pm(t,e,Cw,!0,i)&&(v?g=t.result:y=t.result),v||(dm(t,d,p,m,g,y,s,l,u),m=g=y=null),Ai(t,!0,-1),b=t.input.charCodeAt(t.position)),(t.line===a||t.lineIndent>e)&&b!==0)Qt(t,"bad indentation of a mapping entry");else if(t.lineIndente?u=1:t.lineIndent===e?u=0:t.lineIndente?u=1:t.lineIndent===e?u=0:t.lineIndent tag; it should be "scalar", not "'+t.kind+'"'),d=0,p=t.implicitTypes.length;d"),t.result!==null&&g.kind!==t.kind&&Qt(t,"unacceptable node kind for !<"+t.tag+'> tag; it should be "'+g.kind+'", not "'+t.kind+'"'),g.resolve(t.result,t.tag)?(t.result=g.construct(t.result,t.tag),t.anchor!==null&&(t.anchorMap[t.anchor]=t.result)):Qt(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")}return t.listener!==null&&t.listener("close",t),t.tag!==null||t.anchor!==null||f}function pAe(t){var e=t.position,r,n,i,a=!1,s;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap=Object.create(null),t.anchorMap=Object.create(null);(s=t.input.charCodeAt(t.position))!==0&&(Ai(t,!0,-1),s=t.input.charCodeAt(t.position),!(t.lineIndent>0||s!==37));){for(a=!0,s=t.input.charCodeAt(++t.position),r=t.position;s!==0&&!Ns(s);)s=t.input.charCodeAt(++t.position);for(n=t.input.slice(r,t.position),i=[],n.length<1&&Qt(t,"directive name must not be less than one character in length");s!==0;){for(;$d(s);)s=t.input.charCodeAt(++t.position);if(s===35){do s=t.input.charCodeAt(++t.position);while(s!==0&&!mc(s));break}if(mc(s))break;for(r=t.position;s!==0&&!Ns(s);)s=t.input.charCodeAt(++t.position);i.push(t.input.slice(r,t.position))}s!==0&&gD(t),Wh.call(ij,n)?ij[n](t,n,i):Aw(t,'unknown document directive "'+n+'"')}if(Ai(t,!0,-1),t.lineIndent===0&&t.input.charCodeAt(t.position)===45&&t.input.charCodeAt(t.position+1)===45&&t.input.charCodeAt(t.position+2)===45?(t.position+=3,Ai(t,!0,-1)):a&&Qt(t,"directives end mark is expected"),pm(t,t.lineIndent-1,Cw,!1,!0),Ai(t,!0,-1),t.checkLineBreaks&&Z7e.test(t.input.slice(e,t.position))&&Aw(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&Lw(t)){t.input.charCodeAt(t.position)===46&&(t.position+=3,Ai(t,!0,-1));return}if(t.position"u"&&(r=e,e=null);var n=_j(t,r);if(typeof e!="function")return n;for(var i=0,a=n.length;il&&(a=" ... ",e=n-l+a.length),r-n>l&&(s=" ...",r=n+l-s.length),{str:a+t.slice(e,r).replace(/\t/g,"\u2192")+s,pos:n-e+a.length}}function $9(t,e){return Gi.repeat(" ",e-t.length)+t}function wAe(t,e){if(e=Object.create(e||null),!t.buffer)return null;e.maxLength||(e.maxLength=79),typeof e.indent!="number"&&(e.indent=1),typeof e.linesBefore!="number"&&(e.linesBefore=3),typeof e.linesAfter!="number"&&(e.linesAfter=2);for(var r=/\r?\n|\r|\0/g,n=[0],i=[],a,s=-1;a=r.exec(t.buffer);)i.push(a.index),n.push(a.index+a[0].length),t.position<=a.index&&s<0&&(s=n.length-2);s<0&&(s=n.length-1);var l="",u,h,f=Math.min(t.line+e.linesAfter,i.length).toString().length,d=e.maxLength-(e.indent+f+3);for(u=1;u<=e.linesBefore&&!(s-u<0);u++)h=F9(t.buffer,n[s-u],i[s-u],t.position-(n[s]-n[s-u]),d),l=Gi.repeat(" ",e.indent)+$9((t.line-u+1).toString(),f)+" | "+h.str+` +`+l;for(h=F9(t.buffer,n[s],i[s],t.position,d),l+=Gi.repeat(" ",e.indent)+$9((t.line+1).toString(),f)+" | "+h.str+` +`,l+=Gi.repeat("-",e.indent+f+3+h.pos)+`^ +`,u=1;u<=e.linesAfter&&!(s+u>=i.length);u++)h=F9(t.buffer,n[s+u],i[s+u],t.position-(n[s]-n[s+u]),d),l+=Gi.repeat(" ",e.indent)+$9((t.line+u+1).toString(),f)+" | "+h.str+` +`;return l.replace(/\n$/,"")}function CAe(t){var e={};return t!==null&&Object.keys(t).forEach(function(r){t[r].forEach(function(n){e[String(n)]=r})}),e}function AAe(t,e){if(e=e||{},Object.keys(e).forEach(function(r){if(EAe.indexOf(r)===-1)throw new Is('Unknown option "'+r+'" is met in definition of "'+t+'" YAML type.')}),this.options=e,this.tag=t,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(r){return r},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.representName=e.representName||null,this.defaultStyle=e.defaultStyle||null,this.multi=e.multi||!1,this.styleAliases=CAe(e.styleAliases||null),SAe.indexOf(this.kind)===-1)throw new Is('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')}function hK(t,e){var r=[];return t[e].forEach(function(n){var i=r.length;r.forEach(function(a,s){a.tag===n.tag&&a.kind===n.kind&&a.multi===n.multi&&(i=s)}),r[i]=n}),r}function _Ae(){var t={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}},e,r;function n(i){i.multi?(t.multi[i.kind].push(i),t.multi.fallback.push(i)):t[i.kind][i.tag]=t.fallback[i.tag]=i}for(o(n,"collectType"),e=0,r=arguments.length;e=0&&(e=e.slice(1)),e===".inf"?r===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:e===".nan"?NaN:r*parseFloat(e,10)}function JAe(t,e){var r;if(isNaN(t))switch(e){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===t)switch(e){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===t)switch(e){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(Gi.isNegativeZero(t))return"-0.0";return r=t.toString(10),ZAe.test(r)?r.replace("e",".e"):r}function e8e(t){return Object.prototype.toString.call(t)==="[object Number]"&&(t%1!==0||Gi.isNegativeZero(t))}function n8e(t){return t===null?!1:DK.exec(t)!==null||LK.exec(t)!==null}function i8e(t){var e,r,n,i,a,s,l,u=0,h=null,f,d,p;if(e=DK.exec(t),e===null&&(e=LK.exec(t)),e===null)throw new Error("Date resolve error");if(r=+e[1],n=+e[2]-1,i=+e[3],!e[4])return new Date(Date.UTC(r,n,i));if(a=+e[4],s=+e[5],l=+e[6],e[7]){for(u=e[7].slice(0,3);u.length<3;)u+="0";u=+u}return e[9]&&(f=+e[10],d=+(e[11]||0),h=(f*60+d)*6e4,e[9]==="-"&&(h=-h)),p=new Date(Date.UTC(r,n,i,a,s,l,u)),h&&p.setTime(p.getTime()-h),p}function a8e(t){return t.toISOString()}function o8e(t){return t==="<<"||t===null}function c8e(t){if(t===null)return!1;var e,r,n=0,i=t.length,a=q9;for(r=0;r64)){if(e<0)return!1;n+=6}return n%8===0}function u8e(t){var e,r,n=t.replace(/[\r\n=]/g,""),i=n.length,a=q9,s=0,l=[];for(e=0;e>16&255),l.push(s>>8&255),l.push(s&255)),s=s<<6|a.indexOf(n.charAt(e));return r=i%4*6,r===0?(l.push(s>>16&255),l.push(s>>8&255),l.push(s&255)):r===18?(l.push(s>>10&255),l.push(s>>2&255)):r===12&&l.push(s>>4&255),new Uint8Array(l)}function h8e(t){var e="",r=0,n,i,a=t.length,s=q9;for(n=0;n>18&63],e+=s[r>>12&63],e+=s[r>>6&63],e+=s[r&63]),r=(r<<8)+t[n];return i=a%3,i===0?(e+=s[r>>18&63],e+=s[r>>12&63],e+=s[r>>6&63],e+=s[r&63]):i===2?(e+=s[r>>10&63],e+=s[r>>4&63],e+=s[r<<2&63],e+=s[64]):i===1&&(e+=s[r>>2&63],e+=s[r<<4&63],e+=s[64],e+=s[64]),e}function f8e(t){return Object.prototype.toString.call(t)==="[object Uint8Array]"}function g8e(t){if(t===null)return!0;var e=[],r,n,i,a,s,l=t;for(r=0,n=l.length;r>10)+55296,(t-65536&1023)+56320)}function O8e(t,e){this.input=t,this.filename=e.filename||null,this.schema=e.schema||RK,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=t.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function FK(t,e){var r={name:t.filename,buffer:t.input.slice(0,-1),position:t.position,line:t.line,column:t.position-t.lineStart};return r.snippet=kAe(r),new Is(e,r)}function Qt(t,e){throw FK(t,e)}function NT(t,e){t.onWarning&&t.onWarning.call(null,FK(t,e))}function qh(t,e,r,n){var i,a,s,l;if(e1&&(t.result+=Gi.repeat(` +`,e-1))}function P8e(t,e,r){var n,i,a,s,l,u,h,f,d=t.kind,p=t.result,m;if(m=t.input.charCodeAt(t.position),Os(m)||ym(m)||m===35||m===38||m===42||m===33||m===124||m===62||m===39||m===34||m===37||m===64||m===96||(m===63||m===45)&&(i=t.input.charCodeAt(t.position+1),Os(i)||r&&ym(i)))return!1;for(t.kind="scalar",t.result="",a=s=t.position,l=!1;m!==0;){if(m===58){if(i=t.input.charCodeAt(t.position+1),Os(i)||r&&ym(i))break}else if(m===35){if(n=t.input.charCodeAt(t.position-1),Os(n))break}else{if(t.position===t.lineStart&&OT(t)||r&&ym(m))break;if(vc(m))if(u=t.line,h=t.lineStart,f=t.lineIndent,_i(t,!1,-1),t.lineIndent>=e){l=!0,m=t.input.charCodeAt(t.position);continue}else{t.position=s,t.line=u,t.lineStart=h,t.lineIndent=f;break}}l&&(qh(t,a,s,!1),X9(t,t.line-u),a=s=t.position,l=!1),Gd(m)||(s=t.position+1),m=t.input.charCodeAt(++t.position)}return qh(t,a,s,!1),t.result?!0:(t.kind=d,t.result=p,!1)}function B8e(t,e){var r,n,i;if(r=t.input.charCodeAt(t.position),r!==39)return!1;for(t.kind="scalar",t.result="",t.position++,n=i=t.position;(r=t.input.charCodeAt(t.position))!==0;)if(r===39)if(qh(t,n,t.position,!0),r=t.input.charCodeAt(++t.position),r===39)n=t.position,t.position++,i=t.position;else return!0;else vc(r)?(qh(t,n,i,!0),X9(t,_i(t,!1,e)),n=i=t.position):t.position===t.lineStart&&OT(t)?Qt(t,"unexpected end of the document within a single quoted scalar"):(t.position++,i=t.position);Qt(t,"unexpected end of the stream within a single quoted scalar")}function F8e(t,e){var r,n,i,a,s,l;if(l=t.input.charCodeAt(t.position),l!==34)return!1;for(t.kind="scalar",t.result="",t.position++,r=n=t.position;(l=t.input.charCodeAt(t.position))!==0;){if(l===34)return qh(t,r,t.position,!0),t.position++,!0;if(l===92){if(qh(t,r,t.position,!0),l=t.input.charCodeAt(++t.position),vc(l))_i(t,!1,e);else if(l<256&&PK[l])t.result+=BK[l],t.position++;else if((s=N8e(l))>0){for(i=s,a=0;i>0;i--)l=t.input.charCodeAt(++t.position),(s=R8e(l))>=0?a=(a<<4)+s:Qt(t,"expected hexadecimal character");t.result+=I8e(a),t.position++}else Qt(t,"unknown escape sequence");r=n=t.position}else vc(l)?(qh(t,r,n,!0),X9(t,_i(t,!1,e)),r=n=t.position):t.position===t.lineStart&&OT(t)?Qt(t,"unexpected end of the document within a double quoted scalar"):(t.position++,n=t.position)}Qt(t,"unexpected end of the stream within a double quoted scalar")}function $8e(t,e){var r=!0,n,i,a,s=t.tag,l,u=t.anchor,h,f,d,p,m,g=Object.create(null),y,v,x,b;if(b=t.input.charCodeAt(t.position),b===91)f=93,m=!1,l=[];else if(b===123)f=125,m=!0,l={};else return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=l),b=t.input.charCodeAt(++t.position);b!==0;){if(_i(t,!0,e),b=t.input.charCodeAt(t.position),b===f)return t.position++,t.tag=s,t.anchor=u,t.kind=m?"mapping":"sequence",t.result=l,!0;r?b===44&&Qt(t,"expected the node content, but found ','"):Qt(t,"missed comma between flow collection entries"),v=y=x=null,d=p=!1,b===63&&(h=t.input.charCodeAt(t.position+1),Os(h)&&(d=p=!0,t.position++,_i(t,!0,e))),n=t.line,i=t.lineStart,a=t.position,xm(t,e,LT,!1,!0),v=t.tag,y=t.result,_i(t,!0,e),b=t.input.charCodeAt(t.position),(p||t.line===n)&&b===58&&(d=!0,b=t.input.charCodeAt(++t.position),_i(t,!0,e),xm(t,e,LT,!1,!0),x=t.result),m?vm(t,l,g,v,y,x,n,i,a):d?l.push(vm(t,null,g,v,y,x,n,i,a)):l.push(y),_i(t,!0,e),b=t.input.charCodeAt(t.position),b===44?(r=!0,b=t.input.charCodeAt(++t.position)):r=!1}Qt(t,"unexpected end of the stream within a flow collection")}function z8e(t,e){var r,n,i=z9,a=!1,s=!1,l=e,u=0,h=!1,f,d;if(d=t.input.charCodeAt(t.position),d===124)n=!1;else if(d===62)n=!0;else return!1;for(t.kind="scalar",t.result="";d!==0;)if(d=t.input.charCodeAt(++t.position),d===43||d===45)z9===i?i=d===43?fK:A8e:Qt(t,"repeat of a chomping mode identifier");else if((f=M8e(d))>=0)f===0?Qt(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):s?Qt(t,"repeat of an indentation width identifier"):(l=e+f-1,s=!0);else break;if(Gd(d)){do d=t.input.charCodeAt(++t.position);while(Gd(d));if(d===35)do d=t.input.charCodeAt(++t.position);while(!vc(d)&&d!==0)}for(;d!==0;){for(Y9(t),t.lineIndent=0,d=t.input.charCodeAt(t.position);(!s||t.lineIndentl&&(l=t.lineIndent),vc(d)){u++;continue}if(t.lineIndente)&&u!==0)Qt(t,"bad indentation of a sequence entry");else if(t.lineIndente)&&(v&&(s=t.line,l=t.lineStart,u=t.position),xm(t,e,RT,!0,i)&&(v?g=t.result:y=t.result),v||(vm(t,d,p,m,g,y,s,l,u),m=g=y=null),_i(t,!0,-1),b=t.input.charCodeAt(t.position)),(t.line===a||t.lineIndent>e)&&b!==0)Qt(t,"bad indentation of a mapping entry");else if(t.lineIndente?u=1:t.lineIndent===e?u=0:t.lineIndente?u=1:t.lineIndent===e?u=0:t.lineIndent tag; it should be "scalar", not "'+t.kind+'"'),d=0,p=t.implicitTypes.length;d"),t.result!==null&&g.kind!==t.kind&&Qt(t,"unacceptable node kind for !<"+t.tag+'> tag; it should be "'+g.kind+'", not "'+t.kind+'"'),g.resolve(t.result,t.tag)?(t.result=g.construct(t.result,t.tag),t.anchor!==null&&(t.anchorMap[t.anchor]=t.result)):Qt(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")}return t.listener!==null&&t.listener("close",t),t.tag!==null||t.anchor!==null||f}function W8e(t){var e=t.position,r,n,i,a=!1,s;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap=Object.create(null),t.anchorMap=Object.create(null);(s=t.input.charCodeAt(t.position))!==0&&(_i(t,!0,-1),s=t.input.charCodeAt(t.position),!(t.lineIndent>0||s!==37));){for(a=!0,s=t.input.charCodeAt(++t.position),r=t.position;s!==0&&!Os(s);)s=t.input.charCodeAt(++t.position);for(n=t.input.slice(r,t.position),i=[],n.length<1&&Qt(t,"directive name must not be less than one character in length");s!==0;){for(;Gd(s);)s=t.input.charCodeAt(++t.position);if(s===35){do s=t.input.charCodeAt(++t.position);while(s!==0&&!vc(s));break}if(vc(s))break;for(r=t.position;s!==0&&!Os(s);)s=t.input.charCodeAt(++t.position);i.push(t.input.slice(r,t.position))}s!==0&&Y9(t),Yh.call(mK,n)?mK[n](t,n,i):NT(t,'unknown document directive "'+n+'"')}if(_i(t,!0,-1),t.lineIndent===0&&t.input.charCodeAt(t.position)===45&&t.input.charCodeAt(t.position+1)===45&&t.input.charCodeAt(t.position+2)===45?(t.position+=3,_i(t,!0,-1)):a&&Qt(t,"directives end mark is expected"),xm(t,t.lineIndent-1,RT,!1,!0),_i(t,!0,-1),t.checkLineBreaks&&D8e.test(t.input.slice(e,t.position))&&NT(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&OT(t)){t.input.charCodeAt(t.position)===46&&(t.position+=3,_i(t,!0,-1));return}if(t.position"u"&&(r=e,e=null);var n=$K(t,r);if(typeof e!="function")return n;for(var i=0,a=n.length;i=55296&&r<=56319&&e+1=56320&&n<=57343)?(r-55296)*1024+n-56320+65536:r}function Bj(t){var e=/^\n* /;return e.test(t)}function HAe(t,e,r,n,i,a,s,l){var u,h=0,f=null,d=!1,p=!1,m=n!==-1,g=-1,y=VAe(d2(t,0))&&UAe(d2(t,t.length-1));if(e||s)for(u=0;u=65536?u+=2:u++){if(h=d2(t,u),!y2(h))return hm;y=y&&cj(h,f,l),f=h}else{for(u=0;u=65536?u+=2:u++){if(h=d2(t,u),h===m2)d=!0,m&&(p=p||u-g-1>n&&t[g+1]!==" ",g=u);else if(!y2(h))return hm;y=y&&cj(h,f,l),f=h}p=p||m&&u-g-1>n&&t[g+1]!==" "}return!d&&!p?y&&!s&&!i(t)?Fj:a===g2?hm:dD:r>9&&Bj(t)?hm:s?a===g2?hm:dD:p?zj:$j}function WAe(t,e,r,n,i){t.dump=function(){if(e.length===0)return t.quotingType===g2?'""':"''";if(!t.noCompatMode&&(OAe.indexOf(e)!==-1||PAe.test(e)))return t.quotingType===g2?'"'+e+'"':"'"+e+"'";var a=t.indent*Math.max(1,r),s=t.lineWidth===-1?-1:Math.max(Math.min(t.lineWidth,40),t.lineWidth-a),l=n||t.flowLevel>-1&&r>=t.flowLevel;function u(h){return GAe(t,h)}switch(o(u,"testAmbiguity"),HAe(e,l,t.indent,s,u,t.quotingType,t.forceQuotes&&!n,i)){case Fj:return e;case dD:return"'"+e.replace(/'/g,"''")+"'";case $j:return"|"+uj(e,t.indent)+hj(oj(e,a));case zj:return">"+uj(e,t.indent)+hj(oj(qAe(e,s),a));case hm:return'"'+YAe(e)+'"';default:throw new Rs("impossible error: invalid scalar style")}}()}function uj(t,e){var r=Bj(t)?String(e):"",n=t[t.length-1]===` +`&&(a+=r),a+=s;return a}function U9(t,e){return` +`+Gi.repeat(" ",t.indent*e)}function v_e(t,e){var r,n,i;for(r=0,n=t.implicitTypes.length;r=55296&&r<=56319&&e+1=56320&&n<=57343)?(r-55296)*1024+n-56320+65536:r}function XK(t){var e=/^\n* /;return e.test(t)}function T_e(t,e,r,n,i,a,s,l){var u,h=0,f=null,d=!1,p=!1,m=n!==-1,g=-1,y=x_e(g2(t,0))&&b_e(g2(t,t.length-1));if(e||s)for(u=0;u=65536?u+=2:u++){if(h=g2(t,u),!b2(h))return gm;y=y&&bK(h,f,l),f=h}else{for(u=0;u=65536?u+=2:u++){if(h=g2(t,u),h===v2)d=!0,m&&(p=p||u-g-1>n&&t[g+1]!==" ",g=u);else if(!b2(h))return gm;y=y&&bK(h,f,l),f=h}p=p||m&&u-g-1>n&&t[g+1]!==" "}return!d&&!p?y&&!s&&!i(t)?jK:a===x2?gm:H9:r>9&&XK(t)?gm:s?a===x2?gm:H9:p?QK:KK}function w_e(t,e,r,n,i){t.dump=function(){if(e.length===0)return t.quotingType===x2?'""':"''";if(!t.noCompatMode&&(f_e.indexOf(e)!==-1||d_e.test(e)))return t.quotingType===x2?'"'+e+'"':"'"+e+"'";var a=t.indent*Math.max(1,r),s=t.lineWidth===-1?-1:Math.max(Math.min(t.lineWidth,40),t.lineWidth-a),l=n||t.flowLevel>-1&&r>=t.flowLevel;function u(h){return v_e(t,h)}switch(o(u,"testAmbiguity"),T_e(e,l,t.indent,s,u,t.quotingType,t.forceQuotes&&!n,i)){case jK:return e;case H9:return"'"+e.replace(/'/g,"''")+"'";case KK:return"|"+TK(e,t.indent)+wK(vK(e,a));case QK:return">"+TK(e,t.indent)+wK(vK(k_e(e,s),a));case gm:return'"'+E_e(e)+'"';default:throw new Is("impossible error: invalid scalar style")}}()}function TK(t,e){var r=XK(t)?String(e):"",n=t[t.length-1]===` `,i=n&&(t[t.length-2]===` `||t===` `),a=i?"+":n?"":"-";return r+a+` -`}function hj(t){return t[t.length-1]===` -`?t.slice(0,-1):t}function qAe(t,e){for(var r=/(\n+)([^\n]*)/g,n=function(){var h=t.indexOf(` -`);return h=h!==-1?h:t.length,r.lastIndex=h,fj(t.slice(0,h),e)}(),i=t[0]===` +`}function wK(t){return t[t.length-1]===` +`?t.slice(0,-1):t}function k_e(t,e){for(var r=/(\n+)([^\n]*)/g,n=function(){var h=t.indexOf(` +`);return h=h!==-1?h:t.length,r.lastIndex=h,kK(t.slice(0,h),e)}(),i=t[0]===` `||t[0]===" ",a,s;s=r.exec(t);){var l=s[1],u=s[2];a=u[0]===" ",n+=l+(!i&&!a&&u!==""?` -`:"")+fj(u,e),i=a}return n}function fj(t,e){if(t===""||t[0]===" ")return t;for(var r=/ [^ ]/g,n,i=0,a,s=0,l=0,u="";n=r.exec(t);)l=n.index,l-i>e&&(a=s>i?s:l,u+=` +`:"")+kK(u,e),i=a}return n}function kK(t,e){if(t===""||t[0]===" ")return t;for(var r=/ [^ ]/g,n,i=0,a,s=0,l=0,u="";n=r.exec(t);)l=n.index,l-i>e&&(a=s>i?s:l,u+=` `+t.slice(i,a),i=a+1),s=l;return u+=` `,t.length-i>e&&s>i?u+=t.slice(i,s)+` -`+t.slice(s+1):u+=t.slice(i),u.slice(1)}function YAe(t){for(var e="",r=0,n,i=0;i=65536?i+=2:i++)r=d2(t,i),n=Da[r],!n&&y2(r)?(e+=t[i],r>=65536&&(e+=t[i+1])):e+=n||FAe(r);return e}function XAe(t,e,r){var n="",i=t.tag,a,s,l;for(a=0,s=r.length;a"u"&&Ru(t,e,null,!1,!1))&&(n!==""&&(n+=","+(t.condenseFlow?"":" ")),n+=t.dump);t.tag=i,t.dump="["+n+"]"}function dj(t,e,r,n){var i="",a=t.tag,s,l,u;for(s=0,l=r.length;s"u"&&Ru(t,e+1,null,!0,!0,!1,!0))&&((!n||i!=="")&&(i+=fD(t,e)),t.dump&&m2===t.dump.charCodeAt(0)?i+="-":i+="- ",i+=t.dump);t.tag=a,t.dump=i||"[]"}function jAe(t,e,r){var n="",i=t.tag,a=Object.keys(r),s,l,u,h,f;for(s=0,l=a.length;s1024&&(f+="? "),f+=t.dump+(t.condenseFlow?'"':"")+":"+(t.condenseFlow?"":" "),Ru(t,e,h,!1,!1)&&(f+=t.dump,n+=f));t.tag=i,t.dump="{"+n+"}"}function KAe(t,e,r,n){var i="",a=t.tag,s=Object.keys(r),l,u,h,f,d,p;if(t.sortKeys===!0)s.sort();else if(typeof t.sortKeys=="function")s.sort(t.sortKeys);else if(t.sortKeys)throw new Rs("sortKeys must be a boolean or a function");for(l=0,u=s.length;l1024,d&&(t.dump&&m2===t.dump.charCodeAt(0)?p+="?":p+="? "),p+=t.dump,d&&(p+=fD(t,e)),Ru(t,e+1,f,!0,d)&&(t.dump&&m2===t.dump.charCodeAt(0)?p+=":":p+=": ",p+=t.dump,i+=p));t.tag=a,t.dump=i||"{}"}function pj(t,e,r){var n,i,a,s,l,u;for(i=r?t.explicitTypes:t.implicitTypes,a=0,s=i.length;a tag resolver accepts not "'+u+'" style');t.dump=n}return!0}return!1}function Ru(t,e,r,n,i,a,s){t.tag=null,t.dump=r,pj(t,r,!1)||pj(t,r,!0);var l=Lj.call(t.dump),u=n,h;n&&(n=t.flowLevel<0||t.flowLevel>e);var f=l==="[object Object]"||l==="[object Array]",d,p;if(f&&(d=t.duplicates.indexOf(r),p=d!==-1),(t.tag!==null&&t.tag!=="?"||p||t.indent!==2&&e>0)&&(i=!1),p&&t.usedDuplicates[d])t.dump="*ref_"+d;else{if(f&&p&&!t.usedDuplicates[d]&&(t.usedDuplicates[d]=!0),l==="[object Object]")n&&Object.keys(t.dump).length!==0?(KAe(t,e,t.dump,i),p&&(t.dump="&ref_"+d+t.dump)):(jAe(t,e,t.dump),p&&(t.dump="&ref_"+d+" "+t.dump));else if(l==="[object Array]")n&&t.dump.length!==0?(t.noArrayIndent&&!s&&e>0?dj(t,e-1,t.dump,i):dj(t,e,t.dump,i),p&&(t.dump="&ref_"+d+t.dump)):(XAe(t,e,t.dump),p&&(t.dump="&ref_"+d+" "+t.dump));else if(l==="[object String]")t.tag!=="?"&&WAe(t,t.dump,e,a,u);else{if(l==="[object Undefined]")return!1;if(t.skipInvalid)return!1;throw new Rs("unacceptable kind of an object to dump "+l)}t.tag!==null&&t.tag!=="?"&&(h=encodeURI(t.tag[0]==="!"?t.tag.slice(1):t.tag).replace(/!/g,"%21"),t.tag[0]==="!"?h="!"+h:h.slice(0,18)==="tag:yaml.org,2002:"?h="!!"+h.slice(18):h="!<"+h+">",t.dump=h+" "+t.dump)}return!0}function QAe(t,e){var r=[],n=[],i,a;for(pD(t,r,n),i=0,a=n.length;i{"use strict";o(mj,"isNothing");o(ICe,"isObject");o(OCe,"toArray");o(PCe,"extend");o(BCe,"repeat");o(FCe,"isNegativeZero");$Ce=mj,zCe=ICe,GCe=OCe,VCe=BCe,UCe=FCe,HCe=PCe,zi={isNothing:$Ce,isObject:zCe,toArray:GCe,repeat:VCe,isNegativeZero:UCe,extend:HCe};o(gj,"formatError");o(p2,"YAMLException$1");p2.prototype=Object.create(Error.prototype);p2.prototype.constructor=p2;p2.prototype.toString=o(function(e){return this.name+": "+gj(this,e)},"toString");Rs=p2;o(oD,"getLine");o(lD,"padStart");o(WCe,"makeSnippet");qCe=WCe,YCe=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],XCe=["scalar","sequence","mapping"];o(jCe,"compileStyleAliases");o(KCe,"Type$1");_a=KCe;o(ej,"compileList");o(QCe,"compileMap");o(uD,"Schema$1");uD.prototype.extend=o(function(e){var r=[],n=[];if(e instanceof _a)n.push(e);else if(Array.isArray(e))n=n.concat(e);else if(e&&(Array.isArray(e.implicit)||Array.isArray(e.explicit)))e.implicit&&(r=r.concat(e.implicit)),e.explicit&&(n=n.concat(e.explicit));else throw new Rs("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");r.forEach(function(a){if(!(a instanceof _a))throw new Rs("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(a.loadKind&&a.loadKind!=="scalar")throw new Rs("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(a.multi)throw new Rs("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")}),n.forEach(function(a){if(!(a instanceof _a))throw new Rs("Specified list of YAML types (or a single Type object) contains a non-Type object.")});var i=Object.create(uD.prototype);return i.implicit=(this.implicit||[]).concat(r),i.explicit=(this.explicit||[]).concat(n),i.compiledImplicit=ej(i,"implicit"),i.compiledExplicit=ej(i,"explicit"),i.compiledTypeMap=QCe(i.compiledImplicit,i.compiledExplicit),i},"extend");ZCe=uD,JCe=new _a("tag:yaml.org,2002:str",{kind:"scalar",construct:o(function(t){return t!==null?t:""},"construct")}),e7e=new _a("tag:yaml.org,2002:seq",{kind:"sequence",construct:o(function(t){return t!==null?t:[]},"construct")}),t7e=new _a("tag:yaml.org,2002:map",{kind:"mapping",construct:o(function(t){return t!==null?t:{}},"construct")}),r7e=new ZCe({explicit:[JCe,e7e,t7e]});o(n7e,"resolveYamlNull");o(i7e,"constructYamlNull");o(a7e,"isNull");s7e=new _a("tag:yaml.org,2002:null",{kind:"scalar",resolve:n7e,construct:i7e,predicate:a7e,represent:{canonical:o(function(){return"~"},"canonical"),lowercase:o(function(){return"null"},"lowercase"),uppercase:o(function(){return"NULL"},"uppercase"),camelcase:o(function(){return"Null"},"camelcase"),empty:o(function(){return""},"empty")},defaultStyle:"lowercase"});o(o7e,"resolveYamlBoolean");o(l7e,"constructYamlBoolean");o(c7e,"isBoolean");u7e=new _a("tag:yaml.org,2002:bool",{kind:"scalar",resolve:o7e,construct:l7e,predicate:c7e,represent:{lowercase:o(function(t){return t?"true":"false"},"lowercase"),uppercase:o(function(t){return t?"TRUE":"FALSE"},"uppercase"),camelcase:o(function(t){return t?"True":"False"},"camelcase")},defaultStyle:"lowercase"});o(h7e,"isHexCode");o(f7e,"isOctCode");o(d7e,"isDecCode");o(p7e,"resolveYamlInteger");o(m7e,"constructYamlInteger");o(g7e,"isInteger");y7e=new _a("tag:yaml.org,2002:int",{kind:"scalar",resolve:p7e,construct:m7e,predicate:g7e,represent:{binary:o(function(t){return t>=0?"0b"+t.toString(2):"-0b"+t.toString(2).slice(1)},"binary"),octal:o(function(t){return t>=0?"0o"+t.toString(8):"-0o"+t.toString(8).slice(1)},"octal"),decimal:o(function(t){return t.toString(10)},"decimal"),hexadecimal:o(function(t){return t>=0?"0x"+t.toString(16).toUpperCase():"-0x"+t.toString(16).toUpperCase().slice(1)},"hexadecimal")},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),v7e=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");o(x7e,"resolveYamlFloat");o(b7e,"constructYamlFloat");w7e=/^[-+]?[0-9]+e/;o(T7e,"representYamlFloat");o(k7e,"isFloat");E7e=new _a("tag:yaml.org,2002:float",{kind:"scalar",resolve:x7e,construct:b7e,predicate:k7e,represent:T7e,defaultStyle:"lowercase"}),yj=r7e.extend({implicit:[s7e,u7e,y7e,E7e]}),S7e=yj,vj=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),xj=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]))?))?$");o(C7e,"resolveYamlTimestamp");o(A7e,"constructYamlTimestamp");o(_7e,"representYamlTimestamp");D7e=new _a("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:C7e,construct:A7e,instanceOf:Date,represent:_7e});o(L7e,"resolveYamlMerge");R7e=new _a("tag:yaml.org,2002:merge",{kind:"scalar",resolve:L7e}),mD=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= -\r`;o(N7e,"resolveYamlBinary");o(M7e,"constructYamlBinary");o(I7e,"representYamlBinary");o(O7e,"isBinary");P7e=new _a("tag:yaml.org,2002:binary",{kind:"scalar",resolve:N7e,construct:M7e,predicate:O7e,represent:I7e}),B7e=Object.prototype.hasOwnProperty,F7e=Object.prototype.toString;o($7e,"resolveYamlOmap");o(z7e,"constructYamlOmap");G7e=new _a("tag:yaml.org,2002:omap",{kind:"sequence",resolve:$7e,construct:z7e}),V7e=Object.prototype.toString;o(U7e,"resolveYamlPairs");o(H7e,"constructYamlPairs");W7e=new _a("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:U7e,construct:H7e}),q7e=Object.prototype.hasOwnProperty;o(Y7e,"resolveYamlSet");o(X7e,"constructYamlSet");j7e=new _a("tag:yaml.org,2002:set",{kind:"mapping",resolve:Y7e,construct:X7e}),bj=S7e.extend({implicit:[D7e,R7e],explicit:[P7e,G7e,W7e,j7e]}),Wh=Object.prototype.hasOwnProperty,Sw=1,wj=2,Tj=3,Cw=4,cD=1,K7e=2,tj=3,Q7e=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,Z7e=/[\x85\u2028\u2029]/,J7e=/[,\[\]\{\}]/,kj=/^(?:!|!!|![a-z\-]+!)$/i,Ej=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;o(rj,"_class");o(mc,"is_EOL");o($d,"is_WHITE_SPACE");o(Ns,"is_WS_OR_EOL");o(fm,"is_FLOW_INDICATOR");o(eAe,"fromHexCode");o(tAe,"escapedHexLen");o(rAe,"fromDecimalCode");o(nj,"simpleEscapeSequence");o(nAe,"charFromCodepoint");Sj=new Array(256),Cj=new Array(256);for(Fd=0;Fd<256;Fd++)Sj[Fd]=nj(Fd)?1:0,Cj[Fd]=nj(Fd);o(iAe,"State$1");o(Aj,"generateError");o(Qt,"throwError");o(Aw,"throwWarning");ij={YAML:o(function(e,r,n){var i,a,s;e.version!==null&&Qt(e,"duplication of %YAML directive"),n.length!==1&&Qt(e,"YAML directive accepts exactly one argument"),i=/^([0-9]+)\.([0-9]+)$/.exec(n[0]),i===null&&Qt(e,"ill-formed argument of the YAML directive"),a=parseInt(i[1],10),s=parseInt(i[2],10),a!==1&&Qt(e,"unacceptable YAML version of the document"),e.version=n[0],e.checkLineBreaks=s<2,s!==1&&s!==2&&Aw(e,"unsupported YAML version of the document")},"handleYamlDirective"),TAG:o(function(e,r,n){var i,a;n.length!==2&&Qt(e,"TAG directive accepts exactly two arguments"),i=n[0],a=n[1],kj.test(i)||Qt(e,"ill-formed tag handle (first argument) of the TAG directive"),Wh.call(e.tagMap,i)&&Qt(e,'there is a previously declared suffix for "'+i+'" tag handle'),Ej.test(a)||Qt(e,"ill-formed tag prefix (second argument) of the TAG directive");try{a=decodeURIComponent(a)}catch{Qt(e,"tag prefix is malformed: "+a)}e.tagMap[i]=a},"handleTagDirective")};o(Hh,"captureSegment");o(aj,"mergeMappings");o(dm,"storeMappingPair");o(gD,"readLineBreak");o(Ai,"skipSeparationSpace");o(Lw,"testDocumentSeparator");o(yD,"writeFoldedLines");o(aAe,"readPlainScalar");o(sAe,"readSingleQuotedScalar");o(oAe,"readDoubleQuotedScalar");o(lAe,"readFlowCollection");o(cAe,"readBlockScalar");o(sj,"readBlockSequence");o(uAe,"readBlockMapping");o(hAe,"readTagProperty");o(fAe,"readAnchorProperty");o(dAe,"readAlias");o(pm,"composeNode");o(pAe,"readDocument");o(_j,"loadDocuments");o(mAe,"loadAll$1");o(gAe,"load$1");yAe=mAe,vAe=gAe,Dj={loadAll:yAe,load:vAe},Lj=Object.prototype.toString,Rj=Object.prototype.hasOwnProperty,vD=65279,xAe=9,m2=10,bAe=13,wAe=32,TAe=33,kAe=34,hD=35,EAe=37,SAe=38,CAe=39,AAe=42,Nj=44,_Ae=45,_w=58,DAe=61,LAe=62,RAe=63,NAe=64,Mj=91,Ij=93,MAe=96,Oj=123,IAe=124,Pj=125,Da={};Da[0]="\\0";Da[7]="\\a";Da[8]="\\b";Da[9]="\\t";Da[10]="\\n";Da[11]="\\v";Da[12]="\\f";Da[13]="\\r";Da[27]="\\e";Da[34]='\\"';Da[92]="\\\\";Da[133]="\\N";Da[160]="\\_";Da[8232]="\\L";Da[8233]="\\P";OAe=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"],PAe=/^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/;o(BAe,"compileStyleMap");o(FAe,"encodeHex");$Ae=1,g2=2;o(zAe,"State");o(oj,"indentString");o(fD,"generateNextLine");o(GAe,"testImplicitResolving");o(Dw,"isWhitespace");o(y2,"isPrintable");o(lj,"isNsCharOrWhitespace");o(cj,"isPlainSafe");o(VAe,"isPlainSafeFirst");o(UAe,"isPlainSafeLast");o(d2,"codePointAt");o(Bj,"needIndentIndicator");Fj=1,dD=2,$j=3,zj=4,hm=5;o(HAe,"chooseScalarStyle");o(WAe,"writeScalar");o(uj,"blockHeader");o(hj,"dropEndingNewline");o(qAe,"foldString");o(fj,"foldLine");o(YAe,"escapeString");o(XAe,"writeFlowSequence");o(dj,"writeBlockSequence");o(jAe,"writeFlowMapping");o(KAe,"writeBlockMapping");o(pj,"detectType");o(Ru,"writeNode");o(QAe,"getDuplicateReferences");o(pD,"inspectNode");o(ZAe,"dump$1");JAe=ZAe,e8e={dump:JAe};o(xD,"renamed");mm=yj,gm=Dj.load,ZTt=Dj.loadAll,JTt=e8e.dump,ekt=xD("safeLoad","load"),tkt=xD("safeLoadAll","loadAll"),rkt=xD("safeDump","dump")});function kD(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}function qj(t){Gd=t}function nn(t,e=""){let r=typeof t=="string"?t:t.source,n={replace:o((i,a)=>{let s=typeof a=="string"?a:a.source;return s=s.replace(ts.caret,"$1"),r=r.replace(i,s),n},"replace"),getRegex:o(()=>new RegExp(r,e),"getRegex")};return n}function gc(t,e){if(e){if(ts.escapeTest.test(t))return t.replace(ts.escapeReplace,Vj)}else if(ts.escapeTestNoEncode.test(t))return t.replace(ts.escapeReplaceNoEncode,Vj);return t}function Uj(t){try{t=encodeURI(t).replace(ts.percentDecode,"%")}catch{return null}return t}function Hj(t,e){let r=t.replace(ts.findPipe,(a,s,l)=>{let u=!1,h=s;for(;--h>=0&&l[h]==="\\";)u=!u;return u?"|":" |"}),n=r.split(ts.splitPipe),i=0;if(n[0].trim()||n.shift(),n.length>0&&!n.at(-1)?.trim()&&n.pop(),e)if(n.length>e)n.splice(e);else for(;n.length=65536?i+=2:i++)r=g2(t,i),n=Na[r],!n&&b2(r)?(e+=t[i],r>=65536&&(e+=t[i+1])):e+=n||m_e(r);return e}function S_e(t,e,r){var n="",i=t.tag,a,s,l;for(a=0,s=r.length;a"u"&&Ru(t,e,null,!1,!1))&&(n!==""&&(n+=","+(t.condenseFlow?"":" ")),n+=t.dump);t.tag=i,t.dump="["+n+"]"}function EK(t,e,r,n){var i="",a=t.tag,s,l,u;for(s=0,l=r.length;s"u"&&Ru(t,e+1,null,!0,!0,!1,!0))&&((!n||i!=="")&&(i+=U9(t,e)),t.dump&&v2===t.dump.charCodeAt(0)?i+="-":i+="- ",i+=t.dump);t.tag=a,t.dump=i||"[]"}function C_e(t,e,r){var n="",i=t.tag,a=Object.keys(r),s,l,u,h,f;for(s=0,l=a.length;s1024&&(f+="? "),f+=t.dump+(t.condenseFlow?'"':"")+":"+(t.condenseFlow?"":" "),Ru(t,e,h,!1,!1)&&(f+=t.dump,n+=f));t.tag=i,t.dump="{"+n+"}"}function A_e(t,e,r,n){var i="",a=t.tag,s=Object.keys(r),l,u,h,f,d,p;if(t.sortKeys===!0)s.sort();else if(typeof t.sortKeys=="function")s.sort(t.sortKeys);else if(t.sortKeys)throw new Is("sortKeys must be a boolean or a function");for(l=0,u=s.length;l1024,d&&(t.dump&&v2===t.dump.charCodeAt(0)?p+="?":p+="? "),p+=t.dump,d&&(p+=U9(t,e)),Ru(t,e+1,f,!0,d)&&(t.dump&&v2===t.dump.charCodeAt(0)?p+=":":p+=": ",p+=t.dump,i+=p));t.tag=a,t.dump=i||"{}"}function SK(t,e,r){var n,i,a,s,l,u;for(i=r?t.explicitTypes:t.implicitTypes,a=0,s=i.length;a tag resolver accepts not "'+u+'" style');t.dump=n}return!0}return!1}function Ru(t,e,r,n,i,a,s){t.tag=null,t.dump=r,SK(t,r,!1)||SK(t,r,!0);var l=GK.call(t.dump),u=n,h;n&&(n=t.flowLevel<0||t.flowLevel>e);var f=l==="[object Object]"||l==="[object Array]",d,p;if(f&&(d=t.duplicates.indexOf(r),p=d!==-1),(t.tag!==null&&t.tag!=="?"||p||t.indent!==2&&e>0)&&(i=!1),p&&t.usedDuplicates[d])t.dump="*ref_"+d;else{if(f&&p&&!t.usedDuplicates[d]&&(t.usedDuplicates[d]=!0),l==="[object Object]")n&&Object.keys(t.dump).length!==0?(A_e(t,e,t.dump,i),p&&(t.dump="&ref_"+d+t.dump)):(C_e(t,e,t.dump),p&&(t.dump="&ref_"+d+" "+t.dump));else if(l==="[object Array]")n&&t.dump.length!==0?(t.noArrayIndent&&!s&&e>0?EK(t,e-1,t.dump,i):EK(t,e,t.dump,i),p&&(t.dump="&ref_"+d+t.dump)):(S_e(t,e,t.dump),p&&(t.dump="&ref_"+d+" "+t.dump));else if(l==="[object String]")t.tag!=="?"&&w_e(t,t.dump,e,a,u);else{if(l==="[object Undefined]")return!1;if(t.skipInvalid)return!1;throw new Is("unacceptable kind of an object to dump "+l)}t.tag!==null&&t.tag!=="?"&&(h=encodeURI(t.tag[0]==="!"?t.tag.slice(1):t.tag).replace(/!/g,"%21"),t.tag[0]==="!"?h="!"+h:h.slice(0,18)==="tag:yaml.org,2002:"?h="!!"+h.slice(18):h="!<"+h+">",t.dump=h+" "+t.dump)}return!0}function __e(t,e){var r=[],n=[],i,a;for(W9(t,r,n),i=0,a=n.length;i{"use strict";o(CK,"isNothing");o(hAe,"isObject");o(fAe,"toArray");o(dAe,"extend");o(pAe,"repeat");o(mAe,"isNegativeZero");gAe=CK,yAe=hAe,vAe=fAe,xAe=pAe,bAe=mAe,TAe=dAe,Gi={isNothing:gAe,isObject:yAe,toArray:vAe,repeat:xAe,isNegativeZero:bAe,extend:TAe};o(AK,"formatError");o(y2,"YAMLException$1");y2.prototype=Object.create(Error.prototype);y2.prototype.constructor=y2;y2.prototype.toString=o(function(e){return this.name+": "+AK(this,e)},"toString");Is=y2;o(F9,"getLine");o($9,"padStart");o(wAe,"makeSnippet");kAe=wAe,EAe=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],SAe=["scalar","sequence","mapping"];o(CAe,"compileStyleAliases");o(AAe,"Type$1");Ra=AAe;o(hK,"compileList");o(_Ae,"compileMap");o(G9,"Schema$1");G9.prototype.extend=o(function(e){var r=[],n=[];if(e instanceof Ra)n.push(e);else if(Array.isArray(e))n=n.concat(e);else if(e&&(Array.isArray(e.implicit)||Array.isArray(e.explicit)))e.implicit&&(r=r.concat(e.implicit)),e.explicit&&(n=n.concat(e.explicit));else throw new Is("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");r.forEach(function(a){if(!(a instanceof Ra))throw new Is("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(a.loadKind&&a.loadKind!=="scalar")throw new Is("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(a.multi)throw new Is("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")}),n.forEach(function(a){if(!(a instanceof Ra))throw new Is("Specified list of YAML types (or a single Type object) contains a non-Type object.")});var i=Object.create(G9.prototype);return i.implicit=(this.implicit||[]).concat(r),i.explicit=(this.explicit||[]).concat(n),i.compiledImplicit=hK(i,"implicit"),i.compiledExplicit=hK(i,"explicit"),i.compiledTypeMap=_Ae(i.compiledImplicit,i.compiledExplicit),i},"extend");DAe=G9,LAe=new Ra("tag:yaml.org,2002:str",{kind:"scalar",construct:o(function(t){return t!==null?t:""},"construct")}),RAe=new Ra("tag:yaml.org,2002:seq",{kind:"sequence",construct:o(function(t){return t!==null?t:[]},"construct")}),NAe=new Ra("tag:yaml.org,2002:map",{kind:"mapping",construct:o(function(t){return t!==null?t:{}},"construct")}),MAe=new DAe({explicit:[LAe,RAe,NAe]});o(IAe,"resolveYamlNull");o(OAe,"constructYamlNull");o(PAe,"isNull");BAe=new Ra("tag:yaml.org,2002:null",{kind:"scalar",resolve:IAe,construct:OAe,predicate:PAe,represent:{canonical:o(function(){return"~"},"canonical"),lowercase:o(function(){return"null"},"lowercase"),uppercase:o(function(){return"NULL"},"uppercase"),camelcase:o(function(){return"Null"},"camelcase"),empty:o(function(){return""},"empty")},defaultStyle:"lowercase"});o(FAe,"resolveYamlBoolean");o($Ae,"constructYamlBoolean");o(zAe,"isBoolean");GAe=new Ra("tag:yaml.org,2002:bool",{kind:"scalar",resolve:FAe,construct:$Ae,predicate:zAe,represent:{lowercase:o(function(t){return t?"true":"false"},"lowercase"),uppercase:o(function(t){return t?"TRUE":"FALSE"},"uppercase"),camelcase:o(function(t){return t?"True":"False"},"camelcase")},defaultStyle:"lowercase"});o(VAe,"isHexCode");o(UAe,"isOctCode");o(HAe,"isDecCode");o(WAe,"resolveYamlInteger");o(qAe,"constructYamlInteger");o(YAe,"isInteger");XAe=new Ra("tag:yaml.org,2002:int",{kind:"scalar",resolve:WAe,construct:qAe,predicate:YAe,represent:{binary:o(function(t){return t>=0?"0b"+t.toString(2):"-0b"+t.toString(2).slice(1)},"binary"),octal:o(function(t){return t>=0?"0o"+t.toString(8):"-0o"+t.toString(8).slice(1)},"octal"),decimal:o(function(t){return t.toString(10)},"decimal"),hexadecimal:o(function(t){return t>=0?"0x"+t.toString(16).toUpperCase():"-0x"+t.toString(16).toUpperCase().slice(1)},"hexadecimal")},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),jAe=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");o(KAe,"resolveYamlFloat");o(QAe,"constructYamlFloat");ZAe=/^[-+]?[0-9]+e/;o(JAe,"representYamlFloat");o(e8e,"isFloat");t8e=new Ra("tag:yaml.org,2002:float",{kind:"scalar",resolve:KAe,construct:QAe,predicate:e8e,represent:JAe,defaultStyle:"lowercase"}),_K=MAe.extend({implicit:[BAe,GAe,XAe,t8e]}),r8e=_K,DK=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),LK=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]))?))?$");o(n8e,"resolveYamlTimestamp");o(i8e,"constructYamlTimestamp");o(a8e,"representYamlTimestamp");s8e=new Ra("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:n8e,construct:i8e,instanceOf:Date,represent:a8e});o(o8e,"resolveYamlMerge");l8e=new Ra("tag:yaml.org,2002:merge",{kind:"scalar",resolve:o8e}),q9=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= +\r`;o(c8e,"resolveYamlBinary");o(u8e,"constructYamlBinary");o(h8e,"representYamlBinary");o(f8e,"isBinary");d8e=new Ra("tag:yaml.org,2002:binary",{kind:"scalar",resolve:c8e,construct:u8e,predicate:f8e,represent:h8e}),p8e=Object.prototype.hasOwnProperty,m8e=Object.prototype.toString;o(g8e,"resolveYamlOmap");o(y8e,"constructYamlOmap");v8e=new Ra("tag:yaml.org,2002:omap",{kind:"sequence",resolve:g8e,construct:y8e}),x8e=Object.prototype.toString;o(b8e,"resolveYamlPairs");o(T8e,"constructYamlPairs");w8e=new Ra("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:b8e,construct:T8e}),k8e=Object.prototype.hasOwnProperty;o(E8e,"resolveYamlSet");o(S8e,"constructYamlSet");C8e=new Ra("tag:yaml.org,2002:set",{kind:"mapping",resolve:E8e,construct:S8e}),RK=r8e.extend({implicit:[s8e,l8e],explicit:[d8e,v8e,w8e,C8e]}),Yh=Object.prototype.hasOwnProperty,LT=1,NK=2,MK=3,RT=4,z9=1,A8e=2,fK=3,_8e=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,D8e=/[\x85\u2028\u2029]/,L8e=/[,\[\]\{\}]/,IK=/^(?:!|!!|![a-z\-]+!)$/i,OK=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;o(dK,"_class");o(vc,"is_EOL");o(Gd,"is_WHITE_SPACE");o(Os,"is_WS_OR_EOL");o(ym,"is_FLOW_INDICATOR");o(R8e,"fromHexCode");o(N8e,"escapedHexLen");o(M8e,"fromDecimalCode");o(pK,"simpleEscapeSequence");o(I8e,"charFromCodepoint");PK=new Array(256),BK=new Array(256);for(zd=0;zd<256;zd++)PK[zd]=pK(zd)?1:0,BK[zd]=pK(zd);o(O8e,"State$1");o(FK,"generateError");o(Qt,"throwError");o(NT,"throwWarning");mK={YAML:o(function(e,r,n){var i,a,s;e.version!==null&&Qt(e,"duplication of %YAML directive"),n.length!==1&&Qt(e,"YAML directive accepts exactly one argument"),i=/^([0-9]+)\.([0-9]+)$/.exec(n[0]),i===null&&Qt(e,"ill-formed argument of the YAML directive"),a=parseInt(i[1],10),s=parseInt(i[2],10),a!==1&&Qt(e,"unacceptable YAML version of the document"),e.version=n[0],e.checkLineBreaks=s<2,s!==1&&s!==2&&NT(e,"unsupported YAML version of the document")},"handleYamlDirective"),TAG:o(function(e,r,n){var i,a;n.length!==2&&Qt(e,"TAG directive accepts exactly two arguments"),i=n[0],a=n[1],IK.test(i)||Qt(e,"ill-formed tag handle (first argument) of the TAG directive"),Yh.call(e.tagMap,i)&&Qt(e,'there is a previously declared suffix for "'+i+'" tag handle'),OK.test(a)||Qt(e,"ill-formed tag prefix (second argument) of the TAG directive");try{a=decodeURIComponent(a)}catch{Qt(e,"tag prefix is malformed: "+a)}e.tagMap[i]=a},"handleTagDirective")};o(qh,"captureSegment");o(gK,"mergeMappings");o(vm,"storeMappingPair");o(Y9,"readLineBreak");o(_i,"skipSeparationSpace");o(OT,"testDocumentSeparator");o(X9,"writeFoldedLines");o(P8e,"readPlainScalar");o(B8e,"readSingleQuotedScalar");o(F8e,"readDoubleQuotedScalar");o($8e,"readFlowCollection");o(z8e,"readBlockScalar");o(yK,"readBlockSequence");o(G8e,"readBlockMapping");o(V8e,"readTagProperty");o(U8e,"readAnchorProperty");o(H8e,"readAlias");o(xm,"composeNode");o(W8e,"readDocument");o($K,"loadDocuments");o(q8e,"loadAll$1");o(Y8e,"load$1");X8e=q8e,j8e=Y8e,zK={loadAll:X8e,load:j8e},GK=Object.prototype.toString,VK=Object.prototype.hasOwnProperty,j9=65279,K8e=9,v2=10,Q8e=13,Z8e=32,J8e=33,e_e=34,V9=35,t_e=37,r_e=38,n_e=39,i_e=42,UK=44,a_e=45,MT=58,s_e=61,o_e=62,l_e=63,c_e=64,HK=91,WK=93,u_e=96,qK=123,h_e=124,YK=125,Na={};Na[0]="\\0";Na[7]="\\a";Na[8]="\\b";Na[9]="\\t";Na[10]="\\n";Na[11]="\\v";Na[12]="\\f";Na[13]="\\r";Na[27]="\\e";Na[34]='\\"';Na[92]="\\\\";Na[133]="\\N";Na[160]="\\_";Na[8232]="\\L";Na[8233]="\\P";f_e=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"],d_e=/^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/;o(p_e,"compileStyleMap");o(m_e,"encodeHex");g_e=1,x2=2;o(y_e,"State");o(vK,"indentString");o(U9,"generateNextLine");o(v_e,"testImplicitResolving");o(IT,"isWhitespace");o(b2,"isPrintable");o(xK,"isNsCharOrWhitespace");o(bK,"isPlainSafe");o(x_e,"isPlainSafeFirst");o(b_e,"isPlainSafeLast");o(g2,"codePointAt");o(XK,"needIndentIndicator");jK=1,H9=2,KK=3,QK=4,gm=5;o(T_e,"chooseScalarStyle");o(w_e,"writeScalar");o(TK,"blockHeader");o(wK,"dropEndingNewline");o(k_e,"foldString");o(kK,"foldLine");o(E_e,"escapeString");o(S_e,"writeFlowSequence");o(EK,"writeBlockSequence");o(C_e,"writeFlowMapping");o(A_e,"writeBlockMapping");o(SK,"detectType");o(Ru,"writeNode");o(__e,"getDuplicateReferences");o(W9,"inspectNode");o(D_e,"dump$1");L_e=D_e,R_e={dump:L_e};o(K9,"renamed");bm=_K,Tm=zK.load,qSt=zK.loadAll,YSt=R_e.dump,XSt=K9("safeLoad","load"),jSt=K9("safeLoadAll","loadAll"),KSt=K9("safeDump","dump")});function tL(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}function nQ(t){Ud=t}function nn(t,e=""){let r=typeof t=="string"?t:t.source,n={replace:o((i,a)=>{let s=typeof a=="string"?a:a.source;return s=s.replace(ss.caret,"$1"),r=r.replace(i,s),n},"replace"),getRegex:o(()=>new RegExp(r,e),"getRegex")};return n}function xc(t,e){if(e){if(ss.escapeTest.test(t))return t.replace(ss.escapeReplace,JK)}else if(ss.escapeTestNoEncode.test(t))return t.replace(ss.escapeReplaceNoEncode,JK);return t}function eQ(t){try{t=encodeURI(t).replace(ss.percentDecode,"%")}catch{return null}return t}function tQ(t,e){let r=t.replace(ss.findPipe,(a,s,l)=>{let u=!1,h=s;for(;--h>=0&&l[h]==="\\";)u=!u;return u?"|":" |"}),n=r.split(ss.splitPipe),i=0;if(n[0].trim()||n.shift(),n.length>0&&!n.at(-1)?.trim()&&n.pop(),e)if(n.length>e)n.splice(e);else for(;n.length0?-2:-1}function rQ(t,e,r,n,i){let a=e.href,s=e.title||null,l=t[1].replace(i.other.outputLinkReplace,"$1");n.state.inLink=!0;let u={type:t[0].charAt(0)==="!"?"image":"link",raw:r,href:a,title:s,text:l,tokens:n.inlineTokens(l)};return n.state.inLink=!1,u}function fDe(t,e,r){let n=t.match(r.other.indentCodeCompensation);if(n===null)return e;let i=n[1];return e.split(` `).map(a=>{let s=a.match(r.other.beginningSpace);if(s===null)return a;let[l]=s;return l.length>=i.length?a.slice(i.length):a}).join(` -`)}function Jr(t,e){return zd.parse(t,e)}var Gd,b2,ts,t8e,r8e,n8e,T2,i8e,ED,Yj,Xj,a8e,SD,s8e,CD,o8e,l8e,Iw,AD,c8e,jj,u8e,_D,Gj,h8e,f8e,d8e,p8e,Kj,m8e,Ow,DD,Qj,g8e,Zj,y8e,v8e,x8e,Jj,b8e,w8e,eK,T8e,k8e,E8e,S8e,C8e,A8e,_8e,Mw,D8e,tK,rK,L8e,LD,R8e,wD,N8e,Nw,v2,M8e,Vj,vm,Dl,xm,w2,Ll,ym,TD,zd,ikt,akt,skt,okt,lkt,ckt,ukt,nK=N(()=>{"use strict";o(kD,"_getDefaults");Gd=kD();o(qj,"changeDefaults");b2={exec:o(()=>null,"exec")};o(nn,"edit");ts={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceTabs:/^\t+/,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] /,listReplaceTask:/^\[[ xX]\] +/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,unescapeTest:/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:o(t=>new RegExp(`^( {0,3}${t})((?:[ ][^\\n]*)?(?:\\n|$))`),"listItemRegex"),nextBulletRegex:o(t=>new RegExp(`^ {0,${Math.min(3,t-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),"nextBulletRegex"),hrRegex:o(t=>new RegExp(`^ {0,${Math.min(3,t-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),"hrRegex"),fencesBeginRegex:o(t=>new RegExp(`^ {0,${Math.min(3,t-1)}}(?:\`\`\`|~~~)`),"fencesBeginRegex"),headingBeginRegex:o(t=>new RegExp(`^ {0,${Math.min(3,t-1)}}#`),"headingBeginRegex"),htmlBeginRegex:o(t=>new RegExp(`^ {0,${Math.min(3,t-1)}}<(?:[a-z].*>|!--)`,"i"),"htmlBeginRegex")},t8e=/^(?:[ \t]*(?:\n|$))+/,r8e=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,n8e=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,T2=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,i8e=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,ED=/(?:[*+-]|\d{1,9}[.)])/,Yj=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,Xj=nn(Yj).replace(/bull/g,ED).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),a8e=nn(Yj).replace(/bull/g,ED).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),SD=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,s8e=/^[^\n]+/,CD=/(?!\s*\])(?:\\.|[^\[\]\\])+/,o8e=nn(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",CD).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),l8e=nn(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,ED).getRegex(),Iw="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|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",AD=/|$))/,c8e=nn("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))","i").replace("comment",AD).replace("tag",Iw).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),jj=nn(SD).replace("hr",T2).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",Iw).getRegex(),u8e=nn(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",jj).getRegex(),_D={blockquote:u8e,code:r8e,def:o8e,fences:n8e,heading:i8e,hr:T2,html:c8e,lheading:Xj,list:l8e,newline:t8e,paragraph:jj,table:b2,text:s8e},Gj=nn("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",T2).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",Iw).getRegex(),h8e={..._D,lheading:a8e,table:Gj,paragraph:nn(SD).replace("hr",T2).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",Gj).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",Iw).getRegex()},f8e={..._D,html:nn(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",AD).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:b2,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:nn(SD).replace("hr",T2).replace("heading",` *#{1,6} *[^ -]`).replace("lheading",Xj).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},d8e=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,p8e=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,Kj=/^( {2,}|\\)\n(?!\s*$)/,m8e=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\]*?>/g,Jj=/^(?:\*+(?:((?!\*)punct)|[^\s*]))|^_+(?:((?!_)punct)|([^\s_]))/,b8e=nn(Jj,"u").replace(/punct/g,Ow).getRegex(),w8e=nn(Jj,"u").replace(/punct/g,Zj).getRegex(),eK="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",T8e=nn(eK,"gu").replace(/notPunctSpace/g,Qj).replace(/punctSpace/g,DD).replace(/punct/g,Ow).getRegex(),k8e=nn(eK,"gu").replace(/notPunctSpace/g,v8e).replace(/punctSpace/g,y8e).replace(/punct/g,Zj).getRegex(),E8e=nn("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,Qj).replace(/punctSpace/g,DD).replace(/punct/g,Ow).getRegex(),S8e=nn(/\\(punct)/,"gu").replace(/punct/g,Ow).getRegex(),C8e=nn(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),A8e=nn(AD).replace("(?:-->|$)","-->").getRegex(),_8e=nn("^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^").replace("comment",A8e).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),Mw=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,D8e=nn(/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/).replace("label",Mw).replace("href",/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),tK=nn(/^!?\[(label)\]\[(ref)\]/).replace("label",Mw).replace("ref",CD).getRegex(),rK=nn(/^!?\[(ref)\](?:\[\])?/).replace("ref",CD).getRegex(),L8e=nn("reflink|nolink(?!\\()","g").replace("reflink",tK).replace("nolink",rK).getRegex(),LD={_backpedal:b2,anyPunctuation:S8e,autolink:C8e,blockSkip:x8e,br:Kj,code:p8e,del:b2,emStrongLDelim:b8e,emStrongRDelimAst:T8e,emStrongRDelimUnd:E8e,escape:d8e,link:D8e,nolink:rK,punctuation:g8e,reflink:tK,reflinkSearch:L8e,tag:_8e,text:m8e,url:b2},R8e={...LD,link:nn(/^!?\[(label)\]\((.*?)\)/).replace("label",Mw).getRegex(),reflink:nn(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",Mw).getRegex()},wD={...LD,emStrongRDelimAst:k8e,emStrongLDelim:w8e,url:nn(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,"i").replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\.|[^\\])*?(?:\\.|[^\s~\\]))\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\":">",'"':""","'":"'"},Vj=o(t=>M8e[t],"getEscapeReplacement");o(gc,"escape");o(Uj,"cleanUrl");o(Hj,"splitCells");o(x2,"rtrim");o(I8e,"findClosingBracket");o(Wj,"outputLink");o(O8e,"indentCodeCompensation");vm=class{static{o(this,"_Tokenizer")}options;rules;lexer;constructor(e){this.options=e||Gd}space(e){let r=this.rules.block.newline.exec(e);if(r&&r[0].length>0)return{type:"space",raw:r[0]}}code(e){let r=this.rules.block.code.exec(e);if(r){let n=r[0].replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:r[0],codeBlockStyle:"indented",text:this.options.pedantic?n:x2(n,` -`)}}}fences(e){let r=this.rules.block.fences.exec(e);if(r){let n=r[0],i=O8e(n,r[3]||"",this.rules);return{type:"code",raw:n,lang:r[2]?r[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):r[2],text:i}}}heading(e){let r=this.rules.block.heading.exec(e);if(r){let n=r[2].trim();if(this.rules.other.endingHash.test(n)){let i=x2(n,"#");(this.options.pedantic||!i||this.rules.other.endingSpaceChar.test(i))&&(n=i.trim())}return{type:"heading",raw:r[0],depth:r[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(e){let r=this.rules.block.hr.exec(e);if(r)return{type:"hr",raw:x2(r[0],` -`)}}blockquote(e){let r=this.rules.block.blockquote.exec(e);if(r){let n=x2(r[0],` +`)}function Jr(t,e){return Vd.parse(t,e)}var Ud,k2,ss,N_e,M_e,I_e,E2,O_e,rL,iQ,aQ,P_e,nL,B_e,iL,F_e,$_e,VT,aL,z_e,sQ,G_e,sL,ZK,V_e,U_e,H_e,W_e,oQ,q_e,UT,oL,lQ,Y_e,cQ,X_e,j_e,K_e,uQ,Q_e,Z_e,hQ,J_e,eDe,tDe,rDe,nDe,iDe,aDe,$T,sDe,fQ,dQ,oDe,lL,lDe,Z9,cDe,BT,T2,uDe,JK,zT,Nu,GT,cL,Mu,FT,dDe,Vd,ZSt,JSt,e6t,t6t,r6t,n6t,i6t,pQ=N(()=>{"use strict";o(tL,"M");Ud=tL();o(nQ,"H");k2={exec:o(()=>null,"exec")};o(nn,"h");ss={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceTabs:/^\t+/,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] /,listReplaceTask:/^\[[ xX]\] +/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,unescapeTest:/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:o(t=>new RegExp(`^( {0,3}${t})((?:[ ][^\\n]*)?(?:\\n|$))`),"listItemRegex"),nextBulletRegex:o(t=>new RegExp(`^ {0,${Math.min(3,t-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),"nextBulletRegex"),hrRegex:o(t=>new RegExp(`^ {0,${Math.min(3,t-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),"hrRegex"),fencesBeginRegex:o(t=>new RegExp(`^ {0,${Math.min(3,t-1)}}(?:\`\`\`|~~~)`),"fencesBeginRegex"),headingBeginRegex:o(t=>new RegExp(`^ {0,${Math.min(3,t-1)}}#`),"headingBeginRegex"),htmlBeginRegex:o(t=>new RegExp(`^ {0,${Math.min(3,t-1)}}<(?:[a-z].*>|!--)`,"i"),"htmlBeginRegex")},N_e=/^(?:[ \t]*(?:\n|$))+/,M_e=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,I_e=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,E2=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,O_e=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,rL=/(?:[*+-]|\d{1,9}[.)])/,iQ=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,aQ=nn(iQ).replace(/bull/g,rL).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),P_e=nn(iQ).replace(/bull/g,rL).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),nL=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,B_e=/^[^\n]+/,iL=/(?!\s*\])(?:\\.|[^\[\]\\])+/,F_e=nn(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",iL).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),$_e=nn(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,rL).getRegex(),VT="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|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",aL=/|$))/,z_e=nn("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))","i").replace("comment",aL).replace("tag",VT).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),sQ=nn(nL).replace("hr",E2).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",VT).getRegex(),G_e=nn(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",sQ).getRegex(),sL={blockquote:G_e,code:M_e,def:F_e,fences:I_e,heading:O_e,hr:E2,html:z_e,lheading:aQ,list:$_e,newline:N_e,paragraph:sQ,table:k2,text:B_e},ZK=nn("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",E2).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",VT).getRegex(),V_e={...sL,lheading:P_e,table:ZK,paragraph:nn(nL).replace("hr",E2).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",ZK).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",VT).getRegex()},U_e={...sL,html:nn(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",aL).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:k2,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:nn(nL).replace("hr",E2).replace("heading",` *#{1,6} *[^ +]`).replace("lheading",aQ).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},H_e=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,W_e=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,oQ=/^( {2,}|\\)\n(?!\s*$)/,q_e=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\]*?>/g,uQ=/^(?:\*+(?:((?!\*)punct)|[^\s*]))|^_+(?:((?!_)punct)|([^\s_]))/,Q_e=nn(uQ,"u").replace(/punct/g,UT).getRegex(),Z_e=nn(uQ,"u").replace(/punct/g,cQ).getRegex(),hQ="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",J_e=nn(hQ,"gu").replace(/notPunctSpace/g,lQ).replace(/punctSpace/g,oL).replace(/punct/g,UT).getRegex(),eDe=nn(hQ,"gu").replace(/notPunctSpace/g,j_e).replace(/punctSpace/g,X_e).replace(/punct/g,cQ).getRegex(),tDe=nn("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,lQ).replace(/punctSpace/g,oL).replace(/punct/g,UT).getRegex(),rDe=nn(/\\(punct)/,"gu").replace(/punct/g,UT).getRegex(),nDe=nn(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),iDe=nn(aL).replace("(?:-->|$)","-->").getRegex(),aDe=nn("^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^").replace("comment",iDe).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),$T=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,sDe=nn(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]*(?:\n[ \t]*)?)(title))?\s*\)/).replace("label",$T).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),fQ=nn(/^!?\[(label)\]\[(ref)\]/).replace("label",$T).replace("ref",iL).getRegex(),dQ=nn(/^!?\[(ref)\](?:\[\])?/).replace("ref",iL).getRegex(),oDe=nn("reflink|nolink(?!\\()","g").replace("reflink",fQ).replace("nolink",dQ).getRegex(),lL={_backpedal:k2,anyPunctuation:rDe,autolink:nDe,blockSkip:K_e,br:oQ,code:W_e,del:k2,emStrongLDelim:Q_e,emStrongRDelimAst:J_e,emStrongRDelimUnd:tDe,escape:H_e,link:sDe,nolink:dQ,punctuation:Y_e,reflink:fQ,reflinkSearch:oDe,tag:aDe,text:q_e,url:k2},lDe={...lL,link:nn(/^!?\[(label)\]\((.*?)\)/).replace("label",$T).getRegex(),reflink:nn(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",$T).getRegex()},Z9={...lL,emStrongRDelimAst:eDe,emStrongLDelim:Z_e,url:nn(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,"i").replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\.|[^\\])*?(?:\\.|[^\s~\\]))\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\":">",'"':""","'":"'"},JK=o(t=>uDe[t],"ge");o(xc,"R");o(eQ,"J");o(tQ,"V");o(w2,"A");o(hDe,"fe");o(rQ,"de");o(fDe,"Je");zT=class{static{o(this,"S")}options;rules;lexer;constructor(t){this.options=t||Ud}space(t){let e=this.rules.block.newline.exec(t);if(e&&e[0].length>0)return{type:"space",raw:e[0]}}code(t){let e=this.rules.block.code.exec(t);if(e){let r=e[0].replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:e[0],codeBlockStyle:"indented",text:this.options.pedantic?r:w2(r,` +`)}}}fences(t){let e=this.rules.block.fences.exec(t);if(e){let r=e[0],n=fDe(r,e[3]||"",this.rules);return{type:"code",raw:r,lang:e[2]?e[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):e[2],text:n}}}heading(t){let e=this.rules.block.heading.exec(t);if(e){let r=e[2].trim();if(this.rules.other.endingHash.test(r)){let n=w2(r,"#");(this.options.pedantic||!n||this.rules.other.endingSpaceChar.test(n))&&(r=n.trim())}return{type:"heading",raw:e[0],depth:e[1].length,text:r,tokens:this.lexer.inline(r)}}}hr(t){let e=this.rules.block.hr.exec(t);if(e)return{type:"hr",raw:w2(e[0],` +`)}}blockquote(t){let e=this.rules.block.blockquote.exec(t);if(e){let r=w2(e[0],` `).split(` -`),i="",a="",s=[];for(;n.length>0;){let l=!1,u=[],h;for(h=0;h1,a={type:"list",raw:"",ordered:i,start:i?+n.slice(0,-1):"",loose:!1,items:[]};n=i?`\\d{1,9}\\${n.slice(-1)}`:`\\${n}`,this.options.pedantic&&(n=i?n:"[*+-]");let s=this.rules.other.listItemRegex(n),l=!1;for(;e;){let h=!1,f="",d="";if(!(r=s.exec(e))||this.rules.block.hr.test(e))break;f=r[0],e=e.substring(f.length);let p=r[2].split(` -`,1)[0].replace(this.rules.other.listReplaceTabs,b=>" ".repeat(3*b.length)),m=e.split(` -`,1)[0],g=!p.trim(),y=0;if(this.options.pedantic?(y=2,d=p.trimStart()):g?y=r[1].length+1:(y=r[2].search(this.rules.other.nonSpaceChar),y=y>4?1:y,d=p.slice(y),y+=r[1].length),g&&this.rules.other.blankLine.test(m)&&(f+=m+` -`,e=e.substring(m.length+1),h=!0),!h){let b=this.rules.other.nextBulletRegex(y),w=this.rules.other.hrRegex(y),C=this.rules.other.fencesBeginRegex(y),T=this.rules.other.headingBeginRegex(y),E=this.rules.other.htmlBeginRegex(y);for(;e;){let A=e.split(` -`,1)[0],S;if(m=A,this.options.pedantic?(m=m.replace(this.rules.other.listReplaceNesting," "),S=m):S=m.replace(this.rules.other.tabCharGlobal," "),C.test(m)||T.test(m)||E.test(m)||b.test(m)||w.test(m))break;if(S.search(this.rules.other.nonSpaceChar)>=y||!m.trim())d+=` -`+S.slice(y);else{if(g||p.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||C.test(p)||T.test(p)||w.test(p))break;d+=` -`+m}!g&&!m.trim()&&(g=!0),f+=A+` -`,e=e.substring(A.length+1),p=S.slice(y)}}a.loose||(l?a.loose=!0:this.rules.other.doubleBlankLine.test(f)&&(l=!0));let v=null,x;this.options.gfm&&(v=this.rules.other.listIsTask.exec(d),v&&(x=v[0]!=="[ ] ",d=d.replace(this.rules.other.listReplaceTask,""))),a.items.push({type:"list_item",raw:f,task:!!v,checked:x,loose:!1,text:d,tokens:[]}),a.raw+=f}let u=a.items.at(-1);if(u)u.raw=u.raw.trimEnd(),u.text=u.text.trimEnd();else return;a.raw=a.raw.trimEnd();for(let h=0;hp.type==="space"),d=f.length>0&&f.some(p=>this.rules.other.anyLine.test(p.raw));a.loose=d}if(a.loose)for(let h=0;h({text:u,tokens:this.lexer.inline(u),header:!1,align:s.align[h]})));return s}}lheading(e){let r=this.rules.block.lheading.exec(e);if(r)return{type:"heading",raw:r[0],depth:r[2].charAt(0)==="="?1:2,text:r[1],tokens:this.lexer.inline(r[1])}}paragraph(e){let r=this.rules.block.paragraph.exec(e);if(r){let n=r[1].charAt(r[1].length-1)===` -`?r[1].slice(0,-1):r[1];return{type:"paragraph",raw:r[0],text:n,tokens:this.lexer.inline(n)}}}text(e){let r=this.rules.block.text.exec(e);if(r)return{type:"text",raw:r[0],text:r[0],tokens:this.lexer.inline(r[0])}}escape(e){let r=this.rules.inline.escape.exec(e);if(r)return{type:"escape",raw:r[0],text:r[1]}}tag(e){let r=this.rules.inline.tag.exec(e);if(r)return!this.lexer.state.inLink&&this.rules.other.startATag.test(r[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(r[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(r[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(r[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:r[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:r[0]}}link(e){let r=this.rules.inline.link.exec(e);if(r){let n=r[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(n)){if(!this.rules.other.endAngleBracket.test(n))return;let s=x2(n.slice(0,-1),"\\");if((n.length-s.length)%2===0)return}else{let s=I8e(r[2],"()");if(s>-1){let u=(r[0].indexOf("!")===0?5:4)+r[1].length+s;r[2]=r[2].substring(0,s),r[0]=r[0].substring(0,u).trim(),r[3]=""}}let i=r[2],a="";if(this.options.pedantic){let s=this.rules.other.pedanticHrefTitle.exec(i);s&&(i=s[1],a=s[3])}else a=r[3]?r[3].slice(1,-1):"";return i=i.trim(),this.rules.other.startAngleBracket.test(i)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(n)?i=i.slice(1):i=i.slice(1,-1)),Wj(r,{href:i&&i.replace(this.rules.inline.anyPunctuation,"$1"),title:a&&a.replace(this.rules.inline.anyPunctuation,"$1")},r[0],this.lexer,this.rules)}}reflink(e,r){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let i=(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal," "),a=r[i.toLowerCase()];if(!a){let s=n[0].charAt(0);return{type:"text",raw:s,text:s}}return Wj(n,a,n[0],this.lexer,this.rules)}}emStrong(e,r,n=""){let i=this.rules.inline.emStrongLDelim.exec(e);if(!i||i[3]&&n.match(this.rules.other.unicodeAlphaNumeric))return;if(!(i[1]||i[2]||"")||!n||this.rules.inline.punctuation.exec(n)){let s=[...i[0]].length-1,l,u,h=s,f=0,d=i[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(d.lastIndex=0,r=r.slice(-1*e.length+s);(i=d.exec(r))!=null;){if(l=i[1]||i[2]||i[3]||i[4]||i[5]||i[6],!l)continue;if(u=[...l].length,i[3]||i[4]){h+=u;continue}else if((i[5]||i[6])&&s%3&&!((s+u)%3)){f+=u;continue}if(h-=u,h>0)continue;u=Math.min(u,u+h+f);let p=[...i[0]][0].length,m=e.slice(0,s+i.index+p+u);if(Math.min(s,u)%2){let y=m.slice(1,-1);return{type:"em",raw:m,text:y,tokens:this.lexer.inlineTokens(y)}}let g=m.slice(2,-2);return{type:"strong",raw:m,text:g,tokens:this.lexer.inlineTokens(g)}}}}codespan(e){let r=this.rules.inline.code.exec(e);if(r){let n=r[2].replace(this.rules.other.newLineCharGlobal," "),i=this.rules.other.nonSpaceChar.test(n),a=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return i&&a&&(n=n.substring(1,n.length-1)),{type:"codespan",raw:r[0],text:n}}}br(e){let r=this.rules.inline.br.exec(e);if(r)return{type:"br",raw:r[0]}}del(e){let r=this.rules.inline.del.exec(e);if(r)return{type:"del",raw:r[0],text:r[2],tokens:this.lexer.inlineTokens(r[2])}}autolink(e){let r=this.rules.inline.autolink.exec(e);if(r){let n,i;return r[2]==="@"?(n=r[1],i="mailto:"+n):(n=r[1],i=n),{type:"link",raw:r[0],text:n,href:i,tokens:[{type:"text",raw:n,text:n}]}}}url(e){let r;if(r=this.rules.inline.url.exec(e)){let n,i;if(r[2]==="@")n=r[0],i="mailto:"+n;else{let a;do a=r[0],r[0]=this.rules.inline._backpedal.exec(r[0])?.[0]??"";while(a!==r[0]);n=r[0],r[1]==="www."?i="http://"+r[0]:i=r[0]}return{type:"link",raw:r[0],text:n,href:i,tokens:[{type:"text",raw:n,text:n}]}}}inlineText(e){let r=this.rules.inline.text.exec(e);if(r){let n=this.lexer.state.inRawBlock;return{type:"text",raw:r[0],text:r[0],escaped:n}}}},Dl=class t{static{o(this,"_Lexer")}tokens;options;state;tokenizer;inlineQueue;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||Gd,this.options.tokenizer=this.options.tokenizer||new vm,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let r={other:ts,block:Nw.normal,inline:v2.normal};this.options.pedantic?(r.block=Nw.pedantic,r.inline=v2.pedantic):this.options.gfm&&(r.block=Nw.gfm,this.options.breaks?r.inline=v2.breaks:r.inline=v2.gfm),this.tokenizer.rules=r}static get rules(){return{block:Nw,inline:v2}}static lex(e,r){return new t(r).lex(e)}static lexInline(e,r){return new t(r).inlineTokens(e)}lex(e){e=e.replace(ts.carriageReturn,` -`),this.blockTokens(e,this.tokens);for(let r=0;r(i=s.call({lexer:this},e,r))?(e=e.substring(i.raw.length),r.push(i),!0):!1))continue;if(i=this.tokenizer.space(e)){e=e.substring(i.raw.length);let s=r.at(-1);i.raw.length===1&&s!==void 0?s.raw+=` +`),n="",i="",a=[];for(;r.length>0;){let s=!1,l=[],u;for(u=0;u1,i={type:"list",raw:"",ordered:n,start:n?+r.slice(0,-1):"",loose:!1,items:[]};r=n?`\\d{1,9}\\${r.slice(-1)}`:`\\${r}`,this.options.pedantic&&(r=n?r:"[*+-]");let a=this.rules.other.listItemRegex(r),s=!1;for(;t;){let u=!1,h="",f="";if(!(e=a.exec(t))||this.rules.block.hr.test(t))break;h=e[0],t=t.substring(h.length);let d=e[2].split(` +`,1)[0].replace(this.rules.other.listReplaceTabs,x=>" ".repeat(3*x.length)),p=t.split(` +`,1)[0],m=!d.trim(),g=0;if(this.options.pedantic?(g=2,f=d.trimStart()):m?g=e[1].length+1:(g=e[2].search(this.rules.other.nonSpaceChar),g=g>4?1:g,f=d.slice(g),g+=e[1].length),m&&this.rules.other.blankLine.test(p)&&(h+=p+` +`,t=t.substring(p.length+1),u=!0),!u){let x=this.rules.other.nextBulletRegex(g),b=this.rules.other.hrRegex(g),T=this.rules.other.fencesBeginRegex(g),S=this.rules.other.headingBeginRegex(g),w=this.rules.other.htmlBeginRegex(g);for(;t;){let E=t.split(` +`,1)[0],_;if(p=E,this.options.pedantic?(p=p.replace(this.rules.other.listReplaceNesting," "),_=p):_=p.replace(this.rules.other.tabCharGlobal," "),T.test(p)||S.test(p)||w.test(p)||x.test(p)||b.test(p))break;if(_.search(this.rules.other.nonSpaceChar)>=g||!p.trim())f+=` +`+_.slice(g);else{if(m||d.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||T.test(d)||S.test(d)||b.test(d))break;f+=` +`+p}!m&&!p.trim()&&(m=!0),h+=E+` +`,t=t.substring(E.length+1),d=_.slice(g)}}i.loose||(s?i.loose=!0:this.rules.other.doubleBlankLine.test(h)&&(s=!0));let y=null,v;this.options.gfm&&(y=this.rules.other.listIsTask.exec(f),y&&(v=y[0]!=="[ ] ",f=f.replace(this.rules.other.listReplaceTask,""))),i.items.push({type:"list_item",raw:h,task:!!y,checked:v,loose:!1,text:f,tokens:[]}),i.raw+=h}let l=i.items.at(-1);if(l)l.raw=l.raw.trimEnd(),l.text=l.text.trimEnd();else return;i.raw=i.raw.trimEnd();for(let u=0;ud.type==="space"),f=h.length>0&&h.some(d=>this.rules.other.anyLine.test(d.raw));i.loose=f}if(i.loose)for(let u=0;u({text:l,tokens:this.lexer.inline(l),header:!1,align:a.align[u]})));return a}}lheading(t){let e=this.rules.block.lheading.exec(t);if(e)return{type:"heading",raw:e[0],depth:e[2].charAt(0)==="="?1:2,text:e[1],tokens:this.lexer.inline(e[1])}}paragraph(t){let e=this.rules.block.paragraph.exec(t);if(e){let r=e[1].charAt(e[1].length-1)===` +`?e[1].slice(0,-1):e[1];return{type:"paragraph",raw:e[0],text:r,tokens:this.lexer.inline(r)}}}text(t){let e=this.rules.block.text.exec(t);if(e)return{type:"text",raw:e[0],text:e[0],tokens:this.lexer.inline(e[0])}}escape(t){let e=this.rules.inline.escape.exec(t);if(e)return{type:"escape",raw:e[0],text:e[1]}}tag(t){let e=this.rules.inline.tag.exec(t);if(e)return!this.lexer.state.inLink&&this.rules.other.startATag.test(e[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(e[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(e[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(e[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:e[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:e[0]}}link(t){let e=this.rules.inline.link.exec(t);if(e){let r=e[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(r)){if(!this.rules.other.endAngleBracket.test(r))return;let a=w2(r.slice(0,-1),"\\");if((r.length-a.length)%2===0)return}else{let a=hDe(e[2],"()");if(a===-2)return;if(a>-1){let s=(e[0].indexOf("!")===0?5:4)+e[1].length+a;e[2]=e[2].substring(0,a),e[0]=e[0].substring(0,s).trim(),e[3]=""}}let n=e[2],i="";if(this.options.pedantic){let a=this.rules.other.pedanticHrefTitle.exec(n);a&&(n=a[1],i=a[3])}else i=e[3]?e[3].slice(1,-1):"";return n=n.trim(),this.rules.other.startAngleBracket.test(n)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(r)?n=n.slice(1):n=n.slice(1,-1)),rQ(e,{href:n&&n.replace(this.rules.inline.anyPunctuation,"$1"),title:i&&i.replace(this.rules.inline.anyPunctuation,"$1")},e[0],this.lexer,this.rules)}}reflink(t,e){let r;if((r=this.rules.inline.reflink.exec(t))||(r=this.rules.inline.nolink.exec(t))){let n=(r[2]||r[1]).replace(this.rules.other.multipleSpaceGlobal," "),i=e[n.toLowerCase()];if(!i){let a=r[0].charAt(0);return{type:"text",raw:a,text:a}}return rQ(r,i,r[0],this.lexer,this.rules)}}emStrong(t,e,r=""){let n=this.rules.inline.emStrongLDelim.exec(t);if(!(!n||n[3]&&r.match(this.rules.other.unicodeAlphaNumeric))&&(!(n[1]||n[2])||!r||this.rules.inline.punctuation.exec(r))){let i=[...n[0]].length-1,a,s,l=i,u=0,h=n[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(h.lastIndex=0,e=e.slice(-1*t.length+i);(n=h.exec(e))!=null;){if(a=n[1]||n[2]||n[3]||n[4]||n[5]||n[6],!a)continue;if(s=[...a].length,n[3]||n[4]){l+=s;continue}else if((n[5]||n[6])&&i%3&&!((i+s)%3)){u+=s;continue}if(l-=s,l>0)continue;s=Math.min(s,s+l+u);let f=[...n[0]][0].length,d=t.slice(0,i+n.index+f+s);if(Math.min(i,s)%2){let m=d.slice(1,-1);return{type:"em",raw:d,text:m,tokens:this.lexer.inlineTokens(m)}}let p=d.slice(2,-2);return{type:"strong",raw:d,text:p,tokens:this.lexer.inlineTokens(p)}}}}codespan(t){let e=this.rules.inline.code.exec(t);if(e){let r=e[2].replace(this.rules.other.newLineCharGlobal," "),n=this.rules.other.nonSpaceChar.test(r),i=this.rules.other.startingSpaceChar.test(r)&&this.rules.other.endingSpaceChar.test(r);return n&&i&&(r=r.substring(1,r.length-1)),{type:"codespan",raw:e[0],text:r}}}br(t){let e=this.rules.inline.br.exec(t);if(e)return{type:"br",raw:e[0]}}del(t){let e=this.rules.inline.del.exec(t);if(e)return{type:"del",raw:e[0],text:e[2],tokens:this.lexer.inlineTokens(e[2])}}autolink(t){let e=this.rules.inline.autolink.exec(t);if(e){let r,n;return e[2]==="@"?(r=e[1],n="mailto:"+r):(r=e[1],n=r),{type:"link",raw:e[0],text:r,href:n,tokens:[{type:"text",raw:r,text:r}]}}}url(t){let e;if(e=this.rules.inline.url.exec(t)){let r,n;if(e[2]==="@")r=e[0],n="mailto:"+r;else{let i;do i=e[0],e[0]=this.rules.inline._backpedal.exec(e[0])?.[0]??"";while(i!==e[0]);r=e[0],e[1]==="www."?n="http://"+e[0]:n=e[0]}return{type:"link",raw:e[0],text:r,href:n,tokens:[{type:"text",raw:r,text:r}]}}}inlineText(t){let e=this.rules.inline.text.exec(t);if(e){let r=this.lexer.state.inRawBlock;return{type:"text",raw:e[0],text:e[0],escaped:r}}}},Nu=class J9{static{o(this,"a")}tokens;options;state;tokenizer;inlineQueue;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||Ud,this.options.tokenizer=this.options.tokenizer||new zT,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let r={other:ss,block:BT.normal,inline:T2.normal};this.options.pedantic?(r.block=BT.pedantic,r.inline=T2.pedantic):this.options.gfm&&(r.block=BT.gfm,this.options.breaks?r.inline=T2.breaks:r.inline=T2.gfm),this.tokenizer.rules=r}static get rules(){return{block:BT,inline:T2}}static lex(e,r){return new J9(r).lex(e)}static lexInline(e,r){return new J9(r).inlineTokens(e)}lex(e){e=e.replace(ss.carriageReturn,` +`),this.blockTokens(e,this.tokens);for(let r=0;r(i=s.call({lexer:this},e,r))?(e=e.substring(i.raw.length),r.push(i),!0):!1))continue;if(i=this.tokenizer.space(e)){e=e.substring(i.raw.length);let s=r.at(-1);i.raw.length===1&&s!==void 0?s.raw+=` `:r.push(i);continue}if(i=this.tokenizer.code(e)){e=e.substring(i.raw.length);let s=r.at(-1);s?.type==="paragraph"||s?.type==="text"?(s.raw+=` `+i.raw,s.text+=` `+i.text,this.inlineQueue.at(-1).src=s.text):r.push(i);continue}if(i=this.tokenizer.fences(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.heading(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.hr(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.blockquote(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.list(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.html(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.def(e)){e=e.substring(i.raw.length);let s=r.at(-1);s?.type==="paragraph"||s?.type==="text"?(s.raw+=` @@ -418,69 +418,69 @@ ${d}`:d;let p=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTo `+i.raw,s.text+=` `+i.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):r.push(i),n=a.length!==e.length,e=e.substring(i.raw.length);continue}if(i=this.tokenizer.text(e)){e=e.substring(i.raw.length);let s=r.at(-1);s?.type==="text"?(s.raw+=` `+i.raw,s.text+=` -`+i.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):r.push(i);continue}if(e){let s="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(s);break}else throw new Error(s)}}return this.state.top=!0,r}inline(e,r=[]){return this.inlineQueue.push({src:e,tokens:r}),r}inlineTokens(e,r=[]){let n=e,i=null;if(this.tokens.links){let l=Object.keys(this.tokens.links);if(l.length>0)for(;(i=this.tokenizer.rules.inline.reflinkSearch.exec(n))!=null;)l.includes(i[0].slice(i[0].lastIndexOf("[")+1,-1))&&(n=n.slice(0,i.index)+"["+"a".repeat(i[0].length-2)+"]"+n.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(i=this.tokenizer.rules.inline.blockSkip.exec(n))!=null;)n=n.slice(0,i.index)+"["+"a".repeat(i[0].length-2)+"]"+n.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;(i=this.tokenizer.rules.inline.anyPunctuation.exec(n))!=null;)n=n.slice(0,i.index)+"++"+n.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);let a=!1,s="";for(;e;){a||(s=""),a=!1;let l;if(this.options.extensions?.inline?.some(h=>(l=h.call({lexer:this},e,r))?(e=e.substring(l.raw.length),r.push(l),!0):!1))continue;if(l=this.tokenizer.escape(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.tag(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.link(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(l.raw.length);let h=r.at(-1);l.type==="text"&&h?.type==="text"?(h.raw+=l.raw,h.text+=l.text):r.push(l);continue}if(l=this.tokenizer.emStrong(e,n,s)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.codespan(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.br(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.del(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.autolink(e)){e=e.substring(l.raw.length),r.push(l);continue}if(!this.state.inLink&&(l=this.tokenizer.url(e))){e=e.substring(l.raw.length),r.push(l);continue}let u=e;if(this.options.extensions?.startInline){let h=1/0,f=e.slice(1),d;this.options.extensions.startInline.forEach(p=>{d=p.call({lexer:this},f),typeof d=="number"&&d>=0&&(h=Math.min(h,d))}),h<1/0&&h>=0&&(u=e.substring(0,h+1))}if(l=this.tokenizer.inlineText(u)){e=e.substring(l.raw.length),l.raw.slice(-1)!=="_"&&(s=l.raw.slice(-1)),a=!0;let h=r.at(-1);h?.type==="text"?(h.raw+=l.raw,h.text+=l.text):r.push(l);continue}if(e){let h="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(h);break}else throw new Error(h)}}return r}},xm=class{static{o(this,"_Renderer")}options;parser;constructor(e){this.options=e||Gd}space(e){return""}code({text:e,lang:r,escaped:n}){let i=(r||"").match(ts.notSpaceStart)?.[0],a=e.replace(ts.endingNewline,"")+` -`;return i?'
'+(n?a:gc(a,!0))+`
-`:"
"+(n?a:gc(a,!0))+`
-`}blockquote({tokens:e}){return`
-${this.parser.parse(e)}
-`}html({text:e}){return e}heading({tokens:e,depth:r}){return`${this.parser.parseInline(e)} -`}hr(e){return`
-`}list(e){let r=e.ordered,n=e.start,i="";for(let l=0;l -`+i+" -`}listitem(e){let r="";if(e.task){let n=this.checkbox({checked:!!e.checked});e.loose?e.tokens[0]?.type==="paragraph"?(e.tokens[0].text=n+" "+e.tokens[0].text,e.tokens[0].tokens&&e.tokens[0].tokens.length>0&&e.tokens[0].tokens[0].type==="text"&&(e.tokens[0].tokens[0].text=n+" "+gc(e.tokens[0].tokens[0].text),e.tokens[0].tokens[0].escaped=!0)):e.tokens.unshift({type:"text",raw:n+" ",text:n+" ",escaped:!0}):r+=n+" "}return r+=this.parser.parse(e.tokens,!!e.loose),`
  • ${r}
  • -`}checkbox({checked:e}){return"'}paragraph({tokens:e}){return`

    ${this.parser.parseInline(e)}

    -`}table(e){let r="",n="";for(let a=0;a${i}`),` +`+i.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):r.push(i);continue}if(e){let s="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(s);break}else throw new Error(s)}}return this.state.top=!0,r}inline(e,r=[]){return this.inlineQueue.push({src:e,tokens:r}),r}inlineTokens(e,r=[]){let n=e,i=null;if(this.tokens.links){let l=Object.keys(this.tokens.links);if(l.length>0)for(;(i=this.tokenizer.rules.inline.reflinkSearch.exec(n))!=null;)l.includes(i[0].slice(i[0].lastIndexOf("[")+1,-1))&&(n=n.slice(0,i.index)+"["+"a".repeat(i[0].length-2)+"]"+n.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(i=this.tokenizer.rules.inline.anyPunctuation.exec(n))!=null;)n=n.slice(0,i.index)+"++"+n.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;(i=this.tokenizer.rules.inline.blockSkip.exec(n))!=null;)n=n.slice(0,i.index)+"["+"a".repeat(i[0].length-2)+"]"+n.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);let a=!1,s="";for(;e;){a||(s=""),a=!1;let l;if(this.options.extensions?.inline?.some(h=>(l=h.call({lexer:this},e,r))?(e=e.substring(l.raw.length),r.push(l),!0):!1))continue;if(l=this.tokenizer.escape(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.tag(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.link(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(l.raw.length);let h=r.at(-1);l.type==="text"&&h?.type==="text"?(h.raw+=l.raw,h.text+=l.text):r.push(l);continue}if(l=this.tokenizer.emStrong(e,n,s)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.codespan(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.br(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.del(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.autolink(e)){e=e.substring(l.raw.length),r.push(l);continue}if(!this.state.inLink&&(l=this.tokenizer.url(e))){e=e.substring(l.raw.length),r.push(l);continue}let u=e;if(this.options.extensions?.startInline){let h=1/0,f=e.slice(1),d;this.options.extensions.startInline.forEach(p=>{d=p.call({lexer:this},f),typeof d=="number"&&d>=0&&(h=Math.min(h,d))}),h<1/0&&h>=0&&(u=e.substring(0,h+1))}if(l=this.tokenizer.inlineText(u)){e=e.substring(l.raw.length),l.raw.slice(-1)!=="_"&&(s=l.raw.slice(-1)),a=!0;let h=r.at(-1);h?.type==="text"?(h.raw+=l.raw,h.text+=l.text):r.push(l);continue}if(e){let h="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(h);break}else throw new Error(h)}}return r}},GT=class{static{o(this,"$")}options;parser;constructor(t){this.options=t||Ud}space(t){return""}code({text:t,lang:e,escaped:r}){let n=(e||"").match(ss.notSpaceStart)?.[0],i=t.replace(ss.endingNewline,"")+` +`;return n?'
    '+(r?i:xc(i,!0))+`
    +`:"
    "+(r?i:xc(i,!0))+`
    +`}blockquote({tokens:t}){return`
    +${this.parser.parse(t)}
    +`}html({text:t}){return t}heading({tokens:t,depth:e}){return`${this.parser.parseInline(t)} +`}hr(t){return`
    +`}list(t){let e=t.ordered,r=t.start,n="";for(let s=0;s +`+n+" +`}listitem(t){let e="";if(t.task){let r=this.checkbox({checked:!!t.checked});t.loose?t.tokens[0]?.type==="paragraph"?(t.tokens[0].text=r+" "+t.tokens[0].text,t.tokens[0].tokens&&t.tokens[0].tokens.length>0&&t.tokens[0].tokens[0].type==="text"&&(t.tokens[0].tokens[0].text=r+" "+xc(t.tokens[0].tokens[0].text),t.tokens[0].tokens[0].escaped=!0)):t.tokens.unshift({type:"text",raw:r+" ",text:r+" ",escaped:!0}):e+=r+" "}return e+=this.parser.parse(t.tokens,!!t.loose),`
  • ${e}
  • +`}checkbox({checked:t}){return"'}paragraph({tokens:t}){return`

    ${this.parser.parseInline(t)}

    +`}table(t){let e="",r="";for(let i=0;i${n}`),`
    -`+r+` -`+i+`
    -`}tablerow({text:e}){return` -${e} -`}tablecell(e){let r=this.parser.parseInline(e.tokens),n=e.header?"th":"td";return(e.align?`<${n} align="${e.align}">`:`<${n}>`)+r+` -`}strong({tokens:e}){return`${this.parser.parseInline(e)}`}em({tokens:e}){return`${this.parser.parseInline(e)}`}codespan({text:e}){return`${gc(e,!0)}`}br(e){return"
    "}del({tokens:e}){return`${this.parser.parseInline(e)}`}link({href:e,title:r,tokens:n}){let i=this.parser.parseInline(n),a=Uj(e);if(a===null)return i;e=a;let s='
    ",s}image({href:e,title:r,text:n}){let i=Uj(e);if(i===null)return gc(n);e=i;let a=`${n}{let l=a[s].flat(1/0);n=n.concat(this.walkTokens(l,r))}):a.tokens&&(n=n.concat(this.walkTokens(a.tokens,r)))}}return n}use(...e){let r=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(n=>{let i={...n};if(i.async=this.defaults.async||i.async||!1,n.extensions&&(n.extensions.forEach(a=>{if(!a.name)throw new Error("extension name required");if("renderer"in a){let s=r.renderers[a.name];s?r.renderers[a.name]=function(...l){let u=a.renderer.apply(this,l);return u===!1&&(u=s.apply(this,l)),u}:r.renderers[a.name]=a.renderer}if("tokenizer"in a){if(!a.level||a.level!=="block"&&a.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let s=r[a.level];s?s.unshift(a.tokenizer):r[a.level]=[a.tokenizer],a.start&&(a.level==="block"?r.startBlock?r.startBlock.push(a.start):r.startBlock=[a.start]:a.level==="inline"&&(r.startInline?r.startInline.push(a.start):r.startInline=[a.start]))}"childTokens"in a&&a.childTokens&&(r.childTokens[a.name]=a.childTokens)}),i.extensions=r),n.renderer){let a=this.defaults.renderer||new xm(this.defaults);for(let s in n.renderer){if(!(s in a))throw new Error(`renderer '${s}' does not exist`);if(["options","parser"].includes(s))continue;let l=s,u=n.renderer[l],h=a[l];a[l]=(...f)=>{let d=u.apply(a,f);return d===!1&&(d=h.apply(a,f)),d||""}}i.renderer=a}if(n.tokenizer){let a=this.defaults.tokenizer||new vm(this.defaults);for(let s in n.tokenizer){if(!(s in a))throw new Error(`tokenizer '${s}' does not exist`);if(["options","rules","lexer"].includes(s))continue;let l=s,u=n.tokenizer[l],h=a[l];a[l]=(...f)=>{let d=u.apply(a,f);return d===!1&&(d=h.apply(a,f)),d}}i.tokenizer=a}if(n.hooks){let a=this.defaults.hooks||new ym;for(let s in n.hooks){if(!(s in a))throw new Error(`hook '${s}' does not exist`);if(["options","block"].includes(s))continue;let l=s,u=n.hooks[l],h=a[l];ym.passThroughHooks.has(s)?a[l]=f=>{if(this.defaults.async)return Promise.resolve(u.call(a,f)).then(p=>h.call(a,p));let d=u.call(a,f);return h.call(a,d)}:a[l]=(...f)=>{let d=u.apply(a,f);return d===!1&&(d=h.apply(a,f)),d}}i.hooks=a}if(n.walkTokens){let a=this.defaults.walkTokens,s=n.walkTokens;i.walkTokens=function(l){let u=[];return u.push(s.call(this,l)),a&&(u=u.concat(a.call(this,l))),u}}this.defaults={...this.defaults,...i}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,r){return Dl.lex(e,r??this.defaults)}parser(e,r){return Ll.parse(e,r??this.defaults)}parseMarkdown(e){return o((n,i)=>{let a={...i},s={...this.defaults,...a},l=this.onError(!!s.silent,!!s.async);if(this.defaults.async===!0&&a.async===!1)return l(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof n>"u"||n===null)return l(new Error("marked(): input parameter is undefined or null"));if(typeof n!="string")return l(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(n)+", string expected"));s.hooks&&(s.hooks.options=s,s.hooks.block=e);let u=s.hooks?s.hooks.provideLexer():e?Dl.lex:Dl.lexInline,h=s.hooks?s.hooks.provideParser():e?Ll.parse:Ll.parseInline;if(s.async)return Promise.resolve(s.hooks?s.hooks.preprocess(n):n).then(f=>u(f,s)).then(f=>s.hooks?s.hooks.processAllTokens(f):f).then(f=>s.walkTokens?Promise.all(this.walkTokens(f,s.walkTokens)).then(()=>f):f).then(f=>h(f,s)).then(f=>s.hooks?s.hooks.postprocess(f):f).catch(l);try{s.hooks&&(n=s.hooks.preprocess(n));let f=u(n,s);s.hooks&&(f=s.hooks.processAllTokens(f)),s.walkTokens&&this.walkTokens(f,s.walkTokens);let d=h(f,s);return s.hooks&&(d=s.hooks.postprocess(d)),d}catch(f){return l(f)}},"parse")}onError(e,r){return n=>{if(n.message+=` -Please report this to https://github.com/markedjs/marked.`,e){let i="

    An error occurred:

    "+gc(n.message+"",!0)+"
    ";return r?Promise.resolve(i):i}if(r)return Promise.reject(n);throw n}}},zd=new TD;o(Jr,"marked");Jr.options=Jr.setOptions=function(t){return zd.setOptions(t),Jr.defaults=zd.defaults,qj(Jr.defaults),Jr};Jr.getDefaults=kD;Jr.defaults=Gd;Jr.use=function(...t){return zd.use(...t),Jr.defaults=zd.defaults,qj(Jr.defaults),Jr};Jr.walkTokens=function(t,e){return zd.walkTokens(t,e)};Jr.parseInline=zd.parseInline;Jr.Parser=Ll;Jr.parser=Ll.parse;Jr.Renderer=xm;Jr.TextRenderer=w2;Jr.Lexer=Dl;Jr.lexer=Dl.lex;Jr.Tokenizer=vm;Jr.Hooks=ym;Jr.parse=Jr;ikt=Jr.options,akt=Jr.setOptions,skt=Jr.use,okt=Jr.walkTokens,lkt=Jr.parseInline,ckt=Ll.parse,ukt=Dl.lex});function P8e(t,{markdownAutoWrap:e}){let n=t.replace(//g,` +`+e+` +`+n+` +`}tablerow({text:t}){return` +${t} +`}tablecell(t){let e=this.parser.parseInline(t.tokens),r=t.header?"th":"td";return(t.align?`<${r} align="${t.align}">`:`<${r}>`)+e+` +`}strong({tokens:t}){return`${this.parser.parseInline(t)}`}em({tokens:t}){return`${this.parser.parseInline(t)}`}codespan({text:t}){return`${xc(t,!0)}`}br(t){return"
    "}del({tokens:t}){return`${this.parser.parseInline(t)}`}link({href:t,title:e,tokens:r}){let n=this.parser.parseInline(r),i=eQ(t);if(i===null)return n;t=i;let a='
    ",a}image({href:t,title:e,text:r,tokens:n}){n&&(r=this.parser.parseInline(n,this.parser.textRenderer));let i=eQ(t);if(i===null)return xc(r);t=i;let a=`${r}{let s=i[a].flat(1/0);r=r.concat(this.walkTokens(s,e))}):i.tokens&&(r=r.concat(this.walkTokens(i.tokens,e)))}}return r}use(...t){let e=this.defaults.extensions||{renderers:{},childTokens:{}};return t.forEach(r=>{let n={...r};if(n.async=this.defaults.async||n.async||!1,r.extensions&&(r.extensions.forEach(i=>{if(!i.name)throw new Error("extension name required");if("renderer"in i){let a=e.renderers[i.name];a?e.renderers[i.name]=function(...s){let l=i.renderer.apply(this,s);return l===!1&&(l=a.apply(this,s)),l}:e.renderers[i.name]=i.renderer}if("tokenizer"in i){if(!i.level||i.level!=="block"&&i.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let a=e[i.level];a?a.unshift(i.tokenizer):e[i.level]=[i.tokenizer],i.start&&(i.level==="block"?e.startBlock?e.startBlock.push(i.start):e.startBlock=[i.start]:i.level==="inline"&&(e.startInline?e.startInline.push(i.start):e.startInline=[i.start]))}"childTokens"in i&&i.childTokens&&(e.childTokens[i.name]=i.childTokens)}),n.extensions=e),r.renderer){let i=this.defaults.renderer||new GT(this.defaults);for(let a in r.renderer){if(!(a in i))throw new Error(`renderer '${a}' does not exist`);if(["options","parser"].includes(a))continue;let s=a,l=r.renderer[s],u=i[s];i[s]=(...h)=>{let f=l.apply(i,h);return f===!1&&(f=u.apply(i,h)),f||""}}n.renderer=i}if(r.tokenizer){let i=this.defaults.tokenizer||new zT(this.defaults);for(let a in r.tokenizer){if(!(a in i))throw new Error(`tokenizer '${a}' does not exist`);if(["options","rules","lexer"].includes(a))continue;let s=a,l=r.tokenizer[s],u=i[s];i[s]=(...h)=>{let f=l.apply(i,h);return f===!1&&(f=u.apply(i,h)),f}}n.tokenizer=i}if(r.hooks){let i=this.defaults.hooks||new FT;for(let a in r.hooks){if(!(a in i))throw new Error(`hook '${a}' does not exist`);if(["options","block"].includes(a))continue;let s=a,l=r.hooks[s],u=i[s];FT.passThroughHooks.has(a)?i[s]=h=>{if(this.defaults.async)return Promise.resolve(l.call(i,h)).then(d=>u.call(i,d));let f=l.call(i,h);return u.call(i,f)}:i[s]=(...h)=>{let f=l.apply(i,h);return f===!1&&(f=u.apply(i,h)),f}}n.hooks=i}if(r.walkTokens){let i=this.defaults.walkTokens,a=r.walkTokens;n.walkTokens=function(s){let l=[];return l.push(a.call(this,s)),i&&(l=l.concat(i.call(this,s))),l}}this.defaults={...this.defaults,...n}}),this}setOptions(t){return this.defaults={...this.defaults,...t},this}lexer(t,e){return Nu.lex(t,e??this.defaults)}parser(t,e){return Mu.parse(t,e??this.defaults)}parseMarkdown(t){return(e,r)=>{let n={...r},i={...this.defaults,...n},a=this.onError(!!i.silent,!!i.async);if(this.defaults.async===!0&&n.async===!1)return a(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof e>"u"||e===null)return a(new Error("marked(): input parameter is undefined or null"));if(typeof e!="string")return a(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected"));i.hooks&&(i.hooks.options=i,i.hooks.block=t);let s=i.hooks?i.hooks.provideLexer():t?Nu.lex:Nu.lexInline,l=i.hooks?i.hooks.provideParser():t?Mu.parse:Mu.parseInline;if(i.async)return Promise.resolve(i.hooks?i.hooks.preprocess(e):e).then(u=>s(u,i)).then(u=>i.hooks?i.hooks.processAllTokens(u):u).then(u=>i.walkTokens?Promise.all(this.walkTokens(u,i.walkTokens)).then(()=>u):u).then(u=>l(u,i)).then(u=>i.hooks?i.hooks.postprocess(u):u).catch(a);try{i.hooks&&(e=i.hooks.preprocess(e));let u=s(e,i);i.hooks&&(u=i.hooks.processAllTokens(u)),i.walkTokens&&this.walkTokens(u,i.walkTokens);let h=l(u,i);return i.hooks&&(h=i.hooks.postprocess(h)),h}catch(u){return a(u)}}}onError(t,e){return r=>{if(r.message+=` +Please report this to https://github.com/markedjs/marked.`,t){let n="

    An error occurred:

    "+xc(r.message+"",!0)+"
    ";return e?Promise.resolve(n):n}if(e)return Promise.reject(r);throw r}}},Vd=new dDe;o(Jr,"k");Jr.options=Jr.setOptions=function(t){return Vd.setOptions(t),Jr.defaults=Vd.defaults,nQ(Jr.defaults),Jr};Jr.getDefaults=tL;Jr.defaults=Ud;Jr.use=function(...t){return Vd.use(...t),Jr.defaults=Vd.defaults,nQ(Jr.defaults),Jr};Jr.walkTokens=function(t,e){return Vd.walkTokens(t,e)};Jr.parseInline=Vd.parseInline;Jr.Parser=Mu;Jr.parser=Mu.parse;Jr.Renderer=GT;Jr.TextRenderer=cL;Jr.Lexer=Nu;Jr.lexer=Nu.lex;Jr.Tokenizer=zT;Jr.Hooks=FT;Jr.parse=Jr;ZSt=Jr.options,JSt=Jr.setOptions,e6t=Jr.use,t6t=Jr.walkTokens,r6t=Jr.parseInline,n6t=Mu.parse,i6t=Nu.lex});function pDe(t,{markdownAutoWrap:e}){let n=t.replace(//g,` `).replace(/\n{2,}/g,` -`),i=H4(n);return e===!1?i.replace(/ /g," "):i}function iK(t,e={}){let r=P8e(t,e),n=Jr.lexer(r),i=[[]],a=0;function s(l,u="normal"){l.type==="text"?l.text.split(` -`).forEach((f,d)=>{d!==0&&(a++,i.push([])),f.split(" ").forEach(p=>{p=p.replace(/'/g,"'"),p&&i[a].push({content:p,type:u})})}):l.type==="strong"||l.type==="em"?l.tokens.forEach(h=>{s(h,l.type)}):l.type==="html"&&i[a].push({content:l.text,type:"normal"})}return o(s,"processNode"),n.forEach(l=>{l.type==="paragraph"?l.tokens?.forEach(u=>{s(u)}):l.type==="html"&&i[a].push({content:l.text,type:"normal"})}),i}function aK(t,{markdownAutoWrap:e}={}){let r=Jr.lexer(t);function n(i){return i.type==="text"?e===!1?i.text.replace(/\n */g,"
    ").replace(/ /g," "):i.text.replace(/\n */g,"
    "):i.type==="strong"?`${i.tokens?.map(n).join("")}`:i.type==="em"?`${i.tokens?.map(n).join("")}`:i.type==="paragraph"?`

    ${i.tokens?.map(n).join("")}

    `:i.type==="space"?"":i.type==="html"?`${i.text}`:i.type==="escape"?i.text:`Unsupported markdown: ${i.type}`}return o(n,"output"),r.map(n).join("")}var sK=N(()=>{"use strict";nK();VC();o(P8e,"preprocessMarkdown");o(iK,"markdownToLines");o(aK,"markdownToHTML")});function B8e(t){return Intl.Segmenter?[...new Intl.Segmenter().segment(t)].map(e=>e.segment):[...t]}function F8e(t,e){let r=B8e(e.content);return oK(t,[],r,e.type)}function oK(t,e,r,n){if(r.length===0)return[{content:e.join(""),type:n},{content:"",type:n}];let[i,...a]=r,s=[...e,i];return t([{content:s.join(""),type:n}])?oK(t,s,a,n):(e.length===0&&i&&(e.push(i),r.shift()),[{content:e.join(""),type:n},{content:r.join(""),type:n}])}function lK(t,e){if(t.some(({content:r})=>r.includes(` -`)))throw new Error("splitLineToFitWidth does not support newlines in the line");return RD(t,e)}function RD(t,e,r=[],n=[]){if(t.length===0)return n.length>0&&r.push(n),r.length>0?r:[];let i="";t[0].content===" "&&(i=" ",t.shift());let a=t.shift()??{content:" ",type:"normal"},s=[...n];if(i!==""&&s.push({content:i,type:"normal"}),s.push(a),e(s))return RD(t,e,r,s);if(n.length>0)r.push(n),t.unshift(a);else if(a.content){let[l,u]=F8e(e,a);r.push([l]),u.content&&t.unshift(u)}return RD(t,e,r)}var cK=N(()=>{"use strict";o(B8e,"splitTextToChars");o(F8e,"splitWordToFitWidth");o(oK,"splitWordToFitWidthRecursion");o(lK,"splitLineToFitWidth");o(RD,"splitLineToFitWidthRecursion")});function uK(t,e){e&&t.attr("style",e)}async function $8e(t,e,r,n,i=!1){let a=t.append("foreignObject");a.attr("width",`${10*r}px`),a.attr("height",`${10*r}px`);let s=a.append("xhtml:div"),l=e.label;e.label&&pi(e.label)&&(l=await xh(e.label.replace(Ze.lineBreakRegex,` -`),me()));let u=e.isNode?"nodeLabel":"edgeLabel",h=s.append("span");h.html(l),uK(h,e.labelStyle),h.attr("class",`${u} ${n}`),uK(s,e.labelStyle),s.style("display","table-cell"),s.style("white-space","nowrap"),s.style("line-height","1.5"),s.style("max-width",r+"px"),s.style("text-align","center"),s.attr("xmlns","http://www.w3.org/1999/xhtml"),i&&s.attr("class","labelBkg");let f=s.node().getBoundingClientRect();return f.width===r&&(s.style("display","table"),s.style("white-space","break-spaces"),s.style("width",r+"px"),f=s.node().getBoundingClientRect()),a.node()}function ND(t,e,r){return t.append("tspan").attr("class","text-outer-tspan").attr("x",0).attr("y",e*r-.1+"em").attr("dy",r+"em")}function z8e(t,e,r){let n=t.append("text"),i=ND(n,1,e);MD(i,r);let a=i.node().getComputedTextLength();return n.remove(),a}function hK(t,e,r){let n=t.append("text"),i=ND(n,1,e);MD(i,[{content:r,type:"normal"}]);let a=i.node()?.getBoundingClientRect();return a&&n.remove(),a}function G8e(t,e,r,n=!1){let a=e.append("g"),s=a.insert("rect").attr("class","background").attr("style","stroke: none"),l=a.append("text").attr("y","-10.1"),u=0;for(let h of r){let f=o(p=>z8e(a,1.1,p)<=t,"checkWidth"),d=f(h)?[h]:lK(h,f);for(let p of d){let m=ND(l,u,1.1);MD(m,p),u++}}if(n){let h=l.node().getBBox(),f=2;return s.attr("x",h.x-f).attr("y",h.y-f).attr("width",h.width+2*f).attr("height",h.height+2*f),a.node()}else return l.node()}function MD(t,e){t.text(""),e.forEach((r,n)=>{let i=t.append("tspan").attr("font-style",r.type==="em"?"italic":"normal").attr("class","text-inner-tspan").attr("font-weight",r.type==="strong"?"bold":"normal");n===0?i.text(r.content):i.text(" "+r.content)})}async function ID(t){let e=[];t.replace(/(fa[bklrs]?):fa-([\w-]+)/g,(n,i,a)=>(e.push((async()=>{let s=`${i}:${a}`;return await t$(s)?await bs(s,void 0,{class:"label-icon"}):``})()),n));let r=await Promise.all(e);return t.replace(/(fa[bklrs]?):fa-([\w-]+)/g,()=>r.shift()??"")}var Hn,no=N(()=>{"use strict";pr();zt();dr();vt();sK();nr();Yl();cK();o(uK,"applyStyle");o($8e,"addHtmlSpan");o(ND,"createTspan");o(z8e,"computeWidthOfText");o(hK,"computeDimensionOfText");o(G8e,"createFormattedText");o(MD,"updateTextContentAndStyles");o(ID,"replaceIconSubstring");Hn=o(async(t,e="",{style:r="",isTitle:n=!1,classes:i="",useHtmlLabels:a=!0,isNode:s=!0,width:l=200,addSvgBackground:u=!1}={},h)=>{if(X.debug("XYZ createText",e,r,n,i,a,s,"addSvgBackground: ",u),a){let f=aK(e,h),d=await ID(na(f)),p=e.replace(/\\\\/g,"\\"),m={isNode:s,label:pi(e)?p:d,labelStyle:r.replace("fill:","color:")};return await $8e(t,m,l,i,u)}else{let f=e.replace(//g,"
    "),d=iK(f.replace("
    ","
    "),h),p=G8e(l,t,d,e?u:!1);if(s){/stroke:/.exec(r)&&(r=r.replace("stroke:","lineColor:"));let m=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/color:/g,"fill:");Ge(p).attr("style",m)}else{let m=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/background:/g,"fill:");Ge(p).select("rect").attr("style",m.replace(/background:/g,"fill:"));let g=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/color:/g,"fill:");Ge(p).select("text").attr("style",g)}return p}},"createText")});function Xt(t){let e=t.map((r,n)=>`${n===0?"M":"L"}${r.x},${r.y}`);return e.push("Z"),e.join(" ")}function $o(t,e,r,n,i,a){let s=[],u=r-t,h=n-e,f=u/a,d=2*Math.PI/f,p=e+h/2;for(let m=0;m<=50;m++){let g=m/50,y=t+g*u,v=p+i*Math.sin(d*(y-t));s.push({x:y,y:v})}return s}function Bw(t,e,r,n,i,a){let s=[],l=i*Math.PI/180,f=(a*Math.PI/180-l)/(n-1);for(let d=0;d{"use strict";no();zt();pr();Ya();dr();nr();pt=o(async(t,e,r)=>{let n,i=e.useHtmlLabels||fr(me()?.htmlLabels);r?n=r:n="node default";let a=t.insert("g").attr("class",n).attr("id",e.domId||e.id),s=a.insert("g").attr("class","label").attr("style",$n(e.labelStyle)),l;e.label===void 0?l="":l=typeof e.label=="string"?e.label:e.label[0];let u=await Hn(s,Tr(na(l),me()),{useHtmlLabels:i,width:e.width||me().flowchart?.wrappingWidth,cssClasses:"markdown-node-label",style:e.labelStyle,addSvgBackground:!!e.icon||!!e.img}),h=u.getBBox(),f=(e?.padding??0)/2;if(i){let d=u.children[0],p=Ge(u),m=d.getElementsByTagName("img");if(m){let g=l.replace(/]*>/g,"").trim()==="";await Promise.all([...m].map(y=>new Promise(v=>{function x(){if(y.style.display="flex",y.style.flexDirection="column",g){let b=me().fontSize?me().fontSize:window.getComputedStyle(document.body).fontSize,w=5,[C=lr.fontSize]=Fo(b),T=C*w+"px";y.style.minWidth=T,y.style.maxWidth=T}else y.style.width="100%";v(y)}o(x,"setupImage"),setTimeout(()=>{y.complete&&x()}),y.addEventListener("error",x),y.addEventListener("load",x)})))}h=d.getBoundingClientRect(),p.attr("width",h.width),p.attr("height",h.height)}return i?s.attr("transform","translate("+-h.width/2+", "+-h.height/2+")"):s.attr("transform","translate(0, "+-h.height/2+")"),e.centerLabel&&s.attr("transform","translate("+-h.width/2+", "+-h.height/2+")"),s.insert("rect",":first-child"),{shapeSvg:a,bbox:h,halfPadding:f,label:s}},"labelHelper"),Pw=o(async(t,e,r)=>{let n=r.useHtmlLabels||fr(me()?.flowchart?.htmlLabels),i=t.insert("g").attr("class","label").attr("style",r.labelStyle||""),a=await Hn(i,Tr(na(e),me()),{useHtmlLabels:n,width:r.width||me()?.flowchart?.wrappingWidth,style:r.labelStyle,addSvgBackground:!!r.icon||!!r.img}),s=a.getBBox(),l=r.padding/2;if(fr(me()?.flowchart?.htmlLabels)){let u=a.children[0],h=Ge(a);s=u.getBoundingClientRect(),h.attr("width",s.width),h.attr("height",s.height)}return n?i.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"):i.attr("transform","translate(0, "+-s.height/2+")"),r.centerLabel&&i.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"),i.insert("rect",":first-child"),{shapeSvg:t,bbox:s,halfPadding:l,label:i}},"insertLabel"),je=o((t,e)=>{let r=e.node().getBBox();t.width=r.width,t.height=r.height},"updateNodeBounds"),ht=o((t,e)=>(t.look==="handDrawn"?"rough-node":"node")+" "+t.cssClasses+" "+(e||""),"getNodeClasses");o(Xt,"createPathFromPoints");o($o,"generateFullSineWavePoints");o(Bw,"generateCirclePoints")});function V8e(t,e){return t.intersect(e)}var fK,dK=N(()=>{"use strict";o(V8e,"intersectNode");fK=V8e});function U8e(t,e,r,n){var i=t.x,a=t.y,s=i-n.x,l=a-n.y,u=Math.sqrt(e*e*l*l+r*r*s*s),h=Math.abs(e*r*s/u);n.x{"use strict";o(U8e,"intersectEllipse");Fw=U8e});function H8e(t,e,r){return Fw(t,e,e,r)}var pK,mK=N(()=>{"use strict";OD();o(H8e,"intersectCircle");pK=H8e});function W8e(t,e,r,n){var i,a,s,l,u,h,f,d,p,m,g,y,v,x,b;if(i=e.y-t.y,s=t.x-e.x,u=e.x*t.y-t.x*e.y,p=i*r.x+s*r.y+u,m=i*n.x+s*n.y+u,!(p!==0&&m!==0&&gK(p,m))&&(a=n.y-r.y,l=r.x-n.x,h=n.x*r.y-r.x*n.y,f=a*t.x+l*t.y+h,d=a*e.x+l*e.y+h,!(f!==0&&d!==0&&gK(f,d))&&(g=i*l-a*s,g!==0)))return y=Math.abs(g/2),v=s*h-l*u,x=v<0?(v-y)/g:(v+y)/g,v=a*u-i*h,b=v<0?(v-y)/g:(v+y)/g,{x,y:b}}function gK(t,e){return t*e>0}var yK,vK=N(()=>{"use strict";o(W8e,"intersectLine");o(gK,"sameSign");yK=W8e});function q8e(t,e,r){let n=t.x,i=t.y,a=[],s=Number.POSITIVE_INFINITY,l=Number.POSITIVE_INFINITY;typeof e.forEach=="function"?e.forEach(function(f){s=Math.min(s,f.x),l=Math.min(l,f.y)}):(s=Math.min(s,e.x),l=Math.min(l,e.y));let u=n-t.width/2-s,h=i-t.height/2-l;for(let f=0;f1&&a.sort(function(f,d){let p=f.x-r.x,m=f.y-r.y,g=Math.sqrt(p*p+m*m),y=d.x-r.x,v=d.y-r.y,x=Math.sqrt(y*y+v*v);return g{"use strict";vK();o(q8e,"intersectPolygon");xK=q8e});var Y8e,qh,PD=N(()=>{"use strict";Y8e=o((t,e)=>{var r=t.x,n=t.y,i=e.x-r,a=e.y-n,s=t.width/2,l=t.height/2,u,h;return Math.abs(a)*s>Math.abs(i)*l?(a<0&&(l=-l),u=a===0?0:l*i/a,h=l):(i<0&&(s=-s),u=s,h=i===0?0:s*a/i),{x:r+u,y:n+h}},"intersectRect"),qh=Y8e});var Ye,Ht=N(()=>{"use strict";dK();mK();OD();bK();PD();Ye={node:fK,circle:pK,ellipse:Fw,polygon:xK,rect:qh}});var wK,yc,X8e,BD,Qe,Ke,Ut=N(()=>{"use strict";zt();wK=o(t=>{let{handDrawnSeed:e}=me();return{fill:t,hachureAngle:120,hachureGap:4,fillWeight:2,roughness:.7,stroke:t,seed:e}},"solidStateFill"),yc=o(t=>{let e=X8e([...t.cssCompiledStyles||[],...t.cssStyles||[]]);return{stylesMap:e,stylesArray:[...e]}},"compileStyles"),X8e=o(t=>{let e=new Map;return t.forEach(r=>{let[n,i]=r.split(":");e.set(n.trim(),i?.trim())}),e},"styles2Map"),BD=o(t=>t==="color"||t==="font-size"||t==="font-family"||t==="font-weight"||t==="font-style"||t==="text-decoration"||t==="text-align"||t==="text-transform"||t==="line-height"||t==="letter-spacing"||t==="word-spacing"||t==="text-shadow"||t==="text-overflow"||t==="white-space"||t==="word-wrap"||t==="word-break"||t==="overflow-wrap"||t==="hyphens","isLabelStyle"),Qe=o(t=>{let{stylesArray:e}=yc(t),r=[],n=[],i=[],a=[];return e.forEach(s=>{let l=s[0];BD(l)?r.push(s.join(":")+" !important"):(n.push(s.join(":")+" !important"),l.includes("stroke")&&i.push(s.join(":")+" !important"),l==="fill"&&a.push(s.join(":")+" !important"))}),{labelStyles:r.join(";"),nodeStyles:n.join(";"),stylesArray:e,borderStyles:i,backgroundStyles:a}},"styles2String"),Ke=o((t,e)=>{let{themeVariables:r,handDrawnSeed:n}=me(),{nodeBorder:i,mainBkg:a}=r,{stylesMap:s}=yc(t);return Object.assign({roughness:.7,fill:s.get("fill")||a,fillStyle:"hachure",fillWeight:4,hachureGap:5.2,stroke:s.get("stroke")||i,seed:n,strokeWidth:s.get("stroke-width")?.replace("px","")||1.3,fillLineDash:[0,0]},e)},"userNodeOverrides")});function FD(t,e,r){if(t&&t.length){let[n,i]=e,a=Math.PI/180*r,s=Math.cos(a),l=Math.sin(a);for(let u of t){let[h,f]=u;u[0]=(h-n)*s-(f-i)*l+n,u[1]=(h-n)*l+(f-i)*s+i}}}function j8e(t,e){return t[0]===e[0]&&t[1]===e[1]}function K8e(t,e,r,n=1){let i=r,a=Math.max(e,.1),s=t[0]&&t[0][0]&&typeof t[0][0]=="number"?[t]:t,l=[0,0];if(i)for(let h of s)FD(h,l,i);let u=function(h,f,d){let p=[];for(let b of h){let w=[...b];j8e(w[0],w[w.length-1])||w.push([w[0][0],w[0][1]]),w.length>2&&p.push(w)}let m=[];f=Math.max(f,.1);let g=[];for(let b of p)for(let w=0;wb.yminw.ymin?1:b.xw.x?1:b.ymax===w.ymax?0:(b.ymax-w.ymax)/Math.abs(b.ymax-w.ymax)),!g.length)return m;let y=[],v=g[0].ymin,x=0;for(;y.length||g.length;){if(g.length){let b=-1;for(let w=0;wv);w++)b=w;g.splice(0,b+1).forEach(w=>{y.push({s:v,edge:w})})}if(y=y.filter(b=>!(b.edge.ymax<=v)),y.sort((b,w)=>b.edge.x===w.edge.x?0:(b.edge.x-w.edge.x)/Math.abs(b.edge.x-w.edge.x)),(d!==1||x%f==0)&&y.length>1)for(let b=0;b=y.length)break;let C=y[b].edge,T=y[w].edge;m.push([[Math.round(C.x),v],[Math.round(T.x),v]])}v+=d,y.forEach(b=>{b.edge.x=b.edge.x+d*b.edge.islope}),x++}return m}(s,a,n);if(i){for(let h of s)FD(h,l,-i);(function(h,f,d){let p=[];h.forEach(m=>p.push(...m)),FD(p,f,d)})(u,l,-i)}return u}function C2(t,e){var r;let n=e.hachureAngle+90,i=e.hachureGap;i<0&&(i=4*e.strokeWidth),i=Math.round(Math.max(i,.1));let a=1;return e.roughness>=1&&(((r=e.randomizer)===null||r===void 0?void 0:r.next())||Math.random())>.7&&(a=i),K8e(t,i,n,a||1)}function Yw(t){let e=t[0],r=t[1];return Math.sqrt(Math.pow(e[0]-r[0],2)+Math.pow(e[1]-r[1],2))}function zD(t,e){return t.type===e}function eL(t){let e=[],r=function(s){let l=new Array;for(;s!=="";)if(s.match(/^([ \t\r\n,]+)/))s=s.substr(RegExp.$1.length);else if(s.match(/^([aAcChHlLmMqQsStTvVzZ])/))l[l.length]={type:Q8e,text:RegExp.$1},s=s.substr(RegExp.$1.length);else{if(!s.match(/^(([-+]?[0-9]+(\.[0-9]*)?|[-+]?\.[0-9]+)([eE][-+]?[0-9]+)?)/))return[];l[l.length]={type:$D,text:`${parseFloat(RegExp.$1)}`},s=s.substr(RegExp.$1.length)}return l[l.length]={type:TK,text:""},l}(t),n="BOD",i=0,a=r[i];for(;!zD(a,TK);){let s=0,l=[];if(n==="BOD"){if(a.text!=="M"&&a.text!=="m")return eL("M0,0"+t);i++,s=$w[a.text],n=a.text}else zD(a,$D)?s=$w[n]:(i++,s=$w[a.text],n=a.text);if(!(i+sf%2?h+r:h+e);a.push({key:"C",data:u}),e=u[4],r=u[5];break}case"Q":a.push({key:"Q",data:[...l]}),e=l[2],r=l[3];break;case"q":{let u=l.map((h,f)=>f%2?h+r:h+e);a.push({key:"Q",data:u}),e=u[2],r=u[3];break}case"A":a.push({key:"A",data:[...l]}),e=l[5],r=l[6];break;case"a":e+=l[5],r+=l[6],a.push({key:"A",data:[l[0],l[1],l[2],l[3],l[4],e,r]});break;case"H":a.push({key:"H",data:[...l]}),e=l[0];break;case"h":e+=l[0],a.push({key:"H",data:[e]});break;case"V":a.push({key:"V",data:[...l]}),r=l[0];break;case"v":r+=l[0],a.push({key:"V",data:[r]});break;case"S":a.push({key:"S",data:[...l]}),e=l[2],r=l[3];break;case"s":{let u=l.map((h,f)=>f%2?h+r:h+e);a.push({key:"S",data:u}),e=u[2],r=u[3];break}case"T":a.push({key:"T",data:[...l]}),e=l[0],r=l[1];break;case"t":e+=l[0],r+=l[1],a.push({key:"T",data:[e,r]});break;case"Z":case"z":a.push({key:"Z",data:[]}),e=n,r=i}return a}function RK(t){let e=[],r="",n=0,i=0,a=0,s=0,l=0,u=0;for(let{key:h,data:f}of t){switch(h){case"M":e.push({key:"M",data:[...f]}),[n,i]=f,[a,s]=f;break;case"C":e.push({key:"C",data:[...f]}),n=f[4],i=f[5],l=f[2],u=f[3];break;case"L":e.push({key:"L",data:[...f]}),[n,i]=f;break;case"H":n=f[0],e.push({key:"L",data:[n,i]});break;case"V":i=f[0],e.push({key:"L",data:[n,i]});break;case"S":{let d=0,p=0;r==="C"||r==="S"?(d=n+(n-l),p=i+(i-u)):(d=n,p=i),e.push({key:"C",data:[d,p,...f]}),l=f[0],u=f[1],n=f[2],i=f[3];break}case"T":{let[d,p]=f,m=0,g=0;r==="Q"||r==="T"?(m=n+(n-l),g=i+(i-u)):(m=n,g=i);let y=n+2*(m-n)/3,v=i+2*(g-i)/3,x=d+2*(m-d)/3,b=p+2*(g-p)/3;e.push({key:"C",data:[y,v,x,b,d,p]}),l=m,u=g,n=d,i=p;break}case"Q":{let[d,p,m,g]=f,y=n+2*(d-n)/3,v=i+2*(p-i)/3,x=m+2*(d-m)/3,b=g+2*(p-g)/3;e.push({key:"C",data:[y,v,x,b,m,g]}),l=d,u=p,n=m,i=g;break}case"A":{let d=Math.abs(f[0]),p=Math.abs(f[1]),m=f[2],g=f[3],y=f[4],v=f[5],x=f[6];d===0||p===0?(e.push({key:"C",data:[n,i,v,x,v,x]}),n=v,i=x):(n!==v||i!==x)&&(NK(n,i,v,x,d,p,m,g,y).forEach(function(b){e.push({key:"C",data:b})}),n=v,i=x);break}case"Z":e.push({key:"Z",data:[]}),n=a,i=s}r=h}return e}function k2(t,e,r){return[t*Math.cos(r)-e*Math.sin(r),t*Math.sin(r)+e*Math.cos(r)]}function NK(t,e,r,n,i,a,s,l,u,h){let f=(d=s,Math.PI*d/180);var d;let p=[],m=0,g=0,y=0,v=0;if(h)[m,g,y,v]=h;else{[t,e]=k2(t,e,-f),[r,n]=k2(r,n,-f);let D=(t-r)/2,R=(e-n)/2,O=D*D/(i*i)+R*R/(a*a);O>1&&(O=Math.sqrt(O),i*=O,a*=O);let M=i*i,P=a*a,B=M*P-M*R*R-P*D*D,F=M*R*R+P*D*D,z=(l===u?-1:1)*Math.sqrt(Math.abs(B/F));y=z*i*R/a+(t+r)/2,v=z*-a*D/i+(e+n)/2,m=Math.asin(parseFloat(((e-v)/a).toFixed(9))),g=Math.asin(parseFloat(((n-v)/a).toFixed(9))),tg&&(m-=2*Math.PI),!u&&g>m&&(g-=2*Math.PI)}let x=g-m;if(Math.abs(x)>120*Math.PI/180){let D=g,R=r,O=n;g=u&&g>m?m+120*Math.PI/180*1:m+120*Math.PI/180*-1,p=NK(r=y+i*Math.cos(g),n=v+a*Math.sin(g),R,O,i,a,s,0,u,[g,D,y,v])}x=g-m;let b=Math.cos(m),w=Math.sin(m),C=Math.cos(g),T=Math.sin(g),E=Math.tan(x/4),A=4/3*i*E,S=4/3*a*E,_=[t,e],I=[t+A*w,e-S*b],L=[r+A*T,n-S*C],k=[r,n];if(I[0]=2*_[0]-I[0],I[1]=2*_[1]-I[1],h)return[I,L,k].concat(p);{p=[I,L,k].concat(p);let D=[];for(let R=0;R2){let i=[];for(let a=0;a2*Math.PI&&(m=0,g=2*Math.PI);let y=2*Math.PI/u.curveStepCount,v=Math.min(y/2,(g-m)/2),x=_K(v,h,f,d,p,m,g,1,u);if(!u.disableMultiStroke){let b=_K(v,h,f,d,p,m,g,1.5,u);x.push(...b)}return s&&(l?x.push(...Yh(h,f,h+d*Math.cos(m),f+p*Math.sin(m),u),...Yh(h,f,h+d*Math.cos(g),f+p*Math.sin(g),u)):x.push({op:"lineTo",data:[h,f]},{op:"lineTo",data:[h+d*Math.cos(m),f+p*Math.sin(m)]})),{type:"path",ops:x}}function SK(t,e){let r=RK(LK(eL(t))),n=[],i=[0,0],a=[0,0];for(let{key:s,data:l}of r)switch(s){case"M":a=[l[0],l[1]],i=[l[0],l[1]];break;case"L":n.push(...Yh(a[0],a[1],l[0],l[1],e)),a=[l[0],l[1]];break;case"C":{let[u,h,f,d,p,m]=l;n.push(...e_e(u,h,f,d,p,m,a,e)),a=[p,m];break}case"Z":n.push(...Yh(a[0],a[1],i[0],i[1],e)),a=[i[0],i[1]]}return{type:"path",ops:n}}function GD(t,e){let r=[];for(let n of t)if(n.length){let i=e.maxRandomnessOffset||0,a=n.length;if(a>2){r.push({op:"move",data:[n[0][0]+ir(i,e),n[0][1]+ir(i,e)]});for(let s=1;s500?.4:-.0016668*u+1.233334;let f=i.maxRandomnessOffset||0;f*f*100>l&&(f=u/10);let d=f/2,p=.2+.2*OK(i),m=i.bowing*i.maxRandomnessOffset*(n-e)/200,g=i.bowing*i.maxRandomnessOffset*(t-r)/200;m=ir(m,i,h),g=ir(g,i,h);let y=[],v=o(()=>ir(d,i,h),"M"),x=o(()=>ir(f,i,h),"k"),b=i.preserveVertices;return a&&(s?y.push({op:"move",data:[t+(b?0:v()),e+(b?0:v())]}):y.push({op:"move",data:[t+(b?0:ir(f,i,h)),e+(b?0:ir(f,i,h))]})),s?y.push({op:"bcurveTo",data:[m+t+(r-t)*p+v(),g+e+(n-e)*p+v(),m+t+2*(r-t)*p+v(),g+e+2*(n-e)*p+v(),r+(b?0:v()),n+(b?0:v())]}):y.push({op:"bcurveTo",data:[m+t+(r-t)*p+x(),g+e+(n-e)*p+x(),m+t+2*(r-t)*p+x(),g+e+2*(n-e)*p+x(),r+(b?0:x()),n+(b?0:x())]}),y}function zw(t,e,r){if(!t.length)return[];let n=[];n.push([t[0][0]+ir(e,r),t[0][1]+ir(e,r)]),n.push([t[0][0]+ir(e,r),t[0][1]+ir(e,r)]);for(let i=1;i3){let a=[],s=1-r.curveTightness;i.push({op:"move",data:[t[1][0],t[1][1]]});for(let l=1;l+21&&i.push(l)):i.push(l),i.push(t[e+3])}else{let u=t[e+0],h=t[e+1],f=t[e+2],d=t[e+3],p=Vd(u,h,.5),m=Vd(h,f,.5),g=Vd(f,d,.5),y=Vd(p,m,.5),v=Vd(m,g,.5),x=Vd(y,v,.5);QD([u,p,y,x],0,r,i),QD([x,v,g,d],0,r,i)}var a,s;return i}function r_e(t,e){return qw(t,0,t.length,e)}function qw(t,e,r,n,i){let a=i||[],s=t[e],l=t[r-1],u=0,h=1;for(let f=e+1;fu&&(u=d,h=f)}return Math.sqrt(u)>n?(qw(t,e,h+1,n,a),qw(t,h,r,n,a)):(a.length||a.push(s),a.push(l)),a}function VD(t,e=.15,r){let n=[],i=(t.length-1)/3;for(let a=0;a0?qw(n,0,n.length,r):n}var S2,UD,HD,WD,qD,YD,Ms,XD,Q8e,$D,TK,$w,Z8e,io,wm,ZD,Gw,JD,Xe,Wt=N(()=>{"use strict";o(FD,"t");o(j8e,"e");o(K8e,"s");o(C2,"n");S2=class{static{o(this,"o")}constructor(e){this.helper=e}fillPolygons(e,r){return this._fillPolygons(e,r)}_fillPolygons(e,r){let n=C2(e,r);return{type:"fillSketch",ops:this.renderLines(n,r)}}renderLines(e,r){let n=[];for(let i of e)n.push(...this.helper.doubleLineOps(i[0][0],i[0][1],i[1][0],i[1][1],r));return n}};o(Yw,"a");UD=class extends S2{static{o(this,"h")}fillPolygons(e,r){let n=r.hachureGap;n<0&&(n=4*r.strokeWidth),n=Math.max(n,.1);let i=C2(e,Object.assign({},r,{hachureGap:n})),a=Math.PI/180*r.hachureAngle,s=[],l=.5*n*Math.cos(a),u=.5*n*Math.sin(a);for(let[h,f]of i)Yw([h,f])&&s.push([[h[0]-l,h[1]+u],[...f]],[[h[0]+l,h[1]-u],[...f]]);return{type:"fillSketch",ops:this.renderLines(s,r)}}},HD=class extends S2{static{o(this,"r")}fillPolygons(e,r){let n=this._fillPolygons(e,r),i=Object.assign({},r,{hachureAngle:r.hachureAngle+90}),a=this._fillPolygons(e,i);return n.ops=n.ops.concat(a.ops),n}},WD=class{static{o(this,"i")}constructor(e){this.helper=e}fillPolygons(e,r){let n=C2(e,r=Object.assign({},r,{hachureAngle:0}));return this.dotsOnLines(n,r)}dotsOnLines(e,r){let n=[],i=r.hachureGap;i<0&&(i=4*r.strokeWidth),i=Math.max(i,.1);let a=r.fillWeight;a<0&&(a=r.strokeWidth/2);let s=i/4;for(let l of e){let u=Yw(l),h=u/i,f=Math.ceil(h)-1,d=u-f*i,p=(l[0][0]+l[1][0])/2-i/4,m=Math.min(l[0][1],l[1][1]);for(let g=0;g{let l=Yw(s),u=Math.floor(l/(n+i)),h=(l+i-u*(n+i))/2,f=s[0],d=s[1];f[0]>d[0]&&(f=s[1],d=s[0]);let p=Math.atan((d[1]-f[1])/(d[0]-f[0]));for(let m=0;m{let s=Yw(a),l=Math.round(s/(2*r)),u=a[0],h=a[1];u[0]>h[0]&&(u=a[1],h=a[0]);let f=Math.atan((h[1]-u[1])/(h[0]-u[0]));for(let d=0;d2*Math.PI&&(A=0,S=2*Math.PI);let _=(S-A)/b.curveStepCount,I=[];for(let L=A;L<=S;L+=_)I.push([w+T*Math.cos(L),C+E*Math.sin(L)]);return I.push([w+T*Math.cos(S),C+E*Math.sin(S)]),I.push([w,C]),bm([I],b)}(e,r,n,i,a,s,h));return h.stroke!==io&&f.push(d),this._d("arc",f,h)}curve(e,r){let n=this._o(r),i=[],a=kK(e,n);if(n.fill&&n.fill!==io)if(n.fillStyle==="solid"){let s=kK(e,Object.assign(Object.assign({},n),{disableMultiStroke:!0,roughness:n.roughness?n.roughness+n.fillShapeRoughnessGain:0}));i.push({type:"fillPath",ops:this._mergedShape(s.ops)})}else{let s=[],l=e;if(l.length){let u=typeof l[0][0]=="number"?[l]:l;for(let h of u)h.length<3?s.push(...h):h.length===3?s.push(...VD(DK([h[0],h[0],h[1],h[2]]),10,(1+n.roughness)/2)):s.push(...VD(DK(h),10,(1+n.roughness)/2))}s.length&&i.push(bm([s],n))}return n.stroke!==io&&i.push(a),this._d("curve",i,n)}polygon(e,r){let n=this._o(r),i=[],a=Vw(e,!0,n);return n.fill&&(n.fillStyle==="solid"?i.push(GD([e],n)):i.push(bm([e],n))),n.stroke!==io&&i.push(a),this._d("polygon",i,n)}path(e,r){let n=this._o(r),i=[];if(!e)return this._d("path",i,n);e=(e||"").replace(/\n/g," ").replace(/(-\s)/g,"-").replace("/(ss)/g"," ");let a=n.fill&&n.fill!=="transparent"&&n.fill!==io,s=n.stroke!==io,l=!!(n.simplification&&n.simplification<1),u=function(f,d,p){let m=RK(LK(eL(f))),g=[],y=[],v=[0,0],x=[],b=o(()=>{x.length>=4&&y.push(...VD(x,d)),x=[]},"i"),w=o(()=>{b(),y.length&&(g.push(y),y=[])},"c");for(let{key:T,data:E}of m)switch(T){case"M":w(),v=[E[0],E[1]],y.push(v);break;case"L":b(),y.push([E[0],E[1]]);break;case"C":if(!x.length){let A=y.length?y[y.length-1]:v;x.push([A[0],A[1]])}x.push([E[0],E[1]]),x.push([E[2],E[3]]),x.push([E[4],E[5]]);break;case"Z":b(),y.push([v[0],v[1]])}if(w(),!p)return g;let C=[];for(let T of g){let E=r_e(T,p);E.length&&C.push(E)}return C}(e,1,l?4-4*(n.simplification||1):(1+n.roughness)/2),h=SK(e,n);if(a)if(n.fillStyle==="solid")if(u.length===1){let f=SK(e,Object.assign(Object.assign({},n),{disableMultiStroke:!0,roughness:n.roughness?n.roughness+n.fillShapeRoughnessGain:0}));i.push({type:"fillPath",ops:this._mergedShape(f.ops)})}else i.push(GD(u,n));else i.push(bm(u,n));return s&&(l?u.forEach(f=>{i.push(Vw(f,!1,n))}):i.push(h)),this._d("path",i,n)}opsToPath(e,r){let n="";for(let i of e.ops){let a=typeof r=="number"&&r>=0?i.data.map(s=>+s.toFixed(r)):i.data;switch(i.op){case"move":n+=`M${a[0]} ${a[1]} `;break;case"bcurveTo":n+=`C${a[0]} ${a[1]}, ${a[2]} ${a[3]}, ${a[4]} ${a[5]} `;break;case"lineTo":n+=`L${a[0]} ${a[1]} `}}return n.trim()}toPaths(e){let r=e.sets||[],n=e.options||this.defaultOptions,i=[];for(let a of r){let s=null;switch(a.type){case"path":s={d:this.opsToPath(a),stroke:n.stroke,strokeWidth:n.strokeWidth,fill:io};break;case"fillPath":s={d:this.opsToPath(a),stroke:io,strokeWidth:0,fill:n.fill||io};break;case"fillSketch":s=this.fillSketch(a,n)}s&&i.push(s)}return i}fillSketch(e,r){let n=r.fillWeight;return n<0&&(n=r.strokeWidth/2),{d:this.opsToPath(e),stroke:r.fill||io,strokeWidth:n,fill:io}}_mergedShape(e){return e.filter((r,n)=>n===0||r.op!=="move")}},ZD=class{static{o(this,"st")}constructor(e,r){this.canvas=e,this.ctx=this.canvas.getContext("2d"),this.gen=new wm(r)}draw(e){let r=e.sets||[],n=e.options||this.getDefaultOptions(),i=this.ctx,a=e.options.fixedDecimalPlaceDigits;for(let s of r)switch(s.type){case"path":i.save(),i.strokeStyle=n.stroke==="none"?"transparent":n.stroke,i.lineWidth=n.strokeWidth,n.strokeLineDash&&i.setLineDash(n.strokeLineDash),n.strokeLineDashOffset&&(i.lineDashOffset=n.strokeLineDashOffset),this._drawToContext(i,s,a),i.restore();break;case"fillPath":{i.save(),i.fillStyle=n.fill||"";let l=e.shape==="curve"||e.shape==="polygon"||e.shape==="path"?"evenodd":"nonzero";this._drawToContext(i,s,a,l),i.restore();break}case"fillSketch":this.fillSketch(i,s,n)}}fillSketch(e,r,n){let i=n.fillWeight;i<0&&(i=n.strokeWidth/2),e.save(),n.fillLineDash&&e.setLineDash(n.fillLineDash),n.fillLineDashOffset&&(e.lineDashOffset=n.fillLineDashOffset),e.strokeStyle=n.fill||"",e.lineWidth=i,this._drawToContext(e,r,n.fixedDecimalPlaceDigits),e.restore()}_drawToContext(e,r,n,i="nonzero"){e.beginPath();for(let a of r.ops){let s=typeof n=="number"&&n>=0?a.data.map(l=>+l.toFixed(n)):a.data;switch(a.op){case"move":e.moveTo(s[0],s[1]);break;case"bcurveTo":e.bezierCurveTo(s[0],s[1],s[2],s[3],s[4],s[5]);break;case"lineTo":e.lineTo(s[0],s[1])}}r.type==="fillPath"?e.fill(i):e.stroke()}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}line(e,r,n,i,a){let s=this.gen.line(e,r,n,i,a);return this.draw(s),s}rectangle(e,r,n,i,a){let s=this.gen.rectangle(e,r,n,i,a);return this.draw(s),s}ellipse(e,r,n,i,a){let s=this.gen.ellipse(e,r,n,i,a);return this.draw(s),s}circle(e,r,n,i){let a=this.gen.circle(e,r,n,i);return this.draw(a),a}linearPath(e,r){let n=this.gen.linearPath(e,r);return this.draw(n),n}polygon(e,r){let n=this.gen.polygon(e,r);return this.draw(n),n}arc(e,r,n,i,a,s,l=!1,u){let h=this.gen.arc(e,r,n,i,a,s,l,u);return this.draw(h),h}curve(e,r){let n=this.gen.curve(e,r);return this.draw(n),n}path(e,r){let n=this.gen.path(e,r);return this.draw(n),n}},Gw="http://www.w3.org/2000/svg",JD=class{static{o(this,"ot")}constructor(e,r){this.svg=e,this.gen=new wm(r)}draw(e){let r=e.sets||[],n=e.options||this.getDefaultOptions(),i=this.svg.ownerDocument||window.document,a=i.createElementNS(Gw,"g"),s=e.options.fixedDecimalPlaceDigits;for(let l of r){let u=null;switch(l.type){case"path":u=i.createElementNS(Gw,"path"),u.setAttribute("d",this.opsToPath(l,s)),u.setAttribute("stroke",n.stroke),u.setAttribute("stroke-width",n.strokeWidth+""),u.setAttribute("fill","none"),n.strokeLineDash&&u.setAttribute("stroke-dasharray",n.strokeLineDash.join(" ").trim()),n.strokeLineDashOffset&&u.setAttribute("stroke-dashoffset",`${n.strokeLineDashOffset}`);break;case"fillPath":u=i.createElementNS(Gw,"path"),u.setAttribute("d",this.opsToPath(l,s)),u.setAttribute("stroke","none"),u.setAttribute("stroke-width","0"),u.setAttribute("fill",n.fill||""),e.shape!=="curve"&&e.shape!=="polygon"||u.setAttribute("fill-rule","evenodd");break;case"fillSketch":u=this.fillSketch(i,l,n)}u&&a.appendChild(u)}return a}fillSketch(e,r,n){let i=n.fillWeight;i<0&&(i=n.strokeWidth/2);let a=e.createElementNS(Gw,"path");return a.setAttribute("d",this.opsToPath(r,n.fixedDecimalPlaceDigits)),a.setAttribute("stroke",n.fill||""),a.setAttribute("stroke-width",i+""),a.setAttribute("fill","none"),n.fillLineDash&&a.setAttribute("stroke-dasharray",n.fillLineDash.join(" ").trim()),n.fillLineDashOffset&&a.setAttribute("stroke-dashoffset",`${n.fillLineDashOffset}`),a}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}opsToPath(e,r){return this.gen.opsToPath(e,r)}line(e,r,n,i,a){let s=this.gen.line(e,r,n,i,a);return this.draw(s)}rectangle(e,r,n,i,a){let s=this.gen.rectangle(e,r,n,i,a);return this.draw(s)}ellipse(e,r,n,i,a){let s=this.gen.ellipse(e,r,n,i,a);return this.draw(s)}circle(e,r,n,i){let a=this.gen.circle(e,r,n,i);return this.draw(a)}linearPath(e,r){let n=this.gen.linearPath(e,r);return this.draw(n)}polygon(e,r){let n=this.gen.polygon(e,r);return this.draw(n)}arc(e,r,n,i,a,s,l=!1,u){let h=this.gen.arc(e,r,n,i,a,s,l,u);return this.draw(h)}curve(e,r){let n=this.gen.curve(e,r);return this.draw(n)}path(e,r){let n=this.gen.path(e,r);return this.draw(n)}},Xe={canvas:o((t,e)=>new ZD(t,e),"canvas"),svg:o((t,e)=>new JD(t,e),"svg"),generator:o(t=>new wm(t),"generator"),newSeed:o(()=>wm.newSeed(),"newSeed")}});function PK(t,e){let{labelStyles:r}=Qe(e);e.labelStyle=r;let n=ht(e),i=n;n||(i="anchor");let a=t.insert("g").attr("class",i).attr("id",e.domId||e.id),s=1,{cssStyles:l}=e,u=Xe.svg(a),h=Ke(e,{fill:"black",stroke:"none",fillStyle:"solid"});e.look!=="handDrawn"&&(h.roughness=0);let f=u.circle(0,0,s*2,h),d=a.insert(()=>f,":first-child");return d.attr("class","anchor").attr("style",$n(l)),je(e,d),e.intersect=function(p){return X.info("Circle intersect",e,s,p),Ye.circle(e,s,p)},a}var BK=N(()=>{"use strict";vt();Ft();Ht();Ut();Wt();nr();o(PK,"anchor")});function FK(t,e,r,n,i,a,s){let u=(t+r)/2,h=(e+n)/2,f=Math.atan2(n-e,r-t),d=(r-t)/2,p=(n-e)/2,m=d/i,g=p/a,y=Math.sqrt(m**2+g**2);if(y>1)throw new Error("The given radii are too small to create an arc between the points.");let v=Math.sqrt(1-y**2),x=u+v*a*Math.sin(f)*(s?-1:1),b=h-v*i*Math.cos(f)*(s?-1:1),w=Math.atan2((e-b)/a,(t-x)/i),T=Math.atan2((n-b)/a,(r-x)/i)-w;s&&T<0&&(T+=2*Math.PI),!s&&T>0&&(T-=2*Math.PI);let E=[];for(let A=0;A<20;A++){let S=A/19,_=w+S*T,I=x+i*Math.cos(_),L=b+a*Math.sin(_);E.push({x:I,y:L})}return E}async function $K(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=a.width+e.padding+20,l=a.height+e.padding,u=l/2,h=u/(2.5+l/50),{cssStyles:f}=e,d=[{x:s/2,y:-l/2},{x:-s/2,y:-l/2},...FK(-s/2,-l/2,-s/2,l/2,h,u,!1),{x:s/2,y:l/2},...FK(s/2,l/2,s/2,-l/2,h,u,!0)],p=Xe.svg(i),m=Ke(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=Xt(d),y=p.path(g,m),v=i.insert(()=>y,":first-child");return v.attr("class","basic label-container"),f&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",f),n&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",n),v.attr("transform",`translate(${h/2}, 0)`),je(e,v),e.intersect=function(x){return Ye.polygon(e,d,x)},i}var zK=N(()=>{"use strict";Ft();Ht();Ut();Wt();o(FK,"generateArcPoints");o($K,"bowTieRect")});function La(t,e,r,n){return t.insert("polygon",":first-child").attr("points",n.map(function(i){return i.x+","+i.y}).join(" ")).attr("class","label-container").attr("transform","translate("+-e/2+","+r/2+")")}var Nu=N(()=>{"use strict";o(La,"insertPolygonShape")});async function GK(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=a.height+e.padding,l=12,u=a.width+e.padding+l,h=0,f=u,d=-s,p=0,m=[{x:h+l,y:d},{x:f,y:d},{x:f,y:p},{x:h,y:p},{x:h,y:d+l},{x:h+l,y:d}],g,{cssStyles:y}=e;if(e.look==="handDrawn"){let v=Xe.svg(i),x=Ke(e,{}),b=Xt(m),w=v.path(b,x);g=i.insert(()=>w,":first-child").attr("transform",`translate(${-u/2}, ${s/2})`),y&&g.attr("style",y)}else g=La(i,u,s,m);return n&&g.attr("style",n),je(e,g),e.intersect=function(v){return Ye.polygon(e,m,v)},i}var VK=N(()=>{"use strict";Ft();Ht();Ut();Wt();Nu();Ft();o(GK,"card")});function UK(t,e){let{nodeStyles:r}=Qe(e);e.label="";let n=t.insert("g").attr("class",ht(e)).attr("id",e.domId??e.id),{cssStyles:i}=e,a=Math.max(28,e.width??0),s=[{x:0,y:a/2},{x:a/2,y:0},{x:0,y:-a/2},{x:-a/2,y:0}],l=Xe.svg(n),u=Ke(e,{});e.look!=="handDrawn"&&(u.roughness=0,u.fillStyle="solid");let h=Xt(s),f=l.path(h,u),d=n.insert(()=>f,":first-child");return i&&e.look!=="handDrawn"&&d.selectAll("path").attr("style",i),r&&e.look!=="handDrawn"&&d.selectAll("path").attr("style",r),e.width=28,e.height=28,e.intersect=function(p){return Ye.polygon(e,s,p)},n}var HK=N(()=>{"use strict";Ht();Wt();Ut();Ft();o(UK,"choice")});async function WK(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,halfPadding:s}=await pt(t,e,ht(e)),l=a.width/2+s,u,{cssStyles:h}=e;if(e.look==="handDrawn"){let f=Xe.svg(i),d=Ke(e,{}),p=f.circle(0,0,l*2,d);u=i.insert(()=>p,":first-child"),u.attr("class","basic label-container").attr("style",$n(h))}else u=i.insert("circle",":first-child").attr("class","basic label-container").attr("style",n).attr("r",l).attr("cx",0).attr("cy",0);return je(e,u),e.intersect=function(f){return X.info("Circle intersect",e,l,f),Ye.circle(e,l,f)},i}var qK=N(()=>{"use strict";vt();Ft();Ht();Ut();Wt();nr();o(WK,"circle")});function n_e(t){let e=Math.cos(Math.PI/4),r=Math.sin(Math.PI/4),n=t*2,i={x:n/2*e,y:n/2*r},a={x:-(n/2)*e,y:n/2*r},s={x:-(n/2)*e,y:-(n/2)*r},l={x:n/2*e,y:-(n/2)*r};return`M ${a.x},${a.y} L ${l.x},${l.y} - M ${i.x},${i.y} L ${s.x},${s.y}`}function YK(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r,e.label="";let i=t.insert("g").attr("class",ht(e)).attr("id",e.domId??e.id),a=Math.max(30,e?.width??0),{cssStyles:s}=e,l=Xe.svg(i),u=Ke(e,{});e.look!=="handDrawn"&&(u.roughness=0,u.fillStyle="solid");let h=l.circle(0,0,a*2,u),f=n_e(a),d=l.path(f,u),p=i.insert(()=>h,":first-child");return p.insert(()=>d),s&&e.look!=="handDrawn"&&p.selectAll("path").attr("style",s),n&&e.look!=="handDrawn"&&p.selectAll("path").attr("style",n),je(e,p),e.intersect=function(m){return X.info("crossedCircle intersect",e,{radius:a,point:m}),Ye.circle(e,a,m)},i}var XK=N(()=>{"use strict";vt();Ft();Ut();Wt();Ht();o(n_e,"createLine");o(YK,"crossedCircle")});function Xh(t,e,r,n=100,i=0,a=180){let s=[],l=i*Math.PI/180,f=(a*Math.PI/180-l)/(n-1);for(let d=0;dw,":first-child").attr("stroke-opacity",0),C.insert(()=>x,":first-child"),C.attr("class","text"),f&&e.look!=="handDrawn"&&C.selectAll("path").attr("style",f),n&&e.look!=="handDrawn"&&C.selectAll("path").attr("style",n),C.attr("transform",`translate(${h}, 0)`),s.attr("transform",`translate(${-l/2+h-(a.x-(a.left??0))},${-u/2+(e.padding??0)/2-(a.y-(a.top??0))})`),je(e,C),e.intersect=function(T){return Ye.polygon(e,p,T)},i}var KK=N(()=>{"use strict";Ft();Ht();Ut();Wt();o(Xh,"generateCirclePoints");o(jK,"curlyBraceLeft")});function jh(t,e,r,n=100,i=0,a=180){let s=[],l=i*Math.PI/180,f=(a*Math.PI/180-l)/(n-1);for(let d=0;dw,":first-child").attr("stroke-opacity",0),C.insert(()=>x,":first-child"),C.attr("class","text"),f&&e.look!=="handDrawn"&&C.selectAll("path").attr("style",f),n&&e.look!=="handDrawn"&&C.selectAll("path").attr("style",n),C.attr("transform",`translate(${-h}, 0)`),s.attr("transform",`translate(${-l/2+(e.padding??0)/2-(a.x-(a.left??0))},${-u/2+(e.padding??0)/2-(a.y-(a.top??0))})`),je(e,C),e.intersect=function(T){return Ye.polygon(e,p,T)},i}var ZK=N(()=>{"use strict";Ft();Ht();Ut();Wt();o(jh,"generateCirclePoints");o(QK,"curlyBraceRight")});function Ra(t,e,r,n=100,i=0,a=180){let s=[],l=i*Math.PI/180,f=(a*Math.PI/180-l)/(n-1);for(let d=0;dA,":first-child").attr("stroke-opacity",0),S.insert(()=>b,":first-child"),S.insert(()=>T,":first-child"),S.attr("class","text"),f&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",f),n&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",n),S.attr("transform",`translate(${h-h/4}, 0)`),s.attr("transform",`translate(${-l/2+(e.padding??0)/2-(a.x-(a.left??0))},${-u/2+(e.padding??0)/2-(a.y-(a.top??0))})`),je(e,S),e.intersect=function(_){return Ye.polygon(e,m,_)},i}var eQ=N(()=>{"use strict";Ft();Ht();Ut();Wt();o(Ra,"generateCirclePoints");o(JK,"curlyBraces")});async function tQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=80,l=20,u=Math.max(s,(a.width+(e.padding??0)*2)*1.25,e?.width??0),h=Math.max(l,a.height+(e.padding??0)*2,e?.height??0),f=h/2,{cssStyles:d}=e,p=Xe.svg(i),m=Ke(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=u,y=h,v=g-f,x=y/4,b=[{x:v,y:0},{x,y:0},{x:0,y:y/2},{x,y},{x:v,y},...Bw(-v,-y/2,f,50,270,90)],w=Xt(b),C=p.path(w,m),T=i.insert(()=>C,":first-child");return T.attr("class","basic label-container"),d&&e.look!=="handDrawn"&&T.selectChildren("path").attr("style",d),n&&e.look!=="handDrawn"&&T.selectChildren("path").attr("style",n),T.attr("transform",`translate(${-u/2}, ${-h/2})`),je(e,T),e.intersect=function(E){return Ye.polygon(e,b,E)},i}var rQ=N(()=>{"use strict";Ft();Ht();Ut();Wt();o(tQ,"curvedTrapezoid")});async function nQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=Math.max(a.width+e.padding,e.width??0),u=l/2,h=u/(2.5+l/50),f=Math.max(a.height+h+e.padding,e.height??0),d,{cssStyles:p}=e;if(e.look==="handDrawn"){let m=Xe.svg(i),g=a_e(0,0,l,f,u,h),y=s_e(0,h,l,f,u,h),v=m.path(g,Ke(e,{})),x=m.path(y,Ke(e,{fill:"none"}));d=i.insert(()=>x,":first-child"),d=i.insert(()=>v,":first-child"),d.attr("class","basic label-container"),p&&d.attr("style",p)}else{let m=i_e(0,0,l,f,u,h);d=i.insert("path",":first-child").attr("d",m).attr("class","basic label-container").attr("style",$n(p)).attr("style",n)}return d.attr("label-offset-y",h),d.attr("transform",`translate(${-l/2}, ${-(f/2+h)})`),je(e,d),s.attr("transform",`translate(${-(a.width/2)-(a.x-(a.left??0))}, ${-(a.height/2)+(e.padding??0)/1.5-(a.y-(a.top??0))})`),e.intersect=function(m){let g=Ye.rect(e,m),y=g.x-(e.x??0);if(u!=0&&(Math.abs(y)<(e.width??0)/2||Math.abs(y)==(e.width??0)/2&&Math.abs(g.y-(e.y??0))>(e.height??0)/2-h)){let v=h*h*(1-y*y/(u*u));v>0&&(v=Math.sqrt(v)),v=h-v,m.y-(e.y??0)>0&&(v=-v),g.y+=v}return g},i}var i_e,a_e,s_e,iQ=N(()=>{"use strict";Ft();Ht();Ut();Wt();nr();i_e=o((t,e,r,n,i,a)=>[`M${t},${e+a}`,`a${i},${a} 0,0,0 ${r},0`,`a${i},${a} 0,0,0 ${-r},0`,`l0,${n}`,`a${i},${a} 0,0,0 ${r},0`,`l0,${-n}`].join(" "),"createCylinderPathD"),a_e=o((t,e,r,n,i,a)=>[`M${t},${e+a}`,`M${t+r},${e+a}`,`a${i},${a} 0,0,0 ${-r},0`,`l0,${n}`,`a${i},${a} 0,0,0 ${r},0`,`l0,${-n}`].join(" "),"createOuterCylinderPathD"),s_e=o((t,e,r,n,i,a)=>[`M${t-r/2},${-n/2}`,`a${i},${a} 0,0,0 ${r},0`].join(" "),"createInnerCylinderPathD");o(nQ,"cylinder")});async function aQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=a.width+e.padding,u=a.height+e.padding,h=u*.2,f=-l/2,d=-u/2-h/2,{cssStyles:p}=e,m=Xe.svg(i),g=Ke(e,{});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=[{x:f,y:d+h},{x:-f,y:d+h},{x:-f,y:-d},{x:f,y:-d},{x:f,y:d},{x:-f,y:d},{x:-f,y:d+h}],v=m.polygon(y.map(b=>[b.x,b.y]),g),x=i.insert(()=>v,":first-child");return x.attr("class","basic label-container"),p&&e.look!=="handDrawn"&&x.selectAll("path").attr("style",p),n&&e.look!=="handDrawn"&&x.selectAll("path").attr("style",n),s.attr("transform",`translate(${f+(e.padding??0)/2-(a.x-(a.left??0))}, ${d+h+(e.padding??0)/2-(a.y-(a.top??0))})`),je(e,x),e.intersect=function(b){return Ye.rect(e,b)},i}var sQ=N(()=>{"use strict";Ft();Ht();Ut();Wt();o(aQ,"dividedRectangle")});async function oQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,halfPadding:s}=await pt(t,e,ht(e)),u=a.width/2+s+5,h=a.width/2+s,f,{cssStyles:d}=e;if(e.look==="handDrawn"){let p=Xe.svg(i),m=Ke(e,{roughness:.2,strokeWidth:2.5}),g=Ke(e,{roughness:.2,strokeWidth:1.5}),y=p.circle(0,0,u*2,m),v=p.circle(0,0,h*2,g);f=i.insert("g",":first-child"),f.attr("class",$n(e.cssClasses)).attr("style",$n(d)),f.node()?.appendChild(y),f.node()?.appendChild(v)}else{f=i.insert("g",":first-child");let p=f.insert("circle",":first-child"),m=f.insert("circle");f.attr("class","basic label-container").attr("style",n),p.attr("class","outer-circle").attr("style",n).attr("r",u).attr("cx",0).attr("cy",0),m.attr("class","inner-circle").attr("style",n).attr("r",h).attr("cx",0).attr("cy",0)}return je(e,f),e.intersect=function(p){return X.info("DoubleCircle intersect",e,u,p),Ye.circle(e,u,p)},i}var lQ=N(()=>{"use strict";vt();Ft();Ht();Ut();Wt();nr();o(oQ,"doublecircle")});function cQ(t,e,{config:{themeVariables:r}}){let{labelStyles:n,nodeStyles:i}=Qe(e);e.label="",e.labelStyle=n;let a=t.insert("g").attr("class",ht(e)).attr("id",e.domId??e.id),s=7,{cssStyles:l}=e,u=Xe.svg(a),{nodeBorder:h}=r,f=Ke(e,{fillStyle:"solid"});e.look!=="handDrawn"&&(f.roughness=0);let d=u.circle(0,0,s*2,f),p=a.insert(()=>d,":first-child");return p.selectAll("path").attr("style",`fill: ${h} !important;`),l&&l.length>0&&e.look!=="handDrawn"&&p.selectAll("path").attr("style",l),i&&e.look!=="handDrawn"&&p.selectAll("path").attr("style",i),je(e,p),e.intersect=function(m){return X.info("filledCircle intersect",e,{radius:s,point:m}),Ye.circle(e,s,m)},a}var uQ=N(()=>{"use strict";Wt();vt();Ht();Ut();Ft();o(cQ,"filledCircle")});async function hQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=a.width+(e.padding??0),u=l+a.height,h=l+a.height,f=[{x:0,y:-u},{x:h,y:-u},{x:h/2,y:0}],{cssStyles:d}=e,p=Xe.svg(i),m=Ke(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=Xt(f),y=p.path(g,m),v=i.insert(()=>y,":first-child").attr("transform",`translate(${-u/2}, ${u/2})`);return d&&e.look!=="handDrawn"&&v.selectChildren("path").attr("style",d),n&&e.look!=="handDrawn"&&v.selectChildren("path").attr("style",n),e.width=l,e.height=u,je(e,v),s.attr("transform",`translate(${-a.width/2-(a.x-(a.left??0))}, ${-u/2+(e.padding??0)/2+(a.y-(a.top??0))})`),e.intersect=function(x){return X.info("Triangle intersect",e,f,x),Ye.polygon(e,f,x)},i}var fQ=N(()=>{"use strict";vt();Ft();Ht();Ut();Wt();Ft();o(hQ,"flippedTriangle")});function dQ(t,e,{dir:r,config:{state:n,themeVariables:i}}){let{nodeStyles:a}=Qe(e);e.label="";let s=t.insert("g").attr("class",ht(e)).attr("id",e.domId??e.id),{cssStyles:l}=e,u=Math.max(70,e?.width??0),h=Math.max(10,e?.height??0);r==="LR"&&(u=Math.max(10,e?.width??0),h=Math.max(70,e?.height??0));let f=-1*u/2,d=-1*h/2,p=Xe.svg(s),m=Ke(e,{stroke:i.lineColor,fill:i.lineColor});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=p.rectangle(f,d,u,h,m),y=s.insert(()=>g,":first-child");l&&e.look!=="handDrawn"&&y.selectAll("path").attr("style",l),a&&e.look!=="handDrawn"&&y.selectAll("path").attr("style",a),je(e,y);let v=n?.padding??0;return e.width&&e.height&&(e.width+=v/2||0,e.height+=v/2||0),e.intersect=function(x){return Ye.rect(e,x)},s}var pQ=N(()=>{"use strict";Wt();Ht();Ut();Ft();o(dQ,"forkJoin")});async function mQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let i=80,a=50,{shapeSvg:s,bbox:l}=await pt(t,e,ht(e)),u=Math.max(i,l.width+(e.padding??0)*2,e?.width??0),h=Math.max(a,l.height+(e.padding??0)*2,e?.height??0),f=h/2,{cssStyles:d}=e,p=Xe.svg(s),m=Ke(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=[{x:-u/2,y:-h/2},{x:u/2-f,y:-h/2},...Bw(-u/2+f,0,f,50,90,270),{x:u/2-f,y:h/2},{x:-u/2,y:h/2}],y=Xt(g),v=p.path(y,m),x=s.insert(()=>v,":first-child");return x.attr("class","basic label-container"),d&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",d),n&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",n),je(e,x),e.intersect=function(b){return X.info("Pill intersect",e,{radius:f,point:b}),Ye.polygon(e,g,b)},s}var gQ=N(()=>{"use strict";vt();Ft();Ht();Ut();Wt();o(mQ,"halfRoundedRectangle")});async function yQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=4,l=a.height+e.padding,u=l/s,h=a.width+2*u+e.padding,f=[{x:u,y:0},{x:h-u,y:0},{x:h,y:-l/2},{x:h-u,y:-l},{x:u,y:-l},{x:0,y:-l/2}],d,{cssStyles:p}=e;if(e.look==="handDrawn"){let m=Xe.svg(i),g=Ke(e,{}),y=o_e(0,0,h,l,u),v=m.path(y,g);d=i.insert(()=>v,":first-child").attr("transform",`translate(${-h/2}, ${l/2})`),p&&d.attr("style",p)}else d=La(i,h,l,f);return n&&d.attr("style",n),e.width=h,e.height=l,je(e,d),e.intersect=function(m){return Ye.polygon(e,f,m)},i}var o_e,vQ=N(()=>{"use strict";Ft();Ht();Ut();Wt();Nu();o_e=o((t,e,r,n,i)=>[`M${t+i},${e}`,`L${t+r-i},${e}`,`L${t+r},${e-n/2}`,`L${t+r-i},${e-n}`,`L${t+i},${e-n}`,`L${t},${e-n/2}`,"Z"].join(" "),"createHexagonPathD");o(yQ,"hexagon")});async function xQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.label="",e.labelStyle=r;let{shapeSvg:i}=await pt(t,e,ht(e)),a=Math.max(30,e?.width??0),s=Math.max(30,e?.height??0),{cssStyles:l}=e,u=Xe.svg(i),h=Ke(e,{});e.look!=="handDrawn"&&(h.roughness=0,h.fillStyle="solid");let f=[{x:0,y:0},{x:a,y:0},{x:0,y:s},{x:a,y:s}],d=Xt(f),p=u.path(d,h),m=i.insert(()=>p,":first-child");return m.attr("class","basic label-container"),l&&e.look!=="handDrawn"&&m.selectChildren("path").attr("style",l),n&&e.look!=="handDrawn"&&m.selectChildren("path").attr("style",n),m.attr("transform",`translate(${-a/2}, ${-s/2})`),je(e,m),e.intersect=function(g){return X.info("Pill intersect",e,{points:f}),Ye.polygon(e,f,g)},i}var bQ=N(()=>{"use strict";vt();Ft();Ht();Ut();Wt();o(xQ,"hourglass")});async function wQ(t,e,{config:{themeVariables:r,flowchart:n}}){let{labelStyles:i}=Qe(e);e.labelStyle=i;let a=e.assetHeight??48,s=e.assetWidth??48,l=Math.max(a,s),u=n?.wrappingWidth;e.width=Math.max(l,u??0);let{shapeSvg:h,bbox:f,label:d}=await pt(t,e,"icon-shape default"),p=e.pos==="t",m=l,g=l,{nodeBorder:y}=r,{stylesMap:v}=yc(e),x=-g/2,b=-m/2,w=e.label?8:0,C=Xe.svg(h),T=Ke(e,{stroke:"none",fill:"none"});e.look!=="handDrawn"&&(T.roughness=0,T.fillStyle="solid");let E=C.rectangle(x,b,g,m,T),A=Math.max(g,f.width),S=m+f.height+w,_=C.rectangle(-A/2,-S/2,A,S,{...T,fill:"transparent",stroke:"none"}),I=h.insert(()=>E,":first-child"),L=h.insert(()=>_);if(e.icon){let k=h.append("g");k.html(`${await bs(e.icon,{height:l,width:l,fallbackPrefix:""})}`);let D=k.node().getBBox(),R=D.width,O=D.height,M=D.x,P=D.y;k.attr("transform",`translate(${-R/2-M},${p?f.height/2+w/2-O/2-P:-f.height/2-w/2-O/2-P})`),k.attr("style",`color: ${v.get("stroke")??y};`)}return d.attr("transform",`translate(${-f.width/2-(f.x-(f.left??0))},${p?-S/2:S/2-f.height})`),I.attr("transform",`translate(0,${p?f.height/2+w/2:-f.height/2-w/2})`),je(e,L),e.intersect=function(k){if(X.info("iconSquare intersect",e,k),!e.label)return Ye.rect(e,k);let D=e.x??0,R=e.y??0,O=e.height??0,M=[];return p?M=[{x:D-f.width/2,y:R-O/2},{x:D+f.width/2,y:R-O/2},{x:D+f.width/2,y:R-O/2+f.height+w},{x:D+g/2,y:R-O/2+f.height+w},{x:D+g/2,y:R+O/2},{x:D-g/2,y:R+O/2},{x:D-g/2,y:R-O/2+f.height+w},{x:D-f.width/2,y:R-O/2+f.height+w}]:M=[{x:D-g/2,y:R-O/2},{x:D+g/2,y:R-O/2},{x:D+g/2,y:R-O/2+m},{x:D+f.width/2,y:R-O/2+m},{x:D+f.width/2/2,y:R+O/2},{x:D-f.width/2,y:R+O/2},{x:D-f.width/2,y:R-O/2+m},{x:D-g/2,y:R-O/2+m}],Ye.polygon(e,M,k)},h}var TQ=N(()=>{"use strict";Wt();vt();Yl();Ht();Ut();Ft();o(wQ,"icon")});async function kQ(t,e,{config:{themeVariables:r,flowchart:n}}){let{labelStyles:i}=Qe(e);e.labelStyle=i;let a=e.assetHeight??48,s=e.assetWidth??48,l=Math.max(a,s),u=n?.wrappingWidth;e.width=Math.max(l,u??0);let{shapeSvg:h,bbox:f,label:d}=await pt(t,e,"icon-shape default"),p=20,m=e.label?8:0,g=e.pos==="t",{nodeBorder:y,mainBkg:v}=r,{stylesMap:x}=yc(e),b=Xe.svg(h),w=Ke(e,{});e.look!=="handDrawn"&&(w.roughness=0,w.fillStyle="solid");let C=x.get("fill");w.stroke=C??v;let T=h.append("g");e.icon&&T.html(`${await bs(e.icon,{height:l,width:l,fallbackPrefix:""})}`);let E=T.node().getBBox(),A=E.width,S=E.height,_=E.x,I=E.y,L=Math.max(A,S)*Math.SQRT2+p*2,k=b.circle(0,0,L,w),D=Math.max(L,f.width),R=L+f.height+m,O=b.rectangle(-D/2,-R/2,D,R,{...w,fill:"transparent",stroke:"none"}),M=h.insert(()=>k,":first-child"),P=h.insert(()=>O);return T.attr("transform",`translate(${-A/2-_},${g?f.height/2+m/2-S/2-I:-f.height/2-m/2-S/2-I})`),T.attr("style",`color: ${x.get("stroke")??y};`),d.attr("transform",`translate(${-f.width/2-(f.x-(f.left??0))},${g?-R/2:R/2-f.height})`),M.attr("transform",`translate(0,${g?f.height/2+m/2:-f.height/2-m/2})`),je(e,P),e.intersect=function(B){return X.info("iconSquare intersect",e,B),Ye.rect(e,B)},h}var EQ=N(()=>{"use strict";Wt();vt();Yl();Ht();Ut();Ft();o(kQ,"iconCircle")});var Na,Kh=N(()=>{"use strict";Na=o((t,e,r,n,i)=>["M",t+i,e,"H",t+r-i,"A",i,i,0,0,1,t+r,e+i,"V",e+n-i,"A",i,i,0,0,1,t+r-i,e+n,"H",t+i,"A",i,i,0,0,1,t,e+n-i,"V",e+i,"A",i,i,0,0,1,t+i,e,"Z"].join(" "),"createRoundedRectPathD")});async function SQ(t,e,{config:{themeVariables:r,flowchart:n}}){let{labelStyles:i}=Qe(e);e.labelStyle=i;let a=e.assetHeight??48,s=e.assetWidth??48,l=Math.max(a,s),u=n?.wrappingWidth;e.width=Math.max(l,u??0);let{shapeSvg:h,bbox:f,halfPadding:d,label:p}=await pt(t,e,"icon-shape default"),m=e.pos==="t",g=l+d*2,y=l+d*2,{nodeBorder:v,mainBkg:x}=r,{stylesMap:b}=yc(e),w=-y/2,C=-g/2,T=e.label?8:0,E=Xe.svg(h),A=Ke(e,{});e.look!=="handDrawn"&&(A.roughness=0,A.fillStyle="solid");let S=b.get("fill");A.stroke=S??x;let _=E.path(Na(w,C,y,g,5),A),I=Math.max(y,f.width),L=g+f.height+T,k=E.rectangle(-I/2,-L/2,I,L,{...A,fill:"transparent",stroke:"none"}),D=h.insert(()=>_,":first-child").attr("class","icon-shape2"),R=h.insert(()=>k);if(e.icon){let O=h.append("g");O.html(`${await bs(e.icon,{height:l,width:l,fallbackPrefix:""})}`);let M=O.node().getBBox(),P=M.width,B=M.height,F=M.x,z=M.y;O.attr("transform",`translate(${-P/2-F},${m?f.height/2+T/2-B/2-z:-f.height/2-T/2-B/2-z})`),O.attr("style",`color: ${b.get("stroke")??v};`)}return p.attr("transform",`translate(${-f.width/2-(f.x-(f.left??0))},${m?-L/2:L/2-f.height})`),D.attr("transform",`translate(0,${m?f.height/2+T/2:-f.height/2-T/2})`),je(e,R),e.intersect=function(O){if(X.info("iconSquare intersect",e,O),!e.label)return Ye.rect(e,O);let M=e.x??0,P=e.y??0,B=e.height??0,F=[];return m?F=[{x:M-f.width/2,y:P-B/2},{x:M+f.width/2,y:P-B/2},{x:M+f.width/2,y:P-B/2+f.height+T},{x:M+y/2,y:P-B/2+f.height+T},{x:M+y/2,y:P+B/2},{x:M-y/2,y:P+B/2},{x:M-y/2,y:P-B/2+f.height+T},{x:M-f.width/2,y:P-B/2+f.height+T}]:F=[{x:M-y/2,y:P-B/2},{x:M+y/2,y:P-B/2},{x:M+y/2,y:P-B/2+g},{x:M+f.width/2,y:P-B/2+g},{x:M+f.width/2/2,y:P+B/2},{x:M-f.width/2,y:P+B/2},{x:M-f.width/2,y:P-B/2+g},{x:M-y/2,y:P-B/2+g}],Ye.polygon(e,F,O)},h}var CQ=N(()=>{"use strict";Wt();vt();Yl();Ht();Ut();Kh();Ft();o(SQ,"iconRounded")});async function AQ(t,e,{config:{themeVariables:r,flowchart:n}}){let{labelStyles:i}=Qe(e);e.labelStyle=i;let a=e.assetHeight??48,s=e.assetWidth??48,l=Math.max(a,s),u=n?.wrappingWidth;e.width=Math.max(l,u??0);let{shapeSvg:h,bbox:f,halfPadding:d,label:p}=await pt(t,e,"icon-shape default"),m=e.pos==="t",g=l+d*2,y=l+d*2,{nodeBorder:v,mainBkg:x}=r,{stylesMap:b}=yc(e),w=-y/2,C=-g/2,T=e.label?8:0,E=Xe.svg(h),A=Ke(e,{});e.look!=="handDrawn"&&(A.roughness=0,A.fillStyle="solid");let S=b.get("fill");A.stroke=S??x;let _=E.path(Na(w,C,y,g,.1),A),I=Math.max(y,f.width),L=g+f.height+T,k=E.rectangle(-I/2,-L/2,I,L,{...A,fill:"transparent",stroke:"none"}),D=h.insert(()=>_,":first-child"),R=h.insert(()=>k);if(e.icon){let O=h.append("g");O.html(`${await bs(e.icon,{height:l,width:l,fallbackPrefix:""})}`);let M=O.node().getBBox(),P=M.width,B=M.height,F=M.x,z=M.y;O.attr("transform",`translate(${-P/2-F},${m?f.height/2+T/2-B/2-z:-f.height/2-T/2-B/2-z})`),O.attr("style",`color: ${b.get("stroke")??v};`)}return p.attr("transform",`translate(${-f.width/2-(f.x-(f.left??0))},${m?-L/2:L/2-f.height})`),D.attr("transform",`translate(0,${m?f.height/2+T/2:-f.height/2-T/2})`),je(e,R),e.intersect=function(O){if(X.info("iconSquare intersect",e,O),!e.label)return Ye.rect(e,O);let M=e.x??0,P=e.y??0,B=e.height??0,F=[];return m?F=[{x:M-f.width/2,y:P-B/2},{x:M+f.width/2,y:P-B/2},{x:M+f.width/2,y:P-B/2+f.height+T},{x:M+y/2,y:P-B/2+f.height+T},{x:M+y/2,y:P+B/2},{x:M-y/2,y:P+B/2},{x:M-y/2,y:P-B/2+f.height+T},{x:M-f.width/2,y:P-B/2+f.height+T}]:F=[{x:M-y/2,y:P-B/2},{x:M+y/2,y:P-B/2},{x:M+y/2,y:P-B/2+g},{x:M+f.width/2,y:P-B/2+g},{x:M+f.width/2/2,y:P+B/2},{x:M-f.width/2,y:P+B/2},{x:M-f.width/2,y:P-B/2+g},{x:M-y/2,y:P-B/2+g}],Ye.polygon(e,F,O)},h}var _Q=N(()=>{"use strict";Wt();vt();Yl();Ht();Kh();Ut();Ft();o(AQ,"iconSquare")});async function DQ(t,e,{config:{flowchart:r}}){let n=new Image;n.src=e?.img??"",await n.decode();let i=Number(n.naturalWidth.toString().replace("px","")),a=Number(n.naturalHeight.toString().replace("px",""));e.imageAspectRatio=i/a;let{labelStyles:s}=Qe(e);e.labelStyle=s;let l=r?.wrappingWidth;e.defaultWidth=r?.wrappingWidth;let u=Math.max(e.label?l??0:0,e?.assetWidth??i),h=e.constraint==="on"&&e?.assetHeight?e.assetHeight*e.imageAspectRatio:u,f=e.constraint==="on"?h/e.imageAspectRatio:e?.assetHeight??a;e.width=Math.max(h,l??0);let{shapeSvg:d,bbox:p,label:m}=await pt(t,e,"image-shape default"),g=e.pos==="t",y=-h/2,v=-f/2,x=e.label?8:0,b=Xe.svg(d),w=Ke(e,{});e.look!=="handDrawn"&&(w.roughness=0,w.fillStyle="solid");let C=b.rectangle(y,v,h,f,w),T=Math.max(h,p.width),E=f+p.height+x,A=b.rectangle(-T/2,-E/2,T,E,{...w,fill:"none",stroke:"none"}),S=d.insert(()=>C,":first-child"),_=d.insert(()=>A);if(e.img){let I=d.append("image");I.attr("href",e.img),I.attr("width",h),I.attr("height",f),I.attr("preserveAspectRatio","none"),I.attr("transform",`translate(${-h/2},${g?E/2-f:-E/2})`)}return m.attr("transform",`translate(${-p.width/2-(p.x-(p.left??0))},${g?-f/2-p.height/2-x/2:f/2-p.height/2+x/2})`),S.attr("transform",`translate(0,${g?p.height/2+x/2:-p.height/2-x/2})`),je(e,_),e.intersect=function(I){if(X.info("iconSquare intersect",e,I),!e.label)return Ye.rect(e,I);let L=e.x??0,k=e.y??0,D=e.height??0,R=[];return g?R=[{x:L-p.width/2,y:k-D/2},{x:L+p.width/2,y:k-D/2},{x:L+p.width/2,y:k-D/2+p.height+x},{x:L+h/2,y:k-D/2+p.height+x},{x:L+h/2,y:k+D/2},{x:L-h/2,y:k+D/2},{x:L-h/2,y:k-D/2+p.height+x},{x:L-p.width/2,y:k-D/2+p.height+x}]:R=[{x:L-h/2,y:k-D/2},{x:L+h/2,y:k-D/2},{x:L+h/2,y:k-D/2+f},{x:L+p.width/2,y:k-D/2+f},{x:L+p.width/2/2,y:k+D/2},{x:L-p.width/2,y:k+D/2},{x:L-p.width/2,y:k-D/2+f},{x:L-h/2,y:k-D/2+f}],Ye.polygon(e,R,I)},d}var LQ=N(()=>{"use strict";Wt();vt();Ht();Ut();Ft();o(DQ,"imageSquare")});async function RQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=Math.max(a.width+(e.padding??0)*2,e?.width??0),l=Math.max(a.height+(e.padding??0)*2,e?.height??0),u=[{x:0,y:0},{x:s,y:0},{x:s+3*l/6,y:-l},{x:-3*l/6,y:-l}],h,{cssStyles:f}=e;if(e.look==="handDrawn"){let d=Xe.svg(i),p=Ke(e,{}),m=Xt(u),g=d.path(m,p);h=i.insert(()=>g,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),f&&h.attr("style",f)}else h=La(i,s,l,u);return n&&h.attr("style",n),e.width=s,e.height=l,je(e,h),e.intersect=function(d){return Ye.polygon(e,u,d)},i}var NQ=N(()=>{"use strict";Ft();Ht();Ut();Wt();Nu();o(RQ,"inv_trapezoid")});async function Mu(t,e,r){let{labelStyles:n,nodeStyles:i}=Qe(e);e.labelStyle=n;let{shapeSvg:a,bbox:s}=await pt(t,e,ht(e)),l=Math.max(s.width+r.labelPaddingX*2,e?.width||0),u=Math.max(s.height+r.labelPaddingY*2,e?.height||0),h=-l/2,f=-u/2,d,{rx:p,ry:m}=e,{cssStyles:g}=e;if(r?.rx&&r.ry&&(p=r.rx,m=r.ry),e.look==="handDrawn"){let y=Xe.svg(a),v=Ke(e,{}),x=p||m?y.path(Na(h,f,l,u,p||0),v):y.rectangle(h,f,l,u,v);d=a.insert(()=>x,":first-child"),d.attr("class","basic label-container").attr("style",$n(g))}else d=a.insert("rect",":first-child"),d.attr("class","basic label-container").attr("style",i).attr("rx",$n(p)).attr("ry",$n(m)).attr("x",h).attr("y",f).attr("width",l).attr("height",u);return je(e,d),e.intersect=function(y){return Ye.rect(e,y)},a}var Tm=N(()=>{"use strict";Ft();Ht();Kh();Ut();Wt();nr();o(Mu,"drawRect")});async function MQ(t,e){let{shapeSvg:r,bbox:n,label:i}=await pt(t,e,"label"),a=r.insert("rect",":first-child");return a.attr("width",.1).attr("height",.1),r.attr("class","label edgeLabel"),i.attr("transform",`translate(${-(n.width/2)-(n.x-(n.left??0))}, ${-(n.height/2)-(n.y-(n.top??0))})`),je(e,a),e.intersect=function(u){return Ye.rect(e,u)},r}var IQ=N(()=>{"use strict";Tm();Ft();Ht();o(MQ,"labelRect")});async function OQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=Math.max(a.width+(e.padding??0),e?.width??0),l=Math.max(a.height+(e.padding??0),e?.height??0),u=[{x:0,y:0},{x:s+3*l/6,y:0},{x:s,y:-l},{x:-(3*l)/6,y:-l}],h,{cssStyles:f}=e;if(e.look==="handDrawn"){let d=Xe.svg(i),p=Ke(e,{}),m=Xt(u),g=d.path(m,p);h=i.insert(()=>g,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),f&&h.attr("style",f)}else h=La(i,s,l,u);return n&&h.attr("style",n),e.width=s,e.height=l,je(e,h),e.intersect=function(d){return Ye.polygon(e,u,d)},i}var PQ=N(()=>{"use strict";Ft();Ht();Ut();Wt();Nu();o(OQ,"lean_left")});async function BQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=Math.max(a.width+(e.padding??0),e?.width??0),l=Math.max(a.height+(e.padding??0),e?.height??0),u=[{x:-3*l/6,y:0},{x:s,y:0},{x:s+3*l/6,y:-l},{x:0,y:-l}],h,{cssStyles:f}=e;if(e.look==="handDrawn"){let d=Xe.svg(i),p=Ke(e,{}),m=Xt(u),g=d.path(m,p);h=i.insert(()=>g,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),f&&h.attr("style",f)}else h=La(i,s,l,u);return n&&h.attr("style",n),e.width=s,e.height=l,je(e,h),e.intersect=function(d){return Ye.polygon(e,u,d)},i}var FQ=N(()=>{"use strict";Ft();Ht();Ut();Wt();Nu();o(BQ,"lean_right")});function $Q(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.label="",e.labelStyle=r;let i=t.insert("g").attr("class",ht(e)).attr("id",e.domId??e.id),{cssStyles:a}=e,s=Math.max(35,e?.width??0),l=Math.max(35,e?.height??0),u=7,h=[{x:s,y:0},{x:0,y:l+u/2},{x:s-2*u,y:l+u/2},{x:0,y:2*l},{x:s,y:l-u/2},{x:2*u,y:l-u/2}],f=Xe.svg(i),d=Ke(e,{});e.look!=="handDrawn"&&(d.roughness=0,d.fillStyle="solid");let p=Xt(h),m=f.path(p,d),g=i.insert(()=>m,":first-child");return a&&e.look!=="handDrawn"&&g.selectAll("path").attr("style",a),n&&e.look!=="handDrawn"&&g.selectAll("path").attr("style",n),g.attr("transform",`translate(-${s/2},${-l})`),je(e,g),e.intersect=function(y){return X.info("lightningBolt intersect",e,y),Ye.polygon(e,h,y)},i}var zQ=N(()=>{"use strict";vt();Ft();Ut();Wt();Ht();Ft();o($Q,"lightningBolt")});async function GQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0),e.width??0),u=l/2,h=u/(2.5+l/50),f=Math.max(a.height+h+(e.padding??0),e.height??0),d=f*.1,p,{cssStyles:m}=e;if(e.look==="handDrawn"){let g=Xe.svg(i),y=c_e(0,0,l,f,u,h,d),v=u_e(0,h,l,f,u,h),x=Ke(e,{}),b=g.path(y,x),w=g.path(v,x);i.insert(()=>w,":first-child").attr("class","line"),p=i.insert(()=>b,":first-child"),p.attr("class","basic label-container"),m&&p.attr("style",m)}else{let g=l_e(0,0,l,f,u,h,d);p=i.insert("path",":first-child").attr("d",g).attr("class","basic label-container").attr("style",$n(m)).attr("style",n)}return p.attr("label-offset-y",h),p.attr("transform",`translate(${-l/2}, ${-(f/2+h)})`),je(e,p),s.attr("transform",`translate(${-(a.width/2)-(a.x-(a.left??0))}, ${-(a.height/2)+h-(a.y-(a.top??0))})`),e.intersect=function(g){let y=Ye.rect(e,g),v=y.x-(e.x??0);if(u!=0&&(Math.abs(v)<(e.width??0)/2||Math.abs(v)==(e.width??0)/2&&Math.abs(y.y-(e.y??0))>(e.height??0)/2-h)){let x=h*h*(1-v*v/(u*u));x>0&&(x=Math.sqrt(x)),x=h-x,g.y-(e.y??0)>0&&(x=-x),y.y+=x}return y},i}var l_e,c_e,u_e,VQ=N(()=>{"use strict";Ft();Ht();Ut();Wt();nr();l_e=o((t,e,r,n,i,a,s)=>[`M${t},${e+a}`,`a${i},${a} 0,0,0 ${r},0`,`a${i},${a} 0,0,0 ${-r},0`,`l0,${n}`,`a${i},${a} 0,0,0 ${r},0`,`l0,${-n}`,`M${t},${e+a+s}`,`a${i},${a} 0,0,0 ${r},0`].join(" "),"createCylinderPathD"),c_e=o((t,e,r,n,i,a,s)=>[`M${t},${e+a}`,`M${t+r},${e+a}`,`a${i},${a} 0,0,0 ${-r},0`,`l0,${n}`,`a${i},${a} 0,0,0 ${r},0`,`l0,${-n}`,`M${t},${e+a+s}`,`a${i},${a} 0,0,0 ${r},0`].join(" "),"createOuterCylinderPathD"),u_e=o((t,e,r,n,i,a)=>[`M${t-r/2},${-n/2}`,`a${i},${a} 0,0,0 ${r},0`].join(" "),"createInnerCylinderPathD");o(GQ,"linedCylinder")});async function UQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=u/4,f=u+h,{cssStyles:d}=e,p=Xe.svg(i),m=Ke(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=[{x:-l/2-l/2*.1,y:-f/2},{x:-l/2-l/2*.1,y:f/2},...$o(-l/2-l/2*.1,f/2,l/2+l/2*.1,f/2,h,.8),{x:l/2+l/2*.1,y:-f/2},{x:-l/2-l/2*.1,y:-f/2},{x:-l/2,y:-f/2},{x:-l/2,y:f/2*1.1},{x:-l/2,y:-f/2}],y=p.polygon(g.map(x=>[x.x,x.y]),m),v=i.insert(()=>y,":first-child");return v.attr("class","basic label-container"),d&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",d),n&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",n),v.attr("transform",`translate(0,${-h/2})`),s.attr("transform",`translate(${-l/2+(e.padding??0)+l/2*.1/2-(a.x-(a.left??0))},${-u/2+(e.padding??0)-h/2-(a.y-(a.top??0))})`),je(e,v),e.intersect=function(x){return Ye.polygon(e,g,x)},i}var HQ=N(()=>{"use strict";Ft();Ht();Wt();Ut();o(UQ,"linedWaveEdgedRect")});async function WQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=5,f=-l/2,d=-u/2,{cssStyles:p}=e,m=Xe.svg(i),g=Ke(e,{}),y=[{x:f-h,y:d+h},{x:f-h,y:d+u+h},{x:f+l-h,y:d+u+h},{x:f+l-h,y:d+u},{x:f+l,y:d+u},{x:f+l,y:d+u-h},{x:f+l+h,y:d+u-h},{x:f+l+h,y:d-h},{x:f+h,y:d-h},{x:f+h,y:d},{x:f,y:d},{x:f,y:d+h}],v=[{x:f,y:d+h},{x:f+l-h,y:d+h},{x:f+l-h,y:d+u},{x:f+l,y:d+u},{x:f+l,y:d},{x:f,y:d}];e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let x=Xt(y),b=m.path(x,g),w=Xt(v),C=m.path(w,{...g,fill:"none"}),T=i.insert(()=>C,":first-child");return T.insert(()=>b,":first-child"),T.attr("class","basic label-container"),p&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",p),n&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",n),s.attr("transform",`translate(${-(a.width/2)-h-(a.x-(a.left??0))}, ${-(a.height/2)+h-(a.y-(a.top??0))})`),je(e,T),e.intersect=function(E){return Ye.polygon(e,y,E)},i}var qQ=N(()=>{"use strict";Ft();Ut();Wt();Ht();o(WQ,"multiRect")});async function YQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=u/4,f=u+h,d=-l/2,p=-f/2,m=5,{cssStyles:g}=e,y=$o(d-m,p+f+m,d+l-m,p+f+m,h,.8),v=y?.[y.length-1],x=[{x:d-m,y:p+m},{x:d-m,y:p+f+m},...y,{x:d+l-m,y:v.y-m},{x:d+l,y:v.y-m},{x:d+l,y:v.y-2*m},{x:d+l+m,y:v.y-2*m},{x:d+l+m,y:p-m},{x:d+m,y:p-m},{x:d+m,y:p},{x:d,y:p},{x:d,y:p+m}],b=[{x:d,y:p+m},{x:d+l-m,y:p+m},{x:d+l-m,y:v.y-m},{x:d+l,y:v.y-m},{x:d+l,y:p},{x:d,y:p}],w=Xe.svg(i),C=Ke(e,{});e.look!=="handDrawn"&&(C.roughness=0,C.fillStyle="solid");let T=Xt(x),E=w.path(T,C),A=Xt(b),S=w.path(A,C),_=i.insert(()=>E,":first-child");return _.insert(()=>S),_.attr("class","basic label-container"),g&&e.look!=="handDrawn"&&_.selectAll("path").attr("style",g),n&&e.look!=="handDrawn"&&_.selectAll("path").attr("style",n),_.attr("transform",`translate(0,${-h/2})`),s.attr("transform",`translate(${-(a.width/2)-m-(a.x-(a.left??0))}, ${-(a.height/2)+m-h/2-(a.y-(a.top??0))})`),je(e,_),e.intersect=function(I){return Ye.polygon(e,x,I)},i}var XQ=N(()=>{"use strict";Ft();Ht();Wt();Ut();o(YQ,"multiWaveEdgedRectangle")});async function jQ(t,e,{config:{themeVariables:r}}){let{labelStyles:n,nodeStyles:i}=Qe(e);e.labelStyle=n,e.useHtmlLabels||sr().flowchart?.htmlLabels!==!1||(e.centerLabel=!0);let{shapeSvg:s,bbox:l}=await pt(t,e,ht(e)),u=Math.max(l.width+(e.padding??0)*2,e?.width??0),h=Math.max(l.height+(e.padding??0)*2,e?.height??0),f=-u/2,d=-h/2,{cssStyles:p}=e,m=Xe.svg(s),g=Ke(e,{fill:r.noteBkgColor,stroke:r.noteBorderColor});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=m.rectangle(f,d,u,h,g),v=s.insert(()=>y,":first-child");return v.attr("class","basic label-container"),p&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",p),i&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",i),je(e,v),e.intersect=function(x){return Ye.rect(e,x)},s}var KQ=N(()=>{"use strict";Wt();Ht();Ut();Ft();Bi();o(jQ,"note")});async function QQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=a.width+e.padding,l=a.height+e.padding,u=s+l,h=[{x:u/2,y:0},{x:u,y:-u/2},{x:u/2,y:-u},{x:0,y:-u/2}],f,{cssStyles:d}=e;if(e.look==="handDrawn"){let p=Xe.svg(i),m=Ke(e,{}),g=h_e(0,0,u),y=p.path(g,m);f=i.insert(()=>y,":first-child").attr("transform",`translate(${-u/2}, ${u/2})`),d&&f.attr("style",d)}else f=La(i,u,u,h);return n&&f.attr("style",n),je(e,f),e.intersect=function(p){return X.debug(`APA12 Intersect called SPLIT +`),i=j4(n);return e===!1?i.replace(/ /g," "):i}function mQ(t,e={}){let r=pDe(t,e),n=Jr.lexer(r),i=[[]],a=0;function s(l,u="normal"){l.type==="text"?l.text.split(` +`).forEach((f,d)=>{d!==0&&(a++,i.push([])),f.split(" ").forEach(p=>{p=p.replace(/'/g,"'"),p&&i[a].push({content:p,type:u})})}):l.type==="strong"||l.type==="em"?l.tokens.forEach(h=>{s(h,l.type)}):l.type==="html"&&i[a].push({content:l.text,type:"normal"})}return o(s,"processNode"),n.forEach(l=>{l.type==="paragraph"?l.tokens?.forEach(u=>{s(u)}):l.type==="html"&&i[a].push({content:l.text,type:"normal"})}),i}function gQ(t,{markdownAutoWrap:e}={}){let r=Jr.lexer(t);function n(i){return i.type==="text"?e===!1?i.text.replace(/\n */g,"
    ").replace(/ /g," "):i.text.replace(/\n */g,"
    "):i.type==="strong"?`${i.tokens?.map(n).join("")}`:i.type==="em"?`${i.tokens?.map(n).join("")}`:i.type==="paragraph"?`

    ${i.tokens?.map(n).join("")}

    `:i.type==="space"?"":i.type==="html"?`${i.text}`:i.type==="escape"?i.text:`Unsupported markdown: ${i.type}`}return o(n,"output"),r.map(n).join("")}var yQ=N(()=>{"use strict";pQ();r7();o(pDe,"preprocessMarkdown");o(mQ,"markdownToLines");o(gQ,"markdownToHTML")});function mDe(t){return Intl.Segmenter?[...new Intl.Segmenter().segment(t)].map(e=>e.segment):[...t]}function gDe(t,e){let r=mDe(e.content);return vQ(t,[],r,e.type)}function vQ(t,e,r,n){if(r.length===0)return[{content:e.join(""),type:n},{content:"",type:n}];let[i,...a]=r,s=[...e,i];return t([{content:s.join(""),type:n}])?vQ(t,s,a,n):(e.length===0&&i&&(e.push(i),r.shift()),[{content:e.join(""),type:n},{content:r.join(""),type:n}])}function xQ(t,e){if(t.some(({content:r})=>r.includes(` +`)))throw new Error("splitLineToFitWidth does not support newlines in the line");return uL(t,e)}function uL(t,e,r=[],n=[]){if(t.length===0)return n.length>0&&r.push(n),r.length>0?r:[];let i="";t[0].content===" "&&(i=" ",t.shift());let a=t.shift()??{content:" ",type:"normal"},s=[...n];if(i!==""&&s.push({content:i,type:"normal"}),s.push(a),e(s))return uL(t,e,r,s);if(n.length>0)r.push(n),t.unshift(a);else if(a.content){let[l,u]=gDe(e,a);r.push([l]),u.content&&t.unshift(u)}return uL(t,e,r)}var bQ=N(()=>{"use strict";o(mDe,"splitTextToChars");o(gDe,"splitWordToFitWidth");o(vQ,"splitWordToFitWidthRecursion");o(xQ,"splitLineToFitWidth");o(uL,"splitLineToFitWidthRecursion")});function TQ(t,e){e&&t.attr("style",e)}async function yDe(t,e,r,n,i=!1){let a=t.append("foreignObject");a.attr("width",`${10*r}px`),a.attr("height",`${10*r}px`);let s=a.append("xhtml:div"),l=e.label;e.label&&yi(e.label)&&(l=await Th(e.label.replace(Ze.lineBreakRegex,` +`),me()));let u=e.isNode?"nodeLabel":"edgeLabel",h=s.append("span");h.html(l),TQ(h,e.labelStyle),h.attr("class",`${u} ${n}`),TQ(s,e.labelStyle),s.style("display","table-cell"),s.style("white-space","nowrap"),s.style("line-height","1.5"),s.style("max-width",r+"px"),s.style("text-align","center"),s.attr("xmlns","http://www.w3.org/1999/xhtml"),i&&s.attr("class","labelBkg");let f=s.node().getBoundingClientRect();return f.width===r&&(s.style("display","table"),s.style("white-space","break-spaces"),s.style("width",r+"px"),f=s.node().getBoundingClientRect()),a.node()}function hL(t,e,r){return t.append("tspan").attr("class","text-outer-tspan").attr("x",0).attr("y",e*r-.1+"em").attr("dy",r+"em")}function vDe(t,e,r){let n=t.append("text"),i=hL(n,1,e);fL(i,r);let a=i.node().getComputedTextLength();return n.remove(),a}function wQ(t,e,r){let n=t.append("text"),i=hL(n,1,e);fL(i,[{content:r,type:"normal"}]);let a=i.node()?.getBoundingClientRect();return a&&n.remove(),a}function xDe(t,e,r,n=!1){let a=e.append("g"),s=a.insert("rect").attr("class","background").attr("style","stroke: none"),l=a.append("text").attr("y","-10.1"),u=0;for(let h of r){let f=o(p=>vDe(a,1.1,p)<=t,"checkWidth"),d=f(h)?[h]:xQ(h,f);for(let p of d){let m=hL(l,u,1.1);fL(m,p),u++}}if(n){let h=l.node().getBBox(),f=2;return s.attr("x",h.x-f).attr("y",h.y-f).attr("width",h.width+2*f).attr("height",h.height+2*f),a.node()}else return l.node()}function fL(t,e){t.text(""),e.forEach((r,n)=>{let i=t.append("tspan").attr("font-style",r.type==="em"?"italic":"normal").attr("class","text-inner-tspan").attr("font-weight",r.type==="strong"?"bold":"normal");n===0?i.text(r.content):i.text(" "+r.content)})}async function dL(t){let e=[];t.replace(/(fa[bklrs]?):fa-([\w-]+)/g,(n,i,a)=>(e.push((async()=>{let s=`${i}:${a}`;return await F$(s)?await Es(s,void 0,{class:"label-icon"}):``})()),n));let r=await Promise.all(e);return t.replace(/(fa[bklrs]?):fa-([\w-]+)/g,()=>r.shift()??"")}var qn,ao=N(()=>{"use strict";fr();Gt();pr();yt();yQ();er();jl();bQ();o(TQ,"applyStyle");o(yDe,"addHtmlSpan");o(hL,"createTspan");o(vDe,"computeWidthOfText");o(wQ,"computeDimensionOfText");o(xDe,"createFormattedText");o(fL,"updateTextContentAndStyles");o(dL,"replaceIconSubstring");qn=o(async(t,e="",{style:r="",isTitle:n=!1,classes:i="",useHtmlLabels:a=!0,isNode:s=!0,width:l=200,addSvgBackground:u=!1}={},h)=>{if(X.debug("XYZ createText",e,r,n,i,a,s,"addSvgBackground: ",u),a){let f=gQ(e,h),d=await dL(na(f)),p=e.replace(/\\\\/g,"\\"),m={isNode:s,label:yi(e)?p:d,labelStyle:r.replace("fill:","color:")};return await yDe(t,m,l,i,u)}else{let f=e.replace(//g,"
    "),d=mQ(f.replace("
    ","
    "),h),p=xDe(l,t,d,e?u:!1);if(s){/stroke:/.exec(r)&&(r=r.replace("stroke:","lineColor:"));let m=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/color:/g,"fill:");Ge(p).attr("style",m)}else{let m=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/background:/g,"fill:");Ge(p).select("rect").attr("style",m.replace(/background:/g,"fill:"));let g=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/color:/g,"fill:");Ge(p).select("text").attr("style",g)}return p}},"createText")});function Xt(t){let e=t.map((r,n)=>`${n===0?"M":"L"}${r.x},${r.y}`);return e.push("Z"),e.join(" ")}function Go(t,e,r,n,i,a){let s=[],u=r-t,h=n-e,f=u/a,d=2*Math.PI/f,p=e+h/2;for(let m=0;m<=50;m++){let g=m/50,y=t+g*u,v=p+i*Math.sin(d*(y-t));s.push({x:y,y:v})}return s}function WT(t,e,r,n,i,a){let s=[],l=i*Math.PI/180,f=(a*Math.PI/180-l)/(n-1);for(let d=0;d{"use strict";ao();Gt();fr();_a();pr();er();mt=o(async(t,e,r)=>{let n,i=e.useHtmlLabels||dr(me()?.htmlLabels);r?n=r:n="node default";let a=t.insert("g").attr("class",n).attr("id",e.domId||e.id),s=a.insert("g").attr("class","label").attr("style",zn(e.labelStyle)),l;e.label===void 0?l="":l=typeof e.label=="string"?e.label:e.label[0];let u=await qn(s,wr(na(l),me()),{useHtmlLabels:i,width:e.width||me().flowchart?.wrappingWidth,cssClasses:"markdown-node-label",style:e.labelStyle,addSvgBackground:!!e.icon||!!e.img}),h=u.getBBox(),f=(e?.padding??0)/2;if(i){let d=u.children[0],p=Ge(u),m=d.getElementsByTagName("img");if(m){let g=l.replace(/]*>/g,"").trim()==="";await Promise.all([...m].map(y=>new Promise(v=>{function x(){if(y.style.display="flex",y.style.flexDirection="column",g){let b=me().fontSize?me().fontSize:window.getComputedStyle(document.body).fontSize,T=5,[S=or.fontSize]=zo(b),w=S*T+"px";y.style.minWidth=w,y.style.maxWidth=w}else y.style.width="100%";v(y)}o(x,"setupImage"),setTimeout(()=>{y.complete&&x()}),y.addEventListener("error",x),y.addEventListener("load",x)})))}h=d.getBoundingClientRect(),p.attr("width",h.width),p.attr("height",h.height)}return i?s.attr("transform","translate("+-h.width/2+", "+-h.height/2+")"):s.attr("transform","translate(0, "+-h.height/2+")"),e.centerLabel&&s.attr("transform","translate("+-h.width/2+", "+-h.height/2+")"),s.insert("rect",":first-child"),{shapeSvg:a,bbox:h,halfPadding:f,label:s}},"labelHelper"),HT=o(async(t,e,r)=>{let n=r.useHtmlLabels||dr(me()?.flowchart?.htmlLabels),i=t.insert("g").attr("class","label").attr("style",r.labelStyle||""),a=await qn(i,wr(na(e),me()),{useHtmlLabels:n,width:r.width||me()?.flowchart?.wrappingWidth,style:r.labelStyle,addSvgBackground:!!r.icon||!!r.img}),s=a.getBBox(),l=r.padding/2;if(dr(me()?.flowchart?.htmlLabels)){let u=a.children[0],h=Ge(a);s=u.getBoundingClientRect(),h.attr("width",s.width),h.attr("height",s.height)}return n?i.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"):i.attr("transform","translate(0, "+-s.height/2+")"),r.centerLabel&&i.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"),i.insert("rect",":first-child"),{shapeSvg:t,bbox:s,halfPadding:l,label:i}},"insertLabel"),Ke=o((t,e)=>{let r=e.node().getBBox();t.width=r.width,t.height=r.height},"updateNodeBounds"),ht=o((t,e)=>(t.look==="handDrawn"?"rough-node":"node")+" "+t.cssClasses+" "+(e||""),"getNodeClasses");o(Xt,"createPathFromPoints");o(Go,"generateFullSineWavePoints");o(WT,"generateCirclePoints")});function bDe(t,e){return t.intersect(e)}var kQ,EQ=N(()=>{"use strict";o(bDe,"intersectNode");kQ=bDe});function TDe(t,e,r,n){var i=t.x,a=t.y,s=i-n.x,l=a-n.y,u=Math.sqrt(e*e*l*l+r*r*s*s),h=Math.abs(e*r*s/u);n.x{"use strict";o(TDe,"intersectEllipse");qT=TDe});function wDe(t,e,r){return qT(t,e,e,r)}var SQ,CQ=N(()=>{"use strict";pL();o(wDe,"intersectCircle");SQ=wDe});function kDe(t,e,r,n){var i,a,s,l,u,h,f,d,p,m,g,y,v,x,b;if(i=e.y-t.y,s=t.x-e.x,u=e.x*t.y-t.x*e.y,p=i*r.x+s*r.y+u,m=i*n.x+s*n.y+u,!(p!==0&&m!==0&&AQ(p,m))&&(a=n.y-r.y,l=r.x-n.x,h=n.x*r.y-r.x*n.y,f=a*t.x+l*t.y+h,d=a*e.x+l*e.y+h,!(f!==0&&d!==0&&AQ(f,d))&&(g=i*l-a*s,g!==0)))return y=Math.abs(g/2),v=s*h-l*u,x=v<0?(v-y)/g:(v+y)/g,v=a*u-i*h,b=v<0?(v-y)/g:(v+y)/g,{x,y:b}}function AQ(t,e){return t*e>0}var _Q,DQ=N(()=>{"use strict";o(kDe,"intersectLine");o(AQ,"sameSign");_Q=kDe});function EDe(t,e,r){let n=t.x,i=t.y,a=[],s=Number.POSITIVE_INFINITY,l=Number.POSITIVE_INFINITY;typeof e.forEach=="function"?e.forEach(function(f){s=Math.min(s,f.x),l=Math.min(l,f.y)}):(s=Math.min(s,e.x),l=Math.min(l,e.y));let u=n-t.width/2-s,h=i-t.height/2-l;for(let f=0;f1&&a.sort(function(f,d){let p=f.x-r.x,m=f.y-r.y,g=Math.sqrt(p*p+m*m),y=d.x-r.x,v=d.y-r.y,x=Math.sqrt(y*y+v*v);return g{"use strict";DQ();o(EDe,"intersectPolygon");LQ=EDe});var SDe,Xh,mL=N(()=>{"use strict";SDe=o((t,e)=>{var r=t.x,n=t.y,i=e.x-r,a=e.y-n,s=t.width/2,l=t.height/2,u,h;return Math.abs(a)*s>Math.abs(i)*l?(a<0&&(l=-l),u=a===0?0:l*i/a,h=l):(i<0&&(s=-s),u=s,h=i===0?0:s*a/i),{x:r+u,y:n+h}},"intersectRect"),Xh=SDe});var Xe,Ht=N(()=>{"use strict";EQ();CQ();pL();RQ();mL();Xe={node:kQ,circle:SQ,ellipse:qT,polygon:LQ,rect:Xh}});var NQ,bc,CDe,S2,Ye,Qe,zt=N(()=>{"use strict";Gt();NQ=o(t=>{let{handDrawnSeed:e}=me();return{fill:t,hachureAngle:120,hachureGap:4,fillWeight:2,roughness:.7,stroke:t,seed:e}},"solidStateFill"),bc=o(t=>{let e=CDe([...t.cssCompiledStyles||[],...t.cssStyles||[]]);return{stylesMap:e,stylesArray:[...e]}},"compileStyles"),CDe=o(t=>{let e=new Map;return t.forEach(r=>{let[n,i]=r.split(":");e.set(n.trim(),i?.trim())}),e},"styles2Map"),S2=o(t=>t==="color"||t==="font-size"||t==="font-family"||t==="font-weight"||t==="font-style"||t==="text-decoration"||t==="text-align"||t==="text-transform"||t==="line-height"||t==="letter-spacing"||t==="word-spacing"||t==="text-shadow"||t==="text-overflow"||t==="white-space"||t==="word-wrap"||t==="word-break"||t==="overflow-wrap"||t==="hyphens","isLabelStyle"),Ye=o(t=>{let{stylesArray:e}=bc(t),r=[],n=[],i=[],a=[];return e.forEach(s=>{let l=s[0];S2(l)?r.push(s.join(":")+" !important"):(n.push(s.join(":")+" !important"),l.includes("stroke")&&i.push(s.join(":")+" !important"),l==="fill"&&a.push(s.join(":")+" !important"))}),{labelStyles:r.join(";"),nodeStyles:n.join(";"),stylesArray:e,borderStyles:i,backgroundStyles:a}},"styles2String"),Qe=o((t,e)=>{let{themeVariables:r,handDrawnSeed:n}=me(),{nodeBorder:i,mainBkg:a}=r,{stylesMap:s}=bc(t);return Object.assign({roughness:.7,fill:s.get("fill")||a,fillStyle:"hachure",fillWeight:4,hachureGap:5.2,stroke:s.get("stroke")||i,seed:n,strokeWidth:s.get("stroke-width")?.replace("px","")||1.3,fillLineDash:[0,0]},e)},"userNodeOverrides")});function gL(t,e,r){if(t&&t.length){let[n,i]=e,a=Math.PI/180*r,s=Math.cos(a),l=Math.sin(a);for(let u of t){let[h,f]=u;u[0]=(h-n)*s-(f-i)*l+n,u[1]=(h-n)*l+(f-i)*s+i}}}function ADe(t,e){return t[0]===e[0]&&t[1]===e[1]}function _De(t,e,r,n=1){let i=r,a=Math.max(e,.1),s=t[0]&&t[0][0]&&typeof t[0][0]=="number"?[t]:t,l=[0,0];if(i)for(let h of s)gL(h,l,i);let u=function(h,f,d){let p=[];for(let b of h){let T=[...b];ADe(T[0],T[T.length-1])||T.push([T[0][0],T[0][1]]),T.length>2&&p.push(T)}let m=[];f=Math.max(f,.1);let g=[];for(let b of p)for(let T=0;Tb.yminT.ymin?1:b.xT.x?1:b.ymax===T.ymax?0:(b.ymax-T.ymax)/Math.abs(b.ymax-T.ymax)),!g.length)return m;let y=[],v=g[0].ymin,x=0;for(;y.length||g.length;){if(g.length){let b=-1;for(let T=0;Tv);T++)b=T;g.splice(0,b+1).forEach(T=>{y.push({s:v,edge:T})})}if(y=y.filter(b=>!(b.edge.ymax<=v)),y.sort((b,T)=>b.edge.x===T.edge.x?0:(b.edge.x-T.edge.x)/Math.abs(b.edge.x-T.edge.x)),(d!==1||x%f==0)&&y.length>1)for(let b=0;b=y.length)break;let S=y[b].edge,w=y[T].edge;m.push([[Math.round(S.x),v],[Math.round(w.x),v]])}v+=d,y.forEach(b=>{b.edge.x=b.edge.x+d*b.edge.islope}),x++}return m}(s,a,n);if(i){for(let h of s)gL(h,l,-i);(function(h,f,d){let p=[];h.forEach(m=>p.push(...m)),gL(p,f,d)})(u,l,-i)}return u}function D2(t,e){var r;let n=e.hachureAngle+90,i=e.hachureGap;i<0&&(i=4*e.strokeWidth),i=Math.round(Math.max(i,.1));let a=1;return e.roughness>=1&&(((r=e.randomizer)===null||r===void 0?void 0:r.next())||Math.random())>.7&&(a=i),_De(t,i,n,a||1)}function tw(t){let e=t[0],r=t[1];return Math.sqrt(Math.pow(e[0]-r[0],2)+Math.pow(e[1]-r[1],2))}function vL(t,e){return t.type===e}function NL(t){let e=[],r=function(s){let l=new Array;for(;s!=="";)if(s.match(/^([ \t\r\n,]+)/))s=s.substr(RegExp.$1.length);else if(s.match(/^([aAcChHlLmMqQsStTvVzZ])/))l[l.length]={type:DDe,text:RegExp.$1},s=s.substr(RegExp.$1.length);else{if(!s.match(/^(([-+]?[0-9]+(\.[0-9]*)?|[-+]?\.[0-9]+)([eE][-+]?[0-9]+)?)/))return[];l[l.length]={type:yL,text:`${parseFloat(RegExp.$1)}`},s=s.substr(RegExp.$1.length)}return l[l.length]={type:MQ,text:""},l}(t),n="BOD",i=0,a=r[i];for(;!vL(a,MQ);){let s=0,l=[];if(n==="BOD"){if(a.text!=="M"&&a.text!=="m")return NL("M0,0"+t);i++,s=YT[a.text],n=a.text}else vL(a,yL)?s=YT[n]:(i++,s=YT[a.text],n=a.text);if(!(i+sf%2?h+r:h+e);a.push({key:"C",data:u}),e=u[4],r=u[5];break}case"Q":a.push({key:"Q",data:[...l]}),e=l[2],r=l[3];break;case"q":{let u=l.map((h,f)=>f%2?h+r:h+e);a.push({key:"Q",data:u}),e=u[2],r=u[3];break}case"A":a.push({key:"A",data:[...l]}),e=l[5],r=l[6];break;case"a":e+=l[5],r+=l[6],a.push({key:"A",data:[l[0],l[1],l[2],l[3],l[4],e,r]});break;case"H":a.push({key:"H",data:[...l]}),e=l[0];break;case"h":e+=l[0],a.push({key:"H",data:[e]});break;case"V":a.push({key:"V",data:[...l]}),r=l[0];break;case"v":r+=l[0],a.push({key:"V",data:[r]});break;case"S":a.push({key:"S",data:[...l]}),e=l[2],r=l[3];break;case"s":{let u=l.map((h,f)=>f%2?h+r:h+e);a.push({key:"S",data:u}),e=u[2],r=u[3];break}case"T":a.push({key:"T",data:[...l]}),e=l[0],r=l[1];break;case"t":e+=l[0],r+=l[1],a.push({key:"T",data:[e,r]});break;case"Z":case"z":a.push({key:"Z",data:[]}),e=n,r=i}return a}function VQ(t){let e=[],r="",n=0,i=0,a=0,s=0,l=0,u=0;for(let{key:h,data:f}of t){switch(h){case"M":e.push({key:"M",data:[...f]}),[n,i]=f,[a,s]=f;break;case"C":e.push({key:"C",data:[...f]}),n=f[4],i=f[5],l=f[2],u=f[3];break;case"L":e.push({key:"L",data:[...f]}),[n,i]=f;break;case"H":n=f[0],e.push({key:"L",data:[n,i]});break;case"V":i=f[0],e.push({key:"L",data:[n,i]});break;case"S":{let d=0,p=0;r==="C"||r==="S"?(d=n+(n-l),p=i+(i-u)):(d=n,p=i),e.push({key:"C",data:[d,p,...f]}),l=f[0],u=f[1],n=f[2],i=f[3];break}case"T":{let[d,p]=f,m=0,g=0;r==="Q"||r==="T"?(m=n+(n-l),g=i+(i-u)):(m=n,g=i);let y=n+2*(m-n)/3,v=i+2*(g-i)/3,x=d+2*(m-d)/3,b=p+2*(g-p)/3;e.push({key:"C",data:[y,v,x,b,d,p]}),l=m,u=g,n=d,i=p;break}case"Q":{let[d,p,m,g]=f,y=n+2*(d-n)/3,v=i+2*(p-i)/3,x=m+2*(d-m)/3,b=g+2*(p-g)/3;e.push({key:"C",data:[y,v,x,b,m,g]}),l=d,u=p,n=m,i=g;break}case"A":{let d=Math.abs(f[0]),p=Math.abs(f[1]),m=f[2],g=f[3],y=f[4],v=f[5],x=f[6];d===0||p===0?(e.push({key:"C",data:[n,i,v,x,v,x]}),n=v,i=x):(n!==v||i!==x)&&(UQ(n,i,v,x,d,p,m,g,y).forEach(function(b){e.push({key:"C",data:b})}),n=v,i=x);break}case"Z":e.push({key:"Z",data:[]}),n=a,i=s}r=h}return e}function C2(t,e,r){return[t*Math.cos(r)-e*Math.sin(r),t*Math.sin(r)+e*Math.cos(r)]}function UQ(t,e,r,n,i,a,s,l,u,h){let f=(d=s,Math.PI*d/180);var d;let p=[],m=0,g=0,y=0,v=0;if(h)[m,g,y,v]=h;else{[t,e]=C2(t,e,-f),[r,n]=C2(r,n,-f);let L=(t-r)/2,A=(e-n)/2,I=L*L/(i*i)+A*A/(a*a);I>1&&(I=Math.sqrt(I),i*=I,a*=I);let M=i*i,P=a*a,B=M*P-M*A*A-P*L*L,F=M*A*A+P*L*L,z=(l===u?-1:1)*Math.sqrt(Math.abs(B/F));y=z*i*A/a+(t+r)/2,v=z*-a*L/i+(e+n)/2,m=Math.asin(parseFloat(((e-v)/a).toFixed(9))),g=Math.asin(parseFloat(((n-v)/a).toFixed(9))),tg&&(m-=2*Math.PI),!u&&g>m&&(g-=2*Math.PI)}let x=g-m;if(Math.abs(x)>120*Math.PI/180){let L=g,A=r,I=n;g=u&&g>m?m+120*Math.PI/180*1:m+120*Math.PI/180*-1,p=UQ(r=y+i*Math.cos(g),n=v+a*Math.sin(g),A,I,i,a,s,0,u,[g,L,y,v])}x=g-m;let b=Math.cos(m),T=Math.sin(m),S=Math.cos(g),w=Math.sin(g),E=Math.tan(x/4),_=4/3*i*E,C=4/3*a*E,D=[t,e],O=[t+_*T,e-C*b],R=[r+_*w,n-C*S],k=[r,n];if(O[0]=2*D[0]-O[0],O[1]=2*D[1]-O[1],h)return[O,R,k].concat(p);{p=[O,R,k].concat(p);let L=[];for(let A=0;A2){let i=[];for(let a=0;a2*Math.PI&&(m=0,g=2*Math.PI);let y=2*Math.PI/u.curveStepCount,v=Math.min(y/2,(g-m)/2),x=$Q(v,h,f,d,p,m,g,1,u);if(!u.disableMultiStroke){let b=$Q(v,h,f,d,p,m,g,1.5,u);x.push(...b)}return s&&(l?x.push(...jh(h,f,h+d*Math.cos(m),f+p*Math.sin(m),u),...jh(h,f,h+d*Math.cos(g),f+p*Math.sin(g),u)):x.push({op:"lineTo",data:[h,f]},{op:"lineTo",data:[h+d*Math.cos(m),f+p*Math.sin(m)]})),{type:"path",ops:x}}function PQ(t,e){let r=VQ(GQ(NL(t))),n=[],i=[0,0],a=[0,0];for(let{key:s,data:l}of r)switch(s){case"M":a=[l[0],l[1]],i=[l[0],l[1]];break;case"L":n.push(...jh(a[0],a[1],l[0],l[1],e)),a=[l[0],l[1]];break;case"C":{let[u,h,f,d,p,m]=l;n.push(...NDe(u,h,f,d,p,m,a,e)),a=[p,m];break}case"Z":n.push(...jh(a[0],a[1],i[0],i[1],e)),a=[i[0],i[1]]}return{type:"path",ops:n}}function xL(t,e){let r=[];for(let n of t)if(n.length){let i=e.maxRandomnessOffset||0,a=n.length;if(a>2){r.push({op:"move",data:[n[0][0]+ar(i,e),n[0][1]+ar(i,e)]});for(let s=1;s500?.4:-.0016668*u+1.233334;let f=i.maxRandomnessOffset||0;f*f*100>l&&(f=u/10);let d=f/2,p=.2+.2*qQ(i),m=i.bowing*i.maxRandomnessOffset*(n-e)/200,g=i.bowing*i.maxRandomnessOffset*(t-r)/200;m=ar(m,i,h),g=ar(g,i,h);let y=[],v=o(()=>ar(d,i,h),"M"),x=o(()=>ar(f,i,h),"k"),b=i.preserveVertices;return a&&(s?y.push({op:"move",data:[t+(b?0:v()),e+(b?0:v())]}):y.push({op:"move",data:[t+(b?0:ar(f,i,h)),e+(b?0:ar(f,i,h))]})),s?y.push({op:"bcurveTo",data:[m+t+(r-t)*p+v(),g+e+(n-e)*p+v(),m+t+2*(r-t)*p+v(),g+e+2*(n-e)*p+v(),r+(b?0:v()),n+(b?0:v())]}):y.push({op:"bcurveTo",data:[m+t+(r-t)*p+x(),g+e+(n-e)*p+x(),m+t+2*(r-t)*p+x(),g+e+2*(n-e)*p+x(),r+(b?0:x()),n+(b?0:x())]}),y}function XT(t,e,r){if(!t.length)return[];let n=[];n.push([t[0][0]+ar(e,r),t[0][1]+ar(e,r)]),n.push([t[0][0]+ar(e,r),t[0][1]+ar(e,r)]);for(let i=1;i3){let a=[],s=1-r.curveTightness;i.push({op:"move",data:[t[1][0],t[1][1]]});for(let l=1;l+21&&i.push(l)):i.push(l),i.push(t[e+3])}else{let u=t[e+0],h=t[e+1],f=t[e+2],d=t[e+3],p=Hd(u,h,.5),m=Hd(h,f,.5),g=Hd(f,d,.5),y=Hd(p,m,.5),v=Hd(m,g,.5),x=Hd(y,v,.5);DL([u,p,y,x],0,r,i),DL([x,v,g,d],0,r,i)}var a,s;return i}function IDe(t,e){return ew(t,0,t.length,e)}function ew(t,e,r,n,i){let a=i||[],s=t[e],l=t[r-1],u=0,h=1;for(let f=e+1;fu&&(u=d,h=f)}return Math.sqrt(u)>n?(ew(t,e,h+1,n,a),ew(t,h,r,n,a)):(a.length||a.push(s),a.push(l)),a}function bL(t,e=.15,r){let n=[],i=(t.length-1)/3;for(let a=0;a0?ew(n,0,n.length,r):n}var _2,TL,wL,kL,EL,SL,Ps,CL,DDe,yL,MQ,YT,LDe,so,km,LL,jT,RL,je,Wt=N(()=>{"use strict";o(gL,"t");o(ADe,"e");o(_De,"s");o(D2,"n");_2=class{static{o(this,"o")}constructor(e){this.helper=e}fillPolygons(e,r){return this._fillPolygons(e,r)}_fillPolygons(e,r){let n=D2(e,r);return{type:"fillSketch",ops:this.renderLines(n,r)}}renderLines(e,r){let n=[];for(let i of e)n.push(...this.helper.doubleLineOps(i[0][0],i[0][1],i[1][0],i[1][1],r));return n}};o(tw,"a");TL=class extends _2{static{o(this,"h")}fillPolygons(e,r){let n=r.hachureGap;n<0&&(n=4*r.strokeWidth),n=Math.max(n,.1);let i=D2(e,Object.assign({},r,{hachureGap:n})),a=Math.PI/180*r.hachureAngle,s=[],l=.5*n*Math.cos(a),u=.5*n*Math.sin(a);for(let[h,f]of i)tw([h,f])&&s.push([[h[0]-l,h[1]+u],[...f]],[[h[0]+l,h[1]-u],[...f]]);return{type:"fillSketch",ops:this.renderLines(s,r)}}},wL=class extends _2{static{o(this,"r")}fillPolygons(e,r){let n=this._fillPolygons(e,r),i=Object.assign({},r,{hachureAngle:r.hachureAngle+90}),a=this._fillPolygons(e,i);return n.ops=n.ops.concat(a.ops),n}},kL=class{static{o(this,"i")}constructor(e){this.helper=e}fillPolygons(e,r){let n=D2(e,r=Object.assign({},r,{hachureAngle:0}));return this.dotsOnLines(n,r)}dotsOnLines(e,r){let n=[],i=r.hachureGap;i<0&&(i=4*r.strokeWidth),i=Math.max(i,.1);let a=r.fillWeight;a<0&&(a=r.strokeWidth/2);let s=i/4;for(let l of e){let u=tw(l),h=u/i,f=Math.ceil(h)-1,d=u-f*i,p=(l[0][0]+l[1][0])/2-i/4,m=Math.min(l[0][1],l[1][1]);for(let g=0;g{let l=tw(s),u=Math.floor(l/(n+i)),h=(l+i-u*(n+i))/2,f=s[0],d=s[1];f[0]>d[0]&&(f=s[1],d=s[0]);let p=Math.atan((d[1]-f[1])/(d[0]-f[0]));for(let m=0;m{let s=tw(a),l=Math.round(s/(2*r)),u=a[0],h=a[1];u[0]>h[0]&&(u=a[1],h=a[0]);let f=Math.atan((h[1]-u[1])/(h[0]-u[0]));for(let d=0;d2*Math.PI&&(_=0,C=2*Math.PI);let D=(C-_)/b.curveStepCount,O=[];for(let R=_;R<=C;R+=D)O.push([T+w*Math.cos(R),S+E*Math.sin(R)]);return O.push([T+w*Math.cos(C),S+E*Math.sin(C)]),O.push([T,S]),wm([O],b)}(e,r,n,i,a,s,h));return h.stroke!==so&&f.push(d),this._d("arc",f,h)}curve(e,r){let n=this._o(r),i=[],a=IQ(e,n);if(n.fill&&n.fill!==so)if(n.fillStyle==="solid"){let s=IQ(e,Object.assign(Object.assign({},n),{disableMultiStroke:!0,roughness:n.roughness?n.roughness+n.fillShapeRoughnessGain:0}));i.push({type:"fillPath",ops:this._mergedShape(s.ops)})}else{let s=[],l=e;if(l.length){let u=typeof l[0][0]=="number"?[l]:l;for(let h of u)h.length<3?s.push(...h):h.length===3?s.push(...bL(zQ([h[0],h[0],h[1],h[2]]),10,(1+n.roughness)/2)):s.push(...bL(zQ(h),10,(1+n.roughness)/2))}s.length&&i.push(wm([s],n))}return n.stroke!==so&&i.push(a),this._d("curve",i,n)}polygon(e,r){let n=this._o(r),i=[],a=KT(e,!0,n);return n.fill&&(n.fillStyle==="solid"?i.push(xL([e],n)):i.push(wm([e],n))),n.stroke!==so&&i.push(a),this._d("polygon",i,n)}path(e,r){let n=this._o(r),i=[];if(!e)return this._d("path",i,n);e=(e||"").replace(/\n/g," ").replace(/(-\s)/g,"-").replace("/(ss)/g"," ");let a=n.fill&&n.fill!=="transparent"&&n.fill!==so,s=n.stroke!==so,l=!!(n.simplification&&n.simplification<1),u=function(f,d,p){let m=VQ(GQ(NL(f))),g=[],y=[],v=[0,0],x=[],b=o(()=>{x.length>=4&&y.push(...bL(x,d)),x=[]},"i"),T=o(()=>{b(),y.length&&(g.push(y),y=[])},"c");for(let{key:w,data:E}of m)switch(w){case"M":T(),v=[E[0],E[1]],y.push(v);break;case"L":b(),y.push([E[0],E[1]]);break;case"C":if(!x.length){let _=y.length?y[y.length-1]:v;x.push([_[0],_[1]])}x.push([E[0],E[1]]),x.push([E[2],E[3]]),x.push([E[4],E[5]]);break;case"Z":b(),y.push([v[0],v[1]])}if(T(),!p)return g;let S=[];for(let w of g){let E=IDe(w,p);E.length&&S.push(E)}return S}(e,1,l?4-4*(n.simplification||1):(1+n.roughness)/2),h=PQ(e,n);if(a)if(n.fillStyle==="solid")if(u.length===1){let f=PQ(e,Object.assign(Object.assign({},n),{disableMultiStroke:!0,roughness:n.roughness?n.roughness+n.fillShapeRoughnessGain:0}));i.push({type:"fillPath",ops:this._mergedShape(f.ops)})}else i.push(xL(u,n));else i.push(wm(u,n));return s&&(l?u.forEach(f=>{i.push(KT(f,!1,n))}):i.push(h)),this._d("path",i,n)}opsToPath(e,r){let n="";for(let i of e.ops){let a=typeof r=="number"&&r>=0?i.data.map(s=>+s.toFixed(r)):i.data;switch(i.op){case"move":n+=`M${a[0]} ${a[1]} `;break;case"bcurveTo":n+=`C${a[0]} ${a[1]}, ${a[2]} ${a[3]}, ${a[4]} ${a[5]} `;break;case"lineTo":n+=`L${a[0]} ${a[1]} `}}return n.trim()}toPaths(e){let r=e.sets||[],n=e.options||this.defaultOptions,i=[];for(let a of r){let s=null;switch(a.type){case"path":s={d:this.opsToPath(a),stroke:n.stroke,strokeWidth:n.strokeWidth,fill:so};break;case"fillPath":s={d:this.opsToPath(a),stroke:so,strokeWidth:0,fill:n.fill||so};break;case"fillSketch":s=this.fillSketch(a,n)}s&&i.push(s)}return i}fillSketch(e,r){let n=r.fillWeight;return n<0&&(n=r.strokeWidth/2),{d:this.opsToPath(e),stroke:r.fill||so,strokeWidth:n,fill:so}}_mergedShape(e){return e.filter((r,n)=>n===0||r.op!=="move")}},LL=class{static{o(this,"st")}constructor(e,r){this.canvas=e,this.ctx=this.canvas.getContext("2d"),this.gen=new km(r)}draw(e){let r=e.sets||[],n=e.options||this.getDefaultOptions(),i=this.ctx,a=e.options.fixedDecimalPlaceDigits;for(let s of r)switch(s.type){case"path":i.save(),i.strokeStyle=n.stroke==="none"?"transparent":n.stroke,i.lineWidth=n.strokeWidth,n.strokeLineDash&&i.setLineDash(n.strokeLineDash),n.strokeLineDashOffset&&(i.lineDashOffset=n.strokeLineDashOffset),this._drawToContext(i,s,a),i.restore();break;case"fillPath":{i.save(),i.fillStyle=n.fill||"";let l=e.shape==="curve"||e.shape==="polygon"||e.shape==="path"?"evenodd":"nonzero";this._drawToContext(i,s,a,l),i.restore();break}case"fillSketch":this.fillSketch(i,s,n)}}fillSketch(e,r,n){let i=n.fillWeight;i<0&&(i=n.strokeWidth/2),e.save(),n.fillLineDash&&e.setLineDash(n.fillLineDash),n.fillLineDashOffset&&(e.lineDashOffset=n.fillLineDashOffset),e.strokeStyle=n.fill||"",e.lineWidth=i,this._drawToContext(e,r,n.fixedDecimalPlaceDigits),e.restore()}_drawToContext(e,r,n,i="nonzero"){e.beginPath();for(let a of r.ops){let s=typeof n=="number"&&n>=0?a.data.map(l=>+l.toFixed(n)):a.data;switch(a.op){case"move":e.moveTo(s[0],s[1]);break;case"bcurveTo":e.bezierCurveTo(s[0],s[1],s[2],s[3],s[4],s[5]);break;case"lineTo":e.lineTo(s[0],s[1])}}r.type==="fillPath"?e.fill(i):e.stroke()}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}line(e,r,n,i,a){let s=this.gen.line(e,r,n,i,a);return this.draw(s),s}rectangle(e,r,n,i,a){let s=this.gen.rectangle(e,r,n,i,a);return this.draw(s),s}ellipse(e,r,n,i,a){let s=this.gen.ellipse(e,r,n,i,a);return this.draw(s),s}circle(e,r,n,i){let a=this.gen.circle(e,r,n,i);return this.draw(a),a}linearPath(e,r){let n=this.gen.linearPath(e,r);return this.draw(n),n}polygon(e,r){let n=this.gen.polygon(e,r);return this.draw(n),n}arc(e,r,n,i,a,s,l=!1,u){let h=this.gen.arc(e,r,n,i,a,s,l,u);return this.draw(h),h}curve(e,r){let n=this.gen.curve(e,r);return this.draw(n),n}path(e,r){let n=this.gen.path(e,r);return this.draw(n),n}},jT="http://www.w3.org/2000/svg",RL=class{static{o(this,"ot")}constructor(e,r){this.svg=e,this.gen=new km(r)}draw(e){let r=e.sets||[],n=e.options||this.getDefaultOptions(),i=this.svg.ownerDocument||window.document,a=i.createElementNS(jT,"g"),s=e.options.fixedDecimalPlaceDigits;for(let l of r){let u=null;switch(l.type){case"path":u=i.createElementNS(jT,"path"),u.setAttribute("d",this.opsToPath(l,s)),u.setAttribute("stroke",n.stroke),u.setAttribute("stroke-width",n.strokeWidth+""),u.setAttribute("fill","none"),n.strokeLineDash&&u.setAttribute("stroke-dasharray",n.strokeLineDash.join(" ").trim()),n.strokeLineDashOffset&&u.setAttribute("stroke-dashoffset",`${n.strokeLineDashOffset}`);break;case"fillPath":u=i.createElementNS(jT,"path"),u.setAttribute("d",this.opsToPath(l,s)),u.setAttribute("stroke","none"),u.setAttribute("stroke-width","0"),u.setAttribute("fill",n.fill||""),e.shape!=="curve"&&e.shape!=="polygon"||u.setAttribute("fill-rule","evenodd");break;case"fillSketch":u=this.fillSketch(i,l,n)}u&&a.appendChild(u)}return a}fillSketch(e,r,n){let i=n.fillWeight;i<0&&(i=n.strokeWidth/2);let a=e.createElementNS(jT,"path");return a.setAttribute("d",this.opsToPath(r,n.fixedDecimalPlaceDigits)),a.setAttribute("stroke",n.fill||""),a.setAttribute("stroke-width",i+""),a.setAttribute("fill","none"),n.fillLineDash&&a.setAttribute("stroke-dasharray",n.fillLineDash.join(" ").trim()),n.fillLineDashOffset&&a.setAttribute("stroke-dashoffset",`${n.fillLineDashOffset}`),a}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}opsToPath(e,r){return this.gen.opsToPath(e,r)}line(e,r,n,i,a){let s=this.gen.line(e,r,n,i,a);return this.draw(s)}rectangle(e,r,n,i,a){let s=this.gen.rectangle(e,r,n,i,a);return this.draw(s)}ellipse(e,r,n,i,a){let s=this.gen.ellipse(e,r,n,i,a);return this.draw(s)}circle(e,r,n,i){let a=this.gen.circle(e,r,n,i);return this.draw(a)}linearPath(e,r){let n=this.gen.linearPath(e,r);return this.draw(n)}polygon(e,r){let n=this.gen.polygon(e,r);return this.draw(n)}arc(e,r,n,i,a,s,l=!1,u){let h=this.gen.arc(e,r,n,i,a,s,l,u);return this.draw(h)}curve(e,r){let n=this.gen.curve(e,r);return this.draw(n)}path(e,r){let n=this.gen.path(e,r);return this.draw(n)}},je={canvas:o((t,e)=>new LL(t,e),"canvas"),svg:o((t,e)=>new RL(t,e),"svg"),generator:o(t=>new km(t),"generator"),newSeed:o(()=>km.newSeed(),"newSeed")}});function YQ(t,e){let{labelStyles:r}=Ye(e);e.labelStyle=r;let n=ht(e),i=n;n||(i="anchor");let a=t.insert("g").attr("class",i).attr("id",e.domId||e.id),s=1,{cssStyles:l}=e,u=je.svg(a),h=Qe(e,{fill:"black",stroke:"none",fillStyle:"solid"});e.look!=="handDrawn"&&(h.roughness=0);let f=u.circle(0,0,s*2,h),d=a.insert(()=>f,":first-child");return d.attr("class","anchor").attr("style",zn(l)),Ke(e,d),e.intersect=function(p){return X.info("Circle intersect",e,s,p),Xe.circle(e,s,p)},a}var XQ=N(()=>{"use strict";yt();Ft();Ht();zt();Wt();er();o(YQ,"anchor")});function jQ(t,e,r,n,i,a,s){let u=(t+r)/2,h=(e+n)/2,f=Math.atan2(n-e,r-t),d=(r-t)/2,p=(n-e)/2,m=d/i,g=p/a,y=Math.sqrt(m**2+g**2);if(y>1)throw new Error("The given radii are too small to create an arc between the points.");let v=Math.sqrt(1-y**2),x=u+v*a*Math.sin(f)*(s?-1:1),b=h-v*i*Math.cos(f)*(s?-1:1),T=Math.atan2((e-b)/a,(t-x)/i),w=Math.atan2((n-b)/a,(r-x)/i)-T;s&&w<0&&(w+=2*Math.PI),!s&&w>0&&(w-=2*Math.PI);let E=[];for(let _=0;_<20;_++){let C=_/19,D=T+C*w,O=x+i*Math.cos(D),R=b+a*Math.sin(D);E.push({x:O,y:R})}return E}async function KQ(t,e){let{labelStyles:r,nodeStyles:n}=Ye(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await mt(t,e,ht(e)),s=a.width+e.padding+20,l=a.height+e.padding,u=l/2,h=u/(2.5+l/50),{cssStyles:f}=e,d=[{x:s/2,y:-l/2},{x:-s/2,y:-l/2},...jQ(-s/2,-l/2,-s/2,l/2,h,u,!1),{x:s/2,y:l/2},...jQ(s/2,l/2,s/2,-l/2,h,u,!0)],p=je.svg(i),m=Qe(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=Xt(d),y=p.path(g,m),v=i.insert(()=>y,":first-child");return v.attr("class","basic label-container"),f&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",f),n&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",n),v.attr("transform",`translate(${h/2}, 0)`),Ke(e,v),e.intersect=function(x){return Xe.polygon(e,d,x)},i}var QQ=N(()=>{"use strict";Ft();Ht();zt();Wt();o(jQ,"generateArcPoints");o(KQ,"bowTieRect")});function Ma(t,e,r,n){return t.insert("polygon",":first-child").attr("points",n.map(function(i){return i.x+","+i.y}).join(" ")).attr("class","label-container").attr("transform","translate("+-e/2+","+r/2+")")}var Iu=N(()=>{"use strict";o(Ma,"insertPolygonShape")});async function ZQ(t,e){let{labelStyles:r,nodeStyles:n}=Ye(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await mt(t,e,ht(e)),s=a.height+e.padding,l=12,u=a.width+e.padding+l,h=0,f=u,d=-s,p=0,m=[{x:h+l,y:d},{x:f,y:d},{x:f,y:p},{x:h,y:p},{x:h,y:d+l},{x:h+l,y:d}],g,{cssStyles:y}=e;if(e.look==="handDrawn"){let v=je.svg(i),x=Qe(e,{}),b=Xt(m),T=v.path(b,x);g=i.insert(()=>T,":first-child").attr("transform",`translate(${-u/2}, ${s/2})`),y&&g.attr("style",y)}else g=Ma(i,u,s,m);return n&&g.attr("style",n),Ke(e,g),e.intersect=function(v){return Xe.polygon(e,m,v)},i}var JQ=N(()=>{"use strict";Ft();Ht();zt();Wt();Iu();Ft();o(ZQ,"card")});function eZ(t,e){let{nodeStyles:r}=Ye(e);e.label="";let n=t.insert("g").attr("class",ht(e)).attr("id",e.domId??e.id),{cssStyles:i}=e,a=Math.max(28,e.width??0),s=[{x:0,y:a/2},{x:a/2,y:0},{x:0,y:-a/2},{x:-a/2,y:0}],l=je.svg(n),u=Qe(e,{});e.look!=="handDrawn"&&(u.roughness=0,u.fillStyle="solid");let h=Xt(s),f=l.path(h,u),d=n.insert(()=>f,":first-child");return i&&e.look!=="handDrawn"&&d.selectAll("path").attr("style",i),r&&e.look!=="handDrawn"&&d.selectAll("path").attr("style",r),e.width=28,e.height=28,e.intersect=function(p){return Xe.polygon(e,s,p)},n}var tZ=N(()=>{"use strict";Ht();Wt();zt();Ft();o(eZ,"choice")});async function rZ(t,e){let{labelStyles:r,nodeStyles:n}=Ye(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,halfPadding:s}=await mt(t,e,ht(e)),l=a.width/2+s,u,{cssStyles:h}=e;if(e.look==="handDrawn"){let f=je.svg(i),d=Qe(e,{}),p=f.circle(0,0,l*2,d);u=i.insert(()=>p,":first-child"),u.attr("class","basic label-container").attr("style",zn(h))}else u=i.insert("circle",":first-child").attr("class","basic label-container").attr("style",n).attr("r",l).attr("cx",0).attr("cy",0);return Ke(e,u),e.intersect=function(f){return X.info("Circle intersect",e,l,f),Xe.circle(e,l,f)},i}var nZ=N(()=>{"use strict";yt();Ft();Ht();zt();Wt();er();o(rZ,"circle")});function ODe(t){let e=Math.cos(Math.PI/4),r=Math.sin(Math.PI/4),n=t*2,i={x:n/2*e,y:n/2*r},a={x:-(n/2)*e,y:n/2*r},s={x:-(n/2)*e,y:-(n/2)*r},l={x:n/2*e,y:-(n/2)*r};return`M ${a.x},${a.y} L ${l.x},${l.y} + M ${i.x},${i.y} L ${s.x},${s.y}`}function iZ(t,e){let{labelStyles:r,nodeStyles:n}=Ye(e);e.labelStyle=r,e.label="";let i=t.insert("g").attr("class",ht(e)).attr("id",e.domId??e.id),a=Math.max(30,e?.width??0),{cssStyles:s}=e,l=je.svg(i),u=Qe(e,{});e.look!=="handDrawn"&&(u.roughness=0,u.fillStyle="solid");let h=l.circle(0,0,a*2,u),f=ODe(a),d=l.path(f,u),p=i.insert(()=>h,":first-child");return p.insert(()=>d),s&&e.look!=="handDrawn"&&p.selectAll("path").attr("style",s),n&&e.look!=="handDrawn"&&p.selectAll("path").attr("style",n),Ke(e,p),e.intersect=function(m){return X.info("crossedCircle intersect",e,{radius:a,point:m}),Xe.circle(e,a,m)},i}var aZ=N(()=>{"use strict";yt();Ft();zt();Wt();Ht();o(ODe,"createLine");o(iZ,"crossedCircle")});function Kh(t,e,r,n=100,i=0,a=180){let s=[],l=i*Math.PI/180,f=(a*Math.PI/180-l)/(n-1);for(let d=0;dT,":first-child").attr("stroke-opacity",0),S.insert(()=>x,":first-child"),S.attr("class","text"),f&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",f),n&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",n),S.attr("transform",`translate(${h}, 0)`),s.attr("transform",`translate(${-l/2+h-(a.x-(a.left??0))},${-u/2+(e.padding??0)/2-(a.y-(a.top??0))})`),Ke(e,S),e.intersect=function(w){return Xe.polygon(e,p,w)},i}var oZ=N(()=>{"use strict";Ft();Ht();zt();Wt();o(Kh,"generateCirclePoints");o(sZ,"curlyBraceLeft")});function Qh(t,e,r,n=100,i=0,a=180){let s=[],l=i*Math.PI/180,f=(a*Math.PI/180-l)/(n-1);for(let d=0;dT,":first-child").attr("stroke-opacity",0),S.insert(()=>x,":first-child"),S.attr("class","text"),f&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",f),n&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",n),S.attr("transform",`translate(${-h}, 0)`),s.attr("transform",`translate(${-l/2+(e.padding??0)/2-(a.x-(a.left??0))},${-u/2+(e.padding??0)/2-(a.y-(a.top??0))})`),Ke(e,S),e.intersect=function(w){return Xe.polygon(e,p,w)},i}var cZ=N(()=>{"use strict";Ft();Ht();zt();Wt();o(Qh,"generateCirclePoints");o(lZ,"curlyBraceRight")});function Ia(t,e,r,n=100,i=0,a=180){let s=[],l=i*Math.PI/180,f=(a*Math.PI/180-l)/(n-1);for(let d=0;d_,":first-child").attr("stroke-opacity",0),C.insert(()=>b,":first-child"),C.insert(()=>w,":first-child"),C.attr("class","text"),f&&e.look!=="handDrawn"&&C.selectAll("path").attr("style",f),n&&e.look!=="handDrawn"&&C.selectAll("path").attr("style",n),C.attr("transform",`translate(${h-h/4}, 0)`),s.attr("transform",`translate(${-l/2+(e.padding??0)/2-(a.x-(a.left??0))},${-u/2+(e.padding??0)/2-(a.y-(a.top??0))})`),Ke(e,C),e.intersect=function(D){return Xe.polygon(e,m,D)},i}var hZ=N(()=>{"use strict";Ft();Ht();zt();Wt();o(Ia,"generateCirclePoints");o(uZ,"curlyBraces")});async function fZ(t,e){let{labelStyles:r,nodeStyles:n}=Ye(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await mt(t,e,ht(e)),s=80,l=20,u=Math.max(s,(a.width+(e.padding??0)*2)*1.25,e?.width??0),h=Math.max(l,a.height+(e.padding??0)*2,e?.height??0),f=h/2,{cssStyles:d}=e,p=je.svg(i),m=Qe(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=u,y=h,v=g-f,x=y/4,b=[{x:v,y:0},{x,y:0},{x:0,y:y/2},{x,y},{x:v,y},...WT(-v,-y/2,f,50,270,90)],T=Xt(b),S=p.path(T,m),w=i.insert(()=>S,":first-child");return w.attr("class","basic label-container"),d&&e.look!=="handDrawn"&&w.selectChildren("path").attr("style",d),n&&e.look!=="handDrawn"&&w.selectChildren("path").attr("style",n),w.attr("transform",`translate(${-u/2}, ${-h/2})`),Ke(e,w),e.intersect=function(E){return Xe.polygon(e,b,E)},i}var dZ=N(()=>{"use strict";Ft();Ht();zt();Wt();o(fZ,"curvedTrapezoid")});async function pZ(t,e){let{labelStyles:r,nodeStyles:n}=Ye(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await mt(t,e,ht(e)),l=Math.max(a.width+e.padding,e.width??0),u=l/2,h=u/(2.5+l/50),f=Math.max(a.height+h+e.padding,e.height??0),d,{cssStyles:p}=e;if(e.look==="handDrawn"){let m=je.svg(i),g=BDe(0,0,l,f,u,h),y=FDe(0,h,l,f,u,h),v=m.path(g,Qe(e,{})),x=m.path(y,Qe(e,{fill:"none"}));d=i.insert(()=>x,":first-child"),d=i.insert(()=>v,":first-child"),d.attr("class","basic label-container"),p&&d.attr("style",p)}else{let m=PDe(0,0,l,f,u,h);d=i.insert("path",":first-child").attr("d",m).attr("class","basic label-container").attr("style",zn(p)).attr("style",n)}return d.attr("label-offset-y",h),d.attr("transform",`translate(${-l/2}, ${-(f/2+h)})`),Ke(e,d),s.attr("transform",`translate(${-(a.width/2)-(a.x-(a.left??0))}, ${-(a.height/2)+(e.padding??0)/1.5-(a.y-(a.top??0))})`),e.intersect=function(m){let g=Xe.rect(e,m),y=g.x-(e.x??0);if(u!=0&&(Math.abs(y)<(e.width??0)/2||Math.abs(y)==(e.width??0)/2&&Math.abs(g.y-(e.y??0))>(e.height??0)/2-h)){let v=h*h*(1-y*y/(u*u));v>0&&(v=Math.sqrt(v)),v=h-v,m.y-(e.y??0)>0&&(v=-v),g.y+=v}return g},i}var PDe,BDe,FDe,mZ=N(()=>{"use strict";Ft();Ht();zt();Wt();er();PDe=o((t,e,r,n,i,a)=>[`M${t},${e+a}`,`a${i},${a} 0,0,0 ${r},0`,`a${i},${a} 0,0,0 ${-r},0`,`l0,${n}`,`a${i},${a} 0,0,0 ${r},0`,`l0,${-n}`].join(" "),"createCylinderPathD"),BDe=o((t,e,r,n,i,a)=>[`M${t},${e+a}`,`M${t+r},${e+a}`,`a${i},${a} 0,0,0 ${-r},0`,`l0,${n}`,`a${i},${a} 0,0,0 ${r},0`,`l0,${-n}`].join(" "),"createOuterCylinderPathD"),FDe=o((t,e,r,n,i,a)=>[`M${t-r/2},${-n/2}`,`a${i},${a} 0,0,0 ${r},0`].join(" "),"createInnerCylinderPathD");o(pZ,"cylinder")});async function gZ(t,e){let{labelStyles:r,nodeStyles:n}=Ye(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await mt(t,e,ht(e)),l=a.width+e.padding,u=a.height+e.padding,h=u*.2,f=-l/2,d=-u/2-h/2,{cssStyles:p}=e,m=je.svg(i),g=Qe(e,{});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=[{x:f,y:d+h},{x:-f,y:d+h},{x:-f,y:-d},{x:f,y:-d},{x:f,y:d},{x:-f,y:d},{x:-f,y:d+h}],v=m.polygon(y.map(b=>[b.x,b.y]),g),x=i.insert(()=>v,":first-child");return x.attr("class","basic label-container"),p&&e.look!=="handDrawn"&&x.selectAll("path").attr("style",p),n&&e.look!=="handDrawn"&&x.selectAll("path").attr("style",n),s.attr("transform",`translate(${f+(e.padding??0)/2-(a.x-(a.left??0))}, ${d+h+(e.padding??0)/2-(a.y-(a.top??0))})`),Ke(e,x),e.intersect=function(b){return Xe.rect(e,b)},i}var yZ=N(()=>{"use strict";Ft();Ht();zt();Wt();o(gZ,"dividedRectangle")});async function vZ(t,e){let{labelStyles:r,nodeStyles:n}=Ye(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,halfPadding:s}=await mt(t,e,ht(e)),u=a.width/2+s+5,h=a.width/2+s,f,{cssStyles:d}=e;if(e.look==="handDrawn"){let p=je.svg(i),m=Qe(e,{roughness:.2,strokeWidth:2.5}),g=Qe(e,{roughness:.2,strokeWidth:1.5}),y=p.circle(0,0,u*2,m),v=p.circle(0,0,h*2,g);f=i.insert("g",":first-child"),f.attr("class",zn(e.cssClasses)).attr("style",zn(d)),f.node()?.appendChild(y),f.node()?.appendChild(v)}else{f=i.insert("g",":first-child");let p=f.insert("circle",":first-child"),m=f.insert("circle");f.attr("class","basic label-container").attr("style",n),p.attr("class","outer-circle").attr("style",n).attr("r",u).attr("cx",0).attr("cy",0),m.attr("class","inner-circle").attr("style",n).attr("r",h).attr("cx",0).attr("cy",0)}return Ke(e,f),e.intersect=function(p){return X.info("DoubleCircle intersect",e,u,p),Xe.circle(e,u,p)},i}var xZ=N(()=>{"use strict";yt();Ft();Ht();zt();Wt();er();o(vZ,"doublecircle")});function bZ(t,e,{config:{themeVariables:r}}){let{labelStyles:n,nodeStyles:i}=Ye(e);e.label="",e.labelStyle=n;let a=t.insert("g").attr("class",ht(e)).attr("id",e.domId??e.id),s=7,{cssStyles:l}=e,u=je.svg(a),{nodeBorder:h}=r,f=Qe(e,{fillStyle:"solid"});e.look!=="handDrawn"&&(f.roughness=0);let d=u.circle(0,0,s*2,f),p=a.insert(()=>d,":first-child");return p.selectAll("path").attr("style",`fill: ${h} !important;`),l&&l.length>0&&e.look!=="handDrawn"&&p.selectAll("path").attr("style",l),i&&e.look!=="handDrawn"&&p.selectAll("path").attr("style",i),Ke(e,p),e.intersect=function(m){return X.info("filledCircle intersect",e,{radius:s,point:m}),Xe.circle(e,s,m)},a}var TZ=N(()=>{"use strict";Wt();yt();Ht();zt();Ft();o(bZ,"filledCircle")});async function wZ(t,e){let{labelStyles:r,nodeStyles:n}=Ye(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await mt(t,e,ht(e)),l=a.width+(e.padding??0),u=l+a.height,h=l+a.height,f=[{x:0,y:-u},{x:h,y:-u},{x:h/2,y:0}],{cssStyles:d}=e,p=je.svg(i),m=Qe(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=Xt(f),y=p.path(g,m),v=i.insert(()=>y,":first-child").attr("transform",`translate(${-u/2}, ${u/2})`);return d&&e.look!=="handDrawn"&&v.selectChildren("path").attr("style",d),n&&e.look!=="handDrawn"&&v.selectChildren("path").attr("style",n),e.width=l,e.height=u,Ke(e,v),s.attr("transform",`translate(${-a.width/2-(a.x-(a.left??0))}, ${-u/2+(e.padding??0)/2+(a.y-(a.top??0))})`),e.intersect=function(x){return X.info("Triangle intersect",e,f,x),Xe.polygon(e,f,x)},i}var kZ=N(()=>{"use strict";yt();Ft();Ht();zt();Wt();Ft();o(wZ,"flippedTriangle")});function EZ(t,e,{dir:r,config:{state:n,themeVariables:i}}){let{nodeStyles:a}=Ye(e);e.label="";let s=t.insert("g").attr("class",ht(e)).attr("id",e.domId??e.id),{cssStyles:l}=e,u=Math.max(70,e?.width??0),h=Math.max(10,e?.height??0);r==="LR"&&(u=Math.max(10,e?.width??0),h=Math.max(70,e?.height??0));let f=-1*u/2,d=-1*h/2,p=je.svg(s),m=Qe(e,{stroke:i.lineColor,fill:i.lineColor});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=p.rectangle(f,d,u,h,m),y=s.insert(()=>g,":first-child");l&&e.look!=="handDrawn"&&y.selectAll("path").attr("style",l),a&&e.look!=="handDrawn"&&y.selectAll("path").attr("style",a),Ke(e,y);let v=n?.padding??0;return e.width&&e.height&&(e.width+=v/2||0,e.height+=v/2||0),e.intersect=function(x){return Xe.rect(e,x)},s}var SZ=N(()=>{"use strict";Wt();Ht();zt();Ft();o(EZ,"forkJoin")});async function CZ(t,e){let{labelStyles:r,nodeStyles:n}=Ye(e);e.labelStyle=r;let i=80,a=50,{shapeSvg:s,bbox:l}=await mt(t,e,ht(e)),u=Math.max(i,l.width+(e.padding??0)*2,e?.width??0),h=Math.max(a,l.height+(e.padding??0)*2,e?.height??0),f=h/2,{cssStyles:d}=e,p=je.svg(s),m=Qe(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=[{x:-u/2,y:-h/2},{x:u/2-f,y:-h/2},...WT(-u/2+f,0,f,50,90,270),{x:u/2-f,y:h/2},{x:-u/2,y:h/2}],y=Xt(g),v=p.path(y,m),x=s.insert(()=>v,":first-child");return x.attr("class","basic label-container"),d&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",d),n&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",n),Ke(e,x),e.intersect=function(b){return X.info("Pill intersect",e,{radius:f,point:b}),Xe.polygon(e,g,b)},s}var AZ=N(()=>{"use strict";yt();Ft();Ht();zt();Wt();o(CZ,"halfRoundedRectangle")});async function _Z(t,e){let{labelStyles:r,nodeStyles:n}=Ye(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await mt(t,e,ht(e)),s=4,l=a.height+e.padding,u=l/s,h=a.width+2*u+e.padding,f=[{x:u,y:0},{x:h-u,y:0},{x:h,y:-l/2},{x:h-u,y:-l},{x:u,y:-l},{x:0,y:-l/2}],d,{cssStyles:p}=e;if(e.look==="handDrawn"){let m=je.svg(i),g=Qe(e,{}),y=$De(0,0,h,l,u),v=m.path(y,g);d=i.insert(()=>v,":first-child").attr("transform",`translate(${-h/2}, ${l/2})`),p&&d.attr("style",p)}else d=Ma(i,h,l,f);return n&&d.attr("style",n),e.width=h,e.height=l,Ke(e,d),e.intersect=function(m){return Xe.polygon(e,f,m)},i}var $De,DZ=N(()=>{"use strict";Ft();Ht();zt();Wt();Iu();$De=o((t,e,r,n,i)=>[`M${t+i},${e}`,`L${t+r-i},${e}`,`L${t+r},${e-n/2}`,`L${t+r-i},${e-n}`,`L${t+i},${e-n}`,`L${t},${e-n/2}`,"Z"].join(" "),"createHexagonPathD");o(_Z,"hexagon")});async function LZ(t,e){let{labelStyles:r,nodeStyles:n}=Ye(e);e.label="",e.labelStyle=r;let{shapeSvg:i}=await mt(t,e,ht(e)),a=Math.max(30,e?.width??0),s=Math.max(30,e?.height??0),{cssStyles:l}=e,u=je.svg(i),h=Qe(e,{});e.look!=="handDrawn"&&(h.roughness=0,h.fillStyle="solid");let f=[{x:0,y:0},{x:a,y:0},{x:0,y:s},{x:a,y:s}],d=Xt(f),p=u.path(d,h),m=i.insert(()=>p,":first-child");return m.attr("class","basic label-container"),l&&e.look!=="handDrawn"&&m.selectChildren("path").attr("style",l),n&&e.look!=="handDrawn"&&m.selectChildren("path").attr("style",n),m.attr("transform",`translate(${-a/2}, ${-s/2})`),Ke(e,m),e.intersect=function(g){return X.info("Pill intersect",e,{points:f}),Xe.polygon(e,f,g)},i}var RZ=N(()=>{"use strict";yt();Ft();Ht();zt();Wt();o(LZ,"hourglass")});async function NZ(t,e,{config:{themeVariables:r,flowchart:n}}){let{labelStyles:i}=Ye(e);e.labelStyle=i;let a=e.assetHeight??48,s=e.assetWidth??48,l=Math.max(a,s),u=n?.wrappingWidth;e.width=Math.max(l,u??0);let{shapeSvg:h,bbox:f,label:d}=await mt(t,e,"icon-shape default"),p=e.pos==="t",m=l,g=l,{nodeBorder:y}=r,{stylesMap:v}=bc(e),x=-g/2,b=-m/2,T=e.label?8:0,S=je.svg(h),w=Qe(e,{stroke:"none",fill:"none"});e.look!=="handDrawn"&&(w.roughness=0,w.fillStyle="solid");let E=S.rectangle(x,b,g,m,w),_=Math.max(g,f.width),C=m+f.height+T,D=S.rectangle(-_/2,-C/2,_,C,{...w,fill:"transparent",stroke:"none"}),O=h.insert(()=>E,":first-child"),R=h.insert(()=>D);if(e.icon){let k=h.append("g");k.html(`${await Es(e.icon,{height:l,width:l,fallbackPrefix:""})}`);let L=k.node().getBBox(),A=L.width,I=L.height,M=L.x,P=L.y;k.attr("transform",`translate(${-A/2-M},${p?f.height/2+T/2-I/2-P:-f.height/2-T/2-I/2-P})`),k.attr("style",`color: ${v.get("stroke")??y};`)}return d.attr("transform",`translate(${-f.width/2-(f.x-(f.left??0))},${p?-C/2:C/2-f.height})`),O.attr("transform",`translate(0,${p?f.height/2+T/2:-f.height/2-T/2})`),Ke(e,R),e.intersect=function(k){if(X.info("iconSquare intersect",e,k),!e.label)return Xe.rect(e,k);let L=e.x??0,A=e.y??0,I=e.height??0,M=[];return p?M=[{x:L-f.width/2,y:A-I/2},{x:L+f.width/2,y:A-I/2},{x:L+f.width/2,y:A-I/2+f.height+T},{x:L+g/2,y:A-I/2+f.height+T},{x:L+g/2,y:A+I/2},{x:L-g/2,y:A+I/2},{x:L-g/2,y:A-I/2+f.height+T},{x:L-f.width/2,y:A-I/2+f.height+T}]:M=[{x:L-g/2,y:A-I/2},{x:L+g/2,y:A-I/2},{x:L+g/2,y:A-I/2+m},{x:L+f.width/2,y:A-I/2+m},{x:L+f.width/2/2,y:A+I/2},{x:L-f.width/2,y:A+I/2},{x:L-f.width/2,y:A-I/2+m},{x:L-g/2,y:A-I/2+m}],Xe.polygon(e,M,k)},h}var MZ=N(()=>{"use strict";Wt();yt();jl();Ht();zt();Ft();o(NZ,"icon")});async function IZ(t,e,{config:{themeVariables:r,flowchart:n}}){let{labelStyles:i}=Ye(e);e.labelStyle=i;let a=e.assetHeight??48,s=e.assetWidth??48,l=Math.max(a,s),u=n?.wrappingWidth;e.width=Math.max(l,u??0);let{shapeSvg:h,bbox:f,label:d}=await mt(t,e,"icon-shape default"),p=20,m=e.label?8:0,g=e.pos==="t",{nodeBorder:y,mainBkg:v}=r,{stylesMap:x}=bc(e),b=je.svg(h),T=Qe(e,{});e.look!=="handDrawn"&&(T.roughness=0,T.fillStyle="solid");let S=x.get("fill");T.stroke=S??v;let w=h.append("g");e.icon&&w.html(`${await Es(e.icon,{height:l,width:l,fallbackPrefix:""})}`);let E=w.node().getBBox(),_=E.width,C=E.height,D=E.x,O=E.y,R=Math.max(_,C)*Math.SQRT2+p*2,k=b.circle(0,0,R,T),L=Math.max(R,f.width),A=R+f.height+m,I=b.rectangle(-L/2,-A/2,L,A,{...T,fill:"transparent",stroke:"none"}),M=h.insert(()=>k,":first-child"),P=h.insert(()=>I);return w.attr("transform",`translate(${-_/2-D},${g?f.height/2+m/2-C/2-O:-f.height/2-m/2-C/2-O})`),w.attr("style",`color: ${x.get("stroke")??y};`),d.attr("transform",`translate(${-f.width/2-(f.x-(f.left??0))},${g?-A/2:A/2-f.height})`),M.attr("transform",`translate(0,${g?f.height/2+m/2:-f.height/2-m/2})`),Ke(e,P),e.intersect=function(B){return X.info("iconSquare intersect",e,B),Xe.rect(e,B)},h}var OZ=N(()=>{"use strict";Wt();yt();jl();Ht();zt();Ft();o(IZ,"iconCircle")});var Oa,Zh=N(()=>{"use strict";Oa=o((t,e,r,n,i)=>["M",t+i,e,"H",t+r-i,"A",i,i,0,0,1,t+r,e+i,"V",e+n-i,"A",i,i,0,0,1,t+r-i,e+n,"H",t+i,"A",i,i,0,0,1,t,e+n-i,"V",e+i,"A",i,i,0,0,1,t+i,e,"Z"].join(" "),"createRoundedRectPathD")});async function PZ(t,e,{config:{themeVariables:r,flowchart:n}}){let{labelStyles:i}=Ye(e);e.labelStyle=i;let a=e.assetHeight??48,s=e.assetWidth??48,l=Math.max(a,s),u=n?.wrappingWidth;e.width=Math.max(l,u??0);let{shapeSvg:h,bbox:f,halfPadding:d,label:p}=await mt(t,e,"icon-shape default"),m=e.pos==="t",g=l+d*2,y=l+d*2,{nodeBorder:v,mainBkg:x}=r,{stylesMap:b}=bc(e),T=-y/2,S=-g/2,w=e.label?8:0,E=je.svg(h),_=Qe(e,{});e.look!=="handDrawn"&&(_.roughness=0,_.fillStyle="solid");let C=b.get("fill");_.stroke=C??x;let D=E.path(Oa(T,S,y,g,5),_),O=Math.max(y,f.width),R=g+f.height+w,k=E.rectangle(-O/2,-R/2,O,R,{..._,fill:"transparent",stroke:"none"}),L=h.insert(()=>D,":first-child").attr("class","icon-shape2"),A=h.insert(()=>k);if(e.icon){let I=h.append("g");I.html(`${await Es(e.icon,{height:l,width:l,fallbackPrefix:""})}`);let M=I.node().getBBox(),P=M.width,B=M.height,F=M.x,z=M.y;I.attr("transform",`translate(${-P/2-F},${m?f.height/2+w/2-B/2-z:-f.height/2-w/2-B/2-z})`),I.attr("style",`color: ${b.get("stroke")??v};`)}return p.attr("transform",`translate(${-f.width/2-(f.x-(f.left??0))},${m?-R/2:R/2-f.height})`),L.attr("transform",`translate(0,${m?f.height/2+w/2:-f.height/2-w/2})`),Ke(e,A),e.intersect=function(I){if(X.info("iconSquare intersect",e,I),!e.label)return Xe.rect(e,I);let M=e.x??0,P=e.y??0,B=e.height??0,F=[];return m?F=[{x:M-f.width/2,y:P-B/2},{x:M+f.width/2,y:P-B/2},{x:M+f.width/2,y:P-B/2+f.height+w},{x:M+y/2,y:P-B/2+f.height+w},{x:M+y/2,y:P+B/2},{x:M-y/2,y:P+B/2},{x:M-y/2,y:P-B/2+f.height+w},{x:M-f.width/2,y:P-B/2+f.height+w}]:F=[{x:M-y/2,y:P-B/2},{x:M+y/2,y:P-B/2},{x:M+y/2,y:P-B/2+g},{x:M+f.width/2,y:P-B/2+g},{x:M+f.width/2/2,y:P+B/2},{x:M-f.width/2,y:P+B/2},{x:M-f.width/2,y:P-B/2+g},{x:M-y/2,y:P-B/2+g}],Xe.polygon(e,F,I)},h}var BZ=N(()=>{"use strict";Wt();yt();jl();Ht();zt();Zh();Ft();o(PZ,"iconRounded")});async function FZ(t,e,{config:{themeVariables:r,flowchart:n}}){let{labelStyles:i}=Ye(e);e.labelStyle=i;let a=e.assetHeight??48,s=e.assetWidth??48,l=Math.max(a,s),u=n?.wrappingWidth;e.width=Math.max(l,u??0);let{shapeSvg:h,bbox:f,halfPadding:d,label:p}=await mt(t,e,"icon-shape default"),m=e.pos==="t",g=l+d*2,y=l+d*2,{nodeBorder:v,mainBkg:x}=r,{stylesMap:b}=bc(e),T=-y/2,S=-g/2,w=e.label?8:0,E=je.svg(h),_=Qe(e,{});e.look!=="handDrawn"&&(_.roughness=0,_.fillStyle="solid");let C=b.get("fill");_.stroke=C??x;let D=E.path(Oa(T,S,y,g,.1),_),O=Math.max(y,f.width),R=g+f.height+w,k=E.rectangle(-O/2,-R/2,O,R,{..._,fill:"transparent",stroke:"none"}),L=h.insert(()=>D,":first-child"),A=h.insert(()=>k);if(e.icon){let I=h.append("g");I.html(`${await Es(e.icon,{height:l,width:l,fallbackPrefix:""})}`);let M=I.node().getBBox(),P=M.width,B=M.height,F=M.x,z=M.y;I.attr("transform",`translate(${-P/2-F},${m?f.height/2+w/2-B/2-z:-f.height/2-w/2-B/2-z})`),I.attr("style",`color: ${b.get("stroke")??v};`)}return p.attr("transform",`translate(${-f.width/2-(f.x-(f.left??0))},${m?-R/2:R/2-f.height})`),L.attr("transform",`translate(0,${m?f.height/2+w/2:-f.height/2-w/2})`),Ke(e,A),e.intersect=function(I){if(X.info("iconSquare intersect",e,I),!e.label)return Xe.rect(e,I);let M=e.x??0,P=e.y??0,B=e.height??0,F=[];return m?F=[{x:M-f.width/2,y:P-B/2},{x:M+f.width/2,y:P-B/2},{x:M+f.width/2,y:P-B/2+f.height+w},{x:M+y/2,y:P-B/2+f.height+w},{x:M+y/2,y:P+B/2},{x:M-y/2,y:P+B/2},{x:M-y/2,y:P-B/2+f.height+w},{x:M-f.width/2,y:P-B/2+f.height+w}]:F=[{x:M-y/2,y:P-B/2},{x:M+y/2,y:P-B/2},{x:M+y/2,y:P-B/2+g},{x:M+f.width/2,y:P-B/2+g},{x:M+f.width/2/2,y:P+B/2},{x:M-f.width/2,y:P+B/2},{x:M-f.width/2,y:P-B/2+g},{x:M-y/2,y:P-B/2+g}],Xe.polygon(e,F,I)},h}var $Z=N(()=>{"use strict";Wt();yt();jl();Ht();Zh();zt();Ft();o(FZ,"iconSquare")});async function zZ(t,e,{config:{flowchart:r}}){let n=new Image;n.src=e?.img??"",await n.decode();let i=Number(n.naturalWidth.toString().replace("px","")),a=Number(n.naturalHeight.toString().replace("px",""));e.imageAspectRatio=i/a;let{labelStyles:s}=Ye(e);e.labelStyle=s;let l=r?.wrappingWidth;e.defaultWidth=r?.wrappingWidth;let u=Math.max(e.label?l??0:0,e?.assetWidth??i),h=e.constraint==="on"&&e?.assetHeight?e.assetHeight*e.imageAspectRatio:u,f=e.constraint==="on"?h/e.imageAspectRatio:e?.assetHeight??a;e.width=Math.max(h,l??0);let{shapeSvg:d,bbox:p,label:m}=await mt(t,e,"image-shape default"),g=e.pos==="t",y=-h/2,v=-f/2,x=e.label?8:0,b=je.svg(d),T=Qe(e,{});e.look!=="handDrawn"&&(T.roughness=0,T.fillStyle="solid");let S=b.rectangle(y,v,h,f,T),w=Math.max(h,p.width),E=f+p.height+x,_=b.rectangle(-w/2,-E/2,w,E,{...T,fill:"none",stroke:"none"}),C=d.insert(()=>S,":first-child"),D=d.insert(()=>_);if(e.img){let O=d.append("image");O.attr("href",e.img),O.attr("width",h),O.attr("height",f),O.attr("preserveAspectRatio","none"),O.attr("transform",`translate(${-h/2},${g?E/2-f:-E/2})`)}return m.attr("transform",`translate(${-p.width/2-(p.x-(p.left??0))},${g?-f/2-p.height/2-x/2:f/2-p.height/2+x/2})`),C.attr("transform",`translate(0,${g?p.height/2+x/2:-p.height/2-x/2})`),Ke(e,D),e.intersect=function(O){if(X.info("iconSquare intersect",e,O),!e.label)return Xe.rect(e,O);let R=e.x??0,k=e.y??0,L=e.height??0,A=[];return g?A=[{x:R-p.width/2,y:k-L/2},{x:R+p.width/2,y:k-L/2},{x:R+p.width/2,y:k-L/2+p.height+x},{x:R+h/2,y:k-L/2+p.height+x},{x:R+h/2,y:k+L/2},{x:R-h/2,y:k+L/2},{x:R-h/2,y:k-L/2+p.height+x},{x:R-p.width/2,y:k-L/2+p.height+x}]:A=[{x:R-h/2,y:k-L/2},{x:R+h/2,y:k-L/2},{x:R+h/2,y:k-L/2+f},{x:R+p.width/2,y:k-L/2+f},{x:R+p.width/2/2,y:k+L/2},{x:R-p.width/2,y:k+L/2},{x:R-p.width/2,y:k-L/2+f},{x:R-h/2,y:k-L/2+f}],Xe.polygon(e,A,O)},d}var GZ=N(()=>{"use strict";Wt();yt();Ht();zt();Ft();o(zZ,"imageSquare")});async function VZ(t,e){let{labelStyles:r,nodeStyles:n}=Ye(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await mt(t,e,ht(e)),s=Math.max(a.width+(e.padding??0)*2,e?.width??0),l=Math.max(a.height+(e.padding??0)*2,e?.height??0),u=[{x:0,y:0},{x:s,y:0},{x:s+3*l/6,y:-l},{x:-3*l/6,y:-l}],h,{cssStyles:f}=e;if(e.look==="handDrawn"){let d=je.svg(i),p=Qe(e,{}),m=Xt(u),g=d.path(m,p);h=i.insert(()=>g,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),f&&h.attr("style",f)}else h=Ma(i,s,l,u);return n&&h.attr("style",n),e.width=s,e.height=l,Ke(e,h),e.intersect=function(d){return Xe.polygon(e,u,d)},i}var UZ=N(()=>{"use strict";Ft();Ht();zt();Wt();Iu();o(VZ,"inv_trapezoid")});async function Ou(t,e,r){let{labelStyles:n,nodeStyles:i}=Ye(e);e.labelStyle=n;let{shapeSvg:a,bbox:s}=await mt(t,e,ht(e)),l=Math.max(s.width+r.labelPaddingX*2,e?.width||0),u=Math.max(s.height+r.labelPaddingY*2,e?.height||0),h=-l/2,f=-u/2,d,{rx:p,ry:m}=e,{cssStyles:g}=e;if(r?.rx&&r.ry&&(p=r.rx,m=r.ry),e.look==="handDrawn"){let y=je.svg(a),v=Qe(e,{}),x=p||m?y.path(Oa(h,f,l,u,p||0),v):y.rectangle(h,f,l,u,v);d=a.insert(()=>x,":first-child"),d.attr("class","basic label-container").attr("style",zn(g))}else d=a.insert("rect",":first-child"),d.attr("class","basic label-container").attr("style",i).attr("rx",zn(p)).attr("ry",zn(m)).attr("x",h).attr("y",f).attr("width",l).attr("height",u);return Ke(e,d),e.intersect=function(y){return Xe.rect(e,y)},a}var Em=N(()=>{"use strict";Ft();Ht();Zh();zt();Wt();er();o(Ou,"drawRect")});async function HZ(t,e){let{shapeSvg:r,bbox:n,label:i}=await mt(t,e,"label"),a=r.insert("rect",":first-child");return a.attr("width",.1).attr("height",.1),r.attr("class","label edgeLabel"),i.attr("transform",`translate(${-(n.width/2)-(n.x-(n.left??0))}, ${-(n.height/2)-(n.y-(n.top??0))})`),Ke(e,a),e.intersect=function(u){return Xe.rect(e,u)},r}var WZ=N(()=>{"use strict";Em();Ft();Ht();o(HZ,"labelRect")});async function qZ(t,e){let{labelStyles:r,nodeStyles:n}=Ye(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await mt(t,e,ht(e)),s=Math.max(a.width+(e.padding??0),e?.width??0),l=Math.max(a.height+(e.padding??0),e?.height??0),u=[{x:0,y:0},{x:s+3*l/6,y:0},{x:s,y:-l},{x:-(3*l)/6,y:-l}],h,{cssStyles:f}=e;if(e.look==="handDrawn"){let d=je.svg(i),p=Qe(e,{}),m=Xt(u),g=d.path(m,p);h=i.insert(()=>g,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),f&&h.attr("style",f)}else h=Ma(i,s,l,u);return n&&h.attr("style",n),e.width=s,e.height=l,Ke(e,h),e.intersect=function(d){return Xe.polygon(e,u,d)},i}var YZ=N(()=>{"use strict";Ft();Ht();zt();Wt();Iu();o(qZ,"lean_left")});async function XZ(t,e){let{labelStyles:r,nodeStyles:n}=Ye(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await mt(t,e,ht(e)),s=Math.max(a.width+(e.padding??0),e?.width??0),l=Math.max(a.height+(e.padding??0),e?.height??0),u=[{x:-3*l/6,y:0},{x:s,y:0},{x:s+3*l/6,y:-l},{x:0,y:-l}],h,{cssStyles:f}=e;if(e.look==="handDrawn"){let d=je.svg(i),p=Qe(e,{}),m=Xt(u),g=d.path(m,p);h=i.insert(()=>g,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),f&&h.attr("style",f)}else h=Ma(i,s,l,u);return n&&h.attr("style",n),e.width=s,e.height=l,Ke(e,h),e.intersect=function(d){return Xe.polygon(e,u,d)},i}var jZ=N(()=>{"use strict";Ft();Ht();zt();Wt();Iu();o(XZ,"lean_right")});function KZ(t,e){let{labelStyles:r,nodeStyles:n}=Ye(e);e.label="",e.labelStyle=r;let i=t.insert("g").attr("class",ht(e)).attr("id",e.domId??e.id),{cssStyles:a}=e,s=Math.max(35,e?.width??0),l=Math.max(35,e?.height??0),u=7,h=[{x:s,y:0},{x:0,y:l+u/2},{x:s-2*u,y:l+u/2},{x:0,y:2*l},{x:s,y:l-u/2},{x:2*u,y:l-u/2}],f=je.svg(i),d=Qe(e,{});e.look!=="handDrawn"&&(d.roughness=0,d.fillStyle="solid");let p=Xt(h),m=f.path(p,d),g=i.insert(()=>m,":first-child");return a&&e.look!=="handDrawn"&&g.selectAll("path").attr("style",a),n&&e.look!=="handDrawn"&&g.selectAll("path").attr("style",n),g.attr("transform",`translate(-${s/2},${-l})`),Ke(e,g),e.intersect=function(y){return X.info("lightningBolt intersect",e,y),Xe.polygon(e,h,y)},i}var QZ=N(()=>{"use strict";yt();Ft();zt();Wt();Ht();Ft();o(KZ,"lightningBolt")});async function ZZ(t,e){let{labelStyles:r,nodeStyles:n}=Ye(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await mt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0),e.width??0),u=l/2,h=u/(2.5+l/50),f=Math.max(a.height+h+(e.padding??0),e.height??0),d=f*.1,p,{cssStyles:m}=e;if(e.look==="handDrawn"){let g=je.svg(i),y=GDe(0,0,l,f,u,h,d),v=VDe(0,h,l,f,u,h),x=Qe(e,{}),b=g.path(y,x),T=g.path(v,x);i.insert(()=>T,":first-child").attr("class","line"),p=i.insert(()=>b,":first-child"),p.attr("class","basic label-container"),m&&p.attr("style",m)}else{let g=zDe(0,0,l,f,u,h,d);p=i.insert("path",":first-child").attr("d",g).attr("class","basic label-container").attr("style",zn(m)).attr("style",n)}return p.attr("label-offset-y",h),p.attr("transform",`translate(${-l/2}, ${-(f/2+h)})`),Ke(e,p),s.attr("transform",`translate(${-(a.width/2)-(a.x-(a.left??0))}, ${-(a.height/2)+h-(a.y-(a.top??0))})`),e.intersect=function(g){let y=Xe.rect(e,g),v=y.x-(e.x??0);if(u!=0&&(Math.abs(v)<(e.width??0)/2||Math.abs(v)==(e.width??0)/2&&Math.abs(y.y-(e.y??0))>(e.height??0)/2-h)){let x=h*h*(1-v*v/(u*u));x>0&&(x=Math.sqrt(x)),x=h-x,g.y-(e.y??0)>0&&(x=-x),y.y+=x}return y},i}var zDe,GDe,VDe,JZ=N(()=>{"use strict";Ft();Ht();zt();Wt();er();zDe=o((t,e,r,n,i,a,s)=>[`M${t},${e+a}`,`a${i},${a} 0,0,0 ${r},0`,`a${i},${a} 0,0,0 ${-r},0`,`l0,${n}`,`a${i},${a} 0,0,0 ${r},0`,`l0,${-n}`,`M${t},${e+a+s}`,`a${i},${a} 0,0,0 ${r},0`].join(" "),"createCylinderPathD"),GDe=o((t,e,r,n,i,a,s)=>[`M${t},${e+a}`,`M${t+r},${e+a}`,`a${i},${a} 0,0,0 ${-r},0`,`l0,${n}`,`a${i},${a} 0,0,0 ${r},0`,`l0,${-n}`,`M${t},${e+a+s}`,`a${i},${a} 0,0,0 ${r},0`].join(" "),"createOuterCylinderPathD"),VDe=o((t,e,r,n,i,a)=>[`M${t-r/2},${-n/2}`,`a${i},${a} 0,0,0 ${r},0`].join(" "),"createInnerCylinderPathD");o(ZZ,"linedCylinder")});async function eJ(t,e){let{labelStyles:r,nodeStyles:n}=Ye(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await mt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=u/4,f=u+h,{cssStyles:d}=e,p=je.svg(i),m=Qe(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=[{x:-l/2-l/2*.1,y:-f/2},{x:-l/2-l/2*.1,y:f/2},...Go(-l/2-l/2*.1,f/2,l/2+l/2*.1,f/2,h,.8),{x:l/2+l/2*.1,y:-f/2},{x:-l/2-l/2*.1,y:-f/2},{x:-l/2,y:-f/2},{x:-l/2,y:f/2*1.1},{x:-l/2,y:-f/2}],y=p.polygon(g.map(x=>[x.x,x.y]),m),v=i.insert(()=>y,":first-child");return v.attr("class","basic label-container"),d&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",d),n&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",n),v.attr("transform",`translate(0,${-h/2})`),s.attr("transform",`translate(${-l/2+(e.padding??0)+l/2*.1/2-(a.x-(a.left??0))},${-u/2+(e.padding??0)-h/2-(a.y-(a.top??0))})`),Ke(e,v),e.intersect=function(x){return Xe.polygon(e,g,x)},i}var tJ=N(()=>{"use strict";Ft();Ht();Wt();zt();o(eJ,"linedWaveEdgedRect")});async function rJ(t,e){let{labelStyles:r,nodeStyles:n}=Ye(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await mt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=5,f=-l/2,d=-u/2,{cssStyles:p}=e,m=je.svg(i),g=Qe(e,{}),y=[{x:f-h,y:d+h},{x:f-h,y:d+u+h},{x:f+l-h,y:d+u+h},{x:f+l-h,y:d+u},{x:f+l,y:d+u},{x:f+l,y:d+u-h},{x:f+l+h,y:d+u-h},{x:f+l+h,y:d-h},{x:f+h,y:d-h},{x:f+h,y:d},{x:f,y:d},{x:f,y:d+h}],v=[{x:f,y:d+h},{x:f+l-h,y:d+h},{x:f+l-h,y:d+u},{x:f+l,y:d+u},{x:f+l,y:d},{x:f,y:d}];e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let x=Xt(y),b=m.path(x,g),T=Xt(v),S=m.path(T,{...g,fill:"none"}),w=i.insert(()=>S,":first-child");return w.insert(()=>b,":first-child"),w.attr("class","basic label-container"),p&&e.look!=="handDrawn"&&w.selectAll("path").attr("style",p),n&&e.look!=="handDrawn"&&w.selectAll("path").attr("style",n),s.attr("transform",`translate(${-(a.width/2)-h-(a.x-(a.left??0))}, ${-(a.height/2)+h-(a.y-(a.top??0))})`),Ke(e,w),e.intersect=function(E){return Xe.polygon(e,y,E)},i}var nJ=N(()=>{"use strict";Ft();zt();Wt();Ht();o(rJ,"multiRect")});async function iJ(t,e){let{labelStyles:r,nodeStyles:n}=Ye(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await mt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=u/4,f=u+h,d=-l/2,p=-f/2,m=5,{cssStyles:g}=e,y=Go(d-m,p+f+m,d+l-m,p+f+m,h,.8),v=y?.[y.length-1],x=[{x:d-m,y:p+m},{x:d-m,y:p+f+m},...y,{x:d+l-m,y:v.y-m},{x:d+l,y:v.y-m},{x:d+l,y:v.y-2*m},{x:d+l+m,y:v.y-2*m},{x:d+l+m,y:p-m},{x:d+m,y:p-m},{x:d+m,y:p},{x:d,y:p},{x:d,y:p+m}],b=[{x:d,y:p+m},{x:d+l-m,y:p+m},{x:d+l-m,y:v.y-m},{x:d+l,y:v.y-m},{x:d+l,y:p},{x:d,y:p}],T=je.svg(i),S=Qe(e,{});e.look!=="handDrawn"&&(S.roughness=0,S.fillStyle="solid");let w=Xt(x),E=T.path(w,S),_=Xt(b),C=T.path(_,S),D=i.insert(()=>E,":first-child");return D.insert(()=>C),D.attr("class","basic label-container"),g&&e.look!=="handDrawn"&&D.selectAll("path").attr("style",g),n&&e.look!=="handDrawn"&&D.selectAll("path").attr("style",n),D.attr("transform",`translate(0,${-h/2})`),s.attr("transform",`translate(${-(a.width/2)-m-(a.x-(a.left??0))}, ${-(a.height/2)+m-h/2-(a.y-(a.top??0))})`),Ke(e,D),e.intersect=function(O){return Xe.polygon(e,x,O)},i}var aJ=N(()=>{"use strict";Ft();Ht();Wt();zt();o(iJ,"multiWaveEdgedRectangle")});async function sJ(t,e,{config:{themeVariables:r}}){let{labelStyles:n,nodeStyles:i}=Ye(e);e.labelStyle=n,e.useHtmlLabels||tr().flowchart?.htmlLabels!==!1||(e.centerLabel=!0);let{shapeSvg:s,bbox:l,label:u}=await mt(t,e,ht(e)),h=Math.max(l.width+(e.padding??0)*2,e?.width??0),f=Math.max(l.height+(e.padding??0)*2,e?.height??0),d=-h/2,p=-f/2,{cssStyles:m}=e,g=je.svg(s),y=Qe(e,{fill:r.noteBkgColor,stroke:r.noteBorderColor});e.look!=="handDrawn"&&(y.roughness=0,y.fillStyle="solid");let v=g.rectangle(d,p,h,f,y),x=s.insert(()=>v,":first-child");return x.attr("class","basic label-container"),m&&e.look!=="handDrawn"&&x.selectAll("path").attr("style",m),i&&e.look!=="handDrawn"&&x.selectAll("path").attr("style",i),u.attr("transform",`translate(${-l.width/2-(l.x-(l.left??0))}, ${-(l.height/2)-(l.y-(l.top??0))})`),Ke(e,x),e.intersect=function(b){return Xe.rect(e,b)},s}var oJ=N(()=>{"use strict";Wt();Ht();zt();Ft();mi();o(sJ,"note")});async function lJ(t,e){let{labelStyles:r,nodeStyles:n}=Ye(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await mt(t,e,ht(e)),s=a.width+e.padding,l=a.height+e.padding,u=s+l,h=[{x:u/2,y:0},{x:u,y:-u/2},{x:u/2,y:-u},{x:0,y:-u/2}],f,{cssStyles:d}=e;if(e.look==="handDrawn"){let p=je.svg(i),m=Qe(e,{}),g=UDe(0,0,u),y=p.path(g,m);f=i.insert(()=>y,":first-child").attr("transform",`translate(${-u/2}, ${u/2})`),d&&f.attr("style",d)}else f=Ma(i,u,u,h);return n&&f.attr("style",n),Ke(e,f),e.intersect=function(p){return X.debug(`APA12 Intersect called SPLIT point:`,p,` node: `,e,` -res:`,Ye.polygon(e,h,p)),Ye.polygon(e,h,p)},i}var h_e,ZQ=N(()=>{"use strict";vt();Ft();Ht();Ut();Wt();Nu();h_e=o((t,e,r)=>[`M${t+r/2},${e}`,`L${t+r},${e-r/2}`,`L${t+r/2},${e-r}`,`L${t},${e-r/2}`,"Z"].join(" "),"createDecisionBoxPathD");o(QQ,"question")});async function JQ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0),e?.width??0),u=Math.max(a.height+(e.padding??0),e?.height??0),h=-l/2,f=-u/2,d=f/2,p=[{x:h+d,y:f},{x:h,y:0},{x:h+d,y:-f},{x:-h,y:-f},{x:-h,y:f}],{cssStyles:m}=e,g=Xe.svg(i),y=Ke(e,{});e.look!=="handDrawn"&&(y.roughness=0,y.fillStyle="solid");let v=Xt(p),x=g.path(v,y),b=i.insert(()=>x,":first-child");return b.attr("class","basic label-container"),m&&e.look!=="handDrawn"&&b.selectAll("path").attr("style",m),n&&e.look!=="handDrawn"&&b.selectAll("path").attr("style",n),b.attr("transform",`translate(${-d/2},0)`),s.attr("transform",`translate(${-d/2-a.width/2-(a.x-(a.left??0))}, ${-(a.height/2)-(a.y-(a.top??0))})`),je(e,b),e.intersect=function(w){return Ye.polygon(e,p,w)},i}var eZ=N(()=>{"use strict";Ft();Ht();Ut();Wt();o(JQ,"rect_left_inv_arrow")});function f_e(t,e){e&&t.attr("style",e)}async function d_e(t){let e=Ge(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),r=e.append("xhtml:div"),n=t.label;t.label&&pi(t.label)&&(n=await xh(t.label.replace(Ze.lineBreakRegex,` -`),me()));let i=t.isNode?"nodeLabel":"edgeLabel";return r.html('"+n+""),f_e(r,t.labelStyle),r.style("display","inline-block"),r.style("padding-right","1px"),r.style("white-space","nowrap"),r.attr("xmlns","http://www.w3.org/1999/xhtml"),e.node()}var p_e,vc,Xw=N(()=>{"use strict";pr();vt();zt();dr();nr();o(f_e,"applyStyle");o(d_e,"addHtmlLabel");p_e=o(async(t,e,r,n)=>{let i=t||"";if(typeof i=="object"&&(i=i[0]),fr(me().flowchart.htmlLabels)){i=i.replace(/\\n|\n/g,"
    "),X.info("vertexText"+i);let a={isNode:n,label:na(i).replace(/fa[blrs]?:fa-[\w-]+/g,l=>``),labelStyle:e&&e.replace("fill:","color:")};return await d_e(a)}else{let a=document.createElementNS("http://www.w3.org/2000/svg","text");a.setAttribute("style",e.replace("color:","fill:"));let s=[];typeof i=="string"?s=i.split(/\\n|\n|/gi):Array.isArray(i)?s=i:s=[];for(let l of s){let u=document.createElementNS("http://www.w3.org/2000/svg","tspan");u.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),u.setAttribute("dy","1em"),u.setAttribute("x","0"),r?u.setAttribute("class","title-row"):u.setAttribute("class","row"),u.textContent=l.trim(),a.appendChild(u)}return a}},"createLabel"),vc=p_e});async function tZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let i;e.cssClasses?i="node "+e.cssClasses:i="node default";let a=t.insert("g").attr("class",i).attr("id",e.domId||e.id),s=a.insert("g"),l=a.insert("g").attr("class","label").attr("style",n),u=e.description,h=e.label,f=l.node().appendChild(await vc(h,e.labelStyle,!0,!0)),d={width:0,height:0};if(fr(me()?.flowchart?.htmlLabels)){let S=f.children[0],_=Ge(f);d=S.getBoundingClientRect(),_.attr("width",d.width),_.attr("height",d.height)}X.info("Text 2",u);let p=u||[],m=f.getBBox(),g=l.node().appendChild(await vc(p.join?p.join("
    "):p,e.labelStyle,!0,!0)),y=g.children[0],v=Ge(g);d=y.getBoundingClientRect(),v.attr("width",d.width),v.attr("height",d.height);let x=(e.padding||0)/2;Ge(g).attr("transform","translate( "+(d.width>m.width?0:(m.width-d.width)/2)+", "+(m.height+x+5)+")"),Ge(f).attr("transform","translate( "+(d.width(X.debug("Rough node insert CXC",I),L),":first-child"),E=a.insert(()=>(X.debug("Rough node insert CXC",I),I),":first-child")}else E=s.insert("rect",":first-child"),A=s.insert("line"),E.attr("class","outer title-state").attr("style",n).attr("x",-d.width/2-x).attr("y",-d.height/2-x).attr("width",d.width+(e.padding||0)).attr("height",d.height+(e.padding||0)),A.attr("class","divider").attr("x1",-d.width/2-x).attr("x2",d.width/2+x).attr("y1",-d.height/2-x+m.height+x).attr("y2",-d.height/2-x+m.height+x);return je(e,E),e.intersect=function(S){return Ye.rect(e,S)},a}var rZ=N(()=>{"use strict";pr();dr();Ft();Xw();Ht();Ut();Wt();zt();Kh();vt();o(tZ,"rectWithTitle")});async function nZ(t,e){let r={rx:5,ry:5,classes:"",labelPaddingX:(e?.padding||0)*1,labelPaddingY:(e?.padding||0)*1};return Mu(t,e,r)}var iZ=N(()=>{"use strict";Tm();o(nZ,"roundedRect")});async function aZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=e?.padding??0,u=Math.max(a.width+(e.padding??0)*2,e?.width??0),h=Math.max(a.height+(e.padding??0)*2,e?.height??0),f=-a.width/2-l,d=-a.height/2-l,{cssStyles:p}=e,m=Xe.svg(i),g=Ke(e,{});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=[{x:f,y:d},{x:f+u+8,y:d},{x:f+u+8,y:d+h},{x:f-8,y:d+h},{x:f-8,y:d},{x:f,y:d},{x:f,y:d+h}],v=m.polygon(y.map(b=>[b.x,b.y]),g),x=i.insert(()=>v,":first-child");return x.attr("class","basic label-container").attr("style",$n(p)),n&&e.look!=="handDrawn"&&x.selectAll("path").attr("style",n),p&&e.look!=="handDrawn"&&x.selectAll("path").attr("style",n),s.attr("transform",`translate(${-u/2+4+(e.padding??0)-(a.x-(a.left??0))},${-h/2+(e.padding??0)-(a.y-(a.top??0))})`),je(e,x),e.intersect=function(b){return Ye.rect(e,b)},i}var sZ=N(()=>{"use strict";Ft();Ht();Ut();Wt();nr();o(aZ,"shadedProcess")});async function oZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=-l/2,f=-u/2,{cssStyles:d}=e,p=Xe.svg(i),m=Ke(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=[{x:h,y:f},{x:h,y:f+u},{x:h+l,y:f+u},{x:h+l,y:f-u/2}],y=Xt(g),v=p.path(y,m),x=i.insert(()=>v,":first-child");return x.attr("class","basic label-container"),d&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",d),n&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",n),x.attr("transform",`translate(0, ${u/4})`),s.attr("transform",`translate(${-l/2+(e.padding??0)-(a.x-(a.left??0))}, ${-u/4+(e.padding??0)-(a.y-(a.top??0))})`),je(e,x),e.intersect=function(b){return Ye.polygon(e,g,b)},i}var lZ=N(()=>{"use strict";Ft();Ht();Ut();Wt();o(oZ,"slopedRect")});async function cZ(t,e){let r={rx:0,ry:0,classes:"",labelPaddingX:(e?.padding||0)*2,labelPaddingY:(e?.padding||0)*1};return Mu(t,e,r)}var uZ=N(()=>{"use strict";Tm();o(cZ,"squareRect")});async function hZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=a.height+e.padding,l=a.width+s/4+e.padding,u,{cssStyles:h}=e;if(e.look==="handDrawn"){let f=Xe.svg(i),d=Ke(e,{}),p=Na(-l/2,-s/2,l,s,s/2),m=f.path(p,d);u=i.insert(()=>m,":first-child"),u.attr("class","basic label-container").attr("style",$n(h))}else u=i.insert("rect",":first-child"),u.attr("class","basic label-container").attr("style",n).attr("rx",s/2).attr("ry",s/2).attr("x",-l/2).attr("y",-s/2).attr("width",l).attr("height",s);return je(e,u),e.intersect=function(f){return Ye.rect(e,f)},i}var fZ=N(()=>{"use strict";Ft();Ht();Ut();Wt();Kh();nr();o(hZ,"stadium")});async function dZ(t,e){return Mu(t,e,{rx:5,ry:5,classes:"flowchart-node"})}var pZ=N(()=>{"use strict";Tm();o(dZ,"state")});function mZ(t,e,{config:{themeVariables:r}}){let{labelStyles:n,nodeStyles:i}=Qe(e);e.labelStyle=n;let{cssStyles:a}=e,{lineColor:s,stateBorder:l,nodeBorder:u}=r,h=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),f=Xe.svg(h),d=Ke(e,{});e.look!=="handDrawn"&&(d.roughness=0,d.fillStyle="solid");let p=f.circle(0,0,14,{...d,stroke:s,strokeWidth:2}),m=l??u,g=f.circle(0,0,5,{...d,fill:m,stroke:m,strokeWidth:2,fillStyle:"solid"}),y=h.insert(()=>p,":first-child");return y.insert(()=>g),a&&y.selectAll("path").attr("style",a),i&&y.selectAll("path").attr("style",i),je(e,y),e.intersect=function(v){return Ye.circle(e,7,v)},h}var gZ=N(()=>{"use strict";Wt();Ht();Ut();Ft();o(mZ,"stateEnd")});function yZ(t,e,{config:{themeVariables:r}}){let{lineColor:n}=r,i=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),a;if(e.look==="handDrawn"){let l=Xe.svg(i).circle(0,0,14,wK(n));a=i.insert(()=>l),a.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14)}else a=i.insert("circle",":first-child"),a.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14);return je(e,a),e.intersect=function(s){return Ye.circle(e,7,s)},i}var vZ=N(()=>{"use strict";Wt();Ht();Ut();Ft();o(yZ,"stateStart")});async function xZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=(e?.padding||0)/2,l=a.width+e.padding,u=a.height+e.padding,h=-a.width/2-s,f=-a.height/2-s,d=[{x:0,y:0},{x:l,y:0},{x:l,y:-u},{x:0,y:-u},{x:0,y:0},{x:-8,y:0},{x:l+8,y:0},{x:l+8,y:-u},{x:-8,y:-u},{x:-8,y:0}];if(e.look==="handDrawn"){let p=Xe.svg(i),m=Ke(e,{}),g=p.rectangle(h-8,f,l+16,u,m),y=p.line(h,f,h,f+u,m),v=p.line(h+l,f,h+l,f+u,m);i.insert(()=>y,":first-child"),i.insert(()=>v,":first-child");let x=i.insert(()=>g,":first-child"),{cssStyles:b}=e;x.attr("class","basic label-container").attr("style",$n(b)),je(e,x)}else{let p=La(i,l,u,d);n&&p.attr("style",n),je(e,p)}return e.intersect=function(p){return Ye.polygon(e,d,p)},i}var bZ=N(()=>{"use strict";Ft();Ht();Ut();Wt();Nu();nr();o(xZ,"subroutine")});async function wZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=Math.max(a.width+(e.padding??0)*2,e?.width??0),l=Math.max(a.height+(e.padding??0)*2,e?.height??0),u=-s/2,h=-l/2,f=.2*l,d=.2*l,{cssStyles:p}=e,m=Xe.svg(i),g=Ke(e,{}),y=[{x:u-f/2,y:h},{x:u+s+f/2,y:h},{x:u+s+f/2,y:h+l},{x:u-f/2,y:h+l}],v=[{x:u+s-f/2,y:h+l},{x:u+s+f/2,y:h+l},{x:u+s+f/2,y:h+l-d}];e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let x=Xt(y),b=m.path(x,g),w=Xt(v),C=m.path(w,{...g,fillStyle:"solid"}),T=i.insert(()=>C,":first-child");return T.insert(()=>b,":first-child"),T.attr("class","basic label-container"),p&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",p),n&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",n),je(e,T),e.intersect=function(E){return Ye.polygon(e,y,E)},i}var TZ=N(()=>{"use strict";Ft();Ut();Wt();Ht();o(wZ,"taggedRect")});async function kZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=u/4,f=.2*l,d=.2*u,p=u+h,{cssStyles:m}=e,g=Xe.svg(i),y=Ke(e,{});e.look!=="handDrawn"&&(y.roughness=0,y.fillStyle="solid");let v=[{x:-l/2-l/2*.1,y:p/2},...$o(-l/2-l/2*.1,p/2,l/2+l/2*.1,p/2,h,.8),{x:l/2+l/2*.1,y:-p/2},{x:-l/2-l/2*.1,y:-p/2}],x=-l/2+l/2*.1,b=-p/2-d*.4,w=[{x:x+l-f,y:(b+u)*1.4},{x:x+l,y:b+u-d},{x:x+l,y:(b+u)*.9},...$o(x+l,(b+u)*1.3,x+l-f,(b+u)*1.5,-u*.03,.5)],C=Xt(v),T=g.path(C,y),E=Xt(w),A=g.path(E,{...y,fillStyle:"solid"}),S=i.insert(()=>A,":first-child");return S.insert(()=>T,":first-child"),S.attr("class","basic label-container"),m&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",m),n&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",n),S.attr("transform",`translate(0,${-h/2})`),s.attr("transform",`translate(${-l/2+(e.padding??0)-(a.x-(a.left??0))},${-u/2+(e.padding??0)-h/2-(a.y-(a.top??0))})`),je(e,S),e.intersect=function(_){return Ye.polygon(e,v,_)},i}var EZ=N(()=>{"use strict";Ft();Ht();Wt();Ut();o(kZ,"taggedWaveEdgedRectangle")});async function SZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=Math.max(a.width+e.padding,e?.width||0),l=Math.max(a.height+e.padding,e?.height||0),u=-s/2,h=-l/2,f=i.insert("rect",":first-child");return f.attr("class","text").attr("style",n).attr("rx",0).attr("ry",0).attr("x",u).attr("y",h).attr("width",s).attr("height",l),je(e,f),e.intersect=function(d){return Ye.rect(e,d)},i}var CZ=N(()=>{"use strict";Ft();Ht();Ut();o(SZ,"text")});async function AZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s,halfPadding:l}=await pt(t,e,ht(e)),u=e.look==="neo"?l*2:l,h=a.height+u,f=h/2,d=f/(2.5+h/50),p=a.width+d+u,{cssStyles:m}=e,g;if(e.look==="handDrawn"){let y=Xe.svg(i),v=g_e(0,0,p,h,d,f),x=y_e(0,0,p,h,d,f),b=y.path(v,Ke(e,{})),w=y.path(x,Ke(e,{fill:"none"}));g=i.insert(()=>w,":first-child"),g=i.insert(()=>b,":first-child"),g.attr("class","basic label-container"),m&&g.attr("style",m)}else{let y=m_e(0,0,p,h,d,f);g=i.insert("path",":first-child").attr("d",y).attr("class","basic label-container").attr("style",$n(m)).attr("style",n),g.attr("class","basic label-container"),m&&g.selectAll("path").attr("style",m),n&&g.selectAll("path").attr("style",n)}return g.attr("label-offset-x",d),g.attr("transform",`translate(${-p/2}, ${h/2} )`),s.attr("transform",`translate(${-(a.width/2)-d-(a.x-(a.left??0))}, ${-(a.height/2)-(a.y-(a.top??0))})`),je(e,g),e.intersect=function(y){let v=Ye.rect(e,y),x=v.y-(e.y??0);if(f!=0&&(Math.abs(x)<(e.height??0)/2||Math.abs(x)==(e.height??0)/2&&Math.abs(v.x-(e.x??0))>(e.width??0)/2-d)){let b=d*d*(1-x*x/(f*f));b!=0&&(b=Math.sqrt(Math.abs(b))),b=d-b,y.x-(e.x??0)>0&&(b=-b),v.x+=b}return v},i}var m_e,g_e,y_e,_Z=N(()=>{"use strict";Ft();Ut();Wt();Ht();nr();m_e=o((t,e,r,n,i,a)=>`M${t},${e} +res:`,Xe.polygon(e,h,p)),Xe.polygon(e,h,p)},i}var UDe,cJ=N(()=>{"use strict";yt();Ft();Ht();zt();Wt();Iu();UDe=o((t,e,r)=>[`M${t+r/2},${e}`,`L${t+r},${e-r/2}`,`L${t+r/2},${e-r}`,`L${t},${e-r/2}`,"Z"].join(" "),"createDecisionBoxPathD");o(lJ,"question")});async function uJ(t,e){let{labelStyles:r,nodeStyles:n}=Ye(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await mt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0),e?.width??0),u=Math.max(a.height+(e.padding??0),e?.height??0),h=-l/2,f=-u/2,d=f/2,p=[{x:h+d,y:f},{x:h,y:0},{x:h+d,y:-f},{x:-h,y:-f},{x:-h,y:f}],{cssStyles:m}=e,g=je.svg(i),y=Qe(e,{});e.look!=="handDrawn"&&(y.roughness=0,y.fillStyle="solid");let v=Xt(p),x=g.path(v,y),b=i.insert(()=>x,":first-child");return b.attr("class","basic label-container"),m&&e.look!=="handDrawn"&&b.selectAll("path").attr("style",m),n&&e.look!=="handDrawn"&&b.selectAll("path").attr("style",n),b.attr("transform",`translate(${-d/2},0)`),s.attr("transform",`translate(${-d/2-a.width/2-(a.x-(a.left??0))}, ${-(a.height/2)-(a.y-(a.top??0))})`),Ke(e,b),e.intersect=function(T){return Xe.polygon(e,p,T)},i}var hJ=N(()=>{"use strict";Ft();Ht();zt();Wt();o(uJ,"rect_left_inv_arrow")});function HDe(t,e){e&&t.attr("style",e)}async function WDe(t){let e=Ge(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),r=e.append("xhtml:div"),n=t.label;t.label&&yi(t.label)&&(n=await Th(t.label.replace(Ze.lineBreakRegex,` +`),me()));let i=t.isNode?"nodeLabel":"edgeLabel";return r.html('"+n+""),HDe(r,t.labelStyle),r.style("display","inline-block"),r.style("padding-right","1px"),r.style("white-space","nowrap"),r.attr("xmlns","http://www.w3.org/1999/xhtml"),e.node()}var qDe,Tc,rw=N(()=>{"use strict";fr();yt();Gt();pr();er();o(HDe,"applyStyle");o(WDe,"addHtmlLabel");qDe=o(async(t,e,r,n)=>{let i=t||"";if(typeof i=="object"&&(i=i[0]),dr(me().flowchart.htmlLabels)){i=i.replace(/\\n|\n/g,"
    "),X.info("vertexText"+i);let a={isNode:n,label:na(i).replace(/fa[blrs]?:fa-[\w-]+/g,l=>``),labelStyle:e&&e.replace("fill:","color:")};return await WDe(a)}else{let a=document.createElementNS("http://www.w3.org/2000/svg","text");a.setAttribute("style",e.replace("color:","fill:"));let s=[];typeof i=="string"?s=i.split(/\\n|\n|/gi):Array.isArray(i)?s=i:s=[];for(let l of s){let u=document.createElementNS("http://www.w3.org/2000/svg","tspan");u.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),u.setAttribute("dy","1em"),u.setAttribute("x","0"),r?u.setAttribute("class","title-row"):u.setAttribute("class","row"),u.textContent=l.trim(),a.appendChild(u)}return a}},"createLabel"),Tc=qDe});async function fJ(t,e){let{labelStyles:r,nodeStyles:n}=Ye(e);e.labelStyle=r;let i;e.cssClasses?i="node "+e.cssClasses:i="node default";let a=t.insert("g").attr("class",i).attr("id",e.domId||e.id),s=a.insert("g"),l=a.insert("g").attr("class","label").attr("style",n),u=e.description,h=e.label,f=l.node().appendChild(await Tc(h,e.labelStyle,!0,!0)),d={width:0,height:0};if(dr(me()?.flowchart?.htmlLabels)){let C=f.children[0],D=Ge(f);d=C.getBoundingClientRect(),D.attr("width",d.width),D.attr("height",d.height)}X.info("Text 2",u);let p=u||[],m=f.getBBox(),g=l.node().appendChild(await Tc(p.join?p.join("
    "):p,e.labelStyle,!0,!0)),y=g.children[0],v=Ge(g);d=y.getBoundingClientRect(),v.attr("width",d.width),v.attr("height",d.height);let x=(e.padding||0)/2;Ge(g).attr("transform","translate( "+(d.width>m.width?0:(m.width-d.width)/2)+", "+(m.height+x+5)+")"),Ge(f).attr("transform","translate( "+(d.width(X.debug("Rough node insert CXC",O),R),":first-child"),E=a.insert(()=>(X.debug("Rough node insert CXC",O),O),":first-child")}else E=s.insert("rect",":first-child"),_=s.insert("line"),E.attr("class","outer title-state").attr("style",n).attr("x",-d.width/2-x).attr("y",-d.height/2-x).attr("width",d.width+(e.padding||0)).attr("height",d.height+(e.padding||0)),_.attr("class","divider").attr("x1",-d.width/2-x).attr("x2",d.width/2+x).attr("y1",-d.height/2-x+m.height+x).attr("y2",-d.height/2-x+m.height+x);return Ke(e,E),e.intersect=function(C){return Xe.rect(e,C)},a}var dJ=N(()=>{"use strict";fr();pr();Ft();rw();Ht();zt();Wt();Gt();Zh();yt();o(fJ,"rectWithTitle")});async function pJ(t,e){let r={rx:5,ry:5,classes:"",labelPaddingX:(e?.padding||0)*1,labelPaddingY:(e?.padding||0)*1};return Ou(t,e,r)}var mJ=N(()=>{"use strict";Em();o(pJ,"roundedRect")});async function gJ(t,e){let{labelStyles:r,nodeStyles:n}=Ye(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await mt(t,e,ht(e)),l=e?.padding??0,u=Math.max(a.width+(e.padding??0)*2,e?.width??0),h=Math.max(a.height+(e.padding??0)*2,e?.height??0),f=-a.width/2-l,d=-a.height/2-l,{cssStyles:p}=e,m=je.svg(i),g=Qe(e,{});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=[{x:f,y:d},{x:f+u+8,y:d},{x:f+u+8,y:d+h},{x:f-8,y:d+h},{x:f-8,y:d},{x:f,y:d},{x:f,y:d+h}],v=m.polygon(y.map(b=>[b.x,b.y]),g),x=i.insert(()=>v,":first-child");return x.attr("class","basic label-container").attr("style",zn(p)),n&&e.look!=="handDrawn"&&x.selectAll("path").attr("style",n),p&&e.look!=="handDrawn"&&x.selectAll("path").attr("style",n),s.attr("transform",`translate(${-u/2+4+(e.padding??0)-(a.x-(a.left??0))},${-h/2+(e.padding??0)-(a.y-(a.top??0))})`),Ke(e,x),e.intersect=function(b){return Xe.rect(e,b)},i}var yJ=N(()=>{"use strict";Ft();Ht();zt();Wt();er();o(gJ,"shadedProcess")});async function vJ(t,e){let{labelStyles:r,nodeStyles:n}=Ye(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await mt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=-l/2,f=-u/2,{cssStyles:d}=e,p=je.svg(i),m=Qe(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=[{x:h,y:f},{x:h,y:f+u},{x:h+l,y:f+u},{x:h+l,y:f-u/2}],y=Xt(g),v=p.path(y,m),x=i.insert(()=>v,":first-child");return x.attr("class","basic label-container"),d&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",d),n&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",n),x.attr("transform",`translate(0, ${u/4})`),s.attr("transform",`translate(${-l/2+(e.padding??0)-(a.x-(a.left??0))}, ${-u/4+(e.padding??0)-(a.y-(a.top??0))})`),Ke(e,x),e.intersect=function(b){return Xe.polygon(e,g,b)},i}var xJ=N(()=>{"use strict";Ft();Ht();zt();Wt();o(vJ,"slopedRect")});async function bJ(t,e){let r={rx:0,ry:0,classes:"",labelPaddingX:(e?.padding||0)*2,labelPaddingY:(e?.padding||0)*1};return Ou(t,e,r)}var TJ=N(()=>{"use strict";Em();o(bJ,"squareRect")});async function wJ(t,e){let{labelStyles:r,nodeStyles:n}=Ye(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await mt(t,e,ht(e)),s=a.height+e.padding,l=a.width+s/4+e.padding,u,{cssStyles:h}=e;if(e.look==="handDrawn"){let f=je.svg(i),d=Qe(e,{}),p=Oa(-l/2,-s/2,l,s,s/2),m=f.path(p,d);u=i.insert(()=>m,":first-child"),u.attr("class","basic label-container").attr("style",zn(h))}else u=i.insert("rect",":first-child"),u.attr("class","basic label-container").attr("style",n).attr("rx",s/2).attr("ry",s/2).attr("x",-l/2).attr("y",-s/2).attr("width",l).attr("height",s);return Ke(e,u),e.intersect=function(f){return Xe.rect(e,f)},i}var kJ=N(()=>{"use strict";Ft();Ht();zt();Wt();Zh();er();o(wJ,"stadium")});async function EJ(t,e){return Ou(t,e,{rx:5,ry:5,classes:"flowchart-node"})}var SJ=N(()=>{"use strict";Em();o(EJ,"state")});function CJ(t,e,{config:{themeVariables:r}}){let{labelStyles:n,nodeStyles:i}=Ye(e);e.labelStyle=n;let{cssStyles:a}=e,{lineColor:s,stateBorder:l,nodeBorder:u}=r,h=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),f=je.svg(h),d=Qe(e,{});e.look!=="handDrawn"&&(d.roughness=0,d.fillStyle="solid");let p=f.circle(0,0,14,{...d,stroke:s,strokeWidth:2}),m=l??u,g=f.circle(0,0,5,{...d,fill:m,stroke:m,strokeWidth:2,fillStyle:"solid"}),y=h.insert(()=>p,":first-child");return y.insert(()=>g),a&&y.selectAll("path").attr("style",a),i&&y.selectAll("path").attr("style",i),Ke(e,y),e.intersect=function(v){return Xe.circle(e,7,v)},h}var AJ=N(()=>{"use strict";Wt();Ht();zt();Ft();o(CJ,"stateEnd")});function _J(t,e,{config:{themeVariables:r}}){let{lineColor:n}=r,i=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),a;if(e.look==="handDrawn"){let l=je.svg(i).circle(0,0,14,NQ(n));a=i.insert(()=>l),a.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14)}else a=i.insert("circle",":first-child"),a.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14);return Ke(e,a),e.intersect=function(s){return Xe.circle(e,7,s)},i}var DJ=N(()=>{"use strict";Wt();Ht();zt();Ft();o(_J,"stateStart")});async function LJ(t,e){let{labelStyles:r,nodeStyles:n}=Ye(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await mt(t,e,ht(e)),s=(e?.padding||0)/2,l=a.width+e.padding,u=a.height+e.padding,h=-a.width/2-s,f=-a.height/2-s,d=[{x:0,y:0},{x:l,y:0},{x:l,y:-u},{x:0,y:-u},{x:0,y:0},{x:-8,y:0},{x:l+8,y:0},{x:l+8,y:-u},{x:-8,y:-u},{x:-8,y:0}];if(e.look==="handDrawn"){let p=je.svg(i),m=Qe(e,{}),g=p.rectangle(h-8,f,l+16,u,m),y=p.line(h,f,h,f+u,m),v=p.line(h+l,f,h+l,f+u,m);i.insert(()=>y,":first-child"),i.insert(()=>v,":first-child");let x=i.insert(()=>g,":first-child"),{cssStyles:b}=e;x.attr("class","basic label-container").attr("style",zn(b)),Ke(e,x)}else{let p=Ma(i,l,u,d);n&&p.attr("style",n),Ke(e,p)}return e.intersect=function(p){return Xe.polygon(e,d,p)},i}var RJ=N(()=>{"use strict";Ft();Ht();zt();Wt();Iu();er();o(LJ,"subroutine")});async function NJ(t,e){let{labelStyles:r,nodeStyles:n}=Ye(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await mt(t,e,ht(e)),s=Math.max(a.width+(e.padding??0)*2,e?.width??0),l=Math.max(a.height+(e.padding??0)*2,e?.height??0),u=-s/2,h=-l/2,f=.2*l,d=.2*l,{cssStyles:p}=e,m=je.svg(i),g=Qe(e,{}),y=[{x:u-f/2,y:h},{x:u+s+f/2,y:h},{x:u+s+f/2,y:h+l},{x:u-f/2,y:h+l}],v=[{x:u+s-f/2,y:h+l},{x:u+s+f/2,y:h+l},{x:u+s+f/2,y:h+l-d}];e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let x=Xt(y),b=m.path(x,g),T=Xt(v),S=m.path(T,{...g,fillStyle:"solid"}),w=i.insert(()=>S,":first-child");return w.insert(()=>b,":first-child"),w.attr("class","basic label-container"),p&&e.look!=="handDrawn"&&w.selectAll("path").attr("style",p),n&&e.look!=="handDrawn"&&w.selectAll("path").attr("style",n),Ke(e,w),e.intersect=function(E){return Xe.polygon(e,y,E)},i}var MJ=N(()=>{"use strict";Ft();zt();Wt();Ht();o(NJ,"taggedRect")});async function IJ(t,e){let{labelStyles:r,nodeStyles:n}=Ye(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await mt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=u/4,f=.2*l,d=.2*u,p=u+h,{cssStyles:m}=e,g=je.svg(i),y=Qe(e,{});e.look!=="handDrawn"&&(y.roughness=0,y.fillStyle="solid");let v=[{x:-l/2-l/2*.1,y:p/2},...Go(-l/2-l/2*.1,p/2,l/2+l/2*.1,p/2,h,.8),{x:l/2+l/2*.1,y:-p/2},{x:-l/2-l/2*.1,y:-p/2}],x=-l/2+l/2*.1,b=-p/2-d*.4,T=[{x:x+l-f,y:(b+u)*1.4},{x:x+l,y:b+u-d},{x:x+l,y:(b+u)*.9},...Go(x+l,(b+u)*1.3,x+l-f,(b+u)*1.5,-u*.03,.5)],S=Xt(v),w=g.path(S,y),E=Xt(T),_=g.path(E,{...y,fillStyle:"solid"}),C=i.insert(()=>_,":first-child");return C.insert(()=>w,":first-child"),C.attr("class","basic label-container"),m&&e.look!=="handDrawn"&&C.selectAll("path").attr("style",m),n&&e.look!=="handDrawn"&&C.selectAll("path").attr("style",n),C.attr("transform",`translate(0,${-h/2})`),s.attr("transform",`translate(${-l/2+(e.padding??0)-(a.x-(a.left??0))},${-u/2+(e.padding??0)-h/2-(a.y-(a.top??0))})`),Ke(e,C),e.intersect=function(D){return Xe.polygon(e,v,D)},i}var OJ=N(()=>{"use strict";Ft();Ht();Wt();zt();o(IJ,"taggedWaveEdgedRectangle")});async function PJ(t,e){let{labelStyles:r,nodeStyles:n}=Ye(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await mt(t,e,ht(e)),s=Math.max(a.width+e.padding,e?.width||0),l=Math.max(a.height+e.padding,e?.height||0),u=-s/2,h=-l/2,f=i.insert("rect",":first-child");return f.attr("class","text").attr("style",n).attr("rx",0).attr("ry",0).attr("x",u).attr("y",h).attr("width",s).attr("height",l),Ke(e,f),e.intersect=function(d){return Xe.rect(e,d)},i}var BJ=N(()=>{"use strict";Ft();Ht();zt();o(PJ,"text")});async function FJ(t,e){let{labelStyles:r,nodeStyles:n}=Ye(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s,halfPadding:l}=await mt(t,e,ht(e)),u=e.look==="neo"?l*2:l,h=a.height+u,f=h/2,d=f/(2.5+h/50),p=a.width+d+u,{cssStyles:m}=e,g;if(e.look==="handDrawn"){let y=je.svg(i),v=XDe(0,0,p,h,d,f),x=jDe(0,0,p,h,d,f),b=y.path(v,Qe(e,{})),T=y.path(x,Qe(e,{fill:"none"}));g=i.insert(()=>T,":first-child"),g=i.insert(()=>b,":first-child"),g.attr("class","basic label-container"),m&&g.attr("style",m)}else{let y=YDe(0,0,p,h,d,f);g=i.insert("path",":first-child").attr("d",y).attr("class","basic label-container").attr("style",zn(m)).attr("style",n),g.attr("class","basic label-container"),m&&g.selectAll("path").attr("style",m),n&&g.selectAll("path").attr("style",n)}return g.attr("label-offset-x",d),g.attr("transform",`translate(${-p/2}, ${h/2} )`),s.attr("transform",`translate(${-(a.width/2)-d-(a.x-(a.left??0))}, ${-(a.height/2)-(a.y-(a.top??0))})`),Ke(e,g),e.intersect=function(y){let v=Xe.rect(e,y),x=v.y-(e.y??0);if(f!=0&&(Math.abs(x)<(e.height??0)/2||Math.abs(x)==(e.height??0)/2&&Math.abs(v.x-(e.x??0))>(e.width??0)/2-d)){let b=d*d*(1-x*x/(f*f));b!=0&&(b=Math.sqrt(Math.abs(b))),b=d-b,y.x-(e.x??0)>0&&(b=-b),v.x+=b}return v},i}var YDe,XDe,jDe,$J=N(()=>{"use strict";Ft();zt();Wt();Ht();er();YDe=o((t,e,r,n,i,a)=>`M${t},${e} a${i},${a} 0,0,1 0,${-n} l${r},0 a${i},${a} 0,0,1 0,${n} M${r},${-n} a${i},${a} 0,0,0 0,${n} - l${-r},0`,"createCylinderPathD"),g_e=o((t,e,r,n,i,a)=>[`M${t},${e}`,`M${t+r},${e}`,`a${i},${a} 0,0,0 0,${-n}`,`l${-r},0`,`a${i},${a} 0,0,0 0,${n}`,`l${r},0`].join(" "),"createOuterCylinderPathD"),y_e=o((t,e,r,n,i,a)=>[`M${t+r/2},${-n/2}`,`a${i},${a} 0,0,0 0,${n}`].join(" "),"createInnerCylinderPathD");o(AZ,"tiltedCylinder")});async function DZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=a.width+e.padding,l=a.height+e.padding,u=[{x:-3*l/6,y:0},{x:s+3*l/6,y:0},{x:s,y:-l},{x:0,y:-l}],h,{cssStyles:f}=e;if(e.look==="handDrawn"){let d=Xe.svg(i),p=Ke(e,{}),m=Xt(u),g=d.path(m,p);h=i.insert(()=>g,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),f&&h.attr("style",f)}else h=La(i,s,l,u);return n&&h.attr("style",n),e.width=s,e.height=l,je(e,h),e.intersect=function(d){return Ye.polygon(e,u,d)},i}var LZ=N(()=>{"use strict";Ft();Ht();Ut();Wt();Nu();o(DZ,"trapezoid")});async function RZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=60,l=20,u=Math.max(s,a.width+(e.padding??0)*2,e?.width??0),h=Math.max(l,a.height+(e.padding??0)*2,e?.height??0),{cssStyles:f}=e,d=Xe.svg(i),p=Ke(e,{});e.look!=="handDrawn"&&(p.roughness=0,p.fillStyle="solid");let m=[{x:-u/2*.8,y:-h/2},{x:u/2*.8,y:-h/2},{x:u/2,y:-h/2*.6},{x:u/2,y:h/2},{x:-u/2,y:h/2},{x:-u/2,y:-h/2*.6}],g=Xt(m),y=d.path(g,p),v=i.insert(()=>y,":first-child");return v.attr("class","basic label-container"),f&&e.look!=="handDrawn"&&v.selectChildren("path").attr("style",f),n&&e.look!=="handDrawn"&&v.selectChildren("path").attr("style",n),je(e,v),e.intersect=function(x){return Ye.polygon(e,m,x)},i}var NZ=N(()=>{"use strict";Ft();Ht();Ut();Wt();o(RZ,"trapezoidalPentagon")});async function MZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=fr(me().flowchart?.htmlLabels),u=a.width+(e.padding??0),h=u+a.height,f=u+a.height,d=[{x:0,y:0},{x:f,y:0},{x:f/2,y:-h}],{cssStyles:p}=e,m=Xe.svg(i),g=Ke(e,{});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=Xt(d),v=m.path(y,g),x=i.insert(()=>v,":first-child").attr("transform",`translate(${-h/2}, ${h/2})`);return p&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",p),n&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",n),e.width=u,e.height=h,je(e,x),s.attr("transform",`translate(${-a.width/2-(a.x-(a.left??0))}, ${h/2-(a.height+(e.padding??0)/(l?2:1)-(a.y-(a.top??0)))})`),e.intersect=function(b){return X.info("Triangle intersect",e,d,b),Ye.polygon(e,d,b)},i}var IZ=N(()=>{"use strict";vt();Ft();Ht();Ut();Wt();Ft();dr();zt();o(MZ,"triangle")});async function OZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=u/8,f=u+h,{cssStyles:d}=e,m=70-l,g=m>0?m/2:0,y=Xe.svg(i),v=Ke(e,{});e.look!=="handDrawn"&&(v.roughness=0,v.fillStyle="solid");let x=[{x:-l/2-g,y:f/2},...$o(-l/2-g,f/2,l/2+g,f/2,h,.8),{x:l/2+g,y:-f/2},{x:-l/2-g,y:-f/2}],b=Xt(x),w=y.path(b,v),C=i.insert(()=>w,":first-child");return C.attr("class","basic label-container"),d&&e.look!=="handDrawn"&&C.selectAll("path").attr("style",d),n&&e.look!=="handDrawn"&&C.selectAll("path").attr("style",n),C.attr("transform",`translate(0,${-h/2})`),s.attr("transform",`translate(${-l/2+(e.padding??0)-(a.x-(a.left??0))},${-u/2+(e.padding??0)-h-(a.y-(a.top??0))})`),je(e,C),e.intersect=function(T){return Ye.polygon(e,x,T)},i}var PZ=N(()=>{"use strict";Ft();Ht();Wt();Ut();o(OZ,"waveEdgedRectangle")});async function BZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await pt(t,e,ht(e)),s=100,l=50,u=Math.max(a.width+(e.padding??0)*2,e?.width??0),h=Math.max(a.height+(e.padding??0)*2,e?.height??0),f=u/h,d=u,p=h;d>p*f?p=d/f:d=p*f,d=Math.max(d,s),p=Math.max(p,l);let m=Math.min(p*.2,p/4),g=p+m*2,{cssStyles:y}=e,v=Xe.svg(i),x=Ke(e,{});e.look!=="handDrawn"&&(x.roughness=0,x.fillStyle="solid");let b=[{x:-d/2,y:g/2},...$o(-d/2,g/2,d/2,g/2,m,1),{x:d/2,y:-g/2},...$o(d/2,-g/2,-d/2,-g/2,m,-1)],w=Xt(b),C=v.path(w,x),T=i.insert(()=>C,":first-child");return T.attr("class","basic label-container"),y&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",y),n&&e.look!=="handDrawn"&&T.selectAll("path").attr("style",n),je(e,T),e.intersect=function(E){return Ye.polygon(e,b,E)},i}var FZ=N(()=>{"use strict";Ft();Ht();Ut();Wt();o(BZ,"waveRectangle")});async function $Z(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await pt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=5,f=-l/2,d=-u/2,{cssStyles:p}=e,m=Xe.svg(i),g=Ke(e,{}),y=[{x:f-h,y:d-h},{x:f-h,y:d+u},{x:f+l,y:d+u},{x:f+l,y:d-h}],v=`M${f-h},${d-h} L${f+l},${d-h} L${f+l},${d+u} L${f-h},${d+u} L${f-h},${d-h} + l${-r},0`,"createCylinderPathD"),XDe=o((t,e,r,n,i,a)=>[`M${t},${e}`,`M${t+r},${e}`,`a${i},${a} 0,0,0 0,${-n}`,`l${-r},0`,`a${i},${a} 0,0,0 0,${n}`,`l${r},0`].join(" "),"createOuterCylinderPathD"),jDe=o((t,e,r,n,i,a)=>[`M${t+r/2},${-n/2}`,`a${i},${a} 0,0,0 0,${n}`].join(" "),"createInnerCylinderPathD");o(FJ,"tiltedCylinder")});async function zJ(t,e){let{labelStyles:r,nodeStyles:n}=Ye(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await mt(t,e,ht(e)),s=a.width+e.padding,l=a.height+e.padding,u=[{x:-3*l/6,y:0},{x:s+3*l/6,y:0},{x:s,y:-l},{x:0,y:-l}],h,{cssStyles:f}=e;if(e.look==="handDrawn"){let d=je.svg(i),p=Qe(e,{}),m=Xt(u),g=d.path(m,p);h=i.insert(()=>g,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),f&&h.attr("style",f)}else h=Ma(i,s,l,u);return n&&h.attr("style",n),e.width=s,e.height=l,Ke(e,h),e.intersect=function(d){return Xe.polygon(e,u,d)},i}var GJ=N(()=>{"use strict";Ft();Ht();zt();Wt();Iu();o(zJ,"trapezoid")});async function VJ(t,e){let{labelStyles:r,nodeStyles:n}=Ye(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await mt(t,e,ht(e)),s=60,l=20,u=Math.max(s,a.width+(e.padding??0)*2,e?.width??0),h=Math.max(l,a.height+(e.padding??0)*2,e?.height??0),{cssStyles:f}=e,d=je.svg(i),p=Qe(e,{});e.look!=="handDrawn"&&(p.roughness=0,p.fillStyle="solid");let m=[{x:-u/2*.8,y:-h/2},{x:u/2*.8,y:-h/2},{x:u/2,y:-h/2*.6},{x:u/2,y:h/2},{x:-u/2,y:h/2},{x:-u/2,y:-h/2*.6}],g=Xt(m),y=d.path(g,p),v=i.insert(()=>y,":first-child");return v.attr("class","basic label-container"),f&&e.look!=="handDrawn"&&v.selectChildren("path").attr("style",f),n&&e.look!=="handDrawn"&&v.selectChildren("path").attr("style",n),Ke(e,v),e.intersect=function(x){return Xe.polygon(e,m,x)},i}var UJ=N(()=>{"use strict";Ft();Ht();zt();Wt();o(VJ,"trapezoidalPentagon")});async function HJ(t,e){let{labelStyles:r,nodeStyles:n}=Ye(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await mt(t,e,ht(e)),l=dr(me().flowchart?.htmlLabels),u=a.width+(e.padding??0),h=u+a.height,f=u+a.height,d=[{x:0,y:0},{x:f,y:0},{x:f/2,y:-h}],{cssStyles:p}=e,m=je.svg(i),g=Qe(e,{});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=Xt(d),v=m.path(y,g),x=i.insert(()=>v,":first-child").attr("transform",`translate(${-h/2}, ${h/2})`);return p&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",p),n&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",n),e.width=u,e.height=h,Ke(e,x),s.attr("transform",`translate(${-a.width/2-(a.x-(a.left??0))}, ${h/2-(a.height+(e.padding??0)/(l?2:1)-(a.y-(a.top??0)))})`),e.intersect=function(b){return X.info("Triangle intersect",e,d,b),Xe.polygon(e,d,b)},i}var WJ=N(()=>{"use strict";yt();Ft();Ht();zt();Wt();Ft();pr();Gt();o(HJ,"triangle")});async function qJ(t,e){let{labelStyles:r,nodeStyles:n}=Ye(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await mt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=u/8,f=u+h,{cssStyles:d}=e,m=70-l,g=m>0?m/2:0,y=je.svg(i),v=Qe(e,{});e.look!=="handDrawn"&&(v.roughness=0,v.fillStyle="solid");let x=[{x:-l/2-g,y:f/2},...Go(-l/2-g,f/2,l/2+g,f/2,h,.8),{x:l/2+g,y:-f/2},{x:-l/2-g,y:-f/2}],b=Xt(x),T=y.path(b,v),S=i.insert(()=>T,":first-child");return S.attr("class","basic label-container"),d&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",d),n&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",n),S.attr("transform",`translate(0,${-h/2})`),s.attr("transform",`translate(${-l/2+(e.padding??0)-(a.x-(a.left??0))},${-u/2+(e.padding??0)-h-(a.y-(a.top??0))})`),Ke(e,S),e.intersect=function(w){return Xe.polygon(e,x,w)},i}var YJ=N(()=>{"use strict";Ft();Ht();Wt();zt();o(qJ,"waveEdgedRectangle")});async function XJ(t,e){let{labelStyles:r,nodeStyles:n}=Ye(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await mt(t,e,ht(e)),s=100,l=50,u=Math.max(a.width+(e.padding??0)*2,e?.width??0),h=Math.max(a.height+(e.padding??0)*2,e?.height??0),f=u/h,d=u,p=h;d>p*f?p=d/f:d=p*f,d=Math.max(d,s),p=Math.max(p,l);let m=Math.min(p*.2,p/4),g=p+m*2,{cssStyles:y}=e,v=je.svg(i),x=Qe(e,{});e.look!=="handDrawn"&&(x.roughness=0,x.fillStyle="solid");let b=[{x:-d/2,y:g/2},...Go(-d/2,g/2,d/2,g/2,m,1),{x:d/2,y:-g/2},...Go(d/2,-g/2,-d/2,-g/2,m,-1)],T=Xt(b),S=v.path(T,x),w=i.insert(()=>S,":first-child");return w.attr("class","basic label-container"),y&&e.look!=="handDrawn"&&w.selectAll("path").attr("style",y),n&&e.look!=="handDrawn"&&w.selectAll("path").attr("style",n),Ke(e,w),e.intersect=function(E){return Xe.polygon(e,b,E)},i}var jJ=N(()=>{"use strict";Ft();Ht();zt();Wt();o(XJ,"waveRectangle")});async function KJ(t,e){let{labelStyles:r,nodeStyles:n}=Ye(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await mt(t,e,ht(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=5,f=-l/2,d=-u/2,{cssStyles:p}=e,m=je.svg(i),g=Qe(e,{}),y=[{x:f-h,y:d-h},{x:f-h,y:d+u},{x:f+l,y:d+u},{x:f+l,y:d-h}],v=`M${f-h},${d-h} L${f+l},${d-h} L${f+l},${d+u} L${f-h},${d+u} L${f-h},${d-h} M${f-h},${d} L${f+l},${d} - M${f},${d-h} L${f},${d+u}`;e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let x=m.path(v,g),b=i.insert(()=>x,":first-child");return b.attr("transform",`translate(${h/2}, ${h/2})`),b.attr("class","basic label-container"),p&&e.look!=="handDrawn"&&b.selectAll("path").attr("style",p),n&&e.look!=="handDrawn"&&b.selectAll("path").attr("style",n),s.attr("transform",`translate(${-(a.width/2)+h/2-(a.x-(a.left??0))}, ${-(a.height/2)+h/2-(a.y-(a.top??0))})`),je(e,b),e.intersect=function(w){return Ye.polygon(e,y,w)},i}var zZ=N(()=>{"use strict";Ft();Ut();Wt();Ht();o($Z,"windowPane")});async function tL(t,e){let r=e;if(r.alias&&(e.label=r.alias),e.look==="handDrawn"){let{themeVariables:U}=sr(),{background:Q}=U,te={...e,id:e.id+"-background",look:"default",cssStyles:["stroke: none",`fill: ${Q}`]};await tL(t,te)}let n=sr();e.useHtmlLabels=n.htmlLabels;let i=n.er?.diagramPadding??10,a=n.er?.entityPadding??6,{cssStyles:s}=e,{labelStyles:l,nodeStyles:u}=Qe(e);if(r.attributes.length===0&&e.label){let U={rx:0,ry:0,labelPaddingX:i,labelPaddingY:i*1.5,classes:""};ra(e.label,n)+U.labelPaddingX*20){let U=d.width+i*2-(y+v+x+b);y+=U/T,v+=U/T,x>0&&(x+=U/T),b>0&&(b+=U/T)}let A=y+v+x+b,S=Xe.svg(f),_=Ke(e,{});e.look!=="handDrawn"&&(_.roughness=0,_.fillStyle="solid");let I=0;g.length>0&&(I=g.reduce((U,Q)=>U+(Q?.rowHeight??0),0));let L=Math.max(E.width+i*2,e?.width||0,A),k=Math.max((I??0)+d.height,e?.height||0),D=-L/2,R=-k/2;f.selectAll("g:not(:first-child)").each((U,Q,te)=>{let Y=Ge(te[Q]),he=Y.attr("transform"),Z=0,ue=0;if(he){let j=RegExp(/translate\(([^,]+),([^)]+)\)/).exec(he);j&&(Z=parseFloat(j[1]),ue=parseFloat(j[2]),Y.attr("class").includes("attribute-name")?Z+=y:Y.attr("class").includes("attribute-keys")?Z+=y+v:Y.attr("class").includes("attribute-comment")&&(Z+=y+v+x))}Y.attr("transform",`translate(${D+i/2+Z}, ${ue+R+d.height+a/2})`)}),f.select(".name").attr("transform","translate("+-d.width/2+", "+(R+a/2)+")");let O=S.rectangle(D,R,L,k,_),M=f.insert(()=>O,":first-child").attr("style",s.join("")),{themeVariables:P}=sr(),{rowEven:B,rowOdd:F,nodeBorder:z}=P;m.push(0);for(let[U,Q]of g.entries()){let Y=(U+1)%2===0&&Q.yOffset!==0,he=S.rectangle(D,d.height+R+Q?.yOffset,L,Q?.rowHeight,{..._,fill:Y?B:F,stroke:z});f.insert(()=>he,"g.label").attr("style",s.join("")).attr("class",`row-rect-${Y?"even":"odd"}`)}let $=S.line(D,d.height+R,L+D,d.height+R,_);f.insert(()=>$).attr("class","divider"),$=S.line(y+D,d.height+R,y+D,k+R,_),f.insert(()=>$).attr("class","divider"),w&&($=S.line(y+v+D,d.height+R,y+v+D,k+R,_),f.insert(()=>$).attr("class","divider")),C&&($=S.line(y+v+x+D,d.height+R,y+v+x+D,k+R,_),f.insert(()=>$).attr("class","divider"));for(let U of m)$=S.line(D,d.height+R+U,L+D,d.height+R+U,_),f.insert(()=>$).attr("class","divider");if(je(e,M),u&&e.look!=="handDrawn"){let Q=u.split(";")?.filter(te=>te.includes("stroke"))?.map(te=>`${te}`).join("; ");f.selectAll("path").attr("style",Q??""),f.selectAll(".row-rect-even path").attr("style",u)}return e.intersect=function(U){return Ye.rect(e,U)},f}async function A2(t,e,r,n=0,i=0,a=[],s=""){let l=t.insert("g").attr("class",`label ${a.join(" ")}`).attr("transform",`translate(${n}, ${i})`).attr("style",s);e!==rc(e)&&(e=rc(e),e=e.replaceAll("<","<").replaceAll(">",">"));let u=l.node().appendChild(await Hn(l,e,{width:ra(e,r)+100,style:s,useHtmlLabels:r.htmlLabels},r));if(e.includes("<")||e.includes(">")){let f=u.children[0];for(f.textContent=f.textContent.replaceAll("<","<").replaceAll(">",">");f.childNodes[0];)f=f.childNodes[0],f.textContent=f.textContent.replaceAll("<","<").replaceAll(">",">")}let h=u.getBBox();if(fr(r.htmlLabels)){let f=u.children[0];f.style.textAlign="start";let d=Ge(u);h=f.getBoundingClientRect(),d.attr("width",h.width),d.attr("height",h.height)}return h}var GZ=N(()=>{"use strict";Ft();Ht();Ut();Wt();Tm();Bi();no();dr();pr();nr();o(tL,"erBox");o(A2,"addText")});async function VZ(t,e,r,n,i=r.class.padding??12){let a=n?0:3,s=t.insert("g").attr("class",ht(e)).attr("id",e.domId||e.id),l=null,u=null,h=null,f=null,d=0,p=0,m=0;if(l=s.insert("g").attr("class","annotation-group text"),e.annotations.length>0){let b=e.annotations[0];await jw(l,{text:`\xAB${b}\xBB`},0),d=l.node().getBBox().height}u=s.insert("g").attr("class","label-group text"),await jw(u,e,0,["font-weight: bolder"]);let g=u.node().getBBox();p=g.height,h=s.insert("g").attr("class","members-group text");let y=0;for(let b of e.members){let w=await jw(h,b,y,[b.parseClassifier()]);y+=w+a}m=h.node().getBBox().height,m<=0&&(m=i/2),f=s.insert("g").attr("class","methods-group text");let v=0;for(let b of e.methods){let w=await jw(f,b,v,[b.parseClassifier()]);v+=w+a}let x=s.node().getBBox();if(l!==null){let b=l.node().getBBox();l.attr("transform",`translate(${-b.width/2})`)}return u.attr("transform",`translate(${-g.width/2}, ${d})`),x=s.node().getBBox(),h.attr("transform",`translate(0, ${d+p+i*2})`),x=s.node().getBBox(),f.attr("transform",`translate(0, ${d+p+(m?m+i*4:i*2)})`),x=s.node().getBBox(),{shapeSvg:s,bbox:x}}async function jw(t,e,r,n=[]){let i=t.insert("g").attr("class","label").attr("style",n.join("; ")),a=sr(),s="useHtmlLabels"in e?e.useHtmlLabels:fr(a.htmlLabels)??!0,l="";"text"in e?l=e.text:l=e.label,!s&&l.startsWith("\\")&&(l=l.substring(1)),pi(l)&&(s=!0);let u=await Hn(i,hd(na(l)),{width:ra(l,a)+50,classes:"markdown-node-label",useHtmlLabels:s},a),h,f=1;if(s){let d=u.children[0],p=Ge(u);f=d.innerHTML.split("
    ").length,d.innerHTML.includes("")&&(f+=d.innerHTML.split("").length-1);let m=d.getElementsByTagName("img");if(m){let g=l.replace(/]*>/g,"").trim()==="";await Promise.all([...m].map(y=>new Promise(v=>{function x(){if(y.style.display="flex",y.style.flexDirection="column",g){let b=a.fontSize?.toString()??window.getComputedStyle(document.body).fontSize,C=parseInt(b,10)*5+"px";y.style.minWidth=C,y.style.maxWidth=C}else y.style.width="100%";v(y)}o(x,"setupImage"),setTimeout(()=>{y.complete&&x()}),y.addEventListener("error",x),y.addEventListener("load",x)})))}h=d.getBoundingClientRect(),p.attr("width",h.width),p.attr("height",h.height)}else{n.includes("font-weight: bolder")&&Ge(u).selectAll("tspan").attr("font-weight",""),f=u.children.length;let d=u.children[0];(u.textContent===""||u.textContent.includes(">"))&&(d.textContent=l[0]+l.substring(1).replaceAll(">",">").replaceAll("<","<").trim(),l[1]===" "&&(d.textContent=d.textContent[0]+" "+d.textContent.substring(1))),d.textContent==="undefined"&&(d.textContent=""),h=u.getBBox()}return i.attr("transform","translate(0,"+(-h.height/(2*f)+r)+")"),h.height}var UZ=N(()=>{"use strict";pr();Bi();Ft();nr();zt();no();dr();o(VZ,"textHelper");o(jw,"addText")});async function HZ(t,e){let r=me(),n=r.class.padding??12,i=n,a=e.useHtmlLabels??fr(r.htmlLabels)??!0,s=e;s.annotations=s.annotations??[],s.members=s.members??[],s.methods=s.methods??[];let{shapeSvg:l,bbox:u}=await VZ(t,e,r,a,i),{labelStyles:h,nodeStyles:f}=Qe(e);e.labelStyle=h,e.cssStyles=s.styles||"";let d=s.styles?.join(";")||f||"";e.cssStyles||(e.cssStyles=d.replaceAll("!important","").split(";"));let p=s.members.length===0&&s.methods.length===0&&!r.class?.hideEmptyMembersBox,m=Xe.svg(l),g=Ke(e,{});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=u.width,v=u.height;s.members.length===0&&s.methods.length===0?v+=i:s.members.length>0&&s.methods.length===0&&(v+=i*2);let x=-y/2,b=-v/2,w=m.rectangle(x-n,b-n-(p?n:s.members.length===0&&s.methods.length===0?-n/2:0),y+2*n,v+2*n+(p?n*2:s.members.length===0&&s.methods.length===0?-n:0),g),C=l.insert(()=>w,":first-child");C.attr("class","basic label-container");let T=C.node().getBBox();l.selectAll(".text").each((_,I,L)=>{let k=Ge(L[I]),D=k.attr("transform"),R=0;if(D){let B=RegExp(/translate\(([^,]+),([^)]+)\)/).exec(D);B&&(R=parseFloat(B[2]))}let O=R+b+n-(p?n:s.members.length===0&&s.methods.length===0?-n/2:0);a||(O-=4);let M=x;(k.attr("class").includes("label-group")||k.attr("class").includes("annotation-group"))&&(M=-k.node()?.getBBox().width/2||0,l.selectAll("text").each(function(P,B,F){window.getComputedStyle(F[B]).textAnchor==="middle"&&(M=0)})),k.attr("transform",`translate(${M}, ${O})`)});let E=l.select(".annotation-group").node().getBBox().height-(p?n/2:0)||0,A=l.select(".label-group").node().getBBox().height-(p?n/2:0)||0,S=l.select(".members-group").node().getBBox().height-(p?n/2:0)||0;if(s.members.length>0||s.methods.length>0||p){let _=m.line(T.x,E+A+b+n,T.x+T.width,E+A+b+n,g);l.insert(()=>_).attr("class","divider").attr("style",d)}if(p||s.members.length>0||s.methods.length>0){let _=m.line(T.x,E+A+S+b+i*2+n,T.x+T.width,E+A+S+b+n+i*2,g);l.insert(()=>_).attr("class","divider").attr("style",d)}if(s.look!=="handDrawn"&&l.selectAll("path").attr("style",d),C.select(":nth-child(2)").attr("style",d),l.selectAll(".divider").select("path").attr("style",d),e.labelStyle?l.selectAll("span").attr("style",e.labelStyle):l.selectAll("span").attr("style",d),!a){let _=RegExp(/color\s*:\s*([^;]*)/),I=_.exec(d);if(I){let L=I[0].replace("color","fill");l.selectAll("tspan").attr("style",L)}else if(h){let L=_.exec(h);if(L){let k=L[0].replace("color","fill");l.selectAll("tspan").attr("style",k)}}}return je(e,C),e.intersect=function(_){return Ye.rect(e,_)},l}var WZ=N(()=>{"use strict";Ft();zt();pr();Wt();Ut();Ht();UZ();dr();o(HZ,"classBox")});async function qZ(t,e){let{labelStyles:r,nodeStyles:n}=Qe(e);e.labelStyle=r;let i=e,a=e,s=20,l=20,u="verifyMethod"in e,h=ht(e),f=t.insert("g").attr("class",h).attr("id",e.domId??e.id),d;u?d=await Iu(f,`<<${i.type}>>`,0,e.labelStyle):d=await Iu(f,"<<Element>>",0,e.labelStyle);let p=d,m=await Iu(f,i.name,p,e.labelStyle+"; font-weight: bold;");if(p+=m+l,u){let E=await Iu(f,`${i.requirementId?`id: ${i.requirementId}`:""}`,p,e.labelStyle);p+=E;let A=await Iu(f,`${i.text?`Text: ${i.text}`:""}`,p,e.labelStyle);p+=A;let S=await Iu(f,`${i.risk?`Risk: ${i.risk}`:""}`,p,e.labelStyle);p+=S,await Iu(f,`${i.verifyMethod?`Verification: ${i.verifyMethod}`:""}`,p,e.labelStyle)}else{let E=await Iu(f,`${a.type?`Type: ${a.type}`:""}`,p,e.labelStyle);p+=E,await Iu(f,`${a.docRef?`Doc Ref: ${a.docRef}`:""}`,p,e.labelStyle)}let g=(f.node()?.getBBox().width??200)+s,y=(f.node()?.getBBox().height??200)+s,v=-g/2,x=-y/2,b=Xe.svg(f),w=Ke(e,{});e.look!=="handDrawn"&&(w.roughness=0,w.fillStyle="solid");let C=b.rectangle(v,x,g,y,w),T=f.insert(()=>C,":first-child");if(T.attr("class","basic label-container").attr("style",n),f.selectAll(".label").each((E,A,S)=>{let _=Ge(S[A]),I=_.attr("transform"),L=0,k=0;if(I){let M=RegExp(/translate\(([^,]+),([^)]+)\)/).exec(I);M&&(L=parseFloat(M[1]),k=parseFloat(M[2]))}let D=k-y/2,R=v+s/2;(A===0||A===1)&&(R=L),_.attr("transform",`translate(${R}, ${D+s})`)}),p>d+m+l){let E=b.line(v,x+d+m+l,v+g,x+d+m+l,w);f.insert(()=>E).attr("style",n)}return je(e,T),e.intersect=function(E){return Ye.rect(e,E)},f}async function Iu(t,e,r,n=""){if(e==="")return 0;let i=t.insert("g").attr("class","label").attr("style",n),a=me(),s=a.htmlLabels??!0,l=await Hn(i,hd(na(e)),{width:ra(e,a)+50,classes:"markdown-node-label",useHtmlLabels:s,style:n},a),u;if(s){let h=l.children[0],f=Ge(l);u=h.getBoundingClientRect(),f.attr("width",u.width),f.attr("height",u.height)}else{let h=l.children[0];for(let f of h.children)f.textContent=f.textContent.replaceAll(">",">").replaceAll("<","<"),n&&f.setAttribute("style",n);u=l.getBBox(),u.height+=6}return i.attr("transform",`translate(${-u.width/2},${-u.height/2+r})`),u.height}var YZ=N(()=>{"use strict";Ft();Ht();Ut();Wt();nr();zt();no();pr();o(qZ,"requirementBox");o(Iu,"addText")});async function XZ(t,e,{config:r}){let{labelStyles:n,nodeStyles:i}=Qe(e);e.labelStyle=n||"";let a=10,s=e.width;e.width=(e.width??200)-10;let{shapeSvg:l,bbox:u,label:h}=await pt(t,e,ht(e)),f=e.padding||10,d="",p;"ticket"in e&&e.ticket&&r?.kanban?.ticketBaseUrl&&(d=r?.kanban?.ticketBaseUrl.replace("#TICKET#",e.ticket),p=l.insert("svg:a",":first-child").attr("class","kanban-ticket-link").attr("xlink:href",d).attr("target","_blank"));let m={useHtmlLabels:e.useHtmlLabels,labelStyle:e.labelStyle||"",width:e.width,img:e.img,padding:e.padding||8,centerLabel:!1},g,y;p?{label:g,bbox:y}=await Pw(p,"ticket"in e&&e.ticket||"",m):{label:g,bbox:y}=await Pw(l,"ticket"in e&&e.ticket||"",m);let{label:v,bbox:x}=await Pw(l,"assigned"in e&&e.assigned||"",m);e.width=s;let b=10,w=e?.width||0,C=Math.max(y.height,x.height)/2,T=Math.max(u.height+b*2,e?.height||0)+C,E=-w/2,A=-T/2;h.attr("transform","translate("+(f-w/2)+", "+(-C-u.height/2)+")"),g.attr("transform","translate("+(f-w/2)+", "+(-C+u.height/2)+")"),v.attr("transform","translate("+(f+w/2-x.width-2*a)+", "+(-C+u.height/2)+")");let S,{rx:_,ry:I}=e,{cssStyles:L}=e;if(e.look==="handDrawn"){let k=Xe.svg(l),D=Ke(e,{}),R=_||I?k.path(Na(E,A,w,T,_||0),D):k.rectangle(E,A,w,T,D);S=l.insert(()=>R,":first-child"),S.attr("class","basic label-container").attr("style",L||null)}else{S=l.insert("rect",":first-child"),S.attr("class","basic label-container __APA__").attr("style",i).attr("rx",_??5).attr("ry",I??5).attr("x",E).attr("y",A).attr("width",w).attr("height",T);let k="priority"in e&&e.priority;if(k){let D=l.append("line"),R=E+2,O=A+Math.floor((_??0)/2),M=A+T-Math.floor((_??0)/2);D.attr("x1",R).attr("y1",O).attr("x2",R).attr("y2",M).attr("stroke-width","4").attr("stroke",v_e(k))}}return je(e,S),e.height=T,e.intersect=function(k){return Ye.rect(e,k)},l}var v_e,jZ=N(()=>{"use strict";Ft();Ht();Kh();Ut();Wt();v_e=o(t=>{switch(t){case"Very High":return"red";case"High":return"orange";case"Medium":return null;case"Low":return"blue";case"Very Low":return"lightblue"}},"colorFromPriority");o(XZ,"kanbanItem")});function KZ(t){return t in rL}var x_e,b_e,rL,nL=N(()=>{"use strict";BK();zK();VK();HK();qK();XK();KK();ZK();eQ();rQ();iQ();sQ();lQ();uQ();fQ();pQ();gQ();vQ();bQ();TQ();EQ();CQ();_Q();LQ();NQ();IQ();PQ();FQ();zQ();VQ();HQ();qQ();XQ();KQ();ZQ();eZ();rZ();iZ();sZ();lZ();uZ();fZ();pZ();gZ();vZ();bZ();TZ();EZ();CZ();_Z();LZ();NZ();IZ();PZ();FZ();zZ();GZ();WZ();YZ();jZ();x_e=[{semanticName:"Process",name:"Rectangle",shortName:"rect",description:"Standard process shape",aliases:["proc","process","rectangle"],internalAliases:["squareRect"],handler:cZ},{semanticName:"Event",name:"Rounded Rectangle",shortName:"rounded",description:"Represents an event",aliases:["event"],internalAliases:["roundedRect"],handler:nZ},{semanticName:"Terminal Point",name:"Stadium",shortName:"stadium",description:"Terminal point",aliases:["terminal","pill"],handler:hZ},{semanticName:"Subprocess",name:"Framed Rectangle",shortName:"fr-rect",description:"Subprocess",aliases:["subprocess","subproc","framed-rectangle","subroutine"],handler:xZ},{semanticName:"Database",name:"Cylinder",shortName:"cyl",description:"Database storage",aliases:["db","database","cylinder"],handler:nQ},{semanticName:"Start",name:"Circle",shortName:"circle",description:"Starting point",aliases:["circ"],handler:WK},{semanticName:"Decision",name:"Diamond",shortName:"diam",description:"Decision-making step",aliases:["decision","diamond","question"],handler:QQ},{semanticName:"Prepare Conditional",name:"Hexagon",shortName:"hex",description:"Preparation or condition step",aliases:["hexagon","prepare"],handler:yQ},{semanticName:"Data Input/Output",name:"Lean Right",shortName:"lean-r",description:"Represents input or output",aliases:["lean-right","in-out"],internalAliases:["lean_right"],handler:BQ},{semanticName:"Data Input/Output",name:"Lean Left",shortName:"lean-l",description:"Represents output or input",aliases:["lean-left","out-in"],internalAliases:["lean_left"],handler:OQ},{semanticName:"Priority Action",name:"Trapezoid Base Bottom",shortName:"trap-b",description:"Priority action",aliases:["priority","trapezoid-bottom","trapezoid"],handler:DZ},{semanticName:"Manual Operation",name:"Trapezoid Base Top",shortName:"trap-t",description:"Represents a manual task",aliases:["manual","trapezoid-top","inv-trapezoid"],internalAliases:["inv_trapezoid"],handler:RQ},{semanticName:"Stop",name:"Double Circle",shortName:"dbl-circ",description:"Represents a stop point",aliases:["double-circle"],internalAliases:["doublecircle"],handler:oQ},{semanticName:"Text Block",name:"Text Block",shortName:"text",description:"Text block",handler:SZ},{semanticName:"Card",name:"Notched Rectangle",shortName:"notch-rect",description:"Represents a card",aliases:["card","notched-rectangle"],handler:GK},{semanticName:"Lined/Shaded Process",name:"Lined Rectangle",shortName:"lin-rect",description:"Lined process shape",aliases:["lined-rectangle","lined-process","lin-proc","shaded-process"],handler:aZ},{semanticName:"Start",name:"Small Circle",shortName:"sm-circ",description:"Small starting point",aliases:["start","small-circle"],internalAliases:["stateStart"],handler:yZ},{semanticName:"Stop",name:"Framed Circle",shortName:"fr-circ",description:"Stop point",aliases:["stop","framed-circle"],internalAliases:["stateEnd"],handler:mZ},{semanticName:"Fork/Join",name:"Filled Rectangle",shortName:"fork",description:"Fork or join in process flow",aliases:["join"],internalAliases:["forkJoin"],handler:dQ},{semanticName:"Collate",name:"Hourglass",shortName:"hourglass",description:"Represents a collate operation",aliases:["hourglass","collate"],handler:xQ},{semanticName:"Comment",name:"Curly Brace",shortName:"brace",description:"Adds a comment",aliases:["comment","brace-l"],handler:jK},{semanticName:"Comment Right",name:"Curly Brace",shortName:"brace-r",description:"Adds a comment",handler:QK},{semanticName:"Comment with braces on both sides",name:"Curly Braces",shortName:"braces",description:"Adds a comment",handler:JK},{semanticName:"Com Link",name:"Lightning Bolt",shortName:"bolt",description:"Communication link",aliases:["com-link","lightning-bolt"],handler:$Q},{semanticName:"Document",name:"Document",shortName:"doc",description:"Represents a document",aliases:["doc","document"],handler:OZ},{semanticName:"Delay",name:"Half-Rounded Rectangle",shortName:"delay",description:"Represents a delay",aliases:["half-rounded-rectangle"],handler:mQ},{semanticName:"Direct Access Storage",name:"Horizontal Cylinder",shortName:"h-cyl",description:"Direct access storage",aliases:["das","horizontal-cylinder"],handler:AZ},{semanticName:"Disk Storage",name:"Lined Cylinder",shortName:"lin-cyl",description:"Disk storage",aliases:["disk","lined-cylinder"],handler:GQ},{semanticName:"Display",name:"Curved Trapezoid",shortName:"curv-trap",description:"Represents a display",aliases:["curved-trapezoid","display"],handler:tQ},{semanticName:"Divided Process",name:"Divided Rectangle",shortName:"div-rect",description:"Divided process shape",aliases:["div-proc","divided-rectangle","divided-process"],handler:aQ},{semanticName:"Extract",name:"Triangle",shortName:"tri",description:"Extraction process",aliases:["extract","triangle"],handler:MZ},{semanticName:"Internal Storage",name:"Window Pane",shortName:"win-pane",description:"Internal storage",aliases:["internal-storage","window-pane"],handler:$Z},{semanticName:"Junction",name:"Filled Circle",shortName:"f-circ",description:"Junction point",aliases:["junction","filled-circle"],handler:cQ},{semanticName:"Loop Limit",name:"Trapezoidal Pentagon",shortName:"notch-pent",description:"Loop limit step",aliases:["loop-limit","notched-pentagon"],handler:RZ},{semanticName:"Manual File",name:"Flipped Triangle",shortName:"flip-tri",description:"Manual file operation",aliases:["manual-file","flipped-triangle"],handler:hQ},{semanticName:"Manual Input",name:"Sloped Rectangle",shortName:"sl-rect",description:"Manual input step",aliases:["manual-input","sloped-rectangle"],handler:oZ},{semanticName:"Multi-Document",name:"Stacked Document",shortName:"docs",description:"Multiple documents",aliases:["documents","st-doc","stacked-document"],handler:YQ},{semanticName:"Multi-Process",name:"Stacked Rectangle",shortName:"st-rect",description:"Multiple processes",aliases:["procs","processes","stacked-rectangle"],handler:WQ},{semanticName:"Stored Data",name:"Bow Tie Rectangle",shortName:"bow-rect",description:"Stored data",aliases:["stored-data","bow-tie-rectangle"],handler:$K},{semanticName:"Summary",name:"Crossed Circle",shortName:"cross-circ",description:"Summary",aliases:["summary","crossed-circle"],handler:YK},{semanticName:"Tagged Document",name:"Tagged Document",shortName:"tag-doc",description:"Tagged document",aliases:["tag-doc","tagged-document"],handler:kZ},{semanticName:"Tagged Process",name:"Tagged Rectangle",shortName:"tag-rect",description:"Tagged process",aliases:["tagged-rectangle","tag-proc","tagged-process"],handler:wZ},{semanticName:"Paper Tape",name:"Flag",shortName:"flag",description:"Paper tape",aliases:["paper-tape"],handler:BZ},{semanticName:"Odd",name:"Odd",shortName:"odd",description:"Odd shape",internalAliases:["rect_left_inv_arrow"],handler:JQ},{semanticName:"Lined Document",name:"Lined Document",shortName:"lin-doc",description:"Lined document",aliases:["lined-document"],handler:UQ}],b_e=o(()=>{let e=[...Object.entries({state:dZ,choice:UK,note:jQ,rectWithTitle:tZ,labelRect:MQ,iconSquare:AQ,iconCircle:kQ,icon:wQ,iconRounded:SQ,imageSquare:DQ,anchor:PK,kanbanItem:XZ,classBox:HZ,erBox:tL,requirementBox:qZ}),...x_e.flatMap(r=>[r.shortName,..."aliases"in r?r.aliases:[],..."internalAliases"in r?r.internalAliases:[]].map(i=>[i,r.handler]))];return Object.fromEntries(e)},"generateShapeMap"),rL=b_e();o(KZ,"isValidShape")});var w_e,Kw,QZ=N(()=>{"use strict";pr();Rw();zt();vt();nL();nr();dr();mi();w_e="flowchart-",Kw=class{constructor(){this.vertexCounter=0;this.config=me();this.vertices=new Map;this.edges=[];this.classes=new Map;this.subGraphs=[];this.subGraphLookup=new Map;this.tooltips=new Map;this.subCount=0;this.firstGraphFlag=!0;this.secCount=-1;this.posCrossRef=[];this.funs=[];this.setAccTitle=Lr;this.setAccDescription=Nr;this.setDiagramTitle=$r;this.getAccTitle=Rr;this.getAccDescription=Mr;this.getDiagramTitle=Ir;this.funs.push(this.setupToolTips.bind(this)),this.addVertex=this.addVertex.bind(this),this.firstGraph=this.firstGraph.bind(this),this.setDirection=this.setDirection.bind(this),this.addSubGraph=this.addSubGraph.bind(this),this.addLink=this.addLink.bind(this),this.setLink=this.setLink.bind(this),this.updateLink=this.updateLink.bind(this),this.addClass=this.addClass.bind(this),this.setClass=this.setClass.bind(this),this.destructLink=this.destructLink.bind(this),this.setClickEvent=this.setClickEvent.bind(this),this.setTooltip=this.setTooltip.bind(this),this.updateLinkInterpolate=this.updateLinkInterpolate.bind(this),this.setClickFun=this.setClickFun.bind(this),this.bindFunctions=this.bindFunctions.bind(this),this.lex={firstGraph:this.firstGraph.bind(this)},this.clear(),this.setGen("gen-2")}static{o(this,"FlowDB")}sanitizeText(e){return Ze.sanitizeText(e,this.config)}lookUpDomId(e){for(let r of this.vertices.values())if(r.id===e)return r.domId;return e}addVertex(e,r,n,i,a,s,l={},u){if(!e||e.trim().length===0)return;let h;if(u!==void 0){let m;u.includes(` + M${f},${d-h} L${f},${d+u}`;e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let x=m.path(v,g),b=i.insert(()=>x,":first-child");return b.attr("transform",`translate(${h/2}, ${h/2})`),b.attr("class","basic label-container"),p&&e.look!=="handDrawn"&&b.selectAll("path").attr("style",p),n&&e.look!=="handDrawn"&&b.selectAll("path").attr("style",n),s.attr("transform",`translate(${-(a.width/2)+h/2-(a.x-(a.left??0))}, ${-(a.height/2)+h/2-(a.y-(a.top??0))})`),Ke(e,b),e.intersect=function(T){return Xe.polygon(e,y,T)},i}var QJ=N(()=>{"use strict";Ft();zt();Wt();Ht();o(KJ,"windowPane")});async function ML(t,e){let r=e;if(r.alias&&(e.label=r.alias),e.look==="handDrawn"){let{themeVariables:U}=tr(),{background:K}=U,ee={...e,id:e.id+"-background",look:"default",cssStyles:["stroke: none",`fill: ${K}`]};await ML(t,ee)}let n=tr();e.useHtmlLabels=n.htmlLabels;let i=n.er?.diagramPadding??10,a=n.er?.entityPadding??6,{cssStyles:s}=e,{labelStyles:l,nodeStyles:u}=Ye(e);if(r.attributes.length===0&&e.label){let U={rx:0,ry:0,labelPaddingX:i,labelPaddingY:i*1.5,classes:""};ra(e.label,n)+U.labelPaddingX*20){let U=d.width+i*2-(y+v+x+b);y+=U/w,v+=U/w,x>0&&(x+=U/w),b>0&&(b+=U/w)}let _=y+v+x+b,C=je.svg(f),D=Qe(e,{});e.look!=="handDrawn"&&(D.roughness=0,D.fillStyle="solid");let O=0;g.length>0&&(O=g.reduce((U,K)=>U+(K?.rowHeight??0),0));let R=Math.max(E.width+i*2,e?.width||0,_),k=Math.max((O??0)+d.height,e?.height||0),L=-R/2,A=-k/2;f.selectAll("g:not(:first-child)").each((U,K,ee)=>{let Y=Ge(ee[K]),ce=Y.attr("transform"),Z=0,ue=0;if(ce){let j=RegExp(/translate\(([^,]+),([^)]+)\)/).exec(ce);j&&(Z=parseFloat(j[1]),ue=parseFloat(j[2]),Y.attr("class").includes("attribute-name")?Z+=y:Y.attr("class").includes("attribute-keys")?Z+=y+v:Y.attr("class").includes("attribute-comment")&&(Z+=y+v+x))}Y.attr("transform",`translate(${L+i/2+Z}, ${ue+A+d.height+a/2})`)}),f.select(".name").attr("transform","translate("+-d.width/2+", "+(A+a/2)+")");let I=C.rectangle(L,A,R,k,D),M=f.insert(()=>I,":first-child").attr("style",s.join("")),{themeVariables:P}=tr(),{rowEven:B,rowOdd:F,nodeBorder:z}=P;m.push(0);for(let[U,K]of g.entries()){let Y=(U+1)%2===0&&K.yOffset!==0,ce=C.rectangle(L,d.height+A+K?.yOffset,R,K?.rowHeight,{...D,fill:Y?B:F,stroke:z});f.insert(()=>ce,"g.label").attr("style",s.join("")).attr("class",`row-rect-${Y?"even":"odd"}`)}let $=C.line(L,d.height+A,R+L,d.height+A,D);f.insert(()=>$).attr("class","divider"),$=C.line(y+L,d.height+A,y+L,k+A,D),f.insert(()=>$).attr("class","divider"),T&&($=C.line(y+v+L,d.height+A,y+v+L,k+A,D),f.insert(()=>$).attr("class","divider")),S&&($=C.line(y+v+x+L,d.height+A,y+v+x+L,k+A,D),f.insert(()=>$).attr("class","divider"));for(let U of m)$=C.line(L,d.height+A+U,R+L,d.height+A+U,D),f.insert(()=>$).attr("class","divider");if(Ke(e,M),u&&e.look!=="handDrawn"){let K=u.split(";")?.filter(ee=>ee.includes("stroke"))?.map(ee=>`${ee}`).join("; ");f.selectAll("path").attr("style",K??""),f.selectAll(".row-rect-even path").attr("style",u)}return e.intersect=function(U){return Xe.rect(e,U)},f}async function L2(t,e,r,n=0,i=0,a=[],s=""){let l=t.insert("g").attr("class",`label ${a.join(" ")}`).attr("transform",`translate(${n}, ${i})`).attr("style",s);e!==ic(e)&&(e=ic(e),e=e.replaceAll("<","<").replaceAll(">",">"));let u=l.node().appendChild(await qn(l,e,{width:ra(e,r)+100,style:s,useHtmlLabels:r.htmlLabels},r));if(e.includes("<")||e.includes(">")){let f=u.children[0];for(f.textContent=f.textContent.replaceAll("<","<").replaceAll(">",">");f.childNodes[0];)f=f.childNodes[0],f.textContent=f.textContent.replaceAll("<","<").replaceAll(">",">")}let h=u.getBBox();if(dr(r.htmlLabels)){let f=u.children[0];f.style.textAlign="start";let d=Ge(u);h=f.getBoundingClientRect(),d.attr("width",h.width),d.attr("height",h.height)}return h}var ZJ=N(()=>{"use strict";Ft();Ht();zt();Wt();Em();mi();ao();pr();fr();er();o(ML,"erBox");o(L2,"addText")});async function JJ(t,e,r,n,i=r.class.padding??12){let a=n?0:3,s=t.insert("g").attr("class",ht(e)).attr("id",e.domId||e.id),l=null,u=null,h=null,f=null,d=0,p=0,m=0;if(l=s.insert("g").attr("class","annotation-group text"),e.annotations.length>0){let b=e.annotations[0];await nw(l,{text:`\xAB${b}\xBB`},0),d=l.node().getBBox().height}u=s.insert("g").attr("class","label-group text"),await nw(u,e,0,["font-weight: bolder"]);let g=u.node().getBBox();p=g.height,h=s.insert("g").attr("class","members-group text");let y=0;for(let b of e.members){let T=await nw(h,b,y,[b.parseClassifier()]);y+=T+a}m=h.node().getBBox().height,m<=0&&(m=i/2),f=s.insert("g").attr("class","methods-group text");let v=0;for(let b of e.methods){let T=await nw(f,b,v,[b.parseClassifier()]);v+=T+a}let x=s.node().getBBox();if(l!==null){let b=l.node().getBBox();l.attr("transform",`translate(${-b.width/2})`)}return u.attr("transform",`translate(${-g.width/2}, ${d})`),x=s.node().getBBox(),h.attr("transform",`translate(0, ${d+p+i*2})`),x=s.node().getBBox(),f.attr("transform",`translate(0, ${d+p+(m?m+i*4:i*2)})`),x=s.node().getBBox(),{shapeSvg:s,bbox:x}}async function nw(t,e,r,n=[]){let i=t.insert("g").attr("class","label").attr("style",n.join("; ")),a=tr(),s="useHtmlLabels"in e?e.useHtmlLabels:dr(a.htmlLabels)??!0,l="";"text"in e?l=e.text:l=e.label,!s&&l.startsWith("\\")&&(l=l.substring(1)),yi(l)&&(s=!0);let u=await qn(i,fd(na(l)),{width:ra(l,a)+50,classes:"markdown-node-label",useHtmlLabels:s},a),h,f=1;if(s){let d=u.children[0],p=Ge(u);f=d.innerHTML.split("
    ").length,d.innerHTML.includes("")&&(f+=d.innerHTML.split("").length-1);let m=d.getElementsByTagName("img");if(m){let g=l.replace(/]*>/g,"").trim()==="";await Promise.all([...m].map(y=>new Promise(v=>{function x(){if(y.style.display="flex",y.style.flexDirection="column",g){let b=a.fontSize?.toString()??window.getComputedStyle(document.body).fontSize,S=parseInt(b,10)*5+"px";y.style.minWidth=S,y.style.maxWidth=S}else y.style.width="100%";v(y)}o(x,"setupImage"),setTimeout(()=>{y.complete&&x()}),y.addEventListener("error",x),y.addEventListener("load",x)})))}h=d.getBoundingClientRect(),p.attr("width",h.width),p.attr("height",h.height)}else{n.includes("font-weight: bolder")&&Ge(u).selectAll("tspan").attr("font-weight",""),f=u.children.length;let d=u.children[0];(u.textContent===""||u.textContent.includes(">"))&&(d.textContent=l[0]+l.substring(1).replaceAll(">",">").replaceAll("<","<").trim(),l[1]===" "&&(d.textContent=d.textContent[0]+" "+d.textContent.substring(1))),d.textContent==="undefined"&&(d.textContent=""),h=u.getBBox()}return i.attr("transform","translate(0,"+(-h.height/(2*f)+r)+")"),h.height}var eee=N(()=>{"use strict";fr();mi();Ft();er();Gt();ao();pr();o(JJ,"textHelper");o(nw,"addText")});async function tee(t,e){let r=me(),n=r.class.padding??12,i=n,a=e.useHtmlLabels??dr(r.htmlLabels)??!0,s=e;s.annotations=s.annotations??[],s.members=s.members??[],s.methods=s.methods??[];let{shapeSvg:l,bbox:u}=await JJ(t,e,r,a,i),{labelStyles:h,nodeStyles:f}=Ye(e);e.labelStyle=h,e.cssStyles=s.styles||"";let d=s.styles?.join(";")||f||"";e.cssStyles||(e.cssStyles=d.replaceAll("!important","").split(";"));let p=s.members.length===0&&s.methods.length===0&&!r.class?.hideEmptyMembersBox,m=je.svg(l),g=Qe(e,{});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=u.width,v=u.height;s.members.length===0&&s.methods.length===0?v+=i:s.members.length>0&&s.methods.length===0&&(v+=i*2);let x=-y/2,b=-v/2,T=m.rectangle(x-n,b-n-(p?n:s.members.length===0&&s.methods.length===0?-n/2:0),y+2*n,v+2*n+(p?n*2:s.members.length===0&&s.methods.length===0?-n:0),g),S=l.insert(()=>T,":first-child");S.attr("class","basic label-container");let w=S.node().getBBox();l.selectAll(".text").each((D,O,R)=>{let k=Ge(R[O]),L=k.attr("transform"),A=0;if(L){let B=RegExp(/translate\(([^,]+),([^)]+)\)/).exec(L);B&&(A=parseFloat(B[2]))}let I=A+b+n-(p?n:s.members.length===0&&s.methods.length===0?-n/2:0);a||(I-=4);let M=x;(k.attr("class").includes("label-group")||k.attr("class").includes("annotation-group"))&&(M=-k.node()?.getBBox().width/2||0,l.selectAll("text").each(function(P,B,F){window.getComputedStyle(F[B]).textAnchor==="middle"&&(M=0)})),k.attr("transform",`translate(${M}, ${I})`)});let E=l.select(".annotation-group").node().getBBox().height-(p?n/2:0)||0,_=l.select(".label-group").node().getBBox().height-(p?n/2:0)||0,C=l.select(".members-group").node().getBBox().height-(p?n/2:0)||0;if(s.members.length>0||s.methods.length>0||p){let D=m.line(w.x,E+_+b+n,w.x+w.width,E+_+b+n,g);l.insert(()=>D).attr("class","divider").attr("style",d)}if(p||s.members.length>0||s.methods.length>0){let D=m.line(w.x,E+_+C+b+i*2+n,w.x+w.width,E+_+C+b+n+i*2,g);l.insert(()=>D).attr("class","divider").attr("style",d)}if(s.look!=="handDrawn"&&l.selectAll("path").attr("style",d),S.select(":nth-child(2)").attr("style",d),l.selectAll(".divider").select("path").attr("style",d),e.labelStyle?l.selectAll("span").attr("style",e.labelStyle):l.selectAll("span").attr("style",d),!a){let D=RegExp(/color\s*:\s*([^;]*)/),O=D.exec(d);if(O){let R=O[0].replace("color","fill");l.selectAll("tspan").attr("style",R)}else if(h){let R=D.exec(h);if(R){let k=R[0].replace("color","fill");l.selectAll("tspan").attr("style",k)}}}return Ke(e,S),e.intersect=function(D){return Xe.rect(e,D)},l}var ree=N(()=>{"use strict";Ft();Gt();fr();Wt();zt();Ht();eee();pr();o(tee,"classBox")});async function nee(t,e){let{labelStyles:r,nodeStyles:n}=Ye(e);e.labelStyle=r;let i=e,a=e,s=20,l=20,u="verifyMethod"in e,h=ht(e),f=t.insert("g").attr("class",h).attr("id",e.domId??e.id),d;u?d=await Pu(f,`<<${i.type}>>`,0,e.labelStyle):d=await Pu(f,"<<Element>>",0,e.labelStyle);let p=d,m=await Pu(f,i.name,p,e.labelStyle+"; font-weight: bold;");if(p+=m+l,u){let E=await Pu(f,`${i.requirementId?`id: ${i.requirementId}`:""}`,p,e.labelStyle);p+=E;let _=await Pu(f,`${i.text?`Text: ${i.text}`:""}`,p,e.labelStyle);p+=_;let C=await Pu(f,`${i.risk?`Risk: ${i.risk}`:""}`,p,e.labelStyle);p+=C,await Pu(f,`${i.verifyMethod?`Verification: ${i.verifyMethod}`:""}`,p,e.labelStyle)}else{let E=await Pu(f,`${a.type?`Type: ${a.type}`:""}`,p,e.labelStyle);p+=E,await Pu(f,`${a.docRef?`Doc Ref: ${a.docRef}`:""}`,p,e.labelStyle)}let g=(f.node()?.getBBox().width??200)+s,y=(f.node()?.getBBox().height??200)+s,v=-g/2,x=-y/2,b=je.svg(f),T=Qe(e,{});e.look!=="handDrawn"&&(T.roughness=0,T.fillStyle="solid");let S=b.rectangle(v,x,g,y,T),w=f.insert(()=>S,":first-child");if(w.attr("class","basic label-container").attr("style",n),f.selectAll(".label").each((E,_,C)=>{let D=Ge(C[_]),O=D.attr("transform"),R=0,k=0;if(O){let M=RegExp(/translate\(([^,]+),([^)]+)\)/).exec(O);M&&(R=parseFloat(M[1]),k=parseFloat(M[2]))}let L=k-y/2,A=v+s/2;(_===0||_===1)&&(A=R),D.attr("transform",`translate(${A}, ${L+s})`)}),p>d+m+l){let E=b.line(v,x+d+m+l,v+g,x+d+m+l,T);f.insert(()=>E).attr("style",n)}return Ke(e,w),e.intersect=function(E){return Xe.rect(e,E)},f}async function Pu(t,e,r,n=""){if(e==="")return 0;let i=t.insert("g").attr("class","label").attr("style",n),a=me(),s=a.htmlLabels??!0,l=await qn(i,fd(na(e)),{width:ra(e,a)+50,classes:"markdown-node-label",useHtmlLabels:s,style:n},a),u;if(s){let h=l.children[0],f=Ge(l);u=h.getBoundingClientRect(),f.attr("width",u.width),f.attr("height",u.height)}else{let h=l.children[0];for(let f of h.children)f.textContent=f.textContent.replaceAll(">",">").replaceAll("<","<"),n&&f.setAttribute("style",n);u=l.getBBox(),u.height+=6}return i.attr("transform",`translate(${-u.width/2},${-u.height/2+r})`),u.height}var iee=N(()=>{"use strict";Ft();Ht();zt();Wt();er();Gt();ao();fr();o(nee,"requirementBox");o(Pu,"addText")});async function aee(t,e,{config:r}){let{labelStyles:n,nodeStyles:i}=Ye(e);e.labelStyle=n||"";let a=10,s=e.width;e.width=(e.width??200)-10;let{shapeSvg:l,bbox:u,label:h}=await mt(t,e,ht(e)),f=e.padding||10,d="",p;"ticket"in e&&e.ticket&&r?.kanban?.ticketBaseUrl&&(d=r?.kanban?.ticketBaseUrl.replace("#TICKET#",e.ticket),p=l.insert("svg:a",":first-child").attr("class","kanban-ticket-link").attr("xlink:href",d).attr("target","_blank"));let m={useHtmlLabels:e.useHtmlLabels,labelStyle:e.labelStyle||"",width:e.width,img:e.img,padding:e.padding||8,centerLabel:!1},g,y;p?{label:g,bbox:y}=await HT(p,"ticket"in e&&e.ticket||"",m):{label:g,bbox:y}=await HT(l,"ticket"in e&&e.ticket||"",m);let{label:v,bbox:x}=await HT(l,"assigned"in e&&e.assigned||"",m);e.width=s;let b=10,T=e?.width||0,S=Math.max(y.height,x.height)/2,w=Math.max(u.height+b*2,e?.height||0)+S,E=-T/2,_=-w/2;h.attr("transform","translate("+(f-T/2)+", "+(-S-u.height/2)+")"),g.attr("transform","translate("+(f-T/2)+", "+(-S+u.height/2)+")"),v.attr("transform","translate("+(f+T/2-x.width-2*a)+", "+(-S+u.height/2)+")");let C,{rx:D,ry:O}=e,{cssStyles:R}=e;if(e.look==="handDrawn"){let k=je.svg(l),L=Qe(e,{}),A=D||O?k.path(Oa(E,_,T,w,D||0),L):k.rectangle(E,_,T,w,L);C=l.insert(()=>A,":first-child"),C.attr("class","basic label-container").attr("style",R||null)}else{C=l.insert("rect",":first-child"),C.attr("class","basic label-container __APA__").attr("style",i).attr("rx",D??5).attr("ry",O??5).attr("x",E).attr("y",_).attr("width",T).attr("height",w);let k="priority"in e&&e.priority;if(k){let L=l.append("line"),A=E+2,I=_+Math.floor((D??0)/2),M=_+w-Math.floor((D??0)/2);L.attr("x1",A).attr("y1",I).attr("x2",A).attr("y2",M).attr("stroke-width","4").attr("stroke",KDe(k))}}return Ke(e,C),e.height=w,e.intersect=function(k){return Xe.rect(e,k)},l}var KDe,see=N(()=>{"use strict";Ft();Ht();Zh();zt();Wt();KDe=o(t=>{switch(t){case"Very High":return"red";case"High":return"orange";case"Medium":return null;case"Low":return"blue";case"Very Low":return"lightblue"}},"colorFromPriority");o(aee,"kanbanItem")});function oee(t){return t in IL}var QDe,ZDe,IL,OL=N(()=>{"use strict";XQ();QQ();JQ();tZ();nZ();aZ();oZ();cZ();hZ();dZ();mZ();yZ();xZ();TZ();kZ();SZ();AZ();DZ();RZ();MZ();OZ();BZ();$Z();GZ();UZ();WZ();YZ();jZ();QZ();JZ();tJ();nJ();aJ();oJ();cJ();hJ();dJ();mJ();yJ();xJ();TJ();kJ();SJ();AJ();DJ();RJ();MJ();OJ();BJ();$J();GJ();UJ();WJ();YJ();jJ();QJ();ZJ();ree();iee();see();QDe=[{semanticName:"Process",name:"Rectangle",shortName:"rect",description:"Standard process shape",aliases:["proc","process","rectangle"],internalAliases:["squareRect"],handler:bJ},{semanticName:"Event",name:"Rounded Rectangle",shortName:"rounded",description:"Represents an event",aliases:["event"],internalAliases:["roundedRect"],handler:pJ},{semanticName:"Terminal Point",name:"Stadium",shortName:"stadium",description:"Terminal point",aliases:["terminal","pill"],handler:wJ},{semanticName:"Subprocess",name:"Framed Rectangle",shortName:"fr-rect",description:"Subprocess",aliases:["subprocess","subproc","framed-rectangle","subroutine"],handler:LJ},{semanticName:"Database",name:"Cylinder",shortName:"cyl",description:"Database storage",aliases:["db","database","cylinder"],handler:pZ},{semanticName:"Start",name:"Circle",shortName:"circle",description:"Starting point",aliases:["circ"],handler:rZ},{semanticName:"Decision",name:"Diamond",shortName:"diam",description:"Decision-making step",aliases:["decision","diamond","question"],handler:lJ},{semanticName:"Prepare Conditional",name:"Hexagon",shortName:"hex",description:"Preparation or condition step",aliases:["hexagon","prepare"],handler:_Z},{semanticName:"Data Input/Output",name:"Lean Right",shortName:"lean-r",description:"Represents input or output",aliases:["lean-right","in-out"],internalAliases:["lean_right"],handler:XZ},{semanticName:"Data Input/Output",name:"Lean Left",shortName:"lean-l",description:"Represents output or input",aliases:["lean-left","out-in"],internalAliases:["lean_left"],handler:qZ},{semanticName:"Priority Action",name:"Trapezoid Base Bottom",shortName:"trap-b",description:"Priority action",aliases:["priority","trapezoid-bottom","trapezoid"],handler:zJ},{semanticName:"Manual Operation",name:"Trapezoid Base Top",shortName:"trap-t",description:"Represents a manual task",aliases:["manual","trapezoid-top","inv-trapezoid"],internalAliases:["inv_trapezoid"],handler:VZ},{semanticName:"Stop",name:"Double Circle",shortName:"dbl-circ",description:"Represents a stop point",aliases:["double-circle"],internalAliases:["doublecircle"],handler:vZ},{semanticName:"Text Block",name:"Text Block",shortName:"text",description:"Text block",handler:PJ},{semanticName:"Card",name:"Notched Rectangle",shortName:"notch-rect",description:"Represents a card",aliases:["card","notched-rectangle"],handler:ZQ},{semanticName:"Lined/Shaded Process",name:"Lined Rectangle",shortName:"lin-rect",description:"Lined process shape",aliases:["lined-rectangle","lined-process","lin-proc","shaded-process"],handler:gJ},{semanticName:"Start",name:"Small Circle",shortName:"sm-circ",description:"Small starting point",aliases:["start","small-circle"],internalAliases:["stateStart"],handler:_J},{semanticName:"Stop",name:"Framed Circle",shortName:"fr-circ",description:"Stop point",aliases:["stop","framed-circle"],internalAliases:["stateEnd"],handler:CJ},{semanticName:"Fork/Join",name:"Filled Rectangle",shortName:"fork",description:"Fork or join in process flow",aliases:["join"],internalAliases:["forkJoin"],handler:EZ},{semanticName:"Collate",name:"Hourglass",shortName:"hourglass",description:"Represents a collate operation",aliases:["hourglass","collate"],handler:LZ},{semanticName:"Comment",name:"Curly Brace",shortName:"brace",description:"Adds a comment",aliases:["comment","brace-l"],handler:sZ},{semanticName:"Comment Right",name:"Curly Brace",shortName:"brace-r",description:"Adds a comment",handler:lZ},{semanticName:"Comment with braces on both sides",name:"Curly Braces",shortName:"braces",description:"Adds a comment",handler:uZ},{semanticName:"Com Link",name:"Lightning Bolt",shortName:"bolt",description:"Communication link",aliases:["com-link","lightning-bolt"],handler:KZ},{semanticName:"Document",name:"Document",shortName:"doc",description:"Represents a document",aliases:["doc","document"],handler:qJ},{semanticName:"Delay",name:"Half-Rounded Rectangle",shortName:"delay",description:"Represents a delay",aliases:["half-rounded-rectangle"],handler:CZ},{semanticName:"Direct Access Storage",name:"Horizontal Cylinder",shortName:"h-cyl",description:"Direct access storage",aliases:["das","horizontal-cylinder"],handler:FJ},{semanticName:"Disk Storage",name:"Lined Cylinder",shortName:"lin-cyl",description:"Disk storage",aliases:["disk","lined-cylinder"],handler:ZZ},{semanticName:"Display",name:"Curved Trapezoid",shortName:"curv-trap",description:"Represents a display",aliases:["curved-trapezoid","display"],handler:fZ},{semanticName:"Divided Process",name:"Divided Rectangle",shortName:"div-rect",description:"Divided process shape",aliases:["div-proc","divided-rectangle","divided-process"],handler:gZ},{semanticName:"Extract",name:"Triangle",shortName:"tri",description:"Extraction process",aliases:["extract","triangle"],handler:HJ},{semanticName:"Internal Storage",name:"Window Pane",shortName:"win-pane",description:"Internal storage",aliases:["internal-storage","window-pane"],handler:KJ},{semanticName:"Junction",name:"Filled Circle",shortName:"f-circ",description:"Junction point",aliases:["junction","filled-circle"],handler:bZ},{semanticName:"Loop Limit",name:"Trapezoidal Pentagon",shortName:"notch-pent",description:"Loop limit step",aliases:["loop-limit","notched-pentagon"],handler:VJ},{semanticName:"Manual File",name:"Flipped Triangle",shortName:"flip-tri",description:"Manual file operation",aliases:["manual-file","flipped-triangle"],handler:wZ},{semanticName:"Manual Input",name:"Sloped Rectangle",shortName:"sl-rect",description:"Manual input step",aliases:["manual-input","sloped-rectangle"],handler:vJ},{semanticName:"Multi-Document",name:"Stacked Document",shortName:"docs",description:"Multiple documents",aliases:["documents","st-doc","stacked-document"],handler:iJ},{semanticName:"Multi-Process",name:"Stacked Rectangle",shortName:"st-rect",description:"Multiple processes",aliases:["procs","processes","stacked-rectangle"],handler:rJ},{semanticName:"Stored Data",name:"Bow Tie Rectangle",shortName:"bow-rect",description:"Stored data",aliases:["stored-data","bow-tie-rectangle"],handler:KQ},{semanticName:"Summary",name:"Crossed Circle",shortName:"cross-circ",description:"Summary",aliases:["summary","crossed-circle"],handler:iZ},{semanticName:"Tagged Document",name:"Tagged Document",shortName:"tag-doc",description:"Tagged document",aliases:["tag-doc","tagged-document"],handler:IJ},{semanticName:"Tagged Process",name:"Tagged Rectangle",shortName:"tag-rect",description:"Tagged process",aliases:["tagged-rectangle","tag-proc","tagged-process"],handler:NJ},{semanticName:"Paper Tape",name:"Flag",shortName:"flag",description:"Paper tape",aliases:["paper-tape"],handler:XJ},{semanticName:"Odd",name:"Odd",shortName:"odd",description:"Odd shape",internalAliases:["rect_left_inv_arrow"],handler:uJ},{semanticName:"Lined Document",name:"Lined Document",shortName:"lin-doc",description:"Lined document",aliases:["lined-document"],handler:eJ}],ZDe=o(()=>{let e=[...Object.entries({state:EJ,choice:eZ,note:sJ,rectWithTitle:fJ,labelRect:HZ,iconSquare:FZ,iconCircle:IZ,icon:NZ,iconRounded:PZ,imageSquare:zZ,anchor:YQ,kanbanItem:aee,classBox:tee,erBox:ML,requirementBox:nee}),...QDe.flatMap(r=>[r.shortName,..."aliases"in r?r.aliases:[],..."internalAliases"in r?r.internalAliases:[]].map(i=>[i,r.handler]))];return Object.fromEntries(e)},"generateShapeMap"),IL=ZDe();o(oee,"isValidShape")});var JDe,iw,lee=N(()=>{"use strict";fr();PT();Gt();yt();OL();er();pr();ci();JDe="flowchart-",iw=class{constructor(){this.vertexCounter=0;this.config=me();this.vertices=new Map;this.edges=[];this.classes=new Map;this.subGraphs=[];this.subGraphLookup=new Map;this.tooltips=new Map;this.subCount=0;this.firstGraphFlag=!0;this.secCount=-1;this.posCrossRef=[];this.funs=[];this.setAccTitle=Ar;this.setAccDescription=Lr;this.setDiagramTitle=Or;this.getAccTitle=Dr;this.getAccDescription=Rr;this.getDiagramTitle=Nr;this.funs.push(this.setupToolTips.bind(this)),this.addVertex=this.addVertex.bind(this),this.firstGraph=this.firstGraph.bind(this),this.setDirection=this.setDirection.bind(this),this.addSubGraph=this.addSubGraph.bind(this),this.addLink=this.addLink.bind(this),this.setLink=this.setLink.bind(this),this.updateLink=this.updateLink.bind(this),this.addClass=this.addClass.bind(this),this.setClass=this.setClass.bind(this),this.destructLink=this.destructLink.bind(this),this.setClickEvent=this.setClickEvent.bind(this),this.setTooltip=this.setTooltip.bind(this),this.updateLinkInterpolate=this.updateLinkInterpolate.bind(this),this.setClickFun=this.setClickFun.bind(this),this.bindFunctions=this.bindFunctions.bind(this),this.lex={firstGraph:this.firstGraph.bind(this)},this.clear(),this.setGen("gen-2")}static{o(this,"FlowDB")}sanitizeText(e){return Ze.sanitizeText(e,this.config)}lookUpDomId(e){for(let r of this.vertices.values())if(r.id===e)return r.domId;return e}addVertex(e,r,n,i,a,s,l={},u){if(!e||e.trim().length===0)return;let h;if(u!==void 0){let m;u.includes(` `)?m=u+` `:m=`{ `+u+` -}`,h=gm(m,{schema:mm})}let f=this.edges.find(m=>m.id===e);if(f){let m=h;m?.animate!==void 0&&(f.animate=m.animate),m?.animation!==void 0&&(f.animation=m.animation);return}let d,p=this.vertices.get(e);if(p===void 0&&(p={id:e,labelType:"text",domId:w_e+e+"-"+this.vertexCounter,styles:[],classes:[]},this.vertices.set(e,p)),this.vertexCounter++,r!==void 0?(this.config=me(),d=this.sanitizeText(r.text.trim()),p.labelType=r.type,d.startsWith('"')&&d.endsWith('"')&&(d=d.substring(1,d.length-1)),p.text=d):p.text===void 0&&(p.text=e),n!==void 0&&(p.type=n),i?.forEach(m=>{p.styles.push(m)}),a?.forEach(m=>{p.classes.push(m)}),s!==void 0&&(p.dir=s),p.props===void 0?p.props=l:l!==void 0&&Object.assign(p.props,l),h!==void 0){if(h.shape){if(h.shape!==h.shape.toLowerCase()||h.shape.includes("_"))throw new Error(`No such shape: ${h.shape}. Shape names should be lowercase.`);if(!KZ(h.shape))throw new Error(`No such shape: ${h.shape}.`);p.type=h?.shape}h?.label&&(p.text=h?.label),h?.icon&&(p.icon=h?.icon,!h.label?.trim()&&p.text===e&&(p.text="")),h?.form&&(p.form=h?.form),h?.pos&&(p.pos=h?.pos),h?.img&&(p.img=h?.img,!h.label?.trim()&&p.text===e&&(p.text="")),h?.constraint&&(p.constraint=h.constraint),h.w&&(p.assetWidth=Number(h.w)),h.h&&(p.assetHeight=Number(h.h))}}addSingleLink(e,r,n,i){let l={start:e,end:r,type:void 0,text:"",labelType:"text",classes:[],isUserDefinedId:!1,interpolate:this.edges.defaultInterpolate};X.info("abc78 Got edge...",l);let u=n.text;if(u!==void 0&&(l.text=this.sanitizeText(u.text.trim()),l.text.startsWith('"')&&l.text.endsWith('"')&&(l.text=l.text.substring(1,l.text.length-1)),l.labelType=u.type),n!==void 0&&(l.type=n.type,l.stroke=n.stroke,l.length=n.length>10?10:n.length),i&&!this.edges.some(h=>h.id===i))l.id=i,l.isUserDefinedId=!0;else{let h=this.edges.filter(f=>f.start===l.start&&f.end===l.end);h.length===0?l.id=Uh(l.start,l.end,{counter:0,prefix:"L"}):l.id=Uh(l.start,l.end,{counter:h.length+1,prefix:"L"})}if(this.edges.length<(this.config.maxEdges??500))X.info("Pushing edge..."),this.edges.push(l);else throw new Error(`Edge limit exceeded. ${this.edges.length} edges found, but the limit is ${this.config.maxEdges}. +}`,h=Tm(m,{schema:bm})}let f=this.edges.find(m=>m.id===e);if(f){let m=h;m?.animate!==void 0&&(f.animate=m.animate),m?.animation!==void 0&&(f.animation=m.animation);return}let d,p=this.vertices.get(e);if(p===void 0&&(p={id:e,labelType:"text",domId:JDe+e+"-"+this.vertexCounter,styles:[],classes:[]},this.vertices.set(e,p)),this.vertexCounter++,r!==void 0?(this.config=me(),d=this.sanitizeText(r.text.trim()),p.labelType=r.type,d.startsWith('"')&&d.endsWith('"')&&(d=d.substring(1,d.length-1)),p.text=d):p.text===void 0&&(p.text=e),n!==void 0&&(p.type=n),i?.forEach(m=>{p.styles.push(m)}),a?.forEach(m=>{p.classes.push(m)}),s!==void 0&&(p.dir=s),p.props===void 0?p.props=l:l!==void 0&&Object.assign(p.props,l),h!==void 0){if(h.shape){if(h.shape!==h.shape.toLowerCase()||h.shape.includes("_"))throw new Error(`No such shape: ${h.shape}. Shape names should be lowercase.`);if(!oee(h.shape))throw new Error(`No such shape: ${h.shape}.`);p.type=h?.shape}h?.label&&(p.text=h?.label),h?.icon&&(p.icon=h?.icon,!h.label?.trim()&&p.text===e&&(p.text="")),h?.form&&(p.form=h?.form),h?.pos&&(p.pos=h?.pos),h?.img&&(p.img=h?.img,!h.label?.trim()&&p.text===e&&(p.text="")),h?.constraint&&(p.constraint=h.constraint),h.w&&(p.assetWidth=Number(h.w)),h.h&&(p.assetHeight=Number(h.h))}}addSingleLink(e,r,n,i){let l={start:e,end:r,type:void 0,text:"",labelType:"text",classes:[],isUserDefinedId:!1,interpolate:this.edges.defaultInterpolate};X.info("abc78 Got edge...",l);let u=n.text;if(u!==void 0&&(l.text=this.sanitizeText(u.text.trim()),l.text.startsWith('"')&&l.text.endsWith('"')&&(l.text=l.text.substring(1,l.text.length-1)),l.labelType=u.type),n!==void 0&&(l.type=n.type,l.stroke=n.stroke,l.length=n.length>10?10:n.length),i&&!this.edges.some(h=>h.id===i))l.id=i,l.isUserDefinedId=!0;else{let h=this.edges.filter(f=>f.start===l.start&&f.end===l.end);h.length===0?l.id=Wh(l.start,l.end,{counter:0,prefix:"L"}):l.id=Wh(l.start,l.end,{counter:h.length+1,prefix:"L"})}if(this.edges.length<(this.config.maxEdges??500))X.info("Pushing edge..."),this.edges.push(l);else throw new Error(`Edge limit exceeded. ${this.edges.length} edges found, but the limit is ${this.config.maxEdges}. Initialize mermaid with maxEdges set to a higher number to allow more edges. You cannot set this config via configuration inside the diagram as it is a secure config. -You have to call mermaid.initialize.`)}isLinkData(e){return e!==null&&typeof e=="object"&&"id"in e&&typeof e.id=="string"}addLink(e,r,n){let i=this.isLinkData(n)?n.id.replace("@",""):void 0;X.info("addLink",e,r,i);for(let a of e)for(let s of r){let l=a===e[e.length-1],u=s===r[0];l&&u?this.addSingleLink(a,s,n,i):this.addSingleLink(a,s,n,void 0)}}updateLinkInterpolate(e,r){e.forEach(n=>{n==="default"?this.edges.defaultInterpolate=r:this.edges[n].interpolate=r})}updateLink(e,r){e.forEach(n=>{if(typeof n=="number"&&n>=this.edges.length)throw new Error(`The index ${n} for linkStyle is out of bounds. Valid indices for linkStyle are between 0 and ${this.edges.length-1}. (Help: Ensure that the index is within the range of existing edges.)`);n==="default"?this.edges.defaultStyle=r:(this.edges[n].style=r,(this.edges[n]?.style?.length??0)>0&&!this.edges[n]?.style?.some(i=>i?.startsWith("fill"))&&this.edges[n]?.style?.push("fill:none"))})}addClass(e,r){let n=r.join().replace(/\\,/g,"\xA7\xA7\xA7").replace(/,/g,";").replace(/ยงยงยง/g,",").split(";");e.split(",").forEach(i=>{let a=this.classes.get(i);a===void 0&&(a={id:i,styles:[],textStyles:[]},this.classes.set(i,a)),n?.forEach(s=>{if(/color/.exec(s)){let l=s.replace("fill","bgFill");a.textStyles.push(l)}a.styles.push(s)})})}setDirection(e){this.direction=e,/.*/.exec(this.direction)&&(this.direction="LR"),/.*v/.exec(this.direction)&&(this.direction="TB"),this.direction==="TD"&&(this.direction="TB")}setClass(e,r){for(let n of e.split(",")){let i=this.vertices.get(n);i&&i.classes.push(r);let a=this.edges.find(l=>l.id===n);a&&a.classes.push(r);let s=this.subGraphLookup.get(n);s&&s.classes.push(r)}}setTooltip(e,r){if(r!==void 0){r=this.sanitizeText(r);for(let n of e.split(","))this.tooltips.set(this.version==="gen-1"?this.lookUpDomId(n):n,r)}}setClickFun(e,r,n){let i=this.lookUpDomId(e);if(me().securityLevel!=="loose"||r===void 0)return;let a=[];if(typeof n=="string"){a=n.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let l=0;l{let l=document.querySelector(`[id="${i}"]`);l!==null&&l.addEventListener("click",()=>{Gt.runFunc(r,...a)},!1)}))}setLink(e,r,n){e.split(",").forEach(i=>{let a=this.vertices.get(i);a!==void 0&&(a.link=Gt.formatUrl(r,this.config),a.linkTarget=n)}),this.setClass(e,"clickable")}getTooltip(e){return this.tooltips.get(e)}setClickEvent(e,r,n){e.split(",").forEach(i=>{this.setClickFun(i,r,n)}),this.setClass(e,"clickable")}bindFunctions(e){this.funs.forEach(r=>{r(e)})}getDirection(){return this.direction?.trim()}getVertices(){return this.vertices}getEdges(){return this.edges}getClasses(){return this.classes}setupToolTips(e){let r=Ge(".mermaidTooltip");(r._groups||r)[0][0]===null&&(r=Ge("body").append("div").attr("class","mermaidTooltip").style("opacity",0)),Ge(e).select("svg").selectAll("g.node").on("mouseover",a=>{let s=Ge(a.currentTarget);if(s.attr("title")===null)return;let u=a.currentTarget?.getBoundingClientRect();r.transition().duration(200).style("opacity",".9"),r.text(s.attr("title")).style("left",window.scrollX+u.left+(u.right-u.left)/2+"px").style("top",window.scrollY+u.bottom+"px"),r.html(r.html().replace(/<br\/>/g,"
    ")),s.classed("hover",!0)}).on("mouseout",a=>{r.transition().duration(500).style("opacity",0),Ge(a.currentTarget).classed("hover",!1)})}clear(e="gen-2"){this.vertices=new Map,this.classes=new Map,this.edges=[],this.funs=[this.setupToolTips.bind(this)],this.subGraphs=[],this.subGraphLookup=new Map,this.subCount=0,this.tooltips=new Map,this.firstGraphFlag=!0,this.version=e,this.config=me(),Ar()}setGen(e){this.version=e||"gen-2"}defaultStyle(){return"fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"}addSubGraph(e,r,n){let i=e.text.trim(),a=n.text;e===n&&/\s/.exec(n.text)&&(i=void 0);let l=o(p=>{let m={boolean:{},number:{},string:{}},g=[],y;return{nodeList:p.filter(function(x){let b=typeof x;return x.stmt&&x.stmt==="dir"?(y=x.value,!1):x.trim()===""?!1:b in m?m[b].hasOwnProperty(x)?!1:m[b][x]=!0:g.includes(x)?!1:g.push(x)}),dir:y}},"uniq")(r.flat()),u=l.nodeList,h=l.dir,f=me().flowchart??{};if(h=h??(f.inheritDir?this.getDirection()??me().direction??void 0:void 0),this.version==="gen-1")for(let p=0;p2e3)return{result:!1,count:0};if(this.posCrossRef[this.secCount]=r,this.subGraphs[r].id===e)return{result:!0,count:0};let i=0,a=1;for(;i=0){let l=this.indexNodes2(e,s);if(l.result)return{result:!0,count:a+l.count};a=a+l.count}i=i+1}return{result:!1,count:a}}getDepthFirstPos(e){return this.posCrossRef[e]}indexNodes(){this.secCount=-1,this.subGraphs.length>0&&this.indexNodes2("none",this.subGraphs.length-1)}getSubGraphs(){return this.subGraphs}firstGraph(){return this.firstGraphFlag?(this.firstGraphFlag=!1,!0):!1}destructStartLink(e){let r=e.trim(),n="arrow_open";switch(r[0]){case"<":n="arrow_point",r=r.slice(1);break;case"x":n="arrow_cross",r=r.slice(1);break;case"o":n="arrow_circle",r=r.slice(1);break}let i="normal";return r.includes("=")&&(i="thick"),r.includes(".")&&(i="dotted"),{type:n,stroke:i}}countChar(e,r){let n=r.length,i=0;for(let a=0;a":i="arrow_point",r.startsWith("<")&&(i="double_"+i,n=n.slice(1));break;case"o":i="arrow_circle",r.startsWith("o")&&(i="double_"+i,n=n.slice(1));break}let a="normal",s=n.length-1;n.startsWith("=")&&(a="thick"),n.startsWith("~")&&(a="invisible");let l=this.countChar(".",n);return l&&(a="dotted",s=l),{type:i,stroke:a,length:s}}destructLink(e,r){let n=this.destructEndLink(e),i;if(r){if(i=this.destructStartLink(r),i.stroke!==n.stroke)return{type:"INVALID",stroke:"INVALID"};if(i.type==="arrow_open")i.type=n.type;else{if(i.type!==n.type)return{type:"INVALID",stroke:"INVALID"};i.type="double_"+i.type}return i.type==="double_arrow"&&(i.type="double_arrow_point"),i.length=n.length,i}return n}exists(e,r){for(let n of e)if(n.nodes.includes(r))return!0;return!1}makeUniq(e,r){let n=[];return e.nodes.forEach((i,a)=>{this.exists(r,i)||n.push(e.nodes[a])}),{nodes:n}}getTypeFromVertex(e){if(e.img)return"imageSquare";if(e.icon)return e.form==="circle"?"iconCircle":e.form==="square"?"iconSquare":e.form==="rounded"?"iconRounded":"icon";switch(e.type){case"square":case void 0:return"squareRect";case"round":return"roundedRect";case"ellipse":return"ellipse";default:return e.type}}findNode(e,r){return e.find(n=>n.id===r)}destructEdgeType(e){let r="none",n="arrow_point";switch(e){case"arrow_point":case"arrow_circle":case"arrow_cross":n=e;break;case"double_arrow_point":case"double_arrow_circle":case"double_arrow_cross":r=e.replace("double_",""),n=r;break}return{arrowTypeStart:r,arrowTypeEnd:n}}addNodeFromVertex(e,r,n,i,a,s){let l=n.get(e.id),u=i.get(e.id)??!1,h=this.findNode(r,e.id);if(h)h.cssStyles=e.styles,h.cssCompiledStyles=this.getCompiledStyles(e.classes),h.cssClasses=e.classes.join(" ");else{let f={id:e.id,label:e.text,labelStyle:"",parentId:l,padding:a.flowchart?.padding||8,cssStyles:e.styles,cssCompiledStyles:this.getCompiledStyles(["default","node",...e.classes]),cssClasses:"default "+e.classes.join(" "),dir:e.dir,domId:e.domId,look:s,link:e.link,linkTarget:e.linkTarget,tooltip:this.getTooltip(e.id),icon:e.icon,pos:e.pos,img:e.img,assetWidth:e.assetWidth,assetHeight:e.assetHeight,constraint:e.constraint};u?r.push({...f,isGroup:!0,shape:"rect"}):r.push({...f,isGroup:!1,shape:this.getTypeFromVertex(e)})}}getCompiledStyles(e){let r=[];for(let n of e){let i=this.classes.get(n);i?.styles&&(r=[...r,...i.styles??[]].map(a=>a.trim())),i?.textStyles&&(r=[...r,...i.textStyles??[]].map(a=>a.trim()))}return r}getData(){let e=me(),r=[],n=[],i=this.getSubGraphs(),a=new Map,s=new Map;for(let h=i.length-1;h>=0;h--){let f=i[h];f.nodes.length>0&&s.set(f.id,!0);for(let d of f.nodes)a.set(d,f.id)}for(let h=i.length-1;h>=0;h--){let f=i[h];r.push({id:f.id,label:f.title,labelStyle:"",parentId:a.get(f.id),padding:8,cssCompiledStyles:this.getCompiledStyles(f.classes),cssClasses:f.classes.join(" "),shape:"rect",dir:f.dir,isGroup:!0,look:e.look})}this.getVertices().forEach(h=>{this.addNodeFromVertex(h,r,a,s,e,e.look||"classic")});let u=this.getEdges();return u.forEach((h,f)=>{let{arrowTypeStart:d,arrowTypeEnd:p}=this.destructEdgeType(h.type),m=[...u.defaultStyle??[]];h.style&&m.push(...h.style);let g={id:Uh(h.start,h.end,{counter:f,prefix:"L"},h.id),isUserDefinedId:h.isUserDefinedId,start:h.start,end:h.end,type:h.type??"normal",label:h.text,labelpos:"c",thickness:h.stroke,minlen:h.length,classes:h?.stroke==="invisible"?"":"edge-thickness-normal edge-pattern-solid flowchart-link",arrowTypeStart:h?.stroke==="invisible"||h?.type==="arrow_open"?"none":d,arrowTypeEnd:h?.stroke==="invisible"||h?.type==="arrow_open"?"none":p,arrowheadStyle:"fill: #333",cssCompiledStyles:this.getCompiledStyles(h.classes),labelStyle:m,style:m,pattern:h.stroke,look:e.look,animate:h.animate,animation:h.animation,curve:h.interpolate||this.edges.defaultInterpolate||e.flowchart?.curve};n.push(g)}),{nodes:r,edges:n,other:{},config:e}}defaultConfig(){return I3.flowchart}}});var xc,km=N(()=>{"use strict";pr();xc=o((t,e)=>{let r;return e==="sandbox"&&(r=Ge("#i"+t)),(e==="sandbox"?Ge(r.nodes()[0].contentDocument.body):Ge("body")).select(`[id="${t}"]`)},"getDiagramElement")});var Ou,_2=N(()=>{"use strict";Ou=o(({flowchart:t})=>{let e=t?.subGraphTitleMargin?.top??0,r=t?.subGraphTitleMargin?.bottom??0,n=e+r;return{subGraphTitleTopMargin:e,subGraphTitleBottomMargin:r,subGraphTitleTotalMargin:n}},"getSubGraphTitleMargins")});var ZZ,T_e,k_e,E_e,S_e,C_e,A_e,JZ,Em,eJ,Qw=N(()=>{"use strict";zt();dr();vt();_2();pr();Wt();no();PD();Xw();Kh();Ut();ZZ=o(async(t,e)=>{X.info("Creating subgraph rect for ",e.id,e);let r=me(),{themeVariables:n,handDrawnSeed:i}=r,{clusterBkg:a,clusterBorder:s}=n,{labelStyles:l,nodeStyles:u,borderStyles:h,backgroundStyles:f}=Qe(e),d=t.insert("g").attr("class","cluster "+e.cssClasses).attr("id",e.id).attr("data-look",e.look),p=fr(r.flowchart.htmlLabels),m=d.insert("g").attr("class","cluster-label "),g=await Hn(m,e.label,{style:e.labelStyle,useHtmlLabels:p,isNode:!0}),y=g.getBBox();if(fr(r.flowchart.htmlLabels)){let A=g.children[0],S=Ge(g);y=A.getBoundingClientRect(),S.attr("width",y.width),S.attr("height",y.height)}let v=e.width<=y.width+e.padding?y.width+e.padding:e.width;e.width<=y.width+e.padding?e.diff=(v-e.width)/2-e.padding:e.diff=-e.padding;let x=e.height,b=e.x-v/2,w=e.y-x/2;X.trace("Data ",e,JSON.stringify(e));let C;if(e.look==="handDrawn"){let A=Xe.svg(d),S=Ke(e,{roughness:.7,fill:a,stroke:s,fillWeight:3,seed:i}),_=A.path(Na(b,w,v,x,0),S);C=d.insert(()=>(X.debug("Rough node insert CXC",_),_),":first-child"),C.select("path:nth-child(2)").attr("style",h.join(";")),C.select("path").attr("style",f.join(";").replace("fill","stroke"))}else C=d.insert("rect",":first-child"),C.attr("style",u).attr("rx",e.rx).attr("ry",e.ry).attr("x",b).attr("y",w).attr("width",v).attr("height",x);let{subGraphTitleTopMargin:T}=Ou(r);if(m.attr("transform",`translate(${e.x-y.width/2}, ${e.y-e.height/2+T})`),l){let A=m.select("span");A&&A.attr("style",l)}let E=C.node().getBBox();return e.offsetX=0,e.width=E.width,e.height=E.height,e.offsetY=y.height-e.padding/2,e.intersect=function(A){return qh(e,A)},{cluster:d,labelBBox:y}},"rect"),T_e=o((t,e)=>{let r=t.insert("g").attr("class","note-cluster").attr("id",e.id),n=r.insert("rect",":first-child"),i=0*e.padding,a=i/2;n.attr("rx",e.rx).attr("ry",e.ry).attr("x",e.x-e.width/2-a).attr("y",e.y-e.height/2-a).attr("width",e.width+i).attr("height",e.height+i).attr("fill","none");let s=n.node().getBBox();return e.width=s.width,e.height=s.height,e.intersect=function(l){return qh(e,l)},{cluster:r,labelBBox:{width:0,height:0}}},"noteGroup"),k_e=o(async(t,e)=>{let r=me(),{themeVariables:n,handDrawnSeed:i}=r,{altBackground:a,compositeBackground:s,compositeTitleBackground:l,nodeBorder:u}=n,h=t.insert("g").attr("class",e.cssClasses).attr("id",e.id).attr("data-id",e.id).attr("data-look",e.look),f=h.insert("g",":first-child"),d=h.insert("g").attr("class","cluster-label"),p=h.append("rect"),m=d.node().appendChild(await vc(e.label,e.labelStyle,void 0,!0)),g=m.getBBox();if(fr(r.flowchart.htmlLabels)){let _=m.children[0],I=Ge(m);g=_.getBoundingClientRect(),I.attr("width",g.width),I.attr("height",g.height)}let y=0*e.padding,v=y/2,x=(e.width<=g.width+e.padding?g.width+e.padding:e.width)+y;e.width<=g.width+e.padding?e.diff=(x-e.width)/2-e.padding:e.diff=-e.padding;let b=e.height+y,w=e.height+y-g.height-6,C=e.x-x/2,T=e.y-b/2;e.width=x;let E=e.y-e.height/2-v+g.height+2,A;if(e.look==="handDrawn"){let _=e.cssClasses.includes("statediagram-cluster-alt"),I=Xe.svg(h),L=e.rx||e.ry?I.path(Na(C,T,x,b,10),{roughness:.7,fill:l,fillStyle:"solid",stroke:u,seed:i}):I.rectangle(C,T,x,b,{seed:i});A=h.insert(()=>L,":first-child");let k=I.rectangle(C,E,x,w,{fill:_?a:s,fillStyle:_?"hachure":"solid",stroke:u,seed:i});A=h.insert(()=>L,":first-child"),p=h.insert(()=>k)}else A=f.insert("rect",":first-child"),A.attr("class","outer").attr("x",C).attr("y",T).attr("width",x).attr("height",b).attr("data-look",e.look),p.attr("class","inner").attr("x",C).attr("y",E).attr("width",x).attr("height",w);d.attr("transform",`translate(${e.x-g.width/2}, ${T+1-(fr(r.flowchart.htmlLabels)?0:3)})`);let S=A.node().getBBox();return e.height=S.height,e.offsetX=0,e.offsetY=g.height-e.padding/2,e.labelBBox=g,e.intersect=function(_){return qh(e,_)},{cluster:h,labelBBox:g}},"roundedWithTitle"),E_e=o(async(t,e)=>{X.info("Creating subgraph rect for ",e.id,e);let r=me(),{themeVariables:n,handDrawnSeed:i}=r,{clusterBkg:a,clusterBorder:s}=n,{labelStyles:l,nodeStyles:u,borderStyles:h,backgroundStyles:f}=Qe(e),d=t.insert("g").attr("class","cluster "+e.cssClasses).attr("id",e.id).attr("data-look",e.look),p=fr(r.flowchart.htmlLabels),m=d.insert("g").attr("class","cluster-label "),g=await Hn(m,e.label,{style:e.labelStyle,useHtmlLabels:p,isNode:!0,width:e.width}),y=g.getBBox();if(fr(r.flowchart.htmlLabels)){let A=g.children[0],S=Ge(g);y=A.getBoundingClientRect(),S.attr("width",y.width),S.attr("height",y.height)}let v=e.width<=y.width+e.padding?y.width+e.padding:e.width;e.width<=y.width+e.padding?e.diff=(v-e.width)/2-e.padding:e.diff=-e.padding;let x=e.height,b=e.x-v/2,w=e.y-x/2;X.trace("Data ",e,JSON.stringify(e));let C;if(e.look==="handDrawn"){let A=Xe.svg(d),S=Ke(e,{roughness:.7,fill:a,stroke:s,fillWeight:4,seed:i}),_=A.path(Na(b,w,v,x,e.rx),S);C=d.insert(()=>(X.debug("Rough node insert CXC",_),_),":first-child"),C.select("path:nth-child(2)").attr("style",h.join(";")),C.select("path").attr("style",f.join(";").replace("fill","stroke"))}else C=d.insert("rect",":first-child"),C.attr("style",u).attr("rx",e.rx).attr("ry",e.ry).attr("x",b).attr("y",w).attr("width",v).attr("height",x);let{subGraphTitleTopMargin:T}=Ou(r);if(m.attr("transform",`translate(${e.x-y.width/2}, ${e.y-e.height/2+T})`),l){let A=m.select("span");A&&A.attr("style",l)}let E=C.node().getBBox();return e.offsetX=0,e.width=E.width,e.height=E.height,e.offsetY=y.height-e.padding/2,e.intersect=function(A){return qh(e,A)},{cluster:d,labelBBox:y}},"kanbanSection"),S_e=o((t,e)=>{let r=me(),{themeVariables:n,handDrawnSeed:i}=r,{nodeBorder:a}=n,s=t.insert("g").attr("class",e.cssClasses).attr("id",e.id).attr("data-look",e.look),l=s.insert("g",":first-child"),u=0*e.padding,h=e.width+u;e.diff=-e.padding;let f=e.height+u,d=e.x-h/2,p=e.y-f/2;e.width=h;let m;if(e.look==="handDrawn"){let v=Xe.svg(s).rectangle(d,p,h,f,{fill:"lightgrey",roughness:.5,strokeLineDash:[5],stroke:a,seed:i});m=s.insert(()=>v,":first-child")}else m=l.insert("rect",":first-child"),m.attr("class","divider").attr("x",d).attr("y",p).attr("width",h).attr("height",f).attr("data-look",e.look);let g=m.node().getBBox();return e.height=g.height,e.offsetX=0,e.offsetY=0,e.intersect=function(y){return qh(e,y)},{cluster:s,labelBBox:{}}},"divider"),C_e=ZZ,A_e={rect:ZZ,squareRect:C_e,roundedWithTitle:k_e,noteGroup:T_e,divider:S_e,kanbanSection:E_e},JZ=new Map,Em=o(async(t,e)=>{let r=e.shape||"rect",n=await A_e[r](t,e);return JZ.set(e.id,n),n},"insertCluster"),eJ=o(()=>{JZ=new Map},"clear")});function Zw(t,e){if(t===void 0||e===void 0)return{angle:0,deltaX:0,deltaY:0};t=Wn(t),e=Wn(e);let[r,n]=[t.x,t.y],[i,a]=[e.x,e.y],s=i-r,l=a-n;return{angle:Math.atan(l/s),deltaX:s,deltaY:l}}var zo,Wn,Jw,iL=N(()=>{"use strict";zo={aggregation:18,extension:18,composition:18,dependency:6,lollipop:13.5,arrow_point:4};o(Zw,"calculateDeltaAndAngle");Wn=o(t=>Array.isArray(t)?{x:t[0],y:t[1]}:t,"pointTransformer"),Jw=o(t=>({x:o(function(e,r,n){let i=0,a=Wn(n[0]).x=0?1:-1)}else if(r===n.length-1&&Object.hasOwn(zo,t.arrowTypeEnd)){let{angle:m,deltaX:g}=Zw(n[n.length-1],n[n.length-2]);i=zo[t.arrowTypeEnd]*Math.cos(m)*(g>=0?1:-1)}let s=Math.abs(Wn(e).x-Wn(n[n.length-1]).x),l=Math.abs(Wn(e).y-Wn(n[n.length-1]).y),u=Math.abs(Wn(e).x-Wn(n[0]).x),h=Math.abs(Wn(e).y-Wn(n[0]).y),f=zo[t.arrowTypeStart],d=zo[t.arrowTypeEnd],p=1;if(s0&&l0&&h=0?1:-1)}else if(r===n.length-1&&Object.hasOwn(zo,t.arrowTypeEnd)){let{angle:m,deltaY:g}=Zw(n[n.length-1],n[n.length-2]);i=zo[t.arrowTypeEnd]*Math.abs(Math.sin(m))*(g>=0?1:-1)}let s=Math.abs(Wn(e).y-Wn(n[n.length-1]).y),l=Math.abs(Wn(e).x-Wn(n[n.length-1]).x),u=Math.abs(Wn(e).y-Wn(n[0]).y),h=Math.abs(Wn(e).x-Wn(n[0]).x),f=zo[t.arrowTypeStart],d=zo[t.arrowTypeEnd],p=1;if(s0&&l0&&h{"use strict";vt();rJ=o((t,e,r,n,i,a)=>{e.arrowTypeStart&&tJ(t,"start",e.arrowTypeStart,r,n,i,a),e.arrowTypeEnd&&tJ(t,"end",e.arrowTypeEnd,r,n,i,a)},"addEdgeMarkers"),__e={arrow_cross:{type:"cross",fill:!1},arrow_point:{type:"point",fill:!0},arrow_barb:{type:"barb",fill:!0},arrow_circle:{type:"circle",fill:!1},aggregation:{type:"aggregation",fill:!1},extension:{type:"extension",fill:!1},composition:{type:"composition",fill:!0},dependency:{type:"dependency",fill:!0},lollipop:{type:"lollipop",fill:!1},only_one:{type:"onlyOne",fill:!1},zero_or_one:{type:"zeroOrOne",fill:!1},one_or_more:{type:"oneOrMore",fill:!1},zero_or_more:{type:"zeroOrMore",fill:!1},requirement_arrow:{type:"requirement_arrow",fill:!1},requirement_contains:{type:"requirement_contains",fill:!1}},tJ=o((t,e,r,n,i,a,s)=>{let l=__e[r];if(!l){X.warn(`Unknown arrow type: ${r}`);return}let u=l.type,f=`${i}_${a}-${u}${e==="start"?"Start":"End"}`;if(s&&s.trim()!==""){let d=s.replace(/[^\dA-Za-z]/g,"_"),p=`${f}_${d}`;if(!document.getElementById(p)){let m=document.getElementById(f);if(m){let g=m.cloneNode(!0);g.id=p,g.querySelectorAll("path, circle, line").forEach(v=>{v.setAttribute("stroke",s),l.fill&&v.setAttribute("fill",s)}),m.parentNode?.appendChild(g)}}t.attr(`marker-${e}`,`url(${n}#${p})`)}else t.attr(`marker-${e}`,`url(${n}#${f})`)},"addEdgeMarker")});function eT(t,e){me().flowchart.htmlLabels&&t&&(t.style.width=e.length*9+"px",t.style.height="12px")}function R_e(t){let e=[],r=[];for(let n=1;n5&&Math.abs(a.y-i.y)>5||i.y===a.y&&a.x===s.x&&Math.abs(a.x-i.x)>5&&Math.abs(a.y-s.y)>5)&&(e.push(a),r.push(n))}return{cornerPoints:e,cornerPointPositions:r}}var tT,pa,sJ,D2,rT,nT,D_e,L_e,iJ,aJ,N_e,iT,aL=N(()=>{"use strict";zt();dr();vt();no();nr();iL();_2();pr();Wt();Xw();nJ();Ut();tT=new Map,pa=new Map,sJ=o(()=>{tT.clear(),pa.clear()},"clear"),D2=o(t=>t?t.reduce((r,n)=>r+";"+n,""):"","getLabelStyles"),rT=o(async(t,e)=>{let r=fr(me().flowchart.htmlLabels),n=await Hn(t,e.label,{style:D2(e.labelStyle),useHtmlLabels:r,addSvgBackground:!0,isNode:!1});X.info("abc82",e,e.labelType);let i=t.insert("g").attr("class","edgeLabel"),a=i.insert("g").attr("class","label");a.node().appendChild(n);let s=n.getBBox();if(r){let u=n.children[0],h=Ge(n);s=u.getBoundingClientRect(),h.attr("width",s.width),h.attr("height",s.height)}a.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"),tT.set(e.id,i),e.width=s.width,e.height=s.height;let l;if(e.startLabelLeft){let u=await vc(e.startLabelLeft,D2(e.labelStyle)),h=t.insert("g").attr("class","edgeTerminals"),f=h.insert("g").attr("class","inner");l=f.node().appendChild(u);let d=u.getBBox();f.attr("transform","translate("+-d.width/2+", "+-d.height/2+")"),pa.get(e.id)||pa.set(e.id,{}),pa.get(e.id).startLeft=h,eT(l,e.startLabelLeft)}if(e.startLabelRight){let u=await vc(e.startLabelRight,D2(e.labelStyle)),h=t.insert("g").attr("class","edgeTerminals"),f=h.insert("g").attr("class","inner");l=h.node().appendChild(u),f.node().appendChild(u);let d=u.getBBox();f.attr("transform","translate("+-d.width/2+", "+-d.height/2+")"),pa.get(e.id)||pa.set(e.id,{}),pa.get(e.id).startRight=h,eT(l,e.startLabelRight)}if(e.endLabelLeft){let u=await vc(e.endLabelLeft,D2(e.labelStyle)),h=t.insert("g").attr("class","edgeTerminals"),f=h.insert("g").attr("class","inner");l=f.node().appendChild(u);let d=u.getBBox();f.attr("transform","translate("+-d.width/2+", "+-d.height/2+")"),h.node().appendChild(u),pa.get(e.id)||pa.set(e.id,{}),pa.get(e.id).endLeft=h,eT(l,e.endLabelLeft)}if(e.endLabelRight){let u=await vc(e.endLabelRight,D2(e.labelStyle)),h=t.insert("g").attr("class","edgeTerminals"),f=h.insert("g").attr("class","inner");l=f.node().appendChild(u);let d=u.getBBox();f.attr("transform","translate("+-d.width/2+", "+-d.height/2+")"),h.node().appendChild(u),pa.get(e.id)||pa.set(e.id,{}),pa.get(e.id).endRight=h,eT(l,e.endLabelRight)}return n},"insertEdgeLabel");o(eT,"setTerminalWidth");nT=o((t,e)=>{X.debug("Moving label abc88 ",t.id,t.label,tT.get(t.id),e);let r=e.updatedPath?e.updatedPath:e.originalPath,n=me(),{subGraphTitleTotalMargin:i}=Ou(n);if(t.label){let a=tT.get(t.id),s=t.x,l=t.y;if(r){let u=Gt.calcLabelPosition(r);X.debug("Moving label "+t.label+" from (",s,",",l,") to (",u.x,",",u.y,") abc88"),e.updatedPath&&(s=u.x,l=u.y)}a.attr("transform",`translate(${s}, ${l+i/2})`)}if(t.startLabelLeft){let a=pa.get(t.id).startLeft,s=t.x,l=t.y;if(r){let u=Gt.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.startLabelRight){let a=pa.get(t.id).startRight,s=t.x,l=t.y;if(r){let u=Gt.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelLeft){let a=pa.get(t.id).endLeft,s=t.x,l=t.y;if(r){let u=Gt.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelRight){let a=pa.get(t.id).endRight,s=t.x,l=t.y;if(r){let u=Gt.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}},"positionEdgeLabel"),D_e=o((t,e)=>{let r=t.x,n=t.y,i=Math.abs(e.x-r),a=Math.abs(e.y-n),s=t.width/2,l=t.height/2;return i>=s||a>=l},"outsideNode"),L_e=o((t,e,r)=>{X.debug(`intersection calc abc89: +You have to call mermaid.initialize.`)}isLinkData(e){return e!==null&&typeof e=="object"&&"id"in e&&typeof e.id=="string"}addLink(e,r,n){let i=this.isLinkData(n)?n.id.replace("@",""):void 0;X.info("addLink",e,r,i);for(let a of e)for(let s of r){let l=a===e[e.length-1],u=s===r[0];l&&u?this.addSingleLink(a,s,n,i):this.addSingleLink(a,s,n,void 0)}}updateLinkInterpolate(e,r){e.forEach(n=>{n==="default"?this.edges.defaultInterpolate=r:this.edges[n].interpolate=r})}updateLink(e,r){e.forEach(n=>{if(typeof n=="number"&&n>=this.edges.length)throw new Error(`The index ${n} for linkStyle is out of bounds. Valid indices for linkStyle are between 0 and ${this.edges.length-1}. (Help: Ensure that the index is within the range of existing edges.)`);n==="default"?this.edges.defaultStyle=r:(this.edges[n].style=r,(this.edges[n]?.style?.length??0)>0&&!this.edges[n]?.style?.some(i=>i?.startsWith("fill"))&&this.edges[n]?.style?.push("fill:none"))})}addClass(e,r){let n=r.join().replace(/\\,/g,"\xA7\xA7\xA7").replace(/,/g,";").replace(/ยงยงยง/g,",").split(";");e.split(",").forEach(i=>{let a=this.classes.get(i);a===void 0&&(a={id:i,styles:[],textStyles:[]},this.classes.set(i,a)),n?.forEach(s=>{if(/color/.exec(s)){let l=s.replace("fill","bgFill");a.textStyles.push(l)}a.styles.push(s)})})}setDirection(e){this.direction=e,/.*/.exec(this.direction)&&(this.direction="LR"),/.*v/.exec(this.direction)&&(this.direction="TB"),this.direction==="TD"&&(this.direction="TB")}setClass(e,r){for(let n of e.split(",")){let i=this.vertices.get(n);i&&i.classes.push(r);let a=this.edges.find(l=>l.id===n);a&&a.classes.push(r);let s=this.subGraphLookup.get(n);s&&s.classes.push(r)}}setTooltip(e,r){if(r!==void 0){r=this.sanitizeText(r);for(let n of e.split(","))this.tooltips.set(this.version==="gen-1"?this.lookUpDomId(n):n,r)}}setClickFun(e,r,n){let i=this.lookUpDomId(e);if(me().securityLevel!=="loose"||r===void 0)return;let a=[];if(typeof n=="string"){a=n.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let l=0;l{let l=document.querySelector(`[id="${i}"]`);l!==null&&l.addEventListener("click",()=>{Vt.runFunc(r,...a)},!1)}))}setLink(e,r,n){e.split(",").forEach(i=>{let a=this.vertices.get(i);a!==void 0&&(a.link=Vt.formatUrl(r,this.config),a.linkTarget=n)}),this.setClass(e,"clickable")}getTooltip(e){return this.tooltips.get(e)}setClickEvent(e,r,n){e.split(",").forEach(i=>{this.setClickFun(i,r,n)}),this.setClass(e,"clickable")}bindFunctions(e){this.funs.forEach(r=>{r(e)})}getDirection(){return this.direction?.trim()}getVertices(){return this.vertices}getEdges(){return this.edges}getClasses(){return this.classes}setupToolTips(e){let r=Ge(".mermaidTooltip");(r._groups||r)[0][0]===null&&(r=Ge("body").append("div").attr("class","mermaidTooltip").style("opacity",0)),Ge(e).select("svg").selectAll("g.node").on("mouseover",a=>{let s=Ge(a.currentTarget);if(s.attr("title")===null)return;let u=a.currentTarget?.getBoundingClientRect();r.transition().duration(200).style("opacity",".9"),r.text(s.attr("title")).style("left",window.scrollX+u.left+(u.right-u.left)/2+"px").style("top",window.scrollY+u.bottom+"px"),r.html(r.html().replace(/<br\/>/g,"
    ")),s.classed("hover",!0)}).on("mouseout",a=>{r.transition().duration(500).style("opacity",0),Ge(a.currentTarget).classed("hover",!1)})}clear(e="gen-2"){this.vertices=new Map,this.classes=new Map,this.edges=[],this.funs=[this.setupToolTips.bind(this)],this.subGraphs=[],this.subGraphLookup=new Map,this.subCount=0,this.tooltips=new Map,this.firstGraphFlag=!0,this.version=e,this.config=me(),kr()}setGen(e){this.version=e||"gen-2"}defaultStyle(){return"fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"}addSubGraph(e,r,n){let i=e.text.trim(),a=n.text;e===n&&/\s/.exec(n.text)&&(i=void 0);let l=o(p=>{let m={boolean:{},number:{},string:{}},g=[],y;return{nodeList:p.filter(function(x){let b=typeof x;return x.stmt&&x.stmt==="dir"?(y=x.value,!1):x.trim()===""?!1:b in m?m[b].hasOwnProperty(x)?!1:m[b][x]=!0:g.includes(x)?!1:g.push(x)}),dir:y}},"uniq")(r.flat()),u=l.nodeList,h=l.dir,f=me().flowchart??{};if(h=h??(f.inheritDir?this.getDirection()??me().direction??void 0:void 0),this.version==="gen-1")for(let p=0;p2e3)return{result:!1,count:0};if(this.posCrossRef[this.secCount]=r,this.subGraphs[r].id===e)return{result:!0,count:0};let i=0,a=1;for(;i=0){let l=this.indexNodes2(e,s);if(l.result)return{result:!0,count:a+l.count};a=a+l.count}i=i+1}return{result:!1,count:a}}getDepthFirstPos(e){return this.posCrossRef[e]}indexNodes(){this.secCount=-1,this.subGraphs.length>0&&this.indexNodes2("none",this.subGraphs.length-1)}getSubGraphs(){return this.subGraphs}firstGraph(){return this.firstGraphFlag?(this.firstGraphFlag=!1,!0):!1}destructStartLink(e){let r=e.trim(),n="arrow_open";switch(r[0]){case"<":n="arrow_point",r=r.slice(1);break;case"x":n="arrow_cross",r=r.slice(1);break;case"o":n="arrow_circle",r=r.slice(1);break}let i="normal";return r.includes("=")&&(i="thick"),r.includes(".")&&(i="dotted"),{type:n,stroke:i}}countChar(e,r){let n=r.length,i=0;for(let a=0;a":i="arrow_point",r.startsWith("<")&&(i="double_"+i,n=n.slice(1));break;case"o":i="arrow_circle",r.startsWith("o")&&(i="double_"+i,n=n.slice(1));break}let a="normal",s=n.length-1;n.startsWith("=")&&(a="thick"),n.startsWith("~")&&(a="invisible");let l=this.countChar(".",n);return l&&(a="dotted",s=l),{type:i,stroke:a,length:s}}destructLink(e,r){let n=this.destructEndLink(e),i;if(r){if(i=this.destructStartLink(r),i.stroke!==n.stroke)return{type:"INVALID",stroke:"INVALID"};if(i.type==="arrow_open")i.type=n.type;else{if(i.type!==n.type)return{type:"INVALID",stroke:"INVALID"};i.type="double_"+i.type}return i.type==="double_arrow"&&(i.type="double_arrow_point"),i.length=n.length,i}return n}exists(e,r){for(let n of e)if(n.nodes.includes(r))return!0;return!1}makeUniq(e,r){let n=[];return e.nodes.forEach((i,a)=>{this.exists(r,i)||n.push(e.nodes[a])}),{nodes:n}}getTypeFromVertex(e){if(e.img)return"imageSquare";if(e.icon)return e.form==="circle"?"iconCircle":e.form==="square"?"iconSquare":e.form==="rounded"?"iconRounded":"icon";switch(e.type){case"square":case void 0:return"squareRect";case"round":return"roundedRect";case"ellipse":return"ellipse";default:return e.type}}findNode(e,r){return e.find(n=>n.id===r)}destructEdgeType(e){let r="none",n="arrow_point";switch(e){case"arrow_point":case"arrow_circle":case"arrow_cross":n=e;break;case"double_arrow_point":case"double_arrow_circle":case"double_arrow_cross":r=e.replace("double_",""),n=r;break}return{arrowTypeStart:r,arrowTypeEnd:n}}addNodeFromVertex(e,r,n,i,a,s){let l=n.get(e.id),u=i.get(e.id)??!1,h=this.findNode(r,e.id);if(h)h.cssStyles=e.styles,h.cssCompiledStyles=this.getCompiledStyles(e.classes),h.cssClasses=e.classes.join(" ");else{let f={id:e.id,label:e.text,labelStyle:"",parentId:l,padding:a.flowchart?.padding||8,cssStyles:e.styles,cssCompiledStyles:this.getCompiledStyles(["default","node",...e.classes]),cssClasses:"default "+e.classes.join(" "),dir:e.dir,domId:e.domId,look:s,link:e.link,linkTarget:e.linkTarget,tooltip:this.getTooltip(e.id),icon:e.icon,pos:e.pos,img:e.img,assetWidth:e.assetWidth,assetHeight:e.assetHeight,constraint:e.constraint};u?r.push({...f,isGroup:!0,shape:"rect"}):r.push({...f,isGroup:!1,shape:this.getTypeFromVertex(e)})}}getCompiledStyles(e){let r=[];for(let n of e){let i=this.classes.get(n);i?.styles&&(r=[...r,...i.styles??[]].map(a=>a.trim())),i?.textStyles&&(r=[...r,...i.textStyles??[]].map(a=>a.trim()))}return r}getData(){let e=me(),r=[],n=[],i=this.getSubGraphs(),a=new Map,s=new Map;for(let h=i.length-1;h>=0;h--){let f=i[h];f.nodes.length>0&&s.set(f.id,!0);for(let d of f.nodes)a.set(d,f.id)}for(let h=i.length-1;h>=0;h--){let f=i[h];r.push({id:f.id,label:f.title,labelStyle:"",parentId:a.get(f.id),padding:8,cssCompiledStyles:this.getCompiledStyles(f.classes),cssClasses:f.classes.join(" "),shape:"rect",dir:f.dir,isGroup:!0,look:e.look})}this.getVertices().forEach(h=>{this.addNodeFromVertex(h,r,a,s,e,e.look||"classic")});let u=this.getEdges();return u.forEach((h,f)=>{let{arrowTypeStart:d,arrowTypeEnd:p}=this.destructEdgeType(h.type),m=[...u.defaultStyle??[]];h.style&&m.push(...h.style);let g={id:Wh(h.start,h.end,{counter:f,prefix:"L"},h.id),isUserDefinedId:h.isUserDefinedId,start:h.start,end:h.end,type:h.type??"normal",label:h.text,labelpos:"c",thickness:h.stroke,minlen:h.length,classes:h?.stroke==="invisible"?"":"edge-thickness-normal edge-pattern-solid flowchart-link",arrowTypeStart:h?.stroke==="invisible"||h?.type==="arrow_open"?"none":d,arrowTypeEnd:h?.stroke==="invisible"||h?.type==="arrow_open"?"none":p,arrowheadStyle:"fill: #333",cssCompiledStyles:this.getCompiledStyles(h.classes),labelStyle:m,style:m,pattern:h.stroke,look:e.look,animate:h.animate,animation:h.animation,curve:h.interpolate||this.edges.defaultInterpolate||e.flowchart?.curve};n.push(g)}),{nodes:r,edges:n,other:{},config:e}}defaultConfig(){return $3.flowchart}}});var wc,Sm=N(()=>{"use strict";fr();wc=o((t,e)=>{let r;return e==="sandbox"&&(r=Ge("#i"+t)),(e==="sandbox"?Ge(r.nodes()[0].contentDocument.body):Ge("body")).select(`[id="${t}"]`)},"getDiagramElement")});var Bu,R2=N(()=>{"use strict";Bu=o(({flowchart:t})=>{let e=t?.subGraphTitleMargin?.top??0,r=t?.subGraphTitleMargin?.bottom??0,n=e+r;return{subGraphTitleTopMargin:e,subGraphTitleBottomMargin:r,subGraphTitleTotalMargin:n}},"getSubGraphTitleMargins")});var cee,e9e,t9e,r9e,n9e,i9e,a9e,uee,Cm,hee,aw=N(()=>{"use strict";Gt();pr();yt();R2();fr();Wt();ao();mL();rw();Zh();zt();cee=o(async(t,e)=>{X.info("Creating subgraph rect for ",e.id,e);let r=me(),{themeVariables:n,handDrawnSeed:i}=r,{clusterBkg:a,clusterBorder:s}=n,{labelStyles:l,nodeStyles:u,borderStyles:h,backgroundStyles:f}=Ye(e),d=t.insert("g").attr("class","cluster "+e.cssClasses).attr("id",e.id).attr("data-look",e.look),p=dr(r.flowchart.htmlLabels),m=d.insert("g").attr("class","cluster-label "),g=await qn(m,e.label,{style:e.labelStyle,useHtmlLabels:p,isNode:!0}),y=g.getBBox();if(dr(r.flowchart.htmlLabels)){let _=g.children[0],C=Ge(g);y=_.getBoundingClientRect(),C.attr("width",y.width),C.attr("height",y.height)}let v=e.width<=y.width+e.padding?y.width+e.padding:e.width;e.width<=y.width+e.padding?e.diff=(v-e.width)/2-e.padding:e.diff=-e.padding;let x=e.height,b=e.x-v/2,T=e.y-x/2;X.trace("Data ",e,JSON.stringify(e));let S;if(e.look==="handDrawn"){let _=je.svg(d),C=Qe(e,{roughness:.7,fill:a,stroke:s,fillWeight:3,seed:i}),D=_.path(Oa(b,T,v,x,0),C);S=d.insert(()=>(X.debug("Rough node insert CXC",D),D),":first-child"),S.select("path:nth-child(2)").attr("style",h.join(";")),S.select("path").attr("style",f.join(";").replace("fill","stroke"))}else S=d.insert("rect",":first-child"),S.attr("style",u).attr("rx",e.rx).attr("ry",e.ry).attr("x",b).attr("y",T).attr("width",v).attr("height",x);let{subGraphTitleTopMargin:w}=Bu(r);if(m.attr("transform",`translate(${e.x-y.width/2}, ${e.y-e.height/2+w})`),l){let _=m.select("span");_&&_.attr("style",l)}let E=S.node().getBBox();return e.offsetX=0,e.width=E.width,e.height=E.height,e.offsetY=y.height-e.padding/2,e.intersect=function(_){return Xh(e,_)},{cluster:d,labelBBox:y}},"rect"),e9e=o((t,e)=>{let r=t.insert("g").attr("class","note-cluster").attr("id",e.id),n=r.insert("rect",":first-child"),i=0*e.padding,a=i/2;n.attr("rx",e.rx).attr("ry",e.ry).attr("x",e.x-e.width/2-a).attr("y",e.y-e.height/2-a).attr("width",e.width+i).attr("height",e.height+i).attr("fill","none");let s=n.node().getBBox();return e.width=s.width,e.height=s.height,e.intersect=function(l){return Xh(e,l)},{cluster:r,labelBBox:{width:0,height:0}}},"noteGroup"),t9e=o(async(t,e)=>{let r=me(),{themeVariables:n,handDrawnSeed:i}=r,{altBackground:a,compositeBackground:s,compositeTitleBackground:l,nodeBorder:u}=n,h=t.insert("g").attr("class",e.cssClasses).attr("id",e.id).attr("data-id",e.id).attr("data-look",e.look),f=h.insert("g",":first-child"),d=h.insert("g").attr("class","cluster-label"),p=h.append("rect"),m=d.node().appendChild(await Tc(e.label,e.labelStyle,void 0,!0)),g=m.getBBox();if(dr(r.flowchart.htmlLabels)){let D=m.children[0],O=Ge(m);g=D.getBoundingClientRect(),O.attr("width",g.width),O.attr("height",g.height)}let y=0*e.padding,v=y/2,x=(e.width<=g.width+e.padding?g.width+e.padding:e.width)+y;e.width<=g.width+e.padding?e.diff=(x-e.width)/2-e.padding:e.diff=-e.padding;let b=e.height+y,T=e.height+y-g.height-6,S=e.x-x/2,w=e.y-b/2;e.width=x;let E=e.y-e.height/2-v+g.height+2,_;if(e.look==="handDrawn"){let D=e.cssClasses.includes("statediagram-cluster-alt"),O=je.svg(h),R=e.rx||e.ry?O.path(Oa(S,w,x,b,10),{roughness:.7,fill:l,fillStyle:"solid",stroke:u,seed:i}):O.rectangle(S,w,x,b,{seed:i});_=h.insert(()=>R,":first-child");let k=O.rectangle(S,E,x,T,{fill:D?a:s,fillStyle:D?"hachure":"solid",stroke:u,seed:i});_=h.insert(()=>R,":first-child"),p=h.insert(()=>k)}else _=f.insert("rect",":first-child"),_.attr("class","outer").attr("x",S).attr("y",w).attr("width",x).attr("height",b).attr("data-look",e.look),p.attr("class","inner").attr("x",S).attr("y",E).attr("width",x).attr("height",T);d.attr("transform",`translate(${e.x-g.width/2}, ${w+1-(dr(r.flowchart.htmlLabels)?0:3)})`);let C=_.node().getBBox();return e.height=C.height,e.offsetX=0,e.offsetY=g.height-e.padding/2,e.labelBBox=g,e.intersect=function(D){return Xh(e,D)},{cluster:h,labelBBox:g}},"roundedWithTitle"),r9e=o(async(t,e)=>{X.info("Creating subgraph rect for ",e.id,e);let r=me(),{themeVariables:n,handDrawnSeed:i}=r,{clusterBkg:a,clusterBorder:s}=n,{labelStyles:l,nodeStyles:u,borderStyles:h,backgroundStyles:f}=Ye(e),d=t.insert("g").attr("class","cluster "+e.cssClasses).attr("id",e.id).attr("data-look",e.look),p=dr(r.flowchart.htmlLabels),m=d.insert("g").attr("class","cluster-label "),g=await qn(m,e.label,{style:e.labelStyle,useHtmlLabels:p,isNode:!0,width:e.width}),y=g.getBBox();if(dr(r.flowchart.htmlLabels)){let _=g.children[0],C=Ge(g);y=_.getBoundingClientRect(),C.attr("width",y.width),C.attr("height",y.height)}let v=e.width<=y.width+e.padding?y.width+e.padding:e.width;e.width<=y.width+e.padding?e.diff=(v-e.width)/2-e.padding:e.diff=-e.padding;let x=e.height,b=e.x-v/2,T=e.y-x/2;X.trace("Data ",e,JSON.stringify(e));let S;if(e.look==="handDrawn"){let _=je.svg(d),C=Qe(e,{roughness:.7,fill:a,stroke:s,fillWeight:4,seed:i}),D=_.path(Oa(b,T,v,x,e.rx),C);S=d.insert(()=>(X.debug("Rough node insert CXC",D),D),":first-child"),S.select("path:nth-child(2)").attr("style",h.join(";")),S.select("path").attr("style",f.join(";").replace("fill","stroke"))}else S=d.insert("rect",":first-child"),S.attr("style",u).attr("rx",e.rx).attr("ry",e.ry).attr("x",b).attr("y",T).attr("width",v).attr("height",x);let{subGraphTitleTopMargin:w}=Bu(r);if(m.attr("transform",`translate(${e.x-y.width/2}, ${e.y-e.height/2+w})`),l){let _=m.select("span");_&&_.attr("style",l)}let E=S.node().getBBox();return e.offsetX=0,e.width=E.width,e.height=E.height,e.offsetY=y.height-e.padding/2,e.intersect=function(_){return Xh(e,_)},{cluster:d,labelBBox:y}},"kanbanSection"),n9e=o((t,e)=>{let r=me(),{themeVariables:n,handDrawnSeed:i}=r,{nodeBorder:a}=n,s=t.insert("g").attr("class",e.cssClasses).attr("id",e.id).attr("data-look",e.look),l=s.insert("g",":first-child"),u=0*e.padding,h=e.width+u;e.diff=-e.padding;let f=e.height+u,d=e.x-h/2,p=e.y-f/2;e.width=h;let m;if(e.look==="handDrawn"){let v=je.svg(s).rectangle(d,p,h,f,{fill:"lightgrey",roughness:.5,strokeLineDash:[5],stroke:a,seed:i});m=s.insert(()=>v,":first-child")}else m=l.insert("rect",":first-child"),m.attr("class","divider").attr("x",d).attr("y",p).attr("width",h).attr("height",f).attr("data-look",e.look);let g=m.node().getBBox();return e.height=g.height,e.offsetX=0,e.offsetY=0,e.intersect=function(y){return Xh(e,y)},{cluster:s,labelBBox:{}}},"divider"),i9e=cee,a9e={rect:cee,squareRect:i9e,roundedWithTitle:t9e,noteGroup:e9e,divider:n9e,kanbanSection:r9e},uee=new Map,Cm=o(async(t,e)=>{let r=e.shape||"rect",n=await a9e[r](t,e);return uee.set(e.id,n),n},"insertCluster"),hee=o(()=>{uee=new Map},"clear")});function sw(t,e){if(t===void 0||e===void 0)return{angle:0,deltaX:0,deltaY:0};t=Yn(t),e=Yn(e);let[r,n]=[t.x,t.y],[i,a]=[e.x,e.y],s=i-r,l=a-n;return{angle:Math.atan(l/s),deltaX:s,deltaY:l}}var Vo,Yn,ow,PL=N(()=>{"use strict";Vo={aggregation:18,extension:18,composition:18,dependency:6,lollipop:13.5,arrow_point:4};o(sw,"calculateDeltaAndAngle");Yn=o(t=>Array.isArray(t)?{x:t[0],y:t[1]}:t,"pointTransformer"),ow=o(t=>({x:o(function(e,r,n){let i=0,a=Yn(n[0]).x=0?1:-1)}else if(r===n.length-1&&Object.hasOwn(Vo,t.arrowTypeEnd)){let{angle:m,deltaX:g}=sw(n[n.length-1],n[n.length-2]);i=Vo[t.arrowTypeEnd]*Math.cos(m)*(g>=0?1:-1)}let s=Math.abs(Yn(e).x-Yn(n[n.length-1]).x),l=Math.abs(Yn(e).y-Yn(n[n.length-1]).y),u=Math.abs(Yn(e).x-Yn(n[0]).x),h=Math.abs(Yn(e).y-Yn(n[0]).y),f=Vo[t.arrowTypeStart],d=Vo[t.arrowTypeEnd],p=1;if(s0&&l0&&h=0?1:-1)}else if(r===n.length-1&&Object.hasOwn(Vo,t.arrowTypeEnd)){let{angle:m,deltaY:g}=sw(n[n.length-1],n[n.length-2]);i=Vo[t.arrowTypeEnd]*Math.abs(Math.sin(m))*(g>=0?1:-1)}let s=Math.abs(Yn(e).y-Yn(n[n.length-1]).y),l=Math.abs(Yn(e).x-Yn(n[n.length-1]).x),u=Math.abs(Yn(e).y-Yn(n[0]).y),h=Math.abs(Yn(e).x-Yn(n[0]).x),f=Vo[t.arrowTypeStart],d=Vo[t.arrowTypeEnd],p=1;if(s0&&l0&&h{"use strict";yt();dee=o((t,e,r,n,i,a)=>{e.arrowTypeStart&&fee(t,"start",e.arrowTypeStart,r,n,i,a),e.arrowTypeEnd&&fee(t,"end",e.arrowTypeEnd,r,n,i,a)},"addEdgeMarkers"),s9e={arrow_cross:{type:"cross",fill:!1},arrow_point:{type:"point",fill:!0},arrow_barb:{type:"barb",fill:!0},arrow_circle:{type:"circle",fill:!1},aggregation:{type:"aggregation",fill:!1},extension:{type:"extension",fill:!1},composition:{type:"composition",fill:!0},dependency:{type:"dependency",fill:!0},lollipop:{type:"lollipop",fill:!1},only_one:{type:"onlyOne",fill:!1},zero_or_one:{type:"zeroOrOne",fill:!1},one_or_more:{type:"oneOrMore",fill:!1},zero_or_more:{type:"zeroOrMore",fill:!1},requirement_arrow:{type:"requirement_arrow",fill:!1},requirement_contains:{type:"requirement_contains",fill:!1}},fee=o((t,e,r,n,i,a,s)=>{let l=s9e[r];if(!l){X.warn(`Unknown arrow type: ${r}`);return}let u=l.type,f=`${i}_${a}-${u}${e==="start"?"Start":"End"}`;if(s&&s.trim()!==""){let d=s.replace(/[^\dA-Za-z]/g,"_"),p=`${f}_${d}`;if(!document.getElementById(p)){let m=document.getElementById(f);if(m){let g=m.cloneNode(!0);g.id=p,g.querySelectorAll("path, circle, line").forEach(v=>{v.setAttribute("stroke",s),l.fill&&v.setAttribute("fill",s)}),m.parentNode?.appendChild(g)}}t.attr(`marker-${e}`,`url(${n}#${p})`)}else t.attr(`marker-${e}`,`url(${n}#${f})`)},"addEdgeMarker")});function lw(t,e){me().flowchart.htmlLabels&&t&&(t.style.width=e.length*9+"px",t.style.height="12px")}function c9e(t){let e=[],r=[];for(let n=1;n5&&Math.abs(a.y-i.y)>5||i.y===a.y&&a.x===s.x&&Math.abs(a.x-i.x)>5&&Math.abs(a.y-s.y)>5)&&(e.push(a),r.push(n))}return{cornerPoints:e,cornerPointPositions:r}}var cw,da,yee,N2,uw,hw,o9e,l9e,mee,gee,u9e,fw,BL=N(()=>{"use strict";Gt();pr();yt();ao();er();PL();R2();fr();Wt();rw();pee();zt();cw=new Map,da=new Map,yee=o(()=>{cw.clear(),da.clear()},"clear"),N2=o(t=>t?t.reduce((r,n)=>r+";"+n,""):"","getLabelStyles"),uw=o(async(t,e)=>{let r=dr(me().flowchart.htmlLabels),n=await qn(t,e.label,{style:N2(e.labelStyle),useHtmlLabels:r,addSvgBackground:!0,isNode:!1});X.info("abc82",e,e.labelType);let i=t.insert("g").attr("class","edgeLabel"),a=i.insert("g").attr("class","label");a.node().appendChild(n);let s=n.getBBox();if(r){let u=n.children[0],h=Ge(n);s=u.getBoundingClientRect(),h.attr("width",s.width),h.attr("height",s.height)}a.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"),cw.set(e.id,i),e.width=s.width,e.height=s.height;let l;if(e.startLabelLeft){let u=await Tc(e.startLabelLeft,N2(e.labelStyle)),h=t.insert("g").attr("class","edgeTerminals"),f=h.insert("g").attr("class","inner");l=f.node().appendChild(u);let d=u.getBBox();f.attr("transform","translate("+-d.width/2+", "+-d.height/2+")"),da.get(e.id)||da.set(e.id,{}),da.get(e.id).startLeft=h,lw(l,e.startLabelLeft)}if(e.startLabelRight){let u=await Tc(e.startLabelRight,N2(e.labelStyle)),h=t.insert("g").attr("class","edgeTerminals"),f=h.insert("g").attr("class","inner");l=h.node().appendChild(u),f.node().appendChild(u);let d=u.getBBox();f.attr("transform","translate("+-d.width/2+", "+-d.height/2+")"),da.get(e.id)||da.set(e.id,{}),da.get(e.id).startRight=h,lw(l,e.startLabelRight)}if(e.endLabelLeft){let u=await Tc(e.endLabelLeft,N2(e.labelStyle)),h=t.insert("g").attr("class","edgeTerminals"),f=h.insert("g").attr("class","inner");l=f.node().appendChild(u);let d=u.getBBox();f.attr("transform","translate("+-d.width/2+", "+-d.height/2+")"),h.node().appendChild(u),da.get(e.id)||da.set(e.id,{}),da.get(e.id).endLeft=h,lw(l,e.endLabelLeft)}if(e.endLabelRight){let u=await Tc(e.endLabelRight,N2(e.labelStyle)),h=t.insert("g").attr("class","edgeTerminals"),f=h.insert("g").attr("class","inner");l=f.node().appendChild(u);let d=u.getBBox();f.attr("transform","translate("+-d.width/2+", "+-d.height/2+")"),h.node().appendChild(u),da.get(e.id)||da.set(e.id,{}),da.get(e.id).endRight=h,lw(l,e.endLabelRight)}return n},"insertEdgeLabel");o(lw,"setTerminalWidth");hw=o((t,e)=>{X.debug("Moving label abc88 ",t.id,t.label,cw.get(t.id),e);let r=e.updatedPath?e.updatedPath:e.originalPath,n=me(),{subGraphTitleTotalMargin:i}=Bu(n);if(t.label){let a=cw.get(t.id),s=t.x,l=t.y;if(r){let u=Vt.calcLabelPosition(r);X.debug("Moving label "+t.label+" from (",s,",",l,") to (",u.x,",",u.y,") abc88"),e.updatedPath&&(s=u.x,l=u.y)}a.attr("transform",`translate(${s}, ${l+i/2})`)}if(t.startLabelLeft){let a=da.get(t.id).startLeft,s=t.x,l=t.y;if(r){let u=Vt.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.startLabelRight){let a=da.get(t.id).startRight,s=t.x,l=t.y;if(r){let u=Vt.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelLeft){let a=da.get(t.id).endLeft,s=t.x,l=t.y;if(r){let u=Vt.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelRight){let a=da.get(t.id).endRight,s=t.x,l=t.y;if(r){let u=Vt.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}},"positionEdgeLabel"),o9e=o((t,e)=>{let r=t.x,n=t.y,i=Math.abs(e.x-r),a=Math.abs(e.y-n),s=t.width/2,l=t.height/2;return i>=s||a>=l},"outsideNode"),l9e=o((t,e,r)=>{X.debug(`intersection calc abc89: outsidePoint: ${JSON.stringify(e)} insidePoint : ${JSON.stringify(r)} - node : x:${t.x} y:${t.y} w:${t.width} h:${t.height}`);let n=t.x,i=t.y,a=Math.abs(n-r.x),s=t.width/2,l=r.xMath.abs(n-e.x)*u){let d=r.y{X.warn("abc88 cutPathAtIntersect",t,e);let r=[],n=t[0],i=!1;return t.forEach(a=>{if(X.info("abc88 checking point",a,e),!D_e(e,a)&&!i){let s=L_e(e,n,a);X.debug("abc88 inside",a,n,s),X.debug("abc88 intersection",s,e);let l=!1;r.forEach(u=>{l=l||u.x===s.x&&u.y===s.y}),r.some(u=>u.x===s.x&&u.y===s.y)?X.warn("abc88 no intersect",s,r):r.push(s),i=!0}else X.warn("abc88 outside",a,n),n=a,i||r.push(a)}),X.debug("returning points",r),r},"cutPathAtIntersect");o(R_e,"extractCornerPoints");aJ=o(function(t,e,r){let n=e.x-t.x,i=e.y-t.y,a=Math.sqrt(n*n+i*i),s=r/a;return{x:e.x-s*n,y:e.y-s*i}},"findAdjacentPoint"),N_e=o(function(t){let{cornerPointPositions:e}=R_e(t),r=[];for(let n=0;n10&&Math.abs(a.y-i.y)>=10){X.debug("Corner point fixing",Math.abs(a.x-i.x),Math.abs(a.y-i.y));let m=5;s.x===l.x?p={x:h<0?l.x-m+d:l.x+m-d,y:f<0?l.y-d:l.y+d}:p={x:h<0?l.x-d:l.x+d,y:f<0?l.y-m+d:l.y+m-d}}else X.debug("Corner point skipping fixing",Math.abs(a.x-i.x),Math.abs(a.y-i.y));r.push(p,u)}else r.push(t[n]);return r},"fixCorners"),iT=o(function(t,e,r,n,i,a,s){let{handDrawnSeed:l}=me(),u=e.points,h=!1,f=i;var d=a;let p=[];for(let _ in e.cssCompiledStyles)BD(_)||p.push(e.cssCompiledStyles[_]);d.intersect&&f.intersect&&(u=u.slice(1,e.points.length-1),u.unshift(f.intersect(u[0])),X.debug("Last point APA12",e.start,"-->",e.end,u[u.length-1],d,d.intersect(u[u.length-1])),u.push(d.intersect(u[u.length-1]))),e.toCluster&&(X.info("to cluster abc88",r.get(e.toCluster)),u=iJ(e.points,r.get(e.toCluster).node),h=!0),e.fromCluster&&(X.debug("from cluster abc88",r.get(e.fromCluster),JSON.stringify(u,null,2)),u=iJ(u.reverse(),r.get(e.fromCluster).node).reverse(),h=!0);let m=u.filter(_=>!Number.isNaN(_.y));m=N_e(m);let g=Lo;switch(g=Su,e.curve){case"linear":g=Su;break;case"basis":g=Lo;break;case"cardinal":g=Uv;break;case"bumpX":g=Fv;break;case"bumpY":g=$v;break;case"catmullRom":g=qv;break;case"monotoneX":g=Yv;break;case"monotoneY":g=Xv;break;case"natural":g=W0;break;case"step":g=q0;break;case"stepAfter":g=Kv;break;case"stepBefore":g=jv;break;default:g=Lo}let{x:y,y:v}=Jw(e),x=kl().x(y).y(v).curve(g),b;switch(e.thickness){case"normal":b="edge-thickness-normal";break;case"thick":b="edge-thickness-thick";break;case"invisible":b="edge-thickness-invisible";break;default:b="edge-thickness-normal"}switch(e.pattern){case"solid":b+=" edge-pattern-solid";break;case"dotted":b+=" edge-pattern-dotted";break;case"dashed":b+=" edge-pattern-dashed";break;default:b+=" edge-pattern-solid"}let w,C=x(m),T=Array.isArray(e.style)?e.style:e.style?[e.style]:[],E=T.find(_=>_?.startsWith("stroke:"));if(e.look==="handDrawn"){let _=Xe.svg(t);Object.assign([],m);let I=_.path(C,{roughness:.3,seed:l});b+=" transition",w=Ge(I).select("path").attr("id",e.id).attr("class"," "+b+(e.classes?" "+e.classes:"")).attr("style",T?T.reduce((k,D)=>k+";"+D,""):"");let L=w.attr("d");w.attr("d",L),t.node().appendChild(w.node())}else{let _=p.join(";"),I=T?T.reduce((D,R)=>D+R+";",""):"",L="";e.animate&&(L=" edge-animation-fast"),e.animation&&(L=" edge-animation-"+e.animation);let k=_?_+";"+I+";":I;w=t.append("path").attr("d",C).attr("id",e.id).attr("class"," "+b+(e.classes?" "+e.classes:"")+(L??"")).attr("style",k),E=k.match(/stroke:([^;]+)/)?.[1]}let A="";(me().flowchart.arrowMarkerAbsolute||me().state.arrowMarkerAbsolute)&&(A=pu(!0)),X.info("arrowTypeStart",e.arrowTypeStart),X.info("arrowTypeEnd",e.arrowTypeEnd),rJ(w,e,A,s,n,E);let S={};return h&&(S.updatedPath=u),S.originalPath=e.points,S},"insertEdge")});var M_e,I_e,O_e,P_e,B_e,F_e,$_e,z_e,G_e,V_e,U_e,H_e,W_e,q_e,Y_e,X_e,j_e,aT,sL=N(()=>{"use strict";vt();M_e=o((t,e,r,n)=>{e.forEach(i=>{j_e[i](t,r,n)})},"insertMarkers"),I_e=o((t,e,r)=>{X.trace("Making markers for ",r),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionStart").attr("class","marker extension "+e).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"),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionEnd").attr("class","marker extension "+e).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")},"extension"),O_e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionStart").attr("class","marker composition "+e).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"),t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionEnd").attr("class","marker composition "+e).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")},"composition"),P_e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationStart").attr("class","marker aggregation "+e).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"),t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationEnd").attr("class","marker aggregation "+e).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"),B_e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyStart").attr("class","marker dependency "+e).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"),t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyEnd").attr("class","marker dependency "+e).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")},"dependency"),F_e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopStart").attr("class","marker lollipop "+e).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),t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopEnd").attr("class","marker lollipop "+e).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)},"lollipop"),$_e=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-pointEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",8).attr("markerHeight",8).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"),t.append("marker").attr("id",r+"_"+e+"-pointStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",4.5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",8).attr("markerHeight",8).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")},"point"),z_e=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-circleEnd").attr("class","marker "+e).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"),t.append("marker").attr("id",r+"_"+e+"-circleStart").attr("class","marker "+e).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")},"circle"),G_e=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-crossEnd").attr("class","marker cross "+e).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"),t.append("marker").attr("id",r+"_"+e+"-crossStart").attr("class","marker cross "+e).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")},"cross"),V_e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","userSpaceOnUse").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},"barb"),U_e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-onlyOneStart").attr("class","marker onlyOne "+e).attr("refX",0).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("d","M9,0 L9,18 M15,0 L15,18"),t.append("defs").append("marker").attr("id",r+"_"+e+"-onlyOneEnd").attr("class","marker onlyOne "+e).attr("refX",18).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("d","M3,0 L3,18 M9,0 L9,18")},"only_one"),H_e=o((t,e,r)=>{let n=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrOneStart").attr("class","marker zeroOrOne "+e).attr("refX",0).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto");n.append("circle").attr("fill","white").attr("cx",21).attr("cy",9).attr("r",6),n.append("path").attr("d","M9,0 L9,18");let i=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrOneEnd").attr("class","marker zeroOrOne "+e).attr("refX",30).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto");i.append("circle").attr("fill","white").attr("cx",9).attr("cy",9).attr("r",6),i.append("path").attr("d","M21,0 L21,18")},"zero_or_one"),W_e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-oneOrMoreStart").attr("class","marker oneOrMore "+e).attr("refX",18).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("d","M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27"),t.append("defs").append("marker").attr("id",r+"_"+e+"-oneOrMoreEnd").attr("class","marker oneOrMore "+e).attr("refX",27).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("d","M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18")},"one_or_more"),q_e=o((t,e,r)=>{let n=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrMoreStart").attr("class","marker zeroOrMore "+e).attr("refX",18).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto");n.append("circle").attr("fill","white").attr("cx",48).attr("cy",18).attr("r",6),n.append("path").attr("d","M0,18 Q18,0 36,18 Q18,36 0,18");let i=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrMoreEnd").attr("class","marker zeroOrMore "+e).attr("refX",39).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto");i.append("circle").attr("fill","white").attr("cx",9).attr("cy",18).attr("r",6),i.append("path").attr("d","M21,18 Q39,0 57,18 Q39,36 21,18")},"zero_or_more"),Y_e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-requirement_arrowEnd").attr("refX",20).attr("refY",10).attr("markerWidth",20).attr("markerHeight",20).attr("orient","auto").append("path").attr("d",`M0,0 + node : x:${t.x} y:${t.y} w:${t.width} h:${t.height}`);let n=t.x,i=t.y,a=Math.abs(n-r.x),s=t.width/2,l=r.xMath.abs(n-e.x)*u){let d=r.y{X.warn("abc88 cutPathAtIntersect",t,e);let r=[],n=t[0],i=!1;return t.forEach(a=>{if(X.info("abc88 checking point",a,e),!o9e(e,a)&&!i){let s=l9e(e,n,a);X.debug("abc88 inside",a,n,s),X.debug("abc88 intersection",s,e);let l=!1;r.forEach(u=>{l=l||u.x===s.x&&u.y===s.y}),r.some(u=>u.x===s.x&&u.y===s.y)?X.warn("abc88 no intersect",s,r):r.push(s),i=!0}else X.warn("abc88 outside",a,n),n=a,i||r.push(a)}),X.debug("returning points",r),r},"cutPathAtIntersect");o(c9e,"extractCornerPoints");gee=o(function(t,e,r){let n=e.x-t.x,i=e.y-t.y,a=Math.sqrt(n*n+i*i),s=r/a;return{x:e.x-s*n,y:e.y-s*i}},"findAdjacentPoint"),u9e=o(function(t){let{cornerPointPositions:e}=c9e(t),r=[];for(let n=0;n10&&Math.abs(a.y-i.y)>=10){X.debug("Corner point fixing",Math.abs(a.x-i.x),Math.abs(a.y-i.y));let m=5;s.x===l.x?p={x:h<0?l.x-m+d:l.x+m-d,y:f<0?l.y-d:l.y+d}:p={x:h<0?l.x-d:l.x+d,y:f<0?l.y-m+d:l.y+m-d}}else X.debug("Corner point skipping fixing",Math.abs(a.x-i.x),Math.abs(a.y-i.y));r.push(p,u)}else r.push(t[n]);return r},"fixCorners"),fw=o(function(t,e,r,n,i,a,s){let{handDrawnSeed:l}=me(),u=e.points,h=!1,f=i;var d=a;let p=[];for(let D in e.cssCompiledStyles)S2(D)||p.push(e.cssCompiledStyles[D]);d.intersect&&f.intersect&&(u=u.slice(1,e.points.length-1),u.unshift(f.intersect(u[0])),X.debug("Last point APA12",e.start,"-->",e.end,u[u.length-1],d,d.intersect(u[u.length-1])),u.push(d.intersect(u[u.length-1]))),e.toCluster&&(X.info("to cluster abc88",r.get(e.toCluster)),u=mee(e.points,r.get(e.toCluster).node),h=!0),e.fromCluster&&(X.debug("from cluster abc88",r.get(e.fromCluster),JSON.stringify(u,null,2)),u=mee(u.reverse(),r.get(e.fromCluster).node).reverse(),h=!0);let m=u.filter(D=>!Number.isNaN(D.y));m=u9e(m);let g=No;switch(g=Su,e.curve){case"linear":g=Su;break;case"basis":g=No;break;case"cardinal":g=qv;break;case"bumpX":g=Gv;break;case"bumpY":g=Vv;break;case"catmullRom":g=jv;break;case"monotoneX":g=Kv;break;case"monotoneY":g=Qv;break;case"natural":g=K0;break;case"step":g=Q0;break;case"stepAfter":g=Jv;break;case"stepBefore":g=Zv;break;default:g=No}let{x:y,y:v}=ow(e),x=Cl().x(y).y(v).curve(g),b;switch(e.thickness){case"normal":b="edge-thickness-normal";break;case"thick":b="edge-thickness-thick";break;case"invisible":b="edge-thickness-invisible";break;default:b="edge-thickness-normal"}switch(e.pattern){case"solid":b+=" edge-pattern-solid";break;case"dotted":b+=" edge-pattern-dotted";break;case"dashed":b+=" edge-pattern-dashed";break;default:b+=" edge-pattern-solid"}let T,S=x(m),w=Array.isArray(e.style)?e.style:e.style?[e.style]:[],E=w.find(D=>D?.startsWith("stroke:"));if(e.look==="handDrawn"){let D=je.svg(t);Object.assign([],m);let O=D.path(S,{roughness:.3,seed:l});b+=" transition",T=Ge(O).select("path").attr("id",e.id).attr("class"," "+b+(e.classes?" "+e.classes:"")).attr("style",w?w.reduce((k,L)=>k+";"+L,""):"");let R=T.attr("d");T.attr("d",R),t.node().appendChild(T.node())}else{let D=p.join(";"),O=w?w.reduce((L,A)=>L+A+";",""):"",R="";e.animate&&(R=" edge-animation-fast"),e.animation&&(R=" edge-animation-"+e.animation);let k=D?D+";"+O+";":O;T=t.append("path").attr("d",S).attr("id",e.id).attr("class"," "+b+(e.classes?" "+e.classes:"")+(R??"")).attr("style",k),E=k.match(/stroke:([^;]+)/)?.[1]}let _="";(me().flowchart.arrowMarkerAbsolute||me().state.arrowMarkerAbsolute)&&(_=mu(!0)),X.info("arrowTypeStart",e.arrowTypeStart),X.info("arrowTypeEnd",e.arrowTypeEnd),dee(T,e,_,s,n,E);let C={};return h&&(C.updatedPath=u),C.originalPath=e.points,C},"insertEdge")});var h9e,f9e,d9e,p9e,m9e,g9e,y9e,v9e,x9e,b9e,T9e,w9e,k9e,E9e,S9e,C9e,A9e,dw,FL=N(()=>{"use strict";yt();h9e=o((t,e,r,n)=>{e.forEach(i=>{A9e[i](t,r,n)})},"insertMarkers"),f9e=o((t,e,r)=>{X.trace("Making markers for ",r),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionStart").attr("class","marker extension "+e).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"),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionEnd").attr("class","marker extension "+e).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")},"extension"),d9e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionStart").attr("class","marker composition "+e).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"),t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionEnd").attr("class","marker composition "+e).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")},"composition"),p9e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationStart").attr("class","marker aggregation "+e).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"),t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationEnd").attr("class","marker aggregation "+e).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"),m9e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyStart").attr("class","marker dependency "+e).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"),t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyEnd").attr("class","marker dependency "+e).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")},"dependency"),g9e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopStart").attr("class","marker lollipop "+e).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),t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopEnd").attr("class","marker lollipop "+e).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)},"lollipop"),y9e=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-pointEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",8).attr("markerHeight",8).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"),t.append("marker").attr("id",r+"_"+e+"-pointStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",4.5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",8).attr("markerHeight",8).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")},"point"),v9e=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-circleEnd").attr("class","marker "+e).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"),t.append("marker").attr("id",r+"_"+e+"-circleStart").attr("class","marker "+e).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")},"circle"),x9e=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-crossEnd").attr("class","marker cross "+e).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"),t.append("marker").attr("id",r+"_"+e+"-crossStart").attr("class","marker cross "+e).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")},"cross"),b9e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","userSpaceOnUse").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},"barb"),T9e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-onlyOneStart").attr("class","marker onlyOne "+e).attr("refX",0).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("d","M9,0 L9,18 M15,0 L15,18"),t.append("defs").append("marker").attr("id",r+"_"+e+"-onlyOneEnd").attr("class","marker onlyOne "+e).attr("refX",18).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("d","M3,0 L3,18 M9,0 L9,18")},"only_one"),w9e=o((t,e,r)=>{let n=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrOneStart").attr("class","marker zeroOrOne "+e).attr("refX",0).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto");n.append("circle").attr("fill","white").attr("cx",21).attr("cy",9).attr("r",6),n.append("path").attr("d","M9,0 L9,18");let i=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrOneEnd").attr("class","marker zeroOrOne "+e).attr("refX",30).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto");i.append("circle").attr("fill","white").attr("cx",9).attr("cy",9).attr("r",6),i.append("path").attr("d","M21,0 L21,18")},"zero_or_one"),k9e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-oneOrMoreStart").attr("class","marker oneOrMore "+e).attr("refX",18).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("d","M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27"),t.append("defs").append("marker").attr("id",r+"_"+e+"-oneOrMoreEnd").attr("class","marker oneOrMore "+e).attr("refX",27).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("d","M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18")},"one_or_more"),E9e=o((t,e,r)=>{let n=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrMoreStart").attr("class","marker zeroOrMore "+e).attr("refX",18).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto");n.append("circle").attr("fill","white").attr("cx",48).attr("cy",18).attr("r",6),n.append("path").attr("d","M0,18 Q18,0 36,18 Q18,36 0,18");let i=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrMoreEnd").attr("class","marker zeroOrMore "+e).attr("refX",39).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto");i.append("circle").attr("fill","white").attr("cx",9).attr("cy",18).attr("r",6),i.append("path").attr("d","M21,18 Q39,0 57,18 Q39,36 21,18")},"zero_or_more"),S9e=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-requirement_arrowEnd").attr("refX",20).attr("refY",10).attr("markerWidth",20).attr("markerHeight",20).attr("orient","auto").append("path").attr("d",`M0,0 L20,10 M20,10 - L0,20`)},"requirement_arrow"),X_e=o((t,e,r)=>{let n=t.append("defs").append("marker").attr("id",r+"_"+e+"-requirement_containsStart").attr("refX",0).attr("refY",10).attr("markerWidth",20).attr("markerHeight",20).attr("orient","auto").append("g");n.append("circle").attr("cx",10).attr("cy",10).attr("r",9).attr("fill","none"),n.append("line").attr("x1",1).attr("x2",19).attr("y1",10).attr("y2",10),n.append("line").attr("y1",1).attr("y2",19).attr("x1",10).attr("x2",10)},"requirement_contains"),j_e={extension:I_e,composition:O_e,aggregation:P_e,dependency:B_e,lollipop:F_e,point:$_e,circle:z_e,cross:G_e,barb:V_e,only_one:U_e,zero_or_one:H_e,one_or_more:W_e,zero_or_more:q_e,requirement_arrow:Y_e,requirement_contains:X_e},aT=M_e});async function Sm(t,e,r){let n,i;e.shape==="rect"&&(e.rx&&e.ry?e.shape="roundedRect":e.shape="squareRect");let a=e.shape?rL[e.shape]:void 0;if(!a)throw new Error(`No such shape: ${e.shape}. Please check your syntax.`);if(e.link){let s;r.config.securityLevel==="sandbox"?s="_top":e.linkTarget&&(s=e.linkTarget||"_blank"),n=t.insert("svg:a").attr("xlink:href",e.link).attr("target",s??null),i=await a(n,e,r)}else i=await a(t,e,r),n=i;return e.tooltip&&i.attr("title",e.tooltip),sT.set(e.id,n),e.haveCallback&&n.attr("class",n.attr("class")+" clickable"),n}var sT,oJ,lJ,L2,oT=N(()=>{"use strict";vt();nL();sT=new Map;o(Sm,"insertNode");oJ=o((t,e)=>{sT.set(e.id,t)},"setNodeElem"),lJ=o(()=>{sT.clear()},"clear"),L2=o(t=>{let e=sT.get(t.id);X.trace("Transforming node",t.diff,t,"translate("+(t.x-t.width/2-5)+", "+t.width/2+")");let r=8,n=t.diff||0;return t.clusterNode?e.attr("transform","translate("+(t.x+n-t.width/2)+", "+(t.y-t.height/2-r)+")"):e.attr("transform","translate("+t.x+", "+t.y+")"),n},"positionNode")});var cJ,uJ=N(()=>{"use strict";Bi();dr();vt();Qw();aL();sL();oT();Ft();nr();cJ={common:Ze,getConfig:sr,insertCluster:Em,insertEdge:iT,insertEdgeLabel:rT,insertMarkers:aT,insertNode:Sm,interpolateToCurve:K9,labelHelper:pt,log:X,positionEdgeLabel:nT}});function Q_e(t){return typeof t=="symbol"||ri(t)&&da(t)==K_e}var K_e,ao,Ud=N(()=>{"use strict";Au();Mo();K_e="[object Symbol]";o(Q_e,"isSymbol");ao=Q_e});function Z_e(t,e){for(var r=-1,n=t==null?0:t.length,i=Array(n);++r{"use strict";o(Z_e,"arrayMap");Is=Z_e});function dJ(t){if(typeof t=="string")return t;if(Pt(t))return Is(t,dJ)+"";if(ao(t))return fJ?fJ.call(t):"";var e=t+"";return e=="0"&&1/t==-J_e?"-0":e}var J_e,hJ,fJ,pJ,mJ=N(()=>{"use strict";Rd();Hd();Un();Ud();J_e=1/0,hJ=ea?ea.prototype:void 0,fJ=hJ?hJ.toString:void 0;o(dJ,"baseToString");pJ=dJ});function t9e(t){for(var e=t.length;e--&&e9e.test(t.charAt(e)););return e}var e9e,gJ,yJ=N(()=>{"use strict";e9e=/\s/;o(t9e,"trimmedEndIndex");gJ=t9e});function n9e(t){return t&&t.slice(0,gJ(t)+1).replace(r9e,"")}var r9e,vJ,xJ=N(()=>{"use strict";yJ();r9e=/^\s+/;o(n9e,"baseTrim");vJ=n9e});function l9e(t){if(typeof t=="number")return t;if(ao(t))return bJ;if(bn(t)){var e=typeof t.valueOf=="function"?t.valueOf():t;t=bn(e)?e+"":e}if(typeof t!="string")return t===0?t:+t;t=vJ(t);var r=a9e.test(t);return r||s9e.test(t)?o9e(t.slice(2),r?2:8):i9e.test(t)?bJ:+t}var bJ,i9e,a9e,s9e,o9e,wJ,TJ=N(()=>{"use strict";xJ();to();Ud();bJ=NaN,i9e=/^[-+]0x[0-9a-f]+$/i,a9e=/^0b[01]+$/i,s9e=/^0o[0-7]+$/i,o9e=parseInt;o(l9e,"toNumber");wJ=l9e});function u9e(t){if(!t)return t===0?t:0;if(t=wJ(t),t===kJ||t===-kJ){var e=t<0?-1:1;return e*c9e}return t===t?t:0}var kJ,c9e,Cm,oL=N(()=>{"use strict";TJ();kJ=1/0,c9e=17976931348623157e292;o(u9e,"toFinite");Cm=u9e});function h9e(t){var e=Cm(t),r=e%1;return e===e?r?e-r:e:0}var bc,Am=N(()=>{"use strict";oL();o(h9e,"toInteger");bc=h9e});var f9e,lT,EJ=N(()=>{"use strict";Ih();Ro();f9e=As(li,"WeakMap"),lT=f9e});function d9e(){}var ni,lL=N(()=>{"use strict";o(d9e,"noop");ni=d9e});function p9e(t,e){for(var r=-1,n=t==null?0:t.length;++r{"use strict";o(p9e,"arrayEach");cT=p9e});function m9e(t,e,r,n){for(var i=t.length,a=r+(n?1:-1);n?a--:++a{"use strict";o(m9e,"baseFindIndex");uT=m9e});function g9e(t){return t!==t}var SJ,CJ=N(()=>{"use strict";o(g9e,"baseIsNaN");SJ=g9e});function y9e(t,e,r){for(var n=r-1,i=t.length;++n{"use strict";o(y9e,"strictIndexOf");AJ=y9e});function v9e(t,e,r){return e===e?AJ(t,e,r):uT(t,SJ,r)}var _m,hT=N(()=>{"use strict";uL();CJ();_J();o(v9e,"baseIndexOf");_m=v9e});function x9e(t,e){var r=t==null?0:t.length;return!!r&&_m(t,e,0)>-1}var fT,hL=N(()=>{"use strict";hT();o(x9e,"arrayIncludes");fT=x9e});var b9e,DJ,LJ=N(()=>{"use strict";B9();b9e=uw(Object.keys,Object),DJ=b9e});function k9e(t){if(!fc(t))return DJ(t);var e=[];for(var r in Object(t))T9e.call(t,r)&&r!="constructor"&&e.push(r);return e}var w9e,T9e,Dm,dT=N(()=>{"use strict";am();LJ();w9e=Object.prototype,T9e=w9e.hasOwnProperty;o(k9e,"baseKeys");Dm=k9e});function E9e(t){return ci(t)?mw(t):Dm(t)}var zr,wc=N(()=>{"use strict";V9();dT();Io();o(E9e,"keys");zr=E9e});var S9e,C9e,A9e,ma,RJ=N(()=>{"use strict";cm();Pd();q9();Io();am();wc();S9e=Object.prototype,C9e=S9e.hasOwnProperty,A9e=vw(function(t,e){if(fc(e)||ci(e)){Bo(e,zr(e),t);return}for(var r in e)C9e.call(e,r)&&dc(t,r,e[r])}),ma=A9e});function L9e(t,e){if(Pt(t))return!1;var r=typeof t;return r=="number"||r=="symbol"||r=="boolean"||t==null||ao(t)?!0:D9e.test(t)||!_9e.test(t)||e!=null&&t in Object(e)}var _9e,D9e,Lm,pT=N(()=>{"use strict";Un();Ud();_9e=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,D9e=/^\w*$/;o(L9e,"isKey");Lm=L9e});function N9e(t){var e=Q0(t,function(n){return r.size===R9e&&r.clear(),n}),r=e.cache;return e}var R9e,NJ,MJ=N(()=>{"use strict";L9();R9e=500;o(N9e,"memoizeCapped");NJ=N9e});var M9e,I9e,O9e,IJ,OJ=N(()=>{"use strict";MJ();M9e=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,I9e=/\\(\\)?/g,O9e=NJ(function(t){var e=[];return t.charCodeAt(0)===46&&e.push(""),t.replace(M9e,function(r,n,i,a){e.push(i?a.replace(I9e,"$1"):n||r)}),e}),IJ=O9e});function P9e(t){return t==null?"":pJ(t)}var mT,fL=N(()=>{"use strict";mJ();o(P9e,"toString");mT=P9e});function B9e(t,e){return Pt(t)?t:Lm(t,e)?[t]:IJ(mT(t))}var Qh,R2=N(()=>{"use strict";Un();pT();OJ();fL();o(B9e,"castPath");Qh=B9e});function $9e(t){if(typeof t=="string"||ao(t))return t;var e=t+"";return e=="0"&&1/t==-F9e?"-0":e}var F9e,Tc,Rm=N(()=>{"use strict";Ud();F9e=1/0;o($9e,"toKey");Tc=$9e});function z9e(t,e){e=Qh(e,t);for(var r=0,n=e.length;t!=null&&r{"use strict";R2();Rm();o(z9e,"baseGet");Zh=z9e});function G9e(t,e,r){var n=t==null?void 0:Zh(t,e);return n===void 0?r:n}var PJ,BJ=N(()=>{"use strict";N2();o(G9e,"get");PJ=G9e});function V9e(t,e){for(var r=-1,n=e.length,i=t.length;++r{"use strict";o(V9e,"arrayPush");Nm=V9e});function U9e(t){return Pt(t)||Cl(t)||!!(FJ&&t&&t[FJ])}var FJ,$J,zJ=N(()=>{"use strict";Rd();sm();Un();FJ=ea?ea.isConcatSpreadable:void 0;o(U9e,"isFlattenable");$J=U9e});function GJ(t,e,r,n,i){var a=-1,s=t.length;for(r||(r=$J),i||(i=[]);++a0&&r(l)?e>1?GJ(l,e-1,r,n,i):Nm(i,l):n||(i[i.length]=l)}return i}var kc,Mm=N(()=>{"use strict";gT();zJ();o(GJ,"baseFlatten");kc=GJ});function H9e(t){var e=t==null?0:t.length;return e?kc(t,1):[]}var qr,yT=N(()=>{"use strict";Mm();o(H9e,"flatten");qr=H9e});function W9e(t){return yw(gw(t,void 0,qr),t+"")}var VJ,UJ=N(()=>{"use strict";yT();U9();W9();o(W9e,"flatRest");VJ=W9e});function q9e(t,e,r){var n=-1,i=t.length;e<0&&(e=-e>i?0:i+e),r=r>i?i:r,r<0&&(r+=i),i=e>r?0:r-e>>>0,e>>>=0;for(var a=Array(i);++n{"use strict";o(q9e,"baseSlice");vT=q9e});function tDe(t){return eDe.test(t)}var Y9e,X9e,j9e,K9e,Q9e,Z9e,J9e,eDe,HJ,WJ=N(()=>{"use strict";Y9e="\\ud800-\\udfff",X9e="\\u0300-\\u036f",j9e="\\ufe20-\\ufe2f",K9e="\\u20d0-\\u20ff",Q9e=X9e+j9e+K9e,Z9e="\\ufe0e\\ufe0f",J9e="\\u200d",eDe=RegExp("["+J9e+Y9e+Q9e+Z9e+"]");o(tDe,"hasUnicode");HJ=tDe});function rDe(t,e,r,n){var i=-1,a=t==null?0:t.length;for(n&&a&&(r=t[++i]);++i{"use strict";o(rDe,"arrayReduce");qJ=rDe});function nDe(t,e){return t&&Bo(e,zr(e),t)}var XJ,jJ=N(()=>{"use strict";Pd();wc();o(nDe,"baseAssign");XJ=nDe});function iDe(t,e){return t&&Bo(e,_s(e),t)}var KJ,QJ=N(()=>{"use strict";Pd();Gh();o(iDe,"baseAssignIn");KJ=iDe});function aDe(t,e){for(var r=-1,n=t==null?0:t.length,i=0,a=[];++r{"use strict";o(aDe,"arrayFilter");Im=aDe});function sDe(){return[]}var bT,pL=N(()=>{"use strict";o(sDe,"stubArray");bT=sDe});var oDe,lDe,ZJ,cDe,Om,wT=N(()=>{"use strict";xT();pL();oDe=Object.prototype,lDe=oDe.propertyIsEnumerable,ZJ=Object.getOwnPropertySymbols,cDe=ZJ?function(t){return t==null?[]:(t=Object(t),Im(ZJ(t),function(e){return lDe.call(t,e)}))}:bT,Om=cDe});function uDe(t,e){return Bo(t,Om(t),e)}var JJ,eee=N(()=>{"use strict";Pd();wT();o(uDe,"copySymbols");JJ=uDe});var hDe,fDe,TT,mL=N(()=>{"use strict";gT();hw();wT();pL();hDe=Object.getOwnPropertySymbols,fDe=hDe?function(t){for(var e=[];t;)Nm(e,Om(t)),t=im(t);return e}:bT,TT=fDe});function dDe(t,e){return Bo(t,TT(t),e)}var tee,ree=N(()=>{"use strict";Pd();mL();o(dDe,"copySymbolsIn");tee=dDe});function pDe(t,e,r){var n=e(t);return Pt(t)?n:Nm(n,r(t))}var kT,gL=N(()=>{"use strict";gT();Un();o(pDe,"baseGetAllKeys");kT=pDe});function mDe(t){return kT(t,zr,Om)}var M2,yL=N(()=>{"use strict";gL();wT();wc();o(mDe,"getAllKeys");M2=mDe});function gDe(t){return kT(t,_s,TT)}var ET,vL=N(()=>{"use strict";gL();mL();Gh();o(gDe,"getAllKeysIn");ET=gDe});var yDe,ST,nee=N(()=>{"use strict";Ih();Ro();yDe=As(li,"DataView"),ST=yDe});var vDe,CT,iee=N(()=>{"use strict";Ih();Ro();vDe=As(li,"Promise"),CT=vDe});var xDe,Jh,xL=N(()=>{"use strict";Ih();Ro();xDe=As(li,"Set"),Jh=xDe});var aee,bDe,see,oee,lee,cee,wDe,TDe,kDe,EDe,SDe,Wd,so,qd=N(()=>{"use strict";nee();nw();iee();xL();EJ();Au();A9();aee="[object Map]",bDe="[object Object]",see="[object Promise]",oee="[object Set]",lee="[object WeakMap]",cee="[object DataView]",wDe=_u(ST),TDe=_u(Bh),kDe=_u(CT),EDe=_u(Jh),SDe=_u(lT),Wd=da;(ST&&Wd(new ST(new ArrayBuffer(1)))!=cee||Bh&&Wd(new Bh)!=aee||CT&&Wd(CT.resolve())!=see||Jh&&Wd(new Jh)!=oee||lT&&Wd(new lT)!=lee)&&(Wd=o(function(t){var e=da(t),r=e==bDe?t.constructor:void 0,n=r?_u(r):"";if(n)switch(n){case wDe:return cee;case TDe:return aee;case kDe:return see;case EDe:return oee;case SDe:return lee}return e},"getTag"));so=Wd});function _De(t){var e=t.length,r=new t.constructor(e);return e&&typeof t[0]=="string"&&ADe.call(t,"index")&&(r.index=t.index,r.input=t.input),r}var CDe,ADe,uee,hee=N(()=>{"use strict";CDe=Object.prototype,ADe=CDe.hasOwnProperty;o(_De,"initCloneArray");uee=_De});function DDe(t,e){var r=e?nm(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)}var fee,dee=N(()=>{"use strict";ow();o(DDe,"cloneDataView");fee=DDe});function RDe(t){var e=new t.constructor(t.source,LDe.exec(t));return e.lastIndex=t.lastIndex,e}var LDe,pee,mee=N(()=>{"use strict";LDe=/\w*$/;o(RDe,"cloneRegExp");pee=RDe});function NDe(t){return yee?Object(yee.call(t)):{}}var gee,yee,vee,xee=N(()=>{"use strict";Rd();gee=ea?ea.prototype:void 0,yee=gee?gee.valueOf:void 0;o(NDe,"cloneSymbol");vee=NDe});function ZDe(t,e,r){var n=t.constructor;switch(e){case GDe:return nm(t);case MDe:case IDe:return new n(+t);case VDe:return fee(t,r);case UDe:case HDe:case WDe:case qDe:case YDe:case XDe:case jDe:case KDe:case QDe:return lw(t,r);case ODe:return new n;case PDe:case $De:return new n(t);case BDe:return pee(t);case FDe:return new n;case zDe:return vee(t)}}var MDe,IDe,ODe,PDe,BDe,FDe,$De,zDe,GDe,VDe,UDe,HDe,WDe,qDe,YDe,XDe,jDe,KDe,QDe,bee,wee=N(()=>{"use strict";ow();dee();mee();xee();O9();MDe="[object Boolean]",IDe="[object Date]",ODe="[object Map]",PDe="[object Number]",BDe="[object RegExp]",FDe="[object Set]",$De="[object String]",zDe="[object Symbol]",GDe="[object ArrayBuffer]",VDe="[object DataView]",UDe="[object Float32Array]",HDe="[object Float64Array]",WDe="[object Int8Array]",qDe="[object Int16Array]",YDe="[object Int32Array]",XDe="[object Uint8Array]",jDe="[object Uint8ClampedArray]",KDe="[object Uint16Array]",QDe="[object Uint32Array]";o(ZDe,"initCloneByTag");bee=ZDe});function eLe(t){return ri(t)&&so(t)==JDe}var JDe,Tee,kee=N(()=>{"use strict";qd();Mo();JDe="[object Map]";o(eLe,"baseIsMap");Tee=eLe});var Eee,tLe,See,Cee=N(()=>{"use strict";kee();Od();l2();Eee=Po&&Po.isMap,tLe=Eee?Oo(Eee):Tee,See=tLe});function nLe(t){return ri(t)&&so(t)==rLe}var rLe,Aee,_ee=N(()=>{"use strict";qd();Mo();rLe="[object Set]";o(nLe,"baseIsSet");Aee=nLe});var Dee,iLe,Lee,Ree=N(()=>{"use strict";_ee();Od();l2();Dee=Po&&Po.isSet,iLe=Dee?Oo(Dee):Aee,Lee=iLe});function AT(t,e,r,n,i,a){var s,l=e&aLe,u=e&sLe,h=e&oLe;if(r&&(s=i?r(t,n,i,a):r(t)),s!==void 0)return s;if(!bn(t))return t;var f=Pt(t);if(f){if(s=uee(t),!l)return cw(t,s)}else{var d=so(t),p=d==Mee||d==fLe;if(Al(t))return sw(t,l);if(d==Iee||d==Nee||p&&!i){if(s=u||p?{}:fw(t),!l)return u?tee(t,KJ(s,t)):JJ(t,XJ(s,t))}else{if(!_n[d])return i?t:{};s=bee(t,d,l)}}a||(a=new uc);var m=a.get(t);if(m)return m;a.set(t,s),Lee(t)?t.forEach(function(v){s.add(AT(v,e,r,v,t,a))}):See(t)&&t.forEach(function(v,x){s.set(x,AT(v,e,r,x,t,a))});var g=h?u?ET:M2:u?_s:zr,y=f?void 0:g(t);return cT(y||t,function(v,x){y&&(x=v,v=t[x]),dc(s,x,AT(v,e,r,x,t,a))}),s}var aLe,sLe,oLe,Nee,lLe,cLe,uLe,hLe,Mee,fLe,dLe,pLe,Iee,mLe,gLe,yLe,vLe,xLe,bLe,wLe,TLe,kLe,ELe,SLe,CLe,ALe,_Le,DLe,LLe,_n,_T,bL=N(()=>{"use strict";a2();cL();cm();jJ();QJ();M9();P9();eee();ree();yL();vL();qd();hee();wee();F9();Un();lm();Cee();to();Ree();wc();Gh();aLe=1,sLe=2,oLe=4,Nee="[object Arguments]",lLe="[object Array]",cLe="[object Boolean]",uLe="[object Date]",hLe="[object Error]",Mee="[object Function]",fLe="[object GeneratorFunction]",dLe="[object Map]",pLe="[object Number]",Iee="[object Object]",mLe="[object RegExp]",gLe="[object Set]",yLe="[object String]",vLe="[object Symbol]",xLe="[object WeakMap]",bLe="[object ArrayBuffer]",wLe="[object DataView]",TLe="[object Float32Array]",kLe="[object Float64Array]",ELe="[object Int8Array]",SLe="[object Int16Array]",CLe="[object Int32Array]",ALe="[object Uint8Array]",_Le="[object Uint8ClampedArray]",DLe="[object Uint16Array]",LLe="[object Uint32Array]",_n={};_n[Nee]=_n[lLe]=_n[bLe]=_n[wLe]=_n[cLe]=_n[uLe]=_n[TLe]=_n[kLe]=_n[ELe]=_n[SLe]=_n[CLe]=_n[dLe]=_n[pLe]=_n[Iee]=_n[mLe]=_n[gLe]=_n[yLe]=_n[vLe]=_n[ALe]=_n[_Le]=_n[DLe]=_n[LLe]=!0;_n[hLe]=_n[Mee]=_n[xLe]=!1;o(AT,"baseClone");_T=AT});function NLe(t){return _T(t,RLe)}var RLe,an,wL=N(()=>{"use strict";bL();RLe=4;o(NLe,"clone");an=NLe});function OLe(t){return _T(t,MLe|ILe)}var MLe,ILe,TL,Oee=N(()=>{"use strict";bL();MLe=1,ILe=4;o(OLe,"cloneDeep");TL=OLe});function PLe(t){for(var e=-1,r=t==null?0:t.length,n=0,i=[];++e{"use strict";o(PLe,"compact");Ec=PLe});function FLe(t){return this.__data__.set(t,BLe),this}var BLe,Bee,Fee=N(()=>{"use strict";BLe="__lodash_hash_undefined__";o(FLe,"setCacheAdd");Bee=FLe});function $Le(t){return this.__data__.has(t)}var $ee,zee=N(()=>{"use strict";o($Le,"setCacheHas");$ee=$Le});function DT(t){var e=-1,r=t==null?0:t.length;for(this.__data__=new Md;++e{"use strict";iw();Fee();zee();o(DT,"SetCache");DT.prototype.add=DT.prototype.push=Bee;DT.prototype.has=$ee;Pm=DT});function zLe(t,e){for(var r=-1,n=t==null?0:t.length;++r{"use strict";o(zLe,"arraySome");RT=zLe});function GLe(t,e){return t.has(e)}var Bm,NT=N(()=>{"use strict";o(GLe,"cacheHas");Bm=GLe});function HLe(t,e,r,n,i,a){var s=r&VLe,l=t.length,u=e.length;if(l!=u&&!(s&&u>l))return!1;var h=a.get(t),f=a.get(e);if(h&&f)return h==e&&f==t;var d=-1,p=!0,m=r&ULe?new Pm:void 0;for(a.set(t,e),a.set(e,t);++d{"use strict";LT();kL();NT();VLe=1,ULe=2;o(HLe,"equalArrays");MT=HLe});function WLe(t){var e=-1,r=Array(t.size);return t.forEach(function(n,i){r[++e]=[i,n]}),r}var Gee,Vee=N(()=>{"use strict";o(WLe,"mapToArray");Gee=WLe});function qLe(t){var e=-1,r=Array(t.size);return t.forEach(function(n){r[++e]=n}),r}var Fm,IT=N(()=>{"use strict";o(qLe,"setToArray");Fm=qLe});function sRe(t,e,r,n,i,a,s){switch(r){case aRe:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case iRe:return!(t.byteLength!=e.byteLength||!a(new rm(t),new rm(e)));case jLe:case KLe:case JLe:return No(+t,+e);case QLe:return t.name==e.name&&t.message==e.message;case eRe:case rRe:return t==e+"";case ZLe:var l=Gee;case tRe:var u=n&YLe;if(l||(l=Fm),t.size!=e.size&&!u)return!1;var h=s.get(t);if(h)return h==e;n|=XLe,s.set(t,e);var f=MT(l(t),l(e),n,i,a,s);return s.delete(t),f;case nRe:if(SL)return SL.call(t)==SL.call(e)}return!1}var YLe,XLe,jLe,KLe,QLe,ZLe,JLe,eRe,tRe,rRe,nRe,iRe,aRe,Uee,SL,Hee,Wee=N(()=>{"use strict";Rd();I9();Nd();EL();Vee();IT();YLe=1,XLe=2,jLe="[object Boolean]",KLe="[object Date]",QLe="[object Error]",ZLe="[object Map]",JLe="[object Number]",eRe="[object RegExp]",tRe="[object Set]",rRe="[object String]",nRe="[object Symbol]",iRe="[object ArrayBuffer]",aRe="[object DataView]",Uee=ea?ea.prototype:void 0,SL=Uee?Uee.valueOf:void 0;o(sRe,"equalByTag");Hee=sRe});function uRe(t,e,r,n,i,a){var s=r&oRe,l=M2(t),u=l.length,h=M2(e),f=h.length;if(u!=f&&!s)return!1;for(var d=u;d--;){var p=l[d];if(!(s?p in e:cRe.call(e,p)))return!1}var m=a.get(t),g=a.get(e);if(m&&g)return m==e&&g==t;var y=!0;a.set(t,e),a.set(e,t);for(var v=s;++d{"use strict";yL();oRe=1,lRe=Object.prototype,cRe=lRe.hasOwnProperty;o(uRe,"equalObjects");qee=uRe});function dRe(t,e,r,n,i,a){var s=Pt(t),l=Pt(e),u=s?jee:so(t),h=l?jee:so(e);u=u==Xee?OT:u,h=h==Xee?OT:h;var f=u==OT,d=h==OT,p=u==h;if(p&&Al(t)){if(!Al(e))return!1;s=!0,f=!1}if(p&&!f)return a||(a=new uc),s||$h(t)?MT(t,e,r,n,i,a):Hee(t,e,u,r,n,i,a);if(!(r&hRe)){var m=f&&Kee.call(t,"__wrapped__"),g=d&&Kee.call(e,"__wrapped__");if(m||g){var y=m?t.value():t,v=g?e.value():e;return a||(a=new uc),i(y,v,r,n,a)}}return p?(a||(a=new uc),qee(t,e,r,n,i,a)):!1}var hRe,Xee,jee,OT,fRe,Kee,Qee,Zee=N(()=>{"use strict";a2();EL();Wee();Yee();qd();Un();lm();c2();hRe=1,Xee="[object Arguments]",jee="[object Array]",OT="[object Object]",fRe=Object.prototype,Kee=fRe.hasOwnProperty;o(dRe,"baseIsEqualDeep");Qee=dRe});function Jee(t,e,r,n,i){return t===e?!0:t==null||e==null||!ri(t)&&!ri(e)?t!==t&&e!==e:Qee(t,e,r,n,Jee,i)}var PT,CL=N(()=>{"use strict";Zee();Mo();o(Jee,"baseIsEqual");PT=Jee});function gRe(t,e,r,n){var i=r.length,a=i,s=!n;if(t==null)return!a;for(t=Object(t);i--;){var l=r[i];if(s&&l[2]?l[1]!==t[l[0]]:!(l[0]in t))return!1}for(;++i{"use strict";a2();CL();pRe=1,mRe=2;o(gRe,"baseIsMatch");ete=gRe});function yRe(t){return t===t&&!bn(t)}var BT,AL=N(()=>{"use strict";to();o(yRe,"isStrictComparable");BT=yRe});function vRe(t){for(var e=zr(t),r=e.length;r--;){var n=e[r],i=t[n];e[r]=[n,i,BT(i)]}return e}var rte,nte=N(()=>{"use strict";AL();wc();o(vRe,"getMatchData");rte=vRe});function xRe(t,e){return function(r){return r==null?!1:r[t]===e&&(e!==void 0||t in Object(r))}}var FT,_L=N(()=>{"use strict";o(xRe,"matchesStrictComparable");FT=xRe});function bRe(t){var e=rte(t);return e.length==1&&e[0][2]?FT(e[0][0],e[0][1]):function(r){return r===t||ete(r,t,e)}}var ite,ate=N(()=>{"use strict";tte();nte();_L();o(bRe,"baseMatches");ite=bRe});function wRe(t,e){return t!=null&&e in Object(t)}var ste,ote=N(()=>{"use strict";o(wRe,"baseHasIn");ste=wRe});function TRe(t,e,r){e=Qh(e,t);for(var n=-1,i=e.length,a=!1;++n{"use strict";R2();sm();Un();h2();dw();Rm();o(TRe,"hasPath");$T=TRe});function kRe(t,e){return t!=null&&$T(t,e,ste)}var zT,LL=N(()=>{"use strict";ote();DL();o(kRe,"hasIn");zT=kRe});function CRe(t,e){return Lm(t)&&BT(e)?FT(Tc(t),e):function(r){var n=PJ(r,t);return n===void 0&&n===e?zT(r,t):PT(e,n,ERe|SRe)}}var ERe,SRe,lte,cte=N(()=>{"use strict";CL();BJ();LL();pT();AL();_L();Rm();ERe=1,SRe=2;o(CRe,"baseMatchesProperty");lte=CRe});function ARe(t){return function(e){return e?.[t]}}var GT,RL=N(()=>{"use strict";o(ARe,"baseProperty");GT=ARe});function _Re(t){return function(e){return Zh(e,t)}}var ute,hte=N(()=>{"use strict";N2();o(_Re,"basePropertyDeep");ute=_Re});function DRe(t){return Lm(t)?GT(Tc(t)):ute(t)}var fte,dte=N(()=>{"use strict";RL();hte();pT();Rm();o(DRe,"property");fte=DRe});function LRe(t){return typeof t=="function"?t:t==null?ta:typeof t=="object"?Pt(t)?lte(t[0],t[1]):ite(t):fte(t)}var pn,rs=N(()=>{"use strict";ate();cte();Lu();Un();dte();o(LRe,"baseIteratee");pn=LRe});function RRe(t,e,r,n){for(var i=-1,a=t==null?0:t.length;++i{"use strict";o(RRe,"arrayAggregator");pte=RRe});function NRe(t,e){return t&&tm(t,e,zr)}var $m,VT=N(()=>{"use strict";aw();wc();o(NRe,"baseForOwn");$m=NRe});function MRe(t,e){return function(r,n){if(r==null)return r;if(!ci(r))return t(r,n);for(var i=r.length,a=e?i:-1,s=Object(r);(e?a--:++a{"use strict";Io();o(MRe,"createBaseEach");gte=MRe});var IRe,Os,ef=N(()=>{"use strict";VT();yte();IRe=gte($m),Os=IRe});function ORe(t,e,r,n){return Os(t,function(i,a,s){e(n,i,r(i),s)}),n}var vte,xte=N(()=>{"use strict";ef();o(ORe,"baseAggregator");vte=ORe});function PRe(t,e){return function(r,n){var i=Pt(r)?pte:vte,a=e?e():{};return i(r,t,pn(n,2),a)}}var bte,wte=N(()=>{"use strict";mte();xte();rs();Un();o(PRe,"createAggregator");bte=PRe});var BRe,UT,Tte=N(()=>{"use strict";Ro();BRe=o(function(){return li.Date.now()},"now"),UT=BRe});var kte,FRe,$Re,tf,Ete=N(()=>{"use strict";um();Nd();Bd();Gh();kte=Object.prototype,FRe=kte.hasOwnProperty,$Re=pc(function(t,e){t=Object(t);var r=-1,n=e.length,i=n>2?e[2]:void 0;for(i&&ro(e[0],e[1],i)&&(n=1);++r{"use strict";o(zRe,"arrayIncludesWith");HT=zRe});function VRe(t,e,r,n){var i=-1,a=fT,s=!0,l=t.length,u=[],h=e.length;if(!l)return u;r&&(e=Is(e,Oo(r))),n?(a=HT,s=!1):e.length>=GRe&&(a=Bm,s=!1,e=new Pm(e));e:for(;++i{"use strict";LT();hL();NL();Hd();Od();NT();GRe=200;o(VRe,"baseDifference");Ste=VRe});var URe,rf,Ate=N(()=>{"use strict";Cte();Mm();um();pw();URe=pc(function(t,e){return Id(t)?Ste(t,kc(e,1,Id,!0)):[]}),rf=URe});function HRe(t){var e=t==null?0:t.length;return e?t[e-1]:void 0}var ga,_te=N(()=>{"use strict";o(HRe,"last");ga=HRe});function WRe(t,e,r){var n=t==null?0:t.length;return n?(e=r||e===void 0?1:bc(e),vT(t,e<0?0:e,n)):[]}var yi,Dte=N(()=>{"use strict";dL();Am();o(WRe,"drop");yi=WRe});function qRe(t,e,r){var n=t==null?0:t.length;return n?(e=r||e===void 0?1:bc(e),e=n-e,vT(t,0,e<0?0:e)):[]}var Pu,Lte=N(()=>{"use strict";dL();Am();o(qRe,"dropRight");Pu=qRe});function YRe(t){return typeof t=="function"?t:ta}var zm,WT=N(()=>{"use strict";Lu();o(YRe,"castFunction");zm=YRe});function XRe(t,e){var r=Pt(t)?cT:Os;return r(t,zm(e))}var Ae,qT=N(()=>{"use strict";cL();ef();WT();Un();o(XRe,"forEach");Ae=XRe});var Rte=N(()=>{"use strict";qT()});function jRe(t,e){for(var r=-1,n=t==null?0:t.length;++r{"use strict";o(jRe,"arrayEvery");Nte=jRe});function KRe(t,e){var r=!0;return Os(t,function(n,i,a){return r=!!e(n,i,a),r}),r}var Ite,Ote=N(()=>{"use strict";ef();o(KRe,"baseEvery");Ite=KRe});function QRe(t,e,r){var n=Pt(t)?Nte:Ite;return r&&ro(t,e,r)&&(e=void 0),n(t,pn(e,3))}var Ma,Pte=N(()=>{"use strict";Mte();Ote();rs();Un();Bd();o(QRe,"every");Ma=QRe});function ZRe(t,e){var r=[];return Os(t,function(n,i,a){e(n,i,a)&&r.push(n)}),r}var YT,ML=N(()=>{"use strict";ef();o(ZRe,"baseFilter");YT=ZRe});function JRe(t,e){var r=Pt(t)?Im:YT;return r(t,pn(e,3))}var Yr,IL=N(()=>{"use strict";xT();ML();rs();Un();o(JRe,"filter");Yr=JRe});function eNe(t){return function(e,r,n){var i=Object(e);if(!ci(e)){var a=pn(r,3);e=zr(e),r=o(function(l){return a(i[l],l,i)},"predicate")}var s=t(e,r,n);return s>-1?i[a?e[s]:s]:void 0}}var Bte,Fte=N(()=>{"use strict";rs();Io();wc();o(eNe,"createFind");Bte=eNe});function rNe(t,e,r){var n=t==null?0:t.length;if(!n)return-1;var i=r==null?0:bc(r);return i<0&&(i=tNe(n+i,0)),uT(t,pn(e,3),i)}var tNe,$te,zte=N(()=>{"use strict";uL();rs();Am();tNe=Math.max;o(rNe,"findIndex");$te=rNe});var nNe,ns,Gte=N(()=>{"use strict";Fte();zte();nNe=Bte($te),ns=nNe});function iNe(t){return t&&t.length?t[0]:void 0}var ia,Vte=N(()=>{"use strict";o(iNe,"head");ia=iNe});var Ute=N(()=>{"use strict";Vte()});function aNe(t,e){var r=-1,n=ci(t)?Array(t.length):[];return Os(t,function(i,a,s){n[++r]=e(i,a,s)}),n}var XT,OL=N(()=>{"use strict";ef();Io();o(aNe,"baseMap");XT=aNe});function sNe(t,e){var r=Pt(t)?Is:XT;return r(t,pn(e,3))}var Je,Gm=N(()=>{"use strict";Hd();rs();OL();Un();o(sNe,"map");Je=sNe});function oNe(t,e){return kc(Je(t,e),1)}var ya,PL=N(()=>{"use strict";Mm();Gm();o(oNe,"flatMap");ya=oNe});function lNe(t,e){return t==null?t:tm(t,zm(e),_s)}var BL,Hte=N(()=>{"use strict";aw();WT();Gh();o(lNe,"forIn");BL=lNe});function cNe(t,e){return t&&$m(t,zm(e))}var FL,Wte=N(()=>{"use strict";VT();WT();o(cNe,"forOwn");FL=cNe});var uNe,hNe,fNe,$L,qte=N(()=>{"use strict";em();wte();uNe=Object.prototype,hNe=uNe.hasOwnProperty,fNe=bte(function(t,e,r){hNe.call(t,r)?t[r].push(e):hc(t,r,[e])}),$L=fNe});function dNe(t,e){return t>e}var Yte,Xte=N(()=>{"use strict";o(dNe,"baseGt");Yte=dNe});function gNe(t,e){return t!=null&&mNe.call(t,e)}var pNe,mNe,jte,Kte=N(()=>{"use strict";pNe=Object.prototype,mNe=pNe.hasOwnProperty;o(gNe,"baseHas");jte=gNe});function yNe(t,e){return t!=null&&$T(t,e,jte)}var Bt,Qte=N(()=>{"use strict";Kte();DL();o(yNe,"has");Bt=yNe});function xNe(t){return typeof t=="string"||!Pt(t)&&ri(t)&&da(t)==vNe}var vNe,xi,jT=N(()=>{"use strict";Au();Un();Mo();vNe="[object String]";o(xNe,"isString");xi=xNe});function bNe(t,e){return Is(e,function(r){return t[r]})}var Zte,Jte=N(()=>{"use strict";Hd();o(bNe,"baseValues");Zte=bNe});function wNe(t){return t==null?[]:Zte(t,zr(t))}var br,zL=N(()=>{"use strict";Jte();wc();o(wNe,"values");br=wNe});function kNe(t,e,r,n){t=ci(t)?t:br(t),r=r&&!n?bc(r):0;var i=t.length;return r<0&&(r=TNe(i+r,0)),xi(t)?r<=i&&t.indexOf(e,r)>-1:!!i&&_m(t,e,r)>-1}var TNe,qn,ere=N(()=>{"use strict";hT();Io();jT();Am();zL();TNe=Math.max;o(kNe,"includes");qn=kNe});function SNe(t,e,r){var n=t==null?0:t.length;if(!n)return-1;var i=r==null?0:bc(r);return i<0&&(i=ENe(n+i,0)),_m(t,e,i)}var ENe,KT,tre=N(()=>{"use strict";hT();Am();ENe=Math.max;o(SNe,"indexOf");KT=SNe});function LNe(t){if(t==null)return!0;if(ci(t)&&(Pt(t)||typeof t=="string"||typeof t.splice=="function"||Al(t)||$h(t)||Cl(t)))return!t.length;var e=so(t);if(e==CNe||e==ANe)return!t.size;if(fc(t))return!Dm(t).length;for(var r in t)if(DNe.call(t,r))return!1;return!0}var CNe,ANe,_Ne,DNe,ur,QT=N(()=>{"use strict";dT();qd();sm();Un();Io();lm();am();c2();CNe="[object Map]",ANe="[object Set]",_Ne=Object.prototype,DNe=_Ne.hasOwnProperty;o(LNe,"isEmpty");ur=LNe});function NNe(t){return ri(t)&&da(t)==RNe}var RNe,rre,nre=N(()=>{"use strict";Au();Mo();RNe="[object RegExp]";o(NNe,"baseIsRegExp");rre=NNe});var ire,MNe,Go,are=N(()=>{"use strict";nre();Od();l2();ire=Po&&Po.isRegExp,MNe=ire?Oo(ire):rre,Go=MNe});function INe(t){return t===void 0}var mr,sre=N(()=>{"use strict";o(INe,"isUndefined");mr=INe});function ONe(t,e){return t{"use strict";o(ONe,"baseLt");ZT=ONe});function PNe(t,e){var r={};return e=pn(e,3),$m(t,function(n,i,a){hc(r,i,e(n,i,a))}),r}var Yd,ore=N(()=>{"use strict";em();VT();rs();o(PNe,"mapValues");Yd=PNe});function BNe(t,e,r){for(var n=-1,i=t.length;++n{"use strict";Ud();o(BNe,"baseExtremum");Vm=BNe});function FNe(t){return t&&t.length?Vm(t,ta,Yte):void 0}var Ps,lre=N(()=>{"use strict";JT();Xte();Lu();o(FNe,"max");Ps=FNe});function $Ne(t){return t&&t.length?Vm(t,ta,ZT):void 0}var Rl,VL=N(()=>{"use strict";JT();GL();Lu();o($Ne,"min");Rl=$Ne});function zNe(t,e){return t&&t.length?Vm(t,pn(e,2),ZT):void 0}var Xd,cre=N(()=>{"use strict";JT();rs();GL();o(zNe,"minBy");Xd=zNe});function VNe(t){if(typeof t!="function")throw new TypeError(GNe);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}var GNe,ure,hre=N(()=>{"use strict";GNe="Expected a function";o(VNe,"negate");ure=VNe});function UNe(t,e,r,n){if(!bn(t))return t;e=Qh(e,t);for(var i=-1,a=e.length,s=a-1,l=t;l!=null&&++i{"use strict";cm();R2();h2();to();Rm();o(UNe,"baseSet");fre=UNe});function HNe(t,e,r){for(var n=-1,i=e.length,a={};++n{"use strict";N2();dre();R2();o(HNe,"basePickBy");ek=HNe});function WNe(t,e){if(t==null)return{};var r=Is(ET(t),function(n){return[n]});return e=pn(e),ek(t,r,function(n,i){return e(n,i[0])})}var Bs,pre=N(()=>{"use strict";Hd();rs();UL();vL();o(WNe,"pickBy");Bs=WNe});function qNe(t,e){var r=t.length;for(t.sort(e);r--;)t[r]=t[r].value;return t}var mre,gre=N(()=>{"use strict";o(qNe,"baseSortBy");mre=qNe});function YNe(t,e){if(t!==e){var r=t!==void 0,n=t===null,i=t===t,a=ao(t),s=e!==void 0,l=e===null,u=e===e,h=ao(e);if(!l&&!h&&!a&&t>e||a&&s&&u&&!l&&!h||n&&s&&u||!r&&u||!i)return 1;if(!n&&!a&&!h&&t{"use strict";Ud();o(YNe,"compareAscending");yre=YNe});function XNe(t,e,r){for(var n=-1,i=t.criteria,a=e.criteria,s=i.length,l=r.length;++n=l)return u;var h=r[n];return u*(h=="desc"?-1:1)}}return t.index-e.index}var xre,bre=N(()=>{"use strict";vre();o(XNe,"compareMultiple");xre=XNe});function jNe(t,e,r){e.length?e=Is(e,function(a){return Pt(a)?function(s){return Zh(s,a.length===1?a[0]:a)}:a}):e=[ta];var n=-1;e=Is(e,Oo(pn));var i=XT(t,function(a,s,l){var u=Is(e,function(h){return h(a)});return{criteria:u,index:++n,value:a}});return mre(i,function(a,s){return xre(a,s,r)})}var wre,Tre=N(()=>{"use strict";Hd();N2();rs();OL();gre();Od();bre();Lu();Un();o(jNe,"baseOrderBy");wre=jNe});var KNe,kre,Ere=N(()=>{"use strict";RL();KNe=GT("length"),kre=KNe});function lMe(t){for(var e=Sre.lastIndex=0;Sre.test(t);)++e;return e}var Cre,QNe,ZNe,JNe,eMe,tMe,rMe,HL,WL,nMe,Are,_re,Dre,iMe,Lre,Rre,aMe,sMe,oMe,Sre,Nre,Mre=N(()=>{"use strict";Cre="\\ud800-\\udfff",QNe="\\u0300-\\u036f",ZNe="\\ufe20-\\ufe2f",JNe="\\u20d0-\\u20ff",eMe=QNe+ZNe+JNe,tMe="\\ufe0e\\ufe0f",rMe="["+Cre+"]",HL="["+eMe+"]",WL="\\ud83c[\\udffb-\\udfff]",nMe="(?:"+HL+"|"+WL+")",Are="[^"+Cre+"]",_re="(?:\\ud83c[\\udde6-\\uddff]){2}",Dre="[\\ud800-\\udbff][\\udc00-\\udfff]",iMe="\\u200d",Lre=nMe+"?",Rre="["+tMe+"]?",aMe="(?:"+iMe+"(?:"+[Are,_re,Dre].join("|")+")"+Rre+Lre+")*",sMe=Rre+Lre+aMe,oMe="(?:"+[Are+HL+"?",HL,_re,Dre,rMe].join("|")+")",Sre=RegExp(WL+"(?="+WL+")|"+oMe+sMe,"g");o(lMe,"unicodeSize");Nre=lMe});function cMe(t){return HJ(t)?Nre(t):kre(t)}var Ire,Ore=N(()=>{"use strict";Ere();WJ();Mre();o(cMe,"stringSize");Ire=cMe});function uMe(t,e){return ek(t,e,function(r,n){return zT(t,n)})}var Pre,Bre=N(()=>{"use strict";UL();LL();o(uMe,"basePick");Pre=uMe});var hMe,jd,Fre=N(()=>{"use strict";Bre();UJ();hMe=VJ(function(t,e){return t==null?{}:Pre(t,e)}),jd=hMe});function pMe(t,e,r,n){for(var i=-1,a=dMe(fMe((e-t)/(r||1)),0),s=Array(a);a--;)s[n?a:++i]=t,t+=r;return s}var fMe,dMe,$re,zre=N(()=>{"use strict";fMe=Math.ceil,dMe=Math.max;o(pMe,"baseRange");$re=pMe});function mMe(t){return function(e,r,n){return n&&typeof n!="number"&&ro(e,r,n)&&(r=n=void 0),e=Cm(e),r===void 0?(r=e,e=0):r=Cm(r),n=n===void 0?e{"use strict";zre();Bd();oL();o(mMe,"createRange");Gre=mMe});var gMe,Vo,Ure=N(()=>{"use strict";Vre();gMe=Gre(),Vo=gMe});function yMe(t,e,r,n,i){return i(t,function(a,s,l){r=n?(n=!1,a):e(r,a,s,l)}),r}var Hre,Wre=N(()=>{"use strict";o(yMe,"baseReduce");Hre=yMe});function vMe(t,e,r){var n=Pt(t)?qJ:Hre,i=arguments.length<3;return n(t,pn(e,4),r,i,Os)}var Xr,qL=N(()=>{"use strict";YJ();ef();rs();Wre();Un();o(vMe,"reduce");Xr=vMe});function xMe(t,e){var r=Pt(t)?Im:YT;return r(t,ure(pn(e,3)))}var nf,qre=N(()=>{"use strict";xT();ML();rs();Un();hre();o(xMe,"reject");nf=xMe});function TMe(t){if(t==null)return 0;if(ci(t))return xi(t)?Ire(t):t.length;var e=so(t);return e==bMe||e==wMe?t.size:Dm(t).length}var bMe,wMe,YL,Yre=N(()=>{"use strict";dT();qd();Io();jT();Ore();bMe="[object Map]",wMe="[object Set]";o(TMe,"size");YL=TMe});function kMe(t,e){var r;return Os(t,function(n,i,a){return r=e(n,i,a),!r}),!!r}var Xre,jre=N(()=>{"use strict";ef();o(kMe,"baseSome");Xre=kMe});function EMe(t,e,r){var n=Pt(t)?RT:Xre;return r&&ro(t,e,r)&&(e=void 0),n(t,pn(e,3))}var I2,Kre=N(()=>{"use strict";kL();rs();jre();Un();Bd();o(EMe,"some");I2=EMe});var SMe,Sc,Qre=N(()=>{"use strict";Mm();Tre();um();Bd();SMe=pc(function(t,e){if(t==null)return[];var r=e.length;return r>1&&ro(t,e[0],e[1])?e=[]:r>2&&ro(e[0],e[1],e[2])&&(e=[e[0]]),wre(t,kc(e,1),[])}),Sc=SMe});var CMe,AMe,Zre,Jre=N(()=>{"use strict";xL();lL();IT();CMe=1/0,AMe=Jh&&1/Fm(new Jh([,-0]))[1]==CMe?function(t){return new Jh(t)}:ni,Zre=AMe});function DMe(t,e,r){var n=-1,i=fT,a=t.length,s=!0,l=[],u=l;if(r)s=!1,i=HT;else if(a>=_Me){var h=e?null:Zre(t);if(h)return Fm(h);s=!1,i=Bm,u=new Pm}else u=e?[]:l;e:for(;++n{"use strict";LT();hL();NL();NT();Jre();IT();_Me=200;o(DMe,"baseUniq");Um=DMe});var LMe,XL,ene=N(()=>{"use strict";Mm();um();tk();pw();LMe=pc(function(t){return Um(kc(t,1,Id,!0))}),XL=LMe});function RMe(t){return t&&t.length?Um(t):[]}var Hm,tne=N(()=>{"use strict";tk();o(RMe,"uniq");Hm=RMe});function NMe(t,e){return t&&t.length?Um(t,pn(e,2)):[]}var rne,nne=N(()=>{"use strict";rs();tk();o(NMe,"uniqBy");rne=NMe});function IMe(t){var e=++MMe;return mT(t)+e}var MMe,Kd,ine=N(()=>{"use strict";fL();MMe=0;o(IMe,"uniqueId");Kd=IMe});function OMe(t,e,r){for(var n=-1,i=t.length,a=e.length,s={};++n{"use strict";o(OMe,"baseZipObject");ane=OMe});function PMe(t,e){return ane(t||[],e||[],dc)}var rk,one=N(()=>{"use strict";cm();sne();o(PMe,"zipObject");rk=PMe});var qt=N(()=>{"use strict";RJ();wL();Oee();Pee();H9();Ete();Ate();Dte();Lte();Rte();Pte();IL();Gte();Ute();PL();yT();qT();Hte();Wte();qte();Qte();Lu();ere();tre();Un();QT();e2();to();are();jT();sre();wc();_te();Gm();ore();lre();Y9();VL();cre();lL();Tte();Fre();pre();Ure();qL();qre();Yre();Kre();Qre();ene();tne();ine();zL();one();});function cne(t,e){t[e]?t[e]++:t[e]=1}function une(t,e){--t[e]||delete t[e]}function O2(t,e,r,n){var i=""+e,a=""+r;if(!t&&i>a){var s=i;i=a,a=s}return i+lne+a+lne+(mr(n)?BMe:n)}function FMe(t,e,r,n){var i=""+e,a=""+r;if(!t&&i>a){var s=i;i=a,a=s}var l={v:i,w:a};return n&&(l.name=n),l}function jL(t,e){return O2(t,e.v,e.w,e.name)}var BMe,Qd,lne,sn,nk=N(()=>{"use strict";qt();BMe="\0",Qd="\0",lne="",sn=class{static{o(this,"Graph")}constructor(e={}){this._isDirected=Object.prototype.hasOwnProperty.call(e,"directed")?e.directed:!0,this._isMultigraph=Object.prototype.hasOwnProperty.call(e,"multigraph")?e.multigraph:!1,this._isCompound=Object.prototype.hasOwnProperty.call(e,"compound")?e.compound:!1,this._label=void 0,this._defaultNodeLabelFn=Ds(void 0),this._defaultEdgeLabelFn=Ds(void 0),this._nodes={},this._isCompound&&(this._parent={},this._children={},this._children[Qd]={}),this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={}}isDirected(){return this._isDirected}isMultigraph(){return this._isMultigraph}isCompound(){return this._isCompound}setGraph(e){return this._label=e,this}graph(){return this._label}setDefaultNodeLabel(e){return Ci(e)||(e=Ds(e)),this._defaultNodeLabelFn=e,this}nodeCount(){return this._nodeCount}nodes(){return zr(this._nodes)}sources(){var e=this;return Yr(this.nodes(),function(r){return ur(e._in[r])})}sinks(){var e=this;return Yr(this.nodes(),function(r){return ur(e._out[r])})}setNodes(e,r){var n=arguments,i=this;return Ae(e,function(a){n.length>1?i.setNode(a,r):i.setNode(a)}),this}setNode(e,r){return Object.prototype.hasOwnProperty.call(this._nodes,e)?(arguments.length>1&&(this._nodes[e]=r),this):(this._nodes[e]=arguments.length>1?r:this._defaultNodeLabelFn(e),this._isCompound&&(this._parent[e]=Qd,this._children[e]={},this._children[Qd][e]=!0),this._in[e]={},this._preds[e]={},this._out[e]={},this._sucs[e]={},++this._nodeCount,this)}node(e){return this._nodes[e]}hasNode(e){return Object.prototype.hasOwnProperty.call(this._nodes,e)}removeNode(e){if(Object.prototype.hasOwnProperty.call(this._nodes,e)){var r=o(n=>this.removeEdge(this._edgeObjs[n]),"removeEdge");delete this._nodes[e],this._isCompound&&(this._removeFromParentsChildList(e),delete this._parent[e],Ae(this.children(e),n=>{this.setParent(n)}),delete this._children[e]),Ae(zr(this._in[e]),r),delete this._in[e],delete this._preds[e],Ae(zr(this._out[e]),r),delete this._out[e],delete this._sucs[e],--this._nodeCount}return this}setParent(e,r){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(mr(r))r=Qd;else{r+="";for(var n=r;!mr(n);n=this.parent(n))if(n===e)throw new Error("Setting "+r+" as parent of "+e+" would create a cycle");this.setNode(r)}return this.setNode(e),this._removeFromParentsChildList(e),this._parent[e]=r,this._children[r][e]=!0,this}_removeFromParentsChildList(e){delete this._children[this._parent[e]][e]}parent(e){if(this._isCompound){var r=this._parent[e];if(r!==Qd)return r}}children(e){if(mr(e)&&(e=Qd),this._isCompound){var r=this._children[e];if(r)return zr(r)}else{if(e===Qd)return this.nodes();if(this.hasNode(e))return[]}}predecessors(e){var r=this._preds[e];if(r)return zr(r)}successors(e){var r=this._sucs[e];if(r)return zr(r)}neighbors(e){var r=this.predecessors(e);if(r)return XL(r,this.successors(e))}isLeaf(e){var r;return this.isDirected()?r=this.successors(e):r=this.neighbors(e),r.length===0}filterNodes(e){var r=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});r.setGraph(this.graph());var n=this;Ae(this._nodes,function(s,l){e(l)&&r.setNode(l,s)}),Ae(this._edgeObjs,function(s){r.hasNode(s.v)&&r.hasNode(s.w)&&r.setEdge(s,n.edge(s))});var i={};function a(s){var l=n.parent(s);return l===void 0||r.hasNode(l)?(i[s]=l,l):l in i?i[l]:a(l)}return o(a,"findParent"),this._isCompound&&Ae(r.nodes(),function(s){r.setParent(s,a(s))}),r}setDefaultEdgeLabel(e){return Ci(e)||(e=Ds(e)),this._defaultEdgeLabelFn=e,this}edgeCount(){return this._edgeCount}edges(){return br(this._edgeObjs)}setPath(e,r){var n=this,i=arguments;return Xr(e,function(a,s){return i.length>1?n.setEdge(a,s,r):n.setEdge(a,s),s}),this}setEdge(){var e,r,n,i,a=!1,s=arguments[0];typeof s=="object"&&s!==null&&"v"in s?(e=s.v,r=s.w,n=s.name,arguments.length===2&&(i=arguments[1],a=!0)):(e=s,r=arguments[1],n=arguments[3],arguments.length>2&&(i=arguments[2],a=!0)),e=""+e,r=""+r,mr(n)||(n=""+n);var l=O2(this._isDirected,e,r,n);if(Object.prototype.hasOwnProperty.call(this._edgeLabels,l))return a&&(this._edgeLabels[l]=i),this;if(!mr(n)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(e),this.setNode(r),this._edgeLabels[l]=a?i:this._defaultEdgeLabelFn(e,r,n);var u=FMe(this._isDirected,e,r,n);return e=u.v,r=u.w,Object.freeze(u),this._edgeObjs[l]=u,cne(this._preds[r],e),cne(this._sucs[e],r),this._in[r][l]=u,this._out[e][l]=u,this._edgeCount++,this}edge(e,r,n){var i=arguments.length===1?jL(this._isDirected,arguments[0]):O2(this._isDirected,e,r,n);return this._edgeLabels[i]}hasEdge(e,r,n){var i=arguments.length===1?jL(this._isDirected,arguments[0]):O2(this._isDirected,e,r,n);return Object.prototype.hasOwnProperty.call(this._edgeLabels,i)}removeEdge(e,r,n){var i=arguments.length===1?jL(this._isDirected,arguments[0]):O2(this._isDirected,e,r,n),a=this._edgeObjs[i];return a&&(e=a.v,r=a.w,delete this._edgeLabels[i],delete this._edgeObjs[i],une(this._preds[r],e),une(this._sucs[e],r),delete this._in[r][i],delete this._out[e][i],this._edgeCount--),this}inEdges(e,r){var n=this._in[e];if(n){var i=br(n);return r?Yr(i,function(a){return a.v===r}):i}}outEdges(e,r){var n=this._out[e];if(n){var i=br(n);return r?Yr(i,function(a){return a.w===r}):i}}nodeEdges(e,r){var n=this.inEdges(e,r);if(n)return n.concat(this.outEdges(e,r))}};sn.prototype._nodeCount=0;sn.prototype._edgeCount=0;o(cne,"incrementOrInitEntry");o(une,"decrementOrRemoveEntry");o(O2,"edgeArgsToId");o(FMe,"edgeArgsToObj");o(jL,"edgeObjToId")});var Uo=N(()=>{"use strict";nk()});function hne(t){t._prev._next=t._next,t._next._prev=t._prev,delete t._next,delete t._prev}function $Me(t,e){if(t!=="_next"&&t!=="_prev")return e}var ak,fne=N(()=>{"use strict";ak=class{static{o(this,"List")}constructor(){var e={};e._next=e._prev=e,this._sentinel=e}dequeue(){var e=this._sentinel,r=e._prev;if(r!==e)return hne(r),r}enqueue(e){var r=this._sentinel;e._prev&&e._next&&hne(e),e._next=r._next,r._next._prev=e,r._next=e,e._prev=r}toString(){for(var e=[],r=this._sentinel,n=r._prev;n!==r;)e.push(JSON.stringify(n,$Me)),n=n._prev;return"["+e.join(", ")+"]"}};o(hne,"unlink");o($Me,"filterOutLinks")});function dne(t,e){if(t.nodeCount()<=1)return[];var r=VMe(t,e||zMe),n=GMe(r.graph,r.buckets,r.zeroIdx);return qr(Je(n,function(i){return t.outEdges(i.v,i.w)}))}function GMe(t,e,r){for(var n=[],i=e[e.length-1],a=e[0],s;t.nodeCount();){for(;s=a.dequeue();)KL(t,e,r,s);for(;s=i.dequeue();)KL(t,e,r,s);if(t.nodeCount()){for(var l=e.length-2;l>0;--l)if(s=e[l].dequeue(),s){n=n.concat(KL(t,e,r,s,!0));break}}}return n}function KL(t,e,r,n,i){var a=i?[]:void 0;return Ae(t.inEdges(n.v),function(s){var l=t.edge(s),u=t.node(s.v);i&&a.push({v:s.v,w:s.w}),u.out-=l,QL(e,r,u)}),Ae(t.outEdges(n.v),function(s){var l=t.edge(s),u=s.w,h=t.node(u);h.in-=l,QL(e,r,h)}),t.removeNode(n.v),a}function VMe(t,e){var r=new sn,n=0,i=0;Ae(t.nodes(),function(l){r.setNode(l,{v:l,in:0,out:0})}),Ae(t.edges(),function(l){var u=r.edge(l.v,l.w)||0,h=e(l),f=u+h;r.setEdge(l.v,l.w,f),i=Math.max(i,r.node(l.v).out+=h),n=Math.max(n,r.node(l.w).in+=h)});var a=Vo(i+n+3).map(function(){return new ak}),s=n+1;return Ae(r.nodes(),function(l){QL(a,s,r.node(l))}),{graph:r,buckets:a,zeroIdx:s}}function QL(t,e,r){r.out?r.in?t[r.out-r.in+e].enqueue(r):t[t.length-1].enqueue(r):t[0].enqueue(r)}var zMe,pne=N(()=>{"use strict";qt();Uo();fne();zMe=Ds(1);o(dne,"greedyFAS");o(GMe,"doGreedyFAS");o(KL,"removeNode");o(VMe,"buildState");o(QL,"assignBucket")});function mne(t){var e=t.graph().acyclicer==="greedy"?dne(t,r(t)):UMe(t);Ae(e,function(n){var i=t.edge(n);t.removeEdge(n),i.forwardName=n.name,i.reversed=!0,t.setEdge(n.w,n.v,i,Kd("rev"))});function r(n){return function(i){return n.edge(i).weight}}o(r,"weightFn")}function UMe(t){var e=[],r={},n={};function i(a){Object.prototype.hasOwnProperty.call(n,a)||(n[a]=!0,r[a]=!0,Ae(t.outEdges(a),function(s){Object.prototype.hasOwnProperty.call(r,s.w)?e.push(s):i(s.w)}),delete r[a])}return o(i,"dfs"),Ae(t.nodes(),i),e}function gne(t){Ae(t.edges(),function(e){var r=t.edge(e);if(r.reversed){t.removeEdge(e);var n=r.forwardName;delete r.reversed,delete r.forwardName,t.setEdge(e.w,e.v,r,n)}})}var ZL=N(()=>{"use strict";qt();pne();o(mne,"run");o(UMe,"dfsFAS");o(gne,"undo")});function Cc(t,e,r,n){var i;do i=Kd(n);while(t.hasNode(i));return r.dummy=e,t.setNode(i,r),i}function vne(t){var e=new sn().setGraph(t.graph());return Ae(t.nodes(),function(r){e.setNode(r,t.node(r))}),Ae(t.edges(),function(r){var n=e.edge(r.v,r.w)||{weight:0,minlen:1},i=t.edge(r);e.setEdge(r.v,r.w,{weight:n.weight+i.weight,minlen:Math.max(n.minlen,i.minlen)})}),e}function sk(t){var e=new sn({multigraph:t.isMultigraph()}).setGraph(t.graph());return Ae(t.nodes(),function(r){t.children(r).length||e.setNode(r,t.node(r))}),Ae(t.edges(),function(r){e.setEdge(r,t.edge(r))}),e}function JL(t,e){var r=t.x,n=t.y,i=e.x-r,a=e.y-n,s=t.width/2,l=t.height/2;if(!i&&!a)throw new Error("Not possible to find intersection inside of the rectangle");var u,h;return Math.abs(a)*s>Math.abs(i)*l?(a<0&&(l=-l),u=l*i/a,h=l):(i<0&&(s=-s),u=s,h=s*a/i),{x:r+u,y:n+h}}function af(t){var e=Je(Vo(tR(t)+1),function(){return[]});return Ae(t.nodes(),function(r){var n=t.node(r),i=n.rank;mr(i)||(e[i][n.order]=r)}),e}function xne(t){var e=Rl(Je(t.nodes(),function(r){return t.node(r).rank}));Ae(t.nodes(),function(r){var n=t.node(r);Bt(n,"rank")&&(n.rank-=e)})}function bne(t){var e=Rl(Je(t.nodes(),function(a){return t.node(a).rank})),r=[];Ae(t.nodes(),function(a){var s=t.node(a).rank-e;r[s]||(r[s]=[]),r[s].push(a)});var n=0,i=t.graph().nodeRankFactor;Ae(r,function(a,s){mr(a)&&s%i!==0?--n:n&&Ae(a,function(l){t.node(l).rank+=n})})}function eR(t,e,r,n){var i={width:0,height:0};return arguments.length>=4&&(i.rank=r,i.order=n),Cc(t,"border",i,e)}function tR(t){return Ps(Je(t.nodes(),function(e){var r=t.node(e).rank;if(!mr(r))return r}))}function wne(t,e){var r={lhs:[],rhs:[]};return Ae(t,function(n){e(n)?r.lhs.push(n):r.rhs.push(n)}),r}function Tne(t,e){var r=UT();try{return e()}finally{console.log(t+" time: "+(UT()-r)+"ms")}}function kne(t,e){return e()}var Ac=N(()=>{"use strict";qt();Uo();o(Cc,"addDummyNode");o(vne,"simplify");o(sk,"asNonCompoundGraph");o(JL,"intersectRect");o(af,"buildLayerMatrix");o(xne,"normalizeRanks");o(bne,"removeEmptyRanks");o(eR,"addBorderNode");o(tR,"maxRank");o(wne,"partition");o(Tne,"time");o(kne,"notime")});function Sne(t){function e(r){var n=t.children(r),i=t.node(r);if(n.length&&Ae(n,e),Object.prototype.hasOwnProperty.call(i,"minRank")){i.borderLeft=[],i.borderRight=[];for(var a=i.minRank,s=i.maxRank+1;a{"use strict";qt();Ac();o(Sne,"addBorderSegments");o(Ene,"addBorderNode")});function _ne(t){var e=t.graph().rankdir.toLowerCase();(e==="lr"||e==="rl")&&Lne(t)}function Dne(t){var e=t.graph().rankdir.toLowerCase();(e==="bt"||e==="rl")&&HMe(t),(e==="lr"||e==="rl")&&(WMe(t),Lne(t))}function Lne(t){Ae(t.nodes(),function(e){Ane(t.node(e))}),Ae(t.edges(),function(e){Ane(t.edge(e))})}function Ane(t){var e=t.width;t.width=t.height,t.height=e}function HMe(t){Ae(t.nodes(),function(e){rR(t.node(e))}),Ae(t.edges(),function(e){var r=t.edge(e);Ae(r.points,rR),Object.prototype.hasOwnProperty.call(r,"y")&&rR(r)})}function rR(t){t.y=-t.y}function WMe(t){Ae(t.nodes(),function(e){nR(t.node(e))}),Ae(t.edges(),function(e){var r=t.edge(e);Ae(r.points,nR),Object.prototype.hasOwnProperty.call(r,"x")&&nR(r)})}function nR(t){var e=t.x;t.x=t.y,t.y=e}var Rne=N(()=>{"use strict";qt();o(_ne,"adjust");o(Dne,"undo");o(Lne,"swapWidthHeight");o(Ane,"swapWidthHeightOne");o(HMe,"reverseY");o(rR,"reverseYOne");o(WMe,"swapXY");o(nR,"swapXYOne")});function Nne(t){t.graph().dummyChains=[],Ae(t.edges(),function(e){YMe(t,e)})}function YMe(t,e){var r=e.v,n=t.node(r).rank,i=e.w,a=t.node(i).rank,s=e.name,l=t.edge(e),u=l.labelRank;if(a!==n+1){t.removeEdge(e);var h=void 0,f,d;for(d=0,++n;n{"use strict";qt();Ac();o(Nne,"run");o(YMe,"normalizeEdge");o(Mne,"undo")});function P2(t){var e={};function r(n){var i=t.node(n);if(Object.prototype.hasOwnProperty.call(e,n))return i.rank;e[n]=!0;var a=Rl(Je(t.outEdges(n),function(s){return r(s.w)-t.edge(s).minlen}));return(a===Number.POSITIVE_INFINITY||a===void 0||a===null)&&(a=0),i.rank=a}o(r,"dfs"),Ae(t.sources(),r)}function Zd(t,e){return t.node(e.w).rank-t.node(e.v).rank-t.edge(e).minlen}var ok=N(()=>{"use strict";qt();o(P2,"longestPath");o(Zd,"slack")});function lk(t){var e=new sn({directed:!1}),r=t.nodes()[0],n=t.nodeCount();e.setNode(r,{});for(var i,a;XMe(e,t){"use strict";qt();Uo();ok();o(lk,"feasibleTree");o(XMe,"tightTree");o(jMe,"findMinSlackEdge");o(KMe,"shiftRanks")});var One=N(()=>{"use strict"});var sR=N(()=>{"use strict"});var tWt,oR=N(()=>{"use strict";qt();sR();tWt=Ds(1)});var Pne=N(()=>{"use strict";oR()});var lR=N(()=>{"use strict"});var Bne=N(()=>{"use strict";lR()});var fWt,Fne=N(()=>{"use strict";qt();fWt=Ds(1)});function cR(t){var e={},r={},n=[];function i(a){if(Object.prototype.hasOwnProperty.call(r,a))throw new B2;Object.prototype.hasOwnProperty.call(e,a)||(r[a]=!0,e[a]=!0,Ae(t.predecessors(a),i),delete r[a],n.push(a))}if(o(i,"visit"),Ae(t.sinks(),i),YL(e)!==t.nodeCount())throw new B2;return n}function B2(){}var uR=N(()=>{"use strict";qt();cR.CycleException=B2;o(cR,"topsort");o(B2,"CycleException");B2.prototype=new Error});var $ne=N(()=>{"use strict";uR()});function ck(t,e,r){Pt(e)||(e=[e]);var n=(t.isDirected()?t.successors:t.neighbors).bind(t),i=[],a={};return Ae(e,function(s){if(!t.hasNode(s))throw new Error("Graph does not have node: "+s);zne(t,s,r==="post",a,n,i)}),i}function zne(t,e,r,n,i,a){Object.prototype.hasOwnProperty.call(n,e)||(n[e]=!0,r||a.push(e),Ae(i(e),function(s){zne(t,s,r,n,i,a)}),r&&a.push(e))}var hR=N(()=>{"use strict";qt();o(ck,"dfs");o(zne,"doDfs")});function fR(t,e){return ck(t,e,"post")}var Gne=N(()=>{"use strict";hR();o(fR,"postorder")});function dR(t,e){return ck(t,e,"pre")}var Vne=N(()=>{"use strict";hR();o(dR,"preorder")});var Une=N(()=>{"use strict";sR();nk()});var Hne=N(()=>{"use strict";One();oR();Pne();Bne();Fne();$ne();Gne();Vne();Une();lR();uR()});function of(t){t=vne(t),P2(t);var e=lk(t);mR(e),pR(e,t);for(var r,n;r=Xne(e);)n=jne(e,t,r),Kne(e,t,r,n)}function pR(t,e){var r=fR(t,t.nodes());r=r.slice(0,r.length-1),Ae(r,function(n){tIe(t,e,n)})}function tIe(t,e,r){var n=t.node(r),i=n.parent;t.edge(r,i).cutvalue=qne(t,e,r)}function qne(t,e,r){var n=t.node(r),i=n.parent,a=!0,s=e.edge(r,i),l=0;return s||(a=!1,s=e.edge(i,r)),l=s.weight,Ae(e.nodeEdges(r),function(u){var h=u.v===r,f=h?u.w:u.v;if(f!==i){var d=h===a,p=e.edge(u).weight;if(l+=d?p:-p,nIe(t,r,f)){var m=t.edge(r,f).cutvalue;l+=d?-m:m}}}),l}function mR(t,e){arguments.length<2&&(e=t.nodes()[0]),Yne(t,{},1,e)}function Yne(t,e,r,n,i){var a=r,s=t.node(n);return e[n]=!0,Ae(t.neighbors(n),function(l){Object.prototype.hasOwnProperty.call(e,l)||(r=Yne(t,e,r,l,n))}),s.low=a,s.lim=r++,i?s.parent=i:delete s.parent,r}function Xne(t){return ns(t.edges(),function(e){return t.edge(e).cutvalue<0})}function jne(t,e,r){var n=r.v,i=r.w;e.hasEdge(n,i)||(n=r.w,i=r.v);var a=t.node(n),s=t.node(i),l=a,u=!1;a.lim>s.lim&&(l=s,u=!0);var h=Yr(e.edges(),function(f){return u===Wne(t,t.node(f.v),l)&&u!==Wne(t,t.node(f.w),l)});return Xd(h,function(f){return Zd(e,f)})}function Kne(t,e,r,n){var i=r.v,a=r.w;t.removeEdge(i,a),t.setEdge(n.v,n.w,{}),mR(t),pR(t,e),rIe(t,e)}function rIe(t,e){var r=ns(t.nodes(),function(i){return!e.node(i).parent}),n=dR(t,r);n=n.slice(1),Ae(n,function(i){var a=t.node(i).parent,s=e.edge(i,a),l=!1;s||(s=e.edge(a,i),l=!0),e.node(i).rank=e.node(a).rank+(l?s.minlen:-s.minlen)})}function nIe(t,e,r){return t.hasEdge(e,r)}function Wne(t,e,r){return r.low<=e.lim&&e.lim<=r.lim}var Qne=N(()=>{"use strict";qt();Hne();Ac();aR();ok();of.initLowLimValues=mR;of.initCutValues=pR;of.calcCutValue=qne;of.leaveEdge=Xne;of.enterEdge=jne;of.exchangeEdges=Kne;o(of,"networkSimplex");o(pR,"initCutValues");o(tIe,"assignCutValue");o(qne,"calcCutValue");o(mR,"initLowLimValues");o(Yne,"dfsAssignLowLim");o(Xne,"leaveEdge");o(jne,"enterEdge");o(Kne,"exchangeEdges");o(rIe,"updateRanks");o(nIe,"isTreeEdge");o(Wne,"isDescendant")});function gR(t){switch(t.graph().ranker){case"network-simplex":Zne(t);break;case"tight-tree":aIe(t);break;case"longest-path":iIe(t);break;default:Zne(t)}}function aIe(t){P2(t),lk(t)}function Zne(t){of(t)}var iIe,yR=N(()=>{"use strict";aR();Qne();ok();o(gR,"rank");iIe=P2;o(aIe,"tightTreeRanker");o(Zne,"networkSimplexRanker")});function Jne(t){var e=Cc(t,"root",{},"_root"),r=sIe(t),n=Ps(br(r))-1,i=2*n+1;t.graph().nestingRoot=e,Ae(t.edges(),function(s){t.edge(s).minlen*=i});var a=oIe(t)+1;Ae(t.children(),function(s){eie(t,e,i,a,n,r,s)}),t.graph().nodeRankFactor=i}function eie(t,e,r,n,i,a,s){var l=t.children(s);if(!l.length){s!==e&&t.setEdge(e,s,{weight:0,minlen:r});return}var u=eR(t,"_bt"),h=eR(t,"_bb"),f=t.node(s);t.setParent(u,s),f.borderTop=u,t.setParent(h,s),f.borderBottom=h,Ae(l,function(d){eie(t,e,r,n,i,a,d);var p=t.node(d),m=p.borderTop?p.borderTop:d,g=p.borderBottom?p.borderBottom:d,y=p.borderTop?n:2*n,v=m!==g?1:i-a[s]+1;t.setEdge(u,m,{weight:y,minlen:v,nestingEdge:!0}),t.setEdge(g,h,{weight:y,minlen:v,nestingEdge:!0})}),t.parent(s)||t.setEdge(e,u,{weight:0,minlen:i+a[s]})}function sIe(t){var e={};function r(n,i){var a=t.children(n);a&&a.length&&Ae(a,function(s){r(s,i+1)}),e[n]=i}return o(r,"dfs"),Ae(t.children(),function(n){r(n,1)}),e}function oIe(t){return Xr(t.edges(),function(e,r){return e+t.edge(r).weight},0)}function tie(t){var e=t.graph();t.removeNode(e.nestingRoot),delete e.nestingRoot,Ae(t.edges(),function(r){var n=t.edge(r);n.nestingEdge&&t.removeEdge(r)})}var rie=N(()=>{"use strict";qt();Ac();o(Jne,"run");o(eie,"dfs");o(sIe,"treeDepths");o(oIe,"sumWeights");o(tie,"cleanup")});function nie(t,e,r){var n={},i;Ae(r,function(a){for(var s=t.parent(a),l,u;s;){if(l=t.parent(s),l?(u=n[l],n[l]=s):(u=i,i=s),u&&u!==s){e.setEdge(u,s);return}s=l}})}var iie=N(()=>{"use strict";qt();o(nie,"addSubgraphConstraints")});function aie(t,e,r){var n=cIe(t),i=new sn({compound:!0}).setGraph({root:n}).setDefaultNodeLabel(function(a){return t.node(a)});return Ae(t.nodes(),function(a){var s=t.node(a),l=t.parent(a);(s.rank===e||s.minRank<=e&&e<=s.maxRank)&&(i.setNode(a),i.setParent(a,l||n),Ae(t[r](a),function(u){var h=u.v===a?u.w:u.v,f=i.edge(h,a),d=mr(f)?0:f.weight;i.setEdge(h,a,{weight:t.edge(u).weight+d})}),Object.prototype.hasOwnProperty.call(s,"minRank")&&i.setNode(a,{borderLeft:s.borderLeft[e],borderRight:s.borderRight[e]}))}),i}function cIe(t){for(var e;t.hasNode(e=Kd("_root")););return e}var sie=N(()=>{"use strict";qt();Uo();o(aie,"buildLayerGraph");o(cIe,"createRootNode")});function oie(t,e){for(var r=0,n=1;n0;)f%2&&(d+=l[f+1]),f=f-1>>1,l[f]+=h.weight;u+=h.weight*d})),u}var lie=N(()=>{"use strict";qt();o(oie,"crossCount");o(uIe,"twoLayerCrossCount")});function cie(t){var e={},r=Yr(t.nodes(),function(l){return!t.children(l).length}),n=Ps(Je(r,function(l){return t.node(l).rank})),i=Je(Vo(n+1),function(){return[]});function a(l){if(!Bt(e,l)){e[l]=!0;var u=t.node(l);i[u.rank].push(l),Ae(t.successors(l),a)}}o(a,"dfs");var s=Sc(r,function(l){return t.node(l).rank});return Ae(s,a),i}var uie=N(()=>{"use strict";qt();o(cie,"initOrder")});function hie(t,e){return Je(e,function(r){var n=t.inEdges(r);if(n.length){var i=Xr(n,function(a,s){var l=t.edge(s),u=t.node(s.v);return{sum:a.sum+l.weight*u.order,weight:a.weight+l.weight}},{sum:0,weight:0});return{v:r,barycenter:i.sum/i.weight,weight:i.weight}}else return{v:r}})}var fie=N(()=>{"use strict";qt();o(hie,"barycenter")});function die(t,e){var r={};Ae(t,function(i,a){var s=r[i.v]={indegree:0,in:[],out:[],vs:[i.v],i:a};mr(i.barycenter)||(s.barycenter=i.barycenter,s.weight=i.weight)}),Ae(e.edges(),function(i){var a=r[i.v],s=r[i.w];!mr(a)&&!mr(s)&&(s.indegree++,a.out.push(r[i.w]))});var n=Yr(r,function(i){return!i.indegree});return hIe(n)}function hIe(t){var e=[];function r(a){return function(s){s.merged||(mr(s.barycenter)||mr(a.barycenter)||s.barycenter>=a.barycenter)&&fIe(a,s)}}o(r,"handleIn");function n(a){return function(s){s.in.push(a),--s.indegree===0&&t.push(s)}}for(o(n,"handleOut");t.length;){var i=t.pop();e.push(i),Ae(i.in.reverse(),r(i)),Ae(i.out,n(i))}return Je(Yr(e,function(a){return!a.merged}),function(a){return jd(a,["vs","i","barycenter","weight"])})}function fIe(t,e){var r=0,n=0;t.weight&&(r+=t.barycenter*t.weight,n+=t.weight),e.weight&&(r+=e.barycenter*e.weight,n+=e.weight),t.vs=e.vs.concat(t.vs),t.barycenter=r/n,t.weight=n,t.i=Math.min(e.i,t.i),e.merged=!0}var pie=N(()=>{"use strict";qt();o(die,"resolveConflicts");o(hIe,"doResolveConflicts");o(fIe,"mergeEntries")});function gie(t,e){var r=wne(t,function(f){return Object.prototype.hasOwnProperty.call(f,"barycenter")}),n=r.lhs,i=Sc(r.rhs,function(f){return-f.i}),a=[],s=0,l=0,u=0;n.sort(dIe(!!e)),u=mie(a,i,u),Ae(n,function(f){u+=f.vs.length,a.push(f.vs),s+=f.barycenter*f.weight,l+=f.weight,u=mie(a,i,u)});var h={vs:qr(a)};return l&&(h.barycenter=s/l,h.weight=l),h}function mie(t,e,r){for(var n;e.length&&(n=ga(e)).i<=r;)e.pop(),t.push(n.vs),r++;return r}function dIe(t){return function(e,r){return e.barycenterr.barycenter?1:t?r.i-e.i:e.i-r.i}}var yie=N(()=>{"use strict";qt();Ac();o(gie,"sort");o(mie,"consumeUnsortable");o(dIe,"compareWithBias")});function vR(t,e,r,n){var i=t.children(e),a=t.node(e),s=a?a.borderLeft:void 0,l=a?a.borderRight:void 0,u={};s&&(i=Yr(i,function(g){return g!==s&&g!==l}));var h=hie(t,i);Ae(h,function(g){if(t.children(g.v).length){var y=vR(t,g.v,r,n);u[g.v]=y,Object.prototype.hasOwnProperty.call(y,"barycenter")&&mIe(g,y)}});var f=die(h,r);pIe(f,u);var d=gie(f,n);if(s&&(d.vs=qr([s,d.vs,l]),t.predecessors(s).length)){var p=t.node(t.predecessors(s)[0]),m=t.node(t.predecessors(l)[0]);Object.prototype.hasOwnProperty.call(d,"barycenter")||(d.barycenter=0,d.weight=0),d.barycenter=(d.barycenter*d.weight+p.order+m.order)/(d.weight+2),d.weight+=2}return d}function pIe(t,e){Ae(t,function(r){r.vs=qr(r.vs.map(function(n){return e[n]?e[n].vs:n}))})}function mIe(t,e){mr(t.barycenter)?(t.barycenter=e.barycenter,t.weight=e.weight):(t.barycenter=(t.barycenter*t.weight+e.barycenter*e.weight)/(t.weight+e.weight),t.weight+=e.weight)}var vie=N(()=>{"use strict";qt();fie();pie();yie();o(vR,"sortSubgraph");o(pIe,"expandSubgraphs");o(mIe,"mergeBarycenters")});function wie(t){var e=tR(t),r=xie(t,Vo(1,e+1),"inEdges"),n=xie(t,Vo(e-1,-1,-1),"outEdges"),i=cie(t);bie(t,i);for(var a=Number.POSITIVE_INFINITY,s,l=0,u=0;u<4;++l,++u){gIe(l%2?r:n,l%4>=2),i=af(t);var h=oie(t,i);h{"use strict";qt();Uo();Ac();iie();sie();lie();uie();vie();o(wie,"order");o(xie,"buildLayerGraphs");o(gIe,"sweepLayerGraphs");o(bie,"assignOrder")});function kie(t){var e=vIe(t);Ae(t.graph().dummyChains,function(r){for(var n=t.node(r),i=n.edgeObj,a=yIe(t,e,i.v,i.w),s=a.path,l=a.lca,u=0,h=s[u],f=!0;r!==i.w;){if(n=t.node(r),f){for(;(h=s[u])!==l&&t.node(h).maxRanks||l>e[u].lim));for(h=u,u=n;(u=t.parent(u))!==h;)a.push(u);return{path:i.concat(a.reverse()),lca:h}}function vIe(t){var e={},r=0;function n(i){var a=r;Ae(t.children(i),n),e[i]={low:a,lim:r++}}return o(n,"dfs"),Ae(t.children(),n),e}var Eie=N(()=>{"use strict";qt();o(kie,"parentDummyChains");o(yIe,"findPath");o(vIe,"postorder")});function xIe(t,e){var r={};function n(i,a){var s=0,l=0,u=i.length,h=ga(a);return Ae(a,function(f,d){var p=wIe(t,f),m=p?t.node(p).order:u;(p||f===h)&&(Ae(a.slice(l,d+1),function(g){Ae(t.predecessors(g),function(y){var v=t.node(y),x=v.order;(xh)&&Sie(r,p,f)})})}o(n,"scan");function i(a,s){var l=-1,u,h=0;return Ae(s,function(f,d){if(t.node(f).dummy==="border"){var p=t.predecessors(f);p.length&&(u=t.node(p[0]).order,n(s,h,d,l,u),h=d,l=u)}n(s,h,s.length,u,a.length)}),s}return o(i,"visitLayer"),Xr(e,i),r}function wIe(t,e){if(t.node(e).dummy)return ns(t.predecessors(e),function(r){return t.node(r).dummy})}function Sie(t,e,r){if(e>r){var n=e;e=r,r=n}var i=t[e];i||(t[e]=i={}),i[r]=!0}function TIe(t,e,r){if(e>r){var n=e;e=r,r=n}return!!t[e]&&Object.prototype.hasOwnProperty.call(t[e],r)}function kIe(t,e,r,n){var i={},a={},s={};return Ae(e,function(l){Ae(l,function(u,h){i[u]=u,a[u]=u,s[u]=h})}),Ae(e,function(l){var u=-1;Ae(l,function(h){var f=n(h);if(f.length){f=Sc(f,function(y){return s[y]});for(var d=(f.length-1)/2,p=Math.floor(d),m=Math.ceil(d);p<=m;++p){var g=f[p];a[h]===h&&u{"use strict";qt();Uo();Ac();o(xIe,"findType1Conflicts");o(bIe,"findType2Conflicts");o(wIe,"findOtherInnerSegmentNode");o(Sie,"addConflict");o(TIe,"hasConflict");o(kIe,"verticalAlignment");o(EIe,"horizontalCompaction");o(SIe,"buildBlockGraph");o(CIe,"findSmallestWidthAlignment");o(AIe,"alignCoordinates");o(_Ie,"balance");o(Cie,"positionX");o(DIe,"sep");o(LIe,"width")});function _ie(t){t=sk(t),RIe(t),FL(Cie(t),function(e,r){t.node(r).x=e})}function RIe(t){var e=af(t),r=t.graph().ranksep,n=0;Ae(e,function(i){var a=Ps(Je(i,function(s){return t.node(s).height}));Ae(i,function(s){t.node(s).y=n+a/2}),n+=a+r})}var Die=N(()=>{"use strict";qt();Ac();Aie();o(_ie,"position");o(RIe,"positionY")});function F2(t,e){var r=e&&e.debugTiming?Tne:kne;r("layout",()=>{var n=r(" buildLayoutGraph",()=>VIe(t));r(" runLayout",()=>NIe(n,r)),r(" updateInputGraph",()=>MIe(t,n))})}function NIe(t,e){e(" makeSpaceForEdgeLabels",()=>UIe(t)),e(" removeSelfEdges",()=>ZIe(t)),e(" acyclic",()=>mne(t)),e(" nestingGraph.run",()=>Jne(t)),e(" rank",()=>gR(sk(t))),e(" injectEdgeLabelProxies",()=>HIe(t)),e(" removeEmptyRanks",()=>bne(t)),e(" nestingGraph.cleanup",()=>tie(t)),e(" normalizeRanks",()=>xne(t)),e(" assignRankMinMax",()=>WIe(t)),e(" removeEdgeLabelProxies",()=>qIe(t)),e(" normalize.run",()=>Nne(t)),e(" parentDummyChains",()=>kie(t)),e(" addBorderSegments",()=>Sne(t)),e(" order",()=>wie(t)),e(" insertSelfEdges",()=>JIe(t)),e(" adjustCoordinateSystem",()=>_ne(t)),e(" position",()=>_ie(t)),e(" positionSelfEdges",()=>eOe(t)),e(" removeBorderNodes",()=>QIe(t)),e(" normalize.undo",()=>Mne(t)),e(" fixupEdgeLabelCoords",()=>jIe(t)),e(" undoCoordinateSystem",()=>Dne(t)),e(" translateGraph",()=>YIe(t)),e(" assignNodeIntersects",()=>XIe(t)),e(" reversePoints",()=>KIe(t)),e(" acyclic.undo",()=>gne(t))}function MIe(t,e){Ae(t.nodes(),function(r){var n=t.node(r),i=e.node(r);n&&(n.x=i.x,n.y=i.y,e.children(r).length&&(n.width=i.width,n.height=i.height))}),Ae(t.edges(),function(r){var n=t.edge(r),i=e.edge(r);n.points=i.points,Object.prototype.hasOwnProperty.call(i,"x")&&(n.x=i.x,n.y=i.y)}),t.graph().width=e.graph().width,t.graph().height=e.graph().height}function VIe(t){var e=new sn({multigraph:!0,compound:!0}),r=bR(t.graph());return e.setGraph(Vh({},OIe,xR(r,IIe),jd(r,PIe))),Ae(t.nodes(),function(n){var i=bR(t.node(n));e.setNode(n,tf(xR(i,BIe),FIe)),e.setParent(n,t.parent(n))}),Ae(t.edges(),function(n){var i=bR(t.edge(n));e.setEdge(n,Vh({},zIe,xR(i,$Ie),jd(i,GIe)))}),e}function UIe(t){var e=t.graph();e.ranksep/=2,Ae(t.edges(),function(r){var n=t.edge(r);n.minlen*=2,n.labelpos.toLowerCase()!=="c"&&(e.rankdir==="TB"||e.rankdir==="BT"?n.width+=n.labeloffset:n.height+=n.labeloffset)})}function HIe(t){Ae(t.edges(),function(e){var r=t.edge(e);if(r.width&&r.height){var n=t.node(e.v),i=t.node(e.w),a={rank:(i.rank-n.rank)/2+n.rank,e};Cc(t,"edge-proxy",a,"_ep")}})}function WIe(t){var e=0;Ae(t.nodes(),function(r){var n=t.node(r);n.borderTop&&(n.minRank=t.node(n.borderTop).rank,n.maxRank=t.node(n.borderBottom).rank,e=Ps(e,n.maxRank))}),t.graph().maxRank=e}function qIe(t){Ae(t.nodes(),function(e){var r=t.node(e);r.dummy==="edge-proxy"&&(t.edge(r.e).labelRank=r.rank,t.removeNode(e))})}function YIe(t){var e=Number.POSITIVE_INFINITY,r=0,n=Number.POSITIVE_INFINITY,i=0,a=t.graph(),s=a.marginx||0,l=a.marginy||0;function u(h){var f=h.x,d=h.y,p=h.width,m=h.height;e=Math.min(e,f-p/2),r=Math.max(r,f+p/2),n=Math.min(n,d-m/2),i=Math.max(i,d+m/2)}o(u,"getExtremes"),Ae(t.nodes(),function(h){u(t.node(h))}),Ae(t.edges(),function(h){var f=t.edge(h);Object.prototype.hasOwnProperty.call(f,"x")&&u(f)}),e-=s,n-=l,Ae(t.nodes(),function(h){var f=t.node(h);f.x-=e,f.y-=n}),Ae(t.edges(),function(h){var f=t.edge(h);Ae(f.points,function(d){d.x-=e,d.y-=n}),Object.prototype.hasOwnProperty.call(f,"x")&&(f.x-=e),Object.prototype.hasOwnProperty.call(f,"y")&&(f.y-=n)}),a.width=r-e+s,a.height=i-n+l}function XIe(t){Ae(t.edges(),function(e){var r=t.edge(e),n=t.node(e.v),i=t.node(e.w),a,s;r.points?(a=r.points[0],s=r.points[r.points.length-1]):(r.points=[],a=i,s=n),r.points.unshift(JL(n,a)),r.points.push(JL(i,s))})}function jIe(t){Ae(t.edges(),function(e){var r=t.edge(e);if(Object.prototype.hasOwnProperty.call(r,"x"))switch((r.labelpos==="l"||r.labelpos==="r")&&(r.width-=r.labeloffset),r.labelpos){case"l":r.x-=r.width/2+r.labeloffset;break;case"r":r.x+=r.width/2+r.labeloffset;break}})}function KIe(t){Ae(t.edges(),function(e){var r=t.edge(e);r.reversed&&r.points.reverse()})}function QIe(t){Ae(t.nodes(),function(e){if(t.children(e).length){var r=t.node(e),n=t.node(r.borderTop),i=t.node(r.borderBottom),a=t.node(ga(r.borderLeft)),s=t.node(ga(r.borderRight));r.width=Math.abs(s.x-a.x),r.height=Math.abs(i.y-n.y),r.x=a.x+r.width/2,r.y=n.y+r.height/2}}),Ae(t.nodes(),function(e){t.node(e).dummy==="border"&&t.removeNode(e)})}function ZIe(t){Ae(t.edges(),function(e){if(e.v===e.w){var r=t.node(e.v);r.selfEdges||(r.selfEdges=[]),r.selfEdges.push({e,label:t.edge(e)}),t.removeEdge(e)}})}function JIe(t){var e=af(t);Ae(e,function(r){var n=0;Ae(r,function(i,a){var s=t.node(i);s.order=a+n,Ae(s.selfEdges,function(l){Cc(t,"selfedge",{width:l.label.width,height:l.label.height,rank:s.rank,order:a+ ++n,e:l.e,label:l.label},"_se")}),delete s.selfEdges})})}function eOe(t){Ae(t.nodes(),function(e){var r=t.node(e);if(r.dummy==="selfedge"){var n=t.node(r.e.v),i=n.x+n.width/2,a=n.y,s=r.x-i,l=n.height/2;t.setEdge(r.e,r.label),t.removeNode(e),r.label.points=[{x:i+2*s/3,y:a-l},{x:i+5*s/6,y:a-l},{x:i+s,y:a},{x:i+5*s/6,y:a+l},{x:i+2*s/3,y:a+l}],r.label.x=r.x,r.label.y=r.y}})}function xR(t,e){return Yd(jd(t,e),Number)}function bR(t){var e={};return Ae(t,function(r,n){e[n.toLowerCase()]=r}),e}var IIe,OIe,PIe,BIe,FIe,$Ie,zIe,GIe,Lie=N(()=>{"use strict";qt();Uo();Cne();Rne();ZL();iR();yR();rie();Tie();Eie();Die();Ac();o(F2,"layout");o(NIe,"runLayout");o(MIe,"updateInputGraph");IIe=["nodesep","edgesep","ranksep","marginx","marginy"],OIe={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},PIe=["acyclicer","ranker","rankdir","align"],BIe=["width","height"],FIe={width:0,height:0},$Ie=["minlen","weight","width","height","labeloffset"],zIe={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},GIe=["labelpos"];o(VIe,"buildLayoutGraph");o(UIe,"makeSpaceForEdgeLabels");o(HIe,"injectEdgeLabelProxies");o(WIe,"assignRankMinMax");o(qIe,"removeEdgeLabelProxies");o(YIe,"translateGraph");o(XIe,"assignNodeIntersects");o(jIe,"fixupEdgeLabelCoords");o(KIe,"reversePointsForReversedEdges");o(QIe,"removeBorderNodes");o(ZIe,"removeSelfEdges");o(JIe,"insertSelfEdges");o(eOe,"positionSelfEdges");o(xR,"selectNumberAttrs");o(bR,"canonicalize")});var wR=N(()=>{"use strict";ZL();Lie();iR();yR()});function Ho(t){var e={options:{directed:t.isDirected(),multigraph:t.isMultigraph(),compound:t.isCompound()},nodes:tOe(t),edges:rOe(t)};return mr(t.graph())||(e.value=an(t.graph())),e}function tOe(t){return Je(t.nodes(),function(e){var r=t.node(e),n=t.parent(e),i={v:e};return mr(r)||(i.value=r),mr(n)||(i.parent=n),i})}function rOe(t){return Je(t.edges(),function(e){var r=t.edge(e),n={v:e.v,w:e.w};return mr(e.name)||(n.name=e.name),mr(r)||(n.value=r),n})}var TR=N(()=>{"use strict";qt();nk();o(Ho,"write");o(tOe,"writeNodes");o(rOe,"writeEdges")});var wr,Jd,Mie,Iie,uk,nOe,Oie,Pie,iOe,Wm,Nie,Bie,Fie,$ie,zie,Gie=N(()=>{"use strict";vt();Uo();TR();wr=new Map,Jd=new Map,Mie=new Map,Iie=o(()=>{Jd.clear(),Mie.clear(),wr.clear()},"clear"),uk=o((t,e)=>{let r=Jd.get(e)||[];return X.trace("In isDescendant",e," ",t," = ",r.includes(t)),r.includes(t)},"isDescendant"),nOe=o((t,e)=>{let r=Jd.get(e)||[];return X.info("Descendants of ",e," is ",r),X.info("Edge is ",t),t.v===e||t.w===e?!1:r?r.includes(t.v)||uk(t.v,e)||uk(t.w,e)||r.includes(t.w):(X.debug("Tilt, ",e,",not in descendants"),!1)},"edgeInCluster"),Oie=o((t,e,r,n)=>{X.warn("Copying children of ",t,"root",n,"data",e.node(t),n);let i=e.children(t)||[];t!==n&&i.push(t),X.warn("Copying (nodes) clusterId",t,"nodes",i),i.forEach(a=>{if(e.children(a).length>0)Oie(a,e,r,n);else{let s=e.node(a);X.info("cp ",a," to ",n," with parent ",t),r.setNode(a,s),n!==e.parent(a)&&(X.warn("Setting parent",a,e.parent(a)),r.setParent(a,e.parent(a))),t!==n&&a!==t?(X.debug("Setting parent",a,t),r.setParent(a,t)):(X.info("In copy ",t,"root",n,"data",e.node(t),n),X.debug("Not Setting parent for node=",a,"cluster!==rootId",t!==n,"node!==clusterId",a!==t));let l=e.edges(a);X.debug("Copying Edges",l),l.forEach(u=>{X.info("Edge",u);let h=e.edge(u.v,u.w,u.name);X.info("Edge data",h,n);try{nOe(u,n)?(X.info("Copying as ",u.v,u.w,h,u.name),r.setEdge(u.v,u.w,h,u.name),X.info("newGraph edges ",r.edges(),r.edge(r.edges()[0]))):X.info("Skipping copy of edge ",u.v,"-->",u.w," rootId: ",n," clusterId:",t)}catch(f){X.error(f)}})}X.debug("Removing node",a),e.removeNode(a)})},"copy"),Pie=o((t,e)=>{let r=e.children(t),n=[...r];for(let i of r)Mie.set(i,t),n=[...n,...Pie(i,e)];return n},"extractDescendants"),iOe=o((t,e,r)=>{let n=t.edges().filter(u=>u.v===e||u.w===e),i=t.edges().filter(u=>u.v===r||u.w===r),a=n.map(u=>({v:u.v===e?r:u.v,w:u.w===e?e:u.w})),s=i.map(u=>({v:u.v,w:u.w}));return a.filter(u=>s.some(h=>u.v===h.v&&u.w===h.w))},"findCommonEdges"),Wm=o((t,e,r)=>{let n=e.children(t);if(X.trace("Searching children of id ",t,n),n.length<1)return t;let i;for(let a of n){let s=Wm(a,e,r),l=iOe(e,r,s);if(s)if(l.length>0)i=s;else return s}return i},"findNonClusterChild"),Nie=o(t=>!wr.has(t)||!wr.get(t).externalConnections?t:wr.has(t)?wr.get(t).id:t,"getAnchorId"),Bie=o((t,e)=>{if(!t||e>10){X.debug("Opting out, no graph ");return}else X.debug("Opting in, graph ");t.nodes().forEach(function(r){t.children(r).length>0&&(X.warn("Cluster identified",r," Replacement id in edges: ",Wm(r,t,r)),Jd.set(r,Pie(r,t)),wr.set(r,{id:Wm(r,t,r),clusterData:t.node(r)}))}),t.nodes().forEach(function(r){let n=t.children(r),i=t.edges();n.length>0?(X.debug("Cluster identified",r,Jd),i.forEach(a=>{let s=uk(a.v,r),l=uk(a.w,r);s^l&&(X.warn("Edge: ",a," leaves cluster ",r),X.warn("Descendants of XXX ",r,": ",Jd.get(r)),wr.get(r).externalConnections=!0)})):X.debug("Not a cluster ",r,Jd)});for(let r of wr.keys()){let n=wr.get(r).id,i=t.parent(n);i!==r&&wr.has(i)&&!wr.get(i).externalConnections&&(wr.get(r).id=i)}t.edges().forEach(function(r){let n=t.edge(r);X.warn("Edge "+r.v+" -> "+r.w+": "+JSON.stringify(r)),X.warn("Edge "+r.v+" -> "+r.w+": "+JSON.stringify(t.edge(r)));let i=r.v,a=r.w;if(X.warn("Fix XXX",wr,"ids:",r.v,r.w,"Translating: ",wr.get(r.v)," --- ",wr.get(r.w)),wr.get(r.v)||wr.get(r.w)){if(X.warn("Fixing and trying - removing XXX",r.v,r.w,r.name),i=Nie(r.v),a=Nie(r.w),t.removeEdge(r.v,r.w,r.name),i!==r.v){let s=t.parent(i);wr.get(s).externalConnections=!0,n.fromCluster=r.v}if(a!==r.w){let s=t.parent(a);wr.get(s).externalConnections=!0,n.toCluster=r.w}X.warn("Fix Replacing with XXX",i,a,r.name),t.setEdge(i,a,n,r.name)}}),X.warn("Adjusted Graph",Ho(t)),Fie(t,0),X.trace(wr)},"adjustClustersAndEdges"),Fie=o((t,e)=>{if(X.warn("extractor - ",e,Ho(t),t.children("D")),e>10){X.error("Bailing out");return}let r=t.nodes(),n=!1;for(let i of r){let a=t.children(i);n=n||a.length>0}if(!n){X.debug("Done, no node has children",t.nodes());return}X.debug("Nodes = ",r,e);for(let i of r)if(X.debug("Extracting node",i,wr,wr.has(i)&&!wr.get(i).externalConnections,!t.parent(i),t.node(i),t.children("D")," Depth ",e),!wr.has(i))X.debug("Not a cluster",i,e);else if(!wr.get(i).externalConnections&&t.children(i)&&t.children(i).length>0){X.warn("Cluster without external connections, without a parent and with children",i,e);let s=t.graph().rankdir==="TB"?"LR":"TB";wr.get(i)?.clusterData?.dir&&(s=wr.get(i).clusterData.dir,X.warn("Fixing dir",wr.get(i).clusterData.dir,s));let l=new sn({multigraph:!0,compound:!0}).setGraph({rankdir:s,nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}});X.warn("Old graph before copy",Ho(t)),Oie(i,t,l,i),t.setNode(i,{clusterNode:!0,id:i,clusterData:wr.get(i).clusterData,label:wr.get(i).label,graph:l}),X.warn("New graph after copy node: (",i,")",Ho(l)),X.debug("Old graph after copy",Ho(t))}else X.warn("Cluster ** ",i," **not meeting the criteria !externalConnections:",!wr.get(i).externalConnections," no parent: ",!t.parent(i)," children ",t.children(i)&&t.children(i).length>0,t.children("D"),e),X.debug(wr);r=t.nodes(),X.warn("New list of nodes",r);for(let i of r){let a=t.node(i);X.warn(" Now next level",i,a),a?.clusterNode&&Fie(a.graph,e+1)}},"extractor"),$ie=o((t,e)=>{if(e.length===0)return[];let r=Object.assign([],e);return e.forEach(n=>{let i=t.children(n),a=$ie(t,i);r=[...r,...a]}),r},"sorter"),zie=o(t=>$ie(t,t.children()),"sortNodesByHierarchy")});var Uie={};hr(Uie,{render:()=>aOe});var Vie,aOe,Hie=N(()=>{"use strict";wR();TR();Uo();sL();Ft();Gie();oT();Qw();aL();vt();_2();zt();Vie=o(async(t,e,r,n,i,a)=>{X.warn("Graph in recursive render:XAX",Ho(e),i);let s=e.graph().rankdir;X.trace("Dir in recursive render - dir:",s);let l=t.insert("g").attr("class","root");e.nodes()?X.info("Recursive render XXX",e.nodes()):X.info("No nodes found for",e),e.edges().length>0&&X.info("Recursive edges",e.edge(e.edges()[0]));let u=l.insert("g").attr("class","clusters"),h=l.insert("g").attr("class","edgePaths"),f=l.insert("g").attr("class","edgeLabels"),d=l.insert("g").attr("class","nodes");await Promise.all(e.nodes().map(async function(y){let v=e.node(y);if(i!==void 0){let x=JSON.parse(JSON.stringify(i.clusterData));X.trace(`Setting data for parent cluster XXX + L0,20`)},"requirement_arrow"),C9e=o((t,e,r)=>{let n=t.append("defs").append("marker").attr("id",r+"_"+e+"-requirement_containsStart").attr("refX",0).attr("refY",10).attr("markerWidth",20).attr("markerHeight",20).attr("orient","auto").append("g");n.append("circle").attr("cx",10).attr("cy",10).attr("r",9).attr("fill","none"),n.append("line").attr("x1",1).attr("x2",19).attr("y1",10).attr("y2",10),n.append("line").attr("y1",1).attr("y2",19).attr("x1",10).attr("x2",10)},"requirement_contains"),A9e={extension:f9e,composition:d9e,aggregation:p9e,dependency:m9e,lollipop:g9e,point:y9e,circle:v9e,cross:x9e,barb:b9e,only_one:T9e,zero_or_one:w9e,one_or_more:k9e,zero_or_more:E9e,requirement_arrow:S9e,requirement_contains:C9e},dw=h9e});async function Am(t,e,r){let n,i;e.shape==="rect"&&(e.rx&&e.ry?e.shape="roundedRect":e.shape="squareRect");let a=e.shape?IL[e.shape]:void 0;if(!a)throw new Error(`No such shape: ${e.shape}. Please check your syntax.`);if(e.link){let s;r.config.securityLevel==="sandbox"?s="_top":e.linkTarget&&(s=e.linkTarget||"_blank"),n=t.insert("svg:a").attr("xlink:href",e.link).attr("target",s??null),i=await a(n,e,r)}else i=await a(t,e,r),n=i;return e.tooltip&&i.attr("title",e.tooltip),pw.set(e.id,n),e.haveCallback&&n.attr("class",n.attr("class")+" clickable"),n}var pw,vee,xee,M2,mw=N(()=>{"use strict";yt();OL();pw=new Map;o(Am,"insertNode");vee=o((t,e)=>{pw.set(e.id,t)},"setNodeElem"),xee=o(()=>{pw.clear()},"clear"),M2=o(t=>{let e=pw.get(t.id);X.trace("Transforming node",t.diff,t,"translate("+(t.x-t.width/2-5)+", "+t.width/2+")");let r=8,n=t.diff||0;return t.clusterNode?e.attr("transform","translate("+(t.x+n-t.width/2)+", "+(t.y-t.height/2-r)+")"):e.attr("transform","translate("+t.x+", "+t.y+")"),n},"positionNode")});var bee,Tee=N(()=>{"use strict";mi();pr();yt();aw();BL();FL();mw();Ft();er();bee={common:Ze,getConfig:tr,insertCluster:Cm,insertEdge:fw,insertEdgeLabel:uw,insertMarkers:dw,insertNode:Am,interpolateToCurve:A9,labelHelper:mt,log:X,positionEdgeLabel:hw}});function D9e(t){return typeof t=="symbol"||ii(t)&&fa(t)==_9e}var _9e,oo,Wd=N(()=>{"use strict";Au();Oo();_9e="[object Symbol]";o(D9e,"isSymbol");oo=D9e});function L9e(t,e){for(var r=-1,n=t==null?0:t.length,i=Array(n);++r{"use strict";o(L9e,"arrayMap");Bs=L9e});function Eee(t){if(typeof t=="string")return t;if(Pt(t))return Bs(t,Eee)+"";if(oo(t))return kee?kee.call(t):"";var e=t+"";return e=="0"&&1/t==-R9e?"-0":e}var R9e,wee,kee,See,Cee=N(()=>{"use strict";Md();qd();Wn();Wd();R9e=1/0,wee=ea?ea.prototype:void 0,kee=wee?wee.toString:void 0;o(Eee,"baseToString");See=Eee});function M9e(t){for(var e=t.length;e--&&N9e.test(t.charAt(e)););return e}var N9e,Aee,_ee=N(()=>{"use strict";N9e=/\s/;o(M9e,"trimmedEndIndex");Aee=M9e});function O9e(t){return t&&t.slice(0,Aee(t)+1).replace(I9e,"")}var I9e,Dee,Lee=N(()=>{"use strict";_ee();I9e=/^\s+/;o(O9e,"baseTrim");Dee=O9e});function z9e(t){if(typeof t=="number")return t;if(oo(t))return Ree;if(bn(t)){var e=typeof t.valueOf=="function"?t.valueOf():t;t=bn(e)?e+"":e}if(typeof t!="string")return t===0?t:+t;t=Dee(t);var r=B9e.test(t);return r||F9e.test(t)?$9e(t.slice(2),r?2:8):P9e.test(t)?Ree:+t}var Ree,P9e,B9e,F9e,$9e,Nee,Mee=N(()=>{"use strict";Lee();no();Wd();Ree=NaN,P9e=/^[-+]0x[0-9a-f]+$/i,B9e=/^0b[01]+$/i,F9e=/^0o[0-7]+$/i,$9e=parseInt;o(z9e,"toNumber");Nee=z9e});function V9e(t){if(!t)return t===0?t:0;if(t=Nee(t),t===Iee||t===-Iee){var e=t<0?-1:1;return e*G9e}return t===t?t:0}var Iee,G9e,_m,$L=N(()=>{"use strict";Mee();Iee=1/0,G9e=17976931348623157e292;o(V9e,"toFinite");_m=V9e});function U9e(t){var e=_m(t),r=e%1;return e===e?r?e-r:e:0}var kc,Dm=N(()=>{"use strict";$L();o(U9e,"toInteger");kc=U9e});var H9e,gw,Oee=N(()=>{"use strict";Ph();Mo();H9e=Ls(hi,"WeakMap"),gw=H9e});function W9e(){}var ai,zL=N(()=>{"use strict";o(W9e,"noop");ai=W9e});function q9e(t,e){for(var r=-1,n=t==null?0:t.length;++r{"use strict";o(q9e,"arrayEach");yw=q9e});function Y9e(t,e,r,n){for(var i=t.length,a=r+(n?1:-1);n?a--:++a{"use strict";o(Y9e,"baseFindIndex");vw=Y9e});function X9e(t){return t!==t}var Pee,Bee=N(()=>{"use strict";o(X9e,"baseIsNaN");Pee=X9e});function j9e(t,e,r){for(var n=r-1,i=t.length;++n{"use strict";o(j9e,"strictIndexOf");Fee=j9e});function K9e(t,e,r){return e===e?Fee(t,e,r):vw(t,Pee,r)}var Lm,xw=N(()=>{"use strict";VL();Bee();$ee();o(K9e,"baseIndexOf");Lm=K9e});function Q9e(t,e){var r=t==null?0:t.length;return!!r&&Lm(t,e,0)>-1}var bw,UL=N(()=>{"use strict";xw();o(Q9e,"arrayIncludes");bw=Q9e});var Z9e,zee,Gee=N(()=>{"use strict";p9();Z9e=mT(Object.keys,Object),zee=Z9e});function tLe(t){if(!mc(t))return zee(t);var e=[];for(var r in Object(t))eLe.call(t,r)&&r!="constructor"&&e.push(r);return e}var J9e,eLe,Rm,Tw=N(()=>{"use strict";um();Gee();J9e=Object.prototype,eLe=J9e.hasOwnProperty;o(tLe,"baseKeys");Rm=tLe});function rLe(t){return fi(t)?bT(t):Rm(t)}var zr,Ec=N(()=>{"use strict";x9();Tw();Po();o(rLe,"keys");zr=rLe});var nLe,iLe,aLe,pa,Vee=N(()=>{"use strict";pm();Fd();k9();Po();um();Ec();nLe=Object.prototype,iLe=nLe.hasOwnProperty,aLe=kT(function(t,e){if(mc(e)||fi(e)){$o(e,zr(e),t);return}for(var r in e)iLe.call(e,r)&&gc(t,r,e[r])}),pa=aLe});function lLe(t,e){if(Pt(t))return!1;var r=typeof t;return r=="number"||r=="symbol"||r=="boolean"||t==null||oo(t)?!0:oLe.test(t)||!sLe.test(t)||e!=null&&t in Object(e)}var sLe,oLe,Nm,ww=N(()=>{"use strict";Wn();Wd();sLe=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,oLe=/^\w*$/;o(lLe,"isKey");Nm=lLe});function uLe(t){var e=rm(t,function(n){return r.size===cLe&&r.clear(),n}),r=e.cache;return e}var cLe,Uee,Hee=N(()=>{"use strict";o9();cLe=500;o(uLe,"memoizeCapped");Uee=uLe});var hLe,fLe,dLe,Wee,qee=N(()=>{"use strict";Hee();hLe=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,fLe=/\\(\\)?/g,dLe=Uee(function(t){var e=[];return t.charCodeAt(0)===46&&e.push(""),t.replace(hLe,function(r,n,i,a){e.push(i?a.replace(fLe,"$1"):n||r)}),e}),Wee=dLe});function pLe(t){return t==null?"":See(t)}var kw,HL=N(()=>{"use strict";Cee();o(pLe,"toString");kw=pLe});function mLe(t,e){return Pt(t)?t:Nm(t,e)?[t]:Wee(kw(t))}var Jh,I2=N(()=>{"use strict";Wn();ww();qee();HL();o(mLe,"castPath");Jh=mLe});function yLe(t){if(typeof t=="string"||oo(t))return t;var e=t+"";return e=="0"&&1/t==-gLe?"-0":e}var gLe,Sc,Mm=N(()=>{"use strict";Wd();gLe=1/0;o(yLe,"toKey");Sc=yLe});function vLe(t,e){e=Jh(e,t);for(var r=0,n=e.length;t!=null&&r{"use strict";I2();Mm();o(vLe,"baseGet");ef=vLe});function xLe(t,e,r){var n=t==null?void 0:ef(t,e);return n===void 0?r:n}var Yee,Xee=N(()=>{"use strict";O2();o(xLe,"get");Yee=xLe});function bLe(t,e){for(var r=-1,n=e.length,i=t.length;++r{"use strict";o(bLe,"arrayPush");Im=bLe});function TLe(t){return Pt(t)||Dl(t)||!!(jee&&t&&t[jee])}var jee,Kee,Qee=N(()=>{"use strict";Md();hm();Wn();jee=ea?ea.isConcatSpreadable:void 0;o(TLe,"isFlattenable");Kee=TLe});function Zee(t,e,r,n,i){var a=-1,s=t.length;for(r||(r=Kee),i||(i=[]);++a0&&r(l)?e>1?Zee(l,e-1,r,n,i):Im(i,l):n||(i[i.length]=l)}return i}var Cc,Om=N(()=>{"use strict";Ew();Qee();o(Zee,"baseFlatten");Cc=Zee});function wLe(t){var e=t==null?0:t.length;return e?Cc(t,1):[]}var qr,Sw=N(()=>{"use strict";Om();o(wLe,"flatten");qr=wLe});function kLe(t){return wT(TT(t,void 0,qr),t+"")}var Jee,ete=N(()=>{"use strict";Sw();b9();w9();o(kLe,"flatRest");Jee=kLe});function ELe(t,e,r){var n=-1,i=t.length;e<0&&(e=-e>i?0:i+e),r=r>i?i:r,r<0&&(r+=i),i=e>r?0:r-e>>>0,e>>>=0;for(var a=Array(i);++n{"use strict";o(ELe,"baseSlice");Cw=ELe});function MLe(t){return NLe.test(t)}var SLe,CLe,ALe,_Le,DLe,LLe,RLe,NLe,tte,rte=N(()=>{"use strict";SLe="\\ud800-\\udfff",CLe="\\u0300-\\u036f",ALe="\\ufe20-\\ufe2f",_Le="\\u20d0-\\u20ff",DLe=CLe+ALe+_Le,LLe="\\ufe0e\\ufe0f",RLe="\\u200d",NLe=RegExp("["+RLe+SLe+DLe+LLe+"]");o(MLe,"hasUnicode");tte=MLe});function ILe(t,e,r,n){var i=-1,a=t==null?0:t.length;for(n&&a&&(r=t[++i]);++i{"use strict";o(ILe,"arrayReduce");nte=ILe});function OLe(t,e){return t&&$o(e,zr(e),t)}var ate,ste=N(()=>{"use strict";Fd();Ec();o(OLe,"baseAssign");ate=OLe});function PLe(t,e){return t&&$o(e,Rs(e),t)}var ote,lte=N(()=>{"use strict";Fd();Uh();o(PLe,"baseAssignIn");ote=PLe});function BLe(t,e){for(var r=-1,n=t==null?0:t.length,i=0,a=[];++r{"use strict";o(BLe,"arrayFilter");Pm=BLe});function FLe(){return[]}var _w,qL=N(()=>{"use strict";o(FLe,"stubArray");_w=FLe});var $Le,zLe,cte,GLe,Bm,Dw=N(()=>{"use strict";Aw();qL();$Le=Object.prototype,zLe=$Le.propertyIsEnumerable,cte=Object.getOwnPropertySymbols,GLe=cte?function(t){return t==null?[]:(t=Object(t),Pm(cte(t),function(e){return zLe.call(t,e)}))}:_w,Bm=GLe});function VLe(t,e){return $o(t,Bm(t),e)}var ute,hte=N(()=>{"use strict";Fd();Dw();o(VLe,"copySymbols");ute=VLe});var ULe,HLe,Lw,YL=N(()=>{"use strict";Ew();gT();Dw();qL();ULe=Object.getOwnPropertySymbols,HLe=ULe?function(t){for(var e=[];t;)Im(e,Bm(t)),t=cm(t);return e}:_w,Lw=HLe});function WLe(t,e){return $o(t,Lw(t),e)}var fte,dte=N(()=>{"use strict";Fd();YL();o(WLe,"copySymbolsIn");fte=WLe});function qLe(t,e,r){var n=e(t);return Pt(t)?n:Im(n,r(t))}var Rw,XL=N(()=>{"use strict";Ew();Wn();o(qLe,"baseGetAllKeys");Rw=qLe});function YLe(t){return Rw(t,zr,Bm)}var P2,jL=N(()=>{"use strict";XL();Dw();Ec();o(YLe,"getAllKeys");P2=YLe});function XLe(t){return Rw(t,Rs,Lw)}var Nw,KL=N(()=>{"use strict";XL();YL();Uh();o(XLe,"getAllKeysIn");Nw=XLe});var jLe,Mw,pte=N(()=>{"use strict";Ph();Mo();jLe=Ls(hi,"DataView"),Mw=jLe});var KLe,Iw,mte=N(()=>{"use strict";Ph();Mo();KLe=Ls(hi,"Promise"),Iw=KLe});var QLe,tf,QL=N(()=>{"use strict";Ph();Mo();QLe=Ls(hi,"Set"),tf=QLe});var gte,ZLe,yte,vte,xte,bte,JLe,eRe,tRe,rRe,nRe,Yd,lo,Xd=N(()=>{"use strict";pte();lT();mte();QL();Oee();Au();i9();gte="[object Map]",ZLe="[object Object]",yte="[object Promise]",vte="[object Set]",xte="[object WeakMap]",bte="[object DataView]",JLe=_u(Mw),eRe=_u($h),tRe=_u(Iw),rRe=_u(tf),nRe=_u(gw),Yd=fa;(Mw&&Yd(new Mw(new ArrayBuffer(1)))!=bte||$h&&Yd(new $h)!=gte||Iw&&Yd(Iw.resolve())!=yte||tf&&Yd(new tf)!=vte||gw&&Yd(new gw)!=xte)&&(Yd=o(function(t){var e=fa(t),r=e==ZLe?t.constructor:void 0,n=r?_u(r):"";if(n)switch(n){case JLe:return bte;case eRe:return gte;case tRe:return yte;case rRe:return vte;case nRe:return xte}return e},"getTag"));lo=Yd});function sRe(t){var e=t.length,r=new t.constructor(e);return e&&typeof t[0]=="string"&&aRe.call(t,"index")&&(r.index=t.index,r.input=t.input),r}var iRe,aRe,Tte,wte=N(()=>{"use strict";iRe=Object.prototype,aRe=iRe.hasOwnProperty;o(sRe,"initCloneArray");Tte=sRe});function oRe(t,e){var r=e?lm(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)}var kte,Ete=N(()=>{"use strict";fT();o(oRe,"cloneDataView");kte=oRe});function cRe(t){var e=new t.constructor(t.source,lRe.exec(t));return e.lastIndex=t.lastIndex,e}var lRe,Ste,Cte=N(()=>{"use strict";lRe=/\w*$/;o(cRe,"cloneRegExp");Ste=cRe});function uRe(t){return _te?Object(_te.call(t)):{}}var Ate,_te,Dte,Lte=N(()=>{"use strict";Md();Ate=ea?ea.prototype:void 0,_te=Ate?Ate.valueOf:void 0;o(uRe,"cloneSymbol");Dte=uRe});function LRe(t,e,r){var n=t.constructor;switch(e){case xRe:return lm(t);case hRe:case fRe:return new n(+t);case bRe:return kte(t,r);case TRe:case wRe:case kRe:case ERe:case SRe:case CRe:case ARe:case _Re:case DRe:return dT(t,r);case dRe:return new n;case pRe:case yRe:return new n(t);case mRe:return Ste(t);case gRe:return new n;case vRe:return Dte(t)}}var hRe,fRe,dRe,pRe,mRe,gRe,yRe,vRe,xRe,bRe,TRe,wRe,kRe,ERe,SRe,CRe,ARe,_Re,DRe,Rte,Nte=N(()=>{"use strict";fT();Ete();Cte();Lte();f9();hRe="[object Boolean]",fRe="[object Date]",dRe="[object Map]",pRe="[object Number]",mRe="[object RegExp]",gRe="[object Set]",yRe="[object String]",vRe="[object Symbol]",xRe="[object ArrayBuffer]",bRe="[object DataView]",TRe="[object Float32Array]",wRe="[object Float64Array]",kRe="[object Int8Array]",ERe="[object Int16Array]",SRe="[object Int32Array]",CRe="[object Uint8Array]",ARe="[object Uint8ClampedArray]",_Re="[object Uint16Array]",DRe="[object Uint32Array]";o(LRe,"initCloneByTag");Rte=LRe});function NRe(t){return ii(t)&&lo(t)==RRe}var RRe,Mte,Ite=N(()=>{"use strict";Xd();Oo();RRe="[object Map]";o(NRe,"baseIsMap");Mte=NRe});var Ote,MRe,Pte,Bte=N(()=>{"use strict";Ite();Bd();h2();Ote=Fo&&Fo.isMap,MRe=Ote?Bo(Ote):Mte,Pte=MRe});function ORe(t){return ii(t)&&lo(t)==IRe}var IRe,Fte,$te=N(()=>{"use strict";Xd();Oo();IRe="[object Set]";o(ORe,"baseIsSet");Fte=ORe});var zte,PRe,Gte,Vte=N(()=>{"use strict";$te();Bd();h2();zte=Fo&&Fo.isSet,PRe=zte?Bo(zte):Fte,Gte=PRe});function Ow(t,e,r,n,i,a){var s,l=e&BRe,u=e&FRe,h=e&$Re;if(r&&(s=i?r(t,n,i,a):r(t)),s!==void 0)return s;if(!bn(t))return t;var f=Pt(t);if(f){if(s=Tte(t),!l)return pT(t,s)}else{var d=lo(t),p=d==Hte||d==HRe;if(Ll(t))return hT(t,l);if(d==Wte||d==Ute||p&&!i){if(s=u||p?{}:yT(t),!l)return u?fte(t,ote(s,t)):ute(t,ate(s,t))}else{if(!_n[d])return i?t:{};s=Rte(t,d,l)}}a||(a=new dc);var m=a.get(t);if(m)return m;a.set(t,s),Gte(t)?t.forEach(function(v){s.add(Ow(v,e,r,v,t,a))}):Pte(t)&&t.forEach(function(v,x){s.set(x,Ow(v,e,r,x,t,a))});var g=h?u?Nw:P2:u?Rs:zr,y=f?void 0:g(t);return yw(y||t,function(v,x){y&&(x=v,v=t[x]),gc(s,x,Ow(v,e,r,x,t,a))}),s}var BRe,FRe,$Re,Ute,zRe,GRe,VRe,URe,Hte,HRe,WRe,qRe,Wte,YRe,XRe,jRe,KRe,QRe,ZRe,JRe,eNe,tNe,rNe,nNe,iNe,aNe,sNe,oNe,lNe,_n,Pw,ZL=N(()=>{"use strict";l2();GL();pm();ste();lte();u9();d9();hte();dte();jL();KL();Xd();wte();Nte();m9();Wn();dm();Bte();no();Vte();Ec();Uh();BRe=1,FRe=2,$Re=4,Ute="[object Arguments]",zRe="[object Array]",GRe="[object Boolean]",VRe="[object Date]",URe="[object Error]",Hte="[object Function]",HRe="[object GeneratorFunction]",WRe="[object Map]",qRe="[object Number]",Wte="[object Object]",YRe="[object RegExp]",XRe="[object Set]",jRe="[object String]",KRe="[object Symbol]",QRe="[object WeakMap]",ZRe="[object ArrayBuffer]",JRe="[object DataView]",eNe="[object Float32Array]",tNe="[object Float64Array]",rNe="[object Int8Array]",nNe="[object Int16Array]",iNe="[object Int32Array]",aNe="[object Uint8Array]",sNe="[object Uint8ClampedArray]",oNe="[object Uint16Array]",lNe="[object Uint32Array]",_n={};_n[Ute]=_n[zRe]=_n[ZRe]=_n[JRe]=_n[GRe]=_n[VRe]=_n[eNe]=_n[tNe]=_n[rNe]=_n[nNe]=_n[iNe]=_n[WRe]=_n[qRe]=_n[Wte]=_n[YRe]=_n[XRe]=_n[jRe]=_n[KRe]=_n[aNe]=_n[sNe]=_n[oNe]=_n[lNe]=!0;_n[URe]=_n[Hte]=_n[QRe]=!1;o(Ow,"baseClone");Pw=Ow});function uNe(t){return Pw(t,cNe)}var cNe,an,JL=N(()=>{"use strict";ZL();cNe=4;o(uNe,"clone");an=uNe});function dNe(t){return Pw(t,hNe|fNe)}var hNe,fNe,eR,qte=N(()=>{"use strict";ZL();hNe=1,fNe=4;o(dNe,"cloneDeep");eR=dNe});function pNe(t){for(var e=-1,r=t==null?0:t.length,n=0,i=[];++e{"use strict";o(pNe,"compact");Ac=pNe});function gNe(t){return this.__data__.set(t,mNe),this}var mNe,Xte,jte=N(()=>{"use strict";mNe="__lodash_hash_undefined__";o(gNe,"setCacheAdd");Xte=gNe});function yNe(t){return this.__data__.has(t)}var Kte,Qte=N(()=>{"use strict";o(yNe,"setCacheHas");Kte=yNe});function Bw(t){var e=-1,r=t==null?0:t.length;for(this.__data__=new Od;++e{"use strict";cT();jte();Qte();o(Bw,"SetCache");Bw.prototype.add=Bw.prototype.push=Xte;Bw.prototype.has=Kte;Fm=Bw});function vNe(t,e){for(var r=-1,n=t==null?0:t.length;++r{"use strict";o(vNe,"arraySome");$w=vNe});function xNe(t,e){return t.has(e)}var $m,zw=N(()=>{"use strict";o(xNe,"cacheHas");$m=xNe});function wNe(t,e,r,n,i,a){var s=r&bNe,l=t.length,u=e.length;if(l!=u&&!(s&&u>l))return!1;var h=a.get(t),f=a.get(e);if(h&&f)return h==e&&f==t;var d=-1,p=!0,m=r&TNe?new Fm:void 0;for(a.set(t,e),a.set(e,t);++d{"use strict";Fw();tR();zw();bNe=1,TNe=2;o(wNe,"equalArrays");Gw=wNe});function kNe(t){var e=-1,r=Array(t.size);return t.forEach(function(n,i){r[++e]=[i,n]}),r}var Zte,Jte=N(()=>{"use strict";o(kNe,"mapToArray");Zte=kNe});function ENe(t){var e=-1,r=Array(t.size);return t.forEach(function(n){r[++e]=n}),r}var zm,Vw=N(()=>{"use strict";o(ENe,"setToArray");zm=ENe});function FNe(t,e,r,n,i,a,s){switch(r){case BNe:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case PNe:return!(t.byteLength!=e.byteLength||!a(new om(t),new om(e)));case ANe:case _Ne:case RNe:return Io(+t,+e);case DNe:return t.name==e.name&&t.message==e.message;case NNe:case INe:return t==e+"";case LNe:var l=Zte;case MNe:var u=n&SNe;if(l||(l=zm),t.size!=e.size&&!u)return!1;var h=s.get(t);if(h)return h==e;n|=CNe,s.set(t,e);var f=Gw(l(t),l(e),n,i,a,s);return s.delete(t),f;case ONe:if(nR)return nR.call(t)==nR.call(e)}return!1}var SNe,CNe,ANe,_Ne,DNe,LNe,RNe,NNe,MNe,INe,ONe,PNe,BNe,ere,nR,tre,rre=N(()=>{"use strict";Md();h9();Id();rR();Jte();Vw();SNe=1,CNe=2,ANe="[object Boolean]",_Ne="[object Date]",DNe="[object Error]",LNe="[object Map]",RNe="[object Number]",NNe="[object RegExp]",MNe="[object Set]",INe="[object String]",ONe="[object Symbol]",PNe="[object ArrayBuffer]",BNe="[object DataView]",ere=ea?ea.prototype:void 0,nR=ere?ere.valueOf:void 0;o(FNe,"equalByTag");tre=FNe});function VNe(t,e,r,n,i,a){var s=r&$Ne,l=P2(t),u=l.length,h=P2(e),f=h.length;if(u!=f&&!s)return!1;for(var d=u;d--;){var p=l[d];if(!(s?p in e:GNe.call(e,p)))return!1}var m=a.get(t),g=a.get(e);if(m&&g)return m==e&&g==t;var y=!0;a.set(t,e),a.set(e,t);for(var v=s;++d{"use strict";jL();$Ne=1,zNe=Object.prototype,GNe=zNe.hasOwnProperty;o(VNe,"equalObjects");nre=VNe});function WNe(t,e,r,n,i,a){var s=Pt(t),l=Pt(e),u=s?sre:lo(t),h=l?sre:lo(e);u=u==are?Uw:u,h=h==are?Uw:h;var f=u==Uw,d=h==Uw,p=u==h;if(p&&Ll(t)){if(!Ll(e))return!1;s=!0,f=!1}if(p&&!f)return a||(a=new dc),s||Gh(t)?Gw(t,e,r,n,i,a):tre(t,e,u,r,n,i,a);if(!(r&UNe)){var m=f&&ore.call(t,"__wrapped__"),g=d&&ore.call(e,"__wrapped__");if(m||g){var y=m?t.value():t,v=g?e.value():e;return a||(a=new dc),i(y,v,r,n,a)}}return p?(a||(a=new dc),nre(t,e,r,n,i,a)):!1}var UNe,are,sre,Uw,HNe,ore,lre,cre=N(()=>{"use strict";l2();rR();rre();ire();Xd();Wn();dm();f2();UNe=1,are="[object Arguments]",sre="[object Array]",Uw="[object Object]",HNe=Object.prototype,ore=HNe.hasOwnProperty;o(WNe,"baseIsEqualDeep");lre=WNe});function ure(t,e,r,n,i){return t===e?!0:t==null||e==null||!ii(t)&&!ii(e)?t!==t&&e!==e:lre(t,e,r,n,ure,i)}var Hw,iR=N(()=>{"use strict";cre();Oo();o(ure,"baseIsEqual");Hw=ure});function XNe(t,e,r,n){var i=r.length,a=i,s=!n;if(t==null)return!a;for(t=Object(t);i--;){var l=r[i];if(s&&l[2]?l[1]!==t[l[0]]:!(l[0]in t))return!1}for(;++i{"use strict";l2();iR();qNe=1,YNe=2;o(XNe,"baseIsMatch");hre=XNe});function jNe(t){return t===t&&!bn(t)}var Ww,aR=N(()=>{"use strict";no();o(jNe,"isStrictComparable");Ww=jNe});function KNe(t){for(var e=zr(t),r=e.length;r--;){var n=e[r],i=t[n];e[r]=[n,i,Ww(i)]}return e}var dre,pre=N(()=>{"use strict";aR();Ec();o(KNe,"getMatchData");dre=KNe});function QNe(t,e){return function(r){return r==null?!1:r[t]===e&&(e!==void 0||t in Object(r))}}var qw,sR=N(()=>{"use strict";o(QNe,"matchesStrictComparable");qw=QNe});function ZNe(t){var e=dre(t);return e.length==1&&e[0][2]?qw(e[0][0],e[0][1]):function(r){return r===t||hre(r,t,e)}}var mre,gre=N(()=>{"use strict";fre();pre();sR();o(ZNe,"baseMatches");mre=ZNe});function JNe(t,e){return t!=null&&e in Object(t)}var yre,vre=N(()=>{"use strict";o(JNe,"baseHasIn");yre=JNe});function eMe(t,e,r){e=Jh(e,t);for(var n=-1,i=e.length,a=!1;++n{"use strict";I2();hm();Wn();p2();vT();Mm();o(eMe,"hasPath");Yw=eMe});function tMe(t,e){return t!=null&&Yw(t,e,yre)}var Xw,lR=N(()=>{"use strict";vre();oR();o(tMe,"hasIn");Xw=tMe});function iMe(t,e){return Nm(t)&&Ww(e)?qw(Sc(t),e):function(r){var n=Yee(r,t);return n===void 0&&n===e?Xw(r,t):Hw(e,n,rMe|nMe)}}var rMe,nMe,xre,bre=N(()=>{"use strict";iR();Xee();lR();ww();aR();sR();Mm();rMe=1,nMe=2;o(iMe,"baseMatchesProperty");xre=iMe});function aMe(t){return function(e){return e?.[t]}}var jw,cR=N(()=>{"use strict";o(aMe,"baseProperty");jw=aMe});function sMe(t){return function(e){return ef(e,t)}}var Tre,wre=N(()=>{"use strict";O2();o(sMe,"basePropertyDeep");Tre=sMe});function oMe(t){return Nm(t)?jw(Sc(t)):Tre(t)}var kre,Ere=N(()=>{"use strict";cR();wre();ww();Mm();o(oMe,"property");kre=oMe});function lMe(t){return typeof t=="function"?t:t==null?ta:typeof t=="object"?Pt(t)?xre(t[0],t[1]):mre(t):kre(t)}var mn,os=N(()=>{"use strict";gre();bre();Lu();Wn();Ere();o(lMe,"baseIteratee");mn=lMe});function cMe(t,e,r,n){for(var i=-1,a=t==null?0:t.length;++i{"use strict";o(cMe,"arrayAggregator");Sre=cMe});function uMe(t,e){return t&&sm(t,e,zr)}var Gm,Kw=N(()=>{"use strict";uT();Ec();o(uMe,"baseForOwn");Gm=uMe});function hMe(t,e){return function(r,n){if(r==null)return r;if(!fi(r))return t(r,n);for(var i=r.length,a=e?i:-1,s=Object(r);(e?a--:++a{"use strict";Po();o(hMe,"createBaseEach");Are=hMe});var fMe,Fs,rf=N(()=>{"use strict";Kw();_re();fMe=Are(Gm),Fs=fMe});function dMe(t,e,r,n){return Fs(t,function(i,a,s){e(n,i,r(i),s)}),n}var Dre,Lre=N(()=>{"use strict";rf();o(dMe,"baseAggregator");Dre=dMe});function pMe(t,e){return function(r,n){var i=Pt(r)?Sre:Dre,a=e?e():{};return i(r,t,mn(n,2),a)}}var Rre,Nre=N(()=>{"use strict";Cre();Lre();os();Wn();o(pMe,"createAggregator");Rre=pMe});var mMe,Qw,Mre=N(()=>{"use strict";Mo();mMe=o(function(){return hi.Date.now()},"now"),Qw=mMe});var Ire,gMe,yMe,nf,Ore=N(()=>{"use strict";mm();Id();$d();Uh();Ire=Object.prototype,gMe=Ire.hasOwnProperty,yMe=yc(function(t,e){t=Object(t);var r=-1,n=e.length,i=n>2?e[2]:void 0;for(i&&io(e[0],e[1],i)&&(n=1);++r{"use strict";o(vMe,"arrayIncludesWith");Zw=vMe});function bMe(t,e,r,n){var i=-1,a=bw,s=!0,l=t.length,u=[],h=e.length;if(!l)return u;r&&(e=Bs(e,Bo(r))),n?(a=Zw,s=!1):e.length>=xMe&&(a=$m,s=!1,e=new Fm(e));e:for(;++i{"use strict";Fw();UL();uR();qd();Bd();zw();xMe=200;o(bMe,"baseDifference");Pre=bMe});var TMe,af,Fre=N(()=>{"use strict";Bre();Om();mm();xT();TMe=yc(function(t,e){return Pd(t)?Pre(t,Cc(e,1,Pd,!0)):[]}),af=TMe});function wMe(t){var e=t==null?0:t.length;return e?t[e-1]:void 0}var ma,$re=N(()=>{"use strict";o(wMe,"last");ma=wMe});function kMe(t,e,r){var n=t==null?0:t.length;return n?(e=r||e===void 0?1:kc(e),Cw(t,e<0?0:e,n)):[]}var bi,zre=N(()=>{"use strict";WL();Dm();o(kMe,"drop");bi=kMe});function EMe(t,e,r){var n=t==null?0:t.length;return n?(e=r||e===void 0?1:kc(e),e=n-e,Cw(t,0,e<0?0:e)):[]}var Fu,Gre=N(()=>{"use strict";WL();Dm();o(EMe,"dropRight");Fu=EMe});function SMe(t){return typeof t=="function"?t:ta}var Vm,Jw=N(()=>{"use strict";Lu();o(SMe,"castFunction");Vm=SMe});function CMe(t,e){var r=Pt(t)?yw:Fs;return r(t,Vm(e))}var Ae,ek=N(()=>{"use strict";GL();rf();Jw();Wn();o(CMe,"forEach");Ae=CMe});var Vre=N(()=>{"use strict";ek()});function AMe(t,e){for(var r=-1,n=t==null?0:t.length;++r{"use strict";o(AMe,"arrayEvery");Ure=AMe});function _Me(t,e){var r=!0;return Fs(t,function(n,i,a){return r=!!e(n,i,a),r}),r}var Wre,qre=N(()=>{"use strict";rf();o(_Me,"baseEvery");Wre=_Me});function DMe(t,e,r){var n=Pt(t)?Ure:Wre;return r&&io(t,e,r)&&(e=void 0),n(t,mn(e,3))}var Pa,Yre=N(()=>{"use strict";Hre();qre();os();Wn();$d();o(DMe,"every");Pa=DMe});function LMe(t,e){var r=[];return Fs(t,function(n,i,a){e(n,i,a)&&r.push(n)}),r}var tk,hR=N(()=>{"use strict";rf();o(LMe,"baseFilter");tk=LMe});function RMe(t,e){var r=Pt(t)?Pm:tk;return r(t,mn(e,3))}var Yr,fR=N(()=>{"use strict";Aw();hR();os();Wn();o(RMe,"filter");Yr=RMe});function NMe(t){return function(e,r,n){var i=Object(e);if(!fi(e)){var a=mn(r,3);e=zr(e),r=o(function(l){return a(i[l],l,i)},"predicate")}var s=t(e,r,n);return s>-1?i[a?e[s]:s]:void 0}}var Xre,jre=N(()=>{"use strict";os();Po();Ec();o(NMe,"createFind");Xre=NMe});function IMe(t,e,r){var n=t==null?0:t.length;if(!n)return-1;var i=r==null?0:kc(r);return i<0&&(i=MMe(n+i,0)),vw(t,mn(e,3),i)}var MMe,Kre,Qre=N(()=>{"use strict";VL();os();Dm();MMe=Math.max;o(IMe,"findIndex");Kre=IMe});var OMe,ls,Zre=N(()=>{"use strict";jre();Qre();OMe=Xre(Kre),ls=OMe});function PMe(t){return t&&t.length?t[0]:void 0}var ia,Jre=N(()=>{"use strict";o(PMe,"head");ia=PMe});var ene=N(()=>{"use strict";Jre()});function BMe(t,e){var r=-1,n=fi(t)?Array(t.length):[];return Fs(t,function(i,a,s){n[++r]=e(i,a,s)}),n}var rk,dR=N(()=>{"use strict";rf();Po();o(BMe,"baseMap");rk=BMe});function FMe(t,e){var r=Pt(t)?Bs:rk;return r(t,mn(e,3))}var Je,Um=N(()=>{"use strict";qd();os();dR();Wn();o(FMe,"map");Je=FMe});function $Me(t,e){return Cc(Je(t,e),1)}var ga,pR=N(()=>{"use strict";Om();Um();o($Me,"flatMap");ga=$Me});function zMe(t,e){return t==null?t:sm(t,Vm(e),Rs)}var mR,tne=N(()=>{"use strict";uT();Jw();Uh();o(zMe,"forIn");mR=zMe});function GMe(t,e){return t&&Gm(t,Vm(e))}var gR,rne=N(()=>{"use strict";Kw();Jw();o(GMe,"forOwn");gR=GMe});var VMe,UMe,HMe,yR,nne=N(()=>{"use strict";am();Nre();VMe=Object.prototype,UMe=VMe.hasOwnProperty,HMe=Rre(function(t,e,r){UMe.call(t,r)?t[r].push(e):pc(t,r,[e])}),yR=HMe});function WMe(t,e){return t>e}var ine,ane=N(()=>{"use strict";o(WMe,"baseGt");ine=WMe});function XMe(t,e){return t!=null&&YMe.call(t,e)}var qMe,YMe,sne,one=N(()=>{"use strict";qMe=Object.prototype,YMe=qMe.hasOwnProperty;o(XMe,"baseHas");sne=XMe});function jMe(t,e){return t!=null&&Yw(t,e,sne)}var Bt,lne=N(()=>{"use strict";one();oR();o(jMe,"has");Bt=jMe});function QMe(t){return typeof t=="string"||!Pt(t)&&ii(t)&&fa(t)==KMe}var KMe,Ti,nk=N(()=>{"use strict";Au();Wn();Oo();KMe="[object String]";o(QMe,"isString");Ti=QMe});function ZMe(t,e){return Bs(e,function(r){return t[r]})}var cne,une=N(()=>{"use strict";qd();o(ZMe,"baseValues");cne=ZMe});function JMe(t){return t==null?[]:cne(t,zr(t))}var br,vR=N(()=>{"use strict";une();Ec();o(JMe,"values");br=JMe});function tIe(t,e,r,n){t=fi(t)?t:br(t),r=r&&!n?kc(r):0;var i=t.length;return r<0&&(r=eIe(i+r,0)),Ti(t)?r<=i&&t.indexOf(e,r)>-1:!!i&&Lm(t,e,r)>-1}var eIe,Xn,hne=N(()=>{"use strict";xw();Po();nk();Dm();vR();eIe=Math.max;o(tIe,"includes");Xn=tIe});function nIe(t,e,r){var n=t==null?0:t.length;if(!n)return-1;var i=r==null?0:kc(r);return i<0&&(i=rIe(n+i,0)),Lm(t,e,i)}var rIe,ik,fne=N(()=>{"use strict";xw();Dm();rIe=Math.max;o(nIe,"indexOf");ik=nIe});function lIe(t){if(t==null)return!0;if(fi(t)&&(Pt(t)||typeof t=="string"||typeof t.splice=="function"||Ll(t)||Gh(t)||Dl(t)))return!t.length;var e=lo(t);if(e==iIe||e==aIe)return!t.size;if(mc(t))return!Rm(t).length;for(var r in t)if(oIe.call(t,r))return!1;return!0}var iIe,aIe,sIe,oIe,hr,ak=N(()=>{"use strict";Tw();Xd();hm();Wn();Po();dm();um();f2();iIe="[object Map]",aIe="[object Set]",sIe=Object.prototype,oIe=sIe.hasOwnProperty;o(lIe,"isEmpty");hr=lIe});function uIe(t){return ii(t)&&fa(t)==cIe}var cIe,dne,pne=N(()=>{"use strict";Au();Oo();cIe="[object RegExp]";o(uIe,"baseIsRegExp");dne=uIe});var mne,hIe,Uo,gne=N(()=>{"use strict";pne();Bd();h2();mne=Fo&&Fo.isRegExp,hIe=mne?Bo(mne):dne,Uo=hIe});function fIe(t){return t===void 0}var mr,yne=N(()=>{"use strict";o(fIe,"isUndefined");mr=fIe});function dIe(t,e){return t{"use strict";o(dIe,"baseLt");sk=dIe});function pIe(t,e){var r={};return e=mn(e,3),Gm(t,function(n,i,a){pc(r,i,e(n,i,a))}),r}var jd,vne=N(()=>{"use strict";am();Kw();os();o(pIe,"mapValues");jd=pIe});function mIe(t,e,r){for(var n=-1,i=t.length;++n{"use strict";Wd();o(mIe,"baseExtremum");Hm=mIe});function gIe(t){return t&&t.length?Hm(t,ta,ine):void 0}var $s,xne=N(()=>{"use strict";ok();ane();Lu();o(gIe,"max");$s=gIe});function yIe(t){return t&&t.length?Hm(t,ta,sk):void 0}var Nl,bR=N(()=>{"use strict";ok();xR();Lu();o(yIe,"min");Nl=yIe});function vIe(t,e){return t&&t.length?Hm(t,mn(e,2),sk):void 0}var Kd,bne=N(()=>{"use strict";ok();os();xR();o(vIe,"minBy");Kd=vIe});function bIe(t){if(typeof t!="function")throw new TypeError(xIe);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}var xIe,Tne,wne=N(()=>{"use strict";xIe="Expected a function";o(bIe,"negate");Tne=bIe});function TIe(t,e,r,n){if(!bn(t))return t;e=Jh(e,t);for(var i=-1,a=e.length,s=a-1,l=t;l!=null&&++i{"use strict";pm();I2();p2();no();Mm();o(TIe,"baseSet");kne=TIe});function wIe(t,e,r){for(var n=-1,i=e.length,a={};++n{"use strict";O2();Ene();I2();o(wIe,"basePickBy");lk=wIe});function kIe(t,e){if(t==null)return{};var r=Bs(Nw(t),function(n){return[n]});return e=mn(e),lk(t,r,function(n,i){return e(n,i[0])})}var zs,Sne=N(()=>{"use strict";qd();os();TR();KL();o(kIe,"pickBy");zs=kIe});function EIe(t,e){var r=t.length;for(t.sort(e);r--;)t[r]=t[r].value;return t}var Cne,Ane=N(()=>{"use strict";o(EIe,"baseSortBy");Cne=EIe});function SIe(t,e){if(t!==e){var r=t!==void 0,n=t===null,i=t===t,a=oo(t),s=e!==void 0,l=e===null,u=e===e,h=oo(e);if(!l&&!h&&!a&&t>e||a&&s&&u&&!l&&!h||n&&s&&u||!r&&u||!i)return 1;if(!n&&!a&&!h&&t{"use strict";Wd();o(SIe,"compareAscending");_ne=SIe});function CIe(t,e,r){for(var n=-1,i=t.criteria,a=e.criteria,s=i.length,l=r.length;++n=l)return u;var h=r[n];return u*(h=="desc"?-1:1)}}return t.index-e.index}var Lne,Rne=N(()=>{"use strict";Dne();o(CIe,"compareMultiple");Lne=CIe});function AIe(t,e,r){e.length?e=Bs(e,function(a){return Pt(a)?function(s){return ef(s,a.length===1?a[0]:a)}:a}):e=[ta];var n=-1;e=Bs(e,Bo(mn));var i=rk(t,function(a,s,l){var u=Bs(e,function(h){return h(a)});return{criteria:u,index:++n,value:a}});return Cne(i,function(a,s){return Lne(a,s,r)})}var Nne,Mne=N(()=>{"use strict";qd();O2();os();dR();Ane();Bd();Rne();Lu();Wn();o(AIe,"baseOrderBy");Nne=AIe});var _Ie,Ine,One=N(()=>{"use strict";cR();_Ie=jw("length"),Ine=_Ie});function zIe(t){for(var e=Pne.lastIndex=0;Pne.test(t);)++e;return e}var Bne,DIe,LIe,RIe,NIe,MIe,IIe,wR,kR,OIe,Fne,$ne,zne,PIe,Gne,Vne,BIe,FIe,$Ie,Pne,Une,Hne=N(()=>{"use strict";Bne="\\ud800-\\udfff",DIe="\\u0300-\\u036f",LIe="\\ufe20-\\ufe2f",RIe="\\u20d0-\\u20ff",NIe=DIe+LIe+RIe,MIe="\\ufe0e\\ufe0f",IIe="["+Bne+"]",wR="["+NIe+"]",kR="\\ud83c[\\udffb-\\udfff]",OIe="(?:"+wR+"|"+kR+")",Fne="[^"+Bne+"]",$ne="(?:\\ud83c[\\udde6-\\uddff]){2}",zne="[\\ud800-\\udbff][\\udc00-\\udfff]",PIe="\\u200d",Gne=OIe+"?",Vne="["+MIe+"]?",BIe="(?:"+PIe+"(?:"+[Fne,$ne,zne].join("|")+")"+Vne+Gne+")*",FIe=Vne+Gne+BIe,$Ie="(?:"+[Fne+wR+"?",wR,$ne,zne,IIe].join("|")+")",Pne=RegExp(kR+"(?="+kR+")|"+$Ie+FIe,"g");o(zIe,"unicodeSize");Une=zIe});function GIe(t){return tte(t)?Une(t):Ine(t)}var Wne,qne=N(()=>{"use strict";One();rte();Hne();o(GIe,"stringSize");Wne=GIe});function VIe(t,e){return lk(t,e,function(r,n){return Xw(t,n)})}var Yne,Xne=N(()=>{"use strict";TR();lR();o(VIe,"basePick");Yne=VIe});var UIe,Qd,jne=N(()=>{"use strict";Xne();ete();UIe=Jee(function(t,e){return t==null?{}:Yne(t,e)}),Qd=UIe});function qIe(t,e,r,n){for(var i=-1,a=WIe(HIe((e-t)/(r||1)),0),s=Array(a);a--;)s[n?a:++i]=t,t+=r;return s}var HIe,WIe,Kne,Qne=N(()=>{"use strict";HIe=Math.ceil,WIe=Math.max;o(qIe,"baseRange");Kne=qIe});function YIe(t){return function(e,r,n){return n&&typeof n!="number"&&io(e,r,n)&&(r=n=void 0),e=_m(e),r===void 0?(r=e,e=0):r=_m(r),n=n===void 0?e{"use strict";Qne();$d();$L();o(YIe,"createRange");Zne=YIe});var XIe,Ho,eie=N(()=>{"use strict";Jne();XIe=Zne(),Ho=XIe});function jIe(t,e,r,n,i){return i(t,function(a,s,l){r=n?(n=!1,a):e(r,a,s,l)}),r}var tie,rie=N(()=>{"use strict";o(jIe,"baseReduce");tie=jIe});function KIe(t,e,r){var n=Pt(t)?nte:tie,i=arguments.length<3;return n(t,mn(e,4),r,i,Fs)}var Xr,ER=N(()=>{"use strict";ite();rf();os();rie();Wn();o(KIe,"reduce");Xr=KIe});function QIe(t,e){var r=Pt(t)?Pm:tk;return r(t,Tne(mn(e,3)))}var sf,nie=N(()=>{"use strict";Aw();hR();os();Wn();wne();o(QIe,"reject");sf=QIe});function eOe(t){if(t==null)return 0;if(fi(t))return Ti(t)?Wne(t):t.length;var e=lo(t);return e==ZIe||e==JIe?t.size:Rm(t).length}var ZIe,JIe,SR,iie=N(()=>{"use strict";Tw();Xd();Po();nk();qne();ZIe="[object Map]",JIe="[object Set]";o(eOe,"size");SR=eOe});function tOe(t,e){var r;return Fs(t,function(n,i,a){return r=e(n,i,a),!r}),!!r}var aie,sie=N(()=>{"use strict";rf();o(tOe,"baseSome");aie=tOe});function rOe(t,e,r){var n=Pt(t)?$w:aie;return r&&io(t,e,r)&&(e=void 0),n(t,mn(e,3))}var B2,oie=N(()=>{"use strict";tR();os();sie();Wn();$d();o(rOe,"some");B2=rOe});var nOe,_c,lie=N(()=>{"use strict";Om();Mne();mm();$d();nOe=yc(function(t,e){if(t==null)return[];var r=e.length;return r>1&&io(t,e[0],e[1])?e=[]:r>2&&io(e[0],e[1],e[2])&&(e=[e[0]]),Nne(t,Cc(e,1),[])}),_c=nOe});var iOe,aOe,cie,uie=N(()=>{"use strict";QL();zL();Vw();iOe=1/0,aOe=tf&&1/zm(new tf([,-0]))[1]==iOe?function(t){return new tf(t)}:ai,cie=aOe});function oOe(t,e,r){var n=-1,i=bw,a=t.length,s=!0,l=[],u=l;if(r)s=!1,i=Zw;else if(a>=sOe){var h=e?null:cie(t);if(h)return zm(h);s=!1,i=$m,u=new Fm}else u=e?[]:l;e:for(;++n{"use strict";Fw();UL();uR();zw();uie();Vw();sOe=200;o(oOe,"baseUniq");Wm=oOe});var lOe,CR,hie=N(()=>{"use strict";Om();mm();ck();xT();lOe=yc(function(t){return Wm(Cc(t,1,Pd,!0))}),CR=lOe});function cOe(t){return t&&t.length?Wm(t):[]}var qm,fie=N(()=>{"use strict";ck();o(cOe,"uniq");qm=cOe});function uOe(t,e){return t&&t.length?Wm(t,mn(e,2)):[]}var die,pie=N(()=>{"use strict";os();ck();o(uOe,"uniqBy");die=uOe});function fOe(t){var e=++hOe;return kw(t)+e}var hOe,Zd,mie=N(()=>{"use strict";HL();hOe=0;o(fOe,"uniqueId");Zd=fOe});function dOe(t,e,r){for(var n=-1,i=t.length,a=e.length,s={};++n{"use strict";o(dOe,"baseZipObject");gie=dOe});function pOe(t,e){return gie(t||[],e||[],gc)}var uk,vie=N(()=>{"use strict";pm();yie();o(pOe,"zipObject");uk=pOe});var qt=N(()=>{"use strict";Vee();JL();qte();Yte();T9();Ore();Fre();zre();Gre();Vre();Yre();fR();Zre();ene();pR();Sw();ek();tne();rne();nne();lne();Lu();hne();fne();Wn();ak();n2();no();gne();nk();yne();Ec();$re();Um();vne();xne();E9();bR();bne();zL();Mre();jne();Sne();eie();ER();nie();iie();oie();lie();hie();fie();mie();vR();vie();});function bie(t,e){t[e]?t[e]++:t[e]=1}function Tie(t,e){--t[e]||delete t[e]}function F2(t,e,r,n){var i=""+e,a=""+r;if(!t&&i>a){var s=i;i=a,a=s}return i+xie+a+xie+(mr(n)?mOe:n)}function gOe(t,e,r,n){var i=""+e,a=""+r;if(!t&&i>a){var s=i;i=a,a=s}var l={v:i,w:a};return n&&(l.name=n),l}function AR(t,e){return F2(t,e.v,e.w,e.name)}var mOe,Jd,xie,sn,hk=N(()=>{"use strict";qt();mOe="\0",Jd="\0",xie="",sn=class{static{o(this,"Graph")}constructor(e={}){this._isDirected=Object.prototype.hasOwnProperty.call(e,"directed")?e.directed:!0,this._isMultigraph=Object.prototype.hasOwnProperty.call(e,"multigraph")?e.multigraph:!1,this._isCompound=Object.prototype.hasOwnProperty.call(e,"compound")?e.compound:!1,this._label=void 0,this._defaultNodeLabelFn=Ns(void 0),this._defaultEdgeLabelFn=Ns(void 0),this._nodes={},this._isCompound&&(this._parent={},this._children={},this._children[Jd]={}),this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={}}isDirected(){return this._isDirected}isMultigraph(){return this._isMultigraph}isCompound(){return this._isCompound}setGraph(e){return this._label=e,this}graph(){return this._label}setDefaultNodeLabel(e){return Ai(e)||(e=Ns(e)),this._defaultNodeLabelFn=e,this}nodeCount(){return this._nodeCount}nodes(){return zr(this._nodes)}sources(){var e=this;return Yr(this.nodes(),function(r){return hr(e._in[r])})}sinks(){var e=this;return Yr(this.nodes(),function(r){return hr(e._out[r])})}setNodes(e,r){var n=arguments,i=this;return Ae(e,function(a){n.length>1?i.setNode(a,r):i.setNode(a)}),this}setNode(e,r){return Object.prototype.hasOwnProperty.call(this._nodes,e)?(arguments.length>1&&(this._nodes[e]=r),this):(this._nodes[e]=arguments.length>1?r:this._defaultNodeLabelFn(e),this._isCompound&&(this._parent[e]=Jd,this._children[e]={},this._children[Jd][e]=!0),this._in[e]={},this._preds[e]={},this._out[e]={},this._sucs[e]={},++this._nodeCount,this)}node(e){return this._nodes[e]}hasNode(e){return Object.prototype.hasOwnProperty.call(this._nodes,e)}removeNode(e){if(Object.prototype.hasOwnProperty.call(this._nodes,e)){var r=o(n=>this.removeEdge(this._edgeObjs[n]),"removeEdge");delete this._nodes[e],this._isCompound&&(this._removeFromParentsChildList(e),delete this._parent[e],Ae(this.children(e),n=>{this.setParent(n)}),delete this._children[e]),Ae(zr(this._in[e]),r),delete this._in[e],delete this._preds[e],Ae(zr(this._out[e]),r),delete this._out[e],delete this._sucs[e],--this._nodeCount}return this}setParent(e,r){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(mr(r))r=Jd;else{r+="";for(var n=r;!mr(n);n=this.parent(n))if(n===e)throw new Error("Setting "+r+" as parent of "+e+" would create a cycle");this.setNode(r)}return this.setNode(e),this._removeFromParentsChildList(e),this._parent[e]=r,this._children[r][e]=!0,this}_removeFromParentsChildList(e){delete this._children[this._parent[e]][e]}parent(e){if(this._isCompound){var r=this._parent[e];if(r!==Jd)return r}}children(e){if(mr(e)&&(e=Jd),this._isCompound){var r=this._children[e];if(r)return zr(r)}else{if(e===Jd)return this.nodes();if(this.hasNode(e))return[]}}predecessors(e){var r=this._preds[e];if(r)return zr(r)}successors(e){var r=this._sucs[e];if(r)return zr(r)}neighbors(e){var r=this.predecessors(e);if(r)return CR(r,this.successors(e))}isLeaf(e){var r;return this.isDirected()?r=this.successors(e):r=this.neighbors(e),r.length===0}filterNodes(e){var r=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});r.setGraph(this.graph());var n=this;Ae(this._nodes,function(s,l){e(l)&&r.setNode(l,s)}),Ae(this._edgeObjs,function(s){r.hasNode(s.v)&&r.hasNode(s.w)&&r.setEdge(s,n.edge(s))});var i={};function a(s){var l=n.parent(s);return l===void 0||r.hasNode(l)?(i[s]=l,l):l in i?i[l]:a(l)}return o(a,"findParent"),this._isCompound&&Ae(r.nodes(),function(s){r.setParent(s,a(s))}),r}setDefaultEdgeLabel(e){return Ai(e)||(e=Ns(e)),this._defaultEdgeLabelFn=e,this}edgeCount(){return this._edgeCount}edges(){return br(this._edgeObjs)}setPath(e,r){var n=this,i=arguments;return Xr(e,function(a,s){return i.length>1?n.setEdge(a,s,r):n.setEdge(a,s),s}),this}setEdge(){var e,r,n,i,a=!1,s=arguments[0];typeof s=="object"&&s!==null&&"v"in s?(e=s.v,r=s.w,n=s.name,arguments.length===2&&(i=arguments[1],a=!0)):(e=s,r=arguments[1],n=arguments[3],arguments.length>2&&(i=arguments[2],a=!0)),e=""+e,r=""+r,mr(n)||(n=""+n);var l=F2(this._isDirected,e,r,n);if(Object.prototype.hasOwnProperty.call(this._edgeLabels,l))return a&&(this._edgeLabels[l]=i),this;if(!mr(n)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(e),this.setNode(r),this._edgeLabels[l]=a?i:this._defaultEdgeLabelFn(e,r,n);var u=gOe(this._isDirected,e,r,n);return e=u.v,r=u.w,Object.freeze(u),this._edgeObjs[l]=u,bie(this._preds[r],e),bie(this._sucs[e],r),this._in[r][l]=u,this._out[e][l]=u,this._edgeCount++,this}edge(e,r,n){var i=arguments.length===1?AR(this._isDirected,arguments[0]):F2(this._isDirected,e,r,n);return this._edgeLabels[i]}hasEdge(e,r,n){var i=arguments.length===1?AR(this._isDirected,arguments[0]):F2(this._isDirected,e,r,n);return Object.prototype.hasOwnProperty.call(this._edgeLabels,i)}removeEdge(e,r,n){var i=arguments.length===1?AR(this._isDirected,arguments[0]):F2(this._isDirected,e,r,n),a=this._edgeObjs[i];return a&&(e=a.v,r=a.w,delete this._edgeLabels[i],delete this._edgeObjs[i],Tie(this._preds[r],e),Tie(this._sucs[e],r),delete this._in[r][i],delete this._out[e][i],this._edgeCount--),this}inEdges(e,r){var n=this._in[e];if(n){var i=br(n);return r?Yr(i,function(a){return a.v===r}):i}}outEdges(e,r){var n=this._out[e];if(n){var i=br(n);return r?Yr(i,function(a){return a.w===r}):i}}nodeEdges(e,r){var n=this.inEdges(e,r);if(n)return n.concat(this.outEdges(e,r))}};sn.prototype._nodeCount=0;sn.prototype._edgeCount=0;o(bie,"incrementOrInitEntry");o(Tie,"decrementOrRemoveEntry");o(F2,"edgeArgsToId");o(gOe,"edgeArgsToObj");o(AR,"edgeObjToId")});var Wo=N(()=>{"use strict";hk()});function wie(t){t._prev._next=t._next,t._next._prev=t._prev,delete t._next,delete t._prev}function yOe(t,e){if(t!=="_next"&&t!=="_prev")return e}var dk,kie=N(()=>{"use strict";dk=class{static{o(this,"List")}constructor(){var e={};e._next=e._prev=e,this._sentinel=e}dequeue(){var e=this._sentinel,r=e._prev;if(r!==e)return wie(r),r}enqueue(e){var r=this._sentinel;e._prev&&e._next&&wie(e),e._next=r._next,r._next._prev=e,r._next=e,e._prev=r}toString(){for(var e=[],r=this._sentinel,n=r._prev;n!==r;)e.push(JSON.stringify(n,yOe)),n=n._prev;return"["+e.join(", ")+"]"}};o(wie,"unlink");o(yOe,"filterOutLinks")});function Eie(t,e){if(t.nodeCount()<=1)return[];var r=bOe(t,e||vOe),n=xOe(r.graph,r.buckets,r.zeroIdx);return qr(Je(n,function(i){return t.outEdges(i.v,i.w)}))}function xOe(t,e,r){for(var n=[],i=e[e.length-1],a=e[0],s;t.nodeCount();){for(;s=a.dequeue();)_R(t,e,r,s);for(;s=i.dequeue();)_R(t,e,r,s);if(t.nodeCount()){for(var l=e.length-2;l>0;--l)if(s=e[l].dequeue(),s){n=n.concat(_R(t,e,r,s,!0));break}}}return n}function _R(t,e,r,n,i){var a=i?[]:void 0;return Ae(t.inEdges(n.v),function(s){var l=t.edge(s),u=t.node(s.v);i&&a.push({v:s.v,w:s.w}),u.out-=l,DR(e,r,u)}),Ae(t.outEdges(n.v),function(s){var l=t.edge(s),u=s.w,h=t.node(u);h.in-=l,DR(e,r,h)}),t.removeNode(n.v),a}function bOe(t,e){var r=new sn,n=0,i=0;Ae(t.nodes(),function(l){r.setNode(l,{v:l,in:0,out:0})}),Ae(t.edges(),function(l){var u=r.edge(l.v,l.w)||0,h=e(l),f=u+h;r.setEdge(l.v,l.w,f),i=Math.max(i,r.node(l.v).out+=h),n=Math.max(n,r.node(l.w).in+=h)});var a=Ho(i+n+3).map(function(){return new dk}),s=n+1;return Ae(r.nodes(),function(l){DR(a,s,r.node(l))}),{graph:r,buckets:a,zeroIdx:s}}function DR(t,e,r){r.out?r.in?t[r.out-r.in+e].enqueue(r):t[t.length-1].enqueue(r):t[0].enqueue(r)}var vOe,Sie=N(()=>{"use strict";qt();Wo();kie();vOe=Ns(1);o(Eie,"greedyFAS");o(xOe,"doGreedyFAS");o(_R,"removeNode");o(bOe,"buildState");o(DR,"assignBucket")});function Cie(t){var e=t.graph().acyclicer==="greedy"?Eie(t,r(t)):TOe(t);Ae(e,function(n){var i=t.edge(n);t.removeEdge(n),i.forwardName=n.name,i.reversed=!0,t.setEdge(n.w,n.v,i,Zd("rev"))});function r(n){return function(i){return n.edge(i).weight}}o(r,"weightFn")}function TOe(t){var e=[],r={},n={};function i(a){Object.prototype.hasOwnProperty.call(n,a)||(n[a]=!0,r[a]=!0,Ae(t.outEdges(a),function(s){Object.prototype.hasOwnProperty.call(r,s.w)?e.push(s):i(s.w)}),delete r[a])}return o(i,"dfs"),Ae(t.nodes(),i),e}function Aie(t){Ae(t.edges(),function(e){var r=t.edge(e);if(r.reversed){t.removeEdge(e);var n=r.forwardName;delete r.reversed,delete r.forwardName,t.setEdge(e.w,e.v,r,n)}})}var LR=N(()=>{"use strict";qt();Sie();o(Cie,"run");o(TOe,"dfsFAS");o(Aie,"undo")});function Dc(t,e,r,n){var i;do i=Zd(n);while(t.hasNode(i));return r.dummy=e,t.setNode(i,r),i}function Die(t){var e=new sn().setGraph(t.graph());return Ae(t.nodes(),function(r){e.setNode(r,t.node(r))}),Ae(t.edges(),function(r){var n=e.edge(r.v,r.w)||{weight:0,minlen:1},i=t.edge(r);e.setEdge(r.v,r.w,{weight:n.weight+i.weight,minlen:Math.max(n.minlen,i.minlen)})}),e}function pk(t){var e=new sn({multigraph:t.isMultigraph()}).setGraph(t.graph());return Ae(t.nodes(),function(r){t.children(r).length||e.setNode(r,t.node(r))}),Ae(t.edges(),function(r){e.setEdge(r,t.edge(r))}),e}function RR(t,e){var r=t.x,n=t.y,i=e.x-r,a=e.y-n,s=t.width/2,l=t.height/2;if(!i&&!a)throw new Error("Not possible to find intersection inside of the rectangle");var u,h;return Math.abs(a)*s>Math.abs(i)*l?(a<0&&(l=-l),u=l*i/a,h=l):(i<0&&(s=-s),u=s,h=s*a/i),{x:r+u,y:n+h}}function of(t){var e=Je(Ho(MR(t)+1),function(){return[]});return Ae(t.nodes(),function(r){var n=t.node(r),i=n.rank;mr(i)||(e[i][n.order]=r)}),e}function Lie(t){var e=Nl(Je(t.nodes(),function(r){return t.node(r).rank}));Ae(t.nodes(),function(r){var n=t.node(r);Bt(n,"rank")&&(n.rank-=e)})}function Rie(t){var e=Nl(Je(t.nodes(),function(a){return t.node(a).rank})),r=[];Ae(t.nodes(),function(a){var s=t.node(a).rank-e;r[s]||(r[s]=[]),r[s].push(a)});var n=0,i=t.graph().nodeRankFactor;Ae(r,function(a,s){mr(a)&&s%i!==0?--n:n&&Ae(a,function(l){t.node(l).rank+=n})})}function NR(t,e,r,n){var i={width:0,height:0};return arguments.length>=4&&(i.rank=r,i.order=n),Dc(t,"border",i,e)}function MR(t){return $s(Je(t.nodes(),function(e){var r=t.node(e).rank;if(!mr(r))return r}))}function Nie(t,e){var r={lhs:[],rhs:[]};return Ae(t,function(n){e(n)?r.lhs.push(n):r.rhs.push(n)}),r}function Mie(t,e){var r=Qw();try{return e()}finally{console.log(t+" time: "+(Qw()-r)+"ms")}}function Iie(t,e){return e()}var Lc=N(()=>{"use strict";qt();Wo();o(Dc,"addDummyNode");o(Die,"simplify");o(pk,"asNonCompoundGraph");o(RR,"intersectRect");o(of,"buildLayerMatrix");o(Lie,"normalizeRanks");o(Rie,"removeEmptyRanks");o(NR,"addBorderNode");o(MR,"maxRank");o(Nie,"partition");o(Mie,"time");o(Iie,"notime")});function Pie(t){function e(r){var n=t.children(r),i=t.node(r);if(n.length&&Ae(n,e),Object.prototype.hasOwnProperty.call(i,"minRank")){i.borderLeft=[],i.borderRight=[];for(var a=i.minRank,s=i.maxRank+1;a{"use strict";qt();Lc();o(Pie,"addBorderSegments");o(Oie,"addBorderNode")});function $ie(t){var e=t.graph().rankdir.toLowerCase();(e==="lr"||e==="rl")&&Gie(t)}function zie(t){var e=t.graph().rankdir.toLowerCase();(e==="bt"||e==="rl")&&wOe(t),(e==="lr"||e==="rl")&&(kOe(t),Gie(t))}function Gie(t){Ae(t.nodes(),function(e){Fie(t.node(e))}),Ae(t.edges(),function(e){Fie(t.edge(e))})}function Fie(t){var e=t.width;t.width=t.height,t.height=e}function wOe(t){Ae(t.nodes(),function(e){IR(t.node(e))}),Ae(t.edges(),function(e){var r=t.edge(e);Ae(r.points,IR),Object.prototype.hasOwnProperty.call(r,"y")&&IR(r)})}function IR(t){t.y=-t.y}function kOe(t){Ae(t.nodes(),function(e){OR(t.node(e))}),Ae(t.edges(),function(e){var r=t.edge(e);Ae(r.points,OR),Object.prototype.hasOwnProperty.call(r,"x")&&OR(r)})}function OR(t){var e=t.x;t.x=t.y,t.y=e}var Vie=N(()=>{"use strict";qt();o($ie,"adjust");o(zie,"undo");o(Gie,"swapWidthHeight");o(Fie,"swapWidthHeightOne");o(wOe,"reverseY");o(IR,"reverseYOne");o(kOe,"swapXY");o(OR,"swapXYOne")});function Uie(t){t.graph().dummyChains=[],Ae(t.edges(),function(e){SOe(t,e)})}function SOe(t,e){var r=e.v,n=t.node(r).rank,i=e.w,a=t.node(i).rank,s=e.name,l=t.edge(e),u=l.labelRank;if(a!==n+1){t.removeEdge(e);var h=void 0,f,d;for(d=0,++n;n{"use strict";qt();Lc();o(Uie,"run");o(SOe,"normalizeEdge");o(Hie,"undo")});function $2(t){var e={};function r(n){var i=t.node(n);if(Object.prototype.hasOwnProperty.call(e,n))return i.rank;e[n]=!0;var a=Nl(Je(t.outEdges(n),function(s){return r(s.w)-t.edge(s).minlen}));return(a===Number.POSITIVE_INFINITY||a===void 0||a===null)&&(a=0),i.rank=a}o(r,"dfs"),Ae(t.sources(),r)}function ep(t,e){return t.node(e.w).rank-t.node(e.v).rank-t.edge(e).minlen}var mk=N(()=>{"use strict";qt();o($2,"longestPath");o(ep,"slack")});function gk(t){var e=new sn({directed:!1}),r=t.nodes()[0],n=t.nodeCount();e.setNode(r,{});for(var i,a;COe(e,t){"use strict";qt();Wo();mk();o(gk,"feasibleTree");o(COe,"tightTree");o(AOe,"findMinSlackEdge");o(_Oe,"shiftRanks")});var qie=N(()=>{"use strict"});var FR=N(()=>{"use strict"});var eXt,$R=N(()=>{"use strict";qt();FR();eXt=Ns(1)});var Yie=N(()=>{"use strict";$R()});var zR=N(()=>{"use strict"});var Xie=N(()=>{"use strict";zR()});var hXt,jie=N(()=>{"use strict";qt();hXt=Ns(1)});function GR(t){var e={},r={},n=[];function i(a){if(Object.prototype.hasOwnProperty.call(r,a))throw new z2;Object.prototype.hasOwnProperty.call(e,a)||(r[a]=!0,e[a]=!0,Ae(t.predecessors(a),i),delete r[a],n.push(a))}if(o(i,"visit"),Ae(t.sinks(),i),SR(e)!==t.nodeCount())throw new z2;return n}function z2(){}var VR=N(()=>{"use strict";qt();GR.CycleException=z2;o(GR,"topsort");o(z2,"CycleException");z2.prototype=new Error});var Kie=N(()=>{"use strict";VR()});function yk(t,e,r){Pt(e)||(e=[e]);var n=(t.isDirected()?t.successors:t.neighbors).bind(t),i=[],a={};return Ae(e,function(s){if(!t.hasNode(s))throw new Error("Graph does not have node: "+s);Qie(t,s,r==="post",a,n,i)}),i}function Qie(t,e,r,n,i,a){Object.prototype.hasOwnProperty.call(n,e)||(n[e]=!0,r||a.push(e),Ae(i(e),function(s){Qie(t,s,r,n,i,a)}),r&&a.push(e))}var UR=N(()=>{"use strict";qt();o(yk,"dfs");o(Qie,"doDfs")});function HR(t,e){return yk(t,e,"post")}var Zie=N(()=>{"use strict";UR();o(HR,"postorder")});function WR(t,e){return yk(t,e,"pre")}var Jie=N(()=>{"use strict";UR();o(WR,"preorder")});var eae=N(()=>{"use strict";FR();hk()});var tae=N(()=>{"use strict";qie();$R();Yie();Xie();jie();Kie();Zie();Jie();eae();zR();VR()});function cf(t){t=Die(t),$2(t);var e=gk(t);YR(e),qR(e,t);for(var r,n;r=aae(e);)n=sae(e,t,r),oae(e,t,r,n)}function qR(t,e){var r=HR(t,t.nodes());r=r.slice(0,r.length-1),Ae(r,function(n){MOe(t,e,n)})}function MOe(t,e,r){var n=t.node(r),i=n.parent;t.edge(r,i).cutvalue=nae(t,e,r)}function nae(t,e,r){var n=t.node(r),i=n.parent,a=!0,s=e.edge(r,i),l=0;return s||(a=!1,s=e.edge(i,r)),l=s.weight,Ae(e.nodeEdges(r),function(u){var h=u.v===r,f=h?u.w:u.v;if(f!==i){var d=h===a,p=e.edge(u).weight;if(l+=d?p:-p,OOe(t,r,f)){var m=t.edge(r,f).cutvalue;l+=d?-m:m}}}),l}function YR(t,e){arguments.length<2&&(e=t.nodes()[0]),iae(t,{},1,e)}function iae(t,e,r,n,i){var a=r,s=t.node(n);return e[n]=!0,Ae(t.neighbors(n),function(l){Object.prototype.hasOwnProperty.call(e,l)||(r=iae(t,e,r,l,n))}),s.low=a,s.lim=r++,i?s.parent=i:delete s.parent,r}function aae(t){return ls(t.edges(),function(e){return t.edge(e).cutvalue<0})}function sae(t,e,r){var n=r.v,i=r.w;e.hasEdge(n,i)||(n=r.w,i=r.v);var a=t.node(n),s=t.node(i),l=a,u=!1;a.lim>s.lim&&(l=s,u=!0);var h=Yr(e.edges(),function(f){return u===rae(t,t.node(f.v),l)&&u!==rae(t,t.node(f.w),l)});return Kd(h,function(f){return ep(e,f)})}function oae(t,e,r,n){var i=r.v,a=r.w;t.removeEdge(i,a),t.setEdge(n.v,n.w,{}),YR(t),qR(t,e),IOe(t,e)}function IOe(t,e){var r=ls(t.nodes(),function(i){return!e.node(i).parent}),n=WR(t,r);n=n.slice(1),Ae(n,function(i){var a=t.node(i).parent,s=e.edge(i,a),l=!1;s||(s=e.edge(a,i),l=!0),e.node(i).rank=e.node(a).rank+(l?s.minlen:-s.minlen)})}function OOe(t,e,r){return t.hasEdge(e,r)}function rae(t,e,r){return r.low<=e.lim&&e.lim<=r.lim}var lae=N(()=>{"use strict";qt();tae();Lc();BR();mk();cf.initLowLimValues=YR;cf.initCutValues=qR;cf.calcCutValue=nae;cf.leaveEdge=aae;cf.enterEdge=sae;cf.exchangeEdges=oae;o(cf,"networkSimplex");o(qR,"initCutValues");o(MOe,"assignCutValue");o(nae,"calcCutValue");o(YR,"initLowLimValues");o(iae,"dfsAssignLowLim");o(aae,"leaveEdge");o(sae,"enterEdge");o(oae,"exchangeEdges");o(IOe,"updateRanks");o(OOe,"isTreeEdge");o(rae,"isDescendant")});function XR(t){switch(t.graph().ranker){case"network-simplex":cae(t);break;case"tight-tree":BOe(t);break;case"longest-path":POe(t);break;default:cae(t)}}function BOe(t){$2(t),gk(t)}function cae(t){cf(t)}var POe,jR=N(()=>{"use strict";BR();lae();mk();o(XR,"rank");POe=$2;o(BOe,"tightTreeRanker");o(cae,"networkSimplexRanker")});function uae(t){var e=Dc(t,"root",{},"_root"),r=FOe(t),n=$s(br(r))-1,i=2*n+1;t.graph().nestingRoot=e,Ae(t.edges(),function(s){t.edge(s).minlen*=i});var a=$Oe(t)+1;Ae(t.children(),function(s){hae(t,e,i,a,n,r,s)}),t.graph().nodeRankFactor=i}function hae(t,e,r,n,i,a,s){var l=t.children(s);if(!l.length){s!==e&&t.setEdge(e,s,{weight:0,minlen:r});return}var u=NR(t,"_bt"),h=NR(t,"_bb"),f=t.node(s);t.setParent(u,s),f.borderTop=u,t.setParent(h,s),f.borderBottom=h,Ae(l,function(d){hae(t,e,r,n,i,a,d);var p=t.node(d),m=p.borderTop?p.borderTop:d,g=p.borderBottom?p.borderBottom:d,y=p.borderTop?n:2*n,v=m!==g?1:i-a[s]+1;t.setEdge(u,m,{weight:y,minlen:v,nestingEdge:!0}),t.setEdge(g,h,{weight:y,minlen:v,nestingEdge:!0})}),t.parent(s)||t.setEdge(e,u,{weight:0,minlen:i+a[s]})}function FOe(t){var e={};function r(n,i){var a=t.children(n);a&&a.length&&Ae(a,function(s){r(s,i+1)}),e[n]=i}return o(r,"dfs"),Ae(t.children(),function(n){r(n,1)}),e}function $Oe(t){return Xr(t.edges(),function(e,r){return e+t.edge(r).weight},0)}function fae(t){var e=t.graph();t.removeNode(e.nestingRoot),delete e.nestingRoot,Ae(t.edges(),function(r){var n=t.edge(r);n.nestingEdge&&t.removeEdge(r)})}var dae=N(()=>{"use strict";qt();Lc();o(uae,"run");o(hae,"dfs");o(FOe,"treeDepths");o($Oe,"sumWeights");o(fae,"cleanup")});function pae(t,e,r){var n={},i;Ae(r,function(a){for(var s=t.parent(a),l,u;s;){if(l=t.parent(s),l?(u=n[l],n[l]=s):(u=i,i=s),u&&u!==s){e.setEdge(u,s);return}s=l}})}var mae=N(()=>{"use strict";qt();o(pae,"addSubgraphConstraints")});function gae(t,e,r){var n=GOe(t),i=new sn({compound:!0}).setGraph({root:n}).setDefaultNodeLabel(function(a){return t.node(a)});return Ae(t.nodes(),function(a){var s=t.node(a),l=t.parent(a);(s.rank===e||s.minRank<=e&&e<=s.maxRank)&&(i.setNode(a),i.setParent(a,l||n),Ae(t[r](a),function(u){var h=u.v===a?u.w:u.v,f=i.edge(h,a),d=mr(f)?0:f.weight;i.setEdge(h,a,{weight:t.edge(u).weight+d})}),Object.prototype.hasOwnProperty.call(s,"minRank")&&i.setNode(a,{borderLeft:s.borderLeft[e],borderRight:s.borderRight[e]}))}),i}function GOe(t){for(var e;t.hasNode(e=Zd("_root")););return e}var yae=N(()=>{"use strict";qt();Wo();o(gae,"buildLayerGraph");o(GOe,"createRootNode")});function vae(t,e){for(var r=0,n=1;n0;)f%2&&(d+=l[f+1]),f=f-1>>1,l[f]+=h.weight;u+=h.weight*d})),u}var xae=N(()=>{"use strict";qt();o(vae,"crossCount");o(VOe,"twoLayerCrossCount")});function bae(t){var e={},r=Yr(t.nodes(),function(l){return!t.children(l).length}),n=$s(Je(r,function(l){return t.node(l).rank})),i=Je(Ho(n+1),function(){return[]});function a(l){if(!Bt(e,l)){e[l]=!0;var u=t.node(l);i[u.rank].push(l),Ae(t.successors(l),a)}}o(a,"dfs");var s=_c(r,function(l){return t.node(l).rank});return Ae(s,a),i}var Tae=N(()=>{"use strict";qt();o(bae,"initOrder")});function wae(t,e){return Je(e,function(r){var n=t.inEdges(r);if(n.length){var i=Xr(n,function(a,s){var l=t.edge(s),u=t.node(s.v);return{sum:a.sum+l.weight*u.order,weight:a.weight+l.weight}},{sum:0,weight:0});return{v:r,barycenter:i.sum/i.weight,weight:i.weight}}else return{v:r}})}var kae=N(()=>{"use strict";qt();o(wae,"barycenter")});function Eae(t,e){var r={};Ae(t,function(i,a){var s=r[i.v]={indegree:0,in:[],out:[],vs:[i.v],i:a};mr(i.barycenter)||(s.barycenter=i.barycenter,s.weight=i.weight)}),Ae(e.edges(),function(i){var a=r[i.v],s=r[i.w];!mr(a)&&!mr(s)&&(s.indegree++,a.out.push(r[i.w]))});var n=Yr(r,function(i){return!i.indegree});return UOe(n)}function UOe(t){var e=[];function r(a){return function(s){s.merged||(mr(s.barycenter)||mr(a.barycenter)||s.barycenter>=a.barycenter)&&HOe(a,s)}}o(r,"handleIn");function n(a){return function(s){s.in.push(a),--s.indegree===0&&t.push(s)}}for(o(n,"handleOut");t.length;){var i=t.pop();e.push(i),Ae(i.in.reverse(),r(i)),Ae(i.out,n(i))}return Je(Yr(e,function(a){return!a.merged}),function(a){return Qd(a,["vs","i","barycenter","weight"])})}function HOe(t,e){var r=0,n=0;t.weight&&(r+=t.barycenter*t.weight,n+=t.weight),e.weight&&(r+=e.barycenter*e.weight,n+=e.weight),t.vs=e.vs.concat(t.vs),t.barycenter=r/n,t.weight=n,t.i=Math.min(e.i,t.i),e.merged=!0}var Sae=N(()=>{"use strict";qt();o(Eae,"resolveConflicts");o(UOe,"doResolveConflicts");o(HOe,"mergeEntries")});function Aae(t,e){var r=Nie(t,function(f){return Object.prototype.hasOwnProperty.call(f,"barycenter")}),n=r.lhs,i=_c(r.rhs,function(f){return-f.i}),a=[],s=0,l=0,u=0;n.sort(WOe(!!e)),u=Cae(a,i,u),Ae(n,function(f){u+=f.vs.length,a.push(f.vs),s+=f.barycenter*f.weight,l+=f.weight,u=Cae(a,i,u)});var h={vs:qr(a)};return l&&(h.barycenter=s/l,h.weight=l),h}function Cae(t,e,r){for(var n;e.length&&(n=ma(e)).i<=r;)e.pop(),t.push(n.vs),r++;return r}function WOe(t){return function(e,r){return e.barycenterr.barycenter?1:t?r.i-e.i:e.i-r.i}}var _ae=N(()=>{"use strict";qt();Lc();o(Aae,"sort");o(Cae,"consumeUnsortable");o(WOe,"compareWithBias")});function KR(t,e,r,n){var i=t.children(e),a=t.node(e),s=a?a.borderLeft:void 0,l=a?a.borderRight:void 0,u={};s&&(i=Yr(i,function(g){return g!==s&&g!==l}));var h=wae(t,i);Ae(h,function(g){if(t.children(g.v).length){var y=KR(t,g.v,r,n);u[g.v]=y,Object.prototype.hasOwnProperty.call(y,"barycenter")&&YOe(g,y)}});var f=Eae(h,r);qOe(f,u);var d=Aae(f,n);if(s&&(d.vs=qr([s,d.vs,l]),t.predecessors(s).length)){var p=t.node(t.predecessors(s)[0]),m=t.node(t.predecessors(l)[0]);Object.prototype.hasOwnProperty.call(d,"barycenter")||(d.barycenter=0,d.weight=0),d.barycenter=(d.barycenter*d.weight+p.order+m.order)/(d.weight+2),d.weight+=2}return d}function qOe(t,e){Ae(t,function(r){r.vs=qr(r.vs.map(function(n){return e[n]?e[n].vs:n}))})}function YOe(t,e){mr(t.barycenter)?(t.barycenter=e.barycenter,t.weight=e.weight):(t.barycenter=(t.barycenter*t.weight+e.barycenter*e.weight)/(t.weight+e.weight),t.weight+=e.weight)}var Dae=N(()=>{"use strict";qt();kae();Sae();_ae();o(KR,"sortSubgraph");o(qOe,"expandSubgraphs");o(YOe,"mergeBarycenters")});function Nae(t){var e=MR(t),r=Lae(t,Ho(1,e+1),"inEdges"),n=Lae(t,Ho(e-1,-1,-1),"outEdges"),i=bae(t);Rae(t,i);for(var a=Number.POSITIVE_INFINITY,s,l=0,u=0;u<4;++l,++u){XOe(l%2?r:n,l%4>=2),i=of(t);var h=vae(t,i);h{"use strict";qt();Wo();Lc();mae();yae();xae();Tae();Dae();o(Nae,"order");o(Lae,"buildLayerGraphs");o(XOe,"sweepLayerGraphs");o(Rae,"assignOrder")});function Iae(t){var e=KOe(t);Ae(t.graph().dummyChains,function(r){for(var n=t.node(r),i=n.edgeObj,a=jOe(t,e,i.v,i.w),s=a.path,l=a.lca,u=0,h=s[u],f=!0;r!==i.w;){if(n=t.node(r),f){for(;(h=s[u])!==l&&t.node(h).maxRanks||l>e[u].lim));for(h=u,u=n;(u=t.parent(u))!==h;)a.push(u);return{path:i.concat(a.reverse()),lca:h}}function KOe(t){var e={},r=0;function n(i){var a=r;Ae(t.children(i),n),e[i]={low:a,lim:r++}}return o(n,"dfs"),Ae(t.children(),n),e}var Oae=N(()=>{"use strict";qt();o(Iae,"parentDummyChains");o(jOe,"findPath");o(KOe,"postorder")});function QOe(t,e){var r={};function n(i,a){var s=0,l=0,u=i.length,h=ma(a);return Ae(a,function(f,d){var p=JOe(t,f),m=p?t.node(p).order:u;(p||f===h)&&(Ae(a.slice(l,d+1),function(g){Ae(t.predecessors(g),function(y){var v=t.node(y),x=v.order;(xh)&&Pae(r,p,f)})})}o(n,"scan");function i(a,s){var l=-1,u,h=0;return Ae(s,function(f,d){if(t.node(f).dummy==="border"){var p=t.predecessors(f);p.length&&(u=t.node(p[0]).order,n(s,h,d,l,u),h=d,l=u)}n(s,h,s.length,u,a.length)}),s}return o(i,"visitLayer"),Xr(e,i),r}function JOe(t,e){if(t.node(e).dummy)return ls(t.predecessors(e),function(r){return t.node(r).dummy})}function Pae(t,e,r){if(e>r){var n=e;e=r,r=n}var i=t[e];i||(t[e]=i={}),i[r]=!0}function ePe(t,e,r){if(e>r){var n=e;e=r,r=n}return!!t[e]&&Object.prototype.hasOwnProperty.call(t[e],r)}function tPe(t,e,r,n){var i={},a={},s={};return Ae(e,function(l){Ae(l,function(u,h){i[u]=u,a[u]=u,s[u]=h})}),Ae(e,function(l){var u=-1;Ae(l,function(h){var f=n(h);if(f.length){f=_c(f,function(y){return s[y]});for(var d=(f.length-1)/2,p=Math.floor(d),m=Math.ceil(d);p<=m;++p){var g=f[p];a[h]===h&&u{"use strict";qt();Wo();Lc();o(QOe,"findType1Conflicts");o(ZOe,"findType2Conflicts");o(JOe,"findOtherInnerSegmentNode");o(Pae,"addConflict");o(ePe,"hasConflict");o(tPe,"verticalAlignment");o(rPe,"horizontalCompaction");o(nPe,"buildBlockGraph");o(iPe,"findSmallestWidthAlignment");o(aPe,"alignCoordinates");o(sPe,"balance");o(Bae,"positionX");o(oPe,"sep");o(lPe,"width")});function $ae(t){t=pk(t),cPe(t),gR(Bae(t),function(e,r){t.node(r).x=e})}function cPe(t){var e=of(t),r=t.graph().ranksep,n=0;Ae(e,function(i){var a=$s(Je(i,function(s){return t.node(s).height}));Ae(i,function(s){t.node(s).y=n+a/2}),n+=a+r})}var zae=N(()=>{"use strict";qt();Lc();Fae();o($ae,"position");o(cPe,"positionY")});function G2(t,e){var r=e&&e.debugTiming?Mie:Iie;r("layout",()=>{var n=r(" buildLayoutGraph",()=>bPe(t));r(" runLayout",()=>uPe(n,r)),r(" updateInputGraph",()=>hPe(t,n))})}function uPe(t,e){e(" makeSpaceForEdgeLabels",()=>TPe(t)),e(" removeSelfEdges",()=>LPe(t)),e(" acyclic",()=>Cie(t)),e(" nestingGraph.run",()=>uae(t)),e(" rank",()=>XR(pk(t))),e(" injectEdgeLabelProxies",()=>wPe(t)),e(" removeEmptyRanks",()=>Rie(t)),e(" nestingGraph.cleanup",()=>fae(t)),e(" normalizeRanks",()=>Lie(t)),e(" assignRankMinMax",()=>kPe(t)),e(" removeEdgeLabelProxies",()=>EPe(t)),e(" normalize.run",()=>Uie(t)),e(" parentDummyChains",()=>Iae(t)),e(" addBorderSegments",()=>Pie(t)),e(" order",()=>Nae(t)),e(" insertSelfEdges",()=>RPe(t)),e(" adjustCoordinateSystem",()=>$ie(t)),e(" position",()=>$ae(t)),e(" positionSelfEdges",()=>NPe(t)),e(" removeBorderNodes",()=>DPe(t)),e(" normalize.undo",()=>Hie(t)),e(" fixupEdgeLabelCoords",()=>APe(t)),e(" undoCoordinateSystem",()=>zie(t)),e(" translateGraph",()=>SPe(t)),e(" assignNodeIntersects",()=>CPe(t)),e(" reversePoints",()=>_Pe(t)),e(" acyclic.undo",()=>Aie(t))}function hPe(t,e){Ae(t.nodes(),function(r){var n=t.node(r),i=e.node(r);n&&(n.x=i.x,n.y=i.y,e.children(r).length&&(n.width=i.width,n.height=i.height))}),Ae(t.edges(),function(r){var n=t.edge(r),i=e.edge(r);n.points=i.points,Object.prototype.hasOwnProperty.call(i,"x")&&(n.x=i.x,n.y=i.y)}),t.graph().width=e.graph().width,t.graph().height=e.graph().height}function bPe(t){var e=new sn({multigraph:!0,compound:!0}),r=ZR(t.graph());return e.setGraph(Hh({},dPe,QR(r,fPe),Qd(r,pPe))),Ae(t.nodes(),function(n){var i=ZR(t.node(n));e.setNode(n,nf(QR(i,mPe),gPe)),e.setParent(n,t.parent(n))}),Ae(t.edges(),function(n){var i=ZR(t.edge(n));e.setEdge(n,Hh({},vPe,QR(i,yPe),Qd(i,xPe)))}),e}function TPe(t){var e=t.graph();e.ranksep/=2,Ae(t.edges(),function(r){var n=t.edge(r);n.minlen*=2,n.labelpos.toLowerCase()!=="c"&&(e.rankdir==="TB"||e.rankdir==="BT"?n.width+=n.labeloffset:n.height+=n.labeloffset)})}function wPe(t){Ae(t.edges(),function(e){var r=t.edge(e);if(r.width&&r.height){var n=t.node(e.v),i=t.node(e.w),a={rank:(i.rank-n.rank)/2+n.rank,e};Dc(t,"edge-proxy",a,"_ep")}})}function kPe(t){var e=0;Ae(t.nodes(),function(r){var n=t.node(r);n.borderTop&&(n.minRank=t.node(n.borderTop).rank,n.maxRank=t.node(n.borderBottom).rank,e=$s(e,n.maxRank))}),t.graph().maxRank=e}function EPe(t){Ae(t.nodes(),function(e){var r=t.node(e);r.dummy==="edge-proxy"&&(t.edge(r.e).labelRank=r.rank,t.removeNode(e))})}function SPe(t){var e=Number.POSITIVE_INFINITY,r=0,n=Number.POSITIVE_INFINITY,i=0,a=t.graph(),s=a.marginx||0,l=a.marginy||0;function u(h){var f=h.x,d=h.y,p=h.width,m=h.height;e=Math.min(e,f-p/2),r=Math.max(r,f+p/2),n=Math.min(n,d-m/2),i=Math.max(i,d+m/2)}o(u,"getExtremes"),Ae(t.nodes(),function(h){u(t.node(h))}),Ae(t.edges(),function(h){var f=t.edge(h);Object.prototype.hasOwnProperty.call(f,"x")&&u(f)}),e-=s,n-=l,Ae(t.nodes(),function(h){var f=t.node(h);f.x-=e,f.y-=n}),Ae(t.edges(),function(h){var f=t.edge(h);Ae(f.points,function(d){d.x-=e,d.y-=n}),Object.prototype.hasOwnProperty.call(f,"x")&&(f.x-=e),Object.prototype.hasOwnProperty.call(f,"y")&&(f.y-=n)}),a.width=r-e+s,a.height=i-n+l}function CPe(t){Ae(t.edges(),function(e){var r=t.edge(e),n=t.node(e.v),i=t.node(e.w),a,s;r.points?(a=r.points[0],s=r.points[r.points.length-1]):(r.points=[],a=i,s=n),r.points.unshift(RR(n,a)),r.points.push(RR(i,s))})}function APe(t){Ae(t.edges(),function(e){var r=t.edge(e);if(Object.prototype.hasOwnProperty.call(r,"x"))switch((r.labelpos==="l"||r.labelpos==="r")&&(r.width-=r.labeloffset),r.labelpos){case"l":r.x-=r.width/2+r.labeloffset;break;case"r":r.x+=r.width/2+r.labeloffset;break}})}function _Pe(t){Ae(t.edges(),function(e){var r=t.edge(e);r.reversed&&r.points.reverse()})}function DPe(t){Ae(t.nodes(),function(e){if(t.children(e).length){var r=t.node(e),n=t.node(r.borderTop),i=t.node(r.borderBottom),a=t.node(ma(r.borderLeft)),s=t.node(ma(r.borderRight));r.width=Math.abs(s.x-a.x),r.height=Math.abs(i.y-n.y),r.x=a.x+r.width/2,r.y=n.y+r.height/2}}),Ae(t.nodes(),function(e){t.node(e).dummy==="border"&&t.removeNode(e)})}function LPe(t){Ae(t.edges(),function(e){if(e.v===e.w){var r=t.node(e.v);r.selfEdges||(r.selfEdges=[]),r.selfEdges.push({e,label:t.edge(e)}),t.removeEdge(e)}})}function RPe(t){var e=of(t);Ae(e,function(r){var n=0;Ae(r,function(i,a){var s=t.node(i);s.order=a+n,Ae(s.selfEdges,function(l){Dc(t,"selfedge",{width:l.label.width,height:l.label.height,rank:s.rank,order:a+ ++n,e:l.e,label:l.label},"_se")}),delete s.selfEdges})})}function NPe(t){Ae(t.nodes(),function(e){var r=t.node(e);if(r.dummy==="selfedge"){var n=t.node(r.e.v),i=n.x+n.width/2,a=n.y,s=r.x-i,l=n.height/2;t.setEdge(r.e,r.label),t.removeNode(e),r.label.points=[{x:i+2*s/3,y:a-l},{x:i+5*s/6,y:a-l},{x:i+s,y:a},{x:i+5*s/6,y:a+l},{x:i+2*s/3,y:a+l}],r.label.x=r.x,r.label.y=r.y}})}function QR(t,e){return jd(Qd(t,e),Number)}function ZR(t){var e={};return Ae(t,function(r,n){e[n.toLowerCase()]=r}),e}var fPe,dPe,pPe,mPe,gPe,yPe,vPe,xPe,Gae=N(()=>{"use strict";qt();Wo();Bie();Vie();LR();PR();jR();dae();Mae();Oae();zae();Lc();o(G2,"layout");o(uPe,"runLayout");o(hPe,"updateInputGraph");fPe=["nodesep","edgesep","ranksep","marginx","marginy"],dPe={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},pPe=["acyclicer","ranker","rankdir","align"],mPe=["width","height"],gPe={width:0,height:0},yPe=["minlen","weight","width","height","labeloffset"],vPe={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},xPe=["labelpos"];o(bPe,"buildLayoutGraph");o(TPe,"makeSpaceForEdgeLabels");o(wPe,"injectEdgeLabelProxies");o(kPe,"assignRankMinMax");o(EPe,"removeEdgeLabelProxies");o(SPe,"translateGraph");o(CPe,"assignNodeIntersects");o(APe,"fixupEdgeLabelCoords");o(_Pe,"reversePointsForReversedEdges");o(DPe,"removeBorderNodes");o(LPe,"removeSelfEdges");o(RPe,"insertSelfEdges");o(NPe,"positionSelfEdges");o(QR,"selectNumberAttrs");o(ZR,"canonicalize")});var JR=N(()=>{"use strict";LR();Gae();PR();jR()});function qo(t){var e={options:{directed:t.isDirected(),multigraph:t.isMultigraph(),compound:t.isCompound()},nodes:MPe(t),edges:IPe(t)};return mr(t.graph())||(e.value=an(t.graph())),e}function MPe(t){return Je(t.nodes(),function(e){var r=t.node(e),n=t.parent(e),i={v:e};return mr(r)||(i.value=r),mr(n)||(i.parent=n),i})}function IPe(t){return Je(t.edges(),function(e){var r=t.edge(e),n={v:e.v,w:e.w};return mr(e.name)||(n.name=e.name),mr(r)||(n.value=r),n})}var eN=N(()=>{"use strict";qt();hk();o(qo,"write");o(MPe,"writeNodes");o(IPe,"writeEdges")});var Tr,tp,Hae,Wae,vk,OPe,qae,Yae,PPe,Ym,Uae,Xae,jae,Kae,Qae,Zae=N(()=>{"use strict";yt();Wo();eN();Tr=new Map,tp=new Map,Hae=new Map,Wae=o(()=>{tp.clear(),Hae.clear(),Tr.clear()},"clear"),vk=o((t,e)=>{let r=tp.get(e)||[];return X.trace("In isDescendant",e," ",t," = ",r.includes(t)),r.includes(t)},"isDescendant"),OPe=o((t,e)=>{let r=tp.get(e)||[];return X.info("Descendants of ",e," is ",r),X.info("Edge is ",t),t.v===e||t.w===e?!1:r?r.includes(t.v)||vk(t.v,e)||vk(t.w,e)||r.includes(t.w):(X.debug("Tilt, ",e,",not in descendants"),!1)},"edgeInCluster"),qae=o((t,e,r,n)=>{X.warn("Copying children of ",t,"root",n,"data",e.node(t),n);let i=e.children(t)||[];t!==n&&i.push(t),X.warn("Copying (nodes) clusterId",t,"nodes",i),i.forEach(a=>{if(e.children(a).length>0)qae(a,e,r,n);else{let s=e.node(a);X.info("cp ",a," to ",n," with parent ",t),r.setNode(a,s),n!==e.parent(a)&&(X.warn("Setting parent",a,e.parent(a)),r.setParent(a,e.parent(a))),t!==n&&a!==t?(X.debug("Setting parent",a,t),r.setParent(a,t)):(X.info("In copy ",t,"root",n,"data",e.node(t),n),X.debug("Not Setting parent for node=",a,"cluster!==rootId",t!==n,"node!==clusterId",a!==t));let l=e.edges(a);X.debug("Copying Edges",l),l.forEach(u=>{X.info("Edge",u);let h=e.edge(u.v,u.w,u.name);X.info("Edge data",h,n);try{OPe(u,n)?(X.info("Copying as ",u.v,u.w,h,u.name),r.setEdge(u.v,u.w,h,u.name),X.info("newGraph edges ",r.edges(),r.edge(r.edges()[0]))):X.info("Skipping copy of edge ",u.v,"-->",u.w," rootId: ",n," clusterId:",t)}catch(f){X.error(f)}})}X.debug("Removing node",a),e.removeNode(a)})},"copy"),Yae=o((t,e)=>{let r=e.children(t),n=[...r];for(let i of r)Hae.set(i,t),n=[...n,...Yae(i,e)];return n},"extractDescendants"),PPe=o((t,e,r)=>{let n=t.edges().filter(u=>u.v===e||u.w===e),i=t.edges().filter(u=>u.v===r||u.w===r),a=n.map(u=>({v:u.v===e?r:u.v,w:u.w===e?e:u.w})),s=i.map(u=>({v:u.v,w:u.w}));return a.filter(u=>s.some(h=>u.v===h.v&&u.w===h.w))},"findCommonEdges"),Ym=o((t,e,r)=>{let n=e.children(t);if(X.trace("Searching children of id ",t,n),n.length<1)return t;let i;for(let a of n){let s=Ym(a,e,r),l=PPe(e,r,s);if(s)if(l.length>0)i=s;else return s}return i},"findNonClusterChild"),Uae=o(t=>!Tr.has(t)||!Tr.get(t).externalConnections?t:Tr.has(t)?Tr.get(t).id:t,"getAnchorId"),Xae=o((t,e)=>{if(!t||e>10){X.debug("Opting out, no graph ");return}else X.debug("Opting in, graph ");t.nodes().forEach(function(r){t.children(r).length>0&&(X.warn("Cluster identified",r," Replacement id in edges: ",Ym(r,t,r)),tp.set(r,Yae(r,t)),Tr.set(r,{id:Ym(r,t,r),clusterData:t.node(r)}))}),t.nodes().forEach(function(r){let n=t.children(r),i=t.edges();n.length>0?(X.debug("Cluster identified",r,tp),i.forEach(a=>{let s=vk(a.v,r),l=vk(a.w,r);s^l&&(X.warn("Edge: ",a," leaves cluster ",r),X.warn("Descendants of XXX ",r,": ",tp.get(r)),Tr.get(r).externalConnections=!0)})):X.debug("Not a cluster ",r,tp)});for(let r of Tr.keys()){let n=Tr.get(r).id,i=t.parent(n);i!==r&&Tr.has(i)&&!Tr.get(i).externalConnections&&(Tr.get(r).id=i)}t.edges().forEach(function(r){let n=t.edge(r);X.warn("Edge "+r.v+" -> "+r.w+": "+JSON.stringify(r)),X.warn("Edge "+r.v+" -> "+r.w+": "+JSON.stringify(t.edge(r)));let i=r.v,a=r.w;if(X.warn("Fix XXX",Tr,"ids:",r.v,r.w,"Translating: ",Tr.get(r.v)," --- ",Tr.get(r.w)),Tr.get(r.v)||Tr.get(r.w)){if(X.warn("Fixing and trying - removing XXX",r.v,r.w,r.name),i=Uae(r.v),a=Uae(r.w),t.removeEdge(r.v,r.w,r.name),i!==r.v){let s=t.parent(i);Tr.get(s).externalConnections=!0,n.fromCluster=r.v}if(a!==r.w){let s=t.parent(a);Tr.get(s).externalConnections=!0,n.toCluster=r.w}X.warn("Fix Replacing with XXX",i,a,r.name),t.setEdge(i,a,n,r.name)}}),X.warn("Adjusted Graph",qo(t)),jae(t,0),X.trace(Tr)},"adjustClustersAndEdges"),jae=o((t,e)=>{if(X.warn("extractor - ",e,qo(t),t.children("D")),e>10){X.error("Bailing out");return}let r=t.nodes(),n=!1;for(let i of r){let a=t.children(i);n=n||a.length>0}if(!n){X.debug("Done, no node has children",t.nodes());return}X.debug("Nodes = ",r,e);for(let i of r)if(X.debug("Extracting node",i,Tr,Tr.has(i)&&!Tr.get(i).externalConnections,!t.parent(i),t.node(i),t.children("D")," Depth ",e),!Tr.has(i))X.debug("Not a cluster",i,e);else if(!Tr.get(i).externalConnections&&t.children(i)&&t.children(i).length>0){X.warn("Cluster without external connections, without a parent and with children",i,e);let s=t.graph().rankdir==="TB"?"LR":"TB";Tr.get(i)?.clusterData?.dir&&(s=Tr.get(i).clusterData.dir,X.warn("Fixing dir",Tr.get(i).clusterData.dir,s));let l=new sn({multigraph:!0,compound:!0}).setGraph({rankdir:s,nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}});X.warn("Old graph before copy",qo(t)),qae(i,t,l,i),t.setNode(i,{clusterNode:!0,id:i,clusterData:Tr.get(i).clusterData,label:Tr.get(i).label,graph:l}),X.warn("New graph after copy node: (",i,")",qo(l)),X.debug("Old graph after copy",qo(t))}else X.warn("Cluster ** ",i," **not meeting the criteria !externalConnections:",!Tr.get(i).externalConnections," no parent: ",!t.parent(i)," children ",t.children(i)&&t.children(i).length>0,t.children("D"),e),X.debug(Tr);r=t.nodes(),X.warn("New list of nodes",r);for(let i of r){let a=t.node(i);X.warn(" Now next level",i,a),a?.clusterNode&&jae(a.graph,e+1)}},"extractor"),Kae=o((t,e)=>{if(e.length===0)return[];let r=Object.assign([],e);return e.forEach(n=>{let i=t.children(n),a=Kae(t,i);r=[...r,...a]}),r},"sorter"),Qae=o(t=>Kae(t,t.children()),"sortNodesByHierarchy")});var ese={};ur(ese,{render:()=>BPe});var Jae,BPe,tse=N(()=>{"use strict";JR();eN();Wo();FL();Ft();Zae();mw();aw();BL();yt();R2();Gt();Jae=o(async(t,e,r,n,i,a)=>{X.warn("Graph in recursive render:XAX",qo(e),i);let s=e.graph().rankdir;X.trace("Dir in recursive render - dir:",s);let l=t.insert("g").attr("class","root");e.nodes()?X.info("Recursive render XXX",e.nodes()):X.info("No nodes found for",e),e.edges().length>0&&X.info("Recursive edges",e.edge(e.edges()[0]));let u=l.insert("g").attr("class","clusters"),h=l.insert("g").attr("class","edgePaths"),f=l.insert("g").attr("class","edgeLabels"),d=l.insert("g").attr("class","nodes");await Promise.all(e.nodes().map(async function(y){let v=e.node(y);if(i!==void 0){let x=JSON.parse(JSON.stringify(i.clusterData));X.trace(`Setting data for parent cluster XXX Node.id = `,y,` data=`,x.height,` -Parent cluster`,i.height),e.setNode(i.id,x),e.parent(y)||(X.trace("Setting parent",y,i.id),e.setParent(y,i.id,x))}if(X.info("(Insert) Node XXX"+y+": "+JSON.stringify(e.node(y))),v?.clusterNode){X.info("Cluster identified XBX",y,v.width,e.node(y));let{ranksep:x,nodesep:b}=e.graph();v.graph.setGraph({...v.graph.graph(),ranksep:x+25,nodesep:b});let w=await Vie(d,v.graph,r,n,e.node(y),a),C=w.elem;je(v,C),v.diff=w.diff||0,X.info("New compound node after recursive render XAX",y,"width",v.width,"height",v.height),oJ(C,v)}else e.children(y).length>0?(X.trace("Cluster - the non recursive path XBX",y,v.id,v,v.width,"Graph:",e),X.trace(Wm(v.id,e)),wr.set(v.id,{id:Wm(v.id,e),node:v})):(X.trace("Node - the non recursive path XAX",y,d,e.node(y),s),await Sm(d,e.node(y),{config:a,dir:s}))})),await o(async()=>{let y=e.edges().map(async function(v){let x=e.edge(v.v,v.w,v.name);X.info("Edge "+v.v+" -> "+v.w+": "+JSON.stringify(v)),X.info("Edge "+v.v+" -> "+v.w+": ",v," ",JSON.stringify(e.edge(v))),X.info("Fix",wr,"ids:",v.v,v.w,"Translating: ",wr.get(v.v),wr.get(v.w)),await rT(f,x)});await Promise.all(y)},"processEdges")(),X.info("Graph before layout:",JSON.stringify(Ho(e))),X.info("############################################# XXX"),X.info("### Layout ### XXX"),X.info("############################################# XXX"),F2(e),X.info("Graph after layout:",JSON.stringify(Ho(e)));let m=0,{subGraphTitleTotalMargin:g}=Ou(a);return await Promise.all(zie(e).map(async function(y){let v=e.node(y);if(X.info("Position XBX => "+y+": ("+v.x,","+v.y,") width: ",v.width," height: ",v.height),v?.clusterNode)v.y+=g,X.info("A tainted cluster node XBX1",y,v.id,v.width,v.height,v.x,v.y,e.parent(y)),wr.get(v.id).node=v,L2(v);else if(e.children(y).length>0){X.info("A pure cluster node XBX1",y,v.id,v.x,v.y,v.width,v.height,e.parent(y)),v.height+=g,e.node(v.parentId);let x=v?.padding/2||0,b=v?.labelBBox?.height||0,w=b-x||0;X.debug("OffsetY",w,"labelHeight",b,"halfPadding",x),await Em(u,v),wr.get(v.id).node=v}else{let x=e.node(v.parentId);v.y+=g/2,X.info("A regular node XBX1 - using the padding",v.id,"parent",v.parentId,v.width,v.height,v.x,v.y,"offsetY",v.offsetY,"parent",x,x?.offsetY,v),L2(v)}})),e.edges().forEach(function(y){let v=e.edge(y);X.info("Edge "+y.v+" -> "+y.w+": "+JSON.stringify(v),v),v.points.forEach(C=>C.y+=g/2);let x=e.node(y.v);var b=e.node(y.w);let w=iT(h,v,wr,r,x,b,n);nT(v,w)}),e.nodes().forEach(function(y){let v=e.node(y);X.info(y,v.type,v.diff),v.isGroup&&(m=v.diff)}),X.warn("Returning from recursive render XAX",l,m),{elem:l,diff:m}},"recursiveRender"),aOe=o(async(t,e)=>{let r=new sn({multigraph:!0,compound:!0}).setGraph({rankdir:t.direction,nodesep:t.config?.nodeSpacing||t.config?.flowchart?.nodeSpacing||t.nodeSpacing,ranksep:t.config?.rankSpacing||t.config?.flowchart?.rankSpacing||t.rankSpacing,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}}),n=e.select("g");aT(n,t.markers,t.type,t.diagramId),lJ(),sJ(),eJ(),Iie(),t.nodes.forEach(a=>{r.setNode(a.id,{...a}),a.parentId&&r.setParent(a.id,a.parentId)}),X.debug("Edges:",t.edges),t.edges.forEach(a=>{if(a.start===a.end){let s=a.start,l=s+"---"+s+"---1",u=s+"---"+s+"---2",h=r.node(s);r.setNode(l,{domId:l,id:l,parentId:h.parentId,labelStyle:"",label:"",padding:0,shape:"labelRect",style:"",width:10,height:10}),r.setParent(l,h.parentId),r.setNode(u,{domId:u,id:u,parentId:h.parentId,labelStyle:"",padding:0,shape:"labelRect",label:"",style:"",width:10,height:10}),r.setParent(u,h.parentId);let f=structuredClone(a),d=structuredClone(a),p=structuredClone(a);f.label="",f.arrowTypeEnd="none",f.id=s+"-cyclic-special-1",d.arrowTypeStart="none",d.arrowTypeEnd="none",d.id=s+"-cyclic-special-mid",p.label="",h.isGroup&&(f.fromCluster=s,p.toCluster=s),p.id=s+"-cyclic-special-2",p.arrowTypeStart="none",r.setEdge(s,l,f,s+"-cyclic-special-0"),r.setEdge(l,u,d,s+"-cyclic-special-1"),r.setEdge(u,s,p,s+"-cyc{"use strict";uJ();vt();$2={},kR=o(t=>{for(let e of t)$2[e.name]=e},"registerLayoutLoaders"),sOe=o(()=>{kR([{name:"dagre",loader:o(async()=>await Promise.resolve().then(()=>(Hie(),Uie)),"loader")}])},"registerDefaultLayoutLoaders");sOe();_c=o(async(t,e)=>{if(!(t.layoutAlgorithm in $2))throw new Error(`Unknown layout algorithm: ${t.layoutAlgorithm}`);let r=$2[t.layoutAlgorithm];return(await r.loader()).render(t,e,cJ,{algorithm:r.algorithm})},"render"),lf=o((t="",{fallback:e="dagre"}={})=>{if(t in $2)return t;if(e in $2)return X.warn(`Layout algorithm ${t} is not registered. Using ${e} as fallback.`),e;throw new Error(`Both layout algorithms ${t} and ${e} are not registered.`)},"getRegisteredLayoutAlgorithm")});var Dc,oOe,lOe,qm=N(()=>{"use strict";Si();vt();Dc=o((t,e,r,n)=>{t.attr("class",r);let{width:i,height:a,x:s,y:l}=oOe(t,e);vn(t,a,i,n);let u=lOe(s,l,i,a,e);t.attr("viewBox",u),X.debug(`viewBox configured: ${u} with padding: ${e}`)},"setupViewPortForSVG"),oOe=o((t,e)=>{let r=t.node()?.getBBox()||{width:0,height:0,x:0,y:0};return{width:r.width+e*2,height:r.height+e*2,x:r.x,y:r.y}},"calculateDimensionsWithPadding"),lOe=o((t,e,r,n,i)=>`${t-i} ${e-i} ${r} ${n}`,"createViewBox")});var cOe,uOe,Wie,qie=N(()=>{"use strict";pr();zt();vt();km();ep();qm();nr();cOe=o(function(t,e){return e.db.getClasses()},"getClasses"),uOe=o(async function(t,e,r,n){X.info("REF0:"),X.info("Drawing state diagram (v2)",e);let{securityLevel:i,flowchart:a,layout:s}=me(),l;i==="sandbox"&&(l=Ge("#i"+e));let u=i==="sandbox"?l.nodes()[0].contentDocument:document;X.debug("Before getData: ");let h=n.db.getData();X.debug("Data: ",h);let f=xc(e,i),d=n.db.getDirection();h.type=n.type,h.layoutAlgorithm=lf(s),h.layoutAlgorithm==="dagre"&&s==="elk"&&X.warn("flowchart-elk was moved to an external package in Mermaid v11. Please refer [release notes](https://github.com/mermaid-js/mermaid/releases/tag/v11.0.0) for more details. This diagram will be rendered using `dagre` layout as a fallback."),h.direction=d,h.nodeSpacing=a?.nodeSpacing||50,h.rankSpacing=a?.rankSpacing||50,h.markers=["point","circle","cross"],h.diagramId=e,X.debug("REF1:",h),await _c(h,f);let p=h.config.flowchart?.diagramPadding??8;Gt.insertTitle(f,"flowchartTitleText",a?.titleTopMargin||0,n.db.getDiagramTitle()),Dc(f,p,"flowchart",a?.useMaxWidth||!1);for(let m of h.nodes){let g=Ge(`#${e} [id="${m.id}"]`);if(!g||!m.link)continue;let y=u.createElementNS("http://www.w3.org/2000/svg","a");y.setAttributeNS("http://www.w3.org/2000/svg","class",m.cssClasses),y.setAttributeNS("http://www.w3.org/2000/svg","rel","noopener"),i==="sandbox"?y.setAttributeNS("http://www.w3.org/2000/svg","target","_top"):m.linkTarget&&y.setAttributeNS("http://www.w3.org/2000/svg","target",m.linkTarget);let v=g.insert(function(){return y},":first-child"),x=g.select(".label-container");x&&v.append(function(){return x.node()});let b=g.select(".label");b&&v.append(function(){return b.node()})}},"draw"),Wie={getClasses:cOe,draw:uOe}});var ER,SR,Yie=N(()=>{"use strict";ER=function(){var t=o(function(Hr,et,mt,Kt){for(mt=mt||{},Kt=Hr.length;Kt--;mt[Hr[Kt]]=et);return mt},"o"),e=[1,4],r=[1,3],n=[1,5],i=[1,8,9,10,11,27,34,36,38,44,60,84,85,86,87,88,89,102,105,106,109,111,114,115,116,121,122,123,124],a=[2,2],s=[1,13],l=[1,14],u=[1,15],h=[1,16],f=[1,23],d=[1,25],p=[1,26],m=[1,27],g=[1,49],y=[1,48],v=[1,29],x=[1,30],b=[1,31],w=[1,32],C=[1,33],T=[1,44],E=[1,46],A=[1,42],S=[1,47],_=[1,43],I=[1,50],L=[1,45],k=[1,51],D=[1,52],R=[1,34],O=[1,35],M=[1,36],P=[1,37],B=[1,57],F=[1,8,9,10,11,27,32,34,36,38,44,60,84,85,86,87,88,89,102,105,106,109,111,114,115,116,121,122,123,124],z=[1,61],$=[1,60],U=[1,62],Q=[8,9,11,75,77,78],te=[1,78],Y=[1,91],he=[1,96],Z=[1,95],ue=[1,92],K=[1,88],j=[1,94],ne=[1,90],ee=[1,97],ce=[1,93],le=[1,98],J=[1,89],Se=[8,9,10,11,40,75,77,78],se=[8,9,10,11,40,46,75,77,78],ae=[8,9,10,11,29,40,44,46,48,50,52,54,56,58,60,63,65,67,68,70,75,77,78,89,102,105,106,109,111,114,115,116],Oe=[8,9,11,44,60,75,77,78,89,102,105,106,109,111,114,115,116],ye=[44,60,89,102,105,106,109,111,114,115,116],Be=[1,121],He=[1,122],ze=[1,124],Le=[1,123],Ie=[44,60,62,74,89,102,105,106,109,111,114,115,116],xe=[1,133],q=[1,147],de=[1,148],ie=[1,149],oe=[1,150],V=[1,135],we=[1,137],W=[1,141],pe=[1,142],ve=[1,143],Pe=[1,144],_e=[1,145],be=[1,146],Ve=[1,151],De=[1,152],qe=[1,131],at=[1,132],Lt=[1,139],st=[1,134],Ue=[1,138],ct=[1,136],We=[8,9,10,11,27,32,34,36,38,44,60,84,85,86,87,88,89,102,105,106,109,111,114,115,116,121,122,123,124],ot=[1,154],Yt=[1,156],bt=[8,9,11],Mt=[8,9,10,11,14,44,60,89,105,106,109,111,114,115,116],xt=[1,176],ut=[1,172],Et=[1,173],ft=[1,177],yt=[1,174],nt=[1,175],dn=[77,116,119],Tt=[8,9,10,11,12,14,27,29,32,44,60,75,84,85,86,87,88,89,90,105,109,111,114,115,116],On=[10,106],tn=[31,49,51,53,55,57,62,64,66,67,69,71,116,117,118],_r=[1,247],Dr=[1,245],Pn=[1,249],At=[1,243],Ce=[1,244],tt=[1,246],St=[1,248],gr=[1,250],rn=[1,268],gn=[8,9,11,106],Zr=[8,9,10,11,60,84,105,106,109,110,111,112],Mi={trace:o(function(){},"trace"),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,FirstStmtSeparator:15,ending:16,endToken:17,spaceList:18,spaceListNewline:19,vertexStatement: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,shapeData:39,SHAPE_DATA:40,link:41,node:42,styledVertex:43,AMP:44,vertex:45,STYLE_SEPARATOR:46,idString:47,DOUBLECIRCLESTART:48,DOUBLECIRCLEEND:49,PS:50,PE:51,"(-":52,"-)":53,STADIUMSTART:54,STADIUMEND:55,SUBROUTINESTART:56,SUBROUTINEEND:57,VERTEX_WITH_PROPS_START:58,"NODE_STRING[field]":59,COLON:60,"NODE_STRING[value]":61,PIPE:62,CYLINDERSTART:63,CYLINDEREND:64,DIAMOND_START:65,DIAMOND_STOP:66,TAGEND:67,TRAPSTART:68,TRAPEND:69,INVTRAPSTART:70,INVTRAPEND:71,linkStatement:72,arrowText:73,TESTSTR:74,START_LINK:75,edgeText:76,LINK:77,LINK_ID:78,edgeTextToken:79,STR:80,MD_STR:81,textToken:82,keywords:83,STYLE:84,LINKSTYLE:85,CLASSDEF:86,CLASS:87,CLICK:88,DOWN:89,UP:90,textNoTagsToken:91,stylesOpt:92,"idString[vertex]":93,"idString[class]":94,CALLBACKNAME:95,CALLBACKARGS:96,HREF:97,LINK_TARGET:98,"STR[link]":99,"STR[tooltip]":100,alphaNum:101,DEFAULT:102,numList:103,INTERPOLATE:104,NUM:105,COMMA:106,style:107,styleComponent:108,NODE_STRING:109,UNIT:110,BRKT:111,PCT:112,idStringToken:113,MINUS:114,MULT:115,UNICODE_TEXT:116,TEXT:117,TAGSTART:118,EDGE_TEXT:119,alphaNumToken:120,direction_tb:121,direction_bt:122,direction_rl:123,direction_lr:124,$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",40:"SHAPE_DATA",44:"AMP",46:"STYLE_SEPARATOR",48:"DOUBLECIRCLESTART",49:"DOUBLECIRCLEEND",50:"PS",51:"PE",52:"(-",53:"-)",54:"STADIUMSTART",55:"STADIUMEND",56:"SUBROUTINESTART",57:"SUBROUTINEEND",58:"VERTEX_WITH_PROPS_START",59:"NODE_STRING[field]",60:"COLON",61:"NODE_STRING[value]",62:"PIPE",63:"CYLINDERSTART",64:"CYLINDEREND",65:"DIAMOND_START",66:"DIAMOND_STOP",67:"TAGEND",68:"TRAPSTART",69:"TRAPEND",70:"INVTRAPSTART",71:"INVTRAPEND",74:"TESTSTR",75:"START_LINK",77:"LINK",78:"LINK_ID",80:"STR",81:"MD_STR",84:"STYLE",85:"LINKSTYLE",86:"CLASSDEF",87:"CLASS",88:"CLICK",89:"DOWN",90:"UP",93:"idString[vertex]",94:"idString[class]",95:"CALLBACKNAME",96:"CALLBACKARGS",97:"HREF",98:"LINK_TARGET",99:"STR[link]",100:"STR[tooltip]",102:"DEFAULT",104:"INTERPOLATE",105:"NUM",106:"COMMA",109:"NODE_STRING",110:"UNIT",111:"BRKT",112:"PCT",114:"MINUS",115:"MULT",116:"UNICODE_TEXT",117:"TEXT",118:"TAGSTART",119:"EDGE_TEXT",121:"direction_tb",122:"direction_bt",123:"direction_rl",124:"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],[39,2],[39,1],[20,4],[20,3],[20,4],[20,2],[20,2],[20,1],[42,1],[42,6],[42,5],[43,1],[43,3],[45,4],[45,4],[45,6],[45,4],[45,4],[45,4],[45,8],[45,4],[45,4],[45,4],[45,6],[45,4],[45,4],[45,4],[45,4],[45,4],[45,1],[41,2],[41,3],[41,3],[41,1],[41,3],[41,4],[76,1],[76,2],[76,1],[76,1],[72,1],[72,2],[73,3],[30,1],[30,2],[30,1],[30,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,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],[103,1],[103,3],[92,1],[92,3],[107,1],[107,2],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[82,1],[82,1],[82,1],[82,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[79,1],[79,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[47,1],[47,2],[101,1],[101,2],[33,1],[33,1],[33,1],[33,1]],performAction:o(function(et,mt,Kt,lt,Cn,ge,Xf){var Te=ge.length-1;switch(Cn){case 2:this.$=[];break;case 3:(!Array.isArray(ge[Te])||ge[Te].length>0)&&ge[Te-1].push(ge[Te]),this.$=ge[Te-1];break;case 4:case 183:this.$=ge[Te];break;case 11:lt.setDirection("TB"),this.$="TB";break;case 12:lt.setDirection(ge[Te-1]),this.$=ge[Te-1];break;case 27:this.$=ge[Te-1].nodes;break;case 28:case 29:case 30:case 31:case 32:this.$=[];break;case 33:this.$=lt.addSubGraph(ge[Te-6],ge[Te-1],ge[Te-4]);break;case 34:this.$=lt.addSubGraph(ge[Te-3],ge[Te-1],ge[Te-3]);break;case 35:this.$=lt.addSubGraph(void 0,ge[Te-1],void 0);break;case 37:this.$=ge[Te].trim(),lt.setAccTitle(this.$);break;case 38:case 39:this.$=ge[Te].trim(),lt.setAccDescription(this.$);break;case 43:this.$=ge[Te-1]+ge[Te];break;case 44:this.$=ge[Te];break;case 45:lt.addVertex(ge[Te-1][ge[Te-1].length-1],void 0,void 0,void 0,void 0,void 0,void 0,ge[Te]),lt.addLink(ge[Te-3].stmt,ge[Te-1],ge[Te-2]),this.$={stmt:ge[Te-1],nodes:ge[Te-1].concat(ge[Te-3].nodes)};break;case 46:lt.addLink(ge[Te-2].stmt,ge[Te],ge[Te-1]),this.$={stmt:ge[Te],nodes:ge[Te].concat(ge[Te-2].nodes)};break;case 47:lt.addLink(ge[Te-3].stmt,ge[Te-1],ge[Te-2]),this.$={stmt:ge[Te-1],nodes:ge[Te-1].concat(ge[Te-3].nodes)};break;case 48:this.$={stmt:ge[Te-1],nodes:ge[Te-1]};break;case 49:lt.addVertex(ge[Te-1][ge[Te-1].length-1],void 0,void 0,void 0,void 0,void 0,void 0,ge[Te]),this.$={stmt:ge[Te-1],nodes:ge[Te-1],shapeData:ge[Te]};break;case 50:this.$={stmt:ge[Te],nodes:ge[Te]};break;case 51:this.$=[ge[Te]];break;case 52:lt.addVertex(ge[Te-5][ge[Te-5].length-1],void 0,void 0,void 0,void 0,void 0,void 0,ge[Te-4]),this.$=ge[Te-5].concat(ge[Te]);break;case 53:this.$=ge[Te-4].concat(ge[Te]);break;case 54:this.$=ge[Te];break;case 55:this.$=ge[Te-2],lt.setClass(ge[Te-2],ge[Te]);break;case 56:this.$=ge[Te-3],lt.addVertex(ge[Te-3],ge[Te-1],"square");break;case 57:this.$=ge[Te-3],lt.addVertex(ge[Te-3],ge[Te-1],"doublecircle");break;case 58:this.$=ge[Te-5],lt.addVertex(ge[Te-5],ge[Te-2],"circle");break;case 59:this.$=ge[Te-3],lt.addVertex(ge[Te-3],ge[Te-1],"ellipse");break;case 60:this.$=ge[Te-3],lt.addVertex(ge[Te-3],ge[Te-1],"stadium");break;case 61:this.$=ge[Te-3],lt.addVertex(ge[Te-3],ge[Te-1],"subroutine");break;case 62:this.$=ge[Te-7],lt.addVertex(ge[Te-7],ge[Te-1],"rect",void 0,void 0,void 0,Object.fromEntries([[ge[Te-5],ge[Te-3]]]));break;case 63:this.$=ge[Te-3],lt.addVertex(ge[Te-3],ge[Te-1],"cylinder");break;case 64:this.$=ge[Te-3],lt.addVertex(ge[Te-3],ge[Te-1],"round");break;case 65:this.$=ge[Te-3],lt.addVertex(ge[Te-3],ge[Te-1],"diamond");break;case 66:this.$=ge[Te-5],lt.addVertex(ge[Te-5],ge[Te-2],"hexagon");break;case 67:this.$=ge[Te-3],lt.addVertex(ge[Te-3],ge[Te-1],"odd");break;case 68:this.$=ge[Te-3],lt.addVertex(ge[Te-3],ge[Te-1],"trapezoid");break;case 69:this.$=ge[Te-3],lt.addVertex(ge[Te-3],ge[Te-1],"inv_trapezoid");break;case 70:this.$=ge[Te-3],lt.addVertex(ge[Te-3],ge[Te-1],"lean_right");break;case 71:this.$=ge[Te-3],lt.addVertex(ge[Te-3],ge[Te-1],"lean_left");break;case 72:this.$=ge[Te],lt.addVertex(ge[Te]);break;case 73:ge[Te-1].text=ge[Te],this.$=ge[Te-1];break;case 74:case 75:ge[Te-2].text=ge[Te-1],this.$=ge[Te-2];break;case 76:this.$=ge[Te];break;case 77:var Ti=lt.destructLink(ge[Te],ge[Te-2]);this.$={type:Ti.type,stroke:Ti.stroke,length:Ti.length,text:ge[Te-1]};break;case 78:var Ti=lt.destructLink(ge[Te],ge[Te-2]);this.$={type:Ti.type,stroke:Ti.stroke,length:Ti.length,text:ge[Te-1],id:ge[Te-3]};break;case 79:this.$={text:ge[Te],type:"text"};break;case 80:this.$={text:ge[Te-1].text+""+ge[Te],type:ge[Te-1].type};break;case 81:this.$={text:ge[Te],type:"string"};break;case 82:this.$={text:ge[Te],type:"markdown"};break;case 83:var Ti=lt.destructLink(ge[Te]);this.$={type:Ti.type,stroke:Ti.stroke,length:Ti.length};break;case 84:var Ti=lt.destructLink(ge[Te]);this.$={type:Ti.type,stroke:Ti.stroke,length:Ti.length,id:ge[Te-1]};break;case 85:this.$=ge[Te-1];break;case 86:this.$={text:ge[Te],type:"text"};break;case 87:this.$={text:ge[Te-1].text+""+ge[Te],type:ge[Te-1].type};break;case 88:this.$={text:ge[Te],type:"string"};break;case 89:case 104:this.$={text:ge[Te],type:"markdown"};break;case 101:this.$={text:ge[Te],type:"text"};break;case 102:this.$={text:ge[Te-1].text+""+ge[Te],type:ge[Te-1].type};break;case 103:this.$={text:ge[Te],type:"text"};break;case 105:this.$=ge[Te-4],lt.addClass(ge[Te-2],ge[Te]);break;case 106:this.$=ge[Te-4],lt.setClass(ge[Te-2],ge[Te]);break;case 107:case 115:this.$=ge[Te-1],lt.setClickEvent(ge[Te-1],ge[Te]);break;case 108:case 116:this.$=ge[Te-3],lt.setClickEvent(ge[Te-3],ge[Te-2]),lt.setTooltip(ge[Te-3],ge[Te]);break;case 109:this.$=ge[Te-2],lt.setClickEvent(ge[Te-2],ge[Te-1],ge[Te]);break;case 110:this.$=ge[Te-4],lt.setClickEvent(ge[Te-4],ge[Te-3],ge[Te-2]),lt.setTooltip(ge[Te-4],ge[Te]);break;case 111:this.$=ge[Te-2],lt.setLink(ge[Te-2],ge[Te]);break;case 112:this.$=ge[Te-4],lt.setLink(ge[Te-4],ge[Te-2]),lt.setTooltip(ge[Te-4],ge[Te]);break;case 113:this.$=ge[Te-4],lt.setLink(ge[Te-4],ge[Te-2],ge[Te]);break;case 114:this.$=ge[Te-6],lt.setLink(ge[Te-6],ge[Te-4],ge[Te]),lt.setTooltip(ge[Te-6],ge[Te-2]);break;case 117:this.$=ge[Te-1],lt.setLink(ge[Te-1],ge[Te]);break;case 118:this.$=ge[Te-3],lt.setLink(ge[Te-3],ge[Te-2]),lt.setTooltip(ge[Te-3],ge[Te]);break;case 119:this.$=ge[Te-3],lt.setLink(ge[Te-3],ge[Te-2],ge[Te]);break;case 120:this.$=ge[Te-5],lt.setLink(ge[Te-5],ge[Te-4],ge[Te]),lt.setTooltip(ge[Te-5],ge[Te-2]);break;case 121:this.$=ge[Te-4],lt.addVertex(ge[Te-2],void 0,void 0,ge[Te]);break;case 122:this.$=ge[Te-4],lt.updateLink([ge[Te-2]],ge[Te]);break;case 123:this.$=ge[Te-4],lt.updateLink(ge[Te-2],ge[Te]);break;case 124:this.$=ge[Te-8],lt.updateLinkInterpolate([ge[Te-6]],ge[Te-2]),lt.updateLink([ge[Te-6]],ge[Te]);break;case 125:this.$=ge[Te-8],lt.updateLinkInterpolate(ge[Te-6],ge[Te-2]),lt.updateLink(ge[Te-6],ge[Te]);break;case 126:this.$=ge[Te-6],lt.updateLinkInterpolate([ge[Te-4]],ge[Te]);break;case 127:this.$=ge[Te-6],lt.updateLinkInterpolate(ge[Te-4],ge[Te]);break;case 128:case 130:this.$=[ge[Te]];break;case 129:case 131:ge[Te-2].push(ge[Te]),this.$=ge[Te-2];break;case 133:this.$=ge[Te-1]+ge[Te];break;case 181:this.$=ge[Te];break;case 182:this.$=ge[Te-1]+""+ge[Te];break;case 184:this.$=ge[Te-1]+""+ge[Te];break;case 185:this.$={stmt:"dir",value:"TB"};break;case 186:this.$={stmt:"dir",value:"BT"};break;case 187:this.$={stmt:"dir",value:"RL"};break;case 188:this.$={stmt:"dir",value:"LR"};break}},"anonymous"),table:[{3:1,4:2,9:e,10:r,12:n},{1:[3]},t(i,a,{5:6}),{4:7,9:e,10:r,12:n},{4:8,9:e,10:r,12:n},{13:[1,9],14:[1,10]},{1:[2,1],6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,33:24,34:d,36:p,38:m,42:28,43:38,44:g,45:39,47:40,60:y,84:v,85:x,86:b,87:w,88:C,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:L,115:k,116:D,121:R,122:O,123:M,124:P},t(i,[2,9]),t(i,[2,10]),t(i,[2,11]),{8:[1,54],9:[1,55],10:B,15:53,18:56},t(F,[2,3]),t(F,[2,4]),t(F,[2,5]),t(F,[2,6]),t(F,[2,7]),t(F,[2,8]),{8:z,9:$,11:U,21:58,41:59,72:63,75:[1,64],77:[1,66],78:[1,65]},{8:z,9:$,11:U,21:67},{8:z,9:$,11:U,21:68},{8:z,9:$,11:U,21:69},{8:z,9:$,11:U,21:70},{8:z,9:$,11:U,21:71},{8:z,9:$,10:[1,72],11:U,21:73},t(F,[2,36]),{35:[1,74]},{37:[1,75]},t(F,[2,39]),t(Q,[2,50],{18:76,39:77,10:B,40:te}),{10:[1,79]},{10:[1,80]},{10:[1,81]},{10:[1,82]},{14:Y,44:he,60:Z,80:[1,86],89:ue,95:[1,83],97:[1,84],101:85,105:K,106:j,109:ne,111:ee,114:ce,115:le,116:J,120:87},t(F,[2,185]),t(F,[2,186]),t(F,[2,187]),t(F,[2,188]),t(Se,[2,51]),t(Se,[2,54],{46:[1,99]}),t(se,[2,72],{113:112,29:[1,100],44:g,48:[1,101],50:[1,102],52:[1,103],54:[1,104],56:[1,105],58:[1,106],60:y,63:[1,107],65:[1,108],67:[1,109],68:[1,110],70:[1,111],89:T,102:E,105:A,106:S,109:_,111:I,114:L,115:k,116:D}),t(ae,[2,181]),t(ae,[2,142]),t(ae,[2,143]),t(ae,[2,144]),t(ae,[2,145]),t(ae,[2,146]),t(ae,[2,147]),t(ae,[2,148]),t(ae,[2,149]),t(ae,[2,150]),t(ae,[2,151]),t(ae,[2,152]),t(i,[2,12]),t(i,[2,18]),t(i,[2,19]),{9:[1,113]},t(Oe,[2,26],{18:114,10:B}),t(F,[2,27]),{42:115,43:38,44:g,45:39,47:40,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:L,115:k,116:D},t(F,[2,40]),t(F,[2,41]),t(F,[2,42]),t(ye,[2,76],{73:116,62:[1,118],74:[1,117]}),{76:119,79:120,80:Be,81:He,116:ze,119:Le},{75:[1,125],77:[1,126]},t(Ie,[2,83]),t(F,[2,28]),t(F,[2,29]),t(F,[2,30]),t(F,[2,31]),t(F,[2,32]),{10:xe,12:q,14:de,27:ie,28:127,32:oe,44:V,60:we,75:W,80:[1,129],81:[1,130],83:140,84:pe,85:ve,86:Pe,87:_e,88:be,89:Ve,90:De,91:128,105:qe,109:at,111:Lt,114:st,115:Ue,116:ct},t(We,a,{5:153}),t(F,[2,37]),t(F,[2,38]),t(Q,[2,48],{44:ot}),t(Q,[2,49],{18:155,10:B,40:Yt}),t(Se,[2,44]),{44:g,47:157,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:L,115:k,116:D},{102:[1,158],103:159,105:[1,160]},{44:g,47:161,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:L,115:k,116:D},{44:g,47:162,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:L,115:k,116:D},t(bt,[2,107],{10:[1,163],96:[1,164]}),{80:[1,165]},t(bt,[2,115],{120:167,10:[1,166],14:Y,44:he,60:Z,89:ue,105:K,106:j,109:ne,111:ee,114:ce,115:le,116:J}),t(bt,[2,117],{10:[1,168]}),t(Mt,[2,183]),t(Mt,[2,170]),t(Mt,[2,171]),t(Mt,[2,172]),t(Mt,[2,173]),t(Mt,[2,174]),t(Mt,[2,175]),t(Mt,[2,176]),t(Mt,[2,177]),t(Mt,[2,178]),t(Mt,[2,179]),t(Mt,[2,180]),{44:g,47:169,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:L,115:k,116:D},{30:170,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{30:178,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{30:180,50:[1,179],67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{30:181,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{30:182,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{30:183,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{109:[1,184]},{30:185,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{30:186,65:[1,187],67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{30:188,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{30:189,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{30:190,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},t(ae,[2,182]),t(i,[2,20]),t(Oe,[2,25]),t(Q,[2,46],{39:191,18:192,10:B,40:te}),t(ye,[2,73],{10:[1,193]}),{10:[1,194]},{30:195,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{77:[1,196],79:197,116:ze,119:Le},t(dn,[2,79]),t(dn,[2,81]),t(dn,[2,82]),t(dn,[2,168]),t(dn,[2,169]),{76:198,79:120,80:Be,81:He,116:ze,119:Le},t(Ie,[2,84]),{8:z,9:$,10:xe,11:U,12:q,14:de,21:200,27:ie,29:[1,199],32:oe,44:V,60:we,75:W,83:140,84:pe,85:ve,86:Pe,87:_e,88:be,89:Ve,90:De,91:201,105:qe,109:at,111:Lt,114:st,115:Ue,116:ct},t(Tt,[2,101]),t(Tt,[2,103]),t(Tt,[2,104]),t(Tt,[2,157]),t(Tt,[2,158]),t(Tt,[2,159]),t(Tt,[2,160]),t(Tt,[2,161]),t(Tt,[2,162]),t(Tt,[2,163]),t(Tt,[2,164]),t(Tt,[2,165]),t(Tt,[2,166]),t(Tt,[2,167]),t(Tt,[2,90]),t(Tt,[2,91]),t(Tt,[2,92]),t(Tt,[2,93]),t(Tt,[2,94]),t(Tt,[2,95]),t(Tt,[2,96]),t(Tt,[2,97]),t(Tt,[2,98]),t(Tt,[2,99]),t(Tt,[2,100]),{6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,32:[1,202],33:24,34:d,36:p,38:m,42:28,43:38,44:g,45:39,47:40,60:y,84:v,85:x,86:b,87:w,88:C,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:L,115:k,116:D,121:R,122:O,123:M,124:P},{10:B,18:203},{44:[1,204]},t(Se,[2,43]),{10:[1,205],44:g,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:112,114:L,115:k,116:D},{10:[1,206]},{10:[1,207],106:[1,208]},t(On,[2,128]),{10:[1,209],44:g,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:112,114:L,115:k,116:D},{10:[1,210],44:g,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:112,114:L,115:k,116:D},{80:[1,211]},t(bt,[2,109],{10:[1,212]}),t(bt,[2,111],{10:[1,213]}),{80:[1,214]},t(Mt,[2,184]),{80:[1,215],98:[1,216]},t(Se,[2,55],{113:112,44:g,60:y,89:T,102:E,105:A,106:S,109:_,111:I,114:L,115:k,116:D}),{31:[1,217],67:xt,82:218,116:ft,117:yt,118:nt},t(tn,[2,86]),t(tn,[2,88]),t(tn,[2,89]),t(tn,[2,153]),t(tn,[2,154]),t(tn,[2,155]),t(tn,[2,156]),{49:[1,219],67:xt,82:218,116:ft,117:yt,118:nt},{30:220,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{51:[1,221],67:xt,82:218,116:ft,117:yt,118:nt},{53:[1,222],67:xt,82:218,116:ft,117:yt,118:nt},{55:[1,223],67:xt,82:218,116:ft,117:yt,118:nt},{57:[1,224],67:xt,82:218,116:ft,117:yt,118:nt},{60:[1,225]},{64:[1,226],67:xt,82:218,116:ft,117:yt,118:nt},{66:[1,227],67:xt,82:218,116:ft,117:yt,118:nt},{30:228,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},{31:[1,229],67:xt,82:218,116:ft,117:yt,118:nt},{67:xt,69:[1,230],71:[1,231],82:218,116:ft,117:yt,118:nt},{67:xt,69:[1,233],71:[1,232],82:218,116:ft,117:yt,118:nt},t(Q,[2,45],{18:155,10:B,40:Yt}),t(Q,[2,47],{44:ot}),t(ye,[2,75]),t(ye,[2,74]),{62:[1,234],67:xt,82:218,116:ft,117:yt,118:nt},t(ye,[2,77]),t(dn,[2,80]),{77:[1,235],79:197,116:ze,119:Le},{30:236,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},t(We,a,{5:237}),t(Tt,[2,102]),t(F,[2,35]),{43:238,44:g,45:39,47:40,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:L,115:k,116:D},{10:B,18:239},{10:_r,60:Dr,84:Pn,92:240,105:At,107:241,108:242,109:Ce,110:tt,111:St,112:gr},{10:_r,60:Dr,84:Pn,92:251,104:[1,252],105:At,107:241,108:242,109:Ce,110:tt,111:St,112:gr},{10:_r,60:Dr,84:Pn,92:253,104:[1,254],105:At,107:241,108:242,109:Ce,110:tt,111:St,112:gr},{105:[1,255]},{10:_r,60:Dr,84:Pn,92:256,105:At,107:241,108:242,109:Ce,110:tt,111:St,112:gr},{44:g,47:257,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:L,115:k,116:D},t(bt,[2,108]),{80:[1,258]},{80:[1,259],98:[1,260]},t(bt,[2,116]),t(bt,[2,118],{10:[1,261]}),t(bt,[2,119]),t(se,[2,56]),t(tn,[2,87]),t(se,[2,57]),{51:[1,262],67:xt,82:218,116:ft,117:yt,118:nt},t(se,[2,64]),t(se,[2,59]),t(se,[2,60]),t(se,[2,61]),{109:[1,263]},t(se,[2,63]),t(se,[2,65]),{66:[1,264],67:xt,82:218,116:ft,117:yt,118:nt},t(se,[2,67]),t(se,[2,68]),t(se,[2,70]),t(se,[2,69]),t(se,[2,71]),t([10,44,60,89,102,105,106,109,111,114,115,116],[2,85]),t(ye,[2,78]),{31:[1,265],67:xt,82:218,116:ft,117:yt,118:nt},{6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,32:[1,266],33:24,34:d,36:p,38:m,42:28,43:38,44:g,45:39,47:40,60:y,84:v,85:x,86:b,87:w,88:C,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:L,115:k,116:D,121:R,122:O,123:M,124:P},t(Se,[2,53]),{43:267,44:g,45:39,47:40,60:y,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:L,115:k,116:D},t(bt,[2,121],{106:rn}),t(gn,[2,130],{108:269,10:_r,60:Dr,84:Pn,105:At,109:Ce,110:tt,111:St,112:gr}),t(Zr,[2,132]),t(Zr,[2,134]),t(Zr,[2,135]),t(Zr,[2,136]),t(Zr,[2,137]),t(Zr,[2,138]),t(Zr,[2,139]),t(Zr,[2,140]),t(Zr,[2,141]),t(bt,[2,122],{106:rn}),{10:[1,270]},t(bt,[2,123],{106:rn}),{10:[1,271]},t(On,[2,129]),t(bt,[2,105],{106:rn}),t(bt,[2,106],{113:112,44:g,60:y,89:T,102:E,105:A,106:S,109:_,111:I,114:L,115:k,116:D}),t(bt,[2,110]),t(bt,[2,112],{10:[1,272]}),t(bt,[2,113]),{98:[1,273]},{51:[1,274]},{62:[1,275]},{66:[1,276]},{8:z,9:$,11:U,21:277},t(F,[2,34]),t(Se,[2,52]),{10:_r,60:Dr,84:Pn,105:At,107:278,108:242,109:Ce,110:tt,111:St,112:gr},t(Zr,[2,133]),{14:Y,44:he,60:Z,89:ue,101:279,105:K,106:j,109:ne,111:ee,114:ce,115:le,116:J,120:87},{14:Y,44:he,60:Z,89:ue,101:280,105:K,106:j,109:ne,111:ee,114:ce,115:le,116:J,120:87},{98:[1,281]},t(bt,[2,120]),t(se,[2,58]),{30:282,67:xt,80:ut,81:Et,82:171,116:ft,117:yt,118:nt},t(se,[2,66]),t(We,a,{5:283}),t(gn,[2,131],{108:269,10:_r,60:Dr,84:Pn,105:At,109:Ce,110:tt,111:St,112:gr}),t(bt,[2,126],{120:167,10:[1,284],14:Y,44:he,60:Z,89:ue,105:K,106:j,109:ne,111:ee,114:ce,115:le,116:J}),t(bt,[2,127],{120:167,10:[1,285],14:Y,44:he,60:Z,89:ue,105:K,106:j,109:ne,111:ee,114:ce,115:le,116:J}),t(bt,[2,114]),{31:[1,286],67:xt,82:218,116:ft,117:yt,118:nt},{6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,32:[1,287],33:24,34:d,36:p,38:m,42:28,43:38,44:g,45:39,47:40,60:y,84:v,85:x,86:b,87:w,88:C,89:T,102:E,105:A,106:S,109:_,111:I,113:41,114:L,115:k,116:D,121:R,122:O,123:M,124:P},{10:_r,60:Dr,84:Pn,92:288,105:At,107:241,108:242,109:Ce,110:tt,111:St,112:gr},{10:_r,60:Dr,84:Pn,92:289,105:At,107:241,108:242,109:Ce,110:tt,111:St,112:gr},t(se,[2,62]),t(F,[2,33]),t(bt,[2,124],{106:rn}),t(bt,[2,125],{106:rn})],defaultActions:{},parseError:o(function(et,mt){if(mt.recoverable)this.trace(et);else{var Kt=new Error(et);throw Kt.hash=mt,Kt}},"parseError"),parse:o(function(et){var mt=this,Kt=[0],lt=[],Cn=[null],ge=[],Xf=this.table,Te="",Ti=0,SF=0,CF=0,L2e=2,AF=1,R2e=ge.slice.call(arguments,1),ji=Object.create(this.lexer),jf={yy:{}};for(var SC in this.yy)Object.prototype.hasOwnProperty.call(this.yy,SC)&&(jf.yy[SC]=this.yy[SC]);ji.setInput(et,jf.yy),jf.yy.lexer=ji,jf.yy.parser=this,typeof ji.yylloc>"u"&&(ji.yylloc={});var CC=ji.yylloc;ge.push(CC);var N2e=ji.options&&ji.options.ranges;typeof jf.yy.parseError=="function"?this.parseError=jf.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function fnt(Ys){Kt.length=Kt.length-2*Ys,Cn.length=Cn.length-Ys,ge.length=ge.length-Ys}o(fnt,"popStack");function M2e(){var Ys;return Ys=lt.pop()||ji.lex()||AF,typeof Ys!="number"&&(Ys instanceof Array&&(lt=Ys,Ys=lt.pop()),Ys=mt.symbols_[Ys]||Ys),Ys}o(M2e,"lex");for(var Wa,AC,Kf,wo,dnt,_C,s0={},O4,nu,_F,P4;;){if(Kf=Kt[Kt.length-1],this.defaultActions[Kf]?wo=this.defaultActions[Kf]:((Wa===null||typeof Wa>"u")&&(Wa=M2e()),wo=Xf[Kf]&&Xf[Kf][Wa]),typeof wo>"u"||!wo.length||!wo[0]){var DC="";P4=[];for(O4 in Xf[Kf])this.terminals_[O4]&&O4>L2e&&P4.push("'"+this.terminals_[O4]+"'");ji.showPosition?DC="Parse error on line "+(Ti+1)+`: +Parent cluster`,i.height),e.setNode(i.id,x),e.parent(y)||(X.trace("Setting parent",y,i.id),e.setParent(y,i.id,x))}if(X.info("(Insert) Node XXX"+y+": "+JSON.stringify(e.node(y))),v?.clusterNode){X.info("Cluster identified XBX",y,v.width,e.node(y));let{ranksep:x,nodesep:b}=e.graph();v.graph.setGraph({...v.graph.graph(),ranksep:x+25,nodesep:b});let T=await Jae(d,v.graph,r,n,e.node(y),a),S=T.elem;Ke(v,S),v.diff=T.diff||0,X.info("New compound node after recursive render XAX",y,"width",v.width,"height",v.height),vee(S,v)}else e.children(y).length>0?(X.trace("Cluster - the non recursive path XBX",y,v.id,v,v.width,"Graph:",e),X.trace(Ym(v.id,e)),Tr.set(v.id,{id:Ym(v.id,e),node:v})):(X.trace("Node - the non recursive path XAX",y,d,e.node(y),s),await Am(d,e.node(y),{config:a,dir:s}))})),await o(async()=>{let y=e.edges().map(async function(v){let x=e.edge(v.v,v.w,v.name);X.info("Edge "+v.v+" -> "+v.w+": "+JSON.stringify(v)),X.info("Edge "+v.v+" -> "+v.w+": ",v," ",JSON.stringify(e.edge(v))),X.info("Fix",Tr,"ids:",v.v,v.w,"Translating: ",Tr.get(v.v),Tr.get(v.w)),await uw(f,x)});await Promise.all(y)},"processEdges")(),X.info("Graph before layout:",JSON.stringify(qo(e))),X.info("############################################# XXX"),X.info("### Layout ### XXX"),X.info("############################################# XXX"),G2(e),X.info("Graph after layout:",JSON.stringify(qo(e)));let m=0,{subGraphTitleTotalMargin:g}=Bu(a);return await Promise.all(Qae(e).map(async function(y){let v=e.node(y);if(X.info("Position XBX => "+y+": ("+v.x,","+v.y,") width: ",v.width," height: ",v.height),v?.clusterNode)v.y+=g,X.info("A tainted cluster node XBX1",y,v.id,v.width,v.height,v.x,v.y,e.parent(y)),Tr.get(v.id).node=v,M2(v);else if(e.children(y).length>0){X.info("A pure cluster node XBX1",y,v.id,v.x,v.y,v.width,v.height,e.parent(y)),v.height+=g,e.node(v.parentId);let x=v?.padding/2||0,b=v?.labelBBox?.height||0,T=b-x||0;X.debug("OffsetY",T,"labelHeight",b,"halfPadding",x),await Cm(u,v),Tr.get(v.id).node=v}else{let x=e.node(v.parentId);v.y+=g/2,X.info("A regular node XBX1 - using the padding",v.id,"parent",v.parentId,v.width,v.height,v.x,v.y,"offsetY",v.offsetY,"parent",x,x?.offsetY,v),M2(v)}})),e.edges().forEach(function(y){let v=e.edge(y);X.info("Edge "+y.v+" -> "+y.w+": "+JSON.stringify(v),v),v.points.forEach(S=>S.y+=g/2);let x=e.node(y.v);var b=e.node(y.w);let T=fw(h,v,Tr,r,x,b,n);hw(v,T)}),e.nodes().forEach(function(y){let v=e.node(y);X.info(y,v.type,v.diff),v.isGroup&&(m=v.diff)}),X.warn("Returning from recursive render XAX",l,m),{elem:l,diff:m}},"recursiveRender"),BPe=o(async(t,e)=>{let r=new sn({multigraph:!0,compound:!0}).setGraph({rankdir:t.direction,nodesep:t.config?.nodeSpacing||t.config?.flowchart?.nodeSpacing||t.nodeSpacing,ranksep:t.config?.rankSpacing||t.config?.flowchart?.rankSpacing||t.rankSpacing,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}}),n=e.select("g");dw(n,t.markers,t.type,t.diagramId),xee(),yee(),hee(),Wae(),t.nodes.forEach(a=>{r.setNode(a.id,{...a}),a.parentId&&r.setParent(a.id,a.parentId)}),X.debug("Edges:",t.edges),t.edges.forEach(a=>{if(a.start===a.end){let s=a.start,l=s+"---"+s+"---1",u=s+"---"+s+"---2",h=r.node(s);r.setNode(l,{domId:l,id:l,parentId:h.parentId,labelStyle:"",label:"",padding:0,shape:"labelRect",style:"",width:10,height:10}),r.setParent(l,h.parentId),r.setNode(u,{domId:u,id:u,parentId:h.parentId,labelStyle:"",padding:0,shape:"labelRect",label:"",style:"",width:10,height:10}),r.setParent(u,h.parentId);let f=structuredClone(a),d=structuredClone(a),p=structuredClone(a);f.label="",f.arrowTypeEnd="none",f.id=s+"-cyclic-special-1",d.arrowTypeStart="none",d.arrowTypeEnd="none",d.id=s+"-cyclic-special-mid",p.label="",h.isGroup&&(f.fromCluster=s,p.toCluster=s),p.id=s+"-cyclic-special-2",p.arrowTypeStart="none",r.setEdge(s,l,f,s+"-cyclic-special-0"),r.setEdge(l,u,d,s+"-cyclic-special-1"),r.setEdge(u,s,p,s+"-cyc{"use strict";Tee();yt();V2={},tN=o(t=>{for(let e of t)V2[e.name]=e},"registerLayoutLoaders"),FPe=o(()=>{tN([{name:"dagre",loader:o(async()=>await Promise.resolve().then(()=>(tse(),ese)),"loader")}])},"registerDefaultLayoutLoaders");FPe();Rc=o(async(t,e)=>{if(!(t.layoutAlgorithm in V2))throw new Error(`Unknown layout algorithm: ${t.layoutAlgorithm}`);let r=V2[t.layoutAlgorithm];return(await r.loader()).render(t,e,bee,{algorithm:r.algorithm})},"render"),uf=o((t="",{fallback:e="dagre"}={})=>{if(t in V2)return t;if(e in V2)return X.warn(`Layout algorithm ${t} is not registered. Using ${e} as fallback.`),e;throw new Error(`Both layout algorithms ${t} and ${e} are not registered.`)},"getRegisteredLayoutAlgorithm")});var Yo,$Pe,zPe,np=N(()=>{"use strict";xi();yt();Yo=o((t,e,r,n)=>{t.attr("class",r);let{width:i,height:a,x:s,y:l}=$Pe(t,e);fn(t,a,i,n);let u=zPe(s,l,i,a,e);t.attr("viewBox",u),X.debug(`viewBox configured: ${u} with padding: ${e}`)},"setupViewPortForSVG"),$Pe=o((t,e)=>{let r=t.node()?.getBBox()||{width:0,height:0,x:0,y:0};return{width:r.width+e*2,height:r.height+e*2,x:r.x,y:r.y}},"calculateDimensionsWithPadding"),zPe=o((t,e,r,n,i)=>`${t-i} ${e-i} ${r} ${n}`,"createViewBox")});var GPe,VPe,rse,nse=N(()=>{"use strict";fr();Gt();yt();Sm();rp();np();er();GPe=o(function(t,e){return e.db.getClasses()},"getClasses"),VPe=o(async function(t,e,r,n){X.info("REF0:"),X.info("Drawing state diagram (v2)",e);let{securityLevel:i,flowchart:a,layout:s}=me(),l;i==="sandbox"&&(l=Ge("#i"+e));let u=i==="sandbox"?l.nodes()[0].contentDocument:document;X.debug("Before getData: ");let h=n.db.getData();X.debug("Data: ",h);let f=wc(e,i),d=n.db.getDirection();h.type=n.type,h.layoutAlgorithm=uf(s),h.layoutAlgorithm==="dagre"&&s==="elk"&&X.warn("flowchart-elk was moved to an external package in Mermaid v11. Please refer [release notes](https://github.com/mermaid-js/mermaid/releases/tag/v11.0.0) for more details. This diagram will be rendered using `dagre` layout as a fallback."),h.direction=d,h.nodeSpacing=a?.nodeSpacing||50,h.rankSpacing=a?.rankSpacing||50,h.markers=["point","circle","cross"],h.diagramId=e,X.debug("REF1:",h),await Rc(h,f);let p=h.config.flowchart?.diagramPadding??8;Vt.insertTitle(f,"flowchartTitleText",a?.titleTopMargin||0,n.db.getDiagramTitle()),Yo(f,p,"flowchart",a?.useMaxWidth||!1);for(let m of h.nodes){let g=Ge(`#${e} [id="${m.id}"]`);if(!g||!m.link)continue;let y=u.createElementNS("http://www.w3.org/2000/svg","a");y.setAttributeNS("http://www.w3.org/2000/svg","class",m.cssClasses),y.setAttributeNS("http://www.w3.org/2000/svg","rel","noopener"),i==="sandbox"?y.setAttributeNS("http://www.w3.org/2000/svg","target","_top"):m.linkTarget&&y.setAttributeNS("http://www.w3.org/2000/svg","target",m.linkTarget);let v=g.insert(function(){return y},":first-child"),x=g.select(".label-container");x&&v.append(function(){return x.node()});let b=g.select(".label");b&&v.append(function(){return b.node()})}},"draw"),rse={getClasses:GPe,draw:VPe}});var rN,nN,ise=N(()=>{"use strict";rN=function(){var t=o(function(Hr,et,gt,Kt){for(gt=gt||{},Kt=Hr.length;Kt--;gt[Hr[Kt]]=et);return gt},"o"),e=[1,4],r=[1,3],n=[1,5],i=[1,8,9,10,11,27,34,36,38,44,60,84,85,86,87,88,89,102,105,106,109,111,114,115,116,121,122,123,124],a=[2,2],s=[1,13],l=[1,14],u=[1,15],h=[1,16],f=[1,23],d=[1,25],p=[1,26],m=[1,27],g=[1,49],y=[1,48],v=[1,29],x=[1,30],b=[1,31],T=[1,32],S=[1,33],w=[1,44],E=[1,46],_=[1,42],C=[1,47],D=[1,43],O=[1,50],R=[1,45],k=[1,51],L=[1,52],A=[1,34],I=[1,35],M=[1,36],P=[1,37],B=[1,57],F=[1,8,9,10,11,27,32,34,36,38,44,60,84,85,86,87,88,89,102,105,106,109,111,114,115,116,121,122,123,124],z=[1,61],$=[1,60],U=[1,62],K=[8,9,11,75,77,78],ee=[1,78],Y=[1,91],ce=[1,96],Z=[1,95],ue=[1,92],Q=[1,88],j=[1,94],ne=[1,90],te=[1,97],he=[1,93],le=[1,98],J=[1,89],Se=[8,9,10,11,40,75,77,78],se=[8,9,10,11,40,46,75,77,78],ae=[8,9,10,11,29,40,44,46,48,50,52,54,56,58,60,63,65,67,68,70,75,77,78,89,102,105,106,109,111,114,115,116],Oe=[8,9,11,44,60,75,77,78,89,102,105,106,109,111,114,115,116],ye=[44,60,89,102,105,106,109,111,114,115,116],Be=[1,121],He=[1,122],ze=[1,124],Le=[1,123],Ie=[44,60,62,74,89,102,105,106,109,111,114,115,116],xe=[1,133],q=[1,147],de=[1,148],ie=[1,149],oe=[1,150],V=[1,135],Te=[1,137],W=[1,141],pe=[1,142],ve=[1,143],Pe=[1,144],_e=[1,145],be=[1,146],Ve=[1,151],De=[1,152],qe=[1,131],at=[1,132],Rt=[1,139],st=[1,134],Ue=[1,138],ct=[1,136],We=[8,9,10,11,27,32,34,36,38,44,60,84,85,86,87,88,89,102,105,106,109,111,114,115,116,121,122,123,124],ot=[1,154],Yt=[1,156],Tt=[8,9,11],Mt=[8,9,10,11,14,44,60,89,105,106,109,111,114,115,116],bt=[1,176],ut=[1,172],St=[1,173],ft=[1,177],vt=[1,174],nt=[1,175],pn=[77,116,119],kt=[8,9,10,11,12,14,27,29,32,44,60,75,84,85,86,87,88,89,90,105,109,111,114,115,116],On=[10,106],tn=[31,49,51,53,55,57,62,64,66,67,69,71,116,117,118],Mr=[1,247],Ir=[1,245],Pn=[1,249],Dt=[1,243],Ce=[1,244],tt=[1,246],Ct=[1,248],gr=[1,250],rn=[1,268],yn=[8,9,11,106],Zr=[8,9,10,11,60,84,105,106,109,110,111,112],Oi={trace:o(function(){},"trace"),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,FirstStmtSeparator:15,ending:16,endToken:17,spaceList:18,spaceListNewline:19,vertexStatement: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,shapeData:39,SHAPE_DATA:40,link:41,node:42,styledVertex:43,AMP:44,vertex:45,STYLE_SEPARATOR:46,idString:47,DOUBLECIRCLESTART:48,DOUBLECIRCLEEND:49,PS:50,PE:51,"(-":52,"-)":53,STADIUMSTART:54,STADIUMEND:55,SUBROUTINESTART:56,SUBROUTINEEND:57,VERTEX_WITH_PROPS_START:58,"NODE_STRING[field]":59,COLON:60,"NODE_STRING[value]":61,PIPE:62,CYLINDERSTART:63,CYLINDEREND:64,DIAMOND_START:65,DIAMOND_STOP:66,TAGEND:67,TRAPSTART:68,TRAPEND:69,INVTRAPSTART:70,INVTRAPEND:71,linkStatement:72,arrowText:73,TESTSTR:74,START_LINK:75,edgeText:76,LINK:77,LINK_ID:78,edgeTextToken:79,STR:80,MD_STR:81,textToken:82,keywords:83,STYLE:84,LINKSTYLE:85,CLASSDEF:86,CLASS:87,CLICK:88,DOWN:89,UP:90,textNoTagsToken:91,stylesOpt:92,"idString[vertex]":93,"idString[class]":94,CALLBACKNAME:95,CALLBACKARGS:96,HREF:97,LINK_TARGET:98,"STR[link]":99,"STR[tooltip]":100,alphaNum:101,DEFAULT:102,numList:103,INTERPOLATE:104,NUM:105,COMMA:106,style:107,styleComponent:108,NODE_STRING:109,UNIT:110,BRKT:111,PCT:112,idStringToken:113,MINUS:114,MULT:115,UNICODE_TEXT:116,TEXT:117,TAGSTART:118,EDGE_TEXT:119,alphaNumToken:120,direction_tb:121,direction_bt:122,direction_rl:123,direction_lr:124,$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",40:"SHAPE_DATA",44:"AMP",46:"STYLE_SEPARATOR",48:"DOUBLECIRCLESTART",49:"DOUBLECIRCLEEND",50:"PS",51:"PE",52:"(-",53:"-)",54:"STADIUMSTART",55:"STADIUMEND",56:"SUBROUTINESTART",57:"SUBROUTINEEND",58:"VERTEX_WITH_PROPS_START",59:"NODE_STRING[field]",60:"COLON",61:"NODE_STRING[value]",62:"PIPE",63:"CYLINDERSTART",64:"CYLINDEREND",65:"DIAMOND_START",66:"DIAMOND_STOP",67:"TAGEND",68:"TRAPSTART",69:"TRAPEND",70:"INVTRAPSTART",71:"INVTRAPEND",74:"TESTSTR",75:"START_LINK",77:"LINK",78:"LINK_ID",80:"STR",81:"MD_STR",84:"STYLE",85:"LINKSTYLE",86:"CLASSDEF",87:"CLASS",88:"CLICK",89:"DOWN",90:"UP",93:"idString[vertex]",94:"idString[class]",95:"CALLBACKNAME",96:"CALLBACKARGS",97:"HREF",98:"LINK_TARGET",99:"STR[link]",100:"STR[tooltip]",102:"DEFAULT",104:"INTERPOLATE",105:"NUM",106:"COMMA",109:"NODE_STRING",110:"UNIT",111:"BRKT",112:"PCT",114:"MINUS",115:"MULT",116:"UNICODE_TEXT",117:"TEXT",118:"TAGSTART",119:"EDGE_TEXT",121:"direction_tb",122:"direction_bt",123:"direction_rl",124:"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],[39,2],[39,1],[20,4],[20,3],[20,4],[20,2],[20,2],[20,1],[42,1],[42,6],[42,5],[43,1],[43,3],[45,4],[45,4],[45,6],[45,4],[45,4],[45,4],[45,8],[45,4],[45,4],[45,4],[45,6],[45,4],[45,4],[45,4],[45,4],[45,4],[45,1],[41,2],[41,3],[41,3],[41,1],[41,3],[41,4],[76,1],[76,2],[76,1],[76,1],[72,1],[72,2],[73,3],[30,1],[30,2],[30,1],[30,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,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],[103,1],[103,3],[92,1],[92,3],[107,1],[107,2],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[82,1],[82,1],[82,1],[82,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[79,1],[79,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[47,1],[47,2],[101,1],[101,2],[33,1],[33,1],[33,1],[33,1]],performAction:o(function(et,gt,Kt,lt,Cn,ge,Qf){var we=ge.length-1;switch(Cn){case 2:this.$=[];break;case 3:(!Array.isArray(ge[we])||ge[we].length>0)&&ge[we-1].push(ge[we]),this.$=ge[we-1];break;case 4:case 183:this.$=ge[we];break;case 11:lt.setDirection("TB"),this.$="TB";break;case 12:lt.setDirection(ge[we-1]),this.$=ge[we-1];break;case 27:this.$=ge[we-1].nodes;break;case 28:case 29:case 30:case 31:case 32:this.$=[];break;case 33:this.$=lt.addSubGraph(ge[we-6],ge[we-1],ge[we-4]);break;case 34:this.$=lt.addSubGraph(ge[we-3],ge[we-1],ge[we-3]);break;case 35:this.$=lt.addSubGraph(void 0,ge[we-1],void 0);break;case 37:this.$=ge[we].trim(),lt.setAccTitle(this.$);break;case 38:case 39:this.$=ge[we].trim(),lt.setAccDescription(this.$);break;case 43:this.$=ge[we-1]+ge[we];break;case 44:this.$=ge[we];break;case 45:lt.addVertex(ge[we-1][ge[we-1].length-1],void 0,void 0,void 0,void 0,void 0,void 0,ge[we]),lt.addLink(ge[we-3].stmt,ge[we-1],ge[we-2]),this.$={stmt:ge[we-1],nodes:ge[we-1].concat(ge[we-3].nodes)};break;case 46:lt.addLink(ge[we-2].stmt,ge[we],ge[we-1]),this.$={stmt:ge[we],nodes:ge[we].concat(ge[we-2].nodes)};break;case 47:lt.addLink(ge[we-3].stmt,ge[we-1],ge[we-2]),this.$={stmt:ge[we-1],nodes:ge[we-1].concat(ge[we-3].nodes)};break;case 48:this.$={stmt:ge[we-1],nodes:ge[we-1]};break;case 49:lt.addVertex(ge[we-1][ge[we-1].length-1],void 0,void 0,void 0,void 0,void 0,void 0,ge[we]),this.$={stmt:ge[we-1],nodes:ge[we-1],shapeData:ge[we]};break;case 50:this.$={stmt:ge[we],nodes:ge[we]};break;case 51:this.$=[ge[we]];break;case 52:lt.addVertex(ge[we-5][ge[we-5].length-1],void 0,void 0,void 0,void 0,void 0,void 0,ge[we-4]),this.$=ge[we-5].concat(ge[we]);break;case 53:this.$=ge[we-4].concat(ge[we]);break;case 54:this.$=ge[we];break;case 55:this.$=ge[we-2],lt.setClass(ge[we-2],ge[we]);break;case 56:this.$=ge[we-3],lt.addVertex(ge[we-3],ge[we-1],"square");break;case 57:this.$=ge[we-3],lt.addVertex(ge[we-3],ge[we-1],"doublecircle");break;case 58:this.$=ge[we-5],lt.addVertex(ge[we-5],ge[we-2],"circle");break;case 59:this.$=ge[we-3],lt.addVertex(ge[we-3],ge[we-1],"ellipse");break;case 60:this.$=ge[we-3],lt.addVertex(ge[we-3],ge[we-1],"stadium");break;case 61:this.$=ge[we-3],lt.addVertex(ge[we-3],ge[we-1],"subroutine");break;case 62:this.$=ge[we-7],lt.addVertex(ge[we-7],ge[we-1],"rect",void 0,void 0,void 0,Object.fromEntries([[ge[we-5],ge[we-3]]]));break;case 63:this.$=ge[we-3],lt.addVertex(ge[we-3],ge[we-1],"cylinder");break;case 64:this.$=ge[we-3],lt.addVertex(ge[we-3],ge[we-1],"round");break;case 65:this.$=ge[we-3],lt.addVertex(ge[we-3],ge[we-1],"diamond");break;case 66:this.$=ge[we-5],lt.addVertex(ge[we-5],ge[we-2],"hexagon");break;case 67:this.$=ge[we-3],lt.addVertex(ge[we-3],ge[we-1],"odd");break;case 68:this.$=ge[we-3],lt.addVertex(ge[we-3],ge[we-1],"trapezoid");break;case 69:this.$=ge[we-3],lt.addVertex(ge[we-3],ge[we-1],"inv_trapezoid");break;case 70:this.$=ge[we-3],lt.addVertex(ge[we-3],ge[we-1],"lean_right");break;case 71:this.$=ge[we-3],lt.addVertex(ge[we-3],ge[we-1],"lean_left");break;case 72:this.$=ge[we],lt.addVertex(ge[we]);break;case 73:ge[we-1].text=ge[we],this.$=ge[we-1];break;case 74:case 75:ge[we-2].text=ge[we-1],this.$=ge[we-2];break;case 76:this.$=ge[we];break;case 77:var Ei=lt.destructLink(ge[we],ge[we-2]);this.$={type:Ei.type,stroke:Ei.stroke,length:Ei.length,text:ge[we-1]};break;case 78:var Ei=lt.destructLink(ge[we],ge[we-2]);this.$={type:Ei.type,stroke:Ei.stroke,length:Ei.length,text:ge[we-1],id:ge[we-3]};break;case 79:this.$={text:ge[we],type:"text"};break;case 80:this.$={text:ge[we-1].text+""+ge[we],type:ge[we-1].type};break;case 81:this.$={text:ge[we],type:"string"};break;case 82:this.$={text:ge[we],type:"markdown"};break;case 83:var Ei=lt.destructLink(ge[we]);this.$={type:Ei.type,stroke:Ei.stroke,length:Ei.length};break;case 84:var Ei=lt.destructLink(ge[we]);this.$={type:Ei.type,stroke:Ei.stroke,length:Ei.length,id:ge[we-1]};break;case 85:this.$=ge[we-1];break;case 86:this.$={text:ge[we],type:"text"};break;case 87:this.$={text:ge[we-1].text+""+ge[we],type:ge[we-1].type};break;case 88:this.$={text:ge[we],type:"string"};break;case 89:case 104:this.$={text:ge[we],type:"markdown"};break;case 101:this.$={text:ge[we],type:"text"};break;case 102:this.$={text:ge[we-1].text+""+ge[we],type:ge[we-1].type};break;case 103:this.$={text:ge[we],type:"text"};break;case 105:this.$=ge[we-4],lt.addClass(ge[we-2],ge[we]);break;case 106:this.$=ge[we-4],lt.setClass(ge[we-2],ge[we]);break;case 107:case 115:this.$=ge[we-1],lt.setClickEvent(ge[we-1],ge[we]);break;case 108:case 116:this.$=ge[we-3],lt.setClickEvent(ge[we-3],ge[we-2]),lt.setTooltip(ge[we-3],ge[we]);break;case 109:this.$=ge[we-2],lt.setClickEvent(ge[we-2],ge[we-1],ge[we]);break;case 110:this.$=ge[we-4],lt.setClickEvent(ge[we-4],ge[we-3],ge[we-2]),lt.setTooltip(ge[we-4],ge[we]);break;case 111:this.$=ge[we-2],lt.setLink(ge[we-2],ge[we]);break;case 112:this.$=ge[we-4],lt.setLink(ge[we-4],ge[we-2]),lt.setTooltip(ge[we-4],ge[we]);break;case 113:this.$=ge[we-4],lt.setLink(ge[we-4],ge[we-2],ge[we]);break;case 114:this.$=ge[we-6],lt.setLink(ge[we-6],ge[we-4],ge[we]),lt.setTooltip(ge[we-6],ge[we-2]);break;case 117:this.$=ge[we-1],lt.setLink(ge[we-1],ge[we]);break;case 118:this.$=ge[we-3],lt.setLink(ge[we-3],ge[we-2]),lt.setTooltip(ge[we-3],ge[we]);break;case 119:this.$=ge[we-3],lt.setLink(ge[we-3],ge[we-2],ge[we]);break;case 120:this.$=ge[we-5],lt.setLink(ge[we-5],ge[we-4],ge[we]),lt.setTooltip(ge[we-5],ge[we-2]);break;case 121:this.$=ge[we-4],lt.addVertex(ge[we-2],void 0,void 0,ge[we]);break;case 122:this.$=ge[we-4],lt.updateLink([ge[we-2]],ge[we]);break;case 123:this.$=ge[we-4],lt.updateLink(ge[we-2],ge[we]);break;case 124:this.$=ge[we-8],lt.updateLinkInterpolate([ge[we-6]],ge[we-2]),lt.updateLink([ge[we-6]],ge[we]);break;case 125:this.$=ge[we-8],lt.updateLinkInterpolate(ge[we-6],ge[we-2]),lt.updateLink(ge[we-6],ge[we]);break;case 126:this.$=ge[we-6],lt.updateLinkInterpolate([ge[we-4]],ge[we]);break;case 127:this.$=ge[we-6],lt.updateLinkInterpolate(ge[we-4],ge[we]);break;case 128:case 130:this.$=[ge[we]];break;case 129:case 131:ge[we-2].push(ge[we]),this.$=ge[we-2];break;case 133:this.$=ge[we-1]+ge[we];break;case 181:this.$=ge[we];break;case 182:this.$=ge[we-1]+""+ge[we];break;case 184:this.$=ge[we-1]+""+ge[we];break;case 185:this.$={stmt:"dir",value:"TB"};break;case 186:this.$={stmt:"dir",value:"BT"};break;case 187:this.$={stmt:"dir",value:"RL"};break;case 188:this.$={stmt:"dir",value:"LR"};break}},"anonymous"),table:[{3:1,4:2,9:e,10:r,12:n},{1:[3]},t(i,a,{5:6}),{4:7,9:e,10:r,12:n},{4:8,9:e,10:r,12:n},{13:[1,9],14:[1,10]},{1:[2,1],6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,33:24,34:d,36:p,38:m,42:28,43:38,44:g,45:39,47:40,60:y,84:v,85:x,86:b,87:T,88:S,89:w,102:E,105:_,106:C,109:D,111:O,113:41,114:R,115:k,116:L,121:A,122:I,123:M,124:P},t(i,[2,9]),t(i,[2,10]),t(i,[2,11]),{8:[1,54],9:[1,55],10:B,15:53,18:56},t(F,[2,3]),t(F,[2,4]),t(F,[2,5]),t(F,[2,6]),t(F,[2,7]),t(F,[2,8]),{8:z,9:$,11:U,21:58,41:59,72:63,75:[1,64],77:[1,66],78:[1,65]},{8:z,9:$,11:U,21:67},{8:z,9:$,11:U,21:68},{8:z,9:$,11:U,21:69},{8:z,9:$,11:U,21:70},{8:z,9:$,11:U,21:71},{8:z,9:$,10:[1,72],11:U,21:73},t(F,[2,36]),{35:[1,74]},{37:[1,75]},t(F,[2,39]),t(K,[2,50],{18:76,39:77,10:B,40:ee}),{10:[1,79]},{10:[1,80]},{10:[1,81]},{10:[1,82]},{14:Y,44:ce,60:Z,80:[1,86],89:ue,95:[1,83],97:[1,84],101:85,105:Q,106:j,109:ne,111:te,114:he,115:le,116:J,120:87},t(F,[2,185]),t(F,[2,186]),t(F,[2,187]),t(F,[2,188]),t(Se,[2,51]),t(Se,[2,54],{46:[1,99]}),t(se,[2,72],{113:112,29:[1,100],44:g,48:[1,101],50:[1,102],52:[1,103],54:[1,104],56:[1,105],58:[1,106],60:y,63:[1,107],65:[1,108],67:[1,109],68:[1,110],70:[1,111],89:w,102:E,105:_,106:C,109:D,111:O,114:R,115:k,116:L}),t(ae,[2,181]),t(ae,[2,142]),t(ae,[2,143]),t(ae,[2,144]),t(ae,[2,145]),t(ae,[2,146]),t(ae,[2,147]),t(ae,[2,148]),t(ae,[2,149]),t(ae,[2,150]),t(ae,[2,151]),t(ae,[2,152]),t(i,[2,12]),t(i,[2,18]),t(i,[2,19]),{9:[1,113]},t(Oe,[2,26],{18:114,10:B}),t(F,[2,27]),{42:115,43:38,44:g,45:39,47:40,60:y,89:w,102:E,105:_,106:C,109:D,111:O,113:41,114:R,115:k,116:L},t(F,[2,40]),t(F,[2,41]),t(F,[2,42]),t(ye,[2,76],{73:116,62:[1,118],74:[1,117]}),{76:119,79:120,80:Be,81:He,116:ze,119:Le},{75:[1,125],77:[1,126]},t(Ie,[2,83]),t(F,[2,28]),t(F,[2,29]),t(F,[2,30]),t(F,[2,31]),t(F,[2,32]),{10:xe,12:q,14:de,27:ie,28:127,32:oe,44:V,60:Te,75:W,80:[1,129],81:[1,130],83:140,84:pe,85:ve,86:Pe,87:_e,88:be,89:Ve,90:De,91:128,105:qe,109:at,111:Rt,114:st,115:Ue,116:ct},t(We,a,{5:153}),t(F,[2,37]),t(F,[2,38]),t(K,[2,48],{44:ot}),t(K,[2,49],{18:155,10:B,40:Yt}),t(Se,[2,44]),{44:g,47:157,60:y,89:w,102:E,105:_,106:C,109:D,111:O,113:41,114:R,115:k,116:L},{102:[1,158],103:159,105:[1,160]},{44:g,47:161,60:y,89:w,102:E,105:_,106:C,109:D,111:O,113:41,114:R,115:k,116:L},{44:g,47:162,60:y,89:w,102:E,105:_,106:C,109:D,111:O,113:41,114:R,115:k,116:L},t(Tt,[2,107],{10:[1,163],96:[1,164]}),{80:[1,165]},t(Tt,[2,115],{120:167,10:[1,166],14:Y,44:ce,60:Z,89:ue,105:Q,106:j,109:ne,111:te,114:he,115:le,116:J}),t(Tt,[2,117],{10:[1,168]}),t(Mt,[2,183]),t(Mt,[2,170]),t(Mt,[2,171]),t(Mt,[2,172]),t(Mt,[2,173]),t(Mt,[2,174]),t(Mt,[2,175]),t(Mt,[2,176]),t(Mt,[2,177]),t(Mt,[2,178]),t(Mt,[2,179]),t(Mt,[2,180]),{44:g,47:169,60:y,89:w,102:E,105:_,106:C,109:D,111:O,113:41,114:R,115:k,116:L},{30:170,67:bt,80:ut,81:St,82:171,116:ft,117:vt,118:nt},{30:178,67:bt,80:ut,81:St,82:171,116:ft,117:vt,118:nt},{30:180,50:[1,179],67:bt,80:ut,81:St,82:171,116:ft,117:vt,118:nt},{30:181,67:bt,80:ut,81:St,82:171,116:ft,117:vt,118:nt},{30:182,67:bt,80:ut,81:St,82:171,116:ft,117:vt,118:nt},{30:183,67:bt,80:ut,81:St,82:171,116:ft,117:vt,118:nt},{109:[1,184]},{30:185,67:bt,80:ut,81:St,82:171,116:ft,117:vt,118:nt},{30:186,65:[1,187],67:bt,80:ut,81:St,82:171,116:ft,117:vt,118:nt},{30:188,67:bt,80:ut,81:St,82:171,116:ft,117:vt,118:nt},{30:189,67:bt,80:ut,81:St,82:171,116:ft,117:vt,118:nt},{30:190,67:bt,80:ut,81:St,82:171,116:ft,117:vt,118:nt},t(ae,[2,182]),t(i,[2,20]),t(Oe,[2,25]),t(K,[2,46],{39:191,18:192,10:B,40:ee}),t(ye,[2,73],{10:[1,193]}),{10:[1,194]},{30:195,67:bt,80:ut,81:St,82:171,116:ft,117:vt,118:nt},{77:[1,196],79:197,116:ze,119:Le},t(pn,[2,79]),t(pn,[2,81]),t(pn,[2,82]),t(pn,[2,168]),t(pn,[2,169]),{76:198,79:120,80:Be,81:He,116:ze,119:Le},t(Ie,[2,84]),{8:z,9:$,10:xe,11:U,12:q,14:de,21:200,27:ie,29:[1,199],32:oe,44:V,60:Te,75:W,83:140,84:pe,85:ve,86:Pe,87:_e,88:be,89:Ve,90:De,91:201,105:qe,109:at,111:Rt,114:st,115:Ue,116:ct},t(kt,[2,101]),t(kt,[2,103]),t(kt,[2,104]),t(kt,[2,157]),t(kt,[2,158]),t(kt,[2,159]),t(kt,[2,160]),t(kt,[2,161]),t(kt,[2,162]),t(kt,[2,163]),t(kt,[2,164]),t(kt,[2,165]),t(kt,[2,166]),t(kt,[2,167]),t(kt,[2,90]),t(kt,[2,91]),t(kt,[2,92]),t(kt,[2,93]),t(kt,[2,94]),t(kt,[2,95]),t(kt,[2,96]),t(kt,[2,97]),t(kt,[2,98]),t(kt,[2,99]),t(kt,[2,100]),{6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,32:[1,202],33:24,34:d,36:p,38:m,42:28,43:38,44:g,45:39,47:40,60:y,84:v,85:x,86:b,87:T,88:S,89:w,102:E,105:_,106:C,109:D,111:O,113:41,114:R,115:k,116:L,121:A,122:I,123:M,124:P},{10:B,18:203},{44:[1,204]},t(Se,[2,43]),{10:[1,205],44:g,60:y,89:w,102:E,105:_,106:C,109:D,111:O,113:112,114:R,115:k,116:L},{10:[1,206]},{10:[1,207],106:[1,208]},t(On,[2,128]),{10:[1,209],44:g,60:y,89:w,102:E,105:_,106:C,109:D,111:O,113:112,114:R,115:k,116:L},{10:[1,210],44:g,60:y,89:w,102:E,105:_,106:C,109:D,111:O,113:112,114:R,115:k,116:L},{80:[1,211]},t(Tt,[2,109],{10:[1,212]}),t(Tt,[2,111],{10:[1,213]}),{80:[1,214]},t(Mt,[2,184]),{80:[1,215],98:[1,216]},t(Se,[2,55],{113:112,44:g,60:y,89:w,102:E,105:_,106:C,109:D,111:O,114:R,115:k,116:L}),{31:[1,217],67:bt,82:218,116:ft,117:vt,118:nt},t(tn,[2,86]),t(tn,[2,88]),t(tn,[2,89]),t(tn,[2,153]),t(tn,[2,154]),t(tn,[2,155]),t(tn,[2,156]),{49:[1,219],67:bt,82:218,116:ft,117:vt,118:nt},{30:220,67:bt,80:ut,81:St,82:171,116:ft,117:vt,118:nt},{51:[1,221],67:bt,82:218,116:ft,117:vt,118:nt},{53:[1,222],67:bt,82:218,116:ft,117:vt,118:nt},{55:[1,223],67:bt,82:218,116:ft,117:vt,118:nt},{57:[1,224],67:bt,82:218,116:ft,117:vt,118:nt},{60:[1,225]},{64:[1,226],67:bt,82:218,116:ft,117:vt,118:nt},{66:[1,227],67:bt,82:218,116:ft,117:vt,118:nt},{30:228,67:bt,80:ut,81:St,82:171,116:ft,117:vt,118:nt},{31:[1,229],67:bt,82:218,116:ft,117:vt,118:nt},{67:bt,69:[1,230],71:[1,231],82:218,116:ft,117:vt,118:nt},{67:bt,69:[1,233],71:[1,232],82:218,116:ft,117:vt,118:nt},t(K,[2,45],{18:155,10:B,40:Yt}),t(K,[2,47],{44:ot}),t(ye,[2,75]),t(ye,[2,74]),{62:[1,234],67:bt,82:218,116:ft,117:vt,118:nt},t(ye,[2,77]),t(pn,[2,80]),{77:[1,235],79:197,116:ze,119:Le},{30:236,67:bt,80:ut,81:St,82:171,116:ft,117:vt,118:nt},t(We,a,{5:237}),t(kt,[2,102]),t(F,[2,35]),{43:238,44:g,45:39,47:40,60:y,89:w,102:E,105:_,106:C,109:D,111:O,113:41,114:R,115:k,116:L},{10:B,18:239},{10:Mr,60:Ir,84:Pn,92:240,105:Dt,107:241,108:242,109:Ce,110:tt,111:Ct,112:gr},{10:Mr,60:Ir,84:Pn,92:251,104:[1,252],105:Dt,107:241,108:242,109:Ce,110:tt,111:Ct,112:gr},{10:Mr,60:Ir,84:Pn,92:253,104:[1,254],105:Dt,107:241,108:242,109:Ce,110:tt,111:Ct,112:gr},{105:[1,255]},{10:Mr,60:Ir,84:Pn,92:256,105:Dt,107:241,108:242,109:Ce,110:tt,111:Ct,112:gr},{44:g,47:257,60:y,89:w,102:E,105:_,106:C,109:D,111:O,113:41,114:R,115:k,116:L},t(Tt,[2,108]),{80:[1,258]},{80:[1,259],98:[1,260]},t(Tt,[2,116]),t(Tt,[2,118],{10:[1,261]}),t(Tt,[2,119]),t(se,[2,56]),t(tn,[2,87]),t(se,[2,57]),{51:[1,262],67:bt,82:218,116:ft,117:vt,118:nt},t(se,[2,64]),t(se,[2,59]),t(se,[2,60]),t(se,[2,61]),{109:[1,263]},t(se,[2,63]),t(se,[2,65]),{66:[1,264],67:bt,82:218,116:ft,117:vt,118:nt},t(se,[2,67]),t(se,[2,68]),t(se,[2,70]),t(se,[2,69]),t(se,[2,71]),t([10,44,60,89,102,105,106,109,111,114,115,116],[2,85]),t(ye,[2,78]),{31:[1,265],67:bt,82:218,116:ft,117:vt,118:nt},{6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,32:[1,266],33:24,34:d,36:p,38:m,42:28,43:38,44:g,45:39,47:40,60:y,84:v,85:x,86:b,87:T,88:S,89:w,102:E,105:_,106:C,109:D,111:O,113:41,114:R,115:k,116:L,121:A,122:I,123:M,124:P},t(Se,[2,53]),{43:267,44:g,45:39,47:40,60:y,89:w,102:E,105:_,106:C,109:D,111:O,113:41,114:R,115:k,116:L},t(Tt,[2,121],{106:rn}),t(yn,[2,130],{108:269,10:Mr,60:Ir,84:Pn,105:Dt,109:Ce,110:tt,111:Ct,112:gr}),t(Zr,[2,132]),t(Zr,[2,134]),t(Zr,[2,135]),t(Zr,[2,136]),t(Zr,[2,137]),t(Zr,[2,138]),t(Zr,[2,139]),t(Zr,[2,140]),t(Zr,[2,141]),t(Tt,[2,122],{106:rn}),{10:[1,270]},t(Tt,[2,123],{106:rn}),{10:[1,271]},t(On,[2,129]),t(Tt,[2,105],{106:rn}),t(Tt,[2,106],{113:112,44:g,60:y,89:w,102:E,105:_,106:C,109:D,111:O,114:R,115:k,116:L}),t(Tt,[2,110]),t(Tt,[2,112],{10:[1,272]}),t(Tt,[2,113]),{98:[1,273]},{51:[1,274]},{62:[1,275]},{66:[1,276]},{8:z,9:$,11:U,21:277},t(F,[2,34]),t(Se,[2,52]),{10:Mr,60:Ir,84:Pn,105:Dt,107:278,108:242,109:Ce,110:tt,111:Ct,112:gr},t(Zr,[2,133]),{14:Y,44:ce,60:Z,89:ue,101:279,105:Q,106:j,109:ne,111:te,114:he,115:le,116:J,120:87},{14:Y,44:ce,60:Z,89:ue,101:280,105:Q,106:j,109:ne,111:te,114:he,115:le,116:J,120:87},{98:[1,281]},t(Tt,[2,120]),t(se,[2,58]),{30:282,67:bt,80:ut,81:St,82:171,116:ft,117:vt,118:nt},t(se,[2,66]),t(We,a,{5:283}),t(yn,[2,131],{108:269,10:Mr,60:Ir,84:Pn,105:Dt,109:Ce,110:tt,111:Ct,112:gr}),t(Tt,[2,126],{120:167,10:[1,284],14:Y,44:ce,60:Z,89:ue,105:Q,106:j,109:ne,111:te,114:he,115:le,116:J}),t(Tt,[2,127],{120:167,10:[1,285],14:Y,44:ce,60:Z,89:ue,105:Q,106:j,109:ne,111:te,114:he,115:le,116:J}),t(Tt,[2,114]),{31:[1,286],67:bt,82:218,116:ft,117:vt,118:nt},{6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,32:[1,287],33:24,34:d,36:p,38:m,42:28,43:38,44:g,45:39,47:40,60:y,84:v,85:x,86:b,87:T,88:S,89:w,102:E,105:_,106:C,109:D,111:O,113:41,114:R,115:k,116:L,121:A,122:I,123:M,124:P},{10:Mr,60:Ir,84:Pn,92:288,105:Dt,107:241,108:242,109:Ce,110:tt,111:Ct,112:gr},{10:Mr,60:Ir,84:Pn,92:289,105:Dt,107:241,108:242,109:Ce,110:tt,111:Ct,112:gr},t(se,[2,62]),t(F,[2,33]),t(Tt,[2,124],{106:rn}),t(Tt,[2,125],{106:rn})],defaultActions:{},parseError:o(function(et,gt){if(gt.recoverable)this.trace(et);else{var Kt=new Error(et);throw Kt.hash=gt,Kt}},"parseError"),parse:o(function(et){var gt=this,Kt=[0],lt=[],Cn=[null],ge=[],Qf=this.table,we="",Ei=0,l$=0,c$=0,tbe=2,u$=1,rbe=ge.slice.call(arguments,1),ji=Object.create(this.lexer),Zf={yy:{}};for(var $C in this.yy)Object.prototype.hasOwnProperty.call(this.yy,$C)&&(Zf.yy[$C]=this.yy[$C]);ji.setInput(et,Zf.yy),Zf.yy.lexer=ji,Zf.yy.parser=this,typeof ji.yylloc>"u"&&(ji.yylloc={});var zC=ji.yylloc;ge.push(zC);var nbe=ji.options&&ji.options.ranges;typeof Zf.yy.parseError=="function"?this.parseError=Zf.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Qit(Xs){Kt.length=Kt.length-2*Xs,Cn.length=Cn.length-Xs,ge.length=ge.length-Xs}o(Qit,"popStack");function ibe(){var Xs;return Xs=lt.pop()||ji.lex()||u$,typeof Xs!="number"&&(Xs instanceof Array&&(lt=Xs,Xs=lt.pop()),Xs=gt.symbols_[Xs]||Xs),Xs}o(ibe,"lex");for(var Ka,GC,Jf,wo,Zit,VC,c0={},z4,nu,h$,G4;;){if(Jf=Kt[Kt.length-1],this.defaultActions[Jf]?wo=this.defaultActions[Jf]:((Ka===null||typeof Ka>"u")&&(Ka=ibe()),wo=Qf[Jf]&&Qf[Jf][Ka]),typeof wo>"u"||!wo.length||!wo[0]){var UC="";G4=[];for(z4 in Qf[Jf])this.terminals_[z4]&&z4>tbe&&G4.push("'"+this.terminals_[z4]+"'");ji.showPosition?UC="Parse error on line "+(Ei+1)+`: `+ji.showPosition()+` -Expecting `+P4.join(", ")+", got '"+(this.terminals_[Wa]||Wa)+"'":DC="Parse error on line "+(Ti+1)+": Unexpected "+(Wa==AF?"end of input":"'"+(this.terminals_[Wa]||Wa)+"'"),this.parseError(DC,{text:ji.match,token:this.terminals_[Wa]||Wa,line:ji.yylineno,loc:CC,expected:P4})}if(wo[0]instanceof Array&&wo.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Kf+", token: "+Wa);switch(wo[0]){case 1:Kt.push(Wa),Cn.push(ji.yytext),ge.push(ji.yylloc),Kt.push(wo[1]),Wa=null,AC?(Wa=AC,AC=null):(SF=ji.yyleng,Te=ji.yytext,Ti=ji.yylineno,CC=ji.yylloc,CF>0&&CF--);break;case 2:if(nu=this.productions_[wo[1]][1],s0.$=Cn[Cn.length-nu],s0._$={first_line:ge[ge.length-(nu||1)].first_line,last_line:ge[ge.length-1].last_line,first_column:ge[ge.length-(nu||1)].first_column,last_column:ge[ge.length-1].last_column},N2e&&(s0._$.range=[ge[ge.length-(nu||1)].range[0],ge[ge.length-1].range[1]]),_C=this.performAction.apply(s0,[Te,SF,Ti,jf.yy,wo[1],Cn,ge].concat(R2e)),typeof _C<"u")return _C;nu&&(Kt=Kt.slice(0,-1*nu*2),Cn=Cn.slice(0,-1*nu),ge=ge.slice(0,-1*nu)),Kt.push(this.productions_[wo[1]][0]),Cn.push(s0.$),ge.push(s0._$),_F=Xf[Kt[Kt.length-2]][Kt[Kt.length-1]],Kt.push(_F);break;case 3:return!0}}return!0},"parse")},Zn=function(){var Hr={EOF:1,parseError:o(function(mt,Kt){if(this.yy.parser)this.yy.parser.parseError(mt,Kt);else throw new Error(mt)},"parseError"),setInput:o(function(et,mt){return this.yy=mt||this.yy||{},this._input=et,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},"setInput"),input:o(function(){var et=this._input[0];this.yytext+=et,this.yyleng++,this.offset++,this.match+=et,this.matched+=et;var mt=et.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),et},"input"),unput:o(function(et){var mt=et.length,Kt=et.split(/(?:\r\n?|\n)/g);this._input=et+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-mt),this.offset-=mt;var lt=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),Kt.length-1&&(this.yylineno-=Kt.length-1);var Cn=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:Kt?(Kt.length===lt.length?this.yylloc.first_column:0)+lt[lt.length-Kt.length].length-Kt[0].length:this.yylloc.first_column-mt},this.options.ranges&&(this.yylloc.range=[Cn[0],Cn[0]+this.yyleng-mt]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(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},"reject"),less:o(function(et){this.unput(this.match.slice(et))},"less"),pastInput:o(function(){var et=this.matched.substr(0,this.matched.length-this.match.length);return(et.length>20?"...":"")+et.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var et=this.match;return et.length<20&&(et+=this._input.substr(0,20-et.length)),(et.substr(0,20)+(et.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var et=this.pastInput(),mt=new Array(et.length+1).join("-");return et+this.upcomingInput()+` -`+mt+"^"},"showPosition"),test_match:o(function(et,mt){var Kt,lt,Cn;if(this.options.backtrack_lexer&&(Cn={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&&(Cn.yylloc.range=this.yylloc.range.slice(0))),lt=et[0].match(/(?:\r\n?|\n).*/g),lt&&(this.yylineno+=lt.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:lt?lt[lt.length-1].length-lt[lt.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+et[0].length},this.yytext+=et[0],this.match+=et[0],this.matches=et,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(et[0].length),this.matched+=et[0],Kt=this.performAction.call(this,this.yy,this,mt,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Kt)return Kt;if(this._backtrack){for(var ge in Cn)this[ge]=Cn[ge];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var et,mt,Kt,lt;this._more||(this.yytext="",this.match="");for(var Cn=this._currentRules(),ge=0;gemt[0].length)){if(mt=Kt,lt=ge,this.options.backtrack_lexer){if(et=this.test_match(Kt,Cn[ge]),et!==!1)return et;if(this._backtrack){mt=!1;continue}else return!1}else if(!this.options.flex)break}return mt?(et=this.test_match(mt,Cn[lt]),et!==!1?et:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var mt=this.next();return mt||this.lex()},"lex"),begin:o(function(mt){this.conditionStack.push(mt)},"begin"),popState:o(function(){var mt=this.conditionStack.length-1;return mt>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(mt){return mt=this.conditionStack.length-1-Math.abs(mt||0),mt>=0?this.conditionStack[mt]:"INITIAL"},"topState"),pushState:o(function(mt){this.begin(mt)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(mt,Kt,lt,Cn){var ge=Cn;switch(lt){case 0:return this.begin("acc_title"),34;break;case 1:return this.popState(),"acc_title_value";break;case 2:return this.begin("acc_descr"),36;break;case 3:return this.popState(),"acc_descr_value";break;case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return this.pushState("shapeData"),Kt.yytext="",40;break;case 8:return this.pushState("shapeDataStr"),40;break;case 9:return this.popState(),40;break;case 10:let Xf=/\n\s*/g;return Kt.yytext=Kt.yytext.replace(Xf,"
    "),40;break;case 11:return 40;case 12:this.popState();break;case 13:this.begin("callbackname");break;case 14:this.popState();break;case 15:this.popState(),this.begin("callbackargs");break;case 16:return 95;case 17:this.popState();break;case 18:return 96;case 19:return"MD_STR";case 20:this.popState();break;case 21:this.begin("md_string");break;case 22:return"STR";case 23:this.popState();break;case 24:this.pushState("string");break;case 25:return 84;case 26:return 102;case 27:return 85;case 28:return 104;case 29:return 86;case 30:return 87;case 31:return 97;case 32:this.begin("click");break;case 33:this.popState();break;case 34:return 88;case 35:return mt.lex.firstGraph()&&this.begin("dir"),12;break;case 36:return mt.lex.firstGraph()&&this.begin("dir"),12;break;case 37:return mt.lex.firstGraph()&&this.begin("dir"),12;break;case 38:return 27;case 39:return 32;case 40:return 98;case 41:return 98;case 42:return 98;case 43:return 98;case 44:return this.popState(),13;break;case 45:return this.popState(),14;break;case 46:return this.popState(),14;break;case 47:return this.popState(),14;break;case 48:return this.popState(),14;break;case 49:return this.popState(),14;break;case 50:return this.popState(),14;break;case 51:return this.popState(),14;break;case 52:return this.popState(),14;break;case 53:return this.popState(),14;break;case 54:return this.popState(),14;break;case 55:return 121;case 56:return 122;case 57:return 123;case 58:return 124;case 59:return 78;case 60:return 105;case 61:return 111;case 62:return 46;case 63:return 60;case 64:return 44;case 65:return 8;case 66:return 106;case 67:return 115;case 68:return this.popState(),77;break;case 69:return this.pushState("edgeText"),75;break;case 70:return 119;case 71:return this.popState(),77;break;case 72:return this.pushState("thickEdgeText"),75;break;case 73:return 119;case 74:return this.popState(),77;break;case 75:return this.pushState("dottedEdgeText"),75;break;case 76:return 119;case 77:return 77;case 78:return this.popState(),53;break;case 79:return"TEXT";case 80:return this.pushState("ellipseText"),52;break;case 81:return this.popState(),55;break;case 82:return this.pushState("text"),54;break;case 83:return this.popState(),57;break;case 84:return this.pushState("text"),56;break;case 85:return 58;case 86:return this.pushState("text"),67;break;case 87:return this.popState(),64;break;case 88:return this.pushState("text"),63;break;case 89:return this.popState(),49;break;case 90:return this.pushState("text"),48;break;case 91:return this.popState(),69;break;case 92:return this.popState(),71;break;case 93:return 117;case 94:return this.pushState("trapText"),68;break;case 95:return this.pushState("trapText"),70;break;case 96:return 118;case 97:return 67;case 98:return 90;case 99:return"SEP";case 100:return 89;case 101:return 115;case 102:return 111;case 103:return 44;case 104:return 109;case 105:return 114;case 106:return 116;case 107:return this.popState(),62;break;case 108:return this.pushState("text"),62;break;case 109:return this.popState(),51;break;case 110:return this.pushState("text"),50;break;case 111:return this.popState(),31;break;case 112:return this.pushState("text"),29;break;case 113:return this.popState(),66;break;case 114:return this.pushState("text"),65;break;case 115:return"TEXT";case 116:return"QUOTE";case 117:return 9;case 118:return 10;case 119:return 11}},"anonymous"),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]*)/,/^(?:[^\s\"]+@(?=[^\{\"]))/,/^(?:[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:{shapeDataEndBracket:{rules:[21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},shapeDataStr:{rules:[9,10,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},shapeData:{rules:[8,11,12,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},callbackargs:{rules:[17,18,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},callbackname:{rules:[14,15,16,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},href:{rules:[21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},click:{rules:[21,24,33,34,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},dottedEdgeText:{rules:[21,24,74,76,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},thickEdgeText:{rules:[21,24,71,73,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},edgeText:{rules:[21,24,68,70,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},trapText:{rules:[21,24,77,80,82,84,88,90,91,92,93,94,95,108,110,112,114],inclusive:!1},ellipseText:{rules:[21,24,77,78,79,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},text:{rules:[21,24,77,80,81,82,83,84,87,88,89,90,94,95,107,108,109,110,111,112,113,114,115],inclusive:!1},vertex:{rules:[21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},dir:{rules:[21,24,44,45,46,47,48,49,50,51,52,53,54,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},acc_descr_multiline:{rules:[5,6,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},acc_descr:{rules:[3,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},acc_title:{rules:[1,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},md_string:{rules:[19,20,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},string:{rules:[21,22,23,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},INITIAL:{rules:[0,2,4,7,13,21,24,25,26,27,28,29,30,31,32,35,36,37,38,39,40,41,42,43,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,71,72,74,75,77,80,82,84,85,86,88,90,94,95,96,97,98,99,100,101,102,103,104,105,106,108,110,112,114,116,117,118,119],inclusive:!0}}};return Hr}();Mi.lexer=Zn;function Sn(){this.yy={}}return o(Sn,"Parser"),Sn.prototype=Mi,Mi.Parser=Sn,new Sn}();ER.parser=ER;SR=ER});var Xie,jie,Kie=N(()=>{"use strict";Yie();Xie=Object.assign({},SR);Xie.parse=t=>{let e=t.replace(/}\s*\n/g,`} -`);return SR.parse(e)};jie=Xie});var Lc,Ym=N(()=>{"use strict";Lc=o(()=>` +Expecting `+G4.join(", ")+", got '"+(this.terminals_[Ka]||Ka)+"'":UC="Parse error on line "+(Ei+1)+": Unexpected "+(Ka==u$?"end of input":"'"+(this.terminals_[Ka]||Ka)+"'"),this.parseError(UC,{text:ji.match,token:this.terminals_[Ka]||Ka,line:ji.yylineno,loc:zC,expected:G4})}if(wo[0]instanceof Array&&wo.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Jf+", token: "+Ka);switch(wo[0]){case 1:Kt.push(Ka),Cn.push(ji.yytext),ge.push(ji.yylloc),Kt.push(wo[1]),Ka=null,GC?(Ka=GC,GC=null):(l$=ji.yyleng,we=ji.yytext,Ei=ji.yylineno,zC=ji.yylloc,c$>0&&c$--);break;case 2:if(nu=this.productions_[wo[1]][1],c0.$=Cn[Cn.length-nu],c0._$={first_line:ge[ge.length-(nu||1)].first_line,last_line:ge[ge.length-1].last_line,first_column:ge[ge.length-(nu||1)].first_column,last_column:ge[ge.length-1].last_column},nbe&&(c0._$.range=[ge[ge.length-(nu||1)].range[0],ge[ge.length-1].range[1]]),VC=this.performAction.apply(c0,[we,l$,Ei,Zf.yy,wo[1],Cn,ge].concat(rbe)),typeof VC<"u")return VC;nu&&(Kt=Kt.slice(0,-1*nu*2),Cn=Cn.slice(0,-1*nu),ge=ge.slice(0,-1*nu)),Kt.push(this.productions_[wo[1]][0]),Cn.push(c0.$),ge.push(c0._$),h$=Qf[Kt[Kt.length-2]][Kt[Kt.length-1]],Kt.push(h$);break;case 3:return!0}}return!0},"parse")},ei=function(){var Hr={EOF:1,parseError:o(function(gt,Kt){if(this.yy.parser)this.yy.parser.parseError(gt,Kt);else throw new Error(gt)},"parseError"),setInput:o(function(et,gt){return this.yy=gt||this.yy||{},this._input=et,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},"setInput"),input:o(function(){var et=this._input[0];this.yytext+=et,this.yyleng++,this.offset++,this.match+=et,this.matched+=et;var gt=et.match(/(?:\r\n?|\n).*/g);return gt?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),et},"input"),unput:o(function(et){var gt=et.length,Kt=et.split(/(?:\r\n?|\n)/g);this._input=et+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-gt),this.offset-=gt;var lt=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),Kt.length-1&&(this.yylineno-=Kt.length-1);var Cn=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:Kt?(Kt.length===lt.length?this.yylloc.first_column:0)+lt[lt.length-Kt.length].length-Kt[0].length:this.yylloc.first_column-gt},this.options.ranges&&(this.yylloc.range=[Cn[0],Cn[0]+this.yyleng-gt]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(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},"reject"),less:o(function(et){this.unput(this.match.slice(et))},"less"),pastInput:o(function(){var et=this.matched.substr(0,this.matched.length-this.match.length);return(et.length>20?"...":"")+et.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var et=this.match;return et.length<20&&(et+=this._input.substr(0,20-et.length)),(et.substr(0,20)+(et.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var et=this.pastInput(),gt=new Array(et.length+1).join("-");return et+this.upcomingInput()+` +`+gt+"^"},"showPosition"),test_match:o(function(et,gt){var Kt,lt,Cn;if(this.options.backtrack_lexer&&(Cn={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&&(Cn.yylloc.range=this.yylloc.range.slice(0))),lt=et[0].match(/(?:\r\n?|\n).*/g),lt&&(this.yylineno+=lt.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:lt?lt[lt.length-1].length-lt[lt.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+et[0].length},this.yytext+=et[0],this.match+=et[0],this.matches=et,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(et[0].length),this.matched+=et[0],Kt=this.performAction.call(this,this.yy,this,gt,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Kt)return Kt;if(this._backtrack){for(var ge in Cn)this[ge]=Cn[ge];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var et,gt,Kt,lt;this._more||(this.yytext="",this.match="");for(var Cn=this._currentRules(),ge=0;gegt[0].length)){if(gt=Kt,lt=ge,this.options.backtrack_lexer){if(et=this.test_match(Kt,Cn[ge]),et!==!1)return et;if(this._backtrack){gt=!1;continue}else return!1}else if(!this.options.flex)break}return gt?(et=this.test_match(gt,Cn[lt]),et!==!1?et:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var gt=this.next();return gt||this.lex()},"lex"),begin:o(function(gt){this.conditionStack.push(gt)},"begin"),popState:o(function(){var gt=this.conditionStack.length-1;return gt>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(gt){return gt=this.conditionStack.length-1-Math.abs(gt||0),gt>=0?this.conditionStack[gt]:"INITIAL"},"topState"),pushState:o(function(gt){this.begin(gt)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(gt,Kt,lt,Cn){var ge=Cn;switch(lt){case 0:return this.begin("acc_title"),34;break;case 1:return this.popState(),"acc_title_value";break;case 2:return this.begin("acc_descr"),36;break;case 3:return this.popState(),"acc_descr_value";break;case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return this.pushState("shapeData"),Kt.yytext="",40;break;case 8:return this.pushState("shapeDataStr"),40;break;case 9:return this.popState(),40;break;case 10:let Qf=/\n\s*/g;return Kt.yytext=Kt.yytext.replace(Qf,"
    "),40;break;case 11:return 40;case 12:this.popState();break;case 13:this.begin("callbackname");break;case 14:this.popState();break;case 15:this.popState(),this.begin("callbackargs");break;case 16:return 95;case 17:this.popState();break;case 18:return 96;case 19:return"MD_STR";case 20:this.popState();break;case 21:this.begin("md_string");break;case 22:return"STR";case 23:this.popState();break;case 24:this.pushState("string");break;case 25:return 84;case 26:return 102;case 27:return 85;case 28:return 104;case 29:return 86;case 30:return 87;case 31:return 97;case 32:this.begin("click");break;case 33:this.popState();break;case 34:return 88;case 35:return gt.lex.firstGraph()&&this.begin("dir"),12;break;case 36:return gt.lex.firstGraph()&&this.begin("dir"),12;break;case 37:return gt.lex.firstGraph()&&this.begin("dir"),12;break;case 38:return 27;case 39:return 32;case 40:return 98;case 41:return 98;case 42:return 98;case 43:return 98;case 44:return this.popState(),13;break;case 45:return this.popState(),14;break;case 46:return this.popState(),14;break;case 47:return this.popState(),14;break;case 48:return this.popState(),14;break;case 49:return this.popState(),14;break;case 50:return this.popState(),14;break;case 51:return this.popState(),14;break;case 52:return this.popState(),14;break;case 53:return this.popState(),14;break;case 54:return this.popState(),14;break;case 55:return 121;case 56:return 122;case 57:return 123;case 58:return 124;case 59:return 78;case 60:return 105;case 61:return 111;case 62:return 46;case 63:return 60;case 64:return 44;case 65:return 8;case 66:return 106;case 67:return 115;case 68:return this.popState(),77;break;case 69:return this.pushState("edgeText"),75;break;case 70:return 119;case 71:return this.popState(),77;break;case 72:return this.pushState("thickEdgeText"),75;break;case 73:return 119;case 74:return this.popState(),77;break;case 75:return this.pushState("dottedEdgeText"),75;break;case 76:return 119;case 77:return 77;case 78:return this.popState(),53;break;case 79:return"TEXT";case 80:return this.pushState("ellipseText"),52;break;case 81:return this.popState(),55;break;case 82:return this.pushState("text"),54;break;case 83:return this.popState(),57;break;case 84:return this.pushState("text"),56;break;case 85:return 58;case 86:return this.pushState("text"),67;break;case 87:return this.popState(),64;break;case 88:return this.pushState("text"),63;break;case 89:return this.popState(),49;break;case 90:return this.pushState("text"),48;break;case 91:return this.popState(),69;break;case 92:return this.popState(),71;break;case 93:return 117;case 94:return this.pushState("trapText"),68;break;case 95:return this.pushState("trapText"),70;break;case 96:return 118;case 97:return 67;case 98:return 90;case 99:return"SEP";case 100:return 89;case 101:return 115;case 102:return 111;case 103:return 44;case 104:return 109;case 105:return 114;case 106:return 116;case 107:return this.popState(),62;break;case 108:return this.pushState("text"),62;break;case 109:return this.popState(),51;break;case 110:return this.pushState("text"),50;break;case 111:return this.popState(),31;break;case 112:return this.pushState("text"),29;break;case 113:return this.popState(),66;break;case 114:return this.pushState("text"),65;break;case 115:return"TEXT";case 116:return"QUOTE";case 117:return 9;case 118:return 10;case 119:return 11}},"anonymous"),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]*)/,/^(?:[^\s\"]+@(?=[^\{\"]))/,/^(?:[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:{shapeDataEndBracket:{rules:[21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},shapeDataStr:{rules:[9,10,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},shapeData:{rules:[8,11,12,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},callbackargs:{rules:[17,18,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},callbackname:{rules:[14,15,16,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},href:{rules:[21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},click:{rules:[21,24,33,34,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},dottedEdgeText:{rules:[21,24,74,76,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},thickEdgeText:{rules:[21,24,71,73,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},edgeText:{rules:[21,24,68,70,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},trapText:{rules:[21,24,77,80,82,84,88,90,91,92,93,94,95,108,110,112,114],inclusive:!1},ellipseText:{rules:[21,24,77,78,79,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},text:{rules:[21,24,77,80,81,82,83,84,87,88,89,90,94,95,107,108,109,110,111,112,113,114,115],inclusive:!1},vertex:{rules:[21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},dir:{rules:[21,24,44,45,46,47,48,49,50,51,52,53,54,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},acc_descr_multiline:{rules:[5,6,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},acc_descr:{rules:[3,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},acc_title:{rules:[1,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},md_string:{rules:[19,20,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},string:{rules:[21,22,23,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},INITIAL:{rules:[0,2,4,7,13,21,24,25,26,27,28,29,30,31,32,35,36,37,38,39,40,41,42,43,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,71,72,74,75,77,80,82,84,85,86,88,90,94,95,96,97,98,99,100,101,102,103,104,105,106,108,110,112,114,116,117,118,119],inclusive:!0}}};return Hr}();Oi.lexer=ei;function Sn(){this.yy={}}return o(Sn,"Parser"),Sn.prototype=Oi,Oi.Parser=Sn,new Sn}();rN.parser=rN;nN=rN});var ase,sse,ose=N(()=>{"use strict";ise();ase=Object.assign({},nN);ase.parse=t=>{let e=t.replace(/}\s*\n/g,`} +`);return nN.parse(e)};sse=ase});var Nc,Xm=N(()=>{"use strict";Nc=o(()=>` /* Font Awesome icon styling - consolidated */ .label-icon { display: inline-block; @@ -494,7 +494,7 @@ Expecting `+P4.join(", ")+", got '"+(this.terminals_[Wa]||Wa)+"'":DC="Parse erro stroke: revert; stroke-width: revert; } -`,"getIconStyles")});var hOe,fOe,Qie,Zie=N(()=>{"use strict";js();Ym();hOe=o((t,e)=>{let r=rd,n=r(t,"r"),i=r(t,"g"),a=r(t,"b");return qa(n,i,a,e)},"fade"),fOe=o(t=>`.label { +`,"getIconStyles")});var UPe,HPe,lse,cse=N(()=>{"use strict";Ks();Xm();UPe=o((t,e)=>{let r=id,n=r(t,"r"),i=r(t,"g"),a=r(t,"b");return Qa(n,i,a,e)},"fade"),HPe=o(t=>`.label { font-family: ${t.fontFamily}; color: ${t.nodeTextColor||t.textColor}; } @@ -581,7 +581,7 @@ Expecting `+P4.join(", ")+", got '"+(this.terminals_[Wa]||Wa)+"'":DC="Parse erro /* For html labels only */ .labelBkg { - background-color: ${hOe(t.edgeLabelBackground,.5)}; + background-color: ${UPe(t.edgeLabelBackground,.5)}; // background-color: } @@ -640,13 +640,13 @@ Expecting `+P4.join(", ")+", got '"+(this.terminals_[Wa]||Wa)+"'":DC="Parse erro } text-align: center; } - ${Lc()} -`,"getStyles"),Qie=fOe});var hk={};hr(hk,{diagram:()=>dOe});var dOe,fk=N(()=>{"use strict";zt();QZ();qie();Kie();Zie();dOe={parser:jie,get db(){return new Kw},renderer:Wie,styles:Qie,init:o(t=>{t.flowchart||(t.flowchart={}),t.layout&&tv({layout:t.layout}),t.flowchart.arrowMarkerAbsolute=t.arrowMarkerAbsolute,tv({flowchart:{arrowMarkerAbsolute:t.arrowMarkerAbsolute}})},"init")}});var CR,nae,iae=N(()=>{"use strict";CR=function(){var t=o(function(ee,ce,le,J){for(le=le||{},J=ee.length;J--;le[ee[J]]=ce);return le},"o"),e=[6,8,10,22,24,26,28,33,34,35,36,37,40,43,44,50],r=[1,10],n=[1,11],i=[1,12],a=[1,13],s=[1,20],l=[1,21],u=[1,22],h=[1,23],f=[1,24],d=[1,19],p=[1,25],m=[1,26],g=[1,18],y=[1,33],v=[1,34],x=[1,35],b=[1,36],w=[1,37],C=[6,8,10,13,15,17,20,21,22,24,26,28,33,34,35,36,37,40,43,44,50,63,64,65,66,67],T=[1,42],E=[1,43],A=[1,52],S=[40,50,68,69],_=[1,63],I=[1,61],L=[1,58],k=[1,62],D=[1,64],R=[6,8,10,13,17,22,24,26,28,33,34,35,36,37,40,41,42,43,44,48,49,50,63,64,65,66,67],O=[63,64,65,66,67],M=[1,81],P=[1,80],B=[1,78],F=[1,79],z=[6,10,42,47],$=[6,10,13,41,42,47,48,49],U=[1,89],Q=[1,88],te=[1,87],Y=[19,56],he=[1,98],Z=[1,97],ue=[19,56,58,60],K={trace:o(function(){},"trace"),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,COLON:13,role:14,STYLE_SEPARATOR:15,idList:16,BLOCK_START:17,attributes:18,BLOCK_STOP:19,SQS:20,SQE:21,title:22,title_value:23,acc_title:24,acc_title_value:25,acc_descr:26,acc_descr_value:27,acc_descr_multiline_value:28,direction:29,classDefStatement:30,classStatement:31,styleStatement:32,direction_tb:33,direction_bt:34,direction_rl:35,direction_lr:36,CLASSDEF:37,stylesOpt:38,separator:39,UNICODE_TEXT:40,STYLE_TEXT:41,COMMA:42,CLASS:43,STYLE:44,style:45,styleComponent:46,SEMI:47,NUM:48,BRKT:49,ENTITY_NAME:50,attribute:51,attributeType:52,attributeName:53,attributeKeyTypeList:54,attributeComment:55,ATTRIBUTE_WORD:56,attributeKeyType:57,",":58,ATTRIBUTE_KEY:59,COMMENT:60,cardinality:61,relType:62,ZERO_OR_ONE:63,ZERO_OR_MORE:64,ONE_OR_MORE:65,ONLY_ONE:66,MD_PARENT:67,NON_IDENTIFYING:68,IDENTIFYING:69,WORD:70,$accept:0,$end:1},terminals_:{2:"error",4:"ER_DIAGRAM",6:"EOF",8:"SPACE",10:"NEWLINE",13:"COLON",15:"STYLE_SEPARATOR",17:"BLOCK_START",19:"BLOCK_STOP",20:"SQS",21:"SQE",22:"title",23:"title_value",24:"acc_title",25:"acc_title_value",26:"acc_descr",27:"acc_descr_value",28:"acc_descr_multiline_value",33:"direction_tb",34:"direction_bt",35:"direction_rl",36:"direction_lr",37:"CLASSDEF",40:"UNICODE_TEXT",41:"STYLE_TEXT",42:"COMMA",43:"CLASS",44:"STYLE",47:"SEMI",48:"NUM",49:"BRKT",50:"ENTITY_NAME",56:"ATTRIBUTE_WORD",58:",",59:"ATTRIBUTE_KEY",60:"COMMENT",63:"ZERO_OR_ONE",64:"ZERO_OR_MORE",65:"ONE_OR_MORE",66:"ONLY_ONE",67:"MD_PARENT",68:"NON_IDENTIFYING",69:"IDENTIFYING",70:"WORD"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,5],[9,9],[9,7],[9,7],[9,4],[9,6],[9,3],[9,5],[9,1],[9,3],[9,7],[9,9],[9,6],[9,8],[9,4],[9,6],[9,2],[9,2],[9,2],[9,1],[9,1],[9,1],[9,1],[9,1],[29,1],[29,1],[29,1],[29,1],[30,4],[16,1],[16,1],[16,3],[16,3],[31,3],[32,4],[38,1],[38,3],[45,1],[45,2],[39,1],[39,1],[39,1],[46,1],[46,1],[46,1],[46,1],[11,1],[11,1],[18,1],[18,2],[51,2],[51,3],[51,3],[51,4],[52,1],[53,1],[54,1],[54,3],[57,1],[55,1],[12,3],[61,1],[61,1],[61,1],[61,1],[61,1],[62,1],[62,1],[14,1],[14,1],[14,1]],performAction:o(function(ce,le,J,Se,se,ae,Oe){var ye=ae.length-1;switch(se){case 1:break;case 2:this.$=[];break;case 3:ae[ye-1].push(ae[ye]),this.$=ae[ye-1];break;case 4:case 5:this.$=ae[ye];break;case 6:case 7:this.$=[];break;case 8:Se.addEntity(ae[ye-4]),Se.addEntity(ae[ye-2]),Se.addRelationship(ae[ye-4],ae[ye],ae[ye-2],ae[ye-3]);break;case 9:Se.addEntity(ae[ye-8]),Se.addEntity(ae[ye-4]),Se.addRelationship(ae[ye-8],ae[ye],ae[ye-4],ae[ye-5]),Se.setClass([ae[ye-8]],ae[ye-6]),Se.setClass([ae[ye-4]],ae[ye-2]);break;case 10:Se.addEntity(ae[ye-6]),Se.addEntity(ae[ye-2]),Se.addRelationship(ae[ye-6],ae[ye],ae[ye-2],ae[ye-3]),Se.setClass([ae[ye-6]],ae[ye-4]);break;case 11:Se.addEntity(ae[ye-6]),Se.addEntity(ae[ye-4]),Se.addRelationship(ae[ye-6],ae[ye],ae[ye-4],ae[ye-5]),Se.setClass([ae[ye-4]],ae[ye-2]);break;case 12:Se.addEntity(ae[ye-3]),Se.addAttributes(ae[ye-3],ae[ye-1]);break;case 13:Se.addEntity(ae[ye-5]),Se.addAttributes(ae[ye-5],ae[ye-1]),Se.setClass([ae[ye-5]],ae[ye-3]);break;case 14:Se.addEntity(ae[ye-2]);break;case 15:Se.addEntity(ae[ye-4]),Se.setClass([ae[ye-4]],ae[ye-2]);break;case 16:Se.addEntity(ae[ye]);break;case 17:Se.addEntity(ae[ye-2]),Se.setClass([ae[ye-2]],ae[ye]);break;case 18:Se.addEntity(ae[ye-6],ae[ye-4]),Se.addAttributes(ae[ye-6],ae[ye-1]);break;case 19:Se.addEntity(ae[ye-8],ae[ye-6]),Se.addAttributes(ae[ye-8],ae[ye-1]),Se.setClass([ae[ye-8]],ae[ye-3]);break;case 20:Se.addEntity(ae[ye-5],ae[ye-3]);break;case 21:Se.addEntity(ae[ye-7],ae[ye-5]),Se.setClass([ae[ye-7]],ae[ye-2]);break;case 22:Se.addEntity(ae[ye-3],ae[ye-1]);break;case 23:Se.addEntity(ae[ye-5],ae[ye-3]),Se.setClass([ae[ye-5]],ae[ye]);break;case 24:case 25:this.$=ae[ye].trim(),Se.setAccTitle(this.$);break;case 26:case 27:this.$=ae[ye].trim(),Se.setAccDescription(this.$);break;case 32:Se.setDirection("TB");break;case 33:Se.setDirection("BT");break;case 34:Se.setDirection("RL");break;case 35:Se.setDirection("LR");break;case 36:this.$=ae[ye-3],Se.addClass(ae[ye-2],ae[ye-1]);break;case 37:case 38:case 56:case 64:this.$=[ae[ye]];break;case 39:case 40:this.$=ae[ye-2].concat([ae[ye]]);break;case 41:this.$=ae[ye-2],Se.setClass(ae[ye-1],ae[ye]);break;case 42:this.$=ae[ye-3],Se.addCssStyles(ae[ye-2],ae[ye-1]);break;case 43:this.$=[ae[ye]];break;case 44:ae[ye-2].push(ae[ye]),this.$=ae[ye-2];break;case 46:this.$=ae[ye-1]+ae[ye];break;case 54:case 76:case 77:this.$=ae[ye].replace(/"/g,"");break;case 55:case 78:this.$=ae[ye];break;case 57:ae[ye].push(ae[ye-1]),this.$=ae[ye];break;case 58:this.$={type:ae[ye-1],name:ae[ye]};break;case 59:this.$={type:ae[ye-2],name:ae[ye-1],keys:ae[ye]};break;case 60:this.$={type:ae[ye-2],name:ae[ye-1],comment:ae[ye]};break;case 61:this.$={type:ae[ye-3],name:ae[ye-2],keys:ae[ye-1],comment:ae[ye]};break;case 62:case 63:case 66:this.$=ae[ye];break;case 65:ae[ye-2].push(ae[ye]),this.$=ae[ye-2];break;case 67:this.$=ae[ye].replace(/"/g,"");break;case 68:this.$={cardA:ae[ye],relType:ae[ye-1],cardB:ae[ye-2]};break;case 69:this.$=Se.Cardinality.ZERO_OR_ONE;break;case 70:this.$=Se.Cardinality.ZERO_OR_MORE;break;case 71:this.$=Se.Cardinality.ONE_OR_MORE;break;case 72:this.$=Se.Cardinality.ONLY_ONE;break;case 73:this.$=Se.Cardinality.MD_PARENT;break;case 74:this.$=Se.Identification.NON_IDENTIFYING;break;case 75:this.$=Se.Identification.IDENTIFYING;break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:9,22:r,24:n,26:i,28:a,29:14,30:15,31:16,32:17,33:s,34:l,35:u,36:h,37:f,40:d,43:p,44:m,50:g},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:27,11:9,22:r,24:n,26:i,28:a,29:14,30:15,31:16,32:17,33:s,34:l,35:u,36:h,37:f,40:d,43:p,44:m,50:g},t(e,[2,5]),t(e,[2,6]),t(e,[2,16],{12:28,61:32,15:[1,29],17:[1,30],20:[1,31],63:y,64:v,65:x,66:b,67:w}),{23:[1,38]},{25:[1,39]},{27:[1,40]},t(e,[2,27]),t(e,[2,28]),t(e,[2,29]),t(e,[2,30]),t(e,[2,31]),t(C,[2,54]),t(C,[2,55]),t(e,[2,32]),t(e,[2,33]),t(e,[2,34]),t(e,[2,35]),{16:41,40:T,41:E},{16:44,40:T,41:E},{16:45,40:T,41:E},t(e,[2,4]),{11:46,40:d,50:g},{16:47,40:T,41:E},{18:48,19:[1,49],51:50,52:51,56:A},{11:53,40:d,50:g},{62:54,68:[1,55],69:[1,56]},t(S,[2,69]),t(S,[2,70]),t(S,[2,71]),t(S,[2,72]),t(S,[2,73]),t(e,[2,24]),t(e,[2,25]),t(e,[2,26]),{13:_,38:57,41:I,42:L,45:59,46:60,48:k,49:D},t(R,[2,37]),t(R,[2,38]),{16:65,40:T,41:E,42:L},{13:_,38:66,41:I,42:L,45:59,46:60,48:k,49:D},{13:[1,67],15:[1,68]},t(e,[2,17],{61:32,12:69,17:[1,70],42:L,63:y,64:v,65:x,66:b,67:w}),{19:[1,71]},t(e,[2,14]),{18:72,19:[2,56],51:50,52:51,56:A},{53:73,56:[1,74]},{56:[2,62]},{21:[1,75]},{61:76,63:y,64:v,65:x,66:b,67:w},t(O,[2,74]),t(O,[2,75]),{6:M,10:P,39:77,42:B,47:F},{40:[1,82],41:[1,83]},t(z,[2,43],{46:84,13:_,41:I,48:k,49:D}),t($,[2,45]),t($,[2,50]),t($,[2,51]),t($,[2,52]),t($,[2,53]),t(e,[2,41],{42:L}),{6:M,10:P,39:85,42:B,47:F},{14:86,40:U,50:Q,70:te},{16:90,40:T,41:E},{11:91,40:d,50:g},{18:92,19:[1,93],51:50,52:51,56:A},t(e,[2,12]),{19:[2,57]},t(Y,[2,58],{54:94,55:95,57:96,59:he,60:Z}),t([19,56,59,60],[2,63]),t(e,[2,22],{15:[1,100],17:[1,99]}),t([40,50],[2,68]),t(e,[2,36]),{13:_,41:I,45:101,46:60,48:k,49:D},t(e,[2,47]),t(e,[2,48]),t(e,[2,49]),t(R,[2,39]),t(R,[2,40]),t($,[2,46]),t(e,[2,42]),t(e,[2,8]),t(e,[2,76]),t(e,[2,77]),t(e,[2,78]),{13:[1,102],42:L},{13:[1,104],15:[1,103]},{19:[1,105]},t(e,[2,15]),t(Y,[2,59],{55:106,58:[1,107],60:Z}),t(Y,[2,60]),t(ue,[2,64]),t(Y,[2,67]),t(ue,[2,66]),{18:108,19:[1,109],51:50,52:51,56:A},{16:110,40:T,41:E},t(z,[2,44],{46:84,13:_,41:I,48:k,49:D}),{14:111,40:U,50:Q,70:te},{16:112,40:T,41:E},{14:113,40:U,50:Q,70:te},t(e,[2,13]),t(Y,[2,61]),{57:114,59:he},{19:[1,115]},t(e,[2,20]),t(e,[2,23],{17:[1,116],42:L}),t(e,[2,11]),{13:[1,117],42:L},t(e,[2,10]),t(ue,[2,65]),t(e,[2,18]),{18:118,19:[1,119],51:50,52:51,56:A},{14:120,40:U,50:Q,70:te},{19:[1,121]},t(e,[2,21]),t(e,[2,9]),t(e,[2,19])],defaultActions:{52:[2,62],72:[2,57]},parseError:o(function(ce,le){if(le.recoverable)this.trace(ce);else{var J=new Error(ce);throw J.hash=le,J}},"parseError"),parse:o(function(ce){var le=this,J=[0],Se=[],se=[null],ae=[],Oe=this.table,ye="",Be=0,He=0,ze=0,Le=2,Ie=1,xe=ae.slice.call(arguments,1),q=Object.create(this.lexer),de={yy:{}};for(var ie in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ie)&&(de.yy[ie]=this.yy[ie]);q.setInput(ce,de.yy),de.yy.lexer=q,de.yy.parser=this,typeof q.yylloc>"u"&&(q.yylloc={});var oe=q.yylloc;ae.push(oe);var V=q.options&&q.options.ranges;typeof de.yy.parseError=="function"?this.parseError=de.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function we(ct){J.length=J.length-2*ct,se.length=se.length-ct,ae.length=ae.length-ct}o(we,"popStack");function W(){var ct;return ct=Se.pop()||q.lex()||Ie,typeof ct!="number"&&(ct instanceof Array&&(Se=ct,ct=Se.pop()),ct=le.symbols_[ct]||ct),ct}o(W,"lex");for(var pe,ve,Pe,_e,be,Ve,De={},qe,at,Lt,st;;){if(Pe=J[J.length-1],this.defaultActions[Pe]?_e=this.defaultActions[Pe]:((pe===null||typeof pe>"u")&&(pe=W()),_e=Oe[Pe]&&Oe[Pe][pe]),typeof _e>"u"||!_e.length||!_e[0]){var Ue="";st=[];for(qe in Oe[Pe])this.terminals_[qe]&&qe>Le&&st.push("'"+this.terminals_[qe]+"'");q.showPosition?Ue="Parse error on line "+(Be+1)+`: + ${Nc()} +`,"getStyles"),lse=HPe});var xk={};ur(xk,{diagram:()=>WPe});var WPe,bk=N(()=>{"use strict";Gt();lee();nse();ose();cse();WPe={parser:sse,get db(){return new iw},renderer:rse,styles:lse,init:o(t=>{t.flowchart||(t.flowchart={}),t.layout&&nv({layout:t.layout}),t.flowchart.arrowMarkerAbsolute=t.arrowMarkerAbsolute,nv({flowchart:{arrowMarkerAbsolute:t.arrowMarkerAbsolute}})},"init")}});var iN,pse,mse=N(()=>{"use strict";iN=function(){var t=o(function(te,he,le,J){for(le=le||{},J=te.length;J--;le[te[J]]=he);return le},"o"),e=[6,8,10,22,24,26,28,33,34,35,36,37,40,43,44,50],r=[1,10],n=[1,11],i=[1,12],a=[1,13],s=[1,20],l=[1,21],u=[1,22],h=[1,23],f=[1,24],d=[1,19],p=[1,25],m=[1,26],g=[1,18],y=[1,33],v=[1,34],x=[1,35],b=[1,36],T=[1,37],S=[6,8,10,13,15,17,20,21,22,24,26,28,33,34,35,36,37,40,43,44,50,63,64,65,66,67],w=[1,42],E=[1,43],_=[1,52],C=[40,50,68,69],D=[1,63],O=[1,61],R=[1,58],k=[1,62],L=[1,64],A=[6,8,10,13,17,22,24,26,28,33,34,35,36,37,40,41,42,43,44,48,49,50,63,64,65,66,67],I=[63,64,65,66,67],M=[1,81],P=[1,80],B=[1,78],F=[1,79],z=[6,10,42,47],$=[6,10,13,41,42,47,48,49],U=[1,89],K=[1,88],ee=[1,87],Y=[19,56],ce=[1,98],Z=[1,97],ue=[19,56,58,60],Q={trace:o(function(){},"trace"),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,COLON:13,role:14,STYLE_SEPARATOR:15,idList:16,BLOCK_START:17,attributes:18,BLOCK_STOP:19,SQS:20,SQE:21,title:22,title_value:23,acc_title:24,acc_title_value:25,acc_descr:26,acc_descr_value:27,acc_descr_multiline_value:28,direction:29,classDefStatement:30,classStatement:31,styleStatement:32,direction_tb:33,direction_bt:34,direction_rl:35,direction_lr:36,CLASSDEF:37,stylesOpt:38,separator:39,UNICODE_TEXT:40,STYLE_TEXT:41,COMMA:42,CLASS:43,STYLE:44,style:45,styleComponent:46,SEMI:47,NUM:48,BRKT:49,ENTITY_NAME:50,attribute:51,attributeType:52,attributeName:53,attributeKeyTypeList:54,attributeComment:55,ATTRIBUTE_WORD:56,attributeKeyType:57,",":58,ATTRIBUTE_KEY:59,COMMENT:60,cardinality:61,relType:62,ZERO_OR_ONE:63,ZERO_OR_MORE:64,ONE_OR_MORE:65,ONLY_ONE:66,MD_PARENT:67,NON_IDENTIFYING:68,IDENTIFYING:69,WORD:70,$accept:0,$end:1},terminals_:{2:"error",4:"ER_DIAGRAM",6:"EOF",8:"SPACE",10:"NEWLINE",13:"COLON",15:"STYLE_SEPARATOR",17:"BLOCK_START",19:"BLOCK_STOP",20:"SQS",21:"SQE",22:"title",23:"title_value",24:"acc_title",25:"acc_title_value",26:"acc_descr",27:"acc_descr_value",28:"acc_descr_multiline_value",33:"direction_tb",34:"direction_bt",35:"direction_rl",36:"direction_lr",37:"CLASSDEF",40:"UNICODE_TEXT",41:"STYLE_TEXT",42:"COMMA",43:"CLASS",44:"STYLE",47:"SEMI",48:"NUM",49:"BRKT",50:"ENTITY_NAME",56:"ATTRIBUTE_WORD",58:",",59:"ATTRIBUTE_KEY",60:"COMMENT",63:"ZERO_OR_ONE",64:"ZERO_OR_MORE",65:"ONE_OR_MORE",66:"ONLY_ONE",67:"MD_PARENT",68:"NON_IDENTIFYING",69:"IDENTIFYING",70:"WORD"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,5],[9,9],[9,7],[9,7],[9,4],[9,6],[9,3],[9,5],[9,1],[9,3],[9,7],[9,9],[9,6],[9,8],[9,4],[9,6],[9,2],[9,2],[9,2],[9,1],[9,1],[9,1],[9,1],[9,1],[29,1],[29,1],[29,1],[29,1],[30,4],[16,1],[16,1],[16,3],[16,3],[31,3],[32,4],[38,1],[38,3],[45,1],[45,2],[39,1],[39,1],[39,1],[46,1],[46,1],[46,1],[46,1],[11,1],[11,1],[18,1],[18,2],[51,2],[51,3],[51,3],[51,4],[52,1],[53,1],[54,1],[54,3],[57,1],[55,1],[12,3],[61,1],[61,1],[61,1],[61,1],[61,1],[62,1],[62,1],[14,1],[14,1],[14,1]],performAction:o(function(he,le,J,Se,se,ae,Oe){var ye=ae.length-1;switch(se){case 1:break;case 2:this.$=[];break;case 3:ae[ye-1].push(ae[ye]),this.$=ae[ye-1];break;case 4:case 5:this.$=ae[ye];break;case 6:case 7:this.$=[];break;case 8:Se.addEntity(ae[ye-4]),Se.addEntity(ae[ye-2]),Se.addRelationship(ae[ye-4],ae[ye],ae[ye-2],ae[ye-3]);break;case 9:Se.addEntity(ae[ye-8]),Se.addEntity(ae[ye-4]),Se.addRelationship(ae[ye-8],ae[ye],ae[ye-4],ae[ye-5]),Se.setClass([ae[ye-8]],ae[ye-6]),Se.setClass([ae[ye-4]],ae[ye-2]);break;case 10:Se.addEntity(ae[ye-6]),Se.addEntity(ae[ye-2]),Se.addRelationship(ae[ye-6],ae[ye],ae[ye-2],ae[ye-3]),Se.setClass([ae[ye-6]],ae[ye-4]);break;case 11:Se.addEntity(ae[ye-6]),Se.addEntity(ae[ye-4]),Se.addRelationship(ae[ye-6],ae[ye],ae[ye-4],ae[ye-5]),Se.setClass([ae[ye-4]],ae[ye-2]);break;case 12:Se.addEntity(ae[ye-3]),Se.addAttributes(ae[ye-3],ae[ye-1]);break;case 13:Se.addEntity(ae[ye-5]),Se.addAttributes(ae[ye-5],ae[ye-1]),Se.setClass([ae[ye-5]],ae[ye-3]);break;case 14:Se.addEntity(ae[ye-2]);break;case 15:Se.addEntity(ae[ye-4]),Se.setClass([ae[ye-4]],ae[ye-2]);break;case 16:Se.addEntity(ae[ye]);break;case 17:Se.addEntity(ae[ye-2]),Se.setClass([ae[ye-2]],ae[ye]);break;case 18:Se.addEntity(ae[ye-6],ae[ye-4]),Se.addAttributes(ae[ye-6],ae[ye-1]);break;case 19:Se.addEntity(ae[ye-8],ae[ye-6]),Se.addAttributes(ae[ye-8],ae[ye-1]),Se.setClass([ae[ye-8]],ae[ye-3]);break;case 20:Se.addEntity(ae[ye-5],ae[ye-3]);break;case 21:Se.addEntity(ae[ye-7],ae[ye-5]),Se.setClass([ae[ye-7]],ae[ye-2]);break;case 22:Se.addEntity(ae[ye-3],ae[ye-1]);break;case 23:Se.addEntity(ae[ye-5],ae[ye-3]),Se.setClass([ae[ye-5]],ae[ye]);break;case 24:case 25:this.$=ae[ye].trim(),Se.setAccTitle(this.$);break;case 26:case 27:this.$=ae[ye].trim(),Se.setAccDescription(this.$);break;case 32:Se.setDirection("TB");break;case 33:Se.setDirection("BT");break;case 34:Se.setDirection("RL");break;case 35:Se.setDirection("LR");break;case 36:this.$=ae[ye-3],Se.addClass(ae[ye-2],ae[ye-1]);break;case 37:case 38:case 56:case 64:this.$=[ae[ye]];break;case 39:case 40:this.$=ae[ye-2].concat([ae[ye]]);break;case 41:this.$=ae[ye-2],Se.setClass(ae[ye-1],ae[ye]);break;case 42:this.$=ae[ye-3],Se.addCssStyles(ae[ye-2],ae[ye-1]);break;case 43:this.$=[ae[ye]];break;case 44:ae[ye-2].push(ae[ye]),this.$=ae[ye-2];break;case 46:this.$=ae[ye-1]+ae[ye];break;case 54:case 76:case 77:this.$=ae[ye].replace(/"/g,"");break;case 55:case 78:this.$=ae[ye];break;case 57:ae[ye].push(ae[ye-1]),this.$=ae[ye];break;case 58:this.$={type:ae[ye-1],name:ae[ye]};break;case 59:this.$={type:ae[ye-2],name:ae[ye-1],keys:ae[ye]};break;case 60:this.$={type:ae[ye-2],name:ae[ye-1],comment:ae[ye]};break;case 61:this.$={type:ae[ye-3],name:ae[ye-2],keys:ae[ye-1],comment:ae[ye]};break;case 62:case 63:case 66:this.$=ae[ye];break;case 65:ae[ye-2].push(ae[ye]),this.$=ae[ye-2];break;case 67:this.$=ae[ye].replace(/"/g,"");break;case 68:this.$={cardA:ae[ye],relType:ae[ye-1],cardB:ae[ye-2]};break;case 69:this.$=Se.Cardinality.ZERO_OR_ONE;break;case 70:this.$=Se.Cardinality.ZERO_OR_MORE;break;case 71:this.$=Se.Cardinality.ONE_OR_MORE;break;case 72:this.$=Se.Cardinality.ONLY_ONE;break;case 73:this.$=Se.Cardinality.MD_PARENT;break;case 74:this.$=Se.Identification.NON_IDENTIFYING;break;case 75:this.$=Se.Identification.IDENTIFYING;break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:9,22:r,24:n,26:i,28:a,29:14,30:15,31:16,32:17,33:s,34:l,35:u,36:h,37:f,40:d,43:p,44:m,50:g},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:27,11:9,22:r,24:n,26:i,28:a,29:14,30:15,31:16,32:17,33:s,34:l,35:u,36:h,37:f,40:d,43:p,44:m,50:g},t(e,[2,5]),t(e,[2,6]),t(e,[2,16],{12:28,61:32,15:[1,29],17:[1,30],20:[1,31],63:y,64:v,65:x,66:b,67:T}),{23:[1,38]},{25:[1,39]},{27:[1,40]},t(e,[2,27]),t(e,[2,28]),t(e,[2,29]),t(e,[2,30]),t(e,[2,31]),t(S,[2,54]),t(S,[2,55]),t(e,[2,32]),t(e,[2,33]),t(e,[2,34]),t(e,[2,35]),{16:41,40:w,41:E},{16:44,40:w,41:E},{16:45,40:w,41:E},t(e,[2,4]),{11:46,40:d,50:g},{16:47,40:w,41:E},{18:48,19:[1,49],51:50,52:51,56:_},{11:53,40:d,50:g},{62:54,68:[1,55],69:[1,56]},t(C,[2,69]),t(C,[2,70]),t(C,[2,71]),t(C,[2,72]),t(C,[2,73]),t(e,[2,24]),t(e,[2,25]),t(e,[2,26]),{13:D,38:57,41:O,42:R,45:59,46:60,48:k,49:L},t(A,[2,37]),t(A,[2,38]),{16:65,40:w,41:E,42:R},{13:D,38:66,41:O,42:R,45:59,46:60,48:k,49:L},{13:[1,67],15:[1,68]},t(e,[2,17],{61:32,12:69,17:[1,70],42:R,63:y,64:v,65:x,66:b,67:T}),{19:[1,71]},t(e,[2,14]),{18:72,19:[2,56],51:50,52:51,56:_},{53:73,56:[1,74]},{56:[2,62]},{21:[1,75]},{61:76,63:y,64:v,65:x,66:b,67:T},t(I,[2,74]),t(I,[2,75]),{6:M,10:P,39:77,42:B,47:F},{40:[1,82],41:[1,83]},t(z,[2,43],{46:84,13:D,41:O,48:k,49:L}),t($,[2,45]),t($,[2,50]),t($,[2,51]),t($,[2,52]),t($,[2,53]),t(e,[2,41],{42:R}),{6:M,10:P,39:85,42:B,47:F},{14:86,40:U,50:K,70:ee},{16:90,40:w,41:E},{11:91,40:d,50:g},{18:92,19:[1,93],51:50,52:51,56:_},t(e,[2,12]),{19:[2,57]},t(Y,[2,58],{54:94,55:95,57:96,59:ce,60:Z}),t([19,56,59,60],[2,63]),t(e,[2,22],{15:[1,100],17:[1,99]}),t([40,50],[2,68]),t(e,[2,36]),{13:D,41:O,45:101,46:60,48:k,49:L},t(e,[2,47]),t(e,[2,48]),t(e,[2,49]),t(A,[2,39]),t(A,[2,40]),t($,[2,46]),t(e,[2,42]),t(e,[2,8]),t(e,[2,76]),t(e,[2,77]),t(e,[2,78]),{13:[1,102],42:R},{13:[1,104],15:[1,103]},{19:[1,105]},t(e,[2,15]),t(Y,[2,59],{55:106,58:[1,107],60:Z}),t(Y,[2,60]),t(ue,[2,64]),t(Y,[2,67]),t(ue,[2,66]),{18:108,19:[1,109],51:50,52:51,56:_},{16:110,40:w,41:E},t(z,[2,44],{46:84,13:D,41:O,48:k,49:L}),{14:111,40:U,50:K,70:ee},{16:112,40:w,41:E},{14:113,40:U,50:K,70:ee},t(e,[2,13]),t(Y,[2,61]),{57:114,59:ce},{19:[1,115]},t(e,[2,20]),t(e,[2,23],{17:[1,116],42:R}),t(e,[2,11]),{13:[1,117],42:R},t(e,[2,10]),t(ue,[2,65]),t(e,[2,18]),{18:118,19:[1,119],51:50,52:51,56:_},{14:120,40:U,50:K,70:ee},{19:[1,121]},t(e,[2,21]),t(e,[2,9]),t(e,[2,19])],defaultActions:{52:[2,62],72:[2,57]},parseError:o(function(he,le){if(le.recoverable)this.trace(he);else{var J=new Error(he);throw J.hash=le,J}},"parseError"),parse:o(function(he){var le=this,J=[0],Se=[],se=[null],ae=[],Oe=this.table,ye="",Be=0,He=0,ze=0,Le=2,Ie=1,xe=ae.slice.call(arguments,1),q=Object.create(this.lexer),de={yy:{}};for(var ie in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ie)&&(de.yy[ie]=this.yy[ie]);q.setInput(he,de.yy),de.yy.lexer=q,de.yy.parser=this,typeof q.yylloc>"u"&&(q.yylloc={});var oe=q.yylloc;ae.push(oe);var V=q.options&&q.options.ranges;typeof de.yy.parseError=="function"?this.parseError=de.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Te(ct){J.length=J.length-2*ct,se.length=se.length-ct,ae.length=ae.length-ct}o(Te,"popStack");function W(){var ct;return ct=Se.pop()||q.lex()||Ie,typeof ct!="number"&&(ct instanceof Array&&(Se=ct,ct=Se.pop()),ct=le.symbols_[ct]||ct),ct}o(W,"lex");for(var pe,ve,Pe,_e,be,Ve,De={},qe,at,Rt,st;;){if(Pe=J[J.length-1],this.defaultActions[Pe]?_e=this.defaultActions[Pe]:((pe===null||typeof pe>"u")&&(pe=W()),_e=Oe[Pe]&&Oe[Pe][pe]),typeof _e>"u"||!_e.length||!_e[0]){var Ue="";st=[];for(qe in Oe[Pe])this.terminals_[qe]&&qe>Le&&st.push("'"+this.terminals_[qe]+"'");q.showPosition?Ue="Parse error on line "+(Be+1)+`: `+q.showPosition()+` -Expecting `+st.join(", ")+", got '"+(this.terminals_[pe]||pe)+"'":Ue="Parse error on line "+(Be+1)+": Unexpected "+(pe==Ie?"end of input":"'"+(this.terminals_[pe]||pe)+"'"),this.parseError(Ue,{text:q.match,token:this.terminals_[pe]||pe,line:q.yylineno,loc:oe,expected:st})}if(_e[0]instanceof Array&&_e.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Pe+", token: "+pe);switch(_e[0]){case 1:J.push(pe),se.push(q.yytext),ae.push(q.yylloc),J.push(_e[1]),pe=null,ve?(pe=ve,ve=null):(He=q.yyleng,ye=q.yytext,Be=q.yylineno,oe=q.yylloc,ze>0&&ze--);break;case 2:if(at=this.productions_[_e[1]][1],De.$=se[se.length-at],De._$={first_line:ae[ae.length-(at||1)].first_line,last_line:ae[ae.length-1].last_line,first_column:ae[ae.length-(at||1)].first_column,last_column:ae[ae.length-1].last_column},V&&(De._$.range=[ae[ae.length-(at||1)].range[0],ae[ae.length-1].range[1]]),Ve=this.performAction.apply(De,[ye,He,Be,de.yy,_e[1],se,ae].concat(xe)),typeof Ve<"u")return Ve;at&&(J=J.slice(0,-1*at*2),se=se.slice(0,-1*at),ae=ae.slice(0,-1*at)),J.push(this.productions_[_e[1]][0]),se.push(De.$),ae.push(De._$),Lt=Oe[J[J.length-2]][J[J.length-1]],J.push(Lt);break;case 3:return!0}}return!0},"parse")},j=function(){var ee={EOF:1,parseError:o(function(le,J){if(this.yy.parser)this.yy.parser.parseError(le,J);else throw new Error(le)},"parseError"),setInput:o(function(ce,le){return this.yy=le||this.yy||{},this._input=ce,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},"setInput"),input:o(function(){var ce=this._input[0];this.yytext+=ce,this.yyleng++,this.offset++,this.match+=ce,this.matched+=ce;var le=ce.match(/(?:\r\n?|\n).*/g);return le?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),ce},"input"),unput:o(function(ce){var le=ce.length,J=ce.split(/(?:\r\n?|\n)/g);this._input=ce+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-le),this.offset-=le;var Se=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),J.length-1&&(this.yylineno-=J.length-1);var se=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:J?(J.length===Se.length?this.yylloc.first_column:0)+Se[Se.length-J.length].length-J[0].length:this.yylloc.first_column-le},this.options.ranges&&(this.yylloc.range=[se[0],se[0]+this.yyleng-le]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(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},"reject"),less:o(function(ce){this.unput(this.match.slice(ce))},"less"),pastInput:o(function(){var ce=this.matched.substr(0,this.matched.length-this.match.length);return(ce.length>20?"...":"")+ce.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var ce=this.match;return ce.length<20&&(ce+=this._input.substr(0,20-ce.length)),(ce.substr(0,20)+(ce.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var ce=this.pastInput(),le=new Array(ce.length+1).join("-");return ce+this.upcomingInput()+` -`+le+"^"},"showPosition"),test_match:o(function(ce,le){var J,Se,se;if(this.options.backtrack_lexer&&(se={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&&(se.yylloc.range=this.yylloc.range.slice(0))),Se=ce[0].match(/(?:\r\n?|\n).*/g),Se&&(this.yylineno+=Se.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Se?Se[Se.length-1].length-Se[Se.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+ce[0].length},this.yytext+=ce[0],this.match+=ce[0],this.matches=ce,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(ce[0].length),this.matched+=ce[0],J=this.performAction.call(this,this.yy,this,le,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),J)return J;if(this._backtrack){for(var ae in se)this[ae]=se[ae];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var ce,le,J,Se;this._more||(this.yytext="",this.match="");for(var se=this._currentRules(),ae=0;aele[0].length)){if(le=J,Se=ae,this.options.backtrack_lexer){if(ce=this.test_match(J,se[ae]),ce!==!1)return ce;if(this._backtrack){le=!1;continue}else return!1}else if(!this.options.flex)break}return le?(ce=this.test_match(le,se[Se]),ce!==!1?ce:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var le=this.next();return le||this.lex()},"lex"),begin:o(function(le){this.conditionStack.push(le)},"begin"),popState:o(function(){var le=this.conditionStack.length-1;return le>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(le){return le=this.conditionStack.length-1-Math.abs(le||0),le>=0?this.conditionStack[le]:"INITIAL"},"topState"),pushState:o(function(le){this.begin(le)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(le,J,Se,se){var ae=se;switch(Se){case 0:return this.begin("acc_title"),24;break;case 1:return this.popState(),"acc_title_value";break;case 2:return this.begin("acc_descr"),26;break;case 3:return this.popState(),"acc_descr_value";break;case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return 33;case 8:return 34;case 9:return 35;case 10:return 36;case 11:return 10;case 12:break;case 13:return 8;case 14:return 50;case 15:return 70;case 16:return 4;case 17:return this.begin("block"),17;break;case 18:return 49;case 19:return 49;case 20:return 42;case 21:return 15;case 22:return 13;case 23:break;case 24:return 59;case 25:return 56;case 26:return 56;case 27:return 60;case 28:break;case 29:return this.popState(),19;break;case 30:return J.yytext[0];case 31:return 20;case 32:return 21;case 33:return this.begin("style"),44;break;case 34:return this.popState(),10;break;case 35:break;case 36:return 13;case 37:return 42;case 38:return 49;case 39:return this.begin("style"),37;break;case 40:return 43;case 41:return 63;case 42:return 65;case 43:return 65;case 44:return 65;case 45:return 63;case 46:return 63;case 47:return 64;case 48:return 64;case 49:return 64;case 50:return 64;case 51:return 64;case 52:return 65;case 53:return 64;case 54:return 65;case 55:return 66;case 56:return 66;case 57:return 66;case 58:return 66;case 59:return 63;case 60:return 64;case 61:return 65;case 62:return 67;case 63:return 68;case 64:return 69;case 65:return 69;case 66:return 68;case 67:return 68;case 68:return 68;case 69:return 41;case 70:return 47;case 71:return 40;case 72:return 48;case 73:return J.yytext[0];case 74:return 6}},"anonymous"),rules:[/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:[\s]+)/i,/^(?:"[^"%\r\n\v\b\\]+")/i,/^(?:"[^"]*")/i,/^(?:erDiagram\b)/i,/^(?:\{)/i,/^(?:#)/i,/^(?:#)/i,/^(?:,)/i,/^(?::::)/i,/^(?::)/i,/^(?:\s+)/i,/^(?:\b((?:PK)|(?:FK)|(?:UK))\b)/i,/^(?:([^\s]*)[~].*[~]([^\s]*))/i,/^(?:([\*A-Za-z_\u00C0-\uFFFF][A-Za-z0-9\-\_\[\]\(\)\u00C0-\uFFFF\*]*))/i,/^(?:"[^"]*")/i,/^(?:[\n]+)/i,/^(?:\})/i,/^(?:.)/i,/^(?:\[)/i,/^(?:\])/i,/^(?:style\b)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?::)/i,/^(?:,)/i,/^(?:#)/i,/^(?:classDef\b)/i,/^(?:class\b)/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,/^(?:([^\x00-\x7F]|\w|-|\*)+)/i,/^(?:;)/i,/^(?:([^\x00-\x7F]|\w|-|\*)+)/i,/^(?:[0-9])/i,/^(?:.)/i,/^(?:$)/i],conditions:{style:{rules:[34,35,36,37,38,69,70],inclusive:!1},acc_descr_multiline:{rules:[5,6],inclusive:!1},acc_descr:{rules:[3],inclusive:!1},acc_title:{rules:[1],inclusive:!1},block:{rules:[23,24,25,26,27,28,29,30],inclusive:!1},INITIAL:{rules:[0,2,4,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,31,32,33,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,71,72,73,74],inclusive:!0}}};return ee}();K.lexer=j;function ne(){this.yy={}}return o(ne,"Parser"),ne.prototype=K,K.Parser=ne,new ne}();CR.parser=CR;nae=CR});var dk,aae=N(()=>{"use strict";vt();zt();mi();nr();dk=class{constructor(){this.entities=new Map;this.relationships=[];this.classes=new Map;this.direction="TB";this.Cardinality={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"};this.Identification={NON_IDENTIFYING:"NON_IDENTIFYING",IDENTIFYING:"IDENTIFYING"};this.setAccTitle=Lr;this.getAccTitle=Rr;this.setAccDescription=Nr;this.getAccDescription=Mr;this.setDiagramTitle=$r;this.getDiagramTitle=Ir;this.getConfig=o(()=>me().er,"getConfig");this.clear(),this.addEntity=this.addEntity.bind(this),this.addAttributes=this.addAttributes.bind(this),this.addRelationship=this.addRelationship.bind(this),this.setDirection=this.setDirection.bind(this),this.addCssStyles=this.addCssStyles.bind(this),this.addClass=this.addClass.bind(this),this.setClass=this.setClass.bind(this),this.setAccTitle=this.setAccTitle.bind(this),this.setAccDescription=this.setAccDescription.bind(this)}static{o(this,"ErDB")}addEntity(e,r=""){return this.entities.has(e)?!this.entities.get(e)?.alias&&r&&(this.entities.get(e).alias=r,X.info(`Add alias '${r}' to entity '${e}'`)):(this.entities.set(e,{id:`entity-${e}-${this.entities.size}`,label:e,attributes:[],alias:r,shape:"erBox",look:me().look??"default",cssClasses:"default",cssStyles:[]}),X.info("Added new entity :",e)),this.entities.get(e)}getEntity(e){return this.entities.get(e)}getEntities(){return this.entities}getClasses(){return this.classes}addAttributes(e,r){let n=this.addEntity(e),i;for(i=r.length-1;i>=0;i--)r[i].keys||(r[i].keys=[]),r[i].comment||(r[i].comment=""),n.attributes.push(r[i]),X.debug("Added attribute ",r[i].name)}addRelationship(e,r,n,i){let a=this.entities.get(e),s=this.entities.get(n);if(!a||!s)return;let l={entityA:a.id,roleA:r,entityB:s.id,relSpec:i};this.relationships.push(l),X.debug("Added new relationship :",l)}getRelationships(){return this.relationships}getDirection(){return this.direction}setDirection(e){this.direction=e}getCompiledStyles(e){let r=[];for(let n of e){let i=this.classes.get(n);i?.styles&&(r=[...r,...i.styles??[]].map(a=>a.trim())),i?.textStyles&&(r=[...r,...i.textStyles??[]].map(a=>a.trim()))}return r}addCssStyles(e,r){for(let n of e){let i=this.entities.get(n);if(!r||!i)return;for(let a of r)i.cssStyles.push(a)}}addClass(e,r){e.forEach(n=>{let i=this.classes.get(n);i===void 0&&(i={id:n,styles:[],textStyles:[]},this.classes.set(n,i)),r&&r.forEach(function(a){if(/color/.exec(a)){let s=a.replace("fill","bgFill");i.textStyles.push(s)}i.styles.push(a)})})}setClass(e,r){for(let n of e){let i=this.entities.get(n);if(i)for(let a of r)i.cssClasses+=" "+a}}clear(){this.entities=new Map,this.classes=new Map,this.relationships=[],Ar()}getData(){let e=[],r=[],n=me();for(let a of this.entities.keys()){let s=this.entities.get(a);s&&(s.cssCompiledStyles=this.getCompiledStyles(s.cssClasses.split(" ")),e.push(s))}let i=0;for(let a of this.relationships){let s={id:Uh(a.entityA,a.entityB,{prefix:"id",counter:i++}),type:"normal",curve:"basis",start:a.entityA,end:a.entityB,label:a.roleA,labelpos:"c",thickness:"normal",classes:"relationshipLine",arrowTypeStart:a.relSpec.cardB.toLowerCase(),arrowTypeEnd:a.relSpec.cardA.toLowerCase(),pattern:a.relSpec.relType=="IDENTIFYING"?"solid":"dashed",look:n.look};r.push(s)}return{nodes:e,edges:r,other:{},config:n,direction:"TB"}}}});var AR={};hr(AR,{draw:()=>bOe});var bOe,sae=N(()=>{"use strict";zt();vt();km();ep();qm();nr();pr();bOe=o(async function(t,e,r,n){X.info("REF0:"),X.info("Drawing er diagram (unified)",e);let{securityLevel:i,er:a,layout:s}=me(),l=n.db.getData(),u=xc(e,i);l.type=n.type,l.layoutAlgorithm=lf(s),l.config.flowchart.nodeSpacing=a?.nodeSpacing||140,l.config.flowchart.rankSpacing=a?.rankSpacing||80,l.direction=n.db.getDirection(),l.markers=["only_one","zero_or_one","one_or_more","zero_or_more"],l.diagramId=e,await _c(l,u),l.layoutAlgorithm==="elk"&&u.select(".edges").lower();let h=u.selectAll('[id*="-background"]');Array.from(h).length>0&&h.each(function(){let d=Ge(this),m=d.attr("id").replace("-background",""),g=u.select(`#${CSS.escape(m)}`);if(!g.empty()){let y=g.attr("transform");d.attr("transform",y)}});let f=8;Gt.insertTitle(u,"erDiagramTitleText",a?.titleTopMargin??25,n.db.getDiagramTitle()),Dc(u,f,"erDiagram",a?.useMaxWidth??!0)},"draw")});var wOe,TOe,oae,lae=N(()=>{"use strict";js();wOe=o((t,e)=>{let r=rd,n=r(t,"r"),i=r(t,"g"),a=r(t,"b");return qa(n,i,a,e)},"fade"),TOe=o(t=>` +Expecting `+st.join(", ")+", got '"+(this.terminals_[pe]||pe)+"'":Ue="Parse error on line "+(Be+1)+": Unexpected "+(pe==Ie?"end of input":"'"+(this.terminals_[pe]||pe)+"'"),this.parseError(Ue,{text:q.match,token:this.terminals_[pe]||pe,line:q.yylineno,loc:oe,expected:st})}if(_e[0]instanceof Array&&_e.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Pe+", token: "+pe);switch(_e[0]){case 1:J.push(pe),se.push(q.yytext),ae.push(q.yylloc),J.push(_e[1]),pe=null,ve?(pe=ve,ve=null):(He=q.yyleng,ye=q.yytext,Be=q.yylineno,oe=q.yylloc,ze>0&&ze--);break;case 2:if(at=this.productions_[_e[1]][1],De.$=se[se.length-at],De._$={first_line:ae[ae.length-(at||1)].first_line,last_line:ae[ae.length-1].last_line,first_column:ae[ae.length-(at||1)].first_column,last_column:ae[ae.length-1].last_column},V&&(De._$.range=[ae[ae.length-(at||1)].range[0],ae[ae.length-1].range[1]]),Ve=this.performAction.apply(De,[ye,He,Be,de.yy,_e[1],se,ae].concat(xe)),typeof Ve<"u")return Ve;at&&(J=J.slice(0,-1*at*2),se=se.slice(0,-1*at),ae=ae.slice(0,-1*at)),J.push(this.productions_[_e[1]][0]),se.push(De.$),ae.push(De._$),Rt=Oe[J[J.length-2]][J[J.length-1]],J.push(Rt);break;case 3:return!0}}return!0},"parse")},j=function(){var te={EOF:1,parseError:o(function(le,J){if(this.yy.parser)this.yy.parser.parseError(le,J);else throw new Error(le)},"parseError"),setInput:o(function(he,le){return this.yy=le||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},"setInput"),input:o(function(){var he=this._input[0];this.yytext+=he,this.yyleng++,this.offset++,this.match+=he,this.matched+=he;var le=he.match(/(?:\r\n?|\n).*/g);return le?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),he},"input"),unput:o(function(he){var le=he.length,J=he.split(/(?:\r\n?|\n)/g);this._input=he+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-le),this.offset-=le;var Se=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),J.length-1&&(this.yylineno-=J.length-1);var se=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:J?(J.length===Se.length?this.yylloc.first_column:0)+Se[Se.length-J.length].length-J[0].length:this.yylloc.first_column-le},this.options.ranges&&(this.yylloc.range=[se[0],se[0]+this.yyleng-le]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(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},"reject"),less:o(function(he){this.unput(this.match.slice(he))},"less"),pastInput:o(function(){var he=this.matched.substr(0,this.matched.length-this.match.length);return(he.length>20?"...":"")+he.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(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,"")},"upcomingInput"),showPosition:o(function(){var he=this.pastInput(),le=new Array(he.length+1).join("-");return he+this.upcomingInput()+` +`+le+"^"},"showPosition"),test_match:o(function(he,le){var J,Se,se;if(this.options.backtrack_lexer&&(se={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&&(se.yylloc.range=this.yylloc.range.slice(0))),Se=he[0].match(/(?:\r\n?|\n).*/g),Se&&(this.yylineno+=Se.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Se?Se[Se.length-1].length-Se[Se.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],J=this.performAction.call(this,this.yy,this,le,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),J)return J;if(this._backtrack){for(var ae in se)this[ae]=se[ae];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var he,le,J,Se;this._more||(this.yytext="",this.match="");for(var se=this._currentRules(),ae=0;aele[0].length)){if(le=J,Se=ae,this.options.backtrack_lexer){if(he=this.test_match(J,se[ae]),he!==!1)return he;if(this._backtrack){le=!1;continue}else return!1}else if(!this.options.flex)break}return le?(he=this.test_match(le,se[Se]),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})},"next"),lex:o(function(){var le=this.next();return le||this.lex()},"lex"),begin:o(function(le){this.conditionStack.push(le)},"begin"),popState:o(function(){var le=this.conditionStack.length-1;return le>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(le){return le=this.conditionStack.length-1-Math.abs(le||0),le>=0?this.conditionStack[le]:"INITIAL"},"topState"),pushState:o(function(le){this.begin(le)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(le,J,Se,se){var ae=se;switch(Se){case 0:return this.begin("acc_title"),24;break;case 1:return this.popState(),"acc_title_value";break;case 2:return this.begin("acc_descr"),26;break;case 3:return this.popState(),"acc_descr_value";break;case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return 33;case 8:return 34;case 9:return 35;case 10:return 36;case 11:return 10;case 12:break;case 13:return 8;case 14:return 50;case 15:return 70;case 16:return 4;case 17:return this.begin("block"),17;break;case 18:return 49;case 19:return 49;case 20:return 42;case 21:return 15;case 22:return 13;case 23:break;case 24:return 59;case 25:return 56;case 26:return 56;case 27:return 60;case 28:break;case 29:return this.popState(),19;break;case 30:return J.yytext[0];case 31:return 20;case 32:return 21;case 33:return this.begin("style"),44;break;case 34:return this.popState(),10;break;case 35:break;case 36:return 13;case 37:return 42;case 38:return 49;case 39:return this.begin("style"),37;break;case 40:return 43;case 41:return 63;case 42:return 65;case 43:return 65;case 44:return 65;case 45:return 63;case 46:return 63;case 47:return 64;case 48:return 64;case 49:return 64;case 50:return 64;case 51:return 64;case 52:return 65;case 53:return 64;case 54:return 65;case 55:return 66;case 56:return 66;case 57:return 66;case 58:return 66;case 59:return 63;case 60:return 64;case 61:return 65;case 62:return 67;case 63:return 68;case 64:return 69;case 65:return 69;case 66:return 68;case 67:return 68;case 68:return 68;case 69:return 41;case 70:return 47;case 71:return 40;case 72:return 48;case 73:return J.yytext[0];case 74:return 6}},"anonymous"),rules:[/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:[\s]+)/i,/^(?:"[^"%\r\n\v\b\\]+")/i,/^(?:"[^"]*")/i,/^(?:erDiagram\b)/i,/^(?:\{)/i,/^(?:#)/i,/^(?:#)/i,/^(?:,)/i,/^(?::::)/i,/^(?::)/i,/^(?:\s+)/i,/^(?:\b((?:PK)|(?:FK)|(?:UK))\b)/i,/^(?:([^\s]*)[~].*[~]([^\s]*))/i,/^(?:([\*A-Za-z_\u00C0-\uFFFF][A-Za-z0-9\-\_\[\]\(\)\u00C0-\uFFFF\*]*))/i,/^(?:"[^"]*")/i,/^(?:[\n]+)/i,/^(?:\})/i,/^(?:.)/i,/^(?:\[)/i,/^(?:\])/i,/^(?:style\b)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?::)/i,/^(?:,)/i,/^(?:#)/i,/^(?:classDef\b)/i,/^(?:class\b)/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,/^(?:([^\x00-\x7F]|\w|-|\*)+)/i,/^(?:;)/i,/^(?:([^\x00-\x7F]|\w|-|\*)+)/i,/^(?:[0-9])/i,/^(?:.)/i,/^(?:$)/i],conditions:{style:{rules:[34,35,36,37,38,69,70],inclusive:!1},acc_descr_multiline:{rules:[5,6],inclusive:!1},acc_descr:{rules:[3],inclusive:!1},acc_title:{rules:[1],inclusive:!1},block:{rules:[23,24,25,26,27,28,29,30],inclusive:!1},INITIAL:{rules:[0,2,4,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,31,32,33,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,71,72,73,74],inclusive:!0}}};return te}();Q.lexer=j;function ne(){this.yy={}}return o(ne,"Parser"),ne.prototype=Q,Q.Parser=ne,new ne}();iN.parser=iN;pse=iN});var Tk,gse=N(()=>{"use strict";yt();Gt();ci();er();Tk=class{constructor(){this.entities=new Map;this.relationships=[];this.classes=new Map;this.direction="TB";this.Cardinality={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"};this.Identification={NON_IDENTIFYING:"NON_IDENTIFYING",IDENTIFYING:"IDENTIFYING"};this.setAccTitle=Ar;this.getAccTitle=Dr;this.setAccDescription=Lr;this.getAccDescription=Rr;this.setDiagramTitle=Or;this.getDiagramTitle=Nr;this.getConfig=o(()=>me().er,"getConfig");this.clear(),this.addEntity=this.addEntity.bind(this),this.addAttributes=this.addAttributes.bind(this),this.addRelationship=this.addRelationship.bind(this),this.setDirection=this.setDirection.bind(this),this.addCssStyles=this.addCssStyles.bind(this),this.addClass=this.addClass.bind(this),this.setClass=this.setClass.bind(this),this.setAccTitle=this.setAccTitle.bind(this),this.setAccDescription=this.setAccDescription.bind(this)}static{o(this,"ErDB")}addEntity(e,r=""){return this.entities.has(e)?!this.entities.get(e)?.alias&&r&&(this.entities.get(e).alias=r,X.info(`Add alias '${r}' to entity '${e}'`)):(this.entities.set(e,{id:`entity-${e}-${this.entities.size}`,label:e,attributes:[],alias:r,shape:"erBox",look:me().look??"default",cssClasses:"default",cssStyles:[]}),X.info("Added new entity :",e)),this.entities.get(e)}getEntity(e){return this.entities.get(e)}getEntities(){return this.entities}getClasses(){return this.classes}addAttributes(e,r){let n=this.addEntity(e),i;for(i=r.length-1;i>=0;i--)r[i].keys||(r[i].keys=[]),r[i].comment||(r[i].comment=""),n.attributes.push(r[i]),X.debug("Added attribute ",r[i].name)}addRelationship(e,r,n,i){let a=this.entities.get(e),s=this.entities.get(n);if(!a||!s)return;let l={entityA:a.id,roleA:r,entityB:s.id,relSpec:i};this.relationships.push(l),X.debug("Added new relationship :",l)}getRelationships(){return this.relationships}getDirection(){return this.direction}setDirection(e){this.direction=e}getCompiledStyles(e){let r=[];for(let n of e){let i=this.classes.get(n);i?.styles&&(r=[...r,...i.styles??[]].map(a=>a.trim())),i?.textStyles&&(r=[...r,...i.textStyles??[]].map(a=>a.trim()))}return r}addCssStyles(e,r){for(let n of e){let i=this.entities.get(n);if(!r||!i)return;for(let a of r)i.cssStyles.push(a)}}addClass(e,r){e.forEach(n=>{let i=this.classes.get(n);i===void 0&&(i={id:n,styles:[],textStyles:[]},this.classes.set(n,i)),r&&r.forEach(function(a){if(/color/.exec(a)){let s=a.replace("fill","bgFill");i.textStyles.push(s)}i.styles.push(a)})})}setClass(e,r){for(let n of e){let i=this.entities.get(n);if(i)for(let a of r)i.cssClasses+=" "+a}}clear(){this.entities=new Map,this.classes=new Map,this.relationships=[],kr()}getData(){let e=[],r=[],n=me();for(let a of this.entities.keys()){let s=this.entities.get(a);s&&(s.cssCompiledStyles=this.getCompiledStyles(s.cssClasses.split(" ")),e.push(s))}let i=0;for(let a of this.relationships){let s={id:Wh(a.entityA,a.entityB,{prefix:"id",counter:i++}),type:"normal",curve:"basis",start:a.entityA,end:a.entityB,label:a.roleA,labelpos:"c",thickness:"normal",classes:"relationshipLine",arrowTypeStart:a.relSpec.cardB.toLowerCase(),arrowTypeEnd:a.relSpec.cardA.toLowerCase(),pattern:a.relSpec.relType=="IDENTIFYING"?"solid":"dashed",look:n.look};r.push(s)}return{nodes:e,edges:r,other:{},config:n,direction:"TB"}}}});var aN={};ur(aN,{draw:()=>ZPe});var ZPe,yse=N(()=>{"use strict";Gt();yt();Sm();rp();np();er();fr();ZPe=o(async function(t,e,r,n){X.info("REF0:"),X.info("Drawing er diagram (unified)",e);let{securityLevel:i,er:a,layout:s}=me(),l=n.db.getData(),u=wc(e,i);l.type=n.type,l.layoutAlgorithm=uf(s),l.config.flowchart.nodeSpacing=a?.nodeSpacing||140,l.config.flowchart.rankSpacing=a?.rankSpacing||80,l.direction=n.db.getDirection(),l.markers=["only_one","zero_or_one","one_or_more","zero_or_more"],l.diagramId=e,await Rc(l,u),l.layoutAlgorithm==="elk"&&u.select(".edges").lower();let h=u.selectAll('[id*="-background"]');Array.from(h).length>0&&h.each(function(){let d=Ge(this),m=d.attr("id").replace("-background",""),g=u.select(`#${CSS.escape(m)}`);if(!g.empty()){let y=g.attr("transform");d.attr("transform",y)}});let f=8;Vt.insertTitle(u,"erDiagramTitleText",a?.titleTopMargin??25,n.db.getDiagramTitle()),Yo(u,f,"erDiagram",a?.useMaxWidth??!0)},"draw")});var JPe,eBe,vse,xse=N(()=>{"use strict";Ks();JPe=o((t,e)=>{let r=id,n=r(t,"r"),i=r(t,"g"),a=r(t,"b");return Qa(n,i,a,e)},"fade"),eBe=o(t=>` .entityBox { fill: ${t.mainBkg}; stroke: ${t.nodeBorder}; @@ -662,7 +662,7 @@ Expecting `+st.join(", ")+", got '"+(this.terminals_[pe]||pe)+"'":Ue="Parse erro } .labelBkg { - background-color: ${wOe(t.tertiaryColor,.5)}; + background-color: ${JPe(t.tertiaryColor,.5)}; } .edgeLabel .label { @@ -700,69 +700,69 @@ Expecting `+st.join(", ")+", got '"+(this.terminals_[pe]||pe)+"'":Ue="Parse erro stroke: ${t.lineColor} !important; stroke-width: 1; } -`,"getStyles"),oae=TOe});var cae={};hr(cae,{diagram:()=>kOe});var kOe,uae=N(()=>{"use strict";iae();aae();sae();lae();kOe={parser:nae,get db(){return new dk},renderer:AR,styles:oae}});function ii(t){return typeof t=="object"&&t!==null&&typeof t.$type=="string"}function va(t){return typeof t=="object"&&t!==null&&typeof t.$refText=="string"}function _R(t){return typeof t=="object"&&t!==null&&typeof t.name=="string"&&typeof t.type=="string"&&typeof t.path=="string"}function rp(t){return typeof t=="object"&&t!==null&&ii(t.container)&&va(t.reference)&&typeof t.message=="string"}function Nl(t){return typeof t=="object"&&t!==null&&Array.isArray(t.content)}function cf(t){return typeof t=="object"&&t!==null&&typeof t.tokenType=="object"}function z2(t){return Nl(t)&&typeof t.fullText=="string"}var tp,Ml=N(()=>{"use strict";o(ii,"isAstNode");o(va,"isReference");o(_R,"isAstNodeDescription");o(rp,"isLinkingError");tp=class{static{o(this,"AbstractAstReflection")}constructor(){this.subtypes={},this.allSubtypes={}}isInstance(e,r){return ii(e)&&this.isSubtype(e.$type,r)}isSubtype(e,r){if(e===r)return!0;let n=this.subtypes[e];n||(n=this.subtypes[e]={});let i=n[r];if(i!==void 0)return i;{let a=this.computeIsSubtype(e,r);return n[r]=a,a}}getAllSubTypes(e){let r=this.allSubtypes[e];if(r)return r;{let n=this.getAllTypes(),i=[];for(let a of n)this.isSubtype(a,e)&&i.push(a);return this.allSubtypes[e]=i,i}}};o(Nl,"isCompositeCstNode");o(cf,"isLeafCstNode");o(z2,"isRootCstNode")});function AOe(t){return typeof t=="string"?t:typeof t>"u"?"undefined":typeof t.toString=="function"?t.toString():Object.prototype.toString.call(t)}function pk(t){return!!t&&typeof t[Symbol.iterator]=="function"}function en(...t){if(t.length===1){let e=t[0];if(e instanceof oo)return e;if(pk(e))return new oo(()=>e[Symbol.iterator](),r=>r.next());if(typeof e.length=="number")return new oo(()=>({index:0}),r=>r.index1?new oo(()=>({collIndex:0,arrIndex:0}),e=>{do{if(e.iterator){let r=e.iterator.next();if(!r.done)return r;e.iterator=void 0}if(e.array){if(e.arrIndex{"use strict";oo=class t{static{o(this,"StreamImpl")}constructor(e,r){this.startFn=e,this.nextFn=r}iterator(){let e={state:this.startFn(),next:o(()=>this.nextFn(e.state),"next"),[Symbol.iterator]:()=>e};return e}[Symbol.iterator](){return this.iterator()}isEmpty(){return!!this.iterator().next().done}count(){let e=this.iterator(),r=0,n=e.next();for(;!n.done;)r++,n=e.next();return r}toArray(){let e=[],r=this.iterator(),n;do n=r.next(),n.value!==void 0&&e.push(n.value);while(!n.done);return e}toSet(){return new Set(this)}toMap(e,r){let n=this.map(i=>[e?e(i):i,r?r(i):i]);return new Map(n)}toString(){return this.join()}concat(e){return new t(()=>({first:this.startFn(),firstDone:!1,iterator:e[Symbol.iterator]()}),r=>{let n;if(!r.firstDone){do if(n=this.nextFn(r.first),!n.done)return n;while(!n.done);r.firstDone=!0}do if(n=r.iterator.next(),!n.done)return n;while(!n.done);return Ia})}join(e=","){let r=this.iterator(),n="",i,a=!1;do i=r.next(),i.done||(a&&(n+=e),n+=AOe(i.value)),a=!0;while(!i.done);return n}indexOf(e,r=0){let n=this.iterator(),i=0,a=n.next();for(;!a.done;){if(i>=r&&a.value===e)return i;a=n.next(),i++}return-1}every(e){let r=this.iterator(),n=r.next();for(;!n.done;){if(!e(n.value))return!1;n=r.next()}return!0}some(e){let r=this.iterator(),n=r.next();for(;!n.done;){if(e(n.value))return!0;n=r.next()}return!1}forEach(e){let r=this.iterator(),n=0,i=r.next();for(;!i.done;)e(i.value,n),i=r.next(),n++}map(e){return new t(this.startFn,r=>{let{done:n,value:i}=this.nextFn(r);return n?Ia:{done:!1,value:e(i)}})}filter(e){return new t(this.startFn,r=>{let n;do if(n=this.nextFn(r),!n.done&&e(n.value))return n;while(!n.done);return Ia})}nonNullable(){return this.filter(e=>e!=null)}reduce(e,r){let n=this.iterator(),i=r,a=n.next();for(;!a.done;)i===void 0?i=a.value:i=e(i,a.value),a=n.next();return i}reduceRight(e,r){return this.recursiveReduce(this.iterator(),e,r)}recursiveReduce(e,r,n){let i=e.next();if(i.done)return n;let a=this.recursiveReduce(e,r,n);return a===void 0?i.value:r(a,i.value)}find(e){let r=this.iterator(),n=r.next();for(;!n.done;){if(e(n.value))return n.value;n=r.next()}}findIndex(e){let r=this.iterator(),n=0,i=r.next();for(;!i.done;){if(e(i.value))return n;i=r.next(),n++}return-1}includes(e){let r=this.iterator(),n=r.next();for(;!n.done;){if(n.value===e)return!0;n=r.next()}return!1}flatMap(e){return new t(()=>({this:this.startFn()}),r=>{do{if(r.iterator){let a=r.iterator.next();if(a.done)r.iterator=void 0;else return a}let{done:n,value:i}=this.nextFn(r.this);if(!n){let a=e(i);if(pk(a))r.iterator=a[Symbol.iterator]();else return{done:!1,value:a}}}while(r.iterator);return Ia})}flat(e){if(e===void 0&&(e=1),e<=0)return this;let r=e>1?this.flat(e-1):this;return new t(()=>({this:r.startFn()}),n=>{do{if(n.iterator){let s=n.iterator.next();if(s.done)n.iterator=void 0;else return s}let{done:i,value:a}=r.nextFn(n.this);if(!i)if(pk(a))n.iterator=a[Symbol.iterator]();else return{done:!1,value:a}}while(n.iterator);return Ia})}head(){let r=this.iterator().next();if(!r.done)return r.value}tail(e=1){return new t(()=>{let r=this.startFn();for(let n=0;n({size:0,state:this.startFn()}),r=>(r.size++,r.size>e?Ia:this.nextFn(r.state)))}distinct(e){return new t(()=>({set:new Set,internalState:this.startFn()}),r=>{let n;do if(n=this.nextFn(r.internalState),!n.done){let i=e?e(n.value):n.value;if(!r.set.has(i))return r.set.add(i),n}while(!n.done);return Ia})}exclude(e,r){let n=new Set;for(let i of e){let a=r?r(i):i;n.add(a)}return this.filter(i=>{let a=r?r(i):i;return!n.has(a)})}};o(AOe,"toString");o(pk,"isIterable");G2=new oo(()=>{},()=>Ia),Ia=Object.freeze({done:!0,value:void 0});o(en,"stream");Rc=class extends oo{static{o(this,"TreeStreamImpl")}constructor(e,r,n){super(()=>({iterators:n?.includeRoot?[[e][Symbol.iterator]()]:[r(e)[Symbol.iterator]()],pruned:!1}),i=>{for(i.pruned&&(i.iterators.pop(),i.pruned=!1);i.iterators.length>0;){let s=i.iterators[i.iterators.length-1].next();if(s.done)i.iterators.pop();else return i.iterators.push(r(s.value)[Symbol.iterator]()),s}return Ia})}iterator(){let e={state:this.startFn(),next:o(()=>this.nextFn(e.state),"next"),prune:o(()=>{e.state.pruned=!0},"prune"),[Symbol.iterator]:()=>e};return e}};(function(t){function e(a){return a.reduce((s,l)=>s+l,0)}o(e,"sum"),t.sum=e;function r(a){return a.reduce((s,l)=>s*l,0)}o(r,"product"),t.product=r;function n(a){return a.reduce((s,l)=>Math.min(s,l))}o(n,"min"),t.min=n;function i(a){return a.reduce((s,l)=>Math.max(s,l))}o(i,"max"),t.max=i})(Xm||(Xm={}))});var gk={};hr(gk,{DefaultNameRegexp:()=>mk,RangeComparison:()=>Nc,compareRange:()=>pae,findCommentNode:()=>NR,findDeclarationNodeAtOffset:()=>DOe,findLeafNodeAtOffset:()=>MR,findLeafNodeBeforeOffset:()=>mae,flattenCst:()=>_Oe,getInteriorNodes:()=>NOe,getNextNode:()=>LOe,getPreviousNode:()=>yae,getStartlineNode:()=>ROe,inRange:()=>RR,isChildNode:()=>LR,isCommentNode:()=>DR,streamCst:()=>np,toDocumentSegment:()=>ip,tokenToRange:()=>jm});function np(t){return new Rc(t,e=>Nl(e)?e.content:[],{includeRoot:!0})}function _Oe(t){return np(t).filter(cf)}function LR(t,e){for(;t.container;)if(t=t.container,t===e)return!0;return!1}function jm(t){return{start:{character:t.startColumn-1,line:t.startLine-1},end:{character:t.endColumn,line:t.endLine-1}}}function ip(t){if(!t)return;let{offset:e,end:r,range:n}=t;return{range:n,offset:e,end:r,length:r-e}}function pae(t,e){if(t.end.linee.end.line||t.start.line===e.end.line&&t.start.character>=e.end.character)return Nc.After;let r=t.start.line>e.start.line||t.start.line===e.start.line&&t.start.character>=e.start.character,n=t.end.lineNc.After}function DOe(t,e,r=mk){if(t){if(e>0){let n=e-t.offset,i=t.text.charAt(n);r.test(i)||e--}return MR(t,e)}}function NR(t,e){if(t){let r=yae(t,!0);if(r&&DR(r,e))return r;if(z2(t)){let n=t.content.findIndex(i=>!i.hidden);for(let i=n-1;i>=0;i--){let a=t.content[i];if(DR(a,e))return a}}}}function DR(t,e){return cf(t)&&e.includes(t.tokenType.name)}function MR(t,e){if(cf(t))return t;if(Nl(t)){let r=gae(t,e,!1);if(r)return MR(r,e)}}function mae(t,e){if(cf(t))return t;if(Nl(t)){let r=gae(t,e,!0);if(r)return mae(r,e)}}function gae(t,e,r){let n=0,i=t.content.length-1,a;for(;n<=i;){let s=Math.floor((n+i)/2),l=t.content[s];if(l.offset<=e&&l.end>e)return l;l.end<=e?(a=r?l:void 0,n=s+1):i=s-1}return a}function yae(t,e=!0){for(;t.container;){let r=t.container,n=r.content.indexOf(t);for(;n>0;){n--;let i=r.content[n];if(e||!i.hidden)return i}t=r}}function LOe(t,e=!0){for(;t.container;){let r=t.container,n=r.content.indexOf(t),i=r.content.length-1;for(;n{"use strict";Ml();Fs();o(np,"streamCst");o(_Oe,"flattenCst");o(LR,"isChildNode");o(jm,"tokenToRange");o(ip,"toDocumentSegment");(function(t){t[t.Before=0]="Before",t[t.After=1]="After",t[t.OverlapFront=2]="OverlapFront",t[t.OverlapBack=3]="OverlapBack",t[t.Inside=4]="Inside",t[t.Outside=5]="Outside"})(Nc||(Nc={}));o(pae,"compareRange");o(RR,"inRange");mk=/^[\w\p{L}]$/u;o(DOe,"findDeclarationNodeAtOffset");o(NR,"findCommentNode");o(DR,"isCommentNode");o(MR,"findLeafNodeAtOffset");o(mae,"findLeafNodeBeforeOffset");o(gae,"binarySearch");o(yae,"getPreviousNode");o(LOe,"getNextNode");o(ROe,"getStartlineNode");o(NOe,"getInteriorNodes");o(MOe,"getCommonParent");o(dae,"getParentChain")});function Mc(t){throw new Error("Error! The input value was not handled.")}var ap,yk=N(()=>{"use strict";ap=class extends Error{static{o(this,"ErrorWithLocation")}constructor(e,r){super(e?`${r} at ${e.range.start.line}:${e.range.start.character}`:r)}};o(Mc,"assertUnreachable")});var K2={};hr(K2,{AbstractElement:()=>Zm,AbstractRule:()=>Km,AbstractType:()=>Qm,Action:()=>yg,Alternatives:()=>vg,ArrayLiteral:()=>Jm,ArrayType:()=>eg,Assignment:()=>xg,BooleanLiteral:()=>tg,CharacterRange:()=>bg,Condition:()=>V2,Conjunction:()=>rg,CrossReference:()=>wg,Disjunction:()=>ng,EndOfFile:()=>Tg,Grammar:()=>ig,GrammarImport:()=>H2,Group:()=>kg,InferredType:()=>ag,Interface:()=>sg,Keyword:()=>Eg,LangiumGrammarAstReflection:()=>Ig,LangiumGrammarTerminals:()=>IOe,NamedArgument:()=>W2,NegatedToken:()=>Sg,Negation:()=>og,NumberLiteral:()=>lg,Parameter:()=>cg,ParameterReference:()=>ug,ParserRule:()=>hg,ReferenceType:()=>fg,RegexToken:()=>Cg,ReturnType:()=>q2,RuleCall:()=>Ag,SimpleType:()=>dg,StringLiteral:()=>pg,TerminalAlternatives:()=>_g,TerminalGroup:()=>Dg,TerminalRule:()=>sp,TerminalRuleCall:()=>Lg,Type:()=>mg,TypeAttribute:()=>Y2,TypeDefinition:()=>vk,UnionType:()=>gg,UnorderedGroup:()=>Rg,UntilToken:()=>Ng,ValueLiteral:()=>U2,Wildcard:()=>Mg,isAbstractElement:()=>X2,isAbstractRule:()=>OOe,isAbstractType:()=>POe,isAction:()=>Bu,isAlternatives:()=>Tk,isArrayLiteral:()=>GOe,isArrayType:()=>IR,isAssignment:()=>Ol,isBooleanLiteral:()=>OR,isCharacterRange:()=>UR,isCondition:()=>BOe,isConjunction:()=>PR,isCrossReference:()=>op,isDisjunction:()=>BR,isEndOfFile:()=>HR,isFeatureName:()=>FOe,isGrammar:()=>VOe,isGrammarImport:()=>UOe,isGroup:()=>uf,isInferredType:()=>xk,isInterface:()=>bk,isKeyword:()=>Wo,isNamedArgument:()=>HOe,isNegatedToken:()=>WR,isNegation:()=>FR,isNumberLiteral:()=>WOe,isParameter:()=>qOe,isParameterReference:()=>$R,isParserRule:()=>Oa,isPrimitiveType:()=>vae,isReferenceType:()=>zR,isRegexToken:()=>qR,isReturnType:()=>GR,isRuleCall:()=>Pl,isSimpleType:()=>wk,isStringLiteral:()=>YOe,isTerminalAlternatives:()=>YR,isTerminalGroup:()=>XR,isTerminalRule:()=>lo,isTerminalRuleCall:()=>kk,isType:()=>j2,isTypeAttribute:()=>XOe,isTypeDefinition:()=>$Oe,isUnionType:()=>VR,isUnorderedGroup:()=>Ek,isUntilToken:()=>jR,isValueLiteral:()=>zOe,isWildcard:()=>KR,reflection:()=>cr});function OOe(t){return cr.isInstance(t,Km)}function POe(t){return cr.isInstance(t,Qm)}function BOe(t){return cr.isInstance(t,V2)}function FOe(t){return vae(t)||t==="current"||t==="entry"||t==="extends"||t==="false"||t==="fragment"||t==="grammar"||t==="hidden"||t==="import"||t==="interface"||t==="returns"||t==="terminal"||t==="true"||t==="type"||t==="infer"||t==="infers"||t==="with"||typeof t=="string"&&/\^?[_a-zA-Z][\w_]*/.test(t)}function vae(t){return t==="string"||t==="number"||t==="boolean"||t==="Date"||t==="bigint"}function $Oe(t){return cr.isInstance(t,vk)}function zOe(t){return cr.isInstance(t,U2)}function X2(t){return cr.isInstance(t,Zm)}function GOe(t){return cr.isInstance(t,Jm)}function IR(t){return cr.isInstance(t,eg)}function OR(t){return cr.isInstance(t,tg)}function PR(t){return cr.isInstance(t,rg)}function BR(t){return cr.isInstance(t,ng)}function VOe(t){return cr.isInstance(t,ig)}function UOe(t){return cr.isInstance(t,H2)}function xk(t){return cr.isInstance(t,ag)}function bk(t){return cr.isInstance(t,sg)}function HOe(t){return cr.isInstance(t,W2)}function FR(t){return cr.isInstance(t,og)}function WOe(t){return cr.isInstance(t,lg)}function qOe(t){return cr.isInstance(t,cg)}function $R(t){return cr.isInstance(t,ug)}function Oa(t){return cr.isInstance(t,hg)}function zR(t){return cr.isInstance(t,fg)}function GR(t){return cr.isInstance(t,q2)}function wk(t){return cr.isInstance(t,dg)}function YOe(t){return cr.isInstance(t,pg)}function lo(t){return cr.isInstance(t,sp)}function j2(t){return cr.isInstance(t,mg)}function XOe(t){return cr.isInstance(t,Y2)}function VR(t){return cr.isInstance(t,gg)}function Bu(t){return cr.isInstance(t,yg)}function Tk(t){return cr.isInstance(t,vg)}function Ol(t){return cr.isInstance(t,xg)}function UR(t){return cr.isInstance(t,bg)}function op(t){return cr.isInstance(t,wg)}function HR(t){return cr.isInstance(t,Tg)}function uf(t){return cr.isInstance(t,kg)}function Wo(t){return cr.isInstance(t,Eg)}function WR(t){return cr.isInstance(t,Sg)}function qR(t){return cr.isInstance(t,Cg)}function Pl(t){return cr.isInstance(t,Ag)}function YR(t){return cr.isInstance(t,_g)}function XR(t){return cr.isInstance(t,Dg)}function kk(t){return cr.isInstance(t,Lg)}function Ek(t){return cr.isInstance(t,Rg)}function jR(t){return cr.isInstance(t,Ng)}function KR(t){return cr.isInstance(t,Mg)}var IOe,Km,Qm,V2,vk,U2,Zm,Jm,eg,tg,rg,ng,ig,H2,ag,sg,W2,og,lg,cg,ug,hg,fg,q2,dg,pg,sp,mg,Y2,gg,yg,vg,xg,bg,wg,Tg,kg,Eg,Sg,Cg,Ag,_g,Dg,Lg,Rg,Ng,Mg,Ig,cr,Ic=N(()=>{"use strict";Ml();IOe={ID:/\^?[_a-zA-Z][\w_]*/,STRING:/"(\\.|[^"\\])*"|'(\\.|[^'\\])*'/,NUMBER:/NaN|-?((\d*\.\d+|\d+)([Ee][+-]?\d+)?|Infinity)/,RegexLiteral:/\/(?![*+?])(?:[^\r\n\[/\\]|\\.|\[(?:[^\r\n\]\\]|\\.)*\])+\/[a-z]*/,WS:/\s+/,ML_COMMENT:/\/\*[\s\S]*?\*\//,SL_COMMENT:/\/\/[^\n\r]*/},Km="AbstractRule";o(OOe,"isAbstractRule");Qm="AbstractType";o(POe,"isAbstractType");V2="Condition";o(BOe,"isCondition");o(FOe,"isFeatureName");o(vae,"isPrimitiveType");vk="TypeDefinition";o($Oe,"isTypeDefinition");U2="ValueLiteral";o(zOe,"isValueLiteral");Zm="AbstractElement";o(X2,"isAbstractElement");Jm="ArrayLiteral";o(GOe,"isArrayLiteral");eg="ArrayType";o(IR,"isArrayType");tg="BooleanLiteral";o(OR,"isBooleanLiteral");rg="Conjunction";o(PR,"isConjunction");ng="Disjunction";o(BR,"isDisjunction");ig="Grammar";o(VOe,"isGrammar");H2="GrammarImport";o(UOe,"isGrammarImport");ag="InferredType";o(xk,"isInferredType");sg="Interface";o(bk,"isInterface");W2="NamedArgument";o(HOe,"isNamedArgument");og="Negation";o(FR,"isNegation");lg="NumberLiteral";o(WOe,"isNumberLiteral");cg="Parameter";o(qOe,"isParameter");ug="ParameterReference";o($R,"isParameterReference");hg="ParserRule";o(Oa,"isParserRule");fg="ReferenceType";o(zR,"isReferenceType");q2="ReturnType";o(GR,"isReturnType");dg="SimpleType";o(wk,"isSimpleType");pg="StringLiteral";o(YOe,"isStringLiteral");sp="TerminalRule";o(lo,"isTerminalRule");mg="Type";o(j2,"isType");Y2="TypeAttribute";o(XOe,"isTypeAttribute");gg="UnionType";o(VR,"isUnionType");yg="Action";o(Bu,"isAction");vg="Alternatives";o(Tk,"isAlternatives");xg="Assignment";o(Ol,"isAssignment");bg="CharacterRange";o(UR,"isCharacterRange");wg="CrossReference";o(op,"isCrossReference");Tg="EndOfFile";o(HR,"isEndOfFile");kg="Group";o(uf,"isGroup");Eg="Keyword";o(Wo,"isKeyword");Sg="NegatedToken";o(WR,"isNegatedToken");Cg="RegexToken";o(qR,"isRegexToken");Ag="RuleCall";o(Pl,"isRuleCall");_g="TerminalAlternatives";o(YR,"isTerminalAlternatives");Dg="TerminalGroup";o(XR,"isTerminalGroup");Lg="TerminalRuleCall";o(kk,"isTerminalRuleCall");Rg="UnorderedGroup";o(Ek,"isUnorderedGroup");Ng="UntilToken";o(jR,"isUntilToken");Mg="Wildcard";o(KR,"isWildcard");Ig=class extends tp{static{o(this,"LangiumGrammarAstReflection")}getAllTypes(){return[Zm,Km,Qm,yg,vg,Jm,eg,xg,tg,bg,V2,rg,wg,ng,Tg,ig,H2,kg,ag,sg,Eg,W2,Sg,og,lg,cg,ug,hg,fg,Cg,q2,Ag,dg,pg,_g,Dg,sp,Lg,mg,Y2,vk,gg,Rg,Ng,U2,Mg]}computeIsSubtype(e,r){switch(e){case yg:case vg:case xg:case bg:case wg:case Tg:case kg:case Eg:case Sg:case Cg:case Ag:case _g:case Dg:case Lg:case Rg:case Ng:case Mg:return this.isSubtype(Zm,r);case Jm:case lg:case pg:return this.isSubtype(U2,r);case eg:case fg:case dg:case gg:return this.isSubtype(vk,r);case tg:return this.isSubtype(V2,r)||this.isSubtype(U2,r);case rg:case ng:case og:case ug:return this.isSubtype(V2,r);case ag:case sg:case mg:return this.isSubtype(Qm,r);case hg:return this.isSubtype(Km,r)||this.isSubtype(Qm,r);case sp:return this.isSubtype(Km,r);default:return!1}}getReferenceType(e){let r=`${e.container.$type}:${e.property}`;switch(r){case"Action:type":case"CrossReference:type":case"Interface:superTypes":case"ParserRule:returnType":case"SimpleType:typeRef":return Qm;case"Grammar:hiddenTokens":case"ParserRule:hiddenTokens":case"RuleCall:rule":return Km;case"Grammar:usedGrammars":return ig;case"NamedArgument:parameter":case"ParameterReference:parameter":return cg;case"TerminalRuleCall:rule":return sp;default:throw new Error(`${r} is not a valid reference id.`)}}getTypeMetaData(e){switch(e){case Zm:return{name:Zm,properties:[{name:"cardinality"},{name:"lookahead"}]};case Jm:return{name:Jm,properties:[{name:"elements",defaultValue:[]}]};case eg:return{name:eg,properties:[{name:"elementType"}]};case tg:return{name:tg,properties:[{name:"true",defaultValue:!1}]};case rg:return{name:rg,properties:[{name:"left"},{name:"right"}]};case ng:return{name:ng,properties:[{name:"left"},{name:"right"}]};case ig:return{name:ig,properties:[{name:"definesHiddenTokens",defaultValue:!1},{name:"hiddenTokens",defaultValue:[]},{name:"imports",defaultValue:[]},{name:"interfaces",defaultValue:[]},{name:"isDeclared",defaultValue:!1},{name:"name"},{name:"rules",defaultValue:[]},{name:"types",defaultValue:[]},{name:"usedGrammars",defaultValue:[]}]};case H2:return{name:H2,properties:[{name:"path"}]};case ag:return{name:ag,properties:[{name:"name"}]};case sg:return{name:sg,properties:[{name:"attributes",defaultValue:[]},{name:"name"},{name:"superTypes",defaultValue:[]}]};case W2:return{name:W2,properties:[{name:"calledByName",defaultValue:!1},{name:"parameter"},{name:"value"}]};case og:return{name:og,properties:[{name:"value"}]};case lg:return{name:lg,properties:[{name:"value"}]};case cg:return{name:cg,properties:[{name:"name"}]};case ug:return{name:ug,properties:[{name:"parameter"}]};case hg:return{name:hg,properties:[{name:"dataType"},{name:"definesHiddenTokens",defaultValue:!1},{name:"definition"},{name:"entry",defaultValue:!1},{name:"fragment",defaultValue:!1},{name:"hiddenTokens",defaultValue:[]},{name:"inferredType"},{name:"name"},{name:"parameters",defaultValue:[]},{name:"returnType"},{name:"wildcard",defaultValue:!1}]};case fg:return{name:fg,properties:[{name:"referenceType"}]};case q2:return{name:q2,properties:[{name:"name"}]};case dg:return{name:dg,properties:[{name:"primitiveType"},{name:"stringType"},{name:"typeRef"}]};case pg:return{name:pg,properties:[{name:"value"}]};case sp:return{name:sp,properties:[{name:"definition"},{name:"fragment",defaultValue:!1},{name:"hidden",defaultValue:!1},{name:"name"},{name:"type"}]};case mg:return{name:mg,properties:[{name:"name"},{name:"type"}]};case Y2:return{name:Y2,properties:[{name:"defaultValue"},{name:"isOptional",defaultValue:!1},{name:"name"},{name:"type"}]};case gg:return{name:gg,properties:[{name:"types",defaultValue:[]}]};case yg:return{name:yg,properties:[{name:"cardinality"},{name:"feature"},{name:"inferredType"},{name:"lookahead"},{name:"operator"},{name:"type"}]};case vg:return{name:vg,properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case xg:return{name:xg,properties:[{name:"cardinality"},{name:"feature"},{name:"lookahead"},{name:"operator"},{name:"terminal"}]};case bg:return{name:bg,properties:[{name:"cardinality"},{name:"left"},{name:"lookahead"},{name:"right"}]};case wg:return{name:wg,properties:[{name:"cardinality"},{name:"deprecatedSyntax",defaultValue:!1},{name:"lookahead"},{name:"terminal"},{name:"type"}]};case Tg:return{name:Tg,properties:[{name:"cardinality"},{name:"lookahead"}]};case kg:return{name:kg,properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"guardCondition"},{name:"lookahead"}]};case Eg:return{name:Eg,properties:[{name:"cardinality"},{name:"lookahead"},{name:"value"}]};case Sg:return{name:Sg,properties:[{name:"cardinality"},{name:"lookahead"},{name:"terminal"}]};case Cg:return{name:Cg,properties:[{name:"cardinality"},{name:"lookahead"},{name:"regex"}]};case Ag:return{name:Ag,properties:[{name:"arguments",defaultValue:[]},{name:"cardinality"},{name:"lookahead"},{name:"rule"}]};case _g:return{name:_g,properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case Dg:return{name:Dg,properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case Lg:return{name:Lg,properties:[{name:"cardinality"},{name:"lookahead"},{name:"rule"}]};case Rg:return{name:Rg,properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case Ng:return{name:Ng,properties:[{name:"cardinality"},{name:"lookahead"},{name:"terminal"}]};case Mg:return{name:Mg,properties:[{name:"cardinality"},{name:"lookahead"}]};default:return{name:e,properties:[]}}}},cr=new Ig});var Ck={};hr(Ck,{assignMandatoryProperties:()=>JR,copyAstNode:()=>ZR,findLocalReferences:()=>KOe,findRootNode:()=>Q2,getContainerOfType:()=>lp,getDocument:()=>Pa,hasContainerOfType:()=>jOe,linkContentToContainer:()=>Sk,streamAllContents:()=>Oc,streamAst:()=>qo,streamContents:()=>Z2,streamReferences:()=>Og});function Sk(t){for(let[e,r]of Object.entries(t))e.startsWith("$")||(Array.isArray(r)?r.forEach((n,i)=>{ii(n)&&(n.$container=t,n.$containerProperty=e,n.$containerIndex=i)}):ii(r)&&(r.$container=t,r.$containerProperty=e))}function lp(t,e){let r=t;for(;r;){if(e(r))return r;r=r.$container}}function jOe(t,e){let r=t;for(;r;){if(e(r))return!0;r=r.$container}return!1}function Pa(t){let r=Q2(t).$document;if(!r)throw new Error("AST node has no document.");return r}function Q2(t){for(;t.$container;)t=t.$container;return t}function Z2(t,e){if(!t)throw new Error("Node must be an AstNode.");let r=e?.range;return new oo(()=>({keys:Object.keys(t),keyIndex:0,arrayIndex:0}),n=>{for(;n.keyIndexZ2(r,e))}function qo(t,e){if(t){if(e?.range&&!QR(t,e.range))return new Rc(t,()=>[])}else throw new Error("Root node must be an AstNode.");return new Rc(t,r=>Z2(r,e),{includeRoot:!0})}function QR(t,e){var r;if(!e)return!0;let n=(r=t.$cstNode)===null||r===void 0?void 0:r.range;return n?RR(n,e):!1}function Og(t){return new oo(()=>({keys:Object.keys(t),keyIndex:0,arrayIndex:0}),e=>{for(;e.keyIndex{Og(n).forEach(i=>{i.reference.ref===t&&r.push(i.reference)})}),en(r)}function JR(t,e){let r=t.getTypeMetaData(e.$type),n=e;for(let i of r.properties)i.defaultValue!==void 0&&n[i.name]===void 0&&(n[i.name]=xae(i.defaultValue))}function xae(t){return Array.isArray(t)?[...t.map(xae)]:t}function ZR(t,e){let r={$type:t.$type};for(let[n,i]of Object.entries(t))if(!n.startsWith("$"))if(ii(i))r[n]=ZR(i,e);else if(va(i))r[n]=e(r,n,i.$refNode,i.$refText);else if(Array.isArray(i)){let a=[];for(let s of i)ii(s)?a.push(ZR(s,e)):va(s)?a.push(e(r,n,s.$refNode,s.$refText)):a.push(s);r[n]=a}else r[n]=i;return Sk(r),r}var is=N(()=>{"use strict";Ml();Fs();Il();o(Sk,"linkContentToContainer");o(lp,"getContainerOfType");o(jOe,"hasContainerOfType");o(Pa,"getDocument");o(Q2,"findRootNode");o(Z2,"streamContents");o(Oc,"streamAllContents");o(qo,"streamAst");o(QR,"isAstNodeInRange");o(Og,"streamReferences");o(KOe,"findLocalReferences");o(JR,"assignMandatoryProperties");o(xae,"copyDefaultValue");o(ZR,"copyAstNode")});function ar(t){return t.charCodeAt(0)}function Ak(t,e){Array.isArray(t)?t.forEach(function(r){e.push(r)}):e.push(t)}function Pg(t,e){if(t[e]===!0)throw"duplicate flag "+e;let r=t[e];t[e]=!0}function cp(t){if(t===void 0)throw Error("Internal Error - Should never get here!");return!0}function J2(){throw Error("Internal Error - Should never get here!")}function eN(t){return t.type==="Character"}var tN=N(()=>{"use strict";o(ar,"cc");o(Ak,"insertToSet");o(Pg,"addFlag");o(cp,"ASSERT_EXISTS");o(J2,"ASSERT_NEVER_REACH_HERE");o(eN,"isCharacter")});var ex,tx,rN,bae=N(()=>{"use strict";tN();ex=[];for(let t=ar("0");t<=ar("9");t++)ex.push(t);tx=[ar("_")].concat(ex);for(let t=ar("a");t<=ar("z");t++)tx.push(t);for(let t=ar("A");t<=ar("Z");t++)tx.push(t);rN=[ar(" "),ar("\f"),ar(` -`),ar("\r"),ar(" "),ar("\v"),ar(" "),ar("\xA0"),ar("\u1680"),ar("\u2000"),ar("\u2001"),ar("\u2002"),ar("\u2003"),ar("\u2004"),ar("\u2005"),ar("\u2006"),ar("\u2007"),ar("\u2008"),ar("\u2009"),ar("\u200A"),ar("\u2028"),ar("\u2029"),ar("\u202F"),ar("\u205F"),ar("\u3000"),ar("\uFEFF")]});var QOe,_k,ZOe,up,wae=N(()=>{"use strict";tN();bae();QOe=/[0-9a-fA-F]/,_k=/[0-9]/,ZOe=/[1-9]/,up=class{static{o(this,"RegExpParser")}constructor(){this.idx=0,this.input="",this.groupIdx=0}saveState(){return{idx:this.idx,input:this.input,groupIdx:this.groupIdx}}restoreState(e){this.idx=e.idx,this.input=e.input,this.groupIdx=e.groupIdx}pattern(e){this.idx=0,this.input=e,this.groupIdx=0,this.consumeChar("/");let r=this.disjunction();this.consumeChar("/");let n={type:"Flags",loc:{begin:this.idx,end:e.length},global:!1,ignoreCase:!1,multiLine:!1,unicode:!1,sticky:!1};for(;this.isRegExpFlag();)switch(this.popChar()){case"g":Pg(n,"global");break;case"i":Pg(n,"ignoreCase");break;case"m":Pg(n,"multiLine");break;case"u":Pg(n,"unicode");break;case"y":Pg(n,"sticky");break}if(this.idx!==this.input.length)throw Error("Redundant input: "+this.input.substring(this.idx));return{type:"Pattern",flags:n,value:r,loc:this.loc(0)}}disjunction(){let e=[],r=this.idx;for(e.push(this.alternative());this.peekChar()==="|";)this.consumeChar("|"),e.push(this.alternative());return{type:"Disjunction",value:e,loc:this.loc(r)}}alternative(){let e=[],r=this.idx;for(;this.isTerm();)e.push(this.term());return{type:"Alternative",value:e,loc:this.loc(r)}}term(){return this.isAssertion()?this.assertion():this.atom()}assertion(){let e=this.idx;switch(this.popChar()){case"^":return{type:"StartAnchor",loc:this.loc(e)};case"$":return{type:"EndAnchor",loc:this.loc(e)};case"\\":switch(this.popChar()){case"b":return{type:"WordBoundary",loc:this.loc(e)};case"B":return{type:"NonWordBoundary",loc:this.loc(e)}}throw Error("Invalid Assertion Escape");case"(":this.consumeChar("?");let r;switch(this.popChar()){case"=":r="Lookahead";break;case"!":r="NegativeLookahead";break}cp(r);let n=this.disjunction();return this.consumeChar(")"),{type:r,value:n,loc:this.loc(e)}}return J2()}quantifier(e=!1){let r,n=this.idx;switch(this.popChar()){case"*":r={atLeast:0,atMost:1/0};break;case"+":r={atLeast:1,atMost:1/0};break;case"?":r={atLeast:0,atMost:1};break;case"{":let i=this.integerIncludingZero();switch(this.popChar()){case"}":r={atLeast:i,atMost:i};break;case",":let a;this.isDigit()?(a=this.integerIncludingZero(),r={atLeast:i,atMost:a}):r={atLeast:i,atMost:1/0},this.consumeChar("}");break}if(e===!0&&r===void 0)return;cp(r);break}if(!(e===!0&&r===void 0)&&cp(r))return this.peekChar(0)==="?"?(this.consumeChar("?"),r.greedy=!1):r.greedy=!0,r.type="Quantifier",r.loc=this.loc(n),r}atom(){let e,r=this.idx;switch(this.peekChar()){case".":e=this.dotAll();break;case"\\":e=this.atomEscape();break;case"[":e=this.characterClass();break;case"(":e=this.group();break}return e===void 0&&this.isPatternCharacter()&&(e=this.patternCharacter()),cp(e)?(e.loc=this.loc(r),this.isQuantifier()&&(e.quantifier=this.quantifier()),e):J2()}dotAll(){return this.consumeChar("."),{type:"Set",complement:!0,value:[ar(` -`),ar("\r"),ar("\u2028"),ar("\u2029")]}}atomEscape(){switch(this.consumeChar("\\"),this.peekChar()){case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":return this.decimalEscapeAtom();case"d":case"D":case"s":case"S":case"w":case"W":return this.characterClassEscape();case"f":case"n":case"r":case"t":case"v":return this.controlEscapeAtom();case"c":return this.controlLetterEscapeAtom();case"0":return this.nulCharacterAtom();case"x":return this.hexEscapeSequenceAtom();case"u":return this.regExpUnicodeEscapeSequenceAtom();default:return this.identityEscapeAtom()}}decimalEscapeAtom(){return{type:"GroupBackReference",value:this.positiveInteger()}}characterClassEscape(){let e,r=!1;switch(this.popChar()){case"d":e=ex;break;case"D":e=ex,r=!0;break;case"s":e=rN;break;case"S":e=rN,r=!0;break;case"w":e=tx;break;case"W":e=tx,r=!0;break}return cp(e)?{type:"Set",value:e,complement:r}:J2()}controlEscapeAtom(){let e;switch(this.popChar()){case"f":e=ar("\f");break;case"n":e=ar(` -`);break;case"r":e=ar("\r");break;case"t":e=ar(" ");break;case"v":e=ar("\v");break}return cp(e)?{type:"Character",value:e}:J2()}controlLetterEscapeAtom(){this.consumeChar("c");let e=this.popChar();if(/[a-zA-Z]/.test(e)===!1)throw Error("Invalid ");return{type:"Character",value:e.toUpperCase().charCodeAt(0)-64}}nulCharacterAtom(){return this.consumeChar("0"),{type:"Character",value:ar("\0")}}hexEscapeSequenceAtom(){return this.consumeChar("x"),this.parseHexDigits(2)}regExpUnicodeEscapeSequenceAtom(){return this.consumeChar("u"),this.parseHexDigits(4)}identityEscapeAtom(){let e=this.popChar();return{type:"Character",value:ar(e)}}classPatternCharacterAtom(){switch(this.peekChar()){case` -`:case"\r":case"\u2028":case"\u2029":case"\\":case"]":throw Error("TBD");default:let e=this.popChar();return{type:"Character",value:ar(e)}}}characterClass(){let e=[],r=!1;for(this.consumeChar("["),this.peekChar(0)==="^"&&(this.consumeChar("^"),r=!0);this.isClassAtom();){let n=this.classAtom(),i=n.type==="Character";if(eN(n)&&this.isRangeDash()){this.consumeChar("-");let a=this.classAtom(),s=a.type==="Character";if(eN(a)){if(a.valuetBe});var tBe,Tse=N(()=>{"use strict";mse();gse();yse();xse();tBe={parser:pse,get db(){return new Tk},renderer:aN,styles:vse}});function si(t){return typeof t=="object"&&t!==null&&typeof t.$type=="string"}function ya(t){return typeof t=="object"&&t!==null&&typeof t.$refText=="string"}function sN(t){return typeof t=="object"&&t!==null&&typeof t.name=="string"&&typeof t.type=="string"&&typeof t.path=="string"}function ap(t){return typeof t=="object"&&t!==null&&si(t.container)&&ya(t.reference)&&typeof t.message=="string"}function Ml(t){return typeof t=="object"&&t!==null&&Array.isArray(t.content)}function hf(t){return typeof t=="object"&&t!==null&&typeof t.tokenType=="object"}function U2(t){return Ml(t)&&typeof t.fullText=="string"}var ip,Il=N(()=>{"use strict";o(si,"isAstNode");o(ya,"isReference");o(sN,"isAstNodeDescription");o(ap,"isLinkingError");ip=class{static{o(this,"AbstractAstReflection")}constructor(){this.subtypes={},this.allSubtypes={}}isInstance(e,r){return si(e)&&this.isSubtype(e.$type,r)}isSubtype(e,r){if(e===r)return!0;let n=this.subtypes[e];n||(n=this.subtypes[e]={});let i=n[r];if(i!==void 0)return i;{let a=this.computeIsSubtype(e,r);return n[r]=a,a}}getAllSubTypes(e){let r=this.allSubtypes[e];if(r)return r;{let n=this.getAllTypes(),i=[];for(let a of n)this.isSubtype(a,e)&&i.push(a);return this.allSubtypes[e]=i,i}}};o(Ml,"isCompositeCstNode");o(hf,"isLeafCstNode");o(U2,"isRootCstNode")});function aBe(t){return typeof t=="string"?t:typeof t>"u"?"undefined":typeof t.toString=="function"?t.toString():Object.prototype.toString.call(t)}function wk(t){return!!t&&typeof t[Symbol.iterator]=="function"}function en(...t){if(t.length===1){let e=t[0];if(e instanceof co)return e;if(wk(e))return new co(()=>e[Symbol.iterator](),r=>r.next());if(typeof e.length=="number")return new co(()=>({index:0}),r=>r.index1?new co(()=>({collIndex:0,arrIndex:0}),e=>{do{if(e.iterator){let r=e.iterator.next();if(!r.done)return r;e.iterator=void 0}if(e.array){if(e.arrIndex{"use strict";co=class t{static{o(this,"StreamImpl")}constructor(e,r){this.startFn=e,this.nextFn=r}iterator(){let e={state:this.startFn(),next:o(()=>this.nextFn(e.state),"next"),[Symbol.iterator]:()=>e};return e}[Symbol.iterator](){return this.iterator()}isEmpty(){return!!this.iterator().next().done}count(){let e=this.iterator(),r=0,n=e.next();for(;!n.done;)r++,n=e.next();return r}toArray(){let e=[],r=this.iterator(),n;do n=r.next(),n.value!==void 0&&e.push(n.value);while(!n.done);return e}toSet(){return new Set(this)}toMap(e,r){let n=this.map(i=>[e?e(i):i,r?r(i):i]);return new Map(n)}toString(){return this.join()}concat(e){return new t(()=>({first:this.startFn(),firstDone:!1,iterator:e[Symbol.iterator]()}),r=>{let n;if(!r.firstDone){do if(n=this.nextFn(r.first),!n.done)return n;while(!n.done);r.firstDone=!0}do if(n=r.iterator.next(),!n.done)return n;while(!n.done);return Ba})}join(e=","){let r=this.iterator(),n="",i,a=!1;do i=r.next(),i.done||(a&&(n+=e),n+=aBe(i.value)),a=!0;while(!i.done);return n}indexOf(e,r=0){let n=this.iterator(),i=0,a=n.next();for(;!a.done;){if(i>=r&&a.value===e)return i;a=n.next(),i++}return-1}every(e){let r=this.iterator(),n=r.next();for(;!n.done;){if(!e(n.value))return!1;n=r.next()}return!0}some(e){let r=this.iterator(),n=r.next();for(;!n.done;){if(e(n.value))return!0;n=r.next()}return!1}forEach(e){let r=this.iterator(),n=0,i=r.next();for(;!i.done;)e(i.value,n),i=r.next(),n++}map(e){return new t(this.startFn,r=>{let{done:n,value:i}=this.nextFn(r);return n?Ba:{done:!1,value:e(i)}})}filter(e){return new t(this.startFn,r=>{let n;do if(n=this.nextFn(r),!n.done&&e(n.value))return n;while(!n.done);return Ba})}nonNullable(){return this.filter(e=>e!=null)}reduce(e,r){let n=this.iterator(),i=r,a=n.next();for(;!a.done;)i===void 0?i=a.value:i=e(i,a.value),a=n.next();return i}reduceRight(e,r){return this.recursiveReduce(this.iterator(),e,r)}recursiveReduce(e,r,n){let i=e.next();if(i.done)return n;let a=this.recursiveReduce(e,r,n);return a===void 0?i.value:r(a,i.value)}find(e){let r=this.iterator(),n=r.next();for(;!n.done;){if(e(n.value))return n.value;n=r.next()}}findIndex(e){let r=this.iterator(),n=0,i=r.next();for(;!i.done;){if(e(i.value))return n;i=r.next(),n++}return-1}includes(e){let r=this.iterator(),n=r.next();for(;!n.done;){if(n.value===e)return!0;n=r.next()}return!1}flatMap(e){return new t(()=>({this:this.startFn()}),r=>{do{if(r.iterator){let a=r.iterator.next();if(a.done)r.iterator=void 0;else return a}let{done:n,value:i}=this.nextFn(r.this);if(!n){let a=e(i);if(wk(a))r.iterator=a[Symbol.iterator]();else return{done:!1,value:a}}}while(r.iterator);return Ba})}flat(e){if(e===void 0&&(e=1),e<=0)return this;let r=e>1?this.flat(e-1):this;return new t(()=>({this:r.startFn()}),n=>{do{if(n.iterator){let s=n.iterator.next();if(s.done)n.iterator=void 0;else return s}let{done:i,value:a}=r.nextFn(n.this);if(!i)if(wk(a))n.iterator=a[Symbol.iterator]();else return{done:!1,value:a}}while(n.iterator);return Ba})}head(){let r=this.iterator().next();if(!r.done)return r.value}tail(e=1){return new t(()=>{let r=this.startFn();for(let n=0;n({size:0,state:this.startFn()}),r=>(r.size++,r.size>e?Ba:this.nextFn(r.state)))}distinct(e){return new t(()=>({set:new Set,internalState:this.startFn()}),r=>{let n;do if(n=this.nextFn(r.internalState),!n.done){let i=e?e(n.value):n.value;if(!r.set.has(i))return r.set.add(i),n}while(!n.done);return Ba})}exclude(e,r){let n=new Set;for(let i of e){let a=r?r(i):i;n.add(a)}return this.filter(i=>{let a=r?r(i):i;return!n.has(a)})}};o(aBe,"toString");o(wk,"isIterable");H2=new co(()=>{},()=>Ba),Ba=Object.freeze({done:!0,value:void 0});o(en,"stream");Mc=class extends co{static{o(this,"TreeStreamImpl")}constructor(e,r,n){super(()=>({iterators:n?.includeRoot?[[e][Symbol.iterator]()]:[r(e)[Symbol.iterator]()],pruned:!1}),i=>{for(i.pruned&&(i.iterators.pop(),i.pruned=!1);i.iterators.length>0;){let s=i.iterators[i.iterators.length-1].next();if(s.done)i.iterators.pop();else return i.iterators.push(r(s.value)[Symbol.iterator]()),s}return Ba})}iterator(){let e={state:this.startFn(),next:o(()=>this.nextFn(e.state),"next"),prune:o(()=>{e.state.pruned=!0},"prune"),[Symbol.iterator]:()=>e};return e}};(function(t){function e(a){return a.reduce((s,l)=>s+l,0)}o(e,"sum"),t.sum=e;function r(a){return a.reduce((s,l)=>s*l,0)}o(r,"product"),t.product=r;function n(a){return a.reduce((s,l)=>Math.min(s,l))}o(n,"min"),t.min=n;function i(a){return a.reduce((s,l)=>Math.max(s,l))}o(i,"max"),t.max=i})(jm||(jm={}))});var Ek={};ur(Ek,{DefaultNameRegexp:()=>kk,RangeComparison:()=>Ic,compareRange:()=>Sse,findCommentNode:()=>uN,findDeclarationNodeAtOffset:()=>oBe,findLeafNodeAtOffset:()=>hN,findLeafNodeBeforeOffset:()=>Cse,flattenCst:()=>sBe,getInteriorNodes:()=>uBe,getNextNode:()=>lBe,getPreviousNode:()=>_se,getStartlineNode:()=>cBe,inRange:()=>cN,isChildNode:()=>lN,isCommentNode:()=>oN,streamCst:()=>sp,toDocumentSegment:()=>op,tokenToRange:()=>Km});function sp(t){return new Mc(t,e=>Ml(e)?e.content:[],{includeRoot:!0})}function sBe(t){return sp(t).filter(hf)}function lN(t,e){for(;t.container;)if(t=t.container,t===e)return!0;return!1}function Km(t){return{start:{character:t.startColumn-1,line:t.startLine-1},end:{character:t.endColumn,line:t.endLine-1}}}function op(t){if(!t)return;let{offset:e,end:r,range:n}=t;return{range:n,offset:e,end:r,length:r-e}}function Sse(t,e){if(t.end.linee.end.line||t.start.line===e.end.line&&t.start.character>=e.end.character)return Ic.After;let r=t.start.line>e.start.line||t.start.line===e.start.line&&t.start.character>=e.start.character,n=t.end.lineIc.After}function oBe(t,e,r=kk){if(t){if(e>0){let n=e-t.offset,i=t.text.charAt(n);r.test(i)||e--}return hN(t,e)}}function uN(t,e){if(t){let r=_se(t,!0);if(r&&oN(r,e))return r;if(U2(t)){let n=t.content.findIndex(i=>!i.hidden);for(let i=n-1;i>=0;i--){let a=t.content[i];if(oN(a,e))return a}}}}function oN(t,e){return hf(t)&&e.includes(t.tokenType.name)}function hN(t,e){if(hf(t))return t;if(Ml(t)){let r=Ase(t,e,!1);if(r)return hN(r,e)}}function Cse(t,e){if(hf(t))return t;if(Ml(t)){let r=Ase(t,e,!0);if(r)return Cse(r,e)}}function Ase(t,e,r){let n=0,i=t.content.length-1,a;for(;n<=i;){let s=Math.floor((n+i)/2),l=t.content[s];if(l.offset<=e&&l.end>e)return l;l.end<=e?(a=r?l:void 0,n=s+1):i=s-1}return a}function _se(t,e=!0){for(;t.container;){let r=t.container,n=r.content.indexOf(t);for(;n>0;){n--;let i=r.content[n];if(e||!i.hidden)return i}t=r}}function lBe(t,e=!0){for(;t.container;){let r=t.container,n=r.content.indexOf(t),i=r.content.length-1;for(;n{"use strict";Il();Gs();o(sp,"streamCst");o(sBe,"flattenCst");o(lN,"isChildNode");o(Km,"tokenToRange");o(op,"toDocumentSegment");(function(t){t[t.Before=0]="Before",t[t.After=1]="After",t[t.OverlapFront=2]="OverlapFront",t[t.OverlapBack=3]="OverlapBack",t[t.Inside=4]="Inside",t[t.Outside=5]="Outside"})(Ic||(Ic={}));o(Sse,"compareRange");o(cN,"inRange");kk=/^[\w\p{L}]$/u;o(oBe,"findDeclarationNodeAtOffset");o(uN,"findCommentNode");o(oN,"isCommentNode");o(hN,"findLeafNodeAtOffset");o(Cse,"findLeafNodeBeforeOffset");o(Ase,"binarySearch");o(_se,"getPreviousNode");o(lBe,"getNextNode");o(cBe,"getStartlineNode");o(uBe,"getInteriorNodes");o(hBe,"getCommonParent");o(Ese,"getParentChain")});function Oc(t){throw new Error("Error! The input value was not handled.")}var lp,Sk=N(()=>{"use strict";lp=class extends Error{static{o(this,"ErrorWithLocation")}constructor(e,r){super(e?`${r} at ${e.range.start.line}:${e.range.start.character}`:r)}};o(Oc,"assertUnreachable")});var J2={};ur(J2,{AbstractElement:()=>Jm,AbstractRule:()=>Qm,AbstractType:()=>Zm,Action:()=>vg,Alternatives:()=>xg,ArrayLiteral:()=>eg,ArrayType:()=>tg,Assignment:()=>bg,BooleanLiteral:()=>rg,CharacterRange:()=>Tg,Condition:()=>W2,Conjunction:()=>ng,CrossReference:()=>wg,Disjunction:()=>ig,EndOfFile:()=>kg,Grammar:()=>ag,GrammarImport:()=>Y2,Group:()=>Eg,InferredType:()=>sg,Interface:()=>og,Keyword:()=>Sg,LangiumGrammarAstReflection:()=>Og,LangiumGrammarTerminals:()=>fBe,NamedArgument:()=>X2,NegatedToken:()=>Cg,Negation:()=>lg,NumberLiteral:()=>cg,Parameter:()=>ug,ParameterReference:()=>hg,ParserRule:()=>fg,ReferenceType:()=>dg,RegexToken:()=>Ag,ReturnType:()=>j2,RuleCall:()=>_g,SimpleType:()=>pg,StringLiteral:()=>mg,TerminalAlternatives:()=>Dg,TerminalGroup:()=>Lg,TerminalRule:()=>cp,TerminalRuleCall:()=>Rg,Type:()=>gg,TypeAttribute:()=>K2,TypeDefinition:()=>Ck,UnionType:()=>yg,UnorderedGroup:()=>Ng,UntilToken:()=>Mg,ValueLiteral:()=>q2,Wildcard:()=>Ig,isAbstractElement:()=>Q2,isAbstractRule:()=>dBe,isAbstractType:()=>pBe,isAction:()=>$u,isAlternatives:()=>Lk,isArrayLiteral:()=>xBe,isArrayType:()=>fN,isAssignment:()=>Pl,isBooleanLiteral:()=>dN,isCharacterRange:()=>TN,isCondition:()=>mBe,isConjunction:()=>pN,isCrossReference:()=>up,isDisjunction:()=>mN,isEndOfFile:()=>wN,isFeatureName:()=>gBe,isGrammar:()=>bBe,isGrammarImport:()=>TBe,isGroup:()=>ff,isInferredType:()=>Ak,isInterface:()=>_k,isKeyword:()=>Xo,isNamedArgument:()=>wBe,isNegatedToken:()=>kN,isNegation:()=>gN,isNumberLiteral:()=>kBe,isParameter:()=>EBe,isParameterReference:()=>yN,isParserRule:()=>Fa,isPrimitiveType:()=>Dse,isReferenceType:()=>vN,isRegexToken:()=>EN,isReturnType:()=>xN,isRuleCall:()=>Bl,isSimpleType:()=>Dk,isStringLiteral:()=>SBe,isTerminalAlternatives:()=>SN,isTerminalGroup:()=>CN,isTerminalRule:()=>uo,isTerminalRuleCall:()=>Rk,isType:()=>Z2,isTypeAttribute:()=>CBe,isTypeDefinition:()=>yBe,isUnionType:()=>bN,isUnorderedGroup:()=>Nk,isUntilToken:()=>AN,isValueLiteral:()=>vBe,isWildcard:()=>_N,reflection:()=>cr});function dBe(t){return cr.isInstance(t,Qm)}function pBe(t){return cr.isInstance(t,Zm)}function mBe(t){return cr.isInstance(t,W2)}function gBe(t){return Dse(t)||t==="current"||t==="entry"||t==="extends"||t==="false"||t==="fragment"||t==="grammar"||t==="hidden"||t==="import"||t==="interface"||t==="returns"||t==="terminal"||t==="true"||t==="type"||t==="infer"||t==="infers"||t==="with"||typeof t=="string"&&/\^?[_a-zA-Z][\w_]*/.test(t)}function Dse(t){return t==="string"||t==="number"||t==="boolean"||t==="Date"||t==="bigint"}function yBe(t){return cr.isInstance(t,Ck)}function vBe(t){return cr.isInstance(t,q2)}function Q2(t){return cr.isInstance(t,Jm)}function xBe(t){return cr.isInstance(t,eg)}function fN(t){return cr.isInstance(t,tg)}function dN(t){return cr.isInstance(t,rg)}function pN(t){return cr.isInstance(t,ng)}function mN(t){return cr.isInstance(t,ig)}function bBe(t){return cr.isInstance(t,ag)}function TBe(t){return cr.isInstance(t,Y2)}function Ak(t){return cr.isInstance(t,sg)}function _k(t){return cr.isInstance(t,og)}function wBe(t){return cr.isInstance(t,X2)}function gN(t){return cr.isInstance(t,lg)}function kBe(t){return cr.isInstance(t,cg)}function EBe(t){return cr.isInstance(t,ug)}function yN(t){return cr.isInstance(t,hg)}function Fa(t){return cr.isInstance(t,fg)}function vN(t){return cr.isInstance(t,dg)}function xN(t){return cr.isInstance(t,j2)}function Dk(t){return cr.isInstance(t,pg)}function SBe(t){return cr.isInstance(t,mg)}function uo(t){return cr.isInstance(t,cp)}function Z2(t){return cr.isInstance(t,gg)}function CBe(t){return cr.isInstance(t,K2)}function bN(t){return cr.isInstance(t,yg)}function $u(t){return cr.isInstance(t,vg)}function Lk(t){return cr.isInstance(t,xg)}function Pl(t){return cr.isInstance(t,bg)}function TN(t){return cr.isInstance(t,Tg)}function up(t){return cr.isInstance(t,wg)}function wN(t){return cr.isInstance(t,kg)}function ff(t){return cr.isInstance(t,Eg)}function Xo(t){return cr.isInstance(t,Sg)}function kN(t){return cr.isInstance(t,Cg)}function EN(t){return cr.isInstance(t,Ag)}function Bl(t){return cr.isInstance(t,_g)}function SN(t){return cr.isInstance(t,Dg)}function CN(t){return cr.isInstance(t,Lg)}function Rk(t){return cr.isInstance(t,Rg)}function Nk(t){return cr.isInstance(t,Ng)}function AN(t){return cr.isInstance(t,Mg)}function _N(t){return cr.isInstance(t,Ig)}var fBe,Qm,Zm,W2,Ck,q2,Jm,eg,tg,rg,ng,ig,ag,Y2,sg,og,X2,lg,cg,ug,hg,fg,dg,j2,pg,mg,cp,gg,K2,yg,vg,xg,bg,Tg,wg,kg,Eg,Sg,Cg,Ag,_g,Dg,Lg,Rg,Ng,Mg,Ig,Og,cr,Pc=N(()=>{"use strict";Il();fBe={ID:/\^?[_a-zA-Z][\w_]*/,STRING:/"(\\.|[^"\\])*"|'(\\.|[^'\\])*'/,NUMBER:/NaN|-?((\d*\.\d+|\d+)([Ee][+-]?\d+)?|Infinity)/,RegexLiteral:/\/(?![*+?])(?:[^\r\n\[/\\]|\\.|\[(?:[^\r\n\]\\]|\\.)*\])+\/[a-z]*/,WS:/\s+/,ML_COMMENT:/\/\*[\s\S]*?\*\//,SL_COMMENT:/\/\/[^\n\r]*/},Qm="AbstractRule";o(dBe,"isAbstractRule");Zm="AbstractType";o(pBe,"isAbstractType");W2="Condition";o(mBe,"isCondition");o(gBe,"isFeatureName");o(Dse,"isPrimitiveType");Ck="TypeDefinition";o(yBe,"isTypeDefinition");q2="ValueLiteral";o(vBe,"isValueLiteral");Jm="AbstractElement";o(Q2,"isAbstractElement");eg="ArrayLiteral";o(xBe,"isArrayLiteral");tg="ArrayType";o(fN,"isArrayType");rg="BooleanLiteral";o(dN,"isBooleanLiteral");ng="Conjunction";o(pN,"isConjunction");ig="Disjunction";o(mN,"isDisjunction");ag="Grammar";o(bBe,"isGrammar");Y2="GrammarImport";o(TBe,"isGrammarImport");sg="InferredType";o(Ak,"isInferredType");og="Interface";o(_k,"isInterface");X2="NamedArgument";o(wBe,"isNamedArgument");lg="Negation";o(gN,"isNegation");cg="NumberLiteral";o(kBe,"isNumberLiteral");ug="Parameter";o(EBe,"isParameter");hg="ParameterReference";o(yN,"isParameterReference");fg="ParserRule";o(Fa,"isParserRule");dg="ReferenceType";o(vN,"isReferenceType");j2="ReturnType";o(xN,"isReturnType");pg="SimpleType";o(Dk,"isSimpleType");mg="StringLiteral";o(SBe,"isStringLiteral");cp="TerminalRule";o(uo,"isTerminalRule");gg="Type";o(Z2,"isType");K2="TypeAttribute";o(CBe,"isTypeAttribute");yg="UnionType";o(bN,"isUnionType");vg="Action";o($u,"isAction");xg="Alternatives";o(Lk,"isAlternatives");bg="Assignment";o(Pl,"isAssignment");Tg="CharacterRange";o(TN,"isCharacterRange");wg="CrossReference";o(up,"isCrossReference");kg="EndOfFile";o(wN,"isEndOfFile");Eg="Group";o(ff,"isGroup");Sg="Keyword";o(Xo,"isKeyword");Cg="NegatedToken";o(kN,"isNegatedToken");Ag="RegexToken";o(EN,"isRegexToken");_g="RuleCall";o(Bl,"isRuleCall");Dg="TerminalAlternatives";o(SN,"isTerminalAlternatives");Lg="TerminalGroup";o(CN,"isTerminalGroup");Rg="TerminalRuleCall";o(Rk,"isTerminalRuleCall");Ng="UnorderedGroup";o(Nk,"isUnorderedGroup");Mg="UntilToken";o(AN,"isUntilToken");Ig="Wildcard";o(_N,"isWildcard");Og=class extends ip{static{o(this,"LangiumGrammarAstReflection")}getAllTypes(){return[Jm,Qm,Zm,vg,xg,eg,tg,bg,rg,Tg,W2,ng,wg,ig,kg,ag,Y2,Eg,sg,og,Sg,X2,Cg,lg,cg,ug,hg,fg,dg,Ag,j2,_g,pg,mg,Dg,Lg,cp,Rg,gg,K2,Ck,yg,Ng,Mg,q2,Ig]}computeIsSubtype(e,r){switch(e){case vg:case xg:case bg:case Tg:case wg:case kg:case Eg:case Sg:case Cg:case Ag:case _g:case Dg:case Lg:case Rg:case Ng:case Mg:case Ig:return this.isSubtype(Jm,r);case eg:case cg:case mg:return this.isSubtype(q2,r);case tg:case dg:case pg:case yg:return this.isSubtype(Ck,r);case rg:return this.isSubtype(W2,r)||this.isSubtype(q2,r);case ng:case ig:case lg:case hg:return this.isSubtype(W2,r);case sg:case og:case gg:return this.isSubtype(Zm,r);case fg:return this.isSubtype(Qm,r)||this.isSubtype(Zm,r);case cp:return this.isSubtype(Qm,r);default:return!1}}getReferenceType(e){let r=`${e.container.$type}:${e.property}`;switch(r){case"Action:type":case"CrossReference:type":case"Interface:superTypes":case"ParserRule:returnType":case"SimpleType:typeRef":return Zm;case"Grammar:hiddenTokens":case"ParserRule:hiddenTokens":case"RuleCall:rule":return Qm;case"Grammar:usedGrammars":return ag;case"NamedArgument:parameter":case"ParameterReference:parameter":return ug;case"TerminalRuleCall:rule":return cp;default:throw new Error(`${r} is not a valid reference id.`)}}getTypeMetaData(e){switch(e){case Jm:return{name:Jm,properties:[{name:"cardinality"},{name:"lookahead"}]};case eg:return{name:eg,properties:[{name:"elements",defaultValue:[]}]};case tg:return{name:tg,properties:[{name:"elementType"}]};case rg:return{name:rg,properties:[{name:"true",defaultValue:!1}]};case ng:return{name:ng,properties:[{name:"left"},{name:"right"}]};case ig:return{name:ig,properties:[{name:"left"},{name:"right"}]};case ag:return{name:ag,properties:[{name:"definesHiddenTokens",defaultValue:!1},{name:"hiddenTokens",defaultValue:[]},{name:"imports",defaultValue:[]},{name:"interfaces",defaultValue:[]},{name:"isDeclared",defaultValue:!1},{name:"name"},{name:"rules",defaultValue:[]},{name:"types",defaultValue:[]},{name:"usedGrammars",defaultValue:[]}]};case Y2:return{name:Y2,properties:[{name:"path"}]};case sg:return{name:sg,properties:[{name:"name"}]};case og:return{name:og,properties:[{name:"attributes",defaultValue:[]},{name:"name"},{name:"superTypes",defaultValue:[]}]};case X2:return{name:X2,properties:[{name:"calledByName",defaultValue:!1},{name:"parameter"},{name:"value"}]};case lg:return{name:lg,properties:[{name:"value"}]};case cg:return{name:cg,properties:[{name:"value"}]};case ug:return{name:ug,properties:[{name:"name"}]};case hg:return{name:hg,properties:[{name:"parameter"}]};case fg:return{name:fg,properties:[{name:"dataType"},{name:"definesHiddenTokens",defaultValue:!1},{name:"definition"},{name:"entry",defaultValue:!1},{name:"fragment",defaultValue:!1},{name:"hiddenTokens",defaultValue:[]},{name:"inferredType"},{name:"name"},{name:"parameters",defaultValue:[]},{name:"returnType"},{name:"wildcard",defaultValue:!1}]};case dg:return{name:dg,properties:[{name:"referenceType"}]};case j2:return{name:j2,properties:[{name:"name"}]};case pg:return{name:pg,properties:[{name:"primitiveType"},{name:"stringType"},{name:"typeRef"}]};case mg:return{name:mg,properties:[{name:"value"}]};case cp:return{name:cp,properties:[{name:"definition"},{name:"fragment",defaultValue:!1},{name:"hidden",defaultValue:!1},{name:"name"},{name:"type"}]};case gg:return{name:gg,properties:[{name:"name"},{name:"type"}]};case K2:return{name:K2,properties:[{name:"defaultValue"},{name:"isOptional",defaultValue:!1},{name:"name"},{name:"type"}]};case yg:return{name:yg,properties:[{name:"types",defaultValue:[]}]};case vg:return{name:vg,properties:[{name:"cardinality"},{name:"feature"},{name:"inferredType"},{name:"lookahead"},{name:"operator"},{name:"type"}]};case xg:return{name:xg,properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case bg:return{name:bg,properties:[{name:"cardinality"},{name:"feature"},{name:"lookahead"},{name:"operator"},{name:"terminal"}]};case Tg:return{name:Tg,properties:[{name:"cardinality"},{name:"left"},{name:"lookahead"},{name:"right"}]};case wg:return{name:wg,properties:[{name:"cardinality"},{name:"deprecatedSyntax",defaultValue:!1},{name:"lookahead"},{name:"terminal"},{name:"type"}]};case kg:return{name:kg,properties:[{name:"cardinality"},{name:"lookahead"}]};case Eg:return{name:Eg,properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"guardCondition"},{name:"lookahead"}]};case Sg:return{name:Sg,properties:[{name:"cardinality"},{name:"lookahead"},{name:"value"}]};case Cg:return{name:Cg,properties:[{name:"cardinality"},{name:"lookahead"},{name:"terminal"}]};case Ag:return{name:Ag,properties:[{name:"cardinality"},{name:"lookahead"},{name:"regex"}]};case _g:return{name:_g,properties:[{name:"arguments",defaultValue:[]},{name:"cardinality"},{name:"lookahead"},{name:"rule"}]};case Dg:return{name:Dg,properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case Lg:return{name:Lg,properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case Rg:return{name:Rg,properties:[{name:"cardinality"},{name:"lookahead"},{name:"rule"}]};case Ng:return{name:Ng,properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case Mg:return{name:Mg,properties:[{name:"cardinality"},{name:"lookahead"},{name:"terminal"}]};case Ig:return{name:Ig,properties:[{name:"cardinality"},{name:"lookahead"}]};default:return{name:e,properties:[]}}}},cr=new Og});var Ik={};ur(Ik,{assignMandatoryProperties:()=>RN,copyAstNode:()=>LN,findLocalReferences:()=>_Be,findRootNode:()=>ex,getContainerOfType:()=>hp,getDocument:()=>$a,hasContainerOfType:()=>ABe,linkContentToContainer:()=>Mk,streamAllContents:()=>Bc,streamAst:()=>jo,streamContents:()=>tx,streamReferences:()=>Pg});function Mk(t){for(let[e,r]of Object.entries(t))e.startsWith("$")||(Array.isArray(r)?r.forEach((n,i)=>{si(n)&&(n.$container=t,n.$containerProperty=e,n.$containerIndex=i)}):si(r)&&(r.$container=t,r.$containerProperty=e))}function hp(t,e){let r=t;for(;r;){if(e(r))return r;r=r.$container}}function ABe(t,e){let r=t;for(;r;){if(e(r))return!0;r=r.$container}return!1}function $a(t){let r=ex(t).$document;if(!r)throw new Error("AST node has no document.");return r}function ex(t){for(;t.$container;)t=t.$container;return t}function tx(t,e){if(!t)throw new Error("Node must be an AstNode.");let r=e?.range;return new co(()=>({keys:Object.keys(t),keyIndex:0,arrayIndex:0}),n=>{for(;n.keyIndextx(r,e))}function jo(t,e){if(t){if(e?.range&&!DN(t,e.range))return new Mc(t,()=>[])}else throw new Error("Root node must be an AstNode.");return new Mc(t,r=>tx(r,e),{includeRoot:!0})}function DN(t,e){var r;if(!e)return!0;let n=(r=t.$cstNode)===null||r===void 0?void 0:r.range;return n?cN(n,e):!1}function Pg(t){return new co(()=>({keys:Object.keys(t),keyIndex:0,arrayIndex:0}),e=>{for(;e.keyIndex{Pg(n).forEach(i=>{i.reference.ref===t&&r.push(i.reference)})}),en(r)}function RN(t,e){let r=t.getTypeMetaData(e.$type),n=e;for(let i of r.properties)i.defaultValue!==void 0&&n[i.name]===void 0&&(n[i.name]=Lse(i.defaultValue))}function Lse(t){return Array.isArray(t)?[...t.map(Lse)]:t}function LN(t,e){let r={$type:t.$type};for(let[n,i]of Object.entries(t))if(!n.startsWith("$"))if(si(i))r[n]=LN(i,e);else if(ya(i))r[n]=e(r,n,i.$refNode,i.$refText);else if(Array.isArray(i)){let a=[];for(let s of i)si(s)?a.push(LN(s,e)):ya(s)?a.push(e(r,n,s.$refNode,s.$refText)):a.push(s);r[n]=a}else r[n]=i;return Mk(r),r}var cs=N(()=>{"use strict";Il();Gs();Ol();o(Mk,"linkContentToContainer");o(hp,"getContainerOfType");o(ABe,"hasContainerOfType");o($a,"getDocument");o(ex,"findRootNode");o(tx,"streamContents");o(Bc,"streamAllContents");o(jo,"streamAst");o(DN,"isAstNodeInRange");o(Pg,"streamReferences");o(_Be,"findLocalReferences");o(RN,"assignMandatoryProperties");o(Lse,"copyDefaultValue");o(LN,"copyAstNode")});function sr(t){return t.charCodeAt(0)}function Ok(t,e){Array.isArray(t)?t.forEach(function(r){e.push(r)}):e.push(t)}function Bg(t,e){if(t[e]===!0)throw"duplicate flag "+e;let r=t[e];t[e]=!0}function fp(t){if(t===void 0)throw Error("Internal Error - Should never get here!");return!0}function rx(){throw Error("Internal Error - Should never get here!")}function NN(t){return t.type==="Character"}var MN=N(()=>{"use strict";o(sr,"cc");o(Ok,"insertToSet");o(Bg,"addFlag");o(fp,"ASSERT_EXISTS");o(rx,"ASSERT_NEVER_REACH_HERE");o(NN,"isCharacter")});var nx,ix,IN,Rse=N(()=>{"use strict";MN();nx=[];for(let t=sr("0");t<=sr("9");t++)nx.push(t);ix=[sr("_")].concat(nx);for(let t=sr("a");t<=sr("z");t++)ix.push(t);for(let t=sr("A");t<=sr("Z");t++)ix.push(t);IN=[sr(" "),sr("\f"),sr(` +`),sr("\r"),sr(" "),sr("\v"),sr(" "),sr("\xA0"),sr("\u1680"),sr("\u2000"),sr("\u2001"),sr("\u2002"),sr("\u2003"),sr("\u2004"),sr("\u2005"),sr("\u2006"),sr("\u2007"),sr("\u2008"),sr("\u2009"),sr("\u200A"),sr("\u2028"),sr("\u2029"),sr("\u202F"),sr("\u205F"),sr("\u3000"),sr("\uFEFF")]});var DBe,Pk,LBe,dp,Nse=N(()=>{"use strict";MN();Rse();DBe=/[0-9a-fA-F]/,Pk=/[0-9]/,LBe=/[1-9]/,dp=class{static{o(this,"RegExpParser")}constructor(){this.idx=0,this.input="",this.groupIdx=0}saveState(){return{idx:this.idx,input:this.input,groupIdx:this.groupIdx}}restoreState(e){this.idx=e.idx,this.input=e.input,this.groupIdx=e.groupIdx}pattern(e){this.idx=0,this.input=e,this.groupIdx=0,this.consumeChar("/");let r=this.disjunction();this.consumeChar("/");let n={type:"Flags",loc:{begin:this.idx,end:e.length},global:!1,ignoreCase:!1,multiLine:!1,unicode:!1,sticky:!1};for(;this.isRegExpFlag();)switch(this.popChar()){case"g":Bg(n,"global");break;case"i":Bg(n,"ignoreCase");break;case"m":Bg(n,"multiLine");break;case"u":Bg(n,"unicode");break;case"y":Bg(n,"sticky");break}if(this.idx!==this.input.length)throw Error("Redundant input: "+this.input.substring(this.idx));return{type:"Pattern",flags:n,value:r,loc:this.loc(0)}}disjunction(){let e=[],r=this.idx;for(e.push(this.alternative());this.peekChar()==="|";)this.consumeChar("|"),e.push(this.alternative());return{type:"Disjunction",value:e,loc:this.loc(r)}}alternative(){let e=[],r=this.idx;for(;this.isTerm();)e.push(this.term());return{type:"Alternative",value:e,loc:this.loc(r)}}term(){return this.isAssertion()?this.assertion():this.atom()}assertion(){let e=this.idx;switch(this.popChar()){case"^":return{type:"StartAnchor",loc:this.loc(e)};case"$":return{type:"EndAnchor",loc:this.loc(e)};case"\\":switch(this.popChar()){case"b":return{type:"WordBoundary",loc:this.loc(e)};case"B":return{type:"NonWordBoundary",loc:this.loc(e)}}throw Error("Invalid Assertion Escape");case"(":this.consumeChar("?");let r;switch(this.popChar()){case"=":r="Lookahead";break;case"!":r="NegativeLookahead";break}fp(r);let n=this.disjunction();return this.consumeChar(")"),{type:r,value:n,loc:this.loc(e)}}return rx()}quantifier(e=!1){let r,n=this.idx;switch(this.popChar()){case"*":r={atLeast:0,atMost:1/0};break;case"+":r={atLeast:1,atMost:1/0};break;case"?":r={atLeast:0,atMost:1};break;case"{":let i=this.integerIncludingZero();switch(this.popChar()){case"}":r={atLeast:i,atMost:i};break;case",":let a;this.isDigit()?(a=this.integerIncludingZero(),r={atLeast:i,atMost:a}):r={atLeast:i,atMost:1/0},this.consumeChar("}");break}if(e===!0&&r===void 0)return;fp(r);break}if(!(e===!0&&r===void 0)&&fp(r))return this.peekChar(0)==="?"?(this.consumeChar("?"),r.greedy=!1):r.greedy=!0,r.type="Quantifier",r.loc=this.loc(n),r}atom(){let e,r=this.idx;switch(this.peekChar()){case".":e=this.dotAll();break;case"\\":e=this.atomEscape();break;case"[":e=this.characterClass();break;case"(":e=this.group();break}return e===void 0&&this.isPatternCharacter()&&(e=this.patternCharacter()),fp(e)?(e.loc=this.loc(r),this.isQuantifier()&&(e.quantifier=this.quantifier()),e):rx()}dotAll(){return this.consumeChar("."),{type:"Set",complement:!0,value:[sr(` +`),sr("\r"),sr("\u2028"),sr("\u2029")]}}atomEscape(){switch(this.consumeChar("\\"),this.peekChar()){case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":return this.decimalEscapeAtom();case"d":case"D":case"s":case"S":case"w":case"W":return this.characterClassEscape();case"f":case"n":case"r":case"t":case"v":return this.controlEscapeAtom();case"c":return this.controlLetterEscapeAtom();case"0":return this.nulCharacterAtom();case"x":return this.hexEscapeSequenceAtom();case"u":return this.regExpUnicodeEscapeSequenceAtom();default:return this.identityEscapeAtom()}}decimalEscapeAtom(){return{type:"GroupBackReference",value:this.positiveInteger()}}characterClassEscape(){let e,r=!1;switch(this.popChar()){case"d":e=nx;break;case"D":e=nx,r=!0;break;case"s":e=IN;break;case"S":e=IN,r=!0;break;case"w":e=ix;break;case"W":e=ix,r=!0;break}return fp(e)?{type:"Set",value:e,complement:r}:rx()}controlEscapeAtom(){let e;switch(this.popChar()){case"f":e=sr("\f");break;case"n":e=sr(` +`);break;case"r":e=sr("\r");break;case"t":e=sr(" ");break;case"v":e=sr("\v");break}return fp(e)?{type:"Character",value:e}:rx()}controlLetterEscapeAtom(){this.consumeChar("c");let e=this.popChar();if(/[a-zA-Z]/.test(e)===!1)throw Error("Invalid ");return{type:"Character",value:e.toUpperCase().charCodeAt(0)-64}}nulCharacterAtom(){return this.consumeChar("0"),{type:"Character",value:sr("\0")}}hexEscapeSequenceAtom(){return this.consumeChar("x"),this.parseHexDigits(2)}regExpUnicodeEscapeSequenceAtom(){return this.consumeChar("u"),this.parseHexDigits(4)}identityEscapeAtom(){let e=this.popChar();return{type:"Character",value:sr(e)}}classPatternCharacterAtom(){switch(this.peekChar()){case` +`:case"\r":case"\u2028":case"\u2029":case"\\":case"]":throw Error("TBD");default:let e=this.popChar();return{type:"Character",value:sr(e)}}}characterClass(){let e=[],r=!1;for(this.consumeChar("["),this.peekChar(0)==="^"&&(this.consumeChar("^"),r=!0);this.isClassAtom();){let n=this.classAtom(),i=n.type==="Character";if(NN(n)&&this.isRangeDash()){this.consumeChar("-");let a=this.classAtom(),s=a.type==="Character";if(NN(a)){if(a.value=this.input.length)throw Error("Unexpected end of input");this.idx++}loc(e){return{begin:e,end:this.idx}}}});var Pc,Tae=N(()=>{"use strict";Pc=class{static{o(this,"BaseRegExpVisitor")}visitChildren(e){for(let r in e){let n=e[r];e.hasOwnProperty(r)&&(n.type!==void 0?this.visit(n):Array.isArray(n)&&n.forEach(i=>{this.visit(i)},this))}}visit(e){switch(e.type){case"Pattern":this.visitPattern(e);break;case"Flags":this.visitFlags(e);break;case"Disjunction":this.visitDisjunction(e);break;case"Alternative":this.visitAlternative(e);break;case"StartAnchor":this.visitStartAnchor(e);break;case"EndAnchor":this.visitEndAnchor(e);break;case"WordBoundary":this.visitWordBoundary(e);break;case"NonWordBoundary":this.visitNonWordBoundary(e);break;case"Lookahead":this.visitLookahead(e);break;case"NegativeLookahead":this.visitNegativeLookahead(e);break;case"Character":this.visitCharacter(e);break;case"Set":this.visitSet(e);break;case"Group":this.visitGroup(e);break;case"GroupBackReference":this.visitGroupBackReference(e);break;case"Quantifier":this.visitQuantifier(e);break}this.visitChildren(e)}visitPattern(e){}visitFlags(e){}visitDisjunction(e){}visitAlternative(e){}visitStartAnchor(e){}visitEndAnchor(e){}visitWordBoundary(e){}visitNonWordBoundary(e){}visitLookahead(e){}visitNegativeLookahead(e){}visitCharacter(e){}visitSet(e){}visitGroup(e){}visitGroupBackReference(e){}visitQuantifier(e){}}});var rx=N(()=>{"use strict";wae();Tae()});var Dk={};hr(Dk,{NEWLINE_REGEXP:()=>iN,escapeRegExp:()=>fp,getCaseInsensitivePattern:()=>sN,getTerminalParts:()=>JOe,isMultilineComment:()=>aN,isWhitespace:()=>Bg,partialMatches:()=>oN,partialRegExp:()=>Sae,whitespaceCharacters:()=>Eae});function JOe(t){try{typeof t!="string"&&(t=t.source),t=`/${t}/`;let e=kae.pattern(t),r=[];for(let n of e.value.value)hp.reset(t),hp.visit(n),r.push({start:hp.startRegexp,end:hp.endRegex});return r}catch{return[]}}function aN(t){try{return typeof t=="string"&&(t=new RegExp(t)),t=t.toString(),hp.reset(t),hp.visit(kae.pattern(t)),hp.multiline}catch{return!1}}function Bg(t){let e=typeof t=="string"?new RegExp(t):t;return Eae.some(r=>e.test(r))}function fp(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function sN(t){return Array.prototype.map.call(t,e=>/\w/.test(e)?`[${e.toLowerCase()}${e.toUpperCase()}]`:fp(e)).join("")}function oN(t,e){let r=Sae(t),n=e.match(r);return!!n&&n[0].length>0}function Sae(t){typeof t=="string"&&(t=new RegExp(t));let e=t,r=t.source,n=0;function i(){let a="",s;function l(h){a+=r.substr(n,h),n+=h}o(l,"appendRaw");function u(h){a+="(?:"+r.substr(n,h)+"|$)",n+=h}for(o(u,"appendOptional");n",n)-n+1);break;default:u(2);break}break;case"[":s=/\[(?:\\.|.)*?\]/g,s.lastIndex=n,s=s.exec(r)||[],u(s[0].length);break;case"|":case"^":case"$":case"*":case"+":case"?":l(1);break;case"{":s=/\{\d+,?\d*\}/g,s.lastIndex=n,s=s.exec(r),s?l(s[0].length):u(1);break;case"(":if(r[n+1]==="?")switch(r[n+2]){case":":a+="(?:",n+=3,a+=i()+"|$)";break;case"=":a+="(?=",n+=3,a+=i()+")";break;case"!":s=n,n+=3,i(),a+=r.substr(s,n-s);break;case"<":switch(r[n+3]){case"=":case"!":s=n,n+=4,i(),a+=r.substr(s,n-s);break;default:l(r.indexOf(">",n)-n+1),a+=i()+"|$)";break}break}else l(1),a+=i()+"|$)";break;case")":return++n,a;default:u(1);break}return a}return o(i,"process"),new RegExp(i(),t.flags)}var iN,kae,nN,hp,Eae,Fg=N(()=>{"use strict";rx();iN=/\r?\n/gm,kae=new up,nN=class extends Pc{static{o(this,"TerminalRegExpVisitor")}constructor(){super(...arguments),this.isStarting=!0,this.endRegexpStack=[],this.multiline=!1}get endRegex(){return this.endRegexpStack.join("")}reset(e){this.multiline=!1,this.regex=e,this.startRegexp="",this.isStarting=!0,this.endRegexpStack=[]}visitGroup(e){e.quantifier&&(this.isStarting=!1,this.endRegexpStack=[])}visitCharacter(e){let r=String.fromCharCode(e.value);if(!this.multiline&&r===` -`&&(this.multiline=!0),e.quantifier)this.isStarting=!1,this.endRegexpStack=[];else{let n=fp(r);this.endRegexpStack.push(n),this.isStarting&&(this.startRegexp+=n)}}visitSet(e){if(!this.multiline){let r=this.regex.substring(e.loc.begin,e.loc.end),n=new RegExp(r);this.multiline=!!` -`.match(n)}if(e.quantifier)this.isStarting=!1,this.endRegexpStack=[];else{let r=this.regex.substring(e.loc.begin,e.loc.end);this.endRegexpStack.push(r),this.isStarting&&(this.startRegexp+=r)}}visitChildren(e){e.type==="Group"&&e.quantifier||super.visitChildren(e)}},hp=new nN;o(JOe,"getTerminalParts");o(aN,"isMultilineComment");Eae=`\f -\r \v \xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF`.split("");o(Bg,"isWhitespace");o(fp,"escapeRegExp");o(sN,"getCaseInsensitivePattern");o(oN,"partialMatches");o(Sae,"partialRegExp")});var Rk={};hr(Rk,{findAssignment:()=>gN,findNameAssignment:()=>Lk,findNodeForKeyword:()=>pN,findNodeForProperty:()=>ix,findNodesForKeyword:()=>ePe,findNodesForKeywordInternal:()=>mN,findNodesForProperty:()=>fN,getActionAtElement:()=>Lae,getActionType:()=>Nae,getAllReachableRules:()=>nx,getCrossReferenceTerminal:()=>uN,getEntryRule:()=>Cae,getExplicitRuleType:()=>$g,getHiddenRules:()=>Aae,getRuleType:()=>yN,getRuleTypeName:()=>aPe,getTypeName:()=>sx,isArrayCardinality:()=>rPe,isArrayOperator:()=>nPe,isCommentTerminal:()=>hN,isDataType:()=>iPe,isDataTypeRule:()=>ax,isOptionalCardinality:()=>tPe,terminalRegex:()=>zg});function Cae(t){return t.rules.find(e=>Oa(e)&&e.entry)}function Aae(t){return t.rules.filter(e=>lo(e)&&e.hidden)}function nx(t,e){let r=new Set,n=Cae(t);if(!n)return new Set(t.rules);let i=[n].concat(Aae(t));for(let s of i)_ae(s,r,e);let a=new Set;for(let s of t.rules)(r.has(s.name)||lo(s)&&s.hidden)&&a.add(s);return a}function _ae(t,e,r){e.add(t.name),Oc(t).forEach(n=>{if(Pl(n)||r&&kk(n)){let i=n.rule.ref;i&&!e.has(i.name)&&_ae(i,e,r)}})}function uN(t){if(t.terminal)return t.terminal;if(t.type.ref){let e=Lk(t.type.ref);return e?.terminal}}function hN(t){return t.hidden&&!Bg(zg(t))}function fN(t,e){return!t||!e?[]:dN(t,e,t.astNode,!0)}function ix(t,e,r){if(!t||!e)return;let n=dN(t,e,t.astNode,!0);if(n.length!==0)return r!==void 0?r=Math.max(0,Math.min(r,n.length-1)):r=0,n[r]}function dN(t,e,r,n){if(!n){let i=lp(t.grammarSource,Ol);if(i&&i.feature===e)return[t]}return Nl(t)&&t.astNode===r?t.content.flatMap(i=>dN(i,e,r,!1)):[]}function ePe(t,e){return t?mN(t,e,t?.astNode):[]}function pN(t,e,r){if(!t)return;let n=mN(t,e,t?.astNode);if(n.length!==0)return r!==void 0?r=Math.max(0,Math.min(r,n.length-1)):r=0,n[r]}function mN(t,e,r){if(t.astNode!==r)return[];if(Wo(t.grammarSource)&&t.grammarSource.value===e)return[t];let n=np(t).iterator(),i,a=[];do if(i=n.next(),!i.done){let s=i.value;s.astNode===r?Wo(s.grammarSource)&&s.grammarSource.value===e&&a.push(s):n.prune()}while(!i.done);return a}function gN(t){var e;let r=t.astNode;for(;r===((e=t.container)===null||e===void 0?void 0:e.astNode);){let n=lp(t.grammarSource,Ol);if(n)return n;t=t.container}}function Lk(t){let e=t;return xk(e)&&(Bu(e.$container)?e=e.$container.$container:Oa(e.$container)?e=e.$container:Mc(e.$container)),Dae(t,e,new Map)}function Dae(t,e,r){var n;function i(a,s){let l;return lp(a,Ol)||(l=Dae(s,s,r)),r.set(t,l),l}if(o(i,"go"),r.has(t))return r.get(t);r.set(t,void 0);for(let a of Oc(e)){if(Ol(a)&&a.feature.toLowerCase()==="name")return r.set(t,a),a;if(Pl(a)&&Oa(a.rule.ref))return i(a,a.rule.ref);if(wk(a)&&(!((n=a.typeRef)===null||n===void 0)&&n.ref))return i(a,a.typeRef.ref)}}function Lae(t){let e=t.$container;if(uf(e)){let r=e.elements,n=r.indexOf(t);for(let i=n-1;i>=0;i--){let a=r[i];if(Bu(a))return a;{let s=Oc(r[i]).find(Bu);if(s)return s}}}if(X2(e))return Lae(e)}function tPe(t,e){return t==="?"||t==="*"||uf(e)&&!!e.guardCondition}function rPe(t){return t==="*"||t==="+"}function nPe(t){return t==="+="}function ax(t){return Rae(t,new Set)}function Rae(t,e){if(e.has(t))return!0;e.add(t);for(let r of Oc(t))if(Pl(r)){if(!r.rule.ref||Oa(r.rule.ref)&&!Rae(r.rule.ref,e))return!1}else{if(Ol(r))return!1;if(Bu(r))return!1}return!!t.definition}function iPe(t){return cN(t.type,new Set)}function cN(t,e){if(e.has(t))return!0;if(e.add(t),IR(t))return!1;if(zR(t))return!1;if(VR(t))return t.types.every(r=>cN(r,e));if(wk(t)){if(t.primitiveType!==void 0)return!0;if(t.stringType!==void 0)return!0;if(t.typeRef!==void 0){let r=t.typeRef.ref;return j2(r)?cN(r.type,e):!1}else return!1}else return!1}function $g(t){if(t.inferredType)return t.inferredType.name;if(t.dataType)return t.dataType;if(t.returnType){let e=t.returnType.ref;if(e){if(Oa(e))return e.name;if(bk(e)||j2(e))return e.name}}}function sx(t){var e;if(Oa(t))return ax(t)?t.name:(e=$g(t))!==null&&e!==void 0?e:t.name;if(bk(t)||j2(t)||GR(t))return t.name;if(Bu(t)){let r=Nae(t);if(r)return r}else if(xk(t))return t.name;throw new Error("Cannot get name of Unknown Type")}function Nae(t){var e;if(t.inferredType)return t.inferredType.name;if(!((e=t.type)===null||e===void 0)&&e.ref)return sx(t.type.ref)}function aPe(t){var e,r,n;return lo(t)?(r=(e=t.type)===null||e===void 0?void 0:e.name)!==null&&r!==void 0?r:"string":ax(t)?t.name:(n=$g(t))!==null&&n!==void 0?n:t.name}function yN(t){var e,r,n;return lo(t)?(r=(e=t.type)===null||e===void 0?void 0:e.name)!==null&&r!==void 0?r:"string":(n=$g(t))!==null&&n!==void 0?n:t.name}function zg(t){let e={s:!1,i:!1,u:!1},r=Gg(t.definition,e),n=Object.entries(e).filter(([,i])=>i).map(([i])=>i).join("");return new RegExp(r,n)}function Gg(t,e){if(YR(t))return sPe(t);if(XR(t))return oPe(t);if(UR(t))return uPe(t);if(kk(t)){let r=t.rule.ref;if(!r)throw new Error("Missing rule reference.");return Fu(Gg(r.definition),{cardinality:t.cardinality,lookahead:t.lookahead})}else{if(WR(t))return cPe(t);if(jR(t))return lPe(t);if(qR(t)){let r=t.regex.lastIndexOf("/"),n=t.regex.substring(1,r),i=t.regex.substring(r+1);return e&&(e.i=i.includes("i"),e.s=i.includes("s"),e.u=i.includes("u")),Fu(n,{cardinality:t.cardinality,lookahead:t.lookahead,wrap:!1})}else{if(KR(t))return Fu(vN,{cardinality:t.cardinality,lookahead:t.lookahead});throw new Error(`Invalid terminal element: ${t?.$type}`)}}}function sPe(t){return Fu(t.elements.map(e=>Gg(e)).join("|"),{cardinality:t.cardinality,lookahead:t.lookahead})}function oPe(t){return Fu(t.elements.map(e=>Gg(e)).join(""),{cardinality:t.cardinality,lookahead:t.lookahead})}function lPe(t){return Fu(`${vN}*?${Gg(t.terminal)}`,{cardinality:t.cardinality,lookahead:t.lookahead})}function cPe(t){return Fu(`(?!${Gg(t.terminal)})${vN}*?`,{cardinality:t.cardinality,lookahead:t.lookahead})}function uPe(t){return t.right?Fu(`[${lN(t.left)}-${lN(t.right)}]`,{cardinality:t.cardinality,lookahead:t.lookahead,wrap:!1}):Fu(lN(t.left),{cardinality:t.cardinality,lookahead:t.lookahead,wrap:!1})}function lN(t){return fp(t.value)}function Fu(t,e){var r;return(e.wrap!==!1||e.lookahead)&&(t=`(${(r=e.lookahead)!==null&&r!==void 0?r:""}${t})`),e.cardinality?`${t}${e.cardinality}`:t}var vN,Bl=N(()=>{"use strict";yk();Ic();Ml();is();Il();Fg();o(Cae,"getEntryRule");o(Aae,"getHiddenRules");o(nx,"getAllReachableRules");o(_ae,"ruleDfs");o(uN,"getCrossReferenceTerminal");o(hN,"isCommentTerminal");o(fN,"findNodesForProperty");o(ix,"findNodeForProperty");o(dN,"findNodesForPropertyInternal");o(ePe,"findNodesForKeyword");o(pN,"findNodeForKeyword");o(mN,"findNodesForKeywordInternal");o(gN,"findAssignment");o(Lk,"findNameAssignment");o(Dae,"findNameAssignmentInternal");o(Lae,"getActionAtElement");o(tPe,"isOptionalCardinality");o(rPe,"isArrayCardinality");o(nPe,"isArrayOperator");o(ax,"isDataTypeRule");o(Rae,"isDataTypeRuleInternal");o(iPe,"isDataType");o(cN,"isDataTypeInternal");o($g,"getExplicitRuleType");o(sx,"getTypeName");o(Nae,"getActionType");o(aPe,"getRuleTypeName");o(yN,"getRuleType");o(zg,"terminalRegex");vN=/[\s\S]/.source;o(Gg,"abstractElementToRegex");o(sPe,"terminalAlternativesToRegex");o(oPe,"terminalGroupToRegex");o(lPe,"untilTokenToRegex");o(cPe,"negateTokenToRegex");o(uPe,"characterRangeToRegex");o(lN,"keywordToRegex");o(Fu,"withCardinality")});function xN(t){let e=[],r=t.Grammar;for(let n of r.rules)lo(n)&&hN(n)&&aN(zg(n))&&e.push(n.name);return{multilineCommentRules:e,nameRegexp:mk}}var bN=N(()=>{"use strict";Il();Bl();Fg();Ic();o(xN,"createGrammarConfig")});var wN=N(()=>{"use strict"});function Vg(t){console&&console.error&&console.error(`Error: ${t}`)}function ox(t){console&&console.warn&&console.warn(`Warning: ${t}`)}var Mae=N(()=>{"use strict";o(Vg,"PRINT_ERROR");o(ox,"PRINT_WARNING")});function lx(t){let e=new Date().getTime(),r=t();return{time:new Date().getTime()-e,value:r}}var Iae=N(()=>{"use strict";o(lx,"timer")});function cx(t){function e(){}o(e,"FakeConstructor"),e.prototype=t;let r=new e;function n(){return typeof r.bar}return o(n,"fakeAccess"),n(),n(),t;(0,eval)(t)}var Oae=N(()=>{"use strict";o(cx,"toFastProperties")});var Ug=N(()=>{"use strict";Mae();Iae();Oae()});function hPe(t){return fPe(t)?t.LABEL:t.name}function fPe(t){return xi(t.LABEL)&&t.LABEL!==""}function Nk(t){return Je(t,Hg)}function Hg(t){function e(r){return Je(r,Hg)}if(o(e,"convertDefinition"),t instanceof on){let r={type:"NonTerminal",name:t.nonTerminalName,idx:t.idx};return xi(t.label)&&(r.label=t.label),r}else{if(t instanceof Dn)return{type:"Alternative",definition:e(t.definition)};if(t instanceof ln)return{type:"Option",idx:t.idx,definition:e(t.definition)};if(t instanceof Ln)return{type:"RepetitionMandatory",idx:t.idx,definition:e(t.definition)};if(t instanceof Rn)return{type:"RepetitionMandatoryWithSeparator",idx:t.idx,separator:Hg(new kr({terminalType:t.separator})),definition:e(t.definition)};if(t instanceof wn)return{type:"RepetitionWithSeparator",idx:t.idx,separator:Hg(new kr({terminalType:t.separator})),definition:e(t.definition)};if(t instanceof Or)return{type:"Repetition",idx:t.idx,definition:e(t.definition)};if(t instanceof Tn)return{type:"Alternation",idx:t.idx,definition:e(t.definition)};if(t instanceof kr){let r={type:"Terminal",name:t.terminalType.name,label:hPe(t.terminalType),idx:t.idx};xi(t.label)&&(r.terminalLabel=t.label);let n=t.terminalType.PATTERN;return t.terminalType.PATTERN&&(r.pattern=Go(n)?n.source:n),r}else{if(t instanceof as)return{type:"Rule",name:t.name,orgText:t.orgText,definition:e(t.definition)};throw Error("non exhaustive match")}}}var co,on,as,Dn,ln,Ln,Rn,Or,wn,Tn,kr,Mk=N(()=>{"use strict";qt();o(hPe,"tokenLabel");o(fPe,"hasTokenLabel");co=class{static{o(this,"AbstractProduction")}get definition(){return this._definition}set definition(e){this._definition=e}constructor(e){this._definition=e}accept(e){e.visit(this),Ae(this.definition,r=>{r.accept(e)})}},on=class extends co{static{o(this,"NonTerminal")}constructor(e){super([]),this.idx=1,ma(this,Bs(e,r=>r!==void 0))}set definition(e){}get definition(){return this.referencedRule!==void 0?this.referencedRule.definition:[]}accept(e){e.visit(this)}},as=class extends co{static{o(this,"Rule")}constructor(e){super(e.definition),this.orgText="",ma(this,Bs(e,r=>r!==void 0))}},Dn=class extends co{static{o(this,"Alternative")}constructor(e){super(e.definition),this.ignoreAmbiguities=!1,ma(this,Bs(e,r=>r!==void 0))}},ln=class extends co{static{o(this,"Option")}constructor(e){super(e.definition),this.idx=1,ma(this,Bs(e,r=>r!==void 0))}},Ln=class extends co{static{o(this,"RepetitionMandatory")}constructor(e){super(e.definition),this.idx=1,ma(this,Bs(e,r=>r!==void 0))}},Rn=class extends co{static{o(this,"RepetitionMandatoryWithSeparator")}constructor(e){super(e.definition),this.idx=1,ma(this,Bs(e,r=>r!==void 0))}},Or=class extends co{static{o(this,"Repetition")}constructor(e){super(e.definition),this.idx=1,ma(this,Bs(e,r=>r!==void 0))}},wn=class extends co{static{o(this,"RepetitionWithSeparator")}constructor(e){super(e.definition),this.idx=1,ma(this,Bs(e,r=>r!==void 0))}},Tn=class extends co{static{o(this,"Alternation")}get definition(){return this._definition}set definition(e){this._definition=e}constructor(e){super(e.definition),this.idx=1,this.ignoreAmbiguities=!1,this.hasPredicates=!1,ma(this,Bs(e,r=>r!==void 0))}},kr=class{static{o(this,"Terminal")}constructor(e){this.idx=1,ma(this,Bs(e,r=>r!==void 0))}accept(e){e.visit(this)}};o(Nk,"serializeGrammar");o(Hg,"serializeProduction")});var ss,Pae=N(()=>{"use strict";Mk();ss=class{static{o(this,"GAstVisitor")}visit(e){let r=e;switch(r.constructor){case on:return this.visitNonTerminal(r);case Dn:return this.visitAlternative(r);case ln:return this.visitOption(r);case Ln:return this.visitRepetitionMandatory(r);case Rn:return this.visitRepetitionMandatoryWithSeparator(r);case wn:return this.visitRepetitionWithSeparator(r);case Or:return this.visitRepetition(r);case Tn:return this.visitAlternation(r);case kr:return this.visitTerminal(r);case as:return this.visitRule(r);default:throw Error("non exhaustive match")}}visitNonTerminal(e){}visitAlternative(e){}visitOption(e){}visitRepetition(e){}visitRepetitionMandatory(e){}visitRepetitionMandatoryWithSeparator(e){}visitRepetitionWithSeparator(e){}visitAlternation(e){}visitTerminal(e){}visitRule(e){}}});function TN(t){return t instanceof Dn||t instanceof ln||t instanceof Or||t instanceof Ln||t instanceof Rn||t instanceof wn||t instanceof kr||t instanceof as}function dp(t,e=[]){return t instanceof ln||t instanceof Or||t instanceof wn?!0:t instanceof Tn?I2(t.definition,n=>dp(n,e)):t instanceof on&&qn(e,t)?!1:t instanceof co?(t instanceof on&&e.push(t),Ma(t.definition,n=>dp(n,e))):!1}function kN(t){return t instanceof Tn}function $s(t){if(t instanceof on)return"SUBRULE";if(t instanceof ln)return"OPTION";if(t instanceof Tn)return"OR";if(t instanceof Ln)return"AT_LEAST_ONE";if(t instanceof Rn)return"AT_LEAST_ONE_SEP";if(t instanceof wn)return"MANY_SEP";if(t instanceof Or)return"MANY";if(t instanceof kr)return"CONSUME";throw Error("non exhaustive match")}var Bae=N(()=>{"use strict";qt();Mk();o(TN,"isSequenceProd");o(dp,"isOptionalProd");o(kN,"isBranchingProd");o($s,"getProductionDslName")});var os=N(()=>{"use strict";Mk();Pae();Bae()});function Fae(t,e,r){return[new ln({definition:[new kr({terminalType:t.separator})].concat(t.definition)})].concat(e,r)}var $u,Ik=N(()=>{"use strict";qt();os();$u=class{static{o(this,"RestWalker")}walk(e,r=[]){Ae(e.definition,(n,i)=>{let a=yi(e.definition,i+1);if(n instanceof on)this.walkProdRef(n,a,r);else if(n instanceof kr)this.walkTerminal(n,a,r);else if(n instanceof Dn)this.walkFlat(n,a,r);else if(n instanceof ln)this.walkOption(n,a,r);else if(n instanceof Ln)this.walkAtLeastOne(n,a,r);else if(n instanceof Rn)this.walkAtLeastOneSep(n,a,r);else if(n instanceof wn)this.walkManySep(n,a,r);else if(n instanceof Or)this.walkMany(n,a,r);else if(n instanceof Tn)this.walkOr(n,a,r);else throw Error("non exhaustive match")})}walkTerminal(e,r,n){}walkProdRef(e,r,n){}walkFlat(e,r,n){let i=r.concat(n);this.walk(e,i)}walkOption(e,r,n){let i=r.concat(n);this.walk(e,i)}walkAtLeastOne(e,r,n){let i=[new ln({definition:e.definition})].concat(r,n);this.walk(e,i)}walkAtLeastOneSep(e,r,n){let i=Fae(e,r,n);this.walk(e,i)}walkMany(e,r,n){let i=[new ln({definition:e.definition})].concat(r,n);this.walk(e,i)}walkManySep(e,r,n){let i=Fae(e,r,n);this.walk(e,i)}walkOr(e,r,n){let i=r.concat(n);Ae(e.definition,a=>{let s=new Dn({definition:[a]});this.walk(s,i)})}};o(Fae,"restForRepetitionWithSeparator")});function pp(t){if(t instanceof on)return pp(t.referencedRule);if(t instanceof kr)return mPe(t);if(TN(t))return dPe(t);if(kN(t))return pPe(t);throw Error("non exhaustive match")}function dPe(t){let e=[],r=t.definition,n=0,i=r.length>n,a,s=!0;for(;i&&s;)a=r[n],s=dp(a),e=e.concat(pp(a)),n=n+1,i=r.length>n;return Hm(e)}function pPe(t){let e=Je(t.definition,r=>pp(r));return Hm(qr(e))}function mPe(t){return[t.terminalType]}var EN=N(()=>{"use strict";qt();os();o(pp,"first");o(dPe,"firstForSequence");o(pPe,"firstForBranching");o(mPe,"firstForTerminal")});var Ok,SN=N(()=>{"use strict";Ok="_~IN~_"});function $ae(t){let e={};return Ae(t,r=>{let n=new CN(r).startWalking();ma(e,n)}),e}function gPe(t,e){return t.name+e+Ok}var CN,zae=N(()=>{"use strict";Ik();EN();qt();SN();os();CN=class extends $u{static{o(this,"ResyncFollowsWalker")}constructor(e){super(),this.topProd=e,this.follows={}}startWalking(){return this.walk(this.topProd),this.follows}walkTerminal(e,r,n){}walkProdRef(e,r,n){let i=gPe(e.referencedRule,e.idx)+this.topProd.name,a=r.concat(n),s=new Dn({definition:a}),l=pp(s);this.follows[i]=l}};o($ae,"computeAllProdsFollows");o(gPe,"buildBetweenProdsFollowPrefix")});function Wg(t){let e=t.toString();if(Pk.hasOwnProperty(e))return Pk[e];{let r=yPe.pattern(e);return Pk[e]=r,r}}function Gae(){Pk={}}var Pk,yPe,Bk=N(()=>{"use strict";rx();Pk={},yPe=new up;o(Wg,"getRegExpAst");o(Gae,"clearRegExpParserCache")});function Hae(t,e=!1){try{let r=Wg(t);return AN(r.value,{},r.flags.ignoreCase)}catch(r){if(r.message===Uae)e&&ox(`${ux} Unable to optimize: < ${t.toString()} > +`:case"\r":case"\u2028":case"\u2029":return!1;default:return!0}}parseHexDigits(e){let r="";for(let i=0;i=this.input.length)throw Error("Unexpected end of input");this.idx++}loc(e){return{begin:e,end:this.idx}}}});var Fc,Mse=N(()=>{"use strict";Fc=class{static{o(this,"BaseRegExpVisitor")}visitChildren(e){for(let r in e){let n=e[r];e.hasOwnProperty(r)&&(n.type!==void 0?this.visit(n):Array.isArray(n)&&n.forEach(i=>{this.visit(i)},this))}}visit(e){switch(e.type){case"Pattern":this.visitPattern(e);break;case"Flags":this.visitFlags(e);break;case"Disjunction":this.visitDisjunction(e);break;case"Alternative":this.visitAlternative(e);break;case"StartAnchor":this.visitStartAnchor(e);break;case"EndAnchor":this.visitEndAnchor(e);break;case"WordBoundary":this.visitWordBoundary(e);break;case"NonWordBoundary":this.visitNonWordBoundary(e);break;case"Lookahead":this.visitLookahead(e);break;case"NegativeLookahead":this.visitNegativeLookahead(e);break;case"Character":this.visitCharacter(e);break;case"Set":this.visitSet(e);break;case"Group":this.visitGroup(e);break;case"GroupBackReference":this.visitGroupBackReference(e);break;case"Quantifier":this.visitQuantifier(e);break}this.visitChildren(e)}visitPattern(e){}visitFlags(e){}visitDisjunction(e){}visitAlternative(e){}visitStartAnchor(e){}visitEndAnchor(e){}visitWordBoundary(e){}visitNonWordBoundary(e){}visitLookahead(e){}visitNegativeLookahead(e){}visitCharacter(e){}visitSet(e){}visitGroup(e){}visitGroupBackReference(e){}visitQuantifier(e){}}});var ax=N(()=>{"use strict";Nse();Mse()});var Bk={};ur(Bk,{NEWLINE_REGEXP:()=>PN,escapeRegExp:()=>mp,getCaseInsensitivePattern:()=>FN,getTerminalParts:()=>RBe,isMultilineComment:()=>BN,isWhitespace:()=>Fg,partialMatches:()=>$N,partialRegExp:()=>Pse,whitespaceCharacters:()=>Ose});function RBe(t){try{typeof t!="string"&&(t=t.source),t=`/${t}/`;let e=Ise.pattern(t),r=[];for(let n of e.value.value)pp.reset(t),pp.visit(n),r.push({start:pp.startRegexp,end:pp.endRegex});return r}catch{return[]}}function BN(t){try{return typeof t=="string"&&(t=new RegExp(t)),t=t.toString(),pp.reset(t),pp.visit(Ise.pattern(t)),pp.multiline}catch{return!1}}function Fg(t){let e=typeof t=="string"?new RegExp(t):t;return Ose.some(r=>e.test(r))}function mp(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function FN(t){return Array.prototype.map.call(t,e=>/\w/.test(e)?`[${e.toLowerCase()}${e.toUpperCase()}]`:mp(e)).join("")}function $N(t,e){let r=Pse(t),n=e.match(r);return!!n&&n[0].length>0}function Pse(t){typeof t=="string"&&(t=new RegExp(t));let e=t,r=t.source,n=0;function i(){let a="",s;function l(h){a+=r.substr(n,h),n+=h}o(l,"appendRaw");function u(h){a+="(?:"+r.substr(n,h)+"|$)",n+=h}for(o(u,"appendOptional");n",n)-n+1);break;default:u(2);break}break;case"[":s=/\[(?:\\.|.)*?\]/g,s.lastIndex=n,s=s.exec(r)||[],u(s[0].length);break;case"|":case"^":case"$":case"*":case"+":case"?":l(1);break;case"{":s=/\{\d+,?\d*\}/g,s.lastIndex=n,s=s.exec(r),s?l(s[0].length):u(1);break;case"(":if(r[n+1]==="?")switch(r[n+2]){case":":a+="(?:",n+=3,a+=i()+"|$)";break;case"=":a+="(?=",n+=3,a+=i()+")";break;case"!":s=n,n+=3,i(),a+=r.substr(s,n-s);break;case"<":switch(r[n+3]){case"=":case"!":s=n,n+=4,i(),a+=r.substr(s,n-s);break;default:l(r.indexOf(">",n)-n+1),a+=i()+"|$)";break}break}else l(1),a+=i()+"|$)";break;case")":return++n,a;default:u(1);break}return a}return o(i,"process"),new RegExp(i(),t.flags)}var PN,Ise,ON,pp,Ose,$g=N(()=>{"use strict";ax();PN=/\r?\n/gm,Ise=new dp,ON=class extends Fc{static{o(this,"TerminalRegExpVisitor")}constructor(){super(...arguments),this.isStarting=!0,this.endRegexpStack=[],this.multiline=!1}get endRegex(){return this.endRegexpStack.join("")}reset(e){this.multiline=!1,this.regex=e,this.startRegexp="",this.isStarting=!0,this.endRegexpStack=[]}visitGroup(e){e.quantifier&&(this.isStarting=!1,this.endRegexpStack=[])}visitCharacter(e){let r=String.fromCharCode(e.value);if(!this.multiline&&r===` +`&&(this.multiline=!0),e.quantifier)this.isStarting=!1,this.endRegexpStack=[];else{let n=mp(r);this.endRegexpStack.push(n),this.isStarting&&(this.startRegexp+=n)}}visitSet(e){if(!this.multiline){let r=this.regex.substring(e.loc.begin,e.loc.end),n=new RegExp(r);this.multiline=!!` +`.match(n)}if(e.quantifier)this.isStarting=!1,this.endRegexpStack=[];else{let r=this.regex.substring(e.loc.begin,e.loc.end);this.endRegexpStack.push(r),this.isStarting&&(this.startRegexp+=r)}}visitChildren(e){e.type==="Group"&&e.quantifier||super.visitChildren(e)}},pp=new ON;o(RBe,"getTerminalParts");o(BN,"isMultilineComment");Ose=`\f +\r \v \xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF`.split("");o(Fg,"isWhitespace");o(mp,"escapeRegExp");o(FN,"getCaseInsensitivePattern");o($N,"partialMatches");o(Pse,"partialRegExp")});var $k={};ur($k,{findAssignment:()=>XN,findNameAssignment:()=>Fk,findNodeForKeyword:()=>qN,findNodeForProperty:()=>ox,findNodesForKeyword:()=>NBe,findNodesForKeywordInternal:()=>YN,findNodesForProperty:()=>HN,getActionAtElement:()=>Gse,getActionType:()=>Use,getAllReachableRules:()=>sx,getCrossReferenceTerminal:()=>VN,getEntryRule:()=>Bse,getExplicitRuleType:()=>zg,getHiddenRules:()=>Fse,getRuleType:()=>jN,getRuleTypeName:()=>BBe,getTypeName:()=>cx,isArrayCardinality:()=>IBe,isArrayOperator:()=>OBe,isCommentTerminal:()=>UN,isDataType:()=>PBe,isDataTypeRule:()=>lx,isOptionalCardinality:()=>MBe,terminalRegex:()=>Gg});function Bse(t){return t.rules.find(e=>Fa(e)&&e.entry)}function Fse(t){return t.rules.filter(e=>uo(e)&&e.hidden)}function sx(t,e){let r=new Set,n=Bse(t);if(!n)return new Set(t.rules);let i=[n].concat(Fse(t));for(let s of i)$se(s,r,e);let a=new Set;for(let s of t.rules)(r.has(s.name)||uo(s)&&s.hidden)&&a.add(s);return a}function $se(t,e,r){e.add(t.name),Bc(t).forEach(n=>{if(Bl(n)||r&&Rk(n)){let i=n.rule.ref;i&&!e.has(i.name)&&$se(i,e,r)}})}function VN(t){if(t.terminal)return t.terminal;if(t.type.ref){let e=Fk(t.type.ref);return e?.terminal}}function UN(t){return t.hidden&&!Fg(Gg(t))}function HN(t,e){return!t||!e?[]:WN(t,e,t.astNode,!0)}function ox(t,e,r){if(!t||!e)return;let n=WN(t,e,t.astNode,!0);if(n.length!==0)return r!==void 0?r=Math.max(0,Math.min(r,n.length-1)):r=0,n[r]}function WN(t,e,r,n){if(!n){let i=hp(t.grammarSource,Pl);if(i&&i.feature===e)return[t]}return Ml(t)&&t.astNode===r?t.content.flatMap(i=>WN(i,e,r,!1)):[]}function NBe(t,e){return t?YN(t,e,t?.astNode):[]}function qN(t,e,r){if(!t)return;let n=YN(t,e,t?.astNode);if(n.length!==0)return r!==void 0?r=Math.max(0,Math.min(r,n.length-1)):r=0,n[r]}function YN(t,e,r){if(t.astNode!==r)return[];if(Xo(t.grammarSource)&&t.grammarSource.value===e)return[t];let n=sp(t).iterator(),i,a=[];do if(i=n.next(),!i.done){let s=i.value;s.astNode===r?Xo(s.grammarSource)&&s.grammarSource.value===e&&a.push(s):n.prune()}while(!i.done);return a}function XN(t){var e;let r=t.astNode;for(;r===((e=t.container)===null||e===void 0?void 0:e.astNode);){let n=hp(t.grammarSource,Pl);if(n)return n;t=t.container}}function Fk(t){let e=t;return Ak(e)&&($u(e.$container)?e=e.$container.$container:Fa(e.$container)?e=e.$container:Oc(e.$container)),zse(t,e,new Map)}function zse(t,e,r){var n;function i(a,s){let l;return hp(a,Pl)||(l=zse(s,s,r)),r.set(t,l),l}if(o(i,"go"),r.has(t))return r.get(t);r.set(t,void 0);for(let a of Bc(e)){if(Pl(a)&&a.feature.toLowerCase()==="name")return r.set(t,a),a;if(Bl(a)&&Fa(a.rule.ref))return i(a,a.rule.ref);if(Dk(a)&&(!((n=a.typeRef)===null||n===void 0)&&n.ref))return i(a,a.typeRef.ref)}}function Gse(t){let e=t.$container;if(ff(e)){let r=e.elements,n=r.indexOf(t);for(let i=n-1;i>=0;i--){let a=r[i];if($u(a))return a;{let s=Bc(r[i]).find($u);if(s)return s}}}if(Q2(e))return Gse(e)}function MBe(t,e){return t==="?"||t==="*"||ff(e)&&!!e.guardCondition}function IBe(t){return t==="*"||t==="+"}function OBe(t){return t==="+="}function lx(t){return Vse(t,new Set)}function Vse(t,e){if(e.has(t))return!0;e.add(t);for(let r of Bc(t))if(Bl(r)){if(!r.rule.ref||Fa(r.rule.ref)&&!Vse(r.rule.ref,e))return!1}else{if(Pl(r))return!1;if($u(r))return!1}return!!t.definition}function PBe(t){return GN(t.type,new Set)}function GN(t,e){if(e.has(t))return!0;if(e.add(t),fN(t))return!1;if(vN(t))return!1;if(bN(t))return t.types.every(r=>GN(r,e));if(Dk(t)){if(t.primitiveType!==void 0)return!0;if(t.stringType!==void 0)return!0;if(t.typeRef!==void 0){let r=t.typeRef.ref;return Z2(r)?GN(r.type,e):!1}else return!1}else return!1}function zg(t){if(t.inferredType)return t.inferredType.name;if(t.dataType)return t.dataType;if(t.returnType){let e=t.returnType.ref;if(e){if(Fa(e))return e.name;if(_k(e)||Z2(e))return e.name}}}function cx(t){var e;if(Fa(t))return lx(t)?t.name:(e=zg(t))!==null&&e!==void 0?e:t.name;if(_k(t)||Z2(t)||xN(t))return t.name;if($u(t)){let r=Use(t);if(r)return r}else if(Ak(t))return t.name;throw new Error("Cannot get name of Unknown Type")}function Use(t){var e;if(t.inferredType)return t.inferredType.name;if(!((e=t.type)===null||e===void 0)&&e.ref)return cx(t.type.ref)}function BBe(t){var e,r,n;return uo(t)?(r=(e=t.type)===null||e===void 0?void 0:e.name)!==null&&r!==void 0?r:"string":lx(t)?t.name:(n=zg(t))!==null&&n!==void 0?n:t.name}function jN(t){var e,r,n;return uo(t)?(r=(e=t.type)===null||e===void 0?void 0:e.name)!==null&&r!==void 0?r:"string":(n=zg(t))!==null&&n!==void 0?n:t.name}function Gg(t){let e={s:!1,i:!1,u:!1},r=Vg(t.definition,e),n=Object.entries(e).filter(([,i])=>i).map(([i])=>i).join("");return new RegExp(r,n)}function Vg(t,e){if(SN(t))return FBe(t);if(CN(t))return $Be(t);if(TN(t))return VBe(t);if(Rk(t)){let r=t.rule.ref;if(!r)throw new Error("Missing rule reference.");return zu(Vg(r.definition),{cardinality:t.cardinality,lookahead:t.lookahead})}else{if(kN(t))return GBe(t);if(AN(t))return zBe(t);if(EN(t)){let r=t.regex.lastIndexOf("/"),n=t.regex.substring(1,r),i=t.regex.substring(r+1);return e&&(e.i=i.includes("i"),e.s=i.includes("s"),e.u=i.includes("u")),zu(n,{cardinality:t.cardinality,lookahead:t.lookahead,wrap:!1})}else{if(_N(t))return zu(KN,{cardinality:t.cardinality,lookahead:t.lookahead});throw new Error(`Invalid terminal element: ${t?.$type}`)}}}function FBe(t){return zu(t.elements.map(e=>Vg(e)).join("|"),{cardinality:t.cardinality,lookahead:t.lookahead})}function $Be(t){return zu(t.elements.map(e=>Vg(e)).join(""),{cardinality:t.cardinality,lookahead:t.lookahead})}function zBe(t){return zu(`${KN}*?${Vg(t.terminal)}`,{cardinality:t.cardinality,lookahead:t.lookahead})}function GBe(t){return zu(`(?!${Vg(t.terminal)})${KN}*?`,{cardinality:t.cardinality,lookahead:t.lookahead})}function VBe(t){return t.right?zu(`[${zN(t.left)}-${zN(t.right)}]`,{cardinality:t.cardinality,lookahead:t.lookahead,wrap:!1}):zu(zN(t.left),{cardinality:t.cardinality,lookahead:t.lookahead,wrap:!1})}function zN(t){return mp(t.value)}function zu(t,e){var r;return(e.wrap!==!1||e.lookahead)&&(t=`(${(r=e.lookahead)!==null&&r!==void 0?r:""}${t})`),e.cardinality?`${t}${e.cardinality}`:t}var KN,Fl=N(()=>{"use strict";Sk();Pc();Il();cs();Ol();$g();o(Bse,"getEntryRule");o(Fse,"getHiddenRules");o(sx,"getAllReachableRules");o($se,"ruleDfs");o(VN,"getCrossReferenceTerminal");o(UN,"isCommentTerminal");o(HN,"findNodesForProperty");o(ox,"findNodeForProperty");o(WN,"findNodesForPropertyInternal");o(NBe,"findNodesForKeyword");o(qN,"findNodeForKeyword");o(YN,"findNodesForKeywordInternal");o(XN,"findAssignment");o(Fk,"findNameAssignment");o(zse,"findNameAssignmentInternal");o(Gse,"getActionAtElement");o(MBe,"isOptionalCardinality");o(IBe,"isArrayCardinality");o(OBe,"isArrayOperator");o(lx,"isDataTypeRule");o(Vse,"isDataTypeRuleInternal");o(PBe,"isDataType");o(GN,"isDataTypeInternal");o(zg,"getExplicitRuleType");o(cx,"getTypeName");o(Use,"getActionType");o(BBe,"getRuleTypeName");o(jN,"getRuleType");o(Gg,"terminalRegex");KN=/[\s\S]/.source;o(Vg,"abstractElementToRegex");o(FBe,"terminalAlternativesToRegex");o($Be,"terminalGroupToRegex");o(zBe,"untilTokenToRegex");o(GBe,"negateTokenToRegex");o(VBe,"characterRangeToRegex");o(zN,"keywordToRegex");o(zu,"withCardinality")});function QN(t){let e=[],r=t.Grammar;for(let n of r.rules)uo(n)&&UN(n)&&BN(Gg(n))&&e.push(n.name);return{multilineCommentRules:e,nameRegexp:kk}}var ZN=N(()=>{"use strict";Ol();Fl();$g();Pc();o(QN,"createGrammarConfig")});var JN=N(()=>{"use strict"});function Ug(t){console&&console.error&&console.error(`Error: ${t}`)}function ux(t){console&&console.warn&&console.warn(`Warning: ${t}`)}var Hse=N(()=>{"use strict";o(Ug,"PRINT_ERROR");o(ux,"PRINT_WARNING")});function hx(t){let e=new Date().getTime(),r=t();return{time:new Date().getTime()-e,value:r}}var Wse=N(()=>{"use strict";o(hx,"timer")});function fx(t){function e(){}o(e,"FakeConstructor"),e.prototype=t;let r=new e;function n(){return typeof r.bar}return o(n,"fakeAccess"),n(),n(),t;(0,eval)(t)}var qse=N(()=>{"use strict";o(fx,"toFastProperties")});var Hg=N(()=>{"use strict";Hse();Wse();qse()});function UBe(t){return HBe(t)?t.LABEL:t.name}function HBe(t){return Ti(t.LABEL)&&t.LABEL!==""}function zk(t){return Je(t,Wg)}function Wg(t){function e(r){return Je(r,Wg)}if(o(e,"convertDefinition"),t instanceof on){let r={type:"NonTerminal",name:t.nonTerminalName,idx:t.idx};return Ti(t.label)&&(r.label=t.label),r}else{if(t instanceof Dn)return{type:"Alternative",definition:e(t.definition)};if(t instanceof ln)return{type:"Option",idx:t.idx,definition:e(t.definition)};if(t instanceof Ln)return{type:"RepetitionMandatory",idx:t.idx,definition:e(t.definition)};if(t instanceof Rn)return{type:"RepetitionMandatoryWithSeparator",idx:t.idx,separator:Wg(new Er({terminalType:t.separator})),definition:e(t.definition)};if(t instanceof Tn)return{type:"RepetitionWithSeparator",idx:t.idx,separator:Wg(new Er({terminalType:t.separator})),definition:e(t.definition)};if(t instanceof Pr)return{type:"Repetition",idx:t.idx,definition:e(t.definition)};if(t instanceof wn)return{type:"Alternation",idx:t.idx,definition:e(t.definition)};if(t instanceof Er){let r={type:"Terminal",name:t.terminalType.name,label:UBe(t.terminalType),idx:t.idx};Ti(t.label)&&(r.terminalLabel=t.label);let n=t.terminalType.PATTERN;return t.terminalType.PATTERN&&(r.pattern=Uo(n)?n.source:n),r}else{if(t instanceof us)return{type:"Rule",name:t.name,orgText:t.orgText,definition:e(t.definition)};throw Error("non exhaustive match")}}}var ho,on,us,Dn,ln,Ln,Rn,Pr,Tn,wn,Er,Gk=N(()=>{"use strict";qt();o(UBe,"tokenLabel");o(HBe,"hasTokenLabel");ho=class{static{o(this,"AbstractProduction")}get definition(){return this._definition}set definition(e){this._definition=e}constructor(e){this._definition=e}accept(e){e.visit(this),Ae(this.definition,r=>{r.accept(e)})}},on=class extends ho{static{o(this,"NonTerminal")}constructor(e){super([]),this.idx=1,pa(this,zs(e,r=>r!==void 0))}set definition(e){}get definition(){return this.referencedRule!==void 0?this.referencedRule.definition:[]}accept(e){e.visit(this)}},us=class extends ho{static{o(this,"Rule")}constructor(e){super(e.definition),this.orgText="",pa(this,zs(e,r=>r!==void 0))}},Dn=class extends ho{static{o(this,"Alternative")}constructor(e){super(e.definition),this.ignoreAmbiguities=!1,pa(this,zs(e,r=>r!==void 0))}},ln=class extends ho{static{o(this,"Option")}constructor(e){super(e.definition),this.idx=1,pa(this,zs(e,r=>r!==void 0))}},Ln=class extends ho{static{o(this,"RepetitionMandatory")}constructor(e){super(e.definition),this.idx=1,pa(this,zs(e,r=>r!==void 0))}},Rn=class extends ho{static{o(this,"RepetitionMandatoryWithSeparator")}constructor(e){super(e.definition),this.idx=1,pa(this,zs(e,r=>r!==void 0))}},Pr=class extends ho{static{o(this,"Repetition")}constructor(e){super(e.definition),this.idx=1,pa(this,zs(e,r=>r!==void 0))}},Tn=class extends ho{static{o(this,"RepetitionWithSeparator")}constructor(e){super(e.definition),this.idx=1,pa(this,zs(e,r=>r!==void 0))}},wn=class extends ho{static{o(this,"Alternation")}get definition(){return this._definition}set definition(e){this._definition=e}constructor(e){super(e.definition),this.idx=1,this.ignoreAmbiguities=!1,this.hasPredicates=!1,pa(this,zs(e,r=>r!==void 0))}},Er=class{static{o(this,"Terminal")}constructor(e){this.idx=1,pa(this,zs(e,r=>r!==void 0))}accept(e){e.visit(this)}};o(zk,"serializeGrammar");o(Wg,"serializeProduction")});var hs,Yse=N(()=>{"use strict";Gk();hs=class{static{o(this,"GAstVisitor")}visit(e){let r=e;switch(r.constructor){case on:return this.visitNonTerminal(r);case Dn:return this.visitAlternative(r);case ln:return this.visitOption(r);case Ln:return this.visitRepetitionMandatory(r);case Rn:return this.visitRepetitionMandatoryWithSeparator(r);case Tn:return this.visitRepetitionWithSeparator(r);case Pr:return this.visitRepetition(r);case wn:return this.visitAlternation(r);case Er:return this.visitTerminal(r);case us:return this.visitRule(r);default:throw Error("non exhaustive match")}}visitNonTerminal(e){}visitAlternative(e){}visitOption(e){}visitRepetition(e){}visitRepetitionMandatory(e){}visitRepetitionMandatoryWithSeparator(e){}visitRepetitionWithSeparator(e){}visitAlternation(e){}visitTerminal(e){}visitRule(e){}}});function eM(t){return t instanceof Dn||t instanceof ln||t instanceof Pr||t instanceof Ln||t instanceof Rn||t instanceof Tn||t instanceof Er||t instanceof us}function gp(t,e=[]){return t instanceof ln||t instanceof Pr||t instanceof Tn?!0:t instanceof wn?B2(t.definition,n=>gp(n,e)):t instanceof on&&Xn(e,t)?!1:t instanceof ho?(t instanceof on&&e.push(t),Pa(t.definition,n=>gp(n,e))):!1}function tM(t){return t instanceof wn}function Vs(t){if(t instanceof on)return"SUBRULE";if(t instanceof ln)return"OPTION";if(t instanceof wn)return"OR";if(t instanceof Ln)return"AT_LEAST_ONE";if(t instanceof Rn)return"AT_LEAST_ONE_SEP";if(t instanceof Tn)return"MANY_SEP";if(t instanceof Pr)return"MANY";if(t instanceof Er)return"CONSUME";throw Error("non exhaustive match")}var Xse=N(()=>{"use strict";qt();Gk();o(eM,"isSequenceProd");o(gp,"isOptionalProd");o(tM,"isBranchingProd");o(Vs,"getProductionDslName")});var fs=N(()=>{"use strict";Gk();Yse();Xse()});function jse(t,e,r){return[new ln({definition:[new Er({terminalType:t.separator})].concat(t.definition)})].concat(e,r)}var Gu,Vk=N(()=>{"use strict";qt();fs();Gu=class{static{o(this,"RestWalker")}walk(e,r=[]){Ae(e.definition,(n,i)=>{let a=bi(e.definition,i+1);if(n instanceof on)this.walkProdRef(n,a,r);else if(n instanceof Er)this.walkTerminal(n,a,r);else if(n instanceof Dn)this.walkFlat(n,a,r);else if(n instanceof ln)this.walkOption(n,a,r);else if(n instanceof Ln)this.walkAtLeastOne(n,a,r);else if(n instanceof Rn)this.walkAtLeastOneSep(n,a,r);else if(n instanceof Tn)this.walkManySep(n,a,r);else if(n instanceof Pr)this.walkMany(n,a,r);else if(n instanceof wn)this.walkOr(n,a,r);else throw Error("non exhaustive match")})}walkTerminal(e,r,n){}walkProdRef(e,r,n){}walkFlat(e,r,n){let i=r.concat(n);this.walk(e,i)}walkOption(e,r,n){let i=r.concat(n);this.walk(e,i)}walkAtLeastOne(e,r,n){let i=[new ln({definition:e.definition})].concat(r,n);this.walk(e,i)}walkAtLeastOneSep(e,r,n){let i=jse(e,r,n);this.walk(e,i)}walkMany(e,r,n){let i=[new ln({definition:e.definition})].concat(r,n);this.walk(e,i)}walkManySep(e,r,n){let i=jse(e,r,n);this.walk(e,i)}walkOr(e,r,n){let i=r.concat(n);Ae(e.definition,a=>{let s=new Dn({definition:[a]});this.walk(s,i)})}};o(jse,"restForRepetitionWithSeparator")});function yp(t){if(t instanceof on)return yp(t.referencedRule);if(t instanceof Er)return YBe(t);if(eM(t))return WBe(t);if(tM(t))return qBe(t);throw Error("non exhaustive match")}function WBe(t){let e=[],r=t.definition,n=0,i=r.length>n,a,s=!0;for(;i&&s;)a=r[n],s=gp(a),e=e.concat(yp(a)),n=n+1,i=r.length>n;return qm(e)}function qBe(t){let e=Je(t.definition,r=>yp(r));return qm(qr(e))}function YBe(t){return[t.terminalType]}var rM=N(()=>{"use strict";qt();fs();o(yp,"first");o(WBe,"firstForSequence");o(qBe,"firstForBranching");o(YBe,"firstForTerminal")});var Uk,nM=N(()=>{"use strict";Uk="_~IN~_"});function Kse(t){let e={};return Ae(t,r=>{let n=new iM(r).startWalking();pa(e,n)}),e}function XBe(t,e){return t.name+e+Uk}var iM,Qse=N(()=>{"use strict";Vk();rM();qt();nM();fs();iM=class extends Gu{static{o(this,"ResyncFollowsWalker")}constructor(e){super(),this.topProd=e,this.follows={}}startWalking(){return this.walk(this.topProd),this.follows}walkTerminal(e,r,n){}walkProdRef(e,r,n){let i=XBe(e.referencedRule,e.idx)+this.topProd.name,a=r.concat(n),s=new Dn({definition:a}),l=yp(s);this.follows[i]=l}};o(Kse,"computeAllProdsFollows");o(XBe,"buildBetweenProdsFollowPrefix")});function qg(t){let e=t.toString();if(Hk.hasOwnProperty(e))return Hk[e];{let r=jBe.pattern(e);return Hk[e]=r,r}}function Zse(){Hk={}}var Hk,jBe,Wk=N(()=>{"use strict";ax();Hk={},jBe=new dp;o(qg,"getRegExpAst");o(Zse,"clearRegExpParserCache")});function toe(t,e=!1){try{let r=qg(t);return aM(r.value,{},r.flags.ignoreCase)}catch(r){if(r.message===eoe)e&&ux(`${dx} Unable to optimize: < ${t.toString()} > Complement Sets cannot be automatically optimized. This will disable the lexer's first char optimizations. See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#COMPLEMENT for details.`);else{let n="";e&&(n=` This will disable the lexer's first char optimizations. - See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#REGEXP_PARSING for details.`),Vg(`${ux} + See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#REGEXP_PARSING for details.`),Ug(`${dx} Failed parsing: < ${t.toString()} > Using the @chevrotain/regexp-to-ast library - Please open an issue at: https://github.com/chevrotain/chevrotain/issues`+n)}}return[]}function AN(t,e,r){switch(t.type){case"Disjunction":for(let i=0;i{if(typeof u=="number")Fk(u,e,r);else{let h=u;if(r===!0)for(let f=h.from;f<=h.to;f++)Fk(f,e,r);else{for(let f=h.from;f<=h.to&&f=qg){let f=h.from>=qg?h.from:qg,d=h.to,p=Bc(f),m=Bc(d);for(let g=p;g<=m;g++)e[g]=g}}}});break;case"Group":AN(s.value,e,r);break;default:throw Error("Non Exhaustive Match")}let l=s.quantifier!==void 0&&s.quantifier.atLeast===0;if(s.type==="Group"&&_N(s)===!1||s.type!=="Group"&&l===!1)break}break;default:throw Error("non exhaustive match!")}return br(e)}function Fk(t,e,r){let n=Bc(t);e[n]=n,r===!0&&vPe(t,e)}function vPe(t,e){let r=String.fromCharCode(t),n=r.toUpperCase();if(n!==r){let i=Bc(n.charCodeAt(0));e[i]=i}else{let i=r.toLowerCase();if(i!==r){let a=Bc(i.charCodeAt(0));e[a]=a}}}function Vae(t,e){return ns(t.value,r=>{if(typeof r=="number")return qn(e,r);{let n=r;return ns(e,i=>n.from<=i&&i<=n.to)!==void 0}})}function _N(t){let e=t.quantifier;return e&&e.atLeast===0?!0:t.value?Pt(t.value)?Ma(t.value,_N):_N(t.value):!1}function $k(t,e){if(e instanceof RegExp){let r=Wg(e),n=new DN(t);return n.visit(r),n.found}else return ns(e,r=>qn(t,r.charCodeAt(0)))!==void 0}var Uae,ux,DN,Wae=N(()=>{"use strict";rx();qt();Ug();Bk();LN();Uae="Complement Sets are not supported for first char optimization",ux=`Unable to use "first char" lexer optimizations: -`;o(Hae,"getOptimizedStartCodesIndices");o(AN,"firstCharOptimizedIndices");o(Fk,"addOptimizedIdxToResult");o(vPe,"handleIgnoreCase");o(Vae,"findCode");o(_N,"isWholeOptional");DN=class extends Pc{static{o(this,"CharCodeFinder")}constructor(e){super(),this.targetCharCodes=e,this.found=!1}visitChildren(e){if(this.found!==!0){switch(e.type){case"Lookahead":this.visitLookahead(e);return;case"NegativeLookahead":this.visitNegativeLookahead(e);return}super.visitChildren(e)}}visitCharacter(e){qn(this.targetCharCodes,e.value)&&(this.found=!0)}visitSet(e){e.complement?Vae(e,this.targetCharCodes)===void 0&&(this.found=!0):Vae(e,this.targetCharCodes)!==void 0&&(this.found=!0)}};o($k,"canMatchCharCode")});function Xae(t,e){e=tf(e,{useSticky:NN,debug:!1,safeMode:!1,positionTracking:"full",lineTerminatorCharacters:["\r",` -`],tracer:o((b,w)=>w(),"tracer")});let r=e.tracer;r("initCharCodeToOptimizedIndexMap",()=>{PPe()});let n;r("Reject Lexer.NA",()=>{n=nf(t,b=>b[mp]===Xn.NA)});let i=!1,a;r("Transform Patterns",()=>{i=!1,a=Je(n,b=>{let w=b[mp];if(Go(w)){let C=w.source;return C.length===1&&C!=="^"&&C!=="$"&&C!=="."&&!w.ignoreCase?C:C.length===2&&C[0]==="\\"&&!qn(["d","D","s","S","t","r","n","t","0","c","b","B","f","v","w","W"],C[1])?C[1]:e.useSticky?Yae(w):qae(w)}else{if(Ci(w))return i=!0,{exec:w};if(typeof w=="object")return i=!0,w;if(typeof w=="string"){if(w.length===1)return w;{let C=w.replace(/[\\^$.*+?()[\]{}|]/g,"\\$&"),T=new RegExp(C);return e.useSticky?Yae(T):qae(T)}}else throw Error("non exhaustive match")}})});let s,l,u,h,f;r("misc mapping",()=>{s=Je(n,b=>b.tokenTypeIdx),l=Je(n,b=>{let w=b.GROUP;if(w!==Xn.SKIPPED){if(xi(w))return w;if(mr(w))return!1;throw Error("non exhaustive match")}}),u=Je(n,b=>{let w=b.LONGER_ALT;if(w)return Pt(w)?Je(w,T=>KT(n,T)):[KT(n,w)]}),h=Je(n,b=>b.PUSH_MODE),f=Je(n,b=>Bt(b,"POP_MODE"))});let d;r("Line Terminator Handling",()=>{let b=rse(e.lineTerminatorCharacters);d=Je(n,w=>!1),e.positionTracking!=="onlyOffset"&&(d=Je(n,w=>Bt(w,"LINE_BREAKS")?!!w.LINE_BREAKS:tse(w,b)===!1&&$k(b,w.PATTERN)))});let p,m,g,y;r("Misc Mapping #2",()=>{p=Je(n,Jae),m=Je(a,IPe),g=Xr(n,(b,w)=>{let C=w.GROUP;return xi(C)&&C!==Xn.SKIPPED&&(b[C]=[]),b},{}),y=Je(a,(b,w)=>({pattern:a[w],longerAlt:u[w],canLineTerminator:d[w],isCustom:p[w],short:m[w],group:l[w],push:h[w],pop:f[w],tokenTypeIdx:s[w],tokenType:n[w]}))});let v=!0,x=[];return e.safeMode||r("First Char Optimization",()=>{x=Xr(n,(b,w,C)=>{if(typeof w.PATTERN=="string"){let T=w.PATTERN.charCodeAt(0),E=Bc(T);RN(b,E,y[C])}else if(Pt(w.START_CHARS_HINT)){let T;Ae(w.START_CHARS_HINT,E=>{let A=typeof E=="string"?E.charCodeAt(0):E,S=Bc(A);T!==S&&(T=S,RN(b,S,y[C]))})}else if(Go(w.PATTERN))if(w.PATTERN.unicode)v=!1,e.ensureOptimizations&&Vg(`${ux} Unable to analyze < ${w.PATTERN.toString()} > pattern. + Please open an issue at: https://github.com/chevrotain/chevrotain/issues`+n)}}return[]}function aM(t,e,r){switch(t.type){case"Disjunction":for(let i=0;i{if(typeof u=="number")qk(u,e,r);else{let h=u;if(r===!0)for(let f=h.from;f<=h.to;f++)qk(f,e,r);else{for(let f=h.from;f<=h.to&&f=Yg){let f=h.from>=Yg?h.from:Yg,d=h.to,p=$c(f),m=$c(d);for(let g=p;g<=m;g++)e[g]=g}}}});break;case"Group":aM(s.value,e,r);break;default:throw Error("Non Exhaustive Match")}let l=s.quantifier!==void 0&&s.quantifier.atLeast===0;if(s.type==="Group"&&sM(s)===!1||s.type!=="Group"&&l===!1)break}break;default:throw Error("non exhaustive match!")}return br(e)}function qk(t,e,r){let n=$c(t);e[n]=n,r===!0&&KBe(t,e)}function KBe(t,e){let r=String.fromCharCode(t),n=r.toUpperCase();if(n!==r){let i=$c(n.charCodeAt(0));e[i]=i}else{let i=r.toLowerCase();if(i!==r){let a=$c(i.charCodeAt(0));e[a]=a}}}function Jse(t,e){return ls(t.value,r=>{if(typeof r=="number")return Xn(e,r);{let n=r;return ls(e,i=>n.from<=i&&i<=n.to)!==void 0}})}function sM(t){let e=t.quantifier;return e&&e.atLeast===0?!0:t.value?Pt(t.value)?Pa(t.value,sM):sM(t.value):!1}function Yk(t,e){if(e instanceof RegExp){let r=qg(e),n=new oM(t);return n.visit(r),n.found}else return ls(e,r=>Xn(t,r.charCodeAt(0)))!==void 0}var eoe,dx,oM,roe=N(()=>{"use strict";ax();qt();Hg();Wk();lM();eoe="Complement Sets are not supported for first char optimization",dx=`Unable to use "first char" lexer optimizations: +`;o(toe,"getOptimizedStartCodesIndices");o(aM,"firstCharOptimizedIndices");o(qk,"addOptimizedIdxToResult");o(KBe,"handleIgnoreCase");o(Jse,"findCode");o(sM,"isWholeOptional");oM=class extends Fc{static{o(this,"CharCodeFinder")}constructor(e){super(),this.targetCharCodes=e,this.found=!1}visitChildren(e){if(this.found!==!0){switch(e.type){case"Lookahead":this.visitLookahead(e);return;case"NegativeLookahead":this.visitNegativeLookahead(e);return}super.visitChildren(e)}}visitCharacter(e){Xn(this.targetCharCodes,e.value)&&(this.found=!0)}visitSet(e){e.complement?Jse(e,this.targetCharCodes)===void 0&&(this.found=!0):Jse(e,this.targetCharCodes)!==void 0&&(this.found=!0)}};o(Yk,"canMatchCharCode")});function aoe(t,e){e=nf(e,{useSticky:uM,debug:!1,safeMode:!1,positionTracking:"full",lineTerminatorCharacters:["\r",` +`],tracer:o((b,T)=>T(),"tracer")});let r=e.tracer;r("initCharCodeToOptimizedIndexMap",()=>{pFe()});let n;r("Reject Lexer.NA",()=>{n=sf(t,b=>b[vp]===Kn.NA)});let i=!1,a;r("Transform Patterns",()=>{i=!1,a=Je(n,b=>{let T=b[vp];if(Uo(T)){let S=T.source;return S.length===1&&S!=="^"&&S!=="$"&&S!=="."&&!T.ignoreCase?S:S.length===2&&S[0]==="\\"&&!Xn(["d","D","s","S","t","r","n","t","0","c","b","B","f","v","w","W"],S[1])?S[1]:e.useSticky?ioe(T):noe(T)}else{if(Ai(T))return i=!0,{exec:T};if(typeof T=="object")return i=!0,T;if(typeof T=="string"){if(T.length===1)return T;{let S=T.replace(/[\\^$.*+?()[\]{}|]/g,"\\$&"),w=new RegExp(S);return e.useSticky?ioe(w):noe(w)}}else throw Error("non exhaustive match")}})});let s,l,u,h,f;r("misc mapping",()=>{s=Je(n,b=>b.tokenTypeIdx),l=Je(n,b=>{let T=b.GROUP;if(T!==Kn.SKIPPED){if(Ti(T))return T;if(mr(T))return!1;throw Error("non exhaustive match")}}),u=Je(n,b=>{let T=b.LONGER_ALT;if(T)return Pt(T)?Je(T,w=>ik(n,w)):[ik(n,T)]}),h=Je(n,b=>b.PUSH_MODE),f=Je(n,b=>Bt(b,"POP_MODE"))});let d;r("Line Terminator Handling",()=>{let b=doe(e.lineTerminatorCharacters);d=Je(n,T=>!1),e.positionTracking!=="onlyOffset"&&(d=Je(n,T=>Bt(T,"LINE_BREAKS")?!!T.LINE_BREAKS:foe(T,b)===!1&&Yk(b,T.PATTERN)))});let p,m,g,y;r("Misc Mapping #2",()=>{p=Je(n,uoe),m=Je(a,fFe),g=Xr(n,(b,T)=>{let S=T.GROUP;return Ti(S)&&S!==Kn.SKIPPED&&(b[S]=[]),b},{}),y=Je(a,(b,T)=>({pattern:a[T],longerAlt:u[T],canLineTerminator:d[T],isCustom:p[T],short:m[T],group:l[T],push:h[T],pop:f[T],tokenTypeIdx:s[T],tokenType:n[T]}))});let v=!0,x=[];return e.safeMode||r("First Char Optimization",()=>{x=Xr(n,(b,T,S)=>{if(typeof T.PATTERN=="string"){let w=T.PATTERN.charCodeAt(0),E=$c(w);cM(b,E,y[S])}else if(Pt(T.START_CHARS_HINT)){let w;Ae(T.START_CHARS_HINT,E=>{let _=typeof E=="string"?E.charCodeAt(0):E,C=$c(_);w!==C&&(w=C,cM(b,C,y[S]))})}else if(Uo(T.PATTERN))if(T.PATTERN.unicode)v=!1,e.ensureOptimizations&&Ug(`${dx} Unable to analyze < ${T.PATTERN.toString()} > pattern. The regexp unicode flag is not currently supported by the regexp-to-ast library. This will disable the lexer's first char optimizations. - For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNICODE_OPTIMIZE`);else{let T=Hae(w.PATTERN,e.ensureOptimizations);ur(T)&&(v=!1),Ae(T,E=>{RN(b,E,y[C])})}else e.ensureOptimizations&&Vg(`${ux} TokenType: <${w.name}> is using a custom token pattern without providing parameter. + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNICODE_OPTIMIZE`);else{let w=toe(T.PATTERN,e.ensureOptimizations);hr(w)&&(v=!1),Ae(w,E=>{cM(b,E,y[S])})}else e.ensureOptimizations&&Ug(`${dx} TokenType: <${T.name}> is using a custom token pattern without providing parameter. This will disable the lexer's first char optimizations. - For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_OPTIMIZE`),v=!1;return b},[])}),{emptyGroups:g,patternIdxToConfig:y,charCodeToPatternIdxToConfig:x,hasCustom:i,canBeOptimized:v}}function jae(t,e){let r=[],n=bPe(t);r=r.concat(n.errors);let i=wPe(n.valid),a=i.valid;return r=r.concat(i.errors),r=r.concat(xPe(a)),r=r.concat(DPe(a)),r=r.concat(LPe(a,e)),r=r.concat(RPe(a)),r}function xPe(t){let e=[],r=Yr(t,n=>Go(n[mp]));return e=e.concat(kPe(r)),e=e.concat(CPe(r)),e=e.concat(APe(r)),e=e.concat(_Pe(r)),e=e.concat(EPe(r)),e}function bPe(t){let e=Yr(t,i=>!Bt(i,mp)),r=Je(e,i=>({message:"Token Type: ->"+i.name+"<- missing static 'PATTERN' property",type:Yn.MISSING_PATTERN,tokenTypes:[i]})),n=rf(t,e);return{errors:r,valid:n}}function wPe(t){let e=Yr(t,i=>{let a=i[mp];return!Go(a)&&!Ci(a)&&!Bt(a,"exec")&&!xi(a)}),r=Je(e,i=>({message:"Token Type: ->"+i.name+"<- static 'PATTERN' can only be a RegExp, a Function matching the {CustomPatternMatcherFunc} type or an Object matching the {ICustomPattern} interface.",type:Yn.INVALID_PATTERN,tokenTypes:[i]})),n=rf(t,e);return{errors:r,valid:n}}function kPe(t){class e extends Pc{static{o(this,"EndAnchorFinder")}constructor(){super(...arguments),this.found=!1}visitEndAnchor(a){this.found=!0}}let r=Yr(t,i=>{let a=i.PATTERN;try{let s=Wg(a),l=new e;return l.visit(s),l.found}catch{return TPe.test(a.source)}});return Je(r,i=>({message:`Unexpected RegExp Anchor Error: + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_OPTIMIZE`),v=!1;return b},[])}),{emptyGroups:g,patternIdxToConfig:y,charCodeToPatternIdxToConfig:x,hasCustom:i,canBeOptimized:v}}function soe(t,e){let r=[],n=ZBe(t);r=r.concat(n.errors);let i=JBe(n.valid),a=i.valid;return r=r.concat(i.errors),r=r.concat(QBe(a)),r=r.concat(oFe(a)),r=r.concat(lFe(a,e)),r=r.concat(cFe(a)),r}function QBe(t){let e=[],r=Yr(t,n=>Uo(n[vp]));return e=e.concat(tFe(r)),e=e.concat(iFe(r)),e=e.concat(aFe(r)),e=e.concat(sFe(r)),e=e.concat(rFe(r)),e}function ZBe(t){let e=Yr(t,i=>!Bt(i,vp)),r=Je(e,i=>({message:"Token Type: ->"+i.name+"<- missing static 'PATTERN' property",type:jn.MISSING_PATTERN,tokenTypes:[i]})),n=af(t,e);return{errors:r,valid:n}}function JBe(t){let e=Yr(t,i=>{let a=i[vp];return!Uo(a)&&!Ai(a)&&!Bt(a,"exec")&&!Ti(a)}),r=Je(e,i=>({message:"Token Type: ->"+i.name+"<- static 'PATTERN' can only be a RegExp, a Function matching the {CustomPatternMatcherFunc} type or an Object matching the {ICustomPattern} interface.",type:jn.INVALID_PATTERN,tokenTypes:[i]})),n=af(t,e);return{errors:r,valid:n}}function tFe(t){class e extends Fc{static{o(this,"EndAnchorFinder")}constructor(){super(...arguments),this.found=!1}visitEndAnchor(a){this.found=!0}}let r=Yr(t,i=>{let a=i.PATTERN;try{let s=qg(a),l=new e;return l.visit(s),l.found}catch{return eFe.test(a.source)}});return Je(r,i=>({message:`Unexpected RegExp Anchor Error: Token Type: ->`+i.name+`<- static 'PATTERN' cannot contain end of input anchor '$' - See chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.`,type:Yn.EOI_ANCHOR_FOUND,tokenTypes:[i]}))}function EPe(t){let e=Yr(t,n=>n.PATTERN.test(""));return Je(e,n=>({message:"Token Type: ->"+n.name+"<- static 'PATTERN' must not match an empty string",type:Yn.EMPTY_MATCH_PATTERN,tokenTypes:[n]}))}function CPe(t){class e extends Pc{static{o(this,"StartAnchorFinder")}constructor(){super(...arguments),this.found=!1}visitStartAnchor(a){this.found=!0}}let r=Yr(t,i=>{let a=i.PATTERN;try{let s=Wg(a),l=new e;return l.visit(s),l.found}catch{return SPe.test(a.source)}});return Je(r,i=>({message:`Unexpected RegExp Anchor Error: + See chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.`,type:jn.EOI_ANCHOR_FOUND,tokenTypes:[i]}))}function rFe(t){let e=Yr(t,n=>n.PATTERN.test(""));return Je(e,n=>({message:"Token Type: ->"+n.name+"<- static 'PATTERN' must not match an empty string",type:jn.EMPTY_MATCH_PATTERN,tokenTypes:[n]}))}function iFe(t){class e extends Fc{static{o(this,"StartAnchorFinder")}constructor(){super(...arguments),this.found=!1}visitStartAnchor(a){this.found=!0}}let r=Yr(t,i=>{let a=i.PATTERN;try{let s=qg(a),l=new e;return l.visit(s),l.found}catch{return nFe.test(a.source)}});return Je(r,i=>({message:`Unexpected RegExp Anchor Error: Token Type: ->`+i.name+`<- static 'PATTERN' cannot contain start of input anchor '^' - See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.`,type:Yn.SOI_ANCHOR_FOUND,tokenTypes:[i]}))}function APe(t){let e=Yr(t,n=>{let i=n[mp];return i instanceof RegExp&&(i.multiline||i.global)});return Je(e,n=>({message:"Token Type: ->"+n.name+"<- static 'PATTERN' may NOT contain global('g') or multiline('m')",type:Yn.UNSUPPORTED_FLAGS_FOUND,tokenTypes:[n]}))}function _Pe(t){let e=[],r=Je(t,a=>Xr(t,(s,l)=>(a.PATTERN.source===l.PATTERN.source&&!qn(e,l)&&l.PATTERN!==Xn.NA&&(e.push(l),s.push(l)),s),[]));r=Ec(r);let n=Yr(r,a=>a.length>1);return Je(n,a=>{let s=Je(a,u=>u.name);return{message:`The same RegExp pattern ->${ia(a).PATTERN}<-has been used in all of the following Token Types: ${s.join(", ")} <-`,type:Yn.DUPLICATE_PATTERNS_FOUND,tokenTypes:a}})}function DPe(t){let e=Yr(t,n=>{if(!Bt(n,"GROUP"))return!1;let i=n.GROUP;return i!==Xn.SKIPPED&&i!==Xn.NA&&!xi(i)});return Je(e,n=>({message:"Token Type: ->"+n.name+"<- static 'GROUP' can only be Lexer.SKIPPED/Lexer.NA/A String",type:Yn.INVALID_GROUP_TYPE_FOUND,tokenTypes:[n]}))}function LPe(t,e){let r=Yr(t,i=>i.PUSH_MODE!==void 0&&!qn(e,i.PUSH_MODE));return Je(r,i=>({message:`Token Type: ->${i.name}<- static 'PUSH_MODE' value cannot refer to a Lexer Mode ->${i.PUSH_MODE}<-which does not exist`,type:Yn.PUSH_MODE_DOES_NOT_EXIST,tokenTypes:[i]}))}function RPe(t){let e=[],r=Xr(t,(n,i,a)=>{let s=i.PATTERN;return s===Xn.NA||(xi(s)?n.push({str:s,idx:a,tokenType:i}):Go(s)&&MPe(s)&&n.push({str:s.source,idx:a,tokenType:i})),n},[]);return Ae(t,(n,i)=>{Ae(r,({str:a,idx:s,tokenType:l})=>{if(i${l.name}<- can never be matched. + See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.`,type:jn.SOI_ANCHOR_FOUND,tokenTypes:[i]}))}function aFe(t){let e=Yr(t,n=>{let i=n[vp];return i instanceof RegExp&&(i.multiline||i.global)});return Je(e,n=>({message:"Token Type: ->"+n.name+"<- static 'PATTERN' may NOT contain global('g') or multiline('m')",type:jn.UNSUPPORTED_FLAGS_FOUND,tokenTypes:[n]}))}function sFe(t){let e=[],r=Je(t,a=>Xr(t,(s,l)=>(a.PATTERN.source===l.PATTERN.source&&!Xn(e,l)&&l.PATTERN!==Kn.NA&&(e.push(l),s.push(l)),s),[]));r=Ac(r);let n=Yr(r,a=>a.length>1);return Je(n,a=>{let s=Je(a,u=>u.name);return{message:`The same RegExp pattern ->${ia(a).PATTERN}<-has been used in all of the following Token Types: ${s.join(", ")} <-`,type:jn.DUPLICATE_PATTERNS_FOUND,tokenTypes:a}})}function oFe(t){let e=Yr(t,n=>{if(!Bt(n,"GROUP"))return!1;let i=n.GROUP;return i!==Kn.SKIPPED&&i!==Kn.NA&&!Ti(i)});return Je(e,n=>({message:"Token Type: ->"+n.name+"<- static 'GROUP' can only be Lexer.SKIPPED/Lexer.NA/A String",type:jn.INVALID_GROUP_TYPE_FOUND,tokenTypes:[n]}))}function lFe(t,e){let r=Yr(t,i=>i.PUSH_MODE!==void 0&&!Xn(e,i.PUSH_MODE));return Je(r,i=>({message:`Token Type: ->${i.name}<- static 'PUSH_MODE' value cannot refer to a Lexer Mode ->${i.PUSH_MODE}<-which does not exist`,type:jn.PUSH_MODE_DOES_NOT_EXIST,tokenTypes:[i]}))}function cFe(t){let e=[],r=Xr(t,(n,i,a)=>{let s=i.PATTERN;return s===Kn.NA||(Ti(s)?n.push({str:s,idx:a,tokenType:i}):Uo(s)&&hFe(s)&&n.push({str:s.source,idx:a,tokenType:i})),n},[]);return Ae(t,(n,i)=>{Ae(r,({str:a,idx:s,tokenType:l})=>{if(i${l.name}<- can never be matched. Because it appears AFTER the Token Type ->${n.name}<-in the lexer's definition. -See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNREACHABLE`;e.push({message:u,type:Yn.UNREACHABLE_PATTERN,tokenTypes:[n,l]})}})}),e}function NPe(t,e){if(Go(e)){let r=e.exec(t);return r!==null&&r.index===0}else{if(Ci(e))return e(t,0,[],{});if(Bt(e,"exec"))return e.exec(t,0,[],{});if(typeof e=="string")return e===t;throw Error("non exhaustive match")}}function MPe(t){return ns([".","\\","[","]","|","^","$","(",")","?","*","+","{"],r=>t.source.indexOf(r)!==-1)===void 0}function qae(t){let e=t.ignoreCase?"i":"";return new RegExp(`^(?:${t.source})`,e)}function Yae(t){let e=t.ignoreCase?"iy":"y";return new RegExp(`${t.source}`,e)}function Kae(t,e,r){let n=[];return Bt(t,Yg)||n.push({message:"A MultiMode Lexer cannot be initialized without a <"+Yg+`> property in its definition -`,type:Yn.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE}),Bt(t,zk)||n.push({message:"A MultiMode Lexer cannot be initialized without a <"+zk+`> property in its definition -`,type:Yn.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY}),Bt(t,zk)&&Bt(t,Yg)&&!Bt(t.modes,t.defaultMode)&&n.push({message:`A MultiMode Lexer cannot be initialized with a ${Yg}: <${t.defaultMode}>which does not exist -`,type:Yn.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST}),Bt(t,zk)&&Ae(t.modes,(i,a)=>{Ae(i,(s,l)=>{if(mr(s))n.push({message:`A Lexer cannot be initialized using an undefined Token Type. Mode:<${a}> at index: <${l}> -`,type:Yn.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED});else if(Bt(s,"LONGER_ALT")){let u=Pt(s.LONGER_ALT)?s.LONGER_ALT:[s.LONGER_ALT];Ae(u,h=>{!mr(h)&&!qn(i,h)&&n.push({message:`A MultiMode Lexer cannot be initialized with a longer_alt <${h.name}> on token <${s.name}> outside of mode <${a}> -`,type:Yn.MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE})})}})}),n}function Qae(t,e,r){let n=[],i=!1,a=Ec(qr(br(t.modes))),s=nf(a,u=>u[mp]===Xn.NA),l=rse(r);return e&&Ae(s,u=>{let h=tse(u,l);if(h!==!1){let d={message:OPe(u,h),type:h.issue,tokenType:u};n.push(d)}else Bt(u,"LINE_BREAKS")?u.LINE_BREAKS===!0&&(i=!0):$k(l,u.PATTERN)&&(i=!0)}),e&&!i&&n.push({message:`Warning: No LINE_BREAKS Found. +See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNREACHABLE`;e.push({message:u,type:jn.UNREACHABLE_PATTERN,tokenTypes:[n,l]})}})}),e}function uFe(t,e){if(Uo(e)){let r=e.exec(t);return r!==null&&r.index===0}else{if(Ai(e))return e(t,0,[],{});if(Bt(e,"exec"))return e.exec(t,0,[],{});if(typeof e=="string")return e===t;throw Error("non exhaustive match")}}function hFe(t){return ls([".","\\","[","]","|","^","$","(",")","?","*","+","{"],r=>t.source.indexOf(r)!==-1)===void 0}function noe(t){let e=t.ignoreCase?"i":"";return new RegExp(`^(?:${t.source})`,e)}function ioe(t){let e=t.ignoreCase?"iy":"y";return new RegExp(`${t.source}`,e)}function ooe(t,e,r){let n=[];return Bt(t,Xg)||n.push({message:"A MultiMode Lexer cannot be initialized without a <"+Xg+`> property in its definition +`,type:jn.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE}),Bt(t,Xk)||n.push({message:"A MultiMode Lexer cannot be initialized without a <"+Xk+`> property in its definition +`,type:jn.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY}),Bt(t,Xk)&&Bt(t,Xg)&&!Bt(t.modes,t.defaultMode)&&n.push({message:`A MultiMode Lexer cannot be initialized with a ${Xg}: <${t.defaultMode}>which does not exist +`,type:jn.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST}),Bt(t,Xk)&&Ae(t.modes,(i,a)=>{Ae(i,(s,l)=>{if(mr(s))n.push({message:`A Lexer cannot be initialized using an undefined Token Type. Mode:<${a}> at index: <${l}> +`,type:jn.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED});else if(Bt(s,"LONGER_ALT")){let u=Pt(s.LONGER_ALT)?s.LONGER_ALT:[s.LONGER_ALT];Ae(u,h=>{!mr(h)&&!Xn(i,h)&&n.push({message:`A MultiMode Lexer cannot be initialized with a longer_alt <${h.name}> on token <${s.name}> outside of mode <${a}> +`,type:jn.MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE})})}})}),n}function loe(t,e,r){let n=[],i=!1,a=Ac(qr(br(t.modes))),s=sf(a,u=>u[vp]===Kn.NA),l=doe(r);return e&&Ae(s,u=>{let h=foe(u,l);if(h!==!1){let d={message:dFe(u,h),type:h.issue,tokenType:u};n.push(d)}else Bt(u,"LINE_BREAKS")?u.LINE_BREAKS===!0&&(i=!0):Yk(l,u.PATTERN)&&(i=!0)}),e&&!i&&n.push({message:`Warning: No LINE_BREAKS Found. This Lexer has been defined to track line and column information, But none of the Token Types can be identified as matching a line terminator. See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#LINE_BREAKS - for details.`,type:Yn.NO_LINE_BREAKS_FLAGS}),n}function Zae(t){let e={},r=zr(t);return Ae(r,n=>{let i=t[n];if(Pt(i))e[n]=[];else throw Error("non exhaustive match")}),e}function Jae(t){let e=t.PATTERN;if(Go(e))return!1;if(Ci(e))return!0;if(Bt(e,"exec"))return!0;if(xi(e))return!1;throw Error("non exhaustive match")}function IPe(t){return xi(t)&&t.length===1?t.charCodeAt(0):!1}function tse(t,e){if(Bt(t,"LINE_BREAKS"))return!1;if(Go(t.PATTERN)){try{$k(e,t.PATTERN)}catch(r){return{issue:Yn.IDENTIFY_TERMINATOR,errMsg:r.message}}return!1}else{if(xi(t.PATTERN))return!1;if(Jae(t))return{issue:Yn.CUSTOM_LINE_BREAK};throw Error("non exhaustive match")}}function OPe(t,e){if(e.issue===Yn.IDENTIFY_TERMINATOR)return`Warning: unable to identify line terminator usage in pattern. + for details.`,type:jn.NO_LINE_BREAKS_FLAGS}),n}function coe(t){let e={},r=zr(t);return Ae(r,n=>{let i=t[n];if(Pt(i))e[n]=[];else throw Error("non exhaustive match")}),e}function uoe(t){let e=t.PATTERN;if(Uo(e))return!1;if(Ai(e))return!0;if(Bt(e,"exec"))return!0;if(Ti(e))return!1;throw Error("non exhaustive match")}function fFe(t){return Ti(t)&&t.length===1?t.charCodeAt(0):!1}function foe(t,e){if(Bt(t,"LINE_BREAKS"))return!1;if(Uo(t.PATTERN)){try{Yk(e,t.PATTERN)}catch(r){return{issue:jn.IDENTIFY_TERMINATOR,errMsg:r.message}}return!1}else{if(Ti(t.PATTERN))return!1;if(uoe(t))return{issue:jn.CUSTOM_LINE_BREAK};throw Error("non exhaustive match")}}function dFe(t,e){if(e.issue===jn.IDENTIFY_TERMINATOR)return`Warning: unable to identify line terminator usage in pattern. The problem is in the <${t.name}> Token Type Root cause: ${e.errMsg}. - For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#IDENTIFY_TERMINATOR`;if(e.issue===Yn.CUSTOM_LINE_BREAK)return`Warning: A Custom Token Pattern should specify the option. + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#IDENTIFY_TERMINATOR`;if(e.issue===jn.CUSTOM_LINE_BREAK)return`Warning: A Custom Token Pattern should specify the option. The problem is in the <${t.name}> Token Type - For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_LINE_BREAK`;throw Error("non exhaustive match")}function rse(t){return Je(t,r=>xi(r)?r.charCodeAt(0):r)}function RN(t,e,r){t[e]===void 0?t[e]=[r]:t[e].push(r)}function Bc(t){return t255?255+~~(t/255):t}}var mp,Yg,zk,NN,TPe,SPe,ese,qg,Gk,LN=N(()=>{"use strict";rx();hx();qt();Ug();Wae();Bk();mp="PATTERN",Yg="defaultMode",zk="modes",NN=typeof new RegExp("(?:)").sticky=="boolean";o(Xae,"analyzeTokenTypes");o(jae,"validatePatterns");o(xPe,"validateRegExpPattern");o(bPe,"findMissingPatterns");o(wPe,"findInvalidPatterns");TPe=/[^\\][$]/;o(kPe,"findEndOfInputAnchor");o(EPe,"findEmptyMatchRegExps");SPe=/[^\\[][\^]|^\^/;o(CPe,"findStartOfInputAnchor");o(APe,"findUnsupportedFlags");o(_Pe,"findDuplicatePatterns");o(DPe,"findInvalidGroupType");o(LPe,"findModesThatDoNotExist");o(RPe,"findUnreachablePatterns");o(NPe,"testTokenType");o(MPe,"noMetaChar");o(qae,"addStartOfInput");o(Yae,"addStickyFlag");o(Kae,"performRuntimeChecks");o(Qae,"performWarningRuntimeChecks");o(Zae,"cloneEmptyGroups");o(Jae,"isCustomPattern");o(IPe,"isShortPattern");ese={test:o(function(t){let e=t.length;for(let r=this.lastIndex;r{r.isParent=r.categoryMatches.length>0})}function BPe(t){let e=an(t),r=t,n=!0;for(;n;){r=Ec(qr(Je(r,a=>a.CATEGORIES)));let i=rf(r,e);e=e.concat(i),ur(i)?n=!1:r=i}return e}function FPe(t){Ae(t,e=>{MN(e)||(ase[nse]=e,e.tokenTypeIdx=nse++),ise(e)&&!Pt(e.CATEGORIES)&&(e.CATEGORIES=[e.CATEGORIES]),ise(e)||(e.CATEGORIES=[]),GPe(e)||(e.categoryMatches=[]),VPe(e)||(e.categoryMatchesMap={})})}function $Pe(t){Ae(t,e=>{e.categoryMatches=[],Ae(e.categoryMatchesMap,(r,n)=>{e.categoryMatches.push(ase[n].tokenTypeIdx)})})}function zPe(t){Ae(t,e=>{sse([],e)})}function sse(t,e){Ae(t,r=>{e.categoryMatchesMap[r.tokenTypeIdx]=!0}),Ae(e.CATEGORIES,r=>{let n=t.concat(e);qn(n,r)||sse(n,r)})}function MN(t){return Bt(t,"tokenTypeIdx")}function ise(t){return Bt(t,"CATEGORIES")}function GPe(t){return Bt(t,"categoryMatches")}function VPe(t){return Bt(t,"categoryMatchesMap")}function ose(t){return Bt(t,"tokenTypeIdx")}var nse,ase,gp=N(()=>{"use strict";qt();o(zu,"tokenStructuredMatcher");o(Xg,"tokenStructuredMatcherNoCategories");nse=1,ase={};o(Gu,"augmentTokenTypes");o(BPe,"expandCategories");o(FPe,"assignTokenDefaultProps");o($Pe,"assignCategoriesTokensProp");o(zPe,"assignCategoriesMapProp");o(sse,"singleAssignCategoriesToksMap");o(MN,"hasShortKeyProperty");o(ise,"hasCategoriesProperty");o(GPe,"hasExtendingTokensTypesProperty");o(VPe,"hasExtendingTokensTypesMapProperty");o(ose,"isTokenType")});var jg,IN=N(()=>{"use strict";jg={buildUnableToPopLexerModeMessage(t){return`Unable to pop Lexer Mode after encountering Token ->${t.image}<- The Mode Stack is empty`},buildUnexpectedCharactersMessage(t,e,r,n,i){return`unexpected character: ->${t.charAt(e)}<- at offset: ${e}, skipped ${r} characters.`}}});var Yn,fx,Xn,hx=N(()=>{"use strict";LN();qt();Ug();gp();IN();Bk();(function(t){t[t.MISSING_PATTERN=0]="MISSING_PATTERN",t[t.INVALID_PATTERN=1]="INVALID_PATTERN",t[t.EOI_ANCHOR_FOUND=2]="EOI_ANCHOR_FOUND",t[t.UNSUPPORTED_FLAGS_FOUND=3]="UNSUPPORTED_FLAGS_FOUND",t[t.DUPLICATE_PATTERNS_FOUND=4]="DUPLICATE_PATTERNS_FOUND",t[t.INVALID_GROUP_TYPE_FOUND=5]="INVALID_GROUP_TYPE_FOUND",t[t.PUSH_MODE_DOES_NOT_EXIST=6]="PUSH_MODE_DOES_NOT_EXIST",t[t.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE=7]="MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE",t[t.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY=8]="MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY",t[t.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST=9]="MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST",t[t.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED=10]="LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED",t[t.SOI_ANCHOR_FOUND=11]="SOI_ANCHOR_FOUND",t[t.EMPTY_MATCH_PATTERN=12]="EMPTY_MATCH_PATTERN",t[t.NO_LINE_BREAKS_FLAGS=13]="NO_LINE_BREAKS_FLAGS",t[t.UNREACHABLE_PATTERN=14]="UNREACHABLE_PATTERN",t[t.IDENTIFY_TERMINATOR=15]="IDENTIFY_TERMINATOR",t[t.CUSTOM_LINE_BREAK=16]="CUSTOM_LINE_BREAK",t[t.MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE=17]="MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE"})(Yn||(Yn={}));fx={deferDefinitionErrorsHandling:!1,positionTracking:"full",lineTerminatorsPattern:/\n|\r\n?/g,lineTerminatorCharacters:[` -`,"\r"],ensureOptimizations:!1,safeMode:!1,errorMessageProvider:jg,traceInitPerf:!1,skipValidations:!1,recoveryEnabled:!0};Object.freeze(fx);Xn=class{static{o(this,"Lexer")}constructor(e,r=fx){if(this.lexerDefinition=e,this.lexerDefinitionErrors=[],this.lexerDefinitionWarning=[],this.patternIdxToConfig={},this.charCodeToPatternIdxToConfig={},this.modes=[],this.emptyGroups={},this.trackStartLines=!0,this.trackEndLines=!0,this.hasCustom=!1,this.canModeBeOptimized={},this.TRACE_INIT=(i,a)=>{if(this.traceInitPerf===!0){this.traceInitIndent++;let s=new Array(this.traceInitIndent+1).join(" ");this.traceInitIndent <${i}>`);let{time:l,value:u}=lx(a),h=l>10?console.warn:console.log;return this.traceInitIndent time: ${l}ms`),this.traceInitIndent--,u}else return a()},typeof r=="boolean")throw Error(`The second argument to the Lexer constructor is now an ILexerConfig Object. -a boolean 2nd argument is no longer supported`);this.config=ma({},fx,r);let n=this.config.traceInitPerf;n===!0?(this.traceInitMaxIdent=1/0,this.traceInitPerf=!0):typeof n=="number"&&(this.traceInitMaxIdent=n,this.traceInitPerf=!0),this.traceInitIndent=-1,this.TRACE_INIT("Lexer Constructor",()=>{let i,a=!0;this.TRACE_INIT("Lexer Config handling",()=>{if(this.config.lineTerminatorsPattern===fx.lineTerminatorsPattern)this.config.lineTerminatorsPattern=ese;else if(this.config.lineTerminatorCharacters===fx.lineTerminatorCharacters)throw Error(`Error: Missing property on the Lexer config. - For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#MISSING_LINE_TERM_CHARS`);if(r.safeMode&&r.ensureOptimizations)throw Error('"safeMode" and "ensureOptimizations" flags are mutually exclusive.');this.trackStartLines=/full|onlyStart/i.test(this.config.positionTracking),this.trackEndLines=/full/i.test(this.config.positionTracking),Pt(e)?i={modes:{defaultMode:an(e)},defaultMode:Yg}:(a=!1,i=an(e))}),this.config.skipValidations===!1&&(this.TRACE_INIT("performRuntimeChecks",()=>{this.lexerDefinitionErrors=this.lexerDefinitionErrors.concat(Kae(i,this.trackStartLines,this.config.lineTerminatorCharacters))}),this.TRACE_INIT("performWarningRuntimeChecks",()=>{this.lexerDefinitionWarning=this.lexerDefinitionWarning.concat(Qae(i,this.trackStartLines,this.config.lineTerminatorCharacters))})),i.modes=i.modes?i.modes:{},Ae(i.modes,(l,u)=>{i.modes[u]=nf(l,h=>mr(h))});let s=zr(i.modes);if(Ae(i.modes,(l,u)=>{this.TRACE_INIT(`Mode: <${u}> processing`,()=>{if(this.modes.push(u),this.config.skipValidations===!1&&this.TRACE_INIT("validatePatterns",()=>{this.lexerDefinitionErrors=this.lexerDefinitionErrors.concat(jae(l,s))}),ur(this.lexerDefinitionErrors)){Gu(l);let h;this.TRACE_INIT("analyzeTokenTypes",()=>{h=Xae(l,{lineTerminatorCharacters:this.config.lineTerminatorCharacters,positionTracking:r.positionTracking,ensureOptimizations:r.ensureOptimizations,safeMode:r.safeMode,tracer:this.TRACE_INIT})}),this.patternIdxToConfig[u]=h.patternIdxToConfig,this.charCodeToPatternIdxToConfig[u]=h.charCodeToPatternIdxToConfig,this.emptyGroups=ma({},this.emptyGroups,h.emptyGroups),this.hasCustom=h.hasCustom||this.hasCustom,this.canModeBeOptimized[u]=h.canBeOptimized}})}),this.defaultMode=i.defaultMode,!ur(this.lexerDefinitionErrors)&&!this.config.deferDefinitionErrorsHandling){let u=Je(this.lexerDefinitionErrors,h=>h.message).join(`----------------------- + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_LINE_BREAK`;throw Error("non exhaustive match")}function doe(t){return Je(t,r=>Ti(r)?r.charCodeAt(0):r)}function cM(t,e,r){t[e]===void 0?t[e]=[r]:t[e].push(r)}function $c(t){return t255?255+~~(t/255):t}}var vp,Xg,Xk,uM,eFe,nFe,hoe,Yg,jk,lM=N(()=>{"use strict";ax();px();qt();Hg();roe();Wk();vp="PATTERN",Xg="defaultMode",Xk="modes",uM=typeof new RegExp("(?:)").sticky=="boolean";o(aoe,"analyzeTokenTypes");o(soe,"validatePatterns");o(QBe,"validateRegExpPattern");o(ZBe,"findMissingPatterns");o(JBe,"findInvalidPatterns");eFe=/[^\\][$]/;o(tFe,"findEndOfInputAnchor");o(rFe,"findEmptyMatchRegExps");nFe=/[^\\[][\^]|^\^/;o(iFe,"findStartOfInputAnchor");o(aFe,"findUnsupportedFlags");o(sFe,"findDuplicatePatterns");o(oFe,"findInvalidGroupType");o(lFe,"findModesThatDoNotExist");o(cFe,"findUnreachablePatterns");o(uFe,"testTokenType");o(hFe,"noMetaChar");o(noe,"addStartOfInput");o(ioe,"addStickyFlag");o(ooe,"performRuntimeChecks");o(loe,"performWarningRuntimeChecks");o(coe,"cloneEmptyGroups");o(uoe,"isCustomPattern");o(fFe,"isShortPattern");hoe={test:o(function(t){let e=t.length;for(let r=this.lastIndex;r{r.isParent=r.categoryMatches.length>0})}function mFe(t){let e=an(t),r=t,n=!0;for(;n;){r=Ac(qr(Je(r,a=>a.CATEGORIES)));let i=af(r,e);e=e.concat(i),hr(i)?n=!1:r=i}return e}function gFe(t){Ae(t,e=>{hM(e)||(goe[poe]=e,e.tokenTypeIdx=poe++),moe(e)&&!Pt(e.CATEGORIES)&&(e.CATEGORIES=[e.CATEGORIES]),moe(e)||(e.CATEGORIES=[]),xFe(e)||(e.categoryMatches=[]),bFe(e)||(e.categoryMatchesMap={})})}function yFe(t){Ae(t,e=>{e.categoryMatches=[],Ae(e.categoryMatchesMap,(r,n)=>{e.categoryMatches.push(goe[n].tokenTypeIdx)})})}function vFe(t){Ae(t,e=>{yoe([],e)})}function yoe(t,e){Ae(t,r=>{e.categoryMatchesMap[r.tokenTypeIdx]=!0}),Ae(e.CATEGORIES,r=>{let n=t.concat(e);Xn(n,r)||yoe(n,r)})}function hM(t){return Bt(t,"tokenTypeIdx")}function moe(t){return Bt(t,"CATEGORIES")}function xFe(t){return Bt(t,"categoryMatches")}function bFe(t){return Bt(t,"categoryMatchesMap")}function voe(t){return Bt(t,"tokenTypeIdx")}var poe,goe,xp=N(()=>{"use strict";qt();o(Vu,"tokenStructuredMatcher");o(jg,"tokenStructuredMatcherNoCategories");poe=1,goe={};o(Uu,"augmentTokenTypes");o(mFe,"expandCategories");o(gFe,"assignTokenDefaultProps");o(yFe,"assignCategoriesTokensProp");o(vFe,"assignCategoriesMapProp");o(yoe,"singleAssignCategoriesToksMap");o(hM,"hasShortKeyProperty");o(moe,"hasCategoriesProperty");o(xFe,"hasExtendingTokensTypesProperty");o(bFe,"hasExtendingTokensTypesMapProperty");o(voe,"isTokenType")});var Kg,fM=N(()=>{"use strict";Kg={buildUnableToPopLexerModeMessage(t){return`Unable to pop Lexer Mode after encountering Token ->${t.image}<- The Mode Stack is empty`},buildUnexpectedCharactersMessage(t,e,r,n,i){return`unexpected character: ->${t.charAt(e)}<- at offset: ${e}, skipped ${r} characters.`}}});var jn,mx,Kn,px=N(()=>{"use strict";lM();qt();Hg();xp();fM();Wk();(function(t){t[t.MISSING_PATTERN=0]="MISSING_PATTERN",t[t.INVALID_PATTERN=1]="INVALID_PATTERN",t[t.EOI_ANCHOR_FOUND=2]="EOI_ANCHOR_FOUND",t[t.UNSUPPORTED_FLAGS_FOUND=3]="UNSUPPORTED_FLAGS_FOUND",t[t.DUPLICATE_PATTERNS_FOUND=4]="DUPLICATE_PATTERNS_FOUND",t[t.INVALID_GROUP_TYPE_FOUND=5]="INVALID_GROUP_TYPE_FOUND",t[t.PUSH_MODE_DOES_NOT_EXIST=6]="PUSH_MODE_DOES_NOT_EXIST",t[t.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE=7]="MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE",t[t.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY=8]="MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY",t[t.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST=9]="MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST",t[t.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED=10]="LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED",t[t.SOI_ANCHOR_FOUND=11]="SOI_ANCHOR_FOUND",t[t.EMPTY_MATCH_PATTERN=12]="EMPTY_MATCH_PATTERN",t[t.NO_LINE_BREAKS_FLAGS=13]="NO_LINE_BREAKS_FLAGS",t[t.UNREACHABLE_PATTERN=14]="UNREACHABLE_PATTERN",t[t.IDENTIFY_TERMINATOR=15]="IDENTIFY_TERMINATOR",t[t.CUSTOM_LINE_BREAK=16]="CUSTOM_LINE_BREAK",t[t.MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE=17]="MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE"})(jn||(jn={}));mx={deferDefinitionErrorsHandling:!1,positionTracking:"full",lineTerminatorsPattern:/\n|\r\n?/g,lineTerminatorCharacters:[` +`,"\r"],ensureOptimizations:!1,safeMode:!1,errorMessageProvider:Kg,traceInitPerf:!1,skipValidations:!1,recoveryEnabled:!0};Object.freeze(mx);Kn=class{static{o(this,"Lexer")}constructor(e,r=mx){if(this.lexerDefinition=e,this.lexerDefinitionErrors=[],this.lexerDefinitionWarning=[],this.patternIdxToConfig={},this.charCodeToPatternIdxToConfig={},this.modes=[],this.emptyGroups={},this.trackStartLines=!0,this.trackEndLines=!0,this.hasCustom=!1,this.canModeBeOptimized={},this.TRACE_INIT=(i,a)=>{if(this.traceInitPerf===!0){this.traceInitIndent++;let s=new Array(this.traceInitIndent+1).join(" ");this.traceInitIndent <${i}>`);let{time:l,value:u}=hx(a),h=l>10?console.warn:console.log;return this.traceInitIndent time: ${l}ms`),this.traceInitIndent--,u}else return a()},typeof r=="boolean")throw Error(`The second argument to the Lexer constructor is now an ILexerConfig Object. +a boolean 2nd argument is no longer supported`);this.config=pa({},mx,r);let n=this.config.traceInitPerf;n===!0?(this.traceInitMaxIdent=1/0,this.traceInitPerf=!0):typeof n=="number"&&(this.traceInitMaxIdent=n,this.traceInitPerf=!0),this.traceInitIndent=-1,this.TRACE_INIT("Lexer Constructor",()=>{let i,a=!0;this.TRACE_INIT("Lexer Config handling",()=>{if(this.config.lineTerminatorsPattern===mx.lineTerminatorsPattern)this.config.lineTerminatorsPattern=hoe;else if(this.config.lineTerminatorCharacters===mx.lineTerminatorCharacters)throw Error(`Error: Missing property on the Lexer config. + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#MISSING_LINE_TERM_CHARS`);if(r.safeMode&&r.ensureOptimizations)throw Error('"safeMode" and "ensureOptimizations" flags are mutually exclusive.');this.trackStartLines=/full|onlyStart/i.test(this.config.positionTracking),this.trackEndLines=/full/i.test(this.config.positionTracking),Pt(e)?i={modes:{defaultMode:an(e)},defaultMode:Xg}:(a=!1,i=an(e))}),this.config.skipValidations===!1&&(this.TRACE_INIT("performRuntimeChecks",()=>{this.lexerDefinitionErrors=this.lexerDefinitionErrors.concat(ooe(i,this.trackStartLines,this.config.lineTerminatorCharacters))}),this.TRACE_INIT("performWarningRuntimeChecks",()=>{this.lexerDefinitionWarning=this.lexerDefinitionWarning.concat(loe(i,this.trackStartLines,this.config.lineTerminatorCharacters))})),i.modes=i.modes?i.modes:{},Ae(i.modes,(l,u)=>{i.modes[u]=sf(l,h=>mr(h))});let s=zr(i.modes);if(Ae(i.modes,(l,u)=>{this.TRACE_INIT(`Mode: <${u}> processing`,()=>{if(this.modes.push(u),this.config.skipValidations===!1&&this.TRACE_INIT("validatePatterns",()=>{this.lexerDefinitionErrors=this.lexerDefinitionErrors.concat(soe(l,s))}),hr(this.lexerDefinitionErrors)){Uu(l);let h;this.TRACE_INIT("analyzeTokenTypes",()=>{h=aoe(l,{lineTerminatorCharacters:this.config.lineTerminatorCharacters,positionTracking:r.positionTracking,ensureOptimizations:r.ensureOptimizations,safeMode:r.safeMode,tracer:this.TRACE_INIT})}),this.patternIdxToConfig[u]=h.patternIdxToConfig,this.charCodeToPatternIdxToConfig[u]=h.charCodeToPatternIdxToConfig,this.emptyGroups=pa({},this.emptyGroups,h.emptyGroups),this.hasCustom=h.hasCustom||this.hasCustom,this.canModeBeOptimized[u]=h.canBeOptimized}})}),this.defaultMode=i.defaultMode,!hr(this.lexerDefinitionErrors)&&!this.config.deferDefinitionErrorsHandling){let u=Je(this.lexerDefinitionErrors,h=>h.message).join(`----------------------- `);throw new Error(`Errors detected in definition of Lexer: -`+u)}Ae(this.lexerDefinitionWarning,l=>{ox(l.message)}),this.TRACE_INIT("Choosing sub-methods implementations",()=>{if(NN?(this.chopInput=ta,this.match=this.matchWithTest):(this.updateLastIndex=ni,this.match=this.matchWithExec),a&&(this.handleModes=ni),this.trackStartLines===!1&&(this.computeNewColumn=ta),this.trackEndLines===!1&&(this.updateTokenEndLineColumnLocation=ni),/full/i.test(this.config.positionTracking))this.createTokenInstance=this.createFullToken;else if(/onlyStart/i.test(this.config.positionTracking))this.createTokenInstance=this.createStartOnlyToken;else if(/onlyOffset/i.test(this.config.positionTracking))this.createTokenInstance=this.createOffsetOnlyToken;else throw Error(`Invalid config option: "${this.config.positionTracking}"`);this.hasCustom?(this.addToken=this.addTokenUsingPush,this.handlePayload=this.handlePayloadWithCustom):(this.addToken=this.addTokenUsingMemberAccess,this.handlePayload=this.handlePayloadNoCustom)}),this.TRACE_INIT("Failed Optimization Warnings",()=>{let l=Xr(this.canModeBeOptimized,(u,h,f)=>(h===!1&&u.push(f),u),[]);if(r.ensureOptimizations&&!ur(l))throw Error(`Lexer Modes: < ${l.join(", ")} > cannot be optimized. +`+u)}Ae(this.lexerDefinitionWarning,l=>{ux(l.message)}),this.TRACE_INIT("Choosing sub-methods implementations",()=>{if(uM?(this.chopInput=ta,this.match=this.matchWithTest):(this.updateLastIndex=ai,this.match=this.matchWithExec),a&&(this.handleModes=ai),this.trackStartLines===!1&&(this.computeNewColumn=ta),this.trackEndLines===!1&&(this.updateTokenEndLineColumnLocation=ai),/full/i.test(this.config.positionTracking))this.createTokenInstance=this.createFullToken;else if(/onlyStart/i.test(this.config.positionTracking))this.createTokenInstance=this.createStartOnlyToken;else if(/onlyOffset/i.test(this.config.positionTracking))this.createTokenInstance=this.createOffsetOnlyToken;else throw Error(`Invalid config option: "${this.config.positionTracking}"`);this.hasCustom?(this.addToken=this.addTokenUsingPush,this.handlePayload=this.handlePayloadWithCustom):(this.addToken=this.addTokenUsingMemberAccess,this.handlePayload=this.handlePayloadNoCustom)}),this.TRACE_INIT("Failed Optimization Warnings",()=>{let l=Xr(this.canModeBeOptimized,(u,h,f)=>(h===!1&&u.push(f),u),[]);if(r.ensureOptimizations&&!hr(l))throw Error(`Lexer Modes: < ${l.join(", ")} > cannot be optimized. Disable the "ensureOptimizations" lexer config flag to silently ignore this and run the lexer in an un-optimized mode. - Or inspect the console log for details on how to resolve these issues.`)}),this.TRACE_INIT("clearRegExpParserCache",()=>{Gae()}),this.TRACE_INIT("toFastProperties",()=>{cx(this)})})}tokenize(e,r=this.defaultMode){if(!ur(this.lexerDefinitionErrors)){let i=Je(this.lexerDefinitionErrors,a=>a.message).join(`----------------------- + Or inspect the console log for details on how to resolve these issues.`)}),this.TRACE_INIT("clearRegExpParserCache",()=>{Zse()}),this.TRACE_INIT("toFastProperties",()=>{fx(this)})})}tokenize(e,r=this.defaultMode){if(!hr(this.lexerDefinitionErrors)){let i=Je(this.lexerDefinitionErrors,a=>a.message).join(`----------------------- `);throw new Error(`Unable to Tokenize because Errors detected in definition of Lexer: -`+i)}return this.tokenizeInternal(e,r)}tokenizeInternal(e,r){let n,i,a,s,l,u,h,f,d,p,m,g,y,v,x,b,w=e,C=w.length,T=0,E=0,A=this.hasCustom?0:Math.floor(e.length/10),S=new Array(A),_=[],I=this.trackStartLines?1:void 0,L=this.trackStartLines?1:void 0,k=Zae(this.emptyGroups),D=this.trackStartLines,R=this.config.lineTerminatorsPattern,O=0,M=[],P=[],B=[],F=[];Object.freeze(F);let z;function $(){return M}o($,"getPossiblePatternsSlow");function U(Z){let ue=Bc(Z),K=P[ue];return K===void 0?F:K}o(U,"getPossiblePatternsOptimized");let Q=o(Z=>{if(B.length===1&&Z.tokenType.PUSH_MODE===void 0){let ue=this.config.errorMessageProvider.buildUnableToPopLexerModeMessage(Z);_.push({offset:Z.startOffset,line:Z.startLine,column:Z.startColumn,length:Z.image.length,message:ue})}else{B.pop();let ue=ga(B);M=this.patternIdxToConfig[ue],P=this.charCodeToPatternIdxToConfig[ue],O=M.length;let K=this.canModeBeOptimized[ue]&&this.config.safeMode===!1;P&&K?z=U:z=$}},"pop_mode");function te(Z){B.push(Z),P=this.charCodeToPatternIdxToConfig[Z],M=this.patternIdxToConfig[Z],O=M.length,O=M.length;let ue=this.canModeBeOptimized[Z]&&this.config.safeMode===!1;P&&ue?z=U:z=$}o(te,"push_mode"),te.call(this,r);let Y,he=this.config.recoveryEnabled;for(;Tu.length){u=s,h=f,Y=ce;break}}}break}}if(u!==null){if(d=u.length,p=Y.group,p!==void 0&&(m=Y.tokenTypeIdx,g=this.createTokenInstance(u,T,m,Y.tokenType,I,L,d),this.handlePayload(g,h),p===!1?E=this.addToken(S,E,g):k[p].push(g)),e=this.chopInput(e,d),T=T+d,L=this.computeNewColumn(L,d),D===!0&&Y.canLineTerminator===!0){let j=0,ne,ee;R.lastIndex=0;do ne=R.test(u),ne===!0&&(ee=R.lastIndex-1,j++);while(ne===!0);j!==0&&(I=I+j,L=d-ee,this.updateTokenEndLineColumnLocation(g,p,ee,j,I,L,d))}this.handleModes(Y,Q,te,g)}else{let j=T,ne=I,ee=L,ce=he===!1;for(;ce===!1&&T{"use strict";qt();hx();gp();o(Vu,"tokenLabel");o(ON,"hasTokenLabel");UPe="parent",lse="categories",cse="label",use="group",hse="push_mode",fse="pop_mode",dse="longer_alt",pse="line_breaks",mse="start_chars_hint";o(hf,"createToken");o(HPe,"createTokenInternal");uo=hf({name:"EOF",pattern:Xn.NA});Gu([uo]);o(Uu,"createTokenInstance");o(dx,"tokenMatcher")});var Hu,gse,Fl,Kg=N(()=>{"use strict";yp();qt();os();Hu={buildMismatchTokenMessage({expected:t,actual:e,previous:r,ruleName:n}){return`Expecting ${ON(t)?`--> ${Vu(t)} <--`:`token of type --> ${t.name} <--`} but found --> '${e.image}' <--`},buildNotAllInputParsedMessage({firstRedundant:t,ruleName:e}){return"Redundant input, expecting EOF but found: "+t.image},buildNoViableAltMessage({expectedPathsPerAlt:t,actual:e,previous:r,customUserDescription:n,ruleName:i}){let a="Expecting: ",l=` -but found: '`+ia(e).image+"'";if(n)return a+n+l;{let u=Xr(t,(p,m)=>p.concat(m),[]),h=Je(u,p=>`[${Je(p,m=>Vu(m)).join(", ")}]`),d=`one of these possible Token sequences: +`+i)}return this.tokenizeInternal(e,r)}tokenizeInternal(e,r){let n,i,a,s,l,u,h,f,d,p,m,g,y,v,x,b,T=e,S=T.length,w=0,E=0,_=this.hasCustom?0:Math.floor(e.length/10),C=new Array(_),D=[],O=this.trackStartLines?1:void 0,R=this.trackStartLines?1:void 0,k=coe(this.emptyGroups),L=this.trackStartLines,A=this.config.lineTerminatorsPattern,I=0,M=[],P=[],B=[],F=[];Object.freeze(F);let z;function $(){return M}o($,"getPossiblePatternsSlow");function U(Z){let ue=$c(Z),Q=P[ue];return Q===void 0?F:Q}o(U,"getPossiblePatternsOptimized");let K=o(Z=>{if(B.length===1&&Z.tokenType.PUSH_MODE===void 0){let ue=this.config.errorMessageProvider.buildUnableToPopLexerModeMessage(Z);D.push({offset:Z.startOffset,line:Z.startLine,column:Z.startColumn,length:Z.image.length,message:ue})}else{B.pop();let ue=ma(B);M=this.patternIdxToConfig[ue],P=this.charCodeToPatternIdxToConfig[ue],I=M.length;let Q=this.canModeBeOptimized[ue]&&this.config.safeMode===!1;P&&Q?z=U:z=$}},"pop_mode");function ee(Z){B.push(Z),P=this.charCodeToPatternIdxToConfig[Z],M=this.patternIdxToConfig[Z],I=M.length,I=M.length;let ue=this.canModeBeOptimized[Z]&&this.config.safeMode===!1;P&&ue?z=U:z=$}o(ee,"push_mode"),ee.call(this,r);let Y,ce=this.config.recoveryEnabled;for(;wu.length){u=s,h=f,Y=he;break}}}break}}if(u!==null){if(d=u.length,p=Y.group,p!==void 0&&(m=Y.tokenTypeIdx,g=this.createTokenInstance(u,w,m,Y.tokenType,O,R,d),this.handlePayload(g,h),p===!1?E=this.addToken(C,E,g):k[p].push(g)),e=this.chopInput(e,d),w=w+d,R=this.computeNewColumn(R,d),L===!0&&Y.canLineTerminator===!0){let j=0,ne,te;A.lastIndex=0;do ne=A.test(u),ne===!0&&(te=A.lastIndex-1,j++);while(ne===!0);j!==0&&(O=O+j,R=d-te,this.updateTokenEndLineColumnLocation(g,p,te,j,O,R,d))}this.handleModes(Y,K,ee,g)}else{let j=w,ne=O,te=R,he=ce===!1;for(;he===!1&&w{"use strict";qt();px();xp();o(Hu,"tokenLabel");o(dM,"hasTokenLabel");TFe="parent",xoe="categories",boe="label",Toe="group",woe="push_mode",koe="pop_mode",Eoe="longer_alt",Soe="line_breaks",Coe="start_chars_hint";o(df,"createToken");o(wFe,"createTokenInternal");fo=df({name:"EOF",pattern:Kn.NA});Uu([fo]);o(Wu,"createTokenInstance");o(gx,"tokenMatcher")});var qu,Aoe,$l,Qg=N(()=>{"use strict";bp();qt();fs();qu={buildMismatchTokenMessage({expected:t,actual:e,previous:r,ruleName:n}){return`Expecting ${dM(t)?`--> ${Hu(t)} <--`:`token of type --> ${t.name} <--`} but found --> '${e.image}' <--`},buildNotAllInputParsedMessage({firstRedundant:t,ruleName:e}){return"Redundant input, expecting EOF but found: "+t.image},buildNoViableAltMessage({expectedPathsPerAlt:t,actual:e,previous:r,customUserDescription:n,ruleName:i}){let a="Expecting: ",l=` +but found: '`+ia(e).image+"'";if(n)return a+n+l;{let u=Xr(t,(p,m)=>p.concat(m),[]),h=Je(u,p=>`[${Je(p,m=>Hu(m)).join(", ")}]`),d=`one of these possible Token sequences: ${Je(h,(p,m)=>` ${m+1}. ${p}`).join(` `)}`;return a+d+l}},buildEarlyExitMessage({expectedIterationPaths:t,actual:e,customUserDescription:r,ruleName:n}){let i="Expecting: ",s=` but found: '`+ia(e).image+"'";if(r)return i+r+s;{let u=`expecting at least one iteration which starts with one of these possible Token sequences:: - <${Je(t,h=>`[${Je(h,f=>Vu(f)).join(",")}]`).join(" ,")}>`;return i+u+s}}};Object.freeze(Hu);gse={buildRuleNotFoundError(t,e){return"Invalid grammar, reference to a rule which is not defined: ->"+e.nonTerminalName+`<- -inside top level rule: ->`+t.name+"<-"}},Fl={buildDuplicateFoundError(t,e){function r(f){return f instanceof kr?f.terminalType.name:f instanceof on?f.nonTerminalName:""}o(r,"getExtraProductionArgument");let n=t.name,i=ia(e),a=i.idx,s=$s(i),l=r(i),u=a>0,h=`->${s}${u?a:""}<- ${l?`with argument: ->${l}<-`:""} + <${Je(t,h=>`[${Je(h,f=>Hu(f)).join(",")}]`).join(" ,")}>`;return i+u+s}}};Object.freeze(qu);Aoe={buildRuleNotFoundError(t,e){return"Invalid grammar, reference to a rule which is not defined: ->"+e.nonTerminalName+`<- +inside top level rule: ->`+t.name+"<-"}},$l={buildDuplicateFoundError(t,e){function r(f){return f instanceof Er?f.terminalType.name:f instanceof on?f.nonTerminalName:""}o(r,"getExtraProductionArgument");let n=t.name,i=ia(e),a=i.idx,s=Vs(i),l=r(i),u=a>0,h=`->${s}${u?a:""}<- ${l?`with argument: ->${l}<-`:""} appears more than once (${e.length} times) in the top level rule: ->${n}<-. For further details see: https://chevrotain.io/docs/FAQ.html#NUMERICAL_SUFFIXES `;return h=h.replace(/[ \t]+/g," "),h=h.replace(/\s\s+/g,` @@ -770,14 +770,14 @@ inside top level rule: ->`+t.name+"<-"}},Fl={buildDuplicateFoundError(t,e){funct The grammar has both a Terminal(Token) and a Non-Terminal(Rule) named: <${t.name}>. To resolve this make sure each Terminal and Non-Terminal names are unique This is easy to accomplish by using the convention that Terminal names start with an uppercase letter -and Non-Terminal names start with a lower case letter.`},buildAlternationPrefixAmbiguityError(t){let e=Je(t.prefixPath,i=>Vu(i)).join(", "),r=t.alternation.idx===0?"":t.alternation.idx;return`Ambiguous alternatives: <${t.ambiguityIndices.join(" ,")}> due to common lookahead prefix +and Non-Terminal names start with a lower case letter.`},buildAlternationPrefixAmbiguityError(t){let e=Je(t.prefixPath,i=>Hu(i)).join(", "),r=t.alternation.idx===0?"":t.alternation.idx;return`Ambiguous alternatives: <${t.ambiguityIndices.join(" ,")}> due to common lookahead prefix in inside <${t.topLevelRule.name}> Rule, <${e}> may appears as a prefix path in all these alternatives. See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#COMMON_PREFIX -For Further details.`},buildAlternationAmbiguityError(t){let e=Je(t.prefixPath,i=>Vu(i)).join(", "),r=t.alternation.idx===0?"":t.alternation.idx,n=`Ambiguous Alternatives Detected: <${t.ambiguityIndices.join(" ,")}> in inside <${t.topLevelRule.name}> Rule, +For Further details.`},buildAlternationAmbiguityError(t){let e=Je(t.prefixPath,i=>Hu(i)).join(", "),r=t.alternation.idx===0?"":t.alternation.idx,n=`Ambiguous Alternatives Detected: <${t.ambiguityIndices.join(" ,")}> in inside <${t.topLevelRule.name}> Rule, <${e}> may appears as a prefix path in all these alternatives. `;return n=n+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES -For Further details.`,n},buildEmptyRepetitionError(t){let e=$s(t.repetition);return t.repetition.idx!==0&&(e+=t.repetition.idx),`The repetition <${e}> within Rule <${t.topLevelRule.name}> can never consume any tokens. +For Further details.`,n},buildEmptyRepetitionError(t){let e=Vs(t.repetition);return t.repetition.idx!==0&&(e+=t.repetition.idx),`The repetition <${e}> within Rule <${t.topLevelRule.name}> can never consume any tokens. This could lead to an infinite loop.`},buildTokenNameError(t){return"deprecated"},buildEmptyAlternationError(t){return`Ambiguous empty alternative: <${t.emptyChoiceIdx+1}> in inside <${t.topLevelRule.name}> Rule. Only the last alternative may be an empty alternative.`},buildTooManyAlternativesError(t){return`An Alternation cannot have more than 256 alternatives: inside <${t.topLevelRule.name}> Rule. @@ -786,62 +786,62 @@ rule: <${e}> can be invoked from itself (directly or indirectly) without consuming any Tokens. The grammar path that causes this is: ${n} To fix this refactor your grammar to remove the left recursion. -see: https://en.wikipedia.org/wiki/LL_parser#Left_factoring.`},buildInvalidRuleNameError(t){return"deprecated"},buildDuplicateRuleNameError(t){let e;return t.topLevelRule instanceof as?e=t.topLevelRule.name:e=t.topLevelRule,`Duplicate definition, rule: ->${e}<- is already defined in the grammar: ->${t.grammarName}<-`}}});function yse(t,e){let r=new PN(t,e);return r.resolveRefs(),r.errors}var PN,vse=N(()=>{"use strict";zs();qt();os();o(yse,"resolveGrammar");PN=class extends ss{static{o(this,"GastRefResolverVisitor")}constructor(e,r){super(),this.nameToTopRule=e,this.errMsgProvider=r,this.errors=[]}resolveRefs(){Ae(br(this.nameToTopRule),e=>{this.currTopLevel=e,e.accept(this)})}visitNonTerminal(e){let r=this.nameToTopRule[e.nonTerminalName];if(r)e.referencedRule=r;else{let n=this.errMsgProvider.buildRuleNotFoundError(this.currTopLevel,e);this.errors.push({message:n,type:Gi.UNRESOLVED_SUBRULE_REF,ruleName:this.currTopLevel.name,unresolvedRefName:e.nonTerminalName})}}}});function Wk(t,e,r=[]){r=an(r);let n=[],i=0;function a(l){return l.concat(yi(t,i+1))}o(a,"remainingPathWith");function s(l){let u=Wk(a(l),e,r);return n.concat(u)}for(o(s,"getAlternativesForProd");r.length{ur(u.definition)===!1&&(n=s(u.definition))}),n;if(l instanceof kr)r.push(l.terminalType);else throw Error("non exhaustive match")}i++}return n.push({partialPath:r,suffixDef:yi(t,i)}),n}function qk(t,e,r,n){let i="EXIT_NONE_TERMINAL",a=[i],s="EXIT_ALTERNATIVE",l=!1,u=e.length,h=u-n-1,f=[],d=[];for(d.push({idx:-1,def:t,ruleStack:[],occurrenceStack:[]});!ur(d);){let p=d.pop();if(p===s){l&&ga(d).idx<=h&&d.pop();continue}let m=p.def,g=p.idx,y=p.ruleStack,v=p.occurrenceStack;if(ur(m))continue;let x=m[0];if(x===i){let b={idx:g,def:yi(m),ruleStack:Pu(y),occurrenceStack:Pu(v)};d.push(b)}else if(x instanceof kr)if(g=0;b--){let w=x.definition[b],C={idx:g,def:w.definition.concat(yi(m)),ruleStack:y,occurrenceStack:v};d.push(C),d.push(s)}else if(x instanceof Dn)d.push({idx:g,def:x.definition.concat(yi(m)),ruleStack:y,occurrenceStack:v});else if(x instanceof as)d.push(WPe(x,g,y,v));else throw Error("non exhaustive match")}return f}function WPe(t,e,r,n){let i=an(r);i.push(t.name);let a=an(n);return a.push(1),{idx:e,def:t.definition,ruleStack:i,occurrenceStack:a}}var BN,Vk,Qg,Uk,px,Hk,mx,gx=N(()=>{"use strict";qt();EN();Ik();os();BN=class extends $u{static{o(this,"AbstractNextPossibleTokensWalker")}constructor(e,r){super(),this.topProd=e,this.path=r,this.possibleTokTypes=[],this.nextProductionName="",this.nextProductionOccurrence=0,this.found=!1,this.isAtEndOfPath=!1}startWalking(){if(this.found=!1,this.path.ruleStack[0]!==this.topProd.name)throw Error("The path does not start with the walker's top Rule!");return this.ruleStack=an(this.path.ruleStack).reverse(),this.occurrenceStack=an(this.path.occurrenceStack).reverse(),this.ruleStack.pop(),this.occurrenceStack.pop(),this.updateExpectedNext(),this.walk(this.topProd),this.possibleTokTypes}walk(e,r=[]){this.found||super.walk(e,r)}walkProdRef(e,r,n){if(e.referencedRule.name===this.nextProductionName&&e.idx===this.nextProductionOccurrence){let i=r.concat(n);this.updateExpectedNext(),this.walk(e.referencedRule,i)}}updateExpectedNext(){ur(this.ruleStack)?(this.nextProductionName="",this.nextProductionOccurrence=0,this.isAtEndOfPath=!0):(this.nextProductionName=this.ruleStack.pop(),this.nextProductionOccurrence=this.occurrenceStack.pop())}},Vk=class extends BN{static{o(this,"NextAfterTokenWalker")}constructor(e,r){super(e,r),this.path=r,this.nextTerminalName="",this.nextTerminalOccurrence=0,this.nextTerminalName=this.path.lastTok.name,this.nextTerminalOccurrence=this.path.lastTokOccurrence}walkTerminal(e,r,n){if(this.isAtEndOfPath&&e.terminalType.name===this.nextTerminalName&&e.idx===this.nextTerminalOccurrence&&!this.found){let i=r.concat(n),a=new Dn({definition:i});this.possibleTokTypes=pp(a),this.found=!0}}},Qg=class extends $u{static{o(this,"AbstractNextTerminalAfterProductionWalker")}constructor(e,r){super(),this.topRule=e,this.occurrence=r,this.result={token:void 0,occurrence:void 0,isEndOfRule:void 0}}startWalking(){return this.walk(this.topRule),this.result}},Uk=class extends Qg{static{o(this,"NextTerminalAfterManyWalker")}walkMany(e,r,n){if(e.idx===this.occurrence){let i=ia(r.concat(n));this.result.isEndOfRule=i===void 0,i instanceof kr&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkMany(e,r,n)}},px=class extends Qg{static{o(this,"NextTerminalAfterManySepWalker")}walkManySep(e,r,n){if(e.idx===this.occurrence){let i=ia(r.concat(n));this.result.isEndOfRule=i===void 0,i instanceof kr&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkManySep(e,r,n)}},Hk=class extends Qg{static{o(this,"NextTerminalAfterAtLeastOneWalker")}walkAtLeastOne(e,r,n){if(e.idx===this.occurrence){let i=ia(r.concat(n));this.result.isEndOfRule=i===void 0,i instanceof kr&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkAtLeastOne(e,r,n)}},mx=class extends Qg{static{o(this,"NextTerminalAfterAtLeastOneSepWalker")}walkAtLeastOneSep(e,r,n){if(e.idx===this.occurrence){let i=ia(r.concat(n));this.result.isEndOfRule=i===void 0,i instanceof kr&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkAtLeastOneSep(e,r,n)}};o(Wk,"possiblePathsFrom");o(qk,"nextPossibleTokensAfter");o(WPe,"expandTopLevelRule")});function yx(t){if(t instanceof ln||t==="Option")return jn.OPTION;if(t instanceof Or||t==="Repetition")return jn.REPETITION;if(t instanceof Ln||t==="RepetitionMandatory")return jn.REPETITION_MANDATORY;if(t instanceof Rn||t==="RepetitionMandatoryWithSeparator")return jn.REPETITION_MANDATORY_WITH_SEPARATOR;if(t instanceof wn||t==="RepetitionWithSeparator")return jn.REPETITION_WITH_SEPARATOR;if(t instanceof Tn||t==="Alternation")return jn.ALTERNATION;throw Error("non exhaustive match")}function Xk(t){let{occurrence:e,rule:r,prodType:n,maxLookahead:i}=t,a=yx(n);return a===jn.ALTERNATION?Zg(e,r,i):Jg(e,r,a,i)}function bse(t,e,r,n,i,a){let s=Zg(t,e,r),l=Cse(s)?Xg:zu;return a(s,n,l,i)}function wse(t,e,r,n,i,a){let s=Jg(t,e,i,r),l=Cse(s)?Xg:zu;return a(s[0],l,n)}function Tse(t,e,r,n){let i=t.length,a=Ma(t,s=>Ma(s,l=>l.length===1));if(e)return function(s){let l=Je(s,u=>u.GATE);for(let u=0;uqr(u)),l=Xr(s,(u,h,f)=>(Ae(h,d=>{Bt(u,d.tokenTypeIdx)||(u[d.tokenTypeIdx]=f),Ae(d.categoryMatches,p=>{Bt(u,p)||(u[p]=f)})}),u),{});return function(){let u=this.LA(1);return l[u.tokenTypeIdx]}}else return function(){for(let s=0;sa.length===1),i=t.length;if(n&&!r){let a=qr(t);if(a.length===1&&ur(a[0].categoryMatches)){let l=a[0].tokenTypeIdx;return function(){return this.LA(1).tokenTypeIdx===l}}else{let s=Xr(a,(l,u,h)=>(l[u.tokenTypeIdx]=!0,Ae(u.categoryMatches,f=>{l[f]=!0}),l),[]);return function(){let l=this.LA(1);return s[l.tokenTypeIdx]===!0}}}else return function(){e:for(let a=0;aWk([s],1)),n=xse(r.length),i=Je(r,s=>{let l={};return Ae(s,u=>{let h=FN(u.partialPath);Ae(h,f=>{l[f]=!0})}),l}),a=r;for(let s=1;s<=e;s++){let l=a;a=xse(l.length);for(let u=0;u{let x=FN(v.partialPath);Ae(x,b=>{i[u][b]=!0})})}}}}return n}function Zg(t,e,r,n){let i=new Yk(t,jn.ALTERNATION,n);return e.accept(i),Ese(i.result,r)}function Jg(t,e,r,n){let i=new Yk(t,r);e.accept(i);let a=i.result,l=new $N(e,t,r).startWalking(),u=new Dn({definition:a}),h=new Dn({definition:l});return Ese([u,h],n)}function jk(t,e){e:for(let r=0;r{let i=e[n];return r===i||i.categoryMatchesMap[r.tokenTypeIdx]})}function Cse(t){return Ma(t,e=>Ma(e,r=>Ma(r,n=>ur(n.categoryMatches))))}var jn,$N,Yk,e1=N(()=>{"use strict";qt();gx();Ik();gp();os();(function(t){t[t.OPTION=0]="OPTION",t[t.REPETITION=1]="REPETITION",t[t.REPETITION_MANDATORY=2]="REPETITION_MANDATORY",t[t.REPETITION_MANDATORY_WITH_SEPARATOR=3]="REPETITION_MANDATORY_WITH_SEPARATOR",t[t.REPETITION_WITH_SEPARATOR=4]="REPETITION_WITH_SEPARATOR",t[t.ALTERNATION=5]="ALTERNATION"})(jn||(jn={}));o(yx,"getProdType");o(Xk,"getLookaheadPaths");o(bse,"buildLookaheadFuncForOr");o(wse,"buildLookaheadFuncForOptionalProd");o(Tse,"buildAlternativesLookAheadFunc");o(kse,"buildSingleAlternativeLookaheadFunction");$N=class extends $u{static{o(this,"RestDefinitionFinderWalker")}constructor(e,r,n){super(),this.topProd=e,this.targetOccurrence=r,this.targetProdType=n}startWalking(){return this.walk(this.topProd),this.restDef}checkIsTarget(e,r,n,i){return e.idx===this.targetOccurrence&&this.targetProdType===r?(this.restDef=n.concat(i),!0):!1}walkOption(e,r,n){this.checkIsTarget(e,jn.OPTION,r,n)||super.walkOption(e,r,n)}walkAtLeastOne(e,r,n){this.checkIsTarget(e,jn.REPETITION_MANDATORY,r,n)||super.walkOption(e,r,n)}walkAtLeastOneSep(e,r,n){this.checkIsTarget(e,jn.REPETITION_MANDATORY_WITH_SEPARATOR,r,n)||super.walkOption(e,r,n)}walkMany(e,r,n){this.checkIsTarget(e,jn.REPETITION,r,n)||super.walkOption(e,r,n)}walkManySep(e,r,n){this.checkIsTarget(e,jn.REPETITION_WITH_SEPARATOR,r,n)||super.walkOption(e,r,n)}},Yk=class extends ss{static{o(this,"InsideDefinitionFinderVisitor")}constructor(e,r,n){super(),this.targetOccurrence=e,this.targetProdType=r,this.targetRef=n,this.result=[]}checkIsTarget(e,r){e.idx===this.targetOccurrence&&this.targetProdType===r&&(this.targetRef===void 0||e===this.targetRef)&&(this.result=e.definition)}visitOption(e){this.checkIsTarget(e,jn.OPTION)}visitRepetition(e){this.checkIsTarget(e,jn.REPETITION)}visitRepetitionMandatory(e){this.checkIsTarget(e,jn.REPETITION_MANDATORY)}visitRepetitionMandatoryWithSeparator(e){this.checkIsTarget(e,jn.REPETITION_MANDATORY_WITH_SEPARATOR)}visitRepetitionWithSeparator(e){this.checkIsTarget(e,jn.REPETITION_WITH_SEPARATOR)}visitAlternation(e){this.checkIsTarget(e,jn.ALTERNATION)}};o(xse,"initializeArrayOfArrays");o(FN,"pathToHashKeys");o(qPe,"isUniquePrefixHash");o(Ese,"lookAheadSequenceFromAlternatives");o(Zg,"getLookaheadPathsForOr");o(Jg,"getLookaheadPathsForOptionalProd");o(jk,"containsPath");o(Sse,"isStrictPrefixOfPath");o(Cse,"areTokenCategoriesNotUsed")});function Ase(t){let e=t.lookaheadStrategy.validate({rules:t.rules,tokenTypes:t.tokenTypes,grammarName:t.grammarName});return Je(e,r=>Object.assign({type:Gi.CUSTOM_LOOKAHEAD_VALIDATION},r))}function _se(t,e,r,n){let i=ya(t,u=>YPe(u,r)),a=JPe(t,e,r),s=ya(t,u=>KPe(u,r)),l=ya(t,u=>jPe(u,t,n,r));return i.concat(a,s,l)}function YPe(t,e){let r=new zN;t.accept(r);let n=r.allProductions,i=$L(n,XPe),a=Bs(i,l=>l.length>1);return Je(br(a),l=>{let u=ia(l),h=e.buildDuplicateFoundError(t,l),f=$s(u),d={message:h,type:Gi.DUPLICATE_PRODUCTIONS,ruleName:t.name,dslName:f,occurrence:u.idx},p=Dse(u);return p&&(d.parameter=p),d})}function XPe(t){return`${$s(t)}_#_${t.idx}_#_${Dse(t)}`}function Dse(t){return t instanceof kr?t.terminalType.name:t instanceof on?t.nonTerminalName:""}function jPe(t,e,r,n){let i=[];if(Xr(e,(s,l)=>l.name===t.name?s+1:s,0)>1){let s=n.buildDuplicateRuleNameError({topLevelRule:t,grammarName:r});i.push({message:s,type:Gi.DUPLICATE_RULE_NAME,ruleName:t.name})}return i}function Lse(t,e,r){let n=[],i;return qn(e,t)||(i=`Invalid rule override, rule: ->${t}<- cannot be overridden in the grammar: ->${r}<-as it is not defined in any of the super grammars `,n.push({message:i,type:Gi.INVALID_RULE_OVERRIDE,ruleName:t})),n}function VN(t,e,r,n=[]){let i=[],a=Kk(e.definition);if(ur(a))return[];{let s=t.name;qn(a,t)&&i.push({message:r.buildLeftRecursionError({topLevelRule:t,leftRecursionPath:n}),type:Gi.LEFT_RECURSION,ruleName:s});let u=rf(a,n.concat([t])),h=ya(u,f=>{let d=an(n);return d.push(f),VN(t,f,r,d)});return i.concat(h)}}function Kk(t){let e=[];if(ur(t))return e;let r=ia(t);if(r instanceof on)e.push(r.referencedRule);else if(r instanceof Dn||r instanceof ln||r instanceof Ln||r instanceof Rn||r instanceof wn||r instanceof Or)e=e.concat(Kk(r.definition));else if(r instanceof Tn)e=qr(Je(r.definition,a=>Kk(a.definition)));else if(!(r instanceof kr))throw Error("non exhaustive match");let n=dp(r),i=t.length>1;if(n&&i){let a=yi(t);return e.concat(Kk(a))}else return e}function Rse(t,e){let r=new vx;t.accept(r);let n=r.alternations;return ya(n,a=>{let s=Pu(a.definition);return ya(s,(l,u)=>{let h=qk([l],[],zu,1);return ur(h)?[{message:e.buildEmptyAlternationError({topLevelRule:t,alternation:a,emptyChoiceIdx:u}),type:Gi.NONE_LAST_EMPTY_ALT,ruleName:t.name,occurrence:a.idx,alternative:u+1}]:[]})})}function Nse(t,e,r){let n=new vx;t.accept(n);let i=n.alternations;return i=nf(i,s=>s.ignoreAmbiguities===!0),ya(i,s=>{let l=s.idx,u=s.maxLookahead||e,h=Zg(l,t,u,s),f=QPe(h,s,t,r),d=ZPe(h,s,t,r);return f.concat(d)})}function KPe(t,e){let r=new vx;t.accept(r);let n=r.alternations;return ya(n,a=>a.definition.length>255?[{message:e.buildTooManyAlternativesError({topLevelRule:t,alternation:a}),type:Gi.TOO_MANY_ALTS,ruleName:t.name,occurrence:a.idx}]:[])}function Mse(t,e,r){let n=[];return Ae(t,i=>{let a=new GN;i.accept(a);let s=a.allProductions;Ae(s,l=>{let u=yx(l),h=l.maxLookahead||e,f=l.idx,p=Jg(f,i,u,h)[0];if(ur(qr(p))){let m=r.buildEmptyRepetitionError({topLevelRule:i,repetition:l});n.push({message:m,type:Gi.NO_NON_EMPTY_LOOKAHEAD,ruleName:i.name})}})}),n}function QPe(t,e,r,n){let i=[],a=Xr(t,(l,u,h)=>(e.definition[h].ignoreAmbiguities===!0||Ae(u,f=>{let d=[h];Ae(t,(p,m)=>{h!==m&&jk(p,f)&&e.definition[m].ignoreAmbiguities!==!0&&d.push(m)}),d.length>1&&!jk(i,f)&&(i.push(f),l.push({alts:d,path:f}))}),l),[]);return Je(a,l=>{let u=Je(l.alts,f=>f+1);return{message:n.buildAlternationAmbiguityError({topLevelRule:r,alternation:e,ambiguityIndices:u,prefixPath:l.path}),type:Gi.AMBIGUOUS_ALTS,ruleName:r.name,occurrence:e.idx,alternatives:l.alts}})}function ZPe(t,e,r,n){let i=Xr(t,(s,l,u)=>{let h=Je(l,f=>({idx:u,path:f}));return s.concat(h)},[]);return Ec(ya(i,s=>{if(e.definition[s.idx].ignoreAmbiguities===!0)return[];let u=s.idx,h=s.path,f=Yr(i,p=>e.definition[p.idx].ignoreAmbiguities!==!0&&p.idx{let m=[p.idx+1,u+1],g=e.idx===0?"":e.idx;return{message:n.buildAlternationPrefixAmbiguityError({topLevelRule:r,alternation:e,ambiguityIndices:m,prefixPath:p.path}),type:Gi.AMBIGUOUS_PREFIX_ALTS,ruleName:r.name,occurrence:g,alternatives:m}})}))}function JPe(t,e,r){let n=[],i=Je(e,a=>a.name);return Ae(t,a=>{let s=a.name;if(qn(i,s)){let l=r.buildNamespaceConflictError(a);n.push({message:l,type:Gi.CONFLICT_TOKENS_RULES_NAMESPACE,ruleName:s})}}),n}var zN,vx,GN,xx=N(()=>{"use strict";qt();zs();os();e1();gx();gp();o(Ase,"validateLookahead");o(_se,"validateGrammar");o(YPe,"validateDuplicateProductions");o(XPe,"identifyProductionForDuplicates");o(Dse,"getExtraProductionArgument");zN=class extends ss{static{o(this,"OccurrenceValidationCollector")}constructor(){super(...arguments),this.allProductions=[]}visitNonTerminal(e){this.allProductions.push(e)}visitOption(e){this.allProductions.push(e)}visitRepetitionWithSeparator(e){this.allProductions.push(e)}visitRepetitionMandatory(e){this.allProductions.push(e)}visitRepetitionMandatoryWithSeparator(e){this.allProductions.push(e)}visitRepetition(e){this.allProductions.push(e)}visitAlternation(e){this.allProductions.push(e)}visitTerminal(e){this.allProductions.push(e)}};o(jPe,"validateRuleDoesNotAlreadyExist");o(Lse,"validateRuleIsOverridden");o(VN,"validateNoLeftRecursion");o(Kk,"getFirstNoneTerminal");vx=class extends ss{static{o(this,"OrCollector")}constructor(){super(...arguments),this.alternations=[]}visitAlternation(e){this.alternations.push(e)}};o(Rse,"validateEmptyOrAlternative");o(Nse,"validateAmbiguousAlternationAlternatives");GN=class extends ss{static{o(this,"RepetitionCollector")}constructor(){super(...arguments),this.allProductions=[]}visitRepetitionWithSeparator(e){this.allProductions.push(e)}visitRepetitionMandatory(e){this.allProductions.push(e)}visitRepetitionMandatoryWithSeparator(e){this.allProductions.push(e)}visitRepetition(e){this.allProductions.push(e)}};o(KPe,"validateTooManyAlts");o(Mse,"validateSomeNonEmptyLookaheadPath");o(QPe,"checkAlternativesAmbiguities");o(ZPe,"checkPrefixAlternativesAmbiguities");o(JPe,"checkTerminalAndNoneTerminalsNameSpace")});function Ise(t){let e=tf(t,{errMsgProvider:gse}),r={};return Ae(t.rules,n=>{r[n.name]=n}),yse(r,e.errMsgProvider)}function Ose(t){return t=tf(t,{errMsgProvider:Fl}),_se(t.rules,t.tokenTypes,t.errMsgProvider,t.grammarName)}var Pse=N(()=>{"use strict";qt();vse();xx();Kg();o(Ise,"resolveGrammar");o(Ose,"validateGrammar")});function ff(t){return qn(Gse,t.name)}var Bse,Fse,$se,zse,Gse,t1,vp,bx,wx,Tx,r1=N(()=>{"use strict";qt();Bse="MismatchedTokenException",Fse="NoViableAltException",$se="EarlyExitException",zse="NotAllInputParsedException",Gse=[Bse,Fse,$se,zse];Object.freeze(Gse);o(ff,"isRecognitionException");t1=class extends Error{static{o(this,"RecognitionException")}constructor(e,r){super(e),this.token=r,this.resyncedTokens=[],Object.setPrototypeOf(this,new.target.prototype),Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}},vp=class extends t1{static{o(this,"MismatchedTokenException")}constructor(e,r,n){super(e,r),this.previousToken=n,this.name=Bse}},bx=class extends t1{static{o(this,"NoViableAltException")}constructor(e,r,n){super(e,r),this.previousToken=n,this.name=Fse}},wx=class extends t1{static{o(this,"NotAllInputParsedException")}constructor(e,r){super(e,r),this.name=zse}},Tx=class extends t1{static{o(this,"EarlyExitException")}constructor(e,r,n){super(e,r),this.previousToken=n,this.name=$se}}});function eBe(t,e,r,n,i,a,s){let l=this.getKeyForAutomaticLookahead(n,i),u=this.firstAfterRepMap[l];if(u===void 0){let p=this.getCurrRuleFullName(),m=this.getGAstProductions()[p];u=new a(m,i).startWalking(),this.firstAfterRepMap[l]=u}let h=u.token,f=u.occurrence,d=u.isEndOfRule;this.RULE_STACK.length===1&&d&&h===void 0&&(h=uo,f=1),!(h===void 0||f===void 0)&&this.shouldInRepetitionRecoveryBeTried(h,f,s)&&this.tryInRepetitionRecovery(t,e,r,h)}var UN,WN,HN,Qk,qN=N(()=>{"use strict";yp();qt();r1();SN();zs();UN={},WN="InRuleRecoveryException",HN=class extends Error{static{o(this,"InRuleRecoveryException")}constructor(e){super(e),this.name=WN}},Qk=class{static{o(this,"Recoverable")}initRecoverable(e){this.firstAfterRepMap={},this.resyncFollows={},this.recoveryEnabled=Bt(e,"recoveryEnabled")?e.recoveryEnabled:ls.recoveryEnabled,this.recoveryEnabled&&(this.attemptInRepetitionRecovery=eBe)}getTokenToInsert(e){let r=Uu(e,"",NaN,NaN,NaN,NaN,NaN,NaN);return r.isInsertedInRecovery=!0,r}canTokenTypeBeInsertedInRecovery(e){return!0}canTokenTypeBeDeletedInRecovery(e){return!0}tryInRepetitionRecovery(e,r,n,i){let a=this.findReSyncTokenType(),s=this.exportLexerState(),l=[],u=!1,h=this.LA(1),f=this.LA(1),d=o(()=>{let p=this.LA(0),m=this.errorMessageProvider.buildMismatchTokenMessage({expected:i,actual:h,previous:p,ruleName:this.getCurrRuleFullName()}),g=new vp(m,h,this.LA(0));g.resyncedTokens=Pu(l),this.SAVE_ERROR(g)},"generateErrorMessage");for(;!u;)if(this.tokenMatcher(f,i)){d();return}else if(n.call(this)){d(),e.apply(this,r);return}else this.tokenMatcher(f,a)?u=!0:(f=this.SKIP_TOKEN(),this.addToResyncTokens(f,l));this.importLexerState(s)}shouldInRepetitionRecoveryBeTried(e,r,n){return!(n===!1||this.tokenMatcher(this.LA(1),e)||this.isBackTracking()||this.canPerformInRuleRecovery(e,this.getFollowsForInRuleRecovery(e,r)))}getFollowsForInRuleRecovery(e,r){let n=this.getCurrentGrammarPath(e,r);return this.getNextPossibleTokenTypes(n)}tryInRuleRecovery(e,r){if(this.canRecoverWithSingleTokenInsertion(e,r))return this.getTokenToInsert(e);if(this.canRecoverWithSingleTokenDeletion(e)){let n=this.SKIP_TOKEN();return this.consumeToken(),n}throw new HN("sad sad panda")}canPerformInRuleRecovery(e,r){return this.canRecoverWithSingleTokenInsertion(e,r)||this.canRecoverWithSingleTokenDeletion(e)}canRecoverWithSingleTokenInsertion(e,r){if(!this.canTokenTypeBeInsertedInRecovery(e)||ur(r))return!1;let n=this.LA(1);return ns(r,a=>this.tokenMatcher(n,a))!==void 0}canRecoverWithSingleTokenDeletion(e){return this.canTokenTypeBeDeletedInRecovery(e)?this.tokenMatcher(this.LA(2),e):!1}isInCurrentRuleReSyncSet(e){let r=this.getCurrFollowKey(),n=this.getFollowSetFromFollowKey(r);return qn(n,e)}findReSyncTokenType(){let e=this.flattenFollowSet(),r=this.LA(1),n=2;for(;;){let i=ns(e,a=>dx(r,a));if(i!==void 0)return i;r=this.LA(n),n++}}getCurrFollowKey(){if(this.RULE_STACK.length===1)return UN;let e=this.getLastExplicitRuleShortName(),r=this.getLastExplicitRuleOccurrenceIndex(),n=this.getPreviousExplicitRuleShortName();return{ruleName:this.shortRuleNameToFullName(e),idxInCallingRule:r,inRule:this.shortRuleNameToFullName(n)}}buildFullFollowKeyStack(){let e=this.RULE_STACK,r=this.RULE_OCCURRENCE_STACK;return Je(e,(n,i)=>i===0?UN:{ruleName:this.shortRuleNameToFullName(n),idxInCallingRule:r[i],inRule:this.shortRuleNameToFullName(e[i-1])})}flattenFollowSet(){let e=Je(this.buildFullFollowKeyStack(),r=>this.getFollowSetFromFollowKey(r));return qr(e)}getFollowSetFromFollowKey(e){if(e===UN)return[uo];let r=e.ruleName+e.idxInCallingRule+Ok+e.inRule;return this.resyncFollows[r]}addToResyncTokens(e,r){return this.tokenMatcher(e,uo)||r.push(e),r}reSyncTo(e){let r=[],n=this.LA(1);for(;this.tokenMatcher(n,e)===!1;)n=this.SKIP_TOKEN(),this.addToResyncTokens(n,r);return Pu(r)}attemptInRepetitionRecovery(e,r,n,i,a,s,l){}getCurrentGrammarPath(e,r){let n=this.getHumanReadableRuleStack(),i=an(this.RULE_OCCURRENCE_STACK);return{ruleStack:n,occurrenceStack:i,lastTok:e,lastTokOccurrence:r}}getHumanReadableRuleStack(){return Je(this.RULE_STACK,e=>this.shortRuleNameToFullName(e))}};o(eBe,"attemptInRepetitionRecovery")});function Zk(t,e,r){return r|e|t}var Jk=N(()=>{"use strict";o(Zk,"getKeyForAutomaticLookahead")});var Wu,YN=N(()=>{"use strict";qt();Kg();zs();xx();e1();Wu=class{static{o(this,"LLkLookaheadStrategy")}constructor(e){var r;this.maxLookahead=(r=e?.maxLookahead)!==null&&r!==void 0?r:ls.maxLookahead}validate(e){let r=this.validateNoLeftRecursion(e.rules);if(ur(r)){let n=this.validateEmptyOrAlternatives(e.rules),i=this.validateAmbiguousAlternationAlternatives(e.rules,this.maxLookahead),a=this.validateSomeNonEmptyLookaheadPath(e.rules,this.maxLookahead);return[...r,...n,...i,...a]}return r}validateNoLeftRecursion(e){return ya(e,r=>VN(r,r,Fl))}validateEmptyOrAlternatives(e){return ya(e,r=>Rse(r,Fl))}validateAmbiguousAlternationAlternatives(e,r){return ya(e,n=>Nse(n,r,Fl))}validateSomeNonEmptyLookaheadPath(e,r){return Mse(e,r,Fl)}buildLookaheadForAlternation(e){return bse(e.prodOccurrence,e.rule,e.maxLookahead,e.hasPredicates,e.dynamicTokensEnabled,Tse)}buildLookaheadForOptional(e){return wse(e.prodOccurrence,e.rule,e.maxLookahead,e.dynamicTokensEnabled,yx(e.prodType),kse)}}});function tBe(t){eE.reset(),t.accept(eE);let e=eE.dslMethods;return eE.reset(),e}var tE,XN,eE,Vse=N(()=>{"use strict";qt();zs();Jk();os();YN();tE=class{static{o(this,"LooksAhead")}initLooksAhead(e){this.dynamicTokensEnabled=Bt(e,"dynamicTokensEnabled")?e.dynamicTokensEnabled:ls.dynamicTokensEnabled,this.maxLookahead=Bt(e,"maxLookahead")?e.maxLookahead:ls.maxLookahead,this.lookaheadStrategy=Bt(e,"lookaheadStrategy")?e.lookaheadStrategy:new Wu({maxLookahead:this.maxLookahead}),this.lookAheadFuncsCache=new Map}preComputeLookaheadFunctions(e){Ae(e,r=>{this.TRACE_INIT(`${r.name} Rule Lookahead`,()=>{let{alternation:n,repetition:i,option:a,repetitionMandatory:s,repetitionMandatoryWithSeparator:l,repetitionWithSeparator:u}=tBe(r);Ae(n,h=>{let f=h.idx===0?"":h.idx;this.TRACE_INIT(`${$s(h)}${f}`,()=>{let d=this.lookaheadStrategy.buildLookaheadForAlternation({prodOccurrence:h.idx,rule:r,maxLookahead:h.maxLookahead||this.maxLookahead,hasPredicates:h.hasPredicates,dynamicTokensEnabled:this.dynamicTokensEnabled}),p=Zk(this.fullRuleNameToShort[r.name],256,h.idx);this.setLaFuncCache(p,d)})}),Ae(i,h=>{this.computeLookaheadFunc(r,h.idx,768,"Repetition",h.maxLookahead,$s(h))}),Ae(a,h=>{this.computeLookaheadFunc(r,h.idx,512,"Option",h.maxLookahead,$s(h))}),Ae(s,h=>{this.computeLookaheadFunc(r,h.idx,1024,"RepetitionMandatory",h.maxLookahead,$s(h))}),Ae(l,h=>{this.computeLookaheadFunc(r,h.idx,1536,"RepetitionMandatoryWithSeparator",h.maxLookahead,$s(h))}),Ae(u,h=>{this.computeLookaheadFunc(r,h.idx,1280,"RepetitionWithSeparator",h.maxLookahead,$s(h))})})})}computeLookaheadFunc(e,r,n,i,a,s){this.TRACE_INIT(`${s}${r===0?"":r}`,()=>{let l=this.lookaheadStrategy.buildLookaheadForOptional({prodOccurrence:r,rule:e,maxLookahead:a||this.maxLookahead,dynamicTokensEnabled:this.dynamicTokensEnabled,prodType:i}),u=Zk(this.fullRuleNameToShort[e.name],n,r);this.setLaFuncCache(u,l)})}getKeyForAutomaticLookahead(e,r){let n=this.getLastExplicitRuleShortName();return Zk(n,e,r)}getLaFuncFromCache(e){return this.lookAheadFuncsCache.get(e)}setLaFuncCache(e,r){this.lookAheadFuncsCache.set(e,r)}},XN=class extends ss{static{o(this,"DslMethodsCollectorVisitor")}constructor(){super(...arguments),this.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]}}reset(){this.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]}}visitOption(e){this.dslMethods.option.push(e)}visitRepetitionWithSeparator(e){this.dslMethods.repetitionWithSeparator.push(e)}visitRepetitionMandatory(e){this.dslMethods.repetitionMandatory.push(e)}visitRepetitionMandatoryWithSeparator(e){this.dslMethods.repetitionMandatoryWithSeparator.push(e)}visitRepetition(e){this.dslMethods.repetition.push(e)}visitAlternation(e){this.dslMethods.alternation.push(e)}},eE=new XN;o(tBe,"collectMethods")});function QN(t,e){isNaN(t.startOffset)===!0?(t.startOffset=e.startOffset,t.endOffset=e.endOffset):t.endOffset{"use strict";o(QN,"setNodeLocationOnlyOffset");o(ZN,"setNodeLocationFull");o(Use,"addTerminalToCst");o(Hse,"addNoneTerminalToCst")});function JN(t,e){Object.defineProperty(t,rBe,{enumerable:!1,configurable:!0,writable:!1,value:e})}var rBe,qse=N(()=>{"use strict";rBe="name";o(JN,"defineNameProp")});function nBe(t,e){let r=zr(t),n=r.length;for(let i=0;is.msg);throw Error(`Errors Detected in CST Visitor <${this.constructor.name}>: +see: https://en.wikipedia.org/wiki/LL_parser#Left_factoring.`},buildInvalidRuleNameError(t){return"deprecated"},buildDuplicateRuleNameError(t){let e;return t.topLevelRule instanceof us?e=t.topLevelRule.name:e=t.topLevelRule,`Duplicate definition, rule: ->${e}<- is already defined in the grammar: ->${t.grammarName}<-`}}});function _oe(t,e){let r=new pM(t,e);return r.resolveRefs(),r.errors}var pM,Doe=N(()=>{"use strict";Us();qt();fs();o(_oe,"resolveGrammar");pM=class extends hs{static{o(this,"GastRefResolverVisitor")}constructor(e,r){super(),this.nameToTopRule=e,this.errMsgProvider=r,this.errors=[]}resolveRefs(){Ae(br(this.nameToTopRule),e=>{this.currTopLevel=e,e.accept(this)})}visitNonTerminal(e){let r=this.nameToTopRule[e.nonTerminalName];if(r)e.referencedRule=r;else{let n=this.errMsgProvider.buildRuleNotFoundError(this.currTopLevel,e);this.errors.push({message:n,type:Vi.UNRESOLVED_SUBRULE_REF,ruleName:this.currTopLevel.name,unresolvedRefName:e.nonTerminalName})}}}});function Jk(t,e,r=[]){r=an(r);let n=[],i=0;function a(l){return l.concat(bi(t,i+1))}o(a,"remainingPathWith");function s(l){let u=Jk(a(l),e,r);return n.concat(u)}for(o(s,"getAlternativesForProd");r.length{hr(u.definition)===!1&&(n=s(u.definition))}),n;if(l instanceof Er)r.push(l.terminalType);else throw Error("non exhaustive match")}i++}return n.push({partialPath:r,suffixDef:bi(t,i)}),n}function eE(t,e,r,n){let i="EXIT_NONE_TERMINAL",a=[i],s="EXIT_ALTERNATIVE",l=!1,u=e.length,h=u-n-1,f=[],d=[];for(d.push({idx:-1,def:t,ruleStack:[],occurrenceStack:[]});!hr(d);){let p=d.pop();if(p===s){l&&ma(d).idx<=h&&d.pop();continue}let m=p.def,g=p.idx,y=p.ruleStack,v=p.occurrenceStack;if(hr(m))continue;let x=m[0];if(x===i){let b={idx:g,def:bi(m),ruleStack:Fu(y),occurrenceStack:Fu(v)};d.push(b)}else if(x instanceof Er)if(g=0;b--){let T=x.definition[b],S={idx:g,def:T.definition.concat(bi(m)),ruleStack:y,occurrenceStack:v};d.push(S),d.push(s)}else if(x instanceof Dn)d.push({idx:g,def:x.definition.concat(bi(m)),ruleStack:y,occurrenceStack:v});else if(x instanceof us)d.push(kFe(x,g,y,v));else throw Error("non exhaustive match")}return f}function kFe(t,e,r,n){let i=an(r);i.push(t.name);let a=an(n);return a.push(1),{idx:e,def:t.definition,ruleStack:i,occurrenceStack:a}}var mM,Kk,Zg,Qk,yx,Zk,vx,xx=N(()=>{"use strict";qt();rM();Vk();fs();mM=class extends Gu{static{o(this,"AbstractNextPossibleTokensWalker")}constructor(e,r){super(),this.topProd=e,this.path=r,this.possibleTokTypes=[],this.nextProductionName="",this.nextProductionOccurrence=0,this.found=!1,this.isAtEndOfPath=!1}startWalking(){if(this.found=!1,this.path.ruleStack[0]!==this.topProd.name)throw Error("The path does not start with the walker's top Rule!");return this.ruleStack=an(this.path.ruleStack).reverse(),this.occurrenceStack=an(this.path.occurrenceStack).reverse(),this.ruleStack.pop(),this.occurrenceStack.pop(),this.updateExpectedNext(),this.walk(this.topProd),this.possibleTokTypes}walk(e,r=[]){this.found||super.walk(e,r)}walkProdRef(e,r,n){if(e.referencedRule.name===this.nextProductionName&&e.idx===this.nextProductionOccurrence){let i=r.concat(n);this.updateExpectedNext(),this.walk(e.referencedRule,i)}}updateExpectedNext(){hr(this.ruleStack)?(this.nextProductionName="",this.nextProductionOccurrence=0,this.isAtEndOfPath=!0):(this.nextProductionName=this.ruleStack.pop(),this.nextProductionOccurrence=this.occurrenceStack.pop())}},Kk=class extends mM{static{o(this,"NextAfterTokenWalker")}constructor(e,r){super(e,r),this.path=r,this.nextTerminalName="",this.nextTerminalOccurrence=0,this.nextTerminalName=this.path.lastTok.name,this.nextTerminalOccurrence=this.path.lastTokOccurrence}walkTerminal(e,r,n){if(this.isAtEndOfPath&&e.terminalType.name===this.nextTerminalName&&e.idx===this.nextTerminalOccurrence&&!this.found){let i=r.concat(n),a=new Dn({definition:i});this.possibleTokTypes=yp(a),this.found=!0}}},Zg=class extends Gu{static{o(this,"AbstractNextTerminalAfterProductionWalker")}constructor(e,r){super(),this.topRule=e,this.occurrence=r,this.result={token:void 0,occurrence:void 0,isEndOfRule:void 0}}startWalking(){return this.walk(this.topRule),this.result}},Qk=class extends Zg{static{o(this,"NextTerminalAfterManyWalker")}walkMany(e,r,n){if(e.idx===this.occurrence){let i=ia(r.concat(n));this.result.isEndOfRule=i===void 0,i instanceof Er&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkMany(e,r,n)}},yx=class extends Zg{static{o(this,"NextTerminalAfterManySepWalker")}walkManySep(e,r,n){if(e.idx===this.occurrence){let i=ia(r.concat(n));this.result.isEndOfRule=i===void 0,i instanceof Er&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkManySep(e,r,n)}},Zk=class extends Zg{static{o(this,"NextTerminalAfterAtLeastOneWalker")}walkAtLeastOne(e,r,n){if(e.idx===this.occurrence){let i=ia(r.concat(n));this.result.isEndOfRule=i===void 0,i instanceof Er&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkAtLeastOne(e,r,n)}},vx=class extends Zg{static{o(this,"NextTerminalAfterAtLeastOneSepWalker")}walkAtLeastOneSep(e,r,n){if(e.idx===this.occurrence){let i=ia(r.concat(n));this.result.isEndOfRule=i===void 0,i instanceof Er&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkAtLeastOneSep(e,r,n)}};o(Jk,"possiblePathsFrom");o(eE,"nextPossibleTokensAfter");o(kFe,"expandTopLevelRule")});function bx(t){if(t instanceof ln||t==="Option")return Qn.OPTION;if(t instanceof Pr||t==="Repetition")return Qn.REPETITION;if(t instanceof Ln||t==="RepetitionMandatory")return Qn.REPETITION_MANDATORY;if(t instanceof Rn||t==="RepetitionMandatoryWithSeparator")return Qn.REPETITION_MANDATORY_WITH_SEPARATOR;if(t instanceof Tn||t==="RepetitionWithSeparator")return Qn.REPETITION_WITH_SEPARATOR;if(t instanceof wn||t==="Alternation")return Qn.ALTERNATION;throw Error("non exhaustive match")}function rE(t){let{occurrence:e,rule:r,prodType:n,maxLookahead:i}=t,a=bx(n);return a===Qn.ALTERNATION?Jg(e,r,i):e1(e,r,a,i)}function Roe(t,e,r,n,i,a){let s=Jg(t,e,r),l=Boe(s)?jg:Vu;return a(s,n,l,i)}function Noe(t,e,r,n,i,a){let s=e1(t,e,i,r),l=Boe(s)?jg:Vu;return a(s[0],l,n)}function Moe(t,e,r,n){let i=t.length,a=Pa(t,s=>Pa(s,l=>l.length===1));if(e)return function(s){let l=Je(s,u=>u.GATE);for(let u=0;uqr(u)),l=Xr(s,(u,h,f)=>(Ae(h,d=>{Bt(u,d.tokenTypeIdx)||(u[d.tokenTypeIdx]=f),Ae(d.categoryMatches,p=>{Bt(u,p)||(u[p]=f)})}),u),{});return function(){let u=this.LA(1);return l[u.tokenTypeIdx]}}else return function(){for(let s=0;sa.length===1),i=t.length;if(n&&!r){let a=qr(t);if(a.length===1&&hr(a[0].categoryMatches)){let l=a[0].tokenTypeIdx;return function(){return this.LA(1).tokenTypeIdx===l}}else{let s=Xr(a,(l,u,h)=>(l[u.tokenTypeIdx]=!0,Ae(u.categoryMatches,f=>{l[f]=!0}),l),[]);return function(){let l=this.LA(1);return s[l.tokenTypeIdx]===!0}}}else return function(){e:for(let a=0;aJk([s],1)),n=Loe(r.length),i=Je(r,s=>{let l={};return Ae(s,u=>{let h=gM(u.partialPath);Ae(h,f=>{l[f]=!0})}),l}),a=r;for(let s=1;s<=e;s++){let l=a;a=Loe(l.length);for(let u=0;u{let x=gM(v.partialPath);Ae(x,b=>{i[u][b]=!0})})}}}}return n}function Jg(t,e,r,n){let i=new tE(t,Qn.ALTERNATION,n);return e.accept(i),Ooe(i.result,r)}function e1(t,e,r,n){let i=new tE(t,r);e.accept(i);let a=i.result,l=new yM(e,t,r).startWalking(),u=new Dn({definition:a}),h=new Dn({definition:l});return Ooe([u,h],n)}function nE(t,e){e:for(let r=0;r{let i=e[n];return r===i||i.categoryMatchesMap[r.tokenTypeIdx]})}function Boe(t){return Pa(t,e=>Pa(e,r=>Pa(r,n=>hr(n.categoryMatches))))}var Qn,yM,tE,t1=N(()=>{"use strict";qt();xx();Vk();xp();fs();(function(t){t[t.OPTION=0]="OPTION",t[t.REPETITION=1]="REPETITION",t[t.REPETITION_MANDATORY=2]="REPETITION_MANDATORY",t[t.REPETITION_MANDATORY_WITH_SEPARATOR=3]="REPETITION_MANDATORY_WITH_SEPARATOR",t[t.REPETITION_WITH_SEPARATOR=4]="REPETITION_WITH_SEPARATOR",t[t.ALTERNATION=5]="ALTERNATION"})(Qn||(Qn={}));o(bx,"getProdType");o(rE,"getLookaheadPaths");o(Roe,"buildLookaheadFuncForOr");o(Noe,"buildLookaheadFuncForOptionalProd");o(Moe,"buildAlternativesLookAheadFunc");o(Ioe,"buildSingleAlternativeLookaheadFunction");yM=class extends Gu{static{o(this,"RestDefinitionFinderWalker")}constructor(e,r,n){super(),this.topProd=e,this.targetOccurrence=r,this.targetProdType=n}startWalking(){return this.walk(this.topProd),this.restDef}checkIsTarget(e,r,n,i){return e.idx===this.targetOccurrence&&this.targetProdType===r?(this.restDef=n.concat(i),!0):!1}walkOption(e,r,n){this.checkIsTarget(e,Qn.OPTION,r,n)||super.walkOption(e,r,n)}walkAtLeastOne(e,r,n){this.checkIsTarget(e,Qn.REPETITION_MANDATORY,r,n)||super.walkOption(e,r,n)}walkAtLeastOneSep(e,r,n){this.checkIsTarget(e,Qn.REPETITION_MANDATORY_WITH_SEPARATOR,r,n)||super.walkOption(e,r,n)}walkMany(e,r,n){this.checkIsTarget(e,Qn.REPETITION,r,n)||super.walkOption(e,r,n)}walkManySep(e,r,n){this.checkIsTarget(e,Qn.REPETITION_WITH_SEPARATOR,r,n)||super.walkOption(e,r,n)}},tE=class extends hs{static{o(this,"InsideDefinitionFinderVisitor")}constructor(e,r,n){super(),this.targetOccurrence=e,this.targetProdType=r,this.targetRef=n,this.result=[]}checkIsTarget(e,r){e.idx===this.targetOccurrence&&this.targetProdType===r&&(this.targetRef===void 0||e===this.targetRef)&&(this.result=e.definition)}visitOption(e){this.checkIsTarget(e,Qn.OPTION)}visitRepetition(e){this.checkIsTarget(e,Qn.REPETITION)}visitRepetitionMandatory(e){this.checkIsTarget(e,Qn.REPETITION_MANDATORY)}visitRepetitionMandatoryWithSeparator(e){this.checkIsTarget(e,Qn.REPETITION_MANDATORY_WITH_SEPARATOR)}visitRepetitionWithSeparator(e){this.checkIsTarget(e,Qn.REPETITION_WITH_SEPARATOR)}visitAlternation(e){this.checkIsTarget(e,Qn.ALTERNATION)}};o(Loe,"initializeArrayOfArrays");o(gM,"pathToHashKeys");o(EFe,"isUniquePrefixHash");o(Ooe,"lookAheadSequenceFromAlternatives");o(Jg,"getLookaheadPathsForOr");o(e1,"getLookaheadPathsForOptionalProd");o(nE,"containsPath");o(Poe,"isStrictPrefixOfPath");o(Boe,"areTokenCategoriesNotUsed")});function Foe(t){let e=t.lookaheadStrategy.validate({rules:t.rules,tokenTypes:t.tokenTypes,grammarName:t.grammarName});return Je(e,r=>Object.assign({type:Vi.CUSTOM_LOOKAHEAD_VALIDATION},r))}function $oe(t,e,r,n){let i=ga(t,u=>SFe(u,r)),a=RFe(t,e,r),s=ga(t,u=>_Fe(u,r)),l=ga(t,u=>AFe(u,t,n,r));return i.concat(a,s,l)}function SFe(t,e){let r=new vM;t.accept(r);let n=r.allProductions,i=yR(n,CFe),a=zs(i,l=>l.length>1);return Je(br(a),l=>{let u=ia(l),h=e.buildDuplicateFoundError(t,l),f=Vs(u),d={message:h,type:Vi.DUPLICATE_PRODUCTIONS,ruleName:t.name,dslName:f,occurrence:u.idx},p=zoe(u);return p&&(d.parameter=p),d})}function CFe(t){return`${Vs(t)}_#_${t.idx}_#_${zoe(t)}`}function zoe(t){return t instanceof Er?t.terminalType.name:t instanceof on?t.nonTerminalName:""}function AFe(t,e,r,n){let i=[];if(Xr(e,(s,l)=>l.name===t.name?s+1:s,0)>1){let s=n.buildDuplicateRuleNameError({topLevelRule:t,grammarName:r});i.push({message:s,type:Vi.DUPLICATE_RULE_NAME,ruleName:t.name})}return i}function Goe(t,e,r){let n=[],i;return Xn(e,t)||(i=`Invalid rule override, rule: ->${t}<- cannot be overridden in the grammar: ->${r}<-as it is not defined in any of the super grammars `,n.push({message:i,type:Vi.INVALID_RULE_OVERRIDE,ruleName:t})),n}function bM(t,e,r,n=[]){let i=[],a=iE(e.definition);if(hr(a))return[];{let s=t.name;Xn(a,t)&&i.push({message:r.buildLeftRecursionError({topLevelRule:t,leftRecursionPath:n}),type:Vi.LEFT_RECURSION,ruleName:s});let u=af(a,n.concat([t])),h=ga(u,f=>{let d=an(n);return d.push(f),bM(t,f,r,d)});return i.concat(h)}}function iE(t){let e=[];if(hr(t))return e;let r=ia(t);if(r instanceof on)e.push(r.referencedRule);else if(r instanceof Dn||r instanceof ln||r instanceof Ln||r instanceof Rn||r instanceof Tn||r instanceof Pr)e=e.concat(iE(r.definition));else if(r instanceof wn)e=qr(Je(r.definition,a=>iE(a.definition)));else if(!(r instanceof Er))throw Error("non exhaustive match");let n=gp(r),i=t.length>1;if(n&&i){let a=bi(t);return e.concat(iE(a))}else return e}function Voe(t,e){let r=new Tx;t.accept(r);let n=r.alternations;return ga(n,a=>{let s=Fu(a.definition);return ga(s,(l,u)=>{let h=eE([l],[],Vu,1);return hr(h)?[{message:e.buildEmptyAlternationError({topLevelRule:t,alternation:a,emptyChoiceIdx:u}),type:Vi.NONE_LAST_EMPTY_ALT,ruleName:t.name,occurrence:a.idx,alternative:u+1}]:[]})})}function Uoe(t,e,r){let n=new Tx;t.accept(n);let i=n.alternations;return i=sf(i,s=>s.ignoreAmbiguities===!0),ga(i,s=>{let l=s.idx,u=s.maxLookahead||e,h=Jg(l,t,u,s),f=DFe(h,s,t,r),d=LFe(h,s,t,r);return f.concat(d)})}function _Fe(t,e){let r=new Tx;t.accept(r);let n=r.alternations;return ga(n,a=>a.definition.length>255?[{message:e.buildTooManyAlternativesError({topLevelRule:t,alternation:a}),type:Vi.TOO_MANY_ALTS,ruleName:t.name,occurrence:a.idx}]:[])}function Hoe(t,e,r){let n=[];return Ae(t,i=>{let a=new xM;i.accept(a);let s=a.allProductions;Ae(s,l=>{let u=bx(l),h=l.maxLookahead||e,f=l.idx,p=e1(f,i,u,h)[0];if(hr(qr(p))){let m=r.buildEmptyRepetitionError({topLevelRule:i,repetition:l});n.push({message:m,type:Vi.NO_NON_EMPTY_LOOKAHEAD,ruleName:i.name})}})}),n}function DFe(t,e,r,n){let i=[],a=Xr(t,(l,u,h)=>(e.definition[h].ignoreAmbiguities===!0||Ae(u,f=>{let d=[h];Ae(t,(p,m)=>{h!==m&&nE(p,f)&&e.definition[m].ignoreAmbiguities!==!0&&d.push(m)}),d.length>1&&!nE(i,f)&&(i.push(f),l.push({alts:d,path:f}))}),l),[]);return Je(a,l=>{let u=Je(l.alts,f=>f+1);return{message:n.buildAlternationAmbiguityError({topLevelRule:r,alternation:e,ambiguityIndices:u,prefixPath:l.path}),type:Vi.AMBIGUOUS_ALTS,ruleName:r.name,occurrence:e.idx,alternatives:l.alts}})}function LFe(t,e,r,n){let i=Xr(t,(s,l,u)=>{let h=Je(l,f=>({idx:u,path:f}));return s.concat(h)},[]);return Ac(ga(i,s=>{if(e.definition[s.idx].ignoreAmbiguities===!0)return[];let u=s.idx,h=s.path,f=Yr(i,p=>e.definition[p.idx].ignoreAmbiguities!==!0&&p.idx{let m=[p.idx+1,u+1],g=e.idx===0?"":e.idx;return{message:n.buildAlternationPrefixAmbiguityError({topLevelRule:r,alternation:e,ambiguityIndices:m,prefixPath:p.path}),type:Vi.AMBIGUOUS_PREFIX_ALTS,ruleName:r.name,occurrence:g,alternatives:m}})}))}function RFe(t,e,r){let n=[],i=Je(e,a=>a.name);return Ae(t,a=>{let s=a.name;if(Xn(i,s)){let l=r.buildNamespaceConflictError(a);n.push({message:l,type:Vi.CONFLICT_TOKENS_RULES_NAMESPACE,ruleName:s})}}),n}var vM,Tx,xM,wx=N(()=>{"use strict";qt();Us();fs();t1();xx();xp();o(Foe,"validateLookahead");o($oe,"validateGrammar");o(SFe,"validateDuplicateProductions");o(CFe,"identifyProductionForDuplicates");o(zoe,"getExtraProductionArgument");vM=class extends hs{static{o(this,"OccurrenceValidationCollector")}constructor(){super(...arguments),this.allProductions=[]}visitNonTerminal(e){this.allProductions.push(e)}visitOption(e){this.allProductions.push(e)}visitRepetitionWithSeparator(e){this.allProductions.push(e)}visitRepetitionMandatory(e){this.allProductions.push(e)}visitRepetitionMandatoryWithSeparator(e){this.allProductions.push(e)}visitRepetition(e){this.allProductions.push(e)}visitAlternation(e){this.allProductions.push(e)}visitTerminal(e){this.allProductions.push(e)}};o(AFe,"validateRuleDoesNotAlreadyExist");o(Goe,"validateRuleIsOverridden");o(bM,"validateNoLeftRecursion");o(iE,"getFirstNoneTerminal");Tx=class extends hs{static{o(this,"OrCollector")}constructor(){super(...arguments),this.alternations=[]}visitAlternation(e){this.alternations.push(e)}};o(Voe,"validateEmptyOrAlternative");o(Uoe,"validateAmbiguousAlternationAlternatives");xM=class extends hs{static{o(this,"RepetitionCollector")}constructor(){super(...arguments),this.allProductions=[]}visitRepetitionWithSeparator(e){this.allProductions.push(e)}visitRepetitionMandatory(e){this.allProductions.push(e)}visitRepetitionMandatoryWithSeparator(e){this.allProductions.push(e)}visitRepetition(e){this.allProductions.push(e)}};o(_Fe,"validateTooManyAlts");o(Hoe,"validateSomeNonEmptyLookaheadPath");o(DFe,"checkAlternativesAmbiguities");o(LFe,"checkPrefixAlternativesAmbiguities");o(RFe,"checkTerminalAndNoneTerminalsNameSpace")});function Woe(t){let e=nf(t,{errMsgProvider:Aoe}),r={};return Ae(t.rules,n=>{r[n.name]=n}),_oe(r,e.errMsgProvider)}function qoe(t){return t=nf(t,{errMsgProvider:$l}),$oe(t.rules,t.tokenTypes,t.errMsgProvider,t.grammarName)}var Yoe=N(()=>{"use strict";qt();Doe();wx();Qg();o(Woe,"resolveGrammar");o(qoe,"validateGrammar")});function pf(t){return Xn(Zoe,t.name)}var Xoe,joe,Koe,Qoe,Zoe,r1,Tp,kx,Ex,Sx,n1=N(()=>{"use strict";qt();Xoe="MismatchedTokenException",joe="NoViableAltException",Koe="EarlyExitException",Qoe="NotAllInputParsedException",Zoe=[Xoe,joe,Koe,Qoe];Object.freeze(Zoe);o(pf,"isRecognitionException");r1=class extends Error{static{o(this,"RecognitionException")}constructor(e,r){super(e),this.token=r,this.resyncedTokens=[],Object.setPrototypeOf(this,new.target.prototype),Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}},Tp=class extends r1{static{o(this,"MismatchedTokenException")}constructor(e,r,n){super(e,r),this.previousToken=n,this.name=Xoe}},kx=class extends r1{static{o(this,"NoViableAltException")}constructor(e,r,n){super(e,r),this.previousToken=n,this.name=joe}},Ex=class extends r1{static{o(this,"NotAllInputParsedException")}constructor(e,r){super(e,r),this.name=Qoe}},Sx=class extends r1{static{o(this,"EarlyExitException")}constructor(e,r,n){super(e,r),this.previousToken=n,this.name=Koe}}});function NFe(t,e,r,n,i,a,s){let l=this.getKeyForAutomaticLookahead(n,i),u=this.firstAfterRepMap[l];if(u===void 0){let p=this.getCurrRuleFullName(),m=this.getGAstProductions()[p];u=new a(m,i).startWalking(),this.firstAfterRepMap[l]=u}let h=u.token,f=u.occurrence,d=u.isEndOfRule;this.RULE_STACK.length===1&&d&&h===void 0&&(h=fo,f=1),!(h===void 0||f===void 0)&&this.shouldInRepetitionRecoveryBeTried(h,f,s)&&this.tryInRepetitionRecovery(t,e,r,h)}var TM,kM,wM,aE,EM=N(()=>{"use strict";bp();qt();n1();nM();Us();TM={},kM="InRuleRecoveryException",wM=class extends Error{static{o(this,"InRuleRecoveryException")}constructor(e){super(e),this.name=kM}},aE=class{static{o(this,"Recoverable")}initRecoverable(e){this.firstAfterRepMap={},this.resyncFollows={},this.recoveryEnabled=Bt(e,"recoveryEnabled")?e.recoveryEnabled:ds.recoveryEnabled,this.recoveryEnabled&&(this.attemptInRepetitionRecovery=NFe)}getTokenToInsert(e){let r=Wu(e,"",NaN,NaN,NaN,NaN,NaN,NaN);return r.isInsertedInRecovery=!0,r}canTokenTypeBeInsertedInRecovery(e){return!0}canTokenTypeBeDeletedInRecovery(e){return!0}tryInRepetitionRecovery(e,r,n,i){let a=this.findReSyncTokenType(),s=this.exportLexerState(),l=[],u=!1,h=this.LA(1),f=this.LA(1),d=o(()=>{let p=this.LA(0),m=this.errorMessageProvider.buildMismatchTokenMessage({expected:i,actual:h,previous:p,ruleName:this.getCurrRuleFullName()}),g=new Tp(m,h,this.LA(0));g.resyncedTokens=Fu(l),this.SAVE_ERROR(g)},"generateErrorMessage");for(;!u;)if(this.tokenMatcher(f,i)){d();return}else if(n.call(this)){d(),e.apply(this,r);return}else this.tokenMatcher(f,a)?u=!0:(f=this.SKIP_TOKEN(),this.addToResyncTokens(f,l));this.importLexerState(s)}shouldInRepetitionRecoveryBeTried(e,r,n){return!(n===!1||this.tokenMatcher(this.LA(1),e)||this.isBackTracking()||this.canPerformInRuleRecovery(e,this.getFollowsForInRuleRecovery(e,r)))}getFollowsForInRuleRecovery(e,r){let n=this.getCurrentGrammarPath(e,r);return this.getNextPossibleTokenTypes(n)}tryInRuleRecovery(e,r){if(this.canRecoverWithSingleTokenInsertion(e,r))return this.getTokenToInsert(e);if(this.canRecoverWithSingleTokenDeletion(e)){let n=this.SKIP_TOKEN();return this.consumeToken(),n}throw new wM("sad sad panda")}canPerformInRuleRecovery(e,r){return this.canRecoverWithSingleTokenInsertion(e,r)||this.canRecoverWithSingleTokenDeletion(e)}canRecoverWithSingleTokenInsertion(e,r){if(!this.canTokenTypeBeInsertedInRecovery(e)||hr(r))return!1;let n=this.LA(1);return ls(r,a=>this.tokenMatcher(n,a))!==void 0}canRecoverWithSingleTokenDeletion(e){return this.canTokenTypeBeDeletedInRecovery(e)?this.tokenMatcher(this.LA(2),e):!1}isInCurrentRuleReSyncSet(e){let r=this.getCurrFollowKey(),n=this.getFollowSetFromFollowKey(r);return Xn(n,e)}findReSyncTokenType(){let e=this.flattenFollowSet(),r=this.LA(1),n=2;for(;;){let i=ls(e,a=>gx(r,a));if(i!==void 0)return i;r=this.LA(n),n++}}getCurrFollowKey(){if(this.RULE_STACK.length===1)return TM;let e=this.getLastExplicitRuleShortName(),r=this.getLastExplicitRuleOccurrenceIndex(),n=this.getPreviousExplicitRuleShortName();return{ruleName:this.shortRuleNameToFullName(e),idxInCallingRule:r,inRule:this.shortRuleNameToFullName(n)}}buildFullFollowKeyStack(){let e=this.RULE_STACK,r=this.RULE_OCCURRENCE_STACK;return Je(e,(n,i)=>i===0?TM:{ruleName:this.shortRuleNameToFullName(n),idxInCallingRule:r[i],inRule:this.shortRuleNameToFullName(e[i-1])})}flattenFollowSet(){let e=Je(this.buildFullFollowKeyStack(),r=>this.getFollowSetFromFollowKey(r));return qr(e)}getFollowSetFromFollowKey(e){if(e===TM)return[fo];let r=e.ruleName+e.idxInCallingRule+Uk+e.inRule;return this.resyncFollows[r]}addToResyncTokens(e,r){return this.tokenMatcher(e,fo)||r.push(e),r}reSyncTo(e){let r=[],n=this.LA(1);for(;this.tokenMatcher(n,e)===!1;)n=this.SKIP_TOKEN(),this.addToResyncTokens(n,r);return Fu(r)}attemptInRepetitionRecovery(e,r,n,i,a,s,l){}getCurrentGrammarPath(e,r){let n=this.getHumanReadableRuleStack(),i=an(this.RULE_OCCURRENCE_STACK);return{ruleStack:n,occurrenceStack:i,lastTok:e,lastTokOccurrence:r}}getHumanReadableRuleStack(){return Je(this.RULE_STACK,e=>this.shortRuleNameToFullName(e))}};o(NFe,"attemptInRepetitionRecovery")});function sE(t,e,r){return r|e|t}var oE=N(()=>{"use strict";o(sE,"getKeyForAutomaticLookahead")});var Yu,SM=N(()=>{"use strict";qt();Qg();Us();wx();t1();Yu=class{static{o(this,"LLkLookaheadStrategy")}constructor(e){var r;this.maxLookahead=(r=e?.maxLookahead)!==null&&r!==void 0?r:ds.maxLookahead}validate(e){let r=this.validateNoLeftRecursion(e.rules);if(hr(r)){let n=this.validateEmptyOrAlternatives(e.rules),i=this.validateAmbiguousAlternationAlternatives(e.rules,this.maxLookahead),a=this.validateSomeNonEmptyLookaheadPath(e.rules,this.maxLookahead);return[...r,...n,...i,...a]}return r}validateNoLeftRecursion(e){return ga(e,r=>bM(r,r,$l))}validateEmptyOrAlternatives(e){return ga(e,r=>Voe(r,$l))}validateAmbiguousAlternationAlternatives(e,r){return ga(e,n=>Uoe(n,r,$l))}validateSomeNonEmptyLookaheadPath(e,r){return Hoe(e,r,$l)}buildLookaheadForAlternation(e){return Roe(e.prodOccurrence,e.rule,e.maxLookahead,e.hasPredicates,e.dynamicTokensEnabled,Moe)}buildLookaheadForOptional(e){return Noe(e.prodOccurrence,e.rule,e.maxLookahead,e.dynamicTokensEnabled,bx(e.prodType),Ioe)}}});function MFe(t){lE.reset(),t.accept(lE);let e=lE.dslMethods;return lE.reset(),e}var cE,CM,lE,Joe=N(()=>{"use strict";qt();Us();oE();fs();SM();cE=class{static{o(this,"LooksAhead")}initLooksAhead(e){this.dynamicTokensEnabled=Bt(e,"dynamicTokensEnabled")?e.dynamicTokensEnabled:ds.dynamicTokensEnabled,this.maxLookahead=Bt(e,"maxLookahead")?e.maxLookahead:ds.maxLookahead,this.lookaheadStrategy=Bt(e,"lookaheadStrategy")?e.lookaheadStrategy:new Yu({maxLookahead:this.maxLookahead}),this.lookAheadFuncsCache=new Map}preComputeLookaheadFunctions(e){Ae(e,r=>{this.TRACE_INIT(`${r.name} Rule Lookahead`,()=>{let{alternation:n,repetition:i,option:a,repetitionMandatory:s,repetitionMandatoryWithSeparator:l,repetitionWithSeparator:u}=MFe(r);Ae(n,h=>{let f=h.idx===0?"":h.idx;this.TRACE_INIT(`${Vs(h)}${f}`,()=>{let d=this.lookaheadStrategy.buildLookaheadForAlternation({prodOccurrence:h.idx,rule:r,maxLookahead:h.maxLookahead||this.maxLookahead,hasPredicates:h.hasPredicates,dynamicTokensEnabled:this.dynamicTokensEnabled}),p=sE(this.fullRuleNameToShort[r.name],256,h.idx);this.setLaFuncCache(p,d)})}),Ae(i,h=>{this.computeLookaheadFunc(r,h.idx,768,"Repetition",h.maxLookahead,Vs(h))}),Ae(a,h=>{this.computeLookaheadFunc(r,h.idx,512,"Option",h.maxLookahead,Vs(h))}),Ae(s,h=>{this.computeLookaheadFunc(r,h.idx,1024,"RepetitionMandatory",h.maxLookahead,Vs(h))}),Ae(l,h=>{this.computeLookaheadFunc(r,h.idx,1536,"RepetitionMandatoryWithSeparator",h.maxLookahead,Vs(h))}),Ae(u,h=>{this.computeLookaheadFunc(r,h.idx,1280,"RepetitionWithSeparator",h.maxLookahead,Vs(h))})})})}computeLookaheadFunc(e,r,n,i,a,s){this.TRACE_INIT(`${s}${r===0?"":r}`,()=>{let l=this.lookaheadStrategy.buildLookaheadForOptional({prodOccurrence:r,rule:e,maxLookahead:a||this.maxLookahead,dynamicTokensEnabled:this.dynamicTokensEnabled,prodType:i}),u=sE(this.fullRuleNameToShort[e.name],n,r);this.setLaFuncCache(u,l)})}getKeyForAutomaticLookahead(e,r){let n=this.getLastExplicitRuleShortName();return sE(n,e,r)}getLaFuncFromCache(e){return this.lookAheadFuncsCache.get(e)}setLaFuncCache(e,r){this.lookAheadFuncsCache.set(e,r)}},CM=class extends hs{static{o(this,"DslMethodsCollectorVisitor")}constructor(){super(...arguments),this.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]}}reset(){this.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]}}visitOption(e){this.dslMethods.option.push(e)}visitRepetitionWithSeparator(e){this.dslMethods.repetitionWithSeparator.push(e)}visitRepetitionMandatory(e){this.dslMethods.repetitionMandatory.push(e)}visitRepetitionMandatoryWithSeparator(e){this.dslMethods.repetitionMandatoryWithSeparator.push(e)}visitRepetition(e){this.dslMethods.repetition.push(e)}visitAlternation(e){this.dslMethods.alternation.push(e)}},lE=new CM;o(MFe,"collectMethods")});function DM(t,e){isNaN(t.startOffset)===!0?(t.startOffset=e.startOffset,t.endOffset=e.endOffset):t.endOffset{"use strict";o(DM,"setNodeLocationOnlyOffset");o(LM,"setNodeLocationFull");o(ele,"addTerminalToCst");o(tle,"addNoneTerminalToCst")});function RM(t,e){Object.defineProperty(t,IFe,{enumerable:!1,configurable:!0,writable:!1,value:e})}var IFe,nle=N(()=>{"use strict";IFe="name";o(RM,"defineNameProp")});function OFe(t,e){let r=zr(t),n=r.length;for(let i=0;is.msg);throw Error(`Errors Detected in CST Visitor <${this.constructor.name}>: ${a.join(` `).replace(/\n/g,` - `)}`)}},"validateVisitor")};return r.prototype=n,r.prototype.constructor=r,r._RULE_NAMES=e,r}function Xse(t,e,r){let n=o(function(){},"derivedConstructor");JN(n,t+"BaseSemanticsWithDefaults");let i=Object.create(r.prototype);return Ae(e,a=>{i[a]=nBe}),n.prototype=i,n.prototype.constructor=n,n}function iBe(t,e){return aBe(t,e)}function aBe(t,e){let r=Yr(e,i=>Ci(t[i])===!1),n=Je(r,i=>({msg:`Missing visitor method: <${i}> on ${t.constructor.name} CST Visitor.`,type:eM.MISSING_METHOD,methodName:i}));return Ec(n)}var eM,jse=N(()=>{"use strict";qt();qse();o(nBe,"defaultVisit");o(Yse,"createBaseSemanticVisitorConstructor");o(Xse,"createBaseVisitorConstructorWithDefaults");(function(t){t[t.REDUNDANT_METHOD=0]="REDUNDANT_METHOD",t[t.MISSING_METHOD=1]="MISSING_METHOD"})(eM||(eM={}));o(iBe,"validateVisitor");o(aBe,"validateMissingCstMethods")});var aE,Kse=N(()=>{"use strict";Wse();qt();jse();zs();aE=class{static{o(this,"TreeBuilder")}initTreeBuilder(e){if(this.CST_STACK=[],this.outputCst=e.outputCst,this.nodeLocationTracking=Bt(e,"nodeLocationTracking")?e.nodeLocationTracking:ls.nodeLocationTracking,!this.outputCst)this.cstInvocationStateUpdate=ni,this.cstFinallyStateUpdate=ni,this.cstPostTerminal=ni,this.cstPostNonTerminal=ni,this.cstPostRule=ni;else if(/full/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=ZN,this.setNodeLocationFromNode=ZN,this.cstPostRule=ni,this.setInitialNodeLocation=this.setInitialNodeLocationFullRecovery):(this.setNodeLocationFromToken=ni,this.setNodeLocationFromNode=ni,this.cstPostRule=this.cstPostRuleFull,this.setInitialNodeLocation=this.setInitialNodeLocationFullRegular);else if(/onlyOffset/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=QN,this.setNodeLocationFromNode=QN,this.cstPostRule=ni,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRecovery):(this.setNodeLocationFromToken=ni,this.setNodeLocationFromNode=ni,this.cstPostRule=this.cstPostRuleOnlyOffset,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRegular);else if(/none/i.test(this.nodeLocationTracking))this.setNodeLocationFromToken=ni,this.setNodeLocationFromNode=ni,this.cstPostRule=ni,this.setInitialNodeLocation=ni;else throw Error(`Invalid config option: "${e.nodeLocationTracking}"`)}setInitialNodeLocationOnlyOffsetRecovery(e){e.location={startOffset:NaN,endOffset:NaN}}setInitialNodeLocationOnlyOffsetRegular(e){e.location={startOffset:this.LA(1).startOffset,endOffset:NaN}}setInitialNodeLocationFullRecovery(e){e.location={startOffset:NaN,startLine:NaN,startColumn:NaN,endOffset:NaN,endLine:NaN,endColumn:NaN}}setInitialNodeLocationFullRegular(e){let r=this.LA(1);e.location={startOffset:r.startOffset,startLine:r.startLine,startColumn:r.startColumn,endOffset:NaN,endLine:NaN,endColumn:NaN}}cstInvocationStateUpdate(e){let r={name:e,children:Object.create(null)};this.setInitialNodeLocation(r),this.CST_STACK.push(r)}cstFinallyStateUpdate(){this.CST_STACK.pop()}cstPostRuleFull(e){let r=this.LA(0),n=e.location;n.startOffset<=r.startOffset?(n.endOffset=r.endOffset,n.endLine=r.endLine,n.endColumn=r.endColumn):(n.startOffset=NaN,n.startLine=NaN,n.startColumn=NaN)}cstPostRuleOnlyOffset(e){let r=this.LA(0),n=e.location;n.startOffset<=r.startOffset?n.endOffset=r.endOffset:n.startOffset=NaN}cstPostTerminal(e,r){let n=this.CST_STACK[this.CST_STACK.length-1];Use(n,r,e),this.setNodeLocationFromToken(n.location,r)}cstPostNonTerminal(e,r){let n=this.CST_STACK[this.CST_STACK.length-1];Hse(n,r,e),this.setNodeLocationFromNode(n.location,e.location)}getBaseCstVisitorConstructor(){if(mr(this.baseCstVisitorConstructor)){let e=Yse(this.className,zr(this.gastProductionsCache));return this.baseCstVisitorConstructor=e,e}return this.baseCstVisitorConstructor}getBaseCstVisitorConstructorWithDefaults(){if(mr(this.baseCstVisitorWithDefaultsConstructor)){let e=Xse(this.className,zr(this.gastProductionsCache),this.getBaseCstVisitorConstructor());return this.baseCstVisitorWithDefaultsConstructor=e,e}return this.baseCstVisitorWithDefaultsConstructor}getLastExplicitRuleShortName(){let e=this.RULE_STACK;return e[e.length-1]}getPreviousExplicitRuleShortName(){let e=this.RULE_STACK;return e[e.length-2]}getLastExplicitRuleOccurrenceIndex(){let e=this.RULE_OCCURRENCE_STACK;return e[e.length-1]}}});var sE,Qse=N(()=>{"use strict";zs();sE=class{static{o(this,"LexerAdapter")}initLexerAdapter(){this.tokVector=[],this.tokVectorLength=0,this.currIdx=-1}set input(e){if(this.selfAnalysisDone!==!0)throw Error("Missing invocation at the end of the Parser's constructor.");this.reset(),this.tokVector=e,this.tokVectorLength=e.length}get input(){return this.tokVector}SKIP_TOKEN(){return this.currIdx<=this.tokVector.length-2?(this.consumeToken(),this.LA(1)):n1}LA(e){let r=this.currIdx+e;return r<0||this.tokVectorLength<=r?n1:this.tokVector[r]}consumeToken(){this.currIdx++}exportLexerState(){return this.currIdx}importLexerState(e){this.currIdx=e}resetLexerState(){this.currIdx=-1}moveToTerminatedState(){this.currIdx=this.tokVector.length-1}getLexerPosition(){return this.exportLexerState()}}});var oE,Zse=N(()=>{"use strict";qt();r1();zs();Kg();xx();os();oE=class{static{o(this,"RecognizerApi")}ACTION(e){return e.call(this)}consume(e,r,n){return this.consumeInternal(r,e,n)}subrule(e,r,n){return this.subruleInternal(r,e,n)}option(e,r){return this.optionInternal(r,e)}or(e,r){return this.orInternal(r,e)}many(e,r){return this.manyInternal(e,r)}atLeastOne(e,r){return this.atLeastOneInternal(e,r)}CONSUME(e,r){return this.consumeInternal(e,0,r)}CONSUME1(e,r){return this.consumeInternal(e,1,r)}CONSUME2(e,r){return this.consumeInternal(e,2,r)}CONSUME3(e,r){return this.consumeInternal(e,3,r)}CONSUME4(e,r){return this.consumeInternal(e,4,r)}CONSUME5(e,r){return this.consumeInternal(e,5,r)}CONSUME6(e,r){return this.consumeInternal(e,6,r)}CONSUME7(e,r){return this.consumeInternal(e,7,r)}CONSUME8(e,r){return this.consumeInternal(e,8,r)}CONSUME9(e,r){return this.consumeInternal(e,9,r)}SUBRULE(e,r){return this.subruleInternal(e,0,r)}SUBRULE1(e,r){return this.subruleInternal(e,1,r)}SUBRULE2(e,r){return this.subruleInternal(e,2,r)}SUBRULE3(e,r){return this.subruleInternal(e,3,r)}SUBRULE4(e,r){return this.subruleInternal(e,4,r)}SUBRULE5(e,r){return this.subruleInternal(e,5,r)}SUBRULE6(e,r){return this.subruleInternal(e,6,r)}SUBRULE7(e,r){return this.subruleInternal(e,7,r)}SUBRULE8(e,r){return this.subruleInternal(e,8,r)}SUBRULE9(e,r){return this.subruleInternal(e,9,r)}OPTION(e){return this.optionInternal(e,0)}OPTION1(e){return this.optionInternal(e,1)}OPTION2(e){return this.optionInternal(e,2)}OPTION3(e){return this.optionInternal(e,3)}OPTION4(e){return this.optionInternal(e,4)}OPTION5(e){return this.optionInternal(e,5)}OPTION6(e){return this.optionInternal(e,6)}OPTION7(e){return this.optionInternal(e,7)}OPTION8(e){return this.optionInternal(e,8)}OPTION9(e){return this.optionInternal(e,9)}OR(e){return this.orInternal(e,0)}OR1(e){return this.orInternal(e,1)}OR2(e){return this.orInternal(e,2)}OR3(e){return this.orInternal(e,3)}OR4(e){return this.orInternal(e,4)}OR5(e){return this.orInternal(e,5)}OR6(e){return this.orInternal(e,6)}OR7(e){return this.orInternal(e,7)}OR8(e){return this.orInternal(e,8)}OR9(e){return this.orInternal(e,9)}MANY(e){this.manyInternal(0,e)}MANY1(e){this.manyInternal(1,e)}MANY2(e){this.manyInternal(2,e)}MANY3(e){this.manyInternal(3,e)}MANY4(e){this.manyInternal(4,e)}MANY5(e){this.manyInternal(5,e)}MANY6(e){this.manyInternal(6,e)}MANY7(e){this.manyInternal(7,e)}MANY8(e){this.manyInternal(8,e)}MANY9(e){this.manyInternal(9,e)}MANY_SEP(e){this.manySepFirstInternal(0,e)}MANY_SEP1(e){this.manySepFirstInternal(1,e)}MANY_SEP2(e){this.manySepFirstInternal(2,e)}MANY_SEP3(e){this.manySepFirstInternal(3,e)}MANY_SEP4(e){this.manySepFirstInternal(4,e)}MANY_SEP5(e){this.manySepFirstInternal(5,e)}MANY_SEP6(e){this.manySepFirstInternal(6,e)}MANY_SEP7(e){this.manySepFirstInternal(7,e)}MANY_SEP8(e){this.manySepFirstInternal(8,e)}MANY_SEP9(e){this.manySepFirstInternal(9,e)}AT_LEAST_ONE(e){this.atLeastOneInternal(0,e)}AT_LEAST_ONE1(e){return this.atLeastOneInternal(1,e)}AT_LEAST_ONE2(e){this.atLeastOneInternal(2,e)}AT_LEAST_ONE3(e){this.atLeastOneInternal(3,e)}AT_LEAST_ONE4(e){this.atLeastOneInternal(4,e)}AT_LEAST_ONE5(e){this.atLeastOneInternal(5,e)}AT_LEAST_ONE6(e){this.atLeastOneInternal(6,e)}AT_LEAST_ONE7(e){this.atLeastOneInternal(7,e)}AT_LEAST_ONE8(e){this.atLeastOneInternal(8,e)}AT_LEAST_ONE9(e){this.atLeastOneInternal(9,e)}AT_LEAST_ONE_SEP(e){this.atLeastOneSepFirstInternal(0,e)}AT_LEAST_ONE_SEP1(e){this.atLeastOneSepFirstInternal(1,e)}AT_LEAST_ONE_SEP2(e){this.atLeastOneSepFirstInternal(2,e)}AT_LEAST_ONE_SEP3(e){this.atLeastOneSepFirstInternal(3,e)}AT_LEAST_ONE_SEP4(e){this.atLeastOneSepFirstInternal(4,e)}AT_LEAST_ONE_SEP5(e){this.atLeastOneSepFirstInternal(5,e)}AT_LEAST_ONE_SEP6(e){this.atLeastOneSepFirstInternal(6,e)}AT_LEAST_ONE_SEP7(e){this.atLeastOneSepFirstInternal(7,e)}AT_LEAST_ONE_SEP8(e){this.atLeastOneSepFirstInternal(8,e)}AT_LEAST_ONE_SEP9(e){this.atLeastOneSepFirstInternal(9,e)}RULE(e,r,n=i1){if(qn(this.definedRulesNames,e)){let s={message:Fl.buildDuplicateRuleNameError({topLevelRule:e,grammarName:this.className}),type:Gi.DUPLICATE_RULE_NAME,ruleName:e};this.definitionErrors.push(s)}this.definedRulesNames.push(e);let i=this.defineRule(e,r,n);return this[e]=i,i}OVERRIDE_RULE(e,r,n=i1){let i=Lse(e,this.definedRulesNames,this.className);this.definitionErrors=this.definitionErrors.concat(i);let a=this.defineRule(e,r,n);return this[e]=a,a}BACKTRACK(e,r){return function(){this.isBackTrackingStack.push(1);let n=this.saveRecogState();try{return e.apply(this,r),!0}catch(i){if(ff(i))return!1;throw i}finally{this.reloadRecogState(n),this.isBackTrackingStack.pop()}}}getGAstProductions(){return this.gastProductionsCache}getSerializedGastProductions(){return Nk(br(this.gastProductionsCache))}}});var lE,Jse=N(()=>{"use strict";qt();Jk();r1();e1();gx();zs();qN();yp();gp();lE=class{static{o(this,"RecognizerEngine")}initRecognizerEngine(e,r){if(this.className=this.constructor.name,this.shortRuleNameToFull={},this.fullRuleNameToShort={},this.ruleShortNameIdx=256,this.tokenMatcher=Xg,this.subruleIdx=0,this.definedRulesNames=[],this.tokensMap={},this.isBackTrackingStack=[],this.RULE_STACK=[],this.RULE_OCCURRENCE_STACK=[],this.gastProductionsCache={},Bt(r,"serializedGrammar"))throw Error(`The Parser's configuration can no longer contain a property. + `)}`)}},"validateVisitor")};return r.prototype=n,r.prototype.constructor=r,r._RULE_NAMES=e,r}function ale(t,e,r){let n=o(function(){},"derivedConstructor");RM(n,t+"BaseSemanticsWithDefaults");let i=Object.create(r.prototype);return Ae(e,a=>{i[a]=OFe}),n.prototype=i,n.prototype.constructor=n,n}function PFe(t,e){return BFe(t,e)}function BFe(t,e){let r=Yr(e,i=>Ai(t[i])===!1),n=Je(r,i=>({msg:`Missing visitor method: <${i}> on ${t.constructor.name} CST Visitor.`,type:NM.MISSING_METHOD,methodName:i}));return Ac(n)}var NM,sle=N(()=>{"use strict";qt();nle();o(OFe,"defaultVisit");o(ile,"createBaseSemanticVisitorConstructor");o(ale,"createBaseVisitorConstructorWithDefaults");(function(t){t[t.REDUNDANT_METHOD=0]="REDUNDANT_METHOD",t[t.MISSING_METHOD=1]="MISSING_METHOD"})(NM||(NM={}));o(PFe,"validateVisitor");o(BFe,"validateMissingCstMethods")});var dE,ole=N(()=>{"use strict";rle();qt();sle();Us();dE=class{static{o(this,"TreeBuilder")}initTreeBuilder(e){if(this.CST_STACK=[],this.outputCst=e.outputCst,this.nodeLocationTracking=Bt(e,"nodeLocationTracking")?e.nodeLocationTracking:ds.nodeLocationTracking,!this.outputCst)this.cstInvocationStateUpdate=ai,this.cstFinallyStateUpdate=ai,this.cstPostTerminal=ai,this.cstPostNonTerminal=ai,this.cstPostRule=ai;else if(/full/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=LM,this.setNodeLocationFromNode=LM,this.cstPostRule=ai,this.setInitialNodeLocation=this.setInitialNodeLocationFullRecovery):(this.setNodeLocationFromToken=ai,this.setNodeLocationFromNode=ai,this.cstPostRule=this.cstPostRuleFull,this.setInitialNodeLocation=this.setInitialNodeLocationFullRegular);else if(/onlyOffset/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=DM,this.setNodeLocationFromNode=DM,this.cstPostRule=ai,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRecovery):(this.setNodeLocationFromToken=ai,this.setNodeLocationFromNode=ai,this.cstPostRule=this.cstPostRuleOnlyOffset,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRegular);else if(/none/i.test(this.nodeLocationTracking))this.setNodeLocationFromToken=ai,this.setNodeLocationFromNode=ai,this.cstPostRule=ai,this.setInitialNodeLocation=ai;else throw Error(`Invalid config option: "${e.nodeLocationTracking}"`)}setInitialNodeLocationOnlyOffsetRecovery(e){e.location={startOffset:NaN,endOffset:NaN}}setInitialNodeLocationOnlyOffsetRegular(e){e.location={startOffset:this.LA(1).startOffset,endOffset:NaN}}setInitialNodeLocationFullRecovery(e){e.location={startOffset:NaN,startLine:NaN,startColumn:NaN,endOffset:NaN,endLine:NaN,endColumn:NaN}}setInitialNodeLocationFullRegular(e){let r=this.LA(1);e.location={startOffset:r.startOffset,startLine:r.startLine,startColumn:r.startColumn,endOffset:NaN,endLine:NaN,endColumn:NaN}}cstInvocationStateUpdate(e){let r={name:e,children:Object.create(null)};this.setInitialNodeLocation(r),this.CST_STACK.push(r)}cstFinallyStateUpdate(){this.CST_STACK.pop()}cstPostRuleFull(e){let r=this.LA(0),n=e.location;n.startOffset<=r.startOffset?(n.endOffset=r.endOffset,n.endLine=r.endLine,n.endColumn=r.endColumn):(n.startOffset=NaN,n.startLine=NaN,n.startColumn=NaN)}cstPostRuleOnlyOffset(e){let r=this.LA(0),n=e.location;n.startOffset<=r.startOffset?n.endOffset=r.endOffset:n.startOffset=NaN}cstPostTerminal(e,r){let n=this.CST_STACK[this.CST_STACK.length-1];ele(n,r,e),this.setNodeLocationFromToken(n.location,r)}cstPostNonTerminal(e,r){let n=this.CST_STACK[this.CST_STACK.length-1];tle(n,r,e),this.setNodeLocationFromNode(n.location,e.location)}getBaseCstVisitorConstructor(){if(mr(this.baseCstVisitorConstructor)){let e=ile(this.className,zr(this.gastProductionsCache));return this.baseCstVisitorConstructor=e,e}return this.baseCstVisitorConstructor}getBaseCstVisitorConstructorWithDefaults(){if(mr(this.baseCstVisitorWithDefaultsConstructor)){let e=ale(this.className,zr(this.gastProductionsCache),this.getBaseCstVisitorConstructor());return this.baseCstVisitorWithDefaultsConstructor=e,e}return this.baseCstVisitorWithDefaultsConstructor}getLastExplicitRuleShortName(){let e=this.RULE_STACK;return e[e.length-1]}getPreviousExplicitRuleShortName(){let e=this.RULE_STACK;return e[e.length-2]}getLastExplicitRuleOccurrenceIndex(){let e=this.RULE_OCCURRENCE_STACK;return e[e.length-1]}}});var pE,lle=N(()=>{"use strict";Us();pE=class{static{o(this,"LexerAdapter")}initLexerAdapter(){this.tokVector=[],this.tokVectorLength=0,this.currIdx=-1}set input(e){if(this.selfAnalysisDone!==!0)throw Error("Missing invocation at the end of the Parser's constructor.");this.reset(),this.tokVector=e,this.tokVectorLength=e.length}get input(){return this.tokVector}SKIP_TOKEN(){return this.currIdx<=this.tokVector.length-2?(this.consumeToken(),this.LA(1)):i1}LA(e){let r=this.currIdx+e;return r<0||this.tokVectorLength<=r?i1:this.tokVector[r]}consumeToken(){this.currIdx++}exportLexerState(){return this.currIdx}importLexerState(e){this.currIdx=e}resetLexerState(){this.currIdx=-1}moveToTerminatedState(){this.currIdx=this.tokVector.length-1}getLexerPosition(){return this.exportLexerState()}}});var mE,cle=N(()=>{"use strict";qt();n1();Us();Qg();wx();fs();mE=class{static{o(this,"RecognizerApi")}ACTION(e){return e.call(this)}consume(e,r,n){return this.consumeInternal(r,e,n)}subrule(e,r,n){return this.subruleInternal(r,e,n)}option(e,r){return this.optionInternal(r,e)}or(e,r){return this.orInternal(r,e)}many(e,r){return this.manyInternal(e,r)}atLeastOne(e,r){return this.atLeastOneInternal(e,r)}CONSUME(e,r){return this.consumeInternal(e,0,r)}CONSUME1(e,r){return this.consumeInternal(e,1,r)}CONSUME2(e,r){return this.consumeInternal(e,2,r)}CONSUME3(e,r){return this.consumeInternal(e,3,r)}CONSUME4(e,r){return this.consumeInternal(e,4,r)}CONSUME5(e,r){return this.consumeInternal(e,5,r)}CONSUME6(e,r){return this.consumeInternal(e,6,r)}CONSUME7(e,r){return this.consumeInternal(e,7,r)}CONSUME8(e,r){return this.consumeInternal(e,8,r)}CONSUME9(e,r){return this.consumeInternal(e,9,r)}SUBRULE(e,r){return this.subruleInternal(e,0,r)}SUBRULE1(e,r){return this.subruleInternal(e,1,r)}SUBRULE2(e,r){return this.subruleInternal(e,2,r)}SUBRULE3(e,r){return this.subruleInternal(e,3,r)}SUBRULE4(e,r){return this.subruleInternal(e,4,r)}SUBRULE5(e,r){return this.subruleInternal(e,5,r)}SUBRULE6(e,r){return this.subruleInternal(e,6,r)}SUBRULE7(e,r){return this.subruleInternal(e,7,r)}SUBRULE8(e,r){return this.subruleInternal(e,8,r)}SUBRULE9(e,r){return this.subruleInternal(e,9,r)}OPTION(e){return this.optionInternal(e,0)}OPTION1(e){return this.optionInternal(e,1)}OPTION2(e){return this.optionInternal(e,2)}OPTION3(e){return this.optionInternal(e,3)}OPTION4(e){return this.optionInternal(e,4)}OPTION5(e){return this.optionInternal(e,5)}OPTION6(e){return this.optionInternal(e,6)}OPTION7(e){return this.optionInternal(e,7)}OPTION8(e){return this.optionInternal(e,8)}OPTION9(e){return this.optionInternal(e,9)}OR(e){return this.orInternal(e,0)}OR1(e){return this.orInternal(e,1)}OR2(e){return this.orInternal(e,2)}OR3(e){return this.orInternal(e,3)}OR4(e){return this.orInternal(e,4)}OR5(e){return this.orInternal(e,5)}OR6(e){return this.orInternal(e,6)}OR7(e){return this.orInternal(e,7)}OR8(e){return this.orInternal(e,8)}OR9(e){return this.orInternal(e,9)}MANY(e){this.manyInternal(0,e)}MANY1(e){this.manyInternal(1,e)}MANY2(e){this.manyInternal(2,e)}MANY3(e){this.manyInternal(3,e)}MANY4(e){this.manyInternal(4,e)}MANY5(e){this.manyInternal(5,e)}MANY6(e){this.manyInternal(6,e)}MANY7(e){this.manyInternal(7,e)}MANY8(e){this.manyInternal(8,e)}MANY9(e){this.manyInternal(9,e)}MANY_SEP(e){this.manySepFirstInternal(0,e)}MANY_SEP1(e){this.manySepFirstInternal(1,e)}MANY_SEP2(e){this.manySepFirstInternal(2,e)}MANY_SEP3(e){this.manySepFirstInternal(3,e)}MANY_SEP4(e){this.manySepFirstInternal(4,e)}MANY_SEP5(e){this.manySepFirstInternal(5,e)}MANY_SEP6(e){this.manySepFirstInternal(6,e)}MANY_SEP7(e){this.manySepFirstInternal(7,e)}MANY_SEP8(e){this.manySepFirstInternal(8,e)}MANY_SEP9(e){this.manySepFirstInternal(9,e)}AT_LEAST_ONE(e){this.atLeastOneInternal(0,e)}AT_LEAST_ONE1(e){return this.atLeastOneInternal(1,e)}AT_LEAST_ONE2(e){this.atLeastOneInternal(2,e)}AT_LEAST_ONE3(e){this.atLeastOneInternal(3,e)}AT_LEAST_ONE4(e){this.atLeastOneInternal(4,e)}AT_LEAST_ONE5(e){this.atLeastOneInternal(5,e)}AT_LEAST_ONE6(e){this.atLeastOneInternal(6,e)}AT_LEAST_ONE7(e){this.atLeastOneInternal(7,e)}AT_LEAST_ONE8(e){this.atLeastOneInternal(8,e)}AT_LEAST_ONE9(e){this.atLeastOneInternal(9,e)}AT_LEAST_ONE_SEP(e){this.atLeastOneSepFirstInternal(0,e)}AT_LEAST_ONE_SEP1(e){this.atLeastOneSepFirstInternal(1,e)}AT_LEAST_ONE_SEP2(e){this.atLeastOneSepFirstInternal(2,e)}AT_LEAST_ONE_SEP3(e){this.atLeastOneSepFirstInternal(3,e)}AT_LEAST_ONE_SEP4(e){this.atLeastOneSepFirstInternal(4,e)}AT_LEAST_ONE_SEP5(e){this.atLeastOneSepFirstInternal(5,e)}AT_LEAST_ONE_SEP6(e){this.atLeastOneSepFirstInternal(6,e)}AT_LEAST_ONE_SEP7(e){this.atLeastOneSepFirstInternal(7,e)}AT_LEAST_ONE_SEP8(e){this.atLeastOneSepFirstInternal(8,e)}AT_LEAST_ONE_SEP9(e){this.atLeastOneSepFirstInternal(9,e)}RULE(e,r,n=a1){if(Xn(this.definedRulesNames,e)){let s={message:$l.buildDuplicateRuleNameError({topLevelRule:e,grammarName:this.className}),type:Vi.DUPLICATE_RULE_NAME,ruleName:e};this.definitionErrors.push(s)}this.definedRulesNames.push(e);let i=this.defineRule(e,r,n);return this[e]=i,i}OVERRIDE_RULE(e,r,n=a1){let i=Goe(e,this.definedRulesNames,this.className);this.definitionErrors=this.definitionErrors.concat(i);let a=this.defineRule(e,r,n);return this[e]=a,a}BACKTRACK(e,r){return function(){this.isBackTrackingStack.push(1);let n=this.saveRecogState();try{return e.apply(this,r),!0}catch(i){if(pf(i))return!1;throw i}finally{this.reloadRecogState(n),this.isBackTrackingStack.pop()}}}getGAstProductions(){return this.gastProductionsCache}getSerializedGastProductions(){return zk(br(this.gastProductionsCache))}}});var gE,ule=N(()=>{"use strict";qt();oE();n1();t1();xx();Us();EM();bp();xp();gE=class{static{o(this,"RecognizerEngine")}initRecognizerEngine(e,r){if(this.className=this.constructor.name,this.shortRuleNameToFull={},this.fullRuleNameToShort={},this.ruleShortNameIdx=256,this.tokenMatcher=jg,this.subruleIdx=0,this.definedRulesNames=[],this.tokensMap={},this.isBackTrackingStack=[],this.RULE_STACK=[],this.RULE_OCCURRENCE_STACK=[],this.gastProductionsCache={},Bt(r,"serializedGrammar"))throw Error(`The Parser's configuration can no longer contain a property. See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_6-0-0 - For Further details.`);if(Pt(e)){if(ur(e))throw Error(`A Token Vocabulary cannot be empty. + For Further details.`);if(Pt(e)){if(hr(e))throw Error(`A Token Vocabulary cannot be empty. Note that the first argument for the parser constructor is no longer a Token vector (since v4.0).`);if(typeof e[0].startOffset=="number")throw Error(`The Parser constructor no longer accepts a token vector as the first argument. See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_4-0-0 - For Further details.`)}if(Pt(e))this.tokensMap=Xr(e,(a,s)=>(a[s.name]=s,a),{});else if(Bt(e,"modes")&&Ma(qr(br(e.modes)),ose)){let a=qr(br(e.modes)),s=Hm(a);this.tokensMap=Xr(s,(l,u)=>(l[u.name]=u,l),{})}else if(bn(e))this.tokensMap=an(e);else throw new Error(" argument must be An Array of Token constructors, A dictionary of Token constructors or an IMultiModeLexerDefinition");this.tokensMap.EOF=uo;let n=Bt(e,"modes")?qr(br(e.modes)):br(e),i=Ma(n,a=>ur(a.categoryMatches));this.tokenMatcher=i?Xg:zu,Gu(br(this.tokensMap))}defineRule(e,r,n){if(this.selfAnalysisDone)throw Error(`Grammar rule <${e}> may not be defined after the 'performSelfAnalysis' method has been called' -Make sure that all grammar rule definitions are done before 'performSelfAnalysis' is called.`);let i=Bt(n,"resyncEnabled")?n.resyncEnabled:i1.resyncEnabled,a=Bt(n,"recoveryValueFunc")?n.recoveryValueFunc:i1.recoveryValueFunc,s=this.ruleShortNameIdx<<12;this.ruleShortNameIdx++,this.shortRuleNameToFull[s]=e,this.fullRuleNameToShort[e]=s;let l;return this.outputCst===!0?l=o(function(...f){try{this.ruleInvocationStateUpdate(s,e,this.subruleIdx),r.apply(this,f);let d=this.CST_STACK[this.CST_STACK.length-1];return this.cstPostRule(d),d}catch(d){return this.invokeRuleCatch(d,i,a)}finally{this.ruleFinallyStateUpdate()}},"invokeRuleWithTry"):l=o(function(...f){try{return this.ruleInvocationStateUpdate(s,e,this.subruleIdx),r.apply(this,f)}catch(d){return this.invokeRuleCatch(d,i,a)}finally{this.ruleFinallyStateUpdate()}},"invokeRuleWithTryCst"),Object.assign(l,{ruleName:e,originalGrammarAction:r})}invokeRuleCatch(e,r,n){let i=this.RULE_STACK.length===1,a=r&&!this.isBackTracking()&&this.recoveryEnabled;if(ff(e)){let s=e;if(a){let l=this.findReSyncTokenType();if(this.isInCurrentRuleReSyncSet(l))if(s.resyncedTokens=this.reSyncTo(l),this.outputCst){let u=this.CST_STACK[this.CST_STACK.length-1];return u.recoveredNode=!0,u}else return n(e);else{if(this.outputCst){let u=this.CST_STACK[this.CST_STACK.length-1];u.recoveredNode=!0,s.partialCstResult=u}throw s}}else{if(i)return this.moveToTerminatedState(),n(e);throw s}}else throw e}optionInternal(e,r){let n=this.getKeyForAutomaticLookahead(512,r);return this.optionInternalLogic(e,r,n)}optionInternalLogic(e,r,n){let i=this.getLaFuncFromCache(n),a;if(typeof e!="function"){a=e.DEF;let s=e.GATE;if(s!==void 0){let l=i;i=o(()=>s.call(this)&&l.call(this),"lookAheadFunc")}}else a=e;if(i.call(this)===!0)return a.call(this)}atLeastOneInternal(e,r){let n=this.getKeyForAutomaticLookahead(1024,e);return this.atLeastOneInternalLogic(e,r,n)}atLeastOneInternalLogic(e,r,n){let i=this.getLaFuncFromCache(n),a;if(typeof r!="function"){a=r.DEF;let s=r.GATE;if(s!==void 0){let l=i;i=o(()=>s.call(this)&&l.call(this),"lookAheadFunc")}}else a=r;if(i.call(this)===!0){let s=this.doSingleRepetition(a);for(;i.call(this)===!0&&s===!0;)s=this.doSingleRepetition(a)}else throw this.raiseEarlyExitException(e,jn.REPETITION_MANDATORY,r.ERR_MSG);this.attemptInRepetitionRecovery(this.atLeastOneInternal,[e,r],i,1024,e,Hk)}atLeastOneSepFirstInternal(e,r){let n=this.getKeyForAutomaticLookahead(1536,e);this.atLeastOneSepFirstInternalLogic(e,r,n)}atLeastOneSepFirstInternalLogic(e,r,n){let i=r.DEF,a=r.SEP;if(this.getLaFuncFromCache(n).call(this)===!0){i.call(this);let l=o(()=>this.tokenMatcher(this.LA(1),a),"separatorLookAheadFunc");for(;this.tokenMatcher(this.LA(1),a)===!0;)this.CONSUME(a),i.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,a,l,i,mx],l,1536,e,mx)}else throw this.raiseEarlyExitException(e,jn.REPETITION_MANDATORY_WITH_SEPARATOR,r.ERR_MSG)}manyInternal(e,r){let n=this.getKeyForAutomaticLookahead(768,e);return this.manyInternalLogic(e,r,n)}manyInternalLogic(e,r,n){let i=this.getLaFuncFromCache(n),a;if(typeof r!="function"){a=r.DEF;let l=r.GATE;if(l!==void 0){let u=i;i=o(()=>l.call(this)&&u.call(this),"lookaheadFunction")}}else a=r;let s=!0;for(;i.call(this)===!0&&s===!0;)s=this.doSingleRepetition(a);this.attemptInRepetitionRecovery(this.manyInternal,[e,r],i,768,e,Uk,s)}manySepFirstInternal(e,r){let n=this.getKeyForAutomaticLookahead(1280,e);this.manySepFirstInternalLogic(e,r,n)}manySepFirstInternalLogic(e,r,n){let i=r.DEF,a=r.SEP;if(this.getLaFuncFromCache(n).call(this)===!0){i.call(this);let l=o(()=>this.tokenMatcher(this.LA(1),a),"separatorLookAheadFunc");for(;this.tokenMatcher(this.LA(1),a)===!0;)this.CONSUME(a),i.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,a,l,i,px],l,1280,e,px)}}repetitionSepSecondInternal(e,r,n,i,a){for(;n();)this.CONSUME(r),i.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,r,n,i,a],n,1536,e,a)}doSingleRepetition(e){let r=this.getLexerPosition();return e.call(this),this.getLexerPosition()>r}orInternal(e,r){let n=this.getKeyForAutomaticLookahead(256,r),i=Pt(e)?e:e.DEF,s=this.getLaFuncFromCache(n).call(this,i);if(s!==void 0)return i[s].ALT.call(this);this.raiseNoAltException(r,e.ERR_MSG)}ruleFinallyStateUpdate(){if(this.RULE_STACK.pop(),this.RULE_OCCURRENCE_STACK.pop(),this.cstFinallyStateUpdate(),this.RULE_STACK.length===0&&this.isAtEndOfInput()===!1){let e=this.LA(1),r=this.errorMessageProvider.buildNotAllInputParsedMessage({firstRedundant:e,ruleName:this.getCurrRuleFullName()});this.SAVE_ERROR(new wx(r,e))}}subruleInternal(e,r,n){let i;try{let a=n!==void 0?n.ARGS:void 0;return this.subruleIdx=r,i=e.apply(this,a),this.cstPostNonTerminal(i,n!==void 0&&n.LABEL!==void 0?n.LABEL:e.ruleName),i}catch(a){throw this.subruleInternalError(a,n,e.ruleName)}}subruleInternalError(e,r,n){throw ff(e)&&e.partialCstResult!==void 0&&(this.cstPostNonTerminal(e.partialCstResult,r!==void 0&&r.LABEL!==void 0?r.LABEL:n),delete e.partialCstResult),e}consumeInternal(e,r,n){let i;try{let a=this.LA(1);this.tokenMatcher(a,e)===!0?(this.consumeToken(),i=a):this.consumeInternalError(e,a,n)}catch(a){i=this.consumeInternalRecovery(e,r,a)}return this.cstPostTerminal(n!==void 0&&n.LABEL!==void 0?n.LABEL:e.name,i),i}consumeInternalError(e,r,n){let i,a=this.LA(0);throw n!==void 0&&n.ERR_MSG?i=n.ERR_MSG:i=this.errorMessageProvider.buildMismatchTokenMessage({expected:e,actual:r,previous:a,ruleName:this.getCurrRuleFullName()}),this.SAVE_ERROR(new vp(i,r,a))}consumeInternalRecovery(e,r,n){if(this.recoveryEnabled&&n.name==="MismatchedTokenException"&&!this.isBackTracking()){let i=this.getFollowsForInRuleRecovery(e,r);try{return this.tryInRuleRecovery(e,i)}catch(a){throw a.name===WN?n:a}}else throw n}saveRecogState(){let e=this.errors,r=an(this.RULE_STACK);return{errors:e,lexerState:this.exportLexerState(),RULE_STACK:r,CST_STACK:this.CST_STACK}}reloadRecogState(e){this.errors=e.errors,this.importLexerState(e.lexerState),this.RULE_STACK=e.RULE_STACK}ruleInvocationStateUpdate(e,r,n){this.RULE_OCCURRENCE_STACK.push(n),this.RULE_STACK.push(e),this.cstInvocationStateUpdate(r)}isBackTracking(){return this.isBackTrackingStack.length!==0}getCurrRuleFullName(){let e=this.getLastExplicitRuleShortName();return this.shortRuleNameToFull[e]}shortRuleNameToFullName(e){return this.shortRuleNameToFull[e]}isAtEndOfInput(){return this.tokenMatcher(this.LA(1),uo)}reset(){this.resetLexerState(),this.subruleIdx=0,this.isBackTrackingStack=[],this.errors=[],this.RULE_STACK=[],this.CST_STACK=[],this.RULE_OCCURRENCE_STACK=[]}}});var cE,eoe=N(()=>{"use strict";r1();qt();e1();zs();cE=class{static{o(this,"ErrorHandler")}initErrorHandler(e){this._errors=[],this.errorMessageProvider=Bt(e,"errorMessageProvider")?e.errorMessageProvider:ls.errorMessageProvider}SAVE_ERROR(e){if(ff(e))return e.context={ruleStack:this.getHumanReadableRuleStack(),ruleOccurrenceStack:an(this.RULE_OCCURRENCE_STACK)},this._errors.push(e),e;throw Error("Trying to save an Error which is not a RecognitionException")}get errors(){return an(this._errors)}set errors(e){this._errors=e}raiseEarlyExitException(e,r,n){let i=this.getCurrRuleFullName(),a=this.getGAstProductions()[i],l=Jg(e,a,r,this.maxLookahead)[0],u=[];for(let f=1;f<=this.maxLookahead;f++)u.push(this.LA(f));let h=this.errorMessageProvider.buildEarlyExitMessage({expectedIterationPaths:l,actual:u,previous:this.LA(0),customUserDescription:n,ruleName:i});throw this.SAVE_ERROR(new Tx(h,this.LA(1),this.LA(0)))}raiseNoAltException(e,r){let n=this.getCurrRuleFullName(),i=this.getGAstProductions()[n],a=Zg(e,i,this.maxLookahead),s=[];for(let h=1;h<=this.maxLookahead;h++)s.push(this.LA(h));let l=this.LA(0),u=this.errorMessageProvider.buildNoViableAltMessage({expectedPathsPerAlt:a,actual:s,previous:l,customUserDescription:r,ruleName:this.getCurrRuleFullName()});throw this.SAVE_ERROR(new bx(u,this.LA(1),l))}}});var uE,toe=N(()=>{"use strict";gx();qt();uE=class{static{o(this,"ContentAssist")}initContentAssist(){}computeContentAssist(e,r){let n=this.gastProductionsCache[e];if(mr(n))throw Error(`Rule ->${e}<- does not exist in this grammar.`);return qk([n],r,this.tokenMatcher,this.maxLookahead)}getNextPossibleTokenTypes(e){let r=ia(e.ruleStack),i=this.getGAstProductions()[r];return new Vk(i,e).startWalking()}}});function Ex(t,e,r,n=!1){fE(r);let i=ga(this.recordingProdStack),a=Ci(e)?e:e.DEF,s=new t({definition:[],idx:r});return n&&(s.separator=e.SEP),Bt(e,"MAX_LOOKAHEAD")&&(s.maxLookahead=e.MAX_LOOKAHEAD),this.recordingProdStack.push(s),a.call(this),i.definition.push(s),this.recordingProdStack.pop(),dE}function lBe(t,e){fE(e);let r=ga(this.recordingProdStack),n=Pt(t)===!1,i=n===!1?t:t.DEF,a=new Tn({definition:[],idx:e,ignoreAmbiguities:n&&t.IGNORE_AMBIGUITIES===!0});Bt(t,"MAX_LOOKAHEAD")&&(a.maxLookahead=t.MAX_LOOKAHEAD);let s=I2(i,l=>Ci(l.GATE));return a.hasPredicates=s,r.definition.push(a),Ae(i,l=>{let u=new Dn({definition:[]});a.definition.push(u),Bt(l,"IGNORE_AMBIGUITIES")?u.ignoreAmbiguities=l.IGNORE_AMBIGUITIES:Bt(l,"GATE")&&(u.ignoreAmbiguities=!0),this.recordingProdStack.push(u),l.ALT.call(this),this.recordingProdStack.pop()}),dE}function ioe(t){return t===0?"":`${t}`}function fE(t){if(t<0||t>noe){let e=new Error(`Invalid DSL Method idx value: <${t}> - Idx value must be a none negative value smaller than ${noe+1}`);throw e.KNOWN_RECORDER_ERROR=!0,e}}var dE,roe,noe,aoe,soe,oBe,hE,ooe=N(()=>{"use strict";qt();os();hx();gp();yp();zs();Jk();dE={description:"This Object indicates the Parser is during Recording Phase"};Object.freeze(dE);roe=!0,noe=Math.pow(2,8)-1,aoe=hf({name:"RECORDING_PHASE_TOKEN",pattern:Xn.NA});Gu([aoe]);soe=Uu(aoe,`This IToken indicates the Parser is in Recording Phase - See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,-1,-1,-1,-1,-1,-1);Object.freeze(soe);oBe={name:`This CSTNode indicates the Parser is in Recording Phase - See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,children:{}},hE=class{static{o(this,"GastRecorder")}initGastRecorder(e){this.recordingProdStack=[],this.RECORDING_PHASE=!1}enableRecording(){this.RECORDING_PHASE=!0,this.TRACE_INIT("Enable Recording",()=>{for(let e=0;e<10;e++){let r=e>0?e:"";this[`CONSUME${r}`]=function(n,i){return this.consumeInternalRecord(n,e,i)},this[`SUBRULE${r}`]=function(n,i){return this.subruleInternalRecord(n,e,i)},this[`OPTION${r}`]=function(n){return this.optionInternalRecord(n,e)},this[`OR${r}`]=function(n){return this.orInternalRecord(n,e)},this[`MANY${r}`]=function(n){this.manyInternalRecord(e,n)},this[`MANY_SEP${r}`]=function(n){this.manySepFirstInternalRecord(e,n)},this[`AT_LEAST_ONE${r}`]=function(n){this.atLeastOneInternalRecord(e,n)},this[`AT_LEAST_ONE_SEP${r}`]=function(n){this.atLeastOneSepFirstInternalRecord(e,n)}}this.consume=function(e,r,n){return this.consumeInternalRecord(r,e,n)},this.subrule=function(e,r,n){return this.subruleInternalRecord(r,e,n)},this.option=function(e,r){return this.optionInternalRecord(r,e)},this.or=function(e,r){return this.orInternalRecord(r,e)},this.many=function(e,r){this.manyInternalRecord(e,r)},this.atLeastOne=function(e,r){this.atLeastOneInternalRecord(e,r)},this.ACTION=this.ACTION_RECORD,this.BACKTRACK=this.BACKTRACK_RECORD,this.LA=this.LA_RECORD})}disableRecording(){this.RECORDING_PHASE=!1,this.TRACE_INIT("Deleting Recording methods",()=>{let e=this;for(let r=0;r<10;r++){let n=r>0?r:"";delete e[`CONSUME${n}`],delete e[`SUBRULE${n}`],delete e[`OPTION${n}`],delete e[`OR${n}`],delete e[`MANY${n}`],delete e[`MANY_SEP${n}`],delete e[`AT_LEAST_ONE${n}`],delete e[`AT_LEAST_ONE_SEP${n}`]}delete e.consume,delete e.subrule,delete e.option,delete e.or,delete e.many,delete e.atLeastOne,delete e.ACTION,delete e.BACKTRACK,delete e.LA})}ACTION_RECORD(e){}BACKTRACK_RECORD(e,r){return()=>!0}LA_RECORD(e){return n1}topLevelRuleRecord(e,r){try{let n=new as({definition:[],name:e});return n.name=e,this.recordingProdStack.push(n),r.call(this),this.recordingProdStack.pop(),n}catch(n){if(n.KNOWN_RECORDER_ERROR!==!0)try{n.message=n.message+` + For Further details.`)}if(Pt(e))this.tokensMap=Xr(e,(a,s)=>(a[s.name]=s,a),{});else if(Bt(e,"modes")&&Pa(qr(br(e.modes)),voe)){let a=qr(br(e.modes)),s=qm(a);this.tokensMap=Xr(s,(l,u)=>(l[u.name]=u,l),{})}else if(bn(e))this.tokensMap=an(e);else throw new Error(" argument must be An Array of Token constructors, A dictionary of Token constructors or an IMultiModeLexerDefinition");this.tokensMap.EOF=fo;let n=Bt(e,"modes")?qr(br(e.modes)):br(e),i=Pa(n,a=>hr(a.categoryMatches));this.tokenMatcher=i?jg:Vu,Uu(br(this.tokensMap))}defineRule(e,r,n){if(this.selfAnalysisDone)throw Error(`Grammar rule <${e}> may not be defined after the 'performSelfAnalysis' method has been called' +Make sure that all grammar rule definitions are done before 'performSelfAnalysis' is called.`);let i=Bt(n,"resyncEnabled")?n.resyncEnabled:a1.resyncEnabled,a=Bt(n,"recoveryValueFunc")?n.recoveryValueFunc:a1.recoveryValueFunc,s=this.ruleShortNameIdx<<12;this.ruleShortNameIdx++,this.shortRuleNameToFull[s]=e,this.fullRuleNameToShort[e]=s;let l;return this.outputCst===!0?l=o(function(...f){try{this.ruleInvocationStateUpdate(s,e,this.subruleIdx),r.apply(this,f);let d=this.CST_STACK[this.CST_STACK.length-1];return this.cstPostRule(d),d}catch(d){return this.invokeRuleCatch(d,i,a)}finally{this.ruleFinallyStateUpdate()}},"invokeRuleWithTry"):l=o(function(...f){try{return this.ruleInvocationStateUpdate(s,e,this.subruleIdx),r.apply(this,f)}catch(d){return this.invokeRuleCatch(d,i,a)}finally{this.ruleFinallyStateUpdate()}},"invokeRuleWithTryCst"),Object.assign(l,{ruleName:e,originalGrammarAction:r})}invokeRuleCatch(e,r,n){let i=this.RULE_STACK.length===1,a=r&&!this.isBackTracking()&&this.recoveryEnabled;if(pf(e)){let s=e;if(a){let l=this.findReSyncTokenType();if(this.isInCurrentRuleReSyncSet(l))if(s.resyncedTokens=this.reSyncTo(l),this.outputCst){let u=this.CST_STACK[this.CST_STACK.length-1];return u.recoveredNode=!0,u}else return n(e);else{if(this.outputCst){let u=this.CST_STACK[this.CST_STACK.length-1];u.recoveredNode=!0,s.partialCstResult=u}throw s}}else{if(i)return this.moveToTerminatedState(),n(e);throw s}}else throw e}optionInternal(e,r){let n=this.getKeyForAutomaticLookahead(512,r);return this.optionInternalLogic(e,r,n)}optionInternalLogic(e,r,n){let i=this.getLaFuncFromCache(n),a;if(typeof e!="function"){a=e.DEF;let s=e.GATE;if(s!==void 0){let l=i;i=o(()=>s.call(this)&&l.call(this),"lookAheadFunc")}}else a=e;if(i.call(this)===!0)return a.call(this)}atLeastOneInternal(e,r){let n=this.getKeyForAutomaticLookahead(1024,e);return this.atLeastOneInternalLogic(e,r,n)}atLeastOneInternalLogic(e,r,n){let i=this.getLaFuncFromCache(n),a;if(typeof r!="function"){a=r.DEF;let s=r.GATE;if(s!==void 0){let l=i;i=o(()=>s.call(this)&&l.call(this),"lookAheadFunc")}}else a=r;if(i.call(this)===!0){let s=this.doSingleRepetition(a);for(;i.call(this)===!0&&s===!0;)s=this.doSingleRepetition(a)}else throw this.raiseEarlyExitException(e,Qn.REPETITION_MANDATORY,r.ERR_MSG);this.attemptInRepetitionRecovery(this.atLeastOneInternal,[e,r],i,1024,e,Zk)}atLeastOneSepFirstInternal(e,r){let n=this.getKeyForAutomaticLookahead(1536,e);this.atLeastOneSepFirstInternalLogic(e,r,n)}atLeastOneSepFirstInternalLogic(e,r,n){let i=r.DEF,a=r.SEP;if(this.getLaFuncFromCache(n).call(this)===!0){i.call(this);let l=o(()=>this.tokenMatcher(this.LA(1),a),"separatorLookAheadFunc");for(;this.tokenMatcher(this.LA(1),a)===!0;)this.CONSUME(a),i.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,a,l,i,vx],l,1536,e,vx)}else throw this.raiseEarlyExitException(e,Qn.REPETITION_MANDATORY_WITH_SEPARATOR,r.ERR_MSG)}manyInternal(e,r){let n=this.getKeyForAutomaticLookahead(768,e);return this.manyInternalLogic(e,r,n)}manyInternalLogic(e,r,n){let i=this.getLaFuncFromCache(n),a;if(typeof r!="function"){a=r.DEF;let l=r.GATE;if(l!==void 0){let u=i;i=o(()=>l.call(this)&&u.call(this),"lookaheadFunction")}}else a=r;let s=!0;for(;i.call(this)===!0&&s===!0;)s=this.doSingleRepetition(a);this.attemptInRepetitionRecovery(this.manyInternal,[e,r],i,768,e,Qk,s)}manySepFirstInternal(e,r){let n=this.getKeyForAutomaticLookahead(1280,e);this.manySepFirstInternalLogic(e,r,n)}manySepFirstInternalLogic(e,r,n){let i=r.DEF,a=r.SEP;if(this.getLaFuncFromCache(n).call(this)===!0){i.call(this);let l=o(()=>this.tokenMatcher(this.LA(1),a),"separatorLookAheadFunc");for(;this.tokenMatcher(this.LA(1),a)===!0;)this.CONSUME(a),i.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,a,l,i,yx],l,1280,e,yx)}}repetitionSepSecondInternal(e,r,n,i,a){for(;n();)this.CONSUME(r),i.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,r,n,i,a],n,1536,e,a)}doSingleRepetition(e){let r=this.getLexerPosition();return e.call(this),this.getLexerPosition()>r}orInternal(e,r){let n=this.getKeyForAutomaticLookahead(256,r),i=Pt(e)?e:e.DEF,s=this.getLaFuncFromCache(n).call(this,i);if(s!==void 0)return i[s].ALT.call(this);this.raiseNoAltException(r,e.ERR_MSG)}ruleFinallyStateUpdate(){if(this.RULE_STACK.pop(),this.RULE_OCCURRENCE_STACK.pop(),this.cstFinallyStateUpdate(),this.RULE_STACK.length===0&&this.isAtEndOfInput()===!1){let e=this.LA(1),r=this.errorMessageProvider.buildNotAllInputParsedMessage({firstRedundant:e,ruleName:this.getCurrRuleFullName()});this.SAVE_ERROR(new Ex(r,e))}}subruleInternal(e,r,n){let i;try{let a=n!==void 0?n.ARGS:void 0;return this.subruleIdx=r,i=e.apply(this,a),this.cstPostNonTerminal(i,n!==void 0&&n.LABEL!==void 0?n.LABEL:e.ruleName),i}catch(a){throw this.subruleInternalError(a,n,e.ruleName)}}subruleInternalError(e,r,n){throw pf(e)&&e.partialCstResult!==void 0&&(this.cstPostNonTerminal(e.partialCstResult,r!==void 0&&r.LABEL!==void 0?r.LABEL:n),delete e.partialCstResult),e}consumeInternal(e,r,n){let i;try{let a=this.LA(1);this.tokenMatcher(a,e)===!0?(this.consumeToken(),i=a):this.consumeInternalError(e,a,n)}catch(a){i=this.consumeInternalRecovery(e,r,a)}return this.cstPostTerminal(n!==void 0&&n.LABEL!==void 0?n.LABEL:e.name,i),i}consumeInternalError(e,r,n){let i,a=this.LA(0);throw n!==void 0&&n.ERR_MSG?i=n.ERR_MSG:i=this.errorMessageProvider.buildMismatchTokenMessage({expected:e,actual:r,previous:a,ruleName:this.getCurrRuleFullName()}),this.SAVE_ERROR(new Tp(i,r,a))}consumeInternalRecovery(e,r,n){if(this.recoveryEnabled&&n.name==="MismatchedTokenException"&&!this.isBackTracking()){let i=this.getFollowsForInRuleRecovery(e,r);try{return this.tryInRuleRecovery(e,i)}catch(a){throw a.name===kM?n:a}}else throw n}saveRecogState(){let e=this.errors,r=an(this.RULE_STACK);return{errors:e,lexerState:this.exportLexerState(),RULE_STACK:r,CST_STACK:this.CST_STACK}}reloadRecogState(e){this.errors=e.errors,this.importLexerState(e.lexerState),this.RULE_STACK=e.RULE_STACK}ruleInvocationStateUpdate(e,r,n){this.RULE_OCCURRENCE_STACK.push(n),this.RULE_STACK.push(e),this.cstInvocationStateUpdate(r)}isBackTracking(){return this.isBackTrackingStack.length!==0}getCurrRuleFullName(){let e=this.getLastExplicitRuleShortName();return this.shortRuleNameToFull[e]}shortRuleNameToFullName(e){return this.shortRuleNameToFull[e]}isAtEndOfInput(){return this.tokenMatcher(this.LA(1),fo)}reset(){this.resetLexerState(),this.subruleIdx=0,this.isBackTrackingStack=[],this.errors=[],this.RULE_STACK=[],this.CST_STACK=[],this.RULE_OCCURRENCE_STACK=[]}}});var yE,hle=N(()=>{"use strict";n1();qt();t1();Us();yE=class{static{o(this,"ErrorHandler")}initErrorHandler(e){this._errors=[],this.errorMessageProvider=Bt(e,"errorMessageProvider")?e.errorMessageProvider:ds.errorMessageProvider}SAVE_ERROR(e){if(pf(e))return e.context={ruleStack:this.getHumanReadableRuleStack(),ruleOccurrenceStack:an(this.RULE_OCCURRENCE_STACK)},this._errors.push(e),e;throw Error("Trying to save an Error which is not a RecognitionException")}get errors(){return an(this._errors)}set errors(e){this._errors=e}raiseEarlyExitException(e,r,n){let i=this.getCurrRuleFullName(),a=this.getGAstProductions()[i],l=e1(e,a,r,this.maxLookahead)[0],u=[];for(let f=1;f<=this.maxLookahead;f++)u.push(this.LA(f));let h=this.errorMessageProvider.buildEarlyExitMessage({expectedIterationPaths:l,actual:u,previous:this.LA(0),customUserDescription:n,ruleName:i});throw this.SAVE_ERROR(new Sx(h,this.LA(1),this.LA(0)))}raiseNoAltException(e,r){let n=this.getCurrRuleFullName(),i=this.getGAstProductions()[n],a=Jg(e,i,this.maxLookahead),s=[];for(let h=1;h<=this.maxLookahead;h++)s.push(this.LA(h));let l=this.LA(0),u=this.errorMessageProvider.buildNoViableAltMessage({expectedPathsPerAlt:a,actual:s,previous:l,customUserDescription:r,ruleName:this.getCurrRuleFullName()});throw this.SAVE_ERROR(new kx(u,this.LA(1),l))}}});var vE,fle=N(()=>{"use strict";xx();qt();vE=class{static{o(this,"ContentAssist")}initContentAssist(){}computeContentAssist(e,r){let n=this.gastProductionsCache[e];if(mr(n))throw Error(`Rule ->${e}<- does not exist in this grammar.`);return eE([n],r,this.tokenMatcher,this.maxLookahead)}getNextPossibleTokenTypes(e){let r=ia(e.ruleStack),i=this.getGAstProductions()[r];return new Kk(i,e).startWalking()}}});function Ax(t,e,r,n=!1){bE(r);let i=ma(this.recordingProdStack),a=Ai(e)?e:e.DEF,s=new t({definition:[],idx:r});return n&&(s.separator=e.SEP),Bt(e,"MAX_LOOKAHEAD")&&(s.maxLookahead=e.MAX_LOOKAHEAD),this.recordingProdStack.push(s),a.call(this),i.definition.push(s),this.recordingProdStack.pop(),TE}function zFe(t,e){bE(e);let r=ma(this.recordingProdStack),n=Pt(t)===!1,i=n===!1?t:t.DEF,a=new wn({definition:[],idx:e,ignoreAmbiguities:n&&t.IGNORE_AMBIGUITIES===!0});Bt(t,"MAX_LOOKAHEAD")&&(a.maxLookahead=t.MAX_LOOKAHEAD);let s=B2(i,l=>Ai(l.GATE));return a.hasPredicates=s,r.definition.push(a),Ae(i,l=>{let u=new Dn({definition:[]});a.definition.push(u),Bt(l,"IGNORE_AMBIGUITIES")?u.ignoreAmbiguities=l.IGNORE_AMBIGUITIES:Bt(l,"GATE")&&(u.ignoreAmbiguities=!0),this.recordingProdStack.push(u),l.ALT.call(this),this.recordingProdStack.pop()}),TE}function mle(t){return t===0?"":`${t}`}function bE(t){if(t<0||t>ple){let e=new Error(`Invalid DSL Method idx value: <${t}> + Idx value must be a none negative value smaller than ${ple+1}`);throw e.KNOWN_RECORDER_ERROR=!0,e}}var TE,dle,ple,gle,yle,$Fe,xE,vle=N(()=>{"use strict";qt();fs();px();xp();bp();Us();oE();TE={description:"This Object indicates the Parser is during Recording Phase"};Object.freeze(TE);dle=!0,ple=Math.pow(2,8)-1,gle=df({name:"RECORDING_PHASE_TOKEN",pattern:Kn.NA});Uu([gle]);yle=Wu(gle,`This IToken indicates the Parser is in Recording Phase + See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,-1,-1,-1,-1,-1,-1);Object.freeze(yle);$Fe={name:`This CSTNode indicates the Parser is in Recording Phase + See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,children:{}},xE=class{static{o(this,"GastRecorder")}initGastRecorder(e){this.recordingProdStack=[],this.RECORDING_PHASE=!1}enableRecording(){this.RECORDING_PHASE=!0,this.TRACE_INIT("Enable Recording",()=>{for(let e=0;e<10;e++){let r=e>0?e:"";this[`CONSUME${r}`]=function(n,i){return this.consumeInternalRecord(n,e,i)},this[`SUBRULE${r}`]=function(n,i){return this.subruleInternalRecord(n,e,i)},this[`OPTION${r}`]=function(n){return this.optionInternalRecord(n,e)},this[`OR${r}`]=function(n){return this.orInternalRecord(n,e)},this[`MANY${r}`]=function(n){this.manyInternalRecord(e,n)},this[`MANY_SEP${r}`]=function(n){this.manySepFirstInternalRecord(e,n)},this[`AT_LEAST_ONE${r}`]=function(n){this.atLeastOneInternalRecord(e,n)},this[`AT_LEAST_ONE_SEP${r}`]=function(n){this.atLeastOneSepFirstInternalRecord(e,n)}}this.consume=function(e,r,n){return this.consumeInternalRecord(r,e,n)},this.subrule=function(e,r,n){return this.subruleInternalRecord(r,e,n)},this.option=function(e,r){return this.optionInternalRecord(r,e)},this.or=function(e,r){return this.orInternalRecord(r,e)},this.many=function(e,r){this.manyInternalRecord(e,r)},this.atLeastOne=function(e,r){this.atLeastOneInternalRecord(e,r)},this.ACTION=this.ACTION_RECORD,this.BACKTRACK=this.BACKTRACK_RECORD,this.LA=this.LA_RECORD})}disableRecording(){this.RECORDING_PHASE=!1,this.TRACE_INIT("Deleting Recording methods",()=>{let e=this;for(let r=0;r<10;r++){let n=r>0?r:"";delete e[`CONSUME${n}`],delete e[`SUBRULE${n}`],delete e[`OPTION${n}`],delete e[`OR${n}`],delete e[`MANY${n}`],delete e[`MANY_SEP${n}`],delete e[`AT_LEAST_ONE${n}`],delete e[`AT_LEAST_ONE_SEP${n}`]}delete e.consume,delete e.subrule,delete e.option,delete e.or,delete e.many,delete e.atLeastOne,delete e.ACTION,delete e.BACKTRACK,delete e.LA})}ACTION_RECORD(e){}BACKTRACK_RECORD(e,r){return()=>!0}LA_RECORD(e){return i1}topLevelRuleRecord(e,r){try{let n=new us({definition:[],name:e});return n.name=e,this.recordingProdStack.push(n),r.call(this),this.recordingProdStack.pop(),n}catch(n){if(n.KNOWN_RECORDER_ERROR!==!0)try{n.message=n.message+` This error was thrown during the "grammar recording phase" For more info see: - https://chevrotain.io/docs/guide/internals.html#grammar-recording`}catch{throw n}throw n}}optionInternalRecord(e,r){return Ex.call(this,ln,e,r)}atLeastOneInternalRecord(e,r){Ex.call(this,Ln,r,e)}atLeastOneSepFirstInternalRecord(e,r){Ex.call(this,Rn,r,e,roe)}manyInternalRecord(e,r){Ex.call(this,Or,r,e)}manySepFirstInternalRecord(e,r){Ex.call(this,wn,r,e,roe)}orInternalRecord(e,r){return lBe.call(this,e,r)}subruleInternalRecord(e,r,n){if(fE(r),!e||Bt(e,"ruleName")===!1){let l=new Error(` argument is invalid expecting a Parser method reference but got: <${JSON.stringify(e)}> - inside top level rule: <${this.recordingProdStack[0].name}>`);throw l.KNOWN_RECORDER_ERROR=!0,l}let i=ga(this.recordingProdStack),a=e.ruleName,s=new on({idx:r,nonTerminalName:a,label:n?.LABEL,referencedRule:void 0});return i.definition.push(s),this.outputCst?oBe:dE}consumeInternalRecord(e,r,n){if(fE(r),!MN(e)){let s=new Error(` argument is invalid expecting a TokenType reference but got: <${JSON.stringify(e)}> - inside top level rule: <${this.recordingProdStack[0].name}>`);throw s.KNOWN_RECORDER_ERROR=!0,s}let i=ga(this.recordingProdStack),a=new kr({idx:r,terminalType:e,label:n?.LABEL});return i.definition.push(a),soe}};o(Ex,"recordProd");o(lBe,"recordOrProd");o(ioe,"getIdxSuffix");o(fE,"assertMethodIdxIsValid")});var pE,loe=N(()=>{"use strict";qt();Ug();zs();pE=class{static{o(this,"PerformanceTracer")}initPerformanceTracer(e){if(Bt(e,"traceInitPerf")){let r=e.traceInitPerf,n=typeof r=="number";this.traceInitMaxIdent=n?r:1/0,this.traceInitPerf=n?r>0:r}else this.traceInitMaxIdent=0,this.traceInitPerf=ls.traceInitPerf;this.traceInitIndent=-1}TRACE_INIT(e,r){if(this.traceInitPerf===!0){this.traceInitIndent++;let n=new Array(this.traceInitIndent+1).join(" ");this.traceInitIndent <${e}>`);let{time:i,value:a}=lx(r),s=i>10?console.warn:console.log;return this.traceInitIndent time: ${i}ms`),this.traceInitIndent--,a}else return r()}}});function coe(t,e){e.forEach(r=>{let n=r.prototype;Object.getOwnPropertyNames(n).forEach(i=>{if(i==="constructor")return;let a=Object.getOwnPropertyDescriptor(n,i);a&&(a.get||a.set)?Object.defineProperty(t.prototype,i,a):t.prototype[i]=r.prototype[i]})})}var uoe=N(()=>{"use strict";o(coe,"applyMixins")});function mE(t=void 0){return function(){return t}}var n1,ls,i1,Gi,Sx,Cx,zs=N(()=>{"use strict";qt();Ug();zae();yp();Kg();Pse();qN();Vse();Kse();Qse();Zse();Jse();eoe();toe();ooe();loe();uoe();xx();n1=Uu(uo,"",NaN,NaN,NaN,NaN,NaN,NaN);Object.freeze(n1);ls=Object.freeze({recoveryEnabled:!1,maxLookahead:3,dynamicTokensEnabled:!1,outputCst:!0,errorMessageProvider:Hu,nodeLocationTracking:"none",traceInitPerf:!1,skipValidations:!1}),i1=Object.freeze({recoveryValueFunc:o(()=>{},"recoveryValueFunc"),resyncEnabled:!0});(function(t){t[t.INVALID_RULE_NAME=0]="INVALID_RULE_NAME",t[t.DUPLICATE_RULE_NAME=1]="DUPLICATE_RULE_NAME",t[t.INVALID_RULE_OVERRIDE=2]="INVALID_RULE_OVERRIDE",t[t.DUPLICATE_PRODUCTIONS=3]="DUPLICATE_PRODUCTIONS",t[t.UNRESOLVED_SUBRULE_REF=4]="UNRESOLVED_SUBRULE_REF",t[t.LEFT_RECURSION=5]="LEFT_RECURSION",t[t.NONE_LAST_EMPTY_ALT=6]="NONE_LAST_EMPTY_ALT",t[t.AMBIGUOUS_ALTS=7]="AMBIGUOUS_ALTS",t[t.CONFLICT_TOKENS_RULES_NAMESPACE=8]="CONFLICT_TOKENS_RULES_NAMESPACE",t[t.INVALID_TOKEN_NAME=9]="INVALID_TOKEN_NAME",t[t.NO_NON_EMPTY_LOOKAHEAD=10]="NO_NON_EMPTY_LOOKAHEAD",t[t.AMBIGUOUS_PREFIX_ALTS=11]="AMBIGUOUS_PREFIX_ALTS",t[t.TOO_MANY_ALTS=12]="TOO_MANY_ALTS",t[t.CUSTOM_LOOKAHEAD_VALIDATION=13]="CUSTOM_LOOKAHEAD_VALIDATION"})(Gi||(Gi={}));o(mE,"EMPTY_ALT");Sx=class t{static{o(this,"Parser")}static performSelfAnalysis(e){throw Error("The **static** `performSelfAnalysis` method has been deprecated. \nUse the **instance** method with the same name instead.")}performSelfAnalysis(){this.TRACE_INIT("performSelfAnalysis",()=>{let e;this.selfAnalysisDone=!0;let r=this.className;this.TRACE_INIT("toFastProps",()=>{cx(this)}),this.TRACE_INIT("Grammar Recording",()=>{try{this.enableRecording(),Ae(this.definedRulesNames,i=>{let s=this[i].originalGrammarAction,l;this.TRACE_INIT(`${i} Rule`,()=>{l=this.topLevelRuleRecord(i,s)}),this.gastProductionsCache[i]=l})}finally{this.disableRecording()}});let n=[];if(this.TRACE_INIT("Grammar Resolving",()=>{n=Ise({rules:br(this.gastProductionsCache)}),this.definitionErrors=this.definitionErrors.concat(n)}),this.TRACE_INIT("Grammar Validations",()=>{if(ur(n)&&this.skipValidations===!1){let i=Ose({rules:br(this.gastProductionsCache),tokenTypes:br(this.tokensMap),errMsgProvider:Fl,grammarName:r}),a=Ase({lookaheadStrategy:this.lookaheadStrategy,rules:br(this.gastProductionsCache),tokenTypes:br(this.tokensMap),grammarName:r});this.definitionErrors=this.definitionErrors.concat(i,a)}}),ur(this.definitionErrors)&&(this.recoveryEnabled&&this.TRACE_INIT("computeAllProdsFollows",()=>{let i=$ae(br(this.gastProductionsCache));this.resyncFollows=i}),this.TRACE_INIT("ComputeLookaheadFunctions",()=>{var i,a;(a=(i=this.lookaheadStrategy).initialize)===null||a===void 0||a.call(i,{rules:br(this.gastProductionsCache)}),this.preComputeLookaheadFunctions(br(this.gastProductionsCache))})),!t.DEFER_DEFINITION_ERRORS_HANDLING&&!ur(this.definitionErrors))throw e=Je(this.definitionErrors,i=>i.message),new Error(`Parser Definition Errors detected: + https://chevrotain.io/docs/guide/internals.html#grammar-recording`}catch{throw n}throw n}}optionInternalRecord(e,r){return Ax.call(this,ln,e,r)}atLeastOneInternalRecord(e,r){Ax.call(this,Ln,r,e)}atLeastOneSepFirstInternalRecord(e,r){Ax.call(this,Rn,r,e,dle)}manyInternalRecord(e,r){Ax.call(this,Pr,r,e)}manySepFirstInternalRecord(e,r){Ax.call(this,Tn,r,e,dle)}orInternalRecord(e,r){return zFe.call(this,e,r)}subruleInternalRecord(e,r,n){if(bE(r),!e||Bt(e,"ruleName")===!1){let l=new Error(` argument is invalid expecting a Parser method reference but got: <${JSON.stringify(e)}> + inside top level rule: <${this.recordingProdStack[0].name}>`);throw l.KNOWN_RECORDER_ERROR=!0,l}let i=ma(this.recordingProdStack),a=e.ruleName,s=new on({idx:r,nonTerminalName:a,label:n?.LABEL,referencedRule:void 0});return i.definition.push(s),this.outputCst?$Fe:TE}consumeInternalRecord(e,r,n){if(bE(r),!hM(e)){let s=new Error(` argument is invalid expecting a TokenType reference but got: <${JSON.stringify(e)}> + inside top level rule: <${this.recordingProdStack[0].name}>`);throw s.KNOWN_RECORDER_ERROR=!0,s}let i=ma(this.recordingProdStack),a=new Er({idx:r,terminalType:e,label:n?.LABEL});return i.definition.push(a),yle}};o(Ax,"recordProd");o(zFe,"recordOrProd");o(mle,"getIdxSuffix");o(bE,"assertMethodIdxIsValid")});var wE,xle=N(()=>{"use strict";qt();Hg();Us();wE=class{static{o(this,"PerformanceTracer")}initPerformanceTracer(e){if(Bt(e,"traceInitPerf")){let r=e.traceInitPerf,n=typeof r=="number";this.traceInitMaxIdent=n?r:1/0,this.traceInitPerf=n?r>0:r}else this.traceInitMaxIdent=0,this.traceInitPerf=ds.traceInitPerf;this.traceInitIndent=-1}TRACE_INIT(e,r){if(this.traceInitPerf===!0){this.traceInitIndent++;let n=new Array(this.traceInitIndent+1).join(" ");this.traceInitIndent <${e}>`);let{time:i,value:a}=hx(r),s=i>10?console.warn:console.log;return this.traceInitIndent time: ${i}ms`),this.traceInitIndent--,a}else return r()}}});function ble(t,e){e.forEach(r=>{let n=r.prototype;Object.getOwnPropertyNames(n).forEach(i=>{if(i==="constructor")return;let a=Object.getOwnPropertyDescriptor(n,i);a&&(a.get||a.set)?Object.defineProperty(t.prototype,i,a):t.prototype[i]=r.prototype[i]})})}var Tle=N(()=>{"use strict";o(ble,"applyMixins")});function kE(t=void 0){return function(){return t}}var i1,ds,a1,Vi,_x,Dx,Us=N(()=>{"use strict";qt();Hg();Qse();bp();Qg();Yoe();EM();Joe();ole();lle();cle();ule();hle();fle();vle();xle();Tle();wx();i1=Wu(fo,"",NaN,NaN,NaN,NaN,NaN,NaN);Object.freeze(i1);ds=Object.freeze({recoveryEnabled:!1,maxLookahead:3,dynamicTokensEnabled:!1,outputCst:!0,errorMessageProvider:qu,nodeLocationTracking:"none",traceInitPerf:!1,skipValidations:!1}),a1=Object.freeze({recoveryValueFunc:o(()=>{},"recoveryValueFunc"),resyncEnabled:!0});(function(t){t[t.INVALID_RULE_NAME=0]="INVALID_RULE_NAME",t[t.DUPLICATE_RULE_NAME=1]="DUPLICATE_RULE_NAME",t[t.INVALID_RULE_OVERRIDE=2]="INVALID_RULE_OVERRIDE",t[t.DUPLICATE_PRODUCTIONS=3]="DUPLICATE_PRODUCTIONS",t[t.UNRESOLVED_SUBRULE_REF=4]="UNRESOLVED_SUBRULE_REF",t[t.LEFT_RECURSION=5]="LEFT_RECURSION",t[t.NONE_LAST_EMPTY_ALT=6]="NONE_LAST_EMPTY_ALT",t[t.AMBIGUOUS_ALTS=7]="AMBIGUOUS_ALTS",t[t.CONFLICT_TOKENS_RULES_NAMESPACE=8]="CONFLICT_TOKENS_RULES_NAMESPACE",t[t.INVALID_TOKEN_NAME=9]="INVALID_TOKEN_NAME",t[t.NO_NON_EMPTY_LOOKAHEAD=10]="NO_NON_EMPTY_LOOKAHEAD",t[t.AMBIGUOUS_PREFIX_ALTS=11]="AMBIGUOUS_PREFIX_ALTS",t[t.TOO_MANY_ALTS=12]="TOO_MANY_ALTS",t[t.CUSTOM_LOOKAHEAD_VALIDATION=13]="CUSTOM_LOOKAHEAD_VALIDATION"})(Vi||(Vi={}));o(kE,"EMPTY_ALT");_x=class t{static{o(this,"Parser")}static performSelfAnalysis(e){throw Error("The **static** `performSelfAnalysis` method has been deprecated. \nUse the **instance** method with the same name instead.")}performSelfAnalysis(){this.TRACE_INIT("performSelfAnalysis",()=>{let e;this.selfAnalysisDone=!0;let r=this.className;this.TRACE_INIT("toFastProps",()=>{fx(this)}),this.TRACE_INIT("Grammar Recording",()=>{try{this.enableRecording(),Ae(this.definedRulesNames,i=>{let s=this[i].originalGrammarAction,l;this.TRACE_INIT(`${i} Rule`,()=>{l=this.topLevelRuleRecord(i,s)}),this.gastProductionsCache[i]=l})}finally{this.disableRecording()}});let n=[];if(this.TRACE_INIT("Grammar Resolving",()=>{n=Woe({rules:br(this.gastProductionsCache)}),this.definitionErrors=this.definitionErrors.concat(n)}),this.TRACE_INIT("Grammar Validations",()=>{if(hr(n)&&this.skipValidations===!1){let i=qoe({rules:br(this.gastProductionsCache),tokenTypes:br(this.tokensMap),errMsgProvider:$l,grammarName:r}),a=Foe({lookaheadStrategy:this.lookaheadStrategy,rules:br(this.gastProductionsCache),tokenTypes:br(this.tokensMap),grammarName:r});this.definitionErrors=this.definitionErrors.concat(i,a)}}),hr(this.definitionErrors)&&(this.recoveryEnabled&&this.TRACE_INIT("computeAllProdsFollows",()=>{let i=Kse(br(this.gastProductionsCache));this.resyncFollows=i}),this.TRACE_INIT("ComputeLookaheadFunctions",()=>{var i,a;(a=(i=this.lookaheadStrategy).initialize)===null||a===void 0||a.call(i,{rules:br(this.gastProductionsCache)}),this.preComputeLookaheadFunctions(br(this.gastProductionsCache))})),!t.DEFER_DEFINITION_ERRORS_HANDLING&&!hr(this.definitionErrors))throw e=Je(this.definitionErrors,i=>i.message),new Error(`Parser Definition Errors detected: ${e.join(` ------------------------------- `)}`)})}constructor(e,r){this.definitionErrors=[],this.selfAnalysisDone=!1;let n=this;if(n.initErrorHandler(r),n.initLexerAdapter(),n.initLooksAhead(r),n.initRecognizerEngine(e,r),n.initRecoverable(r),n.initTreeBuilder(r),n.initContentAssist(),n.initGastRecorder(r),n.initPerformanceTracer(r),Bt(r,"ignoredIssues"))throw new Error(`The IParserConfig property has been deprecated. Please use the flag on the relevant DSL method instead. See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#IGNORING_AMBIGUITIES - For further details.`);this.skipValidations=Bt(r,"skipValidations")?r.skipValidations:ls.skipValidations}};Sx.DEFER_DEFINITION_ERRORS_HANDLING=!1;coe(Sx,[Qk,tE,aE,sE,lE,oE,cE,uE,hE,pE]);Cx=class extends Sx{static{o(this,"EmbeddedActionsParser")}constructor(e,r=ls){let n=an(r);n.outputCst=!1,super(e,n)}}});var hoe=N(()=>{"use strict";os()});var foe=N(()=>{"use strict"});var doe=N(()=>{"use strict";hoe();foe()});var poe=N(()=>{"use strict";wN()});var df=N(()=>{"use strict";wN();zs();hx();yp();e1();YN();Kg();r1();IN();os();os();doe();poe()});function xp(t,e,r){return`${t.name}_${e}_${r}`}function voe(t){let e={decisionMap:{},decisionStates:[],ruleToStartState:new Map,ruleToStopState:new Map,states:[]};mBe(e,t);let r=t.length;for(let n=0;nxoe(t,e,s));return l1(t,e,n,r,...i)}function wBe(t,e,r){let n=aa(t,e,r,{type:pf});mf(t,n);let i=l1(t,e,n,r,bp(t,e,r));return TBe(t,e,r,i)}function bp(t,e,r){let n=Yr(Je(r.definition,i=>xoe(t,e,i)),i=>i!==void 0);return n.length===1?n[0]:n.length===0?void 0:EBe(t,n)}function boe(t,e,r,n,i){let a=n.left,s=n.right,l=aa(t,e,r,{type:pBe});mf(t,l);let u=aa(t,e,r,{type:yoe});return a.loopback=l,u.loopback=l,t.decisionMap[xp(e,i?"RepetitionMandatoryWithSeparator":"RepetitionMandatory",r.idx)]=l,_i(s,l),i===void 0?(_i(l,a),_i(l,u)):(_i(l,u),_i(l,i.left),_i(i.right,a)),{left:a,right:u}}function woe(t,e,r,n,i){let a=n.left,s=n.right,l=aa(t,e,r,{type:dBe});mf(t,l);let u=aa(t,e,r,{type:yoe}),h=aa(t,e,r,{type:fBe});return l.loopback=h,u.loopback=h,_i(l,a),_i(l,u),_i(s,h),i!==void 0?(_i(h,u),_i(h,i.left),_i(i.right,a)):_i(h,l),t.decisionMap[xp(e,i?"RepetitionWithSeparator":"Repetition",r.idx)]=l,{left:l,right:u}}function TBe(t,e,r,n){let i=n.left,a=n.right;return _i(i,a),t.decisionMap[xp(e,"Option",r.idx)]=i,n}function mf(t,e){return t.decisionStates.push(e),e.decision=t.decisionStates.length-1,e.decision}function l1(t,e,r,n,...i){let a=aa(t,e,n,{type:hBe,start:r});r.end=a;for(let l of i)l!==void 0?(_i(r,l.left),_i(l.right,a)):_i(r,a);let s={left:r,right:a};return t.decisionMap[xp(e,kBe(n),n.idx)]=r,s}function kBe(t){if(t instanceof Tn)return"Alternation";if(t instanceof ln)return"Option";if(t instanceof Or)return"Repetition";if(t instanceof wn)return"RepetitionWithSeparator";if(t instanceof Ln)return"RepetitionMandatory";if(t instanceof Rn)return"RepetitionMandatoryWithSeparator";throw new Error("Invalid production type encountered")}function EBe(t,e){let r=e.length;for(let a=0;a{"use strict";Gm();IL();df();o(xp,"buildATNKey");pf=1,uBe=2,moe=4,goe=5,o1=7,hBe=8,fBe=9,dBe=10,pBe=11,yoe=12,Ax=class{static{o(this,"AbstractTransition")}constructor(e){this.target=e}isEpsilon(){return!1}},a1=class extends Ax{static{o(this,"AtomTransition")}constructor(e,r){super(e),this.tokenType=r}},_x=class extends Ax{static{o(this,"EpsilonTransition")}constructor(e){super(e)}isEpsilon(){return!0}},s1=class extends Ax{static{o(this,"RuleTransition")}constructor(e,r,n){super(e),this.rule=r,this.followState=n}isEpsilon(){return!0}};o(voe,"createATN");o(mBe,"createRuleStartAndStopATNStates");o(xoe,"atom");o(gBe,"repetition");o(yBe,"repetitionSep");o(vBe,"repetitionMandatory");o(xBe,"repetitionMandatorySep");o(bBe,"alternation");o(wBe,"option");o(bp,"block");o(boe,"plus");o(woe,"star");o(TBe,"optional");o(mf,"defineDecisionState");o(l1,"makeAlts");o(kBe,"getProdType");o(EBe,"makeBlock");o(rM,"tokenRef");o(SBe,"ruleRef");o(CBe,"buildRuleHandle");o(_i,"epsilon");o(aa,"newState");o(nM,"addTransition");o(ABe,"removeState")});function iM(t,e=!0){return`${e?`a${t.alt}`:""}s${t.state.stateNumber}:${t.stack.map(r=>r.stateNumber.toString()).join("_")}`}var Dx,c1,koe=N(()=>{"use strict";Gm();Dx={},c1=class{static{o(this,"ATNConfigSet")}constructor(){this.map={},this.configs=[]}get size(){return this.configs.length}finalize(){this.map={}}add(e){let r=iM(e);r in this.map||(this.map[r]=this.configs.length,this.configs.push(e))}get elements(){return this.configs}get alts(){return Je(this.configs,e=>e.alt)}get key(){let e="";for(let r in this.map)e+=r+":";return e}};o(iM,"getATNConfigKey")});function _Be(t,e){let r={};return n=>{let i=n.toString(),a=r[i];return a!==void 0||(a={atnStartState:t,decision:e,states:{}},r[i]=a),a}}function Soe(t,e=!0){let r=new Set;for(let n of t){let i=new Set;for(let a of n){if(a===void 0){if(e)break;return!1}let s=[a.tokenTypeIdx].concat(a.categoryMatches);for(let l of s)if(r.has(l)){if(!i.has(l))return!1}else r.add(l),i.add(l)}}return!0}function DBe(t){let e=t.decisionStates.length,r=Array(e);for(let n=0;nVu(i)).join(", "),r=t.production.idx===0?"":t.production.idx,n=`Ambiguous Alternatives Detected: <${t.ambiguityIndices.join(", ")}> in <${IBe(t.production)}${r}> inside <${t.topLevelRule.name}> Rule, + For further details.`);this.skipValidations=Bt(r,"skipValidations")?r.skipValidations:ds.skipValidations}};_x.DEFER_DEFINITION_ERRORS_HANDLING=!1;ble(_x,[aE,cE,dE,pE,gE,mE,yE,vE,xE,wE]);Dx=class extends _x{static{o(this,"EmbeddedActionsParser")}constructor(e,r=ds){let n=an(r);n.outputCst=!1,super(e,n)}}});var wle=N(()=>{"use strict";fs()});var kle=N(()=>{"use strict"});var Ele=N(()=>{"use strict";wle();kle()});var Sle=N(()=>{"use strict";JN()});var mf=N(()=>{"use strict";JN();Us();px();bp();t1();SM();Qg();n1();fM();fs();fs();Ele();Sle()});function wp(t,e,r){return`${t.name}_${e}_${r}`}function Dle(t){let e={decisionMap:{},decisionStates:[],ruleToStartState:new Map,ruleToStopState:new Map,states:[]};YFe(e,t);let r=t.length;for(let n=0;nLle(t,e,s));return c1(t,e,n,r,...i)}function JFe(t,e,r){let n=aa(t,e,r,{type:gf});yf(t,n);let i=c1(t,e,n,r,kp(t,e,r));return e$e(t,e,r,i)}function kp(t,e,r){let n=Yr(Je(r.definition,i=>Lle(t,e,i)),i=>i!==void 0);return n.length===1?n[0]:n.length===0?void 0:r$e(t,n)}function Rle(t,e,r,n,i){let a=n.left,s=n.right,l=aa(t,e,r,{type:qFe});yf(t,l);let u=aa(t,e,r,{type:_le});return a.loopback=l,u.loopback=l,t.decisionMap[wp(e,i?"RepetitionMandatoryWithSeparator":"RepetitionMandatory",r.idx)]=l,Di(s,l),i===void 0?(Di(l,a),Di(l,u)):(Di(l,u),Di(l,i.left),Di(i.right,a)),{left:a,right:u}}function Nle(t,e,r,n,i){let a=n.left,s=n.right,l=aa(t,e,r,{type:WFe});yf(t,l);let u=aa(t,e,r,{type:_le}),h=aa(t,e,r,{type:HFe});return l.loopback=h,u.loopback=h,Di(l,a),Di(l,u),Di(s,h),i!==void 0?(Di(h,u),Di(h,i.left),Di(i.right,a)):Di(h,l),t.decisionMap[wp(e,i?"RepetitionWithSeparator":"Repetition",r.idx)]=l,{left:l,right:u}}function e$e(t,e,r,n){let i=n.left,a=n.right;return Di(i,a),t.decisionMap[wp(e,"Option",r.idx)]=i,n}function yf(t,e){return t.decisionStates.push(e),e.decision=t.decisionStates.length-1,e.decision}function c1(t,e,r,n,...i){let a=aa(t,e,n,{type:UFe,start:r});r.end=a;for(let l of i)l!==void 0?(Di(r,l.left),Di(l.right,a)):Di(r,a);let s={left:r,right:a};return t.decisionMap[wp(e,t$e(n),n.idx)]=r,s}function t$e(t){if(t instanceof wn)return"Alternation";if(t instanceof ln)return"Option";if(t instanceof Pr)return"Repetition";if(t instanceof Tn)return"RepetitionWithSeparator";if(t instanceof Ln)return"RepetitionMandatory";if(t instanceof Rn)return"RepetitionMandatoryWithSeparator";throw new Error("Invalid production type encountered")}function r$e(t,e){let r=e.length;for(let a=0;a{"use strict";Um();fR();mf();o(wp,"buildATNKey");gf=1,VFe=2,Cle=4,Ale=5,l1=7,UFe=8,HFe=9,WFe=10,qFe=11,_le=12,Lx=class{static{o(this,"AbstractTransition")}constructor(e){this.target=e}isEpsilon(){return!1}},s1=class extends Lx{static{o(this,"AtomTransition")}constructor(e,r){super(e),this.tokenType=r}},Rx=class extends Lx{static{o(this,"EpsilonTransition")}constructor(e){super(e)}isEpsilon(){return!0}},o1=class extends Lx{static{o(this,"RuleTransition")}constructor(e,r,n){super(e),this.rule=r,this.followState=n}isEpsilon(){return!0}};o(Dle,"createATN");o(YFe,"createRuleStartAndStopATNStates");o(Lle,"atom");o(XFe,"repetition");o(jFe,"repetitionSep");o(KFe,"repetitionMandatory");o(QFe,"repetitionMandatorySep");o(ZFe,"alternation");o(JFe,"option");o(kp,"block");o(Rle,"plus");o(Nle,"star");o(e$e,"optional");o(yf,"defineDecisionState");o(c1,"makeAlts");o(t$e,"getProdType");o(r$e,"makeBlock");o(IM,"tokenRef");o(n$e,"ruleRef");o(i$e,"buildRuleHandle");o(Di,"epsilon");o(aa,"newState");o(OM,"addTransition");o(a$e,"removeState")});function PM(t,e=!0){return`${e?`a${t.alt}`:""}s${t.state.stateNumber}:${t.stack.map(r=>r.stateNumber.toString()).join("_")}`}var Nx,u1,Ile=N(()=>{"use strict";Um();Nx={},u1=class{static{o(this,"ATNConfigSet")}constructor(){this.map={},this.configs=[]}get size(){return this.configs.length}finalize(){this.map={}}add(e){let r=PM(e);r in this.map||(this.map[r]=this.configs.length,this.configs.push(e))}get elements(){return this.configs}get alts(){return Je(this.configs,e=>e.alt)}get key(){let e="";for(let r in this.map)e+=r+":";return e}};o(PM,"getATNConfigKey")});function s$e(t,e){let r={};return n=>{let i=n.toString(),a=r[i];return a!==void 0||(a={atnStartState:t,decision:e,states:{}},r[i]=a),a}}function Ple(t,e=!0){let r=new Set;for(let n of t){let i=new Set;for(let a of n){if(a===void 0){if(e)break;return!1}let s=[a.tokenTypeIdx].concat(a.categoryMatches);for(let l of s)if(r.has(l)){if(!i.has(l))return!1}else r.add(l),i.add(l)}}return!0}function o$e(t){let e=t.decisionStates.length,r=Array(e);for(let n=0;nHu(i)).join(", "),r=t.production.idx===0?"":t.production.idx,n=`Ambiguous Alternatives Detected: <${t.ambiguityIndices.join(", ")}> in <${f$e(t.production)}${r}> inside <${t.topLevelRule.name}> Rule, <${e}> may appears as a prefix path in all these alternatives. `;return n=n+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES -For Further details.`,n}function IBe(t){if(t instanceof on)return"SUBRULE";if(t instanceof ln)return"OPTION";if(t instanceof Tn)return"OR";if(t instanceof Ln)return"AT_LEAST_ONE";if(t instanceof Rn)return"AT_LEAST_ONE_SEP";if(t instanceof wn)return"MANY_SEP";if(t instanceof Or)return"MANY";if(t instanceof kr)return"CONSUME";throw Error("non exhaustive match")}function OBe(t,e,r){let n=ya(e.configs.elements,a=>a.state.transitions),i=rne(n.filter(a=>a instanceof a1).map(a=>a.tokenType),a=>a.tokenTypeIdx);return{actualToken:r,possibleTokenTypes:i,tokenPath:t}}function PBe(t,e){return t.edges[e.tokenTypeIdx]}function BBe(t,e,r){let n=new c1,i=[];for(let s of t.elements){if(r.is(s.alt)===!1)continue;if(s.state.type===o1){i.push(s);continue}let l=s.state.transitions.length;for(let u=0;u0&&!VBe(a))for(let s of i)a.add(s);return a}function FBe(t,e){if(t instanceof a1&&dx(e,t.tokenType))return t.target}function $Be(t,e){let r;for(let n of t.elements)if(e.is(n.alt)===!0){if(r===void 0)r=n.alt;else if(r!==n.alt)return}return r}function Aoe(t){return{configs:t,edges:{},isAcceptState:!1,prediction:-1}}function Coe(t,e,r,n){return n=_oe(t,n),e.edges[r.tokenTypeIdx]=n,n}function _oe(t,e){if(e===Dx)return e;let r=e.configs.key,n=t.states[r];return n!==void 0?n:(e.configs.finalize(),t.states[r]=e,e)}function zBe(t){let e=new c1,r=t.transitions.length;for(let n=0;n0){let i=[...t.stack],s={state:i.pop(),alt:t.alt,stack:i};yE(s,e)}else e.add(t);return}r.epsilonOnlyTransitions||e.add(t);let n=r.transitions.length;for(let i=0;i1)return!0;return!1}function YBe(t){for(let e of Array.from(t.values()))if(Object.keys(e).length===1)return!0;return!1}var gE,Eoe,Lx,Doe=N(()=>{"use strict";df();Toe();koe();VL();PL();nne();Gm();yT();qT();QT();qL();o(_Be,"createDFACache");gE=class{static{o(this,"PredicateSet")}constructor(){this.predicates=[]}is(e){return e>=this.predicates.length||this.predicates[e]}set(e,r){this.predicates[e]=r}toString(){let e="",r=this.predicates.length;for(let n=0;nconsole.log(n)}initialize(e){this.atn=voe(e.rules),this.dfas=DBe(this.atn)}validateAmbiguousAlternationAlternatives(){return[]}validateEmptyOrAlternatives(){return[]}buildLookaheadForAlternation(e){let{prodOccurrence:r,rule:n,hasPredicates:i,dynamicTokensEnabled:a}=e,s=this.dfas,l=this.logging,u=xp(n,"Alternation",r),f=this.atn.decisionMap[u].decision,d=Je(Xk({maxLookahead:1,occurrence:r,prodType:"Alternation",rule:n}),p=>Je(p,m=>m[0]));if(Soe(d,!1)&&!a){let p=Xr(d,(m,g,y)=>(Ae(g,v=>{v&&(m[v.tokenTypeIdx]=y,Ae(v.categoryMatches,x=>{m[x]=y}))}),m),{});return i?function(m){var g;let y=this.LA(1),v=p[y.tokenTypeIdx];if(m!==void 0&&v!==void 0){let x=(g=m[v])===null||g===void 0?void 0:g.GATE;if(x!==void 0&&x.call(this)===!1)return}return v}:function(){let m=this.LA(1);return p[m.tokenTypeIdx]}}else return i?function(p){let m=new gE,g=p===void 0?0:p.length;for(let v=0;vJe(p,m=>m[0]));if(Soe(d)&&d[0][0]&&!a){let p=d[0],m=qr(p);if(m.length===1&&ur(m[0].categoryMatches)){let y=m[0].tokenTypeIdx;return function(){return this.LA(1).tokenTypeIdx===y}}else{let g=Xr(m,(y,v)=>(v!==void 0&&(y[v.tokenTypeIdx]=!0,Ae(v.categoryMatches,x=>{y[x]=!0})),y),{});return function(){let y=this.LA(1);return g[y.tokenTypeIdx]===!0}}}return function(){let p=aM.call(this,s,f,Eoe,l);return typeof p=="object"?!1:p===0}}};o(Soe,"isLL1Sequence");o(DBe,"initATNSimulator");o(aM,"adaptivePredict");o(LBe,"performLookahead");o(RBe,"computeLookaheadTarget");o(NBe,"reportLookaheadAmbiguity");o(MBe,"buildAmbiguityError");o(IBe,"getProductionDslName");o(OBe,"buildAdaptivePredictError");o(PBe,"getExistingTargetState");o(BBe,"computeReachSet");o(FBe,"getReachableTarget");o($Be,"getUniqueAlt");o(Aoe,"newDFAState");o(Coe,"addDFAEdge");o(_oe,"addDFAState");o(zBe,"computeStartState");o(yE,"closure");o(GBe,"getEpsilonTarget");o(VBe,"hasConfigInRuleStopState");o(UBe,"allConfigsInRuleStopStates");o(HBe,"hasConflictTerminatingPrediction");o(WBe,"getConflictingAltSets");o(qBe,"hasConflictingAltSet");o(YBe,"hasStateAssociatedWithOneAlt")});var Loe=N(()=>{"use strict";Doe()});var Roe,sM,Noe,vE,jr,Pr,xE,Moe,oM,Ioe,Ooe,Poe,Boe,lM,Foe,$oe,zoe,bE,u1,h1,cM,f1,Goe,uM,hM,fM,dM,pM,Voe,Uoe,mM,Hoe,gM,Rx,Woe,qoe,Yoe,Xoe,joe,Koe,Qoe,Zoe,wE,Joe,ele,tle,rle,nle,ile,ale,sle,ole,lle,cle,TE,ule,hle,fle,dle,ple,mle,gle,yle,vle,xle,ble,wle,Tle,yM,vM,kle,Ele,Sle,Cle,Ale,_le,Dle,Lle,Rle,xM,$e,bM=N(()=>{"use strict";(function(t){function e(r){return typeof r=="string"}o(e,"is"),t.is=e})(Roe||(Roe={}));(function(t){function e(r){return typeof r=="string"}o(e,"is"),t.is=e})(sM||(sM={}));(function(t){t.MIN_VALUE=-2147483648,t.MAX_VALUE=2147483647;function e(r){return typeof r=="number"&&t.MIN_VALUE<=r&&r<=t.MAX_VALUE}o(e,"is"),t.is=e})(Noe||(Noe={}));(function(t){t.MIN_VALUE=0,t.MAX_VALUE=2147483647;function e(r){return typeof r=="number"&&t.MIN_VALUE<=r&&r<=t.MAX_VALUE}o(e,"is"),t.is=e})(vE||(vE={}));(function(t){function e(n,i){return n===Number.MAX_VALUE&&(n=vE.MAX_VALUE),i===Number.MAX_VALUE&&(i=vE.MAX_VALUE),{line:n,character:i}}o(e,"create"),t.create=e;function r(n){let i=n;return $e.objectLiteral(i)&&$e.uinteger(i.line)&&$e.uinteger(i.character)}o(r,"is"),t.is=r})(jr||(jr={}));(function(t){function e(n,i,a,s){if($e.uinteger(n)&&$e.uinteger(i)&&$e.uinteger(a)&&$e.uinteger(s))return{start:jr.create(n,i),end:jr.create(a,s)};if(jr.is(n)&&jr.is(i))return{start:n,end:i};throw new Error(`Range#create called with invalid arguments[${n}, ${i}, ${a}, ${s}]`)}o(e,"create"),t.create=e;function r(n){let i=n;return $e.objectLiteral(i)&&jr.is(i.start)&&jr.is(i.end)}o(r,"is"),t.is=r})(Pr||(Pr={}));(function(t){function e(n,i){return{uri:n,range:i}}o(e,"create"),t.create=e;function r(n){let i=n;return $e.objectLiteral(i)&&Pr.is(i.range)&&($e.string(i.uri)||$e.undefined(i.uri))}o(r,"is"),t.is=r})(xE||(xE={}));(function(t){function e(n,i,a,s){return{targetUri:n,targetRange:i,targetSelectionRange:a,originSelectionRange:s}}o(e,"create"),t.create=e;function r(n){let i=n;return $e.objectLiteral(i)&&Pr.is(i.targetRange)&&$e.string(i.targetUri)&&Pr.is(i.targetSelectionRange)&&(Pr.is(i.originSelectionRange)||$e.undefined(i.originSelectionRange))}o(r,"is"),t.is=r})(Moe||(Moe={}));(function(t){function e(n,i,a,s){return{red:n,green:i,blue:a,alpha:s}}o(e,"create"),t.create=e;function r(n){let i=n;return $e.objectLiteral(i)&&$e.numberRange(i.red,0,1)&&$e.numberRange(i.green,0,1)&&$e.numberRange(i.blue,0,1)&&$e.numberRange(i.alpha,0,1)}o(r,"is"),t.is=r})(oM||(oM={}));(function(t){function e(n,i){return{range:n,color:i}}o(e,"create"),t.create=e;function r(n){let i=n;return $e.objectLiteral(i)&&Pr.is(i.range)&&oM.is(i.color)}o(r,"is"),t.is=r})(Ioe||(Ioe={}));(function(t){function e(n,i,a){return{label:n,textEdit:i,additionalTextEdits:a}}o(e,"create"),t.create=e;function r(n){let i=n;return $e.objectLiteral(i)&&$e.string(i.label)&&($e.undefined(i.textEdit)||h1.is(i))&&($e.undefined(i.additionalTextEdits)||$e.typedArray(i.additionalTextEdits,h1.is))}o(r,"is"),t.is=r})(Ooe||(Ooe={}));(function(t){t.Comment="comment",t.Imports="imports",t.Region="region"})(Poe||(Poe={}));(function(t){function e(n,i,a,s,l,u){let h={startLine:n,endLine:i};return $e.defined(a)&&(h.startCharacter=a),$e.defined(s)&&(h.endCharacter=s),$e.defined(l)&&(h.kind=l),$e.defined(u)&&(h.collapsedText=u),h}o(e,"create"),t.create=e;function r(n){let i=n;return $e.objectLiteral(i)&&$e.uinteger(i.startLine)&&$e.uinteger(i.startLine)&&($e.undefined(i.startCharacter)||$e.uinteger(i.startCharacter))&&($e.undefined(i.endCharacter)||$e.uinteger(i.endCharacter))&&($e.undefined(i.kind)||$e.string(i.kind))}o(r,"is"),t.is=r})(Boe||(Boe={}));(function(t){function e(n,i){return{location:n,message:i}}o(e,"create"),t.create=e;function r(n){let i=n;return $e.defined(i)&&xE.is(i.location)&&$e.string(i.message)}o(r,"is"),t.is=r})(lM||(lM={}));(function(t){t.Error=1,t.Warning=2,t.Information=3,t.Hint=4})(Foe||(Foe={}));(function(t){t.Unnecessary=1,t.Deprecated=2})($oe||($oe={}));(function(t){function e(r){let n=r;return $e.objectLiteral(n)&&$e.string(n.href)}o(e,"is"),t.is=e})(zoe||(zoe={}));(function(t){function e(n,i,a,s,l,u){let h={range:n,message:i};return $e.defined(a)&&(h.severity=a),$e.defined(s)&&(h.code=s),$e.defined(l)&&(h.source=l),$e.defined(u)&&(h.relatedInformation=u),h}o(e,"create"),t.create=e;function r(n){var i;let a=n;return $e.defined(a)&&Pr.is(a.range)&&$e.string(a.message)&&($e.number(a.severity)||$e.undefined(a.severity))&&($e.integer(a.code)||$e.string(a.code)||$e.undefined(a.code))&&($e.undefined(a.codeDescription)||$e.string((i=a.codeDescription)===null||i===void 0?void 0:i.href))&&($e.string(a.source)||$e.undefined(a.source))&&($e.undefined(a.relatedInformation)||$e.typedArray(a.relatedInformation,lM.is))}o(r,"is"),t.is=r})(bE||(bE={}));(function(t){function e(n,i,...a){let s={title:n,command:i};return $e.defined(a)&&a.length>0&&(s.arguments=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return $e.defined(i)&&$e.string(i.title)&&$e.string(i.command)}o(r,"is"),t.is=r})(u1||(u1={}));(function(t){function e(a,s){return{range:a,newText:s}}o(e,"replace"),t.replace=e;function r(a,s){return{range:{start:a,end:a},newText:s}}o(r,"insert"),t.insert=r;function n(a){return{range:a,newText:""}}o(n,"del"),t.del=n;function i(a){let s=a;return $e.objectLiteral(s)&&$e.string(s.newText)&&Pr.is(s.range)}o(i,"is"),t.is=i})(h1||(h1={}));(function(t){function e(n,i,a){let s={label:n};return i!==void 0&&(s.needsConfirmation=i),a!==void 0&&(s.description=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return $e.objectLiteral(i)&&$e.string(i.label)&&($e.boolean(i.needsConfirmation)||i.needsConfirmation===void 0)&&($e.string(i.description)||i.description===void 0)}o(r,"is"),t.is=r})(cM||(cM={}));(function(t){function e(r){let n=r;return $e.string(n)}o(e,"is"),t.is=e})(f1||(f1={}));(function(t){function e(a,s,l){return{range:a,newText:s,annotationId:l}}o(e,"replace"),t.replace=e;function r(a,s,l){return{range:{start:a,end:a},newText:s,annotationId:l}}o(r,"insert"),t.insert=r;function n(a,s){return{range:a,newText:"",annotationId:s}}o(n,"del"),t.del=n;function i(a){let s=a;return h1.is(s)&&(cM.is(s.annotationId)||f1.is(s.annotationId))}o(i,"is"),t.is=i})(Goe||(Goe={}));(function(t){function e(n,i){return{textDocument:n,edits:i}}o(e,"create"),t.create=e;function r(n){let i=n;return $e.defined(i)&&mM.is(i.textDocument)&&Array.isArray(i.edits)}o(r,"is"),t.is=r})(uM||(uM={}));(function(t){function e(n,i,a){let s={kind:"create",uri:n};return i!==void 0&&(i.overwrite!==void 0||i.ignoreIfExists!==void 0)&&(s.options=i),a!==void 0&&(s.annotationId=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return i&&i.kind==="create"&&$e.string(i.uri)&&(i.options===void 0||(i.options.overwrite===void 0||$e.boolean(i.options.overwrite))&&(i.options.ignoreIfExists===void 0||$e.boolean(i.options.ignoreIfExists)))&&(i.annotationId===void 0||f1.is(i.annotationId))}o(r,"is"),t.is=r})(hM||(hM={}));(function(t){function e(n,i,a,s){let l={kind:"rename",oldUri:n,newUri:i};return a!==void 0&&(a.overwrite!==void 0||a.ignoreIfExists!==void 0)&&(l.options=a),s!==void 0&&(l.annotationId=s),l}o(e,"create"),t.create=e;function r(n){let i=n;return i&&i.kind==="rename"&&$e.string(i.oldUri)&&$e.string(i.newUri)&&(i.options===void 0||(i.options.overwrite===void 0||$e.boolean(i.options.overwrite))&&(i.options.ignoreIfExists===void 0||$e.boolean(i.options.ignoreIfExists)))&&(i.annotationId===void 0||f1.is(i.annotationId))}o(r,"is"),t.is=r})(fM||(fM={}));(function(t){function e(n,i,a){let s={kind:"delete",uri:n};return i!==void 0&&(i.recursive!==void 0||i.ignoreIfNotExists!==void 0)&&(s.options=i),a!==void 0&&(s.annotationId=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return i&&i.kind==="delete"&&$e.string(i.uri)&&(i.options===void 0||(i.options.recursive===void 0||$e.boolean(i.options.recursive))&&(i.options.ignoreIfNotExists===void 0||$e.boolean(i.options.ignoreIfNotExists)))&&(i.annotationId===void 0||f1.is(i.annotationId))}o(r,"is"),t.is=r})(dM||(dM={}));(function(t){function e(r){let n=r;return n&&(n.changes!==void 0||n.documentChanges!==void 0)&&(n.documentChanges===void 0||n.documentChanges.every(i=>$e.string(i.kind)?hM.is(i)||fM.is(i)||dM.is(i):uM.is(i)))}o(e,"is"),t.is=e})(pM||(pM={}));(function(t){function e(n){return{uri:n}}o(e,"create"),t.create=e;function r(n){let i=n;return $e.defined(i)&&$e.string(i.uri)}o(r,"is"),t.is=r})(Voe||(Voe={}));(function(t){function e(n,i){return{uri:n,version:i}}o(e,"create"),t.create=e;function r(n){let i=n;return $e.defined(i)&&$e.string(i.uri)&&$e.integer(i.version)}o(r,"is"),t.is=r})(Uoe||(Uoe={}));(function(t){function e(n,i){return{uri:n,version:i}}o(e,"create"),t.create=e;function r(n){let i=n;return $e.defined(i)&&$e.string(i.uri)&&(i.version===null||$e.integer(i.version))}o(r,"is"),t.is=r})(mM||(mM={}));(function(t){function e(n,i,a,s){return{uri:n,languageId:i,version:a,text:s}}o(e,"create"),t.create=e;function r(n){let i=n;return $e.defined(i)&&$e.string(i.uri)&&$e.string(i.languageId)&&$e.integer(i.version)&&$e.string(i.text)}o(r,"is"),t.is=r})(Hoe||(Hoe={}));(function(t){t.PlainText="plaintext",t.Markdown="markdown";function e(r){let n=r;return n===t.PlainText||n===t.Markdown}o(e,"is"),t.is=e})(gM||(gM={}));(function(t){function e(r){let n=r;return $e.objectLiteral(r)&&gM.is(n.kind)&&$e.string(n.value)}o(e,"is"),t.is=e})(Rx||(Rx={}));(function(t){t.Text=1,t.Method=2,t.Function=3,t.Constructor=4,t.Field=5,t.Variable=6,t.Class=7,t.Interface=8,t.Module=9,t.Property=10,t.Unit=11,t.Value=12,t.Enum=13,t.Keyword=14,t.Snippet=15,t.Color=16,t.File=17,t.Reference=18,t.Folder=19,t.EnumMember=20,t.Constant=21,t.Struct=22,t.Event=23,t.Operator=24,t.TypeParameter=25})(Woe||(Woe={}));(function(t){t.PlainText=1,t.Snippet=2})(qoe||(qoe={}));(function(t){t.Deprecated=1})(Yoe||(Yoe={}));(function(t){function e(n,i,a){return{newText:n,insert:i,replace:a}}o(e,"create"),t.create=e;function r(n){let i=n;return i&&$e.string(i.newText)&&Pr.is(i.insert)&&Pr.is(i.replace)}o(r,"is"),t.is=r})(Xoe||(Xoe={}));(function(t){t.asIs=1,t.adjustIndentation=2})(joe||(joe={}));(function(t){function e(r){let n=r;return n&&($e.string(n.detail)||n.detail===void 0)&&($e.string(n.description)||n.description===void 0)}o(e,"is"),t.is=e})(Koe||(Koe={}));(function(t){function e(r){return{label:r}}o(e,"create"),t.create=e})(Qoe||(Qoe={}));(function(t){function e(r,n){return{items:r||[],isIncomplete:!!n}}o(e,"create"),t.create=e})(Zoe||(Zoe={}));(function(t){function e(n){return n.replace(/[\\`*_{}[\]()#+\-.!]/g,"\\$&")}o(e,"fromPlainText"),t.fromPlainText=e;function r(n){let i=n;return $e.string(i)||$e.objectLiteral(i)&&$e.string(i.language)&&$e.string(i.value)}o(r,"is"),t.is=r})(wE||(wE={}));(function(t){function e(r){let n=r;return!!n&&$e.objectLiteral(n)&&(Rx.is(n.contents)||wE.is(n.contents)||$e.typedArray(n.contents,wE.is))&&(r.range===void 0||Pr.is(r.range))}o(e,"is"),t.is=e})(Joe||(Joe={}));(function(t){function e(r,n){return n?{label:r,documentation:n}:{label:r}}o(e,"create"),t.create=e})(ele||(ele={}));(function(t){function e(r,n,...i){let a={label:r};return $e.defined(n)&&(a.documentation=n),$e.defined(i)?a.parameters=i:a.parameters=[],a}o(e,"create"),t.create=e})(tle||(tle={}));(function(t){t.Text=1,t.Read=2,t.Write=3})(rle||(rle={}));(function(t){function e(r,n){let i={range:r};return $e.number(n)&&(i.kind=n),i}o(e,"create"),t.create=e})(nle||(nle={}));(function(t){t.File=1,t.Module=2,t.Namespace=3,t.Package=4,t.Class=5,t.Method=6,t.Property=7,t.Field=8,t.Constructor=9,t.Enum=10,t.Interface=11,t.Function=12,t.Variable=13,t.Constant=14,t.String=15,t.Number=16,t.Boolean=17,t.Array=18,t.Object=19,t.Key=20,t.Null=21,t.EnumMember=22,t.Struct=23,t.Event=24,t.Operator=25,t.TypeParameter=26})(ile||(ile={}));(function(t){t.Deprecated=1})(ale||(ale={}));(function(t){function e(r,n,i,a,s){let l={name:r,kind:n,location:{uri:a,range:i}};return s&&(l.containerName=s),l}o(e,"create"),t.create=e})(sle||(sle={}));(function(t){function e(r,n,i,a){return a!==void 0?{name:r,kind:n,location:{uri:i,range:a}}:{name:r,kind:n,location:{uri:i}}}o(e,"create"),t.create=e})(ole||(ole={}));(function(t){function e(n,i,a,s,l,u){let h={name:n,detail:i,kind:a,range:s,selectionRange:l};return u!==void 0&&(h.children=u),h}o(e,"create"),t.create=e;function r(n){let i=n;return i&&$e.string(i.name)&&$e.number(i.kind)&&Pr.is(i.range)&&Pr.is(i.selectionRange)&&(i.detail===void 0||$e.string(i.detail))&&(i.deprecated===void 0||$e.boolean(i.deprecated))&&(i.children===void 0||Array.isArray(i.children))&&(i.tags===void 0||Array.isArray(i.tags))}o(r,"is"),t.is=r})(lle||(lle={}));(function(t){t.Empty="",t.QuickFix="quickfix",t.Refactor="refactor",t.RefactorExtract="refactor.extract",t.RefactorInline="refactor.inline",t.RefactorRewrite="refactor.rewrite",t.Source="source",t.SourceOrganizeImports="source.organizeImports",t.SourceFixAll="source.fixAll"})(cle||(cle={}));(function(t){t.Invoked=1,t.Automatic=2})(TE||(TE={}));(function(t){function e(n,i,a){let s={diagnostics:n};return i!=null&&(s.only=i),a!=null&&(s.triggerKind=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return $e.defined(i)&&$e.typedArray(i.diagnostics,bE.is)&&(i.only===void 0||$e.typedArray(i.only,$e.string))&&(i.triggerKind===void 0||i.triggerKind===TE.Invoked||i.triggerKind===TE.Automatic)}o(r,"is"),t.is=r})(ule||(ule={}));(function(t){function e(n,i,a){let s={title:n},l=!0;return typeof i=="string"?(l=!1,s.kind=i):u1.is(i)?s.command=i:s.edit=i,l&&a!==void 0&&(s.kind=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return i&&$e.string(i.title)&&(i.diagnostics===void 0||$e.typedArray(i.diagnostics,bE.is))&&(i.kind===void 0||$e.string(i.kind))&&(i.edit!==void 0||i.command!==void 0)&&(i.command===void 0||u1.is(i.command))&&(i.isPreferred===void 0||$e.boolean(i.isPreferred))&&(i.edit===void 0||pM.is(i.edit))}o(r,"is"),t.is=r})(hle||(hle={}));(function(t){function e(n,i){let a={range:n};return $e.defined(i)&&(a.data=i),a}o(e,"create"),t.create=e;function r(n){let i=n;return $e.defined(i)&&Pr.is(i.range)&&($e.undefined(i.command)||u1.is(i.command))}o(r,"is"),t.is=r})(fle||(fle={}));(function(t){function e(n,i){return{tabSize:n,insertSpaces:i}}o(e,"create"),t.create=e;function r(n){let i=n;return $e.defined(i)&&$e.uinteger(i.tabSize)&&$e.boolean(i.insertSpaces)}o(r,"is"),t.is=r})(dle||(dle={}));(function(t){function e(n,i,a){return{range:n,target:i,data:a}}o(e,"create"),t.create=e;function r(n){let i=n;return $e.defined(i)&&Pr.is(i.range)&&($e.undefined(i.target)||$e.string(i.target))}o(r,"is"),t.is=r})(ple||(ple={}));(function(t){function e(n,i){return{range:n,parent:i}}o(e,"create"),t.create=e;function r(n){let i=n;return $e.objectLiteral(i)&&Pr.is(i.range)&&(i.parent===void 0||t.is(i.parent))}o(r,"is"),t.is=r})(mle||(mle={}));(function(t){t.namespace="namespace",t.type="type",t.class="class",t.enum="enum",t.interface="interface",t.struct="struct",t.typeParameter="typeParameter",t.parameter="parameter",t.variable="variable",t.property="property",t.enumMember="enumMember",t.event="event",t.function="function",t.method="method",t.macro="macro",t.keyword="keyword",t.modifier="modifier",t.comment="comment",t.string="string",t.number="number",t.regexp="regexp",t.operator="operator",t.decorator="decorator"})(gle||(gle={}));(function(t){t.declaration="declaration",t.definition="definition",t.readonly="readonly",t.static="static",t.deprecated="deprecated",t.abstract="abstract",t.async="async",t.modification="modification",t.documentation="documentation",t.defaultLibrary="defaultLibrary"})(yle||(yle={}));(function(t){function e(r){let n=r;return $e.objectLiteral(n)&&(n.resultId===void 0||typeof n.resultId=="string")&&Array.isArray(n.data)&&(n.data.length===0||typeof n.data[0]=="number")}o(e,"is"),t.is=e})(vle||(vle={}));(function(t){function e(n,i){return{range:n,text:i}}o(e,"create"),t.create=e;function r(n){let i=n;return i!=null&&Pr.is(i.range)&&$e.string(i.text)}o(r,"is"),t.is=r})(xle||(xle={}));(function(t){function e(n,i,a){return{range:n,variableName:i,caseSensitiveLookup:a}}o(e,"create"),t.create=e;function r(n){let i=n;return i!=null&&Pr.is(i.range)&&$e.boolean(i.caseSensitiveLookup)&&($e.string(i.variableName)||i.variableName===void 0)}o(r,"is"),t.is=r})(ble||(ble={}));(function(t){function e(n,i){return{range:n,expression:i}}o(e,"create"),t.create=e;function r(n){let i=n;return i!=null&&Pr.is(i.range)&&($e.string(i.expression)||i.expression===void 0)}o(r,"is"),t.is=r})(wle||(wle={}));(function(t){function e(n,i){return{frameId:n,stoppedLocation:i}}o(e,"create"),t.create=e;function r(n){let i=n;return $e.defined(i)&&Pr.is(n.stoppedLocation)}o(r,"is"),t.is=r})(Tle||(Tle={}));(function(t){t.Type=1,t.Parameter=2;function e(r){return r===1||r===2}o(e,"is"),t.is=e})(yM||(yM={}));(function(t){function e(n){return{value:n}}o(e,"create"),t.create=e;function r(n){let i=n;return $e.objectLiteral(i)&&(i.tooltip===void 0||$e.string(i.tooltip)||Rx.is(i.tooltip))&&(i.location===void 0||xE.is(i.location))&&(i.command===void 0||u1.is(i.command))}o(r,"is"),t.is=r})(vM||(vM={}));(function(t){function e(n,i,a){let s={position:n,label:i};return a!==void 0&&(s.kind=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return $e.objectLiteral(i)&&jr.is(i.position)&&($e.string(i.label)||$e.typedArray(i.label,vM.is))&&(i.kind===void 0||yM.is(i.kind))&&i.textEdits===void 0||$e.typedArray(i.textEdits,h1.is)&&(i.tooltip===void 0||$e.string(i.tooltip)||Rx.is(i.tooltip))&&(i.paddingLeft===void 0||$e.boolean(i.paddingLeft))&&(i.paddingRight===void 0||$e.boolean(i.paddingRight))}o(r,"is"),t.is=r})(kle||(kle={}));(function(t){function e(r){return{kind:"snippet",value:r}}o(e,"createSnippet"),t.createSnippet=e})(Ele||(Ele={}));(function(t){function e(r,n,i,a){return{insertText:r,filterText:n,range:i,command:a}}o(e,"create"),t.create=e})(Sle||(Sle={}));(function(t){function e(r){return{items:r}}o(e,"create"),t.create=e})(Cle||(Cle={}));(function(t){t.Invoked=0,t.Automatic=1})(Ale||(Ale={}));(function(t){function e(r,n){return{range:r,text:n}}o(e,"create"),t.create=e})(_le||(_le={}));(function(t){function e(r,n){return{triggerKind:r,selectedCompletionInfo:n}}o(e,"create"),t.create=e})(Dle||(Dle={}));(function(t){function e(r){let n=r;return $e.objectLiteral(n)&&sM.is(n.uri)&&$e.string(n.name)}o(e,"is"),t.is=e})(Lle||(Lle={}));(function(t){function e(a,s,l,u){return new xM(a,s,l,u)}o(e,"create"),t.create=e;function r(a){let s=a;return!!($e.defined(s)&&$e.string(s.uri)&&($e.undefined(s.languageId)||$e.string(s.languageId))&&$e.uinteger(s.lineCount)&&$e.func(s.getText)&&$e.func(s.positionAt)&&$e.func(s.offsetAt))}o(r,"is"),t.is=r;function n(a,s){let l=a.getText(),u=i(s,(f,d)=>{let p=f.range.start.line-d.range.start.line;return p===0?f.range.start.character-d.range.start.character:p}),h=l.length;for(let f=u.length-1;f>=0;f--){let d=u[f],p=a.offsetAt(d.range.start),m=a.offsetAt(d.range.end);if(m<=h)l=l.substring(0,p)+d.newText+l.substring(m,l.length);else throw new Error("Overlapping edit");h=p}return l}o(n,"applyEdits"),t.applyEdits=n;function i(a,s){if(a.length<=1)return a;let l=a.length/2|0,u=a.slice(0,l),h=a.slice(l);i(u,s),i(h,s);let f=0,d=0,p=0;for(;fa.state.transitions),i=die(n.filter(a=>a instanceof s1).map(a=>a.tokenType),a=>a.tokenTypeIdx);return{actualToken:r,possibleTokenTypes:i,tokenPath:t}}function p$e(t,e){return t.edges[e.tokenTypeIdx]}function m$e(t,e,r){let n=new u1,i=[];for(let s of t.elements){if(r.is(s.alt)===!1)continue;if(s.state.type===l1){i.push(s);continue}let l=s.state.transitions.length;for(let u=0;u0&&!b$e(a))for(let s of i)a.add(s);return a}function g$e(t,e){if(t instanceof s1&&gx(e,t.tokenType))return t.target}function y$e(t,e){let r;for(let n of t.elements)if(e.is(n.alt)===!0){if(r===void 0)r=n.alt;else if(r!==n.alt)return}return r}function Fle(t){return{configs:t,edges:{},isAcceptState:!1,prediction:-1}}function Ble(t,e,r,n){return n=$le(t,n),e.edges[r.tokenTypeIdx]=n,n}function $le(t,e){if(e===Nx)return e;let r=e.configs.key,n=t.states[r];return n!==void 0?n:(e.configs.finalize(),t.states[r]=e,e)}function v$e(t){let e=new u1,r=t.transitions.length;for(let n=0;n0){let i=[...t.stack],s={state:i.pop(),alt:t.alt,stack:i};SE(s,e)}else e.add(t);return}r.epsilonOnlyTransitions||e.add(t);let n=r.transitions.length;for(let i=0;i1)return!0;return!1}function S$e(t){for(let e of Array.from(t.values()))if(Object.keys(e).length===1)return!0;return!1}var EE,Ole,Mx,zle=N(()=>{"use strict";mf();Mle();Ile();bR();pR();pie();Um();Sw();ek();ak();ER();o(s$e,"createDFACache");EE=class{static{o(this,"PredicateSet")}constructor(){this.predicates=[]}is(e){return e>=this.predicates.length||this.predicates[e]}set(e,r){this.predicates[e]=r}toString(){let e="",r=this.predicates.length;for(let n=0;nconsole.log(n)}initialize(e){this.atn=Dle(e.rules),this.dfas=o$e(this.atn)}validateAmbiguousAlternationAlternatives(){return[]}validateEmptyOrAlternatives(){return[]}buildLookaheadForAlternation(e){let{prodOccurrence:r,rule:n,hasPredicates:i,dynamicTokensEnabled:a}=e,s=this.dfas,l=this.logging,u=wp(n,"Alternation",r),f=this.atn.decisionMap[u].decision,d=Je(rE({maxLookahead:1,occurrence:r,prodType:"Alternation",rule:n}),p=>Je(p,m=>m[0]));if(Ple(d,!1)&&!a){let p=Xr(d,(m,g,y)=>(Ae(g,v=>{v&&(m[v.tokenTypeIdx]=y,Ae(v.categoryMatches,x=>{m[x]=y}))}),m),{});return i?function(m){var g;let y=this.LA(1),v=p[y.tokenTypeIdx];if(m!==void 0&&v!==void 0){let x=(g=m[v])===null||g===void 0?void 0:g.GATE;if(x!==void 0&&x.call(this)===!1)return}return v}:function(){let m=this.LA(1);return p[m.tokenTypeIdx]}}else return i?function(p){let m=new EE,g=p===void 0?0:p.length;for(let v=0;vJe(p,m=>m[0]));if(Ple(d)&&d[0][0]&&!a){let p=d[0],m=qr(p);if(m.length===1&&hr(m[0].categoryMatches)){let y=m[0].tokenTypeIdx;return function(){return this.LA(1).tokenTypeIdx===y}}else{let g=Xr(m,(y,v)=>(v!==void 0&&(y[v.tokenTypeIdx]=!0,Ae(v.categoryMatches,x=>{y[x]=!0})),y),{});return function(){let y=this.LA(1);return g[y.tokenTypeIdx]===!0}}}return function(){let p=BM.call(this,s,f,Ole,l);return typeof p=="object"?!1:p===0}}};o(Ple,"isLL1Sequence");o(o$e,"initATNSimulator");o(BM,"adaptivePredict");o(l$e,"performLookahead");o(c$e,"computeLookaheadTarget");o(u$e,"reportLookaheadAmbiguity");o(h$e,"buildAmbiguityError");o(f$e,"getProductionDslName");o(d$e,"buildAdaptivePredictError");o(p$e,"getExistingTargetState");o(m$e,"computeReachSet");o(g$e,"getReachableTarget");o(y$e,"getUniqueAlt");o(Fle,"newDFAState");o(Ble,"addDFAEdge");o($le,"addDFAState");o(v$e,"computeStartState");o(SE,"closure");o(x$e,"getEpsilonTarget");o(b$e,"hasConfigInRuleStopState");o(T$e,"allConfigsInRuleStopStates");o(w$e,"hasConflictTerminatingPrediction");o(k$e,"getConflictingAltSets");o(E$e,"hasConflictingAltSet");o(S$e,"hasStateAssociatedWithOneAlt")});var Gle=N(()=>{"use strict";zle()});var Vle,FM,Ule,CE,jr,Br,AE,Hle,$M,Wle,qle,Yle,Xle,zM,jle,Kle,Qle,_E,h1,f1,GM,d1,Zle,VM,UM,HM,WM,qM,Jle,ece,YM,tce,XM,Ix,rce,nce,ice,ace,sce,oce,lce,cce,DE,uce,hce,fce,dce,pce,mce,gce,yce,vce,xce,bce,LE,Tce,wce,kce,Ece,Sce,Cce,Ace,_ce,Dce,Lce,Rce,Nce,Mce,jM,KM,Ice,Oce,Pce,Bce,Fce,$ce,zce,Gce,Vce,QM,$e,ZM=N(()=>{"use strict";(function(t){function e(r){return typeof r=="string"}o(e,"is"),t.is=e})(Vle||(Vle={}));(function(t){function e(r){return typeof r=="string"}o(e,"is"),t.is=e})(FM||(FM={}));(function(t){t.MIN_VALUE=-2147483648,t.MAX_VALUE=2147483647;function e(r){return typeof r=="number"&&t.MIN_VALUE<=r&&r<=t.MAX_VALUE}o(e,"is"),t.is=e})(Ule||(Ule={}));(function(t){t.MIN_VALUE=0,t.MAX_VALUE=2147483647;function e(r){return typeof r=="number"&&t.MIN_VALUE<=r&&r<=t.MAX_VALUE}o(e,"is"),t.is=e})(CE||(CE={}));(function(t){function e(n,i){return n===Number.MAX_VALUE&&(n=CE.MAX_VALUE),i===Number.MAX_VALUE&&(i=CE.MAX_VALUE),{line:n,character:i}}o(e,"create"),t.create=e;function r(n){let i=n;return $e.objectLiteral(i)&&$e.uinteger(i.line)&&$e.uinteger(i.character)}o(r,"is"),t.is=r})(jr||(jr={}));(function(t){function e(n,i,a,s){if($e.uinteger(n)&&$e.uinteger(i)&&$e.uinteger(a)&&$e.uinteger(s))return{start:jr.create(n,i),end:jr.create(a,s)};if(jr.is(n)&&jr.is(i))return{start:n,end:i};throw new Error(`Range#create called with invalid arguments[${n}, ${i}, ${a}, ${s}]`)}o(e,"create"),t.create=e;function r(n){let i=n;return $e.objectLiteral(i)&&jr.is(i.start)&&jr.is(i.end)}o(r,"is"),t.is=r})(Br||(Br={}));(function(t){function e(n,i){return{uri:n,range:i}}o(e,"create"),t.create=e;function r(n){let i=n;return $e.objectLiteral(i)&&Br.is(i.range)&&($e.string(i.uri)||$e.undefined(i.uri))}o(r,"is"),t.is=r})(AE||(AE={}));(function(t){function e(n,i,a,s){return{targetUri:n,targetRange:i,targetSelectionRange:a,originSelectionRange:s}}o(e,"create"),t.create=e;function r(n){let i=n;return $e.objectLiteral(i)&&Br.is(i.targetRange)&&$e.string(i.targetUri)&&Br.is(i.targetSelectionRange)&&(Br.is(i.originSelectionRange)||$e.undefined(i.originSelectionRange))}o(r,"is"),t.is=r})(Hle||(Hle={}));(function(t){function e(n,i,a,s){return{red:n,green:i,blue:a,alpha:s}}o(e,"create"),t.create=e;function r(n){let i=n;return $e.objectLiteral(i)&&$e.numberRange(i.red,0,1)&&$e.numberRange(i.green,0,1)&&$e.numberRange(i.blue,0,1)&&$e.numberRange(i.alpha,0,1)}o(r,"is"),t.is=r})($M||($M={}));(function(t){function e(n,i){return{range:n,color:i}}o(e,"create"),t.create=e;function r(n){let i=n;return $e.objectLiteral(i)&&Br.is(i.range)&&$M.is(i.color)}o(r,"is"),t.is=r})(Wle||(Wle={}));(function(t){function e(n,i,a){return{label:n,textEdit:i,additionalTextEdits:a}}o(e,"create"),t.create=e;function r(n){let i=n;return $e.objectLiteral(i)&&$e.string(i.label)&&($e.undefined(i.textEdit)||f1.is(i))&&($e.undefined(i.additionalTextEdits)||$e.typedArray(i.additionalTextEdits,f1.is))}o(r,"is"),t.is=r})(qle||(qle={}));(function(t){t.Comment="comment",t.Imports="imports",t.Region="region"})(Yle||(Yle={}));(function(t){function e(n,i,a,s,l,u){let h={startLine:n,endLine:i};return $e.defined(a)&&(h.startCharacter=a),$e.defined(s)&&(h.endCharacter=s),$e.defined(l)&&(h.kind=l),$e.defined(u)&&(h.collapsedText=u),h}o(e,"create"),t.create=e;function r(n){let i=n;return $e.objectLiteral(i)&&$e.uinteger(i.startLine)&&$e.uinteger(i.startLine)&&($e.undefined(i.startCharacter)||$e.uinteger(i.startCharacter))&&($e.undefined(i.endCharacter)||$e.uinteger(i.endCharacter))&&($e.undefined(i.kind)||$e.string(i.kind))}o(r,"is"),t.is=r})(Xle||(Xle={}));(function(t){function e(n,i){return{location:n,message:i}}o(e,"create"),t.create=e;function r(n){let i=n;return $e.defined(i)&&AE.is(i.location)&&$e.string(i.message)}o(r,"is"),t.is=r})(zM||(zM={}));(function(t){t.Error=1,t.Warning=2,t.Information=3,t.Hint=4})(jle||(jle={}));(function(t){t.Unnecessary=1,t.Deprecated=2})(Kle||(Kle={}));(function(t){function e(r){let n=r;return $e.objectLiteral(n)&&$e.string(n.href)}o(e,"is"),t.is=e})(Qle||(Qle={}));(function(t){function e(n,i,a,s,l,u){let h={range:n,message:i};return $e.defined(a)&&(h.severity=a),$e.defined(s)&&(h.code=s),$e.defined(l)&&(h.source=l),$e.defined(u)&&(h.relatedInformation=u),h}o(e,"create"),t.create=e;function r(n){var i;let a=n;return $e.defined(a)&&Br.is(a.range)&&$e.string(a.message)&&($e.number(a.severity)||$e.undefined(a.severity))&&($e.integer(a.code)||$e.string(a.code)||$e.undefined(a.code))&&($e.undefined(a.codeDescription)||$e.string((i=a.codeDescription)===null||i===void 0?void 0:i.href))&&($e.string(a.source)||$e.undefined(a.source))&&($e.undefined(a.relatedInformation)||$e.typedArray(a.relatedInformation,zM.is))}o(r,"is"),t.is=r})(_E||(_E={}));(function(t){function e(n,i,...a){let s={title:n,command:i};return $e.defined(a)&&a.length>0&&(s.arguments=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return $e.defined(i)&&$e.string(i.title)&&$e.string(i.command)}o(r,"is"),t.is=r})(h1||(h1={}));(function(t){function e(a,s){return{range:a,newText:s}}o(e,"replace"),t.replace=e;function r(a,s){return{range:{start:a,end:a},newText:s}}o(r,"insert"),t.insert=r;function n(a){return{range:a,newText:""}}o(n,"del"),t.del=n;function i(a){let s=a;return $e.objectLiteral(s)&&$e.string(s.newText)&&Br.is(s.range)}o(i,"is"),t.is=i})(f1||(f1={}));(function(t){function e(n,i,a){let s={label:n};return i!==void 0&&(s.needsConfirmation=i),a!==void 0&&(s.description=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return $e.objectLiteral(i)&&$e.string(i.label)&&($e.boolean(i.needsConfirmation)||i.needsConfirmation===void 0)&&($e.string(i.description)||i.description===void 0)}o(r,"is"),t.is=r})(GM||(GM={}));(function(t){function e(r){let n=r;return $e.string(n)}o(e,"is"),t.is=e})(d1||(d1={}));(function(t){function e(a,s,l){return{range:a,newText:s,annotationId:l}}o(e,"replace"),t.replace=e;function r(a,s,l){return{range:{start:a,end:a},newText:s,annotationId:l}}o(r,"insert"),t.insert=r;function n(a,s){return{range:a,newText:"",annotationId:s}}o(n,"del"),t.del=n;function i(a){let s=a;return f1.is(s)&&(GM.is(s.annotationId)||d1.is(s.annotationId))}o(i,"is"),t.is=i})(Zle||(Zle={}));(function(t){function e(n,i){return{textDocument:n,edits:i}}o(e,"create"),t.create=e;function r(n){let i=n;return $e.defined(i)&&YM.is(i.textDocument)&&Array.isArray(i.edits)}o(r,"is"),t.is=r})(VM||(VM={}));(function(t){function e(n,i,a){let s={kind:"create",uri:n};return i!==void 0&&(i.overwrite!==void 0||i.ignoreIfExists!==void 0)&&(s.options=i),a!==void 0&&(s.annotationId=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return i&&i.kind==="create"&&$e.string(i.uri)&&(i.options===void 0||(i.options.overwrite===void 0||$e.boolean(i.options.overwrite))&&(i.options.ignoreIfExists===void 0||$e.boolean(i.options.ignoreIfExists)))&&(i.annotationId===void 0||d1.is(i.annotationId))}o(r,"is"),t.is=r})(UM||(UM={}));(function(t){function e(n,i,a,s){let l={kind:"rename",oldUri:n,newUri:i};return a!==void 0&&(a.overwrite!==void 0||a.ignoreIfExists!==void 0)&&(l.options=a),s!==void 0&&(l.annotationId=s),l}o(e,"create"),t.create=e;function r(n){let i=n;return i&&i.kind==="rename"&&$e.string(i.oldUri)&&$e.string(i.newUri)&&(i.options===void 0||(i.options.overwrite===void 0||$e.boolean(i.options.overwrite))&&(i.options.ignoreIfExists===void 0||$e.boolean(i.options.ignoreIfExists)))&&(i.annotationId===void 0||d1.is(i.annotationId))}o(r,"is"),t.is=r})(HM||(HM={}));(function(t){function e(n,i,a){let s={kind:"delete",uri:n};return i!==void 0&&(i.recursive!==void 0||i.ignoreIfNotExists!==void 0)&&(s.options=i),a!==void 0&&(s.annotationId=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return i&&i.kind==="delete"&&$e.string(i.uri)&&(i.options===void 0||(i.options.recursive===void 0||$e.boolean(i.options.recursive))&&(i.options.ignoreIfNotExists===void 0||$e.boolean(i.options.ignoreIfNotExists)))&&(i.annotationId===void 0||d1.is(i.annotationId))}o(r,"is"),t.is=r})(WM||(WM={}));(function(t){function e(r){let n=r;return n&&(n.changes!==void 0||n.documentChanges!==void 0)&&(n.documentChanges===void 0||n.documentChanges.every(i=>$e.string(i.kind)?UM.is(i)||HM.is(i)||WM.is(i):VM.is(i)))}o(e,"is"),t.is=e})(qM||(qM={}));(function(t){function e(n){return{uri:n}}o(e,"create"),t.create=e;function r(n){let i=n;return $e.defined(i)&&$e.string(i.uri)}o(r,"is"),t.is=r})(Jle||(Jle={}));(function(t){function e(n,i){return{uri:n,version:i}}o(e,"create"),t.create=e;function r(n){let i=n;return $e.defined(i)&&$e.string(i.uri)&&$e.integer(i.version)}o(r,"is"),t.is=r})(ece||(ece={}));(function(t){function e(n,i){return{uri:n,version:i}}o(e,"create"),t.create=e;function r(n){let i=n;return $e.defined(i)&&$e.string(i.uri)&&(i.version===null||$e.integer(i.version))}o(r,"is"),t.is=r})(YM||(YM={}));(function(t){function e(n,i,a,s){return{uri:n,languageId:i,version:a,text:s}}o(e,"create"),t.create=e;function r(n){let i=n;return $e.defined(i)&&$e.string(i.uri)&&$e.string(i.languageId)&&$e.integer(i.version)&&$e.string(i.text)}o(r,"is"),t.is=r})(tce||(tce={}));(function(t){t.PlainText="plaintext",t.Markdown="markdown";function e(r){let n=r;return n===t.PlainText||n===t.Markdown}o(e,"is"),t.is=e})(XM||(XM={}));(function(t){function e(r){let n=r;return $e.objectLiteral(r)&&XM.is(n.kind)&&$e.string(n.value)}o(e,"is"),t.is=e})(Ix||(Ix={}));(function(t){t.Text=1,t.Method=2,t.Function=3,t.Constructor=4,t.Field=5,t.Variable=6,t.Class=7,t.Interface=8,t.Module=9,t.Property=10,t.Unit=11,t.Value=12,t.Enum=13,t.Keyword=14,t.Snippet=15,t.Color=16,t.File=17,t.Reference=18,t.Folder=19,t.EnumMember=20,t.Constant=21,t.Struct=22,t.Event=23,t.Operator=24,t.TypeParameter=25})(rce||(rce={}));(function(t){t.PlainText=1,t.Snippet=2})(nce||(nce={}));(function(t){t.Deprecated=1})(ice||(ice={}));(function(t){function e(n,i,a){return{newText:n,insert:i,replace:a}}o(e,"create"),t.create=e;function r(n){let i=n;return i&&$e.string(i.newText)&&Br.is(i.insert)&&Br.is(i.replace)}o(r,"is"),t.is=r})(ace||(ace={}));(function(t){t.asIs=1,t.adjustIndentation=2})(sce||(sce={}));(function(t){function e(r){let n=r;return n&&($e.string(n.detail)||n.detail===void 0)&&($e.string(n.description)||n.description===void 0)}o(e,"is"),t.is=e})(oce||(oce={}));(function(t){function e(r){return{label:r}}o(e,"create"),t.create=e})(lce||(lce={}));(function(t){function e(r,n){return{items:r||[],isIncomplete:!!n}}o(e,"create"),t.create=e})(cce||(cce={}));(function(t){function e(n){return n.replace(/[\\`*_{}[\]()#+\-.!]/g,"\\$&")}o(e,"fromPlainText"),t.fromPlainText=e;function r(n){let i=n;return $e.string(i)||$e.objectLiteral(i)&&$e.string(i.language)&&$e.string(i.value)}o(r,"is"),t.is=r})(DE||(DE={}));(function(t){function e(r){let n=r;return!!n&&$e.objectLiteral(n)&&(Ix.is(n.contents)||DE.is(n.contents)||$e.typedArray(n.contents,DE.is))&&(r.range===void 0||Br.is(r.range))}o(e,"is"),t.is=e})(uce||(uce={}));(function(t){function e(r,n){return n?{label:r,documentation:n}:{label:r}}o(e,"create"),t.create=e})(hce||(hce={}));(function(t){function e(r,n,...i){let a={label:r};return $e.defined(n)&&(a.documentation=n),$e.defined(i)?a.parameters=i:a.parameters=[],a}o(e,"create"),t.create=e})(fce||(fce={}));(function(t){t.Text=1,t.Read=2,t.Write=3})(dce||(dce={}));(function(t){function e(r,n){let i={range:r};return $e.number(n)&&(i.kind=n),i}o(e,"create"),t.create=e})(pce||(pce={}));(function(t){t.File=1,t.Module=2,t.Namespace=3,t.Package=4,t.Class=5,t.Method=6,t.Property=7,t.Field=8,t.Constructor=9,t.Enum=10,t.Interface=11,t.Function=12,t.Variable=13,t.Constant=14,t.String=15,t.Number=16,t.Boolean=17,t.Array=18,t.Object=19,t.Key=20,t.Null=21,t.EnumMember=22,t.Struct=23,t.Event=24,t.Operator=25,t.TypeParameter=26})(mce||(mce={}));(function(t){t.Deprecated=1})(gce||(gce={}));(function(t){function e(r,n,i,a,s){let l={name:r,kind:n,location:{uri:a,range:i}};return s&&(l.containerName=s),l}o(e,"create"),t.create=e})(yce||(yce={}));(function(t){function e(r,n,i,a){return a!==void 0?{name:r,kind:n,location:{uri:i,range:a}}:{name:r,kind:n,location:{uri:i}}}o(e,"create"),t.create=e})(vce||(vce={}));(function(t){function e(n,i,a,s,l,u){let h={name:n,detail:i,kind:a,range:s,selectionRange:l};return u!==void 0&&(h.children=u),h}o(e,"create"),t.create=e;function r(n){let i=n;return i&&$e.string(i.name)&&$e.number(i.kind)&&Br.is(i.range)&&Br.is(i.selectionRange)&&(i.detail===void 0||$e.string(i.detail))&&(i.deprecated===void 0||$e.boolean(i.deprecated))&&(i.children===void 0||Array.isArray(i.children))&&(i.tags===void 0||Array.isArray(i.tags))}o(r,"is"),t.is=r})(xce||(xce={}));(function(t){t.Empty="",t.QuickFix="quickfix",t.Refactor="refactor",t.RefactorExtract="refactor.extract",t.RefactorInline="refactor.inline",t.RefactorRewrite="refactor.rewrite",t.Source="source",t.SourceOrganizeImports="source.organizeImports",t.SourceFixAll="source.fixAll"})(bce||(bce={}));(function(t){t.Invoked=1,t.Automatic=2})(LE||(LE={}));(function(t){function e(n,i,a){let s={diagnostics:n};return i!=null&&(s.only=i),a!=null&&(s.triggerKind=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return $e.defined(i)&&$e.typedArray(i.diagnostics,_E.is)&&(i.only===void 0||$e.typedArray(i.only,$e.string))&&(i.triggerKind===void 0||i.triggerKind===LE.Invoked||i.triggerKind===LE.Automatic)}o(r,"is"),t.is=r})(Tce||(Tce={}));(function(t){function e(n,i,a){let s={title:n},l=!0;return typeof i=="string"?(l=!1,s.kind=i):h1.is(i)?s.command=i:s.edit=i,l&&a!==void 0&&(s.kind=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return i&&$e.string(i.title)&&(i.diagnostics===void 0||$e.typedArray(i.diagnostics,_E.is))&&(i.kind===void 0||$e.string(i.kind))&&(i.edit!==void 0||i.command!==void 0)&&(i.command===void 0||h1.is(i.command))&&(i.isPreferred===void 0||$e.boolean(i.isPreferred))&&(i.edit===void 0||qM.is(i.edit))}o(r,"is"),t.is=r})(wce||(wce={}));(function(t){function e(n,i){let a={range:n};return $e.defined(i)&&(a.data=i),a}o(e,"create"),t.create=e;function r(n){let i=n;return $e.defined(i)&&Br.is(i.range)&&($e.undefined(i.command)||h1.is(i.command))}o(r,"is"),t.is=r})(kce||(kce={}));(function(t){function e(n,i){return{tabSize:n,insertSpaces:i}}o(e,"create"),t.create=e;function r(n){let i=n;return $e.defined(i)&&$e.uinteger(i.tabSize)&&$e.boolean(i.insertSpaces)}o(r,"is"),t.is=r})(Ece||(Ece={}));(function(t){function e(n,i,a){return{range:n,target:i,data:a}}o(e,"create"),t.create=e;function r(n){let i=n;return $e.defined(i)&&Br.is(i.range)&&($e.undefined(i.target)||$e.string(i.target))}o(r,"is"),t.is=r})(Sce||(Sce={}));(function(t){function e(n,i){return{range:n,parent:i}}o(e,"create"),t.create=e;function r(n){let i=n;return $e.objectLiteral(i)&&Br.is(i.range)&&(i.parent===void 0||t.is(i.parent))}o(r,"is"),t.is=r})(Cce||(Cce={}));(function(t){t.namespace="namespace",t.type="type",t.class="class",t.enum="enum",t.interface="interface",t.struct="struct",t.typeParameter="typeParameter",t.parameter="parameter",t.variable="variable",t.property="property",t.enumMember="enumMember",t.event="event",t.function="function",t.method="method",t.macro="macro",t.keyword="keyword",t.modifier="modifier",t.comment="comment",t.string="string",t.number="number",t.regexp="regexp",t.operator="operator",t.decorator="decorator"})(Ace||(Ace={}));(function(t){t.declaration="declaration",t.definition="definition",t.readonly="readonly",t.static="static",t.deprecated="deprecated",t.abstract="abstract",t.async="async",t.modification="modification",t.documentation="documentation",t.defaultLibrary="defaultLibrary"})(_ce||(_ce={}));(function(t){function e(r){let n=r;return $e.objectLiteral(n)&&(n.resultId===void 0||typeof n.resultId=="string")&&Array.isArray(n.data)&&(n.data.length===0||typeof n.data[0]=="number")}o(e,"is"),t.is=e})(Dce||(Dce={}));(function(t){function e(n,i){return{range:n,text:i}}o(e,"create"),t.create=e;function r(n){let i=n;return i!=null&&Br.is(i.range)&&$e.string(i.text)}o(r,"is"),t.is=r})(Lce||(Lce={}));(function(t){function e(n,i,a){return{range:n,variableName:i,caseSensitiveLookup:a}}o(e,"create"),t.create=e;function r(n){let i=n;return i!=null&&Br.is(i.range)&&$e.boolean(i.caseSensitiveLookup)&&($e.string(i.variableName)||i.variableName===void 0)}o(r,"is"),t.is=r})(Rce||(Rce={}));(function(t){function e(n,i){return{range:n,expression:i}}o(e,"create"),t.create=e;function r(n){let i=n;return i!=null&&Br.is(i.range)&&($e.string(i.expression)||i.expression===void 0)}o(r,"is"),t.is=r})(Nce||(Nce={}));(function(t){function e(n,i){return{frameId:n,stoppedLocation:i}}o(e,"create"),t.create=e;function r(n){let i=n;return $e.defined(i)&&Br.is(n.stoppedLocation)}o(r,"is"),t.is=r})(Mce||(Mce={}));(function(t){t.Type=1,t.Parameter=2;function e(r){return r===1||r===2}o(e,"is"),t.is=e})(jM||(jM={}));(function(t){function e(n){return{value:n}}o(e,"create"),t.create=e;function r(n){let i=n;return $e.objectLiteral(i)&&(i.tooltip===void 0||$e.string(i.tooltip)||Ix.is(i.tooltip))&&(i.location===void 0||AE.is(i.location))&&(i.command===void 0||h1.is(i.command))}o(r,"is"),t.is=r})(KM||(KM={}));(function(t){function e(n,i,a){let s={position:n,label:i};return a!==void 0&&(s.kind=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return $e.objectLiteral(i)&&jr.is(i.position)&&($e.string(i.label)||$e.typedArray(i.label,KM.is))&&(i.kind===void 0||jM.is(i.kind))&&i.textEdits===void 0||$e.typedArray(i.textEdits,f1.is)&&(i.tooltip===void 0||$e.string(i.tooltip)||Ix.is(i.tooltip))&&(i.paddingLeft===void 0||$e.boolean(i.paddingLeft))&&(i.paddingRight===void 0||$e.boolean(i.paddingRight))}o(r,"is"),t.is=r})(Ice||(Ice={}));(function(t){function e(r){return{kind:"snippet",value:r}}o(e,"createSnippet"),t.createSnippet=e})(Oce||(Oce={}));(function(t){function e(r,n,i,a){return{insertText:r,filterText:n,range:i,command:a}}o(e,"create"),t.create=e})(Pce||(Pce={}));(function(t){function e(r){return{items:r}}o(e,"create"),t.create=e})(Bce||(Bce={}));(function(t){t.Invoked=0,t.Automatic=1})(Fce||(Fce={}));(function(t){function e(r,n){return{range:r,text:n}}o(e,"create"),t.create=e})($ce||($ce={}));(function(t){function e(r,n){return{triggerKind:r,selectedCompletionInfo:n}}o(e,"create"),t.create=e})(zce||(zce={}));(function(t){function e(r){let n=r;return $e.objectLiteral(n)&&FM.is(n.uri)&&$e.string(n.name)}o(e,"is"),t.is=e})(Gce||(Gce={}));(function(t){function e(a,s,l,u){return new QM(a,s,l,u)}o(e,"create"),t.create=e;function r(a){let s=a;return!!($e.defined(s)&&$e.string(s.uri)&&($e.undefined(s.languageId)||$e.string(s.languageId))&&$e.uinteger(s.lineCount)&&$e.func(s.getText)&&$e.func(s.positionAt)&&$e.func(s.offsetAt))}o(r,"is"),t.is=r;function n(a,s){let l=a.getText(),u=i(s,(f,d)=>{let p=f.range.start.line-d.range.start.line;return p===0?f.range.start.character-d.range.start.character:p}),h=l.length;for(let f=u.length-1;f>=0;f--){let d=u[f],p=a.offsetAt(d.range.start),m=a.offsetAt(d.range.end);if(m<=h)l=l.substring(0,p)+d.newText+l.substring(m,l.length);else throw new Error("Overlapping edit");h=p}return l}o(n,"applyEdits"),t.applyEdits=n;function i(a,s){if(a.length<=1)return a;let l=a.length/2|0,u=a.slice(0,l),h=a.slice(l);i(u,s),i(h,s);let f=0,d=0,p=0;for(;f0&&e.push(r.length),this._lineOffsets=e}return this._lineOffsets}positionAt(e){e=Math.max(Math.min(e,this._content.length),0);let r=this.getLineOffsets(),n=0,i=r.length;if(i===0)return jr.create(0,e);for(;ne?i=s:n=s+1}let a=n-1;return jr.create(a,e-r[a])}offsetAt(e){let r=this.getLineOffsets();if(e.line>=r.length)return this._content.length;if(e.line<0)return 0;let n=r[e.line],i=e.line+1"u"}o(n,"undefined"),t.undefined=n;function i(m){return m===!0||m===!1}o(i,"boolean"),t.boolean=i;function a(m){return e.call(m)==="[object String]"}o(a,"string"),t.string=a;function s(m){return e.call(m)==="[object Number]"}o(s,"number"),t.number=s;function l(m,g,y){return e.call(m)==="[object Number]"&&g<=m&&m<=y}o(l,"numberRange"),t.numberRange=l;function u(m){return e.call(m)==="[object Number]"&&-2147483648<=m&&m<=2147483647}o(u,"integer"),t.integer=u;function h(m){return e.call(m)==="[object Number]"&&0<=m&&m<=2147483647}o(h,"uinteger"),t.uinteger=h;function f(m){return e.call(m)==="[object Function]"}o(f,"func"),t.func=f;function d(m){return m!==null&&typeof m=="object"}o(d,"objectLiteral"),t.objectLiteral=d;function p(m,g){return Array.isArray(m)&&m.every(g)}o(p,"typedArray"),t.typedArray=p})($e||($e={}))});var Nx,Mx,wp,Tp,wM,d1,kE=N(()=>{"use strict";bM();Il();Nx=class{static{o(this,"CstNodeBuilder")}constructor(){this.nodeStack=[]}get current(){var e;return(e=this.nodeStack[this.nodeStack.length-1])!==null&&e!==void 0?e:this.rootNode}buildRootNode(e){return this.rootNode=new d1(e),this.rootNode.root=this.rootNode,this.nodeStack=[this.rootNode],this.rootNode}buildCompositeNode(e){let r=new Tp;return r.grammarSource=e,r.root=this.rootNode,this.current.content.push(r),this.nodeStack.push(r),r}buildLeafNode(e,r){let n=new wp(e.startOffset,e.image.length,jm(e),e.tokenType,!r);return n.grammarSource=r,n.root=this.rootNode,this.current.content.push(n),n}removeNode(e){let r=e.container;if(r){let n=r.content.indexOf(e);n>=0&&r.content.splice(n,1)}}addHiddenNodes(e){let r=[];for(let a of e){let s=new wp(a.startOffset,a.image.length,jm(a),a.tokenType,!0);s.root=this.rootNode,r.push(s)}let n=this.current,i=!1;if(n.content.length>0){n.content.push(...r);return}for(;n.container;){let a=n.container.content.indexOf(n);if(a>0){n.container.content.splice(a,0,...r),i=!0;break}n=n.container}i||this.rootNode.content.unshift(...r)}construct(e){let r=this.current;typeof e.$type=="string"&&(this.current.astNode=e),e.$cstNode=r;let n=this.nodeStack.pop();n?.content.length===0&&this.removeNode(n)}},Mx=class{static{o(this,"AbstractCstNode")}get parent(){return this.container}get feature(){return this.grammarSource}get hidden(){return!1}get astNode(){var e,r;let n=typeof((e=this._astNode)===null||e===void 0?void 0:e.$type)=="string"?this._astNode:(r=this.container)===null||r===void 0?void 0:r.astNode;if(!n)throw new Error("This node has no associated AST element");return n}set astNode(e){this._astNode=e}get element(){return this.astNode}get text(){return this.root.fullText.substring(this.offset,this.end)}},wp=class extends Mx{static{o(this,"LeafCstNodeImpl")}get offset(){return this._offset}get length(){return this._length}get end(){return this._offset+this._length}get hidden(){return this._hidden}get tokenType(){return this._tokenType}get range(){return this._range}constructor(e,r,n,i,a=!1){super(),this._hidden=a,this._offset=e,this._tokenType=i,this._length=r,this._range=n}},Tp=class extends Mx{static{o(this,"CompositeCstNodeImpl")}constructor(){super(...arguments),this.content=new wM(this)}get children(){return this.content}get offset(){var e,r;return(r=(e=this.firstNonHiddenNode)===null||e===void 0?void 0:e.offset)!==null&&r!==void 0?r:0}get length(){return this.end-this.offset}get end(){var e,r;return(r=(e=this.lastNonHiddenNode)===null||e===void 0?void 0:e.end)!==null&&r!==void 0?r:0}get range(){let e=this.firstNonHiddenNode,r=this.lastNonHiddenNode;if(e&&r){if(this._rangeCache===void 0){let{range:n}=e,{range:i}=r;this._rangeCache={start:n.start,end:i.end.line=0;e--){let r=this.content[e];if(!r.hidden)return r}return this.content[this.content.length-1]}},wM=class t extends Array{static{o(this,"CstNodeContainer")}constructor(e){super(),this.parent=e,Object.setPrototypeOf(this,t.prototype)}push(...e){return this.addParents(e),super.push(...e)}unshift(...e){return this.addParents(e),super.unshift(...e)}splice(e,r,...n){return this.addParents(n),super.splice(e,r,...n)}addParents(e){for(let r of e)r.container=this.parent}},d1=class extends Tp{static{o(this,"RootCstNodeImpl")}get text(){return this._text.substring(this.offset,this.end)}get fullText(){return this._text}constructor(e){super(),this._text="",this._text=e??""}}});function TM(t){return t.$type===EE}var EE,Nle,Mle,Ix,Ox,SE,p1,Px,XBe,kM,Bx=N(()=>{"use strict";df();Loe();Ic();Bl();is();kE();EE=Symbol("Datatype");o(TM,"isDataTypeNode");Nle="\u200B",Mle=o(t=>t.endsWith(Nle)?t:t+Nle,"withRuleSuffix"),Ix=class{static{o(this,"AbstractLangiumParser")}constructor(e){this._unorderedGroups=new Map,this.allRules=new Map,this.lexer=e.parser.Lexer;let r=this.lexer.definition,n=e.LanguageMetaData.mode==="production";this.wrapper=new kM(r,Object.assign(Object.assign({},e.parser.ParserConfig),{skipValidations:n,errorMessageProvider:e.parser.ParserErrorMessageProvider}))}alternatives(e,r){this.wrapper.wrapOr(e,r)}optional(e,r){this.wrapper.wrapOption(e,r)}many(e,r){this.wrapper.wrapMany(e,r)}atLeastOne(e,r){this.wrapper.wrapAtLeastOne(e,r)}getRule(e){return this.allRules.get(e)}isRecording(){return this.wrapper.IS_RECORDING}get unorderedGroups(){return this._unorderedGroups}getRuleStack(){return this.wrapper.RULE_STACK}finalize(){this.wrapper.wrapSelfAnalysis()}},Ox=class extends Ix{static{o(this,"LangiumParser")}get current(){return this.stack[this.stack.length-1]}constructor(e){super(e),this.nodeBuilder=new Nx,this.stack=[],this.assignmentMap=new Map,this.linker=e.references.Linker,this.converter=e.parser.ValueConverter,this.astReflection=e.shared.AstReflection}rule(e,r){let n=this.computeRuleType(e),i=this.wrapper.DEFINE_RULE(Mle(e.name),this.startImplementation(n,r).bind(this));return this.allRules.set(e.name,i),e.entry&&(this.mainRule=i),i}computeRuleType(e){if(!e.fragment){if(ax(e))return EE;{let r=$g(e);return r??e.name}}}parse(e,r={}){this.nodeBuilder.buildRootNode(e);let n=this.lexerResult=this.lexer.tokenize(e);this.wrapper.input=n.tokens;let i=r.rule?this.allRules.get(r.rule):this.mainRule;if(!i)throw new Error(r.rule?`No rule found with name '${r.rule}'`:"No main rule available.");let a=i.call(this.wrapper,{});return this.nodeBuilder.addHiddenNodes(n.hidden),this.unorderedGroups.clear(),this.lexerResult=void 0,{value:a,lexerErrors:n.errors,lexerReport:n.report,parserErrors:this.wrapper.errors}}startImplementation(e,r){return n=>{let i=!this.isRecording()&&e!==void 0;if(i){let s={$type:e};this.stack.push(s),e===EE&&(s.value="")}let a;try{a=r(n)}catch{a=void 0}return a===void 0&&i&&(a=this.construct()),a}}extractHiddenTokens(e){let r=this.lexerResult.hidden;if(!r.length)return[];let n=e.startOffset;for(let i=0;in)return r.splice(0,i);return r.splice(0,r.length)}consume(e,r,n){let i=this.wrapper.wrapConsume(e,r);if(!this.isRecording()&&this.isValidToken(i)){let a=this.extractHiddenTokens(i);this.nodeBuilder.addHiddenNodes(a);let s=this.nodeBuilder.buildLeafNode(i,n),{assignment:l,isCrossRef:u}=this.getAssignment(n),h=this.current;if(l){let f=Wo(n)?i.image:this.converter.convert(i.image,s);this.assign(l.operator,l.feature,f,s,u)}else if(TM(h)){let f=i.image;Wo(n)||(f=this.converter.convert(f,s).toString()),h.value+=f}}}isValidToken(e){return!e.isInsertedInRecovery&&!isNaN(e.startOffset)&&typeof e.endOffset=="number"&&!isNaN(e.endOffset)}subrule(e,r,n,i,a){let s;!this.isRecording()&&!n&&(s=this.nodeBuilder.buildCompositeNode(i));let l=this.wrapper.wrapSubrule(e,r,a);!this.isRecording()&&s&&s.length>0&&this.performSubruleAssignment(l,i,s)}performSubruleAssignment(e,r,n){let{assignment:i,isCrossRef:a}=this.getAssignment(r);if(i)this.assign(i.operator,i.feature,e,n,a);else if(!i){let s=this.current;if(TM(s))s.value+=e.toString();else if(typeof e=="object"&&e){let u=this.assignWithoutOverride(e,s);this.stack.pop(),this.stack.push(u)}}}action(e,r){if(!this.isRecording()){let n=this.current;if(r.feature&&r.operator){n=this.construct(),this.nodeBuilder.removeNode(n.$cstNode),this.nodeBuilder.buildCompositeNode(r).content.push(n.$cstNode);let a={$type:e};this.stack.push(a),this.assign(r.operator,r.feature,n,n.$cstNode,!1)}else n.$type=e}}construct(){if(this.isRecording())return;let e=this.current;return Sk(e),this.nodeBuilder.construct(e),this.stack.pop(),TM(e)?this.converter.convert(e.value,e.$cstNode):(JR(this.astReflection,e),e)}getAssignment(e){if(!this.assignmentMap.has(e)){let r=lp(e,Ol);this.assignmentMap.set(e,{assignment:r,isCrossRef:r?op(r.terminal):!1})}return this.assignmentMap.get(e)}assign(e,r,n,i,a){let s=this.current,l;switch(a&&typeof n=="string"?l=this.linker.buildReference(s,r,i,n):l=n,e){case"=":{s[r]=l;break}case"?=":{s[r]=!0;break}case"+=":Array.isArray(s[r])||(s[r]=[]),s[r].push(l)}}assignWithoutOverride(e,r){for(let[i,a]of Object.entries(r)){let s=e[i];s===void 0?e[i]=a:Array.isArray(s)&&Array.isArray(a)&&(a.push(...s),e[i]=a)}let n=e.$cstNode;return n&&(n.astNode=void 0,e.$cstNode=void 0),e}get definitionErrors(){return this.wrapper.definitionErrors}},SE=class{static{o(this,"AbstractParserErrorMessageProvider")}buildMismatchTokenMessage(e){return Hu.buildMismatchTokenMessage(e)}buildNotAllInputParsedMessage(e){return Hu.buildNotAllInputParsedMessage(e)}buildNoViableAltMessage(e){return Hu.buildNoViableAltMessage(e)}buildEarlyExitMessage(e){return Hu.buildEarlyExitMessage(e)}},p1=class extends SE{static{o(this,"LangiumParserErrorMessageProvider")}buildMismatchTokenMessage({expected:e,actual:r}){return`Expecting ${e.LABEL?"`"+e.LABEL+"`":e.name.endsWith(":KW")?`keyword '${e.name.substring(0,e.name.length-3)}'`:`token of type '${e.name}'`} but found \`${r.image}\`.`}buildNotAllInputParsedMessage({firstRedundant:e}){return`Expecting end of file but found \`${e.image}\`.`}},Px=class extends Ix{static{o(this,"LangiumCompletionParser")}constructor(){super(...arguments),this.tokens=[],this.elementStack=[],this.lastElementStack=[],this.nextTokenIndex=0,this.stackSize=0}action(){}construct(){}parse(e){this.resetState();let r=this.lexer.tokenize(e,{mode:"partial"});return this.tokens=r.tokens,this.wrapper.input=[...this.tokens],this.mainRule.call(this.wrapper,{}),this.unorderedGroups.clear(),{tokens:this.tokens,elementStack:[...this.lastElementStack],tokenIndex:this.nextTokenIndex}}rule(e,r){let n=this.wrapper.DEFINE_RULE(Mle(e.name),this.startImplementation(r).bind(this));return this.allRules.set(e.name,n),e.entry&&(this.mainRule=n),n}resetState(){this.elementStack=[],this.lastElementStack=[],this.nextTokenIndex=0,this.stackSize=0}startImplementation(e){return r=>{let n=this.keepStackSize();try{e(r)}finally{this.resetStackSize(n)}}}removeUnexpectedElements(){this.elementStack.splice(this.stackSize)}keepStackSize(){let e=this.elementStack.length;return this.stackSize=e,e}resetStackSize(e){this.removeUnexpectedElements(),this.stackSize=e}consume(e,r,n){this.wrapper.wrapConsume(e,r),this.isRecording()||(this.lastElementStack=[...this.elementStack,n],this.nextTokenIndex=this.currIdx+1)}subrule(e,r,n,i,a){this.before(i),this.wrapper.wrapSubrule(e,r,a),this.after(i)}before(e){this.isRecording()||this.elementStack.push(e)}after(e){if(!this.isRecording()){let r=this.elementStack.lastIndexOf(e);r>=0&&this.elementStack.splice(r)}}get currIdx(){return this.wrapper.currIdx}},XBe={recoveryEnabled:!0,nodeLocationTracking:"full",skipValidations:!0,errorMessageProvider:new p1},kM=class extends Cx{static{o(this,"ChevrotainWrapper")}constructor(e,r){let n=r&&"maxLookahead"in r;super(e,Object.assign(Object.assign(Object.assign({},XBe),{lookaheadStrategy:n?new Wu({maxLookahead:r.maxLookahead}):new Lx({logging:r.skipValidations?()=>{}:void 0})}),r))}get IS_RECORDING(){return this.RECORDING_PHASE}DEFINE_RULE(e,r){return this.RULE(e,r)}wrapSelfAnalysis(){this.performSelfAnalysis()}wrapConsume(e,r){return this.consume(e,r)}wrapSubrule(e,r,n){return this.subrule(e,r,{ARGS:[n]})}wrapOr(e,r){this.or(e,r)}wrapOption(e,r){this.option(e,r)}wrapMany(e,r){this.many(e,r)}wrapAtLeastOne(e,r){this.atLeastOne(e,r)}}});function Fx(t,e,r){return jBe({parser:e,tokens:r,ruleNames:new Map},t),e}function jBe(t,e){let r=nx(e,!1),n=en(e.rules).filter(Oa).filter(i=>r.has(i));for(let i of n){let a=Object.assign(Object.assign({},t),{consume:1,optional:1,subrule:1,many:1,or:1});t.parser.rule(i,kp(a,i.definition))}}function kp(t,e,r=!1){let n;if(Wo(e))n=rFe(t,e);else if(Bu(e))n=KBe(t,e);else if(Ol(e))n=kp(t,e.terminal);else if(op(e))n=Ile(t,e);else if(Pl(e))n=QBe(t,e);else if(Tk(e))n=JBe(t,e);else if(Ek(e))n=eFe(t,e);else if(uf(e))n=tFe(t,e);else if(HR(e)){let i=t.consume++;n=o(()=>t.parser.consume(i,uo,e),"method")}else throw new ap(e.$cstNode,`Unexpected element type: ${e.$type}`);return Ole(t,r?void 0:CE(e),n,e.cardinality)}function KBe(t,e){let r=sx(e);return()=>t.parser.action(r,e)}function QBe(t,e){let r=e.rule.ref;if(Oa(r)){let n=t.subrule++,i=r.fragment,a=e.arguments.length>0?ZBe(r,e.arguments):()=>({});return s=>t.parser.subrule(n,Ple(t,r),i,e,a(s))}else if(lo(r)){let n=t.consume++,i=EM(t,r.name);return()=>t.parser.consume(n,i,e)}else if(r)Mc(r);else throw new ap(e.$cstNode,`Undefined rule: ${e.rule.$refText}`)}function ZBe(t,e){let r=e.map(n=>qu(n.value));return n=>{let i={};for(let a=0;ae(n)||r(n)}else if(PR(t)){let e=qu(t.left),r=qu(t.right);return n=>e(n)&&r(n)}else if(FR(t)){let e=qu(t.value);return r=>!e(r)}else if($R(t)){let e=t.parameter.ref.name;return r=>r!==void 0&&r[e]===!0}else if(OR(t)){let e=!!t.true;return()=>e}Mc(t)}function JBe(t,e){if(e.elements.length===1)return kp(t,e.elements[0]);{let r=[];for(let i of e.elements){let a={ALT:kp(t,i,!0)},s=CE(i);s&&(a.GATE=qu(s)),r.push(a)}let n=t.or++;return i=>t.parser.alternatives(n,r.map(a=>{let s={ALT:o(()=>a.ALT(i),"ALT")},l=a.GATE;return l&&(s.GATE=()=>l(i)),s}))}}function eFe(t,e){if(e.elements.length===1)return kp(t,e.elements[0]);let r=[];for(let l of e.elements){let u={ALT:kp(t,l,!0)},h=CE(l);h&&(u.GATE=qu(h)),r.push(u)}let n=t.or++,i=o((l,u)=>{let h=u.getRuleStack().join("-");return`uGroup_${l}_${h}`},"idFunc"),a=o(l=>t.parser.alternatives(n,r.map((u,h)=>{let f={ALT:o(()=>!0,"ALT")},d=t.parser;f.ALT=()=>{if(u.ALT(l),!d.isRecording()){let m=i(n,d);d.unorderedGroups.get(m)||d.unorderedGroups.set(m,[]);let g=d.unorderedGroups.get(m);typeof g?.[h]>"u"&&(g[h]=!0)}};let p=u.GATE;return p?f.GATE=()=>p(l):f.GATE=()=>{let m=d.unorderedGroups.get(i(n,d));return!m?.[h]},f})),"alternatives"),s=Ole(t,CE(e),a,"*");return l=>{s(l),t.parser.isRecording()||t.parser.unorderedGroups.delete(i(n,t.parser))}}function tFe(t,e){let r=e.elements.map(n=>kp(t,n));return n=>r.forEach(i=>i(n))}function CE(t){if(uf(t))return t.guardCondition}function Ile(t,e,r=e.terminal){if(r)if(Pl(r)&&Oa(r.rule.ref)){let n=r.rule.ref,i=t.subrule++;return a=>t.parser.subrule(i,Ple(t,n),!1,e,a)}else if(Pl(r)&&lo(r.rule.ref)){let n=t.consume++,i=EM(t,r.rule.ref.name);return()=>t.parser.consume(n,i,e)}else if(Wo(r)){let n=t.consume++,i=EM(t,r.value);return()=>t.parser.consume(n,i,e)}else throw new Error("Could not build cross reference parser");else{if(!e.type.ref)throw new Error("Could not resolve reference to type: "+e.type.$refText);let n=Lk(e.type.ref),i=n?.terminal;if(!i)throw new Error("Could not find name assignment for type: "+sx(e.type.ref));return Ile(t,e,i)}}function rFe(t,e){let r=t.consume++,n=t.tokens[e.value];if(!n)throw new Error("Could not find token for keyword: "+e.value);return()=>t.parser.consume(r,n,e)}function Ole(t,e,r,n){let i=e&&qu(e);if(!n)if(i){let a=t.or++;return s=>t.parser.alternatives(a,[{ALT:o(()=>r(s),"ALT"),GATE:o(()=>i(s),"GATE")},{ALT:mE(),GATE:o(()=>!i(s),"GATE")}])}else return r;if(n==="*"){let a=t.many++;return s=>t.parser.many(a,{DEF:o(()=>r(s),"DEF"),GATE:i?()=>i(s):void 0})}else if(n==="+"){let a=t.many++;if(i){let s=t.or++;return l=>t.parser.alternatives(s,[{ALT:o(()=>t.parser.atLeastOne(a,{DEF:o(()=>r(l),"DEF")}),"ALT"),GATE:o(()=>i(l),"GATE")},{ALT:mE(),GATE:o(()=>!i(l),"GATE")}])}else return s=>t.parser.atLeastOne(a,{DEF:o(()=>r(s),"DEF")})}else if(n==="?"){let a=t.optional++;return s=>t.parser.optional(a,{DEF:o(()=>r(s),"DEF"),GATE:i?()=>i(s):void 0})}else Mc(n)}function Ple(t,e){let r=nFe(t,e),n=t.parser.getRule(r);if(!n)throw new Error(`Rule "${r}" not found."`);return n}function nFe(t,e){if(Oa(e))return e.name;if(t.ruleNames.has(e))return t.ruleNames.get(e);{let r=e,n=r.$container,i=e.$type;for(;!Oa(n);)(uf(n)||Tk(n)||Ek(n))&&(i=n.elements.indexOf(r).toString()+":"+i),r=n,n=n.$container;return i=n.name+":"+i,t.ruleNames.set(e,i),i}}function EM(t,e){let r=t.tokens[e];if(!r)throw new Error(`Token "${e}" not found."`);return r}var AE=N(()=>{"use strict";df();Ic();yk();Fs();Bl();o(Fx,"createParser");o(jBe,"buildRules");o(kp,"buildElement");o(KBe,"buildAction");o(QBe,"buildRuleCall");o(ZBe,"buildRuleCallPredicate");o(qu,"buildPredicate");o(JBe,"buildAlternatives");o(eFe,"buildUnorderedGroup");o(tFe,"buildGroup");o(CE,"getGuardCondition");o(Ile,"buildCrossReference");o(rFe,"buildKeyword");o(Ole,"wrap");o(Ple,"getRule");o(nFe,"getRuleName");o(EM,"getToken")});function SM(t){let e=t.Grammar,r=t.parser.Lexer,n=new Px(t);return Fx(e,n,r.definition),n.finalize(),n}var CM=N(()=>{"use strict";Bx();AE();o(SM,"createCompletionParser")});function AM(t){let e=Ble(t);return e.finalize(),e}function Ble(t){let e=t.Grammar,r=t.parser.Lexer,n=new Ox(t);return Fx(e,n,r.definition)}var _M=N(()=>{"use strict";Bx();AE();o(AM,"createLangiumParser");o(Ble,"prepareLangiumParser")});var Yu,_E=N(()=>{"use strict";df();Ic();is();Bl();Fg();Fs();Yu=class{static{o(this,"DefaultTokenBuilder")}constructor(){this.diagnostics=[]}buildTokens(e,r){let n=en(nx(e,!1)),i=this.buildTerminalTokens(n),a=this.buildKeywordTokens(n,i,r);return i.forEach(s=>{let l=s.PATTERN;typeof l=="object"&&l&&"test"in l&&Bg(l)?a.unshift(s):a.push(s)}),a}flushLexingReport(e){return{diagnostics:this.popDiagnostics()}}popDiagnostics(){let e=[...this.diagnostics];return this.diagnostics=[],e}buildTerminalTokens(e){return e.filter(lo).filter(r=>!r.fragment).map(r=>this.buildTerminalToken(r)).toArray()}buildTerminalToken(e){let r=zg(e),n=this.requiresCustomPattern(r)?this.regexPatternFunction(r):r,i={name:e.name,PATTERN:n};return typeof n=="function"&&(i.LINE_BREAKS=!0),e.hidden&&(i.GROUP=Bg(r)?Xn.SKIPPED:"hidden"),i}requiresCustomPattern(e){return e.flags.includes("u")||e.flags.includes("s")?!0:!!(e.source.includes("?<=")||e.source.includes("?(r.lastIndex=i,r.exec(n))}buildKeywordTokens(e,r,n){return e.filter(Oa).flatMap(i=>Oc(i).filter(Wo)).distinct(i=>i.value).toArray().sort((i,a)=>a.value.length-i.value.length).map(i=>this.buildKeywordToken(i,r,!!n?.caseInsensitive))}buildKeywordToken(e,r,n){let i=this.buildKeywordPattern(e,n),a={name:e.value,PATTERN:i,LONGER_ALT:this.findLongerAlt(e,r)};return typeof i=="function"&&(a.LINE_BREAKS=!0),a}buildKeywordPattern(e,r){return r?new RegExp(sN(e.value)):e.value}findLongerAlt(e,r){return r.reduce((n,i)=>{let a=i?.PATTERN;return a?.source&&oN("^"+a.source+"$",e.value)&&n.push(i),n},[])}}});var Ep,Fc,DM=N(()=>{"use strict";Ic();Bl();Ep=class{static{o(this,"DefaultValueConverter")}convert(e,r){let n=r.grammarSource;if(op(n)&&(n=uN(n)),Pl(n)){let i=n.rule.ref;if(!i)throw new Error("This cst node was not parsed by a rule.");return this.runConverter(i,e,r)}return e}runConverter(e,r,n){var i;switch(e.name.toUpperCase()){case"INT":return Fc.convertInt(r);case"STRING":return Fc.convertString(r);case"ID":return Fc.convertID(r)}switch((i=yN(e))===null||i===void 0?void 0:i.toLowerCase()){case"number":return Fc.convertNumber(r);case"boolean":return Fc.convertBoolean(r);case"bigint":return Fc.convertBigint(r);case"date":return Fc.convertDate(r);default:return r}}};(function(t){function e(h){let f="";for(let d=1;d{"use strict";Object.defineProperty(NM,"__esModule",{value:!0});var LM;function RM(){if(LM===void 0)throw new Error("No runtime abstraction layer installed");return LM}o(RM,"RAL");(function(t){function e(r){if(r===void 0)throw new Error("No runtime abstraction layer provided");LM=r}o(e,"install"),t.install=e})(RM||(RM={}));NM.default=RM});var zle=Ii(Ba=>{"use strict";Object.defineProperty(Ba,"__esModule",{value:!0});Ba.stringArray=Ba.array=Ba.func=Ba.error=Ba.number=Ba.string=Ba.boolean=void 0;function iFe(t){return t===!0||t===!1}o(iFe,"boolean");Ba.boolean=iFe;function Fle(t){return typeof t=="string"||t instanceof String}o(Fle,"string");Ba.string=Fle;function aFe(t){return typeof t=="number"||t instanceof Number}o(aFe,"number");Ba.number=aFe;function sFe(t){return t instanceof Error}o(sFe,"error");Ba.error=sFe;function oFe(t){return typeof t=="function"}o(oFe,"func");Ba.func=oFe;function $le(t){return Array.isArray(t)}o($le,"array");Ba.array=$le;function lFe(t){return $le(t)&&t.every(e=>Fle(e))}o(lFe,"stringArray");Ba.stringArray=lFe});var OM=Ii(m1=>{"use strict";Object.defineProperty(m1,"__esModule",{value:!0});m1.Emitter=m1.Event=void 0;var cFe=MM(),Gle;(function(t){let e={dispose(){}};t.None=function(){return e}})(Gle||(m1.Event=Gle={}));var IM=class{static{o(this,"CallbackList")}add(e,r=null,n){this._callbacks||(this._callbacks=[],this._contexts=[]),this._callbacks.push(e),this._contexts.push(r),Array.isArray(n)&&n.push({dispose:o(()=>this.remove(e,r),"dispose")})}remove(e,r=null){if(!this._callbacks)return;let n=!1;for(let i=0,a=this._callbacks.length;i{this._callbacks||(this._callbacks=new IM),this._options&&this._options.onFirstListenerAdd&&this._callbacks.isEmpty()&&this._options.onFirstListenerAdd(this),this._callbacks.add(e,r);let i={dispose:o(()=>{this._callbacks&&(this._callbacks.remove(e,r),i.dispose=t._noop,this._options&&this._options.onLastListenerRemove&&this._callbacks.isEmpty()&&this._options.onLastListenerRemove(this))},"dispose")};return Array.isArray(n)&&n.push(i),i}),this._event}fire(e){this._callbacks&&this._callbacks.invoke.call(this._callbacks,e)}dispose(){this._callbacks&&(this._callbacks.dispose(),this._callbacks=void 0)}};m1.Emitter=DE;DE._noop=function(){}});var Vle=Ii(g1=>{"use strict";Object.defineProperty(g1,"__esModule",{value:!0});g1.CancellationTokenSource=g1.CancellationToken=void 0;var uFe=MM(),hFe=zle(),PM=OM(),LE;(function(t){t.None=Object.freeze({isCancellationRequested:!1,onCancellationRequested:PM.Event.None}),t.Cancelled=Object.freeze({isCancellationRequested:!0,onCancellationRequested:PM.Event.None});function e(r){let n=r;return n&&(n===t.None||n===t.Cancelled||hFe.boolean(n.isCancellationRequested)&&!!n.onCancellationRequested)}o(e,"is"),t.is=e})(LE||(g1.CancellationToken=LE={}));var fFe=Object.freeze(function(t,e){let r=(0,uFe.default)().timer.setTimeout(t.bind(e),0);return{dispose(){r.dispose()}}}),RE=class{static{o(this,"MutableToken")}constructor(){this._isCancelled=!1}cancel(){this._isCancelled||(this._isCancelled=!0,this._emitter&&(this._emitter.fire(void 0),this.dispose()))}get isCancellationRequested(){return this._isCancelled}get onCancellationRequested(){return this._isCancelled?fFe:(this._emitter||(this._emitter=new PM.Emitter),this._emitter.event)}dispose(){this._emitter&&(this._emitter.dispose(),this._emitter=void 0)}},BM=class{static{o(this,"CancellationTokenSource")}get token(){return this._token||(this._token=new RE),this._token}cancel(){this._token?this._token.cancel():this._token=LE.Cancelled}dispose(){this._token?this._token instanceof RE&&this._token.dispose():this._token=LE.None}};g1.CancellationTokenSource=BM});var yr={};var Yo=N(()=>{"use strict";Sr(yr,Sa(Vle(),1))});function FM(){return new Promise(t=>{typeof setImmediate>"u"?setTimeout(t,0):setImmediate(t)})}function ME(){return NE=performance.now(),new yr.CancellationTokenSource}function Hle(t){Ule=t}function zc(t){return t===$c}async function bi(t){if(t===yr.CancellationToken.None)return;let e=performance.now();if(e-NE>=Ule&&(NE=e,await FM(),NE=performance.now()),t.isCancellationRequested)throw $c}var NE,Ule,$c,cs,Xo=N(()=>{"use strict";Yo();o(FM,"delayNextTick");NE=0,Ule=10;o(ME,"startCancelableOperation");o(Hle,"setInterruptionPeriod");$c=Symbol("OperationCancelled");o(zc,"isOperationCancelled");o(bi,"interruptAndCheck");cs=class{static{o(this,"Deferred")}constructor(){this.promise=new Promise((e,r)=>{this.resolve=n=>(e(n),this),this.reject=n=>(r(n),this)})}}});function $M(t,e){if(t.length<=1)return t;let r=t.length/2|0,n=t.slice(0,r),i=t.slice(r);$M(n,e),$M(i,e);let a=0,s=0,l=0;for(;ar.line||e.line===r.line&&e.character>r.character?{start:r,end:e}:t}function dFe(t){let e=Yle(t.range);return e!==t.range?{newText:t.newText,range:e}:t}var IE,y1,Xle=N(()=>{"use strict";IE=class t{static{o(this,"FullTextDocument")}constructor(e,r,n,i){this._uri=e,this._languageId=r,this._version=n,this._content=i,this._lineOffsets=void 0}get uri(){return this._uri}get languageId(){return this._languageId}get version(){return this._version}getText(e){if(e){let r=this.offsetAt(e.start),n=this.offsetAt(e.end);return this._content.substring(r,n)}return this._content}update(e,r){for(let n of e)if(t.isIncremental(n)){let i=Yle(n.range),a=this.offsetAt(i.start),s=this.offsetAt(i.end);this._content=this._content.substring(0,a)+n.text+this._content.substring(s,this._content.length);let l=Math.max(i.start.line,0),u=Math.max(i.end.line,0),h=this._lineOffsets,f=Wle(n.text,!1,a);if(u-l===f.length)for(let p=0,m=f.length;pe?i=s:n=s+1}let a=n-1;return e=this.ensureBeforeEOL(e,r[a]),{line:a,character:e-r[a]}}offsetAt(e){let r=this.getLineOffsets();if(e.line>=r.length)return this._content.length;if(e.line<0)return 0;let n=r[e.line];if(e.character<=0)return n;let i=e.line+1r&&qle(this._content.charCodeAt(e-1));)e--;return e}get lineCount(){return this.getLineOffsets().length}static isIncremental(e){let r=e;return r!=null&&typeof r.text=="string"&&r.range!==void 0&&(r.rangeLength===void 0||typeof r.rangeLength=="number")}static isFull(e){let r=e;return r!=null&&typeof r.text=="string"&&r.range===void 0&&r.rangeLength===void 0}};(function(t){function e(i,a,s,l){return new IE(i,a,s,l)}o(e,"create"),t.create=e;function r(i,a,s){if(i instanceof IE)return i.update(a,s),i;throw new Error("TextDocument.update: document must be created by TextDocument.create")}o(r,"update"),t.update=r;function n(i,a){let s=i.getText(),l=$M(a.map(dFe),(f,d)=>{let p=f.range.start.line-d.range.start.line;return p===0?f.range.start.character-d.range.start.character:p}),u=0,h=[];for(let f of l){let d=i.offsetAt(f.range.start);if(du&&h.push(s.substring(u,d)),f.newText.length&&h.push(f.newText),u=i.offsetAt(f.range.end)}return h.push(s.substr(u)),h.join("")}o(n,"applyEdits"),t.applyEdits=n})(y1||(y1={}));o($M,"mergeSort");o(Wle,"computeLineOffsets");o(qle,"isEOL");o(Yle,"getWellformedRange");o(dFe,"getWellformedEdit")});var jle,us,v1,zM=N(()=>{"use strict";(()=>{"use strict";var t={470:i=>{function a(u){if(typeof u!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(u))}o(a,"e");function s(u,h){for(var f,d="",p=0,m=-1,g=0,y=0;y<=u.length;++y){if(y2){var v=d.lastIndexOf("/");if(v!==d.length-1){v===-1?(d="",p=0):p=(d=d.slice(0,v)).length-1-d.lastIndexOf("/"),m=y,g=0;continue}}else if(d.length===2||d.length===1){d="",p=0,m=y,g=0;continue}}h&&(d.length>0?d+="/..":d="..",p=2)}else d.length>0?d+="/"+u.slice(m+1,y):d=u.slice(m+1,y),p=y-m-1;m=y,g=0}else f===46&&g!==-1?++g:g=-1}return d}o(s,"r");var l={resolve:o(function(){for(var u,h="",f=!1,d=arguments.length-1;d>=-1&&!f;d--){var p;d>=0?p=arguments[d]:(u===void 0&&(u=process.cwd()),p=u),a(p),p.length!==0&&(h=p+"/"+h,f=p.charCodeAt(0)===47)}return h=s(h,!f),f?h.length>0?"/"+h:"/":h.length>0?h:"."},"resolve"),normalize:o(function(u){if(a(u),u.length===0)return".";var h=u.charCodeAt(0)===47,f=u.charCodeAt(u.length-1)===47;return(u=s(u,!h)).length!==0||h||(u="."),u.length>0&&f&&(u+="/"),h?"/"+u:u},"normalize"),isAbsolute:o(function(u){return a(u),u.length>0&&u.charCodeAt(0)===47},"isAbsolute"),join:o(function(){if(arguments.length===0)return".";for(var u,h=0;h0&&(u===void 0?u=f:u+="/"+f)}return u===void 0?".":l.normalize(u)},"join"),relative:o(function(u,h){if(a(u),a(h),u===h||(u=l.resolve(u))===(h=l.resolve(h)))return"";for(var f=1;fy){if(h.charCodeAt(m+x)===47)return h.slice(m+x+1);if(x===0)return h.slice(m+x)}else p>y&&(u.charCodeAt(f+x)===47?v=x:x===0&&(v=0));break}var b=u.charCodeAt(f+x);if(b!==h.charCodeAt(m+x))break;b===47&&(v=x)}var w="";for(x=f+v+1;x<=d;++x)x!==d&&u.charCodeAt(x)!==47||(w.length===0?w+="..":w+="/..");return w.length>0?w+h.slice(m+v):(m+=v,h.charCodeAt(m)===47&&++m,h.slice(m))},"relative"),_makeLong:o(function(u){return u},"_makeLong"),dirname:o(function(u){if(a(u),u.length===0)return".";for(var h=u.charCodeAt(0),f=h===47,d=-1,p=!0,m=u.length-1;m>=1;--m)if((h=u.charCodeAt(m))===47){if(!p){d=m;break}}else p=!1;return d===-1?f?"/":".":f&&d===1?"//":u.slice(0,d)},"dirname"),basename:o(function(u,h){if(h!==void 0&&typeof h!="string")throw new TypeError('"ext" argument must be a string');a(u);var f,d=0,p=-1,m=!0;if(h!==void 0&&h.length>0&&h.length<=u.length){if(h.length===u.length&&h===u)return"";var g=h.length-1,y=-1;for(f=u.length-1;f>=0;--f){var v=u.charCodeAt(f);if(v===47){if(!m){d=f+1;break}}else y===-1&&(m=!1,y=f+1),g>=0&&(v===h.charCodeAt(g)?--g==-1&&(p=f):(g=-1,p=y))}return d===p?p=y:p===-1&&(p=u.length),u.slice(d,p)}for(f=u.length-1;f>=0;--f)if(u.charCodeAt(f)===47){if(!m){d=f+1;break}}else p===-1&&(m=!1,p=f+1);return p===-1?"":u.slice(d,p)},"basename"),extname:o(function(u){a(u);for(var h=-1,f=0,d=-1,p=!0,m=0,g=u.length-1;g>=0;--g){var y=u.charCodeAt(g);if(y!==47)d===-1&&(p=!1,d=g+1),y===46?h===-1?h=g:m!==1&&(m=1):h!==-1&&(m=-1);else if(!p){f=g+1;break}}return h===-1||d===-1||m===0||m===1&&h===d-1&&h===f+1?"":u.slice(h,d)},"extname"),format:o(function(u){if(u===null||typeof u!="object")throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof u);return function(h,f){var d=f.dir||f.root,p=f.base||(f.name||"")+(f.ext||"");return d?d===f.root?d+p:d+"/"+p:p}(0,u)},"format"),parse:o(function(u){a(u);var h={root:"",dir:"",base:"",ext:"",name:""};if(u.length===0)return h;var f,d=u.charCodeAt(0),p=d===47;p?(h.root="/",f=1):f=0;for(var m=-1,g=0,y=-1,v=!0,x=u.length-1,b=0;x>=f;--x)if((d=u.charCodeAt(x))!==47)y===-1&&(v=!1,y=x+1),d===46?m===-1?m=x:b!==1&&(b=1):m!==-1&&(b=-1);else if(!v){g=x+1;break}return m===-1||y===-1||b===0||b===1&&m===y-1&&m===g+1?y!==-1&&(h.base=h.name=g===0&&p?u.slice(1,y):u.slice(g,y)):(g===0&&p?(h.name=u.slice(1,m),h.base=u.slice(1,y)):(h.name=u.slice(g,m),h.base=u.slice(g,y)),h.ext=u.slice(m,y)),g>0?h.dir=u.slice(0,g-1):p&&(h.dir="/"),h},"parse"),sep:"/",delimiter:":",win32:null,posix:null};l.posix=l,i.exports=l}},e={};function r(i){var a=e[i];if(a!==void 0)return a.exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}o(r,"r"),r.d=(i,a)=>{for(var s in a)r.o(a,s)&&!r.o(i,s)&&Object.defineProperty(i,s,{enumerable:!0,get:a[s]})},r.o=(i,a)=>Object.prototype.hasOwnProperty.call(i,a),r.r=i=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(i,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(i,"__esModule",{value:!0})};var n={};(()=>{let i;r.r(n),r.d(n,{URI:o(()=>p,"URI"),Utils:o(()=>I,"Utils")}),typeof process=="object"?i=process.platform==="win32":typeof navigator=="object"&&(i=navigator.userAgent.indexOf("Windows")>=0);let a=/^\w[\w\d+.-]*$/,s=/^\//,l=/^\/\//;function u(L,k){if(!L.scheme&&k)throw new Error(`[UriError]: Scheme is missing: {scheme: "", authority: "${L.authority}", path: "${L.path}", query: "${L.query}", fragment: "${L.fragment}"}`);if(L.scheme&&!a.test(L.scheme))throw new Error("[UriError]: Scheme contains illegal characters.");if(L.path){if(L.authority){if(!s.test(L.path))throw new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash ("/") character')}else if(l.test(L.path))throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters ("//")')}}o(u,"s");let h="",f="/",d=/^(([^:/?#]+?):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/;class p{static{o(this,"f")}static isUri(k){return k instanceof p||!!k&&typeof k.authority=="string"&&typeof k.fragment=="string"&&typeof k.path=="string"&&typeof k.query=="string"&&typeof k.scheme=="string"&&typeof k.fsPath=="string"&&typeof k.with=="function"&&typeof k.toString=="function"}scheme;authority;path;query;fragment;constructor(k,D,R,O,M,P=!1){typeof k=="object"?(this.scheme=k.scheme||h,this.authority=k.authority||h,this.path=k.path||h,this.query=k.query||h,this.fragment=k.fragment||h):(this.scheme=function(B,F){return B||F?B:"file"}(k,P),this.authority=D||h,this.path=function(B,F){switch(B){case"https":case"http":case"file":F?F[0]!==f&&(F=f+F):F=f}return F}(this.scheme,R||h),this.query=O||h,this.fragment=M||h,u(this,P))}get fsPath(){return b(this,!1)}with(k){if(!k)return this;let{scheme:D,authority:R,path:O,query:M,fragment:P}=k;return D===void 0?D=this.scheme:D===null&&(D=h),R===void 0?R=this.authority:R===null&&(R=h),O===void 0?O=this.path:O===null&&(O=h),M===void 0?M=this.query:M===null&&(M=h),P===void 0?P=this.fragment:P===null&&(P=h),D===this.scheme&&R===this.authority&&O===this.path&&M===this.query&&P===this.fragment?this:new g(D,R,O,M,P)}static parse(k,D=!1){let R=d.exec(k);return R?new g(R[2]||h,E(R[4]||h),E(R[5]||h),E(R[7]||h),E(R[9]||h),D):new g(h,h,h,h,h)}static file(k){let D=h;if(i&&(k=k.replace(/\\/g,f)),k[0]===f&&k[1]===f){let R=k.indexOf(f,2);R===-1?(D=k.substring(2),k=f):(D=k.substring(2,R),k=k.substring(R)||f)}return new g("file",D,k,h,h)}static from(k){let D=new g(k.scheme,k.authority,k.path,k.query,k.fragment);return u(D,!0),D}toString(k=!1){return w(this,k)}toJSON(){return this}static revive(k){if(k){if(k instanceof p)return k;{let D=new g(k);return D._formatted=k.external,D._fsPath=k._sep===m?k.fsPath:null,D}}return k}}let m=i?1:void 0;class g extends p{static{o(this,"l")}_formatted=null;_fsPath=null;get fsPath(){return this._fsPath||(this._fsPath=b(this,!1)),this._fsPath}toString(k=!1){return k?w(this,!0):(this._formatted||(this._formatted=w(this,!1)),this._formatted)}toJSON(){let k={$mid:1};return this._fsPath&&(k.fsPath=this._fsPath,k._sep=m),this._formatted&&(k.external=this._formatted),this.path&&(k.path=this.path),this.scheme&&(k.scheme=this.scheme),this.authority&&(k.authority=this.authority),this.query&&(k.query=this.query),this.fragment&&(k.fragment=this.fragment),k}}let y={58:"%3A",47:"%2F",63:"%3F",35:"%23",91:"%5B",93:"%5D",64:"%40",33:"%21",36:"%24",38:"%26",39:"%27",40:"%28",41:"%29",42:"%2A",43:"%2B",44:"%2C",59:"%3B",61:"%3D",32:"%20"};function v(L,k,D){let R,O=-1;for(let M=0;M=97&&P<=122||P>=65&&P<=90||P>=48&&P<=57||P===45||P===46||P===95||P===126||k&&P===47||D&&P===91||D&&P===93||D&&P===58)O!==-1&&(R+=encodeURIComponent(L.substring(O,M)),O=-1),R!==void 0&&(R+=L.charAt(M));else{R===void 0&&(R=L.substr(0,M));let B=y[P];B!==void 0?(O!==-1&&(R+=encodeURIComponent(L.substring(O,M)),O=-1),R+=B):O===-1&&(O=M)}}return O!==-1&&(R+=encodeURIComponent(L.substring(O))),R!==void 0?R:L}o(v,"d");function x(L){let k;for(let D=0;D1&&L.scheme==="file"?`//${L.authority}${L.path}`:L.path.charCodeAt(0)===47&&(L.path.charCodeAt(1)>=65&&L.path.charCodeAt(1)<=90||L.path.charCodeAt(1)>=97&&L.path.charCodeAt(1)<=122)&&L.path.charCodeAt(2)===58?k?L.path.substr(1):L.path[1].toLowerCase()+L.path.substr(2):L.path,i&&(D=D.replace(/\//g,"\\")),D}o(b,"m");function w(L,k){let D=k?x:v,R="",{scheme:O,authority:M,path:P,query:B,fragment:F}=L;if(O&&(R+=O,R+=":"),(M||O==="file")&&(R+=f,R+=f),M){let z=M.indexOf("@");if(z!==-1){let $=M.substr(0,z);M=M.substr(z+1),z=$.lastIndexOf(":"),z===-1?R+=D($,!1,!1):(R+=D($.substr(0,z),!1,!1),R+=":",R+=D($.substr(z+1),!1,!0)),R+="@"}M=M.toLowerCase(),z=M.lastIndexOf(":"),z===-1?R+=D(M,!1,!0):(R+=D(M.substr(0,z),!1,!0),R+=M.substr(z))}if(P){if(P.length>=3&&P.charCodeAt(0)===47&&P.charCodeAt(2)===58){let z=P.charCodeAt(1);z>=65&&z<=90&&(P=`/${String.fromCharCode(z+32)}:${P.substr(3)}`)}else if(P.length>=2&&P.charCodeAt(1)===58){let z=P.charCodeAt(0);z>=65&&z<=90&&(P=`${String.fromCharCode(z+32)}:${P.substr(2)}`)}R+=D(P,!0,!1)}return B&&(R+="?",R+=D(B,!1,!1)),F&&(R+="#",R+=k?F:v(F,!1,!1)),R}o(w,"y");function C(L){try{return decodeURIComponent(L)}catch{return L.length>3?L.substr(0,3)+C(L.substr(3)):L}}o(C,"v");let T=/(%[0-9A-Za-z][0-9A-Za-z])+/g;function E(L){return L.match(T)?L.replace(T,k=>C(k)):L}o(E,"C");var A=r(470);let S=A.posix||A,_="/";var I;(function(L){L.joinPath=function(k,...D){return k.with({path:S.join(k.path,...D)})},L.resolvePath=function(k,...D){let R=k.path,O=!1;R[0]!==_&&(R=_+R,O=!0);let M=S.resolve(R,...D);return O&&M[0]===_&&!k.authority&&(M=M.substring(1)),k.with({path:M})},L.dirname=function(k){if(k.path.length===0||k.path===_)return k;let D=S.dirname(k.path);return D.length===1&&D.charCodeAt(0)===46&&(D=""),k.with({path:D})},L.basename=function(k){return S.basename(k.path)},L.extname=function(k){return S.extname(k.path)}})(I||(I={}))})(),jle=n})();({URI:us,Utils:v1}=jle)});var hs,Gc=N(()=>{"use strict";zM();(function(t){t.basename=v1.basename,t.dirname=v1.dirname,t.extname=v1.extname,t.joinPath=v1.joinPath,t.resolvePath=v1.resolvePath;function e(i,a){return i?.toString()===a?.toString()}o(e,"equals"),t.equals=e;function r(i,a){let s=typeof i=="string"?i:i.path,l=typeof a=="string"?a:a.path,u=s.split("/").filter(m=>m.length>0),h=l.split("/").filter(m=>m.length>0),f=0;for(;f{"use strict";Xle();x1();Yo();Fs();Gc();(function(t){t[t.Changed=0]="Changed",t[t.Parsed=1]="Parsed",t[t.IndexedContent=2]="IndexedContent",t[t.ComputedScopes=3]="ComputedScopes",t[t.Linked=4]="Linked",t[t.IndexedReferences=5]="IndexedReferences",t[t.Validated=6]="Validated"})(kn||(kn={}));$x=class{static{o(this,"DefaultLangiumDocumentFactory")}constructor(e){this.serviceRegistry=e.ServiceRegistry,this.textDocuments=e.workspace.TextDocuments,this.fileSystemProvider=e.workspace.FileSystemProvider}async fromUri(e,r=yr.CancellationToken.None){let n=await this.fileSystemProvider.readFile(e);return this.createAsync(e,n,r)}fromTextDocument(e,r,n){return r=r??us.parse(e.uri),yr.CancellationToken.is(n)?this.createAsync(r,e,n):this.create(r,e,n)}fromString(e,r,n){return yr.CancellationToken.is(n)?this.createAsync(r,e,n):this.create(r,e,n)}fromModel(e,r){return this.create(r,{$model:e})}create(e,r,n){if(typeof r=="string"){let i=this.parse(e,r,n);return this.createLangiumDocument(i,e,void 0,r)}else if("$model"in r){let i={value:r.$model,parserErrors:[],lexerErrors:[]};return this.createLangiumDocument(i,e)}else{let i=this.parse(e,r.getText(),n);return this.createLangiumDocument(i,e,r)}}async createAsync(e,r,n){if(typeof r=="string"){let i=await this.parseAsync(e,r,n);return this.createLangiumDocument(i,e,void 0,r)}else{let i=await this.parseAsync(e,r.getText(),n);return this.createLangiumDocument(i,e,r)}}createLangiumDocument(e,r,n,i){let a;if(n)a={parseResult:e,uri:r,state:kn.Parsed,references:[],textDocument:n};else{let s=this.createTextDocumentGetter(r,i);a={parseResult:e,uri:r,state:kn.Parsed,references:[],get textDocument(){return s()}}}return e.value.$document=a,a}async update(e,r){var n,i;let a=(n=e.parseResult.value.$cstNode)===null||n===void 0?void 0:n.root.fullText,s=(i=this.textDocuments)===null||i===void 0?void 0:i.get(e.uri.toString()),l=s?s.getText():await this.fileSystemProvider.readFile(e.uri);if(s)Object.defineProperty(e,"textDocument",{value:s});else{let u=this.createTextDocumentGetter(e.uri,l);Object.defineProperty(e,"textDocument",{get:u})}return a!==l&&(e.parseResult=await this.parseAsync(e.uri,l,r),e.parseResult.value.$document=e),e.state=kn.Parsed,e}parse(e,r,n){return this.serviceRegistry.getServices(e).parser.LangiumParser.parse(r,n)}parseAsync(e,r,n){return this.serviceRegistry.getServices(e).parser.AsyncParser.parse(r,n)}createTextDocumentGetter(e,r){let n=this.serviceRegistry,i;return()=>i??(i=y1.create(e.toString(),n.getServices(e).LanguageMetaData.languageId,0,r??""))}},zx=class{static{o(this,"DefaultLangiumDocuments")}constructor(e){this.documentMap=new Map,this.langiumDocumentFactory=e.workspace.LangiumDocumentFactory,this.serviceRegistry=e.ServiceRegistry}get all(){return en(this.documentMap.values())}addDocument(e){let r=e.uri.toString();if(this.documentMap.has(r))throw new Error(`A document with the URI '${r}' is already present.`);this.documentMap.set(r,e)}getDocument(e){let r=e.toString();return this.documentMap.get(r)}async getOrCreateDocument(e,r){let n=this.getDocument(e);return n||(n=await this.langiumDocumentFactory.fromUri(e,r),this.addDocument(n),n)}createDocument(e,r,n){if(n)return this.langiumDocumentFactory.fromString(r,e,n).then(i=>(this.addDocument(i),i));{let i=this.langiumDocumentFactory.fromString(r,e);return this.addDocument(i),i}}hasDocument(e){return this.documentMap.has(e.toString())}invalidateDocument(e){let r=e.toString(),n=this.documentMap.get(r);return n&&(this.serviceRegistry.getServices(e).references.Linker.unlink(n),n.state=kn.Changed,n.precomputedScopes=void 0,n.diagnostics=void 0),n}deleteDocument(e){let r=e.toString(),n=this.documentMap.get(r);return n&&(n.state=kn.Changed,this.documentMap.delete(r)),n}}});var GM,Gx,VM=N(()=>{"use strict";Yo();Ml();is();Xo();x1();GM=Symbol("ref_resolving"),Gx=class{static{o(this,"DefaultLinker")}constructor(e){this.reflection=e.shared.AstReflection,this.langiumDocuments=()=>e.shared.workspace.LangiumDocuments,this.scopeProvider=e.references.ScopeProvider,this.astNodeLocator=e.workspace.AstNodeLocator}async link(e,r=yr.CancellationToken.None){for(let n of qo(e.parseResult.value))await bi(r),Og(n).forEach(i=>this.doLink(i,e))}doLink(e,r){var n;let i=e.reference;if(i._ref===void 0){i._ref=GM;try{let a=this.getCandidate(e);if(rp(a))i._ref=a;else if(i._nodeDescription=a,this.langiumDocuments().hasDocument(a.documentUri)){let s=this.loadAstNode(a);i._ref=s??this.createLinkingError(e,a)}else i._ref=void 0}catch(a){console.error(`An error occurred while resolving reference to '${i.$refText}':`,a);let s=(n=a.message)!==null&&n!==void 0?n:String(a);i._ref=Object.assign(Object.assign({},e),{message:`An error occurred while resolving reference to '${i.$refText}': ${s}`})}r.references.push(i)}}unlink(e){for(let r of e.references)delete r._ref,delete r._nodeDescription;e.references=[]}getCandidate(e){let n=this.scopeProvider.getScope(e).getElement(e.reference.$refText);return n??this.createLinkingError(e)}buildReference(e,r,n,i){let a=this,s={$refNode:n,$refText:i,get ref(){var l;if(ii(this._ref))return this._ref;if(_R(this._nodeDescription)){let u=a.loadAstNode(this._nodeDescription);this._ref=u??a.createLinkingError({reference:s,container:e,property:r},this._nodeDescription)}else if(this._ref===void 0){this._ref=GM;let u=Q2(e).$document,h=a.getLinkedNode({reference:s,container:e,property:r});if(h.error&&u&&u.state{"use strict";Bl();o(Kle,"isNamed");Vx=class{static{o(this,"DefaultNameProvider")}getName(e){if(Kle(e))return e.name}getNameNode(e){return ix(e.$cstNode,"name")}}});var Ux,HM=N(()=>{"use strict";Bl();Ml();is();Il();Fs();Gc();Ux=class{static{o(this,"DefaultReferences")}constructor(e){this.nameProvider=e.references.NameProvider,this.index=e.shared.workspace.IndexManager,this.nodeLocator=e.workspace.AstNodeLocator}findDeclaration(e){if(e){let r=gN(e),n=e.astNode;if(r&&n){let i=n[r.feature];if(va(i))return i.ref;if(Array.isArray(i)){for(let a of i)if(va(a)&&a.$refNode&&a.$refNode.offset<=e.offset&&a.$refNode.end>=e.end)return a.ref}}if(n){let i=this.nameProvider.getNameNode(n);if(i&&(i===e||LR(e,i)))return n}}}findDeclarationNode(e){let r=this.findDeclaration(e);if(r?.$cstNode){let n=this.nameProvider.getNameNode(r);return n??r.$cstNode}}findReferences(e,r){let n=[];if(r.includeDeclaration){let a=this.getReferenceToSelf(e);a&&n.push(a)}let i=this.index.findAllReferences(e,this.nodeLocator.getAstNodePath(e));return r.documentUri&&(i=i.filter(a=>hs.equals(a.sourceUri,r.documentUri))),n.push(...i),en(n)}getReferenceToSelf(e){let r=this.nameProvider.getNameNode(e);if(r){let n=Pa(e),i=this.nodeLocator.getAstNodePath(e);return{sourceUri:n.uri,sourcePath:i,targetUri:n.uri,targetPath:i,segment:ip(r),local:!0}}}}});var $l,Sp,b1=N(()=>{"use strict";Fs();$l=class{static{o(this,"MultiMap")}constructor(e){if(this.map=new Map,e)for(let[r,n]of e)this.add(r,n)}get size(){return Xm.sum(en(this.map.values()).map(e=>e.length))}clear(){this.map.clear()}delete(e,r){if(r===void 0)return this.map.delete(e);{let n=this.map.get(e);if(n){let i=n.indexOf(r);if(i>=0)return n.length===1?this.map.delete(e):n.splice(i,1),!0}return!1}}get(e){var r;return(r=this.map.get(e))!==null&&r!==void 0?r:[]}has(e,r){if(r===void 0)return this.map.has(e);{let n=this.map.get(e);return n?n.indexOf(r)>=0:!1}}add(e,r){return this.map.has(e)?this.map.get(e).push(r):this.map.set(e,[r]),this}addAll(e,r){return this.map.has(e)?this.map.get(e).push(...r):this.map.set(e,Array.from(r)),this}forEach(e){this.map.forEach((r,n)=>r.forEach(i=>e(i,n,this)))}[Symbol.iterator](){return this.entries().iterator()}entries(){return en(this.map.entries()).flatMap(([e,r])=>r.map(n=>[e,n]))}keys(){return en(this.map.keys())}values(){return en(this.map.values()).flat()}entriesGroupedByKey(){return en(this.map.entries())}},Sp=class{static{o(this,"BiMap")}get size(){return this.map.size}constructor(e){if(this.map=new Map,this.inverse=new Map,e)for(let[r,n]of e)this.set(r,n)}clear(){this.map.clear(),this.inverse.clear()}set(e,r){return this.map.set(e,r),this.inverse.set(r,e),this}get(e){return this.map.get(e)}getKey(e){return this.inverse.get(e)}delete(e){let r=this.map.get(e);return r!==void 0?(this.map.delete(e),this.inverse.delete(r),!0):!1}}});var Hx,WM=N(()=>{"use strict";Yo();is();b1();Xo();Hx=class{static{o(this,"DefaultScopeComputation")}constructor(e){this.nameProvider=e.references.NameProvider,this.descriptions=e.workspace.AstNodeDescriptionProvider}async computeExports(e,r=yr.CancellationToken.None){return this.computeExportsForNode(e.parseResult.value,e,void 0,r)}async computeExportsForNode(e,r,n=Z2,i=yr.CancellationToken.None){let a=[];this.exportNode(e,a,r);for(let s of n(e))await bi(i),this.exportNode(s,a,r);return a}exportNode(e,r,n){let i=this.nameProvider.getName(e);i&&r.push(this.descriptions.createDescription(e,i,n))}async computeLocalScopes(e,r=yr.CancellationToken.None){let n=e.parseResult.value,i=new $l;for(let a of Oc(n))await bi(r),this.processNode(a,e,i);return i}processNode(e,r,n){let i=e.$container;if(i){let a=this.nameProvider.getName(e);a&&n.add(i,this.descriptions.createDescription(e,a,r))}}}});var w1,Wx,pFe,qM=N(()=>{"use strict";Fs();w1=class{static{o(this,"StreamScope")}constructor(e,r,n){var i;this.elements=e,this.outerScope=r,this.caseInsensitive=(i=n?.caseInsensitive)!==null&&i!==void 0?i:!1}getAllElements(){return this.outerScope?this.elements.concat(this.outerScope.getAllElements()):this.elements}getElement(e){let r=this.caseInsensitive?this.elements.find(n=>n.name.toLowerCase()===e.toLowerCase()):this.elements.find(n=>n.name===e);if(r)return r;if(this.outerScope)return this.outerScope.getElement(e)}},Wx=class{static{o(this,"MapScope")}constructor(e,r,n){var i;this.elements=new Map,this.caseInsensitive=(i=n?.caseInsensitive)!==null&&i!==void 0?i:!1;for(let a of e){let s=this.caseInsensitive?a.name.toLowerCase():a.name;this.elements.set(s,a)}this.outerScope=r}getElement(e){let r=this.caseInsensitive?e.toLowerCase():e,n=this.elements.get(r);if(n)return n;if(this.outerScope)return this.outerScope.getElement(e)}getAllElements(){let e=en(this.elements.values());return this.outerScope&&(e=e.concat(this.outerScope.getAllElements())),e}},pFe={getElement(){},getAllElements(){return G2}}});var T1,qx,Cp,OE,k1,PE=N(()=>{"use strict";T1=class{static{o(this,"DisposableCache")}constructor(){this.toDispose=[],this.isDisposed=!1}onDispose(e){this.toDispose.push(e)}dispose(){this.throwIfDisposed(),this.clear(),this.isDisposed=!0,this.toDispose.forEach(e=>e.dispose())}throwIfDisposed(){if(this.isDisposed)throw new Error("This cache has already been disposed")}},qx=class extends T1{static{o(this,"SimpleCache")}constructor(){super(...arguments),this.cache=new Map}has(e){return this.throwIfDisposed(),this.cache.has(e)}set(e,r){this.throwIfDisposed(),this.cache.set(e,r)}get(e,r){if(this.throwIfDisposed(),this.cache.has(e))return this.cache.get(e);if(r){let n=r();return this.cache.set(e,n),n}else return}delete(e){return this.throwIfDisposed(),this.cache.delete(e)}clear(){this.throwIfDisposed(),this.cache.clear()}},Cp=class extends T1{static{o(this,"ContextCache")}constructor(e){super(),this.cache=new Map,this.converter=e??(r=>r)}has(e,r){return this.throwIfDisposed(),this.cacheForContext(e).has(r)}set(e,r,n){this.throwIfDisposed(),this.cacheForContext(e).set(r,n)}get(e,r,n){this.throwIfDisposed();let i=this.cacheForContext(e);if(i.has(r))return i.get(r);if(n){let a=n();return i.set(r,a),a}else return}delete(e,r){return this.throwIfDisposed(),this.cacheForContext(e).delete(r)}clear(e){if(this.throwIfDisposed(),e){let r=this.converter(e);this.cache.delete(r)}else this.cache.clear()}cacheForContext(e){let r=this.converter(e),n=this.cache.get(r);return n||(n=new Map,this.cache.set(r,n)),n}},OE=class extends Cp{static{o(this,"DocumentCache")}constructor(e,r){super(n=>n.toString()),r?(this.toDispose.push(e.workspace.DocumentBuilder.onDocumentPhase(r,n=>{this.clear(n.uri.toString())})),this.toDispose.push(e.workspace.DocumentBuilder.onUpdate((n,i)=>{for(let a of i)this.clear(a)}))):this.toDispose.push(e.workspace.DocumentBuilder.onUpdate((n,i)=>{let a=n.concat(i);for(let s of a)this.clear(s)}))}},k1=class extends qx{static{o(this,"WorkspaceCache")}constructor(e,r){super(),r?(this.toDispose.push(e.workspace.DocumentBuilder.onBuildPhase(r,()=>{this.clear()})),this.toDispose.push(e.workspace.DocumentBuilder.onUpdate((n,i)=>{i.length>0&&this.clear()}))):this.toDispose.push(e.workspace.DocumentBuilder.onUpdate(()=>{this.clear()}))}}});var Yx,YM=N(()=>{"use strict";qM();is();Fs();PE();Yx=class{static{o(this,"DefaultScopeProvider")}constructor(e){this.reflection=e.shared.AstReflection,this.nameProvider=e.references.NameProvider,this.descriptions=e.workspace.AstNodeDescriptionProvider,this.indexManager=e.shared.workspace.IndexManager,this.globalScopeCache=new k1(e.shared)}getScope(e){let r=[],n=this.reflection.getReferenceType(e),i=Pa(e.container).precomputedScopes;if(i){let s=e.container;do{let l=i.get(s);l.length>0&&r.push(en(l).filter(u=>this.reflection.isSubtype(u.type,n))),s=s.$container}while(s)}let a=this.getGlobalScope(n,e);for(let s=r.length-1;s>=0;s--)a=this.createScope(r[s],a);return a}createScope(e,r,n){return new w1(en(e),r,n)}createScopeForNodes(e,r,n){let i=en(e).map(a=>{let s=this.nameProvider.getName(a);if(s)return this.descriptions.createDescription(a,s)}).nonNullable();return new w1(i,r,n)}getGlobalScope(e,r){return this.globalScopeCache.get(e,()=>new Wx(this.indexManager.allElements(e)))}}});function XM(t){return typeof t.$comment=="string"}function Qle(t){return typeof t=="object"&&!!t&&("$ref"in t||"$error"in t)}var Xx,BE=N(()=>{"use strict";zM();Ml();is();Bl();o(XM,"isAstNodeWithComment");o(Qle,"isIntermediateReference");Xx=class{static{o(this,"DefaultJsonSerializer")}constructor(e){this.ignoreProperties=new Set(["$container","$containerProperty","$containerIndex","$document","$cstNode"]),this.langiumDocuments=e.shared.workspace.LangiumDocuments,this.astNodeLocator=e.workspace.AstNodeLocator,this.nameProvider=e.references.NameProvider,this.commentProvider=e.documentation.CommentProvider}serialize(e,r){let n=r??{},i=r?.replacer,a=o((l,u)=>this.replacer(l,u,n),"defaultReplacer"),s=i?(l,u)=>i(l,u,a):a;try{return this.currentDocument=Pa(e),JSON.stringify(e,s,r?.space)}finally{this.currentDocument=void 0}}deserialize(e,r){let n=r??{},i=JSON.parse(e);return this.linkNode(i,i,n),i}replacer(e,r,{refText:n,sourceText:i,textRegions:a,comments:s,uriConverter:l}){var u,h,f,d;if(!this.ignoreProperties.has(e))if(va(r)){let p=r.ref,m=n?r.$refText:void 0;if(p){let g=Pa(p),y="";this.currentDocument&&this.currentDocument!==g&&(l?y=l(g.uri,r):y=g.uri.toString());let v=this.astNodeLocator.getAstNodePath(p);return{$ref:`${y}#${v}`,$refText:m}}else return{$error:(h=(u=r.error)===null||u===void 0?void 0:u.message)!==null&&h!==void 0?h:"Could not resolve reference",$refText:m}}else if(ii(r)){let p;if(a&&(p=this.addAstNodeRegionWithAssignmentsTo(Object.assign({},r)),(!e||r.$document)&&p?.$textRegion&&(p.$textRegion.documentURI=(f=this.currentDocument)===null||f===void 0?void 0:f.uri.toString())),i&&!e&&(p??(p=Object.assign({},r)),p.$sourceText=(d=r.$cstNode)===null||d===void 0?void 0:d.text),s){p??(p=Object.assign({},r));let m=this.commentProvider.getComment(r);m&&(p.$comment=m.replace(/\r/g,""))}return p??r}else return r}addAstNodeRegionWithAssignmentsTo(e){let r=o(n=>({offset:n.offset,end:n.end,length:n.length,range:n.range}),"createDocumentSegment");if(e.$cstNode){let n=e.$textRegion=r(e.$cstNode),i=n.assignments={};return Object.keys(e).filter(a=>!a.startsWith("$")).forEach(a=>{let s=fN(e.$cstNode,a).map(r);s.length!==0&&(i[a]=s)}),e}}linkNode(e,r,n,i,a,s){for(let[u,h]of Object.entries(e))if(Array.isArray(h))for(let f=0;f{"use strict";Gc();jx=class{static{o(this,"DefaultServiceRegistry")}get map(){return this.fileExtensionMap}constructor(e){this.languageIdMap=new Map,this.fileExtensionMap=new Map,this.textDocuments=e?.workspace.TextDocuments}register(e){let r=e.LanguageMetaData;for(let n of r.fileExtensions)this.fileExtensionMap.has(n)&&console.warn(`The file extension ${n} is used by multiple languages. It is now assigned to '${r.languageId}'.`),this.fileExtensionMap.set(n,e);this.languageIdMap.set(r.languageId,e),this.languageIdMap.size===1?this.singleton=e:this.singleton=void 0}getServices(e){var r,n;if(this.singleton!==void 0)return this.singleton;if(this.languageIdMap.size===0)throw new Error("The service registry is empty. Use `register` to register the services of a language.");let i=(n=(r=this.textDocuments)===null||r===void 0?void 0:r.get(e))===null||n===void 0?void 0:n.languageId;if(i!==void 0){let l=this.languageIdMap.get(i);if(l)return l}let a=hs.extname(e),s=this.fileExtensionMap.get(a);if(!s)throw i?new Error(`The service registry contains no services for the extension '${a}' for language '${i}'.`):new Error(`The service registry contains no services for the extension '${a}'.`);return s}hasServices(e){try{return this.getServices(e),!0}catch{return!1}}get all(){return Array.from(this.languageIdMap.values())}}});function Ap(t){return{code:t}}var E1,Kx,Qx=N(()=>{"use strict";jo();b1();Xo();Fs();o(Ap,"diagnosticData");(function(t){t.all=["fast","slow","built-in"]})(E1||(E1={}));Kx=class{static{o(this,"ValidationRegistry")}constructor(e){this.entries=new $l,this.entriesBefore=[],this.entriesAfter=[],this.reflection=e.shared.AstReflection}register(e,r=this,n="fast"){if(n==="built-in")throw new Error("The 'built-in' category is reserved for lexer, parser, and linker errors.");for(let[i,a]of Object.entries(e)){let s=a;if(Array.isArray(s))for(let l of s){let u={check:this.wrapValidationException(l,r),category:n};this.addEntry(i,u)}else if(typeof s=="function"){let l={check:this.wrapValidationException(s,r),category:n};this.addEntry(i,l)}else Mc(s)}}wrapValidationException(e,r){return async(n,i,a)=>{await this.handleException(()=>e.call(r,n,i,a),"An error occurred during validation",i,n)}}async handleException(e,r,n,i){try{await e()}catch(a){if(zc(a))throw a;console.error(`${r}:`,a),a instanceof Error&&a.stack&&console.error(a.stack);let s=a instanceof Error?a.message:String(a);n("error",`${r}: ${s}`,{node:i})}}addEntry(e,r){if(e==="AstNode"){this.entries.add("AstNode",r);return}for(let n of this.reflection.getAllSubTypes(e))this.entries.add(n,r)}getChecks(e,r){let n=en(this.entries.get(e)).concat(this.entries.get("AstNode"));return r&&(n=n.filter(i=>r.includes(i.category))),n.map(i=>i.check)}registerBeforeDocument(e,r=this){this.entriesBefore.push(this.wrapPreparationException(e,"An error occurred during set-up of the validation",r))}registerAfterDocument(e,r=this){this.entriesAfter.push(this.wrapPreparationException(e,"An error occurred during tear-down of the validation",r))}wrapPreparationException(e,r,n){return async(i,a,s,l)=>{await this.handleException(()=>e.call(n,i,a,s,l),r,a,i)}}get checksBefore(){return this.entriesBefore}get checksAfter(){return this.entriesAfter}}});function Zle(t){if(t.range)return t.range;let e;return typeof t.property=="string"?e=ix(t.node.$cstNode,t.property,t.index):typeof t.keyword=="string"&&(e=pN(t.node.$cstNode,t.keyword,t.index)),e??(e=t.node.$cstNode),e?e.range:{start:{line:0,character:0},end:{line:0,character:0}}}function FE(t){switch(t){case"error":return 1;case"warning":return 2;case"info":return 3;case"hint":return 4;default:throw new Error("Invalid diagnostic severity: "+t)}}function Jle(t){switch(t){case"error":return Ap(Ko.LexingError);case"warning":return Ap(Ko.LexingWarning);case"info":return Ap(Ko.LexingInfo);case"hint":return Ap(Ko.LexingHint);default:throw new Error("Invalid diagnostic severity: "+t)}}var Zx,Ko,KM=N(()=>{"use strict";Yo();Bl();is();Il();Xo();Qx();Zx=class{static{o(this,"DefaultDocumentValidator")}constructor(e){this.validationRegistry=e.validation.ValidationRegistry,this.metadata=e.LanguageMetaData}async validateDocument(e,r={},n=yr.CancellationToken.None){let i=e.parseResult,a=[];if(await bi(n),(!r.categories||r.categories.includes("built-in"))&&(this.processLexingErrors(i,a,r),r.stopAfterLexingErrors&&a.some(s=>{var l;return((l=s.data)===null||l===void 0?void 0:l.code)===Ko.LexingError})||(this.processParsingErrors(i,a,r),r.stopAfterParsingErrors&&a.some(s=>{var l;return((l=s.data)===null||l===void 0?void 0:l.code)===Ko.ParsingError}))||(this.processLinkingErrors(e,a,r),r.stopAfterLinkingErrors&&a.some(s=>{var l;return((l=s.data)===null||l===void 0?void 0:l.code)===Ko.LinkingError}))))return a;try{a.push(...await this.validateAst(i.value,r,n))}catch(s){if(zc(s))throw s;console.error("An error occurred during validation:",s)}return await bi(n),a}processLexingErrors(e,r,n){var i,a,s;let l=[...e.lexerErrors,...(a=(i=e.lexerReport)===null||i===void 0?void 0:i.diagnostics)!==null&&a!==void 0?a:[]];for(let u of l){let h=(s=u.severity)!==null&&s!==void 0?s:"error",f={severity:FE(h),range:{start:{line:u.line-1,character:u.column-1},end:{line:u.line-1,character:u.column+u.length-1}},message:u.message,data:Jle(h),source:this.getSource()};r.push(f)}}processParsingErrors(e,r,n){for(let i of e.parserErrors){let a;if(isNaN(i.token.startOffset)){if("previousToken"in i){let s=i.previousToken;if(isNaN(s.startOffset)){let l={line:0,character:0};a={start:l,end:l}}else{let l={line:s.endLine-1,character:s.endColumn};a={start:l,end:l}}}}else a=jm(i.token);if(a){let s={severity:FE("error"),range:a,message:i.message,data:Ap(Ko.ParsingError),source:this.getSource()};r.push(s)}}}processLinkingErrors(e,r,n){for(let i of e.references){let a=i.error;if(a){let s={node:a.container,property:a.property,index:a.index,data:{code:Ko.LinkingError,containerType:a.container.$type,property:a.property,refText:a.reference.$refText}};r.push(this.toDiagnostic("error",a.message,s))}}}async validateAst(e,r,n=yr.CancellationToken.None){let i=[],a=o((s,l,u)=>{i.push(this.toDiagnostic(s,l,u))},"acceptor");return await this.validateAstBefore(e,r,a,n),await this.validateAstNodes(e,r,a,n),await this.validateAstAfter(e,r,a,n),i}async validateAstBefore(e,r,n,i=yr.CancellationToken.None){var a;let s=this.validationRegistry.checksBefore;for(let l of s)await bi(i),await l(e,n,(a=r.categories)!==null&&a!==void 0?a:[],i)}async validateAstNodes(e,r,n,i=yr.CancellationToken.None){await Promise.all(qo(e).map(async a=>{await bi(i);let s=this.validationRegistry.getChecks(a.$type,r.categories);for(let l of s)await l(a,n,i)}))}async validateAstAfter(e,r,n,i=yr.CancellationToken.None){var a;let s=this.validationRegistry.checksAfter;for(let l of s)await bi(i),await l(e,n,(a=r.categories)!==null&&a!==void 0?a:[],i)}toDiagnostic(e,r,n){return{message:r,range:Zle(n),severity:FE(e),code:n.code,codeDescription:n.codeDescription,tags:n.tags,relatedInformation:n.relatedInformation,data:n.data,source:this.getSource()}}getSource(){return this.metadata.languageId}};o(Zle,"getDiagnosticRange");o(FE,"toDiagnosticSeverity");o(Jle,"toDiagnosticData");(function(t){t.LexingError="lexing-error",t.LexingWarning="lexing-warning",t.LexingInfo="lexing-info",t.LexingHint="lexing-hint",t.ParsingError="parsing-error",t.LinkingError="linking-error"})(Ko||(Ko={}))});var Jx,eb,QM=N(()=>{"use strict";Yo();Ml();is();Il();Xo();Gc();Jx=class{static{o(this,"DefaultAstNodeDescriptionProvider")}constructor(e){this.astNodeLocator=e.workspace.AstNodeLocator,this.nameProvider=e.references.NameProvider}createDescription(e,r,n){let i=n??Pa(e);r??(r=this.nameProvider.getName(e));let a=this.astNodeLocator.getAstNodePath(e);if(!r)throw new Error(`Node at path ${a} has no name.`);let s,l=o(()=>{var u;return s??(s=ip((u=this.nameProvider.getNameNode(e))!==null&&u!==void 0?u:e.$cstNode))},"nameSegmentGetter");return{node:e,name:r,get nameSegment(){return l()},selectionSegment:ip(e.$cstNode),type:e.$type,documentUri:i.uri,path:a}}},eb=class{static{o(this,"DefaultReferenceDescriptionProvider")}constructor(e){this.nodeLocator=e.workspace.AstNodeLocator}async createDescriptions(e,r=yr.CancellationToken.None){let n=[],i=e.parseResult.value;for(let a of qo(i))await bi(r),Og(a).filter(s=>!rp(s)).forEach(s=>{let l=this.createDescription(s);l&&n.push(l)});return n}createDescription(e){let r=e.reference.$nodeDescription,n=e.reference.$refNode;if(!r||!n)return;let i=Pa(e.container).uri;return{sourceUri:i,sourcePath:this.nodeLocator.getAstNodePath(e.container),targetUri:r.documentUri,targetPath:r.path,segment:ip(n),local:hs.equals(r.documentUri,i)}}}});var tb,ZM=N(()=>{"use strict";tb=class{static{o(this,"DefaultAstNodeLocator")}constructor(){this.segmentSeparator="/",this.indexSeparator="@"}getAstNodePath(e){if(e.$container){let r=this.getAstNodePath(e.$container),n=this.getPathSegment(e);return r+this.segmentSeparator+n}return""}getPathSegment({$containerProperty:e,$containerIndex:r}){if(!e)throw new Error("Missing '$containerProperty' in AST node.");return r!==void 0?e+this.indexSeparator+r:e}getAstNode(e,r){return r.split(this.segmentSeparator).reduce((i,a)=>{if(!i||a.length===0)return i;let s=a.indexOf(this.indexSeparator);if(s>0){let l=a.substring(0,s),u=parseInt(a.substring(s+1)),h=i[l];return h?.[u]}return i[a]},e)}}});var Kn={};var $E=N(()=>{"use strict";Sr(Kn,Sa(OM(),1))});var rb,JM=N(()=>{"use strict";$E();Xo();rb=class{static{o(this,"DefaultConfigurationProvider")}constructor(e){this._ready=new cs,this.settings={},this.workspaceConfig=!1,this.onConfigurationSectionUpdateEmitter=new Kn.Emitter,this.serviceRegistry=e.ServiceRegistry}get ready(){return this._ready.promise}initialize(e){var r,n;this.workspaceConfig=(n=(r=e.capabilities.workspace)===null||r===void 0?void 0:r.configuration)!==null&&n!==void 0?n:!1}async initialized(e){if(this.workspaceConfig){if(e.register){let r=this.serviceRegistry.all;e.register({section:r.map(n=>this.toSectionName(n.LanguageMetaData.languageId))})}if(e.fetchConfiguration){let r=this.serviceRegistry.all.map(i=>({section:this.toSectionName(i.LanguageMetaData.languageId)})),n=await e.fetchConfiguration(r);r.forEach((i,a)=>{this.updateSectionConfiguration(i.section,n[a])})}}this._ready.resolve()}updateConfiguration(e){e.settings&&Object.keys(e.settings).forEach(r=>{let n=e.settings[r];this.updateSectionConfiguration(r,n),this.onConfigurationSectionUpdateEmitter.fire({section:r,configuration:n})})}updateSectionConfiguration(e,r){this.settings[e]=r}async getConfiguration(e,r){await this.ready;let n=this.toSectionName(e);if(this.settings[n])return this.settings[n][r]}toSectionName(e){return`${e}`}get onConfigurationSectionUpdate(){return this.onConfigurationSectionUpdateEmitter.event}}});var gf,eI=N(()=>{"use strict";(function(t){function e(r){return{dispose:o(async()=>await r(),"dispose")}}o(e,"create"),t.create=e})(gf||(gf={}))});var nb,tI=N(()=>{"use strict";Yo();eI();b1();Xo();Fs();Qx();x1();nb=class{static{o(this,"DefaultDocumentBuilder")}constructor(e){this.updateBuildOptions={validation:{categories:["built-in","fast"]}},this.updateListeners=[],this.buildPhaseListeners=new $l,this.documentPhaseListeners=new $l,this.buildState=new Map,this.documentBuildWaiters=new Map,this.currentState=kn.Changed,this.langiumDocuments=e.workspace.LangiumDocuments,this.langiumDocumentFactory=e.workspace.LangiumDocumentFactory,this.textDocuments=e.workspace.TextDocuments,this.indexManager=e.workspace.IndexManager,this.serviceRegistry=e.ServiceRegistry}async build(e,r={},n=yr.CancellationToken.None){var i,a;for(let s of e){let l=s.uri.toString();if(s.state===kn.Validated){if(typeof r.validation=="boolean"&&r.validation)s.state=kn.IndexedReferences,s.diagnostics=void 0,this.buildState.delete(l);else if(typeof r.validation=="object"){let u=this.buildState.get(l),h=(i=u?.result)===null||i===void 0?void 0:i.validationChecks;if(h){let d=((a=r.validation.categories)!==null&&a!==void 0?a:E1.all).filter(p=>!h.includes(p));d.length>0&&(this.buildState.set(l,{completed:!1,options:{validation:Object.assign(Object.assign({},r.validation),{categories:d})},result:u.result}),s.state=kn.IndexedReferences)}}}else this.buildState.delete(l)}this.currentState=kn.Changed,await this.emitUpdate(e.map(s=>s.uri),[]),await this.buildDocuments(e,r,n)}async update(e,r,n=yr.CancellationToken.None){this.currentState=kn.Changed;for(let s of r)this.langiumDocuments.deleteDocument(s),this.buildState.delete(s.toString()),this.indexManager.remove(s);for(let s of e){if(!this.langiumDocuments.invalidateDocument(s)){let u=this.langiumDocumentFactory.fromModel({$type:"INVALID"},s);u.state=kn.Changed,this.langiumDocuments.addDocument(u)}this.buildState.delete(s.toString())}let i=en(e).concat(r).map(s=>s.toString()).toSet();this.langiumDocuments.all.filter(s=>!i.has(s.uri.toString())&&this.shouldRelink(s,i)).forEach(s=>{this.serviceRegistry.getServices(s.uri).references.Linker.unlink(s),s.state=Math.min(s.state,kn.ComputedScopes),s.diagnostics=void 0}),await this.emitUpdate(e,r),await bi(n);let a=this.sortDocuments(this.langiumDocuments.all.filter(s=>{var l;return s.staten(e,r)))}sortDocuments(e){let r=0,n=e.length-1;for(;r=0&&!this.hasTextDocument(e[n]);)n--;rn.error!==void 0)?!0:this.indexManager.isAffected(e,r)}onUpdate(e){return this.updateListeners.push(e),gf.create(()=>{let r=this.updateListeners.indexOf(e);r>=0&&this.updateListeners.splice(r,1)})}async buildDocuments(e,r,n){this.prepareBuild(e,r),await this.runCancelable(e,kn.Parsed,n,a=>this.langiumDocumentFactory.update(a,n)),await this.runCancelable(e,kn.IndexedContent,n,a=>this.indexManager.updateContent(a,n)),await this.runCancelable(e,kn.ComputedScopes,n,async a=>{let s=this.serviceRegistry.getServices(a.uri).references.ScopeComputation;a.precomputedScopes=await s.computeLocalScopes(a,n)}),await this.runCancelable(e,kn.Linked,n,a=>this.serviceRegistry.getServices(a.uri).references.Linker.link(a,n)),await this.runCancelable(e,kn.IndexedReferences,n,a=>this.indexManager.updateReferences(a,n));let i=e.filter(a=>this.shouldValidate(a));await this.runCancelable(i,kn.Validated,n,a=>this.validate(a,n));for(let a of e){let s=this.buildState.get(a.uri.toString());s&&(s.completed=!0)}}prepareBuild(e,r){for(let n of e){let i=n.uri.toString(),a=this.buildState.get(i);(!a||a.completed)&&this.buildState.set(i,{completed:!1,options:r,result:a?.result})}}async runCancelable(e,r,n,i){let a=e.filter(l=>l.statel.state===r);await this.notifyBuildPhase(s,r,n),this.currentState=r}onBuildPhase(e,r){return this.buildPhaseListeners.add(e,r),gf.create(()=>{this.buildPhaseListeners.delete(e,r)})}onDocumentPhase(e,r){return this.documentPhaseListeners.add(e,r),gf.create(()=>{this.documentPhaseListeners.delete(e,r)})}waitUntil(e,r,n){let i;if(r&&"path"in r?i=r:n=r,n??(n=yr.CancellationToken.None),i){let a=this.langiumDocuments.getDocument(i);if(a&&a.state>e)return Promise.resolve(i)}return this.currentState>=e?Promise.resolve(void 0):n.isCancellationRequested?Promise.reject($c):new Promise((a,s)=>{let l=this.onBuildPhase(e,()=>{if(l.dispose(),u.dispose(),i){let h=this.langiumDocuments.getDocument(i);a(h?.uri)}else a(void 0)}),u=n.onCancellationRequested(()=>{l.dispose(),u.dispose(),s($c)})})}async notifyDocumentPhase(e,r,n){let a=this.documentPhaseListeners.get(r).slice();for(let s of a)try{await s(e,n)}catch(l){if(!zc(l))throw l}}async notifyBuildPhase(e,r,n){if(e.length===0)return;let a=this.buildPhaseListeners.get(r).slice();for(let s of a)await bi(n),await s(e,n)}shouldValidate(e){return!!this.getBuildOptions(e).validation}async validate(e,r){var n,i;let a=this.serviceRegistry.getServices(e.uri).validation.DocumentValidator,s=this.getBuildOptions(e).validation,l=typeof s=="object"?s:void 0,u=await a.validateDocument(e,l,r);e.diagnostics?e.diagnostics.push(...u):e.diagnostics=u;let h=this.buildState.get(e.uri.toString());if(h){(n=h.result)!==null&&n!==void 0||(h.result={});let f=(i=l?.categories)!==null&&i!==void 0?i:E1.all;h.result.validationChecks?h.result.validationChecks.push(...f):h.result.validationChecks=[...f]}}getBuildOptions(e){var r,n;return(n=(r=this.buildState.get(e.uri.toString()))===null||r===void 0?void 0:r.options)!==null&&n!==void 0?n:{}}}});var ib,rI=N(()=>{"use strict";is();PE();Yo();Fs();Gc();ib=class{static{o(this,"DefaultIndexManager")}constructor(e){this.symbolIndex=new Map,this.symbolByTypeIndex=new Cp,this.referenceIndex=new Map,this.documents=e.workspace.LangiumDocuments,this.serviceRegistry=e.ServiceRegistry,this.astReflection=e.AstReflection}findAllReferences(e,r){let n=Pa(e).uri,i=[];return this.referenceIndex.forEach(a=>{a.forEach(s=>{hs.equals(s.targetUri,n)&&s.targetPath===r&&i.push(s)})}),en(i)}allElements(e,r){let n=en(this.symbolIndex.keys());return r&&(n=n.filter(i=>!r||r.has(i))),n.map(i=>this.getFileDescriptions(i,e)).flat()}getFileDescriptions(e,r){var n;return r?this.symbolByTypeIndex.get(e,r,()=>{var a;return((a=this.symbolIndex.get(e))!==null&&a!==void 0?a:[]).filter(l=>this.astReflection.isSubtype(l.type,r))}):(n=this.symbolIndex.get(e))!==null&&n!==void 0?n:[]}remove(e){let r=e.toString();this.symbolIndex.delete(r),this.symbolByTypeIndex.clear(r),this.referenceIndex.delete(r)}async updateContent(e,r=yr.CancellationToken.None){let i=await this.serviceRegistry.getServices(e.uri).references.ScopeComputation.computeExports(e,r),a=e.uri.toString();this.symbolIndex.set(a,i),this.symbolByTypeIndex.clear(a)}async updateReferences(e,r=yr.CancellationToken.None){let i=await this.serviceRegistry.getServices(e.uri).workspace.ReferenceDescriptionProvider.createDescriptions(e,r);this.referenceIndex.set(e.uri.toString(),i)}isAffected(e,r){let n=this.referenceIndex.get(e.uri.toString());return n?n.some(i=>!i.local&&r.has(i.targetUri.toString())):!1}}});var ab,nI=N(()=>{"use strict";Yo();Xo();Gc();ab=class{static{o(this,"DefaultWorkspaceManager")}constructor(e){this.initialBuildOptions={},this._ready=new cs,this.serviceRegistry=e.ServiceRegistry,this.langiumDocuments=e.workspace.LangiumDocuments,this.documentBuilder=e.workspace.DocumentBuilder,this.fileSystemProvider=e.workspace.FileSystemProvider,this.mutex=e.workspace.WorkspaceLock}get ready(){return this._ready.promise}get workspaceFolders(){return this.folders}initialize(e){var r;this.folders=(r=e.workspaceFolders)!==null&&r!==void 0?r:void 0}initialized(e){return this.mutex.write(r=>{var n;return this.initializeWorkspace((n=this.folders)!==null&&n!==void 0?n:[],r)})}async initializeWorkspace(e,r=yr.CancellationToken.None){let n=await this.performStartup(e);await bi(r),await this.documentBuilder.build(n,this.initialBuildOptions,r)}async performStartup(e){let r=this.serviceRegistry.all.flatMap(a=>a.LanguageMetaData.fileExtensions),n=[],i=o(a=>{n.push(a),this.langiumDocuments.hasDocument(a.uri)||this.langiumDocuments.addDocument(a)},"collector");return await this.loadAdditionalDocuments(e,i),await Promise.all(e.map(a=>[a,this.getRootFolder(a)]).map(async a=>this.traverseFolder(...a,r,i))),this._ready.resolve(),n}loadAdditionalDocuments(e,r){return Promise.resolve()}getRootFolder(e){return us.parse(e.uri)}async traverseFolder(e,r,n,i){let a=await this.fileSystemProvider.readDirectory(r);await Promise.all(a.map(async s=>{if(this.includeEntry(e,s,n)){if(s.isDirectory)await this.traverseFolder(e,s.uri,n,i);else if(s.isFile){let l=await this.langiumDocuments.getOrCreateDocument(s.uri);i(l)}}}))}includeEntry(e,r,n){let i=hs.basename(r.uri);if(i.startsWith("."))return!1;if(r.isDirectory)return i!=="node_modules"&&i!=="out";if(r.isFile){let a=hs.extname(r.uri);return n.includes(a)}return!1}}});function GE(t){return Array.isArray(t)&&(t.length===0||"name"in t[0])}function aI(t){return t&&"modes"in t&&"defaultMode"in t}function iI(t){return!GE(t)&&!aI(t)}var sb,zE,_p,VE=N(()=>{"use strict";df();sb=class{static{o(this,"DefaultLexerErrorMessageProvider")}buildUnexpectedCharactersMessage(e,r,n,i,a){return jg.buildUnexpectedCharactersMessage(e,r,n,i,a)}buildUnableToPopLexerModeMessage(e){return jg.buildUnableToPopLexerModeMessage(e)}},zE={mode:"full"},_p=class{static{o(this,"DefaultLexer")}constructor(e){this.errorMessageProvider=e.parser.LexerErrorMessageProvider,this.tokenBuilder=e.parser.TokenBuilder;let r=this.tokenBuilder.buildTokens(e.Grammar,{caseInsensitive:e.LanguageMetaData.caseInsensitive});this.tokenTypes=this.toTokenTypeDictionary(r);let n=iI(r)?Object.values(r):r,i=e.LanguageMetaData.mode==="production";this.chevrotainLexer=new Xn(n,{positionTracking:"full",skipValidations:i,errorMessageProvider:this.errorMessageProvider})}get definition(){return this.tokenTypes}tokenize(e,r=zE){var n,i,a;let s=this.chevrotainLexer.tokenize(e);return{tokens:s.tokens,errors:s.errors,hidden:(n=s.groups.hidden)!==null&&n!==void 0?n:[],report:(a=(i=this.tokenBuilder).flushLexingReport)===null||a===void 0?void 0:a.call(i,e)}}toTokenTypeDictionary(e){if(iI(e))return e;let r=aI(e)?Object.values(e.modes).flat():e,n={};return r.forEach(i=>n[i.name]=i),n}};o(GE,"isTokenTypeArray");o(aI,"isIMultiModeLexerDefinition");o(iI,"isTokenTypeDictionary")});function lI(t,e,r){let n,i;typeof t=="string"?(i=e,n=r):(i=t.range.start,n=e),i||(i=jr.create(0,0));let a=rce(t),s=uI(n),l=gFe({lines:a,position:i,options:s});return wFe({index:0,tokens:l,position:i})}function cI(t,e){let r=uI(e),n=rce(t);if(n.length===0)return!1;let i=n[0],a=n[n.length-1],s=r.start,l=r.end;return!!s?.exec(i)&&!!l?.exec(a)}function rce(t){let e="";return typeof t=="string"?e=t:e=t.text,e.split(iN)}function gFe(t){var e,r,n;let i=[],a=t.position.line,s=t.position.character;for(let l=0;l=f.length){if(i.length>0){let m=jr.create(a,s);i.push({type:"break",content:"",range:Pr.create(m,m)})}}else{ece.lastIndex=d;let m=ece.exec(f);if(m){let g=m[0],y=m[1],v=jr.create(a,s+d),x=jr.create(a,s+d+g.length);i.push({type:"tag",content:y,range:Pr.create(v,x)}),d+=g.length,d=oI(f,d)}if(d0&&i[i.length-1].type==="break"?i.slice(0,-1):i}function yFe(t,e,r,n){let i=[];if(t.length===0){let a=jr.create(r,n),s=jr.create(r,n+e.length);i.push({type:"text",content:e,range:Pr.create(a,s)})}else{let a=0;for(let l of t){let u=l.index,h=e.substring(a,u);h.length>0&&i.push({type:"text",content:e.substring(a,u),range:Pr.create(jr.create(r,a+n),jr.create(r,u+n))});let f=h.length+1,d=l[1];if(i.push({type:"inline-tag",content:d,range:Pr.create(jr.create(r,a+f+n),jr.create(r,a+f+d.length+n))}),f+=d.length,l.length===4){f+=l[2].length;let p=l[3];i.push({type:"text",content:p,range:Pr.create(jr.create(r,a+f+n),jr.create(r,a+f+p.length+n))})}else i.push({type:"text",content:"",range:Pr.create(jr.create(r,a+f+n),jr.create(r,a+f+n))});a=u+l[0].length}let s=e.substring(a);s.length>0&&i.push({type:"text",content:s,range:Pr.create(jr.create(r,a+n),jr.create(r,a+n+s.length))})}return i}function oI(t,e){let r=t.substring(e).match(vFe);return r?e+r.index:t.length}function bFe(t){let e=t.match(xFe);if(e&&typeof e.index=="number")return e.index}function wFe(t){var e,r,n,i;let a=jr.create(t.position.line,t.position.character);if(t.tokens.length===0)return new UE([],Pr.create(a,a));let s=[];for(;t.index0){let u=oI(e,a);s=e.substring(u),e=e.substring(0,a)}return(t==="linkcode"||t==="link"&&r.link==="code")&&(s=`\`${s}\``),(i=(n=r.renderLink)===null||n===void 0?void 0:n.call(r,e,s))!==null&&i!==void 0?i:CFe(e,s)}}function CFe(t,e){try{return us.parse(t,!0),`[${e}](${t})`}catch{return t}}function tce(t){return t.endsWith(` +`&&i++}n&&r.length>0&&e.push(r.length),this._lineOffsets=e}return this._lineOffsets}positionAt(e){e=Math.max(Math.min(e,this._content.length),0);let r=this.getLineOffsets(),n=0,i=r.length;if(i===0)return jr.create(0,e);for(;ne?i=s:n=s+1}let a=n-1;return jr.create(a,e-r[a])}offsetAt(e){let r=this.getLineOffsets();if(e.line>=r.length)return this._content.length;if(e.line<0)return 0;let n=r[e.line],i=e.line+1"u"}o(n,"undefined"),t.undefined=n;function i(m){return m===!0||m===!1}o(i,"boolean"),t.boolean=i;function a(m){return e.call(m)==="[object String]"}o(a,"string"),t.string=a;function s(m){return e.call(m)==="[object Number]"}o(s,"number"),t.number=s;function l(m,g,y){return e.call(m)==="[object Number]"&&g<=m&&m<=y}o(l,"numberRange"),t.numberRange=l;function u(m){return e.call(m)==="[object Number]"&&-2147483648<=m&&m<=2147483647}o(u,"integer"),t.integer=u;function h(m){return e.call(m)==="[object Number]"&&0<=m&&m<=2147483647}o(h,"uinteger"),t.uinteger=h;function f(m){return e.call(m)==="[object Function]"}o(f,"func"),t.func=f;function d(m){return m!==null&&typeof m=="object"}o(d,"objectLiteral"),t.objectLiteral=d;function p(m,g){return Array.isArray(m)&&m.every(g)}o(p,"typedArray"),t.typedArray=p})($e||($e={}))});var Ox,Px,Ep,Sp,JM,p1,RE=N(()=>{"use strict";ZM();Ol();Ox=class{static{o(this,"CstNodeBuilder")}constructor(){this.nodeStack=[]}get current(){var e;return(e=this.nodeStack[this.nodeStack.length-1])!==null&&e!==void 0?e:this.rootNode}buildRootNode(e){return this.rootNode=new p1(e),this.rootNode.root=this.rootNode,this.nodeStack=[this.rootNode],this.rootNode}buildCompositeNode(e){let r=new Sp;return r.grammarSource=e,r.root=this.rootNode,this.current.content.push(r),this.nodeStack.push(r),r}buildLeafNode(e,r){let n=new Ep(e.startOffset,e.image.length,Km(e),e.tokenType,!r);return n.grammarSource=r,n.root=this.rootNode,this.current.content.push(n),n}removeNode(e){let r=e.container;if(r){let n=r.content.indexOf(e);n>=0&&r.content.splice(n,1)}}addHiddenNodes(e){let r=[];for(let a of e){let s=new Ep(a.startOffset,a.image.length,Km(a),a.tokenType,!0);s.root=this.rootNode,r.push(s)}let n=this.current,i=!1;if(n.content.length>0){n.content.push(...r);return}for(;n.container;){let a=n.container.content.indexOf(n);if(a>0){n.container.content.splice(a,0,...r),i=!0;break}n=n.container}i||this.rootNode.content.unshift(...r)}construct(e){let r=this.current;typeof e.$type=="string"&&(this.current.astNode=e),e.$cstNode=r;let n=this.nodeStack.pop();n?.content.length===0&&this.removeNode(n)}},Px=class{static{o(this,"AbstractCstNode")}get parent(){return this.container}get feature(){return this.grammarSource}get hidden(){return!1}get astNode(){var e,r;let n=typeof((e=this._astNode)===null||e===void 0?void 0:e.$type)=="string"?this._astNode:(r=this.container)===null||r===void 0?void 0:r.astNode;if(!n)throw new Error("This node has no associated AST element");return n}set astNode(e){this._astNode=e}get element(){return this.astNode}get text(){return this.root.fullText.substring(this.offset,this.end)}},Ep=class extends Px{static{o(this,"LeafCstNodeImpl")}get offset(){return this._offset}get length(){return this._length}get end(){return this._offset+this._length}get hidden(){return this._hidden}get tokenType(){return this._tokenType}get range(){return this._range}constructor(e,r,n,i,a=!1){super(),this._hidden=a,this._offset=e,this._tokenType=i,this._length=r,this._range=n}},Sp=class extends Px{static{o(this,"CompositeCstNodeImpl")}constructor(){super(...arguments),this.content=new JM(this)}get children(){return this.content}get offset(){var e,r;return(r=(e=this.firstNonHiddenNode)===null||e===void 0?void 0:e.offset)!==null&&r!==void 0?r:0}get length(){return this.end-this.offset}get end(){var e,r;return(r=(e=this.lastNonHiddenNode)===null||e===void 0?void 0:e.end)!==null&&r!==void 0?r:0}get range(){let e=this.firstNonHiddenNode,r=this.lastNonHiddenNode;if(e&&r){if(this._rangeCache===void 0){let{range:n}=e,{range:i}=r;this._rangeCache={start:n.start,end:i.end.line=0;e--){let r=this.content[e];if(!r.hidden)return r}return this.content[this.content.length-1]}},JM=class t extends Array{static{o(this,"CstNodeContainer")}constructor(e){super(),this.parent=e,Object.setPrototypeOf(this,t.prototype)}push(...e){return this.addParents(e),super.push(...e)}unshift(...e){return this.addParents(e),super.unshift(...e)}splice(e,r,...n){return this.addParents(n),super.splice(e,r,...n)}addParents(e){for(let r of e)r.container=this.parent}},p1=class extends Sp{static{o(this,"RootCstNodeImpl")}get text(){return this._text.substring(this.offset,this.end)}get fullText(){return this._text}constructor(e){super(),this._text="",this._text=e??""}}});function eI(t){return t.$type===NE}var NE,Uce,Hce,Bx,Fx,ME,m1,$x,C$e,tI,zx=N(()=>{"use strict";mf();Gle();Pc();Fl();cs();RE();NE=Symbol("Datatype");o(eI,"isDataTypeNode");Uce="\u200B",Hce=o(t=>t.endsWith(Uce)?t:t+Uce,"withRuleSuffix"),Bx=class{static{o(this,"AbstractLangiumParser")}constructor(e){this._unorderedGroups=new Map,this.allRules=new Map,this.lexer=e.parser.Lexer;let r=this.lexer.definition,n=e.LanguageMetaData.mode==="production";this.wrapper=new tI(r,Object.assign(Object.assign({},e.parser.ParserConfig),{skipValidations:n,errorMessageProvider:e.parser.ParserErrorMessageProvider}))}alternatives(e,r){this.wrapper.wrapOr(e,r)}optional(e,r){this.wrapper.wrapOption(e,r)}many(e,r){this.wrapper.wrapMany(e,r)}atLeastOne(e,r){this.wrapper.wrapAtLeastOne(e,r)}getRule(e){return this.allRules.get(e)}isRecording(){return this.wrapper.IS_RECORDING}get unorderedGroups(){return this._unorderedGroups}getRuleStack(){return this.wrapper.RULE_STACK}finalize(){this.wrapper.wrapSelfAnalysis()}},Fx=class extends Bx{static{o(this,"LangiumParser")}get current(){return this.stack[this.stack.length-1]}constructor(e){super(e),this.nodeBuilder=new Ox,this.stack=[],this.assignmentMap=new Map,this.linker=e.references.Linker,this.converter=e.parser.ValueConverter,this.astReflection=e.shared.AstReflection}rule(e,r){let n=this.computeRuleType(e),i=this.wrapper.DEFINE_RULE(Hce(e.name),this.startImplementation(n,r).bind(this));return this.allRules.set(e.name,i),e.entry&&(this.mainRule=i),i}computeRuleType(e){if(!e.fragment){if(lx(e))return NE;{let r=zg(e);return r??e.name}}}parse(e,r={}){this.nodeBuilder.buildRootNode(e);let n=this.lexerResult=this.lexer.tokenize(e);this.wrapper.input=n.tokens;let i=r.rule?this.allRules.get(r.rule):this.mainRule;if(!i)throw new Error(r.rule?`No rule found with name '${r.rule}'`:"No main rule available.");let a=i.call(this.wrapper,{});return this.nodeBuilder.addHiddenNodes(n.hidden),this.unorderedGroups.clear(),this.lexerResult=void 0,{value:a,lexerErrors:n.errors,lexerReport:n.report,parserErrors:this.wrapper.errors}}startImplementation(e,r){return n=>{let i=!this.isRecording()&&e!==void 0;if(i){let s={$type:e};this.stack.push(s),e===NE&&(s.value="")}let a;try{a=r(n)}catch{a=void 0}return a===void 0&&i&&(a=this.construct()),a}}extractHiddenTokens(e){let r=this.lexerResult.hidden;if(!r.length)return[];let n=e.startOffset;for(let i=0;in)return r.splice(0,i);return r.splice(0,r.length)}consume(e,r,n){let i=this.wrapper.wrapConsume(e,r);if(!this.isRecording()&&this.isValidToken(i)){let a=this.extractHiddenTokens(i);this.nodeBuilder.addHiddenNodes(a);let s=this.nodeBuilder.buildLeafNode(i,n),{assignment:l,isCrossRef:u}=this.getAssignment(n),h=this.current;if(l){let f=Xo(n)?i.image:this.converter.convert(i.image,s);this.assign(l.operator,l.feature,f,s,u)}else if(eI(h)){let f=i.image;Xo(n)||(f=this.converter.convert(f,s).toString()),h.value+=f}}}isValidToken(e){return!e.isInsertedInRecovery&&!isNaN(e.startOffset)&&typeof e.endOffset=="number"&&!isNaN(e.endOffset)}subrule(e,r,n,i,a){let s;!this.isRecording()&&!n&&(s=this.nodeBuilder.buildCompositeNode(i));let l=this.wrapper.wrapSubrule(e,r,a);!this.isRecording()&&s&&s.length>0&&this.performSubruleAssignment(l,i,s)}performSubruleAssignment(e,r,n){let{assignment:i,isCrossRef:a}=this.getAssignment(r);if(i)this.assign(i.operator,i.feature,e,n,a);else if(!i){let s=this.current;if(eI(s))s.value+=e.toString();else if(typeof e=="object"&&e){let u=this.assignWithoutOverride(e,s);this.stack.pop(),this.stack.push(u)}}}action(e,r){if(!this.isRecording()){let n=this.current;if(r.feature&&r.operator){n=this.construct(),this.nodeBuilder.removeNode(n.$cstNode),this.nodeBuilder.buildCompositeNode(r).content.push(n.$cstNode);let a={$type:e};this.stack.push(a),this.assign(r.operator,r.feature,n,n.$cstNode,!1)}else n.$type=e}}construct(){if(this.isRecording())return;let e=this.current;return Mk(e),this.nodeBuilder.construct(e),this.stack.pop(),eI(e)?this.converter.convert(e.value,e.$cstNode):(RN(this.astReflection,e),e)}getAssignment(e){if(!this.assignmentMap.has(e)){let r=hp(e,Pl);this.assignmentMap.set(e,{assignment:r,isCrossRef:r?up(r.terminal):!1})}return this.assignmentMap.get(e)}assign(e,r,n,i,a){let s=this.current,l;switch(a&&typeof n=="string"?l=this.linker.buildReference(s,r,i,n):l=n,e){case"=":{s[r]=l;break}case"?=":{s[r]=!0;break}case"+=":Array.isArray(s[r])||(s[r]=[]),s[r].push(l)}}assignWithoutOverride(e,r){for(let[i,a]of Object.entries(r)){let s=e[i];s===void 0?e[i]=a:Array.isArray(s)&&Array.isArray(a)&&(a.push(...s),e[i]=a)}let n=e.$cstNode;return n&&(n.astNode=void 0,e.$cstNode=void 0),e}get definitionErrors(){return this.wrapper.definitionErrors}},ME=class{static{o(this,"AbstractParserErrorMessageProvider")}buildMismatchTokenMessage(e){return qu.buildMismatchTokenMessage(e)}buildNotAllInputParsedMessage(e){return qu.buildNotAllInputParsedMessage(e)}buildNoViableAltMessage(e){return qu.buildNoViableAltMessage(e)}buildEarlyExitMessage(e){return qu.buildEarlyExitMessage(e)}},m1=class extends ME{static{o(this,"LangiumParserErrorMessageProvider")}buildMismatchTokenMessage({expected:e,actual:r}){return`Expecting ${e.LABEL?"`"+e.LABEL+"`":e.name.endsWith(":KW")?`keyword '${e.name.substring(0,e.name.length-3)}'`:`token of type '${e.name}'`} but found \`${r.image}\`.`}buildNotAllInputParsedMessage({firstRedundant:e}){return`Expecting end of file but found \`${e.image}\`.`}},$x=class extends Bx{static{o(this,"LangiumCompletionParser")}constructor(){super(...arguments),this.tokens=[],this.elementStack=[],this.lastElementStack=[],this.nextTokenIndex=0,this.stackSize=0}action(){}construct(){}parse(e){this.resetState();let r=this.lexer.tokenize(e,{mode:"partial"});return this.tokens=r.tokens,this.wrapper.input=[...this.tokens],this.mainRule.call(this.wrapper,{}),this.unorderedGroups.clear(),{tokens:this.tokens,elementStack:[...this.lastElementStack],tokenIndex:this.nextTokenIndex}}rule(e,r){let n=this.wrapper.DEFINE_RULE(Hce(e.name),this.startImplementation(r).bind(this));return this.allRules.set(e.name,n),e.entry&&(this.mainRule=n),n}resetState(){this.elementStack=[],this.lastElementStack=[],this.nextTokenIndex=0,this.stackSize=0}startImplementation(e){return r=>{let n=this.keepStackSize();try{e(r)}finally{this.resetStackSize(n)}}}removeUnexpectedElements(){this.elementStack.splice(this.stackSize)}keepStackSize(){let e=this.elementStack.length;return this.stackSize=e,e}resetStackSize(e){this.removeUnexpectedElements(),this.stackSize=e}consume(e,r,n){this.wrapper.wrapConsume(e,r),this.isRecording()||(this.lastElementStack=[...this.elementStack,n],this.nextTokenIndex=this.currIdx+1)}subrule(e,r,n,i,a){this.before(i),this.wrapper.wrapSubrule(e,r,a),this.after(i)}before(e){this.isRecording()||this.elementStack.push(e)}after(e){if(!this.isRecording()){let r=this.elementStack.lastIndexOf(e);r>=0&&this.elementStack.splice(r)}}get currIdx(){return this.wrapper.currIdx}},C$e={recoveryEnabled:!0,nodeLocationTracking:"full",skipValidations:!0,errorMessageProvider:new m1},tI=class extends Dx{static{o(this,"ChevrotainWrapper")}constructor(e,r){let n=r&&"maxLookahead"in r;super(e,Object.assign(Object.assign(Object.assign({},C$e),{lookaheadStrategy:n?new Yu({maxLookahead:r.maxLookahead}):new Mx({logging:r.skipValidations?()=>{}:void 0})}),r))}get IS_RECORDING(){return this.RECORDING_PHASE}DEFINE_RULE(e,r){return this.RULE(e,r)}wrapSelfAnalysis(){this.performSelfAnalysis()}wrapConsume(e,r){return this.consume(e,r)}wrapSubrule(e,r,n){return this.subrule(e,r,{ARGS:[n]})}wrapOr(e,r){this.or(e,r)}wrapOption(e,r){this.option(e,r)}wrapMany(e,r){this.many(e,r)}wrapAtLeastOne(e,r){this.atLeastOne(e,r)}}});function Gx(t,e,r){return A$e({parser:e,tokens:r,ruleNames:new Map},t),e}function A$e(t,e){let r=sx(e,!1),n=en(e.rules).filter(Fa).filter(i=>r.has(i));for(let i of n){let a=Object.assign(Object.assign({},t),{consume:1,optional:1,subrule:1,many:1,or:1});t.parser.rule(i,Cp(a,i.definition))}}function Cp(t,e,r=!1){let n;if(Xo(e))n=I$e(t,e);else if($u(e))n=_$e(t,e);else if(Pl(e))n=Cp(t,e.terminal);else if(up(e))n=Wce(t,e);else if(Bl(e))n=D$e(t,e);else if(Lk(e))n=R$e(t,e);else if(Nk(e))n=N$e(t,e);else if(ff(e))n=M$e(t,e);else if(wN(e)){let i=t.consume++;n=o(()=>t.parser.consume(i,fo,e),"method")}else throw new lp(e.$cstNode,`Unexpected element type: ${e.$type}`);return qce(t,r?void 0:IE(e),n,e.cardinality)}function _$e(t,e){let r=cx(e);return()=>t.parser.action(r,e)}function D$e(t,e){let r=e.rule.ref;if(Fa(r)){let n=t.subrule++,i=r.fragment,a=e.arguments.length>0?L$e(r,e.arguments):()=>({});return s=>t.parser.subrule(n,Yce(t,r),i,e,a(s))}else if(uo(r)){let n=t.consume++,i=rI(t,r.name);return()=>t.parser.consume(n,i,e)}else if(r)Oc(r);else throw new lp(e.$cstNode,`Undefined rule: ${e.rule.$refText}`)}function L$e(t,e){let r=e.map(n=>Xu(n.value));return n=>{let i={};for(let a=0;ae(n)||r(n)}else if(pN(t)){let e=Xu(t.left),r=Xu(t.right);return n=>e(n)&&r(n)}else if(gN(t)){let e=Xu(t.value);return r=>!e(r)}else if(yN(t)){let e=t.parameter.ref.name;return r=>r!==void 0&&r[e]===!0}else if(dN(t)){let e=!!t.true;return()=>e}Oc(t)}function R$e(t,e){if(e.elements.length===1)return Cp(t,e.elements[0]);{let r=[];for(let i of e.elements){let a={ALT:Cp(t,i,!0)},s=IE(i);s&&(a.GATE=Xu(s)),r.push(a)}let n=t.or++;return i=>t.parser.alternatives(n,r.map(a=>{let s={ALT:o(()=>a.ALT(i),"ALT")},l=a.GATE;return l&&(s.GATE=()=>l(i)),s}))}}function N$e(t,e){if(e.elements.length===1)return Cp(t,e.elements[0]);let r=[];for(let l of e.elements){let u={ALT:Cp(t,l,!0)},h=IE(l);h&&(u.GATE=Xu(h)),r.push(u)}let n=t.or++,i=o((l,u)=>{let h=u.getRuleStack().join("-");return`uGroup_${l}_${h}`},"idFunc"),a=o(l=>t.parser.alternatives(n,r.map((u,h)=>{let f={ALT:o(()=>!0,"ALT")},d=t.parser;f.ALT=()=>{if(u.ALT(l),!d.isRecording()){let m=i(n,d);d.unorderedGroups.get(m)||d.unorderedGroups.set(m,[]);let g=d.unorderedGroups.get(m);typeof g?.[h]>"u"&&(g[h]=!0)}};let p=u.GATE;return p?f.GATE=()=>p(l):f.GATE=()=>{let m=d.unorderedGroups.get(i(n,d));return!m?.[h]},f})),"alternatives"),s=qce(t,IE(e),a,"*");return l=>{s(l),t.parser.isRecording()||t.parser.unorderedGroups.delete(i(n,t.parser))}}function M$e(t,e){let r=e.elements.map(n=>Cp(t,n));return n=>r.forEach(i=>i(n))}function IE(t){if(ff(t))return t.guardCondition}function Wce(t,e,r=e.terminal){if(r)if(Bl(r)&&Fa(r.rule.ref)){let n=r.rule.ref,i=t.subrule++;return a=>t.parser.subrule(i,Yce(t,n),!1,e,a)}else if(Bl(r)&&uo(r.rule.ref)){let n=t.consume++,i=rI(t,r.rule.ref.name);return()=>t.parser.consume(n,i,e)}else if(Xo(r)){let n=t.consume++,i=rI(t,r.value);return()=>t.parser.consume(n,i,e)}else throw new Error("Could not build cross reference parser");else{if(!e.type.ref)throw new Error("Could not resolve reference to type: "+e.type.$refText);let n=Fk(e.type.ref),i=n?.terminal;if(!i)throw new Error("Could not find name assignment for type: "+cx(e.type.ref));return Wce(t,e,i)}}function I$e(t,e){let r=t.consume++,n=t.tokens[e.value];if(!n)throw new Error("Could not find token for keyword: "+e.value);return()=>t.parser.consume(r,n,e)}function qce(t,e,r,n){let i=e&&Xu(e);if(!n)if(i){let a=t.or++;return s=>t.parser.alternatives(a,[{ALT:o(()=>r(s),"ALT"),GATE:o(()=>i(s),"GATE")},{ALT:kE(),GATE:o(()=>!i(s),"GATE")}])}else return r;if(n==="*"){let a=t.many++;return s=>t.parser.many(a,{DEF:o(()=>r(s),"DEF"),GATE:i?()=>i(s):void 0})}else if(n==="+"){let a=t.many++;if(i){let s=t.or++;return l=>t.parser.alternatives(s,[{ALT:o(()=>t.parser.atLeastOne(a,{DEF:o(()=>r(l),"DEF")}),"ALT"),GATE:o(()=>i(l),"GATE")},{ALT:kE(),GATE:o(()=>!i(l),"GATE")}])}else return s=>t.parser.atLeastOne(a,{DEF:o(()=>r(s),"DEF")})}else if(n==="?"){let a=t.optional++;return s=>t.parser.optional(a,{DEF:o(()=>r(s),"DEF"),GATE:i?()=>i(s):void 0})}else Oc(n)}function Yce(t,e){let r=O$e(t,e),n=t.parser.getRule(r);if(!n)throw new Error(`Rule "${r}" not found."`);return n}function O$e(t,e){if(Fa(e))return e.name;if(t.ruleNames.has(e))return t.ruleNames.get(e);{let r=e,n=r.$container,i=e.$type;for(;!Fa(n);)(ff(n)||Lk(n)||Nk(n))&&(i=n.elements.indexOf(r).toString()+":"+i),r=n,n=n.$container;return i=n.name+":"+i,t.ruleNames.set(e,i),i}}function rI(t,e){let r=t.tokens[e];if(!r)throw new Error(`Token "${e}" not found."`);return r}var OE=N(()=>{"use strict";mf();Pc();Sk();Gs();Fl();o(Gx,"createParser");o(A$e,"buildRules");o(Cp,"buildElement");o(_$e,"buildAction");o(D$e,"buildRuleCall");o(L$e,"buildRuleCallPredicate");o(Xu,"buildPredicate");o(R$e,"buildAlternatives");o(N$e,"buildUnorderedGroup");o(M$e,"buildGroup");o(IE,"getGuardCondition");o(Wce,"buildCrossReference");o(I$e,"buildKeyword");o(qce,"wrap");o(Yce,"getRule");o(O$e,"getRuleName");o(rI,"getToken")});function nI(t){let e=t.Grammar,r=t.parser.Lexer,n=new $x(t);return Gx(e,n,r.definition),n.finalize(),n}var iI=N(()=>{"use strict";zx();OE();o(nI,"createCompletionParser")});function aI(t){let e=Xce(t);return e.finalize(),e}function Xce(t){let e=t.Grammar,r=t.parser.Lexer,n=new Fx(t);return Gx(e,n,r.definition)}var sI=N(()=>{"use strict";zx();OE();o(aI,"createLangiumParser");o(Xce,"prepareLangiumParser")});var ju,PE=N(()=>{"use strict";mf();Pc();cs();Fl();$g();Gs();ju=class{static{o(this,"DefaultTokenBuilder")}constructor(){this.diagnostics=[]}buildTokens(e,r){let n=en(sx(e,!1)),i=this.buildTerminalTokens(n),a=this.buildKeywordTokens(n,i,r);return i.forEach(s=>{let l=s.PATTERN;typeof l=="object"&&l&&"test"in l&&Fg(l)?a.unshift(s):a.push(s)}),a}flushLexingReport(e){return{diagnostics:this.popDiagnostics()}}popDiagnostics(){let e=[...this.diagnostics];return this.diagnostics=[],e}buildTerminalTokens(e){return e.filter(uo).filter(r=>!r.fragment).map(r=>this.buildTerminalToken(r)).toArray()}buildTerminalToken(e){let r=Gg(e),n=this.requiresCustomPattern(r)?this.regexPatternFunction(r):r,i={name:e.name,PATTERN:n};return typeof n=="function"&&(i.LINE_BREAKS=!0),e.hidden&&(i.GROUP=Fg(r)?Kn.SKIPPED:"hidden"),i}requiresCustomPattern(e){return e.flags.includes("u")||e.flags.includes("s")?!0:!!(e.source.includes("?<=")||e.source.includes("?(r.lastIndex=i,r.exec(n))}buildKeywordTokens(e,r,n){return e.filter(Fa).flatMap(i=>Bc(i).filter(Xo)).distinct(i=>i.value).toArray().sort((i,a)=>a.value.length-i.value.length).map(i=>this.buildKeywordToken(i,r,!!n?.caseInsensitive))}buildKeywordToken(e,r,n){let i=this.buildKeywordPattern(e,n),a={name:e.value,PATTERN:i,LONGER_ALT:this.findLongerAlt(e,r)};return typeof i=="function"&&(a.LINE_BREAKS=!0),a}buildKeywordPattern(e,r){return r?new RegExp(FN(e.value)):e.value}findLongerAlt(e,r){return r.reduce((n,i)=>{let a=i?.PATTERN;return a?.source&&$N("^"+a.source+"$",e.value)&&n.push(i),n},[])}}});var Ap,zc,oI=N(()=>{"use strict";Pc();Fl();Ap=class{static{o(this,"DefaultValueConverter")}convert(e,r){let n=r.grammarSource;if(up(n)&&(n=VN(n)),Bl(n)){let i=n.rule.ref;if(!i)throw new Error("This cst node was not parsed by a rule.");return this.runConverter(i,e,r)}return e}runConverter(e,r,n){var i;switch(e.name.toUpperCase()){case"INT":return zc.convertInt(r);case"STRING":return zc.convertString(r);case"ID":return zc.convertID(r)}switch((i=jN(e))===null||i===void 0?void 0:i.toLowerCase()){case"number":return zc.convertNumber(r);case"boolean":return zc.convertBoolean(r);case"bigint":return zc.convertBigint(r);case"date":return zc.convertDate(r);default:return r}}};(function(t){function e(h){let f="";for(let d=1;d{"use strict";Object.defineProperty(uI,"__esModule",{value:!0});var lI;function cI(){if(lI===void 0)throw new Error("No runtime abstraction layer installed");return lI}o(cI,"RAL");(function(t){function e(r){if(r===void 0)throw new Error("No runtime abstraction layer provided");lI=r}o(e,"install"),t.install=e})(cI||(cI={}));uI.default=cI});var Qce=Pi(za=>{"use strict";Object.defineProperty(za,"__esModule",{value:!0});za.stringArray=za.array=za.func=za.error=za.number=za.string=za.boolean=void 0;function P$e(t){return t===!0||t===!1}o(P$e,"boolean");za.boolean=P$e;function jce(t){return typeof t=="string"||t instanceof String}o(jce,"string");za.string=jce;function B$e(t){return typeof t=="number"||t instanceof Number}o(B$e,"number");za.number=B$e;function F$e(t){return t instanceof Error}o(F$e,"error");za.error=F$e;function $$e(t){return typeof t=="function"}o($$e,"func");za.func=$$e;function Kce(t){return Array.isArray(t)}o(Kce,"array");za.array=Kce;function z$e(t){return Kce(t)&&t.every(e=>jce(e))}o(z$e,"stringArray");za.stringArray=z$e});var dI=Pi(g1=>{"use strict";Object.defineProperty(g1,"__esModule",{value:!0});g1.Emitter=g1.Event=void 0;var G$e=hI(),Zce;(function(t){let e={dispose(){}};t.None=function(){return e}})(Zce||(g1.Event=Zce={}));var fI=class{static{o(this,"CallbackList")}add(e,r=null,n){this._callbacks||(this._callbacks=[],this._contexts=[]),this._callbacks.push(e),this._contexts.push(r),Array.isArray(n)&&n.push({dispose:o(()=>this.remove(e,r),"dispose")})}remove(e,r=null){if(!this._callbacks)return;let n=!1;for(let i=0,a=this._callbacks.length;i{this._callbacks||(this._callbacks=new fI),this._options&&this._options.onFirstListenerAdd&&this._callbacks.isEmpty()&&this._options.onFirstListenerAdd(this),this._callbacks.add(e,r);let i={dispose:o(()=>{this._callbacks&&(this._callbacks.remove(e,r),i.dispose=t._noop,this._options&&this._options.onLastListenerRemove&&this._callbacks.isEmpty()&&this._options.onLastListenerRemove(this))},"dispose")};return Array.isArray(n)&&n.push(i),i}),this._event}fire(e){this._callbacks&&this._callbacks.invoke.call(this._callbacks,e)}dispose(){this._callbacks&&(this._callbacks.dispose(),this._callbacks=void 0)}};g1.Emitter=BE;BE._noop=function(){}});var Jce=Pi(y1=>{"use strict";Object.defineProperty(y1,"__esModule",{value:!0});y1.CancellationTokenSource=y1.CancellationToken=void 0;var V$e=hI(),U$e=Qce(),pI=dI(),FE;(function(t){t.None=Object.freeze({isCancellationRequested:!1,onCancellationRequested:pI.Event.None}),t.Cancelled=Object.freeze({isCancellationRequested:!0,onCancellationRequested:pI.Event.None});function e(r){let n=r;return n&&(n===t.None||n===t.Cancelled||U$e.boolean(n.isCancellationRequested)&&!!n.onCancellationRequested)}o(e,"is"),t.is=e})(FE||(y1.CancellationToken=FE={}));var H$e=Object.freeze(function(t,e){let r=(0,V$e.default)().timer.setTimeout(t.bind(e),0);return{dispose(){r.dispose()}}}),$E=class{static{o(this,"MutableToken")}constructor(){this._isCancelled=!1}cancel(){this._isCancelled||(this._isCancelled=!0,this._emitter&&(this._emitter.fire(void 0),this.dispose()))}get isCancellationRequested(){return this._isCancelled}get onCancellationRequested(){return this._isCancelled?H$e:(this._emitter||(this._emitter=new pI.Emitter),this._emitter.event)}dispose(){this._emitter&&(this._emitter.dispose(),this._emitter=void 0)}},mI=class{static{o(this,"CancellationTokenSource")}get token(){return this._token||(this._token=new $E),this._token}cancel(){this._token?this._token.cancel():this._token=FE.Cancelled}dispose(){this._token?this._token instanceof $E&&this._token.dispose():this._token=FE.None}};y1.CancellationTokenSource=mI});var yr={};var Ko=N(()=>{"use strict";Cr(yr,Aa(Jce(),1))});function gI(){return new Promise(t=>{typeof setImmediate>"u"?setTimeout(t,0):setImmediate(t)})}function GE(){return zE=performance.now(),new yr.CancellationTokenSource}function tue(t){eue=t}function Vc(t){return t===Gc}async function wi(t){if(t===yr.CancellationToken.None)return;let e=performance.now();if(e-zE>=eue&&(zE=e,await gI(),zE=performance.now()),t.isCancellationRequested)throw Gc}var zE,eue,Gc,ps,Qo=N(()=>{"use strict";Ko();o(gI,"delayNextTick");zE=0,eue=10;o(GE,"startCancelableOperation");o(tue,"setInterruptionPeriod");Gc=Symbol("OperationCancelled");o(Vc,"isOperationCancelled");o(wi,"interruptAndCheck");ps=class{static{o(this,"Deferred")}constructor(){this.promise=new Promise((e,r)=>{this.resolve=n=>(e(n),this),this.reject=n=>(r(n),this)})}}});function yI(t,e){if(t.length<=1)return t;let r=t.length/2|0,n=t.slice(0,r),i=t.slice(r);yI(n,e),yI(i,e);let a=0,s=0,l=0;for(;ar.line||e.line===r.line&&e.character>r.character?{start:r,end:e}:t}function W$e(t){let e=iue(t.range);return e!==t.range?{newText:t.newText,range:e}:t}var VE,v1,aue=N(()=>{"use strict";VE=class t{static{o(this,"FullTextDocument")}constructor(e,r,n,i){this._uri=e,this._languageId=r,this._version=n,this._content=i,this._lineOffsets=void 0}get uri(){return this._uri}get languageId(){return this._languageId}get version(){return this._version}getText(e){if(e){let r=this.offsetAt(e.start),n=this.offsetAt(e.end);return this._content.substring(r,n)}return this._content}update(e,r){for(let n of e)if(t.isIncremental(n)){let i=iue(n.range),a=this.offsetAt(i.start),s=this.offsetAt(i.end);this._content=this._content.substring(0,a)+n.text+this._content.substring(s,this._content.length);let l=Math.max(i.start.line,0),u=Math.max(i.end.line,0),h=this._lineOffsets,f=rue(n.text,!1,a);if(u-l===f.length)for(let p=0,m=f.length;pe?i=s:n=s+1}let a=n-1;return e=this.ensureBeforeEOL(e,r[a]),{line:a,character:e-r[a]}}offsetAt(e){let r=this.getLineOffsets();if(e.line>=r.length)return this._content.length;if(e.line<0)return 0;let n=r[e.line];if(e.character<=0)return n;let i=e.line+1r&&nue(this._content.charCodeAt(e-1));)e--;return e}get lineCount(){return this.getLineOffsets().length}static isIncremental(e){let r=e;return r!=null&&typeof r.text=="string"&&r.range!==void 0&&(r.rangeLength===void 0||typeof r.rangeLength=="number")}static isFull(e){let r=e;return r!=null&&typeof r.text=="string"&&r.range===void 0&&r.rangeLength===void 0}};(function(t){function e(i,a,s,l){return new VE(i,a,s,l)}o(e,"create"),t.create=e;function r(i,a,s){if(i instanceof VE)return i.update(a,s),i;throw new Error("TextDocument.update: document must be created by TextDocument.create")}o(r,"update"),t.update=r;function n(i,a){let s=i.getText(),l=yI(a.map(W$e),(f,d)=>{let p=f.range.start.line-d.range.start.line;return p===0?f.range.start.character-d.range.start.character:p}),u=0,h=[];for(let f of l){let d=i.offsetAt(f.range.start);if(du&&h.push(s.substring(u,d)),f.newText.length&&h.push(f.newText),u=i.offsetAt(f.range.end)}return h.push(s.substr(u)),h.join("")}o(n,"applyEdits"),t.applyEdits=n})(v1||(v1={}));o(yI,"mergeSort");o(rue,"computeLineOffsets");o(nue,"isEOL");o(iue,"getWellformedRange");o(W$e,"getWellformedEdit")});var sue,ms,x1,vI=N(()=>{"use strict";(()=>{"use strict";var t={470:i=>{function a(u){if(typeof u!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(u))}o(a,"e");function s(u,h){for(var f,d="",p=0,m=-1,g=0,y=0;y<=u.length;++y){if(y2){var v=d.lastIndexOf("/");if(v!==d.length-1){v===-1?(d="",p=0):p=(d=d.slice(0,v)).length-1-d.lastIndexOf("/"),m=y,g=0;continue}}else if(d.length===2||d.length===1){d="",p=0,m=y,g=0;continue}}h&&(d.length>0?d+="/..":d="..",p=2)}else d.length>0?d+="/"+u.slice(m+1,y):d=u.slice(m+1,y),p=y-m-1;m=y,g=0}else f===46&&g!==-1?++g:g=-1}return d}o(s,"r");var l={resolve:o(function(){for(var u,h="",f=!1,d=arguments.length-1;d>=-1&&!f;d--){var p;d>=0?p=arguments[d]:(u===void 0&&(u=process.cwd()),p=u),a(p),p.length!==0&&(h=p+"/"+h,f=p.charCodeAt(0)===47)}return h=s(h,!f),f?h.length>0?"/"+h:"/":h.length>0?h:"."},"resolve"),normalize:o(function(u){if(a(u),u.length===0)return".";var h=u.charCodeAt(0)===47,f=u.charCodeAt(u.length-1)===47;return(u=s(u,!h)).length!==0||h||(u="."),u.length>0&&f&&(u+="/"),h?"/"+u:u},"normalize"),isAbsolute:o(function(u){return a(u),u.length>0&&u.charCodeAt(0)===47},"isAbsolute"),join:o(function(){if(arguments.length===0)return".";for(var u,h=0;h0&&(u===void 0?u=f:u+="/"+f)}return u===void 0?".":l.normalize(u)},"join"),relative:o(function(u,h){if(a(u),a(h),u===h||(u=l.resolve(u))===(h=l.resolve(h)))return"";for(var f=1;fy){if(h.charCodeAt(m+x)===47)return h.slice(m+x+1);if(x===0)return h.slice(m+x)}else p>y&&(u.charCodeAt(f+x)===47?v=x:x===0&&(v=0));break}var b=u.charCodeAt(f+x);if(b!==h.charCodeAt(m+x))break;b===47&&(v=x)}var T="";for(x=f+v+1;x<=d;++x)x!==d&&u.charCodeAt(x)!==47||(T.length===0?T+="..":T+="/..");return T.length>0?T+h.slice(m+v):(m+=v,h.charCodeAt(m)===47&&++m,h.slice(m))},"relative"),_makeLong:o(function(u){return u},"_makeLong"),dirname:o(function(u){if(a(u),u.length===0)return".";for(var h=u.charCodeAt(0),f=h===47,d=-1,p=!0,m=u.length-1;m>=1;--m)if((h=u.charCodeAt(m))===47){if(!p){d=m;break}}else p=!1;return d===-1?f?"/":".":f&&d===1?"//":u.slice(0,d)},"dirname"),basename:o(function(u,h){if(h!==void 0&&typeof h!="string")throw new TypeError('"ext" argument must be a string');a(u);var f,d=0,p=-1,m=!0;if(h!==void 0&&h.length>0&&h.length<=u.length){if(h.length===u.length&&h===u)return"";var g=h.length-1,y=-1;for(f=u.length-1;f>=0;--f){var v=u.charCodeAt(f);if(v===47){if(!m){d=f+1;break}}else y===-1&&(m=!1,y=f+1),g>=0&&(v===h.charCodeAt(g)?--g==-1&&(p=f):(g=-1,p=y))}return d===p?p=y:p===-1&&(p=u.length),u.slice(d,p)}for(f=u.length-1;f>=0;--f)if(u.charCodeAt(f)===47){if(!m){d=f+1;break}}else p===-1&&(m=!1,p=f+1);return p===-1?"":u.slice(d,p)},"basename"),extname:o(function(u){a(u);for(var h=-1,f=0,d=-1,p=!0,m=0,g=u.length-1;g>=0;--g){var y=u.charCodeAt(g);if(y!==47)d===-1&&(p=!1,d=g+1),y===46?h===-1?h=g:m!==1&&(m=1):h!==-1&&(m=-1);else if(!p){f=g+1;break}}return h===-1||d===-1||m===0||m===1&&h===d-1&&h===f+1?"":u.slice(h,d)},"extname"),format:o(function(u){if(u===null||typeof u!="object")throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof u);return function(h,f){var d=f.dir||f.root,p=f.base||(f.name||"")+(f.ext||"");return d?d===f.root?d+p:d+"/"+p:p}(0,u)},"format"),parse:o(function(u){a(u);var h={root:"",dir:"",base:"",ext:"",name:""};if(u.length===0)return h;var f,d=u.charCodeAt(0),p=d===47;p?(h.root="/",f=1):f=0;for(var m=-1,g=0,y=-1,v=!0,x=u.length-1,b=0;x>=f;--x)if((d=u.charCodeAt(x))!==47)y===-1&&(v=!1,y=x+1),d===46?m===-1?m=x:b!==1&&(b=1):m!==-1&&(b=-1);else if(!v){g=x+1;break}return m===-1||y===-1||b===0||b===1&&m===y-1&&m===g+1?y!==-1&&(h.base=h.name=g===0&&p?u.slice(1,y):u.slice(g,y)):(g===0&&p?(h.name=u.slice(1,m),h.base=u.slice(1,y)):(h.name=u.slice(g,m),h.base=u.slice(g,y)),h.ext=u.slice(m,y)),g>0?h.dir=u.slice(0,g-1):p&&(h.dir="/"),h},"parse"),sep:"/",delimiter:":",win32:null,posix:null};l.posix=l,i.exports=l}},e={};function r(i){var a=e[i];if(a!==void 0)return a.exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}o(r,"r"),r.d=(i,a)=>{for(var s in a)r.o(a,s)&&!r.o(i,s)&&Object.defineProperty(i,s,{enumerable:!0,get:a[s]})},r.o=(i,a)=>Object.prototype.hasOwnProperty.call(i,a),r.r=i=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(i,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(i,"__esModule",{value:!0})};var n={};(()=>{let i;r.r(n),r.d(n,{URI:o(()=>p,"URI"),Utils:o(()=>O,"Utils")}),typeof process=="object"?i=process.platform==="win32":typeof navigator=="object"&&(i=navigator.userAgent.indexOf("Windows")>=0);let a=/^\w[\w\d+.-]*$/,s=/^\//,l=/^\/\//;function u(R,k){if(!R.scheme&&k)throw new Error(`[UriError]: Scheme is missing: {scheme: "", authority: "${R.authority}", path: "${R.path}", query: "${R.query}", fragment: "${R.fragment}"}`);if(R.scheme&&!a.test(R.scheme))throw new Error("[UriError]: Scheme contains illegal characters.");if(R.path){if(R.authority){if(!s.test(R.path))throw new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash ("/") character')}else if(l.test(R.path))throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters ("//")')}}o(u,"s");let h="",f="/",d=/^(([^:/?#]+?):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/;class p{static{o(this,"f")}static isUri(k){return k instanceof p||!!k&&typeof k.authority=="string"&&typeof k.fragment=="string"&&typeof k.path=="string"&&typeof k.query=="string"&&typeof k.scheme=="string"&&typeof k.fsPath=="string"&&typeof k.with=="function"&&typeof k.toString=="function"}scheme;authority;path;query;fragment;constructor(k,L,A,I,M,P=!1){typeof k=="object"?(this.scheme=k.scheme||h,this.authority=k.authority||h,this.path=k.path||h,this.query=k.query||h,this.fragment=k.fragment||h):(this.scheme=function(B,F){return B||F?B:"file"}(k,P),this.authority=L||h,this.path=function(B,F){switch(B){case"https":case"http":case"file":F?F[0]!==f&&(F=f+F):F=f}return F}(this.scheme,A||h),this.query=I||h,this.fragment=M||h,u(this,P))}get fsPath(){return b(this,!1)}with(k){if(!k)return this;let{scheme:L,authority:A,path:I,query:M,fragment:P}=k;return L===void 0?L=this.scheme:L===null&&(L=h),A===void 0?A=this.authority:A===null&&(A=h),I===void 0?I=this.path:I===null&&(I=h),M===void 0?M=this.query:M===null&&(M=h),P===void 0?P=this.fragment:P===null&&(P=h),L===this.scheme&&A===this.authority&&I===this.path&&M===this.query&&P===this.fragment?this:new g(L,A,I,M,P)}static parse(k,L=!1){let A=d.exec(k);return A?new g(A[2]||h,E(A[4]||h),E(A[5]||h),E(A[7]||h),E(A[9]||h),L):new g(h,h,h,h,h)}static file(k){let L=h;if(i&&(k=k.replace(/\\/g,f)),k[0]===f&&k[1]===f){let A=k.indexOf(f,2);A===-1?(L=k.substring(2),k=f):(L=k.substring(2,A),k=k.substring(A)||f)}return new g("file",L,k,h,h)}static from(k){let L=new g(k.scheme,k.authority,k.path,k.query,k.fragment);return u(L,!0),L}toString(k=!1){return T(this,k)}toJSON(){return this}static revive(k){if(k){if(k instanceof p)return k;{let L=new g(k);return L._formatted=k.external,L._fsPath=k._sep===m?k.fsPath:null,L}}return k}}let m=i?1:void 0;class g extends p{static{o(this,"l")}_formatted=null;_fsPath=null;get fsPath(){return this._fsPath||(this._fsPath=b(this,!1)),this._fsPath}toString(k=!1){return k?T(this,!0):(this._formatted||(this._formatted=T(this,!1)),this._formatted)}toJSON(){let k={$mid:1};return this._fsPath&&(k.fsPath=this._fsPath,k._sep=m),this._formatted&&(k.external=this._formatted),this.path&&(k.path=this.path),this.scheme&&(k.scheme=this.scheme),this.authority&&(k.authority=this.authority),this.query&&(k.query=this.query),this.fragment&&(k.fragment=this.fragment),k}}let y={58:"%3A",47:"%2F",63:"%3F",35:"%23",91:"%5B",93:"%5D",64:"%40",33:"%21",36:"%24",38:"%26",39:"%27",40:"%28",41:"%29",42:"%2A",43:"%2B",44:"%2C",59:"%3B",61:"%3D",32:"%20"};function v(R,k,L){let A,I=-1;for(let M=0;M=97&&P<=122||P>=65&&P<=90||P>=48&&P<=57||P===45||P===46||P===95||P===126||k&&P===47||L&&P===91||L&&P===93||L&&P===58)I!==-1&&(A+=encodeURIComponent(R.substring(I,M)),I=-1),A!==void 0&&(A+=R.charAt(M));else{A===void 0&&(A=R.substr(0,M));let B=y[P];B!==void 0?(I!==-1&&(A+=encodeURIComponent(R.substring(I,M)),I=-1),A+=B):I===-1&&(I=M)}}return I!==-1&&(A+=encodeURIComponent(R.substring(I))),A!==void 0?A:R}o(v,"d");function x(R){let k;for(let L=0;L1&&R.scheme==="file"?`//${R.authority}${R.path}`:R.path.charCodeAt(0)===47&&(R.path.charCodeAt(1)>=65&&R.path.charCodeAt(1)<=90||R.path.charCodeAt(1)>=97&&R.path.charCodeAt(1)<=122)&&R.path.charCodeAt(2)===58?k?R.path.substr(1):R.path[1].toLowerCase()+R.path.substr(2):R.path,i&&(L=L.replace(/\//g,"\\")),L}o(b,"m");function T(R,k){let L=k?x:v,A="",{scheme:I,authority:M,path:P,query:B,fragment:F}=R;if(I&&(A+=I,A+=":"),(M||I==="file")&&(A+=f,A+=f),M){let z=M.indexOf("@");if(z!==-1){let $=M.substr(0,z);M=M.substr(z+1),z=$.lastIndexOf(":"),z===-1?A+=L($,!1,!1):(A+=L($.substr(0,z),!1,!1),A+=":",A+=L($.substr(z+1),!1,!0)),A+="@"}M=M.toLowerCase(),z=M.lastIndexOf(":"),z===-1?A+=L(M,!1,!0):(A+=L(M.substr(0,z),!1,!0),A+=M.substr(z))}if(P){if(P.length>=3&&P.charCodeAt(0)===47&&P.charCodeAt(2)===58){let z=P.charCodeAt(1);z>=65&&z<=90&&(P=`/${String.fromCharCode(z+32)}:${P.substr(3)}`)}else if(P.length>=2&&P.charCodeAt(1)===58){let z=P.charCodeAt(0);z>=65&&z<=90&&(P=`${String.fromCharCode(z+32)}:${P.substr(2)}`)}A+=L(P,!0,!1)}return B&&(A+="?",A+=L(B,!1,!1)),F&&(A+="#",A+=k?F:v(F,!1,!1)),A}o(T,"y");function S(R){try{return decodeURIComponent(R)}catch{return R.length>3?R.substr(0,3)+S(R.substr(3)):R}}o(S,"v");let w=/(%[0-9A-Za-z][0-9A-Za-z])+/g;function E(R){return R.match(w)?R.replace(w,k=>S(k)):R}o(E,"C");var _=r(470);let C=_.posix||_,D="/";var O;(function(R){R.joinPath=function(k,...L){return k.with({path:C.join(k.path,...L)})},R.resolvePath=function(k,...L){let A=k.path,I=!1;A[0]!==D&&(A=D+A,I=!0);let M=C.resolve(A,...L);return I&&M[0]===D&&!k.authority&&(M=M.substring(1)),k.with({path:M})},R.dirname=function(k){if(k.path.length===0||k.path===D)return k;let L=C.dirname(k.path);return L.length===1&&L.charCodeAt(0)===46&&(L=""),k.with({path:L})},R.basename=function(k){return C.basename(k.path)},R.extname=function(k){return C.extname(k.path)}})(O||(O={}))})(),sue=n})();({URI:ms,Utils:x1}=sue)});var gs,Uc=N(()=>{"use strict";vI();(function(t){t.basename=x1.basename,t.dirname=x1.dirname,t.extname=x1.extname,t.joinPath=x1.joinPath,t.resolvePath=x1.resolvePath;function e(i,a){return i?.toString()===a?.toString()}o(e,"equals"),t.equals=e;function r(i,a){let s=typeof i=="string"?i:i.path,l=typeof a=="string"?a:a.path,u=s.split("/").filter(m=>m.length>0),h=l.split("/").filter(m=>m.length>0),f=0;for(;f{"use strict";aue();b1();Ko();Gs();Uc();(function(t){t[t.Changed=0]="Changed",t[t.Parsed=1]="Parsed",t[t.IndexedContent=2]="IndexedContent",t[t.ComputedScopes=3]="ComputedScopes",t[t.Linked=4]="Linked",t[t.IndexedReferences=5]="IndexedReferences",t[t.Validated=6]="Validated"})(kn||(kn={}));Vx=class{static{o(this,"DefaultLangiumDocumentFactory")}constructor(e){this.serviceRegistry=e.ServiceRegistry,this.textDocuments=e.workspace.TextDocuments,this.fileSystemProvider=e.workspace.FileSystemProvider}async fromUri(e,r=yr.CancellationToken.None){let n=await this.fileSystemProvider.readFile(e);return this.createAsync(e,n,r)}fromTextDocument(e,r,n){return r=r??ms.parse(e.uri),yr.CancellationToken.is(n)?this.createAsync(r,e,n):this.create(r,e,n)}fromString(e,r,n){return yr.CancellationToken.is(n)?this.createAsync(r,e,n):this.create(r,e,n)}fromModel(e,r){return this.create(r,{$model:e})}create(e,r,n){if(typeof r=="string"){let i=this.parse(e,r,n);return this.createLangiumDocument(i,e,void 0,r)}else if("$model"in r){let i={value:r.$model,parserErrors:[],lexerErrors:[]};return this.createLangiumDocument(i,e)}else{let i=this.parse(e,r.getText(),n);return this.createLangiumDocument(i,e,r)}}async createAsync(e,r,n){if(typeof r=="string"){let i=await this.parseAsync(e,r,n);return this.createLangiumDocument(i,e,void 0,r)}else{let i=await this.parseAsync(e,r.getText(),n);return this.createLangiumDocument(i,e,r)}}createLangiumDocument(e,r,n,i){let a;if(n)a={parseResult:e,uri:r,state:kn.Parsed,references:[],textDocument:n};else{let s=this.createTextDocumentGetter(r,i);a={parseResult:e,uri:r,state:kn.Parsed,references:[],get textDocument(){return s()}}}return e.value.$document=a,a}async update(e,r){var n,i;let a=(n=e.parseResult.value.$cstNode)===null||n===void 0?void 0:n.root.fullText,s=(i=this.textDocuments)===null||i===void 0?void 0:i.get(e.uri.toString()),l=s?s.getText():await this.fileSystemProvider.readFile(e.uri);if(s)Object.defineProperty(e,"textDocument",{value:s});else{let u=this.createTextDocumentGetter(e.uri,l);Object.defineProperty(e,"textDocument",{get:u})}return a!==l&&(e.parseResult=await this.parseAsync(e.uri,l,r),e.parseResult.value.$document=e),e.state=kn.Parsed,e}parse(e,r,n){return this.serviceRegistry.getServices(e).parser.LangiumParser.parse(r,n)}parseAsync(e,r,n){return this.serviceRegistry.getServices(e).parser.AsyncParser.parse(r,n)}createTextDocumentGetter(e,r){let n=this.serviceRegistry,i;return()=>i??(i=v1.create(e.toString(),n.getServices(e).LanguageMetaData.languageId,0,r??""))}},Ux=class{static{o(this,"DefaultLangiumDocuments")}constructor(e){this.documentMap=new Map,this.langiumDocumentFactory=e.workspace.LangiumDocumentFactory,this.serviceRegistry=e.ServiceRegistry}get all(){return en(this.documentMap.values())}addDocument(e){let r=e.uri.toString();if(this.documentMap.has(r))throw new Error(`A document with the URI '${r}' is already present.`);this.documentMap.set(r,e)}getDocument(e){let r=e.toString();return this.documentMap.get(r)}async getOrCreateDocument(e,r){let n=this.getDocument(e);return n||(n=await this.langiumDocumentFactory.fromUri(e,r),this.addDocument(n),n)}createDocument(e,r,n){if(n)return this.langiumDocumentFactory.fromString(r,e,n).then(i=>(this.addDocument(i),i));{let i=this.langiumDocumentFactory.fromString(r,e);return this.addDocument(i),i}}hasDocument(e){return this.documentMap.has(e.toString())}invalidateDocument(e){let r=e.toString(),n=this.documentMap.get(r);return n&&(this.serviceRegistry.getServices(e).references.Linker.unlink(n),n.state=kn.Changed,n.precomputedScopes=void 0,n.diagnostics=void 0),n}deleteDocument(e){let r=e.toString(),n=this.documentMap.get(r);return n&&(n.state=kn.Changed,this.documentMap.delete(r)),n}}});var xI,Hx,bI=N(()=>{"use strict";Ko();Il();cs();Qo();b1();xI=Symbol("ref_resolving"),Hx=class{static{o(this,"DefaultLinker")}constructor(e){this.reflection=e.shared.AstReflection,this.langiumDocuments=()=>e.shared.workspace.LangiumDocuments,this.scopeProvider=e.references.ScopeProvider,this.astNodeLocator=e.workspace.AstNodeLocator}async link(e,r=yr.CancellationToken.None){for(let n of jo(e.parseResult.value))await wi(r),Pg(n).forEach(i=>this.doLink(i,e))}doLink(e,r){var n;let i=e.reference;if(i._ref===void 0){i._ref=xI;try{let a=this.getCandidate(e);if(ap(a))i._ref=a;else if(i._nodeDescription=a,this.langiumDocuments().hasDocument(a.documentUri)){let s=this.loadAstNode(a);i._ref=s??this.createLinkingError(e,a)}else i._ref=void 0}catch(a){console.error(`An error occurred while resolving reference to '${i.$refText}':`,a);let s=(n=a.message)!==null&&n!==void 0?n:String(a);i._ref=Object.assign(Object.assign({},e),{message:`An error occurred while resolving reference to '${i.$refText}': ${s}`})}r.references.push(i)}}unlink(e){for(let r of e.references)delete r._ref,delete r._nodeDescription;e.references=[]}getCandidate(e){let n=this.scopeProvider.getScope(e).getElement(e.reference.$refText);return n??this.createLinkingError(e)}buildReference(e,r,n,i){let a=this,s={$refNode:n,$refText:i,get ref(){var l;if(si(this._ref))return this._ref;if(sN(this._nodeDescription)){let u=a.loadAstNode(this._nodeDescription);this._ref=u??a.createLinkingError({reference:s,container:e,property:r},this._nodeDescription)}else if(this._ref===void 0){this._ref=xI;let u=ex(e).$document,h=a.getLinkedNode({reference:s,container:e,property:r});if(h.error&&u&&u.state{"use strict";Fl();o(oue,"isNamed");Wx=class{static{o(this,"DefaultNameProvider")}getName(e){if(oue(e))return e.name}getNameNode(e){return ox(e.$cstNode,"name")}}});var qx,wI=N(()=>{"use strict";Fl();Il();cs();Ol();Gs();Uc();qx=class{static{o(this,"DefaultReferences")}constructor(e){this.nameProvider=e.references.NameProvider,this.index=e.shared.workspace.IndexManager,this.nodeLocator=e.workspace.AstNodeLocator}findDeclaration(e){if(e){let r=XN(e),n=e.astNode;if(r&&n){let i=n[r.feature];if(ya(i))return i.ref;if(Array.isArray(i)){for(let a of i)if(ya(a)&&a.$refNode&&a.$refNode.offset<=e.offset&&a.$refNode.end>=e.end)return a.ref}}if(n){let i=this.nameProvider.getNameNode(n);if(i&&(i===e||lN(e,i)))return n}}}findDeclarationNode(e){let r=this.findDeclaration(e);if(r?.$cstNode){let n=this.nameProvider.getNameNode(r);return n??r.$cstNode}}findReferences(e,r){let n=[];if(r.includeDeclaration){let a=this.getReferenceToSelf(e);a&&n.push(a)}let i=this.index.findAllReferences(e,this.nodeLocator.getAstNodePath(e));return r.documentUri&&(i=i.filter(a=>gs.equals(a.sourceUri,r.documentUri))),n.push(...i),en(n)}getReferenceToSelf(e){let r=this.nameProvider.getNameNode(e);if(r){let n=$a(e),i=this.nodeLocator.getAstNodePath(e);return{sourceUri:n.uri,sourcePath:i,targetUri:n.uri,targetPath:i,segment:op(r),local:!0}}}}});var zl,_p,T1=N(()=>{"use strict";Gs();zl=class{static{o(this,"MultiMap")}constructor(e){if(this.map=new Map,e)for(let[r,n]of e)this.add(r,n)}get size(){return jm.sum(en(this.map.values()).map(e=>e.length))}clear(){this.map.clear()}delete(e,r){if(r===void 0)return this.map.delete(e);{let n=this.map.get(e);if(n){let i=n.indexOf(r);if(i>=0)return n.length===1?this.map.delete(e):n.splice(i,1),!0}return!1}}get(e){var r;return(r=this.map.get(e))!==null&&r!==void 0?r:[]}has(e,r){if(r===void 0)return this.map.has(e);{let n=this.map.get(e);return n?n.indexOf(r)>=0:!1}}add(e,r){return this.map.has(e)?this.map.get(e).push(r):this.map.set(e,[r]),this}addAll(e,r){return this.map.has(e)?this.map.get(e).push(...r):this.map.set(e,Array.from(r)),this}forEach(e){this.map.forEach((r,n)=>r.forEach(i=>e(i,n,this)))}[Symbol.iterator](){return this.entries().iterator()}entries(){return en(this.map.entries()).flatMap(([e,r])=>r.map(n=>[e,n]))}keys(){return en(this.map.keys())}values(){return en(this.map.values()).flat()}entriesGroupedByKey(){return en(this.map.entries())}},_p=class{static{o(this,"BiMap")}get size(){return this.map.size}constructor(e){if(this.map=new Map,this.inverse=new Map,e)for(let[r,n]of e)this.set(r,n)}clear(){this.map.clear(),this.inverse.clear()}set(e,r){return this.map.set(e,r),this.inverse.set(r,e),this}get(e){return this.map.get(e)}getKey(e){return this.inverse.get(e)}delete(e){let r=this.map.get(e);return r!==void 0?(this.map.delete(e),this.inverse.delete(r),!0):!1}}});var Yx,kI=N(()=>{"use strict";Ko();cs();T1();Qo();Yx=class{static{o(this,"DefaultScopeComputation")}constructor(e){this.nameProvider=e.references.NameProvider,this.descriptions=e.workspace.AstNodeDescriptionProvider}async computeExports(e,r=yr.CancellationToken.None){return this.computeExportsForNode(e.parseResult.value,e,void 0,r)}async computeExportsForNode(e,r,n=tx,i=yr.CancellationToken.None){let a=[];this.exportNode(e,a,r);for(let s of n(e))await wi(i),this.exportNode(s,a,r);return a}exportNode(e,r,n){let i=this.nameProvider.getName(e);i&&r.push(this.descriptions.createDescription(e,i,n))}async computeLocalScopes(e,r=yr.CancellationToken.None){let n=e.parseResult.value,i=new zl;for(let a of Bc(n))await wi(r),this.processNode(a,e,i);return i}processNode(e,r,n){let i=e.$container;if(i){let a=this.nameProvider.getName(e);a&&n.add(i,this.descriptions.createDescription(e,a,r))}}}});var w1,Xx,q$e,EI=N(()=>{"use strict";Gs();w1=class{static{o(this,"StreamScope")}constructor(e,r,n){var i;this.elements=e,this.outerScope=r,this.caseInsensitive=(i=n?.caseInsensitive)!==null&&i!==void 0?i:!1}getAllElements(){return this.outerScope?this.elements.concat(this.outerScope.getAllElements()):this.elements}getElement(e){let r=this.caseInsensitive?this.elements.find(n=>n.name.toLowerCase()===e.toLowerCase()):this.elements.find(n=>n.name===e);if(r)return r;if(this.outerScope)return this.outerScope.getElement(e)}},Xx=class{static{o(this,"MapScope")}constructor(e,r,n){var i;this.elements=new Map,this.caseInsensitive=(i=n?.caseInsensitive)!==null&&i!==void 0?i:!1;for(let a of e){let s=this.caseInsensitive?a.name.toLowerCase():a.name;this.elements.set(s,a)}this.outerScope=r}getElement(e){let r=this.caseInsensitive?e.toLowerCase():e,n=this.elements.get(r);if(n)return n;if(this.outerScope)return this.outerScope.getElement(e)}getAllElements(){let e=en(this.elements.values());return this.outerScope&&(e=e.concat(this.outerScope.getAllElements())),e}},q$e={getElement(){},getAllElements(){return H2}}});var k1,jx,Dp,UE,E1,HE=N(()=>{"use strict";k1=class{static{o(this,"DisposableCache")}constructor(){this.toDispose=[],this.isDisposed=!1}onDispose(e){this.toDispose.push(e)}dispose(){this.throwIfDisposed(),this.clear(),this.isDisposed=!0,this.toDispose.forEach(e=>e.dispose())}throwIfDisposed(){if(this.isDisposed)throw new Error("This cache has already been disposed")}},jx=class extends k1{static{o(this,"SimpleCache")}constructor(){super(...arguments),this.cache=new Map}has(e){return this.throwIfDisposed(),this.cache.has(e)}set(e,r){this.throwIfDisposed(),this.cache.set(e,r)}get(e,r){if(this.throwIfDisposed(),this.cache.has(e))return this.cache.get(e);if(r){let n=r();return this.cache.set(e,n),n}else return}delete(e){return this.throwIfDisposed(),this.cache.delete(e)}clear(){this.throwIfDisposed(),this.cache.clear()}},Dp=class extends k1{static{o(this,"ContextCache")}constructor(e){super(),this.cache=new Map,this.converter=e??(r=>r)}has(e,r){return this.throwIfDisposed(),this.cacheForContext(e).has(r)}set(e,r,n){this.throwIfDisposed(),this.cacheForContext(e).set(r,n)}get(e,r,n){this.throwIfDisposed();let i=this.cacheForContext(e);if(i.has(r))return i.get(r);if(n){let a=n();return i.set(r,a),a}else return}delete(e,r){return this.throwIfDisposed(),this.cacheForContext(e).delete(r)}clear(e){if(this.throwIfDisposed(),e){let r=this.converter(e);this.cache.delete(r)}else this.cache.clear()}cacheForContext(e){let r=this.converter(e),n=this.cache.get(r);return n||(n=new Map,this.cache.set(r,n)),n}},UE=class extends Dp{static{o(this,"DocumentCache")}constructor(e,r){super(n=>n.toString()),r?(this.toDispose.push(e.workspace.DocumentBuilder.onDocumentPhase(r,n=>{this.clear(n.uri.toString())})),this.toDispose.push(e.workspace.DocumentBuilder.onUpdate((n,i)=>{for(let a of i)this.clear(a)}))):this.toDispose.push(e.workspace.DocumentBuilder.onUpdate((n,i)=>{let a=n.concat(i);for(let s of a)this.clear(s)}))}},E1=class extends jx{static{o(this,"WorkspaceCache")}constructor(e,r){super(),r?(this.toDispose.push(e.workspace.DocumentBuilder.onBuildPhase(r,()=>{this.clear()})),this.toDispose.push(e.workspace.DocumentBuilder.onUpdate((n,i)=>{i.length>0&&this.clear()}))):this.toDispose.push(e.workspace.DocumentBuilder.onUpdate(()=>{this.clear()}))}}});var Kx,SI=N(()=>{"use strict";EI();cs();Gs();HE();Kx=class{static{o(this,"DefaultScopeProvider")}constructor(e){this.reflection=e.shared.AstReflection,this.nameProvider=e.references.NameProvider,this.descriptions=e.workspace.AstNodeDescriptionProvider,this.indexManager=e.shared.workspace.IndexManager,this.globalScopeCache=new E1(e.shared)}getScope(e){let r=[],n=this.reflection.getReferenceType(e),i=$a(e.container).precomputedScopes;if(i){let s=e.container;do{let l=i.get(s);l.length>0&&r.push(en(l).filter(u=>this.reflection.isSubtype(u.type,n))),s=s.$container}while(s)}let a=this.getGlobalScope(n,e);for(let s=r.length-1;s>=0;s--)a=this.createScope(r[s],a);return a}createScope(e,r,n){return new w1(en(e),r,n)}createScopeForNodes(e,r,n){let i=en(e).map(a=>{let s=this.nameProvider.getName(a);if(s)return this.descriptions.createDescription(a,s)}).nonNullable();return new w1(i,r,n)}getGlobalScope(e,r){return this.globalScopeCache.get(e,()=>new Xx(this.indexManager.allElements(e)))}}});function CI(t){return typeof t.$comment=="string"}function lue(t){return typeof t=="object"&&!!t&&("$ref"in t||"$error"in t)}var Qx,WE=N(()=>{"use strict";vI();Il();cs();Fl();o(CI,"isAstNodeWithComment");o(lue,"isIntermediateReference");Qx=class{static{o(this,"DefaultJsonSerializer")}constructor(e){this.ignoreProperties=new Set(["$container","$containerProperty","$containerIndex","$document","$cstNode"]),this.langiumDocuments=e.shared.workspace.LangiumDocuments,this.astNodeLocator=e.workspace.AstNodeLocator,this.nameProvider=e.references.NameProvider,this.commentProvider=e.documentation.CommentProvider}serialize(e,r){let n=r??{},i=r?.replacer,a=o((l,u)=>this.replacer(l,u,n),"defaultReplacer"),s=i?(l,u)=>i(l,u,a):a;try{return this.currentDocument=$a(e),JSON.stringify(e,s,r?.space)}finally{this.currentDocument=void 0}}deserialize(e,r){let n=r??{},i=JSON.parse(e);return this.linkNode(i,i,n),i}replacer(e,r,{refText:n,sourceText:i,textRegions:a,comments:s,uriConverter:l}){var u,h,f,d;if(!this.ignoreProperties.has(e))if(ya(r)){let p=r.ref,m=n?r.$refText:void 0;if(p){let g=$a(p),y="";this.currentDocument&&this.currentDocument!==g&&(l?y=l(g.uri,r):y=g.uri.toString());let v=this.astNodeLocator.getAstNodePath(p);return{$ref:`${y}#${v}`,$refText:m}}else return{$error:(h=(u=r.error)===null||u===void 0?void 0:u.message)!==null&&h!==void 0?h:"Could not resolve reference",$refText:m}}else if(si(r)){let p;if(a&&(p=this.addAstNodeRegionWithAssignmentsTo(Object.assign({},r)),(!e||r.$document)&&p?.$textRegion&&(p.$textRegion.documentURI=(f=this.currentDocument)===null||f===void 0?void 0:f.uri.toString())),i&&!e&&(p??(p=Object.assign({},r)),p.$sourceText=(d=r.$cstNode)===null||d===void 0?void 0:d.text),s){p??(p=Object.assign({},r));let m=this.commentProvider.getComment(r);m&&(p.$comment=m.replace(/\r/g,""))}return p??r}else return r}addAstNodeRegionWithAssignmentsTo(e){let r=o(n=>({offset:n.offset,end:n.end,length:n.length,range:n.range}),"createDocumentSegment");if(e.$cstNode){let n=e.$textRegion=r(e.$cstNode),i=n.assignments={};return Object.keys(e).filter(a=>!a.startsWith("$")).forEach(a=>{let s=HN(e.$cstNode,a).map(r);s.length!==0&&(i[a]=s)}),e}}linkNode(e,r,n,i,a,s){for(let[u,h]of Object.entries(e))if(Array.isArray(h))for(let f=0;f{"use strict";Uc();Zx=class{static{o(this,"DefaultServiceRegistry")}get map(){return this.fileExtensionMap}constructor(e){this.languageIdMap=new Map,this.fileExtensionMap=new Map,this.textDocuments=e?.workspace.TextDocuments}register(e){let r=e.LanguageMetaData;for(let n of r.fileExtensions)this.fileExtensionMap.has(n)&&console.warn(`The file extension ${n} is used by multiple languages. It is now assigned to '${r.languageId}'.`),this.fileExtensionMap.set(n,e);this.languageIdMap.set(r.languageId,e),this.languageIdMap.size===1?this.singleton=e:this.singleton=void 0}getServices(e){var r,n;if(this.singleton!==void 0)return this.singleton;if(this.languageIdMap.size===0)throw new Error("The service registry is empty. Use `register` to register the services of a language.");let i=(n=(r=this.textDocuments)===null||r===void 0?void 0:r.get(e))===null||n===void 0?void 0:n.languageId;if(i!==void 0){let l=this.languageIdMap.get(i);if(l)return l}let a=gs.extname(e),s=this.fileExtensionMap.get(a);if(!s)throw i?new Error(`The service registry contains no services for the extension '${a}' for language '${i}'.`):new Error(`The service registry contains no services for the extension '${a}'.`);return s}hasServices(e){try{return this.getServices(e),!0}catch{return!1}}get all(){return Array.from(this.languageIdMap.values())}}});function Lp(t){return{code:t}}var S1,Jx,eb=N(()=>{"use strict";po();T1();Qo();Gs();o(Lp,"diagnosticData");(function(t){t.all=["fast","slow","built-in"]})(S1||(S1={}));Jx=class{static{o(this,"ValidationRegistry")}constructor(e){this.entries=new zl,this.entriesBefore=[],this.entriesAfter=[],this.reflection=e.shared.AstReflection}register(e,r=this,n="fast"){if(n==="built-in")throw new Error("The 'built-in' category is reserved for lexer, parser, and linker errors.");for(let[i,a]of Object.entries(e)){let s=a;if(Array.isArray(s))for(let l of s){let u={check:this.wrapValidationException(l,r),category:n};this.addEntry(i,u)}else if(typeof s=="function"){let l={check:this.wrapValidationException(s,r),category:n};this.addEntry(i,l)}else Oc(s)}}wrapValidationException(e,r){return async(n,i,a)=>{await this.handleException(()=>e.call(r,n,i,a),"An error occurred during validation",i,n)}}async handleException(e,r,n,i){try{await e()}catch(a){if(Vc(a))throw a;console.error(`${r}:`,a),a instanceof Error&&a.stack&&console.error(a.stack);let s=a instanceof Error?a.message:String(a);n("error",`${r}: ${s}`,{node:i})}}addEntry(e,r){if(e==="AstNode"){this.entries.add("AstNode",r);return}for(let n of this.reflection.getAllSubTypes(e))this.entries.add(n,r)}getChecks(e,r){let n=en(this.entries.get(e)).concat(this.entries.get("AstNode"));return r&&(n=n.filter(i=>r.includes(i.category))),n.map(i=>i.check)}registerBeforeDocument(e,r=this){this.entriesBefore.push(this.wrapPreparationException(e,"An error occurred during set-up of the validation",r))}registerAfterDocument(e,r=this){this.entriesAfter.push(this.wrapPreparationException(e,"An error occurred during tear-down of the validation",r))}wrapPreparationException(e,r,n){return async(i,a,s,l)=>{await this.handleException(()=>e.call(n,i,a,s,l),r,a,i)}}get checksBefore(){return this.entriesBefore}get checksAfter(){return this.entriesAfter}}});function cue(t){if(t.range)return t.range;let e;return typeof t.property=="string"?e=ox(t.node.$cstNode,t.property,t.index):typeof t.keyword=="string"&&(e=qN(t.node.$cstNode,t.keyword,t.index)),e??(e=t.node.$cstNode),e?e.range:{start:{line:0,character:0},end:{line:0,character:0}}}function qE(t){switch(t){case"error":return 1;case"warning":return 2;case"info":return 3;case"hint":return 4;default:throw new Error("Invalid diagnostic severity: "+t)}}function uue(t){switch(t){case"error":return Lp(Zo.LexingError);case"warning":return Lp(Zo.LexingWarning);case"info":return Lp(Zo.LexingInfo);case"hint":return Lp(Zo.LexingHint);default:throw new Error("Invalid diagnostic severity: "+t)}}var tb,Zo,_I=N(()=>{"use strict";Ko();Fl();cs();Ol();Qo();eb();tb=class{static{o(this,"DefaultDocumentValidator")}constructor(e){this.validationRegistry=e.validation.ValidationRegistry,this.metadata=e.LanguageMetaData}async validateDocument(e,r={},n=yr.CancellationToken.None){let i=e.parseResult,a=[];if(await wi(n),(!r.categories||r.categories.includes("built-in"))&&(this.processLexingErrors(i,a,r),r.stopAfterLexingErrors&&a.some(s=>{var l;return((l=s.data)===null||l===void 0?void 0:l.code)===Zo.LexingError})||(this.processParsingErrors(i,a,r),r.stopAfterParsingErrors&&a.some(s=>{var l;return((l=s.data)===null||l===void 0?void 0:l.code)===Zo.ParsingError}))||(this.processLinkingErrors(e,a,r),r.stopAfterLinkingErrors&&a.some(s=>{var l;return((l=s.data)===null||l===void 0?void 0:l.code)===Zo.LinkingError}))))return a;try{a.push(...await this.validateAst(i.value,r,n))}catch(s){if(Vc(s))throw s;console.error("An error occurred during validation:",s)}return await wi(n),a}processLexingErrors(e,r,n){var i,a,s;let l=[...e.lexerErrors,...(a=(i=e.lexerReport)===null||i===void 0?void 0:i.diagnostics)!==null&&a!==void 0?a:[]];for(let u of l){let h=(s=u.severity)!==null&&s!==void 0?s:"error",f={severity:qE(h),range:{start:{line:u.line-1,character:u.column-1},end:{line:u.line-1,character:u.column+u.length-1}},message:u.message,data:uue(h),source:this.getSource()};r.push(f)}}processParsingErrors(e,r,n){for(let i of e.parserErrors){let a;if(isNaN(i.token.startOffset)){if("previousToken"in i){let s=i.previousToken;if(isNaN(s.startOffset)){let l={line:0,character:0};a={start:l,end:l}}else{let l={line:s.endLine-1,character:s.endColumn};a={start:l,end:l}}}}else a=Km(i.token);if(a){let s={severity:qE("error"),range:a,message:i.message,data:Lp(Zo.ParsingError),source:this.getSource()};r.push(s)}}}processLinkingErrors(e,r,n){for(let i of e.references){let a=i.error;if(a){let s={node:a.container,property:a.property,index:a.index,data:{code:Zo.LinkingError,containerType:a.container.$type,property:a.property,refText:a.reference.$refText}};r.push(this.toDiagnostic("error",a.message,s))}}}async validateAst(e,r,n=yr.CancellationToken.None){let i=[],a=o((s,l,u)=>{i.push(this.toDiagnostic(s,l,u))},"acceptor");return await this.validateAstBefore(e,r,a,n),await this.validateAstNodes(e,r,a,n),await this.validateAstAfter(e,r,a,n),i}async validateAstBefore(e,r,n,i=yr.CancellationToken.None){var a;let s=this.validationRegistry.checksBefore;for(let l of s)await wi(i),await l(e,n,(a=r.categories)!==null&&a!==void 0?a:[],i)}async validateAstNodes(e,r,n,i=yr.CancellationToken.None){await Promise.all(jo(e).map(async a=>{await wi(i);let s=this.validationRegistry.getChecks(a.$type,r.categories);for(let l of s)await l(a,n,i)}))}async validateAstAfter(e,r,n,i=yr.CancellationToken.None){var a;let s=this.validationRegistry.checksAfter;for(let l of s)await wi(i),await l(e,n,(a=r.categories)!==null&&a!==void 0?a:[],i)}toDiagnostic(e,r,n){return{message:r,range:cue(n),severity:qE(e),code:n.code,codeDescription:n.codeDescription,tags:n.tags,relatedInformation:n.relatedInformation,data:n.data,source:this.getSource()}}getSource(){return this.metadata.languageId}};o(cue,"getDiagnosticRange");o(qE,"toDiagnosticSeverity");o(uue,"toDiagnosticData");(function(t){t.LexingError="lexing-error",t.LexingWarning="lexing-warning",t.LexingInfo="lexing-info",t.LexingHint="lexing-hint",t.ParsingError="parsing-error",t.LinkingError="linking-error"})(Zo||(Zo={}))});var rb,nb,DI=N(()=>{"use strict";Ko();Il();cs();Ol();Qo();Uc();rb=class{static{o(this,"DefaultAstNodeDescriptionProvider")}constructor(e){this.astNodeLocator=e.workspace.AstNodeLocator,this.nameProvider=e.references.NameProvider}createDescription(e,r,n){let i=n??$a(e);r??(r=this.nameProvider.getName(e));let a=this.astNodeLocator.getAstNodePath(e);if(!r)throw new Error(`Node at path ${a} has no name.`);let s,l=o(()=>{var u;return s??(s=op((u=this.nameProvider.getNameNode(e))!==null&&u!==void 0?u:e.$cstNode))},"nameSegmentGetter");return{node:e,name:r,get nameSegment(){return l()},selectionSegment:op(e.$cstNode),type:e.$type,documentUri:i.uri,path:a}}},nb=class{static{o(this,"DefaultReferenceDescriptionProvider")}constructor(e){this.nodeLocator=e.workspace.AstNodeLocator}async createDescriptions(e,r=yr.CancellationToken.None){let n=[],i=e.parseResult.value;for(let a of jo(i))await wi(r),Pg(a).filter(s=>!ap(s)).forEach(s=>{let l=this.createDescription(s);l&&n.push(l)});return n}createDescription(e){let r=e.reference.$nodeDescription,n=e.reference.$refNode;if(!r||!n)return;let i=$a(e.container).uri;return{sourceUri:i,sourcePath:this.nodeLocator.getAstNodePath(e.container),targetUri:r.documentUri,targetPath:r.path,segment:op(n),local:gs.equals(r.documentUri,i)}}}});var ib,LI=N(()=>{"use strict";ib=class{static{o(this,"DefaultAstNodeLocator")}constructor(){this.segmentSeparator="/",this.indexSeparator="@"}getAstNodePath(e){if(e.$container){let r=this.getAstNodePath(e.$container),n=this.getPathSegment(e);return r+this.segmentSeparator+n}return""}getPathSegment({$containerProperty:e,$containerIndex:r}){if(!e)throw new Error("Missing '$containerProperty' in AST node.");return r!==void 0?e+this.indexSeparator+r:e}getAstNode(e,r){return r.split(this.segmentSeparator).reduce((i,a)=>{if(!i||a.length===0)return i;let s=a.indexOf(this.indexSeparator);if(s>0){let l=a.substring(0,s),u=parseInt(a.substring(s+1)),h=i[l];return h?.[u]}return i[a]},e)}}});var Zn={};var YE=N(()=>{"use strict";Cr(Zn,Aa(dI(),1))});var ab,RI=N(()=>{"use strict";YE();Qo();ab=class{static{o(this,"DefaultConfigurationProvider")}constructor(e){this._ready=new ps,this.settings={},this.workspaceConfig=!1,this.onConfigurationSectionUpdateEmitter=new Zn.Emitter,this.serviceRegistry=e.ServiceRegistry}get ready(){return this._ready.promise}initialize(e){var r,n;this.workspaceConfig=(n=(r=e.capabilities.workspace)===null||r===void 0?void 0:r.configuration)!==null&&n!==void 0?n:!1}async initialized(e){if(this.workspaceConfig){if(e.register){let r=this.serviceRegistry.all;e.register({section:r.map(n=>this.toSectionName(n.LanguageMetaData.languageId))})}if(e.fetchConfiguration){let r=this.serviceRegistry.all.map(i=>({section:this.toSectionName(i.LanguageMetaData.languageId)})),n=await e.fetchConfiguration(r);r.forEach((i,a)=>{this.updateSectionConfiguration(i.section,n[a])})}}this._ready.resolve()}updateConfiguration(e){e.settings&&Object.keys(e.settings).forEach(r=>{let n=e.settings[r];this.updateSectionConfiguration(r,n),this.onConfigurationSectionUpdateEmitter.fire({section:r,configuration:n})})}updateSectionConfiguration(e,r){this.settings[e]=r}async getConfiguration(e,r){await this.ready;let n=this.toSectionName(e);if(this.settings[n])return this.settings[n][r]}toSectionName(e){return`${e}`}get onConfigurationSectionUpdate(){return this.onConfigurationSectionUpdateEmitter.event}}});var vf,NI=N(()=>{"use strict";(function(t){function e(r){return{dispose:o(async()=>await r(),"dispose")}}o(e,"create"),t.create=e})(vf||(vf={}))});var sb,MI=N(()=>{"use strict";Ko();NI();T1();Qo();Gs();eb();b1();sb=class{static{o(this,"DefaultDocumentBuilder")}constructor(e){this.updateBuildOptions={validation:{categories:["built-in","fast"]}},this.updateListeners=[],this.buildPhaseListeners=new zl,this.documentPhaseListeners=new zl,this.buildState=new Map,this.documentBuildWaiters=new Map,this.currentState=kn.Changed,this.langiumDocuments=e.workspace.LangiumDocuments,this.langiumDocumentFactory=e.workspace.LangiumDocumentFactory,this.textDocuments=e.workspace.TextDocuments,this.indexManager=e.workspace.IndexManager,this.serviceRegistry=e.ServiceRegistry}async build(e,r={},n=yr.CancellationToken.None){var i,a;for(let s of e){let l=s.uri.toString();if(s.state===kn.Validated){if(typeof r.validation=="boolean"&&r.validation)s.state=kn.IndexedReferences,s.diagnostics=void 0,this.buildState.delete(l);else if(typeof r.validation=="object"){let u=this.buildState.get(l),h=(i=u?.result)===null||i===void 0?void 0:i.validationChecks;if(h){let d=((a=r.validation.categories)!==null&&a!==void 0?a:S1.all).filter(p=>!h.includes(p));d.length>0&&(this.buildState.set(l,{completed:!1,options:{validation:Object.assign(Object.assign({},r.validation),{categories:d})},result:u.result}),s.state=kn.IndexedReferences)}}}else this.buildState.delete(l)}this.currentState=kn.Changed,await this.emitUpdate(e.map(s=>s.uri),[]),await this.buildDocuments(e,r,n)}async update(e,r,n=yr.CancellationToken.None){this.currentState=kn.Changed;for(let s of r)this.langiumDocuments.deleteDocument(s),this.buildState.delete(s.toString()),this.indexManager.remove(s);for(let s of e){if(!this.langiumDocuments.invalidateDocument(s)){let u=this.langiumDocumentFactory.fromModel({$type:"INVALID"},s);u.state=kn.Changed,this.langiumDocuments.addDocument(u)}this.buildState.delete(s.toString())}let i=en(e).concat(r).map(s=>s.toString()).toSet();this.langiumDocuments.all.filter(s=>!i.has(s.uri.toString())&&this.shouldRelink(s,i)).forEach(s=>{this.serviceRegistry.getServices(s.uri).references.Linker.unlink(s),s.state=Math.min(s.state,kn.ComputedScopes),s.diagnostics=void 0}),await this.emitUpdate(e,r),await wi(n);let a=this.sortDocuments(this.langiumDocuments.all.filter(s=>{var l;return s.staten(e,r)))}sortDocuments(e){let r=0,n=e.length-1;for(;r=0&&!this.hasTextDocument(e[n]);)n--;rn.error!==void 0)?!0:this.indexManager.isAffected(e,r)}onUpdate(e){return this.updateListeners.push(e),vf.create(()=>{let r=this.updateListeners.indexOf(e);r>=0&&this.updateListeners.splice(r,1)})}async buildDocuments(e,r,n){this.prepareBuild(e,r),await this.runCancelable(e,kn.Parsed,n,a=>this.langiumDocumentFactory.update(a,n)),await this.runCancelable(e,kn.IndexedContent,n,a=>this.indexManager.updateContent(a,n)),await this.runCancelable(e,kn.ComputedScopes,n,async a=>{let s=this.serviceRegistry.getServices(a.uri).references.ScopeComputation;a.precomputedScopes=await s.computeLocalScopes(a,n)}),await this.runCancelable(e,kn.Linked,n,a=>this.serviceRegistry.getServices(a.uri).references.Linker.link(a,n)),await this.runCancelable(e,kn.IndexedReferences,n,a=>this.indexManager.updateReferences(a,n));let i=e.filter(a=>this.shouldValidate(a));await this.runCancelable(i,kn.Validated,n,a=>this.validate(a,n));for(let a of e){let s=this.buildState.get(a.uri.toString());s&&(s.completed=!0)}}prepareBuild(e,r){for(let n of e){let i=n.uri.toString(),a=this.buildState.get(i);(!a||a.completed)&&this.buildState.set(i,{completed:!1,options:r,result:a?.result})}}async runCancelable(e,r,n,i){let a=e.filter(l=>l.statel.state===r);await this.notifyBuildPhase(s,r,n),this.currentState=r}onBuildPhase(e,r){return this.buildPhaseListeners.add(e,r),vf.create(()=>{this.buildPhaseListeners.delete(e,r)})}onDocumentPhase(e,r){return this.documentPhaseListeners.add(e,r),vf.create(()=>{this.documentPhaseListeners.delete(e,r)})}waitUntil(e,r,n){let i;if(r&&"path"in r?i=r:n=r,n??(n=yr.CancellationToken.None),i){let a=this.langiumDocuments.getDocument(i);if(a&&a.state>e)return Promise.resolve(i)}return this.currentState>=e?Promise.resolve(void 0):n.isCancellationRequested?Promise.reject(Gc):new Promise((a,s)=>{let l=this.onBuildPhase(e,()=>{if(l.dispose(),u.dispose(),i){let h=this.langiumDocuments.getDocument(i);a(h?.uri)}else a(void 0)}),u=n.onCancellationRequested(()=>{l.dispose(),u.dispose(),s(Gc)})})}async notifyDocumentPhase(e,r,n){let a=this.documentPhaseListeners.get(r).slice();for(let s of a)try{await s(e,n)}catch(l){if(!Vc(l))throw l}}async notifyBuildPhase(e,r,n){if(e.length===0)return;let a=this.buildPhaseListeners.get(r).slice();for(let s of a)await wi(n),await s(e,n)}shouldValidate(e){return!!this.getBuildOptions(e).validation}async validate(e,r){var n,i;let a=this.serviceRegistry.getServices(e.uri).validation.DocumentValidator,s=this.getBuildOptions(e).validation,l=typeof s=="object"?s:void 0,u=await a.validateDocument(e,l,r);e.diagnostics?e.diagnostics.push(...u):e.diagnostics=u;let h=this.buildState.get(e.uri.toString());if(h){(n=h.result)!==null&&n!==void 0||(h.result={});let f=(i=l?.categories)!==null&&i!==void 0?i:S1.all;h.result.validationChecks?h.result.validationChecks.push(...f):h.result.validationChecks=[...f]}}getBuildOptions(e){var r,n;return(n=(r=this.buildState.get(e.uri.toString()))===null||r===void 0?void 0:r.options)!==null&&n!==void 0?n:{}}}});var ob,II=N(()=>{"use strict";cs();HE();Ko();Gs();Uc();ob=class{static{o(this,"DefaultIndexManager")}constructor(e){this.symbolIndex=new Map,this.symbolByTypeIndex=new Dp,this.referenceIndex=new Map,this.documents=e.workspace.LangiumDocuments,this.serviceRegistry=e.ServiceRegistry,this.astReflection=e.AstReflection}findAllReferences(e,r){let n=$a(e).uri,i=[];return this.referenceIndex.forEach(a=>{a.forEach(s=>{gs.equals(s.targetUri,n)&&s.targetPath===r&&i.push(s)})}),en(i)}allElements(e,r){let n=en(this.symbolIndex.keys());return r&&(n=n.filter(i=>!r||r.has(i))),n.map(i=>this.getFileDescriptions(i,e)).flat()}getFileDescriptions(e,r){var n;return r?this.symbolByTypeIndex.get(e,r,()=>{var a;return((a=this.symbolIndex.get(e))!==null&&a!==void 0?a:[]).filter(l=>this.astReflection.isSubtype(l.type,r))}):(n=this.symbolIndex.get(e))!==null&&n!==void 0?n:[]}remove(e){let r=e.toString();this.symbolIndex.delete(r),this.symbolByTypeIndex.clear(r),this.referenceIndex.delete(r)}async updateContent(e,r=yr.CancellationToken.None){let i=await this.serviceRegistry.getServices(e.uri).references.ScopeComputation.computeExports(e,r),a=e.uri.toString();this.symbolIndex.set(a,i),this.symbolByTypeIndex.clear(a)}async updateReferences(e,r=yr.CancellationToken.None){let i=await this.serviceRegistry.getServices(e.uri).workspace.ReferenceDescriptionProvider.createDescriptions(e,r);this.referenceIndex.set(e.uri.toString(),i)}isAffected(e,r){let n=this.referenceIndex.get(e.uri.toString());return n?n.some(i=>!i.local&&r.has(i.targetUri.toString())):!1}}});var lb,OI=N(()=>{"use strict";Ko();Qo();Uc();lb=class{static{o(this,"DefaultWorkspaceManager")}constructor(e){this.initialBuildOptions={},this._ready=new ps,this.serviceRegistry=e.ServiceRegistry,this.langiumDocuments=e.workspace.LangiumDocuments,this.documentBuilder=e.workspace.DocumentBuilder,this.fileSystemProvider=e.workspace.FileSystemProvider,this.mutex=e.workspace.WorkspaceLock}get ready(){return this._ready.promise}get workspaceFolders(){return this.folders}initialize(e){var r;this.folders=(r=e.workspaceFolders)!==null&&r!==void 0?r:void 0}initialized(e){return this.mutex.write(r=>{var n;return this.initializeWorkspace((n=this.folders)!==null&&n!==void 0?n:[],r)})}async initializeWorkspace(e,r=yr.CancellationToken.None){let n=await this.performStartup(e);await wi(r),await this.documentBuilder.build(n,this.initialBuildOptions,r)}async performStartup(e){let r=this.serviceRegistry.all.flatMap(a=>a.LanguageMetaData.fileExtensions),n=[],i=o(a=>{n.push(a),this.langiumDocuments.hasDocument(a.uri)||this.langiumDocuments.addDocument(a)},"collector");return await this.loadAdditionalDocuments(e,i),await Promise.all(e.map(a=>[a,this.getRootFolder(a)]).map(async a=>this.traverseFolder(...a,r,i))),this._ready.resolve(),n}loadAdditionalDocuments(e,r){return Promise.resolve()}getRootFolder(e){return ms.parse(e.uri)}async traverseFolder(e,r,n,i){let a=await this.fileSystemProvider.readDirectory(r);await Promise.all(a.map(async s=>{if(this.includeEntry(e,s,n)){if(s.isDirectory)await this.traverseFolder(e,s.uri,n,i);else if(s.isFile){let l=await this.langiumDocuments.getOrCreateDocument(s.uri);i(l)}}}))}includeEntry(e,r,n){let i=gs.basename(r.uri);if(i.startsWith("."))return!1;if(r.isDirectory)return i!=="node_modules"&&i!=="out";if(r.isFile){let a=gs.extname(r.uri);return n.includes(a)}return!1}}});function jE(t){return Array.isArray(t)&&(t.length===0||"name"in t[0])}function BI(t){return t&&"modes"in t&&"defaultMode"in t}function PI(t){return!jE(t)&&!BI(t)}var cb,XE,Rp,KE=N(()=>{"use strict";mf();cb=class{static{o(this,"DefaultLexerErrorMessageProvider")}buildUnexpectedCharactersMessage(e,r,n,i,a){return Kg.buildUnexpectedCharactersMessage(e,r,n,i,a)}buildUnableToPopLexerModeMessage(e){return Kg.buildUnableToPopLexerModeMessage(e)}},XE={mode:"full"},Rp=class{static{o(this,"DefaultLexer")}constructor(e){this.errorMessageProvider=e.parser.LexerErrorMessageProvider,this.tokenBuilder=e.parser.TokenBuilder;let r=this.tokenBuilder.buildTokens(e.Grammar,{caseInsensitive:e.LanguageMetaData.caseInsensitive});this.tokenTypes=this.toTokenTypeDictionary(r);let n=PI(r)?Object.values(r):r,i=e.LanguageMetaData.mode==="production";this.chevrotainLexer=new Kn(n,{positionTracking:"full",skipValidations:i,errorMessageProvider:this.errorMessageProvider})}get definition(){return this.tokenTypes}tokenize(e,r=XE){var n,i,a;let s=this.chevrotainLexer.tokenize(e);return{tokens:s.tokens,errors:s.errors,hidden:(n=s.groups.hidden)!==null&&n!==void 0?n:[],report:(a=(i=this.tokenBuilder).flushLexingReport)===null||a===void 0?void 0:a.call(i,e)}}toTokenTypeDictionary(e){if(PI(e))return e;let r=BI(e)?Object.values(e.modes).flat():e,n={};return r.forEach(i=>n[i.name]=i),n}};o(jE,"isTokenTypeArray");o(BI,"isIMultiModeLexerDefinition");o(PI,"isTokenTypeDictionary")});function zI(t,e,r){let n,i;typeof t=="string"?(i=e,n=r):(i=t.range.start,n=e),i||(i=jr.create(0,0));let a=due(t),s=VI(n),l=X$e({lines:a,position:i,options:s});return J$e({index:0,tokens:l,position:i})}function GI(t,e){let r=VI(e),n=due(t);if(n.length===0)return!1;let i=n[0],a=n[n.length-1],s=r.start,l=r.end;return!!s?.exec(i)&&!!l?.exec(a)}function due(t){let e="";return typeof t=="string"?e=t:e=t.text,e.split(PN)}function X$e(t){var e,r,n;let i=[],a=t.position.line,s=t.position.character;for(let l=0;l=f.length){if(i.length>0){let m=jr.create(a,s);i.push({type:"break",content:"",range:Br.create(m,m)})}}else{hue.lastIndex=d;let m=hue.exec(f);if(m){let g=m[0],y=m[1],v=jr.create(a,s+d),x=jr.create(a,s+d+g.length);i.push({type:"tag",content:y,range:Br.create(v,x)}),d+=g.length,d=$I(f,d)}if(d0&&i[i.length-1].type==="break"?i.slice(0,-1):i}function j$e(t,e,r,n){let i=[];if(t.length===0){let a=jr.create(r,n),s=jr.create(r,n+e.length);i.push({type:"text",content:e,range:Br.create(a,s)})}else{let a=0;for(let l of t){let u=l.index,h=e.substring(a,u);h.length>0&&i.push({type:"text",content:e.substring(a,u),range:Br.create(jr.create(r,a+n),jr.create(r,u+n))});let f=h.length+1,d=l[1];if(i.push({type:"inline-tag",content:d,range:Br.create(jr.create(r,a+f+n),jr.create(r,a+f+d.length+n))}),f+=d.length,l.length===4){f+=l[2].length;let p=l[3];i.push({type:"text",content:p,range:Br.create(jr.create(r,a+f+n),jr.create(r,a+f+p.length+n))})}else i.push({type:"text",content:"",range:Br.create(jr.create(r,a+f+n),jr.create(r,a+f+n))});a=u+l[0].length}let s=e.substring(a);s.length>0&&i.push({type:"text",content:s,range:Br.create(jr.create(r,a+n),jr.create(r,a+n+s.length))})}return i}function $I(t,e){let r=t.substring(e).match(K$e);return r?e+r.index:t.length}function Z$e(t){let e=t.match(Q$e);if(e&&typeof e.index=="number")return e.index}function J$e(t){var e,r,n,i;let a=jr.create(t.position.line,t.position.character);if(t.tokens.length===0)return new QE([],Br.create(a,a));let s=[];for(;t.index0){let u=$I(e,a);s=e.substring(u),e=e.substring(0,a)}return(t==="linkcode"||t==="link"&&r.link==="code")&&(s=`\`${s}\``),(i=(n=r.renderLink)===null||n===void 0?void 0:n.call(r,e,s))!==null&&i!==void 0?i:ize(e,s)}}function ize(t,e){try{return ms.parse(t,!0),`[${e}](${t})`}catch{return t}}function fue(t){return t.endsWith(` `)?` `:` -`}var ece,mFe,vFe,xFe,UE,ob,lb,HE,hI=N(()=>{"use strict";bM();Fg();Gc();o(lI,"parseJSDoc");o(cI,"isJSDoc");o(rce,"getLines");ece=/\s*(@([\p{L}][\p{L}\p{N}]*)?)/uy,mFe=/\{(@[\p{L}][\p{L}\p{N}]*)(\s*)([^\r\n}]+)?\}/gu;o(gFe,"tokenize");o(yFe,"buildInlineTokens");vFe=/\S/,xFe=/\s*$/;o(oI,"skipWhitespace");o(bFe,"lastCharacter");o(wFe,"parseJSDocComment");o(TFe,"parseJSDocElement");o(kFe,"appendEmptyLine");o(nce,"parseJSDocText");o(EFe,"parseJSDocInline");o(ice,"parseJSDocTag");o(ace,"parseJSDocLine");o(uI,"normalizeOptions");o(sI,"normalizeOption");UE=class{static{o(this,"JSDocCommentImpl")}constructor(e,r){this.elements=e,this.range=r}getTag(e){return this.getAllTags().find(r=>r.name===e)}getTags(e){return this.getAllTags().filter(r=>r.name===e)}getAllTags(){return this.elements.filter(e=>"name"in e)}toString(){let e="";for(let r of this.elements)if(e.length===0)e=r.toString();else{let n=r.toString();e+=tce(e)+n}return e.trim()}toMarkdown(e){let r="";for(let n of this.elements)if(r.length===0)r=n.toMarkdown(e);else{let i=n.toMarkdown(e);r+=tce(r)+i}return r.trim()}},ob=class{static{o(this,"JSDocTagImpl")}constructor(e,r,n,i){this.name=e,this.content=r,this.inline=n,this.range=i}toString(){let e=`@${this.name}`,r=this.content.toString();return this.content.inlines.length===1?e=`${e} ${r}`:this.content.inlines.length>1&&(e=`${e} -${r}`),this.inline?`{${e}}`:e}toMarkdown(e){var r,n;return(n=(r=e?.renderTag)===null||r===void 0?void 0:r.call(e,this))!==null&&n!==void 0?n:this.toMarkdownDefault(e)}toMarkdownDefault(e){let r=this.content.toMarkdown(e);if(this.inline){let a=SFe(this.name,r,e??{});if(typeof a=="string")return a}let n="";e?.tag==="italic"||e?.tag===void 0?n="*":e?.tag==="bold"?n="**":e?.tag==="bold-italic"&&(n="***");let i=`${n}@${this.name}${n}`;return this.content.inlines.length===1?i=`${i} \u2014 ${r}`:this.content.inlines.length>1&&(i=`${i} -${r}`),this.inline?`{${i}}`:i}};o(SFe,"renderInlineTag");o(CFe,"renderLinkDefault");lb=class{static{o(this,"JSDocTextImpl")}constructor(e,r){this.inlines=e,this.range=r}toString(){let e="";for(let r=0;rn.range.start.line&&(e+=` +`}var hue,Y$e,K$e,Q$e,QE,ub,hb,ZE,UI=N(()=>{"use strict";ZM();$g();Uc();o(zI,"parseJSDoc");o(GI,"isJSDoc");o(due,"getLines");hue=/\s*(@([\p{L}][\p{L}\p{N}]*)?)/uy,Y$e=/\{(@[\p{L}][\p{L}\p{N}]*)(\s*)([^\r\n}]+)?\}/gu;o(X$e,"tokenize");o(j$e,"buildInlineTokens");K$e=/\S/,Q$e=/\s*$/;o($I,"skipWhitespace");o(Z$e,"lastCharacter");o(J$e,"parseJSDocComment");o(eze,"parseJSDocElement");o(tze,"appendEmptyLine");o(pue,"parseJSDocText");o(rze,"parseJSDocInline");o(mue,"parseJSDocTag");o(gue,"parseJSDocLine");o(VI,"normalizeOptions");o(FI,"normalizeOption");QE=class{static{o(this,"JSDocCommentImpl")}constructor(e,r){this.elements=e,this.range=r}getTag(e){return this.getAllTags().find(r=>r.name===e)}getTags(e){return this.getAllTags().filter(r=>r.name===e)}getAllTags(){return this.elements.filter(e=>"name"in e)}toString(){let e="";for(let r of this.elements)if(e.length===0)e=r.toString();else{let n=r.toString();e+=fue(e)+n}return e.trim()}toMarkdown(e){let r="";for(let n of this.elements)if(r.length===0)r=n.toMarkdown(e);else{let i=n.toMarkdown(e);r+=fue(r)+i}return r.trim()}},ub=class{static{o(this,"JSDocTagImpl")}constructor(e,r,n,i){this.name=e,this.content=r,this.inline=n,this.range=i}toString(){let e=`@${this.name}`,r=this.content.toString();return this.content.inlines.length===1?e=`${e} ${r}`:this.content.inlines.length>1&&(e=`${e} +${r}`),this.inline?`{${e}}`:e}toMarkdown(e){var r,n;return(n=(r=e?.renderTag)===null||r===void 0?void 0:r.call(e,this))!==null&&n!==void 0?n:this.toMarkdownDefault(e)}toMarkdownDefault(e){let r=this.content.toMarkdown(e);if(this.inline){let a=nze(this.name,r,e??{});if(typeof a=="string")return a}let n="";e?.tag==="italic"||e?.tag===void 0?n="*":e?.tag==="bold"?n="**":e?.tag==="bold-italic"&&(n="***");let i=`${n}@${this.name}${n}`;return this.content.inlines.length===1?i=`${i} \u2014 ${r}`:this.content.inlines.length>1&&(i=`${i} +${r}`),this.inline?`{${i}}`:i}};o(nze,"renderInlineTag");o(ize,"renderLinkDefault");hb=class{static{o(this,"JSDocTextImpl")}constructor(e,r){this.inlines=e,this.range=r}toString(){let e="";for(let r=0;rn.range.start.line&&(e+=` `)}return e}toMarkdown(e){let r="";for(let n=0;ni.range.start.line&&(r+=` -`)}return r}},HE=class{static{o(this,"JSDocLineImpl")}constructor(e,r){this.text=e,this.range=r}toString(){return this.text}toMarkdown(){return this.text}};o(tce,"fillNewlines")});var cb,fI=N(()=>{"use strict";is();hI();cb=class{static{o(this,"JSDocDocumentationProvider")}constructor(e){this.indexManager=e.shared.workspace.IndexManager,this.commentProvider=e.documentation.CommentProvider}getDocumentation(e){let r=this.commentProvider.getComment(e);if(r&&cI(r))return lI(r).toMarkdown({renderLink:o((i,a)=>this.documentationLinkRenderer(e,i,a),"renderLink"),renderTag:o(i=>this.documentationTagRenderer(e,i),"renderTag")})}documentationLinkRenderer(e,r,n){var i;let a=(i=this.findNameInPrecomputedScopes(e,r))!==null&&i!==void 0?i:this.findNameInGlobalScope(e,r);if(a&&a.nameSegment){let s=a.nameSegment.range.start.line+1,l=a.nameSegment.range.start.character+1,u=a.documentUri.with({fragment:`L${s},${l}`});return`[${n}](${u.toString()})`}else return}documentationTagRenderer(e,r){}findNameInPrecomputedScopes(e,r){let i=Pa(e).precomputedScopes;if(!i)return;let a=e;do{let l=i.get(a).find(u=>u.name===r);if(l)return l;a=a.$container}while(a)}findNameInGlobalScope(e,r){return this.indexManager.allElements().find(i=>i.name===r)}}});var ub,dI=N(()=>{"use strict";BE();Il();ub=class{static{o(this,"DefaultCommentProvider")}constructor(e){this.grammarConfig=()=>e.parser.GrammarConfig}getComment(e){var r;return XM(e)?e.$comment:(r=NR(e.$cstNode,this.grammarConfig().multilineCommentRules))===null||r===void 0?void 0:r.text}}});var hb,pI,mI,gI=N(()=>{"use strict";Xo();$E();hb=class{static{o(this,"DefaultAsyncParser")}constructor(e){this.syncParser=e.parser.LangiumParser}parse(e,r){return Promise.resolve(this.syncParser.parse(e))}},pI=class{static{o(this,"AbstractThreadedAsyncParser")}constructor(e){this.threadCount=8,this.terminationDelay=200,this.workerPool=[],this.queue=[],this.hydrator=e.serializer.Hydrator}initializeWorkers(){for(;this.workerPool.length{if(this.queue.length>0){let r=this.queue.shift();r&&(e.lock(),r.resolve(e))}}),this.workerPool.push(e)}}async parse(e,r){let n=await this.acquireParserWorker(r),i=new cs,a,s=r.onCancellationRequested(()=>{a=setTimeout(()=>{this.terminateWorker(n)},this.terminationDelay)});return n.parse(e).then(l=>{let u=this.hydrator.hydrate(l);i.resolve(u)}).catch(l=>{i.reject(l)}).finally(()=>{s.dispose(),clearTimeout(a)}),i.promise}terminateWorker(e){e.terminate();let r=this.workerPool.indexOf(e);r>=0&&this.workerPool.splice(r,1)}async acquireParserWorker(e){this.initializeWorkers();for(let n of this.workerPool)if(n.ready)return n.lock(),n;let r=new cs;return e.onCancellationRequested(()=>{let n=this.queue.indexOf(r);n>=0&&this.queue.splice(n,1),r.reject($c)}),this.queue.push(r),r.promise}},mI=class{static{o(this,"ParserWorker")}get ready(){return this._ready}get onReady(){return this.onReadyEmitter.event}constructor(e,r,n,i){this.onReadyEmitter=new Kn.Emitter,this.deferred=new cs,this._ready=!0,this._parsing=!1,this.sendMessage=e,this._terminate=i,r(a=>{let s=a;this.deferred.resolve(s),this.unlock()}),n(a=>{this.deferred.reject(a),this.unlock()})}terminate(){this.deferred.reject($c),this._terminate()}lock(){this._ready=!1}unlock(){this._parsing=!1,this._ready=!0,this.onReadyEmitter.fire()}parse(e){if(this._parsing)throw new Error("Parser worker is busy");return this._parsing=!0,this.deferred=new cs,this.sendMessage(e),this.deferred.promise}}});var fb,yI=N(()=>{"use strict";Yo();Xo();fb=class{static{o(this,"DefaultWorkspaceLock")}constructor(){this.previousTokenSource=new yr.CancellationTokenSource,this.writeQueue=[],this.readQueue=[],this.done=!0}write(e){this.cancelWrite();let r=ME();return this.previousTokenSource=r,this.enqueue(this.writeQueue,e,r.token)}read(e){return this.enqueue(this.readQueue,e)}enqueue(e,r,n=yr.CancellationToken.None){let i=new cs,a={action:r,deferred:i,cancellationToken:n};return e.push(a),this.performNextOperation(),i.promise}async performNextOperation(){if(!this.done)return;let e=[];if(this.writeQueue.length>0)e.push(this.writeQueue.shift());else if(this.readQueue.length>0)e.push(...this.readQueue.splice(0,this.readQueue.length));else return;this.done=!1,await Promise.all(e.map(async({action:r,deferred:n,cancellationToken:i})=>{try{let a=await Promise.resolve().then(()=>r(i));n.resolve(a)}catch(a){zc(a)?n.resolve(void 0):n.reject(a)}})),this.done=!0,this.performNextOperation()}cancelWrite(){this.previousTokenSource.cancel()}}});var db,vI=N(()=>{"use strict";kE();Ic();Ml();is();b1();Il();db=class{static{o(this,"DefaultHydrator")}constructor(e){this.grammarElementIdMap=new Sp,this.tokenTypeIdMap=new Sp,this.grammar=e.Grammar,this.lexer=e.parser.Lexer,this.linker=e.references.Linker}dehydrate(e){return{lexerErrors:e.lexerErrors,lexerReport:e.lexerReport?this.dehydrateLexerReport(e.lexerReport):void 0,parserErrors:e.parserErrors.map(r=>Object.assign(Object.assign({},r),{message:r.message})),value:this.dehydrateAstNode(e.value,this.createDehyrationContext(e.value))}}dehydrateLexerReport(e){return e}createDehyrationContext(e){let r=new Map,n=new Map;for(let i of qo(e))r.set(i,{});if(e.$cstNode)for(let i of np(e.$cstNode))n.set(i,{});return{astNodes:r,cstNodes:n}}dehydrateAstNode(e,r){let n=r.astNodes.get(e);n.$type=e.$type,n.$containerIndex=e.$containerIndex,n.$containerProperty=e.$containerProperty,e.$cstNode!==void 0&&(n.$cstNode=this.dehydrateCstNode(e.$cstNode,r));for(let[i,a]of Object.entries(e))if(!i.startsWith("$"))if(Array.isArray(a)){let s=[];n[i]=s;for(let l of a)ii(l)?s.push(this.dehydrateAstNode(l,r)):va(l)?s.push(this.dehydrateReference(l,r)):s.push(l)}else ii(a)?n[i]=this.dehydrateAstNode(a,r):va(a)?n[i]=this.dehydrateReference(a,r):a!==void 0&&(n[i]=a);return n}dehydrateReference(e,r){let n={};return n.$refText=e.$refText,e.$refNode&&(n.$refNode=r.cstNodes.get(e.$refNode)),n}dehydrateCstNode(e,r){let n=r.cstNodes.get(e);return z2(e)?n.fullText=e.fullText:n.grammarSource=this.getGrammarElementId(e.grammarSource),n.hidden=e.hidden,n.astNode=r.astNodes.get(e.astNode),Nl(e)?n.content=e.content.map(i=>this.dehydrateCstNode(i,r)):cf(e)&&(n.tokenType=e.tokenType.name,n.offset=e.offset,n.length=e.length,n.startLine=e.range.start.line,n.startColumn=e.range.start.character,n.endLine=e.range.end.line,n.endColumn=e.range.end.character),n}hydrate(e){let r=e.value,n=this.createHydrationContext(r);return"$cstNode"in r&&this.hydrateCstNode(r.$cstNode,n),{lexerErrors:e.lexerErrors,lexerReport:e.lexerReport,parserErrors:e.parserErrors,value:this.hydrateAstNode(r,n)}}createHydrationContext(e){let r=new Map,n=new Map;for(let a of qo(e))r.set(a,{});let i;if(e.$cstNode)for(let a of np(e.$cstNode)){let s;"fullText"in a?(s=new d1(a.fullText),i=s):"content"in a?s=new Tp:"tokenType"in a&&(s=this.hydrateCstLeafNode(a)),s&&(n.set(a,s),s.root=i)}return{astNodes:r,cstNodes:n}}hydrateAstNode(e,r){let n=r.astNodes.get(e);n.$type=e.$type,n.$containerIndex=e.$containerIndex,n.$containerProperty=e.$containerProperty,e.$cstNode&&(n.$cstNode=r.cstNodes.get(e.$cstNode));for(let[i,a]of Object.entries(e))if(!i.startsWith("$"))if(Array.isArray(a)){let s=[];n[i]=s;for(let l of a)ii(l)?s.push(this.setParent(this.hydrateAstNode(l,r),n)):va(l)?s.push(this.hydrateReference(l,n,i,r)):s.push(l)}else ii(a)?n[i]=this.setParent(this.hydrateAstNode(a,r),n):va(a)?n[i]=this.hydrateReference(a,n,i,r):a!==void 0&&(n[i]=a);return n}setParent(e,r){return e.$container=r,e}hydrateReference(e,r,n,i){return this.linker.buildReference(r,n,i.cstNodes.get(e.$refNode),e.$refText)}hydrateCstNode(e,r,n=0){let i=r.cstNodes.get(e);if(typeof e.grammarSource=="number"&&(i.grammarSource=this.getGrammarElement(e.grammarSource)),i.astNode=r.astNodes.get(e.astNode),Nl(i))for(let a of e.content){let s=this.hydrateCstNode(a,r,n++);i.content.push(s)}return i}hydrateCstLeafNode(e){let r=this.getTokenType(e.tokenType),n=e.offset,i=e.length,a=e.startLine,s=e.startColumn,l=e.endLine,u=e.endColumn,h=e.hidden;return new wp(n,i,{start:{line:a,character:s},end:{line:l,character:u}},r,h)}getTokenType(e){return this.lexer.definition[e]}getGrammarElementId(e){if(e)return this.grammarElementIdMap.size===0&&this.createGrammarElementIdMap(),this.grammarElementIdMap.get(e)}getGrammarElement(e){return this.grammarElementIdMap.size===0&&this.createGrammarElementIdMap(),this.grammarElementIdMap.getKey(e)}createGrammarElementIdMap(){let e=0;for(let r of qo(this.grammar))X2(r)&&this.grammarElementIdMap.set(r,e++)}}});function fs(t){return{documentation:{CommentProvider:o(e=>new ub(e),"CommentProvider"),DocumentationProvider:o(e=>new cb(e),"DocumentationProvider")},parser:{AsyncParser:o(e=>new hb(e),"AsyncParser"),GrammarConfig:o(e=>xN(e),"GrammarConfig"),LangiumParser:o(e=>AM(e),"LangiumParser"),CompletionParser:o(e=>SM(e),"CompletionParser"),ValueConverter:o(()=>new Ep,"ValueConverter"),TokenBuilder:o(()=>new Yu,"TokenBuilder"),Lexer:o(e=>new _p(e),"Lexer"),ParserErrorMessageProvider:o(()=>new p1,"ParserErrorMessageProvider"),LexerErrorMessageProvider:o(()=>new sb,"LexerErrorMessageProvider")},workspace:{AstNodeLocator:o(()=>new tb,"AstNodeLocator"),AstNodeDescriptionProvider:o(e=>new Jx(e),"AstNodeDescriptionProvider"),ReferenceDescriptionProvider:o(e=>new eb(e),"ReferenceDescriptionProvider")},references:{Linker:o(e=>new Gx(e),"Linker"),NameProvider:o(()=>new Vx,"NameProvider"),ScopeProvider:o(e=>new Yx(e),"ScopeProvider"),ScopeComputation:o(e=>new Hx(e),"ScopeComputation"),References:o(e=>new Ux(e),"References")},serializer:{Hydrator:o(e=>new db(e),"Hydrator"),JsonSerializer:o(e=>new Xx(e),"JsonSerializer")},validation:{DocumentValidator:o(e=>new Zx(e),"DocumentValidator"),ValidationRegistry:o(e=>new Kx(e),"ValidationRegistry")},shared:o(()=>t.shared,"shared")}}function ds(t){return{ServiceRegistry:o(e=>new jx(e),"ServiceRegistry"),workspace:{LangiumDocuments:o(e=>new zx(e),"LangiumDocuments"),LangiumDocumentFactory:o(e=>new $x(e),"LangiumDocumentFactory"),DocumentBuilder:o(e=>new nb(e),"DocumentBuilder"),IndexManager:o(e=>new ib(e),"IndexManager"),WorkspaceManager:o(e=>new ab(e),"WorkspaceManager"),FileSystemProvider:o(e=>t.fileSystemProvider(e),"FileSystemProvider"),WorkspaceLock:o(()=>new fb,"WorkspaceLock"),ConfigurationProvider:o(e=>new rb(e),"ConfigurationProvider")}}}var xI=N(()=>{"use strict";bN();CM();_M();_E();DM();VM();UM();HM();WM();YM();BE();jM();KM();Qx();QM();ZM();JM();tI();x1();rI();nI();VE();fI();dI();Bx();gI();yI();vI();o(fs,"createDefaultCoreModule");o(ds,"createDefaultSharedCoreModule")});function ui(t,e,r,n,i,a,s,l,u){let h=[t,e,r,n,i,a,s,l,u].reduce(WE,{});return uce(h)}function cce(t){if(t&&t[lce])for(let e of Object.values(t))cce(e);return t}function uce(t,e){let r=new Proxy({},{deleteProperty:o(()=>!1,"deleteProperty"),set:o(()=>{throw new Error("Cannot set property on injected service container")},"set"),get:o((n,i)=>i===lce?!0:oce(n,i,t,e||r),"get"),getOwnPropertyDescriptor:o((n,i)=>(oce(n,i,t,e||r),Object.getOwnPropertyDescriptor(n,i)),"getOwnPropertyDescriptor"),has:o((n,i)=>i in t,"has"),ownKeys:o(()=>[...Object.getOwnPropertyNames(t)],"ownKeys")});return r}function oce(t,e,r,n){if(e in t){if(t[e]instanceof Error)throw new Error("Construction failure. Please make sure that your dependencies are constructable.",{cause:t[e]});if(t[e]===sce)throw new Error('Cycle detected. Please make "'+String(e)+'" lazy. Visit https://langium.org/docs/reference/configuration-services/#resolving-cyclic-dependencies');return t[e]}else if(e in r){let i=r[e];t[e]=sce;try{t[e]=typeof i=="function"?i(n):uce(i,n)}catch(a){throw t[e]=a instanceof Error?a:void 0,a}return t[e]}else return}function WE(t,e){if(e){for(let[r,n]of Object.entries(e))if(n!==void 0){let i=t[r];i!==null&&n!==null&&typeof i=="object"&&typeof n=="object"?t[r]=WE(i,n):t[r]=n}}return t}var bI,lce,sce,wI=N(()=>{"use strict";(function(t){t.merge=(e,r)=>WE(WE({},e),r)})(bI||(bI={}));o(ui,"inject");lce=Symbol("isProxy");o(cce,"eagerLoad");o(uce,"_inject");sce=Symbol();o(oce,"_resolve");o(WE,"_merge")});var hce=N(()=>{"use strict"});var fce=N(()=>{"use strict";dI();fI();hI()});var dce=N(()=>{"use strict"});var pce=N(()=>{"use strict";bN();dce()});var TI,Dp,qE,kI,mce=N(()=>{"use strict";df();_E();VE();TI={indentTokenName:"INDENT",dedentTokenName:"DEDENT",whitespaceTokenName:"WS",ignoreIndentationDelimiters:[]};(function(t){t.REGULAR="indentation-sensitive",t.IGNORE_INDENTATION="ignore-indentation"})(Dp||(Dp={}));qE=class extends Yu{static{o(this,"IndentationAwareTokenBuilder")}constructor(e=TI){super(),this.indentationStack=[0],this.whitespaceRegExp=/[ \t]+/y,this.options=Object.assign(Object.assign({},TI),e),this.indentTokenType=hf({name:this.options.indentTokenName,pattern:this.indentMatcher.bind(this),line_breaks:!1}),this.dedentTokenType=hf({name:this.options.dedentTokenName,pattern:this.dedentMatcher.bind(this),line_breaks:!1})}buildTokens(e,r){let n=super.buildTokens(e,r);if(!GE(n))throw new Error("Invalid tokens built by default builder");let{indentTokenName:i,dedentTokenName:a,whitespaceTokenName:s,ignoreIndentationDelimiters:l}=this.options,u,h,f,d=[];for(let p of n){for(let[m,g]of l)p.name===m?p.PUSH_MODE=Dp.IGNORE_INDENTATION:p.name===g&&(p.POP_MODE=!0);p.name===a?u=p:p.name===i?h=p:p.name===s?f=p:d.push(p)}if(!u||!h||!f)throw new Error("Some indentation/whitespace tokens not found!");return l.length>0?{modes:{[Dp.REGULAR]:[u,h,...d,f],[Dp.IGNORE_INDENTATION]:[...d,f]},defaultMode:Dp.REGULAR}:[u,h,f,...d]}flushLexingReport(e){let r=super.flushLexingReport(e);return Object.assign(Object.assign({},r),{remainingDedents:this.flushRemainingDedents(e)})}isStartOfLine(e,r){return r===0||`\r -`.includes(e[r-1])}matchWhitespace(e,r,n,i){var a;this.whitespaceRegExp.lastIndex=r;let s=this.whitespaceRegExp.exec(e);return{currIndentLevel:(a=s?.[0].length)!==null&&a!==void 0?a:0,prevIndentLevel:this.indentationStack.at(-1),match:s}}createIndentationTokenInstance(e,r,n,i){let a=this.getLineNumber(r,i);return Uu(e,n,i,i+n.length,a,a,1,n.length)}getLineNumber(e,r){return e.substring(0,r).split(/\r\n|\r|\n/).length}indentMatcher(e,r,n,i){if(!this.isStartOfLine(e,r))return null;let{currIndentLevel:a,prevIndentLevel:s,match:l}=this.matchWhitespace(e,r,n,i);return a<=s?null:(this.indentationStack.push(a),l)}dedentMatcher(e,r,n,i){var a,s,l,u;if(!this.isStartOfLine(e,r))return null;let{currIndentLevel:h,prevIndentLevel:f,match:d}=this.matchWhitespace(e,r,n,i);if(h>=f)return null;let p=this.indentationStack.lastIndexOf(h);if(p===-1)return this.diagnostics.push({severity:"error",message:`Invalid dedent level ${h} at offset: ${r}. Current indentation stack: ${this.indentationStack}`,offset:r,length:(s=(a=d?.[0])===null||a===void 0?void 0:a.length)!==null&&s!==void 0?s:0,line:this.getLineNumber(e,r),column:1}),null;let m=this.indentationStack.length-p-1,g=(u=(l=e.substring(0,r).match(/[\r\n]+$/))===null||l===void 0?void 0:l[0].length)!==null&&u!==void 0?u:1;for(let y=0;y1;)r.push(this.createIndentationTokenInstance(this.dedentTokenType,e,"",e.length)),this.indentationStack.pop();return this.indentationStack=[0],r}},kI=class extends _p{static{o(this,"IndentationAwareLexer")}constructor(e){if(super(e),e.parser.TokenBuilder instanceof qE)this.indentationTokenBuilder=e.parser.TokenBuilder;else throw new Error("IndentationAwareLexer requires an accompanying IndentationAwareTokenBuilder")}tokenize(e,r=zE){let n=super.tokenize(e),i=n.report;r?.mode==="full"&&n.tokens.push(...i.remainingDedents),i.remainingDedents=[];let{indentTokenType:a,dedentTokenType:s}=this.indentationTokenBuilder,l=a.tokenTypeIdx,u=s.tokenTypeIdx,h=[],f=n.tokens.length-1;for(let d=0;d=0&&h.push(n.tokens[f]),n.tokens=h,n}}});var gce=N(()=>{"use strict"});var yce=N(()=>{"use strict";gI();CM();kE();mce();_M();Bx();VE();AE();gce();_E();DM()});var vce=N(()=>{"use strict";VM();UM();HM();qM();WM();YM()});var xce=N(()=>{"use strict";vI();BE()});var YE,ps,EI=N(()=>{"use strict";YE=class{static{o(this,"EmptyFileSystemProvider")}readFile(){throw new Error("No file system is available.")}async readDirectory(){return[]}},ps={fileSystemProvider:o(()=>new YE,"fileSystemProvider")}});function DFe(){let t=ui(ds(ps),_Fe),e=ui(fs({shared:t}),AFe);return t.ServiceRegistry.register(e),e}function Xu(t){var e;let r=DFe(),n=r.serializer.JsonSerializer.deserialize(t);return r.shared.workspace.LangiumDocumentFactory.fromModel(n,us.parse(`memory://${(e=n.name)!==null&&e!==void 0?e:"grammar"}.langium`)),n}var AFe,_Fe,bce=N(()=>{"use strict";xI();wI();Ic();EI();Gc();AFe={Grammar:o(()=>{},"Grammar"),LanguageMetaData:o(()=>({caseInsensitive:!1,fileExtensions:[".langium"],languageId:"langium"}),"LanguageMetaData")},_Fe={AstReflection:o(()=>new Ig,"AstReflection")};o(DFe,"createMinimalGrammarServices");o(Xu,"loadGrammarFromJson")});var Gr={};hr(Gr,{AstUtils:()=>Ck,BiMap:()=>Sp,Cancellation:()=>yr,ContextCache:()=>Cp,CstUtils:()=>gk,DONE_RESULT:()=>Ia,Deferred:()=>cs,Disposable:()=>gf,DisposableCache:()=>T1,DocumentCache:()=>OE,EMPTY_STREAM:()=>G2,ErrorWithLocation:()=>ap,GrammarUtils:()=>Rk,MultiMap:()=>$l,OperationCancelled:()=>$c,Reduction:()=>Xm,RegExpUtils:()=>Dk,SimpleCache:()=>qx,StreamImpl:()=>oo,TreeStreamImpl:()=>Rc,URI:()=>us,UriUtils:()=>hs,WorkspaceCache:()=>k1,assertUnreachable:()=>Mc,delayNextTick:()=>FM,interruptAndCheck:()=>bi,isOperationCancelled:()=>zc,loadGrammarFromJson:()=>Xu,setInterruptionPeriod:()=>Hle,startCancelableOperation:()=>ME,stream:()=>en});var wce=N(()=>{"use strict";PE();$E();Sr(Gr,Kn);b1();eI();yk();bce();Xo();Fs();Gc();is();Yo();Il();Bl();Fg()});var Tce=N(()=>{"use strict";KM();Qx()});var kce=N(()=>{"use strict";QM();ZM();JM();tI();x1();EI();rI();yI();nI()});var xa={};hr(xa,{AbstractAstReflection:()=>tp,AbstractCstNode:()=>Mx,AbstractLangiumParser:()=>Ix,AbstractParserErrorMessageProvider:()=>SE,AbstractThreadedAsyncParser:()=>pI,AstUtils:()=>Ck,BiMap:()=>Sp,Cancellation:()=>yr,CompositeCstNodeImpl:()=>Tp,ContextCache:()=>Cp,CstNodeBuilder:()=>Nx,CstUtils:()=>gk,DEFAULT_TOKENIZE_OPTIONS:()=>zE,DONE_RESULT:()=>Ia,DatatypeSymbol:()=>EE,DefaultAstNodeDescriptionProvider:()=>Jx,DefaultAstNodeLocator:()=>tb,DefaultAsyncParser:()=>hb,DefaultCommentProvider:()=>ub,DefaultConfigurationProvider:()=>rb,DefaultDocumentBuilder:()=>nb,DefaultDocumentValidator:()=>Zx,DefaultHydrator:()=>db,DefaultIndexManager:()=>ib,DefaultJsonSerializer:()=>Xx,DefaultLangiumDocumentFactory:()=>$x,DefaultLangiumDocuments:()=>zx,DefaultLexer:()=>_p,DefaultLexerErrorMessageProvider:()=>sb,DefaultLinker:()=>Gx,DefaultNameProvider:()=>Vx,DefaultReferenceDescriptionProvider:()=>eb,DefaultReferences:()=>Ux,DefaultScopeComputation:()=>Hx,DefaultScopeProvider:()=>Yx,DefaultServiceRegistry:()=>jx,DefaultTokenBuilder:()=>Yu,DefaultValueConverter:()=>Ep,DefaultWorkspaceLock:()=>fb,DefaultWorkspaceManager:()=>ab,Deferred:()=>cs,Disposable:()=>gf,DisposableCache:()=>T1,DocumentCache:()=>OE,DocumentState:()=>kn,DocumentValidator:()=>Ko,EMPTY_SCOPE:()=>pFe,EMPTY_STREAM:()=>G2,EmptyFileSystem:()=>ps,EmptyFileSystemProvider:()=>YE,ErrorWithLocation:()=>ap,GrammarAST:()=>K2,GrammarUtils:()=>Rk,IndentationAwareLexer:()=>kI,IndentationAwareTokenBuilder:()=>qE,JSDocDocumentationProvider:()=>cb,LangiumCompletionParser:()=>Px,LangiumParser:()=>Ox,LangiumParserErrorMessageProvider:()=>p1,LeafCstNodeImpl:()=>wp,LexingMode:()=>Dp,MapScope:()=>Wx,Module:()=>bI,MultiMap:()=>$l,OperationCancelled:()=>$c,ParserWorker:()=>mI,Reduction:()=>Xm,RegExpUtils:()=>Dk,RootCstNodeImpl:()=>d1,SimpleCache:()=>qx,StreamImpl:()=>oo,StreamScope:()=>w1,TextDocument:()=>y1,TreeStreamImpl:()=>Rc,URI:()=>us,UriUtils:()=>hs,ValidationCategory:()=>E1,ValidationRegistry:()=>Kx,ValueConverter:()=>Fc,WorkspaceCache:()=>k1,assertUnreachable:()=>Mc,createCompletionParser:()=>SM,createDefaultCoreModule:()=>fs,createDefaultSharedCoreModule:()=>ds,createGrammarConfig:()=>xN,createLangiumParser:()=>AM,createParser:()=>Fx,delayNextTick:()=>FM,diagnosticData:()=>Ap,eagerLoad:()=>cce,getDiagnosticRange:()=>Zle,indentationBuilderDefaultOptions:()=>TI,inject:()=>ui,interruptAndCheck:()=>bi,isAstNode:()=>ii,isAstNodeDescription:()=>_R,isAstNodeWithComment:()=>XM,isCompositeCstNode:()=>Nl,isIMultiModeLexerDefinition:()=>aI,isJSDoc:()=>cI,isLeafCstNode:()=>cf,isLinkingError:()=>rp,isNamed:()=>Kle,isOperationCancelled:()=>zc,isReference:()=>va,isRootCstNode:()=>z2,isTokenTypeArray:()=>GE,isTokenTypeDictionary:()=>iI,loadGrammarFromJson:()=>Xu,parseJSDoc:()=>lI,prepareLangiumParser:()=>Ble,setInterruptionPeriod:()=>Hle,startCancelableOperation:()=>ME,stream:()=>en,toDiagnosticData:()=>Jle,toDiagnosticSeverity:()=>FE});var jo=N(()=>{"use strict";xI();wI();jM();hce();Ml();fce();pce();yce();vce();xce();wce();Sr(xa,Gr);Tce();kce();Ic()});function Lce(t){return Vc.isInstance(t,pb)}function Rce(t){return Vc.isInstance(t,S1)}function Nce(t){return Vc.isInstance(t,C1)}function Mce(t){return Vc.isInstance(t,A1)}function Ice(t){return Vc.isInstance(t,mb)}function Oce(t){return Vc.isInstance(t,_1)}function Pce(t){return Vc.isInstance(t,gb)}function Bce(t){return Vc.isInstance(t,yb)}function Fce(t){return Vc.isInstance(t,vb)}function $ce(t){return Vc.isInstance(t,xb)}var LFe,Rt,NI,pb,XE,S1,jE,KE,C1,SI,CI,AI,A1,_I,mb,DI,_1,LI,gb,yb,vb,xb,ZE,RI,QE,zce,Vc,Ece,RFe,Sce,NFe,Cce,MFe,Ace,IFe,_ce,OFe,Dce,PFe,BFe,FFe,$Fe,zFe,GFe,VFe,ho,MI,II,OI,PI,BI,FI,UFe,HFe,WFe,qFe,D1,ju,Gs,YFe,Vs=N(()=>{"use strict";jo();jo();jo();jo();LFe=Object.defineProperty,Rt=o((t,e)=>LFe(t,"name",{value:e,configurable:!0}),"__name"),NI="Statement",pb="Architecture";o(Lce,"isArchitecture");Rt(Lce,"isArchitecture");XE="Axis",S1="Branch";o(Rce,"isBranch");Rt(Rce,"isBranch");jE="Checkout",KE="CherryPicking",C1="Commit";o(Nce,"isCommit");Rt(Nce,"isCommit");SI="Curve",CI="Edge",AI="Entry",A1="GitGraph";o(Mce,"isGitGraph");Rt(Mce,"isGitGraph");_I="Group",mb="Info";o(Ice,"isInfo");Rt(Ice,"isInfo");DI="Junction",_1="Merge";o(Oce,"isMerge");Rt(Oce,"isMerge");LI="Option",gb="Packet";o(Pce,"isPacket");Rt(Pce,"isPacket");yb="PacketBlock";o(Bce,"isPacketBlock");Rt(Bce,"isPacketBlock");vb="Pie";o(Fce,"isPie");Rt(Fce,"isPie");xb="PieSection";o($ce,"isPieSection");Rt($ce,"isPieSection");ZE="Radar",RI="Service",QE="Direction",zce=class extends tp{static{o(this,"MermaidAstReflection")}static{Rt(this,"MermaidAstReflection")}getAllTypes(){return[pb,XE,S1,jE,KE,C1,SI,QE,CI,AI,A1,_I,mb,DI,_1,LI,gb,yb,vb,xb,ZE,RI,NI]}computeIsSubtype(t,e){switch(t){case S1:case jE:case KE:case C1:case _1:return this.isSubtype(NI,e);case QE:return this.isSubtype(A1,e);default:return!1}}getReferenceType(t){let e=`${t.container.$type}:${t.property}`;switch(e){case"Entry:axis":return XE;default:throw new Error(`${e} is not a valid reference id.`)}}getTypeMetaData(t){switch(t){case pb:return{name:pb,properties:[{name:"accDescr"},{name:"accTitle"},{name:"edges",defaultValue:[]},{name:"groups",defaultValue:[]},{name:"junctions",defaultValue:[]},{name:"services",defaultValue:[]},{name:"title"}]};case XE:return{name:XE,properties:[{name:"label"},{name:"name"}]};case S1:return{name:S1,properties:[{name:"name"},{name:"order"}]};case jE:return{name:jE,properties:[{name:"branch"}]};case KE:return{name:KE,properties:[{name:"id"},{name:"parent"},{name:"tags",defaultValue:[]}]};case C1:return{name:C1,properties:[{name:"id"},{name:"message"},{name:"tags",defaultValue:[]},{name:"type"}]};case SI:return{name:SI,properties:[{name:"entries",defaultValue:[]},{name:"label"},{name:"name"}]};case CI:return{name:CI,properties:[{name:"lhsDir"},{name:"lhsGroup",defaultValue:!1},{name:"lhsId"},{name:"lhsInto",defaultValue:!1},{name:"rhsDir"},{name:"rhsGroup",defaultValue:!1},{name:"rhsId"},{name:"rhsInto",defaultValue:!1},{name:"title"}]};case AI:return{name:AI,properties:[{name:"axis"},{name:"value"}]};case A1:return{name:A1,properties:[{name:"accDescr"},{name:"accTitle"},{name:"statements",defaultValue:[]},{name:"title"}]};case _I:return{name:_I,properties:[{name:"icon"},{name:"id"},{name:"in"},{name:"title"}]};case mb:return{name:mb,properties:[{name:"accDescr"},{name:"accTitle"},{name:"title"}]};case DI:return{name:DI,properties:[{name:"id"},{name:"in"}]};case _1:return{name:_1,properties:[{name:"branch"},{name:"id"},{name:"tags",defaultValue:[]},{name:"type"}]};case LI:return{name:LI,properties:[{name:"name"},{name:"value",defaultValue:!1}]};case gb:return{name:gb,properties:[{name:"accDescr"},{name:"accTitle"},{name:"blocks",defaultValue:[]},{name:"title"}]};case yb:return{name:yb,properties:[{name:"bits"},{name:"end"},{name:"label"},{name:"start"}]};case vb:return{name:vb,properties:[{name:"accDescr"},{name:"accTitle"},{name:"sections",defaultValue:[]},{name:"showData",defaultValue:!1},{name:"title"}]};case xb:return{name:xb,properties:[{name:"label"},{name:"value"}]};case ZE:return{name:ZE,properties:[{name:"accDescr"},{name:"accTitle"},{name:"axes",defaultValue:[]},{name:"curves",defaultValue:[]},{name:"options",defaultValue:[]},{name:"title"}]};case RI:return{name:RI,properties:[{name:"icon"},{name:"iconText"},{name:"id"},{name:"in"},{name:"title"}]};case QE:return{name:QE,properties:[{name:"accDescr"},{name:"accTitle"},{name:"dir"},{name:"statements",defaultValue:[]},{name:"title"}]};default:return{name:t,properties:[]}}}},Vc=new zce,RFe=Rt(()=>Ece??(Ece=Xu(`{"$type":"Grammar","isDeclared":true,"name":"Info","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Info","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"info"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[],"cardinality":"*"},{"$type":"Group","elements":[{"$type":"Keyword","value":"showInfo"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[],"cardinality":"*"}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"?"}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@7"}},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@8"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[],"types":[],"usedGrammars":[]}`)),"InfoGrammar"),NFe=Rt(()=>Sce??(Sce=Xu(`{"$type":"Grammar","isDeclared":true,"name":"Packet","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Packet","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"packet-beta"},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]},{"$type":"Assignment","feature":"blocks","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}],"cardinality":"*"}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"PacketBlock","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Assignment","feature":"start","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"-"},{"$type":"Assignment","feature":"end","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}],"cardinality":"?"}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"+"},{"$type":"Assignment","feature":"bits","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}]}]},{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@8"}},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@9"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[],"types":[],"usedGrammars":[]}`)),"PacketGrammar"),MFe=Rt(()=>Cce??(Cce=Xu(`{"$type":"Grammar","isDeclared":true,"name":"Pie","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Pie","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"pie"},{"$type":"Assignment","feature":"showData","operator":"?=","terminal":{"$type":"Keyword","value":"showData"},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]},{"$type":"Assignment","feature":"sections","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}],"cardinality":"*"}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"PieSection","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}},{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@8"}},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@9"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[],"types":[],"usedGrammars":[]}`)),"PieGrammar"),IFe=Rt(()=>Ace??(Ace=Xu(`{"$type":"Grammar","isDeclared":true,"name":"Architecture","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Architecture","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"architecture-beta"},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}],"cardinality":"*"}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"Statement","definition":{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"groups","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"services","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}},{"$type":"Assignment","feature":"junctions","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}},{"$type":"Assignment","feature":"edges","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"LeftPort","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"lhsDir","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"RightPort","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"rhsDir","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}},{"$type":"Keyword","value":":"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"Arrow","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]},{"$type":"Assignment","feature":"lhsInto","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"--"},{"$type":"Group","elements":[{"$type":"Keyword","value":"-"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@29"},"arguments":[]}},{"$type":"Keyword","value":"-"}]}]},{"$type":"Assignment","feature":"rhsInto","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Group","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"group"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Assignment","feature":"icon","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@28"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@29"},"arguments":[]},"cardinality":"?"},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Service","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"service"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"iconText","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]}},{"$type":"Assignment","feature":"icon","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@28"},"arguments":[]}}],"cardinality":"?"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@29"},"arguments":[]},"cardinality":"?"},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Junction","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"junction"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Edge","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"lhsId","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Assignment","feature":"lhsGroup","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"Assignment","feature":"rhsId","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Assignment","feature":"rhsGroup","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"ARROW_DIRECTION","definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"L"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"R"}}]},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"T"}}]},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"B"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARROW_GROUP","definition":{"$type":"RegexToken","regex":"/\\\\{group\\\\}/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARROW_INTO","definition":{"$type":"RegexToken","regex":"/<|>/"},"fragment":false,"hidden":false},{"$type":"ParserRule","fragment":true,"name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@18"}},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@19"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false},{"$type":"TerminalRule","name":"ARCH_ICON","definition":{"$type":"RegexToken","regex":"/\\\\([\\\\w-:]+\\\\)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARCH_TITLE","definition":{"$type":"RegexToken","regex":"/\\\\[[\\\\w ]+\\\\]/"},"fragment":false,"hidden":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[],"types":[],"usedGrammars":[]}`)),"ArchitectureGrammar"),OFe=Rt(()=>_ce??(_ce=Xu(`{"$type":"Grammar","isDeclared":true,"name":"GitGraph","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"GitGraph","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"Group","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"Keyword","value":":"}]},{"$type":"Keyword","value":"gitGraph:"},{"$type":"Group","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]},{"$type":"Keyword","value":":"}]}]},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]},{"$type":"Assignment","feature":"statements","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}}],"cardinality":"*"}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Statement","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Direction","definition":{"$type":"Assignment","feature":"dir","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"LR"},{"$type":"Keyword","value":"TB"},{"$type":"Keyword","value":"BT"}]}},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Commit","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"commit"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"msg:","cardinality":"?"},{"$type":"Assignment","feature":"message","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"type:"},{"$type":"Assignment","feature":"type","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"NORMAL"},{"$type":"Keyword","value":"REVERSE"},{"$type":"Keyword","value":"HIGHLIGHT"}]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Branch","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"branch"},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@24"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"order:"},{"$type":"Assignment","feature":"order","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Merge","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"merge"},{"$type":"Assignment","feature":"branch","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@24"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]}},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"type:"},{"$type":"Assignment","feature":"type","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"NORMAL"},{"$type":"Keyword","value":"REVERSE"},{"$type":"Keyword","value":"HIGHLIGHT"}]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Checkout","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"checkout"},{"$type":"Keyword","value":"switch"}]},{"$type":"Assignment","feature":"branch","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@24"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"CherryPicking","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"cherry-pick"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"parent:"},{"$type":"Assignment","feature":"parent","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@14"}},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@15"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false},{"$type":"TerminalRule","name":"REFERENCE","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\\\w([-\\\\./\\\\w]*[-\\\\w])?/"},"fragment":false,"hidden":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[],"types":[],"usedGrammars":[]}`)),"GitGraphGrammar"),PFe=Rt(()=>Dce??(Dce=Xu(`{"$type":"Grammar","isDeclared":true,"name":"Radar","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Radar","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"radar-beta"},{"$type":"Keyword","value":"radar-beta:"},{"$type":"Group","elements":[{"$type":"Keyword","value":"radar-beta"},{"$type":"Keyword","value":":"}]}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]},{"$type":"Group","elements":[{"$type":"Keyword","value":"axis"},{"$type":"Assignment","feature":"axes","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"axes","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}}],"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"curve"},{"$type":"Assignment","feature":"curves","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"curves","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}}],"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"options","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"options","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}}],"cardinality":"*"}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}],"cardinality":"*"}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"Label","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}},{"$type":"Keyword","value":"]"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Axis","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[],"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Curve","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[],"cardinality":"?"},{"$type":"Keyword","value":"{"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"Entries","definition":{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"}]}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"DetailedEntry","returnType":{"$ref":"#/interfaces@0"},"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"axis","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@2"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},"deprecatedSyntax":false}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"NumberEntry","returnType":{"$ref":"#/interfaces@0"},"definition":{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Option","definition":{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"showLegend"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"ticks"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"max"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"min"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"graticule"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}}]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"GRATICULE","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"circle"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"polygon"}}]},"fragment":false,"hidden":false},{"$type":"ParserRule","fragment":true,"name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@15"}},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@16"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"interfaces":[{"$type":"Interface","name":"Entry","attributes":[{"$type":"TypeAttribute","name":"axis","isOptional":true,"type":{"$type":"ReferenceType","referenceType":{"$type":"SimpleType","typeRef":{"$ref":"#/rules@2"}}}},{"$type":"TypeAttribute","name":"value","type":{"$type":"SimpleType","primitiveType":"number"},"isOptional":false}],"superTypes":[]}],"definesHiddenTokens":false,"hiddenTokens":[],"types":[],"usedGrammars":[]}`)),"RadarGrammar"),BFe={languageId:"info",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},FFe={languageId:"packet",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},$Fe={languageId:"pie",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},zFe={languageId:"architecture",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},GFe={languageId:"gitGraph",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},VFe={languageId:"radar",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},ho={AstReflection:Rt(()=>new zce,"AstReflection")},MI={Grammar:Rt(()=>RFe(),"Grammar"),LanguageMetaData:Rt(()=>BFe,"LanguageMetaData"),parser:{}},II={Grammar:Rt(()=>NFe(),"Grammar"),LanguageMetaData:Rt(()=>FFe,"LanguageMetaData"),parser:{}},OI={Grammar:Rt(()=>MFe(),"Grammar"),LanguageMetaData:Rt(()=>$Fe,"LanguageMetaData"),parser:{}},PI={Grammar:Rt(()=>IFe(),"Grammar"),LanguageMetaData:Rt(()=>zFe,"LanguageMetaData"),parser:{}},BI={Grammar:Rt(()=>OFe(),"Grammar"),LanguageMetaData:Rt(()=>GFe,"LanguageMetaData"),parser:{}},FI={Grammar:Rt(()=>PFe(),"Grammar"),LanguageMetaData:Rt(()=>VFe,"LanguageMetaData"),parser:{}},UFe=/accDescr(?:[\t ]*:([^\n\r]*)|\s*{([^}]*)})/,HFe=/accTitle[\t ]*:([^\n\r]*)/,WFe=/title([\t ][^\n\r]*|)/,qFe={ACC_DESCR:UFe,ACC_TITLE:HFe,TITLE:WFe},D1=class extends Ep{static{o(this,"AbstractMermaidValueConverter")}static{Rt(this,"AbstractMermaidValueConverter")}runConverter(t,e,r){let n=this.runCommonConverter(t,e,r);return n===void 0&&(n=this.runCustomConverter(t,e,r)),n===void 0?super.runConverter(t,e,r):n}runCommonConverter(t,e,r){let n=qFe[t.name];if(n===void 0)return;let i=n.exec(e);if(i!==null){if(i[1]!==void 0)return i[1].trim().replace(/[\t ]{2,}/gm," ");if(i[2]!==void 0)return i[2].replace(/^\s*/gm,"").replace(/\s+$/gm,"").replace(/[\t ]{2,}/gm," ").replace(/[\n\r]{2,}/gm,` -`)}}},ju=class extends D1{static{o(this,"CommonValueConverter")}static{Rt(this,"CommonValueConverter")}runCustomConverter(t,e,r){}},Gs=class extends Yu{static{o(this,"AbstractMermaidTokenBuilder")}static{Rt(this,"AbstractMermaidTokenBuilder")}constructor(t){super(),this.keywords=new Set(t)}buildKeywordTokens(t,e,r){let n=super.buildKeywordTokens(t,e,r);return n.forEach(i=>{this.keywords.has(i.name)&&i.PATTERN!==void 0&&(i.PATTERN=new RegExp(i.PATTERN.toString()+"(?:(?=%%)|(?!\\S))"))}),n}},YFe=class extends Gs{static{o(this,"CommonTokenBuilder")}static{Rt(this,"CommonTokenBuilder")}}});function eS(t=ps){let e=ui(ds(t),ho),r=ui(fs({shared:e}),BI,JE);return e.ServiceRegistry.register(r),{shared:e,GitGraph:r}}var XFe,JE,$I=N(()=>{"use strict";Vs();jo();XFe=class extends Gs{static{o(this,"GitGraphTokenBuilder")}static{Rt(this,"GitGraphTokenBuilder")}constructor(){super(["gitGraph"])}},JE={parser:{TokenBuilder:Rt(()=>new XFe,"TokenBuilder"),ValueConverter:Rt(()=>new ju,"ValueConverter")}};o(eS,"createGitGraphServices");Rt(eS,"createGitGraphServices")});function rS(t=ps){let e=ui(ds(t),ho),r=ui(fs({shared:e}),MI,tS);return e.ServiceRegistry.register(r),{shared:e,Info:r}}var jFe,tS,zI=N(()=>{"use strict";Vs();jo();jFe=class extends Gs{static{o(this,"InfoTokenBuilder")}static{Rt(this,"InfoTokenBuilder")}constructor(){super(["info","showInfo"])}},tS={parser:{TokenBuilder:Rt(()=>new jFe,"TokenBuilder"),ValueConverter:Rt(()=>new ju,"ValueConverter")}};o(rS,"createInfoServices");Rt(rS,"createInfoServices")});function iS(t=ps){let e=ui(ds(t),ho),r=ui(fs({shared:e}),II,nS);return e.ServiceRegistry.register(r),{shared:e,Packet:r}}var KFe,nS,GI=N(()=>{"use strict";Vs();jo();KFe=class extends Gs{static{o(this,"PacketTokenBuilder")}static{Rt(this,"PacketTokenBuilder")}constructor(){super(["packet-beta"])}},nS={parser:{TokenBuilder:Rt(()=>new KFe,"TokenBuilder"),ValueConverter:Rt(()=>new ju,"ValueConverter")}};o(iS,"createPacketServices");Rt(iS,"createPacketServices")});function sS(t=ps){let e=ui(ds(t),ho),r=ui(fs({shared:e}),OI,aS);return e.ServiceRegistry.register(r),{shared:e,Pie:r}}var QFe,ZFe,aS,VI=N(()=>{"use strict";Vs();jo();QFe=class extends Gs{static{o(this,"PieTokenBuilder")}static{Rt(this,"PieTokenBuilder")}constructor(){super(["pie","showData"])}},ZFe=class extends D1{static{o(this,"PieValueConverter")}static{Rt(this,"PieValueConverter")}runCustomConverter(t,e,r){if(t.name==="PIE_SECTION_LABEL")return e.replace(/"/g,"").trim()}},aS={parser:{TokenBuilder:Rt(()=>new QFe,"TokenBuilder"),ValueConverter:Rt(()=>new ZFe,"ValueConverter")}};o(sS,"createPieServices");Rt(sS,"createPieServices")});function lS(t=ps){let e=ui(ds(t),ho),r=ui(fs({shared:e}),PI,oS);return e.ServiceRegistry.register(r),{shared:e,Architecture:r}}var JFe,e$e,oS,UI=N(()=>{"use strict";Vs();jo();JFe=class extends Gs{static{o(this,"ArchitectureTokenBuilder")}static{Rt(this,"ArchitectureTokenBuilder")}constructor(){super(["architecture"])}},e$e=class extends D1{static{o(this,"ArchitectureValueConverter")}static{Rt(this,"ArchitectureValueConverter")}runCustomConverter(t,e,r){if(t.name==="ARCH_ICON")return e.replace(/[()]/g,"").trim();if(t.name==="ARCH_TEXT_ICON")return e.replace(/["()]/g,"");if(t.name==="ARCH_TITLE")return e.replace(/[[\]]/g,"").trim()}},oS={parser:{TokenBuilder:Rt(()=>new JFe,"TokenBuilder"),ValueConverter:Rt(()=>new e$e,"ValueConverter")}};o(lS,"createArchitectureServices");Rt(lS,"createArchitectureServices")});function uS(t=ps){let e=ui(ds(t),ho),r=ui(fs({shared:e}),FI,cS);return e.ServiceRegistry.register(r),{shared:e,Radar:r}}var t$e,cS,HI=N(()=>{"use strict";Vs();jo();t$e=class extends Gs{static{o(this,"RadarTokenBuilder")}static{Rt(this,"RadarTokenBuilder")}constructor(){super(["radar-beta"])}},cS={parser:{TokenBuilder:Rt(()=>new t$e,"TokenBuilder"),ValueConverter:Rt(()=>new ju,"ValueConverter")}};o(uS,"createRadarServices");Rt(uS,"createRadarServices")});var Gce={};hr(Gce,{InfoModule:()=>tS,createInfoServices:()=>rS});var Vce=N(()=>{"use strict";zI();Vs()});var Uce={};hr(Uce,{PacketModule:()=>nS,createPacketServices:()=>iS});var Hce=N(()=>{"use strict";GI();Vs()});var Wce={};hr(Wce,{PieModule:()=>aS,createPieServices:()=>sS});var qce=N(()=>{"use strict";VI();Vs()});var Yce={};hr(Yce,{ArchitectureModule:()=>oS,createArchitectureServices:()=>lS});var Xce=N(()=>{"use strict";UI();Vs()});var jce={};hr(jce,{GitGraphModule:()=>JE,createGitGraphServices:()=>eS});var Kce=N(()=>{"use strict";$I();Vs()});var Qce={};hr(Qce,{RadarModule:()=>cS,createRadarServices:()=>uS});var Zce=N(()=>{"use strict";HI();Vs()});async function fo(t,e){let r=r$e[t];if(!r)throw new Error(`Unknown diagram type: ${t}`);yf[t]||await r();let i=yf[t].parse(e);if(i.lexerErrors.length>0||i.parserErrors.length>0)throw new n$e(i);return i.value}var yf,r$e,n$e,Lp=N(()=>{"use strict";$I();zI();GI();VI();UI();HI();Vs();yf={},r$e={info:Rt(async()=>{let{createInfoServices:t}=await Promise.resolve().then(()=>(Vce(),Gce)),e=t().Info.parser.LangiumParser;yf.info=e},"info"),packet:Rt(async()=>{let{createPacketServices:t}=await Promise.resolve().then(()=>(Hce(),Uce)),e=t().Packet.parser.LangiumParser;yf.packet=e},"packet"),pie:Rt(async()=>{let{createPieServices:t}=await Promise.resolve().then(()=>(qce(),Wce)),e=t().Pie.parser.LangiumParser;yf.pie=e},"pie"),architecture:Rt(async()=>{let{createArchitectureServices:t}=await Promise.resolve().then(()=>(Xce(),Yce)),e=t().Architecture.parser.LangiumParser;yf.architecture=e},"architecture"),gitGraph:Rt(async()=>{let{createGitGraphServices:t}=await Promise.resolve().then(()=>(Kce(),jce)),e=t().GitGraph.parser.LangiumParser;yf.gitGraph=e},"gitGraph"),radar:Rt(async()=>{let{createRadarServices:t}=await Promise.resolve().then(()=>(Zce(),Qce)),e=t().Radar.parser.LangiumParser;yf.radar=e},"radar")};o(fo,"parse");Rt(fo,"parse");n$e=class extends Error{static{o(this,"MermaidParseError")}constructor(t){let e=t.lexerErrors.map(n=>n.message).join(` +`)}return r}},ZE=class{static{o(this,"JSDocLineImpl")}constructor(e,r){this.text=e,this.range=r}toString(){return this.text}toMarkdown(){return this.text}};o(fue,"fillNewlines")});var fb,HI=N(()=>{"use strict";cs();UI();fb=class{static{o(this,"JSDocDocumentationProvider")}constructor(e){this.indexManager=e.shared.workspace.IndexManager,this.commentProvider=e.documentation.CommentProvider}getDocumentation(e){let r=this.commentProvider.getComment(e);if(r&&GI(r))return zI(r).toMarkdown({renderLink:o((i,a)=>this.documentationLinkRenderer(e,i,a),"renderLink"),renderTag:o(i=>this.documentationTagRenderer(e,i),"renderTag")})}documentationLinkRenderer(e,r,n){var i;let a=(i=this.findNameInPrecomputedScopes(e,r))!==null&&i!==void 0?i:this.findNameInGlobalScope(e,r);if(a&&a.nameSegment){let s=a.nameSegment.range.start.line+1,l=a.nameSegment.range.start.character+1,u=a.documentUri.with({fragment:`L${s},${l}`});return`[${n}](${u.toString()})`}else return}documentationTagRenderer(e,r){}findNameInPrecomputedScopes(e,r){let i=$a(e).precomputedScopes;if(!i)return;let a=e;do{let l=i.get(a).find(u=>u.name===r);if(l)return l;a=a.$container}while(a)}findNameInGlobalScope(e,r){return this.indexManager.allElements().find(i=>i.name===r)}}});var db,WI=N(()=>{"use strict";WE();Ol();db=class{static{o(this,"DefaultCommentProvider")}constructor(e){this.grammarConfig=()=>e.parser.GrammarConfig}getComment(e){var r;return CI(e)?e.$comment:(r=uN(e.$cstNode,this.grammarConfig().multilineCommentRules))===null||r===void 0?void 0:r.text}}});var pb,qI,YI,XI=N(()=>{"use strict";Qo();YE();pb=class{static{o(this,"DefaultAsyncParser")}constructor(e){this.syncParser=e.parser.LangiumParser}parse(e,r){return Promise.resolve(this.syncParser.parse(e))}},qI=class{static{o(this,"AbstractThreadedAsyncParser")}constructor(e){this.threadCount=8,this.terminationDelay=200,this.workerPool=[],this.queue=[],this.hydrator=e.serializer.Hydrator}initializeWorkers(){for(;this.workerPool.length{if(this.queue.length>0){let r=this.queue.shift();r&&(e.lock(),r.resolve(e))}}),this.workerPool.push(e)}}async parse(e,r){let n=await this.acquireParserWorker(r),i=new ps,a,s=r.onCancellationRequested(()=>{a=setTimeout(()=>{this.terminateWorker(n)},this.terminationDelay)});return n.parse(e).then(l=>{let u=this.hydrator.hydrate(l);i.resolve(u)}).catch(l=>{i.reject(l)}).finally(()=>{s.dispose(),clearTimeout(a)}),i.promise}terminateWorker(e){e.terminate();let r=this.workerPool.indexOf(e);r>=0&&this.workerPool.splice(r,1)}async acquireParserWorker(e){this.initializeWorkers();for(let n of this.workerPool)if(n.ready)return n.lock(),n;let r=new ps;return e.onCancellationRequested(()=>{let n=this.queue.indexOf(r);n>=0&&this.queue.splice(n,1),r.reject(Gc)}),this.queue.push(r),r.promise}},YI=class{static{o(this,"ParserWorker")}get ready(){return this._ready}get onReady(){return this.onReadyEmitter.event}constructor(e,r,n,i){this.onReadyEmitter=new Zn.Emitter,this.deferred=new ps,this._ready=!0,this._parsing=!1,this.sendMessage=e,this._terminate=i,r(a=>{let s=a;this.deferred.resolve(s),this.unlock()}),n(a=>{this.deferred.reject(a),this.unlock()})}terminate(){this.deferred.reject(Gc),this._terminate()}lock(){this._ready=!1}unlock(){this._parsing=!1,this._ready=!0,this.onReadyEmitter.fire()}parse(e){if(this._parsing)throw new Error("Parser worker is busy");return this._parsing=!0,this.deferred=new ps,this.sendMessage(e),this.deferred.promise}}});var mb,jI=N(()=>{"use strict";Ko();Qo();mb=class{static{o(this,"DefaultWorkspaceLock")}constructor(){this.previousTokenSource=new yr.CancellationTokenSource,this.writeQueue=[],this.readQueue=[],this.done=!0}write(e){this.cancelWrite();let r=GE();return this.previousTokenSource=r,this.enqueue(this.writeQueue,e,r.token)}read(e){return this.enqueue(this.readQueue,e)}enqueue(e,r,n=yr.CancellationToken.None){let i=new ps,a={action:r,deferred:i,cancellationToken:n};return e.push(a),this.performNextOperation(),i.promise}async performNextOperation(){if(!this.done)return;let e=[];if(this.writeQueue.length>0)e.push(this.writeQueue.shift());else if(this.readQueue.length>0)e.push(...this.readQueue.splice(0,this.readQueue.length));else return;this.done=!1,await Promise.all(e.map(async({action:r,deferred:n,cancellationToken:i})=>{try{let a=await Promise.resolve().then(()=>r(i));n.resolve(a)}catch(a){Vc(a)?n.resolve(void 0):n.reject(a)}})),this.done=!0,this.performNextOperation()}cancelWrite(){this.previousTokenSource.cancel()}}});var gb,KI=N(()=>{"use strict";RE();Pc();Il();cs();T1();Ol();gb=class{static{o(this,"DefaultHydrator")}constructor(e){this.grammarElementIdMap=new _p,this.tokenTypeIdMap=new _p,this.grammar=e.Grammar,this.lexer=e.parser.Lexer,this.linker=e.references.Linker}dehydrate(e){return{lexerErrors:e.lexerErrors,lexerReport:e.lexerReport?this.dehydrateLexerReport(e.lexerReport):void 0,parserErrors:e.parserErrors.map(r=>Object.assign(Object.assign({},r),{message:r.message})),value:this.dehydrateAstNode(e.value,this.createDehyrationContext(e.value))}}dehydrateLexerReport(e){return e}createDehyrationContext(e){let r=new Map,n=new Map;for(let i of jo(e))r.set(i,{});if(e.$cstNode)for(let i of sp(e.$cstNode))n.set(i,{});return{astNodes:r,cstNodes:n}}dehydrateAstNode(e,r){let n=r.astNodes.get(e);n.$type=e.$type,n.$containerIndex=e.$containerIndex,n.$containerProperty=e.$containerProperty,e.$cstNode!==void 0&&(n.$cstNode=this.dehydrateCstNode(e.$cstNode,r));for(let[i,a]of Object.entries(e))if(!i.startsWith("$"))if(Array.isArray(a)){let s=[];n[i]=s;for(let l of a)si(l)?s.push(this.dehydrateAstNode(l,r)):ya(l)?s.push(this.dehydrateReference(l,r)):s.push(l)}else si(a)?n[i]=this.dehydrateAstNode(a,r):ya(a)?n[i]=this.dehydrateReference(a,r):a!==void 0&&(n[i]=a);return n}dehydrateReference(e,r){let n={};return n.$refText=e.$refText,e.$refNode&&(n.$refNode=r.cstNodes.get(e.$refNode)),n}dehydrateCstNode(e,r){let n=r.cstNodes.get(e);return U2(e)?n.fullText=e.fullText:n.grammarSource=this.getGrammarElementId(e.grammarSource),n.hidden=e.hidden,n.astNode=r.astNodes.get(e.astNode),Ml(e)?n.content=e.content.map(i=>this.dehydrateCstNode(i,r)):hf(e)&&(n.tokenType=e.tokenType.name,n.offset=e.offset,n.length=e.length,n.startLine=e.range.start.line,n.startColumn=e.range.start.character,n.endLine=e.range.end.line,n.endColumn=e.range.end.character),n}hydrate(e){let r=e.value,n=this.createHydrationContext(r);return"$cstNode"in r&&this.hydrateCstNode(r.$cstNode,n),{lexerErrors:e.lexerErrors,lexerReport:e.lexerReport,parserErrors:e.parserErrors,value:this.hydrateAstNode(r,n)}}createHydrationContext(e){let r=new Map,n=new Map;for(let a of jo(e))r.set(a,{});let i;if(e.$cstNode)for(let a of sp(e.$cstNode)){let s;"fullText"in a?(s=new p1(a.fullText),i=s):"content"in a?s=new Sp:"tokenType"in a&&(s=this.hydrateCstLeafNode(a)),s&&(n.set(a,s),s.root=i)}return{astNodes:r,cstNodes:n}}hydrateAstNode(e,r){let n=r.astNodes.get(e);n.$type=e.$type,n.$containerIndex=e.$containerIndex,n.$containerProperty=e.$containerProperty,e.$cstNode&&(n.$cstNode=r.cstNodes.get(e.$cstNode));for(let[i,a]of Object.entries(e))if(!i.startsWith("$"))if(Array.isArray(a)){let s=[];n[i]=s;for(let l of a)si(l)?s.push(this.setParent(this.hydrateAstNode(l,r),n)):ya(l)?s.push(this.hydrateReference(l,n,i,r)):s.push(l)}else si(a)?n[i]=this.setParent(this.hydrateAstNode(a,r),n):ya(a)?n[i]=this.hydrateReference(a,n,i,r):a!==void 0&&(n[i]=a);return n}setParent(e,r){return e.$container=r,e}hydrateReference(e,r,n,i){return this.linker.buildReference(r,n,i.cstNodes.get(e.$refNode),e.$refText)}hydrateCstNode(e,r,n=0){let i=r.cstNodes.get(e);if(typeof e.grammarSource=="number"&&(i.grammarSource=this.getGrammarElement(e.grammarSource)),i.astNode=r.astNodes.get(e.astNode),Ml(i))for(let a of e.content){let s=this.hydrateCstNode(a,r,n++);i.content.push(s)}return i}hydrateCstLeafNode(e){let r=this.getTokenType(e.tokenType),n=e.offset,i=e.length,a=e.startLine,s=e.startColumn,l=e.endLine,u=e.endColumn,h=e.hidden;return new Ep(n,i,{start:{line:a,character:s},end:{line:l,character:u}},r,h)}getTokenType(e){return this.lexer.definition[e]}getGrammarElementId(e){if(e)return this.grammarElementIdMap.size===0&&this.createGrammarElementIdMap(),this.grammarElementIdMap.get(e)}getGrammarElement(e){return this.grammarElementIdMap.size===0&&this.createGrammarElementIdMap(),this.grammarElementIdMap.getKey(e)}createGrammarElementIdMap(){let e=0;for(let r of jo(this.grammar))Q2(r)&&this.grammarElementIdMap.set(r,e++)}}});function va(t){return{documentation:{CommentProvider:o(e=>new db(e),"CommentProvider"),DocumentationProvider:o(e=>new fb(e),"DocumentationProvider")},parser:{AsyncParser:o(e=>new pb(e),"AsyncParser"),GrammarConfig:o(e=>QN(e),"GrammarConfig"),LangiumParser:o(e=>aI(e),"LangiumParser"),CompletionParser:o(e=>nI(e),"CompletionParser"),ValueConverter:o(()=>new Ap,"ValueConverter"),TokenBuilder:o(()=>new ju,"TokenBuilder"),Lexer:o(e=>new Rp(e),"Lexer"),ParserErrorMessageProvider:o(()=>new m1,"ParserErrorMessageProvider"),LexerErrorMessageProvider:o(()=>new cb,"LexerErrorMessageProvider")},workspace:{AstNodeLocator:o(()=>new ib,"AstNodeLocator"),AstNodeDescriptionProvider:o(e=>new rb(e),"AstNodeDescriptionProvider"),ReferenceDescriptionProvider:o(e=>new nb(e),"ReferenceDescriptionProvider")},references:{Linker:o(e=>new Hx(e),"Linker"),NameProvider:o(()=>new Wx,"NameProvider"),ScopeProvider:o(e=>new Kx(e),"ScopeProvider"),ScopeComputation:o(e=>new Yx(e),"ScopeComputation"),References:o(e=>new qx(e),"References")},serializer:{Hydrator:o(e=>new gb(e),"Hydrator"),JsonSerializer:o(e=>new Qx(e),"JsonSerializer")},validation:{DocumentValidator:o(e=>new tb(e),"DocumentValidator"),ValidationRegistry:o(e=>new Jx(e),"ValidationRegistry")},shared:o(()=>t.shared,"shared")}}function xa(t){return{ServiceRegistry:o(e=>new Zx(e),"ServiceRegistry"),workspace:{LangiumDocuments:o(e=>new Ux(e),"LangiumDocuments"),LangiumDocumentFactory:o(e=>new Vx(e),"LangiumDocumentFactory"),DocumentBuilder:o(e=>new sb(e),"DocumentBuilder"),IndexManager:o(e=>new ob(e),"IndexManager"),WorkspaceManager:o(e=>new lb(e),"WorkspaceManager"),FileSystemProvider:o(e=>t.fileSystemProvider(e),"FileSystemProvider"),WorkspaceLock:o(()=>new mb,"WorkspaceLock"),ConfigurationProvider:o(e=>new ab(e),"ConfigurationProvider")}}}var QI=N(()=>{"use strict";ZN();iI();sI();PE();oI();bI();TI();wI();kI();SI();WE();AI();_I();eb();DI();LI();RI();MI();b1();II();OI();KE();HI();WI();zx();XI();jI();KI();o(va,"createDefaultCoreModule");o(xa,"createDefaultSharedCoreModule")});function Gn(t,e,r,n,i,a,s,l,u){let h=[t,e,r,n,i,a,s,l,u].reduce(JE,{});return Tue(h)}function bue(t){if(t&&t[xue])for(let e of Object.values(t))bue(e);return t}function Tue(t,e){let r=new Proxy({},{deleteProperty:o(()=>!1,"deleteProperty"),set:o(()=>{throw new Error("Cannot set property on injected service container")},"set"),get:o((n,i)=>i===xue?!0:vue(n,i,t,e||r),"get"),getOwnPropertyDescriptor:o((n,i)=>(vue(n,i,t,e||r),Object.getOwnPropertyDescriptor(n,i)),"getOwnPropertyDescriptor"),has:o((n,i)=>i in t,"has"),ownKeys:o(()=>[...Object.getOwnPropertyNames(t)],"ownKeys")});return r}function vue(t,e,r,n){if(e in t){if(t[e]instanceof Error)throw new Error("Construction failure. Please make sure that your dependencies are constructable.",{cause:t[e]});if(t[e]===yue)throw new Error('Cycle detected. Please make "'+String(e)+'" lazy. Visit https://langium.org/docs/reference/configuration-services/#resolving-cyclic-dependencies');return t[e]}else if(e in r){let i=r[e];t[e]=yue;try{t[e]=typeof i=="function"?i(n):Tue(i,n)}catch(a){throw t[e]=a instanceof Error?a:void 0,a}return t[e]}else return}function JE(t,e){if(e){for(let[r,n]of Object.entries(e))if(n!==void 0){let i=t[r];i!==null&&n!==null&&typeof i=="object"&&typeof n=="object"?t[r]=JE(i,n):t[r]=n}}return t}var ZI,xue,yue,JI=N(()=>{"use strict";(function(t){t.merge=(e,r)=>JE(JE({},e),r)})(ZI||(ZI={}));o(Gn,"inject");xue=Symbol("isProxy");o(bue,"eagerLoad");o(Tue,"_inject");yue=Symbol();o(vue,"_resolve");o(JE,"_merge")});var wue=N(()=>{"use strict"});var kue=N(()=>{"use strict";WI();HI();UI()});var Eue=N(()=>{"use strict"});var Sue=N(()=>{"use strict";ZN();Eue()});var eO,Np,eS,tO,Cue=N(()=>{"use strict";mf();PE();KE();eO={indentTokenName:"INDENT",dedentTokenName:"DEDENT",whitespaceTokenName:"WS",ignoreIndentationDelimiters:[]};(function(t){t.REGULAR="indentation-sensitive",t.IGNORE_INDENTATION="ignore-indentation"})(Np||(Np={}));eS=class extends ju{static{o(this,"IndentationAwareTokenBuilder")}constructor(e=eO){super(),this.indentationStack=[0],this.whitespaceRegExp=/[ \t]+/y,this.options=Object.assign(Object.assign({},eO),e),this.indentTokenType=df({name:this.options.indentTokenName,pattern:this.indentMatcher.bind(this),line_breaks:!1}),this.dedentTokenType=df({name:this.options.dedentTokenName,pattern:this.dedentMatcher.bind(this),line_breaks:!1})}buildTokens(e,r){let n=super.buildTokens(e,r);if(!jE(n))throw new Error("Invalid tokens built by default builder");let{indentTokenName:i,dedentTokenName:a,whitespaceTokenName:s,ignoreIndentationDelimiters:l}=this.options,u,h,f,d=[];for(let p of n){for(let[m,g]of l)p.name===m?p.PUSH_MODE=Np.IGNORE_INDENTATION:p.name===g&&(p.POP_MODE=!0);p.name===a?u=p:p.name===i?h=p:p.name===s?f=p:d.push(p)}if(!u||!h||!f)throw new Error("Some indentation/whitespace tokens not found!");return l.length>0?{modes:{[Np.REGULAR]:[u,h,...d,f],[Np.IGNORE_INDENTATION]:[...d,f]},defaultMode:Np.REGULAR}:[u,h,f,...d]}flushLexingReport(e){let r=super.flushLexingReport(e);return Object.assign(Object.assign({},r),{remainingDedents:this.flushRemainingDedents(e)})}isStartOfLine(e,r){return r===0||`\r +`.includes(e[r-1])}matchWhitespace(e,r,n,i){var a;this.whitespaceRegExp.lastIndex=r;let s=this.whitespaceRegExp.exec(e);return{currIndentLevel:(a=s?.[0].length)!==null&&a!==void 0?a:0,prevIndentLevel:this.indentationStack.at(-1),match:s}}createIndentationTokenInstance(e,r,n,i){let a=this.getLineNumber(r,i);return Wu(e,n,i,i+n.length,a,a,1,n.length)}getLineNumber(e,r){return e.substring(0,r).split(/\r\n|\r|\n/).length}indentMatcher(e,r,n,i){if(!this.isStartOfLine(e,r))return null;let{currIndentLevel:a,prevIndentLevel:s,match:l}=this.matchWhitespace(e,r,n,i);return a<=s?null:(this.indentationStack.push(a),l)}dedentMatcher(e,r,n,i){var a,s,l,u;if(!this.isStartOfLine(e,r))return null;let{currIndentLevel:h,prevIndentLevel:f,match:d}=this.matchWhitespace(e,r,n,i);if(h>=f)return null;let p=this.indentationStack.lastIndexOf(h);if(p===-1)return this.diagnostics.push({severity:"error",message:`Invalid dedent level ${h} at offset: ${r}. Current indentation stack: ${this.indentationStack}`,offset:r,length:(s=(a=d?.[0])===null||a===void 0?void 0:a.length)!==null&&s!==void 0?s:0,line:this.getLineNumber(e,r),column:1}),null;let m=this.indentationStack.length-p-1,g=(u=(l=e.substring(0,r).match(/[\r\n]+$/))===null||l===void 0?void 0:l[0].length)!==null&&u!==void 0?u:1;for(let y=0;y1;)r.push(this.createIndentationTokenInstance(this.dedentTokenType,e,"",e.length)),this.indentationStack.pop();return this.indentationStack=[0],r}},tO=class extends Rp{static{o(this,"IndentationAwareLexer")}constructor(e){if(super(e),e.parser.TokenBuilder instanceof eS)this.indentationTokenBuilder=e.parser.TokenBuilder;else throw new Error("IndentationAwareLexer requires an accompanying IndentationAwareTokenBuilder")}tokenize(e,r=XE){let n=super.tokenize(e),i=n.report;r?.mode==="full"&&n.tokens.push(...i.remainingDedents),i.remainingDedents=[];let{indentTokenType:a,dedentTokenType:s}=this.indentationTokenBuilder,l=a.tokenTypeIdx,u=s.tokenTypeIdx,h=[],f=n.tokens.length-1;for(let d=0;d=0&&h.push(n.tokens[f]),n.tokens=h,n}}});var Aue=N(()=>{"use strict"});var _ue=N(()=>{"use strict";XI();iI();RE();Cue();sI();zx();KE();OE();Aue();PE();oI()});var Due=N(()=>{"use strict";bI();TI();wI();EI();kI();SI()});var Lue=N(()=>{"use strict";KI();WE()});var tS,ba,rO=N(()=>{"use strict";tS=class{static{o(this,"EmptyFileSystemProvider")}readFile(){throw new Error("No file system is available.")}async readDirectory(){return[]}},ba={fileSystemProvider:o(()=>new tS,"fileSystemProvider")}});function oze(){let t=Gn(xa(ba),sze),e=Gn(va({shared:t}),aze);return t.ServiceRegistry.register(e),e}function Hc(t){var e;let r=oze(),n=r.serializer.JsonSerializer.deserialize(t);return r.shared.workspace.LangiumDocumentFactory.fromModel(n,ms.parse(`memory://${(e=n.name)!==null&&e!==void 0?e:"grammar"}.langium`)),n}var aze,sze,Rue=N(()=>{"use strict";QI();JI();Pc();rO();Uc();aze={Grammar:o(()=>{},"Grammar"),LanguageMetaData:o(()=>({caseInsensitive:!1,fileExtensions:[".langium"],languageId:"langium"}),"LanguageMetaData")},sze={AstReflection:o(()=>new Og,"AstReflection")};o(oze,"createMinimalGrammarServices");o(Hc,"loadGrammarFromJson")});var Gr={};ur(Gr,{AstUtils:()=>Ik,BiMap:()=>_p,Cancellation:()=>yr,ContextCache:()=>Dp,CstUtils:()=>Ek,DONE_RESULT:()=>Ba,Deferred:()=>ps,Disposable:()=>vf,DisposableCache:()=>k1,DocumentCache:()=>UE,EMPTY_STREAM:()=>H2,ErrorWithLocation:()=>lp,GrammarUtils:()=>$k,MultiMap:()=>zl,OperationCancelled:()=>Gc,Reduction:()=>jm,RegExpUtils:()=>Bk,SimpleCache:()=>jx,StreamImpl:()=>co,TreeStreamImpl:()=>Mc,URI:()=>ms,UriUtils:()=>gs,WorkspaceCache:()=>E1,assertUnreachable:()=>Oc,delayNextTick:()=>gI,interruptAndCheck:()=>wi,isOperationCancelled:()=>Vc,loadGrammarFromJson:()=>Hc,setInterruptionPeriod:()=>tue,startCancelableOperation:()=>GE,stream:()=>en});var Nue=N(()=>{"use strict";HE();YE();Cr(Gr,Zn);T1();NI();Sk();Rue();Qo();Gs();Uc();cs();Ko();Ol();Fl();$g()});var Mue=N(()=>{"use strict";_I();eb()});var Iue=N(()=>{"use strict";DI();LI();RI();MI();b1();rO();II();jI();OI()});var Ta={};ur(Ta,{AbstractAstReflection:()=>ip,AbstractCstNode:()=>Px,AbstractLangiumParser:()=>Bx,AbstractParserErrorMessageProvider:()=>ME,AbstractThreadedAsyncParser:()=>qI,AstUtils:()=>Ik,BiMap:()=>_p,Cancellation:()=>yr,CompositeCstNodeImpl:()=>Sp,ContextCache:()=>Dp,CstNodeBuilder:()=>Ox,CstUtils:()=>Ek,DEFAULT_TOKENIZE_OPTIONS:()=>XE,DONE_RESULT:()=>Ba,DatatypeSymbol:()=>NE,DefaultAstNodeDescriptionProvider:()=>rb,DefaultAstNodeLocator:()=>ib,DefaultAsyncParser:()=>pb,DefaultCommentProvider:()=>db,DefaultConfigurationProvider:()=>ab,DefaultDocumentBuilder:()=>sb,DefaultDocumentValidator:()=>tb,DefaultHydrator:()=>gb,DefaultIndexManager:()=>ob,DefaultJsonSerializer:()=>Qx,DefaultLangiumDocumentFactory:()=>Vx,DefaultLangiumDocuments:()=>Ux,DefaultLexer:()=>Rp,DefaultLexerErrorMessageProvider:()=>cb,DefaultLinker:()=>Hx,DefaultNameProvider:()=>Wx,DefaultReferenceDescriptionProvider:()=>nb,DefaultReferences:()=>qx,DefaultScopeComputation:()=>Yx,DefaultScopeProvider:()=>Kx,DefaultServiceRegistry:()=>Zx,DefaultTokenBuilder:()=>ju,DefaultValueConverter:()=>Ap,DefaultWorkspaceLock:()=>mb,DefaultWorkspaceManager:()=>lb,Deferred:()=>ps,Disposable:()=>vf,DisposableCache:()=>k1,DocumentCache:()=>UE,DocumentState:()=>kn,DocumentValidator:()=>Zo,EMPTY_SCOPE:()=>q$e,EMPTY_STREAM:()=>H2,EmptyFileSystem:()=>ba,EmptyFileSystemProvider:()=>tS,ErrorWithLocation:()=>lp,GrammarAST:()=>J2,GrammarUtils:()=>$k,IndentationAwareLexer:()=>tO,IndentationAwareTokenBuilder:()=>eS,JSDocDocumentationProvider:()=>fb,LangiumCompletionParser:()=>$x,LangiumParser:()=>Fx,LangiumParserErrorMessageProvider:()=>m1,LeafCstNodeImpl:()=>Ep,LexingMode:()=>Np,MapScope:()=>Xx,Module:()=>ZI,MultiMap:()=>zl,OperationCancelled:()=>Gc,ParserWorker:()=>YI,Reduction:()=>jm,RegExpUtils:()=>Bk,RootCstNodeImpl:()=>p1,SimpleCache:()=>jx,StreamImpl:()=>co,StreamScope:()=>w1,TextDocument:()=>v1,TreeStreamImpl:()=>Mc,URI:()=>ms,UriUtils:()=>gs,ValidationCategory:()=>S1,ValidationRegistry:()=>Jx,ValueConverter:()=>zc,WorkspaceCache:()=>E1,assertUnreachable:()=>Oc,createCompletionParser:()=>nI,createDefaultCoreModule:()=>va,createDefaultSharedCoreModule:()=>xa,createGrammarConfig:()=>QN,createLangiumParser:()=>aI,createParser:()=>Gx,delayNextTick:()=>gI,diagnosticData:()=>Lp,eagerLoad:()=>bue,getDiagnosticRange:()=>cue,indentationBuilderDefaultOptions:()=>eO,inject:()=>Gn,interruptAndCheck:()=>wi,isAstNode:()=>si,isAstNodeDescription:()=>sN,isAstNodeWithComment:()=>CI,isCompositeCstNode:()=>Ml,isIMultiModeLexerDefinition:()=>BI,isJSDoc:()=>GI,isLeafCstNode:()=>hf,isLinkingError:()=>ap,isNamed:()=>oue,isOperationCancelled:()=>Vc,isReference:()=>ya,isRootCstNode:()=>U2,isTokenTypeArray:()=>jE,isTokenTypeDictionary:()=>PI,loadGrammarFromJson:()=>Hc,parseJSDoc:()=>zI,prepareLangiumParser:()=>Xce,setInterruptionPeriod:()=>tue,startCancelableOperation:()=>GE,stream:()=>en,toDiagnosticData:()=>uue,toDiagnosticSeverity:()=>qE});var po=N(()=>{"use strict";QI();JI();AI();wue();Il();kue();Sue();_ue();Due();Lue();Nue();Cr(Ta,Gr);Mue();Iue();Pc()});function Vue(t){return Gl.isInstance(t,yb)}function Uue(t){return Gl.isInstance(t,C1)}function Hue(t){return Gl.isInstance(t,A1)}function Wue(t){return Gl.isInstance(t,_1)}function que(t){return Gl.isInstance(t,vb)}function Yue(t){return Gl.isInstance(t,D1)}function Xue(t){return Gl.isInstance(t,xb)}function jue(t){return Gl.isInstance(t,bb)}function Kue(t){return Gl.isInstance(t,Tb)}function Que(t){return Gl.isInstance(t,wb)}function Zue(t){return Gl.isInstance(t,kb)}var lze,xt,fO,yb,rS,C1,nS,iS,nO,A1,iO,aO,sO,_1,oO,vb,aS,lO,D1,cO,xb,bb,Tb,wb,cS,uO,kb,hO,sS,oS,lS,Jue,Gl,Oue,cze,Pue,uze,Bue,hze,Fue,fze,$ue,dze,zue,pze,Gue,mze,gze,yze,vze,xze,bze,Tze,wze,ys,dO,pO,mO,gO,yO,vO,xO,kze,Eze,Sze,Cze,xf,Ku,Ga,Aze,Va=N(()=>{"use strict";po();po();po();po();lze=Object.defineProperty,xt=o((t,e)=>lze(t,"name",{value:e,configurable:!0}),"__name"),fO="Statement",yb="Architecture";o(Vue,"isArchitecture");xt(Vue,"isArchitecture");rS="Axis",C1="Branch";o(Uue,"isBranch");xt(Uue,"isBranch");nS="Checkout",iS="CherryPicking",nO="ClassDefStatement",A1="Commit";o(Hue,"isCommit");xt(Hue,"isCommit");iO="Curve",aO="Edge",sO="Entry",_1="GitGraph";o(Wue,"isGitGraph");xt(Wue,"isGitGraph");oO="Group",vb="Info";o(que,"isInfo");xt(que,"isInfo");aS="Item",lO="Junction",D1="Merge";o(Yue,"isMerge");xt(Yue,"isMerge");cO="Option",xb="Packet";o(Xue,"isPacket");xt(Xue,"isPacket");bb="PacketBlock";o(jue,"isPacketBlock");xt(jue,"isPacketBlock");Tb="Pie";o(Kue,"isPie");xt(Kue,"isPie");wb="PieSection";o(Que,"isPieSection");xt(Que,"isPieSection");cS="Radar",uO="Service",kb="Treemap";o(Zue,"isTreemap");xt(Zue,"isTreemap");hO="TreemapRow",sS="Direction",oS="Leaf",lS="Section",Jue=class extends ip{static{o(this,"MermaidAstReflection")}static{xt(this,"MermaidAstReflection")}getAllTypes(){return[yb,rS,C1,nS,iS,nO,A1,iO,sS,aO,sO,_1,oO,vb,aS,lO,oS,D1,cO,xb,bb,Tb,wb,cS,lS,uO,fO,kb,hO]}computeIsSubtype(t,e){switch(t){case C1:case nS:case iS:case A1:case D1:return this.isSubtype(fO,e);case sS:return this.isSubtype(_1,e);case oS:case lS:return this.isSubtype(aS,e);default:return!1}}getReferenceType(t){let e=`${t.container.$type}:${t.property}`;switch(e){case"Entry:axis":return rS;default:throw new Error(`${e} is not a valid reference id.`)}}getTypeMetaData(t){switch(t){case yb:return{name:yb,properties:[{name:"accDescr"},{name:"accTitle"},{name:"edges",defaultValue:[]},{name:"groups",defaultValue:[]},{name:"junctions",defaultValue:[]},{name:"services",defaultValue:[]},{name:"title"}]};case rS:return{name:rS,properties:[{name:"label"},{name:"name"}]};case C1:return{name:C1,properties:[{name:"name"},{name:"order"}]};case nS:return{name:nS,properties:[{name:"branch"}]};case iS:return{name:iS,properties:[{name:"id"},{name:"parent"},{name:"tags",defaultValue:[]}]};case nO:return{name:nO,properties:[{name:"className"},{name:"styleText"}]};case A1:return{name:A1,properties:[{name:"id"},{name:"message"},{name:"tags",defaultValue:[]},{name:"type"}]};case iO:return{name:iO,properties:[{name:"entries",defaultValue:[]},{name:"label"},{name:"name"}]};case aO:return{name:aO,properties:[{name:"lhsDir"},{name:"lhsGroup",defaultValue:!1},{name:"lhsId"},{name:"lhsInto",defaultValue:!1},{name:"rhsDir"},{name:"rhsGroup",defaultValue:!1},{name:"rhsId"},{name:"rhsInto",defaultValue:!1},{name:"title"}]};case sO:return{name:sO,properties:[{name:"axis"},{name:"value"}]};case _1:return{name:_1,properties:[{name:"accDescr"},{name:"accTitle"},{name:"statements",defaultValue:[]},{name:"title"}]};case oO:return{name:oO,properties:[{name:"icon"},{name:"id"},{name:"in"},{name:"title"}]};case vb:return{name:vb,properties:[{name:"accDescr"},{name:"accTitle"},{name:"title"}]};case aS:return{name:aS,properties:[{name:"classSelector"},{name:"name"}]};case lO:return{name:lO,properties:[{name:"id"},{name:"in"}]};case D1:return{name:D1,properties:[{name:"branch"},{name:"id"},{name:"tags",defaultValue:[]},{name:"type"}]};case cO:return{name:cO,properties:[{name:"name"},{name:"value",defaultValue:!1}]};case xb:return{name:xb,properties:[{name:"accDescr"},{name:"accTitle"},{name:"blocks",defaultValue:[]},{name:"title"}]};case bb:return{name:bb,properties:[{name:"bits"},{name:"end"},{name:"label"},{name:"start"}]};case Tb:return{name:Tb,properties:[{name:"accDescr"},{name:"accTitle"},{name:"sections",defaultValue:[]},{name:"showData",defaultValue:!1},{name:"title"}]};case wb:return{name:wb,properties:[{name:"label"},{name:"value"}]};case cS:return{name:cS,properties:[{name:"accDescr"},{name:"accTitle"},{name:"axes",defaultValue:[]},{name:"curves",defaultValue:[]},{name:"options",defaultValue:[]},{name:"title"}]};case uO:return{name:uO,properties:[{name:"icon"},{name:"iconText"},{name:"id"},{name:"in"},{name:"title"}]};case kb:return{name:kb,properties:[{name:"accDescr"},{name:"accTitle"},{name:"title"},{name:"TreemapRows",defaultValue:[]}]};case hO:return{name:hO,properties:[{name:"indent"},{name:"item"}]};case sS:return{name:sS,properties:[{name:"accDescr"},{name:"accTitle"},{name:"dir"},{name:"statements",defaultValue:[]},{name:"title"}]};case oS:return{name:oS,properties:[{name:"classSelector"},{name:"name"},{name:"value"}]};case lS:return{name:lS,properties:[{name:"classSelector"},{name:"name"}]};default:return{name:t,properties:[]}}}},Gl=new Jue,cze=xt(()=>Oue??(Oue=Hc(`{"$type":"Grammar","isDeclared":true,"name":"Info","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Info","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"info"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[],"cardinality":"*"},{"$type":"Group","elements":[{"$type":"Keyword","value":"showInfo"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[],"cardinality":"*"}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"?"}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@7"}},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@8"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[],"types":[],"usedGrammars":[]}`)),"InfoGrammar"),uze=xt(()=>Pue??(Pue=Hc(`{"$type":"Grammar","isDeclared":true,"name":"Packet","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Packet","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"packet"},{"$type":"Keyword","value":"packet-beta"}]},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]},{"$type":"Assignment","feature":"blocks","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}],"cardinality":"*"}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"PacketBlock","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Assignment","feature":"start","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"-"},{"$type":"Assignment","feature":"end","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}],"cardinality":"?"}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"+"},{"$type":"Assignment","feature":"bits","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}]}]},{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@8"}},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@9"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[],"types":[],"usedGrammars":[]}`)),"PacketGrammar"),hze=xt(()=>Bue??(Bue=Hc(`{"$type":"Grammar","isDeclared":true,"name":"Pie","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Pie","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"pie"},{"$type":"Assignment","feature":"showData","operator":"?=","terminal":{"$type":"Keyword","value":"showData"},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]},{"$type":"Assignment","feature":"sections","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}],"cardinality":"*"}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"PieSection","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}},{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@8"}},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@9"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[],"types":[],"usedGrammars":[]}`)),"PieGrammar"),fze=xt(()=>Fue??(Fue=Hc(`{"$type":"Grammar","isDeclared":true,"name":"Architecture","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Architecture","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"architecture-beta"},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}],"cardinality":"*"}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"Statement","definition":{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"groups","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"services","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}},{"$type":"Assignment","feature":"junctions","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}},{"$type":"Assignment","feature":"edges","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"LeftPort","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"lhsDir","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"RightPort","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"rhsDir","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}},{"$type":"Keyword","value":":"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"Arrow","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]},{"$type":"Assignment","feature":"lhsInto","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"--"},{"$type":"Group","elements":[{"$type":"Keyword","value":"-"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@29"},"arguments":[]}},{"$type":"Keyword","value":"-"}]}]},{"$type":"Assignment","feature":"rhsInto","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Group","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"group"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Assignment","feature":"icon","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@28"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@29"},"arguments":[]},"cardinality":"?"},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Service","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"service"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"iconText","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]}},{"$type":"Assignment","feature":"icon","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@28"},"arguments":[]}}],"cardinality":"?"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@29"},"arguments":[]},"cardinality":"?"},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Junction","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"junction"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Edge","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"lhsId","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Assignment","feature":"lhsGroup","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"Assignment","feature":"rhsId","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Assignment","feature":"rhsGroup","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"ARROW_DIRECTION","definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"L"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"R"}}]},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"T"}}]},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"B"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARROW_GROUP","definition":{"$type":"RegexToken","regex":"/\\\\{group\\\\}/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARROW_INTO","definition":{"$type":"RegexToken","regex":"/<|>/"},"fragment":false,"hidden":false},{"$type":"ParserRule","fragment":true,"name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@18"}},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@19"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false},{"$type":"TerminalRule","name":"ARCH_ICON","definition":{"$type":"RegexToken","regex":"/\\\\([\\\\w-:]+\\\\)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARCH_TITLE","definition":{"$type":"RegexToken","regex":"/\\\\[[\\\\w ]+\\\\]/"},"fragment":false,"hidden":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[],"types":[],"usedGrammars":[]}`)),"ArchitectureGrammar"),dze=xt(()=>$ue??($ue=Hc(`{"$type":"Grammar","isDeclared":true,"name":"GitGraph","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"GitGraph","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"Group","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"Keyword","value":":"}]},{"$type":"Keyword","value":"gitGraph:"},{"$type":"Group","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]},{"$type":"Keyword","value":":"}]}]},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]},{"$type":"Assignment","feature":"statements","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}}],"cardinality":"*"}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Statement","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Direction","definition":{"$type":"Assignment","feature":"dir","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"LR"},{"$type":"Keyword","value":"TB"},{"$type":"Keyword","value":"BT"}]}},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Commit","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"commit"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"msg:","cardinality":"?"},{"$type":"Assignment","feature":"message","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"type:"},{"$type":"Assignment","feature":"type","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"NORMAL"},{"$type":"Keyword","value":"REVERSE"},{"$type":"Keyword","value":"HIGHLIGHT"}]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Branch","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"branch"},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@24"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"order:"},{"$type":"Assignment","feature":"order","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Merge","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"merge"},{"$type":"Assignment","feature":"branch","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@24"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]}},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"type:"},{"$type":"Assignment","feature":"type","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"NORMAL"},{"$type":"Keyword","value":"REVERSE"},{"$type":"Keyword","value":"HIGHLIGHT"}]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Checkout","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"checkout"},{"$type":"Keyword","value":"switch"}]},{"$type":"Assignment","feature":"branch","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@24"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"CherryPicking","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"cherry-pick"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"parent:"},{"$type":"Assignment","feature":"parent","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@14"}},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@15"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false},{"$type":"TerminalRule","name":"REFERENCE","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\\\w([-\\\\./\\\\w]*[-\\\\w])?/"},"fragment":false,"hidden":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[],"types":[],"usedGrammars":[]}`)),"GitGraphGrammar"),pze=xt(()=>zue??(zue=Hc(`{"$type":"Grammar","isDeclared":true,"name":"Radar","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Radar","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"radar-beta"},{"$type":"Keyword","value":"radar-beta:"},{"$type":"Group","elements":[{"$type":"Keyword","value":"radar-beta"},{"$type":"Keyword","value":":"}]}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]},{"$type":"Group","elements":[{"$type":"Keyword","value":"axis"},{"$type":"Assignment","feature":"axes","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"axes","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}}],"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"curve"},{"$type":"Assignment","feature":"curves","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"curves","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}}],"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"options","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"options","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}}],"cardinality":"*"}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}],"cardinality":"*"}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"Label","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}},{"$type":"Keyword","value":"]"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Axis","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[],"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Curve","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[],"cardinality":"?"},{"$type":"Keyword","value":"{"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"Entries","definition":{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"}]}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"DetailedEntry","returnType":{"$ref":"#/interfaces@0"},"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"axis","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@2"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},"deprecatedSyntax":false}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"NumberEntry","returnType":{"$ref":"#/interfaces@0"},"definition":{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Option","definition":{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"showLegend"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"ticks"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"max"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"min"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"graticule"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}}]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"GRATICULE","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"circle"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"polygon"}}]},"fragment":false,"hidden":false},{"$type":"ParserRule","fragment":true,"name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@15"}},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@16"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"interfaces":[{"$type":"Interface","name":"Entry","attributes":[{"$type":"TypeAttribute","name":"axis","isOptional":true,"type":{"$type":"ReferenceType","referenceType":{"$type":"SimpleType","typeRef":{"$ref":"#/rules@2"}}}},{"$type":"TypeAttribute","name":"value","type":{"$type":"SimpleType","primitiveType":"number"},"isOptional":false}],"superTypes":[]}],"definesHiddenTokens":false,"hiddenTokens":[],"types":[],"usedGrammars":[]}`)),"RadarGrammar"),mze=xt(()=>Gue??(Gue=Hc(`{"$type":"Grammar","isDeclared":true,"name":"Treemap","rules":[{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"ParserRule","entry":true,"name":"Treemap","returnType":{"$ref":"#/interfaces@4"},"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@0"},"arguments":[]},{"$type":"Assignment","feature":"TreemapRows","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]}}],"cardinality":"*"}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"TREEMAP_KEYWORD","definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"treemap-beta"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"treemap"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"CLASS_DEF","definition":{"$type":"RegexToken","regex":"/classDef\\\\s+([a-zA-Z_][a-zA-Z0-9_]+)(?:\\\\s+([^;\\\\r\\\\n]*))?(?:;)?/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STYLE_SEPARATOR","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":":::"}},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"SEPARATOR","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":":"}},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"COMMA","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":","}},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WS","definition":{"$type":"RegexToken","regex":"/[ \\\\t]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"ML_COMMENT","definition":{"$type":"RegexToken","regex":"/\\\\%\\\\%[^\\\\n]*/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"NL","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false},{"$type":"ParserRule","name":"TreemapRow","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"indent","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"item","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]}]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ClassDef","dataType":"string","definition":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Item","returnType":{"$ref":"#/interfaces@0"},"definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Section","returnType":{"$ref":"#/interfaces@1"},"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]},{"$type":"Assignment","feature":"classSelector","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}],"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Leaf","returnType":{"$ref":"#/interfaces@2"},"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[],"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[],"cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]},{"$type":"Assignment","feature":"classSelector","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}],"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"INDENTATION","definition":{"$type":"RegexToken","regex":"/[ \\\\t]{1,}/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID2","definition":{"$type":"RegexToken","regex":"/[a-zA-Z_][a-zA-Z0-9_]*/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER2","definition":{"$type":"RegexToken","regex":"/[0-9_\\\\.\\\\,]+/"},"fragment":false,"hidden":false},{"$type":"ParserRule","name":"MyNumber","dataType":"number","definition":{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"STRING2","definition":{"$type":"RegexToken","regex":"/\\"[^\\"]*\\"|'[^']*'/"},"fragment":false,"hidden":false}],"interfaces":[{"$type":"Interface","name":"Item","attributes":[{"$type":"TypeAttribute","name":"name","type":{"$type":"SimpleType","primitiveType":"string"},"isOptional":false},{"$type":"TypeAttribute","name":"classSelector","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]},{"$type":"Interface","name":"Section","superTypes":[{"$ref":"#/interfaces@0"}],"attributes":[]},{"$type":"Interface","name":"Leaf","superTypes":[{"$ref":"#/interfaces@0"}],"attributes":[{"$type":"TypeAttribute","name":"value","type":{"$type":"SimpleType","primitiveType":"number"},"isOptional":false}]},{"$type":"Interface","name":"ClassDefStatement","attributes":[{"$type":"TypeAttribute","name":"className","type":{"$type":"SimpleType","primitiveType":"string"},"isOptional":false},{"$type":"TypeAttribute","name":"styleText","type":{"$type":"SimpleType","primitiveType":"string"},"isOptional":false}],"superTypes":[]},{"$type":"Interface","name":"Treemap","attributes":[{"$type":"TypeAttribute","name":"TreemapRows","type":{"$type":"ArrayType","elementType":{"$type":"SimpleType","typeRef":{"$ref":"#/rules@14"}}},"isOptional":false},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"definesHiddenTokens":false,"hiddenTokens":[],"imports":[],"types":[],"usedGrammars":[],"$comment":"/**\\n * Treemap grammar for Langium\\n * Converted from mindmap grammar\\n *\\n * The ML_COMMENT and NL hidden terminals handle whitespace, comments, and newlines\\n * before the treemap keyword, allowing for empty lines and comments before the\\n * treemap declaration.\\n */"}`)),"TreemapGrammar"),gze={languageId:"info",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},yze={languageId:"packet",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},vze={languageId:"pie",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},xze={languageId:"architecture",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},bze={languageId:"gitGraph",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},Tze={languageId:"radar",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},wze={languageId:"treemap",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},ys={AstReflection:xt(()=>new Jue,"AstReflection")},dO={Grammar:xt(()=>cze(),"Grammar"),LanguageMetaData:xt(()=>gze,"LanguageMetaData"),parser:{}},pO={Grammar:xt(()=>uze(),"Grammar"),LanguageMetaData:xt(()=>yze,"LanguageMetaData"),parser:{}},mO={Grammar:xt(()=>hze(),"Grammar"),LanguageMetaData:xt(()=>vze,"LanguageMetaData"),parser:{}},gO={Grammar:xt(()=>fze(),"Grammar"),LanguageMetaData:xt(()=>xze,"LanguageMetaData"),parser:{}},yO={Grammar:xt(()=>dze(),"Grammar"),LanguageMetaData:xt(()=>bze,"LanguageMetaData"),parser:{}},vO={Grammar:xt(()=>pze(),"Grammar"),LanguageMetaData:xt(()=>Tze,"LanguageMetaData"),parser:{}},xO={Grammar:xt(()=>mze(),"Grammar"),LanguageMetaData:xt(()=>wze,"LanguageMetaData"),parser:{}},kze=/accDescr(?:[\t ]*:([^\n\r]*)|\s*{([^}]*)})/,Eze=/accTitle[\t ]*:([^\n\r]*)/,Sze=/title([\t ][^\n\r]*|)/,Cze={ACC_DESCR:kze,ACC_TITLE:Eze,TITLE:Sze},xf=class extends Ap{static{o(this,"AbstractMermaidValueConverter")}static{xt(this,"AbstractMermaidValueConverter")}runConverter(t,e,r){let n=this.runCommonConverter(t,e,r);return n===void 0&&(n=this.runCustomConverter(t,e,r)),n===void 0?super.runConverter(t,e,r):n}runCommonConverter(t,e,r){let n=Cze[t.name];if(n===void 0)return;let i=n.exec(e);if(i!==null){if(i[1]!==void 0)return i[1].trim().replace(/[\t ]{2,}/gm," ");if(i[2]!==void 0)return i[2].replace(/^\s*/gm,"").replace(/\s+$/gm,"").replace(/[\t ]{2,}/gm," ").replace(/[\n\r]{2,}/gm,` +`)}}},Ku=class extends xf{static{o(this,"CommonValueConverter")}static{xt(this,"CommonValueConverter")}runCustomConverter(t,e,r){}},Ga=class extends ju{static{o(this,"AbstractMermaidTokenBuilder")}static{xt(this,"AbstractMermaidTokenBuilder")}constructor(t){super(),this.keywords=new Set(t)}buildKeywordTokens(t,e,r){let n=super.buildKeywordTokens(t,e,r);return n.forEach(i=>{this.keywords.has(i.name)&&i.PATTERN!==void 0&&(i.PATTERN=new RegExp(i.PATTERN.toString()+"(?:(?=%%)|(?!\\S))"))}),n}},Aze=class extends Ga{static{o(this,"CommonTokenBuilder")}static{xt(this,"CommonTokenBuilder")}}});function hS(t=ba){let e=Gn(xa(t),ys),r=Gn(va({shared:e}),yO,uS);return e.ServiceRegistry.register(r),{shared:e,GitGraph:r}}var _ze,uS,bO=N(()=>{"use strict";Va();po();_ze=class extends Ga{static{o(this,"GitGraphTokenBuilder")}static{xt(this,"GitGraphTokenBuilder")}constructor(){super(["gitGraph"])}},uS={parser:{TokenBuilder:xt(()=>new _ze,"TokenBuilder"),ValueConverter:xt(()=>new Ku,"ValueConverter")}};o(hS,"createGitGraphServices");xt(hS,"createGitGraphServices")});function dS(t=ba){let e=Gn(xa(t),ys),r=Gn(va({shared:e}),dO,fS);return e.ServiceRegistry.register(r),{shared:e,Info:r}}var Dze,fS,TO=N(()=>{"use strict";Va();po();Dze=class extends Ga{static{o(this,"InfoTokenBuilder")}static{xt(this,"InfoTokenBuilder")}constructor(){super(["info","showInfo"])}},fS={parser:{TokenBuilder:xt(()=>new Dze,"TokenBuilder"),ValueConverter:xt(()=>new Ku,"ValueConverter")}};o(dS,"createInfoServices");xt(dS,"createInfoServices")});function mS(t=ba){let e=Gn(xa(t),ys),r=Gn(va({shared:e}),pO,pS);return e.ServiceRegistry.register(r),{shared:e,Packet:r}}var Lze,pS,wO=N(()=>{"use strict";Va();po();Lze=class extends Ga{static{o(this,"PacketTokenBuilder")}static{xt(this,"PacketTokenBuilder")}constructor(){super(["packet"])}},pS={parser:{TokenBuilder:xt(()=>new Lze,"TokenBuilder"),ValueConverter:xt(()=>new Ku,"ValueConverter")}};o(mS,"createPacketServices");xt(mS,"createPacketServices")});function yS(t=ba){let e=Gn(xa(t),ys),r=Gn(va({shared:e}),mO,gS);return e.ServiceRegistry.register(r),{shared:e,Pie:r}}var Rze,Nze,gS,kO=N(()=>{"use strict";Va();po();Rze=class extends Ga{static{o(this,"PieTokenBuilder")}static{xt(this,"PieTokenBuilder")}constructor(){super(["pie","showData"])}},Nze=class extends xf{static{o(this,"PieValueConverter")}static{xt(this,"PieValueConverter")}runCustomConverter(t,e,r){if(t.name==="PIE_SECTION_LABEL")return e.replace(/"/g,"").trim()}},gS={parser:{TokenBuilder:xt(()=>new Rze,"TokenBuilder"),ValueConverter:xt(()=>new Nze,"ValueConverter")}};o(yS,"createPieServices");xt(yS,"createPieServices")});function xS(t=ba){let e=Gn(xa(t),ys),r=Gn(va({shared:e}),gO,vS);return e.ServiceRegistry.register(r),{shared:e,Architecture:r}}var Mze,Ize,vS,EO=N(()=>{"use strict";Va();po();Mze=class extends Ga{static{o(this,"ArchitectureTokenBuilder")}static{xt(this,"ArchitectureTokenBuilder")}constructor(){super(["architecture"])}},Ize=class extends xf{static{o(this,"ArchitectureValueConverter")}static{xt(this,"ArchitectureValueConverter")}runCustomConverter(t,e,r){if(t.name==="ARCH_ICON")return e.replace(/[()]/g,"").trim();if(t.name==="ARCH_TEXT_ICON")return e.replace(/["()]/g,"");if(t.name==="ARCH_TITLE")return e.replace(/[[\]]/g,"").trim()}},vS={parser:{TokenBuilder:xt(()=>new Mze,"TokenBuilder"),ValueConverter:xt(()=>new Ize,"ValueConverter")}};o(xS,"createArchitectureServices");xt(xS,"createArchitectureServices")});function TS(t=ba){let e=Gn(xa(t),ys),r=Gn(va({shared:e}),vO,bS);return e.ServiceRegistry.register(r),{shared:e,Radar:r}}var Oze,bS,SO=N(()=>{"use strict";Va();po();Oze=class extends Ga{static{o(this,"RadarTokenBuilder")}static{xt(this,"RadarTokenBuilder")}constructor(){super(["radar-beta"])}},bS={parser:{TokenBuilder:xt(()=>new Oze,"TokenBuilder"),ValueConverter:xt(()=>new Ku,"ValueConverter")}};o(TS,"createRadarServices");xt(TS,"createRadarServices")});function ehe(t){let e=t.validation.TreemapValidator,r=t.validation.ValidationRegistry;if(r){let n={Treemap:e.checkSingleRoot.bind(e)};r.register(n,e)}}function kS(t=ba){let e=Gn(xa(t),ys),r=Gn(va({shared:e}),xO,wS);return e.ServiceRegistry.register(r),ehe(r),{shared:e,Treemap:r}}var Pze,Bze,Fze,$ze,wS,CO=N(()=>{"use strict";Va();po();Pze=class extends Ga{static{o(this,"TreemapTokenBuilder")}static{xt(this,"TreemapTokenBuilder")}constructor(){super(["treemap"])}},Bze=/classDef\s+([A-Z_a-z]\w+)(?:\s+([^\n\r;]*))?;?/,Fze=class extends xf{static{o(this,"TreemapValueConverter")}static{xt(this,"TreemapValueConverter")}runCustomConverter(t,e,r){if(t.name==="NUMBER2")return parseFloat(e.replace(/,/g,""));if(t.name==="SEPARATOR")return e.substring(1,e.length-1);if(t.name==="STRING2")return e.substring(1,e.length-1);if(t.name==="INDENTATION")return e.length;if(t.name==="ClassDef"){if(typeof e!="string")return e;let n=Bze.exec(e);if(n)return{$type:"ClassDefStatement",className:n[1],styleText:n[2]||void 0}}}};o(ehe,"registerValidationChecks");xt(ehe,"registerValidationChecks");$ze=class{static{o(this,"TreemapValidator")}static{xt(this,"TreemapValidator")}checkSingleRoot(t,e){let r;for(let n of t.TreemapRows)n.item&&(r===void 0&&n.indent===void 0?r=0:n.indent===void 0?e("error","Multiple root nodes are not allowed in a treemap.",{node:n,property:"item"}):r!==void 0&&r>=parseInt(n.indent,10)&&e("error","Multiple root nodes are not allowed in a treemap.",{node:n,property:"item"}))}},wS={parser:{TokenBuilder:xt(()=>new Pze,"TokenBuilder"),ValueConverter:xt(()=>new Fze,"ValueConverter")},validation:{TreemapValidator:xt(()=>new $ze,"TreemapValidator")}};o(kS,"createTreemapServices");xt(kS,"createTreemapServices")});var the={};ur(the,{InfoModule:()=>fS,createInfoServices:()=>dS});var rhe=N(()=>{"use strict";TO();Va()});var nhe={};ur(nhe,{PacketModule:()=>pS,createPacketServices:()=>mS});var ihe=N(()=>{"use strict";wO();Va()});var ahe={};ur(ahe,{PieModule:()=>gS,createPieServices:()=>yS});var she=N(()=>{"use strict";kO();Va()});var ohe={};ur(ohe,{ArchitectureModule:()=>vS,createArchitectureServices:()=>xS});var lhe=N(()=>{"use strict";EO();Va()});var che={};ur(che,{GitGraphModule:()=>uS,createGitGraphServices:()=>hS});var uhe=N(()=>{"use strict";bO();Va()});var hhe={};ur(hhe,{RadarModule:()=>bS,createRadarServices:()=>TS});var fhe=N(()=>{"use strict";SO();Va()});var dhe={};ur(dhe,{TreemapModule:()=>wS,createTreemapServices:()=>kS});var phe=N(()=>{"use strict";CO();Va()});async function vs(t,e){let r=zze[t];if(!r)throw new Error(`Unknown diagram type: ${t}`);Qu[t]||await r();let i=Qu[t].parse(e);if(i.lexerErrors.length>0||i.parserErrors.length>0)throw new Gze(i);return i.value}var Qu,zze,Gze,bf=N(()=>{"use strict";bO();TO();wO();kO();EO();SO();CO();Va();Qu={},zze={info:xt(async()=>{let{createInfoServices:t}=await Promise.resolve().then(()=>(rhe(),the)),e=t().Info.parser.LangiumParser;Qu.info=e},"info"),packet:xt(async()=>{let{createPacketServices:t}=await Promise.resolve().then(()=>(ihe(),nhe)),e=t().Packet.parser.LangiumParser;Qu.packet=e},"packet"),pie:xt(async()=>{let{createPieServices:t}=await Promise.resolve().then(()=>(she(),ahe)),e=t().Pie.parser.LangiumParser;Qu.pie=e},"pie"),architecture:xt(async()=>{let{createArchitectureServices:t}=await Promise.resolve().then(()=>(lhe(),ohe)),e=t().Architecture.parser.LangiumParser;Qu.architecture=e},"architecture"),gitGraph:xt(async()=>{let{createGitGraphServices:t}=await Promise.resolve().then(()=>(uhe(),che)),e=t().GitGraph.parser.LangiumParser;Qu.gitGraph=e},"gitGraph"),radar:xt(async()=>{let{createRadarServices:t}=await Promise.resolve().then(()=>(fhe(),hhe)),e=t().Radar.parser.LangiumParser;Qu.radar=e},"radar"),treemap:xt(async()=>{let{createTreemapServices:t}=await Promise.resolve().then(()=>(phe(),dhe)),e=t().Treemap.parser.LangiumParser;Qu.treemap=e},"treemap")};o(vs,"parse");xt(vs,"parse");Gze=class extends Error{static{o(this,"MermaidParseError")}constructor(t){let e=t.lexerErrors.map(n=>n.message).join(` `),r=t.parserErrors.map(n=>n.message).join(` -`);super(`Parsing failed: ${e} ${r}`),this.result=t}static{Rt(this,"MermaidParseError")}}});function Uc(t,e){t.accDescr&&e.setAccDescription?.(t.accDescr),t.accTitle&&e.setAccTitle?.(t.accTitle),t.title&&e.setDiagramTitle?.(t.title)}var L1=N(()=>{"use strict";o(Uc,"populateCommonDb")});var Kr,hS=N(()=>{"use strict";Kr={NORMAL:0,REVERSE:1,HIGHLIGHT:2,MERGE:3,CHERRY_PICK:4}});var vf,fS=N(()=>{"use strict";vf=class{constructor(e){this.init=e;this.records=this.init()}static{o(this,"ImperativeState")}reset(){this.records=this.init()}}});function WI(){return eD({length:7})}function a$e(t,e){let r=Object.create(null);return t.reduce((n,i)=>{let a=e(i);return r[a]||(r[a]=!0,n.push(i)),n},[])}function Jce(t,e,r){let n=t.indexOf(e);n===-1?t.push(r):t.splice(n,1,r)}function tue(t){let e=t.reduce((i,a)=>i.seq>a.seq?i:a,t[0]),r="";t.forEach(function(i){i===e?r+=" *":r+=" |"});let n=[r,e.id,e.seq];for(let i in _t.records.branches)_t.records.branches.get(i)===e.id&&n.push(i);if(X.debug(n.join(" ")),e.parents&&e.parents.length==2&&e.parents[0]&&e.parents[1]){let i=_t.records.commits.get(e.parents[0]);Jce(t,e,i),e.parents[1]&&t.push(_t.records.commits.get(e.parents[1]))}else{if(e.parents.length==0)return;if(e.parents[0]){let i=_t.records.commits.get(e.parents[0]);Jce(t,e,i)}}t=a$e(t,i=>i.id),tue(t)}var i$e,Rp,_t,s$e,o$e,l$e,c$e,u$e,h$e,f$e,eue,d$e,p$e,m$e,g$e,y$e,rue,v$e,x$e,b$e,dS,qI=N(()=>{"use strict";vt();nr();Bi();dr();mi();hS();fS();Ya();i$e=lr.gitGraph,Rp=o(()=>gi({...i$e,...sr().gitGraph}),"getConfig"),_t=new vf(()=>{let t=Rp(),e=t.mainBranchName,r=t.mainBranchOrder;return{mainBranchName:e,commits:new Map,head:null,branchConfig:new Map([[e,{name:e,order:r}]]),branches:new Map([[e,null]]),currBranch:e,direction:"LR",seq:0,options:{}}});o(WI,"getID");o(a$e,"uniqBy");s$e=o(function(t){_t.records.direction=t},"setDirection"),o$e=o(function(t){X.debug("options str",t),t=t?.trim(),t=t||"{}";try{_t.records.options=JSON.parse(t)}catch(e){X.error("error while parsing gitGraph options",e.message)}},"setOptions"),l$e=o(function(){return _t.records.options},"getOptions"),c$e=o(function(t){let e=t.msg,r=t.id,n=t.type,i=t.tags;X.info("commit",e,r,n,i),X.debug("Entering commit:",e,r,n,i);let a=Rp();r=Ze.sanitizeText(r,a),e=Ze.sanitizeText(e,a),i=i?.map(l=>Ze.sanitizeText(l,a));let s={id:r||_t.records.seq+"-"+WI(),message:e,seq:_t.records.seq++,type:n??Kr.NORMAL,tags:i??[],parents:_t.records.head==null?[]:[_t.records.head.id],branch:_t.records.currBranch};_t.records.head=s,X.info("main branch",a.mainBranchName),_t.records.commits.set(s.id,s),_t.records.branches.set(_t.records.currBranch,s.id),X.debug("in pushCommit "+s.id)},"commit"),u$e=o(function(t){let e=t.name,r=t.order;if(e=Ze.sanitizeText(e,Rp()),_t.records.branches.has(e))throw 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 ${e}")`);_t.records.branches.set(e,_t.records.head!=null?_t.records.head.id:null),_t.records.branchConfig.set(e,{name:e,order:r}),eue(e),X.debug("in createBranch")},"branch"),h$e=o(t=>{let e=t.branch,r=t.id,n=t.type,i=t.tags,a=Rp();e=Ze.sanitizeText(e,a),r&&(r=Ze.sanitizeText(r,a));let s=_t.records.branches.get(_t.records.currBranch),l=_t.records.branches.get(e),u=s?_t.records.commits.get(s):void 0,h=l?_t.records.commits.get(l):void 0;if(u&&h&&u.branch===e)throw new Error(`Cannot merge branch '${e}' into itself.`);if(_t.records.currBranch===e){let p=new Error('Incorrect usage of "merge". Cannot merge a branch to itself');throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:["branch abc"]},p}if(u===void 0||!u){let p=new Error(`Incorrect usage of "merge". Current branch (${_t.records.currBranch})has no commits`);throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:["commit"]},p}if(!_t.records.branches.has(e)){let p=new Error('Incorrect usage of "merge". Branch to be merged ('+e+") does not exist");throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:[`branch ${e}`]},p}if(h===void 0||!h){let p=new Error('Incorrect usage of "merge". Branch to be merged ('+e+") has no commits");throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:['"commit"']},p}if(u===h){let p=new Error('Incorrect usage of "merge". Both branches have same head');throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:["branch abc"]},p}if(r&&_t.records.commits.has(r)){let p=new Error('Incorrect usage of "merge". Commit with id:'+r+" already exists, use different custom id");throw p.hash={text:`merge ${e} ${r} ${n} ${i?.join(" ")}`,token:`merge ${e} ${r} ${n} ${i?.join(" ")}`,expected:[`merge ${e} ${r}_UNIQUE ${n} ${i?.join(" ")}`]},p}let f=l||"",d={id:r||`${_t.records.seq}-${WI()}`,message:`merged branch ${e} into ${_t.records.currBranch}`,seq:_t.records.seq++,parents:_t.records.head==null?[]:[_t.records.head.id,f],branch:_t.records.currBranch,type:Kr.MERGE,customType:n,customId:!!r,tags:i??[]};_t.records.head=d,_t.records.commits.set(d.id,d),_t.records.branches.set(_t.records.currBranch,d.id),X.debug(_t.records.branches),X.debug("in mergeBranch")},"merge"),f$e=o(function(t){let e=t.id,r=t.targetId,n=t.tags,i=t.parent;X.debug("Entering cherryPick:",e,r,n);let a=Rp();if(e=Ze.sanitizeText(e,a),r=Ze.sanitizeText(r,a),n=n?.map(u=>Ze.sanitizeText(u,a)),i=Ze.sanitizeText(i,a),!e||!_t.records.commits.has(e)){let u=new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');throw u.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},u}let s=_t.records.commits.get(e);if(s===void 0||!s)throw new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');if(i&&!(Array.isArray(s.parents)&&s.parents.includes(i)))throw new Error("Invalid operation: The specified parent commit is not an immediate parent of the cherry-picked commit.");let l=s.branch;if(s.type===Kr.MERGE&&!i)throw new Error("Incorrect usage of cherry-pick: If the source commit is a merge commit, an immediate parent commit must be specified.");if(!r||!_t.records.commits.has(r)){if(l===_t.records.currBranch){let d=new Error('Incorrect usage of "cherryPick". Source commit is already on current branch');throw d.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},d}let u=_t.records.branches.get(_t.records.currBranch);if(u===void 0||!u){let d=new Error(`Incorrect usage of "cherry-pick". Current branch (${_t.records.currBranch})has no commits`);throw d.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},d}let h=_t.records.commits.get(u);if(h===void 0||!h){let d=new Error(`Incorrect usage of "cherry-pick". Current branch (${_t.records.currBranch})has no commits`);throw d.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},d}let f={id:_t.records.seq+"-"+WI(),message:`cherry-picked ${s?.message} into ${_t.records.currBranch}`,seq:_t.records.seq++,parents:_t.records.head==null?[]:[_t.records.head.id,s.id],branch:_t.records.currBranch,type:Kr.CHERRY_PICK,tags:n?n.filter(Boolean):[`cherry-pick:${s.id}${s.type===Kr.MERGE?`|parent:${i}`:""}`]};_t.records.head=f,_t.records.commits.set(f.id,f),_t.records.branches.set(_t.records.currBranch,f.id),X.debug(_t.records.branches),X.debug("in cherryPick")}},"cherryPick"),eue=o(function(t){if(t=Ze.sanitizeText(t,Rp()),_t.records.branches.has(t)){_t.records.currBranch=t;let e=_t.records.branches.get(_t.records.currBranch);e===void 0||!e?_t.records.head=null:_t.records.head=_t.records.commits.get(e)??null}else{let e=new Error(`Trying to checkout branch which is not yet created. (Help try using "branch ${t}")`);throw e.hash={text:`checkout ${t}`,token:`checkout ${t}`,expected:[`branch ${t}`]},e}},"checkout");o(Jce,"upsert");o(tue,"prettyPrintCommitHistory");d$e=o(function(){X.debug(_t.records.commits);let t=rue()[0];tue([t])},"prettyPrint"),p$e=o(function(){_t.reset(),Ar()},"clear"),m$e=o(function(){return[..._t.records.branchConfig.values()].map((e,r)=>e.order!==null&&e.order!==void 0?e:{...e,order:parseFloat(`0.${r}`)}).sort((e,r)=>(e.order??0)-(r.order??0)).map(({name:e})=>({name:e}))},"getBranchesAsObjArray"),g$e=o(function(){return _t.records.branches},"getBranches"),y$e=o(function(){return _t.records.commits},"getCommits"),rue=o(function(){let t=[..._t.records.commits.values()];return t.forEach(function(e){X.debug(e.id)}),t.sort((e,r)=>e.seq-r.seq),t},"getCommitsArray"),v$e=o(function(){return _t.records.currBranch},"getCurrentBranch"),x$e=o(function(){return _t.records.direction},"getDirection"),b$e=o(function(){return _t.records.head},"getHead"),dS={commitType:Kr,getConfig:Rp,setDirection:s$e,setOptions:o$e,getOptions:l$e,commit:c$e,branch:u$e,merge:h$e,cherryPick:f$e,checkout:eue,prettyPrint:d$e,clear:p$e,getBranchesAsObjArray:m$e,getBranches:g$e,getCommits:y$e,getCommitsArray:rue,getCurrentBranch:v$e,getDirection:x$e,getHead:b$e,setAccTitle:Lr,getAccTitle:Rr,getAccDescription:Mr,setAccDescription:Nr,setDiagramTitle:$r,getDiagramTitle:Ir}});var w$e,T$e,k$e,E$e,S$e,C$e,A$e,nue,iue=N(()=>{"use strict";Lp();vt();L1();qI();hS();w$e=o((t,e)=>{Uc(t,e),t.dir&&e.setDirection(t.dir);for(let r of t.statements)T$e(r,e)},"populate"),T$e=o((t,e)=>{let n={Commit:o(i=>e.commit(k$e(i)),"Commit"),Branch:o(i=>e.branch(E$e(i)),"Branch"),Merge:o(i=>e.merge(S$e(i)),"Merge"),Checkout:o(i=>e.checkout(C$e(i)),"Checkout"),CherryPicking:o(i=>e.cherryPick(A$e(i)),"CherryPicking")}[t.$type];n?n(t):X.error(`Unknown statement type: ${t.$type}`)},"parseStatement"),k$e=o(t=>({id:t.id,msg:t.message??"",type:t.type!==void 0?Kr[t.type]:Kr.NORMAL,tags:t.tags??void 0}),"parseCommit"),E$e=o(t=>({name:t.name,order:t.order??0}),"parseBranch"),S$e=o(t=>({branch:t.branch,id:t.id??"",type:t.type!==void 0?Kr[t.type]:void 0,tags:t.tags??void 0}),"parseMerge"),C$e=o(t=>t.branch,"parseCheckout"),A$e=o(t=>({id:t.id,targetId:"",tags:t.tags?.length===0?void 0:t.tags,parent:t.parent}),"parseCherryPicking"),nue={parse:o(async t=>{let e=await fo("gitGraph",t);X.debug(e),w$e(e,dS)},"parse")}});var _$e,Qo,bf,wf,Hc,Ku,Np,Us,Hs,pS,bb,mS,xf,Br,D$e,sue,oue,L$e,R$e,N$e,M$e,I$e,O$e,P$e,B$e,F$e,$$e,z$e,G$e,aue,V$e,wb,U$e,H$e,W$e,q$e,Y$e,lue,cue=N(()=>{"use strict";pr();zt();vt();nr();hS();_$e=me(),Qo=_$e?.gitGraph,bf=10,wf=40,Hc=4,Ku=2,Np=8,Us=new Map,Hs=new Map,pS=30,bb=new Map,mS=[],xf=0,Br="LR",D$e=o(()=>{Us.clear(),Hs.clear(),bb.clear(),xf=0,mS=[],Br="LR"},"clear"),sue=o(t=>{let e=document.createElementNS("http://www.w3.org/2000/svg","text");return(typeof t=="string"?t.split(/\\n|\n|/gi):t).forEach(n=>{let i=document.createElementNS("http://www.w3.org/2000/svg","tspan");i.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),i.setAttribute("dy","1em"),i.setAttribute("x","0"),i.setAttribute("class","row"),i.textContent=n.trim(),e.appendChild(i)}),e},"drawText"),oue=o(t=>{let e,r,n;return Br==="BT"?(r=o((i,a)=>i<=a,"comparisonFunc"),n=1/0):(r=o((i,a)=>i>=a,"comparisonFunc"),n=0),t.forEach(i=>{let a=Br==="TB"||Br=="BT"?Hs.get(i)?.y:Hs.get(i)?.x;a!==void 0&&r(a,n)&&(e=i,n=a)}),e},"findClosestParent"),L$e=o(t=>{let e="",r=1/0;return t.forEach(n=>{let i=Hs.get(n).y;i<=r&&(e=n,r=i)}),e||void 0},"findClosestParentBT"),R$e=o((t,e,r)=>{let n=r,i=r,a=[];t.forEach(s=>{let l=e.get(s);if(!l)throw new Error(`Commit not found for key ${s}`);l.parents.length?(n=M$e(l),i=Math.max(n,i)):a.push(l),I$e(l,n)}),n=i,a.forEach(s=>{O$e(s,n,r)}),t.forEach(s=>{let l=e.get(s);if(l?.parents.length){let u=L$e(l.parents);n=Hs.get(u).y-wf,n<=i&&(i=n);let h=Us.get(l.branch).pos,f=n-bf;Hs.set(l.id,{x:h,y:f})}})},"setParallelBTPos"),N$e=o(t=>{let e=oue(t.parents.filter(n=>n!==null));if(!e)throw new Error(`Closest parent not found for commit ${t.id}`);let r=Hs.get(e)?.y;if(r===void 0)throw new Error(`Closest parent position not found for commit ${t.id}`);return r},"findClosestParentPos"),M$e=o(t=>N$e(t)+wf,"calculateCommitPosition"),I$e=o((t,e)=>{let r=Us.get(t.branch);if(!r)throw new Error(`Branch not found for commit ${t.id}`);let n=r.pos,i=e+bf;return Hs.set(t.id,{x:n,y:i}),{x:n,y:i}},"setCommitPosition"),O$e=o((t,e,r)=>{let n=Us.get(t.branch);if(!n)throw new Error(`Branch not found for commit ${t.id}`);let i=e+r,a=n.pos;Hs.set(t.id,{x:a,y:i})},"setRootPosition"),P$e=o((t,e,r,n,i,a)=>{if(a===Kr.HIGHLIGHT)t.append("rect").attr("x",r.x-10).attr("y",r.y-10).attr("width",20).attr("height",20).attr("class",`commit ${e.id} commit-highlight${i%Np} ${n}-outer`),t.append("rect").attr("x",r.x-6).attr("y",r.y-6).attr("width",12).attr("height",12).attr("class",`commit ${e.id} commit${i%Np} ${n}-inner`);else if(a===Kr.CHERRY_PICK)t.append("circle").attr("cx",r.x).attr("cy",r.y).attr("r",10).attr("class",`commit ${e.id} ${n}`),t.append("circle").attr("cx",r.x-3).attr("cy",r.y+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${e.id} ${n}`),t.append("circle").attr("cx",r.x+3).attr("cy",r.y+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${e.id} ${n}`),t.append("line").attr("x1",r.x+3).attr("y1",r.y+1).attr("x2",r.x).attr("y2",r.y-5).attr("stroke","#fff").attr("class",`commit ${e.id} ${n}`),t.append("line").attr("x1",r.x-3).attr("y1",r.y+1).attr("x2",r.x).attr("y2",r.y-5).attr("stroke","#fff").attr("class",`commit ${e.id} ${n}`);else{let s=t.append("circle");if(s.attr("cx",r.x),s.attr("cy",r.y),s.attr("r",e.type===Kr.MERGE?9:10),s.attr("class",`commit ${e.id} commit${i%Np}`),a===Kr.MERGE){let l=t.append("circle");l.attr("cx",r.x),l.attr("cy",r.y),l.attr("r",6),l.attr("class",`commit ${n} ${e.id} commit${i%Np}`)}a===Kr.REVERSE&&t.append("path").attr("d",`M ${r.x-5},${r.y-5}L${r.x+5},${r.y+5}M${r.x-5},${r.y+5}L${r.x+5},${r.y-5}`).attr("class",`commit ${n} ${e.id} commit${i%Np}`)}},"drawCommitBullet"),B$e=o((t,e,r,n)=>{if(e.type!==Kr.CHERRY_PICK&&(e.customId&&e.type===Kr.MERGE||e.type!==Kr.MERGE)&&Qo?.showCommitLabel){let i=t.append("g"),a=i.insert("rect").attr("class","commit-label-bkg"),s=i.append("text").attr("x",n).attr("y",r.y+25).attr("class","commit-label").text(e.id),l=s.node()?.getBBox();if(l&&(a.attr("x",r.posWithOffset-l.width/2-Ku).attr("y",r.y+13.5).attr("width",l.width+2*Ku).attr("height",l.height+2*Ku),Br==="TB"||Br==="BT"?(a.attr("x",r.x-(l.width+4*Hc+5)).attr("y",r.y-12),s.attr("x",r.x-(l.width+4*Hc)).attr("y",r.y+l.height-12)):s.attr("x",r.posWithOffset-l.width/2),Qo.rotateCommitLabel))if(Br==="TB"||Br==="BT")s.attr("transform","rotate(-45, "+r.x+", "+r.y+")"),a.attr("transform","rotate(-45, "+r.x+", "+r.y+")");else{let u=-7.5-(l.width+10)/25*9.5,h=10+l.width/25*8.5;i.attr("transform","translate("+u+", "+h+") rotate(-45, "+n+", "+r.y+")")}}},"drawCommitLabel"),F$e=o((t,e,r,n)=>{if(e.tags.length>0){let i=0,a=0,s=0,l=[];for(let u of e.tags.reverse()){let h=t.insert("polygon"),f=t.append("circle"),d=t.append("text").attr("y",r.y-16-i).attr("class","tag-label").text(u),p=d.node()?.getBBox();if(!p)throw new Error("Tag bbox not found");a=Math.max(a,p.width),s=Math.max(s,p.height),d.attr("x",r.posWithOffset-p.width/2),l.push({tag:d,hole:f,rect:h,yOffset:i}),i+=20}for(let{tag:u,hole:h,rect:f,yOffset:d}of l){let p=s/2,m=r.y-19.2-d;if(f.attr("class","tag-label-bkg").attr("points",` - ${n-a/2-Hc/2},${m+Ku} - ${n-a/2-Hc/2},${m-Ku} - ${r.posWithOffset-a/2-Hc},${m-p-Ku} - ${r.posWithOffset+a/2+Hc},${m-p-Ku} - ${r.posWithOffset+a/2+Hc},${m+p+Ku} - ${r.posWithOffset-a/2-Hc},${m+p+Ku}`),h.attr("cy",m).attr("cx",n-a/2+Hc/2).attr("r",1.5).attr("class","tag-hole"),Br==="TB"||Br==="BT"){let g=n+d;f.attr("class","tag-label-bkg").attr("points",` +`);super(`Parsing failed: ${e} ${r}`),this.result=t}static{xt(this,"MermaidParseError")}}});function Jo(t,e){t.accDescr&&e.setAccDescription?.(t.accDescr),t.accTitle&&e.setAccTitle?.(t.accTitle),t.title&&e.setDiagramTitle?.(t.title)}var Mp=N(()=>{"use strict";o(Jo,"populateCommonDb")});var Kr,ES=N(()=>{"use strict";Kr={NORMAL:0,REVERSE:1,HIGHLIGHT:2,MERGE:3,CHERRY_PICK:4}});var Tf,SS=N(()=>{"use strict";Tf=class{constructor(e){this.init=e;this.records=this.init()}static{o(this,"ImperativeState")}reset(){this.records=this.init()}}});function AO(){return R9({length:7})}function Uze(t,e){let r=Object.create(null);return t.reduce((n,i)=>{let a=e(i);return r[a]||(r[a]=!0,n.push(i)),n},[])}function mhe(t,e,r){let n=t.indexOf(e);n===-1?t.push(r):t.splice(n,1,r)}function yhe(t){let e=t.reduce((i,a)=>i.seq>a.seq?i:a,t[0]),r="";t.forEach(function(i){i===e?r+=" *":r+=" |"});let n=[r,e.id,e.seq];for(let i in At.records.branches)At.records.branches.get(i)===e.id&&n.push(i);if(X.debug(n.join(" ")),e.parents&&e.parents.length==2&&e.parents[0]&&e.parents[1]){let i=At.records.commits.get(e.parents[0]);mhe(t,e,i),e.parents[1]&&t.push(At.records.commits.get(e.parents[1]))}else{if(e.parents.length==0)return;if(e.parents[0]){let i=At.records.commits.get(e.parents[0]);mhe(t,e,i)}}t=Uze(t,i=>i.id),yhe(t)}var Vze,Ip,At,Hze,Wze,qze,Yze,Xze,jze,Kze,ghe,Qze,Zze,Jze,eGe,tGe,vhe,rGe,nGe,iGe,CS,_O=N(()=>{"use strict";yt();er();mi();pr();ci();ES();SS();_a();Vze=or.gitGraph,Ip=o(()=>$n({...Vze,...tr().gitGraph}),"getConfig"),At=new Tf(()=>{let t=Ip(),e=t.mainBranchName,r=t.mainBranchOrder;return{mainBranchName:e,commits:new Map,head:null,branchConfig:new Map([[e,{name:e,order:r}]]),branches:new Map([[e,null]]),currBranch:e,direction:"LR",seq:0,options:{}}});o(AO,"getID");o(Uze,"uniqBy");Hze=o(function(t){At.records.direction=t},"setDirection"),Wze=o(function(t){X.debug("options str",t),t=t?.trim(),t=t||"{}";try{At.records.options=JSON.parse(t)}catch(e){X.error("error while parsing gitGraph options",e.message)}},"setOptions"),qze=o(function(){return At.records.options},"getOptions"),Yze=o(function(t){let e=t.msg,r=t.id,n=t.type,i=t.tags;X.info("commit",e,r,n,i),X.debug("Entering commit:",e,r,n,i);let a=Ip();r=Ze.sanitizeText(r,a),e=Ze.sanitizeText(e,a),i=i?.map(l=>Ze.sanitizeText(l,a));let s={id:r||At.records.seq+"-"+AO(),message:e,seq:At.records.seq++,type:n??Kr.NORMAL,tags:i??[],parents:At.records.head==null?[]:[At.records.head.id],branch:At.records.currBranch};At.records.head=s,X.info("main branch",a.mainBranchName),At.records.commits.has(s.id)&&X.warn(`Commit ID ${s.id} already exists`),At.records.commits.set(s.id,s),At.records.branches.set(At.records.currBranch,s.id),X.debug("in pushCommit "+s.id)},"commit"),Xze=o(function(t){let e=t.name,r=t.order;if(e=Ze.sanitizeText(e,Ip()),At.records.branches.has(e))throw 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 ${e}")`);At.records.branches.set(e,At.records.head!=null?At.records.head.id:null),At.records.branchConfig.set(e,{name:e,order:r}),ghe(e),X.debug("in createBranch")},"branch"),jze=o(t=>{let e=t.branch,r=t.id,n=t.type,i=t.tags,a=Ip();e=Ze.sanitizeText(e,a),r&&(r=Ze.sanitizeText(r,a));let s=At.records.branches.get(At.records.currBranch),l=At.records.branches.get(e),u=s?At.records.commits.get(s):void 0,h=l?At.records.commits.get(l):void 0;if(u&&h&&u.branch===e)throw new Error(`Cannot merge branch '${e}' into itself.`);if(At.records.currBranch===e){let p=new Error('Incorrect usage of "merge". Cannot merge a branch to itself');throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:["branch abc"]},p}if(u===void 0||!u){let p=new Error(`Incorrect usage of "merge". Current branch (${At.records.currBranch})has no commits`);throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:["commit"]},p}if(!At.records.branches.has(e)){let p=new Error('Incorrect usage of "merge". Branch to be merged ('+e+") does not exist");throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:[`branch ${e}`]},p}if(h===void 0||!h){let p=new Error('Incorrect usage of "merge". Branch to be merged ('+e+") has no commits");throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:['"commit"']},p}if(u===h){let p=new Error('Incorrect usage of "merge". Both branches have same head');throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:["branch abc"]},p}if(r&&At.records.commits.has(r)){let p=new Error('Incorrect usage of "merge". Commit with id:'+r+" already exists, use different custom id");throw p.hash={text:`merge ${e} ${r} ${n} ${i?.join(" ")}`,token:`merge ${e} ${r} ${n} ${i?.join(" ")}`,expected:[`merge ${e} ${r}_UNIQUE ${n} ${i?.join(" ")}`]},p}let f=l||"",d={id:r||`${At.records.seq}-${AO()}`,message:`merged branch ${e} into ${At.records.currBranch}`,seq:At.records.seq++,parents:At.records.head==null?[]:[At.records.head.id,f],branch:At.records.currBranch,type:Kr.MERGE,customType:n,customId:!!r,tags:i??[]};At.records.head=d,At.records.commits.set(d.id,d),At.records.branches.set(At.records.currBranch,d.id),X.debug(At.records.branches),X.debug("in mergeBranch")},"merge"),Kze=o(function(t){let e=t.id,r=t.targetId,n=t.tags,i=t.parent;X.debug("Entering cherryPick:",e,r,n);let a=Ip();if(e=Ze.sanitizeText(e,a),r=Ze.sanitizeText(r,a),n=n?.map(u=>Ze.sanitizeText(u,a)),i=Ze.sanitizeText(i,a),!e||!At.records.commits.has(e)){let u=new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');throw u.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},u}let s=At.records.commits.get(e);if(s===void 0||!s)throw new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');if(i&&!(Array.isArray(s.parents)&&s.parents.includes(i)))throw new Error("Invalid operation: The specified parent commit is not an immediate parent of the cherry-picked commit.");let l=s.branch;if(s.type===Kr.MERGE&&!i)throw new Error("Incorrect usage of cherry-pick: If the source commit is a merge commit, an immediate parent commit must be specified.");if(!r||!At.records.commits.has(r)){if(l===At.records.currBranch){let d=new Error('Incorrect usage of "cherryPick". Source commit is already on current branch');throw d.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},d}let u=At.records.branches.get(At.records.currBranch);if(u===void 0||!u){let d=new Error(`Incorrect usage of "cherry-pick". Current branch (${At.records.currBranch})has no commits`);throw d.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},d}let h=At.records.commits.get(u);if(h===void 0||!h){let d=new Error(`Incorrect usage of "cherry-pick". Current branch (${At.records.currBranch})has no commits`);throw d.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},d}let f={id:At.records.seq+"-"+AO(),message:`cherry-picked ${s?.message} into ${At.records.currBranch}`,seq:At.records.seq++,parents:At.records.head==null?[]:[At.records.head.id,s.id],branch:At.records.currBranch,type:Kr.CHERRY_PICK,tags:n?n.filter(Boolean):[`cherry-pick:${s.id}${s.type===Kr.MERGE?`|parent:${i}`:""}`]};At.records.head=f,At.records.commits.set(f.id,f),At.records.branches.set(At.records.currBranch,f.id),X.debug(At.records.branches),X.debug("in cherryPick")}},"cherryPick"),ghe=o(function(t){if(t=Ze.sanitizeText(t,Ip()),At.records.branches.has(t)){At.records.currBranch=t;let e=At.records.branches.get(At.records.currBranch);e===void 0||!e?At.records.head=null:At.records.head=At.records.commits.get(e)??null}else{let e=new Error(`Trying to checkout branch which is not yet created. (Help try using "branch ${t}")`);throw e.hash={text:`checkout ${t}`,token:`checkout ${t}`,expected:[`branch ${t}`]},e}},"checkout");o(mhe,"upsert");o(yhe,"prettyPrintCommitHistory");Qze=o(function(){X.debug(At.records.commits);let t=vhe()[0];yhe([t])},"prettyPrint"),Zze=o(function(){At.reset(),kr()},"clear"),Jze=o(function(){return[...At.records.branchConfig.values()].map((e,r)=>e.order!==null&&e.order!==void 0?e:{...e,order:parseFloat(`0.${r}`)}).sort((e,r)=>(e.order??0)-(r.order??0)).map(({name:e})=>({name:e}))},"getBranchesAsObjArray"),eGe=o(function(){return At.records.branches},"getBranches"),tGe=o(function(){return At.records.commits},"getCommits"),vhe=o(function(){let t=[...At.records.commits.values()];return t.forEach(function(e){X.debug(e.id)}),t.sort((e,r)=>e.seq-r.seq),t},"getCommitsArray"),rGe=o(function(){return At.records.currBranch},"getCurrentBranch"),nGe=o(function(){return At.records.direction},"getDirection"),iGe=o(function(){return At.records.head},"getHead"),CS={commitType:Kr,getConfig:Ip,setDirection:Hze,setOptions:Wze,getOptions:qze,commit:Yze,branch:Xze,merge:jze,cherryPick:Kze,checkout:ghe,prettyPrint:Qze,clear:Zze,getBranchesAsObjArray:Jze,getBranches:eGe,getCommits:tGe,getCommitsArray:vhe,getCurrentBranch:rGe,getDirection:nGe,getHead:iGe,setAccTitle:Ar,getAccTitle:Dr,getAccDescription:Rr,setAccDescription:Lr,setDiagramTitle:Or,getDiagramTitle:Nr}});var aGe,sGe,oGe,lGe,cGe,uGe,hGe,xhe,bhe=N(()=>{"use strict";bf();yt();Mp();_O();ES();aGe=o((t,e)=>{Jo(t,e),t.dir&&e.setDirection(t.dir);for(let r of t.statements)sGe(r,e)},"populate"),sGe=o((t,e)=>{let n={Commit:o(i=>e.commit(oGe(i)),"Commit"),Branch:o(i=>e.branch(lGe(i)),"Branch"),Merge:o(i=>e.merge(cGe(i)),"Merge"),Checkout:o(i=>e.checkout(uGe(i)),"Checkout"),CherryPicking:o(i=>e.cherryPick(hGe(i)),"CherryPicking")}[t.$type];n?n(t):X.error(`Unknown statement type: ${t.$type}`)},"parseStatement"),oGe=o(t=>({id:t.id,msg:t.message??"",type:t.type!==void 0?Kr[t.type]:Kr.NORMAL,tags:t.tags??void 0}),"parseCommit"),lGe=o(t=>({name:t.name,order:t.order??0}),"parseBranch"),cGe=o(t=>({branch:t.branch,id:t.id??"",type:t.type!==void 0?Kr[t.type]:void 0,tags:t.tags??void 0}),"parseMerge"),uGe=o(t=>t.branch,"parseCheckout"),hGe=o(t=>({id:t.id,targetId:"",tags:t.tags?.length===0?void 0:t.tags,parent:t.parent}),"parseCherryPicking"),xhe={parse:o(async t=>{let e=await vs("gitGraph",t);X.debug(e),aGe(e,CS)},"parse")}});var fGe,el,kf,Ef,Wc,Zu,Op,Hs,Ws,AS,Eb,_S,wf,Fr,dGe,whe,khe,pGe,mGe,gGe,yGe,vGe,xGe,bGe,TGe,wGe,kGe,EGe,SGe,The,CGe,Sb,AGe,_Ge,DGe,LGe,RGe,Ehe,She=N(()=>{"use strict";fr();Gt();yt();er();ES();fGe=me(),el=fGe?.gitGraph,kf=10,Ef=40,Wc=4,Zu=2,Op=8,Hs=new Map,Ws=new Map,AS=30,Eb=new Map,_S=[],wf=0,Fr="LR",dGe=o(()=>{Hs.clear(),Ws.clear(),Eb.clear(),wf=0,_S=[],Fr="LR"},"clear"),whe=o(t=>{let e=document.createElementNS("http://www.w3.org/2000/svg","text");return(typeof t=="string"?t.split(/\\n|\n|/gi):t).forEach(n=>{let i=document.createElementNS("http://www.w3.org/2000/svg","tspan");i.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),i.setAttribute("dy","1em"),i.setAttribute("x","0"),i.setAttribute("class","row"),i.textContent=n.trim(),e.appendChild(i)}),e},"drawText"),khe=o(t=>{let e,r,n;return Fr==="BT"?(r=o((i,a)=>i<=a,"comparisonFunc"),n=1/0):(r=o((i,a)=>i>=a,"comparisonFunc"),n=0),t.forEach(i=>{let a=Fr==="TB"||Fr=="BT"?Ws.get(i)?.y:Ws.get(i)?.x;a!==void 0&&r(a,n)&&(e=i,n=a)}),e},"findClosestParent"),pGe=o(t=>{let e="",r=1/0;return t.forEach(n=>{let i=Ws.get(n).y;i<=r&&(e=n,r=i)}),e||void 0},"findClosestParentBT"),mGe=o((t,e,r)=>{let n=r,i=r,a=[];t.forEach(s=>{let l=e.get(s);if(!l)throw new Error(`Commit not found for key ${s}`);l.parents.length?(n=yGe(l),i=Math.max(n,i)):a.push(l),vGe(l,n)}),n=i,a.forEach(s=>{xGe(s,n,r)}),t.forEach(s=>{let l=e.get(s);if(l?.parents.length){let u=pGe(l.parents);n=Ws.get(u).y-Ef,n<=i&&(i=n);let h=Hs.get(l.branch).pos,f=n-kf;Ws.set(l.id,{x:h,y:f})}})},"setParallelBTPos"),gGe=o(t=>{let e=khe(t.parents.filter(n=>n!==null));if(!e)throw new Error(`Closest parent not found for commit ${t.id}`);let r=Ws.get(e)?.y;if(r===void 0)throw new Error(`Closest parent position not found for commit ${t.id}`);return r},"findClosestParentPos"),yGe=o(t=>gGe(t)+Ef,"calculateCommitPosition"),vGe=o((t,e)=>{let r=Hs.get(t.branch);if(!r)throw new Error(`Branch not found for commit ${t.id}`);let n=r.pos,i=e+kf;return Ws.set(t.id,{x:n,y:i}),{x:n,y:i}},"setCommitPosition"),xGe=o((t,e,r)=>{let n=Hs.get(t.branch);if(!n)throw new Error(`Branch not found for commit ${t.id}`);let i=e+r,a=n.pos;Ws.set(t.id,{x:a,y:i})},"setRootPosition"),bGe=o((t,e,r,n,i,a)=>{if(a===Kr.HIGHLIGHT)t.append("rect").attr("x",r.x-10).attr("y",r.y-10).attr("width",20).attr("height",20).attr("class",`commit ${e.id} commit-highlight${i%Op} ${n}-outer`),t.append("rect").attr("x",r.x-6).attr("y",r.y-6).attr("width",12).attr("height",12).attr("class",`commit ${e.id} commit${i%Op} ${n}-inner`);else if(a===Kr.CHERRY_PICK)t.append("circle").attr("cx",r.x).attr("cy",r.y).attr("r",10).attr("class",`commit ${e.id} ${n}`),t.append("circle").attr("cx",r.x-3).attr("cy",r.y+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${e.id} ${n}`),t.append("circle").attr("cx",r.x+3).attr("cy",r.y+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${e.id} ${n}`),t.append("line").attr("x1",r.x+3).attr("y1",r.y+1).attr("x2",r.x).attr("y2",r.y-5).attr("stroke","#fff").attr("class",`commit ${e.id} ${n}`),t.append("line").attr("x1",r.x-3).attr("y1",r.y+1).attr("x2",r.x).attr("y2",r.y-5).attr("stroke","#fff").attr("class",`commit ${e.id} ${n}`);else{let s=t.append("circle");if(s.attr("cx",r.x),s.attr("cy",r.y),s.attr("r",e.type===Kr.MERGE?9:10),s.attr("class",`commit ${e.id} commit${i%Op}`),a===Kr.MERGE){let l=t.append("circle");l.attr("cx",r.x),l.attr("cy",r.y),l.attr("r",6),l.attr("class",`commit ${n} ${e.id} commit${i%Op}`)}a===Kr.REVERSE&&t.append("path").attr("d",`M ${r.x-5},${r.y-5}L${r.x+5},${r.y+5}M${r.x-5},${r.y+5}L${r.x+5},${r.y-5}`).attr("class",`commit ${n} ${e.id} commit${i%Op}`)}},"drawCommitBullet"),TGe=o((t,e,r,n)=>{if(e.type!==Kr.CHERRY_PICK&&(e.customId&&e.type===Kr.MERGE||e.type!==Kr.MERGE)&&el?.showCommitLabel){let i=t.append("g"),a=i.insert("rect").attr("class","commit-label-bkg"),s=i.append("text").attr("x",n).attr("y",r.y+25).attr("class","commit-label").text(e.id),l=s.node()?.getBBox();if(l&&(a.attr("x",r.posWithOffset-l.width/2-Zu).attr("y",r.y+13.5).attr("width",l.width+2*Zu).attr("height",l.height+2*Zu),Fr==="TB"||Fr==="BT"?(a.attr("x",r.x-(l.width+4*Wc+5)).attr("y",r.y-12),s.attr("x",r.x-(l.width+4*Wc)).attr("y",r.y+l.height-12)):s.attr("x",r.posWithOffset-l.width/2),el.rotateCommitLabel))if(Fr==="TB"||Fr==="BT")s.attr("transform","rotate(-45, "+r.x+", "+r.y+")"),a.attr("transform","rotate(-45, "+r.x+", "+r.y+")");else{let u=-7.5-(l.width+10)/25*9.5,h=10+l.width/25*8.5;i.attr("transform","translate("+u+", "+h+") rotate(-45, "+n+", "+r.y+")")}}},"drawCommitLabel"),wGe=o((t,e,r,n)=>{if(e.tags.length>0){let i=0,a=0,s=0,l=[];for(let u of e.tags.reverse()){let h=t.insert("polygon"),f=t.append("circle"),d=t.append("text").attr("y",r.y-16-i).attr("class","tag-label").text(u),p=d.node()?.getBBox();if(!p)throw new Error("Tag bbox not found");a=Math.max(a,p.width),s=Math.max(s,p.height),d.attr("x",r.posWithOffset-p.width/2),l.push({tag:d,hole:f,rect:h,yOffset:i}),i+=20}for(let{tag:u,hole:h,rect:f,yOffset:d}of l){let p=s/2,m=r.y-19.2-d;if(f.attr("class","tag-label-bkg").attr("points",` + ${n-a/2-Wc/2},${m+Zu} + ${n-a/2-Wc/2},${m-Zu} + ${r.posWithOffset-a/2-Wc},${m-p-Zu} + ${r.posWithOffset+a/2+Wc},${m-p-Zu} + ${r.posWithOffset+a/2+Wc},${m+p+Zu} + ${r.posWithOffset-a/2-Wc},${m+p+Zu}`),h.attr("cy",m).attr("cx",n-a/2+Wc/2).attr("r",1.5).attr("class","tag-hole"),Fr==="TB"||Fr==="BT"){let g=n+d;f.attr("class","tag-label-bkg").attr("points",` ${r.x},${g+2} ${r.x},${g-2} - ${r.x+bf},${g-p-2} - ${r.x+bf+a+4},${g-p-2} - ${r.x+bf+a+4},${g+p+2} - ${r.x+bf},${g+p+2}`).attr("transform","translate(12,12) rotate(45, "+r.x+","+n+")"),h.attr("cx",r.x+Hc/2).attr("cy",g).attr("transform","translate(12,12) rotate(45, "+r.x+","+n+")"),u.attr("x",r.x+5).attr("y",g+3).attr("transform","translate(14,14) rotate(45, "+r.x+","+n+")")}}}},"drawCommitTags"),$$e=o(t=>{switch(t.customType??t.type){case Kr.NORMAL:return"commit-normal";case Kr.REVERSE:return"commit-reverse";case Kr.HIGHLIGHT:return"commit-highlight";case Kr.MERGE:return"commit-merge";case Kr.CHERRY_PICK:return"commit-cherry-pick";default:return"commit-normal"}},"getCommitClassType"),z$e=o((t,e,r,n)=>{let i={x:0,y:0};if(t.parents.length>0){let a=oue(t.parents);if(a){let s=n.get(a)??i;return e==="TB"?s.y+wf:e==="BT"?(n.get(t.id)??i).y-wf:s.x+wf}}else return e==="TB"?pS:e==="BT"?(n.get(t.id)??i).y-wf:0;return 0},"calculatePosition"),G$e=o((t,e,r)=>{let n=Br==="BT"&&r?e:e+bf,i=Br==="TB"||Br==="BT"?n:Us.get(t.branch)?.pos,a=Br==="TB"||Br==="BT"?Us.get(t.branch)?.pos:n;if(a===void 0||i===void 0)throw new Error(`Position were undefined for commit ${t.id}`);return{x:a,y:i,posWithOffset:n}},"getCommitPosition"),aue=o((t,e,r)=>{if(!Qo)throw new Error("GitGraph config not found");let n=t.append("g").attr("class","commit-bullets"),i=t.append("g").attr("class","commit-labels"),a=Br==="TB"||Br==="BT"?pS:0,s=[...e.keys()],l=Qo?.parallelCommits??!1,u=o((f,d)=>{let p=e.get(f)?.seq,m=e.get(d)?.seq;return p!==void 0&&m!==void 0?p-m:0},"sortKeys"),h=s.sort(u);Br==="BT"&&(l&&R$e(h,e,a),h=h.reverse()),h.forEach(f=>{let d=e.get(f);if(!d)throw new Error(`Commit not found for key ${f}`);l&&(a=z$e(d,Br,a,Hs));let p=G$e(d,a,l);if(r){let m=$$e(d),g=d.customType??d.type,y=Us.get(d.branch)?.index??0;P$e(n,d,p,m,y,g),B$e(i,d,p,a),F$e(i,d,p,a)}Br==="TB"||Br==="BT"?Hs.set(d.id,{x:p.x,y:p.posWithOffset}):Hs.set(d.id,{x:p.posWithOffset,y:p.y}),a=Br==="BT"&&l?a+wf:a+wf+bf,a>xf&&(xf=a)})},"drawCommits"),V$e=o((t,e,r,n,i)=>{let s=(Br==="TB"||Br==="BT"?r.xh.branch===s,"isOnBranchToGetCurve"),u=o(h=>h.seq>t.seq&&h.sequ(h)&&l(h))},"shouldRerouteArrow"),wb=o((t,e,r=0)=>{let n=t+Math.abs(t-e)/2;if(r>5)return n;if(mS.every(s=>Math.abs(s-n)>=10))return mS.push(n),n;let a=Math.abs(t-e);return wb(t,e-a/5,r+1)},"findLane"),U$e=o((t,e,r,n)=>{let i=Hs.get(e.id),a=Hs.get(r.id);if(i===void 0||a===void 0)throw new Error(`Commit positions not found for commits ${e.id} and ${r.id}`);let s=V$e(e,r,i,a,n),l="",u="",h=0,f=0,d=Us.get(r.branch)?.index;r.type===Kr.MERGE&&e.id!==r.parents[0]&&(d=Us.get(e.branch)?.index);let p;if(s){l="A 10 10, 0, 0, 0,",u="A 10 10, 0, 0, 1,",h=10,f=10;let m=i.ya.x&&(l="A 20 20, 0, 0, 0,",u="A 20 20, 0, 0, 1,",h=20,f=20,r.type===Kr.MERGE&&e.id!==r.parents[0]?p=`M ${i.x} ${i.y} L ${i.x} ${a.y-h} ${u} ${i.x-f} ${a.y} L ${a.x} ${a.y}`:p=`M ${i.x} ${i.y} L ${a.x+h} ${i.y} ${l} ${a.x} ${i.y+f} L ${a.x} ${a.y}`),i.x===a.x&&(p=`M ${i.x} ${i.y} L ${a.x} ${a.y}`)):Br==="BT"?(i.xa.x&&(l="A 20 20, 0, 0, 0,",u="A 20 20, 0, 0, 1,",h=20,f=20,r.type===Kr.MERGE&&e.id!==r.parents[0]?p=`M ${i.x} ${i.y} L ${i.x} ${a.y+h} ${l} ${i.x-f} ${a.y} L ${a.x} ${a.y}`:p=`M ${i.x} ${i.y} L ${a.x-h} ${i.y} ${l} ${a.x} ${i.y-f} L ${a.x} ${a.y}`),i.x===a.x&&(p=`M ${i.x} ${i.y} L ${a.x} ${a.y}`)):(i.ya.y&&(r.type===Kr.MERGE&&e.id!==r.parents[0]?p=`M ${i.x} ${i.y} L ${a.x-h} ${i.y} ${l} ${a.x} ${i.y-f} L ${a.x} ${a.y}`:p=`M ${i.x} ${i.y} L ${i.x} ${a.y+h} ${u} ${i.x+f} ${a.y} L ${a.x} ${a.y}`),i.y===a.y&&(p=`M ${i.x} ${i.y} L ${a.x} ${a.y}`));if(p===void 0)throw new Error("Line definition not found");t.append("path").attr("d",p).attr("class","arrow arrow"+d%Np)},"drawArrow"),H$e=o((t,e)=>{let r=t.append("g").attr("class","commit-arrows");[...e.keys()].forEach(n=>{let i=e.get(n);i.parents&&i.parents.length>0&&i.parents.forEach(a=>{U$e(r,e.get(a),i,e)})})},"drawArrows"),W$e=o((t,e)=>{let r=t.append("g");e.forEach((n,i)=>{let a=i%Np,s=Us.get(n.name)?.pos;if(s===void 0)throw new Error(`Position not found for branch ${n.name}`);let l=r.append("line");l.attr("x1",0),l.attr("y1",s),l.attr("x2",xf),l.attr("y2",s),l.attr("class","branch branch"+a),Br==="TB"?(l.attr("y1",pS),l.attr("x1",s),l.attr("y2",xf),l.attr("x2",s)):Br==="BT"&&(l.attr("y1",xf),l.attr("x1",s),l.attr("y2",pS),l.attr("x2",s)),mS.push(s);let u=n.name,h=sue(u),f=r.insert("rect"),p=r.insert("g").attr("class","branchLabel").insert("g").attr("class","label branch-label"+a);p.node().appendChild(h);let m=h.getBBox();f.attr("class","branchLabelBkg label"+a).attr("rx",4).attr("ry",4).attr("x",-m.width-4-(Qo?.rotateCommitLabel===!0?30:0)).attr("y",-m.height/2+8).attr("width",m.width+18).attr("height",m.height+4),p.attr("transform","translate("+(-m.width-14-(Qo?.rotateCommitLabel===!0?30:0))+", "+(s-m.height/2-1)+")"),Br==="TB"?(f.attr("x",s-m.width/2-10).attr("y",0),p.attr("transform","translate("+(s-m.width/2-5)+", 0)")):Br==="BT"?(f.attr("x",s-m.width/2-10).attr("y",xf),p.attr("transform","translate("+(s-m.width/2-5)+", "+xf+")")):f.attr("transform","translate(-19, "+(s-m.height/2)+")")})},"drawBranches"),q$e=o(function(t,e,r,n,i){return Us.set(t,{pos:e,index:r}),e+=50+(i?40:0)+(Br==="TB"||Br==="BT"?n.width/2:0),e},"setBranchPosition"),Y$e=o(function(t,e,r,n){if(D$e(),X.debug("in gitgraph renderer",t+` -`,"id:",e,r),!Qo)throw new Error("GitGraph config not found");let i=Qo.rotateCommitLabel??!1,a=n.db;bb=a.getCommits();let s=a.getBranchesAsObjArray();Br=a.getDirection();let l=Ge(`[id="${e}"]`),u=0;s.forEach((h,f)=>{let d=sue(h.name),p=l.append("g"),m=p.insert("g").attr("class","branchLabel"),g=m.insert("g").attr("class","label branch-label");g.node()?.appendChild(d);let y=d.getBBox();u=q$e(h.name,u,f,y,i),g.remove(),m.remove(),p.remove()}),aue(l,bb,!1),Qo.showBranches&&W$e(l,s),H$e(l,bb),aue(l,bb,!0),Gt.insertTitle(l,"gitTitleText",Qo.titleTopMargin??0,a.getDiagramTitle()),fA(void 0,l,Qo.diagramPadding,Qo.useMaxWidth)},"draw"),lue={draw:Y$e}});var X$e,uue,hue=N(()=>{"use strict";X$e=o(t=>` + ${r.x+kf},${g-p-2} + ${r.x+kf+a+4},${g-p-2} + ${r.x+kf+a+4},${g+p+2} + ${r.x+kf},${g+p+2}`).attr("transform","translate(12,12) rotate(45, "+r.x+","+n+")"),h.attr("cx",r.x+Wc/2).attr("cy",g).attr("transform","translate(12,12) rotate(45, "+r.x+","+n+")"),u.attr("x",r.x+5).attr("y",g+3).attr("transform","translate(14,14) rotate(45, "+r.x+","+n+")")}}}},"drawCommitTags"),kGe=o(t=>{switch(t.customType??t.type){case Kr.NORMAL:return"commit-normal";case Kr.REVERSE:return"commit-reverse";case Kr.HIGHLIGHT:return"commit-highlight";case Kr.MERGE:return"commit-merge";case Kr.CHERRY_PICK:return"commit-cherry-pick";default:return"commit-normal"}},"getCommitClassType"),EGe=o((t,e,r,n)=>{let i={x:0,y:0};if(t.parents.length>0){let a=khe(t.parents);if(a){let s=n.get(a)??i;return e==="TB"?s.y+Ef:e==="BT"?(n.get(t.id)??i).y-Ef:s.x+Ef}}else return e==="TB"?AS:e==="BT"?(n.get(t.id)??i).y-Ef:0;return 0},"calculatePosition"),SGe=o((t,e,r)=>{let n=Fr==="BT"&&r?e:e+kf,i=Fr==="TB"||Fr==="BT"?n:Hs.get(t.branch)?.pos,a=Fr==="TB"||Fr==="BT"?Hs.get(t.branch)?.pos:n;if(a===void 0||i===void 0)throw new Error(`Position were undefined for commit ${t.id}`);return{x:a,y:i,posWithOffset:n}},"getCommitPosition"),The=o((t,e,r)=>{if(!el)throw new Error("GitGraph config not found");let n=t.append("g").attr("class","commit-bullets"),i=t.append("g").attr("class","commit-labels"),a=Fr==="TB"||Fr==="BT"?AS:0,s=[...e.keys()],l=el?.parallelCommits??!1,u=o((f,d)=>{let p=e.get(f)?.seq,m=e.get(d)?.seq;return p!==void 0&&m!==void 0?p-m:0},"sortKeys"),h=s.sort(u);Fr==="BT"&&(l&&mGe(h,e,a),h=h.reverse()),h.forEach(f=>{let d=e.get(f);if(!d)throw new Error(`Commit not found for key ${f}`);l&&(a=EGe(d,Fr,a,Ws));let p=SGe(d,a,l);if(r){let m=kGe(d),g=d.customType??d.type,y=Hs.get(d.branch)?.index??0;bGe(n,d,p,m,y,g),TGe(i,d,p,a),wGe(i,d,p,a)}Fr==="TB"||Fr==="BT"?Ws.set(d.id,{x:p.x,y:p.posWithOffset}):Ws.set(d.id,{x:p.posWithOffset,y:p.y}),a=Fr==="BT"&&l?a+Ef:a+Ef+kf,a>wf&&(wf=a)})},"drawCommits"),CGe=o((t,e,r,n,i)=>{let s=(Fr==="TB"||Fr==="BT"?r.xh.branch===s,"isOnBranchToGetCurve"),u=o(h=>h.seq>t.seq&&h.sequ(h)&&l(h))},"shouldRerouteArrow"),Sb=o((t,e,r=0)=>{let n=t+Math.abs(t-e)/2;if(r>5)return n;if(_S.every(s=>Math.abs(s-n)>=10))return _S.push(n),n;let a=Math.abs(t-e);return Sb(t,e-a/5,r+1)},"findLane"),AGe=o((t,e,r,n)=>{let i=Ws.get(e.id),a=Ws.get(r.id);if(i===void 0||a===void 0)throw new Error(`Commit positions not found for commits ${e.id} and ${r.id}`);let s=CGe(e,r,i,a,n),l="",u="",h=0,f=0,d=Hs.get(r.branch)?.index;r.type===Kr.MERGE&&e.id!==r.parents[0]&&(d=Hs.get(e.branch)?.index);let p;if(s){l="A 10 10, 0, 0, 0,",u="A 10 10, 0, 0, 1,",h=10,f=10;let m=i.ya.x&&(l="A 20 20, 0, 0, 0,",u="A 20 20, 0, 0, 1,",h=20,f=20,r.type===Kr.MERGE&&e.id!==r.parents[0]?p=`M ${i.x} ${i.y} L ${i.x} ${a.y-h} ${u} ${i.x-f} ${a.y} L ${a.x} ${a.y}`:p=`M ${i.x} ${i.y} L ${a.x+h} ${i.y} ${l} ${a.x} ${i.y+f} L ${a.x} ${a.y}`),i.x===a.x&&(p=`M ${i.x} ${i.y} L ${a.x} ${a.y}`)):Fr==="BT"?(i.xa.x&&(l="A 20 20, 0, 0, 0,",u="A 20 20, 0, 0, 1,",h=20,f=20,r.type===Kr.MERGE&&e.id!==r.parents[0]?p=`M ${i.x} ${i.y} L ${i.x} ${a.y+h} ${l} ${i.x-f} ${a.y} L ${a.x} ${a.y}`:p=`M ${i.x} ${i.y} L ${a.x-h} ${i.y} ${l} ${a.x} ${i.y-f} L ${a.x} ${a.y}`),i.x===a.x&&(p=`M ${i.x} ${i.y} L ${a.x} ${a.y}`)):(i.ya.y&&(r.type===Kr.MERGE&&e.id!==r.parents[0]?p=`M ${i.x} ${i.y} L ${a.x-h} ${i.y} ${l} ${a.x} ${i.y-f} L ${a.x} ${a.y}`:p=`M ${i.x} ${i.y} L ${i.x} ${a.y+h} ${u} ${i.x+f} ${a.y} L ${a.x} ${a.y}`),i.y===a.y&&(p=`M ${i.x} ${i.y} L ${a.x} ${a.y}`));if(p===void 0)throw new Error("Line definition not found");t.append("path").attr("d",p).attr("class","arrow arrow"+d%Op)},"drawArrow"),_Ge=o((t,e)=>{let r=t.append("g").attr("class","commit-arrows");[...e.keys()].forEach(n=>{let i=e.get(n);i.parents&&i.parents.length>0&&i.parents.forEach(a=>{AGe(r,e.get(a),i,e)})})},"drawArrows"),DGe=o((t,e)=>{let r=t.append("g");e.forEach((n,i)=>{let a=i%Op,s=Hs.get(n.name)?.pos;if(s===void 0)throw new Error(`Position not found for branch ${n.name}`);let l=r.append("line");l.attr("x1",0),l.attr("y1",s),l.attr("x2",wf),l.attr("y2",s),l.attr("class","branch branch"+a),Fr==="TB"?(l.attr("y1",AS),l.attr("x1",s),l.attr("y2",wf),l.attr("x2",s)):Fr==="BT"&&(l.attr("y1",wf),l.attr("x1",s),l.attr("y2",AS),l.attr("x2",s)),_S.push(s);let u=n.name,h=whe(u),f=r.insert("rect"),p=r.insert("g").attr("class","branchLabel").insert("g").attr("class","label branch-label"+a);p.node().appendChild(h);let m=h.getBBox();f.attr("class","branchLabelBkg label"+a).attr("rx",4).attr("ry",4).attr("x",-m.width-4-(el?.rotateCommitLabel===!0?30:0)).attr("y",-m.height/2+8).attr("width",m.width+18).attr("height",m.height+4),p.attr("transform","translate("+(-m.width-14-(el?.rotateCommitLabel===!0?30:0))+", "+(s-m.height/2-1)+")"),Fr==="TB"?(f.attr("x",s-m.width/2-10).attr("y",0),p.attr("transform","translate("+(s-m.width/2-5)+", 0)")):Fr==="BT"?(f.attr("x",s-m.width/2-10).attr("y",wf),p.attr("transform","translate("+(s-m.width/2-5)+", "+wf+")")):f.attr("transform","translate(-19, "+(s-m.height/2)+")")})},"drawBranches"),LGe=o(function(t,e,r,n,i){return Hs.set(t,{pos:e,index:r}),e+=50+(i?40:0)+(Fr==="TB"||Fr==="BT"?n.width/2:0),e},"setBranchPosition"),RGe=o(function(t,e,r,n){if(dGe(),X.debug("in gitgraph renderer",t+` +`,"id:",e,r),!el)throw new Error("GitGraph config not found");let i=el.rotateCommitLabel??!1,a=n.db;Eb=a.getCommits();let s=a.getBranchesAsObjArray();Fr=a.getDirection();let l=Ge(`[id="${e}"]`),u=0;s.forEach((h,f)=>{let d=whe(h.name),p=l.append("g"),m=p.insert("g").attr("class","branchLabel"),g=m.insert("g").attr("class","label branch-label");g.node()?.appendChild(d);let y=d.getBBox();u=LGe(h.name,u,f,y,i),g.remove(),m.remove(),p.remove()}),The(l,Eb,!1),el.showBranches&&DGe(l,s),_Ge(l,Eb),The(l,Eb,!0),Vt.insertTitle(l,"gitTitleText",el.titleTopMargin??0,a.getDiagramTitle()),AA(void 0,l,el.diagramPadding,el.useMaxWidth)},"draw"),Ehe={draw:RGe}});var NGe,Che,Ahe=N(()=>{"use strict";NGe=o(t=>` .commit-id, .commit-msg, .branch-label { @@ -892,12 +892,12 @@ ${r}`),this.inline?`{${i}}`:i}};o(SFe,"renderInlineTag");o(CFe,"renderLinkDefaul font-size: 18px; fill: ${t.textColor}; } -`,"getStyles"),uue=X$e});var fue={};hr(fue,{diagram:()=>j$e});var j$e,due=N(()=>{"use strict";iue();qI();cue();hue();j$e={parser:nue,db:dS,renderer:lue,styles:uue}});var YI,gue,yue=N(()=>{"use strict";YI=function(){var t=o(function(D,R,O,M){for(O=O||{},M=D.length;M--;O[D[M]]=R);return O},"o"),e=[6,8,10,12,13,14,15,16,17,18,20,21,22,23,24,25,26,27,28,29,30,31,33,35,36,38,40],r=[1,26],n=[1,27],i=[1,28],a=[1,29],s=[1,30],l=[1,31],u=[1,32],h=[1,33],f=[1,34],d=[1,9],p=[1,10],m=[1,11],g=[1,12],y=[1,13],v=[1,14],x=[1,15],b=[1,16],w=[1,19],C=[1,20],T=[1,21],E=[1,22],A=[1,23],S=[1,25],_=[1,35],I={trace:o(function(){},"trace"),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,weekend:19,weekend_friday:20,weekend_saturday:21,dateFormat:22,inclusiveEndDates:23,topAxis:24,axisFormat:25,tickInterval:26,excludes:27,includes:28,todayMarker:29,title:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,section:36,clickStatement:37,taskTxt:38,taskData:39,click:40,callbackname:41,callbackargs:42,href:43,clickStatementDebug:44,$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",20:"weekend_friday",21:"weekend_saturday",22:"dateFormat",23:"inclusiveEndDates",24:"topAxis",25:"axisFormat",26:"tickInterval",27:"excludes",28:"includes",29:"todayMarker",30:"title",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",36:"section",38:"taskTxt",39:"taskData",40:"click",41:"callbackname",42:"callbackargs",43:"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],[19,1],[19,1],[9,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],[37,2],[37,3],[37,3],[37,4],[37,3],[37,4],[37,2],[44,2],[44,3],[44,3],[44,4],[44,3],[44,4],[44,2]],performAction:o(function(R,O,M,P,B,F,z){var $=F.length-1;switch(B){case 1:return F[$-1];case 2:this.$=[];break;case 3:F[$-1].push(F[$]),this.$=F[$-1];break;case 4:case 5:this.$=F[$];break;case 6:case 7:this.$=[];break;case 8:P.setWeekday("monday");break;case 9:P.setWeekday("tuesday");break;case 10:P.setWeekday("wednesday");break;case 11:P.setWeekday("thursday");break;case 12:P.setWeekday("friday");break;case 13:P.setWeekday("saturday");break;case 14:P.setWeekday("sunday");break;case 15:P.setWeekend("friday");break;case 16:P.setWeekend("saturday");break;case 17:P.setDateFormat(F[$].substr(11)),this.$=F[$].substr(11);break;case 18:P.enableInclusiveEndDates(),this.$=F[$].substr(18);break;case 19:P.TopAxis(),this.$=F[$].substr(8);break;case 20:P.setAxisFormat(F[$].substr(11)),this.$=F[$].substr(11);break;case 21:P.setTickInterval(F[$].substr(13)),this.$=F[$].substr(13);break;case 22:P.setExcludes(F[$].substr(9)),this.$=F[$].substr(9);break;case 23:P.setIncludes(F[$].substr(9)),this.$=F[$].substr(9);break;case 24:P.setTodayMarker(F[$].substr(12)),this.$=F[$].substr(12);break;case 27:P.setDiagramTitle(F[$].substr(6)),this.$=F[$].substr(6);break;case 28:this.$=F[$].trim(),P.setAccTitle(this.$);break;case 29:case 30:this.$=F[$].trim(),P.setAccDescription(this.$);break;case 31:P.addSection(F[$].substr(8)),this.$=F[$].substr(8);break;case 33:P.addTask(F[$-1],F[$]),this.$="task";break;case 34:this.$=F[$-1],P.setClickEvent(F[$-1],F[$],null);break;case 35:this.$=F[$-2],P.setClickEvent(F[$-2],F[$-1],F[$]);break;case 36:this.$=F[$-2],P.setClickEvent(F[$-2],F[$-1],null),P.setLink(F[$-2],F[$]);break;case 37:this.$=F[$-3],P.setClickEvent(F[$-3],F[$-2],F[$-1]),P.setLink(F[$-3],F[$]);break;case 38:this.$=F[$-2],P.setClickEvent(F[$-2],F[$],null),P.setLink(F[$-2],F[$-1]);break;case 39:this.$=F[$-3],P.setClickEvent(F[$-3],F[$-1],F[$]),P.setLink(F[$-3],F[$-2]);break;case 40:this.$=F[$-1],P.setLink(F[$-1],F[$]);break;case 41:case 47:this.$=F[$-1]+" "+F[$];break;case 42:case 43:case 45:this.$=F[$-2]+" "+F[$-1]+" "+F[$];break;case 44:case 46:this.$=F[$-3]+" "+F[$-2]+" "+F[$-1]+" "+F[$];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:17,12:r,13:n,14:i,15:a,16:s,17:l,18:u,19:18,20:h,21:f,22:d,23:p,24:m,25:g,26:y,27:v,28:x,29:b,30:w,31:C,33:T,35:E,36:A,37:24,38:S,40:_},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:36,11:17,12:r,13:n,14:i,15:a,16:s,17:l,18:u,19:18,20:h,21:f,22:d,23:p,24:m,25:g,26:y,27:v,28:x,29:b,30:w,31:C,33:T,35:E,36:A,37:24,38:S,40:_},t(e,[2,5]),t(e,[2,6]),t(e,[2,17]),t(e,[2,18]),t(e,[2,19]),t(e,[2,20]),t(e,[2,21]),t(e,[2,22]),t(e,[2,23]),t(e,[2,24]),t(e,[2,25]),t(e,[2,26]),t(e,[2,27]),{32:[1,37]},{34:[1,38]},t(e,[2,30]),t(e,[2,31]),t(e,[2,32]),{39:[1,39]},t(e,[2,8]),t(e,[2,9]),t(e,[2,10]),t(e,[2,11]),t(e,[2,12]),t(e,[2,13]),t(e,[2,14]),t(e,[2,15]),t(e,[2,16]),{41:[1,40],43:[1,41]},t(e,[2,4]),t(e,[2,28]),t(e,[2,29]),t(e,[2,33]),t(e,[2,34],{42:[1,42],43:[1,43]}),t(e,[2,40],{41:[1,44]}),t(e,[2,35],{43:[1,45]}),t(e,[2,36]),t(e,[2,38],{42:[1,46]}),t(e,[2,37]),t(e,[2,39])],defaultActions:{},parseError:o(function(R,O){if(O.recoverable)this.trace(R);else{var M=new Error(R);throw M.hash=O,M}},"parseError"),parse:o(function(R){var O=this,M=[0],P=[],B=[null],F=[],z=this.table,$="",U=0,Q=0,te=0,Y=2,he=1,Z=F.slice.call(arguments,1),ue=Object.create(this.lexer),K={yy:{}};for(var j in this.yy)Object.prototype.hasOwnProperty.call(this.yy,j)&&(K.yy[j]=this.yy[j]);ue.setInput(R,K.yy),K.yy.lexer=ue,K.yy.parser=this,typeof ue.yylloc>"u"&&(ue.yylloc={});var ne=ue.yylloc;F.push(ne);var ee=ue.options&&ue.options.ranges;typeof K.yy.parseError=="function"?this.parseError=K.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ce(q){M.length=M.length-2*q,B.length=B.length-q,F.length=F.length-q}o(ce,"popStack");function le(){var q;return q=P.pop()||ue.lex()||he,typeof q!="number"&&(q instanceof Array&&(P=q,q=P.pop()),q=O.symbols_[q]||q),q}o(le,"lex");for(var J,Se,se,ae,Oe,ye,Be={},He,ze,Le,Ie;;){if(se=M[M.length-1],this.defaultActions[se]?ae=this.defaultActions[se]:((J===null||typeof J>"u")&&(J=le()),ae=z[se]&&z[se][J]),typeof ae>"u"||!ae.length||!ae[0]){var xe="";Ie=[];for(He in z[se])this.terminals_[He]&&He>Y&&Ie.push("'"+this.terminals_[He]+"'");ue.showPosition?xe="Parse error on line "+(U+1)+`: +`,"getStyles"),Che=NGe});var _he={};ur(_he,{diagram:()=>MGe});var MGe,Dhe=N(()=>{"use strict";bhe();_O();She();Ahe();MGe={parser:xhe,db:CS,renderer:Ehe,styles:Che}});var DO,Nhe,Mhe=N(()=>{"use strict";DO=function(){var t=o(function(L,A,I,M){for(I=I||{},M=L.length;M--;I[L[M]]=A);return I},"o"),e=[6,8,10,12,13,14,15,16,17,18,20,21,22,23,24,25,26,27,28,29,30,31,33,35,36,38,40],r=[1,26],n=[1,27],i=[1,28],a=[1,29],s=[1,30],l=[1,31],u=[1,32],h=[1,33],f=[1,34],d=[1,9],p=[1,10],m=[1,11],g=[1,12],y=[1,13],v=[1,14],x=[1,15],b=[1,16],T=[1,19],S=[1,20],w=[1,21],E=[1,22],_=[1,23],C=[1,25],D=[1,35],O={trace:o(function(){},"trace"),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,weekend:19,weekend_friday:20,weekend_saturday:21,dateFormat:22,inclusiveEndDates:23,topAxis:24,axisFormat:25,tickInterval:26,excludes:27,includes:28,todayMarker:29,title:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,section:36,clickStatement:37,taskTxt:38,taskData:39,click:40,callbackname:41,callbackargs:42,href:43,clickStatementDebug:44,$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",20:"weekend_friday",21:"weekend_saturday",22:"dateFormat",23:"inclusiveEndDates",24:"topAxis",25:"axisFormat",26:"tickInterval",27:"excludes",28:"includes",29:"todayMarker",30:"title",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",36:"section",38:"taskTxt",39:"taskData",40:"click",41:"callbackname",42:"callbackargs",43:"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],[19,1],[19,1],[9,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],[37,2],[37,3],[37,3],[37,4],[37,3],[37,4],[37,2],[44,2],[44,3],[44,3],[44,4],[44,3],[44,4],[44,2]],performAction:o(function(A,I,M,P,B,F,z){var $=F.length-1;switch(B){case 1:return F[$-1];case 2:this.$=[];break;case 3:F[$-1].push(F[$]),this.$=F[$-1];break;case 4:case 5:this.$=F[$];break;case 6:case 7:this.$=[];break;case 8:P.setWeekday("monday");break;case 9:P.setWeekday("tuesday");break;case 10:P.setWeekday("wednesday");break;case 11:P.setWeekday("thursday");break;case 12:P.setWeekday("friday");break;case 13:P.setWeekday("saturday");break;case 14:P.setWeekday("sunday");break;case 15:P.setWeekend("friday");break;case 16:P.setWeekend("saturday");break;case 17:P.setDateFormat(F[$].substr(11)),this.$=F[$].substr(11);break;case 18:P.enableInclusiveEndDates(),this.$=F[$].substr(18);break;case 19:P.TopAxis(),this.$=F[$].substr(8);break;case 20:P.setAxisFormat(F[$].substr(11)),this.$=F[$].substr(11);break;case 21:P.setTickInterval(F[$].substr(13)),this.$=F[$].substr(13);break;case 22:P.setExcludes(F[$].substr(9)),this.$=F[$].substr(9);break;case 23:P.setIncludes(F[$].substr(9)),this.$=F[$].substr(9);break;case 24:P.setTodayMarker(F[$].substr(12)),this.$=F[$].substr(12);break;case 27:P.setDiagramTitle(F[$].substr(6)),this.$=F[$].substr(6);break;case 28:this.$=F[$].trim(),P.setAccTitle(this.$);break;case 29:case 30:this.$=F[$].trim(),P.setAccDescription(this.$);break;case 31:P.addSection(F[$].substr(8)),this.$=F[$].substr(8);break;case 33:P.addTask(F[$-1],F[$]),this.$="task";break;case 34:this.$=F[$-1],P.setClickEvent(F[$-1],F[$],null);break;case 35:this.$=F[$-2],P.setClickEvent(F[$-2],F[$-1],F[$]);break;case 36:this.$=F[$-2],P.setClickEvent(F[$-2],F[$-1],null),P.setLink(F[$-2],F[$]);break;case 37:this.$=F[$-3],P.setClickEvent(F[$-3],F[$-2],F[$-1]),P.setLink(F[$-3],F[$]);break;case 38:this.$=F[$-2],P.setClickEvent(F[$-2],F[$],null),P.setLink(F[$-2],F[$-1]);break;case 39:this.$=F[$-3],P.setClickEvent(F[$-3],F[$-1],F[$]),P.setLink(F[$-3],F[$-2]);break;case 40:this.$=F[$-1],P.setLink(F[$-1],F[$]);break;case 41:case 47:this.$=F[$-1]+" "+F[$];break;case 42:case 43:case 45:this.$=F[$-2]+" "+F[$-1]+" "+F[$];break;case 44:case 46:this.$=F[$-3]+" "+F[$-2]+" "+F[$-1]+" "+F[$];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:17,12:r,13:n,14:i,15:a,16:s,17:l,18:u,19:18,20:h,21:f,22:d,23:p,24:m,25:g,26:y,27:v,28:x,29:b,30:T,31:S,33:w,35:E,36:_,37:24,38:C,40:D},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:36,11:17,12:r,13:n,14:i,15:a,16:s,17:l,18:u,19:18,20:h,21:f,22:d,23:p,24:m,25:g,26:y,27:v,28:x,29:b,30:T,31:S,33:w,35:E,36:_,37:24,38:C,40:D},t(e,[2,5]),t(e,[2,6]),t(e,[2,17]),t(e,[2,18]),t(e,[2,19]),t(e,[2,20]),t(e,[2,21]),t(e,[2,22]),t(e,[2,23]),t(e,[2,24]),t(e,[2,25]),t(e,[2,26]),t(e,[2,27]),{32:[1,37]},{34:[1,38]},t(e,[2,30]),t(e,[2,31]),t(e,[2,32]),{39:[1,39]},t(e,[2,8]),t(e,[2,9]),t(e,[2,10]),t(e,[2,11]),t(e,[2,12]),t(e,[2,13]),t(e,[2,14]),t(e,[2,15]),t(e,[2,16]),{41:[1,40],43:[1,41]},t(e,[2,4]),t(e,[2,28]),t(e,[2,29]),t(e,[2,33]),t(e,[2,34],{42:[1,42],43:[1,43]}),t(e,[2,40],{41:[1,44]}),t(e,[2,35],{43:[1,45]}),t(e,[2,36]),t(e,[2,38],{42:[1,46]}),t(e,[2,37]),t(e,[2,39])],defaultActions:{},parseError:o(function(A,I){if(I.recoverable)this.trace(A);else{var M=new Error(A);throw M.hash=I,M}},"parseError"),parse:o(function(A){var I=this,M=[0],P=[],B=[null],F=[],z=this.table,$="",U=0,K=0,ee=0,Y=2,ce=1,Z=F.slice.call(arguments,1),ue=Object.create(this.lexer),Q={yy:{}};for(var j in this.yy)Object.prototype.hasOwnProperty.call(this.yy,j)&&(Q.yy[j]=this.yy[j]);ue.setInput(A,Q.yy),Q.yy.lexer=ue,Q.yy.parser=this,typeof ue.yylloc>"u"&&(ue.yylloc={});var ne=ue.yylloc;F.push(ne);var te=ue.options&&ue.options.ranges;typeof Q.yy.parseError=="function"?this.parseError=Q.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function he(q){M.length=M.length-2*q,B.length=B.length-q,F.length=F.length-q}o(he,"popStack");function le(){var q;return q=P.pop()||ue.lex()||ce,typeof q!="number"&&(q instanceof Array&&(P=q,q=P.pop()),q=I.symbols_[q]||q),q}o(le,"lex");for(var J,Se,se,ae,Oe,ye,Be={},He,ze,Le,Ie;;){if(se=M[M.length-1],this.defaultActions[se]?ae=this.defaultActions[se]:((J===null||typeof J>"u")&&(J=le()),ae=z[se]&&z[se][J]),typeof ae>"u"||!ae.length||!ae[0]){var xe="";Ie=[];for(He in z[se])this.terminals_[He]&&He>Y&&Ie.push("'"+this.terminals_[He]+"'");ue.showPosition?xe="Parse error on line "+(U+1)+`: `+ue.showPosition()+` -Expecting `+Ie.join(", ")+", got '"+(this.terminals_[J]||J)+"'":xe="Parse error on line "+(U+1)+": Unexpected "+(J==he?"end of input":"'"+(this.terminals_[J]||J)+"'"),this.parseError(xe,{text:ue.match,token:this.terminals_[J]||J,line:ue.yylineno,loc:ne,expected:Ie})}if(ae[0]instanceof Array&&ae.length>1)throw new Error("Parse Error: multiple actions possible at state: "+se+", token: "+J);switch(ae[0]){case 1:M.push(J),B.push(ue.yytext),F.push(ue.yylloc),M.push(ae[1]),J=null,Se?(J=Se,Se=null):(Q=ue.yyleng,$=ue.yytext,U=ue.yylineno,ne=ue.yylloc,te>0&&te--);break;case 2:if(ze=this.productions_[ae[1]][1],Be.$=B[B.length-ze],Be._$={first_line:F[F.length-(ze||1)].first_line,last_line:F[F.length-1].last_line,first_column:F[F.length-(ze||1)].first_column,last_column:F[F.length-1].last_column},ee&&(Be._$.range=[F[F.length-(ze||1)].range[0],F[F.length-1].range[1]]),ye=this.performAction.apply(Be,[$,Q,U,K.yy,ae[1],B,F].concat(Z)),typeof ye<"u")return ye;ze&&(M=M.slice(0,-1*ze*2),B=B.slice(0,-1*ze),F=F.slice(0,-1*ze)),M.push(this.productions_[ae[1]][0]),B.push(Be.$),F.push(Be._$),Le=z[M[M.length-2]][M[M.length-1]],M.push(Le);break;case 3:return!0}}return!0},"parse")},L=function(){var D={EOF:1,parseError:o(function(O,M){if(this.yy.parser)this.yy.parser.parseError(O,M);else throw new Error(O)},"parseError"),setInput:o(function(R,O){return this.yy=O||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},"setInput"),input:o(function(){var R=this._input[0];this.yytext+=R,this.yyleng++,this.offset++,this.match+=R,this.matched+=R;var O=R.match(/(?:\r\n?|\n).*/g);return O?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),R},"input"),unput:o(function(R){var O=R.length,M=R.split(/(?:\r\n?|\n)/g);this._input=R+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-O),this.offset-=O;var P=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),M.length-1&&(this.yylineno-=M.length-1);var B=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:M?(M.length===P.length?this.yylloc.first_column:0)+P[P.length-M.length].length-M[0].length:this.yylloc.first_column-O},this.options.ranges&&(this.yylloc.range=[B[0],B[0]+this.yyleng-O]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(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},"reject"),less:o(function(R){this.unput(this.match.slice(R))},"less"),pastInput:o(function(){var R=this.matched.substr(0,this.matched.length-this.match.length);return(R.length>20?"...":"")+R.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(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,"")},"upcomingInput"),showPosition:o(function(){var R=this.pastInput(),O=new Array(R.length+1).join("-");return R+this.upcomingInput()+` -`+O+"^"},"showPosition"),test_match:o(function(R,O){var M,P,B;if(this.options.backtrack_lexer&&(B={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&&(B.yylloc.range=this.yylloc.range.slice(0))),P=R[0].match(/(?:\r\n?|\n).*/g),P&&(this.yylineno+=P.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:P?P[P.length-1].length-P[P.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],M=this.performAction.call(this,this.yy,this,O,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),M)return M;if(this._backtrack){for(var F in B)this[F]=B[F];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var R,O,M,P;this._more||(this.yytext="",this.match="");for(var B=this._currentRules(),F=0;FO[0].length)){if(O=M,P=F,this.options.backtrack_lexer){if(R=this.test_match(M,B[F]),R!==!1)return R;if(this._backtrack){O=!1;continue}else return!1}else if(!this.options.flex)break}return O?(R=this.test_match(O,B[P]),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})},"next"),lex:o(function(){var O=this.next();return O||this.lex()},"lex"),begin:o(function(O){this.conditionStack.push(O)},"begin"),popState:o(function(){var O=this.conditionStack.length-1;return O>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(O){return O=this.conditionStack.length-1-Math.abs(O||0),O>=0?this.conditionStack[O]:"INITIAL"},"topState"),pushState:o(function(O){this.begin(O)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(O,M,P,B){var F=B;switch(P){case 0:return this.begin("open_directive"),"open_directive";break;case 1:return this.begin("acc_title"),31;break;case 2:return this.popState(),"acc_title_value";break;case 3:return this.begin("acc_descr"),33;break;case 4:return this.popState(),"acc_descr_value";break;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:this.begin("href");break;case 15:this.popState();break;case 16:return 43;case 17:this.begin("callbackname");break;case 18:this.popState();break;case 19:this.popState(),this.begin("callbackargs");break;case 20:return 41;case 21:this.popState();break;case 22:return 42;case 23:this.begin("click");break;case 24:this.popState();break;case 25:return 40;case 26:return 4;case 27:return 22;case 28:return 23;case 29:return 24;case 30:return 25;case 31:return 26;case 32:return 28;case 33:return 27;case 34:return 29;case 35:return 12;case 36:return 13;case 37:return 14;case 38:return 15;case 39:return 16;case 40:return 17;case 41:return 18;case 42:return 20;case 43:return 21;case 44:return"date";case 45:return 30;case 46:return"accDescription";case 47:return 36;case 48:return 38;case 49:return 39;case 50:return":";case 51:return 6;case 52:return"INVALID"}},"anonymous"),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,/^(?: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,/^(?:weekend\s+friday\b)/i,/^(?:weekend\s+saturday\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:[21,22],inclusive:!1},callbackname:{rules:[18,19,20],inclusive:!1},href:{rules:[15,16],inclusive:!1},click:{rules:[24,25],inclusive:!1},INITIAL:{rules:[0,1,3,5,8,9,10,11,12,13,14,17,23,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],inclusive:!0}}};return D}();I.lexer=L;function k(){this.yy={}}return o(k,"Parser"),k.prototype=I,I.Parser=k,new k}();YI.parser=YI;gue=YI});var vue=Ii((XI,jI)=>{"use strict";(function(t,e){typeof XI=="object"&&typeof jI<"u"?jI.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs_plugin_isoWeek=e()})(XI,function(){"use strict";var t="day";return function(e,r,n){var i=o(function(l){return l.add(4-l.isoWeekday(),t)},"a"),a=r.prototype;a.isoWeekYear=function(){return i(this).year()},a.isoWeek=function(l){if(!this.$utils().u(l))return this.add(7*(l-this.isoWeek()),t);var u,h,f,d,p=i(this),m=(u=this.isoWeekYear(),h=this.$u,f=(h?n.utc:n)().year(u).startOf("year"),d=4-f.isoWeekday(),f.isoWeekday()>4&&(d+=7),f.add(d,t));return p.diff(m,"week")+1},a.isoWeekday=function(l){return this.$utils().u(l)?this.day()||7:this.day(this.day()%7?l:l-7)};var s=a.startOf;a.startOf=function(l,u){var h=this.$utils(),f=!!h.u(u)||u;return h.p(l)==="isoweek"?f?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):s.bind(this)(l,u)}}})});var xue=Ii((KI,QI)=>{"use strict";(function(t,e){typeof KI=="object"&&typeof QI<"u"?QI.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs_plugin_customParseFormat=e()})(KI,function(){"use strict";var t={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"},e=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,r=/\d/,n=/\d\d/,i=/\d\d?/,a=/\d*[^-_:/,()\s\d]+/,s={},l=o(function(g){return(g=+g)+(g>68?1900:2e3)},"a"),u=o(function(g){return function(y){this[g]=+y}},"f"),h=[/[+-]\d\d:?(\d\d)?|Z/,function(g){(this.zone||(this.zone={})).offset=function(y){if(!y||y==="Z")return 0;var v=y.match(/([+-]|\d\d)/g),x=60*v[1]+(+v[2]||0);return x===0?0:v[0]==="+"?-x:x}(g)}],f=o(function(g){var y=s[g];return y&&(y.indexOf?y:y.s.concat(y.f))},"u"),d=o(function(g,y){var v,x=s.meridiem;if(x){for(var b=1;b<=24;b+=1)if(g.indexOf(x(b,0,y))>-1){v=b>12;break}}else v=g===(y?"pm":"PM");return v},"d"),p={A:[a,function(g){this.afternoon=d(g,!1)}],a:[a,function(g){this.afternoon=d(g,!0)}],Q:[r,function(g){this.month=3*(g-1)+1}],S:[r,function(g){this.milliseconds=100*+g}],SS:[n,function(g){this.milliseconds=10*+g}],SSS:[/\d{3}/,function(g){this.milliseconds=+g}],s:[i,u("seconds")],ss:[i,u("seconds")],m:[i,u("minutes")],mm:[i,u("minutes")],H:[i,u("hours")],h:[i,u("hours")],HH:[i,u("hours")],hh:[i,u("hours")],D:[i,u("day")],DD:[n,u("day")],Do:[a,function(g){var y=s.ordinal,v=g.match(/\d+/);if(this.day=v[0],y)for(var x=1;x<=31;x+=1)y(x).replace(/\[|\]/g,"")===g&&(this.day=x)}],w:[i,u("week")],ww:[n,u("week")],M:[i,u("month")],MM:[n,u("month")],MMM:[a,function(g){var y=f("months"),v=(f("monthsShort")||y.map(function(x){return x.slice(0,3)})).indexOf(g)+1;if(v<1)throw new Error;this.month=v%12||v}],MMMM:[a,function(g){var y=f("months").indexOf(g)+1;if(y<1)throw new Error;this.month=y%12||y}],Y:[/[+-]?\d+/,u("year")],YY:[n,function(g){this.year=l(g)}],YYYY:[/\d{4}/,u("year")],Z:h,ZZ:h};function m(g){var y,v;y=g,v=s&&s.formats;for(var x=(g=y.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,function(S,_,I){var L=I&&I.toUpperCase();return _||v[I]||t[I]||v[L].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(k,D,R){return D||R.slice(1)})})).match(e),b=x.length,w=0;w-1)return new Date((M==="X"?1e3:1)*O);var F=m(M)(O),z=F.year,$=F.month,U=F.day,Q=F.hours,te=F.minutes,Y=F.seconds,he=F.milliseconds,Z=F.zone,ue=F.week,K=new Date,j=U||(z||$?1:K.getDate()),ne=z||K.getFullYear(),ee=0;z&&!$||(ee=$>0?$-1:K.getMonth());var ce,le=Q||0,J=te||0,Se=Y||0,se=he||0;return Z?new Date(Date.UTC(ne,ee,j,le,J,Se,se+60*Z.offset*1e3)):P?new Date(Date.UTC(ne,ee,j,le,J,Se,se)):(ce=new Date(ne,ee,j,le,J,Se,se),ue&&(ce=B(ce).week(ue).toDate()),ce)}catch{return new Date("")}}(C,A,T,v),this.init(),L&&L!==!0&&(this.$L=this.locale(L).$L),I&&C!=this.format(A)&&(this.$d=new Date("")),s={}}else if(A instanceof Array)for(var k=A.length,D=1;D<=k;D+=1){E[1]=A[D-1];var R=v.apply(this,E);if(R.isValid()){this.$d=R.$d,this.$L=R.$L,this.init();break}D===k&&(this.$d=new Date(""))}else b.call(this,w)}}})});var bue=Ii((ZI,JI)=>{"use strict";(function(t,e){typeof ZI=="object"&&typeof JI<"u"?JI.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs_plugin_advancedFormat=e()})(ZI,function(){"use strict";return function(t,e){var r=e.prototype,n=r.format;r.format=function(i){var a=this,s=this.$locale();if(!this.isValid())return n.bind(this)(i);var l=this.$utils(),u=(i||"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(h){switch(h){case"Q":return Math.ceil((a.$M+1)/3);case"Do":return s.ordinal(a.$D);case"gggg":return a.weekYear();case"GGGG":return a.isoWeekYear();case"wo":return s.ordinal(a.week(),"W");case"w":case"ww":return l.s(a.week(),h==="w"?1:2,"0");case"W":case"WW":return l.s(a.isoWeek(),h==="W"?1:2,"0");case"k":case"kk":return l.s(String(a.$H===0?24:a.$H),h==="k"?1:2,"0");case"X":return Math.floor(a.$d.getTime()/1e3);case"x":return a.$d.getTime();case"z":return"["+a.offsetName()+"]";case"zzz":return"["+a.offsetName("long")+"]";default:return h}});return n.bind(this)(u)}}})});function Pue(t,e,r){let n=!0;for(;n;)n=!1,r.forEach(function(i){let a="^\\s*"+i+"\\s*$",s=new RegExp(a);t[0].match(s)&&(e[i]=!0,t.shift(1),n=!0)})}var kue,po,Eue,Sue,Cue,wue,Wc,nO,iO,aO,Tb,kb,sO,oO,vS,N1,lO,Aue,cO,Eb,uO,hO,xS,eO,J$e,eze,tze,rze,nze,ize,aze,sze,oze,lze,cze,uze,hze,fze,dze,pze,mze,gze,yze,vze,xze,bze,wze,_ue,Tze,kze,Eze,Due,Sze,tO,Lue,Rue,gS,R1,Cze,Aze,rO,yS,Vi,Nue,_ze,Mp,Dze,Tue,Lze,Mue,Rze,Iue,Nze,Mze,Oue,Bue=N(()=>{"use strict";kue=Sa(Y0(),1),po=Sa(F4(),1),Eue=Sa(vue(),1),Sue=Sa(xue(),1),Cue=Sa(bue(),1);vt();zt();nr();mi();po.default.extend(Eue.default);po.default.extend(Sue.default);po.default.extend(Cue.default);wue={friday:5,saturday:6},Wc="",nO="",aO="",Tb=[],kb=[],sO=new Map,oO=[],vS=[],N1="",lO="",Aue=["active","done","crit","milestone","vert"],cO=[],Eb=!1,uO=!1,hO="sunday",xS="saturday",eO=0,J$e=o(function(){oO=[],vS=[],N1="",cO=[],gS=0,rO=void 0,yS=void 0,Vi=[],Wc="",nO="",lO="",iO=void 0,aO="",Tb=[],kb=[],Eb=!1,uO=!1,eO=0,sO=new Map,Ar(),hO="sunday",xS="saturday"},"clear"),eze=o(function(t){nO=t},"setAxisFormat"),tze=o(function(){return nO},"getAxisFormat"),rze=o(function(t){iO=t},"setTickInterval"),nze=o(function(){return iO},"getTickInterval"),ize=o(function(t){aO=t},"setTodayMarker"),aze=o(function(){return aO},"getTodayMarker"),sze=o(function(t){Wc=t},"setDateFormat"),oze=o(function(){Eb=!0},"enableInclusiveEndDates"),lze=o(function(){return Eb},"endDatesAreInclusive"),cze=o(function(){uO=!0},"enableTopAxis"),uze=o(function(){return uO},"topAxisEnabled"),hze=o(function(t){lO=t},"setDisplayMode"),fze=o(function(){return lO},"getDisplayMode"),dze=o(function(){return Wc},"getDateFormat"),pze=o(function(t){Tb=t.toLowerCase().split(/[\s,]+/)},"setIncludes"),mze=o(function(){return Tb},"getIncludes"),gze=o(function(t){kb=t.toLowerCase().split(/[\s,]+/)},"setExcludes"),yze=o(function(){return kb},"getExcludes"),vze=o(function(){return sO},"getLinks"),xze=o(function(t){N1=t,oO.push(t)},"addSection"),bze=o(function(){return oO},"getSections"),wze=o(function(){let t=Tue(),e=10,r=0;for(;!t&&r[\d\w- ]+)/.exec(r);if(i!==null){let s=null;for(let u of i.groups.ids.split(" ")){let h=Mp(u);h!==void 0&&(!s||h.endTime>s.endTime)&&(s=h)}if(s)return s.endTime;let l=new Date;return l.setHours(0,0,0,0),l}let a=(0,po.default)(r,e.trim(),!0);if(a.isValid())return a.toDate();{X.debug("Invalid date:"+r),X.debug("With date format:"+e.trim());let s=new Date(r);if(s===void 0||isNaN(s.getTime())||s.getFullYear()<-1e4||s.getFullYear()>1e4)throw new Error("Invalid date:"+r);return s}},"getStartDate"),Lue=o(function(t){let e=/^(\d+(?:\.\d+)?)([Mdhmswy]|ms)$/.exec(t.trim());return e!==null?[Number.parseFloat(e[1]),e[2]]:[NaN,"ms"]},"parseDuration"),Rue=o(function(t,e,r,n=!1){r=r.trim();let a=/^until\s+(?[\d\w- ]+)/.exec(r);if(a!==null){let f=null;for(let p of a.groups.ids.split(" ")){let m=Mp(p);m!==void 0&&(!f||m.startTime{window.open(r,"_self")}),sO.set(n,r))}),Mue(t,"clickable")},"setLink"),Mue=o(function(t,e){t.split(",").forEach(function(r){let n=Mp(r);n!==void 0&&n.classes.push(e)})},"setClass"),Rze=o(function(t,e,r){if(me().securityLevel!=="loose"||e===void 0)return;let n=[];if(typeof r=="string"){n=r.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let a=0;a{Gt.runFunc(e,...n)})},"setClickFun"),Iue=o(function(t,e){cO.push(function(){let r=document.querySelector(`[id="${t}"]`);r!==null&&r.addEventListener("click",function(){e()})},function(){let r=document.querySelector(`[id="${t}-text"]`);r!==null&&r.addEventListener("click",function(){e()})})},"pushFun"),Nze=o(function(t,e,r){t.split(",").forEach(function(n){Rze(n,e,r)}),Mue(t,"clickable")},"setClickEvent"),Mze=o(function(t){cO.forEach(function(e){e(t)})},"bindFunctions"),Oue={getConfig:o(()=>me().gantt,"getConfig"),clear:J$e,setDateFormat:sze,getDateFormat:dze,enableInclusiveEndDates:oze,endDatesAreInclusive:lze,enableTopAxis:cze,topAxisEnabled:uze,setAxisFormat:eze,getAxisFormat:tze,setTickInterval:rze,getTickInterval:nze,setTodayMarker:ize,getTodayMarker:aze,setAccTitle:Lr,getAccTitle:Rr,setDiagramTitle:$r,getDiagramTitle:Ir,setDisplayMode:hze,getDisplayMode:fze,setAccDescription:Nr,getAccDescription:Mr,addSection:xze,getSections:bze,getTasks:wze,addTask:_ze,findTaskById:Mp,addTaskOrg:Dze,setIncludes:pze,getIncludes:mze,setExcludes:gze,getExcludes:yze,setClickEvent:Nze,setLink:Lze,getLinks:vze,bindFunctions:Mze,parseDuration:Lue,isInvalidDate:_ue,setWeekday:Tze,getWeekday:kze,setWeekend:Eze};o(Pue,"getTaskTags")});var bS,Ize,Fue,Oze,Qu,Pze,$ue,zue=N(()=>{"use strict";bS=Sa(F4(),1);vt();pr();dr();zt();Si();Ize=o(function(){X.debug("Something is calling, setConf, remove the call")},"setConf"),Fue={monday:Lh,tuesday:D5,wednesday:L5,thursday:cc,friday:R5,saturday:N5,sunday:xl},Oze=o((t,e)=>{let r=[...t].map(()=>-1/0),n=[...t].sort((a,s)=>a.startTime-s.startTime||a.order-s.order),i=0;for(let a of n)for(let s=0;s=r[s]){r[s]=a.endTime,a.order=s+e,s>i&&(i=s);break}return i},"getMaxIntersections"),Pze=o(function(t,e,r,n){let i=me().gantt,a=me().securityLevel,s;a==="sandbox"&&(s=Ge("#i"+e));let l=a==="sandbox"?Ge(s.nodes()[0].contentDocument.body):Ge("body"),u=a==="sandbox"?s.nodes()[0].contentDocument:document,h=u.getElementById(e);Qu=h.parentElement.offsetWidth,Qu===void 0&&(Qu=1200),i.useWidth!==void 0&&(Qu=i.useWidth);let f=n.db.getTasks(),d=[];for(let S of f)d.push(S.type);d=A(d);let p={},m=2*i.topPadding;if(n.db.getDisplayMode()==="compact"||i.displayMode==="compact"){let S={};for(let I of f)S[I.section]===void 0?S[I.section]=[I]:S[I.section].push(I);let _=0;for(let I of Object.keys(S)){let L=Oze(S[I],_)+1;_+=L,m+=L*(i.barHeight+i.barGap),p[I]=L}}else{m+=f.length*(i.barHeight+i.barGap);for(let S of d)p[S]=f.filter(_=>_.type===S).length}h.setAttribute("viewBox","0 0 "+Qu+" "+m);let g=l.select(`[id="${e}"]`),y=O5().domain([z3(f,function(S){return S.startTime}),$3(f,function(S){return S.endTime})]).rangeRound([0,Qu-i.leftPadding-i.rightPadding]);function v(S,_){let I=S.startTime,L=_.startTime,k=0;return I>L?k=1:Iz.vert===$.vert?0:z.vert?1:-1);let M=[...new Set(S.map(z=>z.order))].map(z=>S.find($=>$.order===z));g.append("g").selectAll("rect").data(M).enter().append("rect").attr("x",0).attr("y",function(z,$){return $=z.order,$*_+I-2}).attr("width",function(){return R-i.rightPadding/2}).attr("height",_).attr("class",function(z){for(let[$,U]of d.entries())if(z.type===U)return"section section"+$%i.numberSectionStyles;return"section section0"}).enter();let P=g.append("g").selectAll("rect").data(S).enter(),B=n.db.getLinks();if(P.append("rect").attr("id",function(z){return z.id}).attr("rx",3).attr("ry",3).attr("x",function(z){return z.milestone?y(z.startTime)+L+.5*(y(z.endTime)-y(z.startTime))-.5*k:y(z.startTime)+L}).attr("y",function(z,$){return $=z.order,z.vert?i.gridLineStartPadding:$*_+I}).attr("width",function(z){return z.milestone?k:z.vert?.08*k:y(z.renderEndTime||z.endTime)-y(z.startTime)}).attr("height",function(z){return z.vert?f.length*(i.barHeight+i.barGap)+i.barHeight*2:k}).attr("transform-origin",function(z,$){return $=z.order,(y(z.startTime)+L+.5*(y(z.endTime)-y(z.startTime))).toString()+"px "+($*_+I+.5*k).toString()+"px"}).attr("class",function(z){let $="task",U="";z.classes.length>0&&(U=z.classes.join(" "));let Q=0;for(let[Y,he]of d.entries())z.type===he&&(Q=Y%i.numberSectionStyles);let te="";return z.active?z.crit?te+=" activeCrit":te=" active":z.done?z.crit?te=" doneCrit":te=" done":z.crit&&(te+=" crit"),te.length===0&&(te=" task"),z.milestone&&(te=" milestone "+te),z.vert&&(te=" vert "+te),te+=Q,te+=" "+U,$+te}),P.append("text").attr("id",function(z){return z.id+"-text"}).text(function(z){return z.task}).attr("font-size",i.fontSize).attr("x",function(z){let $=y(z.startTime),U=y(z.renderEndTime||z.endTime);if(z.milestone&&($+=.5*(y(z.endTime)-y(z.startTime))-.5*k,U=$+k),z.vert)return y(z.startTime)+L;let Q=this.getBBox().width;return Q>U-$?U+Q+1.5*i.leftPadding>R?$+L-5:U+L+5:(U-$)/2+$+L}).attr("y",function(z,$){return z.vert?i.gridLineStartPadding+f.length*(i.barHeight+i.barGap)+60:($=z.order,$*_+i.barHeight/2+(i.fontSize/2-2)+I)}).attr("text-height",k).attr("class",function(z){let $=y(z.startTime),U=y(z.endTime);z.milestone&&(U=$+k);let Q=this.getBBox().width,te="";z.classes.length>0&&(te=z.classes.join(" "));let Y=0;for(let[Z,ue]of d.entries())z.type===ue&&(Y=Z%i.numberSectionStyles);let he="";return z.active&&(z.crit?he="activeCritText"+Y:he="activeText"+Y),z.done?z.crit?he=he+" doneCritText"+Y:he=he+" doneText"+Y:z.crit&&(he=he+" critText"+Y),z.milestone&&(he+=" milestoneText"),z.vert&&(he+=" vertText"),Q>U-$?U+Q+1.5*i.leftPadding>R?te+" taskTextOutsideLeft taskTextOutside"+Y+" "+he:te+" taskTextOutsideRight taskTextOutside"+Y+" "+he+" width-"+Q:te+" taskText taskText"+Y+" "+he+" width-"+Q}),me().securityLevel==="sandbox"){let z;z=Ge("#i"+e);let $=z.nodes()[0].contentDocument;P.filter(function(U){return B.has(U.id)}).each(function(U){var Q=$.querySelector("#"+U.id),te=$.querySelector("#"+U.id+"-text");let Y=Q.parentNode;var he=$.createElement("a");he.setAttribute("xlink:href",B.get(U.id)),he.setAttribute("target","_top"),Y.appendChild(he),he.appendChild(Q),he.appendChild(te)})}}o(b,"drawRects");function w(S,_,I,L,k,D,R,O){if(R.length===0&&O.length===0)return;let M,P;for(let{startTime:Q,endTime:te}of D)(M===void 0||QP)&&(P=te);if(!M||!P)return;if((0,bS.default)(P).diff((0,bS.default)(M),"year")>5){X.warn("The difference between the min and max time is more than 5 years. This will cause performance issues. Skipping drawing exclude days.");return}let B=n.db.getDateFormat(),F=[],z=null,$=(0,bS.default)(M);for(;$.valueOf()<=P;)n.db.isInvalidDate($,B,R,O)?z?z.end=$:z={start:$,end:$}:z&&(F.push(z),z=null),$=$.add(1,"d");g.append("g").selectAll("rect").data(F).enter().append("rect").attr("id",function(Q){return"exclude-"+Q.start.format("YYYY-MM-DD")}).attr("x",function(Q){return y(Q.start)+I}).attr("y",i.gridLineStartPadding).attr("width",function(Q){let te=Q.end.add(1,"day");return y(te)-y(Q.start)}).attr("height",k-_-i.gridLineStartPadding).attr("transform-origin",function(Q,te){return(y(Q.start)+I+.5*(y(Q.end)-y(Q.start))).toString()+"px "+(te*S+.5*k).toString()+"px"}).attr("class","exclude-range")}o(w,"drawExcludeDays");function C(S,_,I,L){let k=SA(y).tickSize(-L+_+i.gridLineStartPadding).tickFormat(_d(n.db.getAxisFormat()||i.axisFormat||"%Y-%m-%d")),R=/^([1-9]\d*)(millisecond|second|minute|hour|day|week|month)$/.exec(n.db.getTickInterval()||i.tickInterval);if(R!==null){let O=R[1],M=R[2],P=n.db.getWeekday()||i.weekday;switch(M){case"millisecond":k.ticks(oc.every(O));break;case"second":k.ticks(Zs.every(O));break;case"minute":k.ticks(Tu.every(O));break;case"hour":k.ticks(ku.every(O));break;case"day":k.ticks(Do.every(O));break;case"week":k.ticks(Fue[P].every(O));break;case"month":k.ticks(Eu.every(O));break}}if(g.append("g").attr("class","grid").attr("transform","translate("+S+", "+(L-50)+")").call(k).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10).attr("dy","1em"),n.db.topAxisEnabled()||i.topAxis){let O=EA(y).tickSize(-L+_+i.gridLineStartPadding).tickFormat(_d(n.db.getAxisFormat()||i.axisFormat||"%Y-%m-%d"));if(R!==null){let M=R[1],P=R[2],B=n.db.getWeekday()||i.weekday;switch(P){case"millisecond":O.ticks(oc.every(M));break;case"second":O.ticks(Zs.every(M));break;case"minute":O.ticks(Tu.every(M));break;case"hour":O.ticks(ku.every(M));break;case"day":O.ticks(Do.every(M));break;case"week":O.ticks(Fue[B].every(M));break;case"month":O.ticks(Eu.every(M));break}}g.append("g").attr("class","grid").attr("transform","translate("+S+", "+_+")").call(O).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10)}}o(C,"makeGrid");function T(S,_){let I=0,L=Object.keys(p).map(k=>[k,p[k]]);g.append("g").selectAll("text").data(L).enter().append(function(k){let D=k[0].split(Ze.lineBreakRegex),R=-(D.length-1)/2,O=u.createElementNS("http://www.w3.org/2000/svg","text");O.setAttribute("dy",R+"em");for(let[M,P]of D.entries()){let B=u.createElementNS("http://www.w3.org/2000/svg","tspan");B.setAttribute("alignment-baseline","central"),B.setAttribute("x","10"),M>0&&B.setAttribute("dy","1em"),B.textContent=P,O.appendChild(B)}return O}).attr("x",10).attr("y",function(k,D){if(D>0)for(let R=0;R{"use strict";Bze=o(t=>` +Expecting `+Ie.join(", ")+", got '"+(this.terminals_[J]||J)+"'":xe="Parse error on line "+(U+1)+": Unexpected "+(J==ce?"end of input":"'"+(this.terminals_[J]||J)+"'"),this.parseError(xe,{text:ue.match,token:this.terminals_[J]||J,line:ue.yylineno,loc:ne,expected:Ie})}if(ae[0]instanceof Array&&ae.length>1)throw new Error("Parse Error: multiple actions possible at state: "+se+", token: "+J);switch(ae[0]){case 1:M.push(J),B.push(ue.yytext),F.push(ue.yylloc),M.push(ae[1]),J=null,Se?(J=Se,Se=null):(K=ue.yyleng,$=ue.yytext,U=ue.yylineno,ne=ue.yylloc,ee>0&&ee--);break;case 2:if(ze=this.productions_[ae[1]][1],Be.$=B[B.length-ze],Be._$={first_line:F[F.length-(ze||1)].first_line,last_line:F[F.length-1].last_line,first_column:F[F.length-(ze||1)].first_column,last_column:F[F.length-1].last_column},te&&(Be._$.range=[F[F.length-(ze||1)].range[0],F[F.length-1].range[1]]),ye=this.performAction.apply(Be,[$,K,U,Q.yy,ae[1],B,F].concat(Z)),typeof ye<"u")return ye;ze&&(M=M.slice(0,-1*ze*2),B=B.slice(0,-1*ze),F=F.slice(0,-1*ze)),M.push(this.productions_[ae[1]][0]),B.push(Be.$),F.push(Be._$),Le=z[M[M.length-2]][M[M.length-1]],M.push(Le);break;case 3:return!0}}return!0},"parse")},R=function(){var L={EOF:1,parseError:o(function(I,M){if(this.yy.parser)this.yy.parser.parseError(I,M);else throw new Error(I)},"parseError"),setInput:o(function(A,I){return this.yy=I||this.yy||{},this._input=A,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},"setInput"),input:o(function(){var A=this._input[0];this.yytext+=A,this.yyleng++,this.offset++,this.match+=A,this.matched+=A;var I=A.match(/(?:\r\n?|\n).*/g);return I?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),A},"input"),unput:o(function(A){var I=A.length,M=A.split(/(?:\r\n?|\n)/g);this._input=A+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-I),this.offset-=I;var P=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),M.length-1&&(this.yylineno-=M.length-1);var B=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:M?(M.length===P.length?this.yylloc.first_column:0)+P[P.length-M.length].length-M[0].length:this.yylloc.first_column-I},this.options.ranges&&(this.yylloc.range=[B[0],B[0]+this.yyleng-I]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(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},"reject"),less:o(function(A){this.unput(this.match.slice(A))},"less"),pastInput:o(function(){var A=this.matched.substr(0,this.matched.length-this.match.length);return(A.length>20?"...":"")+A.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var A=this.match;return A.length<20&&(A+=this._input.substr(0,20-A.length)),(A.substr(0,20)+(A.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var A=this.pastInput(),I=new Array(A.length+1).join("-");return A+this.upcomingInput()+` +`+I+"^"},"showPosition"),test_match:o(function(A,I){var M,P,B;if(this.options.backtrack_lexer&&(B={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&&(B.yylloc.range=this.yylloc.range.slice(0))),P=A[0].match(/(?:\r\n?|\n).*/g),P&&(this.yylineno+=P.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:P?P[P.length-1].length-P[P.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+A[0].length},this.yytext+=A[0],this.match+=A[0],this.matches=A,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(A[0].length),this.matched+=A[0],M=this.performAction.call(this,this.yy,this,I,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),M)return M;if(this._backtrack){for(var F in B)this[F]=B[F];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var A,I,M,P;this._more||(this.yytext="",this.match="");for(var B=this._currentRules(),F=0;FI[0].length)){if(I=M,P=F,this.options.backtrack_lexer){if(A=this.test_match(M,B[F]),A!==!1)return A;if(this._backtrack){I=!1;continue}else return!1}else if(!this.options.flex)break}return I?(A=this.test_match(I,B[P]),A!==!1?A:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var I=this.next();return I||this.lex()},"lex"),begin:o(function(I){this.conditionStack.push(I)},"begin"),popState:o(function(){var I=this.conditionStack.length-1;return I>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(I){return I=this.conditionStack.length-1-Math.abs(I||0),I>=0?this.conditionStack[I]:"INITIAL"},"topState"),pushState:o(function(I){this.begin(I)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(I,M,P,B){var F=B;switch(P){case 0:return this.begin("open_directive"),"open_directive";break;case 1:return this.begin("acc_title"),31;break;case 2:return this.popState(),"acc_title_value";break;case 3:return this.begin("acc_descr"),33;break;case 4:return this.popState(),"acc_descr_value";break;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:this.begin("href");break;case 15:this.popState();break;case 16:return 43;case 17:this.begin("callbackname");break;case 18:this.popState();break;case 19:this.popState(),this.begin("callbackargs");break;case 20:return 41;case 21:this.popState();break;case 22:return 42;case 23:this.begin("click");break;case 24:this.popState();break;case 25:return 40;case 26:return 4;case 27:return 22;case 28:return 23;case 29:return 24;case 30:return 25;case 31:return 26;case 32:return 28;case 33:return 27;case 34:return 29;case 35:return 12;case 36:return 13;case 37:return 14;case 38:return 15;case 39:return 16;case 40:return 17;case 41:return 18;case 42:return 20;case 43:return 21;case 44:return"date";case 45:return 30;case 46:return"accDescription";case 47:return 36;case 48:return 38;case 49:return 39;case 50:return":";case 51:return 6;case 52:return"INVALID"}},"anonymous"),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,/^(?: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,/^(?:weekend\s+friday\b)/i,/^(?:weekend\s+saturday\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:[21,22],inclusive:!1},callbackname:{rules:[18,19,20],inclusive:!1},href:{rules:[15,16],inclusive:!1},click:{rules:[24,25],inclusive:!1},INITIAL:{rules:[0,1,3,5,8,9,10,11,12,13,14,17,23,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],inclusive:!0}}};return L}();O.lexer=R;function k(){this.yy={}}return o(k,"Parser"),k.prototype=O,O.Parser=k,new k}();DO.parser=DO;Nhe=DO});var Ihe=Pi((LO,RO)=>{"use strict";(function(t,e){typeof LO=="object"&&typeof RO<"u"?RO.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs_plugin_isoWeek=e()})(LO,function(){"use strict";var t="day";return function(e,r,n){var i=o(function(l){return l.add(4-l.isoWeekday(),t)},"a"),a=r.prototype;a.isoWeekYear=function(){return i(this).year()},a.isoWeek=function(l){if(!this.$utils().u(l))return this.add(7*(l-this.isoWeek()),t);var u,h,f,d,p=i(this),m=(u=this.isoWeekYear(),h=this.$u,f=(h?n.utc:n)().year(u).startOf("year"),d=4-f.isoWeekday(),f.isoWeekday()>4&&(d+=7),f.add(d,t));return p.diff(m,"week")+1},a.isoWeekday=function(l){return this.$utils().u(l)?this.day()||7:this.day(this.day()%7?l:l-7)};var s=a.startOf;a.startOf=function(l,u){var h=this.$utils(),f=!!h.u(u)||u;return h.p(l)==="isoweek"?f?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):s.bind(this)(l,u)}}})});var Ohe=Pi((NO,MO)=>{"use strict";(function(t,e){typeof NO=="object"&&typeof MO<"u"?MO.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs_plugin_customParseFormat=e()})(NO,function(){"use strict";var t={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"},e=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,r=/\d/,n=/\d\d/,i=/\d\d?/,a=/\d*[^-_:/,()\s\d]+/,s={},l=o(function(g){return(g=+g)+(g>68?1900:2e3)},"a"),u=o(function(g){return function(y){this[g]=+y}},"f"),h=[/[+-]\d\d:?(\d\d)?|Z/,function(g){(this.zone||(this.zone={})).offset=function(y){if(!y||y==="Z")return 0;var v=y.match(/([+-]|\d\d)/g),x=60*v[1]+(+v[2]||0);return x===0?0:v[0]==="+"?-x:x}(g)}],f=o(function(g){var y=s[g];return y&&(y.indexOf?y:y.s.concat(y.f))},"u"),d=o(function(g,y){var v,x=s.meridiem;if(x){for(var b=1;b<=24;b+=1)if(g.indexOf(x(b,0,y))>-1){v=b>12;break}}else v=g===(y?"pm":"PM");return v},"d"),p={A:[a,function(g){this.afternoon=d(g,!1)}],a:[a,function(g){this.afternoon=d(g,!0)}],Q:[r,function(g){this.month=3*(g-1)+1}],S:[r,function(g){this.milliseconds=100*+g}],SS:[n,function(g){this.milliseconds=10*+g}],SSS:[/\d{3}/,function(g){this.milliseconds=+g}],s:[i,u("seconds")],ss:[i,u("seconds")],m:[i,u("minutes")],mm:[i,u("minutes")],H:[i,u("hours")],h:[i,u("hours")],HH:[i,u("hours")],hh:[i,u("hours")],D:[i,u("day")],DD:[n,u("day")],Do:[a,function(g){var y=s.ordinal,v=g.match(/\d+/);if(this.day=v[0],y)for(var x=1;x<=31;x+=1)y(x).replace(/\[|\]/g,"")===g&&(this.day=x)}],w:[i,u("week")],ww:[n,u("week")],M:[i,u("month")],MM:[n,u("month")],MMM:[a,function(g){var y=f("months"),v=(f("monthsShort")||y.map(function(x){return x.slice(0,3)})).indexOf(g)+1;if(v<1)throw new Error;this.month=v%12||v}],MMMM:[a,function(g){var y=f("months").indexOf(g)+1;if(y<1)throw new Error;this.month=y%12||y}],Y:[/[+-]?\d+/,u("year")],YY:[n,function(g){this.year=l(g)}],YYYY:[/\d{4}/,u("year")],Z:h,ZZ:h};function m(g){var y,v;y=g,v=s&&s.formats;for(var x=(g=y.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,function(C,D,O){var R=O&&O.toUpperCase();return D||v[O]||t[O]||v[R].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(k,L,A){return L||A.slice(1)})})).match(e),b=x.length,T=0;T-1)return new Date((M==="X"?1e3:1)*I);var F=m(M)(I),z=F.year,$=F.month,U=F.day,K=F.hours,ee=F.minutes,Y=F.seconds,ce=F.milliseconds,Z=F.zone,ue=F.week,Q=new Date,j=U||(z||$?1:Q.getDate()),ne=z||Q.getFullYear(),te=0;z&&!$||(te=$>0?$-1:Q.getMonth());var he,le=K||0,J=ee||0,Se=Y||0,se=ce||0;return Z?new Date(Date.UTC(ne,te,j,le,J,Se,se+60*Z.offset*1e3)):P?new Date(Date.UTC(ne,te,j,le,J,Se,se)):(he=new Date(ne,te,j,le,J,Se,se),ue&&(he=B(he).week(ue).toDate()),he)}catch{return new Date("")}}(S,_,w,v),this.init(),R&&R!==!0&&(this.$L=this.locale(R).$L),O&&S!=this.format(_)&&(this.$d=new Date("")),s={}}else if(_ instanceof Array)for(var k=_.length,L=1;L<=k;L+=1){E[1]=_[L-1];var A=v.apply(this,E);if(A.isValid()){this.$d=A.$d,this.$L=A.$L,this.init();break}L===k&&(this.$d=new Date(""))}else b.call(this,T)}}})});var Phe=Pi((IO,OO)=>{"use strict";(function(t,e){typeof IO=="object"&&typeof OO<"u"?OO.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs_plugin_advancedFormat=e()})(IO,function(){"use strict";return function(t,e){var r=e.prototype,n=r.format;r.format=function(i){var a=this,s=this.$locale();if(!this.isValid())return n.bind(this)(i);var l=this.$utils(),u=(i||"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(h){switch(h){case"Q":return Math.ceil((a.$M+1)/3);case"Do":return s.ordinal(a.$D);case"gggg":return a.weekYear();case"GGGG":return a.isoWeekYear();case"wo":return s.ordinal(a.week(),"W");case"w":case"ww":return l.s(a.week(),h==="w"?1:2,"0");case"W":case"WW":return l.s(a.isoWeek(),h==="W"?1:2,"0");case"k":case"kk":return l.s(String(a.$H===0?24:a.$H),h==="k"?1:2,"0");case"X":return Math.floor(a.$d.getTime()/1e3);case"x":return a.$d.getTime();case"z":return"["+a.offsetName()+"]";case"zzz":return"["+a.offsetName("long")+"]";default:return h}});return n.bind(this)(u)}}})});function Zhe(t,e,r){let n=!0;for(;n;)n=!1,r.forEach(function(i){let a="^\\s*"+i+"\\s*$",s=new RegExp(a);t[0].match(s)&&(e[i]=!0,t.shift(1),n=!0)})}var $he,mo,zhe,Ghe,Vhe,Bhe,qc,$O,zO,GO,Cb,Ab,VO,UO,RS,R1,HO,Uhe,WO,_b,qO,YO,NS,PO,BGe,FGe,$Ge,zGe,GGe,VGe,UGe,HGe,WGe,qGe,YGe,XGe,jGe,KGe,QGe,ZGe,JGe,eVe,tVe,rVe,nVe,iVe,aVe,Hhe,sVe,oVe,lVe,Whe,cVe,BO,qhe,Yhe,DS,L1,uVe,hVe,FO,LS,Ui,Xhe,fVe,Pp,dVe,Fhe,pVe,jhe,mVe,Khe,gVe,yVe,Qhe,Jhe=N(()=>{"use strict";$he=Aa(Z0(),1),mo=Aa(U4(),1),zhe=Aa(Ihe(),1),Ghe=Aa(Ohe(),1),Vhe=Aa(Phe(),1);yt();Gt();er();ci();mo.default.extend(zhe.default);mo.default.extend(Ghe.default);mo.default.extend(Vhe.default);Bhe={friday:5,saturday:6},qc="",$O="",GO="",Cb=[],Ab=[],VO=new Map,UO=[],RS=[],R1="",HO="",Uhe=["active","done","crit","milestone","vert"],WO=[],_b=!1,qO=!1,YO="sunday",NS="saturday",PO=0,BGe=o(function(){UO=[],RS=[],R1="",WO=[],DS=0,FO=void 0,LS=void 0,Ui=[],qc="",$O="",HO="",zO=void 0,GO="",Cb=[],Ab=[],_b=!1,qO=!1,PO=0,VO=new Map,kr(),YO="sunday",NS="saturday"},"clear"),FGe=o(function(t){$O=t},"setAxisFormat"),$Ge=o(function(){return $O},"getAxisFormat"),zGe=o(function(t){zO=t},"setTickInterval"),GGe=o(function(){return zO},"getTickInterval"),VGe=o(function(t){GO=t},"setTodayMarker"),UGe=o(function(){return GO},"getTodayMarker"),HGe=o(function(t){qc=t},"setDateFormat"),WGe=o(function(){_b=!0},"enableInclusiveEndDates"),qGe=o(function(){return _b},"endDatesAreInclusive"),YGe=o(function(){qO=!0},"enableTopAxis"),XGe=o(function(){return qO},"topAxisEnabled"),jGe=o(function(t){HO=t},"setDisplayMode"),KGe=o(function(){return HO},"getDisplayMode"),QGe=o(function(){return qc},"getDateFormat"),ZGe=o(function(t){Cb=t.toLowerCase().split(/[\s,]+/)},"setIncludes"),JGe=o(function(){return Cb},"getIncludes"),eVe=o(function(t){Ab=t.toLowerCase().split(/[\s,]+/)},"setExcludes"),tVe=o(function(){return Ab},"getExcludes"),rVe=o(function(){return VO},"getLinks"),nVe=o(function(t){R1=t,UO.push(t)},"addSection"),iVe=o(function(){return UO},"getSections"),aVe=o(function(){let t=Fhe(),e=10,r=0;for(;!t&&r[\d\w- ]+)/.exec(r);if(i!==null){let s=null;for(let u of i.groups.ids.split(" ")){let h=Pp(u);h!==void 0&&(!s||h.endTime>s.endTime)&&(s=h)}if(s)return s.endTime;let l=new Date;return l.setHours(0,0,0,0),l}let a=(0,mo.default)(r,e.trim(),!0);if(a.isValid())return a.toDate();{X.debug("Invalid date:"+r),X.debug("With date format:"+e.trim());let s=new Date(r);if(s===void 0||isNaN(s.getTime())||s.getFullYear()<-1e4||s.getFullYear()>1e4)throw new Error("Invalid date:"+r);return s}},"getStartDate"),qhe=o(function(t){let e=/^(\d+(?:\.\d+)?)([Mdhmswy]|ms)$/.exec(t.trim());return e!==null?[Number.parseFloat(e[1]),e[2]]:[NaN,"ms"]},"parseDuration"),Yhe=o(function(t,e,r,n=!1){r=r.trim();let a=/^until\s+(?[\d\w- ]+)/.exec(r);if(a!==null){let f=null;for(let p of a.groups.ids.split(" ")){let m=Pp(p);m!==void 0&&(!f||m.startTime{window.open(r,"_self")}),VO.set(n,r))}),jhe(t,"clickable")},"setLink"),jhe=o(function(t,e){t.split(",").forEach(function(r){let n=Pp(r);n!==void 0&&n.classes.push(e)})},"setClass"),mVe=o(function(t,e,r){if(me().securityLevel!=="loose"||e===void 0)return;let n=[];if(typeof r=="string"){n=r.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let a=0;a{Vt.runFunc(e,...n)})},"setClickFun"),Khe=o(function(t,e){WO.push(function(){let r=document.querySelector(`[id="${t}"]`);r!==null&&r.addEventListener("click",function(){e()})},function(){let r=document.querySelector(`[id="${t}-text"]`);r!==null&&r.addEventListener("click",function(){e()})})},"pushFun"),gVe=o(function(t,e,r){t.split(",").forEach(function(n){mVe(n,e,r)}),jhe(t,"clickable")},"setClickEvent"),yVe=o(function(t){WO.forEach(function(e){e(t)})},"bindFunctions"),Qhe={getConfig:o(()=>me().gantt,"getConfig"),clear:BGe,setDateFormat:HGe,getDateFormat:QGe,enableInclusiveEndDates:WGe,endDatesAreInclusive:qGe,enableTopAxis:YGe,topAxisEnabled:XGe,setAxisFormat:FGe,getAxisFormat:$Ge,setTickInterval:zGe,getTickInterval:GGe,setTodayMarker:VGe,getTodayMarker:UGe,setAccTitle:Ar,getAccTitle:Dr,setDiagramTitle:Or,getDiagramTitle:Nr,setDisplayMode:jGe,getDisplayMode:KGe,setAccDescription:Lr,getAccDescription:Rr,addSection:nVe,getSections:iVe,getTasks:aVe,addTask:fVe,findTaskById:Pp,addTaskOrg:dVe,setIncludes:ZGe,getIncludes:JGe,setExcludes:eVe,getExcludes:tVe,setClickEvent:gVe,setLink:pVe,getLinks:rVe,bindFunctions:yVe,parseDuration:qhe,isInvalidDate:Hhe,setWeekday:sVe,getWeekday:oVe,setWeekend:lVe};o(Zhe,"getTaskTags")});var MS,vVe,efe,xVe,Ju,bVe,tfe,rfe=N(()=>{"use strict";MS=Aa(U4(),1);yt();fr();pr();Gt();xi();vVe=o(function(){X.debug("Something is calling, setConf, remove the call")},"setConf"),efe={monday:Nh,tuesday:I5,wednesday:O5,thursday:fc,friday:P5,saturday:B5,sunday:wl},xVe=o((t,e)=>{let r=[...t].map(()=>-1/0),n=[...t].sort((a,s)=>a.startTime-s.startTime||a.order-s.order),i=0;for(let a of n)for(let s=0;s=r[s]){r[s]=a.endTime,a.order=s+e,s>i&&(i=s);break}return i},"getMaxIntersections"),bVe=o(function(t,e,r,n){let i=me().gantt,a=me().securityLevel,s;a==="sandbox"&&(s=Ge("#i"+e));let l=a==="sandbox"?Ge(s.nodes()[0].contentDocument.body):Ge("body"),u=a==="sandbox"?s.nodes()[0].contentDocument:document,h=u.getElementById(e);Ju=h.parentElement.offsetWidth,Ju===void 0&&(Ju=1200),i.useWidth!==void 0&&(Ju=i.useWidth);let f=n.db.getTasks(),d=[];for(let C of f)d.push(C.type);d=_(d);let p={},m=2*i.topPadding;if(n.db.getDisplayMode()==="compact"||i.displayMode==="compact"){let C={};for(let O of f)C[O.section]===void 0?C[O.section]=[O]:C[O.section].push(O);let D=0;for(let O of Object.keys(C)){let R=xVe(C[O],D)+1;D+=R,m+=R*(i.barHeight+i.barGap),p[O]=R}}else{m+=f.length*(i.barHeight+i.barGap);for(let C of d)p[C]=f.filter(D=>D.type===C).length}h.setAttribute("viewBox","0 0 "+Ju+" "+m);let g=l.select(`[id="${e}"]`),y=z5().domain([W3(f,function(C){return C.startTime}),H3(f,function(C){return C.endTime})]).rangeRound([0,Ju-i.leftPadding-i.rightPadding]);function v(C,D){let O=C.startTime,R=D.startTime,k=0;return O>R?k=1:Oz.vert===$.vert?0:z.vert?1:-1);let M=[...new Set(C.map(z=>z.order))].map(z=>C.find($=>$.order===z));g.append("g").selectAll("rect").data(M).enter().append("rect").attr("x",0).attr("y",function(z,$){return $=z.order,$*D+O-2}).attr("width",function(){return A-i.rightPadding/2}).attr("height",D).attr("class",function(z){for(let[$,U]of d.entries())if(z.type===U)return"section section"+$%i.numberSectionStyles;return"section section0"}).enter();let P=g.append("g").selectAll("rect").data(C).enter(),B=n.db.getLinks();if(P.append("rect").attr("id",function(z){return z.id}).attr("rx",3).attr("ry",3).attr("x",function(z){return z.milestone?y(z.startTime)+R+.5*(y(z.endTime)-y(z.startTime))-.5*k:y(z.startTime)+R}).attr("y",function(z,$){return $=z.order,z.vert?i.gridLineStartPadding:$*D+O}).attr("width",function(z){return z.milestone?k:z.vert?.08*k:y(z.renderEndTime||z.endTime)-y(z.startTime)}).attr("height",function(z){return z.vert?f.length*(i.barHeight+i.barGap)+i.barHeight*2:k}).attr("transform-origin",function(z,$){return $=z.order,(y(z.startTime)+R+.5*(y(z.endTime)-y(z.startTime))).toString()+"px "+($*D+O+.5*k).toString()+"px"}).attr("class",function(z){let $="task",U="";z.classes.length>0&&(U=z.classes.join(" "));let K=0;for(let[Y,ce]of d.entries())z.type===ce&&(K=Y%i.numberSectionStyles);let ee="";return z.active?z.crit?ee+=" activeCrit":ee=" active":z.done?z.crit?ee=" doneCrit":ee=" done":z.crit&&(ee+=" crit"),ee.length===0&&(ee=" task"),z.milestone&&(ee=" milestone "+ee),z.vert&&(ee=" vert "+ee),ee+=K,ee+=" "+U,$+ee}),P.append("text").attr("id",function(z){return z.id+"-text"}).text(function(z){return z.task}).attr("font-size",i.fontSize).attr("x",function(z){let $=y(z.startTime),U=y(z.renderEndTime||z.endTime);if(z.milestone&&($+=.5*(y(z.endTime)-y(z.startTime))-.5*k,U=$+k),z.vert)return y(z.startTime)+R;let K=this.getBBox().width;return K>U-$?U+K+1.5*i.leftPadding>A?$+R-5:U+R+5:(U-$)/2+$+R}).attr("y",function(z,$){return z.vert?i.gridLineStartPadding+f.length*(i.barHeight+i.barGap)+60:($=z.order,$*D+i.barHeight/2+(i.fontSize/2-2)+O)}).attr("text-height",k).attr("class",function(z){let $=y(z.startTime),U=y(z.endTime);z.milestone&&(U=$+k);let K=this.getBBox().width,ee="";z.classes.length>0&&(ee=z.classes.join(" "));let Y=0;for(let[Z,ue]of d.entries())z.type===ue&&(Y=Z%i.numberSectionStyles);let ce="";return z.active&&(z.crit?ce="activeCritText"+Y:ce="activeText"+Y),z.done?z.crit?ce=ce+" doneCritText"+Y:ce=ce+" doneText"+Y:z.crit&&(ce=ce+" critText"+Y),z.milestone&&(ce+=" milestoneText"),z.vert&&(ce+=" vertText"),K>U-$?U+K+1.5*i.leftPadding>A?ee+" taskTextOutsideLeft taskTextOutside"+Y+" "+ce:ee+" taskTextOutsideRight taskTextOutside"+Y+" "+ce+" width-"+K:ee+" taskText taskText"+Y+" "+ce+" width-"+K}),me().securityLevel==="sandbox"){let z;z=Ge("#i"+e);let $=z.nodes()[0].contentDocument;P.filter(function(U){return B.has(U.id)}).each(function(U){var K=$.querySelector("#"+U.id),ee=$.querySelector("#"+U.id+"-text");let Y=K.parentNode;var ce=$.createElement("a");ce.setAttribute("xlink:href",B.get(U.id)),ce.setAttribute("target","_top"),Y.appendChild(ce),ce.appendChild(K),ce.appendChild(ee)})}}o(b,"drawRects");function T(C,D,O,R,k,L,A,I){if(A.length===0&&I.length===0)return;let M,P;for(let{startTime:K,endTime:ee}of L)(M===void 0||KP)&&(P=ee);if(!M||!P)return;if((0,MS.default)(P).diff((0,MS.default)(M),"year")>5){X.warn("The difference between the min and max time is more than 5 years. This will cause performance issues. Skipping drawing exclude days.");return}let B=n.db.getDateFormat(),F=[],z=null,$=(0,MS.default)(M);for(;$.valueOf()<=P;)n.db.isInvalidDate($,B,A,I)?z?z.end=$:z={start:$,end:$}:z&&(F.push(z),z=null),$=$.add(1,"d");g.append("g").selectAll("rect").data(F).enter().append("rect").attr("id",function(K){return"exclude-"+K.start.format("YYYY-MM-DD")}).attr("x",function(K){return y(K.start)+O}).attr("y",i.gridLineStartPadding).attr("width",function(K){let ee=K.end.add(1,"day");return y(ee)-y(K.start)}).attr("height",k-D-i.gridLineStartPadding).attr("transform-origin",function(K,ee){return(y(K.start)+O+.5*(y(K.end)-y(K.start))).toString()+"px "+(ee*C+.5*k).toString()+"px"}).attr("class","exclude-range")}o(T,"drawExcludeDays");function S(C,D,O,R){let k=zA(y).tickSize(-R+D+i.gridLineStartPadding).tickFormat(Ld(n.db.getAxisFormat()||i.axisFormat||"%Y-%m-%d")),A=/^([1-9]\d*)(millisecond|second|minute|hour|day|week|month)$/.exec(n.db.getTickInterval()||i.tickInterval);if(A!==null){let I=A[1],M=A[2],P=n.db.getWeekday()||i.weekday;switch(M){case"millisecond":k.ticks(uc.every(I));break;case"second":k.ticks(eo.every(I));break;case"minute":k.ticks(wu.every(I));break;case"hour":k.ticks(ku.every(I));break;case"day":k.ticks(Ro.every(I));break;case"week":k.ticks(efe[P].every(I));break;case"month":k.ticks(Eu.every(I));break}}if(g.append("g").attr("class","grid").attr("transform","translate("+C+", "+(R-50)+")").call(k).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10).attr("dy","1em"),n.db.topAxisEnabled()||i.topAxis){let I=$A(y).tickSize(-R+D+i.gridLineStartPadding).tickFormat(Ld(n.db.getAxisFormat()||i.axisFormat||"%Y-%m-%d"));if(A!==null){let M=A[1],P=A[2],B=n.db.getWeekday()||i.weekday;switch(P){case"millisecond":I.ticks(uc.every(M));break;case"second":I.ticks(eo.every(M));break;case"minute":I.ticks(wu.every(M));break;case"hour":I.ticks(ku.every(M));break;case"day":I.ticks(Ro.every(M));break;case"week":I.ticks(efe[B].every(M));break;case"month":I.ticks(Eu.every(M));break}}g.append("g").attr("class","grid").attr("transform","translate("+C+", "+D+")").call(I).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10)}}o(S,"makeGrid");function w(C,D){let O=0,R=Object.keys(p).map(k=>[k,p[k]]);g.append("g").selectAll("text").data(R).enter().append(function(k){let L=k[0].split(Ze.lineBreakRegex),A=-(L.length-1)/2,I=u.createElementNS("http://www.w3.org/2000/svg","text");I.setAttribute("dy",A+"em");for(let[M,P]of L.entries()){let B=u.createElementNS("http://www.w3.org/2000/svg","tspan");B.setAttribute("alignment-baseline","central"),B.setAttribute("x","10"),M>0&&B.setAttribute("dy","1em"),B.textContent=P,I.appendChild(B)}return I}).attr("x",10).attr("y",function(k,L){if(L>0)for(let A=0;A{"use strict";TVe=o(t=>` .mermaid-main-font { font-family: ${t.fontFamily}; } @@ -1158,8 +1158,8 @@ Expecting `+Ie.join(", ")+", got '"+(this.terminals_[J]||J)+"'":xe="Parse error fill: ${t.titleColor||t.textColor}; font-family: ${t.fontFamily}; } -`,"getStyles"),Gue=Bze});var Uue={};hr(Uue,{diagram:()=>Fze});var Fze,Hue=N(()=>{"use strict";yue();Bue();zue();Vue();Fze={parser:gue,db:Oue,renderer:$ue,styles:Gue}});var Yue,Xue=N(()=>{"use strict";Lp();vt();Yue={parse:o(async t=>{let e=await fo("info",t);X.debug(e)},"parse")}});var Sb,fO=N(()=>{Sb={name:"mermaid",version:"11.7.0",description:"Markdown-ish syntax for generating flowcharts, mindmaps, sequence diagrams, class diagrams, gantt charts, git graphs and more.",type:"module",module:"./dist/mermaid.core.mjs",types:"./dist/mermaid.d.ts",exports:{".":{types:"./dist/mermaid.d.ts",import:"./dist/mermaid.core.mjs",default:"./dist/mermaid.core.mjs"},"./*":"./*"},keywords:["diagram","markdown","flowchart","sequence diagram","gantt","class diagram","git graph","mindmap","packet diagram","c4 diagram","er diagram","pie chart","pie diagram","quadrant chart","requirement diagram","graph"],scripts:{clean:"rimraf dist",dev:"pnpm -w dev","docs:code":"typedoc src/defaultConfig.ts src/config.ts src/mermaid.ts && prettier --write ./src/docs/config/setup","docs:build":"rimraf ../../docs && pnpm docs:code && pnpm docs:spellcheck && tsx scripts/docs.cli.mts","docs:verify":"pnpm docs:code && pnpm docs:spellcheck && tsx scripts/docs.cli.mts --verify","docs:pre:vitepress":"pnpm --filter ./src/docs prefetch && rimraf src/vitepress && pnpm docs:code && tsx scripts/docs.cli.mts --vitepress && pnpm --filter ./src/vitepress install --no-frozen-lockfile --ignore-scripts","docs:build:vitepress":"pnpm docs:pre:vitepress && (cd src/vitepress && pnpm run build) && cpy --flat src/docs/landing/ ./src/vitepress/.vitepress/dist/landing","docs:dev":'pnpm docs:pre:vitepress && concurrently "pnpm --filter ./src/vitepress dev" "tsx scripts/docs.cli.mts --watch --vitepress"',"docs:dev:docker":'pnpm docs:pre:vitepress && concurrently "pnpm --filter ./src/vitepress dev:docker" "tsx scripts/docs.cli.mts --watch --vitepress"',"docs:serve":"pnpm docs:build:vitepress && vitepress serve src/vitepress","docs:spellcheck":'cspell "src/docs/**/*.md"',"docs:release-version":"tsx scripts/update-release-version.mts","docs:verify-version":"tsx scripts/update-release-version.mts --verify","types:build-config":"tsx scripts/create-types-from-json-schema.mts","types:verify-config":"tsx scripts/create-types-from-json-schema.mts --verify",checkCircle:"npx madge --circular ./src",prepublishOnly:"pnpm docs:verify-version"},repository:{type:"git",url:"https://github.com/mermaid-js/mermaid"},author:"Knut Sveidqvist",license:"MIT",standard:{ignore:["**/parser/*.js","dist/**/*.js","cypress/**/*.js"],globals:["page"]},dependencies:{"@braintree/sanitize-url":"^7.0.4","@iconify/utils":"^2.1.33","@mermaid-js/parser":"workspace:^","@types/d3":"^7.4.3",cytoscape:"^3.29.3","cytoscape-cose-bilkent":"^4.1.0","cytoscape-fcose":"^2.2.0",d3:"^7.9.0","d3-sankey":"^0.12.3","dagre-d3-es":"7.0.11",dayjs:"^1.11.13",dompurify:"^3.2.5",katex:"^0.16.9",khroma:"^2.1.0","lodash-es":"^4.17.21",marked:"^15.0.7",roughjs:"^4.6.6",stylis:"^4.3.6","ts-dedent":"^2.2.0",uuid:"^11.1.0"},devDependencies:{"@adobe/jsonschema2md":"^8.0.2","@iconify/types":"^2.0.0","@types/cytoscape":"^3.21.9","@types/cytoscape-fcose":"^2.2.4","@types/d3-sankey":"^0.12.4","@types/d3-scale":"^4.0.9","@types/d3-scale-chromatic":"^3.1.0","@types/d3-selection":"^3.0.11","@types/d3-shape":"^3.1.7","@types/jsdom":"^21.1.7","@types/katex":"^0.16.7","@types/lodash-es":"^4.17.12","@types/micromatch":"^4.0.9","@types/stylis":"^4.2.7","@types/uuid":"^10.0.0",ajv:"^8.17.1",chokidar:"^4.0.3",concurrently:"^9.1.2","csstree-validator":"^4.0.1",globby:"^14.0.2",jison:"^0.4.18","js-base64":"^3.7.7",jsdom:"^26.0.0","json-schema-to-typescript":"^15.0.4",micromatch:"^4.0.8","path-browserify":"^1.0.1",prettier:"^3.5.2",remark:"^15.0.1","remark-frontmatter":"^5.0.0","remark-gfm":"^4.0.1",rimraf:"^6.0.1","start-server-and-test":"^2.0.10","type-fest":"^4.35.0",typedoc:"^0.27.8","typedoc-plugin-markdown":"^4.4.2",typescript:"~5.7.3","unist-util-flatmap":"^1.0.0","unist-util-visit":"^5.0.0",vitepress:"^1.0.2","vitepress-plugin-search":"1.0.4-alpha.22"},files:["dist/","README.md"],publishConfig:{access:"public"}}});var Uze,Hze,jue,Kue=N(()=>{"use strict";fO();Uze={version:Sb.version+""},Hze=o(()=>Uze.version,"getVersion"),jue={getVersion:Hze}});var sa,qc=N(()=>{"use strict";pr();zt();sa=o(t=>{let{securityLevel:e}=me(),r=Ge("body");if(e==="sandbox"){let a=Ge(`#i${t}`).node()?.contentDocument??document;r=Ge(a.body)}return r.select(`#${t}`)},"selectSvgElement")});var Wze,Que,Zue=N(()=>{"use strict";vt();qc();Si();Wze=o((t,e,r)=>{X.debug(`rendering info diagram -`+t);let n=sa(e);vn(n,100,400,!0),n.append("g").append("text").attr("x",100).attr("y",40).attr("class","version").attr("font-size",32).style("text-anchor","middle").text(`v${r}`)},"draw"),Que={draw:Wze}});var Jue={};hr(Jue,{diagram:()=>qze});var qze,ehe=N(()=>{"use strict";Xue();Kue();Zue();qze={parser:Yue,db:jue,renderer:Que}});var nhe,dO,wS,pO,jze,Kze,Qze,Zze,Jze,eGe,tGe,TS,mO=N(()=>{"use strict";vt();mi();Ya();nhe=lr.pie,dO={sections:new Map,showData:!1,config:nhe},wS=dO.sections,pO=dO.showData,jze=structuredClone(nhe),Kze=o(()=>structuredClone(jze),"getConfig"),Qze=o(()=>{wS=new Map,pO=dO.showData,Ar()},"clear"),Zze=o(({label:t,value:e})=>{wS.has(t)||(wS.set(t,e),X.debug(`added new section: ${t}, with value: ${e}`))},"addSection"),Jze=o(()=>wS,"getSections"),eGe=o(t=>{pO=t},"setShowData"),tGe=o(()=>pO,"getShowData"),TS={getConfig:Kze,clear:Qze,setDiagramTitle:$r,getDiagramTitle:Ir,setAccTitle:Lr,getAccTitle:Rr,setAccDescription:Nr,getAccDescription:Mr,addSection:Zze,getSections:Jze,setShowData:eGe,getShowData:tGe}});var rGe,ihe,ahe=N(()=>{"use strict";Lp();vt();L1();mO();rGe=o((t,e)=>{Uc(t,e),e.setShowData(t.showData),t.sections.map(e.addSection)},"populateDb"),ihe={parse:o(async t=>{let e=await fo("pie",t);X.debug(e),rGe(e,TS)},"parse")}});var nGe,she,ohe=N(()=>{"use strict";nGe=o(t=>` +`,"getStyles"),nfe=TVe});var afe={};ur(afe,{diagram:()=>wVe});var wVe,sfe=N(()=>{"use strict";Mhe();Jhe();rfe();ife();wVe={parser:Nhe,db:Qhe,renderer:tfe,styles:nfe}});var cfe,ufe=N(()=>{"use strict";bf();yt();cfe={parse:o(async t=>{let e=await vs("info",t);X.debug(e)},"parse")}});var Db,XO=N(()=>{Db={name:"mermaid",version:"11.9.0",description:"Markdown-ish syntax for generating flowcharts, mindmaps, sequence diagrams, class diagrams, gantt charts, git graphs and more.",type:"module",module:"./dist/mermaid.core.mjs",types:"./dist/mermaid.d.ts",exports:{".":{types:"./dist/mermaid.d.ts",import:"./dist/mermaid.core.mjs",default:"./dist/mermaid.core.mjs"},"./*":"./*"},keywords:["diagram","markdown","flowchart","sequence diagram","gantt","class diagram","git graph","mindmap","packet diagram","c4 diagram","er diagram","pie chart","pie diagram","quadrant chart","requirement diagram","graph"],scripts:{clean:"rimraf dist",dev:"pnpm -w dev","docs:code":"typedoc src/defaultConfig.ts src/config.ts src/mermaid.ts && prettier --write ./src/docs/config/setup","docs:build":"rimraf ../../docs && pnpm docs:code && pnpm docs:spellcheck && tsx scripts/docs.cli.mts","docs:verify":"pnpm docs:code && pnpm docs:spellcheck && tsx scripts/docs.cli.mts --verify","docs:pre:vitepress":"pnpm --filter ./src/docs prefetch && rimraf src/vitepress && pnpm docs:code && tsx scripts/docs.cli.mts --vitepress && pnpm --filter ./src/vitepress install --no-frozen-lockfile --ignore-scripts","docs:build:vitepress":"pnpm docs:pre:vitepress && (cd src/vitepress && pnpm run build) && cpy --flat src/docs/landing/ ./src/vitepress/.vitepress/dist/landing","docs:dev":'pnpm docs:pre:vitepress && concurrently "pnpm --filter ./src/vitepress dev" "tsx scripts/docs.cli.mts --watch --vitepress"',"docs:dev:docker":'pnpm docs:pre:vitepress && concurrently "pnpm --filter ./src/vitepress dev:docker" "tsx scripts/docs.cli.mts --watch --vitepress"',"docs:serve":"pnpm docs:build:vitepress && vitepress serve src/vitepress","docs:spellcheck":'cspell "src/docs/**/*.md"',"docs:release-version":"tsx scripts/update-release-version.mts","docs:verify-version":"tsx scripts/update-release-version.mts --verify","types:build-config":"tsx scripts/create-types-from-json-schema.mts","types:verify-config":"tsx scripts/create-types-from-json-schema.mts --verify",checkCircle:"npx madge --circular ./src",prepublishOnly:"pnpm docs:verify-version"},repository:{type:"git",url:"https://github.com/mermaid-js/mermaid"},author:"Knut Sveidqvist",license:"MIT",standard:{ignore:["**/parser/*.js","dist/**/*.js","cypress/**/*.js"],globals:["page"]},dependencies:{"@braintree/sanitize-url":"^7.0.4","@iconify/utils":"^2.1.33","@mermaid-js/parser":"workspace:^","@types/d3":"^7.4.3",cytoscape:"^3.29.3","cytoscape-cose-bilkent":"^4.1.0","cytoscape-fcose":"^2.2.0",d3:"^7.9.0","d3-sankey":"^0.12.3","dagre-d3-es":"7.0.11",dayjs:"^1.11.13",dompurify:"^3.2.5",katex:"^0.16.22",khroma:"^2.1.0","lodash-es":"^4.17.21",marked:"^16.0.0",roughjs:"^4.6.6",stylis:"^4.3.6","ts-dedent":"^2.2.0",uuid:"^11.1.0"},devDependencies:{"@adobe/jsonschema2md":"^8.0.2","@iconify/types":"^2.0.0","@types/cytoscape":"^3.21.9","@types/cytoscape-fcose":"^2.2.4","@types/d3-sankey":"^0.12.4","@types/d3-scale":"^4.0.9","@types/d3-scale-chromatic":"^3.1.0","@types/d3-selection":"^3.0.11","@types/d3-shape":"^3.1.7","@types/jsdom":"^21.1.7","@types/katex":"^0.16.7","@types/lodash-es":"^4.17.12","@types/micromatch":"^4.0.9","@types/stylis":"^4.2.7","@types/uuid":"^10.0.0",ajv:"^8.17.1",canvas:"^3.1.0",chokidar:"3.6.0",concurrently:"^9.1.2","csstree-validator":"^4.0.1",globby:"^14.0.2",jison:"^0.4.18","js-base64":"^3.7.7",jsdom:"^26.1.0","json-schema-to-typescript":"^15.0.4",micromatch:"^4.0.8","path-browserify":"^1.0.1",prettier:"^3.5.2",remark:"^15.0.1","remark-frontmatter":"^5.0.0","remark-gfm":"^4.0.1",rimraf:"^6.0.1","start-server-and-test":"^2.0.10","type-fest":"^4.35.0",typedoc:"^0.27.8","typedoc-plugin-markdown":"^4.4.2",typescript:"~5.7.3","unist-util-flatmap":"^1.0.0","unist-util-visit":"^5.0.0",vitepress:"^1.0.2","vitepress-plugin-search":"1.0.4-alpha.22"},files:["dist/","README.md"],publishConfig:{access:"public"}}});var AVe,_Ve,hfe,ffe=N(()=>{"use strict";XO();AVe={version:Db.version+""},_Ve=o(()=>AVe.version,"getVersion"),hfe={getVersion:_Ve}});var Li,Vl=N(()=>{"use strict";fr();Gt();Li=o(t=>{let{securityLevel:e}=me(),r=Ge("body");if(e==="sandbox"){let a=Ge(`#i${t}`).node()?.contentDocument??document;r=Ge(a.body)}return r.select(`#${t}`)},"selectSvgElement")});var DVe,dfe,pfe=N(()=>{"use strict";yt();Vl();xi();DVe=o((t,e,r)=>{X.debug(`rendering info diagram +`+t);let n=Li(e);fn(n,100,400,!0),n.append("g").append("text").attr("x",100).attr("y",40).attr("class","version").attr("font-size",32).style("text-anchor","middle").text(`v${r}`)},"draw"),dfe={draw:DVe}});var mfe={};ur(mfe,{diagram:()=>LVe});var LVe,gfe=N(()=>{"use strict";ufe();ffe();pfe();LVe={parser:cfe,db:hfe,renderer:dfe}});var xfe,jO,IS,KO,MVe,IVe,OVe,PVe,BVe,FVe,$Ve,OS,QO=N(()=>{"use strict";yt();ci();_a();xfe=or.pie,jO={sections:new Map,showData:!1,config:xfe},IS=jO.sections,KO=jO.showData,MVe=structuredClone(xfe),IVe=o(()=>structuredClone(MVe),"getConfig"),OVe=o(()=>{IS=new Map,KO=jO.showData,kr()},"clear"),PVe=o(({label:t,value:e})=>{IS.has(t)||(IS.set(t,e),X.debug(`added new section: ${t}, with value: ${e}`))},"addSection"),BVe=o(()=>IS,"getSections"),FVe=o(t=>{KO=t},"setShowData"),$Ve=o(()=>KO,"getShowData"),OS={getConfig:IVe,clear:OVe,setDiagramTitle:Or,getDiagramTitle:Nr,setAccTitle:Ar,getAccTitle:Dr,setAccDescription:Lr,getAccDescription:Rr,addSection:PVe,getSections:BVe,setShowData:FVe,getShowData:$Ve}});var zVe,bfe,Tfe=N(()=>{"use strict";bf();yt();Mp();QO();zVe=o((t,e)=>{Jo(t,e),e.setShowData(t.showData),t.sections.map(e.addSection)},"populateDb"),bfe={parse:o(async t=>{let e=await vs("pie",t);X.debug(e),zVe(e,OS)},"parse")}});var GVe,wfe,kfe=N(()=>{"use strict";GVe=o(t=>` .pieCircle{ stroke: ${t.pieStrokeColor}; stroke-width : ${t.pieStrokeWidth}; @@ -1187,25 +1187,25 @@ Expecting `+Ie.join(", ")+", got '"+(this.terminals_[J]||J)+"'":xe="Parse error font-family: ${t.fontFamily}; font-size: ${t.pieLegendTextSize}; } -`,"getStyles"),she=nGe});var iGe,aGe,lhe,che=N(()=>{"use strict";pr();zt();vt();qc();Si();nr();iGe=o(t=>{let e=[...t.entries()].map(n=>({label:n[0],value:n[1]})).sort((n,i)=>i.value-n.value);return G5().value(n=>n.value)(e)},"createPieArcs"),aGe=o((t,e,r,n)=>{X.debug(`rendering pie chart -`+t);let i=n.db,a=me(),s=gi(i.getConfig(),a.pie),l=40,u=18,h=4,f=450,d=f,p=sa(e),m=p.append("g");m.attr("transform","translate("+d/2+","+f/2+")");let{themeVariables:g}=a,[y]=Fo(g.pieOuterStrokeWidth);y??=2;let v=s.textPosition,x=Math.min(d,f)/2-l,b=Tl().innerRadius(0).outerRadius(x),w=Tl().innerRadius(x*v).outerRadius(x*v);m.append("circle").attr("cx",0).attr("cy",0).attr("r",x+y/2).attr("class","pieOuterCircle");let C=i.getSections(),T=iGe(C),E=[g.pie1,g.pie2,g.pie3,g.pie4,g.pie5,g.pie6,g.pie7,g.pie8,g.pie9,g.pie10,g.pie11,g.pie12],A=bu(E);m.selectAll("mySlices").data(T).enter().append("path").attr("d",b).attr("fill",k=>A(k.data.label)).attr("class","pieCircle");let S=0;C.forEach(k=>{S+=k}),m.selectAll("mySlices").data(T).enter().append("text").text(k=>(k.data.value/S*100).toFixed(0)+"%").attr("transform",k=>"translate("+w.centroid(k)+")").style("text-anchor","middle").attr("class","slice"),m.append("text").text(i.getDiagramTitle()).attr("x",0).attr("y",-(f-50)/2).attr("class","pieTitleText");let _=m.selectAll(".legend").data(A.domain()).enter().append("g").attr("class","legend").attr("transform",(k,D)=>{let R=u+h,O=R*A.domain().length/2,M=12*u,P=D*R-O;return"translate("+M+","+P+")"});_.append("rect").attr("width",u).attr("height",u).style("fill",A).style("stroke",A),_.data(T).append("text").attr("x",u+h).attr("y",u-h).text(k=>{let{label:D,value:R}=k.data;return i.getShowData()?`${D} [${R}]`:D});let I=Math.max(..._.selectAll("text").nodes().map(k=>k?.getBoundingClientRect().width??0)),L=d+l+u+h+I;p.attr("viewBox",`0 0 ${L} ${f}`),vn(p,f,L,s.useMaxWidth)},"draw"),lhe={draw:aGe}});var uhe={};hr(uhe,{diagram:()=>sGe});var sGe,hhe=N(()=>{"use strict";ahe();mO();ohe();che();sGe={parser:ihe,db:TS,renderer:lhe,styles:she}});var gO,phe,mhe=N(()=>{"use strict";gO=function(){var t=o(function(we,W,pe,ve){for(pe=pe||{},ve=we.length;ve--;pe[we[ve]]=W);return pe},"o"),e=[1,3],r=[1,4],n=[1,5],i=[1,6],a=[1,7],s=[1,4,5,10,12,13,14,18,25,35,37,39,41,42,48,50,51,52,53,54,55,56,57,60,61,63,64,65,66,67],l=[1,4,5,10,12,13,14,18,25,28,35,37,39,41,42,48,50,51,52,53,54,55,56,57,60,61,63,64,65,66,67],u=[55,56,57],h=[2,36],f=[1,37],d=[1,36],p=[1,38],m=[1,35],g=[1,43],y=[1,41],v=[1,14],x=[1,23],b=[1,18],w=[1,19],C=[1,20],T=[1,21],E=[1,22],A=[1,24],S=[1,25],_=[1,26],I=[1,27],L=[1,28],k=[1,29],D=[1,32],R=[1,33],O=[1,34],M=[1,39],P=[1,40],B=[1,42],F=[1,44],z=[1,62],$=[1,61],U=[4,5,8,10,12,13,14,18,44,47,49,55,56,57,63,64,65,66,67],Q=[1,65],te=[1,66],Y=[1,67],he=[1,68],Z=[1,69],ue=[1,70],K=[1,71],j=[1,72],ne=[1,73],ee=[1,74],ce=[1,75],le=[1,76],J=[4,5,6,7,8,9,10,11,12,13,14,15,18],Se=[1,90],se=[1,91],ae=[1,92],Oe=[1,99],ye=[1,93],Be=[1,96],He=[1,94],ze=[1,95],Le=[1,97],Ie=[1,98],xe=[1,102],q=[10,55,56,57],de=[4,5,6,8,10,11,13,17,18,19,20,55,56,57],ie={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,idStringToken:3,ALPHA:4,NUM:5,NODE_STRING:6,DOWN:7,MINUS:8,DEFAULT:9,COMMA:10,COLON:11,AMP:12,BRKT:13,MULT:14,UNICODE_TEXT:15,styleComponent:16,UNIT:17,SPACE:18,STYLE:19,PCT:20,idString:21,style:22,stylesOpt:23,classDefStatement:24,CLASSDEF:25,start:26,eol:27,QUADRANT:28,document:29,line:30,statement:31,axisDetails:32,quadrantDetails:33,points:34,title:35,title_value:36,acc_title:37,acc_title_value:38,acc_descr:39,acc_descr_value:40,acc_descr_multiline_value:41,section:42,text:43,point_start:44,point_x:45,point_y:46,class_name:47,"X-AXIS":48,"AXIS-TEXT-DELIMITER":49,"Y-AXIS":50,QUADRANT_1:51,QUADRANT_2:52,QUADRANT_3:53,QUADRANT_4:54,NEWLINE:55,SEMI:56,EOF:57,alphaNumToken:58,textNoTagsToken:59,STR:60,MD_STR:61,alphaNum:62,PUNCTUATION:63,PLUS:64,EQUALS:65,DOT:66,UNDERSCORE:67,$accept:0,$end:1},terminals_:{2:"error",4:"ALPHA",5:"NUM",6:"NODE_STRING",7:"DOWN",8:"MINUS",9:"DEFAULT",10:"COMMA",11:"COLON",12:"AMP",13:"BRKT",14:"MULT",15:"UNICODE_TEXT",17:"UNIT",18:"SPACE",19:"STYLE",20:"PCT",25:"CLASSDEF",28:"QUADRANT",35:"title",36:"title_value",37:"acc_title",38:"acc_title_value",39:"acc_descr",40:"acc_descr_value",41:"acc_descr_multiline_value",42:"section",44:"point_start",45:"point_x",46:"point_y",47:"class_name",48:"X-AXIS",49:"AXIS-TEXT-DELIMITER",50:"Y-AXIS",51:"QUADRANT_1",52:"QUADRANT_2",53:"QUADRANT_3",54:"QUADRANT_4",55:"NEWLINE",56:"SEMI",57:"EOF",60:"STR",61:"MD_STR",63:"PUNCTUATION",64:"PLUS",65:"EQUALS",66:"DOT",67:"UNDERSCORE"},productions_:[0,[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[21,1],[21,2],[22,1],[22,2],[23,1],[23,3],[24,5],[26,2],[26,2],[26,2],[29,0],[29,2],[30,2],[31,0],[31,1],[31,2],[31,1],[31,1],[31,1],[31,2],[31,2],[31,2],[31,1],[31,1],[34,4],[34,5],[34,5],[34,6],[32,4],[32,3],[32,2],[32,4],[32,3],[32,2],[33,2],[33,2],[33,2],[33,2],[27,1],[27,1],[27,1],[43,1],[43,2],[43,1],[43,1],[62,1],[62,2],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[59,1],[59,1],[59,1]],performAction:o(function(W,pe,ve,Pe,_e,be,Ve){var De=be.length-1;switch(_e){case 23:this.$=be[De];break;case 24:this.$=be[De-1]+""+be[De];break;case 26:this.$=be[De-1]+be[De];break;case 27:this.$=[be[De].trim()];break;case 28:be[De-2].push(be[De].trim()),this.$=be[De-2];break;case 29:this.$=be[De-4],Pe.addClass(be[De-2],be[De]);break;case 37:this.$=[];break;case 42:this.$=be[De].trim(),Pe.setDiagramTitle(this.$);break;case 43:this.$=be[De].trim(),Pe.setAccTitle(this.$);break;case 44:case 45:this.$=be[De].trim(),Pe.setAccDescription(this.$);break;case 46:Pe.addSection(be[De].substr(8)),this.$=be[De].substr(8);break;case 47:Pe.addPoint(be[De-3],"",be[De-1],be[De],[]);break;case 48:Pe.addPoint(be[De-4],be[De-3],be[De-1],be[De],[]);break;case 49:Pe.addPoint(be[De-4],"",be[De-2],be[De-1],be[De]);break;case 50:Pe.addPoint(be[De-5],be[De-4],be[De-2],be[De-1],be[De]);break;case 51:Pe.setXAxisLeftText(be[De-2]),Pe.setXAxisRightText(be[De]);break;case 52:be[De-1].text+=" \u27F6 ",Pe.setXAxisLeftText(be[De-1]);break;case 53:Pe.setXAxisLeftText(be[De]);break;case 54:Pe.setYAxisBottomText(be[De-2]),Pe.setYAxisTopText(be[De]);break;case 55:be[De-1].text+=" \u27F6 ",Pe.setYAxisBottomText(be[De-1]);break;case 56:Pe.setYAxisBottomText(be[De]);break;case 57:Pe.setQuadrant1Text(be[De]);break;case 58:Pe.setQuadrant2Text(be[De]);break;case 59:Pe.setQuadrant3Text(be[De]);break;case 60:Pe.setQuadrant4Text(be[De]);break;case 64:this.$={text:be[De],type:"text"};break;case 65:this.$={text:be[De-1].text+""+be[De],type:be[De-1].type};break;case 66:this.$={text:be[De],type:"text"};break;case 67:this.$={text:be[De],type:"markdown"};break;case 68:this.$=be[De];break;case 69:this.$=be[De-1]+""+be[De];break}},"anonymous"),table:[{18:e,26:1,27:2,28:r,55:n,56:i,57:a},{1:[3]},{18:e,26:8,27:2,28:r,55:n,56:i,57:a},{18:e,26:9,27:2,28:r,55:n,56:i,57:a},t(s,[2,33],{29:10}),t(l,[2,61]),t(l,[2,62]),t(l,[2,63]),{1:[2,30]},{1:[2,31]},t(u,h,{30:11,31:12,24:13,32:15,33:16,34:17,43:30,58:31,1:[2,32],4:f,5:d,10:p,12:m,13:g,14:y,18:v,25:x,35:b,37:w,39:C,41:T,42:E,48:A,50:S,51:_,52:I,53:L,54:k,60:D,61:R,63:O,64:M,65:P,66:B,67:F}),t(s,[2,34]),{27:45,55:n,56:i,57:a},t(u,[2,37]),t(u,h,{24:13,32:15,33:16,34:17,43:30,58:31,31:46,4:f,5:d,10:p,12:m,13:g,14:y,18:v,25:x,35:b,37:w,39:C,41:T,42:E,48:A,50:S,51:_,52:I,53:L,54:k,60:D,61:R,63:O,64:M,65:P,66:B,67:F}),t(u,[2,39]),t(u,[2,40]),t(u,[2,41]),{36:[1,47]},{38:[1,48]},{40:[1,49]},t(u,[2,45]),t(u,[2,46]),{18:[1,50]},{4:f,5:d,10:p,12:m,13:g,14:y,43:51,58:31,60:D,61:R,63:O,64:M,65:P,66:B,67:F},{4:f,5:d,10:p,12:m,13:g,14:y,43:52,58:31,60:D,61:R,63:O,64:M,65:P,66:B,67:F},{4:f,5:d,10:p,12:m,13:g,14:y,43:53,58:31,60:D,61:R,63:O,64:M,65:P,66:B,67:F},{4:f,5:d,10:p,12:m,13:g,14:y,43:54,58:31,60:D,61:R,63:O,64:M,65:P,66:B,67:F},{4:f,5:d,10:p,12:m,13:g,14:y,43:55,58:31,60:D,61:R,63:O,64:M,65:P,66:B,67:F},{4:f,5:d,10:p,12:m,13:g,14:y,43:56,58:31,60:D,61:R,63:O,64:M,65:P,66:B,67:F},{4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,44:[1,57],47:[1,58],58:60,59:59,63:O,64:M,65:P,66:B,67:F},t(U,[2,64]),t(U,[2,66]),t(U,[2,67]),t(U,[2,70]),t(U,[2,71]),t(U,[2,72]),t(U,[2,73]),t(U,[2,74]),t(U,[2,75]),t(U,[2,76]),t(U,[2,77]),t(U,[2,78]),t(U,[2,79]),t(U,[2,80]),t(s,[2,35]),t(u,[2,38]),t(u,[2,42]),t(u,[2,43]),t(u,[2,44]),{3:64,4:Q,5:te,6:Y,7:he,8:Z,9:ue,10:K,11:j,12:ne,13:ee,14:ce,15:le,21:63},t(u,[2,53],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,49:[1,77],63:O,64:M,65:P,66:B,67:F}),t(u,[2,56],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,49:[1,78],63:O,64:M,65:P,66:B,67:F}),t(u,[2,57],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,63:O,64:M,65:P,66:B,67:F}),t(u,[2,58],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,63:O,64:M,65:P,66:B,67:F}),t(u,[2,59],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,63:O,64:M,65:P,66:B,67:F}),t(u,[2,60],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,63:O,64:M,65:P,66:B,67:F}),{45:[1,79]},{44:[1,80]},t(U,[2,65]),t(U,[2,81]),t(U,[2,82]),t(U,[2,83]),{3:82,4:Q,5:te,6:Y,7:he,8:Z,9:ue,10:K,11:j,12:ne,13:ee,14:ce,15:le,18:[1,81]},t(J,[2,23]),t(J,[2,1]),t(J,[2,2]),t(J,[2,3]),t(J,[2,4]),t(J,[2,5]),t(J,[2,6]),t(J,[2,7]),t(J,[2,8]),t(J,[2,9]),t(J,[2,10]),t(J,[2,11]),t(J,[2,12]),t(u,[2,52],{58:31,43:83,4:f,5:d,10:p,12:m,13:g,14:y,60:D,61:R,63:O,64:M,65:P,66:B,67:F}),t(u,[2,55],{58:31,43:84,4:f,5:d,10:p,12:m,13:g,14:y,60:D,61:R,63:O,64:M,65:P,66:B,67:F}),{46:[1,85]},{45:[1,86]},{4:Se,5:se,6:ae,8:Oe,11:ye,13:Be,16:89,17:He,18:ze,19:Le,20:Ie,22:88,23:87},t(J,[2,24]),t(u,[2,51],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,63:O,64:M,65:P,66:B,67:F}),t(u,[2,54],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,63:O,64:M,65:P,66:B,67:F}),t(u,[2,47],{22:88,16:89,23:100,4:Se,5:se,6:ae,8:Oe,11:ye,13:Be,17:He,18:ze,19:Le,20:Ie}),{46:[1,101]},t(u,[2,29],{10:xe}),t(q,[2,27],{16:103,4:Se,5:se,6:ae,8:Oe,11:ye,13:Be,17:He,18:ze,19:Le,20:Ie}),t(de,[2,25]),t(de,[2,13]),t(de,[2,14]),t(de,[2,15]),t(de,[2,16]),t(de,[2,17]),t(de,[2,18]),t(de,[2,19]),t(de,[2,20]),t(de,[2,21]),t(de,[2,22]),t(u,[2,49],{10:xe}),t(u,[2,48],{22:88,16:89,23:104,4:Se,5:se,6:ae,8:Oe,11:ye,13:Be,17:He,18:ze,19:Le,20:Ie}),{4:Se,5:se,6:ae,8:Oe,11:ye,13:Be,16:89,17:He,18:ze,19:Le,20:Ie,22:105},t(de,[2,26]),t(u,[2,50],{10:xe}),t(q,[2,28],{16:103,4:Se,5:se,6:ae,8:Oe,11:ye,13:Be,17:He,18:ze,19:Le,20:Ie})],defaultActions:{8:[2,30],9:[2,31]},parseError:o(function(W,pe){if(pe.recoverable)this.trace(W);else{var ve=new Error(W);throw ve.hash=pe,ve}},"parseError"),parse:o(function(W){var pe=this,ve=[0],Pe=[],_e=[null],be=[],Ve=this.table,De="",qe=0,at=0,Lt=0,st=2,Ue=1,ct=be.slice.call(arguments,1),We=Object.create(this.lexer),ot={yy:{}};for(var Yt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Yt)&&(ot.yy[Yt]=this.yy[Yt]);We.setInput(W,ot.yy),ot.yy.lexer=We,ot.yy.parser=this,typeof We.yylloc>"u"&&(We.yylloc={});var bt=We.yylloc;be.push(bt);var Mt=We.options&&We.options.ranges;typeof ot.yy.parseError=="function"?this.parseError=ot.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function xt(Ce){ve.length=ve.length-2*Ce,_e.length=_e.length-Ce,be.length=be.length-Ce}o(xt,"popStack");function ut(){var Ce;return Ce=Pe.pop()||We.lex()||Ue,typeof Ce!="number"&&(Ce instanceof Array&&(Pe=Ce,Ce=Pe.pop()),Ce=pe.symbols_[Ce]||Ce),Ce}o(ut,"lex");for(var Et,ft,yt,nt,dn,Tt,On={},tn,_r,Dr,Pn;;){if(yt=ve[ve.length-1],this.defaultActions[yt]?nt=this.defaultActions[yt]:((Et===null||typeof Et>"u")&&(Et=ut()),nt=Ve[yt]&&Ve[yt][Et]),typeof nt>"u"||!nt.length||!nt[0]){var At="";Pn=[];for(tn in Ve[yt])this.terminals_[tn]&&tn>st&&Pn.push("'"+this.terminals_[tn]+"'");We.showPosition?At="Parse error on line "+(qe+1)+`: +`,"getStyles"),wfe=GVe});var VVe,UVe,Efe,Sfe=N(()=>{"use strict";fr();Gt();yt();Vl();xi();er();VVe=o(t=>{let e=[...t.entries()].map(n=>({label:n[0],value:n[1]})).sort((n,i)=>i.value-n.value);return q5().value(n=>n.value)(e)},"createPieArcs"),UVe=o((t,e,r,n)=>{X.debug(`rendering pie chart +`+t);let i=n.db,a=me(),s=$n(i.getConfig(),a.pie),l=40,u=18,h=4,f=450,d=f,p=Li(e),m=p.append("g");m.attr("transform","translate("+d/2+","+f/2+")");let{themeVariables:g}=a,[y]=zo(g.pieOuterStrokeWidth);y??=2;let v=s.textPosition,x=Math.min(d,f)/2-l,b=Sl().innerRadius(0).outerRadius(x),T=Sl().innerRadius(x*v).outerRadius(x*v);m.append("circle").attr("cx",0).attr("cy",0).attr("r",x+y/2).attr("class","pieOuterCircle");let S=i.getSections(),w=VVe(S),E=[g.pie1,g.pie2,g.pie3,g.pie4,g.pie5,g.pie6,g.pie7,g.pie8,g.pie9,g.pie10,g.pie11,g.pie12],_=Js(E);m.selectAll("mySlices").data(w).enter().append("path").attr("d",b).attr("fill",k=>_(k.data.label)).attr("class","pieCircle");let C=0;S.forEach(k=>{C+=k}),m.selectAll("mySlices").data(w).enter().append("text").text(k=>(k.data.value/C*100).toFixed(0)+"%").attr("transform",k=>"translate("+T.centroid(k)+")").style("text-anchor","middle").attr("class","slice"),m.append("text").text(i.getDiagramTitle()).attr("x",0).attr("y",-(f-50)/2).attr("class","pieTitleText");let D=m.selectAll(".legend").data(_.domain()).enter().append("g").attr("class","legend").attr("transform",(k,L)=>{let A=u+h,I=A*_.domain().length/2,M=12*u,P=L*A-I;return"translate("+M+","+P+")"});D.append("rect").attr("width",u).attr("height",u).style("fill",_).style("stroke",_),D.data(w).append("text").attr("x",u+h).attr("y",u-h).text(k=>{let{label:L,value:A}=k.data;return i.getShowData()?`${L} [${A}]`:L});let O=Math.max(...D.selectAll("text").nodes().map(k=>k?.getBoundingClientRect().width??0)),R=d+l+u+h+O;p.attr("viewBox",`0 0 ${R} ${f}`),fn(p,f,R,s.useMaxWidth)},"draw"),Efe={draw:UVe}});var Cfe={};ur(Cfe,{diagram:()=>HVe});var HVe,Afe=N(()=>{"use strict";Tfe();QO();kfe();Sfe();HVe={parser:bfe,db:OS,renderer:Efe,styles:wfe}});var ZO,Lfe,Rfe=N(()=>{"use strict";ZO=function(){var t=o(function(Te,W,pe,ve){for(pe=pe||{},ve=Te.length;ve--;pe[Te[ve]]=W);return pe},"o"),e=[1,3],r=[1,4],n=[1,5],i=[1,6],a=[1,7],s=[1,4,5,10,12,13,14,18,25,35,37,39,41,42,48,50,51,52,53,54,55,56,57,60,61,63,64,65,66,67],l=[1,4,5,10,12,13,14,18,25,28,35,37,39,41,42,48,50,51,52,53,54,55,56,57,60,61,63,64,65,66,67],u=[55,56,57],h=[2,36],f=[1,37],d=[1,36],p=[1,38],m=[1,35],g=[1,43],y=[1,41],v=[1,14],x=[1,23],b=[1,18],T=[1,19],S=[1,20],w=[1,21],E=[1,22],_=[1,24],C=[1,25],D=[1,26],O=[1,27],R=[1,28],k=[1,29],L=[1,32],A=[1,33],I=[1,34],M=[1,39],P=[1,40],B=[1,42],F=[1,44],z=[1,62],$=[1,61],U=[4,5,8,10,12,13,14,18,44,47,49,55,56,57,63,64,65,66,67],K=[1,65],ee=[1,66],Y=[1,67],ce=[1,68],Z=[1,69],ue=[1,70],Q=[1,71],j=[1,72],ne=[1,73],te=[1,74],he=[1,75],le=[1,76],J=[4,5,6,7,8,9,10,11,12,13,14,15,18],Se=[1,90],se=[1,91],ae=[1,92],Oe=[1,99],ye=[1,93],Be=[1,96],He=[1,94],ze=[1,95],Le=[1,97],Ie=[1,98],xe=[1,102],q=[10,55,56,57],de=[4,5,6,8,10,11,13,17,18,19,20,55,56,57],ie={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,idStringToken:3,ALPHA:4,NUM:5,NODE_STRING:6,DOWN:7,MINUS:8,DEFAULT:9,COMMA:10,COLON:11,AMP:12,BRKT:13,MULT:14,UNICODE_TEXT:15,styleComponent:16,UNIT:17,SPACE:18,STYLE:19,PCT:20,idString:21,style:22,stylesOpt:23,classDefStatement:24,CLASSDEF:25,start:26,eol:27,QUADRANT:28,document:29,line:30,statement:31,axisDetails:32,quadrantDetails:33,points:34,title:35,title_value:36,acc_title:37,acc_title_value:38,acc_descr:39,acc_descr_value:40,acc_descr_multiline_value:41,section:42,text:43,point_start:44,point_x:45,point_y:46,class_name:47,"X-AXIS":48,"AXIS-TEXT-DELIMITER":49,"Y-AXIS":50,QUADRANT_1:51,QUADRANT_2:52,QUADRANT_3:53,QUADRANT_4:54,NEWLINE:55,SEMI:56,EOF:57,alphaNumToken:58,textNoTagsToken:59,STR:60,MD_STR:61,alphaNum:62,PUNCTUATION:63,PLUS:64,EQUALS:65,DOT:66,UNDERSCORE:67,$accept:0,$end:1},terminals_:{2:"error",4:"ALPHA",5:"NUM",6:"NODE_STRING",7:"DOWN",8:"MINUS",9:"DEFAULT",10:"COMMA",11:"COLON",12:"AMP",13:"BRKT",14:"MULT",15:"UNICODE_TEXT",17:"UNIT",18:"SPACE",19:"STYLE",20:"PCT",25:"CLASSDEF",28:"QUADRANT",35:"title",36:"title_value",37:"acc_title",38:"acc_title_value",39:"acc_descr",40:"acc_descr_value",41:"acc_descr_multiline_value",42:"section",44:"point_start",45:"point_x",46:"point_y",47:"class_name",48:"X-AXIS",49:"AXIS-TEXT-DELIMITER",50:"Y-AXIS",51:"QUADRANT_1",52:"QUADRANT_2",53:"QUADRANT_3",54:"QUADRANT_4",55:"NEWLINE",56:"SEMI",57:"EOF",60:"STR",61:"MD_STR",63:"PUNCTUATION",64:"PLUS",65:"EQUALS",66:"DOT",67:"UNDERSCORE"},productions_:[0,[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[21,1],[21,2],[22,1],[22,2],[23,1],[23,3],[24,5],[26,2],[26,2],[26,2],[29,0],[29,2],[30,2],[31,0],[31,1],[31,2],[31,1],[31,1],[31,1],[31,2],[31,2],[31,2],[31,1],[31,1],[34,4],[34,5],[34,5],[34,6],[32,4],[32,3],[32,2],[32,4],[32,3],[32,2],[33,2],[33,2],[33,2],[33,2],[27,1],[27,1],[27,1],[43,1],[43,2],[43,1],[43,1],[62,1],[62,2],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[59,1],[59,1],[59,1]],performAction:o(function(W,pe,ve,Pe,_e,be,Ve){var De=be.length-1;switch(_e){case 23:this.$=be[De];break;case 24:this.$=be[De-1]+""+be[De];break;case 26:this.$=be[De-1]+be[De];break;case 27:this.$=[be[De].trim()];break;case 28:be[De-2].push(be[De].trim()),this.$=be[De-2];break;case 29:this.$=be[De-4],Pe.addClass(be[De-2],be[De]);break;case 37:this.$=[];break;case 42:this.$=be[De].trim(),Pe.setDiagramTitle(this.$);break;case 43:this.$=be[De].trim(),Pe.setAccTitle(this.$);break;case 44:case 45:this.$=be[De].trim(),Pe.setAccDescription(this.$);break;case 46:Pe.addSection(be[De].substr(8)),this.$=be[De].substr(8);break;case 47:Pe.addPoint(be[De-3],"",be[De-1],be[De],[]);break;case 48:Pe.addPoint(be[De-4],be[De-3],be[De-1],be[De],[]);break;case 49:Pe.addPoint(be[De-4],"",be[De-2],be[De-1],be[De]);break;case 50:Pe.addPoint(be[De-5],be[De-4],be[De-2],be[De-1],be[De]);break;case 51:Pe.setXAxisLeftText(be[De-2]),Pe.setXAxisRightText(be[De]);break;case 52:be[De-1].text+=" \u27F6 ",Pe.setXAxisLeftText(be[De-1]);break;case 53:Pe.setXAxisLeftText(be[De]);break;case 54:Pe.setYAxisBottomText(be[De-2]),Pe.setYAxisTopText(be[De]);break;case 55:be[De-1].text+=" \u27F6 ",Pe.setYAxisBottomText(be[De-1]);break;case 56:Pe.setYAxisBottomText(be[De]);break;case 57:Pe.setQuadrant1Text(be[De]);break;case 58:Pe.setQuadrant2Text(be[De]);break;case 59:Pe.setQuadrant3Text(be[De]);break;case 60:Pe.setQuadrant4Text(be[De]);break;case 64:this.$={text:be[De],type:"text"};break;case 65:this.$={text:be[De-1].text+""+be[De],type:be[De-1].type};break;case 66:this.$={text:be[De],type:"text"};break;case 67:this.$={text:be[De],type:"markdown"};break;case 68:this.$=be[De];break;case 69:this.$=be[De-1]+""+be[De];break}},"anonymous"),table:[{18:e,26:1,27:2,28:r,55:n,56:i,57:a},{1:[3]},{18:e,26:8,27:2,28:r,55:n,56:i,57:a},{18:e,26:9,27:2,28:r,55:n,56:i,57:a},t(s,[2,33],{29:10}),t(l,[2,61]),t(l,[2,62]),t(l,[2,63]),{1:[2,30]},{1:[2,31]},t(u,h,{30:11,31:12,24:13,32:15,33:16,34:17,43:30,58:31,1:[2,32],4:f,5:d,10:p,12:m,13:g,14:y,18:v,25:x,35:b,37:T,39:S,41:w,42:E,48:_,50:C,51:D,52:O,53:R,54:k,60:L,61:A,63:I,64:M,65:P,66:B,67:F}),t(s,[2,34]),{27:45,55:n,56:i,57:a},t(u,[2,37]),t(u,h,{24:13,32:15,33:16,34:17,43:30,58:31,31:46,4:f,5:d,10:p,12:m,13:g,14:y,18:v,25:x,35:b,37:T,39:S,41:w,42:E,48:_,50:C,51:D,52:O,53:R,54:k,60:L,61:A,63:I,64:M,65:P,66:B,67:F}),t(u,[2,39]),t(u,[2,40]),t(u,[2,41]),{36:[1,47]},{38:[1,48]},{40:[1,49]},t(u,[2,45]),t(u,[2,46]),{18:[1,50]},{4:f,5:d,10:p,12:m,13:g,14:y,43:51,58:31,60:L,61:A,63:I,64:M,65:P,66:B,67:F},{4:f,5:d,10:p,12:m,13:g,14:y,43:52,58:31,60:L,61:A,63:I,64:M,65:P,66:B,67:F},{4:f,5:d,10:p,12:m,13:g,14:y,43:53,58:31,60:L,61:A,63:I,64:M,65:P,66:B,67:F},{4:f,5:d,10:p,12:m,13:g,14:y,43:54,58:31,60:L,61:A,63:I,64:M,65:P,66:B,67:F},{4:f,5:d,10:p,12:m,13:g,14:y,43:55,58:31,60:L,61:A,63:I,64:M,65:P,66:B,67:F},{4:f,5:d,10:p,12:m,13:g,14:y,43:56,58:31,60:L,61:A,63:I,64:M,65:P,66:B,67:F},{4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,44:[1,57],47:[1,58],58:60,59:59,63:I,64:M,65:P,66:B,67:F},t(U,[2,64]),t(U,[2,66]),t(U,[2,67]),t(U,[2,70]),t(U,[2,71]),t(U,[2,72]),t(U,[2,73]),t(U,[2,74]),t(U,[2,75]),t(U,[2,76]),t(U,[2,77]),t(U,[2,78]),t(U,[2,79]),t(U,[2,80]),t(s,[2,35]),t(u,[2,38]),t(u,[2,42]),t(u,[2,43]),t(u,[2,44]),{3:64,4:K,5:ee,6:Y,7:ce,8:Z,9:ue,10:Q,11:j,12:ne,13:te,14:he,15:le,21:63},t(u,[2,53],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,49:[1,77],63:I,64:M,65:P,66:B,67:F}),t(u,[2,56],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,49:[1,78],63:I,64:M,65:P,66:B,67:F}),t(u,[2,57],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,63:I,64:M,65:P,66:B,67:F}),t(u,[2,58],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,63:I,64:M,65:P,66:B,67:F}),t(u,[2,59],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,63:I,64:M,65:P,66:B,67:F}),t(u,[2,60],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,63:I,64:M,65:P,66:B,67:F}),{45:[1,79]},{44:[1,80]},t(U,[2,65]),t(U,[2,81]),t(U,[2,82]),t(U,[2,83]),{3:82,4:K,5:ee,6:Y,7:ce,8:Z,9:ue,10:Q,11:j,12:ne,13:te,14:he,15:le,18:[1,81]},t(J,[2,23]),t(J,[2,1]),t(J,[2,2]),t(J,[2,3]),t(J,[2,4]),t(J,[2,5]),t(J,[2,6]),t(J,[2,7]),t(J,[2,8]),t(J,[2,9]),t(J,[2,10]),t(J,[2,11]),t(J,[2,12]),t(u,[2,52],{58:31,43:83,4:f,5:d,10:p,12:m,13:g,14:y,60:L,61:A,63:I,64:M,65:P,66:B,67:F}),t(u,[2,55],{58:31,43:84,4:f,5:d,10:p,12:m,13:g,14:y,60:L,61:A,63:I,64:M,65:P,66:B,67:F}),{46:[1,85]},{45:[1,86]},{4:Se,5:se,6:ae,8:Oe,11:ye,13:Be,16:89,17:He,18:ze,19:Le,20:Ie,22:88,23:87},t(J,[2,24]),t(u,[2,51],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,63:I,64:M,65:P,66:B,67:F}),t(u,[2,54],{59:59,58:60,4:f,5:d,8:z,10:p,12:m,13:g,14:y,18:$,63:I,64:M,65:P,66:B,67:F}),t(u,[2,47],{22:88,16:89,23:100,4:Se,5:se,6:ae,8:Oe,11:ye,13:Be,17:He,18:ze,19:Le,20:Ie}),{46:[1,101]},t(u,[2,29],{10:xe}),t(q,[2,27],{16:103,4:Se,5:se,6:ae,8:Oe,11:ye,13:Be,17:He,18:ze,19:Le,20:Ie}),t(de,[2,25]),t(de,[2,13]),t(de,[2,14]),t(de,[2,15]),t(de,[2,16]),t(de,[2,17]),t(de,[2,18]),t(de,[2,19]),t(de,[2,20]),t(de,[2,21]),t(de,[2,22]),t(u,[2,49],{10:xe}),t(u,[2,48],{22:88,16:89,23:104,4:Se,5:se,6:ae,8:Oe,11:ye,13:Be,17:He,18:ze,19:Le,20:Ie}),{4:Se,5:se,6:ae,8:Oe,11:ye,13:Be,16:89,17:He,18:ze,19:Le,20:Ie,22:105},t(de,[2,26]),t(u,[2,50],{10:xe}),t(q,[2,28],{16:103,4:Se,5:se,6:ae,8:Oe,11:ye,13:Be,17:He,18:ze,19:Le,20:Ie})],defaultActions:{8:[2,30],9:[2,31]},parseError:o(function(W,pe){if(pe.recoverable)this.trace(W);else{var ve=new Error(W);throw ve.hash=pe,ve}},"parseError"),parse:o(function(W){var pe=this,ve=[0],Pe=[],_e=[null],be=[],Ve=this.table,De="",qe=0,at=0,Rt=0,st=2,Ue=1,ct=be.slice.call(arguments,1),We=Object.create(this.lexer),ot={yy:{}};for(var Yt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Yt)&&(ot.yy[Yt]=this.yy[Yt]);We.setInput(W,ot.yy),ot.yy.lexer=We,ot.yy.parser=this,typeof We.yylloc>"u"&&(We.yylloc={});var Tt=We.yylloc;be.push(Tt);var Mt=We.options&&We.options.ranges;typeof ot.yy.parseError=="function"?this.parseError=ot.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function bt(Ce){ve.length=ve.length-2*Ce,_e.length=_e.length-Ce,be.length=be.length-Ce}o(bt,"popStack");function ut(){var Ce;return Ce=Pe.pop()||We.lex()||Ue,typeof Ce!="number"&&(Ce instanceof Array&&(Pe=Ce,Ce=Pe.pop()),Ce=pe.symbols_[Ce]||Ce),Ce}o(ut,"lex");for(var St,ft,vt,nt,pn,kt,On={},tn,Mr,Ir,Pn;;){if(vt=ve[ve.length-1],this.defaultActions[vt]?nt=this.defaultActions[vt]:((St===null||typeof St>"u")&&(St=ut()),nt=Ve[vt]&&Ve[vt][St]),typeof nt>"u"||!nt.length||!nt[0]){var Dt="";Pn=[];for(tn in Ve[vt])this.terminals_[tn]&&tn>st&&Pn.push("'"+this.terminals_[tn]+"'");We.showPosition?Dt="Parse error on line "+(qe+1)+`: `+We.showPosition()+` -Expecting `+Pn.join(", ")+", got '"+(this.terminals_[Et]||Et)+"'":At="Parse error on line "+(qe+1)+": Unexpected "+(Et==Ue?"end of input":"'"+(this.terminals_[Et]||Et)+"'"),this.parseError(At,{text:We.match,token:this.terminals_[Et]||Et,line:We.yylineno,loc:bt,expected:Pn})}if(nt[0]instanceof Array&&nt.length>1)throw new Error("Parse Error: multiple actions possible at state: "+yt+", token: "+Et);switch(nt[0]){case 1:ve.push(Et),_e.push(We.yytext),be.push(We.yylloc),ve.push(nt[1]),Et=null,ft?(Et=ft,ft=null):(at=We.yyleng,De=We.yytext,qe=We.yylineno,bt=We.yylloc,Lt>0&&Lt--);break;case 2:if(_r=this.productions_[nt[1]][1],On.$=_e[_e.length-_r],On._$={first_line:be[be.length-(_r||1)].first_line,last_line:be[be.length-1].last_line,first_column:be[be.length-(_r||1)].first_column,last_column:be[be.length-1].last_column},Mt&&(On._$.range=[be[be.length-(_r||1)].range[0],be[be.length-1].range[1]]),Tt=this.performAction.apply(On,[De,at,qe,ot.yy,nt[1],_e,be].concat(ct)),typeof Tt<"u")return Tt;_r&&(ve=ve.slice(0,-1*_r*2),_e=_e.slice(0,-1*_r),be=be.slice(0,-1*_r)),ve.push(this.productions_[nt[1]][0]),_e.push(On.$),be.push(On._$),Dr=Ve[ve[ve.length-2]][ve[ve.length-1]],ve.push(Dr);break;case 3:return!0}}return!0},"parse")},oe=function(){var we={EOF:1,parseError:o(function(pe,ve){if(this.yy.parser)this.yy.parser.parseError(pe,ve);else throw new Error(pe)},"parseError"),setInput:o(function(W,pe){return this.yy=pe||this.yy||{},this._input=W,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},"setInput"),input:o(function(){var W=this._input[0];this.yytext+=W,this.yyleng++,this.offset++,this.match+=W,this.matched+=W;var pe=W.match(/(?:\r\n?|\n).*/g);return pe?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),W},"input"),unput:o(function(W){var pe=W.length,ve=W.split(/(?:\r\n?|\n)/g);this._input=W+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-pe),this.offset-=pe;var Pe=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 _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:ve?(ve.length===Pe.length?this.yylloc.first_column:0)+Pe[Pe.length-ve.length].length-ve[0].length:this.yylloc.first_column-pe},this.options.ranges&&(this.yylloc.range=[_e[0],_e[0]+this.yyleng-pe]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(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). +Expecting `+Pn.join(", ")+", got '"+(this.terminals_[St]||St)+"'":Dt="Parse error on line "+(qe+1)+": Unexpected "+(St==Ue?"end of input":"'"+(this.terminals_[St]||St)+"'"),this.parseError(Dt,{text:We.match,token:this.terminals_[St]||St,line:We.yylineno,loc:Tt,expected:Pn})}if(nt[0]instanceof Array&&nt.length>1)throw new Error("Parse Error: multiple actions possible at state: "+vt+", token: "+St);switch(nt[0]){case 1:ve.push(St),_e.push(We.yytext),be.push(We.yylloc),ve.push(nt[1]),St=null,ft?(St=ft,ft=null):(at=We.yyleng,De=We.yytext,qe=We.yylineno,Tt=We.yylloc,Rt>0&&Rt--);break;case 2:if(Mr=this.productions_[nt[1]][1],On.$=_e[_e.length-Mr],On._$={first_line:be[be.length-(Mr||1)].first_line,last_line:be[be.length-1].last_line,first_column:be[be.length-(Mr||1)].first_column,last_column:be[be.length-1].last_column},Mt&&(On._$.range=[be[be.length-(Mr||1)].range[0],be[be.length-1].range[1]]),kt=this.performAction.apply(On,[De,at,qe,ot.yy,nt[1],_e,be].concat(ct)),typeof kt<"u")return kt;Mr&&(ve=ve.slice(0,-1*Mr*2),_e=_e.slice(0,-1*Mr),be=be.slice(0,-1*Mr)),ve.push(this.productions_[nt[1]][0]),_e.push(On.$),be.push(On._$),Ir=Ve[ve[ve.length-2]][ve[ve.length-1]],ve.push(Ir);break;case 3:return!0}}return!0},"parse")},oe=function(){var Te={EOF:1,parseError:o(function(pe,ve){if(this.yy.parser)this.yy.parser.parseError(pe,ve);else throw new Error(pe)},"parseError"),setInput:o(function(W,pe){return this.yy=pe||this.yy||{},this._input=W,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},"setInput"),input:o(function(){var W=this._input[0];this.yytext+=W,this.yyleng++,this.offset++,this.match+=W,this.matched+=W;var pe=W.match(/(?:\r\n?|\n).*/g);return pe?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),W},"input"),unput:o(function(W){var pe=W.length,ve=W.split(/(?:\r\n?|\n)/g);this._input=W+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-pe),this.offset-=pe;var Pe=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 _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:ve?(ve.length===Pe.length?this.yylloc.first_column:0)+Pe[Pe.length-ve.length].length-ve[0].length:this.yylloc.first_column-pe},this.options.ranges&&(this.yylloc.range=[_e[0],_e[0]+this.yyleng-pe]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(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},"reject"),less:o(function(W){this.unput(this.match.slice(W))},"less"),pastInput:o(function(){var W=this.matched.substr(0,this.matched.length-this.match.length);return(W.length>20?"...":"")+W.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var W=this.match;return W.length<20&&(W+=this._input.substr(0,20-W.length)),(W.substr(0,20)+(W.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var W=this.pastInput(),pe=new Array(W.length+1).join("-");return W+this.upcomingInput()+` `+pe+"^"},"showPosition"),test_match:o(function(W,pe){var ve,Pe,_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))),Pe=W[0].match(/(?:\r\n?|\n).*/g),Pe&&(this.yylineno+=Pe.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Pe?Pe[Pe.length-1].length-Pe[Pe.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+W[0].length},this.yytext+=W[0],this.match+=W[0],this.matches=W,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(W[0].length),this.matched+=W[0],ve=this.performAction.call(this,this.yy,this,pe,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),ve)return ve;if(this._backtrack){for(var be in _e)this[be]=_e[be];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var W,pe,ve,Pe;this._more||(this.yytext="",this.match="");for(var _e=this._currentRules(),be=0;be<_e.length;be++)if(ve=this._input.match(this.rules[_e[be]]),ve&&(!pe||ve[0].length>pe[0].length)){if(pe=ve,Pe=be,this.options.backtrack_lexer){if(W=this.test_match(ve,_e[be]),W!==!1)return W;if(this._backtrack){pe=!1;continue}else return!1}else if(!this.options.flex)break}return pe?(W=this.test_match(pe,_e[Pe]),W!==!1?W:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var pe=this.next();return pe||this.lex()},"lex"),begin:o(function(pe){this.conditionStack.push(pe)},"begin"),popState:o(function(){var pe=this.conditionStack.length-1;return pe>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(pe){return pe=this.conditionStack.length-1-Math.abs(pe||0),pe>=0?this.conditionStack[pe]:"INITIAL"},"topState"),pushState:o(function(pe){this.begin(pe)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(pe,ve,Pe,_e){var be=_e;switch(Pe){case 0:break;case 1:break;case 2:return 55;case 3:break;case 4:return this.begin("title"),35;break;case 5:return this.popState(),"title_value";break;case 6:return this.begin("acc_title"),37;break;case 7:return this.popState(),"acc_title_value";break;case 8:return this.begin("acc_descr"),39;break;case 9:return this.popState(),"acc_descr_value";break;case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 48;case 14:return 50;case 15:return 49;case 16:return 51;case 17:return 52;case 18:return 53;case 19:return 54;case 20:return 25;case 21:this.begin("md_string");break;case 22:return"MD_STR";case 23:this.popState();break;case 24:this.begin("string");break;case 25:this.popState();break;case 26:return"STR";case 27:this.begin("class_name");break;case 28:return this.popState(),47;break;case 29:return this.begin("point_start"),44;break;case 30:return this.begin("point_x"),45;break;case 31:this.popState();break;case 32:this.popState(),this.begin("point_y");break;case 33:return this.popState(),46;break;case 34:return 28;case 35:return 4;case 36:return 11;case 37:return 64;case 38:return 10;case 39:return 65;case 40:return 65;case 41:return 14;case 42:return 13;case 43:return 67;case 44:return 66;case 45:return 12;case 46:return 8;case 47:return 5;case 48:return 18;case 49:return 56;case 50:return 63;case 51:return 57}},"anonymous"),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,/^(?:classDef\b)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?::::)/i,/^(?:^\w+)/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:{class_name:{rules:[28],inclusive:!1},point_y:{rules:[33],inclusive:!1},point_x:{rules:[32],inclusive:!1},point_start:{rules:[30,31],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:[22,23],inclusive:!1},string:{rules:[25,26],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,6,8,10,13,14,15,16,17,18,19,20,21,24,27,29,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51],inclusive:!0}}};return we}();ie.lexer=oe;function V(){this.yy={}}return o(V,"Parser"),V.prototype=ie,ie.Parser=V,new V}();gO.parser=gO;phe=gO});var ms,kS,ghe=N(()=>{"use strict";pr();Ya();vt();Py();ms=hh(),kS=class{constructor(){this.classes=new Map;this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData()}static{o(this,"QuadrantBuilder")}getDefaultData(){return{titleText:"",quadrant1Text:"",quadrant2Text:"",quadrant3Text:"",quadrant4Text:"",xAxisLeftText:"",xAxisRightText:"",yAxisBottomText:"",yAxisTopText:"",points:[]}}getDefaultConfig(){return{showXAxis:!0,showYAxis:!0,showTitle:!0,chartHeight:lr.quadrantChart?.chartWidth||500,chartWidth:lr.quadrantChart?.chartHeight||500,titlePadding:lr.quadrantChart?.titlePadding||10,titleFontSize:lr.quadrantChart?.titleFontSize||20,quadrantPadding:lr.quadrantChart?.quadrantPadding||5,xAxisLabelPadding:lr.quadrantChart?.xAxisLabelPadding||5,yAxisLabelPadding:lr.quadrantChart?.yAxisLabelPadding||5,xAxisLabelFontSize:lr.quadrantChart?.xAxisLabelFontSize||16,yAxisLabelFontSize:lr.quadrantChart?.yAxisLabelFontSize||16,quadrantLabelFontSize:lr.quadrantChart?.quadrantLabelFontSize||16,quadrantTextTopPadding:lr.quadrantChart?.quadrantTextTopPadding||5,pointTextPadding:lr.quadrantChart?.pointTextPadding||5,pointLabelFontSize:lr.quadrantChart?.pointLabelFontSize||12,pointRadius:lr.quadrantChart?.pointRadius||5,xAxisPosition:lr.quadrantChart?.xAxisPosition||"top",yAxisPosition:lr.quadrantChart?.yAxisPosition||"left",quadrantInternalBorderStrokeWidth:lr.quadrantChart?.quadrantInternalBorderStrokeWidth||1,quadrantExternalBorderStrokeWidth:lr.quadrantChart?.quadrantExternalBorderStrokeWidth||2}}getDefaultThemeConfig(){return{quadrant1Fill:ms.quadrant1Fill,quadrant2Fill:ms.quadrant2Fill,quadrant3Fill:ms.quadrant3Fill,quadrant4Fill:ms.quadrant4Fill,quadrant1TextFill:ms.quadrant1TextFill,quadrant2TextFill:ms.quadrant2TextFill,quadrant3TextFill:ms.quadrant3TextFill,quadrant4TextFill:ms.quadrant4TextFill,quadrantPointFill:ms.quadrantPointFill,quadrantPointTextFill:ms.quadrantPointTextFill,quadrantXAxisTextFill:ms.quadrantXAxisTextFill,quadrantYAxisTextFill:ms.quadrantYAxisTextFill,quadrantTitleFill:ms.quadrantTitleFill,quadrantInternalBorderStrokeFill:ms.quadrantInternalBorderStrokeFill,quadrantExternalBorderStrokeFill:ms.quadrantExternalBorderStrokeFill}}clear(){this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData(),this.classes=new Map,X.info("clear called")}setData(e){this.data={...this.data,...e}}addPoints(e){this.data.points=[...e,...this.data.points]}addClass(e,r){this.classes.set(e,r)}setConfig(e){X.trace("setConfig called with: ",e),this.config={...this.config,...e}}setThemeConfig(e){X.trace("setThemeConfig called with: ",e),this.themeConfig={...this.themeConfig,...e}}calculateSpace(e,r,n,i){let a=this.config.xAxisLabelPadding*2+this.config.xAxisLabelFontSize,s={top:e==="top"&&r?a:0,bottom:e==="bottom"&&r?a:0},l=this.config.yAxisLabelPadding*2+this.config.yAxisLabelFontSize,u={left:this.config.yAxisPosition==="left"&&n?l:0,right:this.config.yAxisPosition==="right"&&n?l:0},h=this.config.titleFontSize+this.config.titlePadding*2,f={top:i?h:0},d=this.config.quadrantPadding+u.left,p=this.config.quadrantPadding+s.top+f.top,m=this.config.chartWidth-this.config.quadrantPadding*2-u.left-u.right,g=this.config.chartHeight-this.config.quadrantPadding*2-s.top-s.bottom-f.top,y=m/2,v=g/2;return{xAxisSpace:s,yAxisSpace:u,titleSpace:f,quadrantSpace:{quadrantLeft:d,quadrantTop:p,quadrantWidth:m,quadrantHalfWidth:y,quadrantHeight:g,quadrantHalfHeight:v}}}getAxisLabels(e,r,n,i){let{quadrantSpace:a,titleSpace:s}=i,{quadrantHalfHeight:l,quadrantHeight:u,quadrantLeft:h,quadrantHalfWidth:f,quadrantTop:d,quadrantWidth:p}=a,m=!!this.data.xAxisRightText,g=!!this.data.yAxisTopText,y=[];return this.data.xAxisLeftText&&r&&y.push({text:this.data.xAxisLeftText,fill:this.themeConfig.quadrantXAxisTextFill,x:h+(m?f/2:0),y:e==="top"?this.config.xAxisLabelPadding+s.top:this.config.xAxisLabelPadding+d+u+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:m?"center":"left",horizontalPos:"top",rotation:0}),this.data.xAxisRightText&&r&&y.push({text:this.data.xAxisRightText,fill:this.themeConfig.quadrantXAxisTextFill,x:h+f+(m?f/2:0),y:e==="top"?this.config.xAxisLabelPadding+s.top:this.config.xAxisLabelPadding+d+u+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:m?"center":"left",horizontalPos:"top",rotation:0}),this.data.yAxisBottomText&&n&&y.push({text:this.data.yAxisBottomText,fill:this.themeConfig.quadrantYAxisTextFill,x:this.config.yAxisPosition==="left"?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+h+p+this.config.quadrantPadding,y:d+u-(g?l/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:g?"center":"left",horizontalPos:"top",rotation:-90}),this.data.yAxisTopText&&n&&y.push({text:this.data.yAxisTopText,fill:this.themeConfig.quadrantYAxisTextFill,x:this.config.yAxisPosition==="left"?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+h+p+this.config.quadrantPadding,y:d+l-(g?l/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:g?"center":"left",horizontalPos:"top",rotation:-90}),y}getQuadrants(e){let{quadrantSpace:r}=e,{quadrantHalfHeight:n,quadrantLeft:i,quadrantHalfWidth:a,quadrantTop:s}=r,l=[{text:{text:this.data.quadrant1Text,fill:this.themeConfig.quadrant1TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:i+a,y:s,width:a,height:n,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:i,y:s,width:a,height:n,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:i,y:s+n,width:a,height:n,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:i+a,y:s+n,width:a,height:n,fill:this.themeConfig.quadrant4Fill}];for(let u of l)u.text.x=u.x+u.width/2,this.data.points.length===0?(u.text.y=u.y+u.height/2,u.text.horizontalPos="middle"):(u.text.y=u.y+this.config.quadrantTextTopPadding,u.text.horizontalPos="top");return l}getQuadrantPoints(e){let{quadrantSpace:r}=e,{quadrantHeight:n,quadrantLeft:i,quadrantTop:a,quadrantWidth:s}=r,l=vl().domain([0,1]).range([i,s+i]),u=vl().domain([0,1]).range([n+a,a]);return this.data.points.map(f=>{let d=this.classes.get(f.className);return d&&(f={...d,...f}),{x:l(f.x),y:u(f.y),fill:f.color??this.themeConfig.quadrantPointFill,radius:f.radius??this.config.pointRadius,text:{text:f.text,fill:this.themeConfig.quadrantPointTextFill,x:l(f.x),y:u(f.y)+this.config.pointTextPadding,verticalPos:"center",horizontalPos:"top",fontSize:this.config.pointLabelFontSize,rotation:0},strokeColor:f.strokeColor??this.themeConfig.quadrantPointFill,strokeWidth:f.strokeWidth??"0px"}})}getBorders(e){let r=this.config.quadrantExternalBorderStrokeWidth/2,{quadrantSpace:n}=e,{quadrantHalfHeight:i,quadrantHeight:a,quadrantLeft:s,quadrantHalfWidth:l,quadrantTop:u,quadrantWidth:h}=n;return[{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s-r,y1:u,x2:s+h+r,y2:u},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s+h,y1:u+r,x2:s+h,y2:u+a-r},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s-r,y1:u+a,x2:s+h+r,y2:u+a},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s,y1:u+r,x2:s,y2:u+a-r},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:s+l,y1:u+r,x2:s+l,y2:u+a-r},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:s+r,y1:u+i,x2:s+h-r,y2:u+i}]}getTitle(e){if(e)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(){let e=this.config.showXAxis&&!!(this.data.xAxisLeftText||this.data.xAxisRightText),r=this.config.showYAxis&&!!(this.data.yAxisTopText||this.data.yAxisBottomText),n=this.config.showTitle&&!!this.data.titleText,i=this.data.points.length>0?"bottom":this.config.xAxisPosition,a=this.calculateSpace(i,e,r,n);return{points:this.getQuadrantPoints(a),quadrants:this.getQuadrants(a),axisLabels:this.getAxisLabels(i,e,r,a),borderLines:this.getBorders(a),title:this.getTitle(n)}}}});function yO(t){return!/^#?([\dA-Fa-f]{6}|[\dA-Fa-f]{3})$/.test(t)}function yhe(t){return!/^\d+$/.test(t)}function vhe(t){return!/^\d+px$/.test(t)}var Ip,xhe=N(()=>{"use strict";Ip=class extends Error{static{o(this,"InvalidStyleError")}constructor(e,r,n){super(`value for ${e} ${r} is invalid, please use a valid ${n}`),this.name="InvalidStyleError"}};o(yO,"validateHexCode");o(yhe,"validateNumber");o(vhe,"validateSizeInPixels")});function Zu(t){return Tr(t.trim(),cGe)}function uGe(t){ba.setData({quadrant1Text:Zu(t.text)})}function hGe(t){ba.setData({quadrant2Text:Zu(t.text)})}function fGe(t){ba.setData({quadrant3Text:Zu(t.text)})}function dGe(t){ba.setData({quadrant4Text:Zu(t.text)})}function pGe(t){ba.setData({xAxisLeftText:Zu(t.text)})}function mGe(t){ba.setData({xAxisRightText:Zu(t.text)})}function gGe(t){ba.setData({yAxisTopText:Zu(t.text)})}function yGe(t){ba.setData({yAxisBottomText:Zu(t.text)})}function vO(t){let e={};for(let r of t){let[n,i]=r.trim().split(/\s*:\s*/);if(n==="radius"){if(yhe(i))throw new Ip(n,i,"number");e.radius=parseInt(i)}else if(n==="color"){if(yO(i))throw new Ip(n,i,"hex code");e.color=i}else if(n==="stroke-color"){if(yO(i))throw new Ip(n,i,"hex code");e.strokeColor=i}else if(n==="stroke-width"){if(vhe(i))throw new Ip(n,i,"number of pixels (eg. 10px)");e.strokeWidth=i}else throw new Error(`style named ${n} is not supported.`)}return e}function vGe(t,e,r,n,i){let a=vO(i);ba.addPoints([{x:r,y:n,text:Zu(t.text),className:e,...a}])}function xGe(t,e){ba.addClass(t,vO(e))}function bGe(t){ba.setConfig({chartWidth:t})}function wGe(t){ba.setConfig({chartHeight:t})}function TGe(){let t=me(),{themeVariables:e,quadrantChart:r}=t;return r&&ba.setConfig(r),ba.setThemeConfig({quadrant1Fill:e.quadrant1Fill,quadrant2Fill:e.quadrant2Fill,quadrant3Fill:e.quadrant3Fill,quadrant4Fill:e.quadrant4Fill,quadrant1TextFill:e.quadrant1TextFill,quadrant2TextFill:e.quadrant2TextFill,quadrant3TextFill:e.quadrant3TextFill,quadrant4TextFill:e.quadrant4TextFill,quadrantPointFill:e.quadrantPointFill,quadrantPointTextFill:e.quadrantPointTextFill,quadrantXAxisTextFill:e.quadrantXAxisTextFill,quadrantYAxisTextFill:e.quadrantYAxisTextFill,quadrantExternalBorderStrokeFill:e.quadrantExternalBorderStrokeFill,quadrantInternalBorderStrokeFill:e.quadrantInternalBorderStrokeFill,quadrantTitleFill:e.quadrantTitleFill}),ba.setData({titleText:Ir()}),ba.build()}var cGe,ba,kGe,bhe,whe=N(()=>{"use strict";zt();dr();mi();ghe();xhe();cGe=me();o(Zu,"textSanitizer");ba=new kS;o(uGe,"setQuadrant1Text");o(hGe,"setQuadrant2Text");o(fGe,"setQuadrant3Text");o(dGe,"setQuadrant4Text");o(pGe,"setXAxisLeftText");o(mGe,"setXAxisRightText");o(gGe,"setYAxisTopText");o(yGe,"setYAxisBottomText");o(vO,"parseStyles");o(vGe,"addPoint");o(xGe,"addClass");o(bGe,"setWidth");o(wGe,"setHeight");o(TGe,"getQuadrantData");kGe=o(function(){ba.clear(),Ar()},"clear"),bhe={setWidth:bGe,setHeight:wGe,setQuadrant1Text:uGe,setQuadrant2Text:hGe,setQuadrant3Text:fGe,setQuadrant4Text:dGe,setXAxisLeftText:pGe,setXAxisRightText:mGe,setYAxisTopText:gGe,setYAxisBottomText:yGe,parseStyles:vO,addPoint:vGe,addClass:xGe,getQuadrantData:TGe,clear:kGe,setAccTitle:Lr,getAccTitle:Rr,setDiagramTitle:$r,getDiagramTitle:Ir,getAccDescription:Mr,setAccDescription:Nr}});var EGe,The,khe=N(()=>{"use strict";pr();zt();vt();Si();EGe=o((t,e,r,n)=>{function i(S){return S==="top"?"hanging":"middle"}o(i,"getDominantBaseLine");function a(S){return S==="left"?"start":"middle"}o(a,"getTextAnchor");function s(S){return`translate(${S.x}, ${S.y}) rotate(${S.rotation||0})`}o(s,"getTransformation");let l=me();X.debug(`Rendering quadrant chart -`+t);let u=l.securityLevel,h;u==="sandbox"&&(h=Ge("#i"+e));let d=(u==="sandbox"?Ge(h.nodes()[0].contentDocument.body):Ge("body")).select(`[id="${e}"]`),p=d.append("g").attr("class","main"),m=l.quadrantChart?.chartWidth??500,g=l.quadrantChart?.chartHeight??500;vn(d,g,m,l.quadrantChart?.useMaxWidth??!0),d.attr("viewBox","0 0 "+m+" "+g),n.db.setHeight(g),n.db.setWidth(m);let y=n.db.getQuadrantData(),v=p.append("g").attr("class","quadrants"),x=p.append("g").attr("class","border"),b=p.append("g").attr("class","data-points"),w=p.append("g").attr("class","labels"),C=p.append("g").attr("class","title");y.title&&C.append("text").attr("x",0).attr("y",0).attr("fill",y.title.fill).attr("font-size",y.title.fontSize).attr("dominant-baseline",i(y.title.horizontalPos)).attr("text-anchor",a(y.title.verticalPos)).attr("transform",s(y.title)).text(y.title.text),y.borderLines&&x.selectAll("line").data(y.borderLines).enter().append("line").attr("x1",S=>S.x1).attr("y1",S=>S.y1).attr("x2",S=>S.x2).attr("y2",S=>S.y2).style("stroke",S=>S.strokeFill).style("stroke-width",S=>S.strokeWidth);let T=v.selectAll("g.quadrant").data(y.quadrants).enter().append("g").attr("class","quadrant");T.append("rect").attr("x",S=>S.x).attr("y",S=>S.y).attr("width",S=>S.width).attr("height",S=>S.height).attr("fill",S=>S.fill),T.append("text").attr("x",0).attr("y",0).attr("fill",S=>S.text.fill).attr("font-size",S=>S.text.fontSize).attr("dominant-baseline",S=>i(S.text.horizontalPos)).attr("text-anchor",S=>a(S.text.verticalPos)).attr("transform",S=>s(S.text)).text(S=>S.text.text),w.selectAll("g.label").data(y.axisLabels).enter().append("g").attr("class","label").append("text").attr("x",0).attr("y",0).text(S=>S.text).attr("fill",S=>S.fill).attr("font-size",S=>S.fontSize).attr("dominant-baseline",S=>i(S.horizontalPos)).attr("text-anchor",S=>a(S.verticalPos)).attr("transform",S=>s(S));let A=b.selectAll("g.data-point").data(y.points).enter().append("g").attr("class","data-point");A.append("circle").attr("cx",S=>S.x).attr("cy",S=>S.y).attr("r",S=>S.radius).attr("fill",S=>S.fill).attr("stroke",S=>S.strokeColor).attr("stroke-width",S=>S.strokeWidth),A.append("text").attr("x",0).attr("y",0).text(S=>S.text.text).attr("fill",S=>S.text.fill).attr("font-size",S=>S.text.fontSize).attr("dominant-baseline",S=>i(S.text.horizontalPos)).attr("text-anchor",S=>a(S.text.verticalPos)).attr("transform",S=>s(S.text))},"draw"),The={draw:EGe}});var Ehe={};hr(Ehe,{diagram:()=>SGe});var SGe,She=N(()=>{"use strict";mhe();whe();khe();SGe={parser:phe,db:bhe,renderer:The,styles:o(()=>"","styles")}});var xO,_he,Dhe=N(()=>{"use strict";xO=function(){var t=o(function(O,M,P,B){for(P=P||{},B=O.length;B--;P[O[B]]=M);return P},"o"),e=[1,10,12,14,16,18,19,21,23],r=[2,6],n=[1,3],i=[1,5],a=[1,6],s=[1,7],l=[1,5,10,12,14,16,18,19,21,23,34,35,36],u=[1,25],h=[1,26],f=[1,28],d=[1,29],p=[1,30],m=[1,31],g=[1,32],y=[1,33],v=[1,34],x=[1,35],b=[1,36],w=[1,37],C=[1,43],T=[1,42],E=[1,47],A=[1,50],S=[1,10,12,14,16,18,19,21,23,34,35,36],_=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36],I=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36,41,42,43,44,45,46,47,48,49,50],L=[1,64],k={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,eol:4,XYCHART:5,chartConfig:6,document:7,CHART_ORIENTATION:8,statement:9,title:10,text:11,X_AXIS:12,parseXAxis:13,Y_AXIS:14,parseYAxis:15,LINE:16,plotData:17,BAR:18,acc_title:19,acc_title_value:20,acc_descr:21,acc_descr_value:22,acc_descr_multiline_value:23,SQUARE_BRACES_START:24,commaSeparatedNumbers:25,SQUARE_BRACES_END:26,NUMBER_WITH_DECIMAL:27,COMMA:28,xAxisData:29,bandData:30,ARROW_DELIMITER:31,commaSeparatedTexts:32,yAxisData:33,NEWLINE:34,SEMI:35,EOF:36,alphaNum:37,STR:38,MD_STR:39,alphaNumToken:40,AMP:41,NUM:42,ALPHA:43,PLUS:44,EQUALS:45,MULT:46,DOT:47,BRKT:48,MINUS:49,UNDERSCORE:50,$accept:0,$end:1},terminals_:{2:"error",5:"XYCHART",8:"CHART_ORIENTATION",10:"title",12:"X_AXIS",14:"Y_AXIS",16:"LINE",18:"BAR",19:"acc_title",20:"acc_title_value",21:"acc_descr",22:"acc_descr_value",23:"acc_descr_multiline_value",24:"SQUARE_BRACES_START",26:"SQUARE_BRACES_END",27:"NUMBER_WITH_DECIMAL",28:"COMMA",31:"ARROW_DELIMITER",34:"NEWLINE",35:"SEMI",36:"EOF",38:"STR",39:"MD_STR",41:"AMP",42:"NUM",43:"ALPHA",44:"PLUS",45:"EQUALS",46:"MULT",47:"DOT",48:"BRKT",49:"MINUS",50:"UNDERSCORE"},productions_:[0,[3,2],[3,3],[3,2],[3,1],[6,1],[7,0],[7,2],[9,2],[9,2],[9,2],[9,2],[9,2],[9,3],[9,2],[9,3],[9,2],[9,2],[9,1],[17,3],[25,3],[25,1],[13,1],[13,2],[13,1],[29,1],[29,3],[30,3],[32,3],[32,1],[15,1],[15,2],[15,1],[33,3],[4,1],[4,1],[4,1],[11,1],[11,1],[11,1],[37,1],[37,2],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1]],performAction:o(function(M,P,B,F,z,$,U){var Q=$.length-1;switch(z){case 5:F.setOrientation($[Q]);break;case 9:F.setDiagramTitle($[Q].text.trim());break;case 12:F.setLineData({text:"",type:"text"},$[Q]);break;case 13:F.setLineData($[Q-1],$[Q]);break;case 14:F.setBarData({text:"",type:"text"},$[Q]);break;case 15:F.setBarData($[Q-1],$[Q]);break;case 16:this.$=$[Q].trim(),F.setAccTitle(this.$);break;case 17:case 18:this.$=$[Q].trim(),F.setAccDescription(this.$);break;case 19:this.$=$[Q-1];break;case 20:this.$=[Number($[Q-2]),...$[Q]];break;case 21:this.$=[Number($[Q])];break;case 22:F.setXAxisTitle($[Q]);break;case 23:F.setXAxisTitle($[Q-1]);break;case 24:F.setXAxisTitle({type:"text",text:""});break;case 25:F.setXAxisBand($[Q]);break;case 26:F.setXAxisRangeData(Number($[Q-2]),Number($[Q]));break;case 27:this.$=$[Q-1];break;case 28:this.$=[$[Q-2],...$[Q]];break;case 29:this.$=[$[Q]];break;case 30:F.setYAxisTitle($[Q]);break;case 31:F.setYAxisTitle($[Q-1]);break;case 32:F.setYAxisTitle({type:"text",text:""});break;case 33:F.setYAxisRangeData(Number($[Q-2]),Number($[Q]));break;case 37:this.$={text:$[Q],type:"text"};break;case 38:this.$={text:$[Q],type:"text"};break;case 39:this.$={text:$[Q],type:"markdown"};break;case 40:this.$=$[Q];break;case 41:this.$=$[Q-1]+""+$[Q];break}},"anonymous"),table:[t(e,r,{3:1,4:2,7:4,5:n,34:i,35:a,36:s}),{1:[3]},t(e,r,{4:2,7:4,3:8,5:n,34:i,35:a,36:s}),t(e,r,{4:2,7:4,6:9,3:10,5:n,8:[1,11],34:i,35:a,36:s}),{1:[2,4],9:12,10:[1,13],12:[1,14],14:[1,15],16:[1,16],18:[1,17],19:[1,18],21:[1,19],23:[1,20]},t(l,[2,34]),t(l,[2,35]),t(l,[2,36]),{1:[2,1]},t(e,r,{4:2,7:4,3:21,5:n,34:i,35:a,36:s}),{1:[2,3]},t(l,[2,5]),t(e,[2,7],{4:22,34:i,35:a,36:s}),{11:23,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},{11:39,13:38,24:C,27:T,29:40,30:41,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},{11:45,15:44,27:E,33:46,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},{11:49,17:48,24:A,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},{11:52,17:51,24:A,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},{20:[1,53]},{22:[1,54]},t(S,[2,18]),{1:[2,2]},t(S,[2,8]),t(S,[2,9]),t(_,[2,37],{40:55,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w}),t(_,[2,38]),t(_,[2,39]),t(I,[2,40]),t(I,[2,42]),t(I,[2,43]),t(I,[2,44]),t(I,[2,45]),t(I,[2,46]),t(I,[2,47]),t(I,[2,48]),t(I,[2,49]),t(I,[2,50]),t(I,[2,51]),t(S,[2,10]),t(S,[2,22],{30:41,29:56,24:C,27:T}),t(S,[2,24]),t(S,[2,25]),{31:[1,57]},{11:59,32:58,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},t(S,[2,11]),t(S,[2,30],{33:60,27:E}),t(S,[2,32]),{31:[1,61]},t(S,[2,12]),{17:62,24:A},{25:63,27:L},t(S,[2,14]),{17:65,24:A},t(S,[2,16]),t(S,[2,17]),t(I,[2,41]),t(S,[2,23]),{27:[1,66]},{26:[1,67]},{26:[2,29],28:[1,68]},t(S,[2,31]),{27:[1,69]},t(S,[2,13]),{26:[1,70]},{26:[2,21],28:[1,71]},t(S,[2,15]),t(S,[2,26]),t(S,[2,27]),{11:59,32:72,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:w},t(S,[2,33]),t(S,[2,19]),{25:73,27:L},{26:[2,28]},{26:[2,20]}],defaultActions:{8:[2,1],10:[2,3],21:[2,2],72:[2,28],73:[2,20]},parseError:o(function(M,P){if(P.recoverable)this.trace(M);else{var B=new Error(M);throw B.hash=P,B}},"parseError"),parse:o(function(M){var P=this,B=[0],F=[],z=[null],$=[],U=this.table,Q="",te=0,Y=0,he=0,Z=2,ue=1,K=$.slice.call(arguments,1),j=Object.create(this.lexer),ne={yy:{}};for(var ee in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ee)&&(ne.yy[ee]=this.yy[ee]);j.setInput(M,ne.yy),ne.yy.lexer=j,ne.yy.parser=this,typeof j.yylloc>"u"&&(j.yylloc={});var ce=j.yylloc;$.push(ce);var le=j.options&&j.options.ranges;typeof ne.yy.parseError=="function"?this.parseError=ne.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function J(ie){B.length=B.length-2*ie,z.length=z.length-ie,$.length=$.length-ie}o(J,"popStack");function Se(){var ie;return ie=F.pop()||j.lex()||ue,typeof ie!="number"&&(ie instanceof Array&&(F=ie,ie=F.pop()),ie=P.symbols_[ie]||ie),ie}o(Se,"lex");for(var se,ae,Oe,ye,Be,He,ze={},Le,Ie,xe,q;;){if(Oe=B[B.length-1],this.defaultActions[Oe]?ye=this.defaultActions[Oe]:((se===null||typeof se>"u")&&(se=Se()),ye=U[Oe]&&U[Oe][se]),typeof ye>"u"||!ye.length||!ye[0]){var de="";q=[];for(Le in U[Oe])this.terminals_[Le]&&Le>Z&&q.push("'"+this.terminals_[Le]+"'");j.showPosition?de="Parse error on line "+(te+1)+`: +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var pe=this.next();return pe||this.lex()},"lex"),begin:o(function(pe){this.conditionStack.push(pe)},"begin"),popState:o(function(){var pe=this.conditionStack.length-1;return pe>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(pe){return pe=this.conditionStack.length-1-Math.abs(pe||0),pe>=0?this.conditionStack[pe]:"INITIAL"},"topState"),pushState:o(function(pe){this.begin(pe)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(pe,ve,Pe,_e){var be=_e;switch(Pe){case 0:break;case 1:break;case 2:return 55;case 3:break;case 4:return this.begin("title"),35;break;case 5:return this.popState(),"title_value";break;case 6:return this.begin("acc_title"),37;break;case 7:return this.popState(),"acc_title_value";break;case 8:return this.begin("acc_descr"),39;break;case 9:return this.popState(),"acc_descr_value";break;case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 48;case 14:return 50;case 15:return 49;case 16:return 51;case 17:return 52;case 18:return 53;case 19:return 54;case 20:return 25;case 21:this.begin("md_string");break;case 22:return"MD_STR";case 23:this.popState();break;case 24:this.begin("string");break;case 25:this.popState();break;case 26:return"STR";case 27:this.begin("class_name");break;case 28:return this.popState(),47;break;case 29:return this.begin("point_start"),44;break;case 30:return this.begin("point_x"),45;break;case 31:this.popState();break;case 32:this.popState(),this.begin("point_y");break;case 33:return this.popState(),46;break;case 34:return 28;case 35:return 4;case 36:return 11;case 37:return 64;case 38:return 10;case 39:return 65;case 40:return 65;case 41:return 14;case 42:return 13;case 43:return 67;case 44:return 66;case 45:return 12;case 46:return 8;case 47:return 5;case 48:return 18;case 49:return 56;case 50:return 63;case 51:return 57}},"anonymous"),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,/^(?:classDef\b)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?::::)/i,/^(?:^\w+)/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:{class_name:{rules:[28],inclusive:!1},point_y:{rules:[33],inclusive:!1},point_x:{rules:[32],inclusive:!1},point_start:{rules:[30,31],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:[22,23],inclusive:!1},string:{rules:[25,26],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,6,8,10,13,14,15,16,17,18,19,20,21,24,27,29,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51],inclusive:!0}}};return Te}();ie.lexer=oe;function V(){this.yy={}}return o(V,"Parser"),V.prototype=ie,ie.Parser=V,new V}();ZO.parser=ZO;Lfe=ZO});var xs,PS,Nfe=N(()=>{"use strict";fr();_a();yt();By();xs=dh(),PS=class{constructor(){this.classes=new Map;this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData()}static{o(this,"QuadrantBuilder")}getDefaultData(){return{titleText:"",quadrant1Text:"",quadrant2Text:"",quadrant3Text:"",quadrant4Text:"",xAxisLeftText:"",xAxisRightText:"",yAxisBottomText:"",yAxisTopText:"",points:[]}}getDefaultConfig(){return{showXAxis:!0,showYAxis:!0,showTitle:!0,chartHeight:or.quadrantChart?.chartWidth||500,chartWidth:or.quadrantChart?.chartHeight||500,titlePadding:or.quadrantChart?.titlePadding||10,titleFontSize:or.quadrantChart?.titleFontSize||20,quadrantPadding:or.quadrantChart?.quadrantPadding||5,xAxisLabelPadding:or.quadrantChart?.xAxisLabelPadding||5,yAxisLabelPadding:or.quadrantChart?.yAxisLabelPadding||5,xAxisLabelFontSize:or.quadrantChart?.xAxisLabelFontSize||16,yAxisLabelFontSize:or.quadrantChart?.yAxisLabelFontSize||16,quadrantLabelFontSize:or.quadrantChart?.quadrantLabelFontSize||16,quadrantTextTopPadding:or.quadrantChart?.quadrantTextTopPadding||5,pointTextPadding:or.quadrantChart?.pointTextPadding||5,pointLabelFontSize:or.quadrantChart?.pointLabelFontSize||12,pointRadius:or.quadrantChart?.pointRadius||5,xAxisPosition:or.quadrantChart?.xAxisPosition||"top",yAxisPosition:or.quadrantChart?.yAxisPosition||"left",quadrantInternalBorderStrokeWidth:or.quadrantChart?.quadrantInternalBorderStrokeWidth||1,quadrantExternalBorderStrokeWidth:or.quadrantChart?.quadrantExternalBorderStrokeWidth||2}}getDefaultThemeConfig(){return{quadrant1Fill:xs.quadrant1Fill,quadrant2Fill:xs.quadrant2Fill,quadrant3Fill:xs.quadrant3Fill,quadrant4Fill:xs.quadrant4Fill,quadrant1TextFill:xs.quadrant1TextFill,quadrant2TextFill:xs.quadrant2TextFill,quadrant3TextFill:xs.quadrant3TextFill,quadrant4TextFill:xs.quadrant4TextFill,quadrantPointFill:xs.quadrantPointFill,quadrantPointTextFill:xs.quadrantPointTextFill,quadrantXAxisTextFill:xs.quadrantXAxisTextFill,quadrantYAxisTextFill:xs.quadrantYAxisTextFill,quadrantTitleFill:xs.quadrantTitleFill,quadrantInternalBorderStrokeFill:xs.quadrantInternalBorderStrokeFill,quadrantExternalBorderStrokeFill:xs.quadrantExternalBorderStrokeFill}}clear(){this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData(),this.classes=new Map,X.info("clear called")}setData(e){this.data={...this.data,...e}}addPoints(e){this.data.points=[...e,...this.data.points]}addClass(e,r){this.classes.set(e,r)}setConfig(e){X.trace("setConfig called with: ",e),this.config={...this.config,...e}}setThemeConfig(e){X.trace("setThemeConfig called with: ",e),this.themeConfig={...this.themeConfig,...e}}calculateSpace(e,r,n,i){let a=this.config.xAxisLabelPadding*2+this.config.xAxisLabelFontSize,s={top:e==="top"&&r?a:0,bottom:e==="bottom"&&r?a:0},l=this.config.yAxisLabelPadding*2+this.config.yAxisLabelFontSize,u={left:this.config.yAxisPosition==="left"&&n?l:0,right:this.config.yAxisPosition==="right"&&n?l:0},h=this.config.titleFontSize+this.config.titlePadding*2,f={top:i?h:0},d=this.config.quadrantPadding+u.left,p=this.config.quadrantPadding+s.top+f.top,m=this.config.chartWidth-this.config.quadrantPadding*2-u.left-u.right,g=this.config.chartHeight-this.config.quadrantPadding*2-s.top-s.bottom-f.top,y=m/2,v=g/2;return{xAxisSpace:s,yAxisSpace:u,titleSpace:f,quadrantSpace:{quadrantLeft:d,quadrantTop:p,quadrantWidth:m,quadrantHalfWidth:y,quadrantHeight:g,quadrantHalfHeight:v}}}getAxisLabels(e,r,n,i){let{quadrantSpace:a,titleSpace:s}=i,{quadrantHalfHeight:l,quadrantHeight:u,quadrantLeft:h,quadrantHalfWidth:f,quadrantTop:d,quadrantWidth:p}=a,m=!!this.data.xAxisRightText,g=!!this.data.yAxisTopText,y=[];return this.data.xAxisLeftText&&r&&y.push({text:this.data.xAxisLeftText,fill:this.themeConfig.quadrantXAxisTextFill,x:h+(m?f/2:0),y:e==="top"?this.config.xAxisLabelPadding+s.top:this.config.xAxisLabelPadding+d+u+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:m?"center":"left",horizontalPos:"top",rotation:0}),this.data.xAxisRightText&&r&&y.push({text:this.data.xAxisRightText,fill:this.themeConfig.quadrantXAxisTextFill,x:h+f+(m?f/2:0),y:e==="top"?this.config.xAxisLabelPadding+s.top:this.config.xAxisLabelPadding+d+u+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:m?"center":"left",horizontalPos:"top",rotation:0}),this.data.yAxisBottomText&&n&&y.push({text:this.data.yAxisBottomText,fill:this.themeConfig.quadrantYAxisTextFill,x:this.config.yAxisPosition==="left"?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+h+p+this.config.quadrantPadding,y:d+u-(g?l/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:g?"center":"left",horizontalPos:"top",rotation:-90}),this.data.yAxisTopText&&n&&y.push({text:this.data.yAxisTopText,fill:this.themeConfig.quadrantYAxisTextFill,x:this.config.yAxisPosition==="left"?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+h+p+this.config.quadrantPadding,y:d+l-(g?l/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:g?"center":"left",horizontalPos:"top",rotation:-90}),y}getQuadrants(e){let{quadrantSpace:r}=e,{quadrantHalfHeight:n,quadrantLeft:i,quadrantHalfWidth:a,quadrantTop:s}=r,l=[{text:{text:this.data.quadrant1Text,fill:this.themeConfig.quadrant1TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:i+a,y:s,width:a,height:n,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:i,y:s,width:a,height:n,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:i,y:s+n,width:a,height:n,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:i+a,y:s+n,width:a,height:n,fill:this.themeConfig.quadrant4Fill}];for(let u of l)u.text.x=u.x+u.width/2,this.data.points.length===0?(u.text.y=u.y+u.height/2,u.text.horizontalPos="middle"):(u.text.y=u.y+this.config.quadrantTextTopPadding,u.text.horizontalPos="top");return l}getQuadrantPoints(e){let{quadrantSpace:r}=e,{quadrantHeight:n,quadrantLeft:i,quadrantTop:a,quadrantWidth:s}=r,l=Tl().domain([0,1]).range([i,s+i]),u=Tl().domain([0,1]).range([n+a,a]);return this.data.points.map(f=>{let d=this.classes.get(f.className);return d&&(f={...d,...f}),{x:l(f.x),y:u(f.y),fill:f.color??this.themeConfig.quadrantPointFill,radius:f.radius??this.config.pointRadius,text:{text:f.text,fill:this.themeConfig.quadrantPointTextFill,x:l(f.x),y:u(f.y)+this.config.pointTextPadding,verticalPos:"center",horizontalPos:"top",fontSize:this.config.pointLabelFontSize,rotation:0},strokeColor:f.strokeColor??this.themeConfig.quadrantPointFill,strokeWidth:f.strokeWidth??"0px"}})}getBorders(e){let r=this.config.quadrantExternalBorderStrokeWidth/2,{quadrantSpace:n}=e,{quadrantHalfHeight:i,quadrantHeight:a,quadrantLeft:s,quadrantHalfWidth:l,quadrantTop:u,quadrantWidth:h}=n;return[{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s-r,y1:u,x2:s+h+r,y2:u},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s+h,y1:u+r,x2:s+h,y2:u+a-r},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s-r,y1:u+a,x2:s+h+r,y2:u+a},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s,y1:u+r,x2:s,y2:u+a-r},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:s+l,y1:u+r,x2:s+l,y2:u+a-r},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:s+r,y1:u+i,x2:s+h-r,y2:u+i}]}getTitle(e){if(e)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(){let e=this.config.showXAxis&&!!(this.data.xAxisLeftText||this.data.xAxisRightText),r=this.config.showYAxis&&!!(this.data.yAxisTopText||this.data.yAxisBottomText),n=this.config.showTitle&&!!this.data.titleText,i=this.data.points.length>0?"bottom":this.config.xAxisPosition,a=this.calculateSpace(i,e,r,n);return{points:this.getQuadrantPoints(a),quadrants:this.getQuadrants(a),axisLabels:this.getAxisLabels(i,e,r,a),borderLines:this.getBorders(a),title:this.getTitle(n)}}}});function JO(t){return!/^#?([\dA-Fa-f]{6}|[\dA-Fa-f]{3})$/.test(t)}function Mfe(t){return!/^\d+$/.test(t)}function Ife(t){return!/^\d+px$/.test(t)}var Bp,Ofe=N(()=>{"use strict";Bp=class extends Error{static{o(this,"InvalidStyleError")}constructor(e,r,n){super(`value for ${e} ${r} is invalid, please use a valid ${n}`),this.name="InvalidStyleError"}};o(JO,"validateHexCode");o(Mfe,"validateNumber");o(Ife,"validateSizeInPixels")});function eh(t){return wr(t.trim(),YVe)}function XVe(t){wa.setData({quadrant1Text:eh(t.text)})}function jVe(t){wa.setData({quadrant2Text:eh(t.text)})}function KVe(t){wa.setData({quadrant3Text:eh(t.text)})}function QVe(t){wa.setData({quadrant4Text:eh(t.text)})}function ZVe(t){wa.setData({xAxisLeftText:eh(t.text)})}function JVe(t){wa.setData({xAxisRightText:eh(t.text)})}function eUe(t){wa.setData({yAxisTopText:eh(t.text)})}function tUe(t){wa.setData({yAxisBottomText:eh(t.text)})}function eP(t){let e={};for(let r of t){let[n,i]=r.trim().split(/\s*:\s*/);if(n==="radius"){if(Mfe(i))throw new Bp(n,i,"number");e.radius=parseInt(i)}else if(n==="color"){if(JO(i))throw new Bp(n,i,"hex code");e.color=i}else if(n==="stroke-color"){if(JO(i))throw new Bp(n,i,"hex code");e.strokeColor=i}else if(n==="stroke-width"){if(Ife(i))throw new Bp(n,i,"number of pixels (eg. 10px)");e.strokeWidth=i}else throw new Error(`style named ${n} is not supported.`)}return e}function rUe(t,e,r,n,i){let a=eP(i);wa.addPoints([{x:r,y:n,text:eh(t.text),className:e,...a}])}function nUe(t,e){wa.addClass(t,eP(e))}function iUe(t){wa.setConfig({chartWidth:t})}function aUe(t){wa.setConfig({chartHeight:t})}function sUe(){let t=me(),{themeVariables:e,quadrantChart:r}=t;return r&&wa.setConfig(r),wa.setThemeConfig({quadrant1Fill:e.quadrant1Fill,quadrant2Fill:e.quadrant2Fill,quadrant3Fill:e.quadrant3Fill,quadrant4Fill:e.quadrant4Fill,quadrant1TextFill:e.quadrant1TextFill,quadrant2TextFill:e.quadrant2TextFill,quadrant3TextFill:e.quadrant3TextFill,quadrant4TextFill:e.quadrant4TextFill,quadrantPointFill:e.quadrantPointFill,quadrantPointTextFill:e.quadrantPointTextFill,quadrantXAxisTextFill:e.quadrantXAxisTextFill,quadrantYAxisTextFill:e.quadrantYAxisTextFill,quadrantExternalBorderStrokeFill:e.quadrantExternalBorderStrokeFill,quadrantInternalBorderStrokeFill:e.quadrantInternalBorderStrokeFill,quadrantTitleFill:e.quadrantTitleFill}),wa.setData({titleText:Nr()}),wa.build()}var YVe,wa,oUe,Pfe,Bfe=N(()=>{"use strict";Gt();pr();ci();Nfe();Ofe();YVe=me();o(eh,"textSanitizer");wa=new PS;o(XVe,"setQuadrant1Text");o(jVe,"setQuadrant2Text");o(KVe,"setQuadrant3Text");o(QVe,"setQuadrant4Text");o(ZVe,"setXAxisLeftText");o(JVe,"setXAxisRightText");o(eUe,"setYAxisTopText");o(tUe,"setYAxisBottomText");o(eP,"parseStyles");o(rUe,"addPoint");o(nUe,"addClass");o(iUe,"setWidth");o(aUe,"setHeight");o(sUe,"getQuadrantData");oUe=o(function(){wa.clear(),kr()},"clear"),Pfe={setWidth:iUe,setHeight:aUe,setQuadrant1Text:XVe,setQuadrant2Text:jVe,setQuadrant3Text:KVe,setQuadrant4Text:QVe,setXAxisLeftText:ZVe,setXAxisRightText:JVe,setYAxisTopText:eUe,setYAxisBottomText:tUe,parseStyles:eP,addPoint:rUe,addClass:nUe,getQuadrantData:sUe,clear:oUe,setAccTitle:Ar,getAccTitle:Dr,setDiagramTitle:Or,getDiagramTitle:Nr,getAccDescription:Rr,setAccDescription:Lr}});var lUe,Ffe,$fe=N(()=>{"use strict";fr();Gt();yt();xi();lUe=o((t,e,r,n)=>{function i(C){return C==="top"?"hanging":"middle"}o(i,"getDominantBaseLine");function a(C){return C==="left"?"start":"middle"}o(a,"getTextAnchor");function s(C){return`translate(${C.x}, ${C.y}) rotate(${C.rotation||0})`}o(s,"getTransformation");let l=me();X.debug(`Rendering quadrant chart +`+t);let u=l.securityLevel,h;u==="sandbox"&&(h=Ge("#i"+e));let d=(u==="sandbox"?Ge(h.nodes()[0].contentDocument.body):Ge("body")).select(`[id="${e}"]`),p=d.append("g").attr("class","main"),m=l.quadrantChart?.chartWidth??500,g=l.quadrantChart?.chartHeight??500;fn(d,g,m,l.quadrantChart?.useMaxWidth??!0),d.attr("viewBox","0 0 "+m+" "+g),n.db.setHeight(g),n.db.setWidth(m);let y=n.db.getQuadrantData(),v=p.append("g").attr("class","quadrants"),x=p.append("g").attr("class","border"),b=p.append("g").attr("class","data-points"),T=p.append("g").attr("class","labels"),S=p.append("g").attr("class","title");y.title&&S.append("text").attr("x",0).attr("y",0).attr("fill",y.title.fill).attr("font-size",y.title.fontSize).attr("dominant-baseline",i(y.title.horizontalPos)).attr("text-anchor",a(y.title.verticalPos)).attr("transform",s(y.title)).text(y.title.text),y.borderLines&&x.selectAll("line").data(y.borderLines).enter().append("line").attr("x1",C=>C.x1).attr("y1",C=>C.y1).attr("x2",C=>C.x2).attr("y2",C=>C.y2).style("stroke",C=>C.strokeFill).style("stroke-width",C=>C.strokeWidth);let w=v.selectAll("g.quadrant").data(y.quadrants).enter().append("g").attr("class","quadrant");w.append("rect").attr("x",C=>C.x).attr("y",C=>C.y).attr("width",C=>C.width).attr("height",C=>C.height).attr("fill",C=>C.fill),w.append("text").attr("x",0).attr("y",0).attr("fill",C=>C.text.fill).attr("font-size",C=>C.text.fontSize).attr("dominant-baseline",C=>i(C.text.horizontalPos)).attr("text-anchor",C=>a(C.text.verticalPos)).attr("transform",C=>s(C.text)).text(C=>C.text.text),T.selectAll("g.label").data(y.axisLabels).enter().append("g").attr("class","label").append("text").attr("x",0).attr("y",0).text(C=>C.text).attr("fill",C=>C.fill).attr("font-size",C=>C.fontSize).attr("dominant-baseline",C=>i(C.horizontalPos)).attr("text-anchor",C=>a(C.verticalPos)).attr("transform",C=>s(C));let _=b.selectAll("g.data-point").data(y.points).enter().append("g").attr("class","data-point");_.append("circle").attr("cx",C=>C.x).attr("cy",C=>C.y).attr("r",C=>C.radius).attr("fill",C=>C.fill).attr("stroke",C=>C.strokeColor).attr("stroke-width",C=>C.strokeWidth),_.append("text").attr("x",0).attr("y",0).text(C=>C.text.text).attr("fill",C=>C.text.fill).attr("font-size",C=>C.text.fontSize).attr("dominant-baseline",C=>i(C.text.horizontalPos)).attr("text-anchor",C=>a(C.text.verticalPos)).attr("transform",C=>s(C.text))},"draw"),Ffe={draw:lUe}});var zfe={};ur(zfe,{diagram:()=>cUe});var cUe,Gfe=N(()=>{"use strict";Rfe();Bfe();$fe();cUe={parser:Lfe,db:Pfe,renderer:Ffe,styles:o(()=>"","styles")}});var tP,Hfe,Wfe=N(()=>{"use strict";tP=function(){var t=o(function(I,M,P,B){for(P=P||{},B=I.length;B--;P[I[B]]=M);return P},"o"),e=[1,10,12,14,16,18,19,21,23],r=[2,6],n=[1,3],i=[1,5],a=[1,6],s=[1,7],l=[1,5,10,12,14,16,18,19,21,23,34,35,36],u=[1,25],h=[1,26],f=[1,28],d=[1,29],p=[1,30],m=[1,31],g=[1,32],y=[1,33],v=[1,34],x=[1,35],b=[1,36],T=[1,37],S=[1,43],w=[1,42],E=[1,47],_=[1,50],C=[1,10,12,14,16,18,19,21,23,34,35,36],D=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36],O=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36,41,42,43,44,45,46,47,48,49,50],R=[1,64],k={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,eol:4,XYCHART:5,chartConfig:6,document:7,CHART_ORIENTATION:8,statement:9,title:10,text:11,X_AXIS:12,parseXAxis:13,Y_AXIS:14,parseYAxis:15,LINE:16,plotData:17,BAR:18,acc_title:19,acc_title_value:20,acc_descr:21,acc_descr_value:22,acc_descr_multiline_value:23,SQUARE_BRACES_START:24,commaSeparatedNumbers:25,SQUARE_BRACES_END:26,NUMBER_WITH_DECIMAL:27,COMMA:28,xAxisData:29,bandData:30,ARROW_DELIMITER:31,commaSeparatedTexts:32,yAxisData:33,NEWLINE:34,SEMI:35,EOF:36,alphaNum:37,STR:38,MD_STR:39,alphaNumToken:40,AMP:41,NUM:42,ALPHA:43,PLUS:44,EQUALS:45,MULT:46,DOT:47,BRKT:48,MINUS:49,UNDERSCORE:50,$accept:0,$end:1},terminals_:{2:"error",5:"XYCHART",8:"CHART_ORIENTATION",10:"title",12:"X_AXIS",14:"Y_AXIS",16:"LINE",18:"BAR",19:"acc_title",20:"acc_title_value",21:"acc_descr",22:"acc_descr_value",23:"acc_descr_multiline_value",24:"SQUARE_BRACES_START",26:"SQUARE_BRACES_END",27:"NUMBER_WITH_DECIMAL",28:"COMMA",31:"ARROW_DELIMITER",34:"NEWLINE",35:"SEMI",36:"EOF",38:"STR",39:"MD_STR",41:"AMP",42:"NUM",43:"ALPHA",44:"PLUS",45:"EQUALS",46:"MULT",47:"DOT",48:"BRKT",49:"MINUS",50:"UNDERSCORE"},productions_:[0,[3,2],[3,3],[3,2],[3,1],[6,1],[7,0],[7,2],[9,2],[9,2],[9,2],[9,2],[9,2],[9,3],[9,2],[9,3],[9,2],[9,2],[9,1],[17,3],[25,3],[25,1],[13,1],[13,2],[13,1],[29,1],[29,3],[30,3],[32,3],[32,1],[15,1],[15,2],[15,1],[33,3],[4,1],[4,1],[4,1],[11,1],[11,1],[11,1],[37,1],[37,2],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1]],performAction:o(function(M,P,B,F,z,$,U){var K=$.length-1;switch(z){case 5:F.setOrientation($[K]);break;case 9:F.setDiagramTitle($[K].text.trim());break;case 12:F.setLineData({text:"",type:"text"},$[K]);break;case 13:F.setLineData($[K-1],$[K]);break;case 14:F.setBarData({text:"",type:"text"},$[K]);break;case 15:F.setBarData($[K-1],$[K]);break;case 16:this.$=$[K].trim(),F.setAccTitle(this.$);break;case 17:case 18:this.$=$[K].trim(),F.setAccDescription(this.$);break;case 19:this.$=$[K-1];break;case 20:this.$=[Number($[K-2]),...$[K]];break;case 21:this.$=[Number($[K])];break;case 22:F.setXAxisTitle($[K]);break;case 23:F.setXAxisTitle($[K-1]);break;case 24:F.setXAxisTitle({type:"text",text:""});break;case 25:F.setXAxisBand($[K]);break;case 26:F.setXAxisRangeData(Number($[K-2]),Number($[K]));break;case 27:this.$=$[K-1];break;case 28:this.$=[$[K-2],...$[K]];break;case 29:this.$=[$[K]];break;case 30:F.setYAxisTitle($[K]);break;case 31:F.setYAxisTitle($[K-1]);break;case 32:F.setYAxisTitle({type:"text",text:""});break;case 33:F.setYAxisRangeData(Number($[K-2]),Number($[K]));break;case 37:this.$={text:$[K],type:"text"};break;case 38:this.$={text:$[K],type:"text"};break;case 39:this.$={text:$[K],type:"markdown"};break;case 40:this.$=$[K];break;case 41:this.$=$[K-1]+""+$[K];break}},"anonymous"),table:[t(e,r,{3:1,4:2,7:4,5:n,34:i,35:a,36:s}),{1:[3]},t(e,r,{4:2,7:4,3:8,5:n,34:i,35:a,36:s}),t(e,r,{4:2,7:4,6:9,3:10,5:n,8:[1,11],34:i,35:a,36:s}),{1:[2,4],9:12,10:[1,13],12:[1,14],14:[1,15],16:[1,16],18:[1,17],19:[1,18],21:[1,19],23:[1,20]},t(l,[2,34]),t(l,[2,35]),t(l,[2,36]),{1:[2,1]},t(e,r,{4:2,7:4,3:21,5:n,34:i,35:a,36:s}),{1:[2,3]},t(l,[2,5]),t(e,[2,7],{4:22,34:i,35:a,36:s}),{11:23,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:T},{11:39,13:38,24:S,27:w,29:40,30:41,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:T},{11:45,15:44,27:E,33:46,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:T},{11:49,17:48,24:_,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:T},{11:52,17:51,24:_,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:T},{20:[1,53]},{22:[1,54]},t(C,[2,18]),{1:[2,2]},t(C,[2,8]),t(C,[2,9]),t(D,[2,37],{40:55,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:T}),t(D,[2,38]),t(D,[2,39]),t(O,[2,40]),t(O,[2,42]),t(O,[2,43]),t(O,[2,44]),t(O,[2,45]),t(O,[2,46]),t(O,[2,47]),t(O,[2,48]),t(O,[2,49]),t(O,[2,50]),t(O,[2,51]),t(C,[2,10]),t(C,[2,22],{30:41,29:56,24:S,27:w}),t(C,[2,24]),t(C,[2,25]),{31:[1,57]},{11:59,32:58,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:T},t(C,[2,11]),t(C,[2,30],{33:60,27:E}),t(C,[2,32]),{31:[1,61]},t(C,[2,12]),{17:62,24:_},{25:63,27:R},t(C,[2,14]),{17:65,24:_},t(C,[2,16]),t(C,[2,17]),t(O,[2,41]),t(C,[2,23]),{27:[1,66]},{26:[1,67]},{26:[2,29],28:[1,68]},t(C,[2,31]),{27:[1,69]},t(C,[2,13]),{26:[1,70]},{26:[2,21],28:[1,71]},t(C,[2,15]),t(C,[2,26]),t(C,[2,27]),{11:59,32:72,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:T},t(C,[2,33]),t(C,[2,19]),{25:73,27:R},{26:[2,28]},{26:[2,20]}],defaultActions:{8:[2,1],10:[2,3],21:[2,2],72:[2,28],73:[2,20]},parseError:o(function(M,P){if(P.recoverable)this.trace(M);else{var B=new Error(M);throw B.hash=P,B}},"parseError"),parse:o(function(M){var P=this,B=[0],F=[],z=[null],$=[],U=this.table,K="",ee=0,Y=0,ce=0,Z=2,ue=1,Q=$.slice.call(arguments,1),j=Object.create(this.lexer),ne={yy:{}};for(var te in this.yy)Object.prototype.hasOwnProperty.call(this.yy,te)&&(ne.yy[te]=this.yy[te]);j.setInput(M,ne.yy),ne.yy.lexer=j,ne.yy.parser=this,typeof j.yylloc>"u"&&(j.yylloc={});var he=j.yylloc;$.push(he);var le=j.options&&j.options.ranges;typeof ne.yy.parseError=="function"?this.parseError=ne.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function J(ie){B.length=B.length-2*ie,z.length=z.length-ie,$.length=$.length-ie}o(J,"popStack");function Se(){var ie;return ie=F.pop()||j.lex()||ue,typeof ie!="number"&&(ie instanceof Array&&(F=ie,ie=F.pop()),ie=P.symbols_[ie]||ie),ie}o(Se,"lex");for(var se,ae,Oe,ye,Be,He,ze={},Le,Ie,xe,q;;){if(Oe=B[B.length-1],this.defaultActions[Oe]?ye=this.defaultActions[Oe]:((se===null||typeof se>"u")&&(se=Se()),ye=U[Oe]&&U[Oe][se]),typeof ye>"u"||!ye.length||!ye[0]){var de="";q=[];for(Le in U[Oe])this.terminals_[Le]&&Le>Z&&q.push("'"+this.terminals_[Le]+"'");j.showPosition?de="Parse error on line "+(ee+1)+`: `+j.showPosition()+` -Expecting `+q.join(", ")+", got '"+(this.terminals_[se]||se)+"'":de="Parse error on line "+(te+1)+": Unexpected "+(se==ue?"end of input":"'"+(this.terminals_[se]||se)+"'"),this.parseError(de,{text:j.match,token:this.terminals_[se]||se,line:j.yylineno,loc:ce,expected:q})}if(ye[0]instanceof Array&&ye.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Oe+", token: "+se);switch(ye[0]){case 1:B.push(se),z.push(j.yytext),$.push(j.yylloc),B.push(ye[1]),se=null,ae?(se=ae,ae=null):(Y=j.yyleng,Q=j.yytext,te=j.yylineno,ce=j.yylloc,he>0&&he--);break;case 2:if(Ie=this.productions_[ye[1]][1],ze.$=z[z.length-Ie],ze._$={first_line:$[$.length-(Ie||1)].first_line,last_line:$[$.length-1].last_line,first_column:$[$.length-(Ie||1)].first_column,last_column:$[$.length-1].last_column},le&&(ze._$.range=[$[$.length-(Ie||1)].range[0],$[$.length-1].range[1]]),He=this.performAction.apply(ze,[Q,Y,te,ne.yy,ye[1],z,$].concat(K)),typeof He<"u")return He;Ie&&(B=B.slice(0,-1*Ie*2),z=z.slice(0,-1*Ie),$=$.slice(0,-1*Ie)),B.push(this.productions_[ye[1]][0]),z.push(ze.$),$.push(ze._$),xe=U[B[B.length-2]][B[B.length-1]],B.push(xe);break;case 3:return!0}}return!0},"parse")},D=function(){var O={EOF:1,parseError:o(function(P,B){if(this.yy.parser)this.yy.parser.parseError(P,B);else throw new Error(P)},"parseError"),setInput:o(function(M,P){return this.yy=P||this.yy||{},this._input=M,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},"setInput"),input:o(function(){var M=this._input[0];this.yytext+=M,this.yyleng++,this.offset++,this.match+=M,this.matched+=M;var P=M.match(/(?:\r\n?|\n).*/g);return P?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),M},"input"),unput:o(function(M){var P=M.length,B=M.split(/(?:\r\n?|\n)/g);this._input=M+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-P),this.offset-=P;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),B.length-1&&(this.yylineno-=B.length-1);var z=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:B?(B.length===F.length?this.yylloc.first_column:0)+F[F.length-B.length].length-B[0].length:this.yylloc.first_column-P},this.options.ranges&&(this.yylloc.range=[z[0],z[0]+this.yyleng-P]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(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). +Expecting `+q.join(", ")+", got '"+(this.terminals_[se]||se)+"'":de="Parse error on line "+(ee+1)+": Unexpected "+(se==ue?"end of input":"'"+(this.terminals_[se]||se)+"'"),this.parseError(de,{text:j.match,token:this.terminals_[se]||se,line:j.yylineno,loc:he,expected:q})}if(ye[0]instanceof Array&&ye.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Oe+", token: "+se);switch(ye[0]){case 1:B.push(se),z.push(j.yytext),$.push(j.yylloc),B.push(ye[1]),se=null,ae?(se=ae,ae=null):(Y=j.yyleng,K=j.yytext,ee=j.yylineno,he=j.yylloc,ce>0&&ce--);break;case 2:if(Ie=this.productions_[ye[1]][1],ze.$=z[z.length-Ie],ze._$={first_line:$[$.length-(Ie||1)].first_line,last_line:$[$.length-1].last_line,first_column:$[$.length-(Ie||1)].first_column,last_column:$[$.length-1].last_column},le&&(ze._$.range=[$[$.length-(Ie||1)].range[0],$[$.length-1].range[1]]),He=this.performAction.apply(ze,[K,Y,ee,ne.yy,ye[1],z,$].concat(Q)),typeof He<"u")return He;Ie&&(B=B.slice(0,-1*Ie*2),z=z.slice(0,-1*Ie),$=$.slice(0,-1*Ie)),B.push(this.productions_[ye[1]][0]),z.push(ze.$),$.push(ze._$),xe=U[B[B.length-2]][B[B.length-1]],B.push(xe);break;case 3:return!0}}return!0},"parse")},L=function(){var I={EOF:1,parseError:o(function(P,B){if(this.yy.parser)this.yy.parser.parseError(P,B);else throw new Error(P)},"parseError"),setInput:o(function(M,P){return this.yy=P||this.yy||{},this._input=M,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},"setInput"),input:o(function(){var M=this._input[0];this.yytext+=M,this.yyleng++,this.offset++,this.match+=M,this.matched+=M;var P=M.match(/(?:\r\n?|\n).*/g);return P?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),M},"input"),unput:o(function(M){var P=M.length,B=M.split(/(?:\r\n?|\n)/g);this._input=M+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-P),this.offset-=P;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),B.length-1&&(this.yylineno-=B.length-1);var z=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:B?(B.length===F.length?this.yylloc.first_column:0)+F[F.length-B.length].length-B[0].length:this.yylloc.first_column-P},this.options.ranges&&(this.yylloc.range=[z[0],z[0]+this.yyleng-P]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(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},"reject"),less:o(function(M){this.unput(this.match.slice(M))},"less"),pastInput:o(function(){var M=this.matched.substr(0,this.matched.length-this.match.length);return(M.length>20?"...":"")+M.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var M=this.match;return M.length<20&&(M+=this._input.substr(0,20-M.length)),(M.substr(0,20)+(M.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var M=this.pastInput(),P=new Array(M.length+1).join("-");return M+this.upcomingInput()+` `+P+"^"},"showPosition"),test_match:o(function(M,P){var B,F,z;if(this.options.backtrack_lexer&&(z={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&&(z.yylloc.range=this.yylloc.range.slice(0))),F=M[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+M[0].length},this.yytext+=M[0],this.match+=M[0],this.matches=M,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(M[0].length),this.matched+=M[0],B=this.performAction.call(this,this.yy,this,P,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),B)return B;if(this._backtrack){for(var $ in z)this[$]=z[$];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var M,P,B,F;this._more||(this.yytext="",this.match="");for(var z=this._currentRules(),$=0;$P[0].length)){if(P=B,F=$,this.options.backtrack_lexer){if(M=this.test_match(B,z[$]),M!==!1)return M;if(this._backtrack){P=!1;continue}else return!1}else if(!this.options.flex)break}return P?(M=this.test_match(P,z[F]),M!==!1?M:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var P=this.next();return P||this.lex()},"lex"),begin:o(function(P){this.conditionStack.push(P)},"begin"),popState:o(function(){var P=this.conditionStack.length-1;return P>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(P){return P=this.conditionStack.length-1-Math.abs(P||0),P>=0?this.conditionStack[P]:"INITIAL"},"topState"),pushState:o(function(P){this.begin(P)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(P,B,F,z){var $=z;switch(F){case 0:break;case 1:break;case 2:return this.popState(),34;break;case 3:return this.popState(),34;break;case 4:return 34;case 5:break;case 6:return 10;case 7:return this.pushState("acc_title"),19;break;case 8:return this.popState(),"acc_title_value";break;case 9:return this.pushState("acc_descr"),21;break;case 10:return this.popState(),"acc_descr_value";break;case 11:this.pushState("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 5;case 15:return 8;case 16:return this.pushState("axis_data"),"X_AXIS";break;case 17:return this.pushState("axis_data"),"Y_AXIS";break;case 18:return this.pushState("axis_band_data"),24;break;case 19:return 31;case 20:return this.pushState("data"),16;break;case 21:return this.pushState("data"),18;break;case 22:return this.pushState("data_inner"),24;break;case 23:return 27;case 24:return this.popState(),26;break;case 25:this.popState();break;case 26:this.pushState("string");break;case 27:this.popState();break;case 28:return"STR";case 29:return 24;case 30:return 26;case 31:return 43;case 32:return"COLON";case 33:return 44;case 34:return 28;case 35:return 45;case 36:return 46;case 37:return 48;case 38:return 50;case 39:return 47;case 40:return 41;case 41:return 49;case 42:return 42;case 43:break;case 44:return 35;case 45:return 36}},"anonymous"),rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:(\r?\n))/i,/^(?:(\r?\n))/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:title\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:\{)/i,/^(?:[^\}]*)/i,/^(?:xychart-beta\b)/i,/^(?:(?:vertical|horizontal))/i,/^(?:x-axis\b)/i,/^(?:y-axis\b)/i,/^(?:\[)/i,/^(?:-->)/i,/^(?:line\b)/i,/^(?:bar\b)/i,/^(?:\[)/i,/^(?:[+-]?(?:\d+(?:\.\d+)?|\.\d+))/i,/^(?:\])/i,/^(?:(?:`\) \{ this\.pushState\(md_string\); \}\n\(\?:\(\?!`"\)\.\)\+ \{ return MD_STR; \}\n\(\?:`))/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:\[)/i,/^(?:\])/i,/^(?:[A-Za-z]+)/i,/^(?::)/i,/^(?:\+)/i,/^(?:,)/i,/^(?:=)/i,/^(?:\*)/i,/^(?:#)/i,/^(?:[\_])/i,/^(?:\.)/i,/^(?:&)/i,/^(?:-)/i,/^(?:[0-9]+)/i,/^(?:\s+)/i,/^(?:;)/i,/^(?:$)/i],conditions:{data_inner:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,23,24,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},data:{rules:[0,1,3,4,5,6,7,9,11,14,15,16,17,20,21,22,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},axis_band_data:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,24,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},axis_data:{rules:[0,1,2,4,5,6,7,9,11,14,15,16,17,18,19,20,21,23,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},title:{rules:[],inclusive:!1},md_string:{rules:[],inclusive:!1},string:{rules:[27,28],inclusive:!1},INITIAL:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0}}};return O}();k.lexer=D;function R(){this.yy={}}return o(R,"Parser"),R.prototype=k,k.Parser=R,new R}();xO.parser=xO;_he=xO});function bO(t){return t.type==="bar"}function ES(t){return t.type==="band"}function M1(t){return t.type==="linear"}var SS=N(()=>{"use strict";o(bO,"isBarPlot");o(ES,"isBandAxisData");o(M1,"isLinearAxisData")});var I1,wO=N(()=>{"use strict";no();I1=class{constructor(e){this.parentGroup=e}static{o(this,"TextDimensionCalculatorWithFont")}getMaxDimension(e,r){if(!this.parentGroup)return{width:e.reduce((a,s)=>Math.max(s.length,a),0)*r,height:r};let n={width:0,height:0},i=this.parentGroup.append("g").attr("visibility","hidden").attr("font-size",r);for(let a of e){let s=hK(i,1,a),l=s?s.width:a.length*r,u=s?s.height:r;n.width=Math.max(n.width,l),n.height=Math.max(n.height,u)}return i.remove(),n}}});var O1,TO=N(()=>{"use strict";O1=class{constructor(e,r,n,i){this.axisConfig=e;this.title=r;this.textDimensionCalculator=n;this.axisThemeConfig=i;this.boundingRect={x:0,y:0,width:0,height:0};this.axisPosition="left";this.showTitle=!1;this.showLabel=!1;this.showTick=!1;this.showAxisLine=!1;this.outerPadding=0;this.titleTextHeight=0;this.labelTextHeight=0;this.range=[0,10],this.boundingRect={x:0,y:0,width:0,height:0},this.axisPosition="left"}static{o(this,"BaseAxis")}setRange(e){this.range=e,this.axisPosition==="left"||this.axisPosition==="right"?this.boundingRect.height=e[1]-e[0]:this.boundingRect.width=e[1]-e[0],this.recalculateScale()}getRange(){return[this.range[0]+this.outerPadding,this.range[1]-this.outerPadding]}setAxisPosition(e){this.axisPosition=e,this.setRange(this.range)}getTickDistance(){let e=this.getRange();return Math.abs(e[0]-e[1])/this.getTickValues().length}getAxisOuterPadding(){return this.outerPadding}getLabelDimension(){return this.textDimensionCalculator.getMaxDimension(this.getTickValues().map(e=>e.toString()),this.axisConfig.labelFontSize)}recalculateOuterPaddingToDrawBar(){.7*this.getTickDistance()>this.outerPadding*2&&(this.outerPadding=Math.floor(.7*this.getTickDistance()/2)),this.recalculateScale()}calculateSpaceIfDrawnHorizontally(e){let r=e.height;if(this.axisConfig.showAxisLine&&r>this.axisConfig.axisLineWidth&&(r-=this.axisConfig.axisLineWidth,this.showAxisLine=!0),this.axisConfig.showLabel){let n=this.getLabelDimension(),i=.2*e.width;this.outerPadding=Math.min(n.width/2,i);let a=n.height+this.axisConfig.labelPadding*2;this.labelTextHeight=n.height,a<=r&&(r-=a,this.showLabel=!0)}if(this.axisConfig.showTick&&r>=this.axisConfig.tickLength&&(this.showTick=!0,r-=this.axisConfig.tickLength),this.axisConfig.showTitle&&this.title){let n=this.textDimensionCalculator.getMaxDimension([this.title],this.axisConfig.titleFontSize),i=n.height+this.axisConfig.titlePadding*2;this.titleTextHeight=n.height,i<=r&&(r-=i,this.showTitle=!0)}this.boundingRect.width=e.width,this.boundingRect.height=e.height-r}calculateSpaceIfDrawnVertical(e){let r=e.width;if(this.axisConfig.showAxisLine&&r>this.axisConfig.axisLineWidth&&(r-=this.axisConfig.axisLineWidth,this.showAxisLine=!0),this.axisConfig.showLabel){let n=this.getLabelDimension(),i=.2*e.height;this.outerPadding=Math.min(n.height/2,i);let a=n.width+this.axisConfig.labelPadding*2;a<=r&&(r-=a,this.showLabel=!0)}if(this.axisConfig.showTick&&r>=this.axisConfig.tickLength&&(this.showTick=!0,r-=this.axisConfig.tickLength),this.axisConfig.showTitle&&this.title){let n=this.textDimensionCalculator.getMaxDimension([this.title],this.axisConfig.titleFontSize),i=n.height+this.axisConfig.titlePadding*2;this.titleTextHeight=n.height,i<=r&&(r-=i,this.showTitle=!0)}this.boundingRect.width=e.width-r,this.boundingRect.height=e.height}calculateSpace(e){return this.axisPosition==="left"||this.axisPosition==="right"?this.calculateSpaceIfDrawnVertical(e):this.calculateSpaceIfDrawnHorizontally(e),this.recalculateScale(),{width:this.boundingRect.width,height:this.boundingRect.height}}setBoundingBoxXY(e){this.boundingRect.x=e.x,this.boundingRect.y=e.y}getDrawableElementsForLeftAxis(){let e=[];if(this.showAxisLine){let r=this.boundingRect.x+this.boundingRect.width-this.axisConfig.axisLineWidth/2;e.push({type:"path",groupTexts:["left-axis","axisl-line"],data:[{path:`M ${r},${this.boundingRect.y} L ${r},${this.boundingRect.y+this.boundingRect.height} `,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&e.push({type:"text",groupTexts:["left-axis","label"],data:this.getTickValues().map(r=>({text:r.toString(),x:this.boundingRect.x+this.boundingRect.width-(this.showLabel?this.axisConfig.labelPadding:0)-(this.showTick?this.axisConfig.tickLength:0)-(this.showAxisLine?this.axisConfig.axisLineWidth:0),y:this.getScaleValue(r),fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"middle",horizontalPos:"right"}))}),this.showTick){let r=this.boundingRect.x+this.boundingRect.width-(this.showAxisLine?this.axisConfig.axisLineWidth:0);e.push({type:"path",groupTexts:["left-axis","ticks"],data:this.getTickValues().map(n=>({path:`M ${r},${this.getScaleValue(n)} L ${r-this.axisConfig.tickLength},${this.getScaleValue(n)}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&e.push({type:"text",groupTexts:["left-axis","title"],data:[{text:this.title,x:this.boundingRect.x+this.axisConfig.titlePadding,y:this.boundingRect.y+this.boundingRect.height/2,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:270,verticalPos:"top",horizontalPos:"center"}]}),e}getDrawableElementsForBottomAxis(){let e=[];if(this.showAxisLine){let r=this.boundingRect.y+this.axisConfig.axisLineWidth/2;e.push({type:"path",groupTexts:["bottom-axis","axis-line"],data:[{path:`M ${this.boundingRect.x},${r} L ${this.boundingRect.x+this.boundingRect.width},${r}`,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&e.push({type:"text",groupTexts:["bottom-axis","label"],data:this.getTickValues().map(r=>({text:r.toString(),x:this.getScaleValue(r),y:this.boundingRect.y+this.axisConfig.labelPadding+(this.showTick?this.axisConfig.tickLength:0)+(this.showAxisLine?this.axisConfig.axisLineWidth:0),fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}))}),this.showTick){let r=this.boundingRect.y+(this.showAxisLine?this.axisConfig.axisLineWidth:0);e.push({type:"path",groupTexts:["bottom-axis","ticks"],data:this.getTickValues().map(n=>({path:`M ${this.getScaleValue(n)},${r} L ${this.getScaleValue(n)},${r+this.axisConfig.tickLength}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&e.push({type:"text",groupTexts:["bottom-axis","title"],data:[{text:this.title,x:this.range[0]+(this.range[1]-this.range[0])/2,y:this.boundingRect.y+this.boundingRect.height-this.axisConfig.titlePadding-this.titleTextHeight,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}]}),e}getDrawableElementsForTopAxis(){let e=[];if(this.showAxisLine){let r=this.boundingRect.y+this.boundingRect.height-this.axisConfig.axisLineWidth/2;e.push({type:"path",groupTexts:["top-axis","axis-line"],data:[{path:`M ${this.boundingRect.x},${r} L ${this.boundingRect.x+this.boundingRect.width},${r}`,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&e.push({type:"text",groupTexts:["top-axis","label"],data:this.getTickValues().map(r=>({text:r.toString(),x:this.getScaleValue(r),y:this.boundingRect.y+(this.showTitle?this.titleTextHeight+this.axisConfig.titlePadding*2:0)+this.axisConfig.labelPadding,fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}))}),this.showTick){let r=this.boundingRect.y;e.push({type:"path",groupTexts:["top-axis","ticks"],data:this.getTickValues().map(n=>({path:`M ${this.getScaleValue(n)},${r+this.boundingRect.height-(this.showAxisLine?this.axisConfig.axisLineWidth:0)} L ${this.getScaleValue(n)},${r+this.boundingRect.height-this.axisConfig.tickLength-(this.showAxisLine?this.axisConfig.axisLineWidth:0)}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&e.push({type:"text",groupTexts:["top-axis","title"],data:[{text:this.title,x:this.boundingRect.x+this.boundingRect.width/2,y:this.boundingRect.y+this.axisConfig.titlePadding,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}]}),e}getDrawableElements(){if(this.axisPosition==="left")return this.getDrawableElementsForLeftAxis();if(this.axisPosition==="right")throw Error("Drawing of right axis is not implemented");return this.axisPosition==="bottom"?this.getDrawableElementsForBottomAxis():this.axisPosition==="top"?this.getDrawableElementsForTopAxis():[]}}});var CS,Lhe=N(()=>{"use strict";pr();vt();TO();CS=class extends O1{static{o(this,"BandAxis")}constructor(e,r,n,i,a){super(e,i,a,r),this.categories=n,this.scale=B0().domain(this.categories).range(this.getRange())}setRange(e){super.setRange(e)}recalculateScale(){this.scale=B0().domain(this.categories).range(this.getRange()).paddingInner(1).paddingOuter(0).align(.5),X.trace("BandAxis axis final categories, range: ",this.categories,this.getRange())}getTickValues(){return this.categories}getScaleValue(e){return this.scale(e)??this.getRange()[0]}}});var AS,Rhe=N(()=>{"use strict";pr();TO();AS=class extends O1{static{o(this,"LinearAxis")}constructor(e,r,n,i,a){super(e,i,a,r),this.domain=n,this.scale=vl().domain(this.domain).range(this.getRange())}getTickValues(){return this.scale.ticks()}recalculateScale(){let e=[...this.domain];this.axisPosition==="left"&&e.reverse(),this.scale=vl().domain(e).range(this.getRange())}getScaleValue(e){return this.scale(e)}}});function kO(t,e,r,n){let i=new I1(n);return ES(t)?new CS(e,r,t.categories,t.title,i):new AS(e,r,[t.min,t.max],t.title,i)}var Nhe=N(()=>{"use strict";SS();wO();Lhe();Rhe();o(kO,"getAxis")});function Mhe(t,e,r,n){let i=new I1(n);return new EO(i,t,e,r)}var EO,Ihe=N(()=>{"use strict";wO();EO=class{constructor(e,r,n,i){this.textDimensionCalculator=e;this.chartConfig=r;this.chartData=n;this.chartThemeConfig=i;this.boundingRect={x:0,y:0,width:0,height:0},this.showChartTitle=!1}static{o(this,"ChartTitle")}setBoundingBoxXY(e){this.boundingRect.x=e.x,this.boundingRect.y=e.y}calculateSpace(e){let r=this.textDimensionCalculator.getMaxDimension([this.chartData.title],this.chartConfig.titleFontSize),n=Math.max(r.width,e.width),i=r.height+2*this.chartConfig.titlePadding;return r.width<=n&&r.height<=i&&this.chartConfig.showTitle&&this.chartData.title&&(this.boundingRect.width=n,this.boundingRect.height=i,this.showChartTitle=!0),{width:this.boundingRect.width,height:this.boundingRect.height}}getDrawableElements(){let e=[];return this.showChartTitle&&e.push({groupTexts:["chart-title"],type:"text",data:[{fontSize:this.chartConfig.titleFontSize,text:this.chartData.title,verticalPos:"middle",horizontalPos:"center",x:this.boundingRect.x+this.boundingRect.width/2,y:this.boundingRect.y+this.boundingRect.height/2,fill:this.chartThemeConfig.titleColor,rotation:0}]}),e}};o(Mhe,"getChartTitleComponent")});var _S,Ohe=N(()=>{"use strict";pr();_S=class{constructor(e,r,n,i,a){this.plotData=e;this.xAxis=r;this.yAxis=n;this.orientation=i;this.plotIndex=a}static{o(this,"LinePlot")}getDrawableElement(){let e=this.plotData.data.map(n=>[this.xAxis.getScaleValue(n[0]),this.yAxis.getScaleValue(n[1])]),r;return this.orientation==="horizontal"?r=kl().y(n=>n[0]).x(n=>n[1])(e):r=kl().x(n=>n[0]).y(n=>n[1])(e),r?[{groupTexts:["plot",`line-plot-${this.plotIndex}`],type:"path",data:[{path:r,strokeFill:this.plotData.strokeFill,strokeWidth:this.plotData.strokeWidth}]}]:[]}}});var DS,Phe=N(()=>{"use strict";DS=class{constructor(e,r,n,i,a,s){this.barData=e;this.boundingRect=r;this.xAxis=n;this.yAxis=i;this.orientation=a;this.plotIndex=s}static{o(this,"BarPlot")}getDrawableElement(){let e=this.barData.data.map(a=>[this.xAxis.getScaleValue(a[0]),this.yAxis.getScaleValue(a[1])]),n=Math.min(this.xAxis.getAxisOuterPadding()*2,this.xAxis.getTickDistance())*(1-.05),i=n/2;return this.orientation==="horizontal"?[{groupTexts:["plot",`bar-plot-${this.plotIndex}`],type:"rect",data:e.map(a=>({x:this.boundingRect.x,y:a[0]-i,height:n,width:a[1]-this.boundingRect.x,fill:this.barData.fill,strokeWidth:0,strokeFill:this.barData.fill}))}]:[{groupTexts:["plot",`bar-plot-${this.plotIndex}`],type:"rect",data:e.map(a=>({x:a[0]-i,y:a[1],width:n,height:this.boundingRect.y+this.boundingRect.height-a[1],fill:this.barData.fill,strokeWidth:0,strokeFill:this.barData.fill}))}]}}});function Bhe(t,e,r){return new SO(t,e,r)}var SO,Fhe=N(()=>{"use strict";Ohe();Phe();SO=class{constructor(e,r,n){this.chartConfig=e;this.chartData=r;this.chartThemeConfig=n;this.boundingRect={x:0,y:0,width:0,height:0}}static{o(this,"BasePlot")}setAxes(e,r){this.xAxis=e,this.yAxis=r}setBoundingBoxXY(e){this.boundingRect.x=e.x,this.boundingRect.y=e.y}calculateSpace(e){return this.boundingRect.width=e.width,this.boundingRect.height=e.height,{width:this.boundingRect.width,height:this.boundingRect.height}}getDrawableElements(){if(!(this.xAxis&&this.yAxis))throw Error("Axes must be passed to render Plots");let e=[];for(let[r,n]of this.chartData.plots.entries())switch(n.type){case"line":{let i=new _S(n,this.xAxis,this.yAxis,this.chartConfig.chartOrientation,r);e.push(...i.getDrawableElement())}break;case"bar":{let i=new DS(n,this.boundingRect,this.xAxis,this.yAxis,this.chartConfig.chartOrientation,r);e.push(...i.getDrawableElement())}break}return e}};o(Bhe,"getPlotComponent")});var LS,$he=N(()=>{"use strict";Nhe();Ihe();Fhe();SS();LS=class{constructor(e,r,n,i){this.chartConfig=e;this.chartData=r;this.componentStore={title:Mhe(e,r,n,i),plot:Bhe(e,r,n),xAxis:kO(r.xAxis,e.xAxis,{titleColor:n.xAxisTitleColor,labelColor:n.xAxisLabelColor,tickColor:n.xAxisTickColor,axisLineColor:n.xAxisLineColor},i),yAxis:kO(r.yAxis,e.yAxis,{titleColor:n.yAxisTitleColor,labelColor:n.yAxisLabelColor,tickColor:n.yAxisTickColor,axisLineColor:n.yAxisLineColor},i)}}static{o(this,"Orchestrator")}calculateVerticalSpace(){let e=this.chartConfig.width,r=this.chartConfig.height,n=0,i=0,a=Math.floor(e*this.chartConfig.plotReservedSpacePercent/100),s=Math.floor(r*this.chartConfig.plotReservedSpacePercent/100),l=this.componentStore.plot.calculateSpace({width:a,height:s});e-=l.width,r-=l.height,l=this.componentStore.title.calculateSpace({width:this.chartConfig.width,height:r}),i=l.height,r-=l.height,this.componentStore.xAxis.setAxisPosition("bottom"),l=this.componentStore.xAxis.calculateSpace({width:e,height:r}),r-=l.height,this.componentStore.yAxis.setAxisPosition("left"),l=this.componentStore.yAxis.calculateSpace({width:e,height:r}),n=l.width,e-=l.width,e>0&&(a+=e,e=0),r>0&&(s+=r,r=0),this.componentStore.plot.calculateSpace({width:a,height:s}),this.componentStore.plot.setBoundingBoxXY({x:n,y:i}),this.componentStore.xAxis.setRange([n,n+a]),this.componentStore.xAxis.setBoundingBoxXY({x:n,y:i+s}),this.componentStore.yAxis.setRange([i,i+s]),this.componentStore.yAxis.setBoundingBoxXY({x:0,y:i}),this.chartData.plots.some(u=>bO(u))&&this.componentStore.xAxis.recalculateOuterPaddingToDrawBar()}calculateHorizontalSpace(){let e=this.chartConfig.width,r=this.chartConfig.height,n=0,i=0,a=0,s=Math.floor(e*this.chartConfig.plotReservedSpacePercent/100),l=Math.floor(r*this.chartConfig.plotReservedSpacePercent/100),u=this.componentStore.plot.calculateSpace({width:s,height:l});e-=u.width,r-=u.height,u=this.componentStore.title.calculateSpace({width:this.chartConfig.width,height:r}),n=u.height,r-=u.height,this.componentStore.xAxis.setAxisPosition("left"),u=this.componentStore.xAxis.calculateSpace({width:e,height:r}),e-=u.width,i=u.width,this.componentStore.yAxis.setAxisPosition("top"),u=this.componentStore.yAxis.calculateSpace({width:e,height:r}),r-=u.height,a=n+u.height,e>0&&(s+=e,e=0),r>0&&(l+=r,r=0),this.componentStore.plot.calculateSpace({width:s,height:l}),this.componentStore.plot.setBoundingBoxXY({x:i,y:a}),this.componentStore.yAxis.setRange([i,i+s]),this.componentStore.yAxis.setBoundingBoxXY({x:i,y:n}),this.componentStore.xAxis.setRange([a,a+l]),this.componentStore.xAxis.setBoundingBoxXY({x:0,y:a}),this.chartData.plots.some(h=>bO(h))&&this.componentStore.xAxis.recalculateOuterPaddingToDrawBar()}calculateSpace(){this.chartConfig.chartOrientation==="horizontal"?this.calculateHorizontalSpace():this.calculateVerticalSpace()}getDrawableElement(){this.calculateSpace();let e=[];this.componentStore.plot.setAxes(this.componentStore.xAxis,this.componentStore.yAxis);for(let r of Object.values(this.componentStore))e.push(...r.getDrawableElements());return e}}});var RS,zhe=N(()=>{"use strict";$he();RS=class{static{o(this,"XYChartBuilder")}static build(e,r,n,i){return new LS(e,r,n,i).getDrawableElement()}}});function Vhe(){let t=hh(),e=sr();return gi(t.xyChart,e.themeVariables.xyChart)}function Uhe(){let t=sr();return gi(lr.xyChart,t.xyChart)}function Hhe(){return{yAxis:{type:"linear",title:"",min:1/0,max:-1/0},xAxis:{type:"band",title:"",categories:[]},title:"",plots:[]}}function _O(t){let e=sr();return Tr(t.trim(),e)}function DGe(t){Ghe=t}function LGe(t){t==="horizontal"?Ab.chartOrientation="horizontal":Ab.chartOrientation="vertical"}function RGe(t){cn.xAxis.title=_O(t.text)}function Whe(t,e){cn.xAxis={type:"linear",title:cn.xAxis.title,min:t,max:e},NS=!0}function NGe(t){cn.xAxis={type:"band",title:cn.xAxis.title,categories:t.map(e=>_O(e.text))},NS=!0}function MGe(t){cn.yAxis.title=_O(t.text)}function IGe(t,e){cn.yAxis={type:"linear",title:cn.yAxis.title,min:t,max:e},AO=!0}function OGe(t){let e=Math.min(...t),r=Math.max(...t),n=M1(cn.yAxis)?cn.yAxis.min:1/0,i=M1(cn.yAxis)?cn.yAxis.max:-1/0;cn.yAxis={type:"linear",title:cn.yAxis.title,min:Math.min(n,e),max:Math.max(i,r)}}function qhe(t){let e=[];if(t.length===0)return e;if(!NS){let r=M1(cn.xAxis)?cn.xAxis.min:1/0,n=M1(cn.xAxis)?cn.xAxis.max:-1/0;Whe(Math.min(r,1),Math.max(n,t.length))}if(AO||OGe(t),ES(cn.xAxis)&&(e=cn.xAxis.categories.map((r,n)=>[r,t[n]])),M1(cn.xAxis)){let r=cn.xAxis.min,n=cn.xAxis.max,i=(n-r)/(t.length-1),a=[];for(let s=r;s<=n;s+=i)a.push(`${s}`);e=a.map((s,l)=>[s,t[l]])}return e}function Yhe(t){return CO[t===0?0:t%CO.length]}function PGe(t,e){let r=qhe(e);cn.plots.push({type:"line",strokeFill:Yhe(Cb),strokeWidth:2,data:r}),Cb++}function BGe(t,e){let r=qhe(e);cn.plots.push({type:"bar",fill:Yhe(Cb),data:r}),Cb++}function FGe(){if(cn.plots.length===0)throw Error("No Plot to render, please provide a plot with some data");return cn.title=Ir(),RS.build(Ab,cn,_b,Ghe)}function $Ge(){return _b}function zGe(){return Ab}function GGe(){return cn}var Cb,Ghe,Ab,_b,cn,CO,NS,AO,VGe,Xhe,jhe=N(()=>{"use strict";Bi();Ya();Py();nr();dr();mi();zhe();SS();Cb=0,Ab=Uhe(),_b=Vhe(),cn=Hhe(),CO=_b.plotColorPalette.split(",").map(t=>t.trim()),NS=!1,AO=!1;o(Vhe,"getChartDefaultThemeConfig");o(Uhe,"getChartDefaultConfig");o(Hhe,"getChartDefaultData");o(_O,"textSanitizer");o(DGe,"setTmpSVGG");o(LGe,"setOrientation");o(RGe,"setXAxisTitle");o(Whe,"setXAxisRangeData");o(NGe,"setXAxisBand");o(MGe,"setYAxisTitle");o(IGe,"setYAxisRangeData");o(OGe,"setYAxisRangeFromPlotData");o(qhe,"transformDataWithoutCategory");o(Yhe,"getPlotColorFromPalette");o(PGe,"setLineData");o(BGe,"setBarData");o(FGe,"getDrawableElem");o($Ge,"getChartThemeConfig");o(zGe,"getChartConfig");o(GGe,"getXYChartData");VGe=o(function(){Ar(),Cb=0,Ab=Uhe(),cn=Hhe(),_b=Vhe(),CO=_b.plotColorPalette.split(",").map(t=>t.trim()),NS=!1,AO=!1},"clear"),Xhe={getDrawableElem:FGe,clear:VGe,setAccTitle:Lr,getAccTitle:Rr,setDiagramTitle:$r,getDiagramTitle:Ir,getAccDescription:Mr,setAccDescription:Nr,setOrientation:LGe,setXAxisTitle:RGe,setXAxisRangeData:Whe,setXAxisBand:NGe,setYAxisTitle:MGe,setYAxisRangeData:IGe,setLineData:PGe,setBarData:BGe,setTmpSVGG:DGe,getChartThemeConfig:$Ge,getChartConfig:zGe,getXYChartData:GGe}});var UGe,Khe,Qhe=N(()=>{"use strict";vt();qc();Si();UGe=o((t,e,r,n)=>{let i=n.db,a=i.getChartThemeConfig(),s=i.getChartConfig(),l=i.getXYChartData().plots[0].data.map(w=>w[1]);function u(w){return w==="top"?"text-before-edge":"middle"}o(u,"getDominantBaseLine");function h(w){return w==="left"?"start":w==="right"?"end":"middle"}o(h,"getTextAnchor");function f(w){return`translate(${w.x}, ${w.y}) rotate(${w.rotation||0})`}o(f,"getTextTransformation"),X.debug(`Rendering xychart chart -`+t);let d=sa(e),p=d.append("g").attr("class","main"),m=p.append("rect").attr("width",s.width).attr("height",s.height).attr("class","background");vn(d,s.height,s.width,!0),d.attr("viewBox",`0 0 ${s.width} ${s.height}`),m.attr("fill",a.backgroundColor),i.setTmpSVGG(d.append("g").attr("class","mermaid-tmp-group"));let g=i.getDrawableElem(),y={};function v(w){let C=p,T="";for(let[E]of w.entries()){let A=p;E>0&&y[T]&&(A=y[T]),T+=w[E],C=y[T],C||(C=y[T]=A.append("g").attr("class",w[E]))}return C}o(v,"getGroup");for(let w of g){if(w.data.length===0)continue;let C=v(w.groupTexts);switch(w.type){case"rect":if(C.selectAll("rect").data(w.data).enter().append("rect").attr("x",T=>T.x).attr("y",T=>T.y).attr("width",T=>T.width).attr("height",T=>T.height).attr("fill",T=>T.fill).attr("stroke",T=>T.strokeFill).attr("stroke-width",T=>T.strokeWidth),s.showDataLabel)if(s.chartOrientation==="horizontal"){let A=function(I,L){let{data:k,label:D}=I;return L*D.length*.7<=k.width-10};var x=A;o(A,"fitsHorizontally");let T=.7,E=w.data.map((I,L)=>({data:I,label:l[L].toString()})).filter(I=>I.data.width>0&&I.data.height>0),S=E.map(I=>{let{data:L}=I,k=L.height*.7;for(;!A(I,k)&&k>0;)k-=1;return k}),_=Math.floor(Math.min(...S));C.selectAll("text").data(E).enter().append("text").attr("x",I=>I.data.x+I.data.width-10).attr("y",I=>I.data.y+I.data.height/2).attr("text-anchor","end").attr("dominant-baseline","middle").attr("fill","black").attr("font-size",`${_}px`).text(I=>I.label)}else{let A=function(I,L,k){let{data:D,label:R}=I,M=L*R.length*.7,P=D.x+D.width/2,B=P-M/2,F=P+M/2,z=B>=D.x&&F<=D.x+D.width,$=D.y+k+L<=D.y+D.height;return z&&$};var b=A;o(A,"fitsInBar");let T=10,E=w.data.map((I,L)=>({data:I,label:l[L].toString()})).filter(I=>I.data.width>0&&I.data.height>0),S=E.map(I=>{let{data:L,label:k}=I,D=L.width/(k.length*.7);for(;!A(I,D,10)&&D>0;)D-=1;return D}),_=Math.floor(Math.min(...S));C.selectAll("text").data(E).enter().append("text").attr("x",I=>I.data.x+I.data.width/2).attr("y",I=>I.data.y+10).attr("text-anchor","middle").attr("dominant-baseline","hanging").attr("fill","black").attr("font-size",`${_}px`).text(I=>I.label)}break;case"text":C.selectAll("text").data(w.data).enter().append("text").attr("x",0).attr("y",0).attr("fill",T=>T.fill).attr("font-size",T=>T.fontSize).attr("dominant-baseline",T=>u(T.verticalPos)).attr("text-anchor",T=>h(T.horizontalPos)).attr("transform",T=>f(T)).text(T=>T.text);break;case"path":C.selectAll("path").data(w.data).enter().append("path").attr("d",T=>T.path).attr("fill",T=>T.fill?T.fill:"none").attr("stroke",T=>T.strokeFill).attr("stroke-width",T=>T.strokeWidth);break}}},"draw"),Khe={draw:UGe}});var Zhe={};hr(Zhe,{diagram:()=>HGe});var HGe,Jhe=N(()=>{"use strict";Dhe();jhe();Qhe();HGe={parser:_he,db:Xhe,renderer:Khe}});var DO,rfe,nfe=N(()=>{"use strict";DO=function(){var t=o(function(ie,oe,V,we){for(V=V||{},we=ie.length;we--;V[ie[we]]=oe);return V},"o"),e=[1,3],r=[1,4],n=[1,5],i=[1,6],a=[5,6,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,77,89,90],s=[1,22],l=[2,7],u=[1,26],h=[1,27],f=[1,28],d=[1,29],p=[1,33],m=[1,34],g=[1,35],y=[1,36],v=[1,37],x=[1,38],b=[1,24],w=[1,31],C=[1,32],T=[1,30],E=[1,39],A=[1,40],S=[5,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,77,89,90],_=[1,61],I=[89,90],L=[5,8,9,11,13,21,22,23,24,27,29,41,42,43,44,45,46,54,61,63,72,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90],k=[27,29],D=[1,70],R=[1,71],O=[1,72],M=[1,73],P=[1,74],B=[1,75],F=[1,76],z=[1,83],$=[1,80],U=[1,84],Q=[1,85],te=[1,86],Y=[1,87],he=[1,88],Z=[1,89],ue=[1,90],K=[1,91],j=[1,92],ne=[5,8,9,11,13,21,22,23,24,27,41,42,43,44,45,46,54,72,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90],ee=[63,64],ce=[1,101],le=[5,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,76,77,89,90],J=[5,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90],Se=[1,110],se=[1,106],ae=[1,107],Oe=[1,108],ye=[1,109],Be=[1,111],He=[1,116],ze=[1,117],Le=[1,114],Ie=[1,115],xe={trace:o(function(){},"trace"),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,direction:17,styleStatement:18,classDefStatement:19,classStatement:20,direction_tb:21,direction_bt:22,direction_rl:23,direction_lr:24,requirementType:25,requirementName:26,STRUCT_START:27,requirementBody:28,STYLE_SEPARATOR:29,idList:30,ID:31,COLONSEP:32,id:33,TEXT:34,text:35,RISK:36,riskLevel:37,VERIFYMTHD:38,verifyType: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:54,elementName:55,elementBody:56,TYPE:57,type:58,DOCREF:59,ref:60,END_ARROW_L:61,relationship:62,LINE:63,END_ARROW_R:64,CONTAINS:65,COPIES:66,DERIVES:67,SATISFIES:68,VERIFIES:69,REFINES:70,TRACES:71,CLASSDEF:72,stylesOpt:73,CLASS:74,ALPHA:75,COMMA:76,STYLE:77,style:78,styleComponent:79,NUM:80,COLON:81,UNIT:82,SPACE:83,BRKT:84,PCT:85,MINUS:86,LABEL:87,SEMICOLON:88,unqString:89,qString:90,$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",21:"direction_tb",22:"direction_bt",23:"direction_rl",24:"direction_lr",27:"STRUCT_START",29:"STYLE_SEPARATOR",31:"ID",32:"COLONSEP",34:"TEXT",36:"RISK",38:"VERIFYMTHD",40:"STRUCT_STOP",41:"REQUIREMENT",42:"FUNCTIONAL_REQUIREMENT",43:"INTERFACE_REQUIREMENT",44:"PERFORMANCE_REQUIREMENT",45:"PHYSICAL_REQUIREMENT",46:"DESIGN_CONSTRAINT",47:"LOW_RISK",48:"MED_RISK",49:"HIGH_RISK",50:"VERIFY_ANALYSIS",51:"VERIFY_DEMONSTRATION",52:"VERIFY_INSPECTION",53:"VERIFY_TEST",54:"ELEMENT",57:"TYPE",59:"DOCREF",61:"END_ARROW_L",63:"LINE",64:"END_ARROW_R",65:"CONTAINS",66:"COPIES",67:"DERIVES",68:"SATISFIES",69:"VERIFIES",70:"REFINES",71:"TRACES",72:"CLASSDEF",74:"CLASS",75:"ALPHA",76:"COMMA",77:"STYLE",80:"NUM",81:"COLON",82:"UNIT",83:"SPACE",84:"BRKT",85:"PCT",86:"MINUS",87:"LABEL",88:"SEMICOLON",89:"unqString",90:"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],[7,2],[7,2],[7,2],[7,2],[17,1],[17,1],[17,1],[17,1],[14,5],[14,7],[28,5],[28,5],[28,5],[28,5],[28,2],[28,1],[25,1],[25,1],[25,1],[25,1],[25,1],[25,1],[37,1],[37,1],[37,1],[39,1],[39,1],[39,1],[39,1],[15,5],[15,7],[56,5],[56,5],[56,2],[56,1],[16,5],[16,5],[62,1],[62,1],[62,1],[62,1],[62,1],[62,1],[62,1],[19,3],[20,3],[20,3],[30,1],[30,3],[30,1],[30,3],[18,3],[73,1],[73,3],[78,1],[78,2],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[26,1],[26,1],[33,1],[33,1],[35,1],[35,1],[55,1],[55,1],[58,1],[58,1],[60,1],[60,1]],performAction:o(function(oe,V,we,W,pe,ve,Pe){var _e=ve.length-1;switch(pe){case 4:this.$=ve[_e].trim(),W.setAccTitle(this.$);break;case 5:case 6:this.$=ve[_e].trim(),W.setAccDescription(this.$);break;case 7:this.$=[];break;case 17:W.setDirection("TB");break;case 18:W.setDirection("BT");break;case 19:W.setDirection("RL");break;case 20:W.setDirection("LR");break;case 21:W.addRequirement(ve[_e-3],ve[_e-4]);break;case 22:W.addRequirement(ve[_e-5],ve[_e-6]),W.setClass([ve[_e-5]],ve[_e-3]);break;case 23:W.setNewReqId(ve[_e-2]);break;case 24:W.setNewReqText(ve[_e-2]);break;case 25:W.setNewReqRisk(ve[_e-2]);break;case 26:W.setNewReqVerifyMethod(ve[_e-2]);break;case 29:this.$=W.RequirementType.REQUIREMENT;break;case 30:this.$=W.RequirementType.FUNCTIONAL_REQUIREMENT;break;case 31:this.$=W.RequirementType.INTERFACE_REQUIREMENT;break;case 32:this.$=W.RequirementType.PERFORMANCE_REQUIREMENT;break;case 33:this.$=W.RequirementType.PHYSICAL_REQUIREMENT;break;case 34:this.$=W.RequirementType.DESIGN_CONSTRAINT;break;case 35:this.$=W.RiskLevel.LOW_RISK;break;case 36:this.$=W.RiskLevel.MED_RISK;break;case 37:this.$=W.RiskLevel.HIGH_RISK;break;case 38:this.$=W.VerifyType.VERIFY_ANALYSIS;break;case 39:this.$=W.VerifyType.VERIFY_DEMONSTRATION;break;case 40:this.$=W.VerifyType.VERIFY_INSPECTION;break;case 41:this.$=W.VerifyType.VERIFY_TEST;break;case 42:W.addElement(ve[_e-3]);break;case 43:W.addElement(ve[_e-5]),W.setClass([ve[_e-5]],ve[_e-3]);break;case 44:W.setNewElementType(ve[_e-2]);break;case 45:W.setNewElementDocRef(ve[_e-2]);break;case 48:W.addRelationship(ve[_e-2],ve[_e],ve[_e-4]);break;case 49:W.addRelationship(ve[_e-2],ve[_e-4],ve[_e]);break;case 50:this.$=W.Relationships.CONTAINS;break;case 51:this.$=W.Relationships.COPIES;break;case 52:this.$=W.Relationships.DERIVES;break;case 53:this.$=W.Relationships.SATISFIES;break;case 54:this.$=W.Relationships.VERIFIES;break;case 55:this.$=W.Relationships.REFINES;break;case 56:this.$=W.Relationships.TRACES;break;case 57:this.$=ve[_e-2],W.defineClass(ve[_e-1],ve[_e]);break;case 58:W.setClass(ve[_e-1],ve[_e]);break;case 59:W.setClass([ve[_e-2]],ve[_e]);break;case 60:case 62:this.$=[ve[_e]];break;case 61:case 63:this.$=ve[_e-2].concat([ve[_e]]);break;case 64:this.$=ve[_e-2],W.setCssStyle(ve[_e-1],ve[_e]);break;case 65:this.$=[ve[_e]];break;case 66:ve[_e-2].push(ve[_e]),this.$=ve[_e-2];break;case 68:this.$=ve[_e-1]+ve[_e];break}},"anonymous"),table:[{3:1,4:2,6:e,9:r,11:n,13:i},{1:[3]},{3:8,4:2,5:[1,7],6:e,9:r,11:n,13:i},{5:[1,9]},{10:[1,10]},{12:[1,11]},t(a,[2,6]),{3:12,4:2,6:e,9:r,11:n,13:i},{1:[2,2]},{4:17,5:s,7:13,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:w,74:C,77:T,89:E,90:A},t(a,[2,4]),t(a,[2,5]),{1:[2,1]},{8:[1,41]},{4:17,5:s,7:42,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:w,74:C,77:T,89:E,90:A},{4:17,5:s,7:43,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:w,74:C,77:T,89:E,90:A},{4:17,5:s,7:44,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:w,74:C,77:T,89:E,90:A},{4:17,5:s,7:45,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:w,74:C,77:T,89:E,90:A},{4:17,5:s,7:46,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:w,74:C,77:T,89:E,90:A},{4:17,5:s,7:47,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:w,74:C,77:T,89:E,90:A},{4:17,5:s,7:48,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:w,74:C,77:T,89:E,90:A},{4:17,5:s,7:49,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:w,74:C,77:T,89:E,90:A},{4:17,5:s,7:50,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:w,74:C,77:T,89:E,90:A},{26:51,89:[1,52],90:[1,53]},{55:54,89:[1,55],90:[1,56]},{29:[1,59],61:[1,57],63:[1,58]},t(S,[2,17]),t(S,[2,18]),t(S,[2,19]),t(S,[2,20]),{30:60,33:62,75:_,89:E,90:A},{30:63,33:62,75:_,89:E,90:A},{30:64,33:62,75:_,89:E,90:A},t(I,[2,29]),t(I,[2,30]),t(I,[2,31]),t(I,[2,32]),t(I,[2,33]),t(I,[2,34]),t(L,[2,81]),t(L,[2,82]),{1:[2,3]},{8:[2,8]},{8:[2,9]},{8:[2,10]},{8:[2,11]},{8:[2,12]},{8:[2,13]},{8:[2,14]},{8:[2,15]},{8:[2,16]},{27:[1,65],29:[1,66]},t(k,[2,79]),t(k,[2,80]),{27:[1,67],29:[1,68]},t(k,[2,85]),t(k,[2,86]),{62:69,65:D,66:R,67:O,68:M,69:P,70:B,71:F},{62:77,65:D,66:R,67:O,68:M,69:P,70:B,71:F},{30:78,33:62,75:_,89:E,90:A},{73:79,75:z,76:$,78:81,79:82,80:U,81:Q,82:te,83:Y,84:he,85:Z,86:ue,87:K,88:j},t(ne,[2,60]),t(ne,[2,62]),{73:93,75:z,76:$,78:81,79:82,80:U,81:Q,82:te,83:Y,84:he,85:Z,86:ue,87:K,88:j},{30:94,33:62,75:_,76:$,89:E,90:A},{5:[1,95]},{30:96,33:62,75:_,89:E,90:A},{5:[1,97]},{30:98,33:62,75:_,89:E,90:A},{63:[1,99]},t(ee,[2,50]),t(ee,[2,51]),t(ee,[2,52]),t(ee,[2,53]),t(ee,[2,54]),t(ee,[2,55]),t(ee,[2,56]),{64:[1,100]},t(S,[2,59],{76:$}),t(S,[2,64],{76:ce}),{33:103,75:[1,102],89:E,90:A},t(le,[2,65],{79:104,75:z,80:U,81:Q,82:te,83:Y,84:he,85:Z,86:ue,87:K,88:j}),t(J,[2,67]),t(J,[2,69]),t(J,[2,70]),t(J,[2,71]),t(J,[2,72]),t(J,[2,73]),t(J,[2,74]),t(J,[2,75]),t(J,[2,76]),t(J,[2,77]),t(J,[2,78]),t(S,[2,57],{76:ce}),t(S,[2,58],{76:$}),{5:Se,28:105,31:se,34:ae,36:Oe,38:ye,40:Be},{27:[1,112],76:$},{5:He,40:ze,56:113,57:Le,59:Ie},{27:[1,118],76:$},{33:119,89:E,90:A},{33:120,89:E,90:A},{75:z,78:121,79:82,80:U,81:Q,82:te,83:Y,84:he,85:Z,86:ue,87:K,88:j},t(ne,[2,61]),t(ne,[2,63]),t(J,[2,68]),t(S,[2,21]),{32:[1,122]},{32:[1,123]},{32:[1,124]},{32:[1,125]},{5:Se,28:126,31:se,34:ae,36:Oe,38:ye,40:Be},t(S,[2,28]),{5:[1,127]},t(S,[2,42]),{32:[1,128]},{32:[1,129]},{5:He,40:ze,56:130,57:Le,59:Ie},t(S,[2,47]),{5:[1,131]},t(S,[2,48]),t(S,[2,49]),t(le,[2,66],{79:104,75:z,80:U,81:Q,82:te,83:Y,84:he,85:Z,86:ue,87:K,88:j}),{33:132,89:E,90:A},{35:133,89:[1,134],90:[1,135]},{37:136,47:[1,137],48:[1,138],49:[1,139]},{39:140,50:[1,141],51:[1,142],52:[1,143],53:[1,144]},t(S,[2,27]),{5:Se,28:145,31:se,34:ae,36:Oe,38:ye,40:Be},{58:146,89:[1,147],90:[1,148]},{60:149,89:[1,150],90:[1,151]},t(S,[2,46]),{5:He,40:ze,56:152,57:Le,59:Ie},{5:[1,153]},{5:[1,154]},{5:[2,83]},{5:[2,84]},{5:[1,155]},{5:[2,35]},{5:[2,36]},{5:[2,37]},{5:[1,156]},{5:[2,38]},{5:[2,39]},{5:[2,40]},{5:[2,41]},t(S,[2,22]),{5:[1,157]},{5:[2,87]},{5:[2,88]},{5:[1,158]},{5:[2,89]},{5:[2,90]},t(S,[2,43]),{5:Se,28:159,31:se,34:ae,36:Oe,38:ye,40:Be},{5:Se,28:160,31:se,34:ae,36:Oe,38:ye,40:Be},{5:Se,28:161,31:se,34:ae,36:Oe,38:ye,40:Be},{5:Se,28:162,31:se,34:ae,36:Oe,38:ye,40:Be},{5:He,40:ze,56:163,57:Le,59:Ie},{5:He,40:ze,56:164,57:Le,59:Ie},t(S,[2,23]),t(S,[2,24]),t(S,[2,25]),t(S,[2,26]),t(S,[2,44]),t(S,[2,45])],defaultActions:{8:[2,2],12:[2,1],41:[2,3],42:[2,8],43:[2,9],44:[2,10],45:[2,11],46:[2,12],47:[2,13],48:[2,14],49:[2,15],50:[2,16],134:[2,83],135:[2,84],137:[2,35],138:[2,36],139:[2,37],141:[2,38],142:[2,39],143:[2,40],144:[2,41],147:[2,87],148:[2,88],150:[2,89],151:[2,90]},parseError:o(function(oe,V){if(V.recoverable)this.trace(oe);else{var we=new Error(oe);throw we.hash=V,we}},"parseError"),parse:o(function(oe){var V=this,we=[0],W=[],pe=[null],ve=[],Pe=this.table,_e="",be=0,Ve=0,De=0,qe=2,at=1,Lt=ve.slice.call(arguments,1),st=Object.create(this.lexer),Ue={yy:{}};for(var ct in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ct)&&(Ue.yy[ct]=this.yy[ct]);st.setInput(oe,Ue.yy),Ue.yy.lexer=st,Ue.yy.parser=this,typeof st.yylloc>"u"&&(st.yylloc={});var We=st.yylloc;ve.push(We);var ot=st.options&&st.options.ranges;typeof Ue.yy.parseError=="function"?this.parseError=Ue.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Yt(Dr){we.length=we.length-2*Dr,pe.length=pe.length-Dr,ve.length=ve.length-Dr}o(Yt,"popStack");function bt(){var Dr;return Dr=W.pop()||st.lex()||at,typeof Dr!="number"&&(Dr instanceof Array&&(W=Dr,Dr=W.pop()),Dr=V.symbols_[Dr]||Dr),Dr}o(bt,"lex");for(var Mt,xt,ut,Et,ft,yt,nt={},dn,Tt,On,tn;;){if(ut=we[we.length-1],this.defaultActions[ut]?Et=this.defaultActions[ut]:((Mt===null||typeof Mt>"u")&&(Mt=bt()),Et=Pe[ut]&&Pe[ut][Mt]),typeof Et>"u"||!Et.length||!Et[0]){var _r="";tn=[];for(dn in Pe[ut])this.terminals_[dn]&&dn>qe&&tn.push("'"+this.terminals_[dn]+"'");st.showPosition?_r="Parse error on line "+(be+1)+`: +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var P=this.next();return P||this.lex()},"lex"),begin:o(function(P){this.conditionStack.push(P)},"begin"),popState:o(function(){var P=this.conditionStack.length-1;return P>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(P){return P=this.conditionStack.length-1-Math.abs(P||0),P>=0?this.conditionStack[P]:"INITIAL"},"topState"),pushState:o(function(P){this.begin(P)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(P,B,F,z){var $=z;switch(F){case 0:break;case 1:break;case 2:return this.popState(),34;break;case 3:return this.popState(),34;break;case 4:return 34;case 5:break;case 6:return 10;case 7:return this.pushState("acc_title"),19;break;case 8:return this.popState(),"acc_title_value";break;case 9:return this.pushState("acc_descr"),21;break;case 10:return this.popState(),"acc_descr_value";break;case 11:this.pushState("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 5;case 15:return 8;case 16:return this.pushState("axis_data"),"X_AXIS";break;case 17:return this.pushState("axis_data"),"Y_AXIS";break;case 18:return this.pushState("axis_band_data"),24;break;case 19:return 31;case 20:return this.pushState("data"),16;break;case 21:return this.pushState("data"),18;break;case 22:return this.pushState("data_inner"),24;break;case 23:return 27;case 24:return this.popState(),26;break;case 25:this.popState();break;case 26:this.pushState("string");break;case 27:this.popState();break;case 28:return"STR";case 29:return 24;case 30:return 26;case 31:return 43;case 32:return"COLON";case 33:return 44;case 34:return 28;case 35:return 45;case 36:return 46;case 37:return 48;case 38:return 50;case 39:return 47;case 40:return 41;case 41:return 49;case 42:return 42;case 43:break;case 44:return 35;case 45:return 36}},"anonymous"),rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:(\r?\n))/i,/^(?:(\r?\n))/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:title\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:\{)/i,/^(?:[^\}]*)/i,/^(?:xychart-beta\b)/i,/^(?:(?:vertical|horizontal))/i,/^(?:x-axis\b)/i,/^(?:y-axis\b)/i,/^(?:\[)/i,/^(?:-->)/i,/^(?:line\b)/i,/^(?:bar\b)/i,/^(?:\[)/i,/^(?:[+-]?(?:\d+(?:\.\d+)?|\.\d+))/i,/^(?:\])/i,/^(?:(?:`\) \{ this\.pushState\(md_string\); \}\n\(\?:\(\?!`"\)\.\)\+ \{ return MD_STR; \}\n\(\?:`))/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:\[)/i,/^(?:\])/i,/^(?:[A-Za-z]+)/i,/^(?::)/i,/^(?:\+)/i,/^(?:,)/i,/^(?:=)/i,/^(?:\*)/i,/^(?:#)/i,/^(?:[\_])/i,/^(?:\.)/i,/^(?:&)/i,/^(?:-)/i,/^(?:[0-9]+)/i,/^(?:\s+)/i,/^(?:;)/i,/^(?:$)/i],conditions:{data_inner:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,23,24,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},data:{rules:[0,1,3,4,5,6,7,9,11,14,15,16,17,20,21,22,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},axis_band_data:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,24,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},axis_data:{rules:[0,1,2,4,5,6,7,9,11,14,15,16,17,18,19,20,21,23,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0},acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},title:{rules:[],inclusive:!1},md_string:{rules:[],inclusive:!1},string:{rules:[27,28],inclusive:!1},INITIAL:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,20,21,25,26,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],inclusive:!0}}};return I}();k.lexer=L;function A(){this.yy={}}return o(A,"Parser"),A.prototype=k,k.Parser=A,new A}();tP.parser=tP;Hfe=tP});function rP(t){return t.type==="bar"}function BS(t){return t.type==="band"}function N1(t){return t.type==="linear"}var FS=N(()=>{"use strict";o(rP,"isBarPlot");o(BS,"isBandAxisData");o(N1,"isLinearAxisData")});var M1,nP=N(()=>{"use strict";ao();M1=class{constructor(e){this.parentGroup=e}static{o(this,"TextDimensionCalculatorWithFont")}getMaxDimension(e,r){if(!this.parentGroup)return{width:e.reduce((a,s)=>Math.max(s.length,a),0)*r,height:r};let n={width:0,height:0},i=this.parentGroup.append("g").attr("visibility","hidden").attr("font-size",r);for(let a of e){let s=wQ(i,1,a),l=s?s.width:a.length*r,u=s?s.height:r;n.width=Math.max(n.width,l),n.height=Math.max(n.height,u)}return i.remove(),n}}});var I1,iP=N(()=>{"use strict";I1=class{constructor(e,r,n,i){this.axisConfig=e;this.title=r;this.textDimensionCalculator=n;this.axisThemeConfig=i;this.boundingRect={x:0,y:0,width:0,height:0};this.axisPosition="left";this.showTitle=!1;this.showLabel=!1;this.showTick=!1;this.showAxisLine=!1;this.outerPadding=0;this.titleTextHeight=0;this.labelTextHeight=0;this.range=[0,10],this.boundingRect={x:0,y:0,width:0,height:0},this.axisPosition="left"}static{o(this,"BaseAxis")}setRange(e){this.range=e,this.axisPosition==="left"||this.axisPosition==="right"?this.boundingRect.height=e[1]-e[0]:this.boundingRect.width=e[1]-e[0],this.recalculateScale()}getRange(){return[this.range[0]+this.outerPadding,this.range[1]-this.outerPadding]}setAxisPosition(e){this.axisPosition=e,this.setRange(this.range)}getTickDistance(){let e=this.getRange();return Math.abs(e[0]-e[1])/this.getTickValues().length}getAxisOuterPadding(){return this.outerPadding}getLabelDimension(){return this.textDimensionCalculator.getMaxDimension(this.getTickValues().map(e=>e.toString()),this.axisConfig.labelFontSize)}recalculateOuterPaddingToDrawBar(){.7*this.getTickDistance()>this.outerPadding*2&&(this.outerPadding=Math.floor(.7*this.getTickDistance()/2)),this.recalculateScale()}calculateSpaceIfDrawnHorizontally(e){let r=e.height;if(this.axisConfig.showAxisLine&&r>this.axisConfig.axisLineWidth&&(r-=this.axisConfig.axisLineWidth,this.showAxisLine=!0),this.axisConfig.showLabel){let n=this.getLabelDimension(),i=.2*e.width;this.outerPadding=Math.min(n.width/2,i);let a=n.height+this.axisConfig.labelPadding*2;this.labelTextHeight=n.height,a<=r&&(r-=a,this.showLabel=!0)}if(this.axisConfig.showTick&&r>=this.axisConfig.tickLength&&(this.showTick=!0,r-=this.axisConfig.tickLength),this.axisConfig.showTitle&&this.title){let n=this.textDimensionCalculator.getMaxDimension([this.title],this.axisConfig.titleFontSize),i=n.height+this.axisConfig.titlePadding*2;this.titleTextHeight=n.height,i<=r&&(r-=i,this.showTitle=!0)}this.boundingRect.width=e.width,this.boundingRect.height=e.height-r}calculateSpaceIfDrawnVertical(e){let r=e.width;if(this.axisConfig.showAxisLine&&r>this.axisConfig.axisLineWidth&&(r-=this.axisConfig.axisLineWidth,this.showAxisLine=!0),this.axisConfig.showLabel){let n=this.getLabelDimension(),i=.2*e.height;this.outerPadding=Math.min(n.height/2,i);let a=n.width+this.axisConfig.labelPadding*2;a<=r&&(r-=a,this.showLabel=!0)}if(this.axisConfig.showTick&&r>=this.axisConfig.tickLength&&(this.showTick=!0,r-=this.axisConfig.tickLength),this.axisConfig.showTitle&&this.title){let n=this.textDimensionCalculator.getMaxDimension([this.title],this.axisConfig.titleFontSize),i=n.height+this.axisConfig.titlePadding*2;this.titleTextHeight=n.height,i<=r&&(r-=i,this.showTitle=!0)}this.boundingRect.width=e.width-r,this.boundingRect.height=e.height}calculateSpace(e){return this.axisPosition==="left"||this.axisPosition==="right"?this.calculateSpaceIfDrawnVertical(e):this.calculateSpaceIfDrawnHorizontally(e),this.recalculateScale(),{width:this.boundingRect.width,height:this.boundingRect.height}}setBoundingBoxXY(e){this.boundingRect.x=e.x,this.boundingRect.y=e.y}getDrawableElementsForLeftAxis(){let e=[];if(this.showAxisLine){let r=this.boundingRect.x+this.boundingRect.width-this.axisConfig.axisLineWidth/2;e.push({type:"path",groupTexts:["left-axis","axisl-line"],data:[{path:`M ${r},${this.boundingRect.y} L ${r},${this.boundingRect.y+this.boundingRect.height} `,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&e.push({type:"text",groupTexts:["left-axis","label"],data:this.getTickValues().map(r=>({text:r.toString(),x:this.boundingRect.x+this.boundingRect.width-(this.showLabel?this.axisConfig.labelPadding:0)-(this.showTick?this.axisConfig.tickLength:0)-(this.showAxisLine?this.axisConfig.axisLineWidth:0),y:this.getScaleValue(r),fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"middle",horizontalPos:"right"}))}),this.showTick){let r=this.boundingRect.x+this.boundingRect.width-(this.showAxisLine?this.axisConfig.axisLineWidth:0);e.push({type:"path",groupTexts:["left-axis","ticks"],data:this.getTickValues().map(n=>({path:`M ${r},${this.getScaleValue(n)} L ${r-this.axisConfig.tickLength},${this.getScaleValue(n)}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&e.push({type:"text",groupTexts:["left-axis","title"],data:[{text:this.title,x:this.boundingRect.x+this.axisConfig.titlePadding,y:this.boundingRect.y+this.boundingRect.height/2,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:270,verticalPos:"top",horizontalPos:"center"}]}),e}getDrawableElementsForBottomAxis(){let e=[];if(this.showAxisLine){let r=this.boundingRect.y+this.axisConfig.axisLineWidth/2;e.push({type:"path",groupTexts:["bottom-axis","axis-line"],data:[{path:`M ${this.boundingRect.x},${r} L ${this.boundingRect.x+this.boundingRect.width},${r}`,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&e.push({type:"text",groupTexts:["bottom-axis","label"],data:this.getTickValues().map(r=>({text:r.toString(),x:this.getScaleValue(r),y:this.boundingRect.y+this.axisConfig.labelPadding+(this.showTick?this.axisConfig.tickLength:0)+(this.showAxisLine?this.axisConfig.axisLineWidth:0),fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}))}),this.showTick){let r=this.boundingRect.y+(this.showAxisLine?this.axisConfig.axisLineWidth:0);e.push({type:"path",groupTexts:["bottom-axis","ticks"],data:this.getTickValues().map(n=>({path:`M ${this.getScaleValue(n)},${r} L ${this.getScaleValue(n)},${r+this.axisConfig.tickLength}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&e.push({type:"text",groupTexts:["bottom-axis","title"],data:[{text:this.title,x:this.range[0]+(this.range[1]-this.range[0])/2,y:this.boundingRect.y+this.boundingRect.height-this.axisConfig.titlePadding-this.titleTextHeight,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}]}),e}getDrawableElementsForTopAxis(){let e=[];if(this.showAxisLine){let r=this.boundingRect.y+this.boundingRect.height-this.axisConfig.axisLineWidth/2;e.push({type:"path",groupTexts:["top-axis","axis-line"],data:[{path:`M ${this.boundingRect.x},${r} L ${this.boundingRect.x+this.boundingRect.width},${r}`,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&e.push({type:"text",groupTexts:["top-axis","label"],data:this.getTickValues().map(r=>({text:r.toString(),x:this.getScaleValue(r),y:this.boundingRect.y+(this.showTitle?this.titleTextHeight+this.axisConfig.titlePadding*2:0)+this.axisConfig.labelPadding,fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}))}),this.showTick){let r=this.boundingRect.y;e.push({type:"path",groupTexts:["top-axis","ticks"],data:this.getTickValues().map(n=>({path:`M ${this.getScaleValue(n)},${r+this.boundingRect.height-(this.showAxisLine?this.axisConfig.axisLineWidth:0)} L ${this.getScaleValue(n)},${r+this.boundingRect.height-this.axisConfig.tickLength-(this.showAxisLine?this.axisConfig.axisLineWidth:0)}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&e.push({type:"text",groupTexts:["top-axis","title"],data:[{text:this.title,x:this.boundingRect.x+this.boundingRect.width/2,y:this.boundingRect.y+this.axisConfig.titlePadding,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}]}),e}getDrawableElements(){if(this.axisPosition==="left")return this.getDrawableElementsForLeftAxis();if(this.axisPosition==="right")throw Error("Drawing of right axis is not implemented");return this.axisPosition==="bottom"?this.getDrawableElementsForBottomAxis():this.axisPosition==="top"?this.getDrawableElementsForTopAxis():[]}}});var $S,qfe=N(()=>{"use strict";fr();yt();iP();$S=class extends I1{static{o(this,"BandAxis")}constructor(e,r,n,i,a){super(e,i,a,r),this.categories=n,this.scale=V0().domain(this.categories).range(this.getRange())}setRange(e){super.setRange(e)}recalculateScale(){this.scale=V0().domain(this.categories).range(this.getRange()).paddingInner(1).paddingOuter(0).align(.5),X.trace("BandAxis axis final categories, range: ",this.categories,this.getRange())}getTickValues(){return this.categories}getScaleValue(e){return this.scale(e)??this.getRange()[0]}}});var zS,Yfe=N(()=>{"use strict";fr();iP();zS=class extends I1{static{o(this,"LinearAxis")}constructor(e,r,n,i,a){super(e,i,a,r),this.domain=n,this.scale=Tl().domain(this.domain).range(this.getRange())}getTickValues(){return this.scale.ticks()}recalculateScale(){let e=[...this.domain];this.axisPosition==="left"&&e.reverse(),this.scale=Tl().domain(e).range(this.getRange())}getScaleValue(e){return this.scale(e)}}});function aP(t,e,r,n){let i=new M1(n);return BS(t)?new $S(e,r,t.categories,t.title,i):new zS(e,r,[t.min,t.max],t.title,i)}var Xfe=N(()=>{"use strict";FS();nP();qfe();Yfe();o(aP,"getAxis")});function jfe(t,e,r,n){let i=new M1(n);return new sP(i,t,e,r)}var sP,Kfe=N(()=>{"use strict";nP();sP=class{constructor(e,r,n,i){this.textDimensionCalculator=e;this.chartConfig=r;this.chartData=n;this.chartThemeConfig=i;this.boundingRect={x:0,y:0,width:0,height:0},this.showChartTitle=!1}static{o(this,"ChartTitle")}setBoundingBoxXY(e){this.boundingRect.x=e.x,this.boundingRect.y=e.y}calculateSpace(e){let r=this.textDimensionCalculator.getMaxDimension([this.chartData.title],this.chartConfig.titleFontSize),n=Math.max(r.width,e.width),i=r.height+2*this.chartConfig.titlePadding;return r.width<=n&&r.height<=i&&this.chartConfig.showTitle&&this.chartData.title&&(this.boundingRect.width=n,this.boundingRect.height=i,this.showChartTitle=!0),{width:this.boundingRect.width,height:this.boundingRect.height}}getDrawableElements(){let e=[];return this.showChartTitle&&e.push({groupTexts:["chart-title"],type:"text",data:[{fontSize:this.chartConfig.titleFontSize,text:this.chartData.title,verticalPos:"middle",horizontalPos:"center",x:this.boundingRect.x+this.boundingRect.width/2,y:this.boundingRect.y+this.boundingRect.height/2,fill:this.chartThemeConfig.titleColor,rotation:0}]}),e}};o(jfe,"getChartTitleComponent")});var GS,Qfe=N(()=>{"use strict";fr();GS=class{constructor(e,r,n,i,a){this.plotData=e;this.xAxis=r;this.yAxis=n;this.orientation=i;this.plotIndex=a}static{o(this,"LinePlot")}getDrawableElement(){let e=this.plotData.data.map(n=>[this.xAxis.getScaleValue(n[0]),this.yAxis.getScaleValue(n[1])]),r;return this.orientation==="horizontal"?r=Cl().y(n=>n[0]).x(n=>n[1])(e):r=Cl().x(n=>n[0]).y(n=>n[1])(e),r?[{groupTexts:["plot",`line-plot-${this.plotIndex}`],type:"path",data:[{path:r,strokeFill:this.plotData.strokeFill,strokeWidth:this.plotData.strokeWidth}]}]:[]}}});var VS,Zfe=N(()=>{"use strict";VS=class{constructor(e,r,n,i,a,s){this.barData=e;this.boundingRect=r;this.xAxis=n;this.yAxis=i;this.orientation=a;this.plotIndex=s}static{o(this,"BarPlot")}getDrawableElement(){let e=this.barData.data.map(a=>[this.xAxis.getScaleValue(a[0]),this.yAxis.getScaleValue(a[1])]),n=Math.min(this.xAxis.getAxisOuterPadding()*2,this.xAxis.getTickDistance())*(1-.05),i=n/2;return this.orientation==="horizontal"?[{groupTexts:["plot",`bar-plot-${this.plotIndex}`],type:"rect",data:e.map(a=>({x:this.boundingRect.x,y:a[0]-i,height:n,width:a[1]-this.boundingRect.x,fill:this.barData.fill,strokeWidth:0,strokeFill:this.barData.fill}))}]:[{groupTexts:["plot",`bar-plot-${this.plotIndex}`],type:"rect",data:e.map(a=>({x:a[0]-i,y:a[1],width:n,height:this.boundingRect.y+this.boundingRect.height-a[1],fill:this.barData.fill,strokeWidth:0,strokeFill:this.barData.fill}))}]}}});function Jfe(t,e,r){return new oP(t,e,r)}var oP,ede=N(()=>{"use strict";Qfe();Zfe();oP=class{constructor(e,r,n){this.chartConfig=e;this.chartData=r;this.chartThemeConfig=n;this.boundingRect={x:0,y:0,width:0,height:0}}static{o(this,"BasePlot")}setAxes(e,r){this.xAxis=e,this.yAxis=r}setBoundingBoxXY(e){this.boundingRect.x=e.x,this.boundingRect.y=e.y}calculateSpace(e){return this.boundingRect.width=e.width,this.boundingRect.height=e.height,{width:this.boundingRect.width,height:this.boundingRect.height}}getDrawableElements(){if(!(this.xAxis&&this.yAxis))throw Error("Axes must be passed to render Plots");let e=[];for(let[r,n]of this.chartData.plots.entries())switch(n.type){case"line":{let i=new GS(n,this.xAxis,this.yAxis,this.chartConfig.chartOrientation,r);e.push(...i.getDrawableElement())}break;case"bar":{let i=new VS(n,this.boundingRect,this.xAxis,this.yAxis,this.chartConfig.chartOrientation,r);e.push(...i.getDrawableElement())}break}return e}};o(Jfe,"getPlotComponent")});var US,tde=N(()=>{"use strict";Xfe();Kfe();ede();FS();US=class{constructor(e,r,n,i){this.chartConfig=e;this.chartData=r;this.componentStore={title:jfe(e,r,n,i),plot:Jfe(e,r,n),xAxis:aP(r.xAxis,e.xAxis,{titleColor:n.xAxisTitleColor,labelColor:n.xAxisLabelColor,tickColor:n.xAxisTickColor,axisLineColor:n.xAxisLineColor},i),yAxis:aP(r.yAxis,e.yAxis,{titleColor:n.yAxisTitleColor,labelColor:n.yAxisLabelColor,tickColor:n.yAxisTickColor,axisLineColor:n.yAxisLineColor},i)}}static{o(this,"Orchestrator")}calculateVerticalSpace(){let e=this.chartConfig.width,r=this.chartConfig.height,n=0,i=0,a=Math.floor(e*this.chartConfig.plotReservedSpacePercent/100),s=Math.floor(r*this.chartConfig.plotReservedSpacePercent/100),l=this.componentStore.plot.calculateSpace({width:a,height:s});e-=l.width,r-=l.height,l=this.componentStore.title.calculateSpace({width:this.chartConfig.width,height:r}),i=l.height,r-=l.height,this.componentStore.xAxis.setAxisPosition("bottom"),l=this.componentStore.xAxis.calculateSpace({width:e,height:r}),r-=l.height,this.componentStore.yAxis.setAxisPosition("left"),l=this.componentStore.yAxis.calculateSpace({width:e,height:r}),n=l.width,e-=l.width,e>0&&(a+=e,e=0),r>0&&(s+=r,r=0),this.componentStore.plot.calculateSpace({width:a,height:s}),this.componentStore.plot.setBoundingBoxXY({x:n,y:i}),this.componentStore.xAxis.setRange([n,n+a]),this.componentStore.xAxis.setBoundingBoxXY({x:n,y:i+s}),this.componentStore.yAxis.setRange([i,i+s]),this.componentStore.yAxis.setBoundingBoxXY({x:0,y:i}),this.chartData.plots.some(u=>rP(u))&&this.componentStore.xAxis.recalculateOuterPaddingToDrawBar()}calculateHorizontalSpace(){let e=this.chartConfig.width,r=this.chartConfig.height,n=0,i=0,a=0,s=Math.floor(e*this.chartConfig.plotReservedSpacePercent/100),l=Math.floor(r*this.chartConfig.plotReservedSpacePercent/100),u=this.componentStore.plot.calculateSpace({width:s,height:l});e-=u.width,r-=u.height,u=this.componentStore.title.calculateSpace({width:this.chartConfig.width,height:r}),n=u.height,r-=u.height,this.componentStore.xAxis.setAxisPosition("left"),u=this.componentStore.xAxis.calculateSpace({width:e,height:r}),e-=u.width,i=u.width,this.componentStore.yAxis.setAxisPosition("top"),u=this.componentStore.yAxis.calculateSpace({width:e,height:r}),r-=u.height,a=n+u.height,e>0&&(s+=e,e=0),r>0&&(l+=r,r=0),this.componentStore.plot.calculateSpace({width:s,height:l}),this.componentStore.plot.setBoundingBoxXY({x:i,y:a}),this.componentStore.yAxis.setRange([i,i+s]),this.componentStore.yAxis.setBoundingBoxXY({x:i,y:n}),this.componentStore.xAxis.setRange([a,a+l]),this.componentStore.xAxis.setBoundingBoxXY({x:0,y:a}),this.chartData.plots.some(h=>rP(h))&&this.componentStore.xAxis.recalculateOuterPaddingToDrawBar()}calculateSpace(){this.chartConfig.chartOrientation==="horizontal"?this.calculateHorizontalSpace():this.calculateVerticalSpace()}getDrawableElement(){this.calculateSpace();let e=[];this.componentStore.plot.setAxes(this.componentStore.xAxis,this.componentStore.yAxis);for(let r of Object.values(this.componentStore))e.push(...r.getDrawableElements());return e}}});var HS,rde=N(()=>{"use strict";tde();HS=class{static{o(this,"XYChartBuilder")}static build(e,r,n,i){return new US(e,r,n,i).getDrawableElement()}}});function ide(){let t=dh(),e=tr();return $n(t.xyChart,e.themeVariables.xyChart)}function ade(){let t=tr();return $n(or.xyChart,t.xyChart)}function sde(){return{yAxis:{type:"linear",title:"",min:1/0,max:-1/0},xAxis:{type:"band",title:"",categories:[]},title:"",plots:[]}}function uP(t){let e=tr();return wr(t.trim(),e)}function dUe(t){nde=t}function pUe(t){t==="horizontal"?Rb.chartOrientation="horizontal":Rb.chartOrientation="vertical"}function mUe(t){cn.xAxis.title=uP(t.text)}function ode(t,e){cn.xAxis={type:"linear",title:cn.xAxis.title,min:t,max:e},WS=!0}function gUe(t){cn.xAxis={type:"band",title:cn.xAxis.title,categories:t.map(e=>uP(e.text))},WS=!0}function yUe(t){cn.yAxis.title=uP(t.text)}function vUe(t,e){cn.yAxis={type:"linear",title:cn.yAxis.title,min:t,max:e},cP=!0}function xUe(t){let e=Math.min(...t),r=Math.max(...t),n=N1(cn.yAxis)?cn.yAxis.min:1/0,i=N1(cn.yAxis)?cn.yAxis.max:-1/0;cn.yAxis={type:"linear",title:cn.yAxis.title,min:Math.min(n,e),max:Math.max(i,r)}}function lde(t){let e=[];if(t.length===0)return e;if(!WS){let r=N1(cn.xAxis)?cn.xAxis.min:1/0,n=N1(cn.xAxis)?cn.xAxis.max:-1/0;ode(Math.min(r,1),Math.max(n,t.length))}if(cP||xUe(t),BS(cn.xAxis)&&(e=cn.xAxis.categories.map((r,n)=>[r,t[n]])),N1(cn.xAxis)){let r=cn.xAxis.min,n=cn.xAxis.max,i=(n-r)/(t.length-1),a=[];for(let s=r;s<=n;s+=i)a.push(`${s}`);e=a.map((s,l)=>[s,t[l]])}return e}function cde(t){return lP[t===0?0:t%lP.length]}function bUe(t,e){let r=lde(e);cn.plots.push({type:"line",strokeFill:cde(Lb),strokeWidth:2,data:r}),Lb++}function TUe(t,e){let r=lde(e);cn.plots.push({type:"bar",fill:cde(Lb),data:r}),Lb++}function wUe(){if(cn.plots.length===0)throw Error("No Plot to render, please provide a plot with some data");return cn.title=Nr(),HS.build(Rb,cn,Nb,nde)}function kUe(){return Nb}function EUe(){return Rb}function SUe(){return cn}var Lb,nde,Rb,Nb,cn,lP,WS,cP,CUe,ude,hde=N(()=>{"use strict";mi();_a();By();er();pr();ci();rde();FS();Lb=0,Rb=ade(),Nb=ide(),cn=sde(),lP=Nb.plotColorPalette.split(",").map(t=>t.trim()),WS=!1,cP=!1;o(ide,"getChartDefaultThemeConfig");o(ade,"getChartDefaultConfig");o(sde,"getChartDefaultData");o(uP,"textSanitizer");o(dUe,"setTmpSVGG");o(pUe,"setOrientation");o(mUe,"setXAxisTitle");o(ode,"setXAxisRangeData");o(gUe,"setXAxisBand");o(yUe,"setYAxisTitle");o(vUe,"setYAxisRangeData");o(xUe,"setYAxisRangeFromPlotData");o(lde,"transformDataWithoutCategory");o(cde,"getPlotColorFromPalette");o(bUe,"setLineData");o(TUe,"setBarData");o(wUe,"getDrawableElem");o(kUe,"getChartThemeConfig");o(EUe,"getChartConfig");o(SUe,"getXYChartData");CUe=o(function(){kr(),Lb=0,Rb=ade(),cn=sde(),Nb=ide(),lP=Nb.plotColorPalette.split(",").map(t=>t.trim()),WS=!1,cP=!1},"clear"),ude={getDrawableElem:wUe,clear:CUe,setAccTitle:Ar,getAccTitle:Dr,setDiagramTitle:Or,getDiagramTitle:Nr,getAccDescription:Rr,setAccDescription:Lr,setOrientation:pUe,setXAxisTitle:mUe,setXAxisRangeData:ode,setXAxisBand:gUe,setYAxisTitle:yUe,setYAxisRangeData:vUe,setLineData:bUe,setBarData:TUe,setTmpSVGG:dUe,getChartThemeConfig:kUe,getChartConfig:EUe,getXYChartData:SUe}});var AUe,fde,dde=N(()=>{"use strict";yt();Vl();xi();AUe=o((t,e,r,n)=>{let i=n.db,a=i.getChartThemeConfig(),s=i.getChartConfig(),l=i.getXYChartData().plots[0].data.map(T=>T[1]);function u(T){return T==="top"?"text-before-edge":"middle"}o(u,"getDominantBaseLine");function h(T){return T==="left"?"start":T==="right"?"end":"middle"}o(h,"getTextAnchor");function f(T){return`translate(${T.x}, ${T.y}) rotate(${T.rotation||0})`}o(f,"getTextTransformation"),X.debug(`Rendering xychart chart +`+t);let d=Li(e),p=d.append("g").attr("class","main"),m=p.append("rect").attr("width",s.width).attr("height",s.height).attr("class","background");fn(d,s.height,s.width,!0),d.attr("viewBox",`0 0 ${s.width} ${s.height}`),m.attr("fill",a.backgroundColor),i.setTmpSVGG(d.append("g").attr("class","mermaid-tmp-group"));let g=i.getDrawableElem(),y={};function v(T){let S=p,w="";for(let[E]of T.entries()){let _=p;E>0&&y[w]&&(_=y[w]),w+=T[E],S=y[w],S||(S=y[w]=_.append("g").attr("class",T[E]))}return S}o(v,"getGroup");for(let T of g){if(T.data.length===0)continue;let S=v(T.groupTexts);switch(T.type){case"rect":if(S.selectAll("rect").data(T.data).enter().append("rect").attr("x",w=>w.x).attr("y",w=>w.y).attr("width",w=>w.width).attr("height",w=>w.height).attr("fill",w=>w.fill).attr("stroke",w=>w.strokeFill).attr("stroke-width",w=>w.strokeWidth),s.showDataLabel)if(s.chartOrientation==="horizontal"){let _=function(O,R){let{data:k,label:L}=O;return R*L.length*.7<=k.width-10};var x=_;o(_,"fitsHorizontally");let w=.7,E=T.data.map((O,R)=>({data:O,label:l[R].toString()})).filter(O=>O.data.width>0&&O.data.height>0),C=E.map(O=>{let{data:R}=O,k=R.height*.7;for(;!_(O,k)&&k>0;)k-=1;return k}),D=Math.floor(Math.min(...C));S.selectAll("text").data(E).enter().append("text").attr("x",O=>O.data.x+O.data.width-10).attr("y",O=>O.data.y+O.data.height/2).attr("text-anchor","end").attr("dominant-baseline","middle").attr("fill","black").attr("font-size",`${D}px`).text(O=>O.label)}else{let _=function(O,R,k){let{data:L,label:A}=O,M=R*A.length*.7,P=L.x+L.width/2,B=P-M/2,F=P+M/2,z=B>=L.x&&F<=L.x+L.width,$=L.y+k+R<=L.y+L.height;return z&&$};var b=_;o(_,"fitsInBar");let w=10,E=T.data.map((O,R)=>({data:O,label:l[R].toString()})).filter(O=>O.data.width>0&&O.data.height>0),C=E.map(O=>{let{data:R,label:k}=O,L=R.width/(k.length*.7);for(;!_(O,L,10)&&L>0;)L-=1;return L}),D=Math.floor(Math.min(...C));S.selectAll("text").data(E).enter().append("text").attr("x",O=>O.data.x+O.data.width/2).attr("y",O=>O.data.y+10).attr("text-anchor","middle").attr("dominant-baseline","hanging").attr("fill","black").attr("font-size",`${D}px`).text(O=>O.label)}break;case"text":S.selectAll("text").data(T.data).enter().append("text").attr("x",0).attr("y",0).attr("fill",w=>w.fill).attr("font-size",w=>w.fontSize).attr("dominant-baseline",w=>u(w.verticalPos)).attr("text-anchor",w=>h(w.horizontalPos)).attr("transform",w=>f(w)).text(w=>w.text);break;case"path":S.selectAll("path").data(T.data).enter().append("path").attr("d",w=>w.path).attr("fill",w=>w.fill?w.fill:"none").attr("stroke",w=>w.strokeFill).attr("stroke-width",w=>w.strokeWidth);break}}},"draw"),fde={draw:AUe}});var pde={};ur(pde,{diagram:()=>_Ue});var _Ue,mde=N(()=>{"use strict";Wfe();hde();dde();_Ue={parser:Hfe,db:ude,renderer:fde}});var hP,vde,xde=N(()=>{"use strict";hP=function(){var t=o(function(ie,oe,V,Te){for(V=V||{},Te=ie.length;Te--;V[ie[Te]]=oe);return V},"o"),e=[1,3],r=[1,4],n=[1,5],i=[1,6],a=[5,6,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,77,89,90],s=[1,22],l=[2,7],u=[1,26],h=[1,27],f=[1,28],d=[1,29],p=[1,33],m=[1,34],g=[1,35],y=[1,36],v=[1,37],x=[1,38],b=[1,24],T=[1,31],S=[1,32],w=[1,30],E=[1,39],_=[1,40],C=[5,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,77,89,90],D=[1,61],O=[89,90],R=[5,8,9,11,13,21,22,23,24,27,29,41,42,43,44,45,46,54,61,63,72,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90],k=[27,29],L=[1,70],A=[1,71],I=[1,72],M=[1,73],P=[1,74],B=[1,75],F=[1,76],z=[1,83],$=[1,80],U=[1,84],K=[1,85],ee=[1,86],Y=[1,87],ce=[1,88],Z=[1,89],ue=[1,90],Q=[1,91],j=[1,92],ne=[5,8,9,11,13,21,22,23,24,27,41,42,43,44,45,46,54,72,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90],te=[63,64],he=[1,101],le=[5,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,76,77,89,90],J=[5,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90],Se=[1,110],se=[1,106],ae=[1,107],Oe=[1,108],ye=[1,109],Be=[1,111],He=[1,116],ze=[1,117],Le=[1,114],Ie=[1,115],xe={trace:o(function(){},"trace"),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,direction:17,styleStatement:18,classDefStatement:19,classStatement:20,direction_tb:21,direction_bt:22,direction_rl:23,direction_lr:24,requirementType:25,requirementName:26,STRUCT_START:27,requirementBody:28,STYLE_SEPARATOR:29,idList:30,ID:31,COLONSEP:32,id:33,TEXT:34,text:35,RISK:36,riskLevel:37,VERIFYMTHD:38,verifyType: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:54,elementName:55,elementBody:56,TYPE:57,type:58,DOCREF:59,ref:60,END_ARROW_L:61,relationship:62,LINE:63,END_ARROW_R:64,CONTAINS:65,COPIES:66,DERIVES:67,SATISFIES:68,VERIFIES:69,REFINES:70,TRACES:71,CLASSDEF:72,stylesOpt:73,CLASS:74,ALPHA:75,COMMA:76,STYLE:77,style:78,styleComponent:79,NUM:80,COLON:81,UNIT:82,SPACE:83,BRKT:84,PCT:85,MINUS:86,LABEL:87,SEMICOLON:88,unqString:89,qString:90,$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",21:"direction_tb",22:"direction_bt",23:"direction_rl",24:"direction_lr",27:"STRUCT_START",29:"STYLE_SEPARATOR",31:"ID",32:"COLONSEP",34:"TEXT",36:"RISK",38:"VERIFYMTHD",40:"STRUCT_STOP",41:"REQUIREMENT",42:"FUNCTIONAL_REQUIREMENT",43:"INTERFACE_REQUIREMENT",44:"PERFORMANCE_REQUIREMENT",45:"PHYSICAL_REQUIREMENT",46:"DESIGN_CONSTRAINT",47:"LOW_RISK",48:"MED_RISK",49:"HIGH_RISK",50:"VERIFY_ANALYSIS",51:"VERIFY_DEMONSTRATION",52:"VERIFY_INSPECTION",53:"VERIFY_TEST",54:"ELEMENT",57:"TYPE",59:"DOCREF",61:"END_ARROW_L",63:"LINE",64:"END_ARROW_R",65:"CONTAINS",66:"COPIES",67:"DERIVES",68:"SATISFIES",69:"VERIFIES",70:"REFINES",71:"TRACES",72:"CLASSDEF",74:"CLASS",75:"ALPHA",76:"COMMA",77:"STYLE",80:"NUM",81:"COLON",82:"UNIT",83:"SPACE",84:"BRKT",85:"PCT",86:"MINUS",87:"LABEL",88:"SEMICOLON",89:"unqString",90:"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],[7,2],[7,2],[7,2],[7,2],[17,1],[17,1],[17,1],[17,1],[14,5],[14,7],[28,5],[28,5],[28,5],[28,5],[28,2],[28,1],[25,1],[25,1],[25,1],[25,1],[25,1],[25,1],[37,1],[37,1],[37,1],[39,1],[39,1],[39,1],[39,1],[15,5],[15,7],[56,5],[56,5],[56,2],[56,1],[16,5],[16,5],[62,1],[62,1],[62,1],[62,1],[62,1],[62,1],[62,1],[19,3],[20,3],[20,3],[30,1],[30,3],[30,1],[30,3],[18,3],[73,1],[73,3],[78,1],[78,2],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[26,1],[26,1],[33,1],[33,1],[35,1],[35,1],[55,1],[55,1],[58,1],[58,1],[60,1],[60,1]],performAction:o(function(oe,V,Te,W,pe,ve,Pe){var _e=ve.length-1;switch(pe){case 4:this.$=ve[_e].trim(),W.setAccTitle(this.$);break;case 5:case 6:this.$=ve[_e].trim(),W.setAccDescription(this.$);break;case 7:this.$=[];break;case 17:W.setDirection("TB");break;case 18:W.setDirection("BT");break;case 19:W.setDirection("RL");break;case 20:W.setDirection("LR");break;case 21:W.addRequirement(ve[_e-3],ve[_e-4]);break;case 22:W.addRequirement(ve[_e-5],ve[_e-6]),W.setClass([ve[_e-5]],ve[_e-3]);break;case 23:W.setNewReqId(ve[_e-2]);break;case 24:W.setNewReqText(ve[_e-2]);break;case 25:W.setNewReqRisk(ve[_e-2]);break;case 26:W.setNewReqVerifyMethod(ve[_e-2]);break;case 29:this.$=W.RequirementType.REQUIREMENT;break;case 30:this.$=W.RequirementType.FUNCTIONAL_REQUIREMENT;break;case 31:this.$=W.RequirementType.INTERFACE_REQUIREMENT;break;case 32:this.$=W.RequirementType.PERFORMANCE_REQUIREMENT;break;case 33:this.$=W.RequirementType.PHYSICAL_REQUIREMENT;break;case 34:this.$=W.RequirementType.DESIGN_CONSTRAINT;break;case 35:this.$=W.RiskLevel.LOW_RISK;break;case 36:this.$=W.RiskLevel.MED_RISK;break;case 37:this.$=W.RiskLevel.HIGH_RISK;break;case 38:this.$=W.VerifyType.VERIFY_ANALYSIS;break;case 39:this.$=W.VerifyType.VERIFY_DEMONSTRATION;break;case 40:this.$=W.VerifyType.VERIFY_INSPECTION;break;case 41:this.$=W.VerifyType.VERIFY_TEST;break;case 42:W.addElement(ve[_e-3]);break;case 43:W.addElement(ve[_e-5]),W.setClass([ve[_e-5]],ve[_e-3]);break;case 44:W.setNewElementType(ve[_e-2]);break;case 45:W.setNewElementDocRef(ve[_e-2]);break;case 48:W.addRelationship(ve[_e-2],ve[_e],ve[_e-4]);break;case 49:W.addRelationship(ve[_e-2],ve[_e-4],ve[_e]);break;case 50:this.$=W.Relationships.CONTAINS;break;case 51:this.$=W.Relationships.COPIES;break;case 52:this.$=W.Relationships.DERIVES;break;case 53:this.$=W.Relationships.SATISFIES;break;case 54:this.$=W.Relationships.VERIFIES;break;case 55:this.$=W.Relationships.REFINES;break;case 56:this.$=W.Relationships.TRACES;break;case 57:this.$=ve[_e-2],W.defineClass(ve[_e-1],ve[_e]);break;case 58:W.setClass(ve[_e-1],ve[_e]);break;case 59:W.setClass([ve[_e-2]],ve[_e]);break;case 60:case 62:this.$=[ve[_e]];break;case 61:case 63:this.$=ve[_e-2].concat([ve[_e]]);break;case 64:this.$=ve[_e-2],W.setCssStyle(ve[_e-1],ve[_e]);break;case 65:this.$=[ve[_e]];break;case 66:ve[_e-2].push(ve[_e]),this.$=ve[_e-2];break;case 68:this.$=ve[_e-1]+ve[_e];break}},"anonymous"),table:[{3:1,4:2,6:e,9:r,11:n,13:i},{1:[3]},{3:8,4:2,5:[1,7],6:e,9:r,11:n,13:i},{5:[1,9]},{10:[1,10]},{12:[1,11]},t(a,[2,6]),{3:12,4:2,6:e,9:r,11:n,13:i},{1:[2,2]},{4:17,5:s,7:13,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:T,74:S,77:w,89:E,90:_},t(a,[2,4]),t(a,[2,5]),{1:[2,1]},{8:[1,41]},{4:17,5:s,7:42,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:T,74:S,77:w,89:E,90:_},{4:17,5:s,7:43,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:T,74:S,77:w,89:E,90:_},{4:17,5:s,7:44,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:T,74:S,77:w,89:E,90:_},{4:17,5:s,7:45,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:T,74:S,77:w,89:E,90:_},{4:17,5:s,7:46,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:T,74:S,77:w,89:E,90:_},{4:17,5:s,7:47,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:T,74:S,77:w,89:E,90:_},{4:17,5:s,7:48,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:T,74:S,77:w,89:E,90:_},{4:17,5:s,7:49,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:T,74:S,77:w,89:E,90:_},{4:17,5:s,7:50,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:T,74:S,77:w,89:E,90:_},{26:51,89:[1,52],90:[1,53]},{55:54,89:[1,55],90:[1,56]},{29:[1,59],61:[1,57],63:[1,58]},t(C,[2,17]),t(C,[2,18]),t(C,[2,19]),t(C,[2,20]),{30:60,33:62,75:D,89:E,90:_},{30:63,33:62,75:D,89:E,90:_},{30:64,33:62,75:D,89:E,90:_},t(O,[2,29]),t(O,[2,30]),t(O,[2,31]),t(O,[2,32]),t(O,[2,33]),t(O,[2,34]),t(R,[2,81]),t(R,[2,82]),{1:[2,3]},{8:[2,8]},{8:[2,9]},{8:[2,10]},{8:[2,11]},{8:[2,12]},{8:[2,13]},{8:[2,14]},{8:[2,15]},{8:[2,16]},{27:[1,65],29:[1,66]},t(k,[2,79]),t(k,[2,80]),{27:[1,67],29:[1,68]},t(k,[2,85]),t(k,[2,86]),{62:69,65:L,66:A,67:I,68:M,69:P,70:B,71:F},{62:77,65:L,66:A,67:I,68:M,69:P,70:B,71:F},{30:78,33:62,75:D,89:E,90:_},{73:79,75:z,76:$,78:81,79:82,80:U,81:K,82:ee,83:Y,84:ce,85:Z,86:ue,87:Q,88:j},t(ne,[2,60]),t(ne,[2,62]),{73:93,75:z,76:$,78:81,79:82,80:U,81:K,82:ee,83:Y,84:ce,85:Z,86:ue,87:Q,88:j},{30:94,33:62,75:D,76:$,89:E,90:_},{5:[1,95]},{30:96,33:62,75:D,89:E,90:_},{5:[1,97]},{30:98,33:62,75:D,89:E,90:_},{63:[1,99]},t(te,[2,50]),t(te,[2,51]),t(te,[2,52]),t(te,[2,53]),t(te,[2,54]),t(te,[2,55]),t(te,[2,56]),{64:[1,100]},t(C,[2,59],{76:$}),t(C,[2,64],{76:he}),{33:103,75:[1,102],89:E,90:_},t(le,[2,65],{79:104,75:z,80:U,81:K,82:ee,83:Y,84:ce,85:Z,86:ue,87:Q,88:j}),t(J,[2,67]),t(J,[2,69]),t(J,[2,70]),t(J,[2,71]),t(J,[2,72]),t(J,[2,73]),t(J,[2,74]),t(J,[2,75]),t(J,[2,76]),t(J,[2,77]),t(J,[2,78]),t(C,[2,57],{76:he}),t(C,[2,58],{76:$}),{5:Se,28:105,31:se,34:ae,36:Oe,38:ye,40:Be},{27:[1,112],76:$},{5:He,40:ze,56:113,57:Le,59:Ie},{27:[1,118],76:$},{33:119,89:E,90:_},{33:120,89:E,90:_},{75:z,78:121,79:82,80:U,81:K,82:ee,83:Y,84:ce,85:Z,86:ue,87:Q,88:j},t(ne,[2,61]),t(ne,[2,63]),t(J,[2,68]),t(C,[2,21]),{32:[1,122]},{32:[1,123]},{32:[1,124]},{32:[1,125]},{5:Se,28:126,31:se,34:ae,36:Oe,38:ye,40:Be},t(C,[2,28]),{5:[1,127]},t(C,[2,42]),{32:[1,128]},{32:[1,129]},{5:He,40:ze,56:130,57:Le,59:Ie},t(C,[2,47]),{5:[1,131]},t(C,[2,48]),t(C,[2,49]),t(le,[2,66],{79:104,75:z,80:U,81:K,82:ee,83:Y,84:ce,85:Z,86:ue,87:Q,88:j}),{33:132,89:E,90:_},{35:133,89:[1,134],90:[1,135]},{37:136,47:[1,137],48:[1,138],49:[1,139]},{39:140,50:[1,141],51:[1,142],52:[1,143],53:[1,144]},t(C,[2,27]),{5:Se,28:145,31:se,34:ae,36:Oe,38:ye,40:Be},{58:146,89:[1,147],90:[1,148]},{60:149,89:[1,150],90:[1,151]},t(C,[2,46]),{5:He,40:ze,56:152,57:Le,59:Ie},{5:[1,153]},{5:[1,154]},{5:[2,83]},{5:[2,84]},{5:[1,155]},{5:[2,35]},{5:[2,36]},{5:[2,37]},{5:[1,156]},{5:[2,38]},{5:[2,39]},{5:[2,40]},{5:[2,41]},t(C,[2,22]),{5:[1,157]},{5:[2,87]},{5:[2,88]},{5:[1,158]},{5:[2,89]},{5:[2,90]},t(C,[2,43]),{5:Se,28:159,31:se,34:ae,36:Oe,38:ye,40:Be},{5:Se,28:160,31:se,34:ae,36:Oe,38:ye,40:Be},{5:Se,28:161,31:se,34:ae,36:Oe,38:ye,40:Be},{5:Se,28:162,31:se,34:ae,36:Oe,38:ye,40:Be},{5:He,40:ze,56:163,57:Le,59:Ie},{5:He,40:ze,56:164,57:Le,59:Ie},t(C,[2,23]),t(C,[2,24]),t(C,[2,25]),t(C,[2,26]),t(C,[2,44]),t(C,[2,45])],defaultActions:{8:[2,2],12:[2,1],41:[2,3],42:[2,8],43:[2,9],44:[2,10],45:[2,11],46:[2,12],47:[2,13],48:[2,14],49:[2,15],50:[2,16],134:[2,83],135:[2,84],137:[2,35],138:[2,36],139:[2,37],141:[2,38],142:[2,39],143:[2,40],144:[2,41],147:[2,87],148:[2,88],150:[2,89],151:[2,90]},parseError:o(function(oe,V){if(V.recoverable)this.trace(oe);else{var Te=new Error(oe);throw Te.hash=V,Te}},"parseError"),parse:o(function(oe){var V=this,Te=[0],W=[],pe=[null],ve=[],Pe=this.table,_e="",be=0,Ve=0,De=0,qe=2,at=1,Rt=ve.slice.call(arguments,1),st=Object.create(this.lexer),Ue={yy:{}};for(var ct in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ct)&&(Ue.yy[ct]=this.yy[ct]);st.setInput(oe,Ue.yy),Ue.yy.lexer=st,Ue.yy.parser=this,typeof st.yylloc>"u"&&(st.yylloc={});var We=st.yylloc;ve.push(We);var ot=st.options&&st.options.ranges;typeof Ue.yy.parseError=="function"?this.parseError=Ue.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Yt(Ir){Te.length=Te.length-2*Ir,pe.length=pe.length-Ir,ve.length=ve.length-Ir}o(Yt,"popStack");function Tt(){var Ir;return Ir=W.pop()||st.lex()||at,typeof Ir!="number"&&(Ir instanceof Array&&(W=Ir,Ir=W.pop()),Ir=V.symbols_[Ir]||Ir),Ir}o(Tt,"lex");for(var Mt,bt,ut,St,ft,vt,nt={},pn,kt,On,tn;;){if(ut=Te[Te.length-1],this.defaultActions[ut]?St=this.defaultActions[ut]:((Mt===null||typeof Mt>"u")&&(Mt=Tt()),St=Pe[ut]&&Pe[ut][Mt]),typeof St>"u"||!St.length||!St[0]){var Mr="";tn=[];for(pn in Pe[ut])this.terminals_[pn]&&pn>qe&&tn.push("'"+this.terminals_[pn]+"'");st.showPosition?Mr="Parse error on line "+(be+1)+`: `+st.showPosition()+` -Expecting `+tn.join(", ")+", got '"+(this.terminals_[Mt]||Mt)+"'":_r="Parse error on line "+(be+1)+": Unexpected "+(Mt==at?"end of input":"'"+(this.terminals_[Mt]||Mt)+"'"),this.parseError(_r,{text:st.match,token:this.terminals_[Mt]||Mt,line:st.yylineno,loc:We,expected:tn})}if(Et[0]instanceof Array&&Et.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ut+", token: "+Mt);switch(Et[0]){case 1:we.push(Mt),pe.push(st.yytext),ve.push(st.yylloc),we.push(Et[1]),Mt=null,xt?(Mt=xt,xt=null):(Ve=st.yyleng,_e=st.yytext,be=st.yylineno,We=st.yylloc,De>0&&De--);break;case 2:if(Tt=this.productions_[Et[1]][1],nt.$=pe[pe.length-Tt],nt._$={first_line:ve[ve.length-(Tt||1)].first_line,last_line:ve[ve.length-1].last_line,first_column:ve[ve.length-(Tt||1)].first_column,last_column:ve[ve.length-1].last_column},ot&&(nt._$.range=[ve[ve.length-(Tt||1)].range[0],ve[ve.length-1].range[1]]),yt=this.performAction.apply(nt,[_e,Ve,be,Ue.yy,Et[1],pe,ve].concat(Lt)),typeof yt<"u")return yt;Tt&&(we=we.slice(0,-1*Tt*2),pe=pe.slice(0,-1*Tt),ve=ve.slice(0,-1*Tt)),we.push(this.productions_[Et[1]][0]),pe.push(nt.$),ve.push(nt._$),On=Pe[we[we.length-2]][we[we.length-1]],we.push(On);break;case 3:return!0}}return!0},"parse")},q=function(){var ie={EOF:1,parseError:o(function(V,we){if(this.yy.parser)this.yy.parser.parseError(V,we);else throw new Error(V)},"parseError"),setInput:o(function(oe,V){return this.yy=V||this.yy||{},this._input=oe,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},"setInput"),input:o(function(){var oe=this._input[0];this.yytext+=oe,this.yyleng++,this.offset++,this.match+=oe,this.matched+=oe;var V=oe.match(/(?:\r\n?|\n).*/g);return V?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),oe},"input"),unput:o(function(oe){var V=oe.length,we=oe.split(/(?:\r\n?|\n)/g);this._input=oe+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-V),this.offset-=V;var W=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),we.length-1&&(this.yylineno-=we.length-1);var pe=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:we?(we.length===W.length?this.yylloc.first_column:0)+W[W.length-we.length].length-we[0].length:this.yylloc.first_column-V},this.options.ranges&&(this.yylloc.range=[pe[0],pe[0]+this.yyleng-V]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(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). +Expecting `+tn.join(", ")+", got '"+(this.terminals_[Mt]||Mt)+"'":Mr="Parse error on line "+(be+1)+": Unexpected "+(Mt==at?"end of input":"'"+(this.terminals_[Mt]||Mt)+"'"),this.parseError(Mr,{text:st.match,token:this.terminals_[Mt]||Mt,line:st.yylineno,loc:We,expected:tn})}if(St[0]instanceof Array&&St.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ut+", token: "+Mt);switch(St[0]){case 1:Te.push(Mt),pe.push(st.yytext),ve.push(st.yylloc),Te.push(St[1]),Mt=null,bt?(Mt=bt,bt=null):(Ve=st.yyleng,_e=st.yytext,be=st.yylineno,We=st.yylloc,De>0&&De--);break;case 2:if(kt=this.productions_[St[1]][1],nt.$=pe[pe.length-kt],nt._$={first_line:ve[ve.length-(kt||1)].first_line,last_line:ve[ve.length-1].last_line,first_column:ve[ve.length-(kt||1)].first_column,last_column:ve[ve.length-1].last_column},ot&&(nt._$.range=[ve[ve.length-(kt||1)].range[0],ve[ve.length-1].range[1]]),vt=this.performAction.apply(nt,[_e,Ve,be,Ue.yy,St[1],pe,ve].concat(Rt)),typeof vt<"u")return vt;kt&&(Te=Te.slice(0,-1*kt*2),pe=pe.slice(0,-1*kt),ve=ve.slice(0,-1*kt)),Te.push(this.productions_[St[1]][0]),pe.push(nt.$),ve.push(nt._$),On=Pe[Te[Te.length-2]][Te[Te.length-1]],Te.push(On);break;case 3:return!0}}return!0},"parse")},q=function(){var ie={EOF:1,parseError:o(function(V,Te){if(this.yy.parser)this.yy.parser.parseError(V,Te);else throw new Error(V)},"parseError"),setInput:o(function(oe,V){return this.yy=V||this.yy||{},this._input=oe,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},"setInput"),input:o(function(){var oe=this._input[0];this.yytext+=oe,this.yyleng++,this.offset++,this.match+=oe,this.matched+=oe;var V=oe.match(/(?:\r\n?|\n).*/g);return V?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),oe},"input"),unput:o(function(oe){var V=oe.length,Te=oe.split(/(?:\r\n?|\n)/g);this._input=oe+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-V),this.offset-=V;var W=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),Te.length-1&&(this.yylineno-=Te.length-1);var pe=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:Te?(Te.length===W.length?this.yylloc.first_column:0)+W[W.length-Te.length].length-Te[0].length:this.yylloc.first_column-V},this.options.ranges&&(this.yylloc.range=[pe[0],pe[0]+this.yyleng-V]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(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},"reject"),less:o(function(oe){this.unput(this.match.slice(oe))},"less"),pastInput:o(function(){var oe=this.matched.substr(0,this.matched.length-this.match.length);return(oe.length>20?"...":"")+oe.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var oe=this.match;return oe.length<20&&(oe+=this._input.substr(0,20-oe.length)),(oe.substr(0,20)+(oe.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var oe=this.pastInput(),V=new Array(oe.length+1).join("-");return oe+this.upcomingInput()+` -`+V+"^"},"showPosition"),test_match:o(function(oe,V){var we,W,pe;if(this.options.backtrack_lexer&&(pe={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&&(pe.yylloc.range=this.yylloc.range.slice(0))),W=oe[0].match(/(?:\r\n?|\n).*/g),W&&(this.yylineno+=W.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:W?W[W.length-1].length-W[W.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+oe[0].length},this.yytext+=oe[0],this.match+=oe[0],this.matches=oe,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(oe[0].length),this.matched+=oe[0],we=this.performAction.call(this,this.yy,this,V,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),we)return we;if(this._backtrack){for(var ve in pe)this[ve]=pe[ve];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var oe,V,we,W;this._more||(this.yytext="",this.match="");for(var pe=this._currentRules(),ve=0;veV[0].length)){if(V=we,W=ve,this.options.backtrack_lexer){if(oe=this.test_match(we,pe[ve]),oe!==!1)return oe;if(this._backtrack){V=!1;continue}else return!1}else if(!this.options.flex)break}return V?(oe=this.test_match(V,pe[W]),oe!==!1?oe:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var V=this.next();return V||this.lex()},"lex"),begin:o(function(V){this.conditionStack.push(V)},"begin"),popState:o(function(){var V=this.conditionStack.length-1;return V>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(V){return V=this.conditionStack.length-1-Math.abs(V||0),V>=0?this.conditionStack[V]:"INITIAL"},"topState"),pushState:o(function(V){this.begin(V)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(V,we,W,pe){var ve=pe;switch(W){case 0:return"title";case 1:return this.begin("acc_title"),9;break;case 2:return this.popState(),"acc_title_value";break;case 3:return this.begin("acc_descr"),11;break;case 4:return this.popState(),"acc_descr_value";break;case 5:this.begin("acc_descr_multiline");break;case 6:this.popState();break;case 7:return"acc_descr_multiline_value";case 8:return 21;case 9:return 22;case 10:return 23;case 11:return 24;case 12:return 5;case 13:break;case 14:break;case 15:break;case 16:return 8;case 17:return 6;case 18:return 27;case 19:return 40;case 20:return 29;case 21:return 32;case 22:return 31;case 23:return 34;case 24:return 36;case 25:return 38;case 26:return 41;case 27:return 42;case 28:return 43;case 29:return 44;case 30:return 45;case 31:return 46;case 32:return 47;case 33:return 48;case 34:return 49;case 35:return 50;case 36:return 51;case 37:return 52;case 38:return 53;case 39:return 54;case 40:return 65;case 41:return 66;case 42:return 67;case 43:return 68;case 44:return 69;case 45:return 70;case 46:return 71;case 47:return 57;case 48:return 59;case 49:return this.begin("style"),77;break;case 50:return 75;case 51:return 81;case 52:return 88;case 53:return"PERCENT";case 54:return 86;case 55:return 84;case 56:break;case 57:this.begin("string");break;case 58:this.popState();break;case 59:return this.begin("style"),72;break;case 60:return this.begin("style"),74;break;case 61:return 61;case 62:return 64;case 63:return 63;case 64:this.begin("string");break;case 65:this.popState();break;case 66:return"qString";case 67:return we.yytext=we.yytext.trim(),89;break;case 68:return 75;case 69:return 80;case 70:return 76}},"anonymous"),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,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:(\r?\n)+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:$)/i,/^(?:requirementDiagram\b)/i,/^(?:\{)/i,/^(?:\})/i,/^(?::{3})/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,/^(?:style\b)/i,/^(?:\w+)/i,/^(?::)/i,/^(?:;)/i,/^(?:%)/i,/^(?:-)/i,/^(?:#)/i,/^(?: )/i,/^(?:["])/i,/^(?:\n)/i,/^(?:classDef\b)/i,/^(?:class\b)/i,/^(?:<-)/i,/^(?:->)/i,/^(?:-)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[\w][^:,\r\n\{\<\>\-\=]*)/i,/^(?:\w+)/i,/^(?:[0-9]+)/i,/^(?:,)/i],conditions:{acc_descr_multiline:{rules:[6,7,68,69,70],inclusive:!1},acc_descr:{rules:[4,68,69,70],inclusive:!1},acc_title:{rules:[2,68,69,70],inclusive:!1},style:{rules:[50,51,52,53,54,55,56,57,58,68,69,70],inclusive:!1},unqString:{rules:[68,69,70],inclusive:!1},token:{rules:[68,69,70],inclusive:!1},string:{rules:[65,66,68,69,70],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,48,49,59,60,61,62,63,64,67,68,69,70],inclusive:!0}}};return ie}();xe.lexer=q;function de(){this.yy={}}return o(de,"Parser"),de.prototype=xe,xe.Parser=de,new de}();DO.parser=DO;rfe=DO});var MS,ife=N(()=>{"use strict";zt();vt();mi();MS=class{constructor(){this.relations=[];this.latestRequirement=this.getInitialRequirement();this.requirements=new Map;this.latestElement=this.getInitialElement();this.elements=new Map;this.classes=new Map;this.direction="TB";this.RequirementType={REQUIREMENT:"Requirement",FUNCTIONAL_REQUIREMENT:"Functional Requirement",INTERFACE_REQUIREMENT:"Interface Requirement",PERFORMANCE_REQUIREMENT:"Performance Requirement",PHYSICAL_REQUIREMENT:"Physical Requirement",DESIGN_CONSTRAINT:"Design Constraint"};this.RiskLevel={LOW_RISK:"Low",MED_RISK:"Medium",HIGH_RISK:"High"};this.VerifyType={VERIFY_ANALYSIS:"Analysis",VERIFY_DEMONSTRATION:"Demonstration",VERIFY_INSPECTION:"Inspection",VERIFY_TEST:"Test"};this.Relationships={CONTAINS:"contains",COPIES:"copies",DERIVES:"derives",SATISFIES:"satisfies",VERIFIES:"verifies",REFINES:"refines",TRACES:"traces"};this.setAccTitle=Lr;this.getAccTitle=Rr;this.setAccDescription=Nr;this.getAccDescription=Mr;this.setDiagramTitle=$r;this.getDiagramTitle=Ir;this.getConfig=o(()=>me().requirement,"getConfig");this.clear(),this.setDirection=this.setDirection.bind(this),this.addRequirement=this.addRequirement.bind(this),this.setNewReqId=this.setNewReqId.bind(this),this.setNewReqRisk=this.setNewReqRisk.bind(this),this.setNewReqText=this.setNewReqText.bind(this),this.setNewReqVerifyMethod=this.setNewReqVerifyMethod.bind(this),this.addElement=this.addElement.bind(this),this.setNewElementType=this.setNewElementType.bind(this),this.setNewElementDocRef=this.setNewElementDocRef.bind(this),this.addRelationship=this.addRelationship.bind(this),this.setCssStyle=this.setCssStyle.bind(this),this.setClass=this.setClass.bind(this),this.defineClass=this.defineClass.bind(this),this.setAccTitle=this.setAccTitle.bind(this),this.setAccDescription=this.setAccDescription.bind(this)}static{o(this,"RequirementDB")}getDirection(){return this.direction}setDirection(e){this.direction=e}resetLatestRequirement(){this.latestRequirement=this.getInitialRequirement()}resetLatestElement(){this.latestElement=this.getInitialElement()}getInitialRequirement(){return{requirementId:"",text:"",risk:"",verifyMethod:"",name:"",type:"",cssStyles:[],classes:["default"]}}getInitialElement(){return{name:"",type:"",docRef:"",cssStyles:[],classes:["default"]}}addRequirement(e,r){return this.requirements.has(e)||this.requirements.set(e,{name:e,type:r,requirementId:this.latestRequirement.requirementId,text:this.latestRequirement.text,risk:this.latestRequirement.risk,verifyMethod:this.latestRequirement.verifyMethod,cssStyles:[],classes:["default"]}),this.resetLatestRequirement(),this.requirements.get(e)}getRequirements(){return this.requirements}setNewReqId(e){this.latestRequirement!==void 0&&(this.latestRequirement.requirementId=e)}setNewReqText(e){this.latestRequirement!==void 0&&(this.latestRequirement.text=e)}setNewReqRisk(e){this.latestRequirement!==void 0&&(this.latestRequirement.risk=e)}setNewReqVerifyMethod(e){this.latestRequirement!==void 0&&(this.latestRequirement.verifyMethod=e)}addElement(e){return this.elements.has(e)||(this.elements.set(e,{name:e,type:this.latestElement.type,docRef:this.latestElement.docRef,cssStyles:[],classes:["default"]}),X.info("Added new element: ",e)),this.resetLatestElement(),this.elements.get(e)}getElements(){return this.elements}setNewElementType(e){this.latestElement!==void 0&&(this.latestElement.type=e)}setNewElementDocRef(e){this.latestElement!==void 0&&(this.latestElement.docRef=e)}addRelationship(e,r,n){this.relations.push({type:e,src:r,dst:n})}getRelationships(){return this.relations}clear(){this.relations=[],this.resetLatestRequirement(),this.requirements=new Map,this.resetLatestElement(),this.elements=new Map,this.classes=new Map,Ar()}setCssStyle(e,r){for(let n of e){let i=this.requirements.get(n)??this.elements.get(n);if(!r||!i)return;for(let a of r)a.includes(",")?i.cssStyles.push(...a.split(",")):i.cssStyles.push(a)}}setClass(e,r){for(let n of e){let i=this.requirements.get(n)??this.elements.get(n);if(i)for(let a of r){i.classes.push(a);let s=this.classes.get(a)?.styles;s&&i.cssStyles.push(...s)}}}defineClass(e,r){for(let n of e){let i=this.classes.get(n);i===void 0&&(i={id:n,styles:[],textStyles:[]},this.classes.set(n,i)),r&&r.forEach(function(a){if(/color/.exec(a)){let s=a.replace("fill","bgFill");i.textStyles.push(s)}i.styles.push(a)}),this.requirements.forEach(a=>{a.classes.includes(n)&&a.cssStyles.push(...r.flatMap(s=>s.split(",")))}),this.elements.forEach(a=>{a.classes.includes(n)&&a.cssStyles.push(...r.flatMap(s=>s.split(",")))})}}getClasses(){return this.classes}getData(){let e=me(),r=[],n=[];for(let i of this.requirements.values()){let a=i;a.id=i.name,a.cssStyles=i.cssStyles,a.cssClasses=i.classes.join(" "),a.shape="requirementBox",a.look=e.look,r.push(a)}for(let i of this.elements.values()){let a=i;a.shape="requirementBox",a.look=e.look,a.id=i.name,a.cssStyles=i.cssStyles,a.cssClasses=i.classes.join(" "),r.push(a)}for(let i of this.relations){let a=0,s=i.type===this.Relationships.CONTAINS,l={id:`${i.src}-${i.dst}-${a}`,start:this.requirements.get(i.src)?.name??this.elements.get(i.src)?.name,end:this.requirements.get(i.dst)?.name??this.elements.get(i.dst)?.name,label:`<<${i.type}>>`,classes:"relationshipLine",style:["fill:none",s?"":"stroke-dasharray: 10,7"],labelpos:"c",thickness:"normal",type:"normal",pattern:s?"normal":"dashed",arrowTypeStart:s?"requirement_contains":"",arrowTypeEnd:s?"":"requirement_arrow",look:e.look};n.push(l),a++}return{nodes:r,edges:n,other:{},config:e,direction:this.getDirection()}}}});var XGe,afe,sfe=N(()=>{"use strict";XGe=o(t=>` +`+V+"^"},"showPosition"),test_match:o(function(oe,V){var Te,W,pe;if(this.options.backtrack_lexer&&(pe={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&&(pe.yylloc.range=this.yylloc.range.slice(0))),W=oe[0].match(/(?:\r\n?|\n).*/g),W&&(this.yylineno+=W.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:W?W[W.length-1].length-W[W.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+oe[0].length},this.yytext+=oe[0],this.match+=oe[0],this.matches=oe,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(oe[0].length),this.matched+=oe[0],Te=this.performAction.call(this,this.yy,this,V,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Te)return Te;if(this._backtrack){for(var ve in pe)this[ve]=pe[ve];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var oe,V,Te,W;this._more||(this.yytext="",this.match="");for(var pe=this._currentRules(),ve=0;veV[0].length)){if(V=Te,W=ve,this.options.backtrack_lexer){if(oe=this.test_match(Te,pe[ve]),oe!==!1)return oe;if(this._backtrack){V=!1;continue}else return!1}else if(!this.options.flex)break}return V?(oe=this.test_match(V,pe[W]),oe!==!1?oe:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var V=this.next();return V||this.lex()},"lex"),begin:o(function(V){this.conditionStack.push(V)},"begin"),popState:o(function(){var V=this.conditionStack.length-1;return V>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(V){return V=this.conditionStack.length-1-Math.abs(V||0),V>=0?this.conditionStack[V]:"INITIAL"},"topState"),pushState:o(function(V){this.begin(V)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(V,Te,W,pe){var ve=pe;switch(W){case 0:return"title";case 1:return this.begin("acc_title"),9;break;case 2:return this.popState(),"acc_title_value";break;case 3:return this.begin("acc_descr"),11;break;case 4:return this.popState(),"acc_descr_value";break;case 5:this.begin("acc_descr_multiline");break;case 6:this.popState();break;case 7:return"acc_descr_multiline_value";case 8:return 21;case 9:return 22;case 10:return 23;case 11:return 24;case 12:return 5;case 13:break;case 14:break;case 15:break;case 16:return 8;case 17:return 6;case 18:return 27;case 19:return 40;case 20:return 29;case 21:return 32;case 22:return 31;case 23:return 34;case 24:return 36;case 25:return 38;case 26:return 41;case 27:return 42;case 28:return 43;case 29:return 44;case 30:return 45;case 31:return 46;case 32:return 47;case 33:return 48;case 34:return 49;case 35:return 50;case 36:return 51;case 37:return 52;case 38:return 53;case 39:return 54;case 40:return 65;case 41:return 66;case 42:return 67;case 43:return 68;case 44:return 69;case 45:return 70;case 46:return 71;case 47:return 57;case 48:return 59;case 49:return this.begin("style"),77;break;case 50:return 75;case 51:return 81;case 52:return 88;case 53:return"PERCENT";case 54:return 86;case 55:return 84;case 56:break;case 57:this.begin("string");break;case 58:this.popState();break;case 59:return this.begin("style"),72;break;case 60:return this.begin("style"),74;break;case 61:return 61;case 62:return 64;case 63:return 63;case 64:this.begin("string");break;case 65:this.popState();break;case 66:return"qString";case 67:return Te.yytext=Te.yytext.trim(),89;break;case 68:return 75;case 69:return 80;case 70:return 76}},"anonymous"),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,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:(\r?\n)+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:$)/i,/^(?:requirementDiagram\b)/i,/^(?:\{)/i,/^(?:\})/i,/^(?::{3})/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,/^(?:style\b)/i,/^(?:\w+)/i,/^(?::)/i,/^(?:;)/i,/^(?:%)/i,/^(?:-)/i,/^(?:#)/i,/^(?: )/i,/^(?:["])/i,/^(?:\n)/i,/^(?:classDef\b)/i,/^(?:class\b)/i,/^(?:<-)/i,/^(?:->)/i,/^(?:-)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[\w][^:,\r\n\{\<\>\-\=]*)/i,/^(?:\w+)/i,/^(?:[0-9]+)/i,/^(?:,)/i],conditions:{acc_descr_multiline:{rules:[6,7,68,69,70],inclusive:!1},acc_descr:{rules:[4,68,69,70],inclusive:!1},acc_title:{rules:[2,68,69,70],inclusive:!1},style:{rules:[50,51,52,53,54,55,56,57,58,68,69,70],inclusive:!1},unqString:{rules:[68,69,70],inclusive:!1},token:{rules:[68,69,70],inclusive:!1},string:{rules:[65,66,68,69,70],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,48,49,59,60,61,62,63,64,67,68,69,70],inclusive:!0}}};return ie}();xe.lexer=q;function de(){this.yy={}}return o(de,"Parser"),de.prototype=xe,xe.Parser=de,new de}();hP.parser=hP;vde=hP});var qS,bde=N(()=>{"use strict";Gt();yt();ci();qS=class{constructor(){this.relations=[];this.latestRequirement=this.getInitialRequirement();this.requirements=new Map;this.latestElement=this.getInitialElement();this.elements=new Map;this.classes=new Map;this.direction="TB";this.RequirementType={REQUIREMENT:"Requirement",FUNCTIONAL_REQUIREMENT:"Functional Requirement",INTERFACE_REQUIREMENT:"Interface Requirement",PERFORMANCE_REQUIREMENT:"Performance Requirement",PHYSICAL_REQUIREMENT:"Physical Requirement",DESIGN_CONSTRAINT:"Design Constraint"};this.RiskLevel={LOW_RISK:"Low",MED_RISK:"Medium",HIGH_RISK:"High"};this.VerifyType={VERIFY_ANALYSIS:"Analysis",VERIFY_DEMONSTRATION:"Demonstration",VERIFY_INSPECTION:"Inspection",VERIFY_TEST:"Test"};this.Relationships={CONTAINS:"contains",COPIES:"copies",DERIVES:"derives",SATISFIES:"satisfies",VERIFIES:"verifies",REFINES:"refines",TRACES:"traces"};this.setAccTitle=Ar;this.getAccTitle=Dr;this.setAccDescription=Lr;this.getAccDescription=Rr;this.setDiagramTitle=Or;this.getDiagramTitle=Nr;this.getConfig=o(()=>me().requirement,"getConfig");this.clear(),this.setDirection=this.setDirection.bind(this),this.addRequirement=this.addRequirement.bind(this),this.setNewReqId=this.setNewReqId.bind(this),this.setNewReqRisk=this.setNewReqRisk.bind(this),this.setNewReqText=this.setNewReqText.bind(this),this.setNewReqVerifyMethod=this.setNewReqVerifyMethod.bind(this),this.addElement=this.addElement.bind(this),this.setNewElementType=this.setNewElementType.bind(this),this.setNewElementDocRef=this.setNewElementDocRef.bind(this),this.addRelationship=this.addRelationship.bind(this),this.setCssStyle=this.setCssStyle.bind(this),this.setClass=this.setClass.bind(this),this.defineClass=this.defineClass.bind(this),this.setAccTitle=this.setAccTitle.bind(this),this.setAccDescription=this.setAccDescription.bind(this)}static{o(this,"RequirementDB")}getDirection(){return this.direction}setDirection(e){this.direction=e}resetLatestRequirement(){this.latestRequirement=this.getInitialRequirement()}resetLatestElement(){this.latestElement=this.getInitialElement()}getInitialRequirement(){return{requirementId:"",text:"",risk:"",verifyMethod:"",name:"",type:"",cssStyles:[],classes:["default"]}}getInitialElement(){return{name:"",type:"",docRef:"",cssStyles:[],classes:["default"]}}addRequirement(e,r){return this.requirements.has(e)||this.requirements.set(e,{name:e,type:r,requirementId:this.latestRequirement.requirementId,text:this.latestRequirement.text,risk:this.latestRequirement.risk,verifyMethod:this.latestRequirement.verifyMethod,cssStyles:[],classes:["default"]}),this.resetLatestRequirement(),this.requirements.get(e)}getRequirements(){return this.requirements}setNewReqId(e){this.latestRequirement!==void 0&&(this.latestRequirement.requirementId=e)}setNewReqText(e){this.latestRequirement!==void 0&&(this.latestRequirement.text=e)}setNewReqRisk(e){this.latestRequirement!==void 0&&(this.latestRequirement.risk=e)}setNewReqVerifyMethod(e){this.latestRequirement!==void 0&&(this.latestRequirement.verifyMethod=e)}addElement(e){return this.elements.has(e)||(this.elements.set(e,{name:e,type:this.latestElement.type,docRef:this.latestElement.docRef,cssStyles:[],classes:["default"]}),X.info("Added new element: ",e)),this.resetLatestElement(),this.elements.get(e)}getElements(){return this.elements}setNewElementType(e){this.latestElement!==void 0&&(this.latestElement.type=e)}setNewElementDocRef(e){this.latestElement!==void 0&&(this.latestElement.docRef=e)}addRelationship(e,r,n){this.relations.push({type:e,src:r,dst:n})}getRelationships(){return this.relations}clear(){this.relations=[],this.resetLatestRequirement(),this.requirements=new Map,this.resetLatestElement(),this.elements=new Map,this.classes=new Map,kr()}setCssStyle(e,r){for(let n of e){let i=this.requirements.get(n)??this.elements.get(n);if(!r||!i)return;for(let a of r)a.includes(",")?i.cssStyles.push(...a.split(",")):i.cssStyles.push(a)}}setClass(e,r){for(let n of e){let i=this.requirements.get(n)??this.elements.get(n);if(i)for(let a of r){i.classes.push(a);let s=this.classes.get(a)?.styles;s&&i.cssStyles.push(...s)}}}defineClass(e,r){for(let n of e){let i=this.classes.get(n);i===void 0&&(i={id:n,styles:[],textStyles:[]},this.classes.set(n,i)),r&&r.forEach(function(a){if(/color/.exec(a)){let s=a.replace("fill","bgFill");i.textStyles.push(s)}i.styles.push(a)}),this.requirements.forEach(a=>{a.classes.includes(n)&&a.cssStyles.push(...r.flatMap(s=>s.split(",")))}),this.elements.forEach(a=>{a.classes.includes(n)&&a.cssStyles.push(...r.flatMap(s=>s.split(",")))})}}getClasses(){return this.classes}getData(){let e=me(),r=[],n=[];for(let i of this.requirements.values()){let a=i;a.id=i.name,a.cssStyles=i.cssStyles,a.cssClasses=i.classes.join(" "),a.shape="requirementBox",a.look=e.look,r.push(a)}for(let i of this.elements.values()){let a=i;a.shape="requirementBox",a.look=e.look,a.id=i.name,a.cssStyles=i.cssStyles,a.cssClasses=i.classes.join(" "),r.push(a)}for(let i of this.relations){let a=0,s=i.type===this.Relationships.CONTAINS,l={id:`${i.src}-${i.dst}-${a}`,start:this.requirements.get(i.src)?.name??this.elements.get(i.src)?.name,end:this.requirements.get(i.dst)?.name??this.elements.get(i.dst)?.name,label:`<<${i.type}>>`,classes:"relationshipLine",style:["fill:none",s?"":"stroke-dasharray: 10,7"],labelpos:"c",thickness:"normal",type:"normal",pattern:s?"normal":"dashed",arrowTypeStart:s?"requirement_contains":"",arrowTypeEnd:s?"":"requirement_arrow",look:e.look};n.push(l),a++}return{nodes:r,edges:n,other:{},config:e,direction:this.getDirection()}}}});var NUe,Tde,wde=N(()=>{"use strict";NUe=o(t=>` marker { fill: ${t.relationColor}; @@ -1263,12 +1263,12 @@ Expecting `+tn.join(", ")+", got '"+(this.terminals_[Mt]||Mt)+"'":_r="Parse erro background-color: ${t.edgeLabelBackground}; } -`,"getStyles"),afe=XGe});var LO={};hr(LO,{draw:()=>jGe});var jGe,ofe=N(()=>{"use strict";zt();vt();km();ep();qm();nr();jGe=o(async function(t,e,r,n){X.info("REF0:"),X.info("Drawing requirement diagram (unified)",e);let{securityLevel:i,state:a,layout:s}=me(),l=n.db.getData(),u=xc(e,i);l.type=n.type,l.layoutAlgorithm=lf(s),l.nodeSpacing=a?.nodeSpacing??50,l.rankSpacing=a?.rankSpacing??50,l.markers=["requirement_contains","requirement_arrow"],l.diagramId=e,await _c(l,u);let h=8;Gt.insertTitle(u,"requirementDiagramTitleText",a?.titleTopMargin??25,n.db.getDiagramTitle()),Dc(u,h,"requirementDiagram",a?.useMaxWidth??!0)},"draw")});var lfe={};hr(lfe,{diagram:()=>KGe});var KGe,cfe=N(()=>{"use strict";nfe();ife();sfe();ofe();KGe={parser:rfe,get db(){return new MS},renderer:LO,styles:afe}});var RO,ffe,dfe=N(()=>{"use strict";RO=function(){var t=o(function(K,j,ne,ee){for(ne=ne||{},ee=K.length;ee--;ne[K[ee]]=j);return ne},"o"),e=[1,2],r=[1,3],n=[1,4],i=[2,4],a=[1,9],s=[1,11],l=[1,13],u=[1,14],h=[1,16],f=[1,17],d=[1,18],p=[1,24],m=[1,25],g=[1,26],y=[1,27],v=[1,28],x=[1,29],b=[1,30],w=[1,31],C=[1,32],T=[1,33],E=[1,34],A=[1,35],S=[1,36],_=[1,37],I=[1,38],L=[1,39],k=[1,41],D=[1,42],R=[1,43],O=[1,44],M=[1,45],P=[1,46],B=[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],F=[4,5,16,50,52,53],z=[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],$=[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],U=[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],Q=[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],te=[68,69,70],Y=[1,122],he={trace:o(function(){},"trace"),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,BIDIRECTIONAL_SOLID_ARROW:74,DOTTED_ARROW:75,BIDIRECTIONAL_DOTTED_ARROW:76,SOLID_CROSS:77,DOTTED_CROSS:78,SOLID_POINT:79,DOTTED_POINT:80,TXT:81,$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:"BIDIRECTIONAL_SOLID_ARROW",75:"DOTTED_ARROW",76:"BIDIRECTIONAL_DOTTED_ARROW",77:"SOLID_CROSS",78:"DOTTED_CROSS",79:"SOLID_POINT",80:"DOTTED_POINT",81:"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],[67,1],[67,1],[56,1]],performAction:o(function(j,ne,ee,ce,le,J,Se){var se=J.length-1;switch(le){case 3:return ce.apply(J[se]),J[se];break;case 4:case 9:this.$=[];break;case 5:case 10:J[se-1].push(J[se]),this.$=J[se-1];break;case 6:case 7:case 11:case 12:this.$=J[se];break;case 8:case 13:this.$=[];break;case 15:J[se].type="createParticipant",this.$=J[se];break;case 16:J[se-1].unshift({type:"boxStart",boxData:ce.parseBoxData(J[se-2])}),J[se-1].push({type:"boxEnd",boxText:J[se-2]}),this.$=J[se-1];break;case 18:this.$={type:"sequenceIndex",sequenceIndex:Number(J[se-2]),sequenceIndexStep:Number(J[se-1]),sequenceVisible:!0,signalType:ce.LINETYPE.AUTONUMBER};break;case 19:this.$={type:"sequenceIndex",sequenceIndex:Number(J[se-1]),sequenceIndexStep:1,sequenceVisible:!0,signalType:ce.LINETYPE.AUTONUMBER};break;case 20:this.$={type:"sequenceIndex",sequenceVisible:!1,signalType:ce.LINETYPE.AUTONUMBER};break;case 21:this.$={type:"sequenceIndex",sequenceVisible:!0,signalType:ce.LINETYPE.AUTONUMBER};break;case 22:this.$={type:"activeStart",signalType:ce.LINETYPE.ACTIVE_START,actor:J[se-1].actor};break;case 23:this.$={type:"activeEnd",signalType:ce.LINETYPE.ACTIVE_END,actor:J[se-1].actor};break;case 29:ce.setDiagramTitle(J[se].substring(6)),this.$=J[se].substring(6);break;case 30:ce.setDiagramTitle(J[se].substring(7)),this.$=J[se].substring(7);break;case 31:this.$=J[se].trim(),ce.setAccTitle(this.$);break;case 32:case 33:this.$=J[se].trim(),ce.setAccDescription(this.$);break;case 34:J[se-1].unshift({type:"loopStart",loopText:ce.parseMessage(J[se-2]),signalType:ce.LINETYPE.LOOP_START}),J[se-1].push({type:"loopEnd",loopText:J[se-2],signalType:ce.LINETYPE.LOOP_END}),this.$=J[se-1];break;case 35:J[se-1].unshift({type:"rectStart",color:ce.parseMessage(J[se-2]),signalType:ce.LINETYPE.RECT_START}),J[se-1].push({type:"rectEnd",color:ce.parseMessage(J[se-2]),signalType:ce.LINETYPE.RECT_END}),this.$=J[se-1];break;case 36:J[se-1].unshift({type:"optStart",optText:ce.parseMessage(J[se-2]),signalType:ce.LINETYPE.OPT_START}),J[se-1].push({type:"optEnd",optText:ce.parseMessage(J[se-2]),signalType:ce.LINETYPE.OPT_END}),this.$=J[se-1];break;case 37:J[se-1].unshift({type:"altStart",altText:ce.parseMessage(J[se-2]),signalType:ce.LINETYPE.ALT_START}),J[se-1].push({type:"altEnd",signalType:ce.LINETYPE.ALT_END}),this.$=J[se-1];break;case 38:J[se-1].unshift({type:"parStart",parText:ce.parseMessage(J[se-2]),signalType:ce.LINETYPE.PAR_START}),J[se-1].push({type:"parEnd",signalType:ce.LINETYPE.PAR_END}),this.$=J[se-1];break;case 39:J[se-1].unshift({type:"parStart",parText:ce.parseMessage(J[se-2]),signalType:ce.LINETYPE.PAR_OVER_START}),J[se-1].push({type:"parEnd",signalType:ce.LINETYPE.PAR_END}),this.$=J[se-1];break;case 40:J[se-1].unshift({type:"criticalStart",criticalText:ce.parseMessage(J[se-2]),signalType:ce.LINETYPE.CRITICAL_START}),J[se-1].push({type:"criticalEnd",signalType:ce.LINETYPE.CRITICAL_END}),this.$=J[se-1];break;case 41:J[se-1].unshift({type:"breakStart",breakText:ce.parseMessage(J[se-2]),signalType:ce.LINETYPE.BREAK_START}),J[se-1].push({type:"breakEnd",optText:ce.parseMessage(J[se-2]),signalType:ce.LINETYPE.BREAK_END}),this.$=J[se-1];break;case 43:this.$=J[se-3].concat([{type:"option",optionText:ce.parseMessage(J[se-1]),signalType:ce.LINETYPE.CRITICAL_OPTION},J[se]]);break;case 45:this.$=J[se-3].concat([{type:"and",parText:ce.parseMessage(J[se-1]),signalType:ce.LINETYPE.PAR_AND},J[se]]);break;case 47:this.$=J[se-3].concat([{type:"else",altText:ce.parseMessage(J[se-1]),signalType:ce.LINETYPE.ALT_ELSE},J[se]]);break;case 48:J[se-3].draw="participant",J[se-3].type="addParticipant",J[se-3].description=ce.parseMessage(J[se-1]),this.$=J[se-3];break;case 49:J[se-1].draw="participant",J[se-1].type="addParticipant",this.$=J[se-1];break;case 50:J[se-3].draw="actor",J[se-3].type="addParticipant",J[se-3].description=ce.parseMessage(J[se-1]),this.$=J[se-3];break;case 51:J[se-1].draw="actor",J[se-1].type="addParticipant",this.$=J[se-1];break;case 52:J[se-1].type="destroyParticipant",this.$=J[se-1];break;case 53:this.$=[J[se-1],{type:"addNote",placement:J[se-2],actor:J[se-1].actor,text:J[se]}];break;case 54:J[se-2]=[].concat(J[se-1],J[se-1]).slice(0,2),J[se-2][0]=J[se-2][0].actor,J[se-2][1]=J[se-2][1].actor,this.$=[J[se-1],{type:"addNote",placement:ce.PLACEMENT.OVER,actor:J[se-2].slice(0,2),text:J[se]}];break;case 55:this.$=[J[se-1],{type:"addLinks",actor:J[se-1].actor,text:J[se]}];break;case 56:this.$=[J[se-1],{type:"addALink",actor:J[se-1].actor,text:J[se]}];break;case 57:this.$=[J[se-1],{type:"addProperties",actor:J[se-1].actor,text:J[se]}];break;case 58:this.$=[J[se-1],{type:"addDetails",actor:J[se-1].actor,text:J[se]}];break;case 61:this.$=[J[se-2],J[se]];break;case 62:this.$=J[se];break;case 63:this.$=ce.PLACEMENT.LEFTOF;break;case 64:this.$=ce.PLACEMENT.RIGHTOF;break;case 65:this.$=[J[se-4],J[se-1],{type:"addMessage",from:J[se-4].actor,to:J[se-1].actor,signalType:J[se-3],msg:J[se],activate:!0},{type:"activeStart",signalType:ce.LINETYPE.ACTIVE_START,actor:J[se-1].actor}];break;case 66:this.$=[J[se-4],J[se-1],{type:"addMessage",from:J[se-4].actor,to:J[se-1].actor,signalType:J[se-3],msg:J[se]},{type:"activeEnd",signalType:ce.LINETYPE.ACTIVE_END,actor:J[se-4].actor}];break;case 67:this.$=[J[se-3],J[se-1],{type:"addMessage",from:J[se-3].actor,to:J[se-1].actor,signalType:J[se-2],msg:J[se]}];break;case 68:this.$={type:"addParticipant",actor:J[se]};break;case 69:this.$=ce.LINETYPE.SOLID_OPEN;break;case 70:this.$=ce.LINETYPE.DOTTED_OPEN;break;case 71:this.$=ce.LINETYPE.SOLID;break;case 72:this.$=ce.LINETYPE.BIDIRECTIONAL_SOLID;break;case 73:this.$=ce.LINETYPE.DOTTED;break;case 74:this.$=ce.LINETYPE.BIDIRECTIONAL_DOTTED;break;case 75:this.$=ce.LINETYPE.SOLID_CROSS;break;case 76:this.$=ce.LINETYPE.DOTTED_CROSS;break;case 77:this.$=ce.LINETYPE.SOLID_POINT;break;case 78:this.$=ce.LINETYPE.DOTTED_POINT;break;case 79:this.$=ce.parseMessage(J[se].trim().substring(1));break}},"anonymous"),table:[{3:1,4:e,5:r,6:n},{1:[3]},{3:5,4:e,5:r,6:n},{3:6,4:e,5:r,6:n},t([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],i,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:a,5:s,8:8,9:10,12:12,13:l,14:u,17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:C,41:T,43:E,44:A,46:S,50:_,52:I,53:L,54:k,59:D,60:R,61:O,62:M,70:P},t(B,[2,5]),{9:47,12:12,13:l,14:u,17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:C,41:T,43:E,44:A,46:S,50:_,52:I,53:L,54:k,59:D,60:R,61:O,62:M,70:P},t(B,[2,7]),t(B,[2,8]),t(B,[2,14]),{12:48,50:_,52:I,53:L},{15:[1,49]},{5:[1,50]},{5:[1,53],19:[1,51],20:[1,52]},{22:54,70:P},{22:55,70:P},{5:[1,56]},{5:[1,57]},{5:[1,58]},{5:[1,59]},{5:[1,60]},t(B,[2,29]),t(B,[2,30]),{32:[1,61]},{34:[1,62]},t(B,[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:P},{22:72,70:P},{22:73,70:P},{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],79:[1,83],80:[1,84]},{55:85,57:[1,86],65:[1,87],66:[1,88]},{22:89,70:P},{22:90,70:P},{22:91,70:P},{22:92,70:P},t([5,51,64,71,72,73,74,75,76,77,78,79,80,81],[2,68]),t(B,[2,6]),t(B,[2,15]),t(F,[2,9],{10:93}),t(B,[2,17]),{5:[1,95],19:[1,94]},{5:[1,96]},t(B,[2,21]),{5:[1,97]},{5:[1,98]},t(B,[2,24]),t(B,[2,25]),t(B,[2,26]),t(B,[2,27]),t(B,[2,28]),t(B,[2,31]),t(B,[2,32]),t(z,i,{7:99}),t(z,i,{7:100}),t(z,i,{7:101}),t($,i,{40:102,7:103}),t(U,i,{42:104,7:105}),t(U,i,{7:105,42:106}),t(Q,i,{45:107,7:108}),t(z,i,{7:109}),{5:[1,111],51:[1,110]},{5:[1,113],51:[1,112]},{5:[1,114]},{22:117,68:[1,115],69:[1,116],70:P},t(te,[2,69]),t(te,[2,70]),t(te,[2,71]),t(te,[2,72]),t(te,[2,73]),t(te,[2,74]),t(te,[2,75]),t(te,[2,76]),t(te,[2,77]),t(te,[2,78]),{22:118,70:P},{22:120,58:119,70:P},{70:[2,63]},{70:[2,64]},{56:121,81:Y},{56:123,81:Y},{56:124,81:Y},{56:125,81:Y},{4:[1,128],5:[1,130],11:127,12:129,16:[1,126],50:_,52:I,53:L},{5:[1,131]},t(B,[2,19]),t(B,[2,20]),t(B,[2,22]),t(B,[2,23]),{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[1,132],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:C,41:T,43:E,44:A,46:S,50:_,52:I,53:L,54:k,59:D,60:R,61:O,62:M,70:P},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[1,133],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:C,41:T,43:E,44:A,46:S,50:_,52:I,53:L,54:k,59:D,60:R,61:O,62:M,70:P},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[1,134],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:C,41:T,43:E,44:A,46:S,50:_,52:I,53:L,54:k,59:D,60:R,61:O,62:M,70:P},{16:[1,135]},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[2,46],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:C,41:T,43:E,44:A,46:S,49:[1,136],50:_,52:I,53:L,54:k,59:D,60:R,61:O,62:M,70:P},{16:[1,137]},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[2,44],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:C,41:T,43:E,44:A,46:S,48:[1,138],50:_,52:I,53:L,54:k,59:D,60:R,61:O,62:M,70:P},{16:[1,139]},{16:[1,140]},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[2,42],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:C,41:T,43:E,44:A,46:S,47:[1,141],50:_,52:I,53:L,54:k,59:D,60:R,61:O,62:M,70:P},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[1,142],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:w,39:C,41:T,43:E,44:A,46:S,50:_,52:I,53:L,54:k,59:D,60:R,61:O,62:M,70:P},{15:[1,143]},t(B,[2,49]),{15:[1,144]},t(B,[2,51]),t(B,[2,52]),{22:145,70:P},{22:146,70:P},{56:147,81:Y},{56:148,81:Y},{56:149,81:Y},{64:[1,150],81:[2,62]},{5:[2,55]},{5:[2,79]},{5:[2,56]},{5:[2,57]},{5:[2,58]},t(B,[2,16]),t(F,[2,10]),{12:151,50:_,52:I,53:L},t(F,[2,12]),t(F,[2,13]),t(B,[2,18]),t(B,[2,34]),t(B,[2,35]),t(B,[2,36]),t(B,[2,37]),{15:[1,152]},t(B,[2,38]),{15:[1,153]},t(B,[2,39]),t(B,[2,40]),{15:[1,154]},t(B,[2,41]),{5:[1,155]},{5:[1,156]},{56:157,81:Y},{56:158,81:Y},{5:[2,67]},{5:[2,53]},{5:[2,54]},{22:159,70:P},t(F,[2,11]),t($,i,{7:103,40:160}),t(U,i,{7:105,42:161}),t(Q,i,{7:108,45:162}),t(B,[2,48]),t(B,[2,50]),{5:[2,65]},{5:[2,66]},{81:[2,61]},{16:[2,47]},{16:[2,45]},{16:[2,43]}],defaultActions:{5:[2,1],6:[2,2],87:[2,63],88:[2,64],121:[2,55],122:[2,79],123:[2,56],124:[2,57],125:[2,58],147:[2,67],148:[2,53],149:[2,54],157:[2,65],158:[2,66],159:[2,61],160:[2,47],161:[2,45],162:[2,43]},parseError:o(function(j,ne){if(ne.recoverable)this.trace(j);else{var ee=new Error(j);throw ee.hash=ne,ee}},"parseError"),parse:o(function(j){var ne=this,ee=[0],ce=[],le=[null],J=[],Se=this.table,se="",ae=0,Oe=0,ye=0,Be=2,He=1,ze=J.slice.call(arguments,1),Le=Object.create(this.lexer),Ie={yy:{}};for(var xe in this.yy)Object.prototype.hasOwnProperty.call(this.yy,xe)&&(Ie.yy[xe]=this.yy[xe]);Le.setInput(j,Ie.yy),Ie.yy.lexer=Le,Ie.yy.parser=this,typeof Le.yylloc>"u"&&(Le.yylloc={});var q=Le.yylloc;J.push(q);var de=Le.options&&Le.options.ranges;typeof Ie.yy.parseError=="function"?this.parseError=Ie.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ie(Lt){ee.length=ee.length-2*Lt,le.length=le.length-Lt,J.length=J.length-Lt}o(ie,"popStack");function oe(){var Lt;return Lt=ce.pop()||Le.lex()||He,typeof Lt!="number"&&(Lt instanceof Array&&(ce=Lt,Lt=ce.pop()),Lt=ne.symbols_[Lt]||Lt),Lt}o(oe,"lex");for(var V,we,W,pe,ve,Pe,_e={},be,Ve,De,qe;;){if(W=ee[ee.length-1],this.defaultActions[W]?pe=this.defaultActions[W]:((V===null||typeof V>"u")&&(V=oe()),pe=Se[W]&&Se[W][V]),typeof pe>"u"||!pe.length||!pe[0]){var at="";qe=[];for(be in Se[W])this.terminals_[be]&&be>Be&&qe.push("'"+this.terminals_[be]+"'");Le.showPosition?at="Parse error on line "+(ae+1)+`: +`,"getStyles"),Tde=NUe});var fP={};ur(fP,{draw:()=>MUe});var MUe,kde=N(()=>{"use strict";Gt();yt();Sm();rp();np();er();MUe=o(async function(t,e,r,n){X.info("REF0:"),X.info("Drawing requirement diagram (unified)",e);let{securityLevel:i,state:a,layout:s}=me(),l=n.db.getData(),u=wc(e,i);l.type=n.type,l.layoutAlgorithm=uf(s),l.nodeSpacing=a?.nodeSpacing??50,l.rankSpacing=a?.rankSpacing??50,l.markers=["requirement_contains","requirement_arrow"],l.diagramId=e,await Rc(l,u);let h=8;Vt.insertTitle(u,"requirementDiagramTitleText",a?.titleTopMargin??25,n.db.getDiagramTitle()),Yo(u,h,"requirementDiagram",a?.useMaxWidth??!0)},"draw")});var Ede={};ur(Ede,{diagram:()=>IUe});var IUe,Sde=N(()=>{"use strict";xde();bde();wde();kde();IUe={parser:vde,get db(){return new qS},renderer:fP,styles:Tde}});var dP,_de,Dde=N(()=>{"use strict";dP=function(){var t=o(function(Q,j,ne,te){for(ne=ne||{},te=Q.length;te--;ne[Q[te]]=j);return ne},"o"),e=[1,2],r=[1,3],n=[1,4],i=[2,4],a=[1,9],s=[1,11],l=[1,13],u=[1,14],h=[1,16],f=[1,17],d=[1,18],p=[1,24],m=[1,25],g=[1,26],y=[1,27],v=[1,28],x=[1,29],b=[1,30],T=[1,31],S=[1,32],w=[1,33],E=[1,34],_=[1,35],C=[1,36],D=[1,37],O=[1,38],R=[1,39],k=[1,41],L=[1,42],A=[1,43],I=[1,44],M=[1,45],P=[1,46],B=[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],F=[4,5,16,50,52,53],z=[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],$=[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],U=[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],K=[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],ee=[68,69,70],Y=[1,122],ce={trace:o(function(){},"trace"),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,BIDIRECTIONAL_SOLID_ARROW:74,DOTTED_ARROW:75,BIDIRECTIONAL_DOTTED_ARROW:76,SOLID_CROSS:77,DOTTED_CROSS:78,SOLID_POINT:79,DOTTED_POINT:80,TXT:81,$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:"BIDIRECTIONAL_SOLID_ARROW",75:"DOTTED_ARROW",76:"BIDIRECTIONAL_DOTTED_ARROW",77:"SOLID_CROSS",78:"DOTTED_CROSS",79:"SOLID_POINT",80:"DOTTED_POINT",81:"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],[67,1],[67,1],[56,1]],performAction:o(function(j,ne,te,he,le,J,Se){var se=J.length-1;switch(le){case 3:return he.apply(J[se]),J[se];break;case 4:case 9:this.$=[];break;case 5:case 10:J[se-1].push(J[se]),this.$=J[se-1];break;case 6:case 7:case 11:case 12:this.$=J[se];break;case 8:case 13:this.$=[];break;case 15:J[se].type="createParticipant",this.$=J[se];break;case 16:J[se-1].unshift({type:"boxStart",boxData:he.parseBoxData(J[se-2])}),J[se-1].push({type:"boxEnd",boxText:J[se-2]}),this.$=J[se-1];break;case 18:this.$={type:"sequenceIndex",sequenceIndex:Number(J[se-2]),sequenceIndexStep:Number(J[se-1]),sequenceVisible:!0,signalType:he.LINETYPE.AUTONUMBER};break;case 19:this.$={type:"sequenceIndex",sequenceIndex:Number(J[se-1]),sequenceIndexStep:1,sequenceVisible:!0,signalType:he.LINETYPE.AUTONUMBER};break;case 20:this.$={type:"sequenceIndex",sequenceVisible:!1,signalType:he.LINETYPE.AUTONUMBER};break;case 21:this.$={type:"sequenceIndex",sequenceVisible:!0,signalType:he.LINETYPE.AUTONUMBER};break;case 22:this.$={type:"activeStart",signalType:he.LINETYPE.ACTIVE_START,actor:J[se-1].actor};break;case 23:this.$={type:"activeEnd",signalType:he.LINETYPE.ACTIVE_END,actor:J[se-1].actor};break;case 29:he.setDiagramTitle(J[se].substring(6)),this.$=J[se].substring(6);break;case 30:he.setDiagramTitle(J[se].substring(7)),this.$=J[se].substring(7);break;case 31:this.$=J[se].trim(),he.setAccTitle(this.$);break;case 32:case 33:this.$=J[se].trim(),he.setAccDescription(this.$);break;case 34:J[se-1].unshift({type:"loopStart",loopText:he.parseMessage(J[se-2]),signalType:he.LINETYPE.LOOP_START}),J[se-1].push({type:"loopEnd",loopText:J[se-2],signalType:he.LINETYPE.LOOP_END}),this.$=J[se-1];break;case 35:J[se-1].unshift({type:"rectStart",color:he.parseMessage(J[se-2]),signalType:he.LINETYPE.RECT_START}),J[se-1].push({type:"rectEnd",color:he.parseMessage(J[se-2]),signalType:he.LINETYPE.RECT_END}),this.$=J[se-1];break;case 36:J[se-1].unshift({type:"optStart",optText:he.parseMessage(J[se-2]),signalType:he.LINETYPE.OPT_START}),J[se-1].push({type:"optEnd",optText:he.parseMessage(J[se-2]),signalType:he.LINETYPE.OPT_END}),this.$=J[se-1];break;case 37:J[se-1].unshift({type:"altStart",altText:he.parseMessage(J[se-2]),signalType:he.LINETYPE.ALT_START}),J[se-1].push({type:"altEnd",signalType:he.LINETYPE.ALT_END}),this.$=J[se-1];break;case 38:J[se-1].unshift({type:"parStart",parText:he.parseMessage(J[se-2]),signalType:he.LINETYPE.PAR_START}),J[se-1].push({type:"parEnd",signalType:he.LINETYPE.PAR_END}),this.$=J[se-1];break;case 39:J[se-1].unshift({type:"parStart",parText:he.parseMessage(J[se-2]),signalType:he.LINETYPE.PAR_OVER_START}),J[se-1].push({type:"parEnd",signalType:he.LINETYPE.PAR_END}),this.$=J[se-1];break;case 40:J[se-1].unshift({type:"criticalStart",criticalText:he.parseMessage(J[se-2]),signalType:he.LINETYPE.CRITICAL_START}),J[se-1].push({type:"criticalEnd",signalType:he.LINETYPE.CRITICAL_END}),this.$=J[se-1];break;case 41:J[se-1].unshift({type:"breakStart",breakText:he.parseMessage(J[se-2]),signalType:he.LINETYPE.BREAK_START}),J[se-1].push({type:"breakEnd",optText:he.parseMessage(J[se-2]),signalType:he.LINETYPE.BREAK_END}),this.$=J[se-1];break;case 43:this.$=J[se-3].concat([{type:"option",optionText:he.parseMessage(J[se-1]),signalType:he.LINETYPE.CRITICAL_OPTION},J[se]]);break;case 45:this.$=J[se-3].concat([{type:"and",parText:he.parseMessage(J[se-1]),signalType:he.LINETYPE.PAR_AND},J[se]]);break;case 47:this.$=J[se-3].concat([{type:"else",altText:he.parseMessage(J[se-1]),signalType:he.LINETYPE.ALT_ELSE},J[se]]);break;case 48:J[se-3].draw="participant",J[se-3].type="addParticipant",J[se-3].description=he.parseMessage(J[se-1]),this.$=J[se-3];break;case 49:J[se-1].draw="participant",J[se-1].type="addParticipant",this.$=J[se-1];break;case 50:J[se-3].draw="actor",J[se-3].type="addParticipant",J[se-3].description=he.parseMessage(J[se-1]),this.$=J[se-3];break;case 51:J[se-1].draw="actor",J[se-1].type="addParticipant",this.$=J[se-1];break;case 52:J[se-1].type="destroyParticipant",this.$=J[se-1];break;case 53:this.$=[J[se-1],{type:"addNote",placement:J[se-2],actor:J[se-1].actor,text:J[se]}];break;case 54:J[se-2]=[].concat(J[se-1],J[se-1]).slice(0,2),J[se-2][0]=J[se-2][0].actor,J[se-2][1]=J[se-2][1].actor,this.$=[J[se-1],{type:"addNote",placement:he.PLACEMENT.OVER,actor:J[se-2].slice(0,2),text:J[se]}];break;case 55:this.$=[J[se-1],{type:"addLinks",actor:J[se-1].actor,text:J[se]}];break;case 56:this.$=[J[se-1],{type:"addALink",actor:J[se-1].actor,text:J[se]}];break;case 57:this.$=[J[se-1],{type:"addProperties",actor:J[se-1].actor,text:J[se]}];break;case 58:this.$=[J[se-1],{type:"addDetails",actor:J[se-1].actor,text:J[se]}];break;case 61:this.$=[J[se-2],J[se]];break;case 62:this.$=J[se];break;case 63:this.$=he.PLACEMENT.LEFTOF;break;case 64:this.$=he.PLACEMENT.RIGHTOF;break;case 65:this.$=[J[se-4],J[se-1],{type:"addMessage",from:J[se-4].actor,to:J[se-1].actor,signalType:J[se-3],msg:J[se],activate:!0},{type:"activeStart",signalType:he.LINETYPE.ACTIVE_START,actor:J[se-1].actor}];break;case 66:this.$=[J[se-4],J[se-1],{type:"addMessage",from:J[se-4].actor,to:J[se-1].actor,signalType:J[se-3],msg:J[se]},{type:"activeEnd",signalType:he.LINETYPE.ACTIVE_END,actor:J[se-4].actor}];break;case 67:this.$=[J[se-3],J[se-1],{type:"addMessage",from:J[se-3].actor,to:J[se-1].actor,signalType:J[se-2],msg:J[se]}];break;case 68:this.$={type:"addParticipant",actor:J[se]};break;case 69:this.$=he.LINETYPE.SOLID_OPEN;break;case 70:this.$=he.LINETYPE.DOTTED_OPEN;break;case 71:this.$=he.LINETYPE.SOLID;break;case 72:this.$=he.LINETYPE.BIDIRECTIONAL_SOLID;break;case 73:this.$=he.LINETYPE.DOTTED;break;case 74:this.$=he.LINETYPE.BIDIRECTIONAL_DOTTED;break;case 75:this.$=he.LINETYPE.SOLID_CROSS;break;case 76:this.$=he.LINETYPE.DOTTED_CROSS;break;case 77:this.$=he.LINETYPE.SOLID_POINT;break;case 78:this.$=he.LINETYPE.DOTTED_POINT;break;case 79:this.$=he.parseMessage(J[se].trim().substring(1));break}},"anonymous"),table:[{3:1,4:e,5:r,6:n},{1:[3]},{3:5,4:e,5:r,6:n},{3:6,4:e,5:r,6:n},t([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],i,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:a,5:s,8:8,9:10,12:12,13:l,14:u,17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:T,39:S,41:w,43:E,44:_,46:C,50:D,52:O,53:R,54:k,59:L,60:A,61:I,62:M,70:P},t(B,[2,5]),{9:47,12:12,13:l,14:u,17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:T,39:S,41:w,43:E,44:_,46:C,50:D,52:O,53:R,54:k,59:L,60:A,61:I,62:M,70:P},t(B,[2,7]),t(B,[2,8]),t(B,[2,14]),{12:48,50:D,52:O,53:R},{15:[1,49]},{5:[1,50]},{5:[1,53],19:[1,51],20:[1,52]},{22:54,70:P},{22:55,70:P},{5:[1,56]},{5:[1,57]},{5:[1,58]},{5:[1,59]},{5:[1,60]},t(B,[2,29]),t(B,[2,30]),{32:[1,61]},{34:[1,62]},t(B,[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:P},{22:72,70:P},{22:73,70:P},{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],79:[1,83],80:[1,84]},{55:85,57:[1,86],65:[1,87],66:[1,88]},{22:89,70:P},{22:90,70:P},{22:91,70:P},{22:92,70:P},t([5,51,64,71,72,73,74,75,76,77,78,79,80,81],[2,68]),t(B,[2,6]),t(B,[2,15]),t(F,[2,9],{10:93}),t(B,[2,17]),{5:[1,95],19:[1,94]},{5:[1,96]},t(B,[2,21]),{5:[1,97]},{5:[1,98]},t(B,[2,24]),t(B,[2,25]),t(B,[2,26]),t(B,[2,27]),t(B,[2,28]),t(B,[2,31]),t(B,[2,32]),t(z,i,{7:99}),t(z,i,{7:100}),t(z,i,{7:101}),t($,i,{40:102,7:103}),t(U,i,{42:104,7:105}),t(U,i,{7:105,42:106}),t(K,i,{45:107,7:108}),t(z,i,{7:109}),{5:[1,111],51:[1,110]},{5:[1,113],51:[1,112]},{5:[1,114]},{22:117,68:[1,115],69:[1,116],70:P},t(ee,[2,69]),t(ee,[2,70]),t(ee,[2,71]),t(ee,[2,72]),t(ee,[2,73]),t(ee,[2,74]),t(ee,[2,75]),t(ee,[2,76]),t(ee,[2,77]),t(ee,[2,78]),{22:118,70:P},{22:120,58:119,70:P},{70:[2,63]},{70:[2,64]},{56:121,81:Y},{56:123,81:Y},{56:124,81:Y},{56:125,81:Y},{4:[1,128],5:[1,130],11:127,12:129,16:[1,126],50:D,52:O,53:R},{5:[1,131]},t(B,[2,19]),t(B,[2,20]),t(B,[2,22]),t(B,[2,23]),{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[1,132],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:T,39:S,41:w,43:E,44:_,46:C,50:D,52:O,53:R,54:k,59:L,60:A,61:I,62:M,70:P},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[1,133],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:T,39:S,41:w,43:E,44:_,46:C,50:D,52:O,53:R,54:k,59:L,60:A,61:I,62:M,70:P},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[1,134],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:T,39:S,41:w,43:E,44:_,46:C,50:D,52:O,53:R,54:k,59:L,60:A,61:I,62:M,70:P},{16:[1,135]},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[2,46],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:T,39:S,41:w,43:E,44:_,46:C,49:[1,136],50:D,52:O,53:R,54:k,59:L,60:A,61:I,62:M,70:P},{16:[1,137]},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[2,44],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:T,39:S,41:w,43:E,44:_,46:C,48:[1,138],50:D,52:O,53:R,54:k,59:L,60:A,61:I,62:M,70:P},{16:[1,139]},{16:[1,140]},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[2,42],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:T,39:S,41:w,43:E,44:_,46:C,47:[1,141],50:D,52:O,53:R,54:k,59:L,60:A,61:I,62:M,70:P},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[1,142],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:T,39:S,41:w,43:E,44:_,46:C,50:D,52:O,53:R,54:k,59:L,60:A,61:I,62:M,70:P},{15:[1,143]},t(B,[2,49]),{15:[1,144]},t(B,[2,51]),t(B,[2,52]),{22:145,70:P},{22:146,70:P},{56:147,81:Y},{56:148,81:Y},{56:149,81:Y},{64:[1,150],81:[2,62]},{5:[2,55]},{5:[2,79]},{5:[2,56]},{5:[2,57]},{5:[2,58]},t(B,[2,16]),t(F,[2,10]),{12:151,50:D,52:O,53:R},t(F,[2,12]),t(F,[2,13]),t(B,[2,18]),t(B,[2,34]),t(B,[2,35]),t(B,[2,36]),t(B,[2,37]),{15:[1,152]},t(B,[2,38]),{15:[1,153]},t(B,[2,39]),t(B,[2,40]),{15:[1,154]},t(B,[2,41]),{5:[1,155]},{5:[1,156]},{56:157,81:Y},{56:158,81:Y},{5:[2,67]},{5:[2,53]},{5:[2,54]},{22:159,70:P},t(F,[2,11]),t($,i,{7:103,40:160}),t(U,i,{7:105,42:161}),t(K,i,{7:108,45:162}),t(B,[2,48]),t(B,[2,50]),{5:[2,65]},{5:[2,66]},{81:[2,61]},{16:[2,47]},{16:[2,45]},{16:[2,43]}],defaultActions:{5:[2,1],6:[2,2],87:[2,63],88:[2,64],121:[2,55],122:[2,79],123:[2,56],124:[2,57],125:[2,58],147:[2,67],148:[2,53],149:[2,54],157:[2,65],158:[2,66],159:[2,61],160:[2,47],161:[2,45],162:[2,43]},parseError:o(function(j,ne){if(ne.recoverable)this.trace(j);else{var te=new Error(j);throw te.hash=ne,te}},"parseError"),parse:o(function(j){var ne=this,te=[0],he=[],le=[null],J=[],Se=this.table,se="",ae=0,Oe=0,ye=0,Be=2,He=1,ze=J.slice.call(arguments,1),Le=Object.create(this.lexer),Ie={yy:{}};for(var xe in this.yy)Object.prototype.hasOwnProperty.call(this.yy,xe)&&(Ie.yy[xe]=this.yy[xe]);Le.setInput(j,Ie.yy),Ie.yy.lexer=Le,Ie.yy.parser=this,typeof Le.yylloc>"u"&&(Le.yylloc={});var q=Le.yylloc;J.push(q);var de=Le.options&&Le.options.ranges;typeof Ie.yy.parseError=="function"?this.parseError=Ie.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ie(Rt){te.length=te.length-2*Rt,le.length=le.length-Rt,J.length=J.length-Rt}o(ie,"popStack");function oe(){var Rt;return Rt=he.pop()||Le.lex()||He,typeof Rt!="number"&&(Rt instanceof Array&&(he=Rt,Rt=he.pop()),Rt=ne.symbols_[Rt]||Rt),Rt}o(oe,"lex");for(var V,Te,W,pe,ve,Pe,_e={},be,Ve,De,qe;;){if(W=te[te.length-1],this.defaultActions[W]?pe=this.defaultActions[W]:((V===null||typeof V>"u")&&(V=oe()),pe=Se[W]&&Se[W][V]),typeof pe>"u"||!pe.length||!pe[0]){var at="";qe=[];for(be in Se[W])this.terminals_[be]&&be>Be&&qe.push("'"+this.terminals_[be]+"'");Le.showPosition?at="Parse error on line "+(ae+1)+`: `+Le.showPosition()+` -Expecting `+qe.join(", ")+", got '"+(this.terminals_[V]||V)+"'":at="Parse error on line "+(ae+1)+": Unexpected "+(V==He?"end of input":"'"+(this.terminals_[V]||V)+"'"),this.parseError(at,{text:Le.match,token:this.terminals_[V]||V,line:Le.yylineno,loc:q,expected:qe})}if(pe[0]instanceof Array&&pe.length>1)throw new Error("Parse Error: multiple actions possible at state: "+W+", token: "+V);switch(pe[0]){case 1:ee.push(V),le.push(Le.yytext),J.push(Le.yylloc),ee.push(pe[1]),V=null,we?(V=we,we=null):(Oe=Le.yyleng,se=Le.yytext,ae=Le.yylineno,q=Le.yylloc,ye>0&&ye--);break;case 2:if(Ve=this.productions_[pe[1]][1],_e.$=le[le.length-Ve],_e._$={first_line:J[J.length-(Ve||1)].first_line,last_line:J[J.length-1].last_line,first_column:J[J.length-(Ve||1)].first_column,last_column:J[J.length-1].last_column},de&&(_e._$.range=[J[J.length-(Ve||1)].range[0],J[J.length-1].range[1]]),Pe=this.performAction.apply(_e,[se,Oe,ae,Ie.yy,pe[1],le,J].concat(ze)),typeof Pe<"u")return Pe;Ve&&(ee=ee.slice(0,-1*Ve*2),le=le.slice(0,-1*Ve),J=J.slice(0,-1*Ve)),ee.push(this.productions_[pe[1]][0]),le.push(_e.$),J.push(_e._$),De=Se[ee[ee.length-2]][ee[ee.length-1]],ee.push(De);break;case 3:return!0}}return!0},"parse")},Z=function(){var K={EOF:1,parseError:o(function(ne,ee){if(this.yy.parser)this.yy.parser.parseError(ne,ee);else throw new Error(ne)},"parseError"),setInput:o(function(j,ne){return this.yy=ne||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},"setInput"),input:o(function(){var j=this._input[0];this.yytext+=j,this.yyleng++,this.offset++,this.match+=j,this.matched+=j;var ne=j.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),j},"input"),unput:o(function(j){var ne=j.length,ee=j.split(/(?:\r\n?|\n)/g);this._input=j+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-ne),this.offset-=ne;var ce=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),ee.length-1&&(this.yylineno-=ee.length-1);var le=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:ee?(ee.length===ce.length?this.yylloc.first_column:0)+ce[ce.length-ee.length].length-ee[0].length:this.yylloc.first_column-ne},this.options.ranges&&(this.yylloc.range=[le[0],le[0]+this.yyleng-ne]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(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). +Expecting `+qe.join(", ")+", got '"+(this.terminals_[V]||V)+"'":at="Parse error on line "+(ae+1)+": Unexpected "+(V==He?"end of input":"'"+(this.terminals_[V]||V)+"'"),this.parseError(at,{text:Le.match,token:this.terminals_[V]||V,line:Le.yylineno,loc:q,expected:qe})}if(pe[0]instanceof Array&&pe.length>1)throw new Error("Parse Error: multiple actions possible at state: "+W+", token: "+V);switch(pe[0]){case 1:te.push(V),le.push(Le.yytext),J.push(Le.yylloc),te.push(pe[1]),V=null,Te?(V=Te,Te=null):(Oe=Le.yyleng,se=Le.yytext,ae=Le.yylineno,q=Le.yylloc,ye>0&&ye--);break;case 2:if(Ve=this.productions_[pe[1]][1],_e.$=le[le.length-Ve],_e._$={first_line:J[J.length-(Ve||1)].first_line,last_line:J[J.length-1].last_line,first_column:J[J.length-(Ve||1)].first_column,last_column:J[J.length-1].last_column},de&&(_e._$.range=[J[J.length-(Ve||1)].range[0],J[J.length-1].range[1]]),Pe=this.performAction.apply(_e,[se,Oe,ae,Ie.yy,pe[1],le,J].concat(ze)),typeof Pe<"u")return Pe;Ve&&(te=te.slice(0,-1*Ve*2),le=le.slice(0,-1*Ve),J=J.slice(0,-1*Ve)),te.push(this.productions_[pe[1]][0]),le.push(_e.$),J.push(_e._$),De=Se[te[te.length-2]][te[te.length-1]],te.push(De);break;case 3:return!0}}return!0},"parse")},Z=function(){var Q={EOF:1,parseError:o(function(ne,te){if(this.yy.parser)this.yy.parser.parseError(ne,te);else throw new Error(ne)},"parseError"),setInput:o(function(j,ne){return this.yy=ne||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},"setInput"),input:o(function(){var j=this._input[0];this.yytext+=j,this.yyleng++,this.offset++,this.match+=j,this.matched+=j;var ne=j.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),j},"input"),unput:o(function(j){var ne=j.length,te=j.split(/(?:\r\n?|\n)/g);this._input=j+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-ne),this.offset-=ne;var he=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),te.length-1&&(this.yylineno-=te.length-1);var le=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:te?(te.length===he.length?this.yylloc.first_column:0)+he[he.length-te.length].length-te[0].length:this.yylloc.first_column-ne},this.options.ranges&&(this.yylloc.range=[le[0],le[0]+this.yyleng-ne]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(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},"reject"),less:o(function(j){this.unput(this.match.slice(j))},"less"),pastInput:o(function(){var j=this.matched.substr(0,this.matched.length-this.match.length);return(j.length>20?"...":"")+j.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(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,"")},"upcomingInput"),showPosition:o(function(){var j=this.pastInput(),ne=new Array(j.length+1).join("-");return j+this.upcomingInput()+` -`+ne+"^"},"showPosition"),test_match:o(function(j,ne){var ee,ce,le;if(this.options.backtrack_lexer&&(le={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&&(le.yylloc.range=this.yylloc.range.slice(0))),ce=j[0].match(/(?:\r\n?|\n).*/g),ce&&(this.yylineno+=ce.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:ce?ce[ce.length-1].length-ce[ce.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],ee=this.performAction.call(this,this.yy,this,ne,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),ee)return ee;if(this._backtrack){for(var J in le)this[J]=le[J];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var j,ne,ee,ce;this._more||(this.yytext="",this.match="");for(var le=this._currentRules(),J=0;Jne[0].length)){if(ne=ee,ce=J,this.options.backtrack_lexer){if(j=this.test_match(ee,le[J]),j!==!1)return j;if(this._backtrack){ne=!1;continue}else return!1}else if(!this.options.flex)break}return ne?(j=this.test_match(ne,le[ce]),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})},"next"),lex:o(function(){var ne=this.next();return ne||this.lex()},"lex"),begin:o(function(ne){this.conditionStack.push(ne)},"begin"),popState:o(function(){var ne=this.conditionStack.length-1;return ne>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(ne){return ne=this.conditionStack.length-1-Math.abs(ne||0),ne>=0?this.conditionStack[ne]:"INITIAL"},"topState"),pushState:o(function(ne){this.begin(ne)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(ne,ee,ce,le){var J=le;switch(ce){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;break;case 8:return this.begin("ID"),50;break;case 9:return this.begin("ID"),52;break;case 10:return 13;case 11:return this.begin("ID"),53;break;case 12:return ee.yytext=ee.yytext.trim(),this.begin("ALIAS"),70;break;case 13:return this.popState(),this.popState(),this.begin("LINE"),51;break;case 14:return this.popState(),this.popState(),5;break;case 15:return this.begin("LINE"),36;break;case 16:return this.begin("LINE"),37;break;case 17:return this.begin("LINE"),38;break;case 18:return this.begin("LINE"),39;break;case 19:return this.begin("LINE"),49;break;case 20:return this.begin("LINE"),41;break;case 21:return this.begin("LINE"),43;break;case 22:return this.begin("LINE"),48;break;case 23:return this.begin("LINE"),44;break;case 24:return this.begin("LINE"),47;break;case 25:return this.begin("LINE"),46;break;case 26:return this.popState(),15;break;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;break;case 37:return this.begin("ID"),23;break;case 38:return 29;case 39:return 30;case 40:return this.begin("acc_title"),31;break;case 41:return this.popState(),"acc_title_value";break;case 42:return this.begin("acc_descr"),33;break;case 43:return this.popState(),"acc_descr_value";break;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 ee.yytext=ee.yytext.trim(),70;break;case 53:return 73;case 54:return 74;case 55:return 75;case 56:return 76;case 57:return 71;case 58:return 72;case 59:return 77;case 60:return 78;case 61:return 79;case 62:return 80;case 63:return 81;case 64:return 81;case 65:return 68;case 66:return 69;case 67:return 5;case 68:return"INVALID"}},"anonymous"),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,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?:-[\)])/i,/^(?:--[\)])/i,/^(?::(?:(?:no)?wrap)?[^#\n;]*)/i,/^(?::)/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,66,67,68],inclusive:!0}}};return K}();he.lexer=Z;function ue(){this.yy={}}return o(ue,"Parser"),ue.prototype=he,he.Parser=ue,new ue}();RO.parser=RO;ffe=RO});var eVe,tVe,rVe,IS,pfe=N(()=>{"use strict";zt();vt();fS();dr();mi();eVe={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,BIDIRECTIONAL_SOLID:33,BIDIRECTIONAL_DOTTED:34},tVe={FILLED:0,OPEN:1},rVe={LEFTOF:0,RIGHTOF:1,OVER:2},IS=class{constructor(){this.state=new vf(()=>({prevActor:void 0,actors:new Map,createdActors:new Map,destroyedActors:new Map,boxes:[],messages:[],notes:[],sequenceNumbersEnabled:!1,wrapEnabled:void 0,currentBox:void 0,lastCreated:void 0,lastDestroyed:void 0}));this.setAccTitle=Lr;this.setAccDescription=Nr;this.setDiagramTitle=$r;this.getAccTitle=Rr;this.getAccDescription=Mr;this.getDiagramTitle=Ir;this.apply=this.apply.bind(this),this.parseBoxData=this.parseBoxData.bind(this),this.parseMessage=this.parseMessage.bind(this),this.clear(),this.setWrap(me().wrap),this.LINETYPE=eVe,this.ARROWTYPE=tVe,this.PLACEMENT=rVe}static{o(this,"SequenceDB")}addBox(e){this.state.records.boxes.push({name:e.text,wrap:e.wrap??this.autoWrap(),fill:e.color,actorKeys:[]}),this.state.records.currentBox=this.state.records.boxes.slice(-1)[0]}addActor(e,r,n,i){let a=this.state.records.currentBox,s=this.state.records.actors.get(e);if(s){if(this.state.records.currentBox&&s.box&&this.state.records.currentBox!==s.box)throw new Error(`A same participant should only be defined in one Box: ${s.name} can't be in '${s.box.name}' and in '${this.state.records.currentBox.name}' at the same time.`);if(a=s.box?s.box:this.state.records.currentBox,s.box=a,s&&r===s.name&&n==null)return}if(n?.text==null&&(n={text:r,type:i}),(i==null||n.text==null)&&(n={text:r,type:i}),this.state.records.actors.set(e,{box:a,name:r,description:n.text,wrap:n.wrap??this.autoWrap(),prevActor:this.state.records.prevActor,links:{},properties:{},actorCnt:null,rectData:null,type:i??"participant"}),this.state.records.prevActor){let l=this.state.records.actors.get(this.state.records.prevActor);l&&(l.nextActor=e)}this.state.records.currentBox&&this.state.records.currentBox.actorKeys.push(e),this.state.records.prevActor=e}activationCount(e){let r,n=0;if(!e)return 0;for(r=0;r>-",token:"->>-",line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["'ACTIVE_PARTICIPANT'"]},l}return this.state.records.messages.push({id:this.state.records.messages.length.toString(),from:e,to:r,message:n?.text??"",wrap:n?.wrap??this.autoWrap(),type:i,activate:a}),!0}hasAtLeastOneBox(){return this.state.records.boxes.length>0}hasAtLeastOneBoxWithTitle(){return this.state.records.boxes.some(e=>e.name)}getMessages(){return this.state.records.messages}getBoxes(){return this.state.records.boxes}getActors(){return this.state.records.actors}getCreatedActors(){return this.state.records.createdActors}getDestroyedActors(){return this.state.records.destroyedActors}getActor(e){return this.state.records.actors.get(e)}getActorKeys(){return[...this.state.records.actors.keys()]}enableSequenceNumbers(){this.state.records.sequenceNumbersEnabled=!0}disableSequenceNumbers(){this.state.records.sequenceNumbersEnabled=!1}showSequenceNumbers(){return this.state.records.sequenceNumbersEnabled}setWrap(e){this.state.records.wrapEnabled=e}extractWrap(e){if(e===void 0)return{};e=e.trim();let r=/^:?wrap:/.exec(e)!==null?!0:/^:?nowrap:/.exec(e)!==null?!1:void 0;return{cleanedText:(r===void 0?e:e.replace(/^:?(?:no)?wrap:/,"")).trim(),wrap:r}}autoWrap(){return this.state.records.wrapEnabled!==void 0?this.state.records.wrapEnabled:me().sequence?.wrap??!1}clear(){this.state.reset(),Ar()}parseMessage(e){let r=e.trim(),{wrap:n,cleanedText:i}=this.extractWrap(r),a={text:i,wrap:n};return X.debug(`parseMessage: ${JSON.stringify(a)}`),a}parseBoxData(e){let r=/^((?:rgba?|hsla?)\s*\(.*\)|\w*)(.*)$/.exec(e),n=r?.[1]?r[1].trim():"transparent",i=r?.[2]?r[2].trim():void 0;if(window?.CSS)window.CSS.supports("color",n)||(n="transparent",i=e.trim());else{let l=new Option().style;l.color=n,l.color!==n&&(n="transparent",i=e.trim())}let{wrap:a,cleanedText:s}=this.extractWrap(i);return{text:s?Tr(s,me()):void 0,color:n,wrap:a}}addNote(e,r,n){let i={actor:e,placement:r,message:n.text,wrap:n.wrap??this.autoWrap()},a=[].concat(e,e);this.state.records.notes.push(i),this.state.records.messages.push({id:this.state.records.messages.length.toString(),from:a[0],to:a[1],message:n.text,wrap:n.wrap??this.autoWrap(),type:this.LINETYPE.NOTE,placement:r})}addLinks(e,r){let n=this.getActor(e);try{let i=Tr(r.text,me());i=i.replace(/=/g,"="),i=i.replace(/&/g,"&");let a=JSON.parse(i);this.insertLinks(n,a)}catch(i){X.error("error while parsing actor link text",i)}}addALink(e,r){let n=this.getActor(e);try{let i={},a=Tr(r.text,me()),s=a.indexOf("@");a=a.replace(/=/g,"="),a=a.replace(/&/g,"&");let l=a.slice(0,s-1).trim(),u=a.slice(s+1).trim();i[l]=u,this.insertLinks(n,i)}catch(i){X.error("error while parsing actor link text",i)}}insertLinks(e,r){if(e.links==null)e.links=r;else for(let n in r)e.links[n]=r[n]}addProperties(e,r){let n=this.getActor(e);try{let i=Tr(r.text,me()),a=JSON.parse(i);this.insertProperties(n,a)}catch(i){X.error("error while parsing actor properties text",i)}}insertProperties(e,r){if(e.properties==null)e.properties=r;else for(let n in r)e.properties[n]=r[n]}boxEnd(){this.state.records.currentBox=void 0}addDetails(e,r){let n=this.getActor(e),i=document.getElementById(r.text);try{let a=i.innerHTML,s=JSON.parse(a);s.properties&&this.insertProperties(n,s.properties),s.links&&this.insertLinks(n,s.links)}catch(a){X.error("error while parsing actor details text",a)}}getActorProperty(e,r){if(e?.properties!==void 0)return e.properties[r]}apply(e){if(Array.isArray(e))e.forEach(r=>{this.apply(r)});else switch(e.type){case"sequenceIndex":this.state.records.messages.push({id:this.state.records.messages.length.toString(),from:void 0,to:void 0,message:{start:e.sequenceIndex,step:e.sequenceIndexStep,visible:e.sequenceVisible},wrap:!1,type:e.signalType});break;case"addParticipant":this.addActor(e.actor,e.actor,e.description,e.draw);break;case"createParticipant":if(this.state.records.actors.has(e.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");this.state.records.lastCreated=e.actor,this.addActor(e.actor,e.actor,e.description,e.draw),this.state.records.createdActors.set(e.actor,this.state.records.messages.length);break;case"destroyParticipant":this.state.records.lastDestroyed=e.actor,this.state.records.destroyedActors.set(e.actor,this.state.records.messages.length);break;case"activeStart":this.addSignal(e.actor,void 0,void 0,e.signalType);break;case"activeEnd":this.addSignal(e.actor,void 0,void 0,e.signalType);break;case"addNote":this.addNote(e.actor,e.placement,e.text);break;case"addLinks":this.addLinks(e.actor,e.text);break;case"addALink":this.addALink(e.actor,e.text);break;case"addProperties":this.addProperties(e.actor,e.text);break;case"addDetails":this.addDetails(e.actor,e.text);break;case"addMessage":if(this.state.records.lastCreated){if(e.to!==this.state.records.lastCreated)throw new Error("The created participant "+this.state.records.lastCreated.name+" does not have an associated creating message after its declaration. Please check the sequence diagram.");this.state.records.lastCreated=void 0}else if(this.state.records.lastDestroyed){if(e.to!==this.state.records.lastDestroyed&&e.from!==this.state.records.lastDestroyed)throw new Error("The destroyed participant "+this.state.records.lastDestroyed.name+" does not have an associated destroying message after its declaration. Please check the sequence diagram.");this.state.records.lastDestroyed=void 0}this.addSignal(e.from,e.to,e.msg,e.signalType,e.activate);break;case"boxStart":this.addBox(e.boxData);break;case"boxEnd":this.boxEnd();break;case"loopStart":this.addSignal(void 0,void 0,e.loopText,e.signalType);break;case"loopEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"rectStart":this.addSignal(void 0,void 0,e.color,e.signalType);break;case"rectEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"optStart":this.addSignal(void 0,void 0,e.optText,e.signalType);break;case"optEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"altStart":this.addSignal(void 0,void 0,e.altText,e.signalType);break;case"else":this.addSignal(void 0,void 0,e.altText,e.signalType);break;case"altEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"setAccTitle":Lr(e.text);break;case"parStart":this.addSignal(void 0,void 0,e.parText,e.signalType);break;case"and":this.addSignal(void 0,void 0,e.parText,e.signalType);break;case"parEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"criticalStart":this.addSignal(void 0,void 0,e.criticalText,e.signalType);break;case"option":this.addSignal(void 0,void 0,e.optionText,e.signalType);break;case"criticalEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"breakStart":this.addSignal(void 0,void 0,e.breakText,e.signalType);break;case"breakEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break}}getConfig(){return me().sequence}}});var nVe,mfe,gfe=N(()=>{"use strict";nVe=o(t=>`.actor { +`+ne+"^"},"showPosition"),test_match:o(function(j,ne){var te,he,le;if(this.options.backtrack_lexer&&(le={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&&(le.yylloc.range=this.yylloc.range.slice(0))),he=j[0].match(/(?:\r\n?|\n).*/g),he&&(this.yylineno+=he.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:he?he[he.length-1].length-he[he.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],te=this.performAction.call(this,this.yy,this,ne,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),te)return te;if(this._backtrack){for(var J in le)this[J]=le[J];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var j,ne,te,he;this._more||(this.yytext="",this.match="");for(var le=this._currentRules(),J=0;Jne[0].length)){if(ne=te,he=J,this.options.backtrack_lexer){if(j=this.test_match(te,le[J]),j!==!1)return j;if(this._backtrack){ne=!1;continue}else return!1}else if(!this.options.flex)break}return ne?(j=this.test_match(ne,le[he]),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})},"next"),lex:o(function(){var ne=this.next();return ne||this.lex()},"lex"),begin:o(function(ne){this.conditionStack.push(ne)},"begin"),popState:o(function(){var ne=this.conditionStack.length-1;return ne>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(ne){return ne=this.conditionStack.length-1-Math.abs(ne||0),ne>=0?this.conditionStack[ne]:"INITIAL"},"topState"),pushState:o(function(ne){this.begin(ne)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(ne,te,he,le){var J=le;switch(he){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;break;case 8:return this.begin("ID"),50;break;case 9:return this.begin("ID"),52;break;case 10:return 13;case 11:return this.begin("ID"),53;break;case 12:return te.yytext=te.yytext.trim(),this.begin("ALIAS"),70;break;case 13:return this.popState(),this.popState(),this.begin("LINE"),51;break;case 14:return this.popState(),this.popState(),5;break;case 15:return this.begin("LINE"),36;break;case 16:return this.begin("LINE"),37;break;case 17:return this.begin("LINE"),38;break;case 18:return this.begin("LINE"),39;break;case 19:return this.begin("LINE"),49;break;case 20:return this.begin("LINE"),41;break;case 21:return this.begin("LINE"),43;break;case 22:return this.begin("LINE"),48;break;case 23:return this.begin("LINE"),44;break;case 24:return this.begin("LINE"),47;break;case 25:return this.begin("LINE"),46;break;case 26:return this.popState(),15;break;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;break;case 37:return this.begin("ID"),23;break;case 38:return 29;case 39:return 30;case 40:return this.begin("acc_title"),31;break;case 41:return this.popState(),"acc_title_value";break;case 42:return this.begin("acc_descr"),33;break;case 43:return this.popState(),"acc_descr_value";break;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 te.yytext=te.yytext.trim(),70;break;case 53:return 73;case 54:return 74;case 55:return 75;case 56:return 76;case 57:return 71;case 58:return 72;case 59:return 77;case 60:return 78;case 61:return 79;case 62:return 80;case 63:return 81;case 64:return 81;case 65:return 68;case 66:return 69;case 67:return 5;case 68:return"INVALID"}},"anonymous"),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,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?:-[\)])/i,/^(?:--[\)])/i,/^(?::(?:(?:no)?wrap)?[^#\n;]*)/i,/^(?::)/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,66,67,68],inclusive:!0}}};return Q}();ce.lexer=Z;function ue(){this.yy={}}return o(ue,"Parser"),ue.prototype=ce,ce.Parser=ue,new ue}();dP.parser=dP;_de=dP});var FUe,$Ue,zUe,YS,Lde=N(()=>{"use strict";Gt();yt();SS();pr();ci();FUe={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,BIDIRECTIONAL_SOLID:33,BIDIRECTIONAL_DOTTED:34},$Ue={FILLED:0,OPEN:1},zUe={LEFTOF:0,RIGHTOF:1,OVER:2},YS=class{constructor(){this.state=new Tf(()=>({prevActor:void 0,actors:new Map,createdActors:new Map,destroyedActors:new Map,boxes:[],messages:[],notes:[],sequenceNumbersEnabled:!1,wrapEnabled:void 0,currentBox:void 0,lastCreated:void 0,lastDestroyed:void 0}));this.setAccTitle=Ar;this.setAccDescription=Lr;this.setDiagramTitle=Or;this.getAccTitle=Dr;this.getAccDescription=Rr;this.getDiagramTitle=Nr;this.apply=this.apply.bind(this),this.parseBoxData=this.parseBoxData.bind(this),this.parseMessage=this.parseMessage.bind(this),this.clear(),this.setWrap(me().wrap),this.LINETYPE=FUe,this.ARROWTYPE=$Ue,this.PLACEMENT=zUe}static{o(this,"SequenceDB")}addBox(e){this.state.records.boxes.push({name:e.text,wrap:e.wrap??this.autoWrap(),fill:e.color,actorKeys:[]}),this.state.records.currentBox=this.state.records.boxes.slice(-1)[0]}addActor(e,r,n,i){let a=this.state.records.currentBox,s=this.state.records.actors.get(e);if(s){if(this.state.records.currentBox&&s.box&&this.state.records.currentBox!==s.box)throw new Error(`A same participant should only be defined in one Box: ${s.name} can't be in '${s.box.name}' and in '${this.state.records.currentBox.name}' at the same time.`);if(a=s.box?s.box:this.state.records.currentBox,s.box=a,s&&r===s.name&&n==null)return}if(n?.text==null&&(n={text:r,type:i}),(i==null||n.text==null)&&(n={text:r,type:i}),this.state.records.actors.set(e,{box:a,name:r,description:n.text,wrap:n.wrap??this.autoWrap(),prevActor:this.state.records.prevActor,links:{},properties:{},actorCnt:null,rectData:null,type:i??"participant"}),this.state.records.prevActor){let l=this.state.records.actors.get(this.state.records.prevActor);l&&(l.nextActor=e)}this.state.records.currentBox&&this.state.records.currentBox.actorKeys.push(e),this.state.records.prevActor=e}activationCount(e){let r,n=0;if(!e)return 0;for(r=0;r>-",token:"->>-",line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["'ACTIVE_PARTICIPANT'"]},l}return this.state.records.messages.push({id:this.state.records.messages.length.toString(),from:e,to:r,message:n?.text??"",wrap:n?.wrap??this.autoWrap(),type:i,activate:a}),!0}hasAtLeastOneBox(){return this.state.records.boxes.length>0}hasAtLeastOneBoxWithTitle(){return this.state.records.boxes.some(e=>e.name)}getMessages(){return this.state.records.messages}getBoxes(){return this.state.records.boxes}getActors(){return this.state.records.actors}getCreatedActors(){return this.state.records.createdActors}getDestroyedActors(){return this.state.records.destroyedActors}getActor(e){return this.state.records.actors.get(e)}getActorKeys(){return[...this.state.records.actors.keys()]}enableSequenceNumbers(){this.state.records.sequenceNumbersEnabled=!0}disableSequenceNumbers(){this.state.records.sequenceNumbersEnabled=!1}showSequenceNumbers(){return this.state.records.sequenceNumbersEnabled}setWrap(e){this.state.records.wrapEnabled=e}extractWrap(e){if(e===void 0)return{};e=e.trim();let r=/^:?wrap:/.exec(e)!==null?!0:/^:?nowrap:/.exec(e)!==null?!1:void 0;return{cleanedText:(r===void 0?e:e.replace(/^:?(?:no)?wrap:/,"")).trim(),wrap:r}}autoWrap(){return this.state.records.wrapEnabled!==void 0?this.state.records.wrapEnabled:me().sequence?.wrap??!1}clear(){this.state.reset(),kr()}parseMessage(e){let r=e.trim(),{wrap:n,cleanedText:i}=this.extractWrap(r),a={text:i,wrap:n};return X.debug(`parseMessage: ${JSON.stringify(a)}`),a}parseBoxData(e){let r=/^((?:rgba?|hsla?)\s*\(.*\)|\w*)(.*)$/.exec(e),n=r?.[1]?r[1].trim():"transparent",i=r?.[2]?r[2].trim():void 0;if(window?.CSS)window.CSS.supports("color",n)||(n="transparent",i=e.trim());else{let l=new Option().style;l.color=n,l.color!==n&&(n="transparent",i=e.trim())}let{wrap:a,cleanedText:s}=this.extractWrap(i);return{text:s?wr(s,me()):void 0,color:n,wrap:a}}addNote(e,r,n){let i={actor:e,placement:r,message:n.text,wrap:n.wrap??this.autoWrap()},a=[].concat(e,e);this.state.records.notes.push(i),this.state.records.messages.push({id:this.state.records.messages.length.toString(),from:a[0],to:a[1],message:n.text,wrap:n.wrap??this.autoWrap(),type:this.LINETYPE.NOTE,placement:r})}addLinks(e,r){let n=this.getActor(e);try{let i=wr(r.text,me());i=i.replace(/=/g,"="),i=i.replace(/&/g,"&");let a=JSON.parse(i);this.insertLinks(n,a)}catch(i){X.error("error while parsing actor link text",i)}}addALink(e,r){let n=this.getActor(e);try{let i={},a=wr(r.text,me()),s=a.indexOf("@");a=a.replace(/=/g,"="),a=a.replace(/&/g,"&");let l=a.slice(0,s-1).trim(),u=a.slice(s+1).trim();i[l]=u,this.insertLinks(n,i)}catch(i){X.error("error while parsing actor link text",i)}}insertLinks(e,r){if(e.links==null)e.links=r;else for(let n in r)e.links[n]=r[n]}addProperties(e,r){let n=this.getActor(e);try{let i=wr(r.text,me()),a=JSON.parse(i);this.insertProperties(n,a)}catch(i){X.error("error while parsing actor properties text",i)}}insertProperties(e,r){if(e.properties==null)e.properties=r;else for(let n in r)e.properties[n]=r[n]}boxEnd(){this.state.records.currentBox=void 0}addDetails(e,r){let n=this.getActor(e),i=document.getElementById(r.text);try{let a=i.innerHTML,s=JSON.parse(a);s.properties&&this.insertProperties(n,s.properties),s.links&&this.insertLinks(n,s.links)}catch(a){X.error("error while parsing actor details text",a)}}getActorProperty(e,r){if(e?.properties!==void 0)return e.properties[r]}apply(e){if(Array.isArray(e))e.forEach(r=>{this.apply(r)});else switch(e.type){case"sequenceIndex":this.state.records.messages.push({id:this.state.records.messages.length.toString(),from:void 0,to:void 0,message:{start:e.sequenceIndex,step:e.sequenceIndexStep,visible:e.sequenceVisible},wrap:!1,type:e.signalType});break;case"addParticipant":this.addActor(e.actor,e.actor,e.description,e.draw);break;case"createParticipant":if(this.state.records.actors.has(e.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");this.state.records.lastCreated=e.actor,this.addActor(e.actor,e.actor,e.description,e.draw),this.state.records.createdActors.set(e.actor,this.state.records.messages.length);break;case"destroyParticipant":this.state.records.lastDestroyed=e.actor,this.state.records.destroyedActors.set(e.actor,this.state.records.messages.length);break;case"activeStart":this.addSignal(e.actor,void 0,void 0,e.signalType);break;case"activeEnd":this.addSignal(e.actor,void 0,void 0,e.signalType);break;case"addNote":this.addNote(e.actor,e.placement,e.text);break;case"addLinks":this.addLinks(e.actor,e.text);break;case"addALink":this.addALink(e.actor,e.text);break;case"addProperties":this.addProperties(e.actor,e.text);break;case"addDetails":this.addDetails(e.actor,e.text);break;case"addMessage":if(this.state.records.lastCreated){if(e.to!==this.state.records.lastCreated)throw new Error("The created participant "+this.state.records.lastCreated.name+" does not have an associated creating message after its declaration. Please check the sequence diagram.");this.state.records.lastCreated=void 0}else if(this.state.records.lastDestroyed){if(e.to!==this.state.records.lastDestroyed&&e.from!==this.state.records.lastDestroyed)throw new Error("The destroyed participant "+this.state.records.lastDestroyed.name+" does not have an associated destroying message after its declaration. Please check the sequence diagram.");this.state.records.lastDestroyed=void 0}this.addSignal(e.from,e.to,e.msg,e.signalType,e.activate);break;case"boxStart":this.addBox(e.boxData);break;case"boxEnd":this.boxEnd();break;case"loopStart":this.addSignal(void 0,void 0,e.loopText,e.signalType);break;case"loopEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"rectStart":this.addSignal(void 0,void 0,e.color,e.signalType);break;case"rectEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"optStart":this.addSignal(void 0,void 0,e.optText,e.signalType);break;case"optEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"altStart":this.addSignal(void 0,void 0,e.altText,e.signalType);break;case"else":this.addSignal(void 0,void 0,e.altText,e.signalType);break;case"altEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"setAccTitle":Ar(e.text);break;case"parStart":this.addSignal(void 0,void 0,e.parText,e.signalType);break;case"and":this.addSignal(void 0,void 0,e.parText,e.signalType);break;case"parEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"criticalStart":this.addSignal(void 0,void 0,e.criticalText,e.signalType);break;case"option":this.addSignal(void 0,void 0,e.optionText,e.signalType);break;case"criticalEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"breakStart":this.addSignal(void 0,void 0,e.breakText,e.signalType);break;case"breakEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break}}getConfig(){return me().sequence}}});var GUe,Rde,Nde=N(()=>{"use strict";GUe=o(t=>`.actor { stroke: ${t.actorBorder}; fill: ${t.actorBkg}; } @@ -1384,12 +1384,12 @@ Expecting `+qe.join(", ")+", got '"+(this.terminals_[V]||V)+"'":at="Parse error fill: ${t.actorBkg}; stroke-width: 2px; } -`,"getStyles"),mfe=nVe});var NO,Tf,vfe,xfe,iVe,yfe,MO,aVe,sVe,Db,Op,bfe,Yc,IO,oVe,lVe,cVe,uVe,hVe,fVe,dVe,wfe,pVe,mVe,gVe,yVe,vVe,xVe,bVe,Tfe,wVe,OO,TVe,hi,kfe=N(()=>{"use strict";dr();Zv();nr();NO=Sa(Y0(),1);Bi();Tf=18*2,vfe="actor-top",xfe="actor-bottom",iVe="actor-box",yfe="actor-man",MO=o(function(t,e){return Ld(t,e)},"drawRect"),aVe=o(function(t,e,r,n,i){if(e.links===void 0||e.links===null||Object.keys(e.links).length===0)return{height:0,width:0};let a=e.links,s=e.actorCnt,l=e.rectData;var u="none";i&&(u="block !important");let h=t.append("g");h.attr("id","actor"+s+"_popup"),h.attr("class","actorPopupMenu"),h.attr("display",u);var f="";l.class!==void 0&&(f=" "+l.class);let d=l.width>r?l.width:r,p=h.append("rect");if(p.attr("class","actorPopupMenuPanel"+f),p.attr("x",l.x),p.attr("y",l.height),p.attr("fill",l.fill),p.attr("stroke",l.stroke),p.attr("width",d),p.attr("height",l.height),p.attr("rx",l.rx),p.attr("ry",l.ry),a!=null){var m=20;for(let v in a){var g=h.append("a"),y=(0,NO.sanitizeUrl)(a[v]);g.attr("xlink:href",y),g.attr("target","_blank"),TVe(n)(v,g,l.x+10,l.height+m,d,20,{class:"actor"},n),m+=30}}return p.attr("height",m),{height:l.height+m,width:d}},"drawPopup"),sVe=o(function(t){return"var pu = document.getElementById('"+t+"'); if (pu != null) { pu.style.display = pu.style.display == 'block' ? 'none' : 'block'; }"},"popupMenuToggle"),Db=o(async function(t,e,r=null){let n=t.append("foreignObject"),i=await xh(e.text,sr()),s=n.append("xhtml:div").attr("style","width: fit-content;").attr("xmlns","http://www.w3.org/1999/xhtml").html(i).node().getBoundingClientRect();if(n.attr("height",Math.round(s.height)).attr("width",Math.round(s.width)),e.class==="noteText"){let l=t.node().firstChild;l.setAttribute("height",s.height+2*e.textMargin);let u=l.getBBox();n.attr("x",Math.round(u.x+u.width/2-s.width/2)).attr("y",Math.round(u.y+u.height/2-s.height/2))}else if(r){let{startx:l,stopx:u,starty:h}=r;if(l>u){let f=l;l=u,u=f}n.attr("x",Math.round(l+Math.abs(l-u)/2-s.width/2)),e.class==="loopText"?n.attr("y",Math.round(h)):n.attr("y",Math.round(h-s.height))}return[n]},"drawKatex"),Op=o(function(t,e){let r=0,n=0,i=e.text.split(Ze.lineBreakRegex),[a,s]=Fo(e.fontSize),l=[],u=0,h=o(()=>e.y,"yfunc");if(e.valign!==void 0&&e.textMargin!==void 0&&e.textMargin>0)switch(e.valign){case"top":case"start":h=o(()=>Math.round(e.y+e.textMargin),"yfunc");break;case"middle":case"center":h=o(()=>Math.round(e.y+(r+n+e.textMargin)/2),"yfunc");break;case"bottom":case"end":h=o(()=>Math.round(e.y+(r+n+2*e.textMargin)-e.textMargin),"yfunc");break}if(e.anchor!==void 0&&e.textMargin!==void 0&&e.width!==void 0)switch(e.anchor){case"left":case"start":e.x=Math.round(e.x+e.textMargin),e.anchor="start",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"middle":case"center":e.x=Math.round(e.x+e.width/2),e.anchor="middle",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"right":case"end":e.x=Math.round(e.x+e.width-e.textMargin),e.anchor="end",e.dominantBaseline="middle",e.alignmentBaseline="middle";break}for(let[f,d]of i.entries()){e.textMargin!==void 0&&e.textMargin===0&&a!==void 0&&(u=f*a);let p=t.append("text");p.attr("x",e.x),p.attr("y",h()),e.anchor!==void 0&&p.attr("text-anchor",e.anchor).attr("dominant-baseline",e.dominantBaseline).attr("alignment-baseline",e.alignmentBaseline),e.fontFamily!==void 0&&p.style("font-family",e.fontFamily),s!==void 0&&p.style("font-size",s),e.fontWeight!==void 0&&p.style("font-weight",e.fontWeight),e.fill!==void 0&&p.attr("fill",e.fill),e.class!==void 0&&p.attr("class",e.class),e.dy!==void 0?p.attr("dy",e.dy):u!==0&&p.attr("dy",u);let m=d||j9;if(e.tspan){let g=p.append("tspan");g.attr("x",e.x),e.fill!==void 0&&g.attr("fill",e.fill),g.text(m)}else p.text(m);e.valign!==void 0&&e.textMargin!==void 0&&e.textMargin>0&&(n+=(p._groups||p)[0][0].getBBox().height,r=n),l.push(p)}return l},"drawText"),bfe=o(function(t,e){function r(i,a,s,l,u){return i+","+a+" "+(i+s)+","+a+" "+(i+s)+","+(a+l-u)+" "+(i+s-u*1.2)+","+(a+l)+" "+i+","+(a+l)}o(r,"genPoints");let n=t.append("polygon");return n.attr("points",r(e.x,e.y,e.width,e.height,7)),n.attr("class","labelBox"),e.y=e.y+e.height/2,Op(t,e),n},"drawLabel"),Yc=-1,IO=o((t,e,r,n)=>{t.select&&r.forEach(i=>{let a=e.get(i),s=t.select("#actor"+a.actorCnt);!n.mirrorActors&&a.stopy?s.attr("y2",a.stopy+a.height/2):n.mirrorActors&&s.attr("y2",a.stopy)})},"fixLifeLineHeights"),oVe=o(function(t,e,r,n){let i=n?e.stopy:e.starty,a=e.x+e.width/2,s=i+e.height,l=t.append("g").lower();var u=l;n||(Yc++,Object.keys(e.links||{}).length&&!r.forceMenus&&u.attr("onclick",sVe(`actor${Yc}_popup`)).attr("cursor","pointer"),u.append("line").attr("id","actor"+Yc).attr("x1",a).attr("y1",s).attr("x2",a).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",e.name),u=l.append("g"),e.actorCnt=Yc,e.links!=null&&u.attr("id","root-"+Yc));let h=El();var f="actor";e.properties?.class?f=e.properties.class:h.fill="#eaeaea",n?f+=` ${xfe}`:f+=` ${vfe}`,h.x=e.x,h.y=i,h.width=e.width,h.height=e.height,h.class=f,h.rx=3,h.ry=3,h.name=e.name;let d=MO(u,h);if(e.rectData=h,e.properties?.icon){let m=e.properties.icon.trim();m.charAt(0)==="@"?$q(u,h.x+h.width-20,h.y+10,m.substr(1)):Fq(u,h.x+h.width-20,h.y+10,m)}OO(r,pi(e.description))(e.description,u,h.x,h.y,h.width,h.height,{class:`actor ${iVe}`},r);let p=e.height;if(d.node){let m=d.node().getBBox();e.height=m.height,p=m.height}return p},"drawActorTypeParticipant"),lVe=o(function(t,e,r,n){let i=n?e.stopy:e.starty,a=e.x+e.width/2,s=i+80,l=t.append("g").lower();n||(Yc++,l.append("line").attr("id","actor"+Yc).attr("x1",a).attr("y1",s).attr("x2",a).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",e.name),e.actorCnt=Yc);let u=t.append("g"),h=yfe;n?h+=` ${xfe}`:h+=` ${vfe}`,u.attr("class",h),u.attr("name",e.name);let f=El();f.x=e.x,f.y=i,f.fill="#eaeaea",f.width=e.width,f.height=e.height,f.class="actor",f.rx=3,f.ry=3,u.append("line").attr("id","actor-man-torso"+Yc).attr("x1",a).attr("y1",i+25).attr("x2",a).attr("y2",i+45),u.append("line").attr("id","actor-man-arms"+Yc).attr("x1",a-Tf/2).attr("y1",i+33).attr("x2",a+Tf/2).attr("y2",i+33),u.append("line").attr("x1",a-Tf/2).attr("y1",i+60).attr("x2",a).attr("y2",i+45),u.append("line").attr("x1",a).attr("y1",i+45).attr("x2",a+Tf/2-2).attr("y2",i+60);let d=u.append("circle");d.attr("cx",e.x+e.width/2),d.attr("cy",i+10),d.attr("r",15),d.attr("width",e.width),d.attr("height",e.height);let p=u.node().getBBox();return e.height=p.height,OO(r,pi(e.description))(e.description,u,f.x,f.y+35,f.width,f.height,{class:`actor ${yfe}`},r),e.height},"drawActorTypeActor"),cVe=o(async function(t,e,r,n){switch(e.type){case"actor":return await lVe(t,e,r,n);case"participant":return await oVe(t,e,r,n)}},"drawActor"),uVe=o(function(t,e,r){let i=t.append("g");wfe(i,e),e.name&&OO(r)(e.name,i,e.x,e.y+(e.textMaxHeight||0)/2,e.width,0,{class:"text"},r),i.lower()},"drawBox"),hVe=o(function(t){return t.append("g")},"anchorElement"),fVe=o(function(t,e,r,n,i){let a=El(),s=e.anchored;a.x=e.startx,a.y=e.starty,a.class="activation"+i%3,a.width=e.stopx-e.startx,a.height=r-e.starty,MO(s,a)},"drawActivation"),dVe=o(async function(t,e,r,n){let{boxMargin:i,boxTextMargin:a,labelBoxHeight:s,labelBoxWidth:l,messageFontFamily:u,messageFontSize:h,messageFontWeight:f}=n,d=t.append("g"),p=o(function(y,v,x,b){return d.append("line").attr("x1",y).attr("y1",v).attr("x2",x).attr("y2",b).attr("class","loopLine")},"drawLoopLine");p(e.startx,e.starty,e.stopx,e.starty),p(e.stopx,e.starty,e.stopx,e.stopy),p(e.startx,e.stopy,e.stopx,e.stopy),p(e.startx,e.starty,e.startx,e.stopy),e.sections!==void 0&&e.sections.forEach(function(y){p(e.startx,y.y,e.stopx,y.y).style("stroke-dasharray","3, 3")});let m=Qv();m.text=r,m.x=e.startx,m.y=e.starty,m.fontFamily=u,m.fontSize=h,m.fontWeight=f,m.anchor="middle",m.valign="middle",m.tspan=!1,m.width=l||50,m.height=s||20,m.textMargin=a,m.class="labelText",bfe(d,m),m=Tfe(),m.text=e.title,m.x=e.startx+l/2+(e.stopx-e.startx)/2,m.y=e.starty+i+a,m.anchor="middle",m.valign="middle",m.textMargin=a,m.class="loopText",m.fontFamily=u,m.fontSize=h,m.fontWeight=f,m.wrap=!0;let g=pi(m.text)?await Db(d,m,e):Op(d,m);if(e.sectionTitles!==void 0){for(let[y,v]of Object.entries(e.sectionTitles))if(v.message){m.text=v.message,m.x=e.startx+(e.stopx-e.startx)/2,m.y=e.sections[y].y+i+a,m.class="loopText",m.anchor="middle",m.valign="middle",m.tspan=!1,m.fontFamily=u,m.fontSize=h,m.fontWeight=f,m.wrap=e.wrap,pi(m.text)?(e.starty=e.sections[y].y,await Db(d,m,e)):Op(d,m);let x=Math.round(g.map(b=>(b._groups||b)[0][0].getBBox().height).reduce((b,w)=>b+w));e.sections[y].height+=x-(i+a)}}return e.height=Math.round(e.stopy-e.starty),d},"drawLoop"),wfe=o(function(t,e){J5(t,e)},"drawBackgroundRect"),pVe=o(function(t){t.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")},"insertDatabaseIcon"),mVe=o(function(t){t.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")},"insertComputerIcon"),gVe=o(function(t){t.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")},"insertClockIcon"),yVe=o(function(t){t.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-start-reverse").append("path").attr("d","M -1 0 L 10 5 L 0 10 z")},"insertArrowHead"),vVe=o(function(t){t.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")},"insertArrowFilledHead"),xVe=o(function(t){t.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)},"insertSequenceNumber"),bVe=o(function(t){t.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")},"insertArrowCrossHead"),Tfe=o(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}},"getTextObj"),wVe=o(function(){return{x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0}},"getNoteRect"),OO=function(){function t(a,s,l,u,h,f,d){let p=s.append("text").attr("x",l+h/2).attr("y",u+f/2+5).style("text-anchor","middle").text(a);i(p,d)}o(t,"byText");function e(a,s,l,u,h,f,d,p){let{actorFontSize:m,actorFontFamily:g,actorFontWeight:y}=p,[v,x]=Fo(m),b=a.split(Ze.lineBreakRegex);for(let w=0;w{let s=Pp(Ne),l=a.actorKeys.reduce((f,d)=>f+=t.get(d).width+(t.get(d).margin||0),0);l-=2*Ne.boxTextMargin,a.wrap&&(a.name=Gt.wrapLabel(a.name,l-2*Ne.wrapPadding,s));let u=Gt.calculateTextDimensions(a.name,s);i=Ze.getMax(u.height,i);let h=Ze.getMax(l,u.width+2*Ne.wrapPadding);if(a.margin=Ne.boxTextMargin,la.textMaxHeight=i),Ze.getMax(n,Ne.height)}var Ne,rt,kVe,Pp,P1,PO,SVe,CVe,BO,Sfe,Cfe,OS,Efe,_Ve,LVe,NVe,MVe,IVe,Afe,_fe=N(()=>{"use strict";pr();kfe();vt();dr();dr();Zv();zt();d0();nr();Si();Ne={},rt={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],activations:[],models:{getHeight:o(function(){return Math.max.apply(null,this.actors.length===0?[0]:this.actors.map(t=>t.height||0))+(this.loops.length===0?0:this.loops.map(t=>t.height||0).reduce((t,e)=>t+e))+(this.messages.length===0?0:this.messages.map(t=>t.height||0).reduce((t,e)=>t+e))+(this.notes.length===0?0:this.notes.map(t=>t.height||0).reduce((t,e)=>t+e))},"getHeight"),clear:o(function(){this.actors=[],this.boxes=[],this.loops=[],this.messages=[],this.notes=[]},"clear"),addBox:o(function(t){this.boxes.push(t)},"addBox"),addActor:o(function(t){this.actors.push(t)},"addActor"),addLoop:o(function(t){this.loops.push(t)},"addLoop"),addMessage:o(function(t){this.messages.push(t)},"addMessage"),addNote:o(function(t){this.notes.push(t)},"addNote"),lastActor:o(function(){return this.actors[this.actors.length-1]},"lastActor"),lastLoop:o(function(){return this.loops[this.loops.length-1]},"lastLoop"),lastMessage:o(function(){return this.messages[this.messages.length-1]},"lastMessage"),lastNote:o(function(){return this.notes[this.notes.length-1]},"lastNote"),actors:[],boxes:[],loops:[],messages:[],notes:[]},init:o(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,Cfe(me())},"init"),updateVal:o(function(t,e,r,n){t[e]===void 0?t[e]=r:t[e]=n(r,t[e])},"updateVal"),updateBounds:o(function(t,e,r,n){let i=this,a=0;function s(l){return o(function(h){a++;let f=i.sequenceItems.length-a+1;i.updateVal(h,"starty",e-f*Ne.boxMargin,Math.min),i.updateVal(h,"stopy",n+f*Ne.boxMargin,Math.max),i.updateVal(rt.data,"startx",t-f*Ne.boxMargin,Math.min),i.updateVal(rt.data,"stopx",r+f*Ne.boxMargin,Math.max),l!=="activation"&&(i.updateVal(h,"startx",t-f*Ne.boxMargin,Math.min),i.updateVal(h,"stopx",r+f*Ne.boxMargin,Math.max),i.updateVal(rt.data,"starty",e-f*Ne.boxMargin,Math.min),i.updateVal(rt.data,"stopy",n+f*Ne.boxMargin,Math.max))},"updateItemBounds")}o(s,"updateFn"),this.sequenceItems.forEach(s()),this.activations.forEach(s("activation"))},"updateBounds"),insert:o(function(t,e,r,n){let i=Ze.getMin(t,r),a=Ze.getMax(t,r),s=Ze.getMin(e,n),l=Ze.getMax(e,n);this.updateVal(rt.data,"startx",i,Math.min),this.updateVal(rt.data,"starty",s,Math.min),this.updateVal(rt.data,"stopx",a,Math.max),this.updateVal(rt.data,"stopy",l,Math.max),this.updateBounds(i,s,a,l)},"insert"),newActivation:o(function(t,e,r){let n=r.get(t.from),i=OS(t.from).length||0,a=n.x+n.width/2+(i-1)*Ne.activationWidth/2;this.activations.push({startx:a,starty:this.verticalPos+2,stopx:a+Ne.activationWidth,stopy:void 0,actor:t.from,anchored:hi.anchorElement(e)})},"newActivation"),endActivation:o(function(t){let e=this.activations.map(function(r){return r.actor}).lastIndexOf(t.from);return this.activations.splice(e,1)[0]},"endActivation"),createLoop:o(function(t={message:void 0,wrap:!1,width:void 0},e){return{startx:void 0,starty:this.verticalPos,stopx:void 0,stopy:void 0,title:t.message,wrap:t.wrap,width:t.width,height:0,fill:e}},"createLoop"),newLoop:o(function(t={message:void 0,wrap:!1,width:void 0},e){this.sequenceItems.push(this.createLoop(t,e))},"newLoop"),endLoop:o(function(){return this.sequenceItems.pop()},"endLoop"),isLoopOverlap:o(function(){return this.sequenceItems.length?this.sequenceItems[this.sequenceItems.length-1].overlap:!1},"isLoopOverlap"),addSectionToLoop:o(function(t){let e=this.sequenceItems.pop();e.sections=e.sections||[],e.sectionTitles=e.sectionTitles||[],e.sections.push({y:rt.getVerticalPos(),height:0}),e.sectionTitles.push(t),this.sequenceItems.push(e)},"addSectionToLoop"),saveVerticalPos:o(function(){this.isLoopOverlap()&&(this.savedVerticalPos=this.verticalPos)},"saveVerticalPos"),resetVerticalPos:o(function(){this.isLoopOverlap()&&(this.verticalPos=this.savedVerticalPos)},"resetVerticalPos"),bumpVerticalPos:o(function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=Ze.getMax(this.data.stopy,this.verticalPos)},"bumpVerticalPos"),getVerticalPos:o(function(){return this.verticalPos},"getVerticalPos"),getBounds:o(function(){return{bounds:this.data,models:this.models}},"getBounds")},kVe=o(async function(t,e){rt.bumpVerticalPos(Ne.boxMargin),e.height=Ne.boxMargin,e.starty=rt.getVerticalPos();let r=El();r.x=e.startx,r.y=e.starty,r.width=e.width||Ne.width,r.class="note";let n=t.append("g"),i=hi.drawRect(n,r),a=Qv();a.x=e.startx,a.y=e.starty,a.width=r.width,a.dy="1em",a.text=e.message,a.class="noteText",a.fontFamily=Ne.noteFontFamily,a.fontSize=Ne.noteFontSize,a.fontWeight=Ne.noteFontWeight,a.anchor=Ne.noteAlign,a.textMargin=Ne.noteMargin,a.valign="center";let s=pi(a.text)?await Db(n,a):Op(n,a),l=Math.round(s.map(u=>(u._groups||u)[0][0].getBBox().height).reduce((u,h)=>u+h));i.attr("height",l+2*Ne.noteMargin),e.height+=l+2*Ne.noteMargin,rt.bumpVerticalPos(l+2*Ne.noteMargin),e.stopy=e.starty+l+2*Ne.noteMargin,e.stopx=e.startx+r.width,rt.insert(e.startx,e.starty,e.stopx,e.stopy),rt.models.addNote(e)},"drawNote"),Pp=o(t=>({fontFamily:t.messageFontFamily,fontSize:t.messageFontSize,fontWeight:t.messageFontWeight}),"messageFont"),P1=o(t=>({fontFamily:t.noteFontFamily,fontSize:t.noteFontSize,fontWeight:t.noteFontWeight}),"noteFont"),PO=o(t=>({fontFamily:t.actorFontFamily,fontSize:t.actorFontSize,fontWeight:t.actorFontWeight}),"actorFont");o(EVe,"boundMessage");SVe=o(async function(t,e,r,n){let{startx:i,stopx:a,starty:s,message:l,type:u,sequenceIndex:h,sequenceVisible:f}=e,d=Gt.calculateTextDimensions(l,Pp(Ne)),p=Qv();p.x=i,p.y=s+10,p.width=a-i,p.class="messageText",p.dy="1em",p.text=l,p.fontFamily=Ne.messageFontFamily,p.fontSize=Ne.messageFontSize,p.fontWeight=Ne.messageFontWeight,p.anchor=Ne.messageAlign,p.valign="center",p.textMargin=Ne.wrapPadding,p.tspan=!1,pi(p.text)?await Db(t,p,{startx:i,stopx:a,starty:r}):Op(t,p);let m=d.width,g;i===a?Ne.rightAngles?g=t.append("path").attr("d",`M ${i},${r} H ${i+Ze.getMax(Ne.width/2,m/2)} V ${r+25} H ${i}`):g=t.append("path").attr("d","M "+i+","+r+" C "+(i+60)+","+(r-10)+" "+(i+60)+","+(r+30)+" "+i+","+(r+20)):(g=t.append("line"),g.attr("x1",i),g.attr("y1",r),g.attr("x2",a),g.attr("y2",r)),u===n.db.LINETYPE.DOTTED||u===n.db.LINETYPE.DOTTED_CROSS||u===n.db.LINETYPE.DOTTED_POINT||u===n.db.LINETYPE.DOTTED_OPEN||u===n.db.LINETYPE.BIDIRECTIONAL_DOTTED?(g.style("stroke-dasharray","3, 3"),g.attr("class","messageLine1")):g.attr("class","messageLine0");let y="";Ne.arrowMarkerAbsolute&&(y=pu(!0)),g.attr("stroke-width",2),g.attr("stroke","none"),g.style("fill","none"),(u===n.db.LINETYPE.SOLID||u===n.db.LINETYPE.DOTTED)&&g.attr("marker-end","url("+y+"#arrowhead)"),(u===n.db.LINETYPE.BIDIRECTIONAL_SOLID||u===n.db.LINETYPE.BIDIRECTIONAL_DOTTED)&&(g.attr("marker-start","url("+y+"#arrowhead)"),g.attr("marker-end","url("+y+"#arrowhead)")),(u===n.db.LINETYPE.SOLID_POINT||u===n.db.LINETYPE.DOTTED_POINT)&&g.attr("marker-end","url("+y+"#filled-head)"),(u===n.db.LINETYPE.SOLID_CROSS||u===n.db.LINETYPE.DOTTED_CROSS)&&g.attr("marker-end","url("+y+"#crosshead)"),(f||Ne.showSequenceNumbers)&&(g.attr("marker-start","url("+y+"#sequencenumber)"),t.append("text").attr("x",i).attr("y",r+4).attr("font-family","sans-serif").attr("font-size","12px").attr("text-anchor","middle").attr("class","sequenceNumber").text(h))},"drawMessage"),CVe=o(function(t,e,r,n,i,a,s){let l=0,u=0,h,f=0;for(let d of n){let p=e.get(d),m=p.box;h&&h!=m&&(s||rt.models.addBox(h),u+=Ne.boxMargin+h.margin),m&&m!=h&&(s||(m.x=l+u,m.y=i),u+=m.margin),p.width=p.width||Ne.width,p.height=Ze.getMax(p.height||Ne.height,Ne.height),p.margin=p.margin||Ne.actorMargin,f=Ze.getMax(f,p.height),r.get(p.name)&&(u+=p.width/2),p.x=l+u,p.starty=rt.getVerticalPos(),rt.insert(p.x,i,p.x+p.width,p.height),l+=p.width+u,p.box&&(p.box.width=l+m.margin-p.box.x),u=p.margin,h=p.box,rt.models.addActor(p)}h&&!s&&rt.models.addBox(h),rt.bumpVerticalPos(f)},"addActorRenderingData"),BO=o(async function(t,e,r,n){if(n){let i=0;rt.bumpVerticalPos(Ne.boxMargin*2);for(let a of r){let s=e.get(a);s.stopy||(s.stopy=rt.getVerticalPos());let l=await hi.drawActor(t,s,Ne,!0);i=Ze.getMax(i,l)}rt.bumpVerticalPos(i+Ne.boxMargin)}else for(let i of r){let a=e.get(i);await hi.drawActor(t,a,Ne,!1)}},"drawActors"),Sfe=o(function(t,e,r,n){let i=0,a=0;for(let s of r){let l=e.get(s),u=LVe(l),h=hi.drawPopup(t,l,u,Ne,Ne.forceMenus,n);h.height>i&&(i=h.height),h.width+l.x>a&&(a=h.width+l.x)}return{maxHeight:i,maxWidth:a}},"drawActorsPopup"),Cfe=o(function(t){Gn(Ne,t),t.fontFamily&&(Ne.actorFontFamily=Ne.noteFontFamily=Ne.messageFontFamily=t.fontFamily),t.fontSize&&(Ne.actorFontSize=Ne.noteFontSize=Ne.messageFontSize=t.fontSize),t.fontWeight&&(Ne.actorFontWeight=Ne.noteFontWeight=Ne.messageFontWeight=t.fontWeight)},"setConf"),OS=o(function(t){return rt.activations.filter(function(e){return e.actor===t})},"actorActivations"),Efe=o(function(t,e){let r=e.get(t),n=OS(t),i=n.reduce(function(s,l){return Ze.getMin(s,l.startx)},r.x+r.width/2-1),a=n.reduce(function(s,l){return Ze.getMax(s,l.stopx)},r.x+r.width/2+1);return[i,a]},"activationBounds");o(Xc,"adjustLoopHeightForWrap");o(AVe,"adjustCreatedDestroyedData");_Ve=o(async function(t,e,r,n){let{securityLevel:i,sequence:a}=me();Ne=a;let s;i==="sandbox"&&(s=Ge("#i"+e));let l=i==="sandbox"?Ge(s.nodes()[0].contentDocument.body):Ge("body"),u=i==="sandbox"?s.nodes()[0].contentDocument:document;rt.init(),X.debug(n.db);let h=i==="sandbox"?l.select(`[id="${e}"]`):Ge(`[id="${e}"]`),f=n.db.getActors(),d=n.db.getCreatedActors(),p=n.db.getDestroyedActors(),m=n.db.getBoxes(),g=n.db.getActorKeys(),y=n.db.getMessages(),v=n.db.getDiagramTitle(),x=n.db.hasAtLeastOneBox(),b=n.db.hasAtLeastOneBoxWithTitle(),w=await DVe(f,y,n);if(Ne.height=await RVe(f,w,m),hi.insertComputerIcon(h),hi.insertDatabaseIcon(h),hi.insertClockIcon(h),x&&(rt.bumpVerticalPos(Ne.boxMargin),b&&rt.bumpVerticalPos(m[0].textMaxHeight)),Ne.hideUnusedParticipants===!0){let B=new Set;y.forEach(F=>{B.add(F.from),B.add(F.to)}),g=g.filter(F=>B.has(F))}CVe(h,f,d,g,0,y,!1);let C=await IVe(y,f,w,n);hi.insertArrowHead(h),hi.insertArrowCrossHead(h),hi.insertArrowFilledHead(h),hi.insertSequenceNumber(h);function T(B,F){let z=rt.endActivation(B);z.starty+18>F&&(z.starty=F-6,F+=12),hi.drawActivation(h,z,F,Ne,OS(B.from).length),rt.insert(z.startx,F-10,z.stopx,F)}o(T,"activeEnd");let E=1,A=1,S=[],_=[],I=0;for(let B of y){let F,z,$;switch(B.type){case n.db.LINETYPE.NOTE:rt.resetVerticalPos(),z=B.noteModel,await kVe(h,z);break;case n.db.LINETYPE.ACTIVE_START:rt.newActivation(B,h,f);break;case n.db.LINETYPE.ACTIVE_END:T(B,rt.getVerticalPos());break;case n.db.LINETYPE.LOOP_START:Xc(C,B,Ne.boxMargin,Ne.boxMargin+Ne.boxTextMargin,U=>rt.newLoop(U));break;case n.db.LINETYPE.LOOP_END:F=rt.endLoop(),await hi.drawLoop(h,F,"loop",Ne),rt.bumpVerticalPos(F.stopy-rt.getVerticalPos()),rt.models.addLoop(F);break;case n.db.LINETYPE.RECT_START:Xc(C,B,Ne.boxMargin,Ne.boxMargin,U=>rt.newLoop(void 0,U.message));break;case n.db.LINETYPE.RECT_END:F=rt.endLoop(),_.push(F),rt.models.addLoop(F),rt.bumpVerticalPos(F.stopy-rt.getVerticalPos());break;case n.db.LINETYPE.OPT_START:Xc(C,B,Ne.boxMargin,Ne.boxMargin+Ne.boxTextMargin,U=>rt.newLoop(U));break;case n.db.LINETYPE.OPT_END:F=rt.endLoop(),await hi.drawLoop(h,F,"opt",Ne),rt.bumpVerticalPos(F.stopy-rt.getVerticalPos()),rt.models.addLoop(F);break;case n.db.LINETYPE.ALT_START:Xc(C,B,Ne.boxMargin,Ne.boxMargin+Ne.boxTextMargin,U=>rt.newLoop(U));break;case n.db.LINETYPE.ALT_ELSE:Xc(C,B,Ne.boxMargin+Ne.boxTextMargin,Ne.boxMargin,U=>rt.addSectionToLoop(U));break;case n.db.LINETYPE.ALT_END:F=rt.endLoop(),await hi.drawLoop(h,F,"alt",Ne),rt.bumpVerticalPos(F.stopy-rt.getVerticalPos()),rt.models.addLoop(F);break;case n.db.LINETYPE.PAR_START:case n.db.LINETYPE.PAR_OVER_START:Xc(C,B,Ne.boxMargin,Ne.boxMargin+Ne.boxTextMargin,U=>rt.newLoop(U)),rt.saveVerticalPos();break;case n.db.LINETYPE.PAR_AND:Xc(C,B,Ne.boxMargin+Ne.boxTextMargin,Ne.boxMargin,U=>rt.addSectionToLoop(U));break;case n.db.LINETYPE.PAR_END:F=rt.endLoop(),await hi.drawLoop(h,F,"par",Ne),rt.bumpVerticalPos(F.stopy-rt.getVerticalPos()),rt.models.addLoop(F);break;case n.db.LINETYPE.AUTONUMBER:E=B.message.start||E,A=B.message.step||A,B.message.visible?n.db.enableSequenceNumbers():n.db.disableSequenceNumbers();break;case n.db.LINETYPE.CRITICAL_START:Xc(C,B,Ne.boxMargin,Ne.boxMargin+Ne.boxTextMargin,U=>rt.newLoop(U));break;case n.db.LINETYPE.CRITICAL_OPTION:Xc(C,B,Ne.boxMargin+Ne.boxTextMargin,Ne.boxMargin,U=>rt.addSectionToLoop(U));break;case n.db.LINETYPE.CRITICAL_END:F=rt.endLoop(),await hi.drawLoop(h,F,"critical",Ne),rt.bumpVerticalPos(F.stopy-rt.getVerticalPos()),rt.models.addLoop(F);break;case n.db.LINETYPE.BREAK_START:Xc(C,B,Ne.boxMargin,Ne.boxMargin+Ne.boxTextMargin,U=>rt.newLoop(U));break;case n.db.LINETYPE.BREAK_END:F=rt.endLoop(),await hi.drawLoop(h,F,"break",Ne),rt.bumpVerticalPos(F.stopy-rt.getVerticalPos()),rt.models.addLoop(F);break;default:try{$=B.msgModel,$.starty=rt.getVerticalPos(),$.sequenceIndex=E,$.sequenceVisible=n.db.showSequenceNumbers();let U=await EVe(h,$);AVe(B,$,U,I,f,d,p),S.push({messageModel:$,lineStartY:U}),rt.models.addMessage($)}catch(U){X.error("error while drawing message",U)}}[n.db.LINETYPE.SOLID_OPEN,n.db.LINETYPE.DOTTED_OPEN,n.db.LINETYPE.SOLID,n.db.LINETYPE.DOTTED,n.db.LINETYPE.SOLID_CROSS,n.db.LINETYPE.DOTTED_CROSS,n.db.LINETYPE.SOLID_POINT,n.db.LINETYPE.DOTTED_POINT,n.db.LINETYPE.BIDIRECTIONAL_SOLID,n.db.LINETYPE.BIDIRECTIONAL_DOTTED].includes(B.type)&&(E=E+A),I++}X.debug("createdActors",d),X.debug("destroyedActors",p),await BO(h,f,g,!1);for(let B of S)await SVe(h,B.messageModel,B.lineStartY,n);Ne.mirrorActors&&await BO(h,f,g,!0),_.forEach(B=>hi.drawBackgroundRect(h,B)),IO(h,f,g,Ne);for(let B of rt.models.boxes)B.height=rt.getVerticalPos()-B.y,rt.insert(B.x,B.y,B.x+B.width,B.height),B.startx=B.x,B.starty=B.y,B.stopx=B.startx+B.width,B.stopy=B.starty+B.height,B.stroke="rgb(0,0,0, 0.5)",hi.drawBox(h,B,Ne);x&&rt.bumpVerticalPos(Ne.boxMargin);let L=Sfe(h,f,g,u),{bounds:k}=rt.getBounds();k.startx===void 0&&(k.startx=0),k.starty===void 0&&(k.starty=0),k.stopx===void 0&&(k.stopx=0),k.stopy===void 0&&(k.stopy=0);let D=k.stopy-k.starty;D2,d=o(y=>l?-y:y,"adjustValue");t.from===t.to?h=u:(t.activate&&!f&&(h+=d(Ne.activationWidth/2-1)),[r.db.LINETYPE.SOLID_OPEN,r.db.LINETYPE.DOTTED_OPEN].includes(t.type)||(h+=d(3)),[r.db.LINETYPE.BIDIRECTIONAL_SOLID,r.db.LINETYPE.BIDIRECTIONAL_DOTTED].includes(t.type)&&(u-=d(3)));let p=[n,i,a,s],m=Math.abs(u-h);t.wrap&&t.message&&(t.message=Gt.wrapLabel(t.message,Ze.getMax(m+2*Ne.wrapPadding,Ne.width),Pp(Ne)));let g=Gt.calculateTextDimensions(t.message,Pp(Ne));return{width:Ze.getMax(t.wrap?0:g.width+2*Ne.wrapPadding,m+2*Ne.wrapPadding,Ne.width),height:0,startx:u,stopx:h,starty:0,stopy:0,message:t.message,type:t.type,wrap:t.wrap,fromBounds:Math.min.apply(null,p),toBounds:Math.max.apply(null,p)}},"buildMessageModel"),IVe=o(async function(t,e,r,n){let i={},a=[],s,l,u;for(let h of t){switch(h.type){case n.db.LINETYPE.LOOP_START:case n.db.LINETYPE.ALT_START:case n.db.LINETYPE.OPT_START:case n.db.LINETYPE.PAR_START:case n.db.LINETYPE.PAR_OVER_START:case n.db.LINETYPE.CRITICAL_START:case n.db.LINETYPE.BREAK_START:a.push({id:h.id,msg:h.message,from:Number.MAX_SAFE_INTEGER,to:Number.MIN_SAFE_INTEGER,width:0});break;case n.db.LINETYPE.ALT_ELSE:case n.db.LINETYPE.PAR_AND:case n.db.LINETYPE.CRITICAL_OPTION:h.message&&(s=a.pop(),i[s.id]=s,i[h.id]=s,a.push(s));break;case n.db.LINETYPE.LOOP_END:case n.db.LINETYPE.ALT_END:case n.db.LINETYPE.OPT_END:case n.db.LINETYPE.PAR_END:case n.db.LINETYPE.CRITICAL_END:case n.db.LINETYPE.BREAK_END:s=a.pop(),i[s.id]=s;break;case n.db.LINETYPE.ACTIVE_START:{let d=e.get(h.from?h.from:h.to.actor),p=OS(h.from?h.from:h.to.actor).length,m=d.x+d.width/2+(p-1)*Ne.activationWidth/2,g={startx:m,stopx:m+Ne.activationWidth,actor:h.from,enabled:!0};rt.activations.push(g)}break;case n.db.LINETYPE.ACTIVE_END:{let d=rt.activations.map(p=>p.actor).lastIndexOf(h.from);rt.activations.splice(d,1).splice(0,1)}break}h.placement!==void 0?(l=await NVe(h,e,n),h.noteModel=l,a.forEach(d=>{s=d,s.from=Ze.getMin(s.from,l.startx),s.to=Ze.getMax(s.to,l.startx+l.width),s.width=Ze.getMax(s.width,Math.abs(s.from-s.to))-Ne.labelBoxWidth})):(u=MVe(h,e,n),h.msgModel=u,u.startx&&u.stopx&&a.length>0&&a.forEach(d=>{if(s=d,u.startx===u.stopx){let p=e.get(h.from),m=e.get(h.to);s.from=Ze.getMin(p.x-u.width/2,p.x-p.width/2,s.from),s.to=Ze.getMax(m.x+u.width/2,m.x+p.width/2,s.to),s.width=Ze.getMax(s.width,Math.abs(s.to-s.from))-Ne.labelBoxWidth}else s.from=Ze.getMin(u.startx,s.from),s.to=Ze.getMax(u.stopx,s.to),s.width=Ze.getMax(s.width,u.width)-Ne.labelBoxWidth}))}return rt.activations=[],X.debug("Loop type widths:",i),i},"calculateLoopBounds"),Afe={bounds:rt,drawActors:BO,drawActorsPopup:Sfe,setConf:Cfe,draw:_Ve}});var Dfe={};hr(Dfe,{diagram:()=>OVe});var OVe,Lfe=N(()=>{"use strict";dfe();pfe();gfe();zt();_fe();OVe={parser:ffe,get db(){return new IS},renderer:Afe,styles:mfe,init:o(t=>{t.sequence||(t.sequence={}),t.wrap&&(t.sequence.wrap=t.wrap,tv({sequence:{wrap:t.wrap}}))},"init")}});var FO,PS,$O=N(()=>{"use strict";FO=function(){var t=o(function(Ie,xe,q,de){for(q=q||{},de=Ie.length;de--;q[Ie[de]]=xe);return q},"o"),e=[1,18],r=[1,19],n=[1,20],i=[1,41],a=[1,42],s=[1,26],l=[1,24],u=[1,25],h=[1,32],f=[1,33],d=[1,34],p=[1,45],m=[1,35],g=[1,36],y=[1,37],v=[1,38],x=[1,27],b=[1,28],w=[1,29],C=[1,30],T=[1,31],E=[1,44],A=[1,46],S=[1,43],_=[1,47],I=[1,9],L=[1,8,9],k=[1,58],D=[1,59],R=[1,60],O=[1,61],M=[1,62],P=[1,63],B=[1,64],F=[1,8,9,41],z=[1,76],$=[1,8,9,12,13,22,39,41,44,66,67,68,69,70,71,72,77,79],U=[1,8,9,12,13,17,20,22,39,41,44,48,58,66,67,68,69,70,71,72,77,79,84,99,101,102],Q=[13,58,84,99,101,102],te=[13,58,71,72,84,99,101,102],Y=[13,58,66,67,68,69,70,84,99,101,102],he=[1,98],Z=[1,115],ue=[1,107],K=[1,113],j=[1,108],ne=[1,109],ee=[1,110],ce=[1,111],le=[1,112],J=[1,114],Se=[22,58,59,80,84,85,86,87,88,89],se=[1,8,9,39,41,44],ae=[1,8,9,22],Oe=[1,143],ye=[1,8,9,59],Be=[1,8,9,22,58,59,80,84,85,86,87,88,89],He={trace:o(function(){},"trace"),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,DOT:17,className:18,classLiteralName:19,GENERICTYPE:20,relationStatement:21,LABEL:22,namespaceStatement:23,classStatement:24,memberStatement:25,annotationStatement:26,clickStatement:27,styleStatement:28,cssClassStatement:29,noteStatement:30,classDefStatement:31,direction:32,acc_title:33,acc_title_value:34,acc_descr:35,acc_descr_value:36,acc_descr_multiline_value:37,namespaceIdentifier:38,STRUCT_START:39,classStatements:40,STRUCT_STOP:41,NAMESPACE:42,classIdentifier:43,STYLE_SEPARATOR:44,members:45,CLASS:46,ANNOTATION_START:47,ANNOTATION_END:48,MEMBER:49,SEPARATOR:50,relation:51,NOTE_FOR:52,noteText:53,NOTE:54,CLASSDEF:55,classList:56,stylesOpt:57,ALPHA:58,COMMA:59,direction_tb:60,direction_bt:61,direction_rl:62,direction_lr:63,relationType:64,lineType:65,AGGREGATION:66,EXTENSION:67,COMPOSITION:68,DEPENDENCY:69,LOLLIPOP:70,LINE:71,DOTTED_LINE:72,CALLBACK:73,LINK:74,LINK_TARGET:75,CLICK:76,CALLBACK_NAME:77,CALLBACK_ARGS:78,HREF:79,STYLE:80,CSSCLASS:81,style:82,styleComponent:83,NUM:84,COLON:85,UNIT:86,SPACE:87,BRKT:88,PCT:89,commentToken:90,textToken:91,graphCodeTokens:92,textNoTagsToken:93,TAGSTART:94,TAGEND:95,"==":96,"--":97,DEFAULT:98,MINUS:99,keywords:100,UNICODE_TEXT:101,BQUOTE_STR:102,$accept:0,$end:1},terminals_:{2:"error",7:"CLASS_DIAGRAM",8:"NEWLINE",9:"EOF",12:"SQS",13:"STR",14:"SQE",17:"DOT",20:"GENERICTYPE",22:"LABEL",33:"acc_title",34:"acc_title_value",35:"acc_descr",36:"acc_descr_value",37:"acc_descr_multiline_value",39:"STRUCT_START",41:"STRUCT_STOP",42:"NAMESPACE",44:"STYLE_SEPARATOR",46:"CLASS",47:"ANNOTATION_START",48:"ANNOTATION_END",49:"MEMBER",50:"SEPARATOR",52:"NOTE_FOR",54:"NOTE",55:"CLASSDEF",58:"ALPHA",59:"COMMA",60:"direction_tb",61:"direction_bt",62:"direction_rl",63:"direction_lr",66:"AGGREGATION",67:"EXTENSION",68:"COMPOSITION",69:"DEPENDENCY",70:"LOLLIPOP",71:"LINE",72:"DOTTED_LINE",73:"CALLBACK",74:"LINK",75:"LINK_TARGET",76:"CLICK",77:"CALLBACK_NAME",78:"CALLBACK_ARGS",79:"HREF",80:"STYLE",81:"CSSCLASS",84:"NUM",85:"COLON",86:"UNIT",87:"SPACE",88:"BRKT",89:"PCT",92:"graphCodeTokens",94:"TAGSTART",95:"TAGEND",96:"==",97:"--",98:"DEFAULT",99:"MINUS",100:"keywords",101:"UNICODE_TEXT",102:"BQUOTE_STR"},productions_:[0,[3,1],[3,1],[4,1],[6,4],[5,1],[5,2],[5,3],[11,3],[15,1],[15,3],[15,2],[18,1],[18,3],[18,1],[18,2],[18,2],[18,2],[10,1],[10,2],[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],[23,4],[23,5],[38,2],[40,1],[40,2],[40,3],[24,1],[24,3],[24,4],[24,6],[43,2],[43,3],[26,4],[45,1],[45,2],[25,1],[25,2],[25,1],[25,1],[21,3],[21,4],[21,4],[21,5],[30,3],[30,2],[31,3],[56,1],[56,3],[32,1],[32,1],[32,1],[32,1],[51,3],[51,2],[51,2],[51,1],[64,1],[64,1],[64,1],[64,1],[64,1],[65,1],[65,1],[27,3],[27,4],[27,3],[27,4],[27,4],[27,5],[27,3],[27,4],[27,4],[27,5],[27,4],[27,5],[27,5],[27,6],[28,3],[29,3],[57,1],[57,3],[82,1],[82,2],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[90,1],[90,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[93,1],[93,1],[93,1],[93,1],[16,1],[16,1],[16,1],[16,1],[19,1],[53,1]],performAction:o(function(xe,q,de,ie,oe,V,we){var W=V.length-1;switch(oe){case 8:this.$=V[W-1];break;case 9:case 12:case 14:this.$=V[W];break;case 10:case 13:this.$=V[W-2]+"."+V[W];break;case 11:case 15:this.$=V[W-1]+V[W];break;case 16:case 17:this.$=V[W-1]+"~"+V[W]+"~";break;case 18:ie.addRelation(V[W]);break;case 19:V[W-1].title=ie.cleanupLabel(V[W]),ie.addRelation(V[W-1]);break;case 30:this.$=V[W].trim(),ie.setAccTitle(this.$);break;case 31:case 32:this.$=V[W].trim(),ie.setAccDescription(this.$);break;case 33:ie.addClassesToNamespace(V[W-3],V[W-1]);break;case 34:ie.addClassesToNamespace(V[W-4],V[W-1]);break;case 35:this.$=V[W],ie.addNamespace(V[W]);break;case 36:this.$=[V[W]];break;case 37:this.$=[V[W-1]];break;case 38:V[W].unshift(V[W-2]),this.$=V[W];break;case 40:ie.setCssClass(V[W-2],V[W]);break;case 41:ie.addMembers(V[W-3],V[W-1]);break;case 42:ie.setCssClass(V[W-5],V[W-3]),ie.addMembers(V[W-5],V[W-1]);break;case 43:this.$=V[W],ie.addClass(V[W]);break;case 44:this.$=V[W-1],ie.addClass(V[W-1]),ie.setClassLabel(V[W-1],V[W]);break;case 45:ie.addAnnotation(V[W],V[W-2]);break;case 46:case 59:this.$=[V[W]];break;case 47:V[W].push(V[W-1]),this.$=V[W];break;case 48:break;case 49:ie.addMember(V[W-1],ie.cleanupLabel(V[W]));break;case 50:break;case 51:break;case 52:this.$={id1:V[W-2],id2:V[W],relation:V[W-1],relationTitle1:"none",relationTitle2:"none"};break;case 53:this.$={id1:V[W-3],id2:V[W],relation:V[W-1],relationTitle1:V[W-2],relationTitle2:"none"};break;case 54:this.$={id1:V[W-3],id2:V[W],relation:V[W-2],relationTitle1:"none",relationTitle2:V[W-1]};break;case 55:this.$={id1:V[W-4],id2:V[W],relation:V[W-2],relationTitle1:V[W-3],relationTitle2:V[W-1]};break;case 56:ie.addNote(V[W],V[W-1]);break;case 57:ie.addNote(V[W]);break;case 58:this.$=V[W-2],ie.defineClass(V[W-1],V[W]);break;case 60:this.$=V[W-2].concat([V[W]]);break;case 61:ie.setDirection("TB");break;case 62:ie.setDirection("BT");break;case 63:ie.setDirection("RL");break;case 64:ie.setDirection("LR");break;case 65:this.$={type1:V[W-2],type2:V[W],lineType:V[W-1]};break;case 66:this.$={type1:"none",type2:V[W],lineType:V[W-1]};break;case 67:this.$={type1:V[W-1],type2:"none",lineType:V[W]};break;case 68:this.$={type1:"none",type2:"none",lineType:V[W]};break;case 69:this.$=ie.relationType.AGGREGATION;break;case 70:this.$=ie.relationType.EXTENSION;break;case 71:this.$=ie.relationType.COMPOSITION;break;case 72:this.$=ie.relationType.DEPENDENCY;break;case 73:this.$=ie.relationType.LOLLIPOP;break;case 74:this.$=ie.lineType.LINE;break;case 75:this.$=ie.lineType.DOTTED_LINE;break;case 76:case 82:this.$=V[W-2],ie.setClickEvent(V[W-1],V[W]);break;case 77:case 83:this.$=V[W-3],ie.setClickEvent(V[W-2],V[W-1]),ie.setTooltip(V[W-2],V[W]);break;case 78:this.$=V[W-2],ie.setLink(V[W-1],V[W]);break;case 79:this.$=V[W-3],ie.setLink(V[W-2],V[W-1],V[W]);break;case 80:this.$=V[W-3],ie.setLink(V[W-2],V[W-1]),ie.setTooltip(V[W-2],V[W]);break;case 81:this.$=V[W-4],ie.setLink(V[W-3],V[W-2],V[W]),ie.setTooltip(V[W-3],V[W-1]);break;case 84:this.$=V[W-3],ie.setClickEvent(V[W-2],V[W-1],V[W]);break;case 85:this.$=V[W-4],ie.setClickEvent(V[W-3],V[W-2],V[W-1]),ie.setTooltip(V[W-3],V[W]);break;case 86:this.$=V[W-3],ie.setLink(V[W-2],V[W]);break;case 87:this.$=V[W-4],ie.setLink(V[W-3],V[W-1],V[W]);break;case 88:this.$=V[W-4],ie.setLink(V[W-3],V[W-1]),ie.setTooltip(V[W-3],V[W]);break;case 89:this.$=V[W-5],ie.setLink(V[W-4],V[W-2],V[W]),ie.setTooltip(V[W-4],V[W-1]);break;case 90:this.$=V[W-2],ie.setCssStyle(V[W-1],V[W]);break;case 91:ie.setCssClass(V[W-1],V[W]);break;case 92:this.$=[V[W]];break;case 93:V[W-2].push(V[W]),this.$=V[W-2];break;case 95:this.$=V[W-1]+V[W];break}},"anonymous"),table:[{3:1,4:2,5:3,6:4,7:[1,6],10:5,16:39,18:21,19:40,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,33:e,35:r,37:n,38:22,42:i,43:23,46:a,47:s,49:l,50:u,52:h,54:f,55:d,58:p,60:m,61:g,62:y,63:v,73:x,74:b,76:w,80:C,81:T,84:E,99:A,101:S,102:_},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,3]},t(I,[2,5],{8:[1,48]}),{8:[1,49]},t(L,[2,18],{22:[1,50]}),t(L,[2,20]),t(L,[2,21]),t(L,[2,22]),t(L,[2,23]),t(L,[2,24]),t(L,[2,25]),t(L,[2,26]),t(L,[2,27]),t(L,[2,28]),t(L,[2,29]),{34:[1,51]},{36:[1,52]},t(L,[2,32]),t(L,[2,48],{51:53,64:56,65:57,13:[1,54],22:[1,55],66:k,67:D,68:R,69:O,70:M,71:P,72:B}),{39:[1,65]},t(F,[2,39],{39:[1,67],44:[1,66]}),t(L,[2,50]),t(L,[2,51]),{16:68,58:p,84:E,99:A,101:S},{16:39,18:69,19:40,58:p,84:E,99:A,101:S,102:_},{16:39,18:70,19:40,58:p,84:E,99:A,101:S,102:_},{16:39,18:71,19:40,58:p,84:E,99:A,101:S,102:_},{58:[1,72]},{13:[1,73]},{16:39,18:74,19:40,58:p,84:E,99:A,101:S,102:_},{13:z,53:75},{56:77,58:[1,78]},t(L,[2,61]),t(L,[2,62]),t(L,[2,63]),t(L,[2,64]),t($,[2,12],{16:39,19:40,18:80,17:[1,79],20:[1,81],58:p,84:E,99:A,101:S,102:_}),t($,[2,14],{20:[1,82]}),{15:83,16:84,58:p,84:E,99:A,101:S},{16:39,18:85,19:40,58:p,84:E,99:A,101:S,102:_},t(U,[2,118]),t(U,[2,119]),t(U,[2,120]),t(U,[2,121]),t([1,8,9,12,13,20,22,39,41,44,66,67,68,69,70,71,72,77,79],[2,122]),t(I,[2,6],{10:5,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,18:21,38:22,43:23,16:39,19:40,5:86,33:e,35:r,37:n,42:i,46:a,47:s,49:l,50:u,52:h,54:f,55:d,58:p,60:m,61:g,62:y,63:v,73:x,74:b,76:w,80:C,81:T,84:E,99:A,101:S,102:_}),{5:87,10:5,16:39,18:21,19:40,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,33:e,35:r,37:n,38:22,42:i,43:23,46:a,47:s,49:l,50:u,52:h,54:f,55:d,58:p,60:m,61:g,62:y,63:v,73:x,74:b,76:w,80:C,81:T,84:E,99:A,101:S,102:_},t(L,[2,19]),t(L,[2,30]),t(L,[2,31]),{13:[1,89],16:39,18:88,19:40,58:p,84:E,99:A,101:S,102:_},{51:90,64:56,65:57,66:k,67:D,68:R,69:O,70:M,71:P,72:B},t(L,[2,49]),{65:91,71:P,72:B},t(Q,[2,68],{64:92,66:k,67:D,68:R,69:O,70:M}),t(te,[2,69]),t(te,[2,70]),t(te,[2,71]),t(te,[2,72]),t(te,[2,73]),t(Y,[2,74]),t(Y,[2,75]),{8:[1,94],24:95,40:93,43:23,46:a},{16:96,58:p,84:E,99:A,101:S},{45:97,49:he},{48:[1,99]},{13:[1,100]},{13:[1,101]},{77:[1,102],79:[1,103]},{22:Z,57:104,58:ue,80:K,82:105,83:106,84:j,85:ne,86:ee,87:ce,88:le,89:J},{58:[1,116]},{13:z,53:117},t(L,[2,57]),t(L,[2,123]),{22:Z,57:118,58:ue,59:[1,119],80:K,82:105,83:106,84:j,85:ne,86:ee,87:ce,88:le,89:J},t(Se,[2,59]),{16:39,18:120,19:40,58:p,84:E,99:A,101:S,102:_},t($,[2,15]),t($,[2,16]),t($,[2,17]),{39:[2,35]},{15:122,16:84,17:[1,121],39:[2,9],58:p,84:E,99:A,101:S},t(se,[2,43],{11:123,12:[1,124]}),t(I,[2,7]),{9:[1,125]},t(ae,[2,52]),{16:39,18:126,19:40,58:p,84:E,99:A,101:S,102:_},{13:[1,128],16:39,18:127,19:40,58:p,84:E,99:A,101:S,102:_},t(Q,[2,67],{64:129,66:k,67:D,68:R,69:O,70:M}),t(Q,[2,66]),{41:[1,130]},{24:95,40:131,43:23,46:a},{8:[1,132],41:[2,36]},t(F,[2,40],{39:[1,133]}),{41:[1,134]},{41:[2,46],45:135,49:he},{16:39,18:136,19:40,58:p,84:E,99:A,101:S,102:_},t(L,[2,76],{13:[1,137]}),t(L,[2,78],{13:[1,139],75:[1,138]}),t(L,[2,82],{13:[1,140],78:[1,141]}),{13:[1,142]},t(L,[2,90],{59:Oe}),t(ye,[2,92],{83:144,22:Z,58:ue,80:K,84:j,85:ne,86:ee,87:ce,88:le,89:J}),t(Be,[2,94]),t(Be,[2,96]),t(Be,[2,97]),t(Be,[2,98]),t(Be,[2,99]),t(Be,[2,100]),t(Be,[2,101]),t(Be,[2,102]),t(Be,[2,103]),t(Be,[2,104]),t(L,[2,91]),t(L,[2,56]),t(L,[2,58],{59:Oe}),{58:[1,145]},t($,[2,13]),{15:146,16:84,58:p,84:E,99:A,101:S},{39:[2,11]},t(se,[2,44]),{13:[1,147]},{1:[2,4]},t(ae,[2,54]),t(ae,[2,53]),{16:39,18:148,19:40,58:p,84:E,99:A,101:S,102:_},t(Q,[2,65]),t(L,[2,33]),{41:[1,149]},{24:95,40:150,41:[2,37],43:23,46:a},{45:151,49:he},t(F,[2,41]),{41:[2,47]},t(L,[2,45]),t(L,[2,77]),t(L,[2,79]),t(L,[2,80],{75:[1,152]}),t(L,[2,83]),t(L,[2,84],{13:[1,153]}),t(L,[2,86],{13:[1,155],75:[1,154]}),{22:Z,58:ue,80:K,82:156,83:106,84:j,85:ne,86:ee,87:ce,88:le,89:J},t(Be,[2,95]),t(Se,[2,60]),{39:[2,10]},{14:[1,157]},t(ae,[2,55]),t(L,[2,34]),{41:[2,38]},{41:[1,158]},t(L,[2,81]),t(L,[2,85]),t(L,[2,87]),t(L,[2,88],{75:[1,159]}),t(ye,[2,93],{83:144,22:Z,58:ue,80:K,84:j,85:ne,86:ee,87:ce,88:le,89:J}),t(se,[2,8]),t(F,[2,42]),t(L,[2,89])],defaultActions:{2:[2,1],3:[2,2],4:[2,3],83:[2,35],122:[2,11],125:[2,4],135:[2,47],146:[2,10],150:[2,38]},parseError:o(function(xe,q){if(q.recoverable)this.trace(xe);else{var de=new Error(xe);throw de.hash=q,de}},"parseError"),parse:o(function(xe){var q=this,de=[0],ie=[],oe=[null],V=[],we=this.table,W="",pe=0,ve=0,Pe=0,_e=2,be=1,Ve=V.slice.call(arguments,1),De=Object.create(this.lexer),qe={yy:{}};for(var at in this.yy)Object.prototype.hasOwnProperty.call(this.yy,at)&&(qe.yy[at]=this.yy[at]);De.setInput(xe,qe.yy),qe.yy.lexer=De,qe.yy.parser=this,typeof De.yylloc>"u"&&(De.yylloc={});var Lt=De.yylloc;V.push(Lt);var st=De.options&&De.options.ranges;typeof qe.yy.parseError=="function"?this.parseError=qe.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Ue(Tt){de.length=de.length-2*Tt,oe.length=oe.length-Tt,V.length=V.length-Tt}o(Ue,"popStack");function ct(){var Tt;return Tt=ie.pop()||De.lex()||be,typeof Tt!="number"&&(Tt instanceof Array&&(ie=Tt,Tt=ie.pop()),Tt=q.symbols_[Tt]||Tt),Tt}o(ct,"lex");for(var We,ot,Yt,bt,Mt,xt,ut={},Et,ft,yt,nt;;){if(Yt=de[de.length-1],this.defaultActions[Yt]?bt=this.defaultActions[Yt]:((We===null||typeof We>"u")&&(We=ct()),bt=we[Yt]&&we[Yt][We]),typeof bt>"u"||!bt.length||!bt[0]){var dn="";nt=[];for(Et in we[Yt])this.terminals_[Et]&&Et>_e&&nt.push("'"+this.terminals_[Et]+"'");De.showPosition?dn="Parse error on line "+(pe+1)+`: +`,"getStyles"),Rde=GUe});var pP,Sf,Ide,Ode,VUe,Mde,mP,UUe,HUe,Mb,Fp,Pde,Yc,gP,WUe,qUe,YUe,XUe,jUe,KUe,QUe,Bde,ZUe,JUe,eHe,tHe,rHe,nHe,iHe,Fde,aHe,yP,sHe,di,$de=N(()=>{"use strict";pr();t2();er();pP=Aa(Z0(),1);mi();Sf=18*2,Ide="actor-top",Ode="actor-bottom",VUe="actor-box",Mde="actor-man",mP=o(function(t,e){return Nd(t,e)},"drawRect"),UUe=o(function(t,e,r,n,i){if(e.links===void 0||e.links===null||Object.keys(e.links).length===0)return{height:0,width:0};let a=e.links,s=e.actorCnt,l=e.rectData;var u="none";i&&(u="block !important");let h=t.append("g");h.attr("id","actor"+s+"_popup"),h.attr("class","actorPopupMenu"),h.attr("display",u);var f="";l.class!==void 0&&(f=" "+l.class);let d=l.width>r?l.width:r,p=h.append("rect");if(p.attr("class","actorPopupMenuPanel"+f),p.attr("x",l.x),p.attr("y",l.height),p.attr("fill",l.fill),p.attr("stroke",l.stroke),p.attr("width",d),p.attr("height",l.height),p.attr("rx",l.rx),p.attr("ry",l.ry),a!=null){var m=20;for(let v in a){var g=h.append("a"),y=(0,pP.sanitizeUrl)(a[v]);g.attr("xlink:href",y),g.attr("target","_blank"),sHe(n)(v,g,l.x+10,l.height+m,d,20,{class:"actor"},n),m+=30}}return p.attr("height",m),{height:l.height+m,width:d}},"drawPopup"),HUe=o(function(t){return"var pu = document.getElementById('"+t+"'); if (pu != null) { pu.style.display = pu.style.display == 'block' ? 'none' : 'block'; }"},"popupMenuToggle"),Mb=o(async function(t,e,r=null){let n=t.append("foreignObject"),i=await Th(e.text,tr()),s=n.append("xhtml:div").attr("style","width: fit-content;").attr("xmlns","http://www.w3.org/1999/xhtml").html(i).node().getBoundingClientRect();if(n.attr("height",Math.round(s.height)).attr("width",Math.round(s.width)),e.class==="noteText"){let l=t.node().firstChild;l.setAttribute("height",s.height+2*e.textMargin);let u=l.getBBox();n.attr("x",Math.round(u.x+u.width/2-s.width/2)).attr("y",Math.round(u.y+u.height/2-s.height/2))}else if(r){let{startx:l,stopx:u,starty:h}=r;if(l>u){let f=l;l=u,u=f}n.attr("x",Math.round(l+Math.abs(l-u)/2-s.width/2)),e.class==="loopText"?n.attr("y",Math.round(h)):n.attr("y",Math.round(h-s.height))}return[n]},"drawKatex"),Fp=o(function(t,e){let r=0,n=0,i=e.text.split(Ze.lineBreakRegex),[a,s]=zo(e.fontSize),l=[],u=0,h=o(()=>e.y,"yfunc");if(e.valign!==void 0&&e.textMargin!==void 0&&e.textMargin>0)switch(e.valign){case"top":case"start":h=o(()=>Math.round(e.y+e.textMargin),"yfunc");break;case"middle":case"center":h=o(()=>Math.round(e.y+(r+n+e.textMargin)/2),"yfunc");break;case"bottom":case"end":h=o(()=>Math.round(e.y+(r+n+2*e.textMargin)-e.textMargin),"yfunc");break}if(e.anchor!==void 0&&e.textMargin!==void 0&&e.width!==void 0)switch(e.anchor){case"left":case"start":e.x=Math.round(e.x+e.textMargin),e.anchor="start",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"middle":case"center":e.x=Math.round(e.x+e.width/2),e.anchor="middle",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"right":case"end":e.x=Math.round(e.x+e.width-e.textMargin),e.anchor="end",e.dominantBaseline="middle",e.alignmentBaseline="middle";break}for(let[f,d]of i.entries()){e.textMargin!==void 0&&e.textMargin===0&&a!==void 0&&(u=f*a);let p=t.append("text");p.attr("x",e.x),p.attr("y",h()),e.anchor!==void 0&&p.attr("text-anchor",e.anchor).attr("dominant-baseline",e.dominantBaseline).attr("alignment-baseline",e.alignmentBaseline),e.fontFamily!==void 0&&p.style("font-family",e.fontFamily),s!==void 0&&p.style("font-size",s),e.fontWeight!==void 0&&p.style("font-weight",e.fontWeight),e.fill!==void 0&&p.attr("fill",e.fill),e.class!==void 0&&p.attr("class",e.class),e.dy!==void 0?p.attr("dy",e.dy):u!==0&&p.attr("dy",u);let m=d||C9;if(e.tspan){let g=p.append("tspan");g.attr("x",e.x),e.fill!==void 0&&g.attr("fill",e.fill),g.text(m)}else p.text(m);e.valign!==void 0&&e.textMargin!==void 0&&e.textMargin>0&&(n+=(p._groups||p)[0][0].getBBox().height,r=n),l.push(p)}return l},"drawText"),Pde=o(function(t,e){function r(i,a,s,l,u){return i+","+a+" "+(i+s)+","+a+" "+(i+s)+","+(a+l-u)+" "+(i+s-u*1.2)+","+(a+l)+" "+i+","+(a+l)}o(r,"genPoints");let n=t.append("polygon");return n.attr("points",r(e.x,e.y,e.width,e.height,7)),n.attr("class","labelBox"),e.y=e.y+e.height/2,Fp(t,e),n},"drawLabel"),Yc=-1,gP=o((t,e,r,n)=>{t.select&&r.forEach(i=>{let a=e.get(i),s=t.select("#actor"+a.actorCnt);!n.mirrorActors&&a.stopy?s.attr("y2",a.stopy+a.height/2):n.mirrorActors&&s.attr("y2",a.stopy)})},"fixLifeLineHeights"),WUe=o(function(t,e,r,n){let i=n?e.stopy:e.starty,a=e.x+e.width/2,s=i+e.height,l=t.append("g").lower();var u=l;n||(Yc++,Object.keys(e.links||{}).length&&!r.forceMenus&&u.attr("onclick",HUe(`actor${Yc}_popup`)).attr("cursor","pointer"),u.append("line").attr("id","actor"+Yc).attr("x1",a).attr("y1",s).attr("x2",a).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",e.name),u=l.append("g"),e.actorCnt=Yc,e.links!=null&&u.attr("id","root-"+Yc));let h=Al();var f="actor";e.properties?.class?f=e.properties.class:h.fill="#eaeaea",n?f+=` ${Ode}`:f+=` ${Ide}`,h.x=e.x,h.y=i,h.width=e.width,h.height=e.height,h.class=f,h.rx=3,h.ry=3,h.name=e.name;let d=mP(u,h);if(e.rectData=h,e.properties?.icon){let m=e.properties.icon.trim();m.charAt(0)==="@"?KY(u,h.x+h.width-20,h.y+10,m.substr(1)):jY(u,h.x+h.width-20,h.y+10,m)}yP(r,yi(e.description))(e.description,u,h.x,h.y,h.width,h.height,{class:`actor ${VUe}`},r);let p=e.height;if(d.node){let m=d.node().getBBox();e.height=m.height,p=m.height}return p},"drawActorTypeParticipant"),qUe=o(function(t,e,r,n){let i=n?e.stopy:e.starty,a=e.x+e.width/2,s=i+80,l=t.append("g").lower();n||(Yc++,l.append("line").attr("id","actor"+Yc).attr("x1",a).attr("y1",s).attr("x2",a).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",e.name),e.actorCnt=Yc);let u=t.append("g"),h=Mde;n?h+=` ${Ode}`:h+=` ${Ide}`,u.attr("class",h),u.attr("name",e.name);let f=Al();f.x=e.x,f.y=i,f.fill="#eaeaea",f.width=e.width,f.height=e.height,f.class="actor",f.rx=3,f.ry=3,u.append("line").attr("id","actor-man-torso"+Yc).attr("x1",a).attr("y1",i+25).attr("x2",a).attr("y2",i+45),u.append("line").attr("id","actor-man-arms"+Yc).attr("x1",a-Sf/2).attr("y1",i+33).attr("x2",a+Sf/2).attr("y2",i+33),u.append("line").attr("x1",a-Sf/2).attr("y1",i+60).attr("x2",a).attr("y2",i+45),u.append("line").attr("x1",a).attr("y1",i+45).attr("x2",a+Sf/2-2).attr("y2",i+60);let d=u.append("circle");d.attr("cx",e.x+e.width/2),d.attr("cy",i+10),d.attr("r",15),d.attr("width",e.width),d.attr("height",e.height);let p=u.node().getBBox();return e.height=p.height,yP(r,yi(e.description))(e.description,u,f.x,f.y+35,f.width,f.height,{class:`actor ${Mde}`},r),e.height},"drawActorTypeActor"),YUe=o(async function(t,e,r,n){switch(e.type){case"actor":return await qUe(t,e,r,n);case"participant":return await WUe(t,e,r,n)}},"drawActor"),XUe=o(function(t,e,r){let i=t.append("g");Bde(i,e),e.name&&yP(r)(e.name,i,e.x,e.y+r.boxTextMargin+(e.textMaxHeight||0)/2,e.width,0,{class:"text"},r),i.lower()},"drawBox"),jUe=o(function(t){return t.append("g")},"anchorElement"),KUe=o(function(t,e,r,n,i){let a=Al(),s=e.anchored;a.x=e.startx,a.y=e.starty,a.class="activation"+i%3,a.width=e.stopx-e.startx,a.height=r-e.starty,mP(s,a)},"drawActivation"),QUe=o(async function(t,e,r,n){let{boxMargin:i,boxTextMargin:a,labelBoxHeight:s,labelBoxWidth:l,messageFontFamily:u,messageFontSize:h,messageFontWeight:f}=n,d=t.append("g"),p=o(function(y,v,x,b){return d.append("line").attr("x1",y).attr("y1",v).attr("x2",x).attr("y2",b).attr("class","loopLine")},"drawLoopLine");p(e.startx,e.starty,e.stopx,e.starty),p(e.stopx,e.starty,e.stopx,e.stopy),p(e.startx,e.stopy,e.stopx,e.stopy),p(e.startx,e.starty,e.startx,e.stopy),e.sections!==void 0&&e.sections.forEach(function(y){p(e.startx,y.y,e.stopx,y.y).style("stroke-dasharray","3, 3")});let m=e2();m.text=r,m.x=e.startx,m.y=e.starty,m.fontFamily=u,m.fontSize=h,m.fontWeight=f,m.anchor="middle",m.valign="middle",m.tspan=!1,m.width=l||50,m.height=s||20,m.textMargin=a,m.class="labelText",Pde(d,m),m=Fde(),m.text=e.title,m.x=e.startx+l/2+(e.stopx-e.startx)/2,m.y=e.starty+i+a,m.anchor="middle",m.valign="middle",m.textMargin=a,m.class="loopText",m.fontFamily=u,m.fontSize=h,m.fontWeight=f,m.wrap=!0;let g=yi(m.text)?await Mb(d,m,e):Fp(d,m);if(e.sectionTitles!==void 0){for(let[y,v]of Object.entries(e.sectionTitles))if(v.message){m.text=v.message,m.x=e.startx+(e.stopx-e.startx)/2,m.y=e.sections[y].y+i+a,m.class="loopText",m.anchor="middle",m.valign="middle",m.tspan=!1,m.fontFamily=u,m.fontSize=h,m.fontWeight=f,m.wrap=e.wrap,yi(m.text)?(e.starty=e.sections[y].y,await Mb(d,m,e)):Fp(d,m);let x=Math.round(g.map(b=>(b._groups||b)[0][0].getBBox().height).reduce((b,T)=>b+T));e.sections[y].height+=x-(i+a)}}return e.height=Math.round(e.stopy-e.starty),d},"drawLoop"),Bde=o(function(t,e){iT(t,e)},"drawBackgroundRect"),ZUe=o(function(t){t.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")},"insertDatabaseIcon"),JUe=o(function(t){t.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")},"insertComputerIcon"),eHe=o(function(t){t.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")},"insertClockIcon"),tHe=o(function(t){t.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-start-reverse").append("path").attr("d","M -1 0 L 10 5 L 0 10 z")},"insertArrowHead"),rHe=o(function(t){t.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")},"insertArrowFilledHead"),nHe=o(function(t){t.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)},"insertSequenceNumber"),iHe=o(function(t){t.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")},"insertArrowCrossHead"),Fde=o(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}},"getTextObj"),aHe=o(function(){return{x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0}},"getNoteRect"),yP=function(){function t(a,s,l,u,h,f,d){let p=s.append("text").attr("x",l+h/2).attr("y",u+f/2+5).style("text-anchor","middle").text(a);i(p,d)}o(t,"byText");function e(a,s,l,u,h,f,d,p){let{actorFontSize:m,actorFontFamily:g,actorFontWeight:y}=p,[v,x]=zo(m),b=a.split(Ze.lineBreakRegex);for(let T=0;T{let s=$p(Ne),l=a.actorKeys.reduce((f,d)=>f+=t.get(d).width+(t.get(d).margin||0),0);l-=2*Ne.boxTextMargin,a.wrap&&(a.name=Vt.wrapLabel(a.name,l-2*Ne.wrapPadding,s));let u=Vt.calculateTextDimensions(a.name,s);i=Ze.getMax(u.height,i);let h=Ze.getMax(l,u.width+2*Ne.wrapPadding);if(a.margin=Ne.boxTextMargin,la.textMaxHeight=i),Ze.getMax(n,Ne.height)}var Ne,rt,oHe,$p,O1,vP,cHe,uHe,xP,Gde,Vde,XS,zde,fHe,pHe,gHe,yHe,vHe,Ude,Hde=N(()=>{"use strict";fr();$de();yt();pr();pr();t2();Gt();g0();er();xi();Ne={},rt={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],activations:[],models:{getHeight:o(function(){return Math.max.apply(null,this.actors.length===0?[0]:this.actors.map(t=>t.height||0))+(this.loops.length===0?0:this.loops.map(t=>t.height||0).reduce((t,e)=>t+e))+(this.messages.length===0?0:this.messages.map(t=>t.height||0).reduce((t,e)=>t+e))+(this.notes.length===0?0:this.notes.map(t=>t.height||0).reduce((t,e)=>t+e))},"getHeight"),clear:o(function(){this.actors=[],this.boxes=[],this.loops=[],this.messages=[],this.notes=[]},"clear"),addBox:o(function(t){this.boxes.push(t)},"addBox"),addActor:o(function(t){this.actors.push(t)},"addActor"),addLoop:o(function(t){this.loops.push(t)},"addLoop"),addMessage:o(function(t){this.messages.push(t)},"addMessage"),addNote:o(function(t){this.notes.push(t)},"addNote"),lastActor:o(function(){return this.actors[this.actors.length-1]},"lastActor"),lastLoop:o(function(){return this.loops[this.loops.length-1]},"lastLoop"),lastMessage:o(function(){return this.messages[this.messages.length-1]},"lastMessage"),lastNote:o(function(){return this.notes[this.notes.length-1]},"lastNote"),actors:[],boxes:[],loops:[],messages:[],notes:[]},init:o(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,Vde(me())},"init"),updateVal:o(function(t,e,r,n){t[e]===void 0?t[e]=r:t[e]=n(r,t[e])},"updateVal"),updateBounds:o(function(t,e,r,n){let i=this,a=0;function s(l){return o(function(h){a++;let f=i.sequenceItems.length-a+1;i.updateVal(h,"starty",e-f*Ne.boxMargin,Math.min),i.updateVal(h,"stopy",n+f*Ne.boxMargin,Math.max),i.updateVal(rt.data,"startx",t-f*Ne.boxMargin,Math.min),i.updateVal(rt.data,"stopx",r+f*Ne.boxMargin,Math.max),l!=="activation"&&(i.updateVal(h,"startx",t-f*Ne.boxMargin,Math.min),i.updateVal(h,"stopx",r+f*Ne.boxMargin,Math.max),i.updateVal(rt.data,"starty",e-f*Ne.boxMargin,Math.min),i.updateVal(rt.data,"stopy",n+f*Ne.boxMargin,Math.max))},"updateItemBounds")}o(s,"updateFn"),this.sequenceItems.forEach(s()),this.activations.forEach(s("activation"))},"updateBounds"),insert:o(function(t,e,r,n){let i=Ze.getMin(t,r),a=Ze.getMax(t,r),s=Ze.getMin(e,n),l=Ze.getMax(e,n);this.updateVal(rt.data,"startx",i,Math.min),this.updateVal(rt.data,"starty",s,Math.min),this.updateVal(rt.data,"stopx",a,Math.max),this.updateVal(rt.data,"stopy",l,Math.max),this.updateBounds(i,s,a,l)},"insert"),newActivation:o(function(t,e,r){let n=r.get(t.from),i=XS(t.from).length||0,a=n.x+n.width/2+(i-1)*Ne.activationWidth/2;this.activations.push({startx:a,starty:this.verticalPos+2,stopx:a+Ne.activationWidth,stopy:void 0,actor:t.from,anchored:di.anchorElement(e)})},"newActivation"),endActivation:o(function(t){let e=this.activations.map(function(r){return r.actor}).lastIndexOf(t.from);return this.activations.splice(e,1)[0]},"endActivation"),createLoop:o(function(t={message:void 0,wrap:!1,width:void 0},e){return{startx:void 0,starty:this.verticalPos,stopx:void 0,stopy:void 0,title:t.message,wrap:t.wrap,width:t.width,height:0,fill:e}},"createLoop"),newLoop:o(function(t={message:void 0,wrap:!1,width:void 0},e){this.sequenceItems.push(this.createLoop(t,e))},"newLoop"),endLoop:o(function(){return this.sequenceItems.pop()},"endLoop"),isLoopOverlap:o(function(){return this.sequenceItems.length?this.sequenceItems[this.sequenceItems.length-1].overlap:!1},"isLoopOverlap"),addSectionToLoop:o(function(t){let e=this.sequenceItems.pop();e.sections=e.sections||[],e.sectionTitles=e.sectionTitles||[],e.sections.push({y:rt.getVerticalPos(),height:0}),e.sectionTitles.push(t),this.sequenceItems.push(e)},"addSectionToLoop"),saveVerticalPos:o(function(){this.isLoopOverlap()&&(this.savedVerticalPos=this.verticalPos)},"saveVerticalPos"),resetVerticalPos:o(function(){this.isLoopOverlap()&&(this.verticalPos=this.savedVerticalPos)},"resetVerticalPos"),bumpVerticalPos:o(function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=Ze.getMax(this.data.stopy,this.verticalPos)},"bumpVerticalPos"),getVerticalPos:o(function(){return this.verticalPos},"getVerticalPos"),getBounds:o(function(){return{bounds:this.data,models:this.models}},"getBounds")},oHe=o(async function(t,e){rt.bumpVerticalPos(Ne.boxMargin),e.height=Ne.boxMargin,e.starty=rt.getVerticalPos();let r=Al();r.x=e.startx,r.y=e.starty,r.width=e.width||Ne.width,r.class="note";let n=t.append("g"),i=di.drawRect(n,r),a=e2();a.x=e.startx,a.y=e.starty,a.width=r.width,a.dy="1em",a.text=e.message,a.class="noteText",a.fontFamily=Ne.noteFontFamily,a.fontSize=Ne.noteFontSize,a.fontWeight=Ne.noteFontWeight,a.anchor=Ne.noteAlign,a.textMargin=Ne.noteMargin,a.valign="center";let s=yi(a.text)?await Mb(n,a):Fp(n,a),l=Math.round(s.map(u=>(u._groups||u)[0][0].getBBox().height).reduce((u,h)=>u+h));i.attr("height",l+2*Ne.noteMargin),e.height+=l+2*Ne.noteMargin,rt.bumpVerticalPos(l+2*Ne.noteMargin),e.stopy=e.starty+l+2*Ne.noteMargin,e.stopx=e.startx+r.width,rt.insert(e.startx,e.starty,e.stopx,e.stopy),rt.models.addNote(e)},"drawNote"),$p=o(t=>({fontFamily:t.messageFontFamily,fontSize:t.messageFontSize,fontWeight:t.messageFontWeight}),"messageFont"),O1=o(t=>({fontFamily:t.noteFontFamily,fontSize:t.noteFontSize,fontWeight:t.noteFontWeight}),"noteFont"),vP=o(t=>({fontFamily:t.actorFontFamily,fontSize:t.actorFontSize,fontWeight:t.actorFontWeight}),"actorFont");o(lHe,"boundMessage");cHe=o(async function(t,e,r,n){let{startx:i,stopx:a,starty:s,message:l,type:u,sequenceIndex:h,sequenceVisible:f}=e,d=Vt.calculateTextDimensions(l,$p(Ne)),p=e2();p.x=i,p.y=s+10,p.width=a-i,p.class="messageText",p.dy="1em",p.text=l,p.fontFamily=Ne.messageFontFamily,p.fontSize=Ne.messageFontSize,p.fontWeight=Ne.messageFontWeight,p.anchor=Ne.messageAlign,p.valign="center",p.textMargin=Ne.wrapPadding,p.tspan=!1,yi(p.text)?await Mb(t,p,{startx:i,stopx:a,starty:r}):Fp(t,p);let m=d.width,g;i===a?Ne.rightAngles?g=t.append("path").attr("d",`M ${i},${r} H ${i+Ze.getMax(Ne.width/2,m/2)} V ${r+25} H ${i}`):g=t.append("path").attr("d","M "+i+","+r+" C "+(i+60)+","+(r-10)+" "+(i+60)+","+(r+30)+" "+i+","+(r+20)):(g=t.append("line"),g.attr("x1",i),g.attr("y1",r),g.attr("x2",a),g.attr("y2",r)),u===n.db.LINETYPE.DOTTED||u===n.db.LINETYPE.DOTTED_CROSS||u===n.db.LINETYPE.DOTTED_POINT||u===n.db.LINETYPE.DOTTED_OPEN||u===n.db.LINETYPE.BIDIRECTIONAL_DOTTED?(g.style("stroke-dasharray","3, 3"),g.attr("class","messageLine1")):g.attr("class","messageLine0");let y="";Ne.arrowMarkerAbsolute&&(y=mu(!0)),g.attr("stroke-width",2),g.attr("stroke","none"),g.style("fill","none"),(u===n.db.LINETYPE.SOLID||u===n.db.LINETYPE.DOTTED)&&g.attr("marker-end","url("+y+"#arrowhead)"),(u===n.db.LINETYPE.BIDIRECTIONAL_SOLID||u===n.db.LINETYPE.BIDIRECTIONAL_DOTTED)&&(g.attr("marker-start","url("+y+"#arrowhead)"),g.attr("marker-end","url("+y+"#arrowhead)")),(u===n.db.LINETYPE.SOLID_POINT||u===n.db.LINETYPE.DOTTED_POINT)&&g.attr("marker-end","url("+y+"#filled-head)"),(u===n.db.LINETYPE.SOLID_CROSS||u===n.db.LINETYPE.DOTTED_CROSS)&&g.attr("marker-end","url("+y+"#crosshead)"),(f||Ne.showSequenceNumbers)&&(g.attr("marker-start","url("+y+"#sequencenumber)"),t.append("text").attr("x",i).attr("y",r+4).attr("font-family","sans-serif").attr("font-size","12px").attr("text-anchor","middle").attr("class","sequenceNumber").text(h))},"drawMessage"),uHe=o(function(t,e,r,n,i,a,s){let l=0,u=0,h,f=0;for(let d of n){let p=e.get(d),m=p.box;h&&h!=m&&(s||rt.models.addBox(h),u+=Ne.boxMargin+h.margin),m&&m!=h&&(s||(m.x=l+u,m.y=i),u+=m.margin),p.width=p.width||Ne.width,p.height=Ze.getMax(p.height||Ne.height,Ne.height),p.margin=p.margin||Ne.actorMargin,f=Ze.getMax(f,p.height),r.get(p.name)&&(u+=p.width/2),p.x=l+u,p.starty=rt.getVerticalPos(),rt.insert(p.x,i,p.x+p.width,p.height),l+=p.width+u,p.box&&(p.box.width=l+m.margin-p.box.x),u=p.margin,h=p.box,rt.models.addActor(p)}h&&!s&&rt.models.addBox(h),rt.bumpVerticalPos(f)},"addActorRenderingData"),xP=o(async function(t,e,r,n){if(n){let i=0;rt.bumpVerticalPos(Ne.boxMargin*2);for(let a of r){let s=e.get(a);s.stopy||(s.stopy=rt.getVerticalPos());let l=await di.drawActor(t,s,Ne,!0);i=Ze.getMax(i,l)}rt.bumpVerticalPos(i+Ne.boxMargin)}else for(let i of r){let a=e.get(i);await di.drawActor(t,a,Ne,!1)}},"drawActors"),Gde=o(function(t,e,r,n){let i=0,a=0;for(let s of r){let l=e.get(s),u=pHe(l),h=di.drawPopup(t,l,u,Ne,Ne.forceMenus,n);h.height>i&&(i=h.height),h.width+l.x>a&&(a=h.width+l.x)}return{maxHeight:i,maxWidth:a}},"drawActorsPopup"),Vde=o(function(t){Un(Ne,t),t.fontFamily&&(Ne.actorFontFamily=Ne.noteFontFamily=Ne.messageFontFamily=t.fontFamily),t.fontSize&&(Ne.actorFontSize=Ne.noteFontSize=Ne.messageFontSize=t.fontSize),t.fontWeight&&(Ne.actorFontWeight=Ne.noteFontWeight=Ne.messageFontWeight=t.fontWeight)},"setConf"),XS=o(function(t){return rt.activations.filter(function(e){return e.actor===t})},"actorActivations"),zde=o(function(t,e){let r=e.get(t),n=XS(t),i=n.reduce(function(s,l){return Ze.getMin(s,l.startx)},r.x+r.width/2-1),a=n.reduce(function(s,l){return Ze.getMax(s,l.stopx)},r.x+r.width/2+1);return[i,a]},"activationBounds");o(Xc,"adjustLoopHeightForWrap");o(hHe,"adjustCreatedDestroyedData");fHe=o(async function(t,e,r,n){let{securityLevel:i,sequence:a}=me();Ne=a;let s;i==="sandbox"&&(s=Ge("#i"+e));let l=i==="sandbox"?Ge(s.nodes()[0].contentDocument.body):Ge("body"),u=i==="sandbox"?s.nodes()[0].contentDocument:document;rt.init(),X.debug(n.db);let h=i==="sandbox"?l.select(`[id="${e}"]`):Ge(`[id="${e}"]`),f=n.db.getActors(),d=n.db.getCreatedActors(),p=n.db.getDestroyedActors(),m=n.db.getBoxes(),g=n.db.getActorKeys(),y=n.db.getMessages(),v=n.db.getDiagramTitle(),x=n.db.hasAtLeastOneBox(),b=n.db.hasAtLeastOneBoxWithTitle(),T=await dHe(f,y,n);if(Ne.height=await mHe(f,T,m),di.insertComputerIcon(h),di.insertDatabaseIcon(h),di.insertClockIcon(h),x&&(rt.bumpVerticalPos(Ne.boxMargin),b&&rt.bumpVerticalPos(m[0].textMaxHeight)),Ne.hideUnusedParticipants===!0){let B=new Set;y.forEach(F=>{B.add(F.from),B.add(F.to)}),g=g.filter(F=>B.has(F))}uHe(h,f,d,g,0,y,!1);let S=await vHe(y,f,T,n);di.insertArrowHead(h),di.insertArrowCrossHead(h),di.insertArrowFilledHead(h),di.insertSequenceNumber(h);function w(B,F){let z=rt.endActivation(B);z.starty+18>F&&(z.starty=F-6,F+=12),di.drawActivation(h,z,F,Ne,XS(B.from).length),rt.insert(z.startx,F-10,z.stopx,F)}o(w,"activeEnd");let E=1,_=1,C=[],D=[],O=0;for(let B of y){let F,z,$;switch(B.type){case n.db.LINETYPE.NOTE:rt.resetVerticalPos(),z=B.noteModel,await oHe(h,z);break;case n.db.LINETYPE.ACTIVE_START:rt.newActivation(B,h,f);break;case n.db.LINETYPE.ACTIVE_END:w(B,rt.getVerticalPos());break;case n.db.LINETYPE.LOOP_START:Xc(S,B,Ne.boxMargin,Ne.boxMargin+Ne.boxTextMargin,U=>rt.newLoop(U));break;case n.db.LINETYPE.LOOP_END:F=rt.endLoop(),await di.drawLoop(h,F,"loop",Ne),rt.bumpVerticalPos(F.stopy-rt.getVerticalPos()),rt.models.addLoop(F);break;case n.db.LINETYPE.RECT_START:Xc(S,B,Ne.boxMargin,Ne.boxMargin,U=>rt.newLoop(void 0,U.message));break;case n.db.LINETYPE.RECT_END:F=rt.endLoop(),D.push(F),rt.models.addLoop(F),rt.bumpVerticalPos(F.stopy-rt.getVerticalPos());break;case n.db.LINETYPE.OPT_START:Xc(S,B,Ne.boxMargin,Ne.boxMargin+Ne.boxTextMargin,U=>rt.newLoop(U));break;case n.db.LINETYPE.OPT_END:F=rt.endLoop(),await di.drawLoop(h,F,"opt",Ne),rt.bumpVerticalPos(F.stopy-rt.getVerticalPos()),rt.models.addLoop(F);break;case n.db.LINETYPE.ALT_START:Xc(S,B,Ne.boxMargin,Ne.boxMargin+Ne.boxTextMargin,U=>rt.newLoop(U));break;case n.db.LINETYPE.ALT_ELSE:Xc(S,B,Ne.boxMargin+Ne.boxTextMargin,Ne.boxMargin,U=>rt.addSectionToLoop(U));break;case n.db.LINETYPE.ALT_END:F=rt.endLoop(),await di.drawLoop(h,F,"alt",Ne),rt.bumpVerticalPos(F.stopy-rt.getVerticalPos()),rt.models.addLoop(F);break;case n.db.LINETYPE.PAR_START:case n.db.LINETYPE.PAR_OVER_START:Xc(S,B,Ne.boxMargin,Ne.boxMargin+Ne.boxTextMargin,U=>rt.newLoop(U)),rt.saveVerticalPos();break;case n.db.LINETYPE.PAR_AND:Xc(S,B,Ne.boxMargin+Ne.boxTextMargin,Ne.boxMargin,U=>rt.addSectionToLoop(U));break;case n.db.LINETYPE.PAR_END:F=rt.endLoop(),await di.drawLoop(h,F,"par",Ne),rt.bumpVerticalPos(F.stopy-rt.getVerticalPos()),rt.models.addLoop(F);break;case n.db.LINETYPE.AUTONUMBER:E=B.message.start||E,_=B.message.step||_,B.message.visible?n.db.enableSequenceNumbers():n.db.disableSequenceNumbers();break;case n.db.LINETYPE.CRITICAL_START:Xc(S,B,Ne.boxMargin,Ne.boxMargin+Ne.boxTextMargin,U=>rt.newLoop(U));break;case n.db.LINETYPE.CRITICAL_OPTION:Xc(S,B,Ne.boxMargin+Ne.boxTextMargin,Ne.boxMargin,U=>rt.addSectionToLoop(U));break;case n.db.LINETYPE.CRITICAL_END:F=rt.endLoop(),await di.drawLoop(h,F,"critical",Ne),rt.bumpVerticalPos(F.stopy-rt.getVerticalPos()),rt.models.addLoop(F);break;case n.db.LINETYPE.BREAK_START:Xc(S,B,Ne.boxMargin,Ne.boxMargin+Ne.boxTextMargin,U=>rt.newLoop(U));break;case n.db.LINETYPE.BREAK_END:F=rt.endLoop(),await di.drawLoop(h,F,"break",Ne),rt.bumpVerticalPos(F.stopy-rt.getVerticalPos()),rt.models.addLoop(F);break;default:try{$=B.msgModel,$.starty=rt.getVerticalPos(),$.sequenceIndex=E,$.sequenceVisible=n.db.showSequenceNumbers();let U=await lHe(h,$);hHe(B,$,U,O,f,d,p),C.push({messageModel:$,lineStartY:U}),rt.models.addMessage($)}catch(U){X.error("error while drawing message",U)}}[n.db.LINETYPE.SOLID_OPEN,n.db.LINETYPE.DOTTED_OPEN,n.db.LINETYPE.SOLID,n.db.LINETYPE.DOTTED,n.db.LINETYPE.SOLID_CROSS,n.db.LINETYPE.DOTTED_CROSS,n.db.LINETYPE.SOLID_POINT,n.db.LINETYPE.DOTTED_POINT,n.db.LINETYPE.BIDIRECTIONAL_SOLID,n.db.LINETYPE.BIDIRECTIONAL_DOTTED].includes(B.type)&&(E=E+_),O++}X.debug("createdActors",d),X.debug("destroyedActors",p),await xP(h,f,g,!1);for(let B of C)await cHe(h,B.messageModel,B.lineStartY,n);Ne.mirrorActors&&await xP(h,f,g,!0),D.forEach(B=>di.drawBackgroundRect(h,B)),gP(h,f,g,Ne);for(let B of rt.models.boxes)B.height=rt.getVerticalPos()-B.y,rt.insert(B.x,B.y,B.x+B.width,B.height),B.startx=B.x,B.starty=B.y,B.stopx=B.startx+B.width,B.stopy=B.starty+B.height,B.stroke="rgb(0,0,0, 0.5)",di.drawBox(h,B,Ne);x&&rt.bumpVerticalPos(Ne.boxMargin);let R=Gde(h,f,g,u),{bounds:k}=rt.getBounds();k.startx===void 0&&(k.startx=0),k.starty===void 0&&(k.starty=0),k.stopx===void 0&&(k.stopx=0),k.stopy===void 0&&(k.stopy=0);let L=k.stopy-k.starty;L2,d=o(y=>l?-y:y,"adjustValue");t.from===t.to?h=u:(t.activate&&!f&&(h+=d(Ne.activationWidth/2-1)),[r.db.LINETYPE.SOLID_OPEN,r.db.LINETYPE.DOTTED_OPEN].includes(t.type)||(h+=d(3)),[r.db.LINETYPE.BIDIRECTIONAL_SOLID,r.db.LINETYPE.BIDIRECTIONAL_DOTTED].includes(t.type)&&(u-=d(3)));let p=[n,i,a,s],m=Math.abs(u-h);t.wrap&&t.message&&(t.message=Vt.wrapLabel(t.message,Ze.getMax(m+2*Ne.wrapPadding,Ne.width),$p(Ne)));let g=Vt.calculateTextDimensions(t.message,$p(Ne));return{width:Ze.getMax(t.wrap?0:g.width+2*Ne.wrapPadding,m+2*Ne.wrapPadding,Ne.width),height:0,startx:u,stopx:h,starty:0,stopy:0,message:t.message,type:t.type,wrap:t.wrap,fromBounds:Math.min.apply(null,p),toBounds:Math.max.apply(null,p)}},"buildMessageModel"),vHe=o(async function(t,e,r,n){let i={},a=[],s,l,u;for(let h of t){switch(h.type){case n.db.LINETYPE.LOOP_START:case n.db.LINETYPE.ALT_START:case n.db.LINETYPE.OPT_START:case n.db.LINETYPE.PAR_START:case n.db.LINETYPE.PAR_OVER_START:case n.db.LINETYPE.CRITICAL_START:case n.db.LINETYPE.BREAK_START:a.push({id:h.id,msg:h.message,from:Number.MAX_SAFE_INTEGER,to:Number.MIN_SAFE_INTEGER,width:0});break;case n.db.LINETYPE.ALT_ELSE:case n.db.LINETYPE.PAR_AND:case n.db.LINETYPE.CRITICAL_OPTION:h.message&&(s=a.pop(),i[s.id]=s,i[h.id]=s,a.push(s));break;case n.db.LINETYPE.LOOP_END:case n.db.LINETYPE.ALT_END:case n.db.LINETYPE.OPT_END:case n.db.LINETYPE.PAR_END:case n.db.LINETYPE.CRITICAL_END:case n.db.LINETYPE.BREAK_END:s=a.pop(),i[s.id]=s;break;case n.db.LINETYPE.ACTIVE_START:{let d=e.get(h.from?h.from:h.to.actor),p=XS(h.from?h.from:h.to.actor).length,m=d.x+d.width/2+(p-1)*Ne.activationWidth/2,g={startx:m,stopx:m+Ne.activationWidth,actor:h.from,enabled:!0};rt.activations.push(g)}break;case n.db.LINETYPE.ACTIVE_END:{let d=rt.activations.map(p=>p.actor).lastIndexOf(h.from);rt.activations.splice(d,1).splice(0,1)}break}h.placement!==void 0?(l=await gHe(h,e,n),h.noteModel=l,a.forEach(d=>{s=d,s.from=Ze.getMin(s.from,l.startx),s.to=Ze.getMax(s.to,l.startx+l.width),s.width=Ze.getMax(s.width,Math.abs(s.from-s.to))-Ne.labelBoxWidth})):(u=yHe(h,e,n),h.msgModel=u,u.startx&&u.stopx&&a.length>0&&a.forEach(d=>{if(s=d,u.startx===u.stopx){let p=e.get(h.from),m=e.get(h.to);s.from=Ze.getMin(p.x-u.width/2,p.x-p.width/2,s.from),s.to=Ze.getMax(m.x+u.width/2,m.x+p.width/2,s.to),s.width=Ze.getMax(s.width,Math.abs(s.to-s.from))-Ne.labelBoxWidth}else s.from=Ze.getMin(u.startx,s.from),s.to=Ze.getMax(u.stopx,s.to),s.width=Ze.getMax(s.width,u.width)-Ne.labelBoxWidth}))}return rt.activations=[],X.debug("Loop type widths:",i),i},"calculateLoopBounds"),Ude={bounds:rt,drawActors:xP,drawActorsPopup:Gde,setConf:Vde,draw:fHe}});var Wde={};ur(Wde,{diagram:()=>xHe});var xHe,qde=N(()=>{"use strict";Dde();Lde();Nde();Gt();Hde();xHe={parser:_de,get db(){return new YS},renderer:Ude,styles:Rde,init:o(t=>{t.sequence||(t.sequence={}),t.wrap&&(t.sequence.wrap=t.wrap,nv({sequence:{wrap:t.wrap}}))},"init")}});var bP,jS,TP=N(()=>{"use strict";bP=function(){var t=o(function(Ie,xe,q,de){for(q=q||{},de=Ie.length;de--;q[Ie[de]]=xe);return q},"o"),e=[1,18],r=[1,19],n=[1,20],i=[1,41],a=[1,42],s=[1,26],l=[1,24],u=[1,25],h=[1,32],f=[1,33],d=[1,34],p=[1,45],m=[1,35],g=[1,36],y=[1,37],v=[1,38],x=[1,27],b=[1,28],T=[1,29],S=[1,30],w=[1,31],E=[1,44],_=[1,46],C=[1,43],D=[1,47],O=[1,9],R=[1,8,9],k=[1,58],L=[1,59],A=[1,60],I=[1,61],M=[1,62],P=[1,63],B=[1,64],F=[1,8,9,41],z=[1,76],$=[1,8,9,12,13,22,39,41,44,66,67,68,69,70,71,72,77,79],U=[1,8,9,12,13,17,20,22,39,41,44,48,58,66,67,68,69,70,71,72,77,79,84,99,101,102],K=[13,58,84,99,101,102],ee=[13,58,71,72,84,99,101,102],Y=[13,58,66,67,68,69,70,84,99,101,102],ce=[1,98],Z=[1,115],ue=[1,107],Q=[1,113],j=[1,108],ne=[1,109],te=[1,110],he=[1,111],le=[1,112],J=[1,114],Se=[22,58,59,80,84,85,86,87,88,89],se=[1,8,9,39,41,44],ae=[1,8,9,22],Oe=[1,143],ye=[1,8,9,59],Be=[1,8,9,22,58,59,80,84,85,86,87,88,89],He={trace:o(function(){},"trace"),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,DOT:17,className:18,classLiteralName:19,GENERICTYPE:20,relationStatement:21,LABEL:22,namespaceStatement:23,classStatement:24,memberStatement:25,annotationStatement:26,clickStatement:27,styleStatement:28,cssClassStatement:29,noteStatement:30,classDefStatement:31,direction:32,acc_title:33,acc_title_value:34,acc_descr:35,acc_descr_value:36,acc_descr_multiline_value:37,namespaceIdentifier:38,STRUCT_START:39,classStatements:40,STRUCT_STOP:41,NAMESPACE:42,classIdentifier:43,STYLE_SEPARATOR:44,members:45,CLASS:46,ANNOTATION_START:47,ANNOTATION_END:48,MEMBER:49,SEPARATOR:50,relation:51,NOTE_FOR:52,noteText:53,NOTE:54,CLASSDEF:55,classList:56,stylesOpt:57,ALPHA:58,COMMA:59,direction_tb:60,direction_bt:61,direction_rl:62,direction_lr:63,relationType:64,lineType:65,AGGREGATION:66,EXTENSION:67,COMPOSITION:68,DEPENDENCY:69,LOLLIPOP:70,LINE:71,DOTTED_LINE:72,CALLBACK:73,LINK:74,LINK_TARGET:75,CLICK:76,CALLBACK_NAME:77,CALLBACK_ARGS:78,HREF:79,STYLE:80,CSSCLASS:81,style:82,styleComponent:83,NUM:84,COLON:85,UNIT:86,SPACE:87,BRKT:88,PCT:89,commentToken:90,textToken:91,graphCodeTokens:92,textNoTagsToken:93,TAGSTART:94,TAGEND:95,"==":96,"--":97,DEFAULT:98,MINUS:99,keywords:100,UNICODE_TEXT:101,BQUOTE_STR:102,$accept:0,$end:1},terminals_:{2:"error",7:"CLASS_DIAGRAM",8:"NEWLINE",9:"EOF",12:"SQS",13:"STR",14:"SQE",17:"DOT",20:"GENERICTYPE",22:"LABEL",33:"acc_title",34:"acc_title_value",35:"acc_descr",36:"acc_descr_value",37:"acc_descr_multiline_value",39:"STRUCT_START",41:"STRUCT_STOP",42:"NAMESPACE",44:"STYLE_SEPARATOR",46:"CLASS",47:"ANNOTATION_START",48:"ANNOTATION_END",49:"MEMBER",50:"SEPARATOR",52:"NOTE_FOR",54:"NOTE",55:"CLASSDEF",58:"ALPHA",59:"COMMA",60:"direction_tb",61:"direction_bt",62:"direction_rl",63:"direction_lr",66:"AGGREGATION",67:"EXTENSION",68:"COMPOSITION",69:"DEPENDENCY",70:"LOLLIPOP",71:"LINE",72:"DOTTED_LINE",73:"CALLBACK",74:"LINK",75:"LINK_TARGET",76:"CLICK",77:"CALLBACK_NAME",78:"CALLBACK_ARGS",79:"HREF",80:"STYLE",81:"CSSCLASS",84:"NUM",85:"COLON",86:"UNIT",87:"SPACE",88:"BRKT",89:"PCT",92:"graphCodeTokens",94:"TAGSTART",95:"TAGEND",96:"==",97:"--",98:"DEFAULT",99:"MINUS",100:"keywords",101:"UNICODE_TEXT",102:"BQUOTE_STR"},productions_:[0,[3,1],[3,1],[4,1],[6,4],[5,1],[5,2],[5,3],[11,3],[15,1],[15,3],[15,2],[18,1],[18,3],[18,1],[18,2],[18,2],[18,2],[10,1],[10,2],[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],[23,4],[23,5],[38,2],[40,1],[40,2],[40,3],[24,1],[24,3],[24,4],[24,6],[43,2],[43,3],[26,4],[45,1],[45,2],[25,1],[25,2],[25,1],[25,1],[21,3],[21,4],[21,4],[21,5],[30,3],[30,2],[31,3],[56,1],[56,3],[32,1],[32,1],[32,1],[32,1],[51,3],[51,2],[51,2],[51,1],[64,1],[64,1],[64,1],[64,1],[64,1],[65,1],[65,1],[27,3],[27,4],[27,3],[27,4],[27,4],[27,5],[27,3],[27,4],[27,4],[27,5],[27,4],[27,5],[27,5],[27,6],[28,3],[29,3],[57,1],[57,3],[82,1],[82,2],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[90,1],[90,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[93,1],[93,1],[93,1],[93,1],[16,1],[16,1],[16,1],[16,1],[19,1],[53,1]],performAction:o(function(xe,q,de,ie,oe,V,Te){var W=V.length-1;switch(oe){case 8:this.$=V[W-1];break;case 9:case 12:case 14:this.$=V[W];break;case 10:case 13:this.$=V[W-2]+"."+V[W];break;case 11:case 15:this.$=V[W-1]+V[W];break;case 16:case 17:this.$=V[W-1]+"~"+V[W]+"~";break;case 18:ie.addRelation(V[W]);break;case 19:V[W-1].title=ie.cleanupLabel(V[W]),ie.addRelation(V[W-1]);break;case 30:this.$=V[W].trim(),ie.setAccTitle(this.$);break;case 31:case 32:this.$=V[W].trim(),ie.setAccDescription(this.$);break;case 33:ie.addClassesToNamespace(V[W-3],V[W-1]);break;case 34:ie.addClassesToNamespace(V[W-4],V[W-1]);break;case 35:this.$=V[W],ie.addNamespace(V[W]);break;case 36:this.$=[V[W]];break;case 37:this.$=[V[W-1]];break;case 38:V[W].unshift(V[W-2]),this.$=V[W];break;case 40:ie.setCssClass(V[W-2],V[W]);break;case 41:ie.addMembers(V[W-3],V[W-1]);break;case 42:ie.setCssClass(V[W-5],V[W-3]),ie.addMembers(V[W-5],V[W-1]);break;case 43:this.$=V[W],ie.addClass(V[W]);break;case 44:this.$=V[W-1],ie.addClass(V[W-1]),ie.setClassLabel(V[W-1],V[W]);break;case 45:ie.addAnnotation(V[W],V[W-2]);break;case 46:case 59:this.$=[V[W]];break;case 47:V[W].push(V[W-1]),this.$=V[W];break;case 48:break;case 49:ie.addMember(V[W-1],ie.cleanupLabel(V[W]));break;case 50:break;case 51:break;case 52:this.$={id1:V[W-2],id2:V[W],relation:V[W-1],relationTitle1:"none",relationTitle2:"none"};break;case 53:this.$={id1:V[W-3],id2:V[W],relation:V[W-1],relationTitle1:V[W-2],relationTitle2:"none"};break;case 54:this.$={id1:V[W-3],id2:V[W],relation:V[W-2],relationTitle1:"none",relationTitle2:V[W-1]};break;case 55:this.$={id1:V[W-4],id2:V[W],relation:V[W-2],relationTitle1:V[W-3],relationTitle2:V[W-1]};break;case 56:ie.addNote(V[W],V[W-1]);break;case 57:ie.addNote(V[W]);break;case 58:this.$=V[W-2],ie.defineClass(V[W-1],V[W]);break;case 60:this.$=V[W-2].concat([V[W]]);break;case 61:ie.setDirection("TB");break;case 62:ie.setDirection("BT");break;case 63:ie.setDirection("RL");break;case 64:ie.setDirection("LR");break;case 65:this.$={type1:V[W-2],type2:V[W],lineType:V[W-1]};break;case 66:this.$={type1:"none",type2:V[W],lineType:V[W-1]};break;case 67:this.$={type1:V[W-1],type2:"none",lineType:V[W]};break;case 68:this.$={type1:"none",type2:"none",lineType:V[W]};break;case 69:this.$=ie.relationType.AGGREGATION;break;case 70:this.$=ie.relationType.EXTENSION;break;case 71:this.$=ie.relationType.COMPOSITION;break;case 72:this.$=ie.relationType.DEPENDENCY;break;case 73:this.$=ie.relationType.LOLLIPOP;break;case 74:this.$=ie.lineType.LINE;break;case 75:this.$=ie.lineType.DOTTED_LINE;break;case 76:case 82:this.$=V[W-2],ie.setClickEvent(V[W-1],V[W]);break;case 77:case 83:this.$=V[W-3],ie.setClickEvent(V[W-2],V[W-1]),ie.setTooltip(V[W-2],V[W]);break;case 78:this.$=V[W-2],ie.setLink(V[W-1],V[W]);break;case 79:this.$=V[W-3],ie.setLink(V[W-2],V[W-1],V[W]);break;case 80:this.$=V[W-3],ie.setLink(V[W-2],V[W-1]),ie.setTooltip(V[W-2],V[W]);break;case 81:this.$=V[W-4],ie.setLink(V[W-3],V[W-2],V[W]),ie.setTooltip(V[W-3],V[W-1]);break;case 84:this.$=V[W-3],ie.setClickEvent(V[W-2],V[W-1],V[W]);break;case 85:this.$=V[W-4],ie.setClickEvent(V[W-3],V[W-2],V[W-1]),ie.setTooltip(V[W-3],V[W]);break;case 86:this.$=V[W-3],ie.setLink(V[W-2],V[W]);break;case 87:this.$=V[W-4],ie.setLink(V[W-3],V[W-1],V[W]);break;case 88:this.$=V[W-4],ie.setLink(V[W-3],V[W-1]),ie.setTooltip(V[W-3],V[W]);break;case 89:this.$=V[W-5],ie.setLink(V[W-4],V[W-2],V[W]),ie.setTooltip(V[W-4],V[W-1]);break;case 90:this.$=V[W-2],ie.setCssStyle(V[W-1],V[W]);break;case 91:ie.setCssClass(V[W-1],V[W]);break;case 92:this.$=[V[W]];break;case 93:V[W-2].push(V[W]),this.$=V[W-2];break;case 95:this.$=V[W-1]+V[W];break}},"anonymous"),table:[{3:1,4:2,5:3,6:4,7:[1,6],10:5,16:39,18:21,19:40,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,33:e,35:r,37:n,38:22,42:i,43:23,46:a,47:s,49:l,50:u,52:h,54:f,55:d,58:p,60:m,61:g,62:y,63:v,73:x,74:b,76:T,80:S,81:w,84:E,99:_,101:C,102:D},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,3]},t(O,[2,5],{8:[1,48]}),{8:[1,49]},t(R,[2,18],{22:[1,50]}),t(R,[2,20]),t(R,[2,21]),t(R,[2,22]),t(R,[2,23]),t(R,[2,24]),t(R,[2,25]),t(R,[2,26]),t(R,[2,27]),t(R,[2,28]),t(R,[2,29]),{34:[1,51]},{36:[1,52]},t(R,[2,32]),t(R,[2,48],{51:53,64:56,65:57,13:[1,54],22:[1,55],66:k,67:L,68:A,69:I,70:M,71:P,72:B}),{39:[1,65]},t(F,[2,39],{39:[1,67],44:[1,66]}),t(R,[2,50]),t(R,[2,51]),{16:68,58:p,84:E,99:_,101:C},{16:39,18:69,19:40,58:p,84:E,99:_,101:C,102:D},{16:39,18:70,19:40,58:p,84:E,99:_,101:C,102:D},{16:39,18:71,19:40,58:p,84:E,99:_,101:C,102:D},{58:[1,72]},{13:[1,73]},{16:39,18:74,19:40,58:p,84:E,99:_,101:C,102:D},{13:z,53:75},{56:77,58:[1,78]},t(R,[2,61]),t(R,[2,62]),t(R,[2,63]),t(R,[2,64]),t($,[2,12],{16:39,19:40,18:80,17:[1,79],20:[1,81],58:p,84:E,99:_,101:C,102:D}),t($,[2,14],{20:[1,82]}),{15:83,16:84,58:p,84:E,99:_,101:C},{16:39,18:85,19:40,58:p,84:E,99:_,101:C,102:D},t(U,[2,118]),t(U,[2,119]),t(U,[2,120]),t(U,[2,121]),t([1,8,9,12,13,20,22,39,41,44,66,67,68,69,70,71,72,77,79],[2,122]),t(O,[2,6],{10:5,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,18:21,38:22,43:23,16:39,19:40,5:86,33:e,35:r,37:n,42:i,46:a,47:s,49:l,50:u,52:h,54:f,55:d,58:p,60:m,61:g,62:y,63:v,73:x,74:b,76:T,80:S,81:w,84:E,99:_,101:C,102:D}),{5:87,10:5,16:39,18:21,19:40,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,33:e,35:r,37:n,38:22,42:i,43:23,46:a,47:s,49:l,50:u,52:h,54:f,55:d,58:p,60:m,61:g,62:y,63:v,73:x,74:b,76:T,80:S,81:w,84:E,99:_,101:C,102:D},t(R,[2,19]),t(R,[2,30]),t(R,[2,31]),{13:[1,89],16:39,18:88,19:40,58:p,84:E,99:_,101:C,102:D},{51:90,64:56,65:57,66:k,67:L,68:A,69:I,70:M,71:P,72:B},t(R,[2,49]),{65:91,71:P,72:B},t(K,[2,68],{64:92,66:k,67:L,68:A,69:I,70:M}),t(ee,[2,69]),t(ee,[2,70]),t(ee,[2,71]),t(ee,[2,72]),t(ee,[2,73]),t(Y,[2,74]),t(Y,[2,75]),{8:[1,94],24:95,40:93,43:23,46:a},{16:96,58:p,84:E,99:_,101:C},{45:97,49:ce},{48:[1,99]},{13:[1,100]},{13:[1,101]},{77:[1,102],79:[1,103]},{22:Z,57:104,58:ue,80:Q,82:105,83:106,84:j,85:ne,86:te,87:he,88:le,89:J},{58:[1,116]},{13:z,53:117},t(R,[2,57]),t(R,[2,123]),{22:Z,57:118,58:ue,59:[1,119],80:Q,82:105,83:106,84:j,85:ne,86:te,87:he,88:le,89:J},t(Se,[2,59]),{16:39,18:120,19:40,58:p,84:E,99:_,101:C,102:D},t($,[2,15]),t($,[2,16]),t($,[2,17]),{39:[2,35]},{15:122,16:84,17:[1,121],39:[2,9],58:p,84:E,99:_,101:C},t(se,[2,43],{11:123,12:[1,124]}),t(O,[2,7]),{9:[1,125]},t(ae,[2,52]),{16:39,18:126,19:40,58:p,84:E,99:_,101:C,102:D},{13:[1,128],16:39,18:127,19:40,58:p,84:E,99:_,101:C,102:D},t(K,[2,67],{64:129,66:k,67:L,68:A,69:I,70:M}),t(K,[2,66]),{41:[1,130]},{24:95,40:131,43:23,46:a},{8:[1,132],41:[2,36]},t(F,[2,40],{39:[1,133]}),{41:[1,134]},{41:[2,46],45:135,49:ce},{16:39,18:136,19:40,58:p,84:E,99:_,101:C,102:D},t(R,[2,76],{13:[1,137]}),t(R,[2,78],{13:[1,139],75:[1,138]}),t(R,[2,82],{13:[1,140],78:[1,141]}),{13:[1,142]},t(R,[2,90],{59:Oe}),t(ye,[2,92],{83:144,22:Z,58:ue,80:Q,84:j,85:ne,86:te,87:he,88:le,89:J}),t(Be,[2,94]),t(Be,[2,96]),t(Be,[2,97]),t(Be,[2,98]),t(Be,[2,99]),t(Be,[2,100]),t(Be,[2,101]),t(Be,[2,102]),t(Be,[2,103]),t(Be,[2,104]),t(R,[2,91]),t(R,[2,56]),t(R,[2,58],{59:Oe}),{58:[1,145]},t($,[2,13]),{15:146,16:84,58:p,84:E,99:_,101:C},{39:[2,11]},t(se,[2,44]),{13:[1,147]},{1:[2,4]},t(ae,[2,54]),t(ae,[2,53]),{16:39,18:148,19:40,58:p,84:E,99:_,101:C,102:D},t(K,[2,65]),t(R,[2,33]),{41:[1,149]},{24:95,40:150,41:[2,37],43:23,46:a},{45:151,49:ce},t(F,[2,41]),{41:[2,47]},t(R,[2,45]),t(R,[2,77]),t(R,[2,79]),t(R,[2,80],{75:[1,152]}),t(R,[2,83]),t(R,[2,84],{13:[1,153]}),t(R,[2,86],{13:[1,155],75:[1,154]}),{22:Z,58:ue,80:Q,82:156,83:106,84:j,85:ne,86:te,87:he,88:le,89:J},t(Be,[2,95]),t(Se,[2,60]),{39:[2,10]},{14:[1,157]},t(ae,[2,55]),t(R,[2,34]),{41:[2,38]},{41:[1,158]},t(R,[2,81]),t(R,[2,85]),t(R,[2,87]),t(R,[2,88],{75:[1,159]}),t(ye,[2,93],{83:144,22:Z,58:ue,80:Q,84:j,85:ne,86:te,87:he,88:le,89:J}),t(se,[2,8]),t(F,[2,42]),t(R,[2,89])],defaultActions:{2:[2,1],3:[2,2],4:[2,3],83:[2,35],122:[2,11],125:[2,4],135:[2,47],146:[2,10],150:[2,38]},parseError:o(function(xe,q){if(q.recoverable)this.trace(xe);else{var de=new Error(xe);throw de.hash=q,de}},"parseError"),parse:o(function(xe){var q=this,de=[0],ie=[],oe=[null],V=[],Te=this.table,W="",pe=0,ve=0,Pe=0,_e=2,be=1,Ve=V.slice.call(arguments,1),De=Object.create(this.lexer),qe={yy:{}};for(var at in this.yy)Object.prototype.hasOwnProperty.call(this.yy,at)&&(qe.yy[at]=this.yy[at]);De.setInput(xe,qe.yy),qe.yy.lexer=De,qe.yy.parser=this,typeof De.yylloc>"u"&&(De.yylloc={});var Rt=De.yylloc;V.push(Rt);var st=De.options&&De.options.ranges;typeof qe.yy.parseError=="function"?this.parseError=qe.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Ue(kt){de.length=de.length-2*kt,oe.length=oe.length-kt,V.length=V.length-kt}o(Ue,"popStack");function ct(){var kt;return kt=ie.pop()||De.lex()||be,typeof kt!="number"&&(kt instanceof Array&&(ie=kt,kt=ie.pop()),kt=q.symbols_[kt]||kt),kt}o(ct,"lex");for(var We,ot,Yt,Tt,Mt,bt,ut={},St,ft,vt,nt;;){if(Yt=de[de.length-1],this.defaultActions[Yt]?Tt=this.defaultActions[Yt]:((We===null||typeof We>"u")&&(We=ct()),Tt=Te[Yt]&&Te[Yt][We]),typeof Tt>"u"||!Tt.length||!Tt[0]){var pn="";nt=[];for(St in Te[Yt])this.terminals_[St]&&St>_e&&nt.push("'"+this.terminals_[St]+"'");De.showPosition?pn="Parse error on line "+(pe+1)+`: `+De.showPosition()+` -Expecting `+nt.join(", ")+", got '"+(this.terminals_[We]||We)+"'":dn="Parse error on line "+(pe+1)+": Unexpected "+(We==be?"end of input":"'"+(this.terminals_[We]||We)+"'"),this.parseError(dn,{text:De.match,token:this.terminals_[We]||We,line:De.yylineno,loc:Lt,expected:nt})}if(bt[0]instanceof Array&&bt.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Yt+", token: "+We);switch(bt[0]){case 1:de.push(We),oe.push(De.yytext),V.push(De.yylloc),de.push(bt[1]),We=null,ot?(We=ot,ot=null):(ve=De.yyleng,W=De.yytext,pe=De.yylineno,Lt=De.yylloc,Pe>0&&Pe--);break;case 2:if(ft=this.productions_[bt[1]][1],ut.$=oe[oe.length-ft],ut._$={first_line:V[V.length-(ft||1)].first_line,last_line:V[V.length-1].last_line,first_column:V[V.length-(ft||1)].first_column,last_column:V[V.length-1].last_column},st&&(ut._$.range=[V[V.length-(ft||1)].range[0],V[V.length-1].range[1]]),xt=this.performAction.apply(ut,[W,ve,pe,qe.yy,bt[1],oe,V].concat(Ve)),typeof xt<"u")return xt;ft&&(de=de.slice(0,-1*ft*2),oe=oe.slice(0,-1*ft),V=V.slice(0,-1*ft)),de.push(this.productions_[bt[1]][0]),oe.push(ut.$),V.push(ut._$),yt=we[de[de.length-2]][de[de.length-1]],de.push(yt);break;case 3:return!0}}return!0},"parse")},ze=function(){var Ie={EOF:1,parseError:o(function(q,de){if(this.yy.parser)this.yy.parser.parseError(q,de);else throw new Error(q)},"parseError"),setInput:o(function(xe,q){return this.yy=q||this.yy||{},this._input=xe,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},"setInput"),input:o(function(){var xe=this._input[0];this.yytext+=xe,this.yyleng++,this.offset++,this.match+=xe,this.matched+=xe;var q=xe.match(/(?:\r\n?|\n).*/g);return q?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),xe},"input"),unput:o(function(xe){var q=xe.length,de=xe.split(/(?:\r\n?|\n)/g);this._input=xe+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-q),this.offset-=q;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),de.length-1&&(this.yylineno-=de.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:de?(de.length===ie.length?this.yylloc.first_column:0)+ie[ie.length-de.length].length-de[0].length:this.yylloc.first_column-q},this.options.ranges&&(this.yylloc.range=[oe[0],oe[0]+this.yyleng-q]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(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). +Expecting `+nt.join(", ")+", got '"+(this.terminals_[We]||We)+"'":pn="Parse error on line "+(pe+1)+": Unexpected "+(We==be?"end of input":"'"+(this.terminals_[We]||We)+"'"),this.parseError(pn,{text:De.match,token:this.terminals_[We]||We,line:De.yylineno,loc:Rt,expected:nt})}if(Tt[0]instanceof Array&&Tt.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Yt+", token: "+We);switch(Tt[0]){case 1:de.push(We),oe.push(De.yytext),V.push(De.yylloc),de.push(Tt[1]),We=null,ot?(We=ot,ot=null):(ve=De.yyleng,W=De.yytext,pe=De.yylineno,Rt=De.yylloc,Pe>0&&Pe--);break;case 2:if(ft=this.productions_[Tt[1]][1],ut.$=oe[oe.length-ft],ut._$={first_line:V[V.length-(ft||1)].first_line,last_line:V[V.length-1].last_line,first_column:V[V.length-(ft||1)].first_column,last_column:V[V.length-1].last_column},st&&(ut._$.range=[V[V.length-(ft||1)].range[0],V[V.length-1].range[1]]),bt=this.performAction.apply(ut,[W,ve,pe,qe.yy,Tt[1],oe,V].concat(Ve)),typeof bt<"u")return bt;ft&&(de=de.slice(0,-1*ft*2),oe=oe.slice(0,-1*ft),V=V.slice(0,-1*ft)),de.push(this.productions_[Tt[1]][0]),oe.push(ut.$),V.push(ut._$),vt=Te[de[de.length-2]][de[de.length-1]],de.push(vt);break;case 3:return!0}}return!0},"parse")},ze=function(){var Ie={EOF:1,parseError:o(function(q,de){if(this.yy.parser)this.yy.parser.parseError(q,de);else throw new Error(q)},"parseError"),setInput:o(function(xe,q){return this.yy=q||this.yy||{},this._input=xe,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},"setInput"),input:o(function(){var xe=this._input[0];this.yytext+=xe,this.yyleng++,this.offset++,this.match+=xe,this.matched+=xe;var q=xe.match(/(?:\r\n?|\n).*/g);return q?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),xe},"input"),unput:o(function(xe){var q=xe.length,de=xe.split(/(?:\r\n?|\n)/g);this._input=xe+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-q),this.offset-=q;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),de.length-1&&(this.yylineno-=de.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:de?(de.length===ie.length?this.yylloc.first_column:0)+ie[ie.length-de.length].length-de[0].length:this.yylloc.first_column-q},this.options.ranges&&(this.yylloc.range=[oe[0],oe[0]+this.yyleng-q]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(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},"reject"),less:o(function(xe){this.unput(this.match.slice(xe))},"less"),pastInput:o(function(){var xe=this.matched.substr(0,this.matched.length-this.match.length);return(xe.length>20?"...":"")+xe.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var xe=this.match;return xe.length<20&&(xe+=this._input.substr(0,20-xe.length)),(xe.substr(0,20)+(xe.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var xe=this.pastInput(),q=new Array(xe.length+1).join("-");return xe+this.upcomingInput()+` `+q+"^"},"showPosition"),test_match:o(function(xe,q){var de,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=xe[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+xe[0].length},this.yytext+=xe[0],this.match+=xe[0],this.matches=xe,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(xe[0].length),this.matched+=xe[0],de=this.performAction.call(this,this.yy,this,q,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),de)return de;if(this._backtrack){for(var V in oe)this[V]=oe[V];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var xe,q,de,ie;this._more||(this.yytext="",this.match="");for(var oe=this._currentRules(),V=0;Vq[0].length)){if(q=de,ie=V,this.options.backtrack_lexer){if(xe=this.test_match(de,oe[V]),xe!==!1)return xe;if(this._backtrack){q=!1;continue}else return!1}else if(!this.options.flex)break}return q?(xe=this.test_match(q,oe[ie]),xe!==!1?xe:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var q=this.next();return q||this.lex()},"lex"),begin:o(function(q){this.conditionStack.push(q)},"begin"),popState:o(function(){var q=this.conditionStack.length-1;return q>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(q){return q=this.conditionStack.length-1-Math.abs(q||0),q>=0?this.conditionStack[q]:"INITIAL"},"topState"),pushState:o(function(q){this.begin(q)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(q,de,ie,oe){var V=oe;switch(ie){case 0:return 60;case 1:return 61;case 2:return 62;case 3:return 63;case 4:break;case 5:break;case 6:return this.begin("acc_title"),33;break;case 7:return this.popState(),"acc_title_value";break;case 8:return this.begin("acc_descr"),35;break;case 9:return this.popState(),"acc_descr_value";break;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 77;case 22:this.popState();break;case 23:return 78;case 24:this.popState();break;case 25:return"STR";case 26:this.begin("string");break;case 27:return 80;case 28:return 55;case 29:return this.begin("namespace"),42;break;case 30:return this.popState(),8;break;case 31:break;case 32:return this.begin("namespace-body"),39;break;case 33:return this.popState(),41;break;case 34:return"EOF_IN_STRUCT";case 35:return 8;case 36:break;case 37:return"EDGE_STATE";case 38:return this.begin("class"),46;break;case 39:return this.popState(),8;break;case 40:break;case 41:return this.popState(),this.popState(),41;break;case 42:return this.begin("class-body"),39;break;case 43:return this.popState(),41;break;case 44:return"EOF_IN_STRUCT";case 45:return"EDGE_STATE";case 46:return"OPEN_IN_STRUCT";case 47:break;case 48:return"MEMBER";case 49:return 81;case 50:return 73;case 51:return 74;case 52:return 76;case 53:return 52;case 54:return 54;case 55:return 47;case 56:return 48;case 57:return 79;case 58:this.popState();break;case 59:return"GENERICTYPE";case 60:this.begin("generic");break;case 61:this.popState();break;case 62:return"BQUOTE_STR";case 63:this.begin("bqstring");break;case 64:return 75;case 65:return 75;case 66:return 75;case 67:return 75;case 68:return 67;case 69:return 67;case 70:return 69;case 71:return 69;case 72:return 68;case 73:return 66;case 74:return 70;case 75:return 71;case 76:return 72;case 77:return 22;case 78:return 44;case 79:return 99;case 80:return 17;case 81:return"PLUS";case 82:return 85;case 83:return 59;case 84:return 88;case 85:return 88;case 86:return 89;case 87:return"EQUALS";case 88:return"EQUALS";case 89:return 58;case 90:return 12;case 91:return 14;case 92:return"PUNCTUATION";case 93:return 84;case 94:return 101;case 95:return 87;case 96:return 87;case 97:return 9}},"anonymous"),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]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:["])/,/^(?:[^"]*)/,/^(?:["])/,/^(?:style\b)/,/^(?:classDef\b)/,/^(?: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)/,/^(?:\s)/,/^(?:$)/],conditions:{"namespace-body":{rules:[26,33,34,35,36,37,38,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},namespace:{rules:[26,29,30,31,32,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},"class-body":{rules:[26,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},class:{rules:[26,39,40,41,42,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},acc_descr_multiline:{rules:[11,12,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},acc_descr:{rules:[9,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},acc_title:{rules:[7,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},callback_args:{rules:[22,23,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},callback_name:{rules:[19,20,21,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},href:{rules:[26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},struct:{rules:[26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},generic:{rules:[26,49,50,51,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,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},bqstring:{rules:[26,49,50,51,52,53,54,55,56,57,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},string:{rules:[24,25,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,8,10,13,14,15,16,17,18,26,27,28,29,38,49,50,51,52,53,54,55,56,57,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,96,97],inclusive:!0}}};return Ie}();He.lexer=ze;function Le(){this.yy={}}return o(Le,"Parser"),Le.prototype=He,He.Parser=Le,new Le}();FO.parser=FO;PS=FO});var Mfe,Lb,Ife=N(()=>{"use strict";zt();dr();Mfe=["#","+","~","-",""],Lb=class{static{o(this,"ClassMember")}constructor(e,r){this.memberType=r,this.visibility="",this.classifier="",this.text="";let n=Tr(e,me());this.parseMember(n)}getDisplayDetails(){let e=this.visibility+rc(this.id);this.memberType==="method"&&(e+=`(${rc(this.parameters.trim())})`,this.returnType&&(e+=" : "+rc(this.returnType))),e=e.trim();let r=this.parseClassifier();return{displayText:e,cssStyle:r}}parseMember(e){let r="";if(this.memberType==="method"){let a=/([#+~-])?(.+)\((.*)\)([\s$*])?(.*)([$*])?/.exec(e);if(a){let s=a[1]?a[1].trim():"";if(Mfe.includes(s)&&(this.visibility=s),this.id=a[2],this.parameters=a[3]?a[3].trim():"",r=a[4]?a[4].trim():"",this.returnType=a[5]?a[5].trim():"",r===""){let l=this.returnType.substring(this.returnType.length-1);/[$*]/.exec(l)&&(r=l,this.returnType=this.returnType.substring(0,this.returnType.length-1))}}}else{let i=e.length,a=e.substring(0,1),s=e.substring(i-1);Mfe.includes(a)&&(this.visibility=a),/[$*]/.exec(s)&&(r=s),this.id=e.substring(this.visibility===""?0:1,r===""?i:i-1)}this.classifier=r,this.id=this.id.startsWith(" ")?" "+this.id.trim():this.id.trim();let n=`${this.visibility?"\\"+this.visibility:""}${rc(this.id)}${this.memberType==="method"?`(${rc(this.parameters)})${this.returnType?" : "+rc(this.returnType):""}`:""}`;this.text=n.replaceAll("<","<").replaceAll(">",">"),this.text.startsWith("\\<")&&(this.text=this.text.replace("\\<","~"))}parseClassifier(){switch(this.classifier){case"*":return"font-style:italic;";case"$":return"text-decoration:underline;";default:return""}}}});var BS,Ofe,Bp,B1,zO=N(()=>{"use strict";pr();vt();zt();dr();nr();mi();Ife();BS="classId-",Ofe=0,Bp=o(t=>Ze.sanitizeText(t,me()),"sanitizeText"),B1=class{constructor(){this.relations=[];this.classes=new Map;this.styleClasses=new Map;this.notes=[];this.interfaces=[];this.namespaces=new Map;this.namespaceCounter=0;this.functions=[];this.lineType={LINE:0,DOTTED_LINE:1};this.relationType={AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3,LOLLIPOP:4};this.setupToolTips=o(e=>{let r=Ge(".mermaidTooltip");(r._groups||r)[0][0]===null&&(r=Ge("body").append("div").attr("class","mermaidTooltip").style("opacity",0)),Ge(e).select("svg").selectAll("g.node").on("mouseover",a=>{let s=Ge(a.currentTarget);if(s.attr("title")===null)return;let u=this.getBoundingClientRect();r.transition().duration(200).style("opacity",".9"),r.text(s.attr("title")).style("left",window.scrollX+u.left+(u.right-u.left)/2+"px").style("top",window.scrollY+u.top-14+document.body.scrollTop+"px"),r.html(r.html().replace(/<br\/>/g,"
    ")),s.classed("hover",!0)}).on("mouseout",a=>{r.transition().duration(500).style("opacity",0),Ge(a.currentTarget).classed("hover",!1)})},"setupToolTips");this.direction="TB";this.setAccTitle=Lr;this.getAccTitle=Rr;this.setAccDescription=Nr;this.getAccDescription=Mr;this.setDiagramTitle=$r;this.getDiagramTitle=Ir;this.getConfig=o(()=>me().class,"getConfig");this.functions.push(this.setupToolTips.bind(this)),this.clear(),this.addRelation=this.addRelation.bind(this),this.addClassesToNamespace=this.addClassesToNamespace.bind(this),this.addNamespace=this.addNamespace.bind(this),this.setCssClass=this.setCssClass.bind(this),this.addMembers=this.addMembers.bind(this),this.addClass=this.addClass.bind(this),this.setClassLabel=this.setClassLabel.bind(this),this.addAnnotation=this.addAnnotation.bind(this),this.addMember=this.addMember.bind(this),this.cleanupLabel=this.cleanupLabel.bind(this),this.addNote=this.addNote.bind(this),this.defineClass=this.defineClass.bind(this),this.setDirection=this.setDirection.bind(this),this.setLink=this.setLink.bind(this),this.bindFunctions=this.bindFunctions.bind(this),this.clear=this.clear.bind(this),this.setTooltip=this.setTooltip.bind(this),this.setClickEvent=this.setClickEvent.bind(this),this.setCssStyle=this.setCssStyle.bind(this)}static{o(this,"ClassDB")}splitClassNameAndType(e){let r=Ze.sanitizeText(e,me()),n="",i=r;if(r.indexOf("~")>0){let a=r.split("~");i=Bp(a[0]),n=Bp(a[1])}return{className:i,type:n}}setClassLabel(e,r){let n=Ze.sanitizeText(e,me());r&&(r=Bp(r));let{className:i}=this.splitClassNameAndType(n);this.classes.get(i).label=r,this.classes.get(i).text=`${r}${this.classes.get(i).type?`<${this.classes.get(i).type}>`:""}`}addClass(e){let r=Ze.sanitizeText(e,me()),{className:n,type:i}=this.splitClassNameAndType(r);if(this.classes.has(n))return;let a=Ze.sanitizeText(n,me());this.classes.set(a,{id:a,type:i,label:a,text:`${a}${i?`<${i}>`:""}`,shape:"classBox",cssClasses:"default",methods:[],members:[],annotations:[],styles:[],domId:BS+a+"-"+Ofe}),Ofe++}addInterface(e,r){let n={id:`interface${this.interfaces.length}`,label:e,classId:r};this.interfaces.push(n)}lookUpDomId(e){let r=Ze.sanitizeText(e,me());if(this.classes.has(r))return this.classes.get(r).domId;throw new Error("Class not found: "+r)}clear(){this.relations=[],this.classes=new Map,this.notes=[],this.interfaces=[],this.functions=[],this.functions.push(this.setupToolTips.bind(this)),this.namespaces=new Map,this.namespaceCounter=0,this.direction="TB",Ar()}getClass(e){return this.classes.get(e)}getClasses(){return this.classes}getRelations(){return this.relations}getNotes(){return this.notes}addRelation(e){X.debug("Adding relation: "+JSON.stringify(e));let r=[this.relationType.LOLLIPOP,this.relationType.AGGREGATION,this.relationType.COMPOSITION,this.relationType.DEPENDENCY,this.relationType.EXTENSION];e.relation.type1===this.relationType.LOLLIPOP&&!r.includes(e.relation.type2)?(this.addClass(e.id2),this.addInterface(e.id1,e.id2),e.id1=`interface${this.interfaces.length-1}`):e.relation.type2===this.relationType.LOLLIPOP&&!r.includes(e.relation.type1)?(this.addClass(e.id1),this.addInterface(e.id2,e.id1),e.id2=`interface${this.interfaces.length-1}`):(this.addClass(e.id1),this.addClass(e.id2)),e.id1=this.splitClassNameAndType(e.id1).className,e.id2=this.splitClassNameAndType(e.id2).className,e.relationTitle1=Ze.sanitizeText(e.relationTitle1.trim(),me()),e.relationTitle2=Ze.sanitizeText(e.relationTitle2.trim(),me()),this.relations.push(e)}addAnnotation(e,r){let n=this.splitClassNameAndType(e).className;this.classes.get(n).annotations.push(r)}addMember(e,r){this.addClass(e);let n=this.splitClassNameAndType(e).className,i=this.classes.get(n);if(typeof r=="string"){let a=r.trim();a.startsWith("<<")&&a.endsWith(">>")?i.annotations.push(Bp(a.substring(2,a.length-2))):a.indexOf(")")>0?i.methods.push(new Lb(a,"method")):a&&i.members.push(new Lb(a,"attribute"))}}addMembers(e,r){Array.isArray(r)&&(r.reverse(),r.forEach(n=>this.addMember(e,n)))}addNote(e,r){let n={id:`note${this.notes.length}`,class:r,text:e};this.notes.push(n)}cleanupLabel(e){return e.startsWith(":")&&(e=e.substring(1)),Bp(e.trim())}setCssClass(e,r){e.split(",").forEach(n=>{let i=n;/\d/.exec(n[0])&&(i=BS+i);let a=this.classes.get(i);a&&(a.cssClasses+=" "+r)})}defineClass(e,r){for(let n of e){let i=this.styleClasses.get(n);i===void 0&&(i={id:n,styles:[],textStyles:[]},this.styleClasses.set(n,i)),r&&r.forEach(a=>{if(/color/.exec(a)){let s=a.replace("fill","bgFill");i.textStyles.push(s)}i.styles.push(a)}),this.classes.forEach(a=>{a.cssClasses.includes(n)&&a.styles.push(...r.flatMap(s=>s.split(",")))})}}setTooltip(e,r){e.split(",").forEach(n=>{r!==void 0&&(this.classes.get(n).tooltip=Bp(r))})}getTooltip(e,r){return r&&this.namespaces.has(r)?this.namespaces.get(r).classes.get(e).tooltip:this.classes.get(e).tooltip}setLink(e,r,n){let i=me();e.split(",").forEach(a=>{let s=a;/\d/.exec(a[0])&&(s=BS+s);let l=this.classes.get(s);l&&(l.link=Gt.formatUrl(r,i),i.securityLevel==="sandbox"?l.linkTarget="_top":typeof n=="string"?l.linkTarget=Bp(n):l.linkTarget="_blank")}),this.setCssClass(e,"clickable")}setClickEvent(e,r,n){e.split(",").forEach(i=>{this.setClickFunc(i,r,n),this.classes.get(i).haveCallback=!0}),this.setCssClass(e,"clickable")}setClickFunc(e,r,n){let i=Ze.sanitizeText(e,me());if(me().securityLevel!=="loose"||r===void 0)return;let s=i;if(this.classes.has(s)){let l=this.lookUpDomId(s),u=[];if(typeof n=="string"){u=n.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let h=0;h{let h=document.querySelector(`[id="${l}"]`);h!==null&&h.addEventListener("click",()=>{Gt.runFunc(r,...u)},!1)})}}bindFunctions(e){this.functions.forEach(r=>{r(e)})}getDirection(){return this.direction}setDirection(e){this.direction=e}addNamespace(e){this.namespaces.has(e)||(this.namespaces.set(e,{id:e,classes:new Map,children:{},domId:BS+e+"-"+this.namespaceCounter}),this.namespaceCounter++)}getNamespace(e){return this.namespaces.get(e)}getNamespaces(){return this.namespaces}addClassesToNamespace(e,r){if(this.namespaces.has(e))for(let n of r){let{className:i}=this.splitClassNameAndType(n);this.classes.get(i).parent=e,this.namespaces.get(e).classes.set(i,this.classes.get(i))}}setCssStyle(e,r){let n=this.classes.get(e);if(!(!r||!n))for(let i of r)i.includes(",")?n.styles.push(...i.split(",")):n.styles.push(i)}getArrowMarker(e){let r;switch(e){case 0:r="aggregation";break;case 1:r="extension";break;case 2:r="composition";break;case 3:r="dependency";break;case 4:r="lollipop";break;default:r="none"}return r}getData(){let e=[],r=[],n=me();for(let a of this.namespaces.keys()){let s=this.namespaces.get(a);if(s){let l={id:s.id,label:s.id,isGroup:!0,padding:n.class.padding??16,shape:"rect",cssStyles:["fill: none","stroke: black"],look:n.look};e.push(l)}}for(let a of this.classes.keys()){let s=this.classes.get(a);if(s){let l=s;l.parentId=s.parent,l.look=n.look,e.push(l)}}let i=0;for(let a of this.notes){i++;let s={id:a.id,label:a.text,isGroup:!1,shape:"note",padding:n.class.padding??6,cssStyles:["text-align: left","white-space: nowrap",`fill: ${n.themeVariables.noteBkgColor}`,`stroke: ${n.themeVariables.noteBorderColor}`],look:n.look};e.push(s);let l=this.classes.get(a.class)?.id??"";if(l){let u={id:`edgeNote${i}`,start:a.id,end:l,type:"normal",thickness:"normal",classes:"relation",arrowTypeStart:"none",arrowTypeEnd:"none",arrowheadStyle:"",labelStyle:[""],style:["fill: none"],pattern:"dotted",look:n.look};r.push(u)}}for(let a of this.interfaces){let s={id:a.id,label:a.label,isGroup:!1,shape:"rect",cssStyles:["opacity: 0;"],look:n.look};e.push(s)}i=0;for(let a of this.relations){i++;let s={id:Uh(a.id1,a.id2,{prefix:"id",counter:i}),start:a.id1,end:a.id2,type:"normal",label:a.title,labelpos:"c",thickness:"normal",classes:"relation",arrowTypeStart:this.getArrowMarker(a.relation.type1),arrowTypeEnd:this.getArrowMarker(a.relation.type2),startLabelRight:a.relationTitle1==="none"?"":a.relationTitle1,endLabelLeft:a.relationTitle2==="none"?"":a.relationTitle2,arrowheadStyle:"",labelStyle:["display: inline-block"],style:a.style||"",pattern:a.relation.lineType==1?"dashed":"solid",look:n.look};r.push(s)}return{nodes:e,edges:r,other:{},config:n,direction:this.getDirection()}}}});var $Ve,FS,GO=N(()=>{"use strict";Ym();$Ve=o(t=>`g.classGroup text { +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var q=this.next();return q||this.lex()},"lex"),begin:o(function(q){this.conditionStack.push(q)},"begin"),popState:o(function(){var q=this.conditionStack.length-1;return q>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(q){return q=this.conditionStack.length-1-Math.abs(q||0),q>=0?this.conditionStack[q]:"INITIAL"},"topState"),pushState:o(function(q){this.begin(q)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(q,de,ie,oe){var V=oe;switch(ie){case 0:return 60;case 1:return 61;case 2:return 62;case 3:return 63;case 4:break;case 5:break;case 6:return this.begin("acc_title"),33;break;case 7:return this.popState(),"acc_title_value";break;case 8:return this.begin("acc_descr"),35;break;case 9:return this.popState(),"acc_descr_value";break;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 77;case 22:this.popState();break;case 23:return 78;case 24:this.popState();break;case 25:return"STR";case 26:this.begin("string");break;case 27:return 80;case 28:return 55;case 29:return this.begin("namespace"),42;break;case 30:return this.popState(),8;break;case 31:break;case 32:return this.begin("namespace-body"),39;break;case 33:return this.popState(),41;break;case 34:return"EOF_IN_STRUCT";case 35:return 8;case 36:break;case 37:return"EDGE_STATE";case 38:return this.begin("class"),46;break;case 39:return this.popState(),8;break;case 40:break;case 41:return this.popState(),this.popState(),41;break;case 42:return this.begin("class-body"),39;break;case 43:return this.popState(),41;break;case 44:return"EOF_IN_STRUCT";case 45:return"EDGE_STATE";case 46:return"OPEN_IN_STRUCT";case 47:break;case 48:return"MEMBER";case 49:return 81;case 50:return 73;case 51:return 74;case 52:return 76;case 53:return 52;case 54:return 54;case 55:return 47;case 56:return 48;case 57:return 79;case 58:this.popState();break;case 59:return"GENERICTYPE";case 60:this.begin("generic");break;case 61:this.popState();break;case 62:return"BQUOTE_STR";case 63:this.begin("bqstring");break;case 64:return 75;case 65:return 75;case 66:return 75;case 67:return 75;case 68:return 67;case 69:return 67;case 70:return 69;case 71:return 69;case 72:return 68;case 73:return 66;case 74:return 70;case 75:return 71;case 76:return 72;case 77:return 22;case 78:return 44;case 79:return 99;case 80:return 17;case 81:return"PLUS";case 82:return 85;case 83:return 59;case 84:return 88;case 85:return 88;case 86:return 89;case 87:return"EQUALS";case 88:return"EQUALS";case 89:return 58;case 90:return 12;case 91:return 14;case 92:return"PUNCTUATION";case 93:return 84;case 94:return 101;case 95:return 87;case 96:return 87;case 97:return 9}},"anonymous"),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]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:["])/,/^(?:[^"]*)/,/^(?:["])/,/^(?:style\b)/,/^(?:classDef\b)/,/^(?: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)/,/^(?:\s)/,/^(?:$)/],conditions:{"namespace-body":{rules:[26,33,34,35,36,37,38,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},namespace:{rules:[26,29,30,31,32,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},"class-body":{rules:[26,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},class:{rules:[26,39,40,41,42,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},acc_descr_multiline:{rules:[11,12,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},acc_descr:{rules:[9,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},acc_title:{rules:[7,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},callback_args:{rules:[22,23,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},callback_name:{rules:[19,20,21,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},href:{rules:[26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},struct:{rules:[26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},generic:{rules:[26,49,50,51,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,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},bqstring:{rules:[26,49,50,51,52,53,54,55,56,57,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},string:{rules:[24,25,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,8,10,13,14,15,16,17,18,26,27,28,29,38,49,50,51,52,53,54,55,56,57,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,96,97],inclusive:!0}}};return Ie}();He.lexer=ze;function Le(){this.yy={}}return o(Le,"Parser"),Le.prototype=He,He.Parser=Le,new Le}();bP.parser=bP;jS=bP});var jde,Ib,Kde=N(()=>{"use strict";Gt();pr();jde=["#","+","~","-",""],Ib=class{static{o(this,"ClassMember")}constructor(e,r){this.memberType=r,this.visibility="",this.classifier="",this.text="";let n=wr(e,me());this.parseMember(n)}getDisplayDetails(){let e=this.visibility+ic(this.id);this.memberType==="method"&&(e+=`(${ic(this.parameters.trim())})`,this.returnType&&(e+=" : "+ic(this.returnType))),e=e.trim();let r=this.parseClassifier();return{displayText:e,cssStyle:r}}parseMember(e){let r="";if(this.memberType==="method"){let a=/([#+~-])?(.+)\((.*)\)([\s$*])?(.*)([$*])?/.exec(e);if(a){let s=a[1]?a[1].trim():"";if(jde.includes(s)&&(this.visibility=s),this.id=a[2],this.parameters=a[3]?a[3].trim():"",r=a[4]?a[4].trim():"",this.returnType=a[5]?a[5].trim():"",r===""){let l=this.returnType.substring(this.returnType.length-1);/[$*]/.exec(l)&&(r=l,this.returnType=this.returnType.substring(0,this.returnType.length-1))}}}else{let i=e.length,a=e.substring(0,1),s=e.substring(i-1);jde.includes(a)&&(this.visibility=a),/[$*]/.exec(s)&&(r=s),this.id=e.substring(this.visibility===""?0:1,r===""?i:i-1)}this.classifier=r,this.id=this.id.startsWith(" ")?" "+this.id.trim():this.id.trim();let n=`${this.visibility?"\\"+this.visibility:""}${ic(this.id)}${this.memberType==="method"?`(${ic(this.parameters)})${this.returnType?" : "+ic(this.returnType):""}`:""}`;this.text=n.replaceAll("<","<").replaceAll(">",">"),this.text.startsWith("\\<")&&(this.text=this.text.replace("\\<","~"))}parseClassifier(){switch(this.classifier){case"*":return"font-style:italic;";case"$":return"text-decoration:underline;";default:return""}}}});var KS,Qde,zp,P1,wP=N(()=>{"use strict";fr();yt();Gt();pr();er();ci();Kde();KS="classId-",Qde=0,zp=o(t=>Ze.sanitizeText(t,me()),"sanitizeText"),P1=class{constructor(){this.relations=[];this.classes=new Map;this.styleClasses=new Map;this.notes=[];this.interfaces=[];this.namespaces=new Map;this.namespaceCounter=0;this.functions=[];this.lineType={LINE:0,DOTTED_LINE:1};this.relationType={AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3,LOLLIPOP:4};this.setupToolTips=o(e=>{let r=Ge(".mermaidTooltip");(r._groups||r)[0][0]===null&&(r=Ge("body").append("div").attr("class","mermaidTooltip").style("opacity",0)),Ge(e).select("svg").selectAll("g.node").on("mouseover",a=>{let s=Ge(a.currentTarget);if(s.attr("title")===null)return;let u=this.getBoundingClientRect();r.transition().duration(200).style("opacity",".9"),r.text(s.attr("title")).style("left",window.scrollX+u.left+(u.right-u.left)/2+"px").style("top",window.scrollY+u.top-14+document.body.scrollTop+"px"),r.html(r.html().replace(/<br\/>/g,"
    ")),s.classed("hover",!0)}).on("mouseout",a=>{r.transition().duration(500).style("opacity",0),Ge(a.currentTarget).classed("hover",!1)})},"setupToolTips");this.direction="TB";this.setAccTitle=Ar;this.getAccTitle=Dr;this.setAccDescription=Lr;this.getAccDescription=Rr;this.setDiagramTitle=Or;this.getDiagramTitle=Nr;this.getConfig=o(()=>me().class,"getConfig");this.functions.push(this.setupToolTips.bind(this)),this.clear(),this.addRelation=this.addRelation.bind(this),this.addClassesToNamespace=this.addClassesToNamespace.bind(this),this.addNamespace=this.addNamespace.bind(this),this.setCssClass=this.setCssClass.bind(this),this.addMembers=this.addMembers.bind(this),this.addClass=this.addClass.bind(this),this.setClassLabel=this.setClassLabel.bind(this),this.addAnnotation=this.addAnnotation.bind(this),this.addMember=this.addMember.bind(this),this.cleanupLabel=this.cleanupLabel.bind(this),this.addNote=this.addNote.bind(this),this.defineClass=this.defineClass.bind(this),this.setDirection=this.setDirection.bind(this),this.setLink=this.setLink.bind(this),this.bindFunctions=this.bindFunctions.bind(this),this.clear=this.clear.bind(this),this.setTooltip=this.setTooltip.bind(this),this.setClickEvent=this.setClickEvent.bind(this),this.setCssStyle=this.setCssStyle.bind(this)}static{o(this,"ClassDB")}splitClassNameAndType(e){let r=Ze.sanitizeText(e,me()),n="",i=r;if(r.indexOf("~")>0){let a=r.split("~");i=zp(a[0]),n=zp(a[1])}return{className:i,type:n}}setClassLabel(e,r){let n=Ze.sanitizeText(e,me());r&&(r=zp(r));let{className:i}=this.splitClassNameAndType(n);this.classes.get(i).label=r,this.classes.get(i).text=`${r}${this.classes.get(i).type?`<${this.classes.get(i).type}>`:""}`}addClass(e){let r=Ze.sanitizeText(e,me()),{className:n,type:i}=this.splitClassNameAndType(r);if(this.classes.has(n))return;let a=Ze.sanitizeText(n,me());this.classes.set(a,{id:a,type:i,label:a,text:`${a}${i?`<${i}>`:""}`,shape:"classBox",cssClasses:"default",methods:[],members:[],annotations:[],styles:[],domId:KS+a+"-"+Qde}),Qde++}addInterface(e,r){let n={id:`interface${this.interfaces.length}`,label:e,classId:r};this.interfaces.push(n)}lookUpDomId(e){let r=Ze.sanitizeText(e,me());if(this.classes.has(r))return this.classes.get(r).domId;throw new Error("Class not found: "+r)}clear(){this.relations=[],this.classes=new Map,this.notes=[],this.interfaces=[],this.functions=[],this.functions.push(this.setupToolTips.bind(this)),this.namespaces=new Map,this.namespaceCounter=0,this.direction="TB",kr()}getClass(e){return this.classes.get(e)}getClasses(){return this.classes}getRelations(){return this.relations}getNotes(){return this.notes}addRelation(e){X.debug("Adding relation: "+JSON.stringify(e));let r=[this.relationType.LOLLIPOP,this.relationType.AGGREGATION,this.relationType.COMPOSITION,this.relationType.DEPENDENCY,this.relationType.EXTENSION];e.relation.type1===this.relationType.LOLLIPOP&&!r.includes(e.relation.type2)?(this.addClass(e.id2),this.addInterface(e.id1,e.id2),e.id1=`interface${this.interfaces.length-1}`):e.relation.type2===this.relationType.LOLLIPOP&&!r.includes(e.relation.type1)?(this.addClass(e.id1),this.addInterface(e.id2,e.id1),e.id2=`interface${this.interfaces.length-1}`):(this.addClass(e.id1),this.addClass(e.id2)),e.id1=this.splitClassNameAndType(e.id1).className,e.id2=this.splitClassNameAndType(e.id2).className,e.relationTitle1=Ze.sanitizeText(e.relationTitle1.trim(),me()),e.relationTitle2=Ze.sanitizeText(e.relationTitle2.trim(),me()),this.relations.push(e)}addAnnotation(e,r){let n=this.splitClassNameAndType(e).className;this.classes.get(n).annotations.push(r)}addMember(e,r){this.addClass(e);let n=this.splitClassNameAndType(e).className,i=this.classes.get(n);if(typeof r=="string"){let a=r.trim();a.startsWith("<<")&&a.endsWith(">>")?i.annotations.push(zp(a.substring(2,a.length-2))):a.indexOf(")")>0?i.methods.push(new Ib(a,"method")):a&&i.members.push(new Ib(a,"attribute"))}}addMembers(e,r){Array.isArray(r)&&(r.reverse(),r.forEach(n=>this.addMember(e,n)))}addNote(e,r){let n={id:`note${this.notes.length}`,class:r,text:e};this.notes.push(n)}cleanupLabel(e){return e.startsWith(":")&&(e=e.substring(1)),zp(e.trim())}setCssClass(e,r){e.split(",").forEach(n=>{let i=n;/\d/.exec(n[0])&&(i=KS+i);let a=this.classes.get(i);a&&(a.cssClasses+=" "+r)})}defineClass(e,r){for(let n of e){let i=this.styleClasses.get(n);i===void 0&&(i={id:n,styles:[],textStyles:[]},this.styleClasses.set(n,i)),r&&r.forEach(a=>{if(/color/.exec(a)){let s=a.replace("fill","bgFill");i.textStyles.push(s)}i.styles.push(a)}),this.classes.forEach(a=>{a.cssClasses.includes(n)&&a.styles.push(...r.flatMap(s=>s.split(",")))})}}setTooltip(e,r){e.split(",").forEach(n=>{r!==void 0&&(this.classes.get(n).tooltip=zp(r))})}getTooltip(e,r){return r&&this.namespaces.has(r)?this.namespaces.get(r).classes.get(e).tooltip:this.classes.get(e).tooltip}setLink(e,r,n){let i=me();e.split(",").forEach(a=>{let s=a;/\d/.exec(a[0])&&(s=KS+s);let l=this.classes.get(s);l&&(l.link=Vt.formatUrl(r,i),i.securityLevel==="sandbox"?l.linkTarget="_top":typeof n=="string"?l.linkTarget=zp(n):l.linkTarget="_blank")}),this.setCssClass(e,"clickable")}setClickEvent(e,r,n){e.split(",").forEach(i=>{this.setClickFunc(i,r,n),this.classes.get(i).haveCallback=!0}),this.setCssClass(e,"clickable")}setClickFunc(e,r,n){let i=Ze.sanitizeText(e,me());if(me().securityLevel!=="loose"||r===void 0)return;let s=i;if(this.classes.has(s)){let l=this.lookUpDomId(s),u=[];if(typeof n=="string"){u=n.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let h=0;h{let h=document.querySelector(`[id="${l}"]`);h!==null&&h.addEventListener("click",()=>{Vt.runFunc(r,...u)},!1)})}}bindFunctions(e){this.functions.forEach(r=>{r(e)})}getDirection(){return this.direction}setDirection(e){this.direction=e}addNamespace(e){this.namespaces.has(e)||(this.namespaces.set(e,{id:e,classes:new Map,children:{},domId:KS+e+"-"+this.namespaceCounter}),this.namespaceCounter++)}getNamespace(e){return this.namespaces.get(e)}getNamespaces(){return this.namespaces}addClassesToNamespace(e,r){if(this.namespaces.has(e))for(let n of r){let{className:i}=this.splitClassNameAndType(n);this.classes.get(i).parent=e,this.namespaces.get(e).classes.set(i,this.classes.get(i))}}setCssStyle(e,r){let n=this.classes.get(e);if(!(!r||!n))for(let i of r)i.includes(",")?n.styles.push(...i.split(",")):n.styles.push(i)}getArrowMarker(e){let r;switch(e){case 0:r="aggregation";break;case 1:r="extension";break;case 2:r="composition";break;case 3:r="dependency";break;case 4:r="lollipop";break;default:r="none"}return r}getData(){let e=[],r=[],n=me();for(let a of this.namespaces.keys()){let s=this.namespaces.get(a);if(s){let l={id:s.id,label:s.id,isGroup:!0,padding:n.class.padding??16,shape:"rect",cssStyles:["fill: none","stroke: black"],look:n.look};e.push(l)}}for(let a of this.classes.keys()){let s=this.classes.get(a);if(s){let l=s;l.parentId=s.parent,l.look=n.look,e.push(l)}}let i=0;for(let a of this.notes){i++;let s={id:a.id,label:a.text,isGroup:!1,shape:"note",padding:n.class.padding??6,cssStyles:["text-align: left","white-space: nowrap",`fill: ${n.themeVariables.noteBkgColor}`,`stroke: ${n.themeVariables.noteBorderColor}`],look:n.look};e.push(s);let l=this.classes.get(a.class)?.id??"";if(l){let u={id:`edgeNote${i}`,start:a.id,end:l,type:"normal",thickness:"normal",classes:"relation",arrowTypeStart:"none",arrowTypeEnd:"none",arrowheadStyle:"",labelStyle:[""],style:["fill: none"],pattern:"dotted",look:n.look};r.push(u)}}for(let a of this.interfaces){let s={id:a.id,label:a.label,isGroup:!1,shape:"rect",cssStyles:["opacity: 0;"],look:n.look};e.push(s)}i=0;for(let a of this.relations){i++;let s={id:Wh(a.id1,a.id2,{prefix:"id",counter:i}),start:a.id1,end:a.id2,type:"normal",label:a.title,labelpos:"c",thickness:"normal",classes:"relation",arrowTypeStart:this.getArrowMarker(a.relation.type1),arrowTypeEnd:this.getArrowMarker(a.relation.type2),startLabelRight:a.relationTitle1==="none"?"":a.relationTitle1,endLabelLeft:a.relationTitle2==="none"?"":a.relationTitle2,arrowheadStyle:"",labelStyle:["display: inline-block"],style:a.style||"",pattern:a.relation.lineType==1?"dashed":"solid",look:n.look};r.push(s)}return{nodes:e,edges:r,other:{},config:n,direction:this.getDirection()}}}});var kHe,QS,kP=N(()=>{"use strict";Xm();kHe=o(t=>`g.classGroup text { fill: ${t.nodeBorder||t.classText}; stroke: none; font-family: ${t.fontFamily}; @@ -1547,13 +1547,13 @@ g.classGroup line { font-size: 18px; fill: ${t.textColor}; } - ${Lc()} -`,"getStyles"),FS=$Ve});var zVe,GVe,VVe,$S,VO=N(()=>{"use strict";zt();vt();km();ep();qm();nr();zVe=o((t,e="TB")=>{if(!t.doc)return e;let r=e;for(let n of t.doc)n.stmt==="dir"&&(r=n.value);return r},"getDir"),GVe=o(function(t,e){return e.db.getClasses()},"getClasses"),VVe=o(async function(t,e,r,n){X.info("REF0:"),X.info("Drawing class diagram (v3)",e);let{securityLevel:i,state:a,layout:s}=me(),l=n.db.getData(),u=xc(e,i);l.type=n.type,l.layoutAlgorithm=lf(s),l.nodeSpacing=a?.nodeSpacing||50,l.rankSpacing=a?.rankSpacing||50,l.markers=["aggregation","extension","composition","dependency","lollipop"],l.diagramId=e,await _c(l,u);let h=8;Gt.insertTitle(u,"classDiagramTitleText",a?.titleTopMargin??25,n.db.getDiagramTitle()),Dc(u,h,"classDiagram",a?.useMaxWidth??!0)},"draw"),$S={getClasses:GVe,draw:VVe,getDir:zVe}});var Pfe={};hr(Pfe,{diagram:()=>UVe});var UVe,Bfe=N(()=>{"use strict";$O();zO();GO();VO();UVe={parser:PS,get db(){return new B1},renderer:$S,styles:FS,init:o(t=>{t.class||(t.class={}),t.class.arrowMarkerAbsolute=t.arrowMarkerAbsolute},"init")}});var zfe={};hr(zfe,{diagram:()=>YVe});var YVe,Gfe=N(()=>{"use strict";$O();zO();GO();VO();YVe={parser:PS,get db(){return new B1},renderer:$S,styles:FS,init:o(t=>{t.class||(t.class={}),t.class.arrowMarkerAbsolute=t.arrowMarkerAbsolute},"init")}});var UO,zS,HO=N(()=>{"use strict";UO=function(){var t=o(function(F,z,$,U){for($=$||{},U=F.length;U--;$[F[U]]=z);return $},"o"),e=[1,2],r=[1,3],n=[1,4],i=[2,4],a=[1,9],s=[1,11],l=[1,16],u=[1,17],h=[1,18],f=[1,19],d=[1,33],p=[1,20],m=[1,21],g=[1,22],y=[1,23],v=[1,24],x=[1,26],b=[1,27],w=[1,28],C=[1,29],T=[1,30],E=[1,31],A=[1,32],S=[1,35],_=[1,36],I=[1,37],L=[1,38],k=[1,34],D=[1,4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,41,45,48,51,52,53,54,57],R=[1,4,5,14,15,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,39,40,41,45,48,51,52,53,54,57],O=[4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,41,45,48,51,52,53,54,57],M={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,SD:6,document:7,line:8,statement:9,classDefStatement:10,styleStatement: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,CLICK:38,STRING:39,HREF:40,classDef:41,CLASSDEF_ID:42,CLASSDEF_STYLEOPTS:43,DEFAULT:44,style:45,STYLE_IDS:46,STYLEDEF_STYLEOPTS:47,class:48,CLASSENTITY_IDS:49,STYLECLASS:50,direction_tb:51,direction_bt:52,direction_rl:53,direction_lr:54,eol:55,";":56,EDGE_STATE:57,STYLE_SEPARATOR:58,left_of:59,right_of:60,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",6:"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:"CLICK",39:"STRING",40:"HREF",41:"classDef",42:"CLASSDEF_ID",43:"CLASSDEF_STYLEOPTS",44:"DEFAULT",45:"style",46:"STYLE_IDS",47:"STYLEDEF_STYLEOPTS",48:"class",49:"CLASSENTITY_IDS",50:"STYLECLASS",51:"direction_tb",52:"direction_bt",53:"direction_rl",54:"direction_lr",56:";",57:"EDGE_STATE",58:"STYLE_SEPARATOR",59:"left_of",60:"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,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],[9,5],[9,5],[10,3],[10,3],[11,3],[12,3],[32,1],[32,1],[32,1],[32,1],[55,1],[55,1],[13,1],[13,1],[13,3],[13,3],[30,1],[30,1]],performAction:o(function(z,$,U,Q,te,Y,he){var Z=Y.length-1;switch(te){case 3:return Q.setRootDoc(Y[Z]),Y[Z];break;case 4:this.$=[];break;case 5:Y[Z]!="nl"&&(Y[Z-1].push(Y[Z]),this.$=Y[Z-1]);break;case 6:case 7:this.$=Y[Z];break;case 8:this.$="nl";break;case 12:this.$=Y[Z];break;case 13:let ne=Y[Z-1];ne.description=Q.trimColon(Y[Z]),this.$=ne;break;case 14:this.$={stmt:"relation",state1:Y[Z-2],state2:Y[Z]};break;case 15:let ee=Q.trimColon(Y[Z]);this.$={stmt:"relation",state1:Y[Z-3],state2:Y[Z-1],description:ee};break;case 19:this.$={stmt:"state",id:Y[Z-3],type:"default",description:"",doc:Y[Z-1]};break;case 20:var ue=Y[Z],K=Y[Z-2].trim();if(Y[Z].match(":")){var j=Y[Z].split(":");ue=j[0],K=[K,j[1]]}this.$={stmt:"state",id:ue,type:"default",description:K};break;case 21:this.$={stmt:"state",id:Y[Z-3],type:"default",description:Y[Z-5],doc:Y[Z-1]};break;case 22:this.$={stmt:"state",id:Y[Z],type:"fork"};break;case 23:this.$={stmt:"state",id:Y[Z],type:"join"};break;case 24:this.$={stmt:"state",id:Y[Z],type:"choice"};break;case 25:this.$={stmt:"state",id:Q.getDividerId(),type:"divider"};break;case 26:this.$={stmt:"state",id:Y[Z-1].trim(),note:{position:Y[Z-2].trim(),text:Y[Z].trim()}};break;case 29:this.$=Y[Z].trim(),Q.setAccTitle(this.$);break;case 30:case 31:this.$=Y[Z].trim(),Q.setAccDescription(this.$);break;case 32:this.$={stmt:"click",id:Y[Z-3],url:Y[Z-2],tooltip:Y[Z-1]};break;case 33:this.$={stmt:"click",id:Y[Z-3],url:Y[Z-1],tooltip:""};break;case 34:case 35:this.$={stmt:"classDef",id:Y[Z-1].trim(),classes:Y[Z].trim()};break;case 36:this.$={stmt:"style",id:Y[Z-1].trim(),styleClass:Y[Z].trim()};break;case 37:this.$={stmt:"applyClass",id:Y[Z-1].trim(),styleClass:Y[Z].trim()};break;case 38:Q.setDirection("TB"),this.$={stmt:"dir",value:"TB"};break;case 39:Q.setDirection("BT"),this.$={stmt:"dir",value:"BT"};break;case 40:Q.setDirection("RL"),this.$={stmt:"dir",value:"RL"};break;case 41:Q.setDirection("LR"),this.$={stmt:"dir",value:"LR"};break;case 44:case 45:this.$={stmt:"state",id:Y[Z].trim(),type:"default",description:""};break;case 46:this.$={stmt:"state",id:Y[Z-2].trim(),classes:[Y[Z].trim()],type:"default",description:""};break;case 47:this.$={stmt:"state",id:Y[Z-2].trim(),classes:[Y[Z].trim()],type:"default",description:""};break}},"anonymous"),table:[{3:1,4:e,5:r,6:n},{1:[3]},{3:5,4:e,5:r,6:n},{3:6,4:e,5:r,6:n},t([1,4,5,16,17,19,22,24,25,26,27,28,29,33,35,37,38,41,45,48,51,52,53,54,57],i,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:a,5:s,8:8,9:10,10:12,11:13,12:14,13:15,16:l,17:u,19:h,22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:w,38:C,41:T,45:E,48:A,51:S,52:_,53:I,54:L,57:k},t(D,[2,5]),{9:39,10:12,11:13,12:14,13:15,16:l,17:u,19:h,22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:w,38:C,41:T,45:E,48:A,51:S,52:_,53:I,54:L,57:k},t(D,[2,7]),t(D,[2,8]),t(D,[2,9]),t(D,[2,10]),t(D,[2,11]),t(D,[2,12],{14:[1,40],15:[1,41]}),t(D,[2,16]),{18:[1,42]},t(D,[2,18],{20:[1,43]}),{23:[1,44]},t(D,[2,22]),t(D,[2,23]),t(D,[2,24]),t(D,[2,25]),{30:45,31:[1,46],59:[1,47],60:[1,48]},t(D,[2,28]),{34:[1,49]},{36:[1,50]},t(D,[2,31]),{13:51,24:d,57:k},{42:[1,52],44:[1,53]},{46:[1,54]},{49:[1,55]},t(R,[2,44],{58:[1,56]}),t(R,[2,45],{58:[1,57]}),t(D,[2,38]),t(D,[2,39]),t(D,[2,40]),t(D,[2,41]),t(D,[2,6]),t(D,[2,13]),{13:58,24:d,57:k},t(D,[2,17]),t(O,i,{7:59}),{24:[1,60]},{24:[1,61]},{23:[1,62]},{24:[2,48]},{24:[2,49]},t(D,[2,29]),t(D,[2,30]),{39:[1,63],40:[1,64]},{43:[1,65]},{43:[1,66]},{47:[1,67]},{50:[1,68]},{24:[1,69]},{24:[1,70]},t(D,[2,14],{14:[1,71]}),{4:a,5:s,8:8,9:10,10:12,11:13,12:14,13:15,16:l,17:u,19:h,21:[1,72],22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:w,38:C,41:T,45:E,48:A,51:S,52:_,53:I,54:L,57:k},t(D,[2,20],{20:[1,73]}),{31:[1,74]},{24:[1,75]},{39:[1,76]},{39:[1,77]},t(D,[2,34]),t(D,[2,35]),t(D,[2,36]),t(D,[2,37]),t(R,[2,46]),t(R,[2,47]),t(D,[2,15]),t(D,[2,19]),t(O,i,{7:78}),t(D,[2,26]),t(D,[2,27]),{5:[1,79]},{5:[1,80]},{4:a,5:s,8:8,9:10,10:12,11:13,12:14,13:15,16:l,17:u,19:h,21:[1,81],22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:w,38:C,41:T,45:E,48:A,51:S,52:_,53:I,54:L,57:k},t(D,[2,32]),t(D,[2,33]),t(D,[2,21])],defaultActions:{5:[2,1],6:[2,2],47:[2,48],48:[2,49]},parseError:o(function(z,$){if($.recoverable)this.trace(z);else{var U=new Error(z);throw U.hash=$,U}},"parseError"),parse:o(function(z){var $=this,U=[0],Q=[],te=[null],Y=[],he=this.table,Z="",ue=0,K=0,j=0,ne=2,ee=1,ce=Y.slice.call(arguments,1),le=Object.create(this.lexer),J={yy:{}};for(var Se in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Se)&&(J.yy[Se]=this.yy[Se]);le.setInput(z,J.yy),J.yy.lexer=le,J.yy.parser=this,typeof le.yylloc>"u"&&(le.yylloc={});var se=le.yylloc;Y.push(se);var ae=le.options&&le.options.ranges;typeof J.yy.parseError=="function"?this.parseError=J.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Oe(W){U.length=U.length-2*W,te.length=te.length-W,Y.length=Y.length-W}o(Oe,"popStack");function ye(){var W;return W=Q.pop()||le.lex()||ee,typeof W!="number"&&(W instanceof Array&&(Q=W,W=Q.pop()),W=$.symbols_[W]||W),W}o(ye,"lex");for(var Be,He,ze,Le,Ie,xe,q={},de,ie,oe,V;;){if(ze=U[U.length-1],this.defaultActions[ze]?Le=this.defaultActions[ze]:((Be===null||typeof Be>"u")&&(Be=ye()),Le=he[ze]&&he[ze][Be]),typeof Le>"u"||!Le.length||!Le[0]){var we="";V=[];for(de in he[ze])this.terminals_[de]&&de>ne&&V.push("'"+this.terminals_[de]+"'");le.showPosition?we="Parse error on line "+(ue+1)+`: + ${Nc()} +`,"getStyles"),QS=kHe});var EHe,SHe,CHe,ZS,EP=N(()=>{"use strict";Gt();yt();Sm();rp();np();er();EHe=o((t,e="TB")=>{if(!t.doc)return e;let r=e;for(let n of t.doc)n.stmt==="dir"&&(r=n.value);return r},"getDir"),SHe=o(function(t,e){return e.db.getClasses()},"getClasses"),CHe=o(async function(t,e,r,n){X.info("REF0:"),X.info("Drawing class diagram (v3)",e);let{securityLevel:i,state:a,layout:s}=me(),l=n.db.getData(),u=wc(e,i);l.type=n.type,l.layoutAlgorithm=uf(s),l.nodeSpacing=a?.nodeSpacing||50,l.rankSpacing=a?.rankSpacing||50,l.markers=["aggregation","extension","composition","dependency","lollipop"],l.diagramId=e,await Rc(l,u);let h=8;Vt.insertTitle(u,"classDiagramTitleText",a?.titleTopMargin??25,n.db.getDiagramTitle()),Yo(u,h,"classDiagram",a?.useMaxWidth??!0)},"draw"),ZS={getClasses:SHe,draw:CHe,getDir:EHe}});var Zde={};ur(Zde,{diagram:()=>AHe});var AHe,Jde=N(()=>{"use strict";TP();wP();kP();EP();AHe={parser:jS,get db(){return new P1},renderer:ZS,styles:QS,init:o(t=>{t.class||(t.class={}),t.class.arrowMarkerAbsolute=t.arrowMarkerAbsolute},"init")}});var rpe={};ur(rpe,{diagram:()=>RHe});var RHe,npe=N(()=>{"use strict";TP();wP();kP();EP();RHe={parser:jS,get db(){return new P1},renderer:ZS,styles:QS,init:o(t=>{t.class||(t.class={}),t.class.arrowMarkerAbsolute=t.arrowMarkerAbsolute},"init")}});var SP,JS,CP=N(()=>{"use strict";SP=function(){var t=o(function(F,z,$,U){for($=$||{},U=F.length;U--;$[F[U]]=z);return $},"o"),e=[1,2],r=[1,3],n=[1,4],i=[2,4],a=[1,9],s=[1,11],l=[1,16],u=[1,17],h=[1,18],f=[1,19],d=[1,33],p=[1,20],m=[1,21],g=[1,22],y=[1,23],v=[1,24],x=[1,26],b=[1,27],T=[1,28],S=[1,29],w=[1,30],E=[1,31],_=[1,32],C=[1,35],D=[1,36],O=[1,37],R=[1,38],k=[1,34],L=[1,4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,41,45,48,51,52,53,54,57],A=[1,4,5,14,15,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,39,40,41,45,48,51,52,53,54,57],I=[4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,41,45,48,51,52,53,54,57],M={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,SD:6,document:7,line:8,statement:9,classDefStatement:10,styleStatement: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,CLICK:38,STRING:39,HREF:40,classDef:41,CLASSDEF_ID:42,CLASSDEF_STYLEOPTS:43,DEFAULT:44,style:45,STYLE_IDS:46,STYLEDEF_STYLEOPTS:47,class:48,CLASSENTITY_IDS:49,STYLECLASS:50,direction_tb:51,direction_bt:52,direction_rl:53,direction_lr:54,eol:55,";":56,EDGE_STATE:57,STYLE_SEPARATOR:58,left_of:59,right_of:60,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",6:"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:"CLICK",39:"STRING",40:"HREF",41:"classDef",42:"CLASSDEF_ID",43:"CLASSDEF_STYLEOPTS",44:"DEFAULT",45:"style",46:"STYLE_IDS",47:"STYLEDEF_STYLEOPTS",48:"class",49:"CLASSENTITY_IDS",50:"STYLECLASS",51:"direction_tb",52:"direction_bt",53:"direction_rl",54:"direction_lr",56:";",57:"EDGE_STATE",58:"STYLE_SEPARATOR",59:"left_of",60:"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,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],[9,5],[9,5],[10,3],[10,3],[11,3],[12,3],[32,1],[32,1],[32,1],[32,1],[55,1],[55,1],[13,1],[13,1],[13,3],[13,3],[30,1],[30,1]],performAction:o(function(z,$,U,K,ee,Y,ce){var Z=Y.length-1;switch(ee){case 3:return K.setRootDoc(Y[Z]),Y[Z];break;case 4:this.$=[];break;case 5:Y[Z]!="nl"&&(Y[Z-1].push(Y[Z]),this.$=Y[Z-1]);break;case 6:case 7:this.$=Y[Z];break;case 8:this.$="nl";break;case 12:this.$=Y[Z];break;case 13:let ne=Y[Z-1];ne.description=K.trimColon(Y[Z]),this.$=ne;break;case 14:this.$={stmt:"relation",state1:Y[Z-2],state2:Y[Z]};break;case 15:let te=K.trimColon(Y[Z]);this.$={stmt:"relation",state1:Y[Z-3],state2:Y[Z-1],description:te};break;case 19:this.$={stmt:"state",id:Y[Z-3],type:"default",description:"",doc:Y[Z-1]};break;case 20:var ue=Y[Z],Q=Y[Z-2].trim();if(Y[Z].match(":")){var j=Y[Z].split(":");ue=j[0],Q=[Q,j[1]]}this.$={stmt:"state",id:ue,type:"default",description:Q};break;case 21:this.$={stmt:"state",id:Y[Z-3],type:"default",description:Y[Z-5],doc:Y[Z-1]};break;case 22:this.$={stmt:"state",id:Y[Z],type:"fork"};break;case 23:this.$={stmt:"state",id:Y[Z],type:"join"};break;case 24:this.$={stmt:"state",id:Y[Z],type:"choice"};break;case 25:this.$={stmt:"state",id:K.getDividerId(),type:"divider"};break;case 26:this.$={stmt:"state",id:Y[Z-1].trim(),note:{position:Y[Z-2].trim(),text:Y[Z].trim()}};break;case 29:this.$=Y[Z].trim(),K.setAccTitle(this.$);break;case 30:case 31:this.$=Y[Z].trim(),K.setAccDescription(this.$);break;case 32:this.$={stmt:"click",id:Y[Z-3],url:Y[Z-2],tooltip:Y[Z-1]};break;case 33:this.$={stmt:"click",id:Y[Z-3],url:Y[Z-1],tooltip:""};break;case 34:case 35:this.$={stmt:"classDef",id:Y[Z-1].trim(),classes:Y[Z].trim()};break;case 36:this.$={stmt:"style",id:Y[Z-1].trim(),styleClass:Y[Z].trim()};break;case 37:this.$={stmt:"applyClass",id:Y[Z-1].trim(),styleClass:Y[Z].trim()};break;case 38:K.setDirection("TB"),this.$={stmt:"dir",value:"TB"};break;case 39:K.setDirection("BT"),this.$={stmt:"dir",value:"BT"};break;case 40:K.setDirection("RL"),this.$={stmt:"dir",value:"RL"};break;case 41:K.setDirection("LR"),this.$={stmt:"dir",value:"LR"};break;case 44:case 45:this.$={stmt:"state",id:Y[Z].trim(),type:"default",description:""};break;case 46:this.$={stmt:"state",id:Y[Z-2].trim(),classes:[Y[Z].trim()],type:"default",description:""};break;case 47:this.$={stmt:"state",id:Y[Z-2].trim(),classes:[Y[Z].trim()],type:"default",description:""};break}},"anonymous"),table:[{3:1,4:e,5:r,6:n},{1:[3]},{3:5,4:e,5:r,6:n},{3:6,4:e,5:r,6:n},t([1,4,5,16,17,19,22,24,25,26,27,28,29,33,35,37,38,41,45,48,51,52,53,54,57],i,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:a,5:s,8:8,9:10,10:12,11:13,12:14,13:15,16:l,17:u,19:h,22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:T,38:S,41:w,45:E,48:_,51:C,52:D,53:O,54:R,57:k},t(L,[2,5]),{9:39,10:12,11:13,12:14,13:15,16:l,17:u,19:h,22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:T,38:S,41:w,45:E,48:_,51:C,52:D,53:O,54:R,57:k},t(L,[2,7]),t(L,[2,8]),t(L,[2,9]),t(L,[2,10]),t(L,[2,11]),t(L,[2,12],{14:[1,40],15:[1,41]}),t(L,[2,16]),{18:[1,42]},t(L,[2,18],{20:[1,43]}),{23:[1,44]},t(L,[2,22]),t(L,[2,23]),t(L,[2,24]),t(L,[2,25]),{30:45,31:[1,46],59:[1,47],60:[1,48]},t(L,[2,28]),{34:[1,49]},{36:[1,50]},t(L,[2,31]),{13:51,24:d,57:k},{42:[1,52],44:[1,53]},{46:[1,54]},{49:[1,55]},t(A,[2,44],{58:[1,56]}),t(A,[2,45],{58:[1,57]}),t(L,[2,38]),t(L,[2,39]),t(L,[2,40]),t(L,[2,41]),t(L,[2,6]),t(L,[2,13]),{13:58,24:d,57:k},t(L,[2,17]),t(I,i,{7:59}),{24:[1,60]},{24:[1,61]},{23:[1,62]},{24:[2,48]},{24:[2,49]},t(L,[2,29]),t(L,[2,30]),{39:[1,63],40:[1,64]},{43:[1,65]},{43:[1,66]},{47:[1,67]},{50:[1,68]},{24:[1,69]},{24:[1,70]},t(L,[2,14],{14:[1,71]}),{4:a,5:s,8:8,9:10,10:12,11:13,12:14,13:15,16:l,17:u,19:h,21:[1,72],22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:T,38:S,41:w,45:E,48:_,51:C,52:D,53:O,54:R,57:k},t(L,[2,20],{20:[1,73]}),{31:[1,74]},{24:[1,75]},{39:[1,76]},{39:[1,77]},t(L,[2,34]),t(L,[2,35]),t(L,[2,36]),t(L,[2,37]),t(A,[2,46]),t(A,[2,47]),t(L,[2,15]),t(L,[2,19]),t(I,i,{7:78}),t(L,[2,26]),t(L,[2,27]),{5:[1,79]},{5:[1,80]},{4:a,5:s,8:8,9:10,10:12,11:13,12:14,13:15,16:l,17:u,19:h,21:[1,81],22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:T,38:S,41:w,45:E,48:_,51:C,52:D,53:O,54:R,57:k},t(L,[2,32]),t(L,[2,33]),t(L,[2,21])],defaultActions:{5:[2,1],6:[2,2],47:[2,48],48:[2,49]},parseError:o(function(z,$){if($.recoverable)this.trace(z);else{var U=new Error(z);throw U.hash=$,U}},"parseError"),parse:o(function(z){var $=this,U=[0],K=[],ee=[null],Y=[],ce=this.table,Z="",ue=0,Q=0,j=0,ne=2,te=1,he=Y.slice.call(arguments,1),le=Object.create(this.lexer),J={yy:{}};for(var Se in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Se)&&(J.yy[Se]=this.yy[Se]);le.setInput(z,J.yy),J.yy.lexer=le,J.yy.parser=this,typeof le.yylloc>"u"&&(le.yylloc={});var se=le.yylloc;Y.push(se);var ae=le.options&&le.options.ranges;typeof J.yy.parseError=="function"?this.parseError=J.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Oe(W){U.length=U.length-2*W,ee.length=ee.length-W,Y.length=Y.length-W}o(Oe,"popStack");function ye(){var W;return W=K.pop()||le.lex()||te,typeof W!="number"&&(W instanceof Array&&(K=W,W=K.pop()),W=$.symbols_[W]||W),W}o(ye,"lex");for(var Be,He,ze,Le,Ie,xe,q={},de,ie,oe,V;;){if(ze=U[U.length-1],this.defaultActions[ze]?Le=this.defaultActions[ze]:((Be===null||typeof Be>"u")&&(Be=ye()),Le=ce[ze]&&ce[ze][Be]),typeof Le>"u"||!Le.length||!Le[0]){var Te="";V=[];for(de in ce[ze])this.terminals_[de]&&de>ne&&V.push("'"+this.terminals_[de]+"'");le.showPosition?Te="Parse error on line "+(ue+1)+`: `+le.showPosition()+` -Expecting `+V.join(", ")+", got '"+(this.terminals_[Be]||Be)+"'":we="Parse error on line "+(ue+1)+": Unexpected "+(Be==ee?"end of input":"'"+(this.terminals_[Be]||Be)+"'"),this.parseError(we,{text:le.match,token:this.terminals_[Be]||Be,line:le.yylineno,loc:se,expected:V})}if(Le[0]instanceof Array&&Le.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ze+", token: "+Be);switch(Le[0]){case 1:U.push(Be),te.push(le.yytext),Y.push(le.yylloc),U.push(Le[1]),Be=null,He?(Be=He,He=null):(K=le.yyleng,Z=le.yytext,ue=le.yylineno,se=le.yylloc,j>0&&j--);break;case 2:if(ie=this.productions_[Le[1]][1],q.$=te[te.length-ie],q._$={first_line:Y[Y.length-(ie||1)].first_line,last_line:Y[Y.length-1].last_line,first_column:Y[Y.length-(ie||1)].first_column,last_column:Y[Y.length-1].last_column},ae&&(q._$.range=[Y[Y.length-(ie||1)].range[0],Y[Y.length-1].range[1]]),xe=this.performAction.apply(q,[Z,K,ue,J.yy,Le[1],te,Y].concat(ce)),typeof xe<"u")return xe;ie&&(U=U.slice(0,-1*ie*2),te=te.slice(0,-1*ie),Y=Y.slice(0,-1*ie)),U.push(this.productions_[Le[1]][0]),te.push(q.$),Y.push(q._$),oe=he[U[U.length-2]][U[U.length-1]],U.push(oe);break;case 3:return!0}}return!0},"parse")},P=function(){var F={EOF:1,parseError:o(function($,U){if(this.yy.parser)this.yy.parser.parseError($,U);else throw new Error($)},"parseError"),setInput:o(function(z,$){return this.yy=$||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},"setInput"),input:o(function(){var z=this._input[0];this.yytext+=z,this.yyleng++,this.offset++,this.match+=z,this.matched+=z;var $=z.match(/(?:\r\n?|\n).*/g);return $?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),z},"input"),unput:o(function(z){var $=z.length,U=z.split(/(?:\r\n?|\n)/g);this._input=z+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-$),this.offset-=$;var Q=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 te=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===Q.length?this.yylloc.first_column:0)+Q[Q.length-U.length].length-U[0].length:this.yylloc.first_column-$},this.options.ranges&&(this.yylloc.range=[te[0],te[0]+this.yyleng-$]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(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). +Expecting `+V.join(", ")+", got '"+(this.terminals_[Be]||Be)+"'":Te="Parse error on line "+(ue+1)+": Unexpected "+(Be==te?"end of input":"'"+(this.terminals_[Be]||Be)+"'"),this.parseError(Te,{text:le.match,token:this.terminals_[Be]||Be,line:le.yylineno,loc:se,expected:V})}if(Le[0]instanceof Array&&Le.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ze+", token: "+Be);switch(Le[0]){case 1:U.push(Be),ee.push(le.yytext),Y.push(le.yylloc),U.push(Le[1]),Be=null,He?(Be=He,He=null):(Q=le.yyleng,Z=le.yytext,ue=le.yylineno,se=le.yylloc,j>0&&j--);break;case 2:if(ie=this.productions_[Le[1]][1],q.$=ee[ee.length-ie],q._$={first_line:Y[Y.length-(ie||1)].first_line,last_line:Y[Y.length-1].last_line,first_column:Y[Y.length-(ie||1)].first_column,last_column:Y[Y.length-1].last_column},ae&&(q._$.range=[Y[Y.length-(ie||1)].range[0],Y[Y.length-1].range[1]]),xe=this.performAction.apply(q,[Z,Q,ue,J.yy,Le[1],ee,Y].concat(he)),typeof xe<"u")return xe;ie&&(U=U.slice(0,-1*ie*2),ee=ee.slice(0,-1*ie),Y=Y.slice(0,-1*ie)),U.push(this.productions_[Le[1]][0]),ee.push(q.$),Y.push(q._$),oe=ce[U[U.length-2]][U[U.length-1]],U.push(oe);break;case 3:return!0}}return!0},"parse")},P=function(){var F={EOF:1,parseError:o(function($,U){if(this.yy.parser)this.yy.parser.parseError($,U);else throw new Error($)},"parseError"),setInput:o(function(z,$){return this.yy=$||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},"setInput"),input:o(function(){var z=this._input[0];this.yytext+=z,this.yyleng++,this.offset++,this.match+=z,this.matched+=z;var $=z.match(/(?:\r\n?|\n).*/g);return $?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),z},"input"),unput:o(function(z){var $=z.length,U=z.split(/(?:\r\n?|\n)/g);this._input=z+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-$),this.offset-=$;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),U.length-1&&(this.yylineno-=U.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:U?(U.length===K.length?this.yylloc.first_column:0)+K[K.length-U.length].length-U[0].length:this.yylloc.first_column-$},this.options.ranges&&(this.yylloc.range=[ee[0],ee[0]+this.yyleng-$]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(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},"reject"),less:o(function(z){this.unput(this.match.slice(z))},"less"),pastInput:o(function(){var z=this.matched.substr(0,this.matched.length-this.match.length);return(z.length>20?"...":"")+z.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(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,"")},"upcomingInput"),showPosition:o(function(){var z=this.pastInput(),$=new Array(z.length+1).join("-");return z+this.upcomingInput()+` -`+$+"^"},"showPosition"),test_match:o(function(z,$){var U,Q,te;if(this.options.backtrack_lexer&&(te={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&&(te.yylloc.range=this.yylloc.range.slice(0))),Q=z[0].match(/(?:\r\n?|\n).*/g),Q&&(this.yylineno+=Q.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Q?Q[Q.length-1].length-Q[Q.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],U=this.performAction.call(this,this.yy,this,$,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),U)return U;if(this._backtrack){for(var Y in te)this[Y]=te[Y];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var z,$,U,Q;this._more||(this.yytext="",this.match="");for(var te=this._currentRules(),Y=0;Y$[0].length)){if($=U,Q=Y,this.options.backtrack_lexer){if(z=this.test_match(U,te[Y]),z!==!1)return z;if(this._backtrack){$=!1;continue}else return!1}else if(!this.options.flex)break}return $?(z=this.test_match($,te[Q]),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})},"next"),lex:o(function(){var $=this.next();return $||this.lex()},"lex"),begin:o(function($){this.conditionStack.push($)},"begin"),popState:o(function(){var $=this.conditionStack.length-1;return $>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function($){return $=this.conditionStack.length-1-Math.abs($||0),$>=0?this.conditionStack[$]:"INITIAL"},"topState"),pushState:o(function($){this.begin($)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function($,U,Q,te){var Y=te;switch(Q){case 0:return 38;case 1:return 40;case 2:return 39;case 3:return 44;case 4:return 51;case 5:return 52;case 6:return 53;case 7:return 54;case 8:break;case 9:break;case 10:return 5;case 11:break;case 12:break;case 13:break;case 14:break;case 15:return this.pushState("SCALE"),17;break;case 16:return 18;case 17:this.popState();break;case 18:return this.begin("acc_title"),33;break;case 19:return this.popState(),"acc_title_value";break;case 20:return this.begin("acc_descr"),35;break;case 21:return this.popState(),"acc_descr_value";break;case 22:this.begin("acc_descr_multiline");break;case 23:this.popState();break;case 24:return"acc_descr_multiline_value";case 25:return this.pushState("CLASSDEF"),41;break;case 26:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";break;case 27:return this.popState(),this.pushState("CLASSDEFID"),42;break;case 28:return this.popState(),43;break;case 29:return this.pushState("CLASS"),48;break;case 30:return this.popState(),this.pushState("CLASS_STYLE"),49;break;case 31:return this.popState(),50;break;case 32:return this.pushState("STYLE"),45;break;case 33:return this.popState(),this.pushState("STYLEDEF_STYLES"),46;break;case 34:return this.popState(),47;break;case 35:return this.pushState("SCALE"),17;break;case 36:return 18;case 37:this.popState();break;case 38:this.pushState("STATE");break;case 39:return this.popState(),U.yytext=U.yytext.slice(0,-8).trim(),25;break;case 40:return this.popState(),U.yytext=U.yytext.slice(0,-8).trim(),26;break;case 41:return this.popState(),U.yytext=U.yytext.slice(0,-10).trim(),27;break;case 42:return this.popState(),U.yytext=U.yytext.slice(0,-8).trim(),25;break;case 43:return this.popState(),U.yytext=U.yytext.slice(0,-8).trim(),26;break;case 44:return this.popState(),U.yytext=U.yytext.slice(0,-10).trim(),27;break;case 45:return 51;case 46:return 52;case 47:return 53;case 48:return 54;case 49:this.pushState("STATE_STRING");break;case 50:return this.pushState("STATE_ID"),"AS";break;case 51:return this.popState(),"ID";break;case 52:this.popState();break;case 53:return"STATE_DESCR";case 54:return 19;case 55:this.popState();break;case 56:return this.popState(),this.pushState("struct"),20;break;case 57:break;case 58:return this.popState(),21;break;case 59:break;case 60:return this.begin("NOTE"),29;break;case 61:return this.popState(),this.pushState("NOTE_ID"),59;break;case 62:return this.popState(),this.pushState("NOTE_ID"),60;break;case 63:this.popState(),this.pushState("FLOATING_NOTE");break;case 64:return this.popState(),this.pushState("FLOATING_NOTE_ID"),"AS";break;case 65:break;case 66:return"NOTE_TEXT";case 67:return this.popState(),"ID";break;case 68:return this.popState(),this.pushState("NOTE_TEXT"),24;break;case 69:return this.popState(),U.yytext=U.yytext.substr(2).trim(),31;break;case 70:return this.popState(),U.yytext=U.yytext.slice(0,-8).trim(),31;break;case 71:return 6;case 72:return 6;case 73:return 16;case 74:return 57;case 75:return 24;case 76:return U.yytext=U.yytext.trim(),14;break;case 77:return 15;case 78:return 28;case 79:return 58;case 80:return 5;case 81:return"INVALID"}},"anonymous"),rules:[/^(?:click\b)/i,/^(?:href\b)/i,/^(?:"[^"]*")/i,/^(?: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,/^(?:style\s+)/i,/^(?:[\w,]+\s+)/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:[12,13],inclusive:!1},struct:{rules:[12,13,25,29,32,38,45,46,47,48,57,58,59,60,74,75,76,77,78],inclusive:!1},FLOATING_NOTE_ID:{rules:[67],inclusive:!1},FLOATING_NOTE:{rules:[64,65,66],inclusive:!1},NOTE_TEXT:{rules:[69,70],inclusive:!1},NOTE_ID:{rules:[68],inclusive:!1},NOTE:{rules:[61,62,63],inclusive:!1},STYLEDEF_STYLEOPTS:{rules:[],inclusive:!1},STYLEDEF_STYLES:{rules:[34],inclusive:!1},STYLE_IDS:{rules:[],inclusive:!1},STYLE:{rules:[33],inclusive:!1},CLASS_STYLE:{rules:[31],inclusive:!1},CLASS:{rules:[30],inclusive:!1},CLASSDEFID:{rules:[28],inclusive:!1},CLASSDEF:{rules:[26,27],inclusive:!1},acc_descr_multiline:{rules:[23,24],inclusive:!1},acc_descr:{rules:[21],inclusive:!1},acc_title:{rules:[19],inclusive:!1},SCALE:{rules:[16,17,36,37],inclusive:!1},ALIAS:{rules:[],inclusive:!1},STATE_ID:{rules:[51],inclusive:!1},STATE_STRING:{rules:[52,53],inclusive:!1},FORK_STATE:{rules:[],inclusive:!1},STATE:{rules:[12,13,39,40,41,42,43,44,49,50,54,55,56],inclusive:!1},ID:{rules:[12,13],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,13,14,15,18,20,22,25,29,32,35,38,56,60,71,72,73,74,75,76,77,79,80,81],inclusive:!0}}};return F}();M.lexer=P;function B(){this.yy={}}return o(B,"Parser"),B.prototype=M,M.Parser=B,new B}();UO.parser=UO;zS=UO});var Hfe,GS,WO,kf,Fp,Rb,Wfe,qfe,Yfe,$p,VS,qO,YO,XO,jO,KO,US,HS,Xfe,jfe,QO,ZO,Kfe,Qfe,F1,QVe,Zfe,JO,ZVe,JVe,Jfe,ede,eUe,tde,tUe,rde,eP,tP,nde,WS,ide,rP,qS=N(()=>{"use strict";Hfe="TB",GS="TB",WO="dir",kf="state",Fp="root",Rb="relation",Wfe="classDef",qfe="style",Yfe="applyClass",$p="default",VS="divider",qO="fill:none",YO="fill: #333",XO="c",jO="text",KO="normal",US="rect",HS="rectWithTitle",Xfe="stateStart",jfe="stateEnd",QO="divider",ZO="roundedWithTitle",Kfe="note",Qfe="noteGroup",F1="statediagram",QVe="state",Zfe=`${F1}-${QVe}`,JO="transition",ZVe="note",JVe="note-edge",Jfe=`${JO} ${JVe}`,ede=`${F1}-${ZVe}`,eUe="cluster",tde=`${F1}-${eUe}`,tUe="cluster-alt",rde=`${F1}-${tUe}`,eP="parent",tP="note",nde="state",WS="----",ide=`${WS}${tP}`,rP=`${WS}${eP}`});function nP(t="",e=0,r="",n=WS){let i=r!==null&&r.length>0?`${n}${r}`:"";return`${nde}-${t}${i}-${e}`}function YS(t,e,r){if(!e.id||e.id===""||e.id==="")return;e.cssClasses&&(Array.isArray(e.cssCompiledStyles)||(e.cssCompiledStyles=[]),e.cssClasses.split(" ").forEach(i=>{let a=r.get(i);a&&(e.cssCompiledStyles=[...e.cssCompiledStyles??[],...a.styles])}));let n=t.find(i=>i.id===e.id);n?Object.assign(n,e):t.push(e)}function nUe(t){return t?.classes?.join(" ")??""}function iUe(t){return t?.styles??[]}var XS,Ef,rUe,ade,$1,sde,ode=N(()=>{"use strict";zt();vt();dr();qS();XS=new Map,Ef=0;o(nP,"stateDomId");rUe=o((t,e,r,n,i,a,s,l)=>{X.trace("items",e),e.forEach(u=>{switch(u.stmt){case kf:$1(t,u,r,n,i,a,s,l);break;case $p:$1(t,u,r,n,i,a,s,l);break;case Rb:{$1(t,u.state1,r,n,i,a,s,l),$1(t,u.state2,r,n,i,a,s,l);let h={id:"edge"+Ef,start:u.state1.id,end:u.state2.id,arrowhead:"normal",arrowTypeEnd:"arrow_barb",style:qO,labelStyle:"",label:Ze.sanitizeText(u.description??"",me()),arrowheadStyle:YO,labelpos:XO,labelType:jO,thickness:KO,classes:JO,look:s};i.push(h),Ef++}break}})},"setupDoc"),ade=o((t,e=GS)=>{let r=e;if(t.doc)for(let n of t.doc)n.stmt==="dir"&&(r=n.value);return r},"getDir");o(YS,"insertOrUpdateNode");o(nUe,"getClassesFromDbInfo");o(iUe,"getStylesFromDbInfo");$1=o((t,e,r,n,i,a,s,l)=>{let u=e.id,h=r.get(u),f=nUe(h),d=iUe(h),p=me();if(X.info("dataFetcher parsedItem",e,h,d),u!=="root"){let m=US;e.start===!0?m=Xfe:e.start===!1&&(m=jfe),e.type!==$p&&(m=e.type),XS.get(u)||XS.set(u,{id:u,shape:m,description:Ze.sanitizeText(u,p),cssClasses:`${f} ${Zfe}`,cssStyles:d});let g=XS.get(u);e.description&&(Array.isArray(g.description)?(g.shape=HS,g.description.push(e.description)):g.description?.length&&g.description.length>0?(g.shape=HS,g.description===u?g.description=[e.description]:g.description=[g.description,e.description]):(g.shape=US,g.description=e.description),g.description=Ze.sanitizeTextOrArray(g.description,p)),g.description?.length===1&&g.shape===HS&&(g.type==="group"?g.shape=ZO:g.shape=US),!g.type&&e.doc&&(X.info("Setting cluster for XCX",u,ade(e)),g.type="group",g.isGroup=!0,g.dir=ade(e),g.shape=e.type===VS?QO:ZO,g.cssClasses=`${g.cssClasses} ${tde} ${a?rde:""}`);let y={labelStyle:"",shape:g.shape,label:g.description,cssClasses:g.cssClasses,cssCompiledStyles:[],cssStyles:g.cssStyles,id:u,dir:g.dir,domId:nP(u,Ef),type:g.type,isGroup:g.type==="group",padding:8,rx:10,ry:10,look:s};if(y.shape===QO&&(y.label=""),t&&t.id!=="root"&&(X.trace("Setting node ",u," to be child of its parent ",t.id),y.parentId=t.id),y.centerLabel=!0,e.note){let v={labelStyle:"",shape:Kfe,label:e.note.text,cssClasses:ede,cssStyles:[],cssCompiledStyles:[],id:u+ide+"-"+Ef,domId:nP(u,Ef,tP),type:g.type,isGroup:g.type==="group",padding:p.flowchart?.padding,look:s,position:e.note.position},x=u+rP,b={labelStyle:"",shape:Qfe,label:e.note.text,cssClasses:g.cssClasses,cssStyles:[],id:u+rP,domId:nP(u,Ef,eP),type:"group",isGroup:!0,padding:16,look:s,position:e.note.position};Ef++,b.id=x,v.parentId=x,YS(n,b,l),YS(n,v,l),YS(n,y,l);let w=u,C=v.id;e.note.position==="left of"&&(w=v.id,C=u),i.push({id:w+"-"+C,start:w,end:C,arrowhead:"none",arrowTypeEnd:"",style:qO,labelStyle:"",classes:Jfe,arrowheadStyle:YO,labelpos:XO,labelType:jO,thickness:KO,look:s})}else YS(n,y,l)}e.doc&&(X.trace("Adding nodes children "),rUe(e,e.doc,r,n,i,!a,s,l))},"dataFetcher"),sde=o(()=>{XS.clear(),Ef=0},"reset")});var iP,aUe,sUe,lde,aP=N(()=>{"use strict";zt();vt();km();ep();qm();nr();qS();iP=o((t,e=GS)=>{if(!t.doc)return e;let r=e;for(let n of t.doc)n.stmt==="dir"&&(r=n.value);return r},"getDir"),aUe=o(function(t,e){return e.db.getClasses()},"getClasses"),sUe=o(async function(t,e,r,n){X.info("REF0:"),X.info("Drawing state diagram (v2)",e);let{securityLevel:i,state:a,layout:s}=me();n.db.extract(n.db.getRootDocV2());let l=n.db.getData(),u=xc(e,i);l.type=n.type,l.layoutAlgorithm=s,l.nodeSpacing=a?.nodeSpacing||50,l.rankSpacing=a?.rankSpacing||50,l.markers=["barb"],l.diagramId=e,await _c(l,u);let h=8;try{(typeof n.db.getLinks=="function"?n.db.getLinks():new Map).forEach((d,p)=>{let m=typeof p=="string"?p:typeof p?.id=="string"?p.id:"";if(!m){X.warn("\u26A0\uFE0F Invalid or missing stateId from key:",JSON.stringify(p));return}let g=u.node()?.querySelectorAll("g"),y;if(g?.forEach(w=>{w.textContent?.trim()===m&&(y=w)}),!y){X.warn("\u26A0\uFE0F Could not find node matching text:",m);return}let v=y.parentNode;if(!v){X.warn("\u26A0\uFE0F Node has no parent, cannot wrap:",m);return}let x=document.createElementNS("http://www.w3.org/2000/svg","a"),b=d.url.replace(/^"+|"+$/g,"");if(x.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",b),x.setAttribute("target","_blank"),d.tooltip){let w=d.tooltip.replace(/^"+|"+$/g,"");x.setAttribute("title",w)}v.replaceChild(x,y),x.appendChild(y),X.info("\u{1F517} Wrapped node in
    tag for:",m,d.url)})}catch(f){X.error("\u274C Error injecting clickable links:",f)}Gt.insertTitle(u,"statediagramTitleText",a?.titleTopMargin??25,n.db.getDiagramTitle()),Dc(u,h,F1,a?.useMaxWidth??!0)},"draw"),lde={getClasses:aUe,draw:sUe,getDir:iP}});var gs,cde,ude,jS,Zo,KS=N(()=>{"use strict";zt();vt();nr();dr();mi();ode();aP();qS();gs={START_NODE:"[*]",START_TYPE:"start",END_NODE:"[*]",END_TYPE:"end",COLOR_KEYWORD:"color",FILL_KEYWORD:"fill",BG_FILL:"bgFill",STYLECLASS_SEP:","},cde=o(()=>new Map,"newClassesList"),ude=o(()=>({relations:[],states:new Map,documents:{}}),"newDoc"),jS=o(t=>JSON.parse(JSON.stringify(t)),"clone"),Zo=class{constructor(e){this.version=e;this.nodes=[];this.edges=[];this.rootDoc=[];this.classes=cde();this.documents={root:ude()};this.currentDocument=this.documents.root;this.startEndCount=0;this.dividerCnt=0;this.links=new Map;this.getAccTitle=Rr;this.setAccTitle=Lr;this.getAccDescription=Mr;this.setAccDescription=Nr;this.setDiagramTitle=$r;this.getDiagramTitle=Ir;this.clear(),this.setRootDoc=this.setRootDoc.bind(this),this.getDividerId=this.getDividerId.bind(this),this.setDirection=this.setDirection.bind(this),this.trimColon=this.trimColon.bind(this)}static{o(this,"StateDB")}static{this.relationType={AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3}}extract(e){this.clear(!0);for(let i of Array.isArray(e)?e:e.doc)switch(i.stmt){case kf:this.addState(i.id.trim(),i.type,i.doc,i.description,i.note);break;case Rb:this.addRelation(i.state1,i.state2,i.description);break;case Wfe:this.addStyleClass(i.id.trim(),i.classes);break;case qfe:this.handleStyleDef(i);break;case Yfe:this.setCssClass(i.id.trim(),i.styleClass);break;case"click":this.addLink(i.id,i.url,i.tooltip);break}let r=this.getStates(),n=me();sde(),$1(void 0,this.getRootDocV2(),r,this.nodes,this.edges,!0,n.look,this.classes);for(let i of this.nodes)if(Array.isArray(i.label)){if(i.description=i.label.slice(1),i.isGroup&&i.description.length>0)throw new Error(`Group nodes can only have label. Remove the additional description for node [${i.id}]`);i.label=i.label[0]}}handleStyleDef(e){let r=e.id.trim().split(","),n=e.styleClass.split(",");for(let i of r){let a=this.getState(i);if(!a){let s=i.trim();this.addState(s),a=this.getState(s)}a&&(a.styles=n.map(s=>s.replace(/;/g,"")?.trim()))}}setRootDoc(e){X.info("Setting root doc",e),this.rootDoc=e,this.version===1?this.extract(e):this.extract(this.getRootDocV2())}docTranslator(e,r,n){if(r.stmt===Rb){this.docTranslator(e,r.state1,!0),this.docTranslator(e,r.state2,!1);return}if(r.stmt===kf&&(r.id===gs.START_NODE?(r.id=e.id+(n?"_start":"_end"),r.start=n):r.id=r.id.trim()),r.stmt!==Fp&&r.stmt!==kf||!r.doc)return;let i=[],a=[];for(let s of r.doc)if(s.type===VS){let l=jS(s);l.doc=jS(a),i.push(l),a=[]}else a.push(s);if(i.length>0&&a.length>0){let s={stmt:kf,id:J9(),type:"divider",doc:jS(a)};i.push(jS(s)),r.doc=i}r.doc.forEach(s=>this.docTranslator(r,s,!0))}getRootDocV2(){return this.docTranslator({id:Fp,stmt:Fp},{id:Fp,stmt:Fp,doc:this.rootDoc},!0),{id:Fp,doc:this.rootDoc}}addState(e,r=$p,n=void 0,i=void 0,a=void 0,s=void 0,l=void 0,u=void 0){let h=e?.trim();if(!this.currentDocument.states.has(h))X.info("Adding state ",h,i),this.currentDocument.states.set(h,{stmt:kf,id:h,descriptions:[],type:r,doc:n,note:a,classes:[],styles:[],textStyles:[]});else{let f=this.currentDocument.states.get(h);if(!f)throw new Error(`State not found: ${h}`);f.doc||(f.doc=n),f.type||(f.type=r)}if(i&&(X.info("Setting state description",h,i),(Array.isArray(i)?i:[i]).forEach(d=>this.addDescription(h,d.trim()))),a){let f=this.currentDocument.states.get(h);if(!f)throw new Error(`State not found: ${h}`);f.note=a,f.note.text=Ze.sanitizeText(f.note.text,me())}s&&(X.info("Setting state classes",h,s),(Array.isArray(s)?s:[s]).forEach(d=>this.setCssClass(h,d.trim()))),l&&(X.info("Setting state styles",h,l),(Array.isArray(l)?l:[l]).forEach(d=>this.setStyle(h,d.trim()))),u&&(X.info("Setting state styles",h,l),(Array.isArray(u)?u:[u]).forEach(d=>this.setTextStyle(h,d.trim())))}clear(e){this.nodes=[],this.edges=[],this.documents={root:ude()},this.currentDocument=this.documents.root,this.startEndCount=0,this.classes=cde(),e||(this.links=new Map,Ar())}getState(e){return this.currentDocument.states.get(e)}getStates(){return this.currentDocument.states}logDocuments(){X.info("Documents = ",this.documents)}getRelations(){return this.currentDocument.relations}addLink(e,r,n){this.links.set(e,{url:r,tooltip:n}),X.warn("Adding link",e,r,n)}getLinks(){return this.links}startIdIfNeeded(e=""){return e===gs.START_NODE?(this.startEndCount++,`${gs.START_TYPE}${this.startEndCount}`):e}startTypeIfNeeded(e="",r=$p){return e===gs.START_NODE?gs.START_TYPE:r}endIdIfNeeded(e=""){return e===gs.END_NODE?(this.startEndCount++,`${gs.END_TYPE}${this.startEndCount}`):e}endTypeIfNeeded(e="",r=$p){return e===gs.END_NODE?gs.END_TYPE:r}addRelationObjs(e,r,n=""){let i=this.startIdIfNeeded(e.id.trim()),a=this.startTypeIfNeeded(e.id.trim(),e.type),s=this.startIdIfNeeded(r.id.trim()),l=this.startTypeIfNeeded(r.id.trim(),r.type);this.addState(i,a,e.doc,e.description,e.note,e.classes,e.styles,e.textStyles),this.addState(s,l,r.doc,r.description,r.note,r.classes,r.styles,r.textStyles),this.currentDocument.relations.push({id1:i,id2:s,relationTitle:Ze.sanitizeText(n,me())})}addRelation(e,r,n){if(typeof e=="object"&&typeof r=="object")this.addRelationObjs(e,r,n);else if(typeof e=="string"&&typeof r=="string"){let i=this.startIdIfNeeded(e.trim()),a=this.startTypeIfNeeded(e),s=this.endIdIfNeeded(r.trim()),l=this.endTypeIfNeeded(r);this.addState(i,a),this.addState(s,l),this.currentDocument.relations.push({id1:i,id2:s,relationTitle:n?Ze.sanitizeText(n,me()):void 0})}}addDescription(e,r){let n=this.currentDocument.states.get(e),i=r.startsWith(":")?r.replace(":","").trim():r;n?.descriptions?.push(Ze.sanitizeText(i,me()))}cleanupLabel(e){return e.startsWith(":")?e.slice(2).trim():e.trim()}getDividerId(){return this.dividerCnt++,`divider-id-${this.dividerCnt}`}addStyleClass(e,r=""){this.classes.has(e)||this.classes.set(e,{id:e,styles:[],textStyles:[]});let n=this.classes.get(e);r&&n&&r.split(gs.STYLECLASS_SEP).forEach(i=>{let a=i.replace(/([^;]*);/,"$1").trim();if(RegExp(gs.COLOR_KEYWORD).exec(i)){let l=a.replace(gs.FILL_KEYWORD,gs.BG_FILL).replace(gs.COLOR_KEYWORD,gs.FILL_KEYWORD);n.textStyles.push(l)}n.styles.push(a)})}getClasses(){return this.classes}setCssClass(e,r){e.split(",").forEach(n=>{let i=this.getState(n);if(!i){let a=n.trim();this.addState(a),i=this.getState(a)}i?.classes?.push(r)})}setStyle(e,r){this.getState(e)?.styles?.push(r)}setTextStyle(e,r){this.getState(e)?.textStyles?.push(r)}getDirectionStatement(){return this.rootDoc.find(e=>e.stmt===WO)}getDirection(){return this.getDirectionStatement()?.value??Hfe}setDirection(e){let r=this.getDirectionStatement();r?r.value=e:this.rootDoc.unshift({stmt:WO,value:e})}trimColon(e){return e.startsWith(":")?e.slice(1).trim():e.trim()}getData(){let e=me();return{nodes:this.nodes,edges:this.edges,other:{},config:e,direction:iP(this.getRootDocV2())}}getConfig(){return me().state}}});var oUe,QS,sP=N(()=>{"use strict";oUe=o(t=>` +`+$+"^"},"showPosition"),test_match:o(function(z,$){var U,K,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))),K=z[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+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],U=this.performAction.call(this,this.yy,this,$,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),U)return U;if(this._backtrack){for(var Y in ee)this[Y]=ee[Y];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var z,$,U,K;this._more||(this.yytext="",this.match="");for(var ee=this._currentRules(),Y=0;Y$[0].length)){if($=U,K=Y,this.options.backtrack_lexer){if(z=this.test_match(U,ee[Y]),z!==!1)return z;if(this._backtrack){$=!1;continue}else return!1}else if(!this.options.flex)break}return $?(z=this.test_match($,ee[K]),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})},"next"),lex:o(function(){var $=this.next();return $||this.lex()},"lex"),begin:o(function($){this.conditionStack.push($)},"begin"),popState:o(function(){var $=this.conditionStack.length-1;return $>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function($){return $=this.conditionStack.length-1-Math.abs($||0),$>=0?this.conditionStack[$]:"INITIAL"},"topState"),pushState:o(function($){this.begin($)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function($,U,K,ee){var Y=ee;switch(K){case 0:return 38;case 1:return 40;case 2:return 39;case 3:return 44;case 4:return 51;case 5:return 52;case 6:return 53;case 7:return 54;case 8:break;case 9:break;case 10:return 5;case 11:break;case 12:break;case 13:break;case 14:break;case 15:return this.pushState("SCALE"),17;break;case 16:return 18;case 17:this.popState();break;case 18:return this.begin("acc_title"),33;break;case 19:return this.popState(),"acc_title_value";break;case 20:return this.begin("acc_descr"),35;break;case 21:return this.popState(),"acc_descr_value";break;case 22:this.begin("acc_descr_multiline");break;case 23:this.popState();break;case 24:return"acc_descr_multiline_value";case 25:return this.pushState("CLASSDEF"),41;break;case 26:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";break;case 27:return this.popState(),this.pushState("CLASSDEFID"),42;break;case 28:return this.popState(),43;break;case 29:return this.pushState("CLASS"),48;break;case 30:return this.popState(),this.pushState("CLASS_STYLE"),49;break;case 31:return this.popState(),50;break;case 32:return this.pushState("STYLE"),45;break;case 33:return this.popState(),this.pushState("STYLEDEF_STYLES"),46;break;case 34:return this.popState(),47;break;case 35:return this.pushState("SCALE"),17;break;case 36:return 18;case 37:this.popState();break;case 38:this.pushState("STATE");break;case 39:return this.popState(),U.yytext=U.yytext.slice(0,-8).trim(),25;break;case 40:return this.popState(),U.yytext=U.yytext.slice(0,-8).trim(),26;break;case 41:return this.popState(),U.yytext=U.yytext.slice(0,-10).trim(),27;break;case 42:return this.popState(),U.yytext=U.yytext.slice(0,-8).trim(),25;break;case 43:return this.popState(),U.yytext=U.yytext.slice(0,-8).trim(),26;break;case 44:return this.popState(),U.yytext=U.yytext.slice(0,-10).trim(),27;break;case 45:return 51;case 46:return 52;case 47:return 53;case 48:return 54;case 49:this.pushState("STATE_STRING");break;case 50:return this.pushState("STATE_ID"),"AS";break;case 51:return this.popState(),"ID";break;case 52:this.popState();break;case 53:return"STATE_DESCR";case 54:return 19;case 55:this.popState();break;case 56:return this.popState(),this.pushState("struct"),20;break;case 57:break;case 58:return this.popState(),21;break;case 59:break;case 60:return this.begin("NOTE"),29;break;case 61:return this.popState(),this.pushState("NOTE_ID"),59;break;case 62:return this.popState(),this.pushState("NOTE_ID"),60;break;case 63:this.popState(),this.pushState("FLOATING_NOTE");break;case 64:return this.popState(),this.pushState("FLOATING_NOTE_ID"),"AS";break;case 65:break;case 66:return"NOTE_TEXT";case 67:return this.popState(),"ID";break;case 68:return this.popState(),this.pushState("NOTE_TEXT"),24;break;case 69:return this.popState(),U.yytext=U.yytext.substr(2).trim(),31;break;case 70:return this.popState(),U.yytext=U.yytext.slice(0,-8).trim(),31;break;case 71:return 6;case 72:return 6;case 73:return 16;case 74:return 57;case 75:return 24;case 76:return U.yytext=U.yytext.trim(),14;break;case 77:return 15;case 78:return 28;case 79:return 58;case 80:return 5;case 81:return"INVALID"}},"anonymous"),rules:[/^(?:click\b)/i,/^(?:href\b)/i,/^(?:"[^"]*")/i,/^(?: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,/^(?:style\s+)/i,/^(?:[\w,]+\s+)/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:[12,13],inclusive:!1},struct:{rules:[12,13,25,29,32,38,45,46,47,48,57,58,59,60,74,75,76,77,78],inclusive:!1},FLOATING_NOTE_ID:{rules:[67],inclusive:!1},FLOATING_NOTE:{rules:[64,65,66],inclusive:!1},NOTE_TEXT:{rules:[69,70],inclusive:!1},NOTE_ID:{rules:[68],inclusive:!1},NOTE:{rules:[61,62,63],inclusive:!1},STYLEDEF_STYLEOPTS:{rules:[],inclusive:!1},STYLEDEF_STYLES:{rules:[34],inclusive:!1},STYLE_IDS:{rules:[],inclusive:!1},STYLE:{rules:[33],inclusive:!1},CLASS_STYLE:{rules:[31],inclusive:!1},CLASS:{rules:[30],inclusive:!1},CLASSDEFID:{rules:[28],inclusive:!1},CLASSDEF:{rules:[26,27],inclusive:!1},acc_descr_multiline:{rules:[23,24],inclusive:!1},acc_descr:{rules:[21],inclusive:!1},acc_title:{rules:[19],inclusive:!1},SCALE:{rules:[16,17,36,37],inclusive:!1},ALIAS:{rules:[],inclusive:!1},STATE_ID:{rules:[51],inclusive:!1},STATE_STRING:{rules:[52,53],inclusive:!1},FORK_STATE:{rules:[],inclusive:!1},STATE:{rules:[12,13,39,40,41,42,43,44,49,50,54,55,56],inclusive:!1},ID:{rules:[12,13],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,13,14,15,18,20,22,25,29,32,35,38,56,60,71,72,73,74,75,76,77,79,80,81],inclusive:!0}}};return F}();M.lexer=P;function B(){this.yy={}}return o(B,"Parser"),B.prototype=M,M.Parser=B,new B}();SP.parser=SP;JS=SP});var spe,e6,AP,Cf,Gp,Ob,ope,lpe,cpe,Vp,t6,_P,DP,LP,RP,NP,r6,n6,upe,hpe,MP,IP,fpe,dpe,B1,OHe,ppe,OP,PHe,BHe,mpe,gpe,FHe,ype,$He,vpe,PP,BP,xpe,i6,bpe,FP,a6=N(()=>{"use strict";spe="TB",e6="TB",AP="dir",Cf="state",Gp="root",Ob="relation",ope="classDef",lpe="style",cpe="applyClass",Vp="default",t6="divider",_P="fill:none",DP="fill: #333",LP="c",RP="text",NP="normal",r6="rect",n6="rectWithTitle",upe="stateStart",hpe="stateEnd",MP="divider",IP="roundedWithTitle",fpe="note",dpe="noteGroup",B1="statediagram",OHe="state",ppe=`${B1}-${OHe}`,OP="transition",PHe="note",BHe="note-edge",mpe=`${OP} ${BHe}`,gpe=`${B1}-${PHe}`,FHe="cluster",ype=`${B1}-${FHe}`,$He="cluster-alt",vpe=`${B1}-${$He}`,PP="parent",BP="note",xpe="state",i6="----",bpe=`${i6}${BP}`,FP=`${i6}${PP}`});function $P(t="",e=0,r="",n=i6){let i=r!==null&&r.length>0?`${n}${r}`:"";return`${xpe}-${t}${i}-${e}`}function s6(t,e,r){if(!e.id||e.id===""||e.id==="")return;e.cssClasses&&(Array.isArray(e.cssCompiledStyles)||(e.cssCompiledStyles=[]),e.cssClasses.split(" ").forEach(i=>{let a=r.get(i);a&&(e.cssCompiledStyles=[...e.cssCompiledStyles??[],...a.styles])}));let n=t.find(i=>i.id===e.id);n?Object.assign(n,e):t.push(e)}function GHe(t){return t?.classes?.join(" ")??""}function VHe(t){return t?.styles??[]}var o6,Af,zHe,Tpe,F1,wpe,kpe=N(()=>{"use strict";Gt();yt();pr();a6();o6=new Map,Af=0;o($P,"stateDomId");zHe=o((t,e,r,n,i,a,s,l)=>{X.trace("items",e),e.forEach(u=>{switch(u.stmt){case Cf:F1(t,u,r,n,i,a,s,l);break;case Vp:F1(t,u,r,n,i,a,s,l);break;case Ob:{F1(t,u.state1,r,n,i,a,s,l),F1(t,u.state2,r,n,i,a,s,l);let h={id:"edge"+Af,start:u.state1.id,end:u.state2.id,arrowhead:"normal",arrowTypeEnd:"arrow_barb",style:_P,labelStyle:"",label:Ze.sanitizeText(u.description??"",me()),arrowheadStyle:DP,labelpos:LP,labelType:RP,thickness:NP,classes:OP,look:s};i.push(h),Af++}break}})},"setupDoc"),Tpe=o((t,e=e6)=>{let r=e;if(t.doc)for(let n of t.doc)n.stmt==="dir"&&(r=n.value);return r},"getDir");o(s6,"insertOrUpdateNode");o(GHe,"getClassesFromDbInfo");o(VHe,"getStylesFromDbInfo");F1=o((t,e,r,n,i,a,s,l)=>{let u=e.id,h=r.get(u),f=GHe(h),d=VHe(h),p=me();if(X.info("dataFetcher parsedItem",e,h,d),u!=="root"){let m=r6;e.start===!0?m=upe:e.start===!1&&(m=hpe),e.type!==Vp&&(m=e.type),o6.get(u)||o6.set(u,{id:u,shape:m,description:Ze.sanitizeText(u,p),cssClasses:`${f} ${ppe}`,cssStyles:d});let g=o6.get(u);e.description&&(Array.isArray(g.description)?(g.shape=n6,g.description.push(e.description)):g.description?.length&&g.description.length>0?(g.shape=n6,g.description===u?g.description=[e.description]:g.description=[g.description,e.description]):(g.shape=r6,g.description=e.description),g.description=Ze.sanitizeTextOrArray(g.description,p)),g.description?.length===1&&g.shape===n6&&(g.type==="group"?g.shape=IP:g.shape=r6),!g.type&&e.doc&&(X.info("Setting cluster for XCX",u,Tpe(e)),g.type="group",g.isGroup=!0,g.dir=Tpe(e),g.shape=e.type===t6?MP:IP,g.cssClasses=`${g.cssClasses} ${ype} ${a?vpe:""}`);let y={labelStyle:"",shape:g.shape,label:g.description,cssClasses:g.cssClasses,cssCompiledStyles:[],cssStyles:g.cssStyles,id:u,dir:g.dir,domId:$P(u,Af),type:g.type,isGroup:g.type==="group",padding:8,rx:10,ry:10,look:s};if(y.shape===MP&&(y.label=""),t&&t.id!=="root"&&(X.trace("Setting node ",u," to be child of its parent ",t.id),y.parentId=t.id),y.centerLabel=!0,e.note){let v={labelStyle:"",shape:fpe,label:e.note.text,cssClasses:gpe,cssStyles:[],cssCompiledStyles:[],id:u+bpe+"-"+Af,domId:$P(u,Af,BP),type:g.type,isGroup:g.type==="group",padding:p.flowchart?.padding,look:s,position:e.note.position},x=u+FP,b={labelStyle:"",shape:dpe,label:e.note.text,cssClasses:g.cssClasses,cssStyles:[],id:u+FP,domId:$P(u,Af,PP),type:"group",isGroup:!0,padding:16,look:s,position:e.note.position};Af++,b.id=x,v.parentId=x,s6(n,b,l),s6(n,v,l),s6(n,y,l);let T=u,S=v.id;e.note.position==="left of"&&(T=v.id,S=u),i.push({id:T+"-"+S,start:T,end:S,arrowhead:"none",arrowTypeEnd:"",style:_P,labelStyle:"",classes:mpe,arrowheadStyle:DP,labelpos:LP,labelType:RP,thickness:NP,look:s})}else s6(n,y,l)}e.doc&&(X.trace("Adding nodes children "),zHe(e,e.doc,r,n,i,!a,s,l))},"dataFetcher"),wpe=o(()=>{o6.clear(),Af=0},"reset")});var zP,UHe,HHe,Epe,GP=N(()=>{"use strict";Gt();yt();Sm();rp();np();er();a6();zP=o((t,e=e6)=>{if(!t.doc)return e;let r=e;for(let n of t.doc)n.stmt==="dir"&&(r=n.value);return r},"getDir"),UHe=o(function(t,e){return e.db.getClasses()},"getClasses"),HHe=o(async function(t,e,r,n){X.info("REF0:"),X.info("Drawing state diagram (v2)",e);let{securityLevel:i,state:a,layout:s}=me();n.db.extract(n.db.getRootDocV2());let l=n.db.getData(),u=wc(e,i);l.type=n.type,l.layoutAlgorithm=s,l.nodeSpacing=a?.nodeSpacing||50,l.rankSpacing=a?.rankSpacing||50,l.markers=["barb"],l.diagramId=e,await Rc(l,u);let h=8;try{(typeof n.db.getLinks=="function"?n.db.getLinks():new Map).forEach((d,p)=>{let m=typeof p=="string"?p:typeof p?.id=="string"?p.id:"";if(!m){X.warn("\u26A0\uFE0F Invalid or missing stateId from key:",JSON.stringify(p));return}let g=u.node()?.querySelectorAll("g"),y;if(g?.forEach(T=>{T.textContent?.trim()===m&&(y=T)}),!y){X.warn("\u26A0\uFE0F Could not find node matching text:",m);return}let v=y.parentNode;if(!v){X.warn("\u26A0\uFE0F Node has no parent, cannot wrap:",m);return}let x=document.createElementNS("http://www.w3.org/2000/svg","a"),b=d.url.replace(/^"+|"+$/g,"");if(x.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",b),x.setAttribute("target","_blank"),d.tooltip){let T=d.tooltip.replace(/^"+|"+$/g,"");x.setAttribute("title",T)}v.replaceChild(x,y),x.appendChild(y),X.info("\u{1F517} Wrapped node in tag for:",m,d.url)})}catch(f){X.error("\u274C Error injecting clickable links:",f)}Vt.insertTitle(u,"statediagramTitleText",a?.titleTopMargin??25,n.db.getDiagramTitle()),Yo(u,h,B1,a?.useMaxWidth??!0)},"draw"),Epe={getClasses:UHe,draw:HHe,getDir:zP}});var bs,Spe,Cpe,l6,tl,c6=N(()=>{"use strict";Gt();yt();er();pr();ci();kpe();GP();a6();bs={START_NODE:"[*]",START_TYPE:"start",END_NODE:"[*]",END_TYPE:"end",COLOR_KEYWORD:"color",FILL_KEYWORD:"fill",BG_FILL:"bgFill",STYLECLASS_SEP:","},Spe=o(()=>new Map,"newClassesList"),Cpe=o(()=>({relations:[],states:new Map,documents:{}}),"newDoc"),l6=o(t=>JSON.parse(JSON.stringify(t)),"clone"),tl=class{constructor(e){this.version=e;this.nodes=[];this.edges=[];this.rootDoc=[];this.classes=Spe();this.documents={root:Cpe()};this.currentDocument=this.documents.root;this.startEndCount=0;this.dividerCnt=0;this.links=new Map;this.getAccTitle=Dr;this.setAccTitle=Ar;this.getAccDescription=Rr;this.setAccDescription=Lr;this.setDiagramTitle=Or;this.getDiagramTitle=Nr;this.clear(),this.setRootDoc=this.setRootDoc.bind(this),this.getDividerId=this.getDividerId.bind(this),this.setDirection=this.setDirection.bind(this),this.trimColon=this.trimColon.bind(this)}static{o(this,"StateDB")}static{this.relationType={AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3}}extract(e){this.clear(!0);for(let i of Array.isArray(e)?e:e.doc)switch(i.stmt){case Cf:this.addState(i.id.trim(),i.type,i.doc,i.description,i.note);break;case Ob:this.addRelation(i.state1,i.state2,i.description);break;case ope:this.addStyleClass(i.id.trim(),i.classes);break;case lpe:this.handleStyleDef(i);break;case cpe:this.setCssClass(i.id.trim(),i.styleClass);break;case"click":this.addLink(i.id,i.url,i.tooltip);break}let r=this.getStates(),n=me();wpe(),F1(void 0,this.getRootDocV2(),r,this.nodes,this.edges,!0,n.look,this.classes);for(let i of this.nodes)if(Array.isArray(i.label)){if(i.description=i.label.slice(1),i.isGroup&&i.description.length>0)throw new Error(`Group nodes can only have label. Remove the additional description for node [${i.id}]`);i.label=i.label[0]}}handleStyleDef(e){let r=e.id.trim().split(","),n=e.styleClass.split(",");for(let i of r){let a=this.getState(i);if(!a){let s=i.trim();this.addState(s),a=this.getState(s)}a&&(a.styles=n.map(s=>s.replace(/;/g,"")?.trim()))}}setRootDoc(e){X.info("Setting root doc",e),this.rootDoc=e,this.version===1?this.extract(e):this.extract(this.getRootDocV2())}docTranslator(e,r,n){if(r.stmt===Ob){this.docTranslator(e,r.state1,!0),this.docTranslator(e,r.state2,!1);return}if(r.stmt===Cf&&(r.id===bs.START_NODE?(r.id=e.id+(n?"_start":"_end"),r.start=n):r.id=r.id.trim()),r.stmt!==Gp&&r.stmt!==Cf||!r.doc)return;let i=[],a=[];for(let s of r.doc)if(s.type===t6){let l=l6(s);l.doc=l6(a),i.push(l),a=[]}else a.push(s);if(i.length>0&&a.length>0){let s={stmt:Cf,id:L9(),type:"divider",doc:l6(a)};i.push(l6(s)),r.doc=i}r.doc.forEach(s=>this.docTranslator(r,s,!0))}getRootDocV2(){return this.docTranslator({id:Gp,stmt:Gp},{id:Gp,stmt:Gp,doc:this.rootDoc},!0),{id:Gp,doc:this.rootDoc}}addState(e,r=Vp,n=void 0,i=void 0,a=void 0,s=void 0,l=void 0,u=void 0){let h=e?.trim();if(!this.currentDocument.states.has(h))X.info("Adding state ",h,i),this.currentDocument.states.set(h,{stmt:Cf,id:h,descriptions:[],type:r,doc:n,note:a,classes:[],styles:[],textStyles:[]});else{let f=this.currentDocument.states.get(h);if(!f)throw new Error(`State not found: ${h}`);f.doc||(f.doc=n),f.type||(f.type=r)}if(i&&(X.info("Setting state description",h,i),(Array.isArray(i)?i:[i]).forEach(d=>this.addDescription(h,d.trim()))),a){let f=this.currentDocument.states.get(h);if(!f)throw new Error(`State not found: ${h}`);f.note=a,f.note.text=Ze.sanitizeText(f.note.text,me())}s&&(X.info("Setting state classes",h,s),(Array.isArray(s)?s:[s]).forEach(d=>this.setCssClass(h,d.trim()))),l&&(X.info("Setting state styles",h,l),(Array.isArray(l)?l:[l]).forEach(d=>this.setStyle(h,d.trim()))),u&&(X.info("Setting state styles",h,l),(Array.isArray(u)?u:[u]).forEach(d=>this.setTextStyle(h,d.trim())))}clear(e){this.nodes=[],this.edges=[],this.documents={root:Cpe()},this.currentDocument=this.documents.root,this.startEndCount=0,this.classes=Spe(),e||(this.links=new Map,kr())}getState(e){return this.currentDocument.states.get(e)}getStates(){return this.currentDocument.states}logDocuments(){X.info("Documents = ",this.documents)}getRelations(){return this.currentDocument.relations}addLink(e,r,n){this.links.set(e,{url:r,tooltip:n}),X.warn("Adding link",e,r,n)}getLinks(){return this.links}startIdIfNeeded(e=""){return e===bs.START_NODE?(this.startEndCount++,`${bs.START_TYPE}${this.startEndCount}`):e}startTypeIfNeeded(e="",r=Vp){return e===bs.START_NODE?bs.START_TYPE:r}endIdIfNeeded(e=""){return e===bs.END_NODE?(this.startEndCount++,`${bs.END_TYPE}${this.startEndCount}`):e}endTypeIfNeeded(e="",r=Vp){return e===bs.END_NODE?bs.END_TYPE:r}addRelationObjs(e,r,n=""){let i=this.startIdIfNeeded(e.id.trim()),a=this.startTypeIfNeeded(e.id.trim(),e.type),s=this.startIdIfNeeded(r.id.trim()),l=this.startTypeIfNeeded(r.id.trim(),r.type);this.addState(i,a,e.doc,e.description,e.note,e.classes,e.styles,e.textStyles),this.addState(s,l,r.doc,r.description,r.note,r.classes,r.styles,r.textStyles),this.currentDocument.relations.push({id1:i,id2:s,relationTitle:Ze.sanitizeText(n,me())})}addRelation(e,r,n){if(typeof e=="object"&&typeof r=="object")this.addRelationObjs(e,r,n);else if(typeof e=="string"&&typeof r=="string"){let i=this.startIdIfNeeded(e.trim()),a=this.startTypeIfNeeded(e),s=this.endIdIfNeeded(r.trim()),l=this.endTypeIfNeeded(r);this.addState(i,a),this.addState(s,l),this.currentDocument.relations.push({id1:i,id2:s,relationTitle:n?Ze.sanitizeText(n,me()):void 0})}}addDescription(e,r){let n=this.currentDocument.states.get(e),i=r.startsWith(":")?r.replace(":","").trim():r;n?.descriptions?.push(Ze.sanitizeText(i,me()))}cleanupLabel(e){return e.startsWith(":")?e.slice(2).trim():e.trim()}getDividerId(){return this.dividerCnt++,`divider-id-${this.dividerCnt}`}addStyleClass(e,r=""){this.classes.has(e)||this.classes.set(e,{id:e,styles:[],textStyles:[]});let n=this.classes.get(e);r&&n&&r.split(bs.STYLECLASS_SEP).forEach(i=>{let a=i.replace(/([^;]*);/,"$1").trim();if(RegExp(bs.COLOR_KEYWORD).exec(i)){let l=a.replace(bs.FILL_KEYWORD,bs.BG_FILL).replace(bs.COLOR_KEYWORD,bs.FILL_KEYWORD);n.textStyles.push(l)}n.styles.push(a)})}getClasses(){return this.classes}setCssClass(e,r){e.split(",").forEach(n=>{let i=this.getState(n);if(!i){let a=n.trim();this.addState(a),i=this.getState(a)}i?.classes?.push(r)})}setStyle(e,r){this.getState(e)?.styles?.push(r)}setTextStyle(e,r){this.getState(e)?.textStyles?.push(r)}getDirectionStatement(){return this.rootDoc.find(e=>e.stmt===AP)}getDirection(){return this.getDirectionStatement()?.value??spe}setDirection(e){let r=this.getDirectionStatement();r?r.value=e:this.rootDoc.unshift({stmt:AP,value:e})}trimColon(e){return e.startsWith(":")?e.slice(1).trim():e.trim()}getData(){let e=me();return{nodes:this.nodes,edges:this.edges,other:{},config:e,direction:zP(this.getRootDocV2())}}getConfig(){return me().state}}});var WHe,u6,VP=N(()=>{"use strict";WHe=o(t=>` defs #statediagram-barbEnd { fill: ${t.transitionColor}; stroke: ${t.transitionColor}; @@ -1767,12 +1767,12 @@ g.stateGroup line { font-size: 18px; fill: ${t.textColor}; } -`,"getStyles"),QS=oUe});var lUe,cUe,uUe,hUe,fde,fUe,dUe,pUe,mUe,oP,hde,dde,pde=N(()=>{"use strict";pr();KS();nr();dr();zt();vt();lUe=o(t=>t.append("circle").attr("class","start-state").attr("r",me().state.sizeUnit).attr("cx",me().state.padding+me().state.sizeUnit).attr("cy",me().state.padding+me().state.sizeUnit),"drawStartState"),cUe=o(t=>t.append("line").style("stroke","grey").style("stroke-dasharray","3").attr("x1",me().state.textHeight).attr("class","divider").attr("x2",me().state.textHeight*2).attr("y1",0).attr("y2",0),"drawDivider"),uUe=o((t,e)=>{let r=t.append("text").attr("x",2*me().state.padding).attr("y",me().state.textHeight+2*me().state.padding).attr("font-size",me().state.fontSize).attr("class","state-title").text(e.id),n=r.node().getBBox();return t.insert("rect",":first-child").attr("x",me().state.padding).attr("y",me().state.padding).attr("width",n.width+2*me().state.padding).attr("height",n.height+2*me().state.padding).attr("rx",me().state.radius),r},"drawSimpleState"),hUe=o((t,e)=>{let r=o(function(p,m,g){let y=p.append("tspan").attr("x",2*me().state.padding).text(m);g||y.attr("dy",me().state.textHeight)},"addTspan"),i=t.append("text").attr("x",2*me().state.padding).attr("y",me().state.textHeight+1.3*me().state.padding).attr("font-size",me().state.fontSize).attr("class","state-title").text(e.descriptions[0]).node().getBBox(),a=i.height,s=t.append("text").attr("x",me().state.padding).attr("y",a+me().state.padding*.4+me().state.dividerMargin+me().state.textHeight).attr("class","state-description"),l=!0,u=!0;e.descriptions.forEach(function(p){l||(r(s,p,u),u=!1),l=!1});let h=t.append("line").attr("x1",me().state.padding).attr("y1",me().state.padding+a+me().state.dividerMargin/2).attr("y2",me().state.padding+a+me().state.dividerMargin/2).attr("class","descr-divider"),f=s.node().getBBox(),d=Math.max(f.width,i.width);return h.attr("x2",d+3*me().state.padding),t.insert("rect",":first-child").attr("x",me().state.padding).attr("y",me().state.padding).attr("width",d+2*me().state.padding).attr("height",f.height+a+2*me().state.padding).attr("rx",me().state.radius),t},"drawDescrState"),fde=o((t,e,r)=>{let n=me().state.padding,i=2*me().state.padding,a=t.node().getBBox(),s=a.width,l=a.x,u=t.append("text").attr("x",0).attr("y",me().state.titleShift).attr("font-size",me().state.fontSize).attr("class","state-title").text(e.id),f=u.node().getBBox().width+i,d=Math.max(f,s);d===s&&(d=d+i);let p,m=t.node().getBBox();e.doc,p=l-n,f>s&&(p=(s-d)/2+n),Math.abs(l-m.x)s&&(p=l-(f-s)/2);let g=1-me().state.textHeight;return t.insert("rect",":first-child").attr("x",p).attr("y",g).attr("class",r?"alt-composit":"composit").attr("width",d).attr("height",m.height+me().state.textHeight+me().state.titleShift+1).attr("rx","0"),u.attr("x",p+n),f<=s&&u.attr("x",l+(d-i)/2-f/2+n),t.insert("rect",":first-child").attr("x",p).attr("y",me().state.titleShift-me().state.textHeight-me().state.padding).attr("width",d).attr("height",me().state.textHeight*3).attr("rx",me().state.radius),t.insert("rect",":first-child").attr("x",p).attr("y",me().state.titleShift-me().state.textHeight-me().state.padding).attr("width",d).attr("height",m.height+3+2*me().state.textHeight).attr("rx",me().state.radius),t},"addTitleAndBox"),fUe=o(t=>(t.append("circle").attr("class","end-state-outer").attr("r",me().state.sizeUnit+me().state.miniPadding).attr("cx",me().state.padding+me().state.sizeUnit+me().state.miniPadding).attr("cy",me().state.padding+me().state.sizeUnit+me().state.miniPadding),t.append("circle").attr("class","end-state-inner").attr("r",me().state.sizeUnit).attr("cx",me().state.padding+me().state.sizeUnit+2).attr("cy",me().state.padding+me().state.sizeUnit+2)),"drawEndState"),dUe=o((t,e)=>{let r=me().state.forkWidth,n=me().state.forkHeight;if(e.parentId){let i=r;r=n,n=i}return t.append("rect").style("stroke","black").style("fill","black").attr("width",r).attr("height",n).attr("x",me().state.padding).attr("y",me().state.padding)},"drawForkJoinState"),pUe=o((t,e,r,n)=>{let i=0,a=n.append("text");a.style("text-anchor","start"),a.attr("class","noteText");let s=t.replace(/\r\n/g,"
    ");s=s.replace(/\n/g,"
    ");let l=s.split(Ze.lineBreakRegex),u=1.25*me().state.noteMargin;for(let h of l){let f=h.trim();if(f.length>0){let d=a.append("tspan");if(d.text(f),u===0){let p=d.node().getBBox();u+=p.height}i+=u,d.attr("x",e+me().state.noteMargin),d.attr("y",r+i+1.25*me().state.noteMargin)}}return{textWidth:a.node().getBBox().width,textHeight:i}},"_drawLongText"),mUe=o((t,e)=>{e.attr("class","state-note");let r=e.append("rect").attr("x",0).attr("y",me().state.padding),n=e.append("g"),{textWidth:i,textHeight:a}=pUe(t,0,0,n);return r.attr("height",a+2*me().state.noteMargin),r.attr("width",i+me().state.noteMargin*2),r},"drawNote"),oP=o(function(t,e){let r=e.id,n={id:r,label:e.id,width:0,height:0},i=t.append("g").attr("id",r).attr("class","stateGroup");e.type==="start"&&lUe(i),e.type==="end"&&fUe(i),(e.type==="fork"||e.type==="join")&&dUe(i,e),e.type==="note"&&mUe(e.note.text,i),e.type==="divider"&&cUe(i),e.type==="default"&&e.descriptions.length===0&&uUe(i,e),e.type==="default"&&e.descriptions.length>0&&hUe(i,e);let a=i.node().getBBox();return n.width=a.width+2*me().state.padding,n.height=a.height+2*me().state.padding,n},"drawState"),hde=0,dde=o(function(t,e,r){let n=o(function(u){switch(u){case Zo.relationType.AGGREGATION:return"aggregation";case Zo.relationType.EXTENSION:return"extension";case Zo.relationType.COMPOSITION:return"composition";case Zo.relationType.DEPENDENCY:return"dependency"}},"getRelationType");e.points=e.points.filter(u=>!Number.isNaN(u.y));let i=e.points,a=kl().x(function(u){return u.x}).y(function(u){return u.y}).curve(Lo),s=t.append("path").attr("d",a(i)).attr("id","edge"+hde).attr("class","transition"),l="";if(me().state.arrowMarkerAbsolute&&(l=pu(!0)),s.attr("marker-end","url("+l+"#"+n(Zo.relationType.DEPENDENCY)+"End)"),r.title!==void 0){let u=t.append("g").attr("class","stateLabel"),{x:h,y:f}=Gt.calcLabelPosition(e.points),d=Ze.getRows(r.title),p=0,m=[],g=0,y=0;for(let b=0;b<=d.length;b++){let w=u.append("text").attr("text-anchor","middle").text(d[b]).attr("x",h).attr("y",f+p),C=w.node().getBBox();g=Math.max(g,C.width),y=Math.min(y,C.x),X.info(C.x,h,f+p),p===0&&(p=w.node().getBBox().height,X.info("Title height",p,f)),m.push(w)}let v=p*d.length;if(d.length>1){let b=(d.length-1)*p*.5;m.forEach((w,C)=>w.attr("y",f+C*p-b)),v=p*d.length}let x=u.node().getBBox();u.insert("rect",":first-child").attr("class","box").attr("x",h-g/2-me().state.padding/2).attr("y",f-v/2-me().state.padding/2-3.5).attr("width",g+me().state.padding).attr("height",v+me().state.padding),X.info(x)}hde++},"drawEdge")});var mo,lP,gUe,yUe,vUe,xUe,mde,gde,yde=N(()=>{"use strict";pr();wR();Uo();vt();dr();pde();zt();Si();lP={},gUe=o(function(){},"setConf"),yUe=o(function(t){t.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")},"insertMarkers"),vUe=o(function(t,e,r,n){mo=me().state;let i=me().securityLevel,a;i==="sandbox"&&(a=Ge("#i"+e));let s=i==="sandbox"?Ge(a.nodes()[0].contentDocument.body):Ge("body"),l=i==="sandbox"?a.nodes()[0].contentDocument:document;X.debug("Rendering diagram "+t);let u=s.select(`[id='${e}']`);yUe(u);let h=n.db.getRootDoc();mde(h,u,void 0,!1,s,l,n);let f=mo.padding,d=u.node().getBBox(),p=d.width+f*2,m=d.height+f*2,g=p*1.75;vn(u,m,g,mo.useMaxWidth),u.attr("viewBox",`${d.x-mo.padding} ${d.y-mo.padding} `+p+" "+m)},"draw"),xUe=o(t=>t?t.length*mo.fontSizeFactor:1,"getLabelWidth"),mde=o((t,e,r,n,i,a,s)=>{let l=new sn({compound:!0,multigraph:!0}),u,h=!0;for(u=0;u{let T=C.parentElement,E=0,A=0;T&&(T.parentElement&&(E=T.parentElement.getBBox().width),A=parseInt(T.getAttribute("data-x-shift"),10),Number.isNaN(A)&&(A=0)),C.setAttribute("x1",0-A+8),C.setAttribute("x2",E-A-8)})):X.debug("No Node "+b+": "+JSON.stringify(l.node(b)))});let v=y.getBBox();l.edges().forEach(function(b){b!==void 0&&l.edge(b)!==void 0&&(X.debug("Edge "+b.v+" -> "+b.w+": "+JSON.stringify(l.edge(b))),dde(e,l.edge(b),l.edge(b).relation))}),v=y.getBBox();let x={id:r||"root",label:r||"root",width:0,height:0};return x.width=v.width+2*mo.padding,x.height=v.height+2*mo.padding,X.debug("Doc rendered",x,l),x},"renderDoc"),gde={setConf:gUe,draw:vUe}});var vde={};hr(vde,{diagram:()=>bUe});var bUe,xde=N(()=>{"use strict";HO();KS();sP();yde();bUe={parser:zS,get db(){return new Zo(1)},renderer:gde,styles:QS,init:o(t=>{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute},"init")}});var Tde={};hr(Tde,{diagram:()=>EUe});var EUe,kde=N(()=>{"use strict";HO();KS();sP();aP();EUe={parser:zS,get db(){return new Zo(2)},renderer:lde,styles:QS,init:o(t=>{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute},"init")}});var cP,Cde,Ade=N(()=>{"use strict";cP=function(){var t=o(function(d,p,m,g){for(m=m||{},g=d.length;g--;m[d[g]]=p);return m},"o"),e=[6,8,10,11,12,14,16,17,18],r=[1,9],n=[1,10],i=[1,11],a=[1,12],s=[1,13],l=[1,14],u={trace:o(function(){},"trace"),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:o(function(p,m,g,y,v,x,b){var w=x.length-1;switch(v){case 1:return x[w-1];case 2:this.$=[];break;case 3:x[w-1].push(x[w]),this.$=x[w-1];break;case 4:case 5:this.$=x[w];break;case 6:case 7:this.$=[];break;case 8:y.setDiagramTitle(x[w].substr(6)),this.$=x[w].substr(6);break;case 9:this.$=x[w].trim(),y.setAccTitle(this.$);break;case 10:case 11:this.$=x[w].trim(),y.setAccDescription(this.$);break;case 12:y.addSection(x[w].substr(8)),this.$=x[w].substr(8);break;case 13:y.addTask(x[w-1],x[w]),this.$="task";break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:r,12:n,14:i,16:a,17:s,18:l},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:15,11:r,12:n,14:i,16:a,17:s,18:l},t(e,[2,5]),t(e,[2,6]),t(e,[2,8]),{13:[1,16]},{15:[1,17]},t(e,[2,11]),t(e,[2,12]),{19:[1,18]},t(e,[2,4]),t(e,[2,9]),t(e,[2,10]),t(e,[2,13])],defaultActions:{},parseError:o(function(p,m){if(m.recoverable)this.trace(p);else{var g=new Error(p);throw g.hash=m,g}},"parseError"),parse:o(function(p){var m=this,g=[0],y=[],v=[null],x=[],b=this.table,w="",C=0,T=0,E=0,A=2,S=1,_=x.slice.call(arguments,1),I=Object.create(this.lexer),L={yy:{}};for(var k in this.yy)Object.prototype.hasOwnProperty.call(this.yy,k)&&(L.yy[k]=this.yy[k]);I.setInput(p,L.yy),L.yy.lexer=I,L.yy.parser=this,typeof I.yylloc>"u"&&(I.yylloc={});var D=I.yylloc;x.push(D);var R=I.options&&I.options.ranges;typeof L.yy.parseError=="function"?this.parseError=L.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function O(K){g.length=g.length-2*K,v.length=v.length-K,x.length=x.length-K}o(O,"popStack");function M(){var K;return K=y.pop()||I.lex()||S,typeof K!="number"&&(K instanceof Array&&(y=K,K=y.pop()),K=m.symbols_[K]||K),K}o(M,"lex");for(var P,B,F,z,$,U,Q={},te,Y,he,Z;;){if(F=g[g.length-1],this.defaultActions[F]?z=this.defaultActions[F]:((P===null||typeof P>"u")&&(P=M()),z=b[F]&&b[F][P]),typeof z>"u"||!z.length||!z[0]){var ue="";Z=[];for(te in b[F])this.terminals_[te]&&te>A&&Z.push("'"+this.terminals_[te]+"'");I.showPosition?ue="Parse error on line "+(C+1)+`: -`+I.showPosition()+` -Expecting `+Z.join(", ")+", got '"+(this.terminals_[P]||P)+"'":ue="Parse error on line "+(C+1)+": Unexpected "+(P==S?"end of input":"'"+(this.terminals_[P]||P)+"'"),this.parseError(ue,{text:I.match,token:this.terminals_[P]||P,line:I.yylineno,loc:D,expected:Z})}if(z[0]instanceof Array&&z.length>1)throw new Error("Parse Error: multiple actions possible at state: "+F+", token: "+P);switch(z[0]){case 1:g.push(P),v.push(I.yytext),x.push(I.yylloc),g.push(z[1]),P=null,B?(P=B,B=null):(T=I.yyleng,w=I.yytext,C=I.yylineno,D=I.yylloc,E>0&&E--);break;case 2:if(Y=this.productions_[z[1]][1],Q.$=v[v.length-Y],Q._$={first_line:x[x.length-(Y||1)].first_line,last_line:x[x.length-1].last_line,first_column:x[x.length-(Y||1)].first_column,last_column:x[x.length-1].last_column},R&&(Q._$.range=[x[x.length-(Y||1)].range[0],x[x.length-1].range[1]]),U=this.performAction.apply(Q,[w,T,C,L.yy,z[1],v,x].concat(_)),typeof U<"u")return U;Y&&(g=g.slice(0,-1*Y*2),v=v.slice(0,-1*Y),x=x.slice(0,-1*Y)),g.push(this.productions_[z[1]][0]),v.push(Q.$),x.push(Q._$),he=b[g[g.length-2]][g[g.length-1]],g.push(he);break;case 3:return!0}}return!0},"parse")},h=function(){var d={EOF:1,parseError:o(function(m,g){if(this.yy.parser)this.yy.parser.parseError(m,g);else throw new Error(m)},"parseError"),setInput:o(function(p,m){return this.yy=m||this.yy||{},this._input=p,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},"setInput"),input:o(function(){var p=this._input[0];this.yytext+=p,this.yyleng++,this.offset++,this.match+=p,this.matched+=p;var m=p.match(/(?:\r\n?|\n).*/g);return m?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),p},"input"),unput:o(function(p){var m=p.length,g=p.split(/(?:\r\n?|\n)/g);this._input=p+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-m),this.offset-=m;var y=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),g.length-1&&(this.yylineno-=g.length-1);var v=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:g?(g.length===y.length?this.yylloc.first_column:0)+y[y.length-g.length].length-g[0].length:this.yylloc.first_column-m},this.options.ranges&&(this.yylloc.range=[v[0],v[0]+this.yyleng-m]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(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). +`,"getStyles"),u6=WHe});var qHe,YHe,XHe,jHe,_pe,KHe,QHe,ZHe,JHe,UP,Ape,Dpe,Lpe=N(()=>{"use strict";fr();c6();er();pr();Gt();yt();qHe=o(t=>t.append("circle").attr("class","start-state").attr("r",me().state.sizeUnit).attr("cx",me().state.padding+me().state.sizeUnit).attr("cy",me().state.padding+me().state.sizeUnit),"drawStartState"),YHe=o(t=>t.append("line").style("stroke","grey").style("stroke-dasharray","3").attr("x1",me().state.textHeight).attr("class","divider").attr("x2",me().state.textHeight*2).attr("y1",0).attr("y2",0),"drawDivider"),XHe=o((t,e)=>{let r=t.append("text").attr("x",2*me().state.padding).attr("y",me().state.textHeight+2*me().state.padding).attr("font-size",me().state.fontSize).attr("class","state-title").text(e.id),n=r.node().getBBox();return t.insert("rect",":first-child").attr("x",me().state.padding).attr("y",me().state.padding).attr("width",n.width+2*me().state.padding).attr("height",n.height+2*me().state.padding).attr("rx",me().state.radius),r},"drawSimpleState"),jHe=o((t,e)=>{let r=o(function(p,m,g){let y=p.append("tspan").attr("x",2*me().state.padding).text(m);g||y.attr("dy",me().state.textHeight)},"addTspan"),i=t.append("text").attr("x",2*me().state.padding).attr("y",me().state.textHeight+1.3*me().state.padding).attr("font-size",me().state.fontSize).attr("class","state-title").text(e.descriptions[0]).node().getBBox(),a=i.height,s=t.append("text").attr("x",me().state.padding).attr("y",a+me().state.padding*.4+me().state.dividerMargin+me().state.textHeight).attr("class","state-description"),l=!0,u=!0;e.descriptions.forEach(function(p){l||(r(s,p,u),u=!1),l=!1});let h=t.append("line").attr("x1",me().state.padding).attr("y1",me().state.padding+a+me().state.dividerMargin/2).attr("y2",me().state.padding+a+me().state.dividerMargin/2).attr("class","descr-divider"),f=s.node().getBBox(),d=Math.max(f.width,i.width);return h.attr("x2",d+3*me().state.padding),t.insert("rect",":first-child").attr("x",me().state.padding).attr("y",me().state.padding).attr("width",d+2*me().state.padding).attr("height",f.height+a+2*me().state.padding).attr("rx",me().state.radius),t},"drawDescrState"),_pe=o((t,e,r)=>{let n=me().state.padding,i=2*me().state.padding,a=t.node().getBBox(),s=a.width,l=a.x,u=t.append("text").attr("x",0).attr("y",me().state.titleShift).attr("font-size",me().state.fontSize).attr("class","state-title").text(e.id),f=u.node().getBBox().width+i,d=Math.max(f,s);d===s&&(d=d+i);let p,m=t.node().getBBox();e.doc,p=l-n,f>s&&(p=(s-d)/2+n),Math.abs(l-m.x)s&&(p=l-(f-s)/2);let g=1-me().state.textHeight;return t.insert("rect",":first-child").attr("x",p).attr("y",g).attr("class",r?"alt-composit":"composit").attr("width",d).attr("height",m.height+me().state.textHeight+me().state.titleShift+1).attr("rx","0"),u.attr("x",p+n),f<=s&&u.attr("x",l+(d-i)/2-f/2+n),t.insert("rect",":first-child").attr("x",p).attr("y",me().state.titleShift-me().state.textHeight-me().state.padding).attr("width",d).attr("height",me().state.textHeight*3).attr("rx",me().state.radius),t.insert("rect",":first-child").attr("x",p).attr("y",me().state.titleShift-me().state.textHeight-me().state.padding).attr("width",d).attr("height",m.height+3+2*me().state.textHeight).attr("rx",me().state.radius),t},"addTitleAndBox"),KHe=o(t=>(t.append("circle").attr("class","end-state-outer").attr("r",me().state.sizeUnit+me().state.miniPadding).attr("cx",me().state.padding+me().state.sizeUnit+me().state.miniPadding).attr("cy",me().state.padding+me().state.sizeUnit+me().state.miniPadding),t.append("circle").attr("class","end-state-inner").attr("r",me().state.sizeUnit).attr("cx",me().state.padding+me().state.sizeUnit+2).attr("cy",me().state.padding+me().state.sizeUnit+2)),"drawEndState"),QHe=o((t,e)=>{let r=me().state.forkWidth,n=me().state.forkHeight;if(e.parentId){let i=r;r=n,n=i}return t.append("rect").style("stroke","black").style("fill","black").attr("width",r).attr("height",n).attr("x",me().state.padding).attr("y",me().state.padding)},"drawForkJoinState"),ZHe=o((t,e,r,n)=>{let i=0,a=n.append("text");a.style("text-anchor","start"),a.attr("class","noteText");let s=t.replace(/\r\n/g,"
    ");s=s.replace(/\n/g,"
    ");let l=s.split(Ze.lineBreakRegex),u=1.25*me().state.noteMargin;for(let h of l){let f=h.trim();if(f.length>0){let d=a.append("tspan");if(d.text(f),u===0){let p=d.node().getBBox();u+=p.height}i+=u,d.attr("x",e+me().state.noteMargin),d.attr("y",r+i+1.25*me().state.noteMargin)}}return{textWidth:a.node().getBBox().width,textHeight:i}},"_drawLongText"),JHe=o((t,e)=>{e.attr("class","state-note");let r=e.append("rect").attr("x",0).attr("y",me().state.padding),n=e.append("g"),{textWidth:i,textHeight:a}=ZHe(t,0,0,n);return r.attr("height",a+2*me().state.noteMargin),r.attr("width",i+me().state.noteMargin*2),r},"drawNote"),UP=o(function(t,e){let r=e.id,n={id:r,label:e.id,width:0,height:0},i=t.append("g").attr("id",r).attr("class","stateGroup");e.type==="start"&&qHe(i),e.type==="end"&&KHe(i),(e.type==="fork"||e.type==="join")&&QHe(i,e),e.type==="note"&&JHe(e.note.text,i),e.type==="divider"&&YHe(i),e.type==="default"&&e.descriptions.length===0&&XHe(i,e),e.type==="default"&&e.descriptions.length>0&&jHe(i,e);let a=i.node().getBBox();return n.width=a.width+2*me().state.padding,n.height=a.height+2*me().state.padding,n},"drawState"),Ape=0,Dpe=o(function(t,e,r){let n=o(function(u){switch(u){case tl.relationType.AGGREGATION:return"aggregation";case tl.relationType.EXTENSION:return"extension";case tl.relationType.COMPOSITION:return"composition";case tl.relationType.DEPENDENCY:return"dependency"}},"getRelationType");e.points=e.points.filter(u=>!Number.isNaN(u.y));let i=e.points,a=Cl().x(function(u){return u.x}).y(function(u){return u.y}).curve(No),s=t.append("path").attr("d",a(i)).attr("id","edge"+Ape).attr("class","transition"),l="";if(me().state.arrowMarkerAbsolute&&(l=mu(!0)),s.attr("marker-end","url("+l+"#"+n(tl.relationType.DEPENDENCY)+"End)"),r.title!==void 0){let u=t.append("g").attr("class","stateLabel"),{x:h,y:f}=Vt.calcLabelPosition(e.points),d=Ze.getRows(r.title),p=0,m=[],g=0,y=0;for(let b=0;b<=d.length;b++){let T=u.append("text").attr("text-anchor","middle").text(d[b]).attr("x",h).attr("y",f+p),S=T.node().getBBox();g=Math.max(g,S.width),y=Math.min(y,S.x),X.info(S.x,h,f+p),p===0&&(p=T.node().getBBox().height,X.info("Title height",p,f)),m.push(T)}let v=p*d.length;if(d.length>1){let b=(d.length-1)*p*.5;m.forEach((T,S)=>T.attr("y",f+S*p-b)),v=p*d.length}let x=u.node().getBBox();u.insert("rect",":first-child").attr("class","box").attr("x",h-g/2-me().state.padding/2).attr("y",f-v/2-me().state.padding/2-3.5).attr("width",g+me().state.padding).attr("height",v+me().state.padding),X.info(x)}Ape++},"drawEdge")});var go,HP,eWe,tWe,rWe,nWe,Rpe,Npe,Mpe=N(()=>{"use strict";fr();JR();Wo();yt();pr();Lpe();Gt();xi();HP={},eWe=o(function(){},"setConf"),tWe=o(function(t){t.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")},"insertMarkers"),rWe=o(function(t,e,r,n){go=me().state;let i=me().securityLevel,a;i==="sandbox"&&(a=Ge("#i"+e));let s=i==="sandbox"?Ge(a.nodes()[0].contentDocument.body):Ge("body"),l=i==="sandbox"?a.nodes()[0].contentDocument:document;X.debug("Rendering diagram "+t);let u=s.select(`[id='${e}']`);tWe(u);let h=n.db.getRootDoc();Rpe(h,u,void 0,!1,s,l,n);let f=go.padding,d=u.node().getBBox(),p=d.width+f*2,m=d.height+f*2,g=p*1.75;fn(u,m,g,go.useMaxWidth),u.attr("viewBox",`${d.x-go.padding} ${d.y-go.padding} `+p+" "+m)},"draw"),nWe=o(t=>t?t.length*go.fontSizeFactor:1,"getLabelWidth"),Rpe=o((t,e,r,n,i,a,s)=>{let l=new sn({compound:!0,multigraph:!0}),u,h=!0;for(u=0;u{let w=S.parentElement,E=0,_=0;w&&(w.parentElement&&(E=w.parentElement.getBBox().width),_=parseInt(w.getAttribute("data-x-shift"),10),Number.isNaN(_)&&(_=0)),S.setAttribute("x1",0-_+8),S.setAttribute("x2",E-_-8)})):X.debug("No Node "+b+": "+JSON.stringify(l.node(b)))});let v=y.getBBox();l.edges().forEach(function(b){b!==void 0&&l.edge(b)!==void 0&&(X.debug("Edge "+b.v+" -> "+b.w+": "+JSON.stringify(l.edge(b))),Dpe(e,l.edge(b),l.edge(b).relation))}),v=y.getBBox();let x={id:r||"root",label:r||"root",width:0,height:0};return x.width=v.width+2*go.padding,x.height=v.height+2*go.padding,X.debug("Doc rendered",x,l),x},"renderDoc"),Npe={setConf:eWe,draw:rWe}});var Ipe={};ur(Ipe,{diagram:()=>iWe});var iWe,Ope=N(()=>{"use strict";CP();c6();VP();Mpe();iWe={parser:JS,get db(){return new tl(1)},renderer:Npe,styles:u6,init:o(t=>{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute},"init")}});var Fpe={};ur(Fpe,{diagram:()=>lWe});var lWe,$pe=N(()=>{"use strict";CP();c6();VP();GP();lWe={parser:JS,get db(){return new tl(2)},renderer:Epe,styles:u6,init:o(t=>{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute},"init")}});var WP,Vpe,Upe=N(()=>{"use strict";WP=function(){var t=o(function(d,p,m,g){for(m=m||{},g=d.length;g--;m[d[g]]=p);return m},"o"),e=[6,8,10,11,12,14,16,17,18],r=[1,9],n=[1,10],i=[1,11],a=[1,12],s=[1,13],l=[1,14],u={trace:o(function(){},"trace"),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:o(function(p,m,g,y,v,x,b){var T=x.length-1;switch(v){case 1:return x[T-1];case 2:this.$=[];break;case 3:x[T-1].push(x[T]),this.$=x[T-1];break;case 4:case 5:this.$=x[T];break;case 6:case 7:this.$=[];break;case 8:y.setDiagramTitle(x[T].substr(6)),this.$=x[T].substr(6);break;case 9:this.$=x[T].trim(),y.setAccTitle(this.$);break;case 10:case 11:this.$=x[T].trim(),y.setAccDescription(this.$);break;case 12:y.addSection(x[T].substr(8)),this.$=x[T].substr(8);break;case 13:y.addTask(x[T-1],x[T]),this.$="task";break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:r,12:n,14:i,16:a,17:s,18:l},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:15,11:r,12:n,14:i,16:a,17:s,18:l},t(e,[2,5]),t(e,[2,6]),t(e,[2,8]),{13:[1,16]},{15:[1,17]},t(e,[2,11]),t(e,[2,12]),{19:[1,18]},t(e,[2,4]),t(e,[2,9]),t(e,[2,10]),t(e,[2,13])],defaultActions:{},parseError:o(function(p,m){if(m.recoverable)this.trace(p);else{var g=new Error(p);throw g.hash=m,g}},"parseError"),parse:o(function(p){var m=this,g=[0],y=[],v=[null],x=[],b=this.table,T="",S=0,w=0,E=0,_=2,C=1,D=x.slice.call(arguments,1),O=Object.create(this.lexer),R={yy:{}};for(var k in this.yy)Object.prototype.hasOwnProperty.call(this.yy,k)&&(R.yy[k]=this.yy[k]);O.setInput(p,R.yy),R.yy.lexer=O,R.yy.parser=this,typeof O.yylloc>"u"&&(O.yylloc={});var L=O.yylloc;x.push(L);var A=O.options&&O.options.ranges;typeof R.yy.parseError=="function"?this.parseError=R.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function I(Q){g.length=g.length-2*Q,v.length=v.length-Q,x.length=x.length-Q}o(I,"popStack");function M(){var Q;return Q=y.pop()||O.lex()||C,typeof Q!="number"&&(Q instanceof Array&&(y=Q,Q=y.pop()),Q=m.symbols_[Q]||Q),Q}o(M,"lex");for(var P,B,F,z,$,U,K={},ee,Y,ce,Z;;){if(F=g[g.length-1],this.defaultActions[F]?z=this.defaultActions[F]:((P===null||typeof P>"u")&&(P=M()),z=b[F]&&b[F][P]),typeof z>"u"||!z.length||!z[0]){var ue="";Z=[];for(ee in b[F])this.terminals_[ee]&&ee>_&&Z.push("'"+this.terminals_[ee]+"'");O.showPosition?ue="Parse error on line "+(S+1)+`: +`+O.showPosition()+` +Expecting `+Z.join(", ")+", got '"+(this.terminals_[P]||P)+"'":ue="Parse error on line "+(S+1)+": Unexpected "+(P==C?"end of input":"'"+(this.terminals_[P]||P)+"'"),this.parseError(ue,{text:O.match,token:this.terminals_[P]||P,line:O.yylineno,loc:L,expected:Z})}if(z[0]instanceof Array&&z.length>1)throw new Error("Parse Error: multiple actions possible at state: "+F+", token: "+P);switch(z[0]){case 1:g.push(P),v.push(O.yytext),x.push(O.yylloc),g.push(z[1]),P=null,B?(P=B,B=null):(w=O.yyleng,T=O.yytext,S=O.yylineno,L=O.yylloc,E>0&&E--);break;case 2:if(Y=this.productions_[z[1]][1],K.$=v[v.length-Y],K._$={first_line:x[x.length-(Y||1)].first_line,last_line:x[x.length-1].last_line,first_column:x[x.length-(Y||1)].first_column,last_column:x[x.length-1].last_column},A&&(K._$.range=[x[x.length-(Y||1)].range[0],x[x.length-1].range[1]]),U=this.performAction.apply(K,[T,w,S,R.yy,z[1],v,x].concat(D)),typeof U<"u")return U;Y&&(g=g.slice(0,-1*Y*2),v=v.slice(0,-1*Y),x=x.slice(0,-1*Y)),g.push(this.productions_[z[1]][0]),v.push(K.$),x.push(K._$),ce=b[g[g.length-2]][g[g.length-1]],g.push(ce);break;case 3:return!0}}return!0},"parse")},h=function(){var d={EOF:1,parseError:o(function(m,g){if(this.yy.parser)this.yy.parser.parseError(m,g);else throw new Error(m)},"parseError"),setInput:o(function(p,m){return this.yy=m||this.yy||{},this._input=p,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},"setInput"),input:o(function(){var p=this._input[0];this.yytext+=p,this.yyleng++,this.offset++,this.match+=p,this.matched+=p;var m=p.match(/(?:\r\n?|\n).*/g);return m?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),p},"input"),unput:o(function(p){var m=p.length,g=p.split(/(?:\r\n?|\n)/g);this._input=p+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-m),this.offset-=m;var y=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),g.length-1&&(this.yylineno-=g.length-1);var v=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:g?(g.length===y.length?this.yylloc.first_column:0)+y[y.length-g.length].length-g[0].length:this.yylloc.first_column-m},this.options.ranges&&(this.yylloc.range=[v[0],v[0]+this.yyleng-m]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(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},"reject"),less:o(function(p){this.unput(this.match.slice(p))},"less"),pastInput:o(function(){var p=this.matched.substr(0,this.matched.length-this.match.length);return(p.length>20?"...":"")+p.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var p=this.match;return p.length<20&&(p+=this._input.substr(0,20-p.length)),(p.substr(0,20)+(p.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var p=this.pastInput(),m=new Array(p.length+1).join("-");return p+this.upcomingInput()+` `+m+"^"},"showPosition"),test_match:o(function(p,m){var g,y,v;if(this.options.backtrack_lexer&&(v={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&&(v.yylloc.range=this.yylloc.range.slice(0))),y=p[0].match(/(?:\r\n?|\n).*/g),y&&(this.yylineno+=y.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:y?y[y.length-1].length-y[y.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+p[0].length},this.yytext+=p[0],this.match+=p[0],this.matches=p,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(p[0].length),this.matched+=p[0],g=this.performAction.call(this,this.yy,this,m,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),g)return g;if(this._backtrack){for(var x in v)this[x]=v[x];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var p,m,g,y;this._more||(this.yytext="",this.match="");for(var v=this._currentRules(),x=0;xm[0].length)){if(m=g,y=x,this.options.backtrack_lexer){if(p=this.test_match(g,v[x]),p!==!1)return p;if(this._backtrack){m=!1;continue}else return!1}else if(!this.options.flex)break}return m?(p=this.test_match(m,v[y]),p!==!1?p:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var m=this.next();return m||this.lex()},"lex"),begin:o(function(m){this.conditionStack.push(m)},"begin"),popState:o(function(){var m=this.conditionStack.length-1;return m>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(m){return m=this.conditionStack.length-1-Math.abs(m||0),m>=0?this.conditionStack[m]:"INITIAL"},"topState"),pushState:o(function(m){this.begin(m)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(m,g,y,v){var x=v;switch(y){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;break;case 8:return this.popState(),"acc_title_value";break;case 9:return this.begin("acc_descr"),14;break;case 10:return this.popState(),"acc_descr_value";break;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"}},"anonymous"),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 d}();u.lexer=h;function f(){this.yy={}}return o(f,"Parser"),f.prototype=u,u.Parser=f,new f}();cP.parser=cP;Cde=cP});var z1,uP,Nb,Mb,_Ue,DUe,LUe,RUe,NUe,MUe,IUe,_de,OUe,hP,Dde=N(()=>{"use strict";zt();mi();z1="",uP=[],Nb=[],Mb=[],_Ue=o(function(){uP.length=0,Nb.length=0,z1="",Mb.length=0,Ar()},"clear"),DUe=o(function(t){z1=t,uP.push(t)},"addSection"),LUe=o(function(){return uP},"getSections"),RUe=o(function(){let t=_de(),e=100,r=0;for(;!t&&r{r.people&&t.push(...r.people)}),[...new Set(t)].sort()},"updateActors"),MUe=o(function(t,e){let r=e.substr(1).split(":"),n=0,i=[];r.length===1?(n=Number(r[0]),i=[]):(n=Number(r[0]),i=r[1].split(","));let a=i.map(l=>l.trim()),s={section:z1,type:z1,people:a,task:t,score:n};Mb.push(s)},"addTask"),IUe=o(function(t){let e={section:z1,type:z1,description:t,task:t,classes:[]};Nb.push(e)},"addTaskOrg"),_de=o(function(){let t=o(function(r){return Mb[r].processed},"compileTask"),e=!0;for(let[r,n]of Mb.entries())t(r),e=e&&n.processed;return e},"compileTasks"),OUe=o(function(){return NUe()},"getActors"),hP={getConfig:o(()=>me().journey,"getConfig"),clear:_Ue,setDiagramTitle:$r,getDiagramTitle:Ir,setAccTitle:Lr,getAccTitle:Rr,setAccDescription:Nr,getAccDescription:Mr,addSection:DUe,getSections:LUe,getTasks:RUe,addTask:MUe,addTaskOrg:IUe,getActors:OUe}});var PUe,Lde,Rde=N(()=>{"use strict";Ym();PUe=o(t=>`.label { +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var m=this.next();return m||this.lex()},"lex"),begin:o(function(m){this.conditionStack.push(m)},"begin"),popState:o(function(){var m=this.conditionStack.length-1;return m>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(m){return m=this.conditionStack.length-1-Math.abs(m||0),m>=0?this.conditionStack[m]:"INITIAL"},"topState"),pushState:o(function(m){this.begin(m)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(m,g,y,v){var x=v;switch(y){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;break;case 8:return this.popState(),"acc_title_value";break;case 9:return this.begin("acc_descr"),14;break;case 10:return this.popState(),"acc_descr_value";break;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"}},"anonymous"),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 d}();u.lexer=h;function f(){this.yy={}}return o(f,"Parser"),f.prototype=u,u.Parser=f,new f}();WP.parser=WP;Vpe=WP});var $1,qP,Pb,Bb,fWe,dWe,pWe,mWe,gWe,yWe,vWe,Hpe,xWe,YP,Wpe=N(()=>{"use strict";Gt();ci();$1="",qP=[],Pb=[],Bb=[],fWe=o(function(){qP.length=0,Pb.length=0,$1="",Bb.length=0,kr()},"clear"),dWe=o(function(t){$1=t,qP.push(t)},"addSection"),pWe=o(function(){return qP},"getSections"),mWe=o(function(){let t=Hpe(),e=100,r=0;for(;!t&&r{r.people&&t.push(...r.people)}),[...new Set(t)].sort()},"updateActors"),yWe=o(function(t,e){let r=e.substr(1).split(":"),n=0,i=[];r.length===1?(n=Number(r[0]),i=[]):(n=Number(r[0]),i=r[1].split(","));let a=i.map(l=>l.trim()),s={section:$1,type:$1,people:a,task:t,score:n};Bb.push(s)},"addTask"),vWe=o(function(t){let e={section:$1,type:$1,description:t,task:t,classes:[]};Pb.push(e)},"addTaskOrg"),Hpe=o(function(){let t=o(function(r){return Bb[r].processed},"compileTask"),e=!0;for(let[r,n]of Bb.entries())t(r),e=e&&n.processed;return e},"compileTasks"),xWe=o(function(){return gWe()},"getActors"),YP={getConfig:o(()=>me().journey,"getConfig"),clear:fWe,setDiagramTitle:Or,getDiagramTitle:Nr,setAccTitle:Ar,getAccTitle:Dr,setAccDescription:Lr,getAccDescription:Rr,addSection:dWe,getSections:pWe,getTasks:mWe,addTask:yWe,addTaskOrg:vWe,getActors:xWe}});var bWe,qpe,Ype=N(()=>{"use strict";Xm();bWe=o(t=>`.label { font-family: ${t.fontFamily}; color: ${t.textColor}; } @@ -1904,13 +1904,13 @@ Expecting `+Z.join(", ")+", got '"+(this.terminals_[P]||P)+"'":ue="Parse error o .actor-5 { ${t.actor5?`fill: ${t.actor5}`:""}; } - ${Lc()} -`,"getStyles"),Lde=PUe});var fP,BUe,Mde,Ide,FUe,$Ue,Nde,zUe,GUe,Ode,VUe,G1,Pde=N(()=>{"use strict";pr();Zv();fP=o(function(t,e){return Ld(t,e)},"drawRect"),BUe=o(function(t,e){let n=t.append("circle").attr("cx",e.cx).attr("cy",e.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),i=t.append("g");i.append("circle").attr("cx",e.cx-15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),i.append("circle").attr("cx",e.cx+15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666");function a(u){let h=Tl().startAngle(Math.PI/2).endAngle(3*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+2)+")")}o(a,"smile");function s(u){let h=Tl().startAngle(3*Math.PI/2).endAngle(5*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+7)+")")}o(s,"sad");function l(u){u.append("line").attr("class","mouth").attr("stroke",2).attr("x1",e.cx-5).attr("y1",e.cy+7).attr("x2",e.cx+5).attr("y2",e.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}return o(l,"ambivalent"),e.score>3?a(i):e.score<3?s(i):l(i),n},"drawFace"),Mde=o(function(t,e){let r=t.append("circle");return r.attr("cx",e.cx),r.attr("cy",e.cy),r.attr("class","actor-"+e.pos),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("r",e.r),r.class!==void 0&&r.attr("class",r.class),e.title!==void 0&&r.append("title").text(e.title),r},"drawCircle"),Ide=o(function(t,e){return Bq(t,e)},"drawText"),FUe=o(function(t,e){function r(i,a,s,l,u){return i+","+a+" "+(i+s)+","+a+" "+(i+s)+","+(a+l-u)+" "+(i+s-u*1.2)+","+(a+l)+" "+i+","+(a+l)}o(r,"genPoints");let n=t.append("polygon");n.attr("points",r(e.x,e.y,50,20,7)),n.attr("class","labelBox"),e.y=e.y+e.labelMargin,e.x=e.x+.5*e.labelMargin,Ide(t,e)},"drawLabel"),$Ue=o(function(t,e,r){let n=t.append("g"),i=El();i.x=e.x,i.y=e.y,i.fill=e.fill,i.width=r.width*e.taskCount+r.diagramMarginX*(e.taskCount-1),i.height=r.height,i.class="journey-section section-type-"+e.num,i.rx=3,i.ry=3,fP(n,i),Ode(r)(e.text,n,i.x,i.y,i.width,i.height,{class:"journey-section section-type-"+e.num},r,e.colour)},"drawSection"),Nde=-1,zUe=o(function(t,e,r){let n=e.x+r.width/2,i=t.append("g");Nde++;let a=300+5*30;i.append("line").attr("id","task"+Nde).attr("x1",n).attr("y1",e.y).attr("x2",n).attr("y2",a).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),BUe(i,{cx:n,cy:300+(5-e.score)*30,score:e.score});let s=El();s.x=e.x,s.y=e.y,s.fill=e.fill,s.width=r.width,s.height=r.height,s.class="task task-type-"+e.num,s.rx=3,s.ry=3,fP(i,s);let l=e.x+14;e.people.forEach(u=>{let h=e.actors[u].color,f={cx:l,cy:e.y,r:7,fill:h,stroke:"#000",title:u,pos:e.actors[u].position};Mde(i,f),l+=10}),Ode(r)(e.task,i,s.x,s.y,s.width,s.height,{class:"task"},r,e.colour)},"drawTask"),GUe=o(function(t,e){J5(t,e)},"drawBackgroundRect"),Ode=function(){function t(i,a,s,l,u,h,f,d){let p=a.append("text").attr("x",s+u/2).attr("y",l+h/2+5).style("font-color",d).style("text-anchor","middle").text(i);n(p,f)}o(t,"byText");function e(i,a,s,l,u,h,f,d,p){let{taskFontSize:m,taskFontFamily:g}=d,y=i.split(//gi);for(let v=0;v{let a=Ju[i].color,s={cx:20,cy:n,r:7,fill:a,stroke:"#000",pos:Ju[i].position};G1.drawCircle(t,s);let l=t.append("text").attr("visibility","hidden").text(i),u=l.node().getBoundingClientRect().width;l.remove();let h=[];if(u<=r)h=[i];else{let f=i.split(" "),d="";l=t.append("text").attr("visibility","hidden"),f.forEach(p=>{let m=d?`${d} ${p}`:p;if(l.text(m),l.node().getBoundingClientRect().width>r){if(d&&h.push(d),d=p,l.text(p),l.node().getBoundingClientRect().width>r){let y="";for(let v of p)y+=v,l.text(y+"-"),l.node().getBoundingClientRect().width>r&&(h.push(y.slice(0,-1)+"-"),y=v);d=y}}else d=m}),d&&h.push(d),l.remove()}h.forEach((f,d)=>{let p={x:40,y:n+7+d*20,fill:"#666",text:f,textMargin:e.boxTextMargin??5},g=G1.drawText(t,p).node().getBoundingClientRect().width;g>ZS&&g>e.leftMargin-g&&(ZS=g)}),n+=Math.max(20,h.length*20)})}var UUe,Ju,ZS,zl,Sf,WUe,Jo,dP,Bde,qUe,pP,Fde=N(()=>{"use strict";pr();Pde();zt();Si();UUe=o(function(t){Object.keys(t).forEach(function(r){zl[r]=t[r]})},"setConf"),Ju={},ZS=0;o(HUe,"drawActorLegend");zl=me().journey,Sf=0,WUe=o(function(t,e,r,n){let i=me(),a=i.journey.titleColor,s=i.journey.titleFontSize,l=i.journey.titleFontFamily,u=i.securityLevel,h;u==="sandbox"&&(h=Ge("#i"+e));let f=u==="sandbox"?Ge(h.nodes()[0].contentDocument.body):Ge("body");Jo.init();let d=f.select("#"+e);G1.initGraphics(d);let p=n.db.getTasks(),m=n.db.getDiagramTitle(),g=n.db.getActors();for(let C in Ju)delete Ju[C];let y=0;g.forEach(C=>{Ju[C]={color:zl.actorColours[y%zl.actorColours.length],position:y},y++}),HUe(d),Sf=zl.leftMargin+ZS,Jo.insert(0,0,Sf,Object.keys(Ju).length*50),qUe(d,p,0);let v=Jo.getBounds();m&&d.append("text").text(m).attr("x",Sf).attr("font-size",s).attr("font-weight","bold").attr("y",25).attr("fill",a).attr("font-family",l);let x=v.stopy-v.starty+2*zl.diagramMarginY,b=Sf+v.stopx+2*zl.diagramMarginX;vn(d,x,b,zl.useMaxWidth),d.append("line").attr("x1",Sf).attr("y1",zl.height*4).attr("x2",b-Sf-4).attr("y2",zl.height*4).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)");let w=m?70:0;d.attr("viewBox",`${v.startx} -25 ${b} ${x+w}`),d.attr("preserveAspectRatio","xMinYMin meet"),d.attr("height",x+w+25)},"draw"),Jo={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],init:o(function(){this.sequenceItems=[],this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0},"init"),updateVal:o(function(t,e,r,n){t[e]===void 0?t[e]=r:t[e]=n(r,t[e])},"updateVal"),updateBounds:o(function(t,e,r,n){let i=me().journey,a=this,s=0;function l(u){return o(function(f){s++;let d=a.sequenceItems.length-s+1;a.updateVal(f,"starty",e-d*i.boxMargin,Math.min),a.updateVal(f,"stopy",n+d*i.boxMargin,Math.max),a.updateVal(Jo.data,"startx",t-d*i.boxMargin,Math.min),a.updateVal(Jo.data,"stopx",r+d*i.boxMargin,Math.max),u!=="activation"&&(a.updateVal(f,"startx",t-d*i.boxMargin,Math.min),a.updateVal(f,"stopx",r+d*i.boxMargin,Math.max),a.updateVal(Jo.data,"starty",e-d*i.boxMargin,Math.min),a.updateVal(Jo.data,"stopy",n+d*i.boxMargin,Math.max))},"updateItemBounds")}o(l,"updateFn"),this.sequenceItems.forEach(l())},"updateBounds"),insert:o(function(t,e,r,n){let i=Math.min(t,r),a=Math.max(t,r),s=Math.min(e,n),l=Math.max(e,n);this.updateVal(Jo.data,"startx",i,Math.min),this.updateVal(Jo.data,"starty",s,Math.min),this.updateVal(Jo.data,"stopx",a,Math.max),this.updateVal(Jo.data,"stopy",l,Math.max),this.updateBounds(i,s,a,l)},"insert"),bumpVerticalPos:o(function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=this.verticalPos},"bumpVerticalPos"),getVerticalPos:o(function(){return this.verticalPos},"getVerticalPos"),getBounds:o(function(){return this.data},"getBounds")},dP=zl.sectionFills,Bde=zl.sectionColours,qUe=o(function(t,e,r){let n=me().journey,i="",a=n.height*2+n.diagramMarginY,s=r+a,l=0,u="#CCC",h="black",f=0;for(let[d,p]of e.entries()){if(i!==p.section){u=dP[l%dP.length],f=l%dP.length,h=Bde[l%Bde.length];let g=0,y=p.section;for(let x=d;x(Ju[y]&&(g[y]=Ju[y]),g),{});p.x=d*n.taskMargin+d*n.width+Sf,p.y=s,p.width=n.diagramMarginX,p.height=n.diagramMarginY,p.colour=h,p.fill=u,p.num=f,p.actors=m,G1.drawTask(t,p,n),Jo.insert(p.x,p.y,p.x+p.width+n.taskMargin,300+5*30)}},"drawTasks"),pP={setConf:UUe,draw:WUe}});var $de={};hr($de,{diagram:()=>YUe});var YUe,zde=N(()=>{"use strict";Ade();Dde();Rde();Fde();YUe={parser:Cde,db:hP,renderer:pP,styles:Lde,init:o(t=>{pP.setConf(t.journey),hP.clear()},"init")}});var gP,Yde,Xde=N(()=>{"use strict";gP=function(){var t=o(function(p,m,g,y){for(g=g||{},y=p.length;y--;g[p[y]]=m);return g},"o"),e=[6,8,10,11,12,14,16,17,20,21],r=[1,9],n=[1,10],i=[1,11],a=[1,12],s=[1,13],l=[1,16],u=[1,17],h={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,timeline: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,period_statement:18,event_statement:19,period:20,event:21,$accept:0,$end:1},terminals_:{2:"error",4:"timeline",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",20:"period",21:"event"},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,1],[9,1],[18,1],[19,1]],performAction:o(function(m,g,y,v,x,b,w){var C=b.length-1;switch(x){case 1:return b[C-1];case 2:this.$=[];break;case 3:b[C-1].push(b[C]),this.$=b[C-1];break;case 4:case 5:this.$=b[C];break;case 6:case 7:this.$=[];break;case 8:v.getCommonDb().setDiagramTitle(b[C].substr(6)),this.$=b[C].substr(6);break;case 9:this.$=b[C].trim(),v.getCommonDb().setAccTitle(this.$);break;case 10:case 11:this.$=b[C].trim(),v.getCommonDb().setAccDescription(this.$);break;case 12:v.addSection(b[C].substr(8)),this.$=b[C].substr(8);break;case 15:v.addTask(b[C],0,""),this.$=b[C];break;case 16:v.addEvent(b[C].substr(2)),this.$=b[C];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:r,12:n,14:i,16:a,17:s,18:14,19:15,20:l,21:u},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:18,11:r,12:n,14:i,16:a,17:s,18:14,19:15,20:l,21:u},t(e,[2,5]),t(e,[2,6]),t(e,[2,8]),{13:[1,19]},{15:[1,20]},t(e,[2,11]),t(e,[2,12]),t(e,[2,13]),t(e,[2,14]),t(e,[2,15]),t(e,[2,16]),t(e,[2,4]),t(e,[2,9]),t(e,[2,10])],defaultActions:{},parseError:o(function(m,g){if(g.recoverable)this.trace(m);else{var y=new Error(m);throw y.hash=g,y}},"parseError"),parse:o(function(m){var g=this,y=[0],v=[],x=[null],b=[],w=this.table,C="",T=0,E=0,A=0,S=2,_=1,I=b.slice.call(arguments,1),L=Object.create(this.lexer),k={yy:{}};for(var D in this.yy)Object.prototype.hasOwnProperty.call(this.yy,D)&&(k.yy[D]=this.yy[D]);L.setInput(m,k.yy),k.yy.lexer=L,k.yy.parser=this,typeof L.yylloc>"u"&&(L.yylloc={});var R=L.yylloc;b.push(R);var O=L.options&&L.options.ranges;typeof k.yy.parseError=="function"?this.parseError=k.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function M(j){y.length=y.length-2*j,x.length=x.length-j,b.length=b.length-j}o(M,"popStack");function P(){var j;return j=v.pop()||L.lex()||_,typeof j!="number"&&(j instanceof Array&&(v=j,j=v.pop()),j=g.symbols_[j]||j),j}o(P,"lex");for(var B,F,z,$,U,Q,te={},Y,he,Z,ue;;){if(z=y[y.length-1],this.defaultActions[z]?$=this.defaultActions[z]:((B===null||typeof B>"u")&&(B=P()),$=w[z]&&w[z][B]),typeof $>"u"||!$.length||!$[0]){var K="";ue=[];for(Y in w[z])this.terminals_[Y]&&Y>S&&ue.push("'"+this.terminals_[Y]+"'");L.showPosition?K="Parse error on line "+(T+1)+`: -`+L.showPosition()+` -Expecting `+ue.join(", ")+", got '"+(this.terminals_[B]||B)+"'":K="Parse error on line "+(T+1)+": Unexpected "+(B==_?"end of input":"'"+(this.terminals_[B]||B)+"'"),this.parseError(K,{text:L.match,token:this.terminals_[B]||B,line:L.yylineno,loc:R,expected:ue})}if($[0]instanceof Array&&$.length>1)throw new Error("Parse Error: multiple actions possible at state: "+z+", token: "+B);switch($[0]){case 1:y.push(B),x.push(L.yytext),b.push(L.yylloc),y.push($[1]),B=null,F?(B=F,F=null):(E=L.yyleng,C=L.yytext,T=L.yylineno,R=L.yylloc,A>0&&A--);break;case 2:if(he=this.productions_[$[1]][1],te.$=x[x.length-he],te._$={first_line:b[b.length-(he||1)].first_line,last_line:b[b.length-1].last_line,first_column:b[b.length-(he||1)].first_column,last_column:b[b.length-1].last_column},O&&(te._$.range=[b[b.length-(he||1)].range[0],b[b.length-1].range[1]]),Q=this.performAction.apply(te,[C,E,T,k.yy,$[1],x,b].concat(I)),typeof Q<"u")return Q;he&&(y=y.slice(0,-1*he*2),x=x.slice(0,-1*he),b=b.slice(0,-1*he)),y.push(this.productions_[$[1]][0]),x.push(te.$),b.push(te._$),Z=w[y[y.length-2]][y[y.length-1]],y.push(Z);break;case 3:return!0}}return!0},"parse")},f=function(){var p={EOF:1,parseError:o(function(g,y){if(this.yy.parser)this.yy.parser.parseError(g,y);else throw new Error(g)},"parseError"),setInput:o(function(m,g){return this.yy=g||this.yy||{},this._input=m,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},"setInput"),input:o(function(){var m=this._input[0];this.yytext+=m,this.yyleng++,this.offset++,this.match+=m,this.matched+=m;var g=m.match(/(?:\r\n?|\n).*/g);return g?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),m},"input"),unput:o(function(m){var g=m.length,y=m.split(/(?:\r\n?|\n)/g);this._input=m+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-g),this.offset-=g;var v=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),y.length-1&&(this.yylineno-=y.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:y?(y.length===v.length?this.yylloc.first_column:0)+v[v.length-y.length].length-y[0].length:this.yylloc.first_column-g},this.options.ranges&&(this.yylloc.range=[x[0],x[0]+this.yyleng-g]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(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). + ${Nc()} +`,"getStyles"),qpe=bWe});var XP,TWe,jpe,Kpe,wWe,kWe,Xpe,EWe,SWe,Qpe,CWe,z1,Zpe=N(()=>{"use strict";fr();t2();XP=o(function(t,e){return Nd(t,e)},"drawRect"),TWe=o(function(t,e){let n=t.append("circle").attr("cx",e.cx).attr("cy",e.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),i=t.append("g");i.append("circle").attr("cx",e.cx-15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),i.append("circle").attr("cx",e.cx+15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666");function a(u){let h=Sl().startAngle(Math.PI/2).endAngle(3*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+2)+")")}o(a,"smile");function s(u){let h=Sl().startAngle(3*Math.PI/2).endAngle(5*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+7)+")")}o(s,"sad");function l(u){u.append("line").attr("class","mouth").attr("stroke",2).attr("x1",e.cx-5).attr("y1",e.cy+7).attr("x2",e.cx+5).attr("y2",e.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}return o(l,"ambivalent"),e.score>3?a(i):e.score<3?s(i):l(i),n},"drawFace"),jpe=o(function(t,e){let r=t.append("circle");return r.attr("cx",e.cx),r.attr("cy",e.cy),r.attr("class","actor-"+e.pos),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("r",e.r),r.class!==void 0&&r.attr("class",r.class),e.title!==void 0&&r.append("title").text(e.title),r},"drawCircle"),Kpe=o(function(t,e){return XY(t,e)},"drawText"),wWe=o(function(t,e){function r(i,a,s,l,u){return i+","+a+" "+(i+s)+","+a+" "+(i+s)+","+(a+l-u)+" "+(i+s-u*1.2)+","+(a+l)+" "+i+","+(a+l)}o(r,"genPoints");let n=t.append("polygon");n.attr("points",r(e.x,e.y,50,20,7)),n.attr("class","labelBox"),e.y=e.y+e.labelMargin,e.x=e.x+.5*e.labelMargin,Kpe(t,e)},"drawLabel"),kWe=o(function(t,e,r){let n=t.append("g"),i=Al();i.x=e.x,i.y=e.y,i.fill=e.fill,i.width=r.width*e.taskCount+r.diagramMarginX*(e.taskCount-1),i.height=r.height,i.class="journey-section section-type-"+e.num,i.rx=3,i.ry=3,XP(n,i),Qpe(r)(e.text,n,i.x,i.y,i.width,i.height,{class:"journey-section section-type-"+e.num},r,e.colour)},"drawSection"),Xpe=-1,EWe=o(function(t,e,r){let n=e.x+r.width/2,i=t.append("g");Xpe++;let a=300+5*30;i.append("line").attr("id","task"+Xpe).attr("x1",n).attr("y1",e.y).attr("x2",n).attr("y2",a).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),TWe(i,{cx:n,cy:300+(5-e.score)*30,score:e.score});let s=Al();s.x=e.x,s.y=e.y,s.fill=e.fill,s.width=r.width,s.height=r.height,s.class="task task-type-"+e.num,s.rx=3,s.ry=3,XP(i,s);let l=e.x+14;e.people.forEach(u=>{let h=e.actors[u].color,f={cx:l,cy:e.y,r:7,fill:h,stroke:"#000",title:u,pos:e.actors[u].position};jpe(i,f),l+=10}),Qpe(r)(e.task,i,s.x,s.y,s.width,s.height,{class:"task"},r,e.colour)},"drawTask"),SWe=o(function(t,e){iT(t,e)},"drawBackgroundRect"),Qpe=function(){function t(i,a,s,l,u,h,f,d){let p=a.append("text").attr("x",s+u/2).attr("y",l+h/2+5).style("font-color",d).style("text-anchor","middle").text(i);n(p,f)}o(t,"byText");function e(i,a,s,l,u,h,f,d,p){let{taskFontSize:m,taskFontFamily:g}=d,y=i.split(//gi);for(let v=0;v{let a=th[i].color,s={cx:20,cy:n,r:7,fill:a,stroke:"#000",pos:th[i].position};z1.drawCircle(t,s);let l=t.append("text").attr("visibility","hidden").text(i),u=l.node().getBoundingClientRect().width;l.remove();let h=[];if(u<=r)h=[i];else{let f=i.split(" "),d="";l=t.append("text").attr("visibility","hidden"),f.forEach(p=>{let m=d?`${d} ${p}`:p;if(l.text(m),l.node().getBoundingClientRect().width>r){if(d&&h.push(d),d=p,l.text(p),l.node().getBoundingClientRect().width>r){let y="";for(let v of p)y+=v,l.text(y+"-"),l.node().getBoundingClientRect().width>r&&(h.push(y.slice(0,-1)+"-"),y=v);d=y}}else d=m}),d&&h.push(d),l.remove()}h.forEach((f,d)=>{let p={x:40,y:n+7+d*20,fill:"#666",text:f,textMargin:e.boxTextMargin??5},g=z1.drawText(t,p).node().getBoundingClientRect().width;g>h6&&g>e.leftMargin-g&&(h6=g)}),n+=Math.max(20,h.length*20)})}var AWe,th,h6,Ul,_f,DWe,rl,jP,Jpe,LWe,KP,e0e=N(()=>{"use strict";fr();Zpe();Gt();xi();AWe=o(function(t){Object.keys(t).forEach(function(r){Ul[r]=t[r]})},"setConf"),th={},h6=0;o(_We,"drawActorLegend");Ul=me().journey,_f=0,DWe=o(function(t,e,r,n){let i=me(),a=i.journey.titleColor,s=i.journey.titleFontSize,l=i.journey.titleFontFamily,u=i.securityLevel,h;u==="sandbox"&&(h=Ge("#i"+e));let f=u==="sandbox"?Ge(h.nodes()[0].contentDocument.body):Ge("body");rl.init();let d=f.select("#"+e);z1.initGraphics(d);let p=n.db.getTasks(),m=n.db.getDiagramTitle(),g=n.db.getActors();for(let S in th)delete th[S];let y=0;g.forEach(S=>{th[S]={color:Ul.actorColours[y%Ul.actorColours.length],position:y},y++}),_We(d),_f=Ul.leftMargin+h6,rl.insert(0,0,_f,Object.keys(th).length*50),LWe(d,p,0);let v=rl.getBounds();m&&d.append("text").text(m).attr("x",_f).attr("font-size",s).attr("font-weight","bold").attr("y",25).attr("fill",a).attr("font-family",l);let x=v.stopy-v.starty+2*Ul.diagramMarginY,b=_f+v.stopx+2*Ul.diagramMarginX;fn(d,x,b,Ul.useMaxWidth),d.append("line").attr("x1",_f).attr("y1",Ul.height*4).attr("x2",b-_f-4).attr("y2",Ul.height*4).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)");let T=m?70:0;d.attr("viewBox",`${v.startx} -25 ${b} ${x+T}`),d.attr("preserveAspectRatio","xMinYMin meet"),d.attr("height",x+T+25)},"draw"),rl={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],init:o(function(){this.sequenceItems=[],this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0},"init"),updateVal:o(function(t,e,r,n){t[e]===void 0?t[e]=r:t[e]=n(r,t[e])},"updateVal"),updateBounds:o(function(t,e,r,n){let i=me().journey,a=this,s=0;function l(u){return o(function(f){s++;let d=a.sequenceItems.length-s+1;a.updateVal(f,"starty",e-d*i.boxMargin,Math.min),a.updateVal(f,"stopy",n+d*i.boxMargin,Math.max),a.updateVal(rl.data,"startx",t-d*i.boxMargin,Math.min),a.updateVal(rl.data,"stopx",r+d*i.boxMargin,Math.max),u!=="activation"&&(a.updateVal(f,"startx",t-d*i.boxMargin,Math.min),a.updateVal(f,"stopx",r+d*i.boxMargin,Math.max),a.updateVal(rl.data,"starty",e-d*i.boxMargin,Math.min),a.updateVal(rl.data,"stopy",n+d*i.boxMargin,Math.max))},"updateItemBounds")}o(l,"updateFn"),this.sequenceItems.forEach(l())},"updateBounds"),insert:o(function(t,e,r,n){let i=Math.min(t,r),a=Math.max(t,r),s=Math.min(e,n),l=Math.max(e,n);this.updateVal(rl.data,"startx",i,Math.min),this.updateVal(rl.data,"starty",s,Math.min),this.updateVal(rl.data,"stopx",a,Math.max),this.updateVal(rl.data,"stopy",l,Math.max),this.updateBounds(i,s,a,l)},"insert"),bumpVerticalPos:o(function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=this.verticalPos},"bumpVerticalPos"),getVerticalPos:o(function(){return this.verticalPos},"getVerticalPos"),getBounds:o(function(){return this.data},"getBounds")},jP=Ul.sectionFills,Jpe=Ul.sectionColours,LWe=o(function(t,e,r){let n=me().journey,i="",a=n.height*2+n.diagramMarginY,s=r+a,l=0,u="#CCC",h="black",f=0;for(let[d,p]of e.entries()){if(i!==p.section){u=jP[l%jP.length],f=l%jP.length,h=Jpe[l%Jpe.length];let g=0,y=p.section;for(let x=d;x(th[y]&&(g[y]=th[y]),g),{});p.x=d*n.taskMargin+d*n.width+_f,p.y=s,p.width=n.diagramMarginX,p.height=n.diagramMarginY,p.colour=h,p.fill=u,p.num=f,p.actors=m,z1.drawTask(t,p,n),rl.insert(p.x,p.y,p.x+p.width+n.taskMargin,300+5*30)}},"drawTasks"),KP={setConf:AWe,draw:DWe}});var t0e={};ur(t0e,{diagram:()=>RWe});var RWe,r0e=N(()=>{"use strict";Upe();Wpe();Ype();e0e();RWe={parser:Vpe,db:YP,renderer:KP,styles:qpe,init:o(t=>{KP.setConf(t.journey),YP.clear()},"init")}});var ZP,c0e,u0e=N(()=>{"use strict";ZP=function(){var t=o(function(p,m,g,y){for(g=g||{},y=p.length;y--;g[p[y]]=m);return g},"o"),e=[6,8,10,11,12,14,16,17,20,21],r=[1,9],n=[1,10],i=[1,11],a=[1,12],s=[1,13],l=[1,16],u=[1,17],h={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,timeline: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,period_statement:18,event_statement:19,period:20,event:21,$accept:0,$end:1},terminals_:{2:"error",4:"timeline",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",20:"period",21:"event"},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,1],[9,1],[18,1],[19,1]],performAction:o(function(m,g,y,v,x,b,T){var S=b.length-1;switch(x){case 1:return b[S-1];case 2:this.$=[];break;case 3:b[S-1].push(b[S]),this.$=b[S-1];break;case 4:case 5:this.$=b[S];break;case 6:case 7:this.$=[];break;case 8:v.getCommonDb().setDiagramTitle(b[S].substr(6)),this.$=b[S].substr(6);break;case 9:this.$=b[S].trim(),v.getCommonDb().setAccTitle(this.$);break;case 10:case 11:this.$=b[S].trim(),v.getCommonDb().setAccDescription(this.$);break;case 12:v.addSection(b[S].substr(8)),this.$=b[S].substr(8);break;case 15:v.addTask(b[S],0,""),this.$=b[S];break;case 16:v.addEvent(b[S].substr(2)),this.$=b[S];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:r,12:n,14:i,16:a,17:s,18:14,19:15,20:l,21:u},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:18,11:r,12:n,14:i,16:a,17:s,18:14,19:15,20:l,21:u},t(e,[2,5]),t(e,[2,6]),t(e,[2,8]),{13:[1,19]},{15:[1,20]},t(e,[2,11]),t(e,[2,12]),t(e,[2,13]),t(e,[2,14]),t(e,[2,15]),t(e,[2,16]),t(e,[2,4]),t(e,[2,9]),t(e,[2,10])],defaultActions:{},parseError:o(function(m,g){if(g.recoverable)this.trace(m);else{var y=new Error(m);throw y.hash=g,y}},"parseError"),parse:o(function(m){var g=this,y=[0],v=[],x=[null],b=[],T=this.table,S="",w=0,E=0,_=0,C=2,D=1,O=b.slice.call(arguments,1),R=Object.create(this.lexer),k={yy:{}};for(var L in this.yy)Object.prototype.hasOwnProperty.call(this.yy,L)&&(k.yy[L]=this.yy[L]);R.setInput(m,k.yy),k.yy.lexer=R,k.yy.parser=this,typeof R.yylloc>"u"&&(R.yylloc={});var A=R.yylloc;b.push(A);var I=R.options&&R.options.ranges;typeof k.yy.parseError=="function"?this.parseError=k.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function M(j){y.length=y.length-2*j,x.length=x.length-j,b.length=b.length-j}o(M,"popStack");function P(){var j;return j=v.pop()||R.lex()||D,typeof j!="number"&&(j instanceof Array&&(v=j,j=v.pop()),j=g.symbols_[j]||j),j}o(P,"lex");for(var B,F,z,$,U,K,ee={},Y,ce,Z,ue;;){if(z=y[y.length-1],this.defaultActions[z]?$=this.defaultActions[z]:((B===null||typeof B>"u")&&(B=P()),$=T[z]&&T[z][B]),typeof $>"u"||!$.length||!$[0]){var Q="";ue=[];for(Y in T[z])this.terminals_[Y]&&Y>C&&ue.push("'"+this.terminals_[Y]+"'");R.showPosition?Q="Parse error on line "+(w+1)+`: +`+R.showPosition()+` +Expecting `+ue.join(", ")+", got '"+(this.terminals_[B]||B)+"'":Q="Parse error on line "+(w+1)+": Unexpected "+(B==D?"end of input":"'"+(this.terminals_[B]||B)+"'"),this.parseError(Q,{text:R.match,token:this.terminals_[B]||B,line:R.yylineno,loc:A,expected:ue})}if($[0]instanceof Array&&$.length>1)throw new Error("Parse Error: multiple actions possible at state: "+z+", token: "+B);switch($[0]){case 1:y.push(B),x.push(R.yytext),b.push(R.yylloc),y.push($[1]),B=null,F?(B=F,F=null):(E=R.yyleng,S=R.yytext,w=R.yylineno,A=R.yylloc,_>0&&_--);break;case 2:if(ce=this.productions_[$[1]][1],ee.$=x[x.length-ce],ee._$={first_line:b[b.length-(ce||1)].first_line,last_line:b[b.length-1].last_line,first_column:b[b.length-(ce||1)].first_column,last_column:b[b.length-1].last_column},I&&(ee._$.range=[b[b.length-(ce||1)].range[0],b[b.length-1].range[1]]),K=this.performAction.apply(ee,[S,E,w,k.yy,$[1],x,b].concat(O)),typeof K<"u")return K;ce&&(y=y.slice(0,-1*ce*2),x=x.slice(0,-1*ce),b=b.slice(0,-1*ce)),y.push(this.productions_[$[1]][0]),x.push(ee.$),b.push(ee._$),Z=T[y[y.length-2]][y[y.length-1]],y.push(Z);break;case 3:return!0}}return!0},"parse")},f=function(){var p={EOF:1,parseError:o(function(g,y){if(this.yy.parser)this.yy.parser.parseError(g,y);else throw new Error(g)},"parseError"),setInput:o(function(m,g){return this.yy=g||this.yy||{},this._input=m,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},"setInput"),input:o(function(){var m=this._input[0];this.yytext+=m,this.yyleng++,this.offset++,this.match+=m,this.matched+=m;var g=m.match(/(?:\r\n?|\n).*/g);return g?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),m},"input"),unput:o(function(m){var g=m.length,y=m.split(/(?:\r\n?|\n)/g);this._input=m+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-g),this.offset-=g;var v=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),y.length-1&&(this.yylineno-=y.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:y?(y.length===v.length?this.yylloc.first_column:0)+v[v.length-y.length].length-y[0].length:this.yylloc.first_column-g},this.options.ranges&&(this.yylloc.range=[x[0],x[0]+this.yyleng-g]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(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},"reject"),less:o(function(m){this.unput(this.match.slice(m))},"less"),pastInput:o(function(){var m=this.matched.substr(0,this.matched.length-this.match.length);return(m.length>20?"...":"")+m.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var m=this.match;return m.length<20&&(m+=this._input.substr(0,20-m.length)),(m.substr(0,20)+(m.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var m=this.pastInput(),g=new Array(m.length+1).join("-");return m+this.upcomingInput()+` `+g+"^"},"showPosition"),test_match:o(function(m,g){var y,v,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))),v=m[0].match(/(?:\r\n?|\n).*/g),v&&(this.yylineno+=v.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:v?v[v.length-1].length-v[v.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+m[0].length},this.yytext+=m[0],this.match+=m[0],this.matches=m,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(m[0].length),this.matched+=m[0],y=this.performAction.call(this,this.yy,this,g,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),y)return y;if(this._backtrack){for(var b in x)this[b]=x[b];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var m,g,y,v;this._more||(this.yytext="",this.match="");for(var x=this._currentRules(),b=0;bg[0].length)){if(g=y,v=b,this.options.backtrack_lexer){if(m=this.test_match(y,x[b]),m!==!1)return m;if(this._backtrack){g=!1;continue}else return!1}else if(!this.options.flex)break}return g?(m=this.test_match(g,x[v]),m!==!1?m:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var g=this.next();return g||this.lex()},"lex"),begin:o(function(g){this.conditionStack.push(g)},"begin"),popState:o(function(){var g=this.conditionStack.length-1;return g>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(g){return g=this.conditionStack.length-1-Math.abs(g||0),g>=0?this.conditionStack[g]:"INITIAL"},"topState"),pushState:o(function(g){this.begin(g)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(g,y,v,x){var b=x;switch(v){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;break;case 8:return this.popState(),"acc_title_value";break;case 9:return this.begin("acc_descr"),14;break;case 10:return this.popState(),"acc_descr_value";break;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"}},"anonymous"),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]|:(?!\s))+)/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 p}();h.lexer=f;function d(){this.yy={}}return o(d,"Parser"),d.prototype=h,h.Parser=d,new d}();gP.parser=gP;Yde=gP});var vP={};hr(vP,{addEvent:()=>npe,addSection:()=>Jde,addTask:()=>rpe,addTaskOrg:()=>ipe,clear:()=>Zde,default:()=>rHe,getCommonDb:()=>Qde,getSections:()=>epe,getTasks:()=>tpe});var V1,Kde,yP,JS,U1,Qde,Zde,Jde,epe,tpe,rpe,npe,ipe,jde,rHe,ape=N(()=>{"use strict";mi();V1="",Kde=0,yP=[],JS=[],U1=[],Qde=o(()=>ev,"getCommonDb"),Zde=o(function(){yP.length=0,JS.length=0,V1="",U1.length=0,Ar()},"clear"),Jde=o(function(t){V1=t,yP.push(t)},"addSection"),epe=o(function(){return yP},"getSections"),tpe=o(function(){let t=jde(),e=100,r=0;for(;!t&&rr.id===Kde-1).events.push(t)},"addEvent"),ipe=o(function(t){let e={section:V1,type:V1,description:t,task:t,classes:[]};JS.push(e)},"addTaskOrg"),jde=o(function(){let t=o(function(r){return U1[r].processed},"compileTask"),e=!0;for(let[r,n]of U1.entries())t(r),e=e&&n.processed;return e},"compileTasks"),rHe={clear:Zde,getCommonDb:Qde,addSection:Jde,getSections:epe,getTasks:tpe,addTask:rpe,addTaskOrg:ipe,addEvent:npe}});function cpe(t,e){t.each(function(){var r=Ge(this),n=r.text().split(/(\s+|
    )/).reverse(),i,a=[],s=1.1,l=r.attr("y"),u=parseFloat(r.attr("dy")),h=r.text(null).append("tspan").attr("x",0).attr("y",l).attr("dy",u+"em");for(let f=0;fe||i==="
    ")&&(a.pop(),h.text(a.join(" ").trim()),i==="
    "?a=[""]:a=[i],h=r.append("tspan").attr("x",0).attr("y",l).attr("dy",s+"em").text(i))})}var nHe,e6,iHe,aHe,ope,sHe,oHe,spe,lHe,cHe,uHe,xP,lpe,hHe,fHe,dHe,pHe,Cf,upe=N(()=>{"use strict";pr();nHe=12,e6=o(function(t,e){let r=t.append("rect");return r.attr("x",e.x),r.attr("y",e.y),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("width",e.width),r.attr("height",e.height),r.attr("rx",e.rx),r.attr("ry",e.ry),e.class!==void 0&&r.attr("class",e.class),r},"drawRect"),iHe=o(function(t,e){let n=t.append("circle").attr("cx",e.cx).attr("cy",e.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),i=t.append("g");i.append("circle").attr("cx",e.cx-15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),i.append("circle").attr("cx",e.cx+15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666");function a(u){let h=Tl().startAngle(Math.PI/2).endAngle(3*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+2)+")")}o(a,"smile");function s(u){let h=Tl().startAngle(3*Math.PI/2).endAngle(5*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+7)+")")}o(s,"sad");function l(u){u.append("line").attr("class","mouth").attr("stroke",2).attr("x1",e.cx-5).attr("y1",e.cy+7).attr("x2",e.cx+5).attr("y2",e.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}return o(l,"ambivalent"),e.score>3?a(i):e.score<3?s(i):l(i),n},"drawFace"),aHe=o(function(t,e){let r=t.append("circle");return r.attr("cx",e.cx),r.attr("cy",e.cy),r.attr("class","actor-"+e.pos),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("r",e.r),r.class!==void 0&&r.attr("class",r.class),e.title!==void 0&&r.append("title").text(e.title),r},"drawCircle"),ope=o(function(t,e){let r=e.text.replace(//gi," "),n=t.append("text");n.attr("x",e.x),n.attr("y",e.y),n.attr("class","legend"),n.style("text-anchor",e.anchor),e.class!==void 0&&n.attr("class",e.class);let i=n.append("tspan");return i.attr("x",e.x+e.textMargin*2),i.text(r),n},"drawText"),sHe=o(function(t,e){function r(i,a,s,l,u){return i+","+a+" "+(i+s)+","+a+" "+(i+s)+","+(a+l-u)+" "+(i+s-u*1.2)+","+(a+l)+" "+i+","+(a+l)}o(r,"genPoints");let n=t.append("polygon");n.attr("points",r(e.x,e.y,50,20,7)),n.attr("class","labelBox"),e.y=e.y+e.labelMargin,e.x=e.x+.5*e.labelMargin,ope(t,e)},"drawLabel"),oHe=o(function(t,e,r){let n=t.append("g"),i=xP();i.x=e.x,i.y=e.y,i.fill=e.fill,i.width=r.width,i.height=r.height,i.class="journey-section section-type-"+e.num,i.rx=3,i.ry=3,e6(n,i),lpe(r)(e.text,n,i.x,i.y,i.width,i.height,{class:"journey-section section-type-"+e.num},r,e.colour)},"drawSection"),spe=-1,lHe=o(function(t,e,r){let n=e.x+r.width/2,i=t.append("g");spe++;let a=300+5*30;i.append("line").attr("id","task"+spe).attr("x1",n).attr("y1",e.y).attr("x2",n).attr("y2",a).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),iHe(i,{cx:n,cy:300+(5-e.score)*30,score:e.score});let s=xP();s.x=e.x,s.y=e.y,s.fill=e.fill,s.width=r.width,s.height=r.height,s.class="task task-type-"+e.num,s.rx=3,s.ry=3,e6(i,s),lpe(r)(e.task,i,s.x,s.y,s.width,s.height,{class:"task"},r,e.colour)},"drawTask"),cHe=o(function(t,e){e6(t,{x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,class:"rect"}).lower()},"drawBackgroundRect"),uHe=o(function(){return{x:0,y:0,fill:void 0,"text-anchor":"start",width:100,height:100,textMargin:0,rx:0,ry:0}},"getTextObj"),xP=o(function(){return{x:0,y:0,width:100,anchor:"start",height:100,rx:0,ry:0}},"getNoteRect"),lpe=function(){function t(i,a,s,l,u,h,f,d){let p=a.append("text").attr("x",s+u/2).attr("y",l+h/2+5).style("font-color",d).style("text-anchor","middle").text(i);n(p,f)}o(t,"byText");function e(i,a,s,l,u,h,f,d,p){let{taskFontSize:m,taskFontFamily:g}=d,y=i.split(//gi);for(let v=0;v{"use strict";pr();upe();vt();zt();Si();mHe=o(function(t,e,r,n){let i=me(),a=i.leftMargin??50;X.debug("timeline",n.db);let s=i.securityLevel,l;s==="sandbox"&&(l=Ge("#i"+e));let h=(s==="sandbox"?Ge(l.nodes()[0].contentDocument.body):Ge("body")).select("#"+e);h.append("g");let f=n.db.getTasks(),d=n.db.getCommonDb().getDiagramTitle();X.debug("task",f),Cf.initGraphics(h);let p=n.db.getSections();X.debug("sections",p);let m=0,g=0,y=0,v=0,x=50+a,b=50;v=50;let w=0,C=!0;p.forEach(function(_){let I={number:w,descr:_,section:w,width:150,padding:20,maxHeight:m},L=Cf.getVirtualNodeHeight(h,I,i);X.debug("sectionHeight before draw",L),m=Math.max(m,L+20)});let T=0,E=0;X.debug("tasks.length",f.length);for(let[_,I]of f.entries()){let L={number:_,descr:I,section:I.section,width:150,padding:20,maxHeight:g},k=Cf.getVirtualNodeHeight(h,L,i);X.debug("taskHeight before draw",k),g=Math.max(g,k+20),T=Math.max(T,I.events.length);let D=0;for(let R of I.events){let O={descr:R,section:I.section,number:I.section,width:150,padding:20,maxHeight:50};D+=Cf.getVirtualNodeHeight(h,O,i)}I.events.length>0&&(D+=(I.events.length-1)*10),E=Math.max(E,D)}X.debug("maxSectionHeight before draw",m),X.debug("maxTaskHeight before draw",g),p&&p.length>0?p.forEach(_=>{let I=f.filter(R=>R.section===_),L={number:w,descr:_,section:w,width:200*Math.max(I.length,1)-50,padding:20,maxHeight:m};X.debug("sectionNode",L);let k=h.append("g"),D=Cf.drawNode(k,L,w,i);X.debug("sectionNode output",D),k.attr("transform",`translate(${x}, ${v})`),b+=m+50,I.length>0&&hpe(h,I,w,x,b,g,i,T,E,m,!1),x+=200*Math.max(I.length,1),b=v,w++}):(C=!1,hpe(h,f,w,x,b,g,i,T,E,m,!0));let A=h.node().getBBox();X.debug("bounds",A),d&&h.append("text").text(d).attr("x",A.width/2-a).attr("font-size","4ex").attr("font-weight","bold").attr("y",20),y=C?m+g+150:g+100,h.append("g").attr("class","lineWrapper").append("line").attr("x1",a).attr("y1",y).attr("x2",A.width+3*a).attr("y2",y).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)"),_o(void 0,h,i.timeline?.padding??50,i.timeline?.useMaxWidth??!1)},"draw"),hpe=o(function(t,e,r,n,i,a,s,l,u,h,f){for(let d of e){let p={descr:d.task,section:r,number:r,width:150,padding:20,maxHeight:a};X.debug("taskNode",p);let m=t.append("g").attr("class","taskWrapper"),y=Cf.drawNode(m,p,r,s).height;if(X.debug("taskHeight after draw",y),m.attr("transform",`translate(${n}, ${i})`),a=Math.max(a,y),d.events){let v=t.append("g").attr("class","lineWrapper"),x=a;i+=100,x=x+gHe(t,d.events,r,n,i,s),i-=100,v.append("line").attr("x1",n+190/2).attr("y1",i+a).attr("x2",n+190/2).attr("y2",i+a+100+u+100).attr("stroke-width",2).attr("stroke","black").attr("marker-end","url(#arrowhead)").attr("stroke-dasharray","5,5")}n=n+200,f&&!s.timeline?.disableMulticolor&&r++}i=i-10},"drawTasks"),gHe=o(function(t,e,r,n,i,a){let s=0,l=i;i=i+100;for(let u of e){let h={descr:u,section:r,number:r,width:150,padding:20,maxHeight:50};X.debug("eventNode",h);let f=t.append("g").attr("class","eventWrapper"),p=Cf.drawNode(f,h,r,a).height;s=s+p,f.attr("transform",`translate(${n}, ${i})`),i=i+10+p}return i=l,s},"drawEvents"),fpe={setConf:o(()=>{},"setConf"),draw:mHe}});var yHe,vHe,ppe,mpe=N(()=>{"use strict";js();yHe=o(t=>{let e="";for(let r=0;r0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(g){return g=this.conditionStack.length-1-Math.abs(g||0),g>=0?this.conditionStack[g]:"INITIAL"},"topState"),pushState:o(function(g){this.begin(g)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(g,y,v,x){var b=x;switch(v){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;break;case 8:return this.popState(),"acc_title_value";break;case 9:return this.begin("acc_descr"),14;break;case 10:return this.popState(),"acc_descr_value";break;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"}},"anonymous"),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]|:(?!\s))+)/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 p}();h.lexer=f;function d(){this.yy={}}return o(d,"Parser"),d.prototype=h,h.Parser=d,new d}();ZP.parser=ZP;c0e=ZP});var eB={};ur(eB,{addEvent:()=>x0e,addSection:()=>m0e,addTask:()=>v0e,addTaskOrg:()=>b0e,clear:()=>p0e,default:()=>zWe,getCommonDb:()=>d0e,getSections:()=>g0e,getTasks:()=>y0e});var G1,f0e,JP,f6,V1,d0e,p0e,m0e,g0e,y0e,v0e,x0e,b0e,h0e,zWe,T0e=N(()=>{"use strict";ci();G1="",f0e=0,JP=[],f6=[],V1=[],d0e=o(()=>rv,"getCommonDb"),p0e=o(function(){JP.length=0,f6.length=0,G1="",V1.length=0,kr()},"clear"),m0e=o(function(t){G1=t,JP.push(t)},"addSection"),g0e=o(function(){return JP},"getSections"),y0e=o(function(){let t=h0e(),e=100,r=0;for(;!t&&rr.id===f0e-1).events.push(t)},"addEvent"),b0e=o(function(t){let e={section:G1,type:G1,description:t,task:t,classes:[]};f6.push(e)},"addTaskOrg"),h0e=o(function(){let t=o(function(r){return V1[r].processed},"compileTask"),e=!0;for(let[r,n]of V1.entries())t(r),e=e&&n.processed;return e},"compileTasks"),zWe={clear:p0e,getCommonDb:d0e,addSection:m0e,getSections:g0e,getTasks:y0e,addTask:v0e,addTaskOrg:b0e,addEvent:x0e}});function S0e(t,e){t.each(function(){var r=Ge(this),n=r.text().split(/(\s+|
    )/).reverse(),i,a=[],s=1.1,l=r.attr("y"),u=parseFloat(r.attr("dy")),h=r.text(null).append("tspan").attr("x",0).attr("y",l).attr("dy",u+"em");for(let f=0;fe||i==="
    ")&&(a.pop(),h.text(a.join(" ").trim()),i==="
    "?a=[""]:a=[i],h=r.append("tspan").attr("x",0).attr("y",l).attr("dy",s+"em").text(i))})}var GWe,d6,VWe,UWe,k0e,HWe,WWe,w0e,qWe,YWe,XWe,tB,E0e,jWe,KWe,QWe,ZWe,Df,C0e=N(()=>{"use strict";fr();GWe=12,d6=o(function(t,e){let r=t.append("rect");return r.attr("x",e.x),r.attr("y",e.y),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("width",e.width),r.attr("height",e.height),r.attr("rx",e.rx),r.attr("ry",e.ry),e.class!==void 0&&r.attr("class",e.class),r},"drawRect"),VWe=o(function(t,e){let n=t.append("circle").attr("cx",e.cx).attr("cy",e.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),i=t.append("g");i.append("circle").attr("cx",e.cx-15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),i.append("circle").attr("cx",e.cx+15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666");function a(u){let h=Sl().startAngle(Math.PI/2).endAngle(3*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+2)+")")}o(a,"smile");function s(u){let h=Sl().startAngle(3*Math.PI/2).endAngle(5*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+7)+")")}o(s,"sad");function l(u){u.append("line").attr("class","mouth").attr("stroke",2).attr("x1",e.cx-5).attr("y1",e.cy+7).attr("x2",e.cx+5).attr("y2",e.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}return o(l,"ambivalent"),e.score>3?a(i):e.score<3?s(i):l(i),n},"drawFace"),UWe=o(function(t,e){let r=t.append("circle");return r.attr("cx",e.cx),r.attr("cy",e.cy),r.attr("class","actor-"+e.pos),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("r",e.r),r.class!==void 0&&r.attr("class",r.class),e.title!==void 0&&r.append("title").text(e.title),r},"drawCircle"),k0e=o(function(t,e){let r=e.text.replace(//gi," "),n=t.append("text");n.attr("x",e.x),n.attr("y",e.y),n.attr("class","legend"),n.style("text-anchor",e.anchor),e.class!==void 0&&n.attr("class",e.class);let i=n.append("tspan");return i.attr("x",e.x+e.textMargin*2),i.text(r),n},"drawText"),HWe=o(function(t,e){function r(i,a,s,l,u){return i+","+a+" "+(i+s)+","+a+" "+(i+s)+","+(a+l-u)+" "+(i+s-u*1.2)+","+(a+l)+" "+i+","+(a+l)}o(r,"genPoints");let n=t.append("polygon");n.attr("points",r(e.x,e.y,50,20,7)),n.attr("class","labelBox"),e.y=e.y+e.labelMargin,e.x=e.x+.5*e.labelMargin,k0e(t,e)},"drawLabel"),WWe=o(function(t,e,r){let n=t.append("g"),i=tB();i.x=e.x,i.y=e.y,i.fill=e.fill,i.width=r.width,i.height=r.height,i.class="journey-section section-type-"+e.num,i.rx=3,i.ry=3,d6(n,i),E0e(r)(e.text,n,i.x,i.y,i.width,i.height,{class:"journey-section section-type-"+e.num},r,e.colour)},"drawSection"),w0e=-1,qWe=o(function(t,e,r){let n=e.x+r.width/2,i=t.append("g");w0e++;let a=300+5*30;i.append("line").attr("id","task"+w0e).attr("x1",n).attr("y1",e.y).attr("x2",n).attr("y2",a).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),VWe(i,{cx:n,cy:300+(5-e.score)*30,score:e.score});let s=tB();s.x=e.x,s.y=e.y,s.fill=e.fill,s.width=r.width,s.height=r.height,s.class="task task-type-"+e.num,s.rx=3,s.ry=3,d6(i,s),E0e(r)(e.task,i,s.x,s.y,s.width,s.height,{class:"task"},r,e.colour)},"drawTask"),YWe=o(function(t,e){d6(t,{x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,class:"rect"}).lower()},"drawBackgroundRect"),XWe=o(function(){return{x:0,y:0,fill:void 0,"text-anchor":"start",width:100,height:100,textMargin:0,rx:0,ry:0}},"getTextObj"),tB=o(function(){return{x:0,y:0,width:100,anchor:"start",height:100,rx:0,ry:0}},"getNoteRect"),E0e=function(){function t(i,a,s,l,u,h,f,d){let p=a.append("text").attr("x",s+u/2).attr("y",l+h/2+5).style("font-color",d).style("text-anchor","middle").text(i);n(p,f)}o(t,"byText");function e(i,a,s,l,u,h,f,d,p){let{taskFontSize:m,taskFontFamily:g}=d,y=i.split(//gi);for(let v=0;v{"use strict";fr();C0e();yt();Gt();xi();JWe=o(function(t,e,r,n){let i=me(),a=i.timeline?.leftMargin??50;X.debug("timeline",n.db);let s=i.securityLevel,l;s==="sandbox"&&(l=Ge("#i"+e));let h=(s==="sandbox"?Ge(l.nodes()[0].contentDocument.body):Ge("body")).select("#"+e);h.append("g");let f=n.db.getTasks(),d=n.db.getCommonDb().getDiagramTitle();X.debug("task",f),Df.initGraphics(h);let p=n.db.getSections();X.debug("sections",p);let m=0,g=0,y=0,v=0,x=50+a,b=50;v=50;let T=0,S=!0;p.forEach(function(D){let O={number:T,descr:D,section:T,width:150,padding:20,maxHeight:m},R=Df.getVirtualNodeHeight(h,O,i);X.debug("sectionHeight before draw",R),m=Math.max(m,R+20)});let w=0,E=0;X.debug("tasks.length",f.length);for(let[D,O]of f.entries()){let R={number:D,descr:O,section:O.section,width:150,padding:20,maxHeight:g},k=Df.getVirtualNodeHeight(h,R,i);X.debug("taskHeight before draw",k),g=Math.max(g,k+20),w=Math.max(w,O.events.length);let L=0;for(let A of O.events){let I={descr:A,section:O.section,number:O.section,width:150,padding:20,maxHeight:50};L+=Df.getVirtualNodeHeight(h,I,i)}O.events.length>0&&(L+=(O.events.length-1)*10),E=Math.max(E,L)}X.debug("maxSectionHeight before draw",m),X.debug("maxTaskHeight before draw",g),p&&p.length>0?p.forEach(D=>{let O=f.filter(A=>A.section===D),R={number:T,descr:D,section:T,width:200*Math.max(O.length,1)-50,padding:20,maxHeight:m};X.debug("sectionNode",R);let k=h.append("g"),L=Df.drawNode(k,R,T,i);X.debug("sectionNode output",L),k.attr("transform",`translate(${x}, ${v})`),b+=m+50,O.length>0&&A0e(h,O,T,x,b,g,i,w,E,m,!1),x+=200*Math.max(O.length,1),b=v,T++}):(S=!1,A0e(h,f,T,x,b,g,i,w,E,m,!0));let _=h.node().getBBox();X.debug("bounds",_),d&&h.append("text").text(d).attr("x",_.width/2-a).attr("font-size","4ex").attr("font-weight","bold").attr("y",20),y=S?m+g+150:g+100,h.append("g").attr("class","lineWrapper").append("line").attr("x1",a).attr("y1",y).attr("x2",_.width+3*a).attr("y2",y).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)"),Lo(void 0,h,i.timeline?.padding??50,i.timeline?.useMaxWidth??!1)},"draw"),A0e=o(function(t,e,r,n,i,a,s,l,u,h,f){for(let d of e){let p={descr:d.task,section:r,number:r,width:150,padding:20,maxHeight:a};X.debug("taskNode",p);let m=t.append("g").attr("class","taskWrapper"),y=Df.drawNode(m,p,r,s).height;if(X.debug("taskHeight after draw",y),m.attr("transform",`translate(${n}, ${i})`),a=Math.max(a,y),d.events){let v=t.append("g").attr("class","lineWrapper"),x=a;i+=100,x=x+eqe(t,d.events,r,n,i,s),i-=100,v.append("line").attr("x1",n+190/2).attr("y1",i+a).attr("x2",n+190/2).attr("y2",i+a+100+u+100).attr("stroke-width",2).attr("stroke","black").attr("marker-end","url(#arrowhead)").attr("stroke-dasharray","5,5")}n=n+200,f&&!s.timeline?.disableMulticolor&&r++}i=i-10},"drawTasks"),eqe=o(function(t,e,r,n,i,a){let s=0,l=i;i=i+100;for(let u of e){let h={descr:u,section:r,number:r,width:150,padding:20,maxHeight:50};X.debug("eventNode",h);let f=t.append("g").attr("class","eventWrapper"),p=Df.drawNode(f,h,r,a).height;s=s+p,f.attr("transform",`translate(${n}, ${i})`),i=i+10+p}return i=l,s},"drawEvents"),_0e={setConf:o(()=>{},"setConf"),draw:JWe}});var tqe,rqe,L0e,R0e=N(()=>{"use strict";Ks();tqe=o(t=>{let e="";for(let r=0;r` + `}return e},"genSections"),rqe=o(t=>` .edge { stroke-width: 3; } - ${yHe(t)} + ${tqe(t)} .section-root rect, .section-root path, .section-root circle { fill: ${t.git0}; } @@ -1965,18 +1965,18 @@ Expecting `+ue.join(", ")+", got '"+(this.terminals_[B]||B)+"'":K="Parse error o .eventWrapper { filter: brightness(120%); } -`,"getStyles"),ppe=vHe});var gpe={};hr(gpe,{diagram:()=>xHe});var xHe,ype=N(()=>{"use strict";Xde();ape();dpe();mpe();xHe={db:vP,renderer:fpe,parser:Yde,styles:ppe}});var bP,bpe,wpe=N(()=>{"use strict";bP=function(){var t=o(function(C,T,E,A){for(E=E||{},A=C.length;A--;E[C[A]]=T);return E},"o"),e=[1,4],r=[1,13],n=[1,12],i=[1,15],a=[1,16],s=[1,20],l=[1,19],u=[6,7,8],h=[1,26],f=[1,24],d=[1,25],p=[6,7,11],m=[1,6,13,15,16,19,22],g=[1,33],y=[1,34],v=[1,6,7,11,13,15,16,19,22],x={trace:o(function(){},"trace"),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:o(function(T,E,A,S,_,I,L){var k=I.length-1;switch(_){case 6:case 7:return S;case 8:S.getLogger().trace("Stop NL ");break;case 9:S.getLogger().trace("Stop EOF ");break;case 11:S.getLogger().trace("Stop NL2 ");break;case 12:S.getLogger().trace("Stop EOF2 ");break;case 15:S.getLogger().info("Node: ",I[k].id),S.addNode(I[k-1].length,I[k].id,I[k].descr,I[k].type);break;case 16:S.getLogger().trace("Icon: ",I[k]),S.decorateNode({icon:I[k]});break;case 17:case 21:S.decorateNode({class:I[k]});break;case 18:S.getLogger().trace("SPACELIST");break;case 19:S.getLogger().trace("Node: ",I[k].id),S.addNode(0,I[k].id,I[k].descr,I[k].type);break;case 20:S.decorateNode({icon:I[k]});break;case 25:S.getLogger().trace("node found ..",I[k-2]),this.$={id:I[k-1],descr:I[k-1],type:S.getType(I[k-2],I[k])};break;case 26:this.$={id:I[k],descr:I[k],type:S.nodeType.DEFAULT};break;case 27:S.getLogger().trace("node found ..",I[k-3]),this.$={id:I[k-3],descr:I[k-1],type:S.getType(I[k-2],I[k])};break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],8:e},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:e},{6:r,7:[1,10],9:9,12:11,13:n,14:14,15:i,16:a,17:17,18:18,19:s,22:l},t(u,[2,3]),{1:[2,2]},t(u,[2,4]),t(u,[2,5]),{1:[2,6],6:r,12:21,13:n,14:14,15:i,16:a,17:17,18:18,19:s,22:l},{6:r,9:22,12:11,13:n,14:14,15:i,16:a,17:17,18:18,19:s,22:l},{6:h,7:f,10:23,11:d},t(p,[2,22],{17:17,18:18,14:27,15:[1,28],16:[1,29],19:s,22:l}),t(p,[2,18]),t(p,[2,19]),t(p,[2,20]),t(p,[2,21]),t(p,[2,23]),t(p,[2,24]),t(p,[2,26],{19:[1,30]}),{20:[1,31]},{6:h,7:f,10:32,11:d},{1:[2,7],6:r,12:21,13:n,14:14,15:i,16:a,17:17,18:18,19:s,22:l},t(m,[2,14],{7:g,11:y}),t(v,[2,8]),t(v,[2,9]),t(v,[2,10]),t(p,[2,15]),t(p,[2,16]),t(p,[2,17]),{20:[1,35]},{21:[1,36]},t(m,[2,13],{7:g,11:y}),t(v,[2,11]),t(v,[2,12]),{21:[1,37]},t(p,[2,25]),t(p,[2,27])],defaultActions:{2:[2,1],6:[2,2]},parseError:o(function(T,E){if(E.recoverable)this.trace(T);else{var A=new Error(T);throw A.hash=E,A}},"parseError"),parse:o(function(T){var E=this,A=[0],S=[],_=[null],I=[],L=this.table,k="",D=0,R=0,O=0,M=2,P=1,B=I.slice.call(arguments,1),F=Object.create(this.lexer),z={yy:{}};for(var $ in this.yy)Object.prototype.hasOwnProperty.call(this.yy,$)&&(z.yy[$]=this.yy[$]);F.setInput(T,z.yy),z.yy.lexer=F,z.yy.parser=this,typeof F.yylloc>"u"&&(F.yylloc={});var U=F.yylloc;I.push(U);var Q=F.options&&F.options.ranges;typeof z.yy.parseError=="function"?this.parseError=z.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function te(ae){A.length=A.length-2*ae,_.length=_.length-ae,I.length=I.length-ae}o(te,"popStack");function Y(){var ae;return ae=S.pop()||F.lex()||P,typeof ae!="number"&&(ae instanceof Array&&(S=ae,ae=S.pop()),ae=E.symbols_[ae]||ae),ae}o(Y,"lex");for(var he,Z,ue,K,j,ne,ee={},ce,le,J,Se;;){if(ue=A[A.length-1],this.defaultActions[ue]?K=this.defaultActions[ue]:((he===null||typeof he>"u")&&(he=Y()),K=L[ue]&&L[ue][he]),typeof K>"u"||!K.length||!K[0]){var se="";Se=[];for(ce in L[ue])this.terminals_[ce]&&ce>M&&Se.push("'"+this.terminals_[ce]+"'");F.showPosition?se="Parse error on line "+(D+1)+`: +`,"getStyles"),L0e=rqe});var N0e={};ur(N0e,{diagram:()=>nqe});var nqe,M0e=N(()=>{"use strict";u0e();T0e();D0e();R0e();nqe={db:eB,renderer:_0e,parser:c0e,styles:L0e}});var rB,P0e,B0e=N(()=>{"use strict";rB=function(){var t=o(function(S,w,E,_){for(E=E||{},_=S.length;_--;E[S[_]]=w);return E},"o"),e=[1,4],r=[1,13],n=[1,12],i=[1,15],a=[1,16],s=[1,20],l=[1,19],u=[6,7,8],h=[1,26],f=[1,24],d=[1,25],p=[6,7,11],m=[1,6,13,15,16,19,22],g=[1,33],y=[1,34],v=[1,6,7,11,13,15,16,19,22],x={trace:o(function(){},"trace"),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:o(function(w,E,_,C,D,O,R){var k=O.length-1;switch(D){case 6:case 7:return C;case 8:C.getLogger().trace("Stop NL ");break;case 9:C.getLogger().trace("Stop EOF ");break;case 11:C.getLogger().trace("Stop NL2 ");break;case 12:C.getLogger().trace("Stop EOF2 ");break;case 15:C.getLogger().info("Node: ",O[k].id),C.addNode(O[k-1].length,O[k].id,O[k].descr,O[k].type);break;case 16:C.getLogger().trace("Icon: ",O[k]),C.decorateNode({icon:O[k]});break;case 17:case 21:C.decorateNode({class:O[k]});break;case 18:C.getLogger().trace("SPACELIST");break;case 19:C.getLogger().trace("Node: ",O[k].id),C.addNode(0,O[k].id,O[k].descr,O[k].type);break;case 20:C.decorateNode({icon:O[k]});break;case 25:C.getLogger().trace("node found ..",O[k-2]),this.$={id:O[k-1],descr:O[k-1],type:C.getType(O[k-2],O[k])};break;case 26:this.$={id:O[k],descr:O[k],type:C.nodeType.DEFAULT};break;case 27:C.getLogger().trace("node found ..",O[k-3]),this.$={id:O[k-3],descr:O[k-1],type:C.getType(O[k-2],O[k])};break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],8:e},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:e},{6:r,7:[1,10],9:9,12:11,13:n,14:14,15:i,16:a,17:17,18:18,19:s,22:l},t(u,[2,3]),{1:[2,2]},t(u,[2,4]),t(u,[2,5]),{1:[2,6],6:r,12:21,13:n,14:14,15:i,16:a,17:17,18:18,19:s,22:l},{6:r,9:22,12:11,13:n,14:14,15:i,16:a,17:17,18:18,19:s,22:l},{6:h,7:f,10:23,11:d},t(p,[2,22],{17:17,18:18,14:27,15:[1,28],16:[1,29],19:s,22:l}),t(p,[2,18]),t(p,[2,19]),t(p,[2,20]),t(p,[2,21]),t(p,[2,23]),t(p,[2,24]),t(p,[2,26],{19:[1,30]}),{20:[1,31]},{6:h,7:f,10:32,11:d},{1:[2,7],6:r,12:21,13:n,14:14,15:i,16:a,17:17,18:18,19:s,22:l},t(m,[2,14],{7:g,11:y}),t(v,[2,8]),t(v,[2,9]),t(v,[2,10]),t(p,[2,15]),t(p,[2,16]),t(p,[2,17]),{20:[1,35]},{21:[1,36]},t(m,[2,13],{7:g,11:y}),t(v,[2,11]),t(v,[2,12]),{21:[1,37]},t(p,[2,25]),t(p,[2,27])],defaultActions:{2:[2,1],6:[2,2]},parseError:o(function(w,E){if(E.recoverable)this.trace(w);else{var _=new Error(w);throw _.hash=E,_}},"parseError"),parse:o(function(w){var E=this,_=[0],C=[],D=[null],O=[],R=this.table,k="",L=0,A=0,I=0,M=2,P=1,B=O.slice.call(arguments,1),F=Object.create(this.lexer),z={yy:{}};for(var $ in this.yy)Object.prototype.hasOwnProperty.call(this.yy,$)&&(z.yy[$]=this.yy[$]);F.setInput(w,z.yy),z.yy.lexer=F,z.yy.parser=this,typeof F.yylloc>"u"&&(F.yylloc={});var U=F.yylloc;O.push(U);var K=F.options&&F.options.ranges;typeof z.yy.parseError=="function"?this.parseError=z.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ee(ae){_.length=_.length-2*ae,D.length=D.length-ae,O.length=O.length-ae}o(ee,"popStack");function Y(){var ae;return ae=C.pop()||F.lex()||P,typeof ae!="number"&&(ae instanceof Array&&(C=ae,ae=C.pop()),ae=E.symbols_[ae]||ae),ae}o(Y,"lex");for(var ce,Z,ue,Q,j,ne,te={},he,le,J,Se;;){if(ue=_[_.length-1],this.defaultActions[ue]?Q=this.defaultActions[ue]:((ce===null||typeof ce>"u")&&(ce=Y()),Q=R[ue]&&R[ue][ce]),typeof Q>"u"||!Q.length||!Q[0]){var se="";Se=[];for(he in R[ue])this.terminals_[he]&&he>M&&Se.push("'"+this.terminals_[he]+"'");F.showPosition?se="Parse error on line "+(L+1)+`: `+F.showPosition()+` -Expecting `+Se.join(", ")+", got '"+(this.terminals_[he]||he)+"'":se="Parse error on line "+(D+1)+": Unexpected "+(he==P?"end of input":"'"+(this.terminals_[he]||he)+"'"),this.parseError(se,{text:F.match,token:this.terminals_[he]||he,line:F.yylineno,loc:U,expected:Se})}if(K[0]instanceof Array&&K.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ue+", token: "+he);switch(K[0]){case 1:A.push(he),_.push(F.yytext),I.push(F.yylloc),A.push(K[1]),he=null,Z?(he=Z,Z=null):(R=F.yyleng,k=F.yytext,D=F.yylineno,U=F.yylloc,O>0&&O--);break;case 2:if(le=this.productions_[K[1]][1],ee.$=_[_.length-le],ee._$={first_line:I[I.length-(le||1)].first_line,last_line:I[I.length-1].last_line,first_column:I[I.length-(le||1)].first_column,last_column:I[I.length-1].last_column},Q&&(ee._$.range=[I[I.length-(le||1)].range[0],I[I.length-1].range[1]]),ne=this.performAction.apply(ee,[k,R,D,z.yy,K[1],_,I].concat(B)),typeof ne<"u")return ne;le&&(A=A.slice(0,-1*le*2),_=_.slice(0,-1*le),I=I.slice(0,-1*le)),A.push(this.productions_[K[1]][0]),_.push(ee.$),I.push(ee._$),J=L[A[A.length-2]][A[A.length-1]],A.push(J);break;case 3:return!0}}return!0},"parse")},b=function(){var C={EOF:1,parseError:o(function(E,A){if(this.yy.parser)this.yy.parser.parseError(E,A);else throw new Error(E)},"parseError"),setInput:o(function(T,E){return this.yy=E||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},"setInput"),input:o(function(){var T=this._input[0];this.yytext+=T,this.yyleng++,this.offset++,this.match+=T,this.matched+=T;var E=T.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),T},"input"),unput:o(function(T){var E=T.length,A=T.split(/(?:\r\n?|\n)/g);this._input=T+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-E),this.offset-=E;var S=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),A.length-1&&(this.yylineno-=A.length-1);var _=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:A?(A.length===S.length?this.yylloc.first_column:0)+S[S.length-A.length].length-A[0].length:this.yylloc.first_column-E},this.options.ranges&&(this.yylloc.range=[_[0],_[0]+this.yyleng-E]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(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},"reject"),less:o(function(T){this.unput(this.match.slice(T))},"less"),pastInput:o(function(){var T=this.matched.substr(0,this.matched.length-this.match.length);return(T.length>20?"...":"")+T.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(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,"")},"upcomingInput"),showPosition:o(function(){var T=this.pastInput(),E=new Array(T.length+1).join("-");return T+this.upcomingInput()+` -`+E+"^"},"showPosition"),test_match:o(function(T,E){var A,S,_;if(this.options.backtrack_lexer&&(_={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&&(_.yylloc.range=this.yylloc.range.slice(0))),S=T[0].match(/(?:\r\n?|\n).*/g),S&&(this.yylineno+=S.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:S?S[S.length-1].length-S[S.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],A=this.performAction.call(this,this.yy,this,E,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),A)return A;if(this._backtrack){for(var I in _)this[I]=_[I];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var T,E,A,S;this._more||(this.yytext="",this.match="");for(var _=this._currentRules(),I=0;I<_.length;I++)if(A=this._input.match(this.rules[_[I]]),A&&(!E||A[0].length>E[0].length)){if(E=A,S=I,this.options.backtrack_lexer){if(T=this.test_match(A,_[I]),T!==!1)return T;if(this._backtrack){E=!1;continue}else return!1}else if(!this.options.flex)break}return E?(T=this.test_match(E,_[S]),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})},"next"),lex:o(function(){var E=this.next();return E||this.lex()},"lex"),begin:o(function(E){this.conditionStack.push(E)},"begin"),popState:o(function(){var E=this.conditionStack.length-1;return E>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(E){return E=this.conditionStack.length-1-Math.abs(E||0),E>=0?this.conditionStack[E]:"INITIAL"},"topState"),pushState:o(function(E){this.begin(E)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(E,A,S,_){var I=_;switch(S){case 0:return E.getLogger().trace("Found comment",A.yytext),6;break;case 1:return 8;case 2:this.begin("CLASS");break;case 3:return this.popState(),16;break;case 4:this.popState();break;case 5:E.getLogger().trace("Begin icon"),this.begin("ICON");break;case 6:return E.getLogger().trace("SPACELINE"),6;break;case 7:return 7;case 8:return 15;case 9:E.getLogger().trace("end icon"),this.popState();break;case 10:return E.getLogger().trace("Exploding node"),this.begin("NODE"),19;break;case 11:return E.getLogger().trace("Cloud"),this.begin("NODE"),19;break;case 12:return E.getLogger().trace("Explosion Bang"),this.begin("NODE"),19;break;case 13:return E.getLogger().trace("Cloud Bang"),this.begin("NODE"),19;break;case 14:return this.begin("NODE"),19;break;case 15:return this.begin("NODE"),19;break;case 16:return this.begin("NODE"),19;break;case 17:return this.begin("NODE"),19;break;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:E.getLogger().trace("Starting NSTR"),this.begin("NSTR");break;case 25:return E.getLogger().trace("description:",A.yytext),"NODE_DESCR";break;case 26:this.popState();break;case 27:return this.popState(),E.getLogger().trace("node end ))"),"NODE_DEND";break;case 28:return this.popState(),E.getLogger().trace("node end )"),"NODE_DEND";break;case 29:return this.popState(),E.getLogger().trace("node end ...",A.yytext),"NODE_DEND";break;case 30:return this.popState(),E.getLogger().trace("node end (("),"NODE_DEND";break;case 31:return this.popState(),E.getLogger().trace("node end (-"),"NODE_DEND";break;case 32:return this.popState(),E.getLogger().trace("node end (-"),"NODE_DEND";break;case 33:return this.popState(),E.getLogger().trace("node end (("),"NODE_DEND";break;case 34:return this.popState(),E.getLogger().trace("node end (("),"NODE_DEND";break;case 35:return E.getLogger().trace("Long description:",A.yytext),20;break;case 36:return E.getLogger().trace("Long description:",A.yytext),20;break}},"anonymous"),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 C}();x.lexer=b;function w(){this.yy={}}return o(w,"Parser"),w.prototype=x,x.Parser=w,new w}();bP.parser=bP;bpe=bP});var Gl,Tpe,wP,kHe,EHe,SHe,CHe,Ui,AHe,_He,DHe,LHe,RHe,NHe,MHe,kpe,Epe=N(()=>{"use strict";zt();dr();vt();Ya();Gl=[],Tpe=0,wP={},kHe=o(()=>{Gl=[],Tpe=0,wP={}},"clear"),EHe=o(function(t){for(let e=Gl.length-1;e>=0;e--)if(Gl[e].levelGl.length>0?Gl[0]:null,"getMindmap"),CHe=o((t,e,r,n)=>{X.info("addNode",t,e,r,n);let i=me(),a=i.mindmap?.padding??lr.mindmap.padding;switch(n){case Ui.ROUNDED_RECT:case Ui.RECT:case Ui.HEXAGON:a*=2}let s={id:Tpe++,nodeId:Tr(e,i),level:t,descr:Tr(r,i),type:n,children:[],width:i.mindmap?.maxNodeWidth??lr.mindmap.maxNodeWidth,padding:a},l=EHe(t);if(l)l.children.push(s),Gl.push(s);else if(Gl.length===0)Gl.push(s);else throw new Error('There can be only one root. No parent could be found for ("'+s.descr+'")')},"addNode"),Ui={DEFAULT:0,NO_BORDER:0,ROUNDED_RECT:1,RECT:2,CIRCLE:3,CLOUD:4,BANG:5,HEXAGON:6},AHe=o((t,e)=>{switch(X.debug("In get type",t,e),t){case"[":return Ui.RECT;case"(":return e===")"?Ui.ROUNDED_RECT:Ui.CLOUD;case"((":return Ui.CIRCLE;case")":return Ui.CLOUD;case"))":return Ui.BANG;case"{{":return Ui.HEXAGON;default:return Ui.DEFAULT}},"getType"),_He=o((t,e)=>{wP[t]=e},"setElementForId"),DHe=o(t=>{if(!t)return;let e=me(),r=Gl[Gl.length-1];t.icon&&(r.icon=Tr(t.icon,e)),t.class&&(r.class=Tr(t.class,e))},"decorateNode"),LHe=o(t=>{switch(t){case Ui.DEFAULT:return"no-border";case Ui.RECT:return"rect";case Ui.ROUNDED_RECT:return"rounded-rect";case Ui.CIRCLE:return"circle";case Ui.CLOUD:return"cloud";case Ui.BANG:return"bang";case Ui.HEXAGON:return"hexgon";default:return"no-border"}},"type2Str"),RHe=o(()=>X,"getLogger"),NHe=o(t=>wP[t],"getElementById"),MHe={clear:kHe,addNode:CHe,getMindmap:SHe,nodeType:Ui,getType:AHe,setElementForId:_He,decorateNode:DHe,type2Str:LHe,getLogger:RHe,getElementById:NHe},kpe=MHe});function qi(t){"@babel/helpers - typeof";return qi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},qi(t)}function $f(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function Spe(t,e){for(var r=0;rt.length)&&(e=t.length);for(var r=0,n=new Array(e);r=t.length?{done:!0}:{done:!1,value:t[n++]}},"n"),e:o(function(u){throw u},"e"),f:i}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var a=!0,s=!1,l;return{s:o(function(){r=r.call(t)},"s"),n:o(function(){var u=r.next();return a=u.done,u},"n"),e:o(function(u){s=!0,l=u},"e"),f:o(function(){try{!a&&r.return!=null&&r.return()}finally{if(s)throw l}},"f")}}function lWe(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}function cWe(t,e){return e={exports:{}},t(e,e.exports),e.exports}function gWe(t){for(var e=t.length;e--&&mWe.test(t.charAt(e)););return e}function xWe(t){return t&&t.slice(0,yWe(t)+1).replace(vWe,"")}function EWe(t){var e=TWe.call(t,Ib),r=t[Ib];try{t[Ib]=void 0;var n=!0}catch{}var i=kWe.call(t);return n&&(e?t[Ib]=r:delete t[Ib]),i}function _We(t){return AWe.call(t)}function NWe(t){return t==null?t===void 0?RWe:LWe:_pe&&_pe in Object(t)?SWe(t):DWe(t)}function MWe(t){return t!=null&&typeof t=="object"}function PWe(t){return typeof t=="symbol"||IWe(t)&&tme(t)==OWe}function GWe(t){if(typeof t=="number")return t;if(c4(t))return Dpe;if(Yp(t)){var e=typeof t.valueOf=="function"?t.valueOf():t;t=Yp(e)?e+"":e}if(typeof t!="string")return t===0?t:+t;t=bWe(t);var r=FWe.test(t);return r||$We.test(t)?zWe(t.slice(2),r?2:8):BWe.test(t)?Dpe:+t}function WWe(t,e,r){var n,i,a,s,l,u,h=0,f=!1,d=!1,p=!0;if(typeof t!="function")throw new TypeError(VWe);e=Lpe(e)||0,Yp(r)&&(f=!!r.leading,d="maxWait"in r,a=d?UWe(Lpe(r.maxWait)||0,e):a,p="trailing"in r?!!r.trailing:p);function m(E){var A=n,S=i;return n=i=void 0,h=E,s=t.apply(S,A),s}o(m,"invokeFunc");function g(E){return h=E,l=setTimeout(x,e),f?m(E):s}o(g,"leadingEdge");function y(E){var A=E-u,S=E-h,_=e-A;return d?HWe(_,a-S):_}o(y,"remainingWait");function v(E){var A=E-u,S=E-h;return u===void 0||A>=e||A<0||d&&S>=a}o(v,"shouldInvoke");function x(){var E=TP();if(v(E))return b(E);l=setTimeout(x,y(E))}o(x,"timerExpired");function b(E){return l=void 0,p&&n?m(E):(n=i=void 0,s)}o(b,"trailingEdge");function w(){l!==void 0&&clearTimeout(l),h=0,n=u=i=l=void 0}o(w,"cancel");function C(){return l===void 0?s:b(TP())}o(C,"flush");function T(){var E=TP(),A=v(E);if(n=arguments,i=this,u=E,A){if(l===void 0)return g(u);if(d)return clearTimeout(l),l=setTimeout(x,e),m(u)}return l===void 0&&(l=setTimeout(x,e)),s}return o(T,"debounced"),T.cancel=w,T.flush=C,T}function z6(t,e,r,n,i,a){var s;return si(t)?s=t:s=iy[t]||iy.euclidean,e===0&&si(t)?s(i,a):s(e,r,n,i,a)}function BYe(t,e){if(G6(t))return!1;var r=typeof t;return r=="number"||r=="symbol"||r=="boolean"||t==null||c4(t)?!0:PYe.test(t)||!OYe.test(t)||e!=null&&t in Object(e)}function UYe(t){if(!Yp(t))return!1;var e=tme(t);return e==zYe||e==GYe||e==$Ye||e==VYe}function qYe(t){return!!Kpe&&Kpe in t}function KYe(t){if(t!=null){try{return jYe.call(t)}catch{}try{return t+""}catch{}}return""}function aXe(t){if(!Yp(t)||YYe(t))return!1;var e=HYe(t)?iXe:JYe;return e.test(QYe(t))}function oXe(t,e){return t?.[e]}function cXe(t,e){var r=lXe(t,e);return sXe(r)?r:void 0}function hXe(){this.__data__=r4?r4(null):{},this.size=0}function dXe(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}function vXe(t){var e=this.__data__;if(r4){var r=e[t];return r===mXe?void 0:r}return yXe.call(e,t)?e[t]:void 0}function TXe(t){var e=this.__data__;return r4?e[t]!==void 0:wXe.call(e,t)}function SXe(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=r4&&e===void 0?EXe:e,this}function ly(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e-1}function $Xe(t,e){var r=this.__data__,n=V6(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this}function cy(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e-1&&t%1==0&&t0;){var f=i.shift();e(f),a.add(f.id()),l&&n(i,a,f)}return t}function Ime(t,e,r){if(r.isParent())for(var n=r._private.children,i=0;i0&&arguments[0]!==void 0?arguments[0]:kKe,e=arguments.length>1?arguments[1]:void 0,r=0;r0?k=R:L=R;while(Math.abs(D)>s&&++O=a?b(I,O):M===0?O:C(I,L,L+h)}o(T,"getTForX");var E=!1;function A(){E=!0,(t!==e||r!==n)&&w()}o(A,"precompute");var S=o(function(L){return E||A(),t===e&&r===n?L:L===0?0:L===1?1:v(T(L),e,n)},"f");S.getControlPoints=function(){return[{x:t,y:e},{x:r,y:n}]};var _="generateBezier("+[t,e,r,n]+")";return S.toString=function(){return _},S}function m0e(t,e,r,n,i){if(n===1||e===r)return r;var a=i(e,r,n);return t==null||((t.roundValue||t.color)&&(a=Math.round(a)),t.min!==void 0&&(a=Math.max(a,t.min)),t.max!==void 0&&(a=Math.min(a,t.max))),a}function g0e(t,e){return t.pfValue!=null||t.value!=null?t.pfValue!=null&&(e==null||e.type.units!=="%")?t.pfValue:t.value:t}function q1(t,e,r,n,i){var a=i!=null?i.type:null;r<0?r=0:r>1&&(r=1);var s=g0e(t,i),l=g0e(e,i);if(Ct(s)&&Ct(l))return m0e(a,s,l,r,n);if(En(s)&&En(l)){for(var u=[],h=0;h0?(m==="spring"&&g.push(s.duration),s.easingImpl=x6[m].apply(null,g)):s.easingImpl=x6[m]}var y=s.easingImpl,v;if(s.duration===0?v=1:v=(r-u)/s.duration,s.applying&&(v=s.progress),v<0?v=0:v>1&&(v=1),s.delay==null){var x=s.startPosition,b=s.position;if(b&&i&&!t.locked()){var w={};Fb(x.x,b.x)&&(w.x=q1(x.x,b.x,v,y)),Fb(x.y,b.y)&&(w.y=q1(x.y,b.y,v,y)),t.position(w)}var C=s.startPan,T=s.pan,E=a.pan,A=T!=null&&n;A&&(Fb(C.x,T.x)&&(E.x=q1(C.x,T.x,v,y)),Fb(C.y,T.y)&&(E.y=q1(C.y,T.y,v,y)),t.emit("pan"));var S=s.startZoom,_=s.zoom,I=_!=null&&n;I&&(Fb(S,_)&&(a.zoom=e4(a.minZoom,q1(S,_,v,y),a.maxZoom)),t.emit("zoom")),(A||I)&&t.emit("viewport");var L=s.style;if(L&&L.length>0&&i){for(var k=0;k=0;A--){var S=E[A];S()}E.splice(0,E.length)},"callbacks"),b=m.length-1;b>=0;b--){var w=m[b],C=w._private;if(C.stopped){m.splice(b,1),C.hooked=!1,C.playing=!1,C.started=!1,x(C.frames);continue}!C.playing&&!C.applying||(C.playing&&C.applying&&(C.applying=!1),C.started||BKe(f,w,t),PKe(f,w,t,d),C.applying&&(C.applying=!1),x(C.frames),C.step!=null&&C.step(t),w.completed()&&(m.splice(b,1),C.hooked=!1,C.playing=!1,C.started=!1,x(C.completes)),y=!0)}return!d&&m.length===0&&g.length===0&&n.push(f),y}o(i,"stepOne");for(var a=!1,s=0;s0?e.notify("draw",r):e.notify("draw")),r.unmerge(n),e.emit("step")}function Qme(t){this.options=rr({},WKe,qKe,t)}function Zme(t){this.options=rr({},YKe,t)}function Jme(t){this.options=rr({},XKe,t)}function K6(t){this.options=rr({},jKe,t),this.options.layout=this;var e=this.options.eles.nodes(),r=this.options.eles.edges(),n=r.filter(function(i){var a=i.source().data("id"),s=i.target().data("id"),l=e.some(function(h){return h.data("id")===a}),u=e.some(function(h){return h.data("id")===s});return!l||!u});this.options.eles=this.options.eles.not(n)}function tge(t){this.options=rr({},fQe,t)}function xB(t){this.options=rr({},dQe,t)}function rge(t){this.options=rr({},pQe,t)}function nge(t){this.options=rr({},mQe,t)}function ige(t){this.options=t,this.notifications=0}function oge(t,e){e.radius===0?t.lineTo(e.cx,e.cy):t.arc(e.cx,e.cy,e.radius,e.startAngle,e.endAngle,e.counterClockwise)}function wB(t,e,r,n){var i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0;return n===0||e.radius===0?{cx:e.x,cy:e.y,radius:0,startX:e.x,startY:e.y,stopX:e.x,stopY:e.y,startAngle:void 0,endAngle:void 0,counterClockwise:void 0}:(vQe(t,e,r,n,i),{cx:YP,cy:XP,radius:Hp,startX:age,startY:sge,stopX:jP,stopY:KP,startAngle:Kc.ang+Math.PI/2*Wp,endAngle:el.ang-Math.PI/2*Wp,counterClockwise:T6})}function lge(t){var e=[];if(t!=null){for(var r=0;r5&&arguments[5]!==void 0?arguments[5]:5,s=arguments.length>6?arguments[6]:void 0;t.beginPath(),t.moveTo(e+a,r),t.lineTo(e+n-a,r),t.quadraticCurveTo(e+n,r,e+n,r+a),t.lineTo(e+n,r+i-a),t.quadraticCurveTo(e+n,r+i,e+n-a,r+i),t.lineTo(e+a,r+i),t.quadraticCurveTo(e,r+i,e,r+i-a),t.lineTo(e,r+a),t.quadraticCurveTo(e,r,e+a,r),t.closePath(),s?t.stroke():t.fill()}function P0e(t,e,r){var n=t.createShader(e);if(t.shaderSource(n,r),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw new Error(t.getShaderInfoLog(n));return n}function aZe(t,e,r){var n=P0e(t,t.VERTEX_SHADER,e),i=P0e(t,t.FRAGMENT_SHADER,r),a=t.createProgram();if(t.attachShader(a,n),t.attachShader(a,i),t.linkProgram(a),!t.getProgramParameter(a,t.LINK_STATUS))throw new Error("Could not initialize shaders");return a}function sZe(t,e,r){r===void 0&&(r=e);var n=t.makeOffscreenCanvas(e,r),i=n.context=n.getContext("2d");return n.clear=function(){return i.clearRect(0,0,n.width,n.height)},n.clear(),n}function EB(t){var e=t.pixelRatio,r=t.cy.zoom(),n=t.cy.pan();return{zoom:r*e,pan:{x:n.x*e,y:n.y*e}}}function OP(t,e,r,n,i){var a=n*r+e.x,s=i*r+e.y;return s=Math.round(t.canvasHeight-s),[a,s]}function d6(t,e,r){var n=t[0]/255,i=t[1]/255,a=t[2]/255,s=e,l=r||new Array(4);return l[0]=n*s,l[1]=i*s,l[2]=a*s,l[3]=s,l}function p6(t,e){var r=e||new Array(4);return r[0]=(t>>0&255)/255,r[1]=(t>>8&255)/255,r[2]=(t>>16&255)/255,r[3]=(t>>24&255)/255,r}function oZe(t){return t[0]+(t[1]<<8)+(t[2]<<16)+(t[3]<<24)}function lZe(t,e){var r=t.createTexture();return r.buffer=function(n){t.bindTexture(t.TEXTURE_2D,r),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR_MIPMAP_NEAREST),t.pixelStorei(t.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,n),t.generateMipmap(t.TEXTURE_2D),t.bindTexture(t.TEXTURE_2D,null)},r.deleteTexture=function(){t.deleteTexture(r)},r}function wge(t,e){switch(e){case"float":return[1,t.FLOAT,4];case"vec2":return[2,t.FLOAT,4];case"vec3":return[3,t.FLOAT,4];case"vec4":return[4,t.FLOAT,4];case"int":return[1,t.INT,4];case"ivec2":return[2,t.INT,4]}}function Tge(t,e,r){switch(e){case t.FLOAT:return new Float32Array(r);case t.INT:return new Int32Array(r)}}function cZe(t,e,r,n,i,a){switch(e){case t.FLOAT:return new Float32Array(r.buffer,a*n,i);case t.INT:return new Int32Array(r.buffer,a*n,i)}}function uZe(t,e,r,n){var i=wge(t,e),a=Di(i,2),s=a[0],l=a[1],u=Tge(t,l,n),h=t.createBuffer();return t.bindBuffer(t.ARRAY_BUFFER,h),t.bufferData(t.ARRAY_BUFFER,u,t.STATIC_DRAW),l===t.FLOAT?t.vertexAttribPointer(r,s,l,!1,0,0):l===t.INT&&t.vertexAttribIPointer(r,s,l,0,0),t.enableVertexAttribArray(r),t.bindBuffer(t.ARRAY_BUFFER,null),h}function go(t,e,r,n){var i=wge(t,r),a=Di(i,3),s=a[0],l=a[1],u=a[2],h=Tge(t,l,e*s),f=s*u,d=t.createBuffer();t.bindBuffer(t.ARRAY_BUFFER,d),t.bufferData(t.ARRAY_BUFFER,e*f,t.DYNAMIC_DRAW),t.enableVertexAttribArray(n),l===t.FLOAT?t.vertexAttribPointer(n,s,l,!1,f,0):l===t.INT&&t.vertexAttribIPointer(n,s,l,f,0),t.vertexAttribDivisor(n,1),t.bindBuffer(t.ARRAY_BUFFER,null);for(var p=new Array(e),m=0;mgge?(TZe(t),e.call(t,a)):(kZe(t),Age(t,a,jb.SCREEN)))}}{var r=t.matchCanvasSize;t.matchCanvasSize=function(a){r.call(t,a),t.pickingFrameBuffer.setFramebufferAttachmentSizes(t.canvasWidth,t.canvasHeight),t.pickingFrameBuffer.needsDraw=!0}}t.findNearestElements=function(a,s,l,u){return DZe(t,a,s)};{var n=t.invalidateCachedZSortedEles;t.invalidateCachedZSortedEles=function(){n.call(t),t.pickingFrameBuffer.needsDraw=!0}}{var i=t.notify;t.notify=function(a,s){i.call(t,a,s),a==="viewport"||a==="bounds"?t.pickingFrameBuffer.needsDraw=!0:a==="background"&&t.eleDrawing.invalidate(s,{type:"node-body"})}}}function TZe(t){var e=t.data.contexts[t.WEBGL];e.clear(e.COLOR_BUFFER_BIT|e.DEPTH_BUFFER_BIT)}function kZe(t){var e=o(function(n){n.save(),n.setTransform(1,0,0,1,0,0),n.clearRect(0,0,t.canvasWidth,t.canvasHeight),n.restore()},"clear");e(t.data.contexts[t.NODE]),e(t.data.contexts[t.DRAG])}function EZe(t){var e=t.canvasWidth,r=t.canvasHeight,n=EB(t),i=n.pan,a=n.zoom,s=Xb();O6(s,s,[i.x,i.y]),SB(s,s,[a,a]);var l=Xb();dZe(l,e,r);var u=Xb();return fZe(u,l,s),u}function Cge(t,e){var r=t.canvasWidth,n=t.canvasHeight,i=EB(t),a=i.pan,s=i.zoom;e.setTransform(1,0,0,1,0,0),e.clearRect(0,0,r,n),e.translate(a.x,a.y),e.scale(s,s)}function SZe(t,e){t.drawSelectionRectangle(e,function(r){return Cge(t,r)})}function CZe(t){var e=t.data.contexts[t.NODE];e.save(),Cge(t,e),e.strokeStyle="rgba(0, 0, 0, 0.3)",e.beginPath(),e.moveTo(-1e3,0),e.lineTo(1e3,0),e.stroke(),e.beginPath(),e.moveTo(0,-1e3),e.lineTo(0,1e3),e.stroke(),e.restore()}function AZe(t){var e=o(function(i,a,s){for(var l=i.atlasManager.getRenderTypeOpts(a),u=t.data.contexts[t.NODE],h=.125,f=l.atlasCollection.atlases,d=0;d=0&&k.add(O)}return k}function DZe(t,e,r){var n=_Ze(t,e,r),i=t.getCachedZSortedEles(),a,s,l=yo(n),u;try{for(l.s();!(u=l.n()).done;){var h=u.value,f=i[h];if(!a&&f.isNode()&&(a=f),!s&&f.isEdge()&&(s=f),a&&s)break}}catch(d){l.e(d)}finally{l.f()}return[a,s].filter(Boolean)}function Age(t,e,r){var n,i;t.webglDebug&&(i=[],n=performance.now());var a=t.eleDrawing,s=0;if(r.screen&&t.data.canvasNeedsRedraw[t.SELECT_BOX]&&SZe(t,e),t.data.canvasNeedsRedraw[t.NODE]||r.picking){var l=o(function(k,D){D+=1,k.isNode()?(a.drawTexture(k,D,"node-underlay"),a.drawTexture(k,D,"node-body"),a.drawTexture(k,D,"node-label"),a.drawTexture(k,D,"node-overlay")):(a.drawEdgeLine(k,D),a.drawEdgeArrow(k,D,"source"),a.drawEdgeArrow(k,D,"target"),a.drawTexture(k,D,"edge-label"))},"draw"),u=t.data.contexts[t.WEBGL];r.screen?(u.clearColor(0,0,0,0),u.enable(u.BLEND),u.blendFunc(u.ONE,u.ONE_MINUS_SRC_ALPHA)):u.disable(u.BLEND),u.clear(u.COLOR_BUFFER_BIT|u.DEPTH_BUFFER_BIT),u.viewport(0,0,u.canvas.width,u.canvas.height);var h=EZe(t),f=t.getCachedZSortedEles();if(s=f.length,a.startFrame(h,i,r),r.screen){for(var d=0;d{"use strict";o(qi,"_typeof");o($f,"_classCallCheck");o(Spe,"_defineProperties");o(zf,"_createClass");o(H0e,"_defineProperty$1");o(Di,"_slicedToArray");o(W0e,"_toConsumableArray");o(IHe,"_arrayWithoutHoles");o(OHe,"_arrayWithHoles");o(PHe,"_iterableToArray");o(BHe,"_iterableToArrayLimit");o(tB,"_unsupportedIterableToArray");o(FP,"_arrayLikeToArray");o(FHe,"_nonIterableSpread");o($He,"_nonIterableRest");o(yo,"_createForOfIteratorHelper");Hi=typeof window>"u"?null:window,Cpe=Hi?Hi.navigator:null;Hi&&Hi.document;zHe=qi(""),q0e=qi({}),GHe=qi(function(){}),VHe=typeof HTMLElement>"u"?"undefined":qi(HTMLElement),o4=o(function(e){return e&&e.instanceString&&si(e.instanceString)?e.instanceString():null},"instanceStr"),Zt=o(function(e){return e!=null&&qi(e)==zHe},"string"),si=o(function(e){return e!=null&&qi(e)===GHe},"fn"),En=o(function(e){return!vo(e)&&(Array.isArray?Array.isArray(e):e!=null&&e instanceof Array)},"array"),Ur=o(function(e){return e!=null&&qi(e)===q0e&&!En(e)&&e.constructor===Object},"plainObject"),UHe=o(function(e){return e!=null&&qi(e)===q0e},"object"),Ct=o(function(e){return e!=null&&qi(e)===qi(1)&&!isNaN(e)},"number"),HHe=o(function(e){return Ct(e)&&Math.floor(e)===e},"integer"),E6=o(function(e){if(VHe!=="undefined")return e!=null&&e instanceof HTMLElement},"htmlElement"),vo=o(function(e){return l4(e)||Y0e(e)},"elementOrCollection"),l4=o(function(e){return o4(e)==="collection"&&e._private.single},"element"),Y0e=o(function(e){return o4(e)==="collection"&&!e._private.single},"collection"),rB=o(function(e){return o4(e)==="core"},"core"),X0e=o(function(e){return o4(e)==="stylesheet"},"stylesheet"),WHe=o(function(e){return o4(e)==="event"},"event"),Mf=o(function(e){return e==null?!0:!!(e===""||e.match(/^\s+$/))},"emptyString"),qHe=o(function(e){return typeof HTMLElement>"u"?!1:e instanceof HTMLElement},"domElement"),YHe=o(function(e){return Ur(e)&&Ct(e.x1)&&Ct(e.x2)&&Ct(e.y1)&&Ct(e.y2)},"boundingBox"),XHe=o(function(e){return UHe(e)&&si(e.then)},"promise"),jHe=o(function(){return Cpe&&Cpe.userAgent.match(/msie|trident|edge/i)},"ms"),Kb=o(function(e,r){r||(r=o(function(){if(arguments.length===1)return arguments[0];if(arguments.length===0)return"undefined";for(var a=[],s=0;sr?1:0},"ascending"),rWe=o(function(e,r){return-1*K0e(e,r)},"descending"),rr=Object.assign!=null?Object.assign.bind(Object):function(t){for(var e=arguments,r=1;r1&&(v-=1),v<1/6?g+(y-g)*6*v:v<1/2?y:v<2/3?g+(y-g)*(2/3-v)*6:g}o(f,"hue2rgb");var d=new RegExp("^"+ZHe+"$").exec(e);if(d){if(n=parseInt(d[1]),n<0?n=(360- -1*n%360)%360:n>360&&(n=n%360),n/=360,i=parseFloat(d[2]),i<0||i>100||(i=i/100,a=parseFloat(d[3]),a<0||a>100)||(a=a/100,s=d[4],s!==void 0&&(s=parseFloat(s),s<0||s>1)))return;if(i===0)l=u=h=Math.round(a*255);else{var p=a<.5?a*(1+i):a+i-a*i,m=2*a-p;l=Math.round(255*f(m,p,n+1/3)),u=Math.round(255*f(m,p,n)),h=Math.round(255*f(m,p,n-1/3))}r=[l,u,h,s]}return r},"hsl2tuple"),aWe=o(function(e){var r,n=new RegExp("^"+KHe+"$").exec(e);if(n){r=[];for(var i=[],a=1;a<=3;a++){var s=n[a];if(s[s.length-1]==="%"&&(i[a]=!0),s=parseFloat(s),i[a]&&(s=s/100*255),s<0||s>255)return;r.push(Math.floor(s))}var l=i[1]||i[2]||i[3],u=i[1]&&i[2]&&i[3];if(l&&!u)return;var h=n[4];if(h!==void 0){if(h=parseFloat(h),h<0||h>1)return;r.push(h)}}return r},"rgb2tuple"),sWe=o(function(e){return oWe[e.toLowerCase()]},"colorname2tuple"),Q0e=o(function(e){return(En(e)?e:null)||sWe(e)||nWe(e)||aWe(e)||iWe(e)},"color2tuple"),oWe={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]},Z0e=o(function(e){for(var r=e.map,n=e.keys,i=n.length,a=0;a1&&arguments[1]!==void 0?arguments[1]:j1,n=r,i;i=e.next(),!i.done;)n=n*nme+i.value|0;return n},"hashIterableInts"),Qb=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:j1;return r*nme+e|0},"hashInt"),Zb=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Vb;return(r<<5)+r+e|0},"hashIntAlt"),YWe=o(function(e,r){return e*2097152+r},"combineHashes"),Af=o(function(e){return e[0]*2097152+e[1]},"combineHashesArray"),t6=o(function(e,r){return[Qb(e[0],r[0]),Zb(e[1],r[1])]},"hashArrays"),XWe=o(function(e,r){var n={value:0,done:!1},i=0,a=e.length,s={next:o(function(){return i=0&&!(e[i]===r&&(e.splice(i,1),n));i--);},"removeFromArray"),sB=o(function(e){e.splice(0,e.length)},"clearArray"),tqe=o(function(e,r){for(var n=0;n"u"?"undefined":qi(Set))!==nqe?Set:iqe,F6=o(function(e,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(e===void 0||r===void 0||!rB(e)){ai("An element must have a core reference and parameters set");return}var i=r.group;if(i==null&&(r.data&&r.data.source!=null&&r.data.target!=null?i="edges":i="nodes"),i!=="nodes"&&i!=="edges"){ai("An element must be of type `nodes` or `edges`; you specified `"+i+"`");return}this.length=1,this[0]=this;var a=this._private={cy:e,single:!0,data:r.data||{},position:r.position||{x:0,y:0},autoWidth:void 0,autoHeight:void 0,autoPadding:void 0,compoundBoundsClean:!1,listeners:[],group:i,style:{},rstyle:{},styleCxts:[],styleKeys:{},removed:!0,selected:!!r.selected,selectable:r.selectable===void 0?!0:!!r.selectable,locked:!!r.locked,grabbed:!1,grabbable:r.grabbable===void 0?!0:!!r.grabbable,pannable:r.pannable===void 0?i==="edges":!!r.pannable,active:!1,classes:new sy,animation:{current:[],queue:[]},rscratch:{},scratch:r.scratch||{},edges:[],children:[],parent:r.parent&&r.parent.isNode()?r.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(a.position.x==null&&(a.position.x=0),a.position.y==null&&(a.position.y=0),r.renderedPosition){var s=r.renderedPosition,l=e.pan(),u=e.zoom();a.position={x:(s.x-l.x)/u,y:(s.y-l.y)/u}}var h=[];En(r.classes)?h=r.classes:Zt(r.classes)&&(h=r.classes.split(/\s+/));for(var f=0,d=h.length;fb?1:0},"defaultCmp"),f=o(function(x,b,w,C,T){var E;if(w==null&&(w=0),T==null&&(T=n),w<0)throw new Error("lo must be non-negative");for(C==null&&(C=x.length);wI;0<=I?_++:_--)S.push(_);return S}.apply(this).reverse(),A=[],C=0,T=E.length;CL;0<=L?++S:--S)k.push(s(x,w));return k},"nsmallest"),y=o(function(x,b,w,C){var T,E,A;for(C==null&&(C=n),T=x[w];w>b;){if(A=w-1>>1,E=x[A],C(T,E)<0){x[w]=E,w=A;continue}break}return x[w]=T},"_siftdown"),v=o(function(x,b,w){var C,T,E,A,S;for(w==null&&(w=n),T=x.length,S=b,E=x[b],C=2*b+1;C0;){var E=b.pop(),A=v(E),S=E.id();if(p[S]=A,A!==1/0)for(var _=E.neighborhood().intersect(g),I=0;I<_.length;I++){var L=_[I],k=L.id(),D=T(E,L),R=A+D.dist;R0)for(B.unshift(P);d[z];){var $=d[z];B.unshift($.edge),B.unshift($.node),F=$.node,z=F.id()}return l.spawn(B)},"pathTo")}},"dijkstra")},lqe={kruskal:o(function(e){e=e||function(w){return 1};for(var r=this.byGroup(),n=r.nodes,i=r.edges,a=n.length,s=new Array(a),l=n,u=o(function(C){for(var T=0;T0;){if(T(),A++,C===f){for(var S=[],_=a,I=f,L=x[I];S.unshift(_),L!=null&&S.unshift(L),_=v[I],_!=null;)I=_.id(),L=x[I];return{found:!0,distance:d[C],path:this.spawn(S),steps:A}}m[C]=!0;for(var k=w._private.edges,D=0;DL&&(g[I]=L,b[I]=_,w[I]=T),!a){var k=_*f+S;!a&&g[k]>L&&(g[k]=L,b[k]=S,w[k]=T)}}}for(var D=0;D1&&arguments[1]!==void 0?arguments[1]:s,ye=w(ae),Be=[],He=ye;;){if(He==null)return r.spawn();var ze=b(He),Le=ze.edge,Ie=ze.pred;if(Be.unshift(He[0]),He.same(Oe)&&Be.length>0)break;Le!=null&&Be.unshift(Le),He=Ie}return u.spawn(Be)},"pathTo"),E=0;E=0;f--){var d=h[f],p=d[1],m=d[2];(r[p]===l&&r[m]===u||r[p]===u&&r[m]===l)&&h.splice(f,1)}for(var g=0;gi;){var a=Math.floor(Math.random()*r.length);r=gqe(a,e,r),n--}return r},"contractUntil"),yqe={kargerStein:o(function(){var e=this,r=this.byGroup(),n=r.nodes,i=r.edges;i.unmergeBy(function(B){return B.isLoop()});var a=n.length,s=i.length,l=Math.ceil(Math.pow(Math.log(a)/Math.LN2,2)),u=Math.floor(a/mqe);if(a<2){ai("At least 2 nodes are required for Karger-Stein algorithm");return}for(var h=[],f=0;f1&&arguments[1]!==void 0?arguments[1]:0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,i=1/0,a=r;a1&&arguments[1]!==void 0?arguments[1]:0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,i=-1/0,a=r;a1&&arguments[1]!==void 0?arguments[1]:0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,i=0,a=0,s=r;s1&&arguments[1]!==void 0?arguments[1]:0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,a=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,s=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0;i?e=e.slice(r,n):(n0&&e.splice(0,r));for(var l=0,u=e.length-1;u>=0;u--){var h=e[u];s?isFinite(h)||(e[u]=-1/0,l++):e.splice(u,1)}a&&e.sort(function(p,m){return p-m});var f=e.length,d=Math.floor(f/2);return f%2!==0?e[d+1+l]:(e[d-1+l]+e[d+l])/2},"median"),kqe=o(function(e){return Math.PI*e/180},"deg2rad"),r6=o(function(e,r){return Math.atan2(r,e)-Math.PI/2},"getAngleFromDisp"),oB=Math.log2||function(t){return Math.log(t)/Math.log(2)},hme=o(function(e){return e>0?1:e<0?-1:0},"signum"),Xp=o(function(e,r){return Math.sqrt(Vp(e,r))},"dist"),Vp=o(function(e,r){var n=r.x-e.x,i=r.y-e.y;return n*n+i*i},"sqdist"),Eqe=o(function(e){for(var r=e.length,n=0,i=0;i=e.x1&&e.y2>=e.y1)return{x1:e.x1,y1:e.y1,x2:e.x2,y2:e.y2,w:e.x2-e.x1,h:e.y2-e.y1};if(e.w!=null&&e.h!=null&&e.w>=0&&e.h>=0)return{x1:e.x1,y1:e.y1,x2:e.x1+e.w,y2:e.y1+e.h,w:e.w,h:e.h}}},"makeBoundingBox"),Cqe=o(function(e){return{x1:e.x1,x2:e.x2,w:e.w,y1:e.y1,y2:e.y2,h:e.h}},"copyBoundingBox"),Aqe=o(function(e){e.x1=1/0,e.y1=1/0,e.x2=-1/0,e.y2=-1/0,e.w=0,e.h=0},"clearBoundingBox"),_qe=o(function(e,r,n){return{x1:e.x1+r,x2:e.x2+r,y1:e.y1+n,y2:e.y2+n,w:e.w,h:e.h}},"shiftBoundingBox"),fme=o(function(e,r){e.x1=Math.min(e.x1,r.x1),e.x2=Math.max(e.x2,r.x2),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,r.y1),e.y2=Math.max(e.y2,r.y2),e.h=e.y2-e.y1},"updateBoundingBox"),Dqe=o(function(e,r,n){e.x1=Math.min(e.x1,r),e.x2=Math.max(e.x2,r),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,n),e.y2=Math.max(e.y2,n),e.h=e.y2-e.y1},"expandBoundingBoxByPoint"),m6=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return e.x1-=r,e.x2+=r,e.y1-=r,e.y2+=r,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},"expandBoundingBox"),g6=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[0],n,i,a,s;if(r.length===1)n=i=a=s=r[0];else if(r.length===2)n=a=r[0],s=i=r[1];else if(r.length===4){var l=Di(r,4);n=l[0],i=l[1],a=l[2],s=l[3]}return e.x1-=s,e.x2+=i,e.y1-=n,e.y2+=a,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},"expandBoundingBoxSides"),Ipe=o(function(e,r){e.x1=r.x1,e.y1=r.y1,e.x2=r.x2,e.y2=r.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1},"assignBoundingBox"),lB=o(function(e,r){return!(e.x1>r.x2||r.x1>e.x2||e.x2r.y2||r.y1>e.y2)},"boundingBoxesIntersect"),ny=o(function(e,r,n){return e.x1<=r&&r<=e.x2&&e.y1<=n&&n<=e.y2},"inBoundingBox"),Lqe=o(function(e,r){return ny(e,r.x,r.y)},"pointInBoundingBox"),dme=o(function(e,r){return ny(e,r.x1,r.y1)&&ny(e,r.x2,r.y2)},"boundingBoxInBoundingBox"),pme=o(function(e,r,n,i,a,s,l){var u=arguments.length>7&&arguments[7]!==void 0?arguments[7]:"auto",h=u==="auto"?jp(a,s):u,f=a/2,d=s/2;h=Math.min(h,f,d);var p=h!==f,m=h!==d,g;if(p){var y=n-f+h-l,v=i-d-l,x=n+f-h+l,b=v;if(g=Lf(e,r,n,i,y,v,x,b,!1),g.length>0)return g}if(m){var w=n+f+l,C=i-d+h-l,T=w,E=i+d-h+l;if(g=Lf(e,r,n,i,w,C,T,E,!1),g.length>0)return g}if(p){var A=n-f+h-l,S=i+d+l,_=n+f-h+l,I=S;if(g=Lf(e,r,n,i,A,S,_,I,!1),g.length>0)return g}if(m){var L=n-f-l,k=i-d+h-l,D=L,R=i+d-h+l;if(g=Lf(e,r,n,i,L,k,D,R,!1),g.length>0)return g}var O;{var M=n-f+h,P=i-d+h;if(O=Ub(e,r,n,i,M,P,h+l),O.length>0&&O[0]<=M&&O[1]<=P)return[O[0],O[1]]}{var B=n+f-h,F=i-d+h;if(O=Ub(e,r,n,i,B,F,h+l),O.length>0&&O[0]>=B&&O[1]<=F)return[O[0],O[1]]}{var z=n+f-h,$=i+d-h;if(O=Ub(e,r,n,i,z,$,h+l),O.length>0&&O[0]>=z&&O[1]>=$)return[O[0],O[1]]}{var U=n-f+h,Q=i+d-h;if(O=Ub(e,r,n,i,U,Q,h+l),O.length>0&&O[0]<=U&&O[1]>=Q)return[O[0],O[1]]}return[]},"roundRectangleIntersectLine"),Rqe=o(function(e,r,n,i,a,s,l){var u=l,h=Math.min(n,a),f=Math.max(n,a),d=Math.min(i,s),p=Math.max(i,s);return h-u<=e&&e<=f+u&&d-u<=r&&r<=p+u},"inLineVicinity"),Nqe=o(function(e,r,n,i,a,s,l,u,h){var f={x1:Math.min(n,l,a)-h,x2:Math.max(n,l,a)+h,y1:Math.min(i,u,s)-h,y2:Math.max(i,u,s)+h};return!(ef.x2||rf.y2)},"inBezierVicinity"),Mqe=o(function(e,r,n,i){n-=i;var a=r*r-4*e*n;if(a<0)return[];var s=Math.sqrt(a),l=2*e,u=(-r+s)/l,h=(-r-s)/l;return[u,h]},"solveQuadratic"),Iqe=o(function(e,r,n,i,a){var s=1e-5;e===0&&(e=s),r/=e,n/=e,i/=e;var l,u,h,f,d,p,m,g;if(u=(3*n-r*r)/9,h=-(27*i)+r*(9*n-2*(r*r)),h/=54,l=u*u*u+h*h,a[1]=0,m=r/3,l>0){d=h+Math.sqrt(l),d=d<0?-Math.pow(-d,1/3):Math.pow(d,1/3),p=h-Math.sqrt(l),p=p<0?-Math.pow(-p,1/3):Math.pow(p,1/3),a[0]=-m+d+p,m+=(d+p)/2,a[4]=a[2]=-m,m=Math.sqrt(3)*(-p+d)/2,a[3]=m,a[5]=-m;return}if(a[5]=a[3]=0,l===0){g=h<0?-Math.pow(-h,1/3):Math.pow(h,1/3),a[0]=-m+2*g,a[4]=a[2]=-(g+m);return}u=-u,f=u*u*u,f=Math.acos(h/Math.sqrt(f)),g=2*Math.sqrt(u),a[0]=-m+g*Math.cos(f/3),a[2]=-m+g*Math.cos((f+2*Math.PI)/3),a[4]=-m+g*Math.cos((f+4*Math.PI)/3)},"solveCubic"),Oqe=o(function(e,r,n,i,a,s,l,u){var h=1*n*n-4*n*a+2*n*l+4*a*a-4*a*l+l*l+i*i-4*i*s+2*i*u+4*s*s-4*s*u+u*u,f=1*9*n*a-3*n*n-3*n*l-6*a*a+3*a*l+9*i*s-3*i*i-3*i*u-6*s*s+3*s*u,d=1*3*n*n-6*n*a+n*l-n*e+2*a*a+2*a*e-l*e+3*i*i-6*i*s+i*u-i*r+2*s*s+2*s*r-u*r,p=1*n*a-n*n+n*e-a*e+i*s-i*i+i*r-s*r,m=[];Iqe(h,f,d,p,m);for(var g=1e-7,y=[],v=0;v<6;v+=2)Math.abs(m[v+1])=0&&m[v]<=1&&y.push(m[v]);y.push(1),y.push(0);for(var x=-1,b,w,C,T=0;T=0?Ch?(e-a)*(e-a)+(r-s)*(r-s):f-p},"sqdistToFiniteLine"),Ws=o(function(e,r,n){for(var i,a,s,l,u,h=0,f=0;f=e&&e>=s||i<=e&&e<=s)u=(e-i)/(s-i)*(l-a)+a,u>r&&h++;else continue;return h%2!==0},"pointInsidePolygonPoints"),rh=o(function(e,r,n,i,a,s,l,u,h){var f=new Array(n.length),d;u[0]!=null?(d=Math.atan(u[1]/u[0]),u[0]<0?d=d+Math.PI/2:d=-d-Math.PI/2):d=u;for(var p=Math.cos(-d),m=Math.sin(-d),g=0;g0){var v=_6(f,-h);y=A6(v)}else y=f;return Ws(e,r,y)},"pointInsidePolygon"),Bqe=o(function(e,r,n,i,a,s,l,u){for(var h=new Array(n.length*2),f=0;f=0&&v<=1&&b.push(v),x>=0&&x<=1&&b.push(x),b.length===0)return[];var w=b[0]*u[0]+e,C=b[0]*u[1]+r;if(b.length>1){if(b[0]==b[1])return[w,C];var T=b[1]*u[0]+e,E=b[1]*u[1]+r;return[w,C,T,E]}else return[w,C]},"intersectLineCircle"),SP=o(function(e,r,n){return r<=e&&e<=n||n<=e&&e<=r?e:e<=r&&r<=n||n<=r&&r<=e?r:n},"midOfThree"),Lf=o(function(e,r,n,i,a,s,l,u,h){var f=e-a,d=n-e,p=l-a,m=r-s,g=i-r,y=u-s,v=p*m-y*f,x=d*m-g*f,b=y*d-p*g;if(b!==0){var w=v/b,C=x/b,T=.001,E=0-T,A=1+T;return E<=w&&w<=A&&E<=C&&C<=A?[e+w*d,r+w*g]:h?[e+w*d,r+w*g]:[]}else return v===0||x===0?SP(e,n,l)===l?[l,u]:SP(e,n,a)===a?[a,s]:SP(a,l,n)===n?[n,i]:[]:[]},"finiteLinesIntersect"),t4=o(function(e,r,n,i,a,s,l,u){var h=[],f,d=new Array(n.length),p=!0;s==null&&(p=!1);var m;if(p){for(var g=0;g0){var y=_6(d,-u);m=A6(y)}else m=d}else m=n;for(var v,x,b,w,C=0;C2){for(var g=[f[0],f[1]],y=Math.pow(g[0]-e,2)+Math.pow(g[1]-r,2),v=1;vf&&(f=C)},"set"),get:o(function(w){return h[w]},"get")},p=0;p0?M=O.edgesTo(R)[0]:M=R.edgesTo(O)[0];var P=i(M);R=R.id(),S[R]>S[k]+P&&(S[R]=S[k]+P,_.nodes.indexOf(R)<0?_.push(R):_.updateItem(R),A[R]=0,E[R]=[]),S[R]==S[k]+P&&(A[R]=A[R]+A[k],E[R].push(k))}else for(var B=0;B0;){for(var U=T.pop(),Q=0;Q0&&l.push(n[u]);l.length!==0&&a.push(i.collection(l))}return a},"assign"),Jqe=o(function(e,r){for(var n=0;n5&&arguments[5]!==void 0?arguments[5]:rYe,l=i,u,h,f=0;f=2?Ob(e,r,n,0,$pe,nYe):Ob(e,r,n,0,Fpe)},"euclidean"),squaredEuclidean:o(function(e,r,n){return Ob(e,r,n,0,$pe)},"squaredEuclidean"),manhattan:o(function(e,r,n){return Ob(e,r,n,0,Fpe)},"manhattan"),max:o(function(e,r,n){return Ob(e,r,n,-1/0,iYe)},"max")};iy["squared-euclidean"]=iy.squaredEuclidean;iy.squaredeuclidean=iy.squaredEuclidean;o(z6,"clusteringDistance");aYe=la({k:2,m:2,sensitivityThreshold:1e-4,distance:"euclidean",maxIterations:10,attributes:[],testMode:!1,testCentroids:null}),uB=o(function(e){return aYe(e)},"setOptions"),D6=o(function(e,r,n,i,a){var s=a!=="kMedoids",l=s?function(d){return n[d]}:function(d){return i[d](n)},u=o(function(p){return i[p](r)},"getQ"),h=n,f=r;return z6(e,i.length,l,u,h,f)},"getDist"),CP=o(function(e,r,n){for(var i=n.length,a=new Array(i),s=new Array(i),l=new Array(r),u=null,h=0;hn)return!1}return!0},"haveMatricesConverged"),lYe=o(function(e,r,n){for(var i=0;il&&(l=r[h][f],u=f);a[u].push(e[h])}for(var d=0;d=a.threshold||a.mode==="dendrogram"&&e.length===1)return!1;var g=r[s],y=r[i[s]],v;a.mode==="dendrogram"?v={left:g,right:y,key:g.key}:v={value:g.value.concat(y.value),key:g.key},e[g.index]=v,e.splice(y.index,1),r[g.key]=v;for(var x=0;xn[y.key][b.key]&&(u=n[y.key][b.key])):a.linkage==="max"?(u=n[g.key][b.key],n[g.key][b.key]0&&i.push(a);return i},"findExemplars"),Wpe=o(function(e,r,n){for(var i=[],a=0;al&&(s=h,l=r[a*e+h])}s>0&&i.push(s)}for(var f=0;fh&&(u=f,h=d)}n[a]=s[u]}return i=Wpe(e,r,n),i},"assign"),qpe=o(function(e){for(var r=this.cy(),n=this.nodes(),i=TYe(e),a={},s=0;s=L?(k=L,L=R,D=O):R>k&&(k=R);for(var M=0;M0?1:0;A[_%i.minIterations*l+U]=Q,$+=Q}if($>0&&(_>=i.minIterations-1||_==i.maxIterations-1)){for(var te=0,Y=0;Y1||E>1)&&(l=!0),d[w]=[],b.outgoers().forEach(function(S){S.isEdge()&&d[w].push(S.id())})}else p[w]=[void 0,b.target().id()]}):s.forEach(function(b){var w=b.id();if(b.isNode()){var C=b.degree(!0);C%2&&(u?h?l=!0:h=w:u=w),d[w]=[],b.connectedEdges().forEach(function(T){return d[w].push(T.id())})}else p[w]=[b.source().id(),b.target().id()]});var m={found:!1,trail:void 0};if(l)return m;if(h&&u)if(a){if(f&&h!=f)return m;f=h}else{if(f&&h!=f&&u!=f)return m;f||(f=h)}else f||(f=s[0].id());var g=o(function(w){for(var C=w,T=[w],E,A,S;d[C].length;)E=d[C].shift(),A=p[E][0],S=p[E][1],C!=S?(d[S]=d[S].filter(function(_){return _!=E}),C=S):!a&&C!=A&&(d[A]=d[A].filter(function(_){return _!=E}),C=A),T.unshift(E),T.unshift(C);return T},"walk"),y=[],v=[];for(v=g(f);v.length!=1;)d[v[0]].length==0?(y.unshift(s.getElementById(v.shift())),y.unshift(s.getElementById(v.shift()))):v=g(v.shift()).concat(v);y.unshift(s.getElementById(v.shift()));for(var x in d)if(d[x].length)return m;return m.found=!0,m.trail=this.spawn(y,!0),m},"hierholzer")},a6=o(function(){var e=this,r={},n=0,i=0,a=[],s=[],l={},u=o(function(p,m){for(var g=s.length-1,y=[],v=e.spawn();s[g].x!=p||s[g].y!=m;)y.push(s.pop().edge),g--;y.push(s.pop().edge),y.forEach(function(x){var b=x.connectedNodes().intersection(e);v.merge(x),b.forEach(function(w){var C=w.id(),T=w.connectedEdges().intersection(e);v.merge(w),r[C].cutVertex?v.merge(T.filter(function(E){return E.isLoop()})):v.merge(T)})}),a.push(v)},"buildComponent"),h=o(function d(p,m,g){p===g&&(i+=1),r[m]={id:n,low:n++,cutVertex:!1};var y=e.getElementById(m).connectedEdges().intersection(e);if(y.size()===0)a.push(e.spawn(e.getElementById(m)));else{var v,x,b,w;y.forEach(function(C){v=C.source().id(),x=C.target().id(),b=v===m?x:v,b!==g&&(w=C.id(),l[w]||(l[w]=!0,s.push({x:m,y:b,edge:C})),b in r?r[m].low=Math.min(r[m].low,r[b].id):(d(p,b,m),r[m].low=Math.min(r[m].low,r[b].low),r[m].id<=r[b].low&&(r[m].cutVertex=!0,u(m,b))))})}},"biconnectedSearch");e.forEach(function(d){if(d.isNode()){var p=d.id();p in r||(i=0,h(p,p),r[p].cutVertex=i>1)}});var f=Object.keys(r).filter(function(d){return r[d].cutVertex}).map(function(d){return e.getElementById(d)});return{cut:e.spawn(f),components:a}},"hopcroftTarjanBiconnected"),LYe={hopcroftTarjanBiconnected:a6,htbc:a6,htb:a6,hopcroftTarjanBiconnectedComponents:a6},s6=o(function(){var e=this,r={},n=0,i=[],a=[],s=e.spawn(e),l=o(function u(h){a.push(h),r[h]={index:n,low:n++,explored:!1};var f=e.getElementById(h).connectedEdges().intersection(e);if(f.forEach(function(y){var v=y.target().id();v!==h&&(v in r||u(v),r[v].explored||(r[h].low=Math.min(r[h].low,r[v].low)))}),r[h].index===r[h].low){for(var d=e.spawn();;){var p=a.pop();if(d.merge(e.getElementById(p)),r[p].low=r[h].index,r[p].explored=!0,p===h)break}var m=d.edgesWith(d),g=d.merge(m);i.push(g),s=s.difference(g)}},"stronglyConnectedSearch");return e.forEach(function(u){if(u.isNode()){var h=u.id();h in r||l(h)}}),{cut:s,components:i}},"tarjanStronglyConnected"),RYe={tarjanStronglyConnected:s6,tsc:s6,tscc:s6,tarjanStronglyConnectedComponents:s6},wme={};[Jb,oqe,lqe,uqe,fqe,pqe,yqe,Vqe,J1,ey,GP,tYe,pYe,bYe,AYe,DYe,LYe,RYe].forEach(function(t){rr(wme,t)});Tme=0,kme=1,Eme=2,nh=o(function t(e){if(!(this instanceof t))return new t(e);this.id="Thenable/1.0.7",this.state=Tme,this.fulfillValue=void 0,this.rejectReason=void 0,this.onFulfilled=[],this.onRejected=[],this.proxy={then:this.then.bind(this)},typeof e=="function"&&e.call(this,this.fulfill.bind(this),this.reject.bind(this))},"api");nh.prototype={fulfill:o(function(e){return Ype(this,kme,"fulfillValue",e)},"fulfill"),reject:o(function(e){return Ype(this,Eme,"rejectReason",e)},"reject"),then:o(function(e,r){var n=this,i=new nh;return n.onFulfilled.push(jpe(e,i,"fulfill")),n.onRejected.push(jpe(r,i,"reject")),Sme(n),i.proxy},"then")};Ype=o(function(e,r,n,i){return e.state===Tme&&(e.state=r,e[n]=i,Sme(e)),e},"deliver"),Sme=o(function(e){e.state===kme?Xpe(e,"onFulfilled",e.fulfillValue):e.state===Eme&&Xpe(e,"onRejected",e.rejectReason)},"execute"),Xpe=o(function(e,r,n){if(e[r].length!==0){var i=e[r];e[r]=[];var a=o(function(){for(var l=0;l0},"animatedImpl")},"animated"),clearQueue:o(function(){return o(function(){var r=this,n=r.length!==void 0,i=n?r:[r],a=this._private.cy||this;if(!a.styleEnabled())return this;for(var s=0;s0&&this.spawn(i).updateStyle().emit("class"),r},"classes"),addClass:o(function(e){return this.toggleClass(e,!0)},"addClass"),hasClass:o(function(e){var r=this[0];return r!=null&&r._private.classes.has(e)},"hasClass"),toggleClass:o(function(e,r){En(e)||(e=e.match(/\S+/g)||[]);for(var n=this,i=r===void 0,a=[],s=0,l=n.length;s0&&this.spawn(a).updateStyle().emit("class"),n},"toggleClass"),removeClass:o(function(e){return this.toggleClass(e,!1)},"removeClass"),flashClass:o(function(e,r){var n=this;if(r==null)r=250;else if(r===0)return n;return n.addClass(e),setTimeout(function(){n.removeClass(e)},r),n},"flashClass")};y6.className=y6.classNames=y6.classes;Vr={metaChar:"[\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]",comparatorOp:"=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=",boolOp:"\\?|\\!|\\^",string:`"(?:\\\\"|[^"])*"|'(?:\\\\'|[^'])*'`,number:Wi,meta:"degree|indegree|outdegree",separator:"\\s*,\\s*",descendant:"\\s+",child:"\\s+>\\s+",subject:"\\$",group:"node|edge|\\*",directedEdge:"\\s+->\\s+",undirectedEdge:"\\s+<->\\s+"};Vr.variable="(?:[\\w-.]|(?:\\\\"+Vr.metaChar+"))+";Vr.className="(?:[\\w-]|(?:\\\\"+Vr.metaChar+"))+";Vr.value=Vr.string+"|"+Vr.number;Vr.id=Vr.variable;(function(){var t,e,r;for(t=Vr.comparatorOp.split("|"),r=0;r=0)&&e!=="="&&(Vr.comparatorOp+="|\\!"+e)})();mn=o(function(){return{checks:[]}},"newQuery"),$t={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},UP=[{selector:":selected",matches:o(function(e){return e.selected()},"matches")},{selector:":unselected",matches:o(function(e){return!e.selected()},"matches")},{selector:":selectable",matches:o(function(e){return e.selectable()},"matches")},{selector:":unselectable",matches:o(function(e){return!e.selectable()},"matches")},{selector:":locked",matches:o(function(e){return e.locked()},"matches")},{selector:":unlocked",matches:o(function(e){return!e.locked()},"matches")},{selector:":visible",matches:o(function(e){return e.visible()},"matches")},{selector:":hidden",matches:o(function(e){return!e.visible()},"matches")},{selector:":transparent",matches:o(function(e){return e.transparent()},"matches")},{selector:":grabbed",matches:o(function(e){return e.grabbed()},"matches")},{selector:":free",matches:o(function(e){return!e.grabbed()},"matches")},{selector:":removed",matches:o(function(e){return e.removed()},"matches")},{selector:":inside",matches:o(function(e){return!e.removed()},"matches")},{selector:":grabbable",matches:o(function(e){return e.grabbable()},"matches")},{selector:":ungrabbable",matches:o(function(e){return!e.grabbable()},"matches")},{selector:":animated",matches:o(function(e){return e.animated()},"matches")},{selector:":unanimated",matches:o(function(e){return!e.animated()},"matches")},{selector:":parent",matches:o(function(e){return e.isParent()},"matches")},{selector:":childless",matches:o(function(e){return e.isChildless()},"matches")},{selector:":child",matches:o(function(e){return e.isChild()},"matches")},{selector:":orphan",matches:o(function(e){return e.isOrphan()},"matches")},{selector:":nonorphan",matches:o(function(e){return e.isChild()},"matches")},{selector:":compound",matches:o(function(e){return e.isNode()?e.isParent():e.source().isParent()||e.target().isParent()},"matches")},{selector:":loop",matches:o(function(e){return e.isLoop()},"matches")},{selector:":simple",matches:o(function(e){return e.isSimple()},"matches")},{selector:":active",matches:o(function(e){return e.active()},"matches")},{selector:":inactive",matches:o(function(e){return!e.active()},"matches")},{selector:":backgrounding",matches:o(function(e){return e.backgrounding()},"matches")},{selector:":nonbackgrounding",matches:o(function(e){return!e.backgrounding()},"matches")}].sort(function(t,e){return rWe(t.selector,e.selector)}),Hje=function(){for(var t={},e,r=0;r0&&f.edgeCount>0)return hn("The selector `"+e+"` is invalid because it uses both a compound selector and an edge selector"),!1;if(f.edgeCount>1)return hn("The selector `"+e+"` is invalid because it uses multiple edge selectors"),!1;f.edgeCount===1&&hn("The selector `"+e+"` 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},"parse"),Kje=o(function(){if(this.toStringCache!=null)return this.toStringCache;for(var e=o(function(f){return f??""},"clean"),r=o(function(f){return Zt(f)?'"'+f+'"':e(f)},"cleanVal"),n=o(function(f){return" "+f+" "},"space"),i=o(function(f,d){var p=f.type,m=f.value;switch(p){case $t.GROUP:{var g=e(m);return g.substring(0,g.length-1)}case $t.DATA_COMPARE:{var y=f.field,v=f.operator;return"["+y+n(e(v))+r(m)+"]"}case $t.DATA_BOOL:{var x=f.operator,b=f.field;return"["+e(x)+b+"]"}case $t.DATA_EXIST:{var w=f.field;return"["+w+"]"}case $t.META_COMPARE:{var C=f.operator,T=f.field;return"[["+T+n(e(C))+r(m)+"]]"}case $t.STATE:return m;case $t.ID:return"#"+m;case $t.CLASS:return"."+m;case $t.PARENT:case $t.CHILD:return a(f.parent,d)+n(">")+a(f.child,d);case $t.ANCESTOR:case $t.DESCENDANT:return a(f.ancestor,d)+" "+a(f.descendant,d);case $t.COMPOUND_SPLIT:{var E=a(f.left,d),A=a(f.subject,d),S=a(f.right,d);return E+(E.length>0?" ":"")+A+S}case $t.TRUE:return""}},"checkToString"),a=o(function(f,d){return f.checks.reduce(function(p,m,g){return p+(d===f&&g===0?"$":"")+i(m,d)},"")},"queryToString"),s="",l=0;l1&&l=0&&(r=r.replace("!",""),d=!0),r.indexOf("@")>=0&&(r=r.replace("@",""),f=!0),(a||l||f)&&(u=!a&&!s?"":""+e,h=""+n),f&&(e=u=u.toLowerCase(),n=h=h.toLowerCase()),r){case"*=":i=u.indexOf(h)>=0;break;case"$=":i=u.indexOf(h,u.length-h.length)>=0;break;case"^=":i=u.indexOf(h)===0;break;case"=":i=e===n;break;case">":p=!0,i=e>n;break;case">=":p=!0,i=e>=n;break;case"<":p=!0,i=e1&&arguments[1]!==void 0?arguments[1]:!0;return mB(this,t,e,Ime)};o(Ome,"addParent");ay.forEachUp=function(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return mB(this,t,e,Ome)};o(iKe,"addParentAndChildren");ay.forEachUpAndDown=function(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return mB(this,t,e,iKe)};ay.ancestors=ay.parents;n4=Pme={data:un.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:un.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),scratch:un.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:un.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),rscratch:un.data({field:"rscratch",allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!0}),removeRscratch:un.removeData({field:"rscratch",triggerEvent:!1}),id:o(function(){var e=this[0];if(e)return e._private.data.id},"id")};n4.attr=n4.data;n4.removeAttr=n4.removeData;aKe=Pme,H6={};o(_P,"defineDegreeFunction");rr(H6,{degree:_P(function(t,e){return e.source().same(e.target())?2:1}),indegree:_P(function(t,e){return e.target().same(t)?1:0}),outdegree:_P(function(t,e){return e.source().same(t)?1:0})});o(W1,"defineDegreeBoundsFunction");rr(H6,{minDegree:W1("degree",function(t,e){return te}),minIndegree:W1("indegree",function(t,e){return te}),minOutdegree:W1("outdegree",function(t,e){return te})});rr(H6,{totalDegree:o(function(e){for(var r=0,n=this.nodes(),i=0;i0,p=d;d&&(f=f[0]);var m=p?f.position():{x:0,y:0};r!==void 0?h.position(e,r+m[e]):a!==void 0&&h.position({x:a.x+m.x,y:a.y+m.y})}else{var g=n.position(),y=l?n.parent():null,v=y&&y.length>0,x=v;v&&(y=y[0]);var b=x?y.position():{x:0,y:0};return a={x:g.x-b.x,y:g.y-b.y},e===void 0?a:a[e]}else if(!s)return;return this},"relativePosition")};Hl.modelPosition=Hl.point=Hl.position;Hl.modelPositions=Hl.points=Hl.positions;Hl.renderedPoint=Hl.renderedPosition;Hl.relativePoint=Hl.relativePosition;sKe=Bme;ty=Gf={};Gf.renderedBoundingBox=function(t){var e=this.boundingBox(t),r=this.cy(),n=r.zoom(),i=r.pan(),a=e.x1*n+i.x,s=e.x2*n+i.x,l=e.y1*n+i.y,u=e.y2*n+i.y;return{x1:a,x2:s,y1:l,y2:u,w:s-a,h:u-l}};Gf.dirtyCompoundBoundsCache=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,e=this.cy();return!e.styleEnabled()||!e.hasCompoundNodes()?this:(this.forEachUp(function(r){if(r.isParent()){var n=r._private;n.compoundBoundsClean=!1,n.bbCache=null,t||r.emitAndNotify("bounds")}}),this)};Gf.updateCompoundBounds=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,e=this.cy();if(!e.styleEnabled()||!e.hasCompoundNodes())return this;if(!t&&e.batching())return this;function r(s){if(!s.isParent())return;var l=s._private,u=s.children(),h=s.pstyle("compound-sizing-wrt-labels").value==="include",f={width:{val:s.pstyle("min-width").pfValue,left:s.pstyle("min-width-bias-left"),right:s.pstyle("min-width-bias-right")},height:{val:s.pstyle("min-height").pfValue,top:s.pstyle("min-height-bias-top"),bottom:s.pstyle("min-height-bias-bottom")}},d=u.boundingBox({includeLabels:h,includeOverlays:!1,useCache:!1}),p=l.position;(d.w===0||d.h===0)&&(d={w:s.pstyle("width").pfValue,h:s.pstyle("height").pfValue},d.x1=p.x-d.w/2,d.x2=p.x+d.w/2,d.y1=p.y-d.h/2,d.y2=p.y+d.h/2);function m(_,I,L){var k=0,D=0,R=I+L;return _>0&&R>0&&(k=I/R*_,D=L/R*_),{biasDiff:k,biasComplementDiff:D}}o(m,"computeBiasValues");function g(_,I,L,k){if(L.units==="%")switch(k){case"width":return _>0?L.pfValue*_:0;case"height":return I>0?L.pfValue*I:0;case"average":return _>0&&I>0?L.pfValue*(_+I)/2:0;case"min":return _>0&&I>0?_>I?L.pfValue*I:L.pfValue*_:0;case"max":return _>0&&I>0?_>I?L.pfValue*_:L.pfValue*I:0;default:return 0}else return L.units==="px"?L.pfValue:0}o(g,"computePaddingValues");var y=f.width.left.value;f.width.left.units==="px"&&f.width.val>0&&(y=y*100/f.width.val);var v=f.width.right.value;f.width.right.units==="px"&&f.width.val>0&&(v=v*100/f.width.val);var x=f.height.top.value;f.height.top.units==="px"&&f.height.val>0&&(x=x*100/f.height.val);var b=f.height.bottom.value;f.height.bottom.units==="px"&&f.height.val>0&&(b=b*100/f.height.val);var w=m(f.width.val-d.w,y,v),C=w.biasDiff,T=w.biasComplementDiff,E=m(f.height.val-d.h,x,b),A=E.biasDiff,S=E.biasComplementDiff;l.autoPadding=g(d.w,d.h,s.pstyle("padding"),s.pstyle("padding-relative-to").value),l.autoWidth=Math.max(d.w,f.width.val),p.x=(-C+d.x1+d.x2+T)/2,l.autoHeight=Math.max(d.h,f.height.val),p.y=(-A+d.y1+d.y2+S)/2}o(r,"update");for(var n=0;ne.x2?i:e.x2,e.y1=ne.y2?a:e.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1)},"updateBounds"),Up=o(function(e,r){return r==null?e:Vl(e,r.x1,r.y1,r.x2,r.y2)},"updateBoundsFromBox"),Pb=o(function(e,r,n){return Ul(e,r,n)},"prefixedProperty"),o6=o(function(e,r,n){if(!r.cy().headless()){var i=r._private,a=i.rstyle,s=a.arrowWidth/2,l=r.pstyle(n+"-arrow-shape").value,u,h;if(l!=="none"){n==="source"?(u=a.srcX,h=a.srcY):n==="target"?(u=a.tgtX,h=a.tgtY):(u=a.midX,h=a.midY);var f=i.arrowBounds=i.arrowBounds||{},d=f[n]=f[n]||{};d.x1=u-s,d.y1=h-s,d.x2=u+s,d.y2=h+s,d.w=d.x2-d.x1,d.h=d.y2-d.y1,m6(d,1),Vl(e,d.x1,d.y1,d.x2,d.y2)}}},"updateBoundsFromArrow"),DP=o(function(e,r,n){if(!r.cy().headless()){var i;n?i=n+"-":i="";var a=r._private,s=a.rstyle,l=r.pstyle(i+"label").strValue;if(l){var u=r.pstyle("text-halign"),h=r.pstyle("text-valign"),f=Pb(s,"labelWidth",n),d=Pb(s,"labelHeight",n),p=Pb(s,"labelX",n),m=Pb(s,"labelY",n),g=r.pstyle(i+"text-margin-x").pfValue,y=r.pstyle(i+"text-margin-y").pfValue,v=r.isEdge(),x=r.pstyle(i+"text-rotation"),b=r.pstyle("text-outline-width").pfValue,w=r.pstyle("text-border-width").pfValue,C=w/2,T=r.pstyle("text-background-padding").pfValue,E=2,A=d,S=f,_=S/2,I=A/2,L,k,D,R;if(v)L=p-_,k=p+_,D=m-I,R=m+I;else{switch(u.value){case"left":L=p-S,k=p;break;case"center":L=p-_,k=p+_;break;case"right":L=p,k=p+S;break}switch(h.value){case"top":D=m-A,R=m;break;case"center":D=m-I,R=m+I;break;case"bottom":D=m,R=m+A;break}}var O=g-Math.max(b,C)-T-E,M=g+Math.max(b,C)+T+E,P=y-Math.max(b,C)-T-E,B=y+Math.max(b,C)+T+E;L+=O,k+=M,D+=P,R+=B;var F=n||"main",z=a.labelBounds,$=z[F]=z[F]||{};$.x1=L,$.y1=D,$.x2=k,$.y2=R,$.w=k-L,$.h=R-D,$.leftPad=O,$.rightPad=M,$.topPad=P,$.botPad=B;var U=v&&x.strValue==="autorotate",Q=x.pfValue!=null&&x.pfValue!==0;if(U||Q){var te=U?Pb(a.rstyle,"labelAngle",n):x.pfValue,Y=Math.cos(te),he=Math.sin(te),Z=(L+k)/2,ue=(D+R)/2;if(!v){switch(u.value){case"left":Z=k;break;case"right":Z=L;break}switch(h.value){case"top":ue=R;break;case"bottom":ue=D;break}}var K=o(function(se,ae){return se=se-Z,ae=ae-ue,{x:se*Y-ae*he+Z,y:se*he+ae*Y+ue}},"rotate"),j=K(L,D),ne=K(L,R),ee=K(k,D),ce=K(k,R);L=Math.min(j.x,ne.x,ee.x,ce.x),k=Math.max(j.x,ne.x,ee.x,ce.x),D=Math.min(j.y,ne.y,ee.y,ce.y),R=Math.max(j.y,ne.y,ee.y,ce.y)}var le=F+"Rot",J=z[le]=z[le]||{};J.x1=L,J.y1=D,J.x2=k,J.y2=R,J.w=k-L,J.h=R-D,Vl(e,L,D,k,R),Vl(a.labelBounds.all,L,D,k,R)}return e}},"updateBoundsFromLabel"),oKe=o(function(e,r){if(!r.cy().headless()){var n=r.pstyle("outline-opacity").value,i=r.pstyle("outline-width").value;if(n>0&&i>0){var a=r.pstyle("outline-offset").value,s=r.pstyle("shape").value,l=i+a,u=(e.w+l*2)/e.w,h=(e.h+l*2)/e.h,f=0,d=0;["diamond","pentagon","round-triangle"].includes(s)?(u=(e.w+l*2.4)/e.w,d=-l/3.6):["concave-hexagon","rhomboid","right-rhomboid"].includes(s)?u=(e.w+l*2.4)/e.w:s==="star"?(u=(e.w+l*2.8)/e.w,h=(e.h+l*2.6)/e.h,d=-l/3.8):s==="triangle"?(u=(e.w+l*2.8)/e.w,h=(e.h+l*2.4)/e.h,d=-l/1.4):s==="vee"&&(u=(e.w+l*4.4)/e.w,h=(e.h+l*3.8)/e.h,d=-l*.5);var p=e.h*h-e.h,m=e.w*u-e.w;if(g6(e,[Math.ceil(p/2),Math.ceil(m/2)]),f!=0||d!==0){var g=_qe(e,f,d);fme(e,g)}}}},"updateBoundsFromOutline"),lKe=o(function(e,r){var n=e._private.cy,i=n.styleEnabled(),a=n.headless(),s=qs(),l=e._private,u=e.isNode(),h=e.isEdge(),f,d,p,m,g,y,v=l.rstyle,x=u&&i?e.pstyle("bounds-expansion").pfValue:[0],b=o(function(Se){return Se.pstyle("display").value!=="none"},"isDisplayed"),w=!i||b(e)&&(!h||b(e.source())&&b(e.target()));if(w){var C=0,T=0;i&&r.includeOverlays&&(C=e.pstyle("overlay-opacity").value,C!==0&&(T=e.pstyle("overlay-padding").value));var E=0,A=0;i&&r.includeUnderlays&&(E=e.pstyle("underlay-opacity").value,E!==0&&(A=e.pstyle("underlay-padding").value));var S=Math.max(T,A),_=0,I=0;if(i&&(_=e.pstyle("width").pfValue,I=_/2),u&&r.includeNodes){var L=e.position();g=L.x,y=L.y;var k=e.outerWidth(),D=k/2,R=e.outerHeight(),O=R/2;f=g-D,d=g+D,p=y-O,m=y+O,Vl(s,f,p,d,m),i&&r.includeOutlines&&oKe(s,e)}else if(h&&r.includeEdges)if(i&&!a){var M=e.pstyle("curve-style").strValue;if(f=Math.min(v.srcX,v.midX,v.tgtX),d=Math.max(v.srcX,v.midX,v.tgtX),p=Math.min(v.srcY,v.midY,v.tgtY),m=Math.max(v.srcY,v.midY,v.tgtY),f-=I,d+=I,p-=I,m+=I,Vl(s,f,p,d,m),M==="haystack"){var P=v.haystackPts;if(P&&P.length===2){if(f=P[0].x,p=P[0].y,d=P[1].x,m=P[1].y,f>d){var B=f;f=d,d=B}if(p>m){var F=p;p=m,m=F}Vl(s,f-I,p-I,d+I,m+I)}}else if(M==="bezier"||M==="unbundled-bezier"||M.endsWith("segments")||M.endsWith("taxi")){var z;switch(M){case"bezier":case"unbundled-bezier":z=v.bezierPts;break;case"segments":case"taxi":case"round-segments":case"round-taxi":z=v.linePts;break}if(z!=null)for(var $=0;$d){var Z=f;f=d,d=Z}if(p>m){var ue=p;p=m,m=ue}f-=I,d+=I,p-=I,m+=I,Vl(s,f,p,d,m)}if(i&&r.includeEdges&&h&&(o6(s,e,"mid-source"),o6(s,e,"mid-target"),o6(s,e,"source"),o6(s,e,"target")),i){var K=e.pstyle("ghost").value==="yes";if(K){var j=e.pstyle("ghost-offset-x").pfValue,ne=e.pstyle("ghost-offset-y").pfValue;Vl(s,s.x1+j,s.y1+ne,s.x2+j,s.y2+ne)}}var ee=l.bodyBounds=l.bodyBounds||{};Ipe(ee,s),g6(ee,x),m6(ee,1),i&&(f=s.x1,d=s.x2,p=s.y1,m=s.y2,Vl(s,f-S,p-S,d+S,m+S));var ce=l.overlayBounds=l.overlayBounds||{};Ipe(ce,s),g6(ce,x),m6(ce,1);var le=l.labelBounds=l.labelBounds||{};le.all!=null?Aqe(le.all):le.all=qs(),i&&r.includeLabels&&(r.includeMainLabels&&DP(s,e,null),h&&(r.includeSourceLabels&&DP(s,e,"source"),r.includeTargetLabels&&DP(s,e,"target")))}return s.x1=tl(s.x1),s.y1=tl(s.y1),s.x2=tl(s.x2),s.y2=tl(s.y2),s.w=tl(s.x2-s.x1),s.h=tl(s.y2-s.y1),s.w>0&&s.h>0&&w&&(g6(s,x),m6(s,1)),s},"boundingBoxImpl"),$me=o(function(e){var r=0,n=o(function(s){return(s?1:0)<=0;l--)s(l);return this};Ff.removeAllListeners=function(){return this.removeListener("*")};Ff.emit=Ff.trigger=function(t,e,r){var n=this.listeners,i=n.length;return this.emitting++,En(e)||(e=[e]),EKe(this,function(a,s){r!=null&&(n=[{event:s.event,type:s.type,namespace:s.namespace,callback:r}],i=n.length);for(var l=o(function(f){var d=n[f];if(d.type===s.type&&(!d.namespace||d.namespace===s.namespace||d.namespace===TKe)&&a.eventMatches(a.context,d,s)){var p=[s];e!=null&&tqe(p,e),a.beforeEmit(a.context,d,s),d.conf&&d.conf.one&&(a.listeners=a.listeners.filter(function(y){return y!==d}));var m=a.callbackContext(a.context,d,s),g=d.callback.apply(m,p);a.afterEmit(a.context,d,s),g===!1&&(s.stopPropagation(),s.preventDefault())}},"_loop2"),u=0;u1&&!s){var l=this.length-1,u=this[l],h=u._private.data.id;this[l]=void 0,this[e]=u,a.set(h,{ele:u,index:e})}return this.length--,this},"unmergeAt"),unmergeOne:o(function(e){e=e[0];var r=this._private,n=e._private.data.id,i=r.map,a=i.get(n);if(!a)return this;var s=a.index;return this.unmergeAt(s),this},"unmergeOne"),unmerge:o(function(e){var r=this._private.cy;if(!e)return this;if(e&&Zt(e)){var n=e;e=r.mutableElements().filter(n)}for(var i=0;i=0;r--){var n=this[r];e(n)&&this.unmergeAt(r)}return this},"unmergeBy"),map:o(function(e,r){for(var n=[],i=this,a=0;an&&(n=u,i=l)}return{value:n,ele:i}},"max"),min:o(function(e,r){for(var n=1/0,i,a=this,s=0;s=0&&a"u"?"undefined":qi(Symbol))!=e&&qi(Symbol.iterator)!=e;r&&(L6[Symbol.iterator]=function(){var n=this,i={value:void 0,done:!1},a=0,s=this.length;return H0e({next:o(function(){return a1&&arguments[1]!==void 0?arguments[1]:!0,n=this[0],i=n.cy();if(i.styleEnabled()&&n){n._private.styleDirty&&(n._private.styleDirty=!1,i.style().apply(n));var a=n._private.style[e];return a??(r?i.style().getDefaultProperty(e):null)}},"parsedStyle"),numericStyle:o(function(e){var r=this[0];if(r.cy().styleEnabled()&&r){var n=r.pstyle(e);return n.pfValue!==void 0?n.pfValue:n.value}},"numericStyle"),numericStyleUnits:o(function(e){var r=this[0];if(r.cy().styleEnabled()&&r)return r.pstyle(e).units},"numericStyleUnits"),renderedStyle:o(function(e){var r=this.cy();if(!r.styleEnabled())return this;var n=this[0];if(n)return r.style().getRenderedStyle(n,e)},"renderedStyle"),style:o(function(e,r){var n=this.cy();if(!n.styleEnabled())return this;var i=!1,a=n.style();if(Ur(e)){var s=e;a.applyBypass(this,s,i),this.emitAndNotify("style")}else if(Zt(e))if(r===void 0){var l=this[0];return l?a.getStylePropertyValue(l,e):void 0}else a.applyBypass(this,e,r,i),this.emitAndNotify("style");else if(e===void 0){var u=this[0];return u?a.getRawStyle(u):void 0}return this},"style"),removeStyle:o(function(e){var r=this.cy();if(!r.styleEnabled())return this;var n=!1,i=r.style(),a=this;if(e===void 0)for(var s=0;s0&&e.push(f[0]),e.push(l[0])}return this.spawn(e,!0).filter(t)},"neighborhood"),closedNeighborhood:o(function(e){return this.neighborhood().add(this).filter(e)},"closedNeighborhood"),openNeighborhood:o(function(e){return this.neighborhood(e)},"openNeighborhood")});$a.neighbourhood=$a.neighborhood;$a.closedNeighbourhood=$a.closedNeighborhood;$a.openNeighbourhood=$a.openNeighborhood;rr($a,{source:rl(o(function(e){var r=this[0],n;return r&&(n=r._private.source||r.cy().collection()),n&&e?n.filter(e):n},"sourceImpl"),"source"),target:rl(o(function(e){var r=this[0],n;return r&&(n=r._private.target||r.cy().collection()),n&&e?n.filter(e):n},"targetImpl"),"target"),sources:f0e({attr:"source"}),targets:f0e({attr:"target"})});o(f0e,"defineSourceFunction");rr($a,{edgesWith:rl(d0e(),"edgesWith"),edgesTo:rl(d0e({thisIsSrc:!0}),"edgesTo")});o(d0e,"defineEdgesWithFunction");rr($a,{connectedEdges:rl(function(t){for(var e=[],r=this,n=0;n0);return s},"components"),component:o(function(){var e=this[0];return e.cy().mutableElements().components(e)[0]},"component")});$a.componentsOf=$a.components;ka=o(function(e,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(e===void 0){ai("A collection must have a reference to the core");return}var a=new Zc,s=!1;if(!r)r=[];else if(r.length>0&&Ur(r[0])&&!l4(r[0])){s=!0;for(var l=[],u=new sy,h=0,f=r.length;h0&&arguments[0]!==void 0?arguments[0]:!0,e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,r=this,n=r.cy(),i=n._private,a=[],s=[],l,u=0,h=r.length;u0){for(var F=l.length===r.length?r:new ka(n,l),z=0;z0&&arguments[0]!==void 0?arguments[0]:!0,e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,r=this,n=[],i={},a=r._private.cy;function s(R){for(var O=R._private.edges,M=0;M0&&(t?L.emitAndNotify("remove"):e&&L.emit("remove"));for(var k=0;kf&&Math.abs(g.v)>f;);return p?function(y){return u[y*(u.length-1)|0]}:h},"springRK4Factory")}(),Nn=o(function(e,r,n,i){var a=IKe(e,r,n,i);return function(s,l,u){return s+(l-s)*a(u)}},"cubicBezier"),x6={linear:o(function(e,r,n){return e+(r-e)*n},"linear"),ease:Nn(.25,.1,.25,1),"ease-in":Nn(.42,0,1,1),"ease-out":Nn(0,0,.58,1),"ease-in-out":Nn(.42,0,.58,1),"ease-in-sine":Nn(.47,0,.745,.715),"ease-out-sine":Nn(.39,.575,.565,1),"ease-in-out-sine":Nn(.445,.05,.55,.95),"ease-in-quad":Nn(.55,.085,.68,.53),"ease-out-quad":Nn(.25,.46,.45,.94),"ease-in-out-quad":Nn(.455,.03,.515,.955),"ease-in-cubic":Nn(.55,.055,.675,.19),"ease-out-cubic":Nn(.215,.61,.355,1),"ease-in-out-cubic":Nn(.645,.045,.355,1),"ease-in-quart":Nn(.895,.03,.685,.22),"ease-out-quart":Nn(.165,.84,.44,1),"ease-in-out-quart":Nn(.77,0,.175,1),"ease-in-quint":Nn(.755,.05,.855,.06),"ease-out-quint":Nn(.23,1,.32,1),"ease-in-out-quint":Nn(.86,0,.07,1),"ease-in-expo":Nn(.95,.05,.795,.035),"ease-out-expo":Nn(.19,1,.22,1),"ease-in-out-expo":Nn(1,0,0,1),"ease-in-circ":Nn(.6,.04,.98,.335),"ease-out-circ":Nn(.075,.82,.165,1),"ease-in-out-circ":Nn(.785,.135,.15,.86),spring:o(function(e,r,n){if(n===0)return x6.linear;var i=OKe(e,r,n);return function(a,s,l){return a+(s-a)*i(l)}},"spring"),"cubic-bezier":Nn};o(m0e,"getEasedValue");o(g0e,"getValue");o(q1,"ease");o(PKe,"step$1");o(Fb,"valid");o(BKe,"startAnimation");o(y0e,"stepAll");FKe={animate:un.animate(),animation:un.animation(),animated:un.animated(),clearQueue:un.clearQueue(),delay:un.delay(),delayAnimation:un.delayAnimation(),stop:un.stop(),addToAnimationPool:o(function(e){var r=this;r.styleEnabled()&&r._private.aniEles.merge(e)},"addToAnimationPool"),stopAnimationLoop:o(function(){this._private.animationsRunning=!1},"stopAnimationLoop"),startAnimationLoop:o(function(){var e=this;if(e._private.animationsRunning=!0,!e.styleEnabled())return;function r(){e._private.animationsRunning&&S6(o(function(a){y0e(a,e),r()},"animationStep"))}o(r,"headlessStep");var n=e.renderer();n&&n.beforeRender?n.beforeRender(o(function(a,s){y0e(s,e)},"rendererAnimationStep"),n.beforeRenderPriorities.animations):r()},"startAnimationLoop")},$Ke={qualifierCompare:o(function(e,r){return e==null||r==null?e==null&&r==null:e.sameText(r)},"qualifierCompare"),eventMatches:o(function(e,r,n){var i=r.qualifier;return i!=null?e!==n.target&&l4(n.target)&&i.matches(n.target):!0},"eventMatches"),addEventFields:o(function(e,r){r.cy=e,r.target=e},"addEventFields"),callbackContext:o(function(e,r,n){return r.qualifier!=null?n.target:e},"callbackContext")},u6=o(function(e){return Zt(e)?new Pf(e):e},"argSelector"),Kme={createEmitter:o(function(){var e=this._private;return e.emitter||(e.emitter=new W6($Ke,this)),this},"createEmitter"),emitter:o(function(){return this._private.emitter},"emitter"),on:o(function(e,r,n){return this.emitter().on(e,u6(r),n),this},"on"),removeListener:o(function(e,r,n){return this.emitter().removeListener(e,u6(r),n),this},"removeListener"),removeAllListeners:o(function(){return this.emitter().removeAllListeners(),this},"removeAllListeners"),one:o(function(e,r,n){return this.emitter().one(e,u6(r),n),this},"one"),once:o(function(e,r,n){return this.emitter().one(e,u6(r),n),this},"once"),emit:o(function(e,r){return this.emitter().emit(e,r),this},"emit"),emitAndNotify:o(function(e,r){return this.emit(e),this.notify(e,r),this},"emitAndNotify")};un.eventAliasesOn(Kme);WP={png:o(function(e){var r=this._private.renderer;return e=e||{},r.png(e)},"png"),jpg:o(function(e){var r=this._private.renderer;return e=e||{},e.bg=e.bg||"#fff",r.jpg(e)},"jpg")};WP.jpeg=WP.jpg;b6={layout:o(function(e){var r=this;if(e==null){ai("Layout options must be specified to make a layout");return}if(e.name==null){ai("A `name` must be specified to make a layout");return}var n=e.name,i=r.extension("layout",n);if(i==null){ai("No such layout `"+n+"` found. Did you forget to import it and `cytoscape.use()` it?");return}var a;Zt(e.eles)?a=r.$(e.eles):a=e.eles!=null?e.eles:r.$();var s=new i(rr({},e,{cy:r,eles:a}));return s},"layout")};b6.createLayout=b6.makeLayout=b6.layout;zKe={notify:o(function(e,r){var n=this._private;if(this.batching()){n.batchNotifications=n.batchNotifications||{};var i=n.batchNotifications[e]=n.batchNotifications[e]||this.collection();r!=null&&i.merge(r);return}if(n.notificationsEnabled){var a=this.renderer();this.destroyed()||!a||a.notify(e,r)}},"notify"),notifications:o(function(e){var r=this._private;return e===void 0?r.notificationsEnabled:(r.notificationsEnabled=!!e,this)},"notifications"),noNotifications:o(function(e){this.notifications(!1),e(),this.notifications(!0)},"noNotifications"),batching:o(function(){return this._private.batchCount>0},"batching"),startBatch:o(function(){var e=this._private;return e.batchCount==null&&(e.batchCount=0),e.batchCount===0&&(e.batchStyleEles=this.collection(),e.batchNotifications={}),e.batchCount++,this},"startBatch"),endBatch:o(function(){var e=this._private;if(e.batchCount===0)return this;if(e.batchCount--,e.batchCount===0){e.batchStyleEles.updateStyle();var r=this.renderer();Object.keys(e.batchNotifications).forEach(function(n){var i=e.batchNotifications[n];i.empty()?r.notify(n):r.notify(n,i)})}return this},"endBatch"),batch:o(function(e){return this.startBatch(),e(),this.endBatch(),this},"batch"),batchData:o(function(e){var r=this;return this.batch(function(){for(var n=Object.keys(e),i=0;i0;)r.removeChild(r.childNodes[0]);e._private.renderer=null,e.mutableElements().forEach(function(n){var i=n._private;i.rscratch={},i.rstyle={},i.animation.current=[],i.animation.queue=[]})},"destroyRenderer"),onRender:o(function(e){return this.on("render",e)},"onRender"),offRender:o(function(e){return this.off("render",e)},"offRender")};qP.invalidateDimensions=qP.resize;w6={collection:o(function(e,r){return Zt(e)?this.$(e):vo(e)?e.collection():En(e)?(r||(r={}),new ka(this,e,r.unique,r.removed)):new ka(this)},"collection"),nodes:o(function(e){var r=this.$(function(n){return n.isNode()});return e?r.filter(e):r},"nodes"),edges:o(function(e){var r=this.$(function(n){return n.isEdge()});return e?r.filter(e):r},"edges"),$:o(function(e){var r=this._private.elements;return e?r.filter(e):r.spawnSelf()},"$"),mutableElements:o(function(){return this._private.elements},"mutableElements")};w6.elements=w6.filter=w6.$;Ga={},qb="t",VKe="f";Ga.apply=function(t){for(var e=this,r=e._private,n=r.cy,i=n.collection(),a=0;a0;if(p||d&&m){var g=void 0;p&&m||p?g=h.properties:m&&(g=h.mappedProperties);for(var y=0;y1&&(C=1),l.color){var E=n.valueMin[0],A=n.valueMax[0],S=n.valueMin[1],_=n.valueMax[1],I=n.valueMin[2],L=n.valueMax[2],k=n.valueMin[3]==null?1:n.valueMin[3],D=n.valueMax[3]==null?1:n.valueMax[3],R=[Math.round(E+(A-E)*C),Math.round(S+(_-S)*C),Math.round(I+(L-I)*C),Math.round(k+(D-k)*C)];a={bypass:n.bypass,name:n.name,value:R,strValue:"rgb("+R[0]+", "+R[1]+", "+R[2]+")"}}else if(l.number){var O=n.valueMin+(n.valueMax-n.valueMin)*C;a=this.parse(n.name,O,n.bypass,p)}else return!1;if(!a)return y(),!1;a.mapping=n,n=a;break}case s.data:{for(var M=n.field.split("."),P=d.data,B=0;B0&&a>0){for(var l={},u=!1,h=0;h0?t.delayAnimation(s).play().promise().then(w):w()}).then(function(){return t.animation({style:l,duration:a,easing:t.pstyle("transition-timing-function").value,queue:!1}).play().promise()}).then(function(){r.removeBypasses(t,i),t.emitAndNotify("style"),n.transitioning=!1})}else n.transitioning&&(this.removeBypasses(t,i),t.emitAndNotify("style"),n.transitioning=!1)};Ga.checkTrigger=function(t,e,r,n,i,a){var s=this.properties[e],l=i(s);l!=null&&l(r,n)&&a(s)};Ga.checkZOrderTrigger=function(t,e,r,n){var i=this;this.checkTrigger(t,e,r,n,function(a){return a.triggersZOrder},function(){i._private.cy.notify("zorder",t)})};Ga.checkBoundsTrigger=function(t,e,r,n){this.checkTrigger(t,e,r,n,function(i){return i.triggersBounds},function(i){t.dirtyCompoundBoundsCache(),t.dirtyBoundingBoxCache(),i.triggersBoundsOfParallelBeziers&&e==="curve-style"&&(r==="bezier"||n==="bezier")&&t.parallelEdges().forEach(function(a){a.dirtyBoundingBoxCache()}),i.triggersBoundsOfConnectedEdges&&e==="display"&&(r==="none"||n==="none")&&t.connectedEdges().forEach(function(a){a.dirtyBoundingBoxCache()})})};Ga.checkTriggers=function(t,e,r,n){t.dirtyStyleCache(),this.checkZOrderTrigger(t,e,r,n),this.checkBoundsTrigger(t,e,r,n)};d4={};d4.applyBypass=function(t,e,r,n){var i=this,a=[],s=!0;if(e==="*"||e==="**"){if(r!==void 0)for(var l=0;li.length?n=n.substr(i.length):n=""}o(l,"removeSelAndBlockFromRemaining");function u(){a.length>s.length?a=a.substr(s.length):a=""}for(o(u,"removePropAndValFromRem");;){var h=n.match(/^\s*$/);if(h)break;var f=n.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/);if(!f){hn("Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: "+n);break}i=f[0];var d=f[1];if(d!=="core"){var p=new Pf(d);if(p.invalid){hn("Skipping parsing of block: Invalid selector found in string stylesheet: "+d),l();continue}}var m=f[2],g=!1;a=m;for(var y=[];;){var v=a.match(/^\s*$/);if(v)break;var x=a.match(/^\s*(.+?)\s*:\s*(.+?)(?:\s*;|\s*$)/);if(!x){hn("Skipping parsing of block: Invalid formatting of style property and value definitions found in:"+m),g=!0;break}s=x[0];var b=x[1],w=x[2],C=e.properties[b];if(!C){hn("Skipping property: Invalid property name in: "+s),u();continue}var T=r.parse(b,w);if(!T){hn("Skipping property: Invalid property definition in: "+s),u();continue}y.push({name:b,val:w}),u()}if(g){l();break}r.selector(d);for(var E=0;E=7&&e[0]==="d"&&(f=new RegExp(l.data.regex).exec(e))){if(r)return!1;var p=l.data;return{name:t,value:f,strValue:""+e,mapped:p,field:f[1],bypass:r}}else if(e.length>=10&&e[0]==="m"&&(d=new RegExp(l.mapData.regex).exec(e))){if(r||h.multiple)return!1;var m=l.mapData;if(!(h.color||h.number))return!1;var g=this.parse(t,d[4]);if(!g||g.mapped)return!1;var y=this.parse(t,d[5]);if(!y||y.mapped)return!1;if(g.pfValue===y.pfValue||g.strValue===y.strValue)return hn("`"+t+": "+e+"` is not a valid mapper because the output range is zero; converting to `"+t+": "+g.strValue+"`"),this.parse(t,g.strValue);if(h.color){var v=g.value,x=y.value,b=v[0]===x[0]&&v[1]===x[1]&&v[2]===x[2]&&(v[3]===x[3]||(v[3]==null||v[3]===1)&&(x[3]==null||x[3]===1));if(b)return!1}return{name:t,value:d,strValue:""+e,mapped:m,field:d[1],fieldMin:parseFloat(d[2]),fieldMax:parseFloat(d[3]),valueMin:g.value,valueMax:y.value,bypass:r}}}if(h.multiple&&n!=="multiple"){var w;if(u?w=e.split(/\s+/):En(e)?w=e:w=[e],h.evenMultiple&&w.length%2!==0)return null;for(var C=[],T=[],E=[],A="",S=!1,_=0;_0?" ":"")+I.strValue}return h.validate&&!h.validate(C,T)?null:h.singleEnum&&S?C.length===1&&Zt(C[0])?{name:t,value:C[0],strValue:C[0],bypass:r}:null:{name:t,value:C,pfValue:E,strValue:A,bypass:r,units:T}}var L=o(function(){for(var K=0;Kh.max||h.strictMax&&e===h.max))return null;var M={name:t,value:e,strValue:""+e+(k||""),units:k,bypass:r};return h.unitless||k!=="px"&&k!=="em"?M.pfValue=e:M.pfValue=k==="px"||!k?e:this.getEmSizeInPixels()*e,(k==="ms"||k==="s")&&(M.pfValue=k==="ms"?e:1e3*e),(k==="deg"||k==="rad")&&(M.pfValue=k==="rad"?e:kqe(e)),k==="%"&&(M.pfValue=e/100),M}else if(h.propList){var P=[],B=""+e;if(B!=="none"){for(var F=B.split(/\s*,\s*|\s+/),z=0;z0&&l>0&&!isNaN(n.w)&&!isNaN(n.h)&&n.w>0&&n.h>0){u=Math.min((s-2*r)/n.w,(l-2*r)/n.h),u=u>this._private.maxZoom?this._private.maxZoom:u,u=u=n.minZoom&&(n.maxZoom=r),this},"zoomRange"),minZoom:o(function(e){return e===void 0?this._private.minZoom:this.zoomRange({min:e})},"minZoom"),maxZoom:o(function(e){return e===void 0?this._private.maxZoom:this.zoomRange({max:e})},"maxZoom"),getZoomedViewport:o(function(e){var r=this._private,n=r.pan,i=r.zoom,a,s,l=!1;if(r.zoomingEnabled||(l=!0),Ct(e)?s=e:Ur(e)&&(s=e.level,e.position!=null?a=$6(e.position,i,n):e.renderedPosition!=null&&(a=e.renderedPosition),a!=null&&!r.panningEnabled&&(l=!0)),s=s>r.maxZoom?r.maxZoom:s,s=sr.maxZoom||!r.zoomingEnabled?s=!0:(r.zoom=u,a.push("zoom"))}if(i&&(!s||!e.cancelOnFailedZoom)&&r.panningEnabled){var h=e.pan;Ct(h.x)&&(r.pan.x=h.x,l=!1),Ct(h.y)&&(r.pan.y=h.y,l=!1),l||a.push("pan")}return a.length>0&&(a.push("viewport"),this.emit(a.join(" ")),this.notify("viewport")),this},"viewport"),center:o(function(e){var r=this.getCenterPan(e);return r&&(this._private.pan=r,this.emit("pan viewport"),this.notify("viewport")),this},"center"),getCenterPan:o(function(e,r){if(this._private.panningEnabled){if(Zt(e)){var n=e;e=this.mutableElements().filter(n)}else vo(e)||(e=this.mutableElements());if(e.length!==0){var i=e.boundingBox(),a=this.width(),s=this.height();r=r===void 0?this._private.zoom:r;var l={x:(a-r*(i.x1+i.x2))/2,y:(s-r*(i.y1+i.y2))/2};return l}}},"getCenterPan"),reset:o(function(){return!this._private.panningEnabled||!this._private.zoomingEnabled?this:(this.viewport({pan:{x:0,y:0},zoom:1}),this)},"reset"),invalidateSize:o(function(){this._private.sizeCache=null},"invalidateSize"),size:o(function(){var e=this._private,r=e.container,n=this;return e.sizeCache=e.sizeCache||(r?function(){var i=n.window().getComputedStyle(r),a=o(function(l){return parseFloat(i.getPropertyValue(l))},"val");return{width:r.clientWidth-a("padding-left")-a("padding-right"),height:r.clientHeight-a("padding-top")-a("padding-bottom")}}():{width:1,height:1})},"size"),width:o(function(){return this.size().width},"width"),height:o(function(){return this.size().height},"height"),extent:o(function(){var e=this._private.pan,r=this._private.zoom,n=this.renderedExtent(),i={x1:(n.x1-e.x)/r,x2:(n.x2-e.x)/r,y1:(n.y1-e.y)/r,y2:(n.y2-e.y)/r};return i.w=i.x2-i.x1,i.h=i.y2-i.y1,i},"extent"),renderedExtent:o(function(){var e=this.width(),r=this.height();return{x1:0,y1:0,x2:e,y2:r,w:e,h:r}},"renderedExtent"),multiClickDebounceTime:o(function(e){if(e)this._private.multiClickDebounceTime=e;else return this._private.multiClickDebounceTime;return this},"multiClickDebounceTime")};Qp.centre=Qp.center;Qp.autolockNodes=Qp.autolock;Qp.autoungrabifyNodes=Qp.autoungrabify;a4={data:un.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeData:un.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),scratch:un.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:un.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0})};a4.attr=a4.data;a4.removeAttr=a4.removeData;s4=o(function(e){var r=this;e=rr({},e);var n=e.container;n&&!E6(n)&&E6(n[0])&&(n=n[0]);var i=n?n._cyreg:null;i=i||{},i&&i.cy&&(i.cy.destroy(),i={});var a=i.readies=i.readies||[];n&&(n._cyreg=i),i.cy=r;var s=Hi!==void 0&&n!==void 0&&!e.headless,l=e;l.layout=rr({name:s?"grid":"null"},l.layout),l.renderer=rr({name:s?"canvas":"null"},l.renderer);var u=o(function(g,y,v){return y!==void 0?y:v!==void 0?v:g},"defVal"),h=this._private={container:n,ready:!1,options:l,elements:new ka(this),listeners:[],aniEles:new ka(this),data:l.data||{},scratch:{},layout:null,renderer:null,destroyed:!1,notificationsEnabled:!0,minZoom:1e-50,maxZoom:1e50,zoomingEnabled:u(!0,l.zoomingEnabled),userZoomingEnabled:u(!0,l.userZoomingEnabled),panningEnabled:u(!0,l.panningEnabled),userPanningEnabled:u(!0,l.userPanningEnabled),boxSelectionEnabled:u(!0,l.boxSelectionEnabled),autolock:u(!1,l.autolock,l.autolockNodes),autoungrabify:u(!1,l.autoungrabify,l.autoungrabifyNodes),autounselectify:u(!1,l.autounselectify),styleEnabled:l.styleEnabled===void 0?s:l.styleEnabled,zoom:Ct(l.zoom)?l.zoom:1,pan:{x:Ur(l.pan)&&Ct(l.pan.x)?l.pan.x:0,y:Ur(l.pan)&&Ct(l.pan.y)?l.pan.y:0},animation:{current:[],queue:[]},hasCompoundNodes:!1,multiClickDebounceTime:u(250,l.multiClickDebounceTime)};this.createEmitter(),this.selectionType(l.selectionType),this.zoomRange({min:l.minZoom,max:l.maxZoom});var f=o(function(g,y){var v=g.some(XHe);if(v)return oy.all(g).then(y);y(g)},"loadExtData");h.styleEnabled&&r.setStyle([]);var d=rr({},l,l.renderer);r.initRenderer(d);var p=o(function(g,y,v){r.notifications(!1);var x=r.mutableElements();x.length>0&&x.remove(),g!=null&&(Ur(g)||En(g))&&r.add(g),r.one("layoutready",function(w){r.notifications(!0),r.emit(w),r.one("load",y),r.emitAndNotify("load")}).one("layoutstop",function(){r.one("done",v),r.emit("done")});var b=rr({},r._private.options.layout);b.eles=r.elements(),r.layout(b).run()},"setElesAndLayout");f([l.style,l.elements],function(m){var g=m[0],y=m[1];h.styleEnabled&&r.style().append(g),p(y,function(){r.startAnimationLoop(),h.ready=!0,si(l.ready)&&r.on("ready",l.ready);for(var v=0;v0,l=!!t.boundingBox,u=e.extent(),h=qs(l?t.boundingBox:{x1:u.x1,y1:u.y1,w:u.w,h:u.h}),f;if(vo(t.roots))f=t.roots;else if(En(t.roots)){for(var d=[],p=0;p0;){var O=R(),M=I(O,k);if(M)O.outgoers().filter(function(ae){return ae.isNode()&&r.has(ae)}).forEach(D);else if(M===null){hn("Detected double maximal shift for node `"+O.id()+"`. Bailing maximal adjustment due to cycle. Use `options.maximal: true` only on DAGs.");break}}}var P=0;if(t.avoidOverlap)for(var B=0;B0&&b[0].length<=3?ze/2:0),Ie=2*Math.PI/b[Be].length*He;return Be===0&&b[0].length===1&&(Le=1),{x:ce.x+Le*Math.cos(Ie),y:ce.y+Le*Math.sin(Ie)}}else{var xe=b[Be].length,q=Math.max(xe===1?0:l?(h.w-t.padding*2-le.w)/((t.grid?Se:xe)-1):(h.w-t.padding*2-le.w)/((t.grid?Se:xe)+1),P),de={x:ce.x+(He+1-(xe+1)/2)*q,y:ce.y+(Be+1-(he+1)/2)*J};return de}},"getPosition");return r.nodes().layoutPositions(this,t,se),this};YKe={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:o(function(e,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(e,r){return r},"transform")};o(Zme,"CircleLayout");Zme.prototype.run=function(){var t=this.options,e=t,r=t.cy,n=e.eles,i=e.counterclockwise!==void 0?!e.counterclockwise:e.clockwise,a=n.nodes().not(":parent");e.sort&&(a=a.sort(e.sort));for(var s=qs(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()}),l={x:s.x1+s.w/2,y:s.y1+s.h/2},u=e.sweep===void 0?2*Math.PI-2*Math.PI/a.length:e.sweep,h=u/Math.max(1,a.length-1),f,d=0,p=0;p1&&e.avoidOverlap){d*=1.75;var x=Math.cos(h)-Math.cos(0),b=Math.sin(h)-Math.sin(0),w=Math.sqrt(d*d/(x*x+b*b));f=Math.max(w,f)}var C=o(function(E,A){var S=e.startAngle+A*h*(i?1:-1),_=f*Math.cos(S),I=f*Math.sin(S),L={x:l.x+_,y:l.y+I};return L},"getPos");return n.nodes().layoutPositions(this,e,C),this};XKe={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:o(function(e){return e.degree()},"concentric"),levelWidth:o(function(e){return e.maxDegree()/4},"levelWidth"),animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(e,r){return r},"transform")};o(Jme,"ConcentricLayout");Jme.prototype.run=function(){for(var t=this.options,e=t,r=e.counterclockwise!==void 0?!e.counterclockwise:e.clockwise,n=t.cy,i=e.eles,a=i.nodes().not(":parent"),s=qs(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:n.width(),h:n.height()}),l={x:s.x1+s.w/2,y:s.y1+s.h/2},u=[],h=0,f=0;f0){var T=Math.abs(b[0].value-C.value);T>=v&&(b=[],x.push(b))}b.push(C)}var E=h+e.minNodeSpacing;if(!e.avoidOverlap){var A=x.length>0&&x[0].length>1,S=Math.min(s.w,s.h)/2-E,_=S/(x.length+A?1:0);E=Math.min(E,_)}for(var I=0,L=0;L1&&e.avoidOverlap){var O=Math.cos(R)-Math.cos(0),M=Math.sin(R)-Math.sin(0),P=Math.sqrt(E*E/(O*O+M*M));I=Math.max(P,I)}k.r=I,I+=E}if(e.equidistant){for(var B=0,F=0,z=0;z=t.numIter||(rQe(n,t),n.temperature=n.temperature*t.coolingFactor,n.temperature=t.animationThreshold&&a(),S6(d)}},"frame");f()}else{for(;h;)h=s(u),u++;b0e(n,t),l()}return this};K6.prototype.stop=function(){return this.stopped=!0,this.thread&&this.thread.stop(),this.emit("layoutstop"),this};K6.prototype.destroy=function(){return this.thread&&this.thread.stop(),this};KKe=o(function(e,r,n){for(var i=n.eles.edges(),a=n.eles.nodes(),s=qs(n.boundingBox?n.boundingBox:{x1:0,y1:0,w:e.width(),h:e.height()}),l={isCompound:e.hasCompoundNodes(),layoutNodes:[],idToIndex:{},nodeSize:a.size(),graphSet:[],indexToGraph:[],layoutEdges:[],edgeSize:i.size(),temperature:n.initialTemp,clientWidth:s.w,clientHeight:s.h,boundingBox:s},u=n.eles.components(),h={},f=0;f0){l.graphSet.push(S);for(var f=0;fi.count?0:i.graph},"findLCA"),ZKe=o(function t(e,r,n,i){var a=i.graphSet[n];if(-10)var d=i.nodeOverlap*f,p=Math.sqrt(l*l+u*u),m=d*l/p,g=d*u/p;else var y=N6(e,l,u),v=N6(r,-1*l,-1*u),x=v.x-y.x,b=v.y-y.y,w=x*x+b*b,p=Math.sqrt(w),d=(e.nodeRepulsion+r.nodeRepulsion)/w,m=d*x/p,g=d*b/p;e.isLocked||(e.offsetX-=m,e.offsetY-=g),r.isLocked||(r.offsetX+=m,r.offsetY+=g)}},"nodeRepulsion"),aQe=o(function(e,r,n,i){if(n>0)var a=e.maxX-r.minX;else var a=r.maxX-e.minX;if(i>0)var s=e.maxY-r.minY;else var s=r.maxY-e.minY;return a>=0&&s>=0?Math.sqrt(a*a+s*s):0},"nodesOverlap"),N6=o(function(e,r,n){var i=e.positionX,a=e.positionY,s=e.height||1,l=e.width||1,u=n/r,h=s/l,f={};return r===0&&0n?(f.x=i,f.y=a+s/2,f):0r&&-1*h<=u&&u<=h?(f.x=i-l/2,f.y=a-l*n/2/r,f):0=h)?(f.x=i+s*r/2/n,f.y=a+s/2,f):(0>n&&(u<=-1*h||u>=h)&&(f.x=i-s*r/2/n,f.y=a-s/2),f)},"findClippingPoint"),sQe=o(function(e,r){for(var n=0;nn){var v=r.gravity*m/y,x=r.gravity*g/y;p.offsetX+=v,p.offsetY+=x}}}}},"calculateGravityForces"),lQe=o(function(e,r){var n=[],i=0,a=-1;for(n.push.apply(n,e.graphSet[0]),a+=e.graphSet[0].length;i<=a;){var s=n[i++],l=e.idToIndex[s],u=e.layoutNodes[l],h=u.children;if(0n)var a={x:n*e/i,y:n*r/i};else var a={x:e,y:r};return a},"limitForce"),hQe=o(function t(e,r){var n=e.parentId;if(n!=null){var i=r.layoutNodes[r.idToIndex[n]],a=!1;if((i.maxX==null||e.maxX+i.padRight>i.maxX)&&(i.maxX=e.maxX+i.padRight,a=!0),(i.minX==null||e.minX-i.padLefti.maxY)&&(i.maxY=e.maxY+i.padBottom,a=!0),(i.minY==null||e.minY-i.padTopx&&(g+=v+r.componentSpacing,m=0,y=0,v=0)}}},"separateComponents"),fQe={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:o(function(e){},"position"),sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(e,r){return r},"transform")};o(tge,"GridLayout");tge.prototype.run=function(){var t=this.options,e=t,r=t.cy,n=e.eles,i=n.nodes().not(":parent");e.sort&&(i=i.sort(e.sort));var a=qs(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()});if(a.h===0||a.w===0)n.nodes().layoutPositions(this,e,function(Q){return{x:a.x1,y:a.y1}});else{var s=i.size(),l=Math.sqrt(s*a.h/a.w),u=Math.round(l),h=Math.round(a.w/a.h*l),f=o(function(te){if(te==null)return Math.min(u,h);var Y=Math.min(u,h);Y==u?u=te:h=te},"small"),d=o(function(te){if(te==null)return Math.max(u,h);var Y=Math.max(u,h);Y==u?u=te:h=te},"large"),p=e.rows,m=e.cols!=null?e.cols:e.columns;if(p!=null&&m!=null)u=p,h=m;else if(p!=null&&m==null)u=p,h=Math.ceil(s/u);else if(p==null&&m!=null)h=m,u=Math.ceil(s/h);else if(h*u>s){var g=f(),y=d();(g-1)*y>=s?f(g-1):(y-1)*g>=s&&d(y-1)}else for(;h*u=s?d(x+1):f(v+1)}var b=a.w/h,w=a.h/u;if(e.condense&&(b=0,w=0),e.avoidOverlap)for(var C=0;C=h&&(O=0,R++)},"moveToNextCell"),P={},B=0;B(O=Pqe(t,e,M[P],M[P+1],M[P+2],M[P+3])))return v(A,O),!0}else if(_.edgeType==="bezier"||_.edgeType==="multibezier"||_.edgeType==="self"||_.edgeType==="compound"){for(var M=_.allpts,P=0;P+5<_.allpts.length;P+=4)if(Nqe(t,e,M[P],M[P+1],M[P+2],M[P+3],M[P+4],M[P+5],R)&&D>(O=Oqe(t,e,M[P],M[P+1],M[P+2],M[P+3],M[P+4],M[P+5])))return v(A,O),!0}for(var B=B||S.source,F=F||S.target,z=i.getArrowWidth(I,L),$=[{name:"source",x:_.arrowStartX,y:_.arrowStartY,angle:_.srcArrowAngle},{name:"target",x:_.arrowEndX,y:_.arrowEndY,angle:_.tgtArrowAngle},{name:"mid-source",x:_.midX,y:_.midY,angle:_.midsrcArrowAngle},{name:"mid-target",x:_.midX,y:_.midY,angle:_.midtgtArrowAngle}],P=0;P<$.length;P++){var U=$[P],Q=a.arrowShapes[A.pstyle(U.name+"-arrow-shape").value],te=A.pstyle("width").pfValue;if(Q.roughCollide(t,e,z,U.angle,{x:U.x,y:U.y},te,f)&&Q.collide(t,e,z,U.angle,{x:U.x,y:U.y},te,f))return v(A),!0}h&&l.length>0&&(x(B),x(F))}o(b,"checkEdge");function w(A,S,_){return Ul(A,S,_)}o(w,"preprop");function C(A,S){var _=A._private,I=p,L;S?L=S+"-":L="",A.boundingBox();var k=_.labelBounds[S||"main"],D=A.pstyle(L+"label").value,R=A.pstyle("text-events").strValue==="yes";if(!(!R||!D)){var O=w(_.rscratch,"labelX",S),M=w(_.rscratch,"labelY",S),P=w(_.rscratch,"labelAngle",S),B=A.pstyle(L+"text-margin-x").pfValue,F=A.pstyle(L+"text-margin-y").pfValue,z=k.x1-I-B,$=k.x2+I-B,U=k.y1-I-F,Q=k.y2+I-F;if(P){var te=Math.cos(P),Y=Math.sin(P),he=o(function(ce,le){return ce=ce-O,le=le-M,{x:ce*te-le*Y+O,y:ce*Y+le*te+M}},"rotate"),Z=he(z,U),ue=he(z,Q),K=he($,U),j=he($,Q),ne=[Z.x+B,Z.y+F,K.x+B,K.y+F,j.x+B,j.y+F,ue.x+B,ue.y+F];if(Ws(t,e,ne))return v(A),!0}else if(ny(k,t,e))return v(A),!0}}o(C,"checkLabel");for(var T=s.length-1;T>=0;T--){var E=s[T];E.isNode()?x(E)||C(E):b(E)||C(E)||C(E,"source")||C(E,"target")}return l};Jp.getAllInBox=function(t,e,r,n){var i=this.getCachedZSortedEles().interactive,a=[],s=Math.min(t,r),l=Math.max(t,r),u=Math.min(e,n),h=Math.max(e,n);t=s,r=l,e=u,n=h;for(var f=qs({x1:t,y1:e,x2:r,y2:n}),d=0;d0?-(Math.PI-e.ang):Math.PI+e.ang},"invertVec"),vQe=o(function(e,r,n,i,a){if(e!==S0e?C0e(r,e,Kc):yQe(el,Kc),C0e(r,n,el),k0e=Kc.nx*el.ny-Kc.ny*el.nx,E0e=Kc.nx*el.nx-Kc.ny*-el.ny,eh=Math.asin(Math.max(-1,Math.min(1,k0e))),Math.abs(eh)<1e-6){YP=r.x,XP=r.y,Hp=X1=0;return}Wp=1,T6=!1,E0e<0?eh<0?eh=Math.PI+eh:(eh=Math.PI-eh,Wp=-1,T6=!0):eh>0&&(Wp=-1,T6=!0),r.radius!==void 0?X1=r.radius:X1=i,zp=eh/2,h6=Math.min(Kc.len/2,el.len/2),a?(jc=Math.abs(Math.cos(zp)*X1/Math.sin(zp)),jc>h6?(jc=h6,Hp=Math.abs(jc*Math.sin(zp)/Math.cos(zp))):Hp=X1):(jc=Math.min(h6,X1),Hp=Math.abs(jc*Math.sin(zp)/Math.cos(zp))),jP=r.x+el.nx*jc,KP=r.y+el.ny*jc,YP=jP-el.ny*Hp*Wp,XP=KP+el.nx*Hp*Wp,age=r.x+Kc.nx*jc,sge=r.y+Kc.ny*jc,S0e=r},"calcCornerArc");o(oge,"drawPreparedRoundCorner");o(wB,"getRoundCorner");Va={};Va.findMidptPtsEtc=function(t,e){var r=e.posPts,n=e.intersectionPts,i=e.vectorNormInverse,a,s=t.pstyle("source-endpoint"),l=t.pstyle("target-endpoint"),u=s.units!=null&&l.units!=null,h=o(function(T,E,A,S){var _=S-E,I=A-T,L=Math.sqrt(I*I+_*_);return{x:-_/L,y:I/L}},"recalcVectorNormInverse"),f=t.pstyle("edge-distances").value;switch(f){case"node-position":a=r;break;case"intersection":a=n;break;case"endpoints":{if(u){var d=this.manualEndptToPx(t.source()[0],s),p=Di(d,2),m=p[0],g=p[1],y=this.manualEndptToPx(t.target()[0],l),v=Di(y,2),x=v[0],b=v[1],w={x1:m,y1:g,x2:x,y2:b};i=h(m,g,x,b),a=w}else hn("Edge ".concat(t.id()," has edge-distances:endpoints specified without manual endpoints specified via source-endpoint and target-endpoint. Falling back on edge-distances:intersection (default).")),a=n;break}}return{midptPts:a,vectorNormInverse:i}};Va.findHaystackPoints=function(t){for(var e=0;e0?Math.max(W-pe,0):Math.min(W+pe,0)},"subDWH"),D=k(I,S),R=k(L,_),O=!1;b===h?x=Math.abs(D)>Math.abs(R)?i:n:b===u||b===l?(x=n,O=!0):(b===a||b===s)&&(x=i,O=!0);var M=x===n,P=M?R:D,B=M?L:I,F=hme(B),z=!1;!(O&&(C||E))&&(b===l&&B<0||b===u&&B>0||b===a&&B>0||b===s&&B<0)&&(F*=-1,P=F*Math.abs(P),z=!0);var $;if(C){var U=T<0?1+T:T;$=U*P}else{var Q=T<0?P:0;$=Q+T*F}var te=o(function(W){return Math.abs(W)=Math.abs(P)},"getIsTooClose"),Y=te($),he=te(Math.abs(P)-Math.abs($)),Z=Y||he;if(Z&&!z)if(M){var ue=Math.abs(B)<=p/2,K=Math.abs(I)<=m/2;if(ue){var j=(f.x1+f.x2)/2,ne=f.y1,ee=f.y2;r.segpts=[j,ne,j,ee]}else if(K){var ce=(f.y1+f.y2)/2,le=f.x1,J=f.x2;r.segpts=[le,ce,J,ce]}else r.segpts=[f.x1,f.y2]}else{var Se=Math.abs(B)<=d/2,se=Math.abs(L)<=g/2;if(Se){var ae=(f.y1+f.y2)/2,Oe=f.x1,ye=f.x2;r.segpts=[Oe,ae,ye,ae]}else if(se){var Be=(f.x1+f.x2)/2,He=f.y1,ze=f.y2;r.segpts=[Be,He,Be,ze]}else r.segpts=[f.x2,f.y1]}else if(M){var Le=f.y1+$+(v?p/2*F:0),Ie=f.x1,xe=f.x2;r.segpts=[Ie,Le,xe,Le]}else{var q=f.x1+$+(v?d/2*F:0),de=f.y1,ie=f.y2;r.segpts=[q,de,q,ie]}if(r.isRound){var oe=t.pstyle("taxi-radius").value,V=t.pstyle("radius-type").value[0]==="arc-radius";r.radii=new Array(r.segpts.length/2).fill(oe),r.isArcRadius=new Array(r.segpts.length/2).fill(V)}};Va.tryToCorrectInvalidPoints=function(t,e){var r=t._private.rscratch;if(r.edgeType==="bezier"){var n=e.srcPos,i=e.tgtPos,a=e.srcW,s=e.srcH,l=e.tgtW,u=e.tgtH,h=e.srcShape,f=e.tgtShape,d=e.srcCornerRadius,p=e.tgtCornerRadius,m=e.srcRs,g=e.tgtRs,y=!Ct(r.startX)||!Ct(r.startY),v=!Ct(r.arrowStartX)||!Ct(r.arrowStartY),x=!Ct(r.endX)||!Ct(r.endY),b=!Ct(r.arrowEndX)||!Ct(r.arrowEndY),w=3,C=this.getArrowWidth(t.pstyle("width").pfValue,t.pstyle("arrow-scale").value)*this.arrowShapeWidth,T=w*C,E=Xp({x:r.ctrlpts[0],y:r.ctrlpts[1]},{x:r.startX,y:r.startY}),A=ER.poolIndex()){var O=D;D=R,R=O}var M=_.srcPos=D.position(),P=_.tgtPos=R.position(),B=_.srcW=D.outerWidth(),F=_.srcH=D.outerHeight(),z=_.tgtW=R.outerWidth(),$=_.tgtH=R.outerHeight(),U=_.srcShape=r.nodeShapes[e.getNodeShape(D)],Q=_.tgtShape=r.nodeShapes[e.getNodeShape(R)],te=_.srcCornerRadius=D.pstyle("corner-radius").value==="auto"?"auto":D.pstyle("corner-radius").pfValue,Y=_.tgtCornerRadius=R.pstyle("corner-radius").value==="auto"?"auto":R.pstyle("corner-radius").pfValue,he=_.tgtRs=R._private.rscratch,Z=_.srcRs=D._private.rscratch;_.dirCounts={north:0,west:0,south:0,east:0,northwest:0,southwest:0,northeast:0,southeast:0};for(var ue=0;ue<_.eles.length;ue++){var K=_.eles[ue],j=K[0]._private.rscratch,ne=K.pstyle("curve-style").value,ee=ne==="unbundled-bezier"||ne.endsWith("segments")||ne.endsWith("taxi"),ce=!D.same(K.source());if(!_.calculatedIntersection&&D!==R&&(_.hasBezier||_.hasUnbundled)){_.calculatedIntersection=!0;var le=U.intersectLine(M.x,M.y,B,F,P.x,P.y,0,te,Z),J=_.srcIntn=le,Se=Q.intersectLine(P.x,P.y,z,$,M.x,M.y,0,Y,he),se=_.tgtIntn=Se,ae=_.intersectionPts={x1:le[0],x2:Se[0],y1:le[1],y2:Se[1]},Oe=_.posPts={x1:M.x,x2:P.x,y1:M.y,y2:P.y},ye=Se[1]-le[1],Be=Se[0]-le[0],He=Math.sqrt(Be*Be+ye*ye),ze=_.vector={x:Be,y:ye},Le=_.vectorNorm={x:ze.x/He,y:ze.y/He},Ie={x:-Le.y,y:Le.x};_.nodesOverlap=!Ct(He)||Q.checkPoint(le[0],le[1],0,z,$,P.x,P.y,Y,he)||U.checkPoint(Se[0],Se[1],0,B,F,M.x,M.y,te,Z),_.vectorNormInverse=Ie,I={nodesOverlap:_.nodesOverlap,dirCounts:_.dirCounts,calculatedIntersection:!0,hasBezier:_.hasBezier,hasUnbundled:_.hasUnbundled,eles:_.eles,srcPos:P,srcRs:he,tgtPos:M,tgtRs:Z,srcW:z,srcH:$,tgtW:B,tgtH:F,srcIntn:se,tgtIntn:J,srcShape:Q,tgtShape:U,posPts:{x1:Oe.x2,y1:Oe.y2,x2:Oe.x1,y2:Oe.y1},intersectionPts:{x1:ae.x2,y1:ae.y2,x2:ae.x1,y2:ae.y1},vector:{x:-ze.x,y:-ze.y},vectorNorm:{x:-Le.x,y:-Le.y},vectorNormInverse:{x:-Ie.x,y:-Ie.y}}}var xe=ce?I:_;j.nodesOverlap=xe.nodesOverlap,j.srcIntn=xe.srcIntn,j.tgtIntn=xe.tgtIntn,j.isRound=ne.startsWith("round"),i&&(D.isParent()||D.isChild()||R.isParent()||R.isChild())&&(D.parents().anySame(R)||R.parents().anySame(D)||D.same(R)&&D.isParent())?e.findCompoundLoopPoints(K,xe,ue,ee):D===R?e.findLoopPoints(K,xe,ue,ee):ne.endsWith("segments")?e.findSegmentsPoints(K,xe):ne.endsWith("taxi")?e.findTaxiPoints(K,xe):ne==="straight"||!ee&&_.eles.length%2===1&&ue===Math.floor(_.eles.length/2)?e.findStraightEdgePoints(K):e.findBezierPoints(K,xe,ue,ee,ce),e.findEndpoints(K),e.tryToCorrectInvalidPoints(K,xe),e.checkForInvalidEdgeWarning(K),e.storeAllpts(K),e.storeEdgeProjections(K),e.calculateArrowAngles(K),e.recalculateEdgeLabelProjections(K),e.calculateLabelAngles(K)}},"_loop"),T=0;T0){var ee=a,ce=Vp(ee,K1(r)),le=Vp(ee,K1(ne)),J=ce;if(le2){var Se=Vp(ee,{x:ne[2],y:ne[3]});Se0){var ie=s,oe=Vp(ie,K1(r)),V=Vp(ie,K1(de)),we=oe;if(V2){var W=Vp(ie,{x:de[2],y:de[3]});W=g||A){v={cp:C,segment:E};break}}if(v)break}var S=v.cp,_=v.segment,I=(g-x)/_.length,L=_.t1-_.t0,k=m?_.t0+L*I:_.t1-L*I;k=e4(0,k,1),e=Z1(S.p0,S.p1,S.p2,k),p=bQe(S.p0,S.p1,S.p2,k);break}case"straight":case"segments":case"haystack":{for(var D=0,R,O,M,P,B=n.allpts.length,F=0;F+3=g));F+=2);var z=g-O,$=z/R;$=e4(0,$,1),e=Sqe(M,P,$),p=uge(M,P);break}}s("labelX",d,e.x),s("labelY",d,e.y),s("labelAutoAngle",d,p)}},"calculateEndProjection");h("source"),h("target"),this.applyLabelDimensions(t)}};eu.applyLabelDimensions=function(t){this.applyPrefixedLabelDimensions(t),t.isEdge()&&(this.applyPrefixedLabelDimensions(t,"source"),this.applyPrefixedLabelDimensions(t,"target"))};eu.applyPrefixedLabelDimensions=function(t,e){var r=t._private,n=this.getLabelText(t,e),i=this.calculateLabelDimensions(t,n),a=t.pstyle("line-height").pfValue,s=t.pstyle("text-wrap").strValue,l=Ul(r.rscratch,"labelWrapCachedLines",e)||[],u=s!=="wrap"?1:Math.max(l.length,1),h=i.height/u,f=h*a,d=i.width,p=i.height+(u-1)*(a-1)*h;Df(r.rstyle,"labelWidth",e,d),Df(r.rscratch,"labelWidth",e,d),Df(r.rstyle,"labelHeight",e,p),Df(r.rscratch,"labelHeight",e,p),Df(r.rscratch,"labelLineHeight",e,f)};eu.getLabelText=function(t,e){var r=t._private,n=e?e+"-":"",i=t.pstyle(n+"label").strValue,a=t.pstyle("text-transform").value,s=o(function(Q,te){return te?(Df(r.rscratch,Q,e,te),te):Ul(r.rscratch,Q,e)},"rscratch");if(!i)return"";a=="none"||(a=="uppercase"?i=i.toUpperCase():a=="lowercase"&&(i=i.toLowerCase()));var l=t.pstyle("text-wrap").value;if(l==="wrap"){var u=s("labelKey");if(u!=null&&s("labelWrapKey")===u)return s("labelWrapCachedText");for(var h="\u200B",f=i.split(` -`),d=t.pstyle("text-max-width").pfValue,p=t.pstyle("text-overflow-wrap").value,m=p==="anywhere",g=[],y=/[\s\u200b]+|$/g,v=0;vd){var T=x.matchAll(y),E="",A=0,S=yo(T),_;try{for(S.s();!(_=S.n()).done;){var I=_.value,L=I[0],k=x.substring(A,I.index);A=I.index+L.length;var D=E.length===0?k:E+k+L,R=this.calculateLabelDimensions(t,D),O=R.width;O<=d?E+=k+L:(E&&g.push(E),E=k+L)}}catch(U){S.e(U)}finally{S.f()}E.match(/^[\s\u200b]+$/)||g.push(E)}else g.push(x)}s("labelWrapCachedLines",g),i=s("labelWrapCachedText",g.join(` -`)),s("labelWrapKey",u)}else if(l==="ellipsis"){var M=t.pstyle("text-max-width").pfValue,P="",B="\u2026",F=!1;if(this.calculateLabelDimensions(t,i).widthM)break;P+=i[z],z===i.length-1&&(F=!0)}return F||(P+=B),P}return i};eu.getLabelJustification=function(t){var e=t.pstyle("text-justification").strValue,r=t.pstyle("text-halign").strValue;if(e==="auto")if(t.isNode())switch(r){case"left":return"right";case"right":return"left";default:return"center"}else return"center";else return e};eu.calculateLabelDimensions=function(t,e){var r=this,n=r.cy.window(),i=n.document,a=If(e,t._private.labelDimsKey),s=r.labelDimCache||(r.labelDimCache=[]),l=s[a];if(l!=null)return l;var u=0,h=t.pstyle("font-style").strValue,f=t.pstyle("font-size").pfValue,d=t.pstyle("font-family").strValue,p=t.pstyle("font-weight").strValue,m=this.labelCalcCanvas,g=this.labelCalcCanvasContext;if(!m){m=this.labelCalcCanvas=i.createElement("canvas"),g=this.labelCalcCanvasContext=m.getContext("2d");var y=m.style;y.position="absolute",y.left="-9999px",y.top="-9999px",y.zIndex="-1",y.visibility="hidden",y.pointerEvents="none"}g.font="".concat(h," ").concat(p," ").concat(f,"px ").concat(d);for(var v=0,x=0,b=e.split(` -`),w=0;w1&&arguments[1]!==void 0?arguments[1]:!0;if(e.merge(s),l)for(var u=0;u=t.desktopTapThreshold2}var ot=a(q);at&&(t.hoverData.tapholdCancelled=!0);var Yt=o(function(){var Tt=t.hoverData.dragDelta=t.hoverData.dragDelta||[];Tt.length===0?(Tt.push(De[0]),Tt.push(De[1])):(Tt[0]+=De[0],Tt[1]+=De[1])},"updateDragDelta");ie=!0,i(_e,["mousemove","vmousemove","tapdrag"],q,{x:W[0],y:W[1]});var bt=o(function(){t.data.bgActivePosistion=void 0,t.hoverData.selecting||oe.emit({originalEvent:q,type:"boxstart",position:{x:W[0],y:W[1]}}),Pe[4]=1,t.hoverData.selecting=!0,t.redrawHint("select",!0),t.redraw()},"goIntoBoxMode");if(t.hoverData.which===3){if(at){var Mt={originalEvent:q,type:"cxtdrag",position:{x:W[0],y:W[1]}};Ve?Ve.emit(Mt):oe.emit(Mt),t.hoverData.cxtDragged=!0,(!t.hoverData.cxtOver||_e!==t.hoverData.cxtOver)&&(t.hoverData.cxtOver&&t.hoverData.cxtOver.emit({originalEvent:q,type:"cxtdragout",position:{x:W[0],y:W[1]}}),t.hoverData.cxtOver=_e,_e&&_e.emit({originalEvent:q,type:"cxtdragover",position:{x:W[0],y:W[1]}}))}}else if(t.hoverData.dragging){if(ie=!0,oe.panningEnabled()&&oe.userPanningEnabled()){var xt;if(t.hoverData.justStartedPan){var ut=t.hoverData.mdownPos;xt={x:(W[0]-ut[0])*V,y:(W[1]-ut[1])*V},t.hoverData.justStartedPan=!1}else xt={x:De[0]*V,y:De[1]*V};oe.panBy(xt),oe.emit("dragpan"),t.hoverData.dragged=!0}W=t.projectIntoViewport(q.clientX,q.clientY)}else if(Pe[4]==1&&(Ve==null||Ve.pannable())){if(at){if(!t.hoverData.dragging&&oe.boxSelectionEnabled()&&(ot||!oe.panningEnabled()||!oe.userPanningEnabled()))bt();else if(!t.hoverData.selecting&&oe.panningEnabled()&&oe.userPanningEnabled()){var Et=s(Ve,t.hoverData.downs);Et&&(t.hoverData.dragging=!0,t.hoverData.justStartedPan=!0,Pe[4]=0,t.data.bgActivePosistion=K1(pe),t.redrawHint("select",!0),t.redraw())}Ve&&Ve.pannable()&&Ve.active()&&Ve.unactivate()}}else{if(Ve&&Ve.pannable()&&Ve.active()&&Ve.unactivate(),(!Ve||!Ve.grabbed())&&_e!=be&&(be&&i(be,["mouseout","tapdragout"],q,{x:W[0],y:W[1]}),_e&&i(_e,["mouseover","tapdragover"],q,{x:W[0],y:W[1]}),t.hoverData.last=_e),Ve)if(at){if(oe.boxSelectionEnabled()&&ot)Ve&&Ve.grabbed()&&(x(qe),Ve.emit("freeon"),qe.emit("free"),t.dragData.didDrag&&(Ve.emit("dragfreeon"),qe.emit("dragfree"))),bt();else if(Ve&&Ve.grabbed()&&t.nodeIsDraggable(Ve)){var ft=!t.dragData.didDrag;ft&&t.redrawHint("eles",!0),t.dragData.didDrag=!0,t.hoverData.draggingEles||y(qe,{inDragLayer:!0});var yt={x:0,y:0};if(Ct(De[0])&&Ct(De[1])&&(yt.x+=De[0],yt.y+=De[1],ft)){var nt=t.hoverData.dragDelta;nt&&Ct(nt[0])&&Ct(nt[1])&&(yt.x+=nt[0],yt.y+=nt[1])}t.hoverData.draggingEles=!0,qe.silentShift(yt).emit("position drag"),t.redrawHint("drag",!0),t.redraw()}}else Yt();ie=!0}if(Pe[2]=W[0],Pe[3]=W[1],ie)return q.stopPropagation&&q.stopPropagation(),q.preventDefault&&q.preventDefault(),!1}},"mousemoveHandler"),!1);var k,D,R;t.registerBinding(e,"mouseup",o(function(q){if(!(t.hoverData.which===1&&q.which!==1&&t.hoverData.capture)){var de=t.hoverData.capture;if(de){t.hoverData.capture=!1;var ie=t.cy,oe=t.projectIntoViewport(q.clientX,q.clientY),V=t.selection,we=t.findNearestElement(oe[0],oe[1],!0,!1),W=t.dragData.possibleDragElements,pe=t.hoverData.down,ve=a(q);if(t.data.bgActivePosistion&&(t.redrawHint("select",!0),t.redraw()),t.hoverData.tapholdCancelled=!0,t.data.bgActivePosistion=void 0,pe&&pe.unactivate(),t.hoverData.which===3){var Pe={originalEvent:q,type:"cxttapend",position:{x:oe[0],y:oe[1]}};if(pe?pe.emit(Pe):ie.emit(Pe),!t.hoverData.cxtDragged){var _e={originalEvent:q,type:"cxttap",position:{x:oe[0],y:oe[1]}};pe?pe.emit(_e):ie.emit(_e)}t.hoverData.cxtDragged=!1,t.hoverData.which=null}else if(t.hoverData.which===1){if(i(we,["mouseup","tapend","vmouseup"],q,{x:oe[0],y:oe[1]}),!t.dragData.didDrag&&!t.hoverData.dragged&&!t.hoverData.selecting&&!t.hoverData.isOverThresholdDrag&&(i(pe,["click","tap","vclick"],q,{x:oe[0],y:oe[1]}),D=!1,q.timeStamp-R<=ie.multiClickDebounceTime()?(k&&clearTimeout(k),D=!0,R=null,i(pe,["dblclick","dbltap","vdblclick"],q,{x:oe[0],y:oe[1]})):(k=setTimeout(function(){D||i(pe,["oneclick","onetap","voneclick"],q,{x:oe[0],y:oe[1]})},ie.multiClickDebounceTime()),R=q.timeStamp)),pe==null&&!t.dragData.didDrag&&!t.hoverData.selecting&&!t.hoverData.dragged&&!a(q)&&(ie.$(r).unselect(["tapunselect"]),W.length>0&&t.redrawHint("eles",!0),t.dragData.possibleDragElements=W=ie.collection()),we==pe&&!t.dragData.didDrag&&!t.hoverData.selecting&&we!=null&&we._private.selectable&&(t.hoverData.dragging||(ie.selectionType()==="additive"||ve?we.selected()?we.unselect(["tapunselect"]):we.select(["tapselect"]):ve||(ie.$(r).unmerge(we).unselect(["tapunselect"]),we.select(["tapselect"]))),t.redrawHint("eles",!0)),t.hoverData.selecting){var be=ie.collection(t.getAllInBox(V[0],V[1],V[2],V[3]));t.redrawHint("select",!0),be.length>0&&t.redrawHint("eles",!0),ie.emit({type:"boxend",originalEvent:q,position:{x:oe[0],y:oe[1]}});var Ve=o(function(at){return at.selectable()&&!at.selected()},"eleWouldBeSelected");ie.selectionType()==="additive"||ve||ie.$(r).unmerge(be).unselect(),be.emit("box").stdFilter(Ve).select().emit("boxselect"),t.redraw()}if(t.hoverData.dragging&&(t.hoverData.dragging=!1,t.redrawHint("select",!0),t.redrawHint("eles",!0),t.redraw()),!V[4]){t.redrawHint("drag",!0),t.redrawHint("eles",!0);var De=pe&&pe.grabbed();x(W),De&&(pe.emit("freeon"),W.emit("free"),t.dragData.didDrag&&(pe.emit("dragfreeon"),W.emit("dragfree")))}}V[4]=0,t.hoverData.down=null,t.hoverData.cxtStarted=!1,t.hoverData.draggingEles=!1,t.hoverData.selecting=!1,t.hoverData.isOverThresholdDrag=!1,t.dragData.didDrag=!1,t.hoverData.dragged=!1,t.hoverData.dragDelta=[],t.hoverData.mdownPos=null,t.hoverData.mdownGPos=null,t.hoverData.which=null}}},"mouseupHandler"),!1);var O=o(function(q){if(!t.scrollingPage){var de=t.cy,ie=de.zoom(),oe=de.pan(),V=t.projectIntoViewport(q.clientX,q.clientY),we=[V[0]*ie+oe.x,V[1]*ie+oe.y];if(t.hoverData.draggingEles||t.hoverData.dragging||t.hoverData.cxtStarted||_()){q.preventDefault();return}if(de.panningEnabled()&&de.userPanningEnabled()&&de.zoomingEnabled()&&de.userZoomingEnabled()){q.preventDefault(),t.data.wheelZooming=!0,clearTimeout(t.data.wheelTimeout),t.data.wheelTimeout=setTimeout(function(){t.data.wheelZooming=!1,t.redrawHint("eles",!0),t.redraw()},150);var W;q.deltaY!=null?W=q.deltaY/-250:q.wheelDeltaY!=null?W=q.wheelDeltaY/1e3:W=q.wheelDelta/1e3,W=W*t.wheelSensitivity;var pe=q.deltaMode===1;pe&&(W*=33);var ve=de.zoom()*Math.pow(10,W);q.type==="gesturechange"&&(ve=t.gestureStartZoom*q.scale),de.zoom({level:ve,renderedPosition:{x:we[0],y:we[1]}}),de.emit(q.type==="gesturechange"?"pinchzoom":"scrollzoom")}}},"wheelHandler");t.registerBinding(t.container,"wheel",O,!0),t.registerBinding(e,"scroll",o(function(q){t.scrollingPage=!0,clearTimeout(t.scrollingPageTimeout),t.scrollingPageTimeout=setTimeout(function(){t.scrollingPage=!1},250)},"scrollHandler"),!0),t.registerBinding(t.container,"gesturestart",o(function(q){t.gestureStartZoom=t.cy.zoom(),t.hasTouchStarted||q.preventDefault()},"gestureStartHandler"),!0),t.registerBinding(t.container,"gesturechange",function(xe){t.hasTouchStarted||O(xe)},!0),t.registerBinding(t.container,"mouseout",o(function(q){var de=t.projectIntoViewport(q.clientX,q.clientY);t.cy.emit({originalEvent:q,type:"mouseout",position:{x:de[0],y:de[1]}})},"mouseOutHandler"),!1),t.registerBinding(t.container,"mouseover",o(function(q){var de=t.projectIntoViewport(q.clientX,q.clientY);t.cy.emit({originalEvent:q,type:"mouseover",position:{x:de[0],y:de[1]}})},"mouseOverHandler"),!1);var M,P,B,F,z,$,U,Q,te,Y,he,Z,ue,K=o(function(q,de,ie,oe){return Math.sqrt((ie-q)*(ie-q)+(oe-de)*(oe-de))},"distance"),j=o(function(q,de,ie,oe){return(ie-q)*(ie-q)+(oe-de)*(oe-de)},"distanceSq"),ne;t.registerBinding(t.container,"touchstart",ne=o(function(q){if(t.hasTouchStarted=!0,!!I(q)){w(),t.touchData.capture=!0,t.data.bgActivePosistion=void 0;var de=t.cy,ie=t.touchData.now,oe=t.touchData.earlier;if(q.touches[0]){var V=t.projectIntoViewport(q.touches[0].clientX,q.touches[0].clientY);ie[0]=V[0],ie[1]=V[1]}if(q.touches[1]){var V=t.projectIntoViewport(q.touches[1].clientX,q.touches[1].clientY);ie[2]=V[0],ie[3]=V[1]}if(q.touches[2]){var V=t.projectIntoViewport(q.touches[2].clientX,q.touches[2].clientY);ie[4]=V[0],ie[5]=V[1]}if(q.touches[1]){t.touchData.singleTouchMoved=!0,x(t.dragData.touchDragEles);var we=t.findContainerClientCoords();te=we[0],Y=we[1],he=we[2],Z=we[3],M=q.touches[0].clientX-te,P=q.touches[0].clientY-Y,B=q.touches[1].clientX-te,F=q.touches[1].clientY-Y,ue=0<=M&&M<=he&&0<=B&&B<=he&&0<=P&&P<=Z&&0<=F&&F<=Z;var W=de.pan(),pe=de.zoom();z=K(M,P,B,F),$=j(M,P,B,F),U=[(M+B)/2,(P+F)/2],Q=[(U[0]-W.x)/pe,(U[1]-W.y)/pe];var ve=200,Pe=ve*ve;if($=1){for(var st=t.touchData.startPosition=[null,null,null,null,null,null],Ue=0;Ue=t.touchTapThreshold2}if(de&&t.touchData.cxt){q.preventDefault();var st=q.touches[0].clientX-te,Ue=q.touches[0].clientY-Y,ct=q.touches[1].clientX-te,We=q.touches[1].clientY-Y,ot=j(st,Ue,ct,We),Yt=ot/$,bt=150,Mt=bt*bt,xt=1.5,ut=xt*xt;if(Yt>=ut||ot>=Mt){t.touchData.cxt=!1,t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);var Et={originalEvent:q,type:"cxttapend",position:{x:V[0],y:V[1]}};t.touchData.start?(t.touchData.start.unactivate().emit(Et),t.touchData.start=null):oe.emit(Et)}}if(de&&t.touchData.cxt){var Et={originalEvent:q,type:"cxtdrag",position:{x:V[0],y:V[1]}};t.data.bgActivePosistion=void 0,t.redrawHint("select",!0),t.touchData.start?t.touchData.start.emit(Et):oe.emit(Et),t.touchData.start&&(t.touchData.start._private.grabbed=!1),t.touchData.cxtDragged=!0;var ft=t.findNearestElement(V[0],V[1],!0,!0);(!t.touchData.cxtOver||ft!==t.touchData.cxtOver)&&(t.touchData.cxtOver&&t.touchData.cxtOver.emit({originalEvent:q,type:"cxtdragout",position:{x:V[0],y:V[1]}}),t.touchData.cxtOver=ft,ft&&ft.emit({originalEvent:q,type:"cxtdragover",position:{x:V[0],y:V[1]}}))}else if(de&&q.touches[2]&&oe.boxSelectionEnabled())q.preventDefault(),t.data.bgActivePosistion=void 0,this.lastThreeTouch=+new Date,t.touchData.selecting||oe.emit({originalEvent:q,type:"boxstart",position:{x:V[0],y:V[1]}}),t.touchData.selecting=!0,t.touchData.didSelect=!0,ie[4]=1,!ie||ie.length===0||ie[0]===void 0?(ie[0]=(V[0]+V[2]+V[4])/3,ie[1]=(V[1]+V[3]+V[5])/3,ie[2]=(V[0]+V[2]+V[4])/3+1,ie[3]=(V[1]+V[3]+V[5])/3+1):(ie[2]=(V[0]+V[2]+V[4])/3,ie[3]=(V[1]+V[3]+V[5])/3),t.redrawHint("select",!0),t.redraw();else if(de&&q.touches[1]&&!t.touchData.didSelect&&oe.zoomingEnabled()&&oe.panningEnabled()&&oe.userZoomingEnabled()&&oe.userPanningEnabled()){q.preventDefault(),t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);var yt=t.dragData.touchDragEles;if(yt){t.redrawHint("drag",!0);for(var nt=0;nt0&&!t.hoverData.draggingEles&&!t.swipePanning&&t.data.bgActivePosistion!=null&&(t.data.bgActivePosistion=void 0,t.redrawHint("select",!0),t.redraw())}},"touchmoveHandler"),!1);var ce;t.registerBinding(e,"touchcancel",ce=o(function(q){var de=t.touchData.start;t.touchData.capture=!1,de&&de.unactivate()},"touchcancelHandler"));var le,J,Se,se;if(t.registerBinding(e,"touchend",le=o(function(q){var de=t.touchData.start,ie=t.touchData.capture;if(ie)q.touches.length===0&&(t.touchData.capture=!1),q.preventDefault();else return;var oe=t.selection;t.swipePanning=!1,t.hoverData.draggingEles=!1;var V=t.cy,we=V.zoom(),W=t.touchData.now,pe=t.touchData.earlier;if(q.touches[0]){var ve=t.projectIntoViewport(q.touches[0].clientX,q.touches[0].clientY);W[0]=ve[0],W[1]=ve[1]}if(q.touches[1]){var ve=t.projectIntoViewport(q.touches[1].clientX,q.touches[1].clientY);W[2]=ve[0],W[3]=ve[1]}if(q.touches[2]){var ve=t.projectIntoViewport(q.touches[2].clientX,q.touches[2].clientY);W[4]=ve[0],W[5]=ve[1]}de&&de.unactivate();var Pe;if(t.touchData.cxt){if(Pe={originalEvent:q,type:"cxttapend",position:{x:W[0],y:W[1]}},de?de.emit(Pe):V.emit(Pe),!t.touchData.cxtDragged){var _e={originalEvent:q,type:"cxttap",position:{x:W[0],y:W[1]}};de?de.emit(_e):V.emit(_e)}t.touchData.start&&(t.touchData.start._private.grabbed=!1),t.touchData.cxt=!1,t.touchData.start=null,t.redraw();return}if(!q.touches[2]&&V.boxSelectionEnabled()&&t.touchData.selecting){t.touchData.selecting=!1;var be=V.collection(t.getAllInBox(oe[0],oe[1],oe[2],oe[3]));oe[0]=void 0,oe[1]=void 0,oe[2]=void 0,oe[3]=void 0,oe[4]=0,t.redrawHint("select",!0),V.emit({type:"boxend",originalEvent:q,position:{x:W[0],y:W[1]}});var Ve=o(function(Mt){return Mt.selectable()&&!Mt.selected()},"eleWouldBeSelected");be.emit("box").stdFilter(Ve).select().emit("boxselect"),be.nonempty()&&t.redrawHint("eles",!0),t.redraw()}if(de?.unactivate(),q.touches[2])t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);else if(!q.touches[1]){if(!q.touches[0]){if(!q.touches[0]){t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);var De=t.dragData.touchDragEles;if(de!=null){var qe=de._private.grabbed;x(De),t.redrawHint("drag",!0),t.redrawHint("eles",!0),qe&&(de.emit("freeon"),De.emit("free"),t.dragData.didDrag&&(de.emit("dragfreeon"),De.emit("dragfree"))),i(de,["touchend","tapend","vmouseup","tapdragout"],q,{x:W[0],y:W[1]}),de.unactivate(),t.touchData.start=null}else{var at=t.findNearestElement(W[0],W[1],!0,!0);i(at,["touchend","tapend","vmouseup","tapdragout"],q,{x:W[0],y:W[1]})}var Lt=t.touchData.startPosition[0]-W[0],st=Lt*Lt,Ue=t.touchData.startPosition[1]-W[1],ct=Ue*Ue,We=st+ct,ot=We*we*we;t.touchData.singleTouchMoved||(de||V.$(":selected").unselect(["tapunselect"]),i(de,["tap","vclick"],q,{x:W[0],y:W[1]}),J=!1,q.timeStamp-se<=V.multiClickDebounceTime()?(Se&&clearTimeout(Se),J=!0,se=null,i(de,["dbltap","vdblclick"],q,{x:W[0],y:W[1]})):(Se=setTimeout(function(){J||i(de,["onetap","voneclick"],q,{x:W[0],y:W[1]})},V.multiClickDebounceTime()),se=q.timeStamp)),de!=null&&!t.dragData.didDrag&&de._private.selectable&&ot"u"){var ae=[],Oe=o(function(q){return{clientX:q.clientX,clientY:q.clientY,force:1,identifier:q.pointerId,pageX:q.pageX,pageY:q.pageY,radiusX:q.width/2,radiusY:q.height/2,screenX:q.screenX,screenY:q.screenY,target:q.target}},"makeTouch"),ye=o(function(q){return{event:q,touch:Oe(q)}},"makePointer"),Be=o(function(q){ae.push(ye(q))},"addPointer"),He=o(function(q){for(var de=0;de0)return U[0]}return null},"getCurveT"),g=Object.keys(p),y=0;y0?m:pme(a,s,e,r,n,i,l,u)},"intersectLine"),checkPoint:o(function(e,r,n,i,a,s,l,u){u=u==="auto"?jp(i,a):u;var h=2*u;if(rh(e,r,this.points,s,l,i,a-h,[0,-1],n)||rh(e,r,this.points,s,l,i-h,a,[0,-1],n))return!0;var f=i/2+2*n,d=a/2+2*n,p=[s-f,l-d,s-f,l,s+f,l,s+f,l-d];return!!(Ws(e,r,p)||qp(e,r,h,h,s+i/2-u,l+a/2-u,n)||qp(e,r,h,h,s-i/2+u,l+a/2-u,n))},"checkPoint")}};ih.registerNodeShapes=function(){var t=this.nodeShapes={},e=this;this.generateEllipse(),this.generatePolygon("triangle",ys(3,0)),this.generateRoundPolygon("round-triangle",ys(3,0)),this.generatePolygon("rectangle",ys(4,0)),t.square=t.rectangle,this.generateRoundRectangle(),this.generateCutRectangle(),this.generateBarrel(),this.generateBottomRoundrectangle();{var r=[0,1,1,0,0,-1,-1,0];this.generatePolygon("diamond",r),this.generateRoundPolygon("round-diamond",r)}this.generatePolygon("pentagon",ys(5,0)),this.generateRoundPolygon("round-pentagon",ys(5,0)),this.generatePolygon("hexagon",ys(6,0)),this.generateRoundPolygon("round-hexagon",ys(6,0)),this.generatePolygon("heptagon",ys(7,0)),this.generateRoundPolygon("round-heptagon",ys(7,0)),this.generatePolygon("octagon",ys(8,0)),this.generateRoundPolygon("round-octagon",ys(8,0));var n=new Array(20);{var i=$P(5,0),a=$P(5,Math.PI/5),s=.5*(3-Math.sqrt(5));s*=1.57;for(var l=0;l=e.deqFastCost*C)break}else if(h){if(b>=e.deqCost*m||b>=e.deqAvgCost*p)break}else if(w>=e.deqNoDrawCost*NP)break;var T=e.deq(n,v,y);if(T.length>0)for(var E=0;E0&&(e.onDeqd(n,g),!h&&e.shouldRedraw(n,g,v,y)&&a())},"dequeue"),l=e.priority||aB;i.beforeRender(s,l(n))}},"setupDequeueingImpl")},"setupDequeueing")},TQe=function(){function t(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:C6;$f(this,t),this.idsByKey=new Zc,this.keyForId=new Zc,this.cachesByLvl=new Zc,this.lvls=[],this.getKey=e,this.doesEleInvalidateKey=r}return o(t,"ElementTextureCacheLookup"),zf(t,[{key:"getIdsFor",value:o(function(r){r==null&&ai("Can not get id list for null key");var n=this.idsByKey,i=this.idsByKey.get(r);return i||(i=new sy,n.set(r,i)),i},"getIdsFor")},{key:"addIdForKey",value:o(function(r,n){r!=null&&this.getIdsFor(r).add(n)},"addIdForKey")},{key:"deleteIdForKey",value:o(function(r,n){r!=null&&this.getIdsFor(r).delete(n)},"deleteIdForKey")},{key:"getNumberOfIdsForKey",value:o(function(r){return r==null?0:this.getIdsFor(r).size},"getNumberOfIdsForKey")},{key:"updateKeyMappingFor",value:o(function(r){var n=r.id(),i=this.keyForId.get(n),a=this.getKey(r);this.deleteIdForKey(i,n),this.addIdForKey(a,n),this.keyForId.set(n,a)},"updateKeyMappingFor")},{key:"deleteKeyMappingFor",value:o(function(r){var n=r.id(),i=this.keyForId.get(n);this.deleteIdForKey(i,n),this.keyForId.delete(n)},"deleteKeyMappingFor")},{key:"keyHasChangedFor",value:o(function(r){var n=r.id(),i=this.keyForId.get(n),a=this.getKey(r);return i!==a},"keyHasChangedFor")},{key:"isInvalid",value:o(function(r){return this.keyHasChangedFor(r)||this.doesEleInvalidateKey(r)},"isInvalid")},{key:"getCachesAt",value:o(function(r){var n=this.cachesByLvl,i=this.lvls,a=n.get(r);return a||(a=new Zc,n.set(r,a),i.push(r)),a},"getCachesAt")},{key:"getCache",value:o(function(r,n){return this.getCachesAt(n).get(r)},"getCache")},{key:"get",value:o(function(r,n){var i=this.getKey(r),a=this.getCache(i,n);return a!=null&&this.updateKeyMappingFor(r),a},"get")},{key:"getForCachedKey",value:o(function(r,n){var i=this.keyForId.get(r.id()),a=this.getCache(i,n);return a},"getForCachedKey")},{key:"hasCache",value:o(function(r,n){return this.getCachesAt(n).has(r)},"hasCache")},{key:"has",value:o(function(r,n){var i=this.getKey(r);return this.hasCache(i,n)},"has")},{key:"setCache",value:o(function(r,n,i){i.key=r,this.getCachesAt(n).set(r,i)},"setCache")},{key:"set",value:o(function(r,n,i){var a=this.getKey(r);this.setCache(a,n,i),this.updateKeyMappingFor(r)},"set")},{key:"deleteCache",value:o(function(r,n){this.getCachesAt(n).delete(r)},"deleteCache")},{key:"delete",value:o(function(r,n){var i=this.getKey(r);this.deleteCache(i,n)},"_delete")},{key:"invalidateKey",value:o(function(r){var n=this;this.lvls.forEach(function(i){return n.deleteCache(r,i)})},"invalidateKey")},{key:"invalidate",value:o(function(r){var n=r.id(),i=this.keyForId.get(n);this.deleteKeyMappingFor(r);var a=this.doesEleInvalidateKey(r);return a&&this.invalidateKey(i),a||this.getNumberOfIdsForKey(i)===0},"invalidate")}]),t}(),L0e=25,f6=50,k6=-4,QP=3,gge=7.99,kQe=8,EQe=1024,SQe=1024,CQe=1024,AQe=.2,_Qe=.8,DQe=10,LQe=.15,RQe=.1,NQe=.9,MQe=.9,IQe=100,OQe=1,Q1={dequeue:"dequeue",downscale:"downscale",highQuality:"highQuality"},PQe=la({getKey:null,doesEleInvalidateKey:C6,drawElement:null,getBoundingBox:null,getRotationPoint:null,getRotationOffset:null,isVisible:sme,allowEdgeTxrCaching:!0,allowParentTxrCaching:!0}),Wb=o(function(e,r){var n=this;n.renderer=e,n.onDequeues=[];var i=PQe(r);rr(n,i),n.lookup=new TQe(i.getKey,i.doesEleInvalidateKey),n.setupDequeueing()},"ElementTextureCache"),Yi=Wb.prototype;Yi.reasons=Q1;Yi.getTextureQueue=function(t){var e=this;return e.eleImgCaches=e.eleImgCaches||{},e.eleImgCaches[t]=e.eleImgCaches[t]||[]};Yi.getRetiredTextureQueue=function(t){var e=this,r=e.eleImgCaches.retired=e.eleImgCaches.retired||{},n=r[t]=r[t]||[];return n};Yi.getElementQueue=function(){var t=this,e=t.eleCacheQueue=t.eleCacheQueue||new h4(function(r,n){return n.reqs-r.reqs});return e};Yi.getElementKeyToQueue=function(){var t=this,e=t.eleKeyToCacheQueue=t.eleKeyToCacheQueue||{};return e};Yi.getElement=function(t,e,r,n,i){var a=this,s=this.renderer,l=s.cy.zoom(),u=this.lookup;if(!e||e.w===0||e.h===0||isNaN(e.w)||isNaN(e.h)||!t.visible()||t.removed()||!a.allowEdgeTxrCaching&&t.isEdge()||!a.allowParentTxrCaching&&t.isParent())return null;if(n==null&&(n=Math.ceil(oB(l*r))),n=gge||n>QP)return null;var h=Math.pow(2,n),f=e.h*h,d=e.w*h,p=s.eleTextBiggerThanMin(t,h);if(!this.isVisible(t,p))return null;var m=u.get(t,n);if(m&&m.invalidated&&(m.invalidated=!1,m.texture.invalidatedWidth-=m.width),m)return m;var g;if(f<=L0e?g=L0e:f<=f6?g=f6:g=Math.ceil(f/f6)*f6,f>CQe||d>SQe)return null;var y=a.getTextureQueue(g),v=y[y.length-2],x=o(function(){return a.recycleTexture(g,d)||a.addTexture(g,d)},"addNewTxr");v||(v=y[y.length-1]),v||(v=x()),v.width-v.usedWidthn;L--)_=a.getElement(t,e,r,L,Q1.downscale);I()}else return a.queueElement(t,E.level-1),E;else{var k;if(!w&&!C&&!T)for(var D=n-1;D>=k6;D--){var R=u.get(t,D);if(R){k=R;break}}if(b(k))return a.queueElement(t,n),k;v.context.translate(v.usedWidth,0),v.context.scale(h,h),this.drawElement(v.context,t,e,p,!1),v.context.scale(1/h,1/h),v.context.translate(-v.usedWidth,0)}return m={x:v.usedWidth,texture:v,level:n,scale:h,width:d,height:f,scaledLabelShown:p},v.usedWidth+=Math.ceil(d+kQe),v.eleCaches.push(m),u.set(t,n,m),a.checkTextureFullness(v),m};Yi.invalidateElements=function(t){for(var e=0;e=AQe*t.width&&this.retireTexture(t)};Yi.checkTextureFullness=function(t){var e=this,r=e.getTextureQueue(t.height);t.usedWidth/t.width>_Qe&&t.fullnessChecks>=DQe?Of(r,t):t.fullnessChecks++};Yi.retireTexture=function(t){var e=this,r=t.height,n=e.getTextureQueue(r),i=this.lookup;Of(n,t),t.retired=!0;for(var a=t.eleCaches,s=0;s=e)return s.retired=!1,s.usedWidth=0,s.invalidatedWidth=0,s.fullnessChecks=0,sB(s.eleCaches),s.context.setTransform(1,0,0,1,0,0),s.context.clearRect(0,0,s.width,s.height),Of(i,s),n.push(s),s}};Yi.queueElement=function(t,e){var r=this,n=r.getElementQueue(),i=r.getElementKeyToQueue(),a=this.getKey(t),s=i[a];if(s)s.level=Math.max(s.level,e),s.eles.merge(t),s.reqs++,n.updateItem(s);else{var l={eles:t.spawn().merge(t),level:e,reqs:1,key:a};n.push(l),i[a]=l}};Yi.dequeue=function(t){for(var e=this,r=e.getElementQueue(),n=e.getElementKeyToQueue(),i=[],a=e.lookup,s=0;s0;s++){var l=r.pop(),u=l.key,h=l.eles[0],f=a.hasCache(h,l.level);if(n[u]=null,f)continue;i.push(l);var d=e.getBoundingBox(h);e.getElement(h,d,t,l.level,Q1.dequeue)}return i};Yi.removeFromQueue=function(t){var e=this,r=e.getElementQueue(),n=e.getElementKeyToQueue(),i=this.getKey(t),a=n[i];a!=null&&(a.eles.length===1?(a.reqs=iB,r.updateItem(a),r.pop(),n[i]=null):a.eles.unmerge(t))};Yi.onDequeue=function(t){this.onDequeues.push(t)};Yi.offDequeue=function(t){Of(this.onDequeues,t)};Yi.setupDequeueing=mge.setupDequeueing({deqRedrawThreshold:IQe,deqCost:LQe,deqAvgCost:RQe,deqNoDrawCost:NQe,deqFastCost:MQe,deq:o(function(e,r,n){return e.dequeue(r,n)},"deq"),onDeqd:o(function(e,r){for(var n=0;n=FQe||r>I6)return null}n.validateLayersElesOrdering(r,t);var u=n.layersByLevel,h=Math.pow(2,r),f=u[r]=u[r]||[],d,p=n.levelIsComplete(r,t),m,g=o(function(){var I=o(function(O){if(n.validateLayersElesOrdering(O,t),n.levelIsComplete(O,t))return m=u[O],!0},"canUseAsTmpLvl"),L=o(function(O){if(!m)for(var M=r+O;Yb<=M&&M<=I6&&!I(M);M+=O);},"checkLvls");L(1),L(-1);for(var k=f.length-1;k>=0;k--){var D=f[k];D.invalid&&Of(f,D)}},"checkTempLevels");if(!p)g();else return f;var y=o(function(){if(!d){d=qs();for(var I=0;IN0e||D>N0e)return null;var R=k*D;if(R>qQe)return null;var O=n.makeLayer(d,r);if(L!=null){var M=f.indexOf(L)+1;f.splice(M,0,O)}else(I.insert===void 0||I.insert)&&f.unshift(O);return O},"makeLayer");if(n.skipping&&!l)return null;for(var x=null,b=t.length/BQe,w=!l,C=0;C=b||!dme(x.bb,T.boundingBox()))&&(x=v({insert:!0,after:x}),!x))return null;m||w?n.queueLayer(x,T):n.drawEleInLayer(x,T,r,e),x.eles.push(T),A[r]=x}return m||(w?null:f)};Ea.getEleLevelForLayerLevel=function(t,e){return t};Ea.drawEleInLayer=function(t,e,r,n){var i=this,a=this.renderer,s=t.context,l=e.boundingBox();l.w===0||l.h===0||!e.visible()||(r=i.getEleLevelForLayerLevel(r,n),a.setImgSmoothing(s,!1),a.drawCachedElement(s,e,null,null,r,YQe),a.setImgSmoothing(s,!0))};Ea.levelIsComplete=function(t,e){var r=this,n=r.layersByLevel[t];if(!n||n.length===0)return!1;for(var i=0,a=0;a0||s.invalid)return!1;i+=s.eles.length}return i===e.length};Ea.validateLayersElesOrdering=function(t,e){var r=this.layersByLevel[t];if(r)for(var n=0;n0){e=!0;break}}return e};Ea.invalidateElements=function(t){var e=this;t.length!==0&&(e.lastInvalidationTime=th(),!(t.length===0||!e.haveLayers())&&e.updateElementsInLayers(t,o(function(n,i,a){e.invalidateLayer(n)},"invalAssocLayers")))};Ea.invalidateLayer=function(t){if(this.lastInvalidationTime=th(),!t.invalid){var e=t.level,r=t.eles,n=this.layersByLevel[e];Of(n,t),t.elesQueue=[],t.invalid=!0,t.replacement&&(t.replacement.invalid=!0);for(var i=0;i3&&arguments[3]!==void 0?arguments[3]:!0,i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,a=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,s=this,l=e._private.rscratch;if(!(a&&!e.visible())&&!(l.badLine||l.allpts==null||isNaN(l.allpts[0]))){var u;r&&(u=r,t.translate(-u.x1,-u.y1));var h=a?e.pstyle("opacity").value:1,f=a?e.pstyle("line-opacity").value:1,d=e.pstyle("curve-style").value,p=e.pstyle("line-style").value,m=e.pstyle("width").pfValue,g=e.pstyle("line-cap").value,y=e.pstyle("line-outline-width").value,v=e.pstyle("line-outline-color").value,x=h*f,b=h*f,w=o(function(){var O=arguments.length>0&&arguments[0]!==void 0?arguments[0]:x;d==="straight-triangle"?(s.eleStrokeStyle(t,e,O),s.drawEdgeTrianglePath(e,t,l.allpts)):(t.lineWidth=m,t.lineCap=g,s.eleStrokeStyle(t,e,O),s.drawEdgePath(e,t,l.allpts,p),t.lineCap="butt")},"drawLine"),C=o(function(){var O=arguments.length>0&&arguments[0]!==void 0?arguments[0]:x;if(t.lineWidth=m+y,t.lineCap=g,y>0)s.colorStrokeStyle(t,v[0],v[1],v[2],O);else{t.lineCap="butt";return}d==="straight-triangle"?s.drawEdgeTrianglePath(e,t,l.allpts):(s.drawEdgePath(e,t,l.allpts,p),t.lineCap="butt")},"drawLineOutline"),T=o(function(){i&&s.drawEdgeOverlay(t,e)},"drawOverlay"),E=o(function(){i&&s.drawEdgeUnderlay(t,e)},"drawUnderlay"),A=o(function(){var O=arguments.length>0&&arguments[0]!==void 0?arguments[0]:b;s.drawArrowheads(t,e,O)},"drawArrows"),S=o(function(){s.drawElementText(t,e,null,n)},"drawText");t.lineJoin="round";var _=e.pstyle("ghost").value==="yes";if(_){var I=e.pstyle("ghost-offset-x").pfValue,L=e.pstyle("ghost-offset-y").pfValue,k=e.pstyle("ghost-opacity").value,D=x*k;t.translate(I,L),w(D),A(D),t.translate(-I,-L)}else C();E(),w(),A(),T(),S(),r&&t.translate(u.x1,u.y1)}};xge=o(function(e){if(!["overlay","underlay"].includes(e))throw new Error("Invalid state");return function(r,n){if(n.visible()){var i=n.pstyle("".concat(e,"-opacity")).value;if(i!==0){var a=this,s=a.usePaths(),l=n._private.rscratch,u=n.pstyle("".concat(e,"-padding")).pfValue,h=2*u,f=n.pstyle("".concat(e,"-color")).value;r.lineWidth=h,l.edgeType==="self"&&!s?r.lineCap="butt":r.lineCap="round",a.colorStrokeStyle(r,f[0],f[1],f[2],i),a.drawEdgePath(n,r,l.allpts,"solid")}}}},"drawEdgeOverlayUnderlay");ah.drawEdgeOverlay=xge("overlay");ah.drawEdgeUnderlay=xge("underlay");ah.drawEdgePath=function(t,e,r,n){var i=t._private.rscratch,a=e,s,l=!1,u=this.usePaths(),h=t.pstyle("line-dash-pattern").pfValue,f=t.pstyle("line-dash-offset").pfValue;if(u){var d=r.join("$"),p=i.pathCacheKey&&i.pathCacheKey===d;p?(s=e=i.pathCache,l=!0):(s=e=new Path2D,i.pathCacheKey=d,i.pathCache=s)}if(a.setLineDash)switch(n){case"dotted":a.setLineDash([1,1]);break;case"dashed":a.setLineDash(h),a.lineDashOffset=f;break;case"solid":a.setLineDash([]);break}if(!l&&!i.badLine)switch(e.beginPath&&e.beginPath(),e.moveTo(r[0],r[1]),i.edgeType){case"bezier":case"self":case"compound":case"multibezier":for(var m=2;m+35&&arguments[5]!==void 0?arguments[5]:!0,s=this;if(n==null){if(a&&!s.eleTextBiggerThanMin(e))return}else if(n===!1)return;if(e.isNode()){var l=e.pstyle("label");if(!l||!l.value)return;var u=s.getLabelJustification(e);t.textAlign=u,t.textBaseline="bottom"}else{var h=e.element()._private.rscratch.badLine,f=e.pstyle("label"),d=e.pstyle("source-label"),p=e.pstyle("target-label");if(h||(!f||!f.value)&&(!d||!d.value)&&(!p||!p.value))return;t.textAlign="center",t.textBaseline="bottom"}var m=!r,g;r&&(g=r,t.translate(-g.x1,-g.y1)),i==null?(s.drawText(t,e,null,m,a),e.isEdge()&&(s.drawText(t,e,"source",m,a),s.drawText(t,e,"target",m,a))):s.drawText(t,e,i,m,a),r&&t.translate(g.x1,g.y1)};e0.getFontCache=function(t){var e;this.fontCaches=this.fontCaches||[];for(var r=0;r2&&arguments[2]!==void 0?arguments[2]:!0,n=e.pstyle("font-style").strValue,i=e.pstyle("font-size").pfValue+"px",a=e.pstyle("font-family").strValue,s=e.pstyle("font-weight").strValue,l=r?e.effectiveOpacity()*e.pstyle("text-opacity").value:1,u=e.pstyle("text-outline-opacity").value*l,h=e.pstyle("color").value,f=e.pstyle("text-outline-color").value;t.font=n+" "+s+" "+i+" "+a,t.lineJoin="round",this.colorFillStyle(t,h[0],h[1],h[2],l),this.colorStrokeStyle(t,f[0],f[1],f[2],u)};o(IP,"roundRect");e0.getTextAngle=function(t,e){var r,n=t._private,i=n.rscratch,a=e?e+"-":"",s=t.pstyle(a+"text-rotation");if(s.strValue==="autorotate"){var l=Ul(i,"labelAngle",e);r=t.isEdge()?l:0}else s.strValue==="none"?r=0:r=s.pfValue;return r};e0.drawText=function(t,e,r){var n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,a=e._private,s=a.rscratch,l=i?e.effectiveOpacity():1;if(!(i&&(l===0||e.pstyle("text-opacity").value===0))){r==="main"&&(r=null);var u=Ul(s,"labelX",r),h=Ul(s,"labelY",r),f,d,p=this.getLabelText(e,r);if(p!=null&&p!==""&&!isNaN(u)&&!isNaN(h)){this.setupTextStyle(t,e,i);var m=r?r+"-":"",g=Ul(s,"labelWidth",r),y=Ul(s,"labelHeight",r),v=e.pstyle(m+"text-margin-x").pfValue,x=e.pstyle(m+"text-margin-y").pfValue,b=e.isEdge(),w=e.pstyle("text-halign").value,C=e.pstyle("text-valign").value;b&&(w="center",C="center"),u+=v,h+=x;var T;switch(n?T=this.getTextAngle(e,r):T=0,T!==0&&(f=u,d=h,t.translate(f,d),t.rotate(T),u=0,h=0),C){case"top":break;case"center":h+=y/2;break;case"bottom":h+=y;break}var E=e.pstyle("text-background-opacity").value,A=e.pstyle("text-border-opacity").value,S=e.pstyle("text-border-width").pfValue,_=e.pstyle("text-background-padding").pfValue,I=e.pstyle("text-background-shape").strValue,L=I.indexOf("round")===0,k=2;if(E>0||S>0&&A>0){var D=u-_;switch(w){case"left":D-=g;break;case"center":D-=g/2;break}var R=h-y-_,O=g+2*_,M=y+2*_;if(E>0){var P=t.fillStyle,B=e.pstyle("text-background-color").value;t.fillStyle="rgba("+B[0]+","+B[1]+","+B[2]+","+E*l+")",L?IP(t,D,R,O,M,k):t.fillRect(D,R,O,M),t.fillStyle=P}if(S>0&&A>0){var F=t.strokeStyle,z=t.lineWidth,$=e.pstyle("text-border-color").value,U=e.pstyle("text-border-style").value;if(t.strokeStyle="rgba("+$[0]+","+$[1]+","+$[2]+","+A*l+")",t.lineWidth=S,t.setLineDash)switch(U){case"dotted":t.setLineDash([1,1]);break;case"dashed":t.setLineDash([4,2]);break;case"double":t.lineWidth=S/4,t.setLineDash([]);break;case"solid":t.setLineDash([]);break}if(L?IP(t,D,R,O,M,k,"stroke"):t.strokeRect(D,R,O,M),U==="double"){var Q=S/2;L?IP(t,D+Q,R+Q,O-Q*2,M-Q*2,k,"stroke"):t.strokeRect(D+Q,R+Q,O-Q*2,M-Q*2)}t.setLineDash&&t.setLineDash([]),t.lineWidth=z,t.strokeStyle=F}}var te=2*e.pstyle("text-outline-width").pfValue;if(te>0&&(t.lineWidth=te),e.pstyle("text-wrap").value==="wrap"){var Y=Ul(s,"labelWrapCachedLines",r),he=Ul(s,"labelLineHeight",r),Z=g/2,ue=this.getLabelJustification(e);switch(ue==="auto"||(w==="left"?ue==="left"?u+=-g:ue==="center"&&(u+=-Z):w==="center"?ue==="left"?u+=-Z:ue==="right"&&(u+=Z):w==="right"&&(ue==="center"?u+=Z:ue==="right"&&(u+=g))),C){case"top":h-=(Y.length-1)*he;break;case"center":case"bottom":h-=(Y.length-1)*he;break}for(var K=0;K0&&t.strokeText(Y[K],u,h),t.fillText(Y[K],u,h),h+=he}else te>0&&t.strokeText(p,u,h),t.fillText(p,u,h);T!==0&&(t.rotate(-T),t.translate(-f,-d))}}};my={};my.drawNode=function(t,e,r){var n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,a=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,s=this,l,u,h=e._private,f=h.rscratch,d=e.position();if(!(!Ct(d.x)||!Ct(d.y))&&!(a&&!e.visible())){var p=a?e.effectiveOpacity():1,m=s.usePaths(),g,y=!1,v=e.padding();l=e.width()+2*v,u=e.height()+2*v;var x;r&&(x=r,t.translate(-x.x1,-x.y1));for(var b=e.pstyle("background-image"),w=b.value,C=new Array(w.length),T=new Array(w.length),E=0,A=0;A0&&arguments[0]!==void 0?arguments[0]:D;s.eleFillStyle(t,e,oe)},"setupShapeColor"),K=o(function(){var oe=arguments.length>0&&arguments[0]!==void 0?arguments[0]:$;s.colorStrokeStyle(t,R[0],R[1],R[2],oe)},"setupBorderColor"),j=o(function(){var oe=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Y;s.colorStrokeStyle(t,Q[0],Q[1],Q[2],oe)},"setupOutlineColor"),ne=o(function(oe,V,we,W){var pe=s.nodePathCache=s.nodePathCache||[],ve=ame(we==="polygon"?we+","+W.join(","):we,""+V,""+oe,""+Z),Pe=pe[ve],_e,be=!1;return Pe!=null?(_e=Pe,be=!0,f.pathCache=_e):(_e=new Path2D,pe[ve]=f.pathCache=_e),{path:_e,cacheHit:be}},"getPath"),ee=e.pstyle("shape").strValue,ce=e.pstyle("shape-polygon-points").pfValue;if(m){t.translate(d.x,d.y);var le=ne(l,u,ee,ce);g=le.path,y=le.cacheHit}var J=o(function(){if(!y){var oe=d;m&&(oe={x:0,y:0}),s.nodeShapes[s.getNodeShape(e)].draw(g||t,oe.x,oe.y,l,u,Z,f)}m?t.fill(g):t.fill()},"drawShape"),Se=o(function(){for(var oe=arguments.length>0&&arguments[0]!==void 0?arguments[0]:p,V=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,we=h.backgrounding,W=0,pe=0;pe0&&arguments[0]!==void 0?arguments[0]:!1,V=arguments.length>1&&arguments[1]!==void 0?arguments[1]:p;s.hasPie(e)&&(s.drawPie(t,e,V),oe&&(m||s.nodeShapes[s.getNodeShape(e)].draw(t,d.x,d.y,l,u,Z,f)))},"drawPie"),ae=o(function(){var oe=arguments.length>0&&arguments[0]!==void 0?arguments[0]:p,V=(L>0?L:-L)*oe,we=L>0?0:255;L!==0&&(s.colorFillStyle(t,we,we,we,V),m?t.fill(g):t.fill())},"darken"),Oe=o(function(){if(k>0){if(t.lineWidth=k,t.lineCap=P,t.lineJoin=M,t.setLineDash)switch(O){case"dotted":t.setLineDash([1,1]);break;case"dashed":t.setLineDash(F),t.lineDashOffset=z;break;case"solid":case"double":t.setLineDash([]);break}if(B!=="center"){if(t.save(),t.lineWidth*=2,B==="inside")m?t.clip(g):t.clip();else{var oe=new Path2D;oe.rect(-l/2-k,-u/2-k,l+2*k,u+2*k),oe.addPath(g),t.clip(oe,"evenodd")}m?t.stroke(g):t.stroke(),t.restore()}else m?t.stroke(g):t.stroke();if(O==="double"){t.lineWidth=k/3;var V=t.globalCompositeOperation;t.globalCompositeOperation="destination-out",m?t.stroke(g):t.stroke(),t.globalCompositeOperation=V}t.setLineDash&&t.setLineDash([])}},"drawBorder"),ye=o(function(){if(U>0){if(t.lineWidth=U,t.lineCap="butt",t.setLineDash)switch(te){case"dotted":t.setLineDash([1,1]);break;case"dashed":t.setLineDash([4,2]);break;case"solid":case"double":t.setLineDash([]);break}var oe=d;m&&(oe={x:0,y:0});var V=s.getNodeShape(e),we=k;B==="inside"&&(we=0),B==="outside"&&(we*=2);var W=(l+we+(U+he))/l,pe=(u+we+(U+he))/u,ve=l*W,Pe=u*pe,_e=s.nodeShapes[V].points,be;if(m){var Ve=ne(ve,Pe,V,_e);be=Ve.path}if(V==="ellipse")s.drawEllipsePath(be||t,oe.x,oe.y,ve,Pe);else if(["round-diamond","round-heptagon","round-hexagon","round-octagon","round-pentagon","round-polygon","round-triangle","round-tag"].includes(V)){var De=0,qe=0,at=0;V==="round-diamond"?De=(we+he+U)*1.4:V==="round-heptagon"?(De=(we+he+U)*1.075,at=-(we/2+he+U)/35):V==="round-hexagon"?De=(we+he+U)*1.12:V==="round-pentagon"?(De=(we+he+U)*1.13,at=-(we/2+he+U)/15):V==="round-tag"?(De=(we+he+U)*1.12,qe=(we/2+U+he)*.07):V==="round-triangle"&&(De=(we+he+U)*(Math.PI/2),at=-(we+he/2+U)/Math.PI),De!==0&&(W=(l+De)/l,ve=l*W,["round-hexagon","round-tag"].includes(V)||(pe=(u+De)/u,Pe=u*pe)),Z=Z==="auto"?gme(ve,Pe):Z;for(var Lt=ve/2,st=Pe/2,Ue=Z+(we+U+he)/2,ct=new Array(_e.length/2),We=new Array(_e.length/2),ot=0;ot<_e.length/2;ot++)ct[ot]={x:oe.x+qe+Lt*_e[ot*2],y:oe.y+at+st*_e[ot*2+1]};var Yt,bt,Mt,xt,ut=ct.length;for(bt=ct[ut-1],Yt=0;Yt0){if(i=i||n.position(),a==null||s==null){var m=n.padding();a=n.width()+2*m,s=n.height()+2*m}l.colorFillStyle(r,f[0],f[1],f[2],h),l.nodeShapes[d].draw(r,i.x,i.y,a+u*2,s+u*2,p),r.fill()}}}},"drawNodeOverlayUnderlay");my.drawNodeOverlay=bge("overlay");my.drawNodeUnderlay=bge("underlay");my.hasPie=function(t){return t=t[0],t._private.hasPie};my.drawPie=function(t,e,r,n){e=e[0],n=n||e.position();var i=e.cy().style(),a=e.pstyle("pie-size"),s=n.x,l=n.y,u=e.width(),h=e.height(),f=Math.min(u,h)/2,d=0,p=this.usePaths();p&&(s=0,l=0),a.units==="%"?f=f*a.pfValue:a.pfValue!==void 0&&(f=a.pfValue/2);for(var m=1;m<=i.pieBackgroundN;m++){var g=e.pstyle("pie-"+m+"-background-size").value,y=e.pstyle("pie-"+m+"-background-color").value,v=e.pstyle("pie-"+m+"-background-opacity").value*r,x=g/100;x+d>1&&(x=1-d);var b=1.5*Math.PI+2*Math.PI*d,w=2*Math.PI*x,C=b+w;g===0||d>=1||d+x>1||(t.beginPath(),t.moveTo(s,l),t.arc(s,l,f,b,C),t.closePath(),this.colorFillStyle(t,y[0],y[1],y[2],v),t.fill(),d+=x)}};vs={},iZe=100;vs.getPixelRatio=function(){var t=this.data.contexts[0];if(this.forcedPixelRatio!=null)return this.forcedPixelRatio;var e=this.cy.window(),r=t.backingStorePixelRatio||t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1;return(e.devicePixelRatio||1)/r};vs.paintCache=function(t){for(var e=this.paintCaches=this.paintCaches||[],r=!0,n,i=0;ie.minMbLowQualFrames&&(e.motionBlurPxRatio=e.mbPxRBlurry)),e.clearingMotionBlur&&(e.motionBlurPxRatio=1),e.textureDrawLastFrame&&!d&&(f[e.NODE]=!0,f[e.SELECT_BOX]=!0);var b=r.style(),w=r.zoom(),C=s!==void 0?s:w,T=r.pan(),E={x:T.x,y:T.y},A={zoom:w,pan:{x:T.x,y:T.y}},S=e.prevViewport,_=S===void 0||A.zoom!==S.zoom||A.pan.x!==S.pan.x||A.pan.y!==S.pan.y;!_&&!(y&&!g)&&(e.motionBlurPxRatio=1),l&&(E=l),C*=u,E.x*=u,E.y*=u;var I=e.getCachedZSortedEles();function L(K,j,ne,ee,ce){var le=K.globalCompositeOperation;K.globalCompositeOperation="destination-out",e.colorFillStyle(K,255,255,255,e.motionBlurTransparency),K.fillRect(j,ne,ee,ce),K.globalCompositeOperation=le}o(L,"mbclear");function k(K,j){var ne,ee,ce,le;!e.clearingMotionBlur&&(K===h.bufferContexts[e.MOTIONBLUR_BUFFER_NODE]||K===h.bufferContexts[e.MOTIONBLUR_BUFFER_DRAG])?(ne={x:T.x*m,y:T.y*m},ee=w*m,ce=e.canvasWidth*m,le=e.canvasHeight*m):(ne=E,ee=C,ce=e.canvasWidth,le=e.canvasHeight),K.setTransform(1,0,0,1,0,0),j==="motionBlur"?L(K,0,0,ce,le):!n&&(j===void 0||j)&&K.clearRect(0,0,ce,le),i||(K.translate(ne.x,ne.y),K.scale(ee,ee)),l&&K.translate(l.x,l.y),s&&K.scale(s,s)}if(o(k,"setContextTransform"),d||(e.textureDrawLastFrame=!1),d){if(e.textureDrawLastFrame=!0,!e.textureCache){e.textureCache={},e.textureCache.bb=r.mutableElements().boundingBox(),e.textureCache.texture=e.data.bufferCanvases[e.TEXTURE_BUFFER];var D=e.data.bufferContexts[e.TEXTURE_BUFFER];D.setTransform(1,0,0,1,0,0),D.clearRect(0,0,e.canvasWidth*e.textureMult,e.canvasHeight*e.textureMult),e.render({forcedContext:D,drawOnlyNodeLayer:!0,forcedPxRatio:u*e.textureMult});var A=e.textureCache.viewport={zoom:r.zoom(),pan:r.pan(),width:e.canvasWidth,height:e.canvasHeight};A.mpan={x:(0-A.pan.x)/A.zoom,y:(0-A.pan.y)/A.zoom}}f[e.DRAG]=!1,f[e.NODE]=!1;var R=h.contexts[e.NODE],O=e.textureCache.texture,A=e.textureCache.viewport;R.setTransform(1,0,0,1,0,0),p?L(R,0,0,A.width,A.height):R.clearRect(0,0,A.width,A.height);var M=b.core("outside-texture-bg-color").value,P=b.core("outside-texture-bg-opacity").value;e.colorFillStyle(R,M[0],M[1],M[2],P),R.fillRect(0,0,A.width,A.height);var w=r.zoom();k(R,!1),R.clearRect(A.mpan.x,A.mpan.y,A.width/A.zoom/u,A.height/A.zoom/u),R.drawImage(O,A.mpan.x,A.mpan.y,A.width/A.zoom/u,A.height/A.zoom/u)}else e.textureOnViewport&&!n&&(e.textureCache=null);var B=r.extent(),F=e.pinching||e.hoverData.dragging||e.swipePanning||e.data.wheelZooming||e.hoverData.draggingEles||e.cy.animated(),z=e.hideEdgesOnViewport&&F,$=[];if($[e.NODE]=!f[e.NODE]&&p&&!e.clearedForMotionBlur[e.NODE]||e.clearingMotionBlur,$[e.NODE]&&(e.clearedForMotionBlur[e.NODE]=!0),$[e.DRAG]=!f[e.DRAG]&&p&&!e.clearedForMotionBlur[e.DRAG]||e.clearingMotionBlur,$[e.DRAG]&&(e.clearedForMotionBlur[e.DRAG]=!0),f[e.NODE]||i||a||$[e.NODE]){var U=p&&!$[e.NODE]&&m!==1,R=n||(U?e.data.bufferContexts[e.MOTIONBLUR_BUFFER_NODE]:h.contexts[e.NODE]),Q=p&&!U?"motionBlur":void 0;k(R,Q),z?e.drawCachedNodes(R,I.nondrag,u,B):e.drawLayeredElements(R,I.nondrag,u,B),e.debug&&e.drawDebugPoints(R,I.nondrag),!i&&!p&&(f[e.NODE]=!1)}if(!a&&(f[e.DRAG]||i||$[e.DRAG])){var U=p&&!$[e.DRAG]&&m!==1,R=n||(U?e.data.bufferContexts[e.MOTIONBLUR_BUFFER_DRAG]:h.contexts[e.DRAG]);k(R,p&&!U?"motionBlur":void 0),z?e.drawCachedNodes(R,I.drag,u,B):e.drawCachedElements(R,I.drag,u,B),e.debug&&e.drawDebugPoints(R,I.drag),!i&&!p&&(f[e.DRAG]=!1)}if(this.drawSelectionRectangle(t,k),p&&m!==1){var te=h.contexts[e.NODE],Y=e.data.bufferCanvases[e.MOTIONBLUR_BUFFER_NODE],he=h.contexts[e.DRAG],Z=e.data.bufferCanvases[e.MOTIONBLUR_BUFFER_DRAG],ue=o(function(j,ne,ee){j.setTransform(1,0,0,1,0,0),ee||!x?j.clearRect(0,0,e.canvasWidth,e.canvasHeight):L(j,0,0,e.canvasWidth,e.canvasHeight);var ce=m;j.drawImage(ne,0,0,e.canvasWidth*ce,e.canvasHeight*ce,0,0,e.canvasWidth,e.canvasHeight)},"drawMotionBlur");(f[e.NODE]||$[e.NODE])&&(ue(te,Y,$[e.NODE]),f[e.NODE]=!1),(f[e.DRAG]||$[e.DRAG])&&(ue(he,Z,$[e.DRAG]),f[e.DRAG]=!1)}e.prevViewport=A,e.clearingMotionBlur&&(e.clearingMotionBlur=!1,e.motionBlurCleared=!0,e.motionBlur=!0),p&&(e.motionBlurTimeout=setTimeout(function(){e.motionBlurTimeout=null,e.clearedForMotionBlur[e.NODE]=!1,e.clearedForMotionBlur[e.DRAG]=!1,e.motionBlur=!1,e.clearingMotionBlur=!d,e.mbFrames=0,f[e.NODE]=!0,f[e.DRAG]=!0,e.redraw()},iZe)),n||r.emit("render")};vs.drawSelectionRectangle=function(t,e){var r=this,n=r.cy,i=r.data,a=n.style(),s=t.drawOnlyNodeLayer,l=t.drawAllLayers,u=i.canvasNeedsRedraw,h=t.forcedContext;if(r.showFps||!s&&u[r.SELECT_BOX]&&!l){var f=h||i.contexts[r.SELECT_BOX];if(e(f),r.selection[4]==1&&(r.hoverData.selecting||r.touchData.selecting)){var d=r.cy.zoom(),p=a.core("selection-box-border-width").value/d;f.lineWidth=p,f.fillStyle="rgba("+a.core("selection-box-color").value[0]+","+a.core("selection-box-color").value[1]+","+a.core("selection-box-color").value[2]+","+a.core("selection-box-opacity").value+")",f.fillRect(r.selection[0],r.selection[1],r.selection[2]-r.selection[0],r.selection[3]-r.selection[1]),p>0&&(f.strokeStyle="rgba("+a.core("selection-box-border-color").value[0]+","+a.core("selection-box-border-color").value[1]+","+a.core("selection-box-border-color").value[2]+","+a.core("selection-box-opacity").value+")",f.strokeRect(r.selection[0],r.selection[1],r.selection[2]-r.selection[0],r.selection[3]-r.selection[1]))}if(i.bgActivePosistion&&!r.hoverData.selecting){var d=r.cy.zoom(),m=i.bgActivePosistion;f.fillStyle="rgba("+a.core("active-bg-color").value[0]+","+a.core("active-bg-color").value[1]+","+a.core("active-bg-color").value[2]+","+a.core("active-bg-opacity").value+")",f.beginPath(),f.arc(m.x,m.y,a.core("active-bg-size").pfValue/d,0,2*Math.PI),f.fill()}var g=r.lastRedrawTime;if(r.showFps&&g){g=Math.round(g);var y=Math.round(1e3/g),v="1 frame = "+g+" ms = "+y+" fps";if(f.setTransform(1,0,0,1,0,0),f.fillStyle="rgba(255, 0, 0, 0.75)",f.strokeStyle="rgba(255, 0, 0, 0.75)",f.font="30px Arial",!$b){var x=f.measureText(v);$b=x.actualBoundingBoxAscent}f.fillText(v,0,$b);var b=60;f.strokeRect(0,$b+10,250,20),f.fillRect(0,$b+10,250*Math.min(y/b,1),20)}l||(u[r.SELECT_BOX]=!1)}};o(P0e,"compileShader");o(aZe,"createProgram");o(sZe,"createTextureCanvas");o(EB,"getEffectivePanZoom");o(OP,"modelToRenderedPosition");o(d6,"toWebGLColor");o(p6,"indexToVec4");o(oZe,"vec4ToIndex");o(lZe,"createTexture");o(wge,"getTypeInfo");o(Tge,"createTypedArray");o(cZe,"createTypedArrayView");o(uZe,"createBufferStaticDraw");o(go,"createBufferDynamicDraw");o(hZe,"createPickingFrameBuffer");B0e=typeof Float32Array<"u"?Float32Array:Array;Math.hypot||(Math.hypot=function(){for(var t=0,e=arguments.length;e--;)t+=arguments[e]*arguments[e];return Math.sqrt(t)});o(Xb,"create");o(kge,"identity");o(fZe,"multiply");o(O6,"translate");o(Ege,"rotate");o(SB,"scale");o(dZe,"projection");jb={SCREEN:{name:"screen",screen:!0},PICKING:{name:"picking",picking:!0}},zb=la({getKey:null,drawElement:null,getBoundingBox:null,getRotation:null,getRotationPoint:null,getRotationOffset:null,isVisible:null,getPadding:null}),pZe=function(){function t(e,r){$f(this,t),this.debugID=Math.floor(Math.random()*1e4),this.r=e,this.atlasSize=r.webglTexSize,this.rows=r.webglTexRows,this.enableWrapping=r.enableWrapping,this.texHeight=Math.floor(this.atlasSize/this.rows),this.maxTexWidth=this.atlasSize,this.texture=null,this.canvas=null,this.needsBuffer=!0,this.freePointer={x:0,row:0},this.keyToLocation=new Map,this.canvas=r.createTextureCanvas(e,this.atlasSize,this.atlasSize),this.scratch=r.createTextureCanvas(e,this.atlasSize,this.texHeight,"scratch")}return o(t,"Atlas"),zf(t,[{key:"getKeys",value:o(function(){return new Set(this.keyToLocation.keys())},"getKeys")},{key:"getScale",value:o(function(r){var n=r.w,i=r.h,a=this.texHeight,s=this.maxTexWidth,l=a/i,u=n*l,h=i*l;return u>s&&(l=s/n,u=n*l,h=i*l),{scale:l,texW:u,texH:h}},"getScale")},{key:"draw",value:o(function(r,n,i){var a=this,s=this.atlasSize,l=this.rows,u=this.texHeight,h=this.getScale(n),f=h.scale,d=h.texW,p=h.texH,m=[null,null],g=o(function(w,C){if(i&&C){var T=C.context,E=w.x,A=w.row,S=E,_=u*A;T.save(),T.translate(S,_),T.scale(f,f),i(T,n),T.restore()}},"drawAt"),y=o(function(){g(a.freePointer,a.canvas),m[0]={x:a.freePointer.x,y:a.freePointer.row*u,w:d,h:p},m[1]={x:a.freePointer.x+d,y:a.freePointer.row*u,w:0,h:p},a.freePointer.x+=d,a.freePointer.x==s&&(a.freePointer.x=0,a.freePointer.row++)},"drawNormal"),v=o(function(){var w=a.scratch,C=a.canvas;w.clear(),g({x:0,row:0},w);var T=s-a.freePointer.x,E=d-T,A=u;{var S=a.freePointer.x,_=a.freePointer.row*u,I=T;C.context.drawImage(w,0,0,I,A,S,_,I,A),m[0]={x:S,y:_,w:I,h:p}}{var L=T,k=(a.freePointer.row+1)*u,D=E;C&&C.context.drawImage(w,L,0,D,A,0,k,D,A),m[1]={x:0,y:k,w:D,h:p}}a.freePointer.x=E,a.freePointer.row++},"drawWrapped"),x=o(function(){a.freePointer.x=0,a.freePointer.row++},"moveToStartOfNextRow");if(this.freePointer.x+d<=s)y();else{if(this.freePointer.row>=l-1)return!1;this.freePointer.x===s?(x(),y()):this.enableWrapping?v():(x(),y())}return this.keyToLocation.set(r,m),this.needsBuffer=!0,m},"draw")},{key:"getOffsets",value:o(function(r){return this.keyToLocation.get(r)},"getOffsets")},{key:"isEmpty",value:o(function(){return this.freePointer.x===0&&this.freePointer.row===0},"isEmpty")},{key:"canFit",value:o(function(r){var n=this.atlasSize,i=this.rows,a=this.getScale(r),s=a.texW;return this.freePointer.x+s>n?this.freePointer.row1&&arguments[1]!==void 0?arguments[1]:{},i=n.forceRedraw,a=i===void 0?!1:i,s=n.filterEle,l=s===void 0?function(){return!0}:s,u=n.filterType,h=u===void 0?function(){return!0}:u,f=!1,d=yo(r),p;try{for(d.s();!(p=d.n()).done;){var m=p.value;if(l(m)){var g=m.id(),y=yo(this.getRenderTypes()),v;try{for(y.s();!(v=y.n()).done;){var x=v.value;if(h(x.type)){var b=x.getKey(m);a?(x.atlasCollection.deleteKey(g,b),x.atlasCollection.styleKeyNeedsRedraw.add(b),f=!0):f|=x.atlasCollection.checkKeyIsInvalid(g,b)}}}catch(w){y.e(w)}finally{y.f()}}}}catch(w){d.e(w)}finally{d.f()}return f},"invalidate")},{key:"gc",value:o(function(){var r=yo(this.getRenderTypes()),n;try{for(r.s();!(n=r.n()).done;){var i=n.value;i.atlasCollection.gc()}}catch(a){r.e(a)}finally{r.f()}},"gc")},{key:"isRenderable",value:o(function(r,n){var i=this.getRenderTypeOpts(n);return i&&i.isVisible(r)},"isRenderable")},{key:"startBatch",value:o(function(){this.batchAtlases=[]},"startBatch")},{key:"getAtlasCount",value:o(function(){return this.batchAtlases.length},"getAtlasCount")},{key:"getAtlases",value:o(function(){return this.batchAtlases},"getAtlases")},{key:"getOrCreateAtlas",value:o(function(r,n,i){var a=this.renderTypes.get(i),s=a.getKey(r),l=r.id();return a.atlasCollection.draw(l,s,n,function(u){a.drawElement(u,r,n,!0,!0)})},"getOrCreateAtlas")},{key:"getAtlasIndexForBatch",value:o(function(r){var n=this.batchAtlases.indexOf(r);if(n<0){if(this.batchAtlases.length===this.maxAtlasesPerBatch)return;this.batchAtlases.push(r),n=this.batchAtlases.length-1}return n},"getAtlasIndexForBatch")},{key:"getIndexArray",value:o(function(){return Array.from({length:this.maxAtlases},function(r,n){return n})},"getIndexArray")},{key:"getAtlasInfo",value:o(function(r,n){var i=this.renderTypes.get(n),a=i.getBoundingBox(r),s=this.getOrCreateAtlas(r,a,n),l=this.getAtlasIndexForBatch(s);if(l!==void 0){var u=i.getKey(r),h=s.getOffsets(u),f=Di(h,2),d=f[0],p=f[1];return{atlasID:l,tex:d,tex1:d,tex2:p,bb:a,type:n,styleKey:u}}},"getAtlasInfo")},{key:"canAddToCurrentBatch",value:o(function(r,n){if(this.batchAtlases.length===this.maxAtlasesPerBatch){var i=this.renderTypes.get(n),a=i.getKey(r),s=i.atlasCollection.getAtlas(a);return s&&this.batchAtlases.includes(s)}return!0},"canAddToCurrentBatch")},{key:"setTransformMatrix",value:o(function(r,n,i){var a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,s=n.bb,l=n.type,u=n.tex1,h=n.tex2,f=this.getRenderTypeOpts(l),d=f.getPadding?f.getPadding(i):0,p=u.w/(u.w+h.w);a||(p=1-p);var m=this.getAdjustedBB(s,d,a,p),g,y;kge(r);var v=f.getRotation?f.getRotation(i):0;if(v!==0){var x=f.getRotationPoint(i),b=x.x,w=x.y;O6(r,r,[b,w]),Ege(r,r,v);var C=f.getRotationOffset(i);g=C.x+m.xOffset,y=C.y}else g=m.x1,y=m.y1;O6(r,r,[g,y]),SB(r,r,[m.w,m.h])},"setTransformMatrix")},{key:"getTransformMatrix",value:o(function(r,n){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,a=Xb();return this.setTransformMatrix(a,r,n,i),a},"getTransformMatrix")},{key:"getAdjustedBB",value:o(function(r,n,i,a){var s=r.x1,l=r.y1,u=r.w,h=r.h;n&&(s-=n,l-=n,u+=2*n,h+=2*n);var f=0,d=u*a;return i&&a<1?u=d:!i&&a<1&&(f=u-d,s+=f,u=d),{x1:s,y1:l,w:u,h,xOffset:f}},"getAdjustedBB")},{key:"getDebugInfo",value:o(function(){var r=[],n=yo(this.renderTypes),i;try{for(n.s();!(i=n.n()).done;){var a=Di(i.value,2),s=a[0],l=a[1],u=l.atlasCollection.getCounts(),h=u.keyCount,f=u.atlasCount;r.push({type:s,keyCount:h,atlasCount:f})}}catch(d){n.e(d)}finally{n.f()}return r},"getDebugInfo")}]),t}(),PP=0,F0e=1,$0e=2,BP=3,vZe=function(){function t(e,r,n){$f(this,t),this.r=e,this.gl=r,this.maxInstances=n.webglBatchSize,this.maxAtlases=n.webglTexPerBatch,this.atlasSize=n.webglTexSize,this.bgColor=n.bgColor,n.enableWrapping=!0,n.createTextureCanvas=sZe,this.atlasManager=new yZe(e,n),this.program=this.createShaderProgram(jb.SCREEN),this.pickingProgram=this.createShaderProgram(jb.PICKING),this.vao=this.createVAO(),this.debugInfo=[]}return o(t,"ElementDrawingWebGL"),zf(t,[{key:"addTextureRenderType",value:o(function(r,n){this.atlasManager.addRenderType(r,n)},"addTextureRenderType")},{key:"invalidate",value:o(function(r){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=n.type,a=this.atlasManager;return i?a.invalidate(r,{filterType:o(function(l){return l===i},"filterType"),forceRedraw:!0}):a.invalidate(r)},"invalidate")},{key:"gc",value:o(function(){this.atlasManager.gc()},"gc")},{key:"createShaderProgram",value:o(function(r){var n=this.gl,i=`#version 300 es +Expecting `+Se.join(", ")+", got '"+(this.terminals_[ce]||ce)+"'":se="Parse error on line "+(L+1)+": Unexpected "+(ce==P?"end of input":"'"+(this.terminals_[ce]||ce)+"'"),this.parseError(se,{text:F.match,token:this.terminals_[ce]||ce,line:F.yylineno,loc:U,expected:Se})}if(Q[0]instanceof Array&&Q.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ue+", token: "+ce);switch(Q[0]){case 1:_.push(ce),D.push(F.yytext),O.push(F.yylloc),_.push(Q[1]),ce=null,Z?(ce=Z,Z=null):(A=F.yyleng,k=F.yytext,L=F.yylineno,U=F.yylloc,I>0&&I--);break;case 2:if(le=this.productions_[Q[1]][1],te.$=D[D.length-le],te._$={first_line:O[O.length-(le||1)].first_line,last_line:O[O.length-1].last_line,first_column:O[O.length-(le||1)].first_column,last_column:O[O.length-1].last_column},K&&(te._$.range=[O[O.length-(le||1)].range[0],O[O.length-1].range[1]]),ne=this.performAction.apply(te,[k,A,L,z.yy,Q[1],D,O].concat(B)),typeof ne<"u")return ne;le&&(_=_.slice(0,-1*le*2),D=D.slice(0,-1*le),O=O.slice(0,-1*le)),_.push(this.productions_[Q[1]][0]),D.push(te.$),O.push(te._$),J=R[_[_.length-2]][_[_.length-1]],_.push(J);break;case 3:return!0}}return!0},"parse")},b=function(){var S={EOF:1,parseError:o(function(E,_){if(this.yy.parser)this.yy.parser.parseError(E,_);else throw new Error(E)},"parseError"),setInput:o(function(w,E){return this.yy=E||this.yy||{},this._input=w,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},"setInput"),input:o(function(){var w=this._input[0];this.yytext+=w,this.yyleng++,this.offset++,this.match+=w,this.matched+=w;var E=w.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),w},"input"),unput:o(function(w){var E=w.length,_=w.split(/(?:\r\n?|\n)/g);this._input=w+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-E),this.offset-=E;var C=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 D=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===C.length?this.yylloc.first_column:0)+C[C.length-_.length].length-_[0].length:this.yylloc.first_column-E},this.options.ranges&&(this.yylloc.range=[D[0],D[0]+this.yyleng-E]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(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},"reject"),less:o(function(w){this.unput(this.match.slice(w))},"less"),pastInput:o(function(){var w=this.matched.substr(0,this.matched.length-this.match.length);return(w.length>20?"...":"")+w.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var w=this.match;return w.length<20&&(w+=this._input.substr(0,20-w.length)),(w.substr(0,20)+(w.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var w=this.pastInput(),E=new Array(w.length+1).join("-");return w+this.upcomingInput()+` +`+E+"^"},"showPosition"),test_match:o(function(w,E){var _,C,D;if(this.options.backtrack_lexer&&(D={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&&(D.yylloc.range=this.yylloc.range.slice(0))),C=w[0].match(/(?:\r\n?|\n).*/g),C&&(this.yylineno+=C.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:C?C[C.length-1].length-C[C.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+w[0].length},this.yytext+=w[0],this.match+=w[0],this.matches=w,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(w[0].length),this.matched+=w[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 O in D)this[O]=D[O];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var w,E,_,C;this._more||(this.yytext="",this.match="");for(var D=this._currentRules(),O=0;OE[0].length)){if(E=_,C=O,this.options.backtrack_lexer){if(w=this.test_match(_,D[O]),w!==!1)return w;if(this._backtrack){E=!1;continue}else return!1}else if(!this.options.flex)break}return E?(w=this.test_match(E,D[C]),w!==!1?w:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var E=this.next();return E||this.lex()},"lex"),begin:o(function(E){this.conditionStack.push(E)},"begin"),popState:o(function(){var E=this.conditionStack.length-1;return E>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(E){return E=this.conditionStack.length-1-Math.abs(E||0),E>=0?this.conditionStack[E]:"INITIAL"},"topState"),pushState:o(function(E){this.begin(E)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(E,_,C,D){var O=D;switch(C){case 0:return E.getLogger().trace("Found comment",_.yytext),6;break;case 1:return 8;case 2:this.begin("CLASS");break;case 3:return this.popState(),16;break;case 4:this.popState();break;case 5:E.getLogger().trace("Begin icon"),this.begin("ICON");break;case 6:return E.getLogger().trace("SPACELINE"),6;break;case 7:return 7;case 8:return 15;case 9:E.getLogger().trace("end icon"),this.popState();break;case 10:return E.getLogger().trace("Exploding node"),this.begin("NODE"),19;break;case 11:return E.getLogger().trace("Cloud"),this.begin("NODE"),19;break;case 12:return E.getLogger().trace("Explosion Bang"),this.begin("NODE"),19;break;case 13:return E.getLogger().trace("Cloud Bang"),this.begin("NODE"),19;break;case 14:return this.begin("NODE"),19;break;case 15:return this.begin("NODE"),19;break;case 16:return this.begin("NODE"),19;break;case 17:return this.begin("NODE"),19;break;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:E.getLogger().trace("Starting NSTR"),this.begin("NSTR");break;case 25:return E.getLogger().trace("description:",_.yytext),"NODE_DESCR";break;case 26:this.popState();break;case 27:return this.popState(),E.getLogger().trace("node end ))"),"NODE_DEND";break;case 28:return this.popState(),E.getLogger().trace("node end )"),"NODE_DEND";break;case 29:return this.popState(),E.getLogger().trace("node end ...",_.yytext),"NODE_DEND";break;case 30:return this.popState(),E.getLogger().trace("node end (("),"NODE_DEND";break;case 31:return this.popState(),E.getLogger().trace("node end (-"),"NODE_DEND";break;case 32:return this.popState(),E.getLogger().trace("node end (-"),"NODE_DEND";break;case 33:return this.popState(),E.getLogger().trace("node end (("),"NODE_DEND";break;case 34:return this.popState(),E.getLogger().trace("node end (("),"NODE_DEND";break;case 35:return E.getLogger().trace("Long description:",_.yytext),20;break;case 36:return E.getLogger().trace("Long description:",_.yytext),20;break}},"anonymous"),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 S}();x.lexer=b;function T(){this.yy={}}return o(T,"Parser"),T.prototype=x,x.Parser=T,new T}();rB.parser=rB;P0e=rB});var oqe,p6,F0e=N(()=>{"use strict";Gt();pr();yt();_a();oqe={DEFAULT:0,NO_BORDER:0,ROUNDED_RECT:1,RECT:2,CIRCLE:3,CLOUD:4,BANG:5,HEXAGON:6},p6=class{constructor(){this.nodes=[];this.count=0;this.elements={};this.getLogger=this.getLogger.bind(this),this.nodeType=oqe,this.clear(),this.getType=this.getType.bind(this),this.getMindmap=this.getMindmap.bind(this),this.getElementById=this.getElementById.bind(this),this.getParent=this.getParent.bind(this),this.getMindmap=this.getMindmap.bind(this),this.addNode=this.addNode.bind(this),this.decorateNode=this.decorateNode.bind(this)}static{o(this,"MindmapDB")}clear(){this.nodes=[],this.count=0,this.elements={}}getParent(e){for(let r=this.nodes.length-1;r>=0;r--)if(this.nodes[r].level0?this.nodes[0]:null}addNode(e,r,n,i){X.info("addNode",e,r,n,i);let a=me(),s=a.mindmap?.padding??or.mindmap.padding;switch(i){case this.nodeType.ROUNDED_RECT:case this.nodeType.RECT:case this.nodeType.HEXAGON:s*=2;break}let l={id:this.count++,nodeId:wr(r,a),level:e,descr:wr(n,a),type:i,children:[],width:a.mindmap?.maxNodeWidth??or.mindmap.maxNodeWidth,padding:s},u=this.getParent(e);if(u)u.children.push(l),this.nodes.push(l);else if(this.nodes.length===0)this.nodes.push(l);else throw new Error(`There can be only one root. No parent could be found for ("${l.descr}")`)}getType(e,r){switch(X.debug("In get type",e,r),e){case"[":return this.nodeType.RECT;case"(":return r===")"?this.nodeType.ROUNDED_RECT:this.nodeType.CLOUD;case"((":return this.nodeType.CIRCLE;case")":return this.nodeType.CLOUD;case"))":return this.nodeType.BANG;case"{{":return this.nodeType.HEXAGON;default:return this.nodeType.DEFAULT}}setElementForId(e,r){this.elements[e]=r}getElementById(e){return this.elements[e]}decorateNode(e){if(!e)return;let r=me(),n=this.nodes[this.nodes.length-1];e.icon&&(n.icon=wr(e.icon,r)),e.class&&(n.class=wr(e.class,r))}type2Str(e){switch(e){case this.nodeType.DEFAULT:return"no-border";case this.nodeType.RECT:return"rect";case this.nodeType.ROUNDED_RECT:return"rounded-rect";case this.nodeType.CIRCLE:return"circle";case this.nodeType.CLOUD:return"cloud";case this.nodeType.BANG:return"bang";case this.nodeType.HEXAGON:return"hexgon";default:return"no-border"}}getLogger(){return X}}});function qi(t){"@babel/helpers - typeof";return qi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},qi(t)}function Vf(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function $0e(t,e){for(var r=0;rt.length)&&(e=t.length);for(var r=0,n=new Array(e);r=t.length?{done:!0}:{done:!1,value:t[n++]}},"n"),e:o(function(u){throw u},"e"),f:i}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var a=!0,s=!1,l;return{s:o(function(){r=r.call(t)},"s"),n:o(function(){var u=r.next();return a=u.done,u},"n"),e:o(function(u){s=!0,l=u},"e"),f:o(function(){try{!a&&r.return!=null&&r.return()}finally{if(s)throw l}},"f")}}function Pqe(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}function Bqe(t,e){return e={exports:{}},t(e,e.exports),e.exports}function Hqe(t){for(var e=t.length;e--&&Uqe.test(t.charAt(e)););return e}function Yqe(t){return t&&t.slice(0,Wqe(t)+1).replace(qqe,"")}function Zqe(t){var e=Kqe.call(t,Fb),r=t[Fb];try{t[Fb]=void 0;var n=!0}catch{}var i=Qqe.call(t);return n&&(e?t[Fb]=r:delete t[Fb]),i}function rYe(t){return tYe.call(t)}function sYe(t){return t==null?t===void 0?aYe:iYe:V0e&&V0e in Object(t)?Jqe(t):nYe(t)}function oYe(t){return t!=null&&typeof t=="object"}function uYe(t){return typeof t=="symbol"||lYe(t)&&mge(t)==cYe}function mYe(t){if(typeof t=="number")return t;if(d4(t))return U0e;if(Kp(t)){var e=typeof t.valueOf=="function"?t.valueOf():t;t=Kp(e)?e+"":e}if(typeof t!="string")return t===0?t:+t;t=Xqe(t);var r=fYe.test(t);return r||dYe.test(t)?pYe(t.slice(2),r?2:8):hYe.test(t)?U0e:+t}function xYe(t,e,r){var n,i,a,s,l,u,h=0,f=!1,d=!1,p=!0;if(typeof t!="function")throw new TypeError(gYe);e=H0e(e)||0,Kp(r)&&(f=!!r.leading,d="maxWait"in r,a=d?yYe(H0e(r.maxWait)||0,e):a,p="trailing"in r?!!r.trailing:p);function m(E){var _=n,C=i;return n=i=void 0,h=E,s=t.apply(C,_),s}o(m,"invokeFunc");function g(E){return h=E,l=setTimeout(x,e),f?m(E):s}o(g,"leadingEdge");function y(E){var _=E-u,C=E-h,D=e-_;return d?vYe(D,a-C):D}o(y,"remainingWait");function v(E){var _=E-u,C=E-h;return u===void 0||_>=e||_<0||d&&C>=a}o(v,"shouldInvoke");function x(){var E=nB();if(v(E))return b(E);l=setTimeout(x,y(E))}o(x,"timerExpired");function b(E){return l=void 0,p&&n?m(E):(n=i=void 0,s)}o(b,"trailingEdge");function T(){l!==void 0&&clearTimeout(l),h=0,n=u=i=l=void 0}o(T,"cancel");function S(){return l===void 0?s:b(nB())}o(S,"flush");function w(){var E=nB(),_=v(E);if(n=arguments,i=this,u=E,_){if(l===void 0)return g(u);if(d)return clearTimeout(l),l=setTimeout(x,e),m(u)}return l===void 0&&(l=setTimeout(x,e)),s}return o(w,"debounced"),w.cancel=T,w.flush=S,w}function eC(t,e,r,n,i,a){var s;return li(t)?s=t:s=ny[t]||ny.euclidean,e===0&&li(t)?s(i,a):s(e,r,n,i,a)}function hje(t,e){if(tC(t))return!1;var r=typeof t;return r=="number"||r=="symbol"||r=="boolean"||t==null||d4(t)?!0:uje.test(t)||!cje.test(t)||e!=null&&t in Object(e)}function yje(t){if(!Kp(t))return!1;var e=mge(t);return e==pje||e==mje||e==dje||e==gje}function bje(t){return!!ume&&ume in t}function Eje(t){if(t!=null){try{return kje.call(t)}catch{}try{return t+""}catch{}}return""}function Mje(t){if(!Kp(t)||Tje(t))return!1;var e=vje(t)?Nje:Aje;return e.test(Sje(t))}function Oje(t,e){return t?.[e]}function Bje(t,e){var r=Pje(t,e);return Ije(r)?r:void 0}function $je(){this.__data__=s4?s4(null):{},this.size=0}function Gje(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}function qje(t){var e=this.__data__;if(s4){var r=e[t];return r===Uje?void 0:r}return Wje.call(e,t)?e[t]:void 0}function Kje(t){var e=this.__data__;return s4?e[t]!==void 0:jje.call(e,t)}function Jje(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=s4&&e===void 0?Zje:e,this}function oy(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e-1}function dKe(t,e){var r=this.__data__,n=rC(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this}function ly(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e-1&&t%1==0&&t0;){var f=i.shift();e(f),a.add(f.id()),l&&n(i,a,f)}return t}function Xge(t,e,r){if(r.isParent())for(var n=r._private.children,i=0;i0&&arguments[0]!==void 0?arguments[0]:QQe,e=arguments.length>1?arguments[1]:void 0,r=0;r0?k=A:R=A;while(Math.abs(L)>s&&++I=a?b(O,I):M===0?I:S(O,R,R+h)}o(w,"getTForX");var E=!1;function _(){E=!0,(t!==e||r!==n)&&T()}o(_,"precompute");var C=o(function(R){return E||_(),t===e&&r===n?R:R===0?0:R===1?1:v(w(R),e,n)},"f");C.getControlPoints=function(){return[{x:t,y:e},{x:r,y:n}]};var D="generateBezier("+[t,e,r,n]+")";return C.toString=function(){return D},C}function Dme(t,e,r,n,i){if(n===1||e===r)return r;var a=i(e,r,n);return t==null||((t.roundValue||t.color)&&(a=Math.round(a)),t.min!==void 0&&(a=Math.max(a,t.min)),t.max!==void 0&&(a=Math.min(a,t.max))),a}function Lme(t,e){return t.pfValue!=null||t.value!=null?t.pfValue!=null&&(e==null||e.type.units!=="%")?t.pfValue:t.value:t}function W1(t,e,r,n,i){var a=i!=null?i.type:null;r<0?r=0:r>1&&(r=1);var s=Lme(t,i),l=Lme(e,i);if(_t(s)&&_t(l))return Dme(a,s,l,r,n);if(En(s)&&En(l)){for(var u=[],h=0;h0?(m==="spring"&&g.push(s.duration),s.easingImpl=M6[m].apply(null,g)):s.easingImpl=M6[m]}var y=s.easingImpl,v;if(s.duration===0?v=1:v=(r-u)/s.duration,s.applying&&(v=s.progress),v<0?v=0:v>1&&(v=1),s.delay==null){var x=s.startPosition,b=s.position;if(b&&i&&!t.locked()){var T={};Vb(x.x,b.x)&&(T.x=W1(x.x,b.x,v,y)),Vb(x.y,b.y)&&(T.y=W1(x.y,b.y,v,y)),t.position(T)}var S=s.startPan,w=s.pan,E=a.pan,_=w!=null&&n;_&&(Vb(S.x,w.x)&&(E.x=W1(S.x,w.x,v,y)),Vb(S.y,w.y)&&(E.y=W1(S.y,w.y,v,y)),t.emit("pan"));var C=s.startZoom,D=s.zoom,O=D!=null&&n;O&&(Vb(C,D)&&(a.zoom=i4(a.minZoom,W1(C,D,v,y),a.maxZoom)),t.emit("zoom")),(_||O)&&t.emit("viewport");var R=s.style;if(R&&R.length>0&&i){for(var k=0;k=0;_--){var C=E[_];C()}E.splice(0,E.length)},"callbacks"),b=m.length-1;b>=0;b--){var T=m[b],S=T._private;if(S.stopped){m.splice(b,1),S.hooked=!1,S.playing=!1,S.started=!1,x(S.frames);continue}!S.playing&&!S.applying||(S.playing&&S.applying&&(S.applying=!1),S.started||hZe(f,T,t),uZe(f,T,t,d),S.applying&&(S.applying=!1),x(S.frames),S.step!=null&&S.step(t),T.completed()&&(m.splice(b,1),S.hooked=!1,S.playing=!1,S.started=!1,x(S.completes)),y=!0)}return!d&&m.length===0&&g.length===0&&n.push(f),y}o(i,"stepOne");for(var a=!1,s=0;s0?e.notify("draw",r):e.notify("draw")),r.unmerge(n),e.emit("step")}function h1e(t){this.options=ir({},xZe,bZe,t)}function f1e(t){this.options=ir({},TZe,t)}function d1e(t){this.options=ir({},wZe,t)}function uC(t){this.options=ir({},kZe,t),this.options.layout=this;var e=this.options.eles.nodes(),r=this.options.eles.edges(),n=r.filter(function(i){var a=i.source().data("id"),s=i.target().data("id"),l=e.some(function(h){return h.data("id")===a}),u=e.some(function(h){return h.data("id")===s});return!l||!u});this.options.eles=this.options.eles.not(n)}function m1e(t){this.options=ir({},zZe,t)}function eF(t){this.options=ir({},GZe,t)}function g1e(t){this.options=ir({},VZe,t)}function y1e(t){this.options=ir({},UZe,t)}function v1e(t){this.options=t,this.notifications=0}function T1e(t,e){e.radius===0?t.lineTo(e.cx,e.cy):t.arc(e.cx,e.cy,e.radius,e.startAngle,e.endAngle,e.counterClockwise)}function rF(t,e,r,n){var i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0;return n===0||e.radius===0?{cx:e.x,cy:e.y,radius:0,startX:e.x,startY:e.y,stopX:e.x,stopY:e.y,startAngle:void 0,endAngle:void 0,counterClockwise:void 0}:(qZe(t,e,r,n,i),{cx:_B,cy:DB,radius:Yp,startX:x1e,startY:b1e,stopX:LB,stopY:RB,startAngle:Kc.ang+Math.PI/2*Xp,endAngle:nl.ang-Math.PI/2*Xp,counterClockwise:P6})}function w1e(t){var e=[];if(t!=null){for(var r=0;r5&&arguments[5]!==void 0?arguments[5]:5,s=arguments.length>6?arguments[6]:void 0;t.beginPath(),t.moveTo(e+a,r),t.lineTo(e+n-a,r),t.quadraticCurveTo(e+n,r,e+n,r+a),t.lineTo(e+n,r+i-a),t.quadraticCurveTo(e+n,r+i,e+n-a,r+i),t.lineTo(e+a,r+i),t.quadraticCurveTo(e,r+i,e,r+i-a),t.lineTo(e,r+a),t.quadraticCurveTo(e,r,e+a,r),t.closePath(),s?t.stroke():t.fill()}function Kme(t,e,r){var n=t.createShader(e);if(t.shaderSource(n,r),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw new Error(t.getShaderInfoLog(n));return n}function MJe(t,e,r){var n=Kme(t,t.VERTEX_SHADER,e),i=Kme(t,t.FRAGMENT_SHADER,r),a=t.createProgram();if(t.attachShader(a,n),t.attachShader(a,i),t.linkProgram(a),!t.getProgramParameter(a,t.LINK_STATUS))throw new Error("Could not initialize shaders");return a}function IJe(t,e,r){r===void 0&&(r=e);var n=t.makeOffscreenCanvas(e,r),i=n.context=n.getContext("2d");return n.clear=function(){return i.clearRect(0,0,n.width,n.height)},n.clear(),n}function aF(t){var e=t.pixelRatio,r=t.cy.zoom(),n=t.cy.pan();return{zoom:r*e,pan:{x:n.x*e,y:n.y*e}}}function gB(t,e,r,n,i){var a=n*r+e.x,s=i*r+e.y;return s=Math.round(t.canvasHeight-s),[a,s]}function A6(t,e,r){var n=t[0]/255,i=t[1]/255,a=t[2]/255,s=e,l=r||new Array(4);return l[0]=n*s,l[1]=i*s,l[2]=a*s,l[3]=s,l}function _6(t,e){var r=e||new Array(4);return r[0]=(t>>0&255)/255,r[1]=(t>>8&255)/255,r[2]=(t>>16&255)/255,r[3]=(t>>24&255)/255,r}function OJe(t){return t[0]+(t[1]<<8)+(t[2]<<16)+(t[3]<<24)}function PJe(t,e){var r=t.createTexture();return r.buffer=function(n){t.bindTexture(t.TEXTURE_2D,r),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR_MIPMAP_NEAREST),t.pixelStorei(t.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,n),t.generateMipmap(t.TEXTURE_2D),t.bindTexture(t.TEXTURE_2D,null)},r.deleteTexture=function(){t.deleteTexture(r)},r}function O1e(t,e){switch(e){case"float":return[1,t.FLOAT,4];case"vec2":return[2,t.FLOAT,4];case"vec3":return[3,t.FLOAT,4];case"vec4":return[4,t.FLOAT,4];case"int":return[1,t.INT,4];case"ivec2":return[2,t.INT,4]}}function P1e(t,e,r){switch(e){case t.FLOAT:return new Float32Array(r);case t.INT:return new Int32Array(r)}}function BJe(t,e,r,n,i,a){switch(e){case t.FLOAT:return new Float32Array(r.buffer,a*n,i);case t.INT:return new Int32Array(r.buffer,a*n,i)}}function FJe(t,e,r,n){var i=O1e(t,e),a=Ri(i,2),s=a[0],l=a[1],u=P1e(t,l,n),h=t.createBuffer();return t.bindBuffer(t.ARRAY_BUFFER,h),t.bufferData(t.ARRAY_BUFFER,u,t.STATIC_DRAW),l===t.FLOAT?t.vertexAttribPointer(r,s,l,!1,0,0):l===t.INT&&t.vertexAttribIPointer(r,s,l,0,0),t.enableVertexAttribArray(r),t.bindBuffer(t.ARRAY_BUFFER,null),h}function yo(t,e,r,n){var i=O1e(t,r),a=Ri(i,3),s=a[0],l=a[1],u=a[2],h=P1e(t,l,e*s),f=s*u,d=t.createBuffer();t.bindBuffer(t.ARRAY_BUFFER,d),t.bufferData(t.ARRAY_BUFFER,e*f,t.DYNAMIC_DRAW),t.enableVertexAttribArray(n),l===t.FLOAT?t.vertexAttribPointer(n,s,l,!1,f,0):l===t.INT&&t.vertexAttribIPointer(n,s,l,f,0),t.vertexAttribDivisor(n,1),t.bindBuffer(t.ARRAY_BUFFER,null);for(var p=new Array(e),m=0;mL1e?(KJe(t),e.call(t,a)):(QJe(t),G1e(t,a,Jb.SCREEN)))}}{var r=t.matchCanvasSize;t.matchCanvasSize=function(a){r.call(t,a),t.pickingFrameBuffer.setFramebufferAttachmentSizes(t.canvasWidth,t.canvasHeight),t.pickingFrameBuffer.needsDraw=!0}}t.findNearestElements=function(a,s,l,u){return net(t,a,s)};{var n=t.invalidateCachedZSortedEles;t.invalidateCachedZSortedEles=function(){n.call(t),t.pickingFrameBuffer.needsDraw=!0}}{var i=t.notify;t.notify=function(a,s){i.call(t,a,s),a==="viewport"||a==="bounds"?t.pickingFrameBuffer.needsDraw=!0:a==="background"&&t.eleDrawing.invalidate(s,{type:"node-body"})}}}function KJe(t){var e=t.data.contexts[t.WEBGL];e.clear(e.COLOR_BUFFER_BIT|e.DEPTH_BUFFER_BIT)}function QJe(t){var e=o(function(n){n.save(),n.setTransform(1,0,0,1,0,0),n.clearRect(0,0,t.canvasWidth,t.canvasHeight),n.restore()},"clear");e(t.data.contexts[t.NODE]),e(t.data.contexts[t.DRAG])}function ZJe(t){var e=t.canvasWidth,r=t.canvasHeight,n=aF(t),i=n.pan,a=n.zoom,s=Zb();j6(s,s,[i.x,i.y]),sF(s,s,[a,a]);var l=Zb();GJe(l,e,r);var u=Zb();return zJe(u,l,s),u}function z1e(t,e){var r=t.canvasWidth,n=t.canvasHeight,i=aF(t),a=i.pan,s=i.zoom;e.setTransform(1,0,0,1,0,0),e.clearRect(0,0,r,n),e.translate(a.x,a.y),e.scale(s,s)}function JJe(t,e){t.drawSelectionRectangle(e,function(r){return z1e(t,r)})}function eet(t){var e=t.data.contexts[t.NODE];e.save(),z1e(t,e),e.strokeStyle="rgba(0, 0, 0, 0.3)",e.beginPath(),e.moveTo(-1e3,0),e.lineTo(1e3,0),e.stroke(),e.beginPath(),e.moveTo(0,-1e3),e.lineTo(0,1e3),e.stroke(),e.restore()}function tet(t){var e=o(function(i,a,s){for(var l=i.atlasManager.getRenderTypeOpts(a),u=t.data.contexts[t.NODE],h=.125,f=l.atlasCollection.atlases,d=0;d=0&&k.add(I)}return k}function net(t,e,r){var n=ret(t,e,r),i=t.getCachedZSortedEles(),a,s,l=vo(n),u;try{for(l.s();!(u=l.n()).done;){var h=u.value,f=i[h];if(!a&&f.isNode()&&(a=f),!s&&f.isEdge()&&(s=f),a&&s)break}}catch(d){l.e(d)}finally{l.f()}return[a,s].filter(Boolean)}function G1e(t,e,r){var n,i;t.webglDebug&&(i=[],n=performance.now());var a=t.eleDrawing,s=0;if(r.screen&&t.data.canvasNeedsRedraw[t.SELECT_BOX]&&JJe(t,e),t.data.canvasNeedsRedraw[t.NODE]||r.picking){var l=o(function(k,L){L+=1,k.isNode()?(a.drawTexture(k,L,"node-underlay"),a.drawTexture(k,L,"node-body"),a.drawTexture(k,L,"node-label"),a.drawTexture(k,L,"node-overlay")):(a.drawEdgeLine(k,L),a.drawEdgeArrow(k,L,"source"),a.drawEdgeArrow(k,L,"target"),a.drawTexture(k,L,"edge-label"))},"draw"),u=t.data.contexts[t.WEBGL];r.screen?(u.clearColor(0,0,0,0),u.enable(u.BLEND),u.blendFunc(u.ONE,u.ONE_MINUS_SRC_ALPHA)):u.disable(u.BLEND),u.clear(u.COLOR_BUFFER_BIT|u.DEPTH_BUFFER_BIT),u.viewport(0,0,u.canvas.width,u.canvas.height);var h=ZJe(t),f=t.getCachedZSortedEles();if(s=f.length,a.startFrame(h,i,r),r.screen){for(var d=0;d{"use strict";o(qi,"_typeof");o(Vf,"_classCallCheck");o($0e,"_defineProperties");o(Uf,"_createClass");o(ige,"_defineProperty$1");o(Ri,"_slicedToArray");o(age,"_toConsumableArray");o(lqe,"_arrayWithoutHoles");o(cqe,"_arrayWithHoles");o(uqe,"_iterableToArray");o(hqe,"_iterableToArrayLimit");o(PB,"_unsupportedIterableToArray");o(xB,"_arrayLikeToArray");o(fqe,"_nonIterableSpread");o(dqe,"_nonIterableRest");o(vo,"_createForOfIteratorHelper");Hi=typeof window>"u"?null:window,z0e=Hi?Hi.navigator:null;Hi&&Hi.document;pqe=qi(""),sge=qi({}),mqe=qi(function(){}),gqe=typeof HTMLElement>"u"?"undefined":qi(HTMLElement),h4=o(function(e){return e&&e.instanceString&&li(e.instanceString)?e.instanceString():null},"instanceStr"),Zt=o(function(e){return e!=null&&qi(e)==pqe},"string"),li=o(function(e){return e!=null&&qi(e)===mqe},"fn"),En=o(function(e){return!xo(e)&&(Array.isArray?Array.isArray(e):e!=null&&e instanceof Array)},"array"),Ur=o(function(e){return e!=null&&qi(e)===sge&&!En(e)&&e.constructor===Object},"plainObject"),yqe=o(function(e){return e!=null&&qi(e)===sge},"object"),_t=o(function(e){return e!=null&&qi(e)===qi(1)&&!isNaN(e)},"number"),vqe=o(function(e){return _t(e)&&Math.floor(e)===e},"integer"),F6=o(function(e){if(gqe!=="undefined")return e!=null&&e instanceof HTMLElement},"htmlElement"),xo=o(function(e){return f4(e)||oge(e)},"elementOrCollection"),f4=o(function(e){return h4(e)==="collection"&&e._private.single},"element"),oge=o(function(e){return h4(e)==="collection"&&!e._private.single},"collection"),BB=o(function(e){return h4(e)==="core"},"core"),lge=o(function(e){return h4(e)==="stylesheet"},"stylesheet"),xqe=o(function(e){return h4(e)==="event"},"event"),Pf=o(function(e){return e==null?!0:!!(e===""||e.match(/^\s+$/))},"emptyString"),bqe=o(function(e){return typeof HTMLElement>"u"?!1:e instanceof HTMLElement},"domElement"),Tqe=o(function(e){return Ur(e)&&_t(e.x1)&&_t(e.x2)&&_t(e.y1)&&_t(e.y2)},"boundingBox"),wqe=o(function(e){return yqe(e)&&li(e.then)},"promise"),kqe=o(function(){return z0e&&z0e.userAgent.match(/msie|trident|edge/i)},"ms"),e4=o(function(e,r){r||(r=o(function(){if(arguments.length===1)return arguments[0];if(arguments.length===0)return"undefined";for(var a=[],s=0;sr?1:0},"ascending"),Lqe=o(function(e,r){return-1*uge(e,r)},"descending"),ir=Object.assign!=null?Object.assign.bind(Object):function(t){for(var e=arguments,r=1;r1&&(v-=1),v<1/6?g+(y-g)*6*v:v<1/2?y:v<2/3?g+(y-g)*(2/3-v)*6:g}o(f,"hue2rgb");var d=new RegExp("^"+Cqe+"$").exec(e);if(d){if(n=parseInt(d[1]),n<0?n=(360- -1*n%360)%360:n>360&&(n=n%360),n/=360,i=parseFloat(d[2]),i<0||i>100||(i=i/100,a=parseFloat(d[3]),a<0||a>100)||(a=a/100,s=d[4],s!==void 0&&(s=parseFloat(s),s<0||s>1)))return;if(i===0)l=u=h=Math.round(a*255);else{var p=a<.5?a*(1+i):a+i-a*i,m=2*a-p;l=Math.round(255*f(m,p,n+1/3)),u=Math.round(255*f(m,p,n)),h=Math.round(255*f(m,p,n-1/3))}r=[l,u,h,s]}return r},"hsl2tuple"),Mqe=o(function(e){var r,n=new RegExp("^"+Eqe+"$").exec(e);if(n){r=[];for(var i=[],a=1;a<=3;a++){var s=n[a];if(s[s.length-1]==="%"&&(i[a]=!0),s=parseFloat(s),i[a]&&(s=s/100*255),s<0||s>255)return;r.push(Math.floor(s))}var l=i[1]||i[2]||i[3],u=i[1]&&i[2]&&i[3];if(l&&!u)return;var h=n[4];if(h!==void 0){if(h=parseFloat(h),h<0||h>1)return;r.push(h)}}return r},"rgb2tuple"),Iqe=o(function(e){return Oqe[e.toLowerCase()]},"colorname2tuple"),hge=o(function(e){return(En(e)?e:null)||Iqe(e)||Rqe(e)||Mqe(e)||Nqe(e)},"color2tuple"),Oqe={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]},fge=o(function(e){for(var r=e.map,n=e.keys,i=n.length,a=0;a1&&arguments[1]!==void 0?arguments[1]:X1,n=r,i;i=e.next(),!i.done;)n=n*yge+i.value|0;return n},"hashIterableInts"),t4=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:X1;return r*yge+e|0},"hashInt"),r4=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:qb;return(r<<5)+r+e|0},"hashIntAlt"),TYe=o(function(e,r){return e*2097152+r},"combineHashes"),Lf=o(function(e){return e[0]*2097152+e[1]},"combineHashesArray"),m6=o(function(e,r){return[t4(e[0],r[0]),r4(e[1],r[1])]},"hashArrays"),wYe=o(function(e,r){var n={value:0,done:!1},i=0,a=e.length,s={next:o(function(){return i=0&&!(e[i]===r&&(e.splice(i,1),n));i--);},"removeFromArray"),GB=o(function(e){e.splice(0,e.length)},"clearArray"),DYe=o(function(e,r){for(var n=0;n"u"?"undefined":qi(Set))!==RYe?Set:NYe,Z6=o(function(e,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(e===void 0||r===void 0||!BB(e)){oi("An element must have a core reference and parameters set");return}var i=r.group;if(i==null&&(r.data&&r.data.source!=null&&r.data.target!=null?i="edges":i="nodes"),i!=="nodes"&&i!=="edges"){oi("An element must be of type `nodes` or `edges`; you specified `"+i+"`");return}this.length=1,this[0]=this;var a=this._private={cy:e,single:!0,data:r.data||{},position:r.position||{x:0,y:0},autoWidth:void 0,autoHeight:void 0,autoPadding:void 0,compoundBoundsClean:!1,listeners:[],group:i,style:{},rstyle:{},styleCxts:[],styleKeys:{},removed:!0,selected:!!r.selected,selectable:r.selectable===void 0?!0:!!r.selectable,locked:!!r.locked,grabbed:!1,grabbable:r.grabbable===void 0?!0:!!r.grabbable,pannable:r.pannable===void 0?i==="edges":!!r.pannable,active:!1,classes:new ay,animation:{current:[],queue:[]},rscratch:{},scratch:r.scratch||{},edges:[],children:[],parent:r.parent&&r.parent.isNode()?r.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(a.position.x==null&&(a.position.x=0),a.position.y==null&&(a.position.y=0),r.renderedPosition){var s=r.renderedPosition,l=e.pan(),u=e.zoom();a.position={x:(s.x-l.x)/u,y:(s.y-l.y)/u}}var h=[];En(r.classes)?h=r.classes:Zt(r.classes)&&(h=r.classes.split(/\s+/));for(var f=0,d=h.length;fb?1:0},"defaultCmp"),f=o(function(x,b,T,S,w){var E;if(T==null&&(T=0),w==null&&(w=n),T<0)throw new Error("lo must be non-negative");for(S==null&&(S=x.length);TO;0<=O?D++:D--)C.push(D);return C}.apply(this).reverse(),_=[],S=0,w=E.length;SR;0<=R?++C:--C)k.push(s(x,T));return k},"nsmallest"),y=o(function(x,b,T,S){var w,E,_;for(S==null&&(S=n),w=x[T];T>b;){if(_=T-1>>1,E=x[_],S(w,E)<0){x[T]=E,T=_;continue}break}return x[T]=w},"_siftdown"),v=o(function(x,b,T){var S,w,E,_,C;for(T==null&&(T=n),w=x.length,C=b,E=x[b],S=2*b+1;S0;){var E=b.pop(),_=v(E),C=E.id();if(p[C]=_,_!==1/0)for(var D=E.neighborhood().intersect(g),O=0;O0)for(B.unshift(P);d[z];){var $=d[z];B.unshift($.edge),B.unshift($.node),F=$.node,z=F.id()}return l.spawn(B)},"pathTo")}},"dijkstra")},PYe={kruskal:o(function(e){e=e||function(T){return 1};for(var r=this.byGroup(),n=r.nodes,i=r.edges,a=n.length,s=new Array(a),l=n,u=o(function(S){for(var w=0;w0;){if(w(),_++,S===f){for(var C=[],D=a,O=f,R=x[O];C.unshift(D),R!=null&&C.unshift(R),D=v[O],D!=null;)O=D.id(),R=x[O];return{found:!0,distance:d[S],path:this.spawn(C),steps:_}}m[S]=!0;for(var k=T._private.edges,L=0;LR&&(g[O]=R,b[O]=D,T[O]=w),!a){var k=D*f+C;!a&&g[k]>R&&(g[k]=R,b[k]=C,T[k]=w)}}}for(var L=0;L1&&arguments[1]!==void 0?arguments[1]:s,ye=T(ae),Be=[],He=ye;;){if(He==null)return r.spawn();var ze=b(He),Le=ze.edge,Ie=ze.pred;if(Be.unshift(He[0]),He.same(Oe)&&Be.length>0)break;Le!=null&&Be.unshift(Le),He=Ie}return u.spawn(Be)},"pathTo"),E=0;E=0;f--){var d=h[f],p=d[1],m=d[2];(r[p]===l&&r[m]===u||r[p]===u&&r[m]===l)&&h.splice(f,1)}for(var g=0;gi;){var a=Math.floor(Math.random()*r.length);r=HYe(a,e,r),n--}return r},"contractUntil"),WYe={kargerStein:o(function(){var e=this,r=this.byGroup(),n=r.nodes,i=r.edges;i.unmergeBy(function(B){return B.isLoop()});var a=n.length,s=i.length,l=Math.ceil(Math.pow(Math.log(a)/Math.LN2,2)),u=Math.floor(a/UYe);if(a<2){oi("At least 2 nodes are required for Karger-Stein algorithm");return}for(var h=[],f=0;f1&&arguments[1]!==void 0?arguments[1]:0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,i=1/0,a=r;a1&&arguments[1]!==void 0?arguments[1]:0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,i=-1/0,a=r;a1&&arguments[1]!==void 0?arguments[1]:0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,i=0,a=0,s=r;s1&&arguments[1]!==void 0?arguments[1]:0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,a=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,s=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0;i?e=e.slice(r,n):(n0&&e.splice(0,r));for(var l=0,u=e.length-1;u>=0;u--){var h=e[u];s?isFinite(h)||(e[u]=-1/0,l++):e.splice(u,1)}a&&e.sort(function(p,m){return p-m});var f=e.length,d=Math.floor(f/2);return f%2!==0?e[d+1+l]:(e[d-1+l]+e[d+l])/2},"median"),QYe=o(function(e){return Math.PI*e/180},"deg2rad"),g6=o(function(e,r){return Math.atan2(r,e)-Math.PI/2},"getAngleFromDisp"),VB=Math.log2||function(t){return Math.log(t)/Math.log(2)},Sge=o(function(e){return e>0?1:e<0?-1:0},"signum"),Qp=o(function(e,r){return Math.sqrt(Wp(e,r))},"dist"),Wp=o(function(e,r){var n=r.x-e.x,i=r.y-e.y;return n*n+i*i},"sqdist"),ZYe=o(function(e){for(var r=e.length,n=0,i=0;i=e.x1&&e.y2>=e.y1)return{x1:e.x1,y1:e.y1,x2:e.x2,y2:e.y2,w:e.x2-e.x1,h:e.y2-e.y1};if(e.w!=null&&e.h!=null&&e.w>=0&&e.h>=0)return{x1:e.x1,y1:e.y1,x2:e.x1+e.w,y2:e.y1+e.h,w:e.w,h:e.h}}},"makeBoundingBox"),eXe=o(function(e){return{x1:e.x1,x2:e.x2,w:e.w,y1:e.y1,y2:e.y2,h:e.h}},"copyBoundingBox"),tXe=o(function(e){e.x1=1/0,e.y1=1/0,e.x2=-1/0,e.y2=-1/0,e.w=0,e.h=0},"clearBoundingBox"),rXe=o(function(e,r,n){return{x1:e.x1+r,x2:e.x2+r,y1:e.y1+n,y2:e.y2+n,w:e.w,h:e.h}},"shiftBoundingBox"),Cge=o(function(e,r){e.x1=Math.min(e.x1,r.x1),e.x2=Math.max(e.x2,r.x2),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,r.y1),e.y2=Math.max(e.y2,r.y2),e.h=e.y2-e.y1},"updateBoundingBox"),nXe=o(function(e,r,n){e.x1=Math.min(e.x1,r),e.x2=Math.max(e.x2,r),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,n),e.y2=Math.max(e.y2,n),e.h=e.y2-e.y1},"expandBoundingBoxByPoint"),D6=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return e.x1-=r,e.x2+=r,e.y1-=r,e.y2+=r,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},"expandBoundingBox"),L6=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[0],n,i,a,s;if(r.length===1)n=i=a=s=r[0];else if(r.length===2)n=a=r[0],s=i=r[1];else if(r.length===4){var l=Ri(r,4);n=l[0],i=l[1],a=l[2],s=l[3]}return e.x1-=s,e.x2+=i,e.y1-=n,e.y2+=a,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},"expandBoundingBoxSides"),X0e=o(function(e,r){e.x1=r.x1,e.y1=r.y1,e.x2=r.x2,e.y2=r.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1},"assignBoundingBox"),UB=o(function(e,r){return!(e.x1>r.x2||r.x1>e.x2||e.x2r.y2||r.y1>e.y2)},"boundingBoxesIntersect"),ry=o(function(e,r,n){return e.x1<=r&&r<=e.x2&&e.y1<=n&&n<=e.y2},"inBoundingBox"),iXe=o(function(e,r){return ry(e,r.x,r.y)},"pointInBoundingBox"),Age=o(function(e,r){return ry(e,r.x1,r.y1)&&ry(e,r.x2,r.y2)},"boundingBoxInBoundingBox"),_ge=o(function(e,r,n,i,a,s,l){var u=arguments.length>7&&arguments[7]!==void 0?arguments[7]:"auto",h=u==="auto"?Zp(a,s):u,f=a/2,d=s/2;h=Math.min(h,f,d);var p=h!==f,m=h!==d,g;if(p){var y=n-f+h-l,v=i-d-l,x=n+f-h+l,b=v;if(g=Mf(e,r,n,i,y,v,x,b,!1),g.length>0)return g}if(m){var T=n+f+l,S=i-d+h-l,w=T,E=i+d-h+l;if(g=Mf(e,r,n,i,T,S,w,E,!1),g.length>0)return g}if(p){var _=n-f+h-l,C=i+d+l,D=n+f-h+l,O=C;if(g=Mf(e,r,n,i,_,C,D,O,!1),g.length>0)return g}if(m){var R=n-f-l,k=i-d+h-l,L=R,A=i+d-h+l;if(g=Mf(e,r,n,i,R,k,L,A,!1),g.length>0)return g}var I;{var M=n-f+h,P=i-d+h;if(I=Yb(e,r,n,i,M,P,h+l),I.length>0&&I[0]<=M&&I[1]<=P)return[I[0],I[1]]}{var B=n+f-h,F=i-d+h;if(I=Yb(e,r,n,i,B,F,h+l),I.length>0&&I[0]>=B&&I[1]<=F)return[I[0],I[1]]}{var z=n+f-h,$=i+d-h;if(I=Yb(e,r,n,i,z,$,h+l),I.length>0&&I[0]>=z&&I[1]>=$)return[I[0],I[1]]}{var U=n-f+h,K=i+d-h;if(I=Yb(e,r,n,i,U,K,h+l),I.length>0&&I[0]<=U&&I[1]>=K)return[I[0],I[1]]}return[]},"roundRectangleIntersectLine"),aXe=o(function(e,r,n,i,a,s,l){var u=l,h=Math.min(n,a),f=Math.max(n,a),d=Math.min(i,s),p=Math.max(i,s);return h-u<=e&&e<=f+u&&d-u<=r&&r<=p+u},"inLineVicinity"),sXe=o(function(e,r,n,i,a,s,l,u,h){var f={x1:Math.min(n,l,a)-h,x2:Math.max(n,l,a)+h,y1:Math.min(i,u,s)-h,y2:Math.max(i,u,s)+h};return!(ef.x2||rf.y2)},"inBezierVicinity"),oXe=o(function(e,r,n,i){n-=i;var a=r*r-4*e*n;if(a<0)return[];var s=Math.sqrt(a),l=2*e,u=(-r+s)/l,h=(-r-s)/l;return[u,h]},"solveQuadratic"),lXe=o(function(e,r,n,i,a){var s=1e-5;e===0&&(e=s),r/=e,n/=e,i/=e;var l,u,h,f,d,p,m,g;if(u=(3*n-r*r)/9,h=-(27*i)+r*(9*n-2*(r*r)),h/=54,l=u*u*u+h*h,a[1]=0,m=r/3,l>0){d=h+Math.sqrt(l),d=d<0?-Math.pow(-d,1/3):Math.pow(d,1/3),p=h-Math.sqrt(l),p=p<0?-Math.pow(-p,1/3):Math.pow(p,1/3),a[0]=-m+d+p,m+=(d+p)/2,a[4]=a[2]=-m,m=Math.sqrt(3)*(-p+d)/2,a[3]=m,a[5]=-m;return}if(a[5]=a[3]=0,l===0){g=h<0?-Math.pow(-h,1/3):Math.pow(h,1/3),a[0]=-m+2*g,a[4]=a[2]=-(g+m);return}u=-u,f=u*u*u,f=Math.acos(h/Math.sqrt(f)),g=2*Math.sqrt(u),a[0]=-m+g*Math.cos(f/3),a[2]=-m+g*Math.cos((f+2*Math.PI)/3),a[4]=-m+g*Math.cos((f+4*Math.PI)/3)},"solveCubic"),cXe=o(function(e,r,n,i,a,s,l,u){var h=1*n*n-4*n*a+2*n*l+4*a*a-4*a*l+l*l+i*i-4*i*s+2*i*u+4*s*s-4*s*u+u*u,f=1*9*n*a-3*n*n-3*n*l-6*a*a+3*a*l+9*i*s-3*i*i-3*i*u-6*s*s+3*s*u,d=1*3*n*n-6*n*a+n*l-n*e+2*a*a+2*a*e-l*e+3*i*i-6*i*s+i*u-i*r+2*s*s+2*s*r-u*r,p=1*n*a-n*n+n*e-a*e+i*s-i*i+i*r-s*r,m=[];lXe(h,f,d,p,m);for(var g=1e-7,y=[],v=0;v<6;v+=2)Math.abs(m[v+1])=0&&m[v]<=1&&y.push(m[v]);y.push(1),y.push(0);for(var x=-1,b,T,S,w=0;w=0?Sh?(e-a)*(e-a)+(r-s)*(r-s):f-p},"sqdistToFiniteLine"),qs=o(function(e,r,n){for(var i,a,s,l,u,h=0,f=0;f=e&&e>=s||i<=e&&e<=s)u=(e-i)/(s-i)*(l-a)+a,u>r&&h++;else continue;return h%2!==0},"pointInsidePolygonPoints"),ih=o(function(e,r,n,i,a,s,l,u,h){var f=new Array(n.length),d;u[0]!=null?(d=Math.atan(u[1]/u[0]),u[0]<0?d=d+Math.PI/2:d=-d-Math.PI/2):d=u;for(var p=Math.cos(-d),m=Math.sin(-d),g=0;g0){var v=V6(f,-h);y=G6(v)}else y=f;return qs(e,r,y)},"pointInsidePolygon"),hXe=o(function(e,r,n,i,a,s,l,u){for(var h=new Array(n.length*2),f=0;f=0&&v<=1&&b.push(v),x>=0&&x<=1&&b.push(x),b.length===0)return[];var T=b[0]*u[0]+e,S=b[0]*u[1]+r;if(b.length>1){if(b[0]==b[1])return[T,S];var w=b[1]*u[0]+e,E=b[1]*u[1]+r;return[T,S,w,E]}else return[T,S]},"intersectLineCircle"),sB=o(function(e,r,n){return r<=e&&e<=n||n<=e&&e<=r?e:e<=r&&r<=n||n<=r&&r<=e?r:n},"midOfThree"),Mf=o(function(e,r,n,i,a,s,l,u,h){var f=e-a,d=n-e,p=l-a,m=r-s,g=i-r,y=u-s,v=p*m-y*f,x=d*m-g*f,b=y*d-p*g;if(b!==0){var T=v/b,S=x/b,w=.001,E=0-w,_=1+w;return E<=T&&T<=_&&E<=S&&S<=_?[e+T*d,r+T*g]:h?[e+T*d,r+T*g]:[]}else return v===0||x===0?sB(e,n,l)===l?[l,u]:sB(e,n,a)===a?[a,s]:sB(a,l,n)===n?[n,i]:[]:[]},"finiteLinesIntersect"),a4=o(function(e,r,n,i,a,s,l,u){var h=[],f,d=new Array(n.length),p=!0;s==null&&(p=!1);var m;if(p){for(var g=0;g0){var y=V6(d,-u);m=G6(y)}else m=d}else m=n;for(var v,x,b,T,S=0;S2){for(var g=[f[0],f[1]],y=Math.pow(g[0]-e,2)+Math.pow(g[1]-r,2),v=1;vf&&(f=S)},"set"),get:o(function(T){return h[T]},"get")},p=0;p0?M=I.edgesTo(A)[0]:M=A.edgesTo(I)[0];var P=i(M);A=A.id(),C[A]>C[k]+P&&(C[A]=C[k]+P,D.nodes.indexOf(A)<0?D.push(A):D.updateItem(A),_[A]=0,E[A]=[]),C[A]==C[k]+P&&(_[A]=_[A]+_[k],E[A].push(k))}else for(var B=0;B0;){for(var U=w.pop(),K=0;K0&&l.push(n[u]);l.length!==0&&a.push(i.collection(l))}return a},"assign"),AXe=o(function(e,r){for(var n=0;n5&&arguments[5]!==void 0?arguments[5]:LXe,l=i,u,h,f=0;f=2?$b(e,r,n,0,J0e,RXe):$b(e,r,n,0,Z0e)},"euclidean"),squaredEuclidean:o(function(e,r,n){return $b(e,r,n,0,J0e)},"squaredEuclidean"),manhattan:o(function(e,r,n){return $b(e,r,n,0,Z0e)},"manhattan"),max:o(function(e,r,n){return $b(e,r,n,-1/0,NXe)},"max")};ny["squared-euclidean"]=ny.squaredEuclidean;ny.squaredeuclidean=ny.squaredEuclidean;o(eC,"clusteringDistance");MXe=oa({k:2,m:2,sensitivityThreshold:1e-4,distance:"euclidean",maxIterations:10,attributes:[],testMode:!1,testCentroids:null}),WB=o(function(e){return MXe(e)},"setOptions"),U6=o(function(e,r,n,i,a){var s=a!=="kMedoids",l=s?function(d){return n[d]}:function(d){return i[d](n)},u=o(function(p){return i[p](r)},"getQ"),h=n,f=r;return eC(e,i.length,l,u,h,f)},"getDist"),oB=o(function(e,r,n){for(var i=n.length,a=new Array(i),s=new Array(i),l=new Array(r),u=null,h=0;hn)return!1}return!0},"haveMatricesConverged"),PXe=o(function(e,r,n){for(var i=0;il&&(l=r[h][f],u=f);a[u].push(e[h])}for(var d=0;d=a.threshold||a.mode==="dendrogram"&&e.length===1)return!1;var g=r[s],y=r[i[s]],v;a.mode==="dendrogram"?v={left:g,right:y,key:g.key}:v={value:g.value.concat(y.value),key:g.key},e[g.index]=v,e.splice(y.index,1),r[g.key]=v;for(var x=0;xn[y.key][b.key]&&(u=n[y.key][b.key])):a.linkage==="max"?(u=n[g.key][b.key],n[g.key][b.key]0&&i.push(a);return i},"findExemplars"),ame=o(function(e,r,n){for(var i=[],a=0;al&&(s=h,l=r[a*e+h])}s>0&&i.push(s)}for(var f=0;fh&&(u=f,h=d)}n[a]=s[u]}return i=ame(e,r,n),i},"assign"),sme=o(function(e){for(var r=this.cy(),n=this.nodes(),i=KXe(e),a={},s=0;s=R?(k=R,R=A,L=I):A>k&&(k=A);for(var M=0;M0?1:0;_[D%i.minIterations*l+U]=K,$+=K}if($>0&&(D>=i.minIterations-1||D==i.maxIterations-1)){for(var ee=0,Y=0;Y1||E>1)&&(l=!0),d[T]=[],b.outgoers().forEach(function(C){C.isEdge()&&d[T].push(C.id())})}else p[T]=[void 0,b.target().id()]}):s.forEach(function(b){var T=b.id();if(b.isNode()){var S=b.degree(!0);S%2&&(u?h?l=!0:h=T:u=T),d[T]=[],b.connectedEdges().forEach(function(w){return d[T].push(w.id())})}else p[T]=[b.source().id(),b.target().id()]});var m={found:!1,trail:void 0};if(l)return m;if(h&&u)if(a){if(f&&h!=f)return m;f=h}else{if(f&&h!=f&&u!=f)return m;f||(f=h)}else f||(f=s[0].id());var g=o(function(T){for(var S=T,w=[T],E,_,C;d[S].length;)E=d[S].shift(),_=p[E][0],C=p[E][1],S!=C?(d[C]=d[C].filter(function(D){return D!=E}),S=C):!a&&S!=_&&(d[_]=d[_].filter(function(D){return D!=E}),S=_),w.unshift(E),w.unshift(S);return w},"walk"),y=[],v=[];for(v=g(f);v.length!=1;)d[v[0]].length==0?(y.unshift(s.getElementById(v.shift())),y.unshift(s.getElementById(v.shift()))):v=g(v.shift()).concat(v);y.unshift(s.getElementById(v.shift()));for(var x in d)if(d[x].length)return m;return m.found=!0,m.trail=this.spawn(y,!0),m},"hierholzer")},x6=o(function(){var e=this,r={},n=0,i=0,a=[],s=[],l={},u=o(function(p,m){for(var g=s.length-1,y=[],v=e.spawn();s[g].x!=p||s[g].y!=m;)y.push(s.pop().edge),g--;y.push(s.pop().edge),y.forEach(function(x){var b=x.connectedNodes().intersection(e);v.merge(x),b.forEach(function(T){var S=T.id(),w=T.connectedEdges().intersection(e);v.merge(T),r[S].cutVertex?v.merge(w.filter(function(E){return E.isLoop()})):v.merge(w)})}),a.push(v)},"buildComponent"),h=o(function d(p,m,g){p===g&&(i+=1),r[m]={id:n,low:n++,cutVertex:!1};var y=e.getElementById(m).connectedEdges().intersection(e);if(y.size()===0)a.push(e.spawn(e.getElementById(m)));else{var v,x,b,T;y.forEach(function(S){v=S.source().id(),x=S.target().id(),b=v===m?x:v,b!==g&&(T=S.id(),l[T]||(l[T]=!0,s.push({x:m,y:b,edge:S})),b in r?r[m].low=Math.min(r[m].low,r[b].id):(d(p,b,m),r[m].low=Math.min(r[m].low,r[b].low),r[m].id<=r[b].low&&(r[m].cutVertex=!0,u(m,b))))})}},"biconnectedSearch");e.forEach(function(d){if(d.isNode()){var p=d.id();p in r||(i=0,h(p,p),r[p].cutVertex=i>1)}});var f=Object.keys(r).filter(function(d){return r[d].cutVertex}).map(function(d){return e.getElementById(d)});return{cut:e.spawn(f),components:a}},"hopcroftTarjanBiconnected"),ije={hopcroftTarjanBiconnected:x6,htbc:x6,htb:x6,hopcroftTarjanBiconnectedComponents:x6},b6=o(function(){var e=this,r={},n=0,i=[],a=[],s=e.spawn(e),l=o(function u(h){a.push(h),r[h]={index:n,low:n++,explored:!1};var f=e.getElementById(h).connectedEdges().intersection(e);if(f.forEach(function(y){var v=y.target().id();v!==h&&(v in r||u(v),r[v].explored||(r[h].low=Math.min(r[h].low,r[v].low)))}),r[h].index===r[h].low){for(var d=e.spawn();;){var p=a.pop();if(d.merge(e.getElementById(p)),r[p].low=r[h].index,r[p].explored=!0,p===h)break}var m=d.edgesWith(d),g=d.merge(m);i.push(g),s=s.difference(g)}},"stronglyConnectedSearch");return e.forEach(function(u){if(u.isNode()){var h=u.id();h in r||l(h)}}),{cut:s,components:i}},"tarjanStronglyConnected"),aje={tarjanStronglyConnected:b6,tsc:b6,tscc:b6,tarjanStronglyConnectedComponents:b6},Oge={};[n4,OYe,PYe,FYe,zYe,VYe,WYe,gXe,Z1,J1,wB,DXe,VXe,XXe,tje,nje,ije,aje].forEach(function(t){ir(Oge,t)});Pge=0,Bge=1,Fge=2,ah=o(function t(e){if(!(this instanceof t))return new t(e);this.id="Thenable/1.0.7",this.state=Pge,this.fulfillValue=void 0,this.rejectReason=void 0,this.onFulfilled=[],this.onRejected=[],this.proxy={then:this.then.bind(this)},typeof e=="function"&&e.call(this,this.fulfill.bind(this),this.reject.bind(this))},"api");ah.prototype={fulfill:o(function(e){return ome(this,Bge,"fulfillValue",e)},"fulfill"),reject:o(function(e){return ome(this,Fge,"rejectReason",e)},"reject"),then:o(function(e,r){var n=this,i=new ah;return n.onFulfilled.push(cme(e,i,"fulfill")),n.onRejected.push(cme(r,i,"reject")),$ge(n),i.proxy},"then")};ome=o(function(e,r,n,i){return e.state===Pge&&(e.state=r,e[n]=i,$ge(e)),e},"deliver"),$ge=o(function(e){e.state===Bge?lme(e,"onFulfilled",e.fulfillValue):e.state===Fge&&lme(e,"onRejected",e.rejectReason)},"execute"),lme=o(function(e,r,n){if(e[r].length!==0){var i=e[r];e[r]=[];var a=o(function(){for(var l=0;l0},"animatedImpl")},"animated"),clearQueue:o(function(){return o(function(){var r=this,n=r.length!==void 0,i=n?r:[r],a=this._private.cy||this;if(!a.styleEnabled())return this;for(var s=0;s0&&this.spawn(i).updateStyle().emit("class"),r},"classes"),addClass:o(function(e){return this.toggleClass(e,!0)},"addClass"),hasClass:o(function(e){var r=this[0];return r!=null&&r._private.classes.has(e)},"hasClass"),toggleClass:o(function(e,r){En(e)||(e=e.match(/\S+/g)||[]);for(var n=this,i=r===void 0,a=[],s=0,l=n.length;s0&&this.spawn(a).updateStyle().emit("class"),n},"toggleClass"),removeClass:o(function(e){return this.toggleClass(e,!1)},"removeClass"),flashClass:o(function(e,r){var n=this;if(r==null)r=250;else if(r===0)return n;return n.addClass(e),setTimeout(function(){n.removeClass(e)},r),n},"flashClass")};R6.className=R6.classNames=R6.classes;Vr={metaChar:"[\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]",comparatorOp:"=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=",boolOp:"\\?|\\!|\\^",string:`"(?:\\\\"|[^"])*"|'(?:\\\\'|[^'])*'`,number:Wi,meta:"degree|indegree|outdegree",separator:"\\s*,\\s*",descendant:"\\s+",child:"\\s+>\\s+",subject:"\\$",group:"node|edge|\\*",directedEdge:"\\s+->\\s+",undirectedEdge:"\\s+<->\\s+"};Vr.variable="(?:[\\w-.]|(?:\\\\"+Vr.metaChar+"))+";Vr.className="(?:[\\w-]|(?:\\\\"+Vr.metaChar+"))+";Vr.value=Vr.string+"|"+Vr.number;Vr.id=Vr.variable;(function(){var t,e,r;for(t=Vr.comparatorOp.split("|"),r=0;r=0)&&e!=="="&&(Vr.comparatorOp+="|\\!"+e)})();gn=o(function(){return{checks:[]}},"newQuery"),$t={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},EB=[{selector:":selected",matches:o(function(e){return e.selected()},"matches")},{selector:":unselected",matches:o(function(e){return!e.selected()},"matches")},{selector:":selectable",matches:o(function(e){return e.selectable()},"matches")},{selector:":unselectable",matches:o(function(e){return!e.selectable()},"matches")},{selector:":locked",matches:o(function(e){return e.locked()},"matches")},{selector:":unlocked",matches:o(function(e){return!e.locked()},"matches")},{selector:":visible",matches:o(function(e){return e.visible()},"matches")},{selector:":hidden",matches:o(function(e){return!e.visible()},"matches")},{selector:":transparent",matches:o(function(e){return e.transparent()},"matches")},{selector:":grabbed",matches:o(function(e){return e.grabbed()},"matches")},{selector:":free",matches:o(function(e){return!e.grabbed()},"matches")},{selector:":removed",matches:o(function(e){return e.removed()},"matches")},{selector:":inside",matches:o(function(e){return!e.removed()},"matches")},{selector:":grabbable",matches:o(function(e){return e.grabbable()},"matches")},{selector:":ungrabbable",matches:o(function(e){return!e.grabbable()},"matches")},{selector:":animated",matches:o(function(e){return e.animated()},"matches")},{selector:":unanimated",matches:o(function(e){return!e.animated()},"matches")},{selector:":parent",matches:o(function(e){return e.isParent()},"matches")},{selector:":childless",matches:o(function(e){return e.isChildless()},"matches")},{selector:":child",matches:o(function(e){return e.isChild()},"matches")},{selector:":orphan",matches:o(function(e){return e.isOrphan()},"matches")},{selector:":nonorphan",matches:o(function(e){return e.isChild()},"matches")},{selector:":compound",matches:o(function(e){return e.isNode()?e.isParent():e.source().isParent()||e.target().isParent()},"matches")},{selector:":loop",matches:o(function(e){return e.isLoop()},"matches")},{selector:":simple",matches:o(function(e){return e.isSimple()},"matches")},{selector:":active",matches:o(function(e){return e.active()},"matches")},{selector:":inactive",matches:o(function(e){return!e.active()},"matches")},{selector:":backgrounding",matches:o(function(e){return e.backgrounding()},"matches")},{selector:":nonbackgrounding",matches:o(function(e){return!e.backgrounding()},"matches")}].sort(function(t,e){return Lqe(t.selector,e.selector)}),vQe=function(){for(var t={},e,r=0;r0&&f.edgeCount>0)return hn("The selector `"+e+"` is invalid because it uses both a compound selector and an edge selector"),!1;if(f.edgeCount>1)return hn("The selector `"+e+"` is invalid because it uses multiple edge selectors"),!1;f.edgeCount===1&&hn("The selector `"+e+"` 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},"parse"),EQe=o(function(){if(this.toStringCache!=null)return this.toStringCache;for(var e=o(function(f){return f??""},"clean"),r=o(function(f){return Zt(f)?'"'+f+'"':e(f)},"cleanVal"),n=o(function(f){return" "+f+" "},"space"),i=o(function(f,d){var p=f.type,m=f.value;switch(p){case $t.GROUP:{var g=e(m);return g.substring(0,g.length-1)}case $t.DATA_COMPARE:{var y=f.field,v=f.operator;return"["+y+n(e(v))+r(m)+"]"}case $t.DATA_BOOL:{var x=f.operator,b=f.field;return"["+e(x)+b+"]"}case $t.DATA_EXIST:{var T=f.field;return"["+T+"]"}case $t.META_COMPARE:{var S=f.operator,w=f.field;return"[["+w+n(e(S))+r(m)+"]]"}case $t.STATE:return m;case $t.ID:return"#"+m;case $t.CLASS:return"."+m;case $t.PARENT:case $t.CHILD:return a(f.parent,d)+n(">")+a(f.child,d);case $t.ANCESTOR:case $t.DESCENDANT:return a(f.ancestor,d)+" "+a(f.descendant,d);case $t.COMPOUND_SPLIT:{var E=a(f.left,d),_=a(f.subject,d),C=a(f.right,d);return E+(E.length>0?" ":"")+_+C}case $t.TRUE:return""}},"checkToString"),a=o(function(f,d){return f.checks.reduce(function(p,m,g){return p+(d===f&&g===0?"$":"")+i(m,d)},"")},"queryToString"),s="",l=0;l1&&l=0&&(r=r.replace("!",""),d=!0),r.indexOf("@")>=0&&(r=r.replace("@",""),f=!0),(a||l||f)&&(u=!a&&!s?"":""+e,h=""+n),f&&(e=u=u.toLowerCase(),n=h=h.toLowerCase()),r){case"*=":i=u.indexOf(h)>=0;break;case"$=":i=u.indexOf(h,u.length-h.length)>=0;break;case"^=":i=u.indexOf(h)===0;break;case"=":i=e===n;break;case">":p=!0,i=e>n;break;case">=":p=!0,i=e>=n;break;case"<":p=!0,i=e1&&arguments[1]!==void 0?arguments[1]:!0;return KB(this,t,e,Xge)};o(jge,"addParent");iy.forEachUp=function(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return KB(this,t,e,jge)};o(NQe,"addParentAndChildren");iy.forEachUpAndDown=function(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return KB(this,t,e,NQe)};iy.ancestors=iy.parents;o4=Kge={data:un.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:un.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),scratch:un.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:un.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),rscratch:un.data({field:"rscratch",allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!0}),removeRscratch:un.removeData({field:"rscratch",triggerEvent:!1}),id:o(function(){var e=this[0];if(e)return e._private.data.id},"id")};o4.attr=o4.data;o4.removeAttr=o4.removeData;MQe=Kge,iC={};o(cB,"defineDegreeFunction");ir(iC,{degree:cB(function(t,e){return e.source().same(e.target())?2:1}),indegree:cB(function(t,e){return e.target().same(t)?1:0}),outdegree:cB(function(t,e){return e.source().same(t)?1:0})});o(H1,"defineDegreeBoundsFunction");ir(iC,{minDegree:H1("degree",function(t,e){return te}),minIndegree:H1("indegree",function(t,e){return te}),minOutdegree:H1("outdegree",function(t,e){return te})});ir(iC,{totalDegree:o(function(e){for(var r=0,n=this.nodes(),i=0;i0,p=d;d&&(f=f[0]);var m=p?f.position():{x:0,y:0};r!==void 0?h.position(e,r+m[e]):a!==void 0&&h.position({x:a.x+m.x,y:a.y+m.y})}else{var g=n.position(),y=l?n.parent():null,v=y&&y.length>0,x=v;v&&(y=y[0]);var b=x?y.position():{x:0,y:0};return a={x:g.x-b.x,y:g.y-b.y},e===void 0?a:a[e]}else if(!s)return;return this},"relativePosition")};ql.modelPosition=ql.point=ql.position;ql.modelPositions=ql.points=ql.positions;ql.renderedPoint=ql.renderedPosition;ql.relativePoint=ql.relativePosition;IQe=Qge;ey=Hf={};Hf.renderedBoundingBox=function(t){var e=this.boundingBox(t),r=this.cy(),n=r.zoom(),i=r.pan(),a=e.x1*n+i.x,s=e.x2*n+i.x,l=e.y1*n+i.y,u=e.y2*n+i.y;return{x1:a,x2:s,y1:l,y2:u,w:s-a,h:u-l}};Hf.dirtyCompoundBoundsCache=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,e=this.cy();return!e.styleEnabled()||!e.hasCompoundNodes()?this:(this.forEachUp(function(r){if(r.isParent()){var n=r._private;n.compoundBoundsClean=!1,n.bbCache=null,t||r.emitAndNotify("bounds")}}),this)};Hf.updateCompoundBounds=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,e=this.cy();if(!e.styleEnabled()||!e.hasCompoundNodes())return this;if(!t&&e.batching())return this;function r(s){if(!s.isParent())return;var l=s._private,u=s.children(),h=s.pstyle("compound-sizing-wrt-labels").value==="include",f={width:{val:s.pstyle("min-width").pfValue,left:s.pstyle("min-width-bias-left"),right:s.pstyle("min-width-bias-right")},height:{val:s.pstyle("min-height").pfValue,top:s.pstyle("min-height-bias-top"),bottom:s.pstyle("min-height-bias-bottom")}},d=u.boundingBox({includeLabels:h,includeOverlays:!1,useCache:!1}),p=l.position;(d.w===0||d.h===0)&&(d={w:s.pstyle("width").pfValue,h:s.pstyle("height").pfValue},d.x1=p.x-d.w/2,d.x2=p.x+d.w/2,d.y1=p.y-d.h/2,d.y2=p.y+d.h/2);function m(D,O,R){var k=0,L=0,A=O+R;return D>0&&A>0&&(k=O/A*D,L=R/A*D),{biasDiff:k,biasComplementDiff:L}}o(m,"computeBiasValues");function g(D,O,R,k){if(R.units==="%")switch(k){case"width":return D>0?R.pfValue*D:0;case"height":return O>0?R.pfValue*O:0;case"average":return D>0&&O>0?R.pfValue*(D+O)/2:0;case"min":return D>0&&O>0?D>O?R.pfValue*O:R.pfValue*D:0;case"max":return D>0&&O>0?D>O?R.pfValue*D:R.pfValue*O:0;default:return 0}else return R.units==="px"?R.pfValue:0}o(g,"computePaddingValues");var y=f.width.left.value;f.width.left.units==="px"&&f.width.val>0&&(y=y*100/f.width.val);var v=f.width.right.value;f.width.right.units==="px"&&f.width.val>0&&(v=v*100/f.width.val);var x=f.height.top.value;f.height.top.units==="px"&&f.height.val>0&&(x=x*100/f.height.val);var b=f.height.bottom.value;f.height.bottom.units==="px"&&f.height.val>0&&(b=b*100/f.height.val);var T=m(f.width.val-d.w,y,v),S=T.biasDiff,w=T.biasComplementDiff,E=m(f.height.val-d.h,x,b),_=E.biasDiff,C=E.biasComplementDiff;l.autoPadding=g(d.w,d.h,s.pstyle("padding"),s.pstyle("padding-relative-to").value),l.autoWidth=Math.max(d.w,f.width.val),p.x=(-S+d.x1+d.x2+w)/2,l.autoHeight=Math.max(d.h,f.height.val),p.y=(-_+d.y1+d.y2+C)/2}o(r,"update");for(var n=0;ne.x2?i:e.x2,e.y1=ne.y2?a:e.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1)},"updateBounds"),qp=o(function(e,r){return r==null?e:Hl(e,r.x1,r.y1,r.x2,r.y2)},"updateBoundsFromBox"),zb=o(function(e,r,n){return Wl(e,r,n)},"prefixedProperty"),T6=o(function(e,r,n){if(!r.cy().headless()){var i=r._private,a=i.rstyle,s=a.arrowWidth/2,l=r.pstyle(n+"-arrow-shape").value,u,h;if(l!=="none"){n==="source"?(u=a.srcX,h=a.srcY):n==="target"?(u=a.tgtX,h=a.tgtY):(u=a.midX,h=a.midY);var f=i.arrowBounds=i.arrowBounds||{},d=f[n]=f[n]||{};d.x1=u-s,d.y1=h-s,d.x2=u+s,d.y2=h+s,d.w=d.x2-d.x1,d.h=d.y2-d.y1,D6(d,1),Hl(e,d.x1,d.y1,d.x2,d.y2)}}},"updateBoundsFromArrow"),uB=o(function(e,r,n){if(!r.cy().headless()){var i;n?i=n+"-":i="";var a=r._private,s=a.rstyle,l=r.pstyle(i+"label").strValue;if(l){var u=r.pstyle("text-halign"),h=r.pstyle("text-valign"),f=zb(s,"labelWidth",n),d=zb(s,"labelHeight",n),p=zb(s,"labelX",n),m=zb(s,"labelY",n),g=r.pstyle(i+"text-margin-x").pfValue,y=r.pstyle(i+"text-margin-y").pfValue,v=r.isEdge(),x=r.pstyle(i+"text-rotation"),b=r.pstyle("text-outline-width").pfValue,T=r.pstyle("text-border-width").pfValue,S=T/2,w=r.pstyle("text-background-padding").pfValue,E=2,_=d,C=f,D=C/2,O=_/2,R,k,L,A;if(v)R=p-D,k=p+D,L=m-O,A=m+O;else{switch(u.value){case"left":R=p-C,k=p;break;case"center":R=p-D,k=p+D;break;case"right":R=p,k=p+C;break}switch(h.value){case"top":L=m-_,A=m;break;case"center":L=m-O,A=m+O;break;case"bottom":L=m,A=m+_;break}}var I=g-Math.max(b,S)-w-E,M=g+Math.max(b,S)+w+E,P=y-Math.max(b,S)-w-E,B=y+Math.max(b,S)+w+E;R+=I,k+=M,L+=P,A+=B;var F=n||"main",z=a.labelBounds,$=z[F]=z[F]||{};$.x1=R,$.y1=L,$.x2=k,$.y2=A,$.w=k-R,$.h=A-L,$.leftPad=I,$.rightPad=M,$.topPad=P,$.botPad=B;var U=v&&x.strValue==="autorotate",K=x.pfValue!=null&&x.pfValue!==0;if(U||K){var ee=U?zb(a.rstyle,"labelAngle",n):x.pfValue,Y=Math.cos(ee),ce=Math.sin(ee),Z=(R+k)/2,ue=(L+A)/2;if(!v){switch(u.value){case"left":Z=k;break;case"right":Z=R;break}switch(h.value){case"top":ue=A;break;case"bottom":ue=L;break}}var Q=o(function(se,ae){return se=se-Z,ae=ae-ue,{x:se*Y-ae*ce+Z,y:se*ce+ae*Y+ue}},"rotate"),j=Q(R,L),ne=Q(R,A),te=Q(k,L),he=Q(k,A);R=Math.min(j.x,ne.x,te.x,he.x),k=Math.max(j.x,ne.x,te.x,he.x),L=Math.min(j.y,ne.y,te.y,he.y),A=Math.max(j.y,ne.y,te.y,he.y)}var le=F+"Rot",J=z[le]=z[le]||{};J.x1=R,J.y1=L,J.x2=k,J.y2=A,J.w=k-R,J.h=A-L,Hl(e,R,L,k,A),Hl(a.labelBounds.all,R,L,k,A)}return e}},"updateBoundsFromLabel"),OQe=o(function(e,r){if(!r.cy().headless()){var n=r.pstyle("outline-opacity").value,i=r.pstyle("outline-width").value;if(n>0&&i>0){var a=r.pstyle("outline-offset").value,s=r.pstyle("shape").value,l=i+a,u=(e.w+l*2)/e.w,h=(e.h+l*2)/e.h,f=0,d=0;["diamond","pentagon","round-triangle"].includes(s)?(u=(e.w+l*2.4)/e.w,d=-l/3.6):["concave-hexagon","rhomboid","right-rhomboid"].includes(s)?u=(e.w+l*2.4)/e.w:s==="star"?(u=(e.w+l*2.8)/e.w,h=(e.h+l*2.6)/e.h,d=-l/3.8):s==="triangle"?(u=(e.w+l*2.8)/e.w,h=(e.h+l*2.4)/e.h,d=-l/1.4):s==="vee"&&(u=(e.w+l*4.4)/e.w,h=(e.h+l*3.8)/e.h,d=-l*.5);var p=e.h*h-e.h,m=e.w*u-e.w;if(L6(e,[Math.ceil(p/2),Math.ceil(m/2)]),f!=0||d!==0){var g=rXe(e,f,d);Cge(e,g)}}}},"updateBoundsFromOutline"),PQe=o(function(e,r){var n=e._private.cy,i=n.styleEnabled(),a=n.headless(),s=Ys(),l=e._private,u=e.isNode(),h=e.isEdge(),f,d,p,m,g,y,v=l.rstyle,x=u&&i?e.pstyle("bounds-expansion").pfValue:[0],b=o(function(Se){return Se.pstyle("display").value!=="none"},"isDisplayed"),T=!i||b(e)&&(!h||b(e.source())&&b(e.target()));if(T){var S=0,w=0;i&&r.includeOverlays&&(S=e.pstyle("overlay-opacity").value,S!==0&&(w=e.pstyle("overlay-padding").value));var E=0,_=0;i&&r.includeUnderlays&&(E=e.pstyle("underlay-opacity").value,E!==0&&(_=e.pstyle("underlay-padding").value));var C=Math.max(w,_),D=0,O=0;if(i&&(D=e.pstyle("width").pfValue,O=D/2),u&&r.includeNodes){var R=e.position();g=R.x,y=R.y;var k=e.outerWidth(),L=k/2,A=e.outerHeight(),I=A/2;f=g-L,d=g+L,p=y-I,m=y+I,Hl(s,f,p,d,m),i&&r.includeOutlines&&OQe(s,e)}else if(h&&r.includeEdges)if(i&&!a){var M=e.pstyle("curve-style").strValue;if(f=Math.min(v.srcX,v.midX,v.tgtX),d=Math.max(v.srcX,v.midX,v.tgtX),p=Math.min(v.srcY,v.midY,v.tgtY),m=Math.max(v.srcY,v.midY,v.tgtY),f-=O,d+=O,p-=O,m+=O,Hl(s,f,p,d,m),M==="haystack"){var P=v.haystackPts;if(P&&P.length===2){if(f=P[0].x,p=P[0].y,d=P[1].x,m=P[1].y,f>d){var B=f;f=d,d=B}if(p>m){var F=p;p=m,m=F}Hl(s,f-O,p-O,d+O,m+O)}}else if(M==="bezier"||M==="unbundled-bezier"||M.endsWith("segments")||M.endsWith("taxi")){var z;switch(M){case"bezier":case"unbundled-bezier":z=v.bezierPts;break;case"segments":case"taxi":case"round-segments":case"round-taxi":z=v.linePts;break}if(z!=null)for(var $=0;$d){var Z=f;f=d,d=Z}if(p>m){var ue=p;p=m,m=ue}f-=O,d+=O,p-=O,m+=O,Hl(s,f,p,d,m)}if(i&&r.includeEdges&&h&&(T6(s,e,"mid-source"),T6(s,e,"mid-target"),T6(s,e,"source"),T6(s,e,"target")),i){var Q=e.pstyle("ghost").value==="yes";if(Q){var j=e.pstyle("ghost-offset-x").pfValue,ne=e.pstyle("ghost-offset-y").pfValue;Hl(s,s.x1+j,s.y1+ne,s.x2+j,s.y2+ne)}}var te=l.bodyBounds=l.bodyBounds||{};X0e(te,s),L6(te,x),D6(te,1),i&&(f=s.x1,d=s.x2,p=s.y1,m=s.y2,Hl(s,f-C,p-C,d+C,m+C));var he=l.overlayBounds=l.overlayBounds||{};X0e(he,s),L6(he,x),D6(he,1);var le=l.labelBounds=l.labelBounds||{};le.all!=null?tXe(le.all):le.all=Ys(),i&&r.includeLabels&&(r.includeMainLabels&&uB(s,e,null),h&&(r.includeSourceLabels&&uB(s,e,"source"),r.includeTargetLabels&&uB(s,e,"target")))}return s.x1=il(s.x1),s.y1=il(s.y1),s.x2=il(s.x2),s.y2=il(s.y2),s.w=il(s.x2-s.x1),s.h=il(s.y2-s.y1),s.w>0&&s.h>0&&T&&(L6(s,x),D6(s,1)),s},"boundingBoxImpl"),Jge=o(function(e){var r=0,n=o(function(s){return(s?1:0)<=0;l--)s(l);return this};Gf.removeAllListeners=function(){return this.removeListener("*")};Gf.emit=Gf.trigger=function(t,e,r){var n=this.listeners,i=n.length;return this.emitting++,En(e)||(e=[e]),ZQe(this,function(a,s){r!=null&&(n=[{event:s.event,type:s.type,namespace:s.namespace,callback:r}],i=n.length);for(var l=o(function(f){var d=n[f];if(d.type===s.type&&(!d.namespace||d.namespace===s.namespace||d.namespace===KQe)&&a.eventMatches(a.context,d,s)){var p=[s];e!=null&&DYe(p,e),a.beforeEmit(a.context,d,s),d.conf&&d.conf.one&&(a.listeners=a.listeners.filter(function(y){return y!==d}));var m=a.callbackContext(a.context,d,s),g=d.callback.apply(m,p);a.afterEmit(a.context,d,s),g===!1&&(s.stopPropagation(),s.preventDefault())}},"_loop2"),u=0;u1&&!s){var l=this.length-1,u=this[l],h=u._private.data.id;this[l]=void 0,this[e]=u,a.set(h,{ele:u,index:e})}return this.length--,this},"unmergeAt"),unmergeOne:o(function(e){e=e[0];var r=this._private,n=e._private.data.id,i=r.map,a=i.get(n);if(!a)return this;var s=a.index;return this.unmergeAt(s),this},"unmergeOne"),unmerge:o(function(e){var r=this._private.cy;if(!e)return this;if(e&&Zt(e)){var n=e;e=r.mutableElements().filter(n)}for(var i=0;i=0;r--){var n=this[r];e(n)&&this.unmergeAt(r)}return this},"unmergeBy"),map:o(function(e,r){for(var n=[],i=this,a=0;an&&(n=u,i=l)}return{value:n,ele:i}},"max"),min:o(function(e,r){for(var n=1/0,i,a=this,s=0;s=0&&a"u"?"undefined":qi(Symbol))!=e&&qi(Symbol.iterator)!=e;r&&(H6[Symbol.iterator]=function(){var n=this,i={value:void 0,done:!1},a=0,s=this.length;return ige({next:o(function(){return a1&&arguments[1]!==void 0?arguments[1]:!0,n=this[0],i=n.cy();if(i.styleEnabled()&&n){n._private.styleDirty&&(n._private.styleDirty=!1,i.style().apply(n));var a=n._private.style[e];return a??(r?i.style().getDefaultProperty(e):null)}},"parsedStyle"),numericStyle:o(function(e){var r=this[0];if(r.cy().styleEnabled()&&r){var n=r.pstyle(e);return n.pfValue!==void 0?n.pfValue:n.value}},"numericStyle"),numericStyleUnits:o(function(e){var r=this[0];if(r.cy().styleEnabled()&&r)return r.pstyle(e).units},"numericStyleUnits"),renderedStyle:o(function(e){var r=this.cy();if(!r.styleEnabled())return this;var n=this[0];if(n)return r.style().getRenderedStyle(n,e)},"renderedStyle"),style:o(function(e,r){var n=this.cy();if(!n.styleEnabled())return this;var i=!1,a=n.style();if(Ur(e)){var s=e;a.applyBypass(this,s,i),this.emitAndNotify("style")}else if(Zt(e))if(r===void 0){var l=this[0];return l?a.getStylePropertyValue(l,e):void 0}else a.applyBypass(this,e,r,i),this.emitAndNotify("style");else if(e===void 0){var u=this[0];return u?a.getRawStyle(u):void 0}return this},"style"),removeStyle:o(function(e){var r=this.cy();if(!r.styleEnabled())return this;var n=!1,i=r.style(),a=this;if(e===void 0)for(var s=0;s0&&e.push(f[0]),e.push(l[0])}return this.spawn(e,!0).filter(t)},"neighborhood"),closedNeighborhood:o(function(e){return this.neighborhood().add(this).filter(e)},"closedNeighborhood"),openNeighborhood:o(function(e){return this.neighborhood(e)},"openNeighborhood")});Ha.neighbourhood=Ha.neighborhood;Ha.closedNeighbourhood=Ha.closedNeighborhood;Ha.openNeighbourhood=Ha.openNeighborhood;ir(Ha,{source:al(o(function(e){var r=this[0],n;return r&&(n=r._private.source||r.cy().collection()),n&&e?n.filter(e):n},"sourceImpl"),"source"),target:al(o(function(e){var r=this[0],n;return r&&(n=r._private.target||r.cy().collection()),n&&e?n.filter(e):n},"targetImpl"),"target"),sources:Cme({attr:"source"}),targets:Cme({attr:"target"})});o(Cme,"defineSourceFunction");ir(Ha,{edgesWith:al(Ame(),"edgesWith"),edgesTo:al(Ame({thisIsSrc:!0}),"edgesTo")});o(Ame,"defineEdgesWithFunction");ir(Ha,{connectedEdges:al(function(t){for(var e=[],r=this,n=0;n0);return s},"components"),component:o(function(){var e=this[0];return e.cy().mutableElements().components(e)[0]},"component")});Ha.componentsOf=Ha.components;Sa=o(function(e,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(e===void 0){oi("A collection must have a reference to the core");return}var a=new Zc,s=!1;if(!r)r=[];else if(r.length>0&&Ur(r[0])&&!f4(r[0])){s=!0;for(var l=[],u=new ay,h=0,f=r.length;h0&&arguments[0]!==void 0?arguments[0]:!0,e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,r=this,n=r.cy(),i=n._private,a=[],s=[],l,u=0,h=r.length;u0){for(var F=l.length===r.length?r:new Sa(n,l),z=0;z0&&arguments[0]!==void 0?arguments[0]:!0,e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,r=this,n=[],i={},a=r._private.cy;function s(A){for(var I=A._private.edges,M=0;M0&&(t?R.emitAndNotify("remove"):e&&R.emit("remove"));for(var k=0;kf&&Math.abs(g.v)>f;);return p?function(y){return u[y*(u.length-1)|0]}:h},"springRK4Factory")}(),Nn=o(function(e,r,n,i){var a=lZe(e,r,n,i);return function(s,l,u){return s+(l-s)*a(u)}},"cubicBezier"),M6={linear:o(function(e,r,n){return e+(r-e)*n},"linear"),ease:Nn(.25,.1,.25,1),"ease-in":Nn(.42,0,1,1),"ease-out":Nn(0,0,.58,1),"ease-in-out":Nn(.42,0,.58,1),"ease-in-sine":Nn(.47,0,.745,.715),"ease-out-sine":Nn(.39,.575,.565,1),"ease-in-out-sine":Nn(.445,.05,.55,.95),"ease-in-quad":Nn(.55,.085,.68,.53),"ease-out-quad":Nn(.25,.46,.45,.94),"ease-in-out-quad":Nn(.455,.03,.515,.955),"ease-in-cubic":Nn(.55,.055,.675,.19),"ease-out-cubic":Nn(.215,.61,.355,1),"ease-in-out-cubic":Nn(.645,.045,.355,1),"ease-in-quart":Nn(.895,.03,.685,.22),"ease-out-quart":Nn(.165,.84,.44,1),"ease-in-out-quart":Nn(.77,0,.175,1),"ease-in-quint":Nn(.755,.05,.855,.06),"ease-out-quint":Nn(.23,1,.32,1),"ease-in-out-quint":Nn(.86,0,.07,1),"ease-in-expo":Nn(.95,.05,.795,.035),"ease-out-expo":Nn(.19,1,.22,1),"ease-in-out-expo":Nn(1,0,0,1),"ease-in-circ":Nn(.6,.04,.98,.335),"ease-out-circ":Nn(.075,.82,.165,1),"ease-in-out-circ":Nn(.785,.135,.15,.86),spring:o(function(e,r,n){if(n===0)return M6.linear;var i=cZe(e,r,n);return function(a,s,l){return a+(s-a)*i(l)}},"spring"),"cubic-bezier":Nn};o(Dme,"getEasedValue");o(Lme,"getValue");o(W1,"ease");o(uZe,"step$1");o(Vb,"valid");o(hZe,"startAnimation");o(Rme,"stepAll");fZe={animate:un.animate(),animation:un.animation(),animated:un.animated(),clearQueue:un.clearQueue(),delay:un.delay(),delayAnimation:un.delayAnimation(),stop:un.stop(),addToAnimationPool:o(function(e){var r=this;r.styleEnabled()&&r._private.aniEles.merge(e)},"addToAnimationPool"),stopAnimationLoop:o(function(){this._private.animationsRunning=!1},"stopAnimationLoop"),startAnimationLoop:o(function(){var e=this;if(e._private.animationsRunning=!0,!e.styleEnabled())return;function r(){e._private.animationsRunning&&$6(o(function(a){Rme(a,e),r()},"animationStep"))}o(r,"headlessStep");var n=e.renderer();n&&n.beforeRender?n.beforeRender(o(function(a,s){Rme(s,e)},"rendererAnimationStep"),n.beforeRenderPriorities.animations):r()},"startAnimationLoop")},dZe={qualifierCompare:o(function(e,r){return e==null||r==null?e==null&&r==null:e.sameText(r)},"qualifierCompare"),eventMatches:o(function(e,r,n){var i=r.qualifier;return i!=null?e!==n.target&&f4(n.target)&&i.matches(n.target):!0},"eventMatches"),addEventFields:o(function(e,r){r.cy=e,r.target=e},"addEventFields"),callbackContext:o(function(e,r,n){return r.qualifier!=null?n.target:e},"callbackContext")},E6=o(function(e){return Zt(e)?new $f(e):e},"argSelector"),u1e={createEmitter:o(function(){var e=this._private;return e.emitter||(e.emitter=new aC(dZe,this)),this},"createEmitter"),emitter:o(function(){return this._private.emitter},"emitter"),on:o(function(e,r,n){return this.emitter().on(e,E6(r),n),this},"on"),removeListener:o(function(e,r,n){return this.emitter().removeListener(e,E6(r),n),this},"removeListener"),removeAllListeners:o(function(){return this.emitter().removeAllListeners(),this},"removeAllListeners"),one:o(function(e,r,n){return this.emitter().one(e,E6(r),n),this},"one"),once:o(function(e,r,n){return this.emitter().one(e,E6(r),n),this},"once"),emit:o(function(e,r){return this.emitter().emit(e,r),this},"emit"),emitAndNotify:o(function(e,r){return this.emit(e),this.notify(e,r),this},"emitAndNotify")};un.eventAliasesOn(u1e);CB={png:o(function(e){var r=this._private.renderer;return e=e||{},r.png(e)},"png"),jpg:o(function(e){var r=this._private.renderer;return e=e||{},e.bg=e.bg||"#fff",r.jpg(e)},"jpg")};CB.jpeg=CB.jpg;I6={layout:o(function(e){var r=this;if(e==null){oi("Layout options must be specified to make a layout");return}if(e.name==null){oi("A `name` must be specified to make a layout");return}var n=e.name,i=r.extension("layout",n);if(i==null){oi("No such layout `"+n+"` found. Did you forget to import it and `cytoscape.use()` it?");return}var a;Zt(e.eles)?a=r.$(e.eles):a=e.eles!=null?e.eles:r.$();var s=new i(ir({},e,{cy:r,eles:a}));return s},"layout")};I6.createLayout=I6.makeLayout=I6.layout;pZe={notify:o(function(e,r){var n=this._private;if(this.batching()){n.batchNotifications=n.batchNotifications||{};var i=n.batchNotifications[e]=n.batchNotifications[e]||this.collection();r!=null&&i.merge(r);return}if(n.notificationsEnabled){var a=this.renderer();this.destroyed()||!a||a.notify(e,r)}},"notify"),notifications:o(function(e){var r=this._private;return e===void 0?r.notificationsEnabled:(r.notificationsEnabled=!!e,this)},"notifications"),noNotifications:o(function(e){this.notifications(!1),e(),this.notifications(!0)},"noNotifications"),batching:o(function(){return this._private.batchCount>0},"batching"),startBatch:o(function(){var e=this._private;return e.batchCount==null&&(e.batchCount=0),e.batchCount===0&&(e.batchStyleEles=this.collection(),e.batchNotifications={}),e.batchCount++,this},"startBatch"),endBatch:o(function(){var e=this._private;if(e.batchCount===0)return this;if(e.batchCount--,e.batchCount===0){e.batchStyleEles.updateStyle();var r=this.renderer();Object.keys(e.batchNotifications).forEach(function(n){var i=e.batchNotifications[n];i.empty()?r.notify(n):r.notify(n,i)})}return this},"endBatch"),batch:o(function(e){return this.startBatch(),e(),this.endBatch(),this},"batch"),batchData:o(function(e){var r=this;return this.batch(function(){for(var n=Object.keys(e),i=0;i0;)r.removeChild(r.childNodes[0]);e._private.renderer=null,e.mutableElements().forEach(function(n){var i=n._private;i.rscratch={},i.rstyle={},i.animation.current=[],i.animation.queue=[]})},"destroyRenderer"),onRender:o(function(e){return this.on("render",e)},"onRender"),offRender:o(function(e){return this.off("render",e)},"offRender")};AB.invalidateDimensions=AB.resize;O6={collection:o(function(e,r){return Zt(e)?this.$(e):xo(e)?e.collection():En(e)?(r||(r={}),new Sa(this,e,r.unique,r.removed)):new Sa(this)},"collection"),nodes:o(function(e){var r=this.$(function(n){return n.isNode()});return e?r.filter(e):r},"nodes"),edges:o(function(e){var r=this.$(function(n){return n.isEdge()});return e?r.filter(e):r},"edges"),$:o(function(e){var r=this._private.elements;return e?r.filter(e):r.spawnSelf()},"$"),mutableElements:o(function(){return this._private.elements},"mutableElements")};O6.elements=O6.filter=O6.$;qa={},Kb="t",gZe="f";qa.apply=function(t){for(var e=this,r=e._private,n=r.cy,i=n.collection(),a=0;a0;if(p||d&&m){var g=void 0;p&&m||p?g=h.properties:m&&(g=h.mappedProperties);for(var y=0;y1&&(S=1),l.color){var E=n.valueMin[0],_=n.valueMax[0],C=n.valueMin[1],D=n.valueMax[1],O=n.valueMin[2],R=n.valueMax[2],k=n.valueMin[3]==null?1:n.valueMin[3],L=n.valueMax[3]==null?1:n.valueMax[3],A=[Math.round(E+(_-E)*S),Math.round(C+(D-C)*S),Math.round(O+(R-O)*S),Math.round(k+(L-k)*S)];a={bypass:n.bypass,name:n.name,value:A,strValue:"rgb("+A[0]+", "+A[1]+", "+A[2]+")"}}else if(l.number){var I=n.valueMin+(n.valueMax-n.valueMin)*S;a=this.parse(n.name,I,n.bypass,p)}else return!1;if(!a)return y(),!1;a.mapping=n,n=a;break}case s.data:{for(var M=n.field.split("."),P=d.data,B=0;B0&&a>0){for(var l={},u=!1,h=0;h0?t.delayAnimation(s).play().promise().then(T):T()}).then(function(){return t.animation({style:l,duration:a,easing:t.pstyle("transition-timing-function").value,queue:!1}).play().promise()}).then(function(){r.removeBypasses(t,i),t.emitAndNotify("style"),n.transitioning=!1})}else n.transitioning&&(this.removeBypasses(t,i),t.emitAndNotify("style"),n.transitioning=!1)};qa.checkTrigger=function(t,e,r,n,i,a){var s=this.properties[e],l=i(s);l!=null&&l(r,n)&&a(s)};qa.checkZOrderTrigger=function(t,e,r,n){var i=this;this.checkTrigger(t,e,r,n,function(a){return a.triggersZOrder},function(){i._private.cy.notify("zorder",t)})};qa.checkBoundsTrigger=function(t,e,r,n){this.checkTrigger(t,e,r,n,function(i){return i.triggersBounds},function(i){t.dirtyCompoundBoundsCache(),t.dirtyBoundingBoxCache(),i.triggersBoundsOfParallelBeziers&&e==="curve-style"&&(r==="bezier"||n==="bezier")&&t.parallelEdges().forEach(function(a){a.dirtyBoundingBoxCache()}),i.triggersBoundsOfConnectedEdges&&e==="display"&&(r==="none"||n==="none")&&t.connectedEdges().forEach(function(a){a.dirtyBoundingBoxCache()})})};qa.checkTriggers=function(t,e,r,n){t.dirtyStyleCache(),this.checkZOrderTrigger(t,e,r,n),this.checkBoundsTrigger(t,e,r,n)};y4={};y4.applyBypass=function(t,e,r,n){var i=this,a=[],s=!0;if(e==="*"||e==="**"){if(r!==void 0)for(var l=0;li.length?n=n.substr(i.length):n=""}o(l,"removeSelAndBlockFromRemaining");function u(){a.length>s.length?a=a.substr(s.length):a=""}for(o(u,"removePropAndValFromRem");;){var h=n.match(/^\s*$/);if(h)break;var f=n.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/);if(!f){hn("Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: "+n);break}i=f[0];var d=f[1];if(d!=="core"){var p=new $f(d);if(p.invalid){hn("Skipping parsing of block: Invalid selector found in string stylesheet: "+d),l();continue}}var m=f[2],g=!1;a=m;for(var y=[];;){var v=a.match(/^\s*$/);if(v)break;var x=a.match(/^\s*(.+?)\s*:\s*(.+?)(?:\s*;|\s*$)/);if(!x){hn("Skipping parsing of block: Invalid formatting of style property and value definitions found in:"+m),g=!0;break}s=x[0];var b=x[1],T=x[2],S=e.properties[b];if(!S){hn("Skipping property: Invalid property name in: "+s),u();continue}var w=r.parse(b,T);if(!w){hn("Skipping property: Invalid property definition in: "+s),u();continue}y.push({name:b,val:T}),u()}if(g){l();break}r.selector(d);for(var E=0;E=7&&e[0]==="d"&&(f=new RegExp(l.data.regex).exec(e))){if(r)return!1;var p=l.data;return{name:t,value:f,strValue:""+e,mapped:p,field:f[1],bypass:r}}else if(e.length>=10&&e[0]==="m"&&(d=new RegExp(l.mapData.regex).exec(e))){if(r||h.multiple)return!1;var m=l.mapData;if(!(h.color||h.number))return!1;var g=this.parse(t,d[4]);if(!g||g.mapped)return!1;var y=this.parse(t,d[5]);if(!y||y.mapped)return!1;if(g.pfValue===y.pfValue||g.strValue===y.strValue)return hn("`"+t+": "+e+"` is not a valid mapper because the output range is zero; converting to `"+t+": "+g.strValue+"`"),this.parse(t,g.strValue);if(h.color){var v=g.value,x=y.value,b=v[0]===x[0]&&v[1]===x[1]&&v[2]===x[2]&&(v[3]===x[3]||(v[3]==null||v[3]===1)&&(x[3]==null||x[3]===1));if(b)return!1}return{name:t,value:d,strValue:""+e,mapped:m,field:d[1],fieldMin:parseFloat(d[2]),fieldMax:parseFloat(d[3]),valueMin:g.value,valueMax:y.value,bypass:r}}}if(h.multiple&&n!=="multiple"){var T;if(u?T=e.split(/\s+/):En(e)?T=e:T=[e],h.evenMultiple&&T.length%2!==0)return null;for(var S=[],w=[],E=[],_="",C=!1,D=0;D0?" ":"")+O.strValue}return h.validate&&!h.validate(S,w)?null:h.singleEnum&&C?S.length===1&&Zt(S[0])?{name:t,value:S[0],strValue:S[0],bypass:r}:null:{name:t,value:S,pfValue:E,strValue:_,bypass:r,units:w}}var R=o(function(){for(var Q=0;Qh.max||h.strictMax&&e===h.max))return null;var M={name:t,value:e,strValue:""+e+(k||""),units:k,bypass:r};return h.unitless||k!=="px"&&k!=="em"?M.pfValue=e:M.pfValue=k==="px"||!k?e:this.getEmSizeInPixels()*e,(k==="ms"||k==="s")&&(M.pfValue=k==="ms"?e:1e3*e),(k==="deg"||k==="rad")&&(M.pfValue=k==="rad"?e:QYe(e)),k==="%"&&(M.pfValue=e/100),M}else if(h.propList){var P=[],B=""+e;if(B!=="none"){for(var F=B.split(/\s*,\s*|\s+/),z=0;z0&&l>0&&!isNaN(n.w)&&!isNaN(n.h)&&n.w>0&&n.h>0){u=Math.min((s-2*r)/n.w,(l-2*r)/n.h),u=u>this._private.maxZoom?this._private.maxZoom:u,u=u=n.minZoom&&(n.maxZoom=r),this},"zoomRange"),minZoom:o(function(e){return e===void 0?this._private.minZoom:this.zoomRange({min:e})},"minZoom"),maxZoom:o(function(e){return e===void 0?this._private.maxZoom:this.zoomRange({max:e})},"maxZoom"),getZoomedViewport:o(function(e){var r=this._private,n=r.pan,i=r.zoom,a,s,l=!1;if(r.zoomingEnabled||(l=!0),_t(e)?s=e:Ur(e)&&(s=e.level,e.position!=null?a=J6(e.position,i,n):e.renderedPosition!=null&&(a=e.renderedPosition),a!=null&&!r.panningEnabled&&(l=!0)),s=s>r.maxZoom?r.maxZoom:s,s=sr.maxZoom||!r.zoomingEnabled?s=!0:(r.zoom=u,a.push("zoom"))}if(i&&(!s||!e.cancelOnFailedZoom)&&r.panningEnabled){var h=e.pan;_t(h.x)&&(r.pan.x=h.x,l=!1),_t(h.y)&&(r.pan.y=h.y,l=!1),l||a.push("pan")}return a.length>0&&(a.push("viewport"),this.emit(a.join(" ")),this.notify("viewport")),this},"viewport"),center:o(function(e){var r=this.getCenterPan(e);return r&&(this._private.pan=r,this.emit("pan viewport"),this.notify("viewport")),this},"center"),getCenterPan:o(function(e,r){if(this._private.panningEnabled){if(Zt(e)){var n=e;e=this.mutableElements().filter(n)}else xo(e)||(e=this.mutableElements());if(e.length!==0){var i=e.boundingBox(),a=this.width(),s=this.height();r=r===void 0?this._private.zoom:r;var l={x:(a-r*(i.x1+i.x2))/2,y:(s-r*(i.y1+i.y2))/2};return l}}},"getCenterPan"),reset:o(function(){return!this._private.panningEnabled||!this._private.zoomingEnabled?this:(this.viewport({pan:{x:0,y:0},zoom:1}),this)},"reset"),invalidateSize:o(function(){this._private.sizeCache=null},"invalidateSize"),size:o(function(){var e=this._private,r=e.container,n=this;return e.sizeCache=e.sizeCache||(r?function(){var i=n.window().getComputedStyle(r),a=o(function(l){return parseFloat(i.getPropertyValue(l))},"val");return{width:r.clientWidth-a("padding-left")-a("padding-right"),height:r.clientHeight-a("padding-top")-a("padding-bottom")}}():{width:1,height:1})},"size"),width:o(function(){return this.size().width},"width"),height:o(function(){return this.size().height},"height"),extent:o(function(){var e=this._private.pan,r=this._private.zoom,n=this.renderedExtent(),i={x1:(n.x1-e.x)/r,x2:(n.x2-e.x)/r,y1:(n.y1-e.y)/r,y2:(n.y2-e.y)/r};return i.w=i.x2-i.x1,i.h=i.y2-i.y1,i},"extent"),renderedExtent:o(function(){var e=this.width(),r=this.height();return{x1:0,y1:0,x2:e,y2:r,w:e,h:r}},"renderedExtent"),multiClickDebounceTime:o(function(e){if(e)this._private.multiClickDebounceTime=e;else return this._private.multiClickDebounceTime;return this},"multiClickDebounceTime")};e0.centre=e0.center;e0.autolockNodes=e0.autolock;e0.autoungrabifyNodes=e0.autoungrabify;c4={data:un.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeData:un.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),scratch:un.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:un.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0})};c4.attr=c4.data;c4.removeAttr=c4.removeData;u4=o(function(e){var r=this;e=ir({},e);var n=e.container;n&&!F6(n)&&F6(n[0])&&(n=n[0]);var i=n?n._cyreg:null;i=i||{},i&&i.cy&&(i.cy.destroy(),i={});var a=i.readies=i.readies||[];n&&(n._cyreg=i),i.cy=r;var s=Hi!==void 0&&n!==void 0&&!e.headless,l=e;l.layout=ir({name:s?"grid":"null"},l.layout),l.renderer=ir({name:s?"canvas":"null"},l.renderer);var u=o(function(g,y,v){return y!==void 0?y:v!==void 0?v:g},"defVal"),h=this._private={container:n,ready:!1,options:l,elements:new Sa(this),listeners:[],aniEles:new Sa(this),data:l.data||{},scratch:{},layout:null,renderer:null,destroyed:!1,notificationsEnabled:!0,minZoom:1e-50,maxZoom:1e50,zoomingEnabled:u(!0,l.zoomingEnabled),userZoomingEnabled:u(!0,l.userZoomingEnabled),panningEnabled:u(!0,l.panningEnabled),userPanningEnabled:u(!0,l.userPanningEnabled),boxSelectionEnabled:u(!0,l.boxSelectionEnabled),autolock:u(!1,l.autolock,l.autolockNodes),autoungrabify:u(!1,l.autoungrabify,l.autoungrabifyNodes),autounselectify:u(!1,l.autounselectify),styleEnabled:l.styleEnabled===void 0?s:l.styleEnabled,zoom:_t(l.zoom)?l.zoom:1,pan:{x:Ur(l.pan)&&_t(l.pan.x)?l.pan.x:0,y:Ur(l.pan)&&_t(l.pan.y)?l.pan.y:0},animation:{current:[],queue:[]},hasCompoundNodes:!1,multiClickDebounceTime:u(250,l.multiClickDebounceTime)};this.createEmitter(),this.selectionType(l.selectionType),this.zoomRange({min:l.minZoom,max:l.maxZoom});var f=o(function(g,y){var v=g.some(wqe);if(v)return sy.all(g).then(y);y(g)},"loadExtData");h.styleEnabled&&r.setStyle([]);var d=ir({},l,l.renderer);r.initRenderer(d);var p=o(function(g,y,v){r.notifications(!1);var x=r.mutableElements();x.length>0&&x.remove(),g!=null&&(Ur(g)||En(g))&&r.add(g),r.one("layoutready",function(T){r.notifications(!0),r.emit(T),r.one("load",y),r.emitAndNotify("load")}).one("layoutstop",function(){r.one("done",v),r.emit("done")});var b=ir({},r._private.options.layout);b.eles=r.elements(),r.layout(b).run()},"setElesAndLayout");f([l.style,l.elements],function(m){var g=m[0],y=m[1];h.styleEnabled&&r.style().append(g),p(y,function(){r.startAnimationLoop(),h.ready=!0,li(l.ready)&&r.on("ready",l.ready);for(var v=0;v0,l=!!t.boundingBox,u=e.extent(),h=Ys(l?t.boundingBox:{x1:u.x1,y1:u.y1,w:u.w,h:u.h}),f;if(xo(t.roots))f=t.roots;else if(En(t.roots)){for(var d=[],p=0;p0;){var I=A(),M=O(I,k);if(M)I.outgoers().filter(function(ae){return ae.isNode()&&r.has(ae)}).forEach(L);else if(M===null){hn("Detected double maximal shift for node `"+I.id()+"`. Bailing maximal adjustment due to cycle. Use `options.maximal: true` only on DAGs.");break}}}var P=0;if(t.avoidOverlap)for(var B=0;B0&&b[0].length<=3?ze/2:0),Ie=2*Math.PI/b[Be].length*He;return Be===0&&b[0].length===1&&(Le=1),{x:he.x+Le*Math.cos(Ie),y:he.y+Le*Math.sin(Ie)}}else{var xe=b[Be].length,q=Math.max(xe===1?0:l?(h.w-t.padding*2-le.w)/((t.grid?Se:xe)-1):(h.w-t.padding*2-le.w)/((t.grid?Se:xe)+1),P),de={x:he.x+(He+1-(xe+1)/2)*q,y:he.y+(Be+1-(ce+1)/2)*J};return de}},"getPosition");return r.nodes().layoutPositions(this,t,se),this};TZe={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:o(function(e,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(e,r){return r},"transform")};o(f1e,"CircleLayout");f1e.prototype.run=function(){var t=this.options,e=t,r=t.cy,n=e.eles,i=e.counterclockwise!==void 0?!e.counterclockwise:e.clockwise,a=n.nodes().not(":parent");e.sort&&(a=a.sort(e.sort));for(var s=Ys(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()}),l={x:s.x1+s.w/2,y:s.y1+s.h/2},u=e.sweep===void 0?2*Math.PI-2*Math.PI/a.length:e.sweep,h=u/Math.max(1,a.length-1),f,d=0,p=0;p1&&e.avoidOverlap){d*=1.75;var x=Math.cos(h)-Math.cos(0),b=Math.sin(h)-Math.sin(0),T=Math.sqrt(d*d/(x*x+b*b));f=Math.max(T,f)}var S=o(function(E,_){var C=e.startAngle+_*h*(i?1:-1),D=f*Math.cos(C),O=f*Math.sin(C),R={x:l.x+D,y:l.y+O};return R},"getPos");return n.nodes().layoutPositions(this,e,S),this};wZe={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:o(function(e){return e.degree()},"concentric"),levelWidth:o(function(e){return e.maxDegree()/4},"levelWidth"),animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(e,r){return r},"transform")};o(d1e,"ConcentricLayout");d1e.prototype.run=function(){for(var t=this.options,e=t,r=e.counterclockwise!==void 0?!e.counterclockwise:e.clockwise,n=t.cy,i=e.eles,a=i.nodes().not(":parent"),s=Ys(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:n.width(),h:n.height()}),l={x:s.x1+s.w/2,y:s.y1+s.h/2},u=[],h=0,f=0;f0){var w=Math.abs(b[0].value-S.value);w>=v&&(b=[],x.push(b))}b.push(S)}var E=h+e.minNodeSpacing;if(!e.avoidOverlap){var _=x.length>0&&x[0].length>1,C=Math.min(s.w,s.h)/2-E,D=C/(x.length+_?1:0);E=Math.min(E,D)}for(var O=0,R=0;R1&&e.avoidOverlap){var I=Math.cos(A)-Math.cos(0),M=Math.sin(A)-Math.sin(0),P=Math.sqrt(E*E/(I*I+M*M));O=Math.max(P,O)}k.r=O,O+=E}if(e.equidistant){for(var B=0,F=0,z=0;z=t.numIter||(LZe(n,t),n.temperature=n.temperature*t.coolingFactor,n.temperature=t.animationThreshold&&a(),$6(d)}},"frame");f()}else{for(;h;)h=s(u),u++;Ime(n,t),l()}return this};uC.prototype.stop=function(){return this.stopped=!0,this.thread&&this.thread.stop(),this.emit("layoutstop"),this};uC.prototype.destroy=function(){return this.thread&&this.thread.stop(),this};EZe=o(function(e,r,n){for(var i=n.eles.edges(),a=n.eles.nodes(),s=Ys(n.boundingBox?n.boundingBox:{x1:0,y1:0,w:e.width(),h:e.height()}),l={isCompound:e.hasCompoundNodes(),layoutNodes:[],idToIndex:{},nodeSize:a.size(),graphSet:[],indexToGraph:[],layoutEdges:[],edgeSize:i.size(),temperature:n.initialTemp,clientWidth:s.w,clientHeight:s.h,boundingBox:s},u=n.eles.components(),h={},f=0;f0){l.graphSet.push(C);for(var f=0;fi.count?0:i.graph},"findLCA"),CZe=o(function t(e,r,n,i){var a=i.graphSet[n];if(-10)var d=i.nodeOverlap*f,p=Math.sqrt(l*l+u*u),m=d*l/p,g=d*u/p;else var y=q6(e,l,u),v=q6(r,-1*l,-1*u),x=v.x-y.x,b=v.y-y.y,T=x*x+b*b,p=Math.sqrt(T),d=(e.nodeRepulsion+r.nodeRepulsion)/T,m=d*x/p,g=d*b/p;e.isLocked||(e.offsetX-=m,e.offsetY-=g),r.isLocked||(r.offsetX+=m,r.offsetY+=g)}},"nodeRepulsion"),MZe=o(function(e,r,n,i){if(n>0)var a=e.maxX-r.minX;else var a=r.maxX-e.minX;if(i>0)var s=e.maxY-r.minY;else var s=r.maxY-e.minY;return a>=0&&s>=0?Math.sqrt(a*a+s*s):0},"nodesOverlap"),q6=o(function(e,r,n){var i=e.positionX,a=e.positionY,s=e.height||1,l=e.width||1,u=n/r,h=s/l,f={};return r===0&&0n?(f.x=i,f.y=a+s/2,f):0r&&-1*h<=u&&u<=h?(f.x=i-l/2,f.y=a-l*n/2/r,f):0=h)?(f.x=i+s*r/2/n,f.y=a+s/2,f):(0>n&&(u<=-1*h||u>=h)&&(f.x=i-s*r/2/n,f.y=a-s/2),f)},"findClippingPoint"),IZe=o(function(e,r){for(var n=0;nn){var v=r.gravity*m/y,x=r.gravity*g/y;p.offsetX+=v,p.offsetY+=x}}}}},"calculateGravityForces"),PZe=o(function(e,r){var n=[],i=0,a=-1;for(n.push.apply(n,e.graphSet[0]),a+=e.graphSet[0].length;i<=a;){var s=n[i++],l=e.idToIndex[s],u=e.layoutNodes[l],h=u.children;if(0n)var a={x:n*e/i,y:n*r/i};else var a={x:e,y:r};return a},"limitForce"),$Ze=o(function t(e,r){var n=e.parentId;if(n!=null){var i=r.layoutNodes[r.idToIndex[n]],a=!1;if((i.maxX==null||e.maxX+i.padRight>i.maxX)&&(i.maxX=e.maxX+i.padRight,a=!0),(i.minX==null||e.minX-i.padLefti.maxY)&&(i.maxY=e.maxY+i.padBottom,a=!0),(i.minY==null||e.minY-i.padTopx&&(g+=v+r.componentSpacing,m=0,y=0,v=0)}}},"separateComponents"),zZe={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:o(function(e){},"position"),sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(e,r){return r},"transform")};o(m1e,"GridLayout");m1e.prototype.run=function(){var t=this.options,e=t,r=t.cy,n=e.eles,i=n.nodes().not(":parent");e.sort&&(i=i.sort(e.sort));var a=Ys(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()});if(a.h===0||a.w===0)n.nodes().layoutPositions(this,e,function(K){return{x:a.x1,y:a.y1}});else{var s=i.size(),l=Math.sqrt(s*a.h/a.w),u=Math.round(l),h=Math.round(a.w/a.h*l),f=o(function(ee){if(ee==null)return Math.min(u,h);var Y=Math.min(u,h);Y==u?u=ee:h=ee},"small"),d=o(function(ee){if(ee==null)return Math.max(u,h);var Y=Math.max(u,h);Y==u?u=ee:h=ee},"large"),p=e.rows,m=e.cols!=null?e.cols:e.columns;if(p!=null&&m!=null)u=p,h=m;else if(p!=null&&m==null)u=p,h=Math.ceil(s/u);else if(p==null&&m!=null)h=m,u=Math.ceil(s/h);else if(h*u>s){var g=f(),y=d();(g-1)*y>=s?f(g-1):(y-1)*g>=s&&d(y-1)}else for(;h*u=s?d(x+1):f(v+1)}var b=a.w/h,T=a.h/u;if(e.condense&&(b=0,T=0),e.avoidOverlap)for(var S=0;S=h&&(I=0,A++)},"moveToNextCell"),P={},B=0;B(I=uXe(t,e,M[P],M[P+1],M[P+2],M[P+3])))return v(_,I),!0}else if(D.edgeType==="bezier"||D.edgeType==="multibezier"||D.edgeType==="self"||D.edgeType==="compound"){for(var M=D.allpts,P=0;P+5(I=cXe(t,e,M[P],M[P+1],M[P+2],M[P+3],M[P+4],M[P+5])))return v(_,I),!0}for(var B=B||C.source,F=F||C.target,z=i.getArrowWidth(O,R),$=[{name:"source",x:D.arrowStartX,y:D.arrowStartY,angle:D.srcArrowAngle},{name:"target",x:D.arrowEndX,y:D.arrowEndY,angle:D.tgtArrowAngle},{name:"mid-source",x:D.midX,y:D.midY,angle:D.midsrcArrowAngle},{name:"mid-target",x:D.midX,y:D.midY,angle:D.midtgtArrowAngle}],P=0;P<$.length;P++){var U=$[P],K=a.arrowShapes[_.pstyle(U.name+"-arrow-shape").value],ee=_.pstyle("width").pfValue;if(K.roughCollide(t,e,z,U.angle,{x:U.x,y:U.y},ee,f)&&K.collide(t,e,z,U.angle,{x:U.x,y:U.y},ee,f))return v(_),!0}h&&l.length>0&&(x(B),x(F))}o(b,"checkEdge");function T(_,C,D){return Wl(_,C,D)}o(T,"preprop");function S(_,C){var D=_._private,O=p,R;C?R=C+"-":R="",_.boundingBox();var k=D.labelBounds[C||"main"],L=_.pstyle(R+"label").value,A=_.pstyle("text-events").strValue==="yes";if(!(!A||!L)){var I=T(D.rscratch,"labelX",C),M=T(D.rscratch,"labelY",C),P=T(D.rscratch,"labelAngle",C),B=_.pstyle(R+"text-margin-x").pfValue,F=_.pstyle(R+"text-margin-y").pfValue,z=k.x1-O-B,$=k.x2+O-B,U=k.y1-O-F,K=k.y2+O-F;if(P){var ee=Math.cos(P),Y=Math.sin(P),ce=o(function(he,le){return he=he-I,le=le-M,{x:he*ee-le*Y+I,y:he*Y+le*ee+M}},"rotate"),Z=ce(z,U),ue=ce(z,K),Q=ce($,U),j=ce($,K),ne=[Z.x+B,Z.y+F,Q.x+B,Q.y+F,j.x+B,j.y+F,ue.x+B,ue.y+F];if(qs(t,e,ne))return v(_),!0}else if(ry(k,t,e))return v(_),!0}}o(S,"checkLabel");for(var w=s.length-1;w>=0;w--){var E=s[w];E.isNode()?x(E)||S(E):b(E)||S(E)||S(E,"source")||S(E,"target")}return l};r0.getAllInBox=function(t,e,r,n){var i=this.getCachedZSortedEles().interactive,a=[],s=Math.min(t,r),l=Math.max(t,r),u=Math.min(e,n),h=Math.max(e,n);t=s,r=l,e=u,n=h;for(var f=Ys({x1:t,y1:e,x2:r,y2:n}),d=0;d0?-(Math.PI-e.ang):Math.PI+e.ang},"invertVec"),qZe=o(function(e,r,n,i,a){if(e!==$me?zme(r,e,Kc):WZe(nl,Kc),zme(r,n,nl),Bme=Kc.nx*nl.ny-Kc.ny*nl.nx,Fme=Kc.nx*nl.nx-Kc.ny*-nl.ny,rh=Math.asin(Math.max(-1,Math.min(1,Bme))),Math.abs(rh)<1e-6){_B=r.x,DB=r.y,Yp=Y1=0;return}Xp=1,P6=!1,Fme<0?rh<0?rh=Math.PI+rh:(rh=Math.PI-rh,Xp=-1,P6=!0):rh>0&&(Xp=-1,P6=!0),r.radius!==void 0?Y1=r.radius:Y1=i,Up=rh/2,S6=Math.min(Kc.len/2,nl.len/2),a?(jc=Math.abs(Math.cos(Up)*Y1/Math.sin(Up)),jc>S6?(jc=S6,Yp=Math.abs(jc*Math.sin(Up)/Math.cos(Up))):Yp=Y1):(jc=Math.min(S6,Y1),Yp=Math.abs(jc*Math.sin(Up)/Math.cos(Up))),LB=r.x+nl.nx*jc,RB=r.y+nl.ny*jc,_B=LB-nl.ny*Yp*Xp,DB=RB+nl.nx*Yp*Xp,x1e=r.x+Kc.nx*jc,b1e=r.y+Kc.ny*jc,$me=r},"calcCornerArc");o(T1e,"drawPreparedRoundCorner");o(rF,"getRoundCorner");Ya={};Ya.findMidptPtsEtc=function(t,e){var r=e.posPts,n=e.intersectionPts,i=e.vectorNormInverse,a,s=t.pstyle("source-endpoint"),l=t.pstyle("target-endpoint"),u=s.units!=null&&l.units!=null,h=o(function(w,E,_,C){var D=C-E,O=_-w,R=Math.sqrt(O*O+D*D);return{x:-D/R,y:O/R}},"recalcVectorNormInverse"),f=t.pstyle("edge-distances").value;switch(f){case"node-position":a=r;break;case"intersection":a=n;break;case"endpoints":{if(u){var d=this.manualEndptToPx(t.source()[0],s),p=Ri(d,2),m=p[0],g=p[1],y=this.manualEndptToPx(t.target()[0],l),v=Ri(y,2),x=v[0],b=v[1],T={x1:m,y1:g,x2:x,y2:b};i=h(m,g,x,b),a=T}else hn("Edge ".concat(t.id()," has edge-distances:endpoints specified without manual endpoints specified via source-endpoint and target-endpoint. Falling back on edge-distances:intersection (default).")),a=n;break}}return{midptPts:a,vectorNormInverse:i}};Ya.findHaystackPoints=function(t){for(var e=0;e0?Math.max(W-pe,0):Math.min(W+pe,0)},"subDWH"),L=k(O,C),A=k(R,D),I=!1;b===h?x=Math.abs(L)>Math.abs(A)?i:n:b===u||b===l?(x=n,I=!0):(b===a||b===s)&&(x=i,I=!0);var M=x===n,P=M?A:L,B=M?R:O,F=Sge(B),z=!1;!(I&&(S||E))&&(b===l&&B<0||b===u&&B>0||b===a&&B>0||b===s&&B<0)&&(F*=-1,P=F*Math.abs(P),z=!0);var $;if(S){var U=w<0?1+w:w;$=U*P}else{var K=w<0?P:0;$=K+w*F}var ee=o(function(W){return Math.abs(W)<_||Math.abs(W)>=Math.abs(P)},"getIsTooClose"),Y=ee($),ce=ee(Math.abs(P)-Math.abs($)),Z=Y||ce;if(Z&&!z)if(M){var ue=Math.abs(B)<=p/2,Q=Math.abs(O)<=m/2;if(ue){var j=(f.x1+f.x2)/2,ne=f.y1,te=f.y2;r.segpts=[j,ne,j,te]}else if(Q){var he=(f.y1+f.y2)/2,le=f.x1,J=f.x2;r.segpts=[le,he,J,he]}else r.segpts=[f.x1,f.y2]}else{var Se=Math.abs(B)<=d/2,se=Math.abs(R)<=g/2;if(Se){var ae=(f.y1+f.y2)/2,Oe=f.x1,ye=f.x2;r.segpts=[Oe,ae,ye,ae]}else if(se){var Be=(f.x1+f.x2)/2,He=f.y1,ze=f.y2;r.segpts=[Be,He,Be,ze]}else r.segpts=[f.x2,f.y1]}else if(M){var Le=f.y1+$+(v?p/2*F:0),Ie=f.x1,xe=f.x2;r.segpts=[Ie,Le,xe,Le]}else{var q=f.x1+$+(v?d/2*F:0),de=f.y1,ie=f.y2;r.segpts=[q,de,q,ie]}if(r.isRound){var oe=t.pstyle("taxi-radius").value,V=t.pstyle("radius-type").value[0]==="arc-radius";r.radii=new Array(r.segpts.length/2).fill(oe),r.isArcRadius=new Array(r.segpts.length/2).fill(V)}};Ya.tryToCorrectInvalidPoints=function(t,e){var r=t._private.rscratch;if(r.edgeType==="bezier"){var n=e.srcPos,i=e.tgtPos,a=e.srcW,s=e.srcH,l=e.tgtW,u=e.tgtH,h=e.srcShape,f=e.tgtShape,d=e.srcCornerRadius,p=e.tgtCornerRadius,m=e.srcRs,g=e.tgtRs,y=!_t(r.startX)||!_t(r.startY),v=!_t(r.arrowStartX)||!_t(r.arrowStartY),x=!_t(r.endX)||!_t(r.endY),b=!_t(r.arrowEndX)||!_t(r.arrowEndY),T=3,S=this.getArrowWidth(t.pstyle("width").pfValue,t.pstyle("arrow-scale").value)*this.arrowShapeWidth,w=T*S,E=Qp({x:r.ctrlpts[0],y:r.ctrlpts[1]},{x:r.startX,y:r.startY}),_=EA.poolIndex()){var I=L;L=A,A=I}var M=D.srcPos=L.position(),P=D.tgtPos=A.position(),B=D.srcW=L.outerWidth(),F=D.srcH=L.outerHeight(),z=D.tgtW=A.outerWidth(),$=D.tgtH=A.outerHeight(),U=D.srcShape=r.nodeShapes[e.getNodeShape(L)],K=D.tgtShape=r.nodeShapes[e.getNodeShape(A)],ee=D.srcCornerRadius=L.pstyle("corner-radius").value==="auto"?"auto":L.pstyle("corner-radius").pfValue,Y=D.tgtCornerRadius=A.pstyle("corner-radius").value==="auto"?"auto":A.pstyle("corner-radius").pfValue,ce=D.tgtRs=A._private.rscratch,Z=D.srcRs=L._private.rscratch;D.dirCounts={north:0,west:0,south:0,east:0,northwest:0,southwest:0,northeast:0,southeast:0};for(var ue=0;ue0){var te=a,he=Wp(te,j1(r)),le=Wp(te,j1(ne)),J=he;if(le2){var Se=Wp(te,{x:ne[2],y:ne[3]});Se0){var ie=s,oe=Wp(ie,j1(r)),V=Wp(ie,j1(de)),Te=oe;if(V2){var W=Wp(ie,{x:de[2],y:de[3]});W=g||_){v={cp:S,segment:E};break}}if(v)break}var C=v.cp,D=v.segment,O=(g-x)/D.length,R=D.t1-D.t0,k=m?D.t0+R*O:D.t1-R*O;k=i4(0,k,1),e=Q1(C.p0,C.p1,C.p2,k),p=XZe(C.p0,C.p1,C.p2,k);break}case"straight":case"segments":case"haystack":{for(var L=0,A,I,M,P,B=n.allpts.length,F=0;F+3=g));F+=2);var z=g-I,$=z/A;$=i4(0,$,1),e=JYe(M,P,$),p=E1e(M,P);break}}s("labelX",d,e.x),s("labelY",d,e.y),s("labelAutoAngle",d,p)}},"calculateEndProjection");h("source"),h("target"),this.applyLabelDimensions(t)}};eu.applyLabelDimensions=function(t){this.applyPrefixedLabelDimensions(t),t.isEdge()&&(this.applyPrefixedLabelDimensions(t,"source"),this.applyPrefixedLabelDimensions(t,"target"))};eu.applyPrefixedLabelDimensions=function(t,e){var r=t._private,n=this.getLabelText(t,e),i=this.calculateLabelDimensions(t,n),a=t.pstyle("line-height").pfValue,s=t.pstyle("text-wrap").strValue,l=Wl(r.rscratch,"labelWrapCachedLines",e)||[],u=s!=="wrap"?1:Math.max(l.length,1),h=i.height/u,f=h*a,d=i.width,p=i.height+(u-1)*(a-1)*h;Nf(r.rstyle,"labelWidth",e,d),Nf(r.rscratch,"labelWidth",e,d),Nf(r.rstyle,"labelHeight",e,p),Nf(r.rscratch,"labelHeight",e,p),Nf(r.rscratch,"labelLineHeight",e,f)};eu.getLabelText=function(t,e){var r=t._private,n=e?e+"-":"",i=t.pstyle(n+"label").strValue,a=t.pstyle("text-transform").value,s=o(function(K,ee){return ee?(Nf(r.rscratch,K,e,ee),ee):Wl(r.rscratch,K,e)},"rscratch");if(!i)return"";a=="none"||(a=="uppercase"?i=i.toUpperCase():a=="lowercase"&&(i=i.toLowerCase()));var l=t.pstyle("text-wrap").value;if(l==="wrap"){var u=s("labelKey");if(u!=null&&s("labelWrapKey")===u)return s("labelWrapCachedText");for(var h="\u200B",f=i.split(` +`),d=t.pstyle("text-max-width").pfValue,p=t.pstyle("text-overflow-wrap").value,m=p==="anywhere",g=[],y=/[\s\u200b]+|$/g,v=0;vd){var w=x.matchAll(y),E="",_=0,C=vo(w),D;try{for(C.s();!(D=C.n()).done;){var O=D.value,R=O[0],k=x.substring(_,O.index);_=O.index+R.length;var L=E.length===0?k:E+k+R,A=this.calculateLabelDimensions(t,L),I=A.width;I<=d?E+=k+R:(E&&g.push(E),E=k+R)}}catch(U){C.e(U)}finally{C.f()}E.match(/^[\s\u200b]+$/)||g.push(E)}else g.push(x)}s("labelWrapCachedLines",g),i=s("labelWrapCachedText",g.join(` +`)),s("labelWrapKey",u)}else if(l==="ellipsis"){var M=t.pstyle("text-max-width").pfValue,P="",B="\u2026",F=!1;if(this.calculateLabelDimensions(t,i).widthM)break;P+=i[z],z===i.length-1&&(F=!0)}return F||(P+=B),P}return i};eu.getLabelJustification=function(t){var e=t.pstyle("text-justification").strValue,r=t.pstyle("text-halign").strValue;if(e==="auto")if(t.isNode())switch(r){case"left":return"right";case"right":return"left";default:return"center"}else return"center";else return e};eu.calculateLabelDimensions=function(t,e){var r=this,n=r.cy.window(),i=n.document,a=Bf(e,t._private.labelDimsKey),s=r.labelDimCache||(r.labelDimCache=[]),l=s[a];if(l!=null)return l;var u=0,h=t.pstyle("font-style").strValue,f=t.pstyle("font-size").pfValue,d=t.pstyle("font-family").strValue,p=t.pstyle("font-weight").strValue,m=this.labelCalcCanvas,g=this.labelCalcCanvasContext;if(!m){m=this.labelCalcCanvas=i.createElement("canvas"),g=this.labelCalcCanvasContext=m.getContext("2d");var y=m.style;y.position="absolute",y.left="-9999px",y.top="-9999px",y.zIndex="-1",y.visibility="hidden",y.pointerEvents="none"}g.font="".concat(h," ").concat(p," ").concat(f,"px ").concat(d);for(var v=0,x=0,b=e.split(` +`),T=0;T1&&arguments[1]!==void 0?arguments[1]:!0;if(e.merge(s),l)for(var u=0;u=t.desktopTapThreshold2}var ot=a(q);at&&(t.hoverData.tapholdCancelled=!0);var Yt=o(function(){var kt=t.hoverData.dragDelta=t.hoverData.dragDelta||[];kt.length===0?(kt.push(De[0]),kt.push(De[1])):(kt[0]+=De[0],kt[1]+=De[1])},"updateDragDelta");ie=!0,i(_e,["mousemove","vmousemove","tapdrag"],q,{x:W[0],y:W[1]});var Tt=o(function(){t.data.bgActivePosistion=void 0,t.hoverData.selecting||oe.emit({originalEvent:q,type:"boxstart",position:{x:W[0],y:W[1]}}),Pe[4]=1,t.hoverData.selecting=!0,t.redrawHint("select",!0),t.redraw()},"goIntoBoxMode");if(t.hoverData.which===3){if(at){var Mt={originalEvent:q,type:"cxtdrag",position:{x:W[0],y:W[1]}};Ve?Ve.emit(Mt):oe.emit(Mt),t.hoverData.cxtDragged=!0,(!t.hoverData.cxtOver||_e!==t.hoverData.cxtOver)&&(t.hoverData.cxtOver&&t.hoverData.cxtOver.emit({originalEvent:q,type:"cxtdragout",position:{x:W[0],y:W[1]}}),t.hoverData.cxtOver=_e,_e&&_e.emit({originalEvent:q,type:"cxtdragover",position:{x:W[0],y:W[1]}}))}}else if(t.hoverData.dragging){if(ie=!0,oe.panningEnabled()&&oe.userPanningEnabled()){var bt;if(t.hoverData.justStartedPan){var ut=t.hoverData.mdownPos;bt={x:(W[0]-ut[0])*V,y:(W[1]-ut[1])*V},t.hoverData.justStartedPan=!1}else bt={x:De[0]*V,y:De[1]*V};oe.panBy(bt),oe.emit("dragpan"),t.hoverData.dragged=!0}W=t.projectIntoViewport(q.clientX,q.clientY)}else if(Pe[4]==1&&(Ve==null||Ve.pannable())){if(at){if(!t.hoverData.dragging&&oe.boxSelectionEnabled()&&(ot||!oe.panningEnabled()||!oe.userPanningEnabled()))Tt();else if(!t.hoverData.selecting&&oe.panningEnabled()&&oe.userPanningEnabled()){var St=s(Ve,t.hoverData.downs);St&&(t.hoverData.dragging=!0,t.hoverData.justStartedPan=!0,Pe[4]=0,t.data.bgActivePosistion=j1(pe),t.redrawHint("select",!0),t.redraw())}Ve&&Ve.pannable()&&Ve.active()&&Ve.unactivate()}}else{if(Ve&&Ve.pannable()&&Ve.active()&&Ve.unactivate(),(!Ve||!Ve.grabbed())&&_e!=be&&(be&&i(be,["mouseout","tapdragout"],q,{x:W[0],y:W[1]}),_e&&i(_e,["mouseover","tapdragover"],q,{x:W[0],y:W[1]}),t.hoverData.last=_e),Ve)if(at){if(oe.boxSelectionEnabled()&&ot)Ve&&Ve.grabbed()&&(x(qe),Ve.emit("freeon"),qe.emit("free"),t.dragData.didDrag&&(Ve.emit("dragfreeon"),qe.emit("dragfree"))),Tt();else if(Ve&&Ve.grabbed()&&t.nodeIsDraggable(Ve)){var ft=!t.dragData.didDrag;ft&&t.redrawHint("eles",!0),t.dragData.didDrag=!0,t.hoverData.draggingEles||y(qe,{inDragLayer:!0});var vt={x:0,y:0};if(_t(De[0])&&_t(De[1])&&(vt.x+=De[0],vt.y+=De[1],ft)){var nt=t.hoverData.dragDelta;nt&&_t(nt[0])&&_t(nt[1])&&(vt.x+=nt[0],vt.y+=nt[1])}t.hoverData.draggingEles=!0,qe.silentShift(vt).emit("position drag"),t.redrawHint("drag",!0),t.redraw()}}else Yt();ie=!0}if(Pe[2]=W[0],Pe[3]=W[1],ie)return q.stopPropagation&&q.stopPropagation(),q.preventDefault&&q.preventDefault(),!1}},"mousemoveHandler"),!1);var k,L,A;t.registerBinding(e,"mouseup",o(function(q){if(!(t.hoverData.which===1&&q.which!==1&&t.hoverData.capture)){var de=t.hoverData.capture;if(de){t.hoverData.capture=!1;var ie=t.cy,oe=t.projectIntoViewport(q.clientX,q.clientY),V=t.selection,Te=t.findNearestElement(oe[0],oe[1],!0,!1),W=t.dragData.possibleDragElements,pe=t.hoverData.down,ve=a(q);if(t.data.bgActivePosistion&&(t.redrawHint("select",!0),t.redraw()),t.hoverData.tapholdCancelled=!0,t.data.bgActivePosistion=void 0,pe&&pe.unactivate(),t.hoverData.which===3){var Pe={originalEvent:q,type:"cxttapend",position:{x:oe[0],y:oe[1]}};if(pe?pe.emit(Pe):ie.emit(Pe),!t.hoverData.cxtDragged){var _e={originalEvent:q,type:"cxttap",position:{x:oe[0],y:oe[1]}};pe?pe.emit(_e):ie.emit(_e)}t.hoverData.cxtDragged=!1,t.hoverData.which=null}else if(t.hoverData.which===1){if(i(Te,["mouseup","tapend","vmouseup"],q,{x:oe[0],y:oe[1]}),!t.dragData.didDrag&&!t.hoverData.dragged&&!t.hoverData.selecting&&!t.hoverData.isOverThresholdDrag&&(i(pe,["click","tap","vclick"],q,{x:oe[0],y:oe[1]}),L=!1,q.timeStamp-A<=ie.multiClickDebounceTime()?(k&&clearTimeout(k),L=!0,A=null,i(pe,["dblclick","dbltap","vdblclick"],q,{x:oe[0],y:oe[1]})):(k=setTimeout(function(){L||i(pe,["oneclick","onetap","voneclick"],q,{x:oe[0],y:oe[1]})},ie.multiClickDebounceTime()),A=q.timeStamp)),pe==null&&!t.dragData.didDrag&&!t.hoverData.selecting&&!t.hoverData.dragged&&!a(q)&&(ie.$(r).unselect(["tapunselect"]),W.length>0&&t.redrawHint("eles",!0),t.dragData.possibleDragElements=W=ie.collection()),Te==pe&&!t.dragData.didDrag&&!t.hoverData.selecting&&Te!=null&&Te._private.selectable&&(t.hoverData.dragging||(ie.selectionType()==="additive"||ve?Te.selected()?Te.unselect(["tapunselect"]):Te.select(["tapselect"]):ve||(ie.$(r).unmerge(Te).unselect(["tapunselect"]),Te.select(["tapselect"]))),t.redrawHint("eles",!0)),t.hoverData.selecting){var be=ie.collection(t.getAllInBox(V[0],V[1],V[2],V[3]));t.redrawHint("select",!0),be.length>0&&t.redrawHint("eles",!0),ie.emit({type:"boxend",originalEvent:q,position:{x:oe[0],y:oe[1]}});var Ve=o(function(at){return at.selectable()&&!at.selected()},"eleWouldBeSelected");ie.selectionType()==="additive"||ve||ie.$(r).unmerge(be).unselect(),be.emit("box").stdFilter(Ve).select().emit("boxselect"),t.redraw()}if(t.hoverData.dragging&&(t.hoverData.dragging=!1,t.redrawHint("select",!0),t.redrawHint("eles",!0),t.redraw()),!V[4]){t.redrawHint("drag",!0),t.redrawHint("eles",!0);var De=pe&&pe.grabbed();x(W),De&&(pe.emit("freeon"),W.emit("free"),t.dragData.didDrag&&(pe.emit("dragfreeon"),W.emit("dragfree")))}}V[4]=0,t.hoverData.down=null,t.hoverData.cxtStarted=!1,t.hoverData.draggingEles=!1,t.hoverData.selecting=!1,t.hoverData.isOverThresholdDrag=!1,t.dragData.didDrag=!1,t.hoverData.dragged=!1,t.hoverData.dragDelta=[],t.hoverData.mdownPos=null,t.hoverData.mdownGPos=null,t.hoverData.which=null}}},"mouseupHandler"),!1);var I=o(function(q){if(!t.scrollingPage){var de=t.cy,ie=de.zoom(),oe=de.pan(),V=t.projectIntoViewport(q.clientX,q.clientY),Te=[V[0]*ie+oe.x,V[1]*ie+oe.y];if(t.hoverData.draggingEles||t.hoverData.dragging||t.hoverData.cxtStarted||D()){q.preventDefault();return}if(de.panningEnabled()&&de.userPanningEnabled()&&de.zoomingEnabled()&&de.userZoomingEnabled()){q.preventDefault(),t.data.wheelZooming=!0,clearTimeout(t.data.wheelTimeout),t.data.wheelTimeout=setTimeout(function(){t.data.wheelZooming=!1,t.redrawHint("eles",!0),t.redraw()},150);var W;q.deltaY!=null?W=q.deltaY/-250:q.wheelDeltaY!=null?W=q.wheelDeltaY/1e3:W=q.wheelDelta/1e3,W=W*t.wheelSensitivity;var pe=q.deltaMode===1;pe&&(W*=33);var ve=de.zoom()*Math.pow(10,W);q.type==="gesturechange"&&(ve=t.gestureStartZoom*q.scale),de.zoom({level:ve,renderedPosition:{x:Te[0],y:Te[1]}}),de.emit(q.type==="gesturechange"?"pinchzoom":"scrollzoom")}}},"wheelHandler");t.registerBinding(t.container,"wheel",I,!0),t.registerBinding(e,"scroll",o(function(q){t.scrollingPage=!0,clearTimeout(t.scrollingPageTimeout),t.scrollingPageTimeout=setTimeout(function(){t.scrollingPage=!1},250)},"scrollHandler"),!0),t.registerBinding(t.container,"gesturestart",o(function(q){t.gestureStartZoom=t.cy.zoom(),t.hasTouchStarted||q.preventDefault()},"gestureStartHandler"),!0),t.registerBinding(t.container,"gesturechange",function(xe){t.hasTouchStarted||I(xe)},!0),t.registerBinding(t.container,"mouseout",o(function(q){var de=t.projectIntoViewport(q.clientX,q.clientY);t.cy.emit({originalEvent:q,type:"mouseout",position:{x:de[0],y:de[1]}})},"mouseOutHandler"),!1),t.registerBinding(t.container,"mouseover",o(function(q){var de=t.projectIntoViewport(q.clientX,q.clientY);t.cy.emit({originalEvent:q,type:"mouseover",position:{x:de[0],y:de[1]}})},"mouseOverHandler"),!1);var M,P,B,F,z,$,U,K,ee,Y,ce,Z,ue,Q=o(function(q,de,ie,oe){return Math.sqrt((ie-q)*(ie-q)+(oe-de)*(oe-de))},"distance"),j=o(function(q,de,ie,oe){return(ie-q)*(ie-q)+(oe-de)*(oe-de)},"distanceSq"),ne;t.registerBinding(t.container,"touchstart",ne=o(function(q){if(t.hasTouchStarted=!0,!!O(q)){T(),t.touchData.capture=!0,t.data.bgActivePosistion=void 0;var de=t.cy,ie=t.touchData.now,oe=t.touchData.earlier;if(q.touches[0]){var V=t.projectIntoViewport(q.touches[0].clientX,q.touches[0].clientY);ie[0]=V[0],ie[1]=V[1]}if(q.touches[1]){var V=t.projectIntoViewport(q.touches[1].clientX,q.touches[1].clientY);ie[2]=V[0],ie[3]=V[1]}if(q.touches[2]){var V=t.projectIntoViewport(q.touches[2].clientX,q.touches[2].clientY);ie[4]=V[0],ie[5]=V[1]}if(q.touches[1]){t.touchData.singleTouchMoved=!0,x(t.dragData.touchDragEles);var Te=t.findContainerClientCoords();ee=Te[0],Y=Te[1],ce=Te[2],Z=Te[3],M=q.touches[0].clientX-ee,P=q.touches[0].clientY-Y,B=q.touches[1].clientX-ee,F=q.touches[1].clientY-Y,ue=0<=M&&M<=ce&&0<=B&&B<=ce&&0<=P&&P<=Z&&0<=F&&F<=Z;var W=de.pan(),pe=de.zoom();z=Q(M,P,B,F),$=j(M,P,B,F),U=[(M+B)/2,(P+F)/2],K=[(U[0]-W.x)/pe,(U[1]-W.y)/pe];var ve=200,Pe=ve*ve;if($=1){for(var st=t.touchData.startPosition=[null,null,null,null,null,null],Ue=0;Ue=t.touchTapThreshold2}if(de&&t.touchData.cxt){q.preventDefault();var st=q.touches[0].clientX-ee,Ue=q.touches[0].clientY-Y,ct=q.touches[1].clientX-ee,We=q.touches[1].clientY-Y,ot=j(st,Ue,ct,We),Yt=ot/$,Tt=150,Mt=Tt*Tt,bt=1.5,ut=bt*bt;if(Yt>=ut||ot>=Mt){t.touchData.cxt=!1,t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);var St={originalEvent:q,type:"cxttapend",position:{x:V[0],y:V[1]}};t.touchData.start?(t.touchData.start.unactivate().emit(St),t.touchData.start=null):oe.emit(St)}}if(de&&t.touchData.cxt){var St={originalEvent:q,type:"cxtdrag",position:{x:V[0],y:V[1]}};t.data.bgActivePosistion=void 0,t.redrawHint("select",!0),t.touchData.start?t.touchData.start.emit(St):oe.emit(St),t.touchData.start&&(t.touchData.start._private.grabbed=!1),t.touchData.cxtDragged=!0;var ft=t.findNearestElement(V[0],V[1],!0,!0);(!t.touchData.cxtOver||ft!==t.touchData.cxtOver)&&(t.touchData.cxtOver&&t.touchData.cxtOver.emit({originalEvent:q,type:"cxtdragout",position:{x:V[0],y:V[1]}}),t.touchData.cxtOver=ft,ft&&ft.emit({originalEvent:q,type:"cxtdragover",position:{x:V[0],y:V[1]}}))}else if(de&&q.touches[2]&&oe.boxSelectionEnabled())q.preventDefault(),t.data.bgActivePosistion=void 0,this.lastThreeTouch=+new Date,t.touchData.selecting||oe.emit({originalEvent:q,type:"boxstart",position:{x:V[0],y:V[1]}}),t.touchData.selecting=!0,t.touchData.didSelect=!0,ie[4]=1,!ie||ie.length===0||ie[0]===void 0?(ie[0]=(V[0]+V[2]+V[4])/3,ie[1]=(V[1]+V[3]+V[5])/3,ie[2]=(V[0]+V[2]+V[4])/3+1,ie[3]=(V[1]+V[3]+V[5])/3+1):(ie[2]=(V[0]+V[2]+V[4])/3,ie[3]=(V[1]+V[3]+V[5])/3),t.redrawHint("select",!0),t.redraw();else if(de&&q.touches[1]&&!t.touchData.didSelect&&oe.zoomingEnabled()&&oe.panningEnabled()&&oe.userZoomingEnabled()&&oe.userPanningEnabled()){q.preventDefault(),t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);var vt=t.dragData.touchDragEles;if(vt){t.redrawHint("drag",!0);for(var nt=0;nt0&&!t.hoverData.draggingEles&&!t.swipePanning&&t.data.bgActivePosistion!=null&&(t.data.bgActivePosistion=void 0,t.redrawHint("select",!0),t.redraw())}},"touchmoveHandler"),!1);var he;t.registerBinding(e,"touchcancel",he=o(function(q){var de=t.touchData.start;t.touchData.capture=!1,de&&de.unactivate()},"touchcancelHandler"));var le,J,Se,se;if(t.registerBinding(e,"touchend",le=o(function(q){var de=t.touchData.start,ie=t.touchData.capture;if(ie)q.touches.length===0&&(t.touchData.capture=!1),q.preventDefault();else return;var oe=t.selection;t.swipePanning=!1,t.hoverData.draggingEles=!1;var V=t.cy,Te=V.zoom(),W=t.touchData.now,pe=t.touchData.earlier;if(q.touches[0]){var ve=t.projectIntoViewport(q.touches[0].clientX,q.touches[0].clientY);W[0]=ve[0],W[1]=ve[1]}if(q.touches[1]){var ve=t.projectIntoViewport(q.touches[1].clientX,q.touches[1].clientY);W[2]=ve[0],W[3]=ve[1]}if(q.touches[2]){var ve=t.projectIntoViewport(q.touches[2].clientX,q.touches[2].clientY);W[4]=ve[0],W[5]=ve[1]}de&&de.unactivate();var Pe;if(t.touchData.cxt){if(Pe={originalEvent:q,type:"cxttapend",position:{x:W[0],y:W[1]}},de?de.emit(Pe):V.emit(Pe),!t.touchData.cxtDragged){var _e={originalEvent:q,type:"cxttap",position:{x:W[0],y:W[1]}};de?de.emit(_e):V.emit(_e)}t.touchData.start&&(t.touchData.start._private.grabbed=!1),t.touchData.cxt=!1,t.touchData.start=null,t.redraw();return}if(!q.touches[2]&&V.boxSelectionEnabled()&&t.touchData.selecting){t.touchData.selecting=!1;var be=V.collection(t.getAllInBox(oe[0],oe[1],oe[2],oe[3]));oe[0]=void 0,oe[1]=void 0,oe[2]=void 0,oe[3]=void 0,oe[4]=0,t.redrawHint("select",!0),V.emit({type:"boxend",originalEvent:q,position:{x:W[0],y:W[1]}});var Ve=o(function(Mt){return Mt.selectable()&&!Mt.selected()},"eleWouldBeSelected");be.emit("box").stdFilter(Ve).select().emit("boxselect"),be.nonempty()&&t.redrawHint("eles",!0),t.redraw()}if(de?.unactivate(),q.touches[2])t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);else if(!q.touches[1]){if(!q.touches[0]){if(!q.touches[0]){t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);var De=t.dragData.touchDragEles;if(de!=null){var qe=de._private.grabbed;x(De),t.redrawHint("drag",!0),t.redrawHint("eles",!0),qe&&(de.emit("freeon"),De.emit("free"),t.dragData.didDrag&&(de.emit("dragfreeon"),De.emit("dragfree"))),i(de,["touchend","tapend","vmouseup","tapdragout"],q,{x:W[0],y:W[1]}),de.unactivate(),t.touchData.start=null}else{var at=t.findNearestElement(W[0],W[1],!0,!0);i(at,["touchend","tapend","vmouseup","tapdragout"],q,{x:W[0],y:W[1]})}var Rt=t.touchData.startPosition[0]-W[0],st=Rt*Rt,Ue=t.touchData.startPosition[1]-W[1],ct=Ue*Ue,We=st+ct,ot=We*Te*Te;t.touchData.singleTouchMoved||(de||V.$(":selected").unselect(["tapunselect"]),i(de,["tap","vclick"],q,{x:W[0],y:W[1]}),J=!1,q.timeStamp-se<=V.multiClickDebounceTime()?(Se&&clearTimeout(Se),J=!0,se=null,i(de,["dbltap","vdblclick"],q,{x:W[0],y:W[1]})):(Se=setTimeout(function(){J||i(de,["onetap","voneclick"],q,{x:W[0],y:W[1]})},V.multiClickDebounceTime()),se=q.timeStamp)),de!=null&&!t.dragData.didDrag&&de._private.selectable&&ot"u"){var ae=[],Oe=o(function(q){return{clientX:q.clientX,clientY:q.clientY,force:1,identifier:q.pointerId,pageX:q.pageX,pageY:q.pageY,radiusX:q.width/2,radiusY:q.height/2,screenX:q.screenX,screenY:q.screenY,target:q.target}},"makeTouch"),ye=o(function(q){return{event:q,touch:Oe(q)}},"makePointer"),Be=o(function(q){ae.push(ye(q))},"addPointer"),He=o(function(q){for(var de=0;de0)return U[0]}return null},"getCurveT"),g=Object.keys(p),y=0;y0?m:_ge(a,s,e,r,n,i,l,u)},"intersectLine"),checkPoint:o(function(e,r,n,i,a,s,l,u){u=u==="auto"?Zp(i,a):u;var h=2*u;if(ih(e,r,this.points,s,l,i,a-h,[0,-1],n)||ih(e,r,this.points,s,l,i-h,a,[0,-1],n))return!0;var f=i/2+2*n,d=a/2+2*n,p=[s-f,l-d,s-f,l,s+f,l,s+f,l-d];return!!(qs(e,r,p)||jp(e,r,h,h,s+i/2-u,l+a/2-u,n)||jp(e,r,h,h,s-i/2+u,l+a/2-u,n))},"checkPoint")}};sh.registerNodeShapes=function(){var t=this.nodeShapes={},e=this;this.generateEllipse(),this.generatePolygon("triangle",Ts(3,0)),this.generateRoundPolygon("round-triangle",Ts(3,0)),this.generatePolygon("rectangle",Ts(4,0)),t.square=t.rectangle,this.generateRoundRectangle(),this.generateCutRectangle(),this.generateBarrel(),this.generateBottomRoundrectangle();{var r=[0,1,1,0,0,-1,-1,0];this.generatePolygon("diamond",r),this.generateRoundPolygon("round-diamond",r)}this.generatePolygon("pentagon",Ts(5,0)),this.generateRoundPolygon("round-pentagon",Ts(5,0)),this.generatePolygon("hexagon",Ts(6,0)),this.generateRoundPolygon("round-hexagon",Ts(6,0)),this.generatePolygon("heptagon",Ts(7,0)),this.generateRoundPolygon("round-heptagon",Ts(7,0)),this.generatePolygon("octagon",Ts(8,0)),this.generateRoundPolygon("round-octagon",Ts(8,0));var n=new Array(20);{var i=bB(5,0),a=bB(5,Math.PI/5),s=.5*(3-Math.sqrt(5));s*=1.57;for(var l=0;l=e.deqFastCost*S)break}else if(h){if(b>=e.deqCost*m||b>=e.deqAvgCost*p)break}else if(T>=e.deqNoDrawCost*dB)break;var w=e.deq(n,v,y);if(w.length>0)for(var E=0;E0&&(e.onDeqd(n,g),!h&&e.shouldRedraw(n,g,v,y)&&a())},"dequeue"),l=e.priority||zB;i.beforeRender(s,l(n))}},"setupDequeueingImpl")},"setupDequeueing")},KZe=function(){function t(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:z6;Vf(this,t),this.idsByKey=new Zc,this.keyForId=new Zc,this.cachesByLvl=new Zc,this.lvls=[],this.getKey=e,this.doesEleInvalidateKey=r}return o(t,"ElementTextureCacheLookup"),Uf(t,[{key:"getIdsFor",value:o(function(r){r==null&&oi("Can not get id list for null key");var n=this.idsByKey,i=this.idsByKey.get(r);return i||(i=new ay,n.set(r,i)),i},"getIdsFor")},{key:"addIdForKey",value:o(function(r,n){r!=null&&this.getIdsFor(r).add(n)},"addIdForKey")},{key:"deleteIdForKey",value:o(function(r,n){r!=null&&this.getIdsFor(r).delete(n)},"deleteIdForKey")},{key:"getNumberOfIdsForKey",value:o(function(r){return r==null?0:this.getIdsFor(r).size},"getNumberOfIdsForKey")},{key:"updateKeyMappingFor",value:o(function(r){var n=r.id(),i=this.keyForId.get(n),a=this.getKey(r);this.deleteIdForKey(i,n),this.addIdForKey(a,n),this.keyForId.set(n,a)},"updateKeyMappingFor")},{key:"deleteKeyMappingFor",value:o(function(r){var n=r.id(),i=this.keyForId.get(n);this.deleteIdForKey(i,n),this.keyForId.delete(n)},"deleteKeyMappingFor")},{key:"keyHasChangedFor",value:o(function(r){var n=r.id(),i=this.keyForId.get(n),a=this.getKey(r);return i!==a},"keyHasChangedFor")},{key:"isInvalid",value:o(function(r){return this.keyHasChangedFor(r)||this.doesEleInvalidateKey(r)},"isInvalid")},{key:"getCachesAt",value:o(function(r){var n=this.cachesByLvl,i=this.lvls,a=n.get(r);return a||(a=new Zc,n.set(r,a),i.push(r)),a},"getCachesAt")},{key:"getCache",value:o(function(r,n){return this.getCachesAt(n).get(r)},"getCache")},{key:"get",value:o(function(r,n){var i=this.getKey(r),a=this.getCache(i,n);return a!=null&&this.updateKeyMappingFor(r),a},"get")},{key:"getForCachedKey",value:o(function(r,n){var i=this.keyForId.get(r.id()),a=this.getCache(i,n);return a},"getForCachedKey")},{key:"hasCache",value:o(function(r,n){return this.getCachesAt(n).has(r)},"hasCache")},{key:"has",value:o(function(r,n){var i=this.getKey(r);return this.hasCache(i,n)},"has")},{key:"setCache",value:o(function(r,n,i){i.key=r,this.getCachesAt(n).set(r,i)},"setCache")},{key:"set",value:o(function(r,n,i){var a=this.getKey(r);this.setCache(a,n,i),this.updateKeyMappingFor(r)},"set")},{key:"deleteCache",value:o(function(r,n){this.getCachesAt(n).delete(r)},"deleteCache")},{key:"delete",value:o(function(r,n){var i=this.getKey(r);this.deleteCache(i,n)},"_delete")},{key:"invalidateKey",value:o(function(r){var n=this;this.lvls.forEach(function(i){return n.deleteCache(r,i)})},"invalidateKey")},{key:"invalidate",value:o(function(r){var n=r.id(),i=this.keyForId.get(n);this.deleteKeyMappingFor(r);var a=this.doesEleInvalidateKey(r);return a&&this.invalidateKey(i),a||this.getNumberOfIdsForKey(i)===0},"invalidate")}]),t}(),Hme=25,C6=50,B6=-4,NB=3,L1e=7.99,QZe=8,ZZe=1024,JZe=1024,eJe=1024,tJe=.2,rJe=.8,nJe=10,iJe=.15,aJe=.1,sJe=.9,oJe=.9,lJe=100,cJe=1,K1={dequeue:"dequeue",downscale:"downscale",highQuality:"highQuality"},uJe=oa({getKey:null,doesEleInvalidateKey:z6,drawElement:null,getBoundingBox:null,getRotationPoint:null,getRotationOffset:null,isVisible:bge,allowEdgeTxrCaching:!0,allowParentTxrCaching:!0}),jb=o(function(e,r){var n=this;n.renderer=e,n.onDequeues=[];var i=uJe(r);ir(n,i),n.lookup=new KZe(i.getKey,i.doesEleInvalidateKey),n.setupDequeueing()},"ElementTextureCache"),Yi=jb.prototype;Yi.reasons=K1;Yi.getTextureQueue=function(t){var e=this;return e.eleImgCaches=e.eleImgCaches||{},e.eleImgCaches[t]=e.eleImgCaches[t]||[]};Yi.getRetiredTextureQueue=function(t){var e=this,r=e.eleImgCaches.retired=e.eleImgCaches.retired||{},n=r[t]=r[t]||[];return n};Yi.getElementQueue=function(){var t=this,e=t.eleCacheQueue=t.eleCacheQueue||new m4(function(r,n){return n.reqs-r.reqs});return e};Yi.getElementKeyToQueue=function(){var t=this,e=t.eleKeyToCacheQueue=t.eleKeyToCacheQueue||{};return e};Yi.getElement=function(t,e,r,n,i){var a=this,s=this.renderer,l=s.cy.zoom(),u=this.lookup;if(!e||e.w===0||e.h===0||isNaN(e.w)||isNaN(e.h)||!t.visible()||t.removed()||!a.allowEdgeTxrCaching&&t.isEdge()||!a.allowParentTxrCaching&&t.isParent())return null;if(n==null&&(n=Math.ceil(VB(l*r))),n=L1e||n>NB)return null;var h=Math.pow(2,n),f=e.h*h,d=e.w*h,p=s.eleTextBiggerThanMin(t,h);if(!this.isVisible(t,p))return null;var m=u.get(t,n);if(m&&m.invalidated&&(m.invalidated=!1,m.texture.invalidatedWidth-=m.width),m)return m;var g;if(f<=Hme?g=Hme:f<=C6?g=C6:g=Math.ceil(f/C6)*C6,f>eJe||d>JZe)return null;var y=a.getTextureQueue(g),v=y[y.length-2],x=o(function(){return a.recycleTexture(g,d)||a.addTexture(g,d)},"addNewTxr");v||(v=y[y.length-1]),v||(v=x()),v.width-v.usedWidthn;R--)D=a.getElement(t,e,r,R,K1.downscale);O()}else return a.queueElement(t,E.level-1),E;else{var k;if(!T&&!S&&!w)for(var L=n-1;L>=B6;L--){var A=u.get(t,L);if(A){k=A;break}}if(b(k))return a.queueElement(t,n),k;v.context.translate(v.usedWidth,0),v.context.scale(h,h),this.drawElement(v.context,t,e,p,!1),v.context.scale(1/h,1/h),v.context.translate(-v.usedWidth,0)}return m={x:v.usedWidth,texture:v,level:n,scale:h,width:d,height:f,scaledLabelShown:p},v.usedWidth+=Math.ceil(d+QZe),v.eleCaches.push(m),u.set(t,n,m),a.checkTextureFullness(v),m};Yi.invalidateElements=function(t){for(var e=0;e=tJe*t.width&&this.retireTexture(t)};Yi.checkTextureFullness=function(t){var e=this,r=e.getTextureQueue(t.height);t.usedWidth/t.width>rJe&&t.fullnessChecks>=nJe?Ff(r,t):t.fullnessChecks++};Yi.retireTexture=function(t){var e=this,r=t.height,n=e.getTextureQueue(r),i=this.lookup;Ff(n,t),t.retired=!0;for(var a=t.eleCaches,s=0;s=e)return s.retired=!1,s.usedWidth=0,s.invalidatedWidth=0,s.fullnessChecks=0,GB(s.eleCaches),s.context.setTransform(1,0,0,1,0,0),s.context.clearRect(0,0,s.width,s.height),Ff(i,s),n.push(s),s}};Yi.queueElement=function(t,e){var r=this,n=r.getElementQueue(),i=r.getElementKeyToQueue(),a=this.getKey(t),s=i[a];if(s)s.level=Math.max(s.level,e),s.eles.merge(t),s.reqs++,n.updateItem(s);else{var l={eles:t.spawn().merge(t),level:e,reqs:1,key:a};n.push(l),i[a]=l}};Yi.dequeue=function(t){for(var e=this,r=e.getElementQueue(),n=e.getElementKeyToQueue(),i=[],a=e.lookup,s=0;s0;s++){var l=r.pop(),u=l.key,h=l.eles[0],f=a.hasCache(h,l.level);if(n[u]=null,f)continue;i.push(l);var d=e.getBoundingBox(h);e.getElement(h,d,t,l.level,K1.dequeue)}return i};Yi.removeFromQueue=function(t){var e=this,r=e.getElementQueue(),n=e.getElementKeyToQueue(),i=this.getKey(t),a=n[i];a!=null&&(a.eles.length===1?(a.reqs=$B,r.updateItem(a),r.pop(),n[i]=null):a.eles.unmerge(t))};Yi.onDequeue=function(t){this.onDequeues.push(t)};Yi.offDequeue=function(t){Ff(this.onDequeues,t)};Yi.setupDequeueing=D1e.setupDequeueing({deqRedrawThreshold:lJe,deqCost:iJe,deqAvgCost:aJe,deqNoDrawCost:sJe,deqFastCost:oJe,deq:o(function(e,r,n){return e.dequeue(r,n)},"deq"),onDeqd:o(function(e,r){for(var n=0;n=fJe||r>X6)return null}n.validateLayersElesOrdering(r,t);var u=n.layersByLevel,h=Math.pow(2,r),f=u[r]=u[r]||[],d,p=n.levelIsComplete(r,t),m,g=o(function(){var O=o(function(I){if(n.validateLayersElesOrdering(I,t),n.levelIsComplete(I,t))return m=u[I],!0},"canUseAsTmpLvl"),R=o(function(I){if(!m)for(var M=r+I;Qb<=M&&M<=X6&&!O(M);M+=I);},"checkLvls");R(1),R(-1);for(var k=f.length-1;k>=0;k--){var L=f[k];L.invalid&&Ff(f,L)}},"checkTempLevels");if(!p)g();else return f;var y=o(function(){if(!d){d=Ys();for(var O=0;Oqme||L>qme)return null;var A=k*L;if(A>bJe)return null;var I=n.makeLayer(d,r);if(R!=null){var M=f.indexOf(R)+1;f.splice(M,0,I)}else(O.insert===void 0||O.insert)&&f.unshift(I);return I},"makeLayer");if(n.skipping&&!l)return null;for(var x=null,b=t.length/hJe,T=!l,S=0;S=b||!Age(x.bb,w.boundingBox()))&&(x=v({insert:!0,after:x}),!x))return null;m||T?n.queueLayer(x,w):n.drawEleInLayer(x,w,r,e),x.eles.push(w),_[r]=x}return m||(T?null:f)};Ca.getEleLevelForLayerLevel=function(t,e){return t};Ca.drawEleInLayer=function(t,e,r,n){var i=this,a=this.renderer,s=t.context,l=e.boundingBox();l.w===0||l.h===0||!e.visible()||(r=i.getEleLevelForLayerLevel(r,n),a.setImgSmoothing(s,!1),a.drawCachedElement(s,e,null,null,r,TJe),a.setImgSmoothing(s,!0))};Ca.levelIsComplete=function(t,e){var r=this,n=r.layersByLevel[t];if(!n||n.length===0)return!1;for(var i=0,a=0;a0||s.invalid)return!1;i+=s.eles.length}return i===e.length};Ca.validateLayersElesOrdering=function(t,e){var r=this.layersByLevel[t];if(r)for(var n=0;n0){e=!0;break}}return e};Ca.invalidateElements=function(t){var e=this;t.length!==0&&(e.lastInvalidationTime=nh(),!(t.length===0||!e.haveLayers())&&e.updateElementsInLayers(t,o(function(n,i,a){e.invalidateLayer(n)},"invalAssocLayers")))};Ca.invalidateLayer=function(t){if(this.lastInvalidationTime=nh(),!t.invalid){var e=t.level,r=t.eles,n=this.layersByLevel[e];Ff(n,t),t.elesQueue=[],t.invalid=!0,t.replacement&&(t.replacement.invalid=!0);for(var i=0;i3&&arguments[3]!==void 0?arguments[3]:!0,i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,a=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,s=this,l=e._private.rscratch;if(!(a&&!e.visible())&&!(l.badLine||l.allpts==null||isNaN(l.allpts[0]))){var u;r&&(u=r,t.translate(-u.x1,-u.y1));var h=a?e.pstyle("opacity").value:1,f=a?e.pstyle("line-opacity").value:1,d=e.pstyle("curve-style").value,p=e.pstyle("line-style").value,m=e.pstyle("width").pfValue,g=e.pstyle("line-cap").value,y=e.pstyle("line-outline-width").value,v=e.pstyle("line-outline-color").value,x=h*f,b=h*f,T=o(function(){var I=arguments.length>0&&arguments[0]!==void 0?arguments[0]:x;d==="straight-triangle"?(s.eleStrokeStyle(t,e,I),s.drawEdgeTrianglePath(e,t,l.allpts)):(t.lineWidth=m,t.lineCap=g,s.eleStrokeStyle(t,e,I),s.drawEdgePath(e,t,l.allpts,p),t.lineCap="butt")},"drawLine"),S=o(function(){var I=arguments.length>0&&arguments[0]!==void 0?arguments[0]:x;if(t.lineWidth=m+y,t.lineCap=g,y>0)s.colorStrokeStyle(t,v[0],v[1],v[2],I);else{t.lineCap="butt";return}d==="straight-triangle"?s.drawEdgeTrianglePath(e,t,l.allpts):(s.drawEdgePath(e,t,l.allpts,p),t.lineCap="butt")},"drawLineOutline"),w=o(function(){i&&s.drawEdgeOverlay(t,e)},"drawOverlay"),E=o(function(){i&&s.drawEdgeUnderlay(t,e)},"drawUnderlay"),_=o(function(){var I=arguments.length>0&&arguments[0]!==void 0?arguments[0]:b;s.drawArrowheads(t,e,I)},"drawArrows"),C=o(function(){s.drawElementText(t,e,null,n)},"drawText");t.lineJoin="round";var D=e.pstyle("ghost").value==="yes";if(D){var O=e.pstyle("ghost-offset-x").pfValue,R=e.pstyle("ghost-offset-y").pfValue,k=e.pstyle("ghost-opacity").value,L=x*k;t.translate(O,R),T(L),_(L),t.translate(-O,-R)}else S();E(),T(),_(),w(),C(),r&&t.translate(u.x1,u.y1)}};M1e=o(function(e){if(!["overlay","underlay"].includes(e))throw new Error("Invalid state");return function(r,n){if(n.visible()){var i=n.pstyle("".concat(e,"-opacity")).value;if(i!==0){var a=this,s=a.usePaths(),l=n._private.rscratch,u=n.pstyle("".concat(e,"-padding")).pfValue,h=2*u,f=n.pstyle("".concat(e,"-color")).value;r.lineWidth=h,l.edgeType==="self"&&!s?r.lineCap="butt":r.lineCap="round",a.colorStrokeStyle(r,f[0],f[1],f[2],i),a.drawEdgePath(n,r,l.allpts,"solid")}}}},"drawEdgeOverlayUnderlay");oh.drawEdgeOverlay=M1e("overlay");oh.drawEdgeUnderlay=M1e("underlay");oh.drawEdgePath=function(t,e,r,n){var i=t._private.rscratch,a=e,s,l=!1,u=this.usePaths(),h=t.pstyle("line-dash-pattern").pfValue,f=t.pstyle("line-dash-offset").pfValue;if(u){var d=r.join("$"),p=i.pathCacheKey&&i.pathCacheKey===d;p?(s=e=i.pathCache,l=!0):(s=e=new Path2D,i.pathCacheKey=d,i.pathCache=s)}if(a.setLineDash)switch(n){case"dotted":a.setLineDash([1,1]);break;case"dashed":a.setLineDash(h),a.lineDashOffset=f;break;case"solid":a.setLineDash([]);break}if(!l&&!i.badLine)switch(e.beginPath&&e.beginPath(),e.moveTo(r[0],r[1]),i.edgeType){case"bezier":case"self":case"compound":case"multibezier":for(var m=2;m+35&&arguments[5]!==void 0?arguments[5]:!0,s=this;if(n==null){if(a&&!s.eleTextBiggerThanMin(e))return}else if(n===!1)return;if(e.isNode()){var l=e.pstyle("label");if(!l||!l.value)return;var u=s.getLabelJustification(e);t.textAlign=u,t.textBaseline="bottom"}else{var h=e.element()._private.rscratch.badLine,f=e.pstyle("label"),d=e.pstyle("source-label"),p=e.pstyle("target-label");if(h||(!f||!f.value)&&(!d||!d.value)&&(!p||!p.value))return;t.textAlign="center",t.textBaseline="bottom"}var m=!r,g;r&&(g=r,t.translate(-g.x1,-g.y1)),i==null?(s.drawText(t,e,null,m,a),e.isEdge()&&(s.drawText(t,e,"source",m,a),s.drawText(t,e,"target",m,a))):s.drawText(t,e,i,m,a),r&&t.translate(g.x1,g.y1)};n0.getFontCache=function(t){var e;this.fontCaches=this.fontCaches||[];for(var r=0;r2&&arguments[2]!==void 0?arguments[2]:!0,n=e.pstyle("font-style").strValue,i=e.pstyle("font-size").pfValue+"px",a=e.pstyle("font-family").strValue,s=e.pstyle("font-weight").strValue,l=r?e.effectiveOpacity()*e.pstyle("text-opacity").value:1,u=e.pstyle("text-outline-opacity").value*l,h=e.pstyle("color").value,f=e.pstyle("text-outline-color").value;t.font=n+" "+s+" "+i+" "+a,t.lineJoin="round",this.colorFillStyle(t,h[0],h[1],h[2],l),this.colorStrokeStyle(t,f[0],f[1],f[2],u)};o(mB,"roundRect");n0.getTextAngle=function(t,e){var r,n=t._private,i=n.rscratch,a=e?e+"-":"",s=t.pstyle(a+"text-rotation");if(s.strValue==="autorotate"){var l=Wl(i,"labelAngle",e);r=t.isEdge()?l:0}else s.strValue==="none"?r=0:r=s.pfValue;return r};n0.drawText=function(t,e,r){var n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,a=e._private,s=a.rscratch,l=i?e.effectiveOpacity():1;if(!(i&&(l===0||e.pstyle("text-opacity").value===0))){r==="main"&&(r=null);var u=Wl(s,"labelX",r),h=Wl(s,"labelY",r),f,d,p=this.getLabelText(e,r);if(p!=null&&p!==""&&!isNaN(u)&&!isNaN(h)){this.setupTextStyle(t,e,i);var m=r?r+"-":"",g=Wl(s,"labelWidth",r),y=Wl(s,"labelHeight",r),v=e.pstyle(m+"text-margin-x").pfValue,x=e.pstyle(m+"text-margin-y").pfValue,b=e.isEdge(),T=e.pstyle("text-halign").value,S=e.pstyle("text-valign").value;b&&(T="center",S="center"),u+=v,h+=x;var w;switch(n?w=this.getTextAngle(e,r):w=0,w!==0&&(f=u,d=h,t.translate(f,d),t.rotate(w),u=0,h=0),S){case"top":break;case"center":h+=y/2;break;case"bottom":h+=y;break}var E=e.pstyle("text-background-opacity").value,_=e.pstyle("text-border-opacity").value,C=e.pstyle("text-border-width").pfValue,D=e.pstyle("text-background-padding").pfValue,O=e.pstyle("text-background-shape").strValue,R=O.indexOf("round")===0,k=2;if(E>0||C>0&&_>0){var L=u-D;switch(T){case"left":L-=g;break;case"center":L-=g/2;break}var A=h-y-D,I=g+2*D,M=y+2*D;if(E>0){var P=t.fillStyle,B=e.pstyle("text-background-color").value;t.fillStyle="rgba("+B[0]+","+B[1]+","+B[2]+","+E*l+")",R?mB(t,L,A,I,M,k):t.fillRect(L,A,I,M),t.fillStyle=P}if(C>0&&_>0){var F=t.strokeStyle,z=t.lineWidth,$=e.pstyle("text-border-color").value,U=e.pstyle("text-border-style").value;if(t.strokeStyle="rgba("+$[0]+","+$[1]+","+$[2]+","+_*l+")",t.lineWidth=C,t.setLineDash)switch(U){case"dotted":t.setLineDash([1,1]);break;case"dashed":t.setLineDash([4,2]);break;case"double":t.lineWidth=C/4,t.setLineDash([]);break;case"solid":t.setLineDash([]);break}if(R?mB(t,L,A,I,M,k,"stroke"):t.strokeRect(L,A,I,M),U==="double"){var K=C/2;R?mB(t,L+K,A+K,I-K*2,M-K*2,k,"stroke"):t.strokeRect(L+K,A+K,I-K*2,M-K*2)}t.setLineDash&&t.setLineDash([]),t.lineWidth=z,t.strokeStyle=F}}var ee=2*e.pstyle("text-outline-width").pfValue;if(ee>0&&(t.lineWidth=ee),e.pstyle("text-wrap").value==="wrap"){var Y=Wl(s,"labelWrapCachedLines",r),ce=Wl(s,"labelLineHeight",r),Z=g/2,ue=this.getLabelJustification(e);switch(ue==="auto"||(T==="left"?ue==="left"?u+=-g:ue==="center"&&(u+=-Z):T==="center"?ue==="left"?u+=-Z:ue==="right"&&(u+=Z):T==="right"&&(ue==="center"?u+=Z:ue==="right"&&(u+=g))),S){case"top":h-=(Y.length-1)*ce;break;case"center":case"bottom":h-=(Y.length-1)*ce;break}for(var Q=0;Q0&&t.strokeText(Y[Q],u,h),t.fillText(Y[Q],u,h),h+=ce}else ee>0&&t.strokeText(p,u,h),t.fillText(p,u,h);w!==0&&(t.rotate(-w),t.translate(-f,-d))}}};py={};py.drawNode=function(t,e,r){var n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,a=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,s=this,l,u,h=e._private,f=h.rscratch,d=e.position();if(!(!_t(d.x)||!_t(d.y))&&!(a&&!e.visible())){var p=a?e.effectiveOpacity():1,m=s.usePaths(),g,y=!1,v=e.padding();l=e.width()+2*v,u=e.height()+2*v;var x;r&&(x=r,t.translate(-x.x1,-x.y1));for(var b=e.pstyle("background-image"),T=b.value,S=new Array(T.length),w=new Array(T.length),E=0,_=0;_0&&arguments[0]!==void 0?arguments[0]:L;s.eleFillStyle(t,e,oe)},"setupShapeColor"),Q=o(function(){var oe=arguments.length>0&&arguments[0]!==void 0?arguments[0]:$;s.colorStrokeStyle(t,A[0],A[1],A[2],oe)},"setupBorderColor"),j=o(function(){var oe=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Y;s.colorStrokeStyle(t,K[0],K[1],K[2],oe)},"setupOutlineColor"),ne=o(function(oe,V,Te,W){var pe=s.nodePathCache=s.nodePathCache||[],ve=xge(Te==="polygon"?Te+","+W.join(","):Te,""+V,""+oe,""+Z),Pe=pe[ve],_e,be=!1;return Pe!=null?(_e=Pe,be=!0,f.pathCache=_e):(_e=new Path2D,pe[ve]=f.pathCache=_e),{path:_e,cacheHit:be}},"getPath"),te=e.pstyle("shape").strValue,he=e.pstyle("shape-polygon-points").pfValue;if(m){t.translate(d.x,d.y);var le=ne(l,u,te,he);g=le.path,y=le.cacheHit}var J=o(function(){if(!y){var oe=d;m&&(oe={x:0,y:0}),s.nodeShapes[s.getNodeShape(e)].draw(g||t,oe.x,oe.y,l,u,Z,f)}m?t.fill(g):t.fill()},"drawShape"),Se=o(function(){for(var oe=arguments.length>0&&arguments[0]!==void 0?arguments[0]:p,V=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,Te=h.backgrounding,W=0,pe=0;pe0&&arguments[0]!==void 0?arguments[0]:!1,V=arguments.length>1&&arguments[1]!==void 0?arguments[1]:p;s.hasPie(e)&&(s.drawPie(t,e,V),oe&&(m||s.nodeShapes[s.getNodeShape(e)].draw(t,d.x,d.y,l,u,Z,f)))},"drawPie"),ae=o(function(){var oe=arguments.length>0&&arguments[0]!==void 0?arguments[0]:p,V=(R>0?R:-R)*oe,Te=R>0?0:255;R!==0&&(s.colorFillStyle(t,Te,Te,Te,V),m?t.fill(g):t.fill())},"darken"),Oe=o(function(){if(k>0){if(t.lineWidth=k,t.lineCap=P,t.lineJoin=M,t.setLineDash)switch(I){case"dotted":t.setLineDash([1,1]);break;case"dashed":t.setLineDash(F),t.lineDashOffset=z;break;case"solid":case"double":t.setLineDash([]);break}if(B!=="center"){if(t.save(),t.lineWidth*=2,B==="inside")m?t.clip(g):t.clip();else{var oe=new Path2D;oe.rect(-l/2-k,-u/2-k,l+2*k,u+2*k),oe.addPath(g),t.clip(oe,"evenodd")}m?t.stroke(g):t.stroke(),t.restore()}else m?t.stroke(g):t.stroke();if(I==="double"){t.lineWidth=k/3;var V=t.globalCompositeOperation;t.globalCompositeOperation="destination-out",m?t.stroke(g):t.stroke(),t.globalCompositeOperation=V}t.setLineDash&&t.setLineDash([])}},"drawBorder"),ye=o(function(){if(U>0){if(t.lineWidth=U,t.lineCap="butt",t.setLineDash)switch(ee){case"dotted":t.setLineDash([1,1]);break;case"dashed":t.setLineDash([4,2]);break;case"solid":case"double":t.setLineDash([]);break}var oe=d;m&&(oe={x:0,y:0});var V=s.getNodeShape(e),Te=k;B==="inside"&&(Te=0),B==="outside"&&(Te*=2);var W=(l+Te+(U+ce))/l,pe=(u+Te+(U+ce))/u,ve=l*W,Pe=u*pe,_e=s.nodeShapes[V].points,be;if(m){var Ve=ne(ve,Pe,V,_e);be=Ve.path}if(V==="ellipse")s.drawEllipsePath(be||t,oe.x,oe.y,ve,Pe);else if(["round-diamond","round-heptagon","round-hexagon","round-octagon","round-pentagon","round-polygon","round-triangle","round-tag"].includes(V)){var De=0,qe=0,at=0;V==="round-diamond"?De=(Te+ce+U)*1.4:V==="round-heptagon"?(De=(Te+ce+U)*1.075,at=-(Te/2+ce+U)/35):V==="round-hexagon"?De=(Te+ce+U)*1.12:V==="round-pentagon"?(De=(Te+ce+U)*1.13,at=-(Te/2+ce+U)/15):V==="round-tag"?(De=(Te+ce+U)*1.12,qe=(Te/2+U+ce)*.07):V==="round-triangle"&&(De=(Te+ce+U)*(Math.PI/2),at=-(Te+ce/2+U)/Math.PI),De!==0&&(W=(l+De)/l,ve=l*W,["round-hexagon","round-tag"].includes(V)||(pe=(u+De)/u,Pe=u*pe)),Z=Z==="auto"?Lge(ve,Pe):Z;for(var Rt=ve/2,st=Pe/2,Ue=Z+(Te+U+ce)/2,ct=new Array(_e.length/2),We=new Array(_e.length/2),ot=0;ot<_e.length/2;ot++)ct[ot]={x:oe.x+qe+Rt*_e[ot*2],y:oe.y+at+st*_e[ot*2+1]};var Yt,Tt,Mt,bt,ut=ct.length;for(Tt=ct[ut-1],Yt=0;Yt0){if(i=i||n.position(),a==null||s==null){var m=n.padding();a=n.width()+2*m,s=n.height()+2*m}l.colorFillStyle(r,f[0],f[1],f[2],h),l.nodeShapes[d].draw(r,i.x,i.y,a+u*2,s+u*2,p),r.fill()}}}},"drawNodeOverlayUnderlay");py.drawNodeOverlay=I1e("overlay");py.drawNodeUnderlay=I1e("underlay");py.hasPie=function(t){return t=t[0],t._private.hasPie};py.drawPie=function(t,e,r,n){e=e[0],n=n||e.position();var i=e.cy().style(),a=e.pstyle("pie-size"),s=n.x,l=n.y,u=e.width(),h=e.height(),f=Math.min(u,h)/2,d=0,p=this.usePaths();p&&(s=0,l=0),a.units==="%"?f=f*a.pfValue:a.pfValue!==void 0&&(f=a.pfValue/2);for(var m=1;m<=i.pieBackgroundN;m++){var g=e.pstyle("pie-"+m+"-background-size").value,y=e.pstyle("pie-"+m+"-background-color").value,v=e.pstyle("pie-"+m+"-background-opacity").value*r,x=g/100;x+d>1&&(x=1-d);var b=1.5*Math.PI+2*Math.PI*d,T=2*Math.PI*x,S=b+T;g===0||d>=1||d+x>1||(t.beginPath(),t.moveTo(s,l),t.arc(s,l,f,b,S),t.closePath(),this.colorFillStyle(t,y[0],y[1],y[2],v),t.fill(),d+=x)}};ws={},NJe=100;ws.getPixelRatio=function(){var t=this.data.contexts[0];if(this.forcedPixelRatio!=null)return this.forcedPixelRatio;var e=this.cy.window(),r=t.backingStorePixelRatio||t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1;return(e.devicePixelRatio||1)/r};ws.paintCache=function(t){for(var e=this.paintCaches=this.paintCaches||[],r=!0,n,i=0;ie.minMbLowQualFrames&&(e.motionBlurPxRatio=e.mbPxRBlurry)),e.clearingMotionBlur&&(e.motionBlurPxRatio=1),e.textureDrawLastFrame&&!d&&(f[e.NODE]=!0,f[e.SELECT_BOX]=!0);var b=r.style(),T=r.zoom(),S=s!==void 0?s:T,w=r.pan(),E={x:w.x,y:w.y},_={zoom:T,pan:{x:w.x,y:w.y}},C=e.prevViewport,D=C===void 0||_.zoom!==C.zoom||_.pan.x!==C.pan.x||_.pan.y!==C.pan.y;!D&&!(y&&!g)&&(e.motionBlurPxRatio=1),l&&(E=l),S*=u,E.x*=u,E.y*=u;var O=e.getCachedZSortedEles();function R(Q,j,ne,te,he){var le=Q.globalCompositeOperation;Q.globalCompositeOperation="destination-out",e.colorFillStyle(Q,255,255,255,e.motionBlurTransparency),Q.fillRect(j,ne,te,he),Q.globalCompositeOperation=le}o(R,"mbclear");function k(Q,j){var ne,te,he,le;!e.clearingMotionBlur&&(Q===h.bufferContexts[e.MOTIONBLUR_BUFFER_NODE]||Q===h.bufferContexts[e.MOTIONBLUR_BUFFER_DRAG])?(ne={x:w.x*m,y:w.y*m},te=T*m,he=e.canvasWidth*m,le=e.canvasHeight*m):(ne=E,te=S,he=e.canvasWidth,le=e.canvasHeight),Q.setTransform(1,0,0,1,0,0),j==="motionBlur"?R(Q,0,0,he,le):!n&&(j===void 0||j)&&Q.clearRect(0,0,he,le),i||(Q.translate(ne.x,ne.y),Q.scale(te,te)),l&&Q.translate(l.x,l.y),s&&Q.scale(s,s)}if(o(k,"setContextTransform"),d||(e.textureDrawLastFrame=!1),d){if(e.textureDrawLastFrame=!0,!e.textureCache){e.textureCache={},e.textureCache.bb=r.mutableElements().boundingBox(),e.textureCache.texture=e.data.bufferCanvases[e.TEXTURE_BUFFER];var L=e.data.bufferContexts[e.TEXTURE_BUFFER];L.setTransform(1,0,0,1,0,0),L.clearRect(0,0,e.canvasWidth*e.textureMult,e.canvasHeight*e.textureMult),e.render({forcedContext:L,drawOnlyNodeLayer:!0,forcedPxRatio:u*e.textureMult});var _=e.textureCache.viewport={zoom:r.zoom(),pan:r.pan(),width:e.canvasWidth,height:e.canvasHeight};_.mpan={x:(0-_.pan.x)/_.zoom,y:(0-_.pan.y)/_.zoom}}f[e.DRAG]=!1,f[e.NODE]=!1;var A=h.contexts[e.NODE],I=e.textureCache.texture,_=e.textureCache.viewport;A.setTransform(1,0,0,1,0,0),p?R(A,0,0,_.width,_.height):A.clearRect(0,0,_.width,_.height);var M=b.core("outside-texture-bg-color").value,P=b.core("outside-texture-bg-opacity").value;e.colorFillStyle(A,M[0],M[1],M[2],P),A.fillRect(0,0,_.width,_.height);var T=r.zoom();k(A,!1),A.clearRect(_.mpan.x,_.mpan.y,_.width/_.zoom/u,_.height/_.zoom/u),A.drawImage(I,_.mpan.x,_.mpan.y,_.width/_.zoom/u,_.height/_.zoom/u)}else e.textureOnViewport&&!n&&(e.textureCache=null);var B=r.extent(),F=e.pinching||e.hoverData.dragging||e.swipePanning||e.data.wheelZooming||e.hoverData.draggingEles||e.cy.animated(),z=e.hideEdgesOnViewport&&F,$=[];if($[e.NODE]=!f[e.NODE]&&p&&!e.clearedForMotionBlur[e.NODE]||e.clearingMotionBlur,$[e.NODE]&&(e.clearedForMotionBlur[e.NODE]=!0),$[e.DRAG]=!f[e.DRAG]&&p&&!e.clearedForMotionBlur[e.DRAG]||e.clearingMotionBlur,$[e.DRAG]&&(e.clearedForMotionBlur[e.DRAG]=!0),f[e.NODE]||i||a||$[e.NODE]){var U=p&&!$[e.NODE]&&m!==1,A=n||(U?e.data.bufferContexts[e.MOTIONBLUR_BUFFER_NODE]:h.contexts[e.NODE]),K=p&&!U?"motionBlur":void 0;k(A,K),z?e.drawCachedNodes(A,O.nondrag,u,B):e.drawLayeredElements(A,O.nondrag,u,B),e.debug&&e.drawDebugPoints(A,O.nondrag),!i&&!p&&(f[e.NODE]=!1)}if(!a&&(f[e.DRAG]||i||$[e.DRAG])){var U=p&&!$[e.DRAG]&&m!==1,A=n||(U?e.data.bufferContexts[e.MOTIONBLUR_BUFFER_DRAG]:h.contexts[e.DRAG]);k(A,p&&!U?"motionBlur":void 0),z?e.drawCachedNodes(A,O.drag,u,B):e.drawCachedElements(A,O.drag,u,B),e.debug&&e.drawDebugPoints(A,O.drag),!i&&!p&&(f[e.DRAG]=!1)}if(this.drawSelectionRectangle(t,k),p&&m!==1){var ee=h.contexts[e.NODE],Y=e.data.bufferCanvases[e.MOTIONBLUR_BUFFER_NODE],ce=h.contexts[e.DRAG],Z=e.data.bufferCanvases[e.MOTIONBLUR_BUFFER_DRAG],ue=o(function(j,ne,te){j.setTransform(1,0,0,1,0,0),te||!x?j.clearRect(0,0,e.canvasWidth,e.canvasHeight):R(j,0,0,e.canvasWidth,e.canvasHeight);var he=m;j.drawImage(ne,0,0,e.canvasWidth*he,e.canvasHeight*he,0,0,e.canvasWidth,e.canvasHeight)},"drawMotionBlur");(f[e.NODE]||$[e.NODE])&&(ue(ee,Y,$[e.NODE]),f[e.NODE]=!1),(f[e.DRAG]||$[e.DRAG])&&(ue(ce,Z,$[e.DRAG]),f[e.DRAG]=!1)}e.prevViewport=_,e.clearingMotionBlur&&(e.clearingMotionBlur=!1,e.motionBlurCleared=!0,e.motionBlur=!0),p&&(e.motionBlurTimeout=setTimeout(function(){e.motionBlurTimeout=null,e.clearedForMotionBlur[e.NODE]=!1,e.clearedForMotionBlur[e.DRAG]=!1,e.motionBlur=!1,e.clearingMotionBlur=!d,e.mbFrames=0,f[e.NODE]=!0,f[e.DRAG]=!0,e.redraw()},NJe)),n||r.emit("render")};ws.drawSelectionRectangle=function(t,e){var r=this,n=r.cy,i=r.data,a=n.style(),s=t.drawOnlyNodeLayer,l=t.drawAllLayers,u=i.canvasNeedsRedraw,h=t.forcedContext;if(r.showFps||!s&&u[r.SELECT_BOX]&&!l){var f=h||i.contexts[r.SELECT_BOX];if(e(f),r.selection[4]==1&&(r.hoverData.selecting||r.touchData.selecting)){var d=r.cy.zoom(),p=a.core("selection-box-border-width").value/d;f.lineWidth=p,f.fillStyle="rgba("+a.core("selection-box-color").value[0]+","+a.core("selection-box-color").value[1]+","+a.core("selection-box-color").value[2]+","+a.core("selection-box-opacity").value+")",f.fillRect(r.selection[0],r.selection[1],r.selection[2]-r.selection[0],r.selection[3]-r.selection[1]),p>0&&(f.strokeStyle="rgba("+a.core("selection-box-border-color").value[0]+","+a.core("selection-box-border-color").value[1]+","+a.core("selection-box-border-color").value[2]+","+a.core("selection-box-opacity").value+")",f.strokeRect(r.selection[0],r.selection[1],r.selection[2]-r.selection[0],r.selection[3]-r.selection[1]))}if(i.bgActivePosistion&&!r.hoverData.selecting){var d=r.cy.zoom(),m=i.bgActivePosistion;f.fillStyle="rgba("+a.core("active-bg-color").value[0]+","+a.core("active-bg-color").value[1]+","+a.core("active-bg-color").value[2]+","+a.core("active-bg-opacity").value+")",f.beginPath(),f.arc(m.x,m.y,a.core("active-bg-size").pfValue/d,0,2*Math.PI),f.fill()}var g=r.lastRedrawTime;if(r.showFps&&g){g=Math.round(g);var y=Math.round(1e3/g),v="1 frame = "+g+" ms = "+y+" fps";if(f.setTransform(1,0,0,1,0,0),f.fillStyle="rgba(255, 0, 0, 0.75)",f.strokeStyle="rgba(255, 0, 0, 0.75)",f.font="30px Arial",!Ub){var x=f.measureText(v);Ub=x.actualBoundingBoxAscent}f.fillText(v,0,Ub);var b=60;f.strokeRect(0,Ub+10,250,20),f.fillRect(0,Ub+10,250*Math.min(y/b,1),20)}l||(u[r.SELECT_BOX]=!1)}};o(Kme,"compileShader");o(MJe,"createProgram");o(IJe,"createTextureCanvas");o(aF,"getEffectivePanZoom");o(gB,"modelToRenderedPosition");o(A6,"toWebGLColor");o(_6,"indexToVec4");o(OJe,"vec4ToIndex");o(PJe,"createTexture");o(O1e,"getTypeInfo");o(P1e,"createTypedArray");o(BJe,"createTypedArrayView");o(FJe,"createBufferStaticDraw");o(yo,"createBufferDynamicDraw");o($Je,"createPickingFrameBuffer");Qme=typeof Float32Array<"u"?Float32Array:Array;Math.hypot||(Math.hypot=function(){for(var t=0,e=arguments.length;e--;)t+=arguments[e]*arguments[e];return Math.sqrt(t)});o(Zb,"create");o(B1e,"identity");o(zJe,"multiply");o(j6,"translate");o(F1e,"rotate");o(sF,"scale");o(GJe,"projection");Jb={SCREEN:{name:"screen",screen:!0},PICKING:{name:"picking",picking:!0}},Hb=oa({getKey:null,drawElement:null,getBoundingBox:null,getRotation:null,getRotationPoint:null,getRotationOffset:null,isVisible:null,getPadding:null}),VJe=function(){function t(e,r){Vf(this,t),this.debugID=Math.floor(Math.random()*1e4),this.r=e,this.atlasSize=r.webglTexSize,this.rows=r.webglTexRows,this.enableWrapping=r.enableWrapping,this.texHeight=Math.floor(this.atlasSize/this.rows),this.maxTexWidth=this.atlasSize,this.texture=null,this.canvas=null,this.needsBuffer=!0,this.freePointer={x:0,row:0},this.keyToLocation=new Map,this.canvas=r.createTextureCanvas(e,this.atlasSize,this.atlasSize),this.scratch=r.createTextureCanvas(e,this.atlasSize,this.texHeight,"scratch")}return o(t,"Atlas"),Uf(t,[{key:"getKeys",value:o(function(){return new Set(this.keyToLocation.keys())},"getKeys")},{key:"getScale",value:o(function(r){var n=r.w,i=r.h,a=this.texHeight,s=this.maxTexWidth,l=a/i,u=n*l,h=i*l;return u>s&&(l=s/n,u=n*l,h=i*l),{scale:l,texW:u,texH:h}},"getScale")},{key:"draw",value:o(function(r,n,i){var a=this,s=this.atlasSize,l=this.rows,u=this.texHeight,h=this.getScale(n),f=h.scale,d=h.texW,p=h.texH,m=[null,null],g=o(function(T,S){if(i&&S){var w=S.context,E=T.x,_=T.row,C=E,D=u*_;w.save(),w.translate(C,D),w.scale(f,f),i(w,n),w.restore()}},"drawAt"),y=o(function(){g(a.freePointer,a.canvas),m[0]={x:a.freePointer.x,y:a.freePointer.row*u,w:d,h:p},m[1]={x:a.freePointer.x+d,y:a.freePointer.row*u,w:0,h:p},a.freePointer.x+=d,a.freePointer.x==s&&(a.freePointer.x=0,a.freePointer.row++)},"drawNormal"),v=o(function(){var T=a.scratch,S=a.canvas;T.clear(),g({x:0,row:0},T);var w=s-a.freePointer.x,E=d-w,_=u;{var C=a.freePointer.x,D=a.freePointer.row*u,O=w;S.context.drawImage(T,0,0,O,_,C,D,O,_),m[0]={x:C,y:D,w:O,h:p}}{var R=w,k=(a.freePointer.row+1)*u,L=E;S&&S.context.drawImage(T,R,0,L,_,0,k,L,_),m[1]={x:0,y:k,w:L,h:p}}a.freePointer.x=E,a.freePointer.row++},"drawWrapped"),x=o(function(){a.freePointer.x=0,a.freePointer.row++},"moveToStartOfNextRow");if(this.freePointer.x+d<=s)y();else{if(this.freePointer.row>=l-1)return!1;this.freePointer.x===s?(x(),y()):this.enableWrapping?v():(x(),y())}return this.keyToLocation.set(r,m),this.needsBuffer=!0,m},"draw")},{key:"getOffsets",value:o(function(r){return this.keyToLocation.get(r)},"getOffsets")},{key:"isEmpty",value:o(function(){return this.freePointer.x===0&&this.freePointer.row===0},"isEmpty")},{key:"canFit",value:o(function(r){var n=this.atlasSize,i=this.rows,a=this.getScale(r),s=a.texW;return this.freePointer.x+s>n?this.freePointer.row1&&arguments[1]!==void 0?arguments[1]:{},i=n.forceRedraw,a=i===void 0?!1:i,s=n.filterEle,l=s===void 0?function(){return!0}:s,u=n.filterType,h=u===void 0?function(){return!0}:u,f=!1,d=vo(r),p;try{for(d.s();!(p=d.n()).done;){var m=p.value;if(l(m)){var g=m.id(),y=vo(this.getRenderTypes()),v;try{for(y.s();!(v=y.n()).done;){var x=v.value;if(h(x.type)){var b=x.getKey(m);a?(x.atlasCollection.deleteKey(g,b),x.atlasCollection.styleKeyNeedsRedraw.add(b),f=!0):f|=x.atlasCollection.checkKeyIsInvalid(g,b)}}}catch(T){y.e(T)}finally{y.f()}}}}catch(T){d.e(T)}finally{d.f()}return f},"invalidate")},{key:"gc",value:o(function(){var r=vo(this.getRenderTypes()),n;try{for(r.s();!(n=r.n()).done;){var i=n.value;i.atlasCollection.gc()}}catch(a){r.e(a)}finally{r.f()}},"gc")},{key:"isRenderable",value:o(function(r,n){var i=this.getRenderTypeOpts(n);return i&&i.isVisible(r)},"isRenderable")},{key:"startBatch",value:o(function(){this.batchAtlases=[]},"startBatch")},{key:"getAtlasCount",value:o(function(){return this.batchAtlases.length},"getAtlasCount")},{key:"getAtlases",value:o(function(){return this.batchAtlases},"getAtlases")},{key:"getOrCreateAtlas",value:o(function(r,n,i){var a=this.renderTypes.get(i),s=a.getKey(r),l=r.id();return a.atlasCollection.draw(l,s,n,function(u){a.drawElement(u,r,n,!0,!0)})},"getOrCreateAtlas")},{key:"getAtlasIndexForBatch",value:o(function(r){var n=this.batchAtlases.indexOf(r);if(n<0){if(this.batchAtlases.length===this.maxAtlasesPerBatch)return;this.batchAtlases.push(r),n=this.batchAtlases.length-1}return n},"getAtlasIndexForBatch")},{key:"getIndexArray",value:o(function(){return Array.from({length:this.maxAtlases},function(r,n){return n})},"getIndexArray")},{key:"getAtlasInfo",value:o(function(r,n){var i=this.renderTypes.get(n),a=i.getBoundingBox(r),s=this.getOrCreateAtlas(r,a,n),l=this.getAtlasIndexForBatch(s);if(l!==void 0){var u=i.getKey(r),h=s.getOffsets(u),f=Ri(h,2),d=f[0],p=f[1];return{atlasID:l,tex:d,tex1:d,tex2:p,bb:a,type:n,styleKey:u}}},"getAtlasInfo")},{key:"canAddToCurrentBatch",value:o(function(r,n){if(this.batchAtlases.length===this.maxAtlasesPerBatch){var i=this.renderTypes.get(n),a=i.getKey(r),s=i.atlasCollection.getAtlas(a);return s&&this.batchAtlases.includes(s)}return!0},"canAddToCurrentBatch")},{key:"setTransformMatrix",value:o(function(r,n,i){var a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,s=n.bb,l=n.type,u=n.tex1,h=n.tex2,f=this.getRenderTypeOpts(l),d=f.getPadding?f.getPadding(i):0,p=u.w/(u.w+h.w);a||(p=1-p);var m=this.getAdjustedBB(s,d,a,p),g,y;B1e(r);var v=f.getRotation?f.getRotation(i):0;if(v!==0){var x=f.getRotationPoint(i),b=x.x,T=x.y;j6(r,r,[b,T]),F1e(r,r,v);var S=f.getRotationOffset(i);g=S.x+m.xOffset,y=S.y}else g=m.x1,y=m.y1;j6(r,r,[g,y]),sF(r,r,[m.w,m.h])},"setTransformMatrix")},{key:"getTransformMatrix",value:o(function(r,n){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,a=Zb();return this.setTransformMatrix(a,r,n,i),a},"getTransformMatrix")},{key:"getAdjustedBB",value:o(function(r,n,i,a){var s=r.x1,l=r.y1,u=r.w,h=r.h;n&&(s-=n,l-=n,u+=2*n,h+=2*n);var f=0,d=u*a;return i&&a<1?u=d:!i&&a<1&&(f=u-d,s+=f,u=d),{x1:s,y1:l,w:u,h,xOffset:f}},"getAdjustedBB")},{key:"getDebugInfo",value:o(function(){var r=[],n=vo(this.renderTypes),i;try{for(n.s();!(i=n.n()).done;){var a=Ri(i.value,2),s=a[0],l=a[1],u=l.atlasCollection.getCounts(),h=u.keyCount,f=u.atlasCount;r.push({type:s,keyCount:h,atlasCount:f})}}catch(d){n.e(d)}finally{n.f()}return r},"getDebugInfo")}]),t}(),yB=0,Zme=1,Jme=2,vB=3,qJe=function(){function t(e,r,n){Vf(this,t),this.r=e,this.gl=r,this.maxInstances=n.webglBatchSize,this.maxAtlases=n.webglTexPerBatch,this.atlasSize=n.webglTexSize,this.bgColor=n.bgColor,n.enableWrapping=!0,n.createTextureCanvas=IJe,this.atlasManager=new WJe(e,n),this.program=this.createShaderProgram(Jb.SCREEN),this.pickingProgram=this.createShaderProgram(Jb.PICKING),this.vao=this.createVAO(),this.debugInfo=[]}return o(t,"ElementDrawingWebGL"),Uf(t,[{key:"addTextureRenderType",value:o(function(r,n){this.atlasManager.addRenderType(r,n)},"addTextureRenderType")},{key:"invalidate",value:o(function(r){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=n.type,a=this.atlasManager;return i?a.invalidate(r,{filterType:o(function(l){return l===i},"filterType"),forceRedraw:!0}):a.invalidate(r)},"invalidate")},{key:"gc",value:o(function(){this.atlasManager.gc()},"gc")},{key:"createShaderProgram",value:o(function(r){var n=this.gl,i=`#version 300 es precision highp float; uniform mat3 uPanZoomMatrix; @@ -2018,7 +2018,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho int vid = gl_VertexID; vec2 position = aPosition; - if(aVertType == `.concat(PP,`) { + if(aVertType == `.concat(yB,`) { float texX; float texY; float texW; @@ -2060,7 +2060,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho gl_Position = vec4(uPanZoomMatrix * texMatrix * vec3(position, 1.0), 1.0); } - else if(aVertType == `).concat(F0e,` && vid < 6) { + else if(aVertType == `).concat(Zme,` && vid < 6) { vec2 source = aPointAPointB.xy; vec2 target = aPointAPointB.zw; @@ -2074,7 +2074,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho gl_Position = vec4(uPanZoomMatrix * vec3(point, 1.0), 1.0); vEdgeColor = aEdgeColor; } - else if(aVertType == `).concat($0e,` && vid < 6) { + else if(aVertType == `).concat(Jme,` && vid < 6) { vec2 pointA = aPointAPointB.xy; vec2 pointB = aPointAPointB.zw; vec2 pointC = aPointCPointD.xy; @@ -2121,7 +2121,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho vEdgeColor = aEdgeColor; } - else if(aVertType == `).concat(BP,` && vid < 3) { + else if(aVertType == `).concat(vB,` && vid < 3) { // massage the first triangle into an edge arrow if(vid == 0) position = vec2(-0.15, -0.3); @@ -2163,10 +2163,10 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho out vec4 outColor; void main(void) { - if(vVertType == `).concat(PP,`) { + if(vVertType == `).concat(yB,`) { `).concat(a.map(function(h){return"if(vAtlasId == ".concat(h,") outColor = texture(uTexture").concat(h,", vTexCoord);")}).join(` else `),` - } else if(vVertType == `).concat(BP,`) { + } else if(vVertType == `).concat(vB,`) { // blend arrow color with background (using premultiplied alpha) outColor.rgb = vEdgeColor.rgb + (uBGColor.rgb * (1.0 - vEdgeColor.a)); outColor.a = 1.0; // make opaque, masks out line under arrow @@ -2177,7 +2177,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho `).concat(r.picking?`if(outColor.a == 0.0) discard; else outColor = vIndex;`:"",` } - `),l=aZe(n,i,s);l.aPosition=n.getAttribLocation(l,"aPosition"),l.aIndex=n.getAttribLocation(l,"aIndex"),l.aVertType=n.getAttribLocation(l,"aVertType"),l.aAtlasId=n.getAttribLocation(l,"aAtlasId"),l.aTex1=n.getAttribLocation(l,"aTex1"),l.aTex2=n.getAttribLocation(l,"aTex2"),l.aScaleRotate1=n.getAttribLocation(l,"aScaleRotate1"),l.aTranslate1=n.getAttribLocation(l,"aTranslate1"),l.aScaleRotate2=n.getAttribLocation(l,"aScaleRotate2"),l.aTranslate2=n.getAttribLocation(l,"aTranslate2"),l.aPointAPointB=n.getAttribLocation(l,"aPointAPointB"),l.aPointCPointD=n.getAttribLocation(l,"aPointCPointD"),l.aLineWidth=n.getAttribLocation(l,"aLineWidth"),l.aEdgeColor=n.getAttribLocation(l,"aEdgeColor"),l.uPanZoomMatrix=n.getUniformLocation(l,"uPanZoomMatrix"),l.uAtlasSize=n.getUniformLocation(l,"uAtlasSize"),l.uBGColor=n.getUniformLocation(l,"uBGColor"),l.uTextures=[];for(var u=0;u2&&arguments[2]!==void 0?arguments[2]:jb.SCREEN;this.panZoomMatrix=r,this.debugInfo=n,this.renderTarget=i,this.startBatch()},"startFrame")},{key:"startBatch",value:o(function(){this.instanceCount=0,this.atlasManager.startBatch()},"startBatch")},{key:"endFrame",value:o(function(){this.endBatch()},"endFrame")},{key:"getTempMatrix",value:o(function(){return this.tempMatrix=this.tempMatrix||Xb()},"getTempMatrix")},{key:"drawTexture",value:o(function(r,n,i){var a=this.atlasManager;if(a.isRenderable(r,i)){a.canAddToCurrentBatch(r,i)||this.endBatch();var s=this.instanceCount;this.vertTypeBuffer.getView(s)[0]=PP;var l=this.indexBuffer.getView(s);p6(n,l);var u=a.getAtlasInfo(r,i,u),h=u.atlasID,f=u.tex1,d=u.tex2,p=this.atlasIdBuffer.getView(s);p[0]=h;var m=this.tex1Buffer.getView(s);m[0]=f.x,m[1]=f.y,m[2]=f.w,m[3]=f.h;var g=this.tex2Buffer.getView(s);g[0]=d.x,g[1]=d.y,g[2]=d.w,g[3]=d.h;for(var y=this.getTempMatrix(),v=0,x=[1,2];v=this.maxInstances&&this.endBatch()}},"drawTexture")},{key:"drawEdgeArrow",value:o(function(r,n,i){var a=r._private.rscratch,s,l,u;if(i==="source"?(s=a.arrowStartX,l=a.arrowStartY,u=a.srcArrowAngle):(s=a.arrowEndX,l=a.arrowEndY,u=a.tgtArrowAngle),!(isNaN(s)||s==null||isNaN(l)||l==null||isNaN(u)||u==null)){var h=r.pstyle(i+"-arrow-shape").value;if(h!=="none"){var f=r.pstyle(i+"-arrow-color").value,d=r.pstyle("opacity").value,p=r.pstyle("line-opacity").value,m=d*p,g=r.pstyle("width").pfValue,y=r.pstyle("arrow-scale").value,v=this.r.getArrowWidth(g,y),x=this.getTempMatrix();kge(x),O6(x,x,[s,l]),SB(x,x,[v,v]),Ege(x,x,u);var b=this.instanceCount;this.vertTypeBuffer.getView(b)[0]=BP;var w=this.indexBuffer.getView(b);p6(n,w);var C=this.edgeColorBuffer.getView(b);d6(f,m,C);var T=this.scaleRotate1Buffer.getView(b);T[0]=x[0],T[1]=x[1],T[2]=x[3],T[3]=x[4];var E=this.translate1Buffer.getView(b);E[0]=x[6],E[1]=x[7],this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}}},"drawEdgeArrow")},{key:"drawEdgeLine",value:o(function(r,n){var i=r.pstyle("opacity").value,a=r.pstyle("line-opacity").value,s=r.pstyle("width").pfValue,l=r.pstyle("line-color").value,u=i*a,h=this.getEdgePoints(r);if(h.length/2+this.instanceCount>this.maxInstances&&this.endBatch(),h.length==4){var f=this.instanceCount;this.vertTypeBuffer.getView(f)[0]=F0e;var d=this.indexBuffer.getView(f);p6(n,d);var p=this.edgeColorBuffer.getView(f);d6(l,u,p);var m=this.lineWidthBuffer.getView(f);m[0]=s;var g=this.pointAPointBBuffer.getView(f);g[0]=h[0],g[1]=h[1],g[2]=h[2],g[3]=h[3],this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}else for(var y=0;y=this.maxInstances&&this.endBatch()}},"drawEdgeLine")},{key:"getEdgePoints",value:o(function(r){var n=r._private.rscratch,i=n.allpts;if(i.length==4)return i;var a=this.getNumSegments(r);return this.getCurveSegmentPoints(i,a)},"getEdgePoints")},{key:"getNumSegments",value:o(function(r){var n=15;return Math.min(Math.max(n,5),this.maxInstances)},"getNumSegments")},{key:"getCurveSegmentPoints",value:o(function(r,n){if(r.length==4)return r;for(var i=Array((n+1)*2),a=0;a<=n;a++)if(a==0)i[0]=r[0],i[1]=r[1];else if(a==n)i[a*2]=r[r.length-2],i[a*2+1]=r[r.length-1];else{var s=a/n;this.setCurvePoint(r,s,i,a*2)}return i},"getCurveSegmentPoints")},{key:"setCurvePoint",value:o(function(r,n,i,a){if(r.length<=2)i[a]=r[0],i[a+1]=r[1];else{for(var s=Array(r.length-2),l=0;l0},"isVisible")},{key:"getStyle",value:o(function(r,n){var i=n.pstyle("".concat(r,"-opacity")).value,a=n.pstyle("".concat(r,"-color")).value,s=n.pstyle("".concat(r,"-shape")).value;return{opacity:i,color:a,shape:s}},"getStyle")},{key:"getPadding",value:o(function(r,n){return n.pstyle("".concat(r,"-padding")).pfValue},"getPadding")},{key:"draw",value:o(function(r,n,i,a){if(this.isVisible(r,i)){var s=this.r,l=a.w,u=a.h,h=l/2,f=u/2,d=this.getStyle(r,i),p=d.shape,m=d.color,g=d.opacity;n.save(),n.fillStyle=z0e(m,g),p==="round-rectangle"||p==="roundrectangle"?s.drawRoundRectanglePath(n,h,f,l,u,"auto"):p==="ellipse"&&s.drawEllipsePath(n,h,f,l,u),n.fill(),n.restore()}},"draw")}]),t}();o(bZe,"getBGColor");Sge={};Sge.initWebgl=function(t,e){var r=this,n=r.data.contexts[r.WEBGL],i=t.cy.container();t.bgColor=bZe(i),t.webglTexSize=Math.min(t.webglTexSize,n.getParameter(n.MAX_TEXTURE_SIZE)),t.webglTexRows=Math.min(t.webglTexRows,54),t.webglBatchSize=Math.min(t.webglBatchSize,16384),t.webglTexPerBatch=Math.min(t.webglTexPerBatch,n.getParameter(n.MAX_TEXTURE_IMAGE_UNITS)),r.webglDebug=t.webglDebug,r.webglDebugShowAtlases=t.webglDebugShowAtlases,console.log("max texture units",n.getParameter(n.MAX_TEXTURE_IMAGE_UNITS)),console.log("max texture size",n.getParameter(n.MAX_TEXTURE_SIZE)),console.log("webgl options",t),r.pickingFrameBuffer=hZe(n),r.pickingFrameBuffer.needsDraw=!0;var a=o(function(f){return r.getTextAngle(f,null)},"getLabelRotation"),s=o(function(f){var d=f.pstyle("label");return d&&d.value},"isLabelVisible");r.eleDrawing=new vZe(r,n,t);var l=new xZe(r);r.eleDrawing.addTextureRenderType("node-body",zb({getKey:e.getStyleKey,getBoundingBox:e.getElementBox,drawElement:e.drawElement,isVisible:o(function(f){return f.visible()},"isVisible")})),r.eleDrawing.addTextureRenderType("node-label",zb({getKey:e.getLabelKey,getBoundingBox:e.getLabelBox,drawElement:e.drawLabel,getRotation:a,getRotationPoint:e.getLabelRotationPoint,getRotationOffset:e.getLabelRotationOffset,isVisible:s})),r.eleDrawing.addTextureRenderType("node-overlay",zb({getBoundingBox:e.getElementBox,getKey:o(function(f){return l.getStyleKey("overlay",f)},"getKey"),drawElement:o(function(f,d,p){return l.draw("overlay",f,d,p)},"drawElement"),isVisible:o(function(f){return l.isVisible("overlay",f)},"isVisible"),getPadding:o(function(f){return l.getPadding("overlay",f)},"getPadding")})),r.eleDrawing.addTextureRenderType("node-underlay",zb({getBoundingBox:e.getElementBox,getKey:o(function(f){return l.getStyleKey("underlay",f)},"getKey"),drawElement:o(function(f,d,p){return l.draw("underlay",f,d,p)},"drawElement"),isVisible:o(function(f){return l.isVisible("underlay",f)},"isVisible"),getPadding:o(function(f){return l.getPadding("underlay",f)},"getPadding")})),r.eleDrawing.addTextureRenderType("edge-label",zb({getKey:e.getLabelKey,getBoundingBox:e.getLabelBox,drawElement:e.drawLabel,getRotation:a,getRotationPoint:e.getLabelRotationPoint,getRotationOffset:e.getLabelRotationOffset,isVisible:s}));var u=u4(function(){console.log("garbage collect flag set"),r.data.gc=!0},1e4);r.onUpdateEleCalcs(function(h,f){var d=!1;f&&f.length>0&&(d|=r.eleDrawing.invalidate(f)),d&&u()}),wZe(r)};o(wZe,"overrideCanvasRendererFunctions");o(TZe,"clearWebgl");o(kZe,"clearCanvas");o(EZe,"createPanZoomMatrix");o(Cge,"setContextTransform");o(SZe,"drawSelectionRectangle");o(CZe,"drawAxes");o(AZe,"drawAtlases");o(_Ze,"getPickingIndexes");o(DZe,"findNearestElementsWebgl");o(Age,"renderWebgl");Vf={};Vf.drawPolygonPath=function(t,e,r,n,i,a){var s=n/2,l=i/2;t.beginPath&&t.beginPath(),t.moveTo(e+s*a[0],r+l*a[1]);for(var u=1;u0&&s>0){m.clearRect(0,0,a,s),m.globalCompositeOperation="source-over";var g=this.getCachedZSortedEles();if(t.full)m.translate(-n.x1*h,-n.y1*h),m.scale(h,h),this.drawElements(m,g),m.scale(1/h,1/h),m.translate(n.x1*h,n.y1*h);else{var y=e.pan(),v={x:y.x*h,y:y.y*h};h*=e.zoom(),m.translate(v.x,v.y),m.scale(h,h),this.drawElements(m,g),m.scale(1/h,1/h),m.translate(-v.x,-v.y)}t.bg&&(m.globalCompositeOperation="destination-over",m.fillStyle=t.bg,m.rect(0,0,a,s),m.fill())}return p};o(LZe,"b64ToBlob");o(U0e,"b64UriToB64");o(Dge,"output");g4.png=function(t){return Dge(t,this.bufferCanvasImage(t),"image/png")};g4.jpg=function(t){return Dge(t,this.bufferCanvasImage(t),"image/jpeg")};Lge={};Lge.nodeShapeImpl=function(t,e,r,n,i,a,s,l){switch(t){case"ellipse":return this.drawEllipsePath(e,r,n,i,a);case"polygon":return this.drawPolygonPath(e,r,n,i,a,s);case"round-polygon":return this.drawRoundPolygonPath(e,r,n,i,a,s,l);case"roundrectangle":case"round-rectangle":return this.drawRoundRectanglePath(e,r,n,i,a,l);case"cutrectangle":case"cut-rectangle":return this.drawCutRectanglePath(e,r,n,i,a,s,l);case"bottomroundrectangle":case"bottom-round-rectangle":return this.drawBottomRoundRectanglePath(e,r,n,i,a,l);case"barrel":return this.drawBarrelPath(e,r,n,i,a)}};RZe=Rge,Er=Rge.prototype;Er.CANVAS_LAYERS=3;Er.SELECT_BOX=0;Er.DRAG=1;Er.NODE=2;Er.WEBGL=3;Er.CANVAS_TYPES=["2d","2d","2d","webgl2"];Er.BUFFER_COUNT=3;Er.TEXTURE_BUFFER=0;Er.MOTIONBLUR_BUFFER_NODE=1;Er.MOTIONBLUR_BUFFER_DRAG=2;o(Rge,"CanvasRenderer");Er.redrawHint=function(t,e){var r=this;switch(t){case"eles":r.data.canvasNeedsRedraw[Er.NODE]=e;break;case"drag":r.data.canvasNeedsRedraw[Er.DRAG]=e;break;case"select":r.data.canvasNeedsRedraw[Er.SELECT_BOX]=e;break;case"gc":r.data.gc=!0;break}};NZe=typeof Path2D<"u";Er.path2dEnabled=function(t){if(t===void 0)return this.pathsEnabled;this.pathsEnabled=!!t};Er.usePaths=function(){return NZe&&this.pathsEnabled};Er.setImgSmoothing=function(t,e){t.imageSmoothingEnabled!=null?t.imageSmoothingEnabled=e:(t.webkitImageSmoothingEnabled=e,t.mozImageSmoothingEnabled=e,t.msImageSmoothingEnabled=e)};Er.getImgSmoothing=function(t){return t.imageSmoothingEnabled!=null?t.imageSmoothingEnabled:t.webkitImageSmoothingEnabled||t.mozImageSmoothingEnabled||t.msImageSmoothingEnabled};Er.makeOffscreenCanvas=function(t,e){var r;if((typeof OffscreenCanvas>"u"?"undefined":qi(OffscreenCanvas))!=="undefined")r=new OffscreenCanvas(t,e);else{var n=this.cy.window(),i=n.document;r=i.createElement("canvas"),r.width=t,r.height=e}return r};[vge,tu,ah,kB,e0,my,vs,Sge,Vf,g4,Lge].forEach(function(t){rr(Er,t)});MZe=[{name:"null",impl:ige},{name:"base",impl:pge},{name:"canvas",impl:RZe}],IZe=[{type:"layout",extensions:gQe},{type:"renderer",extensions:MZe}],Nge={},Mge={};o(Ige,"setExtension");o(Oge,"getExtension");o(OZe,"setModule");o(PZe,"getModule");eB=o(function(){if(arguments.length===2)return Oge.apply(null,arguments);if(arguments.length===3)return Ige.apply(null,arguments);if(arguments.length===4)return PZe.apply(null,arguments);if(arguments.length===5)return OZe.apply(null,arguments);ai("Invalid extension access syntax")},"extension");s4.prototype.extension=eB;IZe.forEach(function(t){t.extensions.forEach(function(e){Ige(t.type,e.name,e.impl)})});Pge=o(function t(){if(!(this instanceof t))return new t;this.length=0},"Stylesheet"),Zp=Pge.prototype;Zp.instanceString=function(){return"stylesheet"};Zp.selector=function(t){var e=this.length++;return this[e]={selector:t,properties:[]},this};Zp.css=function(t,e){var r=this.length-1;if(Zt(t))this[r].properties.push({name:t,value:e});else if(Ur(t))for(var n=t,i=Object.keys(n),a=0;a{"use strict";o(function(e,r){typeof y4=="object"&&typeof AB=="object"?AB.exports=r():typeof define=="function"&&define.amd?define([],r):typeof y4=="object"?y4.layoutBase=r():e.layoutBase=r()},"webpackUniversalModuleDefinition")(y4,function(){return function(t){var e={};function r(n){if(e[n])return e[n].exports;var i=e[n]={i:n,l:!1,exports:{}};return t[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return o(r,"__webpack_require__"),r.m=t,r.c=e,r.i=function(n){return n},r.d=function(n,i,a){r.o(n,i)||Object.defineProperty(n,i,{configurable:!1,enumerable:!0,get:a})},r.n=function(n){var i=n&&n.__esModule?o(function(){return n.default},"getDefault"):o(function(){return n},"getModuleExports");return r.d(i,"a",i),i},r.o=function(n,i){return Object.prototype.hasOwnProperty.call(n,i)},r.p="",r(r.s=26)}([function(t,e,r){"use strict";function n(){}o(n,"LayoutConstants"),n.QUALITY=1,n.DEFAULT_CREATE_BENDS_AS_NEEDED=!1,n.DEFAULT_INCREMENTAL=!1,n.DEFAULT_ANIMATION_ON_LAYOUT=!0,n.DEFAULT_ANIMATION_DURING_LAYOUT=!1,n.DEFAULT_ANIMATION_PERIOD=50,n.DEFAULT_UNIFORM_LEAF_NODE_SIZES=!1,n.DEFAULT_GRAPH_MARGIN=15,n.NODE_DIMENSIONS_INCLUDE_LABELS=!1,n.SIMPLE_NODE_SIZE=40,n.SIMPLE_NODE_HALF_SIZE=n.SIMPLE_NODE_SIZE/2,n.EMPTY_COMPOUND_NODE_SIZE=40,n.MIN_EDGE_LENGTH=1,n.WORLD_BOUNDARY=1e6,n.INITIAL_WORLD_BOUNDARY=n.WORLD_BOUNDARY/1e3,n.WORLD_CENTER_X=1200,n.WORLD_CENTER_Y=900,t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(8),a=r(9);function s(u,h,f){n.call(this,f),this.isOverlapingSourceAndTarget=!1,this.vGraphObject=f,this.bendpoints=[],this.source=u,this.target=h}o(s,"LEdge"),s.prototype=Object.create(n.prototype);for(var l in n)s[l]=n[l];s.prototype.getSource=function(){return this.source},s.prototype.getTarget=function(){return this.target},s.prototype.isInterGraph=function(){return this.isInterGraph},s.prototype.getLength=function(){return this.length},s.prototype.isOverlapingSourceAndTarget=function(){return this.isOverlapingSourceAndTarget},s.prototype.getBendpoints=function(){return this.bendpoints},s.prototype.getLca=function(){return this.lca},s.prototype.getSourceInLca=function(){return this.sourceInLca},s.prototype.getTargetInLca=function(){return this.targetInLca},s.prototype.getOtherEnd=function(u){if(this.source===u)return this.target;if(this.target===u)return this.source;throw"Node is not incident with this edge"},s.prototype.getOtherEndInGraph=function(u,h){for(var f=this.getOtherEnd(u),d=h.getGraphManager().getRoot();;){if(f.getOwner()==h)return f;if(f.getOwner()==d)break;f=f.getOwner().getParent()}return null},s.prototype.updateLength=function(){var u=new Array(4);this.isOverlapingSourceAndTarget=i.getIntersection(this.target.getRect(),this.source.getRect(),u),this.isOverlapingSourceAndTarget||(this.lengthX=u[0]-u[2],this.lengthY=u[1]-u[3],Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY))},s.prototype.updateLengthSimple=function(){this.lengthX=this.target.getCenterX()-this.source.getCenterX(),this.lengthY=this.target.getCenterY()-this.source.getCenterY(),Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY)},t.exports=s},function(t,e,r){"use strict";function n(i){this.vGraphObject=i}o(n,"LGraphObject"),t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(10),a=r(13),s=r(0),l=r(16),u=r(4);function h(d,p,m,g){m==null&&g==null&&(g=p),n.call(this,g),d.graphManager!=null&&(d=d.graphManager),this.estimatedSize=i.MIN_VALUE,this.inclusionTreeDepth=i.MAX_VALUE,this.vGraphObject=g,this.edges=[],this.graphManager=d,m!=null&&p!=null?this.rect=new a(p.x,p.y,m.width,m.height):this.rect=new a}o(h,"LNode"),h.prototype=Object.create(n.prototype);for(var f in n)h[f]=n[f];h.prototype.getEdges=function(){return this.edges},h.prototype.getChild=function(){return this.child},h.prototype.getOwner=function(){return this.owner},h.prototype.getWidth=function(){return this.rect.width},h.prototype.setWidth=function(d){this.rect.width=d},h.prototype.getHeight=function(){return this.rect.height},h.prototype.setHeight=function(d){this.rect.height=d},h.prototype.getCenterX=function(){return this.rect.x+this.rect.width/2},h.prototype.getCenterY=function(){return this.rect.y+this.rect.height/2},h.prototype.getCenter=function(){return new u(this.rect.x+this.rect.width/2,this.rect.y+this.rect.height/2)},h.prototype.getLocation=function(){return new u(this.rect.x,this.rect.y)},h.prototype.getRect=function(){return this.rect},h.prototype.getDiagonal=function(){return Math.sqrt(this.rect.width*this.rect.width+this.rect.height*this.rect.height)},h.prototype.getHalfTheDiagonal=function(){return Math.sqrt(this.rect.height*this.rect.height+this.rect.width*this.rect.width)/2},h.prototype.setRect=function(d,p){this.rect.x=d.x,this.rect.y=d.y,this.rect.width=p.width,this.rect.height=p.height},h.prototype.setCenter=function(d,p){this.rect.x=d-this.rect.width/2,this.rect.y=p-this.rect.height/2},h.prototype.setLocation=function(d,p){this.rect.x=d,this.rect.y=p},h.prototype.moveBy=function(d,p){this.rect.x+=d,this.rect.y+=p},h.prototype.getEdgeListToNode=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(y.target==d){if(y.source!=g)throw"Incorrect edge source!";p.push(y)}}),p},h.prototype.getEdgesBetween=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(!(y.source==g||y.target==g))throw"Incorrect edge source and/or target";(y.target==d||y.source==d)&&p.push(y)}),p},h.prototype.getNeighborsList=function(){var d=new Set,p=this;return p.edges.forEach(function(m){if(m.source==p)d.add(m.target);else{if(m.target!=p)throw"Incorrect incidency!";d.add(m.source)}}),d},h.prototype.withChildren=function(){var d=new Set,p,m;if(d.add(this),this.child!=null)for(var g=this.child.getNodes(),y=0;yp&&(this.rect.x-=(this.labelWidth-p)/2,this.setWidth(this.labelWidth)),this.labelHeight>m&&(this.labelPos=="center"?this.rect.y-=(this.labelHeight-m)/2:this.labelPos=="top"&&(this.rect.y-=this.labelHeight-m),this.setHeight(this.labelHeight))}}},h.prototype.getInclusionTreeDepth=function(){if(this.inclusionTreeDepth==i.MAX_VALUE)throw"assert failed";return this.inclusionTreeDepth},h.prototype.transform=function(d){var p=this.rect.x;p>s.WORLD_BOUNDARY?p=s.WORLD_BOUNDARY:p<-s.WORLD_BOUNDARY&&(p=-s.WORLD_BOUNDARY);var m=this.rect.y;m>s.WORLD_BOUNDARY?m=s.WORLD_BOUNDARY:m<-s.WORLD_BOUNDARY&&(m=-s.WORLD_BOUNDARY);var g=new u(p,m),y=d.inverseTransformPoint(g);this.setLocation(y.x,y.y)},h.prototype.getLeft=function(){return this.rect.x},h.prototype.getRight=function(){return this.rect.x+this.rect.width},h.prototype.getTop=function(){return this.rect.y},h.prototype.getBottom=function(){return this.rect.y+this.rect.height},h.prototype.getParent=function(){return this.owner==null?null:this.owner.getParent()},t.exports=h},function(t,e,r){"use strict";function n(i,a){i==null&&a==null?(this.x=0,this.y=0):(this.x=i,this.y=a)}o(n,"PointD"),n.prototype.getX=function(){return this.x},n.prototype.getY=function(){return this.y},n.prototype.setX=function(i){this.x=i},n.prototype.setY=function(i){this.y=i},n.prototype.getDifference=function(i){return new DimensionD(this.x-i.x,this.y-i.y)},n.prototype.getCopy=function(){return new n(this.x,this.y)},n.prototype.translate=function(i){return this.x+=i.width,this.y+=i.height,this},t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(10),a=r(0),s=r(6),l=r(3),u=r(1),h=r(13),f=r(12),d=r(11);function p(g,y,v){n.call(this,v),this.estimatedSize=i.MIN_VALUE,this.margin=a.DEFAULT_GRAPH_MARGIN,this.edges=[],this.nodes=[],this.isConnected=!1,this.parent=g,y!=null&&y instanceof s?this.graphManager=y:y!=null&&y instanceof Layout&&(this.graphManager=y.graphManager)}o(p,"LGraph"),p.prototype=Object.create(n.prototype);for(var m in n)p[m]=n[m];p.prototype.getNodes=function(){return this.nodes},p.prototype.getEdges=function(){return this.edges},p.prototype.getGraphManager=function(){return this.graphManager},p.prototype.getParent=function(){return this.parent},p.prototype.getLeft=function(){return this.left},p.prototype.getRight=function(){return this.right},p.prototype.getTop=function(){return this.top},p.prototype.getBottom=function(){return this.bottom},p.prototype.isConnected=function(){return this.isConnected},p.prototype.add=function(g,y,v){if(y==null&&v==null){var x=g;if(this.graphManager==null)throw"Graph has no graph mgr!";if(this.getNodes().indexOf(x)>-1)throw"Node already in graph!";return x.owner=this,this.getNodes().push(x),x}else{var b=g;if(!(this.getNodes().indexOf(y)>-1&&this.getNodes().indexOf(v)>-1))throw"Source or target not in graph!";if(!(y.owner==v.owner&&y.owner==this))throw"Both owners must be this graph!";return y.owner!=v.owner?null:(b.source=y,b.target=v,b.isInterGraph=!1,this.getEdges().push(b),y.edges.push(b),v!=y&&v.edges.push(b),b)}},p.prototype.remove=function(g){var y=g;if(g instanceof l){if(y==null)throw"Node is null!";if(!(y.owner!=null&&y.owner==this))throw"Owner graph is invalid!";if(this.graphManager==null)throw"Owner graph manager is invalid!";for(var v=y.edges.slice(),x,b=v.length,w=0;w-1&&E>-1))throw"Source and/or target doesn't know this edge!";x.source.edges.splice(T,1),x.target!=x.source&&x.target.edges.splice(E,1);var C=x.source.owner.getEdges().indexOf(x);if(C==-1)throw"Not in owner's edge list!";x.source.owner.getEdges().splice(C,1)}},p.prototype.updateLeftTop=function(){for(var g=i.MAX_VALUE,y=i.MAX_VALUE,v,x,b,w=this.getNodes(),C=w.length,T=0;Tv&&(g=v),y>x&&(y=x)}return g==i.MAX_VALUE?null:(w[0].getParent().paddingLeft!=null?b=w[0].getParent().paddingLeft:b=this.margin,this.left=y-b,this.top=g-b,new f(this.left,this.top))},p.prototype.updateBounds=function(g){for(var y=i.MAX_VALUE,v=-i.MAX_VALUE,x=i.MAX_VALUE,b=-i.MAX_VALUE,w,C,T,E,A,S=this.nodes,_=S.length,I=0;I<_;I++){var L=S[I];g&&L.child!=null&&L.updateBounds(),w=L.getLeft(),C=L.getRight(),T=L.getTop(),E=L.getBottom(),y>w&&(y=w),vT&&(x=T),bw&&(y=w),vT&&(x=T),b=this.nodes.length){var _=0;v.forEach(function(I){I.owner==g&&_++}),_==this.nodes.length&&(this.isConnected=!0)}},t.exports=p},function(t,e,r){"use strict";var n,i=r(1);function a(s){n=r(5),this.layout=s,this.graphs=[],this.edges=[]}o(a,"LGraphManager"),a.prototype.addRoot=function(){var s=this.layout.newGraph(),l=this.layout.newNode(null),u=this.add(s,l);return this.setRootGraph(u),this.rootGraph},a.prototype.add=function(s,l,u,h,f){if(u==null&&h==null&&f==null){if(s==null)throw"Graph is null!";if(l==null)throw"Parent node is null!";if(this.graphs.indexOf(s)>-1)throw"Graph already in this graph mgr!";if(this.graphs.push(s),s.parent!=null)throw"Already has a parent!";if(l.child!=null)throw"Already has a child!";return s.parent=l,l.child=s,s}else{f=u,h=l,u=s;var d=h.getOwner(),p=f.getOwner();if(!(d!=null&&d.getGraphManager()==this))throw"Source not in this graph mgr!";if(!(p!=null&&p.getGraphManager()==this))throw"Target not in this graph mgr!";if(d==p)return u.isInterGraph=!1,d.add(u,h,f);if(u.isInterGraph=!0,u.source=h,u.target=f,this.edges.indexOf(u)>-1)throw"Edge already in inter-graph edge list!";if(this.edges.push(u),!(u.source!=null&&u.target!=null))throw"Edge source and/or target is null!";if(!(u.source.edges.indexOf(u)==-1&&u.target.edges.indexOf(u)==-1))throw"Edge already in source and/or target incidency list!";return u.source.edges.push(u),u.target.edges.push(u),u}},a.prototype.remove=function(s){if(s instanceof n){var l=s;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 u=[];u=u.concat(l.getEdges());for(var h,f=u.length,d=0;d=s.getRight()?l[0]+=Math.min(s.getX()-a.getX(),a.getRight()-s.getRight()):s.getX()<=a.getX()&&s.getRight()>=a.getRight()&&(l[0]+=Math.min(a.getX()-s.getX(),s.getRight()-a.getRight())),a.getY()<=s.getY()&&a.getBottom()>=s.getBottom()?l[1]+=Math.min(s.getY()-a.getY(),a.getBottom()-s.getBottom()):s.getY()<=a.getY()&&s.getBottom()>=a.getBottom()&&(l[1]+=Math.min(a.getY()-s.getY(),s.getBottom()-a.getBottom()));var f=Math.abs((s.getCenterY()-a.getCenterY())/(s.getCenterX()-a.getCenterX()));s.getCenterY()===a.getCenterY()&&s.getCenterX()===a.getCenterX()&&(f=1);var d=f*l[0],p=l[1]/f;l[0]d)return l[0]=u,l[1]=m,l[2]=f,l[3]=S,!1;if(hf)return l[0]=p,l[1]=h,l[2]=E,l[3]=d,!1;if(uf?(l[0]=y,l[1]=v,k=!0):(l[0]=g,l[1]=m,k=!0):R===M&&(u>f?(l[0]=p,l[1]=m,k=!0):(l[0]=x,l[1]=v,k=!0)),-O===M?f>u?(l[2]=A,l[3]=S,D=!0):(l[2]=E,l[3]=T,D=!0):O===M&&(f>u?(l[2]=C,l[3]=T,D=!0):(l[2]=_,l[3]=S,D=!0)),k&&D)return!1;if(u>f?h>d?(P=this.getCardinalDirection(R,M,4),B=this.getCardinalDirection(O,M,2)):(P=this.getCardinalDirection(-R,M,3),B=this.getCardinalDirection(-O,M,1)):h>d?(P=this.getCardinalDirection(-R,M,1),B=this.getCardinalDirection(-O,M,3)):(P=this.getCardinalDirection(R,M,2),B=this.getCardinalDirection(O,M,4)),!k)switch(P){case 1:z=m,F=u+-w/M,l[0]=F,l[1]=z;break;case 2:F=x,z=h+b*M,l[0]=F,l[1]=z;break;case 3:z=v,F=u+w/M,l[0]=F,l[1]=z;break;case 4:F=y,z=h+-b*M,l[0]=F,l[1]=z;break}if(!D)switch(B){case 1:U=T,$=f+-L/M,l[2]=$,l[3]=U;break;case 2:$=_,U=d+I*M,l[2]=$,l[3]=U;break;case 3:U=S,$=f+L/M,l[2]=$,l[3]=U;break;case 4:$=A,U=d+-I*M,l[2]=$,l[3]=U;break}}return!1},i.getCardinalDirection=function(a,s,l){return a>s?l:1+l%4},i.getIntersection=function(a,s,l,u){if(u==null)return this.getIntersection2(a,s,l);var h=a.x,f=a.y,d=s.x,p=s.y,m=l.x,g=l.y,y=u.x,v=u.y,x=void 0,b=void 0,w=void 0,C=void 0,T=void 0,E=void 0,A=void 0,S=void 0,_=void 0;return w=p-f,T=h-d,A=d*f-h*p,C=v-g,E=m-y,S=y*g-m*v,_=w*E-C*T,_===0?null:(x=(T*S-E*A)/_,b=(C*A-w*S)/_,new n(x,b))},i.angleOfVector=function(a,s,l,u){var h=void 0;return a!==l?(h=Math.atan((u-s)/(l-a)),l0?1:i<0?-1:0},n.floor=function(i){return i<0?Math.ceil(i):Math.floor(i)},n.ceil=function(i){return i<0?Math.floor(i):Math.ceil(i)},t.exports=n},function(t,e,r){"use strict";function n(){}o(n,"Integer"),n.MAX_VALUE=2147483647,n.MIN_VALUE=-2147483648,t.exports=n},function(t,e,r){"use strict";var n=function(){function h(f,d){for(var p=0;p"u"?"undefined":n(a);return a==null||s!="object"&&s!="function"},t.exports=i},function(t,e,r){"use strict";function n(m){if(Array.isArray(m)){for(var g=0,y=Array(m.length);g0&&g;){for(w.push(T[0]);w.length>0&&g;){var E=w[0];w.splice(0,1),b.add(E);for(var A=E.getEdges(),x=0;x-1&&T.splice(L,1)}b=new Set,C=new Map}}return m},p.prototype.createDummyNodesForBendpoints=function(m){for(var g=[],y=m.source,v=this.graphManager.calcLowestCommonAncestor(m.source,m.target),x=0;x0){for(var v=this.edgeToDummyNodes.get(y),x=0;x=0&&g.splice(S,1);var _=C.getNeighborsList();_.forEach(function(k){if(y.indexOf(k)<0){var D=v.get(k),R=D-1;R==1&&E.push(k),v.set(k,R)}})}y=y.concat(E),(g.length==1||g.length==2)&&(x=!0,b=g[0])}return b},p.prototype.setGraphManager=function(m){this.graphManager=m},t.exports=p},function(t,e,r){"use strict";function n(){}o(n,"RandomSeed"),n.seed=1,n.x=0,n.nextDouble=function(){return n.x=Math.sin(n.seed++)*1e4,n.x-Math.floor(n.x)},t.exports=n},function(t,e,r){"use strict";var n=r(4);function i(a,s){this.lworldOrgX=0,this.lworldOrgY=0,this.ldeviceOrgX=0,this.ldeviceOrgY=0,this.lworldExtX=1,this.lworldExtY=1,this.ldeviceExtX=1,this.ldeviceExtY=1}o(i,"Transform"),i.prototype.getWorldOrgX=function(){return this.lworldOrgX},i.prototype.setWorldOrgX=function(a){this.lworldOrgX=a},i.prototype.getWorldOrgY=function(){return this.lworldOrgY},i.prototype.setWorldOrgY=function(a){this.lworldOrgY=a},i.prototype.getWorldExtX=function(){return this.lworldExtX},i.prototype.setWorldExtX=function(a){this.lworldExtX=a},i.prototype.getWorldExtY=function(){return this.lworldExtY},i.prototype.setWorldExtY=function(a){this.lworldExtY=a},i.prototype.getDeviceOrgX=function(){return this.ldeviceOrgX},i.prototype.setDeviceOrgX=function(a){this.ldeviceOrgX=a},i.prototype.getDeviceOrgY=function(){return this.ldeviceOrgY},i.prototype.setDeviceOrgY=function(a){this.ldeviceOrgY=a},i.prototype.getDeviceExtX=function(){return this.ldeviceExtX},i.prototype.setDeviceExtX=function(a){this.ldeviceExtX=a},i.prototype.getDeviceExtY=function(){return this.ldeviceExtY},i.prototype.setDeviceExtY=function(a){this.ldeviceExtY=a},i.prototype.transformX=function(a){var s=0,l=this.lworldExtX;return l!=0&&(s=this.ldeviceOrgX+(a-this.lworldOrgX)*this.ldeviceExtX/l),s},i.prototype.transformY=function(a){var s=0,l=this.lworldExtY;return l!=0&&(s=this.ldeviceOrgY+(a-this.lworldOrgY)*this.ldeviceExtY/l),s},i.prototype.inverseTransformX=function(a){var s=0,l=this.ldeviceExtX;return l!=0&&(s=this.lworldOrgX+(a-this.ldeviceOrgX)*this.lworldExtX/l),s},i.prototype.inverseTransformY=function(a){var s=0,l=this.ldeviceExtY;return l!=0&&(s=this.lworldOrgY+(a-this.ldeviceOrgY)*this.lworldExtY/l),s},i.prototype.inverseTransformPoint=function(a){var s=new n(this.inverseTransformX(a.x),this.inverseTransformY(a.y));return s},t.exports=i},function(t,e,r){"use strict";function n(d){if(Array.isArray(d)){for(var p=0,m=Array(d.length);pa.ADAPTATION_LOWER_NODE_LIMIT&&(this.coolingFactor=Math.max(this.coolingFactor*a.COOLING_ADAPTATION_FACTOR,this.coolingFactor-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*this.coolingFactor*(1-a.COOLING_ADAPTATION_FACTOR))),this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT_INCREMENTAL):(d>a.ADAPTATION_LOWER_NODE_LIMIT?this.coolingFactor=Math.max(a.COOLING_ADAPTATION_FACTOR,1-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*(1-a.COOLING_ADAPTATION_FACTOR)):this.coolingFactor=1,this.initialCoolingFactor=this.coolingFactor,this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT),this.maxIterations=Math.max(this.getAllNodes().length*5,this.maxIterations),this.totalDisplacementThreshold=this.displacementThresholdPerNode*this.getAllNodes().length,this.repulsionRange=this.calcRepulsionRange()},h.prototype.calcSpringForces=function(){for(var d=this.getAllEdges(),p,m=0;m0&&arguments[0]!==void 0?arguments[0]:!0,p=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,m,g,y,v,x=this.getAllNodes(),b;if(this.useFRGridVariant)for(this.totalIterations%a.GRID_CALCULATION_CHECK_PERIOD==1&&d&&this.updateGrid(),b=new Set,m=0;mw||b>w)&&(d.gravitationForceX=-this.gravityConstant*y,d.gravitationForceY=-this.gravityConstant*v)):(w=p.getEstimatedSize()*this.compoundGravityRangeFactor,(x>w||b>w)&&(d.gravitationForceX=-this.gravityConstant*y*this.compoundGravityConstant,d.gravitationForceY=-this.gravityConstant*v*this.compoundGravityConstant))},h.prototype.isConverged=function(){var d,p=!1;return this.totalIterations>this.maxIterations/3&&(p=Math.abs(this.totalDisplacement-this.oldTotalDisplacement)<2),d=this.totalDisplacement=x.length||w>=x[0].length)){for(var C=0;Ch},"_defaultCompareFunction")}]),l}();t.exports=s},function(t,e,r){"use strict";var n=function(){function s(l,u){for(var h=0;h2&&arguments[2]!==void 0?arguments[2]:1,f=arguments.length>3&&arguments[3]!==void 0?arguments[3]:-1,d=arguments.length>4&&arguments[4]!==void 0?arguments[4]:-1;i(this,s),this.sequence1=l,this.sequence2=u,this.match_score=h,this.mismatch_penalty=f,this.gap_penalty=d,this.iMax=l.length+1,this.jMax=u.length+1,this.grid=new Array(this.iMax);for(var p=0;p=0;l--){var u=this.listeners[l];u.event===a&&u.callback===s&&this.listeners.splice(l,1)}},i.emit=function(a,s){for(var l=0;l{"use strict";o(function(e,r){typeof v4=="object"&&typeof DB=="object"?DB.exports=r(_B()):typeof define=="function"&&define.amd?define(["layout-base"],r):typeof v4=="object"?v4.coseBase=r(_B()):e.coseBase=r(e.layoutBase)},"webpackUniversalModuleDefinition")(v4,function(t){return function(e){var r={};function n(i){if(r[i])return r[i].exports;var a=r[i]={i,l:!1,exports:{}};return e[i].call(a.exports,a,a.exports,n),a.l=!0,a.exports}return o(n,"__webpack_require__"),n.m=e,n.c=r,n.i=function(i){return i},n.d=function(i,a,s){n.o(i,a)||Object.defineProperty(i,a,{configurable:!1,enumerable:!0,get:s})},n.n=function(i){var a=i&&i.__esModule?o(function(){return i.default},"getDefault"):o(function(){return i},"getModuleExports");return n.d(a,"a",a),a},n.o=function(i,a){return Object.prototype.hasOwnProperty.call(i,a)},n.p="",n(n.s=7)}([function(e,r){e.exports=t},function(e,r,n){"use strict";var i=n(0).FDLayoutConstants;function a(){}o(a,"CoSEConstants");for(var s in i)a[s]=i[s];a.DEFAULT_USE_MULTI_LEVEL_SCALING=!1,a.DEFAULT_RADIAL_SEPARATION=i.DEFAULT_EDGE_LENGTH,a.DEFAULT_COMPONENT_SEPERATION=60,a.TILE=!0,a.TILING_PADDING_VERTICAL=10,a.TILING_PADDING_HORIZONTAL=10,a.TREE_REDUCTION_ON_INCREMENTAL=!1,e.exports=a},function(e,r,n){"use strict";var i=n(0).FDLayoutEdge;function a(l,u,h){i.call(this,l,u,h)}o(a,"CoSEEdge"),a.prototype=Object.create(i.prototype);for(var s in i)a[s]=i[s];e.exports=a},function(e,r,n){"use strict";var i=n(0).LGraph;function a(l,u,h){i.call(this,l,u,h)}o(a,"CoSEGraph"),a.prototype=Object.create(i.prototype);for(var s in i)a[s]=i[s];e.exports=a},function(e,r,n){"use strict";var i=n(0).LGraphManager;function a(l){i.call(this,l)}o(a,"CoSEGraphManager"),a.prototype=Object.create(i.prototype);for(var s in i)a[s]=i[s];e.exports=a},function(e,r,n){"use strict";var i=n(0).FDLayoutNode,a=n(0).IMath;function s(u,h,f,d){i.call(this,u,h,f,d)}o(s,"CoSENode"),s.prototype=Object.create(i.prototype);for(var l in i)s[l]=i[l];s.prototype.move=function(){var u=this.graphManager.getLayout();this.displacementX=u.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.noOfChildren,this.displacementY=u.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.noOfChildren,Math.abs(this.displacementX)>u.coolingFactor*u.maxNodeDisplacement&&(this.displacementX=u.coolingFactor*u.maxNodeDisplacement*a.sign(this.displacementX)),Math.abs(this.displacementY)>u.coolingFactor*u.maxNodeDisplacement&&(this.displacementY=u.coolingFactor*u.maxNodeDisplacement*a.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),u.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},s.prototype.propogateDisplacementToChildren=function(u,h){for(var f=this.getChild().getNodes(),d,p=0;p0)this.positionNodesRadially(T);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var E=new Set(this.getAllNodes()),A=this.nodesWithGravity.filter(function(S){return E.has(S)});this.graphManager.setAllNodesToApplyGravitation(A),this.positionNodesRandomly()}}return this.initSpringEmbedder(),this.runSpringEmbedder(),!0},w.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%f.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 T=new Set(this.getAllNodes()),E=this.nodesWithGravity.filter(function(_){return T.has(_)});this.graphManager.setAllNodesToApplyGravitation(E),this.graphManager.updateBounds(),this.updateGrid(),this.coolingFactor=f.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=f.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var A=!this.isTreeGrowing&&!this.isGrowthFinished,S=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(A,S),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},w.prototype.getPositionsData=function(){for(var T=this.graphManager.getAllNodes(),E={},A=0;A1){var k;for(k=0;kS&&(S=Math.floor(L.y)),I=Math.floor(L.x+h.DEFAULT_COMPONENT_SEPERATION)}this.transform(new m(d.WORLD_CENTER_X-L.x/2,d.WORLD_CENTER_Y-L.y/2))},w.radialLayout=function(T,E,A){var S=Math.max(this.maxDiagonalInTree(T),h.DEFAULT_RADIAL_SEPARATION);w.branchRadialLayout(E,null,0,359,0,S);var _=x.calculateBounds(T),I=new b;I.setDeviceOrgX(_.getMinX()),I.setDeviceOrgY(_.getMinY()),I.setWorldOrgX(A.x),I.setWorldOrgY(A.y);for(var L=0;L1;){var Q=U[0];U.splice(0,1);var te=P.indexOf(Q);te>=0&&P.splice(te,1),z--,B--}E!=null?$=(P.indexOf(U[0])+1)%z:$=0;for(var Y=Math.abs(S-A)/B,he=$;F!=B;he=++he%z){var Z=P[he].getOtherEnd(T);if(Z!=E){var ue=(A+F*Y)%360,K=(ue+Y)%360;w.branchRadialLayout(Z,T,ue,K,_+I,I),F++}}},w.maxDiagonalInTree=function(T){for(var E=y.MIN_VALUE,A=0;AE&&(E=_)}return E},w.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},w.prototype.groupZeroDegreeMembers=function(){var T=this,E={};this.memberGroups={},this.idToDummyNode={};for(var A=[],S=this.graphManager.getAllNodes(),_=0;_"u"&&(E[k]=[]),E[k]=E[k].concat(I)}Object.keys(E).forEach(function(D){if(E[D].length>1){var R="DummyCompound_"+D;T.memberGroups[R]=E[D];var O=E[D][0].getParent(),M=new l(T.graphManager);M.id=R,M.paddingLeft=O.paddingLeft||0,M.paddingRight=O.paddingRight||0,M.paddingBottom=O.paddingBottom||0,M.paddingTop=O.paddingTop||0,T.idToDummyNode[R]=M;var P=T.getGraphManager().add(T.newGraph(),M),B=O.getChild();B.add(M);for(var F=0;F=0;T--){var E=this.compoundOrder[T],A=E.id,S=E.paddingLeft,_=E.paddingTop;this.adjustLocations(this.tiledMemberPack[A],E.rect.x,E.rect.y,S,_)}},w.prototype.repopulateZeroDegreeMembers=function(){var T=this,E=this.tiledZeroDegreePack;Object.keys(E).forEach(function(A){var S=T.idToDummyNode[A],_=S.paddingLeft,I=S.paddingTop;T.adjustLocations(E[A],S.rect.x,S.rect.y,_,I)})},w.prototype.getToBeTiled=function(T){var E=T.id;if(this.toBeTiled[E]!=null)return this.toBeTiled[E];var A=T.getChild();if(A==null)return this.toBeTiled[E]=!1,!1;for(var S=A.getNodes(),_=0;_0)return this.toBeTiled[E]=!1,!1;if(I.getChild()==null){this.toBeTiled[I.id]=!1;continue}if(!this.getToBeTiled(I))return this.toBeTiled[E]=!1,!1}return this.toBeTiled[E]=!0,!0},w.prototype.getNodeDegree=function(T){for(var E=T.id,A=T.getEdges(),S=0,_=0;_D&&(D=O.rect.height)}A+=D+T.verticalPadding}},w.prototype.tileCompoundMembers=function(T,E){var A=this;this.tiledMemberPack=[],Object.keys(T).forEach(function(S){var _=E[S];A.tiledMemberPack[S]=A.tileNodes(T[S],_.paddingLeft+_.paddingRight),_.rect.width=A.tiledMemberPack[S].width,_.rect.height=A.tiledMemberPack[S].height})},w.prototype.tileNodes=function(T,E){var A=h.TILING_PADDING_VERTICAL,S=h.TILING_PADDING_HORIZONTAL,_={rows:[],rowWidth:[],rowHeight:[],width:0,height:E,verticalPadding:A,horizontalPadding:S};T.sort(function(k,D){return k.rect.width*k.rect.height>D.rect.width*D.rect.height?-1:k.rect.width*k.rect.height0&&(L+=T.horizontalPadding),T.rowWidth[A]=L,T.width0&&(k+=T.verticalPadding);var D=0;k>T.rowHeight[A]&&(D=T.rowHeight[A],T.rowHeight[A]=k,D=T.rowHeight[A]-D),T.height+=D,T.rows[A].push(E)},w.prototype.getShortestRowIndex=function(T){for(var E=-1,A=Number.MAX_VALUE,S=0;SA&&(E=S,A=T.rowWidth[S]);return E},w.prototype.canAddHorizontal=function(T,E,A){var S=this.getShortestRowIndex(T);if(S<0)return!0;var _=T.rowWidth[S];if(_+T.horizontalPadding+E<=T.width)return!0;var I=0;T.rowHeight[S]0&&(I=A+T.verticalPadding-T.rowHeight[S]);var L;T.width-_>=E+T.horizontalPadding?L=(T.height+I)/(_+E+T.horizontalPadding):L=(T.height+I)/T.width,I=A+T.verticalPadding;var k;return T.widthI&&E!=A){S.splice(-1,1),T.rows[A].push(_),T.rowWidth[E]=T.rowWidth[E]-I,T.rowWidth[A]=T.rowWidth[A]+I,T.width=T.rowWidth[instance.getLongestRowIndex(T)];for(var L=Number.MIN_VALUE,k=0;kL&&(L=S[k].height);E>0&&(L+=T.verticalPadding);var D=T.rowHeight[E]+T.rowHeight[A];T.rowHeight[E]=L,T.rowHeight[A]<_.height+T.verticalPadding&&(T.rowHeight[A]=_.height+T.verticalPadding);var R=T.rowHeight[E]+T.rowHeight[A];T.height+=R-D,this.shiftToLastRow(T)}},w.prototype.tilingPreLayout=function(){h.TILE&&(this.groupZeroDegreeMembers(),this.clearCompounds(),this.clearZeroDegreeMembers())},w.prototype.tilingPostLayout=function(){h.TILE&&(this.repopulateZeroDegreeMembers(),this.repopulateCompounds())},w.prototype.reduceTrees=function(){for(var T=[],E=!0,A;E;){var S=this.graphManager.getAllNodes(),_=[];E=!1;for(var I=0;I0)for(var B=_;B<=I;B++)P[0]+=this.grid[B][L-1].length+this.grid[B][L].length-1;if(I0)for(var B=L;B<=k;B++)P[3]+=this.grid[_-1][B].length+this.grid[_][B].length-1;for(var F=y.MAX_VALUE,z,$,U=0;U{"use strict";o(function(e,r){typeof x4=="object"&&typeof RB=="object"?RB.exports=r(LB()):typeof define=="function"&&define.amd?define(["cose-base"],r):typeof x4=="object"?x4.cytoscapeCoseBilkent=r(LB()):e.cytoscapeCoseBilkent=r(e.coseBase)},"webpackUniversalModuleDefinition")(x4,function(t){return function(e){var r={};function n(i){if(r[i])return r[i].exports;var a=r[i]={i,l:!1,exports:{}};return e[i].call(a.exports,a,a.exports,n),a.l=!0,a.exports}return o(n,"__webpack_require__"),n.m=e,n.c=r,n.i=function(i){return i},n.d=function(i,a,s){n.o(i,a)||Object.defineProperty(i,a,{configurable:!1,enumerable:!0,get:s})},n.n=function(i){var a=i&&i.__esModule?o(function(){return i.default},"getDefault"):o(function(){return i},"getModuleExports");return n.d(a,"a",a),a},n.o=function(i,a){return Object.prototype.hasOwnProperty.call(i,a)},n.p="",n(n.s=1)}([function(e,r){e.exports=t},function(e,r,n){"use strict";var i=n(0).layoutBase.LayoutConstants,a=n(0).layoutBase.FDLayoutConstants,s=n(0).CoSEConstants,l=n(0).CoSELayout,u=n(0).CoSENode,h=n(0).layoutBase.PointD,f=n(0).layoutBase.DimensionD,d={ready:o(function(){},"ready"),stop:o(function(){},"stop"),quality:"default",nodeDimensionsIncludeLabels:!1,refresh:30,fit:!0,padding:10,randomize:!0,nodeRepulsion:4500,idealEdgeLength:50,edgeElasticity:.45,nestingFactor:.1,gravity:.25,numIter:2500,tile:!0,animate:"end",animationDuration:500,tilingPaddingVertical:10,tilingPaddingHorizontal:10,gravityRangeCompound:1.5,gravityCompound:1,gravityRange:3.8,initialEnergyOnIncremental:.5};function p(v,x){var b={};for(var w in v)b[w]=v[w];for(var w in x)b[w]=x[w];return b}o(p,"extend");function m(v){this.options=p(d,v),g(this.options)}o(m,"_CoSELayout");var g=o(function(x){x.nodeRepulsion!=null&&(s.DEFAULT_REPULSION_STRENGTH=a.DEFAULT_REPULSION_STRENGTH=x.nodeRepulsion),x.idealEdgeLength!=null&&(s.DEFAULT_EDGE_LENGTH=a.DEFAULT_EDGE_LENGTH=x.idealEdgeLength),x.edgeElasticity!=null&&(s.DEFAULT_SPRING_STRENGTH=a.DEFAULT_SPRING_STRENGTH=x.edgeElasticity),x.nestingFactor!=null&&(s.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=a.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=x.nestingFactor),x.gravity!=null&&(s.DEFAULT_GRAVITY_STRENGTH=a.DEFAULT_GRAVITY_STRENGTH=x.gravity),x.numIter!=null&&(s.MAX_ITERATIONS=a.MAX_ITERATIONS=x.numIter),x.gravityRange!=null&&(s.DEFAULT_GRAVITY_RANGE_FACTOR=a.DEFAULT_GRAVITY_RANGE_FACTOR=x.gravityRange),x.gravityCompound!=null&&(s.DEFAULT_COMPOUND_GRAVITY_STRENGTH=a.DEFAULT_COMPOUND_GRAVITY_STRENGTH=x.gravityCompound),x.gravityRangeCompound!=null&&(s.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=a.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=x.gravityRangeCompound),x.initialEnergyOnIncremental!=null&&(s.DEFAULT_COOLING_FACTOR_INCREMENTAL=a.DEFAULT_COOLING_FACTOR_INCREMENTAL=x.initialEnergyOnIncremental),x.quality=="draft"?i.QUALITY=0:x.quality=="proof"?i.QUALITY=2:i.QUALITY=1,s.NODE_DIMENSIONS_INCLUDE_LABELS=a.NODE_DIMENSIONS_INCLUDE_LABELS=i.NODE_DIMENSIONS_INCLUDE_LABELS=x.nodeDimensionsIncludeLabels,s.DEFAULT_INCREMENTAL=a.DEFAULT_INCREMENTAL=i.DEFAULT_INCREMENTAL=!x.randomize,s.ANIMATE=a.ANIMATE=i.ANIMATE=x.animate,s.TILE=x.tile,s.TILING_PADDING_VERTICAL=typeof x.tilingPaddingVertical=="function"?x.tilingPaddingVertical.call():x.tilingPaddingVertical,s.TILING_PADDING_HORIZONTAL=typeof x.tilingPaddingHorizontal=="function"?x.tilingPaddingHorizontal.call():x.tilingPaddingHorizontal},"getUserOptions");m.prototype.run=function(){var v,x,b=this.options,w=this.idToLNode={},C=this.layout=new l,T=this;T.stopped=!1,this.cy=this.options.cy,this.cy.trigger({type:"layoutstart",layout:this});var E=C.newGraphManager();this.gm=E;var A=this.options.eles.nodes(),S=this.options.eles.edges();this.root=E.addRoot(),this.processChildrenList(this.root,this.getTopMostNodes(A),C);for(var _=0;_0){var k;k=b.getGraphManager().add(b.newGraph(),A),this.processChildrenList(k,E,b)}}},m.prototype.stop=function(){return this.stopped=!0,this};var y=o(function(x){x("layout","cose-bilkent",m)},"register");typeof cytoscape<"u"&&y(cytoscape),e.exports=y}])})});function HZe(t,e,r,n,i){return t.insert("polygon",":first-child").attr("points",n.map(function(a){return a.x+","+a.y}).join(" ")).attr("transform","translate("+(i.width-e)/2+", "+r+")")}var FZe,$Ze,zZe,GZe,VZe,UZe,WZe,qZe,Fge,$ge,zge=N(()=>{"use strict";no();nr();FZe=12,$Ze=o(function(t,e,r,n){e.append("path").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("d",`M0 ${r.height-5} v${-r.height+2*5} q0,-5 5,-5 h${r.width-2*5} q5,0 5,5 v${r.height-5} H0 Z`),e.append("line").attr("class","node-line-"+n).attr("x1",0).attr("y1",r.height).attr("x2",r.width).attr("y2",r.height)},"defaultBkg"),zZe=o(function(t,e,r){e.append("rect").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("height",r.height).attr("width",r.width)},"rectBkg"),GZe=o(function(t,e,r){let n=r.width,i=r.height,a=.15*n,s=.25*n,l=.35*n,u=.2*n;e.append("path").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("d",`M0 0 a${a},${a} 0 0,1 ${n*.25},${-1*n*.1} + `),l=MJe(n,i,s);l.aPosition=n.getAttribLocation(l,"aPosition"),l.aIndex=n.getAttribLocation(l,"aIndex"),l.aVertType=n.getAttribLocation(l,"aVertType"),l.aAtlasId=n.getAttribLocation(l,"aAtlasId"),l.aTex1=n.getAttribLocation(l,"aTex1"),l.aTex2=n.getAttribLocation(l,"aTex2"),l.aScaleRotate1=n.getAttribLocation(l,"aScaleRotate1"),l.aTranslate1=n.getAttribLocation(l,"aTranslate1"),l.aScaleRotate2=n.getAttribLocation(l,"aScaleRotate2"),l.aTranslate2=n.getAttribLocation(l,"aTranslate2"),l.aPointAPointB=n.getAttribLocation(l,"aPointAPointB"),l.aPointCPointD=n.getAttribLocation(l,"aPointCPointD"),l.aLineWidth=n.getAttribLocation(l,"aLineWidth"),l.aEdgeColor=n.getAttribLocation(l,"aEdgeColor"),l.uPanZoomMatrix=n.getUniformLocation(l,"uPanZoomMatrix"),l.uAtlasSize=n.getUniformLocation(l,"uAtlasSize"),l.uBGColor=n.getUniformLocation(l,"uBGColor"),l.uTextures=[];for(var u=0;u2&&arguments[2]!==void 0?arguments[2]:Jb.SCREEN;this.panZoomMatrix=r,this.debugInfo=n,this.renderTarget=i,this.startBatch()},"startFrame")},{key:"startBatch",value:o(function(){this.instanceCount=0,this.atlasManager.startBatch()},"startBatch")},{key:"endFrame",value:o(function(){this.endBatch()},"endFrame")},{key:"getTempMatrix",value:o(function(){return this.tempMatrix=this.tempMatrix||Zb()},"getTempMatrix")},{key:"drawTexture",value:o(function(r,n,i){var a=this.atlasManager;if(a.isRenderable(r,i)){a.canAddToCurrentBatch(r,i)||this.endBatch();var s=this.instanceCount;this.vertTypeBuffer.getView(s)[0]=yB;var l=this.indexBuffer.getView(s);_6(n,l);var u=a.getAtlasInfo(r,i,u),h=u.atlasID,f=u.tex1,d=u.tex2,p=this.atlasIdBuffer.getView(s);p[0]=h;var m=this.tex1Buffer.getView(s);m[0]=f.x,m[1]=f.y,m[2]=f.w,m[3]=f.h;var g=this.tex2Buffer.getView(s);g[0]=d.x,g[1]=d.y,g[2]=d.w,g[3]=d.h;for(var y=this.getTempMatrix(),v=0,x=[1,2];v=this.maxInstances&&this.endBatch()}},"drawTexture")},{key:"drawEdgeArrow",value:o(function(r,n,i){var a=r._private.rscratch,s,l,u;if(i==="source"?(s=a.arrowStartX,l=a.arrowStartY,u=a.srcArrowAngle):(s=a.arrowEndX,l=a.arrowEndY,u=a.tgtArrowAngle),!(isNaN(s)||s==null||isNaN(l)||l==null||isNaN(u)||u==null)){var h=r.pstyle(i+"-arrow-shape").value;if(h!=="none"){var f=r.pstyle(i+"-arrow-color").value,d=r.pstyle("opacity").value,p=r.pstyle("line-opacity").value,m=d*p,g=r.pstyle("width").pfValue,y=r.pstyle("arrow-scale").value,v=this.r.getArrowWidth(g,y),x=this.getTempMatrix();B1e(x),j6(x,x,[s,l]),sF(x,x,[v,v]),F1e(x,x,u);var b=this.instanceCount;this.vertTypeBuffer.getView(b)[0]=vB;var T=this.indexBuffer.getView(b);_6(n,T);var S=this.edgeColorBuffer.getView(b);A6(f,m,S);var w=this.scaleRotate1Buffer.getView(b);w[0]=x[0],w[1]=x[1],w[2]=x[3],w[3]=x[4];var E=this.translate1Buffer.getView(b);E[0]=x[6],E[1]=x[7],this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}}},"drawEdgeArrow")},{key:"drawEdgeLine",value:o(function(r,n){var i=r.pstyle("opacity").value,a=r.pstyle("line-opacity").value,s=r.pstyle("width").pfValue,l=r.pstyle("line-color").value,u=i*a,h=this.getEdgePoints(r);if(h.length/2+this.instanceCount>this.maxInstances&&this.endBatch(),h.length==4){var f=this.instanceCount;this.vertTypeBuffer.getView(f)[0]=Zme;var d=this.indexBuffer.getView(f);_6(n,d);var p=this.edgeColorBuffer.getView(f);A6(l,u,p);var m=this.lineWidthBuffer.getView(f);m[0]=s;var g=this.pointAPointBBuffer.getView(f);g[0]=h[0],g[1]=h[1],g[2]=h[2],g[3]=h[3],this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}else for(var y=0;y=this.maxInstances&&this.endBatch()}},"drawEdgeLine")},{key:"getEdgePoints",value:o(function(r){var n=r._private.rscratch,i=n.allpts;if(i.length==4)return i;var a=this.getNumSegments(r);return this.getCurveSegmentPoints(i,a)},"getEdgePoints")},{key:"getNumSegments",value:o(function(r){var n=15;return Math.min(Math.max(n,5),this.maxInstances)},"getNumSegments")},{key:"getCurveSegmentPoints",value:o(function(r,n){if(r.length==4)return r;for(var i=Array((n+1)*2),a=0;a<=n;a++)if(a==0)i[0]=r[0],i[1]=r[1];else if(a==n)i[a*2]=r[r.length-2],i[a*2+1]=r[r.length-1];else{var s=a/n;this.setCurvePoint(r,s,i,a*2)}return i},"getCurveSegmentPoints")},{key:"setCurvePoint",value:o(function(r,n,i,a){if(r.length<=2)i[a]=r[0],i[a+1]=r[1];else{for(var s=Array(r.length-2),l=0;l0},"isVisible")},{key:"getStyle",value:o(function(r,n){var i=n.pstyle("".concat(r,"-opacity")).value,a=n.pstyle("".concat(r,"-color")).value,s=n.pstyle("".concat(r,"-shape")).value;return{opacity:i,color:a,shape:s}},"getStyle")},{key:"getPadding",value:o(function(r,n){return n.pstyle("".concat(r,"-padding")).pfValue},"getPadding")},{key:"draw",value:o(function(r,n,i,a){if(this.isVisible(r,i)){var s=this.r,l=a.w,u=a.h,h=l/2,f=u/2,d=this.getStyle(r,i),p=d.shape,m=d.color,g=d.opacity;n.save(),n.fillStyle=ege(m,g),p==="round-rectangle"||p==="roundrectangle"?s.drawRoundRectanglePath(n,h,f,l,u,"auto"):p==="ellipse"&&s.drawEllipsePath(n,h,f,l,u),n.fill(),n.restore()}},"draw")}]),t}();o(XJe,"getBGColor");$1e={};$1e.initWebgl=function(t,e){var r=this,n=r.data.contexts[r.WEBGL],i=t.cy.container();t.bgColor=XJe(i),t.webglTexSize=Math.min(t.webglTexSize,n.getParameter(n.MAX_TEXTURE_SIZE)),t.webglTexRows=Math.min(t.webglTexRows,54),t.webglBatchSize=Math.min(t.webglBatchSize,16384),t.webglTexPerBatch=Math.min(t.webglTexPerBatch,n.getParameter(n.MAX_TEXTURE_IMAGE_UNITS)),r.webglDebug=t.webglDebug,r.webglDebugShowAtlases=t.webglDebugShowAtlases,console.log("max texture units",n.getParameter(n.MAX_TEXTURE_IMAGE_UNITS)),console.log("max texture size",n.getParameter(n.MAX_TEXTURE_SIZE)),console.log("webgl options",t),r.pickingFrameBuffer=$Je(n),r.pickingFrameBuffer.needsDraw=!0;var a=o(function(f){return r.getTextAngle(f,null)},"getLabelRotation"),s=o(function(f){var d=f.pstyle("label");return d&&d.value},"isLabelVisible");r.eleDrawing=new qJe(r,n,t);var l=new YJe(r);r.eleDrawing.addTextureRenderType("node-body",Hb({getKey:e.getStyleKey,getBoundingBox:e.getElementBox,drawElement:e.drawElement,isVisible:o(function(f){return f.visible()},"isVisible")})),r.eleDrawing.addTextureRenderType("node-label",Hb({getKey:e.getLabelKey,getBoundingBox:e.getLabelBox,drawElement:e.drawLabel,getRotation:a,getRotationPoint:e.getLabelRotationPoint,getRotationOffset:e.getLabelRotationOffset,isVisible:s})),r.eleDrawing.addTextureRenderType("node-overlay",Hb({getBoundingBox:e.getElementBox,getKey:o(function(f){return l.getStyleKey("overlay",f)},"getKey"),drawElement:o(function(f,d,p){return l.draw("overlay",f,d,p)},"drawElement"),isVisible:o(function(f){return l.isVisible("overlay",f)},"isVisible"),getPadding:o(function(f){return l.getPadding("overlay",f)},"getPadding")})),r.eleDrawing.addTextureRenderType("node-underlay",Hb({getBoundingBox:e.getElementBox,getKey:o(function(f){return l.getStyleKey("underlay",f)},"getKey"),drawElement:o(function(f,d,p){return l.draw("underlay",f,d,p)},"drawElement"),isVisible:o(function(f){return l.isVisible("underlay",f)},"isVisible"),getPadding:o(function(f){return l.getPadding("underlay",f)},"getPadding")})),r.eleDrawing.addTextureRenderType("edge-label",Hb({getKey:e.getLabelKey,getBoundingBox:e.getLabelBox,drawElement:e.drawLabel,getRotation:a,getRotationPoint:e.getLabelRotationPoint,getRotationOffset:e.getLabelRotationOffset,isVisible:s}));var u=p4(function(){console.log("garbage collect flag set"),r.data.gc=!0},1e4);r.onUpdateEleCalcs(function(h,f){var d=!1;f&&f.length>0&&(d|=r.eleDrawing.invalidate(f)),d&&u()}),jJe(r)};o(jJe,"overrideCanvasRendererFunctions");o(KJe,"clearWebgl");o(QJe,"clearCanvas");o(ZJe,"createPanZoomMatrix");o(z1e,"setContextTransform");o(JJe,"drawSelectionRectangle");o(eet,"drawAxes");o(tet,"drawAtlases");o(ret,"getPickingIndexes");o(net,"findNearestElementsWebgl");o(G1e,"renderWebgl");Wf={};Wf.drawPolygonPath=function(t,e,r,n,i,a){var s=n/2,l=i/2;t.beginPath&&t.beginPath(),t.moveTo(e+s*a[0],r+l*a[1]);for(var u=1;u0&&s>0){m.clearRect(0,0,a,s),m.globalCompositeOperation="source-over";var g=this.getCachedZSortedEles();if(t.full)m.translate(-n.x1*h,-n.y1*h),m.scale(h,h),this.drawElements(m,g),m.scale(1/h,1/h),m.translate(n.x1*h,n.y1*h);else{var y=e.pan(),v={x:y.x*h,y:y.y*h};h*=e.zoom(),m.translate(v.x,v.y),m.scale(h,h),this.drawElements(m,g),m.scale(1/h,1/h),m.translate(-v.x,-v.y)}t.bg&&(m.globalCompositeOperation="destination-over",m.fillStyle=t.bg,m.rect(0,0,a,s),m.fill())}return p};o(iet,"b64ToBlob");o(nge,"b64UriToB64");o(U1e,"output");b4.png=function(t){return U1e(t,this.bufferCanvasImage(t),"image/png")};b4.jpg=function(t){return U1e(t,this.bufferCanvasImage(t),"image/jpeg")};H1e={};H1e.nodeShapeImpl=function(t,e,r,n,i,a,s,l){switch(t){case"ellipse":return this.drawEllipsePath(e,r,n,i,a);case"polygon":return this.drawPolygonPath(e,r,n,i,a,s);case"round-polygon":return this.drawRoundPolygonPath(e,r,n,i,a,s,l);case"roundrectangle":case"round-rectangle":return this.drawRoundRectanglePath(e,r,n,i,a,l);case"cutrectangle":case"cut-rectangle":return this.drawCutRectanglePath(e,r,n,i,a,s,l);case"bottomroundrectangle":case"bottom-round-rectangle":return this.drawBottomRoundRectanglePath(e,r,n,i,a,l);case"barrel":return this.drawBarrelPath(e,r,n,i,a)}};aet=W1e,Sr=W1e.prototype;Sr.CANVAS_LAYERS=3;Sr.SELECT_BOX=0;Sr.DRAG=1;Sr.NODE=2;Sr.WEBGL=3;Sr.CANVAS_TYPES=["2d","2d","2d","webgl2"];Sr.BUFFER_COUNT=3;Sr.TEXTURE_BUFFER=0;Sr.MOTIONBLUR_BUFFER_NODE=1;Sr.MOTIONBLUR_BUFFER_DRAG=2;o(W1e,"CanvasRenderer");Sr.redrawHint=function(t,e){var r=this;switch(t){case"eles":r.data.canvasNeedsRedraw[Sr.NODE]=e;break;case"drag":r.data.canvasNeedsRedraw[Sr.DRAG]=e;break;case"select":r.data.canvasNeedsRedraw[Sr.SELECT_BOX]=e;break;case"gc":r.data.gc=!0;break}};set=typeof Path2D<"u";Sr.path2dEnabled=function(t){if(t===void 0)return this.pathsEnabled;this.pathsEnabled=!!t};Sr.usePaths=function(){return set&&this.pathsEnabled};Sr.setImgSmoothing=function(t,e){t.imageSmoothingEnabled!=null?t.imageSmoothingEnabled=e:(t.webkitImageSmoothingEnabled=e,t.mozImageSmoothingEnabled=e,t.msImageSmoothingEnabled=e)};Sr.getImgSmoothing=function(t){return t.imageSmoothingEnabled!=null?t.imageSmoothingEnabled:t.webkitImageSmoothingEnabled||t.mozImageSmoothingEnabled||t.msImageSmoothingEnabled};Sr.makeOffscreenCanvas=function(t,e){var r;if((typeof OffscreenCanvas>"u"?"undefined":qi(OffscreenCanvas))!=="undefined")r=new OffscreenCanvas(t,e);else{var n=this.cy.window(),i=n.document;r=i.createElement("canvas"),r.width=t,r.height=e}return r};[N1e,tu,oh,iF,n0,py,ws,$1e,Wf,b4,H1e].forEach(function(t){ir(Sr,t)});oet=[{name:"null",impl:v1e},{name:"base",impl:_1e},{name:"canvas",impl:aet}],cet=[{type:"layout",extensions:HZe},{type:"renderer",extensions:oet}],q1e={},Y1e={};o(X1e,"setExtension");o(j1e,"getExtension");o(uet,"setModule");o(het,"getModule");OB=o(function(){if(arguments.length===2)return j1e.apply(null,arguments);if(arguments.length===3)return X1e.apply(null,arguments);if(arguments.length===4)return het.apply(null,arguments);if(arguments.length===5)return uet.apply(null,arguments);oi("Invalid extension access syntax")},"extension");u4.prototype.extension=OB;cet.forEach(function(t){t.extensions.forEach(function(e){X1e(t.type,e.name,e.impl)})});K1e=o(function t(){if(!(this instanceof t))return new t;this.length=0},"Stylesheet"),t0=K1e.prototype;t0.instanceString=function(){return"stylesheet"};t0.selector=function(t){var e=this.length++;return this[e]={selector:t,properties:[]},this};t0.css=function(t,e){var r=this.length-1;if(Zt(t))this[r].properties.push({name:t,value:e});else if(Ur(t))for(var n=t,i=Object.keys(n),a=0;a{"use strict";o(function(e,r){typeof T4=="object"&&typeof lF=="object"?lF.exports=r():typeof define=="function"&&define.amd?define([],r):typeof T4=="object"?T4.layoutBase=r():e.layoutBase=r()},"webpackUniversalModuleDefinition")(T4,function(){return function(t){var e={};function r(n){if(e[n])return e[n].exports;var i=e[n]={i:n,l:!1,exports:{}};return t[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return o(r,"__webpack_require__"),r.m=t,r.c=e,r.i=function(n){return n},r.d=function(n,i,a){r.o(n,i)||Object.defineProperty(n,i,{configurable:!1,enumerable:!0,get:a})},r.n=function(n){var i=n&&n.__esModule?o(function(){return n.default},"getDefault"):o(function(){return n},"getModuleExports");return r.d(i,"a",i),i},r.o=function(n,i){return Object.prototype.hasOwnProperty.call(n,i)},r.p="",r(r.s=26)}([function(t,e,r){"use strict";function n(){}o(n,"LayoutConstants"),n.QUALITY=1,n.DEFAULT_CREATE_BENDS_AS_NEEDED=!1,n.DEFAULT_INCREMENTAL=!1,n.DEFAULT_ANIMATION_ON_LAYOUT=!0,n.DEFAULT_ANIMATION_DURING_LAYOUT=!1,n.DEFAULT_ANIMATION_PERIOD=50,n.DEFAULT_UNIFORM_LEAF_NODE_SIZES=!1,n.DEFAULT_GRAPH_MARGIN=15,n.NODE_DIMENSIONS_INCLUDE_LABELS=!1,n.SIMPLE_NODE_SIZE=40,n.SIMPLE_NODE_HALF_SIZE=n.SIMPLE_NODE_SIZE/2,n.EMPTY_COMPOUND_NODE_SIZE=40,n.MIN_EDGE_LENGTH=1,n.WORLD_BOUNDARY=1e6,n.INITIAL_WORLD_BOUNDARY=n.WORLD_BOUNDARY/1e3,n.WORLD_CENTER_X=1200,n.WORLD_CENTER_Y=900,t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(8),a=r(9);function s(u,h,f){n.call(this,f),this.isOverlapingSourceAndTarget=!1,this.vGraphObject=f,this.bendpoints=[],this.source=u,this.target=h}o(s,"LEdge"),s.prototype=Object.create(n.prototype);for(var l in n)s[l]=n[l];s.prototype.getSource=function(){return this.source},s.prototype.getTarget=function(){return this.target},s.prototype.isInterGraph=function(){return this.isInterGraph},s.prototype.getLength=function(){return this.length},s.prototype.isOverlapingSourceAndTarget=function(){return this.isOverlapingSourceAndTarget},s.prototype.getBendpoints=function(){return this.bendpoints},s.prototype.getLca=function(){return this.lca},s.prototype.getSourceInLca=function(){return this.sourceInLca},s.prototype.getTargetInLca=function(){return this.targetInLca},s.prototype.getOtherEnd=function(u){if(this.source===u)return this.target;if(this.target===u)return this.source;throw"Node is not incident with this edge"},s.prototype.getOtherEndInGraph=function(u,h){for(var f=this.getOtherEnd(u),d=h.getGraphManager().getRoot();;){if(f.getOwner()==h)return f;if(f.getOwner()==d)break;f=f.getOwner().getParent()}return null},s.prototype.updateLength=function(){var u=new Array(4);this.isOverlapingSourceAndTarget=i.getIntersection(this.target.getRect(),this.source.getRect(),u),this.isOverlapingSourceAndTarget||(this.lengthX=u[0]-u[2],this.lengthY=u[1]-u[3],Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY))},s.prototype.updateLengthSimple=function(){this.lengthX=this.target.getCenterX()-this.source.getCenterX(),this.lengthY=this.target.getCenterY()-this.source.getCenterY(),Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY)},t.exports=s},function(t,e,r){"use strict";function n(i){this.vGraphObject=i}o(n,"LGraphObject"),t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(10),a=r(13),s=r(0),l=r(16),u=r(4);function h(d,p,m,g){m==null&&g==null&&(g=p),n.call(this,g),d.graphManager!=null&&(d=d.graphManager),this.estimatedSize=i.MIN_VALUE,this.inclusionTreeDepth=i.MAX_VALUE,this.vGraphObject=g,this.edges=[],this.graphManager=d,m!=null&&p!=null?this.rect=new a(p.x,p.y,m.width,m.height):this.rect=new a}o(h,"LNode"),h.prototype=Object.create(n.prototype);for(var f in n)h[f]=n[f];h.prototype.getEdges=function(){return this.edges},h.prototype.getChild=function(){return this.child},h.prototype.getOwner=function(){return this.owner},h.prototype.getWidth=function(){return this.rect.width},h.prototype.setWidth=function(d){this.rect.width=d},h.prototype.getHeight=function(){return this.rect.height},h.prototype.setHeight=function(d){this.rect.height=d},h.prototype.getCenterX=function(){return this.rect.x+this.rect.width/2},h.prototype.getCenterY=function(){return this.rect.y+this.rect.height/2},h.prototype.getCenter=function(){return new u(this.rect.x+this.rect.width/2,this.rect.y+this.rect.height/2)},h.prototype.getLocation=function(){return new u(this.rect.x,this.rect.y)},h.prototype.getRect=function(){return this.rect},h.prototype.getDiagonal=function(){return Math.sqrt(this.rect.width*this.rect.width+this.rect.height*this.rect.height)},h.prototype.getHalfTheDiagonal=function(){return Math.sqrt(this.rect.height*this.rect.height+this.rect.width*this.rect.width)/2},h.prototype.setRect=function(d,p){this.rect.x=d.x,this.rect.y=d.y,this.rect.width=p.width,this.rect.height=p.height},h.prototype.setCenter=function(d,p){this.rect.x=d-this.rect.width/2,this.rect.y=p-this.rect.height/2},h.prototype.setLocation=function(d,p){this.rect.x=d,this.rect.y=p},h.prototype.moveBy=function(d,p){this.rect.x+=d,this.rect.y+=p},h.prototype.getEdgeListToNode=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(y.target==d){if(y.source!=g)throw"Incorrect edge source!";p.push(y)}}),p},h.prototype.getEdgesBetween=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(!(y.source==g||y.target==g))throw"Incorrect edge source and/or target";(y.target==d||y.source==d)&&p.push(y)}),p},h.prototype.getNeighborsList=function(){var d=new Set,p=this;return p.edges.forEach(function(m){if(m.source==p)d.add(m.target);else{if(m.target!=p)throw"Incorrect incidency!";d.add(m.source)}}),d},h.prototype.withChildren=function(){var d=new Set,p,m;if(d.add(this),this.child!=null)for(var g=this.child.getNodes(),y=0;yp&&(this.rect.x-=(this.labelWidth-p)/2,this.setWidth(this.labelWidth)),this.labelHeight>m&&(this.labelPos=="center"?this.rect.y-=(this.labelHeight-m)/2:this.labelPos=="top"&&(this.rect.y-=this.labelHeight-m),this.setHeight(this.labelHeight))}}},h.prototype.getInclusionTreeDepth=function(){if(this.inclusionTreeDepth==i.MAX_VALUE)throw"assert failed";return this.inclusionTreeDepth},h.prototype.transform=function(d){var p=this.rect.x;p>s.WORLD_BOUNDARY?p=s.WORLD_BOUNDARY:p<-s.WORLD_BOUNDARY&&(p=-s.WORLD_BOUNDARY);var m=this.rect.y;m>s.WORLD_BOUNDARY?m=s.WORLD_BOUNDARY:m<-s.WORLD_BOUNDARY&&(m=-s.WORLD_BOUNDARY);var g=new u(p,m),y=d.inverseTransformPoint(g);this.setLocation(y.x,y.y)},h.prototype.getLeft=function(){return this.rect.x},h.prototype.getRight=function(){return this.rect.x+this.rect.width},h.prototype.getTop=function(){return this.rect.y},h.prototype.getBottom=function(){return this.rect.y+this.rect.height},h.prototype.getParent=function(){return this.owner==null?null:this.owner.getParent()},t.exports=h},function(t,e,r){"use strict";function n(i,a){i==null&&a==null?(this.x=0,this.y=0):(this.x=i,this.y=a)}o(n,"PointD"),n.prototype.getX=function(){return this.x},n.prototype.getY=function(){return this.y},n.prototype.setX=function(i){this.x=i},n.prototype.setY=function(i){this.y=i},n.prototype.getDifference=function(i){return new DimensionD(this.x-i.x,this.y-i.y)},n.prototype.getCopy=function(){return new n(this.x,this.y)},n.prototype.translate=function(i){return this.x+=i.width,this.y+=i.height,this},t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(10),a=r(0),s=r(6),l=r(3),u=r(1),h=r(13),f=r(12),d=r(11);function p(g,y,v){n.call(this,v),this.estimatedSize=i.MIN_VALUE,this.margin=a.DEFAULT_GRAPH_MARGIN,this.edges=[],this.nodes=[],this.isConnected=!1,this.parent=g,y!=null&&y instanceof s?this.graphManager=y:y!=null&&y instanceof Layout&&(this.graphManager=y.graphManager)}o(p,"LGraph"),p.prototype=Object.create(n.prototype);for(var m in n)p[m]=n[m];p.prototype.getNodes=function(){return this.nodes},p.prototype.getEdges=function(){return this.edges},p.prototype.getGraphManager=function(){return this.graphManager},p.prototype.getParent=function(){return this.parent},p.prototype.getLeft=function(){return this.left},p.prototype.getRight=function(){return this.right},p.prototype.getTop=function(){return this.top},p.prototype.getBottom=function(){return this.bottom},p.prototype.isConnected=function(){return this.isConnected},p.prototype.add=function(g,y,v){if(y==null&&v==null){var x=g;if(this.graphManager==null)throw"Graph has no graph mgr!";if(this.getNodes().indexOf(x)>-1)throw"Node already in graph!";return x.owner=this,this.getNodes().push(x),x}else{var b=g;if(!(this.getNodes().indexOf(y)>-1&&this.getNodes().indexOf(v)>-1))throw"Source or target not in graph!";if(!(y.owner==v.owner&&y.owner==this))throw"Both owners must be this graph!";return y.owner!=v.owner?null:(b.source=y,b.target=v,b.isInterGraph=!1,this.getEdges().push(b),y.edges.push(b),v!=y&&v.edges.push(b),b)}},p.prototype.remove=function(g){var y=g;if(g instanceof l){if(y==null)throw"Node is null!";if(!(y.owner!=null&&y.owner==this))throw"Owner graph is invalid!";if(this.graphManager==null)throw"Owner graph manager is invalid!";for(var v=y.edges.slice(),x,b=v.length,T=0;T-1&&E>-1))throw"Source and/or target doesn't know this edge!";x.source.edges.splice(w,1),x.target!=x.source&&x.target.edges.splice(E,1);var S=x.source.owner.getEdges().indexOf(x);if(S==-1)throw"Not in owner's edge list!";x.source.owner.getEdges().splice(S,1)}},p.prototype.updateLeftTop=function(){for(var g=i.MAX_VALUE,y=i.MAX_VALUE,v,x,b,T=this.getNodes(),S=T.length,w=0;wv&&(g=v),y>x&&(y=x)}return g==i.MAX_VALUE?null:(T[0].getParent().paddingLeft!=null?b=T[0].getParent().paddingLeft:b=this.margin,this.left=y-b,this.top=g-b,new f(this.left,this.top))},p.prototype.updateBounds=function(g){for(var y=i.MAX_VALUE,v=-i.MAX_VALUE,x=i.MAX_VALUE,b=-i.MAX_VALUE,T,S,w,E,_,C=this.nodes,D=C.length,O=0;OT&&(y=T),vw&&(x=w),bT&&(y=T),vw&&(x=w),b=this.nodes.length){var D=0;v.forEach(function(O){O.owner==g&&D++}),D==this.nodes.length&&(this.isConnected=!0)}},t.exports=p},function(t,e,r){"use strict";var n,i=r(1);function a(s){n=r(5),this.layout=s,this.graphs=[],this.edges=[]}o(a,"LGraphManager"),a.prototype.addRoot=function(){var s=this.layout.newGraph(),l=this.layout.newNode(null),u=this.add(s,l);return this.setRootGraph(u),this.rootGraph},a.prototype.add=function(s,l,u,h,f){if(u==null&&h==null&&f==null){if(s==null)throw"Graph is null!";if(l==null)throw"Parent node is null!";if(this.graphs.indexOf(s)>-1)throw"Graph already in this graph mgr!";if(this.graphs.push(s),s.parent!=null)throw"Already has a parent!";if(l.child!=null)throw"Already has a child!";return s.parent=l,l.child=s,s}else{f=u,h=l,u=s;var d=h.getOwner(),p=f.getOwner();if(!(d!=null&&d.getGraphManager()==this))throw"Source not in this graph mgr!";if(!(p!=null&&p.getGraphManager()==this))throw"Target not in this graph mgr!";if(d==p)return u.isInterGraph=!1,d.add(u,h,f);if(u.isInterGraph=!0,u.source=h,u.target=f,this.edges.indexOf(u)>-1)throw"Edge already in inter-graph edge list!";if(this.edges.push(u),!(u.source!=null&&u.target!=null))throw"Edge source and/or target is null!";if(!(u.source.edges.indexOf(u)==-1&&u.target.edges.indexOf(u)==-1))throw"Edge already in source and/or target incidency list!";return u.source.edges.push(u),u.target.edges.push(u),u}},a.prototype.remove=function(s){if(s instanceof n){var l=s;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 u=[];u=u.concat(l.getEdges());for(var h,f=u.length,d=0;d=s.getRight()?l[0]+=Math.min(s.getX()-a.getX(),a.getRight()-s.getRight()):s.getX()<=a.getX()&&s.getRight()>=a.getRight()&&(l[0]+=Math.min(a.getX()-s.getX(),s.getRight()-a.getRight())),a.getY()<=s.getY()&&a.getBottom()>=s.getBottom()?l[1]+=Math.min(s.getY()-a.getY(),a.getBottom()-s.getBottom()):s.getY()<=a.getY()&&s.getBottom()>=a.getBottom()&&(l[1]+=Math.min(a.getY()-s.getY(),s.getBottom()-a.getBottom()));var f=Math.abs((s.getCenterY()-a.getCenterY())/(s.getCenterX()-a.getCenterX()));s.getCenterY()===a.getCenterY()&&s.getCenterX()===a.getCenterX()&&(f=1);var d=f*l[0],p=l[1]/f;l[0]d)return l[0]=u,l[1]=m,l[2]=f,l[3]=C,!1;if(hf)return l[0]=p,l[1]=h,l[2]=E,l[3]=d,!1;if(uf?(l[0]=y,l[1]=v,k=!0):(l[0]=g,l[1]=m,k=!0):A===M&&(u>f?(l[0]=p,l[1]=m,k=!0):(l[0]=x,l[1]=v,k=!0)),-I===M?f>u?(l[2]=_,l[3]=C,L=!0):(l[2]=E,l[3]=w,L=!0):I===M&&(f>u?(l[2]=S,l[3]=w,L=!0):(l[2]=D,l[3]=C,L=!0)),k&&L)return!1;if(u>f?h>d?(P=this.getCardinalDirection(A,M,4),B=this.getCardinalDirection(I,M,2)):(P=this.getCardinalDirection(-A,M,3),B=this.getCardinalDirection(-I,M,1)):h>d?(P=this.getCardinalDirection(-A,M,1),B=this.getCardinalDirection(-I,M,3)):(P=this.getCardinalDirection(A,M,2),B=this.getCardinalDirection(I,M,4)),!k)switch(P){case 1:z=m,F=u+-T/M,l[0]=F,l[1]=z;break;case 2:F=x,z=h+b*M,l[0]=F,l[1]=z;break;case 3:z=v,F=u+T/M,l[0]=F,l[1]=z;break;case 4:F=y,z=h+-b*M,l[0]=F,l[1]=z;break}if(!L)switch(B){case 1:U=w,$=f+-R/M,l[2]=$,l[3]=U;break;case 2:$=D,U=d+O*M,l[2]=$,l[3]=U;break;case 3:U=C,$=f+R/M,l[2]=$,l[3]=U;break;case 4:$=_,U=d+-O*M,l[2]=$,l[3]=U;break}}return!1},i.getCardinalDirection=function(a,s,l){return a>s?l:1+l%4},i.getIntersection=function(a,s,l,u){if(u==null)return this.getIntersection2(a,s,l);var h=a.x,f=a.y,d=s.x,p=s.y,m=l.x,g=l.y,y=u.x,v=u.y,x=void 0,b=void 0,T=void 0,S=void 0,w=void 0,E=void 0,_=void 0,C=void 0,D=void 0;return T=p-f,w=h-d,_=d*f-h*p,S=v-g,E=m-y,C=y*g-m*v,D=T*E-S*w,D===0?null:(x=(w*C-E*_)/D,b=(S*_-T*C)/D,new n(x,b))},i.angleOfVector=function(a,s,l,u){var h=void 0;return a!==l?(h=Math.atan((u-s)/(l-a)),l0?1:i<0?-1:0},n.floor=function(i){return i<0?Math.ceil(i):Math.floor(i)},n.ceil=function(i){return i<0?Math.floor(i):Math.ceil(i)},t.exports=n},function(t,e,r){"use strict";function n(){}o(n,"Integer"),n.MAX_VALUE=2147483647,n.MIN_VALUE=-2147483648,t.exports=n},function(t,e,r){"use strict";var n=function(){function h(f,d){for(var p=0;p"u"?"undefined":n(a);return a==null||s!="object"&&s!="function"},t.exports=i},function(t,e,r){"use strict";function n(m){if(Array.isArray(m)){for(var g=0,y=Array(m.length);g0&&g;){for(T.push(w[0]);T.length>0&&g;){var E=T[0];T.splice(0,1),b.add(E);for(var _=E.getEdges(),x=0;x<_.length;x++){var C=_[x].getOtherEnd(E);if(S.get(E)!=C)if(!b.has(C))T.push(C),S.set(C,E);else{g=!1;break}}}if(!g)m=[];else{var D=[].concat(n(b));m.push(D);for(var x=0;x-1&&w.splice(R,1)}b=new Set,S=new Map}}return m},p.prototype.createDummyNodesForBendpoints=function(m){for(var g=[],y=m.source,v=this.graphManager.calcLowestCommonAncestor(m.source,m.target),x=0;x0){for(var v=this.edgeToDummyNodes.get(y),x=0;x=0&&g.splice(C,1);var D=S.getNeighborsList();D.forEach(function(k){if(y.indexOf(k)<0){var L=v.get(k),A=L-1;A==1&&E.push(k),v.set(k,A)}})}y=y.concat(E),(g.length==1||g.length==2)&&(x=!0,b=g[0])}return b},p.prototype.setGraphManager=function(m){this.graphManager=m},t.exports=p},function(t,e,r){"use strict";function n(){}o(n,"RandomSeed"),n.seed=1,n.x=0,n.nextDouble=function(){return n.x=Math.sin(n.seed++)*1e4,n.x-Math.floor(n.x)},t.exports=n},function(t,e,r){"use strict";var n=r(4);function i(a,s){this.lworldOrgX=0,this.lworldOrgY=0,this.ldeviceOrgX=0,this.ldeviceOrgY=0,this.lworldExtX=1,this.lworldExtY=1,this.ldeviceExtX=1,this.ldeviceExtY=1}o(i,"Transform"),i.prototype.getWorldOrgX=function(){return this.lworldOrgX},i.prototype.setWorldOrgX=function(a){this.lworldOrgX=a},i.prototype.getWorldOrgY=function(){return this.lworldOrgY},i.prototype.setWorldOrgY=function(a){this.lworldOrgY=a},i.prototype.getWorldExtX=function(){return this.lworldExtX},i.prototype.setWorldExtX=function(a){this.lworldExtX=a},i.prototype.getWorldExtY=function(){return this.lworldExtY},i.prototype.setWorldExtY=function(a){this.lworldExtY=a},i.prototype.getDeviceOrgX=function(){return this.ldeviceOrgX},i.prototype.setDeviceOrgX=function(a){this.ldeviceOrgX=a},i.prototype.getDeviceOrgY=function(){return this.ldeviceOrgY},i.prototype.setDeviceOrgY=function(a){this.ldeviceOrgY=a},i.prototype.getDeviceExtX=function(){return this.ldeviceExtX},i.prototype.setDeviceExtX=function(a){this.ldeviceExtX=a},i.prototype.getDeviceExtY=function(){return this.ldeviceExtY},i.prototype.setDeviceExtY=function(a){this.ldeviceExtY=a},i.prototype.transformX=function(a){var s=0,l=this.lworldExtX;return l!=0&&(s=this.ldeviceOrgX+(a-this.lworldOrgX)*this.ldeviceExtX/l),s},i.prototype.transformY=function(a){var s=0,l=this.lworldExtY;return l!=0&&(s=this.ldeviceOrgY+(a-this.lworldOrgY)*this.ldeviceExtY/l),s},i.prototype.inverseTransformX=function(a){var s=0,l=this.ldeviceExtX;return l!=0&&(s=this.lworldOrgX+(a-this.ldeviceOrgX)*this.lworldExtX/l),s},i.prototype.inverseTransformY=function(a){var s=0,l=this.ldeviceExtY;return l!=0&&(s=this.lworldOrgY+(a-this.ldeviceOrgY)*this.lworldExtY/l),s},i.prototype.inverseTransformPoint=function(a){var s=new n(this.inverseTransformX(a.x),this.inverseTransformY(a.y));return s},t.exports=i},function(t,e,r){"use strict";function n(d){if(Array.isArray(d)){for(var p=0,m=Array(d.length);pa.ADAPTATION_LOWER_NODE_LIMIT&&(this.coolingFactor=Math.max(this.coolingFactor*a.COOLING_ADAPTATION_FACTOR,this.coolingFactor-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*this.coolingFactor*(1-a.COOLING_ADAPTATION_FACTOR))),this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT_INCREMENTAL):(d>a.ADAPTATION_LOWER_NODE_LIMIT?this.coolingFactor=Math.max(a.COOLING_ADAPTATION_FACTOR,1-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*(1-a.COOLING_ADAPTATION_FACTOR)):this.coolingFactor=1,this.initialCoolingFactor=this.coolingFactor,this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT),this.maxIterations=Math.max(this.getAllNodes().length*5,this.maxIterations),this.totalDisplacementThreshold=this.displacementThresholdPerNode*this.getAllNodes().length,this.repulsionRange=this.calcRepulsionRange()},h.prototype.calcSpringForces=function(){for(var d=this.getAllEdges(),p,m=0;m0&&arguments[0]!==void 0?arguments[0]:!0,p=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,m,g,y,v,x=this.getAllNodes(),b;if(this.useFRGridVariant)for(this.totalIterations%a.GRID_CALCULATION_CHECK_PERIOD==1&&d&&this.updateGrid(),b=new Set,m=0;mT||b>T)&&(d.gravitationForceX=-this.gravityConstant*y,d.gravitationForceY=-this.gravityConstant*v)):(T=p.getEstimatedSize()*this.compoundGravityRangeFactor,(x>T||b>T)&&(d.gravitationForceX=-this.gravityConstant*y*this.compoundGravityConstant,d.gravitationForceY=-this.gravityConstant*v*this.compoundGravityConstant))},h.prototype.isConverged=function(){var d,p=!1;return this.totalIterations>this.maxIterations/3&&(p=Math.abs(this.totalDisplacement-this.oldTotalDisplacement)<2),d=this.totalDisplacement=x.length||T>=x[0].length)){for(var S=0;Sh},"_defaultCompareFunction")}]),l}();t.exports=s},function(t,e,r){"use strict";var n=function(){function s(l,u){for(var h=0;h2&&arguments[2]!==void 0?arguments[2]:1,f=arguments.length>3&&arguments[3]!==void 0?arguments[3]:-1,d=arguments.length>4&&arguments[4]!==void 0?arguments[4]:-1;i(this,s),this.sequence1=l,this.sequence2=u,this.match_score=h,this.mismatch_penalty=f,this.gap_penalty=d,this.iMax=l.length+1,this.jMax=u.length+1,this.grid=new Array(this.iMax);for(var p=0;p=0;l--){var u=this.listeners[l];u.event===a&&u.callback===s&&this.listeners.splice(l,1)}},i.emit=function(a,s){for(var l=0;l{"use strict";o(function(e,r){typeof w4=="object"&&typeof uF=="object"?uF.exports=r(cF()):typeof define=="function"&&define.amd?define(["layout-base"],r):typeof w4=="object"?w4.coseBase=r(cF()):e.coseBase=r(e.layoutBase)},"webpackUniversalModuleDefinition")(w4,function(t){return function(e){var r={};function n(i){if(r[i])return r[i].exports;var a=r[i]={i,l:!1,exports:{}};return e[i].call(a.exports,a,a.exports,n),a.l=!0,a.exports}return o(n,"__webpack_require__"),n.m=e,n.c=r,n.i=function(i){return i},n.d=function(i,a,s){n.o(i,a)||Object.defineProperty(i,a,{configurable:!1,enumerable:!0,get:s})},n.n=function(i){var a=i&&i.__esModule?o(function(){return i.default},"getDefault"):o(function(){return i},"getModuleExports");return n.d(a,"a",a),a},n.o=function(i,a){return Object.prototype.hasOwnProperty.call(i,a)},n.p="",n(n.s=7)}([function(e,r){e.exports=t},function(e,r,n){"use strict";var i=n(0).FDLayoutConstants;function a(){}o(a,"CoSEConstants");for(var s in i)a[s]=i[s];a.DEFAULT_USE_MULTI_LEVEL_SCALING=!1,a.DEFAULT_RADIAL_SEPARATION=i.DEFAULT_EDGE_LENGTH,a.DEFAULT_COMPONENT_SEPERATION=60,a.TILE=!0,a.TILING_PADDING_VERTICAL=10,a.TILING_PADDING_HORIZONTAL=10,a.TREE_REDUCTION_ON_INCREMENTAL=!1,e.exports=a},function(e,r,n){"use strict";var i=n(0).FDLayoutEdge;function a(l,u,h){i.call(this,l,u,h)}o(a,"CoSEEdge"),a.prototype=Object.create(i.prototype);for(var s in i)a[s]=i[s];e.exports=a},function(e,r,n){"use strict";var i=n(0).LGraph;function a(l,u,h){i.call(this,l,u,h)}o(a,"CoSEGraph"),a.prototype=Object.create(i.prototype);for(var s in i)a[s]=i[s];e.exports=a},function(e,r,n){"use strict";var i=n(0).LGraphManager;function a(l){i.call(this,l)}o(a,"CoSEGraphManager"),a.prototype=Object.create(i.prototype);for(var s in i)a[s]=i[s];e.exports=a},function(e,r,n){"use strict";var i=n(0).FDLayoutNode,a=n(0).IMath;function s(u,h,f,d){i.call(this,u,h,f,d)}o(s,"CoSENode"),s.prototype=Object.create(i.prototype);for(var l in i)s[l]=i[l];s.prototype.move=function(){var u=this.graphManager.getLayout();this.displacementX=u.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.noOfChildren,this.displacementY=u.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.noOfChildren,Math.abs(this.displacementX)>u.coolingFactor*u.maxNodeDisplacement&&(this.displacementX=u.coolingFactor*u.maxNodeDisplacement*a.sign(this.displacementX)),Math.abs(this.displacementY)>u.coolingFactor*u.maxNodeDisplacement&&(this.displacementY=u.coolingFactor*u.maxNodeDisplacement*a.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),u.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},s.prototype.propogateDisplacementToChildren=function(u,h){for(var f=this.getChild().getNodes(),d,p=0;p0)this.positionNodesRadially(w);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var E=new Set(this.getAllNodes()),_=this.nodesWithGravity.filter(function(C){return E.has(C)});this.graphManager.setAllNodesToApplyGravitation(_),this.positionNodesRandomly()}}return this.initSpringEmbedder(),this.runSpringEmbedder(),!0},T.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%f.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 w=new Set(this.getAllNodes()),E=this.nodesWithGravity.filter(function(D){return w.has(D)});this.graphManager.setAllNodesToApplyGravitation(E),this.graphManager.updateBounds(),this.updateGrid(),this.coolingFactor=f.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=f.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var _=!this.isTreeGrowing&&!this.isGrowthFinished,C=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(_,C),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},T.prototype.getPositionsData=function(){for(var w=this.graphManager.getAllNodes(),E={},_=0;_1){var k;for(k=0;kC&&(C=Math.floor(R.y)),O=Math.floor(R.x+h.DEFAULT_COMPONENT_SEPERATION)}this.transform(new m(d.WORLD_CENTER_X-R.x/2,d.WORLD_CENTER_Y-R.y/2))},T.radialLayout=function(w,E,_){var C=Math.max(this.maxDiagonalInTree(w),h.DEFAULT_RADIAL_SEPARATION);T.branchRadialLayout(E,null,0,359,0,C);var D=x.calculateBounds(w),O=new b;O.setDeviceOrgX(D.getMinX()),O.setDeviceOrgY(D.getMinY()),O.setWorldOrgX(_.x),O.setWorldOrgY(_.y);for(var R=0;R1;){var K=U[0];U.splice(0,1);var ee=P.indexOf(K);ee>=0&&P.splice(ee,1),z--,B--}E!=null?$=(P.indexOf(U[0])+1)%z:$=0;for(var Y=Math.abs(C-_)/B,ce=$;F!=B;ce=++ce%z){var Z=P[ce].getOtherEnd(w);if(Z!=E){var ue=(_+F*Y)%360,Q=(ue+Y)%360;T.branchRadialLayout(Z,w,ue,Q,D+O,O),F++}}},T.maxDiagonalInTree=function(w){for(var E=y.MIN_VALUE,_=0;_E&&(E=D)}return E},T.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},T.prototype.groupZeroDegreeMembers=function(){var w=this,E={};this.memberGroups={},this.idToDummyNode={};for(var _=[],C=this.graphManager.getAllNodes(),D=0;D"u"&&(E[k]=[]),E[k]=E[k].concat(O)}Object.keys(E).forEach(function(L){if(E[L].length>1){var A="DummyCompound_"+L;w.memberGroups[A]=E[L];var I=E[L][0].getParent(),M=new l(w.graphManager);M.id=A,M.paddingLeft=I.paddingLeft||0,M.paddingRight=I.paddingRight||0,M.paddingBottom=I.paddingBottom||0,M.paddingTop=I.paddingTop||0,w.idToDummyNode[A]=M;var P=w.getGraphManager().add(w.newGraph(),M),B=I.getChild();B.add(M);for(var F=0;F=0;w--){var E=this.compoundOrder[w],_=E.id,C=E.paddingLeft,D=E.paddingTop;this.adjustLocations(this.tiledMemberPack[_],E.rect.x,E.rect.y,C,D)}},T.prototype.repopulateZeroDegreeMembers=function(){var w=this,E=this.tiledZeroDegreePack;Object.keys(E).forEach(function(_){var C=w.idToDummyNode[_],D=C.paddingLeft,O=C.paddingTop;w.adjustLocations(E[_],C.rect.x,C.rect.y,D,O)})},T.prototype.getToBeTiled=function(w){var E=w.id;if(this.toBeTiled[E]!=null)return this.toBeTiled[E];var _=w.getChild();if(_==null)return this.toBeTiled[E]=!1,!1;for(var C=_.getNodes(),D=0;D0)return this.toBeTiled[E]=!1,!1;if(O.getChild()==null){this.toBeTiled[O.id]=!1;continue}if(!this.getToBeTiled(O))return this.toBeTiled[E]=!1,!1}return this.toBeTiled[E]=!0,!0},T.prototype.getNodeDegree=function(w){for(var E=w.id,_=w.getEdges(),C=0,D=0;D<_.length;D++){var O=_[D];O.getSource().id!==O.getTarget().id&&(C=C+1)}return C},T.prototype.getNodeDegreeWithChildren=function(w){var E=this.getNodeDegree(w);if(w.getChild()==null)return E;for(var _=w.getChild().getNodes(),C=0;C<_.length;C++){var D=_[C];E+=this.getNodeDegreeWithChildren(D)}return E},T.prototype.performDFSOnCompounds=function(){this.compoundOrder=[],this.fillCompexOrderByDFS(this.graphManager.getRoot().getNodes())},T.prototype.fillCompexOrderByDFS=function(w){for(var E=0;EL&&(L=I.rect.height)}_+=L+w.verticalPadding}},T.prototype.tileCompoundMembers=function(w,E){var _=this;this.tiledMemberPack=[],Object.keys(w).forEach(function(C){var D=E[C];_.tiledMemberPack[C]=_.tileNodes(w[C],D.paddingLeft+D.paddingRight),D.rect.width=_.tiledMemberPack[C].width,D.rect.height=_.tiledMemberPack[C].height})},T.prototype.tileNodes=function(w,E){var _=h.TILING_PADDING_VERTICAL,C=h.TILING_PADDING_HORIZONTAL,D={rows:[],rowWidth:[],rowHeight:[],width:0,height:E,verticalPadding:_,horizontalPadding:C};w.sort(function(k,L){return k.rect.width*k.rect.height>L.rect.width*L.rect.height?-1:k.rect.width*k.rect.height0&&(R+=w.horizontalPadding),w.rowWidth[_]=R,w.width0&&(k+=w.verticalPadding);var L=0;k>w.rowHeight[_]&&(L=w.rowHeight[_],w.rowHeight[_]=k,L=w.rowHeight[_]-L),w.height+=L,w.rows[_].push(E)},T.prototype.getShortestRowIndex=function(w){for(var E=-1,_=Number.MAX_VALUE,C=0;C_&&(E=C,_=w.rowWidth[C]);return E},T.prototype.canAddHorizontal=function(w,E,_){var C=this.getShortestRowIndex(w);if(C<0)return!0;var D=w.rowWidth[C];if(D+w.horizontalPadding+E<=w.width)return!0;var O=0;w.rowHeight[C]<_&&C>0&&(O=_+w.verticalPadding-w.rowHeight[C]);var R;w.width-D>=E+w.horizontalPadding?R=(w.height+O)/(D+E+w.horizontalPadding):R=(w.height+O)/w.width,O=_+w.verticalPadding;var k;return w.widthO&&E!=_){C.splice(-1,1),w.rows[_].push(D),w.rowWidth[E]=w.rowWidth[E]-O,w.rowWidth[_]=w.rowWidth[_]+O,w.width=w.rowWidth[instance.getLongestRowIndex(w)];for(var R=Number.MIN_VALUE,k=0;kR&&(R=C[k].height);E>0&&(R+=w.verticalPadding);var L=w.rowHeight[E]+w.rowHeight[_];w.rowHeight[E]=R,w.rowHeight[_]0)for(var B=D;B<=O;B++)P[0]+=this.grid[B][R-1].length+this.grid[B][R].length-1;if(O0)for(var B=R;B<=k;B++)P[3]+=this.grid[D-1][B].length+this.grid[D][B].length-1;for(var F=y.MAX_VALUE,z,$,U=0;U{"use strict";o(function(e,r){typeof k4=="object"&&typeof fF=="object"?fF.exports=r(hF()):typeof define=="function"&&define.amd?define(["cose-base"],r):typeof k4=="object"?k4.cytoscapeCoseBilkent=r(hF()):e.cytoscapeCoseBilkent=r(e.coseBase)},"webpackUniversalModuleDefinition")(k4,function(t){return function(e){var r={};function n(i){if(r[i])return r[i].exports;var a=r[i]={i,l:!1,exports:{}};return e[i].call(a.exports,a,a.exports,n),a.l=!0,a.exports}return o(n,"__webpack_require__"),n.m=e,n.c=r,n.i=function(i){return i},n.d=function(i,a,s){n.o(i,a)||Object.defineProperty(i,a,{configurable:!1,enumerable:!0,get:s})},n.n=function(i){var a=i&&i.__esModule?o(function(){return i.default},"getDefault"):o(function(){return i},"getModuleExports");return n.d(a,"a",a),a},n.o=function(i,a){return Object.prototype.hasOwnProperty.call(i,a)},n.p="",n(n.s=1)}([function(e,r){e.exports=t},function(e,r,n){"use strict";var i=n(0).layoutBase.LayoutConstants,a=n(0).layoutBase.FDLayoutConstants,s=n(0).CoSEConstants,l=n(0).CoSELayout,u=n(0).CoSENode,h=n(0).layoutBase.PointD,f=n(0).layoutBase.DimensionD,d={ready:o(function(){},"ready"),stop:o(function(){},"stop"),quality:"default",nodeDimensionsIncludeLabels:!1,refresh:30,fit:!0,padding:10,randomize:!0,nodeRepulsion:4500,idealEdgeLength:50,edgeElasticity:.45,nestingFactor:.1,gravity:.25,numIter:2500,tile:!0,animate:"end",animationDuration:500,tilingPaddingVertical:10,tilingPaddingHorizontal:10,gravityRangeCompound:1.5,gravityCompound:1,gravityRange:3.8,initialEnergyOnIncremental:.5};function p(v,x){var b={};for(var T in v)b[T]=v[T];for(var T in x)b[T]=x[T];return b}o(p,"extend");function m(v){this.options=p(d,v),g(this.options)}o(m,"_CoSELayout");var g=o(function(x){x.nodeRepulsion!=null&&(s.DEFAULT_REPULSION_STRENGTH=a.DEFAULT_REPULSION_STRENGTH=x.nodeRepulsion),x.idealEdgeLength!=null&&(s.DEFAULT_EDGE_LENGTH=a.DEFAULT_EDGE_LENGTH=x.idealEdgeLength),x.edgeElasticity!=null&&(s.DEFAULT_SPRING_STRENGTH=a.DEFAULT_SPRING_STRENGTH=x.edgeElasticity),x.nestingFactor!=null&&(s.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=a.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=x.nestingFactor),x.gravity!=null&&(s.DEFAULT_GRAVITY_STRENGTH=a.DEFAULT_GRAVITY_STRENGTH=x.gravity),x.numIter!=null&&(s.MAX_ITERATIONS=a.MAX_ITERATIONS=x.numIter),x.gravityRange!=null&&(s.DEFAULT_GRAVITY_RANGE_FACTOR=a.DEFAULT_GRAVITY_RANGE_FACTOR=x.gravityRange),x.gravityCompound!=null&&(s.DEFAULT_COMPOUND_GRAVITY_STRENGTH=a.DEFAULT_COMPOUND_GRAVITY_STRENGTH=x.gravityCompound),x.gravityRangeCompound!=null&&(s.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=a.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=x.gravityRangeCompound),x.initialEnergyOnIncremental!=null&&(s.DEFAULT_COOLING_FACTOR_INCREMENTAL=a.DEFAULT_COOLING_FACTOR_INCREMENTAL=x.initialEnergyOnIncremental),x.quality=="draft"?i.QUALITY=0:x.quality=="proof"?i.QUALITY=2:i.QUALITY=1,s.NODE_DIMENSIONS_INCLUDE_LABELS=a.NODE_DIMENSIONS_INCLUDE_LABELS=i.NODE_DIMENSIONS_INCLUDE_LABELS=x.nodeDimensionsIncludeLabels,s.DEFAULT_INCREMENTAL=a.DEFAULT_INCREMENTAL=i.DEFAULT_INCREMENTAL=!x.randomize,s.ANIMATE=a.ANIMATE=i.ANIMATE=x.animate,s.TILE=x.tile,s.TILING_PADDING_VERTICAL=typeof x.tilingPaddingVertical=="function"?x.tilingPaddingVertical.call():x.tilingPaddingVertical,s.TILING_PADDING_HORIZONTAL=typeof x.tilingPaddingHorizontal=="function"?x.tilingPaddingHorizontal.call():x.tilingPaddingHorizontal},"getUserOptions");m.prototype.run=function(){var v,x,b=this.options,T=this.idToLNode={},S=this.layout=new l,w=this;w.stopped=!1,this.cy=this.options.cy,this.cy.trigger({type:"layoutstart",layout:this});var E=S.newGraphManager();this.gm=E;var _=this.options.eles.nodes(),C=this.options.eles.edges();this.root=E.addRoot(),this.processChildrenList(this.root,this.getTopMostNodes(_),S);for(var D=0;D0){var k;k=b.getGraphManager().add(b.newGraph(),_),this.processChildrenList(k,E,b)}}},m.prototype.stop=function(){return this.stopped=!0,this};var y=o(function(x){x("layout","cose-bilkent",m)},"register");typeof cytoscape<"u"&&y(cytoscape),e.exports=y}])})});function xet(t,e,r,n,i){return t.insert("polygon",":first-child").attr("points",n.map(function(a){return a.x+","+a.y}).join(" ")).attr("transform","translate("+(i.width-e)/2+", "+r+")")}var det,pet,met,get,yet,vet,bet,Tet,Z1e,J1e,eye=N(()=>{"use strict";ao();er();det=12,pet=o(function(t,e,r,n){e.append("path").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("d",`M0 ${r.height-5} v${-r.height+2*5} q0,-5 5,-5 h${r.width-2*5} q5,0 5,5 v${r.height-5} H0 Z`),e.append("line").attr("class","node-line-"+n).attr("x1",0).attr("y1",r.height).attr("x2",r.width).attr("y2",r.height)},"defaultBkg"),met=o(function(t,e,r){e.append("rect").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("height",r.height).attr("width",r.width)},"rectBkg"),get=o(function(t,e,r){let n=r.width,i=r.height,a=.15*n,s=.25*n,l=.35*n,u=.2*n;e.append("path").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("d",`M0 0 a${a},${a} 0 0,1 ${n*.25},${-1*n*.1} a${l},${l} 1 0,1 ${n*.4},${-1*n*.1} a${s},${s} 1 0,1 ${n*.35},${1*n*.2} @@ -2191,7 +2191,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho a${a},${a} 1 0,1 ${-1*n*.1},${-1*i*.35} a${u},${u} 1 0,1 ${n*.1},${-1*i*.65} - H0 V0 Z`)},"cloudBkg"),VZe=o(function(t,e,r){let n=r.width,i=r.height,a=.15*n;e.append("path").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("d",`M0 0 a${a},${a} 1 0,0 ${n*.25},${-1*i*.1} + H0 V0 Z`)},"cloudBkg"),yet=o(function(t,e,r){let n=r.width,i=r.height,a=.15*n;e.append("path").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("d",`M0 0 a${a},${a} 1 0,0 ${n*.25},${-1*i*.1} a${a},${a} 1 0,0 ${n*.25},0 a${a},${a} 1 0,0 ${n*.25},0 a${a},${a} 1 0,0 ${n*.25},${1*i*.1} @@ -2209,9 +2209,9 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho a${a*.8},${a*.8} 1 0,0 0,${-1*i*.34} a${a},${a} 1 0,0 ${n*.1},${-1*i*.33} - H0 V0 Z`)},"bangBkg"),UZe=o(function(t,e,r){e.append("circle").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("r",r.width/2)},"circleBkg");o(HZe,"insertPolygonShape");WZe=o(function(t,e,r){let n=r.height,a=n/4,s=r.width-r.padding+2*a,l=[{x:a,y:0},{x:s-a,y:0},{x:s,y:-n/2},{x:s-a,y:-n},{x:a,y:-n},{x:0,y:-n/2}];HZe(e,s,n,l,r)},"hexagonBkg"),qZe=o(function(t,e,r){e.append("rect").attr("id","node-"+r.id).attr("class","node-bkg node-"+t.type2Str(r.type)).attr("height",r.height).attr("rx",r.padding).attr("ry",r.padding).attr("width",r.width)},"roundedRectBkg"),Fge=o(async function(t,e,r,n,i){let a=i.htmlLabels,s=n%(FZe-1),l=e.append("g");r.section=s;let u="section-"+s;s<0&&(u+=" section-root"),l.attr("class",(r.class?r.class+" ":"")+"mindmap-node "+u);let h=l.append("g"),f=l.append("g"),d=r.descr.replace(/()/g,` -`);await Hn(f,d,{useHtmlLabels:a,width:r.width,classes:"mindmap-node-label"},i),a||f.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle");let p=f.node().getBBox(),[m]=Fo(i.fontSize);if(r.height=p.height+m*1.1*.5+r.padding,r.width=p.width+2*r.padding,r.icon)if(r.type===t.nodeType.CIRCLE)r.height+=50,r.width+=50,l.append("foreignObject").attr("height","50px").attr("width",r.width).attr("style","text-align: center;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+s+" "+r.icon),f.attr("transform","translate("+r.width/2+", "+(r.height/2-1.5*r.padding)+")");else{r.width+=50;let g=r.height;r.height=Math.max(g,60);let y=Math.abs(r.height-g);l.append("foreignObject").attr("width","60px").attr("height",r.height).attr("style","text-align: center;margin-top:"+y/2+"px;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+s+" "+r.icon),f.attr("transform","translate("+(25+r.width/2)+", "+(y/2+r.padding/2)+")")}else if(a){let g=(r.width-p.width)/2,y=(r.height-p.height)/2;f.attr("transform","translate("+g+", "+y+")")}else{let g=r.width/2,y=r.padding/2;f.attr("transform","translate("+g+", "+y+")")}switch(r.type){case t.nodeType.DEFAULT:$Ze(t,h,r,s);break;case t.nodeType.ROUNDED_RECT:qZe(t,h,r,s);break;case t.nodeType.RECT:zZe(t,h,r,s);break;case t.nodeType.CIRCLE:h.attr("transform","translate("+r.width/2+", "+ +r.height/2+")"),UZe(t,h,r,s);break;case t.nodeType.CLOUD:GZe(t,h,r,s);break;case t.nodeType.BANG:VZe(t,h,r,s);break;case t.nodeType.HEXAGON:WZe(t,h,r,s);break}return t.setElementForId(r.id,l),r.height},"drawNode"),$ge=o(function(t,e){let r=t.getElementById(e.id),n=e.x||0,i=e.y||0;r.attr("transform","translate("+n+","+i+")")},"positionNode")});async function Vge(t,e,r,n,i){await Fge(t,e,r,n,i),r.children&&await Promise.all(r.children.map((a,s)=>Vge(t,e,a,n<0?s:n,i)))}function YZe(t,e){e.edges().map((r,n)=>{let i=r.data();if(r[0]._private.bodyBounds){let a=r[0]._private.rscratch;X.trace("Edge: ",n,i),t.insert("path").attr("d",`M ${a.startX},${a.startY} L ${a.midX},${a.midY} L${a.endX},${a.endY} `).attr("class","edge section-edge-"+i.section+" edge-depth-"+i.depth)}})}function Uge(t,e,r,n){e.add({group:"nodes",data:{id:t.id.toString(),labelText:t.descr,height:t.height,width:t.width,level:n,nodeId:t.id,padding:t.padding,type:t.type},position:{x:t.x,y:t.y}}),t.children&&t.children.forEach(i=>{Uge(i,e,r,n+1),e.add({group:"edges",data:{id:`${t.id}_${i.id}`,source:t.id,target:i.id,depth:n,section:i.section}})})}function XZe(t,e){return new Promise(r=>{let n=Ge("body").append("div").attr("id","cy").attr("style","display:none"),i=nl({container:document.getElementById("cy"),style:[{selector:"edge",style:{"curve-style":"bezier"}}]});n.remove(),Uge(t,i,e,0),i.nodes().forEach(function(a){a.layoutDimensions=()=>{let s=a.data();return{w:s.width,h:s.height}}}),i.layout({name:"cose-bilkent",quality:"proof",styleEnabled:!1,animate:!1}).run(),i.ready(a=>{X.info("Ready",a),r(i)})})}function jZe(t,e){e.nodes().map((r,n)=>{let i=r.data();i.x=r.position().x,i.y=r.position().y,$ge(t,i);let a=t.getElementById(i.nodeId);X.info("id:",n,"Position: (",r.position().x,", ",r.position().y,")",i),a.attr("transform",`translate(${r.position().x-i.width/2}, ${r.position().y-i.height/2})`),a.attr("attr",`apa-${n})`)})}var Gge,KZe,Hge,Wge=N(()=>{"use strict";CB();Gge=Sa(Bge(),1);pr();zt();vt();qc();Si();zge();Ya();nl.use(Gge.default);o(Vge,"drawNodes");o(YZe,"drawEdges");o(Uge,"addNodes");o(XZe,"layoutMindmap");o(jZe,"positionNodes");KZe=o(async(t,e,r,n)=>{X.debug(`Rendering mindmap diagram -`+t);let i=n.db,a=i.getMindmap();if(!a)return;let s=me();s.htmlLabels=!1;let l=sa(e),u=l.append("g");u.attr("class","mindmap-edges");let h=l.append("g");h.attr("class","mindmap-nodes"),await Vge(i,h,a,-1,s);let f=await XZe(a,s);YZe(u,f),jZe(i,f),_o(void 0,l,s.mindmap?.padding??lr.mindmap.padding,s.mindmap?.useMaxWidth??lr.mindmap.useMaxWidth)},"draw"),Hge={draw:KZe}});var QZe,ZZe,qge,Yge=N(()=>{"use strict";js();QZe=o(t=>{let e="";for(let r=0;r)/g,` +`);await qn(f,d,{useHtmlLabels:a,width:r.width,classes:"mindmap-node-label"},i),a||f.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle");let p=f.node().getBBox(),[m]=zo(i.fontSize);if(r.height=p.height+m*1.1*.5+r.padding,r.width=p.width+2*r.padding,r.icon)if(r.type===t.nodeType.CIRCLE)r.height+=50,r.width+=50,l.append("foreignObject").attr("height","50px").attr("width",r.width).attr("style","text-align: center;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+s+" "+r.icon),f.attr("transform","translate("+r.width/2+", "+(r.height/2-1.5*r.padding)+")");else{r.width+=50;let g=r.height;r.height=Math.max(g,60);let y=Math.abs(r.height-g);l.append("foreignObject").attr("width","60px").attr("height",r.height).attr("style","text-align: center;margin-top:"+y/2+"px;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+s+" "+r.icon),f.attr("transform","translate("+(25+r.width/2)+", "+(y/2+r.padding/2)+")")}else if(a){let g=(r.width-p.width)/2,y=(r.height-p.height)/2;f.attr("transform","translate("+g+", "+y+")")}else{let g=r.width/2,y=r.padding/2;f.attr("transform","translate("+g+", "+y+")")}switch(r.type){case t.nodeType.DEFAULT:pet(t,h,r,s);break;case t.nodeType.ROUNDED_RECT:Tet(t,h,r,s);break;case t.nodeType.RECT:met(t,h,r,s);break;case t.nodeType.CIRCLE:h.attr("transform","translate("+r.width/2+", "+ +r.height/2+")"),vet(t,h,r,s);break;case t.nodeType.CLOUD:get(t,h,r,s);break;case t.nodeType.BANG:yet(t,h,r,s);break;case t.nodeType.HEXAGON:bet(t,h,r,s);break}return t.setElementForId(r.id,l),r.height},"drawNode"),J1e=o(function(t,e){let r=t.getElementById(e.id),n=e.x||0,i=e.y||0;r.attr("transform","translate("+n+","+i+")")},"positionNode")});async function rye(t,e,r,n,i){await Z1e(t,e,r,n,i),r.children&&await Promise.all(r.children.map((a,s)=>rye(t,e,a,n<0?s:n,i)))}function wet(t,e){e.edges().map((r,n)=>{let i=r.data();if(r[0]._private.bodyBounds){let a=r[0]._private.rscratch;X.trace("Edge: ",n,i),t.insert("path").attr("d",`M ${a.startX},${a.startY} L ${a.midX},${a.midY} L${a.endX},${a.endY} `).attr("class","edge section-edge-"+i.section+" edge-depth-"+i.depth)}})}function nye(t,e,r,n){e.add({group:"nodes",data:{id:t.id.toString(),labelText:t.descr,height:t.height,width:t.width,level:n,nodeId:t.id,padding:t.padding,type:t.type},position:{x:t.x,y:t.y}}),t.children&&t.children.forEach(i=>{nye(i,e,r,n+1),e.add({group:"edges",data:{id:`${t.id}_${i.id}`,source:t.id,target:i.id,depth:n,section:i.section}})})}function ket(t,e){return new Promise(r=>{let n=Ge("body").append("div").attr("id","cy").attr("style","display:none"),i=sl({container:document.getElementById("cy"),style:[{selector:"edge",style:{"curve-style":"bezier"}}]});n.remove(),nye(t,i,e,0),i.nodes().forEach(function(a){a.layoutDimensions=()=>{let s=a.data();return{w:s.width,h:s.height}}}),i.layout({name:"cose-bilkent",quality:"proof",styleEnabled:!1,animate:!1}).run(),i.ready(a=>{X.info("Ready",a),r(i)})})}function Eet(t,e){e.nodes().map((r,n)=>{let i=r.data();i.x=r.position().x,i.y=r.position().y,J1e(t,i);let a=t.getElementById(i.nodeId);X.info("id:",n,"Position: (",r.position().x,", ",r.position().y,")",i),a.attr("transform",`translate(${r.position().x-i.width/2}, ${r.position().y-i.height/2})`),a.attr("attr",`apa-${n})`)})}var tye,Cet,iye,aye=N(()=>{"use strict";oF();tye=Aa(Q1e(),1);fr();Gt();yt();Vl();xi();eye();_a();sl.use(tye.default);o(rye,"drawNodes");o(wet,"drawEdges");o(nye,"addNodes");o(ket,"layoutMindmap");o(Eet,"positionNodes");Cet=o(async(t,e,r,n)=>{X.debug(`Rendering mindmap diagram +`+t);let i=n.db,a=i.getMindmap();if(!a)return;let s=me();s.htmlLabels=!1;let l=Li(e),u=l.append("g");u.attr("class","mindmap-edges");let h=l.append("g");h.attr("class","mindmap-nodes"),await rye(i,h,a,-1,s);let f=await ket(a,s);wet(u,f),Eet(i,f),Lo(void 0,l,s.mindmap?.padding??or.mindmap.padding,s.mindmap?.useMaxWidth??or.mindmap.useMaxWidth)},"draw"),iye={draw:Cet}});var Aet,_et,sye,oye=N(()=>{"use strict";Ks();Aet=o(t=>{let e="";for(let r=0;r` + `}return e},"genSections"),_et=o(t=>` .edge { stroke-width: 3; } - ${QZe(t)} + ${Aet(t)} .section-root rect, .section-root path, .section-root circle, .section-root polygon { fill: ${t.git0}; } @@ -2266,17 +2266,17 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho dominant-baseline: middle; text-align: center; } -`,"getStyles"),qge=ZZe});var Xge={};hr(Xge,{diagram:()=>JZe});var JZe,jge=N(()=>{"use strict";wpe();Epe();Wge();Yge();JZe={db:kpe,renderer:Hge,parser:bpe,styles:qge}});var NB,Zge,Jge=N(()=>{"use strict";NB=function(){var t=o(function(A,S,_,I){for(_=_||{},I=A.length;I--;_[A[I]]=S);return _},"o"),e=[1,4],r=[1,13],n=[1,12],i=[1,15],a=[1,16],s=[1,20],l=[1,19],u=[6,7,8],h=[1,26],f=[1,24],d=[1,25],p=[6,7,11],m=[1,31],g=[6,7,11,24],y=[1,6,13,16,17,20,23],v=[1,35],x=[1,36],b=[1,6,7,11,13,16,17,20,23],w=[1,38],C={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mindMap:4,spaceLines:5,SPACELINE:6,NL:7,KANBAN:8,document:9,stop:10,EOF:11,statement:12,SPACELIST:13,node:14,shapeData:15,ICON:16,CLASS:17,nodeWithId:18,nodeWithoutId:19,NODE_DSTART:20,NODE_DESCR:21,NODE_DEND:22,NODE_ID:23,SHAPE_DATA:24,$accept:0,$end:1},terminals_:{2:"error",6:"SPACELINE",7:"NL",8:"KANBAN",11:"EOF",13:"SPACELIST",16:"ICON",17:"CLASS",20:"NODE_DSTART",21:"NODE_DESCR",22:"NODE_DEND",23:"NODE_ID",24:"SHAPE_DATA"},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,3],[12,2],[12,2],[12,2],[12,1],[12,2],[12,1],[12,1],[12,1],[12,1],[14,1],[14,1],[19,3],[18,1],[18,4],[15,2],[15,1]],performAction:o(function(S,_,I,L,k,D,R){var O=D.length-1;switch(k){case 6:case 7:return L;case 8:L.getLogger().trace("Stop NL ");break;case 9:L.getLogger().trace("Stop EOF ");break;case 11:L.getLogger().trace("Stop NL2 ");break;case 12:L.getLogger().trace("Stop EOF2 ");break;case 15:L.getLogger().info("Node: ",D[O-1].id),L.addNode(D[O-2].length,D[O-1].id,D[O-1].descr,D[O-1].type,D[O]);break;case 16:L.getLogger().info("Node: ",D[O].id),L.addNode(D[O-1].length,D[O].id,D[O].descr,D[O].type);break;case 17:L.getLogger().trace("Icon: ",D[O]),L.decorateNode({icon:D[O]});break;case 18:case 23:L.decorateNode({class:D[O]});break;case 19:L.getLogger().trace("SPACELIST");break;case 20:L.getLogger().trace("Node: ",D[O-1].id),L.addNode(0,D[O-1].id,D[O-1].descr,D[O-1].type,D[O]);break;case 21:L.getLogger().trace("Node: ",D[O].id),L.addNode(0,D[O].id,D[O].descr,D[O].type);break;case 22:L.decorateNode({icon:D[O]});break;case 27:L.getLogger().trace("node found ..",D[O-2]),this.$={id:D[O-1],descr:D[O-1],type:L.getType(D[O-2],D[O])};break;case 28:this.$={id:D[O],descr:D[O],type:0};break;case 29:L.getLogger().trace("node found ..",D[O-3]),this.$={id:D[O-3],descr:D[O-1],type:L.getType(D[O-2],D[O])};break;case 30:this.$=D[O-1]+D[O];break;case 31:this.$=D[O];break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],8:e},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:e},{6:r,7:[1,10],9:9,12:11,13:n,14:14,16:i,17:a,18:17,19:18,20:s,23:l},t(u,[2,3]),{1:[2,2]},t(u,[2,4]),t(u,[2,5]),{1:[2,6],6:r,12:21,13:n,14:14,16:i,17:a,18:17,19:18,20:s,23:l},{6:r,9:22,12:11,13:n,14:14,16:i,17:a,18:17,19:18,20:s,23:l},{6:h,7:f,10:23,11:d},t(p,[2,24],{18:17,19:18,14:27,16:[1,28],17:[1,29],20:s,23:l}),t(p,[2,19]),t(p,[2,21],{15:30,24:m}),t(p,[2,22]),t(p,[2,23]),t(g,[2,25]),t(g,[2,26]),t(g,[2,28],{20:[1,32]}),{21:[1,33]},{6:h,7:f,10:34,11:d},{1:[2,7],6:r,12:21,13:n,14:14,16:i,17:a,18:17,19:18,20:s,23:l},t(y,[2,14],{7:v,11:x}),t(b,[2,8]),t(b,[2,9]),t(b,[2,10]),t(p,[2,16],{15:37,24:m}),t(p,[2,17]),t(p,[2,18]),t(p,[2,20],{24:w}),t(g,[2,31]),{21:[1,39]},{22:[1,40]},t(y,[2,13],{7:v,11:x}),t(b,[2,11]),t(b,[2,12]),t(p,[2,15],{24:w}),t(g,[2,30]),{22:[1,41]},t(g,[2,27]),t(g,[2,29])],defaultActions:{2:[2,1],6:[2,2]},parseError:o(function(S,_){if(_.recoverable)this.trace(S);else{var I=new Error(S);throw I.hash=_,I}},"parseError"),parse:o(function(S){var _=this,I=[0],L=[],k=[null],D=[],R=this.table,O="",M=0,P=0,B=0,F=2,z=1,$=D.slice.call(arguments,1),U=Object.create(this.lexer),Q={yy:{}};for(var te in this.yy)Object.prototype.hasOwnProperty.call(this.yy,te)&&(Q.yy[te]=this.yy[te]);U.setInput(S,Q.yy),Q.yy.lexer=U,Q.yy.parser=this,typeof U.yylloc>"u"&&(U.yylloc={});var Y=U.yylloc;D.push(Y);var he=U.options&&U.options.ranges;typeof Q.yy.parseError=="function"?this.parseError=Q.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Z(Be){I.length=I.length-2*Be,k.length=k.length-Be,D.length=D.length-Be}o(Z,"popStack");function ue(){var Be;return Be=L.pop()||U.lex()||z,typeof Be!="number"&&(Be instanceof Array&&(L=Be,Be=L.pop()),Be=_.symbols_[Be]||Be),Be}o(ue,"lex");for(var K,j,ne,ee,ce,le,J={},Se,se,ae,Oe;;){if(ne=I[I.length-1],this.defaultActions[ne]?ee=this.defaultActions[ne]:((K===null||typeof K>"u")&&(K=ue()),ee=R[ne]&&R[ne][K]),typeof ee>"u"||!ee.length||!ee[0]){var ye="";Oe=[];for(Se in R[ne])this.terminals_[Se]&&Se>F&&Oe.push("'"+this.terminals_[Se]+"'");U.showPosition?ye="Parse error on line "+(M+1)+`: +`,"getStyles"),sye=_et});var lye={};ur(lye,{diagram:()=>Det});var Det,cye=N(()=>{"use strict";B0e();F0e();aye();oye();Det={get db(){return new p6},renderer:iye,parser:P0e,styles:sye}});var dF,fye,dye=N(()=>{"use strict";dF=function(){var t=o(function(_,C,D,O){for(D=D||{},O=_.length;O--;D[_[O]]=C);return D},"o"),e=[1,4],r=[1,13],n=[1,12],i=[1,15],a=[1,16],s=[1,20],l=[1,19],u=[6,7,8],h=[1,26],f=[1,24],d=[1,25],p=[6,7,11],m=[1,31],g=[6,7,11,24],y=[1,6,13,16,17,20,23],v=[1,35],x=[1,36],b=[1,6,7,11,13,16,17,20,23],T=[1,38],S={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mindMap:4,spaceLines:5,SPACELINE:6,NL:7,KANBAN:8,document:9,stop:10,EOF:11,statement:12,SPACELIST:13,node:14,shapeData:15,ICON:16,CLASS:17,nodeWithId:18,nodeWithoutId:19,NODE_DSTART:20,NODE_DESCR:21,NODE_DEND:22,NODE_ID:23,SHAPE_DATA:24,$accept:0,$end:1},terminals_:{2:"error",6:"SPACELINE",7:"NL",8:"KANBAN",11:"EOF",13:"SPACELIST",16:"ICON",17:"CLASS",20:"NODE_DSTART",21:"NODE_DESCR",22:"NODE_DEND",23:"NODE_ID",24:"SHAPE_DATA"},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,3],[12,2],[12,2],[12,2],[12,1],[12,2],[12,1],[12,1],[12,1],[12,1],[14,1],[14,1],[19,3],[18,1],[18,4],[15,2],[15,1]],performAction:o(function(C,D,O,R,k,L,A){var I=L.length-1;switch(k){case 6:case 7:return R;case 8:R.getLogger().trace("Stop NL ");break;case 9:R.getLogger().trace("Stop EOF ");break;case 11:R.getLogger().trace("Stop NL2 ");break;case 12:R.getLogger().trace("Stop EOF2 ");break;case 15:R.getLogger().info("Node: ",L[I-1].id),R.addNode(L[I-2].length,L[I-1].id,L[I-1].descr,L[I-1].type,L[I]);break;case 16:R.getLogger().info("Node: ",L[I].id),R.addNode(L[I-1].length,L[I].id,L[I].descr,L[I].type);break;case 17:R.getLogger().trace("Icon: ",L[I]),R.decorateNode({icon:L[I]});break;case 18:case 23:R.decorateNode({class:L[I]});break;case 19:R.getLogger().trace("SPACELIST");break;case 20:R.getLogger().trace("Node: ",L[I-1].id),R.addNode(0,L[I-1].id,L[I-1].descr,L[I-1].type,L[I]);break;case 21:R.getLogger().trace("Node: ",L[I].id),R.addNode(0,L[I].id,L[I].descr,L[I].type);break;case 22:R.decorateNode({icon:L[I]});break;case 27:R.getLogger().trace("node found ..",L[I-2]),this.$={id:L[I-1],descr:L[I-1],type:R.getType(L[I-2],L[I])};break;case 28:this.$={id:L[I],descr:L[I],type:0};break;case 29:R.getLogger().trace("node found ..",L[I-3]),this.$={id:L[I-3],descr:L[I-1],type:R.getType(L[I-2],L[I])};break;case 30:this.$=L[I-1]+L[I];break;case 31:this.$=L[I];break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],8:e},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:e},{6:r,7:[1,10],9:9,12:11,13:n,14:14,16:i,17:a,18:17,19:18,20:s,23:l},t(u,[2,3]),{1:[2,2]},t(u,[2,4]),t(u,[2,5]),{1:[2,6],6:r,12:21,13:n,14:14,16:i,17:a,18:17,19:18,20:s,23:l},{6:r,9:22,12:11,13:n,14:14,16:i,17:a,18:17,19:18,20:s,23:l},{6:h,7:f,10:23,11:d},t(p,[2,24],{18:17,19:18,14:27,16:[1,28],17:[1,29],20:s,23:l}),t(p,[2,19]),t(p,[2,21],{15:30,24:m}),t(p,[2,22]),t(p,[2,23]),t(g,[2,25]),t(g,[2,26]),t(g,[2,28],{20:[1,32]}),{21:[1,33]},{6:h,7:f,10:34,11:d},{1:[2,7],6:r,12:21,13:n,14:14,16:i,17:a,18:17,19:18,20:s,23:l},t(y,[2,14],{7:v,11:x}),t(b,[2,8]),t(b,[2,9]),t(b,[2,10]),t(p,[2,16],{15:37,24:m}),t(p,[2,17]),t(p,[2,18]),t(p,[2,20],{24:T}),t(g,[2,31]),{21:[1,39]},{22:[1,40]},t(y,[2,13],{7:v,11:x}),t(b,[2,11]),t(b,[2,12]),t(p,[2,15],{24:T}),t(g,[2,30]),{22:[1,41]},t(g,[2,27]),t(g,[2,29])],defaultActions:{2:[2,1],6:[2,2]},parseError:o(function(C,D){if(D.recoverable)this.trace(C);else{var O=new Error(C);throw O.hash=D,O}},"parseError"),parse:o(function(C){var D=this,O=[0],R=[],k=[null],L=[],A=this.table,I="",M=0,P=0,B=0,F=2,z=1,$=L.slice.call(arguments,1),U=Object.create(this.lexer),K={yy:{}};for(var ee in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ee)&&(K.yy[ee]=this.yy[ee]);U.setInput(C,K.yy),K.yy.lexer=U,K.yy.parser=this,typeof U.yylloc>"u"&&(U.yylloc={});var Y=U.yylloc;L.push(Y);var ce=U.options&&U.options.ranges;typeof K.yy.parseError=="function"?this.parseError=K.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Z(Be){O.length=O.length-2*Be,k.length=k.length-Be,L.length=L.length-Be}o(Z,"popStack");function ue(){var Be;return Be=R.pop()||U.lex()||z,typeof Be!="number"&&(Be instanceof Array&&(R=Be,Be=R.pop()),Be=D.symbols_[Be]||Be),Be}o(ue,"lex");for(var Q,j,ne,te,he,le,J={},Se,se,ae,Oe;;){if(ne=O[O.length-1],this.defaultActions[ne]?te=this.defaultActions[ne]:((Q===null||typeof Q>"u")&&(Q=ue()),te=A[ne]&&A[ne][Q]),typeof te>"u"||!te.length||!te[0]){var ye="";Oe=[];for(Se in A[ne])this.terminals_[Se]&&Se>F&&Oe.push("'"+this.terminals_[Se]+"'");U.showPosition?ye="Parse error on line "+(M+1)+`: `+U.showPosition()+` -Expecting `+Oe.join(", ")+", got '"+(this.terminals_[K]||K)+"'":ye="Parse error on line "+(M+1)+": Unexpected "+(K==z?"end of input":"'"+(this.terminals_[K]||K)+"'"),this.parseError(ye,{text:U.match,token:this.terminals_[K]||K,line:U.yylineno,loc:Y,expected:Oe})}if(ee[0]instanceof Array&&ee.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ne+", token: "+K);switch(ee[0]){case 1:I.push(K),k.push(U.yytext),D.push(U.yylloc),I.push(ee[1]),K=null,j?(K=j,j=null):(P=U.yyleng,O=U.yytext,M=U.yylineno,Y=U.yylloc,B>0&&B--);break;case 2:if(se=this.productions_[ee[1]][1],J.$=k[k.length-se],J._$={first_line:D[D.length-(se||1)].first_line,last_line:D[D.length-1].last_line,first_column:D[D.length-(se||1)].first_column,last_column:D[D.length-1].last_column},he&&(J._$.range=[D[D.length-(se||1)].range[0],D[D.length-1].range[1]]),le=this.performAction.apply(J,[O,P,M,Q.yy,ee[1],k,D].concat($)),typeof le<"u")return le;se&&(I=I.slice(0,-1*se*2),k=k.slice(0,-1*se),D=D.slice(0,-1*se)),I.push(this.productions_[ee[1]][0]),k.push(J.$),D.push(J._$),ae=R[I[I.length-2]][I[I.length-1]],I.push(ae);break;case 3:return!0}}return!0},"parse")},T=function(){var A={EOF:1,parseError:o(function(_,I){if(this.yy.parser)this.yy.parser.parseError(_,I);else throw new Error(_)},"parseError"),setInput:o(function(S,_){return this.yy=_||this.yy||{},this._input=S,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},"setInput"),input:o(function(){var S=this._input[0];this.yytext+=S,this.yyleng++,this.offset++,this.match+=S,this.matched+=S;var _=S.match(/(?:\r\n?|\n).*/g);return _?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),S},"input"),unput:o(function(S){var _=S.length,I=S.split(/(?:\r\n?|\n)/g);this._input=S+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-_),this.offset-=_;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),I.length-1&&(this.yylineno-=I.length-1);var k=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:I?(I.length===L.length?this.yylloc.first_column:0)+L[L.length-I.length].length-I[0].length:this.yylloc.first_column-_},this.options.ranges&&(this.yylloc.range=[k[0],k[0]+this.yyleng-_]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(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},"reject"),less:o(function(S){this.unput(this.match.slice(S))},"less"),pastInput:o(function(){var S=this.matched.substr(0,this.matched.length-this.match.length);return(S.length>20?"...":"")+S.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var S=this.match;return S.length<20&&(S+=this._input.substr(0,20-S.length)),(S.substr(0,20)+(S.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var S=this.pastInput(),_=new Array(S.length+1).join("-");return S+this.upcomingInput()+` -`+_+"^"},"showPosition"),test_match:o(function(S,_){var I,L,k;if(this.options.backtrack_lexer&&(k={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&&(k.yylloc.range=this.yylloc.range.slice(0))),L=S[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+S[0].length},this.yytext+=S[0],this.match+=S[0],this.matches=S,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(S[0].length),this.matched+=S[0],I=this.performAction.call(this,this.yy,this,_,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),I)return I;if(this._backtrack){for(var D in k)this[D]=k[D];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var S,_,I,L;this._more||(this.yytext="",this.match="");for(var k=this._currentRules(),D=0;D_[0].length)){if(_=I,L=D,this.options.backtrack_lexer){if(S=this.test_match(I,k[D]),S!==!1)return S;if(this._backtrack){_=!1;continue}else return!1}else if(!this.options.flex)break}return _?(S=this.test_match(_,k[L]),S!==!1?S:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var _=this.next();return _||this.lex()},"lex"),begin:o(function(_){this.conditionStack.push(_)},"begin"),popState:o(function(){var _=this.conditionStack.length-1;return _>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(_){return _=this.conditionStack.length-1-Math.abs(_||0),_>=0?this.conditionStack[_]:"INITIAL"},"topState"),pushState:o(function(_){this.begin(_)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(_,I,L,k){var D=k;switch(L){case 0:return this.pushState("shapeData"),I.yytext="",24;break;case 1:return this.pushState("shapeDataStr"),24;break;case 2:return this.popState(),24;break;case 3:let R=/\n\s*/g;return I.yytext=I.yytext.replace(R,"
    "),24;break;case 4:return 24;case 5:this.popState();break;case 6:return _.getLogger().trace("Found comment",I.yytext),6;break;case 7:return 8;case 8:this.begin("CLASS");break;case 9:return this.popState(),17;break;case 10:this.popState();break;case 11:_.getLogger().trace("Begin icon"),this.begin("ICON");break;case 12:return _.getLogger().trace("SPACELINE"),6;break;case 13:return 7;case 14:return 16;case 15:_.getLogger().trace("end icon"),this.popState();break;case 16:return _.getLogger().trace("Exploding node"),this.begin("NODE"),20;break;case 17:return _.getLogger().trace("Cloud"),this.begin("NODE"),20;break;case 18:return _.getLogger().trace("Explosion Bang"),this.begin("NODE"),20;break;case 19:return _.getLogger().trace("Cloud Bang"),this.begin("NODE"),20;break;case 20:return this.begin("NODE"),20;break;case 21:return this.begin("NODE"),20;break;case 22:return this.begin("NODE"),20;break;case 23:return this.begin("NODE"),20;break;case 24:return 13;case 25:return 23;case 26:return 11;case 27:this.begin("NSTR2");break;case 28:return"NODE_DESCR";case 29:this.popState();break;case 30:_.getLogger().trace("Starting NSTR"),this.begin("NSTR");break;case 31:return _.getLogger().trace("description:",I.yytext),"NODE_DESCR";break;case 32:this.popState();break;case 33:return this.popState(),_.getLogger().trace("node end ))"),"NODE_DEND";break;case 34:return this.popState(),_.getLogger().trace("node end )"),"NODE_DEND";break;case 35:return this.popState(),_.getLogger().trace("node end ...",I.yytext),"NODE_DEND";break;case 36:return this.popState(),_.getLogger().trace("node end (("),"NODE_DEND";break;case 37:return this.popState(),_.getLogger().trace("node end (-"),"NODE_DEND";break;case 38:return this.popState(),_.getLogger().trace("node end (-"),"NODE_DEND";break;case 39:return this.popState(),_.getLogger().trace("node end (("),"NODE_DEND";break;case 40:return this.popState(),_.getLogger().trace("node end (("),"NODE_DEND";break;case 41:return _.getLogger().trace("Long description:",I.yytext),21;break;case 42:return _.getLogger().trace("Long description:",I.yytext),21;break}},"anonymous"),rules:[/^(?:@\{)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^\"]+)/i,/^(?:[^}^"]+)/i,/^(?:\})/i,/^(?:\s*%%.*)/i,/^(?:kanban\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:{shapeDataEndBracket:{rules:[],inclusive:!1},shapeDataStr:{rules:[2,3],inclusive:!1},shapeData:{rules:[1,4,5],inclusive:!1},CLASS:{rules:[9,10],inclusive:!1},ICON:{rules:[14,15],inclusive:!1},NSTR2:{rules:[28,29],inclusive:!1},NSTR:{rules:[31,32],inclusive:!1},NODE:{rules:[27,30,33,34,35,36,37,38,39,40,41,42],inclusive:!1},INITIAL:{rules:[0,6,7,8,11,12,13,16,17,18,19,20,21,22,23,24,25,26],inclusive:!0}}};return A}();C.lexer=T;function E(){this.yy={}}return o(E,"Parser"),E.prototype=C,C.Parser=E,new E}();NB.parser=NB;Zge=NB});var il,IB,MB,OB,nJe,iJe,e1e,aJe,sJe,Xi,oJe,lJe,cJe,uJe,hJe,fJe,dJe,t1e,r1e=N(()=>{"use strict";zt();dr();vt();Ya();Rw();il=[],IB=[],MB=0,OB={},nJe=o(()=>{il=[],IB=[],MB=0,OB={}},"clear"),iJe=o(t=>{if(il.length===0)return null;let e=il[0].level,r=null;for(let n=il.length-1;n>=0;n--)if(il[n].level===e&&!r&&(r=il[n]),il[n].levell.parentId===i.id);for(let l of s){let u={id:l.id,parentId:i.id,label:Tr(l.label??"",n),isGroup:!1,ticket:l?.ticket,priority:l?.priority,assigned:l?.assigned,icon:l?.icon,shape:"kanbanItem",level:l.level,rx:5,ry:5,cssStyles:["text-align: left"]};e.push(u)}}return{nodes:e,edges:t,other:{},config:me()}},"getData"),sJe=o((t,e,r,n,i)=>{let a=me(),s=a.mindmap?.padding??lr.mindmap.padding;switch(n){case Xi.ROUNDED_RECT:case Xi.RECT:case Xi.HEXAGON:s*=2}let l={id:Tr(e,a)||"kbn"+MB++,level:t,label:Tr(r,a),width:a.mindmap?.maxNodeWidth??lr.mindmap.maxNodeWidth,padding:s,isGroup:!1};if(i!==void 0){let h;i.includes(` +Expecting `+Oe.join(", ")+", got '"+(this.terminals_[Q]||Q)+"'":ye="Parse error on line "+(M+1)+": Unexpected "+(Q==z?"end of input":"'"+(this.terminals_[Q]||Q)+"'"),this.parseError(ye,{text:U.match,token:this.terminals_[Q]||Q,line:U.yylineno,loc:Y,expected:Oe})}if(te[0]instanceof Array&&te.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ne+", token: "+Q);switch(te[0]){case 1:O.push(Q),k.push(U.yytext),L.push(U.yylloc),O.push(te[1]),Q=null,j?(Q=j,j=null):(P=U.yyleng,I=U.yytext,M=U.yylineno,Y=U.yylloc,B>0&&B--);break;case 2:if(se=this.productions_[te[1]][1],J.$=k[k.length-se],J._$={first_line:L[L.length-(se||1)].first_line,last_line:L[L.length-1].last_line,first_column:L[L.length-(se||1)].first_column,last_column:L[L.length-1].last_column},ce&&(J._$.range=[L[L.length-(se||1)].range[0],L[L.length-1].range[1]]),le=this.performAction.apply(J,[I,P,M,K.yy,te[1],k,L].concat($)),typeof le<"u")return le;se&&(O=O.slice(0,-1*se*2),k=k.slice(0,-1*se),L=L.slice(0,-1*se)),O.push(this.productions_[te[1]][0]),k.push(J.$),L.push(J._$),ae=A[O[O.length-2]][O[O.length-1]],O.push(ae);break;case 3:return!0}}return!0},"parse")},w=function(){var _={EOF:1,parseError:o(function(D,O){if(this.yy.parser)this.yy.parser.parseError(D,O);else throw new Error(D)},"parseError"),setInput:o(function(C,D){return this.yy=D||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},"setInput"),input:o(function(){var C=this._input[0];this.yytext+=C,this.yyleng++,this.offset++,this.match+=C,this.matched+=C;var D=C.match(/(?:\r\n?|\n).*/g);return D?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),C},"input"),unput:o(function(C){var D=C.length,O=C.split(/(?:\r\n?|\n)/g);this._input=C+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-D),this.offset-=D;var R=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),O.length-1&&(this.yylineno-=O.length-1);var k=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:O?(O.length===R.length?this.yylloc.first_column:0)+R[R.length-O.length].length-O[0].length:this.yylloc.first_column-D},this.options.ranges&&(this.yylloc.range=[k[0],k[0]+this.yyleng-D]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(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},"reject"),less:o(function(C){this.unput(this.match.slice(C))},"less"),pastInput:o(function(){var C=this.matched.substr(0,this.matched.length-this.match.length);return(C.length>20?"...":"")+C.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(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,"")},"upcomingInput"),showPosition:o(function(){var C=this.pastInput(),D=new Array(C.length+1).join("-");return C+this.upcomingInput()+` +`+D+"^"},"showPosition"),test_match:o(function(C,D){var O,R,k;if(this.options.backtrack_lexer&&(k={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&&(k.yylloc.range=this.yylloc.range.slice(0))),R=C[0].match(/(?:\r\n?|\n).*/g),R&&(this.yylineno+=R.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:R?R[R.length-1].length-R[R.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],O=this.performAction.call(this,this.yy,this,D,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),O)return O;if(this._backtrack){for(var L in k)this[L]=k[L];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var C,D,O,R;this._more||(this.yytext="",this.match="");for(var k=this._currentRules(),L=0;LD[0].length)){if(D=O,R=L,this.options.backtrack_lexer){if(C=this.test_match(O,k[L]),C!==!1)return C;if(this._backtrack){D=!1;continue}else return!1}else if(!this.options.flex)break}return D?(C=this.test_match(D,k[R]),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})},"next"),lex:o(function(){var D=this.next();return D||this.lex()},"lex"),begin:o(function(D){this.conditionStack.push(D)},"begin"),popState:o(function(){var D=this.conditionStack.length-1;return D>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(D){return D=this.conditionStack.length-1-Math.abs(D||0),D>=0?this.conditionStack[D]:"INITIAL"},"topState"),pushState:o(function(D){this.begin(D)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(D,O,R,k){var L=k;switch(R){case 0:return this.pushState("shapeData"),O.yytext="",24;break;case 1:return this.pushState("shapeDataStr"),24;break;case 2:return this.popState(),24;break;case 3:let A=/\n\s*/g;return O.yytext=O.yytext.replace(A,"
    "),24;break;case 4:return 24;case 5:this.popState();break;case 6:return D.getLogger().trace("Found comment",O.yytext),6;break;case 7:return 8;case 8:this.begin("CLASS");break;case 9:return this.popState(),17;break;case 10:this.popState();break;case 11:D.getLogger().trace("Begin icon"),this.begin("ICON");break;case 12:return D.getLogger().trace("SPACELINE"),6;break;case 13:return 7;case 14:return 16;case 15:D.getLogger().trace("end icon"),this.popState();break;case 16:return D.getLogger().trace("Exploding node"),this.begin("NODE"),20;break;case 17:return D.getLogger().trace("Cloud"),this.begin("NODE"),20;break;case 18:return D.getLogger().trace("Explosion Bang"),this.begin("NODE"),20;break;case 19:return D.getLogger().trace("Cloud Bang"),this.begin("NODE"),20;break;case 20:return this.begin("NODE"),20;break;case 21:return this.begin("NODE"),20;break;case 22:return this.begin("NODE"),20;break;case 23:return this.begin("NODE"),20;break;case 24:return 13;case 25:return 23;case 26:return 11;case 27:this.begin("NSTR2");break;case 28:return"NODE_DESCR";case 29:this.popState();break;case 30:D.getLogger().trace("Starting NSTR"),this.begin("NSTR");break;case 31:return D.getLogger().trace("description:",O.yytext),"NODE_DESCR";break;case 32:this.popState();break;case 33:return this.popState(),D.getLogger().trace("node end ))"),"NODE_DEND";break;case 34:return this.popState(),D.getLogger().trace("node end )"),"NODE_DEND";break;case 35:return this.popState(),D.getLogger().trace("node end ...",O.yytext),"NODE_DEND";break;case 36:return this.popState(),D.getLogger().trace("node end (("),"NODE_DEND";break;case 37:return this.popState(),D.getLogger().trace("node end (-"),"NODE_DEND";break;case 38:return this.popState(),D.getLogger().trace("node end (-"),"NODE_DEND";break;case 39:return this.popState(),D.getLogger().trace("node end (("),"NODE_DEND";break;case 40:return this.popState(),D.getLogger().trace("node end (("),"NODE_DEND";break;case 41:return D.getLogger().trace("Long description:",O.yytext),21;break;case 42:return D.getLogger().trace("Long description:",O.yytext),21;break}},"anonymous"),rules:[/^(?:@\{)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^\"]+)/i,/^(?:[^}^"]+)/i,/^(?:\})/i,/^(?:\s*%%.*)/i,/^(?:kanban\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:{shapeDataEndBracket:{rules:[],inclusive:!1},shapeDataStr:{rules:[2,3],inclusive:!1},shapeData:{rules:[1,4,5],inclusive:!1},CLASS:{rules:[9,10],inclusive:!1},ICON:{rules:[14,15],inclusive:!1},NSTR2:{rules:[28,29],inclusive:!1},NSTR:{rules:[31,32],inclusive:!1},NODE:{rules:[27,30,33,34,35,36,37,38,39,40,41,42],inclusive:!1},INITIAL:{rules:[0,6,7,8,11,12,13,16,17,18,19,20,21,22,23,24,25,26],inclusive:!0}}};return _}();S.lexer=w;function E(){this.yy={}}return o(E,"Parser"),E.prototype=S,S.Parser=E,new E}();dF.parser=dF;fye=dF});var ol,mF,pF,gF,Met,Iet,pye,Oet,Pet,Xi,Bet,Fet,$et,zet,Get,Vet,Uet,mye,gye=N(()=>{"use strict";Gt();pr();yt();_a();PT();ol=[],mF=[],pF=0,gF={},Met=o(()=>{ol=[],mF=[],pF=0,gF={}},"clear"),Iet=o(t=>{if(ol.length===0)return null;let e=ol[0].level,r=null;for(let n=ol.length-1;n>=0;n--)if(ol[n].level===e&&!r&&(r=ol[n]),ol[n].levell.parentId===i.id);for(let l of s){let u={id:l.id,parentId:i.id,label:wr(l.label??"",n),isGroup:!1,ticket:l?.ticket,priority:l?.priority,assigned:l?.assigned,icon:l?.icon,shape:"kanbanItem",level:l.level,rx:5,ry:5,cssStyles:["text-align: left"]};e.push(u)}}return{nodes:e,edges:t,other:{},config:me()}},"getData"),Pet=o((t,e,r,n,i)=>{let a=me(),s=a.mindmap?.padding??or.mindmap.padding;switch(n){case Xi.ROUNDED_RECT:case Xi.RECT:case Xi.HEXAGON:s*=2}let l={id:wr(e,a)||"kbn"+pF++,level:t,label:wr(r,a),width:a.mindmap?.maxNodeWidth??or.mindmap.maxNodeWidth,padding:s,isGroup:!1};if(i!==void 0){let h;i.includes(` `)?h=i+` `:h=`{ `+i+` -}`;let f=gm(h,{schema:mm});if(f.shape&&(f.shape!==f.shape.toLowerCase()||f.shape.includes("_")))throw new Error(`No such shape: ${f.shape}. Shape names should be lowercase.`);f?.shape&&f.shape==="kanbanItem"&&(l.shape=f?.shape),f?.label&&(l.label=f?.label),f?.icon&&(l.icon=f?.icon.toString()),f?.assigned&&(l.assigned=f?.assigned.toString()),f?.ticket&&(l.ticket=f?.ticket.toString()),f?.priority&&(l.priority=f?.priority)}let u=iJe(t);u?l.parentId=u.id||"kbn"+MB++:IB.push(l),il.push(l)},"addNode"),Xi={DEFAULT:0,NO_BORDER:0,ROUNDED_RECT:1,RECT:2,CIRCLE:3,CLOUD:4,BANG:5,HEXAGON:6},oJe=o((t,e)=>{switch(X.debug("In get type",t,e),t){case"[":return Xi.RECT;case"(":return e===")"?Xi.ROUNDED_RECT:Xi.CLOUD;case"((":return Xi.CIRCLE;case")":return Xi.CLOUD;case"))":return Xi.BANG;case"{{":return Xi.HEXAGON;default:return Xi.DEFAULT}},"getType"),lJe=o((t,e)=>{OB[t]=e},"setElementForId"),cJe=o(t=>{if(!t)return;let e=me(),r=il[il.length-1];t.icon&&(r.icon=Tr(t.icon,e)),t.class&&(r.cssClasses=Tr(t.class,e))},"decorateNode"),uJe=o(t=>{switch(t){case Xi.DEFAULT:return"no-border";case Xi.RECT:return"rect";case Xi.ROUNDED_RECT:return"rounded-rect";case Xi.CIRCLE:return"circle";case Xi.CLOUD:return"cloud";case Xi.BANG:return"bang";case Xi.HEXAGON:return"hexgon";default:return"no-border"}},"type2Str"),hJe=o(()=>X,"getLogger"),fJe=o(t=>OB[t],"getElementById"),dJe={clear:nJe,addNode:sJe,getSections:e1e,getData:aJe,nodeType:Xi,getType:oJe,setElementForId:lJe,decorateNode:cJe,type2Str:uJe,getLogger:hJe,getElementById:fJe},t1e=dJe});var pJe,n1e,i1e=N(()=>{"use strict";zt();vt();qc();Si();Ya();Qw();oT();pJe=o(async(t,e,r,n)=>{X.debug(`Rendering kanban diagram -`+t);let a=n.db.getData(),s=me();s.htmlLabels=!1;let l=sa(e),u=l.append("g");u.attr("class","sections");let h=l.append("g");h.attr("class","items");let f=a.nodes.filter(v=>v.isGroup),d=0,p=10,m=[],g=25;for(let v of f){let x=s?.kanban?.sectionWidth||200;d=d+1,v.x=x*d+(d-1)*p/2,v.width=x,v.y=0,v.height=x*3,v.rx=5,v.ry=5,v.cssClasses=v.cssClasses+" section-"+d;let b=await Em(u,v);g=Math.max(g,b?.labelBBox?.height),m.push(b)}let y=0;for(let v of f){let x=m[y];y=y+1;let b=s?.kanban?.sectionWidth||200,w=-b*3/2+g,C=w,T=a.nodes.filter(S=>S.parentId===v.id);for(let S of T){if(S.isGroup)throw new Error("Groups within groups are not allowed in Kanban diagrams");S.x=v.x,S.width=b-1.5*p;let I=(await Sm(h,S,{config:s})).node().getBBox();S.y=C+I.height/2,await L2(S),C=S.y+I.height/2+p/2}let E=x.cluster.select("rect"),A=Math.max(C-w+3*p,50)+(g-25);E.attr("height",A)}_o(void 0,l,s.mindmap?.padding??lr.kanban.padding,s.mindmap?.useMaxWidth??lr.kanban.useMaxWidth)},"draw"),n1e={draw:pJe}});var mJe,gJe,a1e,s1e=N(()=>{"use strict";js();Ym();mJe=o(t=>{let e="";for(let n=0;nt.darkMode?Ot(n,i):Dt(n,i),"adjuster");for(let n=0;n{switch(X.debug("In get type",t,e),t){case"[":return Xi.RECT;case"(":return e===")"?Xi.ROUNDED_RECT:Xi.CLOUD;case"((":return Xi.CIRCLE;case")":return Xi.CLOUD;case"))":return Xi.BANG;case"{{":return Xi.HEXAGON;default:return Xi.DEFAULT}},"getType"),Fet=o((t,e)=>{gF[t]=e},"setElementForId"),$et=o(t=>{if(!t)return;let e=me(),r=ol[ol.length-1];t.icon&&(r.icon=wr(t.icon,e)),t.class&&(r.cssClasses=wr(t.class,e))},"decorateNode"),zet=o(t=>{switch(t){case Xi.DEFAULT:return"no-border";case Xi.RECT:return"rect";case Xi.ROUNDED_RECT:return"rounded-rect";case Xi.CIRCLE:return"circle";case Xi.CLOUD:return"cloud";case Xi.BANG:return"bang";case Xi.HEXAGON:return"hexgon";default:return"no-border"}},"type2Str"),Get=o(()=>X,"getLogger"),Vet=o(t=>gF[t],"getElementById"),Uet={clear:Met,addNode:Pet,getSections:pye,getData:Oet,nodeType:Xi,getType:Bet,setElementForId:Fet,decorateNode:$et,type2Str:zet,getLogger:Get,getElementById:Vet},mye=Uet});var Het,yye,vye=N(()=>{"use strict";Gt();yt();Vl();xi();_a();aw();mw();Het=o(async(t,e,r,n)=>{X.debug(`Rendering kanban diagram +`+t);let a=n.db.getData(),s=me();s.htmlLabels=!1;let l=Li(e),u=l.append("g");u.attr("class","sections");let h=l.append("g");h.attr("class","items");let f=a.nodes.filter(v=>v.isGroup),d=0,p=10,m=[],g=25;for(let v of f){let x=s?.kanban?.sectionWidth||200;d=d+1,v.x=x*d+(d-1)*p/2,v.width=x,v.y=0,v.height=x*3,v.rx=5,v.ry=5,v.cssClasses=v.cssClasses+" section-"+d;let b=await Cm(u,v);g=Math.max(g,b?.labelBBox?.height),m.push(b)}let y=0;for(let v of f){let x=m[y];y=y+1;let b=s?.kanban?.sectionWidth||200,T=-b*3/2+g,S=T,w=a.nodes.filter(C=>C.parentId===v.id);for(let C of w){if(C.isGroup)throw new Error("Groups within groups are not allowed in Kanban diagrams");C.x=v.x,C.width=b-1.5*p;let O=(await Am(h,C,{config:s})).node().getBBox();C.y=S+O.height/2,await M2(C),S=C.y+O.height/2+p/2}let E=x.cluster.select("rect"),_=Math.max(S-T+3*p,50)+(g-25);E.attr("height",_)}Lo(void 0,l,s.mindmap?.padding??or.kanban.padding,s.mindmap?.useMaxWidth??or.kanban.useMaxWidth)},"draw"),yye={draw:Het}});var Wet,qet,xye,bye=N(()=>{"use strict";Ks();Xm();Wet=o(t=>{let e="";for(let n=0;nt.darkMode?Ot(n,i):Lt(n,i),"adjuster");for(let n=0;n` + `}return e},"genSections"),qet=o(t=>` .edge { stroke-width: 3; } - ${mJe(t)} + ${Wet(t)} .section-root rect, .section-root path, .section-root circle, .section-root polygon { fill: ${t.git0}; } @@ -2353,17 +2353,17 @@ Expecting `+Oe.join(", ")+", got '"+(this.terminals_[K]||K)+"'":ye="Parse error dominant-baseline: middle; text-align: center; } - ${Lc()} -`,"getStyles"),a1e=gJe});var o1e={};hr(o1e,{diagram:()=>yJe});var yJe,l1e=N(()=>{"use strict";Jge();r1e();i1e();s1e();yJe={db:t1e,renderer:n1e,parser:Zge,styles:a1e}});var PB,b4,h1e=N(()=>{"use strict";PB=function(){var t=o(function(l,u,h,f){for(h=h||{},f=l.length;f--;h[l[f]]=u);return h},"o"),e=[1,9],r=[1,10],n=[1,5,10,12],i={trace:o(function(){},"trace"),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:o(function(u,h,f,d,p,m,g){var y=m.length-1;switch(p){case 7:let v=d.findOrCreateNode(m[y-4].trim().replaceAll('""','"')),x=d.findOrCreateNode(m[y-2].trim().replaceAll('""','"')),b=parseFloat(m[y].trim());d.addLink(v,x,b);break;case 8:case 9:case 11:this.$=m[y];break;case 10:this.$=m[y-1];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},{5:[1,3]},{6:4,8:5,15:6,16:7,17:8,18:e,20:r},{1:[2,6],7:11,10:[1,12]},t(r,[2,4],{9:13,5:[1,14]}),{12:[1,15]},t(n,[2,8]),t(n,[2,9]),{19:[1,16]},t(n,[2,11]),{1:[2,1]},{1:[2,5]},t(r,[2,2]),{6:17,8:5,15:6,16:7,17:8,18:e,20:r},{15:18,16:7,17:8,18:e,20:r},{18:[1,19]},t(r,[2,3]),{12:[1,20]},t(n,[2,10]),{15:21,16:7,17:8,18:e,20:r},t([1,5,10],[2,7])],defaultActions:{11:[2,1],12:[2,5]},parseError:o(function(u,h){if(h.recoverable)this.trace(u);else{var f=new Error(u);throw f.hash=h,f}},"parseError"),parse:o(function(u){var h=this,f=[0],d=[],p=[null],m=[],g=this.table,y="",v=0,x=0,b=0,w=2,C=1,T=m.slice.call(arguments,1),E=Object.create(this.lexer),A={yy:{}};for(var S in this.yy)Object.prototype.hasOwnProperty.call(this.yy,S)&&(A.yy[S]=this.yy[S]);E.setInput(u,A.yy),A.yy.lexer=E,A.yy.parser=this,typeof E.yylloc>"u"&&(E.yylloc={});var _=E.yylloc;m.push(_);var I=E.options&&E.options.ranges;typeof A.yy.parseError=="function"?this.parseError=A.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function L(Y){f.length=f.length-2*Y,p.length=p.length-Y,m.length=m.length-Y}o(L,"popStack");function k(){var Y;return Y=d.pop()||E.lex()||C,typeof Y!="number"&&(Y instanceof Array&&(d=Y,Y=d.pop()),Y=h.symbols_[Y]||Y),Y}o(k,"lex");for(var D,R,O,M,P,B,F={},z,$,U,Q;;){if(O=f[f.length-1],this.defaultActions[O]?M=this.defaultActions[O]:((D===null||typeof D>"u")&&(D=k()),M=g[O]&&g[O][D]),typeof M>"u"||!M.length||!M[0]){var te="";Q=[];for(z in g[O])this.terminals_[z]&&z>w&&Q.push("'"+this.terminals_[z]+"'");E.showPosition?te="Parse error on line "+(v+1)+`: + ${Nc()} +`,"getStyles"),xye=qet});var Tye={};ur(Tye,{diagram:()=>Yet});var Yet,wye=N(()=>{"use strict";dye();gye();vye();bye();Yet={db:mye,renderer:yye,parser:fye,styles:xye}});var yF,E4,Sye=N(()=>{"use strict";yF=function(){var t=o(function(l,u,h,f){for(h=h||{},f=l.length;f--;h[l[f]]=u);return h},"o"),e=[1,9],r=[1,10],n=[1,5,10,12],i={trace:o(function(){},"trace"),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:o(function(u,h,f,d,p,m,g){var y=m.length-1;switch(p){case 7:let v=d.findOrCreateNode(m[y-4].trim().replaceAll('""','"')),x=d.findOrCreateNode(m[y-2].trim().replaceAll('""','"')),b=parseFloat(m[y].trim());d.addLink(v,x,b);break;case 8:case 9:case 11:this.$=m[y];break;case 10:this.$=m[y-1];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},{5:[1,3]},{6:4,8:5,15:6,16:7,17:8,18:e,20:r},{1:[2,6],7:11,10:[1,12]},t(r,[2,4],{9:13,5:[1,14]}),{12:[1,15]},t(n,[2,8]),t(n,[2,9]),{19:[1,16]},t(n,[2,11]),{1:[2,1]},{1:[2,5]},t(r,[2,2]),{6:17,8:5,15:6,16:7,17:8,18:e,20:r},{15:18,16:7,17:8,18:e,20:r},{18:[1,19]},t(r,[2,3]),{12:[1,20]},t(n,[2,10]),{15:21,16:7,17:8,18:e,20:r},t([1,5,10],[2,7])],defaultActions:{11:[2,1],12:[2,5]},parseError:o(function(u,h){if(h.recoverable)this.trace(u);else{var f=new Error(u);throw f.hash=h,f}},"parseError"),parse:o(function(u){var h=this,f=[0],d=[],p=[null],m=[],g=this.table,y="",v=0,x=0,b=0,T=2,S=1,w=m.slice.call(arguments,1),E=Object.create(this.lexer),_={yy:{}};for(var C in this.yy)Object.prototype.hasOwnProperty.call(this.yy,C)&&(_.yy[C]=this.yy[C]);E.setInput(u,_.yy),_.yy.lexer=E,_.yy.parser=this,typeof E.yylloc>"u"&&(E.yylloc={});var D=E.yylloc;m.push(D);var O=E.options&&E.options.ranges;typeof _.yy.parseError=="function"?this.parseError=_.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function R(Y){f.length=f.length-2*Y,p.length=p.length-Y,m.length=m.length-Y}o(R,"popStack");function k(){var Y;return Y=d.pop()||E.lex()||S,typeof Y!="number"&&(Y instanceof Array&&(d=Y,Y=d.pop()),Y=h.symbols_[Y]||Y),Y}o(k,"lex");for(var L,A,I,M,P,B,F={},z,$,U,K;;){if(I=f[f.length-1],this.defaultActions[I]?M=this.defaultActions[I]:((L===null||typeof L>"u")&&(L=k()),M=g[I]&&g[I][L]),typeof M>"u"||!M.length||!M[0]){var ee="";K=[];for(z in g[I])this.terminals_[z]&&z>T&&K.push("'"+this.terminals_[z]+"'");E.showPosition?ee="Parse error on line "+(v+1)+`: `+E.showPosition()+` -Expecting `+Q.join(", ")+", got '"+(this.terminals_[D]||D)+"'":te="Parse error on line "+(v+1)+": Unexpected "+(D==C?"end of input":"'"+(this.terminals_[D]||D)+"'"),this.parseError(te,{text:E.match,token:this.terminals_[D]||D,line:E.yylineno,loc:_,expected:Q})}if(M[0]instanceof Array&&M.length>1)throw new Error("Parse Error: multiple actions possible at state: "+O+", token: "+D);switch(M[0]){case 1:f.push(D),p.push(E.yytext),m.push(E.yylloc),f.push(M[1]),D=null,R?(D=R,R=null):(x=E.yyleng,y=E.yytext,v=E.yylineno,_=E.yylloc,b>0&&b--);break;case 2:if($=this.productions_[M[1]][1],F.$=p[p.length-$],F._$={first_line:m[m.length-($||1)].first_line,last_line:m[m.length-1].last_line,first_column:m[m.length-($||1)].first_column,last_column:m[m.length-1].last_column},I&&(F._$.range=[m[m.length-($||1)].range[0],m[m.length-1].range[1]]),B=this.performAction.apply(F,[y,x,v,A.yy,M[1],p,m].concat(T)),typeof B<"u")return B;$&&(f=f.slice(0,-1*$*2),p=p.slice(0,-1*$),m=m.slice(0,-1*$)),f.push(this.productions_[M[1]][0]),p.push(F.$),m.push(F._$),U=g[f[f.length-2]][f[f.length-1]],f.push(U);break;case 3:return!0}}return!0},"parse")},a=function(){var l={EOF:1,parseError:o(function(h,f){if(this.yy.parser)this.yy.parser.parseError(h,f);else throw new Error(h)},"parseError"),setInput:o(function(u,h){return this.yy=h||this.yy||{},this._input=u,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},"setInput"),input:o(function(){var u=this._input[0];this.yytext+=u,this.yyleng++,this.offset++,this.match+=u,this.matched+=u;var h=u.match(/(?:\r\n?|\n).*/g);return h?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),u},"input"),unput:o(function(u){var h=u.length,f=u.split(/(?:\r\n?|\n)/g);this._input=u+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-h),this.offset-=h;var d=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),f.length-1&&(this.yylineno-=f.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:f?(f.length===d.length?this.yylloc.first_column:0)+d[d.length-f.length].length-f[0].length:this.yylloc.first_column-h},this.options.ranges&&(this.yylloc.range=[p[0],p[0]+this.yyleng-h]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(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). +Expecting `+K.join(", ")+", got '"+(this.terminals_[L]||L)+"'":ee="Parse error on line "+(v+1)+": Unexpected "+(L==S?"end of input":"'"+(this.terminals_[L]||L)+"'"),this.parseError(ee,{text:E.match,token:this.terminals_[L]||L,line:E.yylineno,loc:D,expected:K})}if(M[0]instanceof Array&&M.length>1)throw new Error("Parse Error: multiple actions possible at state: "+I+", token: "+L);switch(M[0]){case 1:f.push(L),p.push(E.yytext),m.push(E.yylloc),f.push(M[1]),L=null,A?(L=A,A=null):(x=E.yyleng,y=E.yytext,v=E.yylineno,D=E.yylloc,b>0&&b--);break;case 2:if($=this.productions_[M[1]][1],F.$=p[p.length-$],F._$={first_line:m[m.length-($||1)].first_line,last_line:m[m.length-1].last_line,first_column:m[m.length-($||1)].first_column,last_column:m[m.length-1].last_column},O&&(F._$.range=[m[m.length-($||1)].range[0],m[m.length-1].range[1]]),B=this.performAction.apply(F,[y,x,v,_.yy,M[1],p,m].concat(w)),typeof B<"u")return B;$&&(f=f.slice(0,-1*$*2),p=p.slice(0,-1*$),m=m.slice(0,-1*$)),f.push(this.productions_[M[1]][0]),p.push(F.$),m.push(F._$),U=g[f[f.length-2]][f[f.length-1]],f.push(U);break;case 3:return!0}}return!0},"parse")},a=function(){var l={EOF:1,parseError:o(function(h,f){if(this.yy.parser)this.yy.parser.parseError(h,f);else throw new Error(h)},"parseError"),setInput:o(function(u,h){return this.yy=h||this.yy||{},this._input=u,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},"setInput"),input:o(function(){var u=this._input[0];this.yytext+=u,this.yyleng++,this.offset++,this.match+=u,this.matched+=u;var h=u.match(/(?:\r\n?|\n).*/g);return h?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),u},"input"),unput:o(function(u){var h=u.length,f=u.split(/(?:\r\n?|\n)/g);this._input=u+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-h),this.offset-=h;var d=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),f.length-1&&(this.yylineno-=f.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:f?(f.length===d.length?this.yylloc.first_column:0)+d[d.length-f.length].length-f[0].length:this.yylloc.first_column-h},this.options.ranges&&(this.yylloc.range=[p[0],p[0]+this.yyleng-h]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(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},"reject"),less:o(function(u){this.unput(this.match.slice(u))},"less"),pastInput:o(function(){var u=this.matched.substr(0,this.matched.length-this.match.length);return(u.length>20?"...":"")+u.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var u=this.match;return u.length<20&&(u+=this._input.substr(0,20-u.length)),(u.substr(0,20)+(u.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var u=this.pastInput(),h=new Array(u.length+1).join("-");return u+this.upcomingInput()+` `+h+"^"},"showPosition"),test_match:o(function(u,h){var f,d,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))),d=u[0].match(/(?:\r\n?|\n).*/g),d&&(this.yylineno+=d.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:d?d[d.length-1].length-d[d.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+u[0].length},this.yytext+=u[0],this.match+=u[0],this.matches=u,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(u[0].length),this.matched+=u[0],f=this.performAction.call(this,this.yy,this,h,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),f)return f;if(this._backtrack){for(var m in p)this[m]=p[m];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var u,h,f,d;this._more||(this.yytext="",this.match="");for(var p=this._currentRules(),m=0;mh[0].length)){if(h=f,d=m,this.options.backtrack_lexer){if(u=this.test_match(f,p[m]),u!==!1)return u;if(this._backtrack){h=!1;continue}else return!1}else if(!this.options.flex)break}return h?(u=this.test_match(h,p[d]),u!==!1?u:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var h=this.next();return h||this.lex()},"lex"),begin:o(function(h){this.conditionStack.push(h)},"begin"),popState:o(function(){var h=this.conditionStack.length-1;return h>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(h){return h=this.conditionStack.length-1-Math.abs(h||0),h>=0?this.conditionStack[h]:"INITIAL"},"topState"),pushState:o(function(h){this.begin(h)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(h,f,d,p){var m=p;switch(d){case 0:return this.pushState("csv"),4;break;case 1:return 10;case 2:return 5;case 3:return 12;case 4:return this.pushState("escaped_text"),18;break;case 5:return 20;case 6:return this.popState("escaped_text"),18;break;case 7:return 19}},"anonymous"),rules:[/^(?:sankey-beta\b)/i,/^(?:$)/i,/^(?:((\u000D\u000A)|(\u000A)))/i,/^(?:(\u002C))/i,/^(?:(\u0022))/i,/^(?:([\u0020-\u0021\u0023-\u002B\u002D-\u007E])*)/i,/^(?:(\u0022)(?!(\u0022)))/i,/^(?:(([\u0020-\u0021\u0023-\u002B\u002D-\u007E])|(\u002C)|(\u000D)|(\u000A)|(\u0022)(\u0022))*)/i],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 l}();i.lexer=a;function s(){this.yy={}}return o(s,"Parser"),s.prototype=i,i.Parser=s,new s}();PB.parser=PB;b4=PB});var eC,tC,J6,wJe,BB,TJe,FB,kJe,EJe,SJe,CJe,f1e,d1e=N(()=>{"use strict";zt();dr();mi();eC=[],tC=[],J6=new Map,wJe=o(()=>{eC=[],tC=[],J6=new Map,Ar()},"clear"),BB=class{constructor(e,r,n=0){this.source=e;this.target=r;this.value=n}static{o(this,"SankeyLink")}},TJe=o((t,e,r)=>{eC.push(new BB(t,e,r))},"addLink"),FB=class{constructor(e){this.ID=e}static{o(this,"SankeyNode")}},kJe=o(t=>{t=Ze.sanitizeText(t,me());let e=J6.get(t);return e===void 0&&(e=new FB(t),J6.set(t,e),tC.push(e)),e},"findOrCreateNode"),EJe=o(()=>tC,"getNodes"),SJe=o(()=>eC,"getLinks"),CJe=o(()=>({nodes:tC.map(t=>({id:t.ID})),links:eC.map(t=>({source:t.source.ID,target:t.target.ID,value:t.value}))}),"getGraph"),f1e={nodesMap:J6,getConfig:o(()=>me().sankey,"getConfig"),getNodes:EJe,getLinks:SJe,getGraph:CJe,addLink:TJe,findOrCreateNode:kJe,getAccTitle:Rr,setAccTitle:Lr,getAccDescription:Mr,setAccDescription:Nr,getDiagramTitle:Ir,setDiagramTitle:$r,clear:wJe}});function w4(t,e){let r;if(e===void 0)for(let n of t)n!=null&&(r=n)&&(r=n);else{let n=-1;for(let i of t)(i=e(i,++n,t))!=null&&(r=i)&&(r=i)}return r}var p1e=N(()=>{"use strict";o(w4,"max")});function gy(t,e){let r;if(e===void 0)for(let n of t)n!=null&&(r>n||r===void 0&&n>=n)&&(r=n);else{let n=-1;for(let i of t)(i=e(i,++n,t))!=null&&(r>i||r===void 0&&i>=i)&&(r=i)}return r}var m1e=N(()=>{"use strict";o(gy,"min")});function yy(t,e){let r=0;if(e===void 0)for(let n of t)(n=+n)&&(r+=n);else{let n=-1;for(let i of t)(i=+e(i,++n,t))&&(r+=i)}return r}var g1e=N(()=>{"use strict";o(yy,"sum")});var $B=N(()=>{"use strict";p1e();m1e();g1e()});function AJe(t){return t.target.depth}function zB(t){return t.depth}function GB(t,e){return e-1-t.height}function T4(t,e){return t.sourceLinks.length?t.depth:e-1}function VB(t){return t.targetLinks.length?t.depth:t.sourceLinks.length?gy(t.sourceLinks,AJe)-1:0}var UB=N(()=>{"use strict";$B();o(AJe,"targetDepth");o(zB,"left");o(GB,"right");o(T4,"justify");o(VB,"center")});function vy(t){return function(){return t}}var y1e=N(()=>{"use strict";o(vy,"constant")});function v1e(t,e){return rC(t.source,e.source)||t.index-e.index}function x1e(t,e){return rC(t.target,e.target)||t.index-e.index}function rC(t,e){return t.y0-e.y0}function HB(t){return t.value}function _Je(t){return t.index}function DJe(t){return t.nodes}function LJe(t){return t.links}function b1e(t,e){let r=t.get(e);if(!r)throw new Error("missing: "+e);return r}function w1e({nodes:t}){for(let e of t){let r=e.y0,n=r;for(let i of e.sourceLinks)i.y0=r+i.width/2,r+=i.width;for(let i of e.targetLinks)i.y1=n+i.width/2,n+=i.width}}function nC(){let t=0,e=0,r=1,n=1,i=24,a=8,s,l=_Je,u=T4,h,f,d=DJe,p=LJe,m=6;function g(){let O={nodes:d.apply(null,arguments),links:p.apply(null,arguments)};return y(O),v(O),x(O),b(O),T(O),w1e(O),O}o(g,"sankey"),g.update=function(O){return w1e(O),O},g.nodeId=function(O){return arguments.length?(l=typeof O=="function"?O:vy(O),g):l},g.nodeAlign=function(O){return arguments.length?(u=typeof O=="function"?O:vy(O),g):u},g.nodeSort=function(O){return arguments.length?(h=O,g):h},g.nodeWidth=function(O){return arguments.length?(i=+O,g):i},g.nodePadding=function(O){return arguments.length?(a=s=+O,g):a},g.nodes=function(O){return arguments.length?(d=typeof O=="function"?O:vy(O),g):d},g.links=function(O){return arguments.length?(p=typeof O=="function"?O:vy(O),g):p},g.linkSort=function(O){return arguments.length?(f=O,g):f},g.size=function(O){return arguments.length?(t=e=0,r=+O[0],n=+O[1],g):[r-t,n-e]},g.extent=function(O){return arguments.length?(t=+O[0][0],r=+O[1][0],e=+O[0][1],n=+O[1][1],g):[[t,e],[r,n]]},g.iterations=function(O){return arguments.length?(m=+O,g):m};function y({nodes:O,links:M}){for(let[B,F]of O.entries())F.index=B,F.sourceLinks=[],F.targetLinks=[];let P=new Map(O.map((B,F)=>[l(B,F,O),B]));for(let[B,F]of M.entries()){F.index=B;let{source:z,target:$}=F;typeof z!="object"&&(z=F.source=b1e(P,z)),typeof $!="object"&&($=F.target=b1e(P,$)),z.sourceLinks.push(F),$.targetLinks.push(F)}if(f!=null)for(let{sourceLinks:B,targetLinks:F}of O)B.sort(f),F.sort(f)}o(y,"computeNodeLinks");function v({nodes:O}){for(let M of O)M.value=M.fixedValue===void 0?Math.max(yy(M.sourceLinks,HB),yy(M.targetLinks,HB)):M.fixedValue}o(v,"computeNodeValues");function x({nodes:O}){let M=O.length,P=new Set(O),B=new Set,F=0;for(;P.size;){for(let z of P){z.depth=F;for(let{target:$}of z.sourceLinks)B.add($)}if(++F>M)throw new Error("circular link");P=B,B=new Set}}o(x,"computeNodeDepths");function b({nodes:O}){let M=O.length,P=new Set(O),B=new Set,F=0;for(;P.size;){for(let z of P){z.height=F;for(let{source:$}of z.targetLinks)B.add($)}if(++F>M)throw new Error("circular link");P=B,B=new Set}}o(b,"computeNodeHeights");function w({nodes:O}){let M=w4(O,F=>F.depth)+1,P=(r-t-i)/(M-1),B=new Array(M);for(let F of O){let z=Math.max(0,Math.min(M-1,Math.floor(u.call(null,F,M))));F.layer=z,F.x0=t+z*P,F.x1=F.x0+i,B[z]?B[z].push(F):B[z]=[F]}if(h)for(let F of B)F.sort(h);return B}o(w,"computeNodeLayers");function C(O){let M=gy(O,P=>(n-e-(P.length-1)*s)/yy(P,HB));for(let P of O){let B=e;for(let F of P){F.y0=B,F.y1=B+F.value*M,B=F.y1+s;for(let z of F.sourceLinks)z.width=z.value*M}B=(n-B+s)/(P.length+1);for(let F=0;FP.length)-1)),C(M);for(let P=0;P0))continue;let te=(U/Q-$.y0)*M;$.y0+=te,$.y1+=te,L($)}h===void 0&&z.sort(rC),S(z,P)}}o(E,"relaxLeftToRight");function A(O,M,P){for(let B=O.length,F=B-2;F>=0;--F){let z=O[F];for(let $ of z){let U=0,Q=0;for(let{target:Y,value:he}of $.sourceLinks){let Z=he*(Y.layer-$.layer);U+=R($,Y)*Z,Q+=Z}if(!(Q>0))continue;let te=(U/Q-$.y0)*M;$.y0+=te,$.y1+=te,L($)}h===void 0&&z.sort(rC),S(z,P)}}o(A,"relaxRightToLeft");function S(O,M){let P=O.length>>1,B=O[P];I(O,B.y0-s,P-1,M),_(O,B.y1+s,P+1,M),I(O,n,O.length-1,M),_(O,e,0,M)}o(S,"resolveCollisions");function _(O,M,P,B){for(;P1e-6&&(F.y0+=z,F.y1+=z),M=F.y1+s}}o(_,"resolveCollisionsTopToBottom");function I(O,M,P,B){for(;P>=0;--P){let F=O[P],z=(F.y1-M)*B;z>1e-6&&(F.y0-=z,F.y1-=z),M=F.y0-s}}o(I,"resolveCollisionsBottomToTop");function L({sourceLinks:O,targetLinks:M}){if(f===void 0){for(let{source:{sourceLinks:P}}of M)P.sort(x1e);for(let{target:{targetLinks:P}}of O)P.sort(v1e)}}o(L,"reorderNodeLinks");function k(O){if(f===void 0)for(let{sourceLinks:M,targetLinks:P}of O)M.sort(x1e),P.sort(v1e)}o(k,"reorderLinks");function D(O,M){let P=O.y0-(O.sourceLinks.length-1)*s/2;for(let{target:B,width:F}of O.sourceLinks){if(B===M)break;P+=F+s}for(let{source:B,width:F}of M.targetLinks){if(B===O)break;P-=F}return P}o(D,"targetTop");function R(O,M){let P=M.y0-(M.targetLinks.length-1)*s/2;for(let{source:B,width:F}of M.targetLinks){if(B===O)break;P+=F+s}for(let{target:B,width:F}of O.sourceLinks){if(B===M)break;P-=F}return P}return o(R,"sourceTop"),g}var T1e=N(()=>{"use strict";$B();UB();y1e();o(v1e,"ascendingSourceBreadth");o(x1e,"ascendingTargetBreadth");o(rC,"ascendingBreadth");o(HB,"value");o(_Je,"defaultId");o(DJe,"defaultNodes");o(LJe,"defaultLinks");o(b1e,"find");o(w1e,"computeLinkBreadths");o(nC,"Sankey")});function YB(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function k1e(){return new YB}var WB,qB,t0,RJe,XB,E1e=N(()=>{"use strict";WB=Math.PI,qB=2*WB,t0=1e-6,RJe=qB-t0;o(YB,"Path");o(k1e,"path");YB.prototype=k1e.prototype={constructor:YB,moveTo:o(function(t,e){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)},"moveTo"),closePath:o(function(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},"closePath"),lineTo:o(function(t,e){this._+="L"+(this._x1=+t)+","+(this._y1=+e)},"lineTo"),quadraticCurveTo:o(function(t,e,r,n){this._+="Q"+ +t+","+ +e+","+(this._x1=+r)+","+(this._y1=+n)},"quadraticCurveTo"),bezierCurveTo:o(function(t,e,r,n,i,a){this._+="C"+ +t+","+ +e+","+ +r+","+ +n+","+(this._x1=+i)+","+(this._y1=+a)},"bezierCurveTo"),arcTo:o(function(t,e,r,n,i){t=+t,e=+e,r=+r,n=+n,i=+i;var a=this._x1,s=this._y1,l=r-t,u=n-e,h=a-t,f=s-e,d=h*h+f*f;if(i<0)throw new Error("negative radius: "+i);if(this._x1===null)this._+="M"+(this._x1=t)+","+(this._y1=e);else if(d>t0)if(!(Math.abs(f*l-u*h)>t0)||!i)this._+="L"+(this._x1=t)+","+(this._y1=e);else{var p=r-a,m=n-s,g=l*l+u*u,y=p*p+m*m,v=Math.sqrt(g),x=Math.sqrt(d),b=i*Math.tan((WB-Math.acos((g+d-y)/(2*v*x)))/2),w=b/x,C=b/v;Math.abs(w-1)>t0&&(this._+="L"+(t+w*h)+","+(e+w*f)),this._+="A"+i+","+i+",0,0,"+ +(f*p>h*m)+","+(this._x1=t+C*l)+","+(this._y1=e+C*u)}},"arcTo"),arc:o(function(t,e,r,n,i,a){t=+t,e=+e,r=+r,a=!!a;var s=r*Math.cos(n),l=r*Math.sin(n),u=t+s,h=e+l,f=1^a,d=a?n-i:i-n;if(r<0)throw new Error("negative radius: "+r);this._x1===null?this._+="M"+u+","+h:(Math.abs(this._x1-u)>t0||Math.abs(this._y1-h)>t0)&&(this._+="L"+u+","+h),r&&(d<0&&(d=d%qB+qB),d>RJe?this._+="A"+r+","+r+",0,1,"+f+","+(t-s)+","+(e-l)+"A"+r+","+r+",0,1,"+f+","+(this._x1=u)+","+(this._y1=h):d>t0&&(this._+="A"+r+","+r+",0,"+ +(d>=WB)+","+f+","+(this._x1=t+r*Math.cos(i))+","+(this._y1=e+r*Math.sin(i))))},"arc"),rect:o(function(t,e,r,n){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)+"h"+ +r+"v"+ +n+"h"+-r+"Z"},"rect"),toString:o(function(){return this._},"toString")};XB=k1e});var S1e=N(()=>{"use strict";E1e()});function iC(t){return o(function(){return t},"constant")}var C1e=N(()=>{"use strict";o(iC,"default")});function A1e(t){return t[0]}function _1e(t){return t[1]}var D1e=N(()=>{"use strict";o(A1e,"x");o(_1e,"y")});var L1e,R1e=N(()=>{"use strict";L1e=Array.prototype.slice});function NJe(t){return t.source}function MJe(t){return t.target}function IJe(t){var e=NJe,r=MJe,n=A1e,i=_1e,a=null;function s(){var l,u=L1e.call(arguments),h=e.apply(this,u),f=r.apply(this,u);if(a||(a=l=XB()),t(a,+n.apply(this,(u[0]=h,u)),+i.apply(this,u),+n.apply(this,(u[0]=f,u)),+i.apply(this,u)),l)return a=null,l+""||null}return o(s,"link"),s.source=function(l){return arguments.length?(e=l,s):e},s.target=function(l){return arguments.length?(r=l,s):r},s.x=function(l){return arguments.length?(n=typeof l=="function"?l:iC(+l),s):n},s.y=function(l){return arguments.length?(i=typeof l=="function"?l:iC(+l),s):i},s.context=function(l){return arguments.length?(a=l??null,s):a},s}function OJe(t,e,r,n,i){t.moveTo(e,r),t.bezierCurveTo(e=(e+n)/2,r,e,i,n,i)}function jB(){return IJe(OJe)}var N1e=N(()=>{"use strict";S1e();R1e();C1e();D1e();o(NJe,"linkSource");o(MJe,"linkTarget");o(IJe,"link");o(OJe,"curveHorizontal");o(jB,"linkHorizontal")});var M1e=N(()=>{"use strict";N1e()});function PJe(t){return[t.source.x1,t.y0]}function BJe(t){return[t.target.x0,t.y1]}function aC(){return jB().source(PJe).target(BJe)}var I1e=N(()=>{"use strict";M1e();o(PJe,"horizontalSource");o(BJe,"horizontalTarget");o(aC,"default")});var O1e=N(()=>{"use strict";T1e();UB();I1e()});var k4,P1e=N(()=>{"use strict";k4=class t{static{o(this,"Uid")}static{this.count=0}static next(e){return new t(e+ ++t.count)}constructor(e){this.id=e,this.href=`#${e}`}toString(){return"url("+this.href+")"}}});var FJe,$Je,B1e,F1e=N(()=>{"use strict";zt();pr();O1e();Si();P1e();FJe={left:zB,right:GB,center:VB,justify:T4},$Je=o(function(t,e,r,n){let{securityLevel:i,sankey:a}=me(),s=I3.sankey,l;i==="sandbox"&&(l=Ge("#i"+e));let u=i==="sandbox"?Ge(l.nodes()[0].contentDocument.body):Ge("body"),h=i==="sandbox"?u.select(`[id="${e}"]`):Ge(`[id="${e}"]`),f=a?.width??s.width,d=a?.height??s.width,p=a?.useMaxWidth??s.useMaxWidth,m=a?.nodeAlignment??s.nodeAlignment,g=a?.prefix??s.prefix,y=a?.suffix??s.suffix,v=a?.showValues??s.showValues,x=n.db.getGraph(),b=FJe[m];nC().nodeId(I=>I.id).nodeWidth(10).nodePadding(10+(v?15:0)).nodeAlign(b).extent([[0,0],[f,d]])(x);let T=bu(a9);h.append("g").attr("class","nodes").selectAll(".node").data(x.nodes).join("g").attr("class","node").attr("id",I=>(I.uid=k4.next("node-")).id).attr("transform",function(I){return"translate("+I.x0+","+I.y0+")"}).attr("x",I=>I.x0).attr("y",I=>I.y0).append("rect").attr("height",I=>I.y1-I.y0).attr("width",I=>I.x1-I.x0).attr("fill",I=>T(I.id));let E=o(({id:I,value:L})=>v?`${I} -${g}${Math.round(L*100)/100}${y}`:I,"getText");h.append("g").attr("class","node-labels").attr("font-size",14).selectAll("text").data(x.nodes).join("text").attr("x",I=>I.x0(I.y1+I.y0)/2).attr("dy",`${v?"0":"0.35"}em`).attr("text-anchor",I=>I.x0(L.uid=k4.next("linearGradient-")).id).attr("gradientUnits","userSpaceOnUse").attr("x1",L=>L.source.x1).attr("x2",L=>L.target.x0);I.append("stop").attr("offset","0%").attr("stop-color",L=>T(L.source.id)),I.append("stop").attr("offset","100%").attr("stop-color",L=>T(L.target.id))}let _;switch(S){case"gradient":_=o(I=>I.uid,"coloring");break;case"source":_=o(I=>T(I.source.id),"coloring");break;case"target":_=o(I=>T(I.target.id),"coloring");break;default:_=S}A.append("path").attr("d",aC()).attr("stroke",_).attr("stroke-width",I=>Math.max(1,I.width)),_o(void 0,h,0,p)},"draw"),B1e={draw:$Je}});var $1e,z1e=N(()=>{"use strict";$1e=o(t=>t.replaceAll(/^[^\S\n\r]+|[^\S\n\r]+$/g,"").replaceAll(/([\n\r])+/g,` -`).trim(),"prepareTextForParsing")});var zJe,G1e,V1e=N(()=>{"use strict";zJe=o(t=>`.label { +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var h=this.next();return h||this.lex()},"lex"),begin:o(function(h){this.conditionStack.push(h)},"begin"),popState:o(function(){var h=this.conditionStack.length-1;return h>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(h){return h=this.conditionStack.length-1-Math.abs(h||0),h>=0?this.conditionStack[h]:"INITIAL"},"topState"),pushState:o(function(h){this.begin(h)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(h,f,d,p){var m=p;switch(d){case 0:return this.pushState("csv"),4;break;case 1:return 10;case 2:return 5;case 3:return 12;case 4:return this.pushState("escaped_text"),18;break;case 5:return 20;case 6:return this.popState("escaped_text"),18;break;case 7:return 19}},"anonymous"),rules:[/^(?:sankey-beta\b)/i,/^(?:$)/i,/^(?:((\u000D\u000A)|(\u000A)))/i,/^(?:(\u002C))/i,/^(?:(\u0022))/i,/^(?:([\u0020-\u0021\u0023-\u002B\u002D-\u007E])*)/i,/^(?:(\u0022)(?!(\u0022)))/i,/^(?:(([\u0020-\u0021\u0023-\u002B\u002D-\u007E])|(\u002C)|(\u000D)|(\u000A)|(\u0022)(\u0022))*)/i],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 l}();i.lexer=a;function s(){this.yy={}}return o(s,"Parser"),s.prototype=i,i.Parser=s,new s}();yF.parser=yF;E4=yF});var pC,mC,dC,Qet,vF,Zet,xF,Jet,ett,ttt,rtt,Cye,Aye=N(()=>{"use strict";Gt();pr();ci();pC=[],mC=[],dC=new Map,Qet=o(()=>{pC=[],mC=[],dC=new Map,kr()},"clear"),vF=class{constructor(e,r,n=0){this.source=e;this.target=r;this.value=n}static{o(this,"SankeyLink")}},Zet=o((t,e,r)=>{pC.push(new vF(t,e,r))},"addLink"),xF=class{constructor(e){this.ID=e}static{o(this,"SankeyNode")}},Jet=o(t=>{t=Ze.sanitizeText(t,me());let e=dC.get(t);return e===void 0&&(e=new xF(t),dC.set(t,e),mC.push(e)),e},"findOrCreateNode"),ett=o(()=>mC,"getNodes"),ttt=o(()=>pC,"getLinks"),rtt=o(()=>({nodes:mC.map(t=>({id:t.ID})),links:pC.map(t=>({source:t.source.ID,target:t.target.ID,value:t.value}))}),"getGraph"),Cye={nodesMap:dC,getConfig:o(()=>me().sankey,"getConfig"),getNodes:ett,getLinks:ttt,getGraph:rtt,addLink:Zet,findOrCreateNode:Jet,getAccTitle:Dr,setAccTitle:Ar,getAccDescription:Rr,setAccDescription:Lr,getDiagramTitle:Nr,setDiagramTitle:Or,clear:Qet}});function S4(t,e){let r;if(e===void 0)for(let n of t)n!=null&&(r=n)&&(r=n);else{let n=-1;for(let i of t)(i=e(i,++n,t))!=null&&(r=i)&&(r=i)}return r}var _ye=N(()=>{"use strict";o(S4,"max")});function my(t,e){let r;if(e===void 0)for(let n of t)n!=null&&(r>n||r===void 0&&n>=n)&&(r=n);else{let n=-1;for(let i of t)(i=e(i,++n,t))!=null&&(r>i||r===void 0&&i>=i)&&(r=i)}return r}var Dye=N(()=>{"use strict";o(my,"min")});function gy(t,e){let r=0;if(e===void 0)for(let n of t)(n=+n)&&(r+=n);else{let n=-1;for(let i of t)(i=+e(i,++n,t))&&(r+=i)}return r}var Lye=N(()=>{"use strict";o(gy,"sum")});var bF=N(()=>{"use strict";_ye();Dye();Lye()});function ntt(t){return t.target.depth}function TF(t){return t.depth}function wF(t,e){return e-1-t.height}function C4(t,e){return t.sourceLinks.length?t.depth:e-1}function kF(t){return t.targetLinks.length?t.depth:t.sourceLinks.length?my(t.sourceLinks,ntt)-1:0}var EF=N(()=>{"use strict";bF();o(ntt,"targetDepth");o(TF,"left");o(wF,"right");o(C4,"justify");o(kF,"center")});function yy(t){return function(){return t}}var Rye=N(()=>{"use strict";o(yy,"constant")});function Nye(t,e){return gC(t.source,e.source)||t.index-e.index}function Mye(t,e){return gC(t.target,e.target)||t.index-e.index}function gC(t,e){return t.y0-e.y0}function SF(t){return t.value}function itt(t){return t.index}function att(t){return t.nodes}function stt(t){return t.links}function Iye(t,e){let r=t.get(e);if(!r)throw new Error("missing: "+e);return r}function Oye({nodes:t}){for(let e of t){let r=e.y0,n=r;for(let i of e.sourceLinks)i.y0=r+i.width/2,r+=i.width;for(let i of e.targetLinks)i.y1=n+i.width/2,n+=i.width}}function yC(){let t=0,e=0,r=1,n=1,i=24,a=8,s,l=itt,u=C4,h,f,d=att,p=stt,m=6;function g(){let I={nodes:d.apply(null,arguments),links:p.apply(null,arguments)};return y(I),v(I),x(I),b(I),w(I),Oye(I),I}o(g,"sankey"),g.update=function(I){return Oye(I),I},g.nodeId=function(I){return arguments.length?(l=typeof I=="function"?I:yy(I),g):l},g.nodeAlign=function(I){return arguments.length?(u=typeof I=="function"?I:yy(I),g):u},g.nodeSort=function(I){return arguments.length?(h=I,g):h},g.nodeWidth=function(I){return arguments.length?(i=+I,g):i},g.nodePadding=function(I){return arguments.length?(a=s=+I,g):a},g.nodes=function(I){return arguments.length?(d=typeof I=="function"?I:yy(I),g):d},g.links=function(I){return arguments.length?(p=typeof I=="function"?I:yy(I),g):p},g.linkSort=function(I){return arguments.length?(f=I,g):f},g.size=function(I){return arguments.length?(t=e=0,r=+I[0],n=+I[1],g):[r-t,n-e]},g.extent=function(I){return arguments.length?(t=+I[0][0],r=+I[1][0],e=+I[0][1],n=+I[1][1],g):[[t,e],[r,n]]},g.iterations=function(I){return arguments.length?(m=+I,g):m};function y({nodes:I,links:M}){for(let[B,F]of I.entries())F.index=B,F.sourceLinks=[],F.targetLinks=[];let P=new Map(I.map((B,F)=>[l(B,F,I),B]));for(let[B,F]of M.entries()){F.index=B;let{source:z,target:$}=F;typeof z!="object"&&(z=F.source=Iye(P,z)),typeof $!="object"&&($=F.target=Iye(P,$)),z.sourceLinks.push(F),$.targetLinks.push(F)}if(f!=null)for(let{sourceLinks:B,targetLinks:F}of I)B.sort(f),F.sort(f)}o(y,"computeNodeLinks");function v({nodes:I}){for(let M of I)M.value=M.fixedValue===void 0?Math.max(gy(M.sourceLinks,SF),gy(M.targetLinks,SF)):M.fixedValue}o(v,"computeNodeValues");function x({nodes:I}){let M=I.length,P=new Set(I),B=new Set,F=0;for(;P.size;){for(let z of P){z.depth=F;for(let{target:$}of z.sourceLinks)B.add($)}if(++F>M)throw new Error("circular link");P=B,B=new Set}}o(x,"computeNodeDepths");function b({nodes:I}){let M=I.length,P=new Set(I),B=new Set,F=0;for(;P.size;){for(let z of P){z.height=F;for(let{source:$}of z.targetLinks)B.add($)}if(++F>M)throw new Error("circular link");P=B,B=new Set}}o(b,"computeNodeHeights");function T({nodes:I}){let M=S4(I,F=>F.depth)+1,P=(r-t-i)/(M-1),B=new Array(M);for(let F of I){let z=Math.max(0,Math.min(M-1,Math.floor(u.call(null,F,M))));F.layer=z,F.x0=t+z*P,F.x1=F.x0+i,B[z]?B[z].push(F):B[z]=[F]}if(h)for(let F of B)F.sort(h);return B}o(T,"computeNodeLayers");function S(I){let M=my(I,P=>(n-e-(P.length-1)*s)/gy(P,SF));for(let P of I){let B=e;for(let F of P){F.y0=B,F.y1=B+F.value*M,B=F.y1+s;for(let z of F.sourceLinks)z.width=z.value*M}B=(n-B+s)/(P.length+1);for(let F=0;FP.length)-1)),S(M);for(let P=0;P0))continue;let ee=(U/K-$.y0)*M;$.y0+=ee,$.y1+=ee,R($)}h===void 0&&z.sort(gC),C(z,P)}}o(E,"relaxLeftToRight");function _(I,M,P){for(let B=I.length,F=B-2;F>=0;--F){let z=I[F];for(let $ of z){let U=0,K=0;for(let{target:Y,value:ce}of $.sourceLinks){let Z=ce*(Y.layer-$.layer);U+=A($,Y)*Z,K+=Z}if(!(K>0))continue;let ee=(U/K-$.y0)*M;$.y0+=ee,$.y1+=ee,R($)}h===void 0&&z.sort(gC),C(z,P)}}o(_,"relaxRightToLeft");function C(I,M){let P=I.length>>1,B=I[P];O(I,B.y0-s,P-1,M),D(I,B.y1+s,P+1,M),O(I,n,I.length-1,M),D(I,e,0,M)}o(C,"resolveCollisions");function D(I,M,P,B){for(;P1e-6&&(F.y0+=z,F.y1+=z),M=F.y1+s}}o(D,"resolveCollisionsTopToBottom");function O(I,M,P,B){for(;P>=0;--P){let F=I[P],z=(F.y1-M)*B;z>1e-6&&(F.y0-=z,F.y1-=z),M=F.y0-s}}o(O,"resolveCollisionsBottomToTop");function R({sourceLinks:I,targetLinks:M}){if(f===void 0){for(let{source:{sourceLinks:P}}of M)P.sort(Mye);for(let{target:{targetLinks:P}}of I)P.sort(Nye)}}o(R,"reorderNodeLinks");function k(I){if(f===void 0)for(let{sourceLinks:M,targetLinks:P}of I)M.sort(Mye),P.sort(Nye)}o(k,"reorderLinks");function L(I,M){let P=I.y0-(I.sourceLinks.length-1)*s/2;for(let{target:B,width:F}of I.sourceLinks){if(B===M)break;P+=F+s}for(let{source:B,width:F}of M.targetLinks){if(B===I)break;P-=F}return P}o(L,"targetTop");function A(I,M){let P=M.y0-(M.targetLinks.length-1)*s/2;for(let{source:B,width:F}of M.targetLinks){if(B===I)break;P+=F+s}for(let{target:B,width:F}of I.sourceLinks){if(B===M)break;P-=F}return P}return o(A,"sourceTop"),g}var Pye=N(()=>{"use strict";bF();EF();Rye();o(Nye,"ascendingSourceBreadth");o(Mye,"ascendingTargetBreadth");o(gC,"ascendingBreadth");o(SF,"value");o(itt,"defaultId");o(att,"defaultNodes");o(stt,"defaultLinks");o(Iye,"find");o(Oye,"computeLinkBreadths");o(yC,"Sankey")});function _F(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function Bye(){return new _F}var CF,AF,i0,ott,DF,Fye=N(()=>{"use strict";CF=Math.PI,AF=2*CF,i0=1e-6,ott=AF-i0;o(_F,"Path");o(Bye,"path");_F.prototype=Bye.prototype={constructor:_F,moveTo:o(function(t,e){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)},"moveTo"),closePath:o(function(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},"closePath"),lineTo:o(function(t,e){this._+="L"+(this._x1=+t)+","+(this._y1=+e)},"lineTo"),quadraticCurveTo:o(function(t,e,r,n){this._+="Q"+ +t+","+ +e+","+(this._x1=+r)+","+(this._y1=+n)},"quadraticCurveTo"),bezierCurveTo:o(function(t,e,r,n,i,a){this._+="C"+ +t+","+ +e+","+ +r+","+ +n+","+(this._x1=+i)+","+(this._y1=+a)},"bezierCurveTo"),arcTo:o(function(t,e,r,n,i){t=+t,e=+e,r=+r,n=+n,i=+i;var a=this._x1,s=this._y1,l=r-t,u=n-e,h=a-t,f=s-e,d=h*h+f*f;if(i<0)throw new Error("negative radius: "+i);if(this._x1===null)this._+="M"+(this._x1=t)+","+(this._y1=e);else if(d>i0)if(!(Math.abs(f*l-u*h)>i0)||!i)this._+="L"+(this._x1=t)+","+(this._y1=e);else{var p=r-a,m=n-s,g=l*l+u*u,y=p*p+m*m,v=Math.sqrt(g),x=Math.sqrt(d),b=i*Math.tan((CF-Math.acos((g+d-y)/(2*v*x)))/2),T=b/x,S=b/v;Math.abs(T-1)>i0&&(this._+="L"+(t+T*h)+","+(e+T*f)),this._+="A"+i+","+i+",0,0,"+ +(f*p>h*m)+","+(this._x1=t+S*l)+","+(this._y1=e+S*u)}},"arcTo"),arc:o(function(t,e,r,n,i,a){t=+t,e=+e,r=+r,a=!!a;var s=r*Math.cos(n),l=r*Math.sin(n),u=t+s,h=e+l,f=1^a,d=a?n-i:i-n;if(r<0)throw new Error("negative radius: "+r);this._x1===null?this._+="M"+u+","+h:(Math.abs(this._x1-u)>i0||Math.abs(this._y1-h)>i0)&&(this._+="L"+u+","+h),r&&(d<0&&(d=d%AF+AF),d>ott?this._+="A"+r+","+r+",0,1,"+f+","+(t-s)+","+(e-l)+"A"+r+","+r+",0,1,"+f+","+(this._x1=u)+","+(this._y1=h):d>i0&&(this._+="A"+r+","+r+",0,"+ +(d>=CF)+","+f+","+(this._x1=t+r*Math.cos(i))+","+(this._y1=e+r*Math.sin(i))))},"arc"),rect:o(function(t,e,r,n){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)+"h"+ +r+"v"+ +n+"h"+-r+"Z"},"rect"),toString:o(function(){return this._},"toString")};DF=Bye});var $ye=N(()=>{"use strict";Fye()});function vC(t){return o(function(){return t},"constant")}var zye=N(()=>{"use strict";o(vC,"default")});function Gye(t){return t[0]}function Vye(t){return t[1]}var Uye=N(()=>{"use strict";o(Gye,"x");o(Vye,"y")});var Hye,Wye=N(()=>{"use strict";Hye=Array.prototype.slice});function ltt(t){return t.source}function ctt(t){return t.target}function utt(t){var e=ltt,r=ctt,n=Gye,i=Vye,a=null;function s(){var l,u=Hye.call(arguments),h=e.apply(this,u),f=r.apply(this,u);if(a||(a=l=DF()),t(a,+n.apply(this,(u[0]=h,u)),+i.apply(this,u),+n.apply(this,(u[0]=f,u)),+i.apply(this,u)),l)return a=null,l+""||null}return o(s,"link"),s.source=function(l){return arguments.length?(e=l,s):e},s.target=function(l){return arguments.length?(r=l,s):r},s.x=function(l){return arguments.length?(n=typeof l=="function"?l:vC(+l),s):n},s.y=function(l){return arguments.length?(i=typeof l=="function"?l:vC(+l),s):i},s.context=function(l){return arguments.length?(a=l??null,s):a},s}function htt(t,e,r,n,i){t.moveTo(e,r),t.bezierCurveTo(e=(e+n)/2,r,e,i,n,i)}function LF(){return utt(htt)}var qye=N(()=>{"use strict";$ye();Wye();zye();Uye();o(ltt,"linkSource");o(ctt,"linkTarget");o(utt,"link");o(htt,"curveHorizontal");o(LF,"linkHorizontal")});var Yye=N(()=>{"use strict";qye()});function ftt(t){return[t.source.x1,t.y0]}function dtt(t){return[t.target.x0,t.y1]}function xC(){return LF().source(ftt).target(dtt)}var Xye=N(()=>{"use strict";Yye();o(ftt,"horizontalSource");o(dtt,"horizontalTarget");o(xC,"default")});var jye=N(()=>{"use strict";Pye();EF();Xye()});var A4,Kye=N(()=>{"use strict";A4=class t{static{o(this,"Uid")}static{this.count=0}static next(e){return new t(e+ ++t.count)}constructor(e){this.id=e,this.href=`#${e}`}toString(){return"url("+this.href+")"}}});var ptt,mtt,Qye,Zye=N(()=>{"use strict";Gt();fr();jye();xi();Kye();ptt={left:TF,right:wF,center:kF,justify:C4},mtt=o(function(t,e,r,n){let{securityLevel:i,sankey:a}=me(),s=$3.sankey,l;i==="sandbox"&&(l=Ge("#i"+e));let u=i==="sandbox"?Ge(l.nodes()[0].contentDocument.body):Ge("body"),h=i==="sandbox"?u.select(`[id="${e}"]`):Ge(`[id="${e}"]`),f=a?.width??s.width,d=a?.height??s.width,p=a?.useMaxWidth??s.useMaxWidth,m=a?.nodeAlignment??s.nodeAlignment,g=a?.prefix??s.prefix,y=a?.suffix??s.suffix,v=a?.showValues??s.showValues,x=n.db.getGraph(),b=ptt[m];yC().nodeId(O=>O.id).nodeWidth(10).nodePadding(10+(v?15:0)).nodeAlign(b).extent([[0,0],[f,d]])(x);let w=Js(PD);h.append("g").attr("class","nodes").selectAll(".node").data(x.nodes).join("g").attr("class","node").attr("id",O=>(O.uid=A4.next("node-")).id).attr("transform",function(O){return"translate("+O.x0+","+O.y0+")"}).attr("x",O=>O.x0).attr("y",O=>O.y0).append("rect").attr("height",O=>O.y1-O.y0).attr("width",O=>O.x1-O.x0).attr("fill",O=>w(O.id));let E=o(({id:O,value:R})=>v?`${O} +${g}${Math.round(R*100)/100}${y}`:O,"getText");h.append("g").attr("class","node-labels").attr("font-size",14).selectAll("text").data(x.nodes).join("text").attr("x",O=>O.x0(O.y1+O.y0)/2).attr("dy",`${v?"0":"0.35"}em`).attr("text-anchor",O=>O.x0(R.uid=A4.next("linearGradient-")).id).attr("gradientUnits","userSpaceOnUse").attr("x1",R=>R.source.x1).attr("x2",R=>R.target.x0);O.append("stop").attr("offset","0%").attr("stop-color",R=>w(R.source.id)),O.append("stop").attr("offset","100%").attr("stop-color",R=>w(R.target.id))}let D;switch(C){case"gradient":D=o(O=>O.uid,"coloring");break;case"source":D=o(O=>w(O.source.id),"coloring");break;case"target":D=o(O=>w(O.target.id),"coloring");break;default:D=C}_.append("path").attr("d",xC()).attr("stroke",D).attr("stroke-width",O=>Math.max(1,O.width)),Lo(void 0,h,0,p)},"draw"),Qye={draw:mtt}});var Jye,eve=N(()=>{"use strict";Jye=o(t=>t.replaceAll(/^[^\S\n\r]+|[^\S\n\r]+$/g,"").replaceAll(/([\n\r])+/g,` +`).trim(),"prepareTextForParsing")});var gtt,tve,rve=N(()=>{"use strict";gtt=o(t=>`.label { font-family: ${t.fontFamily}; - }`,"getStyles"),G1e=zJe});var U1e={};hr(U1e,{diagram:()=>VJe});var GJe,VJe,H1e=N(()=>{"use strict";h1e();d1e();F1e();z1e();V1e();GJe=b4.parse.bind(b4);b4.parse=t=>GJe($1e(t));VJe={styles:G1e,parser:b4,db:f1e,renderer:B1e}});var Y1e,KB,qJe,YJe,XJe,jJe,KJe,Uf,QB=N(()=>{"use strict";Bi();Ya();nr();mi();Y1e={packet:[]},KB=structuredClone(Y1e),qJe=lr.packet,YJe=o(()=>{let t=gi({...qJe,...sr().packet});return t.showBits&&(t.paddingY+=10),t},"getConfig"),XJe=o(()=>KB.packet,"getPacket"),jJe=o(t=>{t.length>0&&KB.packet.push(t)},"pushWord"),KJe=o(()=>{Ar(),KB=structuredClone(Y1e)},"clear"),Uf={pushWord:jJe,getPacket:XJe,getConfig:YJe,clear:KJe,setAccTitle:Lr,getAccTitle:Rr,setDiagramTitle:$r,getDiagramTitle:Ir,getAccDescription:Mr,setAccDescription:Nr}});var QJe,ZJe,JJe,X1e,j1e=N(()=>{"use strict";Lp();vt();L1();QB();QJe=1e4,ZJe=o(t=>{Uc(t,Uf);let e=-1,r=[],n=1,{bitsPerRow:i}=Uf.getConfig();for(let{start:a,end:s,bits:l,label:u}of t.blocks){if(a!==void 0&&s!==void 0&&s{if(t.start===void 0)throw new Error("start should have been set during first phase");if(t.end===void 0)throw new Error("end should have been set during first phase");if(t.start>t.end)throw new Error(`Block start ${t.start} is greater than block end ${t.end}.`);if(t.end+1<=e*r)return[t,void 0];let n=e*r-1,i=e*r;return[{start:t.start,end:n,label:t.label,bits:n-t.start},{start:i,end:t.end,label:t.label,bits:t.end-i}]},"getNextFittingBlock"),X1e={parse:o(async t=>{let e=await fo("packet",t);X.debug(e),ZJe(e)},"parse")}});var eet,tet,K1e,Q1e=N(()=>{"use strict";qc();Si();eet=o((t,e,r,n)=>{let i=n.db,a=i.getConfig(),{rowHeight:s,paddingY:l,bitWidth:u,bitsPerRow:h}=a,f=i.getPacket(),d=i.getDiagramTitle(),p=s+l,m=p*(f.length+1)-(d?0:s),g=u*h+2,y=sa(e);y.attr("viewbox",`0 0 ${g} ${m}`),vn(y,m,g,a.useMaxWidth);for(let[v,x]of f.entries())tet(y,x,v,a);y.append("text").text(d).attr("x",g/2).attr("y",m-p/2).attr("dominant-baseline","middle").attr("text-anchor","middle").attr("class","packetTitle")},"draw"),tet=o((t,e,r,{rowHeight:n,paddingX:i,paddingY:a,bitWidth:s,bitsPerRow:l,showBits:u})=>{let h=t.append("g"),f=r*(n+a)+a;for(let d of e){let p=d.start%l*s+1,m=(d.end-d.start+1)*s-i;if(h.append("rect").attr("x",p).attr("y",f).attr("width",m).attr("height",n).attr("class","packetBlock"),h.append("text").attr("x",p+m/2).attr("y",f+n/2).attr("class","packetLabel").attr("dominant-baseline","middle").attr("text-anchor","middle").text(d.label),!u)continue;let g=d.end===d.start,y=f-2;h.append("text").attr("x",p+(g?m/2:0)).attr("y",y).attr("class","packetByte start").attr("dominant-baseline","auto").attr("text-anchor",g?"middle":"start").text(d.start),g||h.append("text").attr("x",p+m).attr("y",y).attr("class","packetByte end").attr("dominant-baseline","auto").attr("text-anchor","end").text(d.end)}},"drawWord"),K1e={draw:eet}});var ret,Z1e,J1e=N(()=>{"use strict";nr();ret={byteFontSize:"10px",startByteColor:"black",endByteColor:"black",labelColor:"black",labelFontSize:"12px",titleColor:"black",titleFontSize:"14px",blockStrokeColor:"black",blockStrokeWidth:"1",blockFillColor:"#efefef"},Z1e=o(({packet:t}={})=>{let e=gi(ret,t);return` + }`,"getStyles"),tve=gtt});var nve={};ur(nve,{diagram:()=>vtt});var ytt,vtt,ive=N(()=>{"use strict";Sye();Aye();Zye();eve();rve();ytt=E4.parse.bind(E4);E4.parse=t=>ytt(Jye(t));vtt={styles:tve,parser:E4,db:Cye,renderer:Qye}});var ove,RF,wtt,ktt,Ett,Stt,Ctt,qf,NF=N(()=>{"use strict";mi();_a();er();ci();ove={packet:[]},RF=structuredClone(ove),wtt=or.packet,ktt=o(()=>{let t=$n({...wtt,...tr().packet});return t.showBits&&(t.paddingY+=10),t},"getConfig"),Ett=o(()=>RF.packet,"getPacket"),Stt=o(t=>{t.length>0&&RF.packet.push(t)},"pushWord"),Ctt=o(()=>{kr(),RF=structuredClone(ove)},"clear"),qf={pushWord:Stt,getPacket:Ett,getConfig:ktt,clear:Ctt,setAccTitle:Ar,getAccTitle:Dr,setDiagramTitle:Or,getDiagramTitle:Nr,getAccDescription:Rr,setAccDescription:Lr}});var Att,_tt,Dtt,lve,cve=N(()=>{"use strict";bf();yt();Mp();NF();Att=1e4,_tt=o(t=>{Jo(t,qf);let e=-1,r=[],n=1,{bitsPerRow:i}=qf.getConfig();for(let{start:a,end:s,bits:l,label:u}of t.blocks){if(a!==void 0&&s!==void 0&&s{if(t.start===void 0)throw new Error("start should have been set during first phase");if(t.end===void 0)throw new Error("end should have been set during first phase");if(t.start>t.end)throw new Error(`Block start ${t.start} is greater than block end ${t.end}.`);if(t.end+1<=e*r)return[t,void 0];let n=e*r-1,i=e*r;return[{start:t.start,end:n,label:t.label,bits:n-t.start},{start:i,end:t.end,label:t.label,bits:t.end-i}]},"getNextFittingBlock"),lve={parse:o(async t=>{let e=await vs("packet",t);X.debug(e),_tt(e)},"parse")}});var Ltt,Rtt,uve,hve=N(()=>{"use strict";Vl();xi();Ltt=o((t,e,r,n)=>{let i=n.db,a=i.getConfig(),{rowHeight:s,paddingY:l,bitWidth:u,bitsPerRow:h}=a,f=i.getPacket(),d=i.getDiagramTitle(),p=s+l,m=p*(f.length+1)-(d?0:s),g=u*h+2,y=Li(e);y.attr("viewbox",`0 0 ${g} ${m}`),fn(y,m,g,a.useMaxWidth);for(let[v,x]of f.entries())Rtt(y,x,v,a);y.append("text").text(d).attr("x",g/2).attr("y",m-p/2).attr("dominant-baseline","middle").attr("text-anchor","middle").attr("class","packetTitle")},"draw"),Rtt=o((t,e,r,{rowHeight:n,paddingX:i,paddingY:a,bitWidth:s,bitsPerRow:l,showBits:u})=>{let h=t.append("g"),f=r*(n+a)+a;for(let d of e){let p=d.start%l*s+1,m=(d.end-d.start+1)*s-i;if(h.append("rect").attr("x",p).attr("y",f).attr("width",m).attr("height",n).attr("class","packetBlock"),h.append("text").attr("x",p+m/2).attr("y",f+n/2).attr("class","packetLabel").attr("dominant-baseline","middle").attr("text-anchor","middle").text(d.label),!u)continue;let g=d.end===d.start,y=f-2;h.append("text").attr("x",p+(g?m/2:0)).attr("y",y).attr("class","packetByte start").attr("dominant-baseline","auto").attr("text-anchor",g?"middle":"start").text(d.start),g||h.append("text").attr("x",p+m).attr("y",y).attr("class","packetByte end").attr("dominant-baseline","auto").attr("text-anchor","end").text(d.end)}},"drawWord"),uve={draw:Ltt}});var Ntt,fve,dve=N(()=>{"use strict";er();Ntt={byteFontSize:"10px",startByteColor:"black",endByteColor:"black",labelColor:"black",labelFontSize:"12px",titleColor:"black",titleFontSize:"14px",blockStrokeColor:"black",blockStrokeWidth:"1",blockFillColor:"#efefef"},fve=o(({packet:t}={})=>{let e=$n(Ntt,t);return` .packetByte { font-size: ${e.byteFontSize}; } @@ -2386,7 +2386,7 @@ ${g}${Math.round(L*100)/100}${y}`:I,"getText");h.append("g").attr("class","node- stroke-width: ${e.blockStrokeWidth}; fill: ${e.blockFillColor}; } - `},"styles")});var eye={};hr(eye,{diagram:()=>net});var net,tye=N(()=>{"use strict";QB();j1e();Q1e();J1e();net={parser:X1e,db:Uf,renderer:K1e,styles:Z1e}});var xy,iye,r0,set,oet,aye,cet,uet,het,fet,det,pet,met,n0,ZB=N(()=>{"use strict";Bi();Ya();nr();mi();xy={showLegend:!0,ticks:5,max:null,min:0,graticule:"circle"},iye={axes:[],curves:[],options:xy},r0=structuredClone(iye),set=lr.radar,oet=o(()=>gi({...set,...sr().radar}),"getConfig"),aye=o(()=>r0.axes,"getAxes"),cet=o(()=>r0.curves,"getCurves"),uet=o(()=>r0.options,"getOptions"),het=o(t=>{r0.axes=t.map(e=>({name:e.name,label:e.label??e.name}))},"setAxes"),fet=o(t=>{r0.curves=t.map(e=>({name:e.name,label:e.label??e.name,entries:det(e.entries)}))},"setCurves"),det=o(t=>{if(t[0].axis==null)return t.map(r=>r.value);let e=aye();if(e.length===0)throw new Error("Axes must be populated before curves for reference entries");return e.map(r=>{let n=t.find(i=>i.axis?.$refText===r.name);if(n===void 0)throw new Error("Missing entry for axis "+r.label);return n.value})},"computeCurveEntries"),pet=o(t=>{let e=t.reduce((r,n)=>(r[n.name]=n,r),{});r0.options={showLegend:e.showLegend?.value??xy.showLegend,ticks:e.ticks?.value??xy.ticks,max:e.max?.value??xy.max,min:e.min?.value??xy.min,graticule:e.graticule?.value??xy.graticule}},"setOptions"),met=o(()=>{Ar(),r0=structuredClone(iye)},"clear"),n0={getAxes:aye,getCurves:cet,getOptions:uet,setAxes:het,setCurves:fet,setOptions:pet,getConfig:oet,clear:met,setAccTitle:Lr,getAccTitle:Rr,setDiagramTitle:$r,getDiagramTitle:Ir,getAccDescription:Mr,setAccDescription:Nr}});var get,sye,oye=N(()=>{"use strict";Lp();vt();L1();ZB();get=o(t=>{Uc(t,n0);let{axes:e,curves:r,options:n}=t;n0.setAxes(e),n0.setCurves(r),n0.setOptions(n)},"populate"),sye={parse:o(async t=>{let e=await fo("radar",t);X.debug(e),get(e)},"parse")}});function wet(t,e,r,n,i,a,s){let l=e.length,u=Math.min(s.width,s.height)/2;r.forEach((h,f)=>{if(h.entries.length!==l)return;let d=h.entries.map((p,m)=>{let g=2*Math.PI*m/l-Math.PI/2,y=Tet(p,n,i,u),v=y*Math.cos(g),x=y*Math.sin(g);return{x:v,y:x}});a==="circle"?t.append("path").attr("d",ket(d,s.curveTension)).attr("class",`radarCurve-${f}`):a==="polygon"&&t.append("polygon").attr("points",d.map(p=>`${p.x},${p.y}`).join(" ")).attr("class",`radarCurve-${f}`)})}function Tet(t,e,r,n){let i=Math.min(Math.max(t,e),r);return n*(i-e)/(r-e)}function ket(t,e){let r=t.length,n=`M${t[0].x},${t[0].y}`;for(let i=0;i{let h=t.append("g").attr("transform",`translate(${i}, ${a+u*s})`);h.append("rect").attr("width",12).attr("height",12).attr("class",`radarLegendBox-${u}`),h.append("text").attr("x",16).attr("y",0).attr("class","radarLegendText").text(l.label)})}var yet,vet,xet,bet,lye,cye=N(()=>{"use strict";qc();yet=o((t,e,r,n)=>{let i=n.db,a=i.getAxes(),s=i.getCurves(),l=i.getOptions(),u=i.getConfig(),h=i.getDiagramTitle(),f=sa(e),d=vet(f,u),p=l.max??Math.max(...s.map(y=>Math.max(...y.entries))),m=l.min,g=Math.min(u.width,u.height)/2;xet(d,a,g,l.ticks,l.graticule),bet(d,a,g,u),wet(d,a,s,m,p,l.graticule,u),Eet(d,s,l.showLegend,u),d.append("text").attr("class","radarTitle").text(h).attr("x",0).attr("y",-u.height/2-u.marginTop)},"draw"),vet=o((t,e)=>{let r=e.width+e.marginLeft+e.marginRight,n=e.height+e.marginTop+e.marginBottom,i={x:e.marginLeft+e.width/2,y:e.marginTop+e.height/2};return t.attr("viewbox",`0 0 ${r} ${n}`).attr("width",r).attr("height",n),t.append("g").attr("transform",`translate(${i.x}, ${i.y})`)},"drawFrame"),xet=o((t,e,r,n,i)=>{if(i==="circle")for(let a=0;a{let d=2*f*Math.PI/a-Math.PI/2,p=l*Math.cos(d),m=l*Math.sin(d);return`${p},${m}`}).join(" ");t.append("polygon").attr("points",u).attr("class","radarGraticule")}}},"drawGraticule"),bet=o((t,e,r,n)=>{let i=e.length;for(let a=0;a{"use strict";nr();Py();Bi();Cet=o((t,e)=>{let r="";for(let n=0;nMtt});var Mtt,mve=N(()=>{"use strict";NF();cve();hve();dve();Mtt={parser:lve,db:qf,renderer:uve,styles:fve}});var vy,vve,a0,Ptt,Btt,xve,Ftt,$tt,ztt,Gtt,Vtt,Utt,Htt,s0,MF=N(()=>{"use strict";mi();_a();er();ci();vy={showLegend:!0,ticks:5,max:null,min:0,graticule:"circle"},vve={axes:[],curves:[],options:vy},a0=structuredClone(vve),Ptt=or.radar,Btt=o(()=>$n({...Ptt,...tr().radar}),"getConfig"),xve=o(()=>a0.axes,"getAxes"),Ftt=o(()=>a0.curves,"getCurves"),$tt=o(()=>a0.options,"getOptions"),ztt=o(t=>{a0.axes=t.map(e=>({name:e.name,label:e.label??e.name}))},"setAxes"),Gtt=o(t=>{a0.curves=t.map(e=>({name:e.name,label:e.label??e.name,entries:Vtt(e.entries)}))},"setCurves"),Vtt=o(t=>{if(t[0].axis==null)return t.map(r=>r.value);let e=xve();if(e.length===0)throw new Error("Axes must be populated before curves for reference entries");return e.map(r=>{let n=t.find(i=>i.axis?.$refText===r.name);if(n===void 0)throw new Error("Missing entry for axis "+r.label);return n.value})},"computeCurveEntries"),Utt=o(t=>{let e=t.reduce((r,n)=>(r[n.name]=n,r),{});a0.options={showLegend:e.showLegend?.value??vy.showLegend,ticks:e.ticks?.value??vy.ticks,max:e.max?.value??vy.max,min:e.min?.value??vy.min,graticule:e.graticule?.value??vy.graticule}},"setOptions"),Htt=o(()=>{kr(),a0=structuredClone(vve)},"clear"),s0={getAxes:xve,getCurves:Ftt,getOptions:$tt,setAxes:ztt,setCurves:Gtt,setOptions:Utt,getConfig:Btt,clear:Htt,setAccTitle:Ar,getAccTitle:Dr,setDiagramTitle:Or,getDiagramTitle:Nr,getAccDescription:Rr,setAccDescription:Lr}});var Wtt,bve,Tve=N(()=>{"use strict";bf();yt();Mp();MF();Wtt=o(t=>{Jo(t,s0);let{axes:e,curves:r,options:n}=t;s0.setAxes(e),s0.setCurves(r),s0.setOptions(n)},"populate"),bve={parse:o(async t=>{let e=await vs("radar",t);X.debug(e),Wtt(e)},"parse")}});function Ktt(t,e,r,n,i,a,s){let l=e.length,u=Math.min(s.width,s.height)/2;r.forEach((h,f)=>{if(h.entries.length!==l)return;let d=h.entries.map((p,m)=>{let g=2*Math.PI*m/l-Math.PI/2,y=Qtt(p,n,i,u),v=y*Math.cos(g),x=y*Math.sin(g);return{x:v,y:x}});a==="circle"?t.append("path").attr("d",Ztt(d,s.curveTension)).attr("class",`radarCurve-${f}`):a==="polygon"&&t.append("polygon").attr("points",d.map(p=>`${p.x},${p.y}`).join(" ")).attr("class",`radarCurve-${f}`)})}function Qtt(t,e,r,n){let i=Math.min(Math.max(t,e),r);return n*(i-e)/(r-e)}function Ztt(t,e){let r=t.length,n=`M${t[0].x},${t[0].y}`;for(let i=0;i{let h=t.append("g").attr("transform",`translate(${i}, ${a+u*s})`);h.append("rect").attr("width",12).attr("height",12).attr("class",`radarLegendBox-${u}`),h.append("text").attr("x",16).attr("y",0).attr("class","radarLegendText").text(l.label)})}var qtt,Ytt,Xtt,jtt,wve,kve=N(()=>{"use strict";Vl();qtt=o((t,e,r,n)=>{let i=n.db,a=i.getAxes(),s=i.getCurves(),l=i.getOptions(),u=i.getConfig(),h=i.getDiagramTitle(),f=Li(e),d=Ytt(f,u),p=l.max??Math.max(...s.map(y=>Math.max(...y.entries))),m=l.min,g=Math.min(u.width,u.height)/2;Xtt(d,a,g,l.ticks,l.graticule),jtt(d,a,g,u),Ktt(d,a,s,m,p,l.graticule,u),Jtt(d,s,l.showLegend,u),d.append("text").attr("class","radarTitle").text(h).attr("x",0).attr("y",-u.height/2-u.marginTop)},"draw"),Ytt=o((t,e)=>{let r=e.width+e.marginLeft+e.marginRight,n=e.height+e.marginTop+e.marginBottom,i={x:e.marginLeft+e.width/2,y:e.marginTop+e.height/2};return t.attr("viewbox",`0 0 ${r} ${n}`).attr("width",r).attr("height",n),t.append("g").attr("transform",`translate(${i.x}, ${i.y})`)},"drawFrame"),Xtt=o((t,e,r,n,i)=>{if(i==="circle")for(let a=0;a{let d=2*f*Math.PI/a-Math.PI/2,p=l*Math.cos(d),m=l*Math.sin(d);return`${p},${m}`}).join(" ");t.append("polygon").attr("points",u).attr("class","radarGraticule")}}},"drawGraticule"),jtt=o((t,e,r,n)=>{let i=e.length;for(let a=0;a{"use strict";er();By();mi();ert=o((t,e)=>{let r="";for(let n=0;n{let e=hh(),r=sr(),n=gi(e,r.themeVariables),i=gi(n.radar,t);return{themeVariables:n,radarOptions:i}},"buildRadarStyleOptions"),uye=o(({radar:t}={})=>{let{themeVariables:e,radarOptions:r}=Aet(t);return` + `}return r},"genIndexStyles"),trt=o(t=>{let e=dh(),r=tr(),n=$n(e,r.themeVariables),i=$n(n.radar,t);return{themeVariables:n,radarOptions:i}},"buildRadarStyleOptions"),Eve=o(({radar:t}={})=>{let{themeVariables:e,radarOptions:r}=trt(t);return` .radarTitle { font-size: ${e.fontSize}; color: ${e.titleColor}; @@ -2427,13 +2427,13 @@ ${g}${Math.round(L*100)/100}${y}`:I,"getText");h.append("g").attr("class","node- font-size: ${r.legendFontSize}px; dominant-baseline: hanging; } - ${Cet(e,r)} - `},"styles")});var fye={};hr(fye,{diagram:()=>_et});var _et,dye=N(()=>{"use strict";ZB();oye();cye();hye();_et={parser:sye,db:n0,renderer:lye,styles:uye}});var JB,gye,yye=N(()=>{"use strict";JB=function(){var t=o(function(w,C,T,E){for(T=T||{},E=w.length;E--;T[w[E]]=C);return T},"o"),e=[1,7],r=[1,13],n=[1,14],i=[1,15],a=[1,19],s=[1,16],l=[1,17],u=[1,18],h=[8,30],f=[8,21,28,29,30,31,32,40,44,47],d=[1,23],p=[1,24],m=[8,15,16,21,28,29,30,31,32,40,44,47],g=[8,15,16,21,27,28,29,30,31,32,40,44,47],y=[1,49],v={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,spaceLines:3,SPACELINE:4,NL:5,separator:6,SPACE:7,EOF:8,start:9,BLOCK_DIAGRAM_KEY:10,document:11,stop:12,statement:13,link:14,LINK:15,START_LINK:16,LINK_LABEL:17,STR:18,nodeStatement:19,columnsStatement:20,SPACE_BLOCK:21,blockStatement:22,classDefStatement:23,cssClassStatement:24,styleStatement:25,node:26,SIZE:27,COLUMNS:28,"id-block":29,end:30,block:31,NODE_ID:32,nodeShapeNLabel:33,dirList:34,DIR:35,NODE_DSTART:36,NODE_DEND:37,BLOCK_ARROW_START:38,BLOCK_ARROW_END:39,classDef:40,CLASSDEF_ID:41,CLASSDEF_STYLEOPTS:42,DEFAULT:43,class:44,CLASSENTITY_IDS:45,STYLECLASS:46,style:47,STYLE_ENTITY_IDS:48,STYLE_DEFINITION_DATA:49,$accept:0,$end:1},terminals_:{2:"error",4:"SPACELINE",5:"NL",7:"SPACE",8:"EOF",10:"BLOCK_DIAGRAM_KEY",15:"LINK",16:"START_LINK",17:"LINK_LABEL",18:"STR",21:"SPACE_BLOCK",27:"SIZE",28:"COLUMNS",29:"id-block",30:"end",31:"block",32:"NODE_ID",35:"DIR",36:"NODE_DSTART",37:"NODE_DEND",38:"BLOCK_ARROW_START",39:"BLOCK_ARROW_END",40:"classDef",41:"CLASSDEF_ID",42:"CLASSDEF_STYLEOPTS",43:"DEFAULT",44:"class",45:"CLASSENTITY_IDS",46:"STYLECLASS",47:"style",48:"STYLE_ENTITY_IDS",49:"STYLE_DEFINITION_DATA"},productions_:[0,[3,1],[3,2],[3,2],[6,1],[6,1],[6,1],[9,3],[12,1],[12,1],[12,2],[12,2],[11,1],[11,2],[14,1],[14,4],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[19,3],[19,2],[19,1],[20,1],[22,4],[22,3],[26,1],[26,2],[34,1],[34,2],[33,3],[33,4],[23,3],[23,3],[24,3],[25,3]],performAction:o(function(C,T,E,A,S,_,I){var L=_.length-1;switch(S){case 4:A.getLogger().debug("Rule: separator (NL) ");break;case 5:A.getLogger().debug("Rule: separator (Space) ");break;case 6:A.getLogger().debug("Rule: separator (EOF) ");break;case 7:A.getLogger().debug("Rule: hierarchy: ",_[L-1]),A.setHierarchy(_[L-1]);break;case 8:A.getLogger().debug("Stop NL ");break;case 9:A.getLogger().debug("Stop EOF ");break;case 10:A.getLogger().debug("Stop NL2 ");break;case 11:A.getLogger().debug("Stop EOF2 ");break;case 12:A.getLogger().debug("Rule: statement: ",_[L]),typeof _[L].length=="number"?this.$=_[L]:this.$=[_[L]];break;case 13:A.getLogger().debug("Rule: statement #2: ",_[L-1]),this.$=[_[L-1]].concat(_[L]);break;case 14:A.getLogger().debug("Rule: link: ",_[L],C),this.$={edgeTypeStr:_[L],label:""};break;case 15:A.getLogger().debug("Rule: LABEL link: ",_[L-3],_[L-1],_[L]),this.$={edgeTypeStr:_[L],label:_[L-1]};break;case 18:let k=parseInt(_[L]),D=A.generateId();this.$={id:D,type:"space",label:"",width:k,children:[]};break;case 23:A.getLogger().debug("Rule: (nodeStatement link node) ",_[L-2],_[L-1],_[L]," typestr: ",_[L-1].edgeTypeStr);let R=A.edgeStrToEdgeData(_[L-1].edgeTypeStr);this.$=[{id:_[L-2].id,label:_[L-2].label,type:_[L-2].type,directions:_[L-2].directions},{id:_[L-2].id+"-"+_[L].id,start:_[L-2].id,end:_[L].id,label:_[L-1].label,type:"edge",directions:_[L].directions,arrowTypeEnd:R,arrowTypeStart:"arrow_open"},{id:_[L].id,label:_[L].label,type:A.typeStr2Type(_[L].typeStr),directions:_[L].directions}];break;case 24:A.getLogger().debug("Rule: nodeStatement (abc88 node size) ",_[L-1],_[L]),this.$={id:_[L-1].id,label:_[L-1].label,type:A.typeStr2Type(_[L-1].typeStr),directions:_[L-1].directions,widthInColumns:parseInt(_[L],10)};break;case 25:A.getLogger().debug("Rule: nodeStatement (node) ",_[L]),this.$={id:_[L].id,label:_[L].label,type:A.typeStr2Type(_[L].typeStr),directions:_[L].directions,widthInColumns:1};break;case 26:A.getLogger().debug("APA123",this?this:"na"),A.getLogger().debug("COLUMNS: ",_[L]),this.$={type:"column-setting",columns:_[L]==="auto"?-1:parseInt(_[L])};break;case 27:A.getLogger().debug("Rule: id-block statement : ",_[L-2],_[L-1]);let O=A.generateId();this.$={..._[L-2],type:"composite",children:_[L-1]};break;case 28:A.getLogger().debug("Rule: blockStatement : ",_[L-2],_[L-1],_[L]);let M=A.generateId();this.$={id:M,type:"composite",label:"",children:_[L-1]};break;case 29:A.getLogger().debug("Rule: node (NODE_ID separator): ",_[L]),this.$={id:_[L]};break;case 30:A.getLogger().debug("Rule: node (NODE_ID nodeShapeNLabel separator): ",_[L-1],_[L]),this.$={id:_[L-1],label:_[L].label,typeStr:_[L].typeStr,directions:_[L].directions};break;case 31:A.getLogger().debug("Rule: dirList: ",_[L]),this.$=[_[L]];break;case 32:A.getLogger().debug("Rule: dirList: ",_[L-1],_[L]),this.$=[_[L-1]].concat(_[L]);break;case 33:A.getLogger().debug("Rule: nodeShapeNLabel: ",_[L-2],_[L-1],_[L]),this.$={typeStr:_[L-2]+_[L],label:_[L-1]};break;case 34:A.getLogger().debug("Rule: BLOCK_ARROW nodeShapeNLabel: ",_[L-3],_[L-2]," #3:",_[L-1],_[L]),this.$={typeStr:_[L-3]+_[L],label:_[L-2],directions:_[L-1]};break;case 35:case 36:this.$={type:"classDef",id:_[L-1].trim(),css:_[L].trim()};break;case 37:this.$={type:"applyClass",id:_[L-1].trim(),styleClass:_[L].trim()};break;case 38:this.$={type:"applyStyles",id:_[L-1].trim(),stylesStr:_[L].trim()};break}},"anonymous"),table:[{9:1,10:[1,2]},{1:[3]},{11:3,13:4,19:5,20:6,21:e,22:8,23:9,24:10,25:11,26:12,28:r,29:n,31:i,32:a,40:s,44:l,47:u},{8:[1,20]},t(h,[2,12],{13:4,19:5,20:6,22:8,23:9,24:10,25:11,26:12,11:21,21:e,28:r,29:n,31:i,32:a,40:s,44:l,47:u}),t(f,[2,16],{14:22,15:d,16:p}),t(f,[2,17]),t(f,[2,18]),t(f,[2,19]),t(f,[2,20]),t(f,[2,21]),t(f,[2,22]),t(m,[2,25],{27:[1,25]}),t(f,[2,26]),{19:26,26:12,32:a},{11:27,13:4,19:5,20:6,21:e,22:8,23:9,24:10,25:11,26:12,28:r,29:n,31:i,32:a,40:s,44:l,47:u},{41:[1,28],43:[1,29]},{45:[1,30]},{48:[1,31]},t(g,[2,29],{33:32,36:[1,33],38:[1,34]}),{1:[2,7]},t(h,[2,13]),{26:35,32:a},{32:[2,14]},{17:[1,36]},t(m,[2,24]),{11:37,13:4,14:22,15:d,16:p,19:5,20:6,21:e,22:8,23:9,24:10,25:11,26:12,28:r,29:n,31:i,32:a,40:s,44:l,47:u},{30:[1,38]},{42:[1,39]},{42:[1,40]},{46:[1,41]},{49:[1,42]},t(g,[2,30]),{18:[1,43]},{18:[1,44]},t(m,[2,23]),{18:[1,45]},{30:[1,46]},t(f,[2,28]),t(f,[2,35]),t(f,[2,36]),t(f,[2,37]),t(f,[2,38]),{37:[1,47]},{34:48,35:y},{15:[1,50]},t(f,[2,27]),t(g,[2,33]),{39:[1,51]},{34:52,35:y,39:[2,31]},{32:[2,15]},t(g,[2,34]),{39:[2,32]}],defaultActions:{20:[2,7],23:[2,14],50:[2,15],52:[2,32]},parseError:o(function(C,T){if(T.recoverable)this.trace(C);else{var E=new Error(C);throw E.hash=T,E}},"parseError"),parse:o(function(C){var T=this,E=[0],A=[],S=[null],_=[],I=this.table,L="",k=0,D=0,R=0,O=2,M=1,P=_.slice.call(arguments,1),B=Object.create(this.lexer),F={yy:{}};for(var z in this.yy)Object.prototype.hasOwnProperty.call(this.yy,z)&&(F.yy[z]=this.yy[z]);B.setInput(C,F.yy),F.yy.lexer=B,F.yy.parser=this,typeof B.yylloc>"u"&&(B.yylloc={});var $=B.yylloc;_.push($);var U=B.options&&B.options.ranges;typeof F.yy.parseError=="function"?this.parseError=F.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Q(se){E.length=E.length-2*se,S.length=S.length-se,_.length=_.length-se}o(Q,"popStack");function te(){var se;return se=A.pop()||B.lex()||M,typeof se!="number"&&(se instanceof Array&&(A=se,se=A.pop()),se=T.symbols_[se]||se),se}o(te,"lex");for(var Y,he,Z,ue,K,j,ne={},ee,ce,le,J;;){if(Z=E[E.length-1],this.defaultActions[Z]?ue=this.defaultActions[Z]:((Y===null||typeof Y>"u")&&(Y=te()),ue=I[Z]&&I[Z][Y]),typeof ue>"u"||!ue.length||!ue[0]){var Se="";J=[];for(ee in I[Z])this.terminals_[ee]&&ee>O&&J.push("'"+this.terminals_[ee]+"'");B.showPosition?Se="Parse error on line "+(k+1)+`: + ${ert(e,r)} + `},"styles")});var Cve={};ur(Cve,{diagram:()=>rrt});var rrt,Ave=N(()=>{"use strict";MF();Tve();kve();Sve();rrt={parser:bve,db:s0,renderer:wve,styles:Eve}});var IF,Lve,Rve=N(()=>{"use strict";IF=function(){var t=o(function(T,S,w,E){for(w=w||{},E=T.length;E--;w[T[E]]=S);return w},"o"),e=[1,7],r=[1,13],n=[1,14],i=[1,15],a=[1,19],s=[1,16],l=[1,17],u=[1,18],h=[8,30],f=[8,21,28,29,30,31,32,40,44,47],d=[1,23],p=[1,24],m=[8,15,16,21,28,29,30,31,32,40,44,47],g=[8,15,16,21,27,28,29,30,31,32,40,44,47],y=[1,49],v={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,spaceLines:3,SPACELINE:4,NL:5,separator:6,SPACE:7,EOF:8,start:9,BLOCK_DIAGRAM_KEY:10,document:11,stop:12,statement:13,link:14,LINK:15,START_LINK:16,LINK_LABEL:17,STR:18,nodeStatement:19,columnsStatement:20,SPACE_BLOCK:21,blockStatement:22,classDefStatement:23,cssClassStatement:24,styleStatement:25,node:26,SIZE:27,COLUMNS:28,"id-block":29,end:30,block:31,NODE_ID:32,nodeShapeNLabel:33,dirList:34,DIR:35,NODE_DSTART:36,NODE_DEND:37,BLOCK_ARROW_START:38,BLOCK_ARROW_END:39,classDef:40,CLASSDEF_ID:41,CLASSDEF_STYLEOPTS:42,DEFAULT:43,class:44,CLASSENTITY_IDS:45,STYLECLASS:46,style:47,STYLE_ENTITY_IDS:48,STYLE_DEFINITION_DATA:49,$accept:0,$end:1},terminals_:{2:"error",4:"SPACELINE",5:"NL",7:"SPACE",8:"EOF",10:"BLOCK_DIAGRAM_KEY",15:"LINK",16:"START_LINK",17:"LINK_LABEL",18:"STR",21:"SPACE_BLOCK",27:"SIZE",28:"COLUMNS",29:"id-block",30:"end",31:"block",32:"NODE_ID",35:"DIR",36:"NODE_DSTART",37:"NODE_DEND",38:"BLOCK_ARROW_START",39:"BLOCK_ARROW_END",40:"classDef",41:"CLASSDEF_ID",42:"CLASSDEF_STYLEOPTS",43:"DEFAULT",44:"class",45:"CLASSENTITY_IDS",46:"STYLECLASS",47:"style",48:"STYLE_ENTITY_IDS",49:"STYLE_DEFINITION_DATA"},productions_:[0,[3,1],[3,2],[3,2],[6,1],[6,1],[6,1],[9,3],[12,1],[12,1],[12,2],[12,2],[11,1],[11,2],[14,1],[14,4],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[19,3],[19,2],[19,1],[20,1],[22,4],[22,3],[26,1],[26,2],[34,1],[34,2],[33,3],[33,4],[23,3],[23,3],[24,3],[25,3]],performAction:o(function(S,w,E,_,C,D,O){var R=D.length-1;switch(C){case 4:_.getLogger().debug("Rule: separator (NL) ");break;case 5:_.getLogger().debug("Rule: separator (Space) ");break;case 6:_.getLogger().debug("Rule: separator (EOF) ");break;case 7:_.getLogger().debug("Rule: hierarchy: ",D[R-1]),_.setHierarchy(D[R-1]);break;case 8:_.getLogger().debug("Stop NL ");break;case 9:_.getLogger().debug("Stop EOF ");break;case 10:_.getLogger().debug("Stop NL2 ");break;case 11:_.getLogger().debug("Stop EOF2 ");break;case 12:_.getLogger().debug("Rule: statement: ",D[R]),typeof D[R].length=="number"?this.$=D[R]:this.$=[D[R]];break;case 13:_.getLogger().debug("Rule: statement #2: ",D[R-1]),this.$=[D[R-1]].concat(D[R]);break;case 14:_.getLogger().debug("Rule: link: ",D[R],S),this.$={edgeTypeStr:D[R],label:""};break;case 15:_.getLogger().debug("Rule: LABEL link: ",D[R-3],D[R-1],D[R]),this.$={edgeTypeStr:D[R],label:D[R-1]};break;case 18:let k=parseInt(D[R]),L=_.generateId();this.$={id:L,type:"space",label:"",width:k,children:[]};break;case 23:_.getLogger().debug("Rule: (nodeStatement link node) ",D[R-2],D[R-1],D[R]," typestr: ",D[R-1].edgeTypeStr);let A=_.edgeStrToEdgeData(D[R-1].edgeTypeStr);this.$=[{id:D[R-2].id,label:D[R-2].label,type:D[R-2].type,directions:D[R-2].directions},{id:D[R-2].id+"-"+D[R].id,start:D[R-2].id,end:D[R].id,label:D[R-1].label,type:"edge",directions:D[R].directions,arrowTypeEnd:A,arrowTypeStart:"arrow_open"},{id:D[R].id,label:D[R].label,type:_.typeStr2Type(D[R].typeStr),directions:D[R].directions}];break;case 24:_.getLogger().debug("Rule: nodeStatement (abc88 node size) ",D[R-1],D[R]),this.$={id:D[R-1].id,label:D[R-1].label,type:_.typeStr2Type(D[R-1].typeStr),directions:D[R-1].directions,widthInColumns:parseInt(D[R],10)};break;case 25:_.getLogger().debug("Rule: nodeStatement (node) ",D[R]),this.$={id:D[R].id,label:D[R].label,type:_.typeStr2Type(D[R].typeStr),directions:D[R].directions,widthInColumns:1};break;case 26:_.getLogger().debug("APA123",this?this:"na"),_.getLogger().debug("COLUMNS: ",D[R]),this.$={type:"column-setting",columns:D[R]==="auto"?-1:parseInt(D[R])};break;case 27:_.getLogger().debug("Rule: id-block statement : ",D[R-2],D[R-1]);let I=_.generateId();this.$={...D[R-2],type:"composite",children:D[R-1]};break;case 28:_.getLogger().debug("Rule: blockStatement : ",D[R-2],D[R-1],D[R]);let M=_.generateId();this.$={id:M,type:"composite",label:"",children:D[R-1]};break;case 29:_.getLogger().debug("Rule: node (NODE_ID separator): ",D[R]),this.$={id:D[R]};break;case 30:_.getLogger().debug("Rule: node (NODE_ID nodeShapeNLabel separator): ",D[R-1],D[R]),this.$={id:D[R-1],label:D[R].label,typeStr:D[R].typeStr,directions:D[R].directions};break;case 31:_.getLogger().debug("Rule: dirList: ",D[R]),this.$=[D[R]];break;case 32:_.getLogger().debug("Rule: dirList: ",D[R-1],D[R]),this.$=[D[R-1]].concat(D[R]);break;case 33:_.getLogger().debug("Rule: nodeShapeNLabel: ",D[R-2],D[R-1],D[R]),this.$={typeStr:D[R-2]+D[R],label:D[R-1]};break;case 34:_.getLogger().debug("Rule: BLOCK_ARROW nodeShapeNLabel: ",D[R-3],D[R-2]," #3:",D[R-1],D[R]),this.$={typeStr:D[R-3]+D[R],label:D[R-2],directions:D[R-1]};break;case 35:case 36:this.$={type:"classDef",id:D[R-1].trim(),css:D[R].trim()};break;case 37:this.$={type:"applyClass",id:D[R-1].trim(),styleClass:D[R].trim()};break;case 38:this.$={type:"applyStyles",id:D[R-1].trim(),stylesStr:D[R].trim()};break}},"anonymous"),table:[{9:1,10:[1,2]},{1:[3]},{11:3,13:4,19:5,20:6,21:e,22:8,23:9,24:10,25:11,26:12,28:r,29:n,31:i,32:a,40:s,44:l,47:u},{8:[1,20]},t(h,[2,12],{13:4,19:5,20:6,22:8,23:9,24:10,25:11,26:12,11:21,21:e,28:r,29:n,31:i,32:a,40:s,44:l,47:u}),t(f,[2,16],{14:22,15:d,16:p}),t(f,[2,17]),t(f,[2,18]),t(f,[2,19]),t(f,[2,20]),t(f,[2,21]),t(f,[2,22]),t(m,[2,25],{27:[1,25]}),t(f,[2,26]),{19:26,26:12,32:a},{11:27,13:4,19:5,20:6,21:e,22:8,23:9,24:10,25:11,26:12,28:r,29:n,31:i,32:a,40:s,44:l,47:u},{41:[1,28],43:[1,29]},{45:[1,30]},{48:[1,31]},t(g,[2,29],{33:32,36:[1,33],38:[1,34]}),{1:[2,7]},t(h,[2,13]),{26:35,32:a},{32:[2,14]},{17:[1,36]},t(m,[2,24]),{11:37,13:4,14:22,15:d,16:p,19:5,20:6,21:e,22:8,23:9,24:10,25:11,26:12,28:r,29:n,31:i,32:a,40:s,44:l,47:u},{30:[1,38]},{42:[1,39]},{42:[1,40]},{46:[1,41]},{49:[1,42]},t(g,[2,30]),{18:[1,43]},{18:[1,44]},t(m,[2,23]),{18:[1,45]},{30:[1,46]},t(f,[2,28]),t(f,[2,35]),t(f,[2,36]),t(f,[2,37]),t(f,[2,38]),{37:[1,47]},{34:48,35:y},{15:[1,50]},t(f,[2,27]),t(g,[2,33]),{39:[1,51]},{34:52,35:y,39:[2,31]},{32:[2,15]},t(g,[2,34]),{39:[2,32]}],defaultActions:{20:[2,7],23:[2,14],50:[2,15],52:[2,32]},parseError:o(function(S,w){if(w.recoverable)this.trace(S);else{var E=new Error(S);throw E.hash=w,E}},"parseError"),parse:o(function(S){var w=this,E=[0],_=[],C=[null],D=[],O=this.table,R="",k=0,L=0,A=0,I=2,M=1,P=D.slice.call(arguments,1),B=Object.create(this.lexer),F={yy:{}};for(var z in this.yy)Object.prototype.hasOwnProperty.call(this.yy,z)&&(F.yy[z]=this.yy[z]);B.setInput(S,F.yy),F.yy.lexer=B,F.yy.parser=this,typeof B.yylloc>"u"&&(B.yylloc={});var $=B.yylloc;D.push($);var U=B.options&&B.options.ranges;typeof F.yy.parseError=="function"?this.parseError=F.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function K(se){E.length=E.length-2*se,C.length=C.length-se,D.length=D.length-se}o(K,"popStack");function ee(){var se;return se=_.pop()||B.lex()||M,typeof se!="number"&&(se instanceof Array&&(_=se,se=_.pop()),se=w.symbols_[se]||se),se}o(ee,"lex");for(var Y,ce,Z,ue,Q,j,ne={},te,he,le,J;;){if(Z=E[E.length-1],this.defaultActions[Z]?ue=this.defaultActions[Z]:((Y===null||typeof Y>"u")&&(Y=ee()),ue=O[Z]&&O[Z][Y]),typeof ue>"u"||!ue.length||!ue[0]){var Se="";J=[];for(te in O[Z])this.terminals_[te]&&te>I&&J.push("'"+this.terminals_[te]+"'");B.showPosition?Se="Parse error on line "+(k+1)+`: `+B.showPosition()+` -Expecting `+J.join(", ")+", got '"+(this.terminals_[Y]||Y)+"'":Se="Parse error on line "+(k+1)+": Unexpected "+(Y==M?"end of input":"'"+(this.terminals_[Y]||Y)+"'"),this.parseError(Se,{text:B.match,token:this.terminals_[Y]||Y,line:B.yylineno,loc:$,expected:J})}if(ue[0]instanceof Array&&ue.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Z+", token: "+Y);switch(ue[0]){case 1:E.push(Y),S.push(B.yytext),_.push(B.yylloc),E.push(ue[1]),Y=null,he?(Y=he,he=null):(D=B.yyleng,L=B.yytext,k=B.yylineno,$=B.yylloc,R>0&&R--);break;case 2:if(ce=this.productions_[ue[1]][1],ne.$=S[S.length-ce],ne._$={first_line:_[_.length-(ce||1)].first_line,last_line:_[_.length-1].last_line,first_column:_[_.length-(ce||1)].first_column,last_column:_[_.length-1].last_column},U&&(ne._$.range=[_[_.length-(ce||1)].range[0],_[_.length-1].range[1]]),j=this.performAction.apply(ne,[L,D,k,F.yy,ue[1],S,_].concat(P)),typeof j<"u")return j;ce&&(E=E.slice(0,-1*ce*2),S=S.slice(0,-1*ce),_=_.slice(0,-1*ce)),E.push(this.productions_[ue[1]][0]),S.push(ne.$),_.push(ne._$),le=I[E[E.length-2]][E[E.length-1]],E.push(le);break;case 3:return!0}}return!0},"parse")},x=function(){var w={EOF:1,parseError:o(function(T,E){if(this.yy.parser)this.yy.parser.parseError(T,E);else throw new Error(T)},"parseError"),setInput:o(function(C,T){return this.yy=T||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},"setInput"),input:o(function(){var C=this._input[0];this.yytext+=C,this.yyleng++,this.offset++,this.match+=C,this.matched+=C;var T=C.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),C},"input"),unput:o(function(C){var T=C.length,E=C.split(/(?:\r\n?|\n)/g);this._input=C+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-T),this.offset-=T;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),E.length-1&&(this.yylineno-=E.length-1);var S=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===A.length?this.yylloc.first_column:0)+A[A.length-E.length].length-E[0].length:this.yylloc.first_column-T},this.options.ranges&&(this.yylloc.range=[S[0],S[0]+this.yyleng-T]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(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},"reject"),less:o(function(C){this.unput(this.match.slice(C))},"less"),pastInput:o(function(){var C=this.matched.substr(0,this.matched.length-this.match.length);return(C.length>20?"...":"")+C.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(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,"")},"upcomingInput"),showPosition:o(function(){var C=this.pastInput(),T=new Array(C.length+1).join("-");return C+this.upcomingInput()+` -`+T+"^"},"showPosition"),test_match:o(function(C,T){var E,A,S;if(this.options.backtrack_lexer&&(S={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&&(S.yylloc.range=this.yylloc.range.slice(0))),A=C[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+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],E=this.performAction.call(this,this.yy,this,T,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),E)return E;if(this._backtrack){for(var _ in S)this[_]=S[_];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var C,T,E,A;this._more||(this.yytext="",this.match="");for(var S=this._currentRules(),_=0;_T[0].length)){if(T=E,A=_,this.options.backtrack_lexer){if(C=this.test_match(E,S[_]),C!==!1)return C;if(this._backtrack){T=!1;continue}else return!1}else if(!this.options.flex)break}return T?(C=this.test_match(T,S[A]),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})},"next"),lex:o(function(){var T=this.next();return T||this.lex()},"lex"),begin:o(function(T){this.conditionStack.push(T)},"begin"),popState:o(function(){var T=this.conditionStack.length-1;return T>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(T){return T=this.conditionStack.length-1-Math.abs(T||0),T>=0?this.conditionStack[T]:"INITIAL"},"topState"),pushState:o(function(T){this.begin(T)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(T,E,A,S){var _=S;switch(A){case 0:return 10;case 1:return T.getLogger().debug("Found space-block"),31;break;case 2:return T.getLogger().debug("Found nl-block"),31;break;case 3:return T.getLogger().debug("Found space-block"),29;break;case 4:T.getLogger().debug(".",E.yytext);break;case 5:T.getLogger().debug("_",E.yytext);break;case 6:return 5;case 7:return E.yytext=-1,28;break;case 8:return E.yytext=E.yytext.replace(/columns\s+/,""),T.getLogger().debug("COLUMNS (LEX)",E.yytext),28;break;case 9:this.pushState("md_string");break;case 10:return"MD_STR";case 11:this.popState();break;case 12:this.pushState("string");break;case 13:T.getLogger().debug("LEX: POPPING STR:",E.yytext),this.popState();break;case 14:return T.getLogger().debug("LEX: STR end:",E.yytext),"STR";break;case 15:return E.yytext=E.yytext.replace(/space\:/,""),T.getLogger().debug("SPACE NUM (LEX)",E.yytext),21;break;case 16:return E.yytext="1",T.getLogger().debug("COLUMNS (LEX)",E.yytext),21;break;case 17:return 43;case 18:return"LINKSTYLE";case 19:return"INTERPOLATE";case 20:return this.pushState("CLASSDEF"),40;break;case 21:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";break;case 22:return this.popState(),this.pushState("CLASSDEFID"),41;break;case 23:return this.popState(),42;break;case 24:return this.pushState("CLASS"),44;break;case 25:return this.popState(),this.pushState("CLASS_STYLE"),45;break;case 26:return this.popState(),46;break;case 27:return this.pushState("STYLE_STMNT"),47;break;case 28:return this.popState(),this.pushState("STYLE_DEFINITION"),48;break;case 29:return this.popState(),49;break;case 30:return this.pushState("acc_title"),"acc_title";break;case 31:return this.popState(),"acc_title_value";break;case 32:return this.pushState("acc_descr"),"acc_descr";break;case 33:return this.popState(),"acc_descr_value";break;case 34:this.pushState("acc_descr_multiline");break;case 35:this.popState();break;case 36:return"acc_descr_multiline_value";case 37:return 30;case 38:return this.popState(),T.getLogger().debug("Lex: (("),"NODE_DEND";break;case 39:return this.popState(),T.getLogger().debug("Lex: (("),"NODE_DEND";break;case 40:return this.popState(),T.getLogger().debug("Lex: ))"),"NODE_DEND";break;case 41:return this.popState(),T.getLogger().debug("Lex: (("),"NODE_DEND";break;case 42:return this.popState(),T.getLogger().debug("Lex: (("),"NODE_DEND";break;case 43:return this.popState(),T.getLogger().debug("Lex: (-"),"NODE_DEND";break;case 44:return this.popState(),T.getLogger().debug("Lex: -)"),"NODE_DEND";break;case 45:return this.popState(),T.getLogger().debug("Lex: (("),"NODE_DEND";break;case 46:return this.popState(),T.getLogger().debug("Lex: ]]"),"NODE_DEND";break;case 47:return this.popState(),T.getLogger().debug("Lex: ("),"NODE_DEND";break;case 48:return this.popState(),T.getLogger().debug("Lex: ])"),"NODE_DEND";break;case 49:return this.popState(),T.getLogger().debug("Lex: /]"),"NODE_DEND";break;case 50:return this.popState(),T.getLogger().debug("Lex: /]"),"NODE_DEND";break;case 51:return this.popState(),T.getLogger().debug("Lex: )]"),"NODE_DEND";break;case 52:return this.popState(),T.getLogger().debug("Lex: )"),"NODE_DEND";break;case 53:return this.popState(),T.getLogger().debug("Lex: ]>"),"NODE_DEND";break;case 54:return this.popState(),T.getLogger().debug("Lex: ]"),"NODE_DEND";break;case 55:return T.getLogger().debug("Lexa: -)"),this.pushState("NODE"),36;break;case 56:return T.getLogger().debug("Lexa: (-"),this.pushState("NODE"),36;break;case 57:return T.getLogger().debug("Lexa: ))"),this.pushState("NODE"),36;break;case 58:return T.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;break;case 59:return T.getLogger().debug("Lex: ((("),this.pushState("NODE"),36;break;case 60:return T.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;break;case 61:return T.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;break;case 62:return T.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;break;case 63:return T.getLogger().debug("Lexc: >"),this.pushState("NODE"),36;break;case 64:return T.getLogger().debug("Lexa: (["),this.pushState("NODE"),36;break;case 65:return T.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;break;case 66:return this.pushState("NODE"),36;break;case 67:return this.pushState("NODE"),36;break;case 68:return this.pushState("NODE"),36;break;case 69:return this.pushState("NODE"),36;break;case 70:return this.pushState("NODE"),36;break;case 71:return this.pushState("NODE"),36;break;case 72:return this.pushState("NODE"),36;break;case 73:return T.getLogger().debug("Lexa: ["),this.pushState("NODE"),36;break;case 74:return this.pushState("BLOCK_ARROW"),T.getLogger().debug("LEX ARR START"),38;break;case 75:return T.getLogger().debug("Lex: NODE_ID",E.yytext),32;break;case 76:return T.getLogger().debug("Lex: EOF",E.yytext),8;break;case 77:this.pushState("md_string");break;case 78:this.pushState("md_string");break;case 79:return"NODE_DESCR";case 80:this.popState();break;case 81:T.getLogger().debug("Lex: Starting string"),this.pushState("string");break;case 82:T.getLogger().debug("LEX ARR: Starting string"),this.pushState("string");break;case 83:return T.getLogger().debug("LEX: NODE_DESCR:",E.yytext),"NODE_DESCR";break;case 84:T.getLogger().debug("LEX POPPING"),this.popState();break;case 85:T.getLogger().debug("Lex: =>BAE"),this.pushState("ARROW_DIR");break;case 86:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (right): dir:",E.yytext),"DIR";break;case 87:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (left):",E.yytext),"DIR";break;case 88:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (x):",E.yytext),"DIR";break;case 89:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (y):",E.yytext),"DIR";break;case 90:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (up):",E.yytext),"DIR";break;case 91:return E.yytext=E.yytext.replace(/^,\s*/,""),T.getLogger().debug("Lex (down):",E.yytext),"DIR";break;case 92:return E.yytext="]>",T.getLogger().debug("Lex (ARROW_DIR end):",E.yytext),this.popState(),this.popState(),"BLOCK_ARROW_END";break;case 93:return T.getLogger().debug("Lex: LINK","#"+E.yytext+"#"),15;break;case 94:return T.getLogger().debug("Lex: LINK",E.yytext),15;break;case 95:return T.getLogger().debug("Lex: LINK",E.yytext),15;break;case 96:return T.getLogger().debug("Lex: LINK",E.yytext),15;break;case 97:return T.getLogger().debug("Lex: START_LINK",E.yytext),this.pushState("LLABEL"),16;break;case 98:return T.getLogger().debug("Lex: START_LINK",E.yytext),this.pushState("LLABEL"),16;break;case 99:return T.getLogger().debug("Lex: START_LINK",E.yytext),this.pushState("LLABEL"),16;break;case 100:this.pushState("md_string");break;case 101:return T.getLogger().debug("Lex: Starting string"),this.pushState("string"),"LINK_LABEL";break;case 102:return this.popState(),T.getLogger().debug("Lex: LINK","#"+E.yytext+"#"),15;break;case 103:return this.popState(),T.getLogger().debug("Lex: LINK",E.yytext),15;break;case 104:return this.popState(),T.getLogger().debug("Lex: LINK",E.yytext),15;break;case 105:return T.getLogger().debug("Lex: COLON",E.yytext),E.yytext=E.yytext.slice(1),27;break}},"anonymous"),rules:[/^(?:block-beta\b)/,/^(?:block\s+)/,/^(?:block\n+)/,/^(?:block:)/,/^(?:[\s]+)/,/^(?:[\n]+)/,/^(?:((\u000D\u000A)|(\u000A)))/,/^(?:columns\s+auto\b)/,/^(?:columns\s+[\d]+)/,/^(?:["][`])/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:space[:]\d+)/,/^(?:space\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\s+)/,/^(?:DEFAULT\s+)/,/^(?:\w+\s+)/,/^(?:[^\n]*)/,/^(?:class\s+)/,/^(?:(\w+)+((,\s*\w+)*))/,/^(?:[^\n]*)/,/^(?:style\s+)/,/^(?:(\w+)+((,\s*\w+)*))/,/^(?:[^\n]*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:end\b\s*)/,/^(?:\(\(\()/,/^(?:\)\)\))/,/^(?:[\)]\))/,/^(?:\}\})/,/^(?:\})/,/^(?:\(-)/,/^(?:-\))/,/^(?:\(\()/,/^(?:\]\])/,/^(?:\()/,/^(?:\]\))/,/^(?:\\\])/,/^(?:\/\])/,/^(?:\)\])/,/^(?:[\)])/,/^(?:\]>)/,/^(?:[\]])/,/^(?:-\))/,/^(?:\(-)/,/^(?:\)\))/,/^(?:\))/,/^(?:\(\(\()/,/^(?:\(\()/,/^(?:\{\{)/,/^(?:\{)/,/^(?:>)/,/^(?:\(\[)/,/^(?:\()/,/^(?:\[\[)/,/^(?:\[\|)/,/^(?:\[\()/,/^(?:\)\)\))/,/^(?:\[\\)/,/^(?:\[\/)/,/^(?:\[\\)/,/^(?:\[)/,/^(?:<\[)/,/^(?:[^\(\[\n\-\)\{\}\s\<\>:]+)/,/^(?:$)/,/^(?:["][`])/,/^(?:["][`])/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["])/,/^(?:["])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:\]>\s*\()/,/^(?:,?\s*right\s*)/,/^(?:,?\s*left\s*)/,/^(?:,?\s*x\s*)/,/^(?:,?\s*y\s*)/,/^(?:,?\s*up\s*)/,/^(?:,?\s*down\s*)/,/^(?:\)\s*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*~~[\~]+\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:["][`])/,/^(?:["])/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?::\d+)/],conditions:{STYLE_DEFINITION:{rules:[29],inclusive:!1},STYLE_STMNT:{rules:[28],inclusive:!1},CLASSDEFID:{rules:[23],inclusive:!1},CLASSDEF:{rules:[21,22],inclusive:!1},CLASS_STYLE:{rules:[26],inclusive:!1},CLASS:{rules:[25],inclusive:!1},LLABEL:{rules:[100,101,102,103,104],inclusive:!1},ARROW_DIR:{rules:[86,87,88,89,90,91,92],inclusive:!1},BLOCK_ARROW:{rules:[77,82,85],inclusive:!1},NODE:{rules:[38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,78,81],inclusive:!1},md_string:{rules:[10,11,79,80],inclusive:!1},space:{rules:[],inclusive:!1},string:{rules:[13,14,83,84],inclusive:!1},acc_descr_multiline:{rules:[35,36],inclusive:!1},acc_descr:{rules:[33],inclusive:!1},acc_title:{rules:[31],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,12,15,16,17,18,19,20,24,27,30,32,34,37,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,93,94,95,96,97,98,99,105],inclusive:!0}}};return w}();v.lexer=x;function b(){this.yy={}}return o(b,"Parser"),b.prototype=v,v.Parser=b,new b}();JB.parser=JB;gye=JB});function Fet(t){switch(X.debug("typeStr2Type",t),t){case"[]":return"square";case"()":return X.debug("we have a round"),"round";case"(())":return"circle";case">]":return"rect_left_inv_arrow";case"{}":return"diamond";case"{{}}":return"hexagon";case"([])":return"stadium";case"[[]]":return"subroutine";case"[()]":return"cylinder";case"((()))":return"doublecircle";case"[//]":return"lean_right";case"[\\\\]":return"lean_left";case"[/\\]":return"trapezoid";case"[\\/]":return"inv_trapezoid";case"<[]>":return"block_arrow";default:return"na"}}function $et(t){switch(X.debug("typeStr2Type",t),t){case"==":return"thick";default:return"normal"}}function zet(t){switch(t.trim()){case"--x":return"arrow_cross";case"--o":return"arrow_circle";default:return"arrow_point"}}var Wl,tF,eF,vye,xye,Ret,wye,Net,sC,Met,Iet,Oet,Pet,Tye,rF,E4,Bet,bye,Get,Vet,Uet,Het,Wet,qet,Yet,Xet,jet,Ket,Qet,kye,Eye=N(()=>{"use strict";wL();Bi();zt();vt();dr();mi();Wl=new Map,tF=[],eF=new Map,vye="color",xye="fill",Ret="bgFill",wye=",",Net=me(),sC=new Map,Met=o(t=>Ze.sanitizeText(t,Net),"sanitizeText"),Iet=o(function(t,e=""){let r=sC.get(t);r||(r={id:t,styles:[],textStyles:[]},sC.set(t,r)),e?.split(wye).forEach(n=>{let i=n.replace(/([^;]*);/,"$1").trim();if(RegExp(vye).exec(n)){let s=i.replace(xye,Ret).replace(vye,xye);r.textStyles.push(s)}r.styles.push(i)})},"addStyleClass"),Oet=o(function(t,e=""){let r=Wl.get(t);e!=null&&(r.styles=e.split(wye))},"addStyle2Node"),Pet=o(function(t,e){t.split(",").forEach(function(r){let n=Wl.get(r);if(n===void 0){let i=r.trim();n={id:i,type:"na",children:[]},Wl.set(i,n)}n.classes||(n.classes=[]),n.classes.push(e)})},"setCssClass"),Tye=o((t,e)=>{let r=t.flat(),n=[];for(let i of r){if(i.label&&(i.label=Met(i.label)),i.type==="classDef"){Iet(i.id,i.css);continue}if(i.type==="applyClass"){Pet(i.id,i?.styleClass??"");continue}if(i.type==="applyStyles"){i?.stylesStr&&Oet(i.id,i?.stylesStr);continue}if(i.type==="column-setting")e.columns=i.columns??-1;else if(i.type==="edge"){let a=(eF.get(i.id)??0)+1;eF.set(i.id,a),i.id=a+"-"+i.id,tF.push(i)}else{i.label||(i.type==="composite"?i.label="":i.label=i.id);let a=Wl.get(i.id);if(a===void 0?Wl.set(i.id,i):(i.type!=="na"&&(a.type=i.type),i.label!==i.id&&(a.label=i.label)),i.children&&Tye(i.children,i),i.type==="space"){let s=i.width??1;for(let l=0;l{X.debug("Clear called"),Ar(),E4={id:"root",type:"composite",children:[],columns:-1},Wl=new Map([["root",E4]]),rF=[],sC=new Map,tF=[],eF=new Map},"clear");o(Fet,"typeStr2Type");o($et,"edgeTypeStr2Type");o(zet,"edgeStrToEdgeData");bye=0,Get=o(()=>(bye++,"id-"+Math.random().toString(36).substr(2,12)+"-"+bye),"generateId"),Vet=o(t=>{E4.children=t,Tye(t,E4),rF=E4.children},"setHierarchy"),Uet=o(t=>{let e=Wl.get(t);return e?e.columns?e.columns:e.children?e.children.length:-1:-1},"getColumns"),Het=o(()=>[...Wl.values()],"getBlocksFlat"),Wet=o(()=>rF||[],"getBlocks"),qet=o(()=>tF,"getEdges"),Yet=o(t=>Wl.get(t),"getBlock"),Xet=o(t=>{Wl.set(t.id,t)},"setBlock"),jet=o(()=>console,"getLogger"),Ket=o(function(){return sC},"getClasses"),Qet={getConfig:o(()=>sr().block,"getConfig"),typeStr2Type:Fet,edgeTypeStr2Type:$et,edgeStrToEdgeData:zet,getLogger:jet,getBlocksFlat:Het,getBlocks:Wet,getEdges:qet,setHierarchy:Vet,getBlock:Yet,setBlock:Xet,getColumns:Uet,getClasses:Ket,clear:Bet,generateId:Get},kye=Qet});var oC,Zet,Sye,Cye=N(()=>{"use strict";js();Ym();oC=o((t,e)=>{let r=rd,n=r(t,"r"),i=r(t,"g"),a=r(t,"b");return qa(n,i,a,e)},"fade"),Zet=o(t=>`.label { +Expecting `+J.join(", ")+", got '"+(this.terminals_[Y]||Y)+"'":Se="Parse error on line "+(k+1)+": Unexpected "+(Y==M?"end of input":"'"+(this.terminals_[Y]||Y)+"'"),this.parseError(Se,{text:B.match,token:this.terminals_[Y]||Y,line:B.yylineno,loc:$,expected:J})}if(ue[0]instanceof Array&&ue.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Z+", token: "+Y);switch(ue[0]){case 1:E.push(Y),C.push(B.yytext),D.push(B.yylloc),E.push(ue[1]),Y=null,ce?(Y=ce,ce=null):(L=B.yyleng,R=B.yytext,k=B.yylineno,$=B.yylloc,A>0&&A--);break;case 2:if(he=this.productions_[ue[1]][1],ne.$=C[C.length-he],ne._$={first_line:D[D.length-(he||1)].first_line,last_line:D[D.length-1].last_line,first_column:D[D.length-(he||1)].first_column,last_column:D[D.length-1].last_column},U&&(ne._$.range=[D[D.length-(he||1)].range[0],D[D.length-1].range[1]]),j=this.performAction.apply(ne,[R,L,k,F.yy,ue[1],C,D].concat(P)),typeof j<"u")return j;he&&(E=E.slice(0,-1*he*2),C=C.slice(0,-1*he),D=D.slice(0,-1*he)),E.push(this.productions_[ue[1]][0]),C.push(ne.$),D.push(ne._$),le=O[E[E.length-2]][E[E.length-1]],E.push(le);break;case 3:return!0}}return!0},"parse")},x=function(){var T={EOF:1,parseError:o(function(w,E){if(this.yy.parser)this.yy.parser.parseError(w,E);else throw new Error(w)},"parseError"),setInput:o(function(S,w){return this.yy=w||this.yy||{},this._input=S,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},"setInput"),input:o(function(){var S=this._input[0];this.yytext+=S,this.yyleng++,this.offset++,this.match+=S,this.matched+=S;var w=S.match(/(?:\r\n?|\n).*/g);return w?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),S},"input"),unput:o(function(S){var w=S.length,E=S.split(/(?:\r\n?|\n)/g);this._input=S+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-w),this.offset-=w;var _=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 C=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===_.length?this.yylloc.first_column:0)+_[_.length-E.length].length-E[0].length:this.yylloc.first_column-w},this.options.ranges&&(this.yylloc.range=[C[0],C[0]+this.yyleng-w]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(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},"reject"),less:o(function(S){this.unput(this.match.slice(S))},"less"),pastInput:o(function(){var S=this.matched.substr(0,this.matched.length-this.match.length);return(S.length>20?"...":"")+S.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var S=this.match;return S.length<20&&(S+=this._input.substr(0,20-S.length)),(S.substr(0,20)+(S.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var S=this.pastInput(),w=new Array(S.length+1).join("-");return S+this.upcomingInput()+` +`+w+"^"},"showPosition"),test_match:o(function(S,w){var E,_,C;if(this.options.backtrack_lexer&&(C={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&&(C.yylloc.range=this.yylloc.range.slice(0))),_=S[0].match(/(?:\r\n?|\n).*/g),_&&(this.yylineno+=_.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:_?_[_.length-1].length-_[_.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+S[0].length},this.yytext+=S[0],this.match+=S[0],this.matches=S,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(S[0].length),this.matched+=S[0],E=this.performAction.call(this,this.yy,this,w,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),E)return E;if(this._backtrack){for(var D in C)this[D]=C[D];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var S,w,E,_;this._more||(this.yytext="",this.match="");for(var C=this._currentRules(),D=0;Dw[0].length)){if(w=E,_=D,this.options.backtrack_lexer){if(S=this.test_match(E,C[D]),S!==!1)return S;if(this._backtrack){w=!1;continue}else return!1}else if(!this.options.flex)break}return w?(S=this.test_match(w,C[_]),S!==!1?S:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var w=this.next();return w||this.lex()},"lex"),begin:o(function(w){this.conditionStack.push(w)},"begin"),popState:o(function(){var w=this.conditionStack.length-1;return w>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(w){return w=this.conditionStack.length-1-Math.abs(w||0),w>=0?this.conditionStack[w]:"INITIAL"},"topState"),pushState:o(function(w){this.begin(w)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(w,E,_,C){var D=C;switch(_){case 0:return 10;case 1:return w.getLogger().debug("Found space-block"),31;break;case 2:return w.getLogger().debug("Found nl-block"),31;break;case 3:return w.getLogger().debug("Found space-block"),29;break;case 4:w.getLogger().debug(".",E.yytext);break;case 5:w.getLogger().debug("_",E.yytext);break;case 6:return 5;case 7:return E.yytext=-1,28;break;case 8:return E.yytext=E.yytext.replace(/columns\s+/,""),w.getLogger().debug("COLUMNS (LEX)",E.yytext),28;break;case 9:this.pushState("md_string");break;case 10:return"MD_STR";case 11:this.popState();break;case 12:this.pushState("string");break;case 13:w.getLogger().debug("LEX: POPPING STR:",E.yytext),this.popState();break;case 14:return w.getLogger().debug("LEX: STR end:",E.yytext),"STR";break;case 15:return E.yytext=E.yytext.replace(/space\:/,""),w.getLogger().debug("SPACE NUM (LEX)",E.yytext),21;break;case 16:return E.yytext="1",w.getLogger().debug("COLUMNS (LEX)",E.yytext),21;break;case 17:return 43;case 18:return"LINKSTYLE";case 19:return"INTERPOLATE";case 20:return this.pushState("CLASSDEF"),40;break;case 21:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";break;case 22:return this.popState(),this.pushState("CLASSDEFID"),41;break;case 23:return this.popState(),42;break;case 24:return this.pushState("CLASS"),44;break;case 25:return this.popState(),this.pushState("CLASS_STYLE"),45;break;case 26:return this.popState(),46;break;case 27:return this.pushState("STYLE_STMNT"),47;break;case 28:return this.popState(),this.pushState("STYLE_DEFINITION"),48;break;case 29:return this.popState(),49;break;case 30:return this.pushState("acc_title"),"acc_title";break;case 31:return this.popState(),"acc_title_value";break;case 32:return this.pushState("acc_descr"),"acc_descr";break;case 33:return this.popState(),"acc_descr_value";break;case 34:this.pushState("acc_descr_multiline");break;case 35:this.popState();break;case 36:return"acc_descr_multiline_value";case 37:return 30;case 38:return this.popState(),w.getLogger().debug("Lex: (("),"NODE_DEND";break;case 39:return this.popState(),w.getLogger().debug("Lex: (("),"NODE_DEND";break;case 40:return this.popState(),w.getLogger().debug("Lex: ))"),"NODE_DEND";break;case 41:return this.popState(),w.getLogger().debug("Lex: (("),"NODE_DEND";break;case 42:return this.popState(),w.getLogger().debug("Lex: (("),"NODE_DEND";break;case 43:return this.popState(),w.getLogger().debug("Lex: (-"),"NODE_DEND";break;case 44:return this.popState(),w.getLogger().debug("Lex: -)"),"NODE_DEND";break;case 45:return this.popState(),w.getLogger().debug("Lex: (("),"NODE_DEND";break;case 46:return this.popState(),w.getLogger().debug("Lex: ]]"),"NODE_DEND";break;case 47:return this.popState(),w.getLogger().debug("Lex: ("),"NODE_DEND";break;case 48:return this.popState(),w.getLogger().debug("Lex: ])"),"NODE_DEND";break;case 49:return this.popState(),w.getLogger().debug("Lex: /]"),"NODE_DEND";break;case 50:return this.popState(),w.getLogger().debug("Lex: /]"),"NODE_DEND";break;case 51:return this.popState(),w.getLogger().debug("Lex: )]"),"NODE_DEND";break;case 52:return this.popState(),w.getLogger().debug("Lex: )"),"NODE_DEND";break;case 53:return this.popState(),w.getLogger().debug("Lex: ]>"),"NODE_DEND";break;case 54:return this.popState(),w.getLogger().debug("Lex: ]"),"NODE_DEND";break;case 55:return w.getLogger().debug("Lexa: -)"),this.pushState("NODE"),36;break;case 56:return w.getLogger().debug("Lexa: (-"),this.pushState("NODE"),36;break;case 57:return w.getLogger().debug("Lexa: ))"),this.pushState("NODE"),36;break;case 58:return w.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;break;case 59:return w.getLogger().debug("Lex: ((("),this.pushState("NODE"),36;break;case 60:return w.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;break;case 61:return w.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;break;case 62:return w.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;break;case 63:return w.getLogger().debug("Lexc: >"),this.pushState("NODE"),36;break;case 64:return w.getLogger().debug("Lexa: (["),this.pushState("NODE"),36;break;case 65:return w.getLogger().debug("Lexa: )"),this.pushState("NODE"),36;break;case 66:return this.pushState("NODE"),36;break;case 67:return this.pushState("NODE"),36;break;case 68:return this.pushState("NODE"),36;break;case 69:return this.pushState("NODE"),36;break;case 70:return this.pushState("NODE"),36;break;case 71:return this.pushState("NODE"),36;break;case 72:return this.pushState("NODE"),36;break;case 73:return w.getLogger().debug("Lexa: ["),this.pushState("NODE"),36;break;case 74:return this.pushState("BLOCK_ARROW"),w.getLogger().debug("LEX ARR START"),38;break;case 75:return w.getLogger().debug("Lex: NODE_ID",E.yytext),32;break;case 76:return w.getLogger().debug("Lex: EOF",E.yytext),8;break;case 77:this.pushState("md_string");break;case 78:this.pushState("md_string");break;case 79:return"NODE_DESCR";case 80:this.popState();break;case 81:w.getLogger().debug("Lex: Starting string"),this.pushState("string");break;case 82:w.getLogger().debug("LEX ARR: Starting string"),this.pushState("string");break;case 83:return w.getLogger().debug("LEX: NODE_DESCR:",E.yytext),"NODE_DESCR";break;case 84:w.getLogger().debug("LEX POPPING"),this.popState();break;case 85:w.getLogger().debug("Lex: =>BAE"),this.pushState("ARROW_DIR");break;case 86:return E.yytext=E.yytext.replace(/^,\s*/,""),w.getLogger().debug("Lex (right): dir:",E.yytext),"DIR";break;case 87:return E.yytext=E.yytext.replace(/^,\s*/,""),w.getLogger().debug("Lex (left):",E.yytext),"DIR";break;case 88:return E.yytext=E.yytext.replace(/^,\s*/,""),w.getLogger().debug("Lex (x):",E.yytext),"DIR";break;case 89:return E.yytext=E.yytext.replace(/^,\s*/,""),w.getLogger().debug("Lex (y):",E.yytext),"DIR";break;case 90:return E.yytext=E.yytext.replace(/^,\s*/,""),w.getLogger().debug("Lex (up):",E.yytext),"DIR";break;case 91:return E.yytext=E.yytext.replace(/^,\s*/,""),w.getLogger().debug("Lex (down):",E.yytext),"DIR";break;case 92:return E.yytext="]>",w.getLogger().debug("Lex (ARROW_DIR end):",E.yytext),this.popState(),this.popState(),"BLOCK_ARROW_END";break;case 93:return w.getLogger().debug("Lex: LINK","#"+E.yytext+"#"),15;break;case 94:return w.getLogger().debug("Lex: LINK",E.yytext),15;break;case 95:return w.getLogger().debug("Lex: LINK",E.yytext),15;break;case 96:return w.getLogger().debug("Lex: LINK",E.yytext),15;break;case 97:return w.getLogger().debug("Lex: START_LINK",E.yytext),this.pushState("LLABEL"),16;break;case 98:return w.getLogger().debug("Lex: START_LINK",E.yytext),this.pushState("LLABEL"),16;break;case 99:return w.getLogger().debug("Lex: START_LINK",E.yytext),this.pushState("LLABEL"),16;break;case 100:this.pushState("md_string");break;case 101:return w.getLogger().debug("Lex: Starting string"),this.pushState("string"),"LINK_LABEL";break;case 102:return this.popState(),w.getLogger().debug("Lex: LINK","#"+E.yytext+"#"),15;break;case 103:return this.popState(),w.getLogger().debug("Lex: LINK",E.yytext),15;break;case 104:return this.popState(),w.getLogger().debug("Lex: LINK",E.yytext),15;break;case 105:return w.getLogger().debug("Lex: COLON",E.yytext),E.yytext=E.yytext.slice(1),27;break}},"anonymous"),rules:[/^(?:block-beta\b)/,/^(?:block\s+)/,/^(?:block\n+)/,/^(?:block:)/,/^(?:[\s]+)/,/^(?:[\n]+)/,/^(?:((\u000D\u000A)|(\u000A)))/,/^(?:columns\s+auto\b)/,/^(?:columns\s+[\d]+)/,/^(?:["][`])/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:space[:]\d+)/,/^(?:space\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\s+)/,/^(?:DEFAULT\s+)/,/^(?:\w+\s+)/,/^(?:[^\n]*)/,/^(?:class\s+)/,/^(?:(\w+)+((,\s*\w+)*))/,/^(?:[^\n]*)/,/^(?:style\s+)/,/^(?:(\w+)+((,\s*\w+)*))/,/^(?:[^\n]*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:end\b\s*)/,/^(?:\(\(\()/,/^(?:\)\)\))/,/^(?:[\)]\))/,/^(?:\}\})/,/^(?:\})/,/^(?:\(-)/,/^(?:-\))/,/^(?:\(\()/,/^(?:\]\])/,/^(?:\()/,/^(?:\]\))/,/^(?:\\\])/,/^(?:\/\])/,/^(?:\)\])/,/^(?:[\)])/,/^(?:\]>)/,/^(?:[\]])/,/^(?:-\))/,/^(?:\(-)/,/^(?:\)\))/,/^(?:\))/,/^(?:\(\(\()/,/^(?:\(\()/,/^(?:\{\{)/,/^(?:\{)/,/^(?:>)/,/^(?:\(\[)/,/^(?:\()/,/^(?:\[\[)/,/^(?:\[\|)/,/^(?:\[\()/,/^(?:\)\)\))/,/^(?:\[\\)/,/^(?:\[\/)/,/^(?:\[\\)/,/^(?:\[)/,/^(?:<\[)/,/^(?:[^\(\[\n\-\)\{\}\s\<\>:]+)/,/^(?:$)/,/^(?:["][`])/,/^(?:["][`])/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["])/,/^(?:["])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:\]>\s*\()/,/^(?:,?\s*right\s*)/,/^(?:,?\s*left\s*)/,/^(?:,?\s*x\s*)/,/^(?:,?\s*y\s*)/,/^(?:,?\s*up\s*)/,/^(?:,?\s*down\s*)/,/^(?:\)\s*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*~~[\~]+\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:["][`])/,/^(?:["])/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?::\d+)/],conditions:{STYLE_DEFINITION:{rules:[29],inclusive:!1},STYLE_STMNT:{rules:[28],inclusive:!1},CLASSDEFID:{rules:[23],inclusive:!1},CLASSDEF:{rules:[21,22],inclusive:!1},CLASS_STYLE:{rules:[26],inclusive:!1},CLASS:{rules:[25],inclusive:!1},LLABEL:{rules:[100,101,102,103,104],inclusive:!1},ARROW_DIR:{rules:[86,87,88,89,90,91,92],inclusive:!1},BLOCK_ARROW:{rules:[77,82,85],inclusive:!1},NODE:{rules:[38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,78,81],inclusive:!1},md_string:{rules:[10,11,79,80],inclusive:!1},space:{rules:[],inclusive:!1},string:{rules:[13,14,83,84],inclusive:!1},acc_descr_multiline:{rules:[35,36],inclusive:!1},acc_descr:{rules:[33],inclusive:!1},acc_title:{rules:[31],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,12,15,16,17,18,19,20,24,27,30,32,34,37,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,93,94,95,96,97,98,99,105],inclusive:!0}}};return T}();v.lexer=x;function b(){this.yy={}}return o(b,"Parser"),b.prototype=v,v.Parser=b,new b}();IF.parser=IF;Lve=IF});function frt(t){switch(X.debug("typeStr2Type",t),t){case"[]":return"square";case"()":return X.debug("we have a round"),"round";case"(())":return"circle";case">]":return"rect_left_inv_arrow";case"{}":return"diamond";case"{{}}":return"hexagon";case"([])":return"stadium";case"[[]]":return"subroutine";case"[()]":return"cylinder";case"((()))":return"doublecircle";case"[//]":return"lean_right";case"[\\\\]":return"lean_left";case"[/\\]":return"trapezoid";case"[\\/]":return"inv_trapezoid";case"<[]>":return"block_arrow";default:return"na"}}function drt(t){switch(X.debug("typeStr2Type",t),t){case"==":return"thick";default:return"normal"}}function prt(t){switch(t.trim()){case"--x":return"arrow_cross";case"--o":return"arrow_circle";default:return"arrow_point"}}var Yl,PF,OF,Nve,Mve,art,Ove,srt,bC,ort,lrt,crt,urt,Pve,BF,_4,hrt,Ive,mrt,grt,yrt,vrt,xrt,brt,Trt,wrt,krt,Ert,Srt,Bve,Fve=N(()=>{"use strict";JL();mi();Gt();yt();pr();ci();Yl=new Map,PF=[],OF=new Map,Nve="color",Mve="fill",art="bgFill",Ove=",",srt=me(),bC=new Map,ort=o(t=>Ze.sanitizeText(t,srt),"sanitizeText"),lrt=o(function(t,e=""){let r=bC.get(t);r||(r={id:t,styles:[],textStyles:[]},bC.set(t,r)),e?.split(Ove).forEach(n=>{let i=n.replace(/([^;]*);/,"$1").trim();if(RegExp(Nve).exec(n)){let s=i.replace(Mve,art).replace(Nve,Mve);r.textStyles.push(s)}r.styles.push(i)})},"addStyleClass"),crt=o(function(t,e=""){let r=Yl.get(t);e!=null&&(r.styles=e.split(Ove))},"addStyle2Node"),urt=o(function(t,e){t.split(",").forEach(function(r){let n=Yl.get(r);if(n===void 0){let i=r.trim();n={id:i,type:"na",children:[]},Yl.set(i,n)}n.classes||(n.classes=[]),n.classes.push(e)})},"setCssClass"),Pve=o((t,e)=>{let r=t.flat(),n=[];for(let i of r){if(i.label&&(i.label=ort(i.label)),i.type==="classDef"){lrt(i.id,i.css);continue}if(i.type==="applyClass"){urt(i.id,i?.styleClass??"");continue}if(i.type==="applyStyles"){i?.stylesStr&&crt(i.id,i?.stylesStr);continue}if(i.type==="column-setting")e.columns=i.columns??-1;else if(i.type==="edge"){let a=(OF.get(i.id)??0)+1;OF.set(i.id,a),i.id=a+"-"+i.id,PF.push(i)}else{i.label||(i.type==="composite"?i.label="":i.label=i.id);let a=Yl.get(i.id);if(a===void 0?Yl.set(i.id,i):(i.type!=="na"&&(a.type=i.type),i.label!==i.id&&(a.label=i.label)),i.children&&Pve(i.children,i),i.type==="space"){let s=i.width??1;for(let l=0;l{X.debug("Clear called"),kr(),_4={id:"root",type:"composite",children:[],columns:-1},Yl=new Map([["root",_4]]),BF=[],bC=new Map,PF=[],OF=new Map},"clear");o(frt,"typeStr2Type");o(drt,"edgeTypeStr2Type");o(prt,"edgeStrToEdgeData");Ive=0,mrt=o(()=>(Ive++,"id-"+Math.random().toString(36).substr(2,12)+"-"+Ive),"generateId"),grt=o(t=>{_4.children=t,Pve(t,_4),BF=_4.children},"setHierarchy"),yrt=o(t=>{let e=Yl.get(t);return e?e.columns?e.columns:e.children?e.children.length:-1:-1},"getColumns"),vrt=o(()=>[...Yl.values()],"getBlocksFlat"),xrt=o(()=>BF||[],"getBlocks"),brt=o(()=>PF,"getEdges"),Trt=o(t=>Yl.get(t),"getBlock"),wrt=o(t=>{Yl.set(t.id,t)},"setBlock"),krt=o(()=>X,"getLogger"),Ert=o(function(){return bC},"getClasses"),Srt={getConfig:o(()=>tr().block,"getConfig"),typeStr2Type:frt,edgeTypeStr2Type:drt,edgeStrToEdgeData:prt,getLogger:krt,getBlocksFlat:vrt,getBlocks:xrt,getEdges:brt,setHierarchy:grt,getBlock:Trt,setBlock:wrt,getColumns:yrt,getClasses:Ert,clear:hrt,generateId:mrt},Bve=Srt});var TC,Crt,$ve,zve=N(()=>{"use strict";Ks();Xm();TC=o((t,e)=>{let r=id,n=r(t,"r"),i=r(t,"g"),a=r(t,"b");return Qa(n,i,a,e)},"fade"),Crt=o(t=>`.label { font-family: ${t.fontFamily}; color: ${t.nodeTextColor||t.textColor}; } @@ -2503,14 +2503,14 @@ Expecting `+J.join(", ")+", got '"+(this.terminals_[Y]||Y)+"'":Se="Parse error o /* For html labels only */ .labelBkg { - background-color: ${oC(t.edgeLabelBackground,.5)}; + background-color: ${TC(t.edgeLabelBackground,.5)}; // background-color: } .node .cluster { - // fill: ${oC(t.mainBkg,.5)}; - fill: ${oC(t.clusterBkg,.5)}; - stroke: ${oC(t.clusterBorder,.2)}; + // fill: ${TC(t.mainBkg,.5)}; + fill: ${TC(t.clusterBkg,.5)}; + stroke: ${TC(t.clusterBorder,.2)}; box-shadow: rgba(50, 50, 93, 0.25) 0px 13px 27px -5px, rgba(0, 0, 0, 0.3) 0px 8px 16px -8px; stroke-width: 1px; } @@ -2545,11 +2545,11 @@ Expecting `+J.join(", ")+", got '"+(this.terminals_[Y]||Y)+"'":Se="Parse error o font-size: 18px; fill: ${t.textColor}; } - ${Lc()} -`,"getStyles"),Sye=Zet});var Jet,ett,ttt,rtt,ntt,itt,att,stt,ott,ltt,ctt,Aye,_ye=N(()=>{"use strict";vt();Jet=o((t,e,r,n)=>{e.forEach(i=>{ctt[i](t,r,n)})},"insertMarkers"),ett=o((t,e,r)=>{X.trace("Making markers for ",r),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionStart").attr("class","marker extension "+e).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"),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionEnd").attr("class","marker extension "+e).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")},"extension"),ttt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionStart").attr("class","marker composition "+e).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"),t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionEnd").attr("class","marker composition "+e).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")},"composition"),rtt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationStart").attr("class","marker aggregation "+e).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"),t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationEnd").attr("class","marker aggregation "+e).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"),ntt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyStart").attr("class","marker dependency "+e).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"),t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyEnd").attr("class","marker dependency "+e).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")},"dependency"),itt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopStart").attr("class","marker lollipop "+e).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),t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopEnd").attr("class","marker lollipop "+e).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)},"lollipop"),att=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-pointEnd").attr("class","marker "+e).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"),t.append("marker").attr("id",r+"_"+e+"-pointStart").attr("class","marker "+e).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")},"point"),stt=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-circleEnd").attr("class","marker "+e).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"),t.append("marker").attr("id",r+"_"+e+"-circleStart").attr("class","marker "+e).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")},"circle"),ott=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-crossEnd").attr("class","marker cross "+e).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"),t.append("marker").attr("id",r+"_"+e+"-crossStart").attr("class","marker cross "+e).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")},"cross"),ltt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-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")},"barb"),ctt={extension:ett,composition:ttt,aggregation:rtt,dependency:ntt,lollipop:itt,point:att,circle:stt,cross:ott,barb:ltt},Aye=Jet});function utt(t,e){if(t===0||!Number.isInteger(t))throw new Error("Columns must be an integer !== 0.");if(e<0||!Number.isInteger(e))throw new Error("Position must be a non-negative integer."+e);if(t<0)return{px:e,py:0};if(t===1)return{px:0,py:e};let r=e%t,n=Math.floor(e/t);return{px:r,py:n}}function nF(t,e,r=0,n=0){X.debug("setBlockSizes abc95 (start)",t.id,t?.size?.x,"block width =",t?.size,"siblingWidth",r),t?.size?.width||(t.size={width:r,height:n,x:0,y:0});let i=0,a=0;if(t.children?.length>0){for(let m of t.children)nF(m,e);let s=htt(t);i=s.width,a=s.height,X.debug("setBlockSizes abc95 maxWidth of",t.id,":s children is ",i,a);for(let m of t.children)m.size&&(X.debug(`abc95 Setting size of children of ${t.id} id=${m.id} ${i} ${a} ${JSON.stringify(m.size)}`),m.size.width=i*(m.widthInColumns??1)+wi*((m.widthInColumns??1)-1),m.size.height=a,m.size.x=0,m.size.y=0,X.debug(`abc95 updating size of ${t.id} children child:${m.id} maxWidth:${i} maxHeight:${a}`));for(let m of t.children)nF(m,e,i,a);let l=t.columns??-1,u=0;for(let m of t.children)u+=m.widthInColumns??1;let h=t.children.length;l>0&&l0?Math.min(t.children.length,l):t.children.length;if(m>0){let g=(d-m*wi-wi)/m;X.debug("abc95 (growing to fit) width",t.id,d,t.size?.width,g);for(let y of t.children)y.size&&(y.size.width=g)}}t.size={width:d,height:p,x:0,y:0}}X.debug("setBlockSizes abc94 (done)",t.id,t?.size?.x,t?.size?.width,t?.size?.y,t?.size?.height)}function Dye(t,e){X.debug(`abc85 layout blocks (=>layoutBlocks) ${t.id} x: ${t?.size?.x} y: ${t?.size?.y} width: ${t?.size?.width}`);let r=t.columns??-1;if(X.debug("layoutBlocks columns abc95",t.id,"=>",r,t),t.children&&t.children.length>0){let n=t?.children[0]?.size?.width??0,i=t.children.length*n+(t.children.length-1)*wi;X.debug("widthOfChildren 88",i,"posX");let a=0;X.debug("abc91 block?.size?.x",t.id,t?.size?.x);let s=t?.size?.x?t?.size?.x+(-t?.size?.width/2||0):-wi,l=0;for(let u of t.children){let h=t;if(!u.size)continue;let{width:f,height:d}=u.size,{px:p,py:m}=utt(r,a);if(m!=l&&(l=m,s=t?.size?.x?t?.size?.x+(-t?.size?.width/2||0):-wi,X.debug("New row in layout for block",t.id," and child ",u.id,l)),X.debug(`abc89 layout blocks (child) id: ${u.id} Pos: ${a} (px, py) ${p},${m} (${h?.size?.x},${h?.size?.y}) parent: ${h.id} width: ${f}${wi}`),h.size){let g=f/2;u.size.x=s+wi+g,X.debug(`abc91 layout blocks (calc) px, pyid:${u.id} startingPos=X${s} new startingPosX${u.size.x} ${g} padding=${wi} width=${f} halfWidth=${g} => x:${u.size.x} y:${u.size.y} ${u.widthInColumns} (width * (child?.w || 1)) / 2 ${f*(u?.widthInColumns??1)/2}`),s=u.size.x+g,u.size.y=h.size.y-h.size.height/2+m*(d+wi)+d/2+wi,X.debug(`abc88 layout blocks (calc) px, pyid:${u.id}startingPosX${s}${wi}${g}=>x:${u.size.x}y:${u.size.y}${u.widthInColumns}(width * (child?.w || 1)) / 2${f*(u?.widthInColumns??1)/2}`)}u.children&&Dye(u,e),a+=u?.widthInColumns??1,X.debug("abc88 columnsPos",u,a)}}X.debug(`layout blocks (<==layoutBlocks) ${t.id} x: ${t?.size?.x} y: ${t?.size?.y} width: ${t?.size?.width}`)}function Lye(t,{minX:e,minY:r,maxX:n,maxY:i}={minX:0,minY:0,maxX:0,maxY:0}){if(t.size&&t.id!=="root"){let{x:a,y:s,width:l,height:u}=t.size;a-l/2n&&(n=a+l/2),s+u/2>i&&(i=s+u/2)}if(t.children)for(let a of t.children)({minX:e,minY:r,maxX:n,maxY:i}=Lye(a,{minX:e,minY:r,maxX:n,maxY:i}));return{minX:e,minY:r,maxX:n,maxY:i}}function Rye(t){let e=t.getBlock("root");if(!e)return;nF(e,t,0,0),Dye(e,t),X.debug("getBlocks",JSON.stringify(e,null,2));let{minX:r,minY:n,maxX:i,maxY:a}=Lye(e),s=a-n,l=i-r;return{x:r,y:n,width:l,height:s}}var wi,htt,Nye=N(()=>{"use strict";vt();zt();wi=me()?.block?.padding??8;o(utt,"calculateBlockPosition");htt=o(t=>{let e=0,r=0;for(let n of t.children){let{width:i,height:a,x:s,y:l}=n.size??{width:0,height:0,x:0,y:0};X.debug("getMaxChildSize abc95 child:",n.id,"width:",i,"height:",a,"x:",s,"y:",l,n.type),n.type!=="space"&&(i>e&&(e=i/(t.widthInColumns??1)),a>r&&(r=a))}return{width:e,height:r}},"getMaxChildSize");o(nF,"setBlockSizes");o(Dye,"layoutBlocks");o(Lye,"findBounds");o(Rye,"layout")});function Mye(t,e){e&&t.attr("style",e)}function ftt(t){let e=Ge(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),r=e.append("xhtml:div"),n=t.label,i=t.isNode?"nodeLabel":"edgeLabel",a=r.append("span");return a.html(n),Mye(a,t.labelStyle),a.attr("class",i),Mye(r,t.labelStyle),r.style("display","inline-block"),r.style("white-space","nowrap"),r.attr("xmlns","http://www.w3.org/1999/xhtml"),e.node()}var dtt,xs,lC=N(()=>{"use strict";pr();vt();zt();dr();nr();no();o(Mye,"applyStyle");o(ftt,"addHtmlLabel");dtt=o(async(t,e,r,n)=>{let i=t||"";if(typeof i=="object"&&(i=i[0]),fr(me().flowchart.htmlLabels)){i=i.replace(/\\n|\n/g,"
    "),X.debug("vertexText"+i);let a=await ID(na(i)),s={isNode:n,label:a,labelStyle:e.replace("fill:","color:")};return ftt(s)}else{let a=document.createElementNS("http://www.w3.org/2000/svg","text");a.setAttribute("style",e.replace("color:","fill:"));let s=[];typeof i=="string"?s=i.split(/\\n|\n|/gi):Array.isArray(i)?s=i:s=[];for(let l of s){let u=document.createElementNS("http://www.w3.org/2000/svg","tspan");u.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),u.setAttribute("dy","1em"),u.setAttribute("x","0"),r?u.setAttribute("class","title-row"):u.setAttribute("class","row"),u.textContent=l.trim(),a.appendChild(u)}return a}},"createLabel"),xs=dtt});var Oye,ptt,Iye,Pye=N(()=>{"use strict";vt();Oye=o((t,e,r,n,i)=>{e.arrowTypeStart&&Iye(t,"start",e.arrowTypeStart,r,n,i),e.arrowTypeEnd&&Iye(t,"end",e.arrowTypeEnd,r,n,i)},"addEdgeMarkers"),ptt={arrow_cross:"cross",arrow_point:"point",arrow_barb:"barb",arrow_circle:"circle",aggregation:"aggregation",extension:"extension",composition:"composition",dependency:"dependency",lollipop:"lollipop"},Iye=o((t,e,r,n,i,a)=>{let s=ptt[r];if(!s){X.warn(`Unknown arrow type: ${r}`);return}let l=e==="start"?"Start":"End";t.attr(`marker-${e}`,`url(${n}#${i}_${a}-${s}${l})`)},"addEdgeMarker")});function cC(t,e){me().flowchart.htmlLabels&&t&&(t.style.width=e.length*9+"px",t.style.height="12px")}var iF,Ua,Fye,$ye,mtt,gtt,Bye,zye,Gye=N(()=>{"use strict";vt();lC();no();pr();zt();nr();dr();iL();_2();Pye();iF={},Ua={},Fye=o(async(t,e)=>{let r=me(),n=fr(r.flowchart.htmlLabels),i=e.labelType==="markdown"?Hn(t,e.label,{style:e.labelStyle,useHtmlLabels:n,addSvgBackground:!0},r):await xs(e.label,e.labelStyle),a=t.insert("g").attr("class","edgeLabel"),s=a.insert("g").attr("class","label");s.node().appendChild(i);let l=i.getBBox();if(n){let h=i.children[0],f=Ge(i);l=h.getBoundingClientRect(),f.attr("width",l.width),f.attr("height",l.height)}s.attr("transform","translate("+-l.width/2+", "+-l.height/2+")"),iF[e.id]=a,e.width=l.width,e.height=l.height;let u;if(e.startLabelLeft){let h=await xs(e.startLabelLeft,e.labelStyle),f=t.insert("g").attr("class","edgeTerminals"),d=f.insert("g").attr("class","inner");u=d.node().appendChild(h);let p=h.getBBox();d.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),Ua[e.id]||(Ua[e.id]={}),Ua[e.id].startLeft=f,cC(u,e.startLabelLeft)}if(e.startLabelRight){let h=await xs(e.startLabelRight,e.labelStyle),f=t.insert("g").attr("class","edgeTerminals"),d=f.insert("g").attr("class","inner");u=f.node().appendChild(h),d.node().appendChild(h);let p=h.getBBox();d.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),Ua[e.id]||(Ua[e.id]={}),Ua[e.id].startRight=f,cC(u,e.startLabelRight)}if(e.endLabelLeft){let h=await xs(e.endLabelLeft,e.labelStyle),f=t.insert("g").attr("class","edgeTerminals"),d=f.insert("g").attr("class","inner");u=d.node().appendChild(h);let p=h.getBBox();d.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),f.node().appendChild(h),Ua[e.id]||(Ua[e.id]={}),Ua[e.id].endLeft=f,cC(u,e.endLabelLeft)}if(e.endLabelRight){let h=await xs(e.endLabelRight,e.labelStyle),f=t.insert("g").attr("class","edgeTerminals"),d=f.insert("g").attr("class","inner");u=d.node().appendChild(h);let p=h.getBBox();d.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),f.node().appendChild(h),Ua[e.id]||(Ua[e.id]={}),Ua[e.id].endRight=f,cC(u,e.endLabelRight)}return i},"insertEdgeLabel");o(cC,"setTerminalWidth");$ye=o((t,e)=>{X.debug("Moving label abc88 ",t.id,t.label,iF[t.id],e);let r=e.updatedPath?e.updatedPath:e.originalPath,n=me(),{subGraphTitleTotalMargin:i}=Ou(n);if(t.label){let a=iF[t.id],s=t.x,l=t.y;if(r){let u=Gt.calcLabelPosition(r);X.debug("Moving label "+t.label+" from (",s,",",l,") to (",u.x,",",u.y,") abc88"),e.updatedPath&&(s=u.x,l=u.y)}a.attr("transform",`translate(${s}, ${l+i/2})`)}if(t.startLabelLeft){let a=Ua[t.id].startLeft,s=t.x,l=t.y;if(r){let u=Gt.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.startLabelRight){let a=Ua[t.id].startRight,s=t.x,l=t.y;if(r){let u=Gt.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelLeft){let a=Ua[t.id].endLeft,s=t.x,l=t.y;if(r){let u=Gt.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelRight){let a=Ua[t.id].endRight,s=t.x,l=t.y;if(r){let u=Gt.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}},"positionEdgeLabel"),mtt=o((t,e)=>{let r=t.x,n=t.y,i=Math.abs(e.x-r),a=Math.abs(e.y-n),s=t.width/2,l=t.height/2;return i>=s||a>=l},"outsideNode"),gtt=o((t,e,r)=>{X.debug(`intersection calc abc89: + ${Nc()} +`,"getStyles"),$ve=Crt});var Art,_rt,Drt,Lrt,Rrt,Nrt,Mrt,Irt,Ort,Prt,Brt,Gve,Vve=N(()=>{"use strict";yt();Art=o((t,e,r,n)=>{e.forEach(i=>{Brt[i](t,r,n)})},"insertMarkers"),_rt=o((t,e,r)=>{X.trace("Making markers for ",r),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionStart").attr("class","marker extension "+e).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"),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionEnd").attr("class","marker extension "+e).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")},"extension"),Drt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionStart").attr("class","marker composition "+e).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"),t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionEnd").attr("class","marker composition "+e).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")},"composition"),Lrt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationStart").attr("class","marker aggregation "+e).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"),t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationEnd").attr("class","marker aggregation "+e).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"),Rrt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyStart").attr("class","marker dependency "+e).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"),t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyEnd").attr("class","marker dependency "+e).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")},"dependency"),Nrt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopStart").attr("class","marker lollipop "+e).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),t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopEnd").attr("class","marker lollipop "+e).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)},"lollipop"),Mrt=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-pointEnd").attr("class","marker "+e).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"),t.append("marker").attr("id",r+"_"+e+"-pointStart").attr("class","marker "+e).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")},"point"),Irt=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-circleEnd").attr("class","marker "+e).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"),t.append("marker").attr("id",r+"_"+e+"-circleStart").attr("class","marker "+e).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")},"circle"),Ort=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-crossEnd").attr("class","marker cross "+e).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"),t.append("marker").attr("id",r+"_"+e+"-crossStart").attr("class","marker cross "+e).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")},"cross"),Prt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-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")},"barb"),Brt={extension:_rt,composition:Drt,aggregation:Lrt,dependency:Rrt,lollipop:Nrt,point:Mrt,circle:Irt,cross:Ort,barb:Prt},Gve=Art});function Frt(t,e){if(t===0||!Number.isInteger(t))throw new Error("Columns must be an integer !== 0.");if(e<0||!Number.isInteger(e))throw new Error("Position must be a non-negative integer."+e);if(t<0)return{px:e,py:0};if(t===1)return{px:0,py:e};let r=e%t,n=Math.floor(e/t);return{px:r,py:n}}function FF(t,e,r=0,n=0){X.debug("setBlockSizes abc95 (start)",t.id,t?.size?.x,"block width =",t?.size,"siblingWidth",r),t?.size?.width||(t.size={width:r,height:n,x:0,y:0});let i=0,a=0;if(t.children?.length>0){for(let m of t.children)FF(m,e);let s=$rt(t);i=s.width,a=s.height,X.debug("setBlockSizes abc95 maxWidth of",t.id,":s children is ",i,a);for(let m of t.children)m.size&&(X.debug(`abc95 Setting size of children of ${t.id} id=${m.id} ${i} ${a} ${JSON.stringify(m.size)}`),m.size.width=i*(m.widthInColumns??1)+ki*((m.widthInColumns??1)-1),m.size.height=a,m.size.x=0,m.size.y=0,X.debug(`abc95 updating size of ${t.id} children child:${m.id} maxWidth:${i} maxHeight:${a}`));for(let m of t.children)FF(m,e,i,a);let l=t.columns??-1,u=0;for(let m of t.children)u+=m.widthInColumns??1;let h=t.children.length;l>0&&l0?Math.min(t.children.length,l):t.children.length;if(m>0){let g=(d-m*ki-ki)/m;X.debug("abc95 (growing to fit) width",t.id,d,t.size?.width,g);for(let y of t.children)y.size&&(y.size.width=g)}}t.size={width:d,height:p,x:0,y:0}}X.debug("setBlockSizes abc94 (done)",t.id,t?.size?.x,t?.size?.width,t?.size?.y,t?.size?.height)}function Uve(t,e){X.debug(`abc85 layout blocks (=>layoutBlocks) ${t.id} x: ${t?.size?.x} y: ${t?.size?.y} width: ${t?.size?.width}`);let r=t.columns??-1;if(X.debug("layoutBlocks columns abc95",t.id,"=>",r,t),t.children&&t.children.length>0){let n=t?.children[0]?.size?.width??0,i=t.children.length*n+(t.children.length-1)*ki;X.debug("widthOfChildren 88",i,"posX");let a=0;X.debug("abc91 block?.size?.x",t.id,t?.size?.x);let s=t?.size?.x?t?.size?.x+(-t?.size?.width/2||0):-ki,l=0;for(let u of t.children){let h=t;if(!u.size)continue;let{width:f,height:d}=u.size,{px:p,py:m}=Frt(r,a);if(m!=l&&(l=m,s=t?.size?.x?t?.size?.x+(-t?.size?.width/2||0):-ki,X.debug("New row in layout for block",t.id," and child ",u.id,l)),X.debug(`abc89 layout blocks (child) id: ${u.id} Pos: ${a} (px, py) ${p},${m} (${h?.size?.x},${h?.size?.y}) parent: ${h.id} width: ${f}${ki}`),h.size){let g=f/2;u.size.x=s+ki+g,X.debug(`abc91 layout blocks (calc) px, pyid:${u.id} startingPos=X${s} new startingPosX${u.size.x} ${g} padding=${ki} width=${f} halfWidth=${g} => x:${u.size.x} y:${u.size.y} ${u.widthInColumns} (width * (child?.w || 1)) / 2 ${f*(u?.widthInColumns??1)/2}`),s=u.size.x+g,u.size.y=h.size.y-h.size.height/2+m*(d+ki)+d/2+ki,X.debug(`abc88 layout blocks (calc) px, pyid:${u.id}startingPosX${s}${ki}${g}=>x:${u.size.x}y:${u.size.y}${u.widthInColumns}(width * (child?.w || 1)) / 2${f*(u?.widthInColumns??1)/2}`)}u.children&&Uve(u,e),a+=u?.widthInColumns??1,X.debug("abc88 columnsPos",u,a)}}X.debug(`layout blocks (<==layoutBlocks) ${t.id} x: ${t?.size?.x} y: ${t?.size?.y} width: ${t?.size?.width}`)}function Hve(t,{minX:e,minY:r,maxX:n,maxY:i}={minX:0,minY:0,maxX:0,maxY:0}){if(t.size&&t.id!=="root"){let{x:a,y:s,width:l,height:u}=t.size;a-l/2n&&(n=a+l/2),s+u/2>i&&(i=s+u/2)}if(t.children)for(let a of t.children)({minX:e,minY:r,maxX:n,maxY:i}=Hve(a,{minX:e,minY:r,maxX:n,maxY:i}));return{minX:e,minY:r,maxX:n,maxY:i}}function Wve(t){let e=t.getBlock("root");if(!e)return;FF(e,t,0,0),Uve(e,t),X.debug("getBlocks",JSON.stringify(e,null,2));let{minX:r,minY:n,maxX:i,maxY:a}=Hve(e),s=a-n,l=i-r;return{x:r,y:n,width:l,height:s}}var ki,$rt,qve=N(()=>{"use strict";yt();Gt();ki=me()?.block?.padding??8;o(Frt,"calculateBlockPosition");$rt=o(t=>{let e=0,r=0;for(let n of t.children){let{width:i,height:a,x:s,y:l}=n.size??{width:0,height:0,x:0,y:0};X.debug("getMaxChildSize abc95 child:",n.id,"width:",i,"height:",a,"x:",s,"y:",l,n.type),n.type!=="space"&&(i>e&&(e=i/(t.widthInColumns??1)),a>r&&(r=a))}return{width:e,height:r}},"getMaxChildSize");o(FF,"setBlockSizes");o(Uve,"layoutBlocks");o(Hve,"findBounds");o(Wve,"layout")});function Yve(t,e){e&&t.attr("style",e)}function zrt(t){let e=Ge(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),r=e.append("xhtml:div"),n=t.label,i=t.isNode?"nodeLabel":"edgeLabel",a=r.append("span");return a.html(n),Yve(a,t.labelStyle),a.attr("class",i),Yve(r,t.labelStyle),r.style("display","inline-block"),r.style("white-space","nowrap"),r.attr("xmlns","http://www.w3.org/1999/xhtml"),e.node()}var Grt,ks,wC=N(()=>{"use strict";fr();yt();Gt();pr();er();ao();o(Yve,"applyStyle");o(zrt,"addHtmlLabel");Grt=o(async(t,e,r,n)=>{let i=t||"";if(typeof i=="object"&&(i=i[0]),dr(me().flowchart.htmlLabels)){i=i.replace(/\\n|\n/g,"
    "),X.debug("vertexText"+i);let a=await dL(na(i)),s={isNode:n,label:a,labelStyle:e.replace("fill:","color:")};return zrt(s)}else{let a=document.createElementNS("http://www.w3.org/2000/svg","text");a.setAttribute("style",e.replace("color:","fill:"));let s=[];typeof i=="string"?s=i.split(/\\n|\n|/gi):Array.isArray(i)?s=i:s=[];for(let l of s){let u=document.createElementNS("http://www.w3.org/2000/svg","tspan");u.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),u.setAttribute("dy","1em"),u.setAttribute("x","0"),r?u.setAttribute("class","title-row"):u.setAttribute("class","row"),u.textContent=l.trim(),a.appendChild(u)}return a}},"createLabel"),ks=Grt});var jve,Vrt,Xve,Kve=N(()=>{"use strict";yt();jve=o((t,e,r,n,i)=>{e.arrowTypeStart&&Xve(t,"start",e.arrowTypeStart,r,n,i),e.arrowTypeEnd&&Xve(t,"end",e.arrowTypeEnd,r,n,i)},"addEdgeMarkers"),Vrt={arrow_cross:"cross",arrow_point:"point",arrow_barb:"barb",arrow_circle:"circle",aggregation:"aggregation",extension:"extension",composition:"composition",dependency:"dependency",lollipop:"lollipop"},Xve=o((t,e,r,n,i,a)=>{let s=Vrt[r];if(!s){X.warn(`Unknown arrow type: ${r}`);return}let l=e==="start"?"Start":"End";t.attr(`marker-${e}`,`url(${n}#${i}_${a}-${s}${l})`)},"addEdgeMarker")});function kC(t,e){me().flowchart.htmlLabels&&t&&(t.style.width=e.length*9+"px",t.style.height="12px")}var $F,Xa,Zve,Jve,Urt,Hrt,Qve,e2e,t2e=N(()=>{"use strict";yt();wC();ao();fr();Gt();er();pr();PL();R2();Kve();$F={},Xa={},Zve=o(async(t,e)=>{let r=me(),n=dr(r.flowchart.htmlLabels),i=e.labelType==="markdown"?qn(t,e.label,{style:e.labelStyle,useHtmlLabels:n,addSvgBackground:!0},r):await ks(e.label,e.labelStyle),a=t.insert("g").attr("class","edgeLabel"),s=a.insert("g").attr("class","label");s.node().appendChild(i);let l=i.getBBox();if(n){let h=i.children[0],f=Ge(i);l=h.getBoundingClientRect(),f.attr("width",l.width),f.attr("height",l.height)}s.attr("transform","translate("+-l.width/2+", "+-l.height/2+")"),$F[e.id]=a,e.width=l.width,e.height=l.height;let u;if(e.startLabelLeft){let h=await ks(e.startLabelLeft,e.labelStyle),f=t.insert("g").attr("class","edgeTerminals"),d=f.insert("g").attr("class","inner");u=d.node().appendChild(h);let p=h.getBBox();d.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),Xa[e.id]||(Xa[e.id]={}),Xa[e.id].startLeft=f,kC(u,e.startLabelLeft)}if(e.startLabelRight){let h=await ks(e.startLabelRight,e.labelStyle),f=t.insert("g").attr("class","edgeTerminals"),d=f.insert("g").attr("class","inner");u=f.node().appendChild(h),d.node().appendChild(h);let p=h.getBBox();d.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),Xa[e.id]||(Xa[e.id]={}),Xa[e.id].startRight=f,kC(u,e.startLabelRight)}if(e.endLabelLeft){let h=await ks(e.endLabelLeft,e.labelStyle),f=t.insert("g").attr("class","edgeTerminals"),d=f.insert("g").attr("class","inner");u=d.node().appendChild(h);let p=h.getBBox();d.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),f.node().appendChild(h),Xa[e.id]||(Xa[e.id]={}),Xa[e.id].endLeft=f,kC(u,e.endLabelLeft)}if(e.endLabelRight){let h=await ks(e.endLabelRight,e.labelStyle),f=t.insert("g").attr("class","edgeTerminals"),d=f.insert("g").attr("class","inner");u=d.node().appendChild(h);let p=h.getBBox();d.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),f.node().appendChild(h),Xa[e.id]||(Xa[e.id]={}),Xa[e.id].endRight=f,kC(u,e.endLabelRight)}return i},"insertEdgeLabel");o(kC,"setTerminalWidth");Jve=o((t,e)=>{X.debug("Moving label abc88 ",t.id,t.label,$F[t.id],e);let r=e.updatedPath?e.updatedPath:e.originalPath,n=me(),{subGraphTitleTotalMargin:i}=Bu(n);if(t.label){let a=$F[t.id],s=t.x,l=t.y;if(r){let u=Vt.calcLabelPosition(r);X.debug("Moving label "+t.label+" from (",s,",",l,") to (",u.x,",",u.y,") abc88"),e.updatedPath&&(s=u.x,l=u.y)}a.attr("transform",`translate(${s}, ${l+i/2})`)}if(t.startLabelLeft){let a=Xa[t.id].startLeft,s=t.x,l=t.y;if(r){let u=Vt.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.startLabelRight){let a=Xa[t.id].startRight,s=t.x,l=t.y;if(r){let u=Vt.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelLeft){let a=Xa[t.id].endLeft,s=t.x,l=t.y;if(r){let u=Vt.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelRight){let a=Xa[t.id].endRight,s=t.x,l=t.y;if(r){let u=Vt.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}},"positionEdgeLabel"),Urt=o((t,e)=>{let r=t.x,n=t.y,i=Math.abs(e.x-r),a=Math.abs(e.y-n),s=t.width/2,l=t.height/2;return i>=s||a>=l},"outsideNode"),Hrt=o((t,e,r)=>{X.debug(`intersection calc abc89: outsidePoint: ${JSON.stringify(e)} insidePoint : ${JSON.stringify(r)} - node : x:${t.x} y:${t.y} w:${t.width} h:${t.height}`);let n=t.x,i=t.y,a=Math.abs(n-r.x),s=t.width/2,l=r.xMath.abs(n-e.x)*u){let d=r.y{X.debug("abc88 cutPathAtIntersect",t,e);let r=[],n=t[0],i=!1;return t.forEach(a=>{if(!mtt(e,a)&&!i){let s=gtt(e,n,a),l=!1;r.forEach(u=>{l=l||u.x===s.x&&u.y===s.y}),r.some(u=>u.x===s.x&&u.y===s.y)||r.push(s),i=!0}else n=a,i||r.push(a)}),r},"cutPathAtIntersect"),zye=o(function(t,e,r,n,i,a,s){let l=r.points;X.debug("abc88 InsertEdge: edge=",r,"e=",e);let u=!1,h=a.node(e.v);var f=a.node(e.w);f?.intersect&&h?.intersect&&(l=l.slice(1,r.points.length-1),l.unshift(h.intersect(l[0])),l.push(f.intersect(l[l.length-1]))),r.toCluster&&(X.debug("to cluster abc88",n[r.toCluster]),l=Bye(r.points,n[r.toCluster].node),u=!0),r.fromCluster&&(X.debug("from cluster abc88",n[r.fromCluster]),l=Bye(l.reverse(),n[r.fromCluster].node).reverse(),u=!0);let d=l.filter(C=>!Number.isNaN(C.y)),p=Lo;r.curve&&(i==="graph"||i==="flowchart")&&(p=r.curve);let{x:m,y:g}=Jw(r),y=kl().x(m).y(g).curve(p),v;switch(r.thickness){case"normal":v="edge-thickness-normal";break;case"thick":v="edge-thickness-thick";break;case"invisible":v="edge-thickness-thick";break;default:v=""}switch(r.pattern){case"solid":v+=" edge-pattern-solid";break;case"dotted":v+=" edge-pattern-dotted";break;case"dashed":v+=" edge-pattern-dashed";break}let x=t.append("path").attr("d",y(d)).attr("id",r.id).attr("class"," "+v+(r.classes?" "+r.classes:"")).attr("style",r.style),b="";(me().flowchart.arrowMarkerAbsolute||me().state.arrowMarkerAbsolute)&&(b=pu(!0)),Oye(x,r,b,s,i);let w={};return u&&(w.updatedPath=l),w.originalPath=r.points,w},"insertEdge")});var ytt,Vye,Uye=N(()=>{"use strict";ytt=o(t=>{let e=new Set;for(let r of t)switch(r){case"x":e.add("right"),e.add("left");break;case"y":e.add("up"),e.add("down");break;default:e.add(r);break}return e},"expandAndDeduplicateDirections"),Vye=o((t,e,r)=>{let n=ytt(t),i=2,a=e.height+2*r.padding,s=a/i,l=e.width+2*s+r.padding,u=r.padding/2;return n.has("right")&&n.has("left")&&n.has("up")&&n.has("down")?[{x:0,y:0},{x:s,y:0},{x:l/2,y:2*u},{x:l-s,y:0},{x:l,y:0},{x:l,y:-a/3},{x:l+2*u,y:-a/2},{x:l,y:-2*a/3},{x:l,y:-a},{x:l-s,y:-a},{x:l/2,y:-a-2*u},{x:s,y:-a},{x:0,y:-a},{x:0,y:-2*a/3},{x:-2*u,y:-a/2},{x:0,y:-a/3}]:n.has("right")&&n.has("left")&&n.has("up")?[{x:s,y:0},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:s,y:-a},{x:0,y:-a/2}]:n.has("right")&&n.has("left")&&n.has("down")?[{x:0,y:0},{x:s,y:-a},{x:l-s,y:-a},{x:l,y:0}]:n.has("right")&&n.has("up")&&n.has("down")?[{x:0,y:0},{x:l,y:-s},{x:l,y:-a+s},{x:0,y:-a}]:n.has("left")&&n.has("up")&&n.has("down")?[{x:l,y:0},{x:0,y:-s},{x:0,y:-a+s},{x:l,y:-a}]:n.has("right")&&n.has("left")?[{x:s,y:0},{x:s,y:-u},{x:l-s,y:-u},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:l-s,y:-a+u},{x:s,y:-a+u},{x:s,y:-a},{x:0,y:-a/2}]:n.has("up")&&n.has("down")?[{x:l/2,y:0},{x:0,y:-u},{x:s,y:-u},{x:s,y:-a+u},{x:0,y:-a+u},{x:l/2,y:-a},{x:l,y:-a+u},{x:l-s,y:-a+u},{x:l-s,y:-u},{x:l,y:-u}]:n.has("right")&&n.has("up")?[{x:0,y:0},{x:l,y:-s},{x:0,y:-a}]:n.has("right")&&n.has("down")?[{x:0,y:0},{x:l,y:0},{x:0,y:-a}]:n.has("left")&&n.has("up")?[{x:l,y:0},{x:0,y:-s},{x:l,y:-a}]:n.has("left")&&n.has("down")?[{x:l,y:0},{x:0,y:0},{x:l,y:-a}]:n.has("right")?[{x:s,y:-u},{x:s,y:-u},{x:l-s,y:-u},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:l-s,y:-a+u},{x:s,y:-a+u},{x:s,y:-a+u}]:n.has("left")?[{x:s,y:0},{x:s,y:-u},{x:l-s,y:-u},{x:l-s,y:-a+u},{x:s,y:-a+u},{x:s,y:-a},{x:0,y:-a/2}]:n.has("up")?[{x:s,y:-u},{x:s,y:-a+u},{x:0,y:-a+u},{x:l/2,y:-a},{x:l,y:-a+u},{x:l-s,y:-a+u},{x:l-s,y:-u}]:n.has("down")?[{x:l/2,y:0},{x:0,y:-u},{x:s,y:-u},{x:s,y:-a+u},{x:l-s,y:-a+u},{x:l-s,y:-u},{x:l,y:-u}]:[{x:0,y:0}]},"getArrowPoints")});function vtt(t,e){return t.intersect(e)}var Hye,Wye=N(()=>{"use strict";o(vtt,"intersectNode");Hye=vtt});function xtt(t,e,r,n){var i=t.x,a=t.y,s=i-n.x,l=a-n.y,u=Math.sqrt(e*e*l*l+r*r*s*s),h=Math.abs(e*r*s/u);n.x{"use strict";o(xtt,"intersectEllipse");uC=xtt});function btt(t,e,r){return uC(t,e,e,r)}var qye,Yye=N(()=>{"use strict";aF();o(btt,"intersectCircle");qye=btt});function wtt(t,e,r,n){var i,a,s,l,u,h,f,d,p,m,g,y,v,x,b;if(i=e.y-t.y,s=t.x-e.x,u=e.x*t.y-t.x*e.y,p=i*r.x+s*r.y+u,m=i*n.x+s*n.y+u,!(p!==0&&m!==0&&Xye(p,m))&&(a=n.y-r.y,l=r.x-n.x,h=n.x*r.y-r.x*n.y,f=a*t.x+l*t.y+h,d=a*e.x+l*e.y+h,!(f!==0&&d!==0&&Xye(f,d))&&(g=i*l-a*s,g!==0)))return y=Math.abs(g/2),v=s*h-l*u,x=v<0?(v-y)/g:(v+y)/g,v=a*u-i*h,b=v<0?(v-y)/g:(v+y)/g,{x,y:b}}function Xye(t,e){return t*e>0}var jye,Kye=N(()=>{"use strict";o(wtt,"intersectLine");o(Xye,"sameSign");jye=wtt});function Ttt(t,e,r){var n=t.x,i=t.y,a=[],s=Number.POSITIVE_INFINITY,l=Number.POSITIVE_INFINITY;typeof e.forEach=="function"?e.forEach(function(g){s=Math.min(s,g.x),l=Math.min(l,g.y)}):(s=Math.min(s,e.x),l=Math.min(l,e.y));for(var u=n-t.width/2-s,h=i-t.height/2-l,f=0;f1&&a.sort(function(g,y){var v=g.x-r.x,x=g.y-r.y,b=Math.sqrt(v*v+x*x),w=y.x-r.x,C=y.y-r.y,T=Math.sqrt(w*w+C*C);return b{"use strict";Kye();Qye=Ttt;o(Ttt,"intersectPolygon")});var ktt,Jye,eve=N(()=>{"use strict";ktt=o((t,e)=>{var r=t.x,n=t.y,i=e.x-r,a=e.y-n,s=t.width/2,l=t.height/2,u,h;return Math.abs(a)*s>Math.abs(i)*l?(a<0&&(l=-l),u=a===0?0:l*i/a,h=l):(i<0&&(s=-s),u=s,h=i===0?0:s*a/i),{x:r+u,y:n+h}},"intersectRect"),Jye=ktt});var In,sF=N(()=>{"use strict";Wye();Yye();aF();Zye();eve();In={node:Hye,circle:qye,ellipse:uC,polygon:Qye,rect:Jye}});function ql(t,e,r,n){return t.insert("polygon",":first-child").attr("points",n.map(function(i){return i.x+","+i.y}).join(" ")).attr("class","label-container").attr("transform","translate("+-e/2+","+r/2+")")}var Li,Qn,oF=N(()=>{"use strict";lC();no();zt();pr();dr();nr();Li=o(async(t,e,r,n)=>{let i=me(),a,s=e.useHtmlLabels||fr(i.flowchart.htmlLabels);r?a=r:a="node default";let l=t.insert("g").attr("class",a).attr("id",e.domId||e.id),u=l.insert("g").attr("class","label").attr("style",e.labelStyle),h;e.labelText===void 0?h="":h=typeof e.labelText=="string"?e.labelText:e.labelText[0];let f=u.node(),d;e.labelType==="markdown"?d=Hn(u,Tr(na(h),i),{useHtmlLabels:s,width:e.width||i.flowchart.wrappingWidth,classes:"markdown-node-label"},i):d=f.appendChild(await xs(Tr(na(h),i),e.labelStyle,!1,n));let p=d.getBBox(),m=e.padding/2;if(fr(i.flowchart.htmlLabels)){let g=d.children[0],y=Ge(d),v=g.getElementsByTagName("img");if(v){let x=h.replace(/]*>/g,"").trim()==="";await Promise.all([...v].map(b=>new Promise(w=>{function C(){if(b.style.display="flex",b.style.flexDirection="column",x){let T=i.fontSize?i.fontSize:window.getComputedStyle(document.body).fontSize,A=parseInt(T,10)*5+"px";b.style.minWidth=A,b.style.maxWidth=A}else b.style.width="100%";w(b)}o(C,"setupImage"),setTimeout(()=>{b.complete&&C()}),b.addEventListener("error",C),b.addEventListener("load",C)})))}p=g.getBoundingClientRect(),y.attr("width",p.width),y.attr("height",p.height)}return s?u.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"):u.attr("transform","translate(0, "+-p.height/2+")"),e.centerLabel&&u.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),u.insert("rect",":first-child"),{shapeSvg:l,bbox:p,halfPadding:m,label:u}},"labelHelper"),Qn=o((t,e)=>{let r=e.node().getBBox();t.width=r.width,t.height=r.height},"updateNodeBounds");o(ql,"insertPolygonShape")});var Ett,tve,rve=N(()=>{"use strict";oF();vt();zt();sF();Ett=o(async(t,e)=>{e.useHtmlLabels||me().flowchart.htmlLabels||(e.centerLabel=!0);let{shapeSvg:n,bbox:i,halfPadding:a}=await Li(t,e,"node "+e.classes,!0);X.info("Classes = ",e.classes);let s=n.insert("rect",":first-child");return s.attr("rx",e.rx).attr("ry",e.ry).attr("x",-i.width/2-a).attr("y",-i.height/2-a).attr("width",i.width+e.padding).attr("height",i.height+e.padding),Qn(e,s),e.intersect=function(l){return In.rect(e,l)},n},"note"),tve=Ett});function lF(t,e,r,n){let i=[],a=o(l=>{i.push(l,0)},"addBorder"),s=o(l=>{i.push(0,l)},"skipBorder");e.includes("t")?(X.debug("add top border"),a(r)):s(r),e.includes("r")?(X.debug("add right border"),a(n)):s(n),e.includes("b")?(X.debug("add bottom border"),a(r)):s(r),e.includes("l")?(X.debug("add left border"),a(n)):s(n),t.attr("stroke-dasharray",i.join(" "))}var nve,xo,ive,Stt,Ctt,Att,_tt,Dtt,Ltt,Rtt,Ntt,Mtt,Itt,Ott,Ptt,Btt,Ftt,$tt,ztt,Gtt,Vtt,Utt,ave,Htt,Wtt,sve,hC,cF,ove,lve=N(()=>{"use strict";pr();zt();dr();vt();Uye();lC();sF();rve();oF();nve=o(t=>t?" "+t:"","formatClass"),xo=o((t,e)=>`${e||"node default"}${nve(t.classes)} ${nve(t.class)}`,"getClassesFromNode"),ive=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Li(t,e,xo(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=i+a,l=[{x:s/2,y:0},{x:s,y:-s/2},{x:s/2,y:-s},{x:0,y:-s/2}];X.info("Question main (Circle)");let u=ql(r,s,s,l);return u.attr("style",e.style),Qn(e,u),e.intersect=function(h){return X.warn("Intersect called"),In.polygon(e,l,h)},r},"question"),Stt=o((t,e)=>{let r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),n=28,i=[{x:0,y:n/2},{x:n/2,y:0},{x:0,y:-n/2},{x:-n/2,y:0}];return r.insert("polygon",":first-child").attr("points",i.map(function(s){return s.x+","+s.y}).join(" ")).attr("class","state-start").attr("r",7).attr("width",28).attr("height",28),e.width=28,e.height=28,e.intersect=function(s){return In.circle(e,14,s)},r},"choice"),Ctt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Li(t,e,xo(e,void 0),!0),i=4,a=n.height+e.padding,s=a/i,l=n.width+2*s+e.padding,u=[{x:s,y:0},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:s,y:-a},{x:0,y:-a/2}],h=ql(r,l,a,u);return h.attr("style",e.style),Qn(e,h),e.intersect=function(f){return In.polygon(e,u,f)},r},"hexagon"),Att=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Li(t,e,void 0,!0),i=2,a=n.height+2*e.padding,s=a/i,l=n.width+2*s+e.padding,u=Vye(e.directions,n,e),h=ql(r,l,a,u);return h.attr("style",e.style),Qn(e,h),e.intersect=function(f){return In.polygon(e,u,f)},r},"block_arrow"),_tt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Li(t,e,xo(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:-a/2,y:0},{x:i,y:0},{x:i,y:-a},{x:-a/2,y:-a},{x:0,y:-a/2}];return ql(r,i,a,s).attr("style",e.style),e.width=i+a,e.height=a,e.intersect=function(u){return In.polygon(e,s,u)},r},"rect_left_inv_arrow"),Dtt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Li(t,e,xo(e),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:-2*a/6,y:0},{x:i-a/6,y:0},{x:i+2*a/6,y:-a},{x:a/6,y:-a}],l=ql(r,i,a,s);return l.attr("style",e.style),Qn(e,l),e.intersect=function(u){return In.polygon(e,s,u)},r},"lean_right"),Ltt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Li(t,e,xo(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:2*a/6,y:0},{x:i+a/6,y:0},{x:i-2*a/6,y:-a},{x:-a/6,y:-a}],l=ql(r,i,a,s);return l.attr("style",e.style),Qn(e,l),e.intersect=function(u){return In.polygon(e,s,u)},r},"lean_left"),Rtt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Li(t,e,xo(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:-2*a/6,y:0},{x:i+2*a/6,y:0},{x:i-a/6,y:-a},{x:a/6,y:-a}],l=ql(r,i,a,s);return l.attr("style",e.style),Qn(e,l),e.intersect=function(u){return In.polygon(e,s,u)},r},"trapezoid"),Ntt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Li(t,e,xo(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:a/6,y:0},{x:i-a/6,y:0},{x:i+2*a/6,y:-a},{x:-2*a/6,y:-a}],l=ql(r,i,a,s);return l.attr("style",e.style),Qn(e,l),e.intersect=function(u){return In.polygon(e,s,u)},r},"inv_trapezoid"),Mtt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Li(t,e,xo(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:0,y:0},{x:i+a/2,y:0},{x:i,y:-a/2},{x:i+a/2,y:-a},{x:0,y:-a}],l=ql(r,i,a,s);return l.attr("style",e.style),Qn(e,l),e.intersect=function(u){return In.polygon(e,s,u)},r},"rect_right_inv_arrow"),Itt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Li(t,e,xo(e,void 0),!0),i=n.width+e.padding,a=i/2,s=a/(2.5+i/50),l=n.height+s+e.padding,u="M 0,"+s+" a "+a+","+s+" 0,0,0 "+i+" 0 a "+a+","+s+" 0,0,0 "+-i+" 0 l 0,"+l+" a "+a+","+s+" 0,0,0 "+i+" 0 l 0,"+-l,h=r.attr("label-offset-y",s).insert("path",":first-child").attr("style",e.style).attr("d",u).attr("transform","translate("+-i/2+","+-(l/2+s)+")");return Qn(e,h),e.intersect=function(f){let d=In.rect(e,f),p=d.x-e.x;if(a!=0&&(Math.abs(p)e.height/2-s)){let m=s*s*(1-p*p/(a*a));m!=0&&(m=Math.sqrt(m)),m=s-m,f.y-e.y>0&&(m=-m),d.y+=m}return d},r},"cylinder"),Ott=o(async(t,e)=>{let{shapeSvg:r,bbox:n,halfPadding:i}=await Li(t,e,"node "+e.classes+" "+e.class,!0),a=r.insert("rect",":first-child"),s=e.positioned?e.width:n.width+e.padding,l=e.positioned?e.height:n.height+e.padding,u=e.positioned?-s/2:-n.width/2-i,h=e.positioned?-l/2:-n.height/2-i;if(a.attr("class","basic label-container").attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",u).attr("y",h).attr("width",s).attr("height",l),e.props){let f=new Set(Object.keys(e.props));e.props.borders&&(lF(a,e.props.borders,s,l),f.delete("borders")),f.forEach(d=>{X.warn(`Unknown node property ${d}`)})}return Qn(e,a),e.intersect=function(f){return In.rect(e,f)},r},"rect"),Ptt=o(async(t,e)=>{let{shapeSvg:r,bbox:n,halfPadding:i}=await Li(t,e,"node "+e.classes,!0),a=r.insert("rect",":first-child"),s=e.positioned?e.width:n.width+e.padding,l=e.positioned?e.height:n.height+e.padding,u=e.positioned?-s/2:-n.width/2-i,h=e.positioned?-l/2:-n.height/2-i;if(a.attr("class","basic cluster composite label-container").attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",u).attr("y",h).attr("width",s).attr("height",l),e.props){let f=new Set(Object.keys(e.props));e.props.borders&&(lF(a,e.props.borders,s,l),f.delete("borders")),f.forEach(d=>{X.warn(`Unknown node property ${d}`)})}return Qn(e,a),e.intersect=function(f){return In.rect(e,f)},r},"composite"),Btt=o(async(t,e)=>{let{shapeSvg:r}=await Li(t,e,"label",!0);X.trace("Classes = ",e.class);let n=r.insert("rect",":first-child"),i=0,a=0;if(n.attr("width",i).attr("height",a),r.attr("class","label edgeLabel"),e.props){let s=new Set(Object.keys(e.props));e.props.borders&&(lF(n,e.props.borders,i,a),s.delete("borders")),s.forEach(l=>{X.warn(`Unknown node property ${l}`)})}return Qn(e,n),e.intersect=function(s){return In.rect(e,s)},r},"labelRect");o(lF,"applyNodePropertyBorders");Ftt=o(async(t,e)=>{let r;e.classes?r="node "+e.classes:r="node default";let n=t.insert("g").attr("class",r).attr("id",e.domId||e.id),i=n.insert("rect",":first-child"),a=n.insert("line"),s=n.insert("g").attr("class","label"),l=e.labelText.flat?e.labelText.flat():e.labelText,u="";typeof l=="object"?u=l[0]:u=l,X.info("Label text abc79",u,l,typeof l=="object");let h=s.node().appendChild(await xs(u,e.labelStyle,!0,!0)),f={width:0,height:0};if(fr(me().flowchart.htmlLabels)){let y=h.children[0],v=Ge(h);f=y.getBoundingClientRect(),v.attr("width",f.width),v.attr("height",f.height)}X.info("Text 2",l);let d=l.slice(1,l.length),p=h.getBBox(),m=s.node().appendChild(await xs(d.join?d.join("
    "):d,e.labelStyle,!0,!0));if(fr(me().flowchart.htmlLabels)){let y=m.children[0],v=Ge(m);f=y.getBoundingClientRect(),v.attr("width",f.width),v.attr("height",f.height)}let g=e.padding/2;return Ge(m).attr("transform","translate( "+(f.width>p.width?0:(p.width-f.width)/2)+", "+(p.height+g+5)+")"),Ge(h).attr("transform","translate( "+(f.width{let{shapeSvg:r,bbox:n}=await Li(t,e,xo(e,void 0),!0),i=n.height+e.padding,a=n.width+i/4+e.padding,s=r.insert("rect",":first-child").attr("style",e.style).attr("rx",i/2).attr("ry",i/2).attr("x",-a/2).attr("y",-i/2).attr("width",a).attr("height",i);return Qn(e,s),e.intersect=function(l){return In.rect(e,l)},r},"stadium"),ztt=o(async(t,e)=>{let{shapeSvg:r,bbox:n,halfPadding:i}=await Li(t,e,xo(e,void 0),!0),a=r.insert("circle",":first-child");return a.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",n.width/2+i).attr("width",n.width+e.padding).attr("height",n.height+e.padding),X.info("Circle main"),Qn(e,a),e.intersect=function(s){return X.info("Circle intersect",e,n.width/2+i,s),In.circle(e,n.width/2+i,s)},r},"circle"),Gtt=o(async(t,e)=>{let{shapeSvg:r,bbox:n,halfPadding:i}=await Li(t,e,xo(e,void 0),!0),a=5,s=r.insert("g",":first-child"),l=s.insert("circle"),u=s.insert("circle");return s.attr("class",e.class),l.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",n.width/2+i+a).attr("width",n.width+e.padding+a*2).attr("height",n.height+e.padding+a*2),u.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",n.width/2+i).attr("width",n.width+e.padding).attr("height",n.height+e.padding),X.info("DoubleCircle main"),Qn(e,l),e.intersect=function(h){return X.info("DoubleCircle intersect",e,n.width/2+i+a,h),In.circle(e,n.width/2+i+a,h)},r},"doublecircle"),Vtt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Li(t,e,xo(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:0,y:0},{x:i,y:0},{x:i,y:-a},{x:0,y:-a},{x:0,y:0},{x:-8,y:0},{x:i+8,y:0},{x:i+8,y:-a},{x:-8,y:-a},{x:-8,y:0}],l=ql(r,i,a,s);return l.attr("style",e.style),Qn(e,l),e.intersect=function(u){return In.polygon(e,s,u)},r},"subroutine"),Utt=o((t,e)=>{let r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),n=r.insert("circle",":first-child");return n.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),Qn(e,n),e.intersect=function(i){return In.circle(e,7,i)},r},"start"),ave=o((t,e,r)=>{let n=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),i=70,a=10;r==="LR"&&(i=10,a=70);let s=n.append("rect").attr("x",-1*i/2).attr("y",-1*a/2).attr("width",i).attr("height",a).attr("class","fork-join");return Qn(e,s),e.height=e.height+e.padding/2,e.width=e.width+e.padding/2,e.intersect=function(l){return In.rect(e,l)},n},"forkJoin"),Htt=o((t,e)=>{let r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),n=r.insert("circle",":first-child"),i=r.insert("circle",":first-child");return i.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),n.attr("class","state-end").attr("r",5).attr("width",10).attr("height",10),Qn(e,i),e.intersect=function(a){return In.circle(e,7,a)},r},"end"),Wtt=o(async(t,e)=>{let r=e.padding/2,n=4,i=8,a;e.classes?a="node "+e.classes:a="node default";let s=t.insert("g").attr("class",a).attr("id",e.domId||e.id),l=s.insert("rect",":first-child"),u=s.insert("line"),h=s.insert("line"),f=0,d=n,p=s.insert("g").attr("class","label"),m=0,g=e.classData.annotations?.[0],y=e.classData.annotations[0]?"\xAB"+e.classData.annotations[0]+"\xBB":"",v=p.node().appendChild(await xs(y,e.labelStyle,!0,!0)),x=v.getBBox();if(fr(me().flowchart.htmlLabels)){let S=v.children[0],_=Ge(v);x=S.getBoundingClientRect(),_.attr("width",x.width),_.attr("height",x.height)}e.classData.annotations[0]&&(d+=x.height+n,f+=x.width);let b=e.classData.label;e.classData.type!==void 0&&e.classData.type!==""&&(me().flowchart.htmlLabels?b+="<"+e.classData.type+">":b+="<"+e.classData.type+">");let w=p.node().appendChild(await xs(b,e.labelStyle,!0,!0));Ge(w).attr("class","classTitle");let C=w.getBBox();if(fr(me().flowchart.htmlLabels)){let S=w.children[0],_=Ge(w);C=S.getBoundingClientRect(),_.attr("width",C.width),_.attr("height",C.height)}d+=C.height+n,C.width>f&&(f=C.width);let T=[];e.classData.members.forEach(async S=>{let _=S.getDisplayDetails(),I=_.displayText;me().flowchart.htmlLabels&&(I=I.replace(//g,">"));let L=p.node().appendChild(await xs(I,_.cssStyle?_.cssStyle:e.labelStyle,!0,!0)),k=L.getBBox();if(fr(me().flowchart.htmlLabels)){let D=L.children[0],R=Ge(L);k=D.getBoundingClientRect(),R.attr("width",k.width),R.attr("height",k.height)}k.width>f&&(f=k.width),d+=k.height+n,T.push(L)}),d+=i;let E=[];if(e.classData.methods.forEach(async S=>{let _=S.getDisplayDetails(),I=_.displayText;me().flowchart.htmlLabels&&(I=I.replace(//g,">"));let L=p.node().appendChild(await xs(I,_.cssStyle?_.cssStyle:e.labelStyle,!0,!0)),k=L.getBBox();if(fr(me().flowchart.htmlLabels)){let D=L.children[0],R=Ge(L);k=D.getBoundingClientRect(),R.attr("width",k.width),R.attr("height",k.height)}k.width>f&&(f=k.width),d+=k.height+n,E.push(L)}),d+=i,g){let S=(f-x.width)/2;Ge(v).attr("transform","translate( "+(-1*f/2+S)+", "+-1*d/2+")"),m=x.height+n}let A=(f-C.width)/2;return Ge(w).attr("transform","translate( "+(-1*f/2+A)+", "+(-1*d/2+m)+")"),m+=C.height+n,u.attr("class","divider").attr("x1",-f/2-r).attr("x2",f/2+r).attr("y1",-d/2-r+i+m).attr("y2",-d/2-r+i+m),m+=i,T.forEach(S=>{Ge(S).attr("transform","translate( "+-f/2+", "+(-1*d/2+m+i/2)+")");let _=S?.getBBox();m+=(_?.height??0)+n}),m+=i,h.attr("class","divider").attr("x1",-f/2-r).attr("x2",f/2+r).attr("y1",-d/2-r+i+m).attr("y2",-d/2-r+i+m),m+=i,E.forEach(S=>{Ge(S).attr("transform","translate( "+-f/2+", "+(-1*d/2+m)+")");let _=S?.getBBox();m+=(_?.height??0)+n}),l.attr("style",e.style).attr("class","outer title-state").attr("x",-f/2-r).attr("y",-(d/2)-r).attr("width",f+e.padding).attr("height",d+e.padding),Qn(e,l),e.intersect=function(S){return In.rect(e,S)},s},"class_box"),sve={rhombus:ive,composite:Ptt,question:ive,rect:Ott,labelRect:Btt,rectWithTitle:Ftt,choice:Stt,circle:ztt,doublecircle:Gtt,stadium:$tt,hexagon:Ctt,block_arrow:Att,rect_left_inv_arrow:_tt,lean_right:Dtt,lean_left:Ltt,trapezoid:Rtt,inv_trapezoid:Ntt,rect_right_inv_arrow:Mtt,cylinder:Itt,start:Utt,end:Htt,note:tve,subroutine:Vtt,fork:ave,join:ave,class_box:Wtt},hC={},cF=o(async(t,e,r)=>{let n,i;if(e.link){let a;me().securityLevel==="sandbox"?a="_top":e.linkTarget&&(a=e.linkTarget||"_blank"),n=t.insert("svg:a").attr("xlink:href",e.link).attr("target",a),i=await sve[e.shape](n,e,r)}else i=await sve[e.shape](t,e,r),n=i;return e.tooltip&&i.attr("title",e.tooltip),e.class&&i.attr("class","node default "+e.class),hC[e.id]=n,e.haveCallback&&hC[e.id].attr("class",hC[e.id].attr("class")+" clickable"),n},"insertNode"),ove=o(t=>{let e=hC[t.id];X.trace("Transforming node",t.diff,t,"translate("+(t.x-t.width/2-5)+", "+t.width/2+")");let r=8,n=t.diff||0;return t.clusterNode?e.attr("transform","translate("+(t.x+n-t.width/2)+", "+(t.y-t.height/2-r)+")"):e.attr("transform","translate("+t.x+", "+t.y+")"),n},"positionNode")});function cve(t,e,r=!1){let n=t,i="default";(n?.classes?.length||0)>0&&(i=(n?.classes??[]).join(" ")),i=i+" flowchart-label";let a=0,s="",l;switch(n.type){case"round":a=5,s="rect";break;case"composite":a=0,s="composite",l=0;break;case"square":s="rect";break;case"diamond":s="question";break;case"hexagon":s="hexagon";break;case"block_arrow":s="block_arrow";break;case"odd":s="rect_left_inv_arrow";break;case"lean_right":s="lean_right";break;case"lean_left":s="lean_left";break;case"trapezoid":s="trapezoid";break;case"inv_trapezoid":s="inv_trapezoid";break;case"rect_left_inv_arrow":s="rect_left_inv_arrow";break;case"circle":s="circle";break;case"ellipse":s="ellipse";break;case"stadium":s="stadium";break;case"subroutine":s="subroutine";break;case"cylinder":s="cylinder";break;case"group":s="rect";break;case"doublecircle":s="doublecircle";break;default:s="rect"}let u=Z9(n?.styles??[]),h=n.label,f=n.size??{width:0,height:0,x:0,y:0};return{labelStyle:u.labelStyle,shape:s,labelText:h,rx:a,ry:a,class:i,style:u.style,id:n.id,directions:n.directions,width:f.width,height:f.height,x:f.x,y:f.y,positioned:r,intersect:void 0,type:n.type,padding:l??sr()?.block?.padding??0}}async function qtt(t,e,r){let n=cve(e,r,!1);if(n.type==="group")return;let i=sr(),a=await cF(t,n,{config:i}),s=a.node().getBBox(),l=r.getBlock(n.id);l.size={width:s.width,height:s.height,x:0,y:0,node:a},r.setBlock(l),a.remove()}async function Ytt(t,e,r){let n=cve(e,r,!0);if(r.getBlock(n.id).type!=="space"){let a=sr();await cF(t,n,{config:a}),e.intersect=n?.intersect,ove(n)}}async function uF(t,e,r,n){for(let i of e)await n(t,i,r),i.children&&await uF(t,i.children,r,n)}async function uve(t,e,r){await uF(t,e,r,qtt)}async function hve(t,e,r){await uF(t,e,r,Ytt)}async function fve(t,e,r,n,i){let a=new sn({multigraph:!0,compound:!0});a.setGraph({rankdir:"TB",nodesep:10,ranksep:10,marginx:8,marginy:8});for(let s of r)s.size&&a.setNode(s.id,{width:s.size.width,height:s.size.height,intersect:s.intersect});for(let s of e)if(s.start&&s.end){let l=n.getBlock(s.start),u=n.getBlock(s.end);if(l?.size&&u?.size){let h=l.size,f=u.size,d=[{x:h.x,y:h.y},{x:h.x+(f.x-h.x)/2,y:h.y+(f.y-h.y)/2},{x:f.x,y:f.y}];zye(t,{v:s.start,w:s.end,name:s.id},{...s,arrowTypeEnd:s.arrowTypeEnd,arrowTypeStart:s.arrowTypeStart,points:d,classes:"edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1"},void 0,"block",a,i),s.label&&(await Fye(t,{...s,label:s.label,labelStyle:"stroke: #333; stroke-width: 1.5px;fill:none;",arrowTypeEnd:s.arrowTypeEnd,arrowTypeStart:s.arrowTypeStart,points:d,classes:"edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1"}),$ye({...s,x:d[1].x,y:d[1].y},{originalPath:d}))}}}var dve=N(()=>{"use strict";Uo();Bi();Gye();lve();nr();o(cve,"getNodeFromBlock");o(qtt,"calculateBlockSize");o(Ytt,"insertBlockPositioned");o(uF,"performOperations");o(uve,"calculateBlockSizes");o(hve,"insertBlocks");o(fve,"insertEdges")});var Xtt,jtt,pve,mve=N(()=>{"use strict";pr();Bi();_ye();vt();Si();Nye();dve();Xtt=o(function(t,e){return e.db.getClasses()},"getClasses"),jtt=o(async function(t,e,r,n){let{securityLevel:i,block:a}=sr(),s=n.db,l;i==="sandbox"&&(l=Ge("#i"+e));let u=i==="sandbox"?Ge(l.nodes()[0].contentDocument.body):Ge("body"),h=i==="sandbox"?u.select(`[id="${e}"]`):Ge(`[id="${e}"]`);Aye(h,["point","circle","cross"],n.type,e);let d=s.getBlocks(),p=s.getBlocksFlat(),m=s.getEdges(),g=h.insert("g").attr("class","block");await uve(g,d,s);let y=Rye(s);if(await hve(g,d,s),await fve(g,m,p,s,e),y){let v=y,x=Math.max(1,Math.round(.125*(v.width/v.height))),b=v.height+x+10,w=v.width+10,{useMaxWidth:C}=a;vn(h,b,w,!!C),X.debug("Here Bounds",y,v),h.attr("viewBox",`${v.x-5} ${v.y-5} ${v.width+10} ${v.height+10}`)}},"draw"),pve={draw:jtt,getClasses:Xtt}});var gve={};hr(gve,{diagram:()=>Ktt});var Ktt,yve=N(()=>{"use strict";yye();Eye();Cye();mve();Ktt={parser:gye,db:kye,renderer:pve,styles:Sye}});var hF,fF,S4,bve,dF,Ha,ru,C4,wve,ert,A4,Tve,kve,Eve,Sve,Cve,fC,Hf,dC=N(()=>{"use strict";hF={L:"left",R:"right",T:"top",B:"bottom"},fF={L:o(t=>`${t},${t/2} 0,${t} 0,0`,"L"),R:o(t=>`0,${t/2} ${t},0 ${t},${t}`,"R"),T:o(t=>`0,0 ${t},0 ${t/2},${t}`,"T"),B:o(t=>`${t/2},0 ${t},${t} 0,${t}`,"B")},S4={L:o((t,e)=>t-e+2,"L"),R:o((t,e)=>t-2,"R"),T:o((t,e)=>t-e+2,"T"),B:o((t,e)=>t-2,"B")},bve=o(function(t){return Ha(t)?t==="L"?"R":"L":t==="T"?"B":"T"},"getOppositeArchitectureDirection"),dF=o(function(t){let e=t;return e==="L"||e==="R"||e==="T"||e==="B"},"isArchitectureDirection"),Ha=o(function(t){let e=t;return e==="L"||e==="R"},"isArchitectureDirectionX"),ru=o(function(t){let e=t;return e==="T"||e==="B"},"isArchitectureDirectionY"),C4=o(function(t,e){let r=Ha(t)&&ru(e),n=ru(t)&&Ha(e);return r||n},"isArchitectureDirectionXY"),wve=o(function(t){let e=t[0],r=t[1],n=Ha(e)&&ru(r),i=ru(e)&&Ha(r);return n||i},"isArchitecturePairXY"),ert=o(function(t){return t!=="LL"&&t!=="RR"&&t!=="TT"&&t!=="BB"},"isValidArchitectureDirectionPair"),A4=o(function(t,e){let r=`${t}${e}`;return ert(r)?r:void 0},"getArchitectureDirectionPair"),Tve=o(function([t,e],r){let n=r[0],i=r[1];return Ha(n)?ru(i)?[t+(n==="L"?-1:1),e+(i==="T"?1:-1)]:[t+(n==="L"?-1:1),e]:Ha(i)?[t+(i==="L"?1:-1),e+(n==="T"?1:-1)]:[t,e+(n==="T"?1:-1)]},"shiftPositionByArchitectureDirectionPair"),kve=o(function(t){return t==="LT"||t==="TL"?[1,1]:t==="BL"||t==="LB"?[1,-1]:t==="BR"||t==="RB"?[-1,-1]:[-1,1]},"getArchitectureDirectionXYFactors"),Eve=o(function(t,e){return C4(t,e)?"bend":Ha(t)?"horizontal":"vertical"},"getArchitectureDirectionAlignment"),Sve=o(function(t){return t.type==="service"},"isArchitectureService"),Cve=o(function(t){return t.type==="junction"},"isArchitectureJunction"),fC=o(t=>t.data(),"edgeData"),Hf=o(t=>t.data(),"nodeData")});function Ri(t){return _ve()[t]}var Ave,vr,trt,rrt,nrt,irt,art,srt,pF,ort,lrt,crt,urt,hrt,frt,drt,_ve,i0,_4=N(()=>{"use strict";Ya();Bi();fS();mi();dC();nr();Ave=lr.architecture,vr=new vf(()=>({nodes:{},groups:{},edges:[],registeredIds:{},config:Ave,dataStructures:void 0,elements:{}})),trt=o(()=>{vr.reset(),Ar()},"clear"),rrt=o(function({id:t,icon:e,in:r,title:n,iconText:i}){if(vr.records.registeredIds[t]!==void 0)throw new Error(`The service id [${t}] is already in use by another ${vr.records.registeredIds[t]}`);if(r!==void 0){if(t===r)throw new Error(`The service [${t}] cannot be placed within itself`);if(vr.records.registeredIds[r]===void 0)throw new Error(`The service [${t}]'s parent does not exist. Please make sure the parent is created before this service`);if(vr.records.registeredIds[r]==="node")throw new Error(`The service [${t}]'s parent is not a group`)}vr.records.registeredIds[t]="node",vr.records.nodes[t]={id:t,type:"service",icon:e,iconText:i,title:n,edges:[],in:r}},"addService"),nrt=o(()=>Object.values(vr.records.nodes).filter(Sve),"getServices"),irt=o(function({id:t,in:e}){vr.records.registeredIds[t]="node",vr.records.nodes[t]={id:t,type:"junction",edges:[],in:e}},"addJunction"),art=o(()=>Object.values(vr.records.nodes).filter(Cve),"getJunctions"),srt=o(()=>Object.values(vr.records.nodes),"getNodes"),pF=o(t=>vr.records.nodes[t],"getNode"),ort=o(function({id:t,icon:e,in:r,title:n}){if(vr.records.registeredIds[t]!==void 0)throw new Error(`The group id [${t}] is already in use by another ${vr.records.registeredIds[t]}`);if(r!==void 0){if(t===r)throw new Error(`The group [${t}] cannot be placed within itself`);if(vr.records.registeredIds[r]===void 0)throw new Error(`The group [${t}]'s parent does not exist. Please make sure the parent is created before this group`);if(vr.records.registeredIds[r]==="node")throw new Error(`The group [${t}]'s parent is not a group`)}vr.records.registeredIds[t]="group",vr.records.groups[t]={id:t,icon:e,title:n,in:r}},"addGroup"),lrt=o(()=>Object.values(vr.records.groups),"getGroups"),crt=o(function({lhsId:t,rhsId:e,lhsDir:r,rhsDir:n,lhsInto:i,rhsInto:a,lhsGroup:s,rhsGroup:l,title:u}){if(!dF(r))throw new Error(`Invalid direction given for left hand side of edge ${t}--${e}. Expected (L,R,T,B) got ${r}`);if(!dF(n))throw new Error(`Invalid direction given for right hand side of edge ${t}--${e}. Expected (L,R,T,B) got ${n}`);if(vr.records.nodes[t]===void 0&&vr.records.groups[t]===void 0)throw new Error(`The left-hand id [${t}] does not yet exist. Please create the service/group before declaring an edge to it.`);if(vr.records.nodes[e]===void 0&&vr.records.groups[t]===void 0)throw new Error(`The right-hand id [${e}] does not yet exist. Please create the service/group before declaring an edge to it.`);let h=vr.records.nodes[t].in,f=vr.records.nodes[e].in;if(s&&h&&f&&h==f)throw new Error(`The left-hand id [${t}] is modified to traverse the group boundary, but the edge does not pass through two groups.`);if(l&&h&&f&&h==f)throw new Error(`The right-hand id [${e}] is modified to traverse the group boundary, but the edge does not pass through two groups.`);let d={lhsId:t,lhsDir:r,lhsInto:i,lhsGroup:s,rhsId:e,rhsDir:n,rhsInto:a,rhsGroup:l,title:u};vr.records.edges.push(d),vr.records.nodes[t]&&vr.records.nodes[e]&&(vr.records.nodes[t].edges.push(vr.records.edges[vr.records.edges.length-1]),vr.records.nodes[e].edges.push(vr.records.edges[vr.records.edges.length-1]))},"addEdge"),urt=o(()=>vr.records.edges,"getEdges"),hrt=o(()=>{if(vr.records.dataStructures===void 0){let t={},e=Object.entries(vr.records.nodes).reduce((l,[u,h])=>(l[u]=h.edges.reduce((f,d)=>{let p=pF(d.lhsId)?.in,m=pF(d.rhsId)?.in;if(p&&m&&p!==m){let g=Eve(d.lhsDir,d.rhsDir);g!=="bend"&&(t[p]??={},t[p][m]=g,t[m]??={},t[m][p]=g)}if(d.lhsId===u){let g=A4(d.lhsDir,d.rhsDir);g&&(f[g]=d.rhsId)}else{let g=A4(d.rhsDir,d.lhsDir);g&&(f[g]=d.lhsId)}return f},{}),l),{}),r=Object.keys(e)[0],n={[r]:1},i=Object.keys(e).reduce((l,u)=>u===r?l:{...l,[u]:1},{}),a=o(l=>{let u={[l]:[0,0]},h=[l];for(;h.length>0;){let f=h.shift();if(f){n[f]=1,delete i[f];let d=e[f],[p,m]=u[f];Object.entries(d).forEach(([g,y])=>{n[y]||(u[y]=Tve([p,m],g),h.push(y))})}}return u},"BFS"),s=[a(r)];for(;Object.keys(i).length>0;)s.push(a(Object.keys(i)[0]));vr.records.dataStructures={adjList:e,spatialMaps:s,groupAlignments:t}}return vr.records.dataStructures},"getDataStructures"),frt=o((t,e)=>{vr.records.elements[t]=e},"setElementForId"),drt=o(t=>vr.records.elements[t],"getElementById"),_ve=o(()=>gi({...Ave,...sr().architecture}),"getConfig"),i0={clear:trt,setDiagramTitle:$r,getDiagramTitle:Ir,setAccTitle:Lr,getAccTitle:Rr,setAccDescription:Nr,getAccDescription:Mr,getConfig:_ve,addService:rrt,getServices:nrt,addJunction:irt,getJunctions:art,getNodes:srt,getNode:pF,addGroup:ort,getGroups:lrt,addEdge:crt,getEdges:urt,setElementForId:frt,getElementById:drt,getDataStructures:hrt};o(Ri,"getConfigField")});var prt,Dve,Lve=N(()=>{"use strict";Lp();vt();L1();_4();prt=o((t,e)=>{Uc(t,e),t.groups.map(e.addGroup),t.services.map(r=>e.addService({...r,type:"service"})),t.junctions.map(r=>e.addJunction({...r,type:"junction"})),t.edges.map(e.addEdge)},"populateDb"),Dve={parse:o(async t=>{let e=await fo("architecture",t);X.debug(e),prt(e,i0)},"parse")}});var mrt,Rve,Nve=N(()=>{"use strict";mrt=o(t=>` + node : x:${t.x} y:${t.y} w:${t.width} h:${t.height}`);let n=t.x,i=t.y,a=Math.abs(n-r.x),s=t.width/2,l=r.xMath.abs(n-e.x)*u){let d=r.y{X.debug("abc88 cutPathAtIntersect",t,e);let r=[],n=t[0],i=!1;return t.forEach(a=>{if(!Urt(e,a)&&!i){let s=Hrt(e,n,a),l=!1;r.forEach(u=>{l=l||u.x===s.x&&u.y===s.y}),r.some(u=>u.x===s.x&&u.y===s.y)||r.push(s),i=!0}else n=a,i||r.push(a)}),r},"cutPathAtIntersect"),e2e=o(function(t,e,r,n,i,a,s){let l=r.points;X.debug("abc88 InsertEdge: edge=",r,"e=",e);let u=!1,h=a.node(e.v);var f=a.node(e.w);f?.intersect&&h?.intersect&&(l=l.slice(1,r.points.length-1),l.unshift(h.intersect(l[0])),l.push(f.intersect(l[l.length-1]))),r.toCluster&&(X.debug("to cluster abc88",n[r.toCluster]),l=Qve(r.points,n[r.toCluster].node),u=!0),r.fromCluster&&(X.debug("from cluster abc88",n[r.fromCluster]),l=Qve(l.reverse(),n[r.fromCluster].node).reverse(),u=!0);let d=l.filter(S=>!Number.isNaN(S.y)),p=No;r.curve&&(i==="graph"||i==="flowchart")&&(p=r.curve);let{x:m,y:g}=ow(r),y=Cl().x(m).y(g).curve(p),v;switch(r.thickness){case"normal":v="edge-thickness-normal";break;case"thick":v="edge-thickness-thick";break;case"invisible":v="edge-thickness-thick";break;default:v=""}switch(r.pattern){case"solid":v+=" edge-pattern-solid";break;case"dotted":v+=" edge-pattern-dotted";break;case"dashed":v+=" edge-pattern-dashed";break}let x=t.append("path").attr("d",y(d)).attr("id",r.id).attr("class"," "+v+(r.classes?" "+r.classes:"")).attr("style",r.style),b="";(me().flowchart.arrowMarkerAbsolute||me().state.arrowMarkerAbsolute)&&(b=mu(!0)),jve(x,r,b,s,i);let T={};return u&&(T.updatedPath=l),T.originalPath=r.points,T},"insertEdge")});var Wrt,r2e,n2e=N(()=>{"use strict";Wrt=o(t=>{let e=new Set;for(let r of t)switch(r){case"x":e.add("right"),e.add("left");break;case"y":e.add("up"),e.add("down");break;default:e.add(r);break}return e},"expandAndDeduplicateDirections"),r2e=o((t,e,r)=>{let n=Wrt(t),i=2,a=e.height+2*r.padding,s=a/i,l=e.width+2*s+r.padding,u=r.padding/2;return n.has("right")&&n.has("left")&&n.has("up")&&n.has("down")?[{x:0,y:0},{x:s,y:0},{x:l/2,y:2*u},{x:l-s,y:0},{x:l,y:0},{x:l,y:-a/3},{x:l+2*u,y:-a/2},{x:l,y:-2*a/3},{x:l,y:-a},{x:l-s,y:-a},{x:l/2,y:-a-2*u},{x:s,y:-a},{x:0,y:-a},{x:0,y:-2*a/3},{x:-2*u,y:-a/2},{x:0,y:-a/3}]:n.has("right")&&n.has("left")&&n.has("up")?[{x:s,y:0},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:s,y:-a},{x:0,y:-a/2}]:n.has("right")&&n.has("left")&&n.has("down")?[{x:0,y:0},{x:s,y:-a},{x:l-s,y:-a},{x:l,y:0}]:n.has("right")&&n.has("up")&&n.has("down")?[{x:0,y:0},{x:l,y:-s},{x:l,y:-a+s},{x:0,y:-a}]:n.has("left")&&n.has("up")&&n.has("down")?[{x:l,y:0},{x:0,y:-s},{x:0,y:-a+s},{x:l,y:-a}]:n.has("right")&&n.has("left")?[{x:s,y:0},{x:s,y:-u},{x:l-s,y:-u},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:l-s,y:-a+u},{x:s,y:-a+u},{x:s,y:-a},{x:0,y:-a/2}]:n.has("up")&&n.has("down")?[{x:l/2,y:0},{x:0,y:-u},{x:s,y:-u},{x:s,y:-a+u},{x:0,y:-a+u},{x:l/2,y:-a},{x:l,y:-a+u},{x:l-s,y:-a+u},{x:l-s,y:-u},{x:l,y:-u}]:n.has("right")&&n.has("up")?[{x:0,y:0},{x:l,y:-s},{x:0,y:-a}]:n.has("right")&&n.has("down")?[{x:0,y:0},{x:l,y:0},{x:0,y:-a}]:n.has("left")&&n.has("up")?[{x:l,y:0},{x:0,y:-s},{x:l,y:-a}]:n.has("left")&&n.has("down")?[{x:l,y:0},{x:0,y:0},{x:l,y:-a}]:n.has("right")?[{x:s,y:-u},{x:s,y:-u},{x:l-s,y:-u},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:l-s,y:-a+u},{x:s,y:-a+u},{x:s,y:-a+u}]:n.has("left")?[{x:s,y:0},{x:s,y:-u},{x:l-s,y:-u},{x:l-s,y:-a+u},{x:s,y:-a+u},{x:s,y:-a},{x:0,y:-a/2}]:n.has("up")?[{x:s,y:-u},{x:s,y:-a+u},{x:0,y:-a+u},{x:l/2,y:-a},{x:l,y:-a+u},{x:l-s,y:-a+u},{x:l-s,y:-u}]:n.has("down")?[{x:l/2,y:0},{x:0,y:-u},{x:s,y:-u},{x:s,y:-a+u},{x:l-s,y:-a+u},{x:l-s,y:-u},{x:l,y:-u}]:[{x:0,y:0}]},"getArrowPoints")});function qrt(t,e){return t.intersect(e)}var i2e,a2e=N(()=>{"use strict";o(qrt,"intersectNode");i2e=qrt});function Yrt(t,e,r,n){var i=t.x,a=t.y,s=i-n.x,l=a-n.y,u=Math.sqrt(e*e*l*l+r*r*s*s),h=Math.abs(e*r*s/u);n.x{"use strict";o(Yrt,"intersectEllipse");EC=Yrt});function Xrt(t,e,r){return EC(t,e,e,r)}var s2e,o2e=N(()=>{"use strict";zF();o(Xrt,"intersectCircle");s2e=Xrt});function jrt(t,e,r,n){var i,a,s,l,u,h,f,d,p,m,g,y,v,x,b;if(i=e.y-t.y,s=t.x-e.x,u=e.x*t.y-t.x*e.y,p=i*r.x+s*r.y+u,m=i*n.x+s*n.y+u,!(p!==0&&m!==0&&l2e(p,m))&&(a=n.y-r.y,l=r.x-n.x,h=n.x*r.y-r.x*n.y,f=a*t.x+l*t.y+h,d=a*e.x+l*e.y+h,!(f!==0&&d!==0&&l2e(f,d))&&(g=i*l-a*s,g!==0)))return y=Math.abs(g/2),v=s*h-l*u,x=v<0?(v-y)/g:(v+y)/g,v=a*u-i*h,b=v<0?(v-y)/g:(v+y)/g,{x,y:b}}function l2e(t,e){return t*e>0}var c2e,u2e=N(()=>{"use strict";o(jrt,"intersectLine");o(l2e,"sameSign");c2e=jrt});function Krt(t,e,r){var n=t.x,i=t.y,a=[],s=Number.POSITIVE_INFINITY,l=Number.POSITIVE_INFINITY;typeof e.forEach=="function"?e.forEach(function(g){s=Math.min(s,g.x),l=Math.min(l,g.y)}):(s=Math.min(s,e.x),l=Math.min(l,e.y));for(var u=n-t.width/2-s,h=i-t.height/2-l,f=0;f1&&a.sort(function(g,y){var v=g.x-r.x,x=g.y-r.y,b=Math.sqrt(v*v+x*x),T=y.x-r.x,S=y.y-r.y,w=Math.sqrt(T*T+S*S);return b{"use strict";u2e();h2e=Krt;o(Krt,"intersectPolygon")});var Qrt,d2e,p2e=N(()=>{"use strict";Qrt=o((t,e)=>{var r=t.x,n=t.y,i=e.x-r,a=e.y-n,s=t.width/2,l=t.height/2,u,h;return Math.abs(a)*s>Math.abs(i)*l?(a<0&&(l=-l),u=a===0?0:l*i/a,h=l):(i<0&&(s=-s),u=s,h=i===0?0:s*a/i),{x:r+u,y:n+h}},"intersectRect"),d2e=Qrt});var In,GF=N(()=>{"use strict";a2e();o2e();zF();f2e();p2e();In={node:i2e,circle:s2e,ellipse:EC,polygon:h2e,rect:d2e}});function Xl(t,e,r,n){return t.insert("polygon",":first-child").attr("points",n.map(function(i){return i.x+","+i.y}).join(" ")).attr("class","label-container").attr("transform","translate("+-e/2+","+r/2+")")}var Ni,Jn,VF=N(()=>{"use strict";wC();ao();Gt();fr();pr();er();Ni=o(async(t,e,r,n)=>{let i=me(),a,s=e.useHtmlLabels||dr(i.flowchart.htmlLabels);r?a=r:a="node default";let l=t.insert("g").attr("class",a).attr("id",e.domId||e.id),u=l.insert("g").attr("class","label").attr("style",e.labelStyle),h;e.labelText===void 0?h="":h=typeof e.labelText=="string"?e.labelText:e.labelText[0];let f=u.node(),d;e.labelType==="markdown"?d=qn(u,wr(na(h),i),{useHtmlLabels:s,width:e.width||i.flowchart.wrappingWidth,classes:"markdown-node-label"},i):d=f.appendChild(await ks(wr(na(h),i),e.labelStyle,!1,n));let p=d.getBBox(),m=e.padding/2;if(dr(i.flowchart.htmlLabels)){let g=d.children[0],y=Ge(d),v=g.getElementsByTagName("img");if(v){let x=h.replace(/]*>/g,"").trim()==="";await Promise.all([...v].map(b=>new Promise(T=>{function S(){if(b.style.display="flex",b.style.flexDirection="column",x){let w=i.fontSize?i.fontSize:window.getComputedStyle(document.body).fontSize,_=parseInt(w,10)*5+"px";b.style.minWidth=_,b.style.maxWidth=_}else b.style.width="100%";T(b)}o(S,"setupImage"),setTimeout(()=>{b.complete&&S()}),b.addEventListener("error",S),b.addEventListener("load",S)})))}p=g.getBoundingClientRect(),y.attr("width",p.width),y.attr("height",p.height)}return s?u.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"):u.attr("transform","translate(0, "+-p.height/2+")"),e.centerLabel&&u.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),u.insert("rect",":first-child"),{shapeSvg:l,bbox:p,halfPadding:m,label:u}},"labelHelper"),Jn=o((t,e)=>{let r=e.node().getBBox();t.width=r.width,t.height=r.height},"updateNodeBounds");o(Xl,"insertPolygonShape")});var Zrt,m2e,g2e=N(()=>{"use strict";VF();yt();Gt();GF();Zrt=o(async(t,e)=>{e.useHtmlLabels||me().flowchart.htmlLabels||(e.centerLabel=!0);let{shapeSvg:n,bbox:i,halfPadding:a}=await Ni(t,e,"node "+e.classes,!0);X.info("Classes = ",e.classes);let s=n.insert("rect",":first-child");return s.attr("rx",e.rx).attr("ry",e.ry).attr("x",-i.width/2-a).attr("y",-i.height/2-a).attr("width",i.width+e.padding).attr("height",i.height+e.padding),Jn(e,s),e.intersect=function(l){return In.rect(e,l)},n},"note"),m2e=Zrt});function UF(t,e,r,n){let i=[],a=o(l=>{i.push(l,0)},"addBorder"),s=o(l=>{i.push(0,l)},"skipBorder");e.includes("t")?(X.debug("add top border"),a(r)):s(r),e.includes("r")?(X.debug("add right border"),a(n)):s(n),e.includes("b")?(X.debug("add bottom border"),a(r)):s(r),e.includes("l")?(X.debug("add left border"),a(n)):s(n),t.attr("stroke-dasharray",i.join(" "))}var y2e,bo,v2e,Jrt,ent,tnt,rnt,nnt,int,ant,snt,ont,lnt,cnt,unt,hnt,fnt,dnt,pnt,mnt,gnt,ynt,x2e,vnt,xnt,b2e,SC,HF,T2e,w2e=N(()=>{"use strict";fr();Gt();pr();yt();n2e();wC();GF();g2e();VF();y2e=o(t=>t?" "+t:"","formatClass"),bo=o((t,e)=>`${e||"node default"}${y2e(t.classes)} ${y2e(t.class)}`,"getClassesFromNode"),v2e=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Ni(t,e,bo(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=i+a,l=[{x:s/2,y:0},{x:s,y:-s/2},{x:s/2,y:-s},{x:0,y:-s/2}];X.info("Question main (Circle)");let u=Xl(r,s,s,l);return u.attr("style",e.style),Jn(e,u),e.intersect=function(h){return X.warn("Intersect called"),In.polygon(e,l,h)},r},"question"),Jrt=o((t,e)=>{let r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),n=28,i=[{x:0,y:n/2},{x:n/2,y:0},{x:0,y:-n/2},{x:-n/2,y:0}];return r.insert("polygon",":first-child").attr("points",i.map(function(s){return s.x+","+s.y}).join(" ")).attr("class","state-start").attr("r",7).attr("width",28).attr("height",28),e.width=28,e.height=28,e.intersect=function(s){return In.circle(e,14,s)},r},"choice"),ent=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Ni(t,e,bo(e,void 0),!0),i=4,a=n.height+e.padding,s=a/i,l=n.width+2*s+e.padding,u=[{x:s,y:0},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:s,y:-a},{x:0,y:-a/2}],h=Xl(r,l,a,u);return h.attr("style",e.style),Jn(e,h),e.intersect=function(f){return In.polygon(e,u,f)},r},"hexagon"),tnt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Ni(t,e,void 0,!0),i=2,a=n.height+2*e.padding,s=a/i,l=n.width+2*s+e.padding,u=r2e(e.directions,n,e),h=Xl(r,l,a,u);return h.attr("style",e.style),Jn(e,h),e.intersect=function(f){return In.polygon(e,u,f)},r},"block_arrow"),rnt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Ni(t,e,bo(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:-a/2,y:0},{x:i,y:0},{x:i,y:-a},{x:-a/2,y:-a},{x:0,y:-a/2}];return Xl(r,i,a,s).attr("style",e.style),e.width=i+a,e.height=a,e.intersect=function(u){return In.polygon(e,s,u)},r},"rect_left_inv_arrow"),nnt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Ni(t,e,bo(e),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:-2*a/6,y:0},{x:i-a/6,y:0},{x:i+2*a/6,y:-a},{x:a/6,y:-a}],l=Xl(r,i,a,s);return l.attr("style",e.style),Jn(e,l),e.intersect=function(u){return In.polygon(e,s,u)},r},"lean_right"),int=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Ni(t,e,bo(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:2*a/6,y:0},{x:i+a/6,y:0},{x:i-2*a/6,y:-a},{x:-a/6,y:-a}],l=Xl(r,i,a,s);return l.attr("style",e.style),Jn(e,l),e.intersect=function(u){return In.polygon(e,s,u)},r},"lean_left"),ant=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Ni(t,e,bo(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:-2*a/6,y:0},{x:i+2*a/6,y:0},{x:i-a/6,y:-a},{x:a/6,y:-a}],l=Xl(r,i,a,s);return l.attr("style",e.style),Jn(e,l),e.intersect=function(u){return In.polygon(e,s,u)},r},"trapezoid"),snt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Ni(t,e,bo(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:a/6,y:0},{x:i-a/6,y:0},{x:i+2*a/6,y:-a},{x:-2*a/6,y:-a}],l=Xl(r,i,a,s);return l.attr("style",e.style),Jn(e,l),e.intersect=function(u){return In.polygon(e,s,u)},r},"inv_trapezoid"),ont=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Ni(t,e,bo(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:0,y:0},{x:i+a/2,y:0},{x:i,y:-a/2},{x:i+a/2,y:-a},{x:0,y:-a}],l=Xl(r,i,a,s);return l.attr("style",e.style),Jn(e,l),e.intersect=function(u){return In.polygon(e,s,u)},r},"rect_right_inv_arrow"),lnt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Ni(t,e,bo(e,void 0),!0),i=n.width+e.padding,a=i/2,s=a/(2.5+i/50),l=n.height+s+e.padding,u="M 0,"+s+" a "+a+","+s+" 0,0,0 "+i+" 0 a "+a+","+s+" 0,0,0 "+-i+" 0 l 0,"+l+" a "+a+","+s+" 0,0,0 "+i+" 0 l 0,"+-l,h=r.attr("label-offset-y",s).insert("path",":first-child").attr("style",e.style).attr("d",u).attr("transform","translate("+-i/2+","+-(l/2+s)+")");return Jn(e,h),e.intersect=function(f){let d=In.rect(e,f),p=d.x-e.x;if(a!=0&&(Math.abs(p)e.height/2-s)){let m=s*s*(1-p*p/(a*a));m!=0&&(m=Math.sqrt(m)),m=s-m,f.y-e.y>0&&(m=-m),d.y+=m}return d},r},"cylinder"),cnt=o(async(t,e)=>{let{shapeSvg:r,bbox:n,halfPadding:i}=await Ni(t,e,"node "+e.classes+" "+e.class,!0),a=r.insert("rect",":first-child"),s=e.positioned?e.width:n.width+e.padding,l=e.positioned?e.height:n.height+e.padding,u=e.positioned?-s/2:-n.width/2-i,h=e.positioned?-l/2:-n.height/2-i;if(a.attr("class","basic label-container").attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",u).attr("y",h).attr("width",s).attr("height",l),e.props){let f=new Set(Object.keys(e.props));e.props.borders&&(UF(a,e.props.borders,s,l),f.delete("borders")),f.forEach(d=>{X.warn(`Unknown node property ${d}`)})}return Jn(e,a),e.intersect=function(f){return In.rect(e,f)},r},"rect"),unt=o(async(t,e)=>{let{shapeSvg:r,bbox:n,halfPadding:i}=await Ni(t,e,"node "+e.classes,!0),a=r.insert("rect",":first-child"),s=e.positioned?e.width:n.width+e.padding,l=e.positioned?e.height:n.height+e.padding,u=e.positioned?-s/2:-n.width/2-i,h=e.positioned?-l/2:-n.height/2-i;if(a.attr("class","basic cluster composite label-container").attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",u).attr("y",h).attr("width",s).attr("height",l),e.props){let f=new Set(Object.keys(e.props));e.props.borders&&(UF(a,e.props.borders,s,l),f.delete("borders")),f.forEach(d=>{X.warn(`Unknown node property ${d}`)})}return Jn(e,a),e.intersect=function(f){return In.rect(e,f)},r},"composite"),hnt=o(async(t,e)=>{let{shapeSvg:r}=await Ni(t,e,"label",!0);X.trace("Classes = ",e.class);let n=r.insert("rect",":first-child"),i=0,a=0;if(n.attr("width",i).attr("height",a),r.attr("class","label edgeLabel"),e.props){let s=new Set(Object.keys(e.props));e.props.borders&&(UF(n,e.props.borders,i,a),s.delete("borders")),s.forEach(l=>{X.warn(`Unknown node property ${l}`)})}return Jn(e,n),e.intersect=function(s){return In.rect(e,s)},r},"labelRect");o(UF,"applyNodePropertyBorders");fnt=o(async(t,e)=>{let r;e.classes?r="node "+e.classes:r="node default";let n=t.insert("g").attr("class",r).attr("id",e.domId||e.id),i=n.insert("rect",":first-child"),a=n.insert("line"),s=n.insert("g").attr("class","label"),l=e.labelText.flat?e.labelText.flat():e.labelText,u="";typeof l=="object"?u=l[0]:u=l,X.info("Label text abc79",u,l,typeof l=="object");let h=s.node().appendChild(await ks(u,e.labelStyle,!0,!0)),f={width:0,height:0};if(dr(me().flowchart.htmlLabels)){let y=h.children[0],v=Ge(h);f=y.getBoundingClientRect(),v.attr("width",f.width),v.attr("height",f.height)}X.info("Text 2",l);let d=l.slice(1,l.length),p=h.getBBox(),m=s.node().appendChild(await ks(d.join?d.join("
    "):d,e.labelStyle,!0,!0));if(dr(me().flowchart.htmlLabels)){let y=m.children[0],v=Ge(m);f=y.getBoundingClientRect(),v.attr("width",f.width),v.attr("height",f.height)}let g=e.padding/2;return Ge(m).attr("transform","translate( "+(f.width>p.width?0:(p.width-f.width)/2)+", "+(p.height+g+5)+")"),Ge(h).attr("transform","translate( "+(f.width{let{shapeSvg:r,bbox:n}=await Ni(t,e,bo(e,void 0),!0),i=n.height+e.padding,a=n.width+i/4+e.padding,s=r.insert("rect",":first-child").attr("style",e.style).attr("rx",i/2).attr("ry",i/2).attr("x",-a/2).attr("y",-i/2).attr("width",a).attr("height",i);return Jn(e,s),e.intersect=function(l){return In.rect(e,l)},r},"stadium"),pnt=o(async(t,e)=>{let{shapeSvg:r,bbox:n,halfPadding:i}=await Ni(t,e,bo(e,void 0),!0),a=r.insert("circle",":first-child");return a.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",n.width/2+i).attr("width",n.width+e.padding).attr("height",n.height+e.padding),X.info("Circle main"),Jn(e,a),e.intersect=function(s){return X.info("Circle intersect",e,n.width/2+i,s),In.circle(e,n.width/2+i,s)},r},"circle"),mnt=o(async(t,e)=>{let{shapeSvg:r,bbox:n,halfPadding:i}=await Ni(t,e,bo(e,void 0),!0),a=5,s=r.insert("g",":first-child"),l=s.insert("circle"),u=s.insert("circle");return s.attr("class",e.class),l.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",n.width/2+i+a).attr("width",n.width+e.padding+a*2).attr("height",n.height+e.padding+a*2),u.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",n.width/2+i).attr("width",n.width+e.padding).attr("height",n.height+e.padding),X.info("DoubleCircle main"),Jn(e,l),e.intersect=function(h){return X.info("DoubleCircle intersect",e,n.width/2+i+a,h),In.circle(e,n.width/2+i+a,h)},r},"doublecircle"),gnt=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Ni(t,e,bo(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:0,y:0},{x:i,y:0},{x:i,y:-a},{x:0,y:-a},{x:0,y:0},{x:-8,y:0},{x:i+8,y:0},{x:i+8,y:-a},{x:-8,y:-a},{x:-8,y:0}],l=Xl(r,i,a,s);return l.attr("style",e.style),Jn(e,l),e.intersect=function(u){return In.polygon(e,s,u)},r},"subroutine"),ynt=o((t,e)=>{let r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),n=r.insert("circle",":first-child");return n.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),Jn(e,n),e.intersect=function(i){return In.circle(e,7,i)},r},"start"),x2e=o((t,e,r)=>{let n=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),i=70,a=10;r==="LR"&&(i=10,a=70);let s=n.append("rect").attr("x",-1*i/2).attr("y",-1*a/2).attr("width",i).attr("height",a).attr("class","fork-join");return Jn(e,s),e.height=e.height+e.padding/2,e.width=e.width+e.padding/2,e.intersect=function(l){return In.rect(e,l)},n},"forkJoin"),vnt=o((t,e)=>{let r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),n=r.insert("circle",":first-child"),i=r.insert("circle",":first-child");return i.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),n.attr("class","state-end").attr("r",5).attr("width",10).attr("height",10),Jn(e,i),e.intersect=function(a){return In.circle(e,7,a)},r},"end"),xnt=o(async(t,e)=>{let r=e.padding/2,n=4,i=8,a;e.classes?a="node "+e.classes:a="node default";let s=t.insert("g").attr("class",a).attr("id",e.domId||e.id),l=s.insert("rect",":first-child"),u=s.insert("line"),h=s.insert("line"),f=0,d=n,p=s.insert("g").attr("class","label"),m=0,g=e.classData.annotations?.[0],y=e.classData.annotations[0]?"\xAB"+e.classData.annotations[0]+"\xBB":"",v=p.node().appendChild(await ks(y,e.labelStyle,!0,!0)),x=v.getBBox();if(dr(me().flowchart.htmlLabels)){let C=v.children[0],D=Ge(v);x=C.getBoundingClientRect(),D.attr("width",x.width),D.attr("height",x.height)}e.classData.annotations[0]&&(d+=x.height+n,f+=x.width);let b=e.classData.label;e.classData.type!==void 0&&e.classData.type!==""&&(me().flowchart.htmlLabels?b+="<"+e.classData.type+">":b+="<"+e.classData.type+">");let T=p.node().appendChild(await ks(b,e.labelStyle,!0,!0));Ge(T).attr("class","classTitle");let S=T.getBBox();if(dr(me().flowchart.htmlLabels)){let C=T.children[0],D=Ge(T);S=C.getBoundingClientRect(),D.attr("width",S.width),D.attr("height",S.height)}d+=S.height+n,S.width>f&&(f=S.width);let w=[];e.classData.members.forEach(async C=>{let D=C.getDisplayDetails(),O=D.displayText;me().flowchart.htmlLabels&&(O=O.replace(//g,">"));let R=p.node().appendChild(await ks(O,D.cssStyle?D.cssStyle:e.labelStyle,!0,!0)),k=R.getBBox();if(dr(me().flowchart.htmlLabels)){let L=R.children[0],A=Ge(R);k=L.getBoundingClientRect(),A.attr("width",k.width),A.attr("height",k.height)}k.width>f&&(f=k.width),d+=k.height+n,w.push(R)}),d+=i;let E=[];if(e.classData.methods.forEach(async C=>{let D=C.getDisplayDetails(),O=D.displayText;me().flowchart.htmlLabels&&(O=O.replace(//g,">"));let R=p.node().appendChild(await ks(O,D.cssStyle?D.cssStyle:e.labelStyle,!0,!0)),k=R.getBBox();if(dr(me().flowchart.htmlLabels)){let L=R.children[0],A=Ge(R);k=L.getBoundingClientRect(),A.attr("width",k.width),A.attr("height",k.height)}k.width>f&&(f=k.width),d+=k.height+n,E.push(R)}),d+=i,g){let C=(f-x.width)/2;Ge(v).attr("transform","translate( "+(-1*f/2+C)+", "+-1*d/2+")"),m=x.height+n}let _=(f-S.width)/2;return Ge(T).attr("transform","translate( "+(-1*f/2+_)+", "+(-1*d/2+m)+")"),m+=S.height+n,u.attr("class","divider").attr("x1",-f/2-r).attr("x2",f/2+r).attr("y1",-d/2-r+i+m).attr("y2",-d/2-r+i+m),m+=i,w.forEach(C=>{Ge(C).attr("transform","translate( "+-f/2+", "+(-1*d/2+m+i/2)+")");let D=C?.getBBox();m+=(D?.height??0)+n}),m+=i,h.attr("class","divider").attr("x1",-f/2-r).attr("x2",f/2+r).attr("y1",-d/2-r+i+m).attr("y2",-d/2-r+i+m),m+=i,E.forEach(C=>{Ge(C).attr("transform","translate( "+-f/2+", "+(-1*d/2+m)+")");let D=C?.getBBox();m+=(D?.height??0)+n}),l.attr("style",e.style).attr("class","outer title-state").attr("x",-f/2-r).attr("y",-(d/2)-r).attr("width",f+e.padding).attr("height",d+e.padding),Jn(e,l),e.intersect=function(C){return In.rect(e,C)},s},"class_box"),b2e={rhombus:v2e,composite:unt,question:v2e,rect:cnt,labelRect:hnt,rectWithTitle:fnt,choice:Jrt,circle:pnt,doublecircle:mnt,stadium:dnt,hexagon:ent,block_arrow:tnt,rect_left_inv_arrow:rnt,lean_right:nnt,lean_left:int,trapezoid:ant,inv_trapezoid:snt,rect_right_inv_arrow:ont,cylinder:lnt,start:ynt,end:vnt,note:m2e,subroutine:gnt,fork:x2e,join:x2e,class_box:xnt},SC={},HF=o(async(t,e,r)=>{let n,i;if(e.link){let a;me().securityLevel==="sandbox"?a="_top":e.linkTarget&&(a=e.linkTarget||"_blank"),n=t.insert("svg:a").attr("xlink:href",e.link).attr("target",a),i=await b2e[e.shape](n,e,r)}else i=await b2e[e.shape](t,e,r),n=i;return e.tooltip&&i.attr("title",e.tooltip),e.class&&i.attr("class","node default "+e.class),SC[e.id]=n,e.haveCallback&&SC[e.id].attr("class",SC[e.id].attr("class")+" clickable"),n},"insertNode"),T2e=o(t=>{let e=SC[t.id];X.trace("Transforming node",t.diff,t,"translate("+(t.x-t.width/2-5)+", "+t.width/2+")");let r=8,n=t.diff||0;return t.clusterNode?e.attr("transform","translate("+(t.x+n-t.width/2)+", "+(t.y-t.height/2-r)+")"):e.attr("transform","translate("+t.x+", "+t.y+")"),n},"positionNode")});function k2e(t,e,r=!1){let n=t,i="default";(n?.classes?.length||0)>0&&(i=(n?.classes??[]).join(" ")),i=i+" flowchart-label";let a=0,s="",l;switch(n.type){case"round":a=5,s="rect";break;case"composite":a=0,s="composite",l=0;break;case"square":s="rect";break;case"diamond":s="question";break;case"hexagon":s="hexagon";break;case"block_arrow":s="block_arrow";break;case"odd":s="rect_left_inv_arrow";break;case"lean_right":s="lean_right";break;case"lean_left":s="lean_left";break;case"trapezoid":s="trapezoid";break;case"inv_trapezoid":s="inv_trapezoid";break;case"rect_left_inv_arrow":s="rect_left_inv_arrow";break;case"circle":s="circle";break;case"ellipse":s="ellipse";break;case"stadium":s="stadium";break;case"subroutine":s="subroutine";break;case"cylinder":s="cylinder";break;case"group":s="rect";break;case"doublecircle":s="doublecircle";break;default:s="rect"}let u=D9(n?.styles??[]),h=n.label,f=n.size??{width:0,height:0,x:0,y:0};return{labelStyle:u.labelStyle,shape:s,labelText:h,rx:a,ry:a,class:i,style:u.style,id:n.id,directions:n.directions,width:f.width,height:f.height,x:f.x,y:f.y,positioned:r,intersect:void 0,type:n.type,padding:l??tr()?.block?.padding??0}}async function bnt(t,e,r){let n=k2e(e,r,!1);if(n.type==="group")return;let i=tr(),a=await HF(t,n,{config:i}),s=a.node().getBBox(),l=r.getBlock(n.id);l.size={width:s.width,height:s.height,x:0,y:0,node:a},r.setBlock(l),a.remove()}async function Tnt(t,e,r){let n=k2e(e,r,!0);if(r.getBlock(n.id).type!=="space"){let a=tr();await HF(t,n,{config:a}),e.intersect=n?.intersect,T2e(n)}}async function WF(t,e,r,n){for(let i of e)await n(t,i,r),i.children&&await WF(t,i.children,r,n)}async function E2e(t,e,r){await WF(t,e,r,bnt)}async function S2e(t,e,r){await WF(t,e,r,Tnt)}async function C2e(t,e,r,n,i){let a=new sn({multigraph:!0,compound:!0});a.setGraph({rankdir:"TB",nodesep:10,ranksep:10,marginx:8,marginy:8});for(let s of r)s.size&&a.setNode(s.id,{width:s.size.width,height:s.size.height,intersect:s.intersect});for(let s of e)if(s.start&&s.end){let l=n.getBlock(s.start),u=n.getBlock(s.end);if(l?.size&&u?.size){let h=l.size,f=u.size,d=[{x:h.x,y:h.y},{x:h.x+(f.x-h.x)/2,y:h.y+(f.y-h.y)/2},{x:f.x,y:f.y}];e2e(t,{v:s.start,w:s.end,name:s.id},{...s,arrowTypeEnd:s.arrowTypeEnd,arrowTypeStart:s.arrowTypeStart,points:d,classes:"edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1"},void 0,"block",a,i),s.label&&(await Zve(t,{...s,label:s.label,labelStyle:"stroke: #333; stroke-width: 1.5px;fill:none;",arrowTypeEnd:s.arrowTypeEnd,arrowTypeStart:s.arrowTypeStart,points:d,classes:"edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1"}),Jve({...s,x:d[1].x,y:d[1].y},{originalPath:d}))}}}var A2e=N(()=>{"use strict";Wo();mi();t2e();w2e();er();o(k2e,"getNodeFromBlock");o(bnt,"calculateBlockSize");o(Tnt,"insertBlockPositioned");o(WF,"performOperations");o(E2e,"calculateBlockSizes");o(S2e,"insertBlocks");o(C2e,"insertEdges")});var wnt,knt,_2e,D2e=N(()=>{"use strict";fr();mi();Vve();yt();xi();qve();A2e();wnt=o(function(t,e){return e.db.getClasses()},"getClasses"),knt=o(async function(t,e,r,n){let{securityLevel:i,block:a}=tr(),s=n.db,l;i==="sandbox"&&(l=Ge("#i"+e));let u=i==="sandbox"?Ge(l.nodes()[0].contentDocument.body):Ge("body"),h=i==="sandbox"?u.select(`[id="${e}"]`):Ge(`[id="${e}"]`);Gve(h,["point","circle","cross"],n.type,e);let d=s.getBlocks(),p=s.getBlocksFlat(),m=s.getEdges(),g=h.insert("g").attr("class","block");await E2e(g,d,s);let y=Wve(s);if(await S2e(g,d,s),await C2e(g,m,p,s,e),y){let v=y,x=Math.max(1,Math.round(.125*(v.width/v.height))),b=v.height+x+10,T=v.width+10,{useMaxWidth:S}=a;fn(h,b,T,!!S),X.debug("Here Bounds",y,v),h.attr("viewBox",`${v.x-5} ${v.y-5} ${v.width+10} ${v.height+10}`)}},"draw"),_2e={draw:knt,getClasses:wnt}});var L2e={};ur(L2e,{diagram:()=>Ent});var Ent,R2e=N(()=>{"use strict";Rve();Fve();zve();D2e();Ent={parser:Lve,db:Bve,renderer:_2e,styles:$ve}});var qF,YF,D4,I2e,XF,ja,ru,L4,O2e,_nt,R4,P2e,B2e,F2e,$2e,z2e,CC,Yf,AC=N(()=>{"use strict";qF={L:"left",R:"right",T:"top",B:"bottom"},YF={L:o(t=>`${t},${t/2} 0,${t} 0,0`,"L"),R:o(t=>`0,${t/2} ${t},0 ${t},${t}`,"R"),T:o(t=>`0,0 ${t},0 ${t/2},${t}`,"T"),B:o(t=>`${t/2},0 ${t},${t} 0,${t}`,"B")},D4={L:o((t,e)=>t-e+2,"L"),R:o((t,e)=>t-2,"R"),T:o((t,e)=>t-e+2,"T"),B:o((t,e)=>t-2,"B")},I2e=o(function(t){return ja(t)?t==="L"?"R":"L":t==="T"?"B":"T"},"getOppositeArchitectureDirection"),XF=o(function(t){let e=t;return e==="L"||e==="R"||e==="T"||e==="B"},"isArchitectureDirection"),ja=o(function(t){let e=t;return e==="L"||e==="R"},"isArchitectureDirectionX"),ru=o(function(t){let e=t;return e==="T"||e==="B"},"isArchitectureDirectionY"),L4=o(function(t,e){let r=ja(t)&&ru(e),n=ru(t)&&ja(e);return r||n},"isArchitectureDirectionXY"),O2e=o(function(t){let e=t[0],r=t[1],n=ja(e)&&ru(r),i=ru(e)&&ja(r);return n||i},"isArchitecturePairXY"),_nt=o(function(t){return t!=="LL"&&t!=="RR"&&t!=="TT"&&t!=="BB"},"isValidArchitectureDirectionPair"),R4=o(function(t,e){let r=`${t}${e}`;return _nt(r)?r:void 0},"getArchitectureDirectionPair"),P2e=o(function([t,e],r){let n=r[0],i=r[1];return ja(n)?ru(i)?[t+(n==="L"?-1:1),e+(i==="T"?1:-1)]:[t+(n==="L"?-1:1),e]:ja(i)?[t+(i==="L"?1:-1),e+(n==="T"?1:-1)]:[t,e+(n==="T"?1:-1)]},"shiftPositionByArchitectureDirectionPair"),B2e=o(function(t){return t==="LT"||t==="TL"?[1,1]:t==="BL"||t==="LB"?[1,-1]:t==="BR"||t==="RB"?[-1,-1]:[-1,1]},"getArchitectureDirectionXYFactors"),F2e=o(function(t,e){return L4(t,e)?"bend":ja(t)?"horizontal":"vertical"},"getArchitectureDirectionAlignment"),$2e=o(function(t){return t.type==="service"},"isArchitectureService"),z2e=o(function(t){return t.type==="junction"},"isArchitectureJunction"),CC=o(t=>t.data(),"edgeData"),Yf=o(t=>t.data(),"nodeData")});function Mi(t){return V2e()[t]}var G2e,vr,Dnt,Lnt,Rnt,Nnt,Mnt,Int,jF,Ont,Pnt,Bnt,Fnt,$nt,znt,Gnt,V2e,o0,N4=N(()=>{"use strict";_a();mi();SS();ci();AC();er();G2e=or.architecture,vr=new Tf(()=>({nodes:{},groups:{},edges:[],registeredIds:{},config:G2e,dataStructures:void 0,elements:{}})),Dnt=o(()=>{vr.reset(),kr()},"clear"),Lnt=o(function({id:t,icon:e,in:r,title:n,iconText:i}){if(vr.records.registeredIds[t]!==void 0)throw new Error(`The service id [${t}] is already in use by another ${vr.records.registeredIds[t]}`);if(r!==void 0){if(t===r)throw new Error(`The service [${t}] cannot be placed within itself`);if(vr.records.registeredIds[r]===void 0)throw new Error(`The service [${t}]'s parent does not exist. Please make sure the parent is created before this service`);if(vr.records.registeredIds[r]==="node")throw new Error(`The service [${t}]'s parent is not a group`)}vr.records.registeredIds[t]="node",vr.records.nodes[t]={id:t,type:"service",icon:e,iconText:i,title:n,edges:[],in:r}},"addService"),Rnt=o(()=>Object.values(vr.records.nodes).filter($2e),"getServices"),Nnt=o(function({id:t,in:e}){vr.records.registeredIds[t]="node",vr.records.nodes[t]={id:t,type:"junction",edges:[],in:e}},"addJunction"),Mnt=o(()=>Object.values(vr.records.nodes).filter(z2e),"getJunctions"),Int=o(()=>Object.values(vr.records.nodes),"getNodes"),jF=o(t=>vr.records.nodes[t],"getNode"),Ont=o(function({id:t,icon:e,in:r,title:n}){if(vr.records.registeredIds[t]!==void 0)throw new Error(`The group id [${t}] is already in use by another ${vr.records.registeredIds[t]}`);if(r!==void 0){if(t===r)throw new Error(`The group [${t}] cannot be placed within itself`);if(vr.records.registeredIds[r]===void 0)throw new Error(`The group [${t}]'s parent does not exist. Please make sure the parent is created before this group`);if(vr.records.registeredIds[r]==="node")throw new Error(`The group [${t}]'s parent is not a group`)}vr.records.registeredIds[t]="group",vr.records.groups[t]={id:t,icon:e,title:n,in:r}},"addGroup"),Pnt=o(()=>Object.values(vr.records.groups),"getGroups"),Bnt=o(function({lhsId:t,rhsId:e,lhsDir:r,rhsDir:n,lhsInto:i,rhsInto:a,lhsGroup:s,rhsGroup:l,title:u}){if(!XF(r))throw new Error(`Invalid direction given for left hand side of edge ${t}--${e}. Expected (L,R,T,B) got ${r}`);if(!XF(n))throw new Error(`Invalid direction given for right hand side of edge ${t}--${e}. Expected (L,R,T,B) got ${n}`);if(vr.records.nodes[t]===void 0&&vr.records.groups[t]===void 0)throw new Error(`The left-hand id [${t}] does not yet exist. Please create the service/group before declaring an edge to it.`);if(vr.records.nodes[e]===void 0&&vr.records.groups[t]===void 0)throw new Error(`The right-hand id [${e}] does not yet exist. Please create the service/group before declaring an edge to it.`);let h=vr.records.nodes[t].in,f=vr.records.nodes[e].in;if(s&&h&&f&&h==f)throw new Error(`The left-hand id [${t}] is modified to traverse the group boundary, but the edge does not pass through two groups.`);if(l&&h&&f&&h==f)throw new Error(`The right-hand id [${e}] is modified to traverse the group boundary, but the edge does not pass through two groups.`);let d={lhsId:t,lhsDir:r,lhsInto:i,lhsGroup:s,rhsId:e,rhsDir:n,rhsInto:a,rhsGroup:l,title:u};vr.records.edges.push(d),vr.records.nodes[t]&&vr.records.nodes[e]&&(vr.records.nodes[t].edges.push(vr.records.edges[vr.records.edges.length-1]),vr.records.nodes[e].edges.push(vr.records.edges[vr.records.edges.length-1]))},"addEdge"),Fnt=o(()=>vr.records.edges,"getEdges"),$nt=o(()=>{if(vr.records.dataStructures===void 0){let t={},e=Object.entries(vr.records.nodes).reduce((l,[u,h])=>(l[u]=h.edges.reduce((f,d)=>{let p=jF(d.lhsId)?.in,m=jF(d.rhsId)?.in;if(p&&m&&p!==m){let g=F2e(d.lhsDir,d.rhsDir);g!=="bend"&&(t[p]??={},t[p][m]=g,t[m]??={},t[m][p]=g)}if(d.lhsId===u){let g=R4(d.lhsDir,d.rhsDir);g&&(f[g]=d.rhsId)}else{let g=R4(d.rhsDir,d.lhsDir);g&&(f[g]=d.lhsId)}return f},{}),l),{}),r=Object.keys(e)[0],n={[r]:1},i=Object.keys(e).reduce((l,u)=>u===r?l:{...l,[u]:1},{}),a=o(l=>{let u={[l]:[0,0]},h=[l];for(;h.length>0;){let f=h.shift();if(f){n[f]=1,delete i[f];let d=e[f],[p,m]=u[f];Object.entries(d).forEach(([g,y])=>{n[y]||(u[y]=P2e([p,m],g),h.push(y))})}}return u},"BFS"),s=[a(r)];for(;Object.keys(i).length>0;)s.push(a(Object.keys(i)[0]));vr.records.dataStructures={adjList:e,spatialMaps:s,groupAlignments:t}}return vr.records.dataStructures},"getDataStructures"),znt=o((t,e)=>{vr.records.elements[t]=e},"setElementForId"),Gnt=o(t=>vr.records.elements[t],"getElementById"),V2e=o(()=>$n({...G2e,...tr().architecture}),"getConfig"),o0={clear:Dnt,setDiagramTitle:Or,getDiagramTitle:Nr,setAccTitle:Ar,getAccTitle:Dr,setAccDescription:Lr,getAccDescription:Rr,getConfig:V2e,addService:Lnt,getServices:Rnt,addJunction:Nnt,getJunctions:Mnt,getNodes:Int,getNode:jF,addGroup:Ont,getGroups:Pnt,addEdge:Bnt,getEdges:Fnt,setElementForId:znt,getElementById:Gnt,getDataStructures:$nt};o(Mi,"getConfigField")});var Vnt,U2e,H2e=N(()=>{"use strict";bf();yt();Mp();N4();Vnt=o((t,e)=>{Jo(t,e),t.groups.map(e.addGroup),t.services.map(r=>e.addService({...r,type:"service"})),t.junctions.map(r=>e.addJunction({...r,type:"junction"})),t.edges.map(e.addEdge)},"populateDb"),U2e={parse:o(async t=>{let e=await vs("architecture",t);X.debug(e),Vnt(e,o0)},"parse")}});var Unt,W2e,q2e=N(()=>{"use strict";Unt=o(t=>` .edge { stroke-width: ${t.archEdgeWidth}; stroke: ${t.archEdgeColor}; @@ -2580,20 +2580,43 @@ Expecting `+J.join(", ")+", got '"+(this.terminals_[Y]||Y)+"'":Se="Parse error o display: -webkit-box; -webkit-box-orient: vertical; } -`,"getStyles"),Rve=mrt});var gF=Ii((D4,mF)=>{"use strict";o(function(e,r){typeof D4=="object"&&typeof mF=="object"?mF.exports=r():typeof define=="function"&&define.amd?define([],r):typeof D4=="object"?D4.layoutBase=r():e.layoutBase=r()},"webpackUniversalModuleDefinition")(D4,function(){return function(t){var e={};function r(n){if(e[n])return e[n].exports;var i=e[n]={i:n,l:!1,exports:{}};return t[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return o(r,"__webpack_require__"),r.m=t,r.c=e,r.i=function(n){return n},r.d=function(n,i,a){r.o(n,i)||Object.defineProperty(n,i,{configurable:!1,enumerable:!0,get:a})},r.n=function(n){var i=n&&n.__esModule?o(function(){return n.default},"getDefault"):o(function(){return n},"getModuleExports");return r.d(i,"a",i),i},r.o=function(n,i){return Object.prototype.hasOwnProperty.call(n,i)},r.p="",r(r.s=28)}([function(t,e,r){"use strict";function n(){}o(n,"LayoutConstants"),n.QUALITY=1,n.DEFAULT_CREATE_BENDS_AS_NEEDED=!1,n.DEFAULT_INCREMENTAL=!1,n.DEFAULT_ANIMATION_ON_LAYOUT=!0,n.DEFAULT_ANIMATION_DURING_LAYOUT=!1,n.DEFAULT_ANIMATION_PERIOD=50,n.DEFAULT_UNIFORM_LEAF_NODE_SIZES=!1,n.DEFAULT_GRAPH_MARGIN=15,n.NODE_DIMENSIONS_INCLUDE_LABELS=!1,n.SIMPLE_NODE_SIZE=40,n.SIMPLE_NODE_HALF_SIZE=n.SIMPLE_NODE_SIZE/2,n.EMPTY_COMPOUND_NODE_SIZE=40,n.MIN_EDGE_LENGTH=1,n.WORLD_BOUNDARY=1e6,n.INITIAL_WORLD_BOUNDARY=n.WORLD_BOUNDARY/1e3,n.WORLD_CENTER_X=1200,n.WORLD_CENTER_Y=900,t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(8),a=r(9);function s(u,h,f){n.call(this,f),this.isOverlapingSourceAndTarget=!1,this.vGraphObject=f,this.bendpoints=[],this.source=u,this.target=h}o(s,"LEdge"),s.prototype=Object.create(n.prototype);for(var l in n)s[l]=n[l];s.prototype.getSource=function(){return this.source},s.prototype.getTarget=function(){return this.target},s.prototype.isInterGraph=function(){return this.isInterGraph},s.prototype.getLength=function(){return this.length},s.prototype.isOverlapingSourceAndTarget=function(){return this.isOverlapingSourceAndTarget},s.prototype.getBendpoints=function(){return this.bendpoints},s.prototype.getLca=function(){return this.lca},s.prototype.getSourceInLca=function(){return this.sourceInLca},s.prototype.getTargetInLca=function(){return this.targetInLca},s.prototype.getOtherEnd=function(u){if(this.source===u)return this.target;if(this.target===u)return this.source;throw"Node is not incident with this edge"},s.prototype.getOtherEndInGraph=function(u,h){for(var f=this.getOtherEnd(u),d=h.getGraphManager().getRoot();;){if(f.getOwner()==h)return f;if(f.getOwner()==d)break;f=f.getOwner().getParent()}return null},s.prototype.updateLength=function(){var u=new Array(4);this.isOverlapingSourceAndTarget=i.getIntersection(this.target.getRect(),this.source.getRect(),u),this.isOverlapingSourceAndTarget||(this.lengthX=u[0]-u[2],this.lengthY=u[1]-u[3],Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY))},s.prototype.updateLengthSimple=function(){this.lengthX=this.target.getCenterX()-this.source.getCenterX(),this.lengthY=this.target.getCenterY()-this.source.getCenterY(),Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY)},t.exports=s},function(t,e,r){"use strict";function n(i){this.vGraphObject=i}o(n,"LGraphObject"),t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(10),a=r(13),s=r(0),l=r(16),u=r(5);function h(d,p,m,g){m==null&&g==null&&(g=p),n.call(this,g),d.graphManager!=null&&(d=d.graphManager),this.estimatedSize=i.MIN_VALUE,this.inclusionTreeDepth=i.MAX_VALUE,this.vGraphObject=g,this.edges=[],this.graphManager=d,m!=null&&p!=null?this.rect=new a(p.x,p.y,m.width,m.height):this.rect=new a}o(h,"LNode"),h.prototype=Object.create(n.prototype);for(var f in n)h[f]=n[f];h.prototype.getEdges=function(){return this.edges},h.prototype.getChild=function(){return this.child},h.prototype.getOwner=function(){return this.owner},h.prototype.getWidth=function(){return this.rect.width},h.prototype.setWidth=function(d){this.rect.width=d},h.prototype.getHeight=function(){return this.rect.height},h.prototype.setHeight=function(d){this.rect.height=d},h.prototype.getCenterX=function(){return this.rect.x+this.rect.width/2},h.prototype.getCenterY=function(){return this.rect.y+this.rect.height/2},h.prototype.getCenter=function(){return new u(this.rect.x+this.rect.width/2,this.rect.y+this.rect.height/2)},h.prototype.getLocation=function(){return new u(this.rect.x,this.rect.y)},h.prototype.getRect=function(){return this.rect},h.prototype.getDiagonal=function(){return Math.sqrt(this.rect.width*this.rect.width+this.rect.height*this.rect.height)},h.prototype.getHalfTheDiagonal=function(){return Math.sqrt(this.rect.height*this.rect.height+this.rect.width*this.rect.width)/2},h.prototype.setRect=function(d,p){this.rect.x=d.x,this.rect.y=d.y,this.rect.width=p.width,this.rect.height=p.height},h.prototype.setCenter=function(d,p){this.rect.x=d-this.rect.width/2,this.rect.y=p-this.rect.height/2},h.prototype.setLocation=function(d,p){this.rect.x=d,this.rect.y=p},h.prototype.moveBy=function(d,p){this.rect.x+=d,this.rect.y+=p},h.prototype.getEdgeListToNode=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(y.target==d){if(y.source!=g)throw"Incorrect edge source!";p.push(y)}}),p},h.prototype.getEdgesBetween=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(!(y.source==g||y.target==g))throw"Incorrect edge source and/or target";(y.target==d||y.source==d)&&p.push(y)}),p},h.prototype.getNeighborsList=function(){var d=new Set,p=this;return p.edges.forEach(function(m){if(m.source==p)d.add(m.target);else{if(m.target!=p)throw"Incorrect incidency!";d.add(m.source)}}),d},h.prototype.withChildren=function(){var d=new Set,p,m;if(d.add(this),this.child!=null)for(var g=this.child.getNodes(),y=0;yp?(this.rect.x-=(this.labelWidth-p)/2,this.setWidth(this.labelWidth)):this.labelPosHorizontal=="right"&&this.setWidth(p+this.labelWidth)),this.labelHeight&&(this.labelPosVertical=="top"?(this.rect.y-=this.labelHeight,this.setHeight(m+this.labelHeight)):this.labelPosVertical=="center"&&this.labelHeight>m?(this.rect.y-=(this.labelHeight-m)/2,this.setHeight(this.labelHeight)):this.labelPosVertical=="bottom"&&this.setHeight(m+this.labelHeight))}}},h.prototype.getInclusionTreeDepth=function(){if(this.inclusionTreeDepth==i.MAX_VALUE)throw"assert failed";return this.inclusionTreeDepth},h.prototype.transform=function(d){var p=this.rect.x;p>s.WORLD_BOUNDARY?p=s.WORLD_BOUNDARY:p<-s.WORLD_BOUNDARY&&(p=-s.WORLD_BOUNDARY);var m=this.rect.y;m>s.WORLD_BOUNDARY?m=s.WORLD_BOUNDARY:m<-s.WORLD_BOUNDARY&&(m=-s.WORLD_BOUNDARY);var g=new u(p,m),y=d.inverseTransformPoint(g);this.setLocation(y.x,y.y)},h.prototype.getLeft=function(){return this.rect.x},h.prototype.getRight=function(){return this.rect.x+this.rect.width},h.prototype.getTop=function(){return this.rect.y},h.prototype.getBottom=function(){return this.rect.y+this.rect.height},h.prototype.getParent=function(){return this.owner==null?null:this.owner.getParent()},t.exports=h},function(t,e,r){"use strict";var n=r(0);function i(){}o(i,"FDLayoutConstants");for(var a in n)i[a]=n[a];i.MAX_ITERATIONS=2500,i.DEFAULT_EDGE_LENGTH=50,i.DEFAULT_SPRING_STRENGTH=.45,i.DEFAULT_REPULSION_STRENGTH=4500,i.DEFAULT_GRAVITY_STRENGTH=.4,i.DEFAULT_COMPOUND_GRAVITY_STRENGTH=1,i.DEFAULT_GRAVITY_RANGE_FACTOR=3.8,i.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=1.5,i.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION=!0,i.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION=!0,i.DEFAULT_COOLING_FACTOR_INCREMENTAL=.3,i.COOLING_ADAPTATION_FACTOR=.33,i.ADAPTATION_LOWER_NODE_LIMIT=1e3,i.ADAPTATION_UPPER_NODE_LIMIT=5e3,i.MAX_NODE_DISPLACEMENT_INCREMENTAL=100,i.MAX_NODE_DISPLACEMENT=i.MAX_NODE_DISPLACEMENT_INCREMENTAL*3,i.MIN_REPULSION_DIST=i.DEFAULT_EDGE_LENGTH/10,i.CONVERGENCE_CHECK_PERIOD=100,i.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=.1,i.MIN_EDGE_LENGTH=1,i.GRID_CALCULATION_CHECK_PERIOD=10,t.exports=i},function(t,e,r){"use strict";function n(i,a){i==null&&a==null?(this.x=0,this.y=0):(this.x=i,this.y=a)}o(n,"PointD"),n.prototype.getX=function(){return this.x},n.prototype.getY=function(){return this.y},n.prototype.setX=function(i){this.x=i},n.prototype.setY=function(i){this.y=i},n.prototype.getDifference=function(i){return new DimensionD(this.x-i.x,this.y-i.y)},n.prototype.getCopy=function(){return new n(this.x,this.y)},n.prototype.translate=function(i){return this.x+=i.width,this.y+=i.height,this},t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(10),a=r(0),s=r(7),l=r(3),u=r(1),h=r(13),f=r(12),d=r(11);function p(g,y,v){n.call(this,v),this.estimatedSize=i.MIN_VALUE,this.margin=a.DEFAULT_GRAPH_MARGIN,this.edges=[],this.nodes=[],this.isConnected=!1,this.parent=g,y!=null&&y instanceof s?this.graphManager=y:y!=null&&y instanceof Layout&&(this.graphManager=y.graphManager)}o(p,"LGraph"),p.prototype=Object.create(n.prototype);for(var m in n)p[m]=n[m];p.prototype.getNodes=function(){return this.nodes},p.prototype.getEdges=function(){return this.edges},p.prototype.getGraphManager=function(){return this.graphManager},p.prototype.getParent=function(){return this.parent},p.prototype.getLeft=function(){return this.left},p.prototype.getRight=function(){return this.right},p.prototype.getTop=function(){return this.top},p.prototype.getBottom=function(){return this.bottom},p.prototype.isConnected=function(){return this.isConnected},p.prototype.add=function(g,y,v){if(y==null&&v==null){var x=g;if(this.graphManager==null)throw"Graph has no graph mgr!";if(this.getNodes().indexOf(x)>-1)throw"Node already in graph!";return x.owner=this,this.getNodes().push(x),x}else{var b=g;if(!(this.getNodes().indexOf(y)>-1&&this.getNodes().indexOf(v)>-1))throw"Source or target not in graph!";if(!(y.owner==v.owner&&y.owner==this))throw"Both owners must be this graph!";return y.owner!=v.owner?null:(b.source=y,b.target=v,b.isInterGraph=!1,this.getEdges().push(b),y.edges.push(b),v!=y&&v.edges.push(b),b)}},p.prototype.remove=function(g){var y=g;if(g instanceof l){if(y==null)throw"Node is null!";if(!(y.owner!=null&&y.owner==this))throw"Owner graph is invalid!";if(this.graphManager==null)throw"Owner graph manager is invalid!";for(var v=y.edges.slice(),x,b=v.length,w=0;w-1&&E>-1))throw"Source and/or target doesn't know this edge!";x.source.edges.splice(T,1),x.target!=x.source&&x.target.edges.splice(E,1);var C=x.source.owner.getEdges().indexOf(x);if(C==-1)throw"Not in owner's edge list!";x.source.owner.getEdges().splice(C,1)}},p.prototype.updateLeftTop=function(){for(var g=i.MAX_VALUE,y=i.MAX_VALUE,v,x,b,w=this.getNodes(),C=w.length,T=0;Tv&&(g=v),y>x&&(y=x)}return g==i.MAX_VALUE?null:(w[0].getParent().paddingLeft!=null?b=w[0].getParent().paddingLeft:b=this.margin,this.left=y-b,this.top=g-b,new f(this.left,this.top))},p.prototype.updateBounds=function(g){for(var y=i.MAX_VALUE,v=-i.MAX_VALUE,x=i.MAX_VALUE,b=-i.MAX_VALUE,w,C,T,E,A,S=this.nodes,_=S.length,I=0;I<_;I++){var L=S[I];g&&L.child!=null&&L.updateBounds(),w=L.getLeft(),C=L.getRight(),T=L.getTop(),E=L.getBottom(),y>w&&(y=w),vT&&(x=T),bw&&(y=w),vT&&(x=T),b=this.nodes.length){var _=0;v.forEach(function(I){I.owner==g&&_++}),_==this.nodes.length&&(this.isConnected=!0)}},t.exports=p},function(t,e,r){"use strict";var n,i=r(1);function a(s){n=r(6),this.layout=s,this.graphs=[],this.edges=[]}o(a,"LGraphManager"),a.prototype.addRoot=function(){var s=this.layout.newGraph(),l=this.layout.newNode(null),u=this.add(s,l);return this.setRootGraph(u),this.rootGraph},a.prototype.add=function(s,l,u,h,f){if(u==null&&h==null&&f==null){if(s==null)throw"Graph is null!";if(l==null)throw"Parent node is null!";if(this.graphs.indexOf(s)>-1)throw"Graph already in this graph mgr!";if(this.graphs.push(s),s.parent!=null)throw"Already has a parent!";if(l.child!=null)throw"Already has a child!";return s.parent=l,l.child=s,s}else{f=u,h=l,u=s;var d=h.getOwner(),p=f.getOwner();if(!(d!=null&&d.getGraphManager()==this))throw"Source not in this graph mgr!";if(!(p!=null&&p.getGraphManager()==this))throw"Target not in this graph mgr!";if(d==p)return u.isInterGraph=!1,d.add(u,h,f);if(u.isInterGraph=!0,u.source=h,u.target=f,this.edges.indexOf(u)>-1)throw"Edge already in inter-graph edge list!";if(this.edges.push(u),!(u.source!=null&&u.target!=null))throw"Edge source and/or target is null!";if(!(u.source.edges.indexOf(u)==-1&&u.target.edges.indexOf(u)==-1))throw"Edge already in source and/or target incidency list!";return u.source.edges.push(u),u.target.edges.push(u),u}},a.prototype.remove=function(s){if(s instanceof n){var l=s;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 u=[];u=u.concat(l.getEdges());for(var h,f=u.length,d=0;d=s.getRight()?l[0]+=Math.min(s.getX()-a.getX(),a.getRight()-s.getRight()):s.getX()<=a.getX()&&s.getRight()>=a.getRight()&&(l[0]+=Math.min(a.getX()-s.getX(),s.getRight()-a.getRight())),a.getY()<=s.getY()&&a.getBottom()>=s.getBottom()?l[1]+=Math.min(s.getY()-a.getY(),a.getBottom()-s.getBottom()):s.getY()<=a.getY()&&s.getBottom()>=a.getBottom()&&(l[1]+=Math.min(a.getY()-s.getY(),s.getBottom()-a.getBottom()));var f=Math.abs((s.getCenterY()-a.getCenterY())/(s.getCenterX()-a.getCenterX()));s.getCenterY()===a.getCenterY()&&s.getCenterX()===a.getCenterX()&&(f=1);var d=f*l[0],p=l[1]/f;l[0]d)return l[0]=u,l[1]=m,l[2]=f,l[3]=S,!1;if(hf)return l[0]=p,l[1]=h,l[2]=E,l[3]=d,!1;if(uf?(l[0]=y,l[1]=v,k=!0):(l[0]=g,l[1]=m,k=!0):R===M&&(u>f?(l[0]=p,l[1]=m,k=!0):(l[0]=x,l[1]=v,k=!0)),-O===M?f>u?(l[2]=A,l[3]=S,D=!0):(l[2]=E,l[3]=T,D=!0):O===M&&(f>u?(l[2]=C,l[3]=T,D=!0):(l[2]=_,l[3]=S,D=!0)),k&&D)return!1;if(u>f?h>d?(P=this.getCardinalDirection(R,M,4),B=this.getCardinalDirection(O,M,2)):(P=this.getCardinalDirection(-R,M,3),B=this.getCardinalDirection(-O,M,1)):h>d?(P=this.getCardinalDirection(-R,M,1),B=this.getCardinalDirection(-O,M,3)):(P=this.getCardinalDirection(R,M,2),B=this.getCardinalDirection(O,M,4)),!k)switch(P){case 1:z=m,F=u+-w/M,l[0]=F,l[1]=z;break;case 2:F=x,z=h+b*M,l[0]=F,l[1]=z;break;case 3:z=v,F=u+w/M,l[0]=F,l[1]=z;break;case 4:F=y,z=h+-b*M,l[0]=F,l[1]=z;break}if(!D)switch(B){case 1:U=T,$=f+-L/M,l[2]=$,l[3]=U;break;case 2:$=_,U=d+I*M,l[2]=$,l[3]=U;break;case 3:U=S,$=f+L/M,l[2]=$,l[3]=U;break;case 4:$=A,U=d+-I*M,l[2]=$,l[3]=U;break}}return!1},i.getCardinalDirection=function(a,s,l){return a>s?l:1+l%4},i.getIntersection=function(a,s,l,u){if(u==null)return this.getIntersection2(a,s,l);var h=a.x,f=a.y,d=s.x,p=s.y,m=l.x,g=l.y,y=u.x,v=u.y,x=void 0,b=void 0,w=void 0,C=void 0,T=void 0,E=void 0,A=void 0,S=void 0,_=void 0;return w=p-f,T=h-d,A=d*f-h*p,C=v-g,E=m-y,S=y*g-m*v,_=w*E-C*T,_===0?null:(x=(T*S-E*A)/_,b=(C*A-w*S)/_,new n(x,b))},i.angleOfVector=function(a,s,l,u){var h=void 0;return a!==l?(h=Math.atan((u-s)/(l-a)),l=0){var v=(-m+Math.sqrt(m*m-4*p*g))/(2*p),x=(-m-Math.sqrt(m*m-4*p*g))/(2*p),b=null;return v>=0&&v<=1?[v]:x>=0&&x<=1?[x]:b}else return null},i.HALF_PI=.5*Math.PI,i.ONE_AND_HALF_PI=1.5*Math.PI,i.TWO_PI=2*Math.PI,i.THREE_PI=3*Math.PI,t.exports=i},function(t,e,r){"use strict";function n(){}o(n,"IMath"),n.sign=function(i){return i>0?1:i<0?-1:0},n.floor=function(i){return i<0?Math.ceil(i):Math.floor(i)},n.ceil=function(i){return i<0?Math.floor(i):Math.ceil(i)},t.exports=n},function(t,e,r){"use strict";function n(){}o(n,"Integer"),n.MAX_VALUE=2147483647,n.MIN_VALUE=-2147483648,t.exports=n},function(t,e,r){"use strict";var n=function(){function h(f,d){for(var p=0;p"u"?"undefined":n(a);return a==null||s!="object"&&s!="function"},t.exports=i},function(t,e,r){"use strict";function n(m){if(Array.isArray(m)){for(var g=0,y=Array(m.length);g0&&g;){for(w.push(T[0]);w.length>0&&g;){var E=w[0];w.splice(0,1),b.add(E);for(var A=E.getEdges(),x=0;x-1&&T.splice(L,1)}b=new Set,C=new Map}}return m},p.prototype.createDummyNodesForBendpoints=function(m){for(var g=[],y=m.source,v=this.graphManager.calcLowestCommonAncestor(m.source,m.target),x=0;x0){for(var v=this.edgeToDummyNodes.get(y),x=0;x=0&&g.splice(S,1);var _=C.getNeighborsList();_.forEach(function(k){if(y.indexOf(k)<0){var D=v.get(k),R=D-1;R==1&&E.push(k),v.set(k,R)}})}y=y.concat(E),(g.length==1||g.length==2)&&(x=!0,b=g[0])}return b},p.prototype.setGraphManager=function(m){this.graphManager=m},t.exports=p},function(t,e,r){"use strict";function n(){}o(n,"RandomSeed"),n.seed=1,n.x=0,n.nextDouble=function(){return n.x=Math.sin(n.seed++)*1e4,n.x-Math.floor(n.x)},t.exports=n},function(t,e,r){"use strict";var n=r(5);function i(a,s){this.lworldOrgX=0,this.lworldOrgY=0,this.ldeviceOrgX=0,this.ldeviceOrgY=0,this.lworldExtX=1,this.lworldExtY=1,this.ldeviceExtX=1,this.ldeviceExtY=1}o(i,"Transform"),i.prototype.getWorldOrgX=function(){return this.lworldOrgX},i.prototype.setWorldOrgX=function(a){this.lworldOrgX=a},i.prototype.getWorldOrgY=function(){return this.lworldOrgY},i.prototype.setWorldOrgY=function(a){this.lworldOrgY=a},i.prototype.getWorldExtX=function(){return this.lworldExtX},i.prototype.setWorldExtX=function(a){this.lworldExtX=a},i.prototype.getWorldExtY=function(){return this.lworldExtY},i.prototype.setWorldExtY=function(a){this.lworldExtY=a},i.prototype.getDeviceOrgX=function(){return this.ldeviceOrgX},i.prototype.setDeviceOrgX=function(a){this.ldeviceOrgX=a},i.prototype.getDeviceOrgY=function(){return this.ldeviceOrgY},i.prototype.setDeviceOrgY=function(a){this.ldeviceOrgY=a},i.prototype.getDeviceExtX=function(){return this.ldeviceExtX},i.prototype.setDeviceExtX=function(a){this.ldeviceExtX=a},i.prototype.getDeviceExtY=function(){return this.ldeviceExtY},i.prototype.setDeviceExtY=function(a){this.ldeviceExtY=a},i.prototype.transformX=function(a){var s=0,l=this.lworldExtX;return l!=0&&(s=this.ldeviceOrgX+(a-this.lworldOrgX)*this.ldeviceExtX/l),s},i.prototype.transformY=function(a){var s=0,l=this.lworldExtY;return l!=0&&(s=this.ldeviceOrgY+(a-this.lworldOrgY)*this.ldeviceExtY/l),s},i.prototype.inverseTransformX=function(a){var s=0,l=this.ldeviceExtX;return l!=0&&(s=this.lworldOrgX+(a-this.ldeviceOrgX)*this.lworldExtX/l),s},i.prototype.inverseTransformY=function(a){var s=0,l=this.ldeviceExtY;return l!=0&&(s=this.lworldOrgY+(a-this.ldeviceOrgY)*this.lworldExtY/l),s},i.prototype.inverseTransformPoint=function(a){var s=new n(this.inverseTransformX(a.x),this.inverseTransformY(a.y));return s},t.exports=i},function(t,e,r){"use strict";function n(d){if(Array.isArray(d)){for(var p=0,m=Array(d.length);pa.ADAPTATION_LOWER_NODE_LIMIT&&(this.coolingFactor=Math.max(this.coolingFactor*a.COOLING_ADAPTATION_FACTOR,this.coolingFactor-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*this.coolingFactor*(1-a.COOLING_ADAPTATION_FACTOR))),this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT_INCREMENTAL):(d>a.ADAPTATION_LOWER_NODE_LIMIT?this.coolingFactor=Math.max(a.COOLING_ADAPTATION_FACTOR,1-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*(1-a.COOLING_ADAPTATION_FACTOR)):this.coolingFactor=1,this.initialCoolingFactor=this.coolingFactor,this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT),this.maxIterations=Math.max(this.getAllNodes().length*5,this.maxIterations),this.displacementThresholdPerNode=3*a.DEFAULT_EDGE_LENGTH/100,this.totalDisplacementThreshold=this.displacementThresholdPerNode*this.getAllNodes().length,this.repulsionRange=this.calcRepulsionRange()},h.prototype.calcSpringForces=function(){for(var d=this.getAllEdges(),p,m=0;m0&&arguments[0]!==void 0?arguments[0]:!0,p=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,m,g,y,v,x=this.getAllNodes(),b;if(this.useFRGridVariant)for(this.totalIterations%a.GRID_CALCULATION_CHECK_PERIOD==1&&d&&this.updateGrid(),b=new Set,m=0;mw||b>w)&&(d.gravitationForceX=-this.gravityConstant*y,d.gravitationForceY=-this.gravityConstant*v)):(w=p.getEstimatedSize()*this.compoundGravityRangeFactor,(x>w||b>w)&&(d.gravitationForceX=-this.gravityConstant*y*this.compoundGravityConstant,d.gravitationForceY=-this.gravityConstant*v*this.compoundGravityConstant))},h.prototype.isConverged=function(){var d,p=!1;return this.totalIterations>this.maxIterations/3&&(p=Math.abs(this.totalDisplacement-this.oldTotalDisplacement)<2),d=this.totalDisplacement=x.length||w>=x[0].length)){for(var C=0;Ch},"_defaultCompareFunction")}]),l}();t.exports=s},function(t,e,r){"use strict";function n(){}o(n,"SVD"),n.svd=function(i){this.U=null,this.V=null,this.s=null,this.m=0,this.n=0,this.m=i.length,this.n=i[0].length;var a=Math.min(this.m,this.n);this.s=function(xt){for(var ut=[];xt-- >0;)ut.push(0);return ut}(Math.min(this.m+1,this.n)),this.U=function(xt){var ut=o(function Et(ft){if(ft.length==0)return 0;for(var yt=[],nt=0;nt0;)ut.push(0);return ut}(this.n),l=function(xt){for(var ut=[];xt-- >0;)ut.push(0);return ut}(this.m),u=!0,h=!0,f=Math.min(this.m-1,this.n),d=Math.max(0,Math.min(this.n-2,this.m)),p=0;p=0;M--)if(this.s[M]!==0){for(var P=M+1;P=0;te--){if(function(xt,ut){return xt&&ut}(te0;){var le=void 0,J=void 0;for(le=D-2;le>=-1&&le!==-1;le--)if(Math.abs(s[le])<=ce+ee*(Math.abs(this.s[le])+Math.abs(this.s[le+1]))){s[le]=0;break}if(le===D-2)J=4;else{var Se=void 0;for(Se=D-1;Se>=le&&Se!==le;Se--){var se=(Se!==D?Math.abs(s[Se]):0)+(Se!==le+1?Math.abs(s[Se-1]):0);if(Math.abs(this.s[Se])<=ce+ee*se){this.s[Se]=0;break}}Se===le?J=3:Se===D-1?J=1:(J=2,le=Se)}switch(le++,J){case 1:{var ae=s[D-2];s[D-2]=0;for(var Oe=D-2;Oe>=le;Oe--){var ye=n.hypot(this.s[Oe],ae),Be=this.s[Oe]/ye,He=ae/ye;if(this.s[Oe]=ye,Oe!==le&&(ae=-He*s[Oe-1],s[Oe-1]=Be*s[Oe-1]),h)for(var ze=0;ze=this.s[le+1]);){var ot=this.s[le];if(this.s[le]=this.s[le+1],this.s[le+1]=ot,h&&leMath.abs(a)?(s=a/i,s=Math.abs(i)*Math.sqrt(1+s*s)):a!=0?(s=i/a,s=Math.abs(a)*Math.sqrt(1+s*s)):s=0,s},t.exports=n},function(t,e,r){"use strict";var n=function(){function s(l,u){for(var h=0;h2&&arguments[2]!==void 0?arguments[2]:1,f=arguments.length>3&&arguments[3]!==void 0?arguments[3]:-1,d=arguments.length>4&&arguments[4]!==void 0?arguments[4]:-1;i(this,s),this.sequence1=l,this.sequence2=u,this.match_score=h,this.mismatch_penalty=f,this.gap_penalty=d,this.iMax=l.length+1,this.jMax=u.length+1,this.grid=new Array(this.iMax);for(var p=0;p=0;l--){var u=this.listeners[l];u.event===a&&u.callback===s&&this.listeners.splice(l,1)}},i.emit=function(a,s){for(var l=0;l{"use strict";o(function(e,r){typeof L4=="object"&&typeof yF=="object"?yF.exports=r(gF()):typeof define=="function"&&define.amd?define(["layout-base"],r):typeof L4=="object"?L4.coseBase=r(gF()):e.coseBase=r(e.layoutBase)},"webpackUniversalModuleDefinition")(L4,function(t){return(()=>{"use strict";var e={45:(a,s,l)=>{var u={};u.layoutBase=l(551),u.CoSEConstants=l(806),u.CoSEEdge=l(767),u.CoSEGraph=l(880),u.CoSEGraphManager=l(578),u.CoSELayout=l(765),u.CoSENode=l(991),u.ConstraintHandler=l(902),a.exports=u},806:(a,s,l)=>{var u=l(551).FDLayoutConstants;function h(){}o(h,"CoSEConstants");for(var f in u)h[f]=u[f];h.DEFAULT_USE_MULTI_LEVEL_SCALING=!1,h.DEFAULT_RADIAL_SEPARATION=u.DEFAULT_EDGE_LENGTH,h.DEFAULT_COMPONENT_SEPERATION=60,h.TILE=!0,h.TILING_PADDING_VERTICAL=10,h.TILING_PADDING_HORIZONTAL=10,h.TRANSFORM_ON_CONSTRAINT_HANDLING=!0,h.ENFORCE_CONSTRAINTS=!0,h.APPLY_LAYOUT=!0,h.RELAX_MOVEMENT_ON_CONSTRAINTS=!0,h.TREE_REDUCTION_ON_INCREMENTAL=!0,h.PURE_INCREMENTAL=h.DEFAULT_INCREMENTAL,a.exports=h},767:(a,s,l)=>{var u=l(551).FDLayoutEdge;function h(d,p,m){u.call(this,d,p,m)}o(h,"CoSEEdge"),h.prototype=Object.create(u.prototype);for(var f in u)h[f]=u[f];a.exports=h},880:(a,s,l)=>{var u=l(551).LGraph;function h(d,p,m){u.call(this,d,p,m)}o(h,"CoSEGraph"),h.prototype=Object.create(u.prototype);for(var f in u)h[f]=u[f];a.exports=h},578:(a,s,l)=>{var u=l(551).LGraphManager;function h(d){u.call(this,d)}o(h,"CoSEGraphManager"),h.prototype=Object.create(u.prototype);for(var f in u)h[f]=u[f];a.exports=h},765:(a,s,l)=>{var u=l(551).FDLayout,h=l(578),f=l(880),d=l(991),p=l(767),m=l(806),g=l(902),y=l(551).FDLayoutConstants,v=l(551).LayoutConstants,x=l(551).Point,b=l(551).PointD,w=l(551).DimensionD,C=l(551).Layout,T=l(551).Integer,E=l(551).IGeometry,A=l(551).LGraph,S=l(551).Transform,_=l(551).LinkedList;function I(){u.call(this),this.toBeTiled={},this.constraints={}}o(I,"CoSELayout"),I.prototype=Object.create(u.prototype);for(var L in u)I[L]=u[L];I.prototype.newGraphManager=function(){var k=new h(this);return this.graphManager=k,k},I.prototype.newGraph=function(k){return new f(null,this.graphManager,k)},I.prototype.newNode=function(k){return new d(this.graphManager,k)},I.prototype.newEdge=function(k){return new p(null,null,k)},I.prototype.initParameters=function(){u.prototype.initParameters.call(this,arguments),this.isSubLayout||(m.DEFAULT_EDGE_LENGTH<10?this.idealEdgeLength=10:this.idealEdgeLength=m.DEFAULT_EDGE_LENGTH,this.useSmartIdealEdgeLengthCalculation=m.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION,this.gravityConstant=y.DEFAULT_GRAVITY_STRENGTH,this.compoundGravityConstant=y.DEFAULT_COMPOUND_GRAVITY_STRENGTH,this.gravityRangeFactor=y.DEFAULT_GRAVITY_RANGE_FACTOR,this.compoundGravityRangeFactor=y.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR,this.prunedNodesAll=[],this.growTreeIterations=0,this.afterGrowthIterations=0,this.isTreeGrowing=!1,this.isGrowthFinished=!1)},I.prototype.initSpringEmbedder=function(){u.prototype.initSpringEmbedder.call(this),this.coolingCycle=0,this.maxCoolingCycle=this.maxIterations/y.CONVERGENCE_CHECK_PERIOD,this.finalTemperature=.04,this.coolingAdjuster=1},I.prototype.layout=function(){var k=v.DEFAULT_CREATE_BENDS_AS_NEEDED;return k&&(this.createBendpoints(),this.graphManager.resetAllEdges()),this.level=0,this.classicLayout()},I.prototype.classicLayout=function(){if(this.nodesWithGravity=this.calculateNodesToApplyGravitationTo(),this.graphManager.setAllNodesToApplyGravitation(this.nodesWithGravity),this.calcNoOfChildrenForAllNodes(),this.graphManager.calcLowestCommonAncestors(),this.graphManager.calcInclusionTreeDepths(),this.graphManager.getRoot().calcEstimatedSize(),this.calcIdealEdgeLengths(),this.incremental){if(m.TREE_REDUCTION_ON_INCREMENTAL){this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var D=new Set(this.getAllNodes()),R=this.nodesWithGravity.filter(function(P){return D.has(P)});this.graphManager.setAllNodesToApplyGravitation(R)}}else{var k=this.getFlatForest();if(k.length>0)this.positionNodesRadially(k);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var D=new Set(this.getAllNodes()),R=this.nodesWithGravity.filter(function(O){return D.has(O)});this.graphManager.setAllNodesToApplyGravitation(R),this.positionNodesRandomly()}}return Object.keys(this.constraints).length>0&&(g.handleConstraints(this),this.initConstraintVariables()),this.initSpringEmbedder(),m.APPLY_LAYOUT&&this.runSpringEmbedder(),!0},I.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%y.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 k=new Set(this.getAllNodes()),D=this.nodesWithGravity.filter(function(M){return k.has(M)});this.graphManager.setAllNodesToApplyGravitation(D),this.graphManager.updateBounds(),this.updateGrid(),m.PURE_INCREMENTAL?this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL/2:this.coolingFactor=y.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()),m.PURE_INCREMENTAL?this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL/2*((100-this.afterGrowthIterations)/100):this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var R=!this.isTreeGrowing&&!this.isGrowthFinished,O=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(R,O),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},I.prototype.getPositionsData=function(){for(var k=this.graphManager.getAllNodes(),D={},R=0;R0&&this.updateDisplacements();for(var R=0;R0&&(O.fixedNodeWeight=P)}}if(this.constraints.relativePlacementConstraint){var B=new Map,F=new Map;if(this.dummyToNodeForVerticalAlignment=new Map,this.dummyToNodeForHorizontalAlignment=new Map,this.fixedNodesOnHorizontal=new Set,this.fixedNodesOnVertical=new Set,this.fixedNodeSet.forEach(function(Z){k.fixedNodesOnHorizontal.add(Z),k.fixedNodesOnVertical.add(Z)}),this.constraints.alignmentConstraint){if(this.constraints.alignmentConstraint.vertical)for(var z=this.constraints.alignmentConstraint.vertical,R=0;R=2*Z.length/3;j--)ue=Math.floor(Math.random()*(j+1)),K=Z[j],Z[j]=Z[ue],Z[ue]=K;return Z},this.nodesInRelativeHorizontal=[],this.nodesInRelativeVertical=[],this.nodeToRelativeConstraintMapHorizontal=new Map,this.nodeToRelativeConstraintMapVertical=new Map,this.nodeToTempPositionMapHorizontal=new Map,this.nodeToTempPositionMapVertical=new Map,this.constraints.relativePlacementConstraint.forEach(function(Z){if(Z.left){var ue=B.has(Z.left)?B.get(Z.left):Z.left,K=B.has(Z.right)?B.get(Z.right):Z.right;k.nodesInRelativeHorizontal.includes(ue)||(k.nodesInRelativeHorizontal.push(ue),k.nodeToRelativeConstraintMapHorizontal.set(ue,[]),k.dummyToNodeForVerticalAlignment.has(ue)?k.nodeToTempPositionMapHorizontal.set(ue,k.idToNodeMap.get(k.dummyToNodeForVerticalAlignment.get(ue)[0]).getCenterX()):k.nodeToTempPositionMapHorizontal.set(ue,k.idToNodeMap.get(ue).getCenterX())),k.nodesInRelativeHorizontal.includes(K)||(k.nodesInRelativeHorizontal.push(K),k.nodeToRelativeConstraintMapHorizontal.set(K,[]),k.dummyToNodeForVerticalAlignment.has(K)?k.nodeToTempPositionMapHorizontal.set(K,k.idToNodeMap.get(k.dummyToNodeForVerticalAlignment.get(K)[0]).getCenterX()):k.nodeToTempPositionMapHorizontal.set(K,k.idToNodeMap.get(K).getCenterX())),k.nodeToRelativeConstraintMapHorizontal.get(ue).push({right:K,gap:Z.gap}),k.nodeToRelativeConstraintMapHorizontal.get(K).push({left:ue,gap:Z.gap})}else{var j=F.has(Z.top)?F.get(Z.top):Z.top,ne=F.has(Z.bottom)?F.get(Z.bottom):Z.bottom;k.nodesInRelativeVertical.includes(j)||(k.nodesInRelativeVertical.push(j),k.nodeToRelativeConstraintMapVertical.set(j,[]),k.dummyToNodeForHorizontalAlignment.has(j)?k.nodeToTempPositionMapVertical.set(j,k.idToNodeMap.get(k.dummyToNodeForHorizontalAlignment.get(j)[0]).getCenterY()):k.nodeToTempPositionMapVertical.set(j,k.idToNodeMap.get(j).getCenterY())),k.nodesInRelativeVertical.includes(ne)||(k.nodesInRelativeVertical.push(ne),k.nodeToRelativeConstraintMapVertical.set(ne,[]),k.dummyToNodeForHorizontalAlignment.has(ne)?k.nodeToTempPositionMapVertical.set(ne,k.idToNodeMap.get(k.dummyToNodeForHorizontalAlignment.get(ne)[0]).getCenterY()):k.nodeToTempPositionMapVertical.set(ne,k.idToNodeMap.get(ne).getCenterY())),k.nodeToRelativeConstraintMapVertical.get(j).push({bottom:ne,gap:Z.gap}),k.nodeToRelativeConstraintMapVertical.get(ne).push({top:j,gap:Z.gap})}});else{var U=new Map,Q=new Map;this.constraints.relativePlacementConstraint.forEach(function(Z){if(Z.left){var ue=B.has(Z.left)?B.get(Z.left):Z.left,K=B.has(Z.right)?B.get(Z.right):Z.right;U.has(ue)?U.get(ue).push(K):U.set(ue,[K]),U.has(K)?U.get(K).push(ue):U.set(K,[ue])}else{var j=F.has(Z.top)?F.get(Z.top):Z.top,ne=F.has(Z.bottom)?F.get(Z.bottom):Z.bottom;Q.has(j)?Q.get(j).push(ne):Q.set(j,[ne]),Q.has(ne)?Q.get(ne).push(j):Q.set(ne,[j])}});var te=o(function(ue,K){var j=[],ne=[],ee=new _,ce=new Set,le=0;return ue.forEach(function(J,Se){if(!ce.has(Se)){j[le]=[],ne[le]=!1;var se=Se;for(ee.push(se),ce.add(se),j[le].push(se);ee.length!=0;){se=ee.shift(),K.has(se)&&(ne[le]=!0);var ae=ue.get(se);ae.forEach(function(Oe){ce.has(Oe)||(ee.push(Oe),ce.add(Oe),j[le].push(Oe))})}le++}}),{components:j,isFixed:ne}},"constructComponents"),Y=te(U,k.fixedNodesOnHorizontal);this.componentsOnHorizontal=Y.components,this.fixedComponentsOnHorizontal=Y.isFixed;var he=te(Q,k.fixedNodesOnVertical);this.componentsOnVertical=he.components,this.fixedComponentsOnVertical=he.isFixed}}},I.prototype.updateDisplacements=function(){var k=this;if(this.constraints.fixedNodeConstraint&&this.constraints.fixedNodeConstraint.forEach(function(he){var Z=k.idToNodeMap.get(he.nodeId);Z.displacementX=0,Z.displacementY=0}),this.constraints.alignmentConstraint){if(this.constraints.alignmentConstraint.vertical)for(var D=this.constraints.alignmentConstraint.vertical,R=0;R1){var F;for(F=0;FO&&(O=Math.floor(B.y)),P=Math.floor(B.x+m.DEFAULT_COMPONENT_SEPERATION)}this.transform(new b(v.WORLD_CENTER_X-B.x/2,v.WORLD_CENTER_Y-B.y/2))},I.radialLayout=function(k,D,R){var O=Math.max(this.maxDiagonalInTree(k),m.DEFAULT_RADIAL_SEPARATION);I.branchRadialLayout(D,null,0,359,0,O);var M=A.calculateBounds(k),P=new S;P.setDeviceOrgX(M.getMinX()),P.setDeviceOrgY(M.getMinY()),P.setWorldOrgX(R.x),P.setWorldOrgY(R.y);for(var B=0;B1;){var j=K[0];K.splice(0,1);var ne=te.indexOf(j);ne>=0&&te.splice(ne,1),Z--,Y--}D!=null?ue=(te.indexOf(K[0])+1)%Z:ue=0;for(var ee=Math.abs(O-R)/Y,ce=ue;he!=Y;ce=++ce%Z){var le=te[ce].getOtherEnd(k);if(le!=D){var J=(R+he*ee)%360,Se=(J+ee)%360;I.branchRadialLayout(le,k,J,Se,M+P,P),he++}}},I.maxDiagonalInTree=function(k){for(var D=T.MIN_VALUE,R=0;RD&&(D=M)}return D},I.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},I.prototype.groupZeroDegreeMembers=function(){var k=this,D={};this.memberGroups={},this.idToDummyNode={};for(var R=[],O=this.graphManager.getAllNodes(),M=0;M"u"&&(D[F]=[]),D[F]=D[F].concat(P)}Object.keys(D).forEach(function(z){if(D[z].length>1){var $="DummyCompound_"+z;k.memberGroups[$]=D[z];var U=D[z][0].getParent(),Q=new d(k.graphManager);Q.id=$,Q.paddingLeft=U.paddingLeft||0,Q.paddingRight=U.paddingRight||0,Q.paddingBottom=U.paddingBottom||0,Q.paddingTop=U.paddingTop||0,k.idToDummyNode[$]=Q;var te=k.getGraphManager().add(k.newGraph(),Q),Y=U.getChild();Y.add(Q);for(var he=0;heM?(O.rect.x-=(O.labelWidth-M)/2,O.setWidth(O.labelWidth),O.labelMarginLeft=(O.labelWidth-M)/2):O.labelPosHorizontal=="right"&&O.setWidth(M+O.labelWidth)),O.labelHeight&&(O.labelPosVertical=="top"?(O.rect.y-=O.labelHeight,O.setHeight(P+O.labelHeight),O.labelMarginTop=O.labelHeight):O.labelPosVertical=="center"&&O.labelHeight>P?(O.rect.y-=(O.labelHeight-P)/2,O.setHeight(O.labelHeight),O.labelMarginTop=(O.labelHeight-P)/2):O.labelPosVertical=="bottom"&&O.setHeight(P+O.labelHeight))}})},I.prototype.repopulateCompounds=function(){for(var k=this.compoundOrder.length-1;k>=0;k--){var D=this.compoundOrder[k],R=D.id,O=D.paddingLeft,M=D.paddingTop,P=D.labelMarginLeft,B=D.labelMarginTop;this.adjustLocations(this.tiledMemberPack[R],D.rect.x,D.rect.y,O,M,P,B)}},I.prototype.repopulateZeroDegreeMembers=function(){var k=this,D=this.tiledZeroDegreePack;Object.keys(D).forEach(function(R){var O=k.idToDummyNode[R],M=O.paddingLeft,P=O.paddingTop,B=O.labelMarginLeft,F=O.labelMarginTop;k.adjustLocations(D[R],O.rect.x,O.rect.y,M,P,B,F)})},I.prototype.getToBeTiled=function(k){var D=k.id;if(this.toBeTiled[D]!=null)return this.toBeTiled[D];var R=k.getChild();if(R==null)return this.toBeTiled[D]=!1,!1;for(var O=R.getNodes(),M=0;M0)return this.toBeTiled[D]=!1,!1;if(P.getChild()==null){this.toBeTiled[P.id]=!1;continue}if(!this.getToBeTiled(P))return this.toBeTiled[D]=!1,!1}return this.toBeTiled[D]=!0,!0},I.prototype.getNodeDegree=function(k){for(var D=k.id,R=k.getEdges(),O=0,M=0;MU&&(U=te.rect.height)}R+=U+k.verticalPadding}},I.prototype.tileCompoundMembers=function(k,D){var R=this;this.tiledMemberPack=[],Object.keys(k).forEach(function(O){var M=D[O];if(R.tiledMemberPack[O]=R.tileNodes(k[O],M.paddingLeft+M.paddingRight),M.rect.width=R.tiledMemberPack[O].width,M.rect.height=R.tiledMemberPack[O].height,M.setCenter(R.tiledMemberPack[O].centerX,R.tiledMemberPack[O].centerY),M.labelMarginLeft=0,M.labelMarginTop=0,m.NODE_DIMENSIONS_INCLUDE_LABELS){var P=M.rect.width,B=M.rect.height;M.labelWidth&&(M.labelPosHorizontal=="left"?(M.rect.x-=M.labelWidth,M.setWidth(P+M.labelWidth),M.labelMarginLeft=M.labelWidth):M.labelPosHorizontal=="center"&&M.labelWidth>P?(M.rect.x-=(M.labelWidth-P)/2,M.setWidth(M.labelWidth),M.labelMarginLeft=(M.labelWidth-P)/2):M.labelPosHorizontal=="right"&&M.setWidth(P+M.labelWidth)),M.labelHeight&&(M.labelPosVertical=="top"?(M.rect.y-=M.labelHeight,M.setHeight(B+M.labelHeight),M.labelMarginTop=M.labelHeight):M.labelPosVertical=="center"&&M.labelHeight>B?(M.rect.y-=(M.labelHeight-B)/2,M.setHeight(M.labelHeight),M.labelMarginTop=(M.labelHeight-B)/2):M.labelPosVertical=="bottom"&&M.setHeight(B+M.labelHeight))}})},I.prototype.tileNodes=function(k,D){var R=this.tileNodesByFavoringDim(k,D,!0),O=this.tileNodesByFavoringDim(k,D,!1),M=this.getOrgRatio(R),P=this.getOrgRatio(O),B;return PF&&(F=he.getWidth())});var z=P/M,$=B/M,U=Math.pow(R-O,2)+4*(z+O)*($+R)*M,Q=(O-R+Math.sqrt(U))/(2*(z+O)),te;D?(te=Math.ceil(Q),te==Q&&te++):te=Math.floor(Q);var Y=te*(z+O)-O;return F>Y&&(Y=F),Y+=O*2,Y},I.prototype.tileNodesByFavoringDim=function(k,D,R){var O=m.TILING_PADDING_VERTICAL,M=m.TILING_PADDING_HORIZONTAL,P=m.TILING_COMPARE_BY,B={rows:[],rowWidth:[],rowHeight:[],width:0,height:D,verticalPadding:O,horizontalPadding:M,centerX:0,centerY:0};P&&(B.idealRowWidth=this.calcIdealRowWidth(k,R));var F=o(function(Z){return Z.rect.width*Z.rect.height},"getNodeArea"),z=o(function(Z,ue){return F(ue)-F(Z)},"areaCompareFcn");k.sort(function(he,Z){var ue=z;return B.idealRowWidth?(ue=P,ue(he.id,Z.id)):ue(he,Z)});for(var $=0,U=0,Q=0;Q0&&(B+=k.horizontalPadding),k.rowWidth[R]=B,k.width0&&(F+=k.verticalPadding);var z=0;F>k.rowHeight[R]&&(z=k.rowHeight[R],k.rowHeight[R]=F,z=k.rowHeight[R]-z),k.height+=z,k.rows[R].push(D)},I.prototype.getShortestRowIndex=function(k){for(var D=-1,R=Number.MAX_VALUE,O=0;OR&&(D=O,R=k.rowWidth[O]);return D},I.prototype.canAddHorizontal=function(k,D,R){if(k.idealRowWidth){var O=k.rows.length-1,M=k.rowWidth[O];return M+D+k.horizontalPadding<=k.idealRowWidth}var P=this.getShortestRowIndex(k);if(P<0)return!0;var B=k.rowWidth[P];if(B+k.horizontalPadding+D<=k.width)return!0;var F=0;k.rowHeight[P]0&&(F=R+k.verticalPadding-k.rowHeight[P]);var z;k.width-B>=D+k.horizontalPadding?z=(k.height+F)/(B+D+k.horizontalPadding):z=(k.height+F)/k.width,F=R+k.verticalPadding;var $;return k.widthP&&D!=R){O.splice(-1,1),k.rows[R].push(M),k.rowWidth[D]=k.rowWidth[D]-P,k.rowWidth[R]=k.rowWidth[R]+P,k.width=k.rowWidth[instance.getLongestRowIndex(k)];for(var B=Number.MIN_VALUE,F=0;FB&&(B=O[F].height);D>0&&(B+=k.verticalPadding);var z=k.rowHeight[D]+k.rowHeight[R];k.rowHeight[D]=B,k.rowHeight[R]0)for(var Y=M;Y<=P;Y++)te[0]+=this.grid[Y][B-1].length+this.grid[Y][B].length-1;if(P0)for(var Y=B;Y<=F;Y++)te[3]+=this.grid[M-1][Y].length+this.grid[M][Y].length-1;for(var he=T.MAX_VALUE,Z,ue,K=0;K{var u=l(551).FDLayoutNode,h=l(551).IMath;function f(p,m,g,y){u.call(this,p,m,g,y)}o(f,"CoSENode"),f.prototype=Object.create(u.prototype);for(var d in u)f[d]=u[d];f.prototype.calculateDisplacement=function(){var p=this.graphManager.getLayout();this.getChild()!=null&&this.fixedNodeWeight?(this.displacementX+=p.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.fixedNodeWeight,this.displacementY+=p.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.fixedNodeWeight):(this.displacementX+=p.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.noOfChildren,this.displacementY+=p.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.noOfChildren),Math.abs(this.displacementX)>p.coolingFactor*p.maxNodeDisplacement&&(this.displacementX=p.coolingFactor*p.maxNodeDisplacement*h.sign(this.displacementX)),Math.abs(this.displacementY)>p.coolingFactor*p.maxNodeDisplacement&&(this.displacementY=p.coolingFactor*p.maxNodeDisplacement*h.sign(this.displacementY)),this.child&&this.child.getNodes().length>0&&this.propogateDisplacementToChildren(this.displacementX,this.displacementY)},f.prototype.propogateDisplacementToChildren=function(p,m){for(var g=this.getChild().getNodes(),y,v=0;v{function u(g){if(Array.isArray(g)){for(var y=0,v=Array(g.length);y0){var ct=0;Ue.forEach(function(ot){we=="horizontal"?(be.set(ot,x.has(ot)?b[x.get(ot)]:pe.get(ot)),ct+=be.get(ot)):(be.set(ot,x.has(ot)?w[x.get(ot)]:pe.get(ot)),ct+=be.get(ot))}),ct=ct/Ue.length,st.forEach(function(ot){W.has(ot)||be.set(ot,ct)})}else{var We=0;st.forEach(function(ot){we=="horizontal"?We+=x.has(ot)?b[x.get(ot)]:pe.get(ot):We+=x.has(ot)?w[x.get(ot)]:pe.get(ot)}),We=We/st.length,st.forEach(function(ot){be.set(ot,We)})}});for(var qe=o(function(){var Ue=De.shift(),ct=V.get(Ue);ct.forEach(function(We){if(be.get(We.id)ot&&(ot=yt),ntYt&&(Yt=nt)}}catch(At){Mt=!0,xt=At}finally{try{!bt&&ut.return&&ut.return()}finally{if(Mt)throw xt}}var dn=(ct+ot)/2-(We+Yt)/2,Tt=!0,On=!1,tn=void 0;try{for(var _r=st[Symbol.iterator](),Dr;!(Tt=(Dr=_r.next()).done);Tt=!0){var Pn=Dr.value;be.set(Pn,be.get(Pn)+dn)}}catch(At){On=!0,tn=At}finally{try{!Tt&&_r.return&&_r.return()}finally{if(On)throw tn}}})}return be},"findAppropriatePositionForRelativePlacement"),L=o(function(V){var we=0,W=0,pe=0,ve=0;if(V.forEach(function(Ve){Ve.left?b[x.get(Ve.left)]-b[x.get(Ve.right)]>=0?we++:W++:w[x.get(Ve.top)]-w[x.get(Ve.bottom)]>=0?pe++:ve++}),we>W&&pe>ve)for(var Pe=0;PeW)for(var _e=0;_eve)for(var be=0;be1)y.fixedNodeConstraint.forEach(function(oe,V){O[V]=[oe.position.x,oe.position.y],M[V]=[b[x.get(oe.nodeId)],w[x.get(oe.nodeId)]]}),P=!0;else if(y.alignmentConstraint)(function(){var oe=0;if(y.alignmentConstraint.vertical){for(var V=y.alignmentConstraint.vertical,we=o(function(be){var Ve=new Set;V[be].forEach(function(at){Ve.add(at)});var De=new Set([].concat(u(Ve)).filter(function(at){return F.has(at)})),qe=void 0;De.size>0?qe=b[x.get(De.values().next().value)]:qe=_(Ve).x,V[be].forEach(function(at){O[oe]=[qe,w[x.get(at)]],M[oe]=[b[x.get(at)],w[x.get(at)]],oe++})},"_loop2"),W=0;W0?qe=b[x.get(De.values().next().value)]:qe=_(Ve).y,pe[be].forEach(function(at){O[oe]=[b[x.get(at)],qe],M[oe]=[b[x.get(at)],w[x.get(at)]],oe++})},"_loop3"),Pe=0;PeQ&&(Q=U[Y].length,te=Y);if(Q<$.size/2)L(y.relativePlacementConstraint),P=!1,B=!1;else{var he=new Map,Z=new Map,ue=[];U[te].forEach(function(oe){z.get(oe).forEach(function(V){V.direction=="horizontal"?(he.has(oe)?he.get(oe).push(V):he.set(oe,[V]),he.has(V.id)||he.set(V.id,[]),ue.push({left:oe,right:V.id})):(Z.has(oe)?Z.get(oe).push(V):Z.set(oe,[V]),Z.has(V.id)||Z.set(V.id,[]),ue.push({top:oe,bottom:V.id}))})}),L(ue),B=!1;var K=I(he,"horizontal"),j=I(Z,"vertical");U[te].forEach(function(oe,V){M[V]=[b[x.get(oe)],w[x.get(oe)]],O[V]=[],K.has(oe)?O[V][0]=K.get(oe):O[V][0]=b[x.get(oe)],j.has(oe)?O[V][1]=j.get(oe):O[V][1]=w[x.get(oe)]}),P=!0}}if(P){for(var ne=void 0,ee=d.transpose(O),ce=d.transpose(M),le=0;le0){var Be={x:0,y:0};y.fixedNodeConstraint.forEach(function(oe,V){var we={x:b[x.get(oe.nodeId)],y:w[x.get(oe.nodeId)]},W=oe.position,pe=S(W,we);Be.x+=pe.x,Be.y+=pe.y}),Be.x/=y.fixedNodeConstraint.length,Be.y/=y.fixedNodeConstraint.length,b.forEach(function(oe,V){b[V]+=Be.x}),w.forEach(function(oe,V){w[V]+=Be.y}),y.fixedNodeConstraint.forEach(function(oe){b[x.get(oe.nodeId)]=oe.position.x,w[x.get(oe.nodeId)]=oe.position.y})}if(y.alignmentConstraint){if(y.alignmentConstraint.vertical)for(var He=y.alignmentConstraint.vertical,ze=o(function(V){var we=new Set;He[V].forEach(function(ve){we.add(ve)});var W=new Set([].concat(u(we)).filter(function(ve){return F.has(ve)})),pe=void 0;W.size>0?pe=b[x.get(W.values().next().value)]:pe=_(we).x,we.forEach(function(ve){F.has(ve)||(b[x.get(ve)]=pe)})},"_loop4"),Le=0;Le0?pe=w[x.get(W.values().next().value)]:pe=_(we).y,we.forEach(function(ve){F.has(ve)||(w[x.get(ve)]=pe)})},"_loop5"),q=0;q{a.exports=t}},r={};function n(a){var s=r[a];if(s!==void 0)return s.exports;var l=r[a]={exports:{}};return e[a](l,l.exports,n),l.exports}o(n,"__webpack_require__");var i=n(45);return i})()})});var Mve=Ii((R4,xF)=>{"use strict";o(function(e,r){typeof R4=="object"&&typeof xF=="object"?xF.exports=r(vF()):typeof define=="function"&&define.amd?define(["cose-base"],r):typeof R4=="object"?R4.cytoscapeFcose=r(vF()):e.cytoscapeFcose=r(e.coseBase)},"webpackUniversalModuleDefinition")(R4,function(t){return(()=>{"use strict";var e={658:a=>{a.exports=Object.assign!=null?Object.assign.bind(Object):function(s){for(var l=arguments.length,u=Array(l>1?l-1:0),h=1;h{var u=function(){function d(p,m){var g=[],y=!0,v=!1,x=void 0;try{for(var b=p[Symbol.iterator](),w;!(y=(w=b.next()).done)&&(g.push(w.value),!(m&&g.length===m));y=!0);}catch(C){v=!0,x=C}finally{try{!y&&b.return&&b.return()}finally{if(v)throw x}}return g}return o(d,"sliceIterator"),function(p,m){if(Array.isArray(p))return p;if(Symbol.iterator in Object(p))return d(p,m);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),h=l(140).layoutBase.LinkedList,f={};f.getTopMostNodes=function(d){for(var p={},m=0;m0&&P.merge($)});for(var B=0;B1){w=x[0],C=w.connectedEdges().length,x.forEach(function(M){M.connectedEdges().length0&&g.set("dummy"+(g.size+1),A),S},f.relocateComponent=function(d,p,m){if(!m.fixedNodeConstraint){var g=Number.POSITIVE_INFINITY,y=Number.NEGATIVE_INFINITY,v=Number.POSITIVE_INFINITY,x=Number.NEGATIVE_INFINITY;if(m.quality=="draft"){var b=!0,w=!1,C=void 0;try{for(var T=p.nodeIndexes[Symbol.iterator](),E;!(b=(E=T.next()).done);b=!0){var A=E.value,S=u(A,2),_=S[0],I=S[1],L=m.cy.getElementById(_);if(L){var k=L.boundingBox(),D=p.xCoords[I]-k.w/2,R=p.xCoords[I]+k.w/2,O=p.yCoords[I]-k.h/2,M=p.yCoords[I]+k.h/2;Dy&&(y=R),Ox&&(x=M)}}}catch($){w=!0,C=$}finally{try{!b&&T.return&&T.return()}finally{if(w)throw C}}var P=d.x-(y+g)/2,B=d.y-(x+v)/2;p.xCoords=p.xCoords.map(function($){return $+P}),p.yCoords=p.yCoords.map(function($){return $+B})}else{Object.keys(p).forEach(function($){var U=p[$],Q=U.getRect().x,te=U.getRect().x+U.getRect().width,Y=U.getRect().y,he=U.getRect().y+U.getRect().height;Qy&&(y=te),Yx&&(x=he)});var F=d.x-(y+g)/2,z=d.y-(x+v)/2;Object.keys(p).forEach(function($){var U=p[$];U.setCenter(U.getCenterX()+F,U.getCenterY()+z)})}}},f.calcBoundingBox=function(d,p,m,g){for(var y=Number.MAX_SAFE_INTEGER,v=Number.MIN_SAFE_INTEGER,x=Number.MAX_SAFE_INTEGER,b=Number.MIN_SAFE_INTEGER,w=void 0,C=void 0,T=void 0,E=void 0,A=d.descendants().not(":parent"),S=A.length,_=0;_w&&(y=w),vT&&(x=T),b{var u=l(548),h=l(140).CoSELayout,f=l(140).CoSENode,d=l(140).layoutBase.PointD,p=l(140).layoutBase.DimensionD,m=l(140).layoutBase.LayoutConstants,g=l(140).layoutBase.FDLayoutConstants,y=l(140).CoSEConstants,v=o(function(b,w){var C=b.cy,T=b.eles,E=T.nodes(),A=T.edges(),S=void 0,_=void 0,I=void 0,L={};b.randomize&&(S=w.nodeIndexes,_=w.xCoords,I=w.yCoords);var k=o(function($){return typeof $=="function"},"isFn"),D=o(function($,U){return k($)?$(U):$},"optFn"),R=u.calcParentsWithoutChildren(C,T),O=o(function z($,U,Q,te){for(var Y=U.length,he=0;he0){var ee=void 0;ee=Q.getGraphManager().add(Q.newGraph(),K),z(ee,ue,Q,te)}}},"processChildrenList"),M=o(function($,U,Q){for(var te=0,Y=0,he=0;he0?y.DEFAULT_EDGE_LENGTH=g.DEFAULT_EDGE_LENGTH=te/Y:k(b.idealEdgeLength)?y.DEFAULT_EDGE_LENGTH=g.DEFAULT_EDGE_LENGTH=50:y.DEFAULT_EDGE_LENGTH=g.DEFAULT_EDGE_LENGTH=b.idealEdgeLength,y.MIN_REPULSION_DIST=g.MIN_REPULSION_DIST=g.DEFAULT_EDGE_LENGTH/10,y.DEFAULT_RADIAL_SEPARATION=g.DEFAULT_EDGE_LENGTH)},"processEdges"),P=o(function($,U){U.fixedNodeConstraint&&($.constraints.fixedNodeConstraint=U.fixedNodeConstraint),U.alignmentConstraint&&($.constraints.alignmentConstraint=U.alignmentConstraint),U.relativePlacementConstraint&&($.constraints.relativePlacementConstraint=U.relativePlacementConstraint)},"processConstraints");b.nestingFactor!=null&&(y.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=g.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=b.nestingFactor),b.gravity!=null&&(y.DEFAULT_GRAVITY_STRENGTH=g.DEFAULT_GRAVITY_STRENGTH=b.gravity),b.numIter!=null&&(y.MAX_ITERATIONS=g.MAX_ITERATIONS=b.numIter),b.gravityRange!=null&&(y.DEFAULT_GRAVITY_RANGE_FACTOR=g.DEFAULT_GRAVITY_RANGE_FACTOR=b.gravityRange),b.gravityCompound!=null&&(y.DEFAULT_COMPOUND_GRAVITY_STRENGTH=g.DEFAULT_COMPOUND_GRAVITY_STRENGTH=b.gravityCompound),b.gravityRangeCompound!=null&&(y.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=g.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=b.gravityRangeCompound),b.initialEnergyOnIncremental!=null&&(y.DEFAULT_COOLING_FACTOR_INCREMENTAL=g.DEFAULT_COOLING_FACTOR_INCREMENTAL=b.initialEnergyOnIncremental),b.tilingCompareBy!=null&&(y.TILING_COMPARE_BY=b.tilingCompareBy),b.quality=="proof"?m.QUALITY=2:m.QUALITY=0,y.NODE_DIMENSIONS_INCLUDE_LABELS=g.NODE_DIMENSIONS_INCLUDE_LABELS=m.NODE_DIMENSIONS_INCLUDE_LABELS=b.nodeDimensionsIncludeLabels,y.DEFAULT_INCREMENTAL=g.DEFAULT_INCREMENTAL=m.DEFAULT_INCREMENTAL=!b.randomize,y.ANIMATE=g.ANIMATE=m.ANIMATE=b.animate,y.TILE=b.tile,y.TILING_PADDING_VERTICAL=typeof b.tilingPaddingVertical=="function"?b.tilingPaddingVertical.call():b.tilingPaddingVertical,y.TILING_PADDING_HORIZONTAL=typeof b.tilingPaddingHorizontal=="function"?b.tilingPaddingHorizontal.call():b.tilingPaddingHorizontal,y.DEFAULT_INCREMENTAL=g.DEFAULT_INCREMENTAL=m.DEFAULT_INCREMENTAL=!0,y.PURE_INCREMENTAL=!b.randomize,m.DEFAULT_UNIFORM_LEAF_NODE_SIZES=b.uniformNodeDimensions,b.step=="transformed"&&(y.TRANSFORM_ON_CONSTRAINT_HANDLING=!0,y.ENFORCE_CONSTRAINTS=!1,y.APPLY_LAYOUT=!1),b.step=="enforced"&&(y.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,y.ENFORCE_CONSTRAINTS=!0,y.APPLY_LAYOUT=!1),b.step=="cose"&&(y.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,y.ENFORCE_CONSTRAINTS=!1,y.APPLY_LAYOUT=!0),b.step=="all"&&(b.randomize?y.TRANSFORM_ON_CONSTRAINT_HANDLING=!0:y.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,y.ENFORCE_CONSTRAINTS=!0,y.APPLY_LAYOUT=!0),b.fixedNodeConstraint||b.alignmentConstraint||b.relativePlacementConstraint?y.TREE_REDUCTION_ON_INCREMENTAL=!1:y.TREE_REDUCTION_ON_INCREMENTAL=!0;var B=new h,F=B.newGraphManager();return O(F.addRoot(),u.getTopMostNodes(E),B,b),M(B,F,A),P(B,b),B.runLayout(),L},"coseLayout");a.exports={coseLayout:v}},212:(a,s,l)=>{var u=function(){function b(w,C){for(var T=0;T0)if(M){var F=d.getTopMostNodes(T.eles.nodes());if(k=d.connectComponents(E,T.eles,F),k.forEach(function(se){var ae=se.boundingBox();D.push({x:ae.x1+ae.w/2,y:ae.y1+ae.h/2})}),T.randomize&&k.forEach(function(se){T.eles=se,S.push(m(T))}),T.quality=="default"||T.quality=="proof"){var z=E.collection();if(T.tile){var $=new Map,U=[],Q=[],te=0,Y={nodeIndexes:$,xCoords:U,yCoords:Q},he=[];if(k.forEach(function(se,ae){se.edges().length==0&&(se.nodes().forEach(function(Oe,ye){z.merge(se.nodes()[ye]),Oe.isParent()||(Y.nodeIndexes.set(se.nodes()[ye].id(),te++),Y.xCoords.push(se.nodes()[0].position().x),Y.yCoords.push(se.nodes()[0].position().y))}),he.push(ae))}),z.length>1){var Z=z.boundingBox();D.push({x:Z.x1+Z.w/2,y:Z.y1+Z.h/2}),k.push(z),S.push(Y);for(var ue=he.length-1;ue>=0;ue--)k.splice(he[ue],1),S.splice(he[ue],1),D.splice(he[ue],1)}}k.forEach(function(se,ae){T.eles=se,L.push(y(T,S[ae])),d.relocateComponent(D[ae],L[ae],T)})}else k.forEach(function(se,ae){d.relocateComponent(D[ae],S[ae],T)});var K=new Set;if(k.length>1){var j=[],ne=A.filter(function(se){return se.css("display")=="none"});k.forEach(function(se,ae){var Oe=void 0;if(T.quality=="draft"&&(Oe=S[ae].nodeIndexes),se.nodes().not(ne).length>0){var ye={};ye.edges=[],ye.nodes=[];var Be=void 0;se.nodes().not(ne).forEach(function(He){if(T.quality=="draft")if(!He.isParent())Be=Oe.get(He.id()),ye.nodes.push({x:S[ae].xCoords[Be]-He.boundingbox().w/2,y:S[ae].yCoords[Be]-He.boundingbox().h/2,width:He.boundingbox().w,height:He.boundingbox().h});else{var ze=d.calcBoundingBox(He,S[ae].xCoords,S[ae].yCoords,Oe);ye.nodes.push({x:ze.topLeftX,y:ze.topLeftY,width:ze.width,height:ze.height})}else L[ae][He.id()]&&ye.nodes.push({x:L[ae][He.id()].getLeft(),y:L[ae][He.id()].getTop(),width:L[ae][He.id()].getWidth(),height:L[ae][He.id()].getHeight()})}),se.edges().forEach(function(He){var ze=He.source(),Le=He.target();if(ze.css("display")!="none"&&Le.css("display")!="none")if(T.quality=="draft"){var Ie=Oe.get(ze.id()),xe=Oe.get(Le.id()),q=[],de=[];if(ze.isParent()){var ie=d.calcBoundingBox(ze,S[ae].xCoords,S[ae].yCoords,Oe);q.push(ie.topLeftX+ie.width/2),q.push(ie.topLeftY+ie.height/2)}else q.push(S[ae].xCoords[Ie]),q.push(S[ae].yCoords[Ie]);if(Le.isParent()){var oe=d.calcBoundingBox(Le,S[ae].xCoords,S[ae].yCoords,Oe);de.push(oe.topLeftX+oe.width/2),de.push(oe.topLeftY+oe.height/2)}else de.push(S[ae].xCoords[xe]),de.push(S[ae].yCoords[xe]);ye.edges.push({startX:q[0],startY:q[1],endX:de[0],endY:de[1]})}else L[ae][ze.id()]&&L[ae][Le.id()]&&ye.edges.push({startX:L[ae][ze.id()].getCenterX(),startY:L[ae][ze.id()].getCenterY(),endX:L[ae][Le.id()].getCenterX(),endY:L[ae][Le.id()].getCenterY()})}),ye.nodes.length>0&&(j.push(ye),K.add(ae))}});var ee=O.packComponents(j,T.randomize).shifts;if(T.quality=="draft")S.forEach(function(se,ae){var Oe=se.xCoords.map(function(Be){return Be+ee[ae].dx}),ye=se.yCoords.map(function(Be){return Be+ee[ae].dy});se.xCoords=Oe,se.yCoords=ye});else{var ce=0;K.forEach(function(se){Object.keys(L[se]).forEach(function(ae){var Oe=L[se][ae];Oe.setCenter(Oe.getCenterX()+ee[ce].dx,Oe.getCenterY()+ee[ce].dy)}),ce++})}}}else{var P=T.eles.boundingBox();if(D.push({x:P.x1+P.w/2,y:P.y1+P.h/2}),T.randomize){var B=m(T);S.push(B)}T.quality=="default"||T.quality=="proof"?(L.push(y(T,S[0])),d.relocateComponent(D[0],L[0],T)):d.relocateComponent(D[0],S[0],T)}var le=o(function(ae,Oe){if(T.quality=="default"||T.quality=="proof"){typeof ae=="number"&&(ae=Oe);var ye=void 0,Be=void 0,He=ae.data("id");return L.forEach(function(Le){He in Le&&(ye={x:Le[He].getRect().getCenterX(),y:Le[He].getRect().getCenterY()},Be=Le[He])}),T.nodeDimensionsIncludeLabels&&(Be.labelWidth&&(Be.labelPosHorizontal=="left"?ye.x+=Be.labelWidth/2:Be.labelPosHorizontal=="right"&&(ye.x-=Be.labelWidth/2)),Be.labelHeight&&(Be.labelPosVertical=="top"?ye.y+=Be.labelHeight/2:Be.labelPosVertical=="bottom"&&(ye.y-=Be.labelHeight/2))),ye==null&&(ye={x:ae.position("x"),y:ae.position("y")}),{x:ye.x,y:ye.y}}else{var ze=void 0;return S.forEach(function(Le){var Ie=Le.nodeIndexes.get(ae.id());Ie!=null&&(ze={x:Le.xCoords[Ie],y:Le.yCoords[Ie]})}),ze==null&&(ze={x:ae.position("x"),y:ae.position("y")}),{x:ze.x,y:ze.y}}},"getPositions");if(T.quality=="default"||T.quality=="proof"||T.randomize){var J=d.calcParentsWithoutChildren(E,A),Se=A.filter(function(se){return se.css("display")=="none"});T.eles=A.not(Se),A.nodes().not(":parent").not(Se).layoutPositions(C,T,le),J.length>0&&J.forEach(function(se){se.position(le(se))})}else console.log("If randomize option is set to false, then quality option must be 'default' or 'proof'.")},"run")}]),b}();a.exports=x},657:(a,s,l)=>{var u=l(548),h=l(140).layoutBase.Matrix,f=l(140).layoutBase.SVD,d=o(function(m){var g=m.cy,y=m.eles,v=y.nodes(),x=y.nodes(":parent"),b=new Map,w=new Map,C=new Map,T=[],E=[],A=[],S=[],_=[],I=[],L=[],k=[],D=void 0,R=void 0,O=1e8,M=1e-9,P=m.piTol,B=m.samplingType,F=m.nodeSeparation,z=void 0,$=o(function(){for(var we=0,W=0,pe=!1;W=Pe;){be=ve[Pe++];for(var st=T[be],Ue=0;Ueqe&&(qe=_[We],at=We)}return at},"BFS"),Q=o(function(we){var W=void 0;if(we){W=Math.floor(Math.random()*R),D=W;for(var ve=0;ve=1)break;qe=De}for(var st=0;st=1)break;qe=De}for(var ct=0;ct0&&(W.isParent()?T[we].push(C.get(W.id())):T[we].push(W.id()))})});var J=o(function(we){var W=w.get(we),pe=void 0;b.get(we).forEach(function(ve){g.getElementById(ve).isParent()?pe=C.get(ve):pe=ve,T[W].push(pe),T[w.get(pe)].push(we)})},"_loop"),Se=!0,se=!1,ae=void 0;try{for(var Oe=b.keys()[Symbol.iterator](),ye;!(Se=(ye=Oe.next()).done);Se=!0){var Be=ye.value;J(Be)}}catch(V){se=!0,ae=V}finally{try{!Se&&Oe.return&&Oe.return()}finally{if(se)throw ae}}R=w.size;var He=void 0;if(R>2){z=R{var u=l(212),h=o(function(d){d&&d("layout","fcose",u)},"register");typeof cytoscape<"u"&&h(cytoscape),a.exports=h},140:a=>{a.exports=t}},r={};function n(a){var s=r[a];if(s!==void 0)return s.exports;var l=r[a]={exports:{}};return e[a](l,l.exports,n),l.exports}o(n,"__webpack_require__");var i=n(579);return i})()})});var by,a0,bF=N(()=>{"use strict";Yl();by=o(t=>`${t}`,"wrapIcon"),a0={prefix:"mermaid-architecture",height:80,width:80,icons:{database:{body:by('')},server:{body:by('')},disk:{body:by('')},internet:{body:by('')},cloud:{body:by('')},unknown:GC,blank:{body:by("")}}}});var Ive,Ove,Pve,Bve,Fve=N(()=>{"use strict";Yl();zt();no();_4();bF();dC();Ive=o(async function(t,e){let r=Ri("padding"),n=Ri("iconSize"),i=n/2,a=n/6,s=a/2;await Promise.all(e.edges().map(async l=>{let{source:u,sourceDir:h,sourceArrow:f,sourceGroup:d,target:p,targetDir:m,targetArrow:g,targetGroup:y,label:v}=fC(l),{x,y:b}=l[0].sourceEndpoint(),{x:w,y:C}=l[0].midpoint(),{x:T,y:E}=l[0].targetEndpoint(),A=r+4;if(d&&(Ha(h)?x+=h==="L"?-A:A:b+=h==="T"?-A:A+18),y&&(Ha(m)?T+=m==="L"?-A:A:E+=m==="T"?-A:A+18),!d&&i0.getNode(u)?.type==="junction"&&(Ha(h)?x+=h==="L"?i:-i:b+=h==="T"?i:-i),!y&&i0.getNode(p)?.type==="junction"&&(Ha(m)?T+=m==="L"?i:-i:E+=m==="T"?i:-i),l[0]._private.rscratch){let S=t.insert("g");if(S.insert("path").attr("d",`M ${x},${b} L ${w},${C} L${T},${E} `).attr("class","edge"),f){let _=Ha(h)?S4[h](x,a):x-s,I=ru(h)?S4[h](b,a):b-s;S.insert("polygon").attr("points",fF[h](a)).attr("transform",`translate(${_},${I})`).attr("class","arrow")}if(g){let _=Ha(m)?S4[m](T,a):T-s,I=ru(m)?S4[m](E,a):E-s;S.insert("polygon").attr("points",fF[m](a)).attr("transform",`translate(${_},${I})`).attr("class","arrow")}if(v){let _=C4(h,m)?"XY":Ha(h)?"X":"Y",I=0;_==="X"?I=Math.abs(x-T):_==="Y"?I=Math.abs(b-E)/1.5:I=Math.abs(x-T)/2;let L=S.append("g");if(await Hn(L,v,{useHtmlLabels:!1,width:I,classes:"architecture-service-label"},me()),L.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle"),_==="X")L.attr("transform","translate("+w+", "+C+")");else if(_==="Y")L.attr("transform","translate("+w+", "+C+") rotate(-90)");else if(_==="XY"){let k=A4(h,m);if(k&&wve(k)){let D=L.node().getBoundingClientRect(),[R,O]=kve(k);L.attr("dominant-baseline","auto").attr("transform",`rotate(${-1*R*O*45})`);let M=L.node().getBoundingClientRect();L.attr("transform",` - translate(${w}, ${C-D.height/2}) - translate(${R*M.width/2}, ${O*M.height/2}) - rotate(${-1*R*O*45}, 0, ${D.height/2}) - `)}}}}}))},"drawEdges"),Ove=o(async function(t,e){let n=Ri("padding")*.75,i=Ri("fontSize"),s=Ri("iconSize")/2;await Promise.all(e.nodes().map(async l=>{let u=Hf(l);if(u.type==="group"){let{h,w:f,x1:d,y1:p}=l.boundingBox();t.append("rect").attr("x",d+s).attr("y",p+s).attr("width",f).attr("height",h).attr("class","node-bkg");let m=t.append("g"),g=d,y=p;if(u.icon){let v=m.append("g");v.html(`${await bs(u.icon,{height:n,width:n,fallbackPrefix:a0.prefix})}`),v.attr("transform","translate("+(g+s+1)+", "+(y+s+1)+")"),g+=n,y+=i/2-1-2}if(u.label){let v=m.append("g");await Hn(v,u.label,{useHtmlLabels:!1,width:f,classes:"architecture-service-label"},me()),v.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","start").attr("text-anchor","start"),v.attr("transform","translate("+(g+s+4)+", "+(y+s+2)+")")}}}))},"drawGroups"),Pve=o(async function(t,e,r){for(let n of r){let i=e.append("g"),a=Ri("iconSize");if(n.title){let h=i.append("g");await Hn(h,n.title,{useHtmlLabels:!1,width:a*1.5,classes:"architecture-service-label"},me()),h.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle"),h.attr("transform","translate("+a/2+", "+a+")")}let s=i.append("g");if(n.icon)s.html(`${await bs(n.icon,{height:a,width:a,fallbackPrefix:a0.prefix})}`);else if(n.iconText){s.html(`${await bs("blank",{height:a,width:a,fallbackPrefix:a0.prefix})}`);let d=s.append("g").append("foreignObject").attr("width",a).attr("height",a).append("div").attr("class","node-icon-text").attr("style",`height: ${a}px;`).append("div").html(n.iconText),p=parseInt(window.getComputedStyle(d.node(),null).getPropertyValue("font-size").replace(/\D/g,""))??16;d.attr("style",`-webkit-line-clamp: ${Math.floor((a-2)/p)};`)}else s.append("path").attr("class","node-bkg").attr("id","node-"+n.id).attr("d",`M0 ${a} v${-a} q0,-5 5,-5 h${a} q5,0 5,5 v${a} H0 Z`);i.attr("class","architecture-service");let{width:l,height:u}=i._groups[0][0].getBBox();n.width=l,n.height=u,t.setElementForId(n.id,i)}return 0},"drawServices"),Bve=o(function(t,e,r){r.forEach(n=>{let i=e.append("g"),a=Ri("iconSize");i.append("g").append("rect").attr("id","node-"+n.id).attr("fill-opacity","0").attr("width",a).attr("height",a),i.attr("class","architecture-junction");let{width:l,height:u}=i._groups[0][0].getBBox();i.width=l,i.height=u,t.setElementForId(n.id,i)})},"drawJunctions")});function grt(t,e){t.forEach(r=>{e.add({group:"nodes",data:{type:"service",id:r.id,icon:r.icon,label:r.title,parent:r.in,width:Ri("iconSize"),height:Ri("iconSize")},classes:"node-service"})})}function yrt(t,e){t.forEach(r=>{e.add({group:"nodes",data:{type:"junction",id:r.id,parent:r.in,width:Ri("iconSize"),height:Ri("iconSize")},classes:"node-junction"})})}function vrt(t,e){e.nodes().map(r=>{let n=Hf(r);if(n.type==="group")return;n.x=r.position().x,n.y=r.position().y,t.getElementById(n.id).attr("transform","translate("+(n.x||0)+","+(n.y||0)+")")})}function xrt(t,e){t.forEach(r=>{e.add({group:"nodes",data:{type:"group",id:r.id,icon:r.icon,label:r.title,parent:r.in},classes:"node-group"})})}function brt(t,e){t.forEach(r=>{let{lhsId:n,rhsId:i,lhsInto:a,lhsGroup:s,rhsInto:l,lhsDir:u,rhsDir:h,rhsGroup:f,title:d}=r,p=C4(r.lhsDir,r.rhsDir)?"segments":"straight",m={id:`${n}-${i}`,label:d,source:n,sourceDir:u,sourceArrow:a,sourceGroup:s,sourceEndpoint:u==="L"?"0 50%":u==="R"?"100% 50%":u==="T"?"50% 0":"50% 100%",target:i,targetDir:h,targetArrow:l,targetGroup:f,targetEndpoint:h==="L"?"0 50%":h==="R"?"100% 50%":h==="T"?"50% 0":"50% 100%"};e.add({group:"edges",data:m,classes:p})})}function wrt(t,e,r){let n=o((l,u)=>Object.entries(l).reduce((h,[f,d])=>{let p=0,m=Object.entries(d);if(m.length===1)return h[f]=m[0][1],h;for(let g=0;g{let u={},h={};return Object.entries(l).forEach(([f,[d,p]])=>{let m=t.getNode(f)?.in??"default";u[p]??={},u[p][m]??=[],u[p][m].push(f),h[d]??={},h[d][m]??=[],h[d][m].push(f)}),{horiz:Object.values(n(u,"horizontal")).filter(f=>f.length>1),vert:Object.values(n(h,"vertical")).filter(f=>f.length>1)}}),[a,s]=i.reduce(([l,u],{horiz:h,vert:f})=>[[...l,...h],[...u,...f]],[[],[]]);return{horizontal:a,vertical:s}}function Trt(t){let e=[],r=o(i=>`${i[0]},${i[1]}`,"posToStr"),n=o(i=>i.split(",").map(a=>parseInt(a)),"strToPos");return t.forEach(i=>{let a=Object.fromEntries(Object.entries(i).map(([h,f])=>[r(f),h])),s=[r([0,0])],l={},u={L:[-1,0],R:[1,0],T:[0,1],B:[0,-1]};for(;s.length>0;){let h=s.shift();if(h){l[h]=1;let f=a[h];if(f){let d=n(h);Object.entries(u).forEach(([p,m])=>{let g=r([d[0]+m[0],d[1]+m[1]]),y=a[g];y&&!l[g]&&(s.push(g),e.push({[hF[p]]:y,[hF[bve(p)]]:f,gap:1.5*Ri("iconSize")}))})}}}}),e}function krt(t,e,r,n,i,{spatialMaps:a,groupAlignments:s}){return new Promise(l=>{let u=Ge("body").append("div").attr("id","cy").attr("style","display:none"),h=nl({container:document.getElementById("cy"),style:[{selector:"edge",style:{"curve-style":"straight",label:"data(label)","source-endpoint":"data(sourceEndpoint)","target-endpoint":"data(targetEndpoint)"}},{selector:"edge.segments",style:{"curve-style":"segments","segment-weights":"0","segment-distances":[.5],"edge-distances":"endpoints","source-endpoint":"data(sourceEndpoint)","target-endpoint":"data(targetEndpoint)"}},{selector:"node",style:{"compound-sizing-wrt-labels":"include"}},{selector:"node[label]",style:{"text-valign":"bottom","text-halign":"center","font-size":`${Ri("fontSize")}px`}},{selector:".node-service",style:{label:"data(label)",width:"data(width)",height:"data(height)"}},{selector:".node-junction",style:{width:"data(width)",height:"data(height)"}},{selector:".node-group",style:{padding:`${Ri("padding")}px`}}]});u.remove(),xrt(r,h),grt(t,h),yrt(e,h),brt(n,h);let f=wrt(i,a,s),d=Trt(a),p=h.layout({name:"fcose",quality:"proof",styleEnabled:!1,animate:!1,nodeDimensionsIncludeLabels:!1,idealEdgeLength(m){let[g,y]=m.connectedNodes(),{parent:v}=Hf(g),{parent:x}=Hf(y);return v===x?1.5*Ri("iconSize"):.5*Ri("iconSize")},edgeElasticity(m){let[g,y]=m.connectedNodes(),{parent:v}=Hf(g),{parent:x}=Hf(y);return v===x?.45:.001},alignmentConstraint:f,relativePlacementConstraint:d});p.one("layoutstop",()=>{function m(g,y,v,x){let b,w,{x:C,y:T}=g,{x:E,y:A}=y;w=(x-T+(C-v)*(T-A)/(C-E))/Math.sqrt(1+Math.pow((T-A)/(C-E),2)),b=Math.sqrt(Math.pow(x-T,2)+Math.pow(v-C,2)-Math.pow(w,2));let S=Math.sqrt(Math.pow(E-C,2)+Math.pow(A-T,2));b=b/S;let _=(E-C)*(x-T)-(A-T)*(v-C);switch(!0){case _>=0:_=1;break;case _<0:_=-1;break}let I=(E-C)*(v-C)+(A-T)*(x-T);switch(!0){case I>=0:I=1;break;case I<0:I=-1;break}return w=Math.abs(w)*_,b=b*I,{distances:w,weights:b}}o(m,"getSegmentWeights"),h.startBatch();for(let g of Object.values(h.edges()))if(g.data?.()){let{x:y,y:v}=g.source().position(),{x,y:b}=g.target().position();if(y!==x&&v!==b){let w=g.sourceEndpoint(),C=g.targetEndpoint(),{sourceDir:T}=fC(g),[E,A]=ru(T)?[w.x,C.y]:[C.x,w.y],{weights:S,distances:_}=m(w,C,E,A);g.style("segment-distances",_),g.style("segment-weights",S)}}h.endBatch(),p.run()}),p.run(),h.ready(m=>{X.info("Ready",m),l(h)})})}var $ve,Ert,zve,Gve=N(()=>{"use strict";Yl();CB();$ve=Sa(Mve(),1);pr();vt();qc();Si();_4();bF();dC();Fve();U4([{name:a0.prefix,icons:a0}]);nl.use($ve.default);o(grt,"addServices");o(yrt,"addJunctions");o(vrt,"positionNodes");o(xrt,"addGroups");o(brt,"addEdges");o(wrt,"getAlignments");o(Trt,"getRelativeConstraints");o(krt,"layoutArchitecture");Ert=o(async(t,e,r,n)=>{let i=n.db,a=i.getServices(),s=i.getJunctions(),l=i.getGroups(),u=i.getEdges(),h=i.getDataStructures(),f=sa(e),d=f.append("g");d.attr("class","architecture-edges");let p=f.append("g");p.attr("class","architecture-services");let m=f.append("g");m.attr("class","architecture-groups"),await Pve(i,p,a),Bve(i,p,s);let g=await krt(a,s,l,u,i,h);await Ive(d,g),await Ove(m,g),vrt(i,g),_o(void 0,f,Ri("padding"),Ri("useMaxWidth"))},"draw"),zve={draw:Ert}});var Vve={};hr(Vve,{diagram:()=>Srt});var Srt,Uve=N(()=>{"use strict";Lve();_4();Nve();Gve();Srt={parser:Dve,db:i0,renderer:zve,styles:Rve}});var hnt={};hr(hnt,{default:()=>unt});Yl();VC();ed();var ZX="c4",RCe=o(t=>/^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(t),"detector"),NCe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(QX(),KX));return{id:ZX,diagram:t}},"loader"),MCe={id:ZX,detector:RCe,loader:NCe},JX=MCe;var Jie="flowchart",pOe=o((t,e)=>e?.flowchart?.defaultRenderer==="dagre-wrapper"||e?.flowchart?.defaultRenderer==="elk"?!1:/^\s*graph/.test(t),"detector"),mOe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(fk(),hk));return{id:Jie,diagram:t}},"loader"),gOe={id:Jie,detector:pOe,loader:mOe},eae=gOe;var tae="flowchart-v2",yOe=o((t,e)=>e?.flowchart?.defaultRenderer==="dagre-d3"?!1:(e?.flowchart?.defaultRenderer==="elk"&&(e.layout="elk"),/^\s*graph/.test(t)&&e?.flowchart?.defaultRenderer==="dagre-wrapper"?!0:/^\s*flowchart/.test(t)),"detector"),vOe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(fk(),hk));return{id:tae,diagram:t}},"loader"),xOe={id:tae,detector:yOe,loader:vOe},rae=xOe;var hae="er",EOe=o(t=>/^\s*erDiagram/.test(t),"detector"),SOe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(uae(),cae));return{id:hae,diagram:t}},"loader"),COe={id:hae,detector:EOe,loader:SOe},fae=COe;var pue="gitGraph",K$e=o(t=>/^\s*gitGraph/.test(t),"detector"),Q$e=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(due(),fue));return{id:pue,diagram:t}},"loader"),Z$e={id:pue,detector:K$e,loader:Q$e},mue=Z$e;var Wue="gantt",$ze=o(t=>/^\s*gantt/.test(t),"detector"),zze=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Hue(),Uue));return{id:Wue,diagram:t}},"loader"),Gze={id:Wue,detector:$ze,loader:zze},que=Gze;var the="info",Yze=o(t=>/^\s*info/.test(t),"detector"),Xze=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(ehe(),Jue));return{id:the,diagram:t}},"loader"),rhe={id:the,detector:Yze,loader:Xze};var fhe="pie",oGe=o(t=>/^\s*pie/.test(t),"detector"),lGe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(hhe(),uhe));return{id:fhe,diagram:t}},"loader"),dhe={id:fhe,detector:oGe,loader:lGe};var Che="quadrantChart",CGe=o(t=>/^\s*quadrantChart/.test(t),"detector"),AGe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(She(),Ehe));return{id:Che,diagram:t}},"loader"),_Ge={id:Che,detector:CGe,loader:AGe},Ahe=_Ge;var efe="xychart",WGe=o(t=>/^\s*xychart-beta/.test(t),"detector"),qGe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Jhe(),Zhe));return{id:efe,diagram:t}},"loader"),YGe={id:efe,detector:WGe,loader:qGe},tfe=YGe;var ufe="requirement",QGe=o(t=>/^\s*requirement(Diagram)?/.test(t),"detector"),ZGe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(cfe(),lfe));return{id:ufe,diagram:t}},"loader"),JGe={id:ufe,detector:QGe,loader:ZGe},hfe=JGe;var Rfe="sequence",PVe=o(t=>/^\s*sequenceDiagram/.test(t),"detector"),BVe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Lfe(),Dfe));return{id:Rfe,diagram:t}},"loader"),FVe={id:Rfe,detector:PVe,loader:BVe},Nfe=FVe;var Ffe="class",HVe=o((t,e)=>e?.class?.defaultRenderer==="dagre-wrapper"?!1:/^\s*classDiagram/.test(t),"detector"),WVe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Bfe(),Pfe));return{id:Ffe,diagram:t}},"loader"),qVe={id:Ffe,detector:HVe,loader:WVe},$fe=qVe;var Vfe="classDiagram",XVe=o((t,e)=>/^\s*classDiagram/.test(t)&&e?.class?.defaultRenderer==="dagre-wrapper"?!0:/^\s*classDiagram-v2/.test(t),"detector"),jVe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Gfe(),zfe));return{id:Vfe,diagram:t}},"loader"),KVe={id:Vfe,detector:XVe,loader:jVe},Ufe=KVe;var bde="state",wUe=o((t,e)=>e?.state?.defaultRenderer==="dagre-wrapper"?!1:/^\s*stateDiagram/.test(t),"detector"),TUe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(xde(),vde));return{id:bde,diagram:t}},"loader"),kUe={id:bde,detector:wUe,loader:TUe},wde=kUe;var Ede="stateDiagram",SUe=o((t,e)=>!!(/^\s*stateDiagram-v2/.test(t)||/^\s*stateDiagram/.test(t)&&e?.state?.defaultRenderer==="dagre-wrapper"),"detector"),CUe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(kde(),Tde));return{id:Ede,diagram:t}},"loader"),AUe={id:Ede,detector:SUe,loader:CUe},Sde=AUe;var Gde="journey",XUe=o(t=>/^\s*journey/.test(t),"detector"),jUe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(zde(),$de));return{id:Gde,diagram:t}},"loader"),KUe={id:Gde,detector:XUe,loader:jUe},Vde=KUe;vt();qc();Si();var QUe=o((t,e,r)=>{X.debug(`rendering svg for syntax error -`);let n=sa(e),i=n.append("g");n.attr("viewBox","0 0 2412 512"),vn(n,100,512,!0),i.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"),i.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"),i.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"),i.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"),i.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"),i.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"),i.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"),i.append("text").attr("class","error-text").attr("x",1250).attr("y",400).attr("font-size","100px").style("text-anchor","middle").text(`mermaid version ${r}`)},"draw"),mP={draw:QUe},Ude=mP;var ZUe={db:{},renderer:mP,parser:{parse:o(()=>{},"parse")}},Hde=ZUe;var Wde="flowchart-elk",JUe=o((t,e={})=>/^\s*flowchart-elk/.test(t)||/^\s*flowchart|graph/.test(t)&&e?.flowchart?.defaultRenderer==="elk"?(e.layout="elk",!0):!1,"detector"),eHe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(fk(),hk));return{id:Wde,diagram:t}},"loader"),tHe={id:Wde,detector:JUe,loader:eHe},qde=tHe;var vpe="timeline",bHe=o(t=>/^\s*timeline/.test(t),"detector"),wHe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(ype(),gpe));return{id:vpe,diagram:t}},"loader"),THe={id:vpe,detector:bHe,loader:wHe},xpe=THe;var Kge="mindmap",eJe=o(t=>/^\s*mindmap/.test(t),"detector"),tJe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(jge(),Xge));return{id:Kge,diagram:t}},"loader"),rJe={id:Kge,detector:eJe,loader:tJe},Qge=rJe;var c1e="kanban",vJe=o(t=>/^\s*kanban/.test(t),"detector"),xJe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(l1e(),o1e));return{id:c1e,diagram:t}},"loader"),bJe={id:c1e,detector:vJe,loader:xJe},u1e=bJe;var W1e="sankey",UJe=o(t=>/^\s*sankey-beta/.test(t),"detector"),HJe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(H1e(),U1e));return{id:W1e,diagram:t}},"loader"),WJe={id:W1e,detector:UJe,loader:HJe},q1e=WJe;var rye="packet",iet=o(t=>/^\s*packet-beta/.test(t),"detector"),aet=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(tye(),eye));return{id:rye,diagram:t}},"loader"),nye={id:rye,detector:iet,loader:aet};var pye="radar",Det=o(t=>/^\s*radar-beta/.test(t),"detector"),Let=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(dye(),fye));return{id:pye,diagram:t}},"loader"),mye={id:pye,detector:Det,loader:Let};var vve="block",Qtt=o(t=>/^\s*block-beta/.test(t),"detector"),Ztt=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(yve(),gve));return{id:vve,diagram:t}},"loader"),Jtt={id:vve,detector:Qtt,loader:Ztt},xve=Jtt;var Hve="architecture",Crt=o(t=>/^\s*architecture/.test(t),"detector"),Art=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Uve(),Vve));return{id:Hve,diagram:t}},"loader"),_rt={id:Hve,detector:Crt,loader:Art},Wve=_rt;ed();zt();var qve=!1,wy=o(()=>{qve||(qve=!0,fd("error",Hde,t=>t.toLowerCase().trim()==="error"),fd("---",{db:{clear:o(()=>{},"clear")},styles:{},renderer:{draw:o(()=>{},"draw")},parser:{parse:o(()=>{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")},"parse")},init:o(()=>null,"init")},t=>t.toLowerCase().trimStart().startsWith("---")),Dy(qde,Qge,Wve),Dy(JX,u1e,Ufe,$fe,fae,que,rhe,dhe,hfe,Nfe,rae,eae,xpe,mue,Sde,wde,Vde,Ahe,q1e,nye,tfe,xve,mye))},"addDiagrams");vt();ed();zt();var Yve=o(async()=>{X.debug("Loading registered diagrams");let e=(await Promise.allSettled(Object.entries(Jf).map(async([r,{detector:n,loader:i}])=>{if(i)try{rv(r)}catch{try{let{diagram:a,id:s}=await i();fd(s,a,n)}catch(a){throw X.error(`Failed to load external diagram with key ${r}. Removing from detectors.`),delete Jf[r],a}}}))).filter(r=>r.status==="rejected");if(e.length>0){X.error(`Failed to load ${e.length} external diagrams`);for(let r of e)X.error(r);throw new Error(`Failed to load ${e.length} external diagrams`)}},"loadRegisteredDiagrams");vt();pr();var pC="comm",mC="rule",gC="decl";var Xve="@import";var jve="@namespace",Kve="@keyframes";var Qve="@layer";var wF=Math.abs,N4=String.fromCharCode;function yC(t){return t.trim()}o(yC,"trim");function M4(t,e,r){return t.replace(e,r)}o(M4,"replace");function Zve(t,e,r){return t.indexOf(e,r)}o(Zve,"indexof");function Wf(t,e){return t.charCodeAt(e)|0}o(Wf,"charat");function qf(t,e,r){return t.slice(e,r)}o(qf,"substr");function bo(t){return t.length}o(bo,"strlen");function Jve(t){return t.length}o(Jve,"sizeof");function Ty(t,e){return e.push(t),t}o(Ty,"append");var vC=1,ky=1,e2e=0,al=0,Ni=0,Sy="";function xC(t,e,r,n,i,a,s,l){return{value:t,root:e,parent:r,type:n,props:i,children:a,line:vC,column:ky,length:s,return:"",siblings:l}}o(xC,"node");function t2e(){return Ni}o(t2e,"char");function r2e(){return Ni=al>0?Wf(Sy,--al):0,ky--,Ni===10&&(ky=1,vC--),Ni}o(r2e,"prev");function sl(){return Ni=al2||Ey(Ni)>3?"":" "}o(a2e,"whitespace");function s2e(t,e){for(;--e&&sl()&&!(Ni<48||Ni>102||Ni>57&&Ni<65||Ni>70&&Ni<97););return bC(t,I4()+(e<6&&sh()==32&&sl()==32))}o(s2e,"escaping");function TF(t){for(;sl();)switch(Ni){case t:return al;case 34:case 39:t!==34&&t!==39&&TF(Ni);break;case 40:t===41&&TF(t);break;case 92:sl();break}return al}o(TF,"delimiter");function o2e(t,e){for(;sl()&&t+Ni!==57;)if(t+Ni===84&&sh()===47)break;return"/*"+bC(e,al-1)+"*"+N4(t===47?t:sl())}o(o2e,"commenter");function l2e(t){for(;!Ey(sh());)sl();return bC(t,al)}o(l2e,"identifier");function h2e(t){return i2e(TC("",null,null,null,[""],t=n2e(t),0,[0],t))}o(h2e,"compile");function TC(t,e,r,n,i,a,s,l,u){for(var h=0,f=0,d=s,p=0,m=0,g=0,y=1,v=1,x=1,b=0,w="",C=i,T=a,E=n,A=w;v;)switch(g=b,b=sl()){case 40:if(g!=108&&Wf(A,d-1)==58){Zve(A+=M4(wC(b),"&","&\f"),"&\f",wF(h?l[h-1]:0))!=-1&&(x=-1);break}case 34:case 39:case 91:A+=wC(b);break;case 9:case 10:case 13:case 32:A+=a2e(g);break;case 92:A+=s2e(I4()-1,7);continue;case 47:switch(sh()){case 42:case 47:Ty(Drt(o2e(sl(),I4()),e,r,u),u),(Ey(g||1)==5||Ey(sh()||1)==5)&&bo(A)&&qf(A,-1,void 0)!==" "&&(A+=" ");break;default:A+="/"}break;case 123*y:l[h++]=bo(A)*x;case 125*y:case 59:case 0:switch(b){case 0:case 125:v=0;case 59+f:x==-1&&(A=M4(A,/\f/g,"")),m>0&&(bo(A)-d||y===0&&g===47)&&Ty(m>32?u2e(A+";",n,r,d-1,u):u2e(M4(A," ","")+";",n,r,d-2,u),u);break;case 59:A+=";";default:if(Ty(E=c2e(A,e,r,h,f,i,l,w,C=[],T=[],d,a),a),b===123)if(f===0)TC(A,e,E,E,C,a,d,l,T);else{switch(p){case 99:if(Wf(A,3)===110)break;case 108:if(Wf(A,2)===97)break;default:f=0;case 100:case 109:case 115:}f?TC(t,E,E,n&&Ty(c2e(t,E,E,0,0,i,l,w,i,C=[],d,T),T),i,T,d,l,n?C:T):TC(A,E,E,E,[""],T,0,l,T)}}h=f=m=0,y=x=1,w=A="",d=s;break;case 58:d=1+bo(A),m=g;default:if(y<1){if(b==123)--y;else if(b==125&&y++==0&&r2e()==125)continue}switch(A+=N4(b),b*y){case 38:x=f>0?1:(A+="\f",-1);break;case 44:l[h++]=(bo(A)-1)*x,x=1;break;case 64:sh()===45&&(A+=wC(sl())),p=sh(),f=d=bo(w=A+=l2e(I4())),b++;break;case 45:g===45&&bo(A)==2&&(y=0)}}return a}o(TC,"parse");function c2e(t,e,r,n,i,a,s,l,u,h,f,d){for(var p=i-1,m=i===0?a:[""],g=Jve(m),y=0,v=0,x=0;y0?m[b]+" "+w:M4(w,/&\f/g,m[b])))&&(u[x++]=C);return xC(t,e,r,i===0?mC:l,u,h,f,d)}o(c2e,"ruleset");function Drt(t,e,r,n){return xC(t,e,r,pC,N4(t2e()),qf(t,2,-2),0,n)}o(Drt,"comment");function u2e(t,e,r,n,i){return xC(t,e,r,gC,qf(t,0,n),qf(t,n+1,-1),n,i)}o(u2e,"declaration");function kC(t,e){for(var r="",n=0;n{m2e.forEach(t=>{t()}),m2e=[]},"attachFunctions");vt();var y2e=o(t=>t.replace(/^\s*%%(?!{)[^\n]+\n?/gm,"").trimStart(),"cleanupComments");q4();Rw();function v2e(t){let e=t.match(W4);if(!e)return{text:t,metadata:{}};let r=gm(e[1],{schema:mm})??{};r=typeof r=="object"&&!Array.isArray(r)?r:{};let n={};return r.displayMode&&(n.displayMode=r.displayMode.toString()),r.title&&(n.title=r.title.toString()),r.config&&(n.config=r.config),{text:t.slice(e[0].length),metadata:n}}o(v2e,"extractFrontMatter");nr();var Rrt=o(t=>t.replace(/\r\n?/g,` -`).replace(/<(\w+)([^>]*)>/g,(e,r,n)=>"<"+r+n.replace(/="([^"]*)"/g,"='$1'")+">"),"cleanupText"),Nrt=o(t=>{let{text:e,metadata:r}=v2e(t),{displayMode:n,title:i,config:a={}}=r;return n&&(a.gantt||(a.gantt={}),a.gantt.displayMode=n),{title:i,config:a,text:e}},"processFrontmatter"),Mrt=o(t=>{let e=Gt.detectInit(t)??{},r=Gt.detectDirective(t,"wrap");return Array.isArray(r)?e.wrap=r.some(({type:n})=>n==="wrap"):r?.type==="wrap"&&(e.wrap=!0),{text:$X(t),directive:e}},"processDirectives");function kF(t){let e=Rrt(t),r=Nrt(e),n=Mrt(r.text),i=gi(r.config,n.directive);return t=y2e(n.text),{code:t,title:r.title,config:i}}o(kF,"preprocessDiagram");sA();Z4();nr();function x2e(t){let e=new TextEncoder().encode(t),r=Array.from(e,n=>String.fromCodePoint(n)).join("");return btoa(r)}o(x2e,"toBase64");var Irt=5e4,Ort="graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa",Prt="sandbox",Brt="loose",Frt="http://www.w3.org/2000/svg",$rt="http://www.w3.org/1999/xlink",zrt="http://www.w3.org/1999/xhtml",Grt="100%",Vrt="100%",Urt="border:0;margin:0;",Hrt="margin:0",Wrt="allow-top-navigation-by-user-activation allow-popups",qrt='The "iframe" tag is not supported by your browser.',Yrt=["foreignobject"],Xrt=["dominant-baseline"];function k2e(t){let e=kF(t);return Fy(),K$(e.config??{}),e}o(k2e,"processAndSetConfigs");async function jrt(t,e){wy();try{let{code:r,config:n}=k2e(t);return{diagramType:(await E2e(r)).type,config:n}}catch(r){if(e?.suppressErrors)return!1;throw r}}o(jrt,"parse");var b2e=o((t,e,r=[])=>` -.${t} ${e} { ${r.join(" !important; ")} !important; }`,"cssImportantStyles"),Krt=o((t,e=new Map)=>{let r="";if(t.themeCSS!==void 0&&(r+=` +`,"getStyles"),W2e=Unt});var QF=Pi((M4,KF)=>{"use strict";o(function(e,r){typeof M4=="object"&&typeof KF=="object"?KF.exports=r():typeof define=="function"&&define.amd?define([],r):typeof M4=="object"?M4.layoutBase=r():e.layoutBase=r()},"webpackUniversalModuleDefinition")(M4,function(){return function(t){var e={};function r(n){if(e[n])return e[n].exports;var i=e[n]={i:n,l:!1,exports:{}};return t[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return o(r,"__webpack_require__"),r.m=t,r.c=e,r.i=function(n){return n},r.d=function(n,i,a){r.o(n,i)||Object.defineProperty(n,i,{configurable:!1,enumerable:!0,get:a})},r.n=function(n){var i=n&&n.__esModule?o(function(){return n.default},"getDefault"):o(function(){return n},"getModuleExports");return r.d(i,"a",i),i},r.o=function(n,i){return Object.prototype.hasOwnProperty.call(n,i)},r.p="",r(r.s=28)}([function(t,e,r){"use strict";function n(){}o(n,"LayoutConstants"),n.QUALITY=1,n.DEFAULT_CREATE_BENDS_AS_NEEDED=!1,n.DEFAULT_INCREMENTAL=!1,n.DEFAULT_ANIMATION_ON_LAYOUT=!0,n.DEFAULT_ANIMATION_DURING_LAYOUT=!1,n.DEFAULT_ANIMATION_PERIOD=50,n.DEFAULT_UNIFORM_LEAF_NODE_SIZES=!1,n.DEFAULT_GRAPH_MARGIN=15,n.NODE_DIMENSIONS_INCLUDE_LABELS=!1,n.SIMPLE_NODE_SIZE=40,n.SIMPLE_NODE_HALF_SIZE=n.SIMPLE_NODE_SIZE/2,n.EMPTY_COMPOUND_NODE_SIZE=40,n.MIN_EDGE_LENGTH=1,n.WORLD_BOUNDARY=1e6,n.INITIAL_WORLD_BOUNDARY=n.WORLD_BOUNDARY/1e3,n.WORLD_CENTER_X=1200,n.WORLD_CENTER_Y=900,t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(8),a=r(9);function s(u,h,f){n.call(this,f),this.isOverlapingSourceAndTarget=!1,this.vGraphObject=f,this.bendpoints=[],this.source=u,this.target=h}o(s,"LEdge"),s.prototype=Object.create(n.prototype);for(var l in n)s[l]=n[l];s.prototype.getSource=function(){return this.source},s.prototype.getTarget=function(){return this.target},s.prototype.isInterGraph=function(){return this.isInterGraph},s.prototype.getLength=function(){return this.length},s.prototype.isOverlapingSourceAndTarget=function(){return this.isOverlapingSourceAndTarget},s.prototype.getBendpoints=function(){return this.bendpoints},s.prototype.getLca=function(){return this.lca},s.prototype.getSourceInLca=function(){return this.sourceInLca},s.prototype.getTargetInLca=function(){return this.targetInLca},s.prototype.getOtherEnd=function(u){if(this.source===u)return this.target;if(this.target===u)return this.source;throw"Node is not incident with this edge"},s.prototype.getOtherEndInGraph=function(u,h){for(var f=this.getOtherEnd(u),d=h.getGraphManager().getRoot();;){if(f.getOwner()==h)return f;if(f.getOwner()==d)break;f=f.getOwner().getParent()}return null},s.prototype.updateLength=function(){var u=new Array(4);this.isOverlapingSourceAndTarget=i.getIntersection(this.target.getRect(),this.source.getRect(),u),this.isOverlapingSourceAndTarget||(this.lengthX=u[0]-u[2],this.lengthY=u[1]-u[3],Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY))},s.prototype.updateLengthSimple=function(){this.lengthX=this.target.getCenterX()-this.source.getCenterX(),this.lengthY=this.target.getCenterY()-this.source.getCenterY(),Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY)},t.exports=s},function(t,e,r){"use strict";function n(i){this.vGraphObject=i}o(n,"LGraphObject"),t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(10),a=r(13),s=r(0),l=r(16),u=r(5);function h(d,p,m,g){m==null&&g==null&&(g=p),n.call(this,g),d.graphManager!=null&&(d=d.graphManager),this.estimatedSize=i.MIN_VALUE,this.inclusionTreeDepth=i.MAX_VALUE,this.vGraphObject=g,this.edges=[],this.graphManager=d,m!=null&&p!=null?this.rect=new a(p.x,p.y,m.width,m.height):this.rect=new a}o(h,"LNode"),h.prototype=Object.create(n.prototype);for(var f in n)h[f]=n[f];h.prototype.getEdges=function(){return this.edges},h.prototype.getChild=function(){return this.child},h.prototype.getOwner=function(){return this.owner},h.prototype.getWidth=function(){return this.rect.width},h.prototype.setWidth=function(d){this.rect.width=d},h.prototype.getHeight=function(){return this.rect.height},h.prototype.setHeight=function(d){this.rect.height=d},h.prototype.getCenterX=function(){return this.rect.x+this.rect.width/2},h.prototype.getCenterY=function(){return this.rect.y+this.rect.height/2},h.prototype.getCenter=function(){return new u(this.rect.x+this.rect.width/2,this.rect.y+this.rect.height/2)},h.prototype.getLocation=function(){return new u(this.rect.x,this.rect.y)},h.prototype.getRect=function(){return this.rect},h.prototype.getDiagonal=function(){return Math.sqrt(this.rect.width*this.rect.width+this.rect.height*this.rect.height)},h.prototype.getHalfTheDiagonal=function(){return Math.sqrt(this.rect.height*this.rect.height+this.rect.width*this.rect.width)/2},h.prototype.setRect=function(d,p){this.rect.x=d.x,this.rect.y=d.y,this.rect.width=p.width,this.rect.height=p.height},h.prototype.setCenter=function(d,p){this.rect.x=d-this.rect.width/2,this.rect.y=p-this.rect.height/2},h.prototype.setLocation=function(d,p){this.rect.x=d,this.rect.y=p},h.prototype.moveBy=function(d,p){this.rect.x+=d,this.rect.y+=p},h.prototype.getEdgeListToNode=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(y.target==d){if(y.source!=g)throw"Incorrect edge source!";p.push(y)}}),p},h.prototype.getEdgesBetween=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(!(y.source==g||y.target==g))throw"Incorrect edge source and/or target";(y.target==d||y.source==d)&&p.push(y)}),p},h.prototype.getNeighborsList=function(){var d=new Set,p=this;return p.edges.forEach(function(m){if(m.source==p)d.add(m.target);else{if(m.target!=p)throw"Incorrect incidency!";d.add(m.source)}}),d},h.prototype.withChildren=function(){var d=new Set,p,m;if(d.add(this),this.child!=null)for(var g=this.child.getNodes(),y=0;yp?(this.rect.x-=(this.labelWidth-p)/2,this.setWidth(this.labelWidth)):this.labelPosHorizontal=="right"&&this.setWidth(p+this.labelWidth)),this.labelHeight&&(this.labelPosVertical=="top"?(this.rect.y-=this.labelHeight,this.setHeight(m+this.labelHeight)):this.labelPosVertical=="center"&&this.labelHeight>m?(this.rect.y-=(this.labelHeight-m)/2,this.setHeight(this.labelHeight)):this.labelPosVertical=="bottom"&&this.setHeight(m+this.labelHeight))}}},h.prototype.getInclusionTreeDepth=function(){if(this.inclusionTreeDepth==i.MAX_VALUE)throw"assert failed";return this.inclusionTreeDepth},h.prototype.transform=function(d){var p=this.rect.x;p>s.WORLD_BOUNDARY?p=s.WORLD_BOUNDARY:p<-s.WORLD_BOUNDARY&&(p=-s.WORLD_BOUNDARY);var m=this.rect.y;m>s.WORLD_BOUNDARY?m=s.WORLD_BOUNDARY:m<-s.WORLD_BOUNDARY&&(m=-s.WORLD_BOUNDARY);var g=new u(p,m),y=d.inverseTransformPoint(g);this.setLocation(y.x,y.y)},h.prototype.getLeft=function(){return this.rect.x},h.prototype.getRight=function(){return this.rect.x+this.rect.width},h.prototype.getTop=function(){return this.rect.y},h.prototype.getBottom=function(){return this.rect.y+this.rect.height},h.prototype.getParent=function(){return this.owner==null?null:this.owner.getParent()},t.exports=h},function(t,e,r){"use strict";var n=r(0);function i(){}o(i,"FDLayoutConstants");for(var a in n)i[a]=n[a];i.MAX_ITERATIONS=2500,i.DEFAULT_EDGE_LENGTH=50,i.DEFAULT_SPRING_STRENGTH=.45,i.DEFAULT_REPULSION_STRENGTH=4500,i.DEFAULT_GRAVITY_STRENGTH=.4,i.DEFAULT_COMPOUND_GRAVITY_STRENGTH=1,i.DEFAULT_GRAVITY_RANGE_FACTOR=3.8,i.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=1.5,i.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION=!0,i.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION=!0,i.DEFAULT_COOLING_FACTOR_INCREMENTAL=.3,i.COOLING_ADAPTATION_FACTOR=.33,i.ADAPTATION_LOWER_NODE_LIMIT=1e3,i.ADAPTATION_UPPER_NODE_LIMIT=5e3,i.MAX_NODE_DISPLACEMENT_INCREMENTAL=100,i.MAX_NODE_DISPLACEMENT=i.MAX_NODE_DISPLACEMENT_INCREMENTAL*3,i.MIN_REPULSION_DIST=i.DEFAULT_EDGE_LENGTH/10,i.CONVERGENCE_CHECK_PERIOD=100,i.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=.1,i.MIN_EDGE_LENGTH=1,i.GRID_CALCULATION_CHECK_PERIOD=10,t.exports=i},function(t,e,r){"use strict";function n(i,a){i==null&&a==null?(this.x=0,this.y=0):(this.x=i,this.y=a)}o(n,"PointD"),n.prototype.getX=function(){return this.x},n.prototype.getY=function(){return this.y},n.prototype.setX=function(i){this.x=i},n.prototype.setY=function(i){this.y=i},n.prototype.getDifference=function(i){return new DimensionD(this.x-i.x,this.y-i.y)},n.prototype.getCopy=function(){return new n(this.x,this.y)},n.prototype.translate=function(i){return this.x+=i.width,this.y+=i.height,this},t.exports=n},function(t,e,r){"use strict";var n=r(2),i=r(10),a=r(0),s=r(7),l=r(3),u=r(1),h=r(13),f=r(12),d=r(11);function p(g,y,v){n.call(this,v),this.estimatedSize=i.MIN_VALUE,this.margin=a.DEFAULT_GRAPH_MARGIN,this.edges=[],this.nodes=[],this.isConnected=!1,this.parent=g,y!=null&&y instanceof s?this.graphManager=y:y!=null&&y instanceof Layout&&(this.graphManager=y.graphManager)}o(p,"LGraph"),p.prototype=Object.create(n.prototype);for(var m in n)p[m]=n[m];p.prototype.getNodes=function(){return this.nodes},p.prototype.getEdges=function(){return this.edges},p.prototype.getGraphManager=function(){return this.graphManager},p.prototype.getParent=function(){return this.parent},p.prototype.getLeft=function(){return this.left},p.prototype.getRight=function(){return this.right},p.prototype.getTop=function(){return this.top},p.prototype.getBottom=function(){return this.bottom},p.prototype.isConnected=function(){return this.isConnected},p.prototype.add=function(g,y,v){if(y==null&&v==null){var x=g;if(this.graphManager==null)throw"Graph has no graph mgr!";if(this.getNodes().indexOf(x)>-1)throw"Node already in graph!";return x.owner=this,this.getNodes().push(x),x}else{var b=g;if(!(this.getNodes().indexOf(y)>-1&&this.getNodes().indexOf(v)>-1))throw"Source or target not in graph!";if(!(y.owner==v.owner&&y.owner==this))throw"Both owners must be this graph!";return y.owner!=v.owner?null:(b.source=y,b.target=v,b.isInterGraph=!1,this.getEdges().push(b),y.edges.push(b),v!=y&&v.edges.push(b),b)}},p.prototype.remove=function(g){var y=g;if(g instanceof l){if(y==null)throw"Node is null!";if(!(y.owner!=null&&y.owner==this))throw"Owner graph is invalid!";if(this.graphManager==null)throw"Owner graph manager is invalid!";for(var v=y.edges.slice(),x,b=v.length,T=0;T-1&&E>-1))throw"Source and/or target doesn't know this edge!";x.source.edges.splice(w,1),x.target!=x.source&&x.target.edges.splice(E,1);var S=x.source.owner.getEdges().indexOf(x);if(S==-1)throw"Not in owner's edge list!";x.source.owner.getEdges().splice(S,1)}},p.prototype.updateLeftTop=function(){for(var g=i.MAX_VALUE,y=i.MAX_VALUE,v,x,b,T=this.getNodes(),S=T.length,w=0;wv&&(g=v),y>x&&(y=x)}return g==i.MAX_VALUE?null:(T[0].getParent().paddingLeft!=null?b=T[0].getParent().paddingLeft:b=this.margin,this.left=y-b,this.top=g-b,new f(this.left,this.top))},p.prototype.updateBounds=function(g){for(var y=i.MAX_VALUE,v=-i.MAX_VALUE,x=i.MAX_VALUE,b=-i.MAX_VALUE,T,S,w,E,_,C=this.nodes,D=C.length,O=0;OT&&(y=T),vw&&(x=w),bT&&(y=T),vw&&(x=w),b=this.nodes.length){var D=0;v.forEach(function(O){O.owner==g&&D++}),D==this.nodes.length&&(this.isConnected=!0)}},t.exports=p},function(t,e,r){"use strict";var n,i=r(1);function a(s){n=r(6),this.layout=s,this.graphs=[],this.edges=[]}o(a,"LGraphManager"),a.prototype.addRoot=function(){var s=this.layout.newGraph(),l=this.layout.newNode(null),u=this.add(s,l);return this.setRootGraph(u),this.rootGraph},a.prototype.add=function(s,l,u,h,f){if(u==null&&h==null&&f==null){if(s==null)throw"Graph is null!";if(l==null)throw"Parent node is null!";if(this.graphs.indexOf(s)>-1)throw"Graph already in this graph mgr!";if(this.graphs.push(s),s.parent!=null)throw"Already has a parent!";if(l.child!=null)throw"Already has a child!";return s.parent=l,l.child=s,s}else{f=u,h=l,u=s;var d=h.getOwner(),p=f.getOwner();if(!(d!=null&&d.getGraphManager()==this))throw"Source not in this graph mgr!";if(!(p!=null&&p.getGraphManager()==this))throw"Target not in this graph mgr!";if(d==p)return u.isInterGraph=!1,d.add(u,h,f);if(u.isInterGraph=!0,u.source=h,u.target=f,this.edges.indexOf(u)>-1)throw"Edge already in inter-graph edge list!";if(this.edges.push(u),!(u.source!=null&&u.target!=null))throw"Edge source and/or target is null!";if(!(u.source.edges.indexOf(u)==-1&&u.target.edges.indexOf(u)==-1))throw"Edge already in source and/or target incidency list!";return u.source.edges.push(u),u.target.edges.push(u),u}},a.prototype.remove=function(s){if(s instanceof n){var l=s;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 u=[];u=u.concat(l.getEdges());for(var h,f=u.length,d=0;d=s.getRight()?l[0]+=Math.min(s.getX()-a.getX(),a.getRight()-s.getRight()):s.getX()<=a.getX()&&s.getRight()>=a.getRight()&&(l[0]+=Math.min(a.getX()-s.getX(),s.getRight()-a.getRight())),a.getY()<=s.getY()&&a.getBottom()>=s.getBottom()?l[1]+=Math.min(s.getY()-a.getY(),a.getBottom()-s.getBottom()):s.getY()<=a.getY()&&s.getBottom()>=a.getBottom()&&(l[1]+=Math.min(a.getY()-s.getY(),s.getBottom()-a.getBottom()));var f=Math.abs((s.getCenterY()-a.getCenterY())/(s.getCenterX()-a.getCenterX()));s.getCenterY()===a.getCenterY()&&s.getCenterX()===a.getCenterX()&&(f=1);var d=f*l[0],p=l[1]/f;l[0]d)return l[0]=u,l[1]=m,l[2]=f,l[3]=C,!1;if(hf)return l[0]=p,l[1]=h,l[2]=E,l[3]=d,!1;if(uf?(l[0]=y,l[1]=v,k=!0):(l[0]=g,l[1]=m,k=!0):A===M&&(u>f?(l[0]=p,l[1]=m,k=!0):(l[0]=x,l[1]=v,k=!0)),-I===M?f>u?(l[2]=_,l[3]=C,L=!0):(l[2]=E,l[3]=w,L=!0):I===M&&(f>u?(l[2]=S,l[3]=w,L=!0):(l[2]=D,l[3]=C,L=!0)),k&&L)return!1;if(u>f?h>d?(P=this.getCardinalDirection(A,M,4),B=this.getCardinalDirection(I,M,2)):(P=this.getCardinalDirection(-A,M,3),B=this.getCardinalDirection(-I,M,1)):h>d?(P=this.getCardinalDirection(-A,M,1),B=this.getCardinalDirection(-I,M,3)):(P=this.getCardinalDirection(A,M,2),B=this.getCardinalDirection(I,M,4)),!k)switch(P){case 1:z=m,F=u+-T/M,l[0]=F,l[1]=z;break;case 2:F=x,z=h+b*M,l[0]=F,l[1]=z;break;case 3:z=v,F=u+T/M,l[0]=F,l[1]=z;break;case 4:F=y,z=h+-b*M,l[0]=F,l[1]=z;break}if(!L)switch(B){case 1:U=w,$=f+-R/M,l[2]=$,l[3]=U;break;case 2:$=D,U=d+O*M,l[2]=$,l[3]=U;break;case 3:U=C,$=f+R/M,l[2]=$,l[3]=U;break;case 4:$=_,U=d+-O*M,l[2]=$,l[3]=U;break}}return!1},i.getCardinalDirection=function(a,s,l){return a>s?l:1+l%4},i.getIntersection=function(a,s,l,u){if(u==null)return this.getIntersection2(a,s,l);var h=a.x,f=a.y,d=s.x,p=s.y,m=l.x,g=l.y,y=u.x,v=u.y,x=void 0,b=void 0,T=void 0,S=void 0,w=void 0,E=void 0,_=void 0,C=void 0,D=void 0;return T=p-f,w=h-d,_=d*f-h*p,S=v-g,E=m-y,C=y*g-m*v,D=T*E-S*w,D===0?null:(x=(w*C-E*_)/D,b=(S*_-T*C)/D,new n(x,b))},i.angleOfVector=function(a,s,l,u){var h=void 0;return a!==l?(h=Math.atan((u-s)/(l-a)),l=0){var v=(-m+Math.sqrt(m*m-4*p*g))/(2*p),x=(-m-Math.sqrt(m*m-4*p*g))/(2*p),b=null;return v>=0&&v<=1?[v]:x>=0&&x<=1?[x]:b}else return null},i.HALF_PI=.5*Math.PI,i.ONE_AND_HALF_PI=1.5*Math.PI,i.TWO_PI=2*Math.PI,i.THREE_PI=3*Math.PI,t.exports=i},function(t,e,r){"use strict";function n(){}o(n,"IMath"),n.sign=function(i){return i>0?1:i<0?-1:0},n.floor=function(i){return i<0?Math.ceil(i):Math.floor(i)},n.ceil=function(i){return i<0?Math.floor(i):Math.ceil(i)},t.exports=n},function(t,e,r){"use strict";function n(){}o(n,"Integer"),n.MAX_VALUE=2147483647,n.MIN_VALUE=-2147483648,t.exports=n},function(t,e,r){"use strict";var n=function(){function h(f,d){for(var p=0;p"u"?"undefined":n(a);return a==null||s!="object"&&s!="function"},t.exports=i},function(t,e,r){"use strict";function n(m){if(Array.isArray(m)){for(var g=0,y=Array(m.length);g0&&g;){for(T.push(w[0]);T.length>0&&g;){var E=T[0];T.splice(0,1),b.add(E);for(var _=E.getEdges(),x=0;x<_.length;x++){var C=_[x].getOtherEnd(E);if(S.get(E)!=C)if(!b.has(C))T.push(C),S.set(C,E);else{g=!1;break}}}if(!g)m=[];else{var D=[].concat(n(b));m.push(D);for(var x=0;x-1&&w.splice(R,1)}b=new Set,S=new Map}}return m},p.prototype.createDummyNodesForBendpoints=function(m){for(var g=[],y=m.source,v=this.graphManager.calcLowestCommonAncestor(m.source,m.target),x=0;x0){for(var v=this.edgeToDummyNodes.get(y),x=0;x=0&&g.splice(C,1);var D=S.getNeighborsList();D.forEach(function(k){if(y.indexOf(k)<0){var L=v.get(k),A=L-1;A==1&&E.push(k),v.set(k,A)}})}y=y.concat(E),(g.length==1||g.length==2)&&(x=!0,b=g[0])}return b},p.prototype.setGraphManager=function(m){this.graphManager=m},t.exports=p},function(t,e,r){"use strict";function n(){}o(n,"RandomSeed"),n.seed=1,n.x=0,n.nextDouble=function(){return n.x=Math.sin(n.seed++)*1e4,n.x-Math.floor(n.x)},t.exports=n},function(t,e,r){"use strict";var n=r(5);function i(a,s){this.lworldOrgX=0,this.lworldOrgY=0,this.ldeviceOrgX=0,this.ldeviceOrgY=0,this.lworldExtX=1,this.lworldExtY=1,this.ldeviceExtX=1,this.ldeviceExtY=1}o(i,"Transform"),i.prototype.getWorldOrgX=function(){return this.lworldOrgX},i.prototype.setWorldOrgX=function(a){this.lworldOrgX=a},i.prototype.getWorldOrgY=function(){return this.lworldOrgY},i.prototype.setWorldOrgY=function(a){this.lworldOrgY=a},i.prototype.getWorldExtX=function(){return this.lworldExtX},i.prototype.setWorldExtX=function(a){this.lworldExtX=a},i.prototype.getWorldExtY=function(){return this.lworldExtY},i.prototype.setWorldExtY=function(a){this.lworldExtY=a},i.prototype.getDeviceOrgX=function(){return this.ldeviceOrgX},i.prototype.setDeviceOrgX=function(a){this.ldeviceOrgX=a},i.prototype.getDeviceOrgY=function(){return this.ldeviceOrgY},i.prototype.setDeviceOrgY=function(a){this.ldeviceOrgY=a},i.prototype.getDeviceExtX=function(){return this.ldeviceExtX},i.prototype.setDeviceExtX=function(a){this.ldeviceExtX=a},i.prototype.getDeviceExtY=function(){return this.ldeviceExtY},i.prototype.setDeviceExtY=function(a){this.ldeviceExtY=a},i.prototype.transformX=function(a){var s=0,l=this.lworldExtX;return l!=0&&(s=this.ldeviceOrgX+(a-this.lworldOrgX)*this.ldeviceExtX/l),s},i.prototype.transformY=function(a){var s=0,l=this.lworldExtY;return l!=0&&(s=this.ldeviceOrgY+(a-this.lworldOrgY)*this.ldeviceExtY/l),s},i.prototype.inverseTransformX=function(a){var s=0,l=this.ldeviceExtX;return l!=0&&(s=this.lworldOrgX+(a-this.ldeviceOrgX)*this.lworldExtX/l),s},i.prototype.inverseTransformY=function(a){var s=0,l=this.ldeviceExtY;return l!=0&&(s=this.lworldOrgY+(a-this.ldeviceOrgY)*this.lworldExtY/l),s},i.prototype.inverseTransformPoint=function(a){var s=new n(this.inverseTransformX(a.x),this.inverseTransformY(a.y));return s},t.exports=i},function(t,e,r){"use strict";function n(d){if(Array.isArray(d)){for(var p=0,m=Array(d.length);pa.ADAPTATION_LOWER_NODE_LIMIT&&(this.coolingFactor=Math.max(this.coolingFactor*a.COOLING_ADAPTATION_FACTOR,this.coolingFactor-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*this.coolingFactor*(1-a.COOLING_ADAPTATION_FACTOR))),this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT_INCREMENTAL):(d>a.ADAPTATION_LOWER_NODE_LIMIT?this.coolingFactor=Math.max(a.COOLING_ADAPTATION_FACTOR,1-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*(1-a.COOLING_ADAPTATION_FACTOR)):this.coolingFactor=1,this.initialCoolingFactor=this.coolingFactor,this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT),this.maxIterations=Math.max(this.getAllNodes().length*5,this.maxIterations),this.displacementThresholdPerNode=3*a.DEFAULT_EDGE_LENGTH/100,this.totalDisplacementThreshold=this.displacementThresholdPerNode*this.getAllNodes().length,this.repulsionRange=this.calcRepulsionRange()},h.prototype.calcSpringForces=function(){for(var d=this.getAllEdges(),p,m=0;m0&&arguments[0]!==void 0?arguments[0]:!0,p=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,m,g,y,v,x=this.getAllNodes(),b;if(this.useFRGridVariant)for(this.totalIterations%a.GRID_CALCULATION_CHECK_PERIOD==1&&d&&this.updateGrid(),b=new Set,m=0;mT||b>T)&&(d.gravitationForceX=-this.gravityConstant*y,d.gravitationForceY=-this.gravityConstant*v)):(T=p.getEstimatedSize()*this.compoundGravityRangeFactor,(x>T||b>T)&&(d.gravitationForceX=-this.gravityConstant*y*this.compoundGravityConstant,d.gravitationForceY=-this.gravityConstant*v*this.compoundGravityConstant))},h.prototype.isConverged=function(){var d,p=!1;return this.totalIterations>this.maxIterations/3&&(p=Math.abs(this.totalDisplacement-this.oldTotalDisplacement)<2),d=this.totalDisplacement=x.length||T>=x[0].length)){for(var S=0;Sh},"_defaultCompareFunction")}]),l}();t.exports=s},function(t,e,r){"use strict";function n(){}o(n,"SVD"),n.svd=function(i){this.U=null,this.V=null,this.s=null,this.m=0,this.n=0,this.m=i.length,this.n=i[0].length;var a=Math.min(this.m,this.n);this.s=function(bt){for(var ut=[];bt-- >0;)ut.push(0);return ut}(Math.min(this.m+1,this.n)),this.U=function(bt){var ut=o(function St(ft){if(ft.length==0)return 0;for(var vt=[],nt=0;nt0;)ut.push(0);return ut}(this.n),l=function(bt){for(var ut=[];bt-- >0;)ut.push(0);return ut}(this.m),u=!0,h=!0,f=Math.min(this.m-1,this.n),d=Math.max(0,Math.min(this.n-2,this.m)),p=0;p=0;M--)if(this.s[M]!==0){for(var P=M+1;P=0;ee--){if(function(bt,ut){return bt&&ut}(ee0;){var le=void 0,J=void 0;for(le=L-2;le>=-1&&le!==-1;le--)if(Math.abs(s[le])<=he+te*(Math.abs(this.s[le])+Math.abs(this.s[le+1]))){s[le]=0;break}if(le===L-2)J=4;else{var Se=void 0;for(Se=L-1;Se>=le&&Se!==le;Se--){var se=(Se!==L?Math.abs(s[Se]):0)+(Se!==le+1?Math.abs(s[Se-1]):0);if(Math.abs(this.s[Se])<=he+te*se){this.s[Se]=0;break}}Se===le?J=3:Se===L-1?J=1:(J=2,le=Se)}switch(le++,J){case 1:{var ae=s[L-2];s[L-2]=0;for(var Oe=L-2;Oe>=le;Oe--){var ye=n.hypot(this.s[Oe],ae),Be=this.s[Oe]/ye,He=ae/ye;if(this.s[Oe]=ye,Oe!==le&&(ae=-He*s[Oe-1],s[Oe-1]=Be*s[Oe-1]),h)for(var ze=0;ze=this.s[le+1]);){var ot=this.s[le];if(this.s[le]=this.s[le+1],this.s[le+1]=ot,h&&leMath.abs(a)?(s=a/i,s=Math.abs(i)*Math.sqrt(1+s*s)):a!=0?(s=i/a,s=Math.abs(a)*Math.sqrt(1+s*s)):s=0,s},t.exports=n},function(t,e,r){"use strict";var n=function(){function s(l,u){for(var h=0;h2&&arguments[2]!==void 0?arguments[2]:1,f=arguments.length>3&&arguments[3]!==void 0?arguments[3]:-1,d=arguments.length>4&&arguments[4]!==void 0?arguments[4]:-1;i(this,s),this.sequence1=l,this.sequence2=u,this.match_score=h,this.mismatch_penalty=f,this.gap_penalty=d,this.iMax=l.length+1,this.jMax=u.length+1,this.grid=new Array(this.iMax);for(var p=0;p=0;l--){var u=this.listeners[l];u.event===a&&u.callback===s&&this.listeners.splice(l,1)}},i.emit=function(a,s){for(var l=0;l{"use strict";o(function(e,r){typeof I4=="object"&&typeof ZF=="object"?ZF.exports=r(QF()):typeof define=="function"&&define.amd?define(["layout-base"],r):typeof I4=="object"?I4.coseBase=r(QF()):e.coseBase=r(e.layoutBase)},"webpackUniversalModuleDefinition")(I4,function(t){return(()=>{"use strict";var e={45:(a,s,l)=>{var u={};u.layoutBase=l(551),u.CoSEConstants=l(806),u.CoSEEdge=l(767),u.CoSEGraph=l(880),u.CoSEGraphManager=l(578),u.CoSELayout=l(765),u.CoSENode=l(991),u.ConstraintHandler=l(902),a.exports=u},806:(a,s,l)=>{var u=l(551).FDLayoutConstants;function h(){}o(h,"CoSEConstants");for(var f in u)h[f]=u[f];h.DEFAULT_USE_MULTI_LEVEL_SCALING=!1,h.DEFAULT_RADIAL_SEPARATION=u.DEFAULT_EDGE_LENGTH,h.DEFAULT_COMPONENT_SEPERATION=60,h.TILE=!0,h.TILING_PADDING_VERTICAL=10,h.TILING_PADDING_HORIZONTAL=10,h.TRANSFORM_ON_CONSTRAINT_HANDLING=!0,h.ENFORCE_CONSTRAINTS=!0,h.APPLY_LAYOUT=!0,h.RELAX_MOVEMENT_ON_CONSTRAINTS=!0,h.TREE_REDUCTION_ON_INCREMENTAL=!0,h.PURE_INCREMENTAL=h.DEFAULT_INCREMENTAL,a.exports=h},767:(a,s,l)=>{var u=l(551).FDLayoutEdge;function h(d,p,m){u.call(this,d,p,m)}o(h,"CoSEEdge"),h.prototype=Object.create(u.prototype);for(var f in u)h[f]=u[f];a.exports=h},880:(a,s,l)=>{var u=l(551).LGraph;function h(d,p,m){u.call(this,d,p,m)}o(h,"CoSEGraph"),h.prototype=Object.create(u.prototype);for(var f in u)h[f]=u[f];a.exports=h},578:(a,s,l)=>{var u=l(551).LGraphManager;function h(d){u.call(this,d)}o(h,"CoSEGraphManager"),h.prototype=Object.create(u.prototype);for(var f in u)h[f]=u[f];a.exports=h},765:(a,s,l)=>{var u=l(551).FDLayout,h=l(578),f=l(880),d=l(991),p=l(767),m=l(806),g=l(902),y=l(551).FDLayoutConstants,v=l(551).LayoutConstants,x=l(551).Point,b=l(551).PointD,T=l(551).DimensionD,S=l(551).Layout,w=l(551).Integer,E=l(551).IGeometry,_=l(551).LGraph,C=l(551).Transform,D=l(551).LinkedList;function O(){u.call(this),this.toBeTiled={},this.constraints={}}o(O,"CoSELayout"),O.prototype=Object.create(u.prototype);for(var R in u)O[R]=u[R];O.prototype.newGraphManager=function(){var k=new h(this);return this.graphManager=k,k},O.prototype.newGraph=function(k){return new f(null,this.graphManager,k)},O.prototype.newNode=function(k){return new d(this.graphManager,k)},O.prototype.newEdge=function(k){return new p(null,null,k)},O.prototype.initParameters=function(){u.prototype.initParameters.call(this,arguments),this.isSubLayout||(m.DEFAULT_EDGE_LENGTH<10?this.idealEdgeLength=10:this.idealEdgeLength=m.DEFAULT_EDGE_LENGTH,this.useSmartIdealEdgeLengthCalculation=m.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION,this.gravityConstant=y.DEFAULT_GRAVITY_STRENGTH,this.compoundGravityConstant=y.DEFAULT_COMPOUND_GRAVITY_STRENGTH,this.gravityRangeFactor=y.DEFAULT_GRAVITY_RANGE_FACTOR,this.compoundGravityRangeFactor=y.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR,this.prunedNodesAll=[],this.growTreeIterations=0,this.afterGrowthIterations=0,this.isTreeGrowing=!1,this.isGrowthFinished=!1)},O.prototype.initSpringEmbedder=function(){u.prototype.initSpringEmbedder.call(this),this.coolingCycle=0,this.maxCoolingCycle=this.maxIterations/y.CONVERGENCE_CHECK_PERIOD,this.finalTemperature=.04,this.coolingAdjuster=1},O.prototype.layout=function(){var k=v.DEFAULT_CREATE_BENDS_AS_NEEDED;return k&&(this.createBendpoints(),this.graphManager.resetAllEdges()),this.level=0,this.classicLayout()},O.prototype.classicLayout=function(){if(this.nodesWithGravity=this.calculateNodesToApplyGravitationTo(),this.graphManager.setAllNodesToApplyGravitation(this.nodesWithGravity),this.calcNoOfChildrenForAllNodes(),this.graphManager.calcLowestCommonAncestors(),this.graphManager.calcInclusionTreeDepths(),this.graphManager.getRoot().calcEstimatedSize(),this.calcIdealEdgeLengths(),this.incremental){if(m.TREE_REDUCTION_ON_INCREMENTAL){this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var L=new Set(this.getAllNodes()),A=this.nodesWithGravity.filter(function(P){return L.has(P)});this.graphManager.setAllNodesToApplyGravitation(A)}}else{var k=this.getFlatForest();if(k.length>0)this.positionNodesRadially(k);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var L=new Set(this.getAllNodes()),A=this.nodesWithGravity.filter(function(I){return L.has(I)});this.graphManager.setAllNodesToApplyGravitation(A),this.positionNodesRandomly()}}return Object.keys(this.constraints).length>0&&(g.handleConstraints(this),this.initConstraintVariables()),this.initSpringEmbedder(),m.APPLY_LAYOUT&&this.runSpringEmbedder(),!0},O.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%y.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 k=new Set(this.getAllNodes()),L=this.nodesWithGravity.filter(function(M){return k.has(M)});this.graphManager.setAllNodesToApplyGravitation(L),this.graphManager.updateBounds(),this.updateGrid(),m.PURE_INCREMENTAL?this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL/2:this.coolingFactor=y.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()),m.PURE_INCREMENTAL?this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL/2*((100-this.afterGrowthIterations)/100):this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var A=!this.isTreeGrowing&&!this.isGrowthFinished,I=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(A,I),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},O.prototype.getPositionsData=function(){for(var k=this.graphManager.getAllNodes(),L={},A=0;A0&&this.updateDisplacements();for(var A=0;A0&&(I.fixedNodeWeight=P)}}if(this.constraints.relativePlacementConstraint){var B=new Map,F=new Map;if(this.dummyToNodeForVerticalAlignment=new Map,this.dummyToNodeForHorizontalAlignment=new Map,this.fixedNodesOnHorizontal=new Set,this.fixedNodesOnVertical=new Set,this.fixedNodeSet.forEach(function(Z){k.fixedNodesOnHorizontal.add(Z),k.fixedNodesOnVertical.add(Z)}),this.constraints.alignmentConstraint){if(this.constraints.alignmentConstraint.vertical)for(var z=this.constraints.alignmentConstraint.vertical,A=0;A=2*Z.length/3;j--)ue=Math.floor(Math.random()*(j+1)),Q=Z[j],Z[j]=Z[ue],Z[ue]=Q;return Z},this.nodesInRelativeHorizontal=[],this.nodesInRelativeVertical=[],this.nodeToRelativeConstraintMapHorizontal=new Map,this.nodeToRelativeConstraintMapVertical=new Map,this.nodeToTempPositionMapHorizontal=new Map,this.nodeToTempPositionMapVertical=new Map,this.constraints.relativePlacementConstraint.forEach(function(Z){if(Z.left){var ue=B.has(Z.left)?B.get(Z.left):Z.left,Q=B.has(Z.right)?B.get(Z.right):Z.right;k.nodesInRelativeHorizontal.includes(ue)||(k.nodesInRelativeHorizontal.push(ue),k.nodeToRelativeConstraintMapHorizontal.set(ue,[]),k.dummyToNodeForVerticalAlignment.has(ue)?k.nodeToTempPositionMapHorizontal.set(ue,k.idToNodeMap.get(k.dummyToNodeForVerticalAlignment.get(ue)[0]).getCenterX()):k.nodeToTempPositionMapHorizontal.set(ue,k.idToNodeMap.get(ue).getCenterX())),k.nodesInRelativeHorizontal.includes(Q)||(k.nodesInRelativeHorizontal.push(Q),k.nodeToRelativeConstraintMapHorizontal.set(Q,[]),k.dummyToNodeForVerticalAlignment.has(Q)?k.nodeToTempPositionMapHorizontal.set(Q,k.idToNodeMap.get(k.dummyToNodeForVerticalAlignment.get(Q)[0]).getCenterX()):k.nodeToTempPositionMapHorizontal.set(Q,k.idToNodeMap.get(Q).getCenterX())),k.nodeToRelativeConstraintMapHorizontal.get(ue).push({right:Q,gap:Z.gap}),k.nodeToRelativeConstraintMapHorizontal.get(Q).push({left:ue,gap:Z.gap})}else{var j=F.has(Z.top)?F.get(Z.top):Z.top,ne=F.has(Z.bottom)?F.get(Z.bottom):Z.bottom;k.nodesInRelativeVertical.includes(j)||(k.nodesInRelativeVertical.push(j),k.nodeToRelativeConstraintMapVertical.set(j,[]),k.dummyToNodeForHorizontalAlignment.has(j)?k.nodeToTempPositionMapVertical.set(j,k.idToNodeMap.get(k.dummyToNodeForHorizontalAlignment.get(j)[0]).getCenterY()):k.nodeToTempPositionMapVertical.set(j,k.idToNodeMap.get(j).getCenterY())),k.nodesInRelativeVertical.includes(ne)||(k.nodesInRelativeVertical.push(ne),k.nodeToRelativeConstraintMapVertical.set(ne,[]),k.dummyToNodeForHorizontalAlignment.has(ne)?k.nodeToTempPositionMapVertical.set(ne,k.idToNodeMap.get(k.dummyToNodeForHorizontalAlignment.get(ne)[0]).getCenterY()):k.nodeToTempPositionMapVertical.set(ne,k.idToNodeMap.get(ne).getCenterY())),k.nodeToRelativeConstraintMapVertical.get(j).push({bottom:ne,gap:Z.gap}),k.nodeToRelativeConstraintMapVertical.get(ne).push({top:j,gap:Z.gap})}});else{var U=new Map,K=new Map;this.constraints.relativePlacementConstraint.forEach(function(Z){if(Z.left){var ue=B.has(Z.left)?B.get(Z.left):Z.left,Q=B.has(Z.right)?B.get(Z.right):Z.right;U.has(ue)?U.get(ue).push(Q):U.set(ue,[Q]),U.has(Q)?U.get(Q).push(ue):U.set(Q,[ue])}else{var j=F.has(Z.top)?F.get(Z.top):Z.top,ne=F.has(Z.bottom)?F.get(Z.bottom):Z.bottom;K.has(j)?K.get(j).push(ne):K.set(j,[ne]),K.has(ne)?K.get(ne).push(j):K.set(ne,[j])}});var ee=o(function(ue,Q){var j=[],ne=[],te=new D,he=new Set,le=0;return ue.forEach(function(J,Se){if(!he.has(Se)){j[le]=[],ne[le]=!1;var se=Se;for(te.push(se),he.add(se),j[le].push(se);te.length!=0;){se=te.shift(),Q.has(se)&&(ne[le]=!0);var ae=ue.get(se);ae.forEach(function(Oe){he.has(Oe)||(te.push(Oe),he.add(Oe),j[le].push(Oe))})}le++}}),{components:j,isFixed:ne}},"constructComponents"),Y=ee(U,k.fixedNodesOnHorizontal);this.componentsOnHorizontal=Y.components,this.fixedComponentsOnHorizontal=Y.isFixed;var ce=ee(K,k.fixedNodesOnVertical);this.componentsOnVertical=ce.components,this.fixedComponentsOnVertical=ce.isFixed}}},O.prototype.updateDisplacements=function(){var k=this;if(this.constraints.fixedNodeConstraint&&this.constraints.fixedNodeConstraint.forEach(function(ce){var Z=k.idToNodeMap.get(ce.nodeId);Z.displacementX=0,Z.displacementY=0}),this.constraints.alignmentConstraint){if(this.constraints.alignmentConstraint.vertical)for(var L=this.constraints.alignmentConstraint.vertical,A=0;A1){var F;for(F=0;FI&&(I=Math.floor(B.y)),P=Math.floor(B.x+m.DEFAULT_COMPONENT_SEPERATION)}this.transform(new b(v.WORLD_CENTER_X-B.x/2,v.WORLD_CENTER_Y-B.y/2))},O.radialLayout=function(k,L,A){var I=Math.max(this.maxDiagonalInTree(k),m.DEFAULT_RADIAL_SEPARATION);O.branchRadialLayout(L,null,0,359,0,I);var M=_.calculateBounds(k),P=new C;P.setDeviceOrgX(M.getMinX()),P.setDeviceOrgY(M.getMinY()),P.setWorldOrgX(A.x),P.setWorldOrgY(A.y);for(var B=0;B1;){var j=Q[0];Q.splice(0,1);var ne=ee.indexOf(j);ne>=0&&ee.splice(ne,1),Z--,Y--}L!=null?ue=(ee.indexOf(Q[0])+1)%Z:ue=0;for(var te=Math.abs(I-A)/Y,he=ue;ce!=Y;he=++he%Z){var le=ee[he].getOtherEnd(k);if(le!=L){var J=(A+ce*te)%360,Se=(J+te)%360;O.branchRadialLayout(le,k,J,Se,M+P,P),ce++}}},O.maxDiagonalInTree=function(k){for(var L=w.MIN_VALUE,A=0;AL&&(L=M)}return L},O.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},O.prototype.groupZeroDegreeMembers=function(){var k=this,L={};this.memberGroups={},this.idToDummyNode={};for(var A=[],I=this.graphManager.getAllNodes(),M=0;M"u"&&(L[F]=[]),L[F]=L[F].concat(P)}Object.keys(L).forEach(function(z){if(L[z].length>1){var $="DummyCompound_"+z;k.memberGroups[$]=L[z];var U=L[z][0].getParent(),K=new d(k.graphManager);K.id=$,K.paddingLeft=U.paddingLeft||0,K.paddingRight=U.paddingRight||0,K.paddingBottom=U.paddingBottom||0,K.paddingTop=U.paddingTop||0,k.idToDummyNode[$]=K;var ee=k.getGraphManager().add(k.newGraph(),K),Y=U.getChild();Y.add(K);for(var ce=0;ceM?(I.rect.x-=(I.labelWidth-M)/2,I.setWidth(I.labelWidth),I.labelMarginLeft=(I.labelWidth-M)/2):I.labelPosHorizontal=="right"&&I.setWidth(M+I.labelWidth)),I.labelHeight&&(I.labelPosVertical=="top"?(I.rect.y-=I.labelHeight,I.setHeight(P+I.labelHeight),I.labelMarginTop=I.labelHeight):I.labelPosVertical=="center"&&I.labelHeight>P?(I.rect.y-=(I.labelHeight-P)/2,I.setHeight(I.labelHeight),I.labelMarginTop=(I.labelHeight-P)/2):I.labelPosVertical=="bottom"&&I.setHeight(P+I.labelHeight))}})},O.prototype.repopulateCompounds=function(){for(var k=this.compoundOrder.length-1;k>=0;k--){var L=this.compoundOrder[k],A=L.id,I=L.paddingLeft,M=L.paddingTop,P=L.labelMarginLeft,B=L.labelMarginTop;this.adjustLocations(this.tiledMemberPack[A],L.rect.x,L.rect.y,I,M,P,B)}},O.prototype.repopulateZeroDegreeMembers=function(){var k=this,L=this.tiledZeroDegreePack;Object.keys(L).forEach(function(A){var I=k.idToDummyNode[A],M=I.paddingLeft,P=I.paddingTop,B=I.labelMarginLeft,F=I.labelMarginTop;k.adjustLocations(L[A],I.rect.x,I.rect.y,M,P,B,F)})},O.prototype.getToBeTiled=function(k){var L=k.id;if(this.toBeTiled[L]!=null)return this.toBeTiled[L];var A=k.getChild();if(A==null)return this.toBeTiled[L]=!1,!1;for(var I=A.getNodes(),M=0;M0)return this.toBeTiled[L]=!1,!1;if(P.getChild()==null){this.toBeTiled[P.id]=!1;continue}if(!this.getToBeTiled(P))return this.toBeTiled[L]=!1,!1}return this.toBeTiled[L]=!0,!0},O.prototype.getNodeDegree=function(k){for(var L=k.id,A=k.getEdges(),I=0,M=0;MU&&(U=ee.rect.height)}A+=U+k.verticalPadding}},O.prototype.tileCompoundMembers=function(k,L){var A=this;this.tiledMemberPack=[],Object.keys(k).forEach(function(I){var M=L[I];if(A.tiledMemberPack[I]=A.tileNodes(k[I],M.paddingLeft+M.paddingRight),M.rect.width=A.tiledMemberPack[I].width,M.rect.height=A.tiledMemberPack[I].height,M.setCenter(A.tiledMemberPack[I].centerX,A.tiledMemberPack[I].centerY),M.labelMarginLeft=0,M.labelMarginTop=0,m.NODE_DIMENSIONS_INCLUDE_LABELS){var P=M.rect.width,B=M.rect.height;M.labelWidth&&(M.labelPosHorizontal=="left"?(M.rect.x-=M.labelWidth,M.setWidth(P+M.labelWidth),M.labelMarginLeft=M.labelWidth):M.labelPosHorizontal=="center"&&M.labelWidth>P?(M.rect.x-=(M.labelWidth-P)/2,M.setWidth(M.labelWidth),M.labelMarginLeft=(M.labelWidth-P)/2):M.labelPosHorizontal=="right"&&M.setWidth(P+M.labelWidth)),M.labelHeight&&(M.labelPosVertical=="top"?(M.rect.y-=M.labelHeight,M.setHeight(B+M.labelHeight),M.labelMarginTop=M.labelHeight):M.labelPosVertical=="center"&&M.labelHeight>B?(M.rect.y-=(M.labelHeight-B)/2,M.setHeight(M.labelHeight),M.labelMarginTop=(M.labelHeight-B)/2):M.labelPosVertical=="bottom"&&M.setHeight(B+M.labelHeight))}})},O.prototype.tileNodes=function(k,L){var A=this.tileNodesByFavoringDim(k,L,!0),I=this.tileNodesByFavoringDim(k,L,!1),M=this.getOrgRatio(A),P=this.getOrgRatio(I),B;return PF&&(F=ce.getWidth())});var z=P/M,$=B/M,U=Math.pow(A-I,2)+4*(z+I)*($+A)*M,K=(I-A+Math.sqrt(U))/(2*(z+I)),ee;L?(ee=Math.ceil(K),ee==K&&ee++):ee=Math.floor(K);var Y=ee*(z+I)-I;return F>Y&&(Y=F),Y+=I*2,Y},O.prototype.tileNodesByFavoringDim=function(k,L,A){var I=m.TILING_PADDING_VERTICAL,M=m.TILING_PADDING_HORIZONTAL,P=m.TILING_COMPARE_BY,B={rows:[],rowWidth:[],rowHeight:[],width:0,height:L,verticalPadding:I,horizontalPadding:M,centerX:0,centerY:0};P&&(B.idealRowWidth=this.calcIdealRowWidth(k,A));var F=o(function(Z){return Z.rect.width*Z.rect.height},"getNodeArea"),z=o(function(Z,ue){return F(ue)-F(Z)},"areaCompareFcn");k.sort(function(ce,Z){var ue=z;return B.idealRowWidth?(ue=P,ue(ce.id,Z.id)):ue(ce,Z)});for(var $=0,U=0,K=0;K0&&(B+=k.horizontalPadding),k.rowWidth[A]=B,k.width0&&(F+=k.verticalPadding);var z=0;F>k.rowHeight[A]&&(z=k.rowHeight[A],k.rowHeight[A]=F,z=k.rowHeight[A]-z),k.height+=z,k.rows[A].push(L)},O.prototype.getShortestRowIndex=function(k){for(var L=-1,A=Number.MAX_VALUE,I=0;IA&&(L=I,A=k.rowWidth[I]);return L},O.prototype.canAddHorizontal=function(k,L,A){if(k.idealRowWidth){var I=k.rows.length-1,M=k.rowWidth[I];return M+L+k.horizontalPadding<=k.idealRowWidth}var P=this.getShortestRowIndex(k);if(P<0)return!0;var B=k.rowWidth[P];if(B+k.horizontalPadding+L<=k.width)return!0;var F=0;k.rowHeight[P]0&&(F=A+k.verticalPadding-k.rowHeight[P]);var z;k.width-B>=L+k.horizontalPadding?z=(k.height+F)/(B+L+k.horizontalPadding):z=(k.height+F)/k.width,F=A+k.verticalPadding;var $;return k.widthP&&L!=A){I.splice(-1,1),k.rows[A].push(M),k.rowWidth[L]=k.rowWidth[L]-P,k.rowWidth[A]=k.rowWidth[A]+P,k.width=k.rowWidth[instance.getLongestRowIndex(k)];for(var B=Number.MIN_VALUE,F=0;FB&&(B=I[F].height);L>0&&(B+=k.verticalPadding);var z=k.rowHeight[L]+k.rowHeight[A];k.rowHeight[L]=B,k.rowHeight[A]0)for(var Y=M;Y<=P;Y++)ee[0]+=this.grid[Y][B-1].length+this.grid[Y][B].length-1;if(P0)for(var Y=B;Y<=F;Y++)ee[3]+=this.grid[M-1][Y].length+this.grid[M][Y].length-1;for(var ce=w.MAX_VALUE,Z,ue,Q=0;Q{var u=l(551).FDLayoutNode,h=l(551).IMath;function f(p,m,g,y){u.call(this,p,m,g,y)}o(f,"CoSENode"),f.prototype=Object.create(u.prototype);for(var d in u)f[d]=u[d];f.prototype.calculateDisplacement=function(){var p=this.graphManager.getLayout();this.getChild()!=null&&this.fixedNodeWeight?(this.displacementX+=p.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.fixedNodeWeight,this.displacementY+=p.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.fixedNodeWeight):(this.displacementX+=p.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.noOfChildren,this.displacementY+=p.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.noOfChildren),Math.abs(this.displacementX)>p.coolingFactor*p.maxNodeDisplacement&&(this.displacementX=p.coolingFactor*p.maxNodeDisplacement*h.sign(this.displacementX)),Math.abs(this.displacementY)>p.coolingFactor*p.maxNodeDisplacement&&(this.displacementY=p.coolingFactor*p.maxNodeDisplacement*h.sign(this.displacementY)),this.child&&this.child.getNodes().length>0&&this.propogateDisplacementToChildren(this.displacementX,this.displacementY)},f.prototype.propogateDisplacementToChildren=function(p,m){for(var g=this.getChild().getNodes(),y,v=0;v{function u(g){if(Array.isArray(g)){for(var y=0,v=Array(g.length);y0){var ct=0;Ue.forEach(function(ot){Te=="horizontal"?(be.set(ot,x.has(ot)?b[x.get(ot)]:pe.get(ot)),ct+=be.get(ot)):(be.set(ot,x.has(ot)?T[x.get(ot)]:pe.get(ot)),ct+=be.get(ot))}),ct=ct/Ue.length,st.forEach(function(ot){W.has(ot)||be.set(ot,ct)})}else{var We=0;st.forEach(function(ot){Te=="horizontal"?We+=x.has(ot)?b[x.get(ot)]:pe.get(ot):We+=x.has(ot)?T[x.get(ot)]:pe.get(ot)}),We=We/st.length,st.forEach(function(ot){be.set(ot,We)})}});for(var qe=o(function(){var Ue=De.shift(),ct=V.get(Ue);ct.forEach(function(We){if(be.get(We.id)ot&&(ot=vt),ntYt&&(Yt=nt)}}catch(Dt){Mt=!0,bt=Dt}finally{try{!Tt&&ut.return&&ut.return()}finally{if(Mt)throw bt}}var pn=(ct+ot)/2-(We+Yt)/2,kt=!0,On=!1,tn=void 0;try{for(var Mr=st[Symbol.iterator](),Ir;!(kt=(Ir=Mr.next()).done);kt=!0){var Pn=Ir.value;be.set(Pn,be.get(Pn)+pn)}}catch(Dt){On=!0,tn=Dt}finally{try{!kt&&Mr.return&&Mr.return()}finally{if(On)throw tn}}})}return be},"findAppropriatePositionForRelativePlacement"),R=o(function(V){var Te=0,W=0,pe=0,ve=0;if(V.forEach(function(Ve){Ve.left?b[x.get(Ve.left)]-b[x.get(Ve.right)]>=0?Te++:W++:T[x.get(Ve.top)]-T[x.get(Ve.bottom)]>=0?pe++:ve++}),Te>W&&pe>ve)for(var Pe=0;PeW)for(var _e=0;_eve)for(var be=0;be1)y.fixedNodeConstraint.forEach(function(oe,V){I[V]=[oe.position.x,oe.position.y],M[V]=[b[x.get(oe.nodeId)],T[x.get(oe.nodeId)]]}),P=!0;else if(y.alignmentConstraint)(function(){var oe=0;if(y.alignmentConstraint.vertical){for(var V=y.alignmentConstraint.vertical,Te=o(function(be){var Ve=new Set;V[be].forEach(function(at){Ve.add(at)});var De=new Set([].concat(u(Ve)).filter(function(at){return F.has(at)})),qe=void 0;De.size>0?qe=b[x.get(De.values().next().value)]:qe=D(Ve).x,V[be].forEach(function(at){I[oe]=[qe,T[x.get(at)]],M[oe]=[b[x.get(at)],T[x.get(at)]],oe++})},"_loop2"),W=0;W0?qe=b[x.get(De.values().next().value)]:qe=D(Ve).y,pe[be].forEach(function(at){I[oe]=[b[x.get(at)],qe],M[oe]=[b[x.get(at)],T[x.get(at)]],oe++})},"_loop3"),Pe=0;PeK&&(K=U[Y].length,ee=Y);if(K<$.size/2)R(y.relativePlacementConstraint),P=!1,B=!1;else{var ce=new Map,Z=new Map,ue=[];U[ee].forEach(function(oe){z.get(oe).forEach(function(V){V.direction=="horizontal"?(ce.has(oe)?ce.get(oe).push(V):ce.set(oe,[V]),ce.has(V.id)||ce.set(V.id,[]),ue.push({left:oe,right:V.id})):(Z.has(oe)?Z.get(oe).push(V):Z.set(oe,[V]),Z.has(V.id)||Z.set(V.id,[]),ue.push({top:oe,bottom:V.id}))})}),R(ue),B=!1;var Q=O(ce,"horizontal"),j=O(Z,"vertical");U[ee].forEach(function(oe,V){M[V]=[b[x.get(oe)],T[x.get(oe)]],I[V]=[],Q.has(oe)?I[V][0]=Q.get(oe):I[V][0]=b[x.get(oe)],j.has(oe)?I[V][1]=j.get(oe):I[V][1]=T[x.get(oe)]}),P=!0}}if(P){for(var ne=void 0,te=d.transpose(I),he=d.transpose(M),le=0;le0){var Be={x:0,y:0};y.fixedNodeConstraint.forEach(function(oe,V){var Te={x:b[x.get(oe.nodeId)],y:T[x.get(oe.nodeId)]},W=oe.position,pe=C(W,Te);Be.x+=pe.x,Be.y+=pe.y}),Be.x/=y.fixedNodeConstraint.length,Be.y/=y.fixedNodeConstraint.length,b.forEach(function(oe,V){b[V]+=Be.x}),T.forEach(function(oe,V){T[V]+=Be.y}),y.fixedNodeConstraint.forEach(function(oe){b[x.get(oe.nodeId)]=oe.position.x,T[x.get(oe.nodeId)]=oe.position.y})}if(y.alignmentConstraint){if(y.alignmentConstraint.vertical)for(var He=y.alignmentConstraint.vertical,ze=o(function(V){var Te=new Set;He[V].forEach(function(ve){Te.add(ve)});var W=new Set([].concat(u(Te)).filter(function(ve){return F.has(ve)})),pe=void 0;W.size>0?pe=b[x.get(W.values().next().value)]:pe=D(Te).x,Te.forEach(function(ve){F.has(ve)||(b[x.get(ve)]=pe)})},"_loop4"),Le=0;Le0?pe=T[x.get(W.values().next().value)]:pe=D(Te).y,Te.forEach(function(ve){F.has(ve)||(T[x.get(ve)]=pe)})},"_loop5"),q=0;q{a.exports=t}},r={};function n(a){var s=r[a];if(s!==void 0)return s.exports;var l=r[a]={exports:{}};return e[a](l,l.exports,n),l.exports}o(n,"__webpack_require__");var i=n(45);return i})()})});var Y2e=Pi((O4,e$)=>{"use strict";o(function(e,r){typeof O4=="object"&&typeof e$=="object"?e$.exports=r(JF()):typeof define=="function"&&define.amd?define(["cose-base"],r):typeof O4=="object"?O4.cytoscapeFcose=r(JF()):e.cytoscapeFcose=r(e.coseBase)},"webpackUniversalModuleDefinition")(O4,function(t){return(()=>{"use strict";var e={658:a=>{a.exports=Object.assign!=null?Object.assign.bind(Object):function(s){for(var l=arguments.length,u=Array(l>1?l-1:0),h=1;h{var u=function(){function d(p,m){var g=[],y=!0,v=!1,x=void 0;try{for(var b=p[Symbol.iterator](),T;!(y=(T=b.next()).done)&&(g.push(T.value),!(m&&g.length===m));y=!0);}catch(S){v=!0,x=S}finally{try{!y&&b.return&&b.return()}finally{if(v)throw x}}return g}return o(d,"sliceIterator"),function(p,m){if(Array.isArray(p))return p;if(Symbol.iterator in Object(p))return d(p,m);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),h=l(140).layoutBase.LinkedList,f={};f.getTopMostNodes=function(d){for(var p={},m=0;m0&&P.merge($)});for(var B=0;B1){T=x[0],S=T.connectedEdges().length,x.forEach(function(M){M.connectedEdges().length0&&g.set("dummy"+(g.size+1),_),C},f.relocateComponent=function(d,p,m){if(!m.fixedNodeConstraint){var g=Number.POSITIVE_INFINITY,y=Number.NEGATIVE_INFINITY,v=Number.POSITIVE_INFINITY,x=Number.NEGATIVE_INFINITY;if(m.quality=="draft"){var b=!0,T=!1,S=void 0;try{for(var w=p.nodeIndexes[Symbol.iterator](),E;!(b=(E=w.next()).done);b=!0){var _=E.value,C=u(_,2),D=C[0],O=C[1],R=m.cy.getElementById(D);if(R){var k=R.boundingBox(),L=p.xCoords[O]-k.w/2,A=p.xCoords[O]+k.w/2,I=p.yCoords[O]-k.h/2,M=p.yCoords[O]+k.h/2;Ly&&(y=A),Ix&&(x=M)}}}catch($){T=!0,S=$}finally{try{!b&&w.return&&w.return()}finally{if(T)throw S}}var P=d.x-(y+g)/2,B=d.y-(x+v)/2;p.xCoords=p.xCoords.map(function($){return $+P}),p.yCoords=p.yCoords.map(function($){return $+B})}else{Object.keys(p).forEach(function($){var U=p[$],K=U.getRect().x,ee=U.getRect().x+U.getRect().width,Y=U.getRect().y,ce=U.getRect().y+U.getRect().height;Ky&&(y=ee),Yx&&(x=ce)});var F=d.x-(y+g)/2,z=d.y-(x+v)/2;Object.keys(p).forEach(function($){var U=p[$];U.setCenter(U.getCenterX()+F,U.getCenterY()+z)})}}},f.calcBoundingBox=function(d,p,m,g){for(var y=Number.MAX_SAFE_INTEGER,v=Number.MIN_SAFE_INTEGER,x=Number.MAX_SAFE_INTEGER,b=Number.MIN_SAFE_INTEGER,T=void 0,S=void 0,w=void 0,E=void 0,_=d.descendants().not(":parent"),C=_.length,D=0;DT&&(y=T),vw&&(x=w),b{var u=l(548),h=l(140).CoSELayout,f=l(140).CoSENode,d=l(140).layoutBase.PointD,p=l(140).layoutBase.DimensionD,m=l(140).layoutBase.LayoutConstants,g=l(140).layoutBase.FDLayoutConstants,y=l(140).CoSEConstants,v=o(function(b,T){var S=b.cy,w=b.eles,E=w.nodes(),_=w.edges(),C=void 0,D=void 0,O=void 0,R={};b.randomize&&(C=T.nodeIndexes,D=T.xCoords,O=T.yCoords);var k=o(function($){return typeof $=="function"},"isFn"),L=o(function($,U){return k($)?$(U):$},"optFn"),A=u.calcParentsWithoutChildren(S,w),I=o(function z($,U,K,ee){for(var Y=U.length,ce=0;ce0){var te=void 0;te=K.getGraphManager().add(K.newGraph(),Q),z(te,ue,K,ee)}}},"processChildrenList"),M=o(function($,U,K){for(var ee=0,Y=0,ce=0;ce0?y.DEFAULT_EDGE_LENGTH=g.DEFAULT_EDGE_LENGTH=ee/Y:k(b.idealEdgeLength)?y.DEFAULT_EDGE_LENGTH=g.DEFAULT_EDGE_LENGTH=50:y.DEFAULT_EDGE_LENGTH=g.DEFAULT_EDGE_LENGTH=b.idealEdgeLength,y.MIN_REPULSION_DIST=g.MIN_REPULSION_DIST=g.DEFAULT_EDGE_LENGTH/10,y.DEFAULT_RADIAL_SEPARATION=g.DEFAULT_EDGE_LENGTH)},"processEdges"),P=o(function($,U){U.fixedNodeConstraint&&($.constraints.fixedNodeConstraint=U.fixedNodeConstraint),U.alignmentConstraint&&($.constraints.alignmentConstraint=U.alignmentConstraint),U.relativePlacementConstraint&&($.constraints.relativePlacementConstraint=U.relativePlacementConstraint)},"processConstraints");b.nestingFactor!=null&&(y.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=g.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=b.nestingFactor),b.gravity!=null&&(y.DEFAULT_GRAVITY_STRENGTH=g.DEFAULT_GRAVITY_STRENGTH=b.gravity),b.numIter!=null&&(y.MAX_ITERATIONS=g.MAX_ITERATIONS=b.numIter),b.gravityRange!=null&&(y.DEFAULT_GRAVITY_RANGE_FACTOR=g.DEFAULT_GRAVITY_RANGE_FACTOR=b.gravityRange),b.gravityCompound!=null&&(y.DEFAULT_COMPOUND_GRAVITY_STRENGTH=g.DEFAULT_COMPOUND_GRAVITY_STRENGTH=b.gravityCompound),b.gravityRangeCompound!=null&&(y.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=g.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=b.gravityRangeCompound),b.initialEnergyOnIncremental!=null&&(y.DEFAULT_COOLING_FACTOR_INCREMENTAL=g.DEFAULT_COOLING_FACTOR_INCREMENTAL=b.initialEnergyOnIncremental),b.tilingCompareBy!=null&&(y.TILING_COMPARE_BY=b.tilingCompareBy),b.quality=="proof"?m.QUALITY=2:m.QUALITY=0,y.NODE_DIMENSIONS_INCLUDE_LABELS=g.NODE_DIMENSIONS_INCLUDE_LABELS=m.NODE_DIMENSIONS_INCLUDE_LABELS=b.nodeDimensionsIncludeLabels,y.DEFAULT_INCREMENTAL=g.DEFAULT_INCREMENTAL=m.DEFAULT_INCREMENTAL=!b.randomize,y.ANIMATE=g.ANIMATE=m.ANIMATE=b.animate,y.TILE=b.tile,y.TILING_PADDING_VERTICAL=typeof b.tilingPaddingVertical=="function"?b.tilingPaddingVertical.call():b.tilingPaddingVertical,y.TILING_PADDING_HORIZONTAL=typeof b.tilingPaddingHorizontal=="function"?b.tilingPaddingHorizontal.call():b.tilingPaddingHorizontal,y.DEFAULT_INCREMENTAL=g.DEFAULT_INCREMENTAL=m.DEFAULT_INCREMENTAL=!0,y.PURE_INCREMENTAL=!b.randomize,m.DEFAULT_UNIFORM_LEAF_NODE_SIZES=b.uniformNodeDimensions,b.step=="transformed"&&(y.TRANSFORM_ON_CONSTRAINT_HANDLING=!0,y.ENFORCE_CONSTRAINTS=!1,y.APPLY_LAYOUT=!1),b.step=="enforced"&&(y.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,y.ENFORCE_CONSTRAINTS=!0,y.APPLY_LAYOUT=!1),b.step=="cose"&&(y.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,y.ENFORCE_CONSTRAINTS=!1,y.APPLY_LAYOUT=!0),b.step=="all"&&(b.randomize?y.TRANSFORM_ON_CONSTRAINT_HANDLING=!0:y.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,y.ENFORCE_CONSTRAINTS=!0,y.APPLY_LAYOUT=!0),b.fixedNodeConstraint||b.alignmentConstraint||b.relativePlacementConstraint?y.TREE_REDUCTION_ON_INCREMENTAL=!1:y.TREE_REDUCTION_ON_INCREMENTAL=!0;var B=new h,F=B.newGraphManager();return I(F.addRoot(),u.getTopMostNodes(E),B,b),M(B,F,_),P(B,b),B.runLayout(),R},"coseLayout");a.exports={coseLayout:v}},212:(a,s,l)=>{var u=function(){function b(T,S){for(var w=0;w0)if(M){var F=d.getTopMostNodes(w.eles.nodes());if(k=d.connectComponents(E,w.eles,F),k.forEach(function(se){var ae=se.boundingBox();L.push({x:ae.x1+ae.w/2,y:ae.y1+ae.h/2})}),w.randomize&&k.forEach(function(se){w.eles=se,C.push(m(w))}),w.quality=="default"||w.quality=="proof"){var z=E.collection();if(w.tile){var $=new Map,U=[],K=[],ee=0,Y={nodeIndexes:$,xCoords:U,yCoords:K},ce=[];if(k.forEach(function(se,ae){se.edges().length==0&&(se.nodes().forEach(function(Oe,ye){z.merge(se.nodes()[ye]),Oe.isParent()||(Y.nodeIndexes.set(se.nodes()[ye].id(),ee++),Y.xCoords.push(se.nodes()[0].position().x),Y.yCoords.push(se.nodes()[0].position().y))}),ce.push(ae))}),z.length>1){var Z=z.boundingBox();L.push({x:Z.x1+Z.w/2,y:Z.y1+Z.h/2}),k.push(z),C.push(Y);for(var ue=ce.length-1;ue>=0;ue--)k.splice(ce[ue],1),C.splice(ce[ue],1),L.splice(ce[ue],1)}}k.forEach(function(se,ae){w.eles=se,R.push(y(w,C[ae])),d.relocateComponent(L[ae],R[ae],w)})}else k.forEach(function(se,ae){d.relocateComponent(L[ae],C[ae],w)});var Q=new Set;if(k.length>1){var j=[],ne=_.filter(function(se){return se.css("display")=="none"});k.forEach(function(se,ae){var Oe=void 0;if(w.quality=="draft"&&(Oe=C[ae].nodeIndexes),se.nodes().not(ne).length>0){var ye={};ye.edges=[],ye.nodes=[];var Be=void 0;se.nodes().not(ne).forEach(function(He){if(w.quality=="draft")if(!He.isParent())Be=Oe.get(He.id()),ye.nodes.push({x:C[ae].xCoords[Be]-He.boundingbox().w/2,y:C[ae].yCoords[Be]-He.boundingbox().h/2,width:He.boundingbox().w,height:He.boundingbox().h});else{var ze=d.calcBoundingBox(He,C[ae].xCoords,C[ae].yCoords,Oe);ye.nodes.push({x:ze.topLeftX,y:ze.topLeftY,width:ze.width,height:ze.height})}else R[ae][He.id()]&&ye.nodes.push({x:R[ae][He.id()].getLeft(),y:R[ae][He.id()].getTop(),width:R[ae][He.id()].getWidth(),height:R[ae][He.id()].getHeight()})}),se.edges().forEach(function(He){var ze=He.source(),Le=He.target();if(ze.css("display")!="none"&&Le.css("display")!="none")if(w.quality=="draft"){var Ie=Oe.get(ze.id()),xe=Oe.get(Le.id()),q=[],de=[];if(ze.isParent()){var ie=d.calcBoundingBox(ze,C[ae].xCoords,C[ae].yCoords,Oe);q.push(ie.topLeftX+ie.width/2),q.push(ie.topLeftY+ie.height/2)}else q.push(C[ae].xCoords[Ie]),q.push(C[ae].yCoords[Ie]);if(Le.isParent()){var oe=d.calcBoundingBox(Le,C[ae].xCoords,C[ae].yCoords,Oe);de.push(oe.topLeftX+oe.width/2),de.push(oe.topLeftY+oe.height/2)}else de.push(C[ae].xCoords[xe]),de.push(C[ae].yCoords[xe]);ye.edges.push({startX:q[0],startY:q[1],endX:de[0],endY:de[1]})}else R[ae][ze.id()]&&R[ae][Le.id()]&&ye.edges.push({startX:R[ae][ze.id()].getCenterX(),startY:R[ae][ze.id()].getCenterY(),endX:R[ae][Le.id()].getCenterX(),endY:R[ae][Le.id()].getCenterY()})}),ye.nodes.length>0&&(j.push(ye),Q.add(ae))}});var te=I.packComponents(j,w.randomize).shifts;if(w.quality=="draft")C.forEach(function(se,ae){var Oe=se.xCoords.map(function(Be){return Be+te[ae].dx}),ye=se.yCoords.map(function(Be){return Be+te[ae].dy});se.xCoords=Oe,se.yCoords=ye});else{var he=0;Q.forEach(function(se){Object.keys(R[se]).forEach(function(ae){var Oe=R[se][ae];Oe.setCenter(Oe.getCenterX()+te[he].dx,Oe.getCenterY()+te[he].dy)}),he++})}}}else{var P=w.eles.boundingBox();if(L.push({x:P.x1+P.w/2,y:P.y1+P.h/2}),w.randomize){var B=m(w);C.push(B)}w.quality=="default"||w.quality=="proof"?(R.push(y(w,C[0])),d.relocateComponent(L[0],R[0],w)):d.relocateComponent(L[0],C[0],w)}var le=o(function(ae,Oe){if(w.quality=="default"||w.quality=="proof"){typeof ae=="number"&&(ae=Oe);var ye=void 0,Be=void 0,He=ae.data("id");return R.forEach(function(Le){He in Le&&(ye={x:Le[He].getRect().getCenterX(),y:Le[He].getRect().getCenterY()},Be=Le[He])}),w.nodeDimensionsIncludeLabels&&(Be.labelWidth&&(Be.labelPosHorizontal=="left"?ye.x+=Be.labelWidth/2:Be.labelPosHorizontal=="right"&&(ye.x-=Be.labelWidth/2)),Be.labelHeight&&(Be.labelPosVertical=="top"?ye.y+=Be.labelHeight/2:Be.labelPosVertical=="bottom"&&(ye.y-=Be.labelHeight/2))),ye==null&&(ye={x:ae.position("x"),y:ae.position("y")}),{x:ye.x,y:ye.y}}else{var ze=void 0;return C.forEach(function(Le){var Ie=Le.nodeIndexes.get(ae.id());Ie!=null&&(ze={x:Le.xCoords[Ie],y:Le.yCoords[Ie]})}),ze==null&&(ze={x:ae.position("x"),y:ae.position("y")}),{x:ze.x,y:ze.y}}},"getPositions");if(w.quality=="default"||w.quality=="proof"||w.randomize){var J=d.calcParentsWithoutChildren(E,_),Se=_.filter(function(se){return se.css("display")=="none"});w.eles=_.not(Se),_.nodes().not(":parent").not(Se).layoutPositions(S,w,le),J.length>0&&J.forEach(function(se){se.position(le(se))})}else console.log("If randomize option is set to false, then quality option must be 'default' or 'proof'.")},"run")}]),b}();a.exports=x},657:(a,s,l)=>{var u=l(548),h=l(140).layoutBase.Matrix,f=l(140).layoutBase.SVD,d=o(function(m){var g=m.cy,y=m.eles,v=y.nodes(),x=y.nodes(":parent"),b=new Map,T=new Map,S=new Map,w=[],E=[],_=[],C=[],D=[],O=[],R=[],k=[],L=void 0,A=void 0,I=1e8,M=1e-9,P=m.piTol,B=m.samplingType,F=m.nodeSeparation,z=void 0,$=o(function(){for(var Te=0,W=0,pe=!1;W=Pe;){be=ve[Pe++];for(var st=w[be],Ue=0;Ueqe&&(qe=D[We],at=We)}return at},"BFS"),K=o(function(Te){var W=void 0;if(Te){W=Math.floor(Math.random()*A),L=W;for(var ve=0;ve=1)break;qe=De}for(var st=0;st=1)break;qe=De}for(var ct=0;ct0&&(W.isParent()?w[Te].push(S.get(W.id())):w[Te].push(W.id()))})});var J=o(function(Te){var W=T.get(Te),pe=void 0;b.get(Te).forEach(function(ve){g.getElementById(ve).isParent()?pe=S.get(ve):pe=ve,w[W].push(pe),w[T.get(pe)].push(Te)})},"_loop"),Se=!0,se=!1,ae=void 0;try{for(var Oe=b.keys()[Symbol.iterator](),ye;!(Se=(ye=Oe.next()).done);Se=!0){var Be=ye.value;J(Be)}}catch(V){se=!0,ae=V}finally{try{!Se&&Oe.return&&Oe.return()}finally{if(se)throw ae}}A=T.size;var He=void 0;if(A>2){z=A{var u=l(212),h=o(function(d){d&&d("layout","fcose",u)},"register");typeof cytoscape<"u"&&h(cytoscape),a.exports=h},140:a=>{a.exports=t}},r={};function n(a){var s=r[a];if(s!==void 0)return s.exports;var l=r[a]={exports:{}};return e[a](l,l.exports,n),l.exports}o(n,"__webpack_require__");var i=n(579);return i})()})});var xy,l0,t$=N(()=>{"use strict";jl();xy=o(t=>`${t}`,"wrapIcon"),l0={prefix:"mermaid-architecture",height:80,width:80,icons:{database:{body:xy('')},server:{body:xy('')},disk:{body:xy('')},internet:{body:xy('')},cloud:{body:xy('')},unknown:t7,blank:{body:xy("")}}}});var X2e,j2e,K2e,Q2e,Z2e=N(()=>{"use strict";jl();Gt();ao();N4();t$();AC();X2e=o(async function(t,e){let r=Mi("padding"),n=Mi("iconSize"),i=n/2,a=n/6,s=a/2;await Promise.all(e.edges().map(async l=>{let{source:u,sourceDir:h,sourceArrow:f,sourceGroup:d,target:p,targetDir:m,targetArrow:g,targetGroup:y,label:v}=CC(l),{x,y:b}=l[0].sourceEndpoint(),{x:T,y:S}=l[0].midpoint(),{x:w,y:E}=l[0].targetEndpoint(),_=r+4;if(d&&(ja(h)?x+=h==="L"?-_:_:b+=h==="T"?-_:_+18),y&&(ja(m)?w+=m==="L"?-_:_:E+=m==="T"?-_:_+18),!d&&o0.getNode(u)?.type==="junction"&&(ja(h)?x+=h==="L"?i:-i:b+=h==="T"?i:-i),!y&&o0.getNode(p)?.type==="junction"&&(ja(m)?w+=m==="L"?i:-i:E+=m==="T"?i:-i),l[0]._private.rscratch){let C=t.insert("g");if(C.insert("path").attr("d",`M ${x},${b} L ${T},${S} L${w},${E} `).attr("class","edge"),f){let D=ja(h)?D4[h](x,a):x-s,O=ru(h)?D4[h](b,a):b-s;C.insert("polygon").attr("points",YF[h](a)).attr("transform",`translate(${D},${O})`).attr("class","arrow")}if(g){let D=ja(m)?D4[m](w,a):w-s,O=ru(m)?D4[m](E,a):E-s;C.insert("polygon").attr("points",YF[m](a)).attr("transform",`translate(${D},${O})`).attr("class","arrow")}if(v){let D=L4(h,m)?"XY":ja(h)?"X":"Y",O=0;D==="X"?O=Math.abs(x-w):D==="Y"?O=Math.abs(b-E)/1.5:O=Math.abs(x-w)/2;let R=C.append("g");if(await qn(R,v,{useHtmlLabels:!1,width:O,classes:"architecture-service-label"},me()),R.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle"),D==="X")R.attr("transform","translate("+T+", "+S+")");else if(D==="Y")R.attr("transform","translate("+T+", "+S+") rotate(-90)");else if(D==="XY"){let k=R4(h,m);if(k&&O2e(k)){let L=R.node().getBoundingClientRect(),[A,I]=B2e(k);R.attr("dominant-baseline","auto").attr("transform",`rotate(${-1*A*I*45})`);let M=R.node().getBoundingClientRect();R.attr("transform",` + translate(${T}, ${S-L.height/2}) + translate(${A*M.width/2}, ${I*M.height/2}) + rotate(${-1*A*I*45}, 0, ${L.height/2}) + `)}}}}}))},"drawEdges"),j2e=o(async function(t,e){let n=Mi("padding")*.75,i=Mi("fontSize"),s=Mi("iconSize")/2;await Promise.all(e.nodes().map(async l=>{let u=Yf(l);if(u.type==="group"){let{h,w:f,x1:d,y1:p}=l.boundingBox();t.append("rect").attr("x",d+s).attr("y",p+s).attr("width",f).attr("height",h).attr("class","node-bkg");let m=t.append("g"),g=d,y=p;if(u.icon){let v=m.append("g");v.html(`${await Es(u.icon,{height:n,width:n,fallbackPrefix:l0.prefix})}`),v.attr("transform","translate("+(g+s+1)+", "+(y+s+1)+")"),g+=n,y+=i/2-1-2}if(u.label){let v=m.append("g");await qn(v,u.label,{useHtmlLabels:!1,width:f,classes:"architecture-service-label"},me()),v.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","start").attr("text-anchor","start"),v.attr("transform","translate("+(g+s+4)+", "+(y+s+2)+")")}}}))},"drawGroups"),K2e=o(async function(t,e,r){for(let n of r){let i=e.append("g"),a=Mi("iconSize");if(n.title){let h=i.append("g");await qn(h,n.title,{useHtmlLabels:!1,width:a*1.5,classes:"architecture-service-label"},me()),h.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle"),h.attr("transform","translate("+a/2+", "+a+")")}let s=i.append("g");if(n.icon)s.html(`${await Es(n.icon,{height:a,width:a,fallbackPrefix:l0.prefix})}`);else if(n.iconText){s.html(`${await Es("blank",{height:a,width:a,fallbackPrefix:l0.prefix})}`);let d=s.append("g").append("foreignObject").attr("width",a).attr("height",a).append("div").attr("class","node-icon-text").attr("style",`height: ${a}px;`).append("div").html(n.iconText),p=parseInt(window.getComputedStyle(d.node(),null).getPropertyValue("font-size").replace(/\D/g,""))??16;d.attr("style",`-webkit-line-clamp: ${Math.floor((a-2)/p)};`)}else s.append("path").attr("class","node-bkg").attr("id","node-"+n.id).attr("d",`M0 ${a} v${-a} q0,-5 5,-5 h${a} q5,0 5,5 v${a} H0 Z`);i.attr("class","architecture-service");let{width:l,height:u}=i._groups[0][0].getBBox();n.width=l,n.height=u,t.setElementForId(n.id,i)}return 0},"drawServices"),Q2e=o(function(t,e,r){r.forEach(n=>{let i=e.append("g"),a=Mi("iconSize");i.append("g").append("rect").attr("id","node-"+n.id).attr("fill-opacity","0").attr("width",a).attr("height",a),i.attr("class","architecture-junction");let{width:l,height:u}=i._groups[0][0].getBBox();i.width=l,i.height=u,t.setElementForId(n.id,i)})},"drawJunctions")});function Hnt(t,e){t.forEach(r=>{e.add({group:"nodes",data:{type:"service",id:r.id,icon:r.icon,label:r.title,parent:r.in,width:Mi("iconSize"),height:Mi("iconSize")},classes:"node-service"})})}function Wnt(t,e){t.forEach(r=>{e.add({group:"nodes",data:{type:"junction",id:r.id,parent:r.in,width:Mi("iconSize"),height:Mi("iconSize")},classes:"node-junction"})})}function qnt(t,e){e.nodes().map(r=>{let n=Yf(r);if(n.type==="group")return;n.x=r.position().x,n.y=r.position().y,t.getElementById(n.id).attr("transform","translate("+(n.x||0)+","+(n.y||0)+")")})}function Ynt(t,e){t.forEach(r=>{e.add({group:"nodes",data:{type:"group",id:r.id,icon:r.icon,label:r.title,parent:r.in},classes:"node-group"})})}function Xnt(t,e){t.forEach(r=>{let{lhsId:n,rhsId:i,lhsInto:a,lhsGroup:s,rhsInto:l,lhsDir:u,rhsDir:h,rhsGroup:f,title:d}=r,p=L4(r.lhsDir,r.rhsDir)?"segments":"straight",m={id:`${n}-${i}`,label:d,source:n,sourceDir:u,sourceArrow:a,sourceGroup:s,sourceEndpoint:u==="L"?"0 50%":u==="R"?"100% 50%":u==="T"?"50% 0":"50% 100%",target:i,targetDir:h,targetArrow:l,targetGroup:f,targetEndpoint:h==="L"?"0 50%":h==="R"?"100% 50%":h==="T"?"50% 0":"50% 100%"};e.add({group:"edges",data:m,classes:p})})}function jnt(t,e,r){let n=o((l,u)=>Object.entries(l).reduce((h,[f,d])=>{let p=0,m=Object.entries(d);if(m.length===1)return h[f]=m[0][1],h;for(let g=0;g{let u={},h={};return Object.entries(l).forEach(([f,[d,p]])=>{let m=t.getNode(f)?.in??"default";u[p]??={},u[p][m]??=[],u[p][m].push(f),h[d]??={},h[d][m]??=[],h[d][m].push(f)}),{horiz:Object.values(n(u,"horizontal")).filter(f=>f.length>1),vert:Object.values(n(h,"vertical")).filter(f=>f.length>1)}}),[a,s]=i.reduce(([l,u],{horiz:h,vert:f})=>[[...l,...h],[...u,...f]],[[],[]]);return{horizontal:a,vertical:s}}function Knt(t){let e=[],r=o(i=>`${i[0]},${i[1]}`,"posToStr"),n=o(i=>i.split(",").map(a=>parseInt(a)),"strToPos");return t.forEach(i=>{let a=Object.fromEntries(Object.entries(i).map(([h,f])=>[r(f),h])),s=[r([0,0])],l={},u={L:[-1,0],R:[1,0],T:[0,1],B:[0,-1]};for(;s.length>0;){let h=s.shift();if(h){l[h]=1;let f=a[h];if(f){let d=n(h);Object.entries(u).forEach(([p,m])=>{let g=r([d[0]+m[0],d[1]+m[1]]),y=a[g];y&&!l[g]&&(s.push(g),e.push({[qF[p]]:y,[qF[I2e(p)]]:f,gap:1.5*Mi("iconSize")}))})}}}}),e}function Qnt(t,e,r,n,i,{spatialMaps:a,groupAlignments:s}){return new Promise(l=>{let u=Ge("body").append("div").attr("id","cy").attr("style","display:none"),h=sl({container:document.getElementById("cy"),style:[{selector:"edge",style:{"curve-style":"straight",label:"data(label)","source-endpoint":"data(sourceEndpoint)","target-endpoint":"data(targetEndpoint)"}},{selector:"edge.segments",style:{"curve-style":"segments","segment-weights":"0","segment-distances":[.5],"edge-distances":"endpoints","source-endpoint":"data(sourceEndpoint)","target-endpoint":"data(targetEndpoint)"}},{selector:"node",style:{"compound-sizing-wrt-labels":"include"}},{selector:"node[label]",style:{"text-valign":"bottom","text-halign":"center","font-size":`${Mi("fontSize")}px`}},{selector:".node-service",style:{label:"data(label)",width:"data(width)",height:"data(height)"}},{selector:".node-junction",style:{width:"data(width)",height:"data(height)"}},{selector:".node-group",style:{padding:`${Mi("padding")}px`}}],layout:{name:"grid",boundingBox:{x1:0,x2:100,y1:0,y2:100}}});u.remove(),Ynt(r,h),Hnt(t,h),Wnt(e,h),Xnt(n,h);let f=jnt(i,a,s),d=Knt(a),p=h.layout({name:"fcose",quality:"proof",styleEnabled:!1,animate:!1,nodeDimensionsIncludeLabels:!1,idealEdgeLength(m){let[g,y]=m.connectedNodes(),{parent:v}=Yf(g),{parent:x}=Yf(y);return v===x?1.5*Mi("iconSize"):.5*Mi("iconSize")},edgeElasticity(m){let[g,y]=m.connectedNodes(),{parent:v}=Yf(g),{parent:x}=Yf(y);return v===x?.45:.001},alignmentConstraint:f,relativePlacementConstraint:d});p.one("layoutstop",()=>{function m(g,y,v,x){let b,T,{x:S,y:w}=g,{x:E,y:_}=y;T=(x-w+(S-v)*(w-_)/(S-E))/Math.sqrt(1+Math.pow((w-_)/(S-E),2)),b=Math.sqrt(Math.pow(x-w,2)+Math.pow(v-S,2)-Math.pow(T,2));let C=Math.sqrt(Math.pow(E-S,2)+Math.pow(_-w,2));b=b/C;let D=(E-S)*(x-w)-(_-w)*(v-S);switch(!0){case D>=0:D=1;break;case D<0:D=-1;break}let O=(E-S)*(v-S)+(_-w)*(x-w);switch(!0){case O>=0:O=1;break;case O<0:O=-1;break}return T=Math.abs(T)*D,b=b*O,{distances:T,weights:b}}o(m,"getSegmentWeights"),h.startBatch();for(let g of Object.values(h.edges()))if(g.data?.()){let{x:y,y:v}=g.source().position(),{x,y:b}=g.target().position();if(y!==x&&v!==b){let T=g.sourceEndpoint(),S=g.targetEndpoint(),{sourceDir:w}=CC(g),[E,_]=ru(w)?[T.x,S.y]:[S.x,T.y],{weights:C,distances:D}=m(T,S,E,_);g.style("segment-distances",D),g.style("segment-weights",C)}}h.endBatch(),p.run()}),p.run(),h.ready(m=>{X.info("Ready",m),l(h)})})}var J2e,Znt,exe,txe=N(()=>{"use strict";jl();oF();J2e=Aa(Y2e(),1);fr();yt();Vl();xi();N4();t$();AC();Z2e();X4([{name:l0.prefix,icons:l0}]);sl.use(J2e.default);o(Hnt,"addServices");o(Wnt,"addJunctions");o(qnt,"positionNodes");o(Ynt,"addGroups");o(Xnt,"addEdges");o(jnt,"getAlignments");o(Knt,"getRelativeConstraints");o(Qnt,"layoutArchitecture");Znt=o(async(t,e,r,n)=>{let i=n.db,a=i.getServices(),s=i.getJunctions(),l=i.getGroups(),u=i.getEdges(),h=i.getDataStructures(),f=Li(e),d=f.append("g");d.attr("class","architecture-edges");let p=f.append("g");p.attr("class","architecture-services");let m=f.append("g");m.attr("class","architecture-groups"),await K2e(i,p,a),Q2e(i,p,s);let g=await Qnt(a,s,l,u,i,h);await X2e(d,g),await j2e(m,g),qnt(i,g),Lo(void 0,f,Mi("padding"),Mi("useMaxWidth"))},"draw"),exe={draw:Znt}});var rxe={};ur(rxe,{diagram:()=>Jnt});var Jnt,nxe=N(()=>{"use strict";H2e();N4();q2e();txe();Jnt={parser:U2e,db:o0,renderer:exe,styles:W2e}});var by,r$=N(()=>{"use strict";_a();mi();er();zt();ci();by=class{constructor(){this.nodes=[];this.levels=new Map;this.outerNodes=[];this.classes=new Map;this.setAccTitle=Ar;this.getAccTitle=Dr;this.setDiagramTitle=Or;this.getDiagramTitle=Nr;this.getAccDescription=Rr;this.setAccDescription=Lr}static{o(this,"TreeMapDB")}getNodes(){return this.nodes}getConfig(){let e=or,r=tr();return $n({...e.treemap,...r.treemap??{}})}addNode(e,r){this.nodes.push(e),this.levels.set(e,r),r===0&&(this.outerNodes.push(e),this.root??=e)}getRoot(){return{name:"",children:this.outerNodes}}addClass(e,r){let n=this.classes.get(e)??{id:e,styles:[],textStyles:[]},i=r.replace(/\\,/g,"\xA7\xA7\xA7").replace(/,/g,";").replace(/ยงยงยง/g,",").split(";");i&&i.forEach(a=>{S2(a)&&(n?.textStyles?n.textStyles.push(a):n.textStyles=[a]),n?.styles?n.styles.push(a):n.styles=[a]}),this.classes.set(e,n)}getClasses(){return this.classes}getStylesForClass(e){return this.classes.get(e)?.styles??[]}clear(){kr(),this.nodes=[],this.levels=new Map,this.outerNodes=[],this.classes=new Map,this.root=void 0}}});function sxe(t){if(!t.length)return[];let e=[],r=[];return t.forEach(n=>{let i={name:n.name,children:n.type==="Leaf"?void 0:[]};for(i.classSelector=n?.classSelector,n?.cssCompiledStyles&&(i.cssCompiledStyles=[n.cssCompiledStyles]),n.type==="Leaf"&&n.value!==void 0&&(i.value=n.value);r.length>0&&r[r.length-1].level>=n.level;)r.pop();if(r.length===0)e.push(i);else{let a=r[r.length-1].node;a.children?a.children.push(i):a.children=[i]}n.type!=="Leaf"&&r.push({node:i,level:n.level})}),e}var oxe=N(()=>{"use strict";o(sxe,"buildHierarchy")});var nit,iit,n$,lxe=N(()=>{"use strict";bf();yt();Mp();oxe();r$();nit=o((t,e)=>{Jo(t,e);let r=[];for(let a of t.TreemapRows??[])a.$type==="ClassDefStatement"&&e.addClass(a.className??"",a.styleText??"");for(let a of t.TreemapRows??[]){let s=a.item;if(!s)continue;let l=a.indent?parseInt(a.indent):0,u=iit(s),h=s.classSelector?e.getStylesForClass(s.classSelector):[],f=h.length>0?h.join(";"):void 0,d={level:l,name:u,type:s.$type,value:s.value,classSelector:s.classSelector,cssCompiledStyles:f};r.push(d)}let n=sxe(r),i=o((a,s)=>{for(let l of a)e.addNode(l,s),l.children&&l.children.length>0&&i(l.children,s+1)},"addNodesRecursively");i(n,0)},"populate"),iit=o(t=>t.name?String(t.name):"","getItemName"),n$={parser:{yy:void 0},parse:o(async t=>{try{let r=await vs("treemap",t);X.debug("Treemap AST:",r);let n=n$.parser?.yy;if(!(n instanceof by))throw new Error("parser.parser?.yy was not a TreemapDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues.");nit(r,n)}catch(e){throw X.error("Error parsing treemap:",e),e}},"parse")}});var ait,Ty,P4,sit,oit,cxe,uxe=N(()=>{"use strict";Vl();np();xi();fr();zt();mi();yt();ait=10,Ty=10,P4=25,sit=o((t,e,r,n)=>{let i=n.db,a=i.getConfig(),s=a.padding??ait,l=i.getDiagramTitle(),u=i.getRoot(),{themeVariables:h}=tr();if(!u)return;let f=l?30:0,d=Li(e),p=a.nodeWidth?a.nodeWidth*Ty:960,m=a.nodeHeight?a.nodeHeight*Ty:500,g=p,y=m+f;d.attr("viewBox",`0 0 ${g} ${y}`),fn(d,y,g,a.useMaxWidth);let v;try{let A=a.valueFormat||",";if(A==="$0,0")v=o(I=>"$"+cc(",")(I),"valueFormat");else if(A.startsWith("$")&&A.includes(",")){let I=/\.\d+/.exec(A),M=I?I[0]:"";v=o(P=>"$"+cc(","+M)(P),"valueFormat")}else if(A.startsWith("$")){let I=A.substring(1);v=o(M=>"$"+cc(I||"")(M),"valueFormat")}else v=cc(A)}catch(A){X.error("Error creating format function:",A),v=cc(",")}let x=Js().range(["transparent",h.cScale0,h.cScale1,h.cScale2,h.cScale3,h.cScale4,h.cScale5,h.cScale6,h.cScale7,h.cScale8,h.cScale9,h.cScale10,h.cScale11]),b=Js().range(["transparent",h.cScalePeer0,h.cScalePeer1,h.cScalePeer2,h.cScalePeer3,h.cScalePeer4,h.cScalePeer5,h.cScalePeer6,h.cScalePeer7,h.cScalePeer8,h.cScalePeer9,h.cScalePeer10,h.cScalePeer11]),T=Js().range([h.cScaleLabel0,h.cScaleLabel1,h.cScaleLabel2,h.cScaleLabel3,h.cScaleLabel4,h.cScaleLabel5,h.cScaleLabel6,h.cScaleLabel7,h.cScaleLabel8,h.cScaleLabel9,h.cScaleLabel10,h.cScaleLabel11]);l&&d.append("text").attr("x",g/2).attr("y",f/2).attr("class","treemapTitle").attr("text-anchor","middle").attr("dominant-baseline","middle").text(l);let S=d.append("g").attr("transform",`translate(0, ${f})`).attr("class","treemapContainer"),w=z0(u).sum(A=>A.value??0).sort((A,I)=>(I.value??0)-(A.value??0)),_=D5().size([p,m]).paddingTop(A=>A.children&&A.children.length>0?P4+Ty:0).paddingInner(s).paddingLeft(A=>A.children&&A.children.length>0?Ty:0).paddingRight(A=>A.children&&A.children.length>0?Ty:0).paddingBottom(A=>A.children&&A.children.length>0?Ty:0).round(!0)(w),C=_.descendants().filter(A=>A.children&&A.children.length>0),D=S.selectAll(".treemapSection").data(C).enter().append("g").attr("class","treemapSection").attr("transform",A=>`translate(${A.x0},${A.y0})`);D.append("rect").attr("width",A=>A.x1-A.x0).attr("height",P4).attr("class","treemapSectionHeader").attr("fill","none").attr("fill-opacity",.6).attr("stroke-width",.6).attr("style",A=>A.depth===0?"display: none;":""),D.append("clipPath").attr("id",(A,I)=>`clip-section-${e}-${I}`).append("rect").attr("width",A=>Math.max(0,A.x1-A.x0-12)).attr("height",P4),D.append("rect").attr("width",A=>A.x1-A.x0).attr("height",A=>A.y1-A.y0).attr("class",(A,I)=>`treemapSection section${I}`).attr("fill",A=>x(A.data.name)).attr("fill-opacity",.6).attr("stroke",A=>b(A.data.name)).attr("stroke-width",2).attr("stroke-opacity",.4).attr("style",A=>{if(A.depth===0)return"display: none;";let I=Ye({cssCompiledStyles:A.data.cssCompiledStyles});return I.nodeStyles+";"+I.borderStyles.join(";")}),D.append("text").attr("class","treemapSectionLabel").attr("x",6).attr("y",P4/2).attr("dominant-baseline","middle").text(A=>A.depth===0?"":A.data.name).attr("font-weight","bold").attr("style",A=>{if(A.depth===0)return"display: none;";let I="dominant-baseline: middle; font-size: 12px; fill:"+T(A.data.name)+"; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;",M=Ye({cssCompiledStyles:A.data.cssCompiledStyles});return I+M.labelStyles.replace("color:","fill:")}).each(function(A){if(A.depth===0)return;let I=Ge(this),M=A.data.name;I.text(M);let P=A.x1-A.x0,B=6,F;a.showValues!==!1&&A.value?F=P-10-30-10-B:F=P-B-6;let $=Math.max(15,F),U=I.node();if(U.getComputedTextLength()>$){let ee="...",Y=M;for(;Y.length>0;){if(Y=M.substring(0,Y.length-1),Y.length===0){I.text(ee),U.getComputedTextLength()>$&&I.text("");break}if(I.text(Y+ee),U.getComputedTextLength()<=$)break}}}),a.showValues!==!1&&D.append("text").attr("class","treemapSectionValue").attr("x",A=>A.x1-A.x0-10).attr("y",P4/2).attr("text-anchor","end").attr("dominant-baseline","middle").text(A=>A.value?v(A.value):"").attr("font-style","italic").attr("style",A=>{if(A.depth===0)return"display: none;";let I="text-anchor: end; dominant-baseline: middle; font-size: 10px; fill:"+T(A.data.name)+"; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;",M=Ye({cssCompiledStyles:A.data.cssCompiledStyles});return I+M.labelStyles.replace("color:","fill:")});let O=_.leaves(),R=S.selectAll(".treemapLeafGroup").data(O).enter().append("g").attr("class",(A,I)=>`treemapNode treemapLeafGroup leaf${I}${A.data.classSelector?` ${A.data.classSelector}`:""}x`).attr("transform",A=>`translate(${A.x0},${A.y0})`);R.append("rect").attr("width",A=>A.x1-A.x0).attr("height",A=>A.y1-A.y0).attr("class","treemapLeaf").attr("fill",A=>A.parent?x(A.parent.data.name):x(A.data.name)).attr("style",A=>Ye({cssCompiledStyles:A.data.cssCompiledStyles}).nodeStyles).attr("fill-opacity",.3).attr("stroke",A=>A.parent?x(A.parent.data.name):x(A.data.name)).attr("stroke-width",3),R.append("clipPath").attr("id",(A,I)=>`clip-${e}-${I}`).append("rect").attr("width",A=>Math.max(0,A.x1-A.x0-4)).attr("height",A=>Math.max(0,A.y1-A.y0-4)),R.append("text").attr("class","treemapLabel").attr("x",A=>(A.x1-A.x0)/2).attr("y",A=>(A.y1-A.y0)/2).attr("style",A=>{let I="text-anchor: middle; dominant-baseline: middle; font-size: 38px;fill:"+T(A.data.name)+";",M=Ye({cssCompiledStyles:A.data.cssCompiledStyles});return I+M.labelStyles.replace("color:","fill:")}).attr("clip-path",(A,I)=>`url(#clip-${e}-${I})`).text(A=>A.data.name).each(function(A){let I=Ge(this),M=A.x1-A.x0,P=A.y1-A.y0,B=I.node(),F=4,z=M-2*F,$=P-2*F;if(z<10||$<10){I.style("display","none");return}let U=parseInt(I.style("font-size"),10),K=8,ee=28,Y=.6,ce=6,Z=2;for(;B.getComputedTextLength()>z&&U>K;)U--,I.style("font-size",`${U}px`);let ue=Math.max(ce,Math.min(ee,Math.round(U*Y))),Q=U+Z+ue;for(;Q>$&&U>K&&(U--,ue=Math.max(ce,Math.min(ee,Math.round(U*Y))),!(ue$;I.style("font-size",`${U}px`),(B.getComputedTextLength()>z||U(I.x1-I.x0)/2).attr("y",function(I){return(I.y1-I.y0)/2}).attr("style",I=>{let M="text-anchor: middle; dominant-baseline: hanging; font-size: 28px;fill:"+T(I.data.name)+";",P=Ye({cssCompiledStyles:I.data.cssCompiledStyles});return M+P.labelStyles.replace("color:","fill:")}).attr("clip-path",(I,M)=>`url(#clip-${e}-${M})`).text(I=>I.value?v(I.value):"").each(function(I){let M=Ge(this),P=this.parentNode;if(!P){M.style("display","none");return}let B=Ge(P).select(".treemapLabel");if(B.empty()||B.style("display")==="none"){M.style("display","none");return}let F=parseFloat(B.style("font-size")),z=28,$=.6,U=6,K=2,ee=Math.max(U,Math.min(z,Math.round(F*$)));M.style("font-size",`${ee}px`);let ce=(I.y1-I.y0)/2+F/2+K;M.attr("y",ce);let Z=I.x1-I.x0,j=I.y1-I.y0-4,ne=Z-2*4;M.node().getComputedTextLength()>ne||ce+ee>j||ee{"use strict";er();lit={sectionStrokeColor:"black",sectionStrokeWidth:"1",sectionFillColor:"#efefef",leafStrokeColor:"black",leafStrokeWidth:"1",leafFillColor:"#efefef",labelColor:"black",labelFontSize:"12px",valueFontSize:"10px",valueColor:"black",titleColor:"black",titleFontSize:"14px"},cit=o(({treemap:t}={})=>{let e=$n(lit,t);return` + .treemapNode.section { + stroke: ${e.sectionStrokeColor}; + stroke-width: ${e.sectionStrokeWidth}; + fill: ${e.sectionFillColor}; + } + .treemapNode.leaf { + stroke: ${e.leafStrokeColor}; + stroke-width: ${e.leafStrokeWidth}; + fill: ${e.leafFillColor}; + } + .treemapLabel { + fill: ${e.labelColor}; + font-size: ${e.labelFontSize}; + } + .treemapValue { + fill: ${e.valueColor}; + font-size: ${e.valueFontSize}; + } + .treemapTitle { + fill: ${e.titleColor}; + font-size: ${e.titleFontSize}; + } + `},"getStyles"),hxe=cit});var dxe={};ur(dxe,{diagram:()=>uit});var uit,pxe=N(()=>{"use strict";r$();lxe();uxe();fxe();uit={parser:n$,get db(){return new by},renderer:cxe,styles:hxe}});var Kit={};ur(Kit,{default:()=>jit});jl();r7();rd();var cK="c4",lAe=o(t=>/^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(t),"detector"),cAe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(lK(),oK));return{id:cK,diagram:t}},"loader"),uAe={id:cK,detector:lAe,loader:cAe},uK=uAe;var use="flowchart",qPe=o((t,e)=>e?.flowchart?.defaultRenderer==="dagre-wrapper"||e?.flowchart?.defaultRenderer==="elk"?!1:/^\s*graph/.test(t),"detector"),YPe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(bk(),xk));return{id:use,diagram:t}},"loader"),XPe={id:use,detector:qPe,loader:YPe},hse=XPe;var fse="flowchart-v2",jPe=o((t,e)=>e?.flowchart?.defaultRenderer==="dagre-d3"?!1:(e?.flowchart?.defaultRenderer==="elk"&&(e.layout="elk"),/^\s*graph/.test(t)&&e?.flowchart?.defaultRenderer==="dagre-wrapper"?!0:/^\s*flowchart/.test(t)),"detector"),KPe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(bk(),xk));return{id:fse,diagram:t}},"loader"),QPe={id:fse,detector:jPe,loader:KPe},dse=QPe;var wse="er",rBe=o(t=>/^\s*erDiagram/.test(t),"detector"),nBe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Tse(),bse));return{id:wse,diagram:t}},"loader"),iBe={id:wse,detector:rBe,loader:nBe},kse=iBe;var Lhe="gitGraph",IGe=o(t=>/^\s*gitGraph/.test(t),"detector"),OGe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Dhe(),_he));return{id:Lhe,diagram:t}},"loader"),PGe={id:Lhe,detector:IGe,loader:OGe},Rhe=PGe;var ofe="gantt",kVe=o(t=>/^\s*gantt/.test(t),"detector"),EVe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(sfe(),afe));return{id:ofe,diagram:t}},"loader"),SVe={id:ofe,detector:kVe,loader:EVe},lfe=SVe;var yfe="info",RVe=o(t=>/^\s*info/.test(t),"detector"),NVe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(gfe(),mfe));return{id:yfe,diagram:t}},"loader"),vfe={id:yfe,detector:RVe,loader:NVe};var _fe="pie",WVe=o(t=>/^\s*pie/.test(t),"detector"),qVe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Afe(),Cfe));return{id:_fe,diagram:t}},"loader"),Dfe={id:_fe,detector:WVe,loader:qVe};var Vfe="quadrantChart",uUe=o(t=>/^\s*quadrantChart/.test(t),"detector"),hUe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Gfe(),zfe));return{id:Vfe,diagram:t}},"loader"),fUe={id:Vfe,detector:uUe,loader:hUe},Ufe=fUe;var gde="xychart",DUe=o(t=>/^\s*xychart-beta/.test(t),"detector"),LUe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(mde(),pde));return{id:gde,diagram:t}},"loader"),RUe={id:gde,detector:DUe,loader:LUe},yde=RUe;var Cde="requirement",OUe=o(t=>/^\s*requirement(Diagram)?/.test(t),"detector"),PUe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Sde(),Ede));return{id:Cde,diagram:t}},"loader"),BUe={id:Cde,detector:OUe,loader:PUe},Ade=BUe;var Yde="sequence",bHe=o(t=>/^\s*sequenceDiagram/.test(t),"detector"),THe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(qde(),Wde));return{id:Yde,diagram:t}},"loader"),wHe={id:Yde,detector:bHe,loader:THe},Xde=wHe;var epe="class",_He=o((t,e)=>e?.class?.defaultRenderer==="dagre-wrapper"?!1:/^\s*classDiagram/.test(t),"detector"),DHe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Jde(),Zde));return{id:epe,diagram:t}},"loader"),LHe={id:epe,detector:_He,loader:DHe},tpe=LHe;var ipe="classDiagram",NHe=o((t,e)=>/^\s*classDiagram/.test(t)&&e?.class?.defaultRenderer==="dagre-wrapper"?!0:/^\s*classDiagram-v2/.test(t),"detector"),MHe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(npe(),rpe));return{id:ipe,diagram:t}},"loader"),IHe={id:ipe,detector:NHe,loader:MHe},ape=IHe;var Ppe="state",aWe=o((t,e)=>e?.state?.defaultRenderer==="dagre-wrapper"?!1:/^\s*stateDiagram/.test(t),"detector"),sWe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Ope(),Ipe));return{id:Ppe,diagram:t}},"loader"),oWe={id:Ppe,detector:aWe,loader:sWe},Bpe=oWe;var zpe="stateDiagram",cWe=o((t,e)=>!!(/^\s*stateDiagram-v2/.test(t)||/^\s*stateDiagram/.test(t)&&e?.state?.defaultRenderer==="dagre-wrapper"),"detector"),uWe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>($pe(),Fpe));return{id:zpe,diagram:t}},"loader"),hWe={id:zpe,detector:cWe,loader:uWe},Gpe=hWe;var n0e="journey",NWe=o(t=>/^\s*journey/.test(t),"detector"),MWe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(r0e(),t0e));return{id:n0e,diagram:t}},"loader"),IWe={id:n0e,detector:NWe,loader:MWe},i0e=IWe;yt();Vl();xi();var OWe=o((t,e,r)=>{X.debug(`rendering svg for syntax error +`);let n=Li(e),i=n.append("g");n.attr("viewBox","0 0 2412 512"),fn(n,100,512,!0),i.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"),i.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"),i.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"),i.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"),i.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"),i.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"),i.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"),i.append("text").attr("class","error-text").attr("x",1250).attr("y",400).attr("font-size","100px").style("text-anchor","middle").text(`mermaid version ${r}`)},"draw"),QP={draw:OWe},a0e=QP;var PWe={db:{},renderer:QP,parser:{parse:o(()=>{},"parse")}},s0e=PWe;var o0e="flowchart-elk",BWe=o((t,e={})=>/^\s*flowchart-elk/.test(t)||/^\s*flowchart|graph/.test(t)&&e?.flowchart?.defaultRenderer==="elk"?(e.layout="elk",!0):!1,"detector"),FWe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(bk(),xk));return{id:o0e,diagram:t}},"loader"),$We={id:o0e,detector:BWe,loader:FWe},l0e=$We;var I0e="timeline",iqe=o(t=>/^\s*timeline/.test(t),"detector"),aqe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(M0e(),N0e));return{id:I0e,diagram:t}},"loader"),sqe={id:I0e,detector:iqe,loader:aqe},O0e=sqe;var uye="mindmap",Let=o(t=>/^\s*mindmap/.test(t),"detector"),Ret=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(cye(),lye));return{id:uye,diagram:t}},"loader"),Net={id:uye,detector:Let,loader:Ret},hye=Net;var kye="kanban",Xet=o(t=>/^\s*kanban/.test(t),"detector"),jet=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(wye(),Tye));return{id:kye,diagram:t}},"loader"),Ket={id:kye,detector:Xet,loader:jet},Eye=Ket;var ave="sankey",xtt=o(t=>/^\s*sankey-beta/.test(t),"detector"),btt=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(ive(),nve));return{id:ave,diagram:t}},"loader"),Ttt={id:ave,detector:xtt,loader:btt},sve=Ttt;var gve="packet",Itt=o(t=>/^\s*packet(-beta)?/.test(t),"detector"),Ott=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(mve(),pve));return{id:gve,diagram:t}},"loader"),yve={id:gve,detector:Itt,loader:Ott};var _ve="radar",nrt=o(t=>/^\s*radar-beta/.test(t),"detector"),irt=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Ave(),Cve));return{id:_ve,diagram:t}},"loader"),Dve={id:_ve,detector:nrt,loader:irt};var N2e="block",Snt=o(t=>/^\s*block-beta/.test(t),"detector"),Cnt=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(R2e(),L2e));return{id:N2e,diagram:t}},"loader"),Ant={id:N2e,detector:Snt,loader:Cnt},M2e=Ant;var ixe="architecture",eit=o(t=>/^\s*architecture/.test(t),"detector"),tit=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(nxe(),rxe));return{id:ixe,diagram:t}},"loader"),rit={id:ixe,detector:eit,loader:tit},axe=rit;rd();Gt();var mxe="treemap",hit=o(t=>/^\s*treemap/.test(t),"detector"),fit=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(pxe(),dxe));return{id:mxe,diagram:t}},"loader"),gxe={id:mxe,detector:hit,loader:fit};var yxe=!1,wy=o(()=>{yxe||(yxe=!0,dd("error",s0e,t=>t.toLowerCase().trim()==="error"),dd("---",{db:{clear:o(()=>{},"clear")},styles:{},renderer:{draw:o(()=>{},"draw")},parser:{parse:o(()=>{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")},"parse")},init:o(()=>null,"init")},t=>t.toLowerCase().trimStart().startsWith("---")),Ly(l0e,hye,axe),Ly(uK,Eye,ape,tpe,kse,lfe,vfe,Dfe,Ade,Xde,dse,hse,O0e,Rhe,Gpe,Bpe,i0e,Ufe,sve,yve,yde,M2e,Dve,gxe))},"addDiagrams");yt();rd();Gt();var vxe=o(async()=>{X.debug("Loading registered diagrams");let e=(await Promise.allSettled(Object.entries(au).map(async([r,{detector:n,loader:i}])=>{if(i)try{iv(r)}catch{try{let{diagram:a,id:s}=await i();dd(s,a,n)}catch(a){throw X.error(`Failed to load external diagram with key ${r}. Removing from detectors.`),delete au[r],a}}}))).filter(r=>r.status==="rejected");if(e.length>0){X.error(`Failed to load ${e.length} external diagrams`);for(let r of e)X.error(r);throw new Error(`Failed to load ${e.length} external diagrams`)}},"loadRegisteredDiagrams");yt();fr();var _C="comm",DC="rule",LC="decl";var xxe="@import";var bxe="@namespace",Txe="@keyframes";var wxe="@layer";var i$=Math.abs,B4=String.fromCharCode;function RC(t){return t.trim()}o(RC,"trim");function F4(t,e,r){return t.replace(e,r)}o(F4,"replace");function kxe(t,e,r){return t.indexOf(e,r)}o(kxe,"indexof");function Xf(t,e){return t.charCodeAt(e)|0}o(Xf,"charat");function jf(t,e,r){return t.slice(e,r)}o(jf,"substr");function To(t){return t.length}o(To,"strlen");function Exe(t){return t.length}o(Exe,"sizeof");function ky(t,e){return e.push(t),t}o(ky,"append");var NC=1,Ey=1,Sxe=0,ll=0,Ii=0,Cy="";function MC(t,e,r,n,i,a,s,l){return{value:t,root:e,parent:r,type:n,props:i,children:a,line:NC,column:Ey,length:s,return:"",siblings:l}}o(MC,"node");function Cxe(){return Ii}o(Cxe,"char");function Axe(){return Ii=ll>0?Xf(Cy,--ll):0,Ey--,Ii===10&&(Ey=1,NC--),Ii}o(Axe,"prev");function cl(){return Ii=ll2||Sy(Ii)>3?"":" "}o(Lxe,"whitespace");function Rxe(t,e){for(;--e&&cl()&&!(Ii<48||Ii>102||Ii>57&&Ii<65||Ii>70&&Ii<97););return IC(t,$4()+(e<6&&lh()==32&&cl()==32))}o(Rxe,"escaping");function a$(t){for(;cl();)switch(Ii){case t:return ll;case 34:case 39:t!==34&&t!==39&&a$(Ii);break;case 40:t===41&&a$(t);break;case 92:cl();break}return ll}o(a$,"delimiter");function Nxe(t,e){for(;cl()&&t+Ii!==57;)if(t+Ii===84&&lh()===47)break;return"/*"+IC(e,ll-1)+"*"+B4(t===47?t:cl())}o(Nxe,"commenter");function Mxe(t){for(;!Sy(lh());)cl();return IC(t,ll)}o(Mxe,"identifier");function Pxe(t){return Dxe(PC("",null,null,null,[""],t=_xe(t),0,[0],t))}o(Pxe,"compile");function PC(t,e,r,n,i,a,s,l,u){for(var h=0,f=0,d=s,p=0,m=0,g=0,y=1,v=1,x=1,b=0,T="",S=i,w=a,E=n,_=T;v;)switch(g=b,b=cl()){case 40:if(g!=108&&Xf(_,d-1)==58){kxe(_+=F4(OC(b),"&","&\f"),"&\f",i$(h?l[h-1]:0))!=-1&&(x=-1);break}case 34:case 39:case 91:_+=OC(b);break;case 9:case 10:case 13:case 32:_+=Lxe(g);break;case 92:_+=Rxe($4()-1,7);continue;case 47:switch(lh()){case 42:case 47:ky(dit(Nxe(cl(),$4()),e,r,u),u),(Sy(g||1)==5||Sy(lh()||1)==5)&&To(_)&&jf(_,-1,void 0)!==" "&&(_+=" ");break;default:_+="/"}break;case 123*y:l[h++]=To(_)*x;case 125*y:case 59:case 0:switch(b){case 0:case 125:v=0;case 59+f:x==-1&&(_=F4(_,/\f/g,"")),m>0&&(To(_)-d||y===0&&g===47)&&ky(m>32?Oxe(_+";",n,r,d-1,u):Oxe(F4(_," ","")+";",n,r,d-2,u),u);break;case 59:_+=";";default:if(ky(E=Ixe(_,e,r,h,f,i,l,T,S=[],w=[],d,a),a),b===123)if(f===0)PC(_,e,E,E,S,a,d,l,w);else{switch(p){case 99:if(Xf(_,3)===110)break;case 108:if(Xf(_,2)===97)break;default:f=0;case 100:case 109:case 115:}f?PC(t,E,E,n&&ky(Ixe(t,E,E,0,0,i,l,T,i,S=[],d,w),w),i,w,d,l,n?S:w):PC(_,E,E,E,[""],w,0,l,w)}}h=f=m=0,y=x=1,T=_="",d=s;break;case 58:d=1+To(_),m=g;default:if(y<1){if(b==123)--y;else if(b==125&&y++==0&&Axe()==125)continue}switch(_+=B4(b),b*y){case 38:x=f>0?1:(_+="\f",-1);break;case 44:l[h++]=(To(_)-1)*x,x=1;break;case 64:lh()===45&&(_+=OC(cl())),p=lh(),f=d=To(T=_+=Mxe($4())),b++;break;case 45:g===45&&To(_)==2&&(y=0)}}return a}o(PC,"parse");function Ixe(t,e,r,n,i,a,s,l,u,h,f,d){for(var p=i-1,m=i===0?a:[""],g=Exe(m),y=0,v=0,x=0;y0?m[b]+" "+T:F4(T,/&\f/g,m[b])))&&(u[x++]=S);return MC(t,e,r,i===0?DC:l,u,h,f,d)}o(Ixe,"ruleset");function dit(t,e,r,n){return MC(t,e,r,_C,B4(Cxe()),jf(t,2,-2),0,n)}o(dit,"comment");function Oxe(t,e,r,n,i){return MC(t,e,r,LC,jf(t,0,n),jf(t,n+1,-1),n,i)}o(Oxe,"declaration");function BC(t,e){for(var r="",n=0;n{zxe.forEach(t=>{t()}),zxe=[]},"attachFunctions");yt();var Vxe=o(t=>t.replace(/^\s*%%(?!{)[^\n]+\n?/gm,"").trimStart(),"cleanupComments");Q4();PT();function Uxe(t){let e=t.match(K4);if(!e)return{text:t,metadata:{}};let r=Tm(e[1],{schema:bm})??{};r=typeof r=="object"&&!Array.isArray(r)?r:{};let n={};return r.displayMode&&(n.displayMode=r.displayMode.toString()),r.title&&(n.title=r.title.toString()),r.config&&(n.config=r.config),{text:t.slice(e[0].length),metadata:n}}o(Uxe,"extractFrontMatter");er();var mit=o(t=>t.replace(/\r\n?/g,` +`).replace(/<(\w+)([^>]*)>/g,(e,r,n)=>"<"+r+n.replace(/="([^"]*)"/g,"='$1'")+">"),"cleanupText"),git=o(t=>{let{text:e,metadata:r}=Uxe(t),{displayMode:n,title:i,config:a={}}=r;return n&&(a.gantt||(a.gantt={}),a.gantt.displayMode=n),{title:i,config:a,text:e}},"processFrontmatter"),yit=o(t=>{let e=Vt.detectInit(t)??{},r=Vt.detectDirective(t,"wrap");return Array.isArray(r)?e.wrap=r.some(({type:n})=>n==="wrap"):r?.type==="wrap"&&(e.wrap=!0),{text:Kj(t),directive:e}},"processDirectives");function s$(t){let e=mit(t),r=git(e),n=yit(r.text),i=$n(r.config,n.directive);return t=Vxe(n.text),{code:t,title:r.title,config:i}}o(s$,"preprocessDiagram");TA();n3();er();function Hxe(t){let e=new TextEncoder().encode(t),r=Array.from(e,n=>String.fromCodePoint(n)).join("");return btoa(r)}o(Hxe,"toBase64");var vit=5e4,xit="graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa",bit="sandbox",Tit="loose",wit="http://www.w3.org/2000/svg",kit="http://www.w3.org/1999/xlink",Eit="http://www.w3.org/1999/xhtml",Sit="100%",Cit="100%",Ait="border:0;margin:0;",_it="margin:0",Dit="allow-top-navigation-by-user-activation allow-popups",Lit='The "iframe" tag is not supported by your browser.',Rit=["foreignobject"],Nit=["dominant-baseline"];function Xxe(t){let e=s$(t);return $y(),Mz(e.config??{}),e}o(Xxe,"processAndSetConfigs");async function Mit(t,e){wy();try{let{code:r,config:n}=Xxe(t);return{diagramType:(await jxe(r)).type,config:n}}catch(r){if(e?.suppressErrors)return!1;throw r}}o(Mit,"parse");var Wxe=o((t,e,r=[])=>` +.${t} ${e} { ${r.join(" !important; ")} !important; }`,"cssImportantStyles"),Iit=o((t,e=new Map)=>{let r="";if(t.themeCSS!==void 0&&(r+=` ${t.themeCSS}`),t.fontFamily!==void 0&&(r+=` :root { --mermaid-font-family: ${t.fontFamily}}`),t.altFontFamily!==void 0&&(r+=` -:root { --mermaid-alt-font-family: ${t.altFontFamily}}`),e instanceof Map){let s=t.htmlLabels??t.flowchart?.htmlLabels?["> *","span"]:["rect","polygon","ellipse","circle","path"];e.forEach(l=>{ur(l.styles)||s.forEach(u=>{r+=b2e(l.id,u,l.styles)}),ur(l.textStyles)||(r+=b2e(l.id,"tspan",(l?.textStyles||[]).map(u=>u.replace("color","fill"))))})}return r},"createCssStyles"),Qrt=o((t,e,r,n)=>{let i=Krt(t,r),a=WG(e,i,t.themeVariables);return kC(h2e(`${n}{${a}}`),f2e)},"createUserStyles"),Zrt=o((t="",e,r)=>{let n=t;return!r&&!e&&(n=n.replace(/marker-end="url\([\d+./:=?A-Za-z-]*?#/g,'marker-end="url(#')),n=na(n),n=n.replace(/
    /g,"
    "),n},"cleanUpSvgCode"),Jrt=o((t="",e)=>{let r=e?.viewBox?.baseVal?.height?e.viewBox.baseVal.height+"px":Vrt,n=x2e(`${t}`);return``},"putIntoIFrame"),w2e=o((t,e,r,n,i)=>{let a=t.append("div");a.attr("id",r),n&&a.attr("style",n);let s=a.append("svg").attr("id",e).attr("width","100%").attr("xmlns",Frt);return i&&s.attr("xmlns:xlink",i),s.append("g"),t},"appendDivSvgG");function T2e(t,e){return t.append("iframe").attr("id",e).attr("style","width: 100%; height: 100%;").attr("sandbox","")}o(T2e,"sandboxedIframe");var ent=o((t,e,r,n)=>{t.getElementById(e)?.remove(),t.getElementById(r)?.remove(),t.getElementById(n)?.remove()},"removeExistingElements"),tnt=o(async function(t,e,r){wy();let n=k2e(e);e=n.code;let i=sr();X.debug(i),e.length>(i?.maxTextSize??Irt)&&(e=Ort);let a="#"+t,s="i"+t,l="#"+s,u="d"+t,h="#"+u,f=o(()=>{let D=Ge(p?l:h).node();D&&"remove"in D&&D.remove()},"removeTempElements"),d=Ge("body"),p=i.securityLevel===Prt,m=i.securityLevel===Brt,g=i.fontFamily;if(r!==void 0){if(r&&(r.innerHTML=""),p){let k=T2e(Ge(r),s);d=Ge(k.nodes()[0].contentDocument.body),d.node().style.margin=0}else d=Ge(r);w2e(d,t,u,`font-family: ${g}`,$rt)}else{if(ent(document,t,u,s),p){let k=T2e(Ge("body"),s);d=Ge(k.nodes()[0].contentDocument.body),d.node().style.margin=0}else d=Ge("body");w2e(d,t,u)}let y,v;try{y=await Cy.fromText(e,{title:n.title})}catch(k){if(i.suppressErrorRendering)throw f(),k;y=await Cy.fromText("error"),v=k}let x=d.select(h).node(),b=y.type,w=x.firstChild,C=w.firstChild,T=y.renderer.getClasses?.(e,y),E=Qrt(i,b,T,a),A=document.createElement("style");A.innerHTML=E,w.insertBefore(A,C);try{await y.renderer.draw(e,t,Sb.version,y)}catch(k){throw i.suppressErrorRendering?f():Ude.draw(e,t,Sb.version),k}let S=d.select(`${h} svg`),_=y.db.getAccTitle?.(),I=y.db.getAccDescription?.();nnt(b,S,_,I),d.select(`[id="${t}"]`).selectAll("foreignobject > *").attr("xmlns",zrt);let L=d.select(h).node().innerHTML;if(X.debug("config.arrowMarkerAbsolute",i.arrowMarkerAbsolute),L=Zrt(L,p,fr(i.arrowMarkerAbsolute)),p){let k=d.select(h+" svg").node();L=Jrt(L,k)}else m||(L=dh.sanitize(L,{ADD_TAGS:Yrt,ADD_ATTR:Xrt,HTML_INTEGRATION_POINTS:{foreignobject:!0}}));if(g2e(),v)throw v;return f(),{diagramType:b,svg:L,bindFunctions:y.db.bindFunctions}},"render");function rnt(t={}){let e=Gn({},t);e?.fontFamily&&!e.themeVariables?.fontFamily&&(e.themeVariables||(e.themeVariables={}),e.themeVariables.fontFamily=e.fontFamily),Y$(e),e?.theme&&e.theme in ko?e.themeVariables=ko[e.theme].getThemeVariables(e.themeVariables):e&&(e.themeVariables=ko.default.getThemeVariables(e.themeVariables));let r=typeof e=="object"?o7(e):l7();_y(r.logLevel),wy()}o(rnt,"initialize");var E2e=o((t,e={})=>{let{code:r}=kF(t);return Cy.fromText(r,e)},"getDiagramFromText");function nnt(t,e,r,n){d2e(e,t),p2e(e,r,n,e.attr("id"))}o(nnt,"addA11yInfo");var Yf=Object.freeze({render:tnt,parse:jrt,getDiagramFromText:E2e,initialize:rnt,getConfig:sr,setConfig:e3,getSiteConfig:l7,updateSiteConfig:X$,reset:o(()=>{Fy()},"reset"),globalReset:o(()=>{Fy(fh)},"globalReset"),defaultConfig:fh});_y(sr().logLevel);Fy(sr());ep();nr();var int=o((t,e,r)=>{X.warn(t),nD(t)?(r&&r(t.str,t.hash),e.push({...t,message:t.str,error:t})):(r&&r(t),t instanceof Error&&e.push({str:t.message,message:t.message,hash:t.name,error:t}))},"handleError"),S2e=o(async function(t={querySelector:".mermaid"}){try{await ant(t)}catch(e){if(nD(e)&&X.error(e.str),oh.parseError&&oh.parseError(e),!t.suppressErrors)throw X.error("Use the suppressErrors option to suppress these errors"),e}},"run"),ant=o(async function({postRenderCallback:t,querySelector:e,nodes:r}={querySelector:".mermaid"}){let n=Yf.getConfig();X.debug(`${t?"":"No "}Callback function found`);let i;if(r)i=r;else if(e)i=document.querySelectorAll(e);else throw new Error("Nodes and querySelector are both undefined");X.debug(`Found ${i.length} diagrams`),n?.startOnLoad!==void 0&&(X.debug("Start On Load: "+n?.startOnLoad),Yf.updateSiteConfig({startOnLoad:n?.startOnLoad}));let a=new Gt.InitIDGenerator(n.deterministicIds,n.deterministicIDSeed),s,l=[];for(let u of Array.from(i)){X.info("Rendering diagram: "+u.id);if(u.getAttribute("data-processed"))continue;u.setAttribute("data-processed","true");let h=`mermaid-${a.next()}`;s=u.innerHTML,s=H4(Gt.entityDecode(s)).trim().replace(//gi,"
    ");let f=Gt.detectInit(s);f&&X.debug("Detected early reinit: ",f);try{let{svg:d,bindFunctions:p}=await D2e(h,s,u);u.innerHTML=d,t&&await t(h),p&&p(u)}catch(d){int(d,l,oh.parseError)}}if(l.length>0)throw l[0]},"runThrowsErrors"),C2e=o(function(t){Yf.initialize(t)},"initialize"),snt=o(async function(t,e,r){X.warn("mermaid.init is deprecated. Please use run instead."),t&&C2e(t);let n={postRenderCallback:r,querySelector:".mermaid"};typeof e=="string"?n.querySelector=e:e&&(e instanceof HTMLElement?n.nodes=[e]:n.nodes=e),await S2e(n)},"init"),ont=o(async(t,{lazyLoad:e=!0}={})=>{wy(),Dy(...t),e===!1&&await Yve()},"registerExternalDiagrams"),A2e=o(function(){if(oh.startOnLoad){let{startOnLoad:t}=Yf.getConfig();t&&oh.run().catch(e=>X.error("Mermaid failed to initialize",e))}},"contentLoaded");if(typeof document<"u"){window.addEventListener("load",A2e,!1)}var lnt=o(function(t){oh.parseError=t},"setParseErrorHandler"),EC=[],EF=!1,_2e=o(async()=>{if(!EF){for(EF=!0;EC.length>0;){let t=EC.shift();if(t)try{await t()}catch(e){X.error("Error executing queue",e)}}EF=!1}},"executeQueue"),cnt=o(async(t,e)=>new Promise((r,n)=>{let i=o(()=>new Promise((a,s)=>{Yf.parse(t,e).then(l=>{a(l),r(l)},l=>{X.error("Error parsing",l),oh.parseError?.(l),s(l),n(l)})}),"performCall");EC.push(i),_2e().catch(n)}),"parse"),D2e=o((t,e,r)=>new Promise((n,i)=>{let a=o(()=>new Promise((s,l)=>{Yf.render(t,e,r).then(u=>{s(u),n(u)},u=>{X.error("Error parsing",u),oh.parseError?.(u),l(u),i(u)})}),"performCall");EC.push(a),_2e().catch(i)}),"render"),oh={startOnLoad:!0,mermaidAPI:Yf,parse:cnt,render:D2e,init:snt,run:S2e,registerExternalDiagrams:ont,registerLayoutLoaders:kR,initialize:C2e,parseError:void 0,contentLoaded:A2e,setParseErrorHandler:lnt,detectType:f0,registerIconPacks:U4},unt=oh;return $2e(hnt);})(); +:root { --mermaid-alt-font-family: ${t.altFontFamily}}`),e instanceof Map){let s=t.htmlLabels??t.flowchart?.htmlLabels?["> *","span"]:["rect","polygon","ellipse","circle","path"];e.forEach(l=>{hr(l.styles)||s.forEach(u=>{r+=Wxe(l.id,u,l.styles)}),hr(l.textStyles)||(r+=Wxe(l.id,"tspan",(l?.textStyles||[]).map(u=>u.replace("color","fill"))))})}return r},"createCssStyles"),Oit=o((t,e,r,n)=>{let i=Iit(t,r),a=MV(e,i,t.themeVariables);return BC(Pxe(`${n}{${a}}`),Bxe)},"createUserStyles"),Pit=o((t="",e,r)=>{let n=t;return!r&&!e&&(n=n.replace(/marker-end="url\([\d+./:=?A-Za-z-]*?#/g,'marker-end="url(#')),n=na(n),n=n.replace(/
    /g,"
    "),n},"cleanUpSvgCode"),Bit=o((t="",e)=>{let r=e?.viewBox?.baseVal?.height?e.viewBox.baseVal.height+"px":Cit,n=Hxe(`${t}`);return``},"putIntoIFrame"),qxe=o((t,e,r,n,i)=>{let a=t.append("div");a.attr("id",r),n&&a.attr("style",n);let s=a.append("svg").attr("id",e).attr("width","100%").attr("xmlns",wit);return i&&s.attr("xmlns:xlink",i),s.append("g"),t},"appendDivSvgG");function Yxe(t,e){return t.append("iframe").attr("id",e).attr("style","width: 100%; height: 100%;").attr("sandbox","")}o(Yxe,"sandboxedIframe");var Fit=o((t,e,r,n)=>{t.getElementById(e)?.remove(),t.getElementById(r)?.remove(),t.getElementById(n)?.remove()},"removeExistingElements"),$it=o(async function(t,e,r){wy();let n=Xxe(e);e=n.code;let i=tr();X.debug(i),e.length>(i?.maxTextSize??vit)&&(e=xit);let a="#"+t,s="i"+t,l="#"+s,u="d"+t,h="#"+u,f=o(()=>{let L=Ge(p?l:h).node();L&&"remove"in L&&L.remove()},"removeTempElements"),d=Ge("body"),p=i.securityLevel===bit,m=i.securityLevel===Tit,g=i.fontFamily;if(r!==void 0){if(r&&(r.innerHTML=""),p){let k=Yxe(Ge(r),s);d=Ge(k.nodes()[0].contentDocument.body),d.node().style.margin=0}else d=Ge(r);qxe(d,t,u,`font-family: ${g}`,kit)}else{if(Fit(document,t,u,s),p){let k=Yxe(Ge("body"),s);d=Ge(k.nodes()[0].contentDocument.body),d.node().style.margin=0}else d=Ge("body");qxe(d,t,u)}let y,v;try{y=await Ay.fromText(e,{title:n.title})}catch(k){if(i.suppressErrorRendering)throw f(),k;y=await Ay.fromText("error"),v=k}let x=d.select(h).node(),b=y.type,T=x.firstChild,S=T.firstChild,w=y.renderer.getClasses?.(e,y),E=Oit(i,b,w,a),_=document.createElement("style");_.innerHTML=E,T.insertBefore(_,S);try{await y.renderer.draw(e,t,Db.version,y)}catch(k){throw i.suppressErrorRendering?f():a0e.draw(e,t,Db.version),k}let C=d.select(`${h} svg`),D=y.db.getAccTitle?.(),O=y.db.getAccDescription?.();Git(b,C,D,O),d.select(`[id="${t}"]`).selectAll("foreignobject > *").attr("xmlns",Eit);let R=d.select(h).node().innerHTML;if(X.debug("config.arrowMarkerAbsolute",i.arrowMarkerAbsolute),R=Pit(R,p,dr(i.arrowMarkerAbsolute)),p){let k=d.select(h+" svg").node();R=Bit(R,k)}else m||(R=mh.sanitize(R,{ADD_TAGS:Rit,ADD_ATTR:Nit,HTML_INTEGRATION_POINTS:{foreignobject:!0}}));if(Gxe(),v)throw v;return f(),{diagramType:b,svg:R,bindFunctions:y.db.bindFunctions}},"render");function zit(t={}){let e=Un({},t);e?.fontFamily&&!e.themeVariables?.fontFamily&&(e.themeVariables||(e.themeVariables={}),e.themeVariables.fontFamily=e.fontFamily),Lz(e),e?.theme&&e.theme in Eo?e.themeVariables=Eo[e.theme].getThemeVariables(e.themeVariables):e&&(e.themeVariables=Eo.default.getThemeVariables(e.themeVariables));let r=typeof e=="object"?T7(e):w7();Dy(r.logLevel),wy()}o(zit,"initialize");var jxe=o((t,e={})=>{let{code:r}=s$(t);return Ay.fromText(r,e)},"getDiagramFromText");function Git(t,e,r,n){Fxe(e,t),$xe(e,r,n,e.attr("id"))}o(Git,"addA11yInfo");var Kf=Object.freeze({render:$it,parse:Mit,getDiagramFromText:jxe,initialize:zit,getConfig:tr,setConfig:a3,getSiteConfig:w7,updateSiteConfig:Rz,reset:o(()=>{$y()},"reset"),globalReset:o(()=>{$y(ph)},"globalReset"),defaultConfig:ph});Dy(tr().logLevel);$y(tr());rp();er();var Vit=o((t,e,r)=>{X.warn(t),I9(t)?(r&&r(t.str,t.hash),e.push({...t,message:t.str,error:t})):(r&&r(t),t instanceof Error&&e.push({str:t.message,message:t.message,hash:t.name,error:t}))},"handleError"),Kxe=o(async function(t={querySelector:".mermaid"}){try{await Uit(t)}catch(e){if(I9(e)&&X.error(e.str),ch.parseError&&ch.parseError(e),!t.suppressErrors)throw X.error("Use the suppressErrors option to suppress these errors"),e}},"run"),Uit=o(async function({postRenderCallback:t,querySelector:e,nodes:r}={querySelector:".mermaid"}){let n=Kf.getConfig();X.debug(`${t?"":"No "}Callback function found`);let i;if(r)i=r;else if(e)i=document.querySelectorAll(e);else throw new Error("Nodes and querySelector are both undefined");X.debug(`Found ${i.length} diagrams`),n?.startOnLoad!==void 0&&(X.debug("Start On Load: "+n?.startOnLoad),Kf.updateSiteConfig({startOnLoad:n?.startOnLoad}));let a=new Vt.InitIDGenerator(n.deterministicIds,n.deterministicIDSeed),s,l=[];for(let u of Array.from(i)){X.info("Rendering diagram: "+u.id);if(u.getAttribute("data-processed"))continue;u.setAttribute("data-processed","true");let h=`mermaid-${a.next()}`;s=u.innerHTML,s=j4(Vt.entityDecode(s)).trim().replace(//gi,"
    ");let f=Vt.detectInit(s);f&&X.debug("Detected early reinit: ",f);try{let{svg:d,bindFunctions:p}=await ebe(h,s,u);u.innerHTML=d,t&&await t(h),p&&p(u)}catch(d){Vit(d,l,ch.parseError)}}if(l.length>0)throw l[0]},"runThrowsErrors"),Qxe=o(function(t){Kf.initialize(t)},"initialize"),Hit=o(async function(t,e,r){X.warn("mermaid.init is deprecated. Please use run instead."),t&&Qxe(t);let n={postRenderCallback:r,querySelector:".mermaid"};typeof e=="string"?n.querySelector=e:e&&(e instanceof HTMLElement?n.nodes=[e]:n.nodes=e),await Kxe(n)},"init"),Wit=o(async(t,{lazyLoad:e=!0}={})=>{wy(),Ly(...t),e===!1&&await vxe()},"registerExternalDiagrams"),Zxe=o(function(){if(ch.startOnLoad){let{startOnLoad:t}=Kf.getConfig();t&&ch.run().catch(e=>X.error("Mermaid failed to initialize",e))}},"contentLoaded");if(typeof document<"u"){window.addEventListener("load",Zxe,!1)}var qit=o(function(t){ch.parseError=t},"setParseErrorHandler"),FC=[],o$=!1,Jxe=o(async()=>{if(!o$){for(o$=!0;FC.length>0;){let t=FC.shift();if(t)try{await t()}catch(e){X.error("Error executing queue",e)}}o$=!1}},"executeQueue"),Yit=o(async(t,e)=>new Promise((r,n)=>{let i=o(()=>new Promise((a,s)=>{Kf.parse(t,e).then(l=>{a(l),r(l)},l=>{X.error("Error parsing",l),ch.parseError?.(l),s(l),n(l)})}),"performCall");FC.push(i),Jxe().catch(n)}),"parse"),ebe=o((t,e,r)=>new Promise((n,i)=>{let a=o(()=>new Promise((s,l)=>{Kf.render(t,e,r).then(u=>{s(u),n(u)},u=>{X.error("Error parsing",u),ch.parseError?.(u),l(u),i(u)})}),"performCall");FC.push(a),Jxe().catch(i)}),"render"),Xit=o(()=>Object.keys(au).map(t=>({id:t})),"getRegisteredDiagramsMetadata"),ch={startOnLoad:!0,mermaidAPI:Kf,parse:Yit,render:ebe,init:Hit,run:Kxe,registerExternalDiagrams:Wit,registerLayoutLoaders:tN,initialize:Qxe,parseError:void 0,contentLoaded:Zxe,setParseErrorHandler:qit,detectType:m0,registerIconPacks:X4,getRegisteredDiagramsMetadata:Xit},jit=ch;return ube(Kit);})(); /*! Check if previously processed */ /*! * Wait for document loaded before starting the execution diff --git a/packages/renderer/package.json b/packages/renderer/package.json index 0c183fd0e7..d8e4d167b8 100644 --- a/packages/renderer/package.json +++ b/packages/renderer/package.json @@ -25,7 +25,7 @@ "@types/node": "18.19.130", "jest": "29.7.0", "jest-environment-jsdom": "29.7.0", - "mermaid": "11.8.1", + "mermaid": "11.9.0", "ts-jest": "29.4.1", "typescript": "5.8.3" }, diff --git a/yarn.lock b/yarn.lock index e7adc759b5..b3f75b82d4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10775,7 +10775,7 @@ __metadata: markdown-it-sup: "npm:2.0.0" markdown-it-toc-done-right: "npm:4.2.0" md5: "npm:2.3.0" - mermaid: "npm:11.8.1" + mermaid: "npm:11.9.0" ts-jest: "npm:29.4.1" typescript: "npm:5.8.3" languageName: unknown @@ -12263,7 +12263,7 @@ __metadata: languageName: node linkType: hard -"@mermaid-js/parser@npm:^0.6.1": +"@mermaid-js/parser@npm:^0.6.2": version: 0.6.3 resolution: "@mermaid-js/parser@npm:0.6.3" dependencies: @@ -35127,14 +35127,14 @@ __metadata: languageName: node linkType: hard -"katex@npm:^0.16.9": - version: 0.16.10 - resolution: "katex@npm:0.16.10" +"katex@npm:^0.16.22": + version: 0.16.25 + resolution: "katex@npm:0.16.25" dependencies: commander: "npm:^8.3.0" bin: katex: cli.js - checksum: 10/367034012311c695791de4553b3e4c7a9f36d126a0cae17b97f4e8832ced2559961f9fa6d39e0116e1374013e12ac8af159eb014678f06b4acf5e547292ea3e5 + checksum: 10/a4653b5199af59e2960a61c54e3d7139b84ee81ada32c6f0a633daed35bb47298b1361487332d19c7d63a47c82dfe33a63303bf79b100b1b089898909c24e8cf languageName: node linkType: hard @@ -36837,12 +36837,12 @@ __metadata: languageName: node linkType: hard -"marked@npm:^15.0.7": - version: 15.0.12 - resolution: "marked@npm:15.0.12" +"marked@npm:^16.0.0": + version: 16.4.2 + resolution: "marked@npm:16.4.2" bin: marked: bin/marked.js - checksum: 10/deeb619405c0c46af00c99b18b3365450abeb309104b24e3658f46142344f6b7c4117608c3b5834084d8738e92f81240c19f596e6ee369260f96e52b3457eaee + checksum: 10/6e40e40661dce97e271198daa2054fc31e6445892a735e416c248fba046bdfa4573cafa08dc254529f105e7178a34485eb7f82573979cfb377a4530f66e79187 languageName: node linkType: hard @@ -37134,13 +37134,13 @@ __metadata: languageName: node linkType: hard -"mermaid@npm:11.8.1": - version: 11.8.1 - resolution: "mermaid@npm:11.8.1" +"mermaid@npm:11.9.0": + version: 11.9.0 + resolution: "mermaid@npm:11.9.0" dependencies: "@braintree/sanitize-url": "npm:^7.0.4" "@iconify/utils": "npm:^2.1.33" - "@mermaid-js/parser": "npm:^0.6.1" + "@mermaid-js/parser": "npm:^0.6.2" "@types/d3": "npm:^7.4.3" cytoscape: "npm:^3.29.3" cytoscape-cose-bilkent: "npm:^4.1.0" @@ -37150,15 +37150,15 @@ __metadata: dagre-d3-es: "npm:7.0.11" dayjs: "npm:^1.11.13" dompurify: "npm:^3.2.5" - katex: "npm:^0.16.9" + katex: "npm:^0.16.22" khroma: "npm:^2.1.0" lodash-es: "npm:^4.17.21" - marked: "npm:^15.0.7" + marked: "npm:^16.0.0" roughjs: "npm:^4.6.6" stylis: "npm:^4.3.6" ts-dedent: "npm:^2.2.0" uuid: "npm:^11.1.0" - checksum: 10/925ea7bc0f5d72f856a73502182ebc8e94caf219a91f03d4d7acc836c62696cb649a13b4cd67ae1a325ab04e35f2f007913615b3c01d05973a0ddad1361b074e + checksum: 10/33c6841d5c3e707dace508f0bd8ce117957352771a04450d3f385425295796ca7e7bccb31717e52e604d238625e04505267d86c38a1cc5911e650898f4c56a81 languageName: node linkType: hard